diff --git a/Build/SharpDX.props b/Build/SharpDX.props deleted file mode 100644 index b43518457..000000000 --- a/Build/SharpDX.props +++ /dev/null @@ -1,29 +0,0 @@ - - - true - full - $(DefineConstants);DIRECTX11_1;DIRECTX11_2;DirectX12 - - http://sharpdx.org/logo_100x100.png - http://sharpdx.org/License.txt - http://sharpdx.org - false - SharpDX DirectX Direct3D Multimedia MDX 3D - - Alexandre Mutel - Alexandre Mutel - Alexandre Mutel - Copyright (c) 2010-2016 Alexandre Mutel - en-US - 4.0.0 - $(Version) - $(Version)-ci$(SharpDXBuildNumber) - $(SolutionDir)bin - - - $(DefineConstants);SHARPDX_SIGNED - true - $(SolutionDir)sharpdx.snk - true - - \ No newline at end of file diff --git a/Build/SharpDX.targets b/Build/SharpDX.targets deleted file mode 100644 index 8d88eed0c..000000000 --- a/Build/SharpDX.targets +++ /dev/null @@ -1,47 +0,0 @@ - - - - $(DefineConstants);DESKTOP_APP;BEFORE_NET45 - DESKTOP_APP - - - - $(DefineConstants);DESKTOP_APP - DESKTOP_APP - - - - $(DefineConstants);STORE_APP;WINDOWS_API_SET - STORE_APP - - - - REFERENCE - $(DefineConstants);REFERENCE - - - - - - - - - - - - - $([System.IO.Directory]::GetFiles("$(FrameworkSdkPath)", "sn.exe", SearchOption.AllDirectories)[0]) - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Build/SharpDXGen.proj b/Build/SharpDXGen.proj deleted file mode 100644 index 241076643..000000000 --- a/Build/SharpDXGen.proj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Debug - AnyCPU - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Build/build.cmd b/Build/build.cmd deleted file mode 100644 index 47232bb8d..000000000 --- a/Build/build.cmd +++ /dev/null @@ -1,5 +0,0 @@ -msbuild SharpDX-Tools.sln /t:Clean;Build /m /p:Configuration=Release;Platform="Any CPU" -msbuild SharpDX-Sources.sln /t:Clean /m /p:Configuration=Release;Platform="Any CPU" -dotnet restore SharpDX-Sources.sln -msbuild SharpDX-Sources.sln /t:Build /m /p:Configuration=Release;Platform="Any CPU" -msbuild SharpDX-Sources.sln /t:Pack /p:NuGetBuildTasksPackTargets="workaround" /m \ No newline at end of file diff --git a/Documentation/Documentation.csproj b/Documentation/Documentation.csproj index 50b7331d0..85bb8afb2 100644 --- a/Documentation/Documentation.csproj +++ b/Documentation/Documentation.csproj @@ -74,6 +74,7 @@ REM $(SolutionDir)Source\Tools\SharpDoc\Bin\$(ConfigurationName)\SharpDoc.exe --config config.xml + 4.30) -; Updated by Juhani Valtasalmi (4.30 --> 4.42) -; Updated with light modifications by T.Sakkara (4.42 --> 9.07 beta) 1.9.2009 -; - -00000000="Finnish" -00000001="Suomi" -00000002="11" - -; 7-Zip Asetukset - -; Title -01000000="Lisäsetukset" - -; Info Page; Tietoja Ohjelmasta -01000100="Tietoja" -01000103="7-Zip on ilmainen ohjelmisto. Halutessasi voit kuitenkin tukea kehitystyötä rekisteröitymällä." -01000104="Tuki (engl.)" -01000105="Rekisteröidy (engl.)" - -; Folders Page; Asetukset/Kansiot -01000200="Kansiot" -01000210="&Työkansio" -01000211="&Järjestelmän väliaikaiskansio" -01000212="&Nykyinen kansio" -01000213="&Valittu kansio:" -01000214="Käytä vain siirrettäville tietovälineille" - -01000281="Määritä väliaikaistiedostojen sijainti." - -; System Page; Asetukset/Järjestelmäliitännät -01000300="Järjestelmä" -01000301="Liitä 7-Zip järjestelmän valikoihin." -01000302="Ryhmitetty järjestelmävalikko" -01000310="Järjestelmävalikon sisältö:" - -; Language Page; Asetukset/Kieli -01000400="Kieli" -01000401="Kieli:" - - -; 7-Zip Explorer extension; 7-Zip Järjestelmäkytkennät - -; Context menu; Järjestelmämenu -02000101="7-Zip" -02000102="7-Zip komennot" -02000103="Avaa" -02000104="Avaa valittu paketti." -02000105="Purkaa..." -02000106="Purkaa valitun paketin." -02000107="Lisää pakettiin..." -02000108="Lisää tiedostot valittuun pakettiin." -02000109="Eheystarkastus" -0200010A="Tarkistaa valitun paketin eheyden." -0200010B="Purkaa tänne" -0200010C="Purkaa tiedostot valitusta paketista nykyiseen kansioon." -0200010D="Purkaa kansioon {0}" -0200010E="Purkaa tiedostot alikansioon." -0200010F="Lisää pakettiin {0}" -02000110="Lisää valitut tiedostot pakettiin." -02000111="Pakkaa tiedostot ja lähetä..." -02000112="Pakkaa valitut ja lähetä sähköpostilla." -02000113="Lisää pakettiin {0} ja lähetä" -02000114="Lisää valitut tiedostot pakettiin ja lähetä sähköpostilla." - -02000140="" -02000141="" - -; Properties; Ominaisuudet -02000203="Polku" -02000204="Nimi" -02000205="Tiedostomuoto" -02000206="Kansio" -02000207="Koko" -02000208="Pakattu koko" -02000209="Määritteet" -0200020A="Luotu" -0200020B="Käytetty" -0200020C="Muokattu" -0200020D="Kiinteä" -0200020E="Kommentoitu" -0200020F="Suojaus" -02000210="Pilko ennen" -02000211="Pilko jälkeen" -02000212="Sanakirja" -02000213="CRC" -02000214="Tyyppi" -02000215="Anti" -02000216="Menetelmä" -02000217="Isäntäjärjestelmä" -02000218="Tiedostojärjestelmä" -02000219="Käyttäjä" -0200021A="Ryhmä" -0200021B="Lohko" -0200021C="Kuvaus" -0200021D="Kohta" -0200021E="Polun etuliite" -0200021F="Kansioita" -02000220="Tiedostoja" -02000221="Versio" -02000222="Nimi" -02000223="Pilkottu" -02000224="Siirtymä" -02000225="Linkit" -02000226="Lohkot" -02000227="Nimet" - -02000229="64-bittinen" -0200022A="Koodaus: UCS Big-endian" -0200022B="Suoritin" -0200022C="Fyysinen koko" -0200022D="Otsikon koko" -0200022E="Tarkistussumma" -0200022F="Ominaisuudet" -02000230="Virtuaaliosoite" -02000231="ID" -02000232="Lyhytnimi" -02000233="Creator Application" -02000234="Sektorikoko" -02000235="Moodi" -02000236="Linkki" - -; Status bar; Tilarivi -02000301="{0} tiedosto(a) valittu" -02000302="{0} tiedosto(a)" - -02000320="Tiedostoja:" -02000321="Kansioita:" -02000322="Koko:" -02000323="Pakattu koko:" -02000324="Paketteja:" - -; List Context Menu -02000401="&Sarakkeet..." - -02000411="&Avaa" -02000412="&Purkaa..." - -; ToolBar; Työkalut -02000501="Purkaa" - -; Messages; Viestit -02000601="Tätä pakettia ei voi päivittää." -02000602="Pakettia '{0}' ei voida päivittää." -02000603="Ei voida luoda kansioita '{0}.'" -02000604="Tiedoston pakkaustapaa ei tueta." -02000605="Virhe!" -02000606="Liian monta kohdetta." -02000607="Tiedostotyyppiin ei ole liitetty mitään ohjelmaa." -02000608="Ei virheitä." -02000609="Tiedoston '{0}' pakkausta ei voi purkaa." -0200060A="Ei voi avata suojattua pakettia '{0}'. Onko salasana oikea?" -0200060B="Ei riittävästi muistia toimintoa varten" -0200060C="Tuntematon virhe" -0200060D="Pakkaustapaa ei tueta" - -; Dialogs; Ikkunat -02000702="OK" -02000705="&Kyllä" -02000707="Kyllä k&aikkiin" -02000709="&Ei" -0200070B="E&i kaikkiin" - -02000710="Peruuta" -02000711="&Peruuta" -02000713="&Sulje" -02000714="Pysäytä" -02000715="Aloita uudelleen" - -02000720="Ohje" - -; Extract dialog; Purkuikkuna -02000800="Purkaa" -02000801="&Purkaa kansioon" -02000802="Salasana" - -02000810="Polkujen sisällytys:" -02000811="Sisällytä koko polku" -02000812="Nykyiset nimet" -02000813="Älä sisällytä polkuja" - -02000820="Samannimiset tiedostot:" -02000821="Kysy tapauskohtaisesti" -02000822="Korvaa" -02000823="Ohita" -02000824="Uudelleennimeä" -02000825="Uudelleennimeä aiemmat" - -02000830="Tiedostot" -02000831="&Valitut" -02000832="&Kaikki" - -02000881="Purkaa kansioon" - -02000890="Puretaan paketti" - -; Overwrite dialog; Korvausikkuna -02000900="Vahvista tiedoston korvaus" -02000901="Tämä kansio sisältää jo samannimisen tiedoston." -02000902="Haluatko korvata tiedoston" -02000903="tällä tiedostolla?" - -02000911="&Uudelleennimeä automaattisesti" - -02000982="{0} tavua" -02000983="muokattu" - -; Viesti-ikkuna -02000A00="Tietoja" - -02000A80="Viesti" - -02000A91="Tukematon pakkausmenetelmä tiedostolle '{0}'." -02000A92="Tietovirhe tiedostossa '{0}'. Tiedosto on viottunut." -02000A93="Tiedoston '{0}' eheystarkistus epäonnistui. Tiedosto on vioittunut." -02000A94="Virhe avattaessa suojattua pakettia '{0}'. Onko salasana oikea?" -02000A95="CRC-virhe avattaessa suojattua pakettia '{0}'. Onko salasana oikea?" - -; Salasanaikkuna -02000B00="Anna salasana" -02000B01="Anna salasana:" -02000B02="Näytä &salasana" -02000B03="Toista salasana:" -02000B10="Salasanat eivät täsmää" -02000B11="Salasanassa voi käyttää numeroita ja erikoismerkkejä, mutta EI skandinaavisia kirjaimia." -02000B12="Liian pitkä salasana" - -; Progress dialog; Edistymisikkuna -02000C00="Käsitellään" -02000C01="Aikaa kulunut:" -02000C02="Aikaa jäljellä:" -02000C03="Koko:" -02000C04="Nopeus:" -02000C05="Käsitelty:" -02000C06="Pakkaussuhde:" - -02000C10="&Tausta-ajona" -02000C11="&Normaali prioriteetti" -02000C12="&Pysäytä" -02000C13="&Jatka" - -02000C20="Pysäytetty" - -02000C30="Keskeytetäänkö toiminto?" - -; Compress dialog; Pakkausikkuna -02000D00="Lisää pakettiin" -02000D01="&Paketti:" -02000D02="&Päivitystapa:" -02000D03="Pakkaus&:" -02000D04="Pakkaus&menetelmä:" -02000D05="Luo Kiinte&ä paketti" -02000D06="&Parametrit:" -02000D07="Asetukset" -02000D08="Luo itsepurkautuva paketti" -02000D09="Prosessorisäikeet" -02000D0A="Tiedosto&nimien suojaus" -02000D0B="Pakkauksen &taso:" -02000D0C="&Sanakirjan koko:" -02000D0D="&Sanan koko:" -02000D0E="Pakkauksessa tarvittava muistimäärä:" -02000D0F="Purkauksessa tarvittava muistimäärä:" -02000D10="Suojaus" -02000D11="Salausalgoritmi" -02000D12="Prosessorisäikeet" -02000D13="Kiinteä lohkokoko" -02000D14="Muuttuva" -02000D15="Kiinteä" -02000D16="Pakkaa yhteiset tiedostot" - -02000D40="&Osien koko pilkottaessa:" -02000D41="Pilkotun osan koko epäkelpo" -02000D42="Pilkottavien osien koko: {0} tavua.\nPilkotaanko paketti edellämainitun kokoisiin osiin?" - -02000D81="Ei pakkausta" -02000D82="Normaali" -02000D83="Täysi" -02000D84="Nopea" -02000D85="Nopein" -02000D86="Ultra" - -02000D90="Selaa" - -02000DA1="Lisää ja korvaa tiedostoja" -02000DA2="Päivitä ja lisää tiedostoja" -02000DA3="Päivitä olemassaolevat tiedostot" -02000DA4="Synkronoi tiedostot" - -02000DB1="Kaikki tiedostot" - -02000DC0="Lisätään pakettiin" - -; Columns dialog; Sarakeikkuna -02000E00="Sarakkeet" -02000E01="Valitse tässä kansiossa näytettävät sarakkeet. Käytä uudelleenjärjestelyyn painikkeita 'Siirrä ylös' ja 'Siirrä alas'" -02000E02="Aseta valitun sarakkeen &leveydeksi" -02000E03="pikseliä." - -02000E10="Siirrä &ylös" -02000E11="Siirrä &alas" -02000E12="&Näytä" -02000E13="&Piilota" -02000E14="Aseta" - -02000E81="Otsikko" -02000E82="Leveys" - -; Tarkistus -02000F90="Eheystarkistus" - - -; File Manager; Tiedostonhallinta - -03000000="7-Zip Tiedostonhallinta" - -; Menu; Päävalikko -03000102="&Tiedosto" -03000103="&Muokkaa" -03000104="&Näytä" -03000105="Työ&kalut" -03000106="&Ohje" -03000107="&Suosikit" - -; File; Tiedosto-valikko -03000210="&Avaa" -03000211="Avaa sisäisesti" -03000212="Avaa &ulkoisesti" -03000220="&Näytä" -03000221="&Muokkaa" -03000230="Nim&eä uudelleen" -03000231="&Kopioi..." -03000232="&Siirrä..." -03000233="&Poista" -03000240="Ominais&uudet" -03000241="Ku&vaus" -03000242="Laske tarkistussummat" -03000243="Eroavaisuudet" -03000250="Luo kansio" -03000251="Luo tiedosto" -03000260="&Lopeta" -03000270="&Pilko tiedosto..." -03000271="&Yhdistä pilkotut..." - -; Edit; Muokkaa-valikko -03000310="&Kumoa" -03000311="&Toista" -03000320="&Leikkaa" -03000321="K&opioi" -03000322="L&iitä" -03000323="&Poista" -03000330="V&alitse kaikki" -03000331="Poista &valinnat" -03000332="&Käänteinen valinta" -03000333="Valitse..." -03000334="Poista valinta..." -03000335="Valitse tyypin mukaan" -03000336="Poista valinnat tyypin mukaan" - -; View; Näytä-valikko -03000410="Suu&ret kuvakkeet" -03000411="&Pienet kuvakkeet" -03000412="&Luettelo" -03000413="&Tiedot" -03000420="Alkuperäinen järjestys" -03000430="Avaa pääkansio" -03000431="Avaa yläkansio" -03000432="Kansiohistoria..." -03000440="P&äivitä" -03000449="Kansioiden sisältö luetteloituna" -03000450="&Kaksi panelia" -03000451="&Työkalupalkki" -03000460="Pakettipalkki" -03000461="Vakiopalkki" -03000462="Suuret painikkeet" -03000463="Näytä painikkeiden tekstit" - -; Tools; Työkalut-valikko -03000510="&Asetukset..." -03000511="&Nopeustesti" - -; Help; Ohje-valikko -03000610="&Sisältö..." -03000620="&Tietoja ohjelmasta" - -; Favorites; Suosikit -03000710="&Lisää Suosikit-kansioon" -03000720="Kirjanmerkki" - -; Options Dialog; Asetukset-ikkuna - -03010000="Asetukset" - -; Plugins; Lisäosat -03010100="Lisäosat" -03010101="&Lisäosat:" -03010110="Lisäsetukset..." - -; Edit; Muokkaus -03010200="Muokkausohjelmat" -03010201="&Tekstieditori:" -03010202="&Eroavaisuuksien etsintä:" - -; System; Järjestelmäliitännät -03010300="Järjestelmäliitännät" -03010302="Liitä 7-Zip seuraaviin tiedostotyypeihin:" -03010310="Lisäosa" - -; Settings; Asetukset -03010400="Tiedostoikkuna" -03010401="Näytä &yläkansion symboli" -03010402="Näytä &aidot tiedostokuvakkeet" -03010410="Näytä &järjestelmävalikko" -03010420="&Valitse koko rivi" -03010421="Näytä &ruudukko" -03010422="Avaa &kertanapsautuksella" -03010430="Vaihtoehtoinen valintojen &esitystapa" -03010440="Käytä &suuria muistisivuja" - -; Strings; Merkkijonot - -03020201="Kopioi" -03020202="Siirrä" -03020203="Kopioi kansioon:" -03020204="Siirrä kansioon:" -03020205="Kopioidaan..." -03020206="Siirretään..." -03020207="Ei voida siirtää tai kopioida tiedostoja kyseiseen kansioon." -03020208="Toiminto ei ole tuettu." -03020209="Valitse kohdekansio." - -03020210="Vahvista tiedoston poisto" -03020211="Vahvista kansion poisto" -03020212="Vahvista useiden kohteiden poisto" -03020213="Poistetaanko tiedosto '{0}'?" -03020214="Poistetaanko kansio '{0}' ja kaiken sen sisällön?" -03020215="Poistetaanko nämä {0} kohdetta?" -03020216="Poistetaan..." -03020217="Virhe poistettaessa tiedostoa tai kansiota" -03020218="Roskakoriin ei voida siirtää tiedostoa, jolla on pitkä nimi" - -03020220="Nimetään uudelleen..." -03020221="Virhe uudelleennimettäessä tiedostoa tai kansiota" -03020222="Vahvista tiedoston kopioiminen" -03020223="Kopioidaanko tiedostot pakettiin?" - -03020230="Luo uusi kansio" -03020231="Kansion nimi:" -03020232="Uusi kansio" -03020233="Virhe luotaessa kansiota" - -03020240="Luo uusi tiedosto" -03020241="Tiedostonimi:" -03020242="Uusi tiedosto" -03020243="Virhe luotaessa tiedostoa" - -03020250="Valitse" -03020251="Poista valinta" -03020252="Maski:" - -03020260="Kansiohistoria" - -03020280="Tiedostoa '{0}' on muutettu.\nHaluatko päivittää paketin?" -03020281="Ei voida päivittää tiedostoa \n'{0}'." -03020282="Editoria ei voida käynnistää." -03020283="Avataan..." -03020284="Tiedosto vaikuttaa haittaohjelmalta, sillä sen nimi sisältää peräkkäisiä välilyöntejä." - -03020290="" -03020291="&Kuvaus:" - -030202A0="Järjestelmä" - -03020300="Tietokone" -03020301="Verkko" -03020302="Dokumentit" - -03020400="Lisää" -03020401="Purkaa" -03020402="Tarkista eheys" - -03020420="Kopioi" -03020421="Siirrä" -03020422="Poista" -03020423="Ominaisuudet" - -03020500="Pilko tiedosto" -03020501="&Pilko kansioon:" -03020510="Pilkotaan..." -03020520="Vahvista pilkkominen" -03020521="Pilkotaanko tiedosto {0} osaan?" -03020522="Pilkotun osan koon pitää olla pienempi kuin alkuperäisen tiedoston." - -03020600="Yhdistä pilkotut tiedostot" -03020601="&Yhdistä kansioon:" -03020610="Yhdistetään..." -03020620="Valitse vain ensimmäinen tiedosto" -03020621="Tiedostoa ei tunnisteta pilkotuksi" -03020622="Vain yksi pilkottu osatiedosto löytyi" - -03020710="Laskee tarkistussummaa..." -03020720="Tarkistussummat" -03020721="Sisällön CRC-tarkistussumma:" -03020722="Sisällön ja tiedostonimien CRC-tarkistussumma:" - -03020800="Etsitään..." - -03020900="Ominaisuudet" - -03020A01="Toimintoa ei voi suorittaa kansiosta, jonka nimi on pitkä." -03020A02="Valitse yksi tiedosto" -03020A03="Valitse vähintään yksi tiedosto" -03020A04="Tiedosto {0} on jo olemassa" - -; Computer; Tietokone -03031100="Aseman koko" -03031101="Vapaata tilaa" -03031102="Varausyksikön koko" -03031103="Nimi" - -; Network; Verkko -03031200="Paikallinen nimi" -03031201="Palveluntarjoja" - -; Benchmark Dialog; Nopeustesti - -03080000="Nopeustesti" -03080001="Muistin käyttö:" -03080002="Pakkaaminen" -03080003="Purkaminen" -03080004="Nopeus" -03080005="Teho" -03080006="Teho yhteensä" -03080007="Tämänhetkinen" -03080008="Tulos" -03080009="Läpäisyt:" -0308000A="Virheitä:" -0308000B="Suoritinkäyttö" -0308000C="Teho / käyttö" - -;!@LangEnd@! - diff --git a/External/7-Zip/Lang/fr.txt b/External/7-Zip/Lang/fr.txt deleted file mode 100644 index c7d8f7c1c..000000000 --- a/External/7-Zip/Lang/fr.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Nicolas Sierro -; Updated to 7-Zip 9.07 by Philippe Berthault -; -; -; - -00000000="French" -00000001="Français" -00000002="12" - -; 7-Zip Configuration - -; Title -01000000="Configuration de 7-Zip" - -; Info Page -01000100="A propos de 7-Zip" -01000103="7-Zip est un logiciel libre. Cependant vous pouvez soutenir son développement en vous enregistrant." -01000104="Support" -01000105="S'enregistrer" - -; Folders Page -01000200="Dossiers" -01000210="Dossier de &travail" -01000211="Dossier temporaire du &système" -01000212="Dossier &courant" -01000213="Dossier s&pécifié:" -01000214="N'utiliser que pour les médias amovibles" - -01000281="Spécifiez un dossier pour les fichiers d'archive temporaires." - -; System Page -01000300="Système" -01000301="Intégrer 7-Zip au menu contextuel" -01000302="Menu contextuel en cascade" -01000310="Eléments du menu contextuel :" - -; Language Page -01000400="Langue" -01000401="Langue :" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Commandes 7-Zip" -02000103="Ouvrir" -02000104="Ouvrir l'archive sélectionnée." -02000105="Extraire les fichiers..." -02000106="Extraire les fichiers de l'archive sélectionnée." -02000107="Ajouter à l'archive..." -02000108="Ajouter les objets sélectionnés à l'archive." -02000109="Contrôler l'archive" -0200010A="Contrôler l'intégrité de l'archive sélectionnée." -0200010B="Extraire ici" -0200010C="Extraire les fichiers de l'archive sélectionnée dans le dossier actuel." -0200010D="Extraire vers {0}" -0200010E="Extraire dans un sous dossier." -0200010F="Ajouter à {0}" -02000110="Ajouter les éléments sélectionnés à l'archive." -02000111="Compresser et envoyer par mail..." -02000112="Compresser les éléments sélectionnés à l'archive et l'envoyer par mail." -02000113="Compresser vers {0} et envoyer par mail." -02000114="Compresser les éléments sélectionnés à l'archive et l'envoyer par mail." - -02000140="" -02000141="" - -; Properties -02000203="Chemin" -02000204="Nom" -02000205="Extension" -02000206="Dossier" -02000207="Taille" -02000208="Compressé" -02000209="Attributs" -0200020A="Créé le" -0200020B="Accédé le" -0200020C="Modifié le" -0200020D="Solide" -0200020E="Commentaire" -0200020F="Crypté" -02000210="Diviser avant" -02000211="Diviser après" -02000212="Dictionnaire" -02000213="CRC" -02000214="Type" -02000215="Anti" -02000216="Méthode" -02000217="OS hôte" -02000218="Système de fichiers" -02000219="Utilisateur" -0200021A="Groupe" -0200021B="Bloc" -0200021C="Commentaire" -0200021D="Position" -0200021E="Préfixe" -0200021F="Dossiers" -02000220="Fichiers" -02000221="Version" -02000222="Volume" -02000223="Multivolume" -02000224="Offset" -02000225="Liens" -02000226="Blocs" -02000227="Volumes" - -02000229="64 bits" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Taille physique" -0200022D="Taille des en-têtes" -0200022E="Somme de contrôle" -0200022F="Caractéristiques" -02000230="Adresse virtuelle" -02000231="ID" -02000232="Nom court" -02000233="Application créatrice" -02000234="Taille de secteur" -02000235="Mode" -02000236="Lien" - -; Status bar -02000301="{0} objet(s) sélectionné(s)" -02000302="{0} objet(s)" - -02000320="Fichiers:" -02000321="Dossiers:" -02000322="Taille:" -02000323="Taille compressée:" -02000324="Archives:" - -; List Context Menu -02000401="&Colonnes..." - -02000411="&Ouvrir" -02000412="&Extraire..." - -; ToolBar -02000501="Extraire" - -; Messages -02000601="Les opérations de mise à jour ne sont pas disponibles pour cette archive." -02000602="L'archive '{0}' ne peut pas être mise à jour" -02000603="Le dossier '{0}' ne peut pas être créé" -02000604="Le fichier n'est pas une archive valide." -02000605="Erreur à l'invocation de la commande" -02000606="Trop d'objets" -02000607="Aucune application n'est associée avec ce type de fichier" -02000608="Il n'y a pas d'erreurs" -02000609="Le fichier '{0}' ne peut être ouvert comme une archive" -0200060A="L'archive cryptée '{0}' ne peut être ouverte. Mauvais mot de passe?" -0200060B="Le système ne peut allouer la quantité de mémoire nécessaire" -0200060C="Erreur d'origine inconnue" -0200060D="Ce type d'archive n'est pas supporté" - -; Dialogs -02000702="OK" -02000705="&Oui" -02000707="Oui pour tous" -02000709="&Non" -0200070B="Non pour tous" - -02000710="Annuler" -02000711="&Annuler" -02000713="&Fermer" -02000714="Stop" -02000715="Redémarrer" - -02000720="Aide" - -; Extract dialog -02000800="Extraire" -02000801="E&xtraire vers:" -02000802="Mot de passe" - -02000810="Chemins" -02000811="Chemins complets" -02000812="Chemins relatifs" -02000813="Pas de chemin" - -02000820="Mode de remplacement" -02000821="Confirmer avant de remplacer" -02000822="Remplacer sans demander" -02000823="Ignorer les fichiers existants" -02000824="Renommer automatiquement" -02000825="Renommer les fichiers existants" - -02000830="Fichiers" -02000831="&Fichiers sélectionnés" -02000832="&Tous les fichiers" - -02000881="Choisissez un dossier pour l'extraction des fichiers." - -02000890="Extraction" - -; Overwrite dialog -02000900="Confirmer le remplacement de fichier" -02000901="Le dossier de destination contient déjà un fichier avec ce nom." -02000902="Voulez-vous remplacer le fichier existant" -02000903="par celui-ci ?" - -02000911="Renommer &automatiquement" - -02000982="{0} octets" -02000983="modifié le" - -; Messages dialog -02000A00="Messages de diagnostic" - -02000A80="Message" - -02000A91="Méthode de compression non valide pour '{0}'." -02000A92="Donnée erronée dans le fichier '{0}'. Le fichier est corrompu." -02000A93="Échec du contrôle CRC dans le fichier '{0}'. Le fichier est corrompu." -02000A94="Donnée erronée dans le fichier crypté '{0}'. Mauvais mot de passe?" -02000A95="Échec du contrôle CRC dans le fichier crypté '{0}'. Mauvais mot de passe?" - -; Password dialog -02000B00="Entrez le mot de passe" -02000B01="Entrez le mot de passe:" -02000B02="&Afficher le mot de passe" -02000B03="Entrez le mot de passe à nouveau:" -02000B10="Les mots de passe ne correspondent pas" -02000B11="Pour le mot de passe, n'utilisez que des lettres non accentuées, des chiffres et des caractères spéciaux (!, #, $, ...)" -02000B12="Le mot de passe est trop long" - -; Progress dialog -02000C00="Procède" -02000C01="Temps écoulé:" -02000C02="Temps restant:" -02000C03="Taille:" -02000C04="Vitesse:" -02000C05="Traité:" -02000C06="Taux de compression:" - -02000C10="&Arrière plan" -02000C11="&Avant plan" -02000C12="&Pause" -02000C13="&Continuer" - -02000C20="En pause" - -02000C30="Etes vous sur de vouloir annuler ?" - -; Compress dialog -02000D00="Ajouter à l'archive" -02000D01="&Archive:" -02000D02="&Mode de mise à jour:" -02000D03="&Format de l'archive:" -02000D04="Type de &compression:" -02000D05="Créer une archive &solide" -02000D06="&Paramètres:" -02000D07="Options" -02000D08="Créer une archive SF&X" -02000D09="Multi-threading" -02000D0A="Crypter les &noms de fichiers" -02000D0B="N&iveau de compression :" -02000D0C="&Taille du dictionnaire :" -02000D0D="Tai&lle des mots :" -02000D0E="Mémoire pour la compression :" -02000D0F="Mémoire pour la décompression :" -02000D10="Cryptage" -02000D11="Méthode de cryptage:" -02000D12="Nombre de threads CPU:" -02000D13="Taille de bloc solide:" -02000D14="Non-solide" -02000D15="Solide" -02000D16="Compresser des fichiers partagés" - -02000D40="Découper en &volumes, octets:" -02000D41="Taille de volume incorrecte" -02000D42="Taille de volume spécifiée: {0} octets.\nÊtes vous sûr de vouloir découper l'archive dans de tels volumes?" - -02000D81="Aucune" -02000D82="Normale" -02000D83="Maximum" -02000D84="Rapide" -02000D85="Le plus rapide" -02000D86="Ultra" - -02000D90="Choisir" - -02000DA1="Ajouter et remplacer les fichiers" -02000DA2="Mettre à jour et ajouter les fichiers" -02000DA3="Rafraîchir les fichiers existants" -02000DA4="Synchroniser les fichiers" - -02000DB1="Tous les fichiers" - -02000DC0="Compression" - -; Columns dialog -02000E00="Colonnes" -02000E01="Marquez les colonnes que vous désirez afficher. Utilisez les boutons Monter et Descendre pour modifier leur ordre." -02000E02="La colonne sélectionnée doit faire" -02000E03="pixels de &large." - -02000E10="Mon&ter" -02000E11="&Descendre" -02000E12="&Afficher" -02000E13="&Masquer" -02000E14="Sauver" - -02000E81="Titre" -02000E82="Largeur" - -; Testing -02000F90="Contrôle" - - -; File Manager - -03000000="Gestionnaire de fichier de 7-Zip" - -; Menu -03000102="&Fichier" -03000103="&Edition" -03000104="Affic&hage" -03000105="&Outils" -03000106="&Aide" -03000107="Fa&voris" - -; File -03000210="&Ouvrir" -03000211="Ouvrir à l'&intérieur" -03000212="Ouvrir à l'e&xtérieur" -03000220="&Voir" -03000221="&Edition" -03000230="Reno&mmer" -03000231="&Copier vers..." -03000232="&Déplacer vers..." -03000233="S&upprimer" -03000240="P&ropriétés" -03000241="Comme&ntaire" -03000242="Somme de contrôle" -03000243="Diff" -03000250="Créer un dossier" -03000251="Créer un fichier" -03000260="&Quitter" -03000270="Diviser le &fichier ..." -03000271="Combiner les fic&hiers ..." - -; Edit -03000310="&Annuler" -03000311="&Refaire" -03000320="&Couper" -03000321="Co&pier" -03000322="C&oller" -03000323="S&upprimer" -03000330="Sélectionner &tout" -03000331="Désélectionner tout" -03000332="&Inverser la sélection" -03000333="Sélectionner..." -03000334="Désélectionner..." -03000335="Sélectionner par type" -03000336="Désélectionner par type" - -; View -03000410="&Grandes icônes" -03000411="&Petites icônes" -03000412="&Liste" -03000413="&Détails" -03000420="Non trié" -03000430="Ouvrir le dossier racine" -03000431="Dossier parent" -03000432="Historique des dossiers..." -03000440="Actualis&er" -03000449="Vue à plat" -03000450="&2 Fenêtres" -03000451="&Barres d'outils" -03000460="Barre d'archive" -03000461="Barre standard" -03000462="Grands boutons" -03000463="Montrer le texte" - -; Tools -03000510="&Options..." -03000511="Test de performance" - -; Help -03000610="&Contenu..." -03000620="À &propos de 7-Zip..." - -; Favorites -03000710="&Ajouter le répertoire aux favoris" -03000720="Signet" - -; Options Dialog - -03010000="Options" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Options..." - -; Edit -03010200="Editeur" -03010201="&Editeur:" -03010202="&Diff:" - -; System -03010300="Système" -03010302="Associer 7-Zip avec:" -03010310="Plugin" - -; Settings -03010400="Paramètres" -03010401="Afficher l'élément \"..\"" -03010402="Afficher les icônes réelles des fichiers" -03010410="Afficher le menu système" -03010420="Sélectionner toute la ligne" -03010421="Afficher la grille" -03010422="Simple clic pour ouvrir un item" -03010430="Utiliser la sélection alternative" -03010440="Utiliser des grosses pages mémoire" - -; Strings - -03020201="Copier" -03020202="Déplacer" -03020203="Copier dans:" -03020204="Déplacer vers:" -03020205="Copie..." -03020206="Déplacement..." -03020207="Vous ne pouvez pas déplacer ou copier des objets pour de tels dossiers." -03020208="L'opération n'est pas possible." -03020209="Sélectionnez le dossier de destination." - -03020210="Confirmer la suppression du fichier" -03020211="Confirmer la suppression du dossier" -03020212="Confirmer la suppression de tous les fichiers" -03020213="Êtes-vous sûr de vouloir supprimer '{0}'?" -03020214="Êtes-vous sûr de vouloir supprimer le dossier '{0}' et tout ce qu'il contient ?" -03020215="Êtes-vous sûr de vouloir supprimer ces {0} objets ?" -03020216="Suppression..." -03020217="Erreur durant la suppression du fichier ou du dossier" -03020218="Le système ne peut mettre à la corbeille un fichier avec un trop long chemin d'accès" - -03020220="Renommage..." -03020221="Erreur durant le renommage du fichier ou du dossier" -03020222="Confirmation de la copie de fichiers" -03020223="Confirmer la copie du(des) fichier(s)" - -03020230="Créer un dossier" -03020231="Nom du dossier:" -03020232="Nouveau dossier" -03020233="Erreur durant la création du dossier" - -03020240="Créer un fichier" -03020241="Nom du fichier:" -03020242="Nouveau fichier" -03020243="Erreur durant la création du fichier" - -03020250="Sélectionner" -03020251="Désélectionner" -03020252="Masque:" - -03020260="Historique des dossiers" - -03020280="Le fichier '{0}' a été modifié.\nVoulez-vous le mettre à jour dans l'archive ?" -03020281="Impossible de mettre à jour\n'{0}'" -03020282="Impossible de démarrer l'éditeur." -03020283="Ouverture..." -03020284="Le fichier est peut-être un virus (le nom contient des grands espacements pour masquer l'extension)." - -03020290="Commentaire" -03020291="&Commentaire:" - -030202A0="Système" - -03020300="Ordinateur" -03020301="Réseau" -03020302="Documents" - -03020400="Ajouter" -03020401="Extraire" -03020402="Tester" - -03020420="Copier" -03020421="Déplacer" -03020422="Supprimer" -03020423="Informations" - -03020500="Diviser le fichier" -03020501="&Diviser en :" -03020510="Division..." -03020520="Confirmez le découpage" -03020521="Êtes vous sûr de vouloir découper le fichier en {0} volumes?" -03020522="La taille de volume doit être inférieure à la taille du fichier d'origine" - -03020600="Combiner les fichiers" -03020601="&Combiner en :" -03020610="Combinaison..." -03020620="Ne sélectionnez que le premier fichier" -03020621="Ne trouve aucun fichier faisant partie d'une archive divisée" -03020622="Ne trouve qu'un seul fichier faisant partie d'une archive divisée" - -03020710="Calcul de la somme de contrôle..." -03020720="Informations sur la somme de contrôle" -03020721="Somme de contrôle des données" -03020722="Somme de contrôle des données et des noms" - -03020800="Exploration..." - -03020900="Propriétés" - -03020A01="Cette opération ne peut être effectuée depuis un dossier ayant un trop long chemin d'accès" -03020A02="Vous devez sélectionner un fichier" -03020A03="Vous devez sélectionner un ou plusieurs fichiers" -03020A04="Le fichier {0} existe déjà" - -; Computer -03031100="Taille totale" -03031101="Espace libre" -03031102="Taille des clusters" -03031103="Nom de volume" - -; Network -03031200="Nom local" -03031201="Fournisseur" - -; Benchmark Dialog - -03080000="Test de performance" -03080001="Utilisation de la mémoire :" -03080002="Compression" -03080003="Décompression" -03080004="Vitesse" -03080005="Taux" -03080006="Taux total" -03080007="Actuel" -03080008="Résultant" -03080009="Passes:" -0308000A="Erreurs:" -0308000B="Utilisation CPU" -0308000C="Estim.. / Usage" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/fur.txt b/External/7-Zip/Lang/fur.txt deleted file mode 100644 index b81c64f6f..000000000 --- a/External/7-Zip/Lang/fur.txt +++ /dev/null @@ -1,534 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.60 beta -; Translated by Andrea Decorte (Klenje) -; http://softfurlan.altervista.org -; secont l'ortografie uficiâl de Provincie di Udin -; -; - -00000000="Friulian" -00000001="Furlan" -00000002="" - -; 7-Zip Configuration - -; Title -01000000="Configurazion di 7-Zip" - -; Info Page -01000100="Informazions su 7-Zip" -01000103="7-Zip al è un program libar. Purpûr, tu puedis supuartâ il disvilup di 7-Zip cu la regjistrazion. I utents regjistrâts a podaran otignî supuart tecnic." -01000104="Supuart tecnic" -01000105="Regjistre" - -; Folders Page -01000200="Cartelis" -01000210="Cartele di &vore" -01000211="Cartele &provisorie dal sisteme" -01000212="&Corinte" -01000213="&Specificade:" -01000214="Dopre dome pai drives che si puedin gjavâ" - -01000281="Specifiche une posizion pai files provisoris di un archivi." - -; System Page -01000300="Sisteme" -01000301="Integre 7-Zip intal menù contestuâl de shell" -01000302="Menù contestuâl in discjadude" -01000310="Elements dal menù contestuâl:" - -; Language Page -01000400="Lenghe" -01000401="Lenghe:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comants di 7-Zip" -02000103="Viarç archivi" -02000104="Viarç l'archivi selezionât." -02000105="Tire fûr files..." -02000106="Tire fûr files dal archivi selezionât." -02000107="Zonte a un archivi..." -02000108="Zonte i elements selezionâts a un archivi." -02000109="Prove archivi" -0200010A="Prove l'integritât dal archivi selezionât." -0200010B="Tire fûr ca" -0200010C="Tire fûr files dal archivi selezionât inte cartele corinte." -0200010D="Tire fûr in {0}" -0200010E="Tire fûr i files intune sotcartele." -0200010F="Zonte a {0}" -02000110="Zonte i elements selezionâts a un archivi." -02000111="Comprim e mande par email..." -02000112="Comprim i elements selezionâts e mande l'archivi par email." -02000113="Comprim in {0} e mande par email" -02000114="Comprim i elements selezionâts e mande l'archivi par email." - -02000140="" -02000141="" - -; Properties -02000203="Percors" -02000204="Non" -02000205="Estension" -02000206="Cartele" -02000207="Dimension" -02000208="Dimension comprimude" -02000209="Atribûts" -0200020A="Creât" -0200020B="Ultin acès" -0200020C="Modificât" -0200020D="Solit" -0200020E="Comentât" -0200020F="Cifrât" -02000210="Divît prin di" -02000211="Divît daspò di" -02000212="Dizionari" -02000213="CRC" -02000214="Gjenar" -02000215="Anti" -02000216="Metodi" -02000217="SO di origjin" -02000218="Sisteme dai files" -02000219="Utent" -0200021A="Grup" -0200021B="Bloc" -0200021C="Coment" -0200021D="Posizion" -0200021E="Prefìs dal troi" -0200021F="Cartelis" -02000220="Files" -02000221="Version" -02000222="Volum" -02000223="Multivolum" -02000224="Offset" -02000225="Leams" -02000226="Blocs" -02000227="Volums" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Dimension fisiche" -0200022D="Dimension intestazions" -0200022E="Some di control" -0200022F="Caracteristichis" -02000230="Direzion virtuâl" - -; Status bar -02000301="{0} ogjet(s) selezionât(s)" -02000302="{0} ogjet(s)" - -02000320="Files:" -02000321="Cartelis:" -02000322="Dimension:" -02000323="Dimension comprimude:" -02000324="Archivis:" - -; List Context Menu -02000401="&Colonis..." - -02000411="&Viarç" -02000412="&Tire fûr..." - -; ToolBar -02000501="Tire fûr" - -; Messages -02000601="Lis operazions di atualizazion no son supuartadis par chest archivi." -02000602="No si pues atualizâ l'archivi {0}" -02000603="No si pues creâ la cartele '{0}'" -02000604="Il file nol è un archivi supuartât." -02000605="Erôr" -02000606="Masse elements" -02000607="Nissune aplicazion e je associade cu la estension di chest file" -02000608="Nissun erôr cjatât" -02000609="No si pues viarzi il file '{0}' come archivi" -0200060A="No si pues viarzi l'archivi cifrât '{0}'. Ise sbaliade la peraule clâf?" -0200060B="Il sisteme nol rive a cjoli la cuantitât di memorie che e covente" -0200060C="Erôr no cognossût" -0200060D="Gjenar di archivi no supuartât" - -; Dialogs -02000702="Va ben" -02000705="&Sì" -02000707="Sì &a ducj" -02000709="&No" -0200070B="No a &ducj" - -02000710="Scancele" -02000711="S&cancele" -02000713="&Siare" -02000714="Ferme" -02000715="Torne a inviâ" - -02000720="&Jutori" - -; Extract dialog -02000800="Tire fûr" -02000801="Tir&e fûr in:" -02000802="Peraule clâf" - -02000810="Struture des cartelis" -02000811="Percors intîrs" -02000812="Percors corints" -02000813="Nissun percors" - -02000820="Sore scriture" -02000821="Domande prin di scrivi parsore" -02000822="Scrîf parsore cence domandâ" -02000823="Salte i files che esistin" -02000824="Gambie nons in automatic" -02000825="Gambie nons in automatic se a esistin" - -02000830="Files" -02000831="Files &selezionâts" -02000832="Duc&j i files" - -02000881="Specifiche une posizion pai files tirâts fûr." - -02000890="Daûr a tirâ fûr..." - -; Overwrite dialog -02000900="Conferme de sostituzion dal file" -02000901="Inte cartele di destinazion al è za il file processât." -02000902="Vuelistu sostituî il file esistint" -02000903="cun chest file?" - -02000911="&Gambie non in automatic" - -02000982="{0} bytes" -02000983="modificât ai" - -; Messages dialog -02000A00="Messaçs diagnostics" - -02000A80="Messaç" - -02000A91="Il metodi di compression nol è supuartât par '{0}'." -02000A92="Erôr di dâts in '{0}'. Il file al è corot." -02000A93="CRC falît in '{0}'. Il file al è corot." -02000A94="Erôr di dâts tal file cifrât '{0}'. Peraule clâf sbaliade?" -02000A95="CRC falît tal file cifrât '{0}'. Peraule clâf sbaliade?" - -; Password dialog -02000B00="Scrîf peraule clâf" -02000B01="Scrîf la peraule clâf:" -02000B02="&Mostre la peraule clâf" -02000B03="Torne a inserî la peraule clâf:" -02000B10="Lis peraulis clâfs no son compagnis" -02000B11="Dopre dome lis letaris inglesis (no acentadis), i numars e i caratars speciâi (!, #, $, ...) inte peraule clâf" -02000B12="La peraule clâf e je masse lungje" - -; Progress dialog -02000C00="Procès" -02000C01="Timp passât:" -02000C02="Timp restant:" -02000C03="Dimension:" -02000C04="Sveltece:" -02000C05="Elaborât:" -02000C06="Tas di compression:" - -02000C10="&Sfont" -02000C11="P&rin plan" -02000C12="&Pause" -02000C13="&Continue" - -02000C20="In pause" - -02000C30="Sêstu sigûr di volê scancelâ?" - -; Compress dialog -02000D00="Zonte a un archivi" -02000D01="&Archivi:" -02000D02="Mût di at&ualizazion:" -02000D03="&Formât archivi:" -02000D04="&Metodi di compression:" -02000D05="Cree archivi &solit" -02000D06="&Parametris:" -02000D07="Opzions" -02000D08="Cree archivi SF&X" -02000D09="Multi-threading" -02000D0A="Cifre i &nons dai files" -02000D0B="Nive&l di compression:" -02000D0C="&Dimension dizionari:" -02000D0D="Dimension &peraule:" -02000D0E="Utilizazion memorie comprimint:" -02000D0F="Utilizazion memorie decomprimint:" -02000D10="Ciframent" -02000D11="Metodi di ciframent:" -02000D12="Numar di threads de CPU:" -02000D13="Dimension bloc solit:" -02000D14="No-solit" -02000D15="Solit" -02000D16="Comprim i files condividûts" - -02000D40="Divît in &volums, grandece in bytes:" -02000D41="Dimension dai volums sbaliade" -02000D42="Dimension dai volums volude: {0} bytes.\nSêstu sigûr di volê dividi l'archivi in tocs di cheste dimension?" - -02000D81="Cence compression" -02000D82="Normâl" -02000D83="Massim" -02000D84="Svelt" -02000D85="Il pi svelt" -02000D86="Super" - -02000D90="Sgarfe" - -02000DA1="Zonte e sostituìs files" -02000DA2="Atualize e zonte files" -02000DA3="Atualize i files che esistin" -02000DA4="Sincronize i files" - -02000DB1="Ducj i files" - -02000DC0="Daûr a comprimi" - -; Columns dialog -02000E00="Colonis" -02000E01="Selezione lis colonis che tu vuelis rindi visibilis in cheste cartele. Dopre i botons Pare sù e Pare jù par gambiâ l'ordin des colonis." -02000E02="La colone selezionade e à di jessi" -02000E03="pixels &largje." - -02000E10="Par&e sù" -02000E11="Pare &jù" -02000E12="&Mostre" -02000E13="&Plate" -02000E14="Configure" - -02000E81="Titul" -02000E82="Largjece" - -; Testing -02000F90="Daûr a provâ" - - -; File Manager - -03000000="7-Zip - Aministradôr di files" - -; Menu -03000102="&File" -03000103="&Modifiche" -03000104="&Viodude" -03000105="&Imprescj" -03000106="&Jutori" -03000107="&Preferîts" - -; File -03000210="&Viarç" -03000211="Viarç dentri 7-&Zip" -03000212="V&iarç fûr di 7-Zip" -03000220="&Mostre" -03000221="M&odifiche" -03000230="Gambie &non" -03000231="&Copie in..." -03000232="Mô&f in..." -03000233="&Elimine" -03000240="P&ropietâts" -03000241="Comen&t" -03000242="Calcole so&me di control" -03000250="Cree cartele" -03000251="Cree file" -03000260="V&a fûr" -03000270="&Divît file..." -03000271="Torne a &unî files..." - -; Edit -03000310="&Anule" -03000311="Torne a &fâ" -03000320="&Taie" -03000321="&Copie" -03000322="Tac&he" -03000323="&Elimine" -03000330="Selezione d&ut" -03000331="&Deselezione dut" -03000332="&Invertìs selezion" -03000333="Selezione..." -03000334="Deselezione..." -03000335="Selezione par gjenar" -03000336="Deselezione par gjenar" - -; View -03000410="Iconis &grandis" -03000411="Iconis &piçulis" -03000412="&Liste" -03000413="&Detais" -03000420="Cence ordin" -03000430="Viarç cartele principâl" -03000431="Parsore di un nivel" -03000432="Storic des cartelis..." -03000440="&Atualize" -03000449="Viodude plane" -03000450="&2 panei" -03000451="Sbaris dai impresc&j" -03000460="Sbare dai imprescj par l'archivi" -03000461="Sbare dai imprescj standard" -03000462="Botons larcs" -03000463="Mostre test dai botons" - -; Tools -03000510="&Opzions..." -03000511="&Banc di prove" - -; Help -03000610="&Argoments..." -03000620="&Informazions su 7-Zip..." - -; Favorites -03000710="&Zonte cartele ai Preferîts sicu" -03000720="Preferît" - -; Options Dialog - -03010000="Opzions" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Opzions..." - -; Edit -03010200="Editôr" -03010201="&Editôr:" - -; System -03010300="Sisteme" -03010302="Associe 7-Zip cun:" -03010310="Plugin" - -; Settings -03010400="Configurazion" -03010401="Mostre l'element \"..\"" -03010402="Mostre lis veris iconis dai files" -03010410="Mostre il menù dal sisteme" -03010420="&Selezione la rie intire" -03010421="Mostre les liniis de &gridele sot" -03010430="Mût di selezion &alternatîf" -03010440="Dopre pagjinis di memorie &largjis" - -; Strings - -03020201="Copie" -03020202="Môf" -03020203="Copie in:" -03020204="Môf in:" -03020205="Daûr a copiâ..." -03020206="Daûr a movi..." -03020207="No si pues movi o copiâ elements di chest gjenar di cartelis." -03020208="L'operazion no je supuartade." -03020209="Sielç la cartele di destinazion." - -03020210="Conferme de eliminazion dal file" -03020211="Conferme de eliminazion de cartele" -03020212="Conferme de eliminazion di plui files" -03020213="Sêstu sigûr di volê eliminâ '{0}'?" -03020214="Sêstu sigûr di volê eliminâ la cartele '{0}' e dut ce ch'al è lì dentri?" -03020215="Sêstu sigûr di volê eliminâ chescj {0} elements?" -03020216="Daûr a eliminâ..." -03020217="Erôr eliminant un file o une cartele" -03020218="Il sisteme nol pues movi un file cuntun troi lunc te Scovacere" - -03020220="Daûr a gambiâ non..." -03020221="Erôr gambiant non a un file o une cartele" -03020222="Conferme de copie dai files" -03020223="Sêstu sigûr di volê copiâ i files tal archivi" - -03020230="Cree cartele" -03020231="Non de cartele:" -03020232="Gnove cartele" -03020233="Erôr inte creazion de cartele" - -03020240="Cree file" -03020241="Non dal file:" -03020242="Gnûf file" -03020243="Erôr inte creazion dal file" - -03020250="Selezione" -03020251="Deselezione" -03020252="Filtri:" - -03020260="Storic des cartelis" - -03020280="Il file '{0}' al è stât modificât.\nVuelistu atualizâlu intal archivi?" -03020281="No si pues atualizâ il file\n'{0}'" -03020282="No si pues inviâ l'editôr." -03020283="Daûr a viarzi..." -03020284="Il file al samee un virus (il non al à dentri un grum di spazis)." - -03020290="Coment" -03020291="&Coment:" - -030202A0="Sisteme" - -03020300="Ordenadôr" -03020301="Rêt" -03020302="Documents" - -03020400="Zonte" -03020401="Tire fûr" -03020402="Prove" - -03020420="Copie" -03020421="Môf" -03020422="Elimine" -03020423="Info" - -03020500="Divît file" -03020501="&Divît in:" -03020510="Daûr a dividi..." -03020520="Conferme de division" -03020521="Sêstu sigûr di volê dividi il file in {0} tocs?" -03020522="La dimension di un volum e à di jessi plui piçule di chê dal file origjinâl" - -03020600="Torne a unî files" -03020601="&Torne a unî in:" -03020610="Daûr a tornâ a unî..." -03020620="Sielç dome il prin file" -03020621="No si pues rilevâ il file come toc di un file dividût" -03020622="No son stâts cjatâts plui tocs di file dividûts" - -03020710="Daûr a calcolâ la some di control..." -03020720="Informazions su la some di control" -03020721="Some di control CRC pai dâts:" -03020722="Some di control CRC pai dâts e i nons:" - -03020800="Daûr a scandaiâ..." - -03020900="Propietâts" - -03020A01="Cheste operazion no pues jessi clamade di une cartele cuntun troi lunc." -03020A02="Tu scugnis sielzi un file" -03020A03="Tu scugnis sielzi un o plui files" -03020A04="Il file {0} al esist za" - -; Computer -03031100="Dimension totâl" -03031101="Puest libar" -03031102="Dimension setôr" -03031103="Etichete" - -; Network -03031200="Non locâl" -03031201="Furnidôr" - -; Benchmark Dialog - -03080000="Banc di prove" -03080001="Utilizazion memorie:" -03080002="Comprimint" -03080003="Decomprimint" -03080004="Sveltece" -03080005="Valutazion" -03080006="Valutazion totâl" -03080007="Corint" -03080008="Risultant" -03080009="Passaçs:" -0308000A="Erôrs:" -0308000B="Utilizazion CPU" -0308000C="Judizi / Utilizazion" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/fy.txt b/External/7-Zip/Lang/fy.txt deleted file mode 100644 index 54b09c42f..000000000 --- a/External/7-Zip/Lang/fy.txt +++ /dev/null @@ -1,514 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.53 -; Translated by Berend Ytsma -; -; -; - -00000000="Frisian" -00000001="Frysk" -00000002="98" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Konfiguraasje" - -; Info Page -01000100="7-Zip it hoe en het" -01000103="7-Zip is fergees. Mar, jo kinne de ûntwikkeling stypje troch jo te registrearjen." -01000104="Stipe" -01000105="Registrearje" - -; Folders Page -01000200="Mappen" -01000210="&Wurkmap" -01000211="&Tydlikesysteemmap" -01000212="&Aktive" -01000213="&Oantsjutte:" -01000214="Allinnich brûke foar útnimbere skiven" - -01000281="ynfiere fan de lokaasje foar tydlike argyftriemmen." - -; System Page -01000300="Systeem" -01000301="Yntegraasje fan 7-Zip yn ferbânmenu" -01000302="Ferbânmenu yn trepfoarm" -01000310="Ferbânmenu-items:" - -; Language Page -01000400="Taal" -01000401="Taal:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip kommando" -02000103="Argyf iepenje" -02000104="Iepenet it selektearre argyf." -02000105="Triemmen útpakke..." -02000106="Triemmen út it selektearre argyf útpakke." -02000107="Oan argyf taheakje..." -02000108="De selektearre items wurde oan argyf taheakke." -02000109="Argyf teste" -0200010A="Besjocht de yntegriteit fan it selektearre argyf." -0200010B="Hjir útpakke" -0200010C="Triemmen út it selektearre argyf yn de aktive map útpakke." -0200010D="Utpakke yn {0}" -0200010E="Utpakke fan triemmen yn ûndermap." -0200010F="Oan {0} taheakje" -02000110="Foeget de selektearre items ta oan argyf." -02000111="komprimearje en ferstjoere..." -02000112="Komprimearret de selektearre items nei argyf en stjoerd argyf fuort mei e-post." -02000113="Komprimearje nei {0} en poste" -02000114="komprimearret de selektearre items nei argyf en stjoerd argyf fuort mei e-post." - -02000140="" -02000141="" - -; Properties -02000203="Paad" -02000204="Namme" -02000205="Taheaksel" -02000206="Map" -02000207="Grutte" -02000208="Ynpakte grutte" -02000209="Skaaimerk" -0200020A="Makke" -0200020B="Lêste tagong" -0200020C="Feroare" -0200020D="Kompakt" -0200020E="Kommentaar" -0200020F="Fersifere" -02000210="Spjalt foar" -02000211="Spjalt efter" -02000212="Wurdboek" -02000213="CRC" -02000214="Type" -02000215="Anty" -02000216="Metoade" -02000217="Host OS" -02000218="Triemsysteem" -02000219="Brûker" -0200021A="Keppel" -0200021B="Blok" -0200021C="Kommentaar" -0200021D="Posysje" -0200021E="Paad foarheaksel" -0200021F="Mappen" -02000220="Triemmen" -02000221="Ferzje" -02000222="Folume" -02000223="Multifolume" -02000224="Offset" -02000225="Links" -02000226="Blokken" -02000227="Folumes" - -; Status bar -02000301="{0} objekt(en) selektearre" -02000302="{0} objekt(en)" - -02000320="Triemmen:" -02000321="Mappen:" -02000322="Grutte:" -02000323="Komprimearregrutte:" -02000324="Argiven:" - -; List Context Menu -02000401="&Kolommen..." - -02000411="&Iepenje" -02000412="&Utpakke..." - -; ToolBar -02000501="Utpakke" - -; Messages -02000601="Bywurk operaasje waard net stipe troch dit argyf." -02000602="Kin argyf {0} net bywurkje" -02000603="Kin map '{0}' net meitsje " -02000604="Triem is in net stipe argyf." -02000605="Flater" -02000606="Tefolle items" -02000607="Der is gjin applikaasje ferbûn oan dit triem taheaksel" -02000608="Der binne gjin flaters" -02000609="Kin triem '{0} net as argyf iepenje" -0200060A="Kin fersifere argyf '{0}' net iepenje. Ferkeard wachtwurd?" - -; Dialogs -02000702="Okee" -02000705="&Jawis" -02000707="Jawis foar &Alles" -02000709="&Nee" -0200070B="Nee foar A&lles" - -02000710="Ofbrekke" -02000711="&Ofbrekke" -02000713="&Slute" -02000714="Stopje" -02000715="Opnij begjinne" - -02000720="Help" - -; Extract dialog -02000800="Utpakke" -02000801="U&tpakke nei:" -02000802="Wachtwurd" - -02000810="Paad modus" -02000811="Folsleine paadnammen" -02000812="Aktive paadnammen" -02000813="Gjin paadnammen" - -02000820="Oerskriuw modus" -02000821="Freegje foardat jo oerskriuwe" -02000822="Oerskriuwe sûnder pront" -02000823="Besteande triemmen oerslaan" -02000824="Automatysk omneame" -02000825="Automatysk ek by besteande triemmen" - -02000830="Triemmen" -02000831="&Selektearre triemmen" -02000832="&Alle triemmen" - -02000881="De lokaasje om nei út te pakken oantsjutte." - -02000890="Utpakke" - -; Overwrite dialog -02000900="It ferfangen fan de triem befêstigje" -02000901="Bestimmingsmap befettet al in triem mei dizze namme." -02000902="Wolle jo de triem ferfange" -02000903="Mei dizze?" - -02000911="A&utomatysk omneame" - -02000982="{0} bytes" -02000983="Feroare op" - -; Messages dialog -02000A00="Diagnostyk berjocht" - -02000A80="Berjocht" - -02000A91="Net stipe kompresjemetoade foar '{0}'." -02000A92="Data flater yn '{0}'. Triem is beskeadige." -02000A93="CRC mislearre yn '{0}'. Triem is beskeadige." -02000A94="Data flater yn fersifere triem '{0}'. Ferkeard wachtwurd?" -02000A95="CRC mislearre yn fersifere triem '{0}'. Ferkeard wachtwurd?" - -; Password dialog -02000B00="Wachtwurd ynfiere" -02000B01="Wachtwurd ynfiere:" -02000B02="Wachtwurd &sjen litte" -02000B03="Wachwurd opnij ynfiere:" -02000B10="Wachtwurden komme net oerien" -02000B11="Brûk allinne ingelske letters, nûmers en spesjale karakters (!, #, $, ...) foar it wachtwurd" -02000B12="Wachtwurd is te lang" - -; Progress dialog -02000C00="Proses" -02000C01="Ferstrutsen tiid:" -02000C02="Tiid noch te gean:" -02000C03="Totale grutte:" -02000C04="Fluggens:" -02000C05="Ferwurke:" -02000C06="Kompresje nivo:" - -02000C10="&Eftergrûn" -02000C11="&Foargrûn" -02000C12="&Skoftsje" -02000C13="&Ferfetsje" - -02000C20="Skoft" - -02000C30="Binne jo wis dat jo ôfbrekke wolle?" - -; Compress dialog -02000D00="Oan argyf taheakje" -02000D01="&Argyf:" -02000D02="&Bywurkmodus:" -02000D03="Argyf &formaat:" -02000D04="Kompresje&metoade:" -02000D05="&Kompakt argyf meitsje" -02000D06="&Parameters:" -02000D07="Opsjes" -02000D08="Meitsje SF&X-argyf" -02000D09="Meardere streamen" -02000D0A="Fersiferje triem&nammen" -02000D0B="Kompresje&nivo:" -02000D0C="&Wurdboekgrutte:" -02000D0D="&Wurdgrutte:" -02000D0E="Unthâld gebrûk by komprimearjen:" -02000D0F="Unthâld gebrûk by ûntkomprimearjen:" -02000D10="Fersifering" -02000D11="Fersiferingmetoade:" -02000D12="Tal CPU trieden:" -02000D13="Kompakte blokgrutte:" -02000D14="net-kompakt" -02000D15="Kompakt" -02000D16="Dielde triemmen komprimearje" - -02000D40="Spjalte nei &folumes, bytes:" -02000D41="Net juste folumegrutte" -02000D42="Oantsjutte folumegrutte: {0} bytes.\nWolle jo it argyf yn sokke folumes spjalte?" - - -02000D81="Bewarje" -02000D82="Normaal" -02000D83="Maksimum" -02000D84="Fluch" -02000D85="Fluchst" -02000D86="Ultra" - -02000D90="Blêdzje" - -02000DA1="Triemmen taheakje en ferfange" -02000DA2="Triemmen taheakje en bywurkje" -02000DA3="Besteande triemmen ferfarskje" -02000DA4="Triemmen lyk rinne litte" - -02000DB1="Alle triemmen" - -02000DC0="Oan it komprimearjen" - -; Columns dialog -02000E00="Kolommen" -02000E01="Kontrolearje de kolommen dy't jo yn dizze map sichtber meitsje wolle. Brûk de omheech en omleech knoppen om de kolommen te oarderjen." -02000E02="De selektearre kolom soe" -02000E03="Piksels &breed wêze moatte." - -02000E10="Om&heech ferpleatse" -02000E11="Om&leech ferpleatse" -02000E12="&Sjen litte" -02000E13="&Fertopje" -02000E14="Set" - -02000E81="Titel" -02000E82="Breedte" - -; Testing -02000F90="Oan it Testen" - - -; File Manager - -03000000="7-Zip Triembehearder" - -; Menu -03000102="&Triem" -03000103="&Bewurkje" -03000104="&Byld" -03000105="&Ark" -03000106="&Help" -03000107="B&lêdwizers" - -; File -03000210="&Iepenje" -03000211="Iepenje &yn" -03000212="Iepenje bû&ten" -03000220="&Byld" -03000221="&Bewurkje" -03000230="Omne&ame" -03000231="&Kopiearje nei..." -03000232="&Ferpleats nei..." -03000233="&Wiskje" -03000240="E&igenskippen" -03000241="Komme&ntaar" -03000242="Kontrôlesom berekenje" -03000250="Map meitsje" -03000251="Triem meitsje" -03000260="U&tgong" -03000270="Triemmen &spjalte..." -03000271="Triemmen Kom&binearje..." - -; Edit -03000310="&Ungedien meitsje" -03000311="&Opnij" -03000320="Kni&ppe" -03000321="&Kopiearje" -03000322="&Plakke" -03000323="&Wiskje" -03000330="&Alles selektearje" -03000331="Alles net selektearje" -03000332="&Seleksje omdraaien" -03000333="Selektearje..." -03000334="Net selektearje..." -03000335="Selektearje neffens type" -03000336="Net selektearje neffens type" - -; View -03000410="Gru&tte Ikoanen" -03000411="L&ytse Ikoanen" -03000412="&List" -03000413="&Details" -03000420="Net Sortearre" -03000430="Haadmap iepenje" -03000431="Ien nivo omheech" -03000432="Maphistoarje..." -03000440="&Ferfarskje" -03000449="Platte werjefte" -03000450="&2 Panielen" -03000451="&Arkbalke" -03000460="Argyf arkbalke" -03000461="Standert arkbalke" -03000462="Grutte knoppen" -03000463="Knoptekst sjen litte" - -; Tools -03000510="&Opsjes..." -03000511="&Ykpunt" - -; Help -03000610="&Ynhâld..." -03000620="&7-Zip it hoe en het..." - -; Favorites -03000710="Map oan blêdwizers &taheakje as" -03000720="Blêdwizer meitsje" - -; Options Dialog - -03010000="Opsjes" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Opsjes..." - -; Edit -03010200="Bewurker" -03010201="&Bewurker:" - -; System -03010300="Systeem" -03010302="Ferbyn 7-Zip Mei:" -03010310="Plugin" - -; Settings -03010400="Ynstellings" -03010401="\"..\" item sjen litte" -03010402="Echte triem ikoanen sjen litte" -03010410="Systeemmenu sjen litte" -03010420="&Folsleine rige selektearje" -03010421="&Roaster sjen litte" -03010430="&Alternative seleksje modus" -03010440="Brûk &grut ûnthâld siden" - -; Strings - -03020201="Kopiearje" -03020202="Ferpleatse" -03020203="Kopiearje nei:" -03020204="Ferpleats nei:" -03020205="Oan it kopiearren..." -03020206="Oan it ferpleatsen..." -03020207="Jo kinne net foar sokke mappen items kopiearje of ferpleatse" -03020208="Operaasje wurdt net stipe." -03020209="Bestimmingsmap selektearje." - -03020210="It wiskjen fan de triem befêstigje" -03020211="It wiskjen fan de map befêstigje" -03020212="It wiskjen fan meardere triemmen befêstigje" -03020213="Binne jo wis dat jo '{0}' wiskje wolle?" -03020214="Binne jo wis dat jo de map '{0}' en al syn ynhâld wiskje wolle?" -03020215="Binne jo wis dat jo {0} items wiskje wolle?" -03020216="Oan it wiskjen" -03020217="Flater by it wiskjen fan triem of map" - -03020220="Omneame..." -03020221="Flater by it omneamen fan triem of map" -03020222="Triem kopiearje befêstigje" -03020223="Binne jo wis dat jo de triemmen nei it argyf kopiearje wolle?" - -03020230="Map meitsje" -03020231="Mapnamme:" -03020232="Nije map" -03020233="Flater by it meitsjen fan map" - -03020240="Triem meitsje" -03020241="Triem namme:" -03020242="Nije triem" -03020243="Flater by’t meitsjen fan triem" - -03020250="Selektearje" -03020251="Net Selektearje" -03020252="Masker:" - -03020260="Maphistoarje" - -03020280="Triem '{0}' is wizige.\nWolle jo it bywurkje yn it argyf?" -03020281="Kin triem '{0}'\nnet bywurkje" -03020282="Kin bewurker net starte." -03020283="Oan it iepenjen..." - -03020290="Kommentaar" -03020291="&Kommentaar:" - -030202A0="Systeem" - -03020300="Kompjûter" -03020301="Netwurk" - -03020400="Taheakje" -03020401="Utpakke" -03020402="Test" - -03020420="Kopiearje" -03020421="Ferpleatse" -03020422="Wiskje" -03020423="Ynformaasje" - -03020500="Triem spjalte" -03020501="&Spjalt nei:" -03020510="Oan it Spjalten..." -03020520="Spjalte befêstigje" -03020521="Wolle jo de triem spjalte yn {0} dielen?" -03020522="Folumegrutte moat lytser wêze dan de grutte fan it orizjineel" - - -03020600="Triemmen kombinearje" -03020601="&Kombinearje nei:" -03020610="Oan it kombinearjen..." -03020620="Allinne earste triem selektearje" - -03020710="Kontrôlesom oan it berekenjen..." -03020720="Kontrôlesom ynformaasje" -03020721="CRC kontrôlesom foar data:" -03020722="CRC kontrôlesom foar data en nammen:" - -03020800="Oan it skennen..." - -03020900="Eigenskippen" - -; Computer -03031100="Totale grutte" -03031101="Frije romte" -03031102="Kluster grutte" -03031103="Kaartsje" - - -; Network -03031200="Lokale namme" -03031201="Ferskaffer" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Unthâld gebrûk:" -03080002="Oan it komprimearren" -03080003="Oan it ûntkomprimearren" -03080004="Fluggens" -03080005="Wurdearring" -03080006="Totale Wurdearring" -03080007="Hjoeddeiske" -03080008="Resultaat" -03080009="Kear foarbei:" -0308000A="Flaters:" -0308000B="CPU brûkens" -0308000C="Beoardieling / Brûkens" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/gl.txt b/External/7-Zip/Lang/gl.txt deleted file mode 100644 index 15d5e4c80..000000000 --- a/External/7-Zip/Lang/gl.txt +++ /dev/null @@ -1,440 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 3.12 -; Translated by Xosé Calvo -; -; -; -; - -00000000="Galician" -00000001="Galego" -00000002="101" - -; 7-Zip Configuration - -; Title -01000000="Configuración do 7-Zip" - -; Info Page -01000100="Sobre o 7-Zip" -01000103="7-Zip é un programa gratuito. Contodo, pode contribuir co seu desenvolvimento rexistrándose. Se se rexistrar, terá direito a receber apoio técnico." -01000105="Rexistrar" - -; Folders Page -01000200="Cartafois" -01000210="&cartafol de traballo" -01000211="Cartafol &temporario do sistema" -01000212="Cartafol a&ctual" -01000213="&Especificar:" -01000214="Usar só discos removíveis" - -01000281="Especificar unha localización para os ficheiros de arquivo temporarios." - -; System Page -01000300="Sistema" -01000301="Integratar 7-Zip no menú de contexto" -01000302="Menú de contexto en cascata" -01000310="Elementos do Menú de contexto:" - -; Language Page -01000400="Idioma" -01000401="Idioma:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comandos do 7-Zip" -02000103="Abrir arquivo" -02000104="Abre o arquivo seleccionado." -02000105="Extrair ficheiros..." -02000106="Extrae ficheiros do arquivo seleccionado." -02000107="Adicionar ao arquivo..." -02000108="Engade os elementos seleccionados ao arquivo." -02000109="Comprobar arquivo" -0200010A="Comproba a integridade do arquivo seleccionado." -0200010B="Extrair Aquí" -0200010C="Extrae ficheiros do arquivo seleccionado para o cartafol actual." -0200010D="Extrair para {0}" -0200010E="Extrae ficheiros para o sub-cartafol." -0200010F="Adicionar a {0}" -02000110="Engade os elementos seleccionados ao arquivo." -02000111="Comprimir e enviar por correo..." -02000112="Comprime os elementos seleccionados para un arquivo e envía o arquivo mediante correo electrónico." -02000113="Comprimir a {0} e enviar por correo" -02000114="Comprime os elementos seleccionados para ese arquivo e envía o arquivo mediante correo electrónico." - -02000140="" -02000141="" - -; Properties -02000203="Camiño" -02000204="Nome" -02000205="Extensión" -02000206="Cartafol" -02000207="Tamaño" -02000208="Tamaño comprimido" -02000209="Atributos" -0200020A="Creado" -0200020B="Último acceso" -0200020C="Modificado" -0200020D="Sólido" -0200020E="Comentado" -0200020F="Encriptado" -02000210="Partir Antes" -02000211="Partir Depois" -02000212="Dicionario" -02000213="CRC" -02000214="Tipo" -02000215="Anti" -02000216="Método" -02000217="OS do Servidor" -02000218="Sistema de Ficheiros" -02000219="Usario" -0200021A="Grupo" -0200021B="Bloco" -0200021C="Comentario" - -; Status bar -02000301="{0} obxecto(s) seleccionados" -02000302="{0} obxecto(s)" - -; List Context Menu -02000401="&Columnas..." - -02000411="&Abrir" -02000412="&Extrair..." - -; ToolBar -02000501="Extrair" - -; Messages -02000601="Este tipo de arquivo non permite actualizacións." -02000602="Non é posíbel actualizar o arquivo {0}" -02000603="Non é posíbel crear o cartafol '{0}'" -02000604="Formato de ficheiro descoñecido." -02000605="Erro" -02000606="Demasiados elementos" -02000607="Non existe nengunha apliación asociada con esta extensión de ficheiro" -02000608="Non se produciron erross" - -; Dialogs -02000702="Dacordo" -02000705="&Si" -02000707="Si a &Todo" -02000709="&Non" -0200070B="Non a T&odo" - -02000710="Cancelar" -02000711="&Cancelar" -02000713="&Fechar" -02000714="Parar" -02000715="Reiniciar" - -02000720="Axuda" - -; Extract dialog -02000800="Extrair" -02000801="E&xtrair para:" -02000802="Contrasinal" - -02000810="Modo nome de cartafol" -02000811="Camiños completos" -02000812="Camiños actuais" -02000813="Sen camiños" - -02000820="Modo sobreposición" -02000821="Con confirmación" -02000822="Sen confirmación" -02000823="Manter os ficheiros existentes" -02000824="Renomear automaticamente" - -02000830="Ficheiros" -02000831="&Ficheiros seleccionados" -02000832="&Todos os ficheiros" - -02000881="Especificar unha localización de destino para os ficheiros extraídos." - -02000890="Extraindo" - -; Overwrite dialog -02000900="Confirmar a Substitución dos Ficheiros" -02000901="O cartafol de destino xa contén un ficheiro co mesmo nome." -02000902="Desexa substituir o ficheiro co mesmo nome" -02000903="por este?" - -02000911="Renomear &automaticamente" - -02000982="{0} bytes" -02000983="modificado en" - -; Messages dialog -02000A00="mensaxes de diagnóstico" - -02000A80="Mensaxe" - -02000A91="Método de compresión non válido para '{0}'." -02000A92="Erro de datos en '{0}'. O ficheiro está mal." -02000A93="CRC fallou en '{0}'. O ficheiro está mal." - -; Password dialog -02000B00="Introduza o contrasinal" -02000B01="Introduza o contrasinal:" -02000B02="&Mostrar o contrasinal" - -; Progress dialog -02000C00="Procesamento" -02000C01="Tempo pasado:" -02000C02="Tempo restante:" -02000C03="Tamaño:" -02000C04="Velocidade:" - -02000C10="&Fondo" -02000C11="&Letras" -02000C12="&Pausa" -02000C13="&Continuar" - -02000C20="Parado" - -02000C30="Ten a certeza de que quer cancelar?" - -; Compress dialog -02000D00="Adicionar ao arquivo" -02000D01="&Arquivo:" -02000D02="&Modo de actualización:" -02000D03="&Format do arquivo:" -02000D04="&Tipo de compresión:" -02000D05="Crar arquvivo &Sólido" -02000D06="&Parámetros:" -02000D07="Opcións" -02000D08="Crear un arquivo SF&X" -02000D09="Múltiples fíos" -02000D0A="Encriptar os &nomes dos ficheiros" -02000D0B="&Nível de compresión:" -02000D0C="Tamaño do &dicionario:" -02000D0D="Tamaño das &palabras:" -02000D0E="Uso da memoria para a Compresión:" -02000D0F="Uso da memoria para a Decompresión:" - -02000D40="Partir en &volumes, bytes:" - -02000D81="Sen compresión" -02000D82="Normal" -02000D83="Máxima" -02000D84="Rápida" -02000D85="Máis rápida" -02000D86="Ultra" - -02000D90="Ver" - -02000DA1="Adicionar e substituir os ficheiros" -02000DA2="Actualizar e adicionar os ficheiros" -02000DA3="Só actualizar os ficheiros existentes" -02000DA4="Sincronizar os ficheiros" - -02000DB1="Todos os ficheiros" - -02000DC0="Comprimir" - -; Columns dialog -02000E00="Columnas" -02000E01="Seleccione as columnas que pretende facer visíbeis neste modo. Use as teclas RePág e AvPág para reordenar as columnas ao seu gosto." -02000E02="A columna seleccionada debería ter" -02000E03="pixeis de &ancho." - -02000E10="Mover para &Arriba" -02000E11="Mover para &Baixo" -02000E12="&Mostrar" -02000E13="&Ocultar" -02000E14="Fixar" - -02000E81="Título" -02000E82="Lonxitude" - -; Testing -02000F90="Proba" - - -; File Manager - -03000000="Xestor de Ficheiros do 7-Zip" - -; Menu -03000102="&Ficheiro" -03000103="&Modificar" -03000104="&Ver" -03000105="&Ferramentas" -03000106="&Axuda" -03000107="F&avoritos" - -; File -03000210="&Abrir" -03000211="Abrir &Dentro" -03000212="Abrir &Fora" -03000220="&Ver" -03000221="&Modificar" -03000230="Reno&mear" -03000231="&Copiar Para..." -03000232="&Mover Para..." -03000233="&Eliminar" -03000240="&Propriedades" -03000241="Come&ntario" -03000250="Crear Cartafol" -03000251="Crear Ficheiro" -03000260="Sa&ir" - -; Edit -03000310="&Desfacer" -03000311="&Refacer" -03000320="Cor&tar" -03000321="&Copiar" -03000322="&Pegar" -03000323="&Eliminar" -03000330="Seleccionar &Todo" -03000331="De-seleccionar Todo" -03000332="&Inverter a Selección" -03000333="Seleccionar..." -03000334="De-seleccionar..." -03000335="Seleccionar por Tipo" -03000336="De-select por Tipo" - -; View -03000410="Icones &Grandes" -03000411="Icones &Pequenos" -03000412="&Lista" -03000413="&Detalles" -03000420="Sen Orde" -03000430="Abrir o Cartafol Raíz" -03000431="Subir un Nível" -03000432="Histórico de Cartafois..." -03000440="&Refrescar" -03000450="&Dous Paineis" -03000451="&Barras de Ferramentas" -03000460="Barra de Ferramentas de arquivos" -03000461="Barra de Ferramentas normal" -03000462="Botóns grandes" -03000463="Mostrar o Texto dos Botóns" - -; Tools -03000510="&Opcións..." -03000511="&Análise" - -; Help -03000610="&Contido..." -03000620="&Acerca do 7-Zip..." - -; Favorites -03000710="&Adicionar o cartafol aos Favoritos como" -03000720="Marcador" - -; Options Dialog - -03010000="Opciós" - -; Plugins -03010100="Extensións" -03010101="&Extensións:" -03010110="Opcións..." - -; Edit -03010200="Editor" -03010201="&Editor:" - -; System -03010300="Sistema" -03010302="Asociar 7-Zip con:" -03010310="Extensión" - -; Settings -03010400="Axustes" -03010401="Mostrar o elemento \"..\"" -03010402="Mostrar os icones reais dos ficheiros" -03010410="Mostrar o menú do sistema" - -; Strings - -03020201="Copiar" -03020202="Mover" -03020203="Copiar para:" -03020204="Mover para:" -03020205="A copiar..." -03020206="a mover..." -03020207="Non é posíbel mover ou copiar os elementos para eses cartafois." -03020208="Non é posíbel efectuar esta operación." - -03020210="Confirmar Eliminar Ficheiro" -03020211="Confirmar Eliminar Cartafol" -03020212="Confirmar Eliminar Múltiplos Ficheiros" -03020213="Ten a certeza de que desexa eliminar '{0}'?" -03020214="Ten a certeza de que desexa eliminar o cartafol '{0}' e todo o seu contido?" -03020215="Ten a certeza de que desexa eliminar estes {0} elementos?" -03020216="A eliminar..." -03020217="Erro ao eliminar Ficheiro ou Cartafol" - -03020220="A renomear..." -03020221="Erro ao Renomear Ficheiro ou Cartafol" - -03020230="Crear Cartafol" -03020231="Nome do cartafol:" -03020232="Novo Cartafol" -03020233="Erro ao crear o Cartafol" - -03020240="Crear Ficheiro" -03020241="Nome do Ficheiro:" -03020242="Novo Ficheiro" -03020243="Erro ao crear o Ficheiro" - -03020250="Seleccionar" -03020251="De-seleccionar" -03020252="Máscara:" - -03020260="Histórico dos Cartafois" - -03020280="Modificouse o Ficheiro '{0}'.\nQuéreo actualizar no arquivo?" -03020281="Non é posíbel actualizar o ficheiro\n'{0}'" -03020282="Non se pode iniciar o editor." -03020283="Abrindo..." - -03020290="Comentario" -03020291="&Comentario:" - -030202A0="Sistema" - -03020300="Computador" -03020301="Rede" - -03020400="Adicionar" -03020401="Extrair" -03020402="Probar" - -03020420="Copiar" -03020421="Mover" -03020422="Eliminar" -03020423="Información" - -; Computer -03031100="Tamaño total" -03031101="Tamaño disponíbel" -03031102="Tamaño co cluster" -03031103="Etiqueta" - -; Network -03031200="Nome local" -03031201="Fornecedor" - -; Benchmark Dialog - -03080000="Análise" -03080001="Uso da memoria:" -03080002="Compresión" -03080003="Decompresión" -03080004="Rapidez" -03080005="Relación" -03080006="Relación total" -03080007="Actual" -03080008="Resultante" -03080009="Pases:" -0308000A="Erros:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/gu.txt b/External/7-Zip/Lang/gu.txt deleted file mode 100644 index cfe2d182c..000000000 --- a/External/7-Zip/Lang/gu.txt +++ /dev/null @@ -1,547 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip ૯.૦૭ -; Translated by Vinayy Sharrma, વિનય શર્મા દ્વારા અનુવાદિત -;મેહનત કરેલી છે તો પોતાનું નામ લખવામાં કાંઇ બુરાઈ નથી. -;હિન્દ પર ગર્વ કરો, જય હિન્દ ! જય હિન્દી ! જય ગરવી ગુજરાત ! જય ગુજરાતી -; -; - -00000000="Gujarati, Indian, હિન્દુસ્તાન" -00000001="ગુજરાતી" -00000002="71" - -; 7-Zip Configuration - -; Title -01000000="7-જિપ સંરચના" - -; Info Page -01000100="7-જિપ ના વિશે" -01000103="7-જિપ એ નિઃશુલ્ક સૉફ઼્ટવેયર છે. તો પણ, આપ પંજીકૃત(રજિસ્ટર્ડ) થઈને ૭-જ઼િપ ના વિકાસમાં સહયોગ કરી શકો છો." -01000104="સહયોગ" -01000105="પંજીકરણ" - -; Folders Page -01000200="ફોલ્ડર્સ" -01000210="&કાર્યરત ફોલ્ડર" -01000211="&પ્રણાલીનું અસ્થાયી(ટેમ્પરરી) ફોલ્ડર" -01000212="&ચાલુ" -01000213="&નિર્દિષ્ટ:" -01000214="ફક્ત હટાવવા યોગ્ય(રિમૂવેબલ) ડ્રાઈવ માટે જ પ્રયોગ કરો" - -01000281="અસ્થાયી સંગ્રહ ફાઇલ માટે સ્થાન નિર્દિષ્ટ કરો(બતાવો)." - -; System Page -01000300="પ્રણાલી કે તંત્ર" -01000301="૭-જિપ ના શેલ (કવચ) પ્રસંગ મેનુ માં જોડો" -01000302="સોપાનીકૃત(કેસ્કેડેડ) પ્રસંગ મેનુ" -01000310="પ્રસંગ(કોન્ટેક્સ્ટ) મેનુ વસ્તુએઁ:" - -; Language Page -01000400="ભાષા" -01000401="ભાષા:" - - -; 7-Zip Explorer extension - - -; Context menu -02000101="૭-જિપ" -02000102="૭-જિપ આદેશ (કમાંડ્સ)" -02000103="સંગ્રહ ખોલો" -02000104="ચયનિત સંગ્રહ ખોલતા હૈ." -02000105="ફ઼ાઇલ્સ બાહર કાઢો..." -02000106="ચયનિત સંગ્રહમાંથી ફાઇલો બાહર કાઢો ." -02000107="સંગ્રહમાં જોડો..." -02000108="ચયનિત વસ્તુઓંને સંગ્રહમાં જોડે છે." -02000109="સંગ્રહની જાઁચ કરો" -0200010A="ચયનિત સંગ્રહની એકસૂત્રતા તપાસે છે." -0200010B="અહિયાં બાહર કાઢો" -0200010C="ચયનિત સંગ્રહમાં થી વર્તમાન ફોલ્ડરમાં ફાઇલો બાહર કાઢો." -0200010D="{0} માં બાહર કાઢો" -0200010E="ઉપ-ફ઼ોલ્ડર માં ફ઼ાઇલ્સ ને બાહર કાઢો." -0200010F="{0} માં જોડો" -02000110="ચયનિત વસ્તુ ને સંગ્રહ માં જોડો." -02000111="દબાવો(સંકુચન) અને ઇમેલ કરો..." -02000112="ચયનિત વસ્તુઓંને સંકુચિત કરી સંગ્રહમાં જોડે છે અને સંગ્રહ ઈ-મેલ દ્વારા મોકલે છે." -02000113=" {0} માં દબાવો અને ઈમેલ કરો" -02000114="ચયનિત વસ્તુઓંને સંકુચિત કરી સંગ્રહમાં જોડે છે અને સંગ્રહ ઈ-મેલ દ્વારા મોકલે છે." - - -02000140="<ફોલ્ડર>" -02000141="<સંગ્રહ(આર્ચિવ)>" - -; Properties -02000203="માર્ગ" -02000204="નામ" -02000205="વિસ્તાર" -02000206="ફ઼ોલ્ડર" -02000207="આકાર" -02000208="કુલ આકાર" -02000209="વિશેષતા યા ગુણધર્મ" -0200020A="સર્જિત" -0200020B="ચલાવેલી" -0200020C="પરિવર્ધિત" -0200020D="ઠોસ" -0200020E="ટિપ્પણી" -0200020F="ગુપ્તિકૃત" -02000210="ના પૂર્વે વિભાજન(ટુકડે) કરો " -02000211="ના બાદ વિભાજન(ટુકડે) કરો" -02000212="શબ્દકોશ" -02000213="સીઆરસી" -02000214="પ્રકાર" -02000215="વિરોધી" -02000216="પદ્ધતિ" -02000217="યજમાન આજ્ઞાવલી(ઓપરેટિંગ સિસ્ટમ)" -02000218="ફ઼ાઇલ પ્રણાલી" -02000219="પ્રયોગકર્તા" -0200021A="સમૂહ" -0200021B="રોક કે ટુકડાઓ" -0200021C="પ્રતિક્રિયા" -0200021D="સ્થાન" -0200021E="માર્ગ પ્રત્યય" -0200021F="ફોલ્ડરસ" -02000220="ફાઇલ્સ" -02000221="સંસ્કરણ" -02000222="જત્થા" -02000223="અનેક જત્થાઓ" -02000224="ઓફસેટ" -02000225="કડિયાઁ" -02000226="ટુકડ઼ે" -02000227="જત્થે" - -02000229="૬૪-બિટ" -0200022A="મોટું-એન્ડિયન" -0200022B="સીપીયૂ" -0200022C="ભૌતિક આકાર" -0200022D="શીર્ષકોંના આકાર" -0200022E="જાઁચયોગ" -0200022F="ચરિત્રતાઓ" -02000230="આભાસી પત્તો" -02000231="આઈડી" -02000232="સંક્ષિપ્ત નામ" -02000233="સર્જક અનુપ્રયોગ" -02000234="સેક્ટરનો આકાર" -02000235="સ્થિતિ" -02000236="કડ઼ી" - -; Status bar -02000301="{0} ચયનિત વસ્તુ(ઓ)" -02000302="{0} વસ્તુ(ઓ)" - -02000320="ફ઼ાઇલો:" -02000321="ફ઼ોલ્ડર્સ:" -02000322="આકાર:" -02000323="સંકુચિત કરેલું આકાર:" -02000324="સંગ્રહ:" - -; List Context Menu -02000401="&સ્તંભ..." - -02000411="&ખોલો" -02000412="&બાહર કાઢો..." - -; ToolBar -02000501="બાહર કાઢો" - -; Messages -02000601="આ સંગ્રહ માટે અદ્યતનીકૃત સંચાલન સમર્થિત નથી." -02000602="{0} સંગ્રહ ને અદ્યતનીકૃત નથી કરી શકતું" -02000603=" '{0}' ફ઼ોલ્ડર સર્જિત નથી કરી શકતું" -02000604="ફાઇલ સમર્થિત સંગ્રહ નથી." -02000605="ત્રુટિ" -02000606="બહુ વધારે વસ્તુઓ" -02000607="આપેલી ફાઇલના નામના વિસ્તારની સાથે કોઈ પણ સમ્બન્ધિત અનુપ્રયોગ(પ્રોગ્રામ) નથી" -02000608="આમાં કોઈ પણ ત્રુટિ નથી" -02000609="'{0}' ફાઇલને સંગ્રહનાં રૂપમાં નથી ખોલી શકતું" -0200060A="'{0}' ગુપ્તિકૃત સંગ્રહને નથી ખોલી શકતુ. ગલત કૂટશબ્દ?" -0200060B="તંત્ર જરૂરી માત્રામાં મેમોરી(સ્મૃતિ) વિતરિત નથી કરી શકતું" -0200060C="અજ્ઞાત ત્રુટિ" -0200060D="અસમર્થિત સંગ્રહ પ્રકાર" - -; Dialogs -02000702="સારું" -02000705="&હાઁ" -02000707="&બધા માટે હાઁ" -02000709="&ના" -0200070B="&બધા માટે ના" - -02000710="રદ્દ" -02000711="&રદ્દ" -02000713="&બંદ કરો" -02000714="રૂકો" -02000715="પુનઃ શુરુ કરો" - -02000720="મદદ" - -; Extract dialog -02000800="બાહર કાઢો" -02000801="&બાહર કાઢો:" -02000802="કૂટશબ્દ(પાસવર્ડ)" - -02000810="માર્ગ સ્થિતિ" -02000811="આખો માર્ગનામ" -02000812="વર્તમાન માર્ગનામ" -02000813="કોઈ માર્ગ નામ નથી" - -02000820="અધિલેખન રીત" -02000821="અધિલેખન કરતાં પહલાં પૂછો" -02000822="વગર પૂછે અધિલેખન(જુનું મટાવવું) કરો" -02000823="પહેલાથી હયાત ફ઼ાઇલસને છોડો" -02000824="સ્વચાલિત પુન: નામકરણ" -02000825="પહેલાથી હયાત ફ઼ાઇલસનો સ્વચાલિત(ઓટોમેટિક) પુન: નામકરણ કરો" - -02000830="ફ઼ાઇલો" -02000831="&ચયનિત ફ઼ાઇલો" -02000832="&બધા ફ઼ાઇલો" - -02000881="બાહર કાઢેલી ફ઼ાઇલોં માટે સ્થાન નિર્દિષ્ટ કરો." - -02000890="બાહર કાઢી રહ્યું છે" - -; Overwrite dialog -02000900="ફ઼ાઇલ પ્રતિસ્થાપન ને પાક્કુ કરો" -02000901="ગન્તવ્ય ફોલ્ડરમાં પહેલાથી જ પ્રક્રિયા થએલી ફ઼ાઇલ છે." -02000902="શું આપ પહેલાથી હયાત ફ઼ાઇલ ને બદલવું પસંદ કરશો?" -02000903="આની જોડે?" - -02000911="સ્વચાલિત પુન: નામકરણ" - -02000982="{0} બાઇટ્સ" -02000983="ને પરિવર્ધિત" - -; Messages dialog -02000A00="નિદાનાત્મક સંદેશ" - -02000A80="સંદેશ" - -02000A91="'{0}' ના માટે અસહાયક દબાવાવાની પદ્ધતિ." -02000A92="ડેટા ત્રુટિ’{0}' માં. ફ઼ાઇલ તૂટેલી છે." -02000A93="'{0}' માં સીઆરસી અસફલ. ફ઼ાઇલ તૂટેલી છે." -02000A94=" '{0}' ગુપ્તિકૃત(એનક્રિપ્ટેડ) ફાઇલ માં ડેટા ત્રુટિ. ગલત કૂટશબ્દ?" -02000A95=" '{0}' ગુપ્તિકૃત(એનક્રિપ્ટેડ) ફાઇલ માં સીઆરસી અસફલ. ગલત કૂટશબ્દ?" - -; Password dialog -02000B00="કૂટશબ્દ(પાસવર્ડ) ડાલે" -02000B01="કૂટશબ્દ(પાસવર્ડ) ડાલે:" -02000B02="&કૂટશબ્દ(પાસવર્ડ) દિખાવો" -02000B03="કૂટશબ્દ પુનઃ નાખો:" -02000B10="કૂટશબ્દ સહેજેલાંથી જુદૂં છે" -02000B11="કૂટશબ્દ માટે ફક્ત ઇંગ્લિશ વર્ણમાલા, અંકો અને વિશેષ અક્ષરોં (!, #, $, ...) નો જ ઉપયોગ કરો" -02000B12="કૂટશબ્દ ખૂબ જ મોટું છે" - -; Progress dialog -02000C00="પ્રક્રિયા" -02000C01="વ્યતીત સમય:" -02000C02="શેષ બચેલું સમય:" -02000C03="કુલ આકાર:" -02000C04="ગતિ:" -02000C05="પ્રક્રિયા કરેલું:" -02000C06="દબાવાનું(આકાર છોટા કરવાનું)અનુપાત:" - -02000C10="&પૄષ્ઠ્ભૂમિ" -02000C11="&અગ્રભૂમિ(ડેસ્ક્ટોપ)" -02000C12="&વિશ્રામ" -02000C13="&જારી રાખો" - -02000C20="થોભેલું" - -02000C30="તુમે રદ્દ કરવા ચાહો છો. શું તમને યકીન છે?" - -; Compress dialog -02000D00="સંગ્રહમાં જોડો" -02000D01="&સંગ્રહ:" -02000D02="&અદ્યતનીકરણ સ્થિતિ(મોડ):" -02000D03="સંગ્રહ &ઢાઁચા:" -02000D04="&સંકુચન વિધિ:" -02000D05="&ઠોસ સંગ્રહ તૈયાર કરો" -02000D06="&પરિમાપ:" -02000D07="વિકલ્પ" -02000D08="&એસએફ઼એક્સ(SFX) સંગ્રહ તૈયાર કરો" -02000D09="અનેક-સૂત્રી" -02000D0A="ફ઼ાઇલ &નામ ગુપ્તિકરણ કરો" -02000D0B="&સંકુચન સ્તર:" -02000D0C="&શબ્દકોશ આકાર:" -02000D0D="&શબ્દ આકાર:" -02000D0E="સંકુચન માટે સ્મૃતિ પ્રયોગ:" -02000D0F="પ્રસારણ માટે સ્મૃતિ પ્રયોગ:" -02000D10="ગુપ્તિકરણ" -02000D11="ગુપ્તિકરણ પદ્ધતિ:" -02000D12="સીપીયૂ સૂત્ર સંખ્યા:" -02000D13="ઠોસ ટુકડાનો આકાર:" -02000D14="અ-ઠોસ" -02000D15="ઠોસ" -02000D16="સાઝી ફાઇલો સંકુચિત કરો" - -02000D40="જત્થાઓમાં વિભાજન, બાઇટ્સ:" -02000D41="જત્થાનો આકાર ખોટું છે" -02000D42="નિર્દેશિત જત્થા આકાર: {0} બાઇટસ.\n આપ સંગ્રહને એવા જત્થાઓમાં વિભાજિત કરવા ચાહો છો, શું તમને યકીન છે?" - -02000D81="ભંડારણ" -02000D82="સાધારણ" -02000D83="અધિકતમ" -02000D84="તેજ" -02000D85="સર્વાધિક તેજ" -02000D86="અત્યન્ત" - -02000D90="બ્રાઉજ યા ઘૂમો" - -02000DA1="ફ઼ાઇલેં જોડો અને પ્રતિસ્થાપિત કરો" -02000DA2="ફાઇલો અદ્યતનીકૃત કરો અને જોડો" -02000DA3="અવસ્થિત ફાઇલોં તાજા કરો" -02000DA4="ફાઇલોં સમક્રમણ(સિંક્રોનાઈજ઼) કરો" - -02000DB1="બધા ફાઇલોં" - -02000DC0="સંકુચન કરી રહ્યું છે" - -; Columns dialog -02000E00="સ્તંભ" -02000E01="આ ફોલ્ડરમાં જો સ્તંભ, તમને દિખાઈ દે એવા બનાવવા ચાહો છો તેમને ટિક(ચયન) કરો. સ્તંભો નો ક્રમ બદલવા માટે ઊપર લે જાઓ અને નીચે લે જાઓ બટન(ખટકા)નો ઉપયોગ કરો" -02000E02="ચયનિત સ્તંભ" -02000E03="&પિક્સેલ(બૂઁદ) ચૌડ઼ે." - -02000E10="&ઊપર લઈ જાઓ" -02000E11="&નીચે લઈ જાઓ" -02000E12="&દિખાવો" -02000E13="&છુપાવો" -02000E14="સેટ(સ્થિર)" - -02000E81="શીર્ષક" -02000E82="ચૌડ઼ાઈ" - -; Testing -02000F90="પરીક્ષણ" - - -; file Manager - -03000000="૭-જિપ ફ઼ાઇલ પ્રબન્ધક" - -; Menu -03000102="&ફ઼ાઇલ" -03000103="&સંપાદન" -03000104="&દર્શન" -03000105="&ઔજાર" -03000106="&મદદ" -03000107="&મનપસંદ" - -; file -03000210="&ખોલો" -03000211="&અંદર ખોલો" -03000212="&બાહર ખોલો" -03000220="&દૃશ્ય" -03000221="&સંપાદન" -03000230="&પુન: નામકરણ" -03000231="&માં નકલ બનાવો..." -03000232="&માં લઇ જાઓ..." -03000233="&મિટાવો" -03000240="&સંપત્તિયાઁ યા ગુણ" -03000241="&ટિપ્પણી" -03000242="&જાઁચ યોગની ગણના કરો" -03000243="&અન્તર" -03000250="&ફ઼ોલ્ડર તૈયાર કરો" -03000251="&ફ઼ાઇલ તૈયાર કરો" -03000260="&નિર્ગમન" -03000270="&ફ઼ાઇલનો વિભાજન કરો..." -03000271="&ફ઼ાઇલનો સંયોજન કરો..." - -; Edit -03000310="&પુર્વસ્થિતી(પહેલા જેવું)" -03000311="&પુનઃ કરો" -03000320="&કાપો" -03000321="&નકલ કરો" -03000322="&ચિપકાવો" -03000323="&મિટાવો" -03000330="&બધા ચયન કરો" -03000331="&બધા અચયનિત કરો" -03000332="&ચયન ઊંધું કરો" -03000333="ચયન કરો..." -03000334="અચયન કરો..." -03000335="પ્રકાર દ્વારા ચયન" -03000336="પ્રકાર દ્વારા અચયન" - -; View -03000410="મોટાં પ્રતીક" -03000411="લઘુ પ્રતીક" -03000412="&સૂચી" -03000413="&વર્ણન" -03000420="અવિતરિત" -03000430="મૂલ ફ઼ોલ્ડર ખોલો" -03000431="એક સ્તર ઊપર ચઢ઼ો" -03000432="ફ઼ોલ્ડરો નો ઇતિહાસ..." -03000440="&તાજા કરો" -03000449="ચૌડ઼ા દૃશ્ય" -03000450="&૨ ફ઼લક" -03000451="&ઔજાર પટ્ટીઓ" -03000460="સંગ્રહ ઔજાર પટ્ટી" -03000461="માનક ઔજાર પટ્ટી" -03000462="મોટા ખટકા(બટન)" -03000463="ખટકા(બટન)ના શબ્દ દિખાવો" - -; Tools -03000510="&વિકલ્પ..." -03000511="&બેઞ્ચમાર્ક(પ્રામાણિક તુલના)" - -; Help -03000610="&સામગ્રી..." -03000620="૭-જિપ ના વિશેમાં..." - -; Favorites -03000710="&ફ઼ોલ્ડર મનપસંદમાં એવી રીતે જોડો..." -03000720="પુસ્તચિન્હ" - -; Options Dialog - -03010000="વિકલ્પ" - -; Plugins -03010100="પ્લગઇન(શક્તિદાયક)" -03010101="&પ્લગઇન(શક્તિદાયક):" -03010110="વિકલ્પ..." - -; Edit -03010200="સંપાદક" -03010201="&સંપાદક:" -03010202="&અન્તર:" - -; System -03010300="પ્રણાલી કે તંત્ર" -03010302="સંબધિત કરો ૭-જિપ ના સાથે:" -03010310="પ્લગઇન(શક્તિદાયક)" - -; Settings -03010400="વ્યવસ્થાઓ" -03010401="દિખાવો \"..\"વસ્તુ" -03010402="વાસ્તવિક ફ઼ાઇલ પ્રતીક બતાવો" -03010410="તંત્ર નો મેનુ બતાવો" -03010420="&આખી પન્ક્તિનું ચયન" -03010421=" &ગ્રિડ(જાલ) રેખા દિખાવો" -03010422="વસ્તુ ખોલવા માટે એક જ(સિંગલ)-ક્લિક" -03010430="&વૈકલ્પિક ચયન સ્થિતિ" -03010440="&મોટા સ્મૃતિ પૃષ્ઠનો પ્રયોગ કરો" - -; Strings - -03020201="નકલ" -03020202="લઇ જાઓ" -03020203="માં નકલ:" -03020204="માં લઇ જાઓ:" -03020205="નકલ..." -03020206="લઇ જાઇ રહ્યુ છે..." -03020207="આવા ફોલ્ડરો માટે તમે વસ્તુઓં ને હટાવવું કે નકલ કરવું નથી કરી શકતા." -03020208="આ ફોલ્ડર માટે આ સઞ્ચાલન ક્રિયા સમર્થિત નથી." -03020209="ગન્તવ્ય ફોલ્ડર ચયનિત કરો." - -03020210="ફ઼ાઇલ મિટાવો આ પાક્કું કરો" -03020211="ફ઼ોલ્ડર મિટાવો પાક્કું કરો" -03020212="અનેક ફ઼ાઇલ મિટાવો પાક્કું કરો" -03020213="શું તમને યકીન છે કે તમે મેટવવા ચાહો છો '{0}'?" -03020214="શું તમને યકીન છે કે તમે ફ઼ોલ્ડર મિટાવવા માંગો છો ’{0}' અને આની બધી સામગ્રી પણ?" -03020215="શું તમને યકીન છે કે તમે મિટાવવા માંગો છો આ {0} વસ્તુઓં ને?" -03020216="મેટવી રહ્યુ છે..." -03020217="ફ઼ાઇલ કિંવા ફ઼ોલ્ડર મિટાવામાં ત્રુટિ" -03020218="તંત્ર લાંબા માર્ગ વાલી ફાઇલને પુનઃચક્રણ પેટી(રિસાઈકલ બિન)માં નથી લઇ જાઇ શકતુ." - -03020220="પુનઃ નામકરણ..." -03020221="ફ઼ાઇલ કે ફ઼ોલ્ડરના પુનઃ નામકરણ માં ત્રુટિ" -03020222="ફ઼ાઇલની નકલ કરવુ પાક્કું કરો" -03020223="તમે સંગ્રહમાં ફાઇલ ની પ્રતિલિપિ કરવા ચાહો છો શું તમને યકીન છે" - -03020230="ફ઼ોલ્ડર તૈયાર કરો" -03020231="ફ઼ોલ્ડર નામ:" -03020232="નવુ ફ઼ોલ્ડર" -03020233="ફ઼ોલ્ડર તૈયાર કરવામાં ત્રુટિ" - -03020240="ફ઼ાઇલ તૈયાર કરો" -03020241="ફ઼ાઇલ નામ:" -03020242="નવી ફ઼ાઇલ" -03020243="ફ઼ાઇલ તૈયાર કરવામાં ત્રુટિ" - -03020250="ચયન" -03020251="ચયન રદ્દ" -03020252="મુખૌટો:" - -03020260="ફ઼ોલ્ડરોંનો ઇતિહાસ" - -03020280=" '{0}' ફ઼ાઇલ પરિવર્ધિત થઈ છે.\nશું તમે સંગ્રહમાં આને અદ્યતનીકૃત કરવા માગો છો?" -03020281="ફ઼ાઇલ ને અદ્યતનીકૃત નથી કરી શકતું\n'{0}'" -03020282="સંપાદકને શરૂ નથી કરી શકતું." -03020283="ખોલી રહ્યુ છે..." -03020284="આ ફાઇલ એક વિષાણુ(વાયરસ) જેવી લાગે છે (ફાઇલ નામ લાંબી ખાલી જગહ નામમાં રાખતો છે)." - -03020290="ટિપ્પણી" -03020291="&ટિપ્પણી:" - -030202A0="પ્રણાલી" - -03020300="સંગણક" -03020301="સઞ્જાલ" -03020302="દસ્તાવેજ" - -03020400="જોડો" -03020401="બાહર કાઢો" -03020402="પરીક્ષણ" - -03020420="નકલ" -03020421="લઈ જાઓ" -03020422="મિટાવો" -03020423="સૂચના" - -03020500="ફ઼ાઇલનું વિભાજન કરો" -03020501="&માં વિભાજન:" -03020510="વિભાજન કરી રહ્યુ છે..." -03020520="વિભાજન કરવાનું પાક્કું કરો" -03020521="શું તમને યકીન છે કે તમે ફાઇલ ને {0} જત્થાઓમાં વિભાજિત કરવા માગો છો?" -03020522="મૂલ ફાઇલના આકારની તુલનામાં જત્થાનું આકાર નાનો જ હોવો જોઇએ" - -03020600="ફાઇલો સંયોજિત કરો" -03020601="&માં સંયોજન કરો:" -03020610="સંયોજન થઇ રહ્યુ છે..." -03020620="વિભાજિત ફાઇલનો ફક્ત પ્રથમ ભાગ જ ચયનિત કરો" -03020621="ફાઇલ ને વિભાજિત ફાઇલના ભાગના રૂપમાં ઓળખી નથી શકતુ" -03020622="વિભાજિત ફાઇલના એક થી વધારે ભાગ શોધી નથી શકતુ" - -03020710="જાઁચયોગ(ચેકસમ)ની ગણના કરી રહ્યુ છે..." -03020720="જાઁચયોગ(ચેકસમ) માહિતી" -03020721="સીઆરસી જાઁચયોગ(ચેકસમ) આઁકડ઼ોં માટે :" -03020722="સીઆરસી જાઁચયોગ(ચેકસમ) આઁકડ઼ોં અને નામોં માટે :" - -03020800="તલાશી(સ્કૈનિંગ) કરી રહ્યુ છે..." - -03020900="ગુણ યા સંપત્તિયાઁ" - -03020A01="જે ફોલ્ડરનો લાંબો માર્ગ છે તેનાથી સઞ્ચાલન ક્રિયા બોલાવી નથી શકાતી." -03020A02="તમારે એક ફાઇલનો ચયન તો કરવો જ પડશે" -03020A03="તમારે એક કે જ્યાદા ફાઇલોંનો ચયન તો કરવો જ પડશે" -03020A04="ફાઇલ {0} પહેલાથી હયાત છે" - -; Computer -03031100="કુલ આકાર" -03031101="સ્વતન્ત્ર રિક્તસ્થાન(ખાલી જગહ)" -03031102="ક્લસ્ટર(સમૂહ) આકાર" -03031103="ધ્યાનાકર્ષક(લેબલ)" - -; Network -03031200="સ્થાનિક નામ" -03031201="પ્રદાયક" - -; Benchmark Dialog - -03080000="(કસૌટી ચિન્હ)બેઞ્ચમાર્ક" -03080001="સ્મૃતિ ઉપયોગ:" -03080002="સંકુચન કરી રહ્યું છે" -03080003="પ્રસારણ કરી રહ્યું છે" -03080004="ગતિ(વેગ)" -03080005="ક્રમાંકન" -03080006="કુલ ક્રમાંકન" -03080007="વર્તમાન" -03080008="પરિણામ" -03080009="પાસ:" -0308000A="ત્રુટિયાઁ:" -0308000B="સીપીયૂ ઉપયોગ" -0308000C="ક્રમાંકન / ઉપયોગ" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/he.txt b/External/7-Zip/Lang/he.txt deleted file mode 100644 index 613217e3e..000000000 --- a/External/7-Zip/Lang/he.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.13 Beta -; Translated by Jonathan Lahav, updated by peterg (last update: 6 February 2009) -; Updated by Jonathan Lahav (30 April 2010) -; -; -; - -00000000="Hebrew" -00000001="עברית" -00000002="13" - -; 7-Zip Configuration - -; Title -01000000="7-Zip תצורת" - -; Info Page -01000100="7-Zip אודות" -01000103="זו היא תוכנה חופשית. עם זאת, ביכולתך לתמוך בפיתוח התוכנה על ידי הרשמה" -01000104="תמיכה" -01000105="הרשמה" - -; Folders Page -01000200="תיקיות" -01000210="&תיקיית עבודה" -01000211="של המ&ערכת \"Temp\" תיקיית ה" -01000212="&נוכחית" -01000213="&בחר תיקייה:" -01000214="השתמש בהגדרות אלו עבור כוננים ניידים בלבד" - -01000281=".בחר מיקום לקבצי ארכיון זמניים" - -; System Page -01000300="מערכת" -01000301="שלב את התוכנה בתפריט-ההקשר הכללי" -01000302="תפריט מדורג" -01000310="פריטי תפריט:" - -; Language Page -01000400="Language / שפה" -01000401="Language / שפה:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip פקודות" -02000103="פתח ארכיון" -02000104=".פותח את הארכיון שנבחר" -02000105="...חלץ קבצים" -02000106=".מחלץ קבצים מהארכיון שנבחר" -02000107="...הוסף לארכיון" -02000108=".מוסיף את הקבצים שנבחרו לארכיון" -02000109="בדוק ארכיון" -0200010A=".בודק את תקינות הארכיון שנבחר" -0200010B="חלץ לכאן" -0200010C=".מחלץ קבצים מהארכיון שנבחר לתיקייה הנוכחית" -0200010D="{0} -חלץ ל" -0200010E=".מחלץ קבצים לתיקיות משנה" -0200010F="{0} -הוסף ל" -02000110=".מוסיף את הפריטים שנבחרו לארכיון" -02000111="כווץ ושלח בדואר אלקטרוני" -02000112=".כווץ את הפריטים שנבחרו לארכיון ושולח בדואר אלקטרוני" -02000113="כווץ ל- {0} ושלח בדואר אלקטרוני" -02000114=".מכווץ את הפריטים שנבחרו לארכיון ושולח בדואר אלקטרוני" - -02000140="<תיקייה>" -02000141="<ארכיון>" - -; Properties -02000203="נתיב" -02000204="שם" -02000205="סיומת" -02000206="תיקייה" -02000207="גודל" -02000208="גודל מכווץ" -02000209="תכונות" -0200020A="נוצר" -0200020B="נצפה" -0200020C="השתנה" -0200020D="רצוף" -0200020E="נרשמה הערה" -0200020F="הוצפן" -02000210="פצל לפני" -02000211="פצל אחרי" -02000212="מילון" -02000213="CRC" -02000214="סוג" -02000215="אנטי" -02000216="שיטה" -02000217="מערכת הפעלה" -02000218="מערכת קבצים" -02000219="משתמש" -0200021A="קבוצה" -0200021B="קטע" -0200021C="הערה" -0200021D="מיקום" -0200021E="תחילית נתיב" -0200021F="תיקיות" -02000220="קבצים" -02000221="גירסה" -02000222="חלק" -02000223="ריבוי חלקים" -02000224="קיזוז" -02000225="קישורים" -02000226="קטעים" -02000227="חלקים" - -02000229="64ביט" -0200022A="אחסון בסדר חשיבות יורד" -0200022B="משאבי מערכת/מעבד" -0200022C="גודל פיזי" -0200022D="גודל כותרת עליונה" -0200022E="בדיקת סיכום" -0200022F="מאפיינים" -02000230="כתובת וירטואלית" -02000231="מס' זיהוי" -02000232="שם קצר" -02000233="תוכנה יוצרת" -02000234="גודל סקטור" -02000235="מצב" -02000236="קישור" - -; Status bar -02000301="(נבחרו {0} פריט(ים" -02000302="{פריטים: {0" - -02000320="קבצים:" -02000321="תיקיות:" -02000322="גודל:" -02000323="גודל מכווץ:" -02000324="ארכיונים:" - -; List Context Menu -02000401="&...טורים" - -02000411="&פתח" -02000412="&...חלץ" - -; ToolBar -02000501="חלץ" - -; Messages -02000601=".פעולות עדכון לא נתמכות עבור ארכיון זה" -02000602="'{0} אין אפשרות לעדכן את הארכיון" -02000603="'{0}' אין אפשרות ליצור את התיקייה" -02000604=".הקובץ אינו ארכיון הנתמך ע\"י התוכנה" -02000605="שגיאה" -02000606="יותר מדי פריטים" -02000607="סיומת שם הקובץ הנתון לא משוייכת לאף תוכנה" -02000608="אין שגיאות" -02000609="'לא היה ניתן לפתוח את הקובץ '{0}' כארכיון" -0200060A="'?לא היה ניתן לפתוח את הארכיון המקודד '{0}'. סיסמא שגוייה" -0200060B="המערכת אינה יכולה להקצוות את כמות הזיכרון הדרושה" -0200060C="שגיאה לא ידועה" -0200060D="סוג ארכיון אינו נתמך" - -; Dialogs -02000702="אישור" -02000705="&כן" -02000707="כן ל&הכל" -02000709="&לא" -0200070B="ל&א להכל" - -02000710="ביטול" -02000711="&ביטול" -02000713="&סגור" -02000714="עצור" -02000715="התחל מחדש" - -02000720="עזרה" - -; Extract dialog -02000800="חלץ" -02000801="&חלץ ל:" -02000802="סיסמא" - -02000810="שיטת הנתיבים" -02000811="נתיבים מלאים" -02000812="נתיבים נוכחיים" -02000813="ללא נתיבים" - -02000820="מצב שכתוב קבצים" -02000821="שאל לפני שכתוב" -02000822="שכתב בלי לשאול" -02000823="דלג על קבצים קיימים" -02000824="שינוי שם אוטומטי" -02000825="שינוי שם אוטומטי לקבצים קיימים" - -02000830="קבצים" -02000831="קבצים שנ&בחרו" -02000832="&כל הקבצים" - -02000881=".ציין יעד לחילוץ הקבצים" - -02000890="מחלץ" - -; Overwrite dialog -02000900="אשר החלפת קובץ" -02000901=".תיקיית היעד מכילה כבר קובץ בשם זה" -02000902="האם ברצונך להחליף את הקובץ הקיים" -02000903="?בקובץ הזה" - -02000911="שינוי שם &אוטומטי" - -02000982="{בתים: {0" -02000983="השתנה ב" - -; Messages dialog -02000A00="הודעות איבחון" - -02000A80="הודעה" - -02000A91=".'{0}' שיטת הדחיסה אינה נתמכת עבור" -02000A92=".שגיאת מידע ב '{0}'. הקובץ אינו תקין" -02000A93=".בדיקת סכום הנתונים נכשלה ב '{0}'. הקובץ אינו תקין" -02000A94="'?שגיאת נתון בקובץ המקודד '{0}'. סיסמא שגוייה" -02000A95="'?שגיאה בבדיקת סכום הנתונים בקובץ המקודד '{0}'. סיסמא שגוייה" - -; Password dialog -02000B00="הכנס סיסמא" -02000B01="הכנס סיסמא:" -02000B02="&הצג סיסמא" -02000B03="הכנס שנית את הסיסמא:" -02000B10="הסיסמאות אינן תואמות" -02000B11="(!, #, $, ...) ליצירת הסיסמא השתמש רק באותיות אנגליות, מספרים או תווים מיוחדים" -02000B12="הסיסמא ארוכה מידי" - -; Progress dialog -02000C00="תהליך" -02000C01="הזמן שעבר:" -02000C02="הזמן שנותר:" -02000C03="גודל כולל:" -02000C04="מהירות:" -02000C05="התקדמות:" -02000C06="יחס כיווץ:" - -02000C10="&רקע" -02000C11="&קדמה" -02000C12="ה&שהה" -02000C13="ה&משך" - -02000C20="מושהה" - -02000C30="?האם את/ה בטוח/ה שברצונך לבטל" - -; Compress dialog -02000D00="הוסף לארכיון" -02000D01="&ארכיון:" -02000D02="מצב &עדכון:" -02000D03="&פורמט הארכיון:" -02000D04="&שיטת דחיסה:" -02000D05="צור קובץ &רצוף" -02000D06="&פרמטרים:" -02000D07="אפשרויות" -02000D08="צור ארכיון &חילוץ-עצמי" -02000D09="ריבוי תהליכים" -02000D0A="&קדד שמות קבצים" -02000D0B="רמת &דחיסה:" -02000D0C="גודל מי&לון:" -02000D0D="גודל &מילה:" -02000D0E="זיכרון הדרוש לדחיסה:" -02000D0F="זיכרון הדרוש לחילוץ:" -02000D10="הצפנה" -02000D11="שיטת הצפנה:" -02000D12="כמות הליכי מעבד/מערכת:" -02000D13="גודל קטע רצוף:" -02000D14="לא רצוף" -02000D15="רצוף" -02000D16="דחוס קבצים שבשיתוף" - -02000D40="פצל לחלקים, בתים:" -02000D41="גודל חלק שגוי" -02000D42="?האם את/ה בטוח/ה שברצונך לפצל את הארכיון לחלקים אלה\nגודל החלק המוגדר: {0} בתים " - -02000D81="אחסון" -02000D82="רגילה" -02000D83="מקסימאלית" -02000D84="מהירה" -02000D85="הכי מהירה" -02000D86="אולטרה" - -02000D90="עיון" - -02000DA1="הוסף והחלף קבצים" -02000DA2="עדכן והוסף קבצים" -02000DA3="רענן קבצים קיימים" -02000DA4="סנכרן קבצים" - -02000DB1="כל הקבצים" - -02000DC0="מכווץ" - -; Columns dialog -02000E00="עמודות" -02000E01="סמן את העמודות שברצונך שיופיעו בתיקייה זו. השתמש בלחצנים הזז למעלה/למטה כדי לסדר מחדש את העמודות" -02000E02="העמודה שנבחרה תהיה ברוחב" -02000E03=".&פיקסלים" - -02000E10="הזז &למעלה" -02000E11="הזז &למטה" -02000E12="ה&צג" -02000E13="ה&סתר" -02000E14="קבע" - -02000E81="כותרת" -02000E82="רוחב" - -; Testing -02000F90="בודק" - - -; File Manager - -03000000="7-Zip מנהל הקבצים של" - -; Menu -03000102="&קובץ" -03000103="&עריכה" -03000104="&תצוגה" -03000105="&כלים" -03000106="ע&זרה" -03000107="&מועדפים" - -; File -03000210="&פתח" -03000211="פתח ב&תוכנה" -03000212="פתח ב&חלון" -03000220="&הצג" -03000221="&ערוך" -03000230="&שנה שם" -03000231="...העתק ל&" -03000232="...העבר ל&" -03000233="&מחק" -03000240="מ&אפיינים" -03000241="הערה" -03000242="חשב סיכום ביקורת" -03000243="הבדל" -03000250="צור תיקייה" -03000251="צור קובץ" -03000260="י&ציאה" -03000270="...פצל קובץ&" -03000271="...מזג קבצים&" - -; Edit -03000310="&בטל" -03000311="ב&צע מחדש" -03000320="&גזור" -03000321="&העתק" -03000322="&הדבק" -03000323="&מחק" -03000330="בח&ר הכל" -03000331="בטל בחירה" -03000332="ה&פוך בחירה" -03000333="...בחר" -03000334="...בטל בחירה" -03000335="בחר לפי סוג" -03000336="בטל בחירה לפי סוג" - -; View -03000410="סמלים &גדולים" -03000411="סמלים &קטנים" -03000412="&רשימה" -03000413="&פרטים" -03000420="לא מסודר" -03000430="פתח תיקיית שורש" -03000431="חזור שלב אחד" -03000432="...היסטוריית תיקיות" -03000440="ר&ענן" -03000449="תצוגה בפריסה מלאה" -03000450="&שני חלונות" -03000451="&סרגלי כלים" -03000460="סרגל ארכיון" -03000461="סרגל רגיל" -03000462="כפתורים גדולים" -03000463="הצג את פעולת הכפתור מתחתיו" - -; Tools -03000510="&...אפשרויות" -03000511="&מבחן ביצועים" - -; Help -03000610="&...תוכן" -03000620="&...7-Zip אודות" - -; Favorites -03000710="&הוסף תיקייה למועדפים כ" -03000720="סימנייה" - -; Options Dialog - -03010000="אפשרויות" - -; Plugins -03010100="תוספים" -03010101="&תוספים:" -03010110="...אפשרויות" - -; Edit -03010200="עורך" -03010201="&עורך:" -03010202="&הבדל:" - -; System -03010300="מערכת" -03010302="7-Zip שייך ל :" -03010310="תוסף" - -; Settings -03010400="הגדרות" -03010401="\"..\" הצג את הפריט" -03010402="הצג סמלי קבצים אמיתיים" -03010410="הצג את תפריט המערכת" -03010420="בחר את כל ה&שורה" -03010421="הצג קווי &טבלה" -03010422="לחיצה אחת לפתיחת פריט" -03010430="שיטת &בחירה חלופית" -03010440="השתמש בקטעי זיכרון &גדולים יותר" - -; Strings - -03020201="העתק" -03020202="העבר" -03020203="העתק ל:" -03020204="העבר ל:" -03020205="...מעתיק" -03020206="...מעביר" -03020207=".אין אפשרות להעתיק/להעביר פריטים לתיקיות כאלה" -03020208="הפעולה אינה נתמכת עבור תיקייה זו " -03020209="בחר תיקיית יעד." - -03020210="אשר מחיקת קובץ" -03020211="אשר מחיקת תיקייה" -03020212="אשר מחיקת מספר קבצים" -03020213="?'{0}' האם את/ה בטוח/ה שברצונך למחוק את" -03020214="?האם את/ה בטוח/ה שברצונך למחוק את התיקייה '{0}' ואת כל תוכנה" -03020215="?האם את/ה בטוח/ה שברצונך למחוק את {0} הפריטים האלה" -03020216="...מוחק" -03020217="אירעה שגיאה במהלך מחיקת קובץ או תיקייה" -03020218="המערכת אינה יכולה להעביר קובץ עם נתיב ארוך לפח המחזור" - -03020220="...משנה שם" -03020221="אירעה שגיאה בשינוי שם של קובץ או תיקייה" -03020222="אשר העתקת קובץ" -03020223="?האם את/ה בטוח/ה שברצונך להעתיק קבצים לארכיון" - -03020230="צור תיקייה" -03020231="שם התיקייה:" -03020232="תיקייה חדשה" -03020233="שגיאה ביצירת תיקייה" - -03020240="צור קובץ" -03020241="שם הקובץ:" -03020242="קובץ חדש" -03020243="שגיאה ביצירת קובץ" - -03020250="בחר" -03020251="בטל בחירה" -03020252="מיסוך:" - -03020260="היסטוריית תיקיות" - -03020280="?האם ברצונך לעדכן אותו בארכיון\n.הקובץ '{0}' שונה" -03020281="'{0}'\nאין אפשרות לעדכן את הקובץ" -03020282=".אין אפשרות להפעיל את העורך" -03020283="...פותח" -03020284="(ייתכן והקובץ היינו וירוס (ישנם רווחים גדולים בשם הקובץ" - -03020290="הערה" -03020291="&הערה:" - -030202A0="מערכת" - -03020300="מחשב" -03020301="רשת" -03020302="מסמכים" - -03020400="הוסף" -03020401="חלץ" -03020402="בדוק" - -03020420="העתק" -03020421="העבר" -03020422="מחק" -03020423="מידע" - -03020500="פצל קובץ" -03020501="&פצל ל:" -03020510="...מפצל" -03020520="אשר פיצול" -03020521=" ? האם את/ה בטוח/ה שברצונך לפצל את הקובץ ל{0} חלקים" -03020522="גודל החלק חייב להיות קטן יותר מהקובץ המקורי" - -03020600="מזג קבצים" -03020601="&מזג ל:" -03020610="...מבצע מיזוג" -03020620="בחר רק את החלק הראשון של הקובץ המפוצל" -03020621="לא היה ניתן למצוא קובץ שהוא חלק מהקובץ המפוצל" -03020622="לא ניתן למצוא יותר מחלק אחד של הקובץ המפוצל" - -03020710="...מחשב סיכום ביקורת" -03020720="תוצאות סיכום ביקורת" -03020721="עבור הנתונים CRC בדיקת סיכום ביקורת :" -03020722="עבור הנתונים ושמות CRC בדיקת סיכום ביקורת :" - -03020800="...סורק" - -03020900="מאפיינים" - -03020A01=".הפעולה אינה יכולה להתבצע מתיקייה בעלת נתיב ארוך" -03020A02="הינך חייב/ת לבחור קובץ אחד" -03020A03="הינך חייב לבחור קובץ אחד או יותר" -03020A04="הקובץ {0} כבר קיים" - -; Computer -03031100="גודל כללי" -03031101="שטח פנוי" -03031102="גודל קלסטר/יחידת אחסון " -03031103="תווית" - -; Network -03031200="שם מקומי" -03031201="ספק" - -; Benchmark Dialog - -03080000="מבחן ביצועים" -03080001="זיכרון בשימוש:" -03080002="מכווץ" -03080003="מחלץ" -03080004="מהירות" -03080005="קצב" -03080006="סיכום הקצב" -03080007="נוכחי" -03080008="סופי" -03080009="הצלחות:" -0308000A="שגיאות:" -0308000B="משאבי מערכת/מעבד" -0308000C="קצב / שימוש" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/hi.txt b/External/7-Zip/Lang/hi.txt deleted file mode 100644 index cffa3c582..000000000 --- a/External/7-Zip/Lang/hi.txt +++ /dev/null @@ -1,547 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Vinayy Sharrma, अनुवाद विनय शर्मा -;मेहनत की है तो अपना नाम लिखने मे कोई बुराई तो है नही. -;हिन्दी पर गर्व करो, जय हिन्द ! जय हिन्दी ! -; -; - -00000000="Hindi, Indian, हिन्दुस्तान" -00000001="हिन्दी" -00000002="57" - -; 7-Zip Configuration - -; Title -01000000="7-जिप संरचना" - -; Info Page -01000100="7-जिप के बारे में" -01000103="7-जिप यह निःशुल्क सॉफ़्टवेयर है. फिर भी, आप पंजीकृत(रजिस्टर्ड) होकर७-ज़िप के विकास में सहयोग कर सकते हैं." -01000104="सहयोग" -01000105="पंजीकरण" - -; Folders Page -01000200="फ़ोल्डर्स" -01000210="&कार्यरत फ़ोल्डर" -01000211="&प्रणाली का अस्थायी(टेम्पररी) फोल्डर" -01000212="&चालू" -01000213="&निर्दिष्ट:" -01000214="सिर्फ हटाने योग्य(रिमूवेबल) ड्राईव के लिये ही प्रयोग करें" - -01000281="अस्थायी संग्रह फाइल के लिये स्थान निर्दिष्ट करें(बतायें)." - -; System Page -01000300="प्रणाली या तंत्र" -01000301="7-जिप के शेल (कवच) प्रसंग मेनु में जोडें" -01000302="सोपानीकृत(केस्केडेड) प्रसंग मेनु" -01000310="प्रसंग(कोन्टेक्स्ट) मेनु वस्तुएँ:" - -; Language Page -01000400="भाषा" -01000401="भाषा:" - - -; 7-Zip Explorer extension - - -; Context menu -02000101="7-जिप" -02000102="7-जिप आदेश (कमांड्स)" -02000103="संग्रह खोले" -02000104="चयनित संग्रह खोलता है." -02000105="फ़ाइल्स बाहर निकाले..." -02000106="चयनित संग्रह में से फाइले बाहर निकाले ." -02000107="संग्रह में जोड़े..." -02000108="चयनित वस्तुओं को संग्रह में जोड़ता है." -02000109="संग्रह की जाँच करे" -0200010A="चयनित संग्रह की एकसूत्रता जाँचता है." -0200010B="यहीं बाहर निकाले" -0200010C="चयनित संग्रह में से वर्तमान फोल्डर में फाइले बाहर निकाले." -0200010D="{0} में बाहर निकाले" -0200010E="उप-फ़ोल्डर में फ़ाइल्स को बाहर निकाले." -0200010F="{0} में जोड़े" -02000110="चयनित वस्तु को संग्रह में जोड़े." -02000111="दबायें(संकुचन) ओर इमेल करें..." -02000112="चयनित वस्तुओं को संकुचित कर संग्रह में जोड़ता है और संग्रह ई-मेल द्वारा भेजता है." -02000113=" {0} में दबायें ओर ईमेल करें" -02000114="चयनित वस्तुओं को संकुचित कर संग्रह में जोड़ता है और संग्रह ई-मेल द्वारा भेजता है." - - -02000140="<फोल्डर>" -02000141="<संग्रह(आर्चिव)>" - -; Properties -02000203="मार्ग" -02000204="नाम" -02000205="विस्तार" -02000206="फ़ोल्डर" -02000207="आकार" -02000208="कुल आकार" -02000209="विशेषता या गुणधर्म" -0200020A="सर्जित" -0200020B="चलायी गई" -0200020C="परिवर्धित" -0200020D="ठोस" -0200020E="टिप्पणी" -0200020F="गुप्तिकृत" -02000210="के पूर्व विभाजन(टुकडे) करें " -02000211="के बाद विभाजन(टुकडे) करें" -02000212="शब्दकोश" -02000213="सीआरसी" -02000214="प्रकार" -02000215="विरोधी" -02000216="पद्धति" -02000217="यजमान आज्ञावली(ओपरेटिंग सिस्टम)" -02000218="फ़ाइल प्रणाली" -02000219="प्रयोगकर्ता" -0200021A="समूह" -0200021B="रोक या टुकड़े" -0200021C="प्रतिक्रिया" -0200021D="स्थान" -0200021E="मार्ग प्रत्यय" -0200021F="फोल्डर्स" -02000220="फाइल्स" -02000221="संस्करण" -02000222="जत्था" -02000223="अनेक जत्थे" -02000224="ओफसेट" -02000225="कडियाँ" -02000226="टुकड़े" -02000227="जत्थे" - -02000229="64-बिट" -0200022A="बड़ा-एन्डियन" -0200022B="सीपीयू" -0200022C="भौतिक आकार" -0200022D="शीर्षकों के आकार" -0200022E="जाँचयोग" -0200022F="चरित्रताऎं" -02000230="आभासी पता" -02000231="आईडी" -02000232="संक्षिप्त नाम" -02000233="सर्जक अनुप्रयोग" -02000234="सेक्टर का आकार" -02000235="स्थिति" -02000236="कड़ी" - -; Status bar -02000301="{0} चयनित वस्तु(एँ)" -02000302="{0} वस्तु(एँ)" - -02000320="फ़ाइलें:" -02000321="फ़ोल्डर्स:" -02000322="आकार:" -02000323="संकुचित किया आकार:" -02000324="संग्रह:" - -; List Context Menu -02000401="&स्तंभ..." - -02000411="&खोले" -02000412="&बाहर निकाले..." - -; ToolBar -02000501="बाहर निकाले" - -; Messages -02000601="इस संग्रह के लिये अद्यतनीकृत संचालन समर्थित नहीं हैं." -02000602="{0} संग्रह को अद्यतनीकृत नहीं कर सकता" -02000603=" '{0}' फ़ोल्डर सर्जित नहीं कर सकता" -02000604="फाइल समर्थित संग्रह नही है." -02000605="त्रुटि" -02000606="बहुत ज्यादा वस्तुएँ" -02000607="दिये हुए फाइल के नाम के विस्तार के साथ कोई भी सम्बन्धित अनुप्रयोग(प्रोग्राम) नहीं है" -02000608="इनमे कोई भी त्रुटि नहीं है" -02000609="'{0}' फाइल को संग्रह के रूप में नही खोल सकता" -0200060A="'{0}' गुप्तिकृत संग्रह को नही खोल सकता. गलत कूटशब्द?" -0200060B="तंत्र जरूरी मात्रा में मेमोरी(स्मृति) वितरित नही कर सकता है" -0200060C="अज्ञात त्रुटि" -0200060D="असमर्थित संग्रह प्रकार" - -; Dialogs -02000702="ठीक है" -02000705="&हाँ" -02000707="&सभी के लिये हाँ" -02000709="&नहीं" -0200070B="&सभी के लिये नहीं" - -02000710="रद्द" -02000711="&रद्द" -02000713="&बंद करो" -02000714="रूको" -02000715="पुनः शुरु करें" - -02000720="मदद" - -; Extract dialog -02000800="बाहर निकाले" -02000801="&बाहर निकाले:" -02000802="कूटशब्द(पासवर्ड)" - -02000810="मार्ग स्थिति" -02000811="पूरा मार्गनाम" -02000812="वर्तमान मार्गनाम" -02000813="कोई मार्ग नाम नहीं है" - -02000820="अधिलेखन रीत" -02000821="अधिलेखन करने से पहले पूछे" -02000822="बिना पूछे अधिलेखन(पुराने को मिटाना) करें" -02000823="पहले से मौजूद फ़ाइलस को छोड़े" -02000824="स्वचालित पुन: नामकरण" -02000825="पहले से मौजूद फ़ाइलस का स्वचालित(ओटोमेटिक) पुन: नामकरण करे" - -02000830="फ़ाइलें" -02000831="&चयनित फ़ाइलें" -02000832="&सभी फ़ाइलें" - -02000881="बाहर निकाली हुई फ़ाइलों के लिये स्थान निर्दिष्ट करें." - -02000890="बाहर निकाल रहा है" - -; Overwrite dialog -02000900="फ़ाइल प्रतिस्थापन को पक्का करें" -02000901="गन्तव्य फोल्डर में पहले से ही प्रक्रिया हुई फ़ाइल है." -02000902="क्या आप पहले से मौजूद फ़ाइल को बदलना पसंद करेंगे?" -02000903="इसके साथ?" - -02000911="स्वचालित पुन: नामकरण" - -02000982="{0} बाइट्स" -02000983="को परिवर्धित" - -; Messages dialog -02000A00="निदानात्मक संदेश" - -02000A80="संदेश" - -02000A91="'{0}' के लिए असहायक दबाने की पद्धति." -02000A92="डेटा त्रुटि'{0}' में. फ़ाइल टूटी हुई है." -02000A93="'{0}' में सीआरसी असफल. फ़ाइल टूटी हुई है." -02000A94=" '{0}' गुप्तिकृत(एनक्रिप्टेड) फाइल में डेटा त्रुटि. गलत कूटशब्द?" -02000A95=" '{0}'गुप्तिकृत(एनक्रिप्टेड) फाइल में सीआरसी असफल. गलत कूटशब्द?" - -; Password dialog -02000B00="कूटशब्द(पासवर्ड) डाले" -02000B01="कूटशब्द(पासवर्ड) डाले:" -02000B02="&कूटशब्द(पासवर्ड) दिखाओ" -02000B03="कूटशब्द पुनः डाले:" -02000B10="कूटशब्द सहेजे हुए से अलग है" -02000B11="कूटशब्द के लिये सिर्फ़ इंग्लिश वर्णमाला, अंको और विशेष अक्षरों (!, #, $, ...) का ही उपयोग करें" -02000B12="कूटशब्द बहुत ज्यादा बड़ा है" - -; Progress dialog -02000C00="प्रक्रिया" -02000C01="व्यतीत समय:" -02000C02="बाकी बचा समय:" -02000C03="कुल आकार:" -02000C04="गति:" -02000C05="प्रक्रिया किया हुआ:" -02000C06="दबाने(आकार छोटा करने) का अनुपात:" - -02000C10="&पॄष्ठ्भूमि" -02000C11="&अग्रभूमि(डेस्क्टोप)" -02000C12="&विश्राम" -02000C13="&जारी रखे" - -02000C20="विश्रामित" - -02000C30="तुम रद्द करना चाहते हो. तुम्हें यकीन है क्या?" - -; Compress dialog -02000D00="संग्रह में जोड़े" -02000D01="&संग्रह:" -02000D02="&अद्यतनीकरण स्थिति(मोड):" -02000D03="संग्रह &ढाँचा:" -02000D04="&संकुचन विधि:" -02000D05="&ठोस संग्रह तैयार करें" -02000D06="&परिमाप:" -02000D07="विकल्प" -02000D08="&एसएफ़एक्स(SFX) संग्रह तैयार करें" -02000D09="अनेक-सूत्री" -02000D0A="फ़ाइल &नाम गुप्तिकरण करें" -02000D0B="&संकुचन स्तर:" -02000D0C="&शब्दकोश आकार:" -02000D0D="&शब्द आकार:" -02000D0E="संकुचन के लिये स्मृति प्रयोग:" -02000D0F="प्रसारण के लिये स्मृति प्रयोग:" -02000D10="गुप्तिकरण" -02000D11="गुप्तिकरण पद्धति:" -02000D12="सीपीयू सूत्र संख्या:" -02000D13="ठोस टुकडे का आकार:" -02000D14="अ-ठोस" -02000D15="ठोस" -02000D16="साझी फाइलें संकुचित करें" - -02000D40="जत्थों में विभाजन, बाइट्स:" -02000D41="जत्थे का आकार गलत है" -02000D42="निर्देशित जत्था आकार: {0} बाइटस.\n आप संग्रह को ऎसे जत्थों में विभाजित करना चाहते है, क्या आपको यकीन है?" - -02000D81="भण्डारण" -02000D82="साधारण" -02000D83="अधिकतम" -02000D84="तेज" -02000D85="सर्वाधिक तेज" -02000D86="अत्यन्त" - -02000D90="ब्राउज या घूमे" - -02000DA1="फ़ाइलें जोड़े और प्रतिस्थापित करे" -02000DA2="फ़ाइले अद्यतनीकृत करें और जोड़े" -02000DA3="अवस्थित फ़ाइलें ताजा करें" -02000DA4="फाइलें समक्रमण(सिंक्रोनाईज़) करें" - -02000DB1="सभी फ़ाइलें" - -02000DC0="संकुचन कर रहा है" - -; Columns dialog -02000E00="स्तंभ" -02000E01="इस फोल्डर में जो स्तंभ, तुम दिखाई दें ऎसे बनाना चाहते हो उन्हें टिक(चयन) करें. स्तंभो का क्रम बदलने के लिये ऊपर ले जाओ और नीचे ले जाओ बटन(खटके) का उपयोग करें" -02000E02="चयनित स्तंभ" -02000E03="&पिक्सेल(बूँद) चौड़े." - -02000E10="&ऊपर ले जाएँ" -02000E11="&नीचे ले जाएँ" -02000E12="&दिखाये" -02000E13="&छुपाये" -02000E14="सेट(स्थिर)" - -02000E81="शीर्षक" -02000E82="चौड़ाई" - -; Testing -02000F90="परीक्षण" - - -; file Manager - -03000000="7-जिप फ़ाइल प्रबन्धक" - -; Menu -03000102="&फ़ाइल" -03000103="&संपादन" -03000104="&दर्शन" -03000105="&औजार" -03000106="&मदद" -03000107="&मनपसंद" - -; file -03000210="&खोले" -03000211="&अंदर खोले" -03000212="&बाहर खोले" -03000220="&दृश्य" -03000221="&संपादन" -03000230="&पुन: नामकरण" -03000231="&में नकल बनाये..." -03000232="&में ले जायें..." -03000233="&मिटायें" -03000240="&संपत्तियाँ या गुण" -03000241="&टिप्पणी" -03000242="&जाँच योग की गणना करें" -03000243="&अन्तर" -03000250="&फ़ोल्डर तैयार करें" -03000251="&फ़ाइल तैयार करें" -03000260="&निर्गमन" -03000270="&फ़ाइल का विभाजन करें..." -03000271="&फ़ाइल का संयोजन करें..." - -; Edit -03000310="&पुर्वस्थिती(पहले जैसा)" -03000311="&पुनः करें" -03000320="&काटे" -03000321="&नकल करें" -03000322="&चिपकायें" -03000323="&मिटायें" -03000330="&सभी चयन करे" -03000331="&सभी अचयनित करें" -03000332="&चयन उलटा करें" -03000333="चयन करें..." -03000334="अचयन करे..." -03000335="प्रकार द्वारा चयन" -03000336="प्रकार द्वारा अचयन" - -; View -03000410="बड़ी प्रतीक" -03000411="लघु प्रतीक" -03000412="&सूची" -03000413="&वर्णन" -03000420="अवितरित" -03000430="मूल फ़ोल्डर खोले" -03000431="एक स्तर ऊपर चढ़े" -03000432="फ़ोल्डरो का इतिहास..." -03000440="&ताजा करें" -03000449="चौड़ा दृश्य" -03000450="&२ फ़लक" -03000451="&औजार पट्टीयाँ" -03000460="संग्रह उपकरणपट्टी" -03000461="मानक औजार पट्टी" -03000462="बड़े खटके(बटन)" -03000463="खटके(बटन) के शब्द दिखायें" - -; Tools -03000510="&विकल्प..." -03000511="&बेञ्चमार्क(प्रामाणिक तुलना)" - -; Help -03000610="&सामग्री..." -03000620="7-जिप के बारे में..." - -; Favorites -03000710="&फ़ोल्डर मनपसंद में ऎसे जोड़े..." -03000720="पुस्तचिन्ह" - -; Options Dialog - -03010000="विकल्प" - -; Plugins -03010100="प्लगइन(शक्तिदायक)" -03010101="&प्लगइन(शक्तिदायक):" -03010110="विकल्प..." - -; Edit -03010200="संपादक" -03010201="&संपादक:" -03010202="&अन्तर:" - -; System -03010300="प्रणाली या तंत्र" -03010302="संबधित करें 7-जिप के साथ:" -03010310="प्लगइन(शक्तिदायक)" - -; Settings -03010400="व्यवस्थाएँ" -03010401="दिखाओ \"..\"वस्तु" -03010402="वास्तविक फ़ाइल प्रतिमायें दिखाओ" -03010410="तंत्र का मेनु दिखाओ" -03010420="&पूरी पन्क्ति का चयन" -03010421=" &ग्रिड(जाल) रेखा दिखाओ" -03010422="वस्तु खोलने के लिये एक ही(सिंगल)-क्लिक" -03010430="&वैकल्पिक चयन स्थिति" -03010440="&बड़े स्मृति पृष्ठ का प्रयोग करे" - -; Strings - -03020201="नकल" -03020202="ले जायें" -03020203="में नकल:" -03020204="में ले जायें:" -03020205="नकल..." -03020206="ले जा रहा है..." -03020207="ऎसे फोल्डरों के लिये तुम वस्तुओं को हटाना या नकल करना नही कर सकते." -03020208="इस फोल्डर के लिये यह सञ्चालन क्रिया समर्थित नहीं है." -03020209="गन्तव्य फोल्डर चयनित करें." - -03020210="फ़ाइल मिटाये यह पक्का करो" -03020211="फ़ोल्डर मिटायें पक्का करो" -03020212="अनेक फ़ाइल मिटायें पक्का करो" -03020213="क्या तुम्हे यकीन है कि तुम मिटाना चाहते हो '{0}'?" -03020214="क्या तुम्हे यकीन है कि तुम फ़ोल्डर मिटाना चाहते हो '{0}' और इसकी सब सामग्री भी?" -03020215="क्या तुम्हे यकीन है कि तुम मिटाना चाहते हो इन {0} वस्तुओं को?" -03020216="मिटा रहा है..." -03020217="फ़ाइल किंवा फ़ोल्डर मिटाने में त्रुटि" -03020218="तंत्र लंबे मार्ग वाली फाइल को पुनःचक्रण पेटी(रिसाईकल बिन) में नही ले जा सकता है." - -03020220="पुन: नामकरण..." -03020221="फ़ाइल या फ़ोल्डर के पुन: नामकरण में त्रुटि" -03020222="फ़ाइल की नकल करना पक्का करो" -03020223="तुम संग्रह में फाइल की प्रतिलिपि करना चाहते हो क्या तुम्हे यकीन है" - -03020230="फ़ॊल्डर तैयार करें" -03020231="फ़ोल्डर नाम:" -03020232="नया फ़ॊल्डर" -03020233="फ़ोल्डर तैयार करने में त्रुटि" - -03020240="फ़ाइल तैयार करें" -03020241="फ़ाइल नाम:" -03020242="नया फ़ाइल" -03020243="फ़ाइल तैयार करने में त्रुटि" - -03020250="चयन" -03020251="चयन रद्द" -03020252="मुखौटा:" - -03020260="फ़ोल्डरों का इतिहास" - -03020280=" '{0}' फ़ाइल परिवर्धित हुई है.\nक्या तुम संग्रह में इसे अद्यतनीकृत करना चाहते हो?" -03020281="फ़ाइल को अद्यतनीकृत नही कर सकता\n'{0}'" -03020282="संपादक को शुरू नही कर सकता." -03020283="खोल रहा है..." -03020284="यह फाइल एक विषाणु(वायरस) जैसी लगती है(फाइल नाम लंबी खाली जगह नाम में रखता है)." - -03020290="टिप्पणी" -03020291="&टिप्पणी:" - -030202A0="प्रणाली" - -03020300="संगणक" -03020301="सञ्जाल" -03020302="दस्तावेज" - -03020400="जोड़े" -03020401="बाहर निकाले" -03020402="परीक्षण" - -03020420="नकल" -03020421="ले जायें" -03020422="मिटायें" -03020423="सूचना" - -03020500="फ़ाइल का विभाजन करें" -03020501="&में विभाजन:" -03020510="विभाजन कर रहा है..." -03020520="विभाजन करना पक्का करे" -03020521="क्या तुम्हे यकीन है कि तुम फाइल को {0} जत्थों में विभाजित करना चाहते हो?" -03020522="मूल फाइल के आकार की तुलना में जत्थे का आकार छोटा ही होना चाहिए" - -03020600="फ़ाइले संयोजित करें" -03020601="&मेंसंयोजन करे:" -03020610="संयोजन हो रहा है..." -03020620="विभाजित फाइल का सिर्फ़ प्रथम भाग ही चयनित करे" -03020621="फाइल को विभाजित फाइल के भाग के रूप में पहचान नही सकता" -03020622="विभाजित फाइल का एक से ज्यादा भाग नही ढूँढ सकता" - -03020710="जाँचयोग(चेकसम) की गणना कर रहा है..." -03020720="जाँचयोग(चेकसम) माहिती" -03020721="सीआरसी जाँचयोग(चेकसम) आँकड़ों के लिये :" -03020722="सीआरसी जाँचयोग(चेकसम) आँकड़ों और नामों के लिये :" - -03020800="तलाशी(स्कैनिंग) कर रहा है..." - -03020900="गुण या संपत्तियाँ" - -03020A01="जिस फोल्डर का लंबा मार्ग है उससे सञ्चालन क्रिया नही बुलाई जा सकती." -03020A02="तुम्हे एक फाइल का चयन तो करना ही होगा" -03020A03="तुम्हे एक या ज्यादा फाइलों को चुनना ही होगा" -03020A04="फाइल {0} पहले से मौजूद है" - -; Computer -03031100="कुल आकार" -03031101="स्वतन्त्र रिक्तस्थान(खाली जगह)" -03031102="क्लस्टर(समूह) आकार" -03031103="ध्यानाकर्षक(लेबल)" - -; Network -03031200="स्थानिय नाम" -03031201="प्रदायक" - -; Benchmark Dialog - -03080000="(कसौटी चिन्ह)बेञ्चमार्क" -03080001="स्मृति उपयोग:" -03080002="संकुचन कर रहा है" -03080003="प्रसारण हो रहा है" -03080004="गति(वेग)" -03080005="क्रमांकन" -03080006="कुल क्रमांकन" -03080007="वर्तमान" -03080008="परिणाम" -03080009="पास:" -0308000A="त्रुटियाँ:" -0308000B="सीपीयू उपयोग" -0308000C="क्रमांकन / उपयोग" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/hr.txt b/External/7-Zip/Lang/hr.txt deleted file mode 100644 index 75ae6f465..000000000 --- a/External/7-Zip/Lang/hr.txt +++ /dev/null @@ -1,545 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 3.12 -; Translated by Alan Šimek -; 7-Zip 4.53 -; Corrected and updated by Hasan Osmanagić -; 7-Zip 9.07 beta -; Corrected and updated by Stjepan Treger - -00000000="Croatian" -00000001="Hrvatski" -00000002="26-1" - -; 7-Zip Configuration - -; Title -01000000="7-Zip postavke" - -; Info Page -01000100="O 7-Zip-u" -01000103="7-Zip je besplatan. Međutim, možete podržati daljnji razvoj 7-Zipa registriranjem. Kao registriranom korisniku biti će Vam omogućena tehnička podrška." -01000104="Podrška" -01000105="Registriraj se" - -; Folders Page -01000200="Mape" -01000210="&Radna mapa" -01000211="&Privremena sistemska mapa" -01000212="&Trenutna" -01000213="&Navedena:" -01000214="Koristi samo za izmjenjive diskove" - -01000281="Lokaciju za smještaj privremenih datoteka." - -; System Page -01000300="Sustav" -01000301="Integriraj 7-Zip u padajući kontekstni izbornik" -01000302="Padajući kontekstni izbornik" -01000310="Stavke kontekstnog izbornika:" - -; Language Page -01000400="Jezik" -01000401="Jezik:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip naredbe" -02000103="Otvori arhiv" -02000104="Otvori izabranu arhiv" -02000105="Raspakiraj datoteke..." -02000106="Raspakiraj datoteke odabrane arhive" -02000107="Dodaj u arhiv..." -02000108="Dodaj izabrane stavke u arhiv" -02000109="Testiraj arhiv" -0200010A="Testiraj integritet odabrane arhive" -0200010B="Raspakiraj ovdje" -0200010C="Raspakiraj podatke iz odabrane arhive u trenutnu mapu" -0200010D="Raspakiraj u {0}" -0200010E="Raspakiraj podatke u pod-mapu" -0200010F="Dodaj u {0}" -02000110="Dodaj odabrane podatke u arhiv" -02000111="Sažimanje i slanje e-poštom" -02000112="Sažimanje odabranih podataka u arhiv i slanje e-poštom" -02000113="Sažimanje u {0} i slanje e-poštom" -02000114="Sažimanje odabranih podataka u arhiv i slanje e-poštom" - -02000140="" -02000141="" - -; Properties -02000203="Putanja" -02000204="Prema nazivu" -02000205="Tip" -02000206="Mapa" -02000207="Prema veličini" -02000208="Sažeta veličina" -02000209="Atributi" -0200020A="Kreirano" -0200020B="Pristupano" -0200020C="Prema mijenjanju" -0200020D="Zbijeno" -0200020E="Komentar" -0200020F="Enkripcija" -02000210="Podjeli prije" -02000211="Podjeli poslije" -02000212="Rječnik" -02000213="CRC" -02000214="Prema tipu" -02000215="Anti" -02000216="Način" -02000217="Glavni OS" -02000218="Sustav datoteka" -02000219="Korisnik" -0200021A="Grupa" -0200021B="Zbijeno" -0200021C="Komentar" -0200021D="Pozicija" -0200021E="U datoteci" -0200021F="Mape" -02000220="Datoteke" -02000221="Inačica" -02000222="Dio" -02000223="Višedijelni" -02000224="Razmak" -02000225="Veza" -02000226="Blokovi" -02000227="Dijelova" - -02000229="64-bitno" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Fizička veličina" -0200022D="Veličina zaglavlja" -0200022E="Kontrolni zbroj" -0200022F="Karakteristike" -02000230="Virtualna adresa" -02000231="Jedinstvena oznaka" -02000232="Kratko ime" -02000233="Aplikacija stvaranja" -02000234="Veličina sektora" -02000235="Način" -02000236="Poveznica" - -; Status bar -02000301="{0} objekt(a) izabrano" -02000302="{0} objekt(a)" - -02000320="Datoteka(e):" -02000321="Mapa(e):" -02000322="Veličina:" -02000323="Sažeta veličina:" -02000324="Arhive:" - -; List Context Menu -02000401="&Stupci..." - -02000411="&Otvori" -02000412="&Raspakiraj..." - -; ToolBar -02000501="Raspakiraj" - -; Messages -02000601="Obnova nije podržana za ovaj arhiv." -02000602="Ne mogu obnoviti arhiv {0}" -02000603="Ne mogu kreirati mapu '{0}'" -02000604="Datoteka nije podržan arhiv." -02000605="Greška" -02000606="Previše stavki" -02000607="Ni jedan program nije vezan uz navedeni tip" -02000608="Nema grešaka" -02000609="Nemoguće otvoriti datoteku '{0}' kao arhiv" -0200060A="Nemoguće otvoriti kriptiranu arhivu '{0}'. Kriva lozinka?" -0200060B="Sustav ne može pripremiti potrebnu količinu memorije" -0200060C="Nepoznata greška" -0200060D="Tip arhive nije podržan" - -; Dialogs -02000702="U redu" -02000705="&Da" -02000707="Da za &Sve" -02000709="&Ne" -0200070B="Ne za Sv&e" - -02000710="Odustajem" -02000711="&Odustajem" -02000713="&Zatvori" -02000714="&Stani" -02000715="Ponovi" - -02000720="Pomoć" - -; Extract dialog -02000800="Raspakiraj" -02000801="&Raspakiraj u:" -02000802="&Lozinka" - -02000810="Putanja mapa" -02000811="Potpuni tokovi" -02000812="Trenutni tokovi" -02000813="Bez tokova" - -02000820="Natpiši postojeće" -02000821="Pitaj prije natpisivanja postojećeg" -02000822="Natpiši postojeće bez upozorenja" -02000823="Preskoči postojeće datoteke" -02000824="Automatska promjena naziva" -02000825="Automatska promjena naziva postojećih datoteka" - -02000830="Datoteke" -02000831="&Izabrane datoteke" -02000832="&Sve datoteke" - -02000881="Lokacija za raspakiranje datoteka." - -02000890="Raspakiranje" - -; Overwrite dialog -02000900="Potvrdite zamjenu datoteka" -02000901="Ciljana mapa već sadrži datoteku koja se trenutno obrađuje." -02000902="Zamijeniti postojeću" -02000903="datoteku s ovom?" - -02000911="A&utomatska promjena naziva" - -02000982="{0} bajte" -02000983="Izmijenjeno" - -; Messages dialog -02000A00="Dijagnostičke poruke" - -02000A80="Poruka" - -02000A91="Nije podržan način sažimanja za '{0}'." -02000A92="Podatkovna greška u '{0}'. Datoteka je neispravna." -02000A93="CRC greška u '{0}'. Datoteka je neispravna." -02000A94="Greška u kriptiranoj datoteci '{0}'. Kriva lozinka?" -02000A95="CRC greška u kriptiranoj datoteci '{0}'. Kriva lozinka?" - -; Password dialog -02000B00="Unesite lozinku" -02000B01="Unesite lozinku:" -02000B02="&Prikaži lozinku" -02000B03="Ponovite lozinku:" -02000B10="Lozinka nije jednaka" -02000B11="Koristite samo engleska slova, brojeve i specijalne znake (!, #, $, ...) za lozinku" -02000B12="Lozinka je preduga" - -; Progress dialog -02000C00="Obrada" -02000C01="Utrošeno vrijeme:" -02000C02="Preostalo vrijeme:" -02000C03="Veličina:" -02000C04="Brzina:" -02000C05="Obrađeno:" -02000C06="Omjer kompresije:" - -02000C10="U pozadini" -02000C11="U prvom planu" -02000C20="&Pauza" -02000C13="Nastavi" - -02000C20="Pauza" - -02000C30="Poništiti?" - -; Compress dialog -02000D00="Dodavanje u arhiv ili stvaranje novog arhiva" -02000D01="&Arhiv:" -02000D02="&Način obnove:" -02000D03="&Format arhiva:" -02000D04="&Metoda sažimanja:" -02000D05="Kreiraj &zbijeni arhiv" -02000D06="&Parametri:" -02000D07="&Mogućnosti" -02000D08="Kreiraj E&XE arhiv" -02000D09="Višenitnost" -02000D0A="Enkripcija naziva datoteka" -02000D0B="Stupanj sažimanja" -02000D0D="Veličina rječnika:" -02000D0D="&Veličina riječi:" -02000D0E="Korištenje memorije za sažimanje:" -02000D0F="Korištenje memorije za raspakiranje:" -02000D10="Kriptiranje" -02000D11="Metoda kriptiranja:" -02000D12="Broj niti u CPU:" -02000D13="Veličina bloka u zbijenom:" -02000D14="Bez-zbijanja" -02000D15="Zbijeno" -02000D16="Sažmi i datoteke u upotrebi" - -02000D40="Razdvajanje na dijelove, bajta:" -02000D41="Netočna veličina bloka" -02000D42="Veličina bloka: {0} bajtova.\nJeste li sigurni da želite podijeliti u takve dijelove?" - -02000D81="Bez sažimanja" -02000D82="Uobičajeno" -02000D83="Najjače" -02000D84="Brzo" -02000D85="Vrlo brzo" -02000D86="Ultra" - -02000D90="Traži" - -02000DA1="Dodaj i zamjeni datoteke" -02000DA2="Obnovi i dodaj datoteke" -02000DA3="Osvježi postojeće datoteke" -02000DA4="Sinkroniziraj datoteke" - -02000DB1="Sve datoteke" - -02000DC0="Sažimanje u arhiv" - -; Columns dialog -02000E00="Stupci" -02000E01="Označavanje vidljivih stupaca u ovom pogledu. Koristite tipke Page UP i Page Down za uređivanje stupaca po vlastitom izboru." -02000E02="Odabrani stupac treba biti" -02000E03="točaka širo&k." - -02000E10="Pomakni &Gore" -02000E11="Pomakni &Dolje" -02000E12="&Prikaži" -02000E13="&Skriveno" -02000E14="Postavi" - -02000E81="Naslov" -02000E82="Širina" - -; Testing -02000F90="Testiranje" - - -; File Manager - -03000000="7-Zip upravljač datoteka" - -; Menu -03000102="&Datoteke" -03000103="&Uređivanje" -03000104="&Izgled" -03000105="&Alati" -03000106="&Pomoć" -03000107="Omiljene mape" - -; File -03000210="&Otvori" -03000211="Ot&vori mapu" -03000212="Otvori u &sustavu" -03000220="Iz&gled" -03000221="&Uređivanje" -03000230="Prei&menuj" -03000231="&Kopiraj u..." -03000232="Premje&sti u..." -03000233="O&briši" -03000240="Svojs&tva" -03000241="Komentar" -03000242="Izračun kontrolnog zbroja" -03000243="Uspoređivanje" -03000250="Stvo&ri mapu" -03000251="Stvori &datoteku" -03000260="&Izlaz" -03000270="Podije&li datoteku..." -03000271="Spo&ji datoteke..." - -; Edit -03000310="&Poništi" -03000311="Po&novi" -03000320="Od&reži" -03000321="&Kopiraj" -03000322="&Zalijepi" -03000323="O&briši" -03000330="Odaberi &sve" -03000331="Poništi odabir" -03000332="&Obrni odabir" -03000333="Odaberi..." -03000334="Poništi odabir..." -03000335="Odabir po tipu" -03000336="Poništi odabir tipa" - -; View -03000410="&Velike ikone" -03000411="&Male ikone" -03000412="&Popis" -03000413="&Detalji" -03000420="Neso&rtirano" -03000430="&Korijen" -03000431="&Nadmapa" -03000432="Proš&le mape..." -03000440="O&svježi" -03000449="Sadržaj mapa" -03000450="&2 okna" -03000451="Alatne &trake" -03000460="Alatna traka arhiva" -03000461="Standardna alatna traka" -03000462="Velike tipke" -03000463="Prikaži tekst" - -; Tools -03000510="&Mogućnosti..." -03000511="M&jerenje" - -; Help -03000610="&7-Zip pomoć..." -03000620="&O programu..." - -; Favorites -03000710="Dodaj u popis omiljenih uz" -03000720="prečicu" - -; Options Dialog - -03010000="Mogućnosti" - -; Plugins -03010100="Dodaci" -03010101="&Dodaci:" -03010110="Mogućnosti..." - -; Edit -03010200="Uređivač" -03010201="&Program za uređivanje:" -03010202="Program za uspoređivanje:" - -; System -03010300="Sustav" -03010302="Poveži 7-Zip sa:" -03010310="Dodatak" - -; Settings -03010400="Postavke" -03010401="Nadmapa \"..\" " -03010402="Prikaži prave ikone datoteka" -03010410="Prikaži sistemski izbornik" -03010420="&Označi cijeli redak" -03010421="Prikaži &linije mreže" -03010422="Jedan klik za otvaranje stavke" -03010430="Drugi n&ačin označavanja" -03010440="Koristi raspo&loživu memoriju" - -; Strings - -03020201="Kopiraj" -03020202="Premjesti" -03020203="Kopiraj u:" -03020204="Premjesti u:" -03020205="Kopiranje u tijeku..." -03020206="Premještanje u tijeku..." -03020207="Nije moguće pomaknuti ili kopirati podatke ove mape." -03020208="Operacija nije podržana." -03020209="Odabir odredišne mape." - -03020210="Potvrdite brisanje datoteke" -03020211="Potvrdite brisanje mape" -03020212="Potvrdite višestruko brisanje datoteka" -03020213="Obrisati '{0}'?" -03020214="Obrisati mapu '{0}' i sav njezin sadržaj?" -03020215="Obrisati ove {0} podatke?" -03020216="Brisanje u tijeku..." -03020217="Greška pri brisanju datoteke ili mape" -03020218="Sustav ne može premjestiti datoteku sa dugačkom putanjom u Kantu za recikliranje" - -03020220="Preimenovanje u tijeku..." -03020221="Greška pri preimenovanju datoteke ili mape" -03020222="Potvrdite kopiranje datoteka" -03020223="Kopiranje datoteka u arhiv?" - -03020230="Kreiraj mapu" -03020231="Naziv mape:" -03020232="Nova mapa" -03020233="Greška pri kreiranju mape" - -03020240="Kreiraj datoteku" -03020241="Naziv datoteke:" -03020242="Nova datoteka" -03020243="Greška pri kreiranju datoteka" - -03020250="Odaberi" -03020251="Poništi odabir" -03020252="Maska:" - -03020260="Kronologija mapa" - -03020280="Datoteka '{0}' je izmijenjena.\nObnoviti arhiv?" -03020281="Nije moguće obnoviti datoteku\n'{0}'" -03020282="Nije moguće započeti uređivanje." -03020283="Otvaranje u tijeku..." -03020284="Datoteka izgleda kao virus (naziv datoteke sadrži dugačke razmake)." - -03020291="Komentar" -03020291="&Komentar:" - -030202A0="Sustav" - -03020300="Računalo" -03020301="Mreža" -03020302="Dokumenti" - -03020400="Dodaj" -03020401="Raspakiraj" -03020402="Testiraj" - -03020420="Kopiraj" -03020421="Premjesti" -03020422="Obriši" -03020423="Svojstva" - -03020500="Podijeli datoteku" -03020501="&Podijeli u:" -03020510="Dioba..." -03020520="Potvrdite diobu" -03020521="Podijeliti datoteku u {0} dijelova?" -03020522="Veličina diobenog dijela mora biti manja od izvorne datoteke" - -03020600="Spoji datoteke" -03020601="&Spoji u:" -03020610="Spajanje..." -03020620="Označite samo prvu datoteku" -03020621="Nije pronađena datoteka koja je dio razdijeljenih datoteka" -03020622="Pronađena samo jedna datoteka od razdijeljenih datoteka" - -03020710="Izračunavanje kontrolnog zbroja..." -03020720="Info kontrolni zbroj" -03020721="CRC kontrolni zbroj za podatke:" -03020722="CRC kontrolni zbroj za podatke i nazive:" - -03020800="Skeniram..." - -03020900="Svojstva" - -03020A01="Operaciju nemoguće pozvati iz mape koja ima dugačku putanju." -03020A02="Morate obilježiti jednu datoteku" -03020A03="Morate obilježiti jednu ili više datoteka" -03020A04="Datoteka {0} već postoji" - -; Computer -03031100="Ukupni kapacitet" -03031101="Slobodni prostor" -03031102="Veličina klastera" -03031103="Naziv" - -; Network -03031200="Lokalni naziv" -03031201="Pružatelj" - -; Benchmark Dialog - -03080000="Mjerenje" -03080001="Korištenje memorije:" -03080002="Sažimanje" -03080003="Raspakiranje" -03080004="Brzina" -03080005="Ocjena" -03080006="Ukupna ocjena" -03080007="Trenutno" -03080008="Rezultat" -03080009="Prolazi:" -0308000A="Greške:" -0308000B="CPU zauzeće" -0308000C="Ocjena / Zauzeće" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/hu.txt b/External/7-Zip/Lang/hu.txt deleted file mode 100644 index a6906105f..000000000 --- a/External/7-Zip/Lang/hu.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.16 beta -; Translated by Nyilas MISY -; -; -; -; - -00000000="Hungarian" -00000001="Magyar" -00000002="14" - -; 7-Zip Configuration - -; Title -01000000="7-Zip beállítása" - -; Info Page -01000100="A 7-Zip névjegye" -01000103="A 7-Zip ingyenes szoftver. Ha elnyerte a tetszését, s mégis szeretné támogatni a további fejlesztését, regisztrálja 20 USD áron, fizethet hitelkártyával vagy más módon." -01000104="Támogatás" -01000105="Regisztráció" - -; Folders Page -01000200="Mappák" -01000210="&Munkamappa" -01000211="A &rendszer ideiglenes mappája" -01000212="&Jelenlegi" -01000213="&Meghatározott:" -01000214="Csak cserélhető meghajtókhoz" - -01000281="Válassza ki az ideiglenes archív fájlok mappáját." - -; System Page -01000300="Rendszer" -01000301="7-Zip hozzáadása a parancsértelmező helyi menüjéhez" -01000302="Lépcsőzetes helyi menü" -01000310="Helyi menü elemek:" - -; Language Page -01000400="Nyelv" -01000401="Nyelv:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip parancsok" -02000103="Archívum megnyitása" -02000104="Megnyitja a kijelölt archívumot." -02000105="Fájlok kibontása..." -02000106="Kibontja a fájlokat a kijelölt archívumból." -02000107="Hozzáad az archívumhoz..." -02000108="Behelyezi a kijelölt elem(ek)et az archívumba." -02000109="Archívum tesztelése" -0200010A="Ellenőrzi a kijelölt archívum állapotát." -0200010B="Kibontás ide" -0200010C="Fájlok kibontása a kijelölt archívumból a jelenlegi mappába." -0200010D="Kibontás ide: {0}" -0200010E="A fájlok kibontása almappába." -0200010F="Hozzáadás: {0}" -02000110="Archívumba helyezi a kijelölt elemeket." -02000111="Tömörítés és küldés..." -02000112="Archívumba tömöríti a kijelölt elemeket és e-mailben elküldi az archívumot." -02000113="Tömörítés {0} archívumba és küldés" -02000114="Archívumba tömöríti a kijelölt elemeket és e-mailben elküldi az archívumot." - -02000140="" -02000141="" - -; Properties -02000203="Útvonal" -02000204="Név" -02000205="Kiterjesztés" -02000206="Mappa" -02000207="Méret" -02000208="Tömörített méret" -02000209="Attribútumok" -0200020A="Létrehozva" -0200020B="Hozzáférés" -0200020C="Módosítva" -0200020D="Tömör" -0200020E="Megjegyzés" -0200020F="Titkosított" -02000210="Feldarabolás előtt" -02000211="Feldarabolás után" -02000212="Szótár" -02000213="CRC" -02000214="Típus" -02000215="Anti" -02000216="Módszer" -02000217="Gazda OS" -02000218="Fájlrendszer" -02000219="Felhasználó" -0200021A="Csoport" -0200021B="Blokk" -0200021C="Megjegyzés" -0200021D="Pozíció" -0200021E="Útvonal előtag" -0200021F="Mappák" -02000220="Fájlok" -02000221="Verzió" -02000222="Kötet" -02000223="Többkötet" -02000224="Eltolás" -02000225="Linkek" -02000226="Blokkok" -02000227="Kötetek" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Fizikai méret" -0200022D="Fejlécek mérete" -0200022E="Checksum" -0200022F="Karakterisztika" -02000230="Virtuális cím" -02000231="ID" -02000232="Név rendezése" -02000233="Alkalmazás készítője" -02000234="Szakasz mérete" -02000235="Mód" -02000236="Link" - -; Status bar -02000301="{0} objektum kijelölve" -02000302="{0} objektum" - -02000320="Fájlok:" -02000321="Mappák:" -02000322="Méret:" -02000323="Tömörített méret:" -02000324="Archívumok:" - -; List Context Menu -02000401="&Oszlopok..." - -02000411="M&egnyitás" -02000412="&Kibontás..." - -; ToolBar -02000501="Kibontás" - -; Messages -02000601="Az aktualizálás ennél az archívumtípusnál nem támogatott." -02000602="A(z) {0} archívum nem aktualizálható" -02000603="A(z) '{0}' mappát nem lehet létrehozni" -02000604="A fájl nem támogatott archívum." -02000605="Hiba" -02000606="Túl sok elem" -02000607="Nem társított alkalmazást az adott fájlkiterjesztéshez" -02000608="Az archívum hibamentes" -02000609="A(z) '{0}' fájl nem nyitható meg archívként" -0200060A="A(z) '{0}' titkosított archívum nem megnyitható. Hibás a jelszó?" -0200060B="A rendszer nem tudja lefoglalni a szükséges memóriát" -0200060C="Ismeretlen hiba" -0200060D="Nem támogatott archívum típus" - -; Dialogs -02000702="OK" -02000705="&Igen" -02000707="I&gen, mindre" -02000709="&Nem" -0200070B="N&em, mindre" - -02000710="Mégsem" -02000711="&Mégsem" -02000713="&Bezárás" -02000714="Leállítás" -02000715="Újraindítás" - -02000720="Súgó" - -; Extract dialog -02000800="Kibontás" -02000801="&Kibontás ide:" -02000802="Jelszó" - -02000810="Útvonal" -02000811="Teljes útvonal" -02000812="Jelenlegi útvonal" -02000813="Nincs útvonal" - -02000820="Felülírás" -02000821="Rákérdezés felülírás előtt" -02000822="Felülírás rákérdezés nélkül" -02000823="A létező fájlok kihagyása" -02000824="Automatikus átnevezés" -02000825="A létező fájlok automatikus átnevezése" - -02000830="Fájlok" -02000831="&Kijelölt fájlok" -02000832="&Minden fájl" - -02000881="Határozza meg a kibontott fájlok tárolómappáját." - -02000890="Kibontás" - -; Overwrite dialog -02000900="Fájlcsere megerősítése" -02000901="A célmappa már tartalmazza a feldolgozott fájlt." -02000902="Kívánja lecserélni a létező fájlt" -02000903="ezzel a fájllal?" - -02000911="A&utomatikus átnevezés" - -02000982="{0} bájt" -02000983="módosítva" - -; Messages dialog -02000A00="Diagnosztikai üzenetek" - -02000A80="Üzenet" - -02000A91="A(z) '{0}' tömörítési módja nem támogatott." -02000A92="Adathiba a következőben: '{0}'. A fájl sérült." -02000A93="CRC-hiba a következőben: '{0}'. A fájl sérült." -02000A94="Adathiba a titkosított fájlban: '{0}'. Hibás a jelszó?" -02000A95="CRC-hiba a titkosított fájlban: '{0}'. Hibás a jelszó?" - -; Password dialog -02000B00="Jelszó beírása" -02000B01="Írja be a jelszót:" -02000B02="A &jelszó megjelenítése" -02000B03="Jelszó újbóli beírása:" -02000B10="Jelszavak nem egyeznek" -02000B11="Csak ékezetmentes karaktereket, számokat és speciális karaktereket (!, #, $, ...) használjon a jelszavaknak" -02000B12="A jelszó túl hosszú" - -; Progress dialog -02000C00="Folyamat" -02000C01="Eltelt idő:" -02000C02="Hátralévő idő:" -02000C03="Méret:" -02000C04="Sebesség:" -02000C05="Feldolgozott:" -02000C06="Tömörítési arány:" - -02000C10="&Háttérben" -02000C11="&Előtérben" -02000C12="&Szünet" -02000C13="&Folytatás" - -02000C20="Szünet" - -02000C30="Biztos, hogy megszakítja a folyamatot?" - -; Compress dialog -02000D00="Behelyezés archívumba" -02000D01="&Archívum:" -02000D02="Akt&ualizálás módja:" -02000D03="Arcíhvum &formátuma:" -02000D04="Tömörítés &módja:" -02000D05="&Tömör archívum létrehozása" -02000D06="&Tulajdonságok:" -02000D07="Beállítások" -02000D08="SF&X archívum létrehozása" -02000D09="Többszálas" -02000D0A="Fájlnevek &titkosítása" -02000D0B="Tömörítés &foka:" -02000D0C="&Címtár mérete:" -02000D0D="&Szó mérete:" -02000D0E="A tömörítés memóriahasználata:" -02000D0F="A kitömörítés memóriahasználata:" -02000D10="Titkosítás" -02000D11="Titkosítási eljárás:" -02000D12="CPU számok:" -02000D13="Tömör blokk méret:" -02000D14="Nem tömör" -02000D15="Tömör" -02000D16="Megosztott fájlok tömörítése" - -02000D40="Darabolás &kötetekre, bájt:" -02000D41="Hibás kötet méret" -02000D42="A megadott kötet mérete: {0} byte.\nBiztos fel akarja darabolni az archívumot ilyen kötetre?" - -02000D81="Raktár" -02000D82="Normál" -02000D83="Legnagyobb" -02000D84="Gyors" -02000D85="Leggyorsabb" -02000D86="Ultra" - -02000D90="Tallózás" - -02000DA1="Fájlok behelyezése és cseréje" -02000DA2="Fájlok aktualizálása és behelyezése" -02000DA3="Létező fájlok frissítése" -02000DA4="Fájlok szinkronizálása" - -02000DB1="Minden fájl" - -02000DC0="Tömörítés" - -; Columns dialog -02000E00="Oszlopok" -02000E01="Jelölje be azokat az oszlopokat melyeket ebben a nézetben megjeleníteni kíván. A Fel és a Le gombbal tetszés szerint átrendezheti az oszlopokat." -02000E02="A kijelölt oszlop legyen " -02000E03="képpont &széles." - -02000E10="&Fel" -02000E11="&Le" -02000E12="&Megjelenítés" -02000E13="&Elrejtés" -02000E14="Beállítás" - -02000E81="Cím" -02000E82="Széles" - -; Testing -02000F90="Tesztelés" - - -; File Manager - -03000000="7-Zip fájlkezelő" - -; Menu -03000102="&Fájl" -03000103="S&zerkesztés" -03000104="&Nézet" -03000105="&Eszközök" -03000106="&Súgó" -03000107="Ked&vencek" - -; File -03000210="M&egnyitás" -03000211="Megnyitás &belül" -03000212="Megnyitás kí&vül" -03000220="&Nézet" -03000221="S&zerkesztés" -03000230="Átn&evezés" -03000231="Más&olás mappába..." -03000232="Át&helyezés mappába..." -03000233="&Törlés" -03000240="T&ulajdonságok" -03000241="&Megjegyzés" -03000242="Checksum számolása" -03000243="Különbség" -03000250="Mappa létrehozása" -03000251="Fájl létrehozása" -03000260="&Kilépés" -03000270="Fájl&darabolás..." -03000271="Fájl&egyesítés..." - -; Edit -03000310="&Visszavonás" -03000311="&Ismét" -03000320="&Kivágás" -03000321="&Másolás" -03000322="&Beillesztés" -03000323="&Törlés" -03000330="Min&d kijelölése" -03000331="Kijelölés megszüntetése" -03000332="Kijelölés &megfordítása" -03000333="Kijelölés..." -03000334="Megszüntetés..." -03000335="Kijelölés típus alapján" -03000336="Megszüntetés típus alapján" - -; View -03000410="&Nagy ikonok" -03000411="&Kis ikonok" -03000412="&Lista" -03000413="&Részletek" -03000420="Rendezetlen" -03000430="Gyökérmappa megnyitása" -03000431="Egy szinttel feljebb" -03000432="Mappa előzmények..." -03000440="&Frissítés" -03000449="Lapos ikonok" -03000450="&2 panel" -03000451="&Eszköztárak" -03000460="Archiválás eszköztár" -03000461="Szokásos eszköztár" -03000462="Nagy gombok" -03000463="Szövegcímkék megjelenítése" - -; Tools -03000510="&Beállítások..." -03000511="&Teljesítménymérés" - -; Help -03000610="&Tartalomjegyzék..." -03000620="7-Zip &névjegye..." - -; Favorites -03000710="Mappa &hozzáadása a Kedvencekhez mint" -03000720="Könyvjelző" - -; Options Dialog - -03010000="Beállítások" - -; Plugins -03010100="Beépülő modulok" -03010101="&Beépülő modulok:" -03010110="Beállítások..." - -; Edit -03010200="Szerkesztő" -03010201="&Szerkesztő:" -03010202="&Különbség:" - -; System -03010300="Rendszer" -03010302="7-Zip társítása:" -03010310="Beépülő modul" - -; Settings -03010400="Beállítások" -03010401="A \"..\" elem látható" -03010402="Az eredeti fájlikonok láthatók" -03010410="Látható a rendszermenü" -03010420="&Teljes soros kijelölés" -03010421="&Rácsvonalak kijelzése" -03010422="Elem megnyitása egyszeres kattintással" -03010430="&Alternativ kiválasztási mód" -03010440="&Nagy memória haszálata" - -; Strings - -03020201="Másolás" -03020202="Áthelyezés" -03020203="Másolás ide:" -03020204="Áthelyezés ide:" -03020205="Másolás..." -03020206="Áthelyezés..." -03020207="Ilyen mappák esetén az elemek nem helyezhetők át vagy másolhatók." -03020208="A művelet nem támogatott." -03020209="Válassza ki a cél mappát." - -03020210="Fájltörlés megerősítése" -03020211="Mappatörlés megerősítése" -03020212="Több fájltörlés megerősítése" -03020213="Biztos, hogy törölni akarja a következőt: '{0}'?" -03020214="Biztos, hogy törölni akarja a(z) '{0}' mappát és annak teljes tartalmát?" -03020215="Biztos, hogy törölni akarja ezt a(z) {0} elemet?" -03020216="Törlés..." -03020217="Hiba történt a fájl vagy a mappa törlésekor" -03020218="A rendszer nembírja mozgatni a fájlt a hosszú útvonallal a Lomtárba" - -03020220="Átnevezés..." -03020221="Hiba történt a fájl vagy a mappa átnevezésekor" -03020222="Fájl másolásának megerősítése" -03020223="Biztos, hogy fájl(oka)t akar másolni az archívumba?" - -03020230="Mappa létrehozása" -03020231="Mappa neve:" -03020232="Új mappa" -03020233="Hiba történt a mappa létrehozásakor" - -03020240="Fájl létrehozása" -03020241="Fájlnév:" -03020242="Új fájl" -03020243="Hiba történt a fájl létrehozásakor" - -03020250="Kijelölés" -03020251="Megszüntetés" -03020252="Maszk:" - -03020260="Mappa előzmények" - -03020280="'{0}'\nA fájl tartalma megváltozott.\nKívánja aktualizálni az archívumban?" -03020281="A fájl nem aktualizálható:\n'{0}'" -03020282="A szerkesztő nem indítható." -03020283="Megnyitás..." -03020284="A fájl vírusnak néz ki (a fájlnév hosszú szóközt tartalmaz a nevében)." - -03020290="Megjegyzés" -03020291="&Megjegyzés:" - -030202A0="Rendszer" - -03020300="Sajátgép" -03020301="Hálózati helyek" -03020302="Dokumentumok" - -03020400="Hozzáadás" -03020401="Kibontás" -03020402="Teszt" - -03020420="Másolás" -03020421="Áthelyezés" -03020422="Törlés" -03020423="Tulajdonságok" - -03020500="Fájldarabolás" -03020501="&Darabolás ide:" -03020510="Darabolás..." -03020520="Darabolás megerősítése" -03020521="Biztos szét akarja darabolni a fájlt {0} kötetre?" -03020522="Kötet méretének kissebbnek kell lennie, mint az eredeti fájl mérete" - -03020600="Fájlegyesítés" -03020601="&Egyesítés ide:" -03020610="Egyesítés..." -03020620="Csak az első rész kiválasztása a darabolt fájlból" -03020621="Nem ismeri fel a fájlt, mint darabolt fájl része" -03020622="Nem talál egynél több részt a darabolt fájlból" - -03020710="Leírás számolása..." -03020720="Leírás információ" -03020721="CRC leírás az adathoz:" -03020722="CRC leírás az adathoz és névhez:" - -03020800="Vizsgálat..." - -03020900="Tulajdonságok" - -03020A01="A művelet nem hívható meg abból a mappából amelynek hosszú az elérési útvonala." -03020A02="Egy fájlt ki kell jelölnie!" -03020A03="Egy vagy több fájlt ki kell jelölnie" -03020A04="A(z) {0} fájl már létezik" - -; Computer -03031100="Teljes méret" -03031101="Szabad terület" -03031102="Kluszterméret" -03031103="Címke" - -; Network -03031200="Helyi név" -03031201="Szolgáltató" - -; Benchmark Dialog - -03080000="Teljesítménymérés" -03080001="Memóriahasználat:" -03080002="Tömörítés" -03080003="Kitömörítés" -03080004="Sebesség" -03080005="Értékelés" -03080006="Összértékelés" -03080007="Jelenlegi" -03080008="Eredmény" -03080009="Menetek:" -0308000A="Hibák:" -0308000B="CPU használata" -0308000C="Becslés / Használat" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/hy.txt b/External/7-Zip/Lang/hy.txt deleted file mode 100644 index 7d0238cc3..000000000 --- a/External/7-Zip/Lang/hy.txt +++ /dev/null @@ -1,534 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.65 -; Translated by Hrant Ohanyan http://www.heyerensoft.narod.ru -; -; -; -; - -00000000="Armenian" -00000001="Հայերեն" -00000002="43" - -; 7-Zip Configuration - -; Title -01000000="7-Zip - Կազմաձևում" - -; Info Page -01000100="7-Zip ծրագրի մասին" -01000103="7-Zip հանդիսանում է ազատ տարածվող ծրագիր: Սակայն եթե գանկանում եք աջակցել 7-Zip-ի զարգացմանը Դուք կարող եք գրանցել ծրագիրը:" -01000104="Աջակցել" -01000105="Գրանցել" - -; Folders Page -01000200="Թղթապանակներ" -01000210="&Աշխատանքային թղթապանակ" -01000211="&Համակարգային ժամանակավոր թղթապանակ" -01000212="&Ընթացիկ" -01000213="&Նշանակել." -01000214="Օգտագործել միայն շարժական կրիչների համար" - -01000281="Նշեք ժամանակավոր արխիվների համար տեղ" - -; System Page -01000300="Համակարգ" -01000301="Ներդնել 7-Zip-ը համատեքստային ընտրացանկում" -01000302="Կասկադային համատեքստային ընտրացանկ" -01000310="Համատեքստային ընտրացանկի բաղադրիչները" - -; Language Page -01000400="Լեզուն" -01000401="Լեզուն." - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip-ի հրամանները" -02000103="Բացել արխիվը" -02000104="Բացել նշված արխիվը" -02000105="Բացել" -02000106="Նշված արխիվից ֆայլերի հանում" -02000107="Ավելացնել արխիվին..." -02000108="Ընդգրկել ընտրված ֆայլերը արխիվում" -02000109="Թեսթավորում" -0200010A="Թեսթավորել ընտրված արխիվը" -0200010B="Բացել այստեղ" -0200010C="Ընտրված արխիվից ֆայլերը բացել տվյալ թղթապանակում:" -0200010D="Բացել{0}-ում" -0200010E="Բացել ֆայլերը ենթամատյանում" -0200010F="Ավելացնել {0}-ին" -02000110="Ավելացնել ընտրված ֆայլերը արխիվին" -02000111="Սեղմել և ուղարկել email-ով..." -02000112="Սեղմել ընտրված ֆայլերը և ուղարկել արխիվը email-ով" -02000113="Սեղմել {0}-ում և ուղարկել email-ով" -02000114="Սեղմել ընտրված ֆայլերը և ուղարկել email-ով:" - -02000140="«Թղթապանակ»" -02000141="«Արխիվ»" - -; Properties -02000203="Ճանապարհը" -02000204="Անունը" -02000205="Ընդլայնումը" -02000206="Թղթապանակ" -02000207="Չափը" -02000208="Սեղմված" -02000209="Հատկություններ" -0200020A="Ստեղծվել է " -0200020B="Բացել" -0200020C="Փոփոխվել է" -0200020D="Անընդհատ" -0200020E="Մեկնաբանություններ" -0200020F="Կոդավորված է" -02000210="Բաժանված է մինչ" -02000211="Բաժանված է" -02000212="Բառարան" -02000213="CRC" -02000214="Տեսակը" -02000215="Հակա" -02000216="Մեթոդը" -02000217="Համակարգը" -02000218="Ֆայլային համակարգ" -02000219="Օգտագործող" -0200021A="Խումբ" -0200021B="Կողփում" -0200021C="Մեկնաբանություններ" -0200021D="Դիրքը" -0200021E="Ճանապարհը" -0200021F="Թղթապանակներ" -02000220="Ֆայլեր" -02000221="Տարբերակը" -02000222="Չափը" -02000223="Բազմահատոր" -02000224="Տեղափոխում" -02000225="Հղումներ" -02000226="Հատվածներ" -02000227="Հատորներ" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Ֆիզիկական չափը" -0200022D="Գլխագրերի չափը" -0200022E="Գումարը" -0200022F="Բնութագրություններ" -02000230="Վիրտուալ հասցեն" - -; Status bar -02000301="Ընտրված են {0} ֆայլեր" -02000302="{0} ֆայլ(եր)" - -02000320="Ֆայլեր." -02000321="Թղթապանակներ." -02000322="Չափը." -02000323="Սեղմված չափը." -02000324="Արխիվներ." - -; List Context Menu -02000401="&Սյուներ..." - -02000411="&Բացել" -02000412="&Հանել..." - -; ToolBar -02000501="Հանել" - -; Messages -02000601="Փոփոխման գործողությունը այս արխիվը չի աջակցում:" -02000602="Հնարավոր չեղավ փոփոխել {0} արխիվը" -02000603="Հնարավոր չէ ստեղծել '{0}' թղթապանակը:" -02000604="Տվյալ ֆայլը արխիվ չէ" -02000605="Սխալ" -02000606="Շատ են էլեմենտները" -02000607="Չկա ասոցացված ծրագիր" -02000608="Սխալներ չկան" -02000609="Հնարավոր չէ բացել '{0}' ֆայլը որպես արխիվ" -0200060A="Հնարավոր չէ բացել '{0}' կողփված արխիվը:Մուտքագրեք գաղտնաբառը:" -0200060B="Բավարար չէ ազատ տեղը" -0200060C="Անհայտ սխալ" -0200060D="Արխիվի չաջակցվող ձևաչափ" - -; Dialogs -02000702="ԼԱՎ" -02000705="&Այո" -02000707="Այո բոլորի &համար" -02000709="&Ոչ" -0200070B="Ոչ բոլորի &համա" - -02000710="Մերժել" -02000711="&Մերժել" -02000713="&Փակել" -02000714="Կանգնեցնել" -02000715="Վերաբեռնել" - -02000720="Օգնություն" - -; Extract dialog -02000800="Հանել" -02000801="&Բացել." -02000802="&Գաղտնագիրը." - -02000810="Ճանապարհ" -02000811="Ամբողջական& ճանապարհ" -02000812="Հա&րաբերական ճանապարհ" -02000813="&Առանց ճանապարհների" - -02000820="Վերագրանցում" -02000821="&Հաստատմամբ" -02000822="Ա&ռանց հաստատման" -02000823="Բաց &թողնել" -02000824="Անվանափոխել" -02000825="Անվանափոխել ինքնուրույնաբար" - -02000830="Ֆայլեր" -02000831="Ընտրված ֆայլեր" -02000832="Բոլոր ֆայլերը" - -02000881="Նշեք հանվող ֆայլերի տեղադրությունը:" - -02000890="Բացվում է" - -; Overwrite dialog -02000900="Հաստատեք ֆայլի փոխարինումը" -02000901="Թղթապանակում արդեն կա մշակված ֆայլ:" -02000902="Փոխարինե՞լ ֆայլը" -02000903="տվյալ ֆայլով:" - -02000911="Անվանափոխել ինքն." - -02000982="{0} բայթ" -02000983="փոփոխված" - -; Messages dialog -02000A00="Հաղորդագրություն" - -02000A80="Հաղորդագրություն" - -02000A91="'{0}' ֆայլի համար սեղման մեթոդը չի աջակցվում" -02000A92="Տվյալների սխալ'{0}'-ում: Ֆայլը վնասված է:" -02000A93="CRC սխալ'{0}'-ում: Ֆայլը վնասված է:" -02000A94="Սխալ '{0}' ֆայլի կոդավորման տվյալներում:Գաղտնագիրը սխա՞լ է:" -02000A95="CRC սխալ '{0}' կոդավորված ֆայլի համար: Գաղտնագիրը սխա՞լ է:" - -; Password dialog -02000B00="Գրեք գաղտնագիրը" -02000B01="&Գրեք գաղտնագիրը." -02000B02="&Ցույց տալ գաղտնագիրը" -02000B03="&Ցույց տալ գաղտնագիրը." -02000B10="Գաղտնագիրը չի համապատասխանում" -02000B11="Գաղտնագրի համար օգտագործեք միայն լատինական այբուբենը, թվեր և հատուկ նշաններ (!, #, $, ...)" -02000B12="Գաղտնագիրը չափազանց երկար է" - -; Progress dialog -02000C00="Գործողությունը" -02000C01="Անցել է." -02000C02="Մնացել է." -02000C03="Չափը." -02000C04="Արագությունը." -02000C05="Ընթացքը." -02000C06="Սեղղման հաճախականությունը" - -02000C10="&Հետևում" -02000C11="&Առջևում" -02000C12="&Դադար" -02000C13="&Շարունակել" - -02000C20="Դադարի մեջ է" - -02000C30="Ընդհատե՞լ գործողությունը:" - -; Compress dialog -02000D00="Ավելացնել արխիվին" -02000D01="&Արխիվը." -02000D02="&Փոփոխման կարգը." -02000D03="&Արխիվի ձևաչափը." -02000D04="&Սեղման մեթոդը." -02000D05="Ստեղծել &Solid արխիվ" -02000D06="&Չափանիշները." -02000D07="&Ընտրանքներ" -02000D08="Ստեղծել SF&X արխիվ" -02000D09="Բ&ազմաշարան" -02000D0A="&Կոդավորել ֆայլերի անունները" -02000D0B="&Սեղման աստիճանը." -02000D0C="Բառարանի &չափը." -02000D0D="Բառի չ&ափը." -02000D0E="Հիշողության ծավալը սեղման համար." -02000D0F="Հիշողության ծավալը բացելու համար." -02000D10="Կոդավորում" -02000D11="Կոդավորման եղանակը." -02000D12="CPU հոսանքների քանակը." -02000D13="Չափը." -02000D14="Ֆայլի չափով" -02000D15="Անդադար" -02000D16="Սեղմել բացված ֆայլերը" - -02000D40="Բաժանել &մասերի` (բայթերով)." -02000D41="Սխալ գործողությունը կատարելիս" -02000D42="Հատորի նշված չափը. {0} բայթ:\nԲաժանե˚լ արխիվը նշված հատորների:" - -02000D81="Առանց սեղման" -02000D82="Նորմալ" -02000D83="Մաքսիմալ" -02000D84="Արագ" -02000D85="Արագ" -02000D86="Ուլտրա" - -02000D90="Դիտել" - -02000DA1="Ավելացնել և սեղմել" -02000DA2="Թարմացնել և ավելացնել" -02000DA3="Թարմացնել" -02000DA4="Սինխրոնիզացնել" - -02000DB1="Բոլոր ֆայլերը" - -02000DC0="Սեղմվում է" - -; Columns dialog -02000E00="Սյուներ" -02000E01="Նշեք սյուները, որոնք պետք է երևան այս թղթապանակում:Կոճակներով` \"Վերև\" և \"Ներքև\" կարող եք նշել սյուների տրման հաջորդականությունը:" -02000E02="Ընտրված սյունները կարող են ունենալ լայնություն" -02000E03="կետեր:" - -02000E10="&Վերև" -02000E11="Ն&երքև" -02000E12="Ցույց &տալ" -02000E13="&Թաքցնել" -02000E14="Տեղակայել" - -02000E81="Անունը" -02000E82="Լայոնւթյունը" - -; Testing -02000F90="Թեսթավորում" - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&Ֆայլ" -03000103="&Խմբագրել" -03000104="&Տեսքը" -03000105="Գ&ործիքներ" -03000106="&Օգնություն" -03000107="&Ընտրյալները" - -; File -03000210="&Բացել" -03000211="Բացել &ներսում" -03000212="Բացել դրս&ում" -03000220="Դիտել" -03000221="&Խմբագրել" -03000230="Անվա&նափոխել" -03000231="&Պատճենել..." -03000232="&Տեղափոխել..." -03000233="&Ջնջել" -03000240="Հատկու&թյուններ" -03000241="Մեկնաբա&նություններ" -03000242="Արդյունքը" -03000250="&Ստեղծել թղթապանակ" -03000251="Ստեղծել &ֆայլ" -03000260="Դուրս &գալ" -03000270="Բաժանել& ֆայլը..." -03000271="Միացնել& ֆայլը..." - -; Edit -03000310="&Հրաժարվել" -03000311="&Վերադարձնել" -03000320="&Կտրել" -03000321="&Պատճենել" -03000322="Տեղա&դրել" -03000323="&Ջնջել" -03000330="Ընտրել &բոլորը" -03000331="Հանել ընտրումը" -03000332="&Ետարկել &ընտրումը" -03000333="Ընտրել..." -03000334="Հանել ընտրումը..." -03000335="Ընտրել ըստ տեսակի" -03000336="Հանել ըստ տեսակի ընտրումը " - -; View -03000410="&Մեծ նշաններ" -03000411="&Փոքր նշաններ" -03000412="Ցուց&ակ" -03000413="&Աղյուսակ" -03000420="Առանց դասավորման" -03000430="Բոլոր գործող պնակները" -03000431="Անցնել մեկ մակարդակ վերև" -03000432="Թղթապանակների պատմությունը..." -03000440="Թ&արմացնել" -03000449="Հարթ եղանակ" -03000450="&2 վահանակ" -03000451="&Գործիքների վահանակ" -03000460="Ծրագրի կոճակների վահանակ" -03000461="Կոճակների ստանդարտ վահանակ" -03000462="Մեծ կոճակներ" -03000463="Կոճակների անունը" - -; Tools -03000510="Կարգավորումներ..." -03000511="Արտադրողականության թեսթավորում" - -; Help -03000610="&Բովանդակությունը..." -03000620="Ծրագրի &մասին..." - -; Favorites -03000710="Ավելացնել թղթապանակը &ընտրյալներին որպես" -03000720="Էջանիշ" - -; Options Dialog - -03010000="Կարգավորումներ" - -; Plugins -03010100="Ընդլայնումներ" -03010101="&Ընդլայնումներ." -03010110="Հատկու&թյուններ" - -; Edit -03010200="Խմբագիր" -03010201="&Խմբագիր" - -; System -03010300="Համակարգը" -03010302="Ասոցացնել 7-Zip-ի հետ" -03010310="Ընդլայնումներ" - -; Settings -03010400="Կարգավորումներ" -03010401="Ցույց տալ \"..\"" -03010402="Ցույց տալ ֆայլերի իրական պատկերները" -03010410="Ցույց տալ համակարգային ընտրացանկը" -03010420="Կուրսորը ամբողջ տողով" -03010421="Ցույց տալ բաժանարարները" -03010430="Նշման այլընտրանքային եղանակ" -03010440="Օգտագործել հիշողության մեծ ծավալներ" - -; Strings - -03020201="Պատճենել" -03020202="Տեղափոխել" -03020203="Պատճենել." -03020204="Տեղափոխել." -03020205="Պատճենում...." -03020206="Տեղափոխում..." -03020207="Հնարավոր չէ պատճենել ֆայլեր տվյալ թղթապանակների համար" -03020208="Գործողությունը չի աջակցվում" -03020209="Ընտրեք թղթապանակը" - -03020210="Հաստատեք ֆայլի ջնջումը" -03020211="Հաստատեք թղթապանակի ջնջումը" -03020212="Հաստատեք ֆայլերի ջնջումը" -03020213="Իրո՞ք ցանկանում եք ջնջել \"{0}\" " -03020214="Իրո՞ք ցանկանում եք ջնջել \"{0}\" թղթապանակը և նրա պարունակությունը:" -03020215="Իրո՞ք ցանկանում եք ջնջել ({0} հատ) ֆայլերը:" -03020216="Ջնջվում է..." -03020217="Սխալ` ֆայլը կամ թղթապանակը ջնջելիս:" -03020218="Հնարավոր չէ Աղբարկղ տեղափոխել երկար անուններով ֆայլեր:" - -03020220="Անվանափոխում..." -03020221="Սխալ` ֆայլը կամ թղթապանակը անվանափոխելիս:" -03020222="Հաստատեք ֆայլերի պատճենումը" -03020223="Պատճենե՞լ այս ֆայլերը արխիվի մեջ:" - -03020230="Ստեղծել թղթապանակ" -03020231="Թղթապանակի անունը." -03020232="Նոր թղթապանակ" -03020233="Սխալ` թղթապանակ ստեղծելիս" - -03020240="Ստեղծել ֆայլ" -03020241="Ֆայլի անունը." -03020242="Նոր ֆայլ" -03020243="Սխալ` ֆայլի ստեղծման ժամանակ" - -03020250="Ընտրել" -03020251="Հանել ընտրումը" -03020252="Դիմակ." - -03020260="Թղթապանակների պատմությունը" - -03020280="'{0}' ֆայլը փոփոխվել է:\n Թարմացնե՞լ այն արխիվում:" -03020281="Հնարավոր չէ թարմացնել ֆայլը \n'{0}' արխիվում:" -03020282="Հնարավոր չէ բացել խմբագիրը:" -03020283="Բացվում է..." -03020284="Ֆայլը նման է վիրուսի:" - -03020290="Մեկնաբանություններ" -03020291="&Մեկնաբանություններ" - -030202A0="Համակարգը" - -03020300="Համակարգիչը" -03020301="Ցանցը" -03020302="Documents" - -03020400="Ավելացնել" -03020401="Հանել" -03020402="Թեսթավորում" - -03020420="Պատճենել" -03020421="Տեղափոխել" -03020422="Ջնջել" -03020423="Տեղեկություն" - -03020500="Բաժանել ֆայլը" -03020501="&Բաժանել." -03020510="Բաժանվում է..." -03020520="Հաստատեք բաժանումը" -03020521="Իրո˚ք բաժանել ֆայլը {0} հատորների" -03020522="Հատորի չափը պետք է փոքր լինի բաժանվող ֆայլի չափից" - -03020600="Միացնել ֆայլը" -03020601="&Միացնել." -03020610="Միացում..." -03020620="Ընտրեք բաժանված ֆայլի միայն առաջին մասը" -03020621="Հնարավոր չեղավ ճանաչել բաժանված ֆայլը" -03020622="Հնարավոր չեղավ գտնել բաժանված ֆայլի մասերը" - -03020710="Վերջնական գումարի հաշվում..." -03020720="Վերջնական արդյունքը" -03020721="CRC Վերջնական արդյունքը ֆայլերի համար. " -03020722="CRC Վերջնական արդյունքը ֆայլերի և անունների համար." - -03020800="Սկանավորում..." - -03020900="Հատկություններ" - -03020A01="Գործողությունը չի կարող կատարվել այն թղթապանակից, որը ունի երկար ճանապարհ:" -03020A02="Ընտրեք մեկ ֆայլ" -03020A03="Ընտրեք մեկ կամ մի քանի ֆայլեր" -03020A04="{0} ֆայլը արդեն գոյություն ունի" - -; Computer -03031100="Ծավալը" -03031101="Ազատ է" -03031102="Կլաստերի չափը" -03031103="Նշանը" - -; Network -03031200="Լոկալ անունը" -03031201="Սպասարկողը" - -; Benchmark Dialog - -03080000="Արտադրողականության թեսթավորում" -03080001="Հիշողության ծավալը." -03080002="Սեղմվում է" -03080003="Բացում" -03080004="Արագությունը" -03080005="Վարկանիշը" -03080006="Ընդհանուր վարկանիշը" -03080007="Տվյալ" -03080008="Արդյունքում" -03080009="Անցումներ." -0308000A="Սխալներ." -0308000B="CPU Usage" -0308000C="Վարկանիշը / Օգտ." - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/id.txt b/External/7-Zip/Lang/id.txt deleted file mode 100644 index b26cf5e91..000000000 --- a/External/7-Zip/Lang/id.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.10 beta -; Diterjemahkan oleh Frans Liando -; -; Sumber: http://ikc.dinus.ac.id/bukuputih/istilah-ti-indonesia.txt -; -; - -00000000="Indonesian" -00000001="Bahasa Indonesia" -00000002="33" - -; 7-Zip Configuration - -; Title -01000000="Konfigurasi 7-Zip" - -; Info Page -01000100="Mengenai 7-Zip" -01000103="7-Zip merupakan perangkat lunak gratis. Bagaimanapun, Anda bisa mendukung pengembangan 7-Zip dengan mendaftar.\n\nTerjemahan oleh Frans Liando." -01000104="Dukung" -01000105="Daftar" - -; Folders Page -01000200="Pelipat" -01000210="&Pelipat kerja" -01000211="Pelipat temporer &sistem" -01000212="S&ekarang" -01000213="&Ditentukan:" -01000214="Hanya untuk penggerak bisa pindah" - -01000281="Tetapkan lokasi untuk berkas arsip temporer." - -; System Page -01000300="Sistem" -01000301="Integrasikan 7-Zip ke cangkang menu konteks" -01000302="Menu konteks dikaskade" -01000310="Butir-butir pada menu konteks:" - -; Language Page -01000400="Bahasa" -01000401="Bahasa:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Perintah-perintah 7-Zip" -02000103="Buka arsip" -02000104="Buka arsip terpilih." -02000105="Ekstrak berkas..." -02000106="Ekstrak berkas arsip terpilih." -02000107="Tambah ke arsip..." -02000108="Tambah butir terpilih ke arsip." -02000109="Uji arsip" -0200010A="Uji integritas dari arsip terpilih." -0200010B="Ekstrak di sini" -0200010C="Ekstrak berkas arsip terpilih ke pelipat ini." -0200010D="Ekstrak ke {0}" -0200010E="Ekstrak berkas ke sub pelipat." -0200010F="Tambah ke {0}" -02000110="Tambah butir terpilih ke arsip." -02000111="Mampat dan surat kawat..." -02000112="Mampat butir terpilih ke arsip dan kirim via surat kawat." -02000113="Mampat ke {0} dan surat kawat" -02000114="Mampat butir terpilih ke arsip dan kirim via surat kawat." - -02000140="" -02000141="" - -; Properties -02000203="Lintasan" -02000204="Nama" -02000205="Ekstensi" -02000206="Pelipat" -02000207="Ukuran" -02000208="Ukuran Dikemas" -02000209="Atribut" -0200020A="Dibuat" -0200020B="Diakses" -0200020C="Dimodifikasi" -0200020D="Padat" -0200020E="Komentar" -0200020F="Terenkripsi" -02000210="Belah Sebelum" -02000211="Belah Setelah" -02000212="Kamus" -02000213="CRC" -02000214="Tipe" -02000215="Anti" -02000216="Metode" -02000217="SO Host" -02000218="Sistem Berkas" -02000219="Pengguna" -0200021A="Grup" -0200021B="Blok" -0200021C="Komentar" -0200021D="Posisi" -0200021E="Awalan Lintasan" -0200021F="Pelipat" -02000220="Berkas" -02000221="Versi" -02000222="Volume" -02000223="Multivolume" -02000224="Ofset" -02000225="Tautan" -02000226="Blok" -02000227="Volume" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Ukuran Fisik" -0200022D="Ukuran Tajuk" -0200022E="Ceksum" -0200022F="Karakteristik" -02000230="Alamat Maya" -02000231="ID" -02000232="Nama Singkat" -02000233="Aplikasi Pembuat" -02000234="Ukuran Sektor" -02000235="Ragam" -02000236="Taut" - -; Status bar -02000301="{0} objek terpilih" -02000302="{0} objek" - -02000320="Berkas:" -02000321="Pelipat:" -02000322="Ukuran:" -02000323="Ukuran terkompres:" -02000324="Arsip:" - -; List Context Menu -02000401="&Kolom..." - -02000411="&Buka" -02000412="&Ekstrak..." - -; ToolBar -02000501="Ekstrak" - -; Messages -02000601="Operasi pembaruan tidaklah didukung untuk arsip ini." -02000602="Tak bisa perbarui arsip {0}" -02000603="Tak bisa membuat pelipat '{0}'" -02000604="Berkas arsip tak didukung." -02000605="Kesalahan" -02000606="Terlalu banyak butir" -02000607="Tak ada aplikasi yang diasosiasikan dengan ekstensi dari nama berkas yang diberikan" -02000608="Tidak ada kesalahan" -02000609="Tak bisa membuka berkas arsip '{0}'" -0200060A="Tak bisa membuka arsip terenkripsi '{0}'. Salah kata sandi?" -0200060B="Sistem tak bisa mengalokasikan jumlah memori yang diperlukan" -0200060C="Kesalahan tak dikenal" -0200060D="Tipe arsip tak didukung" - -; Dialogs -02000702="Oke" -02000705="&Ya" -02000707="Ya untuk &semua" -02000709="&Tidak" -0200070B="Tidak untuk s&emua" - -02000710="Batal" -02000711="&Batal" -02000713="&Tutup" -02000714="Henti" -02000715="Start Ulang" - -02000720="Bantuan" - -; Extract dialog -02000800="Ekstrak" -02000801="E&kstrak ke:" -02000802="Kata sandi" - -02000810="Ragam lintasan" -02000811="Nama lengkap lintasan" -02000812="Nama lintasan sekarang" -02000813="Tidak ada nama lintasan" - -02000820="Ragam tulis timpa" -02000821="Konfirmasikan sebelum tulis timpa" -02000822="Tulis timpa tanpa konfirmasi" -02000823="Lewati berkas yang ada" -02000824="Penamaan ulang automatis" -02000825="Penamaan ulang automatis terhadap berkas yang ada" - -02000830="Berkas" -02000831="&Berkas terpilih" -02000832="&Semua berkas" - -02000881="Tetapkan lokasi untuk berkas yang diekstrak." - -02000890="Mengekstrak" - -; Overwrite dialog -02000900="Konfirmasi Penggantian Berkas" -02000901="Pelipat tujuan telah berisi berkas yang terproses." -02000902="Maukah Anda mengganti berkas yang ada" -02000903="dengan yang satu ini?" - -02000911="Nama &Ulang Automatis" - -02000982="{0} bita" -02000983="dimodifikasi pada" - -; Messages dialog -02000A00="Pesan Diagnosa" - -02000A80="Pesan" - -02000A91="Metode kompresi untuk '{0}' tak didukung." -02000A92="Kesalahan data di '{0}'. Berkas ini rusak." -02000A93="CRC gagal di '{0}'. Berkas ini rusak." -02000A94="Kesalahan data di berkas terenkripsi '{0}'. Salah kata sandi?" -02000A95="CRC gagal di berkas terenkripsi '{0}'. Salah kata sandi?" - -; Password dialog -02000B00="Masukkan kata sandi" -02000B01="Masukkan kata sandi:" -02000B02="&Perlihatkan kata sandi" -02000B03="Konfirmasi kata sandi:" -02000B10="Kata sandi tidak cocok" -02000B11="Gunakanlah hanya huruf Indonesia, nomor dan karakter khusus (!, #, $, ...) untuk kata sandi" -02000B12="Kata sandi terlalu panjang" - -; Progress dialog -02000C00="Proses" -02000C01="Waktu terpakai:" -02000C02="Sisa waktu:" -02000C03="Jumlah ukuran:" -02000C04="Kecepatan:" -02000C05="Terproses:" -02000C06="Rasio kompresi:" - -02000C10="Latar &Belakang" -02000C11="Latar &Depan" -02000C12="&Jeda" -02000C13="&Lanjut" - -02000C20="Jeda" - -02000C30="Anda yakin ingin membatalkannya?" - -; Compress dialog -02000D00="Tambah ke arsip" -02000D01="&Arsip:" -02000D02="Ragam perbar&u:" -02000D03="&Format arsip:" -02000D04="&Metode kompresi:" -02000D05="Buat ar&sip padat" -02000D06="&Parameter:" -02000D07="Pilihan" -02000D08="Buat arsip SF&X" -02000D09="Multi-rangkaian" -02000D0A="Enkripsi &nama berkas" -02000D0B="&Level kompresi:" -02000D0C="Ukuran &kamus:" -02000D0D="Ukuran ka&ta:" -02000D0E="Pemakaian memori untuk Pemampatan:" -02000D0F="Pemakaian memori untuk Pengawamampatan:" -02000D10="Enkripsi" -02000D11="Metode enkripsi:" -02000D12="Jumlah CPU:" -02000D13="Ukuran blok padat:" -02000D14="Non-padat" -02000D15="Padat" -02000D16="Kompres berkas bersama" - -02000D40="Belah ke &volume, bita:" -02000D41="Ukuran volume salah" -02000D42="Tentukan ukuran volume: {0} bita.\nAnda Yakin ingin membelah arsip menjadi volume demikian?" - -02000D81="Simpan" -02000D82="Normal" -02000D83="Maksimum" -02000D84="Cepat" -02000D85="Tercepat" -02000D86="Ultra" - -02000D90="Ramban" - -02000DA1="Tambah dan ganti berkas" -02000DA2="Perbarui dan tambah berkas" -02000DA3="Segarkan ulang berkas yang ada" -02000DA4="Sinkronisasikan berkas" - -02000DB1="Semua Berkas" - -02000DC0="Pemampatan" - -; Columns dialog -02000E00="Kolom" -02000E01="Cek kolom yang ingin ditampakkan dalam pelipat ini. Gunakan tombol Pindah ke Atas dan Pindah ke Bawah untuk mengurutkan kolom." -02000E02="Kolom yang terpilih harus" -02000E03="ber-piksel &lebar." - -02000E10="Pindah ke &Atas" -02000E11="Pindah ke &Bawah" -02000E12="Per&lihatkan" -02000E13="&Sembunyikan" -02000E14="Set" - -02000E81="Judul" -02000E82="Lebar" - -; Testing -02000F90="Pengujian" - - -; File Manager - -03000000="Manager Berkas 7-Zip" - -; Menu -03000102="&Berkas" -03000103="&Sunting" -03000104="Tam&pilan" -03000105="P&eralatan" -03000106="Ban&tuan" -03000107="&Kesukaan" - -; File -03000210="&Buka" -03000211="Buka Sisi &Dalam" -03000212="Buka Sisi L&uar" -03000220="&Pandangan" -03000221="&Sunting" -03000230="&Nama Ulang" -03000231="S&alin Ke..." -03000232="P&indahkan Ke..." -03000233="&Hapus" -03000240="P&roperti" -03000241="K&omentari" -03000242="Hitung Ceksum" -03000243="Beda" -03000250="Buat Pelipat" -03000251="Buat Berkas" -03000260="&Keluar" -03000270="Be&lah Berkas..." -03000271="Gabun&g Berkas..." - -; Edit -03000310="&Ulangi" -03000311="&Batalkan" -03000320="Po&tong" -03000321="S&alin" -03000322="Tem&pel" -03000323="&Hapus" -03000330="Pi&lih Semua" -03000331="Tak Memilih Semua" -03000332="Pilih Kebal&ikannya" -03000333="Pilih..." -03000334="Tak Memilih..." -03000335="Pilih Berdasarkan Tipe" -03000336="Tak Memilih Berdasarkan Tipe" - -; View -03000410="Ikon &Besar" -03000411="Ikon &Kecil" -03000412="&Daftar" -03000413="&Rincian" -03000420="Tak Beraturan" -03000430="Buka Akar Pelipat" -03000431="Naik Satu Tingkat" -03000432="Histori Pelipat..." -03000440="&Segarkan Ulang" -03000449="Pandangan Datar" -03000450="&2 Panel" -03000451="Ba&tang Peralatan" -03000460="Batang Peralatan Arsip" -03000461="Ba&tang Peralatan Standar" -03000462="Tombol Besar" -03000463="Perlihatkan Teks Tombol" - -; Tools -03000510="&Pilihan..." -03000511="&Tolok" - -; Help -03000610="Petun&juk..." -03000620="Mengen&ai 7-Zip..." - -; Favorites -03000710="Tambah pelipat ke Kesukaan sebagai" -03000720="Marka Buku" - -; Options Dialog - -03010000="Pilihan" - -; Plugins -03010100="Tambahan" -03010101="&Tambahan:" -03010110="Pilihan..." - -; Edit -03010200="Penyunting" -03010201="P&enyunting:" -03010202="Be&da:" - -; System -03010300="Sistem" -03010302="Asosiasikan 7-Zip dengan:" -03010310="Tambahan" - -; Settings -03010400="Setelan" -03010401="Perlihatkan butir \"..\"" -03010402="Perlihatkan ikon asli berkas" -03010410="Perlihatkan menu sistem" -03010420="&Memilih baris penuh" -03010421="Perlihatkan &garis kisi-kisi" -03010422="Sekali klik untuk membuka" -03010430="Ragam pemilihan &alternatif" -03010440="Gunakan halaman memori &besar" - -; Strings - -03020201="Salin" -03020202="Pindah" -03020203="Salin ke:" -03020204="Pindah ke:" -03020205="Menyalin..." -03020206="Memindah..." -03020207="Anda tak bisa memindah atau menyalin butir untuk pelipat demikian." -03020208="Pengoperasian tak didukung untuk pelipat demikian." -03020209="Pilih pelipat tujuan." - -03020210="Konfirmasi Hapus Berkas" -03020211="Konfirmasi Hapus Pelipat" -03020212="Konfirmasi Hapus Berkas-berkas" -03020213="Anda yakin ingin hapus '{0}'?" -03020214="Anda yakin ingin hapus pelipat '{0}' dan semua isinya?" -03020215="Anda yakin ingin hapus {0} butir?" -03020216="Menghapus..." -03020217="Kesalahan Ketika Menghapus Berkas atau Pelipat" -03020218="Sistem tak bisa memindah suatu berkas yang berlintasan panjang ke Recycle Bin" - -03020220="Nama Ulang..." -03020221="Kesalahan Ketika Penamaan Ulang Berkas atau Pelipat" -03020222="Konfirmasi Salin Berkas" -03020223="Anda yakin ingin menyalin berkas ke arsip?" - -03020230="Buat Pelipat" -03020231="Nama pelipat:" -03020232="Pelipat Baru" -03020233="Kesalahan Membuat Pelipat" - -03020240="Buat Berkas" -03020241="Nama berkas:" -03020242="Berkas Baru" -03020243="Kesalahan Pembuatan Berkas" - -03020250="Pilih" -03020251="Tak Memilih" -03020252="Masker:" - -03020260="Histori Pelipat" - -03020280="Berkas '{0}' telah termodifikasi.\nApakah Anda ingin perbarui berkas dalam arsip?" -03020281="Tak bisa perbarui berkas\n'{0}'" -03020282="Tak bisa memulai penyunting." -03020283="Membuka..." -03020284="Berkas ini tampaknya seperti virus (pada nama berkas berisi spasi yang panjang)." - -03020290="Komentar" -03020291="&Komentari:" - -030202A0="Sistem" - -03020300="Komputer" -03020301="Jaringan" -03020302="Dokumen" - -03020400="Tambah" -03020401="Ekstrak" -03020402="Uji" - -03020420="Salin" -03020421="Pindah" -03020422="Hapus" -03020423="Info" - -03020500="Belah Berkas" -03020501="&Belah ke:" -03020510="Membelah..." -03020520="Konfirmasi Membelah" -03020521="Anda yakin ingin membelah berkas menjadi {0} volume?" -03020522="Ukuran volume seharusnya lebih kecil dari pada ukuran asli berkas" - -03020600="Gabung Berkas" -03020601="&Gabung ke:" -03020610="Menggabung..." -03020620="Pilih bagian pertama saja dari berkas belahan" -03020621="Tak bisa mendeteksi berkas sebagai bagian berkas belahan" -03020622="Tak bisa menemukan lebih dari satu bagian berkas belahan" - -03020710="Hitung ceksum..." -03020720="Informasi ceksum" -03020721="Ceksum CRC untuk data:" -03020722="Ceksum CRC untuk data dan nama:" - -03020800="Memindai..." - -03020900="Properti" - -03020A01="Pengoperasian tak bisa memanggil dari pelipat yang berlintasan panjang." -03020A02="Anda harus memilih satu berkas" -03020A03="Anda harus memilih satu atau lebih berkas" -03020A04="Berkas {0} telah ada" - -; Computer -03031100="Ukuran Total" -03031101="Ruang Kosong" -03031102="Ukuran Gugus" -03031103="Label" - -; Network -03031200="Nama Lokal" -03031201="Penyelenggara" - -; Benchmark Dialog - -03080000="Tolok" -03080001="Pemakaian memori:" -03080002="Pemampatan" -03080003="Pengawamampatan" -03080004="Kecepatan" -03080005="Penilaian" -03080006="Jumlah Penilaian" -03080007="Sekarang" -03080008="Hasil" -03080009="Lewat:" -0308000A="Kesalahan:" -0308000B="Pemakaian CPU" -0308000C="Penilaian/Pemakaian" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/io.txt b/External/7-Zip/Lang/io.txt deleted file mode 100644 index b7b05e514..000000000 --- a/External/7-Zip/Lang/io.txt +++ /dev/null @@ -1,453 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.08 beta8 -; Translated by iZoom -; -; -; -; - -00000000="Ido" -00000001="Ido" - -; 7-Zip Configuration - -; Title -01000000="7-Zip-Ajusto" - -; Info Page -01000100="Pri progamo..." -01000103="7-Zip esas gratuita programo. Tamen, vu povas mantenar developado di 7-Zip per enregistrigesar." -01000105="Enregistrigesar" - -; Folders Page -01000200="Dosieruyi" -01000210="&Laborala dosieruyo" -01000211="&Sistemala provizora dosieruyo" -01000212="&Nuna" -01000213="&Definez:" -01000214="&Uzar nur por deprenebla datumportili" - -01000281="Definar loko por provizora arkiva dosieri." - -; System Page -01000300="Sistemo" -01000301="Pozar 7-Zip'o en kuntexta menuo di shelo" -01000302="Kaskada kuntexta menuo" -01000310="Elementi di kuntexta menuo:" - -; Language Page -01000400="Linguo" -01000401="Linguo:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Komandi di 7-Zip" -02000103="Apertar" -02000104="Apertar merkita dosiero." -02000105="Extraktar dosieri..." -02000106="Extraktar dosieri ek merkita arkivo." -02000107="Adjuntar ad arkivo..." -02000108="Adjuntar merkita objekti." -02000109="Verifikar arkivo" -0200010A="Verifiko di integreso di merkita arkivo." -0200010B="Extraktez hike" -0200010C="Extraktar dosieri ek merkita arkivo aden nuna dosieruyo." -0200010D="Extraktez aden {0}" -0200010E="Extraktar dosieri aden subdosieruyo." -0200010F="Adjuntar ad {0}" -02000110="Adjuntar merkita objekti ad arkivo." -02000111="Enarkivigar ed sendar elk-posto..." -02000112="Enarkivigar la merkita objekti e sendar la arkivo." -02000113="Enarkivigar aden {0} e sendar elk-posto..." -02000113="Enarkivigar la merkita objekti e sendar la arkivo." - -02000140="" -02000141="" - -; Properties -02000203="Dosiervoyo" -02000204="Nomo" -02000205="Dosiernoma sufixo" -02000206="Dosieruyo" -02000207="Grandeso" -02000208="Enarkiva grandeso" -02000209="Atributi" -0200020A="Kreita" -0200020B="Acesita" -0200020C="Chanjita" -0200020D="Solida" -0200020E="Komentita" -0200020F="Chifrita" -02000210="Fendita ante" -02000211="Fendita pos" -02000212="Vortaro" -02000213="CRC" -02000214="Tipo" -02000215="Kontre" -02000216="Metodo" -02000217="Operacala sistemo" -02000218="Dosiersistemo" -02000219="Uzero" -0200021A="Grupo" -0200021B="Bloko" -0200021C="Komenturo" -0200021D="Poziciono" - -; Status bar -02000301="{0} objekt(o|i) merkita" -02000302="{0} objekt(o|i)" - -; List Context Menu -02000401="&Kolumni..." - -02000411="&Apertar" -02000412="&Extraktez..." - -; ToolBar -02000501="Extraktar" - -; Messages -02000601="Rinovigo ne suportesas por ica arkivo." -02000602="Rinovigo dil arkivo {0} faliis" -02000603="Krear dosieruyo '{0}' neposiblesis" -02000604="Dosiero ne esas suportata arkivo." -02000605="Eroro" -02000606="Tro multa objekti" -02000607="Programo asociita kun tala tipo dosierala mankas" -02000608="Erori ne es trovita" - -; Dialogs -02000702="B&one" -02000705="&Yes" -02000707="Yes por &omni" -02000709="&No" -0200070B="No por o&mni" - -02000710="Abandonar" -02000711="&Abandonez" -02000713="&Klozez" -02000714="Haltez" -02000715="Ristartez" - -02000720="Helpo" - -; Extract dialog -02000800="&Extraktar" -02000801="E&xtraktar aden:" -02000802="&Pasovorto" - -02000810="Dosiervoyi" -02000811="&Absoluta dosiervoyi" -02000812="&Relativa dosiervoyi" -02000813="&Sen dosiervoyi" - -02000820="Remplasala skribmodo" -02000821="&Kun konfirmo" -02000822="&Sen konfirmo" -02000823="&Omisar existanta dosieri" -02000824="Automata nomchanjo" -02000825="Automata nomchanjo de existanta dosieri" - -02000830="Dosieri" -02000831="&Merkita dosieri" -02000832="&Omna dosieri" - -02000881="Definez loko por dosieri extraktenda." - -02000890="Extrakto" - -; Overwrite dialog -02000900="Konfirmo di nomchanjo" -02000901="Dosieruyo ja kontenas operacata dosiero." -02000902="Kad remplasor esanta dosiero" -02000903="per la ica?" - -02000911="&Automata nomchanjo." - -02000982="{0} bayti*" -02000983="chanjita per" - -; Messages dialog -02000A00="Diagnozala mesaji" - -02000A80="Mesajo" - -02000A91="Kompresmetodo ne esas suportata por dosiero '{0}'." -02000A92="Datumeroro en '{0}'. Dosiero es fushita." -02000A93="CRC-eroro en '{0}'. Dosiero es fushita." - -; Password dialog -02000B00="Pasovorto" -02000B01="Sugestez pasovorto:" -02000B02="&Montrar pasovorto" - -; Progress dialog -02000C00="Proceso" -02000C01="Pasinta tempo:" -02000C02="Restanta tempo:" -02000C03="Grandeso:" -02000C04="Rapideso:" - -02000C10="&Fono" -02000C11="&Avanajo" -02000C12="&Pauzo" -02000C13="&Durez" - -02000C20="Pauzita" - -02000C30="Kad vu ya volas abortar?" - -; Compress dialog -02000D00="Adjuntar aden arkivo" -02000D01="&Arkivo:" -02000D02="R&emplasomodo:" -02000D03="A&rkiva formato:" -02000D04="&Kompresometodo:" -02000D05="Kreor &solida arkivo" -02000D06="&Parametri:" -02000D07="Ajustaji" -02000D08="Krear SF&X-arkivo" -02000D09="Disfiligo" -02000D0A="Chifrar dosier&nomi" -02000D0B="Kompreso&grado" -02000D0C="&Vortarograndeso:" -02000D0D="Vo&rtograndeso:" -02000D0E="Memoruzo por kompresar:" -02000D0F="Memoruzo por extraktar:" - -02000D40="&Fendar por volumini, bayti:" - -02000D81="Sen kompresar" -02000D82="Normala kompreso" -02000D83="Maxim granda kompreso" -02000D84="Rapide" -02000D85="Maxim rapide" -02000D86="Extreme" - -02000D90="Inspektar" - -02000DA1="Adjuntar e remplasar dosieri" -02000DA2="Rinovigar e adjuntar dosieri" -02000DA3="Rifreshigar existanta dosieri" -02000DA4="Sinkronizar dosieri" - -02000DB1="Omna dosieri" - -02000DC0="Kompreso" - -; Columns dialog -02000E00="Kolumni" -02000E01="Merkez kolumni qui es spektenda en ca dosieruyo. Per butoni \"Ad-Supre\" ed \"Ad-Infre\" es posibla riaranjar sekquordino dil kolumni." -02000E02="Merkita kolumno devas havar &larjeso di" -02000E03="punti." - -02000E10="Ad-&Supre" -02000E11="Ad-&Infre" -02000E12="&Montrez" -02000E13="&Celez" -02000E14="Definez" - -02000E81="Nomo" -02000E82="Larjeso" - -; Testing -02000F90="Probado" - - -; File Manager - -03000000="7-Zip-dosieradministrilo" - -; Menu -03000102="&Dosiero" -03000103="&Redakto" -03000104="&Aspekto" -03000105="&Utensili" -03000106="&Helpo" -03000107="&Favoraji" - -; File -03000210="&Apertigar" -03000211="Apertigar int&erne" -03000212="Apertigar e&xter" -03000220="&Vidigar" -03000221="&Redaktar" -03000230="Ch&anjar nomo" -03000231="Ko&piar aden..." -03000232="Transp&ozar aden..." -03000233="E&facar" -03000240="In&heraji" -03000241="Ko&mentar" -03000250="Krear &dosieruyo" -03000251="Krear dos&iero" -03000260="E&kirar" -03000270="F&endar dosiero..." -03000271="Komb&inar dosieri..." - -; Edit -03000310="&Abolisar" -03000311="&Rifacar" -03000320="&Tranchar" -03000321="&Kopiar" -03000322="In&sertar" -03000323="E&facar" -03000330="Merk&ar omno" -03000331="Des&merkar omno" -03000332="&Inversigar merko" -03000333="Merkar..." -03000334="Desmerkar..." -03000335="Merkar segun tipo" -03000336="Desmerkar segun tipo" - -; View -03000410="&Granda ikoneti" -03000411="&Mikra ikoneti" -03000412="&Listo" -03000413="&Tabelo" -03000420="&Nearanjite" -03000430="Apertigar radika dosieruyo" -03000431="Ad-supre ye un nivelo" -03000432="Dosieruya historio..." -03000440="R&inovigar" -03000450="&2 paneli" -03000451="Utens&ila paneli" -03000460="Utensila panelo di arkivo" -03000461="Norma utensila panelo" -03000462="Granda ikoneti" -03000463="Videbla butontexto" - -; Tools -03000510="&Ajusti..." -03000511="&Experienco dil rapideso" - -; Help -03000610="&Konteno..." -03000620="&Pri 7-Zip..." - -; Favorites -03000710="&Adjuntar dosieruyo ad la favorata quale" -03000720="Lektomerkajo" - -; Options Dialog - -03010000="Ajusti" - -; Plugins -03010100="Extraji" -03010101="&Extraji:" -03010110="Ajusti" - -; Edit -03010200="Redaktilo" -03010201="&Redaktilo:" - -; System -03010300="Sistemo" -03010302="Asociar 7-Zip-o kun dosieru:" -03010310="Extrajo" - -; Settings -03010400="Ajusti" -03010401="Montrar \"..\"-elemento" -03010402="Montrar reala dosier-ikoneti" -03010410="Montrar sistemala menuo" -03010420="Merkar &tota lineo" -03010421="Montrar &streki separanta" - -; Strings - -03020201="Kopiar" -03020202="Transpozar" -03020203="Kopiez aden:" -03020204="Transpozez aden:" -03020205="Kopio..." -03020206="Transpozo..." -03020207="Onu ne povas kopiar objekti por tala dosieruyi." -03020208="Operaco ne suportesas." - -03020210="Konfirmo dil efaco di dosiero" -03020211="Konfirmo dil efaco di dosieruyo" -03020212="Konfirmo dil efaco di dosieraro" -03020213="Ka vu ya volas efacar '{0}'?" -03020214="Ka vu ya volas efacar dosieruyo \"{0}\" e omna lua kontenaji?" -03020215="Ka vu ya volas efacar ita {0} objekti?" -03020216="Efaco..." -03020217="Eroro dum efacar di dosiero o dosieruyo" - -03020220="Nomchanjo..." -03020221="Eroro dum nomchanjo di dosiero o dosieruyo" - -03020230="Krear dosieruyo" -03020231="Dosieruynomo:" -03020232="Nova dosieruyo" -03020233="Eroro dum dosieruykreo" - -03020240="Krear dosiero" -03020241="Dosiernomo:" -03020242="Nova dosiero" -03020243="Eroro dum dosierkreo" - -03020250="Merkar" -03020251="Desmerkar" -03020252="Masko:" - -03020260="Dosieruyhistorio" - -03020280="Dosiero '{0}' chanjesis.\nKa vu volas rinovigar lu enarkive?" -03020281="Rinovigo dil dosiero\n'{0}' faliis" -03020282="Startigo dil redaktilo." -03020283="Aperto..." - -03020290="Komento" -03020291="&Komento:" - -030202A0="Sistemo" - -03020300="Komputilo" -03020301="Reto" - -03020400="Adjuntar" -03020401="Extraktar" -03020402="Verifikar" - -03020420="Kopiar" -03020421="Transpozar" -03020422="Efacar" -03020423="Informo" - -03020500="Fendar dosiero" -03020501="&Fendez aden:" -03020510="Fendo..." - -03020600="Kombinar dosieri" -03020601="&Kombinar aden:" -03020610="Kombino..." - -; Computer -03031100="Tota kapacivo" -03031101="Vakanta" -03031102="Faskogrando" -03031103="Etiketo" - -; Network -03031200="Lokala nomo" -03031201="Provizanto" - -; Benchmark Dialog - -03080000="Experienco dil rapideso" -03080001="Memoruzo:" -03080002="Kompresado" -03080003="Extraktado" -03080004="Rapideso" -03080005="Aprecuro" -03080006="Tota aprecuro" -03080007="Kuranta" -03080008="Rezulta" -03080009="Pasi:" -0308000A="Erori:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/is.txt b/External/7-Zip/Lang/is.txt deleted file mode 100644 index 5246d4714..000000000 --- a/External/7-Zip/Lang/is.txt +++ /dev/null @@ -1,514 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.53 -; Translated by bjossi -; -; -; -; - -00000000="Icelandic" -00000001="Íslenska" -00000002="15" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Stillingar" - -; Info Page -01000100="Um 7-Zip" -01000103="7-Zip er ókeypis forrit. En þú getur stutt þróun 7-Zip með því að skrá þig." -01000104="Aðstoð" -01000105="Skráning" - -; Folders Page -01000200="Möppur" -01000210="&Mappa notuð til vinnslu:" -01000211="&Tímabundin kerfismappa" -01000212="&Núverandi mappa" -01000213="&Skilgreindu möppu:" -01000214="Nota aðeins með flash drifum" - -01000281="Skilgreindu staðsetningu fyir tímabundin gagnasöfn." - -; System Page -01000300="Kerfi" -01000301="Innleiða 7-Zip í flýtivalmynd" -01000302="Lagskipt flýtivalmynd" -01000310="Hlutir í flýtivalmynd:" - -; Language Page -01000400="Tungumál" -01000401="Tungumál:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip skipanir" -02000103="Opna gagnasafn" -02000104="Opnar valið gagnasafn." -02000105="Afþjappa gögn..." -02000106="Afþjappar gögnum frá völdu gagnasafni." -02000107="Bæta við gagnasafn..." -02000108="Bætir skjölum í gagnasafn." -02000109="Prófa gagnasafn" -0200010A="Prófar stöðugleika gagnasafns." -0200010B="Afþjappa hér" -0200010C="Afþjappar gögnum frá gagnasafni í núverandi möppu." -0200010D="Afþjappa í {0}" -0200010E="Afþjappar gögn í hliðar-möppur." -0200010F="Bæta við {0}" -02000110="Bætir gögnum við gagnasafn." -02000111="Þjappa og senda..." -02000112="Þjappar saman gögnum í gagnasafn og sendir það með tölvupósti." -02000113="Þjappa til {0} og senda" -02000114="Þjappar saman gögnum í gagnasafn og sendir það með tölvupósti." - -02000140="" -02000141="" - -; Properties -02000203="Slóð" -02000204="Nafn" -02000205="Tegund skráar" -02000206="Mappa" -02000207="Stærð" -02000208="Þjöppuð stærð" -02000209="Eiginleikar" -0200020A="Búið til" -0200020B="Opnað" -0200020C="Breytt" -0200020D="Þétt" -0200020E="Umsögn" -0200020F="Lykilorð" -02000210="Bútuð niður fyrir" -02000211="Bútuð niður eftir" -02000212="Orðasafn" -02000213="CRC" -02000214="Tegund" -02000215="Anti" -02000216="Aðferð" -02000217="Stýrikerfi" -02000218="Gagnakerfi" -02000219="Notandi" -0200021A="Hópur" -0200021B="Kubbur" -0200021C="Umsögn" -0200021D="Staðsetning" -0200021E="Prefix slóðar" -0200021F="Möppur" -02000220="Skrár" -02000221="Útgáfa" -02000222="Kerfi" -02000223="Fjölkerfi" -02000224="Staðsetning" -02000225="Slóðar" -02000226="Kubbar" -02000227="Kerfi" - -; Status bar -02000301="{0} hlutir valdir" -02000302="{0} hlutir" - -02000320="Skrár:" -02000321="Möppur:" -02000322="Stærð:" -02000323="Þjöppuð stærð:" -02000324="Gagnasöfn:" - -; List Context Menu -02000401="&Runur..." - -02000411="&Opna" -02000412="&Afþjappa..." - -; ToolBar -02000501="Afþjappa" - -; Messages -02000601="Þessi tegund gagnasafns styður ekki uppfærsluskipanir." -02000602="Get ekki uppfært gagnasafn {0}" -02000603="Get ekki búið til möppu '{0}'" -02000604="Viðkomandi skrá er ekki gagnasafn." -02000605="Villa" -02000606="Of margar skrár" -02000607="Það er ekkert forrit í boði fyrir viðkomandi tegund skráar" -02000608="Það eru engar villur" -02000609="Get ekki opnað skrá '{0}' sem gagnasafn" -0200060A="Get ekki opnað læst gagnasafn '{0}'. Rangt lykilorð?" - -; Dialogs -02000702="OK" -02000705="&Já" -02000707="Já við &Öllu" -02000709="&Nei" -0200070B="Nei við &Öllu" - -02000710="Hætta við" -02000711="&Hætta við" -02000713="&Loka" -02000714="Hætta" -02000715="Endurræsa" - -02000720="Hjálp" - -; Extract dialog -02000800="Afþjappa" -02000801="&Afþjappa í:" -02000802="Lykilorð" - -02000810="Slóðar" -02000811="Full slóða-nöfn" -02000812="Núverandi slóða-nöfn" -02000813="Engin slóða-nöfn" - -02000820="Yfirfærsla" -02000821="Spyrja fyrir yfirfærslu" -02000822="Yfirfæra án viðvörunar" -02000823="Sleppa öðrum skrám" -02000824="Endurnefna sjálfkrafa" -02000825="Endurnefna aðrar skrár" - -02000830="Skrár" -02000831="&Valdar skrár" -02000832="&Allar skrár" - -02000881="Skilgreindu staðsetningu fyrir afþjappaðar skrár." - -02000890="Afþjappa" - -; Overwrite dialog -02000900="Staðfesta Yfirfærslu Skráar" -02000901="Skilgreind mappa inniheldur unna skrá nú þegar." -02000902="Vilt þú yfirfæra fyrrverandi skrá" -02000903="með þessari?" - -02000911="&Endurnefna Sjálfkrafa" - -02000982="{0} bæti" -02000983="Breytt þann" - -; Messages dialog -02000A00="Prufuskilaboð" - -02000A80="Skilaboð" - -02000A91="Óstutt samþjöppunaraðferð fyrir '{0}'." -02000A92="Gagnavilla í '{0}'. Skrá er biluð." -02000A93="CRC gekk ekki í '{0}'. Skrá er biluð." -02000A94="Gagnavilla í læstu skjali '{0}'. Rangt lykilorð?" -02000A95="CRC gekk ekki í læstu skjali '{0}'. Rangt lykilorð?" - -; Password dialog -02000B00="Skrifaðu lykilorð" -02000B01="Skrifaðu lykilorð:" -02000B02="&Sýna lykilorð" -02000B03="Skrifaðu lykilorð aftur:" -02000B10="Lykilorðin eru ekki eins" -02000B11="Notaðu aðeins enska stafi, tölur og sérstaka stafi (!, #, $, ...) í lykilorðum" -02000B12="Lykilorðið er of langt" - -; Progress dialog -02000C00="Vinna" -02000C01="Áætlaður tími:" -02000C02="Tími eftir:" -02000C03="Heildarstærð:" -02000C04="Hraði:" -02000C05="Unnið:" -02000C06="Samþjöppunarstuðull:" - -02000C10="&Bakgrunnur" -02000C11="&Fyrirgrunnur" -02000C12="&Bíða" -02000C13="&Halda áfram" - -02000C20="Bíður" - -02000C30="Ertu viss um að þú viljir hætta við?" - -; Compress dialog -02000D00="Bæta við gagnasafn" -02000D01="&Gagnasafn:" -02000D02="&Uppfærsla:" -02000D03="&Tegund gagnasafns:" -02000D04="&Styrkur samþjöppunar:" -02000D05="Gera &þétt gagnasafn" -02000D06="&Skipanir:" -02000D07="Stillingar" -02000D08="Gera &SFX gagnasafn" -02000D09="Fjölvinnsla" -02000D0A="Rugla &skráarnöfn" -02000D0B="Samþjöppun &stig:" -02000D0C="&Stærð orðasafns:" -02000D0D="&Orðastærð:" -02000D0E="Vinnsluminnisnotkun fyrir samþjöppun:" -02000D0F="Vinnsluminnisnotkun fyrir afþjöppun:" -02000D10="Læsing" -02000D11="Aðferð læsingar:" -02000D12="Fjöldi örgjörvakjarna:" -02000D13="Stærð þétts kubbs:" -02000D14="Óþétt" -02000D15="Þétt" -02000D16="Þjappa deildum skrám" - -02000D40="Skipta skráarsafni í &hluta, bæti:" -02000D41="Vitlaus stærð hluts" -02000D42="Skilgreind stærð hluta: {0} bæti.\nErtu viss um að þú viljir skipta gagnasafni í þessa hluta?" - -02000D81="Geyma" -02000D82="Meðallag" -02000D83="Hámark" -02000D84="Hratt" -02000D85="Hraðast" -02000D86="Ultra" - -02000D90="Skoða" - -02000DA1="Bæta við og yfirfæra skrár" -02000DA2="Uppfæra og bæta við skrám" -02000DA3="Lífga upp á núverandi skrár" -02000DA4="Samrýma skrár" - -02000DB1="Allar Skrár" - -02000DC0="Samþjappa" - -; Columns dialog -02000E00="Runur" -02000E01="Veldu runurnar sem þú vilt gera sýnilegar í þessari möppu. Notaðu Fara Upp og Fara Niður takkana til að endurraða rununum." -02000E02="Valda runan ætti að vera" -02000E03="pixlar &vítt." - -02000E10="Fara &Upp" -02000E11="Fara &Niður" -02000E12="&Sýna" -02000E13="&Fela" -02000E14="Setja" - -02000E81="Titill" -02000E82="Vídd" - -; Testing -02000F90="Prófa" - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&Skrá" -03000103="&Skipanir" -03000104="&Útlit" -03000105="&Tól" -03000106="&Hjálp" -03000107="&Uppáhald" - -; File -03000210="&Opna" -03000211="Opna &inni" -03000212="Opna &úti" -03000220="&Skoða" -03000221="&Breyta" -03000230="&Endurnefna" -03000231="&Afrita í..." -03000232="&Færa til..." -03000233="&Eyða" -03000240="&Stillingar" -03000241="&Umsögn" -03000242="Reikna út checksummu" -03000250="Búa til möppu" -03000251="Búa til skrá" -03000260="&Hætta" -03000270="&Búta niður skrá..." -03000271="&Sameina skrár..." - -; Edit -03000310="&Bakka" -03000311="&Gera aftur" -03000320="&Klippa" -03000321="&Afrita" -03000322="&Líma" -03000323="&Eyða" -03000330="Velja &allt" -03000331="Afvelja allt" -03000332="&Öfugsnúið val" -03000333="Velja..." -03000334="Afvelja..." -03000335="Velja eftir tegund" -03000336="Afvelja eftir tegund" - -; View -03000410="&Stórar myndir" -03000411="&Smáar myndir" -03000412="&Listi" -03000413="&Smáatriði" -03000420="Óflokkað" -03000430="Opna aðalmöppu" -03000431="Til baka" -03000432="Yfirlit yfir notkun" -03000440="&Uppfæra" -03000449="Birta heildarinnihald möppu" -03000450="&2 Vinnsluborð" -03000451="&Tólaröð" -03000460="Tólaröð gagnasafns" -03000461="Eðlileg tólaröð" -03000462="Stórir Takkar" -03000463="Sýna texta á tökkum" - -; Tools -03000510="&Stillingar" -03000511="&Hraðaprufa" - -; Help -03000610="&Leiðarvísir" -03000620="&Um 7-Zip..." - -; Favorites -03000710="&Bæta möppu við uppáhald sem" -03000720="Bókarmerki" - -; Options Dialog - -03010000="Stillingar" - -; Plugins -03010100="Viðbætur" -03010101="&Viðbætur:" -03010110="Stillingar..." - -; Edit -03010200="Breytir" -03010201="&Breytir:" - -; System -03010300="Stýrikerfi" -03010302="Innleiða 7-Zip í:" -03010310="Viðbót" - -; Settings -03010400="Stillingar" -03010401="Sýna \"..\" hluti" -03010402="Sýna réttar skráarmyndir" -03010410="Sýna kerfisvalmynd" -03010420="&Fullt raðaval" -03010421="Sýna &hnitalínur" -03010430="&Öðruvísi valstilling" -03010440="Nota &stórar minnissíður" - -; Strings - -03020201="Afrita" -03020202="Færa" -03020203="Afrita í:" -03020204="Færa skrá/möppu til:" -03020205="Afrita..." -03020206="Færa..." -03020207="Þú getur ekki fært eða afritað svona skrár fyrir þessar möppur." -03020208="Skipun er ekki studd." -03020209="Veldu staðsetningarmöppu." - -03020210="Staðfestu Eyðingu Skráar" -03020211="Staðfestu Eyðingu Möppu" -03020212="Staðfestu Fjöldaeyðingu Skráa" -03020213="Ertu viss um að þú viljir eyða '{0}'?" -03020214="Ertu viss um að þú viljir eyða möppunni '{0}' og öllu innihaldi hennar?" -03020215="Ertu viss um að þú viljir eyða þessum {0} skrám?" -03020216="Eyða..." -03020217="Ekki tókst að eyða Skrá eða Möppu" - -03020220="Endurnefna..." -03020221="Villa við endurnafn Skráar eða Möppu" -03020222="Staðfestu Afritun Skráar" -03020223="Ertu viss um að þú viljir afrita þessa skrá í gagnasafn?" - -03020230="Gera Möppu" -03020231="Nafn möppu:" -03020232="Ný Mappa" -03020233="Villa við gerð möppu" - -03020240="Gera Skrá" -03020241="Nafn Skráar:" -03020242="Ný Skrá" -03020243="Villa við gerð skráar" - -03020250="Velja" -03020251="Afvelja" -03020252="Skyggja:" - -03020260="Yfirlit yfir notkun" - -03020280="Skrá '{0}' var breytt.\nViltu uppfæra hana í gagnasafninu?" -03020281="Get ekki uppfært skrá\n'{0}'" -03020282="Get ekki opnað breyti." -03020283="Opna..." - -03020290="Umsögn" -03020291="&Umsögn:" - -030202A0="Kerfi" - -03020300="Tölva" -03020301="Internet" - -03020400="Bæta við" -03020401="Afþjappa" -03020402="Prófa" - -03020420="Afrita" -03020421="Færa" -03020422="Eyða" -03020423="Upplýsingar" - -03020500="Skipta Skrá" -03020501="&Skipta í:" -03020510="Skipta..." -03020520="Staðfestu skiptingu" -03020521="Ertu viss um að þú viljir skipta skránni í {0} hluta?" -03020522="Stærð hluta verður að vera smærri en stærð upprunalegu skrárinnar" - -03020600="Sameina skrár" -03020601="&Sameina í:" -03020610="Sameina..." -03020620="Veldu aðeins fyrstu skránna" - -03020710="Checksumma í vinnslu..." -03020720="Upplýsingar um checksummu" -03020721="CRC checksumma fyrir gögn:" -03020722="CRC checksumma fyrir gögn og nöfn:" - -03020800="Skanna..." - -03020900="Stillingar" - -; Computer -03031100="Heildarstærð" -03031101="Laust pláss" -03031102="Stærð hóps" -03031103="Titill" - -; Network -03031200="Nafn Hér" -03031201="Þjónustugjafi" - -; Benchmark Dialog - -03080000="Hraðaprufa" -03080001="Vinnsluminnisnotkun:" -03080002="Samþjöppun" -03080003="Afþjöppun" -03080004="Hraði" -03080005="Útkoma" -03080006="Heildarútkoma" -03080007="Núverandi" -03080008="Niðurstaða" -03080009="Fjöldi prufa:" -0308000A="Villur:" -0308000B="Örgjörvanotkun" -0308000C="Útkoma / Notkun" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/it.txt b/External/7-Zip/Lang/it.txt deleted file mode 100644 index e88a87d67..000000000 --- a/External/7-Zip/Lang/it.txt +++ /dev/null @@ -1,544 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.07 Beta -; Translated by Leandro Spagnol -; -; Updated to 7-Zip v9.15 -; by TJL73 -; Some corrections by Vincenzo Reale -; - -00000000="Italian" -00000001="Italiano" -00000002="16" - -; 7-Zip Configuration - -; Title -01000000="Configurazione di 7-Zip" - -; Info Page -01000100="Informazioni" -01000103="7-Zip è un software libero.\n\nLocalizzazione italiana a cura di:\nTJL73 " -01000104="Supporto tecnico" -01000105="Registra" - -; Folders Page -01000200="Cartelle" -01000210="Cartella di lavoro" -01000211="Cartella &TEMP di sistema" -01000212="&Corrente" -01000213="&Specificata:" -01000214="&Utilizza solo per dischi rimovibili" - -01000281="Specifica una cartella per i file temporanei." - -; System Page -01000300="Shell di sistema" -01000301="Integra 7-Zip nel menu contestuale della shell" -01000302="Menu contestuale a cascata" -01000310="Elementi del menu contestuale:" - -; Language Page -01000400="Lingua" -01000401="Lingua:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comandi 7-Zip" -02000103="Apri" -02000104="Apre l'archivio selezionato." -02000105="Estrai i file..." -02000106="Estrae i file dall'archivio selezionato." -02000107="Aggiungi all'archivio..." -02000108="Aggiunge i file selezionati all'archivio." -02000109="Verifica l'archivio" -0200010A="Verifica l'integrità dell'archivio selezionato." -0200010B="Estrai qui" -0200010C="Estrae i file dall'archivio selezionato, nella cartella corrente." -0200010D="Estrai in {0}" -0200010E="Estrae i file nella sottocartella specificata." -0200010F="Aggiungi a {0}" -02000110="Aggiunge gli elementi selezionati all'archivio specificato." -02000111="Comprimi ed invia per email..." -02000112="Comprime i file selezionati in un archivio e lo invia per email." -02000113="Comprimi in {0} ed invia per email" -02000114="Comprime i file selezionati nell'archivio specificato e lo invia per email." - -02000140="" -02000141="" - -; Properties -02000203="Percorso" -02000204="Nome" -02000205="Estensione" -02000206="Cartella" -02000207="Dimensione" -02000208="Dimensione compressa" -02000209="Attributi" -0200020A="Creato" -0200020B="Ultimo accesso" -0200020C="Ultima modifica" -0200020D="Solido" -0200020E="Commentato" -0200020F="Cifrato" -02000210="Dividi prima" -02000211="Dividi dopo" -02000212="Dizionario" -02000213="CRC" -02000214="Tipo" -02000215="Anti" -02000216="Metodo" -02000217="OS destinatario" -02000218="File system" -02000219="Utente" -0200021A="Gruppo" -0200021B="Blocco" -0200021C="Commento" -0200021D="Posizione" -0200021E="Percorso completo" -0200021F="Cartelle" -02000220="File" -02000221="Versione" -02000222="Unità" -02000223="Unità multiple" -02000224="Offset" -02000225="Collegamenti" -02000226="Blocchi" -02000227="Unità" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Dimensione fisica" -0200022D="Dimensione intestazioni" -0200022E="Checksum" -0200022F="Caratteristiche" -02000230="Indirizzo virtuale" -02000231="ID" -02000232="Nome breve" -02000233="Applicativo origine" -02000234="Dimensione settore" -02000235="Modalità" -02000236="Collegamento" - -; Status bar -02000301="Oggetti selezionati: {0}" -02000302="{0} oggetti" - -02000320="File:" -02000321="Cartelle:" -02000322="Dimensione:" -02000323="Dimensione compressa:" -02000324="Archivi:" - -; List Context Menu -02000401="&Colonne..." - -02000411="&Apri" -02000412="&Estrai..." - -; ToolBar -02000501="Estrai" - -; Messages -02000601="Non è possibile effettuare aggiornamenti su questo archivio." -02000602="Impossibile aggiornare l'archivio {0}" -02000603="Impossibile creare la cartella '{0}'" -02000604="Questo file non è un archivio supportato." -02000605="Errore" -02000606="Troppi elementi" -02000607="L'estensione del file scelto non è associata a nessun programma." -02000608="Nessun errore." -02000609="Impossibile aprire il file '{0}' come archivio." -0200060A="Impossibile aprire l'archivio cifrato '{0}'. Password errata?" -0200060B="Non è possibile allocare la quantità di memoria richiesta" -0200060C="Errore sconosciuto" -0200060D="Archivio non supportato" - -; Dialogs -02000702="OK" -02000705="&Sì" -02000707="Sì per &tutti" -02000709="&No" -0200070B="No per t&utti" - -02000710="Annulla" -02000711="&Annulla" -02000713="&Chiudi" -02000714="Ferma" -02000715="Riavvia" - -02000720="Aiuto" - -; Extract dialog -02000800="Estrai" -02000801="E&strai in:" -02000802="Password" - -02000810="Struttura delle cartelle" -02000811="Percorsi completi" -02000812="Percorsi attuali" -02000813="Nessun percorso" - -02000820="Sovrascrittura" -02000821="Chiedi prima di sovrascrivere" -02000822="Sovrascrivi senza chiedere" -02000823="Non sovrascrivere i file esistenti" -02000824="Rinomina automaticamente" -02000825="Rinomina autom. i file esistenti" - -02000830="File" -02000831="File &selezionati" -02000832="&Tutti i file" - -02000881="Specifica una cartella in cui estrarre i file." - -02000890="Estrazione in corso..." - -; Overwrite dialog -02000900="Conferma la sovrascrittura del file" -02000901="File già esistente nella cartella di destinazione." -02000902="Vuoi sostituire il file esistente" -02000903="con questo?" - -02000911="&Rinomina automaticamente" - -02000982="{0} byte" -02000983="modificato il" - -; Messages dialog -02000A00="Messaggi di diagnostica" - -02000A80="Messaggio" - -02000A91="Metodo di compressione non supportato per '{0}'." -02000A92="Errore nei dati in '{0}'. Il file è danneggiato." -02000A93="CRC non corretto in '{0}'. Il file è danneggiato." -02000A94="Errore nel file cifrato '{0}'. Password errata?" -02000A95="CRC errato nel file cifrato '{0}'. Password errata?" - -; Password dialog -02000B00="Inserisci password" -02000B01="&Inserisci password:" -02000B02="Mostra pass&word" -02000B03="&Reinserisci password:" -02000B10="Password differenti" -02000B11="Per la password, utilizzare solo lettere ASCII, numeri e caratteri speciali (!, #, $, ...)" -02000B12="La password è troppo lunga" - -; Progress dialog -02000C00="Processo" -02000C01="Tempo trascorso:" -02000C02="Tempo rimanente:" -02000C03="Dimensione totale:" -02000C04="Velocità:" -02000C05="Elaborato:" -02000C06="Rapporto compressione:" - -02000C10="&In background" -02000C11="&In primo piano" -02000C12="&Pausa" -02000C13="&Riprendi" - -02000C20="In pausa" - -02000C30="Sei sicuro di voler annullare?" - -; Compress dialog -02000D00="Aggiungi all'archivio" -02000D01="Nome &archivio:" -02000D02="Modalità a&ggiornamento:" -02000D03="&Formato dell'archivio:" -02000D04="&Metodo di compressione:" -02000D05="Crea archivio &solido" -02000D06="Parametri &opzionali:" -02000D07="Opzioni" -02000D08="Crea archivio auto-&estraente" -02000D09="Usa multi-threading" -02000D0A="Cifra anche il &nome dei file" -02000D0B="&Livello di compressione:" -02000D0C="Dimensione &Dizionario:" -02000D0D="Dimensioni &Parola:" -02000D0E="Quantità memoria per compressione:" -02000D0F="Quantità memoria per decompressione:" -02000D10="Cifratura" -02000D11="Metodo &cifratura:" -02000D12="N&umero di flussi (thread) CPU:" -02000D13="Dimensione del &blocco solido:" -02000D14="Non-solido" -02000D15="Solido" -02000D16="Comprimi file condivisi" - -02000D40="Di&vidi in più file (dimensione in byte):" -02000D41="Dimensione non corretta" -02000D42="Dimensione specificata: {0} byte.\nSicuro di voler dividere l'archivio in questo modo?" - -02000D81="Nessuna" -02000D82="Normale" -02000D83="Massima" -02000D84="Veloce" -02000D85="Velocissima" -02000D86="Ultra" - -02000D90="Sfoglia" - -02000DA1="Aggiungi e sostituisci i file" -02000DA2="Aggiorna e aggiungi i file" -02000DA3="Aggiorna i file esistenti" -02000DA4="Sincronizza i file" - -02000DB1="Tutti i file" - -02000DC0="Compressione in corso..." - -; Columns dialog -02000E00="Colonne" -02000E01="Segna le colonne che vuoi rendere visibili in questa cartella. Usa i pulsanti Sposta in alto ed in basso per riordinare le colonne." -02000E02="Le colonne selezionate dovrebbero essere larghe" -02000E03="pixel." - -02000E10="Sposta in &alto" -02000E11="Sposta in &basso" -02000E12="&Mostra" -02000E13="&Nascondi" -02000E14="Imposta" - -02000E81="Titolo" -02000E82="Larghezza" - -; Testing -02000F90="Verifica archivio..." - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&File" -03000103="&Modifica" -03000104="&Visualizza" -03000105="&Strumenti" -03000106="&Aiuto" -03000107="&Preferiti" - -; File -03000210="&Apri" -03000211="Apri in &7-Zip File Manager" -03000212="Apri in E&xplorer" -03000220="&Visualizza" -03000221="Apri con l'&editor predefinito" -03000230="Rino&mina" -03000231="&Copia in..." -03000232="&Sposta in..." -03000233="&Elimina" -03000240="&Proprietà" -03000241="Comme&nto..." -03000242="Calcola chec&ksum" -03000243="Comparazione differenze (Diff)" -03000250="Crea cartella" -03000251="Crea file" -03000260="E&sci" -03000270="&Dividi il file..." -03000271="&Unisci i file..." - -; Edit -03000310="&Annulla" -03000311="&Ripeti" -03000320="Tag&lia" -03000321="&Copia" -03000322="&Incolla" -03000323="&Elimina" -03000330="&Seleziona tutto" -03000331="&Deseleziona tutto" -03000332="In&verti selezione" -03000333="Seleziona..." -03000334="Deseleziona..." -03000335="Seleziona per tipo" -03000336="Deseleziona per tipo" - -; View -03000410="Icone &grandi" -03000411="Icone &piccole" -03000412="&Elenco" -03000413="&Dettagli" -03000420="Nessun ordine" -03000430="Apri cartella principale" -03000431="Livello superiore" -03000432="Cronologia..." -03000440="&Aggiorna" -03000449="Vista non strutturata" -03000450="Interfaccia a &2 pannelli" -03000451="Barre degli &strumenti" -03000460="Barra archivio" -03000461="Barra standard" -03000462="Icone grandi" -03000463="Mostra etichette di testo" - -; Tools -03000510="&Opzioni..." -03000511="&Benchmark" - -; Help -03000610="&Guida..." -03000620="&Informazioni su 7-Zip..." - -; Favorites -03000710="&Aggiungi la cartella ai Preferiti come" -03000720="Collegamento" - -; Options Dialog - -03010000="Opzioni" - -; Plugins -03010100="Plugin" -03010101="Plugin:" -03010110="&Opzioni..." - -; Edit -03010200="Editor" -03010201="&Editor predefinito:" -03010202="Comparatore &differenze (Diff):" - -; System -03010300="Sistema" -03010302="Associa 7-Zip a:" -03010310="Plugin" - -; Settings -03010400="Impostazioni" -03010401="Mostra l'elemento \"..\"" -03010402="Mostra le icone dei file" -03010410="Mostra le icone di sistema" -03010420="Selezione a &riga intera" -03010421="Mostra &griglia" -03010422="Click singolo per aprire una voce" -03010430="Modalità di selezione &alternativa" -03010440="Utilizza pagine &larghe di memoria" - -; Strings - -03020201="Copia" -03020202="Sposta" -03020203="Copia in:" -03020204="Sposta in:" -03020205="Copia in corso..." -03020206="Spostamento in corso..." -03020207="Non è possibile spostare o copiare file in queste cartelle." -03020208="Operazione non supportata per questa cartella." -03020209="Selezionare la cartella di destinazione." - -03020210="Conferma l'eliminazione del file" -03020211="Conferma l'eliminazione della cartella" -03020212="Conferma l'eliminazione di più elementi" -03020213="Sei certo di voler eliminare '{0}'?" -03020214="Sei certo di voler eliminare la cartella '{0}' e tutto il suo contenuto?" -03020215="Sei certo di voler eliminare questi {0} elementi?" -03020216="Eliminazione in corso..." -03020217="Errore nell'eliminazione del file o della cartella" -03020218="Impossibile spostare un file con percorso lungo nel Cestino" - -03020220="Rinomina in corso..." -03020221="Errore nella rinomina del file o cartella" -03020222="Conferma copia" -03020223="Sei sicuro di voler copiare questi file nell'archivio" - -03020230="Crea cartella" -03020231="Nome cartella:" -03020232="Nuova cartella" -03020233="Errore nella creazione della cartella" - -03020240="Crea file" -03020241="Nome file:" -03020242="Nuovo file" -03020243="Errore nella creazione del file" - -03020250="Seleziona" -03020251="Deseleziona" -03020252="Filtro:" - -03020260="Cronologia" - -03020280="Il file '{0}' è stato modificato.\nVuoi aggiornare l'archivio?" -03020281="Impossibile aggiornare il file\n'{0}'" -03020282="Impossibile avviare l'editor." -03020283="Apertura in corso... " -03020284="Il file sembra essere un virus (contiene molti spazi nel nome)." - -03020290="Commento" -03020291="&Commento:" - -030202A0="Sistema" - -03020300="Computer" -03020301="Rete" -03020302="Documenti" - -03020400="Aggiungi" -03020401="Estrai" -03020402="Verifica" - -03020420="Copia" -03020421="Sposta" -03020422="Elimina" -03020423="Proprietà" - -03020500="Dividi file" -03020501="&Dividi in:" -03020510="Dividi in..." -03020520="Conferma divisione" -03020521="Sicuro di voler dividere l'archivio in {0} porzioni?" -03020522="La dimensione di ciascuna porzione deve essere più piccola della dimensione totale dell'archivio originale" - -03020600="Unisci i file" -03020601="&Unisci in:" -03020610="Unisci..." -03020620="Seleziona solo la prima parte del file diviso" -03020621="Impossibile riconoscere il file come archivio diviso" -03020622="Impossibile trovare più di una parte dell'archivio diviso" - -03020710="Calcolo del checksum..." -03020720="Informazioni sul checksum" -03020721="CRC checksum sui dati:" -03020722="CRC checksum su dati e nomi:" - -03020800="Scansione..." - -03020900="Proprietà" - -03020A01="L'operazione non può essere richiamata da una cartella con percorso lungo." -03020A02="Devi selezionare un file" -03020A03="Devi selezionare almeno un file" -03020A04="Il file {0} è già presente" - -; Computer -03031100="Capacità" -03031101="Disponibili" -03031102="Dimensione dei cluster" -03031103="Etichetta" - -; Network -03031200="Nome locale" -03031201="Rete" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Utilizzo memoria:" -03080002="Compressione in corso" -03080003="Decompressione in corso" -03080004="Velocità" -03080005="Valutazione" -03080006="Valutazione totale" -03080007="Attuale" -03080008="Risultante" -03080009="Passaggi:" -0308000A="Errori:" -0308000B="Utilizzo CPU" -0308000C="Stima / Utilizzo" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ja.txt b/External/7-Zip/Lang/ja.txt deleted file mode 100644 index e7c93af90..000000000 --- a/External/7-Zip/Lang/ja.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 beta -; Translated by Komuro, Mick, 2chBBS-software -; Additions and minor fixes by Stepanushkin Dmitry -; Some fixes by Crus Mitsuaki -; -; - -00000000="Japanese" -00000001="日本語" -00000002="17" - -; 7-Zip Configuration - -; Title -01000000="7-Zipの設定" - -; Info Page -01000100="7-Zipについて" -01000103="7-Zipはフリーソフトウェアです。しかしながら、登録(寄付)することで7-Zipの開発を支援できます。" -01000104="サポート" -01000105="登録" - -; Folders Page -01000200="フォルダ" -01000210="作業フォルダ(&W)" -01000211="システム一時フォルダ(&S)" -01000212="カレントフォルダ(&C)" -01000213="フォルダ指定(&P):" -01000214="リムーバブルドライブのみ使用する" - -01000281="一時ファイルのための場所を指定してください" - -; System Page -01000300="システム" -01000301="シェルコンテキスト(右クリック)メニューに7-Zipを登録" -01000302="7-Zipをサブメニュー化する" -01000310="メニュー項目:" - -; Language Page -01000400="言語" -01000401="言語設定:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zipコマンド" -02000103="開く" -02000104="選択した書庫を開く" -02000105="展開..." -02000106="選択した書庫を展開..." -02000107="圧縮..." -02000108="選択したファイルを圧縮" -02000109="書庫をテスト" -0200010A="選択した書庫をテスト" -0200010B="ここに展開" -0200010C="選択した書庫をここに展開" -0200010D="{0}に展開" -0200010E="サブフォルダに展開" -0200010F="{0}に圧縮" -02000110="選択したファイルを圧縮..." -02000111="圧縮して電子メール送信..." -02000112="選択したファイルを圧縮して電子メール送信..." -02000113="{0}に圧縮して電子メール送信" -02000114="選択したファイルを圧縮して電子メール送信..." - -02000140="<フォルダ>" -02000141="<書庫>" - -; Properties -02000203="パス" -02000204="名前" -02000205="拡張子" -02000206="フォルダ" -02000207="サイズ" -02000208="圧縮後サイズ" -02000209="属性" -0200020A="作成日時" -0200020B="アクセス日時" -0200020C="更新日時" -0200020D="ソリッド" -0200020E="コメント済み" -0200020F="暗号化" -02000210="分割前" -02000211="分割後" -02000212="辞書" -02000213="CRC" -02000214="種類" -02000215="逆" -02000216="圧縮方法" -02000217="ホストOS" -02000218="ファイルシステム" -02000219="ユーザー" -0200021A="グループ" -0200021B="ブロック" -0200021C="コメント" -0200021D="ポジション" -0200021E="パスプレフィックス" -0200021F="フォルダ数" -02000220="ファイル数" -02000221="バージョン" -02000222="ボリューム" -02000223="多重ボリューム書庫" -02000224="オフセット" -02000225="リンク数" -02000226="使用ブロック数" -02000227="ボリューム数" - -02000229="64ビット" -0200022A="ビッグエンディアン" -0200022B="CPU" -0200022C="物理サイズ" -0200022D="ヘッダーサイズ" -0200022E="チェックサム" -0200022F="特性" -02000230="仮想アドレス" -02000231="ID" -02000232="省略名" -02000233="作成アプリケーション" -02000234="セクターサイズ" -02000235="モード" -02000236="リンク" - -; Status bar -02000301="{0}個のオブジェクトを選択" -02000302="{0}個のオブジェクト" - -02000320="ファイル数:" -02000321="フォルダ数:" -02000322="サイズ:" -02000323="圧縮済みサイズ:" -02000324="書庫数:" - -; List Context Menu -02000401="項目(&C)" - -02000411="開く(&O)" -02000412="展開(&E)" - -; ToolBar -02000501="展開" - -; Messages -02000601="この書庫は更新機能がサポートされていません" -02000602="書庫{0}の更新ができません" -02000603="'{0}'フォルダが作成できません" -02000604="対応してない圧縮形式です" -02000605="エラー" -02000606="アイテムが多過ぎます" -02000607="与えられたファイルに関連付けられたアプリケーションはありません" -02000608="正常です" -02000609="ファイル'{0}'は書庫として開くことができません" -0200060A="暗号化された書庫'{0}'を開くことができません。パスワードが間違っていませんか?" -0200060B="要求された量のメモリを割り当てることができません" -0200060C="不明なエラー" -0200060D="未対応の書庫形式です" - -; Dialogs -02000702="OK" -02000705="はい(&Y)" -02000707="全てに はい(&A)" -02000709="いいえ(&N)" -0200070B="全てに いいえ(&L)" - -02000710="キャンセル" -02000711="キャンセル(&C)" -02000713="閉じる(&C)" -02000714="停止" -02000715="再開" - -02000720="ヘルプ" - -; Extract dialog -02000800="展開" -02000801="展開先(&X):" -02000802="パスワード" - -02000810="パス名出力方法" -02000811="絶対パス" -02000812="相対パス" -02000813="パスなし" - -02000820="上書き方法" -02000821="上書きするときは確認する" -02000822="常に上書き" -02000823="ファイルが存在するときはスキップ" -02000824="自動的にリネーム" -02000825="ファイルが存在するときは自動リネーム" - -02000830="ファイル" -02000831="選択したファイル(&S)" -02000832="全てのファイル(&A)" - -02000881="展開先指定" - -02000890="展開中" - -; Overwrite dialog -02000900="ファイル上書き確認" -02000901="このフォルダには既に以下の同じファイルが存在します" -02000902="現在のファイル" -02000903="に次の新しいファイルを上書きしますか?" - -02000911="自動的にリネーム(&U)" - -02000982="{0}バイト" -02000983="更新日時:" - -; Messages dialog -02000A00="診断結果" - -02000A80="メッセージ" - -02000A91="'{0}'はサポートされていない圧縮形式です" -02000A92="'{0}'でデータエラーが発生しました。ファイルは壊れています" -02000A93="'{0}'のCRCが違います。ファイルは壊れています" -02000A94="暗号化されたファイル'{0}'でデータエラーが発生しました。パスワードが間違っていませんか?" -02000A95="暗号化されたファイル'{0}'のCRCが違います。パスワードが間違っていませんか?" - -; Password dialog -02000B00="パスワード入力" -02000B01="パスワード入力:" -02000B02="パスワードを表示する(&S)" -02000B03="パスワード再入力:" -02000B10="パスワードが一致しません" -02000B11="パスワードには半角英数記号(!, #, $, ...)のみを使用してください。" -02000B12="パスワードがあまりに長過ぎます" - -; Progress dialog -02000C00="処理" -02000C01="経過時間:" -02000C02="残り時間:" -02000C03="サイズ:" -02000C04="速度:" -02000C05="処理済み:" -02000C06="圧縮率:" - -02000C10="バックグラウンド(&B)" -02000C11="フォアグラウンド(&F)" -02000C12="一時停止(&P)" -02000C13="続行(&C)" - -02000C20="一時停止" - -02000C30="本当に圧縮を取りやめますか?" - -; Compress dialog -02000D00="ファイル圧縮" -02000D01="圧縮先(&A):" -02000D02="更新方法(&U):" -02000D03="書庫形式(&F):" -02000D04="圧縮メソッド(&M):" -02000D05="ソリッド書庫作成(&S)" -02000D06="パラメータ(&P):" -02000D07="オプション" -02000D08="自己展開書庫作成(&X)" -02000D09="マルチスレッド利用" -02000D0A="ファイル名を暗号化(&N)" -02000D0B="圧縮レベル(&L):" -02000D0C="辞書サイズ(&D):" -02000D0D="ワードサイズ(&W):" -02000D0E="圧縮に必要なメモリ:" -02000D0F="展開に必要なメモリ:" -02000D10="暗号化" -02000D11="暗号化メソッド:" -02000D12="CPUスレッド数:" -02000D13="ソリッドブロックサイズ:" -02000D14="ソリッドなし" -02000D15="無制限" -02000D16="共有されたファイル圧縮" - -02000D40="書庫を分割(&V):" -02000D41="不正なボリュームサイズ" -02000D42="選択されたボリュームサイズ:{0}バイト\nこのサイズに書庫を分割しますか?" - -02000D81="無圧縮" -02000D82="標準" -02000D83="最高" -02000D84="高速" -02000D85="最速" -02000D86="超圧縮" - -02000D90="閲覧" - -02000DA1="全てのファイル上書き" -02000DA2="ファイル追加と更新" -02000DA3="変更したファイルのみ更新" -02000DA4="ファイルを同期させる" - -02000DB1="全てのファイル" - -02000DC0="圧縮" - -; Columns dialog -02000E00="項目" -02000E01="表示したい項目をチェックしてください。表示したい項目の順番を変えるには移動ボタンで変えます。" -02000E02="選択した項目の表示幅を設定します" -02000E03="ピクセル幅(&W)" - -02000E10="上に移動(&U)" -02000E11="下に移動(&D)" -02000E12="表示(&S)" -02000E13="隠す(&H)" -02000E14="設定" - -02000E81="タイトル" -02000E82="幅" - -; Testing -02000F90="テスト中" - - -; File Manager - -03000000="7-Zipファイルマネージャ" - -; Menu -03000102="ファイル(&F)" -03000103="編集(&E)" -03000104="表示(&V)" -03000105="ツール(&T)" -03000106="ヘルプ(&H)" -03000107="お気に入り(&A)" - -; File -03000210="開く(&O)" -03000211="このフォルダ内で開く(&I)" -03000212="別ウィンドウで開く(&U)" -03000220="表示(&V)" -03000221="編集(&E)" -03000230="名前の変更(&M)" -03000231="コピー(&C)..." -03000232="移動(&M)..." -03000233="削除(&D)" -03000240="プロパティ(&R)" -03000241="コメント(&N)" -03000242="チェックサムの計算" -03000243="比較" -03000250="フォルダ作成" -03000251="ファイル作成" -03000260="閉じる(&X)" -03000270="ファイル分割(&S)..." -03000271="ファイル結合(&B)..." - -; Edit -03000310="元に戻す(&U)" -03000311="やり直す(&R)" -03000320="切り取り(&T)" -03000321="コピー(&C)" -03000322="貼り付け(&P)" -03000323="削除(&D)" -03000330="全て選択(&A)" -03000331="全て選択解除" -03000332="反転選択(&I)" -03000333="選択..." -03000334="選択解除..." -03000335="同一形式選択" -03000336="同一形式選択解除" - -; View -03000410="大きいアイコン(&G)" -03000411="小さいアイコン(&M)" -03000412="一覧(&L)" -03000413="詳細(&D)" -03000420="並べ替え解除" -03000430="ルートフォルダを開く" -03000431="1つ上の階層へ" -03000432="フォルダ履歴..." -03000440="リフレッシュ(&R)" -03000449="フラットビュー" -03000450="&2分割画面" -03000451="ツールバー(&T)" -03000460="書庫ツールバー" -03000461="標準ツールバー" -03000462="大きなボタン" -03000463="テキスト表示" - -; Tools -03000510="オプション(&O)..." -03000511="ベンチマーク(&B)" - -; Help -03000610="ヘルプの表示(&C)..." -03000620="7-Zipについて(&A)..." - -; Favorites -03000710="フォルダをお気に入りに追加(&A)" -03000720="ブックマーク" - -; Options Dialog - -03010000="オプション" - -; Plugins -03010100="プラグイン" -03010101="プラグイン(&P):" -03010110="オプション..." - -; Edit -03010200="外部ツール" -03010201="エディタ(&E):" -03010202="ファイル比較(diff)(&D):" - -; System -03010300="システム" -03010302="7-Zipに関連付けるファイル:" -03010310="プラグイン" - -; Settings -03010400="設定" -03010401="'..'を表示する" -03010402="各ファイルの実際のアイコンを表示する" -03010410="システム(エクスプローラ)のメニューも表示する" -03010420="行単位(列アイテムを一括)で選択する(&F)" -03010421="グリッド線を表示する(&G)" -03010422="シングルクリックで開く" -03010430="選択的な選択モードにする(&A)" -03010440="大きなメモリページを使用する(&L)" - -; Strings - -03020201="コピー" -03020202="移動" -03020203="フォルダへコピー:" -03020204="フォルダへ移動:" -03020205="コピーしています..." -03020206="移動しています..." -03020207="そのフォルダにはコピーもしくは移動ができません。" -03020208="この操作はサポートされていません。" -03020209="対象のフォルダを選択してください。" - -03020210="ファイル削除の確認" -03020211="フォルダ削除の確認" -03020212="複数ファイル削除の確認" -03020213="'{0}'を本当に削除しますか?" -03020214="'{0}'フォルダとその中身のすべてを削除しますか?" -03020215="これらの{0}個の項目を本当に削除しますか?" -03020216="削除中..." -03020217="ファイルまたはフォルダの削除エラー" -03020218="ファイルのパスが長すぎるため、ファイルをごみ箱に移動できません" - -03020220="リネームしています..." -03020221="ファイルまたはフォルダのリネームエラー" -03020222="ファイルコピーの確認" -03020223="本当にファイルを書庫に追加しますか?" - -03020230="フォルダ作成" -03020231="フォルダ名:" -03020232="新しいフォルダ" -03020233="フォルダ作成エラー" - -03020240="ファイル作成" -03020241="ファイル名:" -03020242="新しいファイル" -03020243="ファイル作成エラー" - -03020250="選択" -03020251="選択解除" -03020252="マスク:" - -03020260="フォルダ履歴" - -03020280="'{0}'ファイルが変更されています。\n書庫を更新しますか?" -03020281="ファイルを更新できません。\n'{0}'" -03020282="エディタを起動できません。" -03020283="開いています..." -03020284="このファイルは、ウイルスのように見えます(ファイル名に大量のスペースを含んでいる)。" - -03020290="コメント" -03020291="コメント(&C):" - -030202A0="システム" - -03020300="コンピュータ" -03020301="ネットワーク" -03020302="ドキュメント" - -03020400="追加" -03020401="展開" -03020402="テスト" - -03020420="コピー" -03020421="移動" -03020422="削除" -03020423="情報" - -03020500="ファイル分割" -03020501="分割先(&S):" -03020510="分割中..." -03020520="分割の確認" -03020521="{0}個にファイルを分割してもよろしいですか?" -03020522="分割後のサイズは元のファイルサイズより小さいサイズを指定してください" - -03020600="ファイル結合" -03020601="結合先(&C):" -03020610="結合中..." -03020620="分割ファイルの先頭のファイルだけ選択してください" -03020621="分割ファイルが見つかりません" -03020622="分割ファイルの一部しか見つかりません" - -03020710="チェックサム計算中..." -03020720="チェックサム情報" -03020721="データのCRCチェックサム:" -03020722="データと名前のCRCチェックサム:" - -03020800="スキャン中..." - -03020900="プロパティ" - -03020A01="パスが長いフォルダではこの操作を実行できません。" -03020A02="1つのファイルを選択してください" -03020A03="1つ以上のファイルを選択してください" -03020A04="{0}ファイルは既に存在しています" - -; Computer -03031100="合計サイズ" -03031101="空き領域" -03031102="クラスタサイズ" -03031103="ラベル" - -; Network -03031200="ローカル名" -03031201="プロバイダ" - -; Benchmark Dialog - -03080000="ベンチマーク" -03080001="必要メモリ:" -03080002="圧縮中" -03080003="展開中" -03080004="スピード" -03080005="評価" -03080006="総合評価" -03080007="現在" -03080008="結果" -03080009="テスト回数:" -0308000A="エラー:" -0308000B="CPU使用率" -0308000C="評価 / 使用率" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ka.txt b/External/7-Zip/Lang/ka.txt deleted file mode 100644 index 9b824723c..000000000 --- a/External/7-Zip/Lang/ka.txt +++ /dev/null @@ -1,454 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.07 beta -; Translated by Dimitri Gogelia -; -; -; -; - -00000000="Georgian" -00000001="ქართული" -00000002="55" - -; 7-Zip Configuration - -; Title -01000000="7-Zip-ის კონფიგურირება " - -; Info Page -01000100="7-Zip-ის შესახებ" -01000103="7-Zip თავისუფალად გავრცელებადი პროგრამული უზრუნველყოფაა. თუ გსურთ, რომ მხარი დაუჭიროთ 7-Zip-ის შექმნას, შეგიძლიათ დაარეგისტრიროთ პროგრამა. როგორც რეგისტრირებულ მომხმარებელს, თქვენ გექნებათ ტექნიკური მხარდაჭერა." -01000105="რეგისტრაცია" - -; Folders Page -01000200="საქაღალდეები" -01000210="მუშა საქაღალდე" -01000211="სისტემური დროებითი საქაღალდე" -01000212="მიმდინარე" -01000213="ამორჩევა:" -01000214="გამოიყენება მხოლოდ ცვლადი მატარებლებისათვის" - -01000281="მიუთითეთ ადგილმდებარეობა დროებითი არქივებისათვის." - -; System Page -01000300="სისტემა" -01000301="7-Zip-ის გარსის კონტექსტურ მენიუში ჩადგმა" -01000302="კასკადური კონტექსტური მენიუ" -01000310="კონტექსტური მენიუს ელემენტები:" - -; Language Page -01000400="ენა" -01000401="ენა:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip-ის ბრძანებები" -02000103="არქივის გახსნა" -02000104="მონიშნული არქივის გახსნა." -02000105="გახსნა..." -02000106="ფაილების გახსნა მონიშნული არქივიდან." -02000107="არქივში დამატება..." -02000108="მონიშნული ობიექტების არქივში დამატება." -02000109="ტესტირება" -0200010A="მონიშნული არქივის ტესტირება." -0200010B="გახსნა აქ" -0200010C="ფაილების გახსნა მონიშნული არქივიდან მიმდინარე საქაღალდეში." -0200010D="გახსნა {0}-ში" -0200010E="ფაილების გახსნა ქვე-საქაღალდეში." -0200010F="{0}-ში დამატება" -02000110="მონიშნული ობიექტების არქივში დამატება." -02000111="შეიკუმშოს და გაიგზავნოს ელ-ფოსტით..." -02000112="შეიკუმშოს მონიშნული ობიექტები არქივში და გაიგზავნოს ელ-ფოსტით." -02000113="შეიკუმშოს {0} და გაიგზავნოს ელ-ფოსტით" -02000114="შეიკუმშოს მონიშნული ობიექტები არქივში და გაიგზავნოს ელ-ფოსტით." - -02000140="<საქაღალდე>" -02000141="<არქივი>" - -; Properties -02000203="გზა" -02000204="სახელი" -02000205="გაფართოება" -02000206="საქაღალდე" -02000207="ზომა" -02000208="შეკუმშულის ზომა" -02000209="ატრიბუტები" -0200020A="შექმნილია" -0200020B="გახსნილია" -0200020C="მოდიფიცირებულია" -0200020D="უწყვეტი" -0200020E="კომენტარი" -0200020F="დაშიფრულია" -02000210="Split Before" -02000211="Split After" -02000212="ლექსიკონი" -02000213="CRC" -02000214="ტიპი" -02000215="ანტი" -02000216="მეთოდი" -02000217="სისტემა" -02000218="ფაილური სისტემა" -02000219="მომხმარებელი" -0200021A="ჯგუფი" -0200021B="ბლოკი" -0200021C="კომენტარი" -0200021D="პოზიცია" - -; Status bar -02000301="მონიშნულია {0} ობიექტი" -02000302="{0} ობიექტი" - -; List Context Menu -02000401="სვეტები..." - -02000411="გახსნა" -02000412="ამოღება..." - -; ToolBar -02000501="ამოღება" - -; Messages -02000601="ამ ტიპის არქივისათვის ცვლილების ოპერაცია ხელმიუწვდომელია." -02000602="ვერ შევცვალე არქივი {0}" -02000603="ვერ შევქმენი საქაღალდე '{0}'" -02000604="ფაილი არ წარმოადგენს არქივს." -02000605="შეცდომა" -02000606="ძალზე ბევრი ელემენტი" -02000607="ასეთი ტიპის ფაილის გაფართოებასთან არ არის ასოცირებული არცერთი პროგრამა" -02000608="შეცდომები არ არის ნაპოვნი" - -; Dialogs -02000702="OK" -02000705="დიახ" -02000707="დიახ ყველასათვის" -02000709="არა" -0200070B="არა ყველასათვის" - -02000710="გაუქმება" -02000711="გაუქმება" -02000713="დახურვა" -02000714="სტოპ" -02000715="გადატვირთვა" - -02000720="ცნობარი" - -; Extract dialog -02000800="ამოღება" -02000801="ამოღება:" -02000802="პაროლი" - -02000810="გზა" -02000811="სრული გზა" -02000812="შეფარდებითი გზა" -02000813="გზის გარეშე" - -02000820="თავზე გადაწერის მეთოდი" -02000821="თავზე გადაწერა თანხმობით" -02000822="თავზე გადაწერა თანხმობის გარეშე" -02000823="გამოტოვება" -02000824="ავტონ. გადარქმევა" -02000825="გახსნილი ფაილების ავტონ. გადარქმევა" - -02000830="ფაილები" -02000831="მონიშნული ფაილები" -02000832="ყველა ფაილი" - -02000881="მიუთითეთ ადგილი ამოსაღები ფაილებისათვის." - -02000890="ამოღება" - -; Overwrite dialog -02000900="ფაილის შეცვლის დასტური" -02000901="საქაღალდე უკვე შეიცავს დამუშავებად ფაილს." -02000902="შეიცვალოს მიმდინარე ფაილი" -02000903="შემდეგი ფაილით?" - -02000911="ავტონ. გადარქმევა" - -02000982="{0} ბაიტი" -02000983="შეცვლილია" - -; Messages dialog -02000A00="დიაგნოსტიკური შეტყობინება" - -02000A80="შეტყობინება" - -02000A91="შეკუმშვის შეუთავსებადი მეთოდი '{0}'-თვის." -02000A92="მონაცემების შეცდომა '{0}'-ში. ფაილი დაზიანებულია." -02000A93="CRC-ის შეცდომა '{0}'-ში. ფაილი დაზიანებულია." - -; Password dialog -02000B00="პაროლის შეტანა" -02000B01="შეიყვანეთ პაროლი:" -02000B02="პაროლის ჩვენება" - -; Progress dialog -02000C00="პროცესი" -02000C01="გასული დრო:" -02000C02="დარჩენილი დრო:" -02000C03="ზომა:" -02000C04="სიჩქარე:" - -02000C10="ფონურად" -02000C11="წინა პლანზე" -02000C12="პაუზა" -02000C13="გაგრძელება" - -02000C20="დაპაუზებულია" - -02000C30="დარწმუნებული ხართ, რომ გინდათ შეწყვიტოთ ოპერაცია?" - -; Compress dialog -02000D00="არქივში დამატება" -02000D01="არქივი:" -02000D02="განახლების რეჟიმი:" -02000D03="არქივის ფორმატი:" -02000D04="შეკუმშვის მეთოდი:" -02000D05="შეიქმნას უწყვეტი არქივი" -02000D06="პარამეტრები:" -02000D07="ოფციები" -02000D08="შეიქმნას SFX-არქივი" -02000D09="მრავალნაკადიანი" -02000D0A="ფაილების სახელების დაშიფვრა" -02000D0B="შეკუმშვის დონე:" -02000D0C="ლექსიკონის ზომა:" -02000D0D="სიტყვის ზომა:" -02000D0E="მეხსიერების ზომა შეკუმშვისათვის:" -02000D0F="მეხსიერების ზომა გახსნისათვის:" - -02000D40="დაიყოს ტომებად:" - -02000D81="შეკუმშვის გარეშე" -02000D82="ნორმალური" -02000D83="მაქსიმუმი" -02000D84="სწრაფი" -02000D85="უსწრაფესი" -02000D86="ულტრა" - -02000D90="ნახვა" - -02000DA1="დამატება და შეცვლა" -02000DA2="განახლება და დამატება" -02000DA3="განახლება" -02000DA4="ფაილების სინქრონიზაცია" - -02000DB1="ყველა ფაილი" - -02000DC0="შეკუმშვა" - -; Columns dialog -02000E00="სვეტები" -02000E01="მონიშნეთ სვეტები, რომლებიც უნდა გამოჩნდეს ამ საქაღალდეში. ღილაკებით ”ზევით” და ”ქვევით” შეიძლება დაყენდეს სვეტების მსველობის თანმიმდევრობა." -02000E02="მონიშნული სვეტების სიგანე უნდა იყოს" -02000E03="წერტილი." - -02000E10="ზევით" -02000E11="ქვევით" -02000E12="ჩვენება" -02000E13="დამალვა" -02000E14="დაყენება" - -02000E81="სახელი" -02000E82="სიგანე" - -; Testing -02000F90="ტესტირება" - - -; File Manager - -03000000="7-Zip ფაილების მმართველი" - -; Menu -03000102="ფაილი" -03000103="რედაქტირება" -03000104="ნახვა" -03000105="სერვისი" -03000106="ცნობარი" -03000107="სანიშნეები" - -; File -03000210="გახსნა" -03000211="გაიხსნას შიგნით" -03000212="გაიხსნას გარეთ" -03000220="დათვალიერება" -03000221="რედაქტირება" -03000230="სახელის გადარქმევა" -03000231="ასლი..." -03000232="გადატანა..." -03000233="წაშლა" -03000240="თვისებები" -03000241="კომენტარი" -03000250="საქაღალდის შექმნა" -03000251="ფაილის შექმნა" -03000260="გამოსვლა" -03000270="ფაილის დაშლა..." -03000271="ფაილების გაერთიანება..." - -; Edit -03000310="გაუქმება" -03000311="აღდგენა" -03000320="ამოჭრა" -03000321="ასლი" -03000322="ჩასმა" -03000323="წაშლა" -03000330="სრული მონიშვნა" -03000331="მონიშვნის გაუქმება" -03000332="მონიშვნის უკუცვლა" -03000333="მოინიშნოს..." -03000334="მოიხსნას მონიშვნა..." -03000335="მოინიშნოს ტიპის მიხედვით" -03000336="მონიშვნის მოხსნა ტიპის მიხედვით" - -; View -03000410="მსხვილი პიქტოგრამები" -03000411="პატარა პიქტოგრამები" -03000412="სია" -03000413="ცხრილი" -03000420="არასორტირებული" -03000430="ძირეული საქაღალდის გახსნა" -03000431="ერთი დონით ზევით" -03000432="საქაღალდეების ისტორია..." -03000440="განახლება" -03000450="2 პანელი" -03000451="ინსტრუმენტების პანელი" -03000460="არქივირების პანელი" -03000461="ძირითადი პანელი" -03000462="მსხვილი პანელები" -03000463="წარწერები ღილაკებზე" - -; Tools -03000510="აწყობა..." -03000511="წარმადობის ტესტირება" - -; Help -03000610="თავფურცელი..." -03000620="7-Zip-ის შესახებ..." - -; Favorites -03000710="დაემატოს საქაღალდე სანიშნეებში როგორც" -03000720="სანიშნე" - -; Options Dialog - -03010000="აწყობა" - -; Plugins -03010100="ჩადგმები" -03010101="ჩადგმები:" -03010110="თვისებები..." - -; Edit -03010200="რედაქტორი" -03010201="რედაქტორი:" - -; System -03010300="სისტემა" -03010302="ასოციაცია 7-Zip-თან:" -03010310="ჩადგმა" - -; Settings -03010400="აწყობა" -03010401="\"..\" ელემენტის ჩვენება" -03010402="ფაილების რეალური პიქტოგრამების ჩვენება" -03010410="სისტემური მენიუს ჩვენება" -03010420="კურსორი მთელ სტრიქონზე" -03010421="გამყოფის ჩვენება" - -; Strings - -03020201="ასლის აღება" -03020202="გადატანა" -03020203="ასლი:" -03020204="გადატანა:" -03020205="ასლის აღება..." -03020206="გადატანა..." -03020207="ამ საქაღალდეებისათვის ობიექტების ასლირება დაუშვებელია." -03020208="ოპერაცია არ ხორციელდება." - -03020210="ფაილის წაშლის თანხმობა" -03020211="საქაღალდის წაშლის თანხმობა" -03020212="რამდენიმე ფაილის წაშლის თანხმობა" -03020213="დარწმუნებული ხართ, რომ გინდათ წაშალოთ '{0}'?" -03020214="დარწმუნებული ხართ, რომ გინდათ წაშალოთ '{0}' საქაღალდე და მთელი მისი შიგთავსი?" -03020215="დარწმუნებული ხართ, რომ გინდათ წაშალოთ {0} ელემენტები?" -03020216="იშლება..." -03020217="ფაილის ან საქაღალდის წაშლის შეცდომა" - -03020220="გადარქმევა..." -03020221="ფაილის ან საქაღალდის გადარქმევის შეცდომა" - -03020230="საქაღალდის შექმნა" -03020231="საქაღალდის სახელი:" -03020232="ახალი საქაღალდე" -03020233="შეცდომა საქაღალდის შექმნისას" - -03020240="ფაილის შექმნა" -03020241="ფაილის სახელი:" -03020242="ახალი ფაილი" -03020243="ფაილის შექმნის შეცდომა" - -03020250="მონიშვნა" -03020251="მონიშვნის გაუქმება" -03020252="ნიღაბი:" - -03020260="საქაღალდეების ისტორია" - -03020280="ფაილი '{0}' შეიცვალა.\nგნებავთ მისი არქივში განახლება?" -03020281="შეუძლებელია \n'{0}'-ის განახლება" -03020282="შეუძლებელია რედაქტორის გაშვება." -03020283="იხსნება..." - -03020290="კომენტარი" -03020291="კომენტარი:" - -030202A0="სისტემა" - -03020300="კომპიუტერი" -03020301="ქსელი" - -03020400="დამატება" -03020401="ამოღება" -03020402="ტესტირება" - -03020420="ასლი" -03020421="გადაადგილება" -03020422="წაშლა" -03020423="ინფორმაცია" - -03020500="ფაილის დაშლა" -03020501="დაიშალოს:" -03020510="დაშლა..." - -03020600="Combine Files" -03020601="&Combine to:" -03020610="Combining..." - -; Computer -03031100="მოცულობა" -03031101="თავისუფალი სივრცე" -03031102="კლასტერის ზომა" -03031103="ჭდე" - -; Network -03031200="ლოკალური სახელი" -03031201="პროვაიდერი" - -; Benchmark Dialog - -03080000="წარმადობის ტესტირება" -03080001="გამოყენებული მეხსიერების ზომა:" -03080002="შეკუმშვა" -03080003="გაშლა" -03080004="სიჩქარე" -03080005="რეიტინგი" -03080006="საერთო რეიტინგი" -03080007="მიმდინარე" -03080008="შემაჯამებელი" -03080009="გატარება:" -0308000A="შეცდომა:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/kk.txt b/External/7-Zip/Lang/kk.txt deleted file mode 100644 index cddbe5b0c..000000000 --- a/External/7-Zip/Lang/kk.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Arslan, Arman Beisenov's -; -; -; -; - -00000000="Kazakh" -00000001="Қазақша" -00000002="63" - -; 7-Zip Configuration - -; Title -01000000="7-Zip - Конфигурациясы" - -; Info Page -01000100="7-Zip туралы" -01000103="7-Zip - тегін таратылатын бағдарлама." -01000104="Қолдау" -01000105="Тіркелу" - -; Folders Page -01000200="Қалта" -01000210="&Жұмыс қалтасы" -01000211="&Жүйелік уақытша қалта" -01000212="&Ағымдық" -01000213="&Сұрау:" -01000214="Тек алмалы тасығыштарға ғана пайдалану" - -01000281="Уақытша мұрағаттардың орнын нұсқаңыз." - -; System Page -01000300="Жүйе" -01000301="Мұқабаның мәтінміндің мәзіріне 7-Zip қою" -01000302="Каскадты мәтінмәндік мәзір" -01000310="Мәтінміндік мәзірдің элементтері:" - -; Language Page -01000400="Тіл" -01000401="Тіл:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip әмірлері." -02000103="Мұрағат ашу" -02000104="Ерекшеленген мұрағатты ашу." -02000105="Бумадан шешу" -02000106="Файлды ерекшеленген мұрағатан шығару." -02000107="Мұрағатқа үстеу..." -02000108="Ерекшеленген нысанды мұрағатқа үстеу." -02000109="Тестілеу" -0200010A="Ерекшеленген мұрағатты тестілеу." -0200010B="Мұнда шешу" -0200010C="Ерекшеленген мұрағаттағы файлды ағымдық қалтаға шығару." -0200010D="{0} дегенде шешу" -0200010E="Файлды каталог астында шығару." -0200010F="{0} дегенге үстеу" -02000110="Ерекшеленген нысандарды мұрағатқа үстеу." -02000111="Сығып э-поштамен жіберу..." -02000112="Ерекшеленген нысанды сығып, мұрағатты э-поштамен жіберу." -02000113="{0} дегенде сығып, э-поштамен жіберу" -02000114="Ерекшеленген нысанды сығып, мұрағатты э-поштамен жіберу." - -02000140="<Қалта>" -02000141="<Мұрағат>" - -; Properties -02000203="Жол" -02000204="Аты" -02000205="Кеңейтімі" -02000206="Қалта" -02000207="Көлем" -02000208="Сығылған" -02000209="Атрибут" -0200020A="Жасалған" -0200020B="Ашылған" -0200020C="Өзгерген" -0200020D="Үзіліссіз" -0200020E="Комментарий" -0200020F="Шифрланған" -02000210="дейін бөлінген" -02000211="кейін бөлінген" -02000212="Сөздік" -02000213="CRC" -02000214="Түрі" -02000215="Анти" -02000216="Тәсіл" -02000217="Жүйе" -02000218="Файлдық жүйе" -02000219="Пайдаланушы" -0200021A="Топ" -0200021B="Блок" -0200021C="Комментарий" -0200021D="Орны" -0200021E="Жолы" -0200021F="Қалта" -02000220="Файл" -02000221="Нұсқа" -02000222="Том" -02000223="Көп томды" -02000224="Жылжу" -02000225="Сілтеме" -02000226="Блок" -02000227="Том" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="Процессор" -0200022C="Физикалық көлемі" -0200022D="Тақырып көлемі" -0200022E="Бақылау сомасы" -0200022F="Характеристика" -02000230="Виртуальды мекен-жай" -02000231="ID" -02000232="Қысқа аты" -02000233="Жасаушы" -02000234="Сектор көлемі" -02000235="Режим" -02000236="Сілтеме" - -; Status bar -02000301="Ерекшеленген нысан: {0}" -02000302="{0} нысан" - -02000320="Файл:" -02000321="Қалта:" -02000322="Көлем:" -02000323="Сығылған:" -02000324="Мұрағат:" - -; List Context Menu -02000401="&Баған..." - -02000411="&Ашу" -02000412="&Шығару..." - -; ToolBar -02000501="Шығару" - -; Messages -02000601="Көтермейтін мұрағат үшін операция өзгертіледі." -02000602="{0} мұрағатын өзгерту мүмкін емес" -02000603="'{0}' қалтасын жасау мүмкін емес" -02000604="Файл көтеретін мұрағат емес" -02000605="Қателік" -02000606="Өте көп элемент" -02000607="Бағдарлама ассоцирациясы жоқ" -02000608="Қателік табылған жоқ" -02000609="'{0}' файлды мұрағат ретінде ашу мүмкін емес" -0200060A="Шифрланған '{0}' мұрағатты ашу мүмкін емес. Кілтсөз дұрыс емес пе?" -0200060B="Бос жад жоқ" -0200060C="Белгісіз қателік" -0200060D="Көтермейтін мұрағат түрі" - -; Dialogs -02000702="Жарайды" -02000705="&Иә" -02000707="Бәріне &ия" -02000709="&Жоқ" -0200070B="Бәріне &жоқ" - -02000710="Болдырмау" -02000711="&Болдырмау" -02000713="&Жабу" -02000714="Тоқтату" -02000715="Қайта іске қосу" - -02000720="Анықтама" - -; Extract dialog -02000800="Шығару" -02000801="&Мұнда шешу:" -02000802="&Кілтсөз" - -02000810="Жолдар" -02000811="&Толық жол" -02000812="&Қатысы бар жол" -02000813="&Жолсыз" - -02000820="Қайта жазу" -02000821="&Растаумен" -02000822="&Растаусыз" -02000823="Өткізіп &жіберу" -02000824="Автоматты қайта атау." -02000825="Бар файлды автом. қайта атау" - -02000830="Файл" -02000831="Таңдалған файл" -02000832="Барлық файл" - -02000881="Шығарылатын файл орнын нұсқаңыз." - -02000890="Шешу" - -; Overwrite dialog -02000900="Файлды ауыстыру растау" -02000901="Қалтада іс жүргізілетін файл бар." -02000902="Файлды ауыстыру" -02000903="келесі файлмен ба?" - -02000911="Автоматты қайта атау" - -02000982="{0} байт" -02000983="өзгерген" - -; Messages dialog -02000A00="Хабарлама" - -02000A80="Хабарлама" - -02000A91="'{0}' файлы үшін сығу әдісін көтермейді." -02000A92="'{0}' мәліметінде қателік. Файл зақымдалған." -02000A93="'{0}' CRC қателік. Файл зақымдалған." -02000A94="Шифрланған '{0}' файлында мәліміт қате. Кілтсөз дұрыс емес пе?" -02000A95="Шифрланған '{0}' файлында CRС қате. Кілтсөз дұрыс емес пе?" - -; Password dialog -02000B00="Кілтсөзді енгізу" -02000B01="&Кілтсөзді енгізіңіз:" -02000B02="&Кілтсөзді көрсету" -02000B03="&Кілтсөзді қайталаңыз:" -02000B10="Кілтсөздер сәйкес емес" -02000B11="Кілтсөзге тек ағылшын әліпбиін пайдаланыңыз, сандар және арнайы нышандар (!, #, $, ...)" -02000B12="Кілтсөз өте ұзақ" - -; Progress dialog -02000C00="Процесс" -02000C01="Өтті:" -02000C02="Қалды:" -02000C03="Барлығы:" -02000C04="Жылд.:" -02000C05="Көлем:" -02000C06="Сығу дәрежесі:" - -02000C10="&Фонды" -02000C11="&Алдыңғы жоспарға" -02000C12="&Үізілс" -02000C13="&Жалғастыру" - -02000C20="Үзілісте" - -02000C30="Операцияны тоқтату керек пе?" - -; Compress dialog -02000D00="Мұрағатқа үстеу" -02000D01="&Мұрағат:" -02000D02="&Өзгерту режимі:" -02000D03="&Мұрағат пішімі:" -02000D04="&Сығу тәсілі:" -02000D05="&Solid мұрағат жасау" -02000D06="&Параметр:" -02000D07="&Баптау" -02000D08="SF&X-мұрағат жасау" -02000D09="&Көп ағымды" -02000D0A="&Файлдың атын шифрлау" -02000D0B="&Сығу деңгейі:" -02000D0C="Сөздік &көлемі:" -02000D0D="Сөз &көлемі:" -02000D0E="Бууға арналған көлем:" -02000D0F="Шешуге арналған көлем:" -02000D10="Шифрлау" -02000D11="Шифрлау тәсілі:" -02000D12="Ағым саны:" -02000D13="Блог көлемі:" -02000D14="Файл көлемі б-ша" -02000D15="Үзіліссіз" -02000D16="Ашылған файд жазу үшін сығу" - -02000D40="Томға бөлшектеу (байтқа):" -02000D41="Томның көлемін енгізу қате" -02000D42="Томның орнатылған көлемі: {0} байт.\nМұрағатты томға бөлшектеу керек пе?" - -02000D81="Сығусыз" -02000D82="Кәдімгі" -02000D83="Ең жоғарғы" -02000D84="Шапшаң" -02000D85="Жылдам" -02000D86="Ультра" - -02000D90="Сапыру" - -02000DA1="Үстеу, ауыстыру" -02000DA2="Жаңарту, үстеу" -02000DA3="Жаңату" -02000DA4="Теңестіру" - -02000DB1="Барлық файл" - -02000DC0="Компрессия" - -; Columns dialog -02000E00="Бағандар" -02000E01="Осы қалтада көрсетілетін бағандарды белгілеңіз. \"Жоғары\" және \"Төмен\" пернелерімен бағандардың орнын реттеуге болады." -02000E02="Таңдалған бағандарда ен болуы керек" -02000E03="нүкте." - -02000E10="Жоғары" -02000E11="Төмен" -02000E12="Көрсету" -02000E13="Жасыру" -02000E14="Орнату" - -02000E81="Аты" -02000E82="Ені" - -; Testing -02000F90="Тестілеу" - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&Файл" -03000103="&Өңдеу" -03000104="&Көрініс" -03000105="С&ервис" -03000106="&Анықтама" -03000107="&Таңдаулы" - -; File -03000210="&Ашу" -03000211="Ішінен &ашу" -03000212="Сыртынан ашу" -03000220="Қарау" -03000221="&Өңдеу" -03000230="Қайта атау" -03000231="&Көшіру..." -03000232="&Жылжыту..." -03000233="&Жою" -03000240="Сипаттар" -03000241="Комме&нтарий..." -03000242="Бақылау сомасы" -03000243="Diff" -03000250="&Қалта жасау" -03000251="Файл жасау" -03000260="Шығу" -03000270="Файлды бөлшектеу..." -03000271="Файлды біріктіру..." - -; Edit -03000310="&Болдырмау" -03000311="&Қайтару" -03000320="&Қиып алу" -03000321="&Көшіру" -03000322="Қою" -03000323="&Жою" -03000330="Бәрін ерекшелеу" -03000331="Ерекшелеуді аластау" -03000332="&Ерекшелеуді көрсету" -03000333="Ерекшелеу..." -03000334="Ерекшедеужі аластау..." -03000335="Түрі б-ша ерекшелеу" -03000336="Түрі б-ша ерекшелеуді аластау" - -; View -03000410="&Үлкен таңбаша" -03000411="&Кішк. таңбаша" -03000412="Тізім" -03000413="&Кесте" -03000420="Сұрыптаусыз" -03000430="Негізгі қалтады ашу" -03000431="Бір деңгей жоғары өту" -03000432="Қалта тарихы..." -03000440="Жаңарту" -03000449="Жалпақ режим" -03000450="&2 тақта" -03000451="&Құралдар тақтасы" -03000460="Мұрағаттауыш батырма тақтасы" -03000461="Батырманың кәдімгі тақтасы" -03000462="Үлкен батырмалар" -03000463="Батырмада жазулар" - -; Tools -03000510="Баптау..." -03000511="Өнімді тестілеу" - -; Help -03000610="&Басты..." -03000620="Бағдарламада..." - -; Favorites -03000710="Қалтаны таңдаулыға басқаша үстеу" -03000720="Таңдаулы" - -; Options Dialog - -03010000="Баптау" - -; Plugins -03010100="Плагин" -03010101="&Плагин:" -03010110="Сипаттар" - -; Edit -03010200="Өңдегіш" -03010201="&Өңдегіш:" -03010202="&Diff:" - -; System -03010300="Жүйе" -03010302="7-Zip файлмен ассорциялау:" -03010310="Плагин" - -; Settings -03010400="Баптау" -03010401="\"..\" элементті көрсету" -03010402="Файлдың шынайы таңбашасын көрсету" -03010410="Жүйелік мәзірді көрсету" -03010420="Барлық жолаққа меңзер" -03010421="Бөлгіштерді көрсету" -03010422="Бір шерткеннен ашу" -03010430="Белгілеудің альтернативті режимі" -03010440="Жадтың үлкен беттерін пайдалану" - -; Strings - -03020201="Көшіру" -03020202="Жылжыту" -03020203="Мұнда көшіру:" -03020204="Мұнда жылжыту:" -03020205="Көшіру..." -03020206="Жылжыту..." -03020207="Мұндай қалтаға нысандарыд көшіруге болмайды" -03020208="Бұл қалтаға операция көтермейді." -03020209="Қалтаны нұсқаңыз" - -03020210="Файлды жоюды растау" -03020211="Қалтаны жоюды растау" -03020212="Бірнеше файлды жоюды растау" -03020213="\"{0}\" дегенді жою керек пе?" -03020214="\"{0}\" қалтасын және оның ішіндегілерін жою керек пе?" -03020215="({0} дана) нысандарды жою керек пе?" -03020216="Жойылу..." -03020217="Файл не қалтаны жою қате" -03020218="Ұзақ жолды файлдарды себетке жоюды жүйе көтермейді" - -03020220="Атын өзгерту..." -03020221="Файл не қалтаның атын өзгерту мүмкін емес" -03020222="Файлды көшіруді растау" -03020223="Мына файлдарды мұрағатқа көшіру керек пе" - -03020230="Қалта жасау" -03020231="Қалта аты:" -03020232="Жаңа қалта" -03020233="Қалтаны жасау қате" - -03020240="Файл жасау" -03020241="Файл аты:" -03020242="Жаңа файл" -03020243="Файлды жасау кезінде қателік болды" - -03020250="Ерекшелеу" -03020251="Аластау" -03020252="Маска:" - -03020260="Қалта тарихы" - -03020280="'{0}' файлы өзгерді.\nОны мұрағатта жаңарту керек пе?" -03020281="\n'{0}' файлды жаңарту мүмкін емес" -03020282="Өңдегішті ашу мүмкін емес" -03020283="Ашылу..." -03020284="Файл вирусқа ұқсайды (файл аты ұзақ жолды мәселені құрайды)." - -03020290="Комментарий" -03020291="&Комментарий:" - -030202A0="Жүйе" - -03020300="Компьютер" -03020301="Желі" -03020302="Құжаттар" - -03020400="Үстеу" -03020401="Шығару" -03020402="Тестілеу" - -03020420="Көшіру" -03020421="Жылжыту" -03020422="Жою" -03020423="Ақпарат" - -03020500="Файлды бөлшектеу" -03020501="&Бөлшектеу:" -03020510="Бөлшектеу..." -03020520="Бөлшектеуді растау" -03020521="Файлд {0} бөлікке бөлшектеу керек пе?" -03020522="Том көлемі файлдың кіріс көлемінен аз болу керек" - -03020600="Файлдарды біріктіру" -03020601="&Мұнда біріктіру:" -03020610="Біріктіру..." -03020620="Бөлшектенген файлдың бірінші бөлігін таңдау керек" -03020621="Бөлшектенген файлды тану мүмкін емес" -03020622="Бөлшектенген файлдың бөліктерін табу мүмкін емес" - -03020710="Бақылау сомасын есептеу..." -03020720="Бақылау сомасы" -03020721="Мәлімет үшін CRC бақылау сомасы:" -03020722="Мәлімет және атау үшін CRC бақылау сомасы:" - -03020800="Сканерлеу..." - -03020900="Сипаттар" - -03020A01="Операция қалтаға жолдың ұзақтығынан орындалмайды" -03020A02="Сізге бір файл таңдау керек" -03020A03="Сізге бір не бірнеше файл таңдау керек" -03020A04="{0} деген файл бар" - -; Computer -03031100="Сыйымы" -03031101="Бос" -03031102="Кластер көлемі" -03031103="Белгі" - -; Network -03031200="Жергілікті аты" -03031201="Провайдер" - -; Benchmark Dialog - -03080000="Өнімділікке тестілеу" -03080001="Жад көлемі:" -03080002="Буу" -03080003="Шешу" -03080004="Жылдамдық" -03080005="Рейтинг" -03080006="Жалпы рейтинг" -03080007="Ағымдық" -03080008="Нәтижесі" -03080009="Өтулер:" -0308000A="Қате:" -0308000B="Ауырлық" -0308000C="Рейтинг / Жеңіс." - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ko.txt b/External/7-Zip/Lang/ko.txt deleted file mode 100644 index 493cc8e73..000000000 --- a/External/7-Zip/Lang/ko.txt +++ /dev/null @@ -1,545 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by -; 4.53~ : Dong-yoon Han (한동윤) -; ~4.52 beta : Hyeong il Kim (kurt Sawyer) -; Orignal : ZannyLim (임재형) -; - -00000000="Korean" -00000001="한국어" -00000002="18" - -; 7-Zip Configuration - -; Title -01000000="7-Zip 환경설정" - -; Info Page -01000100="7-Zip 정보" -01000103="7-Zip 은 무료 소프트웨어입니다. 원하신다면, 등록을 통해 7-Zip 개발을 지원하실 수 있습니다." -01000104="기술지원" -01000105="등록" - -; Folders Page -01000200="폴더" -01000210="작업 폴더(&W)" -01000211="시스템 임시 폴더(&S)" -01000212="현재 폴더(&C)" -01000213="지정 폴더(&S):" -01000214="이동식 드라이브에서만 사용" - -01000281="압축에 관계된 파일이 임시적으로 사용할 위치 지정." - -; System Page -01000300="시스템" -01000301="7-Zip 을 쉘 컨텍스트 메뉴에 통합" -01000302="계단식 컨텍스트 메뉴" -01000310="컨텍스트 메뉴 항목:" - -; Language Page -01000400="언어" -01000401="언어:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip 명령" -02000103="압축파일 열기" -02000104="선택한 압축파일을 엽니다." -02000105="압축 풀기..." -02000106="선택한 압축파일의 압축을 풉니다." -02000107="압축파일에 추가..." -02000108="선택한 항목을 압축파일에 추가합니다." -02000109="압축파일 테스트" -0200010A="선택한 압축파일의 무결성을 테스트합니다." -0200010B="여기에 압축 풀기" -0200010C="선택한 압축파일을 현재 폴더에 풉니다." -0200010D="{0}에 풀기" -0200010E="하위 폴더에 파일을 풉니다." -0200010F="{0}에 추가" -02000110="선택한 항목을 압축파일에 추가합니다." -02000111="압축해서 이메일 보내기" -02000112="선택한 항목을 압축파일로 만들어 이메일을 통해 보냅니다." -02000113="{0}로 압축해서 이메일 보내기" -02000114="선택한 항목을 압축파일로 만들어 이메일을 통해 보냅니다." - -02000140="<폴더>" -02000141="<압축파일>" - -; Properties -02000203="경로" -02000204="이름" -02000205="확장자" -02000206="폴더" -02000207="크기" -02000208="압축된 크기" -02000209="속성" -0200020A="만든 날짜" -0200020B="액세스한 날짜" -0200020C="수정한 날짜" -0200020D="솔리드" -0200020E="설명" -0200020F="암호화" -02000210="나누기 이전" -02000211="나누기 후" -02000212="사전" -02000213="CRC" -02000214="형식" -02000215="안티" -02000216="압축 방식" -02000217="생성한 OS" -02000218="파일 시스템" -02000219="사용자" -0200021A="그룹" -0200021B="블럭" -0200021C="설명" -0200021D="위치" -0200021E="경로 접두" -0200021F="폴더" -02000220="파일" -02000221="버전" -02000222="볼륨" -02000223="다중볼륨" -02000224="오프셋" -02000225="링크" -02000226="블록" -02000227="볼륨" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="물리적 크기" -0200022D="해더 크기" -0200022E="체크섬" -0200022F="특성" -02000230="가상 주소" -02000231="ID" -02000232="짧은 이름" -02000233="생성자 응용프로그램" -02000234="섹터 크기" -02000235="모드" -02000236="연결" - -; Status bar -02000301="{0} 항목이 선택됨" -02000302="{0} 항목" - -02000320="파일:" -02000321="폴더:" -02000322="크기:" -02000323="압축된 크기:" -02000324="압축파일:" - -; List Context Menu -02000401="열(&C)..." - -02000411="열기(&O)" -02000412="압축 풀기(&E)..." - -; ToolBar -02000501="압축 풀기" - -; Messages -02000601="업데이트 작업이 이 압축파일에서는 지원되지 않습니다." -02000602="압축파일 {0}을(를) 업데이트 할 수 없음" -02000603="'{0}' 폴더를 생성할 수 없음" -02000604="파일이 지원되지 않는 압축파일 입니다." -02000605="오류" -02000606="항목이 너무 많음" -02000607="주어진 파일 이름 확장자에 연결된 프로그램이 없음" -02000608="오류 없음" -02000609="파일 '{0}'을(를) 압축파일로 열 수 없음" -0200060A="암호화된 압축파일 '{0}'을(를) 열 수 없습니다. 암호가 틀리나요?" -0200060B="시스템이 필요한 양의 메모리를 할당할 수 없음" -0200060C="알 수 없는 오류" -0200060D="지원되지 않는 압축파일 유형" - -; Dialogs -02000702="확인" -02000705="예(&Y)" -02000707="모두 예(&A)" -02000709="아니오(&N)" -0200070B="모두 아니오(&L)" - -02000710="취소" -02000711="취소(&C)" -02000713="닫기(&C)" -02000714="중지" -02000715="다시 시작" - -02000720="도움말" - -; Extract dialog -02000800="압축 풀기" -02000801="압축 풀기(&X):" -02000802="암호" - -02000810="경로 모드" -02000811="전체 경로명" -02000812="현재 경로명" -02000813="경로명 없음" - -02000820="덮어쓰기 모드" -02000821="덮어쓰기 전에 물어봄" -02000822="물어보지 않고 덮어쓰기" -02000823="존재하는 파일 건너뛰기" -02000824="자동으로 이름 바꾸기" -02000825="존재하는 파일 이름 바꾸기" - -02000830="파일" -02000831="선택된 파일(&S)" -02000832="모든 파일(&A)" - -02000881="압축 풀린 파일의 위치를 지정합니다." - -02000890="압축 푸는 중" - -; Overwrite dialog -02000900="파일 교체시 확인" -02000901="대상 폴더에 이미 파일이 존재합니다." -02000902="존재하는 파일을" -02000903="이것으로 교체하시겠습니까?" - -02000911="자동으로 이름 바꾸기(&U)" - -02000982="{0} 바이트" -02000983="수정한 날짜" - -; Messages dialog -02000A00="진단 메시지" - -02000A80="메시지" - -02000A91="'{0}'은 지원하지 않는 압축 방식입니다." -02000A92="'{0}'에 데이터 오류가 있습니다. 파일이 손상되었습니다." -02000A93="'{0}'의 CRC 검사를 실패했습니다. 파일이 손상되었습니다." -02000A94="암호화 파일 '{0}'에 데이터 오류가 있습니다. 암호가 틀리나요?" -02000A95="암호화 파일 '{0}'의 CRC 검사를 실패했습니다. 암호가 틀리나요?" - -; Password dialog -02000B00="암호 입력" -02000B01="암호 입력:" -02000B02="암호 보여주기(&S)" -02000B03="암호 다시 입력:" -02000B10="암호가 일치하지 않음" -02000B11="암호로는 영문자, 숫자 그리고 특수 문자 (!, #, $, ...)만 사용" -02000B12="패스워드가 너무 김" - -; Progress dialog -02000C00="처리" -02000C01="경과 시간:" -02000C02="남은 시간:" -02000C03="전체 크기:" -02000C04="속도:" -02000C05="처리됨:" -02000C06="압축 효율:" - -02000C10="낮은 순위로(&B)" -02000C11="우선 순위로(&F)" -02000C12="일시정지(&P)" -02000C13="계속(&C)" - -02000C20="일시정지 됨" - -02000C30="정말로 취소하시겠습니까?" - -; Compress dialog -02000D00="압축파일에 추가" -02000D01="압축파일(&A):" -02000D02="업데이트 모드(&U):" -02000D03="압축파일 형식(&F):" -02000D04="압축 방식(&M):" -02000D05="솔리드 압축 파일 만들기(&S)" -02000D06="매개변수(&P):" -02000D07="옵션" -02000D08="자동(SFX) 압축파일 생성(&X)" -02000D09="다중 스레딩" -02000D0A="파일 이름 암호화(&N)" -02000D0B="압축 레벨(&L):" -02000D0C="사전 크기(&D):" -02000D0D="단어(word) 크기(&W):" -02000D0E="압축시 사용 메모리:" -02000D0F="압축 풀기시 사용 메모리:" -02000D10="암호화" -02000D11="암호화 방식:" -02000D12="CPU 스레드 수:" -02000D13="솔리드 블록 크기:" -02000D14="솔리드 사용 않함" -02000D15="솔리드" -02000D16="공유하고있는 파일 압축" - -02000D40="볼륨 나누기, 바이트(&V):" -02000D41="볼륨 크기가 부적절합니다." -02000D42="지정된 볼륨 크기: {0} 바이트.\n이 볼륨 크기로 분할 하시겠습니까?" - -02000D81="저장" -02000D82="보통" -02000D83="최고" -02000D84="빠름" -02000D85="가장 빠름" -02000D86="극한" - -02000D90="찾아보기" - -02000DA1="파일을 추가하고 교체" -02000DA2="파일을 업데이트하고 추가" -02000DA3="존재하는 파일만 새롭게 하기" -02000DA4="압축파일 내용을 동기화" - -02000DB1="모든 파일" - -02000DC0="압축하는 중" - -; Columns dialog -02000E00="열" -02000E01="이 폴더에서 보고 싶은 열을 체크하세요. 열의 순서를 바꾸려면 위로 그리고 아래로 버튼을 사용하세요." -02000E02="선택한 열은 반드시 넓이는" -02000E03="픽셀이 되어야 합니다. (&W)" - -02000E10="위로 이동(&U)" -02000E11="아래로 이동(&D)" -02000E12="보여주기(&S)" -02000E13="숨기기(&H)" -02000E14="설정" - -02000E81="제목" -02000E82="폭" - -; Testing -02000F90="검사 중" - - -; File Manager - -03000000="7-Zip 파일 매니저" - -; Menu -03000102="파일(&F)" -03000103="편집(&E)" -03000104="보기(&V)" -03000105="도구(&T)" -03000106="도움말(&H)" -03000107="즐겨찾기(&A)" - -; File -03000210="열기(&O)" -03000211="내부 열기(&I)" -03000212="외부 열기(&U)" -03000220="보기(&V)" -03000221="편집(&E)" -03000230="새 이름(&M)" -03000231="복사(&C)..." -03000232="이동(&M)..." -03000233="삭제(&D)" -03000240="속성(&R)" -03000241="설명(&N)" -03000242="체크섬 계산" -03000243="Diff" -03000250="폴더 만들기" -03000251="파일 만들기" -03000260="끝내기(&X)" -03000270="파일 나누기(&S)" -03000271="파일 합치기(&B)" - -; Edit -03000310="실행 취소(&U)" -03000311="다시 실행(&R)" -03000320="잘라내기(&T)" -03000321="복사(&C)" -03000322="붙여넣기(&P)" -03000323="삭제(&D)" -03000330="모두 선택(&A)" -03000331="모두 선택 취소" -03000332="선택 항목 반전(&I)" -03000333="선택..." -03000334="선택 취소..." -03000335="파일 형식으로 선택" -03000336="파일 형식으로 선택 취소" - -; View -03000410="큰 아이콘(&G)" -03000411="작은 아이콘(&M)" -03000412="목록(&L)" -03000413="자세히(&S)" -03000420="정렬 안함" -03000430="최상위 폴더 열기" -03000431="한단계 위로" -03000432="폴더 히스토리..." -03000440="새로 고침(&R)" -03000449="펼쳐 보기" -03000450="2 패널(&2)" -03000451="도구 모음(&T)" -03000460="압축 도구 모음" -03000461="표준 도구 모음" -03000462="큰 버튼" -03000463="버튼 텍스트 보여주기" - -; Tools -03000510="옵션(&P)..." -03000511="벤치마크(&B)..." - -; Help -03000610="도움말 항목(&C)..." -03000620="7-Zip 정보(&A)..." - -; Favorites -03000710="즐겨찾기에 폴더 추가(&A)" -03000720="북마크" - -; Options Dialog - -03010000="옵션" - -; Plugins -03010100="플러그인" -03010101="플러그인(&P):" -03010110="옵션" - -; Edit -03010200="편집기" -03010201="편집기(&E):" -03010202="Diff(&D):" - -; System -03010300="시스템" -03010302="7-Zip으로 연결:" -03010310="플러그 인" - -; Settings -03010400="설정" -03010401="\"..\" 항목 보여주기" -03010402="실재 파일 아이콘 보여주기" -03010410="시스템 메뉴 보여주기" -03010420="행 전체 선택(&F)" -03010421="눈금선 보여주기(&G)" -03010422="한 번 클릭으로 항목 열기" -03010430="대체 선택 모드" -03010440="큰 메모리 페이지 사용" - -; Strings - -03020201="복사" -03020202="이동" -03020203="폴더로 복사:" -03020204="폴더로 이동:" -03020205="복사 중..." -03020206="이동 중..." -03020207="해당 폴더에 항목을 이동 또는 복사할 수 없습니다." -03020208="지원되지 않는 작업입니다." -03020209="대상 폴더를 선택하세요." - -03020210="파일 삭제 확인" -03020211="폴더 삭제 확인" -03020212="여러 파일 지우기 확인" -03020213="'{0}'을(를) 삭제하시겠습니까?" -03020214="폴더 '{0}'와 그 모든 내용을 삭제하시겠습니까?" -03020215="이 {0} 항목들을 삭제하시겠습니까?" -03020216="삭제 중..." -03020217="파일 또는 폴더 삭제 실패" -03020218="시스템이 긴 경로의 파일을 휴지통으로 이동할 수 없음" - -03020220="이름 바꾸는 중..." -03020221="파일 또는 폴더 이름 바꾸기 실패" -03020222="파일 복사 확인" -03020223="파일을 압축파일로 복사 하시겠습니까?" - -03020230="폴더 만들기" -03020231="폴더 이름:" -03020232="새 폴더" -03020233="폴더 만들기 오류" - -03020240="파일 만들기" -03020241="파일 이름:" -03020242="새 파일" -03020243="파일 만들기 오류" - -03020250="선택" -03020251="선택 취소" -03020252="마스크:" - -03020260="폴더 히스토리" - -03020280="파일 '{0}'이 수정되었습니다.\n압축파일에 업데이트 하시겠습니까?" -03020281="'{0}' 파일을 업데이트 할 수 없습니다." -03020282="편집기를 시작할 수 없습니다." -03020283="여는 중..." -03020284="해당 파일이 바이러스 같습니다 (파일 이름에 길다란 공백이 들어있음)." - -03020290="설명" -03020291="설명(&C):" - -030202A0="시스템" - -03020300="컴퓨터" -03020301="네트워크" -03020302="문서" - -03020400="추가" -03020401="압축 풀기" -03020402="테스트" - -03020420="복사" -03020421="이동" -03020422="삭제" -03020423="정보" - -03020500="파일 분할하기" -03020501="분할하기(&S):" -03020510="분할하는 중..." -03020520="분할 확인" -03020521="정말 {0} 볼륨들로 분할 하시겠습니까?" -03020522="볼륨 크기가 원본 파일보다 작아야만 합니다." - -03020600="파일 합치기" -03020601="합치기(&B):" -03020610="파일 합치는 중..." -03020620="첫번째 파일만 선택하시오" -03020621="분할한 파일의 한 부분으로 인식할 수 없음" -03020622="분할 파일의 한 부분 이상을 찾을 수 없음" - -03020710="체크섬 계산중..." -03020720="체크섬 정보" -03020721="데이터용 CRC 체크섬:" -03020722="데이터와 이름용 CRC 체크섬:" - -03020800="검색 중..." - -03020900="속성" - -03020A01="긴 경로로된 폴더에서 해당 작업을 호출할 수 없습니다." -03020A02="반드시 한 개의 파일을 선택해야함" -03020A03="반드시 한 개 이상의 파일을 선택해야 함" -03020A04="{0} 파일은 이미 존재함" - -; Computer -03031100="전체 크기" -03031101="여유 공간" -03031102="클러스터 크기" -03031103="라벨" - -; Network -03031200="로컬 이름" -03031201="제공자" - -; Benchmark Dialog - -03080000="벤치마크" -03080001="메모리 사용량:" -03080002="압축 중" -03080003="압축 푸는 중" -03080004="속도" -03080005="평가" -03080006="전체 평가" -03080007="현재" -03080008="결과" -03080009="통과:" -0308000A="오류:" -0308000B="CPU 사용량" -0308000C="평가 / 사용량" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/ku-ckb.txt b/External/7-Zip/Lang/ku-ckb.txt deleted file mode 100644 index 60cb49132..000000000 --- a/External/7-Zip/Lang/ku-ckb.txt +++ /dev/null @@ -1,536 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.66 -; Translated by Ara Qadir. -; http://www.chawg.org -; -; -; - -00000000="Kurdish - Sorani" -00000001="کوردی" -00000002="" - -; 7-Zip Configuration - -; Title -01000000="سازدانی 7-Zip" - -; Info Page -01000100="7-Zip دەربارەی" -01000103="7-Zip پڕۆگرامێکی خۆڕایە. لەگەڵ ئەوەشدا، ئەتوانی پاڵپشت بیت لە پەرەپێدانی 7-Zip." -01000104="پاڵپشتی" -01000105="تۆمارکردن" - -; Folders Page -01000200="بوخچەکان" -01000210="بوخچەی &کارکردن" -01000211="بوخچەی کاتی &سیستەم" -01000212="&ئێستایی" -01000213="&دیاریکراو:" -01000214="تەنها بۆ ئەو وەگەڕخەرانە بەکاری بهێنە کە توانای لابردنیان هەیە (removable disk)" - -01000281="شوێنێک دیاری بکە بۆ پەڕگە کاتییەکانی ئەرشیڤ." - -; System Page -01000300="سیستەم" -01000301="7-Zip بکە نێو لیستەی مێنیوەوە" -01000302="مێنیو بکە بە یەک هاوپۆل" -01000310="کەرەستەکانی نێو مێنیو:" - -; Language Page -01000400="زمان" -01000401="زمان:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="فرمانەکانی 7-Zip" -02000103="کردنەوەی ئەشیڤ" -02000104="ئەرشیڤە دیاریکراوەکان ئەکاتەوە." -02000105="دەرکێشانی پەڕگەکان" -02000106="پەڕگەکان دەرئەکێشێت لە ئەرشیڤە دیاریکراوەکەدا." -02000107="زیادکردن بۆ ئەرشیڤ" -02000108="دیاریکراوەکان بۆ ئەرشیڤ زیاد بکە" -02000109="تاقیکردنەوەی ئەرشیڤ" -0200010A= "گشت ئەرشیڤە دیاریکراوەکە تاقیدەکاتەوە" -0200010B="لێرە دەریبکێشە" -0200010C="پەڕگەکانی ئەرشیڤی دیاریکراو دەردەکێشێ بۆ بوخچەی ئێستایی." -0200010D="دەرکێشان بۆ {0}" -0200010E="پەڕگەکان دەردەکێشێ بۆ ژێربوخچە." -0200010F="زیادکردنی بۆ {0}" -02000110="دیاریکراوەکان زیاد دەکات بۆ ئەرشیڤ." -02000111="پەستاندن و پەیامی ئەلیکترۆنی..." -02000112="پەڕگە دیاریکراوەکان بپەستێنە بۆ ئەرشیڤ و ئەرشیڤەکەش بە پەیامی ئەلیکترۆنی بنێرە." -02000113="بیپەستێنە بۆ {0} و بە پەیامی ئەلیکترۆنی بینێرە" -02000114="پەڕگە دیاریکراوەکان بپەستێنە بۆ ئەرشیڤ و ئەرشیڤەکەش بە پەیامی ئەلیکترۆنی بنێرە." - -02000140="<بوخچە>" -02000141="<ئەرشیڤ>" - -; Properties -02000203="ڕێڕەو" -02000204="ناو" -02000205="پاشگر" -02000206="بوخچە" -02000207="قەبارە" -02000208="قەبارەی پێچراو" -02000209="تایبەتمەندی" -0200020A="دروستکراوە" -0200020B="بینراوە" -0200020C="دەستکاریکراوە" -0200020D="ڕەق" -0200020E="لێدوانی لەسەر دراوە" -0200020F="پارێزراو" -02000210="لەتکردن پێش" -02000211="لەتکردن پاش" -02000212="فەرهەنگ" -02000213="CRC" -02000214="جۆر" -02000215="دژ" -02000216="ڕێباز" -02000217="سیستەمی خانەخوێ" -02000218="سیستەمی پەڕگە" -02000219="بەکارهێنەر" -0200021A="گوروپ" -0200021B="بلۆک" -0200021C="لێدوان" -0200021D="جێگە" -0200021E="ـی ڕێڕەو Prefix" -0200021F="بوخچەکان" -02000220="پەڕگەکان" -02000221="وەشان" -02000222="قەبارەکان" -02000223="فرە قەبارە" -02000224="Offset" -02000225="بەستەرەکان" -02000226="بلۆکەکان" -02000227="قەبارەکان" - -02000229="٦٤-بت" -0200022A="Big-endian" -0200022B="CPU" -0200022C="قەبارەی فیزیکی" -0200022D="قەبارەی سەر" -0200022E="کۆپشکنین" -0200022F="تایبەتمەندی" -02000230="ناونیشانی ڕاستی" - -; Status bar -02000301="{0} شت دیاریکراوە" -02000302="{0} شت" - -02000320="پەڕگەکان:" -02000321="بوخچەکان:" -02000322="قەبارە" -02000323="قەبارەی پەستێنراو:" -02000324="ئەرشیڤەکان:" - -; List Context Menu -02000401="&ستوونەکان..." - -02000411="&کردنەوە" -02000412="&دەرکێشان..." - -; ToolBar -02000501="دەرکێشان" - -; Messages -02000601="کارپێکردنی نوێکاری پاڵپشت نەکراوە بۆ ئەم ئەرشیڤە." -02000602="ناتوانرێ ئەرشیڤی {0} نوێبکرێتەوە" -02000603="ناتوانرێ بوخچەی '{0}' دروستبکرێت." -02000604="پەڕگە ئەرشیڤێکی پاڵپشتیکراو نییە." -02000605="هەڵە" -02000606="شتی(item) زۆر هەن" -02000607="هیچ پەڕگەیەک نییە پەیوەست بێت بە پاشگری پەڕگەی دراوەوە." -02000608="هیچ هەڵەیەک نییە" -02000609="ناتوانرێت پەڕگەی '{0}' بکرێتەوە وەک ئەرشیڤ." -0200060A="ناتوانرێت ئەرشیڤی پارێزراوی '{0}' بکرێتەوە. ئایا تێپەڕەوشە هەڵەیە؟" -0200060B="سیستەم ناتوانێت بڕی پێویست لە بیرگە دابین بکات" -0200060C="هەڵەیەکی نەزانراو" -0200060D="جۆری ئەرشیڤ پاڵپشتی نەکراوە" - -; Dialogs -02000702="باشە" -02000705="&بەڵێ" -02000707="بەڵێ بۆ &هەموو" -02000709="&نەخێر" -0200070B="نەخێر بۆ هە&موو" - -02000710="پاشگەزبوونەوە" -02000711="&پاشگەزبوونەوە" -02000713="&داخستن" -02000714="وەستاندن" -02000715="دەستپێکردنەوە" - -02000720="یارمەتی" - -; Extract dialog -02000800="دەرکێشان" -02000801="&دەرکێشان بۆ:" -02000802="تێپەڕەوشە" - -02000810="جۆری ڕێڕەو" -02000811="ناوی ڕێڕەوی تەواوەتی" -02000812="ناوی ڕێڕەوە هەنووکەییەکان" -02000813="ناوی ڕێڕەو نییە" - -02000820="جۆری بەسەردا نووسینەوە" -02000821="بپرسە پێش بەسەردا نووسینەوە" -02000822="بەسەردا بنووسەوە بەبێ ڕەزامەندی" -02000823="پەڕگە هەبووەکان بپەڕێنە" -02000824="خۆکار ناوگۆڕین" -02000825="خۆکار ناوگۆڕینی پەڕگە هەبووەکان" - -02000830="پەڕگەکان" -02000831="پەڕگە &دیاریکراوەکان" -02000832="&هەموو پەڕگەکان" - -02000881="شوێنێک دیاری بکە بۆ پەڕگە دەرکێشراوەکان" - -02000890="دەری دەکێشێ" - -; Overwrite dialog -02000900="دڵنیابە لە جێگرتنەوەی پەڕگە" -02000901="بوخچەی مەبەست پەڕگەیەکی تیادایە بە هەمان ناو." -02000902="ئەتەوێت پەڕگە هەبووەکان جێبگیردرێتەوە؟" -02000903="لەگەڵ ئەم دانەیە؟" - -02000911="ناوگۆڕینی &خۆکار" - -02000982="{0} بایت" -02000983="دەستکاریکراوە لە" - -; Messages dialog -02000A00="پەیامی لێکۆڵینەوە/ پشکنین" - -02000A80="پەیام" - -02000A91="ڕێبازێکی پاڵپشتی نەکراوی پەستاندن بۆ '{0}'. " -02000A92="زانیاری '{0}' هەڵەیە. پەڕگە تێکشکاوە." -02000A93="CRC سەرکەوتوو نەبوو. پەڕگە تێکشکاوە." -02000A94="زانیاری هەڵەیە لە پەڕگەی پارێزراودا '{0}'. ئایا تێپەڕەوشە هەڵەیە؟" -02000A95="CRC هەڵەیە لە پەڕگەی پارێزراودا '{0}'. ئایا تێپەڕەوشە هەڵەیە؟" - -; Password dialog -02000B00="نووسینی تێپەڕەوشە:" -02000B01="تێپەڕەوشە بنووسە:" -02000B02="&پیشاندانی تێپەڕەوشە" -02000B03="تێپەڕەوشە بنووسەوە:" -02000B10="تێپەڕەوشەکان وەک یەک نین" -02000B11="تەنها پیتە ئینگلیزییەکان، ژمارە و نووسە تیبەتییەکان ($، %، #) بۆ تێپەڕەوشە بەکاربهێنە" -02000B12="تێپەڕەوشە زۆر درێژە" - -; Progress dialog -02000C00="جێبەجێکردن" -02000C01="ک. دەستپێکردوو:" -02000C02="کاتی ماوە:" -02000C03="سەرجەمی قەبارە:" -02000C04="خێرایی:" -02000C05="جێبەجێکراوە:" -02000C06="ڕێژەی پەستاندن:" - -02000C10="&پاشەبنەما" -02000C11="پ&ێشەبنەما" -02000C12="&ڕاگرتن" -02000C13="&بەردەوامبوون" - -02000C20="ڕاگیردرا" - -02000C30="دڵنیایت لە پاشگەزبوونەوە؟" - -; Compress dialog -02000D00="زیادکردن بۆ ئەرشیڤ" -02000D01="&ئەرشیڤ:" -02000D02="&جۆری نوێکاری:" -02000D03="&فۆڕماتی ئەرشیڤ:" -02000D04="&ڕێبازی پەستاندن:" -02000D05="دروستکردنی ئەرشیڤی &ڕەق/ پتەو" -02000D06="&هاوکۆڵکەکان:" -02000D07="هەڵبژاردنەکان" -02000D08="دروستکردنی ئەرشیڤی SF&X" -02000D09="فرەدەزوو" -02000D0A="&ناوی پەڕگەکان بپارێزە (encrypt)" -02000D0B="&ئاستی پەستاندن:" -02000D0C="قەبارەی &فەرەەنگ:" -02000D0D="قەبارەی &وشە:" -02000D0E="ڕێژەی بەکارهێنانی بیرگە بۆ پەستاندان:" -02000D0F="ڕێژەی بەکارهێنانی بیرگە بۆ کردنەوەی پەستێنراو:" -02000D10="پاراستن" -02000D11="ڕێبازی پاراستن" -02000D12="ژمارەی دەزووەکانی CPU:" -02000D13="قەبارەی بلۆکی ڕەق:" -02000D14="نا-ڕەق" -02000D15="ڕەق" -02000D16="پەستاندنی پەڕگە ئاڵوگۆڕکراوەکان" - -02000D40="لەتی بکە بۆ &قەبارە و بایت:‌" -02000D41="قەبارەی لەتکراوەکە هەڵەیە" -02000D42="قەبارەی دیاریکراوی لەتکراوەکە: {0} بایت.\nدڵنیایت لە لەتکردنی ئەرشیڤەکە بۆ ئەو قەبارانە؟" - -02000D81="پاشەکەوت" -02000D82="ئاسایی" -02000D83="زۆرترین" -02000D84="خێرا" -02000D85="خێراترین" -02000D86="سەروو" - -02000D90="هەڵدەوە/ Browse" - -02000DA1="زیادکردن و جێگرتنەوەی پەڕگەکان" -02000DA2="نوێکردنەوە و زیادکردنی پەڕگە" -02000DA3="بووژاندنەوەی پەڕگە هەبووەکان" -02000DA4="ـکردنی پەڕگەکان Synchronize" - -02000DB1="هەموو پەڕگەکان" - -02000DC0="دەی پەستێنێ..." - -; Columns dialog -02000E00="ستوونەکان" -02000E01="ئەو ستوونەکان بپشکنە کە ئەتەوێت دیاربن لەم بوخچەیەدا. دوگمەی جوڵان بۆ سەرەوە و جوڵان بۆ خوارەوە بەکارببە بۆ پێش و پاشخستنی ستوونەکان." -02000E02="ستوونی دیاریکراو پێویستە" -02000E03="خاڵ &پان بێت." - -02000E10="جوڵان بۆ &خوارەوە" -02000E11="جوڵان بۆ &سەرەوە" -02000E12="&پیشاندان" -02000E13="&شاردنەوە" -02000E14="ڕێکبخە" - -02000E81="ناونیشان" -02000E82="پانی" - -; Testing -02000F90="تاقیدەکاتەوە" - - -; File Manager - -03000000="7-Zip بەڕێوەبەرایەتی پەڕگەی" - -; Menu -03000102="&فایل" -03000103="&دەستکاری" -03000104="&بینین" -03000105="&ئامڕازەکان" -03000106="&یارمەتی" -03000107="د&ڵخوازەکان" - -; File -03000210="&کردنەوە" -03000211="کردنەوە لە&ناو خۆدا" -03000212="کردنەوە لە &دەرەوە" -03000220="&بینین" -03000221="&دەستکاری" -03000230="&ناوگۆڕین" -03000231="&لەبەرگرتنەوە بۆ..." -03000232="&گواستنەوە بۆ..." -03000233="&سڕینەوە" -03000240="&تایبەتمەندییەکان" -03000241="ل&ێدوان" -03000242="ژماردنی checksum" -03000250="دروستکردنی بوخچە" -03000251="دروستکردنی پەڕگە" -03000260="دەر&چوون" -03000270="&لەتکردنی پەڕگە..." -03000271="&پێکەوە لکاندنی پەڕگەکان..." - -; Edit -03000310="&پاشگەزبوونەوە" -03000311="&کردن-ەوە" -03000320="&بڕین" -03000321="&لەبەرگرتنەوە" -03000322="&لکا&ندن" -03000323="&سڕینەوە" -03000330="هەمووی دیاری بکە" -03000331="هەموو دیاریکراوەکان لاببە" -03000332="%پێچەوانەکردنەوەی دیاریکراو" -03000333="دیاری بکە..." -03000334="دیاری مەکە..." -03000335="بە پێی جۆر دیاری بکە" -03000336="لابردنی دیاریکراوەکان بەپێ جۆر" - -; View -03000410="ئایکۆنی &گەورە" -03000411="ئایکۆنی &بچوک" -03000412="&لیست" -03000413="&وردەکاری" -03000420="ڕیزنەکراو" -03000430="کردنەوەی بوخچەی ڕەگ" -03000431="یەک ئاست بۆ سەرەوە" -03000432="مێژووی بوخچەکان..." -03000440="&بووژاندنەوە" -03000449="بینین بەشێوەی فلات" -03000450="&2 پانێڵ" -03000451="&جێ ئامڕاز" -03000460="جێ ئامڕازی ئەرشیڤ" -03000461="جی ئامڕازی بنچینە" -03000462="دوگمەی گەورە" -03000463="پیشاندانی دەقی دوگمەکان" - -; Tools -03000510="&هەڵبژاردنەکان" -03000511="&نیشانەی پێوان" - -; Help -03000610="&ناوەڕۆکەکان..." -03000620="&دەربارەی 7-Zip..." - -; Favorites -03000710="&زیادکردنی بوخچە بۆ دڵخوازەکان وەک" -03000720="دڵخوازی" - -; Options Dialog - -03010000="ەەڵبژاردنەکان" - -; Plugins -03010100="پێوەکراوەکان" -03010101="&پێوەکراوەکان:" -03010110="هەڵبژاردنەکان" - -; Edit -03010200="دەستکاریکەر" -03010201="&دەستکاریکەر:" - -; System -03010300="سیستەم" -03010302="7-Zip پەیوەست بکە بە:" -03010310="پێوەکراوە" - -; Settings -03010400="ڕێکخستەکان" -03010401="شتەکانی \"..\" پیشانبدە" -03010402="ئایکۆنی ڕاستەقینەی پەڕگەکان پیشانبدە" -03010410="مێنیوی سیستەم پیشانبدە" -03010420="دیاریکردنی هەموو &ڕیزەکە" -03010421="پیشاندانی هێڵە &grid ـەکان" -03010430="جۆری دیاریکردنی &جێگرەوە/ ئەڵتەرناتیڤ" -03010440="پەڕەی بیرگەی &گەورە بەکارببە" - -; Strings - -03020201="لەبەرگرتنەوە" -03020202="گواستنەوە" -03020203="لەبەرگتنەوە بۆ:" -03020204="گواستنەوە بۆ:" -03020205="لەبەری دەگرێتەوە..." -03020206="دەیگوازێتەوە بۆ..." -03020207="ناتوانی شتەکان لەبەربگریتەوە یان بگوازیتەوە بۆ ئەو بوخچانە." -03020208="ئەو کارە پاڵپشتی نەکراوە" -03020209="بوخچەی مەبەست دیاری بکە." - -03020210="دڵنیابە لە سڕینەوەی پەڕگە" -03020211="دڵنیابە لە سڕینەوەی بوخچە" -03020212="دڵنیابە لە سڕینەوەی هەموو پەڕگەکان" -03020213="دڵنیایت لە سڕینەوەی '{0}'؟" -03020214="دڵنیایت لە سڕینەوەی بوخچەی '{0}' و هەموو ناوەڕۆکەکانی؟" -03020215="دڵنیایت لە سڕینەوەی ئەم {0} شتە؟" -03020216="دەی سڕێتەوە..." -03020217="هەڵە هەیە لە سڕینەوەی پەڕگەکان یا بوخچەکان" -03020218="سیستەم ناتوانێت پەڕگەیەک بگوێزێتەوە بۆ تەنەکەی خۆڵ بە ڕێڕەوی درێژەوە" - -03020220="ناوی دەگۆڕێ..." -03020221="هەڵە هەیە لە ناو گۆڕینی پەڕگە یان بوخچەکان. " -03020222="دڵنیابە لە لەبەرگرتنەوەی پەڕگە" -03020223="دڵنیایت لە لەبەرگرتنەوەی پەڕگەکان بۆ ئەرشیڤ؟" - -03020230="دروستکردنی بوخچە" -03020231="ناوی بوخچە:" -03020232="بەخچەی نوێ" -03020233="هەڵە هەیە لە دروستکردنی بوخچە " - -03020240="دروستکردنی پەڕگە" -03020241="ناوی پەڕگە:" -03020242="پەڕگەی نوێ" -03020243="هەڵە هەیە لە دروستکردنی پەڕگەدا" - -03020250="دیاری بکە" -03020251="دیاری مەکە" -03020252="دەمامک:" - -03020260="مێژووی بوخچەکان" - -03020280="پەڕگەی '{0}' دەستکاریکراوە. ئەتەوێت لە ئەرشیڤەکەدا نوێی بکەیتەوە؟" -03020281="ناتوانرێ پەڕگەی \n'{0}' نوێبکرێتەوە" -03020282="ناتوانرێ دەستکاریکەر دەستپێبکرێت." -03020283="دەیکاتەوە..." -03020284="پەڕگەکە لە ڤایرۆس دەچێت (ناوی پەڕگەکە بۆشایی زۆری تیادایە)." - -03020290="لێدوان" -03020291="&لێدوان:" - -030202A0="سیستەم" - -03020300="کۆمپیوتەر" -03020301="ڕایەڵە" -03020302="بەڵگەنامەکان" - -03020400="زیادکردن" -03020401="دەرکێشان" -03020402="تاقیکردنەوە" - -03020420="لەبەرگرتنەوە" -03020421="گواستنەوە" -03020422="سڕینەوە" -03020423="زانیاری" - -03020500="لەتکردنی پەڕگە" -03020501="&لەتی بکە بۆ:" -03020510="لەتی دەکات..." -03020520="دڵنیابە لە لەتکردن" -03020521="دڵنیایت لە لەتکردنی پەڕگەی {0} بۆ دوو قەبارە؟" -03020522="پێویستە قەبارەی هەر یەک لە لەتەکان بچوکتربێت لە قەبارەی پەڕگە لەتکراوەکە" - -03020600="پێکەوەلکاندنی پەڕگەکان" -03020601="%پێکەوەی بلکێنە بۆ:" -03020610="پێکەوەی دەلکێنێت..." -03020620="تەنها پەڕگەی یەکەم دیاری بکە" -03020621="ناتوانێت پەڕگە بدۆزێتەوە وەک بەشێک لە پەڕگە لەتکراوەکە" -03020622="ناتوانێت لە بەشێک زیاتر بدۆزێتەوە لە پەڕگە لەتکراوەکە" - -03020710="ژماردنی کۆپشکنین..." -03020720="زانیاری کۆپشکنین" -03020721="کۆپشکنینی CRC بۆ دراوە:" -03020722="کۆپشکنینی CRC بۆ دراوە و ناوەکان:" - -03020800="دەی پشکنێت..." - -03020900="تایبەتمەندییەکان" - -03020A01="ناتوانرێت ئەو کردارە بانگبکرێت لە بوخچەیەکەوە کە ڕێڕەوێکی درێژی ەەیە." -03020A02="پێویستە پەڕگەیەک دیاریبکەیت" -03020A03="پێویستە پەڕگەیەک یان زیاتر دیاریبکەیت" -03020A04="پەڕگەی {0} پێشتر ەەیە" - -; Computer -03031100="سەرجەمی قەبارە" -03031101="بۆشایی بەتاڵ" -03031102="قەبارەی کۆمەڵەکە" -03031103="نیشان" - -; Network -03031200="ناوی ناوخۆیی" -03031201="دابینکەر" - -; Benchmark Dialog - -03080000="نیشانەی پێوان" -03080001="ڕێژەی بەکارهێنراوی بیرگە:" -03080002="پەستاندن" -03080003="کردنەوەی پەستێنراو" -03080004="خێرایی" -03080005="هەڵسەنگاندن" -03080006="سەرجەمی هەڵسەنگاندن" -03080007="ئێستایی" -03080008="ئەنجام" -03080009="دەرچوونەکان:" -0308000A="هەڵەکان:" -0308000B="CPU ڕێژەی بەکارهێنراوی" -0308000C="ڕێژەی بەکارەێنراو / هەڵسەنگاندن" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/ku.txt b/External/7-Zip/Lang/ku.txt deleted file mode 100644 index 5a99c7118..000000000 --- a/External/7-Zip/Lang/ku.txt +++ /dev/null @@ -1,473 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.37 -; Translated by Rizoyê Xerzî -; -; -; -; - -00000000="Kurdish" -00000001="Kurdî" -00000002="" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Sazkirin" - -; Info Page -01000100="Der barê 7-Zip de" -01000103="7-Zip nivîsbariyeke azad e. Lê, tu dikarî wekî tomarkirin desteka pêşxistina 7-zip bibî." -01000104="Destek" -01000105="Tomarkirin" - -; Folders Page -01000200="Peldank" -01000210="Peldanka &Xebatê" -01000211="&Peldanka TEMP a Pergalê" -01000212="P&eldanka Derbasdar" -01000213="Pe&ldanka Navborî:" -01000214="Bi tenê ji bo ajokarên derketî bi kar bîne" - -01000281="Ji bo dosiyên demdemî yên arşîvê cih belî bike." - -; System Page -01000300="Pergal" -01000301="Bila di pêşekên naverokê de 7-Zip bixuye" -01000302="Pêşeka naverokê ya sûlavî" -01000310="Hêmanên peşeka naverokê:" - -; Language Page -01000400="Ziman" -01000401="Ziman:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Fermanên 7-Zip" -02000103="Arşîvê veke" -02000104="Arşîva hilbijartî vedike." -02000105="Dosiyan derxe..." -02000106="Dosiyan ji arşîva hilbijartî derdixe." -02000107="Bike Arşîv..." -02000108="Hêmanên hilbijartî dixe arşîvê." -02000109="Arşîvê bihêçîne" -0200010A="Tevahiya arşîva hilbijartî diceribîne." -0200010B="Valake vir" -0200010C="Dosiyên arşîva hilbijartî derdixe peldanka derbasdar." -0200010D="Peldanka {0} derxe" -0200010E="Derdixe bin-peldankê." -0200010F="Wekî {0} bike arşîv" -02000110="Hêmanên hilbijartî dike arşîv." -02000111="Bişidîne û bişîne..." -02000112="Hêman hilbijartî dişidîne û arşîvê bi e-peyamê re dişîne." -02000113="Wekî {0} bişidîne û bişîne" -02000114="Hêmanên hilbijartî dişidîne û dike arşîv û arşîvê bi e-peyamê re dişîne." - -02000140="" -02000141="" - -; Properties -02000203="Rê" -02000204="Nav" -02000205="Cure" -02000206="Peldank" -02000207="Mezinahî" -02000208="Mezinahiya di arşîvê de" -02000209="Taybetiyên xweser" -0200020A="Çêbûyî" -0200020B="Gihaştî" -0200020C="Guhertî" -0200020D="Hişk" -0200020E="Daxuyankirî" -0200020F="Şîfrekirî" -02000210="Parçeyê borî" -02000211="Parçeyê piştre" -02000212="Ferheng" -02000213="CRC" -02000214="Cure" -02000215="Dij" -02000216="Awayê şidandinê" -02000217="Platform" -02000218="Pergala Dosiyê" -02000219="Bikarhêner" -0200021A="Kom" -0200021B="Stûn" -0200021C="Daxuyanî" -0200021D="Cih" -0200021E="Path Prefix" - -; Status bar -02000301="{0} heb hêman hilbijartî ne" -02000302="{0} heb hêman" - -02000320="Pel:" -02000321="Peldank:" -02000322="Mezinahî:" - -; List Context Menu -02000401="&Stûn..." - -02000411="&Veke" -02000412="&Derxe..." - -; ToolBar -02000501="Derxe" - -; Messages -02000601="Tu nikarî vê arşîvê rojane bikî." -02000602="Arşîva {0} nayê rojanekirin" -02000603="Peldanka '{0}' nayê çêkirin" -02000604="Ev dosya ne arşîveke naskirî ye." -02000605="Çewtî" -02000606="Hêman zêde ne" -02000607="Sepaneke têkildarî vî cureyê dosiyê nîn e" -02000608="Çewtî nîn e." - -; Dialogs -02000702="Temam" -02000705="&Erê" -02000707="&Ji Bo Hemûyî Erê" -02000709="&Na" -0200070B="Ji &Bo Hemûyî Na" - -02000710="Betal" -02000711="B&etal" -02000713="Bi&gire" -02000714="Raweste" -02000715="Dîsa Destpêke" - -02000720="Alîkarî" - -; Extract dialog -02000800="Derxe" -02000801="&Cihê Dê Derkevê:" -02000802="Şîfre" - -02000810="Navê Rê" -02000811="Navê tevahî yên rê" -02000812="Navê derbasdar ên rê" -02000813="Bila navên rê tune bin" - -02000820="Dosiyên heyî" -02000821="Ji bo li ser binivîse bipirse" -02000822="Bê pirs li ser binivîse" -02000823="Derxistin" -02000824="Navekî nû li yên di arşîvê de bike" -02000825="Navekî nû li yên heyî bike" - -02000830="Dosya" -02000831="D&osiyên hilbijartî" -02000832="He&mû Dosya" - -02000881="Ji bo dosya derkevinê cihekî belî bike." - -02000890="Tên derxistin" - -; Overwrite dialog -02000900="Rewla Lisernivîsandinê" -02000901="Di dosiya armanckirî de bi vî navî dosiyek heye. Bila li ser bête nivîsîn?" -02000902="Dosiya heyî:" -02000903="Dosiya tê derxistin:" - -02000911="Na&vekî nû lê bike" - -02000982="{0} bayt" -02000983="guhertina dawî " - -; Messages dialog -02000A00="Peyamên haydariyê" - -02000A80="Peyam" - -02000A91="Ji bo '{0}' awayê şidandinê nehate nasîn." -02000A92="'{0}' xerabe ye. (Çewtiya daneyê)" -02000A93="'{0}' xerabe ye. (Çewtiya CRC)" - -; Password dialog -02000B00="Têketina Şîfreyê" -02000B01="Şîfreyê binivîse:" -02000B02="Bi&la şîfre bixuye" - -; Progress dialog -02000C00="bixebite" -02000C01="Dema borî:" -02000C02="Dema mayî:" -02000C03="Mezinahî:" -02000C04="Lez:" - -02000C10="L%i Pişt" -02000C11="Li &Pêş" -02000C12="&Rawestîne" -02000C13="Bi&domîne" - -02000C20="Rawestiya - " - -02000C30="Ma bila betal bibe?" - -; Compress dialog -02000D00="Bike Arşîv" -02000D01="&Arşîv:" -02000D02="A&wayê rojanekirinê:" -02000D03="Awa&yê arşîvê:" -02000D04="Awayê şi&dandinê:" -02000D05="Bila &hişk be" -02000D06="&Parametre:" -02000D07="Vebijêrk" -02000D08="Bila ew bixwe derxe (SFX)" -02000D09="Pir&girêkî" -02000D0A="Navên dosiyê bike şîfre" -02000D0B="A&sta şidandinê:" -02000D0C="Me&zinahiya ferhengê:" -02000D0D="M&ezinahiya bêjeyê:" -02000D0E="Bikaranîna bîrê (Şidandin):" -02000D0F="Bikaranîna bîrê (Vekirin):" - -02000D40="Wekî Bayt/&cilt bike parçe:" - -02000D81="Bêyî şidandin" -02000D82="Asayî" -02000D83="Herî Pir" -02000D84="Bi Lez" -02000D85="Leztirîn" -02000D86="Ultra" - -02000D90="Bibîne" - -02000DA1="Dosiyan têxê, yên heyî derxe" -02000DA2="Dosiyan têxê, yên kevin rojane bike" -02000DA3="Bi tenê yên kevin rojane bike" -02000DA4="Dosiyan bike wekî hev" - -02000DB1="Hemû dosya" - -02000DC0="tên şidandin" - -; Columns dialog -02000E00="Stûn" -02000E01="Stûnên tu dixwazî di vê peldankê de xuya bibin nîşan bike. Ji bo rêzkirina stûnan bişkojkên berjor-berjêr bi kar bîne." -02000E02="Firehiya stûna hilbijartî" -02000E03="Bila &piksel be." - -02000E10="B&erjor" -02000E11="&Berjêr" -02000E12="&Nîşan Bide" -02000E13="&Veşêre" -02000E14="Peywirdar bike" - -02000E81="Sernivîs" -02000E82="Firehî" - -; Testing -02000F90="tê hêçandin" - - -; File Manager - -03000000="7-Zip Gerînendeyê Dosiyan" - -; Menu -03000102="&Dosya" -03000103="&Bipergalîne" -03000104="&Nîşan Bide" -03000105="&Amûr" -03000106="A&lîkarî" -03000107="Bi&jare" - -; File -03000210="&Veke" -03000211="&Di Panelê De Veke" -03000212="Di &Paceyê De Veke" -03000220="&Nîşan Bide" -03000221="&Sererast bike" -03000230="&Navekî Nû Bidê" -03000231="&Ji Ber Bigire" -03000232="B&ar Bike" -03000233="Jê B&ibe" -03000240="&Taybetî" -03000241="Da&xuyanî" -03000242="checksum heseb bike" -03000250="Pe&ldankeke Nû" -03000251="Do&siyeke Nû" -03000260="De&rkeve" -03000270="Parçe Bi&ke..." -03000271="Bike &Yek..." - -; Edit -03000310="&Vegere" -03000311="&Nû Bike" -03000320="&Bibire" -03000321="&Ji Ber Bigire" -03000322="&Pêveke" -03000323="Jê Bib&e" -03000330="&Hemûyî hilbijêre" -03000331="He&mû hilijartinê rake" -03000332="Be&revajî wê hilbijêre" -03000333="&Hilbijêre..." -03000334="Hilbijarti&nê Rake..." -03000335="Vî cureyî hilbijêre" -03000336="Hilbijartina cure rake" - -; View -03000410="&Dawêrên Mezin" -03000411="D&awêrên Biçûk" -03000412="&Lîste" -03000413="&Hûragahî" -03000420="Bê Dor" -03000430="Peldanka Kok Veke" -03000431="Astekê Berjor" -03000432="Dîroka Peldankê..." -03000440="&Nû Bike" -03000449="xuyakirina sade" -03000450="&2 Panelan veke" -03000451="Da&rikê amûran" -03000460="Darikê arşîvê" -03000461="Darikê standart" -03000462="Bişkojkên mezin" -03000463="Bila nivîsa bişkojkan bixuye" - -; Tools -03000510="&Vebijêrk..." -03000511="&Pîvana Çalakbûnê" - -; Help -03000610="&Naverok..." -03000620="D&er barê 7-Zip de..." - -; Favorites -03000710="Pe&ldanka derbasdar veke" -03000720="Cih" - -; Options Dialog - -03010000="Vebijêrk" - -; Plugins -03010100="Leqêq" -03010101="&Hemû Lehêq:" -03010110="Mîheng..." - -; Edit -03010200="Per&galker" -03010201="Pergalkerê De&qê:" - -; System -03010300="Pergal" -03010302="Bi 7-Zip re têkildar bike:" -03010310="Leqêq" - -; Settings -03010400="Mîheng" -03010401="Bila hêmana \"..\" xuya bike" -03010402="Bila dawêrên dosiyên rastî xuya bikin" -03010410="Bila pêşeka pergalê xuya bike" -03010420="Bila &hemû rêzikê bibore" -03010421="Bila &xêzên tabloyê xuya bike" -03010430="&Kipa hilbijartina alternatîf" -03010440="bîra berfireh bikar bîne" - -; Strings - -03020201="Ji Ber Bigire" -03020202="Bar Bike" -03020203="Cihê Dê Were Jibergirtin:" -03020204="Cihê Dê Were Barkirin:" -03020205="tê jibergirtin..." -03020206="tê barkirin..." -03020207="Jibergirtin û barkirin ji bo vê peldankê nabe." -03020208="Kirin ne pêkan e." - -03020210="Erêkirina jêbirina dosiyê" -03020211="Erêkirina jêbirina peldankê" -03020212="Erêkirina jêbirina gelek dosiyan" -03020213="Ma bila dosiya '{0}' bête jêbirin?" -03020214="Ma bila peldanka '{0}' û yên tê de bên jêbirin?" -03020215="Ma bila hêmana {0} bête jêbirin?" -03020216="tê jêbirin..." -03020217="Çewtiya Jêbirinê" - -03020220="navekî nû tê lêkirin..." -03020221="Çewtiya Navlêkirinê" -03020222="Erêkirina Jibergirtinê" -03020223="Ma bila dosî ji bo arşîvê bên jibergirtin" - -03020230="Peldankeke nû" -03020231="Navê peldankê:" -03020232="Peldankeke Nû" -03020233="Çewtiya Çêkirina peldankê" - -03020240="Dosiyeke Nû" -03020241="Navê Dosiyê:" -03020242="Dosiyeke Nû" -03020243="Çewtiya çêkirina Dosiyê" - -03020250="Hilbijêre" -03020251="Hilbijartinê rake" -03020252="Derbirîna hilbijartinê:" - -03020260="Rabirdûya Peldankê" - -03020280="Dosiya '{0}' hatiye guhartin.\nMa bila di arşîvê bête rojanekirin?" -03020281="Dosiya '{0}' nehate rojanekirin" -03020282="Pergalkerê deqê nehate destpêkirin." -03020283="vedibe..." - -03020290="Daxuyanî" -03020291="&Daxuyanî:" - -030202A0="Pergal" - -03020300="Komputer" -03020301="Tor" - -03020400="Bike Arşîv" -03020401="Derxe" -03020402="Bihêçîne" - -03020420="Ji Ber Bigire" -03020421="Bar Bike" -03020422="Jê Bibe" -03020423="Agahî" - -03020500="Bike Parçe" -03020501="Di &vê peldankê de parçe bike:" -03020510="tê parçekirin..." - -03020600="Bike Yek" -03020601="Di vê &peldankê de bike yek:" -03020610="tê yekirin..." - -03020710="Hesabê sererastkirî..." -03020720="Agahiyên hesabê sererast" -03020721="CRC hesabê sererast bo data:" -03020722="CRC hesabê sererast bo data û nav:" - -03020800="Tê raguhestin" - -; Computer -03031100="Hemû Mezinahî" -03031101="Cihê Vala" -03031102="Mezinahiya telpikî" -03031103="Etîket" - -; Network -03031200="Navê Herêmî" -03031201="Derfetkar" - -; Benchmark Dialog - -03080000="Çalakiya komputerê" -03080001="Bikaranîna birê:" -03080002="Şidandin" -03080003="Vekirin" -03080004="Lez" -03080005="Puan" -03080006="bi guloverî puanan" -03080007="Carî" -03080008="Encam" -03080009="Serkeftî:" -0308000A="Çewt:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/lt.txt b/External/7-Zip/Lang/lt.txt deleted file mode 100644 index 42b6568a3..000000000 --- a/External/7-Zip/Lang/lt.txt +++ /dev/null @@ -1,512 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.57 -; Translated by Marius Navickas edited by Domas Jokubauskis -; -; -; -; - -00000000="Lithuanian" -00000001="Lietuvių" -00000002="39" - -; 7-Zip Configuration - -; Title -01000000="7-Zip nustatymai" - -; Info Page -01000100="Apie 7-Zip" -01000103="7-Zip yra nemokama programa. Vis dėlto, jeigu jums patinka 7-Zip ir jūs norėtumėte paremti jos tolesnį vystymą, prašome pinigais paremti 7-Zip projektą." -01000104="Techninis palaikymas" -01000105="Paremti" - -; Folders Page -01000200="Aplankai" -01000210="&Darbinis aplankas" -01000211="&Sisteminis laikinas aplankas" -01000212="D&abartinis" -01000213="Nurodyta&s:" -01000214="Naudoti tik išimamiems diskams" - -01000281="Nurodyti vietą laikinoms archyvinėms byloms." - -; System Page -01000300="Sistema" -01000301="Integruoti 7-Zip į kontekstinį meniu " -01000302="Pakopinis kontekstinis meniu" -01000310="Kontekstinio meniu įrašai:" - -; Language Page -01000400="Kalba" -01000401="Kalba:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip komandos" -02000103="Atverti archyvą" -02000104="Atveria pasirinktą archyvą." -02000105="Išskleisti failus..." -02000106="Išskleidžia failus iš pasirinkto archyvo." -02000107="Įtraukti į archyvą..." -02000108="Įtraukia pasirinktus elementus į archyvą." -02000109="Patikrinti archyvą" -0200010A="Patikrina pasirinkto archyvo vientisumą." -0200010B="Išskleisti čia" -0200010C="Išskleidžia pasirinkto archyvo failus šiame aplanke." -0200010D="Išskleisti į {0}" -0200010E="Išskleidžia failus į paaplankį." -0200010F="Įtraukti į {0}" -02000110="Įtraukia pasirinktus elementus į archyvą." -02000111="Suglaudinti ir išsiųsti el. paštu..." -02000112="Suglaudina pasirinktus failus į archyvą ir išsiunčia jį el. paštu." -02000113="Suglaudinti į {0} ir išsiųsti el. paštu" -02000114="Suglaudina pasirinktus failus į archyvą ir išsiunčia jį el. paštu." - -02000140="" -02000141="" - -; Properties -02000203="Kelias" -02000204="Pavadinimas" -02000205="Plėtinys" -02000206="Aplankas" -02000207="Dydis" -02000208="Dydis archyve" -02000209="Atributai" -0200020A="Sukurta" -0200020B="Naudota" -0200020C="Pakeista" -0200020D="Vientisas" -0200020E="Komentaras" -0200020F="Šifruotas" -02000210="Perskyra prieš" -02000211="Perskyra paskui" -02000212="Žodynas" -02000213="CRC" -02000214="Tipas" -02000215="Anti" -02000216="Būdas" -02000217="Kompiuterio OS" -02000218="Bylų sistema" -02000219="Vartotojas" -0200021A="Grupė" -0200021B="Blokas" -0200021C="Komentaras" -0200021D="Pozicija" -0200021E="Aplankas" -0200021F="Aplankai" -02000220="Vylos" -02000221="Versija" -02000222="Dalis" -02000223="!!Multivolume" -02000224="!!Offset" -02000225="Nuorodos" -02000226="Blokai" -02000227="Dalys" - -; Status bar -02000301="Pasirinkta {0} objektų: " -02000302="{0} objektų" - -02000320="Failai:" -02000321="Aplankai:" -02000322="Dydis:" -02000323="Dydis suglaudinus:" -02000324="Archyvai:" - -; List Context Menu -02000401="&Stulpelių..." - -02000411="&Atverti" -02000412="&Išskleisti..." - -; ToolBar -02000501="Išskleisti" - -; Messages -02000601="Šio archyvo negalima atnaujinti." -02000602="Negalima atnaujinti archyvo „{0}“" -02000603="Negalima sukurti aplanko „{0}“" -02000604="Failas nėra palaikomas archyvas." -02000605="Klaida" -02000606="Per daug elementų" -02000607="Nėra programų, kurios būtų susietos su pateikto failo plėtiniu" -02000608="Klaidų nerasta" -02000609="Negalima atverti „{0}“ failo kaip archyvo" -0200060A="Negalima atverti šifruoto archyvo „{0}“. Neteisingas slaptažodis?" - -; Dialogs -02000702="Gerai" -02000705="&Taip" -02000707="T&aip Visiems" -02000709="&Ne" -0200070B="Ne v&isiems" - -02000710="Atšaukti" -02000711="&Atšaukti" -02000713="&Uždaryti" -02000714="Sustabdyti" -02000715="Iš naujo" - -02000720="Elektroninis žinynas" - -; Extract dialog -02000800="Išskleisti" -02000801="Iš&skleisti į:" -02000802="Slaptažodis" - -02000810="Kelio režimas" -02000811="Pilni keliai" -02000812="Dabartiniai keliai" -02000813="Jokių kelių" - -02000820="Perrašymo režimas" -02000821="Paklausti prieš perrašant" -02000822="Perrašyti neįspėjant" -02000823="Praleisti esančius failus" -02000824="Automatiškai pervadinti" -02000825="Automatiškai pervadinti esančius failus" - -02000830="Failai" -02000831="Pa&sirinktus failus" -02000832="Visus f&ailus" - -02000881="Nurodyti vietą išskleidžiamiesiems failams." - -02000890="Išskleidžiama" - -; Overwrite dialog -02000900="Failų pakeitimo patvirtinimas" -02000901="Paskirtame aplanke jau yra apdorojamas failas." -02000902="Ar norėtumėte pakeisti esančią failą" -02000903="šia failu?" - -02000911="A&utomatinis pervadinimas" - -02000982="{0} baitų" -02000983="pakeista" - -; Messages dialog -02000A00="Diagnostiniai pranešimai" - -02000A80="Pranešimas" - -02000A91="Nepalaikomas suglaudinimo metodas failui „{0}“." -02000A92="Duomenų klaida „{0}“. Failas pažeistas." -02000A93="CRC klaida „{0}“. Failas pažeistas." -02000A94="Duomenų klaida šifruotame faile „{0}“. Neteisingas slaptažodis?" -02000A95="CRC neatitikimas šifruotame faile „{0}“. Neteisingas slaptažodis?" - -; Password dialog -02000B00="Slaptažodžio įvedimas" -02000B01="Įveskite slaptažodį:" -02000B02="&Rodyti slaptažodį" -02000B03="Pakartokite slaptažodį:" -02000B10="Slaptažodžiai nesutampa" -02000B11="Slaptažodžiui naudokite tik lotyniškas raides, numerius bei specialiuosius simbolius (!, #, $, ...)" -02000B12="Slaptažodis yra per ilgas" - -; Progress dialog -02000C00="Vykdymas" -02000C01="Praėjęs laikas:" -02000C02="Likęs laikas:" -02000C03="Dydis:" -02000C04="Sparta:" -02000C05="Apdorota:" -02000C06="Suglaudinimo laipsnis:" - -02000C10="&Fone" -02000C11="&Pirminis procesas" -02000C12="&Laikinai sustabdyti" -02000C13="&Tęsti" - -02000C20="Laikinai sustabdyta" - -02000C30="Ar jūs esate tikri, kad norite atšaukti?" - -; Compress dialog -02000D00="Įtraukti į archyvą" -02000D01="&Archyvas:" -02000D02="Atna&ujinimo režimas:" -02000D03="Archyvo &formatas:" -02000D04="Glaudini&mo būdas:" -02000D05="Sukurti &vientisą archyvą" -02000D06="&Parametrai:" -02000D07="Nustatymai" -02000D08="Iš&sipakuojantis archyvas" -02000D09="Daugiagijiškumas" -02000D0A="Už&šifruoti failų pavadinimus" -02000D0B="Suglaudinimo &lygis:" -02000D0C="Žo&dyno dydis:" -02000D0D="Ž&odžio dydis:" -02000D0E="Atmintinės naudojimas suglaudinimui:" -02000D0F="Atmintinės naudojimas išskleidimui:" -02000D10="Šifravimas" -02000D11="Šifravimo metodas:" -02000D12="CPU gijų skaičius:" -02000D13="Vientiso bloko dydis:" -02000D14="Ne vientisas" -02000D15="Vientisas archyvas" -02000D16="Glaudinti dalijamus failus" - -02000D40="Skaidyti į dalis bai&tais:" -02000D41="Neteisingas dalies dydis" -02000D42="Nurodytas dalies dydis: {0} baitai.\nAr jūs esate įsitikinę, jog norite archyvą skaidyti į tokias dalis?" - -02000D81="Mažiausias" -02000D82="Normalus" -02000D83="Didžiausias" -02000D84="Greitas" -02000D85="Greitesnis" -02000D86="Smarkiausias" - -02000D90="Naršyti" - -02000DA1="Įtraukti ir pakeisti failus" -02000DA2="Atnaujinti ir įtraukti failus" -02000DA3="Atnaujinti esančius failus" -02000DA4="Sinchronizuoti failus" - -02000DB1="Visus failus" - -02000DC0="Glaudinama" - -; Columns dialog -02000E00="Stulpeliai" -02000E01="Pasirinkite stulpelius, kuriuos norėtumėte matyti aplanke. Naudokite mygtukus Aukštyn ir Žemyn keisdami stulpelių tvarką." -02000E02="Pasirinktas stulpelis turėtų būti" -02000E03="taškų &pločio." - -02000E10="&Aukštyn" -02000E11="Žemyn(&Z)" -02000E12="&Rodyti" -02000E13="&Slėpti" -02000E14="Nustatyti" - -02000E81="Antraštė" -02000E82="Plotis" - -; Testing -02000F90="tikrinama" - - -; File Manager - -03000000="7-Zip failų tvarkyklė" - -; Menu -03000102="&Failas" -03000103="K&eisti" -03000104="&Rodyti" -03000105="Įran&kiai" -03000106="&Elektroninis žinynas" -03000107="Mėgi&amiausi" - -; Failas -03000210="&Atverti" -03000211="Atverti v&iduje" -03000212="Atverti iš&orėje" -03000220="&Rodyti" -03000221="K&eisti" -03000230="Pervadi&nti" -03000231="&Kopijuoti į..." -03000232="&Perkelti į..." -03000233="Šalin&ti" -03000240="Savy&bės" -03000241="Kome&ntuoti" -03000242="Skaičiuoti kontrolinę sumą" -03000250="Sukurti aplanką" -03000251="Sukurti failą" -03000260="Išei&ti" -03000270="&Skaidyti failą..." -03000271="Jungti &failus..." - -; Edit -03000310="Atša&ukti" -03000311="Paka&rtoti" -03000320="Iškirp&ti" -03000321="&Kopijuoti" -03000322="Į&dėti" -03000323="Išt&rinti" -03000330="Pažymėti &viską" -03000331="Nužymėti viską" -03000332="Atv&irkštinis žymėjimas" -03000333="Pasirikti..." -03000334="Atžymėti..." -03000335="Pasirinkti pagal tipą" -03000336="Atžymėti pagal tipą" - -; View -03000410="Did&elės piktogramos" -03000411="&Mažos piktogramos" -03000412="&Sąrašas" -03000413="&Išsamiai" -03000420="Nerūšiuotos" -03000430="Atverti pagrindinį aplanką" -03000431="Lygiu aukščiau" -03000432="Aplankų istorija..." -03000440="&Atnaujinti" -03000449="Nepaisyti aplankų" -03000450="&2 skydeliai" -03000451="&Parankinės" -03000460="Archyvo parankinė" -03000461="Standartinė parankinė" -03000462="Dideli mygtukai" -03000463="Rodyti mygtukų tekstą" - -; Tools -03000510="&Nuostatos..." -03000511="&Spartos bandymas" - -; Help -03000610="&Turinys..." -03000620="&Apie 7-Zip..." - -; Favorites -03000710="&Pridėti katalogą prie mėgiamiausiųjų kaip" -03000720="Mėgiamiausias" - -; Options Dialog - -03010000="Nustatymai" - -; Plugins -03010100="Įskiepiai" -03010101="Įskie&piai:" -03010110="Nuostatos..." - -; Edit -03010200="Redaktorius" -03010201="R&edaktorius:" - -; System -03010300="Sistema" -03010302="Susieti 7-Zip su:" -03010310="Įskiepis" - -; Settings -03010400="Nustatos" -03010401="Rodyti „..“ failų sąraše" -03010402="Rodyti tikras failų piktogramas" -03010410="Rodyti sisteminį meniu" -03010420="&Žymėti visą eilutę" -03010421="Rodyti tinklelio linija&s" -03010430="&Kitoks žymėjimo būdas" -03010440="Naudoti didžiu&lius atmintinės puslapius" - -; Strings - -03020201="Kopijuoti" -03020202="Perkelti" -03020203="Kopijuoti į:" -03020204="Perkelti į:" -03020205="kopijuojama..." -03020206="perkeliama..." -03020207="Jūs negalite perkelti arba kopijuoti elementų šiuose aplankuose." -03020208="Veiksmas nepalaikomas." -03020209="Pasirinkite paskirties aplanką." - -03020210="Patvirtinkite failo šalinimą" -03020211="Patvirtinkite aplanko šalinimą" -03020212="Patvirtinkite kelių failų šalinimą" -03020213="Ar esate įsitikinę, jog norite pašalinti „{0}“?" -03020214="Ar esate įsitikinę, jog norite pašalinti „{0}“ aplanką ir visą jo turinį?" -03020215="Ar esate įsitikinę, jog norite pašalinti šiuos {0} elementus?" -03020216="šalinama..." -03020217="Klaida trinant failą ar aplanką" - -03020220="pervadinama..." -03020221="Klaida pervadinant failą ar aplanką" -03020222="Failų kopijavimo patvirtinimas" -03020223="Ar jūs esate įsitikinę, jog norite kopijuoti failus į archyvą?" - -03020230="Sukurti aplanką" -03020231="Aplanko pavadinimas:" -03020232="Naujas aplankas" -03020233="Klaida kuriant aplanką" - -03020240="Sukurti failą" -03020241="Failo pavadinimas:" -03020242="Naujas failas" -03020243="Klaida kuriant failą" - -03020250="Pasirinkti" -03020251="Nesirinkti" -03020252="Šablonas:" - -03020260="Aplankų istorija" - -03020280="Failas „{0}“ buvo pakeistas.\nAr norite ją atnaujinti archyve?" -03020281="Negalima atnaujinti failo\n„{0}“" -03020282="Negalima paleisti redaktoriaus." -03020283="Atidaroma..." - -03020290="Komentaras" -03020291="&Komentaras:" - -030202A0="Sistema" - -03020300="Kompiuteris" -03020301="Tinklas" - -03020400="Glaudinti" -03020401="Išskleisti" -03020402="Bandyti" - -03020420="Kopijuoti" -03020421="Perkelti" -03020422="Šalinti" -03020423="Informacija" - -03020500="Skaidyti failą" -03020501="&Skaidyti į:" -03020510="skaidoma..." -03020520="Skaidymo patvirtinimas" -03020521="Ar jūs esate įsitikinę, jog norite failą skaidyti į {0} dalis?" -03020522="Dalies dydis privalo būti mažesnis už dalijamo failo dydį" - -03020600="Sujungti failus" -03020601="&Sujungti į:" -03020610="sujungiami failai..." -03020620="Pažymėkite tik pirmą failą" - -03020710="kontrolinės sumos skaičiavimas..." -03020720="Kontrolinės sumos informacija" -03020721="Duomenų CRC kontrolinė suma:" -03020722="Duomenų ir failų pavadinimų CRC kontrolinė suma:" - -03020800="skenuojama..." - -03020900="Nuostatos" - -; Computer -03031100="Visas dydis" -03031101="Laisva vieta" -03031102="Blokinio dydis" -03031103="Pavadinimas" - -; Network -03031200="Vietinis pavadinimas" -03031201="Tiekėjas" - -; Benchmark Dialog - -03080000="Spartos bandymas" -03080001="Atmintinės naudojimas:" -03080002="Suglaudinama" -03080003="Išskleidžiama" -03080004="Sparta" -03080005="Vertinimas" -03080006="Galutinis vertinimas" -03080007="Dabartinis" -03080008="Vidutinis" -03080009="Kartai:" -0308000A="Klaidos:" -0308000B="CPU naudojimas" -0308000C="Reitingas / naudojimas" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/lv.txt b/External/7-Zip/Lang/lv.txt deleted file mode 100644 index aada3c9ad..000000000 --- a/External/7-Zip/Lang/lv.txt +++ /dev/null @@ -1,454 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.10 beta -; Translated by Armands Radzuška -; -; -; -; - -00000000="Latvian" -00000001="Latviešu" -00000002="38" - -; 7-Zip Configuration - -; Title -01000000="7-Zip konfigurācija" - -; Info Page -01000100="Par 7-Zip" -01000103="7-Zip ir bezmaksas programma, tomēr, reģistrējoties jūs varat 7-Zip izstrādāšanu atbalstīt." -01000105="&Reģistrēties" - -; Folders Page -01000200="Mapes" -01000210="&Darba mape" -01000211="&Sistēmas pagaidfailu mape" -01000212="&Tekošā" -01000213="&Noteikt:" -01000214="&Izmantot tikai maināmajiem nesējiem" - -01000281="Norādiet vietu arhīvu pagaidfailiem." - -; System Page -01000300="Sistēma" -01000301="&Integrēt 7-Zip Windows vides kontekstizvēlē" -01000302="&Kaskādveida kontekstizvēle" -01000310="Kontekstizvēles elementi:" - -; Language Page -01000400="Valoda" -01000401="Valoda:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip komandas" -02000103="Atvērt arhīvu" -02000104="Atver izvēlēto arhīvu." -02000105="Izvilkt failus..." -02000106="Izvelk failus no izvēlētā arhīva." -02000107="Ielikt arhīvā..." -02000108="Pievieno izvēlētās vienības arhīvam." -02000109="Pārbaudīt arhīvu" -0200010A="Pārbauda izvēlētā arhīva veselumu." -0200010B="Izvilkt šeit" -0200010C="Failus no izvēlētā arhīva izvelk patreizējā mapē." -0200010D="Izvilkt {0} mapē" -0200010E="Izvelk failus apakšmapē." -0200010F="Ielikt {0}" -02000110="Ieliek izvēlētos elementus arhīvā." -02000111="Saspiest, sūtīt pa e-pastu..." -02000112="Ieliek izvēlētās vienības arhīvā un sūta arhīvu pa e-pastu." -02000113="Saspiest {0}, sūtīt pa e-pastu" -02000114=" Ieliek izvēlētās vienības arhīvā un sūta arhīvu pa e-pastu." - -02000140="" -02000141="" - -; Properties -02000203="Ceļš" -02000204="Nosaukums" -02000205="Paplašinājums" -02000206="Mape" -02000207="Lielums" -02000208="Saspiests" -02000209="Atribūti" -0200020A="Izveidots" -0200020B="Atvērts" -0200020C="Pārveidots" -0200020D="Blīvs" -0200020E="Piezīmes" -0200020F="Šifrēts" -02000210="Dalīts pirms" -02000211="Dalīts pēc" -02000212="Vārdnīca" -02000213="CRC" -02000214="Veids" -02000215="Anti" -02000216="Paņēmiens" -02000217="Sistēma" -02000218="Failu sistēma" -02000219="Lietotājs" -0200021A="Grupa" -0200021B="Bloks" -0200021C="Piezīmes" -0200021D="Pozīcija" - -; Status bar -02000301="Iezīmēts(i) {0} objekts(i)" -02000302="{0} objekts(i)" - -; List Context Menu -02000401="&Stabiņi..." - -02000411="&Atvērt" -02000412="&Izvilkt..." - -; ToolBar -02000501="Izvilkšana" - -; Messages -02000601="Šis arhīvs neatbalsta pārveidošanu." -02000602="Arhīvu {0} neizdevās pārveidot." -02000603="Mapi '{0}' neizdevās izveidot." -02000604="Fails nav atbalstīts arhīvs." -02000605="Kļūda" -02000606="Par daudz vienību." -02000607="Ar doto faila paplašinājumu neviena programma nav saistīta." -02000608="Kļūdu nav." - -; Dialogs -02000702="&Labi" -02000705="&Jā" -02000707="Jā &visiem" -02000709="&Nē" -0200070B="Nē v&isiem" - -02000710="&Atcelt" -02000711="&Atcelt" -02000713="Aiz&vērt" -02000714="Stop" -02000715="Pārstartēt" - -02000720="&Rokasgrāmata" - -; Extract dialog -02000800="Izvilkšana" -02000801="&Izvilkt uz:" -02000802="&Parole" - -02000810="Ceļi" -02000811="Pilni &ceļu nosaukumi" -02000812="Patreizējie ceļu &nosaukumi" -02000813="&Bez ceļu nosaukumiem" - -02000820="Pārrakstīšana" -02000821="&Jautāt pirms pārrakstīšanas" -02000822="Pārra&kstīt bez jautāšanas" -02000823="I&zlaist esošos failus" -02000824="A&utopārdēvēšana" -02000825="Automātiski pārdēvēt esošos failu" - -02000830="Faili" -02000831="&Iezīmētie faili" -02000832="&Visi faili" - -02000881="Norādiet vietu izvelkamiem failiem." - -02000890="Izvilkšana" - -; Overwrite dialog -02000900="Apstipriniet faila aizvietošanu" -02000901="Mērķa mape jau satur apstrādājamo failu." -02000902="Vai vēlaties aizvietot esošo failu" -02000903="ar šo?" - -02000911="Autopārdēvēšana" - -02000982="{0} baiti" -02000983="pārveidots" - -; Messages dialog -02000A00="Diagnostikas paziņojumi" - -02000A80="Paziņojums" - -02000A91="Neatbalstīts saspiešanas paņēmiens '{0}' failam." -02000A92="Datu kļūda '{0}'. Fails ir bojāts." -02000A93="CRC kļūda '{0}'. Fails ir bojāts." - -; Password dialog -02000B00="Paroles ievadīšana" -02000B01="Ievadiet paroli:" -02000B02="Par&ole redzama" - -; Progress dialog -02000C00="Process" -02000C01="Pagājušais laiks:" -02000C02="Atlikušais laiks:" -02000C03="Lielums:" -02000C04="Ātrums:" - -02000C10="&Fonā" -02000C11="&Priekšplānā" -02000C12="Pa&uze" -02000C13="&Turpināt" - -02000C20="Pauzēts" - -02000C30="Vai piekrītat pārtraukt šo darbību?" - -; Compress dialog -02000D00="Pievienošana arhīvam" -02000D01="Ar&hīvs:" -02000D02="Pār&veidošanas režīms:" -02000D03="Arhīva &formāts:" -02000D04="&Saspiešanas paņēmiens:" -02000D05="Izveidot &blīvo arhīvu" -02000D06="Parame&tri:" -02000D07="&Uzstādījumi" -02000D08="Izveidot SF&X arhīvu" -02000D09="&Multiplūsmas" -02000D0A="Šifrēt failu &nosaukumus" -02000D0B="&Saspiešanas līmenis:" -02000D0C="&Vārdnīcas lielums:" -02000D0D="Vār&da lielums:" -02000D0E="Atmiņa arhivēšanai:" -02000D0F="Atmiņa atarhivēšanai:" - -02000D40="&Dalīt sējumos, baitos:" - -02000D81="Uzkrāšana nesaspiežot" -02000D82="Parastais" -02000D83="Maksimālā saspiešana" -02000D84="Ātrais" -02000D85="Ātrākais" -02000D86="Ultra" - -02000D90="Pārlūkošana" - -02000DA1="Pievienot un aizvietot failus" -02000DA2="Atjaunināt un pievienot failus" -02000DA3="Atjaunināt esošos failus" -02000DA4="Sinhronizēt failus" - -02000DB1="Visi faili" - -02000DC0="saspiešana" - -; Columns dialog -02000E00="Stabiņi" -02000E01="Atzīmējiet stabiņus, ko Jūs vēlaties redzēt šai skatā. Izmantojiet pogas „Uz augšu” un „Uz leju” stabiņu pārkārtošanai pēc savas gaumes." -02000E02="Iezīmētajiem stabiņiem jābūt" -02000E03="pikseļus &platiem." - -02000E10="Uz a&ugšu" -02000E11="Uz &leju" -02000E12="Pa&rādīt" -02000E13="Pa&slēpt" -02000E14="Uzstādīt" - -000E81="Nosaukums" -02000E82="Platums" - -; Testing -02000F90="Pārbaude" - - -; File Manager - -03000000="7-Zip failu pārzinis" - -; Menu -03000102="&Fails" -03000103="&Labošana" -03000104="&Izskats" -03000105="&Rīki" -03000106="&Palīdzība" -03000107="Ie&cienītās" - -; File -03000210="&Atvērt" -03000211="Atvērt &iekšpusē" -03000212="Atvērt ārp&usē" -03000220="Ap&skate" -03000221="&Labot" -03000230="Pā&rdēvēt" -03000231="&Kopēt uz..." -03000232="Pār&vietot uz..." -03000233="&Dzēst" -03000240="Īpašī&bas" -03000241="&Piezīmes" -03000250="Izveidot &mapi" -03000251="Izveidot &failu" -03000260="&Beigt" -03000270="&Sadalīt failu..." -03000271="Ap&vienot failus..." - -; Edit -03000310="&Atcelt" -03000311="At&jaunot" -03000320="&Izgriezt" -03000321="&Kopēt" -03000322="Ieviet&ot" -03000323="&Dzēst" -03000330="Iezīmēt &visu" -03000331="Atcelt vis&u" -03000332="I&nvertēt iezīmējumu" -03000333="Ie&zīmēt..." -03000334="&Atcelt..." -03000335="I&ezīmēt pēc tipa" -03000336="A&tcelt pēc tipa" - -; View -03000410="&Lielas ikonas" -03000411="&Mazas ikonas" -03000412="&Saraksts" -03000413="Sī&kāk" -03000420="&Nešķirot" -03000430="&Atvērt saknes mapi" -03000431="Līmeni &uz augšu" -03000432="Mapju &vēsture..." -03000440="&Pārlasīt" -03000450="&2 paneļi" -03000451="&Rīku joslas" -03000460="Arhīva rīku josla" -03000461="Standarta rīku josla" -03000462="Lielas pogas" -03000463="Parādīt pogu tekstu" - -; Tools -03000510="&Uzstādījumi..." -03000511="&Darbspējas pārbaude" - -; Help -03000610="&Rokasgrāmatas saturs..." -03000620="&Par 7-Zip..." - -; Favorites -03000710="&Pievienot mapi iecienītajām kā" -03000720="Iecienītās" - -; Options Dialog - -03010000="Uzstādījumi" - -; Plugins -03010100="Iespraudņi" -03010101="Iespraudņi:" -03010110="&Uzstādījumi..." - -; Edit -03010200="Labošana" -03010201="&Labošanas programma:" - -; System -03010300="Sistēma" -03010302="Piesaistīt 7-Zip pie:" -03010310="Iespraudnis" - -; Settings -03010400="Uzstādījumi" -03010401="Parādīt \"..\" &vienību" -03010402="Parādīt īstās &failu ikonas" -03010410="Parādīt &sistēmas izvēli" -03010420="&Pilnas rindas iezīmēšana" -03010421="Parādīt at&dalošās līnijas" - -; Strings - -03020201="Kopēt" -03020202="Pārvietot" -03020203="Kopēt uz:" -03020204="Pārvietot uz:" -03020205="Kopēšana..." -03020206="Pārvietošana..." -03020207="Vienības uz šīm mapēm nevar kopēt vai pārvietot." -03020208="Darbība nav atbalstīta." - -03020210="Faila dzēšanas apstiprinājums" -03020211="Mapes dzēšanas apstiprinājums" -03020212="Vairāku failu dzēšanas apstiprinājums" -03020213="Vai piekrītat '{0}' dzēšanai?" -03020214="Vai piekrītat mapes '{0}' un visa tās satura dzēšanai?" -03020215="Vai piekrītat šo {0} vienību dzēšanai?" -03020216="Dzēšana..." -03020217="Faila vai mapes dzēšanas kļūda" - -03020220="Pārdēvēšana..." -03020221="Faila vai mapes pārdēvēšanas kļūda" - -03020230="Mapes izveidošana" -03020231="Mapes nosaukums:" -03020232="Jauna mape" -03020233="Mapes izveidošanas kļūda" - -03020240="Faila izveidošana" -03020241="Faila nosaukums:" -03020242="Jauns fails" -03020243="Faila izveidošanas kļūda" - -03020250="Iezīmēšana" -03020251="Iezīmējuma atcelšana" -03020252="Šablons:" - -03020260="Mapju vēsture" - -03020280="Fails '{0}' ir pārveidots.\nVai vēlaties to atjaunināt arī arhīvā?" -03020281="Failu nav iespējams uzlabot\n'{0}'" -03020282="Nav iespējams palaist labošanas programmu." -03020283="Atvēršana..." - -03020290="Piezīmes" -03020291="&Piezīmes:" - -030202A0="Sistēma" - -03020300="Dators" -03020301="Tīkls" - -03020400="Ievietot" -03020401="Izvilkt" -03020402="Pārbaude" - -03020420="Kopēt" -03020421="Ppārvietot" -03020422="Dzēst" -03020423="Info" - -03020500="Sadalīt failu" -03020501="&Dalīt uz:" -03020510="Dalīšana..." - -03020600="Apvienot failus" -03020601="&Apvienot uz:" -03020610="Apvienošana..." - -; Computer -03031100="Tilpums" -03031101="Brīvā vieta" -03031102="Klāstera lielums" -03031103="Nosaukums" - -; Network -03031200="Lokālais nosaukums" -03031201="Provaiders" - -; Benchmark Dialog - -03080000="Darpspējības pārbaude" -03080001="Atmiņas pielietojums:" -03080002="Arhivēšana" -03080003="Atarhivēšana" -03080004="Ātrums" -03080005="Vērtējums" -03080006="Kopējais vērtējums" -03080007="Patreizējais" -03080008="Rezultējošais" -03080009="Izdošanās:" -0308000A="Kļūdas:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/mk.txt b/External/7-Zip/Lang/mk.txt deleted file mode 100644 index f0c6525b7..000000000 --- a/External/7-Zip/Lang/mk.txt +++ /dev/null @@ -1,454 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.09 beta -; Translated by Gabriel Stojanoski -; Преведено од Габриел Стојаноски -; -; -; - -00000000="Macedonian" -00000001="Македонски" -00000002="47" - -; 7-Zip Подесување - -; Title -01000000="7-Zip Подесување" - -; Info Page -01000100="За 7-Zip" -01000103="7-Zip е бесплатен архивер. Меѓутоа, вие можете да дадете поддршка на понатамошното развивање на 7-Zip со вашето регистрирање." -01000105="Регистрирај" - -; Folders Page -01000200="Директориуми" -01000210="&Работен директориум" -01000211="&Системски привремен директориум" -01000212="&Моментален" -01000213="&Одреди:" -01000214="Само за преносни уреди" - -01000281="Одреди локација за привремените архивски датотеки." - -; System Page -01000300="Систем" -01000301="Интегрирај го 7-Zip во додатно мени" -01000302="Каскадно додатно мени" -01000310="Во додатното мени:" - -; Language Page -01000400="Јазик" -01000401="Јазик:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip команди" -02000103="Отвори архива" -02000104="Ја отвора селектираната архива." -02000105="Отпакувај датотеки..." -02000106="Отпакува датотеки од селектираната архива." -02000107="Додади во Архива..." -02000108="Ги додава селектираните датотеки во архива." -02000109="Тестирај архива" -0200010A="Ја тестира селектираната архива." -0200010B="Отпакувај овде" -0200010C="Отпакува датотеки од избраната архива во моменталниот директориум." -0200010D="Отпакувај во {0}" -0200010E="Отпакува датотеки во поддиректориум." -0200010F="Додади во {0}" -02000110="Ги додава одредените датотеки во архива." -02000111="Компресирај и прати на e-mail..." -02000112="Ги компресира датотеките во архива и архивата ја испраќа преку e-mail." -02000113="Компресирај во {0} и испрати" -02000114="Ги компресира датотеките во архива и архивата ја испраќа преку e-mail." - -02000140="<Директориум>" -02000141="<Архива>" - -; Properties -02000203="Патека" -02000204="Име" -02000205="Екстензија" -02000206="Директориум" -02000207="Големина" -02000208="Пакувана Големина" -02000209="Атрибути" -0200020A="Креирано" -0200020B="Пристапено" -0200020C="Променето" -0200020D="Целосна" -0200020E="Објаснета" -0200020F="Енкриптирана" -02000210="Подели Пред" -02000211="Подели После" -02000212="Речник" -02000213="CRC" -02000214="Тип" -02000215="Анти" -02000216="Метод" -02000217="Оперативен Систем" -02000218="Датотечен Систем" -02000219="Корисник" -0200021A="Група" -0200021B="Блок" -0200021C="Коментар" -0200021D="Позиција" - -; Status bar -02000301="{0} објект(и) избрано" -02000302="{0} објект(и)" - -; List Context Menu -02000401="&Колони..." - -02000411="&Отвори" -02000412="От&пакувај..." - -; ToolBar -02000501="Отпакувај" - -; Messages -02000601="Оваа операција не е поддржана за овој тип на архива." -02000602="Не е можно обновување на архивата {0}" -02000603="Не е можно креирање на директориумот '{0}'" -02000604="Датотеката не е поддржана архива." -02000605="Грешка" -02000606="Премногу објекти" -02000607="Нема програма придружена со оваа екстензија" -02000608="Нема грешки" - -; Dialogs -02000702="Ок" -02000705="&Да" -02000707="Да &Сите" -02000709="&Не" -0200070B="Не Н&иедна" - -02000710="Откажи" -02000711="&Откажи" -02000713="&Затвори" -02000714="Стоп" -02000715="Рестартирај" - -02000720="Помош" - -; Extract dialog -02000800="Отпакувај" -02000801="Отпакувај &во:" -02000802="Лозинка" - -02000810="Патеки" -02000811="Целосна патека" -02000812="Моментална патека" -02000813="Без патека" - -02000820="Презапишување" -02000821="Прашај пред да презапишеш" -02000822="Презапиши без прашување" -02000823="Изостави постоечки датотеки" -02000824="Автоматски преименувај" -02000825="Автоматски преименувај постоечки датотеки" - -02000830="Датотеки" -02000831="&Избрани датотеки" -02000832="&Сите датотеки" - -02000881="Одреди локација за отпакуваните датотеки." - -02000890="Отпакување" - -; Overwrite dialog -02000900="Потврди Замена на Датотеки" -02000901="Конечниот директориум веќе ја содржи датотеката." -02000902="Дали сакате да ја замените постоечката датотека" -02000903="со оваа?" - -02000911="&Автоматски преименувај" - -02000982="{0} бајти" -02000983="променета на" - -; Messages dialog -02000A00="Дијагноза" - -02000A80="Порака" - -02000A91="Неподдржан метод за компресија за '{0}'." -02000A92="Грешка во податоците во '{0}'. Датотеката е оштетена." -02000A93="CRC грешка во '{0}'. Датотеката е оштетена." - -; Password dialog -02000B00="Внеси лозинка" -02000B01="Внеси лозинка:" -02000B02="&Прикажи ја лозинката" - -; Progress dialog -02000C00="Процесирај" -02000C01="Поминато време:" -02000C02="Преостанато време:" -02000C03="Големина:" -02000C04="Брзина:" - -02000C10="По&задина" -02000C11="&Напред" -02000C12="&Пауза" -02000C13="П&родолжи" - -02000C20="Паузирано" - -02000C30="Дали сигурно сакате да откажете?" - -; Compress dialog -02000D00="Додади во архива" -02000D01="&Архива:" -02000D02="&Додавање:" -02000D03="&Формат на Архива:" -02000D04="&Метод на компресија:" -02000D05="Креирај &Целосна архива" -02000D06="&Параметри:" -02000D07="Опции" -02000D08="Креирај SFX ар&хива" -02000D09="Multi-threading" -02000D0A="&Енкриптирај ги имињата" -02000D0B="&Ниво на компресија:" -02000D0C="Големина на &речникот:" -02000D0D="Големина на &зборот:" -02000D0E="Искорист мемор за компрес:" -02000D0F="Искорист мемор за декомпрес:" - -02000D40="&Подели на делови, бајти:" - -02000D81="Спакувај" -02000D82="Нормално" -02000D83="Максимално" -02000D84="Брзо" -02000D85="Најбрзо" -02000D86="Ултра" - -02000D90="Барај" - -02000DA1="Додади и замени датотеки" -02000DA2="Обнови и додади датотеки" -02000DA3="Обнови ги постоечките датотеки" -02000DA4="Синхронизирај ги датотеките" - -02000DB1="Сите Датотеки" - -02000DC0="Компресирање" - -; Columns dialog -02000E00="Колони" -02000E01="Селектирај ги колоните што сакаш да бидат видливи во овој директориум. Употреби ги Нагоре и Надолу копчињата за да ги преуредиш колоните." -02000E02="Избраната колона треба да биде" -02000E03="пиксели &широка." - -02000E10="На&горе" -02000E11="На&долу" -02000E12="&Прикажи" -02000E13="&Сокриј" -02000E14="Стави" - -02000E81="Име" -02000E82="Ширина" - -; Testing -02000F90="Тестирање" - - -; File Manager - -03000000="7-Zip Менаџер" - -; Menu -03000102="&Датотека" -03000103="&Уреди" -03000104="&Изглед" -03000105="&Алатки" -03000106="&Помош" -03000107="&Омилени" - -; File -03000210="&Отвори" -03000211="Отвори &Внатре" -03000212="Отвори &Надвор" -03000220="&Поглед" -03000221="&Уреди" -03000230="&Преименувај" -03000231="&Копирај Во..." -03000232="&Премести Во..." -03000233="&Избриши" -03000240="&Карактеристики" -03000241="К&оментар" -03000250="Креирај Директориум" -03000251="Креирај Датотека" -03000260="&Излези" -03000270="&Подели датотека..." -03000271="Ком&бинирај датотеки..." - -; Edit -03000310="&Undo" -03000311="&Redo" -03000320="Пре&сечи" -03000321="&Копирај" -03000322="&Залепи" -03000323="&Избриши" -03000330="Селектирај &Се" -03000331="Деселектирај Се" -03000332="&Обратна Селекција" -03000333="Селектирај..." -03000334="Деселектирај..." -03000335="Селектирај по Тип" -03000336="Деселектирај по Тип" - -; View -03000410="&Големи Икони" -03000411="&Мали Икони" -03000412="&Листа" -03000413="&Детали" -03000420="Неподредени" -03000430="Отвори го основниот директориум" -03000431="Едно Ниво Нагоре" -03000432="Историја на Директориумите..." -03000440="&Обнови" -03000450="&2 Панели" -03000451="&Алатници" -03000460="Алатница на Архивата" -03000461="Стандардна Алатница" -03000462="Големи Копчиња" -03000463="Текст На Копчињата" - -; Tools -03000510="&Опции..." -03000511="&Тест" - -; Help -03000610="&Содржина..." -03000620="&За 7-Zip..." - -; Favorites -03000710="&Додади го директориумот во Омилени" -03000720="Забелешки" - -; Options Dialog - -03010000="Опции" - -; Plugins -03010100="Плагини" -03010101="&Плагини:" -03010110="Опции..." - -; Edit -03010200="Едитор" -03010201="&Едитор:" - -; System -03010300="Систем" -03010302="Придружи го 7-Zip со:" -03010310="Плагин" - -; Settings -03010400="Подесувања" -03010401="Прикажи \"..\" предмет" -03010402="Прикажи вистински икони" -03010410="Прикажи системско мени" -03010420="&Селектирај &цел ред" -03010421="Прикажи &мрежа" - -; Strings - -03020201="Копирај" -03020202="Премести" -03020203="Копирај Во:" -03020204="Премести Во:" -03020205="Копирање..." -03020206="Преместување..." -03020207="Не е можно преместување или копирање на предмети од вакви директориуми." -03020208="Постапката не е поддржана." - -03020210="Потврдете го Бришењето на Датотеката" -03020211="Потврдете го Бришењето на Директориумот" -03020212="Потврдете го бришењето на повеќе датотеки" -03020213="Дали сте сигурни за бришењето на '{0}'?" -03020214="Дали сте сигурни за бришењето на директориумот '{0}' и неговата содржина?" -03020215="Дали сте сигурни за бришењето на овие {0} датотеки?" -03020216="Бришење..." -03020217="Грешка при бришењето на Датотеката или Директориумот" - -03020220="Преименување..." -03020221="Грешка при преименувањето на Датотеката или Директориумот" - -03020230="Креирај Директориум" -03020231="Име на Директориумот:" -03020232="Нов Директориум" -03020233="Грешка при креирањето на Директориумот" - -03020240="Креирај датотека" -03020241="Име на Датотеката:" -03020242="Нова датотека" -03020243="Грешка при креирањето на датотеката" - -03020250="Селектирај" -03020251="Деселектитај" -03020252="Маскирај:" - -03020260="Историја на Директориумите" - -03020280="Датотеката '{0}' е модифицирана.\nДали сакате да ја обновите во архивата?" -03020281="Не е можно обновување на датотеката\n'{0}'" -03020282="Грешка при стартување на Едиторот." -03020283="Отворање..." - -03020290="Коментар" -03020291="&Коментар:" - -030202A0="Систем" - -03020300="Компјутер" -03020301="Мрежа" - -03020400="Додади" -03020401="Отпакувај" -03020402="Тестирај" - -03020420="Копирај" -03020421="Премести" -03020422="Избриши" -03020423="Инфо" - -03020500="Подели датотека" -03020501="&Подели на:" -03020510="Делење..." - -03020600="Состави Датотеки" -03020601="&Состави на:" -03020610="Составување..." - -; Computer -03031100="Вкупна Големина" -03031101="Слободен Простор" -03031102="Голем на Кластерите" -03031103="Етикета" - -; Network -03031200="Име" -03031201="Провајдер" - -; Benchmark Dialog - -03080000="Тест" -03080001="Искорист Меморија:" -03080002="Компресирање" -03080003="Декомпресирање" -03080004="Брзина" -03080005="Проценка" -03080006="Вкупна Проценка" -03080007="Моментално" -03080008="Резултат" -03080009="Поминато:" -0308000A="Грешки:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/mn.txt b/External/7-Zip/Lang/mn.txt deleted file mode 100644 index c459520f4..000000000 --- a/External/7-Zip/Lang/mn.txt +++ /dev/null @@ -1,459 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 3.12 -; Translated by Bayar -; Update and Spelling corrected Bayarsaikhan -; -; -; - -00000000="Mongolian" -00000001="Монгол хэл" -00000002="80" - -; 7-Zip Configuration - -; Title -01000000="7-Zip тохируулга" - -; Info Page -01000100="7-Zip-ийн тухай" -01000103="7-Zip бол үнэгүй програм. Гэлээ ч та 7-Зип-д бүртгүүлэн хөгжүүлэгчдийг дэмжиж болно. Бүртгүүлсэн хэрэглэгчид техникийн дэмжлэг авах болно." -01000104="Дэмжлэг" -01000105="Бүртгүүлэх" - -; Folders Page -01000200="Хавтсууд" -01000210="&Ажлын хавтас" -01000211="&Систем\завсрын хавтас" -01000212="&Одоогийн" -01000213="&Тодорхойлсон:" -01000214="Зөвхөн зөөврийн төхөөрөмж хэрэглэх" - -01000281="Завсрын архив файл үүсгэх байрлалыг тодорхойл." - -; System Page -01000300="Систем" -01000301="7-Зип-ийг шелл контекст цэстэй нийлүүлэх" -01000302="Контекст цэсийг цувуулан харуул" -01000310="Контекст цэсийн төрлүүд:" - -; Language Page -01000400="Хэл" -01000401="Хэл:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Зип" -02000102="7-Зип тушаалууд" -02000103="Архив нээх" -02000104="Сонгосон архив нээх." -02000105="Файлуудыг задал..." -02000106="Сонгосон архиваас файлыг задал." -02000107="Архивт нэм..." -02000108="Сонгосон зүйлүүдээ архивт нэм." -02000109="Архивийн шалгалт" -0200010A="Сонгогдсон архивийн бүтэн байдлыг шалгах." -0200010B="Энд задал" -0200010C="Сонгогдсон архиваас одооны хавтаст файлыг задал." -0200010D="{0} руу задал" -0200010E="Ерөнхий хавтаст файлыг задлах." -0200010F="{0} рүү нэм" -02000110="Сонгосон зүйлүүдээ архивт нэм." -02000111="Шахах ба Шуудандах..." -02000112="Сонгогдсон зүйлүүдийг шахаад Шуудангаар илгээх" -02000113="{0} рүү шахах ба Шууданд" -02000114="Сонгогдсон зүйлүүдийг шахаад архивийг Шуудангаар илгээх" - -02000140="<Хавтас>" -02000141="" - -; Properties -02000203="Зам" -02000204="Нэр" -02000205="Өргөтгөл" -02000206="Хавтас" -02000207="Хэмжээ" -02000208="Багцалсан хэмжээ" -02000209="Чанар" -0200020A="Үүсгэсэн" -0200020B="Хандсан" -0200020C="Өөрчилсөн" -0200020D="Баталгаатай" -0200020E="Тайлбар хийгдсэн" -0200020F="Нууцлагдсан" -02000210="Өмнө хуваасан" -02000211="Дараа хуваасан" -02000212="Толь бичиг" -02000213="CRC" -02000214="Төрөл" -02000215="Эсрэг" -02000216="Арга" -02000217="Хост ҮС" -02000218="Файл систем" -02000219="Хэрэглэгч" -0200021A="Бүлэг" -0200021B="Түгжих" -0200021C="Тайлбар" -0200021D="Байрлал" - -; Status bar -02000301="{0} зүйл(үүд) сонгогдсон байна" -02000302="{0} зүйл(үүд)" - -; List Context Menu -02000401="&Баганууд..." - -02000411="&Нээх" -02000412="&Задлах..." - -; ToolBar -02000501="Задлах" - -; Messages -02000601="Дэмжигдээгүй архивийг задлах шинэчлэлт хийх." -02000602="Архив шинэчилж чадсангүй {0}" -02000603="Хавтас үүсгэж чадахгүй '{0}'" -02000604="Дэмжигдээгүй файлын архив байна." -02000605="Алдаа" -02000606="Дэндүү их юм байна" -02000607="Файлын нэрийн өргөтгөлтөй холдбогдсон програм байхгүй байна даа" -02000608="Алдаа алга байна" - -; Dialogs -02000702="За" -02000705="&Тийм" -02000707="Бүг&д тийм" -02000709="&Үгүй" -0200070B="Бүгд ү&гүй" - -02000710="Болих" -02000711="&Болих" -02000713="&Хаах" -02000714="Зогс" -02000715="Дахин ачаалла" - -02000720="Тусламж" - -; Extract dialog -02000800="Задал" -02000801="З&адлах газар:" -02000802="Нууц үг" - -02000810="Замын горим" -02000811="Бүтэн замын нэр" -02000812="Одоогийн замын нэр" -02000813="Параметр алга" - -02000820="Давхарлаж бичих горим" -02000821="Давхарлаж бичхээсээ өмнө асуух" -02000822="Асуултгүй давхарлаж бичих" -02000823="Байгаа файлыг алгасах" -02000824="Автоматаар нэр солих" -02000825="Байвал нэрийг нь солих" - -02000830="Файлууд" -02000831="&Сонгогдсон файлууд" -02000832="&Бүх файлууд" - -02000881="Задалсан файлуудын байрлалыг тодорхойл." - -02000890="Задалж байна..." - -; Overwrite dialog -02000900="Файл дахин байрлуулахыг батлах" -02000901="Хавтас файлыг агуулсан байна." -02000902="Байгаа файлуудыг дахин байрлуулах уу" -02000903="Энүүнтэй юу?" - -02000911="A&втомат нэр солих" - -02000982="{0} битүүд" -02000983="Өөрчлөлт идэвхжилттэй" - -; Messages dialog -02000A00="Шинжилгээний зурвас" - -02000A80="Зурвас" - -02000A91="Дараах файлд шахалтын арга дэмжигдээгүй байна '{0}'." -02000A92="'{0}'өгөгдлийн алдаа. Файл эвдэрсэн байна." -02000A93="'{0}'CRC бүтсэнгүй. Файл эвдэрсэн байна." - -; Password dialog -02000B00="Нууц үгээ оруулах" -02000B01="Нууц үгээ оруулах:" -02000B02="&Нууц үг харуулах" - -; Progress dialog -02000C00="Үйл явц" -02000C01="Өнгөрсөн хугацаа:" -02000C02="Үлдсэн хугацаа:" -02000C03="Хэмжээ:" -02000C04="Хурд:" - -02000C10="&Ар талд" -02000C11="&Өмнө тал" -02000C12="&Түр зогс" -02000C13="&Үргэлжлүүл" - -02000C20="Түр зогслоо" - -02000C30="Та үнэхээр болих гэж байна уу?" - -; Compress dialog -02000D00="Архивт нэм" -02000D01="&Aрхив:" -02000D02="&Шинэчлэх горим:" -02000D03="Архив &өргөтгөл:" -02000D04="Шахах &арга:" -02000D05="Баталгаатай архив үүсгэх" -02000D06="&Параметерүүд:" -02000D07="Сонголтууд" -02000D08="SF&X архив үүсгэх" -02000D09="Олон-Бодлогын" -02000D0A="&Файлын нэрүүдийг нууцал" -02000D0B="Шахалтын &төвшин:" -02000D0C="&Толь бичгийн хэмжээ:" -02000D0D="&Үгийн хэмжээ:" -02000D0E="Шахаж байгаа санах ойн хэрэглээ:" -02000D0F="Задалж байгаа санах ойн хэрэглээ:" - -02000D40="Эзлэхүүн рүү хуваах, битүүд:" - -02000D81="Хадгалах" -02000D82="Энгийн" -02000D83="Дээд хэмжээгээр" -02000D84="Хурдан" -02000D85="Дээд хурданаар" -02000D86="Ултра" - -02000D90="Нэгжих" - -02000DA1="Нэмэх ба дахин байрлуулах" -02000DA2="Шинэчлэх ба дахин байрлуулах" -02000DA3="Байгаа файлуудыг дахин унших" -02000DA4="Файлуудыг тааруулах" - -02000DB1="Бүх файлууд" - -02000DC0="Шахаж байна" - -; Columns dialog -02000E00="Баганууд" -02000E01="Энэ хавтаст хийх багануудаа шалгана уу. Дээш оч доош оч товчлуураар та багануудаа янзалж болно." -02000E02="Сонгосон багана чинь ийм байх ёстой" -02000E03="Цэгийн &өргөн." - -02000E10="Дээш &оч" -02000E11="Доош &оч" -02000E12="&Үзүүлэх" -02000E13="&Нуух" -02000E14="Оруулах" - -02000E81="Гарчиг" -02000E82="Өргөн" - -; Testing -02000F90="Шалгаж байна" - - -; File Manager - -03000000="7-Зип файл Менежер" - -; Menu -03000102="&Файл" -03000103="&Засах" -03000104="&Үзүүлэх" -03000105="&Хэрэгслүүд" -03000106="&Тусламж" -03000107="Д&уртай зүйл" - -; File -03000210="&Нээх" -03000211="Дотор &нээх" -03000212="Гадна &нээх" -03000220="&Харах" -03000221="&Засварлах" -03000230="Нэр с&олих" -03000231="...рүү &Хуулах..." -03000232="...руу &Зөөх..." -03000233="&Устгах" -03000240="&Мэдээлэл үзэх" -03000241="Тай&лбар" -03000250="Хавтас үүсгэх" -03000251="Файл үүсгэх" -03000260="Га&рах" -03000270="&Файл хуваах..." -03000271="Файлуудыг нэгтгэх..." - -; Edit -03000310="&Цуцлах" -03000311="&Сэргээх" -03000320="Хайч&лах" -03000321="&Хуулах" -03000322="&Тавих" -03000323="&Устгах" -03000330="Бүгдийг со&нгох" -03000331="Сонгохоо болих" -03000332="&Сонголтоо эргүүл" -03000333="Сонгох..." -03000334="Сонгохгүй..." -03000335="Төрлөөр нь сонгох" -03000336="Төрлөөр нь сонгохгүй" - -; View -03000410="Том& дүрсүүд" -03000411="Жи&жиг дүрсүүд" -03000412="&Жагсаалт" -03000413="&Дэлгэрэнгүй" -03000420="Ангилаагүй" -03000430="Гол хавтсыг нээх" -03000431="Нэг төвшин дээш" -03000432="Хавтасны түүх..." -03000440="&Сэргээ" -03000450="&2 самбарууд" -03000451="&Багажны самбар" -03000460="Aрхив багажны самбар" -03000461="Стандарт багажны самбар" -03000462="Том товчлуурууд" -03000463="Товчлуурын текстийг үзүүл" - -; Tools -03000510="&Сонголтууд..." -03000511="&Бэнчмарк" - -; Help -03000610="&Агуулгууд..." -03000620="&7-Зип-ийн тухай..." - -; Favorites -03000710="&Хавтсыг дуртайдаа нэмэх үү" -03000720="Хавчуурга" - -; Options Dialog - -03010000="Сонголтууд" - -; Plugins -03010100="Плаг-инууд" -03010101="&Плаг-инууд:" -03010110="Сонголтууд..." - -; Edit -03010200="Засварлагч" -03010201="&Засварлагч:" - -; System -03010300="Систем" -03010302="7-Зипийг дараахтай нэгтгэх:" -03010310="Плаг-ин" - -; Settings -03010400="Тохируулгууд" -03010401="Зүйл \"..\" үзүүлэх" -03010402="Жинхэнэ файл дүрсийг харуулах" -03010410="Системийн цэс харуул" -03010420="&Бүтэн мөр сонгох" -03010421="&Мөрийн дундах зураас харуулах" -03010430="&Сайжруулсан Сонгох горим" -03010440="&Том санах ойн хуудас хэрэглэх" - -; Strings - -03020201="Хуулах" -03020202="Зөөх" -03020203="хуулахдаа:" -03020204="Зөөхдөө:" -03020205="Хуулж байна..." -03020206="Зөөж байна..." -03020207="Та файл ба хавтсыг зөөх буюу хуулж чадахгүй." -03020208="Үйлдэл дэмжигдээгүй байна." - -03020210="Файл устгахыг батал" -03020211="Хавтас устгахыг батал" -03020212="Олон файл устгахыг батал" -03020213="Та'{0}'-ийг устгах гэж байна уу?" -03020214="'{0}' хавтас болон бүх агуулгыг устгах гэж байна уу?" -03020215="{0} зүйлүүдийг устгах гэж байна уу?" -03020216="Устгаж байна..." -03020217="Файл болон хавтсыг устгахад алдаатай" - -03020220="Нэр солиж байна..." -03020221="Файл болон хавтсын нэрийг солиход алдаатай" -03020222="Файл хуулахыг магадлах" -03020223="Та үнэхээр файлуудыг архив руу хуулахыг хүсэж байна уу" - -03020230="Хавтас үүсгэх" -03020231="Хавтас нэр:" -03020232="Шинэ хавтас" -03020233="Хавтас үүсгэхэд алдаа гарав" - -03020240="Файл үүсгэх" -03020241="Файл нэр:" -03020242="Шинэ файл" -03020243="Файл үүсгэхэд алдаа гарав" - -03020250="Сонгох" -03020251="Сонгохгүй" -03020252="Maск:" - -03020260="Хавтсын түүх" - -03020280="Файл '{0}' өөрчлөгдлөө.\nТа архивт шинэчлэлт хиймээр байна уу?" -03020281="Файлыг шинэчилж чадсангүй\n'{0}" -03020282="Засварлагчийг нээж чадсангүй." -03020283="Нээж байна..." - -03020290="Тайлбар" -03020291="&Тайлбар:" - -030202A0="Систем" - -03020300="Компьютер" -03020301="Сүлжээ" - -03020400="Нэм" -03020401="Задал" -03020402="Шалгах" - -03020420="Хуулах" -03020421="Зөөх" -03020422="Устгах" -03020423="Шинж..." - -03020500="Хуваах файл:" -03020501="&Файл хуваах газар:" -03020510="Хувааж байна..." - -03020600="Нэгтгэх файлууд:" -03020601="&Нэгтгэх газар:" -03020610="Нэгтгэж байна..." - -; Computer -03031100="Нийт хэмжээ" -03031101="Хоосон зай" -03031102="Кластерын зай" -03031103="Нэр" - -; Network -03031200="Локаль Нэр" -03031201="Хангагч" - -; Benchmark Dialog - -03080000="Бэнчмарк" -03080001="Санах ойн хэрэглээ:" -03080002="Шахаж байна" -03080003="Задалж байна" -03080004="Хурд" -03080005="Үнэлж байна" -03080006="Нийт үнэлгээ" -03080007="Одоогийн" -03080008="Хариуг гаргаж байна" -03080009="Өнгөрсөн:" -0308000A="Алдаанууд:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/mr.txt b/External/7-Zip/Lang/mr.txt deleted file mode 100644 index c111e428a..000000000 --- a/External/7-Zip/Lang/mr.txt +++ /dev/null @@ -1,474 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.42 -; अनुवाद सुबोध गायकवाड -; -; -; -; - -00000000="Marathi" -00000001="मराठी" -00000002="78" - -; 7-Zip Configuration - -; Title -01000000="7-Zip संरचना" - -; Info Page -01000100="7-Zip बद्दल माहिती" -01000103="7-Zip हे मोफ़त सॉफ़्टवेअर आहे. तरिही, तुम्ही नोंद करुन याच्या प्रगतीला सहाय्य करू शकता." -01000104="सहाय्यता" -01000105="नोंद" - -; Folders Page -01000200="फ़ोल्डर" -01000210="&चलित फ़ोल्डर" -01000211="&प्रणालीचे तात्पुरते फ़ोल्डर" -01000212="&सध्या" -01000213="&नमुद:" -01000214="फक्त काढता येणाय्रा ड्रॉईव्हकरता वापरा" - -01000281="तात्पुरत्या दफ़तर करिता मार्ग दर्शवा." - -; System Page -01000300="प्रणाली" -01000301="7-Zip ला shell context मेनुशी जोडा" -01000302="Cascaded context menu" -01000310="Context मेनु वस्तू:" - -; Language Page -01000400="भाषा" -01000401="भाषा:" - - -; 7-Zip Explorer extension - - -; Context menu -02000101="7-Zip" -02000102="7-Zip कमांड्स" -02000103="दफ़तर उघडा" -02000104="निवडलेले दफ़तर उघडा." -02000105="फ़ाइल्स बाहेर काढा..." -02000106="निवडलेल्या दफ़तर मधुन फाइल बाहेर काढा ." -02000107="दफ़तरात टाका..." -02000108="निवडलेल्या वस्तू दफ़तरात टाका." -02000109="दफ़तर तपासा" -0200010A="दफ़तराची पुर्णता तपासा." -0200010B="येथे बाहेर काढा" -0200010C="सध्याच्या फ़ोल्डरमध्ये निवडलेल्या दफ़तर मधुन फाइल बाहेर काढा." -0200010D="बाहेर {0}" -0200010E="फ़ाइल्स उप-फ़ोल्डरमध्ये काढा." -0200010F="{0} येथे टाका" -02000110="निवडलेल्या वस्तू दफ़तरात टाका." -02000111="दाबा आणि इमेल करा..." -02000112="निवडलेल्या वस्तू दफ़तरात दाबुन टाका आणि दफ़तर इमेलद्वारे पाठवा." -02000113=" {0} येथे दाबा आणि इमेल करा" -02000114="निवडलेल्या वस्तू दफ़तरात दाबुन टाका आणि दफ़तर इमेलद्वारे पाठवा." - - -02000140="" -02000141="" - -; Properties -02000203="मार्ग" -02000204="नाव" -02000205="शेपुट" -02000206="फ़ोल्डर" -02000207="आकार" -02000208="दबलेला आकार" -02000209="गुणधर्म" -0200020A="तयार" -0200020B="वापर" -0200020C="बदल" -0200020D="ठोस" -0200020E="भाष्य" -0200020F="बंधिस्त" -02000210="या पुर्व तुकडे करा " -02000211="या नंतर तुकडे करा" -02000212="शब्दावली" -02000213="CRC" -02000214="प्रकार" -02000215="विरुद्ध" -02000216="पद्धत" -02000217="यजमान आज्ञावली" -02000218="फ़ाइल प्रणाली" -02000219="उपयोगकर्ता" -0200021A="गट" -0200021B="गठ्ठा" -0200021C="प्रतिक्रिया" -0200021D="स्थिती" -0200021E="मार्गाची सुरुवात" - -; Status bar -02000301="निवडलेल्या वस्तू{0}" -02000302="{0} वस्तू(s)" - -02000320="फ़ाइल:" -02000321="फ़ोल्डर:" -02000322="आकार:" - -; List Context Menu -02000401="&स्तंभ..." - -02000411="&उघडा" -02000412="&बाहेर..." - -; ToolBar -02000501="बाहेर" - -; Messages -02000601="या दफ़तरासाठी नुतनीकरण शक्य नाही." -02000602="{0} दफ़तराचे नुतनीकरण होऊ शकले नाही" -02000603=" '{0}' फ़ोल्डर तयार होऊ शकले नाही" -02000604="हा दफ़तर वेगळा आहे." -02000605="चुक" -02000606="खूपच जास्त वस्तू" -02000607="या फ़ाइलला उघडण्याकरता एकही संबधित प्रोग्राम नाही" -02000608="येथे एकही चूक नाही" - -; Dialogs -02000702="ठीक" -02000705="&हो" -02000707="&सर्व ला हो" -02000709="&नाही" -0200070B="&सर्व ला नाही" - -02000710="रद्द" -02000711="&रद्द" -02000713="&बंद" -02000714="थांबा" -02000715="पुन्हा सुरु करा" - -02000720="मदत" - -; Extract dialog -02000800="बाहेर" -02000801="&बाहेर:" -02000802="परवलिचा शब्द" - -02000810="मार्ग रित" -02000811="पूर्ण पत्ता" -02000812="सध्याचा पत्ता" -02000813="पत्ता नाही" - -02000820="Overwrite रीत" -02000821="overwrite करण्यापुर्वी विचारा" -02000822="Overwrite न विचारता करा" -02000823="अस्तित्वात असलेल्या फ़ाइल सोडा" -02000824="स्वयंचलित नाव बदलवा" -02000825="अस्तित्वात असलेल्या फ़ाइलचे आपोआप नाव बदलवा" - -02000830="फ़ाइल" -02000831="&निवडलेल्या फ़ाइल" -02000832="&सर्व फ़ाइल" - -02000881="फ़ाइल बाहेर काढण्यासाठी मार्ग नमूद करा." - -02000890="बाहेर" - -; Overwrite dialog -02000900="फ़ाइल बदलवीणे खात्री" -02000901="त्या फ़ोल्डरमध्ये अगोदरच कार्यान्वीत फ़ाइल आहे." -02000902="अस्तित्वात असलेली फ़ाइल बदलवायची आहे का?" -02000903="यानी?" - -02000911="स्वयंचलित नाव बदलवा" - -02000982="{0} बाइट्स" -02000983="बदल" - -; Messages dialog -02000A00="उपचार संदेश" - -02000A80="संदेश" - -02000A91="असहाय्यक दाब पद्धत'{0}'." -02000A92="डेटा चूक'{0}'. फ़ाइल तुटलेली आहे." -02000A93="CRC अयशस्वी '{0}'. फ़ाइल तुटलेली आहे." - -; Password dialog -02000B00="परवलिचा शब्द टाका" -02000B01="परवलिचा शब्द टाका:" -02000B02="परवलिचा शब्द दाखवा" - -; Progress dialog -02000C00="कार्य" -02000C01="झालेला वेळ:" -02000C02="निघुन गेलेला वॆळ:" -02000C03="आकार:" -02000C04="वेग:" - -02000C10="&मागे लपवा" -02000C11="&समोर आणा" -02000C12="&विश्राम" -02000C13="&सुरु" - -02000C20="विश्राम" - -02000C30="तुम्हाला रद्द करण्याबाबत खात्री आहे का?" - -; Compress dialog -02000D00="दफ़तरात टाका" -02000D01="&दफ़तर:" -02000D02="&नुतनीकरन रित:" -02000D03="दफ़तर &प्रकार:" -02000D04="दाब &पद्धत:" -02000D05="&ठोस दफ़तर तयार करा" -02000D06="&Parameters:" -02000D07="पर्याय" -02000D08="SF&X दफ़तर तयार करा" -02000D09="Multi-threading" -02000D0A="फ़ाइल &नाव बंधिस्त करा" -02000D0B="दाब &level:" -02000D0C="&शब्द्कोश आकार:" -02000D0D="&शब्द आकार:" -02000D0E="दाबण्यासाठी स्मरणशक्तीचा वापर:" -02000D0F="प्रसरण पावण्यासाठी स्मरणशक्तीचा वापर:" - -02000D40="तुकडे, बाइट्स:" - -02000D81="साठा" -02000D82="साधारण" -02000D83="जास्तीत जास्त" -02000D84="वेगवान" -02000D85="अतिशय वेगवान" -02000D86="एकदमच" - -02000D90="ब्राउझ" - -02000DA1="फ़ाइल टाका आणि ठेवा" -02000DA2="फ़ाइल टाका आणि नुतन करा" -02000DA3="अस्तित्वातील फ़ाइल ताजे करा" -02000DA4="Synchronize फ़ाइल" - -02000DB1="सर्व फ़ाइल" - -02000DC0="दाब" - -; Columns dialog -02000E00="स्तंभ" -02000E01="जे स्तंभ तुम्हाला या फ़ोल्डरमध्ये दृश्य करायचे आहे ते निवडा. वर आणि खाली कळचा उपयोग करा.." -02000E02="निवडलेला स्तंभ " -02000E03="पिक्सेल पसरलेला." - -02000E10="&वर" -02000E11="&खाली" -02000E12="&दृश्य" -02000E13="&लपवा" -02000E14="बसवा" - -02000E81="शिर्षक" -02000E82="रुंद" - -; Testing -02000F90="तपासणी" - - -; File Manager - -03000000="7-Zip फ़ाइल व्यवस्थापक" - -; Menu -03000102="&फ़ाइल" -03000103="&संपादन" -03000104="&दर्शन" -03000105="&अवजार" -03000106="&मदत" -03000107="आ&वडते" - -; File -03000210="&उघडा" -03000211="&अंदर उघडा" -03000212="&बाहेर उघडा" -03000220="&दृश्य" -03000221="&संपादक" -03000230="नाव बदल" -03000231="&प्रतिलिपी..." -03000232="&हलवा..." -03000233="&मिटवा" -03000240="लक्षणं" -03000241="प्रतिक्रिया" -03000250="फ़ोल्डर तयार करा" -03000251="फ़ाइल तयार करा" -03000260="गमन" -03000270="&फ़ाइल तुकडे करा..." -03000271="फ़ाइल जोडा..." - -; Edit -03000310="&पुर्वस्थिती" -03000311="&पुन्हा करा" -03000320="कापा" -03000321="&प्रतिलिपी" -03000322="&चिकटवा" -03000323="&मिटवा" -03000330="सर्व निवडा" -03000331="सर्वांना अनिवडित करा" -03000332="&निवड उलटी करा" -03000333="निवडा..." -03000334="अनिवडा..." -03000335="प्रकारेद्वारा निवडा" -03000336="प्रकारेद्वारे अनिवडा" - -; View -03000410="मोठे Icons" -03000411="लहान Icons" -03000412="&सुची" -03000413="&माहिती" -03000420="अव्यवस्थित" -03000430="Root फ़ोल्डर उघडा" -03000431="एक वरती चढा" -03000432="फ़ोल्डर इतिहास..." -03000440="&टवटवीत करा" -03000449="Flat दृश्य" -03000450="&२ फ़लक" -03000451="&अवजार कप्पाs" -03000460="दफ़तर अवजार कप्पा" -03000461="प्रमाण अवजार कप्पा" -03000462="मोठे कळ" -03000463="कळ शब्द दाखवा" - -; Tools -03000510="&पर्याय..." -03000511="&Benchmark" - -; Help -03000610="&माहिती..." -03000620="7-Zip बद्दल..." - -; Favorites -03000710="&फ़ोल्डर आवडते मध्ये टाका..." -03000720="पृष्ठ" - -; Options Dialog - -03010000="पर्याय" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="पर्याय..." - -; Edit -03010200="संपादक" -03010201="&संपादक:" - -; System -03010300="प्रणाली" -03010302="7-Zip संबधित करा:" -03010310="Plugin" - -; Settings -03010400="स्थिती" -03010401="वस्तू \"..\" दाखवा" -03010402="फ़ाइलचे खरे icon दाखवा" -03010410="प्रणालीचे मेनु दाखवा" -03010420="&सर्व ओळ निवडा" -03010421=" &grid रेघा दाखवा" -03010430="&अतिरिक्त निवड पद्धती" -03010440="मोठे स्मरणशक्ती पृष्ठ वापरा" - -; Strings - -03020201="प्रतिलिपी" -03020202="हलवा" -03020203="प्रतिलिपी:" -03020204="हलवा:" -03020205="प्रतिलिपी..." -03020206="हलवल्या जात आहे..." -03020207="तुम्ही अश्या फ़ोल्डरसाठी वस्तू हलवू किंवा प्रतिलिपी तयार करू शकत नाही." -03020208="क्रिया करता येणार नाही." - -03020210="फ़ाइल मिटवायची खात्री" -03020211="फ़ोल्डर मिटवायची खात्री" -03020212="अनेक फ़ाइल मिटवायची खात्री" -03020213="तुम्हाला '{0}' मिटवायची खात्री आहे का?" -03020214="तुम्हाला '{0}' फ़ोल्डर आणि त्यातील सर्व वस्तु मिटवायची खात्री आहे का?" -03020215="तुम्हाला {0} वस्तु मिटवायची खात्री आहे का?" -03020216="मिटत आहे..." -03020217="फ़ाइल किंवा फ़ोल्डर मिटवता येत नाही आहे" - -03020220="नविन नाव दिल्या जात आहे..." -03020221="फ़ाइल किंवा फ़ोल्डरला नविन नाव देता येत नाही आहे" -03020222="फ़ाइलची प्रतिलिपी करण्यास तुमची खात्री आहे का" -03020223="दफ़्तरात फ़ाइलची प्रतिलिपी करण्यास तुमची खात्री आहे का" - -03020230="फ़ॊल्डर तयार करा" -03020231="फ़ोल्डर नाव:" -03020232="नविन फ़ॊल्डर" -03020233="फ़ोल्डर तयार करता येत नाही आहे" - -03020240="फ़ाइल तयार करा" -03020241="फ़ाइलचे नाव:" -03020242="नविन फ़ाइल" -03020243="फ़ाइल तयार करता येत नाही आहे" - -03020250="निवडा" -03020251="निवड रद्द" -03020252="मुखवटा:" - -03020260="फ़ोल्डरचा इतिहास" - -03020280=" '{0}' ही फ़ाइल बदलली आहे.\nतुम्हाला हे दफ़तरात नुतन करायचे आहे का?" -03020281="फ़ाइल नुतन करता येत नाही\n'{0}'" -03020282="संपादक सुरु होत नाही." -03020283="उघडत आहे..." - -03020290="प्रतिक्रिया" -03020291="&प्रतिक्रिया:" - -030202A0="प्रणाली" - -03020300="संगणक" -03020301="नेटवर्क" - -03020400="टाका" -03020401="बाहेर" -03020402="तपासा" - -03020420="प्रतिलिपी" -03020421="हलवा" -03020422="मिटवा" -03020423="माहिती" - -03020500="फ़ाइलचे तुकडे करा" -03020501="&येथे तुकडे:" -03020510="तुकडे होत आहे..." - -03020600="फ़ाइल जोडा" -03020601="&येथे फ़ाइल जोडा:" -03020610="फ़ाइल जुडत आहे..." - -03020710="Checksum मोजत आहे..." -03020720="Checksum माहिती" -03020721="डेटाकरिता CRC checksum :" -03020722="नाव आणि डेटाकरिता CRC checksum :" - -03020800="बारकाईने पाहत आहे..." - -; Computer -03031100="एकूण आकार" -03031101="खाली जागा" -03031102="क्लस्टर आकार" -03031103="शिर्षक" - -; Network -03031200="लोकल नाव" -03031201="देणारा" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="स्मरणशक्ती वापर:" -03080002="दाबत आहे" -03080003="प्रसरण होत आहे" -03080004="वेग" -03080005="क्रमांकन" -03080006="एकुण क्रमांकन" -03080007="सध्या" -03080008="परिणाम" -03080009="Passes:" -0308000A="चूक:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ms.txt b/External/7-Zip/Lang/ms.txt deleted file mode 100644 index a4a96abf0..000000000 --- a/External/7-Zip/Lang/ms.txt +++ /dev/null @@ -1,459 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.30 -; Diterjemahkan oleh Khairul Ridhwan Bin Omar -; -; -; -; - -00000000="Malay" -00000001="Bahasa Melayu" -00000002="62" - -; 7-Zip Configuration - -; Title -01000000="Konfigurasi 7-Zip" - -; Info Page -01000100="Perihal 7-Zip" -01000103="7-Zip adalah perisian percuma. Sokong pembangunan 7-Zip dengan melakukan pendaftaran." -01000105="Pendaftaran" - -; Folders Page -01000200="Folder" -01000210="&Folder kerja" -01000211="&Folder sementara sistem" -01000212="&Sekarang" -01000213="&Ditentukan:" -01000214="Hanya untuk pemacu mudah alih" - -01000281="Tentukan lokasi untuk arkib fail sementara." - -; System Page -01000300="Sistem" -01000301="Integrasikan 7-Zip ke shell konteks menu" -01000302="Cascaded konteks menu" -01000310="Item pada konteks menu:" - -; Language Page -01000400="Bahasa" -01000401="Bahasa:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Arahan dalam 7-Zip" -02000103="Buka arkib" -02000104="Buka arkib terpilih." -02000105="Ekstrak fail..." -02000106="Ekstrak fail dari arkib terpilih." -02000107="Tambahkan ke arkib..." -02000108="Tambahkan item yang terpilih ke arkib." -02000109="Uji arkib" -0200010A="Uji integriti dari arkib terpilih." -0200010B="Ekstrak di sini" -0200010C="Ekstrak fail arkib yang terpilih ke folder ini." -0200010D="Ekstrak ke {0}" -0200010E="Ekstrak fail ke subfolder." -0200010F="Tambahkan ke {0}" -02000110="Tambahkan item terpilih ke arkib." -02000111="Padatkan dan kirimkan melalui email..." -02000112="Padatkan item yang terpilih ke arkib dan kirimkan melalui email." -02000113="Padatkan ke {0} dan kirimkan melalui email" -02000114="Padatkan item yang terpilih ke arkib dan kirimkan melalui email." - -02000140="" -02000141="" - -; Properties -02000203="Bahagian" -02000204="Nama" -02000205="Sambungan" -02000206="Folder" -02000207="Saiz" -02000208="Saiz Paket" -02000209="Atribut" -0200020A="Dibuat" -0200020B="Diakses" -0200020C="Diubah Suai" -0200020D="Solid" -0200020E="Komen" -0200020F="Terenkripsi" -02000210="Terpisah Sebelum" -02000211="Terpisah Selepas" -02000212="Kamus" -02000213="CRC" -02000214="Jenis" -02000215="Anti" -02000216="Kaedah" -02000217="Sistem Operasi" -02000218="Sistem Fail" -02000219="Pengguna" -0200021A="Kumpulan" -0200021B="Blok" -0200021C="Komen" -0200021D="Posisi" - -; Status bar -02000301="{0} buah objek telah terpilih" -02000302="{0} buah objek" - -; List Context Menu -02000401="&Kolum..." - -02000411="&Buka" -02000412="&Ekstrak..." - -; ToolBar -02000501="Ekstrak" - -; Messages -02000601="Tidak menyokong pengemaskinian untuk arkib ini." -02000602="Tidak dapat mengemaskini arkib {0}" -02000603="Tidak dapat membuat folder '{0}'" -02000604="Tidak dapat menyokong fail arkib jenis ini." -02000605="Ralat" -02000606="Terlalu banyak item" -02000607="Tidak ada aplikasi yang dikongsikan dengan sambungan dari nama fail yang diberikan" -02000608="Tidak ada ralat" - -; Dialogs -02000702="OK" -02000705="&Ya" -02000707="Ya untuk Semua" -02000709="&Tidak" -0200070B="Tidak untuk Semua" - -02000710="Batal" -02000711="&Batal" -02000713="&Tutup" -02000714="Henti" -02000715="Mula Semula" - -02000720="Bantuan" - -; Extract dialog -02000800="Ekstrak" -02000801="Ekstrak ke:" -02000802="Kata laluan" - -02000810="Mod laluan" -02000811="Laluan nama penuh" -02000812="Nama laluan sekarang" -02000813="Tidak pakai nama laluan" - -02000820="Mod tulis semula" -02000821="Tanya sebelum menulis semula" -02000822="Tulis semula tanpa perlu diberitahu" -02000823="Abaikan fail yang ada" -02000824="Namakan semula automatik" -02000825="Namakan automatik fail yang ada" - -02000830="Fail" -02000831="&Fail yang terpilih" -02000832="&Semua fail" - -02000881="Tentukan lokasi untuk pengekstrakan fail." - -02000890="Sedang mengekstrak" - -; Overwrite dialog -02000900="Pastikan penggantian fail" -02000901="Folder tujuan telah berisi fail yang telah terproses." -02000902="Mahukah anda menggantikan fail yang ada" -02000903="dengan yang ini?" - -02000911="N&amakan semula Automatik" - -02000982="{0} baits" -02000983="diubah suai pada" - -; Messages dialog -02000A00="Mesej diagnostik" - -02000A80="Mesej" - -02000A91="Kaedah pemampatan untuk '{0}' tidak disokong." -02000A92="Data ralat di '{0}'. Fail ini rosak." -02000A93="CRC gagal di '{0}'. Fail ini rosak." - -; Password dialog -02000B00="Masukkan kata laluan" -02000B01="Masukkan kata laluan:" -02000B02="&Perlihatkan kata laluan" - -; Progress dialog -02000C00="Proses" -02000C01="Telah berlalu:" -02000C02="Selesai dalam:" -02000C03="Saiz:" -02000C04="Kecepatan:" - -02000C10="&Latar belakang" -02000C11="&Latar depan" -02000C12="&Berehat" -02000C13="&Teruskan" - -02000C20="Berehat" - -02000C30="Anda yakin untuk membatalkannya?" - -; Compress dialog -02000D00="Tambahkan ke arkib" -02000D01="&Arkib:" -02000D02="&Mod kemaskini:" -02000D03="Format arkib:" -02000D04="Kaedah mampatan:" -02000D05="Buat arkib solid" -02000D06="&Parameter:" -02000D07="Opsyen" -02000D08="Buat arkib SF&X" -02000D09="Multi-threading" -02000D0A="Enkripsi nama &fail" -02000D0B="Aras &mampatan:" -02000D0C="&Saiz kamus:" -02000D0D="&Saiz perkataan:" -02000D0E="Penggunaan memori untuk Memampatkan:" -02000D0F="Penggunaan memori untuk Menyah-mampatkan:" - -02000D40="Bahagi/belah ke &nilai, baits:" - -02000D81="Untuk Penyimpanan" -02000D82="Normal" -02000D83="Maksimum" -02000D84="Cepat" -02000D85="Lebih cepat" -02000D86="Ultra" - -02000D90="Selusur..." - -02000DA1="Tambah dan gantikan fail" -02000DA2="Kemaskini dan tambahkan fail" -02000DA3="Perbaharui fail yang ada" -02000DA4="Menyesuaikan fail" - -02000DB1="Semua Fail" - -02000DC0="Memampatkan" - -; Columns dialog -02000E00="Kolum" -02000E01="Semak kolum yang anda ingin lihat untuk folder ini. Gunakan bebutang Ke Atas dan Ke Bawah untuk menyusun kolum." -02000E02="Kolum yang sepatutnya dipilih" -02000E03="piksel &lebar." - -02000E10="Pindah ke &Atas" -02000E11="Pindah ke &Bawah" -02000E12="&Perlihatkan" -02000E13="&Sembunyikan" -02000E14="Set" - -02000E81="Judul" -02000E82="Lebar" - -; Testing -02000F90="Pengujian" - - -; File Manager - -03000000="Pengurusan Fail 7-Zip" - -; Menu -03000102="&Fail" -03000103="&Edit" -03000104="&Paparan" -03000105="&Alat" -03000106="&Bantuan" -03000107="K&egemaran" - -; File -03000210="&Buka" -03000211="Buka di D&alam" -03000212="Buka di L&uar" -03000220="&Paparan" -03000221="&Edit" -03000230="Nam&akan semula" -03000231="&Salin ke..." -03000232="&Pindahkan ke..." -03000233="Hapus" -03000240="P&roperti" -03000241="Kom&en" -03000250="Buat Folder" -03000251="Buat Fail" -03000260="K&eluar" -03000270="&Bahagi/belah Fail..." -03000271="Gab&ung Fail..." - -; Edit -03000310="&Buat Asal" -03000311="&Buat Semula" -03000320="Poton&g" -03000321="&Salin" -03000322="&Tampal" -03000323="&Hapus" -03000330="Pilih &Semua" -03000331="Jangan Pilih Semua" -03000332="&Sonsangkan Pilihan " -03000333="Pilih..." -03000334="Tidak Memilih..." -03000335="Pilih Berdasarkan Jenis" -03000336="Tidak Memilih Berdasarkan Jenis" - -; View -03000410="Ikon B&esar" -03000411="Ikon K&ecil" -03000412="&Senarai" -03000413="&Butiran" -03000420="Tidak Tersusun" -03000430="Buka Root Folder" -03000431="Ke atas Satu Aras" -03000432="Folder Sejarah..." -03000440="&Segarkan Semula" -03000450="&2 Panel" -03000451="&Toolbar" -03000460="Toolbar Arkib" -03000461="Toolbar Standard" -03000462="Bebutang Besar" -03000463="Perlihatkan Teks Bebutang" - -; Tools -03000510="&Opsyen..." -03000511="&Tanda Aras" - -; Help -03000610="&Kandungan..." -03000620="&Perihal 7-Zip..." - -; Favorites -03000710="&Tambah folder pada Kegemaran sebagai" -03000720="Penanda Buku" - -; Options Dialog - -03010000="Opsyen" - -; Plugins -03010100="Plugin" -03010101="&Plugin:" -03010110="Opsyen..." - -; Edit -03010200="Editor" -03010201="&Editor:" - -; System -03010300="Sistem" -03010302="Kongsikan 7-Zip dengan:" -03010310="Plugin" - -; Settings -03010400="Seting" -03010401="Perlihatkan \"..\" item" -03010402="Perlihatkan ikon asli dari fail" -03010410="Perlihatkan menu sistem" -03010420="&Pilih barisan penuh " -03010421="Perlihatkan garisan grid" -03010430="&Mod Pilihan Alternatif" -03010440="Gunakan muka surat memori yang &besar" - -; Strings - -03020201="Salin" -03020202="Pindah" -03020203="Salin ke:" -03020204="Pindah ke:" -03020205="Sedang menyalin..." -03020206="Sedang memindah..." -03020207="Anda tidak boleh memindah atau menyalin item untuk folder yang demikian." -03020208="Operasi tidak disokong." - -03020210="Pasti penghapusan fail" -03020211="Pasti penghapusan folder" -03020212="Pasti penghapusan fail-fail" -03020213="Anda yakin untuk menghapus '{0}'?" -03020214="Anda yakin untuk menghapus folder '{0}' dan semua isi kandungannya?" -03020215="Anda yakin untuk menghapus item {0}?" -03020216="Penghapusan..." -03020217="Ralat ketika menghapuskan Fail atau Folder" - -03020220="Namakan semula..." -03020221="Ralat, ketika namakan semula Fail atau Folder" -03020222="Pasti salinkan fail" -03020223="Anda yakin untuk menyalinkan fail kepada arkib" - - -03020230="Buat Folder" -03020231="Nama Folder:" -03020232="Folder Baru" -03020233="Ralat, tidak dapat Membuat Folder" - -03020240="Buat Fail" -03020241="Nama Fail:" -03020242="Fail Baru" -03020243="Ralat, tidak dapat Membuat Fail" - -03020250="Pilih" -03020251="Tidak Memilih" -03020252="Topeng:" - -03020260="Folder Sejarah" - -03020280="Fail '{0}' telah terubah suai.\nApakah anda ingin mengemaskininya pada arkib?" -03020281="Tidak dapat mengemaskini fail\n'{0}'" -03020282="Tidak dapat membuka editor." -03020283="Membuka..." - -03020290="Komen" -03020291="&Komen:" - -030202A0="Sistem" - -03020300="Komputer" -03020301="Rangkaian" - -03020400="Tambah" -03020401="Ekstrak" -03020402="Uji" - -03020420="Salin" -03020421="Pindah" -03020422="Hapus" -03020423="Maklumat" - -03020500="Pisahkan Fail" -03020501="&Pisahkan ke:" -03020510="Pembelahan ..." - -03020600="Gabungan Fail" -03020601="&Gabung ke:" -03020610="Penggabungan ..." - -; Computer -03031100="Saiz Keseluruhan" -03031101="Ruang Kosong" -03031102="Saiz Kluster" -03031103="Label" - -; Network -03031200="Nama Tempatan" -03031201="Penyedia" - -; Benchmark Dialog - -03080000="Tanda Aras" -03080001="Penggunaan memori:" -03080002="Pemampatan" -03080003="Penyah-mampatan" -03080004="Kecepatan" -03080005="Rating" -03080006="Total Rating" -03080007="Sekarang" -03080008="Keputusan" -03080009="Lulus:" -0308000A="Ralat:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/nb.txt b/External/7-Zip/Lang/nb.txt deleted file mode 100644 index de6c8f886..000000000 --- a/External/7-Zip/Lang/nb.txt +++ /dev/null @@ -1,496 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.45 -; Translated by Jostein Christoffer Andersen -; Maintained by Kjetil Hjartnes -; Maintained by Robert Grønning -; -; - -00000000="Norwegian Bokmal" -00000001="Norsk Bokmål" -00000002="20-1" - -; 7-Zip Configuration - -; Title -01000000="7-Zip innstillinger" - -; Info Page -01000100="Om 7-Zip" -01000103="7-Zip er gratis programvare, men du kan støtte utviklingen av 7-Zip ved å registrere deg." -01000104="Brukerstøtte" -01000105="Registrering" - -; Folders Page -01000200="Mapper" -01000210="&Arbeidsmappe" -01000211="Systemets &midlertidige mappe" -01000212="&Nåværende" -01000213="&Egendefinert:" -01000214="Kun for flyttbare stasjoner" - -01000281="Angi plassering for midlertidige filer." - -; System Page -01000300="System" -01000301="Integrer 7-Zip i programmenyen" -01000302="Forgrenet programmeny" -01000310="Valg i programmenyen:" - -; Language Page -01000400="Språk" -01000401="Språk:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip-kommandoer" -02000103="Åpne arkiv" -02000104="Åpner det merkede arkivet." -02000105="Pakk ut …" -02000106="Pakk ut filer fra det merkede arkivet." -02000107="Legg til arkiv …" -02000108="Legger merkede filer til arkivet." -02000109="Test arkiv" -0200010A="Test integriteten til det merkede arkivet." -0200010B="Pakk ut internt" -0200010C="Pakk ut filer fra det merkede arkivet til gjeldende mappe." -0200010D="Pakk ut til {0}" -0200010E="Pakker ut filer til undermappe." -0200010F="Legg til {0}" -02000110="Legger merkede elementer til arkivet." -02000111="Komprimer og send med e-post …" -02000112="Komprimerer merkede elementer til et arkiv og sender det med e-post." -02000113="Komprimer til {0} og send med e-post" -02000114="Komprimerer merkede elementer til et arkiv og sender det med e-post." - -02000140="" -02000141="" - -; Properties -02000203="Plassering" -02000204="Navn" -02000205="Filetternavn" -02000206="Mappe" -02000207="Størrelse" -02000208="Komprimert størrelse" -02000209="Attributter" -0200020A="Opprettet" -0200020B="Åpnet" -0200020C="Endret" -0200020D="Kompakt" -0200020E="Kommentert" -0200020F="Kryptert" -02000210="Oppdeling før" -02000211="Oppdeling etter" -02000212="Ordbok" -02000213="CRC" -02000214="Type" -02000215="Anti" -02000216="Metode" -02000217="Vert-OS" -02000218="Filsystem" -02000219="Bruker" -0200021A="Gruppe" -0200021B="Blokk" -0200021C="Kommentar" -0200021D="Posisjon" -0200021E="Stiprefiks" - -; Status bar -02000301="{0} element(er) merket" -02000302="{0} element(er)" - -02000320="Filer:" -02000321="Mapper:" -02000322="Størrelse:" - -; List Context Menu -02000401="&Kolonner …" - -02000411="&Åpne" -02000412="&Pakk ut …" - -; ToolBar -02000501="Pakk ut" - -; Messages -02000601="Oppdateringsfunksjoner støttes ikke for dette arkivet." -02000602="Klarte ikke oppdatere arkivet «{0}»" -02000603="Klarte ikke opprette mappen «{0}»" -02000604="Filen er ikke et støttet arkivformat." -02000605="Feil" -02000606="For mange elementer" -02000607="Ingen programmer er knyttet til dette filetternavnet" -02000608="Fant ingen feil." -02000609="Kan ikke åpne filen «{0}» som arkiv" -0200060A="Kan ikke åpne det krypterte arkivet «{0}». Sjekk at du har riktig passord." - -; Dialogs -02000702="OK" -02000705="&Ja" -02000707="Ja til &alt" -02000709="&Nei" -0200070B="Nei til a<" - -02000710="Avbryt" -02000711="&Avbryt" -02000713="&Lukk" -02000714="Stopp" -02000715="Start på nytt" - -02000720="Hjelp" - -; Extract dialog -02000800="Pakk ut" -02000801="&Pakk ut til:" -02000802="Passord" - -02000810="Filstier" -02000811="Fullstendige filstier" -02000812="Gjeldende filstier" -02000813="Ingen filstier" - -02000820="Overskrivelse" -02000821="Bekreft før overskrivelse" -02000822="Overskriv uten bekreftelse" -02000823="Hopp over filer som finnes allerede" -02000824="Navngi nye filer automatisk" -02000825="Navngi filer som finnes automatisk" - -02000830="Filer" -02000831="&Merkede filer" -02000832="&Alle filer" - -02000881="Angi plassering for filer som skal pakkes ut." - -02000890="Pakker ut" - -; Overwrite dialog -02000900="Bekreft filoverskrivelse" -02000901="Den behandlede filen finnes i målmappen allerede." -02000902="Vil du overskrive filen" -02000903="med denne?" - -02000911="Navngi a&utomatisk" - -02000982="{0} byte" -02000983="Endret" - -; Messages dialog -02000A00="Diagnosemeldinger" - -02000A80="Melding" - -02000A91="Komprimeringsmetoden støttes ikke for «{0}»." -02000A92="Datafeil i «{0}». Filen er ødelagt." -02000A93="CRC-feil i «{0}». Filen er ødelagt." -02000A94="Datafeil i den krypterte filen «{0}». Sjekk at du har riktig passord." -02000A95="CRC feilet i den krypterte filen «{0}». Sjekk at du har riktig passord." - -; Password dialog -02000B00="Angi passord" -02000B01="Angi passord:" -02000B02="&Vis passord" -02000B03="Bekreft passord:" -02000B10="Passordene er ikke like" -02000B11="Du kan bare bruke engelske bokstaver, tall eller spesialtegn (!, #, $, …) i passordet" -02000B12="Passordet er for langt" - -; Progress dialog -02000C00="Prosess" -02000C01="Tidsforbruk:" -02000C02="Gjenværende tid:" -02000C03="Størrelse:" -02000C04="Hastighet:" - -02000C10="&Bakgrunn" -02000C11="&Forgrunn" -02000C12="&Stopp" -02000C13="&Fortsett" - -02000C20="Stoppet" - -02000C30="Vil du avbryte?" - -; Compress dialog -02000D00="Legg til arkiv" -02000D01="Filn&avn:" -02000D02="&Oppdateringsmetode:" -02000D03="&Format:" -02000D04="Komprimerings&metode:" -02000D05="&Kompakt arkiv" -02000D06="&Parametre:" -02000D07="&Innstillinger" -02000D08="Selvutpakkende arkiv («SF&X»)" -02000D09="Fler&trådet" -02000D0A="Kr&ypter filnavn" -02000D0B="Komprimerings&nivå:" -02000D0C="Ord&bokstørrelse:" -02000D0D="&Ordstørrelse:" -02000D0E="Minnebruk ved komprimering:" -02000D0F="Minnebruk ved dekomprimering:" -02000D10="Kryptering" -02000D11="Krypteringsmetode:" -02000D12="Antall CPU tråder:" -02000D13="Solid blokk størrelse:" -02000D14="Ikkje-solid" -02000D15="Solid" - -02000D40="&Del opp til flere delarkiv i størrelsen:" -02000D41="Ugyldig delarkivstørrelse" -02000D42="Valgt delarkivstørrelse: {0} byte.\nEr du sikker på at du vil dele arkivet med denne størrelsen?" - -02000D81="Ukomprimert" -02000D82="Normal" -02000D83="Maksimum" -02000D84="Rask" -02000D85="Raskest" -02000D86="Ultra" - -02000D90="Bla gjennom" - -02000DA1="Legg til og overskriv filer" -02000DA2="Oppdater og legg til filer" -02000DA3="Oppdater filer" -02000DA4="Synkroniser filer" - -02000DB1="Alle filer" - -02000DC0="Komprimerer" - -; Columns dialog -02000E00="Kolonner" -02000E01="Merk av kolonnene som skal være synlige i denne mappen. Trykk «Flytt opp» og «Flytt ned» for å endre rekkefølgen." -02000E02="Den merkede kolonnen bør være" -02000E03="piksler &bred." - -02000E10="Flytt &opp" -02000E11="Flytt &ned" -02000E12="&Vis" -02000E13="&Skjul" -02000E14="Angi" - -02000E81="Tittel" -02000E82="Bredde" - -; Testing -02000F90="Testing" - - -; File Manager - -03000000="7-Zip filbehandler" - -; Menu -03000102="&Fil" -03000103="&Rediger" -03000104="&Vis" -03000105="Verk&tøy" -03000106="&Hjelp" -03000107="&Bokmerker" - -; File -03000210="&Åpne" -03000211="Åpne &internt" -03000212="Åpne &eksternt" -03000220="&Vis" -03000221="&Rediger" -03000230="Gi nytt &navn" -03000231="&Kopier til …" -03000232="&Flytt til …" -03000233="S&lett" -03000240="E&genskaper" -03000241="&Kommentar …" -03000242="Beregn sjekksum" -03000250="Ny &mappe …" -03000251="Ny f&il …" -03000260="&Avslutt" -03000270="&Del opp arkiv …" -03000271="&Sett sammen arkiv …" - -; Edit -03000310="&Angre" -03000311="&Gjør om" -03000320="Klipp &ut" -03000321="&Kopier" -03000322="&Lim inn" -03000323="&Slett" -03000330="Merk &alle" -03000331="Merk i&ngen" -03000332="Merk &omvendt" -03000333="Merk …" -03000334="Merk &ikke …" -03000335="Merk &valgt type" -03000336="Merk i&kke valgt type" - -; View -03000410="&Store ikoner" -03000411="S&må ikoner" -03000412="&Liste" -03000413="&Detaljer" -03000420="Usortert" -03000430="Rotmappe" -03000431="Gå opp et nivå" -03000432="Mappelogg …" -03000440="&Oppdater" -03000449="&Flat visning" -03000450="&To felt" -03000451="&Verktøylinjer" -03000460="Arkivverktøylinje" -03000461="Standardverktøylinje" -03000462="Store knapper" -03000463="Knappetekst" - -; Tools -03000510="&Innstillinger …" -03000511="&Yteprøve …" - -; Help -03000610="&Innhold" -03000620="&Om 7-Zip" - -; Favorites -03000710="&Bokmerk denne mappen som" -03000720="Bokmerke" - -; Options Dialog - -03010000="Innstillinger" - -; Plugins -03010100="Tillegg" -03010101="&Tillegg:" -03010110="Innstillinger …" - -; Edit -03010200="Redigering" -03010201="&Redigeringsprogram:" - -; System -03010300="System" -03010302="Assosier 7-Zip med:" -03010310="Utvidelse" - -; Settings -03010400="Innstillinger" -03010401="Vis element for å gå opp et &nivå" -03010402="Vis egentlige fil&ikoner" -03010410="Vis system&meny" -03010420="Merk &hele rader" -03010421="Vis &rutenett" -03010430="&Alternativ merking" -03010440="Bruk &store minnesider" - -; Strings - -03020201="Kopier" -03020202="Flytt" -03020203="Kopier til:" -03020204="Flytt til:" -03020205="Kopierer …" -03020206="Flytter …" -03020207="Du kan ikke flytte eller kopiere elementer i slike mapper." -03020208="Operasjonen støttes ikke." -03020209="Velg målmappe." - -03020210="Bekreft at fil skal slettes" -03020211="Bekreft at mappe skal slettes" -03020212="Bekreft at flere filer skal slettes" -03020213="Vil du slette «{0}»?" -03020214="Vil du slette mappen «{0}» med alt innhold?" -03020215="Vil du slette disse {0} elementene?" -03020216="Sletter …" -03020217="Det oppstod en feil da filen eller mappen skulle slettes" - -03020220="Navngir …" -03020221="Det oppstod en feil da filen eller mappen skulle navngis" -03020222="Bekreft at fil skal kopieres" -03020223="Vil du kopiere filene til arkivet" - -03020230="Ny mappe" -03020231="Mappenavn:" -03020232="Ny mappe" -03020233="Det oppstod en feil da mappen skulle opprettes" - -03020240="Ny fil" -03020241="Filnavn:" -03020242="Ny fil" -03020243="Det oppstod en feil da filen skulle opprettes" - -03020250="Merk" -03020251="Merk ikke" -03020252="Filter:" - -03020260="Mappelogg" - -03020280="Filen «{0}» har blitt endret.\nVil du oppdatere den i arkivet?" -03020281="Klarte ikke oppdatere filen\n«{0}»" -03020282="Klarte ikke starte redigeringsprogram." -03020283="Åpner …" - -03020290="kommentar" -03020291="&Kommentar:" - -030202A0="System" - -03020300="Datamaskin" -03020301="Nettverk" - -03020400="Legg til" -03020401="Pakk ut" -03020402="Prøv" - -03020420="Kopier" -03020421="Flytt" -03020422="Slett" -03020423="Egenskaper" - -03020500="Del opp arkiv" -03020501="&Del opp som:" -03020510="Deler opp …" -03020520="Bekreft deling" -03020521="Er du sikker på at du vil dele arkivet i {0} delarkiv?" -03020522="Delarkivene må være mindre enn originalarkivet" - -03020600="Sett sammen arkiv" -03020601="&Sett sammen som:" -03020610="Setter sammen …" -03020620="Velg bare det første delarkivet" - -03020710="Beregner sjekksum …" -03020720="Sjekksuminformasjon" -03020721="CRC-sjekksum for data:" -03020722="CRC-sjekksum for data og filnavn:" - -03020800="Skanner …" - -; Computer -03031100="Total plass" -03031101="Ledig plass" -03031102="Sektorgruppestørrelse" -03031103="Etikett" - -; Network -03031200="Lokalt navn" -03031201="Forsyner" - -; Benchmark Dialog - -03080000="Yteprøve" -03080001="Minnebruk:" -03080002="Komprimering" -03080003="Dekomprimering" -03080004="Hastighet" -03080005="Ytelse" -03080006="Samlet ytelse" -03080007="Nåværende" -03080008="Resultat" -03080009="Bestått:" -0308000A="Feilet:" -0308000B="CPU bruk" -0308000C="Ytelse / Bruk" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ne.txt b/External/7-Zip/Lang/ne.txt deleted file mode 100644 index 8543154ba..000000000 --- a/External/7-Zip/Lang/ne.txt +++ /dev/null @@ -1,473 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.37 -; Translated by Shiva Pokharel, Mahesh Subedi -; -; -; -; - -00000000="Nepali" -00000001="नेपाली" -00000002="97" - -; 7-Zip Configuration - -; Title -01000000="7-जिप कन्फिगरेसन" - -; Info Page -01000100="7-जिपका बारेमा" -01000103="7-जिप निशुल्क सफ्टवेयर हो। यद्यपी,तपाईँले दर्ता गरेर 7-जिपलाई सहयोग गर्न सक्नुहुन्छ ।" -01000104="सहयोग" -01000105="दर्ता" - -; Folders Page -01000200="फोल्डर" -01000210="&कार्य फोल्डर" -01000211="&प्रणाली टेम्प(अस्थायी) फोल्डर" -01000212="&चालू" -01000213="&निर्दिष्ट:" -01000214="हटाउन योग्य ड्राइभहरूका लागि मात्र प्रयोग गर्नुहोस्" - -01000281="अस्थायी सङ्ग्रह फाइलका लागि स्थान तोक्नुहोस् ।" - -; System Page -01000300="प्रणाली" -01000301="शेल प्रसङ्ग मेनुमा 7-जिप लाई सम्मिलन गर्नुहोस् " -01000302="सोपानी प्रसङ्ग मेनु" -01000310="प्रसङ्ग मेनु वस्तु:" - -; Language Page -01000400="भाषा" -01000401="भाषा:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-जिप" -02000102="7-जिप आदेश" -02000103="सङ्ग्रह खोल्नुहोस्" -02000104="चयन गरिएको सङ्ग्रह खोल्नुहोस्" -02000105="फाइलहरू निकाल्नुहोस्..." -02000106="चयन गरिएको सङ्ग्रहबाट फाइलहरू निकाल्नुहोस्" -02000107="सङ्ग्रहमा थप्नुहोस्..." -02000108="चयन गरिएका वस्तुहरूलाई सङ्ग्रहमा थप्दछ" -02000109="सङ्ग्रह जाँच्नुहोस्" -0200010A="चयन गरिएको सङ्ग्रहको समेङ्कन जाँच्दछ" -0200010B="यहाँ निकाल्नुहोस्" -0200010C="हालको फोल्डरमा चयन गरिएको सङ्ग्रहबाट फाइलहरू निकाल्नुहोस्" -0200010D="{0} मा निकाल्नुहोस्" -0200010E="सहायक फोल्डरमा फाइलहरू निकाल्दछ" -0200010F="{0} मा थप्नुहोस्" -02000110="चयन गरिएका वस्तुहरू सङ्ग्रह थप्दछ" -02000111="सङ्कुचन गरेर इमेल गर्नुहोस्..." -02000112="चयन गरिएका वस्तुलाई सङ्ग्रहमा सङ्कुचन गर्दछ र इमेल मार्फत सङ्ग्रहमा पठाउदछ" -02000113="{0} मा सङ्कुचन गर्नुहोस् र इमेल गर्नुहोस्" -02000114="चयन गरिएका वस्तुलाई सङ्ग्रहमा सङ्कुचन गर्दछ र इमेल मार्फत सङ्ग्रहमा पठाउदछ" - -02000140="" -02000141="" - -; Properties -02000203="मार्ग" -02000204="नाम" -02000205="विस्तार" -02000206="फोल्डर" -02000207="साइज" -02000208="प्याक गरिएको साइज" -02000209="विशेषता" -0200020A="सिर्जित" -0200020B="पहुँच" -0200020C="परिमार्जित" -0200020D="ठोस" -0200020E="टिप्पणी" -0200020F="गुप्तिकृत" -02000210="यस पहिले विभाजन गर्नुहोस्" -02000211="यस पछि विभाजन गर्नुहोस्" -02000212="शब्दकोश" -02000213="CRC" -02000214="प्रकार" -02000215="बिरोधि" -02000216="विधि" -02000217="होस्ट OS" -02000218="फाइल प्रणाली" -02000219="प्रयोगकर्ता" -0200021A="समूह" -0200021B="रोक" -0200021C="टिप्पणी" -0200021D="स्थान" -0200021E="मार्ग प्रत्यय" - -; वस्तुस्थिति पट्टी -02000301="{0} वस्तु(हरू) चयन गरियो" -02000302="{0} वस्तु(हरू)" - -02000320="फाइल:" -02000321="फोल्डर:" -02000322="साइज:" - -; प्रसङ्ग मेनु सूची -02000401="&स्तम्भ..." - -02000411="&खोल्नुहोस्" -02000412="&निकाल्नुहोस्..." - -; उपकरणपट्टी -02000501="निकाल्नुहोस्" - -; सन्देश -02000601="यो सङ्ग्रहका लागि अद्यावधिक सञ्चालन समर्थन गर्दैन" -02000602="सङ्ग्रह {0} अद्यावधिक गर्न सकिदैन" -02000603="'{0}'फोल्डर सिर्जना गर्न सकिदैन" -02000604="फाइलले सङ्ग्रह समर्थन गर्दैन" -02000605="त्रुटि" -02000606="धेरै वस्तु" -02000607="त्यहाँ दिइएको फाइल नाम विस्तारसँग सम्बन्धित अनुप्रयोग छैन" -02000608="त्यहाँ त्रुटि छैन" - -; संवाद -02000702="ठीक छ" -02000705="&हो" -02000707="&सबैलाई हो" -02000709="&होइन" -0200070B="&कसैलाई होइन" - -02000710="रद्द गर्नुहोस्" -02000711="&रद्द गर्नुहोस्" -02000713="&बन्द गर्नुहोस्" -02000714="रोक्नुहोस्" -02000715="पुन: सुरु गर्नुहोस्" - -02000720="मद्दत" - -; संवाद निकाल्नुहोस् -02000800="निकाल्नुहोस्" -02000801="यसलाई निकाल्नुहोस्:" -02000802="पासवर्ड" - -02000810="मार्ग मोड" -02000811="पूरा मार्गनाम" -02000812="हालको मार्गनामहरू" -02000813="मार्गनामहरू छैन" - -02000820="अधिलेखन मोड" -02000821="अधिलेखन गर्नु अगाडि सोध्नुहोस्" -02000822="प्रोम्टबिना अधिलेखन गर्नुहोस्" -02000823="अवस्थित फाइलहरू फड्काउनुहोस्" -02000824="स्वचालित पुन: नामकरण" -02000825="स्वचालित पुन: नामकरण अवस्थित फाइलहरू" - -02000830="फाइल" -02000831="&चयन गरिएको फाइल" -02000832="&सबै फाइल" - -02000881="निकालिएको फाइलका लागि स्थान निर्दिष्ट गर्नुहोस्" - -02000890="निकाल्दैछ" - -; अधिलेखन संवाद -02000900="फाइल प्रतिस्थापन यकिन गर्नुहोस्" -02000901="गन्तव्य फोल्डरले पहिले नै प्रक्रिया गरिएको फाइल समावेश गर्दछ" -02000902="अवस्थित फाइलमा प्रतिस्थापन गर्न चाहनुहुन्छ" -02000903="योसँग?" - -02000911="स्वचालित पुन: नामकरण" - -02000982="{0} बाइट" -02000983="यसमा परिमार्जित" - -; सन्देश संवाद -02000A00="निदानात्मक सन्देश" - -02000A80="सन्देश" - -02000A91="'{0}'का लागि असमर्थित सङ्कुचन विधि " -02000A92="'{0}'लगत त्रुटि । फाइल बिग्रेको छ" -02000A93="'{0}' मा CRC असफल । फाइल बिग्रेको छ" - -; पासवर्ड संवाद -02000B00="पासवर्ड प्रविष्ट गर्नुहोस्" -02000B01="पासवर्ड प्रविष्ट गर्नुहोस्:" -02000B02="&पासवर्ड देखाउनुहोस्" - -; प्रगित संवाद -02000C00="प्रक्रिया" -02000C01="व्यतीत समय:" -02000C02="पुन: नामकरण समय:" -02000C03="साइज:" -02000C04="गति:" - -02000C10="&पृष्ठभुमि" -02000C11="&अग्रभुमि" -02000C12="&पज गर्नुहोस्" -02000C13="&जारी राख्नुहोस्" - -02000C20="पज गरिएको" - -02000C30="तपाईँ रद्द गर्न यकिन हुनुहुन्छ ?" - -; सङ्कुचन संवाद -02000D00="सङ्ग्रहमा थप्नुहोस्" -02000D01="&सङ्ग्रह:" -02000D02="&अद्यावधिक मोड:" -02000D03="सङ्ग्रह ढाँचा:" -02000D04="सङ्कुचन विधि:" -02000D05="ठोस सङ्ग्रह सिर्जना गर्नुहोस्" -02000D06="&परिमिति:" -02000D07="विकल्प" -02000D08="SF&X सङ्ग्रह सिर्जना गर्नुहोस्" -02000D09="मल्टि-थ्रेडिङ" -02000D0A="फाइलनाम गुप्तिकरण गर्नुहोस्" -02000D0B="सङ्कुचन स्तर:" -02000D0C="&शब्दकोश साइज:" -02000D0D="&शब्द साइज:" -02000D0E="सङ्कुचनका लागि स्मृति प्रयोग:" -02000D0F="असङ्कुचनका लागि स्मृति प्रयोग:" - -02000D40="भोल्युम, बाइटमा विभाजन गर्नुहोस्:" - -02000D81="भण्डार गर्नुहोस्" -02000D82="साधारण" -02000D83="अधिकतम" -02000D84="छिटो" -02000D85="सब भन्दा छिटो" -02000D86="अत्यन्त" - -02000D90="ब्राउज गर्नुहोस्" - -02000DA1="फाइल थपेर प्रतिस्थापन गर्नुहोस्" -02000DA2="फाइलहरू अद्यावधिक गरेर थप्नुहोस्" -02000DA3="अवस्थित फाइल ताजा गर्नुहोस्" -02000DA4="फाइल समक्रमण गर्नुहोस्" - -02000DB1="सबै फाइल" - -02000DC0="सङ्कुचन" - -; स्तम्भ संवाद -02000E00="स्तम्भ" -02000E01="यो फोल्डरमा देखिने बनाउन चाहनु भएको स्तम्भ जाँच गर्नुहोस् । स्तम्भलाई पुन: क्रमबद्ध गर्न 'माथि सार्नुहोस्' र 'तल सार्नुहोस्' बटनको प्रयोग गर्नुहोस् " -02000E02="चयन गरिएको स्तम्भ हुनुपर्दछ" -02000E03="फराकिलो पिक्सेल" - -02000E10="माथि सार्नुहोस्" -02000E11="तल सार्नुहोस्" -02000E12="&देखाउनुहोस्" -02000E13="&लुकाउनुहोस्" -02000E14="सेट गर्नुहोस्" - -02000E81="शीर्षक" -02000E82="चौडाइ" - -; परीक्षण -02000F90="परीक्षण" - - -; फाइल प्रबन्धक - -03000000="7-जिप फाइल प्रबन्धक" - -; मेनु -03000102="&फाइल" -03000103="&सम्पादन गर्नुहोस्" -03000104="&हेर्नुहोस्" -03000105="&उपकरण" -03000106="&मद्दत" -03000107="&रुचाइएको" - -; फाइल -03000210="&खोल्नुहोस्" -03000211="भित्रपट्टि खोल्नुहोस्" -03000212="बाहरिपट्टि खोल्नुहोस्" -03000220="&हेर्नुहोस्" -03000221="&सम्पादन गर्नुहोस्" -03000230="पुन: नामकरण गर्नुहोस्" -03000231="&यसमा प्रतिलिपि बनाउनुहोस्..." -03000232="&यसमा सार्नुहोस्..." -03000233="&मेट्नुहोस्" -03000240="&गुण" -03000241="टिप्पणी" -03000242="checksum गणना गर्नुहोस्" -03000250="फोल्डर सिर्जना गर्नुहोस्" -03000251="फाइल सिर्जना गर्नुहोस्" -03000260="निस्कनुहोस्" -03000270="&फाइल विभाजन गर्नुहोस्..." -03000271="फाइलहरू संयोजन गर्नुहोस्..." - -; सम्पादन -03000310="&पूर्वस्थितिमा फर्काउनुहोस्" -03000311="&रिडु गर्नुहोस्" -03000320="काँट्नुहोस्" -03000321="&प्रतिलिपि बनाउनुहोस्" -03000322="&टाँस्नुहोस्" -03000323="&मेट्नुहोस्" -03000330="सबै चयन गर्नुहोस्" -03000331="सबै मेट्नुहोस्" -03000332="&चयन उल्टाउनुहोस्" -03000333="चयन गर्नुहोस्..." -03000334="चयन हटाउनुहोस्..." -03000335="प्रकार अनुसार चयन गर्नुहोस्" -03000336="प्रकार अनुसार चयन हटाउनुहोस्" - -; दृश्य -03000410="ठूलो प्रतिमा" -03000411="सानो प्रतिमा" -03000412="&सूची" -03000413="&वर्णन" -03000420="क्रमबद्ध नगरिएको" -03000430="प्रमूल फोल्डर खोल्नुहोस्" -03000431="एक स्तर माथि" -03000432="फोल्डरको इतिहार..." -03000440="&ताजा गर्नुहोस्" -03000449="फ्ल्याट दृश्य" -03000450="&२ प्यानल" -03000451="&उपकरणपट्टी" -03000460="सङ्ग्रह उपकरणपट्टी" -03000461="मानक उपकरणपट्टी" -03000462="ठूलो बटन" -03000463="बटनको पाठ देखाउनुहोस्" - -; उपकरण -03000510="&विकल्प..." -03000511="&बेञ्चमार्क" - -; मद्दत -03000610="&सामग्री..." -03000620="&7-जिपका बारेमा..." - -; रूचाइएको -03000710="&यस रूपमा रूचाइएकोमा फोल्डर थप्नुहोस्" -03000720="पुस्तकचिनो" - -; विकल्प संवाद - -03010000="विकल्प" - -; प्लगइन -03010100="प्लगइन" -03010101="&प्लगइन:" -03010110="विकल्प..." - -; सम्पादन -03010200="सम्पादक" -03010201="&सम्पादक:" - -; प्रणाली -03010300="प्रणाली" -03010302="यससँग 7-जिप सम्बन्धित:" -03010310="प्लगइन" - -; सेटिङ -03010400="सेटिङ" -03010401="\"..\" वस्तु देखाउनुहोस्" -03010402="वास्तविक फाइल प्रतिमा देखाउनुहोस्" -03010410="प्रणाली मेनु देखाउनुहोस्" -03010420="&पूरा पङ्क्ति चयन" -03010421="ग्रिड रेखा देखाउनुहोस्" -03010430="&वैकल्पिक चयन मोड" -03010440="ठूलो स्मृति पृष्ठ प्रयोग गर्नुहोस्" - -; सेटिङ - -03020201="प्रतिलिपि गर्नुहोस्" -03020202="सार्नुहोस्" -03020203="यसमा प्रतिलिपि गर्नुहोस्:" -03020204="यसमा सार्नुहोस्:" -03020205="प्रतिलिपि गर्दैछ..." -03020206="सार्दैछ..." -03020207="यस्तो फोल्डरकाल लागि तपाईँले वस्तुहरू सार्न र प्रतिलिपि गर्न सक्नुहुदैन" -03020208="सञ्चालन समर्थन गर्दैन" - -03020210="फाइल मेट्न यकिन गर्नुहोस्" -03020211="फोल्ड मेट्न यकिन गर्नुहोस्" -03020212="बहुविध फाइल मेट्न यकिन गर्नुहोस्" -03020213="तपाईँ '{0}'मेट्न निश्चित हुनुहुन्छ ?" -03020214="तपाईँ '{0}' फोल्डर यसको सबै सामग्री मेट्न निश्चित हुनुहुन्छ ?" -03020215="तपाईँ {0} वस्तुहरू मेट्न निश्चित हुनुहुन्छ ?" -03020216="मेट्दैछ..." -03020217="फाइल वा फोल्डर मेट्दा त्रुटि" - -03020220="पुन: नामकरण..." -03020221="फाइल वा फोल्डर पुन: नामकरण गर्दा त्रुटि" -03020222="फाइल प्रतिलिपि गर्न यकिन गर्नुहोस्" -03020223="तपाईँ फाइलहरू सङ्ग्रहमा प्रतिलिपि गर्न निश्चित हुनुहुन्छ" - -03020230="फोल्डर सिर्जना गर्नुहोस्" -03020231="फोल्डर नाम:" -03020232="नयाँ फोल्डर" -03020233="फोल्डर सिर्जना गर्दा त्रुटि" - -03020240="फाइल सिर्जना गर्नुहोस्" -03020241="फाइल नाम:" -03020242="नयाँ फाइल" -03020243="फाइल सिर्जना गर्दा त्रुटि" - -03020250="चयन गर्नुहोस्" -03020251="चयन हटाउनुहोस्" -03020252="मास्क:" - -03020260="फोल्डर इतिहार" - -03020280="'{0}'फाइल परिमार्जन गरिएको छ ।\nतपाईँले यसलाई सङ्ग्रहमा अद्यावधिक गर्न चाहनुहुन्छ ?" -03020281="फाइल अद्यावधिक गर्न सकिदैन\n'{0}'" -03020282="सम्पादक सुरु गर्न सकिदैन" -03020283="खोल्दैछ..." - -03020290="टिप्पणी" -03020291="&टिप्पणी:" - -030202A0="प्रणाली" - -03020300="कम्प्युटर" -03020301="सञ्जाल" - -03020400="थप्नुहोस्" -03020401="निकाल्नुहोस्" -03020402="परीक्षण गर्नुहोस्" - -03020420="प्रतिलिपि गर्नुहोस्" -03020421="सार्नुहोस्" -03020422="मेट्नुहोस्" -03020423="सूचना" - -03020500="फाइल विभाजन गर्नुहोस्" -03020501="&यसमा विभाजन गर्नुहोस्:" -03020510="विभाजन गर्दैछ..." - -03020600="फाइल संयोजन गर्नुहोस्" -03020601="&यसमा संयोजन गर्नुहोस्:" -03020610="संयोजन गर्दैछ..." - -03020710="Checksum गणना गर्दैछ..." -03020720="Checksum सूचना" -03020721="लगतका लागि CRC checksum:" -03020722="लगत र नामहरूका लागि CRC checksum:" - -03020800="स्क्यानिङ..." - -; कम्प्युटर -03031100="जम्मा साइज" -03031101="स्वतन्त्र रिक्तस्थान" -03031102="समूह साइज" -03031103="लेबुल" - -; सञ्जाल -03031200="स्थानिय नाम" -03031201="प्रदायक" - -; बेञ्चमार्क संवाद - -03080000="बेञ्चमार्क" -03080001="स्मृति उपयोग:" -03080002="सङ्कुचन" -03080003="असङ्कुचन" -03080004="गति" -03080005="दर" -03080006="जम्मा दर" -03080007="हालको" -03080008="नतिजा" -03080009="पास:" -0308000A="त्रुटि:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/nl.txt b/External/7-Zip/Lang/nl.txt deleted file mode 100644 index d00b470a8..000000000 --- a/External/7-Zip/Lang/nl.txt +++ /dev/null @@ -1,545 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Jeroen Tulp - Vertaald door Jeroen Tulp -; -; Changed and updated translations as done for 7-Zip 4.26 Beta by Jeroen van der Weijde. -; -; Special thanks to Fuss! and r00n for their support in perfecting these translations. - -00000000="Dutch" -00000001="Nederlands" -00000002="19" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Configuratie" - -; Info Page -01000100="Over 7-Zip" -01000103="7-Zip is gratis software. Echter, u kunt de ontwikkeling van 7-Zip ondersteunen door u te registreren." -01000104="&Ondersteuning" -01000105="&Registreren" - -; Folders Page -01000200="Mappen" -01000210="&Werkmap" -01000211="&Tijdelijke systeemmap" -01000212="&Huidige" -01000213="&Gespecificeerd:" -01000214="Alleen voor verwisselbare schijven gebruiken." - -01000281="Specificeer een locatie voor tijdelijke archiefbestanden." - -; System Page -01000300="Systeem" -01000301="7-Zip in het contextmenu integreren." -01000302="Trapsgewijs contextmenu" -01000310="Contextmenu items:" - -; Language Page -01000400="Taal" -01000401="Taal:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip opdrachten" -02000103="Open archief" -02000104="Opent het geselecteerde archief." -02000105="Bestanden uitpakken..." -02000106="Bestanden uitpakken voor het geselecteerde archief." -02000107="Toevoegen aan archief..." -02000108="Toevoegen van de geselecteerde items aan een archief." -02000109="Archief testen" -0200010A="Integriteit van het geselecteerde archief testen." -0200010B="Pak hier uit" -0200010C="Pakt bestanden in het archief uit naar de huidige map." -0200010D="Pak uit naar {0}" -0200010E="Pakt bestanden in het archief uit naar een submap." -0200010F="Toevoegen aan {0}" -02000110="Toevoegen van geselecteerde items aan het archief." -02000111="Comprimeer en verstuur..." -02000112="Comprimeert de geselecteerde items in een archief en verstuur het via e-mail." -02000113="Comprimeer naar {0} en verstuur" -02000114="Comprimeert de geselecteerde items in het archief en verstuur het via e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Pad" -02000204="Naam" -02000205="Extensie" -02000206="Map" -02000207="Grootte" -02000208="Ingepakte grootte" -02000209="Kenmerken" -0200020A="Aangemaakt" -0200020B="Laatst geopend" -0200020C="Gewijzigd" -0200020D="Compact" -0200020E="Commentaar" -0200020F="Gecodeerd" -02000210="Gesplitst voor" -02000211="Gesplitst na" -02000212="Woordenboek" -02000213="CRC" -02000214="Type" -02000215="Anti" -02000216="Methode" -02000217="Gastheer OS" -02000218="Bestandssysteem" -02000219="Gebruiker" -0200021A="Groep" -0200021B="Blok" -0200021C="Opmerking" -0200021D="Positie" -0200021E="Pad Prefix" -0200021F="Mappen" -02000220="Bestanden" -02000221="Versie" -02000222="Volume" -02000223="Multivolume" -02000224="Offset" -02000225="Koppelingen" -02000226="Blokken" -02000227="Volumes" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Fysieke grootte" -0200022D="Kop grootte" -0200022E="Checksum" -0200022F="Karakteristieken" -02000230="Virtueel Adres" -02000231="ID" -02000232="Korte Naam" -02000233="Aanmaak Applicatie" -02000234="Sector Grootte" -02000235="Modus" -02000236="Link" - -; Status bar -02000301="{0} item(s) geselecteerd" -02000302="{0} item(s)" - -02000320="Bestanden:" -02000321="Mappen:" -02000322="Grootte:" -02000323="Gecomprimeerde grootte:" -02000324="Archieven:" - -; List Context Menu -02000401="&Kolommen..." - -02000411="&Openen" -02000412="&Uitpakken..." - -; ToolBar -02000501="Uitpakken" - -; Messages -02000601="Bijwerkfuncties niet ondersteund voor dit archief." -02000602="Kan archief {0} niet bijwerken." -02000603="Kan map '{0}' niet aanmaken." -02000604="Dit bestand is geen ondersteund archief." -02000605="Fout" -02000606="Te veel items" -02000607="Er is geen programma geassocieerd met deze bestandsextensie." -02000608="Er zijn geen fouten." -02000609="Kan bestand '{0}' niet openen als archief." -0200060A="Kan het gecodeerde archief '{0}' niet openen. Verkeerd wachtwoord?" -0200060B="Het systeem kan de benodigde hoeveelheid geheugen niet alloceren" -0200060C="Onbekende fout" -0200060D="Niet ondersteund archief type" - -; Dialogs -02000702="OK" -02000705="&Ja" -02000707="Ja op &alles" -02000709="&Nee" -0200070B="Nee op a&lles" - -02000710="Annuleren" -02000711="&Annuleren" -02000713="A&fsluiten" -02000714="Stop" -02000715="Herstarten" - -02000720="Help" - -; Extract dialog -02000800="&Uitpakken" -02000801="U&itpakken naar:" -02000802="&Wachtwoord" - -02000810="Padmethode" -02000811="Volledige padnamen" -02000812="Huidige padnamen" -02000813="Geen padnamen" - -02000820="Overschrijfmethode" -02000821="Vraag voor overschrijven" -02000822="Overschrijven zonder bevestiging" -02000823="Bestaande bestanden overslaan" -02000824="Automatisch hernoemen" -02000825="Automatisch hernoemen van bestaande bestanden" - -02000830="Bestanden" -02000831="&Geselecteerde bestanden" -02000832="&Alle bestanden" - -02000881="Geef een locatie op voor de uitgepakte bestanden." - -02000890="Bezig met uitpakken..." - -; Overwrite dialog -02000900="Bevestig vervangen bestand" -02000901="Doelmap bevat reeds het verwerkte bestand." -02000902="Wilt u het bestaande bestand vervangen" -02000903="door dit bestand?" - -02000911="A&utomatisch hernoemen" - -02000982="{0} bytes" -02000983="gewijzigd op" - -; Messages dialog -02000A00="Diagnostische berichten" - -02000A80="Bericht" - -02000A91="Niet ondersteunde compressiemethode voor '{0}'." -02000A92="Gegevensfout in '{0}'. Bestand is beschadigd." -02000A93="CRC mislukt in '{0}'. Bestand is beschadigd." -02000A94="Gegevensfout in het gecodeerde bestand '{0}'. Verkeerd wachtwoord?" -02000A95="CRC mislukt in het gecodeerde bestand '{0}'. Verkeerd wachtwoord?" - -; Password dialog -02000B00="Wachtwoord ingeven" -02000B01="Wachtwoord &ingeven:" -02000B02="Wachtwoord &tonen" -02000B03="Wachtwoord bevestigen:" -02000B10="Wachtwoorden komen niet overeen." -02000B11="Gebruik alleen alfanumerieke en speciale karakters (!, #, $, ...) voor het wachtwoord." -02000B12="Wachtwoord is te lang." - -; Progress dialog -02000C00="Verwerking" -02000C01="Verstreken tijd:" -02000C02="Overgebleven tijd:" -02000C03="Grootte:" -02000C04="Snelheid:" -02000C05="Verwerkt:" -02000C06="Compressie verhouding:" - -02000C10="&Achtergrond" -02000C11="&Voorgrond" -02000C12="&Pauzeren" -02000C13="&Hervatten" - -02000C20="Gepauzeerd" - -02000C30="Weet u zeker dat u wilt annuleren?" - -; Compress dialog -02000D00="Toevoegen aan archief" -02000D01="&Archief:" -02000D02="&Bijwerkmethode:" -02000D03="Archief &formaat:" -02000D04="Compressie&methode:" -02000D05="&Compact archief maken" -02000D06="&Parameters:" -02000D07="Opties" -02000D08="SF&X archief maken" -02000D09="Multi-threading" -02000D0A="Codee&r bestandsnamen" -02000D0B="Compressie&niveau:" -02000D0C="&Woordenboekgrootte:" -02000D0D="W&oordgrootte:" -02000D0E="Geheugengebruik bij het inpakken:" -02000D0F="Geheugengebruik bij het uitpakken:" -02000D10="Codering" -02000D11="Cod&eermethode:" -02000D12="Aantal CP&U-threads:" -02000D13="Compacte b&lokgrootte:" -02000D14="Niet compact" -02000D15="Compact" -02000D16="Comprimeer &gedeelde bestanden" - -02000D40="Opsplitsen in &volumes (grootte in bytes):" -02000D41="Verkeerde volumegrootte" -02000D42="Gespecificeerde volumegrootte: {0} bytes.\nWeet u zeker dat u het archief zo wilt splitsen?" - -02000D81="Opslaan" -02000D82="Normaal" -02000D83="Maximum" -02000D84="Snel" -02000D85="Snelst" -02000D86="Ultra" - -02000D90="Bladeren" - -02000DA1="Bestanden toevoegen en vervangen" -02000DA2="Bestanden bijwerken en toevoegen" -02000DA3="Bestaande bestanden opfrissen" -02000DA4="Bestanden synchroniseren" - -02000DB1="Alle bestanden" - -02000DC0="Bezig met comprimeren..." - -; Columns dialog -02000E00="Kolommen" -02000E01="Markeer de kolommen die u zichtbar wilt maken in deze map. Gebruik de omhoog en omlaag knoppen om de kolommen te rangschikken." -02000E02="De gemarkeerde kolom moet" -02000E03="pixels &breed zijn." - -02000E10="Om&hoog verplaatsen" -02000E11="Om&laag verplaatsen" -02000E12="&Tonen" -02000E13="&Verbergen" -02000E14="Instellen" - -02000E81="Titel" -02000E82="Breedte" - -; Testing -02000F90="Bezig met testen..." - - -; File Manager - -03000000="7-Zip Bestandsbeheer" - -; Menu -03000102="&Bestand" -03000103="Be&werken" -03000104="Bee&ld" -03000105="E&xtra" -03000106="&Help" -03000107="&Favorieten" - -; File -03000210="&Openen" -03000211="Open B&innen" -03000212="Open B&uiten" -03000220="Bee&ld" -03000221="&Bewerken" -03000230="Naam wi&jzigen" -03000231="Kopiëren &naar..." -03000232="&Verplaatsen naar..." -03000233="Verwij&deren" -03000240="Ei&genschappen" -03000241="O&pmerking" -03000242="&Checksum berekenen" -03000243="Vergelijken" -03000250="Nieuwe &map" -03000251="Nieuw b&estand" -03000260="&Sluiten" -03000270="Bestand opspli&tsen..." -03000271="Bestanden s&amenvoegen..." - -; Edit -03000310="&Ongedaan maken" -03000311="&Opnieuw" -03000320="Kn&ippen" -03000321="&Kopiëren" -03000322="P&lakken" -03000323="Verwij&deren" -03000330="&Alles selecteren" -03000331="All&es de-selecteren" -03000332="Sele&ctie omkeren" -03000333="&Selecteer..." -03000334="&De-selecteer..." -03000335="&Selecteer op type" -03000336="&De-selecteer op type" - -; View -03000410="&Grote pictogrammen" -03000411="&Kleine pictogrammen" -03000412="&Lijst" -03000413="&Details" -03000420="&Ongesorteerd" -03000430="&Root map openen" -03000431="Één &niveau omhoog" -03000432="&Mappen Geschiedenis..." -03000440="&Vernieuwen" -03000449="&Platte weergave" -03000450="&2 Panelen" -03000451="&Werkbalken" -03000460="&Archief werkbalk" -03000461="&Standaard werkbalk" -03000462="Grote kn&oppen" -03000463="Knop&tekst weergeven" - -; Tools -03000510="&Opties..." -03000511="&Benchmark" - -; Help -03000610="&Inhoud..." -03000620="&Over 7-Zip..." - -; Favorites -03000710="&Map toevoegen aan favorieten" -03000720="Toevoegen als" - -; Options Dialog - -03010000="Opties" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="&Opties..." - -; Edit -03010200="Editor" -03010201="&Editor:" -03010202="&Vergelijken:" - -; System -03010300="Systeem" -03010302="Associeer 7-Zip met:" -03010310="Plugin" - -; Settings -03010400="Instellingen" -03010401="Toon \"..\" &item" -03010402="Toon &echte bestandspictogrammen" -03010410="Toon &systeem contextmenu" -03010420="&Selecteer gehele rij" -03010421="Toon &rasterlijnen" -03010422="Enkele klik om een item te openen" -03010430="&Alternatieve selectiemodus" -03010440="&Gebruik grote geheugenpagina's" - -; Strings - -03020201="Kopiëren" -03020202="Verplaatsen" -03020203="Kopiëren naar:" -03020204="Verplaatsen naar:" -03020205="Bezig met kopiëren..." -03020206="Bezig met verplaatsen..." -03020207="U kunt items niet verplaatsen of kopiëren voor dergelijke mappen." -03020208="Functie wordt niet ondersteund." -03020209="Selecteer een doelmap." - -03020210="Verwijdering bestand bevestigen" -03020211="Verwijdering map bevestigen" -03020212="Verwijdering van meerdere bestanden bevestigen" -03020213="Weet u zeker dat u '{0}' wilt verwijderen?" -03020214="Weet u zeker dat u de map '{0}' en alle onderliggende items wilt verwijderen?" -03020215="Weet u zeker dat u deze {0} items wilt verwijderen?" -03020216="Bezig met verwijderen..." -03020217="Fout bij het verwijderen van een bestand of map" -03020218="Het systeem kan een bestand met een lang pad niet verplaatsen naar de Prullenbak" - -03020220="Bezig met hernoemen..." -03020221="Fout bij het hernoemen van een bestand of map" -03020222="Bevestig kopiëren van bestand" -03020223="Weet u zeker dat u deze bestanden naar het archief wilt kopiëren" - -03020230="Map maken" -03020231="Naam van de map:" -03020232="Nieuwe map" -03020233="Fout bij het maken van de map" - -03020240="Bestand maken" -03020241="Bestandsnaam:" -03020242="Nieuw bestand" -03020243="Fout bij het maken van het bestand." - -03020250="Selecteren" -03020251="De-selecteren" -03020252="Masker:" - -03020260="Mappen Geschiedenis" - -03020280="Bestand '{0}' is gewijzigd.\nWilt u het bijwerken in het archief?" -03020281="Kan bestand\n'{0}' niet bijwerken." -03020282="Kan de editor niet starten." -03020283="Bezig met openen..." -03020284="Het bestand lijkt op een virus (het bevat veel opeenvolgende spaties in de naam)." - -03020290="Opmerking" -03020291="&Opmerking:" - -030202A0="Systeem" - -03020300="Computer" -03020301="Netwerk" -03020302="Documenten" - -03020400="Toevoegen" -03020401="Uitpakken" -03020402="Testen" - -03020420="Kopiëren" -03020421="Verplaatsen" -03020422="Verwijderen" -03020423="Info" - -03020500="Opsplitsen bestand" -03020501="&Opsplitsen naar:" -03020510="Bezig met opsplitsen..." -03020520="Bevestigen opsplitsen" -03020521="Weet u zeker dat u het bestand wilt opsplitsen in {0} volumes?" -03020522="De volumegrootte moet kleiner zijn dan de grootte van het oorspronkelijke bestand." - -03020600="Bestanden samenvoegen" -03020601="&Samenvoegen naar:" -03020610="Bezig met samenvoegen..." -03020620="Selecteer alleen het eerste bestand." -03020621="Kan het bestand niet herkennen als onderdeel van een gesplitst bestand" -03020622="Kan niet meer dan 1 deel van een gesplitst bestand" - -03020710="Bezig met checksum berekenen..." -03020720="Checksum informatie" -03020721="CRC checksum voor gegevens:" -03020722="CRC checksum voor gegevens en namen:" - -03020800="Bezig met scannen..." - -03020900="Eigenschappen" - -03020A01="De actie kan niet worden uitgevoerd vanuit een folder met een dermate lang pad." -03020A02="U moet 1 bestand selecteren" -03020A03="U moet 1 of meerdere bestanden selecteren" -03020A04="Bestand {0} bestaat reeds" - -; Computer -03031100="Capaciteit" -03031101="Beschikbaar" -03031102="Clustergrootte" -03031103="Label" - -; Network -03031200="Lokale naam" -03031201="Provider" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Geheugengebruik:" -03080002="Inpakken" -03080003="Uitpakken" -03080004="Snelheid" -03080005="Waarde" -03080006="Totale waarde" -03080007="Huidig" -03080008="Resultaat" -03080009="Doorgangen:" -0308000A="Fouten:" -0308000B="CPU-gebruik" -0308000C="Waarde / gebruik" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/nn.txt b/External/7-Zip/Lang/nn.txt deleted file mode 100644 index a3993b4d7..000000000 --- a/External/7-Zip/Lang/nn.txt +++ /dev/null @@ -1,496 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.45 -; Translated by Robert Grønning -; -; -; -; - -00000000="Norwegian Nynorsk" -00000001="Norsk Nynorsk" -00000002="20-2" - -; 7-Zip Configuration - -; Title -01000000="7-Zip innstillingar" - -; Info Page -01000100="Om 7-Zip" -01000103="7-Zip er fri programvare. Du kan støtta utviklinga av 7-Zip ved å registrere deg." -01000104="Brukarstøtte" -01000105="Registrering" - -; Folders Page -01000200="Mapper" -01000210="&Arbeidsmappe" -01000211="&Midlertidig mappe" -01000212="&Noverande" -01000213="&Eigendefinert:" -01000214="Berre for flyttbare stasjonar" - -01000281="Oppgje plassering for midlertidige arkiv filer." - -; System Page -01000300="System" -01000301="Legg inn 7-Zip i programmenyen" -01000302="Forgreina programmeny" -01000310="Programmeny val:" - -; Language Page -01000400="Språk" -01000401="Språk:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip kommandoar" -02000103="Opna arkiv" -02000104="Opna valt arkiv." -02000105="Pakk ut filer..." -02000106="Pakk ut filer frå valt arkiv." -02000107="Legg til i arkiv..." -02000108="Legg til utval i arkiv." -02000109="Test arkiv" -0200010A="Testar integriteten til valt arkiv." -0200010B="Pakk ut her" -0200010C="Pakkar ut filer frå valt arkiv til denne mappa." -0200010D="Pakk ut til {0}" -0200010E="Pakkar ut filer til undermappe." -0200010F="Legg til i {0}" -02000110="Legg utval til i arkiv." -02000111="Komprimere og send som epost..." -02000112="Komprimere utval til et arkiv og send det som epost." -02000113="Komprimere til {0} og send som epost" -02000114="Komprimere utval til et arkiv og send det som epost." - -02000140="" -02000141="" - -; Properties -02000203="Bane" -02000204="Namn" -02000205="Fil etternamn" -02000206="Mappe" -02000207="Størrelse" -02000208="Komprimert Størrelse" -02000209="Eigenskapar" -0200020A="Oppretta" -0200020B="Opna" -0200020C="Endra" -0200020D="Solid" -0200020E="Kommentert" -0200020F="Kryptert" -02000210="Delt før" -02000211="Delt etter" -02000212="Ordbok" -02000213="CRC" -02000214="Type" -02000215="Anti" -02000216="Metode" -02000217="Vert OS" -02000218="Filsystem" -02000219="Brukar" -0200021A="Gruppe" -0200021B="Blokkering" -0200021C="Kommentar" -0200021D="Posisjon" -0200021E="Bane prefiks" - -; Status bar -02000301="{0} objekt(ar) valt" -02000302="{0} objekt(ar)" - -02000320="Filer:" -02000321="Mapper:" -02000322="Størrelse:" - -; List Context Menu -02000401="&Kolonner..." - -02000411="&Opna" -02000412="&Pakk ut..." - -; ToolBar -02000501="Pakk ut" - -; Messages -02000601="Dette arkivet manglar støtte for å kunne oppdaterast." -02000602="Kan ikkje oppdatere arkiv {0}" -02000603="Kan ikkje oppretta mappe '{0}'" -02000604="Fila er ikkje eit støtta arkiv." -02000605="Feil" -02000606="For mange gonger" -02000607="Ingen program er tilknytt dette fil etternamnet" -02000608="Ingen feil" -02000609="Kan ikkje opna fila '{0}' som eit arkiv" -0200060A="Kan ikkje opna det krypterte arkivet '{0}'. Feil passord?" - -; Dialogs -02000702="OK" -02000705="&Ja" -02000707="Ja til &alt" -02000709="&Nei" -0200070B="N&ei til alt" - -02000710="Avbryt" -02000711="&Avbryt" -02000713="&Lukke" -02000714="Stopp" -02000715="Start på nytt" - -02000720="Hjelp" - -; Extract dialog -02000800="Pakk ut" -02000801="Pakk ut &til:" -02000802="Passord" - -02000810="Bane modus" -02000811="Fulstendig banenamn" -02000812="Noverande banenamn" -02000813="Ingen banenamn" - -02000820="Overskriving modus" -02000821="Bekrefta før overskriving" -02000822="Skriv over utan bekrefting" -02000823="Hopp over eksisterande filer" -02000824="Endra filnamn automatisk" -02000825="Endra filnamn automatisk for eksisterande filer" - -02000830="Filer" -02000831="&Valte filer" -02000832="&Alle filer" - -02000881="Vel ei mappe for ut-pakka filer." - -02000890="Pakkar ut" - -; Overwrite dialog -02000900="Bekrefta overskriving av fil" -02000901="Målmappa inneheld allereie ei behandla fil." -02000902="Vil du overskriva den eksisterande fila" -02000903="med denne?" - -02000911="&Skift filnamn automatisk" - -02000982="{0} byte" -02000983="endra på" - -; Messages dialog -02000A00="Diagnose meldingar" - -02000A80="Melding" - -02000A91="Kompresjonsmetoden er ikkje støtta for '{0}'." -02000A92="Data feil i '{0}'. Fila er øydelagt." -02000A93="CRC feila på '{0}'. Fila er øydelagt." -02000A94="Data feil i den krypterte fila '{0}'. Feil passord?" -02000A95="CRC feila i den krypterte fila '{0}'. Feil passord?" - -; Password dialog -02000B00="Skriv inn passord" -02000B01="Skriv inn passord:" -02000B02="&Vis passord" -02000B03="Skriv inn passordet på nytt:" -02000B10="Passorda er ikkje like" -02000B11="Bruk berre Engelske bokstavar, tal og spesielle teikn (!, #, $, ...) i passordet" -02000B12="Passordet er for langt" - -; Progress dialog -02000C00="Prosess" -02000C01="Tid brukt:" -02000C02="Tid gjenstår:" -02000C03="Størrelse:" -02000C04="Fart:" - -02000C10="&Bakgrunn" -02000C11="&Forgrunn" -02000C12="&Pause" -02000C13="&Hald fram" - -02000C20="Sett på pause" - -02000C30="Er du sikker på du vil avbryte?" - -; Compress dialog -02000D00="Legg til i arkiv" -02000D01="&Arkiv:" -02000D02="&Oppdaterings modus:" -02000D03="Arkiv &format:" -02000D04="Kompresjons &metode:" -02000D05="Opprett eit &Solid arkiv" -02000D06="&Parameter:" -02000D07="Val" -02000D08="Opprett SF&X arkiv" -02000D09="Fleirtråda" -02000D0A="&Krypter filnamn" -02000D0B="Kompresjons &nivå:" -02000D0C="O&rdbok størrelse:" -02000D0D="Or&d størrelse:" -02000D0E="Minnebruk ved kompresjon:" -02000D0F="Minnebruk ved ut-pakking:" -02000D10="Krypter" -02000D11="Krypter metode:" -02000D12="Anntal CPU tråder:" -02000D13="Solid blokk størrelse:" -02000D14="Ikkje-solid" -02000D15="Solid" - -02000D40="Splitt opp i deler, byte:" -02000D41="Feil del-størrelse" -02000D42="Oppgitt del-størrelse: {0} byte.\nEr du sikker på du vil dele arkivet opp i slike deler?" - -02000D81="Lagre" -02000D82="Normal" -02000D83="Maksimum" -02000D84="Rask" -02000D85="Raskast" -02000D86="Ekstrem" - -02000D90="Bla igjennom" - -02000DA1="Legg til og skriv over filer" -02000DA2="Oppdatere og legg til filer" -02000DA3="Frisk opp eksisterande filer" -02000DA4="Synkroniser filer" - -02000DB1="Alle filer" - -02000DC0="Komprimerer" - -; Columns dialog -02000E00="Kolonner" -02000E01="Merk kolonnene du vil visa i denne mappa. Bruk Flytt opp og Flytt ned knappane for å endra plassringen på kolonnene." -02000E02="Den valte kolonna skal vera" -02000E03="punkter &brei." - -02000E10="Flytt &Opp" -02000E11="Flytt &Ned" -02000E12="&Vis" -02000E13="&Gøym" -02000E14="Bruk" - -02000E81="Tittel" -02000E82="Breidde" - -; Testing -02000F90="Testing" - - -; File Manager - -03000000="7-Zip Fil behandlar" - -; Menu -03000102="&Fil" -03000103="&Redigere" -03000104="&Vis" -03000105="Verk&tøy" -03000106="&Hjelp" -03000107="F&avorittar" - -; File -03000210="&Opna" -03000211="Opna &Inni" -03000212="Opna &Utanfor" -03000220="&Vis" -03000221="&Redigere" -03000230="Endra &namn" -03000231="&Kopiere til..." -03000232="&Flytt til..." -03000233="&Slett" -03000240="&Eigenskapar" -03000241="Ko&mmentar" -03000242="Rekna ut kontrollnummer" -03000250="Opprett mappe" -03000251="Opprett fil" -03000260="&Avslutta" -03000270="&Del opp fil..." -03000271="Set saman filer..." - -; Edit -03000310="&Angre" -03000311="&Gjer om" -03000320="Klipp &ut" -03000321="&Kopiere" -03000322="Lim &inn" -03000323="&Slett" -03000330="&Merk alle" -03000331="Fjern alle markeringar" -03000332="&Omvendt markering" -03000333="Marker..." -03000334="Fjern markering..." -03000335="Merk etter type" -03000336="Fjern markering etter type" - -; View -03000410="S&tore ikon" -03000411="S&må ikon" -03000412="&Lista" -03000413="&Detaljar" -03000420="Assortert" -03000430="Opna kjeldemappa" -03000431="Opp eit nivå" -03000432="Mappelogg..." -03000440="&Oppdatere" -03000449="Flat vising" -03000450="&2 felt" -03000451="&Verktøylinjer" -03000460="Arkiv verktøylinje" -03000461="Standard verktøylinjer" -03000462="Store knappar" -03000463="Vis knappetekst" - -; Tools -03000510="&Val..." -03000511="&Yting test" - -; Help -03000610="&Innhold..." -03000620="&Om 7-Zip..." - -; Favorites -03000710="&Legg mappe til i favorittar som" -03000720="Bokmerke" - -; Options Dialog - -03010000="Val" - -; Plugins -03010100="Tillegg" -03010101="&Tillegg:" -03010110="Val..." - -; Edit -03010200="Redigeringsprogram" -03010201="&Redigeringsprogram:" - -; System -03010300="System" -03010302="Forbind 7-Zip med:" -03010310="Tillegg" - -; Settings -03010400="Innstillingar" -03010401="Vis \"..\" element" -03010402="Vis dei ordentlege fil ikona" -03010410="Vis system meny" -03010420="&Merk heile rader" -03010421="Vis &rutenett" -03010430="&Alternativ markerings modus" -03010440="Bruk &store minnesider" - -; Strings - -03020201="Kopiere" -03020202="Flytt" -03020203="Kopiere til:" -03020204="Flytt til:" -03020205="Kopierer..." -03020206="Flyttar..." -03020207="Du kan ikkje flytta eller kopiere element i slike mapper." -03020208="Støttar ikkje handlinga." -03020209="Vel målmappe." - -03020210="Godkjenne sletting av fil" -03020211="Godkjenne sletting av mappe" -03020212="Godkjenne sletting av fleire filer" -03020213="Er du sikker på at du vil sletta '{0}'?" -03020214="Er du sikker på at du vil sletta mappa '{0}' og alt innhold i den?" -03020215="Er du sikker på at du vil sletta desse {0} elementa?" -03020216="Slettar..." -03020217="Feil ved sletting av fil eller mappe" - -03020220="Endrar namn..." -03020221="Feil ved endring av namn på fil eller mappe" -03020222="Godkjenne filkopiering" -03020223="Er du sikker på at du vil kopiere filer til arkiv" - -03020230="Opprett mappe" -03020231="Mappe namn:" -03020232="Ny mappe" -03020233="Feil ved oppretting av mappe" - -03020240="Opprett fil" -03020241="Filnamn:" -03020242="Ny fil" -03020243="Feil ved oppretting av fil" - -03020250="Marker" -03020251="Fjern markering" -03020252="Maske:" - -03020260="Mappe logg" - -03020280="Fila '{0}' blei endra.\nVil du oppdatere den i arkivet?" -03020281="Kan ikkje oppdatere fil\n'{0}'" -03020282="Kan ikkje starta redigeringsprogram." -03020283="Opnar..." - -03020290="Kommentar" -03020291="&Kommentar:" - -030202A0="System" - -03020300="Datamaskin" -03020301="Nettverk" - -03020400="Legg til" -03020401="Pakk ut" -03020402="Test" - -03020420="Kopiere" -03020421="Flytt" -03020422="Slett" -03020423="Informasjon" - -03020500="Del opp fil" -03020501="&Del opp til:" -03020510="Delar opp..." -03020520="Godkjenne oppdeling" -03020521="Er du sikker på at du vil dele opp fila i {0} delar?" -03020522="Størrelsen på delane må vera mindre enn størrelsen på originalfila" - -03020600="Slå saman filer" -03020601="&Slå saman til:" -03020610="Slår saman..." -03020620="Berre vel den første fila" - -03020710="Reknar ut kontrollnummer..." -03020720="Informasjon om kontrollnummer" -03020721="CRC kontrollnummer for data:" -03020722="CRC kontrollnummer for data og namn:" - -03020800="Undersøkjer..." - -; Computer -03031100="Total størrelse" -03031101="Ledig plass" -03031102="Klyngje størrelse" -03031103="Etikett" - -; Network -03031200="Lokalt namn" -03031201="Leverandør" - -; Benchmark Dialog - -03080000="Yting test" -03080001="Minnebruk:" -03080002="Kompresjon" -03080003="Ut-pakking" -03080004="Fart" -03080005="Yting" -03080006="Total yting" -03080007="Noverande" -03080008="Resultat" -03080009="Gonger:" -0308000A="Feil:" -0308000B="CPU bruk" -0308000C="Yting / Bruk" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/pa-in.txt b/External/7-Zip/Lang/pa-in.txt deleted file mode 100644 index 8214cc90b..000000000 --- a/External/7-Zip/Lang/pa-in.txt +++ /dev/null @@ -1,512 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.53 -; Translated by Gurmeet Singh Kochar -; -; -; -; - -00000000="Punjabi, Indian" -00000001="ਪੰਜਾਬੀ" -00000002="70-1" - -; 7-Zip Configuration - -; Title -01000000="7-ਜ਼ਿੱਪ ਸਰੰਚਨਾ" - -; Info Page -01000100="7-ਜ਼ਿੱਪ ਬਾਰੇ" -01000103="7-ਜ਼ਿੱਪ ਇੱਕ ਮੁਫ਼ਤ ਸਾਫ਼ਟਵੇਅਰ ਹੈ। ਪਰ ਫੇਰ ਵੀ, ਤੁਸੀਂ ਰਜਿਸਟਰ ਕਰਕੇ 7-ਜ਼ਿੱਪ ਦੇ ਵਿਕਾਸ ਵਿੱਚ ਸਮਰਥਨ ਪਾ ਸੱਕਦੇ ਹੋ।\n\nਪੰਜਾਬੀ ਵਿੱਚ ਅਨੁਵਾਦ ਕੀਤਾ (Translation Done By):\nGurmeet Singh Kochar (ਗੁਰਮੀਤ ਸਿੰਘ ਕੋਚਰ)\n" -01000104="ਸਮਰਥਨ" -01000105="ਰਜਿਸਟਰ" - -; Folders Page -01000200="ਫੋਲਡਰ" -01000210="ਵਰਕਿੰਗ ਫੋਲਡਰ (&W)" -01000211="ਸਿਸਟਮ ਆਰਜ਼ੀ (temp) ਫੋਲਡਰ (&S)" -01000212="ਇਸ ਸਮੇਂ ਚੁਣਿਆ (&C)" -01000213="ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ (&S):" -01000214="ਸਿਰਫ਼ ਹਟਾਈ ਜਾ ਸੱਕਨ ਵਾਲੀਆਂ ਡਰਾਈਵ ਲਈ ਵਰਤੋਂ ਕਰੋ" - -01000281="ਆਰਜ਼ੀ ਆਕਾਈਵ ਫਾਇਲਾਂ ਲਈ ਟਿਕਾਣਾ ਦੱਸੋ।" - -; System Page -01000300="ਸਿਸਟਮ" -01000301="ਸ਼ੈੱਲ ਕੰਨਟੈਕਸਟ ਮੇਨੂੰ ਨਾਲ 7-ਜ਼ਿੱਪ ਨੂੰ ਏਕੀਕਿਰਤ ਕਰੋ" -01000302="ਕੈਸਕੇਡਡ ਕੰਨਟੈਕਸਟ ਮੇਨੂੰ" -01000310="ਕੰਨਟੈਕਸਟ ਮੇਨੂੰ ਆਈਟਮਾਂ:" - -; Language Page -01000400="ਭਾਸ਼ਾ" -01000401="ਭਾਸ਼ਾ:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-ਜ਼ਿੱਪ" -02000102="7-ਜ਼ਿੱਪ ਕਮਾਂਡਾਂ" -02000103="ਆਕਾਈਵ ਖੋਲੋ" -02000104="ਚੁਣੇ ਆਕਾਈਵ ਨੂੰ ਖੋਲੇਣ ਲਈ।" -02000105="ਫਾਇਲਾਂ ਕੱਡੋ..." -02000106="ਚੁਣੇ ਆਕਾਈਵ ਵਿੱਚੋਂ ਫਾਇਲਾਂ ਕੱਡਣ ਲਈ।" -02000107="ਆਕਾਈਵ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ..." -02000108="ਚੁਣੀਆਂ ਆਈਟਮਾਂ ਆਕਾਈਵ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ।" -02000109="ਆਕਾਈਵ ਪਰਖੋ" -0200010A="ਚੁਣੇ ਆਕਾਈਵ ਦੀ ਅਖੰਡਤਾ ਪਰਖਨ ਲਈ।" -0200010B="ਫਾਇਲਾਂ ਇੱਥੇ ਕੱਡੋ" -0200010C="ਇਸ ਵੇਲੇ ਦੇ ਫੋਲਡਰ ਵਿੱਚ ਚੁਣੇ ਆਕਾਈਵ ਵਿੱਚੋਂ ਫਾਇਲਾਂ ਕੱਡਣ ਲਈ।" -0200010D="{0} ਵਿੱਚ ਕੱਡੋ" -0200010E="ਉਪ-ਫੋਲਡਰ ਵਿੱਚ ਫਾਇਲਾਂ ਕੱਡਣ ਲਈ।" -0200010F="{0} ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ" -02000110="ਚੁਣੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਆਕਾਈਵ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ।" -02000111="ਨਪੀੜੋ ਅਤੇ ਈਮੇਲ ਕਰੋ..." -02000112="ਚੁਣੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਆਕਾਈਵ ਵਿੱਚ ਨਪੀੜਨ ਅਤੇ ਆਕਾਈਵ ਨੂੰ ਈਮੇਲ ਰਾਂਹੀ ਭੇਜਨ ਲਈ।" -02000113="{0} ਵਿੱਚ ਨਪੀੜੋ ਅਤੇ ਈਮੇਲ ਕਰੋ" -02000114="ਚੁਣੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਆਕਾਈਵ ਵਿੱਚ ਨਪੀੜਨ ਅਤੇ ਆਕਾਈਵ ਨੂੰ ਈਮੇਲ ਰਾਂਹੀ ਭੇਜਨ ਲਈ।" - -02000140="<ਫੋਲਡਰ>" -02000141="<ਆਕਾਈਵ>" - -; Properties -02000203="ਮਾਰਗ" -02000204="ਨਾਂ" -02000205="ਐਕਸਟੈਂਸ਼ਨ" -02000206="ਫੋਲਡਰ" -02000207="ਸਾਈਜ਼" -02000208="ਪੈਕਡ ਸਾਈਜ਼" -02000209="ਲੱਛਨ" -0200020A="ਬਣਤਰ ਸਮਾਂ" -0200020B="ਪਹੁੰਚ ਸਮਾਂ" -0200020C="ਸੋਧ ਸਮਾਂ" -0200020D="ਠੋਸ" -0200020E="ਟਿੱਪਣੀ" -0200020F="ਐਨਕ੍ਰਿਪਟਡ" -02000210="Split Before" -02000211="Split After" -02000212="ਡਿਕਸ਼ਨਰੀ" -02000213="ਸੀ-ਆਰ-ਸੀ (CRC)" -02000214="ਕਿਸਮ" -02000215="ਐਂਟੀ (Anti)" -02000216="ਢੰਗ" -02000217="ਮੇਜ਼ਬਾਨ ਔ-ਐੱਸ" -02000218="ਫਾਇਲ ਸਿਸਟਮ" -02000219="ਯੂਜ਼ਰ" -0200021A="ਸਮੂਹ" -0200021B="ਬਲੋਕ" -0200021C="ਟਿੱਪਣੀ" -0200021D="ਸਥਿੱਤੀ" -0200021E="ਮਾਰਗ ਅਗੇਤਰ" -0200021F="ਫੋਲਡਰ" -02000220="ਫਾਇਲਾਂ" -02000221="ਵਰਜਨ" -02000222="ਵੋਲੁੱਮ" -02000223="ਮਲਟੀਵੋਲੁੱਮ" -02000224="ਔਫ਼ਸੈਟ" -02000225="ਲਿੰਕ" -02000226="ਬਲੋਕ" -02000227="ਵੋਲੁੱਮ" - -; Status bar -02000301="ਚੁਣੇ ਪਦਾਰਥ: {0}" -02000302="{0} ਪਦਾਰਥ" - -02000320="ਫਾਇਲਾਂ:" -02000321="ਫੋਲਡਰ:" -02000322="ਸਾਈਜ਼:" -02000323="ਨਪੀੜਤ ਸਾਈਜ਼:" -02000324="ਆਕਾਈਵਾਂ:" - -; List Context Menu -02000401="ਕਾਲਮ (&C)..." - -02000411="ਖੋਲੋ (&O)" -02000412="ਕੱਡੋ (&E)..." - -; ToolBar -02000501="ਕੱਡੋ" - -; Messages -02000601="ਅੱਪਡੇਟ ਔਪਰੇਸ਼ਨ ਇਸ ਆਕਾਈਵ ਲਈ ਸਹਿਯੋਗੀ ਨਹੀਂ ਹਨ।" -02000602="{0} ਆਕਾਈਵ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸੱਕੀ" -02000603="'{0}' ਫੋਲਡਰ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸੱਕਿਆ" -02000604="ਫਾਇਲ ਇੱਕ ਸਹਿਯੋਗੀ ਆਕਾਈਵ ਨਹੀਂ ਹੈ।" -02000605="ਸਮੱਸਿਆ" -02000606="ਬਹੁੱਤ ਸਾਰੀਆਂ ਆਈਟਮਾਂ" -02000607="ਦਿੱਤੀ ਗਈ ਫਾਇਲ ਐਕਸਟੈਂਸ਼ਨ ਨਾਲ ਕੋਈ ਵੀ ਕਾਰਜ ਨਹੀਂ ਜੁੜਿਆ ਹੋਇਆ ਹੈ।" -02000608="ਕੋਈ ਸਮੱਸਿਆਵਾਂ ਨਹੀਂ ਹਨ" -02000609="'{0}' ਫਾਇਲ ਨੂੰ ਆਕਾਈਵ ਤਰ੍ਹਾਂ ਨਹੀਂ ਖੋਲਿਆ ਜਾ ਸੱਕਿਆ" -0200060A="'{0}' ਐਨਕ੍ਰਿਪਟਡ ਆਕਾਈਵ ਨਹੀਂ ਖੋਲਿਆ ਜਾ ਸੱਕਿਆ। ਗਲ਼ਤ ਪਾਸਵਰਡ?" - -; Dialogs -02000702="ਠੀਕ ਹੈ" -02000705="ਹਾਂ (&Y)" -02000707="ਸਾਰਿਆਂ ਲਈ ਹਾਂ (&A)" -02000709="ਨਹੀਂ (&N)" -0200070B="ਸਾਰਿਆਂ ਲਈ ਨਹੀਂ (&l)" - -02000710="ਰੱਦ ਕਰੋ" -02000711="ਰੱਦ ਕਰੋ (&C)" -02000713="ਬੰਦ ਕਰੋ (&C)" -02000714="ਰੁਕੋ" -02000715="ਮੁੜ ਚਾਲੂ ਕਰੋ" - -02000720="ਮੱਦਦ" - -; Extract dialog -02000800="ਕੱਡੋ" -02000801="ਇੱਥੇ ਕੱਡੋ (&x):" -02000802="ਪਾਸਵਰਡ" - -02000810="ਮਾਰਗ ਢੰਗ" -02000811="ਪੂਰੇ ਮਾਰਗ ਨਾਂ" -02000812="ਇਸ ਵੇਲੇ ਦੇ ਮਾਰਗ ਨਾਂ" -02000813="ਕੋਈ ਮਾਰਗ ਨਾਂ ਨਹੀਂ" - -02000820="ਉਪਰੀਲੇਖਨ ਢੰਗ" -02000821="ਉਪਰੀਲੇਖਨ ਤੋਂ ਪਹਿਲਾਂ ਤਸਦੀਕ" -02000822="ਬਿਨ੍ਹਾਂ ਤਸਦੀਕ ਉਪਰੀਲੇਖਨ" -02000823="ਮੌਜੂਦਾ ਫਾਇਲਾਂ ਨਾਂ ਕੱਡੋ" -02000824="ਆਪੇ ਨਾਂ ਬਦਲ ਦਿਓ" -02000825="ਮੌਜੂਦਾ ਫਾਇਲਾਂ ਦਾ ਆਪੇ ਨਾਂ ਬਦਲ ਦਿਓ" - -02000830="ਫਾਇਲਾਂ" -02000831="ਚੁਣੀਆਂ ਫਾਇਲਾਂ (&S)" -02000832="ਸਾਰੀਆਂ ਫਾਇਲਾਂ (&A)" - -02000881="ਕੱਡੀਆਂ ਜਾਉਣ ਵਾਲੀਆਂ ਫਾਇਲਾਂ ਲਈ ਟਿਕਾਣਾ ਦੱਸੋ।" - -02000890="ਕੱਡੀਆਂ ਜਾ ਰਹੀਆਂ ਹਨ" - -; Overwrite dialog -02000900="ਫਾਇਲ ਬਦਲਨ ਦੀ ਤਸਦੀਕ" -02000901="ਕਾਰਵਾਈ ਕੀਤੀ ਜਾਉਂਦੀ ਫਾਇਲ ਨਿਯਤ ਫੋਲਡਰ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।" -02000902="ਕੀ ਤੁਸੀਂ ਮੌਜੂਦਾ ਫਾਇਲ ਨੂੰ" -02000903="ਇਸ ਫਾਇਲ ਨਾਲ ਬਦਲਨਾ ਚਾਹੋਗੇ?" - -02000911="ਆਪੇ ਨਾਂ ਬਦਲੀ ਕਰੋ (&u)" - -02000982="{0} ਬਾਈਟ" -02000983="ਸੋਧ ਸਮਾਂ" - -; Messages dialog -02000A00="ਡਾਈਗਨੋਸਟਿੱਕ ਸੰਦੇਸ਼" - -02000A80="ਸੰਦੇਸ਼" - -02000A91="'{0}' ਲਈ ਨਪੀੜਨ ਢੰਗ ਸਹਿਯੋਗੀ ਨਹੀਂ।" -02000A92="'{0}' ਵਿੱਚ ਡਾਟਾ ਸਮੱਸਿਆ। ਫਾਇਲ ਟੁੱਟੀ ਹੋਈ ਹੈ।" -02000A93="'{0}' ਵਿੱਚ ਸੀ-ਆਰ-ਸੀ ਅਸਫ਼ਲ ਰਿਹਾ। ਫਾਇਲ ਟੁੱਟੀ ਹੋਈ ਹੈ।" -02000A94="'{0}' ਐਨਕ੍ਰਿਪਟਡ ਫਾਇਲ ਵਿੱਚ ਡਾਟਾ ਸਮੱਸਿਆ। ਗਲ਼ਤ ਪਾਸਵਰਡ?" -02000A95="'{0}' ਐਨਕ੍ਰਿਪਟਡ ਫਾਇਲ ਵਿੱਚ ਸੀ-ਆਰ-ਸੀ ਅਸਫ਼ਲ ਰਿਹਾ। ਗਲ਼ਤ ਪਾਸਵਰਡ?" - -; Password dialog -02000B00="ਪਾਸਵਰਡ ਭਰੋ" -02000B01="ਪਾਸਵਰਡ ਭਰੋ:" -02000B02="ਪਾਸਵਰਡ ਵਿਖਾਓ (&S)" -02000B03="ਪਾਸਵਰਡ ਮੁੜ ਭਰੋ:" -02000B10="ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ" -02000B11="ਪਾਸਵਰਡ ਲਈ ਸਿਰਫ਼ ਅੰਗ੍ਰੇਜ਼ੀ ਅੱਖਰ, ਅੰਕ, ਅਤੇ ਖ਼ਾਸ ਅੱਖਰਾਂ (!, #, $, ...) ਦੀ ਹੀ ਵਰਤੋਂ ਕਰੋ" -02000B12="ਪਾਸਵਰਡ ਬਹੁੱਤ ਲੰਬਾ ਹੈ" - -; Progress dialog -02000C00="ਕਾਰਜ" -02000C01="ਬੀਤਿਆ ਸਮਾਂ:" -02000C02="ਰਹਿੰਦਾ ਸਮਾਂ:" -02000C03="ਕੁੱਲ ਸਾਈਜ਼:" -02000C04="ਗਤੀ:" -02000C05="ਨਿਬੇੜੀਆਂ ਬਾਈਟ:" -02000C06="ਨਪੀੜਨ ਅਨੁਪਾਤ:" - -02000C10="ਬੈਕਗਰਾਉਂਡ (&B)" -02000C11="ਫੋਰਗਰਾਉਂਡ (&F)" -02000C12="ਪੋਜ਼ (&P)" -02000C13="ਜਾਰੀ ਕਰੋ (&C)" - -02000C20="ਪੋਜ਼ ਹੋਇਆ" - -02000C30="ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਹੀ ਰੱਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" - -; Compress dialog -02000D00="ਆਕਾਈਵ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ" -02000D01="ਆਕਾਈਵ (&A):" -02000D02="ਅੱਪਡੇਟ ਢੰਗ (&U):" -02000D03="ਆਕਾਈਵ ਫੌਰਮੈਟ (&f):" -02000D04="ਨਪੀੜਨ ਢੰਗ (&m):" -02000D05="ਠੋਸ ਆਕਾਈਵ ਬਣਾਓ (&S)" -02000D06="ਪੈਰਾਮੀਟਰ (&P):" -02000D07="ਚੋਣਾਂ" -02000D08="SF&X ਆਕਾਈਵ ਬਣਾਓ" -02000D09="ਮਲਟੀ-ਥਰੈਡਿੰਗ" -02000D0A="ਫਾਇਲਾਂ ਦੇ ਨਾਂ ਐਨਕ੍ਰਿਪਟ ਕਰੋ (&n)" -02000D0B="ਨਪੀੜਨ ਪੱਧਰ (&l):" -02000D0C="ਡਿਕਸ਼ਨਰੀ ਸਾਈਜ਼ (&D):" -02000D0D="ਵਰਡ ਸਾਈਜ਼(&W):" -02000D0E="ਨਪੀੜਨ ਲਈ ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ:" -02000D0F="ਆਕਾਈਵ ਖੋਲਨ ਲਈ ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ:" -02000D10="ਐਨਕ੍ਰਿਪਸ਼ਨ" -02000D11="ਐਨਕ੍ਰਿਪਸ਼ਨ ਢੰਗ:" -02000D12="ਸੀ-ਪੀ-ਯੂ ਥਰੈੱਡ ਗਿਣਤੀ:" -02000D13="ਠੋਸ ਬਲੋਕ ਸਾਈਜ਼:" -02000D14="ਨਾ-ਠੋਸ" -02000D15="ਠੋਸ" -02000D16="ਵਰਤੀਆਂ ਜਾਉਂਦੀਆਂ ਫਾਇਲਾਂ ਨੂੰ ਵੀ ਨਪੀੜੋ" - -02000D40="ਵੋਲੁੱਮਾਂ ਵਿੱਚ ਵੰਡੋ, ਬਾਈਟ (&v):" -02000D41="ਵੋਲੁੱਮ ਸਾਈਜ਼ ਗਲ਼ਤ ਹੈ" -02000D42="ਦਿੱਤਾ ਗਿਆ ਵੋਲੁੱਮ ਸਾਈਜ਼: {0} ਬਾਈਟ।\nਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਆਕਾਈਵ ਨੂੰ ਦਿੱਤੇ ਗਏ ਵੋਲੁੱਮਾਂ ਵਿੱਚ ਵੰਡਣਾ ਚਾਹੁੰਦੇ ਹੋ?" - -02000D81="ਸਿਰਫ਼ ਇਕੱਤਰਤਾ" -02000D82="ਆਮ" -02000D83="ਵੱਧੋਂ ਵੱਧ" -02000D84="ਤੇਜ਼" -02000D85="ਬਹੁੱਤ ਤੇਜ਼" -02000D86="ਸਭ ਤੋਂ ਵੱਧ" - -02000D90="ਬਰਾਊਜ਼" - -02000DA1="ਫਾਇਲਾਂ ਸ਼ਾਮਲ ਕਰੋ ਅਤੇ ਬਦਲੋ" -02000DA2="ਫਾਇਲਾਂ ਸ਼ਾਮਲ ਅਤੇ ਅੱਪਡੇਟ ਕਰੋ" -02000DA3="ਮੌਜੂਦਾ ਫਾਇਲਾਂ ਤਾਜ਼ਾ ਕਰੋ" -02000DA4="ਫਾਇਲਾਂ ਸਮਕਾਲਵਰਤੀ ਕਰੋ" - -02000DB1="ਸਾਰੀਆਂ ਫਾਇਲਾਂ" - -02000DC0="ਨਪੀੜਨ ਕਾਰਜ ਚੱਲ ਰਿਹਾ ਹੈ" - -; Columns dialog -02000E00="ਕਾਲਮ" -02000E01="ਉਹ ਕਾਲਮ ਚੁਣੋ ਜਿਹੜੇ ਤੁਸੀਂ ਇਸ ਫੋਲਡਰ ਵਿੱਚ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ। 'ਇੱਕ ਉੱਪਰ ਕਰੋ' ਅਤੇ 'ਇੱਕ ਨੀਚੇ ਕਰੋ' ਬਟਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਾਲਮ ਮੁੜ ਵਿਵੱਸਥਾ ਕਰ ਸੱਕਦੇ ਹੋ।" -02000E02="ਚੁਣਿਆ ਗਿਆ ਕਾਲਮ" -02000E03="ਪਿਕਸਲ ਚੌੜਾ ਹੋਏਗਾ (&w)।" - -02000E10="ਇੱਕ ਉੱਪਰ ਕਰੋ (&U)" -02000E11="ਇੱਕ ਨੀਚੇ ਕਰੋ (&D)" -02000E12="ਵਿਖਾਓ (&S)" -02000E13="ਛੁਪਾਓ (&H)" -02000E14="ਸੈਟ" - -02000E81="ਸ਼ੀਰਸ਼ਕ" -02000E82="ਚੁੜਾਈ" - -; Testing -02000F90="ਪਰਖ ਚੱਲ ਰਹੀ ਹੈ" - - -; File Manager - -03000000="7-ਜ਼ਿੱਪ ਫਾਇਲ ਮਨੇਜਰ" - -; Menu -03000102="ਫਾਇਲ (&F)" -03000103="ਸੋਧ (&E)" -03000104="ਵੇਖੋ (&V)" -03000105="ਸੰਧ (&T)" -03000106="ਮੱਦਦ (&H)" -03000107="ਪਸੰਦੀਦਾ (&a)" - -; File -03000210="ਖੋਲੋ (&O)" -03000211="ਅੰਦਰ ਖੋਲੋ (&I)" -03000212="ਬਾਹਰ ਖੋਲੋ (&u)" -03000220="ਵਿਖਾਓ (&V)" -03000221="ਸੋਧ ਕਰੋ (&E)" -03000230="ਨਾਂ ਬਦਲੋ (&m)" -03000231="ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਨਕਲ ਉਤਾਰੋ (&C)..." -03000232="ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਭੇਜੋ (&M)..." -03000233="ਹਟਾਓ (&D)" -03000240="ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ (&r)" -03000241="ਟਿੱਪਣੀ (&n)" -03000242="ਚੈਕਸੱਮ ਗਣਨਾ ਕਰੋ" -03000250="ਫੋਲਡਰ ਬਣਾਓ" -03000251="ਫਾਇਲ ਬਣਾਓ" -03000260="ਬਾਹਰ ਨਿਕਲੋ (&x)" -03000270="ਫਾਇਲ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡੋ (&S)..." -03000271="ਫਾਇਲ ਦੇ ਹਿੱਸੇ ਜੋੜੋ (&b)..." - -; Edit -03000310="ਆਖਿਰੀ ਕਾਰਵਾਈ ਨਕਾਰੋ (&U)" -03000311="ਨਕਾਰੀ ਕਾਰਵਾਈ ਮੁੜ ਕਰੋ (&R)" -03000320="ਕੱਟੋ (&t)" -03000321="ਨਕਲ ਉਤਾਰੋ (&C)" -03000322="ਚੇਪੋ (&P)" -03000323="ਹਟਾਓ (&D)" -03000330="ਸਭ ਚੁਣੋ (&A)" -03000331="ਸਭ ਚੋਣ ਰੱਦ ਕਰੋ" -03000332="ਉਲਟ ਚੋਣ ਕਰੋ (&I)" -03000333="ਚੁਣੋ..." -03000334="ਚੋਣ ਰੱਦ ਕਰੋ..." -03000335="ਕਿਸਮ ਨਾਲ ਚੁਣੋ ਕਰੋ" -03000336="ਕਿਸਮ ਨਾਲ ਚੋਣ ਰੱਦ ਕਰੋ" - -; View -03000410="ਵੱਡੇ ਆਈਕਾਨ (&g)" -03000411="ਛੋਟੇ ਆਈਕਾਨ (&m)" -03000412="ਸੂਚੀ (&L)" -03000413="ਵੇਰਵੇ ਸਹਿਤ (&D)" -03000420="ਨਾ ਕ੍ਰਮ-ਬੱਧ" -03000430="ਰੂਟ ਫੋਲਡਰ ਖੋਲੋ" -03000431="ਇੱਕ ਪੱਧਰ ਉੱਤੇ" -03000432="ਫੋਲਡਰ ਅਤੀਤ..." -03000440="ਤਾਜ਼ਾ ਕਰੋ(&R)" -03000449="ਫਲੈਟ ਦ੍ਰਿਸ਼" -03000450="&2 ਪੈਨਲ" -03000451="ਟੂਲਬਾਰ (&T)" -03000460="ਆਕਾਈਵ ਟੂਲਬਾਰ" -03000461="ਸਧਾਰਨ ਟੂਲਬਾਰ" -03000462="ਵੱਡੇ ਬਟਨ" -03000463="ਬਟਨ ਟੈਕਸਟ ਵਿਖਾਓ" - -; Tools -03000510="ਚੋਣਾਂ (&O)..." -03000511="ਬੈਂਚਮਾਰਕ (&B)" - -; Help -03000610="ਵਿਸ਼ਾ ਸੂਚੀ (&C)..." -03000620="7-ਜ਼ਿੱਪ ਬਾਰੇ (&A)..." - -; Favorites -03000710="ਫੋਲਡਰ ਪਸੰਦੀਦਾ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ (&A)" -03000720="ਬੁੱਕਮਾਰਕ" - -; Options Dialog - -03010000="ਚੋਣਾਂ" - -; Plugins -03010100="ਪਲੱਗ-ਇੰਨ" -03010101="ਪਲੱਗ-ਇੰਨ (&P):" -03010110="ਚੋਣਾਂ..." - -; Edit -03010200="ਐਡੀਟਰ" -03010201="ਟੈਕਸਟ ਐਡੀਟਰ (&E):" - -; System -03010300="ਸਿਸਟਮ" -03010302="7-ਜ਼ਿੱਪ ਨਾਲ ਹੇਠਾਂ ਦਿੱਤੇ ਫਾਇਲ ਐਕਸਟੈਂਸ਼ਨ ਜੋੜੋ:" -03010310="ਪਲੱਗ-ਇੰਨ" - -; Settings -03010400="ਸੈਟਿੰਗ" -03010401="\"..\" ਆਈਟਮ ਵਿਖਾਓ" -03010402="ਅਸਲੀ ਫਾਇਲ ਆਈਕਾਨ ਵਿਖਾਓ" -03010410="ਸਿਸਟਮ ਮੇਨੂੰ ਵਿਖਾਓ" -03010420="ਪੂਰੀ ਕਤਾਰ ਚੁਣੋ (&F)" -03010421="ਗ੍ਰਿਡ ਲਾਈਨਾਂ ਵਿਖਾਓ (&g)" -03010430="ਵਿਕਲਪਕ ਚੁਣਾਓ ਢੰਗ (&A)" -03010440="ਵੱਡੇ ਮੈਮੋਰੀ ਪੇਜ ਵਰਤੋ (&l)" - -; Strings - -03020201="ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਨਕਲ ਉਤਾਰੋ" -03020202="ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਭੇਜੋ" -03020203="ਹੇਠਾਂ ਦਿੱਤੇ ਟਿਕਾਣੇ ਤੇ ਨਕਲ ਉਤਾਰੋ:" -03020204="ਹੇਠਾਂ ਦਿੱਤੇ ਟਿਕਾਣੇ ਤੇ ਭੇਜੋ:" -03020205="ਨਕਲ ਉਤਾਰੀ ਜਾ ਰਹੀ ਹੈ..." -03020206="ਭੇਜਿਆ ਜਾ ਰਿਹਾ ਹੈ..." -03020207="ਇਹੋ ਜਿਹੇ ਫੋਲਡਰਾਂ ਲਈ ਤੁਸੀਂ ਆਈਟਮਾਂ ਨੂੰ ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਨਾਂ ਹੀ ਭੇਜ ਸੱਕਦੇ ਹੋ ਨਾਂ ਨਕਲ ਉਤਾਰ ਸੱਕਦੇ ਹੋ।" -03020208="ਕਾਰਵਾਈ ਸਹਿਯੋਗੀ ਨਹੀਂ ਹੈ।" -03020209="ਨਿਯਤ ਫੋਲਡਰ ਚੁਣੋ" - -03020210="ਫਾਇਲ ਹਟਾਉਣ ਦੀ ਤਸਦੀਕ" -03020211="ਫੋਲਡਰ ਹਟਾਉਣ ਦੀ ਤਸਦੀਕ" -03020212="ਬਹੁ-ਫਾਈਲਾਂ ਹਟਾਉਣ ਦੀ ਤਸਦੀਕ" -03020213="'{0}' ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" -03020214="ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਫੋਲਡਰ '{0}' ਅਤੇ ਉਸਦੇ ਵਿੱਚਲੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" -03020215="ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਇਨ੍ਹਾਂ {0} ਆਈਟਮਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" -03020216="ਹਟਾਉਣ ਦੀ ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ..." -03020217="ਫਾਇਲ ਜਾਂ ਫੋਲਡਰ ਹਟਾਉਣ ਵਿੱਚ ਸਮੱਸਿਆ" - -03020220="ਨਾਂ ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ..." -03020221="ਫਾਇਲ ਜਾਂ ਫੋਲਡਰ ਦਾ ਨਾਂ ਬਦਲਣ ਵਿੱਚ ਸਮੱਸਿਆ" -03020222="ਫਾਇਲ ਦੀ ਨਕਲ ਉਤਾਰਣ ਦੀ ਤਸਦੀਕ" -03020223="ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਫਾਇਲਾਂ ਦੀ ਆਕਾਈਵ ਵਿੱਚ ਨਕਲ ਉਤਾਰਨਾ ਚਾਹੁੰਦੇ ਹੋ" - -03020230="ਫੋਲਡਰ ਬਣਾਓ" -03020231="ਫੋਲਡਰ ਨਾਂ:" -03020232="ਨਵਾਂ ਫੋਲਡਰ" -03020233="ਫੋਲਡਰ ਬਨਾਉਣ ਵਿੱਚ ਸਮੱਸਿਆ" - -03020240="ਫਾਇਲ ਬਣਾਓ" -03020241="ਫਾਇਲ ਨਾਂ:" -03020242="ਨਵੀਂ ਫਾਇਲ" -03020243="ਫਾਇਲ ਬਨਾਉਣ ਵਿੱਚ ਸਮੱਸਿਆ" - -03020250="ਚੁਣੋ" -03020251="ਚੋਣ ਰੱਦ ਕਰੋ" -03020252="ਮਾਸਕ:" - -03020260="ਫੋਲਡਰ ਅਤੀਤ" - -03020280="'{0}' ਫਾਇਲ ਸੋਧ ਦਿੱਤੀ ਗਈ ਹੈ।\nਕੀ ਤੁਸੀਂ ਉਸਨੂੰ ਆਕਾਈਵ ਵਿੱਚ ਅੱਪਡੇਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" -03020281="ਫਾਇਲ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸੱਕੀ\n'{0}'" -03020282="ਐਡੀਟਰ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸੱਕਿਆ।" -03020283="ਖੋਲੀ ਜਾ ਰਹੀ ਹੈ..." - -03020290="ਟਿੱਪਣੀ" -03020291="ਟਿੱਪਣੀ (&C):" - -030202A0="ਸਿਸਟਮ" - -03020300="ਕੰਪਿਊਟਰ" -03020301="ਨੈੱਟਵਰਕ" - -03020400="ਸ਼ਾਮਲ ਕਰੋ" -03020401="ਕੱਡੋ" -03020402="ਪਰਖ ਕਰੋ" - -03020420="ਨਕਲ ਉਤਾਰੋ" -03020421="ਨਵੇਂ ਟਿਕਾਣੇ ਤੇ ਭੇਜੋ" -03020422="ਹਟਾਓ" -03020423="ਜਾਣਕਾਰੀ" - -03020500="ਫਾਇਲ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡੋ" -03020501="ਹੇਠਾਂ ਦਿੱਤੇ ਟਿਕਾਣੇ ਉੱਤੇ ਹਿੱਸੇ ਕਰੋ (&S):" -03020510="ਫਾਇਲ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡੀ ਜਾ ਰਹੀ ਹੈ..." -03020520="ਹਿੱਸੇ ਕਰਨ ਦੀ ਤਸਦੀਕ" -03020521="ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਿੱਤ ਫਾਇਲ ਦੇ {0} ਵੋਲੁੱਮਾਂ ਵਿੱਚ ਹਿੱਸੇ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" -03020522="ਵੋਲੁੱਮ ਸਾਈਜ਼ ਅਸਲੀ ਫਾਇਲ ਦੇ ਸਾਈਜ਼ ਤੋਂ ਛੋਟਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ" - -03020600="ਫਾਇਲ ਦੇ ਹਿੱਸੇ ਜੋੜੋ" -03020601="ਹੇਠਾਂ ਦਿੱਤੇ ਟਿਕਾਣੇ ਉੱਤੇ ਹਿੱਸੇ ਜੋੜੋ(&C):" -03020610="ਹਿੱਸੇ ਜੋੜੇ ਜਾ ਰਹੇ ਹਨ..." -03020620="ਸਿਰਫ਼ ਪਹਿਲੀ ਫਾਇਲ ਚੁਣੋ" - -03020710="ਚੈਕਸੱਮ ਗਣਨਾ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..." -03020720="ਚੈਕਸੱਮ ਜਾਣਕਾਰੀ" -03020721="ਡਾਟਾ ਲਈ ਸੀ-ਆਰ-ਸੀ ਚੈਕਸੱਮ:" -03020722="ਡਾਟਾ ਅਤੇ ਨਾਮਾਂ ਲਈ ਸੀ-ਆਰ-ਸੀ ਚੈਕਸੱਮ:" - -03020800="ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." - -03020900="ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ" - -; Computer -03031100="ਕੁੱਲ ਸਾਈਜ਼" -03031101="ਖ਼ਾਲੀ ਥਾਂ" -03031102="ਕਲੱਸਟਰ ਸਾਈਜ਼" -03031103="ਲੇਬਲ" - -; Network -03031200="ਸਥਾਨਕ ਨਾਂ" -03031201="ਉਪਲੱਬਧ ਕਰਤਾ" - -; Benchmark Dialog - -03080000="ਬੈਂਚਮਾਰਕ" -03080001="ਮੈਮੋਰੀ ਵਰਤੋਂ:" -03080002="ਨਪੀੜਨ ਕਾਰਜ" -03080003="ਖੋਲਣ ਕਾਰਜ" -03080004="ਗਤੀ" -03080005="ਦਰਜ਼ਾ" -03080006="ਕੁੱਲ ਦਰਜ਼ਾ" -03080007="ਇਸ ਸਮੇਂ" -03080008="ਰੀਸੱਲਟਿੰਗ" -03080009="ਪਾਸ:" -0308000A="ਸਮੱਸਿਆਵਾਂ:" -0308000B="ਸੀ-ਪੀ-ਯੂ ਵਰਤੋਂ" -0308000C="ਦਰਜ਼ਾ / ਵਰਤੋਂ" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/pl.txt b/External/7-Zip/Lang/pl.txt deleted file mode 100644 index 4cbf4380c..000000000 --- a/External/7-Zip/Lang/pl.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by cienislaw, corrected by pixel -; Last versions translated by F1xat -; Corrected and updated by Łukasz Maria P. Pastuszczak -; -; - -00000000="Polish" -00000001="Polski" -00000002="21" - -; 7-Zip Configuration - -; Title -01000000="Konfiguracja programu 7-Zip" - -; Info Page -01000100="7-Zip - informacje" -01000103="7-Zip jest programem darmowym. Możesz jednak wspomóc jego rozwój poprzez rejestrację." -01000104="Wsparcie" -01000105="Rejestracja" - -; Folders Page -01000200="Foldery" -01000210="Folder roboczy" -01000211="&Systemowy folder tymczasowy" -01000212="&Bieżący" -01000213="&Wskazany:" -01000214="Użyj tylko dla dysków wymiennych" - -01000281="Wskaż lokalizację dla tymczasowych plików archiwów." - -; System Page -01000300="System" -01000301="Zintegruj program 7-Zip z menu kontekstowym powłoki" -01000302="Kaskadowe menu kontekstowe" -01000310="Elementy menu kontekstowego:" - -; Language Page -01000400="Język" -01000401="Język:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Polecenia programu 7-Zip" -02000103="Otwórz archiwum" -02000104="Otwiera zaznaczone archiwum." -02000105="Wypakuj pliki..." -02000106="Wypakowuje pliki z zaznaczonego archiwum." -02000107="Dodaj do archiwum..." -02000108="Dodaje zaznaczone elementy do archiwum." -02000109="Testuj archiwum" -0200010A="Testuje integralność zaznaczonego archiwum." -0200010B="Wypakuj tutaj" -0200010C="Wypakowuje pliki z zaznaczonego archiwum do bieżącego folderu." -0200010D="Wypakuj do {0}" -0200010E="Wypakowuje pliki do podfolderu." -0200010F="Dodaj do {0}" -02000110="Dodaje zaznaczone elementy do archiwum." -02000111="Skompresuj i wyślij e-mailem..." -02000112="Kompresuje zaznaczone elementy do archiwum i wysyła je pocztą e-mail." -02000113="Skompresuj do {0} i wyślij e-mailem" -02000114="Kompresuje zaznaczone elementy do archiwum i wysyła je pocztą e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Ścieżka" -02000204="Nazwa" -02000205="Rozszerzenie" -02000206="Folder" -02000207="Rozmiar" -02000208="Rozmiar po spakowaniu" -02000209="Atrybuty" -0200020A="Utworzony" -0200020B="Ostatnio otwarty" -0200020C="Zmodyfikowany" -0200020D="Ciągły" -0200020E="Z komentarzem" -0200020F="Zaszyfrowany" -02000210="Podzielony przed" -02000211="Podzielony po" -02000212="Słownik" -02000213="CRC" -02000214="Typ" -02000215="Anty" -02000216="Metoda" -02000217="Pochodzenie" -02000218="System plików" -02000219="Użytkownik" -0200021A="Grupa" -0200021B="Blok" -0200021C="Komentarz" -0200021D="Pozycja" -0200021E="Prefiks ścieżki" -0200021F="Foldery" -02000220="Pliki" -02000221="Wersja" -02000222="Wolumin" -02000223="Wielowoluminowy" -02000224="Przesunięcie" -02000225="Dowiązania" -02000226="Bloki" -02000227="Woluminy" - -02000229="64-bitowy" -0200022A="Big-endian" -0200022B="Procesor" -0200022C="Rozmiar fizyczny" -0200022D="Rozmiar nagłówków" -0200022E="Suma kontrolna" -0200022F="Charakterystyki" -02000230="Adres wirtualny" -02000231="Numer seryjny woluminu" -02000232="Krótka nazwa" -02000233="Generator" -02000234="Rozmiar sektora" -02000235="Tryb" -02000236="Dowiązanie" - -; Status bar -02000301="Zaznaczono {0} obiekt(ów)" -02000302="{0} obiekt(ów)" - -02000320="Plików:" -02000321="Folderów:" -02000322="Rozmiar:" -02000323="Rozmiar po kompresji:" -02000324="Archiwów:" - -; List Context Menu -02000401="&Kolumny..." - -02000411="&Otwórz" -02000412="&Wypakuj..." - -; ToolBar -02000501="Wypakuj" - -; Messages -02000601="Operacje aktualizacji nie są obsługiwane dla tego archiwum." -02000602="Nie można zaktualizować archiwum {0}" -02000603="Nie można utworzyć folderu „{0}”" -02000604="Plik nie jest obsługiwanym archiwum." -02000605="Błąd" -02000606="Zbyt dużo elementów" -02000607="Z określonym plikiem nie skojarzono żadnej aplikacji" -02000608="Nie wykryto błędów" -02000609="Nie można otworzyć pliku „{0}” jako archiwum" -0200060A="Nie można otworzyć zaszyfrowanego archiwum „{0}”. Nieprawidłowe hasło?" -0200060B="System nie może przydzielić wymaganej ilości pamięci" -0200060C="Nieznany błąd" -0200060D="Nieobsługiwany typ archiwum" - -; Dialogs -02000702="OK" -02000705="&Tak" -02000707="Ta&k na wszystkie" -02000709="&Nie" -0200070B="Ni&e na wszystkie" - -02000710="Anuluj" -02000711="&Anuluj" -02000713="&Zamknij" -02000714="Zatrzymaj" -02000715="Ponów" - -02000720="Pomoc" - -; Extract dialog -02000800="Wypakuj" -02000801="&Wypakuj do:" -02000802="Hasło" - -02000810="Tryb ścieżek" -02000811="Pełne ścieżki" -02000812="Względne ścieżki" -02000813="Bez ścieżek" - -02000820="Tryb nadpisywania" -02000821="Monituj przed nadpisaniem" -02000822="Nadpisuj bez monitowania" -02000823="Pomiń istniejące pliki" -02000824="Automatycznie zmień nazwy" -02000825="Aut. zmień nazwy istniejących plików" - -02000830="Pliki" -02000831="&Zaznaczone pliki" -02000832="Wszystkie &pliki" - -02000881="Wskaż lokalizację dla wypakowanych plików." - -02000890="Wypakowywanie" - -; Overwrite dialog -02000900="Potwierdź zamianę pliku" -02000901="Folder docelowy zawiera już przetwarzany plik." -02000902="Czy chcesz zamienić istniejący plik" -02000903="na następujący?" - -02000911="Automatycznie &zmień nazwy" - -02000982="{0} bajtów" -02000983="zmodyfikowany" - -; Messages dialog -02000A00="Komunikaty diagnostyczne" - -02000A80="Komunikat" - -02000A91="Nieobsługiwana metoda kompresji pliku „{0}”." -02000A92="Błąd danych w „{0}”. Plik jest uszkodzony." -02000A93="CRC nie powiodła się dla „{0}”. Plik jest uszkodzony." -02000A94="Błąd danych w zaszyfrowanym pliku „{0}”. Nieprawidłowe hasło?" -02000A95="CRC nie powiodła się dla zaszyfrowanego pliku „{0}”. Nieprawidłowe hasło?" - -; Password dialog -02000B00="Wprowadź hasło" -02000B01="Wprowadź hasło:" -02000B02="Pokaż &hasło" -02000B03="Wprowadź ponownie hasło:" -02000B10="Hasła nie zgadzają się" -02000B11="W haśle używaj tylko liter alfabetu angielskiego, cyfr i znaków specjalnych (!, #, $, ...)" -02000B12="Hasło jest zbyt długie" - -; Progress dialog -02000C00="Przetwarzanie" -02000C01="Upłynęło czasu:" -02000C02="Pozostało czasu:" -02000C03="Całkowity rozmiar:" -02000C04="Szybkość:" -02000C05="Przetworzono:" -02000C06="Współczynnik kompresji:" - -02000C10="&Tło" -02000C11="&Pierwszy plan" -02000C12="&Wstrzymaj" -02000C13="&Kontynuuj" - -02000C20="Wstrzymano" - -02000C30="Czy na pewno chcesz anulować?" - -; Compress dialog -02000D00="Dodaj do archiwum" -02000D01="&Archiwum:" -02000D02="&Tryb aktualizacji:" -02000D03="&Format archiwum:" -02000D04="&Metoda kompresji:" -02000D05="Utwórz &ciągłe archiwum" -02000D06="&Parametry:" -02000D07="Opcje" -02000D08="&Utwórz archiwum SFX" -02000D09="Wielowątkowość" -02000D0A="&Zaszyfruj nazwy plików" -02000D0B="Stopień &kompresji:" -02000D0C="&Rozmiar słownika:" -02000D0D="Rozmiar &słowa:" -02000D0E="Użycie pamięci dla kompresji:" -02000D0F="Użycie pamięci dla dekompresji:" -02000D10="Szyfrowanie" -02000D11="Metoda szyfrowania:" -02000D12="Liczba wątków:" -02000D13="Rozmiar bloku ciągłego:" -02000D14="Nieciągły" -02000D15="Ciągły" -02000D16="Kompresuj pliki współdzielone" - -02000D40="Rozmiar &woluminów (bajty):" -02000D41="Nieprawidłowy rozmiar woluminu" -02000D42="Określony rozmiar woluminu: {0} bajtów.\nCzy na pewno chcesz podzielić archiwum na takie woluminy?" - -02000D81="Bez kompresji" -02000D82="Normalna" -02000D83="Maksymalna" -02000D84="Szybka" -02000D85="Najszybsza" -02000D86="Ultra" - -02000D90="Przeglądaj" - -02000DA1="Dodaj i zamień pliki" -02000DA2="Aktualizuj i dodaj pliki" -02000DA3="Odśwież istniejące pliki" -02000DA4="Synchronizuj pliki" - -02000DB1="Wszystkie pliki" - -02000DC0="Kompresowanie" - -; Columns dialog -02000E00="Kolumny" -02000E01="Wybierz kolumny, które mają być wyświetlane w tym folderze. Do zmiany kolejności kolumn możesz użyć przycisków Przenieś w górę i Przenieś w dół." -02000E02="Wybrana kolumna powinna mieć" -02000E03="&pikseli szerokości." - -02000E10="Przenieś w &górę" -02000E11="Przenieś w &dół" -02000E12="P&okaż" -02000E13="&Ukryj" -02000E14="Ustaw" - -02000E81="Nagłówek" -02000E82="Szerokość" - -; Testing -02000F90="Testowanie" - - -; File Manager - -03000000="Menedżer plików 7-Zip" - -; Menu -03000102="&Plik" -03000103="&Edycja" -03000104="&Widok" -03000105="&Narzędzia" -03000106="Pomo&c" -03000107="&Ulubione" - -; File -03000210="&Otwórz" -03000211="Otwórz &wewnątrz" -03000212="Otwórz na &zewnątrz" -03000220="Pod&gląd" -03000221="&Edytuj" -03000230="Zmień &nazwę" -03000231="Kopiuj &do..." -03000232="&Przenieś do..." -03000233="&Usuń" -03000240="Wł&aściwości" -03000241="Ko&mentarz" -03000242="Oblicz sumę kontrolną" -03000243="Diff" -03000250="Utwórz &folder" -03000251="U&twórz plik" -03000260="Za&kończ" -03000270="Podzie&l plik..." -03000271="Złą&cz pliki..." - -; Edit -03000310="&Cofnij" -03000311="&Powtórz" -03000320="&Wytnij" -03000321="&Kopiuj" -03000322="Wkl&ej" -03000323="&Usuń" -03000330="Z&aznacz wszystko" -03000331="&Odznacz wszystko" -03000332="Odwróć &zaznaczenie" -03000333="Zaznacz..." -03000334="Odznacz..." -03000335="Zaznacz według typu" -03000336="Odznacz według typu" - -; View -03000410="&Duże ikony" -03000411="&Małe ikony" -03000412="&Lista" -03000413="&Szczegóły" -03000420="Nieposortowane" -03000430="Otwórz folder główny" -03000431="Do góry o jeden poziom" -03000432="Historia folderów..." -03000440="&Odśwież" -03000449="Widok płaski" -03000450="&2 panele" -03000451="&Paski narzędzi" -03000460="Pasek archiwum" -03000461="Pasek standardowy" -03000462="Duże przyciski" -03000463="Pokaż etykiety tekstowe" - -; Tools -03000510="&Opcje..." -03000511="&Test wydajności" - -; Help -03000610="&Zawartość" -03000620="7-Zip - i&nformacje" - -; Favorites -03000710="&Dodaj folder do ulubionych jako" -03000720="Zakładka" - -; Options Dialog - -03010000="Opcje" - -; Plugins -03010100="Wtyczki" -03010101="&Wtyczki:" -03010110="Opcje..." - -; Edit -03010200="Edytor" -03010201="&Edytor:" -03010202="&Diff:" - -; System -03010300="System" -03010302="Skojarz program 7-Zip z:" -03010310="Wtyczka" - -; Settings -03010400="Ustawienia" -03010401="Pokaż element „..”" -03010402="Pokaż prawdziwe ikony plików" -03010410="Pokaż menu systemowe" -03010420="Zaznaczaj &cały rząd" -03010421="&Pokaż linie siatki" -03010422="Pojedyncze kliknięcie otwiera element" -03010430="&Alternatywny tryb zaznaczania" -03010440="&Użyj dużych stron pamięci" - -; Strings - -03020201="Kopiuj" -03020202="Przenieś" -03020203="Kopiuj do:" -03020204="Przenieś do:" -03020205="Kopiowanie..." -03020206="Przenoszenie..." -03020207="Nie możesz kopiować ani przenosić elementów do tego folderu." -03020208="Operacja nie jest obsługiwana dla tego folderu." -03020209="Wybierz folder docelowy." - -03020210="Potwierdź usunięcie pliku" -03020211="Potwierdź usunięcie folderu" -03020212="Potwierdź usunięcie wielu plików" -03020213="Czy na pewno chcesz usunąć plik „{0}”?" -03020214="Czy na pewno chcesz usunąć folder „{0}” i całą zawartość?" -03020215="Elementów: {0} - czy na pewno chcesz je usunąć?" -03020216="Usuwanie..." -03020217="Błąd podczas usuwania pliku lub folderu" -03020218="System nie może przenieść pliku o długiej ścieżce do Kosza" - -03020220="Zmienianie nazwy..." -03020221="Błąd podczas zmiany nazwy pliku lub folderu" -03020222="Potwierdź kopiowanie plików" -03020223="Czy na pewno chcesz skopiować pliki do archiwum?" - -03020230="Utwórz folder" -03020231="Nazwa folderu:" -03020232="Nowy folder" -03020233="Błąd podczas tworzenia folderu" - -03020240="Utwórz plik" -03020241="Nazwa pliku:" -03020242="Nowy plik" -03020243="Błąd podczas tworzenia pliku" - -03020250="Zaznacz" -03020251="Odznacz" -03020252="Maska:" - -03020260="Historia folderów" - -03020280="Plik „{0}” został zmodyfikowany.\nCzy chcesz zaktualizować go w archiwum?" -03020281="Nie można zaktualizować pliku\n„{0}”" -03020282="Nie można uruchomić edytora." -03020283="Otwieranie..." -03020284="Plik wygląda na wirusa (nazwa pliku zawiera długi ciąg spacji)." - -03020290="- komentarz" -03020291="&Komentarz:" - -030202A0="System" - -03020300="Komputer" -03020301="Sieć" -03020302="Dokumenty" - -03020400="Dodaj" -03020401="Wypakuj" -03020402="Testuj" - -03020420="Kopiuj" -03020421="Przenieś" -03020422="Usuń" -03020423="Informacje" - -03020500="Podziel plik" -03020501="&Podziel do:" -03020510="Dzielenie..." -03020520="Potwierdź podział" -03020521="Czy na pewno chcesz podzielić plik na {0} woluminów?" -03020522="Rozmiar woluminu musi być mniejszy od rozmiaru oryginalnego pliku" - -03020600="Złącz pliki" -03020601="&Złącz do:" -03020610="Łączenie..." -03020620="Zaznacz tylko pierwszą część podzielonego pliku" -03020621="To nie jest poprawna część podzielonego pliku" -03020622="Nie można odnaleźć co najmniej jednej części podzielonego pliku" - -03020710="Obliczanie sumy kontrolnej..." -03020720="Informacja o sumie kontrolnej" -03020721="Suma kontrolna CRC dla danych:" -03020722="Suma kontrolna CRC dla danych i nazw:" - -03020800="Skanowanie..." - -03020900="Właściwości" - -03020A01="Operacja nie może być wywołana z folderu, który ma długą ścieżkę." -03020A02="Musisz zaznaczyć jeden plik" -03020A03="Musisz zaznaczyć jeden lub więcej plików" -03020A04="Plik {0} już istnieje" - -; Computer -03031100="Całkowity rozmiar" -03031101="Wolne miejsce" -03031102="Rozmiar klastra" -03031103="Etykieta" - -; Network -03031200="Nazwa lokalna" -03031201="Dostawca" - -; Benchmark Dialog - -03080000="Test wydajności" -03080001="Użycie pamięci:" -03080002="Kompresja" -03080003="Dekompresja" -03080004="Szybkość" -03080005="Ocena" -03080006="Całkowita ocena" -03080007="Aktualnie" -03080008="Wynik" -03080009="Przebiegi:" -0308000A="Błędy:" -0308000B="Użycie CPU" -0308000C="Ocena / Użycie" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ps.txt b/External/7-Zip/Lang/ps.txt deleted file mode 100644 index e1901bbcc..000000000 --- a/External/7-Zip/Lang/ps.txt +++ /dev/null @@ -1,511 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.53 -; Translated by the Pathanisation Project -; pathanisation.pakhtosoft.com -; 20071226 -; - -00000000="Pashto" -00000001="پښتو" -00000002="99" - -; 7-Zip Configuration - -; Title -01000000="۷‏-زېپ سازونه" - -; Info Page -01000100="۷‏-زېپ په اړه" -01000103=".دا يو وړيا ساوتری دی. خو، په نومکښلو سره د ساوتري د پرمختګ ملاتړ کولی شئ" -01000104="ملاتړ" -01000105="نومکښل" - -; Folders Page -01000200="پوښۍ" -01000210="&کارنه پوښۍ" -01000211="&لنډمهاله غونډال پوښۍ" -01000212="&اوسنۍ" -01000213="&څانګړې" -01000214="يوازې له لېرېدونکو چليځونو لپاره کارول" - -01000281=".د لنډمهاله ارشيو دوتنو لپاره ځای وټاکئ" - -; System Page -01000300="غونډال" -01000301="۷‏-زېپ سيپۍ تړاو غورنۍ کښې زياتول" -01000302="ځړبهيزه تړاو غورنۍ" -01000310=":تړاو غورنۍ توکي" - -; Language Page -01000400="ژبه" -01000401=":ژبه" - - -; 7-Zip Explorer extension - -; Context menu -02000101="۷‏-زېپ" -02000102="۷‏-زېپ بولۍ" -02000103="ارشيو پرانيستل" -02000104=".ټاکل شوی ارشيو پرانيزي" -02000105="...دوتنې ويستل" -02000106=".د ټاکل شوي ارشيو نه دوتنې وباسي" -02000107="...ارشيو ته زياتول" -02000108=".ټاکل شوي توکي ارشيو ته زياتوي" -02000109="ارشيو ازمويل" -0200010A=".د ټاکل شوي ارشيو بشپړتيا ازمويي" -0200010B="دلته ويستل" -0200010C=".د ټاکل شوي ارشيو نه اوسنۍ پوښۍ ته دوتنې وباسي" -0200010D="ته ويستل {0}‏" -0200010E=".څېرمه پوښۍ ته دوتنې وباسي" -0200010F="ته زياتول {0}" -02000110=".ټاکل شوي توکي ارشيو ته زياتوي" -02000111="...زېرل او برېښل" -02000112=".ټاکل شوي توکي ارشيو ته زېري او د برېښلېک له لارې يې ليږي" -02000113="ته زياتول او برېښل {0}" -02000114=".ټاکل شوي توکي ارشيو ته زېري او د برېښلېک له لارې يې ليږي" - -02000140="<پوښۍ>" -02000141="<ارشيو>" - -; Properties -02000203="يونلور" -02000204="نوم" -02000205="شاتاړی" -02000206="پوښۍ" -02000207="کچ" -02000208="بنډل شوی کچ" -02000209="څانتياوې" -0200020A="جوړشوی" -0200020B="رسی" -0200020C="بدلون" -0200020D="کلک" -0200020E="څرګندون" -0200020F="کوډييز" -02000210="چول مخکښې" -02000211="چول وروسته" -02000212="ويېپانګه" -02000213="CRC" -02000214="ډول" -02000215="مخالف" -02000216="لېله" -02000217="کوربه چغ" -02000218="دوتنه غونډال" -02000219="کارن" -0200021A="ډله" -0200021B="غونډ" -0200021C="څرګندون" -0200021D="ځای" -0200021E="يونلور مختاړی" -0200021F="پوښۍ" -02000220="دوتنې" -02000221="نسخه" -02000222="ډکون" -02000223="ګڼډکون" -02000224="افسېټ" -02000225="پېوندونه" -02000226="غوڼدونه" -02000227="ډکونونه" - -; Status bar -02000301="ټاکل شوي څيزونه {0}" -02000302="څيز(ونه) '{0}'" - -02000320="دوتنې:" -02000321="پوښۍ:" -02000322=":کچ" -02000323=":زېرلی کچ" -02000324=":ارشيونه" - -; List Context Menu -02000401="...ستنې&" - -02000411="پرانيستل&" -02000412="...ويستل&" - -; ToolBar -02000501="ويستل" - -; Messages -02000601=".اوسمهاله چلښتونه دې ارشيو لپاره منلي نه دي" -02000602="ارشيو اوسمهالولی نه شي '{0}'" -02000603="پوښۍ جوړولی نه شي '{0}'" -02000604=".دوتنه منلی ارشيو نه دی" -02000605="تېروتنه" -02000606="ډېر زيات توکي" -02000607="د ورکړل شوي دوتنې نوم شاتاړي سره هېڅ کاريال مل نه دی" -02000608="هېڅ تېروتنه نشته" -02000609="'{0}' دوتنه لکه د ارشيو نه شي پرانيستلی" -0200060A="کوډييز ارشيو پرانيستلی نه شي '{0}'. ناسمه تېرنويې؟" - -; Dialogs -02000702="هوکې" -02000705="هو&" -02000707="ټولو ته هو&" -02000709="نه&" -0200070B="ټ&ولو ته نه" - -02000710="بندول" -02000711="بندول&" -02000713="بندول&" -02000714="تمول" -02000715="بياپېلول" - -02000720="مرسته" - -; Extract dialog -02000800="ويستل" -02000801=":ته و&يستل" -02000802="تېرنويې" - -02000810="يونلور اکر" -02000811="بشپړ يونلورنومونه" -02000812="اوسني يونلورنومونه" -02000813="هېڅ يونلورنومونه" - -02000820="سرليکلو اکر" -02000821="سرليکلو نه مخکښې پوښتل" -02000822="بې له پارليکې سرليکل" -02000823="شته دوتنې پرېښودل" -02000824="خپله بيانومول" -02000825="شته دوتنې خپله بيانومول" - -02000830="دوتنې" -02000831="ټاکلې دوتنې&" -02000832="ټولې دوتنې&" - -02000881=".د ويستلو دوتنو لپاره يو ځای وټاکئ" - -02000890="وباسي" - -; Overwrite dialog -02000900="دوتنه ځاېناستی باورييل" -02000901=".موخه پوښۍ دمخه بهيرلې دوتنې لري" -02000902="غواړئ چې شته دوتنه ځاېناستې کړئ" -02000903="له دې سره؟" - -02000911="خپله ب&يانومول" - -02000982="باېټه {0}" -02000983="بدل شوی په" - -; Messages dialog -02000A00="رنځ نومېرنې استوزه" - -02000A80="استوزه" - -02000A91=".لپاره نامنلې زېرنې لېله '{0}'" -02000A92=".کښې اومتوک ستونزه '{0}' دوتنه ماته ده" -02000A93=".کښې سرس پاتې راغی '{0}' دوتنه ماته ده" -02000A94="کوډييزې دوتنې '{0}' کښې اومتوک ستونزه. ناسمه تېرنويې؟" -02000A95="په کوډييزې دوتنې '{0}' کښې سرس پاتې راغی. ناسمه تېرنويې؟" - -; Password dialog -02000B00="تېرنويې وليکئ" -02000B01=":تېرنويې وليکئ" -02000B02="تېرنويې ښودل&" -02000B03=":تېرنويې بيا وليکئ" -02000B10="تېرنويې سمون نه خوري" -02000B11="تېرنويې لپاره يوازې انګريزي توري، شمېرې او ځانګړي لوښې (!, #, $, ...) وکاروئ" -02000B12="تېرنويې ډېره اوږده ده" - -; Progress dialog -02000C00="بهير" -02000C01=":تېر مهال" -02000C02=":پاتې مهال" -02000C03=":بشپړ کچ" -02000C04=":چټکتیا" -02000C05=":بهيرلی" -02000C06=":زېرلو نسبت" - -02000C10="شاليد&" -02000C11="پاسليد&" -02000C12="ځنډول&" -02000C13="پرمختلل&" - -02000C20="څنډېدلی" - -02000C30="په ډاډمنه توګه غواړئ چې بند يې کړئ؟" - -; Compress dialog -02000D00="ارشيو ته زياتول" -02000D01=":ارشيو&" -02000D02=":اوسمهاليز اکر&" -02000D03=":ارشيو بڼه&" -02000D04=":زېرنې &لېله" -02000D05="کلک ارشيو جوړول&" -02000D06=":ارزښتمني&" -02000D07="غوراوي" -02000D08="ارشيو جوړول SF&X" -02000D09="ګڼ-مزيول" -02000D0A="دوتنه &نومونه کوډييزول" -02000D0B=":زېرنې &کچه" -02000D0C=":ويېپانګې کچه&" -02000D0D=":ويې کچ&" -02000D0E=":زېرلو لپاره ياد کارونه" -02000D0F=":نازېرلو لپاره ياد کارونه" -02000D10="کوډییزونه" -02000D11=":کوډییزونې لېله" -02000D12=":د مبي مزيو شمېر" -02000D13=":کلک غونډ کچ" -02000D14="نا-کلک" -02000D15="کلک" -02000D16="ونډولې دوتنې زېرل" - -02000D40=":ډکونونو، باېټونو ته چول&" -02000D41="ناسم ډکون کچ" -02000D42=".باېټه {0} :ټاکلی ډکون کچ\nپه ډاډمنه توګه غواړئ چې ارشيو په داسې ډکونونو وويشئ؟" - -02000D81="زېرمل" -02000D82="ليوی" -02000D83="زيات" -02000D84="چټک" -02000D85="ډېر چټک" -02000D86="ډېر زيات چټک" - -02000D90="لټول" - -02000DA1="دوتنې زياتول او ځاېناستول" -02000DA2="دوتنې اوسمهالول او زياتول" -02000DA3="شته دوتنې تاندول" -02000DA4="دوتنې هممهالول" - -02000DB1="ټولې دوتنې" - -02000DC0="زېرل کيږي" - -; Columns dialog -02000E00="ستنې" -02000E01=".هغه ستنې چې په دې پوښۍ کښې يې ښکاره کول غواړئ، ټک وهئ. د ستنو بيا اوډونولو لپاره د لاندې خوځول او پورته خوځول تڼيو څخه کار واخلئ" -02000E02="ټاکل شوې ستن بايد" -02000E03=".پکسله &پلنه وي" - -02000E10="پورته& خوځول" -02000E11="لاندې خوځول&" -02000E12="ښودل&" -02000E13="پټول&" -02000E14="ټاکل" - -02000E81="سرليک" -02000E82="پلنوالی" - -; Testing -02000F90="ازموينه" - - -; File Manager - -03000000="۷‏-زېپ دوتنه سمبالګر" - -; Menu -03000102="دوتنه&" -03000103="سمون&" -03000104="ليد&" -03000105="توکي&" -03000106="مرسته&" -03000107="خ&واپوري" - -; File -03000210="پرانيستل&" -03000211="دننه& پرانيستل" -03000212="بهر پ&رانيستل" -03000220="ليد&" -03000221="سمون&" -03000230="بي&انومول" -03000231="...ته لمېسل&" -03000232="...ته خوځول&" -03000233="ړنګول&" -03000240="ځانتياوې" -03000241="څرګند&ون" -03000242="چېکسم شمېرل" -03000250="پوښۍ جوړول" -03000251="دوتنه جوړول" -03000260="و&تون" -03000270="...دوتنه چول&" -03000271="...دوتنې يوځ&ايول" - -; Edit -03000310="ناکړ&" -03000311="بياکړ&" -03000320="سکڼ&ل" -03000321="لمېسل&" -03000322="سرېښل&" -03000323="ړنګول&" -03000330="ټول ټاکل&" -03000331="ټول ناټاکل" -03000332="ټاکنه نسکورول&" -03000333="...ټاکل" -03000334="...ناټاکل" -03000335="پر ډول ټاکل" -03000336="پر ډول ناټاکل" - -; View -03000410="لو&ی انځورنونه" -03000411="و&اړه انځورنونه" -03000412="لړ&" -03000413="خبرتياوې&" -03000420="ناڼلي" -03000430="ولۍ پوښۍ پرانيستل" -03000431="يو کچه برول" -03000432="...پوښيو مخينه" -03000440="تاندول&" -03000449="پوړ ليد" -03000450="۲‏ چوکاټه&" -03000451="توکپټې&" -03000460="ارشيو توکپټه" -03000461="کره توکپټه" -03000462="لویې تڼۍ" -03000463="د تڼيو ليکنې ښودل" - -; Tools -03000510="...غوراوي&" -03000511="بنچمارک&" - -; Help -03000610="...منځپانګه&" -03000620="...۷‏-زېپ په اړه&" - -; Favorites -03000710="پوښۍ خواپورو ته زياتول لکه&" -03000720="نښه" - -; Options Dialog - -03010000="غوراوي" - -; Plugins -03010100="لګونونه" -03010101=":لګونونه&" -03010110="...غوراوي" - -; Edit -03010200="سمونګر" -03010201=":سمونګر&" - -; System -03010300="غونډال" -03010302=":له ۷‏-زېپ سره ملول" -03010310="لګون" - -; Settings -03010400="امستنې" -03010401="توکي ښودل \"..\"" -03010402="د دوتنو ريښتيني انځورنونه ښودل" -03010410="غونډال غورنۍ ښودل" -03010420="ټول کيل ټاکل&" -03010421="کرښې ښودل" -03010430="انډوليز ټاکنې اکر&" -03010440="لوی ياد مخونه کارول&" - -; Strings - -03020201="لمېسل" -03020202="خوځول" -03020203=":ته لمېسل" -03020204=":ته خوځول" -03020205="...لميسل کيږي" -03020206="...خوځيږي" -03020207=".له داسې پوښۍ لپاره توکي نه شئ خوځولی يا لمېسلی" -03020208=".چلښت منلی نه دی" -03020209=".موخه پوښۍ وټاکئ" - -03020210="دوتنې ړنګونه باورييل" -03020211="پوښۍ ړنګونه باورييل" -03020212="ګڼو دوتنو ړنګونه باورييل" -03020213="په ډاډمنه توګه '{0}' ړنګول غواړئ؟" -03020214="په ډاډمنه توګه '{0}' پوښۍ او د دې ټوله منځپانګه ړنګول غواړئ؟" -03020215="په ډاډمنه توګه دا {0} توکي ړنګول غواړئ؟" -03020216="...ړنګيږي" -03020217="دوتنې يا پوښۍ ړنګولو ستونزه" - -03020220="بيانوميږي" -03020221="دوتنې يا پوښۍ بيانومولو ستونزه" -03020222="دوتنې لمېسل باورييل" -03020223="په ډاډمنه توګه دوتنې ارشيو ته لمېسل غواړئ؟" - -03020230="پوښۍ جوړول" -03020231=":پوښۍ نوم" -03020232="نوې پوښۍ" -03020233="پوښۍ جوړولو ستونزه" - -03020240="دوتنه جوړول" -03020241=":دوتنه نوم" -03020242="نوې دوتنه" -03020243="دوتنې جوړولو ستونزه" - -03020250="ټاکل" -03020251="ناټاکل" -03020252=":وربوزۍ" - -03020260="پوښيو مخينه" - -03020280=".'{0}' دوتنه کښې بدلون راغلی\nپه ارشيو کښې يې اوسمهالول غواړئ؟" -03020281="'{0}'\nدوتنه اوسمهالولی نه شي" -03020282="سمونګر پېلولی نه شي" -03020283="...پرانيستل کيږي" - -03020290="څرګندون" -03020291=":څرګندون&" - -030202A0="غونډال" - -03020300="سولګر" -03020301="جال" - -03020400="زياتول" -03020401="ويستل" -03020402="ازمويل" - -03020420="لمېسل" -03020421="خوځول" -03020422="ړنګول" -03020423="خبرتياوې" - -03020500="دوتنه چول" -03020501=":ته چول&" -03020510="...چول کيږي" -03020520="چونه باورييل" -03020521="په ډاډمنه توګه دوتنه په {0} ډکونونو وېشل غواړئ؟" -03020522="ډکون کچ بايد د دوتنې ار کچ نه وړوکی وي" - -03020600="دوتنې يوځايول" -03020601=":ته يوځايول&" -03020610="...يوځايږي" -03020620="يوازې لمړۍ دوتنه ټاکل" - -03020710="...چېکسم شمېريږي" -03020720="چېکسم خبرتياوې" -03020721=":چېکسم CRC اومتوک لپاره" -03020722=":چېکسم CRC اومتوک او نومونو لپاره" - -03020800="...ځیريږي" - -03020900="ځانتياوې" - -; Computer -03031100="بشپړ کچ" -03031101="پاتې تشه" -03031102="ځومبک کچ" -03031103="نښکه" - -; Network -03031200="ځایي نوم" -03031201="برابروونى" - -; Benchmark Dialog - -03080000="بنچمارک" -03080001=":ياد کارونه" -03080002="زېريږي" -03080003="نازېريږي" -03080004="چټکتيا" -03080005="کچونه" -03080006="بشپړه کچونه" -03080007="اوسنی" -03080008="پايليز" -03080009=":تيريږي" -0308000A=":تېروتنه" -0308000B="مبي کارونه" -0308000C="کچونه / کارونه" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/pt-br.txt b/External/7-Zip/Lang/pt-br.txt deleted file mode 100644 index 894ab7c5a..000000000 --- a/External/7-Zip/Lang/pt-br.txt +++ /dev/null @@ -1,534 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.59 -; Translated by Fabricio Biazzotto - Atualizado por Felipe -; -; -; -; - -00000000="Portuguese Brazil" -00000001="Português (Brasil)" -00000002="22-1" - -; 7-Zip Configuration - -; Title -01000000="Configuração do 7-Zip" - -; Info Page -01000100="Sobre o 7-Zip" -01000103="7-Zip é um software livre. Contudo, você pode ajudar com o seu desenvolvimento registrando-o." -01000104="Suporte" -01000105="Registrar" - -; Folders Page -01000200="Pastas" -01000210="&Pasta de trabalho" -01000211="&Pasta temporária do sistema" -01000212="&Atual" -01000213="&Especificada:" -01000214="Usar apenas para drives removíveis" - -01000281="Especifique um local para os arquivos temporários." - -; System Page -01000300="Sistema" -01000301="Integrar o 7-Zip ao menu de contexto" -01000302="Menu de contexto em cascata" -01000310="Itens do menu de contexto:" - -; Language Page -01000400="Idioma" -01000401="Idioma:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comandos do 7-Zip" -02000103="Abrir arquivo" -02000104="Abre o arquivo selecionado." -02000105="Extrair arquivos..." -02000106="Extrai o conteúdo do arquivo selecionado." -02000107="Adicionar ao arquivo..." -02000108="Adiciona os itens selecionados ao arquivo." -02000109="Testar o arquivo" -0200010A="Testa a integridade do arquivo selecionado." -0200010B="Extrair aqui" -0200010C="Extrai o conteúdo do arquivo selecionado na pasta atual." -0200010D="Extrair para {0}" -0200010E="Extrai os arquivos para uma sub-pasta." -0200010F="Adicionar para {0}" -02000110="Adiciona os itens selecionados ao arquivo." -02000111="Comprimir e enviar por email..." -02000112="Comprime os itens selecionados e envia o arquivo por e-mail." -02000113="Comprimir para {0} e enviar por email" -02000114="Comprime os itens selecionados e envia o arquivo por e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Caminho" -02000204="Nome" -02000205="Extensão" -02000206="Pasta" -02000207="Tamanho" -02000208="Tamanho Compactado" -02000209="Atributos" -0200020A="Criado" -0200020B="Acessado" -0200020C="Modificado" -0200020D="Sólido" -0200020E="Comentado" -0200020F="Criptografado" -02000210="Dividir Antes" -02000211="Dividir Depois" -02000212="Dicionário" -02000213="CRC" -02000214="Tipo" -02000215="Anti" -02000216="Método" -02000217="Sistema Operacional" -02000218="Sistema de Arquivos" -02000219="Usuário" -0200021A="Grupo" -0200021B="Bloco" -0200021C="Comentário" -0200021D="Posição" -0200021E="Prefixo do Caminho" -0200021F="Pastas" -02000220="Arquivos" -02000221="Versão" -02000222="Volume" -02000223="Multivolume" -02000224="Offset" -02000225="Links" -02000226="Blocos" -02000227="Volumes" - -02000229="64 bits" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Tamanho Físico" -0200022D="Tamanho dos Cabeçalhos" -0200022E="Checksum" -0200022F="Características" -02000230="Endereço Virtual" - -; Status bar -02000301="{0} objeto(s) selecionado(s)" -02000302="{0} objeto(s)" - -02000320="Arquivos:" -02000321="Pastas:" -02000322="Tamanho:" -02000323="Tamanho comprimido:" -02000324="Arquivos:" - -; List Context Menu -02000401="&Colunas..." - -02000411="&Abrir" -02000412="&Extrair..." - -; ToolBar -02000501="Extrair" - -; Messages -02000601="Operações de atualização não são suportadas por este arquivo." -02000602="Não pôde atualizar o arquivo {0}" -02000603="Não pôde criar a pasta '{0}'" -02000604="O arquivo não é suportado." -02000605="Erro" -02000606="Itens demais" -02000607="Não há nenhuma aplicação associada com o nome da extensão dado a este arquivo" -02000608="Não há erros" -02000609="Não pôde abrir o arquivo '{0}' como arquivo" -0200060A="Não pôde abrir o arquivo encriptado '{0}'. Senha errada?" -0200060B="O sistema não pôde alocar a quantidade requerida de memória" -0200060C="Erro desconhecido" -0200060D="Tipo de arquivo não suportado" - -; Dialogs -02000702="OK" -02000705="&Sim" -02000707="Sim para &Todos" -02000709="&Não" -0200070B="Não para To&dos" - -02000710="Cancelar" -02000711="&Cancelar" -02000713="&Fechar" -02000714="Parar" -02000715="Reiniciar" - -02000720="Ajuda" - -; Extract dialog -02000800="Extrair" -02000801="E&xtrair para:" -02000802="Senha" - -02000810="Modo de caminho" -02000811="Nomes dos caminhos completos" -02000812="Nomes dos caminhos atuais" -02000813="Sem nomes de caminhos" - -02000820="Modo de substituição" -02000821="Perguntar antes de sobrescrever" -02000822="Sobrescrever sem perguntar" -02000823="Pular os arquivos existentes" -02000824="Auto-renomear" -02000825="Auto-renomear os arquivos existentes" - -02000830="Arquivos" -02000831="&Arquivos selecionados" -02000832="&Todos os arquivos" - -02000881="Especifique um local para os arquivos extraídos." - -02000890="Extraindo" - -; Overwrite dialog -02000900="Confirmar a substituição dos arquivos" -02000901="A pasta destino já contém o arquivo processado." -02000902="Você gostaria de substituir o arquivo existente" -02000903="por este?" - -02000911="A&uto-Renomear" - -02000982="{0} bytes" -02000983="modificado em" - -; Messages dialog -02000A00="Mensagens de diagnóstico" - -02000A80="Mensagem" - -02000A91="Método de compressão não suportado por '{0}'." -02000A92="Erro nos dados de '{0}'. O arquivo está danificado." -02000A93="Falha no CRC de '{0}'. O arquivo está danificado." -02000A94="Erros nos dados do arquivo encriptado '{0}'. Senha errada?" -02000A95="Falha de CRC no arquivo encriptado '{0}'. Senha errada?" - -; Password dialog -02000B00="Inserir senha" -02000B01="Inserir senha:" -02000B02="&Mostrar senha" -02000B03="Re-inserir a senha:" -02000B10="As senhas não combinam" -02000B11="Usar apenas letras em Inglês, números e caracteres especiais (!, #, $, ...) para a senha" -02000B12="A senha é muito longa" - -; Progress dialog -02000C00="Processo" -02000C01="Tempo decorrido:" -02000C02="Tempo restante:" -02000C03="Tamanho total:" -02000C04="Velocidade:" -02000C05="Processado:" -02000C06="Taxa de compressão:" - -02000C10="&Em segundo plano" -02000C11="&Em primeiro plano" -02000C12="&Pausar" -02000C13="&Continuar" - -02000C20="Pausado" - -02000C30="Você tem certeza que você quer cancelar?" - -; Compress dialog -02000D00="Adicionar ao arquivo" -02000D01="&Arquivo:" -02000D02="&Modo de atualização:" -02000D03="Formato do &arquivo:" -02000D04="Método de &compressão:" -02000D05="Criar &arquivo sólido" -02000D06="&Parâmetros:" -02000D07="Opções" -02000D08="Criar ar&quivo SFX" -02000D09="Multi-processamento" -02000D0A="Criptografar os &nomes dos arquivos" -02000D0B="Nível da &compressão:" -02000D0C="&Tamanho do dicionário:" -02000D0D="&Tamanho da palavra:" -02000D0E="Uso de memória para compressão:" -02000D0F="Uso de memória para descompressão:" -02000D10="Encriptação" -02000D11="Método de encriptação:" -02000D12="Número de threads da CPU:" -02000D13="Tamanho do bloco sólido:" -02000D14="Não-sólido" -02000D15="Sólido" -02000D16="Comprimir arquivos compartilhados" - -02000D40="Dividir em &volumes, bytes:" -02000D41="Tamanho do volume incorreto" -02000D42="Tamanho do volume especificado: {0} bytes.\nVocê tem certeza que você quer dividir o arquivo em tais volumes?" - -02000D81="Armazenar" -02000D82="Normal" -02000D83="Máximo" -02000D84="Rápida" -02000D85="Mais rápida" -02000D86="Ultra" - -02000D90="Navegar" - -02000DA1="Adicionar e substituir arquivos" -02000DA2="Atualizar e adicionar arquivos" -02000DA3="Atualizar arquivos existentes" -02000DA4="Sincronizar arquivos" - -02000DB1="Todos os Arquivos" - -02000DC0="Comprimindo" - -; Columns dialog -02000E00="Colunas" -02000E01="Marque as colunas que você gostaria de tornar visíveis nesta pasta. Use os botões Mover para cima e Mover para baixo para re-ordernar as colunas." -02000E02="A coluna selecionada deve ter" -02000E03="pixels de &largura." - -02000E10="Mover para &cima" -02000E11="Mover para &baixo" -02000E12="&Mostrar" -02000E13="&Esconder" -02000E14="Definir" - -02000E81="Título" -02000E82="Largura" - -; Testing -02000F90="Testando" - - -; File Manager - -03000000="Gerenciador de Arquivos do 7-Zip" - -; Menu -03000102="&Arquivo" -03000103="&Editar" -03000104="&Ver" -03000105="&Ferramentas" -03000106="&Ajuda" -03000107="F&avoritos" - -; File -03000210="&Abrir" -03000211="Abrir &por dentro" -03000212="Abrir ex&ternamente" -03000220="&Ver" -03000221="&Editar" -03000230="Re&nomear" -03000231="&Copiar para..." -03000232="&Mover para..." -03000233="&Apagar" -03000240="P&ropriedades" -03000241="Comen&tário" -03000242="Calcular checksum" -03000250="Criar Pasta" -03000251="Criar Arquivo" -03000260="Sai&r" -03000270="&Dividir arquivo..." -03000271="Com&binar arquivos..." - -; Edit -03000310="&Desfazer" -03000311="&Refazer" -03000320="Co&rtar" -03000321="&Copiar" -03000322="&Colar" -03000323="&Apagar" -03000330="Selecionar &tudo" -03000331="Desfazer seleção" -03000332="&Inverter seleção" -03000333="Selecionar..." -03000334="Desfazer seleção..." -03000335="Selecionar por tipo" -03000336="Desfazer seleção por tipo" - -; View -03000410="Íco&nes grandes" -03000411="Íco&nes pequenos" -03000412="&Lista" -03000413="&Detalhes" -03000420="Desordenado" -03000430="Abrir a Pasta Raiz" -03000431="Subir um nível" -03000432="Histórico das Pastas..." -03000440="&Atualizar" -03000449="Visão Plana" -03000450="&2 Painéis" -03000451="&Barra de Ferramentas" -03000460="Barra de Ferramentas do Arquivo" -03000461="Barra de Ferramentas Padrão" -03000462="Botões Grandes" -03000463="Mostrar o Texto dos Botões" - -; Tools -03000510="&Opções..." -03000511="&Benchmark" - -; Help -03000610="&Conteúdo..." -03000620="&Sobre o 7-Zip..." - -; Favorites -03000710="&Adicionar a pasta aos favoritos como" -03000720="Bookmark" - -; Options Dialog - -03010000="Opções" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Opções..." - -; Edit -03010200="Editor" -03010201="&Editor:" - -; System -03010300="Sistema" -03010302="Associar o 7-Zip com:" -03010310="Plugin" - -; Settings -03010400="Configurações" -03010401="Mostrar o item \"..\" " -03010402="Mostrar os ícones reais dos arquivos" -03010410="Mostrar o menu do sistema" -03010420="&Selecionar a linha inteira" -03010421="Mostrar as &linhas de grade" -03010430="&Modo de seleção alternativo" -03010440="Usar &grandes páginas de memória" - -; Strings - -03020201="Copiar" -03020202="Mover" -03020203="Copiar para:" -03020204="Mover para:" -03020205="Copiando..." -03020206="Movendo..." -03020207="Você não pode mover ou copiar itens para tais pastas." -03020208="A operação não é suportada." -03020209="Selecionar a pasta destino." - -03020210="Confirmar a exclusão do arquivo" -03020211="Confirmar a exclusão da pasta" -03020212="Confirmar a exclusão de múltiplos arquivos" -03020213="Você tem certeza que você quer apagar '{0}'?" -03020214="Você tem certeza que você quer apagar a pasta '{0}' e todo o seu conteúdo?" -03020215="Você tem certeza que você quer apagar estes {0} itens?" -03020216="Apagando..." -03020217="Erro ao apagar o arquivo ou pasta" -03020218="O sistema não pode mover um arquivo com caminho longo para o Recycle Bin" - -03020220="Renomeando..." -03020221="Erro ao renomear o arquivo ou pasta" -03020222="Confirmar a cópia do arquivo" -03020223="Você tem certeza que você quer copiar os arquivos para dentro do arquivo compactado?" - -03020230="Criar Pasta" -03020231="Nome da pasta:" -03020232="Nova Pasta" -03020233="Erro na Criação da Pasta" - -03020240="Criar Arquivo" -03020241="Nome do Arquivo:" -03020242="Novo Arquivo" -03020243="Erro na Criação do Arquivo" - -03020250="Selecionar" -03020251="Desfazer seleção" -03020252="Máscara:" - -03020260="Histórico das Pastas" - -03020280="O arquivo '{0}' foi modificado.\nVocê quer atualizá-lo no arquivo compactado?" -03020281="Não pôde atualizar o arquivo\n'{0}'" -03020282="Não pôde iniciar o editor." -03020283="Abrindo..." -03020284="O arquivo parece um vírus (o nome do arquivo contém espaços longos no nome)." - -03020290="Comentário" -03020291="&Comentário:" - -030202A0="Sistema" - -03020300="Computador" -03020301="Rede" -03020302="Documentos" - -03020400="Adicionar" -03020401="Extrair" -03020402="Testar" - -03020420="Copiar" -03020421="Mover" -03020422="Apagar" -03020423="Info" - -03020500="Dividir Arquivo" -03020501="&Dividir para:" -03020510="Dividindo..." -03020520="Confirmar a Divisão" -03020521="Você tem certeza de quer você dividir o arquivo em {0} volumes?" -03020522="O tamanho do volume deve ser menor do que o tamanho do arquivo original" - -03020600="Combinar Arquivos" -03020601="&Combinar para:" -03020610="Combinando..." -03020620="Selecionar apenas o primeiro arquivo" -03020621="Não pôde detectar o arquivo como parte do arquivo dividido" -03020622="Não pôde achar mais do que uma parte do arquivo dividido" - -03020710="Calculando checksum..." -03020720="Informação de checksum" -03020721="CRC checksum para dados:" -03020722="CRC checksum para dados e nomes:" - -03020800="Escaneando..." - -03020900="Propriedades" - -03020A01="A operação não pode ser chamada de uma pasta que tem um caminho longo." -03020A02="Você deve selecionar um arquivo" -03020A03="Você deve selecionar um ou mais arquivos" -03020A04="O arquivo {0} já existe" - -; Computer -03031100="Tamanho Total" -03031101="Espaço Livre" -03031102="Tamanho do Cluster" -03031103="Rótulo" - -; Network -03031200="Nome Local" -03031201="Provedor" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Uso de memória:" -03080002="Comprimindo" -03080003="Descomprimindo" -03080004="Velocidade" -03080005="Avaliação" -03080006="Total da Avaliação" -03080007="Atual" -03080008="Resultado" -03080009="Passos:" -0308000A="Erros:" -0308000B="Uso da CPU" -0308000C="Avaliação / Uso" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/pt.txt b/External/7-Zip/Lang/pt.txt deleted file mode 100644 index 495967ab4..000000000 --- a/External/7-Zip/Lang/pt.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.46 -; Translated by Rui Costa -; 7-Zip 9.17 -; Traduzido por Sérgio Marques -; This file is distributed under the terms of LGPL V 2 -; - -00000000="Portuguese Standard" -00000001="Português" -00000002="22" - -; 7-Zip Configuration - -; Title -01000000="Configuração 7-Zip" - -; Info Page -01000100="Acerca do 7-Zip" -01000103="O 7-Zip é um programa livre." -01000104="Apoio" -01000105="Registar" - -; Folders Page -01000200="Pastas" -01000210="&Pasta de trabalho" -01000211="Pasta &temporária" -01000212="&Atual" -01000213="&Especificada:" -01000214="Utilizar só para discos amovíveis" - -01000281="Especifique a pasta para os ficheiros temporários." - -; System Page -01000300="Sistema" -01000301="Integrar 7-Zip no menu de contexto" -01000302="Menu de contexto em cascata" -01000310="Itens do menu de contexto:" - -; Language Page -01000400="Idioma" -01000401="Idioma:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comandos 7-Zip" -02000103="Abrir arquivo" -02000104="Abre o arquivo selecionado." -02000105="Extrair ficheiros..." -02000106="Extrai os ficheiros do arquivo selecionado." -02000107="Adicionar ao arquivo..." -02000108="Adiciona ao arquivo os itens selecionados." -02000109="Testar arquivo" -0200010A="Testa a integridade do arquivo selecionado." -0200010B="Extrair para aqui" -0200010C="Extrai para a pasta atual os ficheiros do arquivo selecionado." -0200010D="Extrair para {0}" -0200010E="Extrai os ficheiros para uma subpasta." -0200010F="Adicionar a {0}" -02000110="Adiciona ao arquivo os itens selecionados." -02000111="Comprimir e enviar por e-mail..." -02000112="Comprime os itens selecionados para o arquivo e envia-o por e-mail." -02000113="Comprimir para {0} e enviar por e-mail" -02000114="Comprime os itens selecionados para o arquivo e envia-o por e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Destino" -02000204="Nome" -02000205="Extensão" -02000206="Pasta" -02000207="Tamanho" -02000208="Tamanho comprimido" -02000209="Atributos" -0200020A="Criado" -0200020B="Acedido" -0200020C="Modificado" -0200020D="Sólido" -0200020E="Comentado" -0200020F="Encriptado" -02000210="Separar antes" -02000211="Separar depois" -02000212="Dicionário" -02000213="CRC" -02000214="Tipo" -02000215="Anti" -02000216="Método" -02000217="Sistema operativo" -02000218="Sistema de ficheiros" -02000219="Utilizador" -0200021A="Grupo" -0200021B="Bloco" -0200021C="Comentário" -0200021D="Posição" -0200021E="Prefixo do destino" -0200021F="Pastas" -02000220="Ficheiros" -02000221="Versão" -02000222="Volume" -02000223="Multivolume" -02000224="Não definido" -02000225="Ligações" -02000226="Blocos" -02000227="Volumes" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Tamanho físico" -0200022D="Tamanho dos cabeçalhos" -0200022E="Checksum" -0200022F="Características" -02000230="Endereço virtual" -02000231="ID" -02000232="Abreviatura" -02000233="Criador da aplicação" -02000234="Tamanho do setor" -02000235="Modo" -02000236="Ligação" - -; Status bar -02000301="{0} objeto(s) selecionado(s)" -02000302="{0} objeto(s)" - -02000320="Ficheiros:" -02000321="Pastas:" -02000322="Tamanho:" -02000323="Tamanho do pacote:" -02000324="Arquivos:" - -; List Context Menu -02000401="&Colunas..." - -02000411="&Abrir" -02000412="&Extrair..." - -; ToolBar -02000501="Extrair" - -; Messages -02000601="Este tipo de arquivo não permite atualizações." -02000602="Não é possível atualizar {0}" -02000603="Não é possível criar a pasta '{0}'" -02000604="O ficheiro não é suportado." -02000605="Erro" -02000606="Demasiados itens" -02000607="Não existe nenhuma aplicação associada a esta extensão de ficheiro" -02000608="Não existem erros" -02000609="Não é possível abrir o ficheiro '{0}' como arquivo" -0200060A="Não é possível abrir o arquivo encriptado '{0}'. Senha errada?" -0200060B="O sistema não consegue alocar a memória necessária" -0200060C="Erro desconhecido" -0200060D="O arquivo não é suportado" - -; Dialogs -02000702="OK" -02000705="&Sim" -02000707="Sim a &tudo" -02000709="&Não" -0200070B="Não a t&udo" - -02000710="Cancelar" -02000711="&Cancelar" -02000713="&Fechar" -02000714="Parar" -02000715="Reiniciar" - -02000720="Ajuda" - -; Extract dialog -02000800="Extrair" -02000801="E&xtrair para:" -02000802="Senha" - -02000810="Modo de nome de pasta" -02000811="Nome de pastas completo" -02000812="Nome de pastas atual" -02000813="Sem nome de pastas" - -02000820="Modo de sobrescrever" -02000821="Com confirmação" -02000822="Sem confirmação" -02000823="Ignorar os ficheiros existentes" -02000824="Renomear automaticamente." -02000825="Renomear automomaticamente os ficheiros existentes" - -02000830="Ficheiros" -02000831="Ficheiros &selecionados" -02000832="&Todos os ficheiros" - -02000881="Especifique o destino para os ficheiros extraídos." - -02000890="A extrair" - -; Overwrite dialog -02000900="Confirmar a substituição do ficheiro" -02000901="A pasta já possui um ficheiro com o mesmo nome." -02000902="Deseja substituir o ficheiro existente" -02000903="por este?" - -02000911="Renomear a&utomaticamente" - -02000982="{0} bytes" -02000983="modificado em" - -; Messages dialog -02000A00="Mensagens de diagnóstico" - -02000A80="Mensagem" - -02000A91="O método de compressão é inválido para '{0}'." -02000A92="Erro de dados em '{0}'. O arquivo está danificado." -02000A93="CRC falhou em '{0}'. O arquivo está danificado." -02000A94="Erro de dados no ficheiro encriptado '{0}'. Senha errada?" -02000A95="CRC falhou no ficheiro encriptado '{0}'. Senha errada?" - -; Password dialog -02000B00="Introduza a senha" -02000B01="Introduza a senha:" -02000B02="&Mostrar senha" -02000B03="Reintroduza a senha:" -02000B10="As senhas não coincidem" -02000B11="Para a senha, utilize apenas letras Inglesas, números e os caracteres especiais (!, #, $, ...)" -02000B12="A senha é muito comprida" - -; Progress dialog -02000C00="Evolução" -02000C01="Tempo decorrido:" -02000C02="Tempo restante:" -02000C03="Tamanho:" -02000C04="Velocidade:" -02000C05="Processado:" -02000C06="Rácio de compressão:" - -02000C10="&Segundo plano" -02000C11="P&rimeiro plano" -02000C12="&Pausar" -02000C13="&Continuar" - -02000C20="Pausado" - -02000C30="Tem a certeza que quer cancelar?" - -; Compress dialog -02000D00="Adicionar ao arquivo" -02000D01="&Arquivo:" -02000D02="&Modo de atualização:" -02000D03="&Formato do arquivo:" -02000D04="Método de &compressão:" -02000D05="Criar arquivo &sólido" -02000D06="&Parâmetros:" -02000D07="Opções" -02000D08="Criar arquivo SF&X" -02000D09="Multi-processamento" -02000D0A="Encriptar &nomes de ficheiro" -02000D0B="Níve&l de compressão:" -02000D0C="Tamanho do &dicionário:" -02000D0D="&Tamanho da &alavra:" -02000D0E="Utilização de memória para compressão:" -02000D0F="Utilização de memória para descompressão:" -02000D10="Encriptação" -02000D11="Método de encriptação:" -02000D12="Nº de processos do CPU:" -02000D13="Tamanho dos blocos sólidos:" -02000D14="Não sólido" -02000D15="Sólido" -02000D16="Comprimir ficheiros partilhados" - -02000D40="Separar por &volumes, bytes:" -02000D41="Tamanho do volume incorreto" -02000D42="Tamanho do volume especificado: {0} bytes.\nTem a certeza que quer separar o arquivo em tais volumes?" - -02000D81="Sem compressão" -02000D82="Normal" -02000D83="Máxima" -02000D84="Rápida" -02000D85="A mais rápida" -02000D86="Ultra" - -02000D90="Procurar" - -02000DA1="Adicionar e substituir ficheiros" -02000DA2="Atualizar e adicionar ficheiros" -02000DA3="Atualizar ficheiros" -02000DA4="Sincronizar ficheiros" - -02000DB1="Todos os ficheiros" - -02000DC0="A comprimir" - -; Columns dialog -02000E00="Colunas" -02000E01="Selecione as colunas que pretende visíveis nesta pasta. Utilize os botões Subir e Baixar para organizar as colunas." -02000E02="A coluna seleccionada deve ter" -02000E03="&pixeis de largura." - -02000E10="&Subir" -02000E11="&Baixar" -02000E12="&Mostrar" -02000E13="&Ocultar" -02000E14="Fixar" - -02000E81="Título" -02000E82="Largura" - -; Testing -02000F90="A testar" - - -; File Manager - -03000000="Gestor de ficheiros 7-Zip" - -; Menu -03000102="&Ficheiro" -03000103="&Editar" -03000104="&Ver" -03000105="Ferramen&tas" -03000106="A&juda" -03000107="F&avoritos" - -; File -03000210="&Abrir" -03000211="Abrir &dentro" -03000212="Abrir &fora" -03000220="&Ver" -03000221="&Editar" -03000230="Reno&mear" -03000231="&Copiar para..." -03000232="&Mover para..." -03000233="Apa&gar" -03000240="P&ropriedades" -03000241="Come&ntário" -03000242="Calcular checksum" -03000243="Diff" -03000250="Criar pasta" -03000251="Criar ficheiro" -03000260="Sa&ir" -03000270="&Separar ficheiro..." -03000271="Com&binar ficheiros..." -; Edit -03000310="&Desfazer" -03000311="&Refazer" -03000320="Cor&tar" -03000321="&Copiar" -03000322="C&olar" -03000323="&Apagar" -03000330="Selecionar &tudo" -03000331="Desselecionar tudo" -03000332="&Inverter seleção" -03000333="Selecionar..." -03000334="Desselecionar..." -03000335="Selecionar por tipo" -03000336="Desselecionar por tipo" - -; View -03000410="Ícones &grandes" -03000411="Ícones &pequenos" -03000412="&Lista" -03000413="&Detalhes" -03000420="Sem ordem" -03000430="Abrir pasta root" -03000431="Subir um nível" -03000432="Histórico de pastas..." -03000440="&Atualizar" -03000449="Vista plana" -03000450="&2 painéis" -03000451="&Barras de ferramentas" -03000460="Barra de ferramentas do arquivo" -03000461="Barra de ferramentas padrão" -03000462="Botões grandes" -03000463="Mostrar legenda dos botões" - -; Tools -03000510="&Opções..." -03000511="&Avaliação" - -; Help -03000610="&Conteúdo..." -03000620="&Acerca do 7-Zip..." - -; Favorites -03000710="&Adicionar pasta aos favoritos como" -03000720="Marcador" - -; Options Dialog - -03010000="Opções" - -; Plugins -03010100="Plug-ins" -03010101="&Plug-ins:" -03010110="Opções..." - -; Edit -03010200="Editor" -03010201="&Editor:" -03010202="&Diff:" - -; System -03010300="Sistema" -03010302="Associar 7-Zip com:" -03010310="Plug-in" - -; Settings -03010400="Definições" -03010401="Mostrar item \"..\" " -03010402="Mostrar ícones reais dos ficheiros" -03010410="Mostrar menu do sistema" -03010420="Seleção de linha &completa" -03010421="Mostrar linhas da &grelha" -03010422="Clique único para abrir um item" -03010430="Modo de seleção &alternativo" -03010440="Utilizar páginas de &memória grandes" - -; Strings - -03020201="Copiar" -03020202="Mover" -03020203="Copiar para:" -03020204="Mover para:" -03020205="Copiando..." -03020206="Movendo..." -03020207="Não pode copiar ou mover ficheiros para essas pastas." -03020208="Operação não suportada." -03020209="Selecione a pasta de destino." - -03020210="Confirmar a eliminação de ficheiro" -03020211="Confirmar a eliminação de pasta" -03020212="Confirmar a eliminação de múltiplos ficheiros" -03020213="Tem a certeza que quer eliminar '{0}'?" -03020214="Tem a certeza que quer eliminar a pasta '{0}' e todo o seu conteúdo?" -03020215="Tem a certeza que quer eliminar {0} itens?" -03020216="A eliminar..." -03020217="Erro ao eliminar ficheiro ou pasta" -03020218="O sistema não consegue mover para a reciclagem um ficheiro com um caminho longo" - -03020220="A renomear..." -03020221="Erro ao renomear ficheiro ou pasta" -03020222="Confirmar a cópia de ficheiros" -03020223="Tem a certeza que quer copiar os ficheiros para o arquivo?" - -03020230="Criar pasta" -03020231="Nome da pasta:" -03020232="Nova pasta" -03020233="Erro ao criar pasta" - -03020240="Criar ficheiro" -03020241="Nome do ficheiro:" -03020242="Novo ficheiro" -03020243="Erro ao criar ficheiro" - -03020250="Selecionar" -03020251="Desselecionar" -03020252="Máscara:" - -03020260="Histórico de pastas" - -03020280="O ficheiro '{0}' foi modificado.\nDeseja atualizá-lo no arquivo?" -03020281="Não foi possível atualizar o ficheiro\n'{0}'" -03020282="Não foi possível iniciar o editor." -03020283="A abrir..." -03020284="Dá a sensação que o ficheiro possa ser um vírus (o nome do ficheiro contém muitos espaços em branco)." - -03020290="Comentário" -03020291="&Comentário:" - -030202A0="Sistema" - -03020300="Computador" -03020301="Rede" -03020302="Documentos" - -03020400="Adicionar" -03020401="Extrair" -03020402="Testar" - -03020420="Copiar" -03020421="Mover" -03020422="Apagar" -03020423="Info" - -03020500="Separar ficheiro" -03020501="&Separar para:" -03020510="A separar..." -03020520="Confirmar separação" -03020521="Tem a certeza que quer separar o ficheiro em {0} volumes?" -03020522="O tamanho do volume tem de ser inferior ao tamanho do ficheiro original" - -03020600="Combinar ficheiros" -03020601="&Combinar para:" -03020610="A combinar..." -03020620="Selecione apenas o primeiro ficheiro" -03020621="Não foi possivel detetar o ficheiro como parte do ficheiro dividido" -03020622="Não foi possível encontrar mais que uma parte do ficheiro dividido" - -03020710="A calcular o checksum..." -03020720="Informação do checksum" -03020721="CRC checksum para dados:" -03020722="CRC checksum para dados e nome:" - -03020800="A pesquisar..." - -03020900="Propriedades" - -03020A01="A operação não pode ser invocada a partir de uma pasta com um longo caminho." -03020A02="Tem que selecionar um ficheiro" -03020A03="Tem que selecionar um ou mais ficheiros" -03020A04="Já existe o ficheiro {0}" -; Computer -03031100="Tamanho total" -03031101="Espaço livre" -03031102="Tamanho do cluster" -03031103="Etiqueta" - -; Network -03031200="Nome local" -03031201="Fornecedor" - -; Benchmark Dialog - -03080000="Avaliação" -03080001="Utilização de memória:" -03080002="Comprimindo" -03080003="Descomprimindo" -03080004="Velocidade" -03080005="Avaliação" -03080006="Avaliação global" -03080007="Atual" -03080008="Resultante" -03080009="Passagens:" -0308000A="Erros:" -0308000B="Utilização do CPU" -0308000C="Avaliação/Utilização" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/ro.txt b/External/7-Zip/Lang/ro.txt deleted file mode 100644 index c13bca451..000000000 --- a/External/7-Zip/Lang/ro.txt +++ /dev/null @@ -1,534 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.59 -; Translated by Lucian Nan ( http://www.prizeeinternational.com) -; -; -; -; - -00000000="Romanian" -00000001="Română" -00000002="24" - -; 7-Zip Configuration - -; Title -01000000="Configuraţia 7-Zip" - -; Info Page -01000100="Despre 7-Zip" -01000103="7-Zip este un program gratuit. Oricum, poţi contribui la dezvoltarea 7-Zip înregistrându-te." -01000104="Suport tehnic" -01000105="Înregistrează" - -; Folders Page -01000200="Directoare" -01000210="&Directorul de lucru" -01000211="Directorul &tempotar al sistemului" -01000212="&Actual" -01000213="&Specificat:" -01000214="Utilizează numai pentru discurile detaşabile" - -01000281="Specifică o destinaţie pentru arhivele temporare." - -; System Page -01000300="Sistem" -01000301="Integrează 7-Zip în contextul meniului shell" -01000302="Contextul meniului în cascadă" -01000310="Obiectele meniului:" - -; Language Page -01000400="Limba" -01000401="Limba:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comenzi 7-Zip" -02000103="Deschide arhiva" -02000104="Deschide arhivele selectate." -02000105="Dezarhivează fişierele..." -02000106="Dezarhivează fişierele din arhiva selectată." -02000107="Adaugă într-o arhivă..." -02000108="Adaugă obiectele selectate într-o arhivă." -02000109="Testează arhiva" -0200010A="Testează integritatea arhivei selectate." -0200010B="Dezarhivează aici" -0200010C="Dezarhivează fişierele din arhiva selectată în directorul actual." -0200010D="Dezarhivează în {0}" -0200010E="Dezarhivează fişierele în subdirector." -0200010F="Adaugă în {0}" -02000110="Adaugă obiectele selectate într-o arhivă." -02000111="Arhivează şi trimite email..." -02000112="Arhivează obiectele selectate într-o arhivă şi trimite-o prin email." -02000113="Arhivează în {0} şi trimite email" -02000114="Arhivează obiectele selectate într-o arhiva şi trimite-o prin email." - -02000140="" -02000141="" - -; Properties -02000203="Calea" -02000204="Nume" -02000205="Extensie" -02000206="Director" -02000207="Mărime" -02000208="Mărimea pachetului" -02000209="Atribute" -0200020A="Creată" -0200020B="Accesată" -0200020C="Modificată" -0200020D="Solidă" -0200020E="Comentat" -0200020F="Criptat" -02000210="Împarte înainte" -02000211="Împarte după" -02000212="Dicţionar" -02000213="CRC" -02000214="Tip" -02000215="Anti" -02000216="Metoda" -02000217="SO gazdă" -02000218="Fişier de sistem" -02000219="Utilizator" -0200021A="Grup" -0200021B="Blochează" -0200021C="Comentariu" -0200021D="Poziţia" -0200021E="Prefixul destinaţiei" -0200021F="Directoare" -02000220="Fişiere" -02000221="Versiunea" -02000222="Volum" -02000223="Multivolume" -02000224="Ofset" -02000225="Legături" -02000226="Blocuri" -02000227="Volume" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Mărime fizică" -0200022D="Mărimea antetelor" -0200022E="Checksum" -0200022F="Caracteristici" -02000230="Adresa virtuală" - -; Status bar -02000301="{0} obiect(e) selectat(e)" -02000302="{0} obiect(e)" - -02000320="Fişiere:" -02000321="Directoare:" -02000322="Mărime:" -02000323="Mărimea comprimată:" -02000324="Arhive:" - -; List Context Menu -02000401="&Coloane..." - -02000411="&Deschide" -02000412="De&zarhivează..." - -; ToolBar -02000501="Dezarhivează" - -; Messages -02000601="Operaţiile de actualizare nu sunt suportate pentru această arhivă." -02000602="Nu pot actualiza arhiva {0}" -02000603="Nu pot crea directorul '{0}'" -02000604="Fişierul nu este o arhivă suportată." -02000605="Eroare" -02000606="Prea multe obiecte" -02000607="Nu este nici o aplicaţie asociată cu extensia fişierului dat" -02000608="Nu sunt erori" -02000609="Nu pot deschide fişierul '{0}' ca arhivă" -0200060A="Nu pot deschide arhiva criptată '{0}'. Parola greşită?" -0200060B="Sistemul nu poate aloca memoria necesară" -0200060C="Eroare necunoscută" -0200060D="Tip de arhivă nesuportat" - -; Dialogs -02000702="Bine" -02000705="&Da" -02000707="Da, pe &toate" -02000709="&Nu" -0200070B="N&ici unul" - -02000710="Anulare" -02000711="&Anulare" -02000713="&Închide" -02000714="Opreşte" -02000715="Restartează" - -02000720="Ajutor" - -; Extract dialog -02000800="Dezarhivează" -02000801="Dezarhivează în:" -02000802="Parola" - -02000810="Modul destinaţie" -02000811="Numele întreg al destinaţiei" -02000812="Destinaţia actuală" -02000813="Fără locaţie" - -02000820="Modul de înlocuire" -02000821="Întreabă înainte de a înlocui" -02000822="Înlocuieşte fară a întreba" -02000823="Sări peste fişierele existente" -02000824="Auto redenumire" -02000825="Auto redenumeşte fişierele existente" - -02000830="Fişiere" -02000831="Fişierele &selectate" -02000832="&Toate fişierele" - -02000881="Specifică o destinaţie pentru fişierele dezarhivate." - -02000890="Dezarhivez" - -; Overwrite dialog -02000900="Aprobă înlocuirea fişierului" -02000901="Fişierul există deja în directorul destinaţie." -02000902="Doriţi să înlocuiţi fişierul existent" -02000903="cu acesta?" - -02000911="A&uto redenumire" - -02000982="{0} octeţi" -02000983="modifcat pe" - -; Messages dialog -02000A00="Mesaje de diagnosticare" - -02000A80="Mesaj" - -02000A91="Metodă de arhivare nesuportată pentru '{0}'." -02000A92="Eroare de date la '{0}'. Fişierul este corupt." -02000A93="Verificarea CRC a eşuat pentru '{0}'. Fişierul este corupt." -02000A94="Erori de date la fişierul criptat '{0}'. Parolă greşită?" -02000A95="Verificarea CRC a eşuat pentru fişierul criptat '{0}'. Parolă greşită?" - -; Password dialog -02000B00="Introdu parola" -02000B01="Introdu parola:" -02000B02="&Arată parola" -02000B03="Reintrodu parola:" -02000B10="Parolele nu sunt identice" -02000B11="Utilizaţi numai litere, cifre şi caracterele speciale (!, #, $, ...) pentru parolă" -02000B12="Parola este prea lungă" - -; Progress dialog -02000C00="Procesare" -02000C01="Timp trecut:" -02000C02="Timp rămas:" -02000C03="Mărimea:" -02000C04="Viteza:" -02000C05="Procesat:" -02000C06="Rata de comprimare:" - -02000C10="În &fundal" -02000C11="La &suprafaţă" -02000C12="&Pauză" -02000C13="&Continuă" - -02000C20="În pauză" - -02000C30="Eşti sigur că vrei să anulezi?" - -; Compress dialog -02000D00="Adaugă într-o arhivă" -02000D01="&Arhivează:" -02000D02="Modul de a&ctualizare:" -02000D03="&Formatul arhivei:" -02000D04="&Metoda de arhivare:" -02000D05="Crează arhivă &solidă" -02000D06="&Parametri:" -02000D07="Opţiuni" -02000D08="Crează arhivă SF&X" -02000D09="Mai multe fire de execuţie" -02000D0A="Criptează &numele fişierului" -02000D0B="&Nivel de arhivare:" -02000D0C="Mărimea &dicţionarului:" -02000D0D="Mărimea &cuvântului:" -02000D0E="Memorie utilizată pentru arhivare:" -02000D0F="Memorie utilizată pentru dezarhivare:" -02000D10="Criptare" -02000D11="Metoda de criptare:" -02000D12="Numărul de procesoare utilizate:" -02000D13="Mărimea blocului solid:" -02000D14="NEsolid" -02000D15="Solid" -02000D16="Arhivează fişierele partajate" - -02000D40="Împarte în &volume, octeţi:" -02000D41="Dimensiunea volumului este incorectă" -02000D42="Dimensiunea volumului specificat: {0} octeţi.\nEşti sigur că vrei să împarţi arhiva în mai multe volume (părţi)?" - -02000D81="Stochează" -02000D82="Normală" -02000D83="Maximă" -02000D84="Rapidă" -02000D85="Imediată" -02000D86="Ultra" - -02000D90="Caută" - -02000DA1="Adaugă şi înlocuieşte fişierele" -02000DA2="Actualizează şi adaugă fişierele" -02000DA3="Actualizează fişierele existente" -02000DA4="Sincronizează fişierele" - -02000DB1="Toate fişierele" - -02000DC0="Arhivare" - -; Columns dialog -02000E00="Coloane" -02000E01="Bifează coloanele pe care vrei să le faci vizibile în acest director. Utilizează butoanele Mută sus şi Mută jos pentru a reordona coloanele." -02000E02="Coloana selectată poate fi" -02000E03="puncte &mari." - -02000E10="Mută &sus" -02000E11="Mută &jos" -02000E12="&Arată" -02000E13="As&cunde" -02000E14="S&etează" - -02000E81="Titlu" -02000E82="Lăţime" - -; Testing -02000F90="Testez" - - -; File Manager - -03000000="Managerul de fişiere 7-Zip" - -; Menu -03000102="&Fişier" -03000103="&Editează" -03000104="&Vizualizează" -03000105="&Unelte" -03000106="&Ajutor" -03000107="F&avorite" - -; File -03000210="&Deschide" -03000211="Deschide î&n" -03000212="Deschide în &afară" -03000220="&Vizualizeză" -03000221="&Editează" -03000230="&Redenumeşte" -03000231="&Copiază la..." -03000232="&Mută la..." -03000233="Şter&ge" -03000240="&Proprietăţi" -03000241="Comen&tariu" -03000242="Calculează suma de verificare" -03000250="Crează director" -03000251="Crează fişier" -03000260="&Ieşire" -03000270="Împarte &fişierul..." -03000271="&Uneşte fişierele..." - -; Edit -03000310="Ca anterior (&Undo)" -03000311="&Repetă (Redo)" -03000320="&Taie" -03000321="&Copiază" -03000322="&Lipeşte" -03000323="Şter&ge" -03000330="&Selectează tot" -03000331="&Deselectează tot" -03000332="&Inversează selecţia" -03000333="Selectează..." -03000334="Deselectează..." -03000335="Selectează după tip" -03000336="Deselectează după tip" - -; View -03000410="Iconiţe m&ari" -03000411="Iconiţe m&ici" -03000412="&Listă" -03000413="&Detalii" -03000420="Nesortat" -03000430="Deschide directorul rădăcină" -03000431="Un nivel mai sus" -03000432="Istoria directoarelor..." -03000440="&Împrospătează" -03000449="Vedere plană" -03000450="&2 panouri" -03000451="Bare de &unelte" -03000460="Bara de arhivare" -03000461="Bara de unelte standard" -03000462="Butoane mari" -03000463="Arată textul butoanelor" - -; Tools -03000510="&Opţiuni..." -03000511="&Banc de încercare" - -; Help -03000610="&Conţinut..." -03000620="&Despre 7-Zip..." - -; Favorites -03000710="&Adaugă directorul în Favorite ca" -03000720="Semn de carte" - -; Options Dialog - -03010000="Opţiuni" - -; Plugins -03010100="Plugin-uri" -03010101="&Plugin-uri:" -03010110="Opţiuni..." - -; Edit -03010200="Editor" -03010201="&Editor:" - -; System -03010300="Sistem" -03010302="Asociază 7-Zip cu:" -03010310="Plugin" - -; Settings -03010400="Setări" -03010401="Arată \"..\" obiect" -03010402="Arată iconiţele reale ale fişierului" -03010410="Arată meniul sistemului" -03010420="Selectează &tot rândul" -03010421="Arată liniile de ghidare" -03010430="Mod de selectare &alternativă" -03010440="Utilizează pagini &mari de memorie" - -; Strings - -03020201="Copiază" -03020202="Mută" -03020203="Copiază la:" -03020204="Mută la:" -03020205="Copiez..." -03020206="Mut..." -03020207="Nu poţi muta sau copia obiectele în aceleaşi directoare." -03020208="Operaţia nu este suportată." -03020209="Alege directorul destinaţie." - -03020210="Aprobă ştergerea fişierului" -03020211="Aprobă ştergerea directorului" -03020212="Aprobă ştergerea mai multor fişiere" -03020213="Eşti sigur că vrei să ştergi '{0}'?" -03020214="Eşti sigur că vrei să ştergi directorul '{0}' şi tot conţinutul lui?" -03020215="Eşti sigur că vrei să ştergi aceste {0} obiecte?" -03020216="Şterg..." -03020217="Eroare la ştergerea fişierului sau directorului" -03020218="Sistemul nu poate muta un fişier cu cale lungă la Coşul de gunoi" - -03020220="Redenumesc..." -03020221="Eroare la redenumirea fişierului sau directorului" -03020222="Aprobă copierea fişierului" -03020223="Eşti sigur că vrei să copiezi fişierele în arhivă" - -03020230="Crează director" -03020231="Numele directorului:" -03020232="Director nou" -03020233="Eroare la crearea directorului" - -03020240="Crează fişier" -03020241="Numele fişierului:" -03020242="Fişier nou" -03020243="Eroare la crearea fişierului" - -03020250="Selectează" -03020251="Deselectează" -03020252="Masca:" - -03020260="Istoria directoarelor" - -03020280="Fişierul '{0}' a fost modificat.\nDoreşti să îl actualizez în arhivă?" -03020281="Nu pot actualiza fişierul\n'{0}'" -03020282="Nu pot porni editorul." -03020283="Deschid..." -03020284="The file looks like a virus (the file name contains long spaces in name)." - -03020290="Comentariu" -03020291="&Comentariu:" - -030202A0="Sistem" - -03020300="Computer" -03020301="Reţea" -03020302="Documente" - -03020400="Arhivează" -03020401="Dezarhivează" -03020402="Testează" - -03020420="Copiază" -03020421="Mută" -03020422="Şterge" -03020423="Info" - -03020500="Împarte fişierul" -03020501="Î&mparte în:" -03020510="Împart..." -03020520="Confirmă împărţirea" -03020521="Eşti sigur că vrei să imparţi arhiva în {0} volume (părţi)?" -03020522="Dimensiunea volumului trebuie să fie mai mică decât dimensiunea fişierului original" - -03020600="Uneşte fişierele" -03020601="&Uneşte în:" -03020610="Unesc..." -03020620="Alege doar prima parte din fişierul împărțit" -03020621="Nu pot detecta fișierul ca parte a fișierului împărțit" -03020622="Nu găsesc mai mult de o parte din fișierul împărțit" - -03020710="Calculez suma de control..." -03020720="Informaţii despre suma de control" -03020721="Suma de control CRC pentru conţinut:" -03020722="Suma de control CRC pentru conţinut şi nume:" - -03020800="Citesc..." - -03020900="Proprietăţi" - -03020A01="Operația nu poate fi apelată dintr-un director cu cale lungă." -03020A02="Trebuie să alegi un fișier" -03020A03="Trebuie să alegi unul sau mai multe fișiere" -03020A04="Fișierul {0} există deja" - -; Computer -03031100="Mărimea totală" -03031101="Spaţiu liber" -03031102="Mărimea grupului" -03031103="Etichetă" - -; Network -03031200="Nume local" -03031201="Distribuitor" - -; Benchmark Dialog - -03080000="Banc de încercare" -03080001="Memorie utilizată:" -03080002="Arhivez" -03080003="Dezarhivez" -03080004="Viteza" -03080005="Rata" -03080006="Rata totală" -03080007="Actual" -03080008="Rezultate" -03080009="Trecute:" -0308000A="Erori:" -0308000B="Utilizarea procesorului" -0308000C="Rata / Utilizare" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/ru.txt b/External/7-Zip/Lang/ru.txt deleted file mode 100644 index 506f91781..000000000 --- a/External/7-Zip/Lang/ru.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Igor Pavlov -; -; -; -; - -00000000="Russian" -00000001="Русский" -00000002="25" - -; 7-Zip Configuration - -; Title -01000000="7-Zip - Конфигурация" - -; Info Page -01000100="О программе 7-Zip" -01000103="7-Zip является свободно распространяемой программой." -01000104="Поддержка" -01000105="Зарегистрировать" - -; Folders Page -01000200="Папки" -01000210="&Рабочая папка" -01000211="&Системная временная папка" -01000212="&Текущая" -01000213="&Задать:" -01000214="Использовать только для сменных носителей" - -01000281="Укажите положение для временных архивов." - -; System Page -01000300="Система" -01000301="Встроить 7-Zip в контекстное меню оболочки" -01000302="Каскадное контекстное меню" -01000310="Элементы контекстного меню:" - -; Language Page -01000400="Язык" -01000401="Язык:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Команды 7-Zip." -02000103="Открыть архив" -02000104="Открытие выделенного архива." -02000105="Распаковать" -02000106="Извлечение файлов из выделенного архива." -02000107="Добавить к архиву..." -02000108="Добавить выделенные объекты к архиву." -02000109="Тестировать" -0200010A="Тестирование выделенного архива." -0200010B="Распаковать здесь" -0200010C="Извлечение файлов из выделенного архива в текущую папку." -0200010D="Распаковать в {0}" -0200010E="Извлечение файлов в подкаталог." -0200010F="Добавить к {0}" -02000110="Добавить выделенные объекты к архиву." -02000111="Сжать и отправить по email..." -02000112="Сжать выделенные объекты и отправить архив по email." -02000113="Сжать в {0} и отправить по email" -02000114="Сжать выделенные объекты и отправить архив по email." - -02000140="<Папка>" -02000141="<Архив>" - -; Properties -02000203="Путь" -02000204="Имя" -02000205="Расширение" -02000206="Папка" -02000207="Размер" -02000208="Сжатый" -02000209="Атрибуты" -0200020A="Создан" -0200020B="Открыт" -0200020C="Изменен" -0200020D="Непрерывный" -0200020E="Комментарий" -0200020F="Зашифрован" -02000210="Разбит До" -02000211="Разбит После" -02000212="Словарь" -02000213="CRC" -02000214="Тип" -02000215="Анти" -02000216="Метод" -02000217="Система" -02000218="Файловая Система" -02000219="Пользователь" -0200021A="Группа" -0200021B="Блок" -0200021C="Комментарий" -0200021D="Позиция" -0200021E="Путь" -0200021F="Папок" -02000220="Файлов" -02000221="Версия" -02000222="Том" -02000223="Многотомный" -02000224="Смещение" -02000225="Ссылок" -02000226="Блоков" -02000227="Томов" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="Процессор" -0200022C="Физический Размер" -0200022D="Размер Заголовков" -0200022E="Контрольная Сумма" -0200022F="Характеристики" -02000230="Виртуальный Адрес" -02000231="ID" -02000232="Короткое Имя" -02000233="Создатель" -02000234="Размер Сектора" -02000235="Режим" -02000236="Ссылка" - -; Status bar -02000301="Выделено объектов: {0}" -02000302="{0} объект(ов)" - -02000320="Файлов:" -02000321="Папок:" -02000322="Размер:" -02000323="Сжатый:" -02000324="Архивов:" - -; List Context Menu -02000401="&Столбцы..." - -02000411="&Открыть" -02000412="&Извлечь..." - -; ToolBar -02000501="Извлечь" - -; Messages -02000601="Операции изменения не поддерживаются для этого архива." -02000602="Не удалось изменить архив {0}" -02000603="Не удалось создать папку '{0}'" -02000604="Файл не является поддерживаемым архивом." -02000605="Ошибка" -02000606="Слишком много элементов" -02000607="Нет ассоциированного приложения" -02000608="Ошибок не найдено" -02000609="Не удалось открыть файл '{0}' как архив" -0200060A="Не удалось открыть зашифрованный архив '{0}'. Неверный пароль?" -0200060B="Недостаточно свободной памяти" -0200060C="Неизвестная ошибка" -0200060D="Неподдерживаемый тип архива" - -; Dialogs -02000702="OK" -02000705="&Да" -02000707="Да для &всех" -02000709="&Нет" -0200070B="Нет для в&сех" - -02000710="Отмена" -02000711="&Отмена" -02000713="&Закрыть" -02000714="Стоп" -02000715="Перезапуск" - -02000720="Помощь" - -; Extract dialog -02000800="Извлечь" -02000801="&Распаковать в:" -02000802="&Пароль" - -02000810="Пути" -02000811="По&лные пути" -02000812="О&тносительные пути" -02000813="&Без путей" - -02000820="Перезапись" -02000821="&С подтверждением" -02000822="Б&ез подтверждения" -02000823="Проп&ускать" -02000824="Переименовать автом." -02000825="Переим. автом. существ." - -02000830="Файлы" -02000831="Выбранные файлы" -02000832="Все файлы" - -02000881="Укажите положение для извлекаемых файлов." - -02000890="Распаковка" - -; Overwrite dialog -02000900="Подтверждение замены файла" -02000901="Папка уже содержит обрабатываемый файл." -02000902="Заменить существующий файл" -02000903="следующим файлом?" - -02000911="Переименовать автом." - -02000982="{0} байтов" -02000983="изменен" - -; Messages dialog -02000A00="Сообщения" - -02000A80="Сообщение" - -02000A91="Неподдерживаемый метод сжатия для файла '{0}'." -02000A92="Ошибка в данных в '{0}'. Файл испорчен." -02000A93="Ошибка CRC в '{0}'. Файл испорчен." -02000A94="Ошибка в данных зашифрованного файла '{0}'. Неверный пароль?" -02000A95="Ошибка CRC для зашифрованного файла '{0}'. Неверный пароль?" - -; Password dialog -02000B00="Ввод пароля" -02000B01="&Введите пароль:" -02000B02="&Показать пароль" -02000B03="&Повторите пароль:" -02000B10="Пароли не совпадают" -02000B11="Для пароля используйте только символы латинского алфавита, цифры и специальные символы (!, #, $, ...)" -02000B12="Пароль слишком длинный" - -; Progress dialog -02000C00="Процесс" -02000C01="Прошло:" -02000C02="Осталось:" -02000C03="Всего:" -02000C04="Скорость:" -02000C05="Размер:" -02000C06="Степень сжатия:" - -02000C10="&Фоном" -02000C11="&На передний план" -02000C12="&Пауза" -02000C13="&Продолжить" - -02000C20="На паузе" - -02000C30="Вы действительно хотите прервать операцию?" - -; Compress dialog -02000D00="Добавить к архиву" -02000D01="&Архив:" -02000D02="&Режим изменения:" -02000D03="&Формат архива:" -02000D04="&Метод сжатия:" -02000D05="Создать &Solid архив" -02000D06="&Параметры:" -02000D07="&Опции" -02000D08="Создать SF&X-архив" -02000D09="М&ногопоточность" -02000D0A="&Шифровать имена файлов" -02000D0B="&Уровень сжатия:" -02000D0C="Размер &словаря:" -02000D0D="Размер с&лова:" -02000D0E="Объем памяти для упаковки:" -02000D0F="Объем памяти для распаковки:" -02000D10="Шифрование" -02000D11="Метод шифрования:" -02000D12="Число потоков:" -02000D13="Размер блока:" -02000D14="По размеру файла" -02000D15="Непрерывный" -02000D16="Сжимать открытые для записи файлы" - -02000D40="Разбить на &тома размером (в байтах):" -02000D41="Ошибка в поле для задания размера томов" -02000D42="Установленный размер тома: {0} байтов.\nВы действительно хотите разбить архив на такие тома?" - -02000D81="Без сжатия" -02000D82="Нормальный" -02000D83="Максимальный" -02000D84="Быстрый" -02000D85="Скоростной" -02000D86="Ультра" - -02000D90="Пролистать" - -02000DA1="Добавить и заменить" -02000DA2="Обновить и добавить" -02000DA3="Обновить" -02000DA4="Синхронизировать" - -02000DB1="Все файлы" - -02000DC0="Компрессия" - -; Columns dialog -02000E00="Столбцы" -02000E01="Пометьте столбцы, которые следует отображать в этой папке. Кнопками \"Вверх\" и \"Вниз\" можно задать порядок следования столбцов." -02000E02="Выбранные столбцы должны иметь ширину" -02000E03="точек." - -02000E10="&Вверх" -02000E11="В&низ" -02000E12="П&оказать" -02000E13="&Скрыть" -02000E14="Установить" - -02000E81="Имя" -02000E82="Ширина" - -; Testing -02000F90="Тестирование" - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&Файл" -03000103="&Правка" -03000104="&Вид" -03000105="С&ервис" -03000106="&Справка" -03000107="&Избранное" - -; File -03000210="&Открыть" -03000211="Открыть &внутри" -03000212="Открыть снару&жи" -03000220="Просмотр" -03000221="&Редактировать" -03000230="Переи&меновать" -03000231="&Копировать в..." -03000232="&Переместить в..." -03000233="&Удалить" -03000240="Сво&йства" -03000241="Комме&нтарий..." -03000242="Контрольная сумма" -03000243="Diff" -03000250="&Создать Папку" -03000251="Созд&ать Файл" -03000260="В&ыход" -03000270="Ра&збить файл..." -03000271="О&бъединить файлы..." - -; Edit -03000310="&Отменить" -03000311="&Вернуть" -03000320="&Вырезать" -03000321="&Копировать" -03000322="Вст&авить" -03000323="&Удалить" -03000330="Выделить в&се" -03000331="Убрать выделение" -03000332="&Обратить в&ыделение" -03000333="Выделить..." -03000334="Убрать выделение..." -03000335="Выделить по типу" -03000336="Убрать выделение по типу" - -; View -03000410="&Крупные значки" -03000411="&Мелкие значки" -03000412="Спис&ок" -03000413="&Таблица" -03000420="Без сортировки" -03000430="Открыть корневую папку" -03000431="Переход на один уровень вверх" -03000432="История папок..." -03000440="О&бновить" -03000449="Плоский режим" -03000450="&2 Панели" -03000451="&Панели инструментов" -03000460="Панель кнопок архиватора" -03000461="Стандартная панель кнопок" -03000462="Большие кнопки" -03000463="Надписи на кнопках" - -; Tools -03000510="Настройки..." -03000511="Тестирование производительности" - -; Help -03000610="&Оглавление..." -03000620="О &программе..." - -; Favorites -03000710="Добавить папку в &избранное как" -03000720="Закладка" - -; Options Dialog - -03010000="Настройки" - -; Plugins -03010100="Плагины" -03010101="&Плагины:" -03010110="Сво&йства" - -; Edit -03010200="Редактор" -03010201="&Редактор:" -03010202="&Diff:" - -; System -03010300="Система" -03010302="Ассоциировать 7-Zip с файлами:" -03010310="Плагин" - -; Settings -03010400="Настройки" -03010401="Показывать элемент \"..\"" -03010402="Показывать реальные иконки файлов" -03010410="Показывать системное меню" -03010420="Курсор на всю строку" -03010421="Показывать разделители" -03010422="Открывать одним щелчком" -03010430="Альтернативный режим пометки" -03010440="Использовать большие страницы памяти" - -; Strings - -03020201="Копировать" -03020202="Переместить" -03020203="Копировать в:" -03020204="Переместить в:" -03020205="Копирование..." -03020206="Перемещение..." -03020207="Нельзя скопировать объекты для таких папок" -03020208="Операция не поддерживается для этой папки." -03020209="Укажите папку." - -03020210="Подтверждение удаления файла" -03020211="Подтверждение удаления папки" -03020212="Подтверждение удаления группы файлов" -03020213="Вы действительно хотите удалить \"{0}\"?" -03020214="Вы действительно хотите удалить папку \"{0}\" и все ее содержимое?" -03020215="Вы действительно хотите удалить эти объекты ({0} шт.)?" -03020216="Удаление..." -03020217="Ошибка при удалении файла или папки" -03020218="Система не поддерживает операцию удаления файлов с длинными путями в корзину" - -03020220="Переименование..." -03020221="Ошибка при переименовании файла или папки" -03020222="Подтверждение копирования файлов" -03020223="Вы действительно хотите скопировать эти файлы в архив" - -03020230="Создать папку" -03020231="Имя папки:" -03020232="Новая папка" -03020233="Ошибка при создании папки" - -03020240="Создать файл" -03020241="Имя файла:" -03020242="Новый файл" -03020243="Ошибка при создании файла" - -03020250="Выделить" -03020251="Убрать выделение" -03020252="Маска:" - -03020260="История папок" - -03020280="Файл '{0}' был изменен.\nВы хотите обновить его в архиве?" -03020281="Не удалось обновить файл\n'{0}'" -03020282="Не удалось запустить редактор" -03020283="Открытие..." -03020284="Файл похож на вирус (имя файла содержит длинную последовательность пробелов)." - -03020290="Комментарий" -03020291="&Комментарий:" - -030202A0="Система" - -03020300="Компьютер" -03020301="Сеть" -03020302="Документы" - -03020400="Добавить" -03020401="Извлечь" -03020402="Тестировать" - -03020420="Копировать" -03020421="Переместить" -03020422="Удалить" -03020423="Информация" - -03020500="Разбить файл" -03020501="&Разбить в:" -03020510="Разбиение..." -03020520="Подтверждение разбиения" -03020521="Вы действительно хотите разбить файл на {0} частей?" -03020522="Размер тома должен быть меньше размера исходного файла" - -03020600="Объединить файлы" -03020601="&Объединить в:" -03020610="Объединение..." -03020620="Необходимо выделить только первую часть разбитого файла" -03020621="Не удалось распознать разбитый файл" -03020622="Не удалось найти более одной части разбитого файла" - -03020710="Вычисление контрольной суммы..." -03020720="Контрольная сумма" -03020721="Контрольная сумма CRC для данных:" -03020722="Контрольная сумма CRC для данных и имен:" - -03020800="Сканирование..." - -03020900="Свойства" - -03020A01="Операция не может быть исполнена из папки, которая имеет длинный путь." -03020A02="Вы должны выделить один файл" -03020A03="Вы должны выделить один или несколько файлов" -03020A04="Файл {0} уже существует" - -; Computer -03031100="Емкость" -03031101="Свободно" -03031102="Размер кластера" -03031103="Метка" - -; Network -03031200="Локальное имя" -03031201="Провайдер" - -; Benchmark Dialog - -03080000="Тестирование производительности" -03080001="Объем памяти:" -03080002="Упаковка" -03080003="Распаковка" -03080004="Скорость" -03080005="Рейтинг" -03080006="Общий рейтинг" -03080007="Текущий" -03080008="Итоговый" -03080009="Проходов:" -0308000A="Ошибок:" -0308000B="Нагрузка" -0308000C="Рейтинг / Нагр." - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/sa.txt b/External/7-Zip/Lang/sa.txt deleted file mode 100644 index d0b9dfd7e..000000000 --- a/External/7-Zip/Lang/sa.txt +++ /dev/null @@ -1,547 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Vinayy Sharrma, अनुवादं विनय शर्मा -;संस्कृतम् गर्व कुरु, जय हिन्दं ! जय संस्कृतम्! -;एतत् साधारण अनुवादं अस्ति -; -; - -00000000="Sanskrit, Indian, हिन्दुस्तानं" -00000001="संस्कृत" -00000002="79" - -; 7-Zip Configuration - -; Title -01000000="7-जिप संरचना" - -; Info Page -01000100="7-जिप विषय" -01000103="7-जिपं एतत निःशुल्क सॉफ़्टवेयर अस्ति. तथापि, भवान् पंजीकृतं(रजिस्टर्ड) होकर७-ज़िपस्य विकास में सहयोग कर सकते अस्ति." -01000104="सहयोग" -01000105="पंजीकरणम्" - -; Folders Page -01000200="फ़ोल्डर्स" -01000210="&कार्यरत फोल्डरं" -01000211="&प्रणालयास्य अस्थायी(टेम्पररी) फोल्डरं" -01000212="&चालू" -01000213="&निर्दिष्ट:" -01000214="मात्र हटाने योग्य(रिमूवेबल) ड्राईवाय ही प्रयोगं कुरु" - -01000281="अस्थायी संग्रहम् फाइलाय स्थानं निर्दिष्टं कुरु(बतायें)." - -; System Page -01000300="प्रणाली वा तंत्रम्" -01000301="7-जिपस्य शेल(कवच) प्रसंग मेनु में जोडें" -01000302="सोपानीकृत(केस्केडेड) प्रसंग मेनु" -01000310="प्रसंग(कोन्टेक्स्ट) मेनु वस्तुएँ:" - -; Language Page -01000400="भाषा" -01000401="भाषा:" - - -; 7-Zip Explorer extension - - -; Context menu -02000101="7-जिप" -02000102="7-जिप आदेशाः(कमांड्स)" -02000103="संग्रहम् अनावृतं" -02000104="चयनित संग्रहम् खोलता अस्ति." -02000105="फ़ाइल्स बहिः निकाले..." -02000106="चयनितं संग्रहम् में से फाइले बहिः निकाले ." -02000107="संग्रहम् में जोड़े..." -02000108="चयनित वस्तुओं को संग्रहम् में जोड़ता अस्ति." -02000109="संग्रहमस्य जाँच कुरु" -0200010A="चयनित संग्रहमस्य एकसूत्रता जाँचता अस्ति." -0200010B="यहीं बहिः निकाले" -0200010C="चयनित संग्रहम् में से वर्तमानं फोल्डरं में फाइले बहिः निकाले." -0200010D="{0} में बहिः निकाले" -0200010E="उप-फोल्डरं में फ़ाइल्स को बहिः निकाले." -0200010F="{0} में जोड़े" -02000110="चयनित वस्तुं को संग्रहम् में जोड़े." -02000111="संकुचनं एवम् ईमेलम् कुरु..." -02000112="चयनित वस्तुओं को संकुचित कर संग्रहम् में जोड़ता अस्ति एवम् संग्रहम् ई-मेल द्वारा भेजता अस्ति." -02000113=" {0} में दबायें एवम् ईमेलं कुरु" -02000114="चयनित वस्तुओं को संकुचित कर संग्रहम् में जोड़ता अस्ति एवम् संग्रहम् ई-मेलम् द्वारा भेजता अस्ति." - - -02000140="<फोल्डरं>" -02000141="<संग्रहम्(आर्चिव)>" - -; Properties -02000203="मार्ग" -02000204="नाम" -02000205="विस्तारं" -02000206="फोल्डरं" -02000207="आकारं" -02000208="कुल आकारं" -02000209="विशेषता वा गुणधर्म" -0200020A="सर्जितं" -0200020B="चालितम्" -0200020C="परिवर्धितं" -0200020D="ठोस" -0200020E="टिप्पणी" -0200020F="गुप्तिकृतम्" -02000210="के पूर्व विभाजनं(टुकडे) कुरु " -02000211="के पश्चात विभाजनं(टुकडे) कुरु" -02000212="शब्दकोशं" -02000213="सीआरसी" -02000214="प्रकारं" -02000215="विरोधी" -02000216="पद्धति" -02000217="ओपरेटिंग सिस्टम" -02000218="फ़ाइलं प्रणाली" -02000219="प्रयोगकर्ता" -0200021A="समूहम्" -0200021B="रोक वा टुकड़े" -0200021C="प्रतिक्रिया" -0200021D="स्थानं" -0200021E="मार्ग प्रत्ययं" -0200021F="फोल्डर्स" -02000220="फाइल्स" -02000221="संस्करणम्" -02000222="जत्था" -02000223="अनेक जत्थे" -02000224="ओफसेट" -02000225="कडियाँ" -02000226="टुकड़े" -02000227="जत्थे" - -02000229="64-बिट" -0200022A="विशाल-एन्डियन" -0200022B="सीपीयू" -0200022C="भौतिक आकारं" -0200022D="शीर्षकाः आकारं" -0200022E="जाँचयोग" -0200022F="चरित्रताऎं" -02000230="आभासी पता" -02000231="आईडी" -02000232="संक्षिप्तः नामं" -02000233="सर्जक अनुप्रयोगं" -02000234="सेक्टरस्य आकारं" -02000235="स्थिति" -02000236="कड़ी" - -; Status bar -02000301="{0} चयनित वस्तु(एँ)" -02000302="{0} वस्तु(एँ)" - -02000320="फ़ाइलें:" -02000321="फ़ोल्डर्स:" -02000322="आकारं:" -02000323="संकुचित किया आकारं:" -02000324="संग्रहम्:" - -; List Context Menu -02000401="&स्तंभ..." - -02000411="&अनावृतं" -02000412="&बहिः निकाले..." - -; ToolBar -02000501="बहिः निकाले" - -; Messages -02000601="एतत् संग्रहमस्य अद्यतनीकृत संचालन समर्थित ना अस्ति." -02000602="{0} संग्रहम् को अद्यतनीकृतं ना कर सकता" -02000603=" '{0}' फोल्डरं सर्जित ना कर सकता" -02000604="फाइलं समर्थित संग्रहम् ना अस्ति." -02000605="त्रुटि" -02000606="अत्यधिक वस्तुएँ" -02000607="दिये हुए फाइलं के नाम के विस्तार के साथ कोई भी सम्बन्धित अनुप्रयोगं(प्रोग्रामं) ना अस्ति" -02000608="इनमे कोई भी त्रुटि ना अस्ति" -02000609="'{0}' फाइल को संग्रहम् के रूप में ना खोल सकता" -0200060A="'{0}' गुप्तिकृतम् संग्रहम् को ना खोल सकता. मिथ्या कूटशब्दम्?" -0200060B="तंत्रम् आवश्यक मात्रा में मेमोरी(स्मृति) वितरितं ना कर सकता अस्ति" -0200060C="अज्ञात त्रुटिम्" -0200060D="असमर्थित संग्रहम् प्रकारं" - -; Dialogs -02000702="ठीक अस्ति" -02000705="&हाँ" -02000707="&सर्वस्य हाँ" -02000709="&ना" -0200070B="&सर्वस्य ना" - -02000710="रद्द" -02000711="&रद्द" -02000713="&बंद कुरु" -02000714="रूको" -02000715="पुनः शुरु कुरु" - -02000720="मददं" - -; Extract dialog -02000800="बहिः निकाले" -02000801="&बहिः निकाले:" -02000802="कूटशब्दम्(पासवर्ड)" - -02000810="मार्ग स्थिति" -02000811="पूर्ण मार्गनामं" -02000812="वर्तमानं मार्गनामं" -02000813="कोई मार्ग नामं ना अस्ति" - -02000820="अधिलेखन रीत" -02000821="अधिलेखन करने से पहले पृच्छाः" -02000822="बिना पृच्छाः अधिलेखनं(पुराने को मिटाना) कुरु" -02000823="पहले से मौजूद फ़ाइलस को छोड़े" -02000824="स्वचालित पुन: नामकरणं" -02000825="पहले से मौजूद फ़ाइलस का स्वचालितं(ओटोमेटिक) पुन: नामकरणं कुरु" - -02000830="फ़ाइलें" -02000831="&चयनित फ़ाइलें" -02000832="&सर्व फ़ाइलें" - -02000881="बहिः निकाली हुई फ़ाइलों के लिये स्थानं निर्दिष्टं कुरु." - -02000890="बहिः निकाल रहा अस्ति" - -; Overwrite dialog -02000900="फ़ाइलं प्रतिस्थापनं को पक्का कुरु" -02000901="गन्तव्य फोल्डरं में पहले से ही प्रक्रिया हुई फ़ाइलं अस्ति." -02000902="क्या भवान् पहले से मौजूद फ़ाइल को बदलना पसंद करेंगे?" -02000903="इसके साथ?" - -02000911="स्वचालित पुन: नामकरणम्" - -02000982="{0} बाइट्स" -02000983="को परिवर्धितं" - -; Messages dialog -02000A00="निदानात्मकं संदेश" - -02000A80="संदेशं" - -02000A91="'{0}' के लिए असहायक दबाने की पद्धति." -02000A92="डेटा त्रुटि'{0}' में. फ़ाइलं टूटी हुई अस्ति." -02000A93="'{0}' में सीआरसी असफल. फ़ाइलं टूटी हुई अस्ति." -02000A94=" '{0}' गुप्तिकृतम्(एनक्रिप्टेड) फाइलं में डेटा त्रुटि. मिथ्या कूटशब्दम्?" -02000A95=" '{0}'गुप्तिकृतम्(एनक्रिप्टेड) फाइलं में सीआरसी असफल. मिथ्या कूटशब्दम्?" - -; Password dialog -02000B00="कूटशब्दम्(पासवर्ड) डाले" -02000B01="कूटशब्दम्(पासवर्ड) डाले:" -02000B02="&कूटशब्दम्(पासवर्ड) दिखाओ" -02000B03="कूटशब्दम् पुनः डाले:" -02000B10="कूटशब्दम् सहेजे हुए से अलग अस्ति" -02000B11="कूटशब्दम् के लिये मात्र इंग्लिश वर्णमाला, अंकाः और विशेष अक्षरों (!, #, $, ...) का ही उपयोग कुरु" -02000B12="कूटशब्दम् अत्यधिक विशाल अस्ति" - -; Progress dialog -02000C00="प्रक्रिया" -02000C01="व्यतीत समय:" -02000C02="शेष बचा समय:" -02000C03="कुल आकारं:" -02000C04="गति:" -02000C05="प्रक्रिया किया हुआ:" -02000C06="दबाने(आकारं छोटा करने) का अनुपातं:" - -02000C10="&पॄष्ठ्भूमि" -02000C11="&अग्रभूमि(डेस्क्टोप)" -02000C12="&विश्राम" -02000C13="&जारी रखे" - -02000C20="विश्रामितं" - -02000C30="त्वम रद्द करना चाहते हो. तुम्हें यकीन अस्ति क्या?" - -; Compress dialog -02000D00="संग्रहम् में जोड़े" -02000D01="&संग्रहम्:" -02000D02="&अद्यतनीकरणं स्थिति(मोड):" -02000D03="संग्रहम् &ढाँचा:" -02000D04="&संकुचनम् विधि:" -02000D05="&ठोस संग्रहम् निर्माणम् कुरु" -02000D06="&परिमाप:" -02000D07="विकल्प" -02000D08="&एसएफ़एक्स(SFX) संग्रहम् निर्माणम् कुरु" -02000D09="अनेक-सूत्री" -02000D0A="फ़ाइल &नाम गुप्तिकरणम् कुरु" -02000D0B="&संकुचनम् स्तर:" -02000D0C="&शब्दकोशम् आकारं:" -02000D0D="&शब्द आकारं:" -02000D0E="संकुचनस्य स्मृति प्रयोग:" -02000D0F="प्रसारणस्य स्मृति प्रयोग:" -02000D10="गुप्तिकरणम्" -02000D11="गुप्तिकरणम् पद्धति:" -02000D12="सीपीयू सूत्र संख्या:" -02000D13="ठोस टुकडे का आकारं:" -02000D14="अ-ठोसं" -02000D15="ठोसं" -02000D16="साझी फाइलें संकुचितं कुरु" - -02000D40="जत्थों में विभाजनं, बाइट्स:" -02000D41="जत्थे का आकारं मिथ्या अस्ति" -02000D42="निर्देशित जत्था आकारं: {0} बाइटस.\n भवान् संग्रहम् को ऎसे जत्थों में विभाजितं करना चाहते अस्ति, क्या आपको यकीन अस्ति?" - -02000D81="भण्डारणम्" -02000D82="साधारणम्" -02000D83="अधिकतम" -02000D84="तेज" -02000D85="सर्वाधिक तेज" -02000D86="अत्यन्त" - -02000D90="ब्राउजम् वा घूमे" - -02000DA1="फ़ाइलें जोड़े एवम् प्रतिस्थापित कुरु" -02000DA2="फ़ाइले अद्यतनीकृतं कुरु एवम् जोड़े" -02000DA3="अवस्थितं फ़ाइलें ताजा कुरु" -02000DA4="फाइलें समक्रमण(सिंक्रोनाईज़) कुरु" - -02000DB1="सर्वाः फ़ाइलें" - -02000DC0="संकुचनं कर रहा अस्ति" - -; Columns dialog -02000E00="स्तंभ" -02000E01="इस फोल्डरं में जो स्तंभ, तुम दिखाई दें ऎसे बनाना चाहते हो उन्हें टिक(चयन) कुरु. स्तंभो का क्रम बदलने के लिये उर्ध्वं ले जाओ एवम् अधः ले जाओ बटनस्य(खटके) उपयोगं कुरु" -02000E02="चयनित स्तंभम्" -02000E03="&पिक्सेल(बूँद) चौड़े." - -02000E10="&उर्ध्वं ले जाएँ" -02000E11="&अधः ले जाएँ" -02000E12="&दिखाये" -02000E13="&छुपाये" -02000E14="सेट(स्थिर)" - -02000E81="शीर्षक" -02000E82="चौड़ाई" - -; Testing -02000F90="परीक्षणम्" - - -; file Manager - -03000000="7-जिप फ़ाइल प्रबन्धकम्" - -; Menu -03000102="&फ़ाइलम्" -03000103="&संपादनम्" -03000104="&दर्शनम्" -03000105="&औजारम्" -03000106="&मददम्" -03000107="&मनपसंदम्" - -; file -03000210="&अनावृतं" -03000211="&अंदर अनावृतं" -03000212="&बहिः अनावृतं" -03000220="&दृश्यम्" -03000221="&संपादनम्" -03000230="&पुन: नामकरणम्" -03000231="&में नकल बनाये..." -03000232="&में ले जायें..." -03000233="&मिटायें" -03000240="&संपत्तियाँ वा गुणं" -03000241="&टिप्पणी" -03000242="&जाँच योगस्य गणनां कुरु" -03000243="&अन्तर" -03000250="&फोल्डरं निर्माणम् कुरु" -03000251="&फ़ाइलं निर्माणम् कुरु" -03000260="&निर्गमन" -03000270="&फ़ाइलस्य विभाजनं कुरु..." -03000271="&फ़ाइलस्य संयोजनं कुरु..." - -; Edit -03000310="&पुर्वस्थिती(पहले जैसा)" -03000311="&पुनः कुरु" -03000320="&काटे" -03000321="&नकल कुरु" -03000322="&चिपकायें" -03000323="&मिटायें" -03000330="&सर्व चयनं कुरु" -03000331="&सर्व अचयनितं कुरु" -03000332="&चयन उलटा कुरु" -03000333="चयनं कुरु..." -03000334="अचयनं कुरु..." -03000335="प्रकार द्वारा चयनम्" -03000336="प्रकार द्वारा अचयनम्" - -; View -03000410="विशाल प्रतीकं" -03000411="लघु प्रतीकं" -03000412="&सूची" -03000413="&वर्णनं" -03000420="अवितरितम्" -03000430="मूल फोल्डरं अनावृतं" -03000431="एक स्तर उर्ध्व चढ़े" -03000432="फ़ोल्डरो का इतिहास..." -03000440="&ताजा कुरु" -03000449="चौड़ा दृश्य" -03000450="&२ फ़लक" -03000451="&औजार पट्टीयाँ" -03000460="संग्रहम् उपकरणपट्टी" -03000461="मानक औजार पट्टी" -03000462="विशाल खटके(बटन)" -03000463="खटके(बटन) के शब्द दिखायें" - -; Tools -03000510="&विकल्पम्..." -03000511="&बेञ्चमार्कम्(प्रामाणिक तुलना)" - -; Help -03000610="&सामग्री..." -03000620="7-जिप विषय..." - -; Favorites -03000710="&फोल्डरं मनपसंद में ऎसे जोड़े..." -03000720="पुस्तचिन्हम्" - -; Options Dialog - -03010000="विकल्पम्" - -; Plugins -03010100="प्लगइन(शक्तिदायक)" -03010101="&प्लगइन(शक्तिदायक):" -03010110="विकल्पम्..." - -; Edit -03010200="संपादकम्" -03010201="&संपादक:" -03010202="&अन्तर:" - -; System -03010300="प्रणाली वा तंत्रम्" -03010302="संबधित कुरु 7-जिप के साथ:" -03010310="प्लगइन(शक्तिदायक)" - -; Settings -03010400="व्यवस्थाएँ" -03010401="दिखाओ \"..\"वस्तु" -03010402="वास्तविक फ़ाइल प्रतिमायें दिखाओ" -03010410="तंत्रस्य मेनु दिखाओ" -03010420="&पूर्ण पन्क्तिस्य चयनं" -03010421=" &ग्रिड(जाल) रेखा दिखाओ" -03010422="वस्तु अनावृताय एकं ही(सिंगल)-क्लिकम्" -03010430="&वैकल्पिक चयनं स्थिति" -03010440="&विशाल् स्मृति पृष्ठस्य प्रयोगं कुरु" - -; Strings - -03020201="नकल" -03020202="ले जायें" -03020203="में नकल:" -03020204="में ले जायें:" -03020205="नकल..." -03020206="ले जा रहा अस्ति..." -03020207="ऎसे फोल्डरों के लिये तुम वस्तुओं को हटाना वा नकल करना ना कर सकते." -03020208="एतत् फोल्डरं के लिये यह सञ्चालनं क्रिया समर्थितं ना अस्ति." -03020209="गन्तव्य फोल्डरं चयनित कुरु." - -03020210="फ़ाइल मिटाये यह पक्का कुरु" -03020211="फोल्डरं मिटायें पक्का कुरु" -03020212="अनेक फ़ाइल मिटायें पक्का कुरु" -03020213="क्या तुम्हे यकीन अस्ति कि तुम मिटाना चाहते हो '{0}'?" -03020214="क्या तुम्हे यकीन अस्ति कि तुम फोल्डरं मिटाना चाहते हो '{0}' और इसकी सर्वाः सामग्री भी?" -03020215="क्या तुम्हे यकीन अस्ति कि तुम मिटाना चाहते हो इन {0} वस्तुओं को?" -03020216="मिटा रहा अस्ति..." -03020217="फ़ाइलं किंवा फोल्डरं मिटाने में त्रुटि" -03020218="तंत्र लंबे मार्ग वाली फाइलं को पुनःचक्रण पेटी(रिसाईकल बिन) में ना ले जा सकता अस्ति." - -03020220="पुन: नामकरणं..." -03020221="फ़ाइल वा फोल्डरं के पुन: नामकरणं में त्रुटि" -03020222="फ़ाइल की नकल करना पक्का कुरु" -03020223="तुम संग्रहम् में फाइलं की प्रतिलिपि करना चाहते हो क्या तुम्हे यकीन अस्ति" - -03020230="फ़ॊल्डर निर्माणम् कुरु" -03020231="फोल्डरं नाम:" -03020232="नवीन फ़ॊल्डर" -03020233="फोल्डरं निर्माणम् करने में त्रुटि" - -03020240="फ़ाइल निर्माणम् कुरु" -03020241="फ़ाइल नाम:" -03020242="नवीन फ़ाइलं" -03020243="फ़ाइल निर्माणम् करने में त्रुटि" - -03020250="चयनम्" -03020251="चयन रद्द" -03020252="मुखौटा:" - -03020260="फ़ोल्डरों का इतिहास" - -03020280=" '{0}' फ़ाइल परिवर्धितं हुई अस्ति.\nक्या तुम संग्रहम् में इसे अद्यतनीकृतं करना चाहते हो?" -03020281="फ़ाइल को अद्यतनीकृतं ना कर सकता\n'{0}'" -03020282="संपादक को शुरू ना कर सकता." -03020283="अनावृतं कर रहा अस्ति..." -03020284="यह फाइलं एक विषाणु(वायरस) जैसी लगती अस्ति(फाइलं नाम लंबी खाली जगह नाम में रखता अस्ति)." - -03020290="टिप्पणी" -03020291="&टिप्पणी:" - -030202A0="प्रणाली" - -03020300="संगणकम्" -03020301="सञ्जालम्" -03020302="दस्तावेजम्" - -03020400="जोड़े" -03020401="बहिः निकाले" -03020402="परीक्षणम्" - -03020420="नकल" -03020421="ले जायें" -03020422="मिटायें" -03020423="सूचना" - -03020500="फ़ाइलस्य विभाजनं कुरु" -03020501="&में विभाजनं:" -03020510="विभाजनं कर रहा अस्ति..." -03020520="विभाजनं करना पक्का कुरु" -03020521="क्या तुम्हे यकीन अस्ति कि तुम फाइलं को {0} जत्थों में विभाजित करना चाहते हो?" -03020522="मूल फाइलं के आकारं की तुलना में जत्थे का आकारं छोटा ही होना चाहिए" - -03020600="फ़ाइले संयोजितं कुरु" -03020601="&में संयोजनं कुरु:" -03020610="संयोजनं हो रहा अस्ति..." -03020620="विभाजितं फाइल का मात्र प्रथम भागं ही चयनितं कुरु" -03020621="फाइलं को विभाजित फाइलं के भाग के रूप में पहचान ना सकता" -03020622="विभाजित फाइलं का एक से ज्यादा भाग ना ढूँढ सकता" - -03020710="जाँचयोगस्य(चेकसम) गणनां कर रहा अस्ति..." -03020720="जाँचयोग(चेकसम) माहिती" -03020721="सीआरसी जाँचयोग(चेकसम) आँकड़ों के लिये :" -03020722="सीआरसी जाँचयोग(चेकसम) आँकड़ों और नामों के लिये :" - -03020800="तलाशी(स्कैनिंग) कर रहा अस्ति..." - -03020900="गुणम् वा संपत्तियाँ" - -03020A01="जिस फोल्डरं का लंबा मार्ग अस्ति उससे सञ्चालनं क्रिया ना बुलाई जा सकती." -03020A02="तुम्हे एक फाइलं का चयन तो करना ही होगा" -03020A03="तुम्हे एक वा अधिक फाइलों को चुनना ही होगा" -03020A04="फाइलं {0} पहले से मौजूद अस्ति" - -; Computer -03031100="कुल आकारं" -03031101="स्वतन्त्र रिक्तस्थानं(खाली जगह)" -03031102="क्लस्टर(समूह) आकारं" -03031103="ध्यानाकर्षकं(लेबलम्)" - -; Network -03031200="स्थानिय नामम्" -03031201="प्रदायकम्" - -; Benchmark Dialog - -03080000="(कसौटी चिन्हं)बेञ्चमार्कम्" -03080001="स्मृति उपयोग:" -03080002="संकुचनं कर रहा अस्ति" -03080003="प्रसारणं हो रहा अस्ति" -03080004="गति(वेग)" -03080005="क्रमांकन" -03080006="कुल क्रमांकन" -03080007="वर्तमानम्" -03080008="परिणामम्" -03080009="पास:" -0308000A="त्रुटियाँ:" -0308000B="सीपीयू उपयोग" -0308000C="क्रमांकन / उपयोग" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/si.txt b/External/7-Zip/Lang/si.txt deleted file mode 100644 index 0da37538b..000000000 --- a/External/7-Zip/Lang/si.txt +++ /dev/null @@ -1,534 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.59 -; Translated by සුපුන් බුධාජීව (Supun Budhajeewa) -; -; -; -; - -00000000="Sinhala" -00000001="සිංහල" -00000002="91" - -; 7-Zip Configuration - -; Title -01000000="7-Zip වින්‍යාසගත කිරීම්" - -; Info Page -01000100="7-Zip පිළිබඳව" -01000103="7-Zip නිදහස් මෘදුකාංගයක් වුවත්, ලියාපදිංචි වීම මගින් 7-Zip හි වැඩි දියුණුව සඳහා ඔබට දායක විය හැකිය.\n\nමෙම සිංහල භාෂා පරිවර්තනය G.S.N. සුපුන් බුධාජීව (budhajeewa@gmail.com) විසින් සිදු කරන ලදී." -01000104="සහය දෙන්න" -01000105="ලියාපදිංචි වෙන්න" - -; Folders Page -01000200="බහාලුම්" -01000210="සක්‍රීය බහාලුම් (&W)" -01000211="පද්ධති තාවකාලික දෑ (Temp) බහාලුම (&S)" -01000212="වත්මන් (&C)" -01000213="තෝරන්න (&S):" -01000214="ඉවත් කළ හැකි ධාවක සඳහා පමණක් භාවිතා කරන්න" - -01000281="තාවකාලික හැකිළුම් ගොනු සඳහා ස්ථානයක් දෙන්න." - -; System Page‍ -01000300="පද්ධතිය" -01000301="Shell context මෙනුව වෙත 7-Zip අන්තර්ගත කරන්න" -01000302="Context menu අංග එක් අංගයක් යටතේ සඳහන් කරන්න‍‍‍" -01000310="Context මෙනු අංග:" - -; Language Page -01000400="භාෂාව" -01000401="භාෂාව:" - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip විධාන" -02000103="හැකිළුම විවෘත කරන්න" -02000104="තෝරා ඇති හැකිළුම විවෘත කරයි." -02000105="ගොනු ලිහන්න..." -02000106="තෝරා ඇති හැකිළුමෙන් ගොනු ලිහයි." -02000107="හැකිළුමකට ඇතුල් කරන්න..." -02000108="තෝරා ඇති වස්තු හැකිළුමකට ඇතුල් කරයි." -02000109="හැකිළුම පරීක්ෂා කරන්න" -0200010A="තෝරා ඇති හැකිළුම පරීක්ෂා කරයි." -0200010B="මෙතැනට ලිහන්න" -0200010C="තෝරා ඇති හැකිළුම ලිහා, එහි ගොනු වත්මන් බහාලුමට එක් කරයි." -0200010D="{0} වෙත ලිහන්න" -0200010E="හැකිළුම ලිහා, එහි ගොනු උප බහාලුමකට එක් කරයි." -0200010F="{0} වෙත එක් කරන්න" -02000110="තෝරාගත් වස්තු දැනටමත් නිර්මිත හැකිළුමකට එක් කරයි." -02000111="හකුළා විදුලි තැපැල් කරන්න..." -02000112="තෝරා ඇති වස්තු හකුළා විදුලි තැපෑල හරහා යවයි." -02000113="{0} වෙත හකුළා විදුලි තැපැල් කරන්න" -02000114="තෝරාගත් වස්තු දැනටමත් නිර්මිත හැකිළුමකට එක් කර විදුලි තැපෑල හරහා යවයි." - -02000140="<බහාලුම>" -02000141="<හැකිළුම>" - -; Properties -02000203="මංපෙත" -02000204="නම" -02000205="දිගුව" -02000206="බහාලුම" -02000207="විශාලත්වය" -02000208="හැකිළුමෙන් පසු විශාලත්වය" -02000209="ලක්ෂණ" -0200020A="නිර්මාණය කළ දිනය" -0200020B="ප්‍රවේශ වූ දිනය" -0200020C="අළුත් කළ දිනය" -0200020D="සවි" -0200020E="ටීකා කොට ඇත" -0200020F="සුරක්ෂිතය" -02000210="Split Before" -02000211="Split After" -02000212="Dictionary" -02000213="CRC" -02000214="වර්ගය" -02000215="Anti" -02000216="ක්‍රමය" -02000217="ධාරක මෙහෙයුම් පද්ධතිය" -02000218="ගොනු පද්ධතිය" -02000219="පරිශිලක" -0200021A="සමූහය" -0200021B="Block" -0200021C="ටීකාව" -0200021D="පිහිටීම" -0200021E="Path Prefix" -0200021F="බහාලුම්" -02000220="ගොනු" -02000221="සංස්කරණය" -02000222="Volume" -02000223="Multivolume" -02000224="Offset" -02000225="සබැඳීන්" -02000226="Blocks" -02000227="Volumes" - -02000229="බිට්-64" -0200022A="Big-endian" -0200022B="මධ්‍යම සැකසුම් පද්ධතිය (CPU)" -0200022C="භෞතික විශාලත්වය" -0200022D="ශීර්ෂ විශාලත්වය" -0200022E="Checksum" -0200022F="මුහුණුවර" -02000230="Virtual Address" - -; Status bar -02000301="වස්තු {0}ක් තෝරා ඇත" -02000302="වස්තු {0}" - -02000320="ගොනු:" -02000321="බහාලුම්:" -02000322="ප්‍රමාණය:" -02000323="හැකිළු පසු ප්‍රමාණය:" -02000324="හැකිළුම්:" - -; List Context Menu -02000401="කොලමයන් (&C)..." - -02000411="විවෘත කරන්න (&O)" -02000412="ලිහන්න (&Ex)..." - -; ToolBar -02000501="ලිහන්න" - -; Messages -02000601="මෙම හැකිළුම සඳහා යාවත්කාල කිරීම් සහයෝගය නොදක්වයි." -02000602="{0} හැකිළුම යාවත්කාල කල නොහැක" -02000603="'{0}' බහාලුම තැනිය නොහැක" -02000604="ගොනුව සහයෝගී හැකිළුමක් නොවේ." -02000605="දෝෂයක්" -02000606="අංග ඉතා අධිකය" -02000607="දෙන ලද ගොනු නාම දිගුව හා ආශ්‍රිත යෙදවුමක් නැත" -02000608="දෝෂ නොමැත" -02000609="'{0}' ගොනුව හැකිළුමක් ලෙස විවෘත කළ නොහැක" -0200060A="සුරක්ෂිත '{0}' හැකිළුම විවෘත කළ නොහැක. මුරපදය වැරදි ද ?" -0200060B="අවශ්‍ය මතක ප්‍රමාණය පද්ධතියට වෙන් කර ගත නොහැක" -0200060C="හඳුනා නොගත් දෝෂයක්" -0200060D="සහයෝගී නොවන හැකිළුම් ක්‍රමයක්" - -; Dialogs -02000702="හරි" -02000705="ඔවු (&Y)" -02000707="සියල්ලටම ඔවු (&A)" -02000709="නැහැ (&N)" -0200070B="සියල්ලටම නැහැ(&L)" - -02000710="එපා" -02000711="එපා (&C)" -02000713="වසන්න (&C)" -02000714="නවතන්න" -02000715="ප්‍රත්‍යාරම්භ කරන්න" - -02000720="උදව්" - -; Extract dialog -02000800="ලිහන්න" -02000801="ලිහීමට තැනක් (&X) :" -02000802="මුරපදය" - -02000810="මංපෙත් ස්වභාවය" -02000811="සම්පූර්ණ මංපෙත් නම්" -02000812="වර්තමාන මංපෙත් නම්" -02000813="මංපෙත් නම් අවශ්‍ය නැත" - -02000820="උඩින් ලිවීමේ ස්වභාවය" -02000821="උඩින් ලියන්නට පෙර විමසන්න" -02000822="විමසීමෙන් තොරව උඩින් ලියන්න" -02000823="දැනටමත් ඇති ගොනු මගහරින්න" -02000824="ගොනු ස්වයංක්‍රියව ප්‍රතිනම් කරන්න" -02000825="දැනටමත් ඇති ගොනු‍ ප්‍රතිනම් කරන්න" - -02000830="ගොනු" -02000831="තෝරාගත් ගොනු (&S)" -02000832="සියළු ගොනු (&A)" - -02000881="ලිහන ලද ගොනු සඳහා ස්ථානයක් තෝරන්න." - -02000890="ලිහමින් පවතී‍" - -; Overwrite dialog -02000900="ගොනු ප්‍රතිස්ථාපනය තහවුරු කර ගැනීම" -02000901="ගමනාන්ත බහාලුමේ දැනටමත් නිර්මිත ගොනුවක් ඇත." -02000902="දැනටම පවතින පහත ගොනුව," -02000903="මෙය සමග ප්‍රතිස්ථාපනය කරන්න ද ?" - -02000911="ස්වයංක්‍රියව ප්‍රතිනම් කරන්න (&U)" - -02000982="{0} බයිට (Bytes)" -02000983="නව්‍ය කළේ" - -; Messages dialog -02000A00="විනිශ්චීය පණිවුඩ" - -02000A80="පණිවිඩය" - -02000A91="'{0}' සඳහා සහයෝගය නොදක්වන හැකිළුම් ක්‍රමයක්." -02000A92="'{0}' හි දත්ත දෝෂයකි. ගොනුව බිඳී ඇත." -02000A93="'{0}' හි CRC අසමත් විනි. ගොනුව බිඳී ඇත." -02000A94="සුරක්ෂිත '{0}' ගොනුවේ දත්ත දෝෂයකි. වැරදි මුරපදයක් ද ?" -02000A95="සුරක්ෂිත '{0}' ගොනුවේ CRC අසමත් විනි. වැරදි මුරපදයක් ද ?" - -; Password dialog -02000B00="මුරපදය ඇතුල් කරන්න" -02000B01="මුරපදය ඇතුල් කරන්න:" -02000B02="මුරපදය පෙන්වන්න (&S)" -02000B03="මුරපදය නැවත ඇතුල් කරන්න:" -02000B10="මුරපද නොගැලපේ" -02000B11="මුරපද සඳහා ඉංග්‍රිසි අකුරු, ඉලක්කම් සහ විශේෂිත සංකේත පමණක් භාවිතා කරන්න (!, #, $, ...)" -02000B12="මුරපදය දිග වැඩිය" - -; Progress dialog -02000C00="ක්‍රියාවලිය" -02000C01="ගතවූ කාලය:" -02000C02="ඉතිරි කාලය:" -02000C03="සම්පූර්ණ විශාලත්වය:" -02000C04="වේගය:" -02000C05="ක්‍රියාවලියට භාජනය වූ ප්‍රමාණය:" -02000C06="හැකිළුම් අනුපාතය:" - -02000C10="පසුබිමින් (&B)" -02000C11="පෙරබිමින් (&F)" -02000C12="මදකට නවතන්න (&P)" -02000C13="නැවත අරඹන්න (&C)" - -02000C20="මදකට නවතා ඇත" - -02000C30="ඉවත්වීමට අවශ්‍ය බව විශ්වාස ද ?" - -; Compress dialog -02000D00="හැකිළුමකට එක් කරන්න" -02000D01="හැකිළුම (&A):" -02000D02="යාවත්කාල කිරීමේ ස්වභාවය (&U):" -02000D03="හැකිළුම් රටාව (&F):" -02000D04="හැකිළුම් ක්‍රමය (&M):" -02000D05="සවි හැකිළුමක් තනන්න (&S)" -02000D06="පරාමිති (&P):" -02000D07="විකල්ප" -02000D08="SF&X හැකිළුමක් තනන්න" -02000D09="Multi-threading" -02000D0A="ගොනු නාම සුරකින්න (&S)" -02000D0B="හැකිළුම් මට්ටම (&L):" -02000D0C="&Dictionary size:" -02000D0D="&Word size:" -02000D0E="හැකිලීම සඳහා මතක භාවිතය:" -02000D0F="ලිහීම ක්‍රියාව සඳහා මතක භාවිතය:" -02000D10="සුරැකුම්" -02000D11="සුරැකුම් ක්‍රමය:" -02000D12="Number of CPU threads:" -02000D13="Solid block size:" -02000D14="සවි-නොමැති" -02000D15="සවි" -02000D16="හවුල්කාර ගොනු ද හකුළන්න" - -02000D40="කොටස් වලට බෙදන්න, බයිට (bytes):" -02000D41="වැරදි කොටස් විශාලත්වයකි" -02000D42="සඳහන් කරන ලද කොටස් විශාලත්වය බයිට {0} කි.\nහැකිළුම මෙවන් කොටස් වලට බෙදියයුතු බව විශ්වාස ද ?" - -02000D81="තැන්පත් කරන්න" -02000D82="සාමාන්‍ය" -02000D83="උපරිම" -02000D84="වේගවත්" -02000D85="ඉතා වේගවත්" -02000D86="අධි හැකිළුම්‍" - -02000D90="සොයන්න" - -02000DA1="ගොනු එක් කර ප්‍රතිස්ථාපනය කරන්න" -02000DA2="ගොනු යාවත්කාල කර එක් කරන්න" -02000DA3="දැනටමත් ඇති ගොනු නැවුම් කරන්න" -02000DA4="ගොනු සමකාලී කරන්න" - -02000DB1="සියළු ගොනු" - -02000DC0="හකුළමින් පවතී" - -; Columns dialog -02000E00="කොලම" -02000E01="මෙම බහාලුමේ දිස්වනවාට ඔබ කැමති කොලමයන් තෝරන්න. කොලමයන් පිලිවෙල කිරීම සඳහා ඉහළට සහ පහළට යන බොත්තම් භාවිත කරන්න." -02000E02="තෝරාගත් කොලමයන්," -02000E03="පික්සල් පළල (&W)." - -02000E10="ඉහළට (&U)" -02000E11="පහළට (&D)" -02000E12="පෙන්වන්න (&S)" -02000E13="සඟවන්න (&H)" -02000E14="පිහිටුවන්න" - -02000E81="නාමය" -02000E82="පළල" - -; Testing -02000F90="පරීක්ෂා කිරීම" - -; File Manager - -03000000="7-Zip ගොනු කළමනාකරු" - -; Menu -03000102="ගොනුව (&F)" -03000103="සැකසුම් (&E)" -03000104="දසුන (&V)" -03000105="මෙවලම් (&T)" -03000106="උදව් (&H)" -03000107="කැමතිම (&A)" - -; File -03000210="විවෘත කරන්න (&O)" -03000211="මෙහිම විවෘත කරන්න (&I)" -03000212="පිටතින් විවෘත කරන්න (&U)" -03000220="දසුන (&V)" -03000221="සංස්කරණය කරන්න (&E)" -03000230="නැවත නම් කරන්න (&M)" -03000231="වෙනත් තැනකට පිටපත් කරන්න (&C)..." -03000232="වෙනත් තැනකට ගෙනය‍න්න (&M)..." -03000233="මකන්න (&D)" -03000240="වත්කම් (&R)" -03000241="ටීකා (&N)" -03000242="checksum ගණනය කරන්න" -03000250="බහාලුමක් තනන්න" -03000251="ගොනුවක් තනන්න" -03000260="ඉවත් වන්න (&X)" -03000270="ගොනුව බෙදන්න (&S)..." -03000271="ගොනු එකතු කරන්න (&B)..." - -; Edit -03000310="අහෝසි කරන්න (&U)" -03000311="යළි කරන්න (&R)" -03000320="කපන්න (&T)" -03000321="පිටපත් කරන්න (&C)" -03000322="අලවන්න (&P)" -03000323="මකන්න (&D)" -03000330="සියල්ල තෝරන්න (&A)" -03000331="තෝරන ලද සියල්ල ඉන් ඉවත් කරන්න" -03000332="අනෙක් පැත්තට තෝරන්න (&I)" -03000333="තෝරන්න..." -03000334="තේරීම ඉවත් කරන්න..." -03000335="වර්ගයෙන් තෝරන්න" -03000336="වර්ගයෙන් තේරීම ඉවත් කරන්න" - -; View -03000410="විශාල මූර්ති (&G)" -03000411="කුඩා මූර්ති (&M)" -03000412="ලයිස්තුව (&L)" -03000413="සවිස්තර (&D)" -03000420="අසුරන නොලද" -03000430="ප්‍රධාන බහාලුම විවෘත කරන්න" -03000431="ඉහළට එක් ස්ථරයක්" -03000432="බහාලුම් අතීතය..." -03000440="ප්‍රතිපූරණය කරන්න(&R)" -03000449="පැතලි දසුන" -03000450="පැනල &2" -03000451="මෙවලම් තීරු (&T)" -03000460="හැකිළුම් මෙවලම් තීරුව" -03000461="සම්මත මෙවලම් තීරුව" -03000462="විශාල බොත්තම්" -03000463="බොත්තම් පෙළ දක්වන්න" - -; Tools -03000510="විකල්ප (&O)..." -03000511="&Benchmark" - -; Help -03000610="අන්තර්ගතය (&C)..." -03000620="7-Zip පිළිබඳව (&A)..." - -; Favorites -03000710="බහාලුම කැමතිම අංග වලට එකතු කරන අයුර (&A)" -03000720="පොත් සලකුණ - අංක" - -; Options Dialog - -03010000 = "විකල්ප" - -; Plugins -03010100 = "ප්ලගින" -03010101 = "ප්ලගින (&P):" -03010110 = "විකල්ප..." - -; Edit -03010200 = "සංස්කාරකය" -03010201 = "සංස්කාරකය (&E):" - -; System -03010300 = "පද්ධතිය" -03010302 = "7-Zip සමග හවුල් කරන්න:" -03010310 = "ප්ලගින" - -; Settings -03010400 = "සෙටිංග්ස්" -03010401 = "\"..\" අංගය පෙන්වන්න" -03010402 = "ගොනු වල සත්‍ය මූර්තිය පෙන්වන්න" -03010410 = "පද්ධති මෙනුව පෙන්වන්න" -03010420 = "සම්පූර්ණ තීරු තේරීම (&F)" -03010421 = "වගු රේභා පෙන්වන්න (&G)" -03010430 = "වෛකල්පිත තේරීම් ස්වභාවය (&A)" -03010440 = "විශාල මතක පිටු භාවිතා කරන්න (&L)" - -; Strings - -03020201 = "පිටපත් කරන්න" -03020202 = "ගෙනයන්න" -03020203 = "වෙනත් තැනකට පිටපත් කරන්න:" -03020204 = "වෙනත් තැනකට ගෙනයන්න:" -03020205 = "පිටපත් කරමින් පවතී..." -03020206 = "ගෙනයමින් පවතී..." -03020207 = "මෙවන් බහාලුම් වලට ගොනු පිටපත් හෝ ගෙනයාම කළ නොහැක." -03020208 = "ක්‍රියාව කල නොහැක." -03020209 = "ගමනාන්ත බහාලුම තෝරන්න." - -03020210 = "ගොනු මැකීම තහවුරු කිරීම" -03020211 = "බහාලුම් මැකීම තහවුරු කිරීම" -03020212 = "බහු ගොනු මැකීම තහවුරු කිරීම" -03020213 = "ඔබට '{0}' මැකීමට අවශ්‍ය බව විශ්වාස ද ?" -03020214 = "ඔබට '{0}' බහාලුම හා එහි අන්තර්ගතය මැකීමට අවශ්‍ය බව විශ්වාස ද ?" -03020215 = "ඔබට {0} යන වස්තු මැකීමට අවශ්‍ය බව විශ්වාස ද ?" -03020216 = "මකමින් පවතී..." -03020217 = "ගොනුව හෝ බහාලුම මැකීමේ දී දෝෂයක් මතු විය" -03020218="දිගු මංපෙතක් ඇති ගොනුවක් කුණු බඳුනට යැවීම පද්ධතියට කල නොහැක." - -03020220 = "ප්‍රතිනම් කරමින් පවතී..." -03020221 = "ගොනුව හෝ බහාලුම මැකීමේදී දෝෂයක් මතු විය" -03020222 = "ගොනු පිටපත් කිරීම තහවුරු කිරීම" -03020223 = "ගො‍නුව හැකිළුම වෙත පිටපත් කළ යුතු බව ඔබට විශ්වාස ද" - -03020230 = "බහාලුමක් තනන්න" -03020231 = "බහාලුම් නාමය:" -03020232 = "නව බහාලුමක්" -03020233 = "බහාලුම තැනීමේදී දෝෂයක් මතුවිය" - -03020240 = "ගොනුවක් තනන්න" -03020241 = "ගොනු නාමය:" -03020242 = "නව ගොනුවක්" -03020243 = "ගොනුව තැනීමේදී දෝෂයක් මතුවිය" - -03020250 = "තෝරන්න" -03020251 = "තේරීම ඉවත් කරන්න" -03020252 = "ගොනුවේ හෝ බහාලුමේ නම හෝ කොටසක්:" - -03020260 = "බහාලුම් අතීතය" - -03020280 = "'{0}' ගොනුව නව්‍ය කෙරිනි.\nහැකිළුමෙහි එය යාවත්කාල කිරීමට ඔබට අවශ්‍ය ද ?" -03020281 = "ගොනුව යාවත්කාල කල නොහැක\n'{0}'" -03020282 = "සංස්කාරකය විවෘත කළ නොහැක." -03020283 = "විවෘත කරමින් පවතී..." -03020284="ගොනුව වෛරසයක් වැනිය (ගොනු නාමයේ දිගු හිස් තැන් ඇත)." - -03020290 = "ටීකාව" -03020291 = "ටීකාව (&C):" - -030202A0 = "පද්ධතිය" - -03020300 = "පරිගණකය" -03020301 = "ජාලය" -03020302="ලියකියවිලි" - -03020400 = "හකුළන්න" -03020401 = "ලිහන්න" -03020402 = "පරීක්ෂා කරන්න" - -03020420 = "පිටපත් කරන්න" -03020421 = "ගෙන යන්න" -03020422 = "මකන්න" -03020423 = "තොරතුරු" - -03020500 = "ගොනුව බෙදන්න" -03020501 = "ගොනුව බෙදා කොටස් මෙහි තැන්පත් කරන්න (&S):" -03020510 = "ගොනුව බෙදමින් පවතී..." -03020520 = "ගොනුව බෙදීම තහවුරු කරන්න" -03020521 = "ගොනුව කොටස් {0} කට බෙදීමට අවශ්‍ය බව ඔබට විශ්වාස ද ?" -03020522 = "බෙදූ කොටසක විශාලත්වය, මුල් ගොනුවේ විශාලත්වයට වඩා අඩු විය යුතුය" - -03020600 = "බෙදූ ගොනු එක් කරන්න" -03020601 = "බෙදූ ගොනු එක් කර මෙහි තැනපත් කරන්න (&C):" -03020610 = "බෙදූ ගොන එක් කරමින් පවතී..." -03020620 = "පළමු ගොනුව පමණක් තෝරන්න" -03020621="ගොනුව, බෙදන ලද ගොනුවක කොටසක් ලෙස හඳුනාගත නොහැක." -03020622="බෙදන ලද ගොනුවේ කොටස් වලින් එකකට වඩා සොයාගත නොහැක." - -03020710 = "Checksum calculating..." -03020720 = "Checksum information" -03020721 = "CRC checksum for data:" -03020722 = "CRC checksum for data and names:" - -03020800 = "සුපිරික්සමින් පවතී..." - -03020900 = "වත්කම්" - -03020A01="දිගු මංපෙතක් ඇති බහාලුමකින් ක්‍රියාකාරීත්වය කැඳවිය නොහැක." -03020A02="එක් ගොනුවක් පමණක් තේරිය යුතුය." -03020A03="ගොනු එකක් හෝ වැඩි ගණනක් තේරිය යුතුය." -03020A04="{0} ගොනුව දැනටමත් ඇත" - -; Computer -03031100 = "සම්පූර්ණ විශාලත්වය" -03031101 = "නිදහස් ඉඩ" -03031102 = "Cluster විශාලත්වය" -03031103 = "නම් පත" - -; Network -03031200 = "Local Name" -03031201 = "සපයන්නා" - -; Benchmark Dialog - -03080000 = "Benchmark" -03080001 = "මතක භාවිතය:" -03080002 = "හැකිළුම්" -03080003 = "ලිහුම්" -03080004 = "වේගය" -03080005 = "ඇගයුම" -03080006 = "සම්පූර්ණ ඇගයුම" -03080007 = "වත්මන්" -03080008 = "ප්‍රතිඵලිත" -03080009 = "Passes:" -0308000A = "දෝෂ:" -0308000B = "CPU භාවිතාව" -0308000C = "ඇගයුම / භාවිතාව‍" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/sk.txt b/External/7-Zip/Lang/sk.txt deleted file mode 100644 index b123d8226..000000000 --- a/External/7-Zip/Lang/sk.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 beta -; Translated by Pavel Devečka -; -; -; -; - -00000000="Slovak" -00000001="Slovenčina" -00000002="27" - -; 7-Zip Configuration - -; Title -01000000="Nastavenia 7-Zip" - -; Info Page -01000100="O programe 7-Zip" -01000103="7-Zip je voľne šíriteľný program. Jeho vývoj môžete podporiť tým, že sa zaregistrujete." -01000104="Podporiť" -01000105="Zaregistrovať" - -; Folders Page -01000200="Adresáre" -01000210="&Pracovný adresár" -01000211="&Systémový adresár pre dočasné súbory" -01000212="&Aktuálny adresár" -01000213="&Manuálne vybraný adresár:" -01000214="Po&užiť len pre vymeniteľné jednotky" - -01000281="Vyberte adresár pre dočasné súbory." - -; System Page -01000300="Systém" -01000301="Integrovať 7-Zip do kontextového menu" -01000302="Kaskádové kontextové menu" -01000310="Položky kontextového menu:" - -; Language Page -01000400="Jazyk" -01000401="Jazyk:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Príkazy 7-Zip" -02000103="Otvoriť archív" -02000104="Otvorí vybraný archív." -02000105="Rozbaliť súbory..." -02000106="Rozbalí súbory z vybraného archívu." -02000107="Pridať do archívu..." -02000108="Pridá vybrané položky do archívu." -02000109="Otestovať archív" -0200010A="Otestuje integritu vybraného archívu." -0200010B="Rozbaliť tu" -0200010C="Rozbalí súbory z vybraného archívu do aktuálneho adresára." -0200010D="Rozbaliť do {0}" -0200010E="Rozbalí súbory do podadresára." -0200010F="Pridať do {0}" -02000110="Pridá vybrané položky do archívu." -02000111="Skomprimovať a poslať emailom..." -02000112="Skomprimuje vybrané položky do archívu a pošle archív emailom." -02000113="Skomprimovať do {0} a poslať emailom" -02000114="Skomprimuje vybrané položky do archívu a pošle archív emailom." - -02000140="" -02000141="" - -; Properties -02000203="Cesta" -02000204="Meno" -02000205="Prípona" -02000206="Adresár" -02000207="Veľkosť" -02000208="Veľkosť po kompresii" -02000209="Atribúty" -0200020A="Vytvorený" -0200020B="Sprístupnený" -0200020C="Zmenený" -0200020D="Jednoliaty" -0200020E="Komentovaný" -0200020F="Zašifrovaný" -02000210="Rozdelený predtým" -02000211="Rozdelený potom" -02000212="Slovník" -02000213="CRC" -02000214="Typ" -02000215="Anti" -02000216="Metóda" -02000217="Hostiteľský OS" -02000218="Súborový systém" -02000219="Užívateľ" -0200021A="Skupina" -0200021B="Blok" -0200021C="Komentár" -0200021D="Pozícia" -0200021E="Predpona cesty" -0200021F="Adresáre" -02000220="Súbory" -02000221="Verzia" -02000222="Zväzok" -02000223="Multizväzok" -02000224="Ofset" -02000225="Väzby" -02000226="Bloky" -02000227="Zväzky" - -02000229="64-bitov" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Fyzická veľkosť" -0200022D="Veľkosť hlavičiek" -0200022E="Kontrolný súčet" -0200022F="Charakteristiky" -02000230="Virtuálna adresa" -02000231="ID" -02000232="Skrátený názov" -02000233="Aplikácia" -02000234="Veľkosť sektoru" -02000235="Režim" -02000236="Odkaz" - -; Status bar -02000301="{0} objekt(ov) vybraných" -02000302="{0} objekt(ov)" - -02000320="Súbory:" -02000321="Adresáre:" -02000322="Veľkosť:" -02000323="Veľkosť po kompresii:" -02000324="Archívy:" - -; List Context Menu -02000401="&Stĺpce..." - -02000411="&Otvoriť" -02000412="&Rozbaliť..." - -; ToolBar -02000501="Rozbaliť" - -; Messages -02000601="Aktualizačné operácie nie sú v tomto archíve podporované." -02000602="Nemožno aktualizovať archív {0}" -02000603="Nemožno vytvoriť adresár '{0}'." -02000604="Súbor nie je podporovaný archív." -02000605="Chyba" -02000606="Priveľa položiek" -02000607="Žiadna aplikácia nie je priradená k súborom s touto príponou." -02000608="V archíve sa nenašli žiadne chyby." -02000609="Súbor '{0}' nemožno otvoriť ako archív." -0200060A="Nemožno otvoriť šifrovaný archív '{0}'. Nesprávne heslo?" -0200060B="Systém nemôže alokovať požadované množstvo pamäte." -0200060C="Neznáma chyba" -0200060D="Nepodporovaný typ archívu" - -; Dialogs -02000702="OK" -02000705="&Áno" -02000707="Áno na &všetko" -02000709="&Nie" -0200070B="Nie na vš&etko" - -02000710="Storno" -02000711="&Storno" -02000713="&Zatvoriť" -02000714="Zastaviť" -02000715="Reštartovať" - -02000720="Nápoveda" - -; Extract dialog -02000800="Rozbaliť" -02000801="Rozbaliť do:" -02000802="Heslo" - -02000810="Nastavenie názvov ciest" -02000811="Plné názvy ciest" -02000812="Aktuálne názvy ciest" -02000813="Žiadne názvy ciest" - -02000820="Nastavenie prepísania" -02000821="Spýtať sa pred prepísaním" -02000822="Prepísať bez výzvy" -02000823="Preskočiť existujúce súbory" -02000824="Automaticky premenovať" -02000825="Auto. premenovať existujúce súbory" - -02000830="Súbory" -02000831="&Vybrané súbory" -02000832="Vš&etky súbory" - -02000881="Špecifikujte adresár pre rozbalené súbory." - -02000890="Rozbaľovanie" - -; Overwrite dialog -02000900="Potvrdenie nahradenia súboru" -02000901="Cieľový adresár už obsahuje rozbaľovaný súbor." -02000902="Chcete nahradiť existujúci súbor" -02000903="týmto?" - -02000911="&Automaticky premenovať" - -02000982="{0} bajtov" -02000983="upravených" - -; Messages dialog -02000A00="Diagnostické správy" - -02000A80="Správa" - -02000A91="Nepodporovaná kompresná metóda pre '{0}'." -02000A92="Dátová chyba v '{0}'. Súbor je porušený." -02000A93="CRC zlyhalo v '{0}'. Súbor je porušený." -02000A94="Dátová chyba v šifrovanom súbore '{0}'. Nesprávne heslo?" -02000A95="CRC zlyhalo v šifrovanom súbore '{0}'. Nesprávne heslo?" - -; Password dialog -02000B00="Zadajte heslo" -02000B01="Zadajte heslo:" -02000B02="Ukázať heslo" -02000B03="Zopakujte heslo:" -02000B10="Heslá nie sú zhodné!" -02000B11="Používajte len písmená bez diakritiky, čísla a špeciálne znaky (!, #, $, ...)!" -02000B12="Heslo je príliš dlhé!" - -; Progress dialog -02000C00="Priebeh" -02000C01="Uplynutý čas:" -02000C02="Zostávajúci čas:" -02000C03="Veľkosť:" -02000C04="Rýchlosť:" -02000C05="Spracované:" -02000C06="Úroveň kompresie:" - -02000C10="&Pozadie" -02000C11="P&opredie" -02000C12="Po&zastaviť" -02000C13="Po&kračovať" - -02000C20="Pozastavené" - -02000C30="Ste si istý, že chcete akciu zrušiť?" - -; Compress dialog -02000D00="Pridať do archívu" -02000D01="&Archív:" -02000D02="&Nastavenie aktualizácie súborov v existujúcich archívoch:" -02000D03="&Formát archívu:" -02000D04="&Kompresná metóda:" -02000D05="V&ytvoriť jednoliaty archív" -02000D06="&Parametre:" -02000D07="Možnosti" -02000D08="Vytvoriť samorozbaľovací archív" -02000D09="Multi-threading" -02000D0A="Zašifrovať mená súborov" -02000D0B="Ú&roveň kompresie:" -02000D0C="&Veľkosť slovníka:" -02000D0D="V&eľkosť slova:" -02000D0E="Pamäť potrebná na kompresiu:" -02000D0F="Pamäť potrebná na dekompresiu:" -02000D10="Šifrovanie" -02000D11="Metóda šifrovania:" -02000D12="Poče&t CPU vlákien:" -02000D13="Veľk&osť jednoliateho bloku:" -02000D14="Nejednoliaty" -02000D15="Jednoliaty" -02000D16="Komprimovať zdieľané súbory" - -02000D40="Roz&deliť na časti, bajtov:" -02000D41="Nesprávna veľkosť časti" -02000D42="Vybraná veľkosť časti: {0} bytov.\nSte si istý, že chcete rozdeliť archív na také časti?" - -02000D81="Bez kompresie" -02000D82="Normálna" -02000D83="Maximálna" -02000D84="Rýchla" -02000D85="Najrýchlejšia" -02000D86="Ultra" - -02000D90="Prechádzať" - -02000DA1="Pridať a nahradiť súbory" -02000DA2="Aktualizovať a pridať súbory" -02000DA3="Aktualizovať existujúce súbory" -02000DA4="Synchronizovať súbory" - -02000DB1="Všetky súbory" - -02000DC0="Komprimovanie" - -; Columns dialog -02000E00="Stĺpce" -02000E01="Zaškrtnite stĺpce, ktoré by ste radi zviditeľnili v tomto adresári. Použite tlačítka Posunúť hore a Posunúť dole na usporiadanie stĺpcov." -02000E02="Vybraný stĺpec by mal byť" -02000E03="pixelov &široký." - -02000E10="Posunúť &hore" -02000E11="Posunúť &dole" -02000E12="&Ukázať" -02000E13="&Skryť" -02000E14="Nastaviť" - -02000E81="Titulok" -02000E82="Šírka" - -; Testing -02000F90="Výsledok testovania" - - -; File Manager - -03000000="7-Zip File Manager" - -; Menu -03000102="&Súbor" -03000103="&Upraviť" -03000104="&Zobraziť" -03000105="&Nástroje" -03000106="Ná&poveda" -03000107="&Obľúbené" - -; File -03000210="&Otvoriť" -03000211="O&tvoriť vnútri" -03000212="Ot&voriť externe" -03000220="&Zobraziť" -03000221="&Upraviť" -03000230="&Premenovať" -03000231="&Kopírovať do..." -03000232="P&resunúť do..." -03000233="O&dstrániť" -03000240="V&lastnosti" -03000241="Ko&mentár" -03000242="Vypočítať kontrolný súčet" -03000243="Rozdiel (Diff)" -03000250="Vytvoriť adresár" -03000251="Vytvoriť súbor" -03000260="Uko&nčiť" -03000270="Ro&zdeliť súbor..." -03000271="Zlúč&iť súbory..." - -; Edit -03000310="&Späť" -03000311="&Znovu" -03000320="&Vystrihnúť" -03000321="&Kopírovať" -03000322="V&ložiť" -03000323="&Vymazať" -03000330="Označiť všetko" -03000331="Odznačiť všetko" -03000332="Invertovať označenie" -03000333="Označiť..." -03000334="Odznačiť..." -03000335="Označiť podľa typu" -03000336="Odznačiť podľa typu" - -; View -03000410="&Veľké ikony" -03000411="&Malé ikony" -03000412="&Zoznam" -03000413="&Podrobnosti" -03000420="Netriediť" -03000430="Otvoriť koreňový adresár" -03000431="O úroveň vyššie" -03000432="História adresárov..." -03000440="&Obnoviť" -03000449="Plochý pohľad" -03000450="&2 Panely" -03000451="P&anely nástrojov" -03000460="Archív" -03000461="Štandard" -03000462="Veľké ikony" -03000463="Textový popis pod ikonami" - -; Tools -03000510="N&astavenia" -03000511="&Skúšobný test" - -; Help -03000610="&Obsah nápovedy" -03000620="O p&rograme 7-Zip" - -; Favorites -03000710="Pridať adresár medzi Obľúbené ako" -03000720="Záložka" - -; Options Dialog - -03010000="Nastavenia" - -; Plugins -03010100="Zásuvné moduly" -03010101="Zásuvné moduly:" -03010110="Konfigurácia" - -; Edit -03010200="Editor" -03010201="Editor:" -03010202="Vyhľadávač rozdielov (Diff):" - -; System -03010300="Systém" -03010302="Asociovať 7-Zip s vybranými typmi súborov:" -03010310="Zásuvný modul" - -; Settings -03010400="Nastavenia" -03010401="Ukázať \"..\" položku" -03010402="Ukázať skutočné ikony súborov" -03010410="Ukázať systémové menu" -03010420="Označiť celý riadok" -03010421="Zobraziť čiary mriežky" -03010422="Otvoriť položku jednoduchým kliknutím" -03010430="Alternatívny mód výberu" -03010440="Použitie veľkých stránok pamäti" - -; Strings - -03020201="Kopírovať" -03020202="Presunúť" -03020203="Kopírovať do:" -03020204="Presunúť do:" -03020205="Kopírovanie..." -03020206="Presúvanie..." -03020207="Nemôžete presunúť alebo kopírovať položky smerom do takých adresárov." -03020208="Operácia nie je podporovaná." -03020209="Vyberte cieľový adresár." - -03020210="Potvrdenie odstránenia súboru" -03020211="Potvrdenie odstránenia adresára" -03020212="Potvrdenie odstránenia viacerých položiek" -03020213="Ste si istý, že chcete odstrániť súbor '{0}'?" -03020214="Ste si istý, že chcete odstrániť adresár '{0}' a celý jeho obsah?" -03020215="Ste si istý, že chcete odstrániť týchto {0} položiek?" -03020216="Odstraňovanie..." -03020217="Chyba pri odstraňovaní súboru alebo adresáru" -03020218="Systém nemôže do koša presunúť súbor s dlhou cestou" - -03020220="Premenovanie..." -03020221="Chyba pri premenovaní súboru alebo adresáru" -03020222="Potvrdiť kopírovanie súboru/súborov" -03020223="Ste si istý, že chcete kopírovať súbor/súbory do archívu?" - -03020230="Vytvoriť adresár" -03020231="Meno adresáru:" -03020232="Nový adresár" -03020233="Chyba pri vytváraní adresáru" - -03020240="Vytvoriť súbor" -03020241="Meno súboru:" -03020242="Nový súbor" -03020243="Chyba pri vytváraní súboru" - -03020250="Označiť" -03020251="Odznačiť" -03020252="Maska:" - -03020260="História adresárov" - -03020280="Súbor '{0}' bol zmenený.\nChcete ho aktualizovať v archíve?" -03020281="Nemožno aktualizovať súbor\n'{0}'" -03020282="Nemožno spustiť editor." -03020283="Otváranie..." -03020284="Súbor vyzerá ako vírus. (Meno súboru obsahuje veľa medzier.)" - -03020290="Komentár" -03020291="&Komentár:" - -030202A0="Systém" - -03020300="Počítač" -03020301="Sieť" -03020302="Dokumenty" - -03020400="Pridať" -03020401="Rozbaliť" -03020402="Otestovať" - -03020420="Kopírovať" -03020421="Presunúť" -03020422="Odstrániť" -03020423="Vlastnosti" - -03020500="Rozdeliť súbor" -03020501="&Rozdeliť do:" -03020510="Rozdeľovanie..." -03020520="Potvrďte rozdeľovanie." -03020521="Ste si istý, že chcete rozdeliť súbor na {0} častí?" -03020522="Veľkosť časti musí byť menšia, než veľkosť pôvodného súboru." - -03020600="Zlúčiť súbory" -03020601="&Zlúčiť do:" -03020610="Zlučovanie..." -03020620="Vyberte len prvý súbor." -03020621="Nie je možné detekovať súbor ako časť rozdeleného súboru." -03020622="Nie je možné nájsť viac ako jednu časť rozdeleného súboru." - -03020710="Výpočet CRC..." -03020720="Informácie o CRC" -03020721="CRC pre dáta:" -03020722="CRC pre dáta a názvy:" - -03020800="Prehľadávanie..." - -03020900="Vlastnosti" - -03020A01="Operácia nemôže byť volaná z adresára, ktorý má dlhú cestu." -03020A02="Musíte si vybrať jeden súbor." -03020A03="Musíte si vybrať jeden alebo viac súborov." -03020A04="Súbor {0} už existuje." - -; Computer -03031100="Celková veľkosť" -03031101="Voľné miesto" -03031102="Veľkosť klastra" -03031103="Menovka" - -; Network -03031200="Lokálny názov" -03031201="Prevádzkovateľ" - -; Benchmark Dialog - -03080000="Skúšobný test" -03080001="Použitá pamäť:" -03080002="Komprimovanie" -03080003="Rozbaľovanie" -03080004="Rýchlosť" -03080005="Hodnotenie" -03080006="Celkové hodnotenie" -03080007="Aktuálne:" -03080008="Výsledné:" -03080009="Testov bez chýb:" -0308000A="Chyby:" -0308000B="Využitie CPU" -0308000C="Hodn. / Využitie" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/sl.txt b/External/7-Zip/Lang/sl.txt deleted file mode 100644 index 9a2fe2c35..000000000 --- a/External/7-Zip/Lang/sl.txt +++ /dev/null @@ -1,512 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.55 -; First translation by tomazek -; All further translations and edits by miles -; -; -; - -00000000="Slovenian" -00000001="Slovenski" -00000002="36" - -; 7-Zip Configuration - -; Title -01000000="Konfiguracija 7-Zip" - -; Info Page -01000100="O programu 7-Zip" -01000103="7-Zip je brezplačen. Njegov razvoj podprete s tem, da se registrirate." -01000104="Podpora" -01000105="Registracija" - -; Folders Page -01000200="Mape" -01000210="&Delovna mapa" -01000211="&Sistemska začasna mapa" -01000212="&Trenutna mapa" -01000213="&Navedeno:" -01000214="Uporabi le za izmenljive pogone" - -01000281="Navedite mesto za začasne arhivske datoteke." - -; System Page -01000300="Sistem" -01000301="Integracija 7-Zip v kontekstni meni lupine" -01000302="Kaskadni kontekstni meni" -01000310="Izbire kontekstnega menija:" - -; Language Page -01000400="Jezik" -01000401="Jezik:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Ukazi 7-Zip" -02000103="Odpri arhiv" -02000104="Odpre izbrani arhiv." -02000105="Razširi datoteke ..." -02000106="Razširi datoteke iz izbranega arhiva." -02000107="Stisni v arhiv ..." -02000108="Stisne izbrane datoteke ali mape v arhiv." -02000109="Preizkusi arhiv" -0200010A="Preveri integriteto izbranega arhiva." -0200010B="Razširi semkaj" -0200010C="Razširi datoteke izbranega arhiva v trenutno mapo." -0200010D="Razširi v {0}" -0200010E="Razširi datoteke v podmapo." -0200010F="Dodaj v {0}" -02000110="Stisne izbrane datoteke ali mape v arhiv." -02000111="Stisni in pošlji ..." -02000112="Stisne izbrane datoteke v arhiv in ga pošlje po elektronski pošti." -02000113="Stisni v {0} in pošlji po e-pošti" -02000114="Stisne izbrane datoteke v arhiv in ga pošlje po elektronski pošti." - -02000140="" -02000141="" - -; Properties -02000203="Pot" -02000204="Ime" -02000205="Pripona" -02000206="Mapa" -02000207="Velikost" -02000208="Stisnjena velikost" -02000209="Atributi" -0200020A="Izdelano" -0200020B="Uporabljeno" -0200020C="Spremenjeno" -0200020D="Trdno" -0200020E="Komentirano" -0200020F="Šifrirano" -02000210="Razdeli pred" -02000211="Razdeli po" -02000212="Slovar" -02000213="CRC" -02000214="Vrsta" -02000215="Anti" -02000216="Metoda" -02000217="Gostiteljski OS" -02000218="Datotečni sistem" -02000219="Uporabnik" -0200021A="Skupina" -0200021B="Blok" -0200021C="Opomba" -0200021D="Položaj" -0200021E="Predpona poti" -0200021F="Mape" -02000220="Datoteke" -02000221="Različica" -02000222="Nosilec" -02000223="Več nosilcev" -02000224="Zamik" -02000225="Povezave" -02000226="Bloki" -02000227="Nosilcev" - -; Status bar -02000301="Izbran(ih) {0} objekt(ov)" -02000302="{0} objekt(ov)" - -02000320="Datoteke:" -02000321="Mape:" -02000322="Velikost:" -02000323="Stisnjena velikost:" -02000324="Arhivi:" - -; List Context Menu -02000401="&Stolpci ..." - -02000411="&Odpri" -02000412="&Razširi ..." - -; ToolBar -02000501="Razširi" - -; Messages -02000601="Za ta arhiv operacije osveževanja niso podprte." -02000602="Arhiva {0} ni mogoče osvežiti" -02000603="Mape '{0}' ni mogoče ustvariti" -02000604="Datoteka ni podprti arhiv." -02000605="Napaka" -02000606="Preveč izbir" -02000607="S podano vrsto datoteke ni povezana nobena aplikacija" -02000608="Brez napak" -02000609="Datoteke '{0}' ni mogoče odpreti kot arhiv" -0200060A="Šifriranega arhiva '{0}' ni mogoče odpreti. Je morda geslo napačno?" - -; Dialogs -02000702="V redu" -02000705="&Da" -02000707="Da za &vse" -02000709="&Ne" -0200070B="Ne za v&se" - -02000710="Prekliči" -02000711="P&rekliči" -02000713="&Zapri" -02000714="Zaustavi" -02000715="Ponovno zaženi" - -02000720="Pomoč" - -; Extract dialog -02000800="Razširi" -02000801="R&azširi v:" -02000802="Geslo" - -02000810="Poti" -02000811="Polne poti" -02000812="Trenutne poti" -02000813="Brez poti" - -02000820="Prepisovalni način" -02000821="Zahtevaj potrditev" -02000822="Prepiši brez potrditve" -02000823="Preskoči obstoječe datoteke" -02000824="Samodejno preimenuj" -02000825="Samodejno preimenuj obstoječe datoteke" - -02000830="Datoteke" -02000831="Samo &izbrane" -02000832="&Vse datoteke" - -02000881="Določite mesto razširjanja datotek." - -02000890="Razširjanje" - -; Overwrite dialog -02000900="Potrditev zamenjave datoteke" -02000901="Ciljna mapa že vsebuje obdelovano datoteko." -02000902="Želite zamenjati obstoječo datoteko" -02000903="s to datoteko?" - -02000911="Samodejno &preimenuj" - -02000982="{0} bajtov" -02000983="spremenjena" - -; Messages dialog -02000A00="Diagnostična sporočila" - -02000A80="Sporočilo" - -02000A91="Nepodprta metoda stiskanja za '{0}'." -02000A92="Podatkovna napaka v '{0}'. Datoteka je poškodovana." -02000A93="Napaka CRC v '{0}'. Datoteka je poškodovana." -02000A94="Podatkovna napaka v šifrirani datoteki '{0}'. Je geslo pravilno?" -02000A95="Napaka CRC v šifrirani datoteki '{0}'. Je geslo pravilno?" - -; Password dialog -02000B00="Vnos gesla" -02000B01="Vnesite geslo:" -02000B02="&Pokaži geslo" -02000B03="Ponovno vnesite geslo:" -02000B10="Gesli se ne ujemata" -02000B11="Za geslo uporabite le črke, številke in posebne znake angleške abecede (!, #, $, ...)" -02000B12="Geslo je predolgo" - -; Progress dialog -02000C00="Obdelovanje" -02000C01="Pretečeni čas:" -02000C02="Preostali čas:" -02000C03="Velikost:" -02000C04="Hitrost:" -02000C05="Obdelano:" -02000C06="Razmerje stiskanja:" - -02000C10="&Ozadje" -02000C11="O&spredje" -02000C12="&Začasno zaustavi" -02000C13="&Nadaljuj" - -02000C20="Zaustavljen" - -02000C30="Ste prepričani, da želite preklicati?" - -; Compress dialog -02000D00="Dodaj v arhiv" -02000D01="&Arhiv:" -02000D02="&Način osveževanja:" -02000D03="&Vrsta arhiva:" -02000D04="&Metoda stiskanja:" -02000D05="Izdelaj &trdni arhiv" -02000D06="&Parametri:" -02000D07="Možnosti" -02000D08="Izdelaj arhiv SF&X" -02000D09="Večnitnost" -02000D0A="Šifriraj &imena datotek" -02000D0B="Raven &stiskanja:" -02000D0C="&Velikost slovarja:" -02000D0D="Velikost &besede:" -02000D0E="Poraba pomnilnika za stiskanje:" -02000D0F="Poraba pomnilnika za razširjanje:" -02000D10="Šifriranje" -02000D11="Metoda šifriranja:" -02000D12="Število niti CPE:" -02000D13="Velikost trdnega bloka:" -02000D14="Ne-trdno" -02000D15="Trdno" -02000D16="Stisni skupne datoteke" - -02000D40="Razdeli na &nosilce velikosti (v bajtih):" -02000D41="Neveljavna velikost nosilca" -02000D42="Navedena velikost nosilca: {0} bajtov.\nSte prepričani, da želite razdeliti arhiv na takšne nosilce?" - -02000D81="Brez stiskanja" -02000D82="Običajno" -02000D83="Največje stiskanje" -02000D84="Hitro" -02000D85="Najhitrejše" -02000D86="Ultra" - -02000D90="Prebrskaj" - -02000DA1="Dodaj in zamenjaj datoteke" -02000DA2="Osveži in dodaj datoteke" -02000DA3="Osveži obstoječe datoteke" -02000DA4="Sinhroniziraj datoteke" - -02000DB1="Vse datoteke" - -02000DC0="Stiskanje" - -; Columns dialog -02000E00="Stolpci" -02000E01="Preverite stolpce, ki bi jih radi naredili vidne v tej mapi. Za preureditev njihovega vrstnega reda uporabite gumba Premakni gor in Premakni dol." -02000E02="Izbrani stolpec naj bo širok" -02000E03="&slikovnih točk." - -02000E10="Premakni &gor" -02000E11="Premakni &dol" -02000E12="&Prikaži" -02000E13="&Skrij" -02000E14="Nastavi" - -02000E81="Naslov" -02000E82="Širina" - -; Testing -02000F90="Preizkušanje" - - -; File Manager - -03000000="Upravitelj datotek 7-Zip" - -; Menu -03000102="&Datoteka" -03000103="&Urejanje" -03000104="&Pogled" -03000105="O&rodja" -03000106="Po&moč" -03000107="Pr&iljubljene" - -; File -03000210="&Odpri" -03000211="Odpri &znotraj" -03000212="Odpri zu&naj" -03000220="P&rikaz" -03000221="&Urejanje" -03000230="Prei&menuj" -03000231="&Kopiraj ..." -03000232="&Premakni ..." -03000233="Iz&briši" -03000240="L&astnosti" -03000241="Opomb&e" -03000242="Izračunaj preskusno vsoto" -03000250="Ustvari mapo" -03000251="Ustvari datoteko" -03000260="&Izhod" -03000270="&Razdeli datoteko ..." -03000271="&Združi datoteke ..." - -; Edit -03000310="Ra&zveljavi" -03000311="P&onovi" -03000320="&Izreži" -03000321="&Kopiraj" -03000322="Prile&pi" -03000323="Iz&briši" -03000330="Izberi &vse" -03000331="Razveljavi izbiro vseh" -03000332="&Preobrni izbor" -03000333="Izberi ..." -03000334="Razveljavi izbiro ..." -03000335="Izberi glede na vrsto" -03000336="Razveljavi izbiro glede na vrsto" - -; View -03000410="&Velike ikone" -03000411="&Majhne ikone" -03000412="&Seznam" -03000413="&Podrobnosti" -03000420="Nerazvrščeno" -03000430="Odpri korensko mapo" -03000431="Nadrejena raven" -03000432="Zgodovina mape ..." -03000440="&Osveži" -03000449="Splošen pogled" -03000450="&Dve podokni" -03000451="&Orodne vrstice" -03000460="Orodna vrstica arhiva" -03000461="Navadna orodna vrstica" -03000462="Veliki gumbi" -03000463="Pokaži besedilo gumbov" - -; Tools -03000510="&Možnosti ..." -03000511="Me&ritev" - -; Help -03000610="&Vsebina pomoči ..." -03000620="&O programu 7-Zip ..." - -; Favorites -03000710="&Dodaj mapo med Priljubljene kot" -03000720="Zaznamek" - -; Options Dialog - -03010000="Možnosti" - -; Plugins -03010100="Dodatki" -03010101="&Dodatki:" -03010110="Možnosti ..." - -; Edit -03010200="Urejevalnik" -03010201="&Urejevalnik:" - -; System -03010300="Sistem" -03010302="Poveži 7-Zip z:" -03010310="Dodatek" - -; Settings -03010400="Nastavitve" -03010401="Pokaži postavko \"..\"" -03010402="Pokaži prave ikone datotek" -03010410="Pokaži sistemski meni" -03010420="&Izbor celotne vrstice" -03010421="Pokaži &mrežne črte" -03010430="&Alternativni način izbiranja" -03010440="Uporabi &velike spominske strani" - -; Strings - -03020201="Kopiraj" -03020202="Premakni" -03020203="Kopiraj v:" -03020204="Premakni v:" -03020205="Kopiranje ..." -03020206="Premikanje ..." -03020207="Ne morete premakniti ali prekopirati elementov take mape." -03020208="Operacija ni podprta." -03020209="Izberite ciljno mapo." - -03020210="Potrditev brisanja datoteke" -03020211="Potrditev brisanja mape" -03020212="Potrditev brisanja več datotek" -03020213="Ste prepričani, da želite zbrisati '{0}'?" -03020214="Ste prepričani, da želite zbrisati mapo '{0}' in celotno njeno vsebino?" -03020215="Ste prepričani, da želite zbrisati teh {0} postavk?" -03020216="Brisanje ..." -03020217="Napaka pri brisanju datoteke ali mape" - -03020220="Preimenovanje ..." -03020221="Napaka pri preimenovanju datoteke ali mape" -03020222="Potrditev kopiranja datoteke" -03020223="Ste prepričani, da želite kopirati datoteke v arhiv?" - -03020230="Izdelava mape" -03020231="Ime mape:" -03020232="Nova mapa" -03020233="Napaka pri ustvarjanju mape" - -03020240="Ustvarjanje datoteke" -03020241="Ime datoteke:" -03020242="Nova datoteka" -03020243="Napaka pri ustvarjanju datoteke" - -03020250="Izberi" -03020251="Razveljavi izbiro" -03020252="Maska:" - -03020260="Zgodovina map" - -03020280="Datoteka '{0}' je bila spremenjena.\nJo želite osvežiti v arhivu?" -03020281="Datoteke ni mogoče osvežiti\n'{0}'" -03020282="Urejevalnika ni mogoče pognati." -03020283="Odpiranje ..." - -03020290="Opomba" -03020291="&Opomba:" - -030202A0="Sistem" - -03020300="Računalnik" -03020301="Omrežje" - -03020400="Dodaj" -03020401="Razširi" -03020402="Preizkusi" - -03020420="Kopiraj" -03020421="Premakni" -03020422="Izbriši" -03020423="Informacije" - -03020500="Razdeli datoteko" -03020501="&Razdeli na:" -03020510="Razdeljevanje ..." -03020520="Potrditev razdelitve" -03020521="Ste prepričani, da želite razdeliti datoteko na {0} nosilcev?" -03020522="Velikost nosilca mora biti manjša kot velikost izvorne datoteke" - -03020600="Združi datoteke" -03020601="&Združi v:" -03020610="Združevanje ..." -03020620="Izberite samo prvo datoteko" - -03020710="Izračun preskusne vsote ..." -03020720="Podatki o preskusni vsoti" -03020721="Preskusna vsota za podatke:" -03020722="Preskusna vsota za podatke in imena:" - -03020800="Pregledovanje ..." - -03020900="Properties" - -; Computer -03031100="Skupna velikost" -03031101="Prostega prostora" -03031102="Velikost gruče" -03031103="Oznaka" - -; Network -03031200="Krajevno ime" -03031201="Ponudnik" - -; Benchmark Dialog - -03080000="Meritev" -03080001="Poraba pomnilnika:" -03080002="Stiskanje" -03080003="Razširjanje" -03080004="Hitrost" -03080005="Ocena" -03080006="Skupna ocena" -03080007="Trenutno" -03080008="Končno" -03080009="Prehodi:" -0308000A="Napake:" -0308000B="Uporaba CPE" -0308000C="Ocena / uporaba" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/sq.txt b/External/7-Zip/Lang/sq.txt deleted file mode 100644 index cf4f9c689..000000000 --- a/External/7-Zip/Lang/sq.txt +++ /dev/null @@ -1,473 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.37 -; Translated by Mikel Hasko -; -; -; -; - -00000000="Albanian" -00000001="Shqip" -00000002="28" - -; 7-Zip Configuration - -; Title -01000000="Konfigurimi i 7-Zip" - -; Info Page -01000100="Për 7-Zip" -01000103="7-Zip është softuer falas. Megjithatë, ju mund të përkrahni në zhvillimin e 7-Zip duke e regjistruar atë." -01000104="Përkrahja" -01000105="Regjistrimi" - -; Folders Page -01000200="Dosje" -01000210="&Dosja e punës" -01000211="Dosja e përkohshme e &sistemit" -01000212="Dosja &aktuale" -01000213="I sp&ecifikuar:" -01000214="Përdor vetëm për njësi të largueshme" - -01000281="Specifikoni një vendndodhje për skedarët e përkohshëm të arkivit." - -; System Page -01000300="Sistemi" -01000301="Integro 7-Zip në kontekst meny" -01000302="Kaskado kontekst menynë" -01000310="Elementë të kontekst menysë:" - -; Language Page -01000400="Gjuha" -01000401="Gjuha:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Komanda të 7-Zip" -02000103="Hap arkivin" -02000104="Hap arkivin e selektuar." -02000105="Zbërthe skedarët..." -02000106="Zbërthen skedarët na arkivi i selektuar." -02000107="Shto në arkiv..." -02000108="Shton artikujt e zgjedhur në arkiv." -02000109="Testo arkivin" -0200010A="Teston integritetin e arkivit të selektuar." -0200010B="Zbërthe këtu" -0200010C="Zbërthen skedarët nga arkivi i zgjedhur në dosjen aktuale." -0200010D="Zbërthe në {0}" -0200010E="Zbërthen skedarët tek nëndosja." -0200010F="Shto tek {0}" -02000110="Shton artikujt e zgjedhur në arkiv." -02000111="Kompreso dhe dërgo me e-mail..." -02000112="Kompreson artikujt e zgjedhur në arkiv dhe e dërgon këtë të fundit me e-mail." -02000113="Kompreso në {0} dhe dërgo me e-mail" -02000114="Kompreson artikujt e zgjedhur në arkiv dhe e dërgon këtë të fundit me e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Shtegu" -02000204="Emri" -02000205="Prapashtesa" -02000206="Dosja" -02000207="Madhësia" -02000208="Madhësia e mbërthimit" -02000209="Atributet" -0200020A="Krijuar më" -0200020B="Hyrë së fundi më" -0200020C="Modifikuar më" -0200020D="I qëndrueshëm" -0200020E="I komentuar" -0200020F="I shifruar" -02000210="Ndaj para" -02000211="Ndaj pas" -02000212="Fjalori" -02000213="CRC" -02000214="Tipi" -02000215="Anti" -02000216="Metoda" -02000217="Pronari i sistemit" -02000218="Sistemi i skedarit" -02000219="Përdoruesi" -0200021A="Grupi" -0200021B="Blloku" -0200021C="Komenti" -0200021D="Pozicioni" -0200021E="Prefiksi i shtegut" - -; Status bar -02000301="Selektuar {0} objekt(e)" -02000302="{0} objekt(e)" - -02000320="Skedarë:" -02000321="Dosje:" -02000322="Madhësia:" - -; List Context Menu -02000401="&Kolona..." - -02000411="&Hap" -02000412="&Zbërthe..." - -; ToolBar -02000501="Zbërthe" - -; Messages -02000601="Operacionet e azhurnimit për këtë arkiv s'përkrahen." -02000602="S'mund të azhurnojë arkivin {0}" -02000603="S'mund të krijojë dosjen '{0}'" -02000604="Skedari është një arkiv i papërkrahur." -02000605="Gabim" -02000606="Tepër shumë artikuj" -02000607="S'ka aplikim të lidhur me prapashtesën e dhënë të emrit të skedarit" -02000608="S'ka gabime" - -; Dialogs -02000702="Në rregull" -02000705="&Po" -02000707="Po për të gjith&a" -02000709="&Jo" -0200070B="Jo për të gjit&ha" - -02000710="Anulim" -02000711="&Anulim" -02000713="&Mbyll" -02000714="Ndalo" -02000715="Rinis" - -02000720="Ndihmë" - -; Extract dialog -02000800="Zbërthe" -02000801="Z&bërthe në:" -02000802="Fjalëkalimi" - -02000810="Mënyra e Shtegut" -02000811="Emra të plotë Shtigjesh" -02000812="Emrat aktualë të Shtigjeve" -02000813="Pa emra shtigjesh" - -02000820="Mënyra e mbishkrimit" -02000821="Pyet para se të mbishkruaj" -02000822="Mbishkruaj pa nxitje" -02000823="Mbikalo skedarët ekzistues" -02000824="Riemërto automatikisht" -02000825="Riemërto auto. skedarët ekzistues" - -02000830="Skedarët" -02000831="Skedarët e &selektuar" -02000832="&Të gjithë skedarët" - -02000881="Specifikoni një vendndodhje për skedarët e zbërthyer." - -02000890="Duke zbërthyer" - -; Overwrite dialog -02000900="Konfirmo zëvendësimin e skedarëve" -02000901="Dosja e destinacionit e përmban një herë skedarin e përpunuar." -02000902="Dëshironi ta zëvendësoni skedarin ekzistues" -02000903="me këtë?" - -02000911="R&iemërtim automatik" - -02000982="{0} bajt" -02000983="modifikuar më" - -; Messages dialog -02000A00="Mesazhe diagnostikues" - -02000A80="Mesazhi" - -02000A91="Metodë e papërkrahshme kompresimi për '{0}'." -02000A92="Gabim të dhënash në '{0}'. Skedari është i prishur." -02000A93="CRC dështoi '{0}'. Skedari është i prishur." - -; Password dialog -02000B00="Fusni fjalëkalimin" -02000B01="Fusni fjalëkalimin:" -02000B02="&Trego fjalëkalimin" - -; Progress dialog -02000C00="Procesi" -02000C01="Koha e kaluar:" -02000C02="Koha e mbetur:" -02000C03="Madhësia:" -02000C04="Shpejtësia:" - -02000C10="Në &sfond" -02000C11="Në pla&n të parë" -02000C12="&Pushim" -02000C13="&Vazhdim" - -02000C20="Në pushim" - -02000C30="Jeni të sigurt se dëshironi ta anuloni?" - -; Compress dialog -02000D00="Shto në arkiv" -02000D01="&Arkivi:" -02000D02="&Mënyra e azhurnimit:" -02000D03="&Formati i arkivit:" -02000D04="Metoda e kompr&esimit:" -02000D05="&Krijo një arkiv të qëndrueshëm" -02000D06="&Parametrat:" -02000D07="Opsionet" -02000D08="Krijo një arkiv SF&X" -02000D09="Multifillesë" -02000D0A="Shifro em&rat e skedarëve" -02000D0B="&Niveli i kompresimit:" -02000D0C="Ma&dhësia e fjalorit:" -02000D0D="Mad&hësia e fjalës:" -02000D0E="Shfrytëzimi i memo. për kompresimin:" -02000D0F="Shfrytëzimi i memo. për dekompresimin:" - -02000D40="Ndaj në &volume (madhësia jepet në bajt):" - -02000D81="Ruaj" -02000D82="Normal" -02000D83="Maksimal" -02000D84="I shpejtë" -02000D85="Më i shpejtë" -02000D86="Ultra" - -02000D90="Shfleto" - -02000DA1="Shto dhe zëvendëso skedarët" -02000DA2="Azhurno dhe shto skedarët" -02000DA3="Azhurno skedarët ekzistues" -02000DA4="Sinkronizo skedarët" - -02000DB1="Të gjithë skedarët" - -02000DC0="Duke kompresuar" - -; Columns dialog -02000E00="Kolonat" -02000E01="Verifikoni kolonat që dëshironi të jenë të dukshme në këtë dosje. Përdorni tastet \"Lëviz lartë\" & \"Lëviz poshtë\" për të rirenditur kolonat." -02000E02="Kolonat e zgjedhura duhet të jenë" -02000E03="piksel &të gjera." - -02000E10="Lëviz &lartë" -02000E11="Lëviz p&oshtë" -02000E12="&Shfaq" -02000E13="&Fshih" -02000E14="Cakto" - -02000E81="Titulli" -02000E82="Gjerësia" - -; Testing -02000F90="Duke testuar" - - -; File Manager - -03000000="Menaxheri i skedarëve 7-Zip" - -; Menu -03000102="&Skedari" -03000103="&Redaktimi" -03000104="&Pamja" -03000105="&Veglat" -03000106="&Ndihma" -03000107="&Të parapëlqyerit" - -; File -03000210="&Hap" -03000211="Hap përbre&nda" -03000212="Hap përjas&hta" -03000220="&Pamja" -03000221="&Redakto" -03000230="Ri&emërto" -03000231="&Kopjo tek..." -03000232="&Zhvendos tek..." -03000233="&Fshi" -03000240="&Vetitë" -03000241="Ko&menti" -03000242="Llogarit shumën e verifikimit" -03000250="Krijo një dosje" -03000251="Krijo një skedar" -03000260="&Dil" -03000270="N&daj skedarin..." -03000271="Kom&bino skedarët..." - -; Edit -03000310="&Zhbëj" -03000311="&Ribëj" -03000320="&Prit" -03000321="&Kopjo" -03000322="&Ngjit" -03000323="&Fshi" -03000330="S&elekto të gjithë" -03000331="Çse&lekto të gjithë" -03000332="Anasill selekti&min" -03000333="Selekto..." -03000334="Çselekto..." -03000335="Selekto sipas tipit" -03000336="Çselekto sipas tipit" - -; View -03000410="Ikona të &mëdha" -03000411="Ikona të &vogla" -03000412="&Listë" -03000413="&Detaje" -03000420="&Të parenditur" -03000430="Hap dosjen rrënjë" -03000431="Një nivel më lartë" -03000432="Historiku i dosjes..." -03000440="&Rifresko" -03000449="Pamje e rrafshtë" -03000450="&2 panele" -03000451="&Shiritat e veglave" -03000460="Shiriti i veglave i arkivit" -03000461="Shiriti standard i veglave" -03000462="Butona të mëdhenj" -03000463="Shfaq tekstin e butonave" - -; Tools -03000510="&Opsionet..." -03000511="&Etapa" - -; Help -03000610="&Përmbajtjet..." -03000620="&Për 7-Zip..." - -; Favorites -03000710="&Shto dosjen tek të parapëlqyerit si" -03000720="Shënuesi" - -; Options Dialog - -03010000="Opsionet" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Opsionet..." - -; Edit -03010200="Redaktuesi" -03010201="&Redaktuesi:" - -; System -03010300="Sistemi" -03010302="Lidh 7-Zip me:" -03010310="Plugin" - -; Settings -03010400="Rregullimet" -03010401="Shfaq &artikullin \"..\"" -03010402="Shfaq &ikonat e vërteta të skedarëve" -03010410="Shfaq &menynë e sistemit" -03010420="Selekto të tërë &rreshtin" -03010421="Shfaq &vijat e rrjetit" -03010430="Mënyrë alternative &selektimi" -03010440="Përdor &faqe të mëdha të memories" - -; Strings - -03020201="Kopjo" -03020202="Zhvendos" -03020203="Kopjo tek:" -03020204="Zhvendos tek:" -03020205="Duke kopjuar..." -03020206="Duke zhvendosur..." -03020207="Ju s'mund të zhvendosni ose kopjoni artikuj për dosje të atilla." -03020208="Operacioni s'përkrahet." - -03020210="Konfirmo fshirjen e skedarit" -03020211="Konfirmo fshirjen e dosjes" -03020212="Konfirmo fshirjen e shumëfishtë të skedarëve" -03020213="Jeni të sigurt që doni të fshini '{0}'?" -03020214="Jeni të sigurt që doni të fshini dosjen '{0}' dhe tërë përmbajtjen e saj?" -03020215="Jeni të sigurt që doni t'i fshini këto {0} artikuj?" -03020216="Duke fshirë..." -03020217="Gabim gjatë fshirjes së skedarit apo dosjes" - -03020220="Duke riemërtuar..." -03020221="Gabim gjatë riemërtimit të skedarit apo dosjes" -03020222="Konfirmim për kopjimin e skedarëve" -03020223="Jeni të sigurt që doni të kopjoni skedarë në arkiv" - -03020230="Krijo një dosje" -03020231="Emri i dosjes:" -03020232="Dosje e re" -03020233="Gabim gjatë krijimit të dosjes" - -03020240="Krijo një skedar" -03020241="Emri i skedarit:" -03020242="Skedar i ri" -03020243="Gabim gjatë krijimit të skedarit" - -03020250="Selekto" -03020251="Çselekto" -03020252="Maska:" - -03020260="Historiku i dosjes" - -03020280="Skedari '{0}' u modifikua.\nDoni ta azhurnoni atë edhe në arkiv?" -03020281="S'mund të azhurnojë skedarin\n'{0}'" -03020282="S'mund të hap redaktuesin." -03020283="Duke hapur..." - -03020290="Komenti" -03020291="&Komenti:" - -030202A0="Sistemi" - -03020300="Kompjuteri" -03020301="Rrejti" - -03020400="Shto" -03020401="Zbërthe" -03020402="Testo" - -03020420="Kopjo" -03020421="Zhvendos" -03020422="Fshi" -03020423="Info" - -03020500="Ndaj skedarin" -03020501="&Ndaj në:" -03020510="Duke ndarë..." - -03020600="Kombino skedarët" -03020601="&Kombino në:" -03020610="Duke kombinuar..." - -03020710="Duke llogaritur shumën e verifikimit..." -03020720="Informacionet e shumës së verifikimit" -03020721="Shuma e verifikimit CRC për të dhënat:" -03020722="Shuma e verifikimit CRC për të dhënat dhe emrat:" - -03020800="Duke skanuar..." - -; Computer -03031100="Madhësia totale" -03031101="Hapësira e lirë" -03031102="Madhësia e cluster-it" -03031103="Etiketa" - -; Network -03031200="Emri lokal" -03031201="Kujdestari" - -; Benchmark Dialog - -03080000="Etapa" -03080001="Shfrytëzimi i memories:" -03080002="Kompresimi" -03080003="Dekompresimi" -03080004="Shpejtësia" -03080005="Vlerësimi" -03080006="Vlerësimi total" -03080007="Aktualisht" -03080008="Rezultati" -03080009="Kalime:" -0308000A="Gabime:" - -;!@LangEnd@! \ No newline at end of file diff --git a/External/7-Zip/Lang/sr-spc.txt b/External/7-Zip/Lang/sr-spc.txt deleted file mode 100644 index ed6b38e6d..000000000 --- a/External/7-Zip/Lang/sr-spc.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Lazar update Ozzii -; -; -; -; - -00000000="Serbian - Cyrillic" -00000001="Српски - ћирилица" -00000002="26-3" - -; 7-Zip Configuration - -; Title -01000000="Подешавање 7-Zip-a" - -; Info Page -01000100="О програму" -01000103="7-Zip је бесплатан програм." -01000104="Подршка" -01000105="Регистрација" - -; Folders Page -01000200="Фасцикле" -01000210="Радна фасцикла" -01000211="Користи Windows-ову привремену фасциклу" -01000212="Тренутна" -01000213="Наведена:" -01000214="Користи само за измењиве медије" - -01000281="Наведите локацију за смештање привремених датотека." - -; System Page -01000300="Систем" -01000301="Убаци 7-Zip у системски мени" -01000302="Каскадни системски мени" -01000310="Ставке системског менија:" - -; Language Page -01000400="Језик" -01000401="Језик:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip команде" -02000103="Отвори архиву" -02000104="Отвори изабрану архиву." -02000105="Издвој датотеке..." -02000106="Издвој датотеке из изабране архиве." -02000107="Додај у архиву..." -02000108="Додај изабране ставке у архиву." -02000109="Тестирај архиву" -0200010A="Тестирај интегритет изабране архиве." -0200010B="Издвој овде" -0200010C="Издвој датотеке из изабране архиве у тренутну фасциклу." -0200010D="Издвој у {0}" -0200010E="Издвој датотеке у подфасциклу." -0200010F="Додај у {0}" -02000110="Додај изабране датотеке у архиву." -02000111="Додај и направи e-mail..." -02000112="Додај обележене датотеке и направи e-mail." -02000113="Додај у {0} и направи e-mail" -02000114="Додај обележене датотеке и направи e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Путања" -02000204="Назив" -02000205="Тип" -02000206="Фасцикла" -02000207="Величина" -02000208="Величина у запакованом стању" -02000209="Атрибути" -0200020A="Креирана" -0200020B="Приступано" -0200020C="Промењено" -0200020D="Солидно" -0200020E="Коментар" -0200020F="Шифровано" -02000210="Подели пре" -02000211="Подели после" -02000212="Речник" -02000213="ЦРЦ" -02000214="Тип" -02000215="Анти" -02000216="Метод" -02000217="Оперативни систем" -02000218="Систем датотека" -02000219="Корисник" -0200021A="Група" -0200021B="Блок" -0200021C="Коментар" -0200021D="Положај" -0200021E="Префикс путање" -0200021F="Фасцикле" -02000220="Датотеке" -02000221="Верзија" -02000222="Волумен" -02000223="ВишеВолумена" -02000224="Офсет" -02000225="Линкови" -02000226="Блокови" -02000227="Волумени" - -02000229="64-бит" -0200022A="Big-endian" -0200022B="Процесор" -0200022C="Физичка величина" -0200022D="Величина заглавља" -0200022E="Провера резултата" -0200022F="Карактеристике" -02000230="Виртуелна адреса" -02000231="ИД" -02000232="Кратко име" -02000233="Креатор апликације" -02000234="Величина сектора" -02000235="Начин" -02000236="Линк" - -; Status bar -02000301="{0} објекат(а) изабрано" -02000302="{0} објекат(а)" - -02000320="Датотеке:" -02000321="Фасцикле" -02000322="Величина:" -02000323="Компримована величина:" -02000324="Архиве:" - -; List Context Menu -02000401="Колона..." - -02000411="Отвори" -02000412="Издвој..." - -; ToolBar -02000501="Издвој" - -; Messages -02000601="Операција освежавања није дозвољена за ову архиву." -02000602="Не могу да освежим архиву {0}" -02000603="Не могу да креирам Фасциклу '{0}'" -02000604="Датотека није једна од подржаних архива." -02000605="Грешка" -02000606="Исувише ставки" -02000607="Ни једна апликација није додељена наведеној екстензији" -02000608="Није било никаквих грешака" -02000609="Не могу да отворим датотеку '(0)' као архива" -0200060A="Не могу да отворим шифровану архиву '(0)'. Погрешна лозинка?" -0200060B="Систем не може да издвоји потребну количину меморије" -0200060C="Непозната грешка" -0200060D="Неподржан тип архиве" - -; Dialogs -02000702="У реду" -02000705="Да" -02000707="Да за све" -02000709="Не" -0200070B="Не за све" - -02000710="Откажи" -02000711="Откажи" -02000713="Затвори" -02000714="Стани" -02000715="Поново" - -02000720="Помоћ" - -; Extract dialog -02000800="Издвој" -02000801="Издвој у:" -02000802="Шифра" - -02000810="Путање" -02000811="Пуна путања" -02000812="Тренутне путање" -02000813="Без путање" - -02000820="Замена" -02000821="Питај пре него што замениш" -02000822="Замени без запиткивања" -02000823="Прескочи постојеће датотеке" -02000824="Аутоматска промена назива" -02000825="Аутоматска промена назива постојећих датотека" - -02000830="Датотеке" -02000831="Изабрани датотеке" -02000832="Све датотеке" - -02000881="Наведи локацију где ће се издвајати датотеке из архива." - -02000890="Издвајање" - -; Overwrite dialog -02000900="Потврди замену датотеке" -02000901="Циљна фасцикла већ садржи датотеку која се тренутно обрађује." -02000902="Да ли желите да замените постојећу датотеку" -02000903="са овом?" - -02000911="Аутоматска промена назива" - -02000982="{0} бајтова" -02000983="модификовано" - -; Messages dialog -02000A00="Дијагностичке поруке" - -02000A80="Поруке" - -02000A91="Неподржани метод компресије за '{0}'." -02000A92="Грешка у '{0}'. Датотека је неисправана." -02000A93="CRC грешка у '{0}'. Датотека је неисправана." -02000A94="Грешке у кодирану датотеку '(0)' Погрешна лозинка." -02000A95="ЦРЦ грешка у шифроване датотеке '(0)' Погрешна лозинка." - -; Password dialog -02000B00="Унесите лозинку" -02000B01="Унесите лозинку:" -02000B02="Прикажи лозинку" -02000B03="Поново унесите лозинку:" -02000B10="Лозинке се не поклапају" -02000B11="Користи само енглеска слова, бројева и специјалних знакова (!, #, $, ...) За лозинке" -02000B12="Лозинка је предугачка" - -; Progress dialog -02000C00="Обрађујем" -02000C01="Протекло време:" -02000C02="Преостало време:" -02000C03="Величина:" -02000C04="Брзина:" -02000C05="Обрађено:" -02000C06="Компресиони однос:" - -02000C10="Позадина" -02000C11="На врху" -02000C12="Пауза" -02000C13="Настави" - -02000C20="Пауза" - -02000C30="Да ли сте сигурни да желите да прекинете?" - -; Compress dialog -02000D00="Додај у архиву" -02000D01="Архива:" -02000D02="Надоградња архива:" -02000D03="Формат архиве:" -02000D04="Тип компресије:" -02000D05="Креирај Solid архиву" -02000D06="Параметри:" -02000D07="Опције" -02000D08="Креирај SFX архиву" -02000D09="Више нити" -02000D0A="Шифруј називе датотека" -02000D0B="Ниво компресије:" -02000D0C="Dictionary size:" -02000D0D="Word size:" -02000D0E="Потребна меморија - компресија:" -02000D0F="Потребна меморија - декомпресија:" -02000D10="Шифровање" -02000D11="Метода шифровања:" -02000D12="Број низа процесора:" -02000D13="Величина чврстог блока:" -02000D14="Не-чврсте" -02000D15="Чврсто" -02000D16="Компресија дељене датотека" - -02000D40="Подели на делове, бајти:" -02000D41="Неисправна величина волумена" -02000D42="Одређена величина волумена: {0} бајтова.\nДа ли сте сигурни да желите да поделите архиву у тих волумена?" - -02000D81="Без компресије" -02000D82="Нормално" -02000D83="Максимално" -02000D84="Брзо" -02000D85="Брже" -02000D86="Најбрже" - -02000D90="Прегледај" - -02000DA1="Додај и замени датотеке" -02000DA2="Освежи и додај датотеке" -02000DA3="Озвежи постојеће датотеке" -02000DA4="Синхронизуј датотеке" - -02000DB1="Све датотеке" - -02000DC0="Додајем" - -; Columns dialog -02000E00="Колоне" -02000E01="Обележите колоне које бисте желели да буду видљиве у овом прегледу. Користите PageUp и PageDown тастере како бисте преуредили колоне по сопственом избору." -02000E02="Изабране колоне би требале бити" -02000E03="тачака широке." - -02000E10="Помери горе" -02000E11="Помери доле" -02000E12="Прикажи" -02000E13="Сакриј" -02000E14="Постави" - -02000E81="Наслов" -02000E82="Ширина" - -; Testing -02000F90="Тестирање" - - -; File Manager - -03000000="7-Zip" - -; Menu -03000102="Датотека" -03000103="Уређивање" -03000104="Преглед" -03000105="Алати" -03000106="Помоћ" -03000107="Омиљено" - -; File -03000210="Погледај" -03000211="Отвори са 7-Zip-ом" -03000212="Отвори са придруженом програмом" -03000220="Прегледај" -03000221="Промени" -03000230="Преименуј" -03000231="Копирај у..." -03000232="Премести у..." -03000233="Обриши" -03000240="Својства" -03000241="Коментар" -03000242="Израчунајте проверну величину" -03000243="разлика" -03000250="Нова фасцикла" -03000251="Нова датотека" -03000260="Излаз" -03000270="Подели фајл..." -03000271="Спој делове..." - -; Edit -03000310="Опозови" -03000311="Понови" -03000320="Исеци" -03000321="Копирај" -03000322="Налепи" -03000323="Избриши" -03000330="Изабери све" -03000331="Поништи избор свега" -03000332="Обрнути избор" -03000333="Изабери..." -03000334="Поништи избор..." -03000335="Изабери по типу" -03000336="Поништи избор по типу" - -; View -03000410="Иконе" -03000411="Напоредно слагање" -03000412="Списак" -03000413="Детаљи" -03000420="Без сортирања" -03000430="Отвори почетну фасциклу" -03000431="Горе за један ниво" -03000432="Хронологија..." -03000440="Освежавање" -03000449="Раван преглед" -03000450="2 Прозора" -03000451="Траке са алаткама" -03000460="Рад са архивама" -03000461="Рад са датотекама" -03000462="Велика дугмад" -03000463="Прикажи текст испод дугмади" - -; Tools -03000510="Опције..." -03000511="Benchmark" - -; Help -03000610="Помоћ..." -03000620="О програму..." - -; Favorites -03000710="Додај" -03000720="Изабери" - -; Options Dialog - -03010000="Опције" - -; Plugins -03010100="Plug-ins" -03010101="Plug-ins:" -03010110="Опције..." - -; Edit -03010200="Промене у датотекама" -03010201="Програм:" -03010202="Разлика:" - -; System -03010300="Систем" -03010302="7-Zip отвара следеће типове датотека:" -03010310="Plug-in" - -; Settings -03010400="Подешавања" -03010401="Прикажи \"..\"" -03010402="Прикажи праве сличице датотека" -03010410="Прикажи системски мени" -03010420="Обележи цео ред" -03010421="Прикажи линије мреже" -03010422="Један клик за отварање ставке" -03010430="Алтернативни начин за бирање" -03010440="Користи велике меморијске блокове" - -; Strings - -03020201="Копирај" -03020202="Исеци" -03020203="Копирај у:" -03020204="Премести у:" -03020205="Копирање у току..." -03020206="Премештање у току..." -03020207="Није могуће преместити или копирати садржај ове Фасцикле." -03020208="Операција није подржана." -03020209="Изаберите одредишну фасциклу." - -03020210="Потврдите брисање датотеке" -03020211="Потврдите брисање фасцикле" -03020212="Потврдите вишеструко брисање датотека" -03020213="Јесте ли сигурни да желите да обришете '{0}'?" -03020214="Јесте ли сигурни да желите да обришете фасциклу '{0}' и сав њен садржај?" -03020215="Јесте ли сигурни да желите да обришете ове {0} податке?" -03020216="Брисање у току..." -03020217="Грешка при брисању датотеке или фасцикле" -03020218="Систем не може да премести датотеку са дугом путу у корпу за отпатке" - -03020220="Преименовање у току..." -03020221="Грешка при преименовању датотеке или фасцикле" -03020222="Потврди копирање датотеке" -03020223="Да ли сте сигурни да желите да копирате датотеке у архиву" - -03020230="Креирај фасциклу" -03020231="Име фасцикле:" -03020232="Нова фасцикла" -03020233="Грешка при креирању фасцикли" - -03020240="Креирај датотеку" -03020241="Име датотеке:" -03020242="Нова датотека" -03020243="Грешка при креирању датотека" - -03020250="Одабери" -03020251="Поништи избор" -03020252="Маска:" - -03020260="Хронологија" - -03020280="Датотека '{0}' је измјењена.\nДа ли желите ажурирати архиву?" -03020281="Није могуће ажурирати датотеку\n'{0}'" -03020282="Није могуће започети уређивање." -03020283="Отварање у току..." -03020284="Датотека изгледа као вирус (име датотеке садржи пуно размака у имену)." - -03020290="Коментар" -03020291="Коментар:" - -030202A0="Систем" - -03020300="Рачунар" -03020301="Мрежа" -03020302="Документи" - -03020400="Додај" -03020401="Издвој" -03020402="Тестирај" - -03020420="Копирај" -03020421="Премести" -03020422="Избриши" -03020423="Својства" - -03020500="Подели датотеку" -03020501="Подели на:" -03020510="Подела..." -03020520="Потврда поделе" -03020521="Да ли сте сигурни да желите да поделите датотеку на (0) дела?" -03020522="Величине дела мора бити мањи од величине оригиналне датотеке" - -03020600="Састави датотеке" -03020601="Састави у:" -03020610="Спајање..." -03020620="Изаберите само први део поделе датотеке" -03020621="Не могу да откријем датотеку као део поделе" -03020622="Не може се наћи више од једног дела поделе" - -03020710="Израчунавање проверне величине..." -03020720="Информација о проверне величине" -03020721="ЦРЦ порвера за податак:" -03020722="ЦРЦ провера за податак и имена:" - -03020800="Скенирање..." - -03020900="Особине" - -03020A01="Операција не може бити позвана из фасцикле која има дугу путању." -03020A02="Морате да изаберете неку датотеку" -03020A03="Морате да изаберете једну или више датотека" -03020A04="Датотека {0} већ постоји" - -; Computer -03031100="Укупни капацитет" -03031101="Слободни простор" -03031102="Величинa cluster-а" -03031103="Назив" - -; Network -03031200="Локално име" -03031201="Провајдер" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Коришћење меморије:" -03080002="Компресија" -03080003="Декомпресија" -03080004="Брзина" -03080005="Оцена" -03080006="Потпуна оцена" -03080007="Тренутно" -03080008="Резултат" -03080009="Пролази:" -0308000A="Грешке:" -0308000B="Употреба процесора" -0308000C="Рејтинг/Употреба" - -;!@LangEnd@! \ No newline at end of file diff --git a/External/7-Zip/Lang/sr-spl.txt b/External/7-Zip/Lang/sr-spl.txt deleted file mode 100644 index 8333dac20..000000000 --- a/External/7-Zip/Lang/sr-spl.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Lazar update Ozzii -; -; -; -; - -00000000="Serbian - Latin" -00000001="Srpski - latinica" -00000002="26-2" - -; 7-Zip Configuration - -; Title -01000000="Podešavanje 7-Zip-a" - -; Info Page -01000100="O programu" -01000103="7-Zip je besplatan program." -01000104="Podrška" -01000105="Registracija" - -; Folders Page -01000200="Fascikle" -01000210="Radna fascikla" -01000211="Koristi Windows-ovu privremenu fasciklu" -01000212="Trenutna" -01000213="Navedena:" -01000214="Koristi samo za izmenjive medije" - -01000281="Navedite lokaciju za smeštanje privremenih datoteka." - -; System Page -01000300="Sistem" -01000301="Ubaci 7-Zip u sistemski meni" -01000302="Kaskadni sistemski meni" -01000310="Stavke sistemskog menija:" - -; Language Page -01000400="Jezik" -01000401="Jezik:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip komande" -02000103="Otvori arhivu" -02000104="Otvori izabranu arhivu." -02000105="Izdvoj datoteke..." -02000106="Izdvoj datoteke iz izabrane arhive." -02000107="Dodaj u arhivu..." -02000108="Dodaj izabrane stavke u arhivu." -02000109="Testiraj arhivu" -0200010A="Testiraj integritet izabrane arhive." -0200010B="Izdvoj ovde" -0200010C="Izdvoj datoteke iz izabrane arhive u trenutnu fasciklu." -0200010D="Izdvoj u {0}" -0200010E="Izdvoj datoteke u podfasciklu." -0200010F="Dodaj u {0}" -02000110="Dodaj izabrane datoteke u arhivu." -02000111="Dodaj i napravi e-mail..." -02000112="Dodaj obeležene datoteke i napravi e-mail." -02000113="Dodaj u {0} i napravi e-mail" -02000114="Dodaj obeležene datoteke i napravi e-mail." - -02000140="" -02000141="" - -; Properties -02000203="Putanja" -02000204="Naziv" -02000205="Tip" -02000206="Fascikla" -02000207="Veličina" -02000208="Veličina u zapakovanom stanju" -02000209="Atributi" -0200020A="Kreirana" -0200020B="Pristupano" -0200020C="Promenjeno" -0200020D="Solidno" -0200020E="Komentar" -0200020F="Šifrovano" -02000210="Podeli pre" -02000211="Podeli posle" -02000212="Rečnik" -02000213="CRC" -02000214="Tip" -02000215="Anti" -02000216="Metod" -02000217="Operativni sistem" -02000218="Sistem datoteka" -02000219="Korisnik" -0200021A="Grupa" -0200021B="Blok" -0200021C="Komentar" -0200021D="Položaj" -0200021E="Prefiks putanje" -0200021F="Fascikle" -02000220="Datoteke" -02000221="Verzija" -02000222="Volumen" -02000223="VišeVolumena" -02000224="Ofset" -02000225="Linkovi" -02000226="Blokovi" -02000227="Volumeni" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="Procesor" -0200022C="Fizička veličina" -0200022D="Veličina zaglavlja" -0200022E="Provera rezultata" -0200022F="Karakteristike" -02000230="Virtuelna adresa" -02000231="ID" -02000232="Kratko ime" -02000233="Kreator aplikacije" -02000234="Veličina sektora" -02000235="Način" -02000236="Link" - -; Status bar -02000301="{0} objekat(a) izabrano" -02000302="{0} objekat(a)" - -02000320="Datoteke:" -02000321="Fascikle" -02000322="Veličina:" -02000323="Komprimovana veličina:" -02000324="Arhive:" - -; List Context Menu -02000401="Kolona..." - -02000411="Otvori" -02000412="Izdvoj..." - -; ToolBar -02000501="Izdvoj" - -; Messages -02000601="Operacija osvežavanja nije dozvoljena za ovu arhivu." -02000602="Ne mogu da osvežim arhivu {0}" -02000603="Ne mogu da kreiram Fasciklu '{0}'" -02000604="Datoteka nije jedna od podržanih arhiva." -02000605="Greška" -02000606="Isuviše stavki" -02000607="Ni jedna aplikacija nije dodeljena navedenoj ekstenziji" -02000608="Nije bilo nikakvih grešaka" -02000609="Ne mogu da otvorim datoteku '(0)' kao arhiva" -0200060A="Ne mogu da otvorim šifrovanu arhivu '(0)'. Pogrešna lozinka?" -0200060B="Sistem ne može da izdvoji potrebnu količinu memorije" -0200060C="Nepoznata greška" -0200060D="Nepodržan tip arhive" - -; Dialogs -02000702="U redu" -02000705="Da" -02000707="Da za sve" -02000709="Ne" -0200070B="Ne za sve" - -02000710="Otkaži" -02000711="Otkaži" -02000713="Zatvori" -02000714="Stani" -02000715="Ponovo" - -02000720="Pomoć" - -; Extract dialog -02000800="Izdvoj" -02000801="Izdvoj u:" -02000802="Šifra" - -02000810="Putanje" -02000811="Puna putanja" -02000812="Trenutne putanje" -02000813="Bez putanje" - -02000820="Zamena" -02000821="Pitaj pre nego što zameniš" -02000822="Zameni bez zapitkivanja" -02000823="Preskoči postojeće datoteke" -02000824="Automatska promena naziva" -02000825="Automatska promena naziva postojećih datoteka" - -02000830="Datoteke" -02000831="Izabrani datoteke" -02000832="Sve datoteke" - -02000881="Navedi lokaciju gde će se izdvajati datoteke iz arhiva." - -02000890="Izdvajanje" - -; Overwrite dialog -02000900="Potvrdi zamenu datoteke" -02000901="Ciljna fascikla već sadrži datoteku koja se trenutno obrađuje." -02000902="Da li želite da zamenite postojeću datoteku" -02000903="sa ovom?" - -02000911="Automatska promena naziva" - -02000982="{0} bajtova" -02000983="modifikovano" - -; Messages dialog -02000A00="Dijagnostičke poruke" - -02000A80="Poruke" - -02000A91="Nepodržani metod kompresije za '{0}'." -02000A92="Greška u '{0}'. Datoteka je neispravana." -02000A93="CRC greška u '{0}'. Datoteka je neispravana." -02000A94="Greške u kodiranu datoteku '(0)' Pogrešna lozinka." -02000A95="CRC greška u šifrovane datoteke '(0)' Pogrešna lozinka." - -; Password dialog -02000B00="Unesite lozinku" -02000B01="Unesite lozinku:" -02000B02="Prikaži lozinku" -02000B03="Ponovo unesite lozinku:" -02000B10="Lozinke se ne poklapaju" -02000B11="Koristi samo engleska slova, brojeva i specijalnih znakova (!, #, $, ...) Za lozinke" -02000B12="Lozinka je predugačka" - -; Progress dialog -02000C00="Obrađujem" -02000C01="Proteklo vreme:" -02000C02="Preostalo vreme:" -02000C03="Veličina:" -02000C04="Brzina:" -02000C05="Obrađeno:" -02000C06="Kompresioni odnos:" - -02000C10="Pozadina" -02000C11="Na vrhu" -02000C12="Pauza" -02000C13="Nastavi" - -02000C20="Pauza" - -02000C30="Da li ste sigurni da želite da prekinete?" - -; Compress dialog -02000D00="Dodaj u arhivu" -02000D01="Arhiva:" -02000D02="Nadogradnja arhiva:" -02000D03="Format arhive:" -02000D04="Tip kompresije:" -02000D05="Kreiraj Solid arhivu" -02000D06="Parametri:" -02000D07="Opcije" -02000D08="Kreiraj SFX arhivu" -02000D09="Više niti" -02000D0A="Šifruj nazive datoteka" -02000D0B="Nivo kompresije:" -02000D0C="Dictionary size:" -02000D0D="Word size:" -02000D0E="Potrebna memorija - kompresija:" -02000D0F="Potrebna memorija - dekompresija:" -02000D10="Šifrovanje" -02000D11="Metoda šifrovanja:" -02000D12="Broj niza procesora:" -02000D13="Veličina čvrstog bloka:" -02000D14="Ne-čvrste" -02000D15="Čvrsto" -02000D16="Kompresija deljene datoteka" - -02000D40="Podeli na delove, bajti:" -02000D41="Neispravna veličina volumena" -02000D42="Određena veličina volumena: {0} bajtova.\nDa li ste sigurni da želite da podelite arhivu u tih volumena?" - -02000D81="Bez kompresije" -02000D82="Normalno" -02000D83="Maksimalno" -02000D84="Brzo" -02000D85="Brže" -02000D86="Najbrže" - -02000D90="Pregledaj" - -02000DA1="Dodaj i zameni datoteke" -02000DA2="Osveži i dodaj datoteke" -02000DA3="Ozveži postojeće datoteke" -02000DA4="Sinhronizuj datoteke" - -02000DB1="Sve datoteke" - -02000DC0="Dodajem" - -; Columns dialog -02000E00="Kolone" -02000E01="Obeležite kolone koje biste želeli da budu vidljive u ovom pregledu. Koristite PageUp i PageDown tastere kako biste preuredili kolone po sopstvenom izboru." -02000E02="Izabrane kolone bi trebale biti" -02000E03="tačaka široke." - -02000E10="Pomeri gore" -02000E11="Pomeri dole" -02000E12="Prikaži" -02000E13="Sakrij" -02000E14="Postavi" - -02000E81="Naslov" -02000E82="Širina" - -; Testing -02000F90="Testiranje" - - -; File Manager - -03000000="7-Zip" - -; Menu -03000102="Datoteka" -03000103="Uređivanje" -03000104="Pregled" -03000105="Alati" -03000106="Pomoć" -03000107="Omiljeno" - -; File -03000210="Pogledaj" -03000211="Otvori sa 7-Zip-om" -03000212="Otvori sa pridruženom programom" -03000220="Pregledaj" -03000221="Promeni" -03000230="Preimenuj" -03000231="Kopiraj u..." -03000232="Premesti u..." -03000233="Obriši" -03000240="Svojstva" -03000241="Komentar" -03000242="Izračunajte provernu veličinu" -03000243="razlika" -03000250="Nova fascikla" -03000251="Nova datoteka" -03000260="Izlaz" -03000270="Podeli fajl..." -03000271="Spoj delove..." - -; Edit -03000310="Opozovi" -03000311="Ponovi" -03000320="Iseci" -03000321="Kopiraj" -03000322="Nalepi" -03000323="Izbriši" -03000330="Izaberi sve" -03000331="Poništi izbor svega" -03000332="Obrnuti izbor" -03000333="Izaberi..." -03000334="Poništi izbor..." -03000335="Izaberi po tipu" -03000336="Poništi izbor po tipu" - -; View -03000410="Ikone" -03000411="Naporedno slaganje" -03000412="Spisak" -03000413="Detalji" -03000420="Bez sortiranja" -03000430="Otvori početnu fasciklu" -03000431="Gore za jedan nivo" -03000432="Hronologija..." -03000440="Osvežavanje" -03000449="Ravan pregled" -03000450="2 Prozora" -03000451="Trake sa alatkama" -03000460="Rad sa arhivama" -03000461="Rad sa datotekama" -03000462="Velika dugmad" -03000463="Prikaži tekst ispod dugmadi" - -; Tools -03000510="Opcije..." -03000511="Benchmark" - -; Help -03000610="Pomoć..." -03000620="O programu..." - -; Favorites -03000710="Dodaj" -03000720="Izaberi" - -; Options Dialog - -03010000="Opcije" - -; Plugins -03010100="Plug-ins" -03010101="Plug-ins:" -03010110="Opcije..." - -; Edit -03010200="Promene u datotekama" -03010201="Program:" -03010202="Razlika:" - -; System -03010300="Sistem" -03010302="7-Zip otvara sledeće tipove datoteka:" -03010310="Plug-in" - -; Settings -03010400="Podešavanja" -03010401="Prikaži \"..\"" -03010402="Prikaži prave sličice datoteka" -03010410="Prikaži sistemski meni" -03010420="Obeleži ceo red" -03010421="Prikaži linije mreže" -03010422="Jedan klik za otvaranje stavke" -03010430="Alternativni način za biranje" -03010440="Koristi velike memorijske blokove" - -; Strings - -03020201="Kopiraj" -03020202="Iseci" -03020203="Kopiraj u:" -03020204="Premesti u:" -03020205="Kopiranje u toku..." -03020206="Premeštanje u toku..." -03020207="Nije moguće premestiti ili kopirati sadržaj ove Fascikle." -03020208="Operacija nije podržana." -03020209="Izaberite odredišnu fasciklu." - -03020210="Potvrdite brisanje datoteke" -03020211="Potvrdite brisanje fascikle" -03020212="Potvrdite višestruko brisanje datoteka" -03020213="Jeste li sigurni da želite da obrišete '{0}'?" -03020214="Jeste li sigurni da želite da obrišete fasciklu '{0}' i sav njen sadržaj?" -03020215="Jeste li sigurni da želite da obrišete ove {0} podatke?" -03020216="Brisanje u toku..." -03020217="Greška pri brisanju datoteke ili fascikle" -03020218="Sistem ne može da premesti datoteku sa dugom putu u korpu za otpatke" - -03020220="Preimenovanje u toku..." -03020221="Greška pri preimenovanju datoteke ili fascikle" -03020222="Potvrdi kopiranje datoteke" -03020223="Da li ste sigurni da želite da kopirate datoteke u arhivu" - -03020230="Kreiraj fasciklu" -03020231="Ime fascikle:" -03020232="Nova fascikla" -03020233="Greška pri kreiranju fascikli" - -03020240="Kreiraj datoteku" -03020241="Ime datoteke:" -03020242="Nova datoteka" -03020243="Greška pri kreiranju datoteka" - -03020250="Odaberi" -03020251="Poništi izbor" -03020252="Maska:" - -03020260="Hronologija" - -03020280="Datoteka '{0}' je izmjenjena.\nDa li želite ažurirati arhivu?" -03020281="Nije moguće ažurirati datoteku\n'{0}'" -03020282="Nije moguće započeti uređivanje." -03020283="Otvaranje u toku..." -03020284="Datoteka izgleda kao virus (ime datoteke sadrži puno razmaka u imenu)." - -03020290="Komentar" -03020291="Komentar:" - -030202A0="Sistem" - -03020300="Računar" -03020301="Mreža" -03020302="Dokumenti" - -03020400="Dodaj" -03020401="Izdvoj" -03020402="Testiraj" - -03020420="Kopiraj" -03020421="Premesti" -03020422="Izbriši" -03020423="Svojstva" - -03020500="Podeli datoteku" -03020501="Podeli na:" -03020510="Podela..." -03020520="Potvrda podele" -03020521="Da li ste sigurni da želite da podelite datoteku na (0) dela?" -03020522="Veličine dela mora biti manji od veličine originalne datoteke" - -03020600="Sastavi datoteke" -03020601="Sastavi u:" -03020610="Spajanje..." -03020620="Izaberite samo prvi deo podele datoteke" -03020621="Ne mogu da otkrijem datoteku kao deo podele" -03020622="Ne može se naći više od jednog dela podele" - -03020710="Izračunavanje proverne veličine..." -03020720="Informacija o proverne veličine" -03020721="CRC porvera za podatak:" -03020722="CRC provera za podatak i imena:" - -03020800="Skeniranje..." - -03020900="Osobine" - -03020A01="Operacija ne može biti pozvana iz fascikle koja ima dugu putanju." -03020A02="Morate da izaberete neku datoteku" -03020A03="Morate da izaberete jednu ili više datoteka" -03020A04="Datoteka {0} već postoji" - -; Computer -03031100="Ukupni kapacitet" -03031101="Slobodni prostor" -03031102="Veličina cluster-a" -03031103="Naziv" - -; Network -03031200="Lokalno ime" -03031201="Provajder" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Korišćenje memorije:" -03080002="Kompresija" -03080003="Dekompresija" -03080004="Brzina" -03080005="Ocena" -03080006="Potpuna ocena" -03080007="Trenutno" -03080008="Rezultat" -03080009="Prolazi:" -0308000A="Greške:" -0308000B="Upotreba procesora" -0308000C="Rejting/Upotreba" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/sv.txt b/External/7-Zip/Lang/sv.txt deleted file mode 100644 index 60ea811d0..000000000 --- a/External/7-Zip/Lang/sv.txt +++ /dev/null @@ -1,536 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.59 -; Original translation by Andreas M Nilsson and Christoffer Enqvist -; Maintained since '7-Zip 4.07 beta' by Andreas M Nilsson -; Updated for '7-Zip 4.42' by Bernhard Eriksson, Wermlandsdata, Sweden -; Incorpororated changes made by Andreas M Nilsson for 4.44 -; Updated for 4.53 and 4.59 by Bernhard Eriksson, Wermlandsdata, Sweden - -00000000="Swedish" -00000001="Svenska" -00000002="29" - -; 7-Zip Configuration - -; Title -01000000="7-Zip konfiguration" - -; Info Page -01000100="Om 7-Zip" -01000103="7-Zip är fri programvara. Du kan emellertid stödja den fortsatta utvecklingen av 7-Zip genom att donera. Den aktuella översättningen på svenska är gjord av Wermlandsdata, baserad på arbete utfört av Andreas M Nilsson och Christoffer Enqvist." -01000104="Support" -01000105="Donera" - -; Folders Page -01000200="Mappar" -01000210="&Arbetsmapp" -01000211="&Systemets temp-mapp" -01000212="A&ktuell" -01000213="Spe&cificerad:" -01000214="Använd enbart för &flyttbara enheter" - -01000281="Ange plats där temporära arkivfiler ska sparas." - -; System Page -01000300="System" -01000301="Lägg till 7-Zip som alternativ i Utforskarens högerklicksmenyn" -01000302="Placera 7-Zip som en undermeny" -01000310="Objekt i högerklicksmenyn:" - -; Language Page -01000400="Språk" -01000401="Språk:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip kommandon" -02000103="Öppna" -02000104="Öppna det markerade arkivet." -02000105="Packa upp filer..." -02000106="Packar upp filer från det markerade arkivet." -02000107="Lägg till arkiv..." -02000108="Lägger till de markerade filerna till ett arkiv." -02000109="Kontrollera arkivet" -0200010A="Kontrollerar om arkivet är korrupt." -0200010B="Packa upp här" -0200010C="Packar upp filer från det markerade arkivet till den aktuella mappen." -0200010D="Packa upp till {0}" -0200010E="Packar upp filer till en undermapp." -0200010F="Lägg till {0}" -02000110="Lägger till de markerade filerna till ett arkiv." -02000111="Komprimera och skicka som e-post..." -02000112="Komprimerar de markerade filerna till ett arkiv och skickar arkivet via e-post." -02000113="Komprimera till {0} och skicka som e-post" -02000114="Komprimerar de markerade filerna till ett arkiv och skickar arkivet via e-post." - -02000140="" -02000141="" - -; Properties -02000203="Sökväg" -02000204="Namn" -02000205="Filändelse" -02000206="Mapp" -02000207="Storlek" -02000208="Storlek komprimerad" -02000209="Attribut" -0200020A="Skapad" -0200020B="Använd" -0200020C="Ändrad" -0200020D="Sammanhängande (Solid)" -0200020E="Kommenterad" -0200020F="Krypterad" -02000210="Delad före" -02000211="Delad efter" -02000212="Ordlista" -02000213="CRC" -02000214="Typ" -02000215="Anti" -02000216="Metod" -02000217="Värd OS" -02000218="Filsystem" -02000219="Användare" -0200021A="Grupp" -0200021B="Block" -0200021C="Kommentar" -0200021D="Position" -0200021E="Sökvägs prefix" -0200021F="Kataloger" -02000220="Filer" -02000221="Version" -02000222="Volym" -02000223="Multivolym" -02000224="Offset" -02000225="Länkar" -02000226="Block" -02000227="Volymer" - -02000229="64-bitars" -0200022A="Big-endian" -0200022B="CPU" -0200022C="Fysisk storlek" -0200022D="Storlek på header" -0200022E="Checksumma" -0200022F="Karakteristisk" -02000230="Virtuell adress" - -; Status bar -02000301="{0} objekt markerade" -02000302="{0} objekt" - -02000320="Filer:" -02000321="Mappar:" -02000322="Storlek:" -02000323="Komprimerad storlek:" -02000324="Arkiv:" - -; List Context Menu -02000401="&Kolumner..." - -02000411="&Öppna" -02000412="&Packa upp..." - -; ToolBar -02000501="Packa upp" - -; Messages -02000601="Uppdatering stöds inte för det här arkivet." -02000602="Kan inte uppdatera arkiv {0}" -02000603="Kan inte skapa mapp '{0}'" -02000604="Arkivformatet stöds inte." -02000605="Fel" -02000606="För många objekt" -02000607="Filändelsen är inte associerad till något program" -02000608="Inga fel påträffades" -02000609="Kan inte öppna filen '{0}' som ett arkiv" -0200060A="Kan inte öppna det krypterade arkivet '{0}'. Fel lösenord?" -0200060B="Systemet kan inte allokera den begärda minnesmängden" -0200060C="Okänt fel" -0200060D="Arkiv typen stöds ej" - -; Dialogs -02000702="OK" -02000705="&Ja" -02000707="Ja till &Alla" -02000709="&Nej" -0200070B="Nej till A&lla" - -02000710="Avbryt" -02000711="A&vbryt" -02000713="&Stäng" -02000714="Stopp" -02000715="Starta om" - -02000720="Hjälp" - -; Extract dialog -02000800="Packa upp" -02000801="&Packa upp till:" -02000802="&Lösenord" - -02000810="&Sökvägstyp" -02000811="Kompletta sökvägar" -02000812="Aktuella sökvägar" -02000813="Inga sökvägar" - -02000820="&Överskrivning" -02000821="Fråga före överskrivning" -02000822="Skriv över befintliga filer" -02000823="Hoppa över befintliga filer" -02000824="Automatisk omdöpning" -02000825="Automatisk omdöpning av befintliga filer" - -02000830="Filer" -02000831="&Markerade filer" -02000832="&Alla filer" - -02000881="Ange sökväg för uppackade filer." - -02000890="Packar upp" - -; Overwrite dialog -02000900="Bekräfta överskrivning av fil" -02000901="Målmappen innehåller redan den behandlade filen." -02000902="Vill du skriva över den befintliga filen" -02000903="med den här?" - -02000911="A&utomatisk omdöpning" - -02000982="{0} bytes" -02000983="ändrad den" - -; Messages dialog -02000A00="Diagnostiska meddelanden" - -02000A80="Meddelande" - -02000A91="Komprimeringsmetoden stöds inte för '{0}'." -02000A92="Datafel i '{0}'. Filen är korrupt." -02000A93="CRC-fel i '{0}'. Filen är korrupt." -02000A94="Datafel i den krypterade filen '{0}'. Fel lösenord?" -02000A95="CRC-fel i den krypterade filen '{0}'. Fel lösenord?" - -; Password dialog -02000B00="Ange lösenord" -02000B01="Ange lösenord:" -02000B02="&Visa lösenord" -02000B03="Upprepa lösenord:" -02000B10="Lösenorden stämmer inte överens." -02000B11="Använd endast engelska tecken, siffror och special tecken (!, #, $, ...) till lösenord" -02000B12="Lösenordet är för långt." - -; Progress dialog -02000C00="Förlopp" -02000C01="Förfluten tid:" -02000C02="Återstående tid:" -02000C03="Storlek:" -02000C04="Hastighet:" -02000C05="Bearbetat:" -02000C06="Komprimeringsgrad:" - -02000C10="&Bakgrunden" -02000C11="&Förgrunden" -02000C12="&Pausa" -02000C13="F&ortsätt" - -02000C20="Pausad" - -02000C30="Är du säker på att du vill avbryta?" - -; Compress dialog -02000D00="Lägg till arkiv" -02000D01="&Arkiv:" -02000D02="&Uppdateringsmetod:" -02000D03="Arkiv&format:" -02000D04="&Komprimeringsmetod:" -02000D05="Skapa ett &sammanhängande (eng. solid) arkiv" -02000D06="&Parametrar:" -02000D07="Alternativ" -02000D08="Skapa sj&älvuppackande arkiv" -02000D09="Använd flera trådar" -02000D0A="Kryptera fil&namn" -02000D0B="Komprimeringsniv&å:" -02000D0C="Storlek på &ordlista:" -02000D0D="Storlek på o&rd:" -02000D0E="Minne behövt vid komprimering:" -02000D0F="Minne behövt vid dekomprimering:" -02000D10="Kryptering" -02000D11="Krypteringsmetod:" -02000D12="Antal trådar:" -02000D13="Solit block storlek:" -02000D14="Icke-solit" -02000D15="Solit" -02000D16="Komprimera delade filer" - -02000D40="Dela upp i &delar (volymer), bytes:" -02000D41="Felaktig volymstorlek." -02000D42="Specificerad volymstorlek: {0} byte.\nÄr du säker du vill dela arkivet i sådana delar?" - -02000D81="Okomprimerat" -02000D82="Normal" -02000D83="Maximal" -02000D84="Snabb" -02000D85="Snabbaste" -02000D86="Ultra" - -02000D90="Bläddra" - -02000DA1="Lägg till och ersätt filer" -02000DA2="Lägg till och uppdatera befintliga filer" -02000DA3="Uppdatera enbart befintliga filer" -02000DA4="Synkronisera filer" - -02000DB1="Alla filer" - -02000DC0="Komprimerar" - -; Columns dialog -02000E00="Kolumner" -02000E01="Markera de kolumner du vill ska vara synliga i den här mappen. Använd \"Flytta Upp\" och \"Flytta Ner\" knapparna för att ordna om kolumnerna." -02000E02="Den valda kolumnen ska vara" -02000E03="pixlar &bred." - -02000E10="Flytta &Upp" -02000E11="Flytta &Ner" -02000E12="&Visa" -02000E13="&Dölj" -02000E14="Bestäm" - -02000E81="Titel" -02000E82="Bredd" - -; Testing -02000F90="Kontrollerar" - - -; File Manager - -03000000="7-Zip Filhanterare" - -; Menu -03000102="&Arkiv" -03000103="&Redigera" -03000104="&Visa" -03000105="Verkt&yg" -03000106="&Hjälp" -03000107="&Favoriter" - -; File -03000210="&Öppna" -03000211="Öppna &internt" -03000212="Öppna &externt" -03000220="&Visa" -03000221="&Redigera" -03000230="&Byt namn" -03000231="&Kopiera till..." -03000232="&Flytta till..." -03000233="&Ta bort" -03000240="E&genskaper" -03000241="Komme&ntera" -03000242="Beräkna checksumma" -03000250="Skapa mapp" -03000251="Skapa fil" -03000260="&Avsluta" -03000270="&Dela upp fil..." -03000271="&Sätt ihop filer..." - -; Edit -03000310="&Ångra" -03000311="&Gör om" -03000320="&Klipp ut" -03000321="K&opiera" -03000322="K&listra in" -03000323="&Ta bort" -03000330="Markera &alla" -03000331="Avmarkera alla" -03000332="&Invertera markering" -03000333="Markera..." -03000334="Avmarkera..." -03000335="Markera efter typ" -03000336="Avmarkera efter typ" - -; View -03000410="St&ora ikoner" -03000411="Sm&å ikoner" -03000412="&Lista" -03000413="&Detaljerad lista" -03000420="Osorterade" -03000430="Öppna rotmappen" -03000431="Upp en nivå" -03000432="Mapphistorik..." -03000440="&Uppdatera" -03000449="Platt vy" -03000450="&2 Paneler" -03000451="&Verktygsfält" -03000460="Verktygsfältet Arkiv" -03000461="Verktygsfältet Standard" -03000462="Stora Knappar" -03000463="Visa Knapptext" - -; Tools -03000510="&Alternativ..." -03000511="&Benchmark" - -; Help -03000610="&Innehåll..." -03000620="&Om 7-Zip..." - -; Favorites -03000710="&Lägg mappen till Favoriter som" -03000720="Bokmärke" - -; Options Dialog - -03010000="Alternativ" - -; Plugins -03010100="Insticksmoduler" -03010101="&Insticksmoduler:" -03010110="Alternativ..." - -; Edit -03010200="Redigerare" -03010201="&Redigerare:" - -; System -03010300="System" -03010302="Associera med 7-Zip:" -03010310="Insticksmodul" - -; Settings -03010400="Inställningar" -03010401="Visa \"..\" objektet" -03010402="Visa riktiga ikoner, för filer innehållande ikoner (el. länkade)" -03010410="Visa system-menyn" -03010420="Markera &hel rad" -03010421="Visa &rutnät" -03010430="&Alternativt markeringsläge" -03010440="Använd &stora minnessidor" - -; Strings - -03020201="Kopiera" -03020202="Flytta" -03020203="Kopiera till:" -03020204="Flytta till:" -03020205="Kopierar..." -03020206="Flyttar..." -03020207="Du kan inte flytta eller kopiera objekt till sådan mapp." -03020208="Funktionen stöds inte." -03020209="Välj målmapp." - -03020210="Bekräfta borttagning av fil" -03020211="Bekräfta borttagning av mapp" -03020212="Bekräfta borttagning av flera filer" -03020213="Är du säker på att du vill ta bort '{0}'?" -03020214="Är du säker på att du vill ta bort mappen '{0}' och allt dess innehåll?" -03020215="Är du säker på att du vill ta bort de här {0} objekten?" -03020216="Tar bort..." -03020217="Ett fel uppstod under borttagning av fil eller mapp" -03020218="Systemet kan inte flytta en fil med s lng skvg till papperskorgen" - -03020220="Döper om..." -03020221="Ett fel uppstod under omdöpning av fil eller mapp" -03020222="Bekräfta kopiering av fil" -03020223="Är du säker på att du vill kopiera filerna till arkivet" - -03020230="Skapa mapp" -03020231="Mappnamn:" -03020232="Ny mapp" -03020233="Fel vid skapande av mapp" - -03020240="Skapa fil" -03020241="Filnamn:" -03020242="Ny fil" -03020243="Fel vid skapande av fil" - -03020250="Markera" -03020251="Avmarkera" -03020252="Filter:" - -03020260="Mapphistorik" - -03020280="Filen '{0}' har blivit ändrad.\nVill du uppdatera den i arkivet?" -03020281="Kan inte uppdatera filen\n'{0}'" -03020282="Kan inte starta redigeraren." -03020283="Öppnar..." -03020284="Filen verkar vara ett virus (filnamnet innehåller 'långa' mellanslag)." - -03020290="Kommentar" -03020291="&Kommentar:" - -030202A0="System" - -03020300="Dator" -03020301="Nätverk" -03020302="Dokument" - -03020400="Lägg till" -03020401="Packa upp" -03020402="Testa" - -03020420="Kopiera" -03020421="Flytta" -03020422="Radera" -03020423="Info" - -03020500="Dela Upp Fil" -03020501="&Dela upp till:" -03020510="Delar upp..." -03020520="Bekräfta uppdelning" -03020521="Är det säkert du vill dela upp filen i {0} volymer?" -03020522="Volymstorleken måste vara mindre än storleken på originalfilen." - -03020600="Sätt Ihop Filer" -03020601="&Sätt ihop till:" -03020610="Sätter ihop..." -03020620="Markera bara första filen" -03020621="Kan inte upptäcka att filen är en del av en uppdelad fil" -03020622="Kan inte hitta mer än en del av en uppdelad fil" - -03020710="Beräknar checksumma..." -03020720="Checksumma information" -03020721="CRC checksumma för data:" -03020722="CRC checksumma för data och namn:" - -03020800="Skannar..." - -03020900="Egenskaper" - -03020A01="Operation kan inte utföras från en katalog med en så lång sökväg." -03020A02="Du måste välja en fil" -03020A03="Du måste välja en eller flera filer" -03020A04="Filen {0} existerar redan" - -; Computer -03031100="Total Storlek" -03031101="Ledigt utrymme" -03031102="Kluster storlek" -03031103="Etikett" - -; Network -03031200="Datornamn" -03031201="Nätverkstyp" - -; Benchmark Dialog - -03080000="Benchmark" -03080001="Minnesanvändning:" -03080002="Komprimering" -03080003="Dekomprimering" -03080004="Hastighet" -03080005="Prestanda" -03080006="Total prestanda" -03080007="Aktuellt" -03080008="Resultat" -03080009="Omgångar:" -0308000A="Fel:" -0308000B="CPU Användning" -0308000C="Rate / Användning" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/ta.txt b/External/7-Zip/Lang/ta.txt deleted file mode 100644 index e8631ede8..000000000 --- a/External/7-Zip/Lang/ta.txt +++ /dev/null @@ -1,440 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 3.13 -; Translated by Ve Elanjelian, lead coordinator of ThamiZha! team. See: www.thamizha.com -; -; -; -; - -00000000="Tamil" -00000001="தமிழ்" -00000002="73" - -; 7-Zip Configuration - -; Title -01000000="7-ஜிப் தகவமைப்பு" - -; Info Page -01000100="7-ஜிப்பைப் பற்றி" -01000103="தமிழாக்கம் (c) 2004 தமிழா! குழு - www.thamizha.com/\n\n7-ஜிப் ஒரு பரிநிரல் ஆகும். ஆனால், நீங்கள் 7-ஜிப்பின் மேம்பாட்டை ஆதரிக்க விரும்பினால், பதிவுபெற்றுங்கள். பதிவுபெற்ற பயனராக, நீங்கள் தொழில்நுட்ப உதவியும் பெறலாம்." -01000105="பதிவுபெறுங்கள்" - -; Folders Page -01000200="அடைவுகள்" -01000210="பணியிலுள்ள அடைவு" -01000211="மண்டல தற்காலிக அடைவு" -01000212="நடப்பு" -01000213="குறிப்பிட்ட:" -01000214="கழற்று இயக்கிகளை மட்டும் பயன்படுத்து" - -01000281="கோப்புகளைத் தற்காலிக காப்பகப்படுத்தும் இடத்தைக் குறிப்பிடுக." - -; System Page -01000300="மண்டலம்" -01000301="7-ஜிப்பை வெற்று சூழல்பட்டியலுடன் ஒருங்கிணை" -01000302="விழுதொடரும் சூழல் பட்டியல்" -01000310="சூழல் பட்டியல் உருப்படிகள்:" - -; Language Page -01000400="மொழி" -01000401="மொழி:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-ஜிப்" -02000102="7-ஜிப் ஆணைகள்" -02000103="காப்பகத்தைத் திற" -02000104="தேரிவிக்கப்பட்ட காப்பகத்தைத் திறக்கும்." -02000105="கோப்புகளை வெளிக்கொணர்..." -02000106="தெரிவுசெய்யப்பட்ட காப்பக கோப்புகளை வெளிக்கொணரும்." -02000107="காப்பகத்தில் இணை..." -02000108="தெரிவிக்கப்பட்ட உருப்படிகளைக் காப்பகத்திலிணைக்கும்." -02000109="காப்பகத்தைச் சோதனைசெய்" -0200010A="தெரிவுசெய்யப்பட்ட காப்பக சீர்மையைச் சோதிக்கும்." -0200010B="இங்கு வெளிக்கொணர்" -0200010C="தெரிவுசெய்யப்பட்ட காப்பகக் கோப்புகளை நடப்பு அடைவில் வெளிக்கொணரும்." -0200010D="{0}-ல் வெளிக்கொணர்" -0200010E="துணைஅடைவில் கோப்புகளை வெளிக்கொணர்." -0200010F="{0}-ல் இணை" -02000110="தெரிவிக்கப்பட்ட உருப்படிகளைக் காப்பகத்திலிணைக்கும்." -02000111="இறுக்கி மின்னஞ்சலனுப்பு..." -02000112="தெரிவான உருப்படிகளை காப்பகத்தில் இறுக்கிய பின் காப்பகத்தை மின்னஞ்சல் வழி அனுப்பும்." -02000113="{0}-க்கு இறுக்கி அஞ்சலனுப்பு" -02000114="தெரிவான உருப்படிகளை காப்பகத்தில் இறுக்கிய பின் காப்பகத்தை மின்னஞ்சல் வழி அனுப்பும்." - -02000140="<அடைவு>" -02000141="<காப்பகம்>" - -; Properties -02000203="பாதை" -02000204="பெயர்" -02000205="நீட்டிப்பு" -02000206="அடைவு" -02000207="அளவு" -02000208="கட்டப்பட்ட அளவு" -02000209="பண்புக்கூறு" -0200020A="உருவாக்கப்பட்டது" -0200020B="அனுகப்பட்டது" -0200020C="மாற்றப்பட்டது" -0200020D="திண்மம்" -0200020E="கருத்துரைக்கப்பட்ட" -0200020F="மறைக்குறியீட்டப்பட்டது" -02000210="முன் பிரி" -02000211="பின் பிரி" -02000212="அகராதி" -02000213="CRC" -02000214="வகை" -02000215="தடுப்பு" -02000216="வழி" -02000217="புரவலரின் OS" -02000218="கோப்பு மண்டலம்" -02000219="பயனர்" -0200021A="குழு" -0200021B="கட்டம்" -0200021C="குறிப்பு" - -; Status bar -02000301="{0} பொருள் தெரிவானது" -02000302="{0} பொருள்(கள்)" - -; List Context Menu -02000401="பத்திகள்..." - -02000411="திற" -02000412="வெளிக்கொணர்..." - -; ToolBar -02000501="வெளிக்கொணர்" - -; Messages -02000601="இக்காப்பகத்தில் புதுப்பிக்கும் செயல்களுக்கு ஆதரவில்லை." -02000602="{0} காப்பகத்தைப் புதுப்பிக்க முடியவில்லை" -02000603="'{0}' அடைவை உருவாக்க இயலவில்லை" -02000604="கோப்பு ஒரு ஆதரிக்கப்படாத காப்பகம்." -02000605="தவறு" -02000606="மிகவும் அதிகமான உருப்படிகள்" -02000607="கொடுக்கப்பட்ட கோப்புப் பெயர் நீட்டிப்புடன் தொடர்பான எப்பயன்பாடும் இல்லை." -02000608="தவறுகளேதுமில்லை" - -; Dialogs -02000702="சரி" -02000705="ஆம்" -02000707="அனைத்திற்கும் ஆம்" -02000709="வேண்டாம்" -0200070B="அனைத்திற்கும் இல்லை" - -02000710="இரத்து" -02000711="இரத்து" -02000713="மூடு" -02000714="நிறுத்து" -02000715="மீள்துவங்கு" - -02000720="உதவி" - -; Extract dialog -02000800="வெளிக்கொணர்" -02000801="இங்கு வெளிக்கொணர்:" -02000802="கடவுச்சொல்" - -02000810="பாதை முறைமை" -02000811="முழு பாதைப்பெயர்கள்" -02000812="நடப்பு பாதைப்பெயர்கள்" -02000813="பாதைப்பெயர்களில்லை" - -02000820="மேலெழுதல் முறைமை" -02000821="மேலெழுதுவதற்கு முன் கேள்" -02000822="கேட்காமல் மேலெழுது" -02000823="தற்பொழுதுள்ள கோப்புகளைத் தவிர்" -02000824="தானாக மாற்றுப்பெயரிடு" - -02000830="கோப்புகள்" -02000831="தேரிவான கோப்புகள்" -02000832="அனைத்து கோப்புகளும்" - -02000881="வெளிக்கொணர்ந்த கோப்புகளுக்கான இடத்தைக் குறிப்பிடு." - -02000890="வெளிக்கொணரப்படுகின்றது" - -; Overwrite dialog -02000900="கோப்பு மாற்றத்தை உறுதிசெய்" -02000901="சேரிட அடைவு ஏற்கனவே செயல்படுத்தப்பட்ட கோப்பைக் கொண்டுள்ளது." -02000902="தற்பொழுதுள்ள கோப்பை" -02000903="இதக்கொண்டு மாற்ற விரும்புகிறீர்களா?" - -02000911="தானாக மாற்றுப்பெயரிடு" - -02000982="{0} பைட்கள்" -02000983="மாற்றப்பட்ட காலம்" - -; Messages dialog -02000A00="அறிவழிச் செய்திகள்" - -02000A80="செய்தி" - -02000A91="'{0}'-ல் ஆதரவில்லாத இறுக்கல் முறை." -02000A92="'{0}'-ல் தரவுத் தவறு. கோப்பு முறிந்துள்ளது." -02000A93="'{0}'-ல் CRC தோல்வியுற்றது. கோப்பு முறிந்துள்ளது." - -; Password dialog -02000B00="கடவுச்சொல்லை உள்ளிடுக" -02000B01="கடவுச்சொல்லை உள்ளிடுக:" -02000B02="கடவுச்சொல்லை காட்டு" - -; Progress dialog -02000C00="செயலாக்கம்" -02000C01="மீதமுள்ள நேரம்:" -02000C02="மீதமுள்ள நேரம்:" -02000C03="அளவு:" -02000C04="வேகம்:" - -02000C10="பின்புலம்" -02000C11="முன்புலம்" -02000C12="தற்காலிகமாக நிறுத்து" -02000C13="தொடரவும்" - -02000C20="தற்காலிக நிறுத்தல்" - -02000C30="உறுதியாகவே இரத்து செய்ய விரும்புகிறீர்களா?" - -; Compress dialog -02000D00="காப்பகத்திலிணை" -02000D01="காப்பகம்:" -02000D02="புதுபிக்கும் முறைமை:" -02000D03="காப்பக வடிவம்:" -02000D04="இறுக்கும் வழி:" -02000D05="திண்ம காப்பகத்தை உருவாக்கு" -02000D06="அளபுருகள்:" -02000D07="விருப்பத்தேர்வுகள்" -02000D08="SFX காப்பகம் உறுவாக்கு" -02000D09="பல இழையாக்கம்" -02000D0A="பெயரை மறைக்குறியீடாக்கு" -02000D0B="இறுக்க வகை:" -02000D0C="அகராதி அளவு:" -02000D0D="வார்த்தை அளவு:" -02000D0E="இறுக்க நினைவக பயன்பாடு:" -02000D0F="பெருக்க நினைவக பயன்பாடு:" - -02000D40="கனவளவுகளுக்கு, பைட்களுக்குப் பிரி:" - -02000D81="தேக்கு" -02000D82="சாதாரண" -02000D83="அதிகமான" -02000D84="விரைவான" -02000D85="அதிவிரைவான" -02000D86="சிறப்பான" - -02000D90="உலாவு" - -02000DA1="சேர்த்து கோப்புகளை மாற்று" -02000DA2="புதிப்பித்து கோப்புகளை சேர்" -02000DA3="உள்ள கோப்புகளைப் புதுப்பி" -02000DA4="கோப்புகளை ஒத்தியக்கு" - -02000DB1="அனைத்து கோப்புகளும்" - -02000DC0="இறுக்கப்படுகின்றது" - -; Columns dialog -02000E00="பத்திகள்" -02000E01="இவ்வடைவில் தெரிய வேண்டியவற்றின் பத்திகளைத் தெரிவுசெய். மேல் நகர்த்து மற்றும் கீழ் நகர்த்து பொத்தான்களக் கொண்டு பத்திகளை ஒழுங்காக்கு." -02000E02="தெரிவுசெய்யப்பட்ட பத்தி" -02000E03="படத்துணுக்கு அகலம் இருக்கவேண்டும்." - -02000E10="மேல் நகர்த்து" -02000E11="கீழ் நகர்த்து" -02000E12="காட்டு" -02000E13="மறை" -02000E14="அமை" - -02000E81="தலைப்பு" -02000E82="அகலம்" - -; Testing -02000F90="சோதனை..." - - -; File Manager - -03000000="7-ஜிப் கோப்பு மேலாளர்" - -; Menu -03000102="கோப்பு" -03000103="பதிப்பு" -03000104="பார்வை" -03000105="கருவிகள்" -03000106="உதவி" -03000107="விருப்பங்கள்" - -; File -03000210="திற" -03000211="உள்ளே திற" -03000212="வெளியே திற" -03000220="பார்வை" -03000221="பதிப்பு" -03000230="மாற்றுப்பெயரிடு" -03000231="இங்கு நகலெடு..." -03000232="இங்கு நகர்த்து..." -03000233="அழி" -03000240="தன்மைகள்" -03000241="கருத்துரை" -03000250="கோப்பை உருவாக்கு" -03000251="கோப்பு உருவாக்கு" -03000260="வெளியேறு" - -; Edit -03000310="செயல்நீக்கு" -03000311="செயல்மீள்" -03000320="வெட்டு" -03000321="நகல்" -03000322="ஒட்டு" -03000323="அழி" -03000330="அனைத்தும் தேர்ந்தெடு" -03000331="அனைத்தும் நீக்கு" -03000332="தெரிவை புரட்டு" -03000333="தேர்ந்தெடு..." -03000334="நீக்கு..." -03000335="வகைப்படி தெரிவுசெய்" -03000336="வகைப்படி நீக்கு" - -; View -03000410="பெரிய உருபிகள்" -03000411="சிறிய உருபிகள்" -03000412="பட்டியல்" -03000413="தகவல்கள்" -03000420="வரிசைப்படுத்தப்படாதது" -03000430="வேர் அடைவைத் திற" -03000431="ஒரு படி மேல்" -03000432="அடைவுகளின் வரலாறு..." -03000440="புதுக்கல்" -03000450="2 பலகங்கள்" -03000451="கருவிப்பட்டைகள்" -03000460="காப்பக கருவிப்பட்டை" -03000461="பொதுவான கருவிப்பட்டை" -03000462="பெரிய பொத்தான்கள்" -03000463="பொத்தான்களின் உரையைக் காட்டு" - -; Tools -03000510="விருப்பத்தேர்வு..." -03000511="மதிப்பீட்டு அளவை" - -; Help -03000610="பொருளடக்கம்..." -03000620="7-ஜிப்பைப் பற்றி..." - -; Favorites -03000710="அடைவை விரும்பியவற்றுள் இப்படி இணை" -03000720="புத்தகக்குறி" - -; Options Dialog - -03010000="தேர்வுகள்" - -; Plugins -03010100="செருகுநிரல்கள்" -03010101="செருகுநிரல்கள்:" -03010110="தேர்வுகள்..." - -; Edit -03010200="பதிப்பாளன்" -03010201="பதிப்பாளன்:" - -; System -03010300="மண்டலம்" -03010302="7-ஜிப்பை இதனுடன் தொடர்புப்படுத்து:" -03010310="செருகுநிரல்" - -; Settings -03010400="அமைவுகள்" -03010401="\"..\" உருப்படியைக் காட்டு" -03010402="கோப்பு உருபிகளைக் காட்டு" -03010410="மண்டல பட்டியலைக் காட்டு" - -; Strings - -03020201="நகல்" -03020202="நகர்த்து" -03020203="இங்கு நகலெடு:" -03020204="இங்கு நகர்த்து:" -03020205="நகலெடுக்கப்படுகிறது..." -03020206="நகர்த்தப்படுகிறது..." -03020207="அத்தகைய அடைவுகளுக்கு நீங்கள் நகர்த்தவோ நகலெடுக்கவோ முடியாது." -03020208="அத்தகைய செயலுக்கு ஆதரவில்லை." - -03020210="கோப்பு அழிப்பை உறுதிசெய்" -03020211="அடைவு அழிப்பை உறுதிசெய்" -03020212="பல கோப்பு அழிப்பை உறுதிசெய்" -03020213="'{0}'-ஐ உறுதியாக அழிக்க விரும்புகிறீர்களா?" -03020214="'{0}' அடைவையும் அதிலுள்ளவற்றயும் உறுதியாகவே அழிக்க விரும்புகிறீர்களா?" -03020215="இந்த {0} உருப்படிகளை உறுதியாக அழிக்க விரும்புகிறீர்களா?" -03020216="அழிக்கப்படுகிறது..." -03020217="கோப்பையோ அடைவையோ அழிக்கும்போது தவறு" - -03020220="பெயர்மாற்றப்படுகிறது..." -03020221="கோப்பையோ அடைவையோ பெயர்மாற்றும்போது தவறு" - -03020230="அடைவு உருவாக்கு" -03020231="அடைவின் பெயர்:" -03020232="புதிய அடைவு" -03020233="அடைவு உருவாக்கும்போது தவறு" - -03020240="கோப்பு உருவாக்கு" -03020241="கோப்பின் பெயர்:" -03020242="புதிய கோப்பு" -03020243="கோப்பு உருவாக்கையில் தவறேற்பட்டது" - -03020250="தெரிவுசெய்" -03020251="நீக்கு" -03020252="முகமுடி:" - -03020260="அடைவுகளின் வரலாறு" - -03020280="'{0}' கோப்பு மாற்றப்பட்டது.\nஇதனை காப்பகத்தில் புதுப்பிக்க வேண்டுமா?" -03020281="பின்வரும் கோப்பை புதுப்பிக்க இயலவில்லை\n'{0}'" -03020282="பதிப்பாளனைத் துவக்க இயலவில்லை." -03020283="திறக்கப்படுகின்றது..." - -03020290="கருத்துரை" -03020291="கருத்துரை:" - -030202A0="மண்டலம்" - -03020300="கணினி" -03020301="பிணையம்" - -03020400="இணை" -03020401="வெளிக்கொணர்" -03020402="பரிசோதி" - -03020420="நகல்" -03020421="நகர்த்து" -03020422="அழி" -03020423="தகவல்" - -; Computer -03031100="மொத்த அளவு" -03031101="காளி இடம்" -03031102="கொத்தணியின் அளவு" -03031103="வில்லை" - -; Network -03031200="இடத்துரி பெயர்" -03031201="வழங்குபவர்" - -; Benchmark Dialog - -03080000="மதிப்பீட்டு அளவை" -03080001="நினைவக பயன்:" -03080002="இறுக்கப்படுகையில்" -03080003="பெருக்கப்படுகையில்" -03080004="வேகம்" -03080005="புள்ளிகள்" -03080006="மொத்த புள்ளிகள்" -03080007="நடப்பு" -03080008="முடிவில்" -03080009="சரியானவை:" -0308000A="தவறுகள்:" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/th.txt b/External/7-Zip/Lang/th.txt deleted file mode 100644 index dddc57c0e..000000000 --- a/External/7-Zip/Lang/th.txt +++ /dev/null @@ -1,542 +0,0 @@ -;!@Lang@!UTF-8! -; -; Translated by Zafire06 (ver 3.13) -; Updated by Kom10 in 2010 For ver 9.13 -; -; -; - -00000000="Thai" -00000001="ไทย" -00000002="30" - -; 7-Zip Configuration - -; Title -01000000="โครงแบบ 7-Zip" - -; Info Page -01000100="เกี่ยวกับ 7-Zip" -01000103="7-Zip เป็นฟรีแวร์ อย่างไรก็ตาม คุณสามารถสนับสนุนการพัฒนาของ 7-Zip ได้โดยการลงทะเบียน เมื่อคุณเป็นผู้ใช้ที่ลงทะเบียนแล้ว คุณจะได้รับการสนับสนุนทางเทคนิคจากเรา" -01000104="สนับสนุน" -01000105="ลงทะเบียน" - -; Folders Page -01000200="โฟลเดอร์" -01000210="&โฟลเดอร์ที่ทำงานอยู่" -01000211="&โฟลเดอร์ต่างๆของระบบ" -01000212="&โฟลเดอร์ปัจจุบัน" -01000213="&ระบุ:" -01000214="ใช้สำหรับไดรฟ์แบบถอดได้เท่านั้น" - -01000281="ระบุที่ตั้งสำหรับไฟล์เอกสารชั่วคราว" - -; System Page -01000300="ระบบ" -01000301="รวบรวมคำสั่ง 7-Zip ไปที่แถบเมนูลัด" -01000302="แยกเป็นแถบคำสั่ง 7-Zip" -01000310="วัตถุที่ปรากฏบนเมนูลัด:" - -; Language Page -01000400="ภาษา" -01000401="ภาษา:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="คำสั่ง 7-Zip" -02000103="เปิดเอกสาร" -02000104="เปิดเอกสารที่เลือกไว้" -02000105="แยกไฟล์..." -02000106="แยกไฟล์จากเอกสารที่เลือกไว้" -02000107="เพิ่มเข้าเอกสาร..." -02000108="เพิ่มวัตถุที่เลือกไว้เข้าเอกสาร" -02000109="ทดสอบเอกสาร" -0200010A="ทดสอบความน่าเชื่อถือของเอกสารที่เลือกไว้" -0200010B="แยกไฟล์ที่นี่" -0200010C="แยกไฟล์จากเอกสารที่เลือกไว้ไปที่โฟลเดอร์เดิม" -0200010D="แยกไฟล์ไปที่ {0}" -0200010E="แยกไฟล์ไปที่โฟลเดอร์ย่อย." -0200010F="เพิ่มเข้า {0}" -02000110="เพิ่มวัตถุที่เลือกไว้เข้าเอกสาร" -02000111="บีบอัดแล้วส่งอีเมลล์..." -02000112="บีบอัดวัตถุที่เลือกไว้แล้วส่งไปทางอีเมลล์" -02000113="บีบอัดเป็น {0} แล้วส่งอีเมลล์" -02000114="บีบอัดวัตถุที่เลือกไว้แล้วส่งไปทางอีเมลล์" - -02000140="<โฟลเดอร์>" -02000141="<เอกสาร>" - -; Properties -02000203="ที่ตั้ง" -02000204="ชื่อ" -02000205="ชนิด" -02000206="โฟลเดอร์" -02000207="ขนาด" -02000208="ขนาดเมื่อถูกจัดเก็บ" -02000209="ลักษณะประจำ" -0200020A="สร้างเมื่อ" -0200020B="เข้าถึงเมื่อ" -0200020C="ดัดแปรเมื่อ" -0200020D="ต่อเนื่อง" -0200020E="หมายเหตุ" -0200020F="การเข้ารหัสลับ" -02000210="ก่อนแบ่ง" -02000211="หลังแบ่ง" -02000212="ดิคชันนารี" -02000213="ซีอาร์ซี" -02000214="แบบชนิด" -02000215="ต่อต้าน" -02000216="วิธีการ" -02000217="OS ที่ใช้" -02000218="ไฟล์ระบบ" -02000219="ผู้ใช้" -0200021A="กลุ่ม" -0200021B="บล็อก" -0200021C="หมายเหตุ" -0200021D="ตำแหน่ง" -0200021E="คำนำหน้าที่ตั้ง" -0200021F="โฟลเดอร์" -02000220="ไฟล์" -02000221="เวอร์ชั่น" -02000222="วอลลุ่ม" -02000223="มัลติวอลลุ่ม" -02000224="ออฟเซ็ท" -02000225="ลิ้งค์" -02000226="บล็อค" -02000227="Volumes" - -02000229="64-บิท" -0200022A="Big-endian" -0200022B="CPU" -0200022C="ขนาดทางกายภาพ" -0200022D="ขนาดเฮดเดอร์" -0200022E="Checksum" -0200022F="คุณลักษณะ" -02000230="Virtual Address" -02000231="ID" -02000232="ชื่อย่อ" -02000233="ผู้สร้างโปรแกรม" -02000234="ขนาด Sector" -02000235="โหมด" -02000236="ลิงค์" - -; Status bar -02000301="{0} วัตถุที่เลือกไว้" -02000302="{0} วัตถุ" - -02000320="ไฟล์:" -02000321="โฟลเดอร์:" -02000322="ขนาด:" -02000323="ขนาดที่ถูกบีบอัด:" -02000324="เอกสาร:" - -; List Context Menu -02000401="&สดมภ์..." - -02000411="&เปิด" -02000412="&แยกไฟล์..." - -; ToolBar -02000501="แยกไฟล์" - -; Messages -02000601="ปรับปรุงการทำงานไม่สนับสนุนสำหรับเอกสาร" -02000602="ไม่สามารถปรับปรุงเอกสาร {0}" -02000603="ไม่สามารถสร้างโฟลเดอร์ '{0}'" -02000604="ไฟล์ไม่สนับสนุนเอกสาร" -02000605="เกิดข้อผิดพลาด" -02000606="มีวัตถุมากเกินไป" -02000607="ไม่มีโปรแกรมที่เปิดชนิดไฟล์ที่ให้มาได้" -02000608="ไม่มีข้อผิดพลาด" -02000609="ไม่สามารถเปิดไฟล์ '{0}' เป็นเอกสารได้" -0200060A="ไม่สามารถเปิดไฟล์ที่เข้ารหัสได้ '{0}' พาสเวิร์ดผิดหรือไม่?" -0200060B="ระบบไม่สามารถใช้หน่วยความจำตามที่ระบุได้" -0200060C="เกิดความผิดพลาดที่ไม่ทราบสาเหตุ" -0200060D="ชนิดของไฟล์บีบอัดไม่รองรับ" - -; Dialogs -02000702="ตกลง" -02000705="&ใช่" -02000707="ใช่ทั้งหมด" -02000709="&ไม่" -0200070B="ไม่ทั้งหมด" - -02000710="ยกเลิก" -02000711="&ยกเลิก" -02000713="&ออก" -02000714="หยุด" -02000715="ฟื้นฟู" - -02000720="ช่วยเหลือ" - -; Extract dialog -02000800="แยกไฟล์" -02000801="แยกไฟล์ไปที่:" -02000802="รหัสผ่าน" - -02000810="ที่ตั้ง" -02000811="ชื่อที่ตั้งแบบเต็ม" -02000812="ชื่อตั้งเดิม" -02000813="ไม่มีชื่อที่ตั้ง" - -02000820="การบันทึกทับ" -02000821="ถามก่อนมีการบันทึกทับ" -02000822="บันทึกทับโดยไม่มีข้อความพร้อมรับ" -02000823="ข้ามไฟล์ที่มีอยู่" -02000824="เปลี่ยนชื่ออัตโนมัติ" -02000825="เปลี่ยนชื่อไฟล์ที่มีอยู่อัตโนมัติ" - -02000830="ไฟล์" -02000831="&ไฟล์ที่เลือกไว้" -02000832="&ไฟล์ทั้งหมด" - -02000881="ระบุที่ตั้งสำหรับไฟล์ที่แยกออกมา" - -02000890="กำลังแยกไฟล์" - -; Overwrite dialog -02000900="ยืนยันการแทนที่ไฟล์" -02000901="โฟลเดอร์ปลายทางมีไฟล์ที่ได้ประมวลผลแล้ว" -02000902="คุณต้องการแทนที่ไฟล์ที่มีอยู่หรือไม่" -02000903="ด้วย" - -02000911="เปลี่ยนชื่ออัตโนมัติ" - -02000982="{0} ไบต์" -02000983="ดัดแปลงบน" - -; Messages dialog -02000A00="ข้อความวินิจฉัย" - -02000A80="ข้อความ" - -02000A91="ไม่รองรับวิธีการบีบอัดนี้สำหรับ '{0}'" -02000A92="ข้อมูลใน '{0}' ผิดพลาด ไฟล์ชำรุด" -02000A93="ซีอาร์ซีใน '{0}' ไม่สามารถใช้การได้ ไฟล์ชำรุด" -02000A94="ข้อมูลในไฟล์บีบอัด '{0}' ผิดพลาด รหัสผ่านไม่ถูกต้อง?" - -; Password dialog -02000B00="ใส่รหัสผ่าน" -02000B01="ใส่รหัสผ่าน:" -02000B02="&แสดงรหัสผ่าน" -02000B03="ใส่รหัสผ่านอีกครั้ง:" -02000B10="รหัสผผ่านไม่ตรง" -02000B11="ตั้งรหัสผ่านด้วยอักษรภาษาอังกฤษ หรืออักขระ (!, #, $, ...) " -02000B12="รห้สผ่านยาวเกินไป" - -; Progress dialog -02000C00="กระบวนการ" -02000C01="ใช้เวลาไปแล้ว:" -02000C02="ต้องใช้เวลาอีก:" -02000C03="ขนาด:" -02000C04="ความเร็ว:" -02000C05="ดำเนินการแล้ว:" -02000C06="อัตราส่วนการบีบอัด:" - -02000C10="&ทำงานเป็นพื้นหลัง" -02000C11="&ทำงานเป็นพื้นหน้า" -02000C12="&หยุดชั่วคราว" -02000C13="&ดำเนินการต่อ" - -02000C20="หยุดชั่วคราว" - -02000C30="คุณแน่ใจหรือว่าจะยกเลิก" - -; Compress dialog -02000D00="เพิ่มเข้าเอกสาร" -02000D01="&เอกสาร:" -02000D02="&การปรับปรุง:" -02000D03="รูปแบบการบีบอัดที่ต้องการใช้:" -02000D04="&วิธีการบีบอัด:" -02000D05="สร้างเอกสารแบบต่อเนื่อง" -02000D06="&พารามิเตอร์:" -02000D07="ตัวเลือก" -02000D08="สร้างเอกสาร SFX" -02000D09="มัลติเทรดดิ้ง" -02000D0A="สร้างรหัสผ่าน" -02000D0B="อัตราการบีบอัด:" -02000D0C="&ขนาดดิคชันนารี:" -02000D0D="&ขนาดอักษร:" -02000D0E="หน่วยความจำที่ใช้ในการบีบอัด:" -02000D0F="หน่วยความจำที่ใช้ในการแตกออก:" -02000D10="การเข้ารหัส" -02000D11="วิธีการเข้ารหัส:" -02000D12="จำนวน CPU threads:" -02000D13="ขนาด Solid block:" -02000D14="Non-solid" -02000D15="Solid" -02000D16="บีบอัดแชร์ไฟล์" - -02000D40="ขนาดไฟล์ที่ต้องการแบ่ง, ไบต์:" -02000D41="ขนาด volume ไม่ถูกต้อง" -02000D42="ระบุขนาด volume: {0} ไบท์.\nท่านมั่นใจว่าต้องการแบ่งไฟล์เป็น volumes ดังกล่าว?" - -02000D81="เก็บเฉยๆ" -02000D82="ปกติ" -02000D83="ดี" -02000D84="เร็ว" -02000D85="เร็วที่สุด" -02000D86="ดีที่สุด" - -02000D90="ค้นดู" - -02000DA1="เพิ่มและแทนที่ไฟล์" -02000DA2="ปรับปรุงและเพิ่ม" -02000DA3="ทำให้ไฟล์ที่มีอยู่ใช้การได้ดีขึ้น" -02000DA4="ทำให้ไฟล์ประสานกัน" - -02000DB1="ไฟล์ทั้งหมด" - -02000DC0="กำลังบีบอัด" - -; Columns dialog -02000E00="สดมภ์" -02000E01="ตรวจสอบสดมภ์ซึ่งจะทำให้คุณรู้รายละเอียดของไฟล์ได้มากขึ้น ใช้ปุ่มย้ายขึ้นและย้ายลงเพื่อเรียงลำดับสดมภ์อีกครั้ง" -02000E02="สดมภ์ที่เลือกไว้จะเป็น" -02000E03="ความกว้าง (พิกเซล)" - -02000E10="ย้ายขึ้น" -02000E11="ย้ายลง" -02000E12="&แสดง" -02000E13="&ซ่อน" -02000E14="เซ็ต" - -02000E81="หัวเรื่อง" -02000E82="ความกว้าง" - -; Testing -02000F90="กำลังทดสอบ" - - -; File Manager - -03000000="ตัวจัดการไฟล์ 7-Zip" - -; Menu -03000102="&แฟ้ม" -03000103="&แก้ไข" -03000104="&มุมมอง" -03000105="&เครื่องมือ" -03000106="&ช่วยเหลือ" -03000107="&รายการโปรด" - -; File -03000210="&เปิด" -03000211="เปิดในหน้าต่างเดิม" -03000212="เปิดในหน้าต่างใหม่" -03000220="&มุมมอง" -03000221="&แก้ไข" -03000230="&เปลี่ยนชื่อ" -03000231="&คัดลอกไปที่..." -03000232="&วางที่..." -03000233="&ลบ" -03000240="&คุณสมบัติ" -03000241="&หมายเหตุ" -03000242="คำนวณ checksum" -03000243="Diff" -03000250="สร้างโฟลเดอร์" -03000251="สร้างไฟล์" -03000260="ออก" -03000270="&แยกไฟล์..." -03000271="รวมไฟล์..." - -; Edit -03000310="&ทำกลับ" -03000311="&ทำซ้ำ" -03000320="&ตัด" -03000321="&คัดลอก" -03000322="&วาง" -03000323="&ลบ" -03000330="เลือกทั้งหมด" -03000331="ยกเลิกการเลือกทั้งหมด" -03000332="&สลับการเลือกให้เป็นตรงกันข้าม" -03000333="เลือก..." -03000334="ยกเลิกการเลือก..." -03000335="เลือกด้วยแบบชนิด" -03000336="ยกเลิกการเลือกด้วยแบบชนิด" - -; View -03000410="&ไอคอนขนาดใหญ่" -03000411="&ไอคอนขนาดเล็ก" -03000412="&แสดงเป็นรายการ" -03000413="&แสดงแบบละเอียด" -03000420="ไม่เลือก" -03000430="เปิดรากโฟลเดอร์" -03000431="เลื่อนขึ้นหนึ่งระดับ" -03000432="ประวัติโฟลเดอร์..." -03000440="&ฟื้นฟู" -03000449="แสดงไฟล์และโฟลด์เดอร์ทั้งหมด" -03000450="&แสดง 2 แผง" -03000451="&แถบเครื่องมือ" -03000460="แถบเครื่องมือเอกสาร" -03000461="แถบเครื่องมือธรรมดา" -03000462="ปุ่มขนาดใหญ่" -03000463="แสดงข้อความบนปุ่ม" - -; Tools -03000510="&ตัวเลือก..." -03000511="&เกณฑ์เปรียบเทียบสมรรถนะ" - -; Help -03000610="&เนื้อหาและดัชนี..." -03000620="&เกี่ยวกับ 7-Zip..." - -; Favorites -03000710="&เพิ่มโฟลเดอร์เข้ารายการโปรด" -03000720="คั่นหน้าที่" - -; Options Dialog - -03010000="ตัวเลือก" - -; Plugins -03010100="ปลั๊กอิน" -03010101="&ปลั๊กอิน:" -03010110="ตัวเลือก..." - -; Edit -03010200="บรรณาธิกรณ์" -03010201="&บรรณาธิกรณ์:" -03010202="&Diff:" - -; System -03010300="ระบบ" -03010302="ทำให้ 7-Zip ทำงานร่วมกับ:" -03010310="ปลั๊กอิน" - -; Settings -03010400="กำหนด" -03010401="แสดงวัตถุ \"..\"" -03010402="แสดงไอคอนไฟล์ที่แท้จริง" -03010410="แสดงเมนูระบบ" -03010420="&เลือกเต็มแถว" -03010421="แสดง &เส้นกริด" -03010422="คลิกครั้งเดียวเพื่อเปิดไฟล์" -03010430="&โหมดการเลือกอื่น" -03010440="ใช้ &เพจความจำขนาดใหญ่" - -; Strings - -03020201="คัดลอก" -03020202="ย้าย" -03020203="คัดลอกไปที่:" -03020204="ย้ายที่:" -03020205="กำลังคัดลอก..." -03020206="กำลังวาง..." -03020207="คุณไม่สามารถย้ายหรือคัดลอกวัตถุในโฟลเดอร์เช่นนี้" -03020208="การปฏิบัติการไม่สนับสนุน" -03020209="เลือกโฟลเดอร์ที่ตั้ง" - -03020210="ยืนยันการลบไฟล์" -03020211="ยืนยันการลบโฟลเดอร์" -03020212="ยืนยันการลบไฟล์แบบควบซ้อน" -03020213="คุณแน่ใจหรือว่าคุณต้องการจะลบไฟล์ '{0}'?" -03020214="คุณแน่ใจหรือว่าคุณต้องการจะลบโฟลเดอร์ '{0}' และข้อมูลของมันทั้งหมด" -03020215="คุณแน่ใจหรือว่าจะลบวัตถุ {0} เหล่านี้" -03020216="กำลังลบ..." -03020217="เกิดข้อผิดพลาดในการลบไฟล์หรือโฟลเดอร์" -03020218="ระบบไม่สามารถย้ายไฟล์ที่ชื่อที่ตั้งยาวไปยังถังขยะได้" - -03020220="กำลังเปลี่ยนชื่อ..." -03020221="เกิดข้อผิดพลาดในการเปลี่ยนชื่อไฟล์หรือโฟลเดอร์" -03020222="ยืนยันการคัดลอกไฟล์" -03020223="ท่านมั่นใจที่จะคัดลอกไฟล์ไปยังเอกสารหรือไม่" - -03020230="สร้างโฟลเดอร์" -03020231="ชื่อโฟลเดอร์:" -03020232="โฟลเดอร์ใหม่" -03020233="เกิดข้อผิดพลาดในการสร้างโฟลเดอร์" - -03020240="สร้างไฟล์" -03020241="ชื่อไฟล์:" -03020242="ไฟล์ใหม่" -03020243="เหิดข้อผิดพลาดในการสร้างไฟล์" - -03020250="เลือก" -03020251="ยกเลิกการเลือก" -03020252="ตัวพราง:" - -03020260="ประวัติโฟลเดอร์" - -03020280="ไฟล์ '{0}' ได้ถูกดัดแปรแล้ว\nคุณต้องการจะปรับปรุงเอกสารหรือไม่" -03020281="ไม่สามารถปรับปรุงไฟล์\n'{0}'" -03020282="ไม่สามารถเปิดตัวแก้ไขได้" -03020283="กำลังเปิด..." -03020284="ไฟล์อาจเป็นไวรัส (ชื่อไฟล์มีช่องว่างยาว)" - -03020290="หมายเหตุ" -03020291="&หมายเหตุ:" - -030202A0="ระบบ" - -03020300="คอมพิวเตอร์" -03020301="เครือข่าย" -03020302="เอกสาร" - -03020400="เพิ่มเข้า" -03020401="แยกไฟล์" -03020402="ทดสอบ" - -03020420="คัดลอก" -03020421="ย้าย" -03020422="ลบ" -03020423="เกี่ยวกับ" - -03020500="แยกไฟล์" -03020501="&แยกไปยัง:" -03020510="กำลังแยก..." -03020520="ยืนยันการแยก" -03020521="ท่านมั่นใจว่าต้องการแยกไฟล์เป็น {0} volumes?" -03020522="ขนาด Volume ต้องเล็กกว่าขนาดไฟล์ต้นฉบับ" - -03020600="รวมไฟล์" -03020601="&รวมไปยัง:" -03020610="กำลังรวม..." -03020620="เลือกเฉพาะส่วนแรกของไฟล์แยก" -03020621="ไม่สามารถตรวจพบไฟล์ว่าเป็นส่วนหนึ่งของไฟล์แยก" -03020622="ไม่สามารถหาไฟล์แยกได้มากหนึ่ง" - -03020710="กำลังคำนวณ Checksum..." -03020720="ข้อมูล Checksum" -03020721="CRC checksum ของข้อมูล:" -03020722="CRC checksum ของข้อมูลและชื่อ:" - -03020800="กำลังสแกน..." - -03020900="คุณสมบัติ" - -03020A01="ไม่สามารถดำเเนินการได้จากโฟลเดอร์ที่มีที่ตั้งยาว" -03020A02="ท่านต้องเลือกไฟล์" -03020A03="ท่านต้องเลือกไฟล์หนึ่งไฟล์หรือมากว่า" -03020A04="ไฟล์ {0} มีอยู่แล้ว" - -; Computer -03031100="ขนาดทั้งหมด" -03031101="ช่องว่างที่เหลืออยู่" -03031102="ขนาดกลุ่ม" -03031103="ป้าย" - -; Network -03031200="ชื่อเฉพาะ" -03031201="ผู้ให้บริการ" - -; Benchmark Dialog - -03080000="เกณฑ์เปรียบเทียบสมรรถนะ" -03080001="หน่วยความจำที่ใช้:" -03080002="การบีบอัด" -03080003="การยกเลิกบีบอัด" -03080004="ความเร็ว" -03080005="เกณฑ์ความสามารถ" -03080006="เกณฑ์ความสามารถทั้งหมด" -03080007="ปัจจุบัน" -03080008="ผลการประเมิน" -03080009="ข้อความ:" -0308000A="ความผิดพลาด:" -0308000B="การใช้งาน CPU" -0308000C="ประสิทธิภาพ /การใช้งาน" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/tr.txt b/External/7-Zip/Lang/tr.txt deleted file mode 100644 index f7bb62b58..000000000 --- a/External/7-Zip/Lang/tr.txt +++ /dev/null @@ -1,545 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by X-FoRcE 22.09.2009 -; -; X-FoRcE -; Turkiye -; - -00000000="Turkish" -00000001="Türkçe" -00000002="31" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Yapılandırma" - -; Info Page -01000100="7-Zip hakkında" -01000103="7-Zip özgür bir yazılımdır. Ancak, kayıt olarak 7-zip geliştirme faaliyetine destek olabilirsiniz." -01000104="Destek" -01000105="Kayıt ol" - -; Folders Page -01000200="Klasörler" -01000210="Ça&lışma klasörü" -01000211="&Sistem TEMP klasörü" -01000212="&Geçerli klasör" -01000213="&Belirtilen klasör:" -01000214="Sadece çıkarılabilen sürücüler için kullan" - -01000281="Geçici arşiv dosyaları için bir yer belirleyin." - -; System Page -01000300="Sistem" -01000301="İçerik menülerinde 7-Zip görünsün" -01000302="Kademeli içerik menüsü" -01000310="İçerik menü öğeleri:" - -; Language Page -01000400="Dil" -01000401="Dil:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip komutları" -02000103="Arşivi aç" -02000104="Seçili arşivi açar." -02000105="Dosyaları çıkart..." -02000106="Seçili arşivden dosyaları çıkartır." -02000107="Arşivle..." -02000108="Seçili öğeleri arşive ekler." -02000109="Arşivi sına" -0200010A="Seçili arşivin bütünlüğünü test eder." -0200010B="Burada çıkart" -0200010C="Seçili arşivdeki dosyaları geçerli klasöre çıkartır." -0200010D="{0} klasörüne çıkart" -0200010E="Alt klasöre çıkartır." -0200010F="{0} olarak arşivle" -02000110="Seçili öğeleri arşive ekler." -02000111="Sıkıştırıp postala..." -02000112="Seçili öğeleri sıkıştırıp arşivler ve arşivi e-posta ile gönderir." -02000113="{0} olarak sıkıştır ve postala" -02000114="Seçili öğeleri sıkıştırıp arşivler ve arşivi e-posta ile gönderir." - -02000140="" -02000141="" - -; Properties -02000203="Yol" -02000204="Ad" -02000205="Uzantı" -02000206="Klasör" -02000207="Boyut" -02000208="Arşivde boyutu" -02000209="Öznitelikler" -0200020A="Oluşturma" -0200020B="Erişim" -0200020C="Değiştirme" -0200020D="Katı" -0200020E="Açıklanmış" -0200020F="Şifrelenmiş" -02000210="Önceki parça" -02000211="Sonraki parça" -02000212="Sözlük" -02000213="CRC" -02000214="Tür" -02000215="Anti" -02000216="Sıkıştırma şekli" -02000217="İşletim sistemi" -02000218="Dosya Sistemi" -02000219="Kullanıcı" -0200021A="Grup" -0200021B="Blok" -0200021C="Açıklama" -0200021D="Konum" -0200021E="Yol Öneki" -0200021F="Klasörler" -02000220="Dosyalar" -02000221="Sürüm" -02000222="Cilt" -02000223="Çoklu Cilt" -02000224="Konum" -02000225="Bağlantılar" -02000226="Bloklar" -02000227="Ciltler" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="İşlemci" -0200022C="Fiziksel Boyut" -0200022D="Başlık Boyutu" -0200022E="Checksum" -0200022F="Karakteristik" -02000230="Sanal Adres" -02000231="ID" -02000232="Kısa İsim" -02000233="Oluşturan Yazılım" -02000234="Kesim Boyutu" -02000235="Biçim" -02000236="Bağlantı" - -; Status bar -02000301="{0} adet öğe seçili" -02000302="{0} adet öğe" - -02000320="Dosyalar:" -02000321="Klasörler:" -02000322="Boyut:" -02000323="Sıkıştırılmış Boyut:" -02000324="Arşivler:" - -; List Context Menu -02000401="&Sütunlar..." - -02000411="&Aç" -02000412="&Çıkart..." - -; ToolBar -02000501="Çıkart" - -; Messages -02000601="Bu arşiv üzerinde güncelleme yapamazsınız." -02000602="{0} arşivi güncellenemiyor" -02000603="'{0}' klasörü oluşturulamıyor" -02000604="Bu dosya bilinen bir arşiv değil." -02000605="Hata" -02000606="Çok fazla öğe" -02000607="Bu dosya uzantısı ile ilişkili bir uygulama yok" -02000608="Hata yok." -02000609="'{0}' arşiv dosyası olarak açılamıyor." -0200060A="'{0}' dosyası açılamıyor. Şifreniz yanlış olabilir mi?" -0200060B="Sistem gerekli belleği ayarlayamadı" -0200060C="Bilinmeyen hata" -0200060D="Desteklenmeyen arşiv tipi" - -; Dialogs -02000702="Tamam" -02000705="&Evet" -02000707="Tümüne E&vet" -02000709="&Hayır" -0200070B="Tümüne Ha&yır" - -02000710="İptal" -02000711="İ&ptal" -02000713="&Kapat" -02000714="Dur" -02000715="Tekrar başlat" - -02000720="Yardım" - -; Extract dialog -02000800="Çıkart" -02000801="&Çıkartılacak yer:" -02000802="Parola" - -02000810="Yol adları" -02000811="Tam yol adları" -02000812="Geçerli yol adları" -02000813="Yol adları olmasın" - -02000820="Olan dosyalar" -02000821="Üzerine yazmak için sor" -02000822="Sormadan üzerine yaz" -02000823="Çıkartma" -02000824="Arşivdekilere yeni ad ver" -02000825="Olanlara yeni ad ver" - -02000830="Dosyalar" -02000831="&Seçili dosyalar" -02000832="&Tüm dosyalar" - -02000881="Çıkartılacak dosyalar için bir yer belirleyin." - -02000890="çıkartılıyor" - -; Overwrite dialog -02000900="Üzerine Yazma Durumu" -02000901="Hedef klasörde bu adla bir dosya var. Üzerine yazılsın mı?" -02000902="Mevcut dosya:" -02000903="Çıkartılan dosya:" - -02000911="&Yeni ad ver" - -02000982="{0} bayt" -02000983="son değişimi " - -; Messages dialog -02000A00="Tanılayıcı iletiler" - -02000A80="İleti" - -02000A91="'{0}' için sıkıştırma şekli tanınamadı." -02000A92="'{0}' bozuk. (Veri hatası)" -02000A93="'{0}' bozuk. (CRC hatası)" -02000A94="Şifrelenmiş '{0}' dosyası hatalı. Şifreniz yanlış olabilir mi?" -02000A95="'{0}' dosyasında CRC hatası. Şifreniz yanlış olabilir mi?" - -; Password dialog -02000B00="Parola Girişi" -02000B01="Parolayı girin:" -02000B02="Par&ola görünsün" -02000B03="Şifre tekrarı:" -02000B10="Şifreler birbiriyle uyuşmuyor." -02000B11="Şifre için İngilizce harfler, sayılar ve özel karekterden (!, #, $, ...) kullanabilirsiniz." -02000B12="Şifre çok uzun" - -; Progress dialog -02000C00="işle" -02000C01="Geçen süre:" -02000C02="Kalan süre:" -02000C03="Boyut:" -02000C04="Hız:" -02000C05="İşlenen:" -02000C06="Sıkıştırma oranı:" - -02000C10="&Arka planda" -02000C11="Ö&nde" -02000C12="&Duraklat" -02000C13="De&vam et" - -02000C20="Duraklatıldı - " - -02000C30="İptal edilsin mi?" - -; Compress dialog -02000D00="Arşivle" -02000D01="&Arşiv:" -02000D02="&Güncelleme şekli:" -02000D03="Arşiv &biçimi:" -02000D04="Sı&kıştırma şekli:" -02000D05="Ka&tı olsun" -02000D06="&Parametreler:" -02000D07="Seçenekler" -02000D08="Ke&ndi çıkartsın (SFX)" -02000D09="Ç&ok ilmekli" -02000D0A="Dosya adlarını şi&frele" -02000D0B="Sıkıştırma dü&zeyi:" -02000D0C="&Sözlük boyutu:" -02000D0D="Ke&lime boyutu:" -02000D0E="Bellek kullanımı (Sıkıştırma):" -02000D0F="Bellek kullanımı (Çözme):" -02000D10="Şifreleme" -02000D11="Şifreleme metodu:" -02000D12="İşlemci iş parçası sayısı:" -02000D13="Aralıksız blok boyutu:" -02000D14="Aralıklı" -02000D15="Aralıksız" -02000D16="Paylaşılan dosyaları sıkıştır" - -02000D40="Bayt/&cilt olarak parçala:" -02000D41="Yanlış cilt boyutu" -02000D42="Belirtilen cilt boyutu: {0} bayt.\nBu boyutta ciltlere ayırmak istediğinize emin misiniz?" - -02000D81="Sıkıştırmasız" -02000D82="Normal" -02000D83="Maksimum" -02000D84="Hızlı" -02000D85="En hızlı" -02000D86="Ultra" - -02000D90="Gözat" - -02000DA1="Dosyaları ekle, olanları çıkart" -02000DA2="Dosyaları ekle, eskileri güncelle" -02000DA3="Sadece eskileri güncelle" -02000DA4="Dosyaları eşitle" - -02000DB1="Tüm dosyalar" - -02000DC0="sıkıştırılıyor" - -; Columns dialog -02000E00="Sütunlar" -02000E01="Bu klasörde görülebilir olmasını istediğiniz sütunları işaretleyin. Sütunları sıralamak için yukarı-aşağı düğmelerini kullanın." -02000E02="Seçili sütun genişliği" -02000E03="&piksel olsun." - -02000E10="&Yukarı" -02000E11="&Aşağı" -02000E12="&Göster" -02000E13="Gi&zle" -02000E14="Tayin et" - -02000E81="Başlık" -02000E82="Genişlik" - -; Testing -02000F90="Sınanıyor" - - -; File Manager - -03000000="7-Zip Dosya Yöneticisi" - -; Menu -03000102="&Dosya" -03000103="Dü&zenle" -03000104="Gö&rüntüle" -03000105="&Araçlar" -03000106="&Yardım" -03000107="Sı&k Kullanılanlar" - -; File -03000210="&Aç" -03000211="Pa&nelde Aç" -03000212="Pence&rede Aç" -03000220="&Görüntüle" -03000221="Dü&zenle" -03000230="Yeni a&d ver" -03000231="K&opyala" -03000232="&Taşı" -03000233="&Sil" -03000240="Öz&ellikler" -03000241="Açıkla&ma" -03000242="Toplam checksum hesapla" -03000243="Fark" -03000250="Yeni k&lasör" -03000251="Yeni dos&ya" -03000260="Çı&k" -03000270="&Parçala..." -03000271="&Birleştir..." - -; Edit -03000310="&Geri al" -03000311="&Yinele" -03000320="&Kes" -03000321="K&opyala" -03000322="Ya&pıştır" -03000323="&Sil" -03000330="&Tümünü seç" -03000331="Tüm seçimi ka&ldır" -03000332="&Aksini seç" -03000333="Seç..." -03000334="Seçimi kaldır..." -03000335="Bu uzantıyı seç" -03000336="Uzantılı seçimi kaldır" - -; View -03000410="&Büyük Simgeler" -03000411="&Küçük Simgeler" -03000412="&Liste" -03000413="&Detaylar" -03000420="Sırasız" -03000430="Kök Klasörü Aç" -03000431="Bir Seviye Yukarı" -03000432="Klasör Geçmişi..." -03000440="&Yenile" -03000449="Düz Görünüm" -03000450="&2 Panel aç" -03000451="&Araç çubukları" -03000460="Arşiv çubuğu" -03000461="Standart çubuk" -03000462="Büyük düğmeler" -03000463="Düğme metinleri görünsün" - -; Tools -03000510="&Seçenekler..." -03000511="&Performans ölçümü" - -; Help -03000610="İç&indekiler..." -03000620="7-Zip &Hakkında..." - -; Favorites -03000710="Geçerli &klasörü ekle" -03000720="Yer" - -; Options Dialog - -03010000="Seçenekler" - -; Plugins -03010100="Eklentiler" -03010101="&Eklentiler:" -03010110="Ayarlar..." - -; Edit -03010200="Düzenleyici" -03010201="Metin &düzenleyici:" -03010202="&Fark:" - -; System -03010300="Sistem" -03010302="7-Zip ile ilişkilendir:" -03010310="Eklenti" - -; Settings -03010400="Ayarlar" -03010401="\"..\" öğesi görünsün" -03010402="Gerçek dosya simgeleri görünsün" -03010410="Sistem menüsü görünsün" -03010420="&Tüm satır seçilsin" -03010421="Tabl&o çizgileri görünsün" -03010422="Öğeyi açmak için tek tıkla" -03010430="&Alternatif seçim kipi" -03010440="Geniş &bellek sayfaları kullan" - -; Strings - -03020201="Kopyala" -03020202="Taşı" -03020203="Kopyalanacak yer:" -03020204="Taşınacak yer:" -03020205="Kopyalanıyor..." -03020206="Taşınıyor..." -03020207="Öğelerin kopyalanması veya taşınması bu klasör için mümkün değil." -03020208="Bu klasör için istenen işlem desteklenmiyor." -03020209="Hedef klasörü seçiniz." - -03020210="Dosya Silme Onayı" -03020211="Klasör Silme Onayı" -03020212="Birden Fazla Dosya Silme Onayı" -03020213="'{0}' silinsin mi?" -03020214="'{0}' klasörü ve içindekiler silinsin mi?" -03020215="{0} silinsin mi?" -03020216="Siliniyor..." -03020217="Dosya veya Klasör Silme Hatası" -03020218="Dosya yolu uzun olduğundan Geri Dönüşüm Kutusuna taşınamıyor" - -03020220="Dosya Adı Değiştiriliyor..." -03020221="Dosya veya Klasör Adlandırma Hatası" -03020222="Kopyalama Onayı" -03020223="Dosyalar arşive kopyalansın mı" - -03020230="Yeni klasör" -03020231="Klasör adı:" -03020232="Yeni Klasör" -03020233="Klasör Oluşturma Hatası" - -03020240="Yeni dosya" -03020241="Dosya Adı:" -03020242="Yeni Dosya" -03020243="Dosya Oluşturma Hatası" - -03020250="Seç" -03020251="Seçimi kaldır" -03020252="Seçim ifadesi:" - -03020260="Klasör Geçmişi" - -03020280="'{0}' dosyası değişmiş.\nArşivde güncellensin mi?" -03020281="'{0}' dosyası güncellenemedi" -03020282="Metin düzenleyici başlatılamadı." -03020283="açılıyor..." -03020284="Bu dosya virüs gibi görünüyor.(Dosya ismi uzun boşluk içeriyor)." - -03020290="Açıklama" -03020291="&Açıklama:" - -030202A0="Sistem" - -03020300="Bilgisayar" -03020301="Ağ" -03020302="Belgeler" - -03020400="Arşivle" -03020401="Çıkart" -03020402="Sına" - -03020420="Kopyala" -03020421="Taşı" -03020422="Sil" -03020423="Bilgi" - -03020500="Parçala" -03020501="Şu &klasörde parçala:" -03020510="Parçalanıyor..." -03020520="Silmeyi onaylayın" -03020521="Dosyayı {0} parçaya ayırmak istediğinizden emin misiniz?" -03020522="Parça büyüklüğü, orjinal dosya boyutundan küçük olmalıdır" - -03020600="Birleştir" -03020601="Şu &klasörde birleştir:" -03020610="Birleştiriliyor..." -03020620="Sadece ilk parçayı seçiniz" -03020621="Parçalanan dosya tespit edilemedi" -03020622="Parçalanmış dosyanın bir parçadan fazlası bulunamadı" - -03020710="Checksum değeri hesaplanıyor..." -03020720="Checksum bilgisi" -03020721="Verinin CRC değeri:" -03020722="Verinin CRC değeri ve isimler:" - -03020800="Taranıyor..." - -03020900="Özellikler" - -03020A01="The operation cannot be called from a folder that has a long path." -03020A02="Bir dosya seçmelisiniz" -03020A03="Bir veya daha fazla dosya seçmelisiniz" -03020A04="Dosya {0} zaten mevcut" - -; Computer -03031100="Toplam Boyut" -03031101="Boş Alan" -03031102="Küme Boyutu" -03031103="Etiket" - -; Network -03031200="Yerel Ad" -03031201="Sağlayıcı" - -; Benchmark Dialog - -03080000="Bilgisayar performansı" -03080001="Bellek kullanımı:" -03080002="Sıkıştırılıyor" -03080003="Çözülüyor" -03080004="Hız" -03080005="Puan" -03080006="Toplam Puan" -03080007="Mevcut" -03080008="Sonuç" -03080009="Başarılı:" -0308000A="Hatalı:" -0308000B="İşlemci kullanımı" -0308000C="Puan / Kullanım" - -;!@LangEnd@! - - \ No newline at end of file diff --git a/External/7-Zip/Lang/tt.txt b/External/7-Zip/Lang/tt.txt deleted file mode 100644 index ece889437..000000000 --- a/External/7-Zip/Lang/tt.txt +++ /dev/null @@ -1,544 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.16 beta -; Translated by Amychok (Ne laŭdiĝu ke vi scias multajn lingvojn, -; hontu ke vi ne scias patran lingvon) -; -; based on russian translation by Igor Pavlov (7-Zip 9.07) -; - -00000000="Tatar" -00000001="Татарча" -00000002="68" - -; 7-Zip Configuration - -; Title -01000000="7-Zip Конфигурациясы" - -; Info Page -01000100="7-Zip программа турында" -01000103="Программа 7-Zip тараттылыра бушлай" -01000104="Ярдәм" -01000105="Язылу" - -; Folders Page -01000200="Папкалар" -01000210="&Эш папка" -01000211="&Системаның вакытлы папкасы" -01000212="&Агымдагы" -01000213="&Күрсәтергә:" -01000214="Файдаланырга алмаш таратучылар өчен генә" - -01000281="Сайлагыз урыны вакытлы архивларга" - -; System Page -01000300="Система" -01000301="Тыгарга 7-Zip'ны ярының контекст менюга " -01000302="Каскадлы контекст меню" -01000310="Баглам меню гонсырлар:" - -; Language Page -01000400="Тел" -01000401="Тел:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip Командалар" -02000103="Архив ачу" -02000104="Сайлаган архивны ачу." -02000105="Чишү" -02000106="Файлларны чыгару сайлаган архивтан." -02000107="Архивка өстәрге" -02000108="Сайлаган объектларны архивка өстәрге." -02000109="Сынарга" -0200010A="Сынау cайлаган архивны." -0200010B="Чишенергә монда" -0200010C="Файлларны чыгару сайлаган архивтан агымдагы папкага." -0200010D="Чишенергә: {0}' папкага" -0200010E="Файлларны чыгару эчке каталогка." -0200010F="Өстәрге: {0}ка" -02000110="Сайлаган объектларны архивка өстәрге." -02000111="Кысып җибәрергә e-mail аша..." -02000112="Сайлаган объектларны кысып, архив e-mail аша җибәрергә." -02000113="Кысып {0}ка, җибәрергә e-mail аша" -02000114="Сайлаган объектларны кысып, архив e-mail аша җибәрергә." - -02000140="<Папка>" -02000141="<Архив>" - -; Properties -02000203="Юл" -02000204="Исем" -02000205="Киңәеш" -02000206="Папка" -02000207="Зурлык" -02000208="Кысык" -02000209="Үзенчәлекләр" -0200020A="Ясалган" -0200020B="Ачылган" -0200020C="Үзгәртелгән" -0200020D="Бөтен" -0200020E="Аңлатма" -0200020F="Шифрланган" -02000210="Ватылган моңа кадәр" -02000211="Аннан соң ватылган" -02000212="Сүзлек" -02000213="CRC" -02000214="Төр" -02000215="Каршы" -02000216="Ысул" -02000217="Система" -02000218="Файл система" -02000219="Кулланучы" -0200021A="төркем" -0200021B="Блок" -0200021C="Тәфсир" -0200021D="Торыш" -0200021E="Юл" -0200021F="Папка" -02000220="Файл" -02000221="Сүрүм" -02000222="Том" -02000223="Күп томлы" -02000224="Күченү" -02000225="Сылтамалар" -02000226="Блок" -02000227="Том" - -02000229="64-бит" -0200022A="Big-endian" -0200022B="Барыштыручы" -0200022C="Физик Зурлыгы" -0200022D="Сәрләүхәрнең зурлыгы" -0200022E="тикшерү җыелма" -0200022F="Сыйфатламалар" -02000230="Санал Адресы" -02000231="ID" -02000232="Кыска Исеме" -02000233="Ясаучы" -02000234="Бүлемтекнең Зурлыгы" -02000235="Тарыз" -02000236="Сылтама" - -; Status bar -02000301="{0} объект сайлаган" -02000302="{0} объект" - -02000320="Файл:" -02000321="Папка:" -02000322="Зурлыгы:" -02000323="Кысык:" -02000324="Архив:" - -; List Context Menu -02000401="&Баганалар..." - -02000411="&Ачырга" -02000412="&Чыгарырга..." - -; ToolBar -02000501="Чыгарырга" - -; Messages -02000601="Бу архив өчен үзгәртү операцияләр эшләмилер." -02000602="Архив үзгәртеп булмады: {0}" -02000603="Архив ясап булмады: {0}" -02000604="Программа бу архив белән эшләми." -02000605="Ялгыш" -02000606="Гонсырлар артык күп" -02000607="Бәйләнгән программа юк" -02000608="Ялгышлар юк" -02000609="Файл ачып булмады '{0}' архив кебек" -0200060A="Шифрлы архив ацып булмады '{0}'. Пароль туры килмәде?" -0200060B="Буш исе җитми" -0200060C="Билгесез ялгыш" -0200060D="Программа бу архив төрә белән эшләми" - -; Dialogs -02000702="Ярый" -02000705="&Әйе" -02000707="&Барысынга әйе" -02000709="Юк&" -0200070B="Барысынга юк" - -02000710="Юкка чыгару" -02000711="&Юкка чыгару" -02000713="&Ябырга" -02000714="Стоп" -02000715="Яңадан" - -02000720="Ярдәм" - -; Extract dialog -02000800="Чыгарырга" -02000801="Чишенергә монда:" -02000802="Пароль" - -02000810="Юллар" -02000811="&Тулы юллар" -02000812="&Нисби юллар" -02000813="Юлларсыз" - -02000820="Алмаш" -02000821="Раслау белән" -02000822="Раслаусыз" -02000823="Үткәрергә" -02000824="Исем үзгәрү автом." -02000825="Исем. үзгәр. автом." - -02000830="Файллар" -02000831="&Сайлаган файллар" -02000832="&Бөтен файллар" - -02000881="Күрсәтегәз чыгара торган файлларга урынны." - -02000890="Чишү" - -; Overwrite dialog -02000900="Файл алмаштыруга раслау" -02000901="Эшкертү торган файл папкада бар инде." -02000902="Алмаштырырга бар файлны" -02000903="бу файл белән?" - -02000911="Исем үзгәрү автом." - -02000982="{0} байт" -02000983="Үзгәртелгән" - -; Messages dialog -02000A00="Игъланнар" - -02000A80="Игълан" - -02000A91="Бу кысу ысулы файл өчен кулланылмы '{0}'." -02000A92="Ялгыш мәгълүмәтләрдә '{0}'. Файл бозылган." -02000A93="Ялгыш CRC'да '{0}'. Файл бозылган." -02000A94="Ялгыш шифрлы файл мәгълүмәтләрдә '{0}'. Пароль дөресме?" -02000A95="Ялгыш шифрлы файл CRC'да '{0}'. Пароль дөресме?" - -; Password dialog -02000B00="Пароль язу" -02000B01="&Языгыз пароль:" -02000B02="&Күрсәтергә пароль" -02000B03="&Кабатлагыз парольны:" -02000B10="Парольлар тиңсез" -02000B11="Парольга языгыз латин әлифбасын галәмәтләрне гына, саннар һәм махсус галәмәтләрне (!, #, $, ...)" -02000B12="Пароль бик озын" - -; Progress dialog -02000C00="Барыш" -02000C01="Узган:" -02000C02="Калган:" -02000C03="Барлыгы:" -02000C04="Тизлек:" -02000C05="Зурлыгы:" -02000C06="Кысу катылыгы:" - -02000C10="&Җирлектә" -02000C11="&Алга" -02000C12="&Тыныш" -02000C13="&Бару" - -02000C20="Тынышта" - -02000C30="Сезгә чынлап киләме операцияне өзәргә?" - -; Compress dialog -02000D00="Архивка өстәрге" -02000D01="&Архив:" -02000D02="&Үзгәртү тарызы:" -02000D03="Архив форматы:" -02000D04="&Кысу ысулы:" -02000D05="Ясарга &Solid архив" -02000D06="&Параметрлар:" -02000D07="Опцияләр" -02000D08="Ясарга SF&X-архив" -02000D09="Күп агымлык" -02000D0A="&Шифрларга файллар исемнәрне" -02000D0B="&Кысу дәрәҗәсе:" -02000D0C="&Лөгать зурлыгы:" -02000D0D="&Cүз зурлыгы:" -02000D0E="Иснең күләме урау өчен:" -02000D0F="Иснең күләме Чишү өчен:" -02000D10="Шифрлау" -02000D11="Шифрлау ысулы:" -02000D12="Агымнарның исәбе:" -02000D13="Блок зурлыгы:" -02000D14="Файл зурлыгына сайларга" -02000D15="Өзлексез" -02000D16="Кысарга яздыруга ачкан файлларны" - -02000D40="&Ватырга томларга, шундый зурлыгы бөлән, байт:" -02000D41="Ялгыш томлар зурлыкны күрсәтү кырда" -02000D42="Тәгаенле том зурлыгы: {0} байт.\nСезгә чын киләме архив өзергә шундый томларга?" - -02000D81="Кысмаска" -02000D82="Гадәти" -02000D83="Иң зур" -02000D84="Тиз" -02000D85="Бик тиз" -02000D86="Ультра" - -02000D90="Актарырга" - -02000DA1="Өстәрге һәм алмаштырырга" -02000DA2="Яңартырга һәм өстәрге" -02000DA3="Яңартырга" -02000DA4="Синхронлаштыру" - -02000DB1="Бөтен файллар" - -02000DC0="Кысу бара" - -; Columns dialog -02000E00="Баганалар" -02000E01="Тамгалагыз баганаларны, ниндиләрне киряк күрсәтергә бу папкада. Кнопкалар бөлән \"Өске\" һәм \"Аска\" ярый сайларга баганаларның тәртипне." -02000E02="Сайлаган баганалар шундый киңлектә булырга тиешләр" -02000E03="&нокта." - -02000E10="&Өске" -02000E11="&Аска" -02000E12="&Күрсәтергә" -02000E13="&Качырырга" -02000E14="Тәгаенләргә" - -02000E81="Исем" -02000E82="Киңлек" - -; Testing -02000F90="Сынау" - - -; File Manager - -03000000="7-Zip Файл Менеджер" - -; Menu -03000102="&Файл" -03000103="&Төзәтү" -03000104="&Кыяфәт" -03000105="&Кораллар" -03000106="&Белешмә" -03000107="&Сайланма" - -; File -03000210="&Ачырга" -03000211="&Ачырга эчендә" -03000212="&Ачырга тышында" -03000220="&Карау" -03000221="&Редакцияләү" -03000230="Исе&м үзгәрү" -03000231="&Кабатларга монда..." -03000232="&Күчәрергә монда..." -03000233="&Бетерергә" -03000240="&Үзлекләр" -03000241="&Аңлатма" -03000242="Тикшерү җыелма" -03000243="Diff" -03000250="&Ясарга папканы..." -03000251="&Ясарга файлны..." -03000260="&Чыгу" -03000270="&Ватырга файлны..." -03000271="Берләштерергә &файлларны..." - -; Edit -03000310="Юкка &чыгарырга" -03000311="&Кайтарырга" -03000320="&Кисеп алырга" -03000321="&Кабатларга" -03000322="&Куярга" -03000323="&Бетерергә" -03000330="&Сайларга бөтенесене" -03000331="Сайлануны алырга" -03000332="&Сайлануны әйләндерергә" -03000333="Сайларга" -03000334="Сайлануны алырга" -03000335="Сайларга төр буенча" -03000336="Алырга сайлануны төр буенча" - -; View -03000410="&Зур галәмәтләр" -03000411="&Вак галәмәтләр" -03000412="&Исемлек" -03000413="&Җәдвәл" -03000420="Сортлаусыз" -03000430="Ачырга тамыр папканы" -03000431="Бер дәрәҗәгә өскәрәк" -03000432="Элеккеге папкалар..." -03000440="&Яңартырга" -03000449="Яссы тарыз" -03000450="&2 тәрәзә" -03000451="&Кораллар тактасы" -03000460="Архивчының кнопкалар тактасы" -03000461="Кнопкаларның стандарт тактасы" -03000462="Зур кнопкалар" -03000463="Язмалар кнопкаларда" - -; Tools -03000510="&Көйләр..." -03000511="&Җитештерүчәнлекне cыналу" - -; Help -03000610="&Эчтәлек..." -03000620="7-Zip &турында..." - -; Favorites -03000710="&Өстәрге папканы сайланмага, көбәк:" -03000720="Китап битбилге" - -; Options Dialog - -03010000="Көйләр" - -; Plugins -03010100="Плагиннар" -03010101="&Плагиннар:" -03010110="Үзл&екләр..." - -; Edit -03010200="Мөхәрир" -03010201="&Мөхәрир:" -03010202="&Diff:" - -; System -03010300="Система" -03010302="7-Zip бәйләргә:" -03010310="Плагин" - -; Settings -03010400="Көйләр" -03010401="Күрсәтергә гонсырны\"..\"" -03010402="Күрсәтергә чынбарлык файлларның сынчыкларны" -03010410="Күрсәтергә систем меню" -03010420="Күрсәткечне бөтен юлга" -03010421="Күрсәтергә бүлгечләрне" -03010422="Ачырга чиртү белән" -03010430="Альтернатив билге тарызы" -03010440="Файдаланырга иснең зур битләр белән" - -; Strings - -03020201="Кабатларга" -03020202="Күчәрергә" -03020203="Кабатларга монда:" -03020204="Күчәрергә монда:" -03020205="Кабатлану..." -03020206="Күчү..." -03020207="Шундый папкаларга кабатларга объектларны ярамый." -03020208="Бу папка өчен операция кулланылмы." -03020209="Күрсәтегәз папканы." - -03020210="Файл бетерүгә раслау" -03020211="Папка бетерүгә раслау" -03020212="Файллар төркемне бетерүгә раслау" -03020213="Сезгә чын киләме бетерергә \"{0}\"?" -03020214="Сезгә чын киләме бетерергә папканы \"{0}\" һәм өчендәге файлларны?" -03020215="Сезгә чын киләме бетерергә бу объектларны ({0} данә)?" -03020216="Бетерү..." -03020217="Ялгыш файлны/папканы бетерүдә" -03020218="Файллар бетерүне озын юллар белән кәрзингә система кулланылмы" - -03020220="Исем үзгәрү..." -03020221="Ялгыш файлның\папканың исем үзгәрү чакта" -03020222="Файлларны кабатларга раслау" -03020223="Сезгә чын киләме кабатларга бу файлларны архивка" - -03020230="Ясарга папканы" -03020231="Папка исеме:" -03020232="Яңа папка" -03020233="Ялгыш папка ясаганда" - -03020240="Ясарга файл" -03020241="Файл исеме:" -03020242="Яңа файл" -03020243="Ялгыш файл ясаганда" - -03020250="Сайларга" -03020251="Алырга сайлануны" -03020252="Үрнәк:" - -03020260="Элеккеге папкалар" - -03020280="Файл '{0}' үзгәргән иде.\nСезгә килә яңартырга аны архивта?" -03020281="Файл яңартып булмады\n'{0}'" -03020282="Мөхәрирне җибәреп булмады." -03020283="Ачу..." -03020284="Файл вируска охшаган (файл исемендә озын аралар эзлеклелеге бар)." - -03020290="Аңлатма" -03020291="&Аңлатма:" - -030202A0="Система" - -03020300="Санак" -03020301="Челтәр" -03020302="Кәгазләр" - -03020400="Өстәрге" -03020401="Чыгарырга" -03020402="Сынарга" - -03020420="Кабатларга" -03020421="Күчәрергә" -03020422="Бетерергә" -03020423="Хәбәр" - -03020500="Өзергә файлны" -03020501="&Өзергә монда:" -03020510="Өзелү..." -03020520="Өзелүгә раслау" -03020521="Сезгә чын киләме өзергә файл {0} бүләккә?" -03020522="Том зурлыгы чыгыш файлдан азрак булырга тиеш" - -03020600="Берләштерергә файлларны" -03020601="&Берләштерергә монда:" -03020610="Берләштерү..." -03020620="Кирәк сайларга өзелгән файлның беренче бүләкне гына" -03020621="Өзелгән файлны белеп булмады" -03020622="Өзелгән файлның табылган бер бүләк гәне" - -03020710="Хисаплау тикшерү җыелманы..." -03020720="Тикшерү җыелма" -03020721="CRC'ның тикшерү җыелмасы мәгълүматлар өчән:" -03020722="CRC'ның тикшерү җыелмасы мәгълүматлар һәм исемнәр өчән:" - -03020800="Тарау..." - -03020900="Үзлекләр" - -03020A01="Операция башкарылганга булдыралмы папкадан озын юл бөлән." -03020A02="Сез бер файл сайларга тиеш" -03020A03="Сез бер я берничә файл сайларга тиеш" -03020A04="Файл {0} бар инде" - -; Computer -03031100="Сыемлык" -03031101="Буш" -03031102="Күмәк зурлыгы" -03031103="Тамга" - -; Network -03031200="Урындагы исеме" -03031201="Җибәрүче" - -; Benchmark Dialog - -03080000="Җитештерүчәнлекне cыналу" -03080001="Иснең күләме:" -03080002="Урау" -03080003="Чишү" -03080004="Тизлек" -03080005="Шөһрәтлелек" -03080006="Гомуми шөһрәтлелек" -03080007="Агымдагы" -03080008="Нәтиҗәле" -03080009="Узу:" -0308000A="Ялгыш:" -0308000B="Куллану" -0308000C="Шөһрәтлелек / Куллану." - -;!@LangEnd@! - diff --git a/External/7-Zip/Lang/ug.txt b/External/7-Zip/Lang/ug.txt deleted file mode 100644 index e34521abb..000000000 --- a/External/7-Zip/Lang/ug.txt +++ /dev/null @@ -1,536 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.59 -; Translated by Sahran -; -; -; -; - -00000000="Uyghur" -00000001= "ئۇيغۇرچە" -00000002= "128" - -; 7-Zip Configuration - -; Title -01000000= "‏7-Zip تەڭشەك" - -; Info Page -01000100= "‎7-Zip‏ ھەققىدە" -01000103= "‏7-Zip ‏ھەقسىز دېتال. ئەمما تىزىملىتىش ئارقىلىق ئۇنى ئېچىشنى قوللىسىڭىز بولىدۇ." -01000104= "تېخنىكىلىق قوللاش" -01000105= "خەتلەت" - -; Folders Page -01000200= "قىسقۇچ" -01000210= "خىزمەت مۇندەرىجىسى(&W)" -01000211= "(&S)سىستېما ۋاقىتلىق قىسقۇچ" -01000212= "(&C)نۆۋەتتىكى" -01000213= "(&S)بەلگىلەنگەن قىسقۇچ:" -01000214= "يان دىسكىغىلا ئىشلىتىلىدۇ" - -01000281= "پرىس ھۆججىتىنى يېشىدىغان ۋاقىتلىق ئورۇندىن بىرنى بەلگىلەڭ." - -; System Page -01000300= "سىستېما" -01000301= "7-Zip نى ئوڭ كۇنۇپكا تىزىملىكىگە قوش" -01000302= "ئوڭ تىزىملىكنى دەستىلە" -01000310= "ئوڭ تىزىملىكتە كۆرۈنىدىغان تۈرنى تاللاش" - -; Language Page -01000400= "تىل" -01000401= "تىل:" - - -; 7-Zip Explorer extension - -; Context menu -02000101= "7-Zip" -02000102= "7-Zip بۇيرۇقى" -02000103= "پرىس ئاچ" -02000104= "تاللىغان پرىسنى ئاچ" -02000105= "ھۆججەت يەش…" -02000106= "تاللىغان پرىستىن ھۆججەت يەش" -02000107= "پرىسقا قوش" -02000108= "تاللىغان تۈرنى پرىسقا قوش" -02000109= "پرىس سىنا" -0200010A= "تاللىغان پرىسنىڭ مۇكەممەللىكىنى تەكشۈر" -0200010B= "مۇشۇ يەرگە يەش" -0200010C= "تاللىغان پرىستىن ھۆججەتنى نۆۋتتىكى مۇندەرىجىگە يەش" -0200010D= "{0} غا يەش‪‬" -0200010E= "تارماق قىسقۇچقا يەش" -0200010F= "{0}‬ غا قوش ‪" -02000110= "تاللىغان تۈرنى پرىسقا قوش" -02000111= "پرىس ۋە ئېلخەت…" -02000112= "تاللىغان تۈرنى پرىسقا قوشۇپ ئېلخەتتە يوللا." -02000113= "‬ غا پرىسلاپ ئېلخەتتە يوللا" -02000114= "تاللىغان تۈرنى پرىسقا قوشۇپ ئېلخەتتە يوللا" - -02000140= "<قىسقۇچ>" -02000141= "<پرىس>" - -; Properties -02000203= "يول" -02000204= "ئاتى" -02000205= "كېڭەيتىلگەن ئاتى" -02000206= "قىسقۇچ" -02000207= "چوڭلۇقى" -02000208= "بوغچا چوڭلۇقى" -02000209= "خاسلىق" -0200020A= "قۇرغان ۋاقىت" -0200020B= "زىيارەت ۋاقتى" -0200020C= "ئۆزگەرتكەن ۋاقىت" -0200020D= "پۇختا" -0200020E= "ئىزاھات" -0200020F= "شىفىرلانغان" -02000210= "ئاۋال پارچىلا" -02000211= "كېيىن پارچىلا" -02000212= "لۇغەت" -02000213= "CRC" -02000214= "تىپى" -02000215= "قارشى" -02000216= "ئۇسۇل" -02000217= "ئاساسىي مەشغۇلات سىستېمىسى" -02000218= "ھۆججەت سىستېمىسى" -02000219= "ئىشلەتكۈچى" -0200021A= "گۇرۇپپا" -0200021B= "بۆلەك" -0200021C= "ئىزاھات" -0200021D= "ئورۇن" -0200021E= "يول ئالدى قوشۇلغۇچى" -0200021F= "قىسقۇچ" -02000220= "ھۆججەت" -02000221= "نەشرى" -02000222= "ئەن" -02000223= "كۆپ ئەن" -02000224= "ئورۇن ھالقىش" -02000225= "ئۇلانما" -02000226= "بۆلەك" -02000227= "ئەنلەش" - -02000229="64-bit" -0200022A="Big-endian" -0200022B="CPU" -0200022C="فىزىكىلىق چوڭلۇقى" -0200022D="ھۆججەت باشى چوڭلۇقى" -0200022E="يىغىندا تەكشۈر" -0200022F="ئالاھىدىلىك" -02000230="مەۋھۇم ئادرېس" - -; Status bar -02000301= "{0} تۈر تاللاندى" -02000302= "{0} تۈر" - -02000320= "ھۆججەت:" -02000321= "قىسقۇچ:" -02000322= "چوڭلۇقى:" -02000323= "پرىس چوڭلۇقى:" -02000324= "پرىس:" - -; List Context Menu -02000401= "ستۇن(&C)…" - -02000411= "ئاچ(&O)" -02000412= "يەش(&E)…" - -; ToolBar -02000501= "يەش" - -; Messages -02000601= "بۇ پرىس يېڭىلاش مەشغۇلاتىنى قوللىمايدۇ" -02000602= "{0} پرىسنى يېڭىلىيالمايدۇ" -02000603= "“{0}” قىسقۇچ قۇرالمايدۇ" -02000604= "ھۆججەت پرىسنى قوللىمايدۇ" -02000605= "خاتالىق" -02000606= "تۈر بەك كۆپ" -02000607= "بېرىلگەن ھۆججەتنىڭ كېڭەيتىلگەن ئاتى ھېچقانداق قوللىنىشچان پروگراممىغا باغلانمىغان" -02000608= "خاتالىق يوق" -02000609= "'{0}' ھۆججەتنى پرىس سۈپىتىدە ئاچالمايدۇ" -0200060A= "'{0}' شىفىرلانغان پرىسنى ئاچالمايدۇ. ئىم خاتا " -0200060B="سىستېما لازىملىق ئەسلەكنى تەقسىملىيەلمەيدۇ" -0200060C="نامەلۇم خاتالىق" -0200060D="قوللىمايدىغان پرىس تېپى" - -; Dialogs -02000702= "جەزملە" -02000705= "(&Y)ھەئە" -02000707= "ھەممىسى ھەئە(&A)" -02000709= "ياق(&N)" -0200070B= "ھەممىسى ياق(&L)" - -02000710= "ۋاز كەچ" -02000711= "ۋاز كەچ(&C)" -02000713= "ياپ(&C)" -02000714= "توختا" -02000715= "قايتا باشلا" - -02000720= "ياردەم" - -; Extract dialog -02000800= "يەش" -02000801= "يېشىش ئورنى(&X):" -02000802= "ئىم" - -02000810= "يول مودېلى" -02000811= "تولۇق يول ئاتى" -02000812= "نۆۋەتتىكى يول ئاتى" -02000813= "يول ئاتى يوق" - -02000820= "قاپلاش مودېلى" -02000821= "قاپلاشتىن بۇرۇن سورا" -02000822= "ئەسكەرتمەي قاپلا" -02000823= "مەۋجۇد ھۆججەتتىن ئاتلا" -02000824= "ئۆزلۈكىدىن ئاتىنى ئۆزگەرت" -02000825= "مەۋجۇد ھۆججەت ئاتىنى ئۆزگەرت" - -02000830= "ھۆججەتلەر" -02000831= "تاللانغان ھۆججەتلەر(&S)" -02000832= "ھەممە ھۆججەت(&A)" - -02000881= "ھۆججەت يېشىدىغان جايدىن بىرنى كۆرسىتىڭ" - -02000890= "يېشىۋاتىدۇ" - -; Overwrite dialog -02000900= "ھۆججەت ئالماشتۇرۇشنى جەزملە" -02000901= "بۇ قىسقۇچ ئوخشاش ئاتلىق ھۆججەتتىن بىرنى ئۆز ئىچىگە ئالغان" -02000902= "بۇنىڭغا مەۋجۇد ھۆججەتنى " -02000903= " ئالماشتۇرامسىز؟" - -02000911= "ئۆزلۈكىدىن ئات ئۆزگەرت(&U)" - -02000982= "{0} بايت" -02000983= "ئۆزگەرتكەن" - -; Messages dialog -02000A00= "دىئاگنوز ئۇچۇرى" - -02000A80= "ئۇچۇر" - -02000A91= "{0} قوللىمايدىغان پرىسلاش مودېلى" -02000A92= "“{0}” سانلىق مەلۇمات خاتا. ھۆججەت بۇزۇلغان" -02000A93= "“{0}” ئورۇندىكى CRC تەكشۈرۈش مەغلۇپ بولدى، ھۆججەت بۇزۇلغان" -02000A94= "»{0}« شىفىرلانغان ھۆججەت سانلىق مەلۇماتىدا خاتالىق بار، ئىم خاتا." -02000A95= "“{0}” شىفىرلانغان ھۆججەت CRC سانلىق مەلۇمات دەلىللەشتە خاتالىق بار، ئىم خاتا." - -; Password dialog -02000B00= "ئىم كىرگۈزۈڭ" -02000B01= "ئىم كىرگۈزۈڭ:" -02000B02= "ئىم كۆرسەت(&S)" -02000B03= "ئىمنى قايتا كىرگۈزۈڭ " -02000B10= "ئىم ماس كەلمىدى" -02000B11= "(!、#、$...)ئىمغا ئىنگلىزچە ھەرپ، سان ۋە ئالاھىدە ھەرپ-بەلگىلەرلا ئىشلىتىلىدۇ" -02000B12= "ئىم بەك ئۇزۇن" - -; Progress dialog -02000C00= "جەريان" -02000C01= "كەتكەن ۋاقىت:" -02000C02= "قالغان ۋاقىت:" -02000C03= "ئومۇمىي چوڭلۇقى:" -02000C04= "سۈرئىتى:" -02000C05= "بىر تەرەپ قىلىندى:" -02000C06= "پرىس نىسبىتى:" - -02000C10= "ئارقا سۇپا(&B)" -02000C11= "ئالدى سۇپا(&F)" -02000C12= "ۋاقىتلىق توختا(&P)" -02000C13= "داۋاملاشتۇر(&C)" - -02000C20= "ۋاقىتلىق توختىتىلدى" - -02000C30= "راستىنلا ۋاز كېچەمسىز؟" - -; Compress dialog -02000D00= "پرىسقا قوش" -02000D01= "پرىس(&A):" -02000D02= "يېڭىلاش مودېلى(&U):" -02000D03= "پرىسلاش شەكلى(&F):" -02000D04= "پرىسلاش مودېلى(&M):" -02000D05= "مۇقىم پرىس ياسا(&S)" -02000D06= "پارامېتىر(&P):" -02000D07= "تاللانما" -02000D08= "ئۆزى يېشىلىدىغان پرىس ياسا(&X)" -02000D09= "كۆپ ئېقىملىق" -02000D0A= "شىفىرلىق ھۆججەت ئاتى(&N)" -02000D0B= "پرىسلاش دەرىجىسى(&L):" -02000D0C= "لۇغەت چوڭلۇقى(&D):" -02000D0D= "سۆز چوڭلۇقى(&W):" -02000D0E= "پرىسلاشقا كېرەكلىك ئەسلەك:" -02000D0F= "يېشىشكە كېرەكلىك ئەسلەك:" -02000D10= "شىفىرلاش" -02000D11= "شىفىرلاش ئۇسۇلى:" -02000D12= "CPU ئېقىم سانى :" -02000D13= "مۇقىم سانلىق مەلۇمات چوڭلۇقى:" -02000D14= "مۇقىمسىز" -02000D15= "مۇقىم" -02000D16= "ھەمبەھىر ھۆججەت پرىسلا" - -02000D40= "پارچە چوڭلۇقى، بايت(&V):" -02000D41= "پارچە چوڭلۇقى خاتا" -02000D42= "بايت{0} بەلگىلەنگەن پارچە چوڭلۇقى\nنۆۋەتتىكى ھۆججەتنى پارچىلامسىز؟" - -02000D81= "ساقلا" -02000D82= "نورمال" -02000D83= "ئەڭ چوڭ" -02000D84= "تېز" -02000D85= "ئەڭ تېز" -02000D86= "ئەڭ زور چەكتە" - -02000D90= "كۆز يۈگۈرت" - -02000DA1= "ھۆججەت قوش ۋە ئالماشتۇر" -02000DA2= "ھۆججەت يېڭىلا ۋە قوش" -02000DA3= "مەۋجۇد ھۆججەتنى يېڭىلا" -02000DA4= "ھۆججەت قەدەمداشلا" - -02000DB1= "ھەممە ھۆججەت" - -02000DC0= "پرىسلاۋاتىدۇ" - -; Columns dialog -02000E00= "ستون" -02000E01= "بۇ قىسقۇچتا كۆرمەكچى بولغان ستوننى تاللاڭ. يۇقىرىغا ياكى تۆۋەنگە كۇنۇپكىسى بىلەن بۇ ستونلارنىڭ تەرتىپىنى قايتا ئورۇنلاشتۇرالايسىز." -02000E02= "تاللىغان ستون" -02000E03= "تاللىغان ستون كەڭلىكى(&W)(پىكسېل)" - -02000E10= "يۇقىرىغا يۆتكە(&U)" -02000E11= "تۆۋەنگە يۆتكە(&D)" -02000E12= "كۆرسەت(&S)" -02000E13= "يوشۇر(&H)" -02000E14= "تەڭشەك" - -02000E81= "ماۋزۇ" -02000E82= "كەڭلىك" - -; Testing -02000F90= "سىناۋاتىدۇ" - - -; File Manager - -03000000= "7-Zip ھۆججەت باشقۇرغۇچ" - -; Menu -03000102= "ھۆججەت(&F)" -03000103= "تەھرىر(&E)" -03000104= "كۆرۈنۈش(&V)" -03000105= "قورال(&T)" -03000106= "ياردەم(&H)" -03000107= "يىغقۇچ(&A)" - -; File -03000210= "ئاچ(&O)" -03000211= "نۆۋەتتىكى كۆزنەكتە ئاچ(&I)" -03000212= "يېڭى كۆزنەكتە ئاچ(&U)" -03000220= "كۆرۈنۈش(&V)" -03000221= "تەھرىر(&E)" -03000230= "ئات ئۆزگەرت(&M)" -03000231= "كۆچۈرۈش ئورنى(&C)…" -03000232= "يۆتكەش ئورنى(&M)…" -03000233= "ئۆچۈر(&D)" -03000240= "خاسلىق(&R)" -03000241= "ئىزاھات(&N)" -03000242= "ھۆججەت دەلىللە" -03000250= "يېڭى قىسقۇچ" -03000251= "يېڭى ھۆججەت" -03000260= "چېكىن(&X)" -03000270= "ھۆججەت پارچىلا(&S)…" -03000271= "ھۆججەت بىرلەشتۈر(&B)…" - -; Edit -03000310= "يېنىۋال(&U)" -03000311= "قايتىلا(&R)" -03000320= "كەس(&T)" -03000321= "كۆچۈر(&C)" -03000322= "چاپلا(&P)" -03000323= "ئۆچۈر(&D)" -03000330= "ھەممىنى تاللا(&A)" -03000331= "ھەممىنى تاللىما" -03000332= "ئەكسىچە تاللا(&I)" -03000333= "تاللا…" -03000334= "ئەكسىچە تاللا…" -03000335= "ئوخشاش تۈردىكى ھۆججەتنى تاللا" -03000336= "ئوخشاش تۈردىكى ھۆججەتنى ئەكسىچە تاللا" - -; View -03000410= "چوڭ سىنبەلگە(&G)" -03000411= "كىچىك سىنبەلگە(&M)" -03000412= "تىزىملىك(&L)" -03000413= "تەپسىلىي(&D)" -03000420= "تەرتىپلەنمىگەن" -03000430= "غول قىسقۇچنى ئاچ" -03000431= "يۇقىرىغا" -03000432= "قىسقۇچ تارىخى…" -03000440= "يېڭىلا(&R)" -03000449= "تەكشىلىك كۆرۈنۈش" -03000450= "&2 يۈز" -03000451= "قورال ستونى(&T)" -03000460= "پرىس قورال ستونى" -03000461= "ئۆلچەملىك قورال ستونى" -03000462= "چوڭ كۇنۇپكا" -03000463= "كۇنۇپكا خېتىنى كۆرسەت" - -; Tools -03000510= "تاللانما(&O)…" -03000511= "ئۆلچەملىك سىناش(&B)" - -; Help -03000610= "مۇندەرىجە(&C)…" -03000620= " 7-Zip (&A)ھەققىدە " - -; Favorites -03000710= "يىغقۇچقا قوش(&A)" -03000720= "خەتكۈچ" - -; Options Dialog - -03010000= "تاللانما" - -; Plugins -03010100= "قىستۇرما دېتال" -03010101= "قىستۇرما دېتال(&P):" -03010110= "تاللانما…" - -; Edit -03010200= "تەھرىرلىگۈچ" -03010201= "تەھرىرلىگۈچ(&E):" - -; System -03010300= "سىستېما" -03010302= "7-Zip بىلەن باغلانغان ھۆججەت تىپى:" -03010310= "قىستۇرما دېتال" - -; Settings -03010400= "تەڭشەك" -03010401= "كۆرسەت“..”تۈر" -03010402= "ھەقىقىي ھۆججەت سىنبەلگىسى كۆرسەت" -03010410= "سىستېما تىزىملىكىنى كۆرسەت" -03010420= "پۈتۈن قۇر تاللا(&F)" -03010421= "سېتكا كۆرسەت(&G)" -03010430= "شەيئى تاللاش مودىلى(&A)" -03010440= "چوڭ ئەسلەك بېتى ئىشلەت(&L)" - -; Strings - -03020201= "كۆچۈر" -03020202= "يۆتكە" -03020203= "كۆچۈرۈش ئورنى:" -03020204= "يۆتكەش ئورنى:" -03020205= "كۆچۈرۈۋاتىدۇ…" -03020206= "يۆتكەۋاتىدۇ…" -03020207= "سىز ھۆججەت(قىسقۇچ)نى بۇنداق يۆتكەپ ياكى كۆچۈرەلمەيسىز" -03020208= "نۆۋەتتىكى مەشغۇلاتنى قوللىمايدۇ" -03020209= "نىشان قىسقۇچ تاللاڭ" - -03020210= "ھۆججەت ئۆچۈرۈشنى جەزملە" -03020211= "قىسقۇچ ئۆچۈرۈشنى جەزملە" -03020212= "كۆپ ھۆججەت ئۆچۈرۈشنى جەزملە" -03020213= "“{0}” راستىنلا ئۆچۈرەمسىز؟" -03020214= "“{0}” قىسقۇچ ۋە مەزمۇننى راستىنلا ئۆچۈرەمسىز؟" -03020215= "{0} تۈرنى راستىنلا ئۆچۈرەمسىز؟ " -03020216= "ئۆچۈرۈۋاتىدۇ…" -03020217= "قىسقۇچ ياكى ھۆججەت ئۆچۈرۈش خاتالىقى" -03020218="سىستېما يولى ئۇزۇن بولغان ھۆججەتنى ئەخلەتخاناغا يۆتكىيەلمەيدۇ" - -03020220= "ئاتىنى ئۆزگەرتىۋاتىدۇ…" -03020221= "ھۆججەت ياكى قىسقۇچ ئاتىنى ئۆزگەرتىش خاتالىقى" -03020222= "ھۆججەت كۆچۈرۈشنى جەزملە" -03020223= "ھۆججەتنى پرىسقا راستىنلا كۆچۈرەمسىز؟" - -03020230= " قىسقۇچ قۇر" -03020231= "قىسقۇچ ئاتى" -03020232= "يېڭى قىسقۇچ" -03020233= "قىسقۇچ قۇرۇش خاتالىقى" - -03020240= "ھۆججەت قۇر" -03020241= "ھۆججەت ئاتى" -03020242= "يېڭى ھۆججەت" -03020243= "ھۆججەت قۇرۇش خاتالىقى" - -03020250= "تاللاش" -03020251= "ئەكسىچە تاللا" -03020252= "ماسكا:" - -03020260= "قىسقۇچ تارىخى" - -03020280= "“{0}”ئۆزگەرتىلدى\nپرىس ھۆججىتىدە يېڭىلامسىز؟" -03020281= "“{0}”ھۆججەتنى يېڭىلىيالمىدى\n" -03020282= "تەھرىرلىگۈچنى قوزغىتالمىدى" -03020283= "ئېچىۋاتىدۇ…" -03020284="بۇ ھۆججەت ۋىرۇستەك تۇرىدۇ (ھۆججەت ئاتىدا كۆپ بوشلۇق بار)" - -03020290= "ئىزاھات" -03020291= "ئىزاھات(&C)" - -030202A0= "سىستېما" - -03020300= "كومپيۇتېر" -03020301= "تور قوشنا" -03020302="پۈتۈكلەر" - -03020400= "قوش" -03020401= "يەش" -03020402= "سىنا" - -03020420= "كۆچۈر" -03020421= "يۆتكە" -03020422= "ئۆچۈر" -03020423= "ئۇچۇر" - -03020500= "ھۆججەت پارچىلا" -03020501= "پارچىلاش سانى(&S):" -03020510= "پارچىلاۋاتىدۇ…" -03020520= "پارچىلاشنى جەزملە" -03020521= "ھۆججەتنى {0} پارچىغا بۆلەمسىز؟ " -03020522= "پارچە چوڭلۇقى چوقۇم ئەسلى ھۆججەتتىن كىچىك بولۇشى لازىم" - -03020600= "ھۆججەت بىرلەشتۈر" -03020601= "بىرلەشتۈرۈش(&C):" -03020610= "بىرلەشتۈرۈۋاتىدۇ…" -03020620= "بىرىنچى ھۆججەتنىلا تاللا" -03020621="بۆلەكلەنگەن ھۆججەت پارچىسى ئىكەنلىكىنى بايقىيالمىدى" -03020622="باشقا ھۆججەت پارچىسىنى بايقىيالمىدى" - -03020710= "تەكشۈرۈۋاتىدۇ…" -03020720= "تەكشۈرۈش ئۇچۇرى" -03020721= "CRC سانلىق مەلۇمات تەكشۈرۈش:" -03020722= "CRC سانلىق مەلۇمات ۋە ھۆججەت ئاتى تەكشۈرۈش:" - -03020800= "ئىزدەۋاتىدۇ…" - -03020900= "خاسلىق" - -03020A01="يولى ئۇزۇن قىسقۇچقا بۇ مەشغۇلاتنى ئېلىپ بارالمايدۇ." -03020A02="چوقۇم ھۆججەتتىن بىرنى تاللاڭ" -03020A03="چوقۇم بىر ياكى بىر قانچە ھۆججەت تاللاڭ" -03020A04=" {0} ھۆججەت مەۋجۇد" - -; Computer -03031100= "ئومۇمى سىغىمى" -03031101= "ئىشلىتىلىشچان بوشلۇق" -03031102= "توپلاشتۇرغۇچ چوڭلۇقى" -03031103= "ئەن" - -; Network -03031200= "يەرلىك ئاتى" -03031201= "تەمىنلىگۈچى" - -; Benchmark Dialog - -03080000= "ئاساسىي تەكشۈرۈش" -03080001= "ئىشلىتىلگەن ئەسلەك:" -03080002= "پرىسلاۋاتىدۇ" -03080003= "يېشىۋاتىدۇ" -03080004= "سۈرئەت" -03080005= "سۈرئىتى" -03080006= "ئوتتۇرىچە سۈرئىتى" -03080007= "نۆۋەتتە" -03080008= "نەتىجە" -03080009= "يوللاش:" -0308000A= "خاتالىق:" -0308000B= "CPU ئىشلىتىلىشى" -0308000C= "ئىشلىتىش سۈرئىتى" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/uk.txt b/External/7-Zip/Lang/uk.txt deleted file mode 100644 index 1370c5df4..000000000 --- a/External/7-Zip/Lang/uk.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.17 beta -; Translated by Misha Padalka -; Corrected by Yurii Petrashko (YuriPet) -; -; -; - -00000000="Ukrainian" -00000001="Українська" -00000002="34" - -; 7-Zip Configuration - -; Title -01000000="Налаштування 7-Zip" - -; Info Page -01000100="Про 7-Zip" -01000103="7-Zip є вільним програмним забезпеченням" -01000104="Підтримка" -01000105="Зареєструвати" - -; Folders Page -01000200="Папки" -01000210="&Робоча папка" -01000211="&Системна тимчасова папка" -01000212="&Поточна" -01000213="&Задати:" -01000214="Використовувати тільки для змінних носіїв" - -01000281="Вкажіть розташування тимчасових архівних файлів." - -; System Page -01000300="Система" -01000301="Інтегрувати 7-Zip до контекстного меню оболонки" -01000302="Каскадне контекстне меню" -01000310="Пункти контекстного меню:" - -; Language Page -01000400="Мова" -01000401="Мова:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Команди 7-Zip" -02000103="Відкрити архів" -02000104="Відкриття вибраного архіву." -02000105="Видобути файли..." -02000106="Видобування файлів з вибраного архіву." -02000107="Додати до архіву..." -02000108="Додавання вибраних елементів до архіву." -02000109="Перевірити архів" -0200010A="Перевірка цілісності вибраного архіву." -0200010B="Видобути тут" -0200010C="Видобування файлів з вибраного архіву до поточної папки." -0200010D="Видобути до {0}" -0200010E="Видобування файлів до папки." -0200010F="Додати до {0}" -02000110="Додавання вибраних елементів до архіву." -02000111="Стиснути та надіслати..." -02000112="Стискання вибраних елементів та надсилання архіву електронною поштою." -02000113="Стиснути до {0} та надіслати" -02000114="Стискання вибраних елементів та надсилання архіву електронною поштою." - -02000140="<Папка>" -02000141="<Архів>" - -; Properties -02000203="Шлях" -02000204="Ім'я" -02000205="Розширення" -02000206="Папка" -02000207="Розмір" -02000208="Розмір в архіві" -02000209="Атрибути" -0200020A="Створений" -0200020B="Відкритий" -0200020C="Змінений" -0200020D="Неперервний" -0200020E="З коментарем" -0200020F="Зашифрований" -02000210="Розбитий до" -02000211="Розбитий після" -02000212="Словник" -02000213="CRC" -02000214="Тип" -02000215="Анти" -02000216="Метод" -02000217="Операційна система" -02000218="Файлова система" -02000219="Користувач" -0200021A="Група" -0200021B="Блок" -0200021C="Коментар" -0200021D="Позиція" -0200021E="Префікс шляху" -0200021F="Папок" -02000220="Файлів" -02000221="Версія" -02000222="Том" -02000223="Багатотомний" -02000224="Зміщення" -02000225="Посилань" -02000226="Блоків" -02000227="Частин" - -02000229="64-біт" -0200022A="Big-endian" -0200022B="Процесор" -0200022C="Фізичний розмір" -0200022D="Розмір заголовків" -0200022E="Контрольна сума" -0200022F="Властивості" -02000230="Віртуальна адреса" -02000231="ID" -02000232="Коротке ім'я" -02000233="Створений програмою" -02000234="Розмір сектора" -02000235="Режим" -02000236="Посилання" - -; Status bar -02000301="{0} об'єкт(ів) вибрано" -02000302="{0} об'єкт(ів)" - -02000320="Файлів:" -02000321="Папок:" -02000322="Розмір:" -02000323="Розмір після стиснення:" -02000324="Архівів:" - -; List Context Menu -02000401="&Стовпці..." - -02000411="&Відкрити" -02000412="&Видобути..." - -; ToolBar -02000501="Видобути" - -; Messages -02000601="Операція оновлення не підтримується для даного архіву." -02000602="Не вдається оновити архів {0}" -02000603="Не вдається створити папку '{0}'" -02000604="Файл не є підтримуваним архівом." -02000605="Помилка" -02000606="Забагато елементів" -02000607="Немає програми, пов'язаної з даним розширенням" -02000608="Без помилок" -02000609="Не вдається відкрити файл '{0}' як архів" -0200060A="Не вдається відкрити зашифрований архів '{0}'. Хибний пароль?" -0200060B="Система не може виділити необхідний обсяг пам'яті" -0200060C="Невідома помилка" -0200060D="Непідтримуватий тип архіву" - -; Dialogs -02000702="OK" -02000705="&Так" -02000707="Так для &всіх" -02000709="&Ні" -0200070B="Ні для вс&іх" - -02000710="Скасувати" -02000711="&Скасувати" -02000713="&Закрити" -02000714="Зупинити" -02000715="Перезапустити" - -02000720="Довідка" - -; Extract dialog -02000800="Видобути" -02000801="В&идобути до:" -02000802="Пароль" - -02000810="Обробка шляхів" -02000811="Повні шляхи" -02000812="Відносні шляхи" -02000813="Без шляхів" - -02000820="Режим перезапису" -02000821="Запитувати перед перезаписом" -02000822="Перезаписувати без запиту" -02000823="Пропускати існуючі файли" -02000824="Автоматично перейменовувати" -02000825="Автоматично перейменовувати існуючі файли" - -02000830="Файли" -02000831="&Вибрані файли" -02000832="&Усі файли" - -02000881="Вкажіть розташування для видобуваних файлів." - -02000890="Видобування" - -; Overwrite dialog -02000900="Підтвердіть заміну файлу" -02000901="Папка призначення вже містить оброблюваний файл." -02000902="Ви бажаєте замінити існуючий файл" -02000903="цим?" - -02000911="&Автоматично перейменовувати" - -02000982="{0} байт" -02000983="змінений" - -; Messages dialog -02000A00="Діагностичні повідомлення" - -02000A80="Повідомлення" - -02000A91="Непідтривуваний метод стиску для '{0}'." -02000A92="Помилка даних у '{0}'. Файл пошкоджений." -02000A93="Помилка CRC у '{0}'. Файл пошкоджений." -02000A94="Помилка даних у зашифрованому файлі '{0}'. Хибний пароль?" -02000A95="Помилка CRC у зашифрованому файлі '{0}'. Хибний пароль?" - -; Password dialog -02000B00="Уведіть пароль" -02000B01="Уведіть пароль:" -02000B02="&Відображати пароль" -02000B03="Повторіть пароль:" -02000B10="Паролі не співпадають" -02000B11="Для паролю використовуйте лише англійські літери, цифри та спеціальні символи (!, #, $, ...)" -02000B12="Пароль занадто довгий" - -; Progress dialog -02000C00="Процес" -02000C01="Минуло часу:" -02000C02="Залишилося:" -02000C03="Загалом:" -02000C04="Швидкість:" -02000C05="Оброблено:" -02000C06="Ступінь стиснення:" - -02000C10="&На задньому плані" -02000C11="&На передньому плані" -02000C12="&Пауза" -02000C13="&Продовжити" - -02000C20="Призупинено" - -02000C30="Ви впевнені, що бажаєте скасувати?" - -; Compress dialog -02000D00="Додати до архіву" -02000D01="&Архів:" -02000D02="&Режим оновлення:" -02000D03="&Формат архіву:" -02000D04="&Метод стискання:" -02000D05="Створити &неперервний архів" -02000D06="&Параметри:" -02000D07="Налаштування" -02000D08="&Створити SFX архів" -02000D09="Багатопоточність" -02000D0A="Шифрувати &імена файлів" -02000D0B="С&тупінь стиснення:" -02000D0C="&Розмір словника:" -02000D0D="Р&озмір слова:" -02000D0E="Необхідно пам'яті для стискання:" -02000D0F="Необхідно пам'яті для видобування:" -02000D10="Шифрування" -02000D11="Метод шифрування:" -02000D12="Кількість потоків:" -02000D13="Розмір блоку:" -02000D14="За розміром файлу" -02000D15="Неперервний" -02000D16="Стискати спільні файли" - -02000D40="Розбити на &томи, байт:" -02000D41="Неправильний розмір тому" -02000D42="Заданий розмір тому: {0} байт.\nВи впевнені, що бажаєте розбити архів на такі томи?" - -02000D81="Без стиснення" -02000D82="Нормальне" -02000D83="Максимальне" -02000D84="Швидке" -02000D85="Найшвидше" -02000D86="Ультра" - -02000D90="Переглянути" - -02000DA1="Додати та замінити файли" -02000DA2="Оновити та замінити файли" -02000DA3="Оновити існуючі файли" -02000DA4="Синхронізувати файли" - -02000DB1="Усі файли" - -02000DC0="Стиснення" - -; Columns dialog -02000E00="Стовпці" -02000E01="Позначте стовпці, які ви хотіли б зробити видимими в цій папці. Використовуйте кнопки \"Догори\" та \"Донизу\" для зміни порядку стовпців." -02000E02="Вибраний стовпець має бути &шириною" -02000E03="пікселів." - -02000E10="Змістити до&гори" -02000E11="Змістити до&низу" -02000E12="&Відобразити" -02000E13="&Приховати" -02000E14="Встановити" - -02000E81="Заголовок" -02000E82="Ширина" - -; Testing -02000F90="Тестування" - - -; File Manager - -03000000="Менеджер файлів 7-Zip" - -; Menu -03000102="&Файл" -03000103="&Редагування" -03000104="&Вигляд" -03000105="&Інструменти" -03000106="&Допомога" -03000107="&Уподобання" - -; File -03000210="&Відкрити" -03000211="Відкрити в&середині" -03000212="Відкрити &зовні" -03000220="&Переглянути" -03000221="&Редагувати" -03000230="Пере&йменувати" -03000231="&Копіювати до..." -03000232="Пере&містити до..." -03000233="Ви&далити" -03000240="В&ластивості" -03000241="Комент&ар" -03000242="Обчислити контрольну суму" -03000243="Порівнювач" -03000250="Створити папку" -03000251="Створити файл" -03000260="Ви&хід" -03000270="Роз&бити файл..." -03000271="Об'&єднати файли..." - -; Edit -03000310="&Скасувати" -03000311="&Повернути" -03000320="Ви&різати" -03000321="&Копіювати" -03000322="&Вставити" -03000323="Ви&далити" -03000330="Ви&брати всі" -03000331="Зняти вибір" -03000332="&Інвертувати вибір" -03000333="Вибрати..." -03000334="Зняти вибір..." -03000335="Вибрати за типом" -03000336="Зняти вибір за типом" - -; View -03000410="Вели&кі значки" -03000411="&Маленькі значки" -03000412="&Список" -03000413="&Таблиця" -03000420="Без сортування" -03000430="Відкрити кореневу папку" -03000431="Вище на один рівень" -03000432="Історія папок..." -03000440="&Оновити" -03000449="Плоский вигляд" -03000450="&2 панелі" -03000451="&Панелі інструментів" -03000460="Панель архіву" -03000461="Стандартна панель" -03000462="Великі кнопки" -03000463="Текст на кнопках" - -; Tools -03000510="&Налаштування..." -03000511="&Тестування продуктивності" - -; Help -03000610="&Зміст..." -03000620="&Про 7-Zip..." - -; Favorites -03000710="&Додати папку до уподобань як" -03000720="Закладка" - -; Options Dialog - -03010000="Опції" - -; Plugins -03010100="Модулі" -03010101="&Модулі:" -03010110="Параметри..." - -; Edit -03010200="Редагування" -03010201="&Редактор:" -03010202="&Порівнювач:" - -; System -03010300="Система" -03010302="Асоціювати 7-Zip з:" -03010310="Плаґін" - -; Settings -03010400="Налаштування" -03010401="Відображати елемент \"..\"" -03010402="Відображати справжні піктограми файлів" -03010410="Відображати системне меню" -03010420="Вибір &цілого рядка" -03010421="Відображати &сітку" -03010422="Відкривати об'єкти одним кліком" -03010430="&Альтернативний режим виділення" -03010440="Використовувати &великі сторінки пам'яті" - -; Strings - -03020201="Копіювати" -03020202="Перемістити" -03020203="Копіювати до:" -03020204="Перемістити до:" -03020205="Копіювання..." -03020206="Переміщення..." -03020207="Ви не можете переміщувати чи копіювати елементи для таких папок." -03020208="Операція не підтримується для цієї папки." -03020209="Виберіть папку призначення." - -03020210="Підтвердіть видалення файлу" -03020211="Підтвердіть видалення папки" -03020212="Підтвердіть видалення декількох файлів" -03020213="Ви впевнені, що хочете видалити '{0}'?" -03020214="Ви впевнені, що хочете видалити папку '{0}' і весь її вміст?" -03020215="Ви впевнені, що хочете видалити ці {0} елементів?" -03020216="Видалення..." -03020217="Помилка при видаленні файлу або папки" -03020218="Система не може перемістити файл із довгим шляхом до Кошика" - -03020220="Перейменування..." -03020221="Помилка перейменування файлу або папки" -03020222="Підтвердіть копіювання файлу" -03020223="Ви впевнені, що хочете скопіювати файли до архіву" - -03020230="Створити папку" -03020231="Ім'я папки:" -03020232="Нова папка" -03020233="Помилка при створенні папки" - -03020240="Створити файл" -03020241="Ім'я файлу:" -03020242="Новий файл" -03020243="Помилка при створенні файлу" - -03020250="Вибрати" -03020251="Зняти вибір" -03020252="Маска:" - -03020260="Історія папок" - -03020280="Файл '{0}' був змінений.\nВи бажаєте оновити його в архіві?" -03020281="Неможливо оновити файл\n'{0}'" -03020282="Не вдається запустити редактор." -03020283="Відкриття..." -03020284="Файл виглядає як вірус (ім'я файлу містить довгу послідовність пробілів)." - -03020290="Коментар" -03020291="&Коментар:" - -030202A0="Система" - -03020300="Комп'ютер" -03020301="Мережа" -03020302="Документи" - -03020400="Додати" -03020401="Видобути" -03020402="Тестувати" - -03020420="Копіювати" -03020421="Перемістити" -03020422="Видалити" -03020423="Інформація" - -03020500="Розбити файл" -03020501="&Розбити до:" -03020510="Розбиття..." -03020520="Підтвердіть розбиття" -03020521="Ви впевнені, що бажаєте розбити архів на {0} томів?" -03020522="Розмір тому має бути меншим за розмір вихідного файлу" - -03020600="Об'єднати файли" -03020601="&Об'єднати до:" -03020610="Об'єднання..." -03020620="Виберіть тільки першу частину розбитого файлу" -03020621="Не вдалося визначити файл, як частину розбитог файлу" -03020622="Не вдалося знайти більше однієї частини розбитого файлу" - -03020710="Обчислення контрольної суми..." -03020720="Інформація про контрольну суму" -03020721="Контрольна сума CRC для даних:" -03020722="Контрольна сума CRC для даних та імен:" - -03020800="Сканування..." - -03020900="Властивості" - -03020A01="Операція не може бути викликана з папки, яка має довгий шлях." -03020A02="Ви повинні вибрати один файл" -03020A03="Ви повинні вибрати один або декілька файлів" -03020A04="Файл {0} вже існує" - -; Computer -03031100="Загальний обсяг" -03031101="Вільний простір" -03031102="Розмір кластеру" -03031103="Мітка" - -; Network -03031200="Локальне ім'я" -03031201="Провайдер" - -; Benchmark Dialog - -03080000="Тестування продуктивності" -03080001="Використано пам'яті:" -03080002="Стискання" -03080003="Видобування" -03080004="Швидкість" -03080005="Рейтинг" -03080006="Загальний рейтинг" -03080007="Поточні знач." -03080008="Підсумкові знач." -03080009="Проходів:" -0308000A="Помилок:" -0308000B="Завант. ЦП" -0308000C="Рейт./Завант." - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/uz.txt b/External/7-Zip/Lang/uz.txt deleted file mode 100644 index e2e002466..000000000 --- a/External/7-Zip/Lang/uz.txt +++ /dev/null @@ -1,459 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.30 -; Translated by Sherzod Mamatkulov -; -; -; -; - -00000000="Uzbek" -00000001="O'zbek" -00000002="67" - -; 7-Zip Configuration - -; Title -01000000="7-Zip tanlovlari" - -; Info Page -01000100="7-Zip haqida" -01000103="7-Zip bepul dasturiy ta'minot. Binobarin, siz uni qayd qildirish orqali qo'llab-quvvatlashingiz mumkin." -01000104="Yordam" -01000105="Qayd qilish" - -; Folders Page -01000200="Papkalar" -01000210="&Ish papkasi" -01000211="Tizim &vaqtinchalik papkasi" -01000212="&Joriy papka" -01000213="&Tayinlangan:" -01000214="Faqat olinadigan drayvlar uchun ishlat" - -01000281="Vaqtinchalik arxiv fayllari uchun manzilni tayinlang." - -; System Page -01000300="Tizim" -01000301="7-Zipni qobiq kontekst menyusiga qo'sh" -01000302="Kontekst menyusi pog'onali" -01000310="Kontekst menyu bandlari:" - -; Language Page -01000400="Til" -01000401="Til:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip buyruqlari" -02000103="Arxivni och" -02000104="Tanlangan arxivni ochadi." -02000105="Fayllarni ajrat..." -02000106="Tanlangan arxivdan fayllarni ajratadi." -02000107="Arxivga qo'sh..." -02000108="Tanlangan qismlarni arxivga qo'shadi." -02000109="Arxivni sina" -0200010A="Tanlangan arxivning butunligini tekshiradi." -0200010B="Shu joyga ajrat" -0200010C="Tanlangan arxivdagi fayllarni joriy papkaga ajratadi." -0200010D="{0}ga ajrat" -0200010E="Fayllarni nimpapkaga ajratadi." -0200010F="{0}ga qo'sh" -02000110="Tanlangan qismlarni arxivga qo'shadi." -02000111="Siq va emailda jo'nat..." -02000112="Tanlangan qismlarni arxivga siqib, email orqali jo'natadi." -02000113="{0}ga siq va emailda jo'nat" -02000114="Tanlangan qismlarni arxivga siqib, email orqali jo'natadi." - -02000140="" -02000141="" - -; Properties -02000203="Yo'lak" -02000204="Nomi" -02000205="Kengaytma" -02000206="Papka" -02000207="Hajmi" -02000208="Siqilgan hajmi" -02000209="Atributlari" -0200020A="Yaratilgan" -0200020B="Ochilgan" -0200020C="O'zgartirilgan" -0200020D="Yaxlit" -0200020E="Sharhlangan" -0200020F="Tilsimlangan" -02000210="Bundan oldin bo'laklangan" -02000211="Bundan keyin bo'laklangan" -02000212="Lug'at" -02000213="CRC" -02000214="Turi" -02000215="Anti" -02000216="Uslub" -02000217="Mezbon OS" -02000218="Fayl tizimi" -02000219="Foydalanuvchi" -0200021A="Guruh" -0200021B="Block" -0200021C="Sharh" -0200021D="Joylashuv" - -; Status bar -02000301="{0} ta qism tanlangan" -02000302="{0} ta qism" - -; List Context Menu -02000401="&Ustunlar..." - -02000411="&Ochish" -02000412="&Ajrat..." - -; ToolBar -02000501="Ajrat" - -; Messages -02000601="Bu arxivga nisbatan yangilash amallari bajarilmaydi." -02000602="{0} arxivini yagilay olmadim" -02000603="'{0}' papkasini yarata olmadim" -02000604="Ushbu fayl tushunarli arxiv emas." -02000605="Xato" -02000606="Qismlar o'ta ko'p" -02000607="Berilgan fayl nomi kengaytmasi bilan hechqanday dastur biriktirilmagan" -02000608="Hechqanday xato yo'q" - -; Dialogs -02000702="OK" -02000705="&Ha" -02000707="H&ammasiga ha" -02000709="&Yo'q" -0200070B="Hammasiga y&o'q" - -02000710="Bekor" -02000711="&Bekor" -02000713="&Yopish" -02000714="To'xta" -02000715="Qayta boshla" - -02000720="Yordam" - -; Extract dialog -02000800="Ajratish" -02000801="&Buyerga ajrat:" -02000802="Parol" - -02000810="Yo'lak uslubi" -02000811="To'liq yo'lak nomlari" -02000812="Joriy yo'lak nomlari" -02000813="Yo'lak nomi yo'q" - -02000820="Ustidan yozish uslubi" -02000821="Yozib yuborishdan oldin so'ra" -02000822="So'ramasdan yozib yubor" -02000823="Oldindan mavjud fayllarni tashlab ket" -02000824="Avtomatik tarzda qayta nomla" -02000825="Mavjud fayllarni avto qayta nomla" - -02000830="Fayllar" -02000831="&Tanlangan fayllar" -02000832="&Barcha fayllar" - -02000881="Ajratilgan fayllar uchun manzil tayinlang." - -02000890="Ajratilmoqda" - -; Overwrite dialog -02000900="Fayl ustidan yozishni tasdiqlash" -02000901="Manziliy papkada ishlangan fayl oldindan mavjud." -02000902="Mavjud faylni" -02000903="bunisi bilan almashtirasizmi?" - -02000911="A&vtomatik tarzda qayta nomla" - -02000982="{0} bayt" -02000983="o'zgargan sanasi" - -; Messages dialog -02000A00="Diagnostik xabarlar" - -02000A80="Xabar" - -02000A91="'{0}'dagi siquv metodi notanish." -02000A92="'{0}'da data xatosi yuz berdi. Fayl zararlangan." -02000A93="'{0}'da CRC amalga oshmadi. Fayl zararlangan." - -; Password dialog -02000B00="Parolni kiritish" -02000B01="Parolni kiriting:" -02000B02="&Parolni ko'rsat" - -; Progress dialog -02000C00="Jarayon" -02000C01="O'tgan vaqt:" -02000C02="Qolgan vaqt:" -02000C03="Hajm:" -02000C04="Tezlik:" - -02000C10="&Orqa fon" -02000C11="Ol&di fon" -02000C12="&Pauza" -02000C13="&Davom et" - -02000C20="Pauza qilingan" - -02000C30="Rostdan ham bekor qilishni istaysizmi?" - -; Compress dialog -02000D00="Arxivga qo'shish" -02000D01="&Arxiv:" -02000D02="&Yangilash uslubi:" -02000D03="Arxiv &formati:" -02000D04="&Siquv metodi:" -02000D05="&Yaxlit arxiv yarat" -02000D06="&Parametrlar:" -02000D07="Tanlovlar" -02000D08="SF&X arxiv yarat" -02000D09="Ko'p-bo'limda" -02000D0A="Fayl &nomlarini tilsimla" -02000D0B="Siq&uv bosqichi:" -02000D0C="&Lug'at hajmi:" -02000D0D="So'z haj&mi:" -02000D0E="Siquvda ishlatiladigan xotira:" -02000D0F="Ajratuvda ishlatiladigan xotira:" - -02000D40="&Tomlarga bo'lakla, bayt:" - -02000D81="Saqlash" -02000D82="O'rtacha" -02000D83="Eng zo'r" -02000D84="Tez" -02000D85="Eng tez" -02000D86="Ultra" - -02000D90="Belgila" - -02000DA1="Fayllarni qo'sh va almashtir" -02000DA2="Fayllarni yangila va qo'sh" -02000DA3="Mavjud fayllarni yangila" -02000DA4="Fayllarni sinxronla" - -02000DB1="Barcha fayllar" - -02000DC0="Siquv ketmoqda" - -; Columns dialog -02000E00="Ustunlar" -02000E01="Ushbu papkada ko'rinadigan ustunlarni belgilang. Ustunlarni tartibini o'zgartirish uchun Yuqoriga va Pastga tugmalaridan foydalaning." -02000E02="Tanlangan ustun kengligi" -02000E03="pi&xel bo'lsin." - -02000E10="&Yuqoriga" -02000E11="&Pastga" -02000E12="&Ko'rsat" -02000E13="Y&ashir" -02000E14="Tayinla" - -02000E81="Sarlavha" -02000E82="Kengligi" - -; Testing -02000F90="sinaldi" - - -; File Manager - -03000000="7-Zip fayl boshqaruvchisi" - -; Menu -03000102="&Fayl" -03000103="&Tahrir" -03000104="&Ko'rish" -03000105="&Asboblar" -03000106="&Yordam" -03000107="Fa&voritlar" - -; File -03000210="&Ochish" -03000211="&Ichkarida ochish" -03000212="&Tashqarida ochish" -03000220="&Ko'rish" -03000221="Ta&hrirla" -03000230="&Qayta nomla" -03000231="Buyerga &nusxala..." -03000232="B&uyerga ko'chir..." -03000233="O'chir" -03000240="&Xossalari" -03000241="&Sharh" -03000250="Papka yarat" -03000251="Fayl yarat" -03000260="&Chiqish" -03000270="&Faylni bo'lakla..." -03000271="Fayllarni &birlashtir..." - -; Edit -03000310="&Qaytar" -03000311="Qayta &bajar" -03000320="Q&irqish" -03000321="&Nusxala" -03000322="Qo'yis&h" -03000323="&O'chir" -03000330="H&ammasini tanla" -03000331="Hammasini tashla" -03000332="&Tanlanishni teskarila" -03000333="Tanlash..." -03000334="Tashlash..." -03000335="Turi bo'yicha tanla" -03000336="Turi bo'yicha tashla" - -; View -03000410="&Yirik ikonlar" -03000411="&Mitti ikonlar" -03000412="&Ro'yxat" -03000413="&Tafsilotlar" -03000420="Saralanmagan" -03000430="Ildiz papkasini och" -03000431="Bir bosqich yuqoriga" -03000432="Papkalar tarixi..." -03000440="&Qayta och" -03000450="&2 ta panel" -03000451="&Uskunalar majmuasi" -03000460="Arxiv toolbari" -03000461="Standart toolbar" -03000462="Yirik tugmalar" -03000463="Tugmalar matnini ko'rsat" - -; Tools -03000510="Tanl&ovlar..." -03000511="&Baholash" - -; Help -03000610="&Tarkibi..." -03000620="&7-Zip haqida..." - -; Favorites -03000710="&Papkani ushbu xatcho'p qo'sh" -03000720="Xatcho'p" - -; Options Dialog - -03010000="Tanlovlar" - -; Plugins -03010100="Plaginlar" -03010101="&Plaginlar:" -03010110="Tanlovlar..." - -; Edit -03010200="Muharrir" -03010201="&Muharrir:" - -; System -03010300="Tizim" -03010302="Ushbu arxivlarni 7-Zip bilan biriktir:" -03010310="Plagin" - -; Settings -03010400="Sharoit" -03010401="\"..\" qismini ko'rsat" -03010402="Fayllarning haqiqiy ikonlarini ko'rsat" -03010410="Tizim menyusini ko'rsat" -03010420="&To'liq yo'lakni tanlash" -03010421="&Panjara chiziqlarini ko'rsat" -03010430="&Muqobil tanlash uslubini qo'lla" -03010440="&Yirik xotira pageini ishlat" - -; Strings - -03020201="Nusxalash" -03020202="Ko'chirish" -03020203="Ushbu katalogga nusxala:" -03020204="Ushbu katalogga ko'chir:" -03020205="Nusxalanmoqda..." -03020206="Ko'chirilmoqda..." -03020207="Bunaqangi papkalar uchun qismlarni ko'chirish yoki nusxalashning iloji yo'q." -03020208="Ushbu operatsiya qo'llanmaydi." - -03020210="Faylni o'chirishni tasdiqlang" -03020211="Papkani o'chirishni tasdiqlang" -03020212="Ko'plab fayllarni o'chirishni tasdiqlang" -03020213="Rostdan ham '{0}'ni o'chirib tashlamoqchimisiz?" -03020214="Rostdan ham '{0}' papkasini butun tarkibi bilan o'chirib tashlamoqchimisiz?" -03020215="Rostdan ham ushbu {0} ta qismni o'chirib tashlamoqchimisiz?" -03020216="O'chirilmoqda..." -03020217="Fayl yoki papkani o'chirishda xato yuz berdi" - -03020220="Qayta nomlanmoqda..." -03020221="Fayl yoki papkani qayta nomlashda xato yuz berdi" -03020222="Faylni nusxalashni tasdiqlang" -03020223="Rostdan ham fayllarni arxivga nusxalashni xohlaysizmi" - -03020230="Papka yaratish" -03020231="Papka nomi:" -03020232="Yangi papka" -03020233="Papka yaratishda xato yuz berdi" - -03020240="Fayl yaratish" -03020241="Fayl nomi:" -03020242="Yangi fayl" -03020243="Fayl yaratishda xatolik yuz berdi" - -03020250="Tanlash" -03020251="Tashlash" -03020252="Maska:" - -03020260="Papkalar tarixi" - -03020280="'{0}' fayli o'zgartirildi.\nUni arxiv ichida yangilashni xohlaysizmi?" -03020281="Ushbu faylni yangilay olmadim\n'{0}'" -03020282="Muharrirni ocha olmadim." -03020283="Ochilmoqda..." - -03020290="sharhi" -03020291="&Sharh:" - -030202A0="Tizim" - -03020300="Kompyuter" -03020301="Tarmoq" - -03020400="Qo'sh" -03020401="Ajrat" -03020402="Sina" - -03020420="Nusxala" -03020421="Ko'chir" -03020422="O'chir" -03020423="Info" - -03020500="Faylni bo'laklash" -03020501="&Ushbu katalogga bo'lakla:" -03020510="Bo'laklanmoqda..." - -03020600="Fayllarni birlashtirish" -03020601="&Ushbu katalogga birlashtir:" -03020610="Birlashtirilmoqda..." - -; Computer -03031100="Umumiy hajmi" -03031101="Bo'sh joy" -03031102="Klaster hajmi" -03031103="Yorliq" - -; Network -03031200="Lokal nomi" -03031201="Provayder" - -; Benchmark Dialog - -03080000="Baholash" -03080001="Xotira ishlatilishi:" -03080002="Siqish" -03080003="Ajratish" -03080004="Tezlik" -03080005="Reyting" -03080006="Umumiy reyting" -03080007="Joriy" -03080008="Natijaviy" -03080009="O'tganlar:" -0308000A="Xatolar:" - -;!@LangEnd@! \ No newline at end of file diff --git a/External/7-Zip/Lang/va.txt b/External/7-Zip/Lang/va.txt deleted file mode 100644 index c70199afa..000000000 --- a/External/7-Zip/Lang/va.txt +++ /dev/null @@ -1,493 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.44 -; Translated by Fernando Verdú -; -; -; -; - -00000000="Valencian" -00000001="Valencià" -00000002="" - -; 7-Zip Configuration - -; Title -01000000="Configuració del 7-Zip" - -; Info Page -01000100="Sobre 7-Zip" -01000103="7-Zip és un programa lliure (GNU LGPL). Pot col·laborar en el desenvolupament del 7-zip registrant-lo, com a usuari registrat podrà rebre suport tècnic." -01000104="Suport" -01000105="Registrar" - -; Folders Page -01000200="Directoris" -01000210="Directori de &treball" -01000211="Directori temporal del &sistema" -01000212="Directori a&ctual" -01000213="E&specificar directori:" -01000214="Utilitzar només per a discs extraibles" - -01000281="Especificar un directori per als arxius temporals." - -; System Page -01000300="Sistema" -01000301="Integrar 7-Zip dins el menu contextual de Windows" -01000302="Menu contextual en cascada" -01000310="Objectes del menu contextual:" - -; Language Page -01000400="Idioma" -01000401="Idioma:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Comandaments 7-Zip" -02000103="Obrir arxiu" -02000104="Obri l'arxiu seleccionat." -02000105="Extraure fitxers..." -02000106="Extraure els fitxers de l'arxiu seleccionat." -02000107="Afegir a l'arxiu..." -02000108="Afegir els objectes seleccionats a l'arxiu." -02000109="Comprovar arxiu" -0200010A="Comprova la integritat del fitxer seleccionat." -0200010B="Extraure ací" -0200010C="Extrau els fitxers de l'arxiu triat al directori actual." -0200010D="Extraure a {0}" -0200010E="Extrau fitxers al subdirectori." -0200010F="Afegir a {0}" -02000110="Afegix els fitxers triats a l'arxiu." -02000111="Comprimir i enviar per correu electrònic..." -02000112="Comprimir els objectes triats a l'arxiu i enviar l'arxiu per correu electrònic." -02000113="Comprimir a {0} i enviar per correu electrònic" -02000114="Comprimir els objectes triats a l'arxiu i enviar l'arxiu per correu electrònic.." - -02000140="" -02000141="" - -; Properties -02000203="Adreça" -02000204="Nom" -02000205="Tipus d'arxiu" -02000206="Directori" -02000207="Tamany" -02000208="Tamany comprimit" -02000209="Atributs" -0200020A="Creat" -0200020B="ültim accés" -0200020C="Última modificació" -0200020D="Compacte" -0200020E="Comentari" -0200020F="Xifrat" -02000210="Expandit abans" -02000211="Expandit després" -02000212="Diccionari" -02000213="CRC" -02000214="Tipus" -02000215="Anti" -02000216="Mètode" -02000217="SO d'origen" -02000218="Sistema de fitxers" -02000219="Usuari" -0200021A="Grup" -0200021B="Bloc" -0200021C="Comentari" -0200021D="Posició" -0200021E="Prefix de ruta" - -; Status bar -02000301="{0} objecte(s) seleccionat(s)" -02000302="{0} objecte(s)" - -02000320="Fitxers:" -02000321="Directoris:" -02000322="Mida:" - -; List Context Menu -02000401="&Columnes..." - -02000411="&Obrir" -02000412="&Extraure..." - -; ToolBar -02000501="Extraure" - -; Messages -02000601="Les operacions d'actualització d'este arxiu no estan suportades." -02000602="No es pot actualitzar l'arxiu {0}" -02000603="No es pot crear el directori '{0}'" -02000604="Tipus d'arxiu desconegut." -02000605="Error" -02000606="Massa objectes" -02000607="No hi ha cap programa associat amb este tipus de fitxer" -02000608="No hi ha errors" -02000609="No es pot obrir el fitxer '{0}' com arxiu" -0200060A="No es pot obrir l'arxiu xifrat '{0}'. contrasenya incorrecta?" - -; Dialogs -02000702="Acceptar" -02000705="&Si" -02000707="Si a &tot" -02000709="&No" -0200070B="No a t&ot" - -02000710="Cancel·lar" -02000711="&Cancel·lar" -02000713="Tan&car" -02000714="Parar" -02000715="Reiniciar" - -02000720="Ajuda" - -; Extract dialog -02000800="Extraure" -02000801="E&xtraure a:" -02000802="Contrasenya" - -02000810="Mode d'adreça" -02000811="Adreça sencera" -02000812="Adreça actual" -02000813="Sense adreça" - -02000820="Sobreescriu" -02000821="Pregunta abans de sobreescriure" -02000822="Sobreescriu sense confirmació" -02000823="Conserva arxius ja existents" -02000824="Reanomena automàticament" -02000825="Reanomena automàticament arxius ja existents" - -02000830="Fitxers" -02000831="Fitxers &seleccionats" -02000832="Tots els fitxers" - -02000881="Seleccione destinació per als fitxers extrets." - -02000890="Extraent" - -; Overwrite dialog -02000900="Confirmar substitució de fitxers" -02000901="El directori de destinació conté un fitxer amb el mateix nom." -02000902="Vol substituir el fitxer existent" -02000903="per este altre?" - -02000911="Renomenar a&utomàticament" - -02000982="{0} bytes" -02000983="modificat el" - -; Messages dialog -02000A00="Missatges de diagnosi" - -02000A80="Missatge" - -02000A91="Mètode de compressió no vàlid per a '{0}'." -02000A92="Error de dades en '{0}'. L'arxiu està corrupte." -02000A93="CRC ha fallat en '{0}'. L'arxiu està corrupte." -02000A94="Errors de dades en l'arxiu xifrat '{0}'. Contrasenya incorrecta?" -02000A95="CRC incorrecte en l'arxiu xifrat '{0}'. Contrasenya incorrecta?" - -; Password dialog -02000B00="Introduir contrasenya" -02000B01="Introduir contrasenya:" -02000B02="Mo&strar contrasenya" -02000B03="Reintroduir contrasenya:" -02000B10="Les contrasenyes no coincideixen" -02000B11="Useu només lletres de l'alfabet anglès, números i caràcters especials (!, #, $, ...) per a la contrasenya" -02000B12="Contrasenya massa llarga" - -; Progress dialog -02000C00="Procés" -02000C01="Temps transcorregut:" -02000C02="Temps restant:" -02000C03="Mida:" -02000C04="Velocitat:" - -02000C10="Segon pla" -02000C11="Primer pla" -02000C12="&Pausa" -02000C13="&Continuar" - -02000C20="Parat" - -02000C30="Està segur que vol cancel·lar?" - -; Compress dialog -02000D00="Afegir a l'arxiu" -02000D01="&Arxiu:" -02000D02="Mode d'act&ualització:" -02000D03="&Format de l'arxiu:" -02000D04="Tipus de co&mpressió:" -02000D05="Crear arxiu compacte" -02000D06="&Paràmetres:" -02000D07="Opcions" -02000D08="Crear arxiu SF&X" -02000D09="Multi-threading" -02000D0A="Encriptar el nom dels fitxers" -02000D0B="&Nivell de compressió:" -02000D0C="Tamany &diccionari:" -02000D0D="Tamany ¶ula:" -02000D0E="Us de memòria Comprimint:" -02000D0F="Us de memòria Descomprimint:" -02000D10="Xifrat" -02000D11="Métode de xifrat:" - -02000D40="Separar en &volums, bytes:" -02000D41="Mida incorrecta de volum" -02000D42="Mida del volum especificada: {0} bytes.\nEsteu segurs que voleu dividir l'arxiu en volums?" - -02000D81="Sense compressió" -02000D82="Normal" -02000D83="Màxima" -02000D84="Ràpida" -02000D85="La més ràpida" -02000D86="Ultra" - -02000D90="Visualitzar" - -02000DA1="Afegir i substituir fitxers" -02000DA2="Actualitzar i afegir fitxers" -02000DA3="Actualitzar fitxers existents" -02000DA4="Sincronitzar fitxers" - -02000DB1="Tots els fitxers" - -02000DC0="Comprimint" - -; Columns dialog -02000E00="Columnes" -02000E01="Seleccione les columnes que vol que siguen visibles en este mode. Faça servir les tecles AvPg i RePg per a organitzar les columnes." -02000E02="La columna triada ha de tindre" -02000E03="píxels d'amplària." - -02000E10="Moure cap am&unt" -02000E11="Moure cap avall" -02000E12="Mo&strar" -02000E13="Amagar" -02000E14="Fixar" - -02000E81="Títol" -02000E82="Ample" - -; Testing -02000F90="Provant" - - -; File Manager - -03000000="Gestor d'Arxius 7-Zip" - -; Menu -03000102="&Arxiu" -03000103="&Editar" -03000104="&Visualitzar" -03000105="Ferramentes" -03000106="Ajuda" -03000107="Favorits" - -; File -03000210="&Obrir" -03000211="Obrir d&ins" -03000212="Obrir fora" -03000220="&Visualitzar" -03000221="&Editar" -03000230="Renom&enar" -03000231="&Copiar a..." -03000232="&Moure a..." -03000233="&Suprimir" -03000240="P&ropietats" -03000241="Come&ntari" -03000242="Calcular checksum" -03000250="Crear directori" -03000251="Crear fitxer" -03000260="Eixir" -03000270="&Separar fitxer..." -03000271="Com&binar fitxers..." - -; Edit -03000310="&Desfer" -03000311="&Refer" -03000320="Re&tallar" -03000321="&Copiar" -03000322="&Pegar" -03000323="&Suprimir" -03000330="Seleccion&ar-ho tot" -03000331="Deseleccionar-ho tot" -03000332="&Invertir selecció" -03000333="Seleccionar..." -03000334="No seleccionar..." -03000335="Seleccionar per tipus" -03000336="No seleccionar per tipus" - -; View -03000410="Icones g&rans" -03000411="Icones menudes" -03000412="&Llista" -03000413="&Detalls" -03000420="No ordenat" -03000430="Obrir directori arrel" -03000431="Directori pare" -03000432="Historial de carpetes..." -03000440="Actualitza&r" -03000449="Vista plana" -03000450="&2 Taules" -03000451="&Barres de ferramentes" -03000460="Arxiu" -03000461="Estàndard" -03000462="Botons grans" -03000463="Mostrar text dels botons" - -; Tools -03000510="&Opcions..." -03000511="&Banc de proves" - -; Help -03000610="&Contingut..." -03000620="Sobre 7-Zip..." - -; Favorites -03000710="&Afegir el directori als Favorits com a" -03000720="Personal" - -; Options Dialog - -03010000="Opcions" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Opcions..." - -; Edit -03010200="Editor" -03010201="&Editor:" - -; System -03010300="Sistema" -03010302="Associar 7-Zip amb:" -03010310="Plugin" - -; Settings -03010400="Ajusts" -03010401="Mostrar l'objecte \"..\"" -03010402="Mostrar icones reals dels fitxers" -03010410="Mostrar el menú del sistema" -03010420="Seleccionar &tota la la fila" -03010421="Mostrar &línies de la taula" -03010430="Mode de selecció &alternatiu" -03010440="Utilitzar pàgines de memòria &grans" - -; Strings - -03020201="Copiar" -03020202="Moure" -03020203="Copiar a:" -03020204="Moure a:" -03020205="Copiant..." -03020206="Movent..." -03020207="No es poden moure o copiar elements d'este tipus de carpetes." -03020208="Operació no permesa." -03020209="Seleccioneu carpeta de destinació." - -03020210="Confirmar supressió del fitxer" -03020211="Confirmar supressió del directori" -03020212="Confirmar supressió m�ltiple de fitxers" -03020213="Està segur de voler suprimir '{0}'?" -03020214="Està segur de voler suprimir la carpeta '{0}' i tot el seu contingut?" -03020215="Està segur de voler esborrar estos {0} elements?" -03020216="Suprimint..." -03020217="Error esborrant fitxer o carpeta" - -03020220="Renomenant..." -03020221="Error renomenant fitxer o carpeta" -03020222="Confirmar copia de fitxer" -03020223="Està segur que vol copiar els fitxers a l'arxiu" - -03020230="Crear carpeta" -03020231="Nom de carpeta:" -03020232="Carpeta nova" -03020233="Error creant carpeta" - -03020240="Crear fitxer" -03020241="Nom de fitxer:" -03020242="Fitxer nou" -03020243="Error creant el fitxer" - -03020250="Seleccionar" -03020251="No seleccionar" -03020252="Màscara:" - -03020260="Historial de directoris" - -03020280="El fitxer '{0}' ha sigut modificat.\nVol actualitzar-lo a l'arxiu?" -03020281="No es pot actualitzar el fitxer\n'{0}'" -03020282="No es pot executar l'editor." -03020283="Obrint..." - -03020290="Comentari" -03020291="&Comentari:" - -030202A0="Sistema" - -03020300="El meu ordinador" -03020301="Entorn de xarxa" - -03020400="Afegir" -03020401="Extraure" -03020402="Provar" - -03020420="Copiar" -03020421="Moure" -03020422="Esborrar" -03020423="Info" - -03020500="Separar fitxer" -03020501="&Separar a:" -03020510="Separant..." -03020520="Confirma divissió" -03020521="Esteu segurs que voleu dividir el fitxer en {0} volums?" -03020522="La mida del volum ha de ser menor que la mida original del fitxer" - -03020600="Combinar fitxers" -03020601="&Combinar a:" -03020610="Combinant..." -03020620="Seleccioneu només el primer fitxer" - -03020710="Calculant checksum..." -03020720="Informació checksum" -03020721="CRC checksum per a les dades:" -03020722="CRC checksum per a dades i noms:" - -03020800="Escanejant..." - -; Computer -03031100="Tamany total" -03031101="Espai lliure" -03031102="Tamany sector" -03031103="Etiqueta" - -; Network -03031200="Nom local" -03031201="Proveïdor" - -; Benchmark Dialog - -03080000="Banc de proves" -03080001="Us de memoria:" -03080002="Comprimint" -03080003="Descomprimint" -03080004="Velocitat" -03080005="Taxa" -03080006="Taxa total" -03080007="Actual" -03080008="Resultant" -03080009="Passades:" -0308000A="Errors:" - -;!@LangEnd@! - - - diff --git a/External/7-Zip/Lang/vi.txt b/External/7-Zip/Lang/vi.txt deleted file mode 100644 index 4e1d08ae9..000000000 --- a/External/7-Zip/Lang/vi.txt +++ /dev/null @@ -1,497 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 4.48 beta -; Translated by Nguyễn Hồng Quân -; -; -; -; - -00000000="Vietnamese" -00000001="Tiếng Việt" -00000002="42" - -; 7-Zip Configuration - -; Title -01000000="Cấu hình 7-Zip" - -; Info Page -01000100="Giới thiệu 7-Zip" -01000103="7-Zip là một phần mềm miễn phí. Tuy nhiên, bạn vui lòng ủng hộ nhóm phát triển 7-Zip bằng cách đăng ký." -01000104="Ủng hộ" -01000105="Đăng ký" - -; Folders Page -01000200="Thư mục" -01000210="&Thư mục làm việc" -01000211="&Thư mục tạm của hệ thống" -01000212="&Hiện hành" -01000213="&Đặc biệt:" -01000214="Chỉ sử dụng cho ổ đĩa tháo lắp" - -01000281="Chỉ định nơi chứa tập tin lưu tạm." - -; System Page -01000300="Hệ thống" -01000301="Tích hợp 7-Zip vào menu ngữ cảnh" -01000302="Xếp tầng menu ngữ cảnh" -01000310="Menu ngữ cảnh:" - -; Language Page -01000400="Ngôn ngữ" -01000401="Ngôn ngữ:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="Các lệnh của 7-Zip" -02000103="Mở tập tin đã nén" -02000104="Mở tập tin đã nén." -02000105="Giải nén tập tin..." -02000106="Giải nén từ tập tin nén đã chọn." -02000107="Thêm vào tập tin nén..." -02000108="Thêm những tập tin đã chọn vào tập tin nén." -02000109="Kiểm tra tập tin nén" -0200010A="Kiểm tra tính toàn vẹn của tập tin đã nén." -0200010B="Giải nén tại đây" -0200010C="Giải nén vào thư mục hiện hành." -0200010D="Giải nén vào {0}" -0200010E="Giải nén vào thư mục con." -0200010F="Thêm vào {0}" -02000110="Thêm những tập tin đã chọn vào tập tin nén." -02000111="Nén và gởi email..." -02000112="Nén những tập tin đã chọn thành tập tin nén rồi gởi email." -02000113="Nén thành {0} rồi gởi email" -02000114="Nén những tập tin đã chọn vào tập tin nén rồi gởi email." - -02000140="" -02000141="" - -; Properties -02000203="Đường dẫn" -02000204="Tên" -02000205="Phần mở rộng" -02000206="Thư mục" -02000207="Trước khi nén" -02000208="Sau khi nén" -02000209="Thuộc tính" -0200020A="Thời điểm tạo thành" -0200020B="Thời điểm truy xuất" -0200020C="Thời điểm sửa đổi" -0200020D="Đặc" -0200020E="Ghi chú" -0200020F="Đã được mã hoá" -02000210="Chia nhỏ trước" -02000211="Chia nhỏ sau" -02000212="Từ điển" -02000213="CRC" -02000214="Loại" -02000215="Anti" -02000216="Phương pháp" -02000217="Host OS" -02000218="Hệ thống tập tin" -02000219="Người dùng" -0200021A="Nhóm" -0200021B="Đóng khối" -0200021C="Chú thích" -0200021D="Vị trí" -0200021E="Đầu ngữ đường dẫn" - -; Status bar -02000301="{0} đối tượng đã được chọn" -02000302="{0} đối tượng" - -02000320="Tập tin:" -02000321="Thư mục:" -02000322="Kích cỡ:" - -; List Context Menu -02000401="&Cột..." - -02000411="&Mở" -02000412="&Giải nén..." - -; ToolBar -02000501="Giải nén" - -; Messages -02000601="Thao tác cập nhật không được hỗ trợ cho tập tin này." -02000602="Không thể cập nhật tập tin {0}" -02000603="Không thể tạo thư mục '{0}'" -02000604="Dạng tập tin này không được hỗ trợ." -02000605="Lỗi" -02000606="Quá nhiều mục" -02000607="Không có ứng dụng tương ứng với phần mở rộng của tập tin này" -02000608="Không xuất hiện lỗi" -02000609="Không thể mở '{0}' như là tập tin nén" -0200060A="Không thể mở tập tin nén bị mã hóa '{0}'. Mật khẩu sai?" - -; Dialogs -02000702="Đồng ý" -02000705="&Có" -02000707="Có &tất" -02000709="&Không" -0200070B="Khôn&g tất" - -02000710="Huỷ bỏ" -02000711="&Huỷ bỏ" -02000713="&Đóng" -02000714="Dừng" -02000715="Làm lại" - -02000720="Giúp đỡ" - -; Extract dialog -02000800="Giải nén" -02000801="&Giải nén vào:" -02000802="Mật mã" - -02000810="Chế độ đường dẫn" -02000811="Đường dẫn đầy đủ" -02000812="Đường dẫn hiện thời" -02000813="Không có đường dẫn" - -02000820="Chế độ ghi đè" -02000821="Hỏi trước khi ghi đè" -02000822="Ghi đè không cần hỏi" -02000823="Bỏ qua tập tin đã có" -02000824="Tự động đổi tên" -02000825="Tự động đổi tên tập tin đã có" - -02000830="Tập tin" -02000831="Tập tin đã &chọn" -02000832="&Tất cả tập tin" - -02000881="Chọn nơi để giải nén tập tin." - -02000890="Đang giải nén" - -; Overwrite dialog -02000900="Xác nhận thay thế tập tin" -02000901="Thư mục đích đã có tập tin cần xử lý." -02000902="Bạn có muốn thay thế tập tin đã có" -02000903="bằng tập tin mới?" - -02000911="&Tự đổi tên" - -02000982="{0} bytes" -02000983="chỉnh sửa ngày" - -; Messages dialog -02000A00="Thông điệp chẩn đoán" - -02000A80="Thông điệp" - -02000A91="Phương pháp nén không được hỗ trợ cho '{0}'." -02000A92="Lỗi về dữ liệu trong '{0}'. Tập tin đã bị hỏng." -02000A93="Lỗi chẵn/lẻ (CRC) trong '{0}'. Tập tin đã bị hỏng." -02000A94="Lỗi dữ liệu trong tập tin nén bị mã hóa '{0}'. Mật khẩu sai?" -02000A95="CRC không thành trong tập tin nén bị mã hóa '{0}'. Mật khẩu sai?" - -; Password dialog -02000B00="Nhập mật khẩu" -02000B01="Nhập mật khẩu:" -02000B02="&Hiển thị mật khẩu" -02000B03="Nhập lại mật khẩu:" -02000B10="Các mật khẩu không khớp nhau" -02000B11="Chỉ dùng những chữ cái tiếng Anh, số và những kí tự đặc biệt (!, #, $, ...) cho mật khẩu" -02000B12="Mật khẩu quá dài đi" - -; Progress dialog -02000C00="Xử lý" -02000C01="Thời gian đã qua:" -02000C02="Thời gian còn lại:" -02000C03="Kích thước:" -02000C04="Tốc độ:" - -02000C10="&Chạy nền" -02000C11="&Chạy ưu tiên" -02000C12="&Dừng" -02000C13="&Tiếp tục" - -02000C20="Đã dừng" - -02000C30="Bạn có muốn chấm dứt?" - -; Compress dialog -02000D00="Thêm vào tập tin nén" -02000D01="&Tập tin nén:" -02000D02="&Chế độ cập nhật:" -02000D03="&Dạng tập tin nén:" -02000D04="&Phương thức nén:" -02000D05="Chỉ tạo thành &một tập tin nén" -02000D06="Tham &số:" -02000D07="Tuỳ chọn" -02000D08="Tạo tập tin &tự giải nén" -02000D09="Đa luồng" -02000D0A="Mã hoá &tên tập tin" -02000D0B="&Cấp độ nén:" -02000D0C="&Kích thước thư mục:" -02000D0D="&Kích thước từ:" -02000D0E="Bộ nhớ sử dụng cho việc nén:" -02000D0F="Bộ nhớ sử dụng cho việc giải nén:" -02000D10="Mã hóa" -02000D11="Phương pháp mã hóa:" -02000D12="Số luồng xử lý CPU:" -02000D13="Kích cỡ khối đặc:" -02000D14="Không đặc" -02000D15="Đặc" -02000D16="Nén những tập tin chia sẻ" - -02000D40="Chia thành &nhiều phần, bytes:" -02000D41="Kích cỡ phần chia chưa đúng" -02000D42="Kích cỡ phần chia đã định là: {0} bytes.\nĐúng là bạn muốn chia nhỏ tập tin nén thành những phần như thế?" - -02000D81="Lưu trữ" -02000D82="Thường" -02000D83="Tối đa" -02000D84="Nhanh" -02000D85="Nhanh nhất" -02000D86="Siêu nhanh" - -02000D90="Tìm chọn" - -02000DA1="Thêm và thay thế tập tin" -02000DA2="Cập nhật và thêm tập tin" -02000DA3="Cập nhật tập tin đã có" -02000DA4="Đồng bộ tập tin" - -02000DB1="Tất cả tập tin" - -02000DC0="Đang nén, chờ tí" - -; Columns dialog -02000E00="Cột" -02000E01="Đánh dấu chọn các cột mà bạn muốn xuất hiện trong thư mục này. Dùng các nút LÊN/XUỐNG để thay đổi thứ tự các cột." -02000E02="Cột đã chọn nên có" -02000E03="độ &rộng theo điểm ảnh." - -02000E10="Chuyển &Lên" -02000E11="Chuyển &Xuống" -02000E12="&Hiển thị" -02000E13="&Ẩn" -02000E14="Đặt" - -02000E81="Tiêu đề" -02000E82="Độ rộng" - -; Testing -02000F90="Kiểm tra" - - -; File Manager - -03000000="Chương trình quản lý tập tin 7-Zip" - -; Menu -03000102="&Tập tin" -03000103="&Biên tập" -03000104="&Xem" -03000105="&Công cụ" -03000106="&Giúp đỡ" -03000107="Ư&a thích" - -; File -03000210="&Mở" -03000211="Mở &tại đây" -03000212="Mở trong cửa sổ &khác" -03000220="&Xem" -03000221="&Biên tập" -03000230="Đổ&i tên" -03000231="&Sao chép đến..." -03000232="&Di chuyển đến..." -03000233="&Xoá" -03000240="Th&uộc tính" -03000241="C&hú thích" -03000242="Tính checksum" -03000250="Tạo thư mục" -03000251="Tạo tập tin" -03000260="Th&oát" -03000270="&Cắt tập tin..." -03000271="&Nối tập tin..." - -; Edit -03000310="Như &cũ" -03000311="Làm &lại" -03000320="&Cắt" -03000321="&Sao chép" -03000322="&Dán" -03000323="&Xoá" -03000330="Chọn &tất cả" -03000331="Bỏ chọn tất cả" -03000332="Chọn &ngược lại" -03000333="Chọn..." -03000334="Bỏ chọn..." -03000335="Chọn theo loại" -03000336="Bỏ chọn theo loại" - -; View -03000410="Biểu tượng &lớn" -03000411="Biểu tượng &nhỏ" -03000412="&Danh sách" -03000413="&Chi tiết" -03000420="Không sắp xếp" -03000430="Mở thư mục gốc" -03000431="Lên một cấp" -03000432="Lịch sử thư mục..." -03000440="&Rà soát lại" -03000450="&2 bảng" -03000449="Xem dàn trải" -03000451="&Thanh công cụ" -03000460="Thanh công cụ nén" -03000461="Thanh công cụ chuẩn" -03000462="Sử dụng nút lớn" -03000463="Hiển thị chữ trên nút" - -; Tools -03000510="&Tuỳ chọn..." -03000511="Đo tốc độ" - -; Help -03000610="&Nội dung..." -03000620="&Giới thiệu 7-Zip..." - -; Favorites -03000710="&Thêm thư mục vào 'Ưa thích' như là" -03000720="Đánh dấu" - -; Options Dialog - -03010000="Các tùy chọn" - -; Plugins -03010100="Plugins" -03010101="&Plugins:" -03010110="Tuỳ chọn..." - -; Edit -03010200="Biên tập" -03010201="&Biên tập:" - -; System -03010300="Hệ thống" -03010302="Liên kết 7-Zip với:" -03010310="Plugin" - -; Settings -03010400="Sắp đặt" -03010401="Hiển thị \"..\"" -03010402="Hiển thị biểu tượng thực của tập tin" -03010410="Hiển thị menu hệ thống" -03010420="Chọn cả &dòng" -03010421="Hiển thị &lưới" -03010430="Chế độ chọn luân &phiên" -03010440="Sử dụng bộ &nhớ lớn" - -; Strings - -03020201="Sao chép" -03020202="Di chuyển" -03020203="Sao chép đến:" -03020204="Di chuyển đến:" -03020205="Đang sao chép..." -03020206="Đang di chuyển..." -03020207="Bạn không thể di chuyển hoặc sao chép vào thư mục đó." -03020208="Thao tác không được hỗ trợ." -03020209="Chọn thư mục đến." - -03020210="Xác nhận xoá tập tin" -03020211="Xác nhận xoá thư mục" -03020212="Xác nhận xoá nhiều tập tin" -03020213="Bạn có chắc là bạn có muốn xoá '{0}'?" -03020214="Bạn có chắc là bạn muốn xoá thư mục '{0}' và tất cả tập tin trong nó?" -03020215="Bạn có chắc là bạn muốn xoá {0} ?" -03020216="Đang xoá..." -03020217="Lỗi khi đang xoá tập tin hoặc thư mục" - -03020220="Đang đổi tên..." -03020221="Lỗi khi đổi tên tập tin hoặc thư mục" -03020222="Xác nhận sao chép tập tin" -03020223="Bạn chắc chắn muốn sao chép vào tập tin nén chứ" - -03020230="Tạo thư mục" -03020231="Tên thư mục:" -03020232="Thư mục mới" -03020233="Lỗi khi tạo thư mục" - -03020240="Tạo tập tin" -03020241="Tên tập tin:" -03020242="Tập tin mới" -03020243="Lỗi khi tạo tập tin" - -03020250="Chọn" -03020251="Bỏ chọn" -03020252="Mặt nạ:" - -03020260="Lịch sử thư mục" - -03020280="Tập tin '{0}' đã bị thay đổi.\nBạn có muốn cập nhật vào tập tin nén?" -03020281="Không thể cập nhật tập tin\n'{0}'" -03020282="Không thể khởi động trình biên tập." -03020283="Đang mở..." - -03020290="Chú thích" -03020291="&Chú thích:" - -030202A0="Hệ thống" - -03020300="Máy tính" -03020301="Mạng" - -03020400="Thêm" -03020401="Giải nén" -03020402="Kiểm tra" - -03020420="Sao chép" -03020421="Di chuyển" -03020422="Xoá" -03020423="Thông tin" - -03020500="Chia nhỏ tập tin" -03020501="&Chia nhỏ thành:" -03020510="Đang chia nhỏ..." -03020520="Xác nhận việc chia nhỏ" -03020521="Bạn có chắc là muốn chia nhỏ tập tin nén thành {0} phần?" -03020522="Kích cỡ phần chia phải nhỏ hơn tập tin gốc à nha!" - -03020600="Nối tập tin" -03020601="&Nối thành:" -03020610="Đang nối..." -03020620="Chỉ chọn tập tin đầu thôi" - -03020710="Đang tính checksum..." -03020720="Thông tin checksum" -03020721="CRC checksum cho dữ liệu:" -03020722="CRC checksum cho dữ liệu và tên:" - -03020800="Đang quét..." - -; Computer -03031100="Tổng kích thước" -03031101="Kích thước trống" -03031102="Kích thước cluster" -03031103="Nhãn" - -; Network -03031200="Tên cục bộ" -03031201="Nhà cung cấp" - -; Benchmark Dialog - -03080000="Đo tốc độ" -03080001="Bộ nhớ sử dụng:" -03080002="Nén" -03080003="Giải nén" -03080004="Tốc độ" -03080005="Đánh giá" -03080006="Tổng đánh giá" -03080007="Hiện thời" -03080008="Kết quả" -03080009="Đã qua:" -0308000A="Lỗi:" -0308000B="Mức dùng CPU" -0308000C="Tốc độ / Mức dùng" - -;!@LangEnd@! diff --git a/External/7-Zip/Lang/zh-cn.txt b/External/7-Zip/Lang/zh-cn.txt deleted file mode 100644 index 926aa9585..000000000 --- a/External/7-Zip/Lang/zh-cn.txt +++ /dev/null @@ -1,545 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.08 -; translated by Sparanoid -; http://7z.sparanoid.com/ -; last updated: 2009-12-07 -; revision: 2119 -; - -00000000="Chinese Simplified" -00000001="简体中文" -00000002="4-2" - -; 7-Zip Configuration - -; Title -01000000="7-Zip 配置" - -; Info Page -01000100="关于 7-Zip" -01000103="7-Zip 是一款免费软件。您可以通过捐赠的方式来支持 7-Zip 的开发。" -01000104="技术支持" -01000105="注册" - -; Folders Page -01000200="文件夹" -01000210="工作文件夹(&W)" -01000211="系统临时文件夹(&S)" -01000212="当前文件夹(&C)" -01000213="指定位置(&S)" -01000214="仅用于可移动设备" - -01000281="指定一个存放临时压缩包的位置。" - -; System Page -01000300="系统" -01000301="添加 7-Zip 到右键菜单" -01000302="层叠右键菜单" -01000310="选择在右键菜单中显示的项目" - -; Language Page -01000400="语言" -01000401="选择语言:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip 指令" -02000103="打开压缩包" -02000104="打开选定的压缩包" -02000105="提取文件..." -02000106="从选定的压缩文件中提取文件" -02000107="添加到压缩包..." -02000108="添加选定项目到压缩包" -02000109="测试压缩包" -0200010A="完整测试已选中的档案" -0200010B="提取到当前目录" -0200010C="从选定的压缩包中提取文件到当前目录。" -0200010D="提取到 {0}" -0200010E="提取文件到子文件夹" -0200010F="添加到 {0}" -02000110="添加选定项目到压缩包" -02000111="压缩并邮寄..." -02000112="将选定的项目添加到压缩包并使用电子邮件发送。" -02000113="压缩 {0} 并邮寄" -02000114="将选定的项目添加到压缩包并使用电子邮件发送。" - -02000140="<文件夹>" -02000141="<档案>" - -; Properties -02000203="路径" -02000204="名称" -02000205="扩展名" -02000206="文件夹" -02000207="大小" -02000208="压缩后大小" -02000209="属性" -0200020A="创建时间" -0200020B="访问时间" -0200020C="修改时间" -0200020D="固实" -0200020E="注释" -0200020F="加密" -02000210="之前分割" -02000211="之后分割" -02000212="字典大小" -02000213="CRC" -02000214="类型" -02000215="剔除项" -02000216="算法" -02000217="主操作系统" -02000218="文件系统" -02000219="用户" -0200021A="组" -0200021B="字块" -0200021C="注释" -0200021D="定位" -0200021E="路径前缀" -0200021F="文件夹" -02000220="文件" -02000221="版本" -02000222="卷" -02000223="多卷压缩" -02000224="偏移" -02000225="链接" -02000226="字块" -02000227="分卷" - -02000229="64 位" -0200022A="大字节序" -0200022B="CPU" -0200022C="物理大小" -0200022D="文件头大小" -0200022E="校验和" -0200022F="特征" -02000230="虚拟地址" -02000231="ID" -02000232="短文件名" -02000233="创建程序" -02000234="扇区大小" -02000235="模式" -02000236="链接" - -; Status bar -02000301="选定 {0} 个项目" -02000302="{0} 个项目" - -02000320="文件:" -02000321="文件夹:" -02000322="大小:" -02000323="处理后大小:" -02000324="压缩包:" - -; List Context Menu -02000401="栏目(&C)..." - -02000411="打开(&O)" -02000412="提取(&E)..." - -; ToolBar -02000501="提取" - -; Messages -02000601="不支持此压缩包的更新操作。" -02000602="无法更新压缩包 {0}" -02000603="无法创建文件夹“{0}”" -02000604="文件不支持压缩包。" -02000605="错误" -02000606="项目太多" -02000607="没有应用程序和下面给出的文件扩展名相关联。" -02000608="未发现错误" -02000609="无法作为压缩包打开文件“{0}”" -0200060A="无法打开加密压缩包“{0}”。密码错误?" -0200060B="系统无法分配所需内存" -0200060C="未知错误" -0200060D="不支持的压缩包格式" - -; Dialogs -02000702="确定" -02000705="是(&Y)" -02000707="全是(&A)" -02000709="否(&N)" -0200070B="全否(&L)" - -02000710="取消" -02000711="取消(&C)" -02000713="关闭(&C)" -02000714="停止" -02000715="重新开始" - -02000720="帮助" - -; Extract dialog -02000800="提取" -02000801="提取到(&X):" -02000802="密码" - -02000810="路径模式" -02000811="完整路径" -02000812="当前路径" -02000813="无路径" - -02000820="覆盖模式" -02000821="在覆盖前询问" -02000822="不提示自动覆盖" -02000823="跳过已经存在的文件" -02000824="自动重命名" -02000825="重命名现有文件" - -02000830="文件" -02000831="选定的文件(&S)" -02000832="全部文件(&A)" - -02000881="指定一个提取文件的位置。" - -02000890="正在提取" - -; Overwrite dialog -02000900="确认文件替换" -02000901="此文件夹已包含一个相同名称的文件。" -02000902="是否将现有文件" -02000903="替换为" - -02000911="自动重新命名(&U)" - -02000982="{0} 字节" -02000983="修改于" - -; Messages dialog -02000A00="诊断信息" - -02000A80="信息" - -02000A91="不支持的压缩算法“{0}”。" -02000A92="数据“{0}”发生错误,文件已损坏。" -02000A93="CRC 校验“{0}”失败,文件已损坏。" -02000A94="加密文件“{0}”数据有误,密码错误?" -02000A95="加密文件“{0}”CRC 数据效验有误,密码错误?" - -; Password dialog -02000B00="输入密码" -02000B01="输入密码:" -02000B02="显示密码(&S)" -02000B03="重新输入:" -02000B10="密码不匹配" -02000B11="密码只允许英文字符,数字,以及特殊字符 (!、#、$...)" -02000B12="密码过长" - -; Progress dialog -02000C00="进程" -02000C01="已用时间:" -02000C02="剩余时间:" -02000C03="总大小:" -02000C04="速度:" -02000C05="已处理:" -02000C06="压缩率:" - -02000C10="后台(&B)" -02000C11="前台(&F)" -02000C12="暂停(&P)" -02000C13="继续(&C)" - -02000C20="已暂停" - -02000C30="您真的要取消吗?" - -; Compress dialog -02000D00="添加到压缩包" -02000D01="压缩包(&A):" -02000D02="更新方式(&U):" -02000D03="压缩格式(&F):" -02000D04="压缩方法(&M):" -02000D05="创建固实压缩包(&S)" -02000D06="参数(&P):" -02000D07="选项" -02000D08="创建自释放程序(&X)" -02000D09="多线程支持(Pentium 4 HT 或多处理器)" -02000D0A="加密文件名(&N)" -02000D0B="压缩等级(&L):" -02000D0C="字典大小(&D):" -02000D0D="单词大小(&W):" -02000D0E="压缩所需内存:" -02000D0F="解压缩所需内存:" -02000D10="加密" -02000D11="加密算法:" -02000D12="CPU 线程数:" -02000D13="固实数据大小:" -02000D14="非固实" -02000D15="固实" -02000D16="压缩共享文件" - -02000D40="分卷大小,字节(&V):" -02000D41="分卷大小错误" -02000D42="指定分卷大小:{0} 字节。\n您确定要分割当前文件吗?" - -02000D81="仅存储" -02000D82="标准压缩" -02000D83="最大压缩" -02000D84="快速压缩" -02000D85="极速压缩" -02000D86="极限压缩" - -02000D90="浏览" - -02000DA1="添加并替换文件" -02000DA2="更新并添加文件" -02000DA3="只刷新已存在的文件" -02000DA4="同步压缩包内容" - -02000DB1="所有文件" - -02000DC0="压缩" - -; Columns dialog -02000E00="栏目" -02000E01="选中您愿意在这个文件夹中可见的栏目。使用上移或者下移按钮来重新安排该栏目的顺序。" -02000E02="选定栏目将会被" -02000E03="所选栏的宽度(像素)(&W)" - -02000E10="上移(&U)" -02000E11="下移(&D)" -02000E12="显示(&S)" -02000E13="隐藏(&H)" -02000E14="设置" - -02000E81="标题" -02000E82="宽度" - -; Testing -02000F90="测试" - - -; File Manager - -03000000="7-Zip 文件管理器" - -; Menu -03000102="文件(&F)" -03000103="编辑(&E)" -03000104="查看(&V)" -03000105="工具(&T)" -03000106="帮助(&H)" -03000107="收藏(&A)" - -; File -03000210="打开(&O)" -03000211="当前窗口打开(&I)" -03000212="新建窗口打开(&U)" -03000220="视图(&V)" -03000221="编辑(&E)" -03000230="重命名(&M)" -03000231="复制到(&C)..." -03000232="移动到(&M)..." -03000233="删除(&D)" -03000240="属性(&R)" -03000241="注释(&N)" -03000242="文件效验" -03000243="文件比较" -03000250="新建文件夹" -03000251="新建文件" -03000260="退出(&X)" -03000270="分割文件(&S)..." -03000271="合并文件(&B)..." - -; Edit -03000310="撤消(&U)" -03000311="重做(&R)" -03000320="剪切(&T)" -03000321="复制(&C)" -03000322="粘贴(&P)" -03000323="删除(&D)" -03000330="全选(&A)" -03000331="全部取消" -03000332="反选(&I)" -03000333="选择..." -03000334="取消选择..." -03000335="选择相同类型的文件" -03000336="取消选择相同类型的文件" - -; View -03000410="大图标(&G)" -03000411="小图标(&M)" -03000412="列表(&L)" -03000413="详细信息(&D)" -03000420="不排序" -03000430="打开根文件夹" -03000431="向上" -03000432="文件夹历史..." -03000440="刷新(&R)" -03000449="平板模式" -03000450="双版面(&2)" -03000451="工具栏(&T)" -03000460="档案工具栏" -03000461="标准工具栏" -03000462="大按钮" -03000463="显示按钮文字" - -; Tools -03000510="选项(&O)" -03000511="基准测试(&B)" - -; Help -03000610="查看帮助(&C)" -03000620="关于 7-Zip (&A)" - -; Favorites -03000710="添加到收藏夹(&A)" -03000720="书签" - -; Options Dialog - -03010000="选项" - -; Plugins -03010100="插件" -03010101="插件(&P):" -03010110="插件选项..." - -; Edit -03010200="编辑器" -03010201="指定编辑器(&E):" -03010202="指定文件比较程序(&D):" - -; System -03010300="系统" -03010302="使用 7-Zip 关联的文件类型:" -03010310="插件" - -; Settings -03010400="显示" -03010401="显示“..”项 (双击向上)" -03010402="显示真实图标" -03010410="显示系统菜单" -03010420="整行选择(&F)" -03010421="显示网格线(&G)" -03010422="单击打开项目" -03010430="7-Zip 传统选择模式(&A)" -03010440="使用大内存页(&L)" - -; Strings - -03020201="复制" -03020202="移动" -03020203="复制到:" -03020204="移动到:" -03020205="正在复制..." -03020206="正在移动..." -03020207="你不能这样移动或复制文件(夹)。" -03020208="不支持当前操作" -03020209="选择目标文件夹。" - -03020210="确认文件删除" -03020211="确认文件夹删除" -03020212="确认删除多个文件" -03020213="确实要删除 “{0}”吗?" -03020214="确实要删除文件夹“{0}”以及全部内容吗?" -03020215="确实要删除这 {0} 项?" -03020216="正在删除..." -03020217="无法删除文件或文件夹." -03020218="系统无法将过长路径的文件移动到回收站" - -03020220="正在重新命名..." -03020221="无法重命名文件或文件夹。" -03020222="确认文件复制" -03020223="您确定复制文件到压缩包" - -03020230="新建文件夹" -03020231="文件夹名称:" -03020232="新建文件夹" -03020233="无法创建文件夹" - -03020240="新建文件" -03020241="文件名:" -03020242="新建文件.txt" -03020243="无法新建文件" - -03020250="选择" -03020251="取消选定" -03020252="掩码:" - -03020260="文件夹历史" - -03020280="文件“{0}”已修改。\n你想在压缩文件中更新它?" -03020281="无法更新文件\n“{0}”,有可能该压缩包是固实的。" -03020282="无法运行外部编辑。" -03020283="正在打开..." -03020284="此文件似乎是病毒文件(文件名中包含多个空格)。" - -03020290="注释" -03020291="注释(&C):" - -030202A0="系统" - -03020300="我的电脑" -03020301="网上邻居" -03020302="我的文档" - -03020400=" 添加 " -03020401=" 提取 " -03020402=" 测试 " - -03020420=" 复制 " -03020421=" 移动 " -03020422=" 删除 " -03020423=" 信息 " - -03020500="分割文件" -03020501="分割文件到(&S):" -03020510="正在分割..." -03020520="确认分割" -03020521="您确认要将文件分割为 {0} 个分卷?" -03020522="分卷大小必须小于原文件大小" - -03020600="合并文件" -03020601="合并文件到(&S):" -03020610="正在合并..." -03020620="请选择分卷的首个文件" -03020621="无法识别文件为压缩分卷" -03020622="无法找到其他压缩分卷" - -03020710="正在效验..." -03020720="效验信息" -03020721="CRC 数据效验:" -03020722="CRC 数据及文件名效验:" - -03020800="正在搜索..." - -03020900="属性" - -03020A01="无法为过长的路径完成该操作。" -03020A02="您必须选择一个文件" -03020A03="您至少要选择一个文件" -03020A04="文件 {0} 已存在" - -; Computer -03031100="总大小" -03031101="可用空间" -03031102="簇大小" -03031103="卷标" - -; Network -03031200="本地名称" -03031201="供应者" - -; Benchmark Dialog - -03080000="基准测试" -03080001="内存使用:" -03080002="压缩" -03080003="解压缩" -03080004="速度" -03080005="评分" -03080006="总体评分" -03080007="当前" -03080008="结果" -03080009="已通过:" -0308000A="发生错误:" -0308000B="CPU 使用率" -0308000C="使用率评分" - -;!@LangEnd@! - - diff --git a/External/7-Zip/Lang/zh-tw.txt b/External/7-Zip/Lang/zh-tw.txt deleted file mode 100644 index 8db15baf2..000000000 --- a/External/7-Zip/Lang/zh-tw.txt +++ /dev/null @@ -1,543 +0,0 @@ -;!@Lang@!UTF-8! -; 7-Zip 9.07 -; Translated by Jack Pang at Developer's Home -; http://www.developershome.com/7-zip/ -; -; 7-Zip 4.59 -; Translated by Leon Tseng, sec2, 琥珀 - -00000000="Chinese Traditional" -00000001="繁體中文" -00000002="4-1" - -; 7-Zip Configuration - -; Title -01000000="7-Zip 組態設定" - -; Info Page -01000100="關於 7-Zip" -01000103="7-Zip 為自由軟體" -01000104="支援" -01000105="註冊" - -; Folders Page -01000200="資料夾" -01000210="工作資料夾(&W)" -01000211="系統暫存資料夾(&S)" -01000212="目前的資料夾(&C)" -01000213="指定的資料夾(&S):" -01000214="僅用於卸除式磁碟機" - -01000281="請指定存放暫存壓縮檔的位置。" - -; System Page -01000300="系統" -01000301="將 7-Zip 整合到快顯功能表中" -01000302="串聯式快顯功能表" -01000310="快顯功能表項目:" - -; Language Page -01000400="語言" -01000401="介面語言:" - - -; 7-Zip Explorer extension - -; Context menu -02000101="7-Zip" -02000102="7-Zip 指令" -02000103="開啟壓縮檔" -02000104="開啟選取的壓縮檔。" -02000105="解壓縮檔案..." -02000106="從選取的壓縮檔中解壓縮檔案。" -02000107="加入壓縮檔..." -02000108="將選取的項目加入壓縮檔中。" -02000109="測試壓縮檔" -0200010A="測試選取壓縮檔的完整性。" -0200010B="解壓縮至此" -0200010C="從選取的壓縮檔解壓縮檔案至目前的資料夾中。" -0200010D="解壓縮至 {0}" -0200010E="將檔案解壓縮到子資料夾。" -0200010F="加入 {0}" -02000110="將選取的項目加入壓縮檔中。" -02000111="壓縮並郵寄..." -02000112="將選取的項目壓縮為壓縮檔並經由電子郵件傳送此壓縮檔。" -02000113="壓縮成 {0} 並郵寄" -02000114="將選取的項目壓縮為壓縮檔並經由電子郵件傳送此壓縮檔。" - -02000140="<資料夾>" -02000141="<壓縮檔>" - -; Properties -02000203="路徑" -02000204="名稱" -02000205="副檔名" -02000206="資料夾" -02000207="大小" -02000208="封裝後大小" -02000209="屬性" -0200020A="建立日期" -0200020B="存取日期" -0200020C="修改日期" -0200020D="緊密" -0200020E="註解" -0200020F="加密" -02000210="分割前" -02000211="分割後" -02000212="字典大小" -02000213="CRC" -02000214="類型" -02000215="防護" -02000216="方式" -02000217="主機作業系統" -02000218="檔案系統" -02000219="使用者" -0200021A="群組" -0200021B="區塊" -0200021C="註解" -0200021D="位置" -0200021E="路徑前綴" -0200021F="資料夾" -02000220="檔案" -02000221="版本" -02000222="卷" -02000223="多卷" -02000224="偏移" -02000225="連結" -02000226="區塊" -02000227="分卷" - -02000229="64 位" -0200022A="大端序" -0200022B="CPU" -0200022C="物理大小" -0200022D="文件頭大小" -0200022E="驗證值" -0200022F="特徵" -02000230="虛擬地址" -02000231="ID" -02000232="簡短名稱" -02000233="創建程式" -02000234="扇區大小" -02000235="模式" -02000236="鏈接" - -; Status bar -02000301="已選取 {0} 個物件" -02000302="{0} 個物件" - -02000320="檔案:" -02000321="資料夾:" -02000322="大小:" -02000323="壓縮大小:" -02000324="壓縮檔:" - -; List Context Menu -02000401="欄位(&C)..." - -02000411="開啟(&O)" -02000412="解壓縮(&E)..." - -; ToolBar -02000501="解壓縮" - -; Messages -02000601="此壓縮檔未支援更新操作。" -02000602="無法更新壓縮檔 {0}" -02000603="無法建立資料夾 '{0}'" -02000604="非支援的壓縮檔。" -02000605="錯誤" -02000606="項目過多" -02000607="沒有任何應用程式與特定的檔案副檔名有所關聯。" -02000608="沒有任何錯誤" -02000609="無法開啟壓縮檔 '{0}'" -0200060A="無法開啟加密的壓縮檔 '{0}'。錯誤的密碼?" -0200060B="系統未能提供所需記憶體空間" -0200060C="未知的錯誤" -0200060D="不支援的壓縮檔類型" - -; Dialogs -02000702="確定" -02000705="是(&Y)" -02000707="全部皆是(&A)" -02000709="否(&N)" -0200070B="全部皆否(&L)" - -02000710="取消" -02000711="取消(&C)" -02000713="關閉(&C)" -02000714="停止" -02000715="重新開始" - -02000720="說明" - -; Extract dialog -02000800="解壓縮" -02000801="解壓縮至(&X):" -02000802="密碼" - -02000810="路徑模式" -02000811="完整的路徑名稱" -02000812="目前的路徑名稱" -02000813="不要路徑名稱" - -02000820="覆寫模式" -02000821="覆寫前先詢問我" -02000822="覆寫時不詢問" -02000823="略過現有的檔案" -02000824="自動重新命名" -02000825="自動重新命名現有的檔案" - -02000830="檔案" -02000831="選取的檔案(&S)" -02000832="所有檔案(&A)" - -02000881="請指定存放暫存壓縮檔的位置。" - -02000890="正在解壓縮" - -; Overwrite dialog -02000900="確認取代檔案" -02000901="目的資料夾已包含要處理的檔案。" -02000902="您要取代現有的檔案" -02000903="而改用這個檔案嗎?" - -02000911="自動重新命名(&U)" - -02000982="{0} 位元組" -02000983="修改日期" - -; Messages dialog -02000A00="診斷訊息" - -02000A80="訊息" - -02000A91="'{0}' 未支援此壓縮方式。" -02000A92="'{0}' 中的資料含有錯誤。檔案已損壞。" -02000A93="'{0}' 的 CRC 驗證失敗。檔案已損壞。" -02000A94="資料錯誤於加密的檔案 '{0}'。錯誤的密碼?" -02000A95="CRC 失敗於加密的檔案 '{0}'。錯誤的密碼?" - -; Password dialog -02000B00="輸入密碼" -02000B01="輸入密碼:" -02000B02="顯示密碼(&S)" -02000B03="重新輸入密碼:" -02000B10="密碼不一致" -02000B11="僅能使用英文字母、數字和特殊字元 (!, #, $, ...) 當作密碼" -02000B12="密碼太長" - -; Progress dialog -02000C00="進度" -02000C01="經過時間:" -02000C02="剩餘時間:" -02000C03="大小:" -02000C04="速度:" -02000C05="已處理:" -02000C06="壓縮率:" - -02000C10="背景作業(&B)" -02000C11="前景作業(&F)" -02000C12="暫停(&P)" -02000C13="繼續(&C)" - -02000C20="暫停" - -02000C30="您確定要取消嗎?" - -; Compress dialog -02000D00="加入壓縮檔" -02000D01="壓縮檔(&A):" -02000D02="更新模式(&U):" -02000D03="壓縮檔格式(&F):" -02000D04="壓縮方式(&M):" -02000D05="建立結實壓縮檔(&S)" -02000D06="參數(&P):" -02000D07="選項" -02000D08="建立自解壓縮檔(&X)" -02000D09="多執行緒" -02000D0A="加密檔名(&N)" -02000D0B="壓縮層級(&L):" -02000D0C="字典大小(&D):" -02000D0D="字組大小(&W):" -02000D0E="壓縮時記憶體使用:" -02000D0F="解壓縮時記憶體使用:" -02000D10="加密" -02000D11="加密方法:" -02000D12="CPU 線程數:" -02000D13="結實區塊大小:" -02000D14="非結實" -02000D15="結實" -02000D16="壓縮共用檔案" - -02000D40="分割壓縮檔,位元組(&V):" -02000D41="不正確的分割大小" -02000D42="指定的分割大小: {0} 位元組。\n您確定要分割為這些壓縮檔嗎?" - -02000D81="封存" -02000D82="一般壓縮" -02000D83="最大壓縮" -02000D84="快速壓縮" -02000D85="最快速壓縮" -02000D86="極致壓縮" - -02000D90="瀏覽" - -02000DA1="加入並取代檔案" -02000DA2="更新並加入檔案" -02000DA3="更新現有的檔案" -02000DA4="同步處理檔案" - -02000DB1="所有檔案" - -02000DC0="正在壓縮" - -; Columns dialog -02000E00="欄位" -02000E01="核取您想在此資料夾中所要顯示的欄位。請使用 [上移] 和 [下移] 按鈕重新排列欄位的順序。" -02000E02="選取的欄位應該是" -02000E03="像素寬度(&W)" - -02000E10="上移(&U)" -02000E11="下移(&D)" -02000E12="顯示(&S)" -02000E13="隱藏(&H)" -02000E14="設定" - -02000E81="標題" -02000E82="寬度" - -; Testing -02000F90="測試" - - -; File Manager - -03000000="7-Zip 檔案管理員" - -; Menu -03000102="檔案(&F)" -03000103="編輯(&E)" -03000104="檢視(&V)" -03000105="工具(&T)" -03000106="說明(&H)" -03000107="我的最愛(&A)" - -; File -03000210="開啟(&O)" -03000211="在內部開啟(&I)" -03000212="在外部開啟(&U)" -03000220="檢視(&V)" -03000221="編輯(&E)" -03000230="重新命名(&M)" -03000231="複製到(&C)..." -03000232="移動到(&M)..." -03000233="刪除(&D)" -03000240="內容(&R)" -03000241="註解(&N)" -03000242="計算驗證值" -03000243="比較檔案" -03000250="建立資料夾" -03000251="建立檔案" -03000260="結束(&X)" -03000270="分割檔案(&S)..." -03000271="合併檔案(&B)..." - -; Edit -03000310="還原(&U)" -03000311="重做(&R)" -03000320="剪下(&T)" -03000321="複製(&C)" -03000322="貼上(&P)" -03000323="刪除(&D)" -03000330="全選(&A)" -03000331="全不選" -03000332="反向選擇(&I)" -03000333="選取..." -03000334="取消選取..." -03000335="依類型選取" -03000336="依類型不選取" - -; View -03000410="大圖示(&G)" -03000411="小圖示(&M)" -03000412="清單(&L)" -03000413="詳細資料(&D)" -03000420="不排序" -03000430="開啟根目錄" -03000431="上移一層" -03000432="資料夾歷程記錄..." -03000440="重新整理(&R)" -03000449="攤開檢視" -03000450="雙窗格(&2)" -03000451="工具列(&T)" -03000460="壓縮檔工具列" -03000461="標準工具列" -03000462="大型按鈕" -03000463="顯示按鈕文字" - -; Tools -03000510="選項(&O)..." -03000511="效能測試(&B)" - -; Help -03000610="內容(&C)..." -03000620="關於 7-Zip(&A)..." - -; Favorites -03000710="將資料夾加入我的最愛為(&A)" -03000720="書籤" - -; Options Dialog - -03010000="選項" - -; Plugins -03010100="外掛程式" -03010101="外掛程式(&P):" -03010110="選項..." - -; Edit -03010200="編輯器" -03010201="編輯器(&E):" -03010202="檔案比較程式(&D):" - -; System -03010300="系統" -03010302="使 7-Zip 與之產生關聯:" -03010310="外掛程式" - -; Settings -03010400="設定" -03010401="顯示 \"..\" 項目" -03010402="顯示實際檔案圖示" -03010410="顯示系統選單" -03010420="整列選取(&F)" -03010421="顯示格線(&G)" -03010422="單擊開啟項目" -03010430="使用替代選擇模式(&A)" -03010440="使用大量記憶體分頁(&L)" - -; Strings - -03020201="複製" -03020202="移動" -03020203="複製到:" -03020204="移動到:" -03020205="正在複製..." -03020206="正在移動..." -03020207="您不能在這類資料夾中移動或複製項目。" -03020208="未支援的操作。" -03020209="選擇目標資料夾。" - -03020210="確認刪除檔案" -03020211="確認刪除資料夾" -03020212="確認刪除多個檔案" -03020213="您確定要刪除 '{0}' 嗎?" -03020214="您確定要刪除資料夾 '{0}' 以及它所有的內容嗎?" -03020215="您確定要刪除這 {0} 個項目嗎? " -03020216="正在刪除..." -03020217="刪除檔案或資料夾時發生錯誤" -03020218="系統不能移動路徑過長的檔案到資源回收筒" - -03020220="正在重新命名..." -03020221="重新命名檔案或資料夾時發生錯誤" -03020222="確認複製檔案" -03020223="您確定要複製檔案至壓縮檔?" - -03020230="建立資料夾" -03020231="資料夾名稱:" -03020232="新增資料夾" -03020233="建立資料夾時發生錯誤" - -03020240="建立檔案" -03020241="檔案名稱:" -03020242="新增檔案" -03020243="建立檔案時發生錯誤" - -03020250="選取" -03020251="取消選取" -03020252="遮罩:" - -03020260="資料夾歷程記錄" - -03020280="檔案 '{0}' 已被修改過。\n您是否要在此壓縮檔內更新檔案?" -03020281="無法更新檔案\n'{0}'" -03020282="無法啟動編輯器。" -03020283="正在開啟..." -03020284="檔案似是病毒(檔案名稱含有很多空格)。" - -03020290="註解" -03020291="註解(&C):" - -030202A0="系統" - -03020300="電腦" -03020301="網路" -03020302="文件" - -03020400="加入" -03020401="解壓縮" -03020402="測試" - -03020420="複製" -03020421="移動" -03020422="刪除" -03020423="資訊" - -03020500="分割檔案" -03020501="分割到(&S):" -03020510="正在分割..." -03020520="確認分割" -03020521="您確定要分割檔案為 {0} 個?" -03020522="分割大小必須小於原始檔案大小" - -03020600="合併檔案" -03020601="合併到(&C):" -03020610="正在合併..." -03020620="僅選取第一個檔案" -03020621="未能確認此檔案為完整檔案分割出來的一部分" -03020622="找不到完整檔案的其他部分" - -03020710="正在計算驗證值..." -03020720="驗證值資訊" -03020721="資料的 CRC 驗證值:" -03020722="資料及名稱的 CRC 驗證值:" - -03020800="正在掃瞄..." - -03020900="內容" - -03020A01="不能完成操作,因資料夾路徑過長。" -03020A02="您必須選擇一個檔案" -03020A03="您必須選擇最少一個檔案" -03020A04="檔案 {0} 已存在" - -; Computer -03031100="全部大小" -03031101="可用空間" -03031102="叢集大小" -03031103="標籤" - -; Network -03031200="本機名稱" -03031201="提供者" - -; Benchmark Dialog - -03080000="效能測試" -03080001="記憶體使用:" -03080002="壓縮" -03080003="解壓縮" -03080004="速度" -03080005="評等" -03080006="整體評等" -03080007="目前" -03080008="結果" -03080009="通過數:" -0308000A="錯誤數:" -0308000B="CPU 使用" -0308000C="評等 / 使用" - -;!@LangEnd@! diff --git a/External/7-Zip/License.txt b/External/7-Zip/License.txt deleted file mode 100644 index 201c248e0..000000000 --- a/External/7-Zip/License.txt +++ /dev/null @@ -1,56 +0,0 @@ - 7-Zip - ~~~~~ - License for use and distribution - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - 7-Zip Copyright (C) 1999-2010 Igor Pavlov. - - Licenses for files are: - - 1) 7z.dll: GNU LGPL + unRAR restriction - 2) All other files: GNU LGPL - - The GNU LGPL + unRAR restriction means that you must follow both - GNU LGPL rules and unRAR restriction rules. - - - Note: - You can use 7-Zip on any computer, including a computer in a commercial - organization. You don't need to register or pay for 7-Zip. - - - GNU LGPL information - -------------------- - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You can receive a copy of the GNU Lesser General Public License from - http://www.gnu.org/ - - - unRAR restriction - ----------------- - - The decompression engine for RAR archives was developed using source - code of unRAR program. - All copyrights to original unRAR code are owned by Alexander Roshal. - - The license for original unRAR code has the following restriction: - - The unRAR sources cannot be used to re-create the RAR compression algorithm, - which is proprietary. Distribution of modified unRAR sources in separate form - or as a part of other software is permitted, provided that it is clearly - stated in the documentation and source comments that the code may - not be used to develop a RAR (WinRAR) compatible archiver. - - - -- - Igor Pavlov diff --git a/External/7-Zip/descript.ion b/External/7-Zip/descript.ion deleted file mode 100644 index ee16dc5d3..000000000 --- a/External/7-Zip/descript.ion +++ /dev/null @@ -1,13 +0,0 @@ -7-zip.chm 7-Zip Help -7-Zip.dll 7-Zip Plugin -7z.dll 7-Zip Engine -7z.exe 7-Zip Console -7z.sfx 7-Zip GUI SFX -7zCon.sfx 7-Zip Console SFX -7zFM.exe 7-Zip File Manager -7zg.exe 7-Zip GUI -descript.ion 7-Zip File Descriptions -history.txt 7-Zip History -Lang 7-Zip Translations -license.txt 7-Zip License -readme.txt 7-Zip Overview diff --git a/External/7-Zip/readme.txt b/External/7-Zip/readme.txt deleted file mode 100644 index 77e59bc20..000000000 --- a/External/7-Zip/readme.txt +++ /dev/null @@ -1,48 +0,0 @@ -7-Zip 9.20 ----------- - -7-Zip is a file archiver for Windows 95/98/ME/NT/2000/2003/2008/XP/Vista/7. - -7-Zip Copyright (C) 1999-2010 Igor Pavlov. - -The main features of 7-Zip: - - - High compression ratio in the new 7z format - - Supported formats: - - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM. - - Unpacking only: ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, - MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR and Z. - - Fast compression and decompression - - Self-extracting capability for 7z format - - Strong AES-256 encryption in 7z and ZIP formats - - Integration with Windows Shell - - Powerful File Manager - - Powerful command line version - - Localizations for 79 languages - - -7-Zip is free software distributed under the GNU LGPL (except for unRar code). -Read License.txt for more infomation about license. - - - This distribution contains the following files: - - 7zFM.exe - 7-Zip File Manager - 7-zip.dll - Plugin for Windows Shell and for 7-Zip File Manager - 7zg.exe - GUI module - 7z.exe - Command line version - 7z.dll - 7-Zip engine module - 7z.sfx - SFX module (Windows version) - 7zCon.sfx - SFX module (Console version) - - License.txt - License information - readme.txt - This file - History.txt - History of 7-Zip - 7-zip.chm - User's Manual in HTML Help format - - Lang\en.ttt - English (base) localization file - Lang\*.txt - Localization files - - ---- -End of document diff --git a/External/CastXML/bin/castxml.exe b/External/CastXML/bin/castxml.exe deleted file mode 100644 index ad5d09fe7..000000000 Binary files a/External/CastXML/bin/castxml.exe and /dev/null differ diff --git a/External/CastXML/doc/castxml/LICENSE b/External/CastXML/doc/castxml/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/External/CastXML/doc/castxml/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/External/CastXML/doc/castxml/NOTICE b/External/CastXML/doc/castxml/NOTICE deleted file mode 100644 index 73a4ae472..000000000 --- a/External/CastXML/doc/castxml/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -CastXML -Copyright 2013-2015 Kitware, Inc. - -This product includes software developed at Kitware, Inc. -(http://www.kitware.com/). diff --git a/External/CastXML/share/castxml/clang/include/Intrin.h b/External/CastXML/share/castxml/clang/include/Intrin.h deleted file mode 100644 index 67c8a6326..000000000 --- a/External/CastXML/share/castxml/clang/include/Intrin.h +++ /dev/null @@ -1,956 +0,0 @@ -/* ===-------- Intrin.h ---------------------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -/* Only include this if we're compiling for the windows platform. */ -#ifndef _MSC_VER -#include_next -#else - -#ifndef __INTRIN_H -#define __INTRIN_H - -/* First include the standard intrinsics. */ -#if defined(__i386__) || defined(__x86_64__) -#include -#endif - -/* For the definition of jmp_buf. */ -#if __STDC_HOSTED__ -#include -#endif - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__MMX__) -/* And the random ones that aren't in those files. */ -__m64 _m_from_float(float); -__m64 _m_from_int(int _l); -void _m_prefetch(void *); -float _m_to_float(__m64); -int _m_to_int(__m64 _M); -#endif - -/* Other assorted instruction intrinsics. */ -void __addfsbyte(unsigned long, unsigned char); -void __addfsdword(unsigned long, unsigned long); -void __addfsword(unsigned long, unsigned short); -void __code_seg(const char *); -static __inline__ -void __cpuid(int[4], int); -static __inline__ -void __cpuidex(int[4], int, int); -void __debugbreak(void); -__int64 __emul(int, int); -unsigned __int64 __emulu(unsigned int, unsigned int); -void __cdecl __fastfail(unsigned int); -unsigned int __getcallerseflags(void); -static __inline__ -void __halt(void); -unsigned char __inbyte(unsigned short); -void __inbytestring(unsigned short, unsigned char *, unsigned long); -void __incfsbyte(unsigned long); -void __incfsdword(unsigned long); -void __incfsword(unsigned long); -unsigned long __indword(unsigned short); -void __indwordstring(unsigned short, unsigned long *, unsigned long); -void __int2c(void); -void __invlpg(void *); -unsigned short __inword(unsigned short); -void __inwordstring(unsigned short, unsigned short *, unsigned long); -void __lidt(void *); -unsigned __int64 __ll_lshift(unsigned __int64, int); -__int64 __ll_rshift(__int64, int); -void __llwpcb(void *); -unsigned char __lwpins32(unsigned int, unsigned int, unsigned int); -void __lwpval32(unsigned int, unsigned int, unsigned int); -unsigned int __lzcnt(unsigned int); -unsigned short __lzcnt16(unsigned short); -static __inline__ -void __movsb(unsigned char *, unsigned char const *, size_t); -static __inline__ -void __movsd(unsigned long *, unsigned long const *, size_t); -static __inline__ -void __movsw(unsigned short *, unsigned short const *, size_t); -void __nop(void); -void __nvreg_restore_fence(void); -void __nvreg_save_fence(void); -void __outbyte(unsigned short, unsigned char); -void __outbytestring(unsigned short, unsigned char *, unsigned long); -void __outdword(unsigned short, unsigned long); -void __outdwordstring(unsigned short, unsigned long *, unsigned long); -void __outword(unsigned short, unsigned short); -void __outwordstring(unsigned short, unsigned short *, unsigned long); -static __inline__ -unsigned int __popcnt(unsigned int); -static __inline__ -unsigned short __popcnt16(unsigned short); -unsigned long __readcr0(void); -unsigned long __readcr2(void); -static __inline__ -unsigned long __readcr3(void); -unsigned long __readcr4(void); -unsigned long __readcr8(void); -unsigned int __readdr(unsigned int); -#ifdef __i386__ -static __inline__ -unsigned char __readfsbyte(unsigned long); -static __inline__ -unsigned long __readfsdword(unsigned long); -static __inline__ -unsigned __int64 __readfsqword(unsigned long); -static __inline__ -unsigned short __readfsword(unsigned long); -#endif -static __inline__ -unsigned __int64 __readmsr(unsigned long); -unsigned __int64 __readpmc(unsigned long); -unsigned long __segmentlimit(unsigned long); -void __sidt(void *); -void *__slwpcb(void); -static __inline__ -void __stosb(unsigned char *, unsigned char, size_t); -static __inline__ -void __stosd(unsigned long *, unsigned long, size_t); -static __inline__ -void __stosw(unsigned short *, unsigned short, size_t); -void __svm_clgi(void); -void __svm_invlpga(void *, int); -void __svm_skinit(int); -void __svm_stgi(void); -void __svm_vmload(size_t); -void __svm_vmrun(size_t); -void __svm_vmsave(size_t); -void __ud2(void); -unsigned __int64 __ull_rshift(unsigned __int64, int); -void __vmx_off(void); -void __vmx_vmptrst(unsigned __int64 *); -void __wbinvd(void); -void __writecr0(unsigned int); -static __inline__ -void __writecr3(unsigned int); -void __writecr4(unsigned int); -void __writecr8(unsigned int); -void __writedr(unsigned int, unsigned int); -void __writefsbyte(unsigned long, unsigned char); -void __writefsdword(unsigned long, unsigned long); -void __writefsqword(unsigned long, unsigned __int64); -void __writefsword(unsigned long, unsigned short); -void __writemsr(unsigned long, unsigned __int64); -static __inline__ -void *_AddressOfReturnAddress(void); -static __inline__ -unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask); -static __inline__ -unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask); -static __inline__ -unsigned char _bittest(long const *, long); -static __inline__ -unsigned char _bittestandcomplement(long *, long); -static __inline__ -unsigned char _bittestandreset(long *, long); -static __inline__ -unsigned char _bittestandset(long *, long); -unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); -unsigned long __cdecl _byteswap_ulong(unsigned long); -unsigned short __cdecl _byteswap_ushort(unsigned short); -void __cdecl _disable(void); -void __cdecl _enable(void); -long _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long _Value); -static __inline__ -long _InterlockedAnd(long volatile *_Value, long _Mask); -static __inline__ -short _InterlockedAnd16(short volatile *_Value, short _Mask); -static __inline__ -char _InterlockedAnd8(char volatile *_Value, char _Mask); -unsigned char _interlockedbittestandreset(long volatile *, long); -static __inline__ -unsigned char _interlockedbittestandset(long volatile *, long); -static __inline__ -long __cdecl _InterlockedCompareExchange(long volatile *_Destination, - long _Exchange, long _Comparand); -long _InterlockedCompareExchange_HLEAcquire(long volatile *, long, long); -long _InterlockedCompareExchange_HLERelease(long volatile *, long, long); -static __inline__ -short _InterlockedCompareExchange16(short volatile *_Destination, - short _Exchange, short _Comparand); -static __inline__ -__int64 _InterlockedCompareExchange64(__int64 volatile *_Destination, - __int64 _Exchange, __int64 _Comparand); -__int64 _InterlockedcompareExchange64_HLEAcquire(__int64 volatile *, __int64, - __int64); -__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64, - __int64); -static __inline__ -char _InterlockedCompareExchange8(char volatile *_Destination, char _Exchange, - char _Comparand); -void *_InterlockedCompareExchangePointer_HLEAcquire(void *volatile *, void *, - void *); -void *_InterlockedCompareExchangePointer_HLERelease(void *volatile *, void *, - void *); -static __inline__ -long __cdecl _InterlockedDecrement(long volatile *_Addend); -static __inline__ -short _InterlockedDecrement16(short volatile *_Addend); -long _InterlockedExchange(long volatile *_Target, long _Value); -static __inline__ -short _InterlockedExchange16(short volatile *_Target, short _Value); -static __inline__ -char _InterlockedExchange8(char volatile *_Target, char _Value); -static __inline__ -long __cdecl _InterlockedExchangeAdd(long volatile *_Addend, long _Value); -long _InterlockedExchangeAdd_HLEAcquire(long volatile *, long); -long _InterlockedExchangeAdd_HLERelease(long volatile *, long); -static __inline__ -short _InterlockedExchangeAdd16(short volatile *_Addend, short _Value); -__int64 _InterlockedExchangeAdd64_HLEAcquire(__int64 volatile *, __int64); -__int64 _InterlockedExchangeAdd64_HLERelease(__int64 volatile *, __int64); -static __inline__ -char _InterlockedExchangeAdd8(char volatile *_Addend, char _Value); -static __inline__ -long __cdecl _InterlockedIncrement(long volatile *_Addend); -static __inline__ -short _InterlockedIncrement16(short volatile *_Addend); -static __inline__ -long _InterlockedOr(long volatile *_Value, long _Mask); -static __inline__ -short _InterlockedOr16(short volatile *_Value, short _Mask); -static __inline__ -char _InterlockedOr8(char volatile *_Value, char _Mask); -static __inline__ -long _InterlockedXor(long volatile *_Value, long _Mask); -static __inline__ -short _InterlockedXor16(short volatile *_Value, short _Mask); -static __inline__ -char _InterlockedXor8(char volatile *_Value, char _Mask); -void __cdecl _invpcid(unsigned int, void *); -static __inline__ -unsigned long __cdecl _lrotl(unsigned long, int); -static __inline__ -unsigned long __cdecl _lrotr(unsigned long, int); -static __inline__ -static __inline__ -void _ReadBarrier(void); -static __inline__ -void _ReadWriteBarrier(void); -static __inline__ -void *_ReturnAddress(void); -unsigned int _rorx_u32(unsigned int, const unsigned int); -static __inline__ -unsigned int __cdecl _rotl(unsigned int _Value, int _Shift); -static __inline__ -unsigned short _rotl16(unsigned short _Value, unsigned char _Shift); -static __inline__ -unsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift); -static __inline__ -unsigned char _rotl8(unsigned char _Value, unsigned char _Shift); -static __inline__ -unsigned int __cdecl _rotr(unsigned int _Value, int _Shift); -static __inline__ -unsigned short _rotr16(unsigned short _Value, unsigned char _Shift); -static __inline__ -unsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift); -static __inline__ -unsigned char _rotr8(unsigned char _Value, unsigned char _Shift); -int _sarx_i32(int, unsigned int); -#if __STDC_HOSTED__ -int __cdecl _setjmp(jmp_buf); -#endif -unsigned int _shlx_u32(unsigned int, unsigned int); -unsigned int _shrx_u32(unsigned int, unsigned int); -void _Store_HLERelease(long volatile *, long); -void _Store64_HLERelease(__int64 volatile *, __int64); -void _StorePointer_HLERelease(void *volatile *, void *); -static __inline__ -void _WriteBarrier(void); -unsigned __int32 xbegin(void); -void _xend(void); -static __inline__ -#define _XCR_XFEATURE_ENABLED_MASK 0 -unsigned __int64 __cdecl _xgetbv(unsigned int); -void __cdecl _xrstor(void const *, unsigned __int64); -void __cdecl _xsave(void *, unsigned __int64); -void __cdecl _xsaveopt(void *, unsigned __int64); -void __cdecl _xsetbv(unsigned int, unsigned __int64); - -/* These additional intrinsics are turned on in x64/amd64/x86_64 mode. */ -#ifdef __x86_64__ -void __addgsbyte(unsigned long, unsigned char); -void __addgsdword(unsigned long, unsigned long); -void __addgsqword(unsigned long, unsigned __int64); -void __addgsword(unsigned long, unsigned short); -static __inline__ -void __faststorefence(void); -void __incgsbyte(unsigned long); -void __incgsdword(unsigned long); -void __incgsqword(unsigned long); -void __incgsword(unsigned long); -unsigned char __lwpins64(unsigned __int64, unsigned int, unsigned int); -void __lwpval64(unsigned __int64, unsigned int, unsigned int); -unsigned __int64 __lzcnt64(unsigned __int64); -static __inline__ -void __movsq(unsigned long long *, unsigned long long const *, size_t); -__int64 __mulh(__int64, __int64); -static __inline__ -unsigned __int64 __popcnt64(unsigned __int64); -static __inline__ -unsigned char __readgsbyte(unsigned long); -static __inline__ -unsigned long __readgsdword(unsigned long); -static __inline__ -unsigned __int64 __readgsqword(unsigned long); -unsigned short __readgsword(unsigned long); -unsigned __int64 __shiftleft128(unsigned __int64 _LowPart, - unsigned __int64 _HighPart, - unsigned char _Shift); -unsigned __int64 __shiftright128(unsigned __int64 _LowPart, - unsigned __int64 _HighPart, - unsigned char _Shift); -static __inline__ -void __stosq(unsigned __int64 *, unsigned __int64, size_t); -unsigned char __vmx_on(unsigned __int64 *); -unsigned char __vmx_vmclear(unsigned __int64 *); -unsigned char __vmx_vmlaunch(void); -unsigned char __vmx_vmptrld(unsigned __int64 *); -unsigned char __vmx_vmread(size_t, size_t *); -unsigned char __vmx_vmresume(void); -unsigned char __vmx_vmwrite(size_t, size_t); -void __writegsbyte(unsigned long, unsigned char); -void __writegsdword(unsigned long, unsigned long); -void __writegsqword(unsigned long, unsigned __int64); -void __writegsword(unsigned long, unsigned short); -static __inline__ -unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask); -static __inline__ -unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask); -static __inline__ -unsigned char _bittest64(__int64 const *, __int64); -static __inline__ -unsigned char _bittestandcomplement64(__int64 *, __int64); -static __inline__ -unsigned char _bittestandreset64(__int64 *, __int64); -static __inline__ -unsigned char _bittestandset64(__int64 *, __int64); -unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); -long _InterlockedAnd_np(long volatile *_Value, long _Mask); -short _InterlockedAnd16_np(short volatile *_Value, short _Mask); -__int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask); -char _InterlockedAnd8_np(char volatile *_Value, char _Mask); -unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64); -static __inline__ -unsigned char _interlockedbittestandset64(__int64 volatile *, __int64); -long _InterlockedCompareExchange_np(long volatile *_Destination, long _Exchange, - long _Comparand); -unsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination, - __int64 _ExchangeHigh, - __int64 _ExchangeLow, - __int64 *_CompareandResult); -unsigned char _InterlockedCompareExchange128_np(__int64 volatile *_Destination, - __int64 _ExchangeHigh, - __int64 _ExchangeLow, - __int64 *_ComparandResult); -short _InterlockedCompareExchange16_np(short volatile *_Destination, - short _Exchange, short _Comparand); -__int64 _InterlockedCompareExchange64_HLEAcquire(__int64 volatile *, __int64, - __int64); -__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64, - __int64); -__int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination, - __int64 _Exchange, __int64 _Comparand); -void *_InterlockedCompareExchangePointer(void *volatile *_Destination, - void *_Exchange, void *_Comparand); -void *_InterlockedCompareExchangePointer_np(void *volatile *_Destination, - void *_Exchange, void *_Comparand); -static __inline__ -__int64 _InterlockedDecrement64(__int64 volatile *_Addend); -static __inline__ -__int64 _InterlockedExchange64(__int64 volatile *_Target, __int64 _Value); -static __inline__ -__int64 _InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value); -void *_InterlockedExchangePointer(void *volatile *_Target, void *_Value); -static __inline__ -__int64 _InterlockedIncrement64(__int64 volatile *_Addend); -long _InterlockedOr_np(long volatile *_Value, long _Mask); -short _InterlockedOr16_np(short volatile *_Value, short _Mask); -static __inline__ -__int64 _InterlockedOr64(__int64 volatile *_Value, __int64 _Mask); -__int64 _InterlockedOr64_np(__int64 volatile *_Value, __int64 _Mask); -char _InterlockedOr8_np(char volatile *_Value, char _Mask); -long _InterlockedXor_np(long volatile *_Value, long _Mask); -short _InterlockedXor16_np(short volatile *_Value, short _Mask); -static __inline__ -__int64 _InterlockedXor64(__int64 volatile *_Value, __int64 _Mask); -__int64 _InterlockedXor64_np(__int64 volatile *_Value, __int64 _Mask); -char _InterlockedXor8_np(char volatile *_Value, char _Mask); -static __inline__ -__int64 _mul128(__int64 _Multiplier, __int64 _Multiplicand, - __int64 *_HighProduct); -unsigned __int64 _rorx_u64(unsigned __int64, const unsigned int); -__int64 _sarx_i64(__int64, unsigned int); -#if __STDC_HOSTED__ -int __cdecl _setjmpex(jmp_buf); -#endif -unsigned __int64 _shlx_u64(unsigned __int64, unsigned int); -unsigned __int64 _shrx_u64(unsigned __int64, unsigned int); -/* - * Multiply two 64-bit integers and obtain a 64-bit result. - * The low-half is returned directly and the high half is in an out parameter. - */ -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -_umul128(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand, - unsigned __int64 *_HighProduct) { - unsigned __int128 _FullProduct = - (unsigned __int128)_Multiplier * (unsigned __int128)_Multiplicand; - *_HighProduct = _FullProduct >> 64; - return _FullProduct; -} -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -__umulh(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand) { - unsigned __int128 _FullProduct = - (unsigned __int128)_Multiplier * (unsigned __int128)_Multiplicand; - return _FullProduct >> 64; -} -void __cdecl _xrstor64(void const *, unsigned __int64); -void __cdecl _xsave64(void *, unsigned __int64); -void __cdecl _xsaveopt64(void *, unsigned __int64); - -#endif /* __x86_64__ */ - -/*----------------------------------------------------------------------------*\ -|* Bit Twiddling -\*----------------------------------------------------------------------------*/ -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_rotl8(unsigned char _Value, unsigned char _Shift) { - _Shift &= 0x7; - return _Shift ? (_Value << _Shift) | (_Value >> (8 - _Shift)) : _Value; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_rotr8(unsigned char _Value, unsigned char _Shift) { - _Shift &= 0x7; - return _Shift ? (_Value >> _Shift) | (_Value << (8 - _Shift)) : _Value; -} -static __inline__ unsigned short __DEFAULT_FN_ATTRS -_rotl16(unsigned short _Value, unsigned char _Shift) { - _Shift &= 0xf; - return _Shift ? (_Value << _Shift) | (_Value >> (16 - _Shift)) : _Value; -} -static __inline__ unsigned short __DEFAULT_FN_ATTRS -_rotr16(unsigned short _Value, unsigned char _Shift) { - _Shift &= 0xf; - return _Shift ? (_Value >> _Shift) | (_Value << (16 - _Shift)) : _Value; -} -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_rotl(unsigned int _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; -} -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_rotr(unsigned int _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; -} -static __inline__ unsigned long __DEFAULT_FN_ATTRS -_lrotl(unsigned long _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; -} -static __inline__ unsigned long __DEFAULT_FN_ATTRS -_lrotr(unsigned long _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; -} -static -__inline__ unsigned __int64 __DEFAULT_FN_ATTRS -_rotl64(unsigned __int64 _Value, int _Shift) { - _Shift &= 0x3f; - return _Shift ? (_Value << _Shift) | (_Value >> (64 - _Shift)) : _Value; -} -static -__inline__ unsigned __int64 __DEFAULT_FN_ATTRS -_rotr64(unsigned __int64 _Value, int _Shift) { - _Shift &= 0x3f; - return _Shift ? (_Value >> _Shift) | (_Value << (64 - _Shift)) : _Value; -} -/*----------------------------------------------------------------------------*\ -|* Bit Counting and Testing -\*----------------------------------------------------------------------------*/ -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_BitScanForward(unsigned long *_Index, unsigned long _Mask) { - if (!_Mask) - return 0; - *_Index = __builtin_ctzl(_Mask); - return 1; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_BitScanReverse(unsigned long *_Index, unsigned long _Mask) { - if (!_Mask) - return 0; - *_Index = 31 - __builtin_clzl(_Mask); - return 1; -} -static __inline__ unsigned short __DEFAULT_FN_ATTRS -__popcnt16(unsigned short _Value) { - return __builtin_popcount((int)_Value); -} -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__popcnt(unsigned int _Value) { - return __builtin_popcount(_Value); -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittest(long const *_BitBase, long _BitPos) { - return (*_BitBase >> _BitPos) & 1; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandcomplement(long *_BitBase, long _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase ^ (1 << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandreset(long *_BitBase, long _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase & ~(1 << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandset(long *_BitBase, long _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase | (1 << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_interlockedbittestandset(long volatile *_BitBase, long _BitPos) { - long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_SEQ_CST); - return (_PrevVal >> _BitPos) & 1; -} -#ifdef __x86_64__ -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask) { - if (!_Mask) - return 0; - *_Index = __builtin_ctzll(_Mask); - return 1; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask) { - if (!_Mask) - return 0; - *_Index = 63 - __builtin_clzll(_Mask); - return 1; -} -static __inline__ -unsigned __int64 __DEFAULT_FN_ATTRS -__popcnt64(unsigned __int64 _Value) { - return __builtin_popcountll(_Value); -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittest64(__int64 const *_BitBase, __int64 _BitPos) { - return (*_BitBase >> _BitPos) & 1; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandcomplement64(__int64 *_BitBase, __int64 _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase ^ (1ll << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandreset64(__int64 *_BitBase, __int64 _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase & ~(1ll << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_bittestandset64(__int64 *_BitBase, __int64 _BitPos) { - unsigned char _Res = (*_BitBase >> _BitPos) & 1; - *_BitBase = *_BitBase | (1ll << _BitPos); - return _Res; -} -static __inline__ unsigned char __DEFAULT_FN_ATTRS -_interlockedbittestandset64(__int64 volatile *_BitBase, __int64 _BitPos) { - long long _PrevVal = - __atomic_fetch_or(_BitBase, 1ll << _BitPos, __ATOMIC_SEQ_CST); - return (_PrevVal >> _BitPos) & 1; -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Exchange Add -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedExchangeAdd8(char volatile *_Addend, char _Value) { - return __atomic_fetch_add(_Addend, _Value, __ATOMIC_SEQ_CST); -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedExchangeAdd16(short volatile *_Addend, short _Value) { - return __atomic_fetch_add(_Addend, _Value, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value) { - return __atomic_fetch_add(_Addend, _Value, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Exchange Sub -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedExchangeSub8(char volatile *_Subend, char _Value) { - return __atomic_fetch_sub(_Subend, _Value, __ATOMIC_SEQ_CST); -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedExchangeSub16(short volatile *_Subend, short _Value) { - return __atomic_fetch_sub(_Subend, _Value, __ATOMIC_SEQ_CST); -} -static __inline__ long __DEFAULT_FN_ATTRS -_InterlockedExchangeSub(long volatile *_Subend, long _Value) { - return __atomic_fetch_sub(_Subend, _Value, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value) { - return __atomic_fetch_sub(_Subend, _Value, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Increment -\*----------------------------------------------------------------------------*/ -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedIncrement16(short volatile *_Value) { - return __atomic_add_fetch(_Value, 1, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedIncrement64(__int64 volatile *_Value) { - return __atomic_add_fetch(_Value, 1, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Decrement -\*----------------------------------------------------------------------------*/ -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedDecrement16(short volatile *_Value) { - return __atomic_sub_fetch(_Value, 1, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedDecrement64(__int64 volatile *_Value) { - return __atomic_sub_fetch(_Value, 1, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked And -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedAnd8(char volatile *_Value, char _Mask) { - return __atomic_and_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedAnd16(short volatile *_Value, short _Mask) { - return __atomic_and_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ long __DEFAULT_FN_ATTRS -_InterlockedAnd(long volatile *_Value, long _Mask) { - return __atomic_and_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask) { - return __atomic_and_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Or -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedOr8(char volatile *_Value, char _Mask) { - return __atomic_or_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedOr16(short volatile *_Value, short _Mask) { - return __atomic_or_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ long __DEFAULT_FN_ATTRS -_InterlockedOr(long volatile *_Value, long _Mask) { - return __atomic_or_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedOr64(__int64 volatile *_Value, __int64 _Mask) { - return __atomic_or_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Xor -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedXor8(char volatile *_Value, char _Mask) { - return __atomic_xor_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedXor16(short volatile *_Value, short _Mask) { - return __atomic_xor_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -static __inline__ long __DEFAULT_FN_ATTRS -_InterlockedXor(long volatile *_Value, long _Mask) { - return __atomic_xor_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedXor64(__int64 volatile *_Value, __int64 _Mask) { - return __atomic_xor_fetch(_Value, _Mask, __ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Exchange -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedExchange8(char volatile *_Target, char _Value) { - __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_SEQ_CST); - return _Value; -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedExchange16(short volatile *_Target, short _Value) { - __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_SEQ_CST); - return _Value; -} -#ifdef __x86_64__ -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedExchange64(__int64 volatile *_Target, __int64 _Value) { - __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_SEQ_CST); - return _Value; -} -#endif -/*----------------------------------------------------------------------------*\ -|* Interlocked Compare Exchange -\*----------------------------------------------------------------------------*/ -static __inline__ char __DEFAULT_FN_ATTRS -_InterlockedCompareExchange8(char volatile *_Destination, - char _Exchange, char _Comparand) { - __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return _Comparand; -} -static __inline__ short __DEFAULT_FN_ATTRS -_InterlockedCompareExchange16(short volatile *_Destination, - short _Exchange, short _Comparand) { - __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return _Comparand; -} -static __inline__ __int64 __DEFAULT_FN_ATTRS -_InterlockedCompareExchange64(__int64 volatile *_Destination, - __int64 _Exchange, __int64 _Comparand) { - __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return _Comparand; -} -/*----------------------------------------------------------------------------*\ -|* Barriers -\*----------------------------------------------------------------------------*/ -static __inline__ void __DEFAULT_FN_ATTRS -__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) -_ReadWriteBarrier(void) { - __atomic_signal_fence(__ATOMIC_SEQ_CST); -} -static __inline__ void __DEFAULT_FN_ATTRS -__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) -_ReadBarrier(void) { - __atomic_signal_fence(__ATOMIC_SEQ_CST); -} -static __inline__ void __DEFAULT_FN_ATTRS -__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) -_WriteBarrier(void) { - __atomic_signal_fence(__ATOMIC_SEQ_CST); -} -#ifdef __x86_64__ -static __inline__ void __DEFAULT_FN_ATTRS -__faststorefence(void) { - __atomic_thread_fence(__ATOMIC_SEQ_CST); -} -#endif -/*----------------------------------------------------------------------------*\ -|* readfs, readgs -|* (Pointers in address space #256 and #257 are relative to the GS and FS -|* segment registers, respectively.) -\*----------------------------------------------------------------------------*/ -#define __ptr_to_addr_space(__addr_space_nbr, __type, __offset) \ - ((volatile __type __attribute__((__address_space__(__addr_space_nbr)))*) \ - (__offset)) - -#ifdef __i386__ -static __inline__ unsigned char __DEFAULT_FN_ATTRS -__readfsbyte(unsigned long __offset) { - return *__ptr_to_addr_space(257, unsigned char, __offset); -} -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -__readfsqword(unsigned long __offset) { - return *__ptr_to_addr_space(257, unsigned __int64, __offset); -} -static __inline__ unsigned short __DEFAULT_FN_ATTRS -__readfsword(unsigned long __offset) { - return *__ptr_to_addr_space(257, unsigned short, __offset); -} -#endif -#ifdef __x86_64__ -static __inline__ unsigned char __DEFAULT_FN_ATTRS -__readgsbyte(unsigned long __offset) { - return *__ptr_to_addr_space(256, unsigned char, __offset); -} -static __inline__ unsigned long __DEFAULT_FN_ATTRS -__readgsdword(unsigned long __offset) { - return *__ptr_to_addr_space(256, unsigned long, __offset); -} -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -__readgsqword(unsigned long __offset) { - return *__ptr_to_addr_space(256, unsigned __int64, __offset); -} -static __inline__ unsigned short __DEFAULT_FN_ATTRS -__readgsword(unsigned long __offset) { - return *__ptr_to_addr_space(256, unsigned short, __offset); -} -#endif -#undef __ptr_to_addr_space -/*----------------------------------------------------------------------------*\ -|* movs, stos -\*----------------------------------------------------------------------------*/ -#if defined(__i386__) || defined(__x86_64__) -static __inline__ void __DEFAULT_FN_ATTRS -__movsb(unsigned char *__dst, unsigned char const *__src, size_t __n) { - __asm__("rep movsb" : : "D"(__dst), "S"(__src), "c"(__n) - : "%edi", "%esi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__movsd(unsigned long *__dst, unsigned long const *__src, size_t __n) { - __asm__("rep movsl" : : "D"(__dst), "S"(__src), "c"(__n) - : "%edi", "%esi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__movsw(unsigned short *__dst, unsigned short const *__src, size_t __n) { - __asm__("rep movsh" : : "D"(__dst), "S"(__src), "c"(__n) - : "%edi", "%esi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__stosb(unsigned char *__dst, unsigned char __x, size_t __n) { - __asm__("rep stosb" : : "D"(__dst), "a"(__x), "c"(__n) - : "%edi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__stosd(unsigned long *__dst, unsigned long __x, size_t __n) { - __asm__("rep stosl" : : "D"(__dst), "a"(__x), "c"(__n) - : "%edi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__stosw(unsigned short *__dst, unsigned short __x, size_t __n) { - __asm__("rep stosh" : : "D"(__dst), "a"(__x), "c"(__n) - : "%edi", "%ecx"); -} -#endif -#ifdef __x86_64__ -static __inline__ void __DEFAULT_FN_ATTRS -__movsq(unsigned long long *__dst, unsigned long long const *__src, size_t __n) { - __asm__("rep movsq" : : "D"(__dst), "S"(__src), "c"(__n) - : "%edi", "%esi", "%ecx"); -} -static __inline__ void __DEFAULT_FN_ATTRS -__stosq(unsigned __int64 *__dst, unsigned __int64 __x, size_t __n) { - __asm__("rep stosq" : : "D"(__dst), "a"(__x), "c"(__n) - : "%edi", "%ecx"); -} -#endif - -/*----------------------------------------------------------------------------*\ -|* Misc -\*----------------------------------------------------------------------------*/ -static __inline__ void * __DEFAULT_FN_ATTRS -_AddressOfReturnAddress(void) { - return (void*)((char*)__builtin_frame_address(0) + sizeof(void*)); -} -static __inline__ void * __DEFAULT_FN_ATTRS -_ReturnAddress(void) { - return __builtin_return_address(0); -} -#if defined(__i386__) || defined(__x86_64__) -static __inline__ void __DEFAULT_FN_ATTRS -__cpuid(int __info[4], int __level) { - __asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3]) - : "a"(__level)); -} -static __inline__ void __DEFAULT_FN_ATTRS -__cpuidex(int __info[4], int __level, int __ecx) { - __asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3]) - : "a"(__level), "c"(__ecx)); -} -static __inline__ unsigned __int64 __cdecl __DEFAULT_FN_ATTRS -_xgetbv(unsigned int __xcr_no) { - unsigned int __eax, __edx; - __asm__ ("xgetbv" : "=a" (__eax), "=d" (__edx) : "c" (__xcr_no)); - return ((unsigned __int64)__edx << 32) | __eax; -} -static __inline__ void __DEFAULT_FN_ATTRS -__halt(void) { - __asm__ volatile ("hlt"); -} -#endif - -/*----------------------------------------------------------------------------*\ -|* Privileged intrinsics -\*----------------------------------------------------------------------------*/ -#if defined(__i386__) || defined(__x86_64__) -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -__readmsr(unsigned long __register) { - // Loads the contents of a 64-bit model specific register (MSR) specified in - // the ECX register into registers EDX:EAX. The EDX register is loaded with - // the high-order 32 bits of the MSR and the EAX register is loaded with the - // low-order 32 bits. If less than 64 bits are implemented in the MSR being - // read, the values returned to EDX:EAX in unimplemented bit locations are - // undefined. - unsigned long __edx; - unsigned long __eax; - __asm__ ("rdmsr" : "=d"(__edx), "=a"(__eax) : "c"(__register)); - return (((unsigned __int64)__edx) << 32) | (unsigned __int64)__eax; -} - -static __inline__ unsigned long __DEFAULT_FN_ATTRS -__readcr3(void) { - unsigned long __cr3_val; - __asm__ __volatile__ ("mov %%cr3, %0" : "=q"(__cr3_val) : : "memory"); - return __cr3_val; -} - -static __inline__ void __DEFAULT_FN_ATTRS -__writecr3(unsigned int __cr3_val) { - __asm__ ("mov %0, %%cr3" : : "q"(__cr3_val) : "memory"); -} -#endif - -#ifdef __cplusplus -} -#endif - -#undef __DEFAULT_FN_ATTRS - -#endif /* __INTRIN_H */ -#endif /* _MSC_VER */ diff --git a/External/CastXML/share/castxml/clang/include/__stddef_max_align_t.h b/External/CastXML/share/castxml/clang/include/__stddef_max_align_t.h deleted file mode 100644 index 1e10ca986..000000000 --- a/External/CastXML/share/castxml/clang/include/__stddef_max_align_t.h +++ /dev/null @@ -1,43 +0,0 @@ -/*===---- __stddef_max_align_t.h - Definition of max_align_t for modules ---=== - * - * Copyright (c) 2014 Chandler Carruth - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __CLANG_MAX_ALIGN_T_DEFINED -#define __CLANG_MAX_ALIGN_T_DEFINED - -#if defined(_MSC_VER) -typedef double max_align_t; -#elif defined(__APPLE__) -typedef long double max_align_t; -#else -// Define 'max_align_t' to match the GCC definition. -typedef struct { - long long __clang_max_align_nonce1 - __attribute__((__aligned__(__alignof__(long long)))); - long double __clang_max_align_nonce2 - __attribute__((__aligned__(__alignof__(long double)))); -} max_align_t; -#endif - -#endif diff --git a/External/CastXML/share/castxml/clang/include/__wmmintrin_aes.h b/External/CastXML/share/castxml/clang/include/__wmmintrin_aes.h deleted file mode 100644 index 81b2b8d0b..000000000 --- a/External/CastXML/share/castxml/clang/include/__wmmintrin_aes.h +++ /dev/null @@ -1,66 +0,0 @@ -/*===---- __wmmintrin_aes.h - AES intrinsics -------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef _WMMINTRIN_AES_H -#define _WMMINTRIN_AES_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("aes"))) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_aesenc_si128(__m128i __V, __m128i __R) -{ - return (__m128i)__builtin_ia32_aesenc128(__V, __R); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_aesenclast_si128(__m128i __V, __m128i __R) -{ - return (__m128i)__builtin_ia32_aesenclast128(__V, __R); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_aesdec_si128(__m128i __V, __m128i __R) -{ - return (__m128i)__builtin_ia32_aesdec128(__V, __R); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_aesdeclast_si128(__m128i __V, __m128i __R) -{ - return (__m128i)__builtin_ia32_aesdeclast128(__V, __R); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_aesimc_si128(__m128i __V) -{ - return (__m128i)__builtin_ia32_aesimc128(__V); -} - -#define _mm_aeskeygenassist_si128(C, R) \ - __builtin_ia32_aeskeygenassist128((C), (R)) - -#undef __DEFAULT_FN_ATTRS - -#endif /* _WMMINTRIN_AES_H */ diff --git a/External/CastXML/share/castxml/clang/include/__wmmintrin_pclmul.h b/External/CastXML/share/castxml/clang/include/__wmmintrin_pclmul.h deleted file mode 100644 index 48a85d24e..000000000 --- a/External/CastXML/share/castxml/clang/include/__wmmintrin_pclmul.h +++ /dev/null @@ -1,30 +0,0 @@ -/*===---- __wmmintrin_pclmul.h - AES intrinsics ----------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef _WMMINTRIN_PCLMUL_H -#define _WMMINTRIN_PCLMUL_H - -#define _mm_clmulepi64_si128(__X, __Y, __I) \ - ((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(__X), \ - (__v2di)(__m128i)(__Y), (char)(__I))) - -#endif /* _WMMINTRIN_PCLMUL_H */ diff --git a/External/CastXML/share/castxml/clang/include/adxintrin.h b/External/CastXML/share/castxml/clang/include/adxintrin.h deleted file mode 100644 index ee3472841..000000000 --- a/External/CastXML/share/castxml/clang/include/adxintrin.h +++ /dev/null @@ -1,86 +0,0 @@ -/*===---- adxintrin.h - ADX intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __ADXINTRIN_H -#define __ADXINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) - -/* Intrinsics that are available only if __ADX__ defined */ -static __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx"))) -_addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y, - unsigned int *__p) -{ - return __builtin_ia32_addcarryx_u32(__cf, __x, __y, __p); -} - -#ifdef __x86_64__ -static __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx"))) -_addcarryx_u64(unsigned char __cf, unsigned long long __x, - unsigned long long __y, unsigned long long *__p) -{ - return __builtin_ia32_addcarryx_u64(__cf, __x, __y, __p); -} -#endif - -/* Intrinsics that are also available if __ADX__ undefined */ -static __inline unsigned char __DEFAULT_FN_ATTRS -_addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y, - unsigned int *__p) -{ - return __builtin_ia32_addcarry_u32(__cf, __x, __y, __p); -} - -#ifdef __x86_64__ -static __inline unsigned char __DEFAULT_FN_ATTRS -_addcarry_u64(unsigned char __cf, unsigned long long __x, - unsigned long long __y, unsigned long long *__p) -{ - return __builtin_ia32_addcarry_u64(__cf, __x, __y, __p); -} -#endif - -static __inline unsigned char __DEFAULT_FN_ATTRS -_subborrow_u32(unsigned char __cf, unsigned int __x, unsigned int __y, - unsigned int *__p) -{ - return __builtin_ia32_subborrow_u32(__cf, __x, __y, __p); -} - -#ifdef __x86_64__ -static __inline unsigned char __DEFAULT_FN_ATTRS -_subborrow_u64(unsigned char __cf, unsigned long long __x, - unsigned long long __y, unsigned long long *__p) -{ - return __builtin_ia32_subborrow_u64(__cf, __x, __y, __p); -} -#endif - -#undef __DEFAULT_FN_ATTRS - -#endif /* __ADXINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/altivec.h b/External/CastXML/share/castxml/clang/include/altivec.h deleted file mode 100644 index 5c8eb5640..000000000 --- a/External/CastXML/share/castxml/clang/include/altivec.h +++ /dev/null @@ -1,13528 +0,0 @@ -/*===---- altivec.h - Standard header for type generic math ---------------===*\ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __ALTIVEC_H -#define __ALTIVEC_H - -#ifndef __ALTIVEC__ -#error "AltiVec support not enabled" -#endif - -/* constants for mapping CR6 bits to predicate result. */ - -#define __CR6_EQ 0 -#define __CR6_EQ_REV 1 -#define __CR6_LT 2 -#define __CR6_LT_REV 3 - -#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__)) - -static vector signed char __ATTRS_o_ai vec_perm(vector signed char __a, - vector signed char __b, - vector unsigned char __c); - -static vector unsigned char __ATTRS_o_ai vec_perm(vector unsigned char __a, - vector unsigned char __b, - vector unsigned char __c); - -static vector bool char __ATTRS_o_ai vec_perm(vector bool char __a, - vector bool char __b, - vector unsigned char __c); - -static vector short __ATTRS_o_ai vec_perm(vector signed short __a, - vector signed short __b, - vector unsigned char __c); - -static vector unsigned short __ATTRS_o_ai vec_perm(vector unsigned short __a, - vector unsigned short __b, - vector unsigned char __c); - -static vector bool short __ATTRS_o_ai vec_perm(vector bool short __a, - vector bool short __b, - vector unsigned char __c); - -static vector pixel __ATTRS_o_ai vec_perm(vector pixel __a, vector pixel __b, - vector unsigned char __c); - -static vector int __ATTRS_o_ai vec_perm(vector signed int __a, - vector signed int __b, - vector unsigned char __c); - -static vector unsigned int __ATTRS_o_ai vec_perm(vector unsigned int __a, - vector unsigned int __b, - vector unsigned char __c); - -static vector bool int __ATTRS_o_ai vec_perm(vector bool int __a, - vector bool int __b, - vector unsigned char __c); - -static vector float __ATTRS_o_ai vec_perm(vector float __a, vector float __b, - vector unsigned char __c); - -#ifdef __VSX__ -static vector long long __ATTRS_o_ai vec_perm(vector signed long long __a, - vector signed long long __b, - vector unsigned char __c); - -static vector unsigned long long __ATTRS_o_ai -vec_perm(vector unsigned long long __a, vector unsigned long long __b, - vector unsigned char __c); - -static vector bool long long __ATTRS_o_ai -vec_perm(vector bool long long __a, vector bool long long __b, - vector unsigned char __c); - -static vector double __ATTRS_o_ai vec_perm(vector double __a, vector double __b, - vector unsigned char __c); -#endif - -static vector unsigned char __ATTRS_o_ai vec_xor(vector unsigned char __a, - vector unsigned char __b); - -/* vec_abs */ - -#define __builtin_altivec_abs_v16qi vec_abs -#define __builtin_altivec_abs_v8hi vec_abs -#define __builtin_altivec_abs_v4si vec_abs - -static vector signed char __ATTRS_o_ai vec_abs(vector signed char __a) { - return __builtin_altivec_vmaxsb(__a, -__a); -} - -static vector signed short __ATTRS_o_ai vec_abs(vector signed short __a) { - return __builtin_altivec_vmaxsh(__a, -__a); -} - -static vector signed int __ATTRS_o_ai vec_abs(vector signed int __a) { - return __builtin_altivec_vmaxsw(__a, -__a); -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector signed long long __ATTRS_o_ai -vec_abs(vector signed long long __a) { - return __builtin_altivec_vmaxsd(__a, -__a); -} -#endif - -static vector float __ATTRS_o_ai vec_abs(vector float __a) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF); - return (vector float)__res; -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector double __ATTRS_o_ai vec_abs(vector double __a) { - vector unsigned long long __res = { 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFF }; - __res &= (vector unsigned int)__a; - return (vector double)__res; -} -#endif - -/* vec_abss */ -#define __builtin_altivec_abss_v16qi vec_abss -#define __builtin_altivec_abss_v8hi vec_abss -#define __builtin_altivec_abss_v4si vec_abss - -static vector signed char __ATTRS_o_ai vec_abss(vector signed char __a) { - return __builtin_altivec_vmaxsb( - __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a)); -} - -static vector signed short __ATTRS_o_ai vec_abss(vector signed short __a) { - return __builtin_altivec_vmaxsh( - __a, __builtin_altivec_vsubshs((vector signed short)(0), __a)); -} - -static vector signed int __ATTRS_o_ai vec_abss(vector signed int __a) { - return __builtin_altivec_vmaxsw( - __a, __builtin_altivec_vsubsws((vector signed int)(0), __a)); -} - -/* vec_add */ - -static vector signed char __ATTRS_o_ai vec_add(vector signed char __a, - vector signed char __b) { - return __a + __b; -} - -static vector signed char __ATTRS_o_ai vec_add(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a + __b; -} - -static vector signed char __ATTRS_o_ai vec_add(vector signed char __a, - vector bool char __b) { - return __a + (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_add(vector unsigned char __a, - vector unsigned char __b) { - return __a + __b; -} - -static vector unsigned char __ATTRS_o_ai vec_add(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a + __b; -} - -static vector unsigned char __ATTRS_o_ai vec_add(vector unsigned char __a, - vector bool char __b) { - return __a + (vector unsigned char)__b; -} - -static vector short __ATTRS_o_ai vec_add(vector short __a, vector short __b) { - return __a + __b; -} - -static vector short __ATTRS_o_ai vec_add(vector bool short __a, - vector short __b) { - return (vector short)__a + __b; -} - -static vector short __ATTRS_o_ai vec_add(vector short __a, - vector bool short __b) { - return __a + (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_add(vector unsigned short __a, - vector unsigned short __b) { - return __a + __b; -} - -static vector unsigned short __ATTRS_o_ai vec_add(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a + __b; -} - -static vector unsigned short __ATTRS_o_ai vec_add(vector unsigned short __a, - vector bool short __b) { - return __a + (vector unsigned short)__b; -} - -static vector int __ATTRS_o_ai vec_add(vector int __a, vector int __b) { - return __a + __b; -} - -static vector int __ATTRS_o_ai vec_add(vector bool int __a, vector int __b) { - return (vector int)__a + __b; -} - -static vector int __ATTRS_o_ai vec_add(vector int __a, vector bool int __b) { - return __a + (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_add(vector unsigned int __a, - vector unsigned int __b) { - return __a + __b; -} - -static vector unsigned int __ATTRS_o_ai vec_add(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a + __b; -} - -static vector unsigned int __ATTRS_o_ai vec_add(vector unsigned int __a, - vector bool int __b) { - return __a + (vector unsigned int)__b; -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector signed long long __ATTRS_o_ai -vec_add(vector signed long long __a, vector signed long long __b) { - return __a + __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_add(vector unsigned long long __a, vector unsigned long long __b) { - return __a + __b; -} - -static vector signed __int128 __ATTRS_o_ai vec_add(vector signed __int128 __a, - vector signed __int128 __b) { - return __a + __b; -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __a + __b; -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -static vector float __ATTRS_o_ai vec_add(vector float __a, vector float __b) { - return __a + __b; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_add(vector double __a, vector double __b) { - return __a + __b; -} -#endif // __VSX__ - -/* vec_vaddubm */ - -#define __builtin_altivec_vaddubm vec_vaddubm - -static vector signed char __ATTRS_o_ai vec_vaddubm(vector signed char __a, - vector signed char __b) { - return __a + __b; -} - -static vector signed char __ATTRS_o_ai vec_vaddubm(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a + __b; -} - -static vector signed char __ATTRS_o_ai vec_vaddubm(vector signed char __a, - vector bool char __b) { - return __a + (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vaddubm(vector unsigned char __a, - vector unsigned char __b) { - return __a + __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vaddubm(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a + __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vaddubm(vector unsigned char __a, - vector bool char __b) { - return __a + (vector unsigned char)__b; -} - -/* vec_vadduhm */ - -#define __builtin_altivec_vadduhm vec_vadduhm - -static vector short __ATTRS_o_ai vec_vadduhm(vector short __a, - vector short __b) { - return __a + __b; -} - -static vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a, - vector short __b) { - return (vector short)__a + __b; -} - -static vector short __ATTRS_o_ai vec_vadduhm(vector short __a, - vector bool short __b) { - return __a + (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai -vec_vadduhm(vector unsigned short __a, vector unsigned short __b) { - return __a + __b; -} - -static vector unsigned short __ATTRS_o_ai -vec_vadduhm(vector bool short __a, vector unsigned short __b) { - return (vector unsigned short)__a + __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vadduhm(vector unsigned short __a, - vector bool short __b) { - return __a + (vector unsigned short)__b; -} - -/* vec_vadduwm */ - -#define __builtin_altivec_vadduwm vec_vadduwm - -static vector int __ATTRS_o_ai vec_vadduwm(vector int __a, vector int __b) { - return __a + __b; -} - -static vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a, - vector int __b) { - return (vector int)__a + __b; -} - -static vector int __ATTRS_o_ai vec_vadduwm(vector int __a, - vector bool int __b) { - return __a + (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vadduwm(vector unsigned int __a, - vector unsigned int __b) { - return __a + __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vadduwm(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a + __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vadduwm(vector unsigned int __a, - vector bool int __b) { - return __a + (vector unsigned int)__b; -} - -/* vec_vaddfp */ - -#define __builtin_altivec_vaddfp vec_vaddfp - -static vector float __attribute__((__always_inline__)) -vec_vaddfp(vector float __a, vector float __b) { - return __a + __b; -} - -/* vec_addc */ - -static vector unsigned int __ATTRS_o_ai vec_addc(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vaddcuw(__a, __b); -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector signed __int128 __ATTRS_o_ai -vec_addc(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vaddcuq(__a, __b); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vaddcuq(__a, __b); -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -/* vec_vaddcuw */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) { - return __builtin_altivec_vaddcuw(__a, __b); -} - -/* vec_adds */ - -static vector signed char __ATTRS_o_ai vec_adds(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vaddsbs(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_adds(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vaddsbs((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_adds(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_adds(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vaddubs(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_adds(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_adds(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); -} - -static vector short __ATTRS_o_ai vec_adds(vector short __a, vector short __b) { - return __builtin_altivec_vaddshs(__a, __b); -} - -static vector short __ATTRS_o_ai vec_adds(vector bool short __a, - vector short __b) { - return __builtin_altivec_vaddshs((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_adds(vector short __a, - vector bool short __b) { - return __builtin_altivec_vaddshs(__a, (vector short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_adds(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vadduhs(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_adds(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_adds(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); -} - -static vector int __ATTRS_o_ai vec_adds(vector int __a, vector int __b) { - return __builtin_altivec_vaddsws(__a, __b); -} - -static vector int __ATTRS_o_ai vec_adds(vector bool int __a, vector int __b) { - return __builtin_altivec_vaddsws((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_adds(vector int __a, vector bool int __b) { - return __builtin_altivec_vaddsws(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_adds(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vadduws(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_adds(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vadduws((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_adds(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); -} - -/* vec_vaddsbs */ - -static vector signed char __ATTRS_o_ai vec_vaddsbs(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vaddsbs(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vaddsbs(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vaddsbs((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vaddsbs(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); -} - -/* vec_vaddubs */ - -static vector unsigned char __ATTRS_o_ai vec_vaddubs(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vaddubs(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vaddubs(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vaddubs(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); -} - -/* vec_vaddshs */ - -static vector short __ATTRS_o_ai vec_vaddshs(vector short __a, - vector short __b) { - return __builtin_altivec_vaddshs(__a, __b); -} - -static vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a, - vector short __b) { - return __builtin_altivec_vaddshs((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_vaddshs(vector short __a, - vector bool short __b) { - return __builtin_altivec_vaddshs(__a, (vector short)__b); -} - -/* vec_vadduhs */ - -static vector unsigned short __ATTRS_o_ai -vec_vadduhs(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_vadduhs(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_vadduhs(vector bool short __a, vector unsigned short __b) { - return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vadduhs(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); -} - -/* vec_vaddsws */ - -static vector int __ATTRS_o_ai vec_vaddsws(vector int __a, vector int __b) { - return __builtin_altivec_vaddsws(__a, __b); -} - -static vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a, - vector int __b) { - return __builtin_altivec_vaddsws((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_vaddsws(vector int __a, - vector bool int __b) { - return __builtin_altivec_vaddsws(__a, (vector int)__b); -} - -/* vec_vadduws */ - -static vector unsigned int __ATTRS_o_ai vec_vadduws(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vadduws(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vadduws(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vadduws((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vadduws(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -/* vec_vadduqm */ - -static vector signed __int128 __ATTRS_o_ai -vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) { - return __a + __b; -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __a + __b; -} - -/* vec_vaddeuqm */ - -static vector signed __int128 __ATTRS_o_ai -vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b, - vector signed __int128 __c) { - return __builtin_altivec_vaddeuqm(__a, __b, __c); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b, - vector unsigned __int128 __c) { - return __builtin_altivec_vaddeuqm(__a, __b, __c); -} - -/* vec_vaddcuq */ - -static vector signed __int128 __ATTRS_o_ai -vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vaddcuq(__a, __b); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vaddcuq(__a, __b); -} - -/* vec_vaddecuq */ - -static vector signed __int128 __ATTRS_o_ai -vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b, - vector signed __int128 __c) { - return __builtin_altivec_vaddecuq(__a, __b, __c); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b, - vector unsigned __int128 __c) { - return __builtin_altivec_vaddecuq(__a, __b, __c); -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -/* vec_and */ - -#define __builtin_altivec_vand vec_and - -static vector signed char __ATTRS_o_ai vec_and(vector signed char __a, - vector signed char __b) { - return __a & __b; -} - -static vector signed char __ATTRS_o_ai vec_and(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a & __b; -} - -static vector signed char __ATTRS_o_ai vec_and(vector signed char __a, - vector bool char __b) { - return __a & (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_and(vector unsigned char __a, - vector unsigned char __b) { - return __a & __b; -} - -static vector unsigned char __ATTRS_o_ai vec_and(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a & __b; -} - -static vector unsigned char __ATTRS_o_ai vec_and(vector unsigned char __a, - vector bool char __b) { - return __a & (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_and(vector bool char __a, - vector bool char __b) { - return __a & __b; -} - -static vector short __ATTRS_o_ai vec_and(vector short __a, vector short __b) { - return __a & __b; -} - -static vector short __ATTRS_o_ai vec_and(vector bool short __a, - vector short __b) { - return (vector short)__a & __b; -} - -static vector short __ATTRS_o_ai vec_and(vector short __a, - vector bool short __b) { - return __a & (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_and(vector unsigned short __a, - vector unsigned short __b) { - return __a & __b; -} - -static vector unsigned short __ATTRS_o_ai vec_and(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a & __b; -} - -static vector unsigned short __ATTRS_o_ai vec_and(vector unsigned short __a, - vector bool short __b) { - return __a & (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_and(vector bool short __a, - vector bool short __b) { - return __a & __b; -} - -static vector int __ATTRS_o_ai vec_and(vector int __a, vector int __b) { - return __a & __b; -} - -static vector int __ATTRS_o_ai vec_and(vector bool int __a, vector int __b) { - return (vector int)__a & __b; -} - -static vector int __ATTRS_o_ai vec_and(vector int __a, vector bool int __b) { - return __a & (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_and(vector unsigned int __a, - vector unsigned int __b) { - return __a & __b; -} - -static vector unsigned int __ATTRS_o_ai vec_and(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a & __b; -} - -static vector unsigned int __ATTRS_o_ai vec_and(vector unsigned int __a, - vector bool int __b) { - return __a & (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_and(vector bool int __a, - vector bool int __b) { - return __a & __b; -} - -static vector float __ATTRS_o_ai vec_and(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_and(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_and(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_and(vector bool long long __a, vector double __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & (vector unsigned long long)__b; - return (vector double)__res; -} - -static vector double __ATTRS_o_ai vec_and(vector double __a, vector bool long long __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & (vector unsigned long long)__b; - return (vector double)__res; -} - -static vector double __ATTRS_o_ai vec_and(vector double __a, vector double __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & (vector unsigned long long)__b; - return (vector double)__res; -} - -static vector signed long long __ATTRS_o_ai -vec_and(vector signed long long __a, vector signed long long __b) { - return __a & __b; -} - -static vector signed long long __ATTRS_o_ai -vec_and(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a & __b; -} - -static vector signed long long __ATTRS_o_ai vec_and(vector signed long long __a, - vector bool long long __b) { - return __a & (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_and(vector unsigned long long __a, vector unsigned long long __b) { - return __a & __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_and(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a & __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_and(vector unsigned long long __a, vector bool long long __b) { - return __a & (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_and(vector bool long long __a, - vector bool long long __b) { - return __a & __b; -} -#endif - -/* vec_vand */ - -static vector signed char __ATTRS_o_ai vec_vand(vector signed char __a, - vector signed char __b) { - return __a & __b; -} - -static vector signed char __ATTRS_o_ai vec_vand(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a & __b; -} - -static vector signed char __ATTRS_o_ai vec_vand(vector signed char __a, - vector bool char __b) { - return __a & (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vand(vector unsigned char __a, - vector unsigned char __b) { - return __a & __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vand(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a & __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vand(vector unsigned char __a, - vector bool char __b) { - return __a & (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_vand(vector bool char __a, - vector bool char __b) { - return __a & __b; -} - -static vector short __ATTRS_o_ai vec_vand(vector short __a, vector short __b) { - return __a & __b; -} - -static vector short __ATTRS_o_ai vec_vand(vector bool short __a, - vector short __b) { - return (vector short)__a & __b; -} - -static vector short __ATTRS_o_ai vec_vand(vector short __a, - vector bool short __b) { - return __a & (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vand(vector unsigned short __a, - vector unsigned short __b) { - return __a & __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vand(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a & __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vand(vector unsigned short __a, - vector bool short __b) { - return __a & (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_vand(vector bool short __a, - vector bool short __b) { - return __a & __b; -} - -static vector int __ATTRS_o_ai vec_vand(vector int __a, vector int __b) { - return __a & __b; -} - -static vector int __ATTRS_o_ai vec_vand(vector bool int __a, vector int __b) { - return (vector int)__a & __b; -} - -static vector int __ATTRS_o_ai vec_vand(vector int __a, vector bool int __b) { - return __a & (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vand(vector unsigned int __a, - vector unsigned int __b) { - return __a & __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vand(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a & __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vand(vector unsigned int __a, - vector bool int __b) { - return __a & (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_vand(vector bool int __a, - vector bool int __b) { - return __a & __b; -} - -static vector float __ATTRS_o_ai vec_vand(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vand(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vand(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a & (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_vand(vector signed long long __a, vector signed long long __b) { - return __a & __b; -} - -static vector signed long long __ATTRS_o_ai -vec_vand(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a & __b; -} - -static vector signed long long __ATTRS_o_ai -vec_vand(vector signed long long __a, vector bool long long __b) { - return __a & (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vand(vector unsigned long long __a, vector unsigned long long __b) { - return __a & __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vand(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a & __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vand(vector unsigned long long __a, vector bool long long __b) { - return __a & (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_vand(vector bool long long __a, - vector bool long long __b) { - return __a & __b; -} -#endif - -/* vec_andc */ - -#define __builtin_altivec_vandc vec_andc - -static vector signed char __ATTRS_o_ai vec_andc(vector signed char __a, - vector signed char __b) { - return __a & ~__b; -} - -static vector signed char __ATTRS_o_ai vec_andc(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a & ~__b; -} - -static vector signed char __ATTRS_o_ai vec_andc(vector signed char __a, - vector bool char __b) { - return __a & ~(vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_andc(vector unsigned char __a, - vector unsigned char __b) { - return __a & ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_andc(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a & ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_andc(vector unsigned char __a, - vector bool char __b) { - return __a & ~(vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_andc(vector bool char __a, - vector bool char __b) { - return __a & ~__b; -} - -static vector short __ATTRS_o_ai vec_andc(vector short __a, vector short __b) { - return __a & ~__b; -} - -static vector short __ATTRS_o_ai vec_andc(vector bool short __a, - vector short __b) { - return (vector short)__a & ~__b; -} - -static vector short __ATTRS_o_ai vec_andc(vector short __a, - vector bool short __b) { - return __a & ~(vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_andc(vector unsigned short __a, - vector unsigned short __b) { - return __a & ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_andc(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a & ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_andc(vector unsigned short __a, - vector bool short __b) { - return __a & ~(vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_andc(vector bool short __a, - vector bool short __b) { - return __a & ~__b; -} - -static vector int __ATTRS_o_ai vec_andc(vector int __a, vector int __b) { - return __a & ~__b; -} - -static vector int __ATTRS_o_ai vec_andc(vector bool int __a, vector int __b) { - return (vector int)__a & ~__b; -} - -static vector int __ATTRS_o_ai vec_andc(vector int __a, vector bool int __b) { - return __a & ~(vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_andc(vector unsigned int __a, - vector unsigned int __b) { - return __a & ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_andc(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a & ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_andc(vector unsigned int __a, - vector bool int __b) { - return __a & ~(vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_andc(vector bool int __a, - vector bool int __b) { - return __a & ~__b; -} - -static vector float __ATTRS_o_ai vec_andc(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_andc(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_andc(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_andc(vector bool long long __a, vector double __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & ~(vector unsigned long long)__b; - return (vector double)__res; -} - -static vector double __ATTRS_o_ai -vec_andc(vector double __a, vector bool long long __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & ~(vector unsigned long long)__b; - return (vector double)__res; -} - -static vector double __ATTRS_o_ai vec_andc(vector double __a, vector double __b) { - vector unsigned long long __res = - (vector unsigned long long)__a & ~(vector unsigned long long)__b; - return (vector double)__res; -} - -static vector signed long long __ATTRS_o_ai -vec_andc(vector signed long long __a, vector signed long long __b) { - return __a & ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_andc(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a & ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_andc(vector signed long long __a, vector bool long long __b) { - return __a & ~(vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_andc(vector unsigned long long __a, vector unsigned long long __b) { - return __a & ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_andc(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a & ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_andc(vector unsigned long long __a, vector bool long long __b) { - return __a & ~(vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_andc(vector bool long long __a, - vector bool long long __b) { - return __a & ~__b; -} -#endif - -/* vec_vandc */ - -static vector signed char __ATTRS_o_ai vec_vandc(vector signed char __a, - vector signed char __b) { - return __a & ~__b; -} - -static vector signed char __ATTRS_o_ai vec_vandc(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a & ~__b; -} - -static vector signed char __ATTRS_o_ai vec_vandc(vector signed char __a, - vector bool char __b) { - return __a & ~(vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vandc(vector unsigned char __a, - vector unsigned char __b) { - return __a & ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vandc(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a & ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vandc(vector unsigned char __a, - vector bool char __b) { - return __a & ~(vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_vandc(vector bool char __a, - vector bool char __b) { - return __a & ~__b; -} - -static vector short __ATTRS_o_ai vec_vandc(vector short __a, vector short __b) { - return __a & ~__b; -} - -static vector short __ATTRS_o_ai vec_vandc(vector bool short __a, - vector short __b) { - return (vector short)__a & ~__b; -} - -static vector short __ATTRS_o_ai vec_vandc(vector short __a, - vector bool short __b) { - return __a & ~(vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vandc(vector unsigned short __a, - vector unsigned short __b) { - return __a & ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vandc(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a & ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vandc(vector unsigned short __a, - vector bool short __b) { - return __a & ~(vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_vandc(vector bool short __a, - vector bool short __b) { - return __a & ~__b; -} - -static vector int __ATTRS_o_ai vec_vandc(vector int __a, vector int __b) { - return __a & ~__b; -} - -static vector int __ATTRS_o_ai vec_vandc(vector bool int __a, vector int __b) { - return (vector int)__a & ~__b; -} - -static vector int __ATTRS_o_ai vec_vandc(vector int __a, vector bool int __b) { - return __a & ~(vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vandc(vector unsigned int __a, - vector unsigned int __b) { - return __a & ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vandc(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a & ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vandc(vector unsigned int __a, - vector bool int __b) { - return __a & ~(vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a, - vector bool int __b) { - return __a & ~__b; -} - -static vector float __ATTRS_o_ai vec_vandc(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vandc(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vandc(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a & ~(vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_vandc(vector signed long long __a, vector signed long long __b) { - return __a & ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_vandc(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a & ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_vandc(vector signed long long __a, vector bool long long __b) { - return __a & ~(vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vandc(vector unsigned long long __a, vector unsigned long long __b) { - return __a & ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vandc(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a & ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vandc(vector unsigned long long __a, vector bool long long __b) { - return __a & ~(vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_vandc(vector bool long long __a, - vector bool long long __b) { - return __a & ~__b; -} -#endif - -/* vec_avg */ - -static vector signed char __ATTRS_o_ai vec_avg(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vavgsb(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_avg(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vavgub(__a, __b); -} - -static vector short __ATTRS_o_ai vec_avg(vector short __a, vector short __b) { - return __builtin_altivec_vavgsh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_avg(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vavguh(__a, __b); -} - -static vector int __ATTRS_o_ai vec_avg(vector int __a, vector int __b) { - return __builtin_altivec_vavgsw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_avg(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vavguw(__a, __b); -} - -/* vec_vavgsb */ - -static vector signed char __attribute__((__always_inline__)) -vec_vavgsb(vector signed char __a, vector signed char __b) { - return __builtin_altivec_vavgsb(__a, __b); -} - -/* vec_vavgub */ - -static vector unsigned char __attribute__((__always_inline__)) -vec_vavgub(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_vavgub(__a, __b); -} - -/* vec_vavgsh */ - -static vector short __attribute__((__always_inline__)) -vec_vavgsh(vector short __a, vector short __b) { - return __builtin_altivec_vavgsh(__a, __b); -} - -/* vec_vavguh */ - -static vector unsigned short __attribute__((__always_inline__)) -vec_vavguh(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_vavguh(__a, __b); -} - -/* vec_vavgsw */ - -static vector int __attribute__((__always_inline__)) -vec_vavgsw(vector int __a, vector int __b) { - return __builtin_altivec_vavgsw(__a, __b); -} - -/* vec_vavguw */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vavguw(vector unsigned int __a, vector unsigned int __b) { - return __builtin_altivec_vavguw(__a, __b); -} - -/* vec_ceil */ - -static vector float __ATTRS_o_ai vec_ceil(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvrspip(__a); -#else - return __builtin_altivec_vrfip(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_ceil(vector double __a) { - return __builtin_vsx_xvrdpip(__a); -} -#endif - -/* vec_vrfip */ - -static vector float __attribute__((__always_inline__)) -vec_vrfip(vector float __a) { - return __builtin_altivec_vrfip(__a); -} - -/* vec_cmpb */ - -static vector int __attribute__((__always_inline__)) -vec_cmpb(vector float __a, vector float __b) { - return __builtin_altivec_vcmpbfp(__a, __b); -} - -/* vec_vcmpbfp */ - -static vector int __attribute__((__always_inline__)) -vec_vcmpbfp(vector float __a, vector float __b) { - return __builtin_altivec_vcmpbfp(__a, __b); -} - -/* vec_cmpeq */ - -static vector bool char __ATTRS_o_ai vec_cmpeq(vector signed char __a, - vector signed char __b) { - return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a, - (vector char)__b); -} - -static vector bool char __ATTRS_o_ai vec_cmpeq(vector unsigned char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a, - (vector char)__b); -} - -static vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a, - vector short __b) { - return (vector bool short)__builtin_altivec_vcmpequh(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_cmpeq(vector unsigned short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a, - (vector short)__b); -} - -static vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a, vector int __b) { - return (vector bool int)__builtin_altivec_vcmpequw(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_cmpeq(vector unsigned int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a, - (vector int)__b); -} - -#ifdef __POWER8_VECTOR__ -static vector bool long long __ATTRS_o_ai -vec_cmpeq(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b); -} - -static vector bool long long __ATTRS_o_ai -vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)__builtin_altivec_vcmpequd( - (vector long long)__a, (vector long long)__b); -} -#endif - -static vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a, - vector float __b) { -#ifdef __VSX__ - return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b); -#else - return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b); -#endif -} - -#ifdef __VSX__ -static vector bool long long __ATTRS_o_ai -vec_cmpeq(vector double __a, vector double __b) { - return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b); -} -#endif - -/* vec_cmpge */ - -static vector bool int __ATTRS_o_ai -vec_cmpge(vector float __a, vector float __b) { -#ifdef __VSX__ - return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b); -#else - return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); -#endif -} - -#ifdef __VSX__ -static vector bool long long __ATTRS_o_ai -vec_cmpge(vector double __a, vector double __b) { - return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b); -} -#endif - -#ifdef __POWER8_VECTOR__ -/* Forwrad declarations as the functions are used here */ -static vector bool long long __ATTRS_o_ai -vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b); -static vector bool long long __ATTRS_o_ai -vec_cmpgt(vector signed long long __a, vector signed long long __b); - -static vector bool long long __ATTRS_o_ai -vec_cmpge(vector signed long long __a, vector signed long long __b) { - return ~(vec_cmpgt(__b, __a)); -} - -static vector bool long long __ATTRS_o_ai -vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) { - return ~(vec_cmpgt(__b, __a)); -} -#endif - -/* vec_vcmpgefp */ - -static vector bool int __attribute__((__always_inline__)) -vec_vcmpgefp(vector float __a, vector float __b) { - return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); -} - -/* vec_cmpgt */ - -static vector bool char __ATTRS_o_ai vec_cmpgt(vector signed char __a, - vector signed char __b) { - return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); -} - -static vector bool char __ATTRS_o_ai vec_cmpgt(vector unsigned char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a, - vector short __b) { - return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_cmpgt(vector unsigned short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a, vector int __b) { - return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_cmpgt(vector unsigned int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); -} - -#ifdef __POWER8_VECTOR__ -static vector bool long long __ATTRS_o_ai -vec_cmpgt(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b); -} - -static vector bool long long __ATTRS_o_ai -vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b); -} -#endif - -static vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a, - vector float __b) { -#ifdef __VSX__ - return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b); -#else - return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); -#endif -} - -#ifdef __VSX__ -static vector bool long long __ATTRS_o_ai -vec_cmpgt(vector double __a, vector double __b) { - return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b); -} -#endif -/* vec_vcmpgtsb */ - -static vector bool char __attribute__((__always_inline__)) -vec_vcmpgtsb(vector signed char __a, vector signed char __b) { - return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); -} - -/* vec_vcmpgtub */ - -static vector bool char __attribute__((__always_inline__)) -vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); -} - -/* vec_vcmpgtsh */ - -static vector bool short __attribute__((__always_inline__)) -vec_vcmpgtsh(vector short __a, vector short __b) { - return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); -} - -/* vec_vcmpgtuh */ - -static vector bool short __attribute__((__always_inline__)) -vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); -} - -/* vec_vcmpgtsw */ - -static vector bool int __attribute__((__always_inline__)) -vec_vcmpgtsw(vector int __a, vector int __b) { - return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); -} - -/* vec_vcmpgtuw */ - -static vector bool int __attribute__((__always_inline__)) -vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); -} - -/* vec_vcmpgtfp */ - -static vector bool int __attribute__((__always_inline__)) -vec_vcmpgtfp(vector float __a, vector float __b) { - return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); -} - -/* vec_cmple */ - -static vector bool int __ATTRS_o_ai -vec_cmple(vector float __a, vector float __b) { - return vec_cmpge(__b, __a); -} - -#ifdef __VSX__ -static vector bool long long __ATTRS_o_ai -vec_cmple(vector double __a, vector double __b) { - return vec_cmpge(__b, __a); -} -#endif - -#ifdef __POWER8_VECTOR__ -static vector bool long long __ATTRS_o_ai -vec_cmple(vector signed long long __a, vector signed long long __b) { - return vec_cmpge(__b, __a); -} - -static vector bool long long __ATTRS_o_ai -vec_cmple(vector unsigned long long __a, vector unsigned long long __b) { - return vec_cmpge(__b, __a); -} -#endif - -/* vec_cmplt */ - -static vector bool char __ATTRS_o_ai vec_cmplt(vector signed char __a, - vector signed char __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool char __ATTRS_o_ai vec_cmplt(vector unsigned char __a, - vector unsigned char __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool short __ATTRS_o_ai vec_cmplt(vector short __a, - vector short __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool short __ATTRS_o_ai vec_cmplt(vector unsigned short __a, - vector unsigned short __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool int __ATTRS_o_ai vec_cmplt(vector int __a, vector int __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool int __ATTRS_o_ai vec_cmplt(vector unsigned int __a, - vector unsigned int __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool int __ATTRS_o_ai vec_cmplt(vector float __a, - vector float __b) { - return vec_cmpgt(__b, __a); -} - -#ifdef __VSX__ -static vector bool long long __ATTRS_o_ai -vec_cmplt(vector double __a, vector double __b) { - return vec_cmpgt(__b, __a); -} -#endif - -#ifdef __POWER8_VECTOR__ -static vector bool long long __ATTRS_o_ai -vec_cmplt(vector signed long long __a, vector signed long long __b) { - return vec_cmpgt(__b, __a); -} - -static vector bool long long __ATTRS_o_ai -vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) { - return vec_cmpgt(__b, __a); -} - -/* vec_cntlz */ - -static vector signed char __ATTRS_o_ai vec_cntlz(vector signed char __a) { - return __builtin_altivec_vclzb(__a); -} -static vector unsigned char __ATTRS_o_ai vec_cntlz(vector unsigned char __a) { - return __builtin_altivec_vclzb(__a); -} -static vector signed short __ATTRS_o_ai vec_cntlz(vector signed short __a) { - return __builtin_altivec_vclzh(__a); -} -static vector unsigned short __ATTRS_o_ai vec_cntlz(vector unsigned short __a) { - return __builtin_altivec_vclzh(__a); -} -static vector signed int __ATTRS_o_ai vec_cntlz(vector signed int __a) { - return __builtin_altivec_vclzw(__a); -} -static vector unsigned int __ATTRS_o_ai vec_cntlz(vector unsigned int __a) { - return __builtin_altivec_vclzw(__a); -} -static vector signed long long __ATTRS_o_ai -vec_cntlz(vector signed long long __a) { - return __builtin_altivec_vclzd(__a); -} -static vector unsigned long long __ATTRS_o_ai -vec_cntlz(vector unsigned long long __a) { - return __builtin_altivec_vclzd(__a); -} -#endif - -/* vec_cpsgn */ - -#ifdef __VSX__ -static vector float __ATTRS_o_ai vec_cpsgn(vector float __a, vector float __b) { - return __builtin_vsx_xvcpsgnsp(__a, __b); -} - -static vector double __ATTRS_o_ai vec_cpsgn(vector double __a, - vector double __b) { - return __builtin_vsx_xvcpsgndp(__a, __b); -} -#endif - -/* vec_ctf */ - -static vector float __ATTRS_o_ai vec_ctf(vector int __a, int __b) { - return __builtin_altivec_vcfsx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_ctf(vector unsigned int __a, int __b) { - return __builtin_altivec_vcfux((vector int)__a, __b); -} - -/* vec_vcfsx */ - -static vector float __attribute__((__always_inline__)) -vec_vcfsx(vector int __a, int __b) { - return __builtin_altivec_vcfsx(__a, __b); -} - -/* vec_vcfux */ - -static vector float __attribute__((__always_inline__)) -vec_vcfux(vector unsigned int __a, int __b) { - return __builtin_altivec_vcfux((vector int)__a, __b); -} - -/* vec_cts */ - -static vector int __attribute__((__always_inline__)) -vec_cts(vector float __a, int __b) { - return __builtin_altivec_vctsxs(__a, __b); -} - -/* vec_vctsxs */ - -static vector int __attribute__((__always_inline__)) -vec_vctsxs(vector float __a, int __b) { - return __builtin_altivec_vctsxs(__a, __b); -} - -/* vec_ctu */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_ctu(vector float __a, int __b) { - return __builtin_altivec_vctuxs(__a, __b); -} - -/* vec_vctuxs */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vctuxs(vector float __a, int __b) { - return __builtin_altivec_vctuxs(__a, __b); -} - -/* vec_div */ - -/* Integer vector divides (vectors are scalarized, elements divided - and the vectors reassembled). -*/ -static vector signed char __ATTRS_o_ai vec_div(vector signed char __a, - vector signed char __b) { - return __a / __b; -} - -static vector unsigned char __ATTRS_o_ai vec_div(vector unsigned char __a, - vector unsigned char __b) { - return __a / __b; -} - -static vector signed short __ATTRS_o_ai vec_div(vector signed short __a, - vector signed short __b) { - return __a / __b; -} - -static vector unsigned short __ATTRS_o_ai vec_div(vector unsigned short __a, - vector unsigned short __b) { - return __a / __b; -} - -static vector signed int __ATTRS_o_ai vec_div(vector signed int __a, - vector signed int __b) { - return __a / __b; -} - -static vector unsigned int __ATTRS_o_ai vec_div(vector unsigned int __a, - vector unsigned int __b) { - return __a / __b; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_div(vector signed long long __a, vector signed long long __b) { - return __a / __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_div(vector unsigned long long __a, vector unsigned long long __b) { - return __a / __b; -} - -static vector float __ATTRS_o_ai vec_div(vector float __a, vector float __b) { - return __a / __b; -} - -static vector double __ATTRS_o_ai vec_div(vector double __a, - vector double __b) { - return __a / __b; -} -#endif - -/* vec_dss */ - -static void __attribute__((__always_inline__)) vec_dss(int __a) { - __builtin_altivec_dss(__a); -} - -/* vec_dssall */ - -static void __attribute__((__always_inline__)) vec_dssall(void) { - __builtin_altivec_dssall(); -} - -/* vec_dst */ - -static void __attribute__((__always_inline__)) -vec_dst(const void *__a, int __b, int __c) { - __builtin_altivec_dst(__a, __b, __c); -} - -/* vec_dstst */ - -static void __attribute__((__always_inline__)) -vec_dstst(const void *__a, int __b, int __c) { - __builtin_altivec_dstst(__a, __b, __c); -} - -/* vec_dststt */ - -static void __attribute__((__always_inline__)) -vec_dststt(const void *__a, int __b, int __c) { - __builtin_altivec_dststt(__a, __b, __c); -} - -/* vec_dstt */ - -static void __attribute__((__always_inline__)) -vec_dstt(const void *__a, int __b, int __c) { - __builtin_altivec_dstt(__a, __b, __c); -} - -/* vec_eqv */ - -#ifdef __POWER8_VECTOR__ -static vector signed char __ATTRS_o_ai vec_eqv(vector signed char __a, - vector signed char __b) { - return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed char __ATTRS_o_ai vec_eqv(vector bool char __a, - vector signed char __b) { - return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed char __ATTRS_o_ai vec_eqv(vector signed char __a, - vector bool char __b) { - return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_eqv(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_eqv(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_eqv(vector unsigned char __a, - vector bool char __b) { - return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed short __ATTRS_o_ai vec_eqv(vector signed short __a, - vector signed short __b) { - return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed short __ATTRS_o_ai vec_eqv(vector bool short __a, - vector signed short __b) { - return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed short __ATTRS_o_ai vec_eqv(vector signed short __a, - vector bool short __b) { - return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_eqv(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_eqv(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_eqv(vector unsigned short __a, - vector bool short __b) { - return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed int __ATTRS_o_ai vec_eqv(vector signed int __a, - vector signed int __b) { - return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed int __ATTRS_o_ai vec_eqv(vector bool int __a, - vector signed int __b) { - return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed int __ATTRS_o_ai vec_eqv(vector signed int __a, - vector bool int __b) { - return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_eqv(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_eqv(vector bool int __a, - vector unsigned int __b) { - return __builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_eqv(vector unsigned int __a, - vector bool int __b) { - return __builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector signed long long __ATTRS_o_ai -vec_eqv(vector signed long long __a, vector signed long long __b) { - return (vector signed long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector signed long long __ATTRS_o_ai -vec_eqv(vector bool long long __a, vector signed long long __b) { - return (vector signed long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector signed long long __ATTRS_o_ai -vec_eqv(vector signed long long __a, vector bool long long __b) { - return (vector signed long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_eqv(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_eqv(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_eqv(vector unsigned long long __a, vector bool long long __b) { - return (vector unsigned long long) - __builtin_vsx_xxleqv((vector unsigned int)__a, (vector unsigned int)__b); -} - -static vector float __ATTRS_o_ai vec_eqv(vector float __a, vector float __b) { - return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector float __ATTRS_o_ai vec_eqv(vector bool int __a, - vector float __b) { - return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector float __ATTRS_o_ai vec_eqv(vector float __a, - vector bool int __b) { - return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector double __ATTRS_o_ai vec_eqv(vector double __a, - vector double __b) { - return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector double __ATTRS_o_ai vec_eqv(vector bool long long __a, - vector double __b) { - return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static vector double __ATTRS_o_ai vec_eqv(vector double __a, - vector bool long long __b) { - return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a, - (vector unsigned int)__b); -} -#endif - -/* vec_expte */ - -static vector float __attribute__((__always_inline__)) -vec_expte(vector float __a) { - return __builtin_altivec_vexptefp(__a); -} - -/* vec_vexptefp */ - -static vector float __attribute__((__always_inline__)) -vec_vexptefp(vector float __a) { - return __builtin_altivec_vexptefp(__a); -} - -/* vec_floor */ - -static vector float __ATTRS_o_ai vec_floor(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvrspim(__a); -#else - return __builtin_altivec_vrfim(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_floor(vector double __a) { - return __builtin_vsx_xvrdpim(__a); -} -#endif - -/* vec_vrfim */ - -static vector float __attribute__((__always_inline__)) -vec_vrfim(vector float __a) { - return __builtin_altivec_vrfim(__a); -} - -/* vec_ld */ - -static vector signed char __ATTRS_o_ai vec_ld(int __a, - const vector signed char *__b) { - return (vector signed char)__builtin_altivec_lvx(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_ld(int __a, const signed char *__b) { - return (vector signed char)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai -vec_ld(int __a, const vector unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_ld(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvx(__a, __b); -} - -static vector bool char __ATTRS_o_ai vec_ld(int __a, - const vector bool char *__b) { - return (vector bool char)__builtin_altivec_lvx(__a, __b); -} - -static vector short __ATTRS_o_ai vec_ld(int __a, const vector short *__b) { - return (vector short)__builtin_altivec_lvx(__a, __b); -} - -static vector short __ATTRS_o_ai vec_ld(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_ld(int __a, const vector unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_ld(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvx(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_ld(int __a, - const vector bool short *__b) { - return (vector bool short)__builtin_altivec_lvx(__a, __b); -} - -static vector pixel __ATTRS_o_ai vec_ld(int __a, const vector pixel *__b) { - return (vector pixel)__builtin_altivec_lvx(__a, __b); -} - -static vector int __ATTRS_o_ai vec_ld(int __a, const vector int *__b) { - return (vector int)__builtin_altivec_lvx(__a, __b); -} - -static vector int __ATTRS_o_ai vec_ld(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_ld(int __a, - const vector unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_ld(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvx(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_ld(int __a, - const vector bool int *__b) { - return (vector bool int)__builtin_altivec_lvx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_ld(int __a, const vector float *__b) { - return (vector float)__builtin_altivec_lvx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_ld(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvx(__a, __b); -} - -/* vec_lvx */ - -static vector signed char __ATTRS_o_ai vec_lvx(int __a, - const vector signed char *__b) { - return (vector signed char)__builtin_altivec_lvx(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_lvx(int __a, - const signed char *__b) { - return (vector signed char)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvx(int __a, const vector unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_lvx(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvx(__a, __b); -} - -static vector bool char __ATTRS_o_ai vec_lvx(int __a, - const vector bool char *__b) { - return (vector bool char)__builtin_altivec_lvx(__a, __b); -} - -static vector short __ATTRS_o_ai vec_lvx(int __a, const vector short *__b) { - return (vector short)__builtin_altivec_lvx(__a, __b); -} - -static vector short __ATTRS_o_ai vec_lvx(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvx(int __a, const vector unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_lvx(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvx(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_lvx(int __a, - const vector bool short *__b) { - return (vector bool short)__builtin_altivec_lvx(__a, __b); -} - -static vector pixel __ATTRS_o_ai vec_lvx(int __a, const vector pixel *__b) { - return (vector pixel)__builtin_altivec_lvx(__a, __b); -} - -static vector int __ATTRS_o_ai vec_lvx(int __a, const vector int *__b) { - return (vector int)__builtin_altivec_lvx(__a, __b); -} - -static vector int __ATTRS_o_ai vec_lvx(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvx(int __a, const vector unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_lvx(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvx(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_lvx(int __a, - const vector bool int *__b) { - return (vector bool int)__builtin_altivec_lvx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lvx(int __a, const vector float *__b) { - return (vector float)__builtin_altivec_lvx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lvx(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvx(__a, __b); -} - -/* vec_lde */ - -static vector signed char __ATTRS_o_ai vec_lde(int __a, - const signed char *__b) { - return (vector signed char)__builtin_altivec_lvebx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_lde(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); -} - -static vector short __ATTRS_o_ai vec_lde(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvehx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_lde(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); -} - -static vector int __ATTRS_o_ai vec_lde(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvewx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_lde(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lde(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvewx(__a, __b); -} - -/* vec_lvebx */ - -static vector signed char __ATTRS_o_ai vec_lvebx(int __a, - const signed char *__b) { - return (vector signed char)__builtin_altivec_lvebx(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_lvebx(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); -} - -/* vec_lvehx */ - -static vector short __ATTRS_o_ai vec_lvehx(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvehx(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_lvehx(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); -} - -/* vec_lvewx */ - -static vector int __ATTRS_o_ai vec_lvewx(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvewx(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_lvewx(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lvewx(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvewx(__a, __b); -} - -/* vec_ldl */ - -static vector signed char __ATTRS_o_ai vec_ldl(int __a, - const vector signed char *__b) { - return (vector signed char)__builtin_altivec_lvxl(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_ldl(int __a, - const signed char *__b) { - return (vector signed char)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai -vec_ldl(int __a, const vector unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_ldl(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool char __ATTRS_o_ai vec_ldl(int __a, - const vector bool char *__b) { - return (vector bool char)__builtin_altivec_lvxl(__a, __b); -} - -static vector short __ATTRS_o_ai vec_ldl(int __a, const vector short *__b) { - return (vector short)__builtin_altivec_lvxl(__a, __b); -} - -static vector short __ATTRS_o_ai vec_ldl(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_ldl(int __a, const vector unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_ldl(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_ldl(int __a, - const vector bool short *__b) { - return (vector bool short)__builtin_altivec_lvxl(__a, __b); -} - -static vector pixel __ATTRS_o_ai vec_ldl(int __a, const vector pixel *__b) { - return (vector pixel short)__builtin_altivec_lvxl(__a, __b); -} - -static vector int __ATTRS_o_ai vec_ldl(int __a, const vector int *__b) { - return (vector int)__builtin_altivec_lvxl(__a, __b); -} - -static vector int __ATTRS_o_ai vec_ldl(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai -vec_ldl(int __a, const vector unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_ldl(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_ldl(int __a, - const vector bool int *__b) { - return (vector bool int)__builtin_altivec_lvxl(__a, __b); -} - -static vector float __ATTRS_o_ai vec_ldl(int __a, const vector float *__b) { - return (vector float)__builtin_altivec_lvxl(__a, __b); -} - -static vector float __ATTRS_o_ai vec_ldl(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvxl(__a, __b); -} - -/* vec_lvxl */ - -static vector signed char __ATTRS_o_ai vec_lvxl(int __a, - const vector signed char *__b) { - return (vector signed char)__builtin_altivec_lvxl(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_lvxl(int __a, - const signed char *__b) { - return (vector signed char)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvxl(int __a, const vector unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_lvxl(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool char __ATTRS_o_ai vec_lvxl(int __a, - const vector bool char *__b) { - return (vector bool char)__builtin_altivec_lvxl(__a, __b); -} - -static vector short __ATTRS_o_ai vec_lvxl(int __a, const vector short *__b) { - return (vector short)__builtin_altivec_lvxl(__a, __b); -} - -static vector short __ATTRS_o_ai vec_lvxl(int __a, const short *__b) { - return (vector short)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvxl(int __a, const vector unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_lvxl(int __a, - const unsigned short *__b) { - return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool short __ATTRS_o_ai vec_lvxl(int __a, - const vector bool short *__b) { - return (vector bool short)__builtin_altivec_lvxl(__a, __b); -} - -static vector pixel __ATTRS_o_ai vec_lvxl(int __a, const vector pixel *__b) { - return (vector pixel)__builtin_altivec_lvxl(__a, __b); -} - -static vector int __ATTRS_o_ai vec_lvxl(int __a, const vector int *__b) { - return (vector int)__builtin_altivec_lvxl(__a, __b); -} - -static vector int __ATTRS_o_ai vec_lvxl(int __a, const int *__b) { - return (vector int)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvxl(int __a, const vector unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_lvxl(int __a, - const unsigned int *__b) { - return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); -} - -static vector bool int __ATTRS_o_ai vec_lvxl(int __a, - const vector bool int *__b) { - return (vector bool int)__builtin_altivec_lvxl(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lvxl(int __a, const vector float *__b) { - return (vector float)__builtin_altivec_lvxl(__a, __b); -} - -static vector float __ATTRS_o_ai vec_lvxl(int __a, const float *__b) { - return (vector float)__builtin_altivec_lvxl(__a, __b); -} - -/* vec_loge */ - -static vector float __attribute__((__always_inline__)) -vec_loge(vector float __a) { - return __builtin_altivec_vlogefp(__a); -} - -/* vec_vlogefp */ - -static vector float __attribute__((__always_inline__)) -vec_vlogefp(vector float __a) { - return __builtin_altivec_vlogefp(__a); -} - -/* vec_lvsl */ - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const signed char *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, - const signed char *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const short *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, const short *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, - const unsigned short *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const int *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, const int *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, - const unsigned int *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsl(int __a, const float *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsl(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, const float *__b) { - return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); -} -#endif - -/* vec_lvsr */ - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const signed char *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, - const signed char *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, - const unsigned char *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const short *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, const short *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, - const unsigned short *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const int *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, const int *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, - const unsigned int *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -#ifdef __LITTLE_ENDIAN__ -static vector unsigned char __ATTRS_o_ai - __attribute__((__deprecated__("use assignment for unaligned little endian \ -loads/stores"))) vec_lvsr(int __a, const float *__b) { - vector unsigned char mask = - (vector unsigned char)__builtin_altivec_lvsr(__a, __b); - vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; - return vec_perm(mask, mask, reverse); -} -#else -static vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, const float *__b) { - return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); -} -#endif - -/* vec_madd */ - -static vector float __ATTRS_o_ai -vec_madd(vector float __a, vector float __b, vector float __c) { -#ifdef __VSX__ - return __builtin_vsx_xvmaddasp(__a, __b, __c); -#else - return __builtin_altivec_vmaddfp(__a, __b, __c); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_madd(vector double __a, vector double __b, vector double __c) { - return __builtin_vsx_xvmaddadp(__a, __b, __c); -} -#endif - -/* vec_vmaddfp */ - -static vector float __attribute__((__always_inline__)) -vec_vmaddfp(vector float __a, vector float __b, vector float __c) { - return __builtin_altivec_vmaddfp(__a, __b, __c); -} - -/* vec_madds */ - -static vector signed short __attribute__((__always_inline__)) -vec_madds(vector signed short __a, vector signed short __b, - vector signed short __c) { - return __builtin_altivec_vmhaddshs(__a, __b, __c); -} - -/* vec_vmhaddshs */ -static vector signed short __attribute__((__always_inline__)) -vec_vmhaddshs(vector signed short __a, vector signed short __b, - vector signed short __c) { - return __builtin_altivec_vmhaddshs(__a, __b, __c); -} - -/* vec_msub */ - -#ifdef __VSX__ -static vector float __ATTRS_o_ai -vec_msub(vector float __a, vector float __b, vector float __c) { - return __builtin_vsx_xvmsubasp(__a, __b, __c); -} - -static vector double __ATTRS_o_ai -vec_msub(vector double __a, vector double __b, vector double __c) { - return __builtin_vsx_xvmsubadp(__a, __b, __c); -} -#endif - -/* vec_max */ - -static vector signed char __ATTRS_o_ai vec_max(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vmaxsb(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_max(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vmaxsb((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_max(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_max(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vmaxub(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_max(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_max(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); -} - -static vector short __ATTRS_o_ai vec_max(vector short __a, vector short __b) { - return __builtin_altivec_vmaxsh(__a, __b); -} - -static vector short __ATTRS_o_ai vec_max(vector bool short __a, - vector short __b) { - return __builtin_altivec_vmaxsh((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_max(vector short __a, - vector bool short __b) { - return __builtin_altivec_vmaxsh(__a, (vector short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_max(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vmaxuh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_max(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_max(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); -} - -static vector int __ATTRS_o_ai vec_max(vector int __a, vector int __b) { - return __builtin_altivec_vmaxsw(__a, __b); -} - -static vector int __ATTRS_o_ai vec_max(vector bool int __a, vector int __b) { - return __builtin_altivec_vmaxsw((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_max(vector int __a, vector bool int __b) { - return __builtin_altivec_vmaxsw(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_max(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vmaxuw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_max(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_max(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_max(vector signed long long __a, vector signed long long __b) { - return __builtin_altivec_vmaxsd(__a, __b); -} - -static vector signed long long __ATTRS_o_ai -vec_max(vector bool long long __a, vector signed long long __b) { - return __builtin_altivec_vmaxsd((vector signed long long)__a, __b); -} - -static vector signed long long __ATTRS_o_ai vec_max(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_max(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_altivec_vmaxud(__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_max(vector bool long long __a, vector unsigned long long __b) { - return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_max(vector unsigned long long __a, vector bool long long __b) { - return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b); -} -#endif - -static vector float __ATTRS_o_ai vec_max(vector float __a, vector float __b) { -#ifdef __VSX__ - return __builtin_vsx_xvmaxsp(__a, __b); -#else - return __builtin_altivec_vmaxfp(__a, __b); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_max(vector double __a, - vector double __b) { - return __builtin_vsx_xvmaxdp(__a, __b); -} -#endif - -/* vec_vmaxsb */ - -static vector signed char __ATTRS_o_ai vec_vmaxsb(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vmaxsb(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vmaxsb(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vmaxsb((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vmaxsb(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); -} - -/* vec_vmaxub */ - -static vector unsigned char __ATTRS_o_ai vec_vmaxub(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vmaxub(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vmaxub(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vmaxub(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); -} - -/* vec_vmaxsh */ - -static vector short __ATTRS_o_ai vec_vmaxsh(vector short __a, - vector short __b) { - return __builtin_altivec_vmaxsh(__a, __b); -} - -static vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a, - vector short __b) { - return __builtin_altivec_vmaxsh((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_vmaxsh(vector short __a, - vector bool short __b) { - return __builtin_altivec_vmaxsh(__a, (vector short)__b); -} - -/* vec_vmaxuh */ - -static vector unsigned short __ATTRS_o_ai -vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_vmaxuh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_vmaxuh(vector bool short __a, vector unsigned short __b) { - return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vmaxuh(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); -} - -/* vec_vmaxsw */ - -static vector int __ATTRS_o_ai vec_vmaxsw(vector int __a, vector int __b) { - return __builtin_altivec_vmaxsw(__a, __b); -} - -static vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a, vector int __b) { - return __builtin_altivec_vmaxsw((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_vmaxsw(vector int __a, vector bool int __b) { - return __builtin_altivec_vmaxsw(__a, (vector int)__b); -} - -/* vec_vmaxuw */ - -static vector unsigned int __ATTRS_o_ai vec_vmaxuw(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vmaxuw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vmaxuw(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vmaxuw(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); -} - -/* vec_vmaxfp */ - -static vector float __attribute__((__always_inline__)) -vec_vmaxfp(vector float __a, vector float __b) { -#ifdef __VSX__ - return __builtin_vsx_xvmaxsp(__a, __b); -#else - return __builtin_altivec_vmaxfp(__a, __b); -#endif -} - -/* vec_mergeh */ - -static vector signed char __ATTRS_o_ai vec_mergeh(vector signed char __a, - vector signed char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -static vector unsigned char __ATTRS_o_ai vec_mergeh(vector unsigned char __a, - vector unsigned char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -static vector bool char __ATTRS_o_ai vec_mergeh(vector bool char __a, - vector bool char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -static vector short __ATTRS_o_ai vec_mergeh(vector short __a, - vector short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector unsigned short __ATTRS_o_ai -vec_mergeh(vector unsigned short __a, vector unsigned short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector bool short __ATTRS_o_ai vec_mergeh(vector bool short __a, - vector bool short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a, - vector pixel __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector int __ATTRS_o_ai vec_mergeh(vector int __a, vector int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector unsigned int __ATTRS_o_ai vec_mergeh(vector unsigned int __a, - vector unsigned int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a, - vector bool int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector float __ATTRS_o_ai vec_mergeh(vector float __a, - vector float __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_mergeh(vector signed long long __a, vector signed long long __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector signed long long __ATTRS_o_ai -vec_mergeh(vector signed long long __a, vector bool long long __b) { - return vec_perm(__a, (vector signed long long)__b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector signed long long __ATTRS_o_ai -vec_mergeh(vector bool long long __a, vector signed long long __b) { - return vec_perm((vector signed long long)__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector unsigned long long __ATTRS_o_ai -vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector unsigned long long __ATTRS_o_ai -vec_mergeh(vector unsigned long long __a, vector bool long long __b) { - return vec_perm(__a, (vector unsigned long long)__b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector unsigned long long __ATTRS_o_ai -vec_mergeh(vector bool long long __a, vector unsigned long long __b) { - return vec_perm((vector unsigned long long)__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} -static vector double __ATTRS_o_ai vec_mergeh(vector double __a, - vector double __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} -static vector double __ATTRS_o_ai vec_mergeh(vector double __a, - vector bool long long __b) { - return vec_perm(__a, (vector double)__b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} -static vector double __ATTRS_o_ai vec_mergeh(vector bool long long __a, - vector double __b) { - return vec_perm((vector double)__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17)); -} -#endif - -/* vec_vmrghb */ - -#define __builtin_altivec_vmrghb vec_vmrghb - -static vector signed char __ATTRS_o_ai vec_vmrghb(vector signed char __a, - vector signed char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -static vector unsigned char __ATTRS_o_ai vec_vmrghb(vector unsigned char __a, - vector unsigned char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -static vector bool char __ATTRS_o_ai vec_vmrghb(vector bool char __a, - vector bool char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, - 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, - 0x06, 0x16, 0x07, 0x17)); -} - -/* vec_vmrghh */ - -#define __builtin_altivec_vmrghh vec_vmrghh - -static vector short __ATTRS_o_ai vec_vmrghh(vector short __a, - vector short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector unsigned short __ATTRS_o_ai -vec_vmrghh(vector unsigned short __a, vector unsigned short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector bool short __ATTRS_o_ai vec_vmrghh(vector bool short __a, - vector bool short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -static vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a, - vector pixel __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, - 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, - 0x06, 0x07, 0x16, 0x17)); -} - -/* vec_vmrghw */ - -#define __builtin_altivec_vmrghw vec_vmrghw - -static vector int __ATTRS_o_ai vec_vmrghw(vector int __a, vector int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector unsigned int __ATTRS_o_ai vec_vmrghw(vector unsigned int __a, - vector unsigned int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a, - vector bool int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -static vector float __ATTRS_o_ai vec_vmrghw(vector float __a, - vector float __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, - 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, - 0x14, 0x15, 0x16, 0x17)); -} - -/* vec_mergel */ - -static vector signed char __ATTRS_o_ai vec_mergel(vector signed char __a, - vector signed char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -static vector unsigned char __ATTRS_o_ai vec_mergel(vector unsigned char __a, - vector unsigned char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -static vector bool char __ATTRS_o_ai vec_mergel(vector bool char __a, - vector bool char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -static vector short __ATTRS_o_ai vec_mergel(vector short __a, - vector short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector unsigned short __ATTRS_o_ai -vec_mergel(vector unsigned short __a, vector unsigned short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector bool short __ATTRS_o_ai vec_mergel(vector bool short __a, - vector bool short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a, - vector pixel __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector int __ATTRS_o_ai vec_mergel(vector int __a, vector int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector unsigned int __ATTRS_o_ai vec_mergel(vector unsigned int __a, - vector unsigned int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a, - vector bool int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector float __ATTRS_o_ai vec_mergel(vector float __a, - vector float __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_mergel(vector signed long long __a, vector signed long long __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector signed long long __ATTRS_o_ai -vec_mergel(vector signed long long __a, vector bool long long __b) { - return vec_perm(__a, (vector signed long long)__b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector signed long long __ATTRS_o_ai -vec_mergel(vector bool long long __a, vector signed long long __b) { - return vec_perm((vector signed long long)__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector unsigned long long __ATTRS_o_ai -vec_mergel(vector unsigned long long __a, vector unsigned long long __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector unsigned long long __ATTRS_o_ai -vec_mergel(vector unsigned long long __a, vector bool long long __b) { - return vec_perm(__a, (vector unsigned long long)__b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector unsigned long long __ATTRS_o_ai -vec_mergel(vector bool long long __a, vector unsigned long long __b) { - return vec_perm((vector unsigned long long)__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector double __ATTRS_o_ai -vec_mergel(vector double __a, vector double __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector double __ATTRS_o_ai -vec_mergel(vector double __a, vector bool long long __b) { - return vec_perm(__a, (vector double)__b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -static vector double __ATTRS_o_ai -vec_mergel(vector bool long long __a, vector double __b) { - return vec_perm((vector double)__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, - 0x18, 0X19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E, 0x1F)); -} -#endif - -/* vec_vmrglb */ - -#define __builtin_altivec_vmrglb vec_vmrglb - -static vector signed char __ATTRS_o_ai vec_vmrglb(vector signed char __a, - vector signed char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -static vector unsigned char __ATTRS_o_ai vec_vmrglb(vector unsigned char __a, - vector unsigned char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -static vector bool char __ATTRS_o_ai vec_vmrglb(vector bool char __a, - vector bool char __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, - 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, - 0x0E, 0x1E, 0x0F, 0x1F)); -} - -/* vec_vmrglh */ - -#define __builtin_altivec_vmrglh vec_vmrglh - -static vector short __ATTRS_o_ai vec_vmrglh(vector short __a, - vector short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector unsigned short __ATTRS_o_ai -vec_vmrglh(vector unsigned short __a, vector unsigned short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector bool short __ATTRS_o_ai vec_vmrglh(vector bool short __a, - vector bool short __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -static vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a, - vector pixel __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, - 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, - 0x0E, 0x0F, 0x1E, 0x1F)); -} - -/* vec_vmrglw */ - -#define __builtin_altivec_vmrglw vec_vmrglw - -static vector int __ATTRS_o_ai vec_vmrglw(vector int __a, vector int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector unsigned int __ATTRS_o_ai vec_vmrglw(vector unsigned int __a, - vector unsigned int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a, - vector bool int __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector float __ATTRS_o_ai vec_vmrglw(vector float __a, - vector float __b) { - return vec_perm(__a, __b, - (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, - 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x1C, 0x1D, 0x1E, 0x1F)); -} - - -#ifdef __POWER8_VECTOR__ -/* vec_mergee */ - -static vector bool int __ATTRS_o_ai -vec_mergee(vector bool int __a, vector bool int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, - 0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B)); -} - -static vector signed int __ATTRS_o_ai -vec_mergee(vector signed int __a, vector signed int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, - 0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B)); -} - -static vector unsigned int __ATTRS_o_ai -vec_mergee(vector unsigned int __a, vector unsigned int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, - 0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B)); -} - -/* vec_mergeo */ - -static vector bool int __ATTRS_o_ai -vec_mergeo(vector bool int __a, vector bool int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17, - 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector signed int __ATTRS_o_ai -vec_mergeo(vector signed int __a, vector signed int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17, - 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); -} - -static vector unsigned int __ATTRS_o_ai -vec_mergeo(vector unsigned int __a, vector unsigned int __b) { - return vec_perm(__a, __b, (vector unsigned char) - (0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17, - 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); -} - -#endif - -/* vec_mfvscr */ - -static vector unsigned short __attribute__((__always_inline__)) -vec_mfvscr(void) { - return __builtin_altivec_mfvscr(); -} - -/* vec_min */ - -static vector signed char __ATTRS_o_ai vec_min(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vminsb(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_min(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vminsb((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_min(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vminsb(__a, (vector signed char)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_min(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vminub(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_min(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vminub((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_min(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vminub(__a, (vector unsigned char)__b); -} - -static vector short __ATTRS_o_ai vec_min(vector short __a, vector short __b) { - return __builtin_altivec_vminsh(__a, __b); -} - -static vector short __ATTRS_o_ai vec_min(vector bool short __a, - vector short __b) { - return __builtin_altivec_vminsh((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_min(vector short __a, - vector bool short __b) { - return __builtin_altivec_vminsh(__a, (vector short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_min(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vminuh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_min(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vminuh((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_min(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); -} - -static vector int __ATTRS_o_ai vec_min(vector int __a, vector int __b) { - return __builtin_altivec_vminsw(__a, __b); -} - -static vector int __ATTRS_o_ai vec_min(vector bool int __a, vector int __b) { - return __builtin_altivec_vminsw((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_min(vector int __a, vector bool int __b) { - return __builtin_altivec_vminsw(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_min(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vminuw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_min(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vminuw((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_min(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_min(vector signed long long __a, vector signed long long __b) { - return __builtin_altivec_vminsd(__a, __b); -} - -static vector signed long long __ATTRS_o_ai -vec_min(vector bool long long __a, vector signed long long __b) { - return __builtin_altivec_vminsd((vector signed long long)__a, __b); -} - -static vector signed long long __ATTRS_o_ai vec_min(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vminsd(__a, (vector signed long long)__b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_min(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_altivec_vminud(__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_min(vector bool long long __a, vector unsigned long long __b) { - return __builtin_altivec_vminud((vector unsigned long long)__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_min(vector unsigned long long __a, vector bool long long __b) { - return __builtin_altivec_vminud(__a, (vector unsigned long long)__b); -} -#endif - -static vector float __ATTRS_o_ai vec_min(vector float __a, vector float __b) { -#ifdef __VSX__ - return __builtin_vsx_xvminsp(__a, __b); -#else - return __builtin_altivec_vminfp(__a, __b); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_min(vector double __a, - vector double __b) { - return __builtin_vsx_xvmindp(__a, __b); -} -#endif - -/* vec_vminsb */ - -static vector signed char __ATTRS_o_ai vec_vminsb(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vminsb(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vminsb(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vminsb((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vminsb(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vminsb(__a, (vector signed char)__b); -} - -/* vec_vminub */ - -static vector unsigned char __ATTRS_o_ai vec_vminub(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vminub(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vminub(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vminub((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vminub(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vminub(__a, (vector unsigned char)__b); -} - -/* vec_vminsh */ - -static vector short __ATTRS_o_ai vec_vminsh(vector short __a, - vector short __b) { - return __builtin_altivec_vminsh(__a, __b); -} - -static vector short __ATTRS_o_ai vec_vminsh(vector bool short __a, - vector short __b) { - return __builtin_altivec_vminsh((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_vminsh(vector short __a, - vector bool short __b) { - return __builtin_altivec_vminsh(__a, (vector short)__b); -} - -/* vec_vminuh */ - -static vector unsigned short __ATTRS_o_ai -vec_vminuh(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_vminuh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_vminuh(vector bool short __a, vector unsigned short __b) { - return __builtin_altivec_vminuh((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vminuh(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); -} - -/* vec_vminsw */ - -static vector int __ATTRS_o_ai vec_vminsw(vector int __a, vector int __b) { - return __builtin_altivec_vminsw(__a, __b); -} - -static vector int __ATTRS_o_ai vec_vminsw(vector bool int __a, vector int __b) { - return __builtin_altivec_vminsw((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_vminsw(vector int __a, vector bool int __b) { - return __builtin_altivec_vminsw(__a, (vector int)__b); -} - -/* vec_vminuw */ - -static vector unsigned int __ATTRS_o_ai vec_vminuw(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vminuw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vminuw(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vminuw((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vminuw(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); -} - -/* vec_vminfp */ - -static vector float __attribute__((__always_inline__)) -vec_vminfp(vector float __a, vector float __b) { -#ifdef __VSX__ - return __builtin_vsx_xvminsp(__a, __b); -#else - return __builtin_altivec_vminfp(__a, __b); -#endif -} - -/* vec_mladd */ - -#define __builtin_altivec_vmladduhm vec_mladd - -static vector short __ATTRS_o_ai vec_mladd(vector short __a, vector short __b, - vector short __c) { - return __a * __b + __c; -} - -static vector short __ATTRS_o_ai vec_mladd(vector short __a, - vector unsigned short __b, - vector unsigned short __c) { - return __a * (vector short)__b + (vector short)__c; -} - -static vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a, - vector short __b, vector short __c) { - return (vector short)__a * __b + __c; -} - -static vector unsigned short __ATTRS_o_ai vec_mladd(vector unsigned short __a, - vector unsigned short __b, - vector unsigned short __c) { - return __a * __b + __c; -} - -/* vec_vmladduhm */ - -static vector short __ATTRS_o_ai vec_vmladduhm(vector short __a, - vector short __b, - vector short __c) { - return __a * __b + __c; -} - -static vector short __ATTRS_o_ai vec_vmladduhm(vector short __a, - vector unsigned short __b, - vector unsigned short __c) { - return __a * (vector short)__b + (vector short)__c; -} - -static vector short __ATTRS_o_ai vec_vmladduhm(vector unsigned short __a, - vector short __b, - vector short __c) { - return (vector short)__a * __b + __c; -} - -static vector unsigned short __ATTRS_o_ai -vec_vmladduhm(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __a * __b + __c; -} - -/* vec_mradds */ - -static vector short __attribute__((__always_inline__)) -vec_mradds(vector short __a, vector short __b, vector short __c) { - return __builtin_altivec_vmhraddshs(__a, __b, __c); -} - -/* vec_vmhraddshs */ - -static vector short __attribute__((__always_inline__)) -vec_vmhraddshs(vector short __a, vector short __b, vector short __c) { - return __builtin_altivec_vmhraddshs(__a, __b, __c); -} - -/* vec_msum */ - -static vector int __ATTRS_o_ai vec_msum(vector signed char __a, - vector unsigned char __b, - vector int __c) { - return __builtin_altivec_vmsummbm(__a, __b, __c); -} - -static vector unsigned int __ATTRS_o_ai vec_msum(vector unsigned char __a, - vector unsigned char __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumubm(__a, __b, __c); -} - -static vector int __ATTRS_o_ai vec_msum(vector short __a, vector short __b, - vector int __c) { - return __builtin_altivec_vmsumshm(__a, __b, __c); -} - -static vector unsigned int __ATTRS_o_ai vec_msum(vector unsigned short __a, - vector unsigned short __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumuhm(__a, __b, __c); -} - -/* vec_vmsummbm */ - -static vector int __attribute__((__always_inline__)) -vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) { - return __builtin_altivec_vmsummbm(__a, __b, __c); -} - -/* vec_vmsumubm */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vmsumubm(vector unsigned char __a, vector unsigned char __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumubm(__a, __b, __c); -} - -/* vec_vmsumshm */ - -static vector int __attribute__((__always_inline__)) -vec_vmsumshm(vector short __a, vector short __b, vector int __c) { - return __builtin_altivec_vmsumshm(__a, __b, __c); -} - -/* vec_vmsumuhm */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumuhm(__a, __b, __c); -} - -/* vec_msums */ - -static vector int __ATTRS_o_ai vec_msums(vector short __a, vector short __b, - vector int __c) { - return __builtin_altivec_vmsumshs(__a, __b, __c); -} - -static vector unsigned int __ATTRS_o_ai vec_msums(vector unsigned short __a, - vector unsigned short __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumuhs(__a, __b, __c); -} - -/* vec_vmsumshs */ - -static vector int __attribute__((__always_inline__)) -vec_vmsumshs(vector short __a, vector short __b, vector int __c) { - return __builtin_altivec_vmsumshs(__a, __b, __c); -} - -/* vec_vmsumuhs */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b, - vector unsigned int __c) { - return __builtin_altivec_vmsumuhs(__a, __b, __c); -} - -/* vec_mtvscr */ - -static void __ATTRS_o_ai vec_mtvscr(vector signed char __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector bool char __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector short __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector bool short __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector pixel __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector int __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector bool int __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -static void __ATTRS_o_ai vec_mtvscr(vector float __a) { - __builtin_altivec_mtvscr((vector int)__a); -} - -/* vec_mul */ - -/* Integer vector multiplication will involve multiplication of the odd/even - elements separately, then truncating the results and moving to the - result vector. -*/ -static vector signed char __ATTRS_o_ai vec_mul(vector signed char __a, - vector signed char __b) { - return __a * __b; -} - -static vector unsigned char __ATTRS_o_ai vec_mul(vector unsigned char __a, - vector unsigned char __b) { - return __a * __b; -} - -static vector signed short __ATTRS_o_ai vec_mul(vector signed short __a, - vector signed short __b) { - return __a * __b; -} - -static vector unsigned short __ATTRS_o_ai vec_mul(vector unsigned short __a, - vector unsigned short __b) { - return __a * __b; -} - -static vector signed int __ATTRS_o_ai vec_mul(vector signed int __a, - vector signed int __b) { - return __a * __b; -} - -static vector unsigned int __ATTRS_o_ai vec_mul(vector unsigned int __a, - vector unsigned int __b) { - return __a * __b; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_mul(vector signed long long __a, vector signed long long __b) { - return __a * __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_mul(vector unsigned long long __a, vector unsigned long long __b) { - return __a * __b; -} -#endif - -static vector float __ATTRS_o_ai vec_mul(vector float __a, vector float __b) { - return __a * __b; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_mul(vector double __a, vector double __b) { - return __a * __b; -} -#endif - -/* The vmulos* and vmules* instructions have a big endian bias, so - we must reverse the meaning of "even" and "odd" for little endian. */ - -/* vec_mule */ - -static vector short __ATTRS_o_ai vec_mule(vector signed char __a, - vector signed char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulosb(__a, __b); -#else - return __builtin_altivec_vmulesb(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_mule(vector unsigned char __a, - vector unsigned char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuloub(__a, __b); -#else - return __builtin_altivec_vmuleub(__a, __b); -#endif -} - -static vector int __ATTRS_o_ai vec_mule(vector short __a, vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulosh(__a, __b); -#else - return __builtin_altivec_vmulesh(__a, __b); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_mule(vector unsigned short __a, - vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulouh(__a, __b); -#else - return __builtin_altivec_vmuleuh(__a, __b); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai vec_mule(vector signed int __a, - vector signed int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulosw(__a, __b); -#else - return __builtin_altivec_vmulesw(__a, __b); -#endif -} - -static vector unsigned long long __ATTRS_o_ai -vec_mule(vector unsigned int __a, vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulouw(__a, __b); -#else - return __builtin_altivec_vmuleuw(__a, __b); -#endif -} -#endif - -/* vec_vmulesb */ - -static vector short __attribute__((__always_inline__)) -vec_vmulesb(vector signed char __a, vector signed char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulosb(__a, __b); -#else - return __builtin_altivec_vmulesb(__a, __b); -#endif -} - -/* vec_vmuleub */ - -static vector unsigned short __attribute__((__always_inline__)) -vec_vmuleub(vector unsigned char __a, vector unsigned char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuloub(__a, __b); -#else - return __builtin_altivec_vmuleub(__a, __b); -#endif -} - -/* vec_vmulesh */ - -static vector int __attribute__((__always_inline__)) -vec_vmulesh(vector short __a, vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulosh(__a, __b); -#else - return __builtin_altivec_vmulesh(__a, __b); -#endif -} - -/* vec_vmuleuh */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulouh(__a, __b); -#else - return __builtin_altivec_vmuleuh(__a, __b); -#endif -} - -/* vec_mulo */ - -static vector short __ATTRS_o_ai vec_mulo(vector signed char __a, - vector signed char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulesb(__a, __b); -#else - return __builtin_altivec_vmulosb(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_mulo(vector unsigned char __a, - vector unsigned char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuleub(__a, __b); -#else - return __builtin_altivec_vmuloub(__a, __b); -#endif -} - -static vector int __ATTRS_o_ai vec_mulo(vector short __a, vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulesh(__a, __b); -#else - return __builtin_altivec_vmulosh(__a, __b); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_mulo(vector unsigned short __a, - vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuleuh(__a, __b); -#else - return __builtin_altivec_vmulouh(__a, __b); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai vec_mulo(vector signed int __a, - vector signed int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulesw(__a, __b); -#else - return __builtin_altivec_vmulosw(__a, __b); -#endif -} - -static vector unsigned long long __ATTRS_o_ai -vec_mulo(vector unsigned int __a, vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuleuw(__a, __b); -#else - return __builtin_altivec_vmulouw(__a, __b); -#endif -} -#endif - -/* vec_vmulosb */ - -static vector short __attribute__((__always_inline__)) -vec_vmulosb(vector signed char __a, vector signed char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulesb(__a, __b); -#else - return __builtin_altivec_vmulosb(__a, __b); -#endif -} - -/* vec_vmuloub */ - -static vector unsigned short __attribute__((__always_inline__)) -vec_vmuloub(vector unsigned char __a, vector unsigned char __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuleub(__a, __b); -#else - return __builtin_altivec_vmuloub(__a, __b); -#endif -} - -/* vec_vmulosh */ - -static vector int __attribute__((__always_inline__)) -vec_vmulosh(vector short __a, vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmulesh(__a, __b); -#else - return __builtin_altivec_vmulosh(__a, __b); -#endif -} - -/* vec_vmulouh */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vmulouh(vector unsigned short __a, vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vmuleuh(__a, __b); -#else - return __builtin_altivec_vmulouh(__a, __b); -#endif -} - -/* vec_nand */ - -#ifdef __POWER8_VECTOR__ -static vector signed char __ATTRS_o_ai vec_nand(vector signed char __a, - vector signed char __b) { - return ~(__a & __b); -} - -static vector signed char __ATTRS_o_ai vec_nand(vector signed char __a, - vector bool char __b) { - return ~(__a & __b); -} - -static vector signed char __ATTRS_o_ai vec_nand(vector bool char __a, - vector signed char __b) { - return ~(__a & __b); -} - -static vector unsigned char __ATTRS_o_ai vec_nand(vector unsigned char __a, - vector unsigned char __b) { - return ~(__a & __b); -} - -static vector unsigned char __ATTRS_o_ai vec_nand(vector unsigned char __a, - vector bool char __b) { - return ~(__a & __b); - -} - -static vector unsigned char __ATTRS_o_ai vec_nand(vector bool char __a, - vector unsigned char __b) { - return ~(__a & __b); -} - -static vector signed short __ATTRS_o_ai vec_nand(vector signed short __a, - vector signed short __b) { - return ~(__a & __b); -} - -static vector signed short __ATTRS_o_ai vec_nand(vector signed short __a, - vector bool short __b) { - return ~(__a & __b); -} - -static vector signed short __ATTRS_o_ai vec_nand(vector bool short __a, - vector signed short __b) { - return ~(__a & __b); -} - -static vector unsigned short __ATTRS_o_ai vec_nand(vector unsigned short __a, - vector unsigned short __b) { - return ~(__a & __b); -} - -static vector unsigned short __ATTRS_o_ai vec_nand(vector unsigned short __a, - vector bool short __b) { - return ~(__a & __b); - -} - -static vector unsigned short __ATTRS_o_ai vec_nand(vector bool short __a, - vector unsigned short __b) { - return ~(__a & __b); - -} - -static vector signed int __ATTRS_o_ai vec_nand(vector signed int __a, - vector signed int __b) { - return ~(__a & __b); -} - -static vector signed int __ATTRS_o_ai vec_nand(vector signed int __a, - vector bool int __b) { - return ~(__a & __b); -} - -static vector signed int __ATTRS_o_ai vec_nand(vector bool int __a, - vector signed int __b) { - return ~(__a & __b); -} - -static vector unsigned int __ATTRS_o_ai vec_nand(vector unsigned int __a, - vector unsigned int __b) { - return ~(__a & __b); -} - -static vector unsigned int __ATTRS_o_ai vec_nand(vector unsigned int __a, - vector bool int __b) { - return ~(__a & __b); -} - -static vector unsigned int __ATTRS_o_ai vec_nand(vector bool int __a, - vector unsigned int __b) { - return ~(__a & __b); -} - -static vector signed long long __ATTRS_o_ai -vec_nand(vector signed long long __a, vector signed long long __b) { - return ~(__a & __b); -} - -static vector signed long long __ATTRS_o_ai -vec_nand(vector signed long long __a, vector bool long long __b) { - return ~(__a & __b); -} - -static vector signed long long __ATTRS_o_ai -vec_nand(vector bool long long __a, vector signed long long __b) { - return ~(__a & __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_nand(vector unsigned long long __a, vector unsigned long long __b) { - return ~(__a & __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_nand(vector unsigned long long __a, vector bool long long __b) { - return ~(__a & __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_nand(vector bool long long __a, vector unsigned long long __b) { - return ~(__a & __b); -} - -#endif - -/* vec_nmadd */ - -#ifdef __VSX__ -static vector float __ATTRS_o_ai -vec_nmadd(vector float __a, vector float __b, vector float __c) { - return __builtin_vsx_xvnmaddasp(__a, __b, __c); -} - -static vector double __ATTRS_o_ai -vec_nmadd(vector double __a, vector double __b, vector double __c) { - return __builtin_vsx_xvnmaddadp(__a, __b, __c); -} -#endif - -/* vec_nmsub */ - -static vector float __ATTRS_o_ai -vec_nmsub(vector float __a, vector float __b, vector float __c) { -#ifdef __VSX__ - return __builtin_vsx_xvnmsubasp(__a, __b, __c); -#else - return __builtin_altivec_vnmsubfp(__a, __b, __c); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_nmsub(vector double __a, vector double __b, vector double __c) { - return __builtin_vsx_xvnmsubadp(__a, __b, __c); -} -#endif - -/* vec_vnmsubfp */ - -static vector float __attribute__((__always_inline__)) -vec_vnmsubfp(vector float __a, vector float __b, vector float __c) { - return __builtin_altivec_vnmsubfp(__a, __b, __c); -} - -/* vec_nor */ - -#define __builtin_altivec_vnor vec_nor - -static vector signed char __ATTRS_o_ai vec_nor(vector signed char __a, - vector signed char __b) { - return ~(__a | __b); -} - -static vector unsigned char __ATTRS_o_ai vec_nor(vector unsigned char __a, - vector unsigned char __b) { - return ~(__a | __b); -} - -static vector bool char __ATTRS_o_ai vec_nor(vector bool char __a, - vector bool char __b) { - return ~(__a | __b); -} - -static vector short __ATTRS_o_ai vec_nor(vector short __a, vector short __b) { - return ~(__a | __b); -} - -static vector unsigned short __ATTRS_o_ai vec_nor(vector unsigned short __a, - vector unsigned short __b) { - return ~(__a | __b); -} - -static vector bool short __ATTRS_o_ai vec_nor(vector bool short __a, - vector bool short __b) { - return ~(__a | __b); -} - -static vector int __ATTRS_o_ai vec_nor(vector int __a, vector int __b) { - return ~(__a | __b); -} - -static vector unsigned int __ATTRS_o_ai vec_nor(vector unsigned int __a, - vector unsigned int __b) { - return ~(__a | __b); -} - -static vector bool int __ATTRS_o_ai vec_nor(vector bool int __a, - vector bool int __b) { - return ~(__a | __b); -} - -static vector float __ATTRS_o_ai vec_nor(vector float __a, vector float __b) { - vector unsigned int __res = - ~((vector unsigned int)__a | (vector unsigned int)__b); - return (vector float)__res; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_nor(vector double __a, vector double __b) { - vector unsigned long long __res = - ~((vector unsigned long long)__a | (vector unsigned long long)__b); - return (vector double)__res; -} -#endif - -/* vec_vnor */ - -static vector signed char __ATTRS_o_ai vec_vnor(vector signed char __a, - vector signed char __b) { - return ~(__a | __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vnor(vector unsigned char __a, - vector unsigned char __b) { - return ~(__a | __b); -} - -static vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a, - vector bool char __b) { - return ~(__a | __b); -} - -static vector short __ATTRS_o_ai vec_vnor(vector short __a, vector short __b) { - return ~(__a | __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vnor(vector unsigned short __a, - vector unsigned short __b) { - return ~(__a | __b); -} - -static vector bool short __ATTRS_o_ai vec_vnor(vector bool short __a, - vector bool short __b) { - return ~(__a | __b); -} - -static vector int __ATTRS_o_ai vec_vnor(vector int __a, vector int __b) { - return ~(__a | __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vnor(vector unsigned int __a, - vector unsigned int __b) { - return ~(__a | __b); -} - -static vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a, - vector bool int __b) { - return ~(__a | __b); -} - -static vector float __ATTRS_o_ai vec_vnor(vector float __a, vector float __b) { - vector unsigned int __res = - ~((vector unsigned int)__a | (vector unsigned int)__b); - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_nor(vector signed long long __a, vector signed long long __b) { - return ~(__a | __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_nor(vector unsigned long long __a, vector unsigned long long __b) { - return ~(__a | __b); -} - -static vector bool long long __ATTRS_o_ai vec_nor(vector bool long long __a, - vector bool long long __b) { - return ~(__a | __b); -} -#endif - -/* vec_or */ - -#define __builtin_altivec_vor vec_or - -static vector signed char __ATTRS_o_ai vec_or(vector signed char __a, - vector signed char __b) { - return __a | __b; -} - -static vector signed char __ATTRS_o_ai vec_or(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a | __b; -} - -static vector signed char __ATTRS_o_ai vec_or(vector signed char __a, - vector bool char __b) { - return __a | (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_or(vector unsigned char __a, - vector unsigned char __b) { - return __a | __b; -} - -static vector unsigned char __ATTRS_o_ai vec_or(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a | __b; -} - -static vector unsigned char __ATTRS_o_ai vec_or(vector unsigned char __a, - vector bool char __b) { - return __a | (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_or(vector bool char __a, - vector bool char __b) { - return __a | __b; -} - -static vector short __ATTRS_o_ai vec_or(vector short __a, vector short __b) { - return __a | __b; -} - -static vector short __ATTRS_o_ai vec_or(vector bool short __a, - vector short __b) { - return (vector short)__a | __b; -} - -static vector short __ATTRS_o_ai vec_or(vector short __a, - vector bool short __b) { - return __a | (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_or(vector unsigned short __a, - vector unsigned short __b) { - return __a | __b; -} - -static vector unsigned short __ATTRS_o_ai vec_or(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a | __b; -} - -static vector unsigned short __ATTRS_o_ai vec_or(vector unsigned short __a, - vector bool short __b) { - return __a | (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_or(vector bool short __a, - vector bool short __b) { - return __a | __b; -} - -static vector int __ATTRS_o_ai vec_or(vector int __a, vector int __b) { - return __a | __b; -} - -static vector int __ATTRS_o_ai vec_or(vector bool int __a, vector int __b) { - return (vector int)__a | __b; -} - -static vector int __ATTRS_o_ai vec_or(vector int __a, vector bool int __b) { - return __a | (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_or(vector unsigned int __a, - vector unsigned int __b) { - return __a | __b; -} - -static vector unsigned int __ATTRS_o_ai vec_or(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a | __b; -} - -static vector unsigned int __ATTRS_o_ai vec_or(vector unsigned int __a, - vector bool int __b) { - return __a | (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_or(vector bool int __a, - vector bool int __b) { - return __a | __b; -} - -static vector float __ATTRS_o_ai vec_or(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_or(vector bool int __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_or(vector float __a, vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_or(vector bool long long __a, - vector double __b) { - return (vector unsigned long long)__a | (vector unsigned long long)__b; -} - -static vector double __ATTRS_o_ai vec_or(vector double __a, - vector bool long long __b) { - return (vector unsigned long long)__a | (vector unsigned long long)__b; -} - -static vector double __ATTRS_o_ai vec_or(vector double __a, vector double __b) { - vector unsigned long long __res = - (vector unsigned long long)__a | (vector unsigned long long)__b; - return (vector double)__res; -} - -static vector signed long long __ATTRS_o_ai -vec_or(vector signed long long __a, vector signed long long __b) { - return __a | __b; -} - -static vector signed long long __ATTRS_o_ai -vec_or(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a | __b; -} - -static vector signed long long __ATTRS_o_ai vec_or(vector signed long long __a, - vector bool long long __b) { - return __a | (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_or(vector unsigned long long __a, vector unsigned long long __b) { - return __a | __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_or(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a | __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_or(vector unsigned long long __a, vector bool long long __b) { - return __a | (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_or(vector bool long long __a, - vector bool long long __b) { - return __a | __b; -} -#endif - -#ifdef __POWER8_VECTOR__ -static vector signed char __ATTRS_o_ai vec_orc(vector signed char __a, - vector signed char __b) { - return __a | ~__b; -} - -static vector signed char __ATTRS_o_ai vec_orc(vector signed char __a, - vector bool char __b) { - return __a | ~__b; -} - -static vector signed char __ATTRS_o_ai vec_orc(vector bool char __a, - vector signed char __b) { - return __a | ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_orc(vector unsigned char __a, - vector unsigned char __b) { - return __a | ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_orc(vector unsigned char __a, - vector bool char __b) { - return __a | ~__b; -} - -static vector unsigned char __ATTRS_o_ai vec_orc(vector bool char __a, - vector unsigned char __b) { - return __a | ~__b; -} - -static vector signed short __ATTRS_o_ai vec_orc(vector signed short __a, - vector signed short __b) { - return __a | ~__b; -} - -static vector signed short __ATTRS_o_ai vec_orc(vector signed short __a, - vector bool short __b) { - return __a | ~__b; -} - -static vector signed short __ATTRS_o_ai vec_orc(vector bool short __a, - vector signed short __b) { - return __a | ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_orc(vector unsigned short __a, - vector unsigned short __b) { - return __a | ~__b; -} - -static vector unsigned short __ATTRS_o_ai vec_orc(vector unsigned short __a, - vector bool short __b) { - return __a | ~__b; -} - -static vector unsigned short __ATTRS_o_ai -vec_orc(vector bool short __a, vector unsigned short __b) { - return __a | ~__b; -} - -static vector signed int __ATTRS_o_ai vec_orc(vector signed int __a, - vector signed int __b) { - return __a | ~__b; -} - -static vector signed int __ATTRS_o_ai vec_orc(vector signed int __a, - vector bool int __b) { - return __a | ~__b; -} - -static vector signed int __ATTRS_o_ai vec_orc(vector bool int __a, - vector signed int __b) { - return __a | ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_orc(vector unsigned int __a, - vector unsigned int __b) { - return __a | ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_orc(vector unsigned int __a, - vector bool int __b) { - return __a | ~__b; -} - -static vector unsigned int __ATTRS_o_ai vec_orc(vector bool int __a, - vector unsigned int __b) { - return __a | ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_orc(vector signed long long __a, vector signed long long __b) { - return __a | ~__b; -} - -static vector signed long long __ATTRS_o_ai vec_orc(vector signed long long __a, - vector bool long long __b) { - return __a | ~__b; -} - -static vector signed long long __ATTRS_o_ai -vec_orc(vector bool long long __a, vector signed long long __b) { - return __a | ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_orc(vector unsigned long long __a, vector unsigned long long __b) { - return __a | ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_orc(vector unsigned long long __a, vector bool long long __b) { - return __a | ~__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_orc(vector bool long long __a, vector unsigned long long __b) { - return __a | ~__b; -} -#endif - -/* vec_vor */ - -static vector signed char __ATTRS_o_ai vec_vor(vector signed char __a, - vector signed char __b) { - return __a | __b; -} - -static vector signed char __ATTRS_o_ai vec_vor(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a | __b; -} - -static vector signed char __ATTRS_o_ai vec_vor(vector signed char __a, - vector bool char __b) { - return __a | (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vor(vector unsigned char __a, - vector unsigned char __b) { - return __a | __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vor(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a | __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vor(vector unsigned char __a, - vector bool char __b) { - return __a | (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_vor(vector bool char __a, - vector bool char __b) { - return __a | __b; -} - -static vector short __ATTRS_o_ai vec_vor(vector short __a, vector short __b) { - return __a | __b; -} - -static vector short __ATTRS_o_ai vec_vor(vector bool short __a, - vector short __b) { - return (vector short)__a | __b; -} - -static vector short __ATTRS_o_ai vec_vor(vector short __a, - vector bool short __b) { - return __a | (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vor(vector unsigned short __a, - vector unsigned short __b) { - return __a | __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vor(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a | __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vor(vector unsigned short __a, - vector bool short __b) { - return __a | (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_vor(vector bool short __a, - vector bool short __b) { - return __a | __b; -} - -static vector int __ATTRS_o_ai vec_vor(vector int __a, vector int __b) { - return __a | __b; -} - -static vector int __ATTRS_o_ai vec_vor(vector bool int __a, vector int __b) { - return (vector int)__a | __b; -} - -static vector int __ATTRS_o_ai vec_vor(vector int __a, vector bool int __b) { - return __a | (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vor(vector unsigned int __a, - vector unsigned int __b) { - return __a | __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vor(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a | __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vor(vector unsigned int __a, - vector bool int __b) { - return __a | (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_vor(vector bool int __a, - vector bool int __b) { - return __a | __b; -} - -static vector float __ATTRS_o_ai vec_vor(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vor(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vor(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a | (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_vor(vector signed long long __a, vector signed long long __b) { - return __a | __b; -} - -static vector signed long long __ATTRS_o_ai -vec_vor(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a | __b; -} - -static vector signed long long __ATTRS_o_ai vec_vor(vector signed long long __a, - vector bool long long __b) { - return __a | (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vor(vector unsigned long long __a, vector unsigned long long __b) { - return __a | __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vor(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a | __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vor(vector unsigned long long __a, vector bool long long __b) { - return __a | (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_vor(vector bool long long __a, - vector bool long long __b) { - return __a | __b; -} -#endif - -/* vec_pack */ - -/* The various vector pack instructions have a big-endian bias, so for - little endian we must handle reversed element numbering. */ - -static vector signed char __ATTRS_o_ai vec_pack(vector signed short __a, - vector signed short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector signed char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector signed char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_pack(vector unsigned short __a, - vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector unsigned char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -static vector bool char __ATTRS_o_ai vec_pack(vector bool short __a, - vector bool short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector bool char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -static vector short __ATTRS_o_ai vec_pack(vector int __a, vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_pack(vector unsigned int __a, - vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector unsigned short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -static vector bool short __ATTRS_o_ai vec_pack(vector bool int __a, - vector bool int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector bool short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -#ifdef __VSX__ -static vector signed int __ATTRS_o_ai vec_pack(vector signed long long __a, - vector signed long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector signed int)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector signed int)vec_perm( - __a, __b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} -static vector unsigned int __ATTRS_o_ai -vec_pack(vector unsigned long long __a, vector unsigned long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector unsigned int)vec_perm( - __a, __b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} - -static vector bool int __ATTRS_o_ai vec_pack(vector bool long long __a, - vector bool long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector bool int)vec_perm( - __a, __b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} - -#endif - -/* vec_vpkuhum */ - -#define __builtin_altivec_vpkuhum vec_vpkuhum - -static vector signed char __ATTRS_o_ai vec_vpkuhum(vector signed short __a, - vector signed short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector signed char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector signed char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -static vector unsigned char __ATTRS_o_ai -vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector unsigned char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -static vector bool char __ATTRS_o_ai vec_vpkuhum(vector bool short __a, - vector bool short __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool char)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); -#else - return (vector bool char)vec_perm( - __a, __b, - (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, - 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); -#endif -} - -/* vec_vpkuwum */ - -#define __builtin_altivec_vpkuwum vec_vpkuwum - -static vector short __ATTRS_o_ai vec_vpkuwum(vector int __a, vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_vpkuwum(vector unsigned int __a, - vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector unsigned short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -static vector bool short __ATTRS_o_ai vec_vpkuwum(vector bool int __a, - vector bool int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, - 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); -#else - return (vector bool short)vec_perm( - __a, __b, - (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, - 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); -#endif -} - -/* vec_vpkudum */ - -#ifdef __POWER8_VECTOR__ -#define __builtin_altivec_vpkudum vec_vpkudum - -static vector int __ATTRS_o_ai vec_vpkudum(vector long long __a, - vector long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector int)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector int)vec_perm( - __a, __b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} - -static vector unsigned int __ATTRS_o_ai -vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)vec_perm( - __a, __b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector unsigned int)vec_perm( - __a, __b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} - -static vector bool int __ATTRS_o_ai vec_vpkudum(vector bool long long __a, - vector bool long long __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)vec_perm( - (vector long long)__a, (vector long long)__b, - (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); -#else - return (vector bool int)vec_perm( - (vector long long)__a, (vector long long)__b, - (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, - 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); -#endif -} -#endif - -/* vec_packpx */ - -static vector pixel __attribute__((__always_inline__)) -vec_packpx(vector unsigned int __a, vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector pixel)__builtin_altivec_vpkpx(__b, __a); -#else - return (vector pixel)__builtin_altivec_vpkpx(__a, __b); -#endif -} - -/* vec_vpkpx */ - -static vector pixel __attribute__((__always_inline__)) -vec_vpkpx(vector unsigned int __a, vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return (vector pixel)__builtin_altivec_vpkpx(__b, __a); -#else - return (vector pixel)__builtin_altivec_vpkpx(__a, __b); -#endif -} - -/* vec_packs */ - -static vector signed char __ATTRS_o_ai vec_packs(vector short __a, - vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkshss(__b, __a); -#else - return __builtin_altivec_vpkshss(__a, __b); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_packs(vector unsigned short __a, - vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuhus(__b, __a); -#else - return __builtin_altivec_vpkuhus(__a, __b); -#endif -} - -static vector signed short __ATTRS_o_ai vec_packs(vector int __a, - vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkswss(__b, __a); -#else - return __builtin_altivec_vpkswss(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_packs(vector unsigned int __a, - vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuwus(__b, __a); -#else - return __builtin_altivec_vpkuwus(__a, __b); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector int __ATTRS_o_ai vec_packs(vector long long __a, - vector long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpksdss(__b, __a); -#else - return __builtin_altivec_vpksdss(__a, __b); -#endif -} - -static vector unsigned int __ATTRS_o_ai -vec_packs(vector unsigned long long __a, vector unsigned long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkudus(__b, __a); -#else - return __builtin_altivec_vpkudus(__a, __b); -#endif -} -#endif - -/* vec_vpkshss */ - -static vector signed char __attribute__((__always_inline__)) -vec_vpkshss(vector short __a, vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkshss(__b, __a); -#else - return __builtin_altivec_vpkshss(__a, __b); -#endif -} - -/* vec_vpksdss */ - -#ifdef __POWER8_VECTOR__ -static vector int __ATTRS_o_ai vec_vpksdss(vector long long __a, - vector long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpksdss(__b, __a); -#else - return __builtin_altivec_vpksdss(__a, __b); -#endif -} -#endif - -/* vec_vpkuhus */ - -static vector unsigned char __attribute__((__always_inline__)) -vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuhus(__b, __a); -#else - return __builtin_altivec_vpkuhus(__a, __b); -#endif -} - -/* vec_vpkudus */ - -#ifdef __POWER8_VECTOR__ -static vector unsigned int __attribute__((__always_inline__)) -vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkudus(__b, __a); -#else - return __builtin_altivec_vpkudus(__a, __b); -#endif -} -#endif - -/* vec_vpkswss */ - -static vector signed short __attribute__((__always_inline__)) -vec_vpkswss(vector int __a, vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkswss(__b, __a); -#else - return __builtin_altivec_vpkswss(__a, __b); -#endif -} - -/* vec_vpkuwus */ - -static vector unsigned short __attribute__((__always_inline__)) -vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuwus(__b, __a); -#else - return __builtin_altivec_vpkuwus(__a, __b); -#endif -} - -/* vec_packsu */ - -static vector unsigned char __ATTRS_o_ai vec_packsu(vector short __a, - vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkshus(__b, __a); -#else - return __builtin_altivec_vpkshus(__a, __b); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_packsu(vector unsigned short __a, - vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuhus(__b, __a); -#else - return __builtin_altivec_vpkuhus(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_packsu(vector int __a, - vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkswus(__b, __a); -#else - return __builtin_altivec_vpkswus(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_packsu(vector unsigned int __a, - vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuwus(__b, __a); -#else - return __builtin_altivec_vpkuwus(__a, __b); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector unsigned int __ATTRS_o_ai vec_packsu(vector long long __a, - vector long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpksdus(__b, __a); -#else - return __builtin_altivec_vpksdus(__a, __b); -#endif -} - -static vector unsigned int __ATTRS_o_ai -vec_packsu(vector unsigned long long __a, vector unsigned long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkudus(__b, __a); -#else - return __builtin_altivec_vpkudus(__a, __b); -#endif -} -#endif - -/* vec_vpkshus */ - -static vector unsigned char __ATTRS_o_ai vec_vpkshus(vector short __a, - vector short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkshus(__b, __a); -#else - return __builtin_altivec_vpkshus(__a, __b); -#endif -} - -static vector unsigned char __ATTRS_o_ai -vec_vpkshus(vector unsigned short __a, vector unsigned short __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuhus(__b, __a); -#else - return __builtin_altivec_vpkuhus(__a, __b); -#endif -} - -/* vec_vpkswus */ - -static vector unsigned short __ATTRS_o_ai vec_vpkswus(vector int __a, - vector int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkswus(__b, __a); -#else - return __builtin_altivec_vpkswus(__a, __b); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_vpkswus(vector unsigned int __a, - vector unsigned int __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpkuwus(__b, __a); -#else - return __builtin_altivec_vpkuwus(__a, __b); -#endif -} - -/* vec_vpksdus */ - -#ifdef __POWER8_VECTOR__ -static vector unsigned int __ATTRS_o_ai vec_vpksdus(vector long long __a, - vector long long __b) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vpksdus(__b, __a); -#else - return __builtin_altivec_vpksdus(__a, __b); -#endif -} -#endif - -/* vec_perm */ - -// The vperm instruction is defined architecturally with a big-endian bias. -// For little endian, we swap the input operands and invert the permute -// control vector. Only the rightmost 5 bits matter, so we could use -// a vector of all 31s instead of all 255s to perform the inversion. -// However, when the PCV is not a constant, using 255 has an advantage -// in that the vec_xor can be recognized as a vec_nor (and for P8 and -// later, possibly a vec_nand). - -static vector signed char __ATTRS_o_ai vec_perm(vector signed char __a, - vector signed char __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_perm(vector unsigned char __a, - vector unsigned char __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector unsigned char)__builtin_altivec_vperm_4si( - (vector int)__b, (vector int)__a, __d); -#else - return (vector unsigned char)__builtin_altivec_vperm_4si( - (vector int)__a, (vector int)__b, __c); -#endif -} - -static vector bool char __ATTRS_o_ai vec_perm(vector bool char __a, - vector bool char __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector short __ATTRS_o_ai vec_perm(vector signed short __a, - vector signed short __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_perm(vector unsigned short __a, - vector unsigned short __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector unsigned short)__builtin_altivec_vperm_4si( - (vector int)__b, (vector int)__a, __d); -#else - return (vector unsigned short)__builtin_altivec_vperm_4si( - (vector int)__a, (vector int)__b, __c); -#endif -} - -static vector bool short __ATTRS_o_ai vec_perm(vector bool short __a, - vector bool short __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector pixel __ATTRS_o_ai vec_perm(vector pixel __a, vector pixel __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector int __ATTRS_o_ai vec_perm(vector signed int __a, - vector signed int __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d); -#else - return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_perm(vector unsigned int __a, - vector unsigned int __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector bool int __ATTRS_o_ai vec_perm(vector bool int __a, - vector bool int __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -static vector float __ATTRS_o_ai vec_perm(vector float __a, vector float __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector float)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector float)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} - -#ifdef __VSX__ -static vector long long __ATTRS_o_ai vec_perm(vector signed long long __a, - vector signed long long __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector signed long long)__builtin_altivec_vperm_4si( - (vector int)__b, (vector int)__a, __d); -#else - return (vector signed long long)__builtin_altivec_vperm_4si( - (vector int)__a, (vector int)__b, __c); -#endif -} - -static vector unsigned long long __ATTRS_o_ai -vec_perm(vector unsigned long long __a, vector unsigned long long __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector unsigned long long)__builtin_altivec_vperm_4si( - (vector int)__b, (vector int)__a, __d); -#else - return (vector unsigned long long)__builtin_altivec_vperm_4si( - (vector int)__a, (vector int)__b, __c); -#endif -} - -static vector bool long long __ATTRS_o_ai -vec_perm(vector bool long long __a, vector bool long long __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector bool long long)__builtin_altivec_vperm_4si( - (vector int)__b, (vector int)__a, __d); -#else - return (vector bool long long)__builtin_altivec_vperm_4si( - (vector int)__a, (vector int)__b, __c); -#endif -} - -static vector double __ATTRS_o_ai vec_perm(vector double __a, vector double __b, - vector unsigned char __c) { -#ifdef __LITTLE_ENDIAN__ - vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255}; - __d = vec_xor(__c, __d); - return (vector double)__builtin_altivec_vperm_4si((vector int)__b, - (vector int)__a, __d); -#else - return (vector double)__builtin_altivec_vperm_4si((vector int)__a, - (vector int)__b, __c); -#endif -} -#endif - -/* vec_vperm */ - -static vector signed char __ATTRS_o_ai vec_vperm(vector signed char __a, - vector signed char __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector unsigned char __ATTRS_o_ai vec_vperm(vector unsigned char __a, - vector unsigned char __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector bool char __ATTRS_o_ai vec_vperm(vector bool char __a, - vector bool char __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector short __ATTRS_o_ai vec_vperm(vector short __a, vector short __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector unsigned short __ATTRS_o_ai vec_vperm(vector unsigned short __a, - vector unsigned short __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector bool short __ATTRS_o_ai vec_vperm(vector bool short __a, - vector bool short __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector pixel __ATTRS_o_ai vec_vperm(vector pixel __a, vector pixel __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector int __ATTRS_o_ai vec_vperm(vector int __a, vector int __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector unsigned int __ATTRS_o_ai vec_vperm(vector unsigned int __a, - vector unsigned int __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector bool int __ATTRS_o_ai vec_vperm(vector bool int __a, - vector bool int __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector float __ATTRS_o_ai vec_vperm(vector float __a, vector float __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -#ifdef __VSX__ -static vector long long __ATTRS_o_ai vec_vperm(vector long long __a, - vector long long __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector unsigned long long __ATTRS_o_ai -vec_vperm(vector unsigned long long __a, vector unsigned long long __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} - -static vector double __ATTRS_o_ai vec_vperm(vector double __a, - vector double __b, - vector unsigned char __c) { - return vec_perm(__a, __b, __c); -} -#endif - -/* vec_re */ - -static vector float __ATTRS_o_ai -vec_re(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvresp(__a); -#else - return __builtin_altivec_vrefp(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_re(vector double __a) { - return __builtin_vsx_xvredp(__a); -} -#endif - -/* vec_vrefp */ - -static vector float __attribute__((__always_inline__)) -vec_vrefp(vector float __a) { - return __builtin_altivec_vrefp(__a); -} - -/* vec_rl */ - -static vector signed char __ATTRS_o_ai vec_rl(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_rl(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); -} - -static vector short __ATTRS_o_ai vec_rl(vector short __a, - vector unsigned short __b) { - return __builtin_altivec_vrlh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_rl(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); -} - -static vector int __ATTRS_o_ai vec_rl(vector int __a, vector unsigned int __b) { - return __builtin_altivec_vrlw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_rl(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_rl(vector signed long long __a, vector unsigned long long __b) { - return __builtin_altivec_vrld(__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_rl(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_altivec_vrld(__a, __b); -} -#endif - -/* vec_vrlb */ - -static vector signed char __ATTRS_o_ai vec_vrlb(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vrlb(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); -} - -/* vec_vrlh */ - -static vector short __ATTRS_o_ai vec_vrlh(vector short __a, - vector unsigned short __b) { - return __builtin_altivec_vrlh(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vrlh(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); -} - -/* vec_vrlw */ - -static vector int __ATTRS_o_ai vec_vrlw(vector int __a, - vector unsigned int __b) { - return __builtin_altivec_vrlw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vrlw(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); -} - -/* vec_round */ - -static vector float __ATTRS_o_ai vec_round(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvrspi(__a); -#else - return __builtin_altivec_vrfin(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_round(vector double __a) { - return __builtin_vsx_xvrdpi(__a); -} - -/* vec_rint */ - -static vector float __ATTRS_o_ai -vec_rint(vector float __a) { - return __builtin_vsx_xvrspic(__a); -} - -static vector double __ATTRS_o_ai -vec_rint(vector double __a) { - return __builtin_vsx_xvrdpic(__a); -} - -/* vec_nearbyint */ - -static vector float __ATTRS_o_ai vec_nearbyint(vector float __a) { - return __builtin_vsx_xvrspi(__a); -} - -static vector double __ATTRS_o_ai vec_nearbyint(vector double __a) { - return __builtin_vsx_xvrdpi(__a); -} -#endif - -/* vec_vrfin */ - -static vector float __attribute__((__always_inline__)) -vec_vrfin(vector float __a) { - return __builtin_altivec_vrfin(__a); -} - -/* vec_sqrt */ - -#ifdef __VSX__ -static vector float __ATTRS_o_ai vec_sqrt(vector float __a) { - return __builtin_vsx_xvsqrtsp(__a); -} - -static vector double __ATTRS_o_ai vec_sqrt(vector double __a) { - return __builtin_vsx_xvsqrtdp(__a); -} -#endif - -/* vec_rsqrte */ - -static vector float __ATTRS_o_ai -vec_rsqrte(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvrsqrtesp(__a); -#else - return __builtin_altivec_vrsqrtefp(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_rsqrte(vector double __a) { - return __builtin_vsx_xvrsqrtedp(__a); -} -#endif - -/* vec_vrsqrtefp */ - -static __vector float __attribute__((__always_inline__)) -vec_vrsqrtefp(vector float __a) { - return __builtin_altivec_vrsqrtefp(__a); -} - -/* vec_sel */ - -#define __builtin_altivec_vsel_4si vec_sel - -static vector signed char __ATTRS_o_ai vec_sel(vector signed char __a, - vector signed char __b, - vector unsigned char __c) { - return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); -} - -static vector signed char __ATTRS_o_ai vec_sel(vector signed char __a, - vector signed char __b, - vector bool char __c) { - return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); -} - -static vector unsigned char __ATTRS_o_ai vec_sel(vector unsigned char __a, - vector unsigned char __b, - vector unsigned char __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned char __ATTRS_o_ai vec_sel(vector unsigned char __a, - vector unsigned char __b, - vector bool char __c) { - return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); -} - -static vector bool char __ATTRS_o_ai vec_sel(vector bool char __a, - vector bool char __b, - vector unsigned char __c) { - return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); -} - -static vector bool char __ATTRS_o_ai vec_sel(vector bool char __a, - vector bool char __b, - vector bool char __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector short __ATTRS_o_ai vec_sel(vector short __a, vector short __b, - vector unsigned short __c) { - return (__a & ~(vector short)__c) | (__b & (vector short)__c); -} - -static vector short __ATTRS_o_ai vec_sel(vector short __a, vector short __b, - vector bool short __c) { - return (__a & ~(vector short)__c) | (__b & (vector short)__c); -} - -static vector unsigned short __ATTRS_o_ai vec_sel(vector unsigned short __a, - vector unsigned short __b, - vector unsigned short __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned short __ATTRS_o_ai vec_sel(vector unsigned short __a, - vector unsigned short __b, - vector bool short __c) { - return (__a & ~(vector unsigned short)__c) | - (__b & (vector unsigned short)__c); -} - -static vector bool short __ATTRS_o_ai vec_sel(vector bool short __a, - vector bool short __b, - vector unsigned short __c) { - return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); -} - -static vector bool short __ATTRS_o_ai vec_sel(vector bool short __a, - vector bool short __b, - vector bool short __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector int __ATTRS_o_ai vec_sel(vector int __a, vector int __b, - vector unsigned int __c) { - return (__a & ~(vector int)__c) | (__b & (vector int)__c); -} - -static vector int __ATTRS_o_ai vec_sel(vector int __a, vector int __b, - vector bool int __c) { - return (__a & ~(vector int)__c) | (__b & (vector int)__c); -} - -static vector unsigned int __ATTRS_o_ai vec_sel(vector unsigned int __a, - vector unsigned int __b, - vector unsigned int __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned int __ATTRS_o_ai vec_sel(vector unsigned int __a, - vector unsigned int __b, - vector bool int __c) { - return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); -} - -static vector bool int __ATTRS_o_ai vec_sel(vector bool int __a, - vector bool int __b, - vector unsigned int __c) { - return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); -} - -static vector bool int __ATTRS_o_ai vec_sel(vector bool int __a, - vector bool int __b, - vector bool int __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector float __ATTRS_o_ai vec_sel(vector float __a, vector float __b, - vector unsigned int __c) { - vector int __res = ((vector int)__a & ~(vector int)__c) | - ((vector int)__b & (vector int)__c); - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_sel(vector float __a, vector float __b, - vector bool int __c) { - vector int __res = ((vector int)__a & ~(vector int)__c) | - ((vector int)__b & (vector int)__c); - return (vector float)__res; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_sel(vector double __a, vector double __b, - vector bool long long __c) { - vector long long __res = ((vector long long)__a & ~(vector long long)__c) | - ((vector long long)__b & (vector long long)__c); - return (vector double)__res; -} - -static vector double __ATTRS_o_ai vec_sel(vector double __a, vector double __b, - vector unsigned long long __c) { - vector long long __res = ((vector long long)__a & ~(vector long long)__c) | - ((vector long long)__b & (vector long long)__c); - return (vector double)__res; -} -#endif - -/* vec_vsel */ - -static vector signed char __ATTRS_o_ai vec_vsel(vector signed char __a, - vector signed char __b, - vector unsigned char __c) { - return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); -} - -static vector signed char __ATTRS_o_ai vec_vsel(vector signed char __a, - vector signed char __b, - vector bool char __c) { - return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); -} - -static vector unsigned char __ATTRS_o_ai vec_vsel(vector unsigned char __a, - vector unsigned char __b, - vector unsigned char __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned char __ATTRS_o_ai vec_vsel(vector unsigned char __a, - vector unsigned char __b, - vector bool char __c) { - return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); -} - -static vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a, - vector bool char __b, - vector unsigned char __c) { - return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); -} - -static vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a, - vector bool char __b, - vector bool char __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector short __ATTRS_o_ai vec_vsel(vector short __a, vector short __b, - vector unsigned short __c) { - return (__a & ~(vector short)__c) | (__b & (vector short)__c); -} - -static vector short __ATTRS_o_ai vec_vsel(vector short __a, vector short __b, - vector bool short __c) { - return (__a & ~(vector short)__c) | (__b & (vector short)__c); -} - -static vector unsigned short __ATTRS_o_ai vec_vsel(vector unsigned short __a, - vector unsigned short __b, - vector unsigned short __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned short __ATTRS_o_ai vec_vsel(vector unsigned short __a, - vector unsigned short __b, - vector bool short __c) { - return (__a & ~(vector unsigned short)__c) | - (__b & (vector unsigned short)__c); -} - -static vector bool short __ATTRS_o_ai vec_vsel(vector bool short __a, - vector bool short __b, - vector unsigned short __c) { - return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); -} - -static vector bool short __ATTRS_o_ai vec_vsel(vector bool short __a, - vector bool short __b, - vector bool short __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector int __ATTRS_o_ai vec_vsel(vector int __a, vector int __b, - vector unsigned int __c) { - return (__a & ~(vector int)__c) | (__b & (vector int)__c); -} - -static vector int __ATTRS_o_ai vec_vsel(vector int __a, vector int __b, - vector bool int __c) { - return (__a & ~(vector int)__c) | (__b & (vector int)__c); -} - -static vector unsigned int __ATTRS_o_ai vec_vsel(vector unsigned int __a, - vector unsigned int __b, - vector unsigned int __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector unsigned int __ATTRS_o_ai vec_vsel(vector unsigned int __a, - vector unsigned int __b, - vector bool int __c) { - return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); -} - -static vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a, - vector bool int __b, - vector unsigned int __c) { - return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); -} - -static vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a, - vector bool int __b, - vector bool int __c) { - return (__a & ~__c) | (__b & __c); -} - -static vector float __ATTRS_o_ai vec_vsel(vector float __a, vector float __b, - vector unsigned int __c) { - vector int __res = ((vector int)__a & ~(vector int)__c) | - ((vector int)__b & (vector int)__c); - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vsel(vector float __a, vector float __b, - vector bool int __c) { - vector int __res = ((vector int)__a & ~(vector int)__c) | - ((vector int)__b & (vector int)__c); - return (vector float)__res; -} - -/* vec_sl */ - -static vector signed char __ATTRS_o_ai vec_sl(vector signed char __a, - vector unsigned char __b) { - return __a << (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_sl(vector unsigned char __a, - vector unsigned char __b) { - return __a << __b; -} - -static vector short __ATTRS_o_ai vec_sl(vector short __a, - vector unsigned short __b) { - return __a << (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_sl(vector unsigned short __a, - vector unsigned short __b) { - return __a << __b; -} - -static vector int __ATTRS_o_ai vec_sl(vector int __a, vector unsigned int __b) { - return __a << (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_sl(vector unsigned int __a, - vector unsigned int __b) { - return __a << __b; -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_sl(vector signed long long __a, vector unsigned long long __b) { - return __a << (vector long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_sl(vector unsigned long long __a, vector unsigned long long __b) { - return __a << __b; -} -#endif - -/* vec_vslb */ - -#define __builtin_altivec_vslb vec_vslb - -static vector signed char __ATTRS_o_ai vec_vslb(vector signed char __a, - vector unsigned char __b) { - return vec_sl(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vslb(vector unsigned char __a, - vector unsigned char __b) { - return vec_sl(__a, __b); -} - -/* vec_vslh */ - -#define __builtin_altivec_vslh vec_vslh - -static vector short __ATTRS_o_ai vec_vslh(vector short __a, - vector unsigned short __b) { - return vec_sl(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vslh(vector unsigned short __a, - vector unsigned short __b) { - return vec_sl(__a, __b); -} - -/* vec_vslw */ - -#define __builtin_altivec_vslw vec_vslw - -static vector int __ATTRS_o_ai vec_vslw(vector int __a, - vector unsigned int __b) { - return vec_sl(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vslw(vector unsigned int __a, - vector unsigned int __b) { - return vec_sl(__a, __b); -} - -/* vec_sld */ - -#define __builtin_altivec_vsldoi_4si vec_sld - -static vector signed char __ATTRS_o_ai vec_sld(vector signed char __a, - vector signed char __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_sld(vector unsigned char __a, - vector unsigned char __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector bool char __ATTRS_o_ai vec_sld(vector bool char __a, - vector bool char __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector signed short __ATTRS_o_ai vec_sld(vector signed short __a, - vector signed short __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_sld(vector unsigned short __a, - vector unsigned short __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector bool short __ATTRS_o_ai vec_sld(vector bool short __a, - vector bool short __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector pixel __ATTRS_o_ai vec_sld(vector pixel __a, vector pixel __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector signed int __ATTRS_o_ai vec_sld(vector signed int __a, - vector signed int __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_sld(vector unsigned int __a, - vector unsigned int __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector bool int __ATTRS_o_ai vec_sld(vector bool int __a, - vector bool int __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector float __ATTRS_o_ai vec_sld(vector float __a, vector float __b, - unsigned const int __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -/* vec_vsldoi */ - -static vector signed char __ATTRS_o_ai vec_vsldoi(vector signed char __a, - vector signed char __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned char __ATTRS_o_ai vec_vsldoi(vector unsigned char __a, - vector unsigned char __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector short __ATTRS_o_ai vec_vsldoi(vector short __a, vector short __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned short __ATTRS_o_ai vec_vsldoi(vector unsigned short __a, - vector unsigned short __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a, vector pixel __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector int __ATTRS_o_ai vec_vsldoi(vector int __a, vector int __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_vsldoi(vector unsigned int __a, - vector unsigned int __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -static vector float __ATTRS_o_ai vec_vsldoi(vector float __a, vector float __b, - unsigned char __c) { - unsigned char __d = __c & 0x0F; -#ifdef __LITTLE_ENDIAN__ - return vec_perm( - __b, __a, - (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 20 - __d, - 21 - __d, 22 - __d, 23 - __d, 24 - __d, 25 - __d, - 26 - __d, 27 - __d, 28 - __d, 29 - __d, 30 - __d, - 31 - __d)); -#else - return vec_perm( - __a, __b, - (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, - __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, - __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); -#endif -} - -/* vec_sll */ - -static vector signed char __ATTRS_o_ai vec_sll(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_sll(vector signed char __a, - vector unsigned short __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_sll(vector signed char __a, - vector unsigned int __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_sll(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_sll(vector unsigned char __a, - vector unsigned short __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_sll(vector unsigned char __a, - vector unsigned int __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_sll(vector bool char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_sll(vector bool char __a, - vector unsigned short __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_sll(vector bool char __a, - vector unsigned int __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_sll(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_sll(vector short __a, - vector unsigned short __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_sll(vector short __a, - vector unsigned int __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sll(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sll(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sll(vector unsigned short __a, - vector unsigned int __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_sll(vector bool short __a, - vector unsigned char __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_sll(vector bool short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_sll(vector bool short __a, - vector unsigned int __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, - vector unsigned short __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, - vector unsigned int __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_sll(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_sll(vector int __a, - vector unsigned short __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_sll(vector int __a, - vector unsigned int __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_sll(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_sll(vector unsigned int __a, - vector unsigned short __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_sll(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_sll(vector bool int __a, - vector unsigned char __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_sll(vector bool int __a, - vector unsigned short __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_sll(vector bool int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -/* vec_vsl */ - -static vector signed char __ATTRS_o_ai vec_vsl(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vsl(vector signed char __a, - vector unsigned short __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vsl(vector signed char __a, - vector unsigned int __b) { - return (vector signed char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsl(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsl(vector unsigned char __a, - vector unsigned short __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsl(vector unsigned char __a, - vector unsigned int __b) { - return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsl(vector bool char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsl(vector bool char __a, - vector unsigned short __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsl(vector bool char __a, - vector unsigned int __b) { - return (vector bool char)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsl(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsl(vector short __a, - vector unsigned short __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsl(vector short __a, - vector unsigned int __b) { - return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsl(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsl(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsl(vector unsigned short __a, - vector unsigned int __b) { - return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsl(vector bool short __a, - vector unsigned char __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsl(vector bool short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsl(vector bool short __a, - vector unsigned int __b) { - return (vector bool short)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, - vector unsigned short __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, - vector unsigned int __b) { - return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsl(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsl(vector int __a, - vector unsigned short __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsl(vector int __a, - vector unsigned int __b) { - return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsl(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsl(vector unsigned int __a, - vector unsigned short __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsl(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsl(vector bool int __a, - vector unsigned char __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsl(vector bool int __a, - vector unsigned short __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsl(vector bool int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vsl((vector int)__a, - (vector int)__b); -} - -/* vec_slo */ - -static vector signed char __ATTRS_o_ai vec_slo(vector signed char __a, - vector signed char __b) { - return (vector signed char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_slo(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_slo(vector unsigned char __a, - vector signed char __b) { - return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_slo(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_slo(vector short __a, - vector signed char __b) { - return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_slo(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_slo(vector unsigned short __a, - vector signed char __b) { - return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_slo(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_slo(vector pixel __a, - vector signed char __b) { - return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_slo(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_slo(vector int __a, vector signed char __b) { - return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_slo(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_slo(vector unsigned int __a, - vector signed char __b) { - return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_slo(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_slo(vector float __a, - vector signed char __b) { - return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_slo(vector float __a, - vector unsigned char __b) { - return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -/* vec_vslo */ - -static vector signed char __ATTRS_o_ai vec_vslo(vector signed char __a, - vector signed char __b) { - return (vector signed char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vslo(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vslo(vector unsigned char __a, - vector signed char __b) { - return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vslo(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vslo(vector short __a, - vector signed char __b) { - return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vslo(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vslo(vector unsigned short __a, - vector signed char __b) { - return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vslo(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a, - vector signed char __b) { - return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vslo(vector int __a, - vector signed char __b) { - return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vslo(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vslo(vector unsigned int __a, - vector signed char __b) { - return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vslo(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, - (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_vslo(vector float __a, - vector signed char __b) { - return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_vslo(vector float __a, - vector unsigned char __b) { - return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); -} - -/* vec_splat */ - -static vector signed char __ATTRS_o_ai vec_splat(vector signed char __a, - unsigned const int __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); -} - -static vector unsigned char __ATTRS_o_ai vec_splat(vector unsigned char __a, - unsigned const int __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); -} - -static vector bool char __ATTRS_o_ai vec_splat(vector bool char __a, - unsigned const int __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); -} - -static vector signed short __ATTRS_o_ai vec_splat(vector signed short __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x07) * 2; - unsigned char b1 = b0 + 1; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, - b0, b1, b0, b1, b0, b1, b0, b1)); -} - -static vector unsigned short __ATTRS_o_ai vec_splat(vector unsigned short __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x07) * 2; - unsigned char b1 = b0 + 1; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, - b0, b1, b0, b1, b0, b1, b0, b1)); -} - -static vector bool short __ATTRS_o_ai vec_splat(vector bool short __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x07) * 2; - unsigned char b1 = b0 + 1; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, - b0, b1, b0, b1, b0, b1, b0, b1)); -} - -static vector pixel __ATTRS_o_ai vec_splat(vector pixel __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x07) * 2; - unsigned char b1 = b0 + 1; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, - b0, b1, b0, b1, b0, b1, b0, b1)); -} - -static vector signed int __ATTRS_o_ai vec_splat(vector signed int __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x03) * 4; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, - b1, b2, b3, b0, b1, b2, b3)); -} - -static vector unsigned int __ATTRS_o_ai vec_splat(vector unsigned int __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x03) * 4; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, - b1, b2, b3, b0, b1, b2, b3)); -} - -static vector bool int __ATTRS_o_ai vec_splat(vector bool int __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x03) * 4; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, - b1, b2, b3, b0, b1, b2, b3)); -} - -static vector float __ATTRS_o_ai vec_splat(vector float __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x03) * 4; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, - b1, b2, b3, b0, b1, b2, b3)); -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_splat(vector double __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x01) * 8; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, - b5 = b0 + 5, b6 = b0 + 6, b7 = b0 + 7; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, - b0, b1, b2, b3, b4, b5, b6, b7)); -} -static vector bool long long __ATTRS_o_ai vec_splat(vector bool long long __a, - unsigned const int __b) { - unsigned char b0 = (__b & 0x01) * 8; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, - b5 = b0 + 5, b6 = b0 + 6, b7 = b0 + 7; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, - b0, b1, b2, b3, b4, b5, b6, b7)); -} -static vector signed long long __ATTRS_o_ai -vec_splat(vector signed long long __a, unsigned const int __b) { - unsigned char b0 = (__b & 0x01) * 8; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, - b5 = b0 + 5, b6 = b0 + 6, b7 = b0 + 7; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, - b0, b1, b2, b3, b4, b5, b6, b7)); -} -static vector unsigned long long __ATTRS_o_ai -vec_splat(vector unsigned long long __a, unsigned const int __b) { - unsigned char b0 = (__b & 0x01) * 8; - unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, - b5 = b0 + 5, b6 = b0 + 6, b7 = b0 + 7; - return vec_perm(__a, __a, - (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, - b0, b1, b2, b3, b4, b5, b6, b7)); -} -#endif - -/* vec_vspltb */ - -#define __builtin_altivec_vspltb vec_vspltb - -static vector signed char __ATTRS_o_ai vec_vspltb(vector signed char __a, - unsigned char __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b)); -} - -static vector unsigned char __ATTRS_o_ai vec_vspltb(vector unsigned char __a, - unsigned char __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b)); -} - -static vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a, - unsigned char __b) { - return vec_perm(__a, __a, (vector unsigned char)(__b)); -} - -/* vec_vsplth */ - -#define __builtin_altivec_vsplth vec_vsplth - -static vector short __ATTRS_o_ai vec_vsplth(vector short __a, - unsigned char __b) { - __b *= 2; - unsigned char b1 = __b + 1; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, - __b, b1, __b, b1, __b, b1, __b, b1)); -} - -static vector unsigned short __ATTRS_o_ai vec_vsplth(vector unsigned short __a, - unsigned char __b) { - __b *= 2; - unsigned char b1 = __b + 1; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, - __b, b1, __b, b1, __b, b1, __b, b1)); -} - -static vector bool short __ATTRS_o_ai vec_vsplth(vector bool short __a, - unsigned char __b) { - __b *= 2; - unsigned char b1 = __b + 1; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, - __b, b1, __b, b1, __b, b1, __b, b1)); -} - -static vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a, - unsigned char __b) { - __b *= 2; - unsigned char b1 = __b + 1; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, - __b, b1, __b, b1, __b, b1, __b, b1)); -} - -/* vec_vspltw */ - -#define __builtin_altivec_vspltw vec_vspltw - -static vector int __ATTRS_o_ai vec_vspltw(vector int __a, unsigned char __b) { - __b *= 4; - unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, - b1, b2, b3, __b, b1, b2, b3)); -} - -static vector unsigned int __ATTRS_o_ai vec_vspltw(vector unsigned int __a, - unsigned char __b) { - __b *= 4; - unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, - b1, b2, b3, __b, b1, b2, b3)); -} - -static vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a, - unsigned char __b) { - __b *= 4; - unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, - b1, b2, b3, __b, b1, b2, b3)); -} - -static vector float __ATTRS_o_ai vec_vspltw(vector float __a, - unsigned char __b) { - __b *= 4; - unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; - return vec_perm(__a, __a, - (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, - b1, b2, b3, __b, b1, b2, b3)); -} - -/* vec_splat_s8 */ - -#define __builtin_altivec_vspltisb vec_splat_s8 - -// FIXME: parameter should be treated as 5-bit signed literal -static vector signed char __ATTRS_o_ai vec_splat_s8(signed char __a) { - return (vector signed char)(__a); -} - -/* vec_vspltisb */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector signed char __ATTRS_o_ai vec_vspltisb(signed char __a) { - return (vector signed char)(__a); -} - -/* vec_splat_s16 */ - -#define __builtin_altivec_vspltish vec_splat_s16 - -// FIXME: parameter should be treated as 5-bit signed literal -static vector short __ATTRS_o_ai vec_splat_s16(signed char __a) { - return (vector short)(__a); -} - -/* vec_vspltish */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector short __ATTRS_o_ai vec_vspltish(signed char __a) { - return (vector short)(__a); -} - -/* vec_splat_s32 */ - -#define __builtin_altivec_vspltisw vec_splat_s32 - -// FIXME: parameter should be treated as 5-bit signed literal -static vector int __ATTRS_o_ai vec_splat_s32(signed char __a) { - return (vector int)(__a); -} - -/* vec_vspltisw */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector int __ATTRS_o_ai vec_vspltisw(signed char __a) { - return (vector int)(__a); -} - -/* vec_splat_u8 */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector unsigned char __ATTRS_o_ai vec_splat_u8(unsigned char __a) { - return (vector unsigned char)(__a); -} - -/* vec_splat_u16 */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector unsigned short __ATTRS_o_ai vec_splat_u16(signed char __a) { - return (vector unsigned short)(__a); -} - -/* vec_splat_u32 */ - -// FIXME: parameter should be treated as 5-bit signed literal -static vector unsigned int __ATTRS_o_ai vec_splat_u32(signed char __a) { - return (vector unsigned int)(__a); -} - -/* vec_sr */ - -static vector signed char __ATTRS_o_ai vec_sr(vector signed char __a, - vector unsigned char __b) { - vector unsigned char __res = (vector unsigned char)__a >> __b; - return (vector signed char)__res; -} - -static vector unsigned char __ATTRS_o_ai vec_sr(vector unsigned char __a, - vector unsigned char __b) { - return __a >> __b; -} - -static vector signed short __ATTRS_o_ai vec_sr(vector signed short __a, - vector unsigned short __b) { - vector unsigned short __res = (vector unsigned short)__a >> __b; - return (vector signed short)__res; -} - -static vector unsigned short __ATTRS_o_ai vec_sr(vector unsigned short __a, - vector unsigned short __b) { - return __a >> __b; -} - -static vector signed int __ATTRS_o_ai vec_sr(vector signed int __a, - vector unsigned int __b) { - vector unsigned int __res = (vector unsigned int)__a >> __b; - return (vector signed int)__res; -} - -static vector unsigned int __ATTRS_o_ai vec_sr(vector unsigned int __a, - vector unsigned int __b) { - return __a >> __b; -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_sr(vector signed long long __a, vector unsigned long long __b) { - vector unsigned long long __res = (vector unsigned long long)__a >> __b; - return (vector signed long long)__res; -} - -static vector unsigned long long __ATTRS_o_ai -vec_sr(vector unsigned long long __a, vector unsigned long long __b) { - return __a >> __b; -} -#endif - -/* vec_vsrb */ - -#define __builtin_altivec_vsrb vec_vsrb - -static vector signed char __ATTRS_o_ai vec_vsrb(vector signed char __a, - vector unsigned char __b) { - return __a >> (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vsrb(vector unsigned char __a, - vector unsigned char __b) { - return __a >> __b; -} - -/* vec_vsrh */ - -#define __builtin_altivec_vsrh vec_vsrh - -static vector short __ATTRS_o_ai vec_vsrh(vector short __a, - vector unsigned short __b) { - return __a >> (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vsrh(vector unsigned short __a, - vector unsigned short __b) { - return __a >> __b; -} - -/* vec_vsrw */ - -#define __builtin_altivec_vsrw vec_vsrw - -static vector int __ATTRS_o_ai vec_vsrw(vector int __a, - vector unsigned int __b) { - return __a >> (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vsrw(vector unsigned int __a, - vector unsigned int __b) { - return __a >> __b; -} - -/* vec_sra */ - -static vector signed char __ATTRS_o_ai vec_sra(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_sra(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); -} - -static vector short __ATTRS_o_ai vec_sra(vector short __a, - vector unsigned short __b) { - return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sra(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); -} - -static vector int __ATTRS_o_ai vec_sra(vector int __a, - vector unsigned int __b) { - return __builtin_altivec_vsraw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_sra(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); -} - -#ifdef __POWER8_VECTOR__ -static vector signed long long __ATTRS_o_ai -vec_sra(vector signed long long __a, vector unsigned long long __b) { - return __a >> __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_sra(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)((vector signed long long)__a >> __b); -} -#endif - -/* vec_vsrab */ - -static vector signed char __ATTRS_o_ai vec_vsrab(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsrab(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); -} - -/* vec_vsrah */ - -static vector short __ATTRS_o_ai vec_vsrah(vector short __a, - vector unsigned short __b) { - return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsrah(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); -} - -/* vec_vsraw */ - -static vector int __ATTRS_o_ai vec_vsraw(vector int __a, - vector unsigned int __b) { - return __builtin_altivec_vsraw(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsraw(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); -} - -/* vec_srl */ - -static vector signed char __ATTRS_o_ai vec_srl(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_srl(vector signed char __a, - vector unsigned short __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_srl(vector signed char __a, - vector unsigned int __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_srl(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_srl(vector unsigned char __a, - vector unsigned short __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_srl(vector unsigned char __a, - vector unsigned int __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_srl(vector bool char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_srl(vector bool char __a, - vector unsigned short __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_srl(vector bool char __a, - vector unsigned int __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_srl(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_srl(vector short __a, - vector unsigned short __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_srl(vector short __a, - vector unsigned int __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_srl(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_srl(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_srl(vector unsigned short __a, - vector unsigned int __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_srl(vector bool short __a, - vector unsigned char __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_srl(vector bool short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_srl(vector bool short __a, - vector unsigned int __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, - vector unsigned short __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, - vector unsigned int __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_srl(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_srl(vector int __a, - vector unsigned short __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_srl(vector int __a, - vector unsigned int __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_srl(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_srl(vector unsigned int __a, - vector unsigned short __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_srl(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_srl(vector bool int __a, - vector unsigned char __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_srl(vector bool int __a, - vector unsigned short __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_srl(vector bool int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -/* vec_vsr */ - -static vector signed char __ATTRS_o_ai vec_vsr(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vsr(vector signed char __a, - vector unsigned short __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vsr(vector signed char __a, - vector unsigned int __b) { - return (vector signed char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsr(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsr(vector unsigned char __a, - vector unsigned short __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsr(vector unsigned char __a, - vector unsigned int __b) { - return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsr(vector bool char __a, - vector unsigned char __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsr(vector bool char __a, - vector unsigned short __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool char __ATTRS_o_ai vec_vsr(vector bool char __a, - vector unsigned int __b) { - return (vector bool char)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsr(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsr(vector short __a, - vector unsigned short __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsr(vector short __a, - vector unsigned int __b) { - return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsr(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsr(vector unsigned short __a, - vector unsigned short __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsr(vector unsigned short __a, - vector unsigned int __b) { - return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsr(vector bool short __a, - vector unsigned char __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsr(vector bool short __a, - vector unsigned short __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool short __ATTRS_o_ai vec_vsr(vector bool short __a, - vector unsigned int __b) { - return (vector bool short)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, - vector unsigned short __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, - vector unsigned int __b) { - return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsr(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsr(vector int __a, - vector unsigned short __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsr(vector int __a, - vector unsigned int __b) { - return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsr(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsr(vector unsigned int __a, - vector unsigned short __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsr(vector unsigned int __a, - vector unsigned int __b) { - return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsr(vector bool int __a, - vector unsigned char __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsr(vector bool int __a, - vector unsigned short __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -static vector bool int __ATTRS_o_ai vec_vsr(vector bool int __a, - vector unsigned int __b) { - return (vector bool int)__builtin_altivec_vsr((vector int)__a, - (vector int)__b); -} - -/* vec_sro */ - -static vector signed char __ATTRS_o_ai vec_sro(vector signed char __a, - vector signed char __b) { - return (vector signed char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_sro(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_sro(vector unsigned char __a, - vector signed char __b) { - return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_sro(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_sro(vector short __a, - vector signed char __b) { - return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_sro(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sro(vector unsigned short __a, - vector signed char __b) { - return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_sro(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_sro(vector pixel __a, - vector signed char __b) { - return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_sro(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_sro(vector int __a, vector signed char __b) { - return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_sro(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_sro(vector unsigned int __a, - vector signed char __b) { - return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_sro(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_sro(vector float __a, - vector signed char __b) { - return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_sro(vector float __a, - vector unsigned char __b) { - return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -/* vec_vsro */ - -static vector signed char __ATTRS_o_ai vec_vsro(vector signed char __a, - vector signed char __b) { - return (vector signed char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector signed char __ATTRS_o_ai vec_vsro(vector signed char __a, - vector unsigned char __b) { - return (vector signed char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsro(vector unsigned char __a, - vector signed char __b) { - return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsro(vector unsigned char __a, - vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsro(vector short __a, - vector signed char __b) { - return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector short __ATTRS_o_ai vec_vsro(vector short __a, - vector unsigned char __b) { - return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsro(vector unsigned short __a, - vector signed char __b) { - return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsro(vector unsigned short __a, - vector unsigned char __b) { - return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a, - vector signed char __b) { - return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a, - vector unsigned char __b) { - return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsro(vector int __a, - vector signed char __b) { - return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); -} - -static vector int __ATTRS_o_ai vec_vsro(vector int __a, - vector unsigned char __b) { - return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsro(vector unsigned int __a, - vector signed char __b) { - return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsro(vector unsigned int __a, - vector unsigned char __b) { - return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, - (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_vsro(vector float __a, - vector signed char __b) { - return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -static vector float __ATTRS_o_ai vec_vsro(vector float __a, - vector unsigned char __b) { - return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); -} - -/* vec_st */ - -static void __ATTRS_o_ai vec_st(vector signed char __a, int __b, - vector signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b, - vector unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool char __a, int __b, - vector bool char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector short __a, int __b, vector short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector short __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b, - vector unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool short __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool short __a, int __b, - vector bool short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector pixel __a, int __b, vector pixel *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector int __a, int __b, vector int *__c) { - __builtin_altivec_stvx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector int __a, int __b, int *__c) { - __builtin_altivec_stvx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b, - vector unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector bool int __a, int __b, - vector bool int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector float __a, int __b, vector float *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_st(vector float __a, int __b, float *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -/* vec_stvx */ - -static void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b, - vector signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b, - vector unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, - vector bool char *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector short __a, int __b, - vector short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector short __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b, - vector unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, - vector bool short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, - vector pixel *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector int __a, int __b, vector int *__c) { - __builtin_altivec_stvx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector int __a, int __b, int *__c) { - __builtin_altivec_stvx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b, - vector unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, - vector bool int *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector float __a, int __b, - vector float *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvx(vector float __a, int __b, float *__c) { - __builtin_altivec_stvx((vector int)__a, __b, __c); -} - -/* vec_ste */ - -static void __ATTRS_o_ai vec_ste(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector short __a, int __b, short *__c) { - __builtin_altivec_stvehx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool short __a, int __b, short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector int __a, int __b, int *__c) { - __builtin_altivec_stvewx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_ste(vector float __a, int __b, float *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -/* vec_stvebx */ - -static void __ATTRS_o_ai vec_stvebx(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvebx(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvebx((vector char)__a, __b, __c); -} - -/* vec_stvehx */ - -static void __ATTRS_o_ai vec_stvehx(vector short __a, int __b, short *__c) { - __builtin_altivec_stvehx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvehx(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b, - short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvehx((vector short)__a, __b, __c); -} - -/* vec_stvewx */ - -static void __ATTRS_o_ai vec_stvewx(vector int __a, int __b, int *__c) { - __builtin_altivec_stvewx(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvewx(vector float __a, int __b, float *__c) { - __builtin_altivec_stvewx((vector int)__a, __b, __c); -} - -/* vec_stl */ - -static void __ATTRS_o_ai vec_stl(vector signed char __a, int __b, - vector signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b, - vector unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, - vector bool char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector short __a, int __b, vector short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector short __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b, - vector unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, - vector bool short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, vector pixel *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector int __a, int __b, vector int *__c) { - __builtin_altivec_stvxl(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) { - __builtin_altivec_stvxl(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b, - vector unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, - vector bool int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector float __a, int __b, vector float *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stl(vector float __a, int __b, float *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -/* vec_stvxl */ - -static void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b, - vector signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b, - signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b, - vector unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, - signed char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, - unsigned char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, - vector bool char *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector short __a, int __b, - vector short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector short __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned short __a, int __b, - vector unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, - vector bool short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, - unsigned short *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, - vector pixel *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector int __a, int __b, vector int *__c) { - __builtin_altivec_stvxl(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector int __a, int __b, int *__c) { - __builtin_altivec_stvxl(__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b, - vector unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, - unsigned int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, - vector bool int *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector float __a, int __b, - vector float *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_stvxl(vector float __a, int __b, float *__c) { - __builtin_altivec_stvxl((vector int)__a, __b, __c); -} - -/* vec_sub */ - -static vector signed char __ATTRS_o_ai vec_sub(vector signed char __a, - vector signed char __b) { - return __a - __b; -} - -static vector signed char __ATTRS_o_ai vec_sub(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a - __b; -} - -static vector signed char __ATTRS_o_ai vec_sub(vector signed char __a, - vector bool char __b) { - return __a - (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_sub(vector unsigned char __a, - vector unsigned char __b) { - return __a - __b; -} - -static vector unsigned char __ATTRS_o_ai vec_sub(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a - __b; -} - -static vector unsigned char __ATTRS_o_ai vec_sub(vector unsigned char __a, - vector bool char __b) { - return __a - (vector unsigned char)__b; -} - -static vector short __ATTRS_o_ai vec_sub(vector short __a, vector short __b) { - return __a - __b; -} - -static vector short __ATTRS_o_ai vec_sub(vector bool short __a, - vector short __b) { - return (vector short)__a - __b; -} - -static vector short __ATTRS_o_ai vec_sub(vector short __a, - vector bool short __b) { - return __a - (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_sub(vector unsigned short __a, - vector unsigned short __b) { - return __a - __b; -} - -static vector unsigned short __ATTRS_o_ai vec_sub(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a - __b; -} - -static vector unsigned short __ATTRS_o_ai vec_sub(vector unsigned short __a, - vector bool short __b) { - return __a - (vector unsigned short)__b; -} - -static vector int __ATTRS_o_ai vec_sub(vector int __a, vector int __b) { - return __a - __b; -} - -static vector int __ATTRS_o_ai vec_sub(vector bool int __a, vector int __b) { - return (vector int)__a - __b; -} - -static vector int __ATTRS_o_ai vec_sub(vector int __a, vector bool int __b) { - return __a - (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_sub(vector unsigned int __a, - vector unsigned int __b) { - return __a - __b; -} - -static vector unsigned int __ATTRS_o_ai vec_sub(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a - __b; -} - -static vector unsigned int __ATTRS_o_ai vec_sub(vector unsigned int __a, - vector bool int __b) { - return __a - (vector unsigned int)__b; -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector signed __int128 __ATTRS_o_ai vec_sub(vector signed __int128 __a, - vector signed __int128 __b) { - return __a - __b; -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __a - __b; -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -static vector float __ATTRS_o_ai vec_sub(vector float __a, vector float __b) { - return __a - __b; -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai -vec_sub(vector double __a, vector double __b) { - return __a - __b; -} -#endif - -/* vec_vsububm */ - -#define __builtin_altivec_vsububm vec_vsububm - -static vector signed char __ATTRS_o_ai vec_vsububm(vector signed char __a, - vector signed char __b) { - return __a - __b; -} - -static vector signed char __ATTRS_o_ai vec_vsububm(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a - __b; -} - -static vector signed char __ATTRS_o_ai vec_vsububm(vector signed char __a, - vector bool char __b) { - return __a - (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vsububm(vector unsigned char __a, - vector unsigned char __b) { - return __a - __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vsububm(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a - __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vsububm(vector unsigned char __a, - vector bool char __b) { - return __a - (vector unsigned char)__b; -} - -/* vec_vsubuhm */ - -#define __builtin_altivec_vsubuhm vec_vsubuhm - -static vector short __ATTRS_o_ai vec_vsubuhm(vector short __a, - vector short __b) { - return __a - __b; -} - -static vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a, - vector short __b) { - return (vector short)__a - __b; -} - -static vector short __ATTRS_o_ai vec_vsubuhm(vector short __a, - vector bool short __b) { - return __a - (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai -vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) { - return __a - __b; -} - -static vector unsigned short __ATTRS_o_ai -vec_vsubuhm(vector bool short __a, vector unsigned short __b) { - return (vector unsigned short)__a - __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vsubuhm(vector unsigned short __a, - vector bool short __b) { - return __a - (vector unsigned short)__b; -} - -/* vec_vsubuwm */ - -#define __builtin_altivec_vsubuwm vec_vsubuwm - -static vector int __ATTRS_o_ai vec_vsubuwm(vector int __a, vector int __b) { - return __a - __b; -} - -static vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a, - vector int __b) { - return (vector int)__a - __b; -} - -static vector int __ATTRS_o_ai vec_vsubuwm(vector int __a, - vector bool int __b) { - return __a - (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vsubuwm(vector unsigned int __a, - vector unsigned int __b) { - return __a - __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vsubuwm(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a - __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vsubuwm(vector unsigned int __a, - vector bool int __b) { - return __a - (vector unsigned int)__b; -} - -/* vec_vsubfp */ - -#define __builtin_altivec_vsubfp vec_vsubfp - -static vector float __attribute__((__always_inline__)) -vec_vsubfp(vector float __a, vector float __b) { - return __a - __b; -} - -/* vec_subc */ - -static vector unsigned int __ATTRS_o_ai vec_subc(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vsubcuw(__a, __b); -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -static vector unsigned __int128 __ATTRS_o_ai -vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); -} - -static vector signed __int128 __ATTRS_o_ai -vec_subc(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -/* vec_vsubcuw */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) { - return __builtin_altivec_vsubcuw(__a, __b); -} - -/* vec_subs */ - -static vector signed char __ATTRS_o_ai vec_subs(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vsubsbs(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_subs(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vsubsbs((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_subs(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); -} - -static vector unsigned char __ATTRS_o_ai vec_subs(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vsububs(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_subs(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vsububs((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_subs(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); -} - -static vector short __ATTRS_o_ai vec_subs(vector short __a, vector short __b) { - return __builtin_altivec_vsubshs(__a, __b); -} - -static vector short __ATTRS_o_ai vec_subs(vector bool short __a, - vector short __b) { - return __builtin_altivec_vsubshs((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_subs(vector short __a, - vector bool short __b) { - return __builtin_altivec_vsubshs(__a, (vector short)__b); -} - -static vector unsigned short __ATTRS_o_ai vec_subs(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vsubuhs(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_subs(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_subs(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); -} - -static vector int __ATTRS_o_ai vec_subs(vector int __a, vector int __b) { - return __builtin_altivec_vsubsws(__a, __b); -} - -static vector int __ATTRS_o_ai vec_subs(vector bool int __a, vector int __b) { - return __builtin_altivec_vsubsws((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_subs(vector int __a, vector bool int __b) { - return __builtin_altivec_vsubsws(__a, (vector int)__b); -} - -static vector unsigned int __ATTRS_o_ai vec_subs(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vsubuws(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_subs(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_subs(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); -} - -/* vec_vsubsbs */ - -static vector signed char __ATTRS_o_ai vec_vsubsbs(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vsubsbs(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vsubsbs(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vsubsbs((vector signed char)__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vsubsbs(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); -} - -/* vec_vsububs */ - -static vector unsigned char __ATTRS_o_ai vec_vsububs(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vsububs(__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsububs(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vsububs((vector unsigned char)__a, __b); -} - -static vector unsigned char __ATTRS_o_ai vec_vsububs(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); -} - -/* vec_vsubshs */ - -static vector short __ATTRS_o_ai vec_vsubshs(vector short __a, - vector short __b) { - return __builtin_altivec_vsubshs(__a, __b); -} - -static vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a, - vector short __b) { - return __builtin_altivec_vsubshs((vector short)__a, __b); -} - -static vector short __ATTRS_o_ai vec_vsubshs(vector short __a, - vector bool short __b) { - return __builtin_altivec_vsubshs(__a, (vector short)__b); -} - -/* vec_vsubuhs */ - -static vector unsigned short __ATTRS_o_ai -vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_vsubuhs(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -vec_vsubuhs(vector bool short __a, vector unsigned short __b) { - return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); -} - -static vector unsigned short __ATTRS_o_ai vec_vsubuhs(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); -} - -/* vec_vsubsws */ - -static vector int __ATTRS_o_ai vec_vsubsws(vector int __a, vector int __b) { - return __builtin_altivec_vsubsws(__a, __b); -} - -static vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a, - vector int __b) { - return __builtin_altivec_vsubsws((vector int)__a, __b); -} - -static vector int __ATTRS_o_ai vec_vsubsws(vector int __a, - vector bool int __b) { - return __builtin_altivec_vsubsws(__a, (vector int)__b); -} - -/* vec_vsubuws */ - -static vector unsigned int __ATTRS_o_ai vec_vsubuws(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vsubuws(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsubuws(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_vsubuws(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); -} - -#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) -/* vec_vsubuqm */ - -static vector signed __int128 __ATTRS_o_ai -vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) { - return __a - __b; -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __a - __b; -} - -/* vec_vsubeuqm */ - -static vector signed __int128 __ATTRS_o_ai -vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b, - vector signed __int128 __c) { - return __builtin_altivec_vsubeuqm(__a, __b, __c); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b, - vector unsigned __int128 __c) { - return __builtin_altivec_vsubeuqm(__a, __b, __c); -} - -/* vec_vsubcuq */ - -static vector signed __int128 __ATTRS_o_ai -vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); -} - -/* vec_vsubecuq */ - -static vector signed __int128 __ATTRS_o_ai -vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b, - vector signed __int128 __c) { - return __builtin_altivec_vsubecuq(__a, __b, __c); -} - -static vector unsigned __int128 __ATTRS_o_ai -vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b, - vector unsigned __int128 __c) { - return __builtin_altivec_vsubecuq(__a, __b, __c); -} -#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) - -/* vec_sum4s */ - -static vector int __ATTRS_o_ai vec_sum4s(vector signed char __a, - vector int __b) { - return __builtin_altivec_vsum4sbs(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai vec_sum4s(vector unsigned char __a, - vector unsigned int __b) { - return __builtin_altivec_vsum4ubs(__a, __b); -} - -static vector int __ATTRS_o_ai vec_sum4s(vector signed short __a, - vector int __b) { - return __builtin_altivec_vsum4shs(__a, __b); -} - -/* vec_vsum4sbs */ - -static vector int __attribute__((__always_inline__)) -vec_vsum4sbs(vector signed char __a, vector int __b) { - return __builtin_altivec_vsum4sbs(__a, __b); -} - -/* vec_vsum4ubs */ - -static vector unsigned int __attribute__((__always_inline__)) -vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) { - return __builtin_altivec_vsum4ubs(__a, __b); -} - -/* vec_vsum4shs */ - -static vector int __attribute__((__always_inline__)) -vec_vsum4shs(vector signed short __a, vector int __b) { - return __builtin_altivec_vsum4shs(__a, __b); -} - -/* vec_sum2s */ - -/* The vsum2sws instruction has a big-endian bias, so that the second - input vector and the result always reference big-endian elements - 1 and 3 (little-endian element 0 and 2). For ease of porting the - programmer wants elements 1 and 3 in both cases, so for little - endian we must perform some permutes. */ - -static vector signed int __attribute__((__always_inline__)) -vec_sum2s(vector int __a, vector int __b) { -#ifdef __LITTLE_ENDIAN__ - vector int __c = (vector signed int)vec_perm( - __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, - 8, 9, 10, 11)); - __c = __builtin_altivec_vsum2sws(__a, __c); - return (vector signed int)vec_perm( - __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, - 8, 9, 10, 11)); -#else - return __builtin_altivec_vsum2sws(__a, __b); -#endif -} - -/* vec_vsum2sws */ - -static vector signed int __attribute__((__always_inline__)) -vec_vsum2sws(vector int __a, vector int __b) { -#ifdef __LITTLE_ENDIAN__ - vector int __c = (vector signed int)vec_perm( - __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, - 8, 9, 10, 11)); - __c = __builtin_altivec_vsum2sws(__a, __c); - return (vector signed int)vec_perm( - __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, - 8, 9, 10, 11)); -#else - return __builtin_altivec_vsum2sws(__a, __b); -#endif -} - -/* vec_sums */ - -/* The vsumsws instruction has a big-endian bias, so that the second - input vector and the result always reference big-endian element 3 - (little-endian element 0). For ease of porting the programmer - wants element 3 in both cases, so for little endian we must perform - some permutes. */ - -static vector signed int __attribute__((__always_inline__)) -vec_sums(vector signed int __a, vector signed int __b) { -#ifdef __LITTLE_ENDIAN__ - __b = (vector signed int)vec_splat(__b, 3); - __b = __builtin_altivec_vsumsws(__a, __b); - return (vector signed int)(0, 0, 0, __b[0]); -#else - return __builtin_altivec_vsumsws(__a, __b); -#endif -} - -/* vec_vsumsws */ - -static vector signed int __attribute__((__always_inline__)) -vec_vsumsws(vector signed int __a, vector signed int __b) { -#ifdef __LITTLE_ENDIAN__ - __b = (vector signed int)vec_splat(__b, 3); - __b = __builtin_altivec_vsumsws(__a, __b); - return (vector signed int)(0, 0, 0, __b[0]); -#else - return __builtin_altivec_vsumsws(__a, __b); -#endif -} - -/* vec_trunc */ - -static vector float __ATTRS_o_ai -vec_trunc(vector float __a) { -#ifdef __VSX__ - return __builtin_vsx_xvrspiz(__a); -#else - return __builtin_altivec_vrfiz(__a); -#endif -} - -#ifdef __VSX__ -static vector double __ATTRS_o_ai vec_trunc(vector double __a) { - return __builtin_vsx_xvrdpiz(__a); -} -#endif - -/* vec_vrfiz */ - -static vector float __attribute__((__always_inline__)) -vec_vrfiz(vector float __a) { - return __builtin_altivec_vrfiz(__a); -} - -/* vec_unpackh */ - -/* The vector unpack instructions all have a big-endian bias, so for - little endian we must reverse the meanings of "high" and "low." */ - -static vector short __ATTRS_o_ai vec_unpackh(vector signed char __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsb((vector char)__a); -#else - return __builtin_altivec_vupkhsb((vector char)__a); -#endif -} - -static vector bool short __ATTRS_o_ai vec_unpackh(vector bool char __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); -#else - return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); -#endif -} - -static vector int __ATTRS_o_ai vec_unpackh(vector short __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsh(__a); -#else - return __builtin_altivec_vupkhsh(__a); -#endif -} - -static vector bool int __ATTRS_o_ai vec_unpackh(vector bool short __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); -#else - return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_unpackh(vector pixel __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); -#else - return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector long long __ATTRS_o_ai vec_unpackh(vector int __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsw(__a); -#else - return __builtin_altivec_vupkhsw(__a); -#endif -} - -static vector bool long long __ATTRS_o_ai vec_unpackh(vector bool int __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); -#else - return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); -#endif -} -#endif - -/* vec_vupkhsb */ - -static vector short __ATTRS_o_ai vec_vupkhsb(vector signed char __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsb((vector char)__a); -#else - return __builtin_altivec_vupkhsb((vector char)__a); -#endif -} - -static vector bool short __ATTRS_o_ai vec_vupkhsb(vector bool char __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); -#else - return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); -#endif -} - -/* vec_vupkhsh */ - -static vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsh(__a); -#else - return __builtin_altivec_vupkhsh(__a); -#endif -} - -static vector bool int __ATTRS_o_ai vec_vupkhsh(vector bool short __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); -#else - return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_vupkhsh(vector pixel __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); -#else - return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); -#endif -} - -/* vec_vupkhsw */ - -#ifdef __POWER8_VECTOR__ -static vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupklsw(__a); -#else - return __builtin_altivec_vupkhsw(__a); -#endif -} - -static vector bool long long __ATTRS_o_ai vec_vupkhsw(vector bool int __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); -#else - return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); -#endif -} -#endif - -/* vec_unpackl */ - -static vector short __ATTRS_o_ai vec_unpackl(vector signed char __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsb((vector char)__a); -#else - return __builtin_altivec_vupklsb((vector char)__a); -#endif -} - -static vector bool short __ATTRS_o_ai vec_unpackl(vector bool char __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); -#else - return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); -#endif -} - -static vector int __ATTRS_o_ai vec_unpackl(vector short __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsh(__a); -#else - return __builtin_altivec_vupklsh(__a); -#endif -} - -static vector bool int __ATTRS_o_ai vec_unpackl(vector bool short __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); -#else - return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_unpackl(vector pixel __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); -#else - return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); -#endif -} - -#ifdef __POWER8_VECTOR__ -static vector long long __ATTRS_o_ai vec_unpackl(vector int __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsw(__a); -#else - return __builtin_altivec_vupklsw(__a); -#endif -} - -static vector bool long long __ATTRS_o_ai vec_unpackl(vector bool int __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); -#else - return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); -#endif -} -#endif - -/* vec_vupklsb */ - -static vector short __ATTRS_o_ai vec_vupklsb(vector signed char __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsb((vector char)__a); -#else - return __builtin_altivec_vupklsb((vector char)__a); -#endif -} - -static vector bool short __ATTRS_o_ai vec_vupklsb(vector bool char __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); -#else - return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); -#endif -} - -/* vec_vupklsh */ - -static vector int __ATTRS_o_ai vec_vupklsh(vector short __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsh(__a); -#else - return __builtin_altivec_vupklsh(__a); -#endif -} - -static vector bool int __ATTRS_o_ai vec_vupklsh(vector bool short __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); -#else - return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); -#endif -} - -static vector unsigned int __ATTRS_o_ai vec_vupklsh(vector pixel __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); -#else - return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); -#endif -} - -/* vec_vupklsw */ - -#ifdef __POWER8_VECTOR__ -static vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) { -#ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vupkhsw(__a); -#else - return __builtin_altivec_vupklsw(__a); -#endif -} - -static vector bool long long __ATTRS_o_ai vec_vupklsw(vector bool int __a) { -#ifdef __LITTLE_ENDIAN__ - return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); -#else - return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); -#endif -} -#endif - -/* vec_vsx_ld */ - -#ifdef __VSX__ - -static vector signed int __ATTRS_o_ai vec_vsx_ld(int __a, - const vector signed int *__b) { - return (vector signed int)__builtin_vsx_lxvw4x(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai -vec_vsx_ld(int __a, const vector unsigned int *__b) { - return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b); -} - -static vector float __ATTRS_o_ai vec_vsx_ld(int __a, const vector float *__b) { - return (vector float)__builtin_vsx_lxvw4x(__a, __b); -} - -static vector signed long long __ATTRS_o_ai -vec_vsx_ld(int __a, const vector signed long long *__b) { - return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai -vec_vsx_ld(int __a, const vector unsigned long long *__b) { - return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b); -} - -static vector double __ATTRS_o_ai vec_vsx_ld(int __a, - const vector double *__b) { - return (vector double)__builtin_vsx_lxvd2x(__a, __b); -} - -#endif - -/* vec_vsx_st */ - -#ifdef __VSX__ - -static void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b, - vector signed int *__c) { - __builtin_vsx_stxvw4x((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b, - vector unsigned int *__c) { - __builtin_vsx_stxvw4x((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b, - vector float *__c) { - __builtin_vsx_stxvw4x((vector int)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_vsx_st(vector signed long long __a, int __b, - vector signed long long *__c) { - __builtin_vsx_stxvd2x((vector double)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a, int __b, - vector unsigned long long *__c) { - __builtin_vsx_stxvd2x((vector double)__a, __b, __c); -} - -static void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b, - vector double *__c) { - __builtin_vsx_stxvd2x((vector double)__a, __b, __c); -} - -#endif - -/* vec_xor */ - -#define __builtin_altivec_vxor vec_xor - -static vector signed char __ATTRS_o_ai vec_xor(vector signed char __a, - vector signed char __b) { - return __a ^ __b; -} - -static vector signed char __ATTRS_o_ai vec_xor(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a ^ __b; -} - -static vector signed char __ATTRS_o_ai vec_xor(vector signed char __a, - vector bool char __b) { - return __a ^ (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_xor(vector unsigned char __a, - vector unsigned char __b) { - return __a ^ __b; -} - -static vector unsigned char __ATTRS_o_ai vec_xor(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a ^ __b; -} - -static vector unsigned char __ATTRS_o_ai vec_xor(vector unsigned char __a, - vector bool char __b) { - return __a ^ (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_xor(vector bool char __a, - vector bool char __b) { - return __a ^ __b; -} - -static vector short __ATTRS_o_ai vec_xor(vector short __a, vector short __b) { - return __a ^ __b; -} - -static vector short __ATTRS_o_ai vec_xor(vector bool short __a, - vector short __b) { - return (vector short)__a ^ __b; -} - -static vector short __ATTRS_o_ai vec_xor(vector short __a, - vector bool short __b) { - return __a ^ (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_xor(vector unsigned short __a, - vector unsigned short __b) { - return __a ^ __b; -} - -static vector unsigned short __ATTRS_o_ai vec_xor(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a ^ __b; -} - -static vector unsigned short __ATTRS_o_ai vec_xor(vector unsigned short __a, - vector bool short __b) { - return __a ^ (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_xor(vector bool short __a, - vector bool short __b) { - return __a ^ __b; -} - -static vector int __ATTRS_o_ai vec_xor(vector int __a, vector int __b) { - return __a ^ __b; -} - -static vector int __ATTRS_o_ai vec_xor(vector bool int __a, vector int __b) { - return (vector int)__a ^ __b; -} - -static vector int __ATTRS_o_ai vec_xor(vector int __a, vector bool int __b) { - return __a ^ (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_xor(vector unsigned int __a, - vector unsigned int __b) { - return __a ^ __b; -} - -static vector unsigned int __ATTRS_o_ai vec_xor(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a ^ __b; -} - -static vector unsigned int __ATTRS_o_ai vec_xor(vector unsigned int __a, - vector bool int __b) { - return __a ^ (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_xor(vector bool int __a, - vector bool int __b) { - return __a ^ __b; -} - -static vector float __ATTRS_o_ai vec_xor(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_xor(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_xor(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_xor(vector signed long long __a, vector signed long long __b) { - return __a ^ __b; -} - -static vector signed long long __ATTRS_o_ai -vec_xor(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a ^ __b; -} - -static vector signed long long __ATTRS_o_ai vec_xor(vector signed long long __a, - vector bool long long __b) { - return __a ^ (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_xor(vector unsigned long long __a, vector unsigned long long __b) { - return __a ^ __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_xor(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a ^ __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_xor(vector unsigned long long __a, vector bool long long __b) { - return __a ^ (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_xor(vector bool long long __a, - vector bool long long __b) { - return __a ^ __b; -} - -static vector double __ATTRS_o_ai -vec_xor(vector double __a, vector double __b) { - return (vector double)((vector unsigned long long)__a ^ - (vector unsigned long long)__b); -} - -static vector double __ATTRS_o_ai -vec_xor(vector double __a, vector bool long long __b) { - return (vector double)((vector unsigned long long)__a ^ - (vector unsigned long long) __b); -} - -static vector double __ATTRS_o_ai -vec_xor(vector bool long long __a, vector double __b) { - return (vector double)((vector unsigned long long)__a ^ - (vector unsigned long long)__b); -} -#endif - -/* vec_vxor */ - -static vector signed char __ATTRS_o_ai vec_vxor(vector signed char __a, - vector signed char __b) { - return __a ^ __b; -} - -static vector signed char __ATTRS_o_ai vec_vxor(vector bool char __a, - vector signed char __b) { - return (vector signed char)__a ^ __b; -} - -static vector signed char __ATTRS_o_ai vec_vxor(vector signed char __a, - vector bool char __b) { - return __a ^ (vector signed char)__b; -} - -static vector unsigned char __ATTRS_o_ai vec_vxor(vector unsigned char __a, - vector unsigned char __b) { - return __a ^ __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vxor(vector bool char __a, - vector unsigned char __b) { - return (vector unsigned char)__a ^ __b; -} - -static vector unsigned char __ATTRS_o_ai vec_vxor(vector unsigned char __a, - vector bool char __b) { - return __a ^ (vector unsigned char)__b; -} - -static vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a, - vector bool char __b) { - return __a ^ __b; -} - -static vector short __ATTRS_o_ai vec_vxor(vector short __a, vector short __b) { - return __a ^ __b; -} - -static vector short __ATTRS_o_ai vec_vxor(vector bool short __a, - vector short __b) { - return (vector short)__a ^ __b; -} - -static vector short __ATTRS_o_ai vec_vxor(vector short __a, - vector bool short __b) { - return __a ^ (vector short)__b; -} - -static vector unsigned short __ATTRS_o_ai vec_vxor(vector unsigned short __a, - vector unsigned short __b) { - return __a ^ __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vxor(vector bool short __a, - vector unsigned short __b) { - return (vector unsigned short)__a ^ __b; -} - -static vector unsigned short __ATTRS_o_ai vec_vxor(vector unsigned short __a, - vector bool short __b) { - return __a ^ (vector unsigned short)__b; -} - -static vector bool short __ATTRS_o_ai vec_vxor(vector bool short __a, - vector bool short __b) { - return __a ^ __b; -} - -static vector int __ATTRS_o_ai vec_vxor(vector int __a, vector int __b) { - return __a ^ __b; -} - -static vector int __ATTRS_o_ai vec_vxor(vector bool int __a, vector int __b) { - return (vector int)__a ^ __b; -} - -static vector int __ATTRS_o_ai vec_vxor(vector int __a, vector bool int __b) { - return __a ^ (vector int)__b; -} - -static vector unsigned int __ATTRS_o_ai vec_vxor(vector unsigned int __a, - vector unsigned int __b) { - return __a ^ __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vxor(vector bool int __a, - vector unsigned int __b) { - return (vector unsigned int)__a ^ __b; -} - -static vector unsigned int __ATTRS_o_ai vec_vxor(vector unsigned int __a, - vector bool int __b) { - return __a ^ (vector unsigned int)__b; -} - -static vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a, - vector bool int __b) { - return __a ^ __b; -} - -static vector float __ATTRS_o_ai vec_vxor(vector float __a, vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vxor(vector bool int __a, - vector float __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -static vector float __ATTRS_o_ai vec_vxor(vector float __a, - vector bool int __b) { - vector unsigned int __res = - (vector unsigned int)__a ^ (vector unsigned int)__b; - return (vector float)__res; -} - -#ifdef __VSX__ -static vector signed long long __ATTRS_o_ai -vec_vxor(vector signed long long __a, vector signed long long __b) { - return __a ^ __b; -} - -static vector signed long long __ATTRS_o_ai -vec_vxor(vector bool long long __a, vector signed long long __b) { - return (vector signed long long)__a ^ __b; -} - -static vector signed long long __ATTRS_o_ai -vec_vxor(vector signed long long __a, vector bool long long __b) { - return __a ^ (vector signed long long)__b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vxor(vector unsigned long long __a, vector unsigned long long __b) { - return __a ^ __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vxor(vector bool long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__a ^ __b; -} - -static vector unsigned long long __ATTRS_o_ai -vec_vxor(vector unsigned long long __a, vector bool long long __b) { - return __a ^ (vector unsigned long long)__b; -} - -static vector bool long long __ATTRS_o_ai vec_vxor(vector bool long long __a, - vector bool long long __b) { - return __a ^ __b; -} -#endif - -/* ------------------------ extensions for CBEA ----------------------------- */ - -/* vec_extract */ - -static signed char __ATTRS_o_ai vec_extract(vector signed char __a, int __b) { - return __a[__b]; -} - -static unsigned char __ATTRS_o_ai vec_extract(vector unsigned char __a, - int __b) { - return __a[__b]; -} - -static short __ATTRS_o_ai vec_extract(vector short __a, int __b) { - return __a[__b]; -} - -static unsigned short __ATTRS_o_ai vec_extract(vector unsigned short __a, - int __b) { - return __a[__b]; -} - -static int __ATTRS_o_ai vec_extract(vector int __a, int __b) { - return __a[__b]; -} - -static unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a, int __b) { - return __a[__b]; -} - -static float __ATTRS_o_ai vec_extract(vector float __a, int __b) { - return __a[__b]; -} - -/* vec_insert */ - -static vector signed char __ATTRS_o_ai vec_insert(signed char __a, - vector signed char __b, - int __c) { - __b[__c] = __a; - return __b; -} - -static vector unsigned char __ATTRS_o_ai vec_insert(unsigned char __a, - vector unsigned char __b, - int __c) { - __b[__c] = __a; - return __b; -} - -static vector short __ATTRS_o_ai vec_insert(short __a, vector short __b, - int __c) { - __b[__c] = __a; - return __b; -} - -static vector unsigned short __ATTRS_o_ai vec_insert(unsigned short __a, - vector unsigned short __b, - int __c) { - __b[__c] = __a; - return __b; -} - -static vector int __ATTRS_o_ai vec_insert(int __a, vector int __b, int __c) { - __b[__c] = __a; - return __b; -} - -static vector unsigned int __ATTRS_o_ai vec_insert(unsigned int __a, - vector unsigned int __b, - int __c) { - __b[__c] = __a; - return __b; -} - -static vector float __ATTRS_o_ai vec_insert(float __a, vector float __b, - int __c) { - __b[__c] = __a; - return __b; -} - -/* vec_lvlx */ - -static vector signed char __ATTRS_o_ai vec_lvlx(int __a, - const signed char *__b) { - return vec_perm(vec_ld(__a, __b), (vector signed char)(0), - vec_lvsl(__a, __b)); -} - -static vector signed char __ATTRS_o_ai vec_lvlx(int __a, - const vector signed char *__b) { - return vec_perm(vec_ld(__a, __b), (vector signed char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned char __ATTRS_o_ai vec_lvlx(int __a, - const unsigned char *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvlx(int __a, const vector unsigned char *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool char __ATTRS_o_ai vec_lvlx(int __a, - const vector bool char *__b) { - return vec_perm(vec_ld(__a, __b), (vector bool char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector short __ATTRS_o_ai vec_lvlx(int __a, const short *__b) { - return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b)); -} - -static vector short __ATTRS_o_ai vec_lvlx(int __a, const vector short *__b) { - return vec_perm(vec_ld(__a, __b), (vector short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned short __ATTRS_o_ai vec_lvlx(int __a, - const unsigned short *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvlx(int __a, const vector unsigned short *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool short __ATTRS_o_ai vec_lvlx(int __a, - const vector bool short *__b) { - return vec_perm(vec_ld(__a, __b), (vector bool short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector pixel __ATTRS_o_ai vec_lvlx(int __a, const vector pixel *__b) { - return vec_perm(vec_ld(__a, __b), (vector pixel)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) { - return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b)); -} - -static vector int __ATTRS_o_ai vec_lvlx(int __a, const vector int *__b) { - return vec_perm(vec_ld(__a, __b), (vector int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned int __ATTRS_o_ai vec_lvlx(int __a, - const unsigned int *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvlx(int __a, const vector unsigned int *__b) { - return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool int __ATTRS_o_ai vec_lvlx(int __a, - const vector bool int *__b) { - return vec_perm(vec_ld(__a, __b), (vector bool int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector float __ATTRS_o_ai vec_lvlx(int __a, const float *__b) { - return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b)); -} - -static vector float __ATTRS_o_ai vec_lvlx(int __a, const vector float *__b) { - return vec_perm(vec_ld(__a, __b), (vector float)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -/* vec_lvlxl */ - -static vector signed char __ATTRS_o_ai vec_lvlxl(int __a, - const signed char *__b) { - return vec_perm(vec_ldl(__a, __b), (vector signed char)(0), - vec_lvsl(__a, __b)); -} - -static vector signed char __ATTRS_o_ai -vec_lvlxl(int __a, const vector signed char *__b) { - return vec_perm(vec_ldl(__a, __b), (vector signed char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned char __ATTRS_o_ai vec_lvlxl(int __a, - const unsigned char *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvlxl(int __a, const vector unsigned char *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool char __ATTRS_o_ai vec_lvlxl(int __a, - const vector bool char *__b) { - return vec_perm(vec_ldl(__a, __b), (vector bool char)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector short __ATTRS_o_ai vec_lvlxl(int __a, const short *__b) { - return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b)); -} - -static vector short __ATTRS_o_ai vec_lvlxl(int __a, const vector short *__b) { - return vec_perm(vec_ldl(__a, __b), (vector short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned short __ATTRS_o_ai vec_lvlxl(int __a, - const unsigned short *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvlxl(int __a, const vector unsigned short *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool short __ATTRS_o_ai vec_lvlxl(int __a, - const vector bool short *__b) { - return vec_perm(vec_ldl(__a, __b), (vector bool short)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector pixel __ATTRS_o_ai vec_lvlxl(int __a, const vector pixel *__b) { - return vec_perm(vec_ldl(__a, __b), (vector pixel)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) { - return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b)); -} - -static vector int __ATTRS_o_ai vec_lvlxl(int __a, const vector int *__b) { - return vec_perm(vec_ldl(__a, __b), (vector int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned int __ATTRS_o_ai vec_lvlxl(int __a, - const unsigned int *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0), - vec_lvsl(__a, __b)); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvlxl(int __a, const vector unsigned int *__b) { - return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool int __ATTRS_o_ai vec_lvlxl(int __a, - const vector bool int *__b) { - return vec_perm(vec_ldl(__a, __b), (vector bool int)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector float __ATTRS_o_ai vec_lvlxl(int __a, const float *__b) { - return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b)); -} - -static vector float __ATTRS_o_ai vec_lvlxl(int __a, vector float *__b) { - return vec_perm(vec_ldl(__a, __b), (vector float)(0), - vec_lvsl(__a, (unsigned char *)__b)); -} - -/* vec_lvrx */ - -static vector signed char __ATTRS_o_ai vec_lvrx(int __a, - const signed char *__b) { - return vec_perm((vector signed char)(0), vec_ld(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector signed char __ATTRS_o_ai vec_lvrx(int __a, - const vector signed char *__b) { - return vec_perm((vector signed char)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned char __ATTRS_o_ai vec_lvrx(int __a, - const unsigned char *__b) { - return vec_perm((vector unsigned char)(0), vec_ld(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvrx(int __a, const vector unsigned char *__b) { - return vec_perm((vector unsigned char)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool char __ATTRS_o_ai vec_lvrx(int __a, - const vector bool char *__b) { - return vec_perm((vector bool char)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector short __ATTRS_o_ai vec_lvrx(int __a, const short *__b) { - return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); -} - -static vector short __ATTRS_o_ai vec_lvrx(int __a, const vector short *__b) { - return vec_perm((vector short)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned short __ATTRS_o_ai vec_lvrx(int __a, - const unsigned short *__b) { - return vec_perm((vector unsigned short)(0), vec_ld(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvrx(int __a, const vector unsigned short *__b) { - return vec_perm((vector unsigned short)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool short __ATTRS_o_ai vec_lvrx(int __a, - const vector bool short *__b) { - return vec_perm((vector bool short)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector pixel __ATTRS_o_ai vec_lvrx(int __a, const vector pixel *__b) { - return vec_perm((vector pixel)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) { - return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); -} - -static vector int __ATTRS_o_ai vec_lvrx(int __a, const vector int *__b) { - return vec_perm((vector int)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned int __ATTRS_o_ai vec_lvrx(int __a, - const unsigned int *__b) { - return vec_perm((vector unsigned int)(0), vec_ld(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvrx(int __a, const vector unsigned int *__b) { - return vec_perm((vector unsigned int)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool int __ATTRS_o_ai vec_lvrx(int __a, - const vector bool int *__b) { - return vec_perm((vector bool int)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector float __ATTRS_o_ai vec_lvrx(int __a, const float *__b) { - return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); -} - -static vector float __ATTRS_o_ai vec_lvrx(int __a, const vector float *__b) { - return vec_perm((vector float)(0), vec_ld(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -/* vec_lvrxl */ - -static vector signed char __ATTRS_o_ai vec_lvrxl(int __a, - const signed char *__b) { - return vec_perm((vector signed char)(0), vec_ldl(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector signed char __ATTRS_o_ai -vec_lvrxl(int __a, const vector signed char *__b) { - return vec_perm((vector signed char)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned char __ATTRS_o_ai vec_lvrxl(int __a, - const unsigned char *__b) { - return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned char __ATTRS_o_ai -vec_lvrxl(int __a, const vector unsigned char *__b) { - return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool char __ATTRS_o_ai vec_lvrxl(int __a, - const vector bool char *__b) { - return vec_perm((vector bool char)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector short __ATTRS_o_ai vec_lvrxl(int __a, const short *__b) { - return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); -} - -static vector short __ATTRS_o_ai vec_lvrxl(int __a, const vector short *__b) { - return vec_perm((vector short)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned short __ATTRS_o_ai vec_lvrxl(int __a, - const unsigned short *__b) { - return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned short __ATTRS_o_ai -vec_lvrxl(int __a, const vector unsigned short *__b) { - return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool short __ATTRS_o_ai vec_lvrxl(int __a, - const vector bool short *__b) { - return vec_perm((vector bool short)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector pixel __ATTRS_o_ai vec_lvrxl(int __a, const vector pixel *__b) { - return vec_perm((vector pixel)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) { - return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); -} - -static vector int __ATTRS_o_ai vec_lvrxl(int __a, const vector int *__b) { - return vec_perm((vector int)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector unsigned int __ATTRS_o_ai vec_lvrxl(int __a, - const unsigned int *__b) { - return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b), - vec_lvsl(__a, __b)); -} - -static vector unsigned int __ATTRS_o_ai -vec_lvrxl(int __a, const vector unsigned int *__b) { - return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector bool int __ATTRS_o_ai vec_lvrxl(int __a, - const vector bool int *__b) { - return vec_perm((vector bool int)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -static vector float __ATTRS_o_ai vec_lvrxl(int __a, const float *__b) { - return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); -} - -static vector float __ATTRS_o_ai vec_lvrxl(int __a, const vector float *__b) { - return vec_perm((vector float)(0), vec_ldl(__a, __b), - vec_lvsl(__a, (unsigned char *)__b)); -} - -/* vec_stvlx */ - -static void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b, - signed char *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b, - vector signed char *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b, - unsigned char *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b, - vector unsigned char *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b, - vector bool char *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector short __a, int __b, short *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector short __a, int __b, - vector short *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned short __a, int __b, - unsigned short *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned short __a, int __b, - vector unsigned short *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b, - vector bool short *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b, - vector pixel *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector int __a, int __b, int *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector int __a, int __b, vector int *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b, - unsigned int *__c) { - return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b, - vector unsigned int *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b, - vector bool int *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlx(vector float __a, int __b, - vector float *__c) { - return vec_st( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -/* vec_stvlxl */ - -static void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b, - signed char *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b, - vector signed char *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a, int __b, - unsigned char *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a, int __b, - vector unsigned char *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b, - vector bool char *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b, short *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b, - vector short *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a, int __b, - unsigned short *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a, int __b, - vector unsigned short *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b, - vector bool short *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b, - vector pixel *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b, int *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b, vector int *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b, - unsigned int *__c) { - return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b, - vector unsigned int *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b, - vector bool int *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b, - vector float *__c) { - return vec_stl( - vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -/* vec_stvrx */ - -static void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b, - signed char *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b, - vector signed char *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b, - unsigned char *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b, - vector unsigned char *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b, - vector bool char *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector short __a, int __b, short *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector short __a, int __b, - vector short *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned short __a, int __b, - unsigned short *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned short __a, int __b, - vector unsigned short *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b, - vector bool short *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b, - vector pixel *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector int __a, int __b, int *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector int __a, int __b, vector int *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b, - unsigned int *__c) { - return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b, - vector unsigned int *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b, - vector bool int *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrx(vector float __a, int __b, - vector float *__c) { - return vec_st( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -/* vec_stvrxl */ - -static void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b, - signed char *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b, - vector signed char *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a, int __b, - unsigned char *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a, int __b, - vector unsigned char *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b, - vector bool char *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b, short *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b, - vector short *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a, int __b, - unsigned short *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a, int __b, - vector unsigned short *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b, - vector bool short *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b, - vector pixel *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b, int *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b, vector int *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b, - unsigned int *__c) { - return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, - __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b, - vector unsigned int *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b, - vector bool int *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -static void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b, - vector float *__c) { - return vec_stl( - vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), - __b, __c); -} - -/* vec_promote */ - -static vector signed char __ATTRS_o_ai vec_promote(signed char __a, int __b) { - vector signed char __res = (vector signed char)(0); - __res[__b] = __a; - return __res; -} - -static vector unsigned char __ATTRS_o_ai vec_promote(unsigned char __a, - int __b) { - vector unsigned char __res = (vector unsigned char)(0); - __res[__b] = __a; - return __res; -} - -static vector short __ATTRS_o_ai vec_promote(short __a, int __b) { - vector short __res = (vector short)(0); - __res[__b] = __a; - return __res; -} - -static vector unsigned short __ATTRS_o_ai vec_promote(unsigned short __a, - int __b) { - vector unsigned short __res = (vector unsigned short)(0); - __res[__b] = __a; - return __res; -} - -static vector int __ATTRS_o_ai vec_promote(int __a, int __b) { - vector int __res = (vector int)(0); - __res[__b] = __a; - return __res; -} - -static vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a, int __b) { - vector unsigned int __res = (vector unsigned int)(0); - __res[__b] = __a; - return __res; -} - -static vector float __ATTRS_o_ai vec_promote(float __a, int __b) { - vector float __res = (vector float)(0); - __res[__b] = __a; - return __res; -} - -/* vec_splats */ - -static vector signed char __ATTRS_o_ai vec_splats(signed char __a) { - return (vector signed char)(__a); -} - -static vector unsigned char __ATTRS_o_ai vec_splats(unsigned char __a) { - return (vector unsigned char)(__a); -} - -static vector short __ATTRS_o_ai vec_splats(short __a) { - return (vector short)(__a); -} - -static vector unsigned short __ATTRS_o_ai vec_splats(unsigned short __a) { - return (vector unsigned short)(__a); -} - -static vector int __ATTRS_o_ai vec_splats(int __a) { return (vector int)(__a); } - -static vector unsigned int __ATTRS_o_ai vec_splats(unsigned int __a) { - return (vector unsigned int)(__a); -} - -static vector float __ATTRS_o_ai vec_splats(float __a) { - return (vector float)(__a); -} - -/* ----------------------------- predicates --------------------------------- */ - -/* vec_all_eq */ - -static int __ATTRS_o_ai vec_all_eq(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_eq(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector pixel __a, vector pixel __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_eq(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, - (vector int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_eq(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_eq(vector long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool long long __a, - vector long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_eq(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, - (vector long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_all_eq(vector float __a, vector float __b) { - return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b); -} - -/* vec_all_ge */ - -static int __ATTRS_o_ai vec_all_ge(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_ge(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a); -} -static int __ATTRS_o_ai vec_all_ge(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_all_ge(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, - (vector unsigned long long)__a); -} -#endif - -static int __ATTRS_o_ai vec_all_ge(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b); -} - -/* vec_all_gt */ - -static int __ATTRS_o_ai vec_all_gt(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, - __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_gt(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b); -} -static int __ATTRS_o_ai vec_all_gt(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, - __b); -} - -static int __ATTRS_o_ai vec_all_gt(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, - (vector unsigned long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_all_gt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b); -} - -/* vec_all_in */ - -static int __attribute__((__always_inline__)) -vec_all_in(vector float __a, vector float __b) { - return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b); -} - -/* vec_all_le */ - -static int __ATTRS_o_ai vec_all_le(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, - __b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_le(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_le(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, - __b); -} - -static int __ATTRS_o_ai vec_all_le(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, - (vector unsigned long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_all_le(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a); -} - -/* vec_all_lt */ - -static int __ATTRS_o_ai vec_all_lt(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_lt(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, - __a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_all_lt(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, - (vector unsigned long long)__a); -} -#endif - -static int __ATTRS_o_ai vec_all_lt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a); -} - -/* vec_all_nan */ - -static int __attribute__((__always_inline__)) vec_all_nan(vector float __a) { - return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a); -} - -/* vec_all_ne */ - -static int __ATTRS_o_ai vec_all_ne(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_ne(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector pixel __a, vector pixel __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_ne(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, - (vector int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_all_ne(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_all_ne(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, - (vector signed long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_all_ne(vector float __a, vector float __b) { - return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b); -} - -/* vec_all_nge */ - -static int __attribute__((__always_inline__)) -vec_all_nge(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b); -} - -/* vec_all_ngt */ - -static int __attribute__((__always_inline__)) -vec_all_ngt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b); -} - -/* vec_all_nle */ - -static int __attribute__((__always_inline__)) -vec_all_nle(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a); -} - -/* vec_all_nlt */ - -static int __attribute__((__always_inline__)) -vec_all_nlt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a); -} - -/* vec_all_numeric */ - -static int __attribute__((__always_inline__)) -vec_all_numeric(vector float __a) { - return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a); -} - -/* vec_any_eq */ - -static int __ATTRS_o_ai vec_any_eq(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_eq(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector pixel __a, vector pixel __b) { - return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_eq(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, - (vector int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_eq(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_eq(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_any_eq(vector float __a, vector float __b) { - return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b); -} - -/* vec_any_ge */ - -static int __ATTRS_o_ai vec_any_ge(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_ge(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, - (vector signed long long)__b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__b, __a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_any_ge(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__b, - (vector unsigned long long)__a); -} -#endif - -static int __ATTRS_o_ai vec_any_ge(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b); -} - -/* vec_any_gt */ - -static int __ATTRS_o_ai vec_any_gt(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, - (vector signed char)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_gt(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__a, __b); -} - -static int __ATTRS_o_ai vec_any_gt(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__a, - (vector unsigned long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_any_gt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b); -} - -/* vec_any_le */ - -static int __ATTRS_o_ai vec_any_le(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, - (vector signed char)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, - (vector unsigned char)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, - (vector unsigned short)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, - __b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, - (vector unsigned int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_le(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__a, - (vector unsigned long long)__b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__a, __b); -} - -static int __ATTRS_o_ai vec_any_le(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, - (vector unsigned long long)__a, - (vector unsigned long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_any_le(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a); -} - -/* vec_any_lt */ - -static int __ATTRS_o_ai vec_any_lt(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, - (vector unsigned char)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector short __a, vector short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, - (vector unsigned short)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, - __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, - (vector unsigned int)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, - (vector unsigned int)__a); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_lt(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, - (vector signed long long)__b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__b, __a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, - (vector unsigned long long)__a); -} - -static int __ATTRS_o_ai vec_any_lt(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, - (vector unsigned long long)__b, - (vector unsigned long long)__a); -} -#endif - -static int __ATTRS_o_ai vec_any_lt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a); -} - -/* vec_any_nan */ - -static int __attribute__((__always_inline__)) vec_any_nan(vector float __a) { - return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a); -} - -/* vec_any_ne */ - -static int __ATTRS_o_ai vec_any_ne(vector signed char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector signed char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned char __a, - vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool char __a, - vector signed char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool char __a, - vector unsigned char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool char __a, vector bool char __b) { - return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, - (vector char)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_ne(vector short __a, vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool short __a, vector short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool short __a, - vector unsigned short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool short __a, - vector bool short __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector pixel __a, vector pixel __b) { - return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, - (vector short)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_ne(vector int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned int __a, - vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool int __a, vector int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool int __a, - vector unsigned int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, - (vector int)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool int __a, vector bool int __b) { - return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, - (vector int)__b); -} - -#ifdef __POWER8_VECTOR__ -static int __ATTRS_o_ai vec_any_ne(vector signed long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a, - (vector long long)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector signed long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, - (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool long long __a, - vector signed long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool long long __a, - vector unsigned long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); -} - -static int __ATTRS_o_ai vec_any_ne(vector bool long long __a, - vector bool long long __b) { - return __builtin_altivec_vcmpequd_p( - __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); -} -#endif - -static int __ATTRS_o_ai vec_any_ne(vector float __a, vector float __b) { - return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b); -} - -/* vec_any_nge */ - -static int __attribute__((__always_inline__)) -vec_any_nge(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b); -} - -/* vec_any_ngt */ - -static int __attribute__((__always_inline__)) -vec_any_ngt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b); -} - -/* vec_any_nle */ - -static int __attribute__((__always_inline__)) -vec_any_nle(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a); -} - -/* vec_any_nlt */ - -static int __attribute__((__always_inline__)) -vec_any_nlt(vector float __a, vector float __b) { - return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a); -} - -/* vec_any_numeric */ - -static int __attribute__((__always_inline__)) -vec_any_numeric(vector float __a) { - return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a); -} - -/* vec_any_out */ - -static int __attribute__((__always_inline__)) -vec_any_out(vector float __a, vector float __b) { - return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b); -} - -/* Power 8 Crypto functions -Note: We diverge from the current GCC implementation with regard -to cryptography and related functions as follows: -- Only the SHA and AES instructions and builtins are disabled by -mno-crypto -- The remaining ones are only available on Power8 and up so - require -mpower8-vector -The justification for this is that export requirements require that -Category:Vector.Crypto is optional (i.e. compliant hardware may not provide -support). As a result, we need to be able to turn off support for those. -The remaining ones (currently controlled by -mcrypto for GCC) still -need to be provided on compliant hardware even if Vector.Crypto is not -provided. -FIXME: the naming convention for the builtins will be adjusted due -to the inconsistency (__builtin_crypto_ prefix on builtins that cannot be -removed with -mno-crypto). This is under development. -*/ -#ifdef __CRYPTO__ -static vector unsigned long long __attribute__((__always_inline__)) -__builtin_crypto_vsbox(vector unsigned long long __a) { - return __builtin_altivec_crypto_vsbox(__a); -} - -static vector unsigned long long __attribute__((__always_inline__)) -__builtin_crypto_vcipher(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_crypto_vcipher(__a, __b); -} - -static vector unsigned long long __attribute__((__always_inline__)) -__builtin_crypto_vcipherlast(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_crypto_vcipherlast(__a, __b); -} - -static vector unsigned long long __attribute__((__always_inline__)) -__builtin_crypto_vncipher(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_crypto_vncipher(__a, __b); -} - -static vector unsigned long long __attribute__((__always_inline__)) -__builtin_crypto_vncipherlast(vector unsigned long long __a, - vector unsigned long long __b) { - return __builtin_altivec_crypto_vncipherlast(__a, __b); -} - -#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad -#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw -#endif - -#ifdef __POWER8_VECTOR__ -static vector unsigned char __ATTRS_o_ai -__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_altivec_crypto_vpermxor(__a, __b, __c); -} - -static vector unsigned short __ATTRS_o_ai -__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return (vector unsigned short)__builtin_altivec_crypto_vpermxor( - (vector unsigned char)__a, (vector unsigned char)__b, - (vector unsigned char)__c); -} - -static vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor( - vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) { - return (vector unsigned int)__builtin_altivec_crypto_vpermxor( - (vector unsigned char)__a, (vector unsigned char)__b, - (vector unsigned char)__c); -} - -static vector unsigned long long __ATTRS_o_ai __builtin_crypto_vpermxor( - vector unsigned long long __a, vector unsigned long long __b, - vector unsigned long long __c) { - return (vector unsigned long long)__builtin_altivec_crypto_vpermxor( - (vector unsigned char)__a, (vector unsigned char)__b, - (vector unsigned char)__c); -} - -static vector unsigned char __ATTRS_o_ai -__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_crypto_vpmsumb(__a, __b); -} - -static vector unsigned short __ATTRS_o_ai -__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) { - return __builtin_altivec_crypto_vpmsumh(__a, __b); -} - -static vector unsigned int __ATTRS_o_ai -__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) { - return __builtin_altivec_crypto_vpmsumw(__a, __b); -} - -static vector unsigned long long __ATTRS_o_ai __builtin_crypto_vpmsumb( - vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_altivec_crypto_vpmsumd(__a, __b); -} - -static vector signed char __ATTRS_o_ai vec_vgbbd (vector signed char __a) -{ - return __builtin_altivec_vgbbd((vector unsigned char) __a); -} - -static vector unsigned char __ATTRS_o_ai vec_vgbbd (vector unsigned char __a) -{ - return __builtin_altivec_vgbbd(__a); -} - -static vector long long __ATTRS_o_ai -vec_vbpermq (vector signed char __a, vector signed char __b) -{ - return __builtin_altivec_vbpermq((vector unsigned char) __a, - (vector unsigned char) __b); -} - -static vector long long __ATTRS_o_ai -vec_vbpermq (vector unsigned char __a, vector unsigned char __b) -{ - return __builtin_altivec_vbpermq(__a, __b); -} -#endif - -#undef __ATTRS_o_ai - -#endif /* __ALTIVEC_H */ diff --git a/External/CastXML/share/castxml/clang/include/ammintrin.h b/External/CastXML/share/castxml/clang/include/ammintrin.h deleted file mode 100644 index 91c633305..000000000 --- a/External/CastXML/share/castxml/clang/include/ammintrin.h +++ /dev/null @@ -1,209 +0,0 @@ -/*===---- ammintrin.h - SSE4a intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __AMMINTRIN_H -#define __AMMINTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4a"))) - -/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit -/// integer vector operand at the index idx and of the length len. -/// -/// \headerfile -/// -/// \code -/// __m128i _mm_extracti_si64(__m128i x, const int len, const int idx); -/// \endcode -/// -/// \code -/// This intrinsic corresponds to the \c EXTRQ instruction. -/// \endcode -/// -/// \param x -/// The value from which bits are extracted. -/// \param len -/// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0] -/// are zero, the length is interpreted as 64. -/// \param idx -/// Bits [5:0] specify the index of the least significant bit; the other -/// bits are ignored. If the sum of the index and length is greater than -/// 64, the result is undefined. If the length and index are both zero, -/// bits [63:0] of parameter x are extracted. If the length is zero -/// but the index is non-zero, the result is undefined. -/// \returns A 128-bit integer vector whose lower 64 bits contain the bits -/// extracted from the source operand. -#define _mm_extracti_si64(x, len, idx) \ - ((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \ - (char)(len), (char)(idx))) - -/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit -/// integer vector operand at the index and of the length specified by __y. -/// -/// \headerfile -/// -/// \code -/// This intrinsic corresponds to the \c EXTRQ instruction. -/// \endcode -/// -/// \param __x -/// The value from which bits are extracted. -/// \param __y -/// Specifies the index of the least significant bit at [13:8] -/// and the length at [5:0]; all other bits are ignored. -/// If bits [5:0] are zero, the length is interpreted as 64. -/// If the sum of the index and length is greater than 64, the result is -/// undefined. If the length and index are both zero, bits [63:0] of -/// parameter __x are extracted. If the length is zero but the index is -/// non-zero, the result is undefined. -/// \returns A 128-bit vector whose lower 64 bits contain the bits extracted -/// from the source operand. -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_extract_si64(__m128i __x, __m128i __y) -{ - return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y); -} - -/// \brief Inserts bits of a specified length from the source integer vector -/// y into the lower 64 bits of the destination integer vector x at the -/// index idx and of the length len. -/// -/// \headerfile -/// -/// \code -/// __m128i _mm_inserti_si64(__m128i x, __m128i y, const int len, -/// const int idx); -/// \endcode -/// -/// \code -/// This intrinsic corresponds to the \c INSERTQ instruction. -/// \endcode -/// -/// \param x -/// The destination operand where bits will be inserted. The inserted bits -/// are defined by the length len and by the index idx specifying the least -/// significant bit. -/// \param y -/// The source operand containing the bits to be extracted. The extracted -/// bits are the least significant bits of operand y of length len. -/// \param len -/// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0] -/// are zero, the length is interpreted as 64. -/// \param idx -/// Bits [5:0] specify the index of the least significant bit; the other -/// bits are ignored. If the sum of the index and length is greater than -/// 64, the result is undefined. If the length and index are both zero, -/// bits [63:0] of parameter y are inserted into parameter x. If the -/// length is zero but the index is non-zero, the result is undefined. -/// \returns A 128-bit integer vector containing the original lower 64-bits -/// of destination operand x with the specified bitfields replaced by the -/// lower bits of source operand y. The upper 64 bits of the return value -/// are undefined. - -#define _mm_inserti_si64(x, y, len, idx) \ - ((__m128i)__builtin_ia32_insertqi((__v2di)(__m128i)(x), \ - (__v2di)(__m128i)(y), \ - (char)(len), (char)(idx))) - -/// \brief Inserts bits of a specified length from the source integer vector -/// __y into the lower 64 bits of the destination integer vector __x at -/// the index and of the length specified by __y. -/// -/// \headerfile -/// -/// \code -/// This intrinsic corresponds to the \c INSERTQ instruction. -/// \endcode -/// -/// \param __x -/// The destination operand where bits will be inserted. The inserted bits -/// are defined by the length and by the index of the least significant bit -/// specified by operand __y. -/// \param __y -/// The source operand containing the bits to be extracted. The extracted -/// bits are the least significant bits of operand __y with length specified -/// by bits [69:64]. These are inserted into the destination at the index -/// specified by bits [77:72]; all other bits are ignored. -/// If bits [69:64] are zero, the length is interpreted as 64. -/// If the sum of the index and length is greater than 64, the result is -/// undefined. If the length and index are both zero, bits [63:0] of -/// parameter __y are inserted into parameter __x. If the length -/// is zero but the index is non-zero, the result is undefined. -/// \returns A 128-bit integer vector containing the original lower 64-bits -/// of destination operand __x with the specified bitfields replaced by the -/// lower bits of source operand __y. The upper 64 bits of the return value -/// are undefined. - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_insert_si64(__m128i __x, __m128i __y) -{ - return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y); -} - -/// \brief Stores a 64-bit double-precision value in a 64-bit memory location. -/// To minimize caching, the data is flagged as non-temporal (unlikely to be -/// used again soon). -/// -/// \headerfile -/// -/// \code -/// This intrinsic corresponds to the \c MOVNTSD instruction. -/// \endcode -/// -/// \param __p -/// The 64-bit memory location used to store the register value. -/// \param __a -/// The 64-bit double-precision floating-point register value to -/// be stored. -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_sd(double *__p, __m128d __a) -{ - __builtin_ia32_movntsd(__p, (__v2df)__a); -} - -/// \brief Stores a 32-bit single-precision floating-point value in a 32-bit -/// memory location. To minimize caching, the data is flagged as -/// non-temporal (unlikely to be used again soon). -/// -/// \headerfile -/// -/// \code -/// This intrinsic corresponds to the \c MOVNTSS instruction. -/// \endcode -/// -/// \param __p -/// The 32-bit memory location used to store the register value. -/// \param __a -/// The 32-bit single-precision floating-point register value to -/// be stored. -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_ss(float *__p, __m128 __a) -{ - __builtin_ia32_movntss(__p, (__v4sf)__a); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __AMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/arm_acle.h b/External/CastXML/share/castxml/clang/include/arm_acle.h deleted file mode 100644 index 73a7e76ce..000000000 --- a/External/CastXML/share/castxml/clang/include/arm_acle.h +++ /dev/null @@ -1,304 +0,0 @@ -/*===---- arm_acle.h - ARM Non-Neon intrinsics -----------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __ARM_ACLE_H -#define __ARM_ACLE_H - -#ifndef __ARM_ACLE -#error "ACLE intrinsics support not enabled." -#endif - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */ -/* 8.3 Memory barriers */ -#if !defined(_MSC_VER) -#define __dmb(i) __builtin_arm_dmb(i) -#define __dsb(i) __builtin_arm_dsb(i) -#define __isb(i) __builtin_arm_isb(i) -#endif - -/* 8.4 Hints */ - -#if !defined(_MSC_VER) -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfi(void) { - __builtin_arm_wfi(); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfe(void) { - __builtin_arm_wfe(); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sev(void) { - __builtin_arm_sev(); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sevl(void) { - __builtin_arm_sevl(); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __yield(void) { - __builtin_arm_yield(); -} -#endif - -#if __ARM_32BIT_STATE -#define __dbg(t) __builtin_arm_dbg(t) -#endif - -/* 8.5 Swap */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __swp(uint32_t x, volatile uint32_t *p) { - uint32_t v; - do v = __builtin_arm_ldrex(p); while (__builtin_arm_strex(x, p)); - return v; -} - -/* 8.6 Memory prefetch intrinsics */ -/* 8.6.1 Data prefetch */ -#define __pld(addr) __pldx(0, 0, 0, addr) - -#if __ARM_32BIT_STATE -#define __pldx(access_kind, cache_level, retention_policy, addr) \ - __builtin_arm_prefetch(addr, access_kind, 1) -#else -#define __pldx(access_kind, cache_level, retention_policy, addr) \ - __builtin_arm_prefetch(addr, access_kind, cache_level, retention_policy, 1) -#endif - -/* 8.6.2 Instruction prefetch */ -#define __pli(addr) __plix(0, 0, addr) - -#if __ARM_32BIT_STATE -#define __plix(cache_level, retention_policy, addr) \ - __builtin_arm_prefetch(addr, 0, 0) -#else -#define __plix(cache_level, retention_policy, addr) \ - __builtin_arm_prefetch(addr, 0, cache_level, retention_policy, 0) -#endif - -/* 8.7 NOP */ -static __inline__ void __attribute__((__always_inline__, __nodebug__)) __nop(void) { - __builtin_arm_nop(); -} - -/* 9 DATA-PROCESSING INTRINSICS */ -/* 9.2 Miscellaneous data-processing intrinsics */ -/* ROR */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __ror(uint32_t x, uint32_t y) { - y %= 32; - if (y == 0) return x; - return (x >> y) | (x << (32 - y)); -} - -static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__)) - __rorll(uint64_t x, uint32_t y) { - y %= 64; - if (y == 0) return x; - return (x >> y) | (x << (64 - y)); -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) - __rorl(unsigned long x, uint32_t y) { -#if __SIZEOF_LONG__ == 4 - return __ror(x, y); -#else - return __rorll(x, y); -#endif -} - - -/* CLZ */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __clz(uint32_t t) { - return __builtin_clz(t); -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) - __clzl(unsigned long t) { - return __builtin_clzl(t); -} - -static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__)) - __clzll(uint64_t t) { - return __builtin_clzll(t); -} - -/* REV */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __rev(uint32_t t) { - return __builtin_bswap32(t); -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) - __revl(unsigned long t) { -#if __SIZEOF_LONG__ == 4 - return __builtin_bswap32(t); -#else - return __builtin_bswap64(t); -#endif -} - -static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__)) - __revll(uint64_t t) { - return __builtin_bswap64(t); -} - -/* REV16 */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __rev16(uint32_t t) { - return __ror(__rev(t), 16); -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) - __rev16l(unsigned long t) { - return __rorl(__revl(t), sizeof(long) / 2); -} - -static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__)) - __rev16ll(uint64_t t) { - return __rorll(__revll(t), 32); -} - -/* REVSH */ -static __inline__ int16_t __attribute__((__always_inline__, __nodebug__)) - __revsh(int16_t t) { - return __builtin_bswap16(t); -} - -/* RBIT */ -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __rbit(uint32_t t) { - return __builtin_arm_rbit(t); -} - -static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__)) - __rbitll(uint64_t t) { -#if __ARM_32BIT_STATE - return (((uint64_t) __builtin_arm_rbit(t)) << 32) | - __builtin_arm_rbit(t >> 32); -#else - return __builtin_arm_rbit64(t); -#endif -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) - __rbitl(unsigned long t) { -#if __SIZEOF_LONG__ == 4 - return __rbit(t); -#else - return __rbitll(t); -#endif -} - -/* - * 9.4 Saturating intrinsics - * - * FIXME: Change guard to their corrosponding __ARM_FEATURE flag when Q flag - * intrinsics are implemented and the flag is enabled. - */ -/* 9.4.1 Width-specified saturation intrinsics */ -#if __ARM_32BIT_STATE -#define __ssat(x, y) __builtin_arm_ssat(x, y) -#define __usat(x, y) __builtin_arm_usat(x, y) -#endif - -/* 9.4.2 Saturating addition and subtraction intrinsics */ -#if __ARM_32BIT_STATE -static __inline__ int32_t __attribute__((__always_inline__, __nodebug__)) - __qadd(int32_t t, int32_t v) { - return __builtin_arm_qadd(t, v); -} - -static __inline__ int32_t __attribute__((__always_inline__, __nodebug__)) - __qsub(int32_t t, int32_t v) { - return __builtin_arm_qsub(t, v); -} - -static __inline__ int32_t __attribute__((__always_inline__, __nodebug__)) -__qdbl(int32_t t) { - return __builtin_arm_qadd(t, t); -} -#endif - -/* 9.7 CRC32 intrinsics */ -#if __ARM_FEATURE_CRC32 -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32b(uint32_t a, uint8_t b) { - return __builtin_arm_crc32b(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32h(uint32_t a, uint16_t b) { - return __builtin_arm_crc32h(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32w(uint32_t a, uint32_t b) { - return __builtin_arm_crc32w(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32d(uint32_t a, uint64_t b) { - return __builtin_arm_crc32d(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32cb(uint32_t a, uint8_t b) { - return __builtin_arm_crc32cb(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32ch(uint32_t a, uint16_t b) { - return __builtin_arm_crc32ch(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32cw(uint32_t a, uint32_t b) { - return __builtin_arm_crc32cw(a, b); -} - -static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__)) - __crc32cd(uint32_t a, uint64_t b) { - return __builtin_arm_crc32cd(a, b); -} -#endif - -/* 10.1 Special register intrinsics */ -#define __arm_rsr(sysreg) __builtin_arm_rsr(sysreg) -#define __arm_rsr64(sysreg) __builtin_arm_rsr64(sysreg) -#define __arm_rsrp(sysreg) __builtin_arm_rsrp(sysreg) -#define __arm_wsr(sysreg, v) __builtin_arm_wsr(sysreg, v) -#define __arm_wsr64(sysreg, v) __builtin_arm_wsr64(sysreg, v) -#define __arm_wsrp(sysreg, v) __builtin_arm_wsrp(sysreg, v) - -#if defined(__cplusplus) -} -#endif - -#endif /* __ARM_ACLE_H */ diff --git a/External/CastXML/share/castxml/clang/include/arm_neon.h b/External/CastXML/share/castxml/clang/include/arm_neon.h deleted file mode 100644 index a6d0b7332..000000000 --- a/External/CastXML/share/castxml/clang/include/arm_neon.h +++ /dev/null @@ -1,68419 +0,0 @@ -/*===---- arm_neon.h - ARM Neon intrinsics ---------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __ARM_NEON_H -#define __ARM_NEON_H - -#if !defined(__ARM_NEON) -#error "NEON support not enabled" -#endif - -#include - -typedef float float32_t; -typedef __fp16 float16_t; -#ifdef __aarch64__ -typedef double float64_t; -#endif - -#ifdef __aarch64__ -typedef uint8_t poly8_t; -typedef uint16_t poly16_t; -typedef uint64_t poly64_t; -typedef __uint128_t poly128_t; -#else -typedef int8_t poly8_t; -typedef int16_t poly16_t; -#endif -typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t; -typedef __attribute__((neon_vector_type(16))) int8_t int8x16_t; -typedef __attribute__((neon_vector_type(4))) int16_t int16x4_t; -typedef __attribute__((neon_vector_type(8))) int16_t int16x8_t; -typedef __attribute__((neon_vector_type(2))) int32_t int32x2_t; -typedef __attribute__((neon_vector_type(4))) int32_t int32x4_t; -typedef __attribute__((neon_vector_type(1))) int64_t int64x1_t; -typedef __attribute__((neon_vector_type(2))) int64_t int64x2_t; -typedef __attribute__((neon_vector_type(8))) uint8_t uint8x8_t; -typedef __attribute__((neon_vector_type(16))) uint8_t uint8x16_t; -typedef __attribute__((neon_vector_type(4))) uint16_t uint16x4_t; -typedef __attribute__((neon_vector_type(8))) uint16_t uint16x8_t; -typedef __attribute__((neon_vector_type(2))) uint32_t uint32x2_t; -typedef __attribute__((neon_vector_type(4))) uint32_t uint32x4_t; -typedef __attribute__((neon_vector_type(1))) uint64_t uint64x1_t; -typedef __attribute__((neon_vector_type(2))) uint64_t uint64x2_t; -typedef __attribute__((neon_vector_type(4))) float16_t float16x4_t; -typedef __attribute__((neon_vector_type(8))) float16_t float16x8_t; -typedef __attribute__((neon_vector_type(2))) float32_t float32x2_t; -typedef __attribute__((neon_vector_type(4))) float32_t float32x4_t; -#ifdef __aarch64__ -typedef __attribute__((neon_vector_type(1))) float64_t float64x1_t; -typedef __attribute__((neon_vector_type(2))) float64_t float64x2_t; -#endif -typedef __attribute__((neon_polyvector_type(8))) poly8_t poly8x8_t; -typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t; -typedef __attribute__((neon_polyvector_type(4))) poly16_t poly16x4_t; -typedef __attribute__((neon_polyvector_type(8))) poly16_t poly16x8_t; -#ifdef __aarch64__ -typedef __attribute__((neon_polyvector_type(1))) poly64_t poly64x1_t; -typedef __attribute__((neon_polyvector_type(2))) poly64_t poly64x2_t; -#endif - -typedef struct int8x8x2_t { - int8x8_t val[2]; -} int8x8x2_t; - -typedef struct int8x16x2_t { - int8x16_t val[2]; -} int8x16x2_t; - -typedef struct int16x4x2_t { - int16x4_t val[2]; -} int16x4x2_t; - -typedef struct int16x8x2_t { - int16x8_t val[2]; -} int16x8x2_t; - -typedef struct int32x2x2_t { - int32x2_t val[2]; -} int32x2x2_t; - -typedef struct int32x4x2_t { - int32x4_t val[2]; -} int32x4x2_t; - -typedef struct int64x1x2_t { - int64x1_t val[2]; -} int64x1x2_t; - -typedef struct int64x2x2_t { - int64x2_t val[2]; -} int64x2x2_t; - -typedef struct uint8x8x2_t { - uint8x8_t val[2]; -} uint8x8x2_t; - -typedef struct uint8x16x2_t { - uint8x16_t val[2]; -} uint8x16x2_t; - -typedef struct uint16x4x2_t { - uint16x4_t val[2]; -} uint16x4x2_t; - -typedef struct uint16x8x2_t { - uint16x8_t val[2]; -} uint16x8x2_t; - -typedef struct uint32x2x2_t { - uint32x2_t val[2]; -} uint32x2x2_t; - -typedef struct uint32x4x2_t { - uint32x4_t val[2]; -} uint32x4x2_t; - -typedef struct uint64x1x2_t { - uint64x1_t val[2]; -} uint64x1x2_t; - -typedef struct uint64x2x2_t { - uint64x2_t val[2]; -} uint64x2x2_t; - -typedef struct float16x4x2_t { - float16x4_t val[2]; -} float16x4x2_t; - -typedef struct float16x8x2_t { - float16x8_t val[2]; -} float16x8x2_t; - -typedef struct float32x2x2_t { - float32x2_t val[2]; -} float32x2x2_t; - -typedef struct float32x4x2_t { - float32x4_t val[2]; -} float32x4x2_t; - -#ifdef __aarch64__ -typedef struct float64x1x2_t { - float64x1_t val[2]; -} float64x1x2_t; - -typedef struct float64x2x2_t { - float64x2_t val[2]; -} float64x2x2_t; - -#endif -typedef struct poly8x8x2_t { - poly8x8_t val[2]; -} poly8x8x2_t; - -typedef struct poly8x16x2_t { - poly8x16_t val[2]; -} poly8x16x2_t; - -typedef struct poly16x4x2_t { - poly16x4_t val[2]; -} poly16x4x2_t; - -typedef struct poly16x8x2_t { - poly16x8_t val[2]; -} poly16x8x2_t; - -#ifdef __aarch64__ -typedef struct poly64x1x2_t { - poly64x1_t val[2]; -} poly64x1x2_t; - -typedef struct poly64x2x2_t { - poly64x2_t val[2]; -} poly64x2x2_t; - -#endif -typedef struct int8x8x3_t { - int8x8_t val[3]; -} int8x8x3_t; - -typedef struct int8x16x3_t { - int8x16_t val[3]; -} int8x16x3_t; - -typedef struct int16x4x3_t { - int16x4_t val[3]; -} int16x4x3_t; - -typedef struct int16x8x3_t { - int16x8_t val[3]; -} int16x8x3_t; - -typedef struct int32x2x3_t { - int32x2_t val[3]; -} int32x2x3_t; - -typedef struct int32x4x3_t { - int32x4_t val[3]; -} int32x4x3_t; - -typedef struct int64x1x3_t { - int64x1_t val[3]; -} int64x1x3_t; - -typedef struct int64x2x3_t { - int64x2_t val[3]; -} int64x2x3_t; - -typedef struct uint8x8x3_t { - uint8x8_t val[3]; -} uint8x8x3_t; - -typedef struct uint8x16x3_t { - uint8x16_t val[3]; -} uint8x16x3_t; - -typedef struct uint16x4x3_t { - uint16x4_t val[3]; -} uint16x4x3_t; - -typedef struct uint16x8x3_t { - uint16x8_t val[3]; -} uint16x8x3_t; - -typedef struct uint32x2x3_t { - uint32x2_t val[3]; -} uint32x2x3_t; - -typedef struct uint32x4x3_t { - uint32x4_t val[3]; -} uint32x4x3_t; - -typedef struct uint64x1x3_t { - uint64x1_t val[3]; -} uint64x1x3_t; - -typedef struct uint64x2x3_t { - uint64x2_t val[3]; -} uint64x2x3_t; - -typedef struct float16x4x3_t { - float16x4_t val[3]; -} float16x4x3_t; - -typedef struct float16x8x3_t { - float16x8_t val[3]; -} float16x8x3_t; - -typedef struct float32x2x3_t { - float32x2_t val[3]; -} float32x2x3_t; - -typedef struct float32x4x3_t { - float32x4_t val[3]; -} float32x4x3_t; - -#ifdef __aarch64__ -typedef struct float64x1x3_t { - float64x1_t val[3]; -} float64x1x3_t; - -typedef struct float64x2x3_t { - float64x2_t val[3]; -} float64x2x3_t; - -#endif -typedef struct poly8x8x3_t { - poly8x8_t val[3]; -} poly8x8x3_t; - -typedef struct poly8x16x3_t { - poly8x16_t val[3]; -} poly8x16x3_t; - -typedef struct poly16x4x3_t { - poly16x4_t val[3]; -} poly16x4x3_t; - -typedef struct poly16x8x3_t { - poly16x8_t val[3]; -} poly16x8x3_t; - -#ifdef __aarch64__ -typedef struct poly64x1x3_t { - poly64x1_t val[3]; -} poly64x1x3_t; - -typedef struct poly64x2x3_t { - poly64x2_t val[3]; -} poly64x2x3_t; - -#endif -typedef struct int8x8x4_t { - int8x8_t val[4]; -} int8x8x4_t; - -typedef struct int8x16x4_t { - int8x16_t val[4]; -} int8x16x4_t; - -typedef struct int16x4x4_t { - int16x4_t val[4]; -} int16x4x4_t; - -typedef struct int16x8x4_t { - int16x8_t val[4]; -} int16x8x4_t; - -typedef struct int32x2x4_t { - int32x2_t val[4]; -} int32x2x4_t; - -typedef struct int32x4x4_t { - int32x4_t val[4]; -} int32x4x4_t; - -typedef struct int64x1x4_t { - int64x1_t val[4]; -} int64x1x4_t; - -typedef struct int64x2x4_t { - int64x2_t val[4]; -} int64x2x4_t; - -typedef struct uint8x8x4_t { - uint8x8_t val[4]; -} uint8x8x4_t; - -typedef struct uint8x16x4_t { - uint8x16_t val[4]; -} uint8x16x4_t; - -typedef struct uint16x4x4_t { - uint16x4_t val[4]; -} uint16x4x4_t; - -typedef struct uint16x8x4_t { - uint16x8_t val[4]; -} uint16x8x4_t; - -typedef struct uint32x2x4_t { - uint32x2_t val[4]; -} uint32x2x4_t; - -typedef struct uint32x4x4_t { - uint32x4_t val[4]; -} uint32x4x4_t; - -typedef struct uint64x1x4_t { - uint64x1_t val[4]; -} uint64x1x4_t; - -typedef struct uint64x2x4_t { - uint64x2_t val[4]; -} uint64x2x4_t; - -typedef struct float16x4x4_t { - float16x4_t val[4]; -} float16x4x4_t; - -typedef struct float16x8x4_t { - float16x8_t val[4]; -} float16x8x4_t; - -typedef struct float32x2x4_t { - float32x2_t val[4]; -} float32x2x4_t; - -typedef struct float32x4x4_t { - float32x4_t val[4]; -} float32x4x4_t; - -#ifdef __aarch64__ -typedef struct float64x1x4_t { - float64x1_t val[4]; -} float64x1x4_t; - -typedef struct float64x2x4_t { - float64x2_t val[4]; -} float64x2x4_t; - -#endif -typedef struct poly8x8x4_t { - poly8x8_t val[4]; -} poly8x8x4_t; - -typedef struct poly8x16x4_t { - poly8x16_t val[4]; -} poly8x16x4_t; - -typedef struct poly16x4x4_t { - poly16x4_t val[4]; -} poly16x4x4_t; - -typedef struct poly16x8x4_t { - poly16x8_t val[4]; -} poly16x8x4_t; - -#ifdef __aarch64__ -typedef struct poly64x1x4_t { - poly64x1_t val[4]; -} poly64x1x4_t; - -typedef struct poly64x2x4_t { - poly64x2_t val[4]; -} poly64x2x4_t; - -#endif - -#define __ai static inline __attribute__((__always_inline__, __nodebug__)) - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vabdq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vabdq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x16_t __noswap_vabdq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabdq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vabdq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vabdq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabdq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vabdq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vabdq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vabdq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vabdq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x16_t __noswap_vabdq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vabdq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vabdq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabdq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vabdq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vabdq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabdq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vabdq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vabdq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vabd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vabd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vabd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vabd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vabd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vabd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vabd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vabd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vabd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vabd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vabd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vabd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vabd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vabd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vabd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vabd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vabd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vabd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vabd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vabd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vabd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vabsq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vabsq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vabsq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vabsq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabsq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vabsq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabsq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vabsq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vabs_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vabs_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vabs_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vabs_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vabs_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vabs_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vabs_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vabs_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vabs_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vabs_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vabs_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vabs_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vabs_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vabs_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vabs_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vabs_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint8x16_t vaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint32x4_t vaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint64x2_t vaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint16x8_t vaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int8x16_t vaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vaddq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai float32x4_t vaddq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int32x4_t vaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int64x2_t vaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int16x8_t vaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint8x8_t vadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint32x2_t vadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint64x1_t vadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai uint16x4_t vadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int8x8_t vadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vadd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai float32x2_t vadd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int32x2_t vadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int64x1_t vadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai int16x4_t vadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vaddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vaddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vaddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vaddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vaddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vaddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vaddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vaddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vaddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vaddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vaddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vaddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vaddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vaddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vaddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vaddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vaddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vaddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vaddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vandq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint8x16_t vandq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vandq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint32x4_t vandq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vandq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint64x2_t vandq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vandq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint16x8_t vandq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vandq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int8x16_t vandq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vandq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int32x4_t vandq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vandq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int64x2_t vandq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vandq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int16x8_t vandq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vand_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint8x8_t vand_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vand_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint32x2_t vand_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vand_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint64x1_t vand_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vand_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai uint16x4_t vand_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vand_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int8x8_t vand_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vand_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int32x2_t vand_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vand_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int64x1_t vand_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vand_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 & __p1; - return __ret; -} -#else -__ai int16x4_t vand_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 & __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vbicq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint8x16_t vbicq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vbicq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint32x4_t vbicq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vbicq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint64x2_t vbicq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vbicq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint16x8_t vbicq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vbicq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int8x16_t vbicq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vbicq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int32x4_t vbicq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vbicq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int64x2_t vbicq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vbicq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int16x8_t vbicq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vbic_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint8x8_t vbic_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vbic_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint32x2_t vbic_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vbic_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint64x1_t vbic_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vbic_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai uint16x4_t vbic_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vbic_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int8x8_t vbic_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vbic_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int32x2_t vbic_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vbic_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int64x1_t vbic_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vbic_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 & ~__p1; - return __ret; -} -#else -__ai int16x4_t vbic_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 & ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vbsl_p8(uint8x8_t __p0, poly8x8_t __p1, poly8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vbsl_p8(uint8x8_t __p0, poly8x8_t __p1, poly8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vbsl_p16(uint16x4_t __p0, poly16x4_t __p1, poly16x4_t __p2) { - poly16x4_t __ret; - __ret = (poly16x4_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 5); - return __ret; -} -#else -__ai poly16x4_t vbsl_p16(uint16x4_t __p0, poly16x4_t __p1, poly16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = (poly16x4_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vbslq_p8(uint8x16_t __p0, poly8x16_t __p1, poly8x16_t __p2) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 36); - return __ret; -} -#else -__ai poly8x16_t vbslq_p8(uint8x16_t __p0, poly8x16_t __p1, poly8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vbslq_p16(uint16x8_t __p0, poly16x8_t __p1, poly16x8_t __p2) { - poly16x8_t __ret; - __ret = (poly16x8_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 37); - return __ret; -} -#else -__ai poly16x8_t vbslq_p16(uint16x8_t __p0, poly16x8_t __p1, poly16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = (poly16x8_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 37); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vbslq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 48); - return __ret; -} -#else -__ai uint8x16_t vbslq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vbslq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 50); - return __ret; -} -#else -__ai uint32x4_t vbslq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vbslq_u64(uint64x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 51); - return __ret; -} -#else -__ai uint64x2_t vbslq_u64(uint64x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vbslq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 49); - return __ret; -} -#else -__ai uint16x8_t vbslq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vbslq_s8(uint8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 32); - return __ret; -} -#else -__ai int8x16_t vbslq_s8(uint8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vbslq_f32(uint32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41); - return __ret; -} -#else -__ai float32x4_t vbslq_f32(uint32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vbslq_s32(uint32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 34); - return __ret; -} -#else -__ai int32x4_t vbslq_s32(uint32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vbslq_s64(uint64x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 35); - return __ret; -} -#else -__ai int64x2_t vbslq_s64(uint64x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vbslq_s16(uint16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 33); - return __ret; -} -#else -__ai int16x8_t vbslq_s16(uint16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vbsl_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vbsl_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vbsl_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 18); - return __ret; -} -#else -__ai uint32x2_t vbsl_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vbsl_u64(uint64x1_t __p0, uint64x1_t __p1, uint64x1_t __p2) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 19); - return __ret; -} -#else -__ai uint64x1_t vbsl_u64(uint64x1_t __p0, uint64x1_t __p1, uint64x1_t __p2) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vbsl_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 17); - return __ret; -} -#else -__ai uint16x4_t vbsl_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vbsl_s8(uint8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vbsl_s8(uint8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vbsl_f32(uint32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 9); - return __ret; -} -#else -__ai float32x2_t vbsl_f32(uint32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vbsl_s32(uint32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 2); - return __ret; -} -#else -__ai int32x2_t vbsl_s32(uint32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vbsl_s64(uint64x1_t __p0, int64x1_t __p1, int64x1_t __p2) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 3); - return __ret; -} -#else -__ai int64x1_t vbsl_s64(uint64x1_t __p0, int64x1_t __p1, int64x1_t __p2) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vbsl_s16(uint16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 1); - return __ret; -} -#else -__ai int16x4_t vbsl_s16(uint16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vbsl_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcageq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcageq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vcageq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcageq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcage_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcage_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vcage_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcage_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcagtq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcagtq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vcagtq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcagtq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcagt_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcagt_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vcagt_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcagt_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcaleq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcaleq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vcaleq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcaleq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcale_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcale_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vcale_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcale_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcaltq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcaltq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vcaltq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcaltq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcalt_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcalt_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vcalt_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcalt_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceq_p8(poly8x8_t __p0, poly8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x8_t vceq_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqq_p8(poly8x16_t __p0, poly8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x16_t vceqq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x16_t vceqq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x4_t vceqq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vceqq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint16x8_t vceqq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x16_t vceqq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x4_t vceqq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x4_t vceqq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vceqq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint16x8_t vceqq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceq_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x8_t vceq_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceq_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x2_t vceq_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vceq_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint16x4_t vceq_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceq_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint8x8_t vceq_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceq_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x2_t vceq_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceq_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint32x2_t vceq_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vceq_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint16x4_t vceq_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgeq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint8x16_t vcgeq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgeq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x4_t vcgeq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgeq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint16x8_t vcgeq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgeq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint8x16_t vcgeq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgeq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x4_t vcgeq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgeq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x4_t vcgeq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgeq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint16x8_t vcgeq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcge_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint8x8_t vcge_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcge_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x2_t vcge_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcge_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint16x4_t vcge_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcge_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint8x8_t vcge_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcge_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x2_t vcge_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcge_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint32x2_t vcge_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcge_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint16x4_t vcge_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgtq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint8x16_t vcgtq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgtq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x4_t vcgtq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgtq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint16x8_t vcgtq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgtq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint8x16_t vcgtq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgtq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x4_t vcgtq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgtq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x4_t vcgtq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgtq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint16x8_t vcgtq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcgt_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint8x8_t vcgt_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgt_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x2_t vcgt_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcgt_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint16x4_t vcgt_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcgt_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint8x8_t vcgt_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgt_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x2_t vcgt_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgt_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint32x2_t vcgt_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcgt_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint16x4_t vcgt_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcleq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint8x16_t vcleq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcleq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x4_t vcleq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcleq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint16x8_t vcleq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcleq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint8x16_t vcleq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcleq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x4_t vcleq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcleq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x4_t vcleq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcleq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint16x8_t vcleq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcle_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint8x8_t vcle_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcle_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x2_t vcle_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcle_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint16x4_t vcle_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcle_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint8x8_t vcle_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcle_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x2_t vcle_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcle_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint32x2_t vcle_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcle_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint16x4_t vcle_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vclsq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vclsq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vclsq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vclsq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vclsq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vclsq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vclsq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vclsq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vclsq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vclsq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vclsq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vclsq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vcls_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vcls_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vcls_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vcls_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcls_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcls_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcls_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcls_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vcls_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vcls_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vcls_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vcls_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcltq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint8x16_t vcltq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcltq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x4_t vcltq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcltq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint16x8_t vcltq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcltq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint8x16_t vcltq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcltq_f32(float32x4_t __p0, float32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x4_t vcltq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcltq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x4_t vcltq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcltq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint16x8_t vcltq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vclt_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint8x8_t vclt_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclt_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x2_t vclt_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vclt_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint16x4_t vclt_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vclt_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint8x8_t vclt_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclt_f32(float32x2_t __p0, float32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x2_t vclt_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclt_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint32x2_t vclt_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vclt_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint16x4_t vclt_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vclzq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vclzq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vclzq_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vclzq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vclzq_u16(uint16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vclzq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vclzq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vclzq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vclzq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vclzq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vclzq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vclzq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vclzq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vclzq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vclz_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vclz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vclz_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclz_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vclz_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vclz_u16(uint16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vclz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vclz_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vclz_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vclz_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vclz_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vclz_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vclz_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vclz_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vclz_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vclz_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vclz_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vclz_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vcnt_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vcnt_v((int8x8_t)__p0, 4); - return __ret; -} -#else -__ai poly8x8_t vcnt_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vcnt_v((int8x8_t)__rev0, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vcntq_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vcntq_v((int8x16_t)__p0, 36); - return __ret; -} -#else -__ai poly8x16_t vcntq_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vcntq_v((int8x16_t)__rev0, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcntq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcntq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vcntq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcntq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vcntq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vcntq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vcntq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vcntq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcnt_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcnt_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vcnt_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcnt_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vcnt_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vcnt_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vcnt_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vcnt_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vcombine_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai poly8x16_t vcombine_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vcombine_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai poly16x8_t vcombine_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcombine_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai uint8x16_t vcombine_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x16_t __noswap_vcombine_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcombine_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#else -__ai uint32x4_t vcombine_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vcombine_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcombine_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - return __ret; -} -#else -__ai uint64x2_t vcombine_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcombine_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai uint16x8_t vcombine_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vcombine_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vcombine_s8(int8x8_t __p0, int8x8_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai int8x16_t vcombine_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x16_t __noswap_vcombine_s8(int8x8_t __p0, int8x8_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcombine_f32(float32x2_t __p0, float32x2_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#else -__ai float32x4_t vcombine_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float32x4_t __noswap_vcombine_f32(float32x2_t __p0, float32x2_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vcombine_f16(float16x4_t __p0, float16x4_t __p1) { - float16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai float16x8_t vcombine_f16(float16x4_t __p0, float16x4_t __p1) { - float16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai float16x8_t __noswap_vcombine_f16(float16x4_t __p0, float16x4_t __p1) { - float16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcombine_s32(int32x2_t __p0, int32x2_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#else -__ai int32x4_t vcombine_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vcombine_s32(int32x2_t __p0, int32x2_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcombine_s64(int64x1_t __p0, int64x1_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - return __ret; -} -#else -__ai int64x2_t vcombine_s64(int64x1_t __p0, int64x1_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vcombine_s16(int16x4_t __p0, int16x4_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai int16x8_t vcombine_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vcombine_s16(int16x4_t __p0, int16x4_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vcreate_p8(uint64_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vcreate_p8(uint64_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vcreate_p16(uint64_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vcreate_p16(uint64_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcreate_u8(uint64_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vcreate_u8(uint64_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcreate_u32(uint64_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vcreate_u32(uint64_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcreate_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vcreate_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcreate_u16(uint64_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vcreate_u16(uint64_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vcreate_s8(uint64_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vcreate_s8(uint64_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vcreate_f32(uint64_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vcreate_f32(uint64_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vcreate_f16(uint64_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vcreate_f16(uint64_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcreate_s32(uint64_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vcreate_s32(uint64_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcreate_s64(uint64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vcreate_s64(uint64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vcreate_s16(uint64_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vcreate_s16(uint64_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vcvt_f16_f32(float32x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t) __builtin_neon_vcvt_f16_v((int8x16_t)__p0, 8); - return __ret; -} -#else -__ai float16x4_t vcvt_f16_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float16x4_t __ret; - __ret = (float16x4_t) __builtin_neon_vcvt_f16_v((int8x16_t)__rev0, 8); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float16x4_t __noswap_vcvt_f16_f32(float32x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t) __builtin_neon_vcvt_f16_v((int8x16_t)__p0, 8); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvtq_f32_u32(uint32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvtq_f32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai float32x4_t vcvtq_f32_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvtq_f32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvtq_f32_s32(int32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvtq_f32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai float32x4_t vcvtq_f32_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvtq_f32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vcvt_f32_u32(uint32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai float32x2_t vcvt_f32_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vcvt_f32_s32(int32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai float32x2_t vcvt_f32_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvt_f32_f16(float16x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvt_f32_f16((int8x8_t)__p0, 8); - return __ret; -} -#else -__ai float32x4_t vcvt_f32_f16(float16x4_t __p0) { - float16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvt_f32_f16((int8x8_t)__rev0, 8); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float32x4_t __noswap_vcvt_f32_f16(float16x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vcvt_f32_f16((int8x8_t)__p0, 8); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vcvtq_n_f32_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vcvtq_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vcvtq_n_f32_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vcvtq_n_f32_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vcvtq_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vcvtq_n_f32_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vcvt_n_f32_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vcvt_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vcvt_n_f32_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vcvt_n_f32_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vcvt_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vcvt_n_f32_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vcvtq_n_s32_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vcvtq_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vcvtq_n_s32_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vcvt_n_s32_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vcvt_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vcvt_n_s32_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vcvtq_n_u32_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vcvtq_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vcvtq_n_u32_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vcvt_n_u32_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vcvt_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vcvt_n_u32_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcvtq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtq_s32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vcvtq_s32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtq_s32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcvt_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvt_s32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcvt_s32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvt_s32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcvtq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtq_u32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcvtq_u32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtq_u32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcvt_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvt_u32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcvt_u32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvt_u32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vdup_n_p8(poly8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly8x8_t vdup_n_p8(poly8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vdup_n_p16(poly16_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly16x4_t vdup_n_p16(poly16_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vdupq_n_p8(poly8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly8x16_t vdupq_n_p8(poly8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vdupq_n_p16(poly16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly16x8_t vdupq_n_p16(poly16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vdupq_n_u8(uint8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint8x16_t vdupq_n_u8(uint8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vdupq_n_u32(uint32_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint32x4_t vdupq_n_u32(uint32_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vdupq_n_u64(uint64_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai uint64x2_t vdupq_n_u64(uint64_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vdupq_n_u16(uint16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint16x8_t vdupq_n_u16(uint16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vdupq_n_s8(int8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int8x16_t vdupq_n_s8(int8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vdupq_n_f32(float32_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai float32x4_t vdupq_n_f32(float32_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = (float16x8_t) {__s0, __s0, __s0, __s0, __s0, __s0, __s0, __s0}; \ - __ret; \ -}) -#else -#define vdupq_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = (float16x8_t) {__s0, __s0, __s0, __s0, __s0, __s0, __s0, __s0}; \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vdupq_n_s32(int32_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int32x4_t vdupq_n_s32(int32_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vdupq_n_s64(int64_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai int64x2_t vdupq_n_s64(int64_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vdupq_n_s16(int16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int16x8_t vdupq_n_s16(int16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vdup_n_u8(uint8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint8x8_t vdup_n_u8(uint8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vdup_n_u32(uint32_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai uint32x2_t vdup_n_u32(uint32_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vdup_n_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) {__p0}; - return __ret; -} -#else -__ai uint64x1_t vdup_n_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vdup_n_u16(uint16_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint16x4_t vdup_n_u16(uint16_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vdup_n_s8(int8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int8x8_t vdup_n_s8(int8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vdup_n_f32(float32_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai float32x2_t vdup_n_f32(float32_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = (float16x4_t) {__s0, __s0, __s0, __s0}; \ - __ret; \ -}) -#else -#define vdup_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = (float16x4_t) {__s0, __s0, __s0, __s0}; \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vdup_n_s32(int32_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai int32x2_t vdup_n_s32(int32_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vdup_n_s64(int64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) {__p0}; - return __ret; -} -#else -__ai int64x1_t vdup_n_s64(int64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vdup_n_s16(int16_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int16x4_t vdup_n_s16(int16_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t veorq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint8x16_t veorq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t veorq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint32x4_t veorq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t veorq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint64x2_t veorq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t veorq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint16x8_t veorq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t veorq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int8x16_t veorq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t veorq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int32x4_t veorq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t veorq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int64x2_t veorq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t veorq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int16x8_t veorq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t veor_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint8x8_t veor_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t veor_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint32x2_t veor_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t veor_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint64x1_t veor_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t veor_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai uint16x4_t veor_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t veor_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int8x8_t veor_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t veor_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int32x2_t veor_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t veor_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int64x1_t veor_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t veor_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 ^ __p1; - return __ret; -} -#else -__ai int16x4_t veor_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 ^ __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 4); \ - __ret; \ -}) -#else -#define vext_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 5); \ - __ret; \ -}) -#else -#define vext_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 36); \ - __ret; \ -}) -#else -#define vextq_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 37); \ - __ret; \ -}) -#else -#define vextq_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vextq_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vextq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vextq_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vextq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vextq_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \ - __ret; \ -}) -#else -#define vextq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vextq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vextq_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vextq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vext_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vext_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vext_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vext_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vext_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 9); \ - __ret; \ -}) -#else -#define vext_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vext_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vext_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vext_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vext_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vfmaq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmaq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41); - return __ret; -} -#else -__ai float32x4_t vfmaq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmaq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float32x4_t __noswap_vfmaq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmaq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vfma_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfma_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 9); - return __ret; -} -#else -__ai float32x2_t vfma_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfma_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vfma_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfma_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 9); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vget_high_p8(poly8x16_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai poly8x8_t vget_high_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai poly8x8_t __noswap_vget_high_p8(poly8x16_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vget_high_p16(poly16x8_t __p0) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#else -__ai poly16x4_t vget_high_p16(poly16x8_t __p0) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vget_high_u8(uint8x16_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai uint8x8_t vget_high_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vget_high_u8(uint8x16_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vget_high_u32(uint32x4_t __p0) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#else -__ai uint32x2_t vget_high_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vget_high_u32(uint32x4_t __p0) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vget_high_u64(uint64x2_t __p0) { - uint64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1); - return __ret; -} -#else -__ai uint64x1_t vget_high_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vget_high_u16(uint16x8_t __p0) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#else -__ai uint16x4_t vget_high_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vget_high_u16(uint16x8_t __p0) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vget_high_s8(int8x16_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#else -__ai int8x8_t vget_high_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 8, 9, 10, 11, 12, 13, 14, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vget_high_s8(int8x16_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 8, 9, 10, 11, 12, 13, 14, 15); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vget_high_f32(float32x4_t __p0) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#else -__ai float32x2_t vget_high_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vget_high_f32(float32x4_t __p0) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vget_high_f16(float16x8_t __p0) { - float16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#else -__ai float16x4_t vget_high_f16(float16x8_t __p0) { - float16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - float16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float16x4_t __noswap_vget_high_f16(float16x8_t __p0) { - float16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vget_high_s32(int32x4_t __p0) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#else -__ai int32x2_t vget_high_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vget_high_s32(int32x4_t __p0) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 2, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vget_high_s64(int64x2_t __p0) { - int64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1); - return __ret; -} -#else -__ai int64x1_t vget_high_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vget_high_s16(int16x8_t __p0) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#else -__ai int16x4_t vget_high_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vget_high_s16(int16x8_t __p0) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 4, 5, 6, 7); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vget_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vget_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vgetq_lane_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vgetq_lane_f32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vgetq_lane_f32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vgetq_lane_f32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vgetq_lane_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vgetq_lane_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vget_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vget_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vget_lane_i32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vget_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vget_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vget_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vget_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vget_lane_f32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vget_lane_f32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vget_lane_f32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vget_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vget_lane_i32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vget_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vget_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vget_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vget_low_p8(poly8x16_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai poly8x8_t vget_low_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vget_low_p16(poly16x8_t __p0) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3); - return __ret; -} -#else -__ai poly16x4_t vget_low_p16(poly16x8_t __p0) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vget_low_u8(uint8x16_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai uint8x8_t vget_low_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vget_low_u32(uint32x4_t __p0) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1); - return __ret; -} -#else -__ai uint32x2_t vget_low_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vget_low_u64(uint64x2_t __p0) { - uint64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0); - return __ret; -} -#else -__ai uint64x1_t vget_low_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vget_low_u16(uint16x8_t __p0) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3); - return __ret; -} -#else -__ai uint16x4_t vget_low_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vget_low_s8(int8x16_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3, 4, 5, 6, 7); - return __ret; -} -#else -__ai int8x8_t vget_low_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3, 4, 5, 6, 7); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vget_low_f32(float32x4_t __p0) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1); - return __ret; -} -#else -__ai float32x2_t vget_low_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vget_low_f16(float16x8_t __p0) { - float16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3); - return __ret; -} -#else -__ai float16x4_t vget_low_f16(float16x8_t __p0) { - float16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - float16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vget_low_s32(int32x4_t __p0) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1); - return __ret; -} -#else -__ai int32x2_t vget_low_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vget_low_s64(int64x2_t __p0) { - int64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0); - return __ret; -} -#else -__ai int64x1_t vget_low_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vget_low_s16(int16x8_t __p0) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0, 1, 2, 3); - return __ret; -} -#else -__ai int16x4_t vget_low_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0, 1, 2, 3); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vhaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vhaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vhaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vhaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vhaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vhaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vhaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vhaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vhaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vhaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vhaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vhaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vhadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vhadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vhadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vhadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vhadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vhadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vhadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vhadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vhadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vhadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vhadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vhadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vhsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vhsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vhsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vhsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vhsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vhsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vhsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vhsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vhsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vhsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vhsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vhsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vhsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vhsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vhsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vhsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vhsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vhsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vhsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vhsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vhsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vhsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vhsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vhsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vhsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vhsub_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vhsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vhsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p8(__p0) __extension__ ({ \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_v(__p0, 4); \ - __ret; \ -}) -#else -#define vld1_p8(__p0) __extension__ ({ \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_v(__p0, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p16(__p0) __extension__ ({ \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_v(__p0, 5); \ - __ret; \ -}) -#else -#define vld1_p16(__p0) __extension__ ({ \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_v(__p0, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p8(__p0) __extension__ ({ \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_v(__p0, 36); \ - __ret; \ -}) -#else -#define vld1q_p8(__p0) __extension__ ({ \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_v(__p0, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p16(__p0) __extension__ ({ \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_v(__p0, 37); \ - __ret; \ -}) -#else -#define vld1q_p16(__p0) __extension__ ({ \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_v(__p0, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u8(__p0) __extension__ ({ \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_v(__p0, 48); \ - __ret; \ -}) -#else -#define vld1q_u8(__p0) __extension__ ({ \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_v(__p0, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u32(__p0) __extension__ ({ \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_v(__p0, 50); \ - __ret; \ -}) -#else -#define vld1q_u32(__p0) __extension__ ({ \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_v(__p0, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u64(__p0) __extension__ ({ \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_v(__p0, 51); \ - __ret; \ -}) -#else -#define vld1q_u64(__p0) __extension__ ({ \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_v(__p0, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u16(__p0) __extension__ ({ \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_v(__p0, 49); \ - __ret; \ -}) -#else -#define vld1q_u16(__p0) __extension__ ({ \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_v(__p0, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s8(__p0) __extension__ ({ \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_v(__p0, 32); \ - __ret; \ -}) -#else -#define vld1q_s8(__p0) __extension__ ({ \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_v(__p0, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f32(__p0) __extension__ ({ \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_v(__p0, 41); \ - __ret; \ -}) -#else -#define vld1q_f32(__p0) __extension__ ({ \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_v(__p0, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f16(__p0) __extension__ ({ \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_v(__p0, 40); \ - __ret; \ -}) -#else -#define vld1q_f16(__p0) __extension__ ({ \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_v(__p0, 40); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s32(__p0) __extension__ ({ \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_v(__p0, 34); \ - __ret; \ -}) -#else -#define vld1q_s32(__p0) __extension__ ({ \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_v(__p0, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s64(__p0) __extension__ ({ \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_v(__p0, 35); \ - __ret; \ -}) -#else -#define vld1q_s64(__p0) __extension__ ({ \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_v(__p0, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s16(__p0) __extension__ ({ \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_v(__p0, 33); \ - __ret; \ -}) -#else -#define vld1q_s16(__p0) __extension__ ({ \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_v(__p0, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u8(__p0) __extension__ ({ \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_v(__p0, 16); \ - __ret; \ -}) -#else -#define vld1_u8(__p0) __extension__ ({ \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_v(__p0, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u32(__p0) __extension__ ({ \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_v(__p0, 18); \ - __ret; \ -}) -#else -#define vld1_u32(__p0) __extension__ ({ \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_v(__p0, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u64(__p0) __extension__ ({ \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_v(__p0, 19); \ - __ret; \ -}) -#else -#define vld1_u64(__p0) __extension__ ({ \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_v(__p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u16(__p0) __extension__ ({ \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_v(__p0, 17); \ - __ret; \ -}) -#else -#define vld1_u16(__p0) __extension__ ({ \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_v(__p0, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s8(__p0) __extension__ ({ \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_v(__p0, 0); \ - __ret; \ -}) -#else -#define vld1_s8(__p0) __extension__ ({ \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_v(__p0, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f32(__p0) __extension__ ({ \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_v(__p0, 9); \ - __ret; \ -}) -#else -#define vld1_f32(__p0) __extension__ ({ \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_v(__p0, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f16(__p0) __extension__ ({ \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_v(__p0, 8); \ - __ret; \ -}) -#else -#define vld1_f16(__p0) __extension__ ({ \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_v(__p0, 8); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s32(__p0) __extension__ ({ \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_v(__p0, 2); \ - __ret; \ -}) -#else -#define vld1_s32(__p0) __extension__ ({ \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_v(__p0, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s64(__p0) __extension__ ({ \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_v(__p0, 3); \ - __ret; \ -}) -#else -#define vld1_s64(__p0) __extension__ ({ \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_v(__p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s16(__p0) __extension__ ({ \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_v(__p0, 1); \ - __ret; \ -}) -#else -#define vld1_s16(__p0) __extension__ ({ \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_v(__p0, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_p8(__p0) __extension__ ({ \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_dup_v(__p0, 4); \ - __ret; \ -}) -#else -#define vld1_dup_p8(__p0) __extension__ ({ \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_dup_v(__p0, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_p16(__p0) __extension__ ({ \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_dup_v(__p0, 5); \ - __ret; \ -}) -#else -#define vld1_dup_p16(__p0) __extension__ ({ \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_dup_v(__p0, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_p8(__p0) __extension__ ({ \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_dup_v(__p0, 36); \ - __ret; \ -}) -#else -#define vld1q_dup_p8(__p0) __extension__ ({ \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_dup_v(__p0, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_p16(__p0) __extension__ ({ \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_dup_v(__p0, 37); \ - __ret; \ -}) -#else -#define vld1q_dup_p16(__p0) __extension__ ({ \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_dup_v(__p0, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_u8(__p0) __extension__ ({ \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_dup_v(__p0, 48); \ - __ret; \ -}) -#else -#define vld1q_dup_u8(__p0) __extension__ ({ \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_dup_v(__p0, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_u32(__p0) __extension__ ({ \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_dup_v(__p0, 50); \ - __ret; \ -}) -#else -#define vld1q_dup_u32(__p0) __extension__ ({ \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_dup_v(__p0, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_u64(__p0) __extension__ ({ \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_dup_v(__p0, 51); \ - __ret; \ -}) -#else -#define vld1q_dup_u64(__p0) __extension__ ({ \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_dup_v(__p0, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_u16(__p0) __extension__ ({ \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_dup_v(__p0, 49); \ - __ret; \ -}) -#else -#define vld1q_dup_u16(__p0) __extension__ ({ \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_dup_v(__p0, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_s8(__p0) __extension__ ({ \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_dup_v(__p0, 32); \ - __ret; \ -}) -#else -#define vld1q_dup_s8(__p0) __extension__ ({ \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_dup_v(__p0, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_f32(__p0) __extension__ ({ \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_dup_v(__p0, 41); \ - __ret; \ -}) -#else -#define vld1q_dup_f32(__p0) __extension__ ({ \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_dup_v(__p0, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_f16(__p0) __extension__ ({ \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_dup_v(__p0, 40); \ - __ret; \ -}) -#else -#define vld1q_dup_f16(__p0) __extension__ ({ \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_dup_v(__p0, 40); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_s32(__p0) __extension__ ({ \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_dup_v(__p0, 34); \ - __ret; \ -}) -#else -#define vld1q_dup_s32(__p0) __extension__ ({ \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_dup_v(__p0, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_s64(__p0) __extension__ ({ \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_dup_v(__p0, 35); \ - __ret; \ -}) -#else -#define vld1q_dup_s64(__p0) __extension__ ({ \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_dup_v(__p0, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_s16(__p0) __extension__ ({ \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_dup_v(__p0, 33); \ - __ret; \ -}) -#else -#define vld1q_dup_s16(__p0) __extension__ ({ \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_dup_v(__p0, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_u8(__p0) __extension__ ({ \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_dup_v(__p0, 16); \ - __ret; \ -}) -#else -#define vld1_dup_u8(__p0) __extension__ ({ \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_dup_v(__p0, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_u32(__p0) __extension__ ({ \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_dup_v(__p0, 18); \ - __ret; \ -}) -#else -#define vld1_dup_u32(__p0) __extension__ ({ \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_dup_v(__p0, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_u64(__p0) __extension__ ({ \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_dup_v(__p0, 19); \ - __ret; \ -}) -#else -#define vld1_dup_u64(__p0) __extension__ ({ \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_dup_v(__p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_u16(__p0) __extension__ ({ \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_dup_v(__p0, 17); \ - __ret; \ -}) -#else -#define vld1_dup_u16(__p0) __extension__ ({ \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_dup_v(__p0, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_s8(__p0) __extension__ ({ \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_dup_v(__p0, 0); \ - __ret; \ -}) -#else -#define vld1_dup_s8(__p0) __extension__ ({ \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_dup_v(__p0, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_f32(__p0) __extension__ ({ \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_dup_v(__p0, 9); \ - __ret; \ -}) -#else -#define vld1_dup_f32(__p0) __extension__ ({ \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_dup_v(__p0, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_f16(__p0) __extension__ ({ \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_dup_v(__p0, 8); \ - __ret; \ -}) -#else -#define vld1_dup_f16(__p0) __extension__ ({ \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_dup_v(__p0, 8); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_s32(__p0) __extension__ ({ \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_dup_v(__p0, 2); \ - __ret; \ -}) -#else -#define vld1_dup_s32(__p0) __extension__ ({ \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_dup_v(__p0, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_s64(__p0) __extension__ ({ \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_dup_v(__p0, 3); \ - __ret; \ -}) -#else -#define vld1_dup_s64(__p0) __extension__ ({ \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_dup_v(__p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_s16(__p0) __extension__ ({ \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_dup_v(__p0, 1); \ - __ret; \ -}) -#else -#define vld1_dup_s16(__p0) __extension__ ({ \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_dup_v(__p0, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 4); \ - __ret; \ -}) -#else -#define vld1_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 5); \ - __ret; \ -}) -#else -#define vld1_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 36); \ - __ret; \ -}) -#else -#define vld1q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 37); \ - __ret; \ -}) -#else -#define vld1q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vld1q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vld1q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vld1q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vld1q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vld1q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 41); \ - __ret; \ -}) -#else -#define vld1q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 40); \ - __ret; \ -}) -#else -#define vld1q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - float16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8_t __ret; \ - __ret = (float16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 40); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vld1q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vld1q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vld1q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vld1_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vld1_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vld1_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vld1_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vld1_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 9); \ - __ret; \ -}) -#else -#define vld1_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 8); \ - __ret; \ -}) -#else -#define vld1_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - float16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float16x4_t __ret; \ - __ret = (float16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 8); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vld1_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vld1_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vld1_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_p8(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld2_p8(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_p16(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld2_p16(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_p8(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld2q_p8(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_p16(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld2q_p16(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_u8(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld2q_u8(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_u32(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld2q_u32(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_u16(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld2q_u16(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_s8(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld2q_s8(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_f32(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld2q_f32(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_f16(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld2q_f16(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_s32(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld2q_s32(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_s16(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld2q_s16(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_u8(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld2_u8(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_u32(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld2_u32(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_u64(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld2_u64(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_u16(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld2_u16(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_s8(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld2_s8(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_f32(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld2_f32(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_f16(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld2_f16(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_s32(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld2_s32(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_s64(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld2_s64(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_s16(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld2_s16(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_p8(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld2_dup_p8(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_p16(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld2_dup_p16(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_u8(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld2_dup_u8(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_u32(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld2_dup_u32(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_u64(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld2_dup_u64(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_u16(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld2_dup_u16(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_s8(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld2_dup_s8(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_f32(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld2_dup_f32(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_f16(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld2_dup_f16(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_s32(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld2_dup_s32(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_s64(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld2_dup_s64(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_s16(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld2_dup_s16(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 4); \ - __ret; \ -}) -#else -#define vld2_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - poly8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 5); \ - __ret; \ -}) -#else -#define vld2_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - poly16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - poly16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 37); \ - __ret; \ -}) -#else -#define vld2q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - poly16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 50); \ - __ret; \ -}) -#else -#define vld2q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - uint32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 49); \ - __ret; \ -}) -#else -#define vld2q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - uint16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 41); \ - __ret; \ -}) -#else -#define vld2q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - float32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 40); \ - __ret; \ -}) -#else -#define vld2q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - float16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 34); \ - __ret; \ -}) -#else -#define vld2q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - int32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 33); \ - __ret; \ -}) -#else -#define vld2q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - int16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 16); \ - __ret; \ -}) -#else -#define vld2_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - uint8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 18); \ - __ret; \ -}) -#else -#define vld2_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - uint32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - uint32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 17); \ - __ret; \ -}) -#else -#define vld2_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - uint16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - uint16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 0); \ - __ret; \ -}) -#else -#define vld2_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - int8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 9); \ - __ret; \ -}) -#else -#define vld2_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - float32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - float32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 8); \ - __ret; \ -}) -#else -#define vld2_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - float16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - float16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 2); \ - __ret; \ -}) -#else -#define vld2_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - int32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - int32x2x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 1); \ - __ret; \ -}) -#else -#define vld2_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - int16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - int16x4x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_p8(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld3_p8(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_p16(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld3_p16(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_p8(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld3q_p8(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_p16(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld3q_p16(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_u8(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld3q_u8(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_u32(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld3q_u32(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_u16(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld3q_u16(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_s8(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld3q_s8(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_f32(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld3q_f32(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_f16(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld3q_f16(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_s32(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld3q_s32(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_s16(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld3q_s16(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_u8(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld3_u8(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_u32(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld3_u32(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_u64(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld3_u64(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_u16(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld3_u16(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_s8(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld3_s8(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_f32(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld3_f32(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_f16(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld3_f16(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_s32(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld3_s32(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_s64(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld3_s64(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_s16(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld3_s16(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_p8(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld3_dup_p8(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_p16(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld3_dup_p16(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_u8(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld3_dup_u8(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_u32(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld3_dup_u32(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_u64(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld3_dup_u64(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_u16(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld3_dup_u16(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_s8(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld3_dup_s8(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_f32(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld3_dup_f32(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_f16(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld3_dup_f16(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_s32(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld3_dup_s32(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_s64(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld3_dup_s64(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_s16(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld3_dup_s16(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 4); \ - __ret; \ -}) -#else -#define vld3_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - poly8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 5); \ - __ret; \ -}) -#else -#define vld3_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - poly16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - poly16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 37); \ - __ret; \ -}) -#else -#define vld3q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - poly16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 50); \ - __ret; \ -}) -#else -#define vld3q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - uint32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 49); \ - __ret; \ -}) -#else -#define vld3q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - uint16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 41); \ - __ret; \ -}) -#else -#define vld3q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - float32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 40); \ - __ret; \ -}) -#else -#define vld3q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - float16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 34); \ - __ret; \ -}) -#else -#define vld3q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - int32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 33); \ - __ret; \ -}) -#else -#define vld3q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - int16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 16); \ - __ret; \ -}) -#else -#define vld3_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - uint8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 18); \ - __ret; \ -}) -#else -#define vld3_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - uint32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - uint32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 17); \ - __ret; \ -}) -#else -#define vld3_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - uint16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - uint16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 0); \ - __ret; \ -}) -#else -#define vld3_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - int8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 9); \ - __ret; \ -}) -#else -#define vld3_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - float32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - float32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 8); \ - __ret; \ -}) -#else -#define vld3_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - float16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - float16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 2); \ - __ret; \ -}) -#else -#define vld3_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - int32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - int32x2x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 1); \ - __ret; \ -}) -#else -#define vld3_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - int16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - int16x4x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_p8(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld4_p8(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_p16(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld4_p16(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_p8(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld4q_p8(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_p16(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld4q_p16(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_u8(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld4q_u8(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_u32(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld4q_u32(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_u16(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld4q_u16(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_s8(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld4q_s8(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_f32(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld4q_f32(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_f16(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld4q_f16(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_s32(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld4q_s32(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_s16(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld4q_s16(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_u8(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld4_u8(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_u32(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld4_u32(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_u64(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld4_u64(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_u16(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld4_u16(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_s8(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld4_s8(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_f32(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld4_f32(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_f16(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld4_f16(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_s32(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld4_s32(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_s64(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld4_s64(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_s16(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld4_s16(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_p8(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld4_dup_p8(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_p16(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld4_dup_p16(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_u8(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld4_dup_u8(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_u32(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld4_dup_u32(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_u64(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld4_dup_u64(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_u16(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld4_dup_u16(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_s8(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld4_dup_s8(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_f32(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld4_dup_f32(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_f16(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld4_dup_f16(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_s32(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld4_dup_s32(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_s64(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld4_dup_s64(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_s16(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld4_dup_s16(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 4); \ - __ret; \ -}) -#else -#define vld4_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - poly8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 5); \ - __ret; \ -}) -#else -#define vld4_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - poly16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - poly16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 37); \ - __ret; \ -}) -#else -#define vld4q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - poly16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 50); \ - __ret; \ -}) -#else -#define vld4q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - uint32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 49); \ - __ret; \ -}) -#else -#define vld4q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - uint16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 41); \ - __ret; \ -}) -#else -#define vld4q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - float32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 40); \ - __ret; \ -}) -#else -#define vld4q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - float16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 34); \ - __ret; \ -}) -#else -#define vld4q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - int32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 33); \ - __ret; \ -}) -#else -#define vld4q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - int16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 16); \ - __ret; \ -}) -#else -#define vld4_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - uint8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 18); \ - __ret; \ -}) -#else -#define vld4_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - uint32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - uint32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 17); \ - __ret; \ -}) -#else -#define vld4_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - uint16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - uint16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 0); \ - __ret; \ -}) -#else -#define vld4_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - int8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 9); \ - __ret; \ -}) -#else -#define vld4_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - float32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - float32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 8); \ - __ret; \ -}) -#else -#define vld4_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - float16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - float16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 2); \ - __ret; \ -}) -#else -#define vld4_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - int32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - int32x2x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 1); \ - __ret; \ -}) -#else -#define vld4_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - int16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - int16x4x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmaxq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vmaxq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmaxq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vmaxq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmaxq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vmaxq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmaxq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vmaxq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmaxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vmaxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmaxq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vmaxq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmaxq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vmaxq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmax_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vmax_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmax_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vmax_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmax_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vmax_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmax_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vmax_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmax_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vmax_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmax_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vmax_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmax_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vmax_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vminq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vminq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vminq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vminq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vminq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vminq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vminq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vminq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vminq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vminq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vminq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vminq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vminq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vminq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmin_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vmin_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmin_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vmin_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmin_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vmin_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmin_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vmin_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmin_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vmin_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmin_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vmin_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmin_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vmin_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmlaq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint8x16_t vmlaq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlaq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint32x4_t vmlaq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlaq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint16x8_t vmlaq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmlaq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int8x16_t vmlaq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmlaq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai float32x4_t vmlaq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlaq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int32x4_t vmlaq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlaq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int16x8_t vmlaq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmla_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint8x8_t vmla_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmla_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint32x2_t vmla_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x2_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmla_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai uint16x4_t vmla_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmla_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int8x8_t vmla_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmla_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai float32x2_t vmla_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float32x2_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmla_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int32x2_t vmla_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x2_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmla_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai int16x4_t vmla_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x8_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x8_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlaq_n_u32(uint32x4_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint32x4_t __ret; - __ret = __p0 + __p1 * (uint32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint32x4_t vmlaq_n_u32(uint32x4_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __rev1 * (uint32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlaq_n_u16(uint16x8_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint16x8_t __ret; - __ret = __p0 + __p1 * (uint16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint16x8_t vmlaq_n_u16(uint16x8_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __rev1 * (uint16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmlaq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __ret; - __ret = __p0 + __p1 * (float32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai float32x4_t vmlaq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 + __rev1 * (float32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlaq_n_s32(int32x4_t __p0, int32x4_t __p1, int32_t __p2) { - int32x4_t __ret; - __ret = __p0 + __p1 * (int32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int32x4_t vmlaq_n_s32(int32x4_t __p0, int32x4_t __p1, int32_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __rev1 * (int32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlaq_n_s16(int16x8_t __p0, int16x8_t __p1, int16_t __p2) { - int16x8_t __ret; - __ret = __p0 + __p1 * (int16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int16x8_t vmlaq_n_s16(int16x8_t __p0, int16x8_t __p1, int16_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __rev1 * (int16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmla_n_u32(uint32x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint32x2_t __ret; - __ret = __p0 + __p1 * (uint32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai uint32x2_t vmla_n_u32(uint32x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 + __rev1 * (uint32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmla_n_u16(uint16x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint16x4_t __ret; - __ret = __p0 + __p1 * (uint16x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint16x4_t vmla_n_u16(uint16x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 + __rev1 * (uint16x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmla_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __ret; - __ret = __p0 + __p1 * (float32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai float32x2_t vmla_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 + __rev1 * (float32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmla_n_s32(int32x2_t __p0, int32x2_t __p1, int32_t __p2) { - int32x2_t __ret; - __ret = __p0 + __p1 * (int32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai int32x2_t vmla_n_s32(int32x2_t __p0, int32x2_t __p1, int32_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 + __rev1 * (int32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmla_n_s16(int16x4_t __p0, int16x4_t __p1, int16_t __p2) { - int16x4_t __ret; - __ret = __p0 + __p1 * (int16x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int16x4_t vmla_n_s16(int16x4_t __p0, int16x4_t __p1, int16_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 + __rev1 * (int16x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmlsq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint8x16_t vmlsq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint32x4_t vmlsq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlsq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint16x8_t vmlsq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmlsq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int8x16_t vmlsq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmlsq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai float32x4_t vmlsq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int32x4_t vmlsq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlsq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int16x8_t vmlsq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmls_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint8x8_t vmls_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmls_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint32x2_t vmls_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x2_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmls_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai uint16x4_t vmls_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmls_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int8x8_t vmls_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmls_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai float32x2_t vmls_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float32x2_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmls_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int32x2_t vmls_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x2_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmls_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai int16x4_t vmls_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x8_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x8_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsq_n_u32(uint32x4_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint32x4_t __ret; - __ret = __p0 - __p1 * (uint32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint32x4_t vmlsq_n_u32(uint32x4_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __rev1 * (uint32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlsq_n_u16(uint16x8_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint16x8_t __ret; - __ret = __p0 - __p1 * (uint16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint16x8_t vmlsq_n_u16(uint16x8_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __rev1 * (uint16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmlsq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __ret; - __ret = __p0 - __p1 * (float32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai float32x4_t vmlsq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 - __rev1 * (float32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsq_n_s32(int32x4_t __p0, int32x4_t __p1, int32_t __p2) { - int32x4_t __ret; - __ret = __p0 - __p1 * (int32x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int32x4_t vmlsq_n_s32(int32x4_t __p0, int32x4_t __p1, int32_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __rev1 * (int32x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlsq_n_s16(int16x8_t __p0, int16x8_t __p1, int16_t __p2) { - int16x8_t __ret; - __ret = __p0 - __p1 * (int16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int16x8_t vmlsq_n_s16(int16x8_t __p0, int16x8_t __p1, int16_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __rev1 * (int16x8_t) {__p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmls_n_u32(uint32x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint32x2_t __ret; - __ret = __p0 - __p1 * (uint32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai uint32x2_t vmls_n_u32(uint32x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 - __rev1 * (uint32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmls_n_u16(uint16x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint16x4_t __ret; - __ret = __p0 - __p1 * (uint16x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai uint16x4_t vmls_n_u16(uint16x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 - __rev1 * (uint16x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmls_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __ret; - __ret = __p0 - __p1 * (float32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai float32x2_t vmls_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 - __rev1 * (float32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmls_n_s32(int32x2_t __p0, int32x2_t __p1, int32_t __p2) { - int32x2_t __ret; - __ret = __p0 - __p1 * (int32x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai int32x2_t vmls_n_s32(int32x2_t __p0, int32x2_t __p1, int32_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 - __rev1 * (int32x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmls_n_s16(int16x4_t __p0, int16x4_t __p1, int16_t __p2) { - int16x4_t __ret; - __ret = __p0 - __p1 * (int16x4_t) {__p2, __p2, __p2, __p2}; - return __ret; -} -#else -__ai int16x4_t vmls_n_s16(int16x4_t __p0, int16x4_t __p1, int16_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 - __rev1 * (int16x4_t) {__p2, __p2, __p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vmov_n_p8(poly8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly8x8_t vmov_n_p8(poly8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vmov_n_p16(poly16_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly16x4_t vmov_n_p16(poly16_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vmovq_n_p8(poly8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly8x16_t vmovq_n_p8(poly8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vmovq_n_p16(poly16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai poly16x8_t vmovq_n_p16(poly16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmovq_n_u8(uint8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint8x16_t vmovq_n_u8(uint8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmovq_n_u32(uint32_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint32x4_t vmovq_n_u32(uint32_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmovq_n_u64(uint64_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai uint64x2_t vmovq_n_u64(uint64_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmovq_n_u16(uint16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint16x8_t vmovq_n_u16(uint16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmovq_n_s8(int8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int8x16_t vmovq_n_s8(int8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmovq_n_f32(float32_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai float32x4_t vmovq_n_f32(float32_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmovq_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = (float16x8_t) {__s0, __s0, __s0, __s0, __s0, __s0, __s0, __s0}; \ - __ret; \ -}) -#else -#define vmovq_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = (float16x8_t) {__s0, __s0, __s0, __s0, __s0, __s0, __s0, __s0}; \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmovq_n_s32(int32_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int32x4_t vmovq_n_s32(int32_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmovq_n_s64(int64_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai int64x2_t vmovq_n_s64(int64_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmovq_n_s16(int16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int16x8_t vmovq_n_s16(int16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmov_n_u8(uint8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint8x8_t vmov_n_u8(uint8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmov_n_u32(uint32_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai uint32x2_t vmov_n_u32(uint32_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vmov_n_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) {__p0}; - return __ret; -} -#else -__ai uint64x1_t vmov_n_u64(uint64_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmov_n_u16(uint16_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai uint16x4_t vmov_n_u16(uint16_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmov_n_s8(int8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int8x8_t vmov_n_s8(int8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) {__p0, __p0, __p0, __p0, __p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmov_n_f32(float32_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai float32x2_t vmov_n_f32(float32_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmov_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = (float16x4_t) {__s0, __s0, __s0, __s0}; \ - __ret; \ -}) -#else -#define vmov_n_f16(__p0) __extension__ ({ \ - float16_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = (float16x4_t) {__s0, __s0, __s0, __s0}; \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmov_n_s32(int32_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai int32x2_t vmov_n_s32(int32_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vmov_n_s64(int64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) {__p0}; - return __ret; -} -#else -__ai int64x1_t vmov_n_s64(int64_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmov_n_s16(int16_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) {__p0, __p0, __p0, __p0}; - return __ret; -} -#else -__ai int16x4_t vmov_n_s16(int16_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) {__p0, __p0, __p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmovl_u8(uint8x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vmovl_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vmovl_u8(uint8x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 49); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmovl_u32(uint32x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vmovl_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmovl_u32(uint32x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 51); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmovl_u16(uint16x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vmovl_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmovl_u16(uint16x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 50); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmovl_s8(int8x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vmovl_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vmovl_s8(int8x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 33); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmovl_s32(int32x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vmovl_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmovl_s32(int32x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmovl_s16(int16x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vmovl_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmovl_v((int8x8_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmovl_s16(int16x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmovl_v((int8x8_t)__p0, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmovn_u32(uint32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vmovn_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vmovn_u32(uint32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmovn_u64(uint64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vmovn_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vmovn_u64(uint64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmovn_u16(uint16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vmovn_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vmovn_u16(uint16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmovn_s32(int32x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vmovn_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vmovn_s32(int32x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmovn_s64(int64x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vmovn_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vmovn_s64(int64x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmovn_s16(int16x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vmovn_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmovn_v((int8x16_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vmovn_s16(int16x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vmovn_v((int8x16_t)__p0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmulq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint8x16_t vmulq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmulq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint32x4_t vmulq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmulq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint16x8_t vmulq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmulq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int8x16_t vmulq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmulq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai float32x4_t vmulq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmulq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int32x4_t vmulq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmulq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int16x8_t vmulq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmul_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint8x8_t vmul_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmul_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint32x2_t vmul_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmul_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai uint16x4_t vmul_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmul_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int8x8_t vmul_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmul_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai float32x2_t vmul_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmul_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int32x2_t vmul_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmul_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai int16x4_t vmul_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vmul_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vmul_v((int8x8_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vmul_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vmul_v((int8x8_t)__rev0, (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vmulq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vmulq_v((int8x16_t)__p0, (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16_t vmulq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vmulq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmulq_n_u32(uint32x4_t __p0, uint32_t __p1) { - uint32x4_t __ret; - __ret = __p0 * (uint32x4_t) {__p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai uint32x4_t vmulq_n_u32(uint32x4_t __p0, uint32_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 * (uint32x4_t) {__p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmulq_n_u16(uint16x8_t __p0, uint16_t __p1) { - uint16x8_t __ret; - __ret = __p0 * (uint16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai uint16x8_t vmulq_n_u16(uint16x8_t __p0, uint16_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 * (uint16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmulq_n_f32(float32x4_t __p0, float32_t __p1) { - float32x4_t __ret; - __ret = __p0 * (float32x4_t) {__p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai float32x4_t vmulq_n_f32(float32x4_t __p0, float32_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 * (float32x4_t) {__p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmulq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __ret; - __ret = __p0 * (int32x4_t) {__p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai int32x4_t vmulq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 * (int32x4_t) {__p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmulq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __ret; - __ret = __p0 * (int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai int16x8_t vmulq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 * (int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmul_n_u32(uint32x2_t __p0, uint32_t __p1) { - uint32x2_t __ret; - __ret = __p0 * (uint32x2_t) {__p1, __p1}; - return __ret; -} -#else -__ai uint32x2_t vmul_n_u32(uint32x2_t __p0, uint32_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = __rev0 * (uint32x2_t) {__p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmul_n_u16(uint16x4_t __p0, uint16_t __p1) { - uint16x4_t __ret; - __ret = __p0 * (uint16x4_t) {__p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai uint16x4_t vmul_n_u16(uint16x4_t __p0, uint16_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 * (uint16x4_t) {__p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmul_n_f32(float32x2_t __p0, float32_t __p1) { - float32x2_t __ret; - __ret = __p0 * (float32x2_t) {__p1, __p1}; - return __ret; -} -#else -__ai float32x2_t vmul_n_f32(float32x2_t __p0, float32_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = __rev0 * (float32x2_t) {__p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmul_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __ret; - __ret = __p0 * (int32x2_t) {__p1, __p1}; - return __ret; -} -#else -__ai int32x2_t vmul_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = __rev0 * (int32x2_t) {__p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmul_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __ret; - __ret = __p0 * (int16x4_t) {__p1, __p1, __p1, __p1}; - return __ret; -} -#else -__ai int16x4_t vmul_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 * (int16x4_t) {__p1, __p1, __p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vmull_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly16x8_t __ret; - __ret = (poly16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 37); - return __ret; -} -#else -__ai poly16x8_t vmull_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = (poly16x8_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 37); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai poly16x8_t __noswap_vmull_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly16x8_t __ret; - __ret = (poly16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 37); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmull_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vmull_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vmull_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 49); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmull_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vmull_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmull_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 51); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmull_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vmull_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmull_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 50); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmull_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vmull_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vmull_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 33); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmull_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vmull_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmull_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmull_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vmull_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmull_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)__p1, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = vmull_u32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = __noswap_vmull_u32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = vmull_u16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __noswap_vmull_u16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vmull_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vmull_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vmull_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vmull_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmull_n_u32(uint32x2_t __p0, uint32_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(uint32x2_t) {__p1, __p1}, 51); - return __ret; -} -#else -__ai uint64x2_t vmull_n_u32(uint32x2_t __p0, uint32_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)(uint32x2_t) {__p1, __p1}, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmull_n_u32(uint32x2_t __p0, uint32_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(uint32x2_t) {__p1, __p1}, 51); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmull_n_u16(uint16x4_t __p0, uint16_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(uint16x4_t) {__p1, __p1, __p1, __p1}, 50); - return __ret; -} -#else -__ai uint32x4_t vmull_n_u16(uint16x4_t __p0, uint16_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)(uint16x4_t) {__p1, __p1, __p1, __p1}, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmull_n_u16(uint16x4_t __p0, uint16_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(uint16x4_t) {__p1, __p1, __p1, __p1}, 50); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmull_n_s32(int32x2_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - return __ret; -} -#else -__ai int64x2_t vmull_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmull_n_s32(int32x2_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmull_n_s16(int16x4_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#else -__ai int32x4_t vmull_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__rev0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmull_n_s16(int16x4_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vmull_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vmvn_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai poly8x8_t vmvn_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vmvnq_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai poly8x16_t vmvnq_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmvnq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint8x16_t vmvnq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmvnq_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint32x4_t vmvnq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmvnq_u16(uint16x8_t __p0) { - uint16x8_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint16x8_t vmvnq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmvnq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int8x16_t vmvnq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmvnq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int32x4_t vmvnq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmvnq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int16x8_t vmvnq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vmvn_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint8x8_t vmvn_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vmvn_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint32x2_t vmvn_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vmvn_u16(uint16x4_t __p0) { - uint16x4_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai uint16x4_t vmvn_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vmvn_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int8x8_t vmvn_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vmvn_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int32x2_t vmvn_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vmvn_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = ~__p0; - return __ret; -} -#else -__ai int16x4_t vmvn_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = ~__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vnegq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int8x16_t vnegq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vnegq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai float32x4_t vnegq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vnegq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int32x4_t vnegq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vnegq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int16x8_t vnegq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vneg_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int8x8_t vneg_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vneg_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai float32x2_t vneg_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vneg_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int32x2_t vneg_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vneg_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int16x4_t vneg_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vornq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint8x16_t vornq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vornq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint32x4_t vornq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vornq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint64x2_t vornq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vornq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint16x8_t vornq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vornq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int8x16_t vornq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vornq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int32x4_t vornq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vornq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int64x2_t vornq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vornq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int16x8_t vornq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vorn_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint8x8_t vorn_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vorn_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint32x2_t vorn_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vorn_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint64x1_t vorn_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vorn_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai uint16x4_t vorn_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vorn_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int8x8_t vorn_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vorn_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int32x2_t vorn_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vorn_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int64x1_t vorn_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vorn_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 | ~__p1; - return __ret; -} -#else -__ai int16x4_t vorn_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 | ~__rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vorrq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint8x16_t vorrq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vorrq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint32x4_t vorrq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vorrq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint64x2_t vorrq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vorrq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint16x8_t vorrq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vorrq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int8x16_t vorrq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vorrq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int32x4_t vorrq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vorrq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int64x2_t vorrq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vorrq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int16x8_t vorrq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vorr_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint8x8_t vorr_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vorr_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint32x2_t vorr_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vorr_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint64x1_t vorr_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vorr_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai uint16x4_t vorr_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vorr_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int8x8_t vorr_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vorr_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int32x2_t vorr_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vorr_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int64x1_t vorr_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vorr_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 | __p1; - return __ret; -} -#else -__ai int16x4_t vorr_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 | __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vpadalq_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vpadalq_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vpadalq_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vpadalq_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vpadalq_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vpadalq_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vpadalq_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vpadalq_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vpadalq_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vpadalq_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vpadalq_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpadalq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vpadalq_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpadalq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vpadal_u8(uint16x4_t __p0, uint8x8_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vpadal_u8(uint16x4_t __p0, uint8x8_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpadal_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vpadal_u32(uint64x1_t __p0, uint32x2_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vpadal_u32(uint64x1_t __p0, uint32x2_t __p1) { - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__rev1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vpadal_u16(uint32x2_t __p0, uint16x4_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vpadal_u16(uint32x2_t __p0, uint16x4_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpadal_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vpadal_s8(int16x4_t __p0, int8x8_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vpadal_s8(int16x4_t __p0, int8x8_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpadal_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vpadal_s32(int64x1_t __p0, int32x2_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vpadal_s32(int64x1_t __p0, int32x2_t __p1) { - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__rev1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vpadal_s16(int32x2_t __p0, int16x4_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpadal_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vpadal_s16(int32x2_t __p0, int16x4_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpadal_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vpadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vpadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vpadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vpadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vpadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vpadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vpadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vpadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vpadd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vpadd_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vpadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vpadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vpadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpadd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vpadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vpaddlq_u8(uint8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vpaddlq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vpaddlq_u32(uint32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vpaddlq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vpaddlq_u16(uint16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vpaddlq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vpaddlq_s8(int8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vpaddlq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vpaddlq_s32(int32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vpaddlq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vpaddlq_s16(int16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpaddlq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vpaddlq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpaddlq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vpaddl_u8(uint8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vpaddl_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vpaddl_u32(uint32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vpaddl_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vpaddl_u16(uint16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vpaddl_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vpaddl_s8(int8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vpaddl_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vpaddl_s32(int32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vpaddl_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vpaddl_s16(int16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpaddl_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vpaddl_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpaddl_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vpmax_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vpmax_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vpmax_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vpmax_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vpmax_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vpmax_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vpmax_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vpmax_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vpmax_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vpmax_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vpmax_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vpmax_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vpmax_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpmax_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vpmax_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpmax_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vpmin_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vpmin_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vpmin_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vpmin_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vpmin_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vpmin_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vpmin_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vpmin_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vpmin_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vpmin_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vpmin_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vpmin_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vpmin_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpmin_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vpmin_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vpmin_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqabsq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqabsq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vqabsq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqabsq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqabsq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqabsq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vqabsq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqabsq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqabsq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqabsq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vqabsq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqabsq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqabs_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqabs_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vqabs_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqabs_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqabs_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqabs_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vqabs_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqabs_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqabs_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqabs_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vqabs_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqabs_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vqaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vqaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vqaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vqaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vqaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vqaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vqaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vqadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vqadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vqadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vqadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vqadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 35); - return __ret; -} -#else -__ai int64x2_t vqdmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 34); - return __ret; -} -#else -__ai int32x4_t vqdmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlal_s32(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlal_s32(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlal_s16(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlal_s16(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - return __ret; -} -#else -__ai int64x2_t vqdmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - return __ret; -} -#else -__ai int32x4_t vqdmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlal_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 35); - return __ret; -} -#else -__ai int64x2_t vqdmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 34); - return __ret; -} -#else -__ai int32x4_t vqdmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlsl_s32(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlsl_s32(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlsl_s16(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlsl_s16(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - return __ret; -} -#else -__ai int64x2_t vqdmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int32x2_t) {__p2, __p2}, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - return __ret; -} -#else -__ai int32x4_t vqdmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__rev0, (int8x8_t)__rev1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmlsl_v((int8x16_t)__p0, (int8x8_t)__p1, (int8x8_t)(int16x4_t) {__p2, __p2, __p2, __p2}, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmulhq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqdmulhq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vqdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqdmulh_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vqdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqdmulh_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vqdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmulhq_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulhq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmulhq_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = vqdmulhq_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulhq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __noswap_vqdmulhq_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulh_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = vqdmulh_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulh_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = __noswap_vqdmulh_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulh_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = vqdmulh_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulh_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __noswap_vqdmulh_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmulhq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)(int32x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#else -__ai int32x4_t vqdmulhq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmulhq_v((int8x16_t)__rev0, (int8x16_t)(int32x4_t) {__p1, __p1, __p1, __p1}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqdmulhq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqdmulhq_v((int8x16_t)__p0, (int8x16_t)(int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}, 33); - return __ret; -} -#else -__ai int16x8_t vqdmulhq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqdmulhq_v((int8x16_t)__rev0, (int8x16_t)(int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqdmulh_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 2); - return __ret; -} -#else -__ai int32x2_t vqdmulh_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqdmulh_v((int8x8_t)__rev0, (int8x8_t)(int32x2_t) {__p1, __p1}, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqdmulh_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqdmulh_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 1); - return __ret; -} -#else -__ai int16x4_t vqdmulh_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqdmulh_v((int8x8_t)__rev0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmull_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vqdmull_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmull_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)__p1, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmull_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqdmull_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__rev0, (int8x8_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmull_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)__p1, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vqdmull_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmull_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmull_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmull_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmull_n_s32(int32x2_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - return __ret; -} -#else -__ai int64x2_t vqdmull_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__rev0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vqdmull_n_s32(int32x2_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 35); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmull_n_s16(int16x4_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#else -__ai int32x4_t vqdmull_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__rev0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqdmull_n_s16(int16x4_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqdmull_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqmovn_u32(uint32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vqmovn_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vqmovn_u32(uint32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqmovn_u64(uint64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vqmovn_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vqmovn_u64(uint64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqmovn_u16(uint16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vqmovn_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vqmovn_u16(uint16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqmovn_s32(int32x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vqmovn_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vqmovn_s32(int32x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqmovn_s64(int64x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vqmovn_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vqmovn_s64(int64x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqmovn_s16(int16x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vqmovn_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vqmovn_s16(int16x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqmovn_v((int8x16_t)__p0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqmovun_s32(int32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vqmovun_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovun_v((int8x16_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vqmovun_s32(int32x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqmovun_s64(int64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vqmovun_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovun_v((int8x16_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vqmovun_s64(int64x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqmovun_s16(int16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vqmovun_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovun_v((int8x16_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vqmovun_s16(int16x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqmovun_v((int8x16_t)__p0, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqnegq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqnegq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vqnegq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqnegq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqnegq_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqnegq_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vqnegq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqnegq_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqnegq_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqnegq_v((int8x16_t)__p0, 33); - return __ret; -} -#else -__ai int16x8_t vqnegq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqnegq_v((int8x16_t)__rev0, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqneg_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqneg_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vqneg_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqneg_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqneg_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqneg_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vqneg_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqneg_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqneg_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqneg_v((int8x8_t)__p0, 1); - return __ret; -} -#else -__ai int16x4_t vqneg_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqneg_v((int8x8_t)__rev0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqrdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqrdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vqrdmulhq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqrdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqrdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vqrdmulhq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqrdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqrdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrdmulh_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vqrdmulh_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqrdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqrdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrdmulh_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vqrdmulh_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqrdmulhq_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulhq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqrdmulhq_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = vqrdmulhq_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulhq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __noswap_vqrdmulhq_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulh_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = vqrdmulh_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulh_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = __noswap_vqrdmulh_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulh_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = vqrdmulh_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulh_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __noswap_vqrdmulh_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqrdmulhq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)(int32x4_t) {__p1, __p1, __p1, __p1}, 34); - return __ret; -} -#else -__ai int32x4_t vqrdmulhq_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__rev0, (int8x16_t)(int32x4_t) {__p1, __p1, __p1, __p1}, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqrdmulhq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__p0, (int8x16_t)(int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}, 33); - return __ret; -} -#else -__ai int16x8_t vqrdmulhq_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrdmulhq_v((int8x16_t)__rev0, (int8x16_t)(int16x8_t) {__p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1}, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqrdmulh_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)(int32x2_t) {__p1, __p1}, 2); - return __ret; -} -#else -__ai int32x2_t vqrdmulh_n_s32(int32x2_t __p0, int32_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrdmulh_v((int8x8_t)__rev0, (int8x8_t)(int32x2_t) {__p1, __p1}, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqrdmulh_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrdmulh_v((int8x8_t)__p0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 1); - return __ret; -} -#else -__ai int16x4_t vqrdmulh_n_s16(int16x4_t __p0, int16_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrdmulh_v((int8x8_t)__rev0, (int8x8_t)(int16x4_t) {__p1, __p1, __p1, __p1}, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqrshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqrshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vqrshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vqrshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vqrshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vqrshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vqrshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vqrshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqrshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqrshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqrshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqrshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqrshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vqrshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqrshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqrshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqrshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqrshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqrshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vqrshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vqrshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vqrshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqrshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vqrshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqrshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqrshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqrshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqrshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqrshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vqrshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqrshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqrshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vqrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vqrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vqrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqrshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqrshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqrshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqrshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqrshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqrshrun_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vqshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vqshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vqshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vqshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vqshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vqshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vqshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vqshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vqshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vqshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vqshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vqshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqshl_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 48); \ - __ret; \ -}) -#else -#define vqshlq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vqshlq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vqshlq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vqshlq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 32); \ - __ret; \ -}) -#else -#define vqshlq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vqshlq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vqshlq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vqshlq_n_v((int8x16_t)__s0, __p1, 33); \ - __ret; \ -}) -#else -#define vqshlq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vqshlq_n_v((int8x16_t)__rev0, __p1, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqshl_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqshl_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vqshl_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqshl_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vqshl_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vqshl_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vqshl_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshl_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqshl_n_v((int8x8_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vqshl_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqshl_n_v((int8x8_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshluq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vqshluq_n_v((int8x16_t)__s0, __p1, 48); \ - __ret; \ -}) -#else -#define vqshluq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vqshluq_n_v((int8x16_t)__rev0, __p1, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshluq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vqshluq_n_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vqshluq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vqshluq_n_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshluq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vqshluq_n_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vqshluq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vqshluq_n_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshluq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vqshluq_n_v((int8x16_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vqshluq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vqshluq_n_v((int8x16_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlu_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshlu_n_v((int8x8_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqshlu_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshlu_n_v((int8x8_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlu_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshlu_n_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqshlu_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshlu_n_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlu_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vqshlu_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vqshlu_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vqshlu_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlu_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshlu_n_v((int8x8_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqshlu_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshlu_n_v((int8x8_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vqshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vqshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vqshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vqshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vqshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrun_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrun_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vqshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrun_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrun_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vqshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrun_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vqshrun_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vqshrun_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vqsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vqsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vqsubq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vqsubq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vqsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vqsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vqsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqsubq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vqsubq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqsubq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vqsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vqsubq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vqsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vqsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vqsub_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vqsub_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vqsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vqsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vqsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vqsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqsub_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vqsub_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vqsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqsub_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vqsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vqsub_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vraddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vraddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vraddhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vraddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vraddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vraddhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vraddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vraddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vraddhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vraddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vraddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vraddhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vraddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vraddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vraddhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vraddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vraddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vraddhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vraddhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrecpeq_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrecpeq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vrecpeq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrecpeq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrecpeq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrecpeq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrecpeq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrecpeq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrecpe_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrecpe_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vrecpe_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrecpe_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrecpe_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrecpe_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrecpe_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrecpe_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrecpsq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrecpsq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vrecpsq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrecpsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrecps_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrecps_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vrecps_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrecps_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vrev16_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai poly8x8_t vrev16_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vrev16q_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - return __ret; -} -#else -__ai poly8x16_t vrev16q_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrev16q_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - return __ret; -} -#else -__ai uint8x16_t vrev16q_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrev16q_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - return __ret; -} -#else -__ai int8x16_t vrev16q_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrev16_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai uint8x8_t vrev16_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrev16_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai int8x8_t vrev16_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vrev32_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai poly8x8_t vrev32_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vrev32_p16(poly16x4_t __p0) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai poly16x4_t vrev32_p16(poly16x4_t __p0) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vrev32q_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - return __ret; -} -#else -__ai poly8x16_t vrev32q_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vrev32q_p16(poly16x8_t __p0) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai poly16x8_t vrev32q_p16(poly16x8_t __p0) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrev32q_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - return __ret; -} -#else -__ai uint8x16_t vrev32q_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vrev32q_u16(uint16x8_t __p0) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai uint16x8_t vrev32q_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrev32q_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - return __ret; -} -#else -__ai int8x16_t vrev32q_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vrev32q_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2, 5, 4, 7, 6); - return __ret; -} -#else -__ai int16x8_t vrev32q_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2, 5, 4, 7, 6); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrev32_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai uint8x8_t vrev32_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vrev32_u16(uint16x4_t __p0) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai uint16x4_t vrev32_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrev32_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai int8x8_t vrev32_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vrev32_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai int16x4_t vrev32_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vrev64_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#else -__ai poly8x8_t vrev64_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vrev64_p16(poly16x4_t __p0) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - return __ret; -} -#else -__ai poly16x4_t vrev64_p16(poly16x4_t __p0) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vrev64q_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - return __ret; -} -#else -__ai poly8x16_t vrev64q_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vrev64q_p16(poly16x8_t __p0) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai poly16x8_t vrev64q_p16(poly16x8_t __p0) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrev64q_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - return __ret; -} -#else -__ai uint8x16_t vrev64q_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrev64q_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai uint32x4_t vrev64q_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vrev64q_u16(uint16x8_t __p0) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai uint16x8_t vrev64q_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrev64q_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - return __ret; -} -#else -__ai int8x16_t vrev64q_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrev64q_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai float32x4_t vrev64q_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vrev64q_s32(int32x4_t __p0) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0, 3, 2); - return __ret; -} -#else -__ai int32x4_t vrev64q_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0, 3, 2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vrev64q_s16(int16x8_t __p0) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0, 7, 6, 5, 4); - return __ret; -} -#else -__ai int16x8_t vrev64q_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0, 7, 6, 5, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrev64_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#else -__ai uint8x8_t vrev64_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrev64_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0); - return __ret; -} -#else -__ai uint32x2_t vrev64_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vrev64_u16(uint16x4_t __p0) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - return __ret; -} -#else -__ai uint16x4_t vrev64_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrev64_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#else -__ai int8x8_t vrev64_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 7, 6, 5, 4, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrev64_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0); - return __ret; -} -#else -__ai float32x2_t vrev64_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vrev64_s32(int32x2_t __p0) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1, 0); - return __ret; -} -#else -__ai int32x2_t vrev64_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vrev64_s16(int16x4_t __p0) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - return __ret; -} -#else -__ai int16x4_t vrev64_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 3, 2, 1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrhaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vrhaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrhaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vrhaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vrhaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vrhaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrhaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vrhaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vrhaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vrhaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vrhaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vrhaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vrhaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vrhaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrhadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vrhadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrhadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vrhadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vrhadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vrhadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrhadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vrhadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vrhadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vrhadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vrhadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrhadd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vrhadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrhadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vrshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vrshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vrshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vrshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vrshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vrshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vrshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vrshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vrshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vrshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vrshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vrshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vrshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vrshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vrshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vrshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vrshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vrshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vrshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vrshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vrshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vrshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vrshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vrshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vrshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vrshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vrshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrshl_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vrshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 48); \ - __ret; \ -}) -#else -#define vrshrq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vrshrq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vrshrq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vrshrq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 32); \ - __ret; \ -}) -#else -#define vrshrq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vrshrq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vrshrq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vrshrq_n_v((int8x16_t)__s0, __p1, 33); \ - __ret; \ -}) -#else -#define vrshrq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vrshrq_n_v((int8x16_t)__rev0, __p1, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vrshr_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vrshr_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vrshr_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vrshr_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vrshr_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vrshr_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vrshr_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshr_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrshr_n_v((int8x8_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vrshr_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrshr_n_v((int8x8_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vrshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrsqrteq_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrsqrteq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vrsqrteq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vrsqrteq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrsqrteq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrsqrteq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrsqrteq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrsqrteq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrsqrte_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrsqrte_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vrsqrte_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrsqrte_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrsqrte_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrsqrte_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrsqrte_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrsqrte_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrsqrtsq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrsqrtsq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vrsqrtsq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrsqrtsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrsqrts_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrsqrts_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vrsqrts_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrsqrts_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vrsraq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vrsraq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vrsraq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vrsraq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vrsraq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vrsraq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vrsraq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsraq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vrsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vrsraq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vrsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vrsra_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vrsra_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vrsra_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vrsra_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vrsra_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vrsra_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vrsra_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsra_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vrsra_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vrsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vrsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vrsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vrsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vrsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vrsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vrsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vrsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vrsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vrsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vrsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vrsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vrsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vrsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vrsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vrsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vrsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsetq_lane_i8(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vsetq_lane_f32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vsetq_lane_f32(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vsetq_lane_f32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsetq_lane_i32(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsetq_lane_i16(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#define __noswap_vset_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vset_lane_i8(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vset_lane_f32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vset_lane_f32(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vset_lane_f32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vset_lane_i32(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#define __noswap_vset_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vset_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vset_lane_i16(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vshlq_u8(uint8x16_t __p0, int8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vshlq_u32(uint32x4_t __p0, int32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vshlq_u64(uint64x2_t __p0, int64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vshlq_u16(uint16x8_t __p0, int16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vshlq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vshlq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vshlq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vshlq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vshlq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vshlq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vshl_u8(uint8x8_t __p0, int8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vshl_u32(uint32x2_t __p0, int32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vshl_u64(uint64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vshl_u16(uint16x4_t __p0, int16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vshl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vshl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vshl_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vshl_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vshl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vshl_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 48); \ - __ret; \ -}) -#else -#define vshlq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vshlq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vshlq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vshlq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 32); \ - __ret; \ -}) -#else -#define vshlq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vshlq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vshlq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshlq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshlq_n_v((int8x16_t)__s0, __p1, 33); \ - __ret; \ -}) -#else -#define vshlq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshlq_n_v((int8x16_t)__rev0, __p1, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vshl_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vshl_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vshl_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vshl_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vshl_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vshl_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vshl_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshl_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshl_n_v((int8x8_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vshl_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshl_n_v((int8x8_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vshll_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 49); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vshll_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 51); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vshll_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 50); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 33); \ - __ret; \ -}) -#else -#define vshll_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 33); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vshll_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 35); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vshll_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshll_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshll_n_v((int8x8_t)__s0, __p1, 34); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 48); \ - __ret; \ -}) -#else -#define vshrq_n_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 50); \ - __ret; \ -}) -#else -#define vshrq_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vshrq_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 49); \ - __ret; \ -}) -#else -#define vshrq_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 32); \ - __ret; \ -}) -#else -#define vshrq_n_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 34); \ - __ret; \ -}) -#else -#define vshrq_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vshrq_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 33); \ - __ret; \ -}) -#else -#define vshrq_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vshrq_n_v((int8x16_t)__rev0, __p1, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vshr_n_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vshr_n_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vshr_n_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vshr_n_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vshr_n_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vshr_n_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vshr_n_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshr_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshr_n_v((int8x8_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vshr_n_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshr_n_v((int8x8_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#else -#define vshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 17); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#else -#define vshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 18); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#else -#define vshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 16); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#else -#define vshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#else -#define vshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#else -#define vshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__rev0, __p1, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vshrn_n_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vshrn_n_v((int8x16_t)__s0, __p1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 4); \ - __ret; \ -}) -#else -#define vsli_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 5); \ - __ret; \ -}) -#else -#define vsli_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 36); \ - __ret; \ -}) -#else -#define vsliq_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 37); \ - __ret; \ -}) -#else -#define vsliq_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vsliq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vsliq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vsliq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vsliq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vsliq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vsliq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vsliq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vsliq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vsli_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vsli_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vsli_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vsli_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vsli_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vsli_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vsli_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vsli_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsli_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vsraq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vsraq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vsraq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vsraq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vsraq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vsraq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vsraq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsraq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsraq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vsraq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsraq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vsra_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vsra_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vsra_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vsra_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vsra_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vsra_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vsra_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsra_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsra_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vsra_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsra_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 4); \ - __ret; \ -}) -#else -#define vsri_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = (poly8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 4); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 5); \ - __ret; \ -}) -#else -#define vsri_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = (poly16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 5); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 36); \ - __ret; \ -}) -#else -#define vsriq_n_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = (poly8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 36); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 37); \ - __ret; \ -}) -#else -#define vsriq_n_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = (poly16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 37); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 48); \ - __ret; \ -}) -#else -#define vsriq_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = (uint8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 48); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 50); \ - __ret; \ -}) -#else -#define vsriq_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = (uint32x4_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 50); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 51); \ - __ret; \ -}) -#else -#define vsriq_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 49); \ - __ret; \ -}) -#else -#define vsriq_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = (uint16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 49); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 32); \ - __ret; \ -}) -#else -#define vsriq_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = (int8x16_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 32); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 34); \ - __ret; \ -}) -#else -#define vsriq_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = (int32x4_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 34); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 35); \ - __ret; \ -}) -#else -#define vsriq_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 33); \ - __ret; \ -}) -#else -#define vsriq_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = (int16x8_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 33); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 16); \ - __ret; \ -}) -#else -#define vsri_n_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = (uint8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 16); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 18); \ - __ret; \ -}) -#else -#define vsri_n_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __ret; \ - __ret = (uint32x2_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 18); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#else -#define vsri_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64x1_t __s1 = __p1; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 17); \ - __ret; \ -}) -#else -#define vsri_n_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = (uint16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 17); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 0); \ - __ret; \ -}) -#else -#define vsri_n_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = (int8x8_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 0); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 2); \ - __ret; \ -}) -#else -#define vsri_n_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __ret; \ - __ret = (int32x2_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#else -#define vsri_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64x1_t __s1 = __p1; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 1); \ - __ret; \ -}) -#else -#define vsri_n_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = (int16x4_t) __builtin_neon_vsri_n_v((int8x8_t)__rev0, (int8x8_t)__rev1, __p2, 1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 4); \ -}) -#else -#define vst1_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 5); \ -}) -#else -#define vst1_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 36); \ -}) -#else -#define vst1q_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 37); \ -}) -#else -#define vst1q_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 48); \ -}) -#else -#define vst1q_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 50); \ -}) -#else -#define vst1q_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 51); \ -}) -#else -#define vst1q_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 49); \ -}) -#else -#define vst1q_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 32); \ -}) -#else -#define vst1q_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 41); \ -}) -#else -#define vst1q_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 40); \ -}) -#else -#define vst1q_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - float16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 34); \ -}) -#else -#define vst1q_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 35); \ -}) -#else -#define vst1q_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 33); \ -}) -#else -#define vst1q_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 16); \ -}) -#else -#define vst1_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 18); \ -}) -#else -#define vst1_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 19); \ -}) -#else -#define vst1_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 17); \ -}) -#else -#define vst1_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 0); \ -}) -#else -#define vst1_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 9); \ -}) -#else -#define vst1_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 8); \ -}) -#else -#define vst1_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - float16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 2); \ -}) -#else -#define vst1_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 3); \ -}) -#else -#define vst1_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 1); \ -}) -#else -#define vst1_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__rev1, 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 4); \ -}) -#else -#define vst1_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8_t __s1 = __p1; \ - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 5); \ -}) -#else -#define vst1_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4_t __s1 = __p1; \ - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 36); \ -}) -#else -#define vst1q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16_t __s1 = __p1; \ - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 37); \ -}) -#else -#define vst1q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8_t __s1 = __p1; \ - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 48); \ -}) -#else -#define vst1q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16_t __s1 = __p1; \ - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 50); \ -}) -#else -#define vst1q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 51); \ -}) -#else -#define vst1q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2_t __s1 = __p1; \ - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 49); \ -}) -#else -#define vst1q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 32); \ -}) -#else -#define vst1q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16_t __s1 = __p1; \ - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 41); \ -}) -#else -#define vst1q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 40); \ -}) -#else -#define vst1q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8_t __s1 = __p1; \ - float16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 34); \ -}) -#else -#define vst1q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 35); \ -}) -#else -#define vst1q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2_t __s1 = __p1; \ - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 33); \ -}) -#else -#define vst1q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 16); \ -}) -#else -#define vst1_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8_t __s1 = __p1; \ - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 18); \ -}) -#else -#define vst1_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 19); \ -}) -#else -#define vst1_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 17); \ -}) -#else -#define vst1_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 0); \ -}) -#else -#define vst1_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8_t __s1 = __p1; \ - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 9); \ -}) -#else -#define vst1_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 8); \ -}) -#else -#define vst1_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4_t __s1 = __p1; \ - float16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 2); \ -}) -#else -#define vst1_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s1 = __p1; \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 3); \ -}) -#else -#define vst1_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 1); \ -}) -#else -#define vst1_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s1 = __p1; \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__rev1, __p2, 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_p8(__p0, __p1) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 4); \ -}) -#else -#define vst2_p8(__p0, __p1) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - poly8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_p16(__p0, __p1) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 5); \ -}) -#else -#define vst2_p16(__p0, __p1) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - poly16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 36); \ -}) -#else -#define vst2q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - poly8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 37); \ -}) -#else -#define vst2q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - poly16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 48); \ -}) -#else -#define vst2q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - uint8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 50); \ -}) -#else -#define vst2q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - uint32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 49); \ -}) -#else -#define vst2q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - uint16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_s8(__p0, __p1) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 32); \ -}) -#else -#define vst2q_s8(__p0, __p1) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - int8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_f32(__p0, __p1) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 41); \ -}) -#else -#define vst2q_f32(__p0, __p1) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - float32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_f16(__p0, __p1) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 40); \ -}) -#else -#define vst2q_f16(__p0, __p1) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - float16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_s32(__p0, __p1) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 34); \ -}) -#else -#define vst2q_s32(__p0, __p1) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - int32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_s16(__p0, __p1) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 33); \ -}) -#else -#define vst2q_s16(__p0, __p1) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - int16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_u8(__p0, __p1) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 16); \ -}) -#else -#define vst2_u8(__p0, __p1) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - uint8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_u32(__p0, __p1) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 18); \ -}) -#else -#define vst2_u32(__p0, __p1) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - uint32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_u64(__p0, __p1) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 19); \ -}) -#else -#define vst2_u64(__p0, __p1) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_u16(__p0, __p1) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 17); \ -}) -#else -#define vst2_u16(__p0, __p1) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - uint16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_s8(__p0, __p1) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 0); \ -}) -#else -#define vst2_s8(__p0, __p1) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - int8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_f32(__p0, __p1) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 9); \ -}) -#else -#define vst2_f32(__p0, __p1) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - float32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_v(__p0, __rev1.val[0], __rev1.val[1], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_f16(__p0, __p1) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 8); \ -}) -#else -#define vst2_f16(__p0, __p1) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - float16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, __rev1.val[0], __rev1.val[1], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_s32(__p0, __p1) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 2); \ -}) -#else -#define vst2_s32(__p0, __p1) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - int32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_v(__p0, __rev1.val[0], __rev1.val[1], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_s64(__p0, __p1) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 3); \ -}) -#else -#define vst2_s64(__p0, __p1) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_s16(__p0, __p1) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 1); \ -}) -#else -#define vst2_s16(__p0, __p1) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - int16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_v(__p0, __rev1.val[0], __rev1.val[1], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 4); \ -}) -#else -#define vst2_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - poly8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 5); \ -}) -#else -#define vst2_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - poly16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 37); \ -}) -#else -#define vst2q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - poly16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 50); \ -}) -#else -#define vst2q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - uint32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 49); \ -}) -#else -#define vst2q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - uint16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 41); \ -}) -#else -#define vst2q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - float32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 40); \ -}) -#else -#define vst2q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - float16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 34); \ -}) -#else -#define vst2q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - int32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 33); \ -}) -#else -#define vst2q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - int16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 16); \ -}) -#else -#define vst2_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - uint8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 18); \ -}) -#else -#define vst2_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - uint32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 17); \ -}) -#else -#define vst2_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - uint16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 0); \ -}) -#else -#define vst2_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - int8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], __p2, 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 9); \ -}) -#else -#define vst2_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - float32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 8); \ -}) -#else -#define vst2_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - float16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 2); \ -}) -#else -#define vst2_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - int32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 1); \ -}) -#else -#define vst2_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - int16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst2_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_p8(__p0, __p1) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 4); \ -}) -#else -#define vst3_p8(__p0, __p1) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - poly8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_p16(__p0, __p1) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 5); \ -}) -#else -#define vst3_p16(__p0, __p1) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - poly16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 36); \ -}) -#else -#define vst3q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - poly8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 37); \ -}) -#else -#define vst3q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - poly16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 48); \ -}) -#else -#define vst3q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - uint8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 50); \ -}) -#else -#define vst3q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - uint32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 49); \ -}) -#else -#define vst3q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - uint16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_s8(__p0, __p1) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 32); \ -}) -#else -#define vst3q_s8(__p0, __p1) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - int8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_f32(__p0, __p1) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 41); \ -}) -#else -#define vst3q_f32(__p0, __p1) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - float32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_f16(__p0, __p1) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 40); \ -}) -#else -#define vst3q_f16(__p0, __p1) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - float16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_s32(__p0, __p1) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 34); \ -}) -#else -#define vst3q_s32(__p0, __p1) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - int32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_s16(__p0, __p1) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 33); \ -}) -#else -#define vst3q_s16(__p0, __p1) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - int16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_u8(__p0, __p1) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 16); \ -}) -#else -#define vst3_u8(__p0, __p1) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - uint8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_u32(__p0, __p1) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 18); \ -}) -#else -#define vst3_u32(__p0, __p1) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - uint32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_u64(__p0, __p1) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 19); \ -}) -#else -#define vst3_u64(__p0, __p1) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_u16(__p0, __p1) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 17); \ -}) -#else -#define vst3_u16(__p0, __p1) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - uint16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_s8(__p0, __p1) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 0); \ -}) -#else -#define vst3_s8(__p0, __p1) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - int8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_f32(__p0, __p1) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 9); \ -}) -#else -#define vst3_f32(__p0, __p1) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - float32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_f16(__p0, __p1) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 8); \ -}) -#else -#define vst3_f16(__p0, __p1) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - float16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_s32(__p0, __p1) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 2); \ -}) -#else -#define vst3_s32(__p0, __p1) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - int32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_s64(__p0, __p1) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 3); \ -}) -#else -#define vst3_s64(__p0, __p1) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_s16(__p0, __p1) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 1); \ -}) -#else -#define vst3_s16(__p0, __p1) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - int16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 4); \ -}) -#else -#define vst3_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - poly8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 5); \ -}) -#else -#define vst3_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - poly16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 37); \ -}) -#else -#define vst3q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - poly16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 50); \ -}) -#else -#define vst3q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - uint32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 49); \ -}) -#else -#define vst3q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - uint16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 41); \ -}) -#else -#define vst3q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - float32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 40); \ -}) -#else -#define vst3q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - float16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 34); \ -}) -#else -#define vst3q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - int32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 33); \ -}) -#else -#define vst3q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - int16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 16); \ -}) -#else -#define vst3_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - uint8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 18); \ -}) -#else -#define vst3_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - uint32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 17); \ -}) -#else -#define vst3_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - uint16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 0); \ -}) -#else -#define vst3_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - int8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], __p2, 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 9); \ -}) -#else -#define vst3_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - float32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 8); \ -}) -#else -#define vst3_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - float16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 2); \ -}) -#else -#define vst3_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - int32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 1); \ -}) -#else -#define vst3_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - int16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst3_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_p8(__p0, __p1) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 4); \ -}) -#else -#define vst4_p8(__p0, __p1) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - poly8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_p16(__p0, __p1) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 5); \ -}) -#else -#define vst4_p16(__p0, __p1) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - poly16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 36); \ -}) -#else -#define vst4q_p8(__p0, __p1) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - poly8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 37); \ -}) -#else -#define vst4q_p16(__p0, __p1) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - poly16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 48); \ -}) -#else -#define vst4q_u8(__p0, __p1) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - uint8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 50); \ -}) -#else -#define vst4q_u32(__p0, __p1) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - uint32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 49); \ -}) -#else -#define vst4q_u16(__p0, __p1) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - uint16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_s8(__p0, __p1) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 32); \ -}) -#else -#define vst4q_s8(__p0, __p1) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - int8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_f32(__p0, __p1) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 41); \ -}) -#else -#define vst4q_f32(__p0, __p1) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - float32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_f16(__p0, __p1) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 40); \ -}) -#else -#define vst4q_f16(__p0, __p1) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - float16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_s32(__p0, __p1) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 34); \ -}) -#else -#define vst4q_s32(__p0, __p1) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - int32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_s16(__p0, __p1) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 33); \ -}) -#else -#define vst4q_s16(__p0, __p1) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - int16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_u8(__p0, __p1) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 16); \ -}) -#else -#define vst4_u8(__p0, __p1) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - uint8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_u32(__p0, __p1) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 18); \ -}) -#else -#define vst4_u32(__p0, __p1) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - uint32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_u64(__p0, __p1) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 19); \ -}) -#else -#define vst4_u64(__p0, __p1) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_u16(__p0, __p1) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 17); \ -}) -#else -#define vst4_u16(__p0, __p1) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - uint16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_s8(__p0, __p1) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 0); \ -}) -#else -#define vst4_s8(__p0, __p1) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - int8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_f32(__p0, __p1) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 9); \ -}) -#else -#define vst4_f32(__p0, __p1) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - float32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_f16(__p0, __p1) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 8); \ -}) -#else -#define vst4_f16(__p0, __p1) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - float16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_s32(__p0, __p1) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 2); \ -}) -#else -#define vst4_s32(__p0, __p1) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - int32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_s64(__p0, __p1) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 3); \ -}) -#else -#define vst4_s64(__p0, __p1) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_s16(__p0, __p1) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 1); \ -}) -#else -#define vst4_s16(__p0, __p1) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - int16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 4); \ -}) -#else -#define vst4_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - poly8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 5); \ -}) -#else -#define vst4_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - poly16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 37); \ -}) -#else -#define vst4q_lane_p16(__p0, __p1, __p2) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - poly16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 50); \ -}) -#else -#define vst4q_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - uint32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 49); \ -}) -#else -#define vst4q_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - uint16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 41); \ -}) -#else -#define vst4q_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - float32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 40); \ -}) -#else -#define vst4q_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - float16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 34); \ -}) -#else -#define vst4q_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - int32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 33); \ -}) -#else -#define vst4q_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - int16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 16); \ -}) -#else -#define vst4_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - uint8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 18); \ -}) -#else -#define vst4_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - uint32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 17); \ -}) -#else -#define vst4_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - uint16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 0); \ -}) -#else -#define vst4_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - int8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], __p2, 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 9); \ -}) -#else -#define vst4_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - float32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 8); \ -}) -#else -#define vst4_lane_f16(__p0, __p1, __p2) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - float16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 2); \ -}) -#else -#define vst4_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - int32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 1); \ -}) -#else -#define vst4_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - int16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst4_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint8x16_t vsubq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint32x4_t vsubq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsubq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint64x2_t vsubq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint16x8_t vsubq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int8x16_t vsubq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vsubq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai float32x4_t vsubq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int32x4_t vsubq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vsubq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int64x2_t vsubq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int16x8_t vsubq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint8x8_t vsub_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint32x2_t vsub_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vsub_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint64x1_t vsub_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai uint16x4_t vsub_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int8x8_t vsub_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vsub_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai float32x2_t vsub_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int32x2_t vsub_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vsub_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int64x1_t vsub_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai int16x4_t vsub_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint16x4_t __noswap_vsubhn_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 17); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint32x2_t __noswap_vsubhn_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 18); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint8x8_t __noswap_vsubhn_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 16); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int16x4_t __noswap_vsubhn_s32(int32x4_t __p0, int32x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int32x2_t __noswap_vsubhn_s64(int64x2_t __p0, int64x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__rev0, (int8x16_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int8x8_t __noswap_vsubhn_s16(int16x8_t __p0, int16x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vsubhn_v((int8x16_t)__p0, (int8x16_t)__p1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = vmovl_u8(__p0) - vmovl_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vsubl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmovl_u8(__rev0) - __noswap_vmovl_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsubl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = vmovl_u32(__p0) - vmovl_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vsubl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmovl_u32(__rev0) - __noswap_vmovl_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = vmovl_u16(__p0) - vmovl_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vsubl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmovl_u16(__rev0) - __noswap_vmovl_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubl_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = vmovl_s8(__p0) - vmovl_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vsubl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmovl_s8(__rev0) - __noswap_vmovl_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vsubl_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = vmovl_s32(__p0) - vmovl_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vsubl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmovl_s32(__rev0) - __noswap_vmovl_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubl_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = vmovl_s16(__p0) - vmovl_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vsubl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmovl_s16(__rev0) - __noswap_vmovl_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubw_u8(uint16x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 - vmovl_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vsubw_u8(uint16x8_t __p0, uint8x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __noswap_vmovl_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsubw_u32(uint64x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 - vmovl_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vsubw_u32(uint64x2_t __p0, uint32x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 - __noswap_vmovl_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubw_u16(uint32x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 - vmovl_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vsubw_u16(uint32x4_t __p0, uint16x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __noswap_vmovl_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubw_s8(int16x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = __p0 - vmovl_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vsubw_s8(int16x8_t __p0, int8x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __noswap_vmovl_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vsubw_s32(int64x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = __p0 - vmovl_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vsubw_s32(int64x2_t __p0, int32x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 - __noswap_vmovl_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubw_s16(int32x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = __p0 - vmovl_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vsubw_s16(int32x4_t __p0, int16x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __noswap_vmovl_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbl1_p8(poly8x8_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vtbl1_p8(poly8x8_t __p0, uint8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__rev0, (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbl1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtbl1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbl1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vtbl1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl1_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbl2_p8(poly8x8x2_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vtbl2_p8(poly8x8x2_t __p0, uint8x8_t __p1) { - poly8x8x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbl2_u8(uint8x8x2_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtbl2_u8(uint8x8x2_t __p0, uint8x8_t __p1) { - uint8x8x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbl2_s8(int8x8x2_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vtbl2_s8(int8x8x2_t __p0, int8x8_t __p1) { - int8x8x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl2_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbl3_p8(poly8x8x3_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vtbl3_p8(poly8x8x3_t __p0, uint8x8_t __p1) { - poly8x8x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbl3_u8(uint8x8x3_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtbl3_u8(uint8x8x3_t __p0, uint8x8_t __p1) { - uint8x8x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbl3_s8(int8x8x3_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vtbl3_s8(int8x8x3_t __p0, int8x8_t __p1) { - int8x8x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl3_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbl4_p8(poly8x8x4_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p0.val[3], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vtbl4_p8(poly8x8x4_t __p0, uint8x8_t __p1) { - poly8x8x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev0.val[3], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbl4_u8(uint8x8x4_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p0.val[3], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtbl4_u8(uint8x8x4_t __p0, uint8x8_t __p1) { - uint8x8x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev0.val[3], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbl4_s8(int8x8x4_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__p0.val[0], (int8x8_t)__p0.val[1], (int8x8_t)__p0.val[2], (int8x8_t)__p0.val[3], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vtbl4_s8(int8x8x4_t __p0, int8x8_t __p1) { - int8x8x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbl4_v((int8x8_t)__rev0.val[0], (int8x8_t)__rev0.val[1], (int8x8_t)__rev0.val[2], (int8x8_t)__rev0.val[3], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbx1_p8(poly8x8_t __p0, poly8x8_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vtbx1_p8(poly8x8_t __p0, poly8x8_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbx1_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vtbx1_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbx1_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vtbx1_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx1_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbx2_p8(poly8x8_t __p0, poly8x8x2_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vtbx2_p8(poly8x8_t __p0, poly8x8x2_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbx2_u8(uint8x8_t __p0, uint8x8x2_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vtbx2_u8(uint8x8_t __p0, uint8x8x2_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbx2_s8(int8x8_t __p0, int8x8x2_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vtbx2_s8(int8x8_t __p0, int8x8x2_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx2_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbx3_p8(poly8x8_t __p0, poly8x8x3_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vtbx3_p8(poly8x8_t __p0, poly8x8x3_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbx3_u8(uint8x8_t __p0, uint8x8x3_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vtbx3_u8(uint8x8_t __p0, uint8x8x3_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbx3_s8(int8x8_t __p0, int8x8x3_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vtbx3_s8(int8x8_t __p0, int8x8x3_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx3_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtbx4_p8(poly8x8_t __p0, poly8x8x4_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p1.val[3], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vtbx4_p8(poly8x8_t __p0, poly8x8x4_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtbx4_u8(uint8x8_t __p0, uint8x8x4_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p1.val[3], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vtbx4_u8(uint8x8_t __p0, uint8x8x4_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtbx4_s8(int8x8_t __p0, int8x8x4_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__p0, (int8x8_t)__p1.val[0], (int8x8_t)__p1.val[1], (int8x8_t)__p1.val[2], (int8x8_t)__p1.val[3], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vtbx4_s8(int8x8_t __p0, int8x8x4_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vtbx4_v((int8x8_t)__rev0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8x2_t vtrn_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8x2_t vtrn_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 4); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4x2_t vtrn_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 5); - return __ret; -} -#else -__ai poly16x4x2_t vtrn_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 5); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16x2_t vtrnq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16x2_t vtrnq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 36); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8x2_t vtrnq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 37); - return __ret; -} -#else -__ai poly16x8x2_t vtrnq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 37); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16x2_t vtrnq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16x2_t vtrnq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 48); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4x2_t vtrnq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4x2_t vtrnq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 50); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8x2_t vtrnq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8x2_t vtrnq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 49); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16x2_t vtrnq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16x2_t vtrnq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 32); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4x2_t vtrnq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4x2_t vtrnq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 41); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4x2_t vtrnq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4x2_t vtrnq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 34); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8x2_t vtrnq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8x2_t vtrnq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8x2_t __ret; - __builtin_neon_vtrnq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 33); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8x2_t vtrn_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8x2_t vtrn_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 16); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2x2_t vtrn_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2x2_t vtrn_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 18); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4x2_t vtrn_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4x2_t vtrn_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 17); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8x2_t vtrn_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8x2_t vtrn_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 0); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2x2_t vtrn_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2x2_t vtrn_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 9); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2x2_t vtrn_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2x2_t vtrn_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 2); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4x2_t vtrn_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4x2_t vtrn_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4x2_t __ret; - __builtin_neon_vtrn_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 1); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtst_p8(poly8x8_t __p0, poly8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtst_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vtst_p16(poly16x4_t __p0, poly16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vtst_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vtstq_p8(poly8x16_t __p0, poly8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vtstq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vtstq_p16(poly16x8_t __p0, poly16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vtstq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vtstq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vtstq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vtstq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vtstq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vtstq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vtstq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vtstq_s8(int8x16_t __p0, int8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vtstq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vtstq_s32(int32x4_t __p0, int32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vtstq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vtstq_s16(int16x8_t __p0, int16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vtstq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtst_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtst_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vtst_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vtst_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vtst_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vtst_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtst_s8(int8x8_t __p0, int8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vtst_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vtst_s32(int32x2_t __p0, int32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vtst_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vtst_s16(int16x4_t __p0, int16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vtst_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vtst_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8x2_t vuzp_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8x2_t vuzp_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 4); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4x2_t vuzp_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 5); - return __ret; -} -#else -__ai poly16x4x2_t vuzp_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 5); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16x2_t vuzpq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16x2_t vuzpq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 36); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8x2_t vuzpq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 37); - return __ret; -} -#else -__ai poly16x8x2_t vuzpq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 37); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16x2_t vuzpq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16x2_t vuzpq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 48); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4x2_t vuzpq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4x2_t vuzpq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 50); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8x2_t vuzpq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8x2_t vuzpq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 49); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16x2_t vuzpq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16x2_t vuzpq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 32); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4x2_t vuzpq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4x2_t vuzpq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 41); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4x2_t vuzpq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4x2_t vuzpq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 34); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8x2_t vuzpq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8x2_t vuzpq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8x2_t __ret; - __builtin_neon_vuzpq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 33); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8x2_t vuzp_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8x2_t vuzp_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 16); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2x2_t vuzp_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2x2_t vuzp_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 18); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4x2_t vuzp_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4x2_t vuzp_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 17); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8x2_t vuzp_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8x2_t vuzp_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 0); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2x2_t vuzp_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2x2_t vuzp_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 9); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2x2_t vuzp_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2x2_t vuzp_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 2); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4x2_t vuzp_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4x2_t vuzp_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4x2_t __ret; - __builtin_neon_vuzp_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 1); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8x2_t vzip_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8x2_t vzip_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 4); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4x2_t vzip_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 5); - return __ret; -} -#else -__ai poly16x4x2_t vzip_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 5); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16x2_t vzipq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16x2_t vzipq_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 36); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8x2_t vzipq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 37); - return __ret; -} -#else -__ai poly16x8x2_t vzipq_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 37); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16x2_t vzipq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16x2_t vzipq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 48); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4x2_t vzipq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4x2_t vzipq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 50); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8x2_t vzipq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8x2_t vzipq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 49); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16x2_t vzipq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16x2_t vzipq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 32); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4x2_t vzipq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4x2_t vzipq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 41); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4x2_t vzipq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4x2_t vzipq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 34); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8x2_t vzipq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8x2_t vzipq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8x2_t __ret; - __builtin_neon_vzipq_v(&__ret, (int8x16_t)__rev0, (int8x16_t)__rev1, 33); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8x2_t vzip_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8x2_t vzip_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 16); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2x2_t vzip_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2x2_t vzip_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 18); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4x2_t vzip_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4x2_t vzip_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 17); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8x2_t vzip_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8x2_t vzip_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 0); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2x2_t vzip_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2x2_t vzip_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 9); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2x2_t vzip_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2x2_t vzip_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 2); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4x2_t vzip_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4x2_t vzip_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4x2_t __ret; - __builtin_neon_vzip_v(&__ret, (int8x8_t)__rev0, (int8x8_t)__rev1, 1); - - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); - return __ret; -} -#endif - -#if !defined(__aarch64__) -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_p16(poly16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_p16(poly16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u8(uint8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u8(uint8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u32(uint32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u32(uint32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u64(uint64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u64(uint64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u16(uint16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u16(uint16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s8(int8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s8(int8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_f32(float32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_f32(float32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_f16(float16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_f16(float16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s32(int32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s32(int32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s64(int64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s64(int64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s16(int16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s16(int16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_p8(poly8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_p8(poly8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u8(uint8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u8(uint8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u32(uint32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u32(uint32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u64(uint64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u64(uint64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u16(uint16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u16(uint16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s8(int8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s8(int8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_f32(float32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_f32(float32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_f16(float16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_f16(float16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s32(int32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s32(int32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s64(int64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s64(int64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s16(int16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s16(int16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_p16(poly16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_p16(poly16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u8(uint8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u8(uint8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u32(uint32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u32(uint32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u64(uint64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u64(uint64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u16(uint16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u16(uint16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s8(int8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s8(int8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_f32(float32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_f32(float32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_f16(float16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_f16(float16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s32(int32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s32(int32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s64(int64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s64(int64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s16(int16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s16(int16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_p8(poly8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_p8(poly8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u8(uint8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u8(uint8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u32(uint32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u32(uint32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u64(uint64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u64(uint64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u16(uint16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u16(uint16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s8(int8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s8(int8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_f32(float32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_f32(float32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_f16(float16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_f16(float16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s32(int32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s32(int32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s64(int64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s64(int64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s16(int16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s16(int16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p8(poly8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p8(poly8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p16(poly16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p16(poly16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u32(uint32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u32(uint32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u64(uint64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u64(uint64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u16(uint16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u16(uint16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_f32(float32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_f32(float32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_f16(float16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_f16(float16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s32(int32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s32(int32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s64(int64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s64(int64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s16(int16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s16(int16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p8(poly8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p8(poly8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p16(poly16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p16(poly16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u8(uint8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u8(uint8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u16(uint16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u16(uint16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s8(int8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s8(int8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_f16(float16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_f16(float16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s64(int64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s64(int64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s16(int16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s16(int16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p8(poly8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p8(poly8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p16(poly16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p16(poly16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u8(uint8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u8(uint8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u32(uint32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u32(uint32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u16(uint16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u16(uint16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s8(int8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s8(int8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_f32(float32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_f32(float32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_f16(float16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_f16(float16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s32(int32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s32(int32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s16(int16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s16(int16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p8(poly8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p8(poly8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p16(poly16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p16(poly16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u8(uint8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u8(uint8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u32(uint32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u32(uint32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u64(uint64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u64(uint64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s8(int8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s8(int8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_f32(float32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_f32(float32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_f16(float16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_f16(float16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s32(int32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s32(int32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s64(int64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s64(int64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p8(poly8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p8(poly8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p16(poly16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p16(poly16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u8(uint8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u8(uint8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u32(uint32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u32(uint32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u64(uint64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u64(uint64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u16(uint16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u16(uint16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_f32(float32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_f32(float32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_f16(float16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_f16(float16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s32(int32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s32(int32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s64(int64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s64(int64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s16(int16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s16(int16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p8(poly8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p8(poly8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p16(poly16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p16(poly16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u8(uint8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u8(uint8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u32(uint32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u32(uint32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u64(uint64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u64(uint64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u16(uint16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u16(uint16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s8(int8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s8(int8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_f16(float16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_f16(float16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s32(int32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s32(int32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s64(int64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s64(int64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s16(int16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s16(int16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p8(poly8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p8(poly8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p16(poly16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p16(poly16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u8(uint8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u8(uint8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u32(uint32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u32(uint32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u64(uint64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u64(uint64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u16(uint16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u16(uint16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s8(int8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s8(int8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_f32(float32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_f32(float32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s32(int32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s32(int32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s64(int64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s64(int64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s16(int16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s16(int16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p8(poly8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p8(poly8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p16(poly16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p16(poly16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u8(uint8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u8(uint8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u32(uint32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u32(uint32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u64(uint64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u64(uint64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u16(uint16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u16(uint16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s8(int8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s8(int8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_f16(float16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_f16(float16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s64(int64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s64(int64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s16(int16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s16(int16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p8(poly8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p8(poly8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p16(poly16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p16(poly16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u8(uint8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u8(uint8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u32(uint32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u32(uint32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u64(uint64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u64(uint64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u16(uint16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u16(uint16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s8(int8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s8(int8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_f32(float32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_f32(float32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_f16(float16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_f16(float16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s32(int32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s32(int32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s16(int16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s16(int16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p8(poly8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p8(poly8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p16(poly16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p16(poly16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u8(uint8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u8(uint8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u32(uint32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u32(uint32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u64(uint64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u64(uint64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u16(uint16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u16(uint16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s8(int8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s8(int8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_f32(float32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_f32(float32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_f16(float16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_f16(float16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s32(int32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s32(int32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s64(int64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s64(int64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_p8(poly8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_p8(poly8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_p16(poly16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_p16(poly16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u32(uint32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u32(uint32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u64(uint64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u64(uint64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u16(uint16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u16(uint16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_f32(float32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_f32(float32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_f16(float16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_f16(float16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s32(int32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s32(int32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s64(int64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s64(int64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s16(int16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s16(int16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_p8(poly8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_p8(poly8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_p16(poly16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_p16(poly16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u8(uint8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u8(uint8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u64(uint64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u64(uint64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u16(uint16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u16(uint16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s8(int8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s8(int8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_f16(float16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_f16(float16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s64(int64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s64(int64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s16(int16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s16(int16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_p8(poly8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_p8(poly8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_p16(poly16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_p16(poly16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u8(uint8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u8(uint8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u32(uint32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u32(uint32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u16(uint16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u16(uint16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s8(int8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s8(int8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_f32(float32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_f32(float32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_f16(float16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_f16(float16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s32(int32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s32(int32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s16(int16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s16(int16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_p8(poly8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_p8(poly8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_p16(poly16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_p16(poly16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u8(uint8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u8(uint8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u32(uint32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u32(uint32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u64(uint64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u64(uint64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s8(int8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s8(int8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_f32(float32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_f32(float32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_f16(float16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_f16(float16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s32(int32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s32(int32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s64(int64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s64(int64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_p8(poly8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_p8(poly8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_p16(poly16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_p16(poly16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u8(uint8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u8(uint8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u32(uint32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u32(uint32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u64(uint64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u64(uint64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u16(uint16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u16(uint16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_f32(float32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_f32(float32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_f16(float16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_f16(float16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s32(int32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s32(int32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s64(int64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s64(int64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s16(int16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s16(int16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_p8(poly8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_p8(poly8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_p16(poly16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_p16(poly16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u8(uint8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u8(uint8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u32(uint32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u32(uint32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u64(uint64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u64(uint64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u16(uint16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u16(uint16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s8(int8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s8(int8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_f16(float16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_f16(float16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s32(int32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s32(int32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s64(int64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s64(int64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s16(int16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s16(int16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_p8(poly8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_p8(poly8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_p16(poly16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_p16(poly16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u8(uint8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u8(uint8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u32(uint32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u32(uint32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u64(uint64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u64(uint64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u16(uint16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u16(uint16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s8(int8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s8(int8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_f32(float32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_f32(float32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s32(int32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s32(int32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s64(int64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s64(int64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s16(int16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s16(int16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_p8(poly8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_p8(poly8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_p16(poly16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_p16(poly16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u8(uint8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u8(uint8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u32(uint32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u32(uint32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u64(uint64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u64(uint64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u16(uint16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u16(uint16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s8(int8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s8(int8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_f16(float16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_f16(float16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s64(int64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s64(int64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s16(int16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s16(int16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_p8(poly8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_p8(poly8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_p16(poly16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_p16(poly16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u8(uint8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u8(uint8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u32(uint32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u32(uint32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u64(uint64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u64(uint64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u16(uint16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u16(uint16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s8(int8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s8(int8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_f32(float32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_f32(float32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_f16(float16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_f16(float16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s32(int32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s32(int32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s16(int16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s16(int16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_p8(poly8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_p8(poly8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_p16(poly16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_p16(poly16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u8(uint8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u8(uint8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u32(uint32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u32(uint32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u64(uint64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u64(uint64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u16(uint16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u16(uint16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s8(int8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s8(int8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_f32(float32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_f32(float32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_f16(float16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_f16(float16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s32(int32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s32(int32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s64(int64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s64(int64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcvtaq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtaq_s32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vcvtaq_s32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtaq_s32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcvta_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvta_s32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcvta_s32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvta_s32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcvtaq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtaq_u32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcvtaq_u32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtaq_u32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcvta_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvta_u32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcvta_u32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvta_u32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcvtmq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtmq_s32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vcvtmq_s32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtmq_s32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcvtm_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtm_s32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcvtm_s32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtm_s32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcvtmq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtmq_u32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcvtmq_u32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtmq_u32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcvtm_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtm_u32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcvtm_u32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtm_u32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcvtnq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtnq_s32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vcvtnq_s32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtnq_s32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcvtn_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtn_s32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcvtn_s32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtn_s32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcvtnq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtnq_u32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcvtnq_u32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtnq_u32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcvtn_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtn_u32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcvtn_u32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtn_u32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vcvtpq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtpq_s32_v((int8x16_t)__p0, 34); - return __ret; -} -#else -__ai int32x4_t vcvtpq_s32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vcvtpq_s32_v((int8x16_t)__rev0, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vcvtp_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtp_s32_v((int8x8_t)__p0, 2); - return __ret; -} -#else -__ai int32x2_t vcvtp_s32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vcvtp_s32_v((int8x8_t)__rev0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcvtpq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtpq_u32_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcvtpq_u32_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcvtpq_u32_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcvtp_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtp_u32_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcvtp_u32_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcvtp_u32_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrnd_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrnd_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrnd_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrnd_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndaq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndaq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndaq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndaq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrnda_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrnda_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrnda_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrnda_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndmq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndmq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndmq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndmq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrndm_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndm_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrndm_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndm_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndnq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndnq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndnq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndnq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrndn_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndn_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrndn_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndn_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndpq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndpq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndpq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndpq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrndp_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndp_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrndp_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndp_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndxq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndxq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndxq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndxq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrndx_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndx_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrndx_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndx_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 && defined(__ARM_FEATURE_NUMERIC_MAXMIN) -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmaxnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmaxnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vmaxnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmaxnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmaxnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmaxnm_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vmaxnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmaxnm_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vminnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vminnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vminnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vminnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vminnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vminnm_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vminnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vminnm_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 && defined(__aarch64__) -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcvtaq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtaq_s64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vcvtaq_s64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtaq_s64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcvta_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvta_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vcvta_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvta_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcvtaq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtaq_u64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcvtaq_u64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtaq_u64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcvta_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvta_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcvta_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvta_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcvtmq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtmq_s64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vcvtmq_s64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtmq_s64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcvtm_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtm_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vcvtm_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtm_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcvtmq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtmq_u64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcvtmq_u64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtmq_u64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcvtm_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtm_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcvtm_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtm_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcvtnq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtnq_s64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vcvtnq_s64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtnq_s64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcvtn_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtn_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vcvtn_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtn_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcvtnq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtnq_u64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcvtnq_u64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtnq_u64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcvtn_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtn_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcvtn_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtn_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcvtpq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtpq_s64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vcvtpq_s64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtpq_s64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcvtp_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtp_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vcvtp_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvtp_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcvtpq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtpq_u64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcvtpq_u64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtpq_u64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcvtp_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtp_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcvtp_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvtp_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_p64(poly64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_p64(poly64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_p16(poly16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_p16(poly16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u8(uint8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u8(uint8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u32(uint32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u32(uint32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u64(uint64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u64(uint64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_u16(uint16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_u16(uint16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s8(int8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s8(int8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_f64(float64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_f64(float64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_f32(float32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_f32(float32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_f16(float16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_f16(float16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s32(int32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s32(int32x2_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s64(int64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s64(int64x1_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vreinterpret_p8_s16(int16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#else -__ai poly8x8_t vreinterpret_p8_s16(int16x4_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_p8(poly8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_p8(poly8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_p16(poly16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_p16(poly16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_u8(uint8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_u8(uint8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_u32(uint32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_u32(uint32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_u64(uint64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_u64(uint64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_u16(uint16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_u16(uint16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_s8(int8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_s8(int8x8_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_f64(float64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_f64(float64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_f32(float32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_f32(float32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_f16(float16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_f16(float16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_s32(int32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_s32(int32x2_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_s64(int64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_s64(int64x1_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vreinterpret_p64_s16(int16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vreinterpret_p64_s16(int16x4_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_p8(poly8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_p8(poly8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_p64(poly64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_p64(poly64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u8(uint8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u8(uint8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u32(uint32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u32(uint32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u64(uint64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u64(uint64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_u16(uint16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_u16(uint16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s8(int8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s8(int8x8_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_f64(float64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_f64(float64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_f32(float32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_f32(float32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_f16(float16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_f16(float16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s32(int32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s32(int32x2_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s64(int64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s64(int64x1_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vreinterpret_p16_s16(int16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#else -__ai poly16x4_t vreinterpret_p16_s16(int16x4_t __p0) { - poly16x4_t __ret; - __ret = (poly16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_p128(poly128_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_p128(poly128_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_p64(poly64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_p64(poly64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_p16(poly16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_p16(poly16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u8(uint8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u8(uint8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u32(uint32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u32(uint32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u64(uint64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u64(uint64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_u16(uint16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_u16(uint16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s8(int8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s8(int8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_f64(float64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_f64(float64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_f32(float32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_f32(float32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_f16(float16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_f16(float16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s32(int32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s32(int32x4_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s64(int64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s64(int64x2_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vreinterpretq_p8_s16(int16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#else -__ai poly8x16_t vreinterpretq_p8_s16(int16x8_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_p8(poly8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_p8(poly8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_p64(poly64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_p64(poly64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_p16(poly16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_p16(poly16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_u8(uint8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_u8(uint8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_u32(uint32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_u32(uint32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_u64(uint64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_u64(uint64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_u16(uint16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_u16(uint16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_s8(int8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_s8(int8x16_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_f64(float64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_f64(float64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_f32(float32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_f32(float32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_f16(float16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_f16(float16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_s32(int32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_s32(int32x4_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_s64(int64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_s64(int64x2_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vreinterpretq_p128_s16(int16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#else -__ai poly128_t vreinterpretq_p128_s16(int16x8_t __p0) { - poly128_t __ret; - __ret = (poly128_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_p8(poly8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_p8(poly8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_p128(poly128_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_p128(poly128_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_p16(poly16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_p16(poly16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_u8(uint8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_u8(uint8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_u32(uint32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_u32(uint32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_u64(uint64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_u64(uint64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_u16(uint16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_u16(uint16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_s8(int8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_s8(int8x16_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_f64(float64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_f64(float64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_f32(float32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_f32(float32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_f16(float16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_f16(float16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_s32(int32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_s32(int32x4_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_s64(int64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_s64(int64x2_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vreinterpretq_p64_s16(int16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#else -__ai poly64x2_t vreinterpretq_p64_s16(int16x8_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_p8(poly8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_p8(poly8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_p128(poly128_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_p128(poly128_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_p64(poly64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_p64(poly64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u8(uint8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u8(uint8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u32(uint32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u32(uint32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u64(uint64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u64(uint64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_u16(uint16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_u16(uint16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s8(int8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s8(int8x16_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_f64(float64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_f64(float64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_f32(float32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_f32(float32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_f16(float16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_f16(float16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s32(int32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s32(int32x4_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s64(int64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s64(int64x2_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vreinterpretq_p16_s16(int16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#else -__ai poly16x8_t vreinterpretq_p16_s16(int16x8_t __p0) { - poly16x8_t __ret; - __ret = (poly16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p8(poly8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p8(poly8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p128(poly128_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p128(poly128_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p64(poly64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p64(poly64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_p16(poly16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_p16(poly16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u32(uint32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u32(uint32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u64(uint64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u64(uint64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_u16(uint16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_u16(uint16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_f64(float64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_f64(float64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_f32(float32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_f32(float32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_f16(float16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_f16(float16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s32(int32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s32(int32x4_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s64(int64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s64(int64x2_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vreinterpretq_u8_s16(int16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#else -__ai uint8x16_t vreinterpretq_u8_s16(int16x8_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p8(poly8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p8(poly8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p128(poly128_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p128(poly128_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p64(poly64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p64(poly64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_p16(poly16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_p16(poly16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u8(uint8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u8(uint8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_u16(uint16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_u16(uint16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s8(int8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s8(int8x16_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_f64(float64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_f64(float64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_f16(float16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_f16(float16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s64(int64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s64(int64x2_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vreinterpretq_u32_s16(int16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#else -__ai uint32x4_t vreinterpretq_u32_s16(int16x8_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p8(poly8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p8(poly8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p128(poly128_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p128(poly128_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p64(poly64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p64(poly64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_p16(poly16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_p16(poly16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u8(uint8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u8(uint8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u32(uint32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u32(uint32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_u16(uint16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_u16(uint16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s8(int8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s8(int8x16_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_f32(float32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_f32(float32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_f16(float16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_f16(float16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s32(int32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s32(int32x4_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vreinterpretq_u64_s16(int16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#else -__ai uint64x2_t vreinterpretq_u64_s16(int16x8_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p8(poly8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p8(poly8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p128(poly128_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p128(poly128_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p64(poly64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p64(poly64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_p16(poly16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_p16(poly16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u8(uint8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u8(uint8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u32(uint32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u32(uint32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_u64(uint64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_u64(uint64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s8(int8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s8(int8x16_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_f64(float64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_f64(float64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_f32(float32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_f32(float32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_f16(float16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_f16(float16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s32(int32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s32(int32x4_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s64(int64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s64(int64x2_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vreinterpretq_u16_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#else -__ai uint16x8_t vreinterpretq_u16_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p8(poly8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p8(poly8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p128(poly128_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p128(poly128_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p64(poly64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p64(poly64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_p16(poly16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_p16(poly16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u8(uint8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u8(uint8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u32(uint32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u32(uint32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u64(uint64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u64(uint64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_u16(uint16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_u16(uint16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_f64(float64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_f64(float64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_f32(float32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_f32(float32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_f16(float16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_f16(float16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s32(int32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s32(int32x4_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s64(int64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s64(int64x2_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vreinterpretq_s8_s16(int16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#else -__ai int8x16_t vreinterpretq_s8_s16(int16x8_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_p8(poly8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_p8(poly8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_p128(poly128_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_p128(poly128_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_p64(poly64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_p64(poly64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_p16(poly16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_p16(poly16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_u8(uint8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_u8(uint8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_u32(uint32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_u32(uint32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_u64(uint64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_u64(uint64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_u16(uint16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_u16(uint16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_s8(int8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_s8(int8x16_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_f32(float32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_f32(float32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_f16(float16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_f16(float16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_s32(int32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_s32(int32x4_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_s64(int64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_s64(int64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vreinterpretq_f64_s16(int16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#else -__ai float64x2_t vreinterpretq_f64_s16(int16x8_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p8(poly8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p8(poly8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p128(poly128_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p128(poly128_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p64(poly64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p64(poly64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_p16(poly16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_p16(poly16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u8(uint8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u8(uint8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u32(uint32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u32(uint32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u64(uint64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u64(uint64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_u16(uint16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_u16(uint16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s8(int8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s8(int8x16_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_f64(float64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_f64(float64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_f16(float16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_f16(float16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s32(int32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s32(int32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s64(int64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s64(int64x2_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vreinterpretq_f32_s16(int16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#else -__ai float32x4_t vreinterpretq_f32_s16(int16x8_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p8(poly8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p8(poly8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p128(poly128_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p128(poly128_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p64(poly64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p64(poly64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_p16(poly16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_p16(poly16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u8(uint8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u8(uint8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u32(uint32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u32(uint32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u64(uint64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u64(uint64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_u16(uint16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_u16(uint16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s8(int8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s8(int8x16_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_f64(float64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_f64(float64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_f32(float32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_f32(float32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s32(int32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s32(int32x4_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s64(int64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s64(int64x2_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vreinterpretq_f16_s16(int16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#else -__ai float16x8_t vreinterpretq_f16_s16(int16x8_t __p0) { - float16x8_t __ret; - __ret = (float16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p8(poly8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p8(poly8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p128(poly128_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p128(poly128_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p64(poly64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p64(poly64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_p16(poly16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_p16(poly16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u8(uint8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u8(uint8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u32(uint32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u32(uint32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u64(uint64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u64(uint64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_u16(uint16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_u16(uint16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s8(int8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s8(int8x16_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_f64(float64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_f64(float64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_f32(float32x4_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_f16(float16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_f16(float16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s64(int64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s64(int64x2_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vreinterpretq_s32_s16(int16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#else -__ai int32x4_t vreinterpretq_s32_s16(int16x8_t __p0) { - int32x4_t __ret; - __ret = (int32x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p8(poly8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p8(poly8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p128(poly128_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p128(poly128_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p64(poly64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p64(poly64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_p16(poly16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_p16(poly16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u8(uint8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u8(uint8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u32(uint32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u32(uint32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u64(uint64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u64(uint64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_u16(uint16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_u16(uint16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s8(int8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s8(int8x16_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_f32(float32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_f32(float32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_f16(float16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_f16(float16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s32(int32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s32(int32x4_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vreinterpretq_s64_s16(int16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#else -__ai int64x2_t vreinterpretq_s64_s16(int16x8_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p8(poly8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p8(poly8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p128(poly128_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p128(poly128_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p64(poly64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p64(poly64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_p16(poly16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_p16(poly16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u8(uint8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u8(uint8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u32(uint32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u32(uint32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u64(uint64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u64(uint64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_u16(uint16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_u16(uint16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s8(int8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s8(int8x16_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_f64(float64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_f64(float64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_f32(float32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_f32(float32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_f16(float16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_f16(float16x8_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s32(int32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s32(int32x4_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vreinterpretq_s16_s64(int64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#else -__ai int16x8_t vreinterpretq_s16_s64(int64x2_t __p0) { - int16x8_t __ret; - __ret = (int16x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_p8(poly8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_p8(poly8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_p64(poly64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_p64(poly64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_p16(poly16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_p16(poly16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u32(uint32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u32(uint32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u64(uint64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u64(uint64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_u16(uint16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_u16(uint16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_f64(float64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_f64(float64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_f32(float32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_f32(float32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_f16(float16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_f16(float16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s32(int32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s32(int32x2_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s64(int64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s64(int64x1_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vreinterpret_u8_s16(int16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#else -__ai uint8x8_t vreinterpret_u8_s16(int16x4_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_p8(poly8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_p8(poly8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_p64(poly64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_p64(poly64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_p16(poly16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_p16(poly16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u8(uint8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u8(uint8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u64(uint64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u64(uint64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_u16(uint16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_u16(uint16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s8(int8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s8(int8x8_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_f64(float64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_f64(float64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_f16(float16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_f16(float16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s64(int64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s64(int64x1_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vreinterpret_u32_s16(int16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#else -__ai uint32x2_t vreinterpret_u32_s16(int16x4_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_p8(poly8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_p8(poly8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_p64(poly64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_p64(poly64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_p16(poly16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_p16(poly16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u8(uint8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u8(uint8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u32(uint32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u32(uint32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_u16(uint16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_u16(uint16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s8(int8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s8(int8x8_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_f32(float32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_f32(float32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_f16(float16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_f16(float16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s32(int32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s32(int32x2_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vreinterpret_u64_s16(int16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#else -__ai uint64x1_t vreinterpret_u64_s16(int16x4_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_p8(poly8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_p8(poly8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_p64(poly64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_p64(poly64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_p16(poly16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_p16(poly16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u8(uint8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u8(uint8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u32(uint32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u32(uint32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_u64(uint64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_u64(uint64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s8(int8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s8(int8x8_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_f64(float64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_f64(float64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_f32(float32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_f32(float32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_f16(float16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_f16(float16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s32(int32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s32(int32x2_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s64(int64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s64(int64x1_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vreinterpret_u16_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#else -__ai uint16x4_t vreinterpret_u16_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_p8(poly8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_p8(poly8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_p64(poly64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_p64(poly64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_p16(poly16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_p16(poly16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u8(uint8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u8(uint8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u32(uint32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u32(uint32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u64(uint64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u64(uint64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_u16(uint16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_u16(uint16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_f64(float64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_f64(float64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_f32(float32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_f32(float32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_f16(float16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_f16(float16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s32(int32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s32(int32x2_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s64(int64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s64(int64x1_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vreinterpret_s8_s16(int16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#else -__ai int8x8_t vreinterpret_s8_s16(int16x4_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_p8(poly8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_p8(poly8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_p64(poly64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_p64(poly64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_p16(poly16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_p16(poly16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_u8(uint8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_u8(uint8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_u32(uint32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_u32(uint32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_u64(uint64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_u64(uint64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_u16(uint16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_u16(uint16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_s8(int8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_s8(int8x8_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_f32(float32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_f32(float32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_f16(float16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_f16(float16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_s32(int32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_s32(int32x2_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_s64(int64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_s64(int64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vreinterpret_f64_s16(int16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vreinterpret_f64_s16(int16x4_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_p8(poly8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_p8(poly8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_p64(poly64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_p64(poly64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_p16(poly16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_p16(poly16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u8(uint8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u8(uint8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u32(uint32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u32(uint32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u64(uint64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u64(uint64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_u16(uint16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_u16(uint16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s8(int8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s8(int8x8_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_f64(float64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_f64(float64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_f16(float16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_f16(float16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s32(int32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s32(int32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s64(int64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s64(int64x1_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vreinterpret_f32_s16(int16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#else -__ai float32x2_t vreinterpret_f32_s16(int16x4_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_p8(poly8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_p8(poly8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_p64(poly64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_p64(poly64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_p16(poly16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_p16(poly16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u8(uint8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u8(uint8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u32(uint32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u32(uint32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u64(uint64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u64(uint64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_u16(uint16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_u16(uint16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s8(int8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s8(int8x8_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_f64(float64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_f64(float64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_f32(float32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_f32(float32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s32(int32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s32(int32x2_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s64(int64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s64(int64x1_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x4_t vreinterpret_f16_s16(int16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#else -__ai float16x4_t vreinterpret_f16_s16(int16x4_t __p0) { - float16x4_t __ret; - __ret = (float16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_p8(poly8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_p8(poly8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_p64(poly64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_p64(poly64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_p16(poly16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_p16(poly16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u8(uint8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u8(uint8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u32(uint32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u32(uint32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u64(uint64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u64(uint64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_u16(uint16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_u16(uint16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s8(int8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s8(int8x8_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_f64(float64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_f64(float64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_f32(float32x2_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_f16(float16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_f16(float16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s64(int64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s64(int64x1_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vreinterpret_s32_s16(int16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#else -__ai int32x2_t vreinterpret_s32_s16(int16x4_t __p0) { - int32x2_t __ret; - __ret = (int32x2_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_p8(poly8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_p8(poly8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_p64(poly64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_p64(poly64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_p16(poly16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_p16(poly16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u8(uint8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u8(uint8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u32(uint32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u32(uint32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u64(uint64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u64(uint64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_u16(uint16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_u16(uint16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s8(int8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s8(int8x8_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_f32(float32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_f32(float32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_f16(float16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_f16(float16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s32(int32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s32(int32x2_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vreinterpret_s64_s16(int16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#else -__ai int64x1_t vreinterpret_s64_s16(int16x4_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_p8(poly8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_p8(poly8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_p64(poly64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_p64(poly64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_p16(poly16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_p16(poly16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u8(uint8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u8(uint8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u32(uint32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u32(uint32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u64(uint64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u64(uint64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_u16(uint16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_u16(uint16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s8(int8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s8(int8x8_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_f64(float64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_f64(float64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_f32(float32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_f32(float32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_f16(float16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_f16(float16x4_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s32(int32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s32(int32x2_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vreinterpret_s16_s64(int64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#else -__ai int16x4_t vreinterpret_s16_s64(int64x1_t __p0) { - int16x4_t __ret; - __ret = (int16x4_t)(__p0); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 && defined(__aarch64__) && defined(__ARM_FEATURE_DIRECTED_ROUNDING) -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrnd_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrnd_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrnd_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrnd_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndaq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndaq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndaq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndaq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrnda_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrnda_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrnda_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrnda_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndiq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndiq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndiq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndiq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vrndiq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndiq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vrndiq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vrndiq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrndi_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndi_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrndi_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndi_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vrndi_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndi_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vrndi_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vrndi_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndmq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndmq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndmq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndmq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrndm_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndm_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrndm_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndm_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndnq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndnq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndnq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndnq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrndn_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndn_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrndn_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndn_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndpq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndpq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndpq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndpq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrndp_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndp_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrndp_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndp_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrndxq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndxq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrndxq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrndxq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrndx_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndx_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrndx_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrndx_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#endif -#if __ARM_ARCH >= 8 && defined(__aarch64__) && defined(__ARM_FEATURE_NUMERIC_MAXMIN) -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmaxnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmaxnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vmaxnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmaxnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmaxnm_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmaxnm_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vmaxnm_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmaxnm_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vminnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vminnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vminnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vminnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vminnm_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vminnm_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vminnm_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vminnm_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#endif -#if __ARM_FEATURE_CRYPTO -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaesdq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesdq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vaesdq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaeseq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaeseq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vaeseq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaeseq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaesimcq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesimcq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vaesimcq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesimcq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaesmcq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesmcq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vaesmcq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vaesmcq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha1cq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1cq_u32((int8x16_t)__p0, __p1, (int8x16_t)__p2); - return __ret; -} -#else -__ai uint32x4_t vsha1cq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1cq_u32((int8x16_t)__rev0, __p1, (int8x16_t)__rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vsha1h_u32(uint32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vsha1h_u32(__p0); - return __ret; -} -#else -__ai uint32_t vsha1h_u32(uint32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vsha1h_u32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha1mq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1mq_u32((int8x16_t)__p0, __p1, (int8x16_t)__p2); - return __ret; -} -#else -__ai uint32x4_t vsha1mq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1mq_u32((int8x16_t)__rev0, __p1, (int8x16_t)__rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha1pq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1pq_u32((int8x16_t)__p0, __p1, (int8x16_t)__p2); - return __ret; -} -#else -__ai uint32x4_t vsha1pq_u32(uint32x4_t __p0, uint32_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1pq_u32((int8x16_t)__rev0, __p1, (int8x16_t)__rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha1su0q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1su0q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 50); - return __ret; -} -#else -__ai uint32x4_t vsha1su0q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1su0q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha1su1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1su1q_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vsha1su1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha1su1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha256hq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256hq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 50); - return __ret; -} -#else -__ai uint32x4_t vsha256hq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256hq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha256h2q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256h2q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 50); - return __ret; -} -#else -__ai uint32x4_t vsha256h2q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256h2q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha256su0q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256su0q_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vsha256su0q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256su0q_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsha256su1q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256su1q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 50); - return __ret; -} -#else -__ai uint32x4_t vsha256su1q_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsha256su1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#endif -#if defined(__aarch64__) -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vabdq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vabdq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vabdq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vabdq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vabd_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vabd_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vabd_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vabdd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vabdd_f64(__p0, __p1); - return __ret; -} -#else -__ai float64_t vabdd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vabdd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vabds_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vabds_f32(__p0, __p1); - return __ret; -} -#else -__ai float32_t vabds_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vabds_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vabsq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vabsq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vabsq_s64(int64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vabsq_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vabsq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vabsq_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vabs_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vabs_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vabs_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vabs_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vabs_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vabs_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vabs_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vabs_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vabsd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vabsd_s64(__p0); - return __ret; -} -#else -__ai int64_t vabsd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vabsd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vaddq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai float64x2_t vaddq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 + __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vadd_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#else -__ai float64x1_t vadd_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 + __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vaddhn_u32(__p1, __p2)); - return __ret; -} -#else -__ai uint16x8_t vaddhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vaddhn_u32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vaddhn_u64(__p1, __p2)); - return __ret; -} -#else -__ai uint32x4_t vaddhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vaddhn_u64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vaddhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vaddhn_u16(__p1, __p2)); - return __ret; -} -#else -__ai uint8x16_t vaddhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vaddhn_u16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vaddhn_s32(__p1, __p2)); - return __ret; -} -#else -__ai int16x8_t vaddhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vaddhn_s32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vaddhn_s64(__p1, __p2)); - return __ret; -} -#else -__ai int32x4_t vaddhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vaddhn_s64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vaddhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vaddhn_s16(__p1, __p2)); - return __ret; -} -#else -__ai int8x16_t vaddhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vaddhn_s16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vaddlvq_u8(uint8x16_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddlvq_u8((int8x16_t)__p0); - return __ret; -} -#else -__ai uint16_t vaddlvq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddlvq_u8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vaddlvq_u32(uint32x4_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddlvq_u32((int8x16_t)__p0); - return __ret; -} -#else -__ai uint64_t vaddlvq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddlvq_u32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vaddlvq_u16(uint16x8_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddlvq_u16((int8x16_t)__p0); - return __ret; -} -#else -__ai uint32_t vaddlvq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddlvq_u16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vaddlvq_s8(int8x16_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddlvq_s8((int8x16_t)__p0); - return __ret; -} -#else -__ai int16_t vaddlvq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddlvq_s8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vaddlvq_s32(int32x4_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddlvq_s32((int8x16_t)__p0); - return __ret; -} -#else -__ai int64_t vaddlvq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddlvq_s32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vaddlvq_s16(int16x8_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddlvq_s16((int8x16_t)__p0); - return __ret; -} -#else -__ai int32_t vaddlvq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddlvq_s16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vaddlv_u8(uint8x8_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddlv_u8((int8x8_t)__p0); - return __ret; -} -#else -__ai uint16_t vaddlv_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddlv_u8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vaddlv_u32(uint32x2_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddlv_u32((int8x8_t)__p0); - return __ret; -} -#else -__ai uint64_t vaddlv_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddlv_u32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vaddlv_u16(uint16x4_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddlv_u16((int8x8_t)__p0); - return __ret; -} -#else -__ai uint32_t vaddlv_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddlv_u16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vaddlv_s8(int8x8_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddlv_s8((int8x8_t)__p0); - return __ret; -} -#else -__ai int16_t vaddlv_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddlv_s8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vaddlv_s32(int32x2_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddlv_s32((int8x8_t)__p0); - return __ret; -} -#else -__ai int64_t vaddlv_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddlv_s32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vaddlv_s16(int16x4_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddlv_s16((int8x8_t)__p0); - return __ret; -} -#else -__ai int32_t vaddlv_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddlv_s16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vaddvq_u8(uint8x16_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vaddvq_u8((int8x16_t)__p0); - return __ret; -} -#else -__ai uint8_t vaddvq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vaddvq_u8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vaddvq_u32(uint32x4_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddvq_u32((int8x16_t)__p0); - return __ret; -} -#else -__ai uint32_t vaddvq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddvq_u32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vaddvq_u64(uint64x2_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddvq_u64((int8x16_t)__p0); - return __ret; -} -#else -__ai uint64_t vaddvq_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vaddvq_u64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vaddvq_u16(uint16x8_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddvq_u16((int8x16_t)__p0); - return __ret; -} -#else -__ai uint16_t vaddvq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddvq_u16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vaddvq_s8(int8x16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vaddvq_s8((int8x16_t)__p0); - return __ret; -} -#else -__ai int8_t vaddvq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vaddvq_s8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vaddvq_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vaddvq_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vaddvq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vaddvq_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vaddvq_f32(float32x4_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vaddvq_f32((int8x16_t)__p0); - return __ret; -} -#else -__ai float32_t vaddvq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vaddvq_f32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vaddvq_s32(int32x4_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddvq_s32((int8x16_t)__p0); - return __ret; -} -#else -__ai int32_t vaddvq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddvq_s32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vaddvq_s64(int64x2_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddvq_s64((int8x16_t)__p0); - return __ret; -} -#else -__ai int64_t vaddvq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64_t __ret; - __ret = (int64_t) __builtin_neon_vaddvq_s64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vaddvq_s16(int16x8_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddvq_s16((int8x16_t)__p0); - return __ret; -} -#else -__ai int16_t vaddvq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddvq_s16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vaddv_u8(uint8x8_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vaddv_u8((int8x8_t)__p0); - return __ret; -} -#else -__ai uint8_t vaddv_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vaddv_u8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vaddv_u32(uint32x2_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddv_u32((int8x8_t)__p0); - return __ret; -} -#else -__ai uint32_t vaddv_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vaddv_u32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vaddv_u16(uint16x4_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddv_u16((int8x8_t)__p0); - return __ret; -} -#else -__ai uint16_t vaddv_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vaddv_u16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vaddv_s8(int8x8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vaddv_s8((int8x8_t)__p0); - return __ret; -} -#else -__ai int8_t vaddv_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vaddv_s8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vaddv_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vaddv_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vaddv_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vaddv_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vaddv_s32(int32x2_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddv_s32((int8x8_t)__p0); - return __ret; -} -#else -__ai int32_t vaddv_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vaddv_s32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vaddv_s16(int16x4_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddv_s16((int8x8_t)__p0); - return __ret; -} -#else -__ai int16_t vaddv_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vaddv_s16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vbsl_p64(uint64x1_t __p0, poly64x1_t __p1, poly64x1_t __p2) { - poly64x1_t __ret; - __ret = (poly64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 6); - return __ret; -} -#else -__ai poly64x1_t vbsl_p64(uint64x1_t __p0, poly64x1_t __p1, poly64x1_t __p2) { - poly64x1_t __ret; - __ret = (poly64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 6); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vbslq_p64(uint64x2_t __p0, poly64x2_t __p1, poly64x2_t __p2) { - poly64x2_t __ret; - __ret = (poly64x2_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 38); - return __ret; -} -#else -__ai poly64x2_t vbslq_p64(uint64x2_t __p0, poly64x2_t __p1, poly64x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - poly64x2_t __ret; - __ret = (poly64x2_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 38); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vbslq_f64(uint64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vbslq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 42); - return __ret; -} -#else -__ai float64x2_t vbslq_f64(uint64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vbslq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vbsl_f64(uint64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#else -__ai float64x1_t vbsl_f64(uint64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vbsl_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcageq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcageq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vcageq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcageq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcage_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcage_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vcage_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcage_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcaged_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaged_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcaged_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaged_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcages_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcages_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcages_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcages_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcagtq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcagtq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vcagtq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcagtq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcagt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcagt_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vcagt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcagt_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcagtd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcagtd_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcagtd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcagtd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcagts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcagts_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcagts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcagts_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcaleq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcaleq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vcaleq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcaleq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcale_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcale_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vcale_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcale_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcaled_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaled_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcaled_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaled_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcales_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcales_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcales_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcales_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcaltq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcaltq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vcaltq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcaltq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcalt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcalt_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vcalt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcalt_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcaltd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaltd_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcaltd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcaltd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcalts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcalts_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcalts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcalts_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceq_p64(poly64x1_t __p0, poly64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x1_t vceq_p64(poly64x1_t __p0, poly64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqq_p64(poly64x2_t __p0, poly64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x2_t vceqq_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x2_t vceqq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x2_t vceqq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x2_t vceqq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 == __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceq_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x1_t vceq_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceq_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x1_t vceq_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceq_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#else -__ai uint64x1_t vceq_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 == __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vceqd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vceqd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vceqd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vceqd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vceqd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vceqd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vceqd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqd_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vceqd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vceqs_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vceqs_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vceqs_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vceqs_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceqz_p8(poly8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vceqz_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceqz_p64(poly64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vceqz_p64(poly64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vceqz_p16(poly16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vceqz_p16(poly16x4_t __p0) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqzq_p8(poly8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vceqzq_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqzq_p64(poly64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vceqzq_p64(poly64x2_t __p0) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vceqzq_p16(poly16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vceqzq_p16(poly16x8_t __p0) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqzq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vceqzq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqzq_u32(uint32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vceqzq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqzq_u64(uint64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vceqzq_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vceqzq_u16(uint16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vceqzq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vceqzq_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vceqzq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqzq_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vceqzq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqzq_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vceqzq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vceqzq_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vceqzq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vceqzq_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vceqzq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vceqzq_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vceqzq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vceqzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceqz_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vceqz_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceqz_u32(uint32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vceqz_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceqz_u64(uint64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vceqz_u64(uint64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vceqz_u16(uint16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vceqz_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vceqz_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vceqz_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceqz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vceqz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceqz_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vceqz_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vceqz_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vceqz_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vceqz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vceqz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vceqz_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vceqz_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vceqz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vceqzd_u64(uint64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqzd_u64(__p0); - return __ret; -} -#else -__ai uint64_t vceqzd_u64(uint64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqzd_u64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vceqzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vceqzd_s64(__p0); - return __ret; -} -#else -__ai int64_t vceqzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vceqzd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vceqzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqzd_f64(__p0); - return __ret; -} -#else -__ai uint64_t vceqzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vceqzd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vceqzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vceqzs_f32(__p0); - return __ret; -} -#else -__ai uint32_t vceqzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vceqzs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgeq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x2_t vcgeq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgeq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x2_t vcgeq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgeq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x2_t vcgeq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 >= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcge_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x1_t vcge_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcge_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x1_t vcge_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcge_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#else -__ai uint64x1_t vcge_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 >= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcged_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcged_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vcged_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcged_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcged_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcged_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcged_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcged_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcged_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcged_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcged_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcged_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcges_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcges_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcges_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcges_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgezq_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vcgezq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgezq_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcgezq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgezq_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcgezq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgezq_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcgezq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgezq_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcgezq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgezq_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcgezq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vcgezq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcgezq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcgez_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vcgez_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcgez_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgez_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcgez_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgez_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcgez_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgez_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgez_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcgez_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgez_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgez_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcgez_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcgez_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcgez_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vcgez_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcgez_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcgezd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgezd_s64(__p0); - return __ret; -} -#else -__ai int64_t vcgezd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgezd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcgezd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgezd_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcgezd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgezd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcgezs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgezs_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcgezs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgezs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgtq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x2_t vcgtq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgtq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x2_t vcgtq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgtq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x2_t vcgtq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 > __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgt_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x1_t vcgt_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x1_t vcgt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgt_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#else -__ai uint64x1_t vcgt_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 > __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcgtd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgtd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vcgtd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgtd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcgtd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcgtd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcgtd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtd_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcgtd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcgts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgts_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcgts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgts_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcgtzq_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vcgtzq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgtzq_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcgtzq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgtzq_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcgtzq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcgtzq_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcgtzq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcgtzq_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcgtzq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcgtzq_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcgtzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vcgtzq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcgtzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcgtz_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vcgtz_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcgtz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgtz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcgtz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgtz_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcgtz_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgtz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcgtz_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcgtz_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcgtz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcgtz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcgtz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcgtz_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcgtz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vcgtz_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcgtz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcgtzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgtzd_s64(__p0); - return __ret; -} -#else -__ai int64_t vcgtzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcgtzd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcgtzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtzd_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcgtzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcgtzd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcgtzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgtzs_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcgtzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcgtzs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcleq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x2_t vcleq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcleq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x2_t vcleq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcleq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x2_t vcleq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 <= __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcle_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x1_t vcle_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcle_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x1_t vcle_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcle_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#else -__ai uint64x1_t vcle_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 <= __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcled_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcled_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcled_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcled_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcled_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcled_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vcled_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcled_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcled_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcled_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcled_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcled_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcles_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcles_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vcles_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcles_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vclezq_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vclezq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vclezq_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vclezq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vclezq_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vclezq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vclezq_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vclezq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vclezq_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vclezq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vclezq_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vclezq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vclezq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vclezq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vclez_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vclez_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vclez_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vclez_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vclez_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vclez_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vclez_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vclez_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclez_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclez_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vclez_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclez_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vclez_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclez_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vclez_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vclez_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vclez_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vclez_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vclez_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vclez_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vclez_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vclez_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vclez_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vclez_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vclezd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vclezd_s64(__p0); - return __ret; -} -#else -__ai int64_t vclezd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vclezd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vclezd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vclezd_f64(__p0); - return __ret; -} -#else -__ai uint64_t vclezd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vclezd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vclezs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vclezs_f32(__p0); - return __ret; -} -#else -__ai uint32_t vclezs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vclezs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcltq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x2_t vcltq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcltq_f64(float64x2_t __p0, float64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x2_t vcltq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcltq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x2_t vcltq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__rev0 < __rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vclt_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x1_t vclt_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vclt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x1_t vclt_f64(float64x1_t __p0, float64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vclt_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#else -__ai uint64x1_t vclt_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t)(__p0 < __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcltd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcltd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcltd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcltd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vcltd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcltd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcltd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltd_f64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vcltd_f64(float64_t __p0, float64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vclts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vclts_f32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vclts_f32(float32_t __p0, float32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vclts_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vcltzq_s8(int8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vcltzq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcltzq_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcltzq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcltzq_f32(float32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcltzq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vcltzq_s32(int32x4_t __p0) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 50); - return __ret; -} -#else -__ai uint32x4_t vcltzq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcltzq_s64(int64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcltzq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vcltzq_s16(int16x8_t __p0) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcltzq_v((int8x16_t)__p0, 49); - return __ret; -} -#else -__ai uint16x8_t vcltzq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vcltzq_v((int8x16_t)__rev0, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vcltz_s8(int8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vcltz_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vcltz_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcltz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcltz_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcltz_f32(float32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcltz_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcltz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vcltz_s32(int32x2_t __p0) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 18); - return __ret; -} -#else -__ai uint32x2_t vcltz_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vcltz_v((int8x8_t)__rev0, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcltz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcltz_s64(int64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vcltz_s16(int16x4_t __p0) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcltz_v((int8x8_t)__p0, 17); - return __ret; -} -#else -__ai uint16x4_t vcltz_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vcltz_v((int8x8_t)__rev0, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcltzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcltzd_s64(__p0); - return __ret; -} -#else -__ai int64_t vcltzd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcltzd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcltzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltzd_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcltzd_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcltzd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcltzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcltzs_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcltzs_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcltzs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vcombine_p64(poly64x1_t __p0, poly64x1_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - return __ret; -} -#else -__ai poly64x2_t vcombine_p64(poly64x1_t __p0, poly64x1_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vcombine_f64(float64x1_t __p0, float64x1_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - return __ret; -} -#else -__ai float64x2_t vcombine_f64(float64x1_t __p0, float64x1_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_p8(__p0_0, __p1_0, __p2_0, __p3_0) __extension__ ({ \ - poly8x16_t __s0_0 = __p0_0; \ - poly8x8_t __s2_0 = __p2_0; \ - poly8x16_t __ret_0; \ - __ret_0 = vsetq_lane_p8(vget_lane_p8(__s2_0, __p3_0), __s0_0, __p1_0); \ - __ret_0; \ -}) -#else -#define vcopyq_lane_p8(__p0_1, __p1_1, __p2_1, __p3_1) __extension__ ({ \ - poly8x16_t __s0_1 = __p0_1; \ - poly8x8_t __s2_1 = __p2_1; \ - poly8x16_t __rev0_1; __rev0_1 = __builtin_shufflevector(__s0_1, __s0_1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __rev2_1; __rev2_1 = __builtin_shufflevector(__s2_1, __s2_1, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret_1; \ - __ret_1 = __noswap_vsetq_lane_p8(__noswap_vget_lane_p8(__rev2_1, __p3_1), __rev0_1, __p1_1); \ - __ret_1 = __builtin_shufflevector(__ret_1, __ret_1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_1; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_p16(__p0_2, __p1_2, __p2_2, __p3_2) __extension__ ({ \ - poly16x8_t __s0_2 = __p0_2; \ - poly16x4_t __s2_2 = __p2_2; \ - poly16x8_t __ret_2; \ - __ret_2 = vsetq_lane_p16(vget_lane_p16(__s2_2, __p3_2), __s0_2, __p1_2); \ - __ret_2; \ -}) -#else -#define vcopyq_lane_p16(__p0_3, __p1_3, __p2_3, __p3_3) __extension__ ({ \ - poly16x8_t __s0_3 = __p0_3; \ - poly16x4_t __s2_3 = __p2_3; \ - poly16x8_t __rev0_3; __rev0_3 = __builtin_shufflevector(__s0_3, __s0_3, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x4_t __rev2_3; __rev2_3 = __builtin_shufflevector(__s2_3, __s2_3, 3, 2, 1, 0); \ - poly16x8_t __ret_3; \ - __ret_3 = __noswap_vsetq_lane_p16(__noswap_vget_lane_p16(__rev2_3, __p3_3), __rev0_3, __p1_3); \ - __ret_3 = __builtin_shufflevector(__ret_3, __ret_3, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_3; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_u8(__p0_4, __p1_4, __p2_4, __p3_4) __extension__ ({ \ - uint8x16_t __s0_4 = __p0_4; \ - uint8x8_t __s2_4 = __p2_4; \ - uint8x16_t __ret_4; \ - __ret_4 = vsetq_lane_u8(vget_lane_u8(__s2_4, __p3_4), __s0_4, __p1_4); \ - __ret_4; \ -}) -#else -#define vcopyq_lane_u8(__p0_5, __p1_5, __p2_5, __p3_5) __extension__ ({ \ - uint8x16_t __s0_5 = __p0_5; \ - uint8x8_t __s2_5 = __p2_5; \ - uint8x16_t __rev0_5; __rev0_5 = __builtin_shufflevector(__s0_5, __s0_5, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev2_5; __rev2_5 = __builtin_shufflevector(__s2_5, __s2_5, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_5; \ - __ret_5 = __noswap_vsetq_lane_u8(__noswap_vget_lane_u8(__rev2_5, __p3_5), __rev0_5, __p1_5); \ - __ret_5 = __builtin_shufflevector(__ret_5, __ret_5, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_5; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_u32(__p0_6, __p1_6, __p2_6, __p3_6) __extension__ ({ \ - uint32x4_t __s0_6 = __p0_6; \ - uint32x2_t __s2_6 = __p2_6; \ - uint32x4_t __ret_6; \ - __ret_6 = vsetq_lane_u32(vget_lane_u32(__s2_6, __p3_6), __s0_6, __p1_6); \ - __ret_6; \ -}) -#else -#define vcopyq_lane_u32(__p0_7, __p1_7, __p2_7, __p3_7) __extension__ ({ \ - uint32x4_t __s0_7 = __p0_7; \ - uint32x2_t __s2_7 = __p2_7; \ - uint32x4_t __rev0_7; __rev0_7 = __builtin_shufflevector(__s0_7, __s0_7, 3, 2, 1, 0); \ - uint32x2_t __rev2_7; __rev2_7 = __builtin_shufflevector(__s2_7, __s2_7, 1, 0); \ - uint32x4_t __ret_7; \ - __ret_7 = __noswap_vsetq_lane_u32(__noswap_vget_lane_u32(__rev2_7, __p3_7), __rev0_7, __p1_7); \ - __ret_7 = __builtin_shufflevector(__ret_7, __ret_7, 3, 2, 1, 0); \ - __ret_7; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_u64(__p0_8, __p1_8, __p2_8, __p3_8) __extension__ ({ \ - uint64x2_t __s0_8 = __p0_8; \ - uint64x1_t __s2_8 = __p2_8; \ - uint64x2_t __ret_8; \ - __ret_8 = vsetq_lane_u64(vget_lane_u64(__s2_8, __p3_8), __s0_8, __p1_8); \ - __ret_8; \ -}) -#else -#define vcopyq_lane_u64(__p0_9, __p1_9, __p2_9, __p3_9) __extension__ ({ \ - uint64x2_t __s0_9 = __p0_9; \ - uint64x1_t __s2_9 = __p2_9; \ - uint64x2_t __rev0_9; __rev0_9 = __builtin_shufflevector(__s0_9, __s0_9, 1, 0); \ - uint64x2_t __ret_9; \ - __ret_9 = __noswap_vsetq_lane_u64(__noswap_vget_lane_u64(__s2_9, __p3_9), __rev0_9, __p1_9); \ - __ret_9 = __builtin_shufflevector(__ret_9, __ret_9, 1, 0); \ - __ret_9; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_u16(__p0_10, __p1_10, __p2_10, __p3_10) __extension__ ({ \ - uint16x8_t __s0_10 = __p0_10; \ - uint16x4_t __s2_10 = __p2_10; \ - uint16x8_t __ret_10; \ - __ret_10 = vsetq_lane_u16(vget_lane_u16(__s2_10, __p3_10), __s0_10, __p1_10); \ - __ret_10; \ -}) -#else -#define vcopyq_lane_u16(__p0_11, __p1_11, __p2_11, __p3_11) __extension__ ({ \ - uint16x8_t __s0_11 = __p0_11; \ - uint16x4_t __s2_11 = __p2_11; \ - uint16x8_t __rev0_11; __rev0_11 = __builtin_shufflevector(__s0_11, __s0_11, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev2_11; __rev2_11 = __builtin_shufflevector(__s2_11, __s2_11, 3, 2, 1, 0); \ - uint16x8_t __ret_11; \ - __ret_11 = __noswap_vsetq_lane_u16(__noswap_vget_lane_u16(__rev2_11, __p3_11), __rev0_11, __p1_11); \ - __ret_11 = __builtin_shufflevector(__ret_11, __ret_11, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_11; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_s8(__p0_12, __p1_12, __p2_12, __p3_12) __extension__ ({ \ - int8x16_t __s0_12 = __p0_12; \ - int8x8_t __s2_12 = __p2_12; \ - int8x16_t __ret_12; \ - __ret_12 = vsetq_lane_s8(vget_lane_s8(__s2_12, __p3_12), __s0_12, __p1_12); \ - __ret_12; \ -}) -#else -#define vcopyq_lane_s8(__p0_13, __p1_13, __p2_13, __p3_13) __extension__ ({ \ - int8x16_t __s0_13 = __p0_13; \ - int8x8_t __s2_13 = __p2_13; \ - int8x16_t __rev0_13; __rev0_13 = __builtin_shufflevector(__s0_13, __s0_13, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev2_13; __rev2_13 = __builtin_shufflevector(__s2_13, __s2_13, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_13; \ - __ret_13 = __noswap_vsetq_lane_s8(__noswap_vget_lane_s8(__rev2_13, __p3_13), __rev0_13, __p1_13); \ - __ret_13 = __builtin_shufflevector(__ret_13, __ret_13, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_13; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_f32(__p0_14, __p1_14, __p2_14, __p3_14) __extension__ ({ \ - float32x4_t __s0_14 = __p0_14; \ - float32x2_t __s2_14 = __p2_14; \ - float32x4_t __ret_14; \ - __ret_14 = vsetq_lane_f32(vget_lane_f32(__s2_14, __p3_14), __s0_14, __p1_14); \ - __ret_14; \ -}) -#else -#define vcopyq_lane_f32(__p0_15, __p1_15, __p2_15, __p3_15) __extension__ ({ \ - float32x4_t __s0_15 = __p0_15; \ - float32x2_t __s2_15 = __p2_15; \ - float32x4_t __rev0_15; __rev0_15 = __builtin_shufflevector(__s0_15, __s0_15, 3, 2, 1, 0); \ - float32x2_t __rev2_15; __rev2_15 = __builtin_shufflevector(__s2_15, __s2_15, 1, 0); \ - float32x4_t __ret_15; \ - __ret_15 = __noswap_vsetq_lane_f32(__noswap_vget_lane_f32(__rev2_15, __p3_15), __rev0_15, __p1_15); \ - __ret_15 = __builtin_shufflevector(__ret_15, __ret_15, 3, 2, 1, 0); \ - __ret_15; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_s32(__p0_16, __p1_16, __p2_16, __p3_16) __extension__ ({ \ - int32x4_t __s0_16 = __p0_16; \ - int32x2_t __s2_16 = __p2_16; \ - int32x4_t __ret_16; \ - __ret_16 = vsetq_lane_s32(vget_lane_s32(__s2_16, __p3_16), __s0_16, __p1_16); \ - __ret_16; \ -}) -#else -#define vcopyq_lane_s32(__p0_17, __p1_17, __p2_17, __p3_17) __extension__ ({ \ - int32x4_t __s0_17 = __p0_17; \ - int32x2_t __s2_17 = __p2_17; \ - int32x4_t __rev0_17; __rev0_17 = __builtin_shufflevector(__s0_17, __s0_17, 3, 2, 1, 0); \ - int32x2_t __rev2_17; __rev2_17 = __builtin_shufflevector(__s2_17, __s2_17, 1, 0); \ - int32x4_t __ret_17; \ - __ret_17 = __noswap_vsetq_lane_s32(__noswap_vget_lane_s32(__rev2_17, __p3_17), __rev0_17, __p1_17); \ - __ret_17 = __builtin_shufflevector(__ret_17, __ret_17, 3, 2, 1, 0); \ - __ret_17; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_s64(__p0_18, __p1_18, __p2_18, __p3_18) __extension__ ({ \ - int64x2_t __s0_18 = __p0_18; \ - int64x1_t __s2_18 = __p2_18; \ - int64x2_t __ret_18; \ - __ret_18 = vsetq_lane_s64(vget_lane_s64(__s2_18, __p3_18), __s0_18, __p1_18); \ - __ret_18; \ -}) -#else -#define vcopyq_lane_s64(__p0_19, __p1_19, __p2_19, __p3_19) __extension__ ({ \ - int64x2_t __s0_19 = __p0_19; \ - int64x1_t __s2_19 = __p2_19; \ - int64x2_t __rev0_19; __rev0_19 = __builtin_shufflevector(__s0_19, __s0_19, 1, 0); \ - int64x2_t __ret_19; \ - __ret_19 = __noswap_vsetq_lane_s64(__noswap_vget_lane_s64(__s2_19, __p3_19), __rev0_19, __p1_19); \ - __ret_19 = __builtin_shufflevector(__ret_19, __ret_19, 1, 0); \ - __ret_19; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_s16(__p0_20, __p1_20, __p2_20, __p3_20) __extension__ ({ \ - int16x8_t __s0_20 = __p0_20; \ - int16x4_t __s2_20 = __p2_20; \ - int16x8_t __ret_20; \ - __ret_20 = vsetq_lane_s16(vget_lane_s16(__s2_20, __p3_20), __s0_20, __p1_20); \ - __ret_20; \ -}) -#else -#define vcopyq_lane_s16(__p0_21, __p1_21, __p2_21, __p3_21) __extension__ ({ \ - int16x8_t __s0_21 = __p0_21; \ - int16x4_t __s2_21 = __p2_21; \ - int16x8_t __rev0_21; __rev0_21 = __builtin_shufflevector(__s0_21, __s0_21, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2_21; __rev2_21 = __builtin_shufflevector(__s2_21, __s2_21, 3, 2, 1, 0); \ - int16x8_t __ret_21; \ - __ret_21 = __noswap_vsetq_lane_s16(__noswap_vget_lane_s16(__rev2_21, __p3_21), __rev0_21, __p1_21); \ - __ret_21 = __builtin_shufflevector(__ret_21, __ret_21, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_21; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_p8(__p0_22, __p1_22, __p2_22, __p3_22) __extension__ ({ \ - poly8x8_t __s0_22 = __p0_22; \ - poly8x8_t __s2_22 = __p2_22; \ - poly8x8_t __ret_22; \ - __ret_22 = vset_lane_p8(vget_lane_p8(__s2_22, __p3_22), __s0_22, __p1_22); \ - __ret_22; \ -}) -#else -#define vcopy_lane_p8(__p0_23, __p1_23, __p2_23, __p3_23) __extension__ ({ \ - poly8x8_t __s0_23 = __p0_23; \ - poly8x8_t __s2_23 = __p2_23; \ - poly8x8_t __rev0_23; __rev0_23 = __builtin_shufflevector(__s0_23, __s0_23, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __rev2_23; __rev2_23 = __builtin_shufflevector(__s2_23, __s2_23, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret_23; \ - __ret_23 = __noswap_vset_lane_p8(__noswap_vget_lane_p8(__rev2_23, __p3_23), __rev0_23, __p1_23); \ - __ret_23 = __builtin_shufflevector(__ret_23, __ret_23, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_23; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_p16(__p0_24, __p1_24, __p2_24, __p3_24) __extension__ ({ \ - poly16x4_t __s0_24 = __p0_24; \ - poly16x4_t __s2_24 = __p2_24; \ - poly16x4_t __ret_24; \ - __ret_24 = vset_lane_p16(vget_lane_p16(__s2_24, __p3_24), __s0_24, __p1_24); \ - __ret_24; \ -}) -#else -#define vcopy_lane_p16(__p0_25, __p1_25, __p2_25, __p3_25) __extension__ ({ \ - poly16x4_t __s0_25 = __p0_25; \ - poly16x4_t __s2_25 = __p2_25; \ - poly16x4_t __rev0_25; __rev0_25 = __builtin_shufflevector(__s0_25, __s0_25, 3, 2, 1, 0); \ - poly16x4_t __rev2_25; __rev2_25 = __builtin_shufflevector(__s2_25, __s2_25, 3, 2, 1, 0); \ - poly16x4_t __ret_25; \ - __ret_25 = __noswap_vset_lane_p16(__noswap_vget_lane_p16(__rev2_25, __p3_25), __rev0_25, __p1_25); \ - __ret_25 = __builtin_shufflevector(__ret_25, __ret_25, 3, 2, 1, 0); \ - __ret_25; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_u8(__p0_26, __p1_26, __p2_26, __p3_26) __extension__ ({ \ - uint8x8_t __s0_26 = __p0_26; \ - uint8x8_t __s2_26 = __p2_26; \ - uint8x8_t __ret_26; \ - __ret_26 = vset_lane_u8(vget_lane_u8(__s2_26, __p3_26), __s0_26, __p1_26); \ - __ret_26; \ -}) -#else -#define vcopy_lane_u8(__p0_27, __p1_27, __p2_27, __p3_27) __extension__ ({ \ - uint8x8_t __s0_27 = __p0_27; \ - uint8x8_t __s2_27 = __p2_27; \ - uint8x8_t __rev0_27; __rev0_27 = __builtin_shufflevector(__s0_27, __s0_27, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __rev2_27; __rev2_27 = __builtin_shufflevector(__s2_27, __s2_27, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret_27; \ - __ret_27 = __noswap_vset_lane_u8(__noswap_vget_lane_u8(__rev2_27, __p3_27), __rev0_27, __p1_27); \ - __ret_27 = __builtin_shufflevector(__ret_27, __ret_27, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_27; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_u32(__p0_28, __p1_28, __p2_28, __p3_28) __extension__ ({ \ - uint32x2_t __s0_28 = __p0_28; \ - uint32x2_t __s2_28 = __p2_28; \ - uint32x2_t __ret_28; \ - __ret_28 = vset_lane_u32(vget_lane_u32(__s2_28, __p3_28), __s0_28, __p1_28); \ - __ret_28; \ -}) -#else -#define vcopy_lane_u32(__p0_29, __p1_29, __p2_29, __p3_29) __extension__ ({ \ - uint32x2_t __s0_29 = __p0_29; \ - uint32x2_t __s2_29 = __p2_29; \ - uint32x2_t __rev0_29; __rev0_29 = __builtin_shufflevector(__s0_29, __s0_29, 1, 0); \ - uint32x2_t __rev2_29; __rev2_29 = __builtin_shufflevector(__s2_29, __s2_29, 1, 0); \ - uint32x2_t __ret_29; \ - __ret_29 = __noswap_vset_lane_u32(__noswap_vget_lane_u32(__rev2_29, __p3_29), __rev0_29, __p1_29); \ - __ret_29 = __builtin_shufflevector(__ret_29, __ret_29, 1, 0); \ - __ret_29; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_u64(__p0_30, __p1_30, __p2_30, __p3_30) __extension__ ({ \ - uint64x1_t __s0_30 = __p0_30; \ - uint64x1_t __s2_30 = __p2_30; \ - uint64x1_t __ret_30; \ - __ret_30 = vset_lane_u64(vget_lane_u64(__s2_30, __p3_30), __s0_30, __p1_30); \ - __ret_30; \ -}) -#else -#define vcopy_lane_u64(__p0_31, __p1_31, __p2_31, __p3_31) __extension__ ({ \ - uint64x1_t __s0_31 = __p0_31; \ - uint64x1_t __s2_31 = __p2_31; \ - uint64x1_t __ret_31; \ - __ret_31 = __noswap_vset_lane_u64(__noswap_vget_lane_u64(__s2_31, __p3_31), __s0_31, __p1_31); \ - __ret_31; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_u16(__p0_32, __p1_32, __p2_32, __p3_32) __extension__ ({ \ - uint16x4_t __s0_32 = __p0_32; \ - uint16x4_t __s2_32 = __p2_32; \ - uint16x4_t __ret_32; \ - __ret_32 = vset_lane_u16(vget_lane_u16(__s2_32, __p3_32), __s0_32, __p1_32); \ - __ret_32; \ -}) -#else -#define vcopy_lane_u16(__p0_33, __p1_33, __p2_33, __p3_33) __extension__ ({ \ - uint16x4_t __s0_33 = __p0_33; \ - uint16x4_t __s2_33 = __p2_33; \ - uint16x4_t __rev0_33; __rev0_33 = __builtin_shufflevector(__s0_33, __s0_33, 3, 2, 1, 0); \ - uint16x4_t __rev2_33; __rev2_33 = __builtin_shufflevector(__s2_33, __s2_33, 3, 2, 1, 0); \ - uint16x4_t __ret_33; \ - __ret_33 = __noswap_vset_lane_u16(__noswap_vget_lane_u16(__rev2_33, __p3_33), __rev0_33, __p1_33); \ - __ret_33 = __builtin_shufflevector(__ret_33, __ret_33, 3, 2, 1, 0); \ - __ret_33; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_s8(__p0_34, __p1_34, __p2_34, __p3_34) __extension__ ({ \ - int8x8_t __s0_34 = __p0_34; \ - int8x8_t __s2_34 = __p2_34; \ - int8x8_t __ret_34; \ - __ret_34 = vset_lane_s8(vget_lane_s8(__s2_34, __p3_34), __s0_34, __p1_34); \ - __ret_34; \ -}) -#else -#define vcopy_lane_s8(__p0_35, __p1_35, __p2_35, __p3_35) __extension__ ({ \ - int8x8_t __s0_35 = __p0_35; \ - int8x8_t __s2_35 = __p2_35; \ - int8x8_t __rev0_35; __rev0_35 = __builtin_shufflevector(__s0_35, __s0_35, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __rev2_35; __rev2_35 = __builtin_shufflevector(__s2_35, __s2_35, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret_35; \ - __ret_35 = __noswap_vset_lane_s8(__noswap_vget_lane_s8(__rev2_35, __p3_35), __rev0_35, __p1_35); \ - __ret_35 = __builtin_shufflevector(__ret_35, __ret_35, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_35; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_f32(__p0_36, __p1_36, __p2_36, __p3_36) __extension__ ({ \ - float32x2_t __s0_36 = __p0_36; \ - float32x2_t __s2_36 = __p2_36; \ - float32x2_t __ret_36; \ - __ret_36 = vset_lane_f32(vget_lane_f32(__s2_36, __p3_36), __s0_36, __p1_36); \ - __ret_36; \ -}) -#else -#define vcopy_lane_f32(__p0_37, __p1_37, __p2_37, __p3_37) __extension__ ({ \ - float32x2_t __s0_37 = __p0_37; \ - float32x2_t __s2_37 = __p2_37; \ - float32x2_t __rev0_37; __rev0_37 = __builtin_shufflevector(__s0_37, __s0_37, 1, 0); \ - float32x2_t __rev2_37; __rev2_37 = __builtin_shufflevector(__s2_37, __s2_37, 1, 0); \ - float32x2_t __ret_37; \ - __ret_37 = __noswap_vset_lane_f32(__noswap_vget_lane_f32(__rev2_37, __p3_37), __rev0_37, __p1_37); \ - __ret_37 = __builtin_shufflevector(__ret_37, __ret_37, 1, 0); \ - __ret_37; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_s32(__p0_38, __p1_38, __p2_38, __p3_38) __extension__ ({ \ - int32x2_t __s0_38 = __p0_38; \ - int32x2_t __s2_38 = __p2_38; \ - int32x2_t __ret_38; \ - __ret_38 = vset_lane_s32(vget_lane_s32(__s2_38, __p3_38), __s0_38, __p1_38); \ - __ret_38; \ -}) -#else -#define vcopy_lane_s32(__p0_39, __p1_39, __p2_39, __p3_39) __extension__ ({ \ - int32x2_t __s0_39 = __p0_39; \ - int32x2_t __s2_39 = __p2_39; \ - int32x2_t __rev0_39; __rev0_39 = __builtin_shufflevector(__s0_39, __s0_39, 1, 0); \ - int32x2_t __rev2_39; __rev2_39 = __builtin_shufflevector(__s2_39, __s2_39, 1, 0); \ - int32x2_t __ret_39; \ - __ret_39 = __noswap_vset_lane_s32(__noswap_vget_lane_s32(__rev2_39, __p3_39), __rev0_39, __p1_39); \ - __ret_39 = __builtin_shufflevector(__ret_39, __ret_39, 1, 0); \ - __ret_39; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_s64(__p0_40, __p1_40, __p2_40, __p3_40) __extension__ ({ \ - int64x1_t __s0_40 = __p0_40; \ - int64x1_t __s2_40 = __p2_40; \ - int64x1_t __ret_40; \ - __ret_40 = vset_lane_s64(vget_lane_s64(__s2_40, __p3_40), __s0_40, __p1_40); \ - __ret_40; \ -}) -#else -#define vcopy_lane_s64(__p0_41, __p1_41, __p2_41, __p3_41) __extension__ ({ \ - int64x1_t __s0_41 = __p0_41; \ - int64x1_t __s2_41 = __p2_41; \ - int64x1_t __ret_41; \ - __ret_41 = __noswap_vset_lane_s64(__noswap_vget_lane_s64(__s2_41, __p3_41), __s0_41, __p1_41); \ - __ret_41; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_s16(__p0_42, __p1_42, __p2_42, __p3_42) __extension__ ({ \ - int16x4_t __s0_42 = __p0_42; \ - int16x4_t __s2_42 = __p2_42; \ - int16x4_t __ret_42; \ - __ret_42 = vset_lane_s16(vget_lane_s16(__s2_42, __p3_42), __s0_42, __p1_42); \ - __ret_42; \ -}) -#else -#define vcopy_lane_s16(__p0_43, __p1_43, __p2_43, __p3_43) __extension__ ({ \ - int16x4_t __s0_43 = __p0_43; \ - int16x4_t __s2_43 = __p2_43; \ - int16x4_t __rev0_43; __rev0_43 = __builtin_shufflevector(__s0_43, __s0_43, 3, 2, 1, 0); \ - int16x4_t __rev2_43; __rev2_43 = __builtin_shufflevector(__s2_43, __s2_43, 3, 2, 1, 0); \ - int16x4_t __ret_43; \ - __ret_43 = __noswap_vset_lane_s16(__noswap_vget_lane_s16(__rev2_43, __p3_43), __rev0_43, __p1_43); \ - __ret_43 = __builtin_shufflevector(__ret_43, __ret_43, 3, 2, 1, 0); \ - __ret_43; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_p8(__p0_44, __p1_44, __p2_44, __p3_44) __extension__ ({ \ - poly8x16_t __s0_44 = __p0_44; \ - poly8x16_t __s2_44 = __p2_44; \ - poly8x16_t __ret_44; \ - __ret_44 = vsetq_lane_p8(vgetq_lane_p8(__s2_44, __p3_44), __s0_44, __p1_44); \ - __ret_44; \ -}) -#else -#define vcopyq_laneq_p8(__p0_45, __p1_45, __p2_45, __p3_45) __extension__ ({ \ - poly8x16_t __s0_45 = __p0_45; \ - poly8x16_t __s2_45 = __p2_45; \ - poly8x16_t __rev0_45; __rev0_45 = __builtin_shufflevector(__s0_45, __s0_45, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __rev2_45; __rev2_45 = __builtin_shufflevector(__s2_45, __s2_45, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret_45; \ - __ret_45 = __noswap_vsetq_lane_p8(__noswap_vgetq_lane_p8(__rev2_45, __p3_45), __rev0_45, __p1_45); \ - __ret_45 = __builtin_shufflevector(__ret_45, __ret_45, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_45; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_p16(__p0_46, __p1_46, __p2_46, __p3_46) __extension__ ({ \ - poly16x8_t __s0_46 = __p0_46; \ - poly16x8_t __s2_46 = __p2_46; \ - poly16x8_t __ret_46; \ - __ret_46 = vsetq_lane_p16(vgetq_lane_p16(__s2_46, __p3_46), __s0_46, __p1_46); \ - __ret_46; \ -}) -#else -#define vcopyq_laneq_p16(__p0_47, __p1_47, __p2_47, __p3_47) __extension__ ({ \ - poly16x8_t __s0_47 = __p0_47; \ - poly16x8_t __s2_47 = __p2_47; \ - poly16x8_t __rev0_47; __rev0_47 = __builtin_shufflevector(__s0_47, __s0_47, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __rev2_47; __rev2_47 = __builtin_shufflevector(__s2_47, __s2_47, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret_47; \ - __ret_47 = __noswap_vsetq_lane_p16(__noswap_vgetq_lane_p16(__rev2_47, __p3_47), __rev0_47, __p1_47); \ - __ret_47 = __builtin_shufflevector(__ret_47, __ret_47, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_47; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_u8(__p0_48, __p1_48, __p2_48, __p3_48) __extension__ ({ \ - uint8x16_t __s0_48 = __p0_48; \ - uint8x16_t __s2_48 = __p2_48; \ - uint8x16_t __ret_48; \ - __ret_48 = vsetq_lane_u8(vgetq_lane_u8(__s2_48, __p3_48), __s0_48, __p1_48); \ - __ret_48; \ -}) -#else -#define vcopyq_laneq_u8(__p0_49, __p1_49, __p2_49, __p3_49) __extension__ ({ \ - uint8x16_t __s0_49 = __p0_49; \ - uint8x16_t __s2_49 = __p2_49; \ - uint8x16_t __rev0_49; __rev0_49 = __builtin_shufflevector(__s0_49, __s0_49, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev2_49; __rev2_49 = __builtin_shufflevector(__s2_49, __s2_49, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_49; \ - __ret_49 = __noswap_vsetq_lane_u8(__noswap_vgetq_lane_u8(__rev2_49, __p3_49), __rev0_49, __p1_49); \ - __ret_49 = __builtin_shufflevector(__ret_49, __ret_49, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_49; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_u32(__p0_50, __p1_50, __p2_50, __p3_50) __extension__ ({ \ - uint32x4_t __s0_50 = __p0_50; \ - uint32x4_t __s2_50 = __p2_50; \ - uint32x4_t __ret_50; \ - __ret_50 = vsetq_lane_u32(vgetq_lane_u32(__s2_50, __p3_50), __s0_50, __p1_50); \ - __ret_50; \ -}) -#else -#define vcopyq_laneq_u32(__p0_51, __p1_51, __p2_51, __p3_51) __extension__ ({ \ - uint32x4_t __s0_51 = __p0_51; \ - uint32x4_t __s2_51 = __p2_51; \ - uint32x4_t __rev0_51; __rev0_51 = __builtin_shufflevector(__s0_51, __s0_51, 3, 2, 1, 0); \ - uint32x4_t __rev2_51; __rev2_51 = __builtin_shufflevector(__s2_51, __s2_51, 3, 2, 1, 0); \ - uint32x4_t __ret_51; \ - __ret_51 = __noswap_vsetq_lane_u32(__noswap_vgetq_lane_u32(__rev2_51, __p3_51), __rev0_51, __p1_51); \ - __ret_51 = __builtin_shufflevector(__ret_51, __ret_51, 3, 2, 1, 0); \ - __ret_51; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_u64(__p0_52, __p1_52, __p2_52, __p3_52) __extension__ ({ \ - uint64x2_t __s0_52 = __p0_52; \ - uint64x2_t __s2_52 = __p2_52; \ - uint64x2_t __ret_52; \ - __ret_52 = vsetq_lane_u64(vgetq_lane_u64(__s2_52, __p3_52), __s0_52, __p1_52); \ - __ret_52; \ -}) -#else -#define vcopyq_laneq_u64(__p0_53, __p1_53, __p2_53, __p3_53) __extension__ ({ \ - uint64x2_t __s0_53 = __p0_53; \ - uint64x2_t __s2_53 = __p2_53; \ - uint64x2_t __rev0_53; __rev0_53 = __builtin_shufflevector(__s0_53, __s0_53, 1, 0); \ - uint64x2_t __rev2_53; __rev2_53 = __builtin_shufflevector(__s2_53, __s2_53, 1, 0); \ - uint64x2_t __ret_53; \ - __ret_53 = __noswap_vsetq_lane_u64(__noswap_vgetq_lane_u64(__rev2_53, __p3_53), __rev0_53, __p1_53); \ - __ret_53 = __builtin_shufflevector(__ret_53, __ret_53, 1, 0); \ - __ret_53; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_u16(__p0_54, __p1_54, __p2_54, __p3_54) __extension__ ({ \ - uint16x8_t __s0_54 = __p0_54; \ - uint16x8_t __s2_54 = __p2_54; \ - uint16x8_t __ret_54; \ - __ret_54 = vsetq_lane_u16(vgetq_lane_u16(__s2_54, __p3_54), __s0_54, __p1_54); \ - __ret_54; \ -}) -#else -#define vcopyq_laneq_u16(__p0_55, __p1_55, __p2_55, __p3_55) __extension__ ({ \ - uint16x8_t __s0_55 = __p0_55; \ - uint16x8_t __s2_55 = __p2_55; \ - uint16x8_t __rev0_55; __rev0_55 = __builtin_shufflevector(__s0_55, __s0_55, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev2_55; __rev2_55 = __builtin_shufflevector(__s2_55, __s2_55, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret_55; \ - __ret_55 = __noswap_vsetq_lane_u16(__noswap_vgetq_lane_u16(__rev2_55, __p3_55), __rev0_55, __p1_55); \ - __ret_55 = __builtin_shufflevector(__ret_55, __ret_55, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_55; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_s8(__p0_56, __p1_56, __p2_56, __p3_56) __extension__ ({ \ - int8x16_t __s0_56 = __p0_56; \ - int8x16_t __s2_56 = __p2_56; \ - int8x16_t __ret_56; \ - __ret_56 = vsetq_lane_s8(vgetq_lane_s8(__s2_56, __p3_56), __s0_56, __p1_56); \ - __ret_56; \ -}) -#else -#define vcopyq_laneq_s8(__p0_57, __p1_57, __p2_57, __p3_57) __extension__ ({ \ - int8x16_t __s0_57 = __p0_57; \ - int8x16_t __s2_57 = __p2_57; \ - int8x16_t __rev0_57; __rev0_57 = __builtin_shufflevector(__s0_57, __s0_57, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev2_57; __rev2_57 = __builtin_shufflevector(__s2_57, __s2_57, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_57; \ - __ret_57 = __noswap_vsetq_lane_s8(__noswap_vgetq_lane_s8(__rev2_57, __p3_57), __rev0_57, __p1_57); \ - __ret_57 = __builtin_shufflevector(__ret_57, __ret_57, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_57; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_f32(__p0_58, __p1_58, __p2_58, __p3_58) __extension__ ({ \ - float32x4_t __s0_58 = __p0_58; \ - float32x4_t __s2_58 = __p2_58; \ - float32x4_t __ret_58; \ - __ret_58 = vsetq_lane_f32(vgetq_lane_f32(__s2_58, __p3_58), __s0_58, __p1_58); \ - __ret_58; \ -}) -#else -#define vcopyq_laneq_f32(__p0_59, __p1_59, __p2_59, __p3_59) __extension__ ({ \ - float32x4_t __s0_59 = __p0_59; \ - float32x4_t __s2_59 = __p2_59; \ - float32x4_t __rev0_59; __rev0_59 = __builtin_shufflevector(__s0_59, __s0_59, 3, 2, 1, 0); \ - float32x4_t __rev2_59; __rev2_59 = __builtin_shufflevector(__s2_59, __s2_59, 3, 2, 1, 0); \ - float32x4_t __ret_59; \ - __ret_59 = __noswap_vsetq_lane_f32(__noswap_vgetq_lane_f32(__rev2_59, __p3_59), __rev0_59, __p1_59); \ - __ret_59 = __builtin_shufflevector(__ret_59, __ret_59, 3, 2, 1, 0); \ - __ret_59; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_s32(__p0_60, __p1_60, __p2_60, __p3_60) __extension__ ({ \ - int32x4_t __s0_60 = __p0_60; \ - int32x4_t __s2_60 = __p2_60; \ - int32x4_t __ret_60; \ - __ret_60 = vsetq_lane_s32(vgetq_lane_s32(__s2_60, __p3_60), __s0_60, __p1_60); \ - __ret_60; \ -}) -#else -#define vcopyq_laneq_s32(__p0_61, __p1_61, __p2_61, __p3_61) __extension__ ({ \ - int32x4_t __s0_61 = __p0_61; \ - int32x4_t __s2_61 = __p2_61; \ - int32x4_t __rev0_61; __rev0_61 = __builtin_shufflevector(__s0_61, __s0_61, 3, 2, 1, 0); \ - int32x4_t __rev2_61; __rev2_61 = __builtin_shufflevector(__s2_61, __s2_61, 3, 2, 1, 0); \ - int32x4_t __ret_61; \ - __ret_61 = __noswap_vsetq_lane_s32(__noswap_vgetq_lane_s32(__rev2_61, __p3_61), __rev0_61, __p1_61); \ - __ret_61 = __builtin_shufflevector(__ret_61, __ret_61, 3, 2, 1, 0); \ - __ret_61; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_s64(__p0_62, __p1_62, __p2_62, __p3_62) __extension__ ({ \ - int64x2_t __s0_62 = __p0_62; \ - int64x2_t __s2_62 = __p2_62; \ - int64x2_t __ret_62; \ - __ret_62 = vsetq_lane_s64(vgetq_lane_s64(__s2_62, __p3_62), __s0_62, __p1_62); \ - __ret_62; \ -}) -#else -#define vcopyq_laneq_s64(__p0_63, __p1_63, __p2_63, __p3_63) __extension__ ({ \ - int64x2_t __s0_63 = __p0_63; \ - int64x2_t __s2_63 = __p2_63; \ - int64x2_t __rev0_63; __rev0_63 = __builtin_shufflevector(__s0_63, __s0_63, 1, 0); \ - int64x2_t __rev2_63; __rev2_63 = __builtin_shufflevector(__s2_63, __s2_63, 1, 0); \ - int64x2_t __ret_63; \ - __ret_63 = __noswap_vsetq_lane_s64(__noswap_vgetq_lane_s64(__rev2_63, __p3_63), __rev0_63, __p1_63); \ - __ret_63 = __builtin_shufflevector(__ret_63, __ret_63, 1, 0); \ - __ret_63; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_s16(__p0_64, __p1_64, __p2_64, __p3_64) __extension__ ({ \ - int16x8_t __s0_64 = __p0_64; \ - int16x8_t __s2_64 = __p2_64; \ - int16x8_t __ret_64; \ - __ret_64 = vsetq_lane_s16(vgetq_lane_s16(__s2_64, __p3_64), __s0_64, __p1_64); \ - __ret_64; \ -}) -#else -#define vcopyq_laneq_s16(__p0_65, __p1_65, __p2_65, __p3_65) __extension__ ({ \ - int16x8_t __s0_65 = __p0_65; \ - int16x8_t __s2_65 = __p2_65; \ - int16x8_t __rev0_65; __rev0_65 = __builtin_shufflevector(__s0_65, __s0_65, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2_65; __rev2_65 = __builtin_shufflevector(__s2_65, __s2_65, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret_65; \ - __ret_65 = __noswap_vsetq_lane_s16(__noswap_vgetq_lane_s16(__rev2_65, __p3_65), __rev0_65, __p1_65); \ - __ret_65 = __builtin_shufflevector(__ret_65, __ret_65, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_65; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_p8(__p0_66, __p1_66, __p2_66, __p3_66) __extension__ ({ \ - poly8x8_t __s0_66 = __p0_66; \ - poly8x16_t __s2_66 = __p2_66; \ - poly8x8_t __ret_66; \ - __ret_66 = vset_lane_p8(vgetq_lane_p8(__s2_66, __p3_66), __s0_66, __p1_66); \ - __ret_66; \ -}) -#else -#define vcopy_laneq_p8(__p0_67, __p1_67, __p2_67, __p3_67) __extension__ ({ \ - poly8x8_t __s0_67 = __p0_67; \ - poly8x16_t __s2_67 = __p2_67; \ - poly8x8_t __rev0_67; __rev0_67 = __builtin_shufflevector(__s0_67, __s0_67, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __rev2_67; __rev2_67 = __builtin_shufflevector(__s2_67, __s2_67, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret_67; \ - __ret_67 = __noswap_vset_lane_p8(__noswap_vgetq_lane_p8(__rev2_67, __p3_67), __rev0_67, __p1_67); \ - __ret_67 = __builtin_shufflevector(__ret_67, __ret_67, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_67; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_p16(__p0_68, __p1_68, __p2_68, __p3_68) __extension__ ({ \ - poly16x4_t __s0_68 = __p0_68; \ - poly16x8_t __s2_68 = __p2_68; \ - poly16x4_t __ret_68; \ - __ret_68 = vset_lane_p16(vgetq_lane_p16(__s2_68, __p3_68), __s0_68, __p1_68); \ - __ret_68; \ -}) -#else -#define vcopy_laneq_p16(__p0_69, __p1_69, __p2_69, __p3_69) __extension__ ({ \ - poly16x4_t __s0_69 = __p0_69; \ - poly16x8_t __s2_69 = __p2_69; \ - poly16x4_t __rev0_69; __rev0_69 = __builtin_shufflevector(__s0_69, __s0_69, 3, 2, 1, 0); \ - poly16x8_t __rev2_69; __rev2_69 = __builtin_shufflevector(__s2_69, __s2_69, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x4_t __ret_69; \ - __ret_69 = __noswap_vset_lane_p16(__noswap_vgetq_lane_p16(__rev2_69, __p3_69), __rev0_69, __p1_69); \ - __ret_69 = __builtin_shufflevector(__ret_69, __ret_69, 3, 2, 1, 0); \ - __ret_69; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_u8(__p0_70, __p1_70, __p2_70, __p3_70) __extension__ ({ \ - uint8x8_t __s0_70 = __p0_70; \ - uint8x16_t __s2_70 = __p2_70; \ - uint8x8_t __ret_70; \ - __ret_70 = vset_lane_u8(vgetq_lane_u8(__s2_70, __p3_70), __s0_70, __p1_70); \ - __ret_70; \ -}) -#else -#define vcopy_laneq_u8(__p0_71, __p1_71, __p2_71, __p3_71) __extension__ ({ \ - uint8x8_t __s0_71 = __p0_71; \ - uint8x16_t __s2_71 = __p2_71; \ - uint8x8_t __rev0_71; __rev0_71 = __builtin_shufflevector(__s0_71, __s0_71, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __rev2_71; __rev2_71 = __builtin_shufflevector(__s2_71, __s2_71, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret_71; \ - __ret_71 = __noswap_vset_lane_u8(__noswap_vgetq_lane_u8(__rev2_71, __p3_71), __rev0_71, __p1_71); \ - __ret_71 = __builtin_shufflevector(__ret_71, __ret_71, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_71; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_u32(__p0_72, __p1_72, __p2_72, __p3_72) __extension__ ({ \ - uint32x2_t __s0_72 = __p0_72; \ - uint32x4_t __s2_72 = __p2_72; \ - uint32x2_t __ret_72; \ - __ret_72 = vset_lane_u32(vgetq_lane_u32(__s2_72, __p3_72), __s0_72, __p1_72); \ - __ret_72; \ -}) -#else -#define vcopy_laneq_u32(__p0_73, __p1_73, __p2_73, __p3_73) __extension__ ({ \ - uint32x2_t __s0_73 = __p0_73; \ - uint32x4_t __s2_73 = __p2_73; \ - uint32x2_t __rev0_73; __rev0_73 = __builtin_shufflevector(__s0_73, __s0_73, 1, 0); \ - uint32x4_t __rev2_73; __rev2_73 = __builtin_shufflevector(__s2_73, __s2_73, 3, 2, 1, 0); \ - uint32x2_t __ret_73; \ - __ret_73 = __noswap_vset_lane_u32(__noswap_vgetq_lane_u32(__rev2_73, __p3_73), __rev0_73, __p1_73); \ - __ret_73 = __builtin_shufflevector(__ret_73, __ret_73, 1, 0); \ - __ret_73; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_u64(__p0_74, __p1_74, __p2_74, __p3_74) __extension__ ({ \ - uint64x1_t __s0_74 = __p0_74; \ - uint64x2_t __s2_74 = __p2_74; \ - uint64x1_t __ret_74; \ - __ret_74 = vset_lane_u64(vgetq_lane_u64(__s2_74, __p3_74), __s0_74, __p1_74); \ - __ret_74; \ -}) -#else -#define vcopy_laneq_u64(__p0_75, __p1_75, __p2_75, __p3_75) __extension__ ({ \ - uint64x1_t __s0_75 = __p0_75; \ - uint64x2_t __s2_75 = __p2_75; \ - uint64x2_t __rev2_75; __rev2_75 = __builtin_shufflevector(__s2_75, __s2_75, 1, 0); \ - uint64x1_t __ret_75; \ - __ret_75 = __noswap_vset_lane_u64(__noswap_vgetq_lane_u64(__rev2_75, __p3_75), __s0_75, __p1_75); \ - __ret_75; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_u16(__p0_76, __p1_76, __p2_76, __p3_76) __extension__ ({ \ - uint16x4_t __s0_76 = __p0_76; \ - uint16x8_t __s2_76 = __p2_76; \ - uint16x4_t __ret_76; \ - __ret_76 = vset_lane_u16(vgetq_lane_u16(__s2_76, __p3_76), __s0_76, __p1_76); \ - __ret_76; \ -}) -#else -#define vcopy_laneq_u16(__p0_77, __p1_77, __p2_77, __p3_77) __extension__ ({ \ - uint16x4_t __s0_77 = __p0_77; \ - uint16x8_t __s2_77 = __p2_77; \ - uint16x4_t __rev0_77; __rev0_77 = __builtin_shufflevector(__s0_77, __s0_77, 3, 2, 1, 0); \ - uint16x8_t __rev2_77; __rev2_77 = __builtin_shufflevector(__s2_77, __s2_77, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __ret_77; \ - __ret_77 = __noswap_vset_lane_u16(__noswap_vgetq_lane_u16(__rev2_77, __p3_77), __rev0_77, __p1_77); \ - __ret_77 = __builtin_shufflevector(__ret_77, __ret_77, 3, 2, 1, 0); \ - __ret_77; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_s8(__p0_78, __p1_78, __p2_78, __p3_78) __extension__ ({ \ - int8x8_t __s0_78 = __p0_78; \ - int8x16_t __s2_78 = __p2_78; \ - int8x8_t __ret_78; \ - __ret_78 = vset_lane_s8(vgetq_lane_s8(__s2_78, __p3_78), __s0_78, __p1_78); \ - __ret_78; \ -}) -#else -#define vcopy_laneq_s8(__p0_79, __p1_79, __p2_79, __p3_79) __extension__ ({ \ - int8x8_t __s0_79 = __p0_79; \ - int8x16_t __s2_79 = __p2_79; \ - int8x8_t __rev0_79; __rev0_79 = __builtin_shufflevector(__s0_79, __s0_79, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __rev2_79; __rev2_79 = __builtin_shufflevector(__s2_79, __s2_79, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret_79; \ - __ret_79 = __noswap_vset_lane_s8(__noswap_vgetq_lane_s8(__rev2_79, __p3_79), __rev0_79, __p1_79); \ - __ret_79 = __builtin_shufflevector(__ret_79, __ret_79, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_79; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_f32(__p0_80, __p1_80, __p2_80, __p3_80) __extension__ ({ \ - float32x2_t __s0_80 = __p0_80; \ - float32x4_t __s2_80 = __p2_80; \ - float32x2_t __ret_80; \ - __ret_80 = vset_lane_f32(vgetq_lane_f32(__s2_80, __p3_80), __s0_80, __p1_80); \ - __ret_80; \ -}) -#else -#define vcopy_laneq_f32(__p0_81, __p1_81, __p2_81, __p3_81) __extension__ ({ \ - float32x2_t __s0_81 = __p0_81; \ - float32x4_t __s2_81 = __p2_81; \ - float32x2_t __rev0_81; __rev0_81 = __builtin_shufflevector(__s0_81, __s0_81, 1, 0); \ - float32x4_t __rev2_81; __rev2_81 = __builtin_shufflevector(__s2_81, __s2_81, 3, 2, 1, 0); \ - float32x2_t __ret_81; \ - __ret_81 = __noswap_vset_lane_f32(__noswap_vgetq_lane_f32(__rev2_81, __p3_81), __rev0_81, __p1_81); \ - __ret_81 = __builtin_shufflevector(__ret_81, __ret_81, 1, 0); \ - __ret_81; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_s32(__p0_82, __p1_82, __p2_82, __p3_82) __extension__ ({ \ - int32x2_t __s0_82 = __p0_82; \ - int32x4_t __s2_82 = __p2_82; \ - int32x2_t __ret_82; \ - __ret_82 = vset_lane_s32(vgetq_lane_s32(__s2_82, __p3_82), __s0_82, __p1_82); \ - __ret_82; \ -}) -#else -#define vcopy_laneq_s32(__p0_83, __p1_83, __p2_83, __p3_83) __extension__ ({ \ - int32x2_t __s0_83 = __p0_83; \ - int32x4_t __s2_83 = __p2_83; \ - int32x2_t __rev0_83; __rev0_83 = __builtin_shufflevector(__s0_83, __s0_83, 1, 0); \ - int32x4_t __rev2_83; __rev2_83 = __builtin_shufflevector(__s2_83, __s2_83, 3, 2, 1, 0); \ - int32x2_t __ret_83; \ - __ret_83 = __noswap_vset_lane_s32(__noswap_vgetq_lane_s32(__rev2_83, __p3_83), __rev0_83, __p1_83); \ - __ret_83 = __builtin_shufflevector(__ret_83, __ret_83, 1, 0); \ - __ret_83; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_s64(__p0_84, __p1_84, __p2_84, __p3_84) __extension__ ({ \ - int64x1_t __s0_84 = __p0_84; \ - int64x2_t __s2_84 = __p2_84; \ - int64x1_t __ret_84; \ - __ret_84 = vset_lane_s64(vgetq_lane_s64(__s2_84, __p3_84), __s0_84, __p1_84); \ - __ret_84; \ -}) -#else -#define vcopy_laneq_s64(__p0_85, __p1_85, __p2_85, __p3_85) __extension__ ({ \ - int64x1_t __s0_85 = __p0_85; \ - int64x2_t __s2_85 = __p2_85; \ - int64x2_t __rev2_85; __rev2_85 = __builtin_shufflevector(__s2_85, __s2_85, 1, 0); \ - int64x1_t __ret_85; \ - __ret_85 = __noswap_vset_lane_s64(__noswap_vgetq_lane_s64(__rev2_85, __p3_85), __s0_85, __p1_85); \ - __ret_85; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_s16(__p0_86, __p1_86, __p2_86, __p3_86) __extension__ ({ \ - int16x4_t __s0_86 = __p0_86; \ - int16x8_t __s2_86 = __p2_86; \ - int16x4_t __ret_86; \ - __ret_86 = vset_lane_s16(vgetq_lane_s16(__s2_86, __p3_86), __s0_86, __p1_86); \ - __ret_86; \ -}) -#else -#define vcopy_laneq_s16(__p0_87, __p1_87, __p2_87, __p3_87) __extension__ ({ \ - int16x4_t __s0_87 = __p0_87; \ - int16x8_t __s2_87 = __p2_87; \ - int16x4_t __rev0_87; __rev0_87 = __builtin_shufflevector(__s0_87, __s0_87, 3, 2, 1, 0); \ - int16x8_t __rev2_87; __rev2_87 = __builtin_shufflevector(__s2_87, __s2_87, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret_87; \ - __ret_87 = __noswap_vset_lane_s16(__noswap_vgetq_lane_s16(__rev2_87, __p3_87), __rev0_87, __p1_87); \ - __ret_87 = __builtin_shufflevector(__ret_87, __ret_87, 3, 2, 1, 0); \ - __ret_87; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vcreate_p64(uint64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#else -__ai poly64x1_t vcreate_p64(uint64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vcreate_f64(uint64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#else -__ai float64x1_t vcreate_f64(uint64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t)(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vcvts_f32_s32(int32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvts_f32_s32(__p0); - return __ret; -} -#else -__ai float32_t vcvts_f32_s32(int32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvts_f32_s32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vcvts_f32_u32(uint32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvts_f32_u32(__p0); - return __ret; -} -#else -__ai float32_t vcvts_f32_u32(uint32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvts_f32_u32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vcvt_f32_f64(float64x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_f64((int8x16_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vcvt_f32_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_f64((int8x16_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vcvt_f32_f64(float64x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvt_f32_f64((int8x16_t)__p0, 9); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vcvtd_f64_s64(int64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vcvtd_f64_s64(__p0); - return __ret; -} -#else -__ai float64_t vcvtd_f64_s64(int64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vcvtd_f64_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vcvtd_f64_u64(uint64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vcvtd_f64_u64(__p0); - return __ret; -} -#else -__ai float64_t vcvtd_f64_u64(uint64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vcvtd_f64_u64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vcvtq_f64_u64(uint64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvtq_f64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai float64x2_t vcvtq_f64_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvtq_f64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vcvtq_f64_s64(int64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvtq_f64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai float64x2_t vcvtq_f64_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvtq_f64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vcvt_f64_u64(uint64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vcvt_f64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai float64x1_t vcvt_f64_u64(uint64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vcvt_f64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vcvt_f64_s64(int64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vcvt_f64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai float64x1_t vcvt_f64_s64(int64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vcvt_f64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vcvt_f64_f32(float32x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvt_f64_f32((int8x8_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vcvt_f64_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvt_f64_f32((int8x8_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float64x2_t __noswap_vcvt_f64_f32(float32x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vcvt_f64_f32((int8x8_t)__p0, 42); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float16x8_t vcvt_high_f16_f32(float16x4_t __p0, float32x4_t __p1) { - float16x8_t __ret; - __ret = vcombine_f16(__p0, vcvt_f16_f32(__p1)); - return __ret; -} -#else -__ai float16x8_t vcvt_high_f16_f32(float16x4_t __p0, float32x4_t __p1) { - float16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float16x8_t __ret; - __ret = __noswap_vcombine_f16(__rev0, __noswap_vcvt_f16_f32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvt_high_f32_f16(float16x8_t __p0) { - float32x4_t __ret; - __ret = vcvt_f32_f16(vget_high_f16(__p0)); - return __ret; -} -#else -__ai float32x4_t vcvt_high_f32_f16(float16x8_t __p0) { - float16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __noswap_vcvt_f32_f16(__noswap_vget_high_f16(__rev0)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvt_high_f32_f64(float32x2_t __p0, float64x2_t __p1) { - float32x4_t __ret; - __ret = vcombine_f32(__p0, vcvt_f32_f64(__p1)); - return __ret; -} -#else -__ai float32x4_t vcvt_high_f32_f64(float32x2_t __p0, float64x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x4_t __ret; - __ret = __noswap_vcombine_f32(__rev0, __noswap_vcvt_f32_f64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vcvt_high_f64_f32(float32x4_t __p0) { - float64x2_t __ret; - __ret = vcvt_f64_f32(vget_high_f32(__p0)); - return __ret; -} -#else -__ai float64x2_t vcvt_high_f64_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float64x2_t __ret; - __ret = __noswap_vcvt_f64_f32(__noswap_vget_high_f32(__rev0)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvts_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vcvts_n_f32_u32(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvts_n_f32_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vcvts_n_f32_u32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvts_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vcvts_n_f32_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvts_n_f32_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vcvts_n_f32_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vcvtq_n_f64_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vcvtq_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vcvtq_n_f64_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vcvtq_n_f64_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vcvtq_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vcvtq_n_f64_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vcvt_n_f64_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vcvt_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vcvt_n_f64_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vcvt_n_f64_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vcvt_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vcvt_n_f64_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtd_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vcvtd_n_f64_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvtd_n_f64_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vcvtd_n_f64_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtd_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vcvtd_n_f64_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvtd_n_f64_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vcvtd_n_f64_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvts_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vcvts_n_s32_f32(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvts_n_s32_f32(__p0, __p1) __extension__ ({ \ - float32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vcvts_n_s32_f32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vcvtq_n_s64_v((int8x16_t)__s0, __p1, 35); \ - __ret; \ -}) -#else -#define vcvtq_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = (int64x2_t) __builtin_neon_vcvtq_n_s64_v((int8x16_t)__rev0, __p1, 35); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vcvt_n_s64_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#else -#define vcvt_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = (int64x1_t) __builtin_neon_vcvt_n_s64_v((int8x8_t)__s0, __p1, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtd_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vcvtd_n_s64_f64(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvtd_n_s64_f64(__p0, __p1) __extension__ ({ \ - float64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vcvtd_n_s64_f64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvts_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vcvts_n_u32_f32(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvts_n_u32_f32(__p0, __p1) __extension__ ({ \ - float32_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vcvts_n_u32_f32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtq_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vcvtq_n_u64_v((int8x16_t)__s0, __p1, 51); \ - __ret; \ -}) -#else -#define vcvtq_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = (uint64x2_t) __builtin_neon_vcvtq_n_u64_v((int8x16_t)__rev0, __p1, 51); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvt_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vcvt_n_u64_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#else -#define vcvt_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = (uint64x1_t) __builtin_neon_vcvt_n_u64_v((int8x8_t)__s0, __p1, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcvtd_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vcvtd_n_u64_f64(__s0, __p1); \ - __ret; \ -}) -#else -#define vcvtd_n_u64_f64(__p0, __p1) __extension__ ({ \ - float64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vcvtd_n_u64_f64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vcvts_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvts_s32_f32(__p0); - return __ret; -} -#else -__ai int32_t vcvts_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvts_s32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcvtd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtd_s64_f64(__p0); - return __ret; -} -#else -__ai int64_t vcvtd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtd_s64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vcvtq_s64_f64(float64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtq_s64_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vcvtq_s64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vcvtq_s64_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vcvt_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvt_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vcvt_s64_f64(float64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vcvt_s64_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcvts_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvts_u32_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcvts_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvts_u32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcvtd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtd_u64_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcvtd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtd_u64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vcvtq_u64_f64(float64x2_t __p0) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtq_u64_v((int8x16_t)__p0, 51); - return __ret; -} -#else -__ai uint64x2_t vcvtq_u64_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vcvtq_u64_v((int8x16_t)__rev0, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vcvt_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvt_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#else -__ai uint64x1_t vcvt_u64_f64(float64x1_t __p0) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vcvt_u64_v((int8x8_t)__p0, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vcvtas_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtas_s32_f32(__p0); - return __ret; -} -#else -__ai int32_t vcvtas_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtas_s32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcvtad_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtad_s64_f64(__p0); - return __ret; -} -#else -__ai int64_t vcvtad_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtad_s64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcvtas_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtas_u32_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcvtas_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtas_u32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcvtad_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtad_u64_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcvtad_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtad_u64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vcvtms_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtms_s32_f32(__p0); - return __ret; -} -#else -__ai int32_t vcvtms_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtms_s32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcvtmd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtmd_s64_f64(__p0); - return __ret; -} -#else -__ai int64_t vcvtmd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtmd_s64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcvtms_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtms_u32_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcvtms_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtms_u32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcvtmd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtmd_u64_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcvtmd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtmd_u64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vcvtns_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtns_s32_f32(__p0); - return __ret; -} -#else -__ai int32_t vcvtns_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtns_s32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcvtnd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtnd_s64_f64(__p0); - return __ret; -} -#else -__ai int64_t vcvtnd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtnd_s64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcvtns_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtns_u32_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcvtns_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtns_u32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcvtnd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtnd_u64_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcvtnd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtnd_u64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vcvtps_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtps_s32_f32(__p0); - return __ret; -} -#else -__ai int32_t vcvtps_s32_f32(float32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vcvtps_s32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vcvtpd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtpd_s64_f64(__p0); - return __ret; -} -#else -__ai int64_t vcvtpd_s64_f64(float64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vcvtpd_s64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vcvtps_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtps_u32_f32(__p0); - return __ret; -} -#else -__ai uint32_t vcvtps_u32_f32(float32_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vcvtps_u32_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vcvtpd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtpd_u64_f64(__p0); - return __ret; -} -#else -__ai uint64_t vcvtpd_u64_f64(float64_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vcvtpd_u64_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vcvtxd_f32_f64(float64_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvtxd_f32_f64(__p0); - return __ret; -} -#else -__ai float32_t vcvtxd_f32_f64(float64_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vcvtxd_f32_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vcvtx_f32_f64(float64x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvtx_f32_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float32x2_t vcvtx_f32_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvtx_f32_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vcvtx_f32_f64(float64x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vcvtx_f32_v((int8x16_t)__p0, 42); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vcvtx_high_f32_f64(float32x2_t __p0, float64x2_t __p1) { - float32x4_t __ret; - __ret = vcombine_f32(__p0, vcvtx_f32_f64(__p1)); - return __ret; -} -#else -__ai float32x4_t vcvtx_high_f32_f64(float32x2_t __p0, float64x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x4_t __ret; - __ret = __noswap_vcombine_f32(__rev0, __noswap_vcvtx_f32_f64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vdivq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __p0 / __p1; - return __ret; -} -#else -__ai float64x2_t vdivq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 / __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vdivq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __p0 / __p1; - return __ret; -} -#else -__ai float32x4_t vdivq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __rev0 / __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vdiv_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 / __p1; - return __ret; -} -#else -__ai float64x1_t vdiv_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 / __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vdiv_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __p0 / __p1; - return __ret; -} -#else -__ai float32x2_t vdiv_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __rev0 / __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_lane_p8(__p0, __p1) __extension__ ({ \ - poly8x8_t __s0 = __p0; \ - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_lane_p16(__p0, __p1) __extension__ ({ \ - poly16x4_t __s0 = __p0; \ - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_lane_u8(__p0, __p1) __extension__ ({ \ - uint8x8_t __s0 = __p0; \ - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vdups_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_lane_u32(__p0, __p1) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vdups_lane_i32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vdupd_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_lane_u64(__p0, __p1) __extension__ ({ \ - uint64x1_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vdupd_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_lane_u16(__p0, __p1) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_lane_s8(__p0, __p1) __extension__ ({ \ - int8x8_t __s0 = __p0; \ - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vdupb_lane_i8((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vdupd_lane_f64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vdupd_lane_f64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vdups_lane_f32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_lane_f32(__p0, __p1) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vdups_lane_f32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vdups_lane_i32((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_lane_s32(__p0, __p1) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vdups_lane_i32((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vdupd_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_lane_s64(__p0, __p1) __extension__ ({ \ - int64x1_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vdupd_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_lane_s16(__p0, __p1) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vduph_lane_i16((int8x8_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_lane_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_lane_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s0 = __p0; \ - float16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_lane_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_lane_f16(__p0, __p1) __extension__ ({ \ - float16x4_t __s0 = __p0; \ - float16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8_t __ret; \ - __ret = (poly8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16_t __ret; \ - __ret = (poly16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vdups_laneq_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vdups_laneq_i32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vdupd_laneq_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vdupd_laneq_i64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupb_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupb_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vdupb_laneq_i8((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vdupd_laneq_f64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vdupd_laneq_f64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vdups_laneq_f32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vdups_laneq_f32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdups_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vdups_laneq_i32((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdups_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vdups_laneq_i32((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupd_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vdupd_laneq_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vdupd_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vdupd_laneq_i64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vduph_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vduph_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vduph_laneq_i16((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64x1_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_p8(__p0, __p1) __extension__ ({ \ - poly8x16_t __s0 = __p0; \ - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_p16(__p0, __p1) __extension__ ({ \ - poly16x8_t __s0 = __p0; \ - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s0 = __p0; \ - float16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s0 = __p0; \ - float16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdupq_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdupq_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_u8(__p0, __p1) __extension__ ({ \ - uint8x16_t __s0 = __p0; \ - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_u32(__p0, __p1) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_u64(__p0, __p1) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint64x1_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_u16(__p0, __p1) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x8_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_s8(__p0, __p1) __extension__ ({ \ - int8x16_t __s0 = __p0; \ - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x8_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x1_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_f32(__p0, __p1) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s0 = __p0; \ - float16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_f16(__p0, __p1) __extension__ ({ \ - float16x8_t __s0 = __p0; \ - float16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_s32(__p0, __p1) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x1_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_s64(__p0, __p1) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int64x1_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vdup_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __ret; \ - __ret = __builtin_shufflevector(__s0, __s0, __p1, __p1, __p1, __p1); \ - __ret; \ -}) -#else -#define vdup_laneq_s16(__p0, __p1) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __builtin_shufflevector(__rev0, __rev0, __p1, __p1, __p1, __p1); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vdup_n_p64(poly64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t) {__p0}; - return __ret; -} -#else -__ai poly64x1_t vdup_n_p64(poly64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vdupq_n_p64(poly64_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai poly64x2_t vdupq_n_p64(poly64_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vdupq_n_f64(float64_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai float64x2_t vdupq_n_f64(float64_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vdup_n_f64(float64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) {__p0}; - return __ret; -} -#else -__ai float64x1_t vdup_n_f64(float64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#else -#define vext_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 38); \ - __ret; \ -}) -#else -#define vextq_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vextq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 42); \ - __ret; \ -}) -#else -#define vextq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vextq_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vext_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#else -#define vext_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vext_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vfmaq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmaq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 42); - return __ret; -} -#else -__ai float64x2_t vfmaq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmaq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float64x2_t __noswap_vfmaq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmaq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 42); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vfma_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vfma_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#else -__ai float64x1_t vfma_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vfma_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmad_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_lane_f64(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vfmad_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_lane_f64(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#define __noswap_vfmad_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_lane_f64(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmas_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_lane_f32(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vfmas_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_lane_f32(__s0, __s1, (int8x8_t)__rev2, __p3); \ - __ret; \ -}) -#define __noswap_vfmas_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_lane_f32(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmaq_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x8_t)__s2, __p3, 42); \ - __ret; \ -}) -#else -#define vfmaq_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x8_t)__s2, __p3, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vfmaq_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x8_t)__s2, __p3, 42); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmaq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x8_t)__s2, __p3, 41); \ - __ret; \ -}) -#else -#define vfmaq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x8_t)__rev2, __p3, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vfmaq_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_lane_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x8_t)__s2, __p3, 41); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfma_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_lane_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x8_t)__s2, __p3, 10); \ - __ret; \ -}) -#else -#define vfma_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_lane_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x8_t)__s2, __p3, 10); \ - __ret; \ -}) -#define __noswap_vfma_lane_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __s2 = __p2; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_lane_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x8_t)__s2, __p3, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfma_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_lane_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x8_t)__s2, __p3, 9); \ - __ret; \ -}) -#else -#define vfma_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_lane_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, __p3, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vfma_lane_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_lane_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x8_t)__s2, __p3, 9); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmad_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_laneq_f64(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vfmad_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_laneq_f64(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#define __noswap_vfmad_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vfmad_laneq_f64(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmas_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_laneq_f32(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vfmas_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_laneq_f32(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#define __noswap_vfmas_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32_t __s0 = __p0; \ - float32_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32_t __ret; \ - __ret = (float32_t) __builtin_neon_vfmas_laneq_f32(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmaq_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x16_t)__s2, __p3, 42); \ - __ret; \ -}) -#else -#define vfmaq_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, __p3, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vfmaq_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x16_t)__s2, __p3, 42); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmaq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x16_t)__s2, __p3, 41); \ - __ret; \ -}) -#else -#define vfmaq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, __p3, 41); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#define __noswap_vfmaq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = (float32x4_t) __builtin_neon_vfmaq_laneq_v((int8x16_t)__s0, (int8x16_t)__s1, (int8x16_t)__s2, __p3, 41); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfma_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_laneq_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x16_t)__s2, __p3, 10); \ - __ret; \ -}) -#else -#define vfma_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_laneq_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x16_t)__rev2, __p3, 10); \ - __ret; \ -}) -#define __noswap_vfma_laneq_f64(__p0, __p1, __p2, __p3) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __s2 = __p2; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vfma_laneq_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x16_t)__s2, __p3, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfma_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_laneq_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x16_t)__s2, __p3, 9); \ - __ret; \ -}) -#else -#define vfma_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_laneq_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x16_t)__rev2, __p3, 9); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vfma_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = (float32x2_t) __builtin_neon_vfma_laneq_v((int8x8_t)__s0, (int8x8_t)__s1, (int8x16_t)__s2, __p3, 9); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vfmaq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __ret; - __ret = vfmaq_f64(__p0, __p1, (float64x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai float64x2_t vfmaq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __noswap_vfmaq_f64(__rev0, __rev1, (float64x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vfmaq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __ret; - __ret = vfmaq_f32(__p0, __p1, (float32x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai float32x4_t vfmaq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __noswap_vfmaq_f32(__rev0, __rev1, (float32x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vfma_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __ret; - __ret = vfma_f32(__p0, __p1, (float32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai float32x2_t vfma_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __noswap_vfma_f32(__rev0, __rev1, (float32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vfmsq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmsq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 42); - return __ret; -} -#else -__ai float64x2_t vfmsq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float64x2_t __noswap_vfmsq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vfmsq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 42); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vfmsq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmsq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41); - return __ret; -} -#else -__ai float32x4_t vfmsq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float32x4_t __noswap_vfmsq_f32(float32x4_t __p0, float32x4_t __p1, float32x4_t __p2) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vfmsq_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vfms_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vfms_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#else -__ai float64x1_t vfms_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vfms_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vfms_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfms_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 9); - return __ret; -} -#else -__ai float32x2_t vfms_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfms_v((int8x8_t)__rev0, (int8x8_t)__rev1, (int8x8_t)__rev2, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vfms_f32(float32x2_t __p0, float32x2_t __p1, float32x2_t __p2) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vfms_v((int8x8_t)__p0, (int8x8_t)__p1, (int8x8_t)__p2, 9); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsd_lane_f64(__p0_88, __p1_88, __p2_88, __p3_88) __extension__ ({ \ - float64_t __s0_88 = __p0_88; \ - float64_t __s1_88 = __p1_88; \ - float64x1_t __s2_88 = __p2_88; \ - float64_t __ret_88; \ - __ret_88 = vfmad_lane_f64(__s0_88, __s1_88, -__s2_88, __p3_88); \ - __ret_88; \ -}) -#else -#define vfmsd_lane_f64(__p0_89, __p1_89, __p2_89, __p3_89) __extension__ ({ \ - float64_t __s0_89 = __p0_89; \ - float64_t __s1_89 = __p1_89; \ - float64x1_t __s2_89 = __p2_89; \ - float64_t __ret_89; \ - __ret_89 = __noswap_vfmad_lane_f64(__s0_89, __s1_89, -__s2_89, __p3_89); \ - __ret_89; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmss_lane_f32(__p0_90, __p1_90, __p2_90, __p3_90) __extension__ ({ \ - float32_t __s0_90 = __p0_90; \ - float32_t __s1_90 = __p1_90; \ - float32x2_t __s2_90 = __p2_90; \ - float32_t __ret_90; \ - __ret_90 = vfmas_lane_f32(__s0_90, __s1_90, -__s2_90, __p3_90); \ - __ret_90; \ -}) -#else -#define vfmss_lane_f32(__p0_91, __p1_91, __p2_91, __p3_91) __extension__ ({ \ - float32_t __s0_91 = __p0_91; \ - float32_t __s1_91 = __p1_91; \ - float32x2_t __s2_91 = __p2_91; \ - float32x2_t __rev2_91; __rev2_91 = __builtin_shufflevector(__s2_91, __s2_91, 1, 0); \ - float32_t __ret_91; \ - __ret_91 = __noswap_vfmas_lane_f32(__s0_91, __s1_91, -__rev2_91, __p3_91); \ - __ret_91; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsq_lane_f64(__p0_92, __p1_92, __p2_92, __p3_92) __extension__ ({ \ - float64x2_t __s0_92 = __p0_92; \ - float64x2_t __s1_92 = __p1_92; \ - float64x1_t __s2_92 = __p2_92; \ - float64x2_t __ret_92; \ - __ret_92 = vfmaq_lane_f64(__s0_92, __s1_92, -__s2_92, __p3_92); \ - __ret_92; \ -}) -#else -#define vfmsq_lane_f64(__p0_93, __p1_93, __p2_93, __p3_93) __extension__ ({ \ - float64x2_t __s0_93 = __p0_93; \ - float64x2_t __s1_93 = __p1_93; \ - float64x1_t __s2_93 = __p2_93; \ - float64x2_t __rev0_93; __rev0_93 = __builtin_shufflevector(__s0_93, __s0_93, 1, 0); \ - float64x2_t __rev1_93; __rev1_93 = __builtin_shufflevector(__s1_93, __s1_93, 1, 0); \ - float64x2_t __ret_93; \ - __ret_93 = __noswap_vfmaq_lane_f64(__rev0_93, __rev1_93, -__s2_93, __p3_93); \ - __ret_93 = __builtin_shufflevector(__ret_93, __ret_93, 1, 0); \ - __ret_93; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsq_lane_f32(__p0_94, __p1_94, __p2_94, __p3_94) __extension__ ({ \ - float32x4_t __s0_94 = __p0_94; \ - float32x4_t __s1_94 = __p1_94; \ - float32x2_t __s2_94 = __p2_94; \ - float32x4_t __ret_94; \ - __ret_94 = vfmaq_lane_f32(__s0_94, __s1_94, -__s2_94, __p3_94); \ - __ret_94; \ -}) -#else -#define vfmsq_lane_f32(__p0_95, __p1_95, __p2_95, __p3_95) __extension__ ({ \ - float32x4_t __s0_95 = __p0_95; \ - float32x4_t __s1_95 = __p1_95; \ - float32x2_t __s2_95 = __p2_95; \ - float32x4_t __rev0_95; __rev0_95 = __builtin_shufflevector(__s0_95, __s0_95, 3, 2, 1, 0); \ - float32x4_t __rev1_95; __rev1_95 = __builtin_shufflevector(__s1_95, __s1_95, 3, 2, 1, 0); \ - float32x2_t __rev2_95; __rev2_95 = __builtin_shufflevector(__s2_95, __s2_95, 1, 0); \ - float32x4_t __ret_95; \ - __ret_95 = __noswap_vfmaq_lane_f32(__rev0_95, __rev1_95, -__rev2_95, __p3_95); \ - __ret_95 = __builtin_shufflevector(__ret_95, __ret_95, 3, 2, 1, 0); \ - __ret_95; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfms_lane_f64(__p0_96, __p1_96, __p2_96, __p3_96) __extension__ ({ \ - float64x1_t __s0_96 = __p0_96; \ - float64x1_t __s1_96 = __p1_96; \ - float64x1_t __s2_96 = __p2_96; \ - float64x1_t __ret_96; \ - __ret_96 = vfma_lane_f64(__s0_96, __s1_96, -__s2_96, __p3_96); \ - __ret_96; \ -}) -#else -#define vfms_lane_f64(__p0_97, __p1_97, __p2_97, __p3_97) __extension__ ({ \ - float64x1_t __s0_97 = __p0_97; \ - float64x1_t __s1_97 = __p1_97; \ - float64x1_t __s2_97 = __p2_97; \ - float64x1_t __ret_97; \ - __ret_97 = __noswap_vfma_lane_f64(__s0_97, __s1_97, -__s2_97, __p3_97); \ - __ret_97; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfms_lane_f32(__p0_98, __p1_98, __p2_98, __p3_98) __extension__ ({ \ - float32x2_t __s0_98 = __p0_98; \ - float32x2_t __s1_98 = __p1_98; \ - float32x2_t __s2_98 = __p2_98; \ - float32x2_t __ret_98; \ - __ret_98 = vfma_lane_f32(__s0_98, __s1_98, -__s2_98, __p3_98); \ - __ret_98; \ -}) -#else -#define vfms_lane_f32(__p0_99, __p1_99, __p2_99, __p3_99) __extension__ ({ \ - float32x2_t __s0_99 = __p0_99; \ - float32x2_t __s1_99 = __p1_99; \ - float32x2_t __s2_99 = __p2_99; \ - float32x2_t __rev0_99; __rev0_99 = __builtin_shufflevector(__s0_99, __s0_99, 1, 0); \ - float32x2_t __rev1_99; __rev1_99 = __builtin_shufflevector(__s1_99, __s1_99, 1, 0); \ - float32x2_t __rev2_99; __rev2_99 = __builtin_shufflevector(__s2_99, __s2_99, 1, 0); \ - float32x2_t __ret_99; \ - __ret_99 = __noswap_vfma_lane_f32(__rev0_99, __rev1_99, -__rev2_99, __p3_99); \ - __ret_99 = __builtin_shufflevector(__ret_99, __ret_99, 1, 0); \ - __ret_99; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsd_laneq_f64(__p0_100, __p1_100, __p2_100, __p3_100) __extension__ ({ \ - float64_t __s0_100 = __p0_100; \ - float64_t __s1_100 = __p1_100; \ - float64x2_t __s2_100 = __p2_100; \ - float64_t __ret_100; \ - __ret_100 = vfmad_laneq_f64(__s0_100, __s1_100, -__s2_100, __p3_100); \ - __ret_100; \ -}) -#else -#define vfmsd_laneq_f64(__p0_101, __p1_101, __p2_101, __p3_101) __extension__ ({ \ - float64_t __s0_101 = __p0_101; \ - float64_t __s1_101 = __p1_101; \ - float64x2_t __s2_101 = __p2_101; \ - float64x2_t __rev2_101; __rev2_101 = __builtin_shufflevector(__s2_101, __s2_101, 1, 0); \ - float64_t __ret_101; \ - __ret_101 = __noswap_vfmad_laneq_f64(__s0_101, __s1_101, -__rev2_101, __p3_101); \ - __ret_101; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmss_laneq_f32(__p0_102, __p1_102, __p2_102, __p3_102) __extension__ ({ \ - float32_t __s0_102 = __p0_102; \ - float32_t __s1_102 = __p1_102; \ - float32x4_t __s2_102 = __p2_102; \ - float32_t __ret_102; \ - __ret_102 = vfmas_laneq_f32(__s0_102, __s1_102, -__s2_102, __p3_102); \ - __ret_102; \ -}) -#else -#define vfmss_laneq_f32(__p0_103, __p1_103, __p2_103, __p3_103) __extension__ ({ \ - float32_t __s0_103 = __p0_103; \ - float32_t __s1_103 = __p1_103; \ - float32x4_t __s2_103 = __p2_103; \ - float32x4_t __rev2_103; __rev2_103 = __builtin_shufflevector(__s2_103, __s2_103, 3, 2, 1, 0); \ - float32_t __ret_103; \ - __ret_103 = __noswap_vfmas_laneq_f32(__s0_103, __s1_103, -__rev2_103, __p3_103); \ - __ret_103; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsq_laneq_f64(__p0_104, __p1_104, __p2_104, __p3_104) __extension__ ({ \ - float64x2_t __s0_104 = __p0_104; \ - float64x2_t __s1_104 = __p1_104; \ - float64x2_t __s2_104 = __p2_104; \ - float64x2_t __ret_104; \ - __ret_104 = vfmaq_laneq_f64(__s0_104, __s1_104, -__s2_104, __p3_104); \ - __ret_104; \ -}) -#else -#define vfmsq_laneq_f64(__p0_105, __p1_105, __p2_105, __p3_105) __extension__ ({ \ - float64x2_t __s0_105 = __p0_105; \ - float64x2_t __s1_105 = __p1_105; \ - float64x2_t __s2_105 = __p2_105; \ - float64x2_t __rev0_105; __rev0_105 = __builtin_shufflevector(__s0_105, __s0_105, 1, 0); \ - float64x2_t __rev1_105; __rev1_105 = __builtin_shufflevector(__s1_105, __s1_105, 1, 0); \ - float64x2_t __rev2_105; __rev2_105 = __builtin_shufflevector(__s2_105, __s2_105, 1, 0); \ - float64x2_t __ret_105; \ - __ret_105 = __noswap_vfmaq_laneq_f64(__rev0_105, __rev1_105, -__rev2_105, __p3_105); \ - __ret_105 = __builtin_shufflevector(__ret_105, __ret_105, 1, 0); \ - __ret_105; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfmsq_laneq_f32(__p0_106, __p1_106, __p2_106, __p3_106) __extension__ ({ \ - float32x4_t __s0_106 = __p0_106; \ - float32x4_t __s1_106 = __p1_106; \ - float32x4_t __s2_106 = __p2_106; \ - float32x4_t __ret_106; \ - __ret_106 = vfmaq_laneq_f32(__s0_106, __s1_106, -__s2_106, __p3_106); \ - __ret_106; \ -}) -#else -#define vfmsq_laneq_f32(__p0_107, __p1_107, __p2_107, __p3_107) __extension__ ({ \ - float32x4_t __s0_107 = __p0_107; \ - float32x4_t __s1_107 = __p1_107; \ - float32x4_t __s2_107 = __p2_107; \ - float32x4_t __rev0_107; __rev0_107 = __builtin_shufflevector(__s0_107, __s0_107, 3, 2, 1, 0); \ - float32x4_t __rev1_107; __rev1_107 = __builtin_shufflevector(__s1_107, __s1_107, 3, 2, 1, 0); \ - float32x4_t __rev2_107; __rev2_107 = __builtin_shufflevector(__s2_107, __s2_107, 3, 2, 1, 0); \ - float32x4_t __ret_107; \ - __ret_107 = __noswap_vfmaq_laneq_f32(__rev0_107, __rev1_107, -__rev2_107, __p3_107); \ - __ret_107 = __builtin_shufflevector(__ret_107, __ret_107, 3, 2, 1, 0); \ - __ret_107; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfms_laneq_f64(__p0_108, __p1_108, __p2_108, __p3_108) __extension__ ({ \ - float64x1_t __s0_108 = __p0_108; \ - float64x1_t __s1_108 = __p1_108; \ - float64x2_t __s2_108 = __p2_108; \ - float64x1_t __ret_108; \ - __ret_108 = vfma_laneq_f64(__s0_108, __s1_108, -__s2_108, __p3_108); \ - __ret_108; \ -}) -#else -#define vfms_laneq_f64(__p0_109, __p1_109, __p2_109, __p3_109) __extension__ ({ \ - float64x1_t __s0_109 = __p0_109; \ - float64x1_t __s1_109 = __p1_109; \ - float64x2_t __s2_109 = __p2_109; \ - float64x2_t __rev2_109; __rev2_109 = __builtin_shufflevector(__s2_109, __s2_109, 1, 0); \ - float64x1_t __ret_109; \ - __ret_109 = __noswap_vfma_laneq_f64(__s0_109, __s1_109, -__rev2_109, __p3_109); \ - __ret_109; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vfms_laneq_f32(__p0_110, __p1_110, __p2_110, __p3_110) __extension__ ({ \ - float32x2_t __s0_110 = __p0_110; \ - float32x2_t __s1_110 = __p1_110; \ - float32x4_t __s2_110 = __p2_110; \ - float32x2_t __ret_110; \ - __ret_110 = vfma_laneq_f32(__s0_110, __s1_110, -__s2_110, __p3_110); \ - __ret_110; \ -}) -#else -#define vfms_laneq_f32(__p0_111, __p1_111, __p2_111, __p3_111) __extension__ ({ \ - float32x2_t __s0_111 = __p0_111; \ - float32x2_t __s1_111 = __p1_111; \ - float32x4_t __s2_111 = __p2_111; \ - float32x2_t __rev0_111; __rev0_111 = __builtin_shufflevector(__s0_111, __s0_111, 1, 0); \ - float32x2_t __rev1_111; __rev1_111 = __builtin_shufflevector(__s1_111, __s1_111, 1, 0); \ - float32x4_t __rev2_111; __rev2_111 = __builtin_shufflevector(__s2_111, __s2_111, 3, 2, 1, 0); \ - float32x2_t __ret_111; \ - __ret_111 = __noswap_vfma_laneq_f32(__rev0_111, __rev1_111, -__rev2_111, __p3_111); \ - __ret_111 = __builtin_shufflevector(__ret_111, __ret_111, 1, 0); \ - __ret_111; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vfmsq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __ret; - __ret = vfmsq_f64(__p0, __p1, (float64x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai float64x2_t vfmsq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __noswap_vfmsq_f64(__rev0, __rev1, (float64x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vfmsq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __ret; - __ret = vfmsq_f32(__p0, __p1, (float32x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai float32x4_t vfmsq_n_f32(float32x4_t __p0, float32x4_t __p1, float32_t __p2) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __noswap_vfmsq_f32(__rev0, __rev1, (float32x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vfms_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __ret; - __ret = vfms_f32(__p0, __p1, (float32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai float32x2_t vfms_n_f32(float32x2_t __p0, float32x2_t __p1, float32_t __p2) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __noswap_vfms_f32(__rev0, __rev1, (float32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vget_high_p64(poly64x2_t __p0) { - poly64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1); - return __ret; -} -#else -__ai poly64x1_t vget_high_p64(poly64x2_t __p0) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1); - return __ret; -} -__ai poly64x1_t __noswap_vget_high_p64(poly64x2_t __p0) { - poly64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vget_high_f64(float64x2_t __p0) { - float64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 1); - return __ret; -} -#else -__ai float64x1_t vget_high_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vget_lane_i64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64_t __ret; \ - __ret = (poly64_t) __builtin_neon_vgetq_lane_i64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vgetq_lane_f64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vgetq_lane_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vgetq_lane_f64((int8x16_t)__rev0, __p1); \ - __ret; \ -}) -#define __noswap_vgetq_lane_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vgetq_lane_f64((int8x16_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vget_lane_f64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#else -#define vget_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vget_lane_f64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#define __noswap_vget_lane_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64_t __ret; \ - __ret = (float64_t) __builtin_neon_vget_lane_f64((int8x8_t)__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vget_low_p64(poly64x2_t __p0) { - poly64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0); - return __ret; -} -#else -__ai poly64x1_t vget_low_p64(poly64x2_t __p0) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vget_low_f64(float64x2_t __p0) { - float64x1_t __ret; - __ret = __builtin_shufflevector(__p0, __p0, 0); - return __ret; -} -#else -__ai float64x1_t vget_low_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x1_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev0, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p64(__p0) __extension__ ({ \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_v(__p0, 6); \ - __ret; \ -}) -#else -#define vld1_p64(__p0) __extension__ ({ \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_v(__p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p64(__p0) __extension__ ({ \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_v(__p0, 38); \ - __ret; \ -}) -#else -#define vld1q_p64(__p0) __extension__ ({ \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_v(__p0, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f64(__p0) __extension__ ({ \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_v(__p0, 42); \ - __ret; \ -}) -#else -#define vld1q_f64(__p0) __extension__ ({ \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_v(__p0, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f64(__p0) __extension__ ({ \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_v(__p0, 10); \ - __ret; \ -}) -#else -#define vld1_f64(__p0) __extension__ ({ \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_v(__p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_p64(__p0) __extension__ ({ \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_dup_v(__p0, 6); \ - __ret; \ -}) -#else -#define vld1_dup_p64(__p0) __extension__ ({ \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_dup_v(__p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_p64(__p0) __extension__ ({ \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_dup_v(__p0, 38); \ - __ret; \ -}) -#else -#define vld1q_dup_p64(__p0) __extension__ ({ \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_dup_v(__p0, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_dup_f64(__p0) __extension__ ({ \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_dup_v(__p0, 42); \ - __ret; \ -}) -#else -#define vld1q_dup_f64(__p0) __extension__ ({ \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_dup_v(__p0, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_dup_f64(__p0) __extension__ ({ \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_dup_v(__p0, 10); \ - __ret; \ -}) -#else -#define vld1_dup_f64(__p0) __extension__ ({ \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_dup_v(__p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#else -#define vld1_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 38); \ - __ret; \ -}) -#else -#define vld1q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__s1, __p2, 42); \ - __ret; \ -}) -#else -#define vld1q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vld1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 42); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#else -#define vld1_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vld1_lane_v(__p0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p8_x2(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld1_p8_x2(__p0) __extension__ ({ \ - poly8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p64_x2(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld1_p64_x2(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p16_x2(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld1_p16_x2(__p0) __extension__ ({ \ - poly16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p8_x2(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld1q_p8_x2(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p64_x2(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld1q_p64_x2(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p16_x2(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld1q_p16_x2(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u8_x2(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld1q_u8_x2(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u32_x2(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld1q_u32_x2(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u64_x2(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld1q_u64_x2(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u16_x2(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld1q_u16_x2(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s8_x2(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld1q_s8_x2(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f64_x2(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld1q_f64_x2(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f32_x2(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld1q_f32_x2(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f16_x2(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld1q_f16_x2(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s32_x2(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld1q_s32_x2(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s64_x2(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld1q_s64_x2(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s16_x2(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld1q_s16_x2(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld1q_x2_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u8_x2(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld1_u8_x2(__p0) __extension__ ({ \ - uint8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u32_x2(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld1_u32_x2(__p0) __extension__ ({ \ - uint32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u64_x2(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld1_u64_x2(__p0) __extension__ ({ \ - uint64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u16_x2(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld1_u16_x2(__p0) __extension__ ({ \ - uint16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s8_x2(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld1_s8_x2(__p0) __extension__ ({ \ - int8x8x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f64_x2(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld1_f64_x2(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f32_x2(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld1_f32_x2(__p0) __extension__ ({ \ - float32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f16_x2(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld1_f16_x2(__p0) __extension__ ({ \ - float16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s32_x2(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld1_s32_x2(__p0) __extension__ ({ \ - int32x2x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s64_x2(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld1_s64_x2(__p0) __extension__ ({ \ - int64x1x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s16_x2(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld1_s16_x2(__p0) __extension__ ({ \ - int16x4x2_t __ret; \ - __builtin_neon_vld1_x2_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p8_x3(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld1_p8_x3(__p0) __extension__ ({ \ - poly8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p64_x3(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld1_p64_x3(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p16_x3(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld1_p16_x3(__p0) __extension__ ({ \ - poly16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p8_x3(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld1q_p8_x3(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p64_x3(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld1q_p64_x3(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p16_x3(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld1q_p16_x3(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u8_x3(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld1q_u8_x3(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u32_x3(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld1q_u32_x3(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u64_x3(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld1q_u64_x3(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u16_x3(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld1q_u16_x3(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s8_x3(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld1q_s8_x3(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f64_x3(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld1q_f64_x3(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f32_x3(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld1q_f32_x3(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f16_x3(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld1q_f16_x3(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s32_x3(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld1q_s32_x3(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s64_x3(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld1q_s64_x3(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s16_x3(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld1q_s16_x3(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld1q_x3_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u8_x3(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld1_u8_x3(__p0) __extension__ ({ \ - uint8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u32_x3(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld1_u32_x3(__p0) __extension__ ({ \ - uint32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u64_x3(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld1_u64_x3(__p0) __extension__ ({ \ - uint64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u16_x3(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld1_u16_x3(__p0) __extension__ ({ \ - uint16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s8_x3(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld1_s8_x3(__p0) __extension__ ({ \ - int8x8x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f64_x3(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld1_f64_x3(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f32_x3(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld1_f32_x3(__p0) __extension__ ({ \ - float32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f16_x3(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld1_f16_x3(__p0) __extension__ ({ \ - float16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s32_x3(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld1_s32_x3(__p0) __extension__ ({ \ - int32x2x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s64_x3(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld1_s64_x3(__p0) __extension__ ({ \ - int64x1x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s16_x3(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld1_s16_x3(__p0) __extension__ ({ \ - int16x4x3_t __ret; \ - __builtin_neon_vld1_x3_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p8_x4(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 4); \ - __ret; \ -}) -#else -#define vld1_p8_x4(__p0) __extension__ ({ \ - poly8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 4); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p64_x4(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld1_p64_x4(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_p16_x4(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 5); \ - __ret; \ -}) -#else -#define vld1_p16_x4(__p0) __extension__ ({ \ - poly16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 5); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p8_x4(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld1q_p8_x4(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p64_x4(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld1q_p64_x4(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_p16_x4(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld1q_p16_x4(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u8_x4(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld1q_u8_x4(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u32_x4(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld1q_u32_x4(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u64_x4(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld1q_u64_x4(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_u16_x4(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld1q_u16_x4(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s8_x4(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld1q_s8_x4(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f64_x4(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld1q_f64_x4(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f32_x4(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld1q_f32_x4(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_f16_x4(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld1q_f16_x4(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s32_x4(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld1q_s32_x4(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s64_x4(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld1q_s64_x4(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1q_s16_x4(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld1q_s16_x4(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld1q_x4_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u8_x4(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 16); \ - __ret; \ -}) -#else -#define vld1_u8_x4(__p0) __extension__ ({ \ - uint8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 16); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u32_x4(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 18); \ - __ret; \ -}) -#else -#define vld1_u32_x4(__p0) __extension__ ({ \ - uint32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 18); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u64_x4(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 19); \ - __ret; \ -}) -#else -#define vld1_u64_x4(__p0) __extension__ ({ \ - uint64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_u16_x4(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 17); \ - __ret; \ -}) -#else -#define vld1_u16_x4(__p0) __extension__ ({ \ - uint16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 17); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s8_x4(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 0); \ - __ret; \ -}) -#else -#define vld1_s8_x4(__p0) __extension__ ({ \ - int8x8x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 0); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f64_x4(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld1_f64_x4(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f32_x4(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 9); \ - __ret; \ -}) -#else -#define vld1_f32_x4(__p0) __extension__ ({ \ - float32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 9); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_f16_x4(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 8); \ - __ret; \ -}) -#else -#define vld1_f16_x4(__p0) __extension__ ({ \ - float16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 8); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s32_x4(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 2); \ - __ret; \ -}) -#else -#define vld1_s32_x4(__p0) __extension__ ({ \ - int32x2x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 2); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s64_x4(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 3); \ - __ret; \ -}) -#else -#define vld1_s64_x4(__p0) __extension__ ({ \ - int64x1x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld1_s16_x4(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 1); \ - __ret; \ -}) -#else -#define vld1_s16_x4(__p0) __extension__ ({ \ - int16x4x4_t __ret; \ - __builtin_neon_vld1_x4_v(&__ret, __p0, 1); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_p64(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld2_p64(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_p64(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld2q_p64(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_u64(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld2q_u64(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_f64(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld2q_f64(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_s64(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld2q_s64(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_f64(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld2_f64(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_p64(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld2_dup_p64(__p0) __extension__ ({ \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_p8(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld2q_dup_p8(__p0) __extension__ ({ \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_p64(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld2q_dup_p64(__p0) __extension__ ({ \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_p16(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld2q_dup_p16(__p0) __extension__ ({ \ - poly16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_u8(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld2q_dup_u8(__p0) __extension__ ({ \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_u32(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld2q_dup_u32(__p0) __extension__ ({ \ - uint32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_u64(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld2q_dup_u64(__p0) __extension__ ({ \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_u16(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld2q_dup_u16(__p0) __extension__ ({ \ - uint16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_s8(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld2q_dup_s8(__p0) __extension__ ({ \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_f64(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld2q_dup_f64(__p0) __extension__ ({ \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_f32(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld2q_dup_f32(__p0) __extension__ ({ \ - float32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_f16(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld2q_dup_f16(__p0) __extension__ ({ \ - float16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_s32(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld2q_dup_s32(__p0) __extension__ ({ \ - int32x4x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_s64(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld2q_dup_s64(__p0) __extension__ ({ \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_dup_s16(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld2q_dup_s16(__p0) __extension__ ({ \ - int16x8x2_t __ret; \ - __builtin_neon_vld2q_dup_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_dup_f64(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld2_dup_f64(__p0) __extension__ ({ \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 6); \ - __ret; \ -}) -#else -#define vld2_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - poly64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 36); \ - __ret; \ -}) -#else -#define vld2q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - poly8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 38); \ - __ret; \ -}) -#else -#define vld2q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - poly64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - poly64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 48); \ - __ret; \ -}) -#else -#define vld2q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - uint8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 51); \ - __ret; \ -}) -#else -#define vld2q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - uint64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - uint64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 32); \ - __ret; \ -}) -#else -#define vld2q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - int8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 42); \ - __ret; \ -}) -#else -#define vld2q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - float64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - float64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 35); \ - __ret; \ -}) -#else -#define vld2q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - int64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - int64x2x2_t __ret; \ - __builtin_neon_vld2q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __p2, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 19); \ - __ret; \ -}) -#else -#define vld2_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - uint64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 10); \ - __ret; \ -}) -#else -#define vld2_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - float64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld2_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 3); \ - __ret; \ -}) -#else -#define vld2_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - int64x1x2_t __ret; \ - __builtin_neon_vld2_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_p64(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld3_p64(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_p64(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld3q_p64(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_u64(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld3q_u64(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_f64(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld3q_f64(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_s64(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld3q_s64(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_f64(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld3_f64(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_p64(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld3_dup_p64(__p0) __extension__ ({ \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_p8(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld3q_dup_p8(__p0) __extension__ ({ \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_p64(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld3q_dup_p64(__p0) __extension__ ({ \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_p16(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld3q_dup_p16(__p0) __extension__ ({ \ - poly16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_u8(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld3q_dup_u8(__p0) __extension__ ({ \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_u32(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld3q_dup_u32(__p0) __extension__ ({ \ - uint32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_u64(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld3q_dup_u64(__p0) __extension__ ({ \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_u16(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld3q_dup_u16(__p0) __extension__ ({ \ - uint16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_s8(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld3q_dup_s8(__p0) __extension__ ({ \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_f64(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld3q_dup_f64(__p0) __extension__ ({ \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_f32(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld3q_dup_f32(__p0) __extension__ ({ \ - float32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_f16(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld3q_dup_f16(__p0) __extension__ ({ \ - float16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_s32(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld3q_dup_s32(__p0) __extension__ ({ \ - int32x4x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_s64(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld3q_dup_s64(__p0) __extension__ ({ \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_dup_s16(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld3q_dup_s16(__p0) __extension__ ({ \ - int16x8x3_t __ret; \ - __builtin_neon_vld3q_dup_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_dup_f64(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld3_dup_f64(__p0) __extension__ ({ \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 6); \ - __ret; \ -}) -#else -#define vld3_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - poly64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 36); \ - __ret; \ -}) -#else -#define vld3q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - poly8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 38); \ - __ret; \ -}) -#else -#define vld3q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - poly64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - poly64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 48); \ - __ret; \ -}) -#else -#define vld3q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - uint8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 51); \ - __ret; \ -}) -#else -#define vld3q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - uint64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - uint64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 32); \ - __ret; \ -}) -#else -#define vld3q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - int8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 42); \ - __ret; \ -}) -#else -#define vld3q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - float64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - float64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 35); \ - __ret; \ -}) -#else -#define vld3q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - int64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - int64x2x3_t __ret; \ - __builtin_neon_vld3q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 19); \ - __ret; \ -}) -#else -#define vld3_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - uint64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 10); \ - __ret; \ -}) -#else -#define vld3_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - float64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld3_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 3); \ - __ret; \ -}) -#else -#define vld3_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - int64x1x3_t __ret; \ - __builtin_neon_vld3_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_p64(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld4_p64(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_p64(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld4q_p64(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_u64(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld4q_u64(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_f64(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld4q_f64(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_s64(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld4q_s64(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_f64(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld4_f64(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_p64(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#else -#define vld4_dup_p64(__p0) __extension__ ({ \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_p8(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 36); \ - __ret; \ -}) -#else -#define vld4q_dup_p8(__p0) __extension__ ({ \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_p64(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 38); \ - __ret; \ -}) -#else -#define vld4q_dup_p64(__p0) __extension__ ({ \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_p16(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 37); \ - __ret; \ -}) -#else -#define vld4q_dup_p16(__p0) __extension__ ({ \ - poly16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 37); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_u8(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 48); \ - __ret; \ -}) -#else -#define vld4q_dup_u8(__p0) __extension__ ({ \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_u32(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 50); \ - __ret; \ -}) -#else -#define vld4q_dup_u32(__p0) __extension__ ({ \ - uint32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 50); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_u64(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 51); \ - __ret; \ -}) -#else -#define vld4q_dup_u64(__p0) __extension__ ({ \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_u16(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 49); \ - __ret; \ -}) -#else -#define vld4q_dup_u16(__p0) __extension__ ({ \ - uint16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 49); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_s8(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 32); \ - __ret; \ -}) -#else -#define vld4q_dup_s8(__p0) __extension__ ({ \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_f64(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 42); \ - __ret; \ -}) -#else -#define vld4q_dup_f64(__p0) __extension__ ({ \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_f32(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 41); \ - __ret; \ -}) -#else -#define vld4q_dup_f32(__p0) __extension__ ({ \ - float32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 41); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_f16(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 40); \ - __ret; \ -}) -#else -#define vld4q_dup_f16(__p0) __extension__ ({ \ - float16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 40); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_s32(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 34); \ - __ret; \ -}) -#else -#define vld4q_dup_s32(__p0) __extension__ ({ \ - int32x4x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 34); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_s64(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 35); \ - __ret; \ -}) -#else -#define vld4q_dup_s64(__p0) __extension__ ({ \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_dup_s16(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 33); \ - __ret; \ -}) -#else -#define vld4q_dup_s16(__p0) __extension__ ({ \ - int16x8x4_t __ret; \ - __builtin_neon_vld4q_dup_v(&__ret, __p0, 33); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_dup_f64(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#else -#define vld4_dup_f64(__p0) __extension__ ({ \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_dup_v(&__ret, __p0, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 6); \ - __ret; \ -}) -#else -#define vld4_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - poly64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 36); \ - __ret; \ -}) -#else -#define vld4q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - poly8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - poly8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 36); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 38); \ - __ret; \ -}) -#else -#define vld4q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - poly64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - poly64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 38); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 48); \ - __ret; \ -}) -#else -#define vld4q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - uint8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 48); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 51); \ - __ret; \ -}) -#else -#define vld4q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - uint64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - uint64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 51); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 32); \ - __ret; \ -}) -#else -#define vld4q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - int8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 32); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 42); \ - __ret; \ -}) -#else -#define vld4q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - float64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - float64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 42); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 35); \ - __ret; \ -}) -#else -#define vld4q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - int64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - int64x2x4_t __ret; \ - __builtin_neon_vld4q_lane_v(&__ret, __p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 35); \ - \ - __ret.val[0] = __builtin_shufflevector(__ret.val[0], __ret.val[0], 1, 0); \ - __ret.val[1] = __builtin_shufflevector(__ret.val[1], __ret.val[1], 1, 0); \ - __ret.val[2] = __builtin_shufflevector(__ret.val[2], __ret.val[2], 1, 0); \ - __ret.val[3] = __builtin_shufflevector(__ret.val[3], __ret.val[3], 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 19); \ - __ret; \ -}) -#else -#define vld4_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - uint64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 19); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 10); \ - __ret; \ -}) -#else -#define vld4_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - float64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vld4_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 3); \ - __ret; \ -}) -#else -#define vld4_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - int64x1x4_t __ret; \ - __builtin_neon_vld4_lane_v(&__ret, __p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vldrq_p128(__p0) __extension__ ({ \ - poly128_t __ret; \ - __ret = (poly128_t) __builtin_neon_vldrq_p128(__p0); \ - __ret; \ -}) -#else -#define vldrq_p128(__p0) __extension__ ({ \ - poly128_t __ret; \ - __ret = (poly128_t) __builtin_neon_vldrq_p128(__p0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmaxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vmaxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmax_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vmax_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmax_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vmaxnmvq_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmaxnmvq_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vmaxnmvq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmaxnmvq_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vmaxnmvq_f32(float32x4_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxnmvq_f32((int8x16_t)__p0); - return __ret; -} -#else -__ai float32_t vmaxnmvq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxnmvq_f32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vmaxnmv_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxnmv_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vmaxnmv_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxnmv_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vmaxvq_u8(uint8x16_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vmaxvq_u8((int8x16_t)__p0); - return __ret; -} -#else -__ai uint8_t vmaxvq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vmaxvq_u8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vmaxvq_u32(uint32x4_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vmaxvq_u32((int8x16_t)__p0); - return __ret; -} -#else -__ai uint32_t vmaxvq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vmaxvq_u32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vmaxvq_u16(uint16x8_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vmaxvq_u16((int8x16_t)__p0); - return __ret; -} -#else -__ai uint16_t vmaxvq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vmaxvq_u16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vmaxvq_s8(int8x16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vmaxvq_s8((int8x16_t)__p0); - return __ret; -} -#else -__ai int8_t vmaxvq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vmaxvq_s8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vmaxvq_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmaxvq_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vmaxvq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmaxvq_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vmaxvq_f32(float32x4_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxvq_f32((int8x16_t)__p0); - return __ret; -} -#else -__ai float32_t vmaxvq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxvq_f32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vmaxvq_s32(int32x4_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vmaxvq_s32((int8x16_t)__p0); - return __ret; -} -#else -__ai int32_t vmaxvq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vmaxvq_s32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vmaxvq_s16(int16x8_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vmaxvq_s16((int8x16_t)__p0); - return __ret; -} -#else -__ai int16_t vmaxvq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vmaxvq_s16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vmaxv_u8(uint8x8_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vmaxv_u8((int8x8_t)__p0); - return __ret; -} -#else -__ai uint8_t vmaxv_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vmaxv_u8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vmaxv_u32(uint32x2_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vmaxv_u32((int8x8_t)__p0); - return __ret; -} -#else -__ai uint32_t vmaxv_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vmaxv_u32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vmaxv_u16(uint16x4_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vmaxv_u16((int8x8_t)__p0); - return __ret; -} -#else -__ai uint16_t vmaxv_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vmaxv_u16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vmaxv_s8(int8x8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vmaxv_s8((int8x8_t)__p0); - return __ret; -} -#else -__ai int8_t vmaxv_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vmaxv_s8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vmaxv_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxv_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vmaxv_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmaxv_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vmaxv_s32(int32x2_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vmaxv_s32((int8x8_t)__p0); - return __ret; -} -#else -__ai int32_t vmaxv_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vmaxv_s32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vmaxv_s16(int16x4_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vmaxv_s16((int8x8_t)__p0); - return __ret; -} -#else -__ai int16_t vmaxv_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vmaxv_s16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vminq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vminq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vminq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmin_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vmin_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmin_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vminnmvq_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vminnmvq_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vminnmvq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vminnmvq_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vminnmvq_f32(float32x4_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminnmvq_f32((int8x16_t)__p0); - return __ret; -} -#else -__ai float32_t vminnmvq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminnmvq_f32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vminnmv_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminnmv_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vminnmv_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminnmv_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vminvq_u8(uint8x16_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vminvq_u8((int8x16_t)__p0); - return __ret; -} -#else -__ai uint8_t vminvq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vminvq_u8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vminvq_u32(uint32x4_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vminvq_u32((int8x16_t)__p0); - return __ret; -} -#else -__ai uint32_t vminvq_u32(uint32x4_t __p0) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vminvq_u32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vminvq_u16(uint16x8_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vminvq_u16((int8x16_t)__p0); - return __ret; -} -#else -__ai uint16_t vminvq_u16(uint16x8_t __p0) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vminvq_u16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vminvq_s8(int8x16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vminvq_s8((int8x16_t)__p0); - return __ret; -} -#else -__ai int8_t vminvq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vminvq_s8((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vminvq_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vminvq_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vminvq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vminvq_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vminvq_f32(float32x4_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminvq_f32((int8x16_t)__p0); - return __ret; -} -#else -__ai float32_t vminvq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminvq_f32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vminvq_s32(int32x4_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vminvq_s32((int8x16_t)__p0); - return __ret; -} -#else -__ai int32_t vminvq_s32(int32x4_t __p0) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vminvq_s32((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vminvq_s16(int16x8_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vminvq_s16((int8x16_t)__p0); - return __ret; -} -#else -__ai int16_t vminvq_s16(int16x8_t __p0) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vminvq_s16((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vminv_u8(uint8x8_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vminv_u8((int8x8_t)__p0); - return __ret; -} -#else -__ai uint8_t vminv_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vminv_u8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vminv_u32(uint32x2_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vminv_u32((int8x8_t)__p0); - return __ret; -} -#else -__ai uint32_t vminv_u32(uint32x2_t __p0) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vminv_u32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vminv_u16(uint16x4_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vminv_u16((int8x8_t)__p0); - return __ret; -} -#else -__ai uint16_t vminv_u16(uint16x4_t __p0) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vminv_u16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vminv_s8(int8x8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vminv_s8((int8x8_t)__p0); - return __ret; -} -#else -__ai int8_t vminv_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8_t __ret; - __ret = (int8_t) __builtin_neon_vminv_s8((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vminv_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminv_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vminv_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vminv_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vminv_s32(int32x2_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vminv_s32((int8x8_t)__p0); - return __ret; -} -#else -__ai int32_t vminv_s32(int32x2_t __p0) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32_t __ret; - __ret = (int32_t) __builtin_neon_vminv_s32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vminv_s16(int16x4_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vminv_s16((int8x8_t)__p0); - return __ret; -} -#else -__ai int16_t vminv_s16(int16x4_t __p0) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16_t __ret; - __ret = (int16_t) __builtin_neon_vminv_s16((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmlaq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai float64x2_t vmlaq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float64x2_t __ret; - __ret = __rev0 + __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmla_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#else -__ai float64x1_t vmla_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = __p0 + __p1 * __p2; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x8_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlaq_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlaq_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x2_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmla_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x4_t __ret; \ - __ret = __s0 + __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmla_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 + __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmlaq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __ret; - __ret = __p0 + __p1 * (float64x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai float64x2_t vmlaq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 + __rev1 * (float64x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 + vmull_u32(vget_high_u32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_u32(__noswap_vget_high_u32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + vmull_u16(vget_high_u16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_u16(__noswap_vget_high_u16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 + vmull_s32(vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_s32(__noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + vmull_s16(vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_s16(__noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 + vmull_u32(vget_high_u32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_u32(__noswap_vget_high_u32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + vmull_u16(vget_high_u16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_u16(__noswap_vget_high_u16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 + vmull_s32(vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_s32(__noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + vmull_s16(vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_s16(__noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 + vmull_u32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_u32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + vmull_u16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_u16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 + vmull_s32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_s32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + vmull_s16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_s16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmlsq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai float64x2_t vmlsq_f64(float64x2_t __p0, float64x2_t __p1, float64x2_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - float64x2_t __ret; - __ret = __rev0 - __rev1 * __rev2; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmls_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#else -__ai float64x1_t vmls_f64(float64x1_t __p0, float64x1_t __p1, float64x1_t __p2) { - float64x1_t __ret; - __ret = __p0 - __p1 * __p2; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x8_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsq_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmlsq_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_laneq_f32(__p0, __p1, __p2, __p3) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __s2 = __p2; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x2_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmls_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x4_t __ret; \ - __ret = __s0 - __s1 * __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3); \ - __ret; \ -}) -#else -#define vmls_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 - __rev1 * __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmlsq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __ret; - __ret = __p0 - __p1 * (float64x2_t) {__p2, __p2}; - return __ret; -} -#else -__ai float64x2_t vmlsq_n_f64(float64x2_t __p0, float64x2_t __p1, float64_t __p2) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 - __rev1 * (float64x2_t) {__p2, __p2}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 - vmull_u32(vget_high_u32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_u32(__noswap_vget_high_u32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - vmull_u16(vget_high_u16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_u16(__noswap_vget_high_u16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 - vmull_s32(vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_s32(__noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - vmull_s16(vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_s16(__noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 - vmull_u32(vget_high_u32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_u32(__noswap_vget_high_u32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - vmull_u16(vget_high_u16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_u16(__noswap_vget_high_u16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 - vmull_s32(vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_s32(__noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - vmull_s16(vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_s16(__noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 - vmull_u32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_laneq_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_u32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - vmull_u16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_laneq_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_u16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 - vmull_s32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_s32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - vmull_s16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_s16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x1_t vmov_n_p64(poly64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t) {__p0}; - return __ret; -} -#else -__ai poly64x1_t vmov_n_p64(poly64_t __p0) { - poly64x1_t __ret; - __ret = (poly64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vmovq_n_p64(poly64_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai poly64x2_t vmovq_n_p64(poly64_t __p0) { - poly64x2_t __ret; - __ret = (poly64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmovq_n_f64(float64_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) {__p0, __p0}; - return __ret; -} -#else -__ai float64x2_t vmovq_n_f64(float64_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) {__p0, __p0}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmov_n_f64(float64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) {__p0}; - return __ret; -} -#else -__ai float64x1_t vmov_n_f64(float64_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) {__p0}; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmovl_high_u8(uint8x16_t __p0_112) { - uint16x8_t __ret_112; - uint8x8_t __a1_112 = vget_high_u8(__p0_112); - __ret_112 = (uint16x8_t)(vshll_n_u8(__a1_112, 0)); - return __ret_112; -} -#else -__ai uint16x8_t vmovl_high_u8(uint8x16_t __p0_113) { - uint8x16_t __rev0_113; __rev0_113 = __builtin_shufflevector(__p0_113, __p0_113, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret_113; - uint8x8_t __a1_113 = __noswap_vget_high_u8(__rev0_113); - __ret_113 = (uint16x8_t)(__noswap_vshll_n_u8(__a1_113, 0)); - __ret_113 = __builtin_shufflevector(__ret_113, __ret_113, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret_113; -} -__ai uint16x8_t __noswap_vmovl_high_u8(uint8x16_t __p0_114) { - uint16x8_t __ret_114; - uint8x8_t __a1_114 = __noswap_vget_high_u8(__p0_114); - __ret_114 = (uint16x8_t)(__noswap_vshll_n_u8(__a1_114, 0)); - return __ret_114; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmovl_high_u32(uint32x4_t __p0_115) { - uint64x2_t __ret_115; - uint32x2_t __a1_115 = vget_high_u32(__p0_115); - __ret_115 = (uint64x2_t)(vshll_n_u32(__a1_115, 0)); - return __ret_115; -} -#else -__ai uint64x2_t vmovl_high_u32(uint32x4_t __p0_116) { - uint32x4_t __rev0_116; __rev0_116 = __builtin_shufflevector(__p0_116, __p0_116, 3, 2, 1, 0); - uint64x2_t __ret_116; - uint32x2_t __a1_116 = __noswap_vget_high_u32(__rev0_116); - __ret_116 = (uint64x2_t)(__noswap_vshll_n_u32(__a1_116, 0)); - __ret_116 = __builtin_shufflevector(__ret_116, __ret_116, 1, 0); - return __ret_116; -} -__ai uint64x2_t __noswap_vmovl_high_u32(uint32x4_t __p0_117) { - uint64x2_t __ret_117; - uint32x2_t __a1_117 = __noswap_vget_high_u32(__p0_117); - __ret_117 = (uint64x2_t)(__noswap_vshll_n_u32(__a1_117, 0)); - return __ret_117; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmovl_high_u16(uint16x8_t __p0_118) { - uint32x4_t __ret_118; - uint16x4_t __a1_118 = vget_high_u16(__p0_118); - __ret_118 = (uint32x4_t)(vshll_n_u16(__a1_118, 0)); - return __ret_118; -} -#else -__ai uint32x4_t vmovl_high_u16(uint16x8_t __p0_119) { - uint16x8_t __rev0_119; __rev0_119 = __builtin_shufflevector(__p0_119, __p0_119, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret_119; - uint16x4_t __a1_119 = __noswap_vget_high_u16(__rev0_119); - __ret_119 = (uint32x4_t)(__noswap_vshll_n_u16(__a1_119, 0)); - __ret_119 = __builtin_shufflevector(__ret_119, __ret_119, 3, 2, 1, 0); - return __ret_119; -} -__ai uint32x4_t __noswap_vmovl_high_u16(uint16x8_t __p0_120) { - uint32x4_t __ret_120; - uint16x4_t __a1_120 = __noswap_vget_high_u16(__p0_120); - __ret_120 = (uint32x4_t)(__noswap_vshll_n_u16(__a1_120, 0)); - return __ret_120; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmovl_high_s8(int8x16_t __p0_121) { - int16x8_t __ret_121; - int8x8_t __a1_121 = vget_high_s8(__p0_121); - __ret_121 = (int16x8_t)(vshll_n_s8(__a1_121, 0)); - return __ret_121; -} -#else -__ai int16x8_t vmovl_high_s8(int8x16_t __p0_122) { - int8x16_t __rev0_122; __rev0_122 = __builtin_shufflevector(__p0_122, __p0_122, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret_122; - int8x8_t __a1_122 = __noswap_vget_high_s8(__rev0_122); - __ret_122 = (int16x8_t)(__noswap_vshll_n_s8(__a1_122, 0)); - __ret_122 = __builtin_shufflevector(__ret_122, __ret_122, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret_122; -} -__ai int16x8_t __noswap_vmovl_high_s8(int8x16_t __p0_123) { - int16x8_t __ret_123; - int8x8_t __a1_123 = __noswap_vget_high_s8(__p0_123); - __ret_123 = (int16x8_t)(__noswap_vshll_n_s8(__a1_123, 0)); - return __ret_123; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmovl_high_s32(int32x4_t __p0_124) { - int64x2_t __ret_124; - int32x2_t __a1_124 = vget_high_s32(__p0_124); - __ret_124 = (int64x2_t)(vshll_n_s32(__a1_124, 0)); - return __ret_124; -} -#else -__ai int64x2_t vmovl_high_s32(int32x4_t __p0_125) { - int32x4_t __rev0_125; __rev0_125 = __builtin_shufflevector(__p0_125, __p0_125, 3, 2, 1, 0); - int64x2_t __ret_125; - int32x2_t __a1_125 = __noswap_vget_high_s32(__rev0_125); - __ret_125 = (int64x2_t)(__noswap_vshll_n_s32(__a1_125, 0)); - __ret_125 = __builtin_shufflevector(__ret_125, __ret_125, 1, 0); - return __ret_125; -} -__ai int64x2_t __noswap_vmovl_high_s32(int32x4_t __p0_126) { - int64x2_t __ret_126; - int32x2_t __a1_126 = __noswap_vget_high_s32(__p0_126); - __ret_126 = (int64x2_t)(__noswap_vshll_n_s32(__a1_126, 0)); - return __ret_126; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmovl_high_s16(int16x8_t __p0_127) { - int32x4_t __ret_127; - int16x4_t __a1_127 = vget_high_s16(__p0_127); - __ret_127 = (int32x4_t)(vshll_n_s16(__a1_127, 0)); - return __ret_127; -} -#else -__ai int32x4_t vmovl_high_s16(int16x8_t __p0_128) { - int16x8_t __rev0_128; __rev0_128 = __builtin_shufflevector(__p0_128, __p0_128, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret_128; - int16x4_t __a1_128 = __noswap_vget_high_s16(__rev0_128); - __ret_128 = (int32x4_t)(__noswap_vshll_n_s16(__a1_128, 0)); - __ret_128 = __builtin_shufflevector(__ret_128, __ret_128, 3, 2, 1, 0); - return __ret_128; -} -__ai int32x4_t __noswap_vmovl_high_s16(int16x8_t __p0_129) { - int32x4_t __ret_129; - int16x4_t __a1_129 = __noswap_vget_high_s16(__p0_129); - __ret_129 = (int32x4_t)(__noswap_vshll_n_s16(__a1_129, 0)); - return __ret_129; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmovn_high_u32(uint16x4_t __p0, uint32x4_t __p1) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vmovn_u32(__p1)); - return __ret; -} -#else -__ai uint16x8_t vmovn_high_u32(uint16x4_t __p0, uint32x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vmovn_u32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmovn_high_u64(uint32x2_t __p0, uint64x2_t __p1) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vmovn_u64(__p1)); - return __ret; -} -#else -__ai uint32x4_t vmovn_high_u64(uint32x2_t __p0, uint64x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vmovn_u64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vmovn_high_u16(uint8x8_t __p0, uint16x8_t __p1) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vmovn_u16(__p1)); - return __ret; -} -#else -__ai uint8x16_t vmovn_high_u16(uint8x8_t __p0, uint16x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vmovn_u16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmovn_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vmovn_s32(__p1)); - return __ret; -} -#else -__ai int16x8_t vmovn_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vmovn_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmovn_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vmovn_s64(__p1)); - return __ret; -} -#else -__ai int32x4_t vmovn_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vmovn_s64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vmovn_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vmovn_s16(__p1)); - return __ret; -} -#else -__ai int8x16_t vmovn_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vmovn_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmulq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai float64x2_t vmulq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 * __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmul_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#else -__ai float64x1_t vmul_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 * __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmuld_lane_f64(__p0_130, __p1_130, __p2_130) __extension__ ({ \ - float64_t __s0_130 = __p0_130; \ - float64x1_t __s1_130 = __p1_130; \ - float64_t __ret_130; \ - __ret_130 = __s0_130 * vget_lane_f64(__s1_130, __p2_130); \ - __ret_130; \ -}) -#else -#define vmuld_lane_f64(__p0_131, __p1_131, __p2_131) __extension__ ({ \ - float64_t __s0_131 = __p0_131; \ - float64x1_t __s1_131 = __p1_131; \ - float64_t __ret_131; \ - __ret_131 = __s0_131 * __noswap_vget_lane_f64(__s1_131, __p2_131); \ - __ret_131; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmuls_lane_f32(__p0_132, __p1_132, __p2_132) __extension__ ({ \ - float32_t __s0_132 = __p0_132; \ - float32x2_t __s1_132 = __p1_132; \ - float32_t __ret_132; \ - __ret_132 = __s0_132 * vget_lane_f32(__s1_132, __p2_132); \ - __ret_132; \ -}) -#else -#define vmuls_lane_f32(__p0_133, __p1_133, __p2_133) __extension__ ({ \ - float32_t __s0_133 = __p0_133; \ - float32x2_t __s1_133 = __p1_133; \ - float32x2_t __rev1_133; __rev1_133 = __builtin_shufflevector(__s1_133, __s1_133, 1, 0); \ - float32_t __ret_133; \ - __ret_133 = __s0_133 * __noswap_vget_lane_f32(__rev1_133, __p2_133); \ - __ret_133; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vmul_lane_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#else -#define vmul_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vmul_lane_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmuld_laneq_f64(__p0_134, __p1_134, __p2_134) __extension__ ({ \ - float64_t __s0_134 = __p0_134; \ - float64x2_t __s1_134 = __p1_134; \ - float64_t __ret_134; \ - __ret_134 = __s0_134 * vgetq_lane_f64(__s1_134, __p2_134); \ - __ret_134; \ -}) -#else -#define vmuld_laneq_f64(__p0_135, __p1_135, __p2_135) __extension__ ({ \ - float64_t __s0_135 = __p0_135; \ - float64x2_t __s1_135 = __p1_135; \ - float64x2_t __rev1_135; __rev1_135 = __builtin_shufflevector(__s1_135, __s1_135, 1, 0); \ - float64_t __ret_135; \ - __ret_135 = __s0_135 * __noswap_vgetq_lane_f64(__rev1_135, __p2_135); \ - __ret_135; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmuls_laneq_f32(__p0_136, __p1_136, __p2_136) __extension__ ({ \ - float32_t __s0_136 = __p0_136; \ - float32x4_t __s1_136 = __p1_136; \ - float32_t __ret_136; \ - __ret_136 = __s0_136 * vgetq_lane_f32(__s1_136, __p2_136); \ - __ret_136; \ -}) -#else -#define vmuls_laneq_f32(__p0_137, __p1_137, __p2_137) __extension__ ({ \ - float32_t __s0_137 = __p0_137; \ - float32x4_t __s1_137 = __p1_137; \ - float32x4_t __rev1_137; __rev1_137 = __builtin_shufflevector(__s1_137, __s1_137, 3, 2, 1, 0); \ - float32_t __ret_137; \ - __ret_137 = __s0_137 * __noswap_vgetq_lane_f32(__rev1_137, __p2_137); \ - __ret_137; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vmul_laneq_v((int8x8_t)__s0, (int8x16_t)__s1, __p2, 10); \ - __ret; \ -}) -#else -#define vmul_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vmul_laneq_v((int8x8_t)__s0, (int8x16_t)__rev1, __p2, 10); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmulq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmul_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = __s0 * __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2); \ - __ret; \ -}) -#else -#define vmul_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __rev0 * __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmul_n_f64(float64x1_t __p0, float64_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmul_n_f64((int8x8_t)__p0, __p1); - return __ret; -} -#else -__ai float64x1_t vmul_n_f64(float64x1_t __p0, float64_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmul_n_f64((int8x8_t)__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmulq_n_f64(float64x2_t __p0, float64_t __p1) { - float64x2_t __ret; - __ret = __p0 * (float64x2_t) {__p1, __p1}; - return __ret; -} -#else -__ai float64x2_t vmulq_n_f64(float64x2_t __p0, float64_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = __rev0 * (float64x2_t) {__p1, __p1}; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vmull_p64(poly64_t __p0, poly64_t __p1) { - poly128_t __ret; - __ret = (poly128_t) __builtin_neon_vmull_p64(__p0, __p1); - return __ret; -} -#else -__ai poly128_t vmull_p64(poly64_t __p0, poly64_t __p1) { - poly128_t __ret; - __ret = (poly128_t) __builtin_neon_vmull_p64(__p0, __p1); - return __ret; -} -__ai poly128_t __noswap_vmull_p64(poly64_t __p0, poly64_t __p1) { - poly128_t __ret; - __ret = (poly128_t) __builtin_neon_vmull_p64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vmull_high_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly16x8_t __ret; - __ret = vmull_p8(vget_high_p8(__p0), vget_high_p8(__p1)); - return __ret; -} -#else -__ai poly16x8_t vmull_high_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __noswap_vmull_p8(__noswap_vget_high_p8(__rev0), __noswap_vget_high_p8(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmull_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = vmull_u8(vget_high_u8(__p0), vget_high_u8(__p1)); - return __ret; -} -#else -__ai uint16x8_t vmull_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmull_u8(__noswap_vget_high_u8(__rev0), __noswap_vget_high_u8(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmull_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = vmull_u32(vget_high_u32(__p0), vget_high_u32(__p1)); - return __ret; -} -#else -__ai uint64x2_t vmull_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmull_u32(__noswap_vget_high_u32(__rev0), __noswap_vget_high_u32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmull_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = vmull_u16(vget_high_u16(__p0), vget_high_u16(__p1)); - return __ret; -} -#else -__ai uint32x4_t vmull_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmull_u16(__noswap_vget_high_u16(__rev0), __noswap_vget_high_u16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmull_high_s8(int8x16_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = vmull_s8(vget_high_s8(__p0), vget_high_s8(__p1)); - return __ret; -} -#else -__ai int16x8_t vmull_high_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmull_s8(__noswap_vget_high_s8(__rev0), __noswap_vget_high_s8(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmull_high_s32(int32x4_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = vmull_s32(vget_high_s32(__p0), vget_high_s32(__p1)); - return __ret; -} -#else -__ai int64x2_t vmull_high_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmull_s32(__noswap_vget_high_s32(__rev0), __noswap_vget_high_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmull_high_s16(int16x8_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = vmull_s16(vget_high_s16(__p0), vget_high_s16(__p1)); - return __ret; -} -#else -__ai int32x4_t vmull_high_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmull_s16(__noswap_vget_high_s16(__rev0), __noswap_vget_high_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly128_t vmull_high_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly128_t __ret; - __ret = vmull_p64((poly64_t)(vget_high_p64(__p0)), (poly64_t)(vget_high_p64(__p1))); - return __ret; -} -#else -__ai poly128_t vmull_high_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly128_t __ret; - __ret = __noswap_vmull_p64((poly64_t)(__noswap_vget_high_p64(__rev0)), (poly64_t)(__noswap_vget_high_p64(__rev1))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = vmull_u32(vget_high_u32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_lane_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint64x2_t __ret; \ - __ret = __noswap_vmull_u32(__noswap_vget_high_u32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = vmull_u16(vget_high_u16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_lane_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __noswap_vmull_u16(__noswap_vget_high_u16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vmull_s32(vget_high_s32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vmull_s32(__noswap_vget_high_s32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vmull_s16(vget_high_s16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vmull_s16(__noswap_vget_high_s16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = vmull_u32(vget_high_u32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __noswap_vmull_u32(__noswap_vget_high_u32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = vmull_u16(vget_high_u16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x8_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __noswap_vmull_u16(__noswap_vget_high_u16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vmull_s32(vget_high_s32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vmull_s32(__noswap_vget_high_s32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_high_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vmull_s16(vget_high_s16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_high_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vmull_s16(__noswap_vget_high_s16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmull_high_n_u32(uint32x4_t __p0, uint32_t __p1) { - uint64x2_t __ret; - __ret = vmull_n_u32(vget_high_u32(__p0), __p1); - return __ret; -} -#else -__ai uint64x2_t vmull_high_n_u32(uint32x4_t __p0, uint32_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmull_n_u32(__noswap_vget_high_u32(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmull_high_n_u16(uint16x8_t __p0, uint16_t __p1) { - uint32x4_t __ret; - __ret = vmull_n_u16(vget_high_u16(__p0), __p1); - return __ret; -} -#else -__ai uint32x4_t vmull_high_n_u16(uint16x8_t __p0, uint16_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmull_n_u16(__noswap_vget_high_u16(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmull_high_n_s32(int32x4_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = vmull_n_s32(vget_high_s32(__p0), __p1); - return __ret; -} -#else -__ai int64x2_t vmull_high_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmull_n_s32(__noswap_vget_high_s32(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmull_high_n_s16(int16x8_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = vmull_n_s16(vget_high_s16(__p0), __p1); - return __ret; -} -#else -__ai int32x4_t vmull_high_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmull_n_s16(__noswap_vget_high_s16(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint64x2_t __ret; \ - __ret = vmull_u32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_laneq_u32(__p0, __p1, __p2) __extension__ ({ \ - uint32x2_t __s0 = __p0; \ - uint32x4_t __s1 = __p1; \ - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __noswap_vmull_u32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint32x4_t __ret; \ - __ret = vmull_u16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_laneq_u16(__p0, __p1, __p2) __extension__ ({ \ - uint16x4_t __s0 = __p0; \ - uint16x8_t __s1 = __p1; \ - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __noswap_vmull_u16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vmull_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vmull_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmull_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vmull_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmull_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vmull_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vmulxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmulxq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vmulxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmulxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float64x2_t __noswap_vmulxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vmulxq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vmulxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmulxq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vmulxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmulxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai float32x4_t __noswap_vmulxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vmulxq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vmulx_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmulx_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vmulx_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vmulx_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vmulx_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmulx_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vmulx_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmulx_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai float32x2_t __noswap_vmulx_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vmulx_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vmulxd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmulxd_f64(__p0, __p1); - return __ret; -} -#else -__ai float64_t vmulxd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmulxd_f64(__p0, __p1); - return __ret; -} -__ai float64_t __noswap_vmulxd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vmulxd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vmulxs_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmulxs_f32(__p0, __p1); - return __ret; -} -#else -__ai float32_t vmulxs_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmulxs_f32(__p0, __p1); - return __ret; -} -__ai float32_t __noswap_vmulxs_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vmulxs_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxd_lane_f64(__p0_138, __p1_138, __p2_138) __extension__ ({ \ - float64_t __s0_138 = __p0_138; \ - float64x1_t __s1_138 = __p1_138; \ - float64_t __ret_138; \ - __ret_138 = vmulxd_f64(__s0_138, vget_lane_f64(__s1_138, __p2_138)); \ - __ret_138; \ -}) -#else -#define vmulxd_lane_f64(__p0_139, __p1_139, __p2_139) __extension__ ({ \ - float64_t __s0_139 = __p0_139; \ - float64x1_t __s1_139 = __p1_139; \ - float64_t __ret_139; \ - __ret_139 = __noswap_vmulxd_f64(__s0_139, __noswap_vget_lane_f64(__s1_139, __p2_139)); \ - __ret_139; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxs_lane_f32(__p0_140, __p1_140, __p2_140) __extension__ ({ \ - float32_t __s0_140 = __p0_140; \ - float32x2_t __s1_140 = __p1_140; \ - float32_t __ret_140; \ - __ret_140 = vmulxs_f32(__s0_140, vget_lane_f32(__s1_140, __p2_140)); \ - __ret_140; \ -}) -#else -#define vmulxs_lane_f32(__p0_141, __p1_141, __p2_141) __extension__ ({ \ - float32_t __s0_141 = __p0_141; \ - float32x2_t __s1_141 = __p1_141; \ - float32x2_t __rev1_141; __rev1_141 = __builtin_shufflevector(__s1_141, __s1_141, 1, 0); \ - float32_t __ret_141; \ - __ret_141 = __noswap_vmulxs_f32(__s0_141, __noswap_vget_lane_f32(__rev1_141, __p2_141)); \ - __ret_141; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = vmulxq_f64(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulxq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __ret; \ - __ret = __noswap_vmulxq_f64(__rev0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = vmulxq_f32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulxq_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x4_t __ret; \ - __ret = __noswap_vmulxq_f32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulx_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = vmulx_f32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulx_lane_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x2_t __s1 = __p1; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float32x2_t __ret; \ - __ret = __noswap_vmulx_f32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxd_laneq_f64(__p0_142, __p1_142, __p2_142) __extension__ ({ \ - float64_t __s0_142 = __p0_142; \ - float64x2_t __s1_142 = __p1_142; \ - float64_t __ret_142; \ - __ret_142 = vmulxd_f64(__s0_142, vgetq_lane_f64(__s1_142, __p2_142)); \ - __ret_142; \ -}) -#else -#define vmulxd_laneq_f64(__p0_143, __p1_143, __p2_143) __extension__ ({ \ - float64_t __s0_143 = __p0_143; \ - float64x2_t __s1_143 = __p1_143; \ - float64x2_t __rev1_143; __rev1_143 = __builtin_shufflevector(__s1_143, __s1_143, 1, 0); \ - float64_t __ret_143; \ - __ret_143 = __noswap_vmulxd_f64(__s0_143, __noswap_vgetq_lane_f64(__rev1_143, __p2_143)); \ - __ret_143; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxs_laneq_f32(__p0_144, __p1_144, __p2_144) __extension__ ({ \ - float32_t __s0_144 = __p0_144; \ - float32x4_t __s1_144 = __p1_144; \ - float32_t __ret_144; \ - __ret_144 = vmulxs_f32(__s0_144, vgetq_lane_f32(__s1_144, __p2_144)); \ - __ret_144; \ -}) -#else -#define vmulxs_laneq_f32(__p0_145, __p1_145, __p2_145) __extension__ ({ \ - float32_t __s0_145 = __p0_145; \ - float32x4_t __s1_145 = __p1_145; \ - float32x4_t __rev1_145; __rev1_145 = __builtin_shufflevector(__s1_145, __s1_145, 3, 2, 1, 0); \ - float32_t __ret_145; \ - __ret_145 = __noswap_vmulxs_f32(__s0_145, __noswap_vgetq_lane_f32(__rev1_145, __p2_145)); \ - __ret_145; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxq_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = vmulxq_f64(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulxq_laneq_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = __noswap_vmulxq_f64(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulxq_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __ret; \ - __ret = vmulxq_f32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulxq_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x4_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x4_t __ret; \ - __ret = __noswap_vmulxq_f32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulx_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __ret; \ - __ret = vmulx_f32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vmulx_laneq_f32(__p0, __p1, __p2) __extension__ ({ \ - float32x2_t __s0 = __p0; \ - float32x4_t __s1 = __p1; \ - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - float32x2_t __ret; \ - __ret = __noswap_vmulx_f32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vnegq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai float64x2_t vnegq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vnegq_s64(int64x2_t __p0) { - int64x2_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int64x2_t vnegq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = -__rev0; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vneg_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai float64x1_t vneg_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = -__p0; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vneg_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = -__p0; - return __ret; -} -#else -__ai int64x1_t vneg_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = -__p0; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vnegd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vnegd_s64(__p0); - return __ret; -} -#else -__ai int64_t vnegd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vnegd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vpaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vpaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vpaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vpaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vpaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vpaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vpaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vpaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vpaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vpaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vpaddq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vpaddq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vpaddq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vpaddq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vpaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vpaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vpaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vpaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vpaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vpaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vpaddd_u64(uint64x2_t __p0) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vpaddd_u64((int8x16_t)__p0); - return __ret; -} -#else -__ai uint64_t vpaddd_u64(uint64x2_t __p0) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vpaddd_u64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vpaddd_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpaddd_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vpaddd_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpaddd_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vpaddd_s64(int64x2_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vpaddd_s64((int8x16_t)__p0); - return __ret; -} -#else -__ai int64_t vpaddd_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64_t __ret; - __ret = (int64_t) __builtin_neon_vpaddd_s64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vpadds_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpadds_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vpadds_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpadds_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vpmaxq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vpmaxq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vpmaxq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vpmaxq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vpmaxq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vpmaxq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vpmaxq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vpmaxq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vpmaxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vpmaxq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vpmaxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vpmaxq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vpmaxq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vpmaxq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vpmaxq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpmaxq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vpmaxq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpmaxq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vpmaxqd_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpmaxqd_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vpmaxqd_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpmaxqd_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vpmaxs_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmaxs_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vpmaxs_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmaxs_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vpmaxnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpmaxnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vpmaxnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpmaxnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vpmaxnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpmaxnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vpmaxnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpmaxnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vpmaxnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmaxnm_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vpmaxnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpmaxnm_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vpmaxnmqd_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpmaxnmqd_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vpmaxnmqd_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpmaxnmqd_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vpmaxnms_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmaxnms_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vpmaxnms_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmaxnms_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vpminq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vpminq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vpminq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vpminq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vpminq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vpminq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vpminq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vpminq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vpminq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vpminq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vpminq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vpminq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vpminq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vpminq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vpminq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpminq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vpminq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vpminq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vpminqd_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpminqd_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vpminqd_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpminqd_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vpmins_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmins_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vpmins_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpmins_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vpminnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpminnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vpminnmq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vpminnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vpminnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpminnmq_v((int8x16_t)__p0, (int8x16_t)__p1, 41); - return __ret; -} -#else -__ai float32x4_t vpminnmq_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vpminnmq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vpminnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpminnm_v((int8x8_t)__p0, (int8x8_t)__p1, 9); - return __ret; -} -#else -__ai float32x2_t vpminnm_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vpminnm_v((int8x8_t)__rev0, (int8x8_t)__rev1, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vpminnmqd_f64(float64x2_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpminnmqd_f64((int8x16_t)__p0); - return __ret; -} -#else -__ai float64_t vpminnmqd_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64_t __ret; - __ret = (float64_t) __builtin_neon_vpminnmqd_f64((int8x16_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vpminnms_f32(float32x2_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpminnms_f32((int8x8_t)__p0); - return __ret; -} -#else -__ai float32_t vpminnms_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32_t __ret; - __ret = (float32_t) __builtin_neon_vpminnms_f32((int8x8_t)__rev0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqabsq_s64(int64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqabsq_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vqabsq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqabsq_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqabs_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqabs_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vqabs_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqabs_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqabsb_s8(int8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqabsb_s8(__p0); - return __ret; -} -#else -__ai int8_t vqabsb_s8(int8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqabsb_s8(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqabss_s32(int32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqabss_s32(__p0); - return __ret; -} -#else -__ai int32_t vqabss_s32(int32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqabss_s32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqabsd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqabsd_s64(__p0); - return __ret; -} -#else -__ai int64_t vqabsd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqabsd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqabsh_s16(int16_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqabsh_s16(__p0); - return __ret; -} -#else -__ai int16_t vqabsh_s16(int16_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqabsh_s16(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vqaddb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqaddb_u8(__p0, __p1); - return __ret; -} -#else -__ai uint8_t vqaddb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqaddb_u8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vqadds_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqadds_u32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vqadds_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqadds_u32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vqaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqaddd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vqaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqaddd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vqaddh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqaddh_u16(__p0, __p1); - return __ret; -} -#else -__ai uint16_t vqaddh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqaddh_u16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqaddb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqaddb_s8(__p0, __p1); - return __ret; -} -#else -__ai int8_t vqaddb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqaddb_s8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqadds_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqadds_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqadds_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqadds_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqaddd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vqaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqaddd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqaddh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqaddh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqaddh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqaddh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqdmlals_s32(int64_t __p0, int32_t __p1, int32_t __p2) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmlals_s32(__p0, __p1, __p2); - return __ret; -} -#else -__ai int64_t vqdmlals_s32(int64_t __p0, int32_t __p1, int32_t __p2) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmlals_s32(__p0, __p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqdmlalh_s16(int32_t __p0, int16_t __p1, int16_t __p2) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmlalh_s16(__p0, __p1, __p2); - return __ret; -} -#else -__ai int32_t vqdmlalh_s16(int32_t __p0, int16_t __p1, int16_t __p2) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmlalh_s16(__p0, __p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __ret; - __ret = vqdmlal_s32(__p0, vget_high_s32(__p1), vget_high_s32(__p2)); - return __ret; -} -#else -__ai int64x2_t vqdmlal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmlal_s32(__rev0, __noswap_vget_high_s32(__rev1), __noswap_vget_high_s32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __ret; - __ret = vqdmlal_s16(__p0, vget_high_s16(__p1), vget_high_s16(__p2)); - return __ret; -} -#else -__ai int32x4_t vqdmlal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmlal_s16(__rev0, __noswap_vget_high_s16(__rev1), __noswap_vget_high_s16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlal_s32(__s0, vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlal_s32(__rev0, __noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlal_s16(__s0, vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlal_s16(__rev0, __noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlal_s32(__s0, vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlal_s32(__rev0, __noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlal_s16(__s0, vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlal_s16(__rev0, __noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlal_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = vqdmlal_n_s32(__p0, vget_high_s32(__p1), __p2); - return __ret; -} -#else -__ai int64x2_t vqdmlal_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmlal_n_s32(__rev0, __noswap_vget_high_s32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlal_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = vqdmlal_n_s16(__p0, vget_high_s16(__p1), __p2); - return __ret; -} -#else -__ai int32x4_t vqdmlal_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmlal_n_s16(__rev0, __noswap_vget_high_s16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlals_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlals_lane_s32(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlals_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlals_lane_s32(__s0, __s1, (int8x8_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlalh_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlalh_lane_s16(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlalh_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlalh_lane_s16(__s0, __s1, (int8x8_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlals_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlals_laneq_s32(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlals_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlals_laneq_s32(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlalh_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlalh_laneq_s16(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlalh_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlalh_laneq_s16(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlal_s32(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlal_s32(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlal_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlal_s16(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlal_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlal_s16(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqdmlsls_s32(int64_t __p0, int32_t __p1, int32_t __p2) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmlsls_s32(__p0, __p1, __p2); - return __ret; -} -#else -__ai int64_t vqdmlsls_s32(int64_t __p0, int32_t __p1, int32_t __p2) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmlsls_s32(__p0, __p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqdmlslh_s16(int32_t __p0, int16_t __p1, int16_t __p2) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmlslh_s16(__p0, __p1, __p2); - return __ret; -} -#else -__ai int32_t vqdmlslh_s16(int32_t __p0, int16_t __p1, int16_t __p2) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmlslh_s16(__p0, __p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlsl_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __ret; - __ret = vqdmlsl_s32(__p0, vget_high_s32(__p1), vget_high_s32(__p2)); - return __ret; -} -#else -__ai int64x2_t vqdmlsl_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmlsl_s32(__rev0, __noswap_vget_high_s32(__rev1), __noswap_vget_high_s32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlsl_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __ret; - __ret = vqdmlsl_s16(__p0, vget_high_s16(__p1), vget_high_s16(__p2)); - return __ret; -} -#else -__ai int32x4_t vqdmlsl_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmlsl_s16(__rev0, __noswap_vget_high_s16(__rev1), __noswap_vget_high_s16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlsl_s32(__s0, vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_high_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlsl_s32(__rev0, __noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlsl_s16(__s0, vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_high_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlsl_s16(__rev0, __noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlsl_s32(__s0, vget_high_s32(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_high_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlsl_s32(__rev0, __noswap_vget_high_s32(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlsl_s16(__s0, vget_high_s16(__s1), __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_high_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlsl_s16(__rev0, __noswap_vget_high_s16(__rev1), __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmlsl_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = vqdmlsl_n_s32(__p0, vget_high_s32(__p1), __p2); - return __ret; -} -#else -__ai int64x2_t vqdmlsl_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmlsl_n_s32(__rev0, __noswap_vget_high_s32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmlsl_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = vqdmlsl_n_s16(__p0, vget_high_s16(__p1), __p2); - return __ret; -} -#else -__ai int32x4_t vqdmlsl_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmlsl_n_s16(__rev0, __noswap_vget_high_s16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsls_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlsls_lane_s32(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlsls_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlsls_lane_s32(__s0, __s1, (int8x8_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlslh_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlslh_lane_s16(__s0, __s1, (int8x8_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlslh_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlslh_lane_s16(__s0, __s1, (int8x8_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsls_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlsls_laneq_s32(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlsls_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqdmlsls_laneq_s32(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlslh_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlslh_laneq_s16(__s0, __s1, (int8x16_t)__s2, __p3); \ - __ret; \ -}) -#else -#define vqdmlslh_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqdmlslh_laneq_s16(__s0, __s1, (int8x16_t)__rev2, __p3); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = vqdmlsl_s32(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_laneq_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmlsl_s32(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmlsl_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = vqdmlsl_s16(__s0, __s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vqdmlsl_laneq_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmlsl_s16(__rev0, __rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmulhs_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmulhs_s32(__p0, __p1); - return __ret; -} -__ai int32_t __noswap_vqdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmulhs_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqdmulhh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqdmulhh_s16(__p0, __p1); - return __ret; -} -__ai int16_t __noswap_vqdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqdmulhh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhs_lane_s32(__p0_146, __p1_146, __p2_146) __extension__ ({ \ - int32_t __s0_146 = __p0_146; \ - int32x2_t __s1_146 = __p1_146; \ - int32_t __ret_146; \ - __ret_146 = vqdmulhs_s32(__s0_146, vget_lane_s32(__s1_146, __p2_146)); \ - __ret_146; \ -}) -#else -#define vqdmulhs_lane_s32(__p0_147, __p1_147, __p2_147) __extension__ ({ \ - int32_t __s0_147 = __p0_147; \ - int32x2_t __s1_147 = __p1_147; \ - int32x2_t __rev1_147; __rev1_147 = __builtin_shufflevector(__s1_147, __s1_147, 1, 0); \ - int32_t __ret_147; \ - __ret_147 = __noswap_vqdmulhs_s32(__s0_147, __noswap_vget_lane_s32(__rev1_147, __p2_147)); \ - __ret_147; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhh_lane_s16(__p0_148, __p1_148, __p2_148) __extension__ ({ \ - int16_t __s0_148 = __p0_148; \ - int16x4_t __s1_148 = __p1_148; \ - int16_t __ret_148; \ - __ret_148 = vqdmulhh_s16(__s0_148, vget_lane_s16(__s1_148, __p2_148)); \ - __ret_148; \ -}) -#else -#define vqdmulhh_lane_s16(__p0_149, __p1_149, __p2_149) __extension__ ({ \ - int16_t __s0_149 = __p0_149; \ - int16x4_t __s1_149 = __p1_149; \ - int16x4_t __rev1_149; __rev1_149 = __builtin_shufflevector(__s1_149, __s1_149, 3, 2, 1, 0); \ - int16_t __ret_149; \ - __ret_149 = __noswap_vqdmulhh_s16(__s0_149, __noswap_vget_lane_s16(__rev1_149, __p2_149)); \ - __ret_149; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhs_laneq_s32(__p0_150, __p1_150, __p2_150) __extension__ ({ \ - int32_t __s0_150 = __p0_150; \ - int32x4_t __s1_150 = __p1_150; \ - int32_t __ret_150; \ - __ret_150 = vqdmulhs_s32(__s0_150, vgetq_lane_s32(__s1_150, __p2_150)); \ - __ret_150; \ -}) -#else -#define vqdmulhs_laneq_s32(__p0_151, __p1_151, __p2_151) __extension__ ({ \ - int32_t __s0_151 = __p0_151; \ - int32x4_t __s1_151 = __p1_151; \ - int32x4_t __rev1_151; __rev1_151 = __builtin_shufflevector(__s1_151, __s1_151, 3, 2, 1, 0); \ - int32_t __ret_151; \ - __ret_151 = __noswap_vqdmulhs_s32(__s0_151, __noswap_vgetq_lane_s32(__rev1_151, __p2_151)); \ - __ret_151; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhh_laneq_s16(__p0_152, __p1_152, __p2_152) __extension__ ({ \ - int16_t __s0_152 = __p0_152; \ - int16x8_t __s1_152 = __p1_152; \ - int16_t __ret_152; \ - __ret_152 = vqdmulhh_s16(__s0_152, vgetq_lane_s16(__s1_152, __p2_152)); \ - __ret_152; \ -}) -#else -#define vqdmulhh_laneq_s16(__p0_153, __p1_153, __p2_153) __extension__ ({ \ - int16_t __s0_153 = __p0_153; \ - int16x8_t __s1_153 = __p1_153; \ - int16x8_t __rev1_153; __rev1_153 = __builtin_shufflevector(__s1_153, __s1_153, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16_t __ret_153; \ - __ret_153 = __noswap_vqdmulhh_s16(__s0_153, __noswap_vgetq_lane_s16(__rev1_153, __p2_153)); \ - __ret_153; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmulhq_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulhq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmulhq_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulhq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = vqdmulhq_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulhq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __noswap_vqdmulhq_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulh_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = vqdmulh_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulh_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __noswap_vqdmulh_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulh_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = vqdmulh_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmulh_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __noswap_vqdmulh_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqdmulls_s32(int32_t __p0, int32_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmulls_s32(__p0, __p1); - return __ret; -} -#else -__ai int64_t vqdmulls_s32(int32_t __p0, int32_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmulls_s32(__p0, __p1); - return __ret; -} -__ai int64_t __noswap_vqdmulls_s32(int32_t __p0, int32_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqdmulls_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqdmullh_s16(int16_t __p0, int16_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmullh_s16(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqdmullh_s16(int16_t __p0, int16_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmullh_s16(__p0, __p1); - return __ret; -} -__ai int32_t __noswap_vqdmullh_s16(int16_t __p0, int16_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqdmullh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmull_high_s32(int32x4_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = vqdmull_s32(vget_high_s32(__p0), vget_high_s32(__p1)); - return __ret; -} -#else -__ai int64x2_t vqdmull_high_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmull_s32(__noswap_vget_high_s32(__rev0), __noswap_vget_high_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmull_high_s16(int16x8_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = vqdmull_s16(vget_high_s16(__p0), vget_high_s16(__p1)); - return __ret; -} -#else -__ai int32x4_t vqdmull_high_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmull_s16(__noswap_vget_high_s16(__rev0), __noswap_vget_high_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_high_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vqdmull_s32(vget_high_s32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_high_lane_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmull_s32(__noswap_vget_high_s32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_high_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmull_s16(vget_high_s16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_high_lane_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmull_s16(__noswap_vget_high_s16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_high_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vqdmull_s32(vget_high_s32(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_high_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmull_s32(__noswap_vget_high_s32(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_high_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmull_s16(vget_high_s16(__s0), __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_high_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmull_s16(__noswap_vget_high_s16(__rev0), __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqdmull_high_n_s32(int32x4_t __p0, int32_t __p1) { - int64x2_t __ret; - __ret = vqdmull_n_s32(vget_high_s32(__p0), __p1); - return __ret; -} -#else -__ai int64x2_t vqdmull_high_n_s32(int32x4_t __p0, int32_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vqdmull_n_s32(__noswap_vget_high_s32(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqdmull_high_n_s16(int16x8_t __p0, int16_t __p1) { - int32x4_t __ret; - __ret = vqdmull_n_s16(vget_high_s16(__p0), __p1); - return __ret; -} -#else -__ai int32x4_t vqdmull_high_n_s16(int16x8_t __p0, int16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vqdmull_n_s16(__noswap_vget_high_s16(__rev0), __p1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulls_lane_s32(__p0_154, __p1_154, __p2_154) __extension__ ({ \ - int32_t __s0_154 = __p0_154; \ - int32x2_t __s1_154 = __p1_154; \ - int64_t __ret_154; \ - __ret_154 = vqdmulls_s32(__s0_154, vget_lane_s32(__s1_154, __p2_154)); \ - __ret_154; \ -}) -#else -#define vqdmulls_lane_s32(__p0_155, __p1_155, __p2_155) __extension__ ({ \ - int32_t __s0_155 = __p0_155; \ - int32x2_t __s1_155 = __p1_155; \ - int32x2_t __rev1_155; __rev1_155 = __builtin_shufflevector(__s1_155, __s1_155, 1, 0); \ - int64_t __ret_155; \ - __ret_155 = __noswap_vqdmulls_s32(__s0_155, __noswap_vget_lane_s32(__rev1_155, __p2_155)); \ - __ret_155; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmullh_lane_s16(__p0_156, __p1_156, __p2_156) __extension__ ({ \ - int16_t __s0_156 = __p0_156; \ - int16x4_t __s1_156 = __p1_156; \ - int32_t __ret_156; \ - __ret_156 = vqdmullh_s16(__s0_156, vget_lane_s16(__s1_156, __p2_156)); \ - __ret_156; \ -}) -#else -#define vqdmullh_lane_s16(__p0_157, __p1_157, __p2_157) __extension__ ({ \ - int16_t __s0_157 = __p0_157; \ - int16x4_t __s1_157 = __p1_157; \ - int16x4_t __rev1_157; __rev1_157 = __builtin_shufflevector(__s1_157, __s1_157, 3, 2, 1, 0); \ - int32_t __ret_157; \ - __ret_157 = __noswap_vqdmullh_s16(__s0_157, __noswap_vget_lane_s16(__rev1_157, __p2_157)); \ - __ret_157; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmulls_laneq_s32(__p0_158, __p1_158, __p2_158) __extension__ ({ \ - int32_t __s0_158 = __p0_158; \ - int32x4_t __s1_158 = __p1_158; \ - int64_t __ret_158; \ - __ret_158 = vqdmulls_s32(__s0_158, vgetq_lane_s32(__s1_158, __p2_158)); \ - __ret_158; \ -}) -#else -#define vqdmulls_laneq_s32(__p0_159, __p1_159, __p2_159) __extension__ ({ \ - int32_t __s0_159 = __p0_159; \ - int32x4_t __s1_159 = __p1_159; \ - int32x4_t __rev1_159; __rev1_159 = __builtin_shufflevector(__s1_159, __s1_159, 3, 2, 1, 0); \ - int64_t __ret_159; \ - __ret_159 = __noswap_vqdmulls_s32(__s0_159, __noswap_vgetq_lane_s32(__rev1_159, __p2_159)); \ - __ret_159; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmullh_laneq_s16(__p0_160, __p1_160, __p2_160) __extension__ ({ \ - int16_t __s0_160 = __p0_160; \ - int16x8_t __s1_160 = __p1_160; \ - int32_t __ret_160; \ - __ret_160 = vqdmullh_s16(__s0_160, vgetq_lane_s16(__s1_160, __p2_160)); \ - __ret_160; \ -}) -#else -#define vqdmullh_laneq_s16(__p0_161, __p1_161, __p2_161) __extension__ ({ \ - int16_t __s0_161 = __p0_161; \ - int16x8_t __s1_161 = __p1_161; \ - int16x8_t __rev1_161; __rev1_161 = __builtin_shufflevector(__s1_161, __s1_161, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32_t __ret_161; \ - __ret_161 = __noswap_vqdmullh_s16(__s0_161, __noswap_vgetq_lane_s16(__rev1_161, __p2_161)); \ - __ret_161; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int64x2_t __ret; \ - __ret = vqdmull_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int64x2_t __ret; \ - __ret = __noswap_vqdmull_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqdmull_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqdmull_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqdmull_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqdmull_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqmovns_s32(int32_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqmovns_s32(__p0); - return __ret; -} -#else -__ai int16_t vqmovns_s32(int32_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqmovns_s32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqmovnd_s64(int64_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqmovnd_s64(__p0); - return __ret; -} -#else -__ai int32_t vqmovnd_s64(int64_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqmovnd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqmovnh_s16(int16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqmovnh_s16(__p0); - return __ret; -} -#else -__ai int8_t vqmovnh_s16(int16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqmovnh_s16(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vqmovns_u32(uint32_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqmovns_u32(__p0); - return __ret; -} -#else -__ai uint16_t vqmovns_u32(uint32_t __p0) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqmovns_u32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vqmovnd_u64(uint64_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqmovnd_u64(__p0); - return __ret; -} -#else -__ai uint32_t vqmovnd_u64(uint64_t __p0) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqmovnd_u64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vqmovnh_u16(uint16_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqmovnh_u16(__p0); - return __ret; -} -#else -__ai uint8_t vqmovnh_u16(uint16_t __p0) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqmovnh_u16(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vqmovn_high_u32(uint16x4_t __p0, uint32x4_t __p1) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vqmovn_u32(__p1)); - return __ret; -} -#else -__ai uint16x8_t vqmovn_high_u32(uint16x4_t __p0, uint32x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vqmovn_u32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vqmovn_high_u64(uint32x2_t __p0, uint64x2_t __p1) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vqmovn_u64(__p1)); - return __ret; -} -#else -__ai uint32x4_t vqmovn_high_u64(uint32x2_t __p0, uint64x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vqmovn_u64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqmovn_high_u16(uint8x8_t __p0, uint16x8_t __p1) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vqmovn_u16(__p1)); - return __ret; -} -#else -__ai uint8x16_t vqmovn_high_u16(uint8x8_t __p0, uint16x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vqmovn_u16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqmovn_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vqmovn_s32(__p1)); - return __ret; -} -#else -__ai int16x8_t vqmovn_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vqmovn_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqmovn_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vqmovn_s64(__p1)); - return __ret; -} -#else -__ai int32x4_t vqmovn_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vqmovn_s64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqmovn_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vqmovn_s16(__p1)); - return __ret; -} -#else -__ai int8x16_t vqmovn_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vqmovn_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqmovuns_s32(int32_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqmovuns_s32(__p0); - return __ret; -} -#else -__ai int16_t vqmovuns_s32(int32_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqmovuns_s32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqmovund_s64(int64_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqmovund_s64(__p0); - return __ret; -} -#else -__ai int32_t vqmovund_s64(int64_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqmovund_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqmovunh_s16(int16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqmovunh_s16(__p0); - return __ret; -} -#else -__ai int8_t vqmovunh_s16(int16_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqmovunh_s16(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vqmovun_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x8_t __ret; - __ret = vcombine_u16((uint16x4_t)(__p0), vqmovun_s32(__p1)); - return __ret; -} -#else -__ai int16x8_t vqmovun_high_s32(int16x4_t __p0, int32x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_u16((uint16x4_t)(__rev0), __noswap_vqmovun_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vqmovun_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x4_t __ret; - __ret = vcombine_u32((uint32x2_t)(__p0), vqmovun_s64(__p1)); - return __ret; -} -#else -__ai int32x4_t vqmovun_high_s64(int32x2_t __p0, int64x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_u32((uint32x2_t)(__rev0), __noswap_vqmovun_s64(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqmovun_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x16_t __ret; - __ret = vcombine_u8((uint8x8_t)(__p0), vqmovun_s16(__p1)); - return __ret; -} -#else -__ai int8x16_t vqmovun_high_s16(int8x8_t __p0, int16x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_u8((uint8x8_t)(__rev0), __noswap_vqmovun_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vqnegq_s64(int64x2_t __p0) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqnegq_v((int8x16_t)__p0, 35); - return __ret; -} -#else -__ai int64x2_t vqnegq_s64(int64x2_t __p0) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vqnegq_v((int8x16_t)__rev0, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vqneg_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqneg_v((int8x8_t)__p0, 3); - return __ret; -} -#else -__ai int64x1_t vqneg_s64(int64x1_t __p0) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vqneg_v((int8x8_t)__p0, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqnegb_s8(int8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqnegb_s8(__p0); - return __ret; -} -#else -__ai int8_t vqnegb_s8(int8_t __p0) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqnegb_s8(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqnegs_s32(int32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqnegs_s32(__p0); - return __ret; -} -#else -__ai int32_t vqnegs_s32(int32_t __p0) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqnegs_s32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqnegd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqnegd_s64(__p0); - return __ret; -} -#else -__ai int64_t vqnegd_s64(int64_t __p0) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqnegd_s64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqnegh_s16(int16_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqnegh_s16(__p0); - return __ret; -} -#else -__ai int16_t vqnegh_s16(int16_t __p0) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqnegh_s16(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqrdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqrdmulhs_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqrdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqrdmulhs_s32(__p0, __p1); - return __ret; -} -__ai int32_t __noswap_vqrdmulhs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqrdmulhs_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqrdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqrdmulhh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqrdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqrdmulhh_s16(__p0, __p1); - return __ret; -} -__ai int16_t __noswap_vqrdmulhh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqrdmulhh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhs_lane_s32(__p0_162, __p1_162, __p2_162) __extension__ ({ \ - int32_t __s0_162 = __p0_162; \ - int32x2_t __s1_162 = __p1_162; \ - int32_t __ret_162; \ - __ret_162 = vqrdmulhs_s32(__s0_162, vget_lane_s32(__s1_162, __p2_162)); \ - __ret_162; \ -}) -#else -#define vqrdmulhs_lane_s32(__p0_163, __p1_163, __p2_163) __extension__ ({ \ - int32_t __s0_163 = __p0_163; \ - int32x2_t __s1_163 = __p1_163; \ - int32x2_t __rev1_163; __rev1_163 = __builtin_shufflevector(__s1_163, __s1_163, 1, 0); \ - int32_t __ret_163; \ - __ret_163 = __noswap_vqrdmulhs_s32(__s0_163, __noswap_vget_lane_s32(__rev1_163, __p2_163)); \ - __ret_163; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhh_lane_s16(__p0_164, __p1_164, __p2_164) __extension__ ({ \ - int16_t __s0_164 = __p0_164; \ - int16x4_t __s1_164 = __p1_164; \ - int16_t __ret_164; \ - __ret_164 = vqrdmulhh_s16(__s0_164, vget_lane_s16(__s1_164, __p2_164)); \ - __ret_164; \ -}) -#else -#define vqrdmulhh_lane_s16(__p0_165, __p1_165, __p2_165) __extension__ ({ \ - int16_t __s0_165 = __p0_165; \ - int16x4_t __s1_165 = __p1_165; \ - int16x4_t __rev1_165; __rev1_165 = __builtin_shufflevector(__s1_165, __s1_165, 3, 2, 1, 0); \ - int16_t __ret_165; \ - __ret_165 = __noswap_vqrdmulhh_s16(__s0_165, __noswap_vget_lane_s16(__rev1_165, __p2_165)); \ - __ret_165; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhs_laneq_s32(__p0_166, __p1_166, __p2_166) __extension__ ({ \ - int32_t __s0_166 = __p0_166; \ - int32x4_t __s1_166 = __p1_166; \ - int32_t __ret_166; \ - __ret_166 = vqrdmulhs_s32(__s0_166, vgetq_lane_s32(__s1_166, __p2_166)); \ - __ret_166; \ -}) -#else -#define vqrdmulhs_laneq_s32(__p0_167, __p1_167, __p2_167) __extension__ ({ \ - int32_t __s0_167 = __p0_167; \ - int32x4_t __s1_167 = __p1_167; \ - int32x4_t __rev1_167; __rev1_167 = __builtin_shufflevector(__s1_167, __s1_167, 3, 2, 1, 0); \ - int32_t __ret_167; \ - __ret_167 = __noswap_vqrdmulhs_s32(__s0_167, __noswap_vgetq_lane_s32(__rev1_167, __p2_167)); \ - __ret_167; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhh_laneq_s16(__p0_168, __p1_168, __p2_168) __extension__ ({ \ - int16_t __s0_168 = __p0_168; \ - int16x8_t __s1_168 = __p1_168; \ - int16_t __ret_168; \ - __ret_168 = vqrdmulhh_s16(__s0_168, vgetq_lane_s16(__s1_168, __p2_168)); \ - __ret_168; \ -}) -#else -#define vqrdmulhh_laneq_s16(__p0_169, __p1_169, __p2_169) __extension__ ({ \ - int16_t __s0_169 = __p0_169; \ - int16x8_t __s1_169 = __p1_169; \ - int16x8_t __rev1_169; __rev1_169 = __builtin_shufflevector(__s1_169, __s1_169, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16_t __ret_169; \ - __ret_169 = __noswap_vqrdmulhh_s16(__s0_169, __noswap_vgetq_lane_s16(__rev1_169, __p2_169)); \ - __ret_169; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __ret; \ - __ret = vqrdmulhq_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulhq_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __noswap_vqrdmulhq_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulhq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __ret; \ - __ret = vqrdmulhq_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulhq_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x8_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret; \ - __ret = __noswap_vqrdmulhq_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulh_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __ret; \ - __ret = vqrdmulh_s32(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulh_laneq_s32(__p0, __p1, __p2) __extension__ ({ \ - int32x2_t __s0 = __p0; \ - int32x4_t __s1 = __p1; \ - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int32x2_t __ret; \ - __ret = __noswap_vqrdmulh_s32(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrdmulh_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __ret; \ - __ret = vqrdmulh_s16(__s0, __builtin_shufflevector(__s1, __s1, __p2, __p2, __p2, __p2)); \ - __ret; \ -}) -#else -#define vqrdmulh_laneq_s16(__p0, __p1, __p2) __extension__ ({ \ - int16x4_t __s0 = __p0; \ - int16x8_t __s1 = __p1; \ - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x4_t __ret; \ - __ret = __noswap_vqrdmulh_s16(__rev0, __builtin_shufflevector(__rev1, __rev1, __p2, __p2, __p2, __p2)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vqrshlb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqrshlb_u8(__p0, __p1); - return __ret; -} -#else -__ai uint8_t vqrshlb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqrshlb_u8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vqrshls_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqrshls_u32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vqrshls_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqrshls_u32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vqrshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqrshld_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vqrshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqrshld_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vqrshlh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqrshlh_u16(__p0, __p1); - return __ret; -} -#else -__ai uint16_t vqrshlh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqrshlh_u16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqrshlb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqrshlb_s8(__p0, __p1); - return __ret; -} -#else -__ai int8_t vqrshlb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqrshlb_s8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqrshls_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqrshls_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqrshls_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqrshls_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqrshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqrshld_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vqrshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqrshld_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqrshlh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqrshlh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqrshlh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqrshlh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_u32(__p0_170, __p1_170, __p2_170) __extension__ ({ \ - uint16x4_t __s0_170 = __p0_170; \ - uint32x4_t __s1_170 = __p1_170; \ - uint16x8_t __ret_170; \ - __ret_170 = (uint16x8_t)(vcombine_u16((uint16x4_t)(__s0_170), (uint16x4_t)(vqrshrn_n_u32(__s1_170, __p2_170)))); \ - __ret_170; \ -}) -#else -#define vqrshrn_high_n_u32(__p0_171, __p1_171, __p2_171) __extension__ ({ \ - uint16x4_t __s0_171 = __p0_171; \ - uint32x4_t __s1_171 = __p1_171; \ - uint16x4_t __rev0_171; __rev0_171 = __builtin_shufflevector(__s0_171, __s0_171, 3, 2, 1, 0); \ - uint32x4_t __rev1_171; __rev1_171 = __builtin_shufflevector(__s1_171, __s1_171, 3, 2, 1, 0); \ - uint16x8_t __ret_171; \ - __ret_171 = (uint16x8_t)(__noswap_vcombine_u16((uint16x4_t)(__rev0_171), (uint16x4_t)(__noswap_vqrshrn_n_u32(__rev1_171, __p2_171)))); \ - __ret_171 = __builtin_shufflevector(__ret_171, __ret_171, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_171; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_u64(__p0_172, __p1_172, __p2_172) __extension__ ({ \ - uint32x2_t __s0_172 = __p0_172; \ - uint64x2_t __s1_172 = __p1_172; \ - uint32x4_t __ret_172; \ - __ret_172 = (uint32x4_t)(vcombine_u32((uint32x2_t)(__s0_172), (uint32x2_t)(vqrshrn_n_u64(__s1_172, __p2_172)))); \ - __ret_172; \ -}) -#else -#define vqrshrn_high_n_u64(__p0_173, __p1_173, __p2_173) __extension__ ({ \ - uint32x2_t __s0_173 = __p0_173; \ - uint64x2_t __s1_173 = __p1_173; \ - uint32x2_t __rev0_173; __rev0_173 = __builtin_shufflevector(__s0_173, __s0_173, 1, 0); \ - uint64x2_t __rev1_173; __rev1_173 = __builtin_shufflevector(__s1_173, __s1_173, 1, 0); \ - uint32x4_t __ret_173; \ - __ret_173 = (uint32x4_t)(__noswap_vcombine_u32((uint32x2_t)(__rev0_173), (uint32x2_t)(__noswap_vqrshrn_n_u64(__rev1_173, __p2_173)))); \ - __ret_173 = __builtin_shufflevector(__ret_173, __ret_173, 3, 2, 1, 0); \ - __ret_173; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_u16(__p0_174, __p1_174, __p2_174) __extension__ ({ \ - uint8x8_t __s0_174 = __p0_174; \ - uint16x8_t __s1_174 = __p1_174; \ - uint8x16_t __ret_174; \ - __ret_174 = (uint8x16_t)(vcombine_u8((uint8x8_t)(__s0_174), (uint8x8_t)(vqrshrn_n_u16(__s1_174, __p2_174)))); \ - __ret_174; \ -}) -#else -#define vqrshrn_high_n_u16(__p0_175, __p1_175, __p2_175) __extension__ ({ \ - uint8x8_t __s0_175 = __p0_175; \ - uint16x8_t __s1_175 = __p1_175; \ - uint8x8_t __rev0_175; __rev0_175 = __builtin_shufflevector(__s0_175, __s0_175, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1_175; __rev1_175 = __builtin_shufflevector(__s1_175, __s1_175, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_175; \ - __ret_175 = (uint8x16_t)(__noswap_vcombine_u8((uint8x8_t)(__rev0_175), (uint8x8_t)(__noswap_vqrshrn_n_u16(__rev1_175, __p2_175)))); \ - __ret_175 = __builtin_shufflevector(__ret_175, __ret_175, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_175; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_s32(__p0_176, __p1_176, __p2_176) __extension__ ({ \ - int16x4_t __s0_176 = __p0_176; \ - int32x4_t __s1_176 = __p1_176; \ - int16x8_t __ret_176; \ - __ret_176 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_176), (int16x4_t)(vqrshrn_n_s32(__s1_176, __p2_176)))); \ - __ret_176; \ -}) -#else -#define vqrshrn_high_n_s32(__p0_177, __p1_177, __p2_177) __extension__ ({ \ - int16x4_t __s0_177 = __p0_177; \ - int32x4_t __s1_177 = __p1_177; \ - int16x4_t __rev0_177; __rev0_177 = __builtin_shufflevector(__s0_177, __s0_177, 3, 2, 1, 0); \ - int32x4_t __rev1_177; __rev1_177 = __builtin_shufflevector(__s1_177, __s1_177, 3, 2, 1, 0); \ - int16x8_t __ret_177; \ - __ret_177 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_177), (int16x4_t)(__noswap_vqrshrn_n_s32(__rev1_177, __p2_177)))); \ - __ret_177 = __builtin_shufflevector(__ret_177, __ret_177, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_177; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_s64(__p0_178, __p1_178, __p2_178) __extension__ ({ \ - int32x2_t __s0_178 = __p0_178; \ - int64x2_t __s1_178 = __p1_178; \ - int32x4_t __ret_178; \ - __ret_178 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_178), (int32x2_t)(vqrshrn_n_s64(__s1_178, __p2_178)))); \ - __ret_178; \ -}) -#else -#define vqrshrn_high_n_s64(__p0_179, __p1_179, __p2_179) __extension__ ({ \ - int32x2_t __s0_179 = __p0_179; \ - int64x2_t __s1_179 = __p1_179; \ - int32x2_t __rev0_179; __rev0_179 = __builtin_shufflevector(__s0_179, __s0_179, 1, 0); \ - int64x2_t __rev1_179; __rev1_179 = __builtin_shufflevector(__s1_179, __s1_179, 1, 0); \ - int32x4_t __ret_179; \ - __ret_179 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_179), (int32x2_t)(__noswap_vqrshrn_n_s64(__rev1_179, __p2_179)))); \ - __ret_179 = __builtin_shufflevector(__ret_179, __ret_179, 3, 2, 1, 0); \ - __ret_179; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrn_high_n_s16(__p0_180, __p1_180, __p2_180) __extension__ ({ \ - int8x8_t __s0_180 = __p0_180; \ - int16x8_t __s1_180 = __p1_180; \ - int8x16_t __ret_180; \ - __ret_180 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_180), (int8x8_t)(vqrshrn_n_s16(__s1_180, __p2_180)))); \ - __ret_180; \ -}) -#else -#define vqrshrn_high_n_s16(__p0_181, __p1_181, __p2_181) __extension__ ({ \ - int8x8_t __s0_181 = __p0_181; \ - int16x8_t __s1_181 = __p1_181; \ - int8x8_t __rev0_181; __rev0_181 = __builtin_shufflevector(__s0_181, __s0_181, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_181; __rev1_181 = __builtin_shufflevector(__s1_181, __s1_181, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_181; \ - __ret_181 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_181), (int8x8_t)(__noswap_vqrshrn_n_s16(__rev1_181, __p2_181)))); \ - __ret_181 = __builtin_shufflevector(__ret_181, __ret_181, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_181; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrns_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqrshrns_n_u32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrns_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqrshrns_n_u32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrnd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqrshrnd_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrnd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqrshrnd_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrnh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqrshrnh_n_u16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrnh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqrshrnh_n_u16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqrshrns_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqrshrns_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrnd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqrshrnd_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrnd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqrshrnd_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrnh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqrshrnh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrnh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqrshrnh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_high_n_s32(__p0_182, __p1_182, __p2_182) __extension__ ({ \ - int16x4_t __s0_182 = __p0_182; \ - int32x4_t __s1_182 = __p1_182; \ - int16x8_t __ret_182; \ - __ret_182 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_182), (int16x4_t)(vqrshrun_n_s32(__s1_182, __p2_182)))); \ - __ret_182; \ -}) -#else -#define vqrshrun_high_n_s32(__p0_183, __p1_183, __p2_183) __extension__ ({ \ - int16x4_t __s0_183 = __p0_183; \ - int32x4_t __s1_183 = __p1_183; \ - int16x4_t __rev0_183; __rev0_183 = __builtin_shufflevector(__s0_183, __s0_183, 3, 2, 1, 0); \ - int32x4_t __rev1_183; __rev1_183 = __builtin_shufflevector(__s1_183, __s1_183, 3, 2, 1, 0); \ - int16x8_t __ret_183; \ - __ret_183 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_183), (int16x4_t)(__noswap_vqrshrun_n_s32(__rev1_183, __p2_183)))); \ - __ret_183 = __builtin_shufflevector(__ret_183, __ret_183, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_183; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_high_n_s64(__p0_184, __p1_184, __p2_184) __extension__ ({ \ - int32x2_t __s0_184 = __p0_184; \ - int64x2_t __s1_184 = __p1_184; \ - int32x4_t __ret_184; \ - __ret_184 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_184), (int32x2_t)(vqrshrun_n_s64(__s1_184, __p2_184)))); \ - __ret_184; \ -}) -#else -#define vqrshrun_high_n_s64(__p0_185, __p1_185, __p2_185) __extension__ ({ \ - int32x2_t __s0_185 = __p0_185; \ - int64x2_t __s1_185 = __p1_185; \ - int32x2_t __rev0_185; __rev0_185 = __builtin_shufflevector(__s0_185, __s0_185, 1, 0); \ - int64x2_t __rev1_185; __rev1_185 = __builtin_shufflevector(__s1_185, __s1_185, 1, 0); \ - int32x4_t __ret_185; \ - __ret_185 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_185), (int32x2_t)(__noswap_vqrshrun_n_s64(__rev1_185, __p2_185)))); \ - __ret_185 = __builtin_shufflevector(__ret_185, __ret_185, 3, 2, 1, 0); \ - __ret_185; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrun_high_n_s16(__p0_186, __p1_186, __p2_186) __extension__ ({ \ - int8x8_t __s0_186 = __p0_186; \ - int16x8_t __s1_186 = __p1_186; \ - int8x16_t __ret_186; \ - __ret_186 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_186), (int8x8_t)(vqrshrun_n_s16(__s1_186, __p2_186)))); \ - __ret_186; \ -}) -#else -#define vqrshrun_high_n_s16(__p0_187, __p1_187, __p2_187) __extension__ ({ \ - int8x8_t __s0_187 = __p0_187; \ - int16x8_t __s1_187 = __p1_187; \ - int8x8_t __rev0_187; __rev0_187 = __builtin_shufflevector(__s0_187, __s0_187, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_187; __rev1_187 = __builtin_shufflevector(__s1_187, __s1_187, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_187; \ - __ret_187 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_187), (int8x8_t)(__noswap_vqrshrun_n_s16(__rev1_187, __p2_187)))); \ - __ret_187 = __builtin_shufflevector(__ret_187, __ret_187, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_187; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshruns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqrshruns_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshruns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqrshruns_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrund_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqrshrund_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrund_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqrshrund_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqrshrunh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqrshrunh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqrshrunh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqrshrunh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vqshlb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqshlb_u8(__p0, __p1); - return __ret; -} -#else -__ai uint8_t vqshlb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqshlb_u8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vqshls_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqshls_u32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vqshls_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqshls_u32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vqshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqshld_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vqshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqshld_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vqshlh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqshlh_u16(__p0, __p1); - return __ret; -} -#else -__ai uint16_t vqshlh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqshlh_u16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqshlb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqshlb_s8(__p0, __p1); - return __ret; -} -#else -__ai int8_t vqshlb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqshlb_s8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqshls_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqshls_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqshls_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqshls_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqshld_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vqshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqshld_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqshlh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqshlh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqshlh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqshlh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlb_n_u8(__p0, __p1) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqshlb_n_u8(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlb_n_u8(__p0, __p1) __extension__ ({ \ - uint8_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqshlb_n_u8(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshls_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqshls_n_u32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshls_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqshls_n_u32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshld_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vqshld_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshld_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vqshld_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqshlh_n_u16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqshlh_n_u16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlb_n_s8(__p0, __p1) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshlb_n_s8(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlb_n_s8(__p0, __p1) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshlb_n_s8(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshls_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshls_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshls_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshls_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshld_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqshld_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshld_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqshld_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshlh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshlh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlub_n_s8(__p0, __p1) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshlub_n_s8(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlub_n_s8(__p0, __p1) __extension__ ({ \ - int8_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshlub_n_s8(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlus_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshlus_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlus_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshlus_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshlud_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqshlud_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshlud_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vqshlud_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshluh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshluh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshluh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshluh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_u32(__p0_188, __p1_188, __p2_188) __extension__ ({ \ - uint16x4_t __s0_188 = __p0_188; \ - uint32x4_t __s1_188 = __p1_188; \ - uint16x8_t __ret_188; \ - __ret_188 = (uint16x8_t)(vcombine_u16((uint16x4_t)(__s0_188), (uint16x4_t)(vqshrn_n_u32(__s1_188, __p2_188)))); \ - __ret_188; \ -}) -#else -#define vqshrn_high_n_u32(__p0_189, __p1_189, __p2_189) __extension__ ({ \ - uint16x4_t __s0_189 = __p0_189; \ - uint32x4_t __s1_189 = __p1_189; \ - uint16x4_t __rev0_189; __rev0_189 = __builtin_shufflevector(__s0_189, __s0_189, 3, 2, 1, 0); \ - uint32x4_t __rev1_189; __rev1_189 = __builtin_shufflevector(__s1_189, __s1_189, 3, 2, 1, 0); \ - uint16x8_t __ret_189; \ - __ret_189 = (uint16x8_t)(__noswap_vcombine_u16((uint16x4_t)(__rev0_189), (uint16x4_t)(__noswap_vqshrn_n_u32(__rev1_189, __p2_189)))); \ - __ret_189 = __builtin_shufflevector(__ret_189, __ret_189, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_189; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_u64(__p0_190, __p1_190, __p2_190) __extension__ ({ \ - uint32x2_t __s0_190 = __p0_190; \ - uint64x2_t __s1_190 = __p1_190; \ - uint32x4_t __ret_190; \ - __ret_190 = (uint32x4_t)(vcombine_u32((uint32x2_t)(__s0_190), (uint32x2_t)(vqshrn_n_u64(__s1_190, __p2_190)))); \ - __ret_190; \ -}) -#else -#define vqshrn_high_n_u64(__p0_191, __p1_191, __p2_191) __extension__ ({ \ - uint32x2_t __s0_191 = __p0_191; \ - uint64x2_t __s1_191 = __p1_191; \ - uint32x2_t __rev0_191; __rev0_191 = __builtin_shufflevector(__s0_191, __s0_191, 1, 0); \ - uint64x2_t __rev1_191; __rev1_191 = __builtin_shufflevector(__s1_191, __s1_191, 1, 0); \ - uint32x4_t __ret_191; \ - __ret_191 = (uint32x4_t)(__noswap_vcombine_u32((uint32x2_t)(__rev0_191), (uint32x2_t)(__noswap_vqshrn_n_u64(__rev1_191, __p2_191)))); \ - __ret_191 = __builtin_shufflevector(__ret_191, __ret_191, 3, 2, 1, 0); \ - __ret_191; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_u16(__p0_192, __p1_192, __p2_192) __extension__ ({ \ - uint8x8_t __s0_192 = __p0_192; \ - uint16x8_t __s1_192 = __p1_192; \ - uint8x16_t __ret_192; \ - __ret_192 = (uint8x16_t)(vcombine_u8((uint8x8_t)(__s0_192), (uint8x8_t)(vqshrn_n_u16(__s1_192, __p2_192)))); \ - __ret_192; \ -}) -#else -#define vqshrn_high_n_u16(__p0_193, __p1_193, __p2_193) __extension__ ({ \ - uint8x8_t __s0_193 = __p0_193; \ - uint16x8_t __s1_193 = __p1_193; \ - uint8x8_t __rev0_193; __rev0_193 = __builtin_shufflevector(__s0_193, __s0_193, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1_193; __rev1_193 = __builtin_shufflevector(__s1_193, __s1_193, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_193; \ - __ret_193 = (uint8x16_t)(__noswap_vcombine_u8((uint8x8_t)(__rev0_193), (uint8x8_t)(__noswap_vqshrn_n_u16(__rev1_193, __p2_193)))); \ - __ret_193 = __builtin_shufflevector(__ret_193, __ret_193, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_193; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_s32(__p0_194, __p1_194, __p2_194) __extension__ ({ \ - int16x4_t __s0_194 = __p0_194; \ - int32x4_t __s1_194 = __p1_194; \ - int16x8_t __ret_194; \ - __ret_194 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_194), (int16x4_t)(vqshrn_n_s32(__s1_194, __p2_194)))); \ - __ret_194; \ -}) -#else -#define vqshrn_high_n_s32(__p0_195, __p1_195, __p2_195) __extension__ ({ \ - int16x4_t __s0_195 = __p0_195; \ - int32x4_t __s1_195 = __p1_195; \ - int16x4_t __rev0_195; __rev0_195 = __builtin_shufflevector(__s0_195, __s0_195, 3, 2, 1, 0); \ - int32x4_t __rev1_195; __rev1_195 = __builtin_shufflevector(__s1_195, __s1_195, 3, 2, 1, 0); \ - int16x8_t __ret_195; \ - __ret_195 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_195), (int16x4_t)(__noswap_vqshrn_n_s32(__rev1_195, __p2_195)))); \ - __ret_195 = __builtin_shufflevector(__ret_195, __ret_195, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_195; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_s64(__p0_196, __p1_196, __p2_196) __extension__ ({ \ - int32x2_t __s0_196 = __p0_196; \ - int64x2_t __s1_196 = __p1_196; \ - int32x4_t __ret_196; \ - __ret_196 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_196), (int32x2_t)(vqshrn_n_s64(__s1_196, __p2_196)))); \ - __ret_196; \ -}) -#else -#define vqshrn_high_n_s64(__p0_197, __p1_197, __p2_197) __extension__ ({ \ - int32x2_t __s0_197 = __p0_197; \ - int64x2_t __s1_197 = __p1_197; \ - int32x2_t __rev0_197; __rev0_197 = __builtin_shufflevector(__s0_197, __s0_197, 1, 0); \ - int64x2_t __rev1_197; __rev1_197 = __builtin_shufflevector(__s1_197, __s1_197, 1, 0); \ - int32x4_t __ret_197; \ - __ret_197 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_197), (int32x2_t)(__noswap_vqshrn_n_s64(__rev1_197, __p2_197)))); \ - __ret_197 = __builtin_shufflevector(__ret_197, __ret_197, 3, 2, 1, 0); \ - __ret_197; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrn_high_n_s16(__p0_198, __p1_198, __p2_198) __extension__ ({ \ - int8x8_t __s0_198 = __p0_198; \ - int16x8_t __s1_198 = __p1_198; \ - int8x16_t __ret_198; \ - __ret_198 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_198), (int8x8_t)(vqshrn_n_s16(__s1_198, __p2_198)))); \ - __ret_198; \ -}) -#else -#define vqshrn_high_n_s16(__p0_199, __p1_199, __p2_199) __extension__ ({ \ - int8x8_t __s0_199 = __p0_199; \ - int16x8_t __s1_199 = __p1_199; \ - int8x8_t __rev0_199; __rev0_199 = __builtin_shufflevector(__s0_199, __s0_199, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_199; __rev1_199 = __builtin_shufflevector(__s1_199, __s1_199, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_199; \ - __ret_199 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_199), (int8x8_t)(__noswap_vqshrn_n_s16(__rev1_199, __p2_199)))); \ - __ret_199 = __builtin_shufflevector(__ret_199, __ret_199, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_199; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrns_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqshrns_n_u32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrns_n_u32(__p0, __p1) __extension__ ({ \ - uint32_t __s0 = __p0; \ - uint16_t __ret; \ - __ret = (uint16_t) __builtin_neon_vqshrns_n_u32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrnd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqshrnd_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrnd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint32_t __ret; \ - __ret = (uint32_t) __builtin_neon_vqshrnd_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrnh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqshrnh_n_u16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrnh_n_u16(__p0, __p1) __extension__ ({ \ - uint16_t __s0 = __p0; \ - uint8_t __ret; \ - __ret = (uint8_t) __builtin_neon_vqshrnh_n_u16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshrns_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshrns_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrnd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshrnd_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrnd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshrnd_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrnh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshrnh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrnh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshrnh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_high_n_s32(__p0_200, __p1_200, __p2_200) __extension__ ({ \ - int16x4_t __s0_200 = __p0_200; \ - int32x4_t __s1_200 = __p1_200; \ - int16x8_t __ret_200; \ - __ret_200 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_200), (int16x4_t)(vqshrun_n_s32(__s1_200, __p2_200)))); \ - __ret_200; \ -}) -#else -#define vqshrun_high_n_s32(__p0_201, __p1_201, __p2_201) __extension__ ({ \ - int16x4_t __s0_201 = __p0_201; \ - int32x4_t __s1_201 = __p1_201; \ - int16x4_t __rev0_201; __rev0_201 = __builtin_shufflevector(__s0_201, __s0_201, 3, 2, 1, 0); \ - int32x4_t __rev1_201; __rev1_201 = __builtin_shufflevector(__s1_201, __s1_201, 3, 2, 1, 0); \ - int16x8_t __ret_201; \ - __ret_201 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_201), (int16x4_t)(__noswap_vqshrun_n_s32(__rev1_201, __p2_201)))); \ - __ret_201 = __builtin_shufflevector(__ret_201, __ret_201, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_201; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_high_n_s64(__p0_202, __p1_202, __p2_202) __extension__ ({ \ - int32x2_t __s0_202 = __p0_202; \ - int64x2_t __s1_202 = __p1_202; \ - int32x4_t __ret_202; \ - __ret_202 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_202), (int32x2_t)(vqshrun_n_s64(__s1_202, __p2_202)))); \ - __ret_202; \ -}) -#else -#define vqshrun_high_n_s64(__p0_203, __p1_203, __p2_203) __extension__ ({ \ - int32x2_t __s0_203 = __p0_203; \ - int64x2_t __s1_203 = __p1_203; \ - int32x2_t __rev0_203; __rev0_203 = __builtin_shufflevector(__s0_203, __s0_203, 1, 0); \ - int64x2_t __rev1_203; __rev1_203 = __builtin_shufflevector(__s1_203, __s1_203, 1, 0); \ - int32x4_t __ret_203; \ - __ret_203 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_203), (int32x2_t)(__noswap_vqshrun_n_s64(__rev1_203, __p2_203)))); \ - __ret_203 = __builtin_shufflevector(__ret_203, __ret_203, 3, 2, 1, 0); \ - __ret_203; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrun_high_n_s16(__p0_204, __p1_204, __p2_204) __extension__ ({ \ - int8x8_t __s0_204 = __p0_204; \ - int16x8_t __s1_204 = __p1_204; \ - int8x16_t __ret_204; \ - __ret_204 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_204), (int8x8_t)(vqshrun_n_s16(__s1_204, __p2_204)))); \ - __ret_204; \ -}) -#else -#define vqshrun_high_n_s16(__p0_205, __p1_205, __p2_205) __extension__ ({ \ - int8x8_t __s0_205 = __p0_205; \ - int16x8_t __s1_205 = __p1_205; \ - int8x8_t __rev0_205; __rev0_205 = __builtin_shufflevector(__s0_205, __s0_205, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_205; __rev1_205 = __builtin_shufflevector(__s1_205, __s1_205, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_205; \ - __ret_205 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_205), (int8x8_t)(__noswap_vqshrun_n_s16(__rev1_205, __p2_205)))); \ - __ret_205 = __builtin_shufflevector(__ret_205, __ret_205, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_205; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshruns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshruns_n_s32(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshruns_n_s32(__p0, __p1) __extension__ ({ \ - int32_t __s0 = __p0; \ - int16_t __ret; \ - __ret = (int16_t) __builtin_neon_vqshruns_n_s32(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrund_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshrund_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrund_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int32_t __ret; \ - __ret = (int32_t) __builtin_neon_vqshrund_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vqshrunh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshrunh_n_s16(__s0, __p1); \ - __ret; \ -}) -#else -#define vqshrunh_n_s16(__p0, __p1) __extension__ ({ \ - int16_t __s0 = __p0; \ - int8_t __ret; \ - __ret = (int8_t) __builtin_neon_vqshrunh_n_s16(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vqsubb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqsubb_u8(__p0, __p1); - return __ret; -} -#else -__ai uint8_t vqsubb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vqsubb_u8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vqsubs_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqsubs_u32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vqsubs_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vqsubs_u32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vqsubd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqsubd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vqsubd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vqsubd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vqsubh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqsubh_u16(__p0, __p1); - return __ret; -} -#else -__ai uint16_t vqsubh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vqsubh_u16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vqsubb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqsubb_s8(__p0, __p1); - return __ret; -} -#else -__ai int8_t vqsubb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vqsubb_s8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vqsubs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqsubs_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vqsubs_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vqsubs_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vqsubd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqsubd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vqsubd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vqsubd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vqsubh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqsubh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vqsubh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vqsubh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbl1_p8(poly8x16_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__p0, (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbl1_p8(poly8x16_t __p0, uint8x8_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__rev0, (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbl1q_p8(poly8x16_t __p0, uint8x16_t __p1) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__p0, (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbl1q_p8(poly8x16_t __p0, uint8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbl1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbl1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbl1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqtbl1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbl1_u8(uint8x16_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbl1_u8(uint8x16_t __p0, uint8x8_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbl1_s8(int8x16_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqtbl1_s8(int8x16_t __p0, int8x8_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl1_v((int8x16_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbl2_p8(poly8x16x2_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbl2_p8(poly8x16x2_t __p0, uint8x8_t __p1) { - poly8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbl2q_p8(poly8x16x2_t __p0, uint8x16_t __p1) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbl2q_p8(poly8x16x2_t __p0, uint8x16_t __p1) { - poly8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev1, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbl2q_u8(uint8x16x2_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbl2q_u8(uint8x16x2_t __p0, uint8x16_t __p1) { - uint8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbl2q_s8(int8x16x2_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqtbl2q_s8(int8x16x2_t __p0, int8x16_t __p1) { - int8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl2q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbl2_u8(uint8x16x2_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbl2_u8(uint8x16x2_t __p0, uint8x8_t __p1) { - uint8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbl2_s8(int8x16x2_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqtbl2_s8(int8x16x2_t __p0, int8x8_t __p1) { - int8x16x2_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl2_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbl3_p8(poly8x16x3_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbl3_p8(poly8x16x3_t __p0, uint8x8_t __p1) { - poly8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbl3q_p8(poly8x16x3_t __p0, uint8x16_t __p1) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbl3q_p8(poly8x16x3_t __p0, uint8x16_t __p1) { - poly8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev1, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbl3q_u8(uint8x16x3_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbl3q_u8(uint8x16x3_t __p0, uint8x16_t __p1) { - uint8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbl3q_s8(int8x16x3_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqtbl3q_s8(int8x16x3_t __p0, int8x16_t __p1) { - int8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl3q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbl3_u8(uint8x16x3_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbl3_u8(uint8x16x3_t __p0, uint8x8_t __p1) { - uint8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbl3_s8(int8x16x3_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqtbl3_s8(int8x16x3_t __p0, int8x8_t __p1) { - int8x16x3_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl3_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbl4_p8(poly8x16x4_t __p0, uint8x8_t __p1) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x8_t)__p1, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbl4_p8(poly8x16x4_t __p0, uint8x8_t __p1) { - poly8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x8_t)__rev1, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbl4q_p8(poly8x16x4_t __p0, uint8x16_t __p1) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x16_t)__p1, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbl4q_p8(poly8x16x4_t __p0, uint8x16_t __p1) { - poly8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x16_t)__rev1, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbl4q_u8(uint8x16x4_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbl4q_u8(uint8x16x4_t __p0, uint8x16_t __p1) { - uint8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbl4q_s8(int8x16x4_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vqtbl4q_s8(int8x16x4_t __p0, int8x16_t __p1) { - int8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbl4q_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbl4_u8(uint8x16x4_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbl4_u8(uint8x16x4_t __p0, uint8x8_t __p1) { - uint8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbl4_s8(int8x16x4_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__p0.val[0], (int8x16_t)__p0.val[1], (int8x16_t)__p0.val[2], (int8x16_t)__p0.val[3], (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vqtbl4_s8(int8x16x4_t __p0, int8x8_t __p1) { - int8x16x4_t __rev0; - __rev0.val[0] = __builtin_shufflevector(__p0.val[0], __p0.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[1] = __builtin_shufflevector(__p0.val[1], __p0.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[2] = __builtin_shufflevector(__p0.val[2], __p0.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev0.val[3] = __builtin_shufflevector(__p0.val[3], __p0.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbl4_v((int8x16_t)__rev0.val[0], (int8x16_t)__rev0.val[1], (int8x16_t)__rev0.val[2], (int8x16_t)__rev0.val[3], (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbx1_p8(poly8x8_t __p0, poly8x16_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__p0, (int8x16_t)__p1, (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbx1_p8(poly8x8_t __p0, poly8x16_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__rev0, (int8x16_t)__rev1, (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbx1q_p8(poly8x16_t __p0, poly8x16_t __p1, uint8x16_t __p2) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbx1q_p8(poly8x16_t __p0, poly8x16_t __p1, uint8x16_t __p2) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbx1q_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbx1q_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbx1q_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 32); - return __ret; -} -#else -__ai int8x16_t vqtbx1q_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx1q_v((int8x16_t)__rev0, (int8x16_t)__rev1, (int8x16_t)__rev2, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbx1_u8(uint8x8_t __p0, uint8x16_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__p0, (int8x16_t)__p1, (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbx1_u8(uint8x8_t __p0, uint8x16_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__rev0, (int8x16_t)__rev1, (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbx1_s8(int8x8_t __p0, int8x16_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__p0, (int8x16_t)__p1, (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vqtbx1_s8(int8x8_t __p0, int8x16_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx1_v((int8x8_t)__rev0, (int8x16_t)__rev1, (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbx2_p8(poly8x8_t __p0, poly8x16x2_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbx2_p8(poly8x8_t __p0, poly8x16x2_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbx2q_p8(poly8x16_t __p0, poly8x16x2_t __p1, uint8x16_t __p2) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p2, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbx2q_p8(poly8x16_t __p0, poly8x16x2_t __p1, uint8x16_t __p2) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev2, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbx2q_u8(uint8x16_t __p0, uint8x16x2_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p2, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbx2q_u8(uint8x16_t __p0, uint8x16x2_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev2, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbx2q_s8(int8x16_t __p0, int8x16x2_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p2, 32); - return __ret; -} -#else -__ai int8x16_t vqtbx2q_s8(int8x16_t __p0, int8x16x2_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx2q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev2, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbx2_u8(uint8x8_t __p0, uint8x16x2_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbx2_u8(uint8x8_t __p0, uint8x16x2_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbx2_s8(int8x8_t __p0, int8x16x2_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vqtbx2_s8(int8x8_t __p0, int8x16x2_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x2_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx2_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbx3_p8(poly8x8_t __p0, poly8x16x3_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbx3_p8(poly8x8_t __p0, poly8x16x3_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbx3q_p8(poly8x16_t __p0, poly8x16x3_t __p1, uint8x16_t __p2) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p2, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbx3q_p8(poly8x16_t __p0, poly8x16x3_t __p1, uint8x16_t __p2) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev2, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbx3q_u8(uint8x16_t __p0, uint8x16x3_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p2, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbx3q_u8(uint8x16_t __p0, uint8x16x3_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev2, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbx3q_s8(int8x16_t __p0, int8x16x3_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p2, 32); - return __ret; -} -#else -__ai int8x16_t vqtbx3q_s8(int8x16_t __p0, int8x16x3_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx3q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev2, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbx3_u8(uint8x8_t __p0, uint8x16x3_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbx3_u8(uint8x8_t __p0, uint8x16x3_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbx3_s8(int8x8_t __p0, int8x16x3_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vqtbx3_s8(int8x8_t __p0, int8x16x3_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x3_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx3_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vqtbx4_p8(poly8x8_t __p0, poly8x16x4_t __p1, uint8x8_t __p2) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x8_t)__p2, 4); - return __ret; -} -#else -__ai poly8x8_t vqtbx4_p8(poly8x8_t __p0, poly8x16x4_t __p1, uint8x8_t __p2) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x8_t)__rev2, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vqtbx4q_p8(poly8x16_t __p0, poly8x16x4_t __p1, uint8x16_t __p2) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x16_t)__p2, 36); - return __ret; -} -#else -__ai poly8x16_t vqtbx4q_p8(poly8x16_t __p0, poly8x16x4_t __p1, uint8x16_t __p2) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x16_t)__rev2, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vqtbx4q_u8(uint8x16_t __p0, uint8x16x4_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x16_t)__p2, 48); - return __ret; -} -#else -__ai uint8x16_t vqtbx4q_u8(uint8x16_t __p0, uint8x16x4_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x16_t)__rev2, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vqtbx4q_s8(int8x16_t __p0, int8x16x4_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x16_t)__p2, 32); - return __ret; -} -#else -__ai int8x16_t vqtbx4q_s8(int8x16_t __p0, int8x16x4_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vqtbx4q_v((int8x16_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x16_t)__rev2, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vqtbx4_u8(uint8x8_t __p0, uint8x16x4_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x8_t)__p2, 16); - return __ret; -} -#else -__ai uint8x8_t vqtbx4_u8(uint8x8_t __p0, uint8x16x4_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x8_t)__rev2, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vqtbx4_s8(int8x8_t __p0, int8x16x4_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__p0, (int8x16_t)__p1.val[0], (int8x16_t)__p1.val[1], (int8x16_t)__p1.val[2], (int8x16_t)__p1.val[3], (int8x8_t)__p2, 0); - return __ret; -} -#else -__ai int8x8_t vqtbx4_s8(int8x8_t __p0, int8x16x4_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16x4_t __rev1; - __rev1.val[0] = __builtin_shufflevector(__p1.val[0], __p1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[1] = __builtin_shufflevector(__p1.val[1], __p1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[2] = __builtin_shufflevector(__p1.val[2], __p1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - __rev1.val[3] = __builtin_shufflevector(__p1.val[3], __p1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vqtbx4_v((int8x8_t)__rev0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], (int8x8_t)__rev2, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vraddhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vraddhn_u32(__p1, __p2)); - return __ret; -} -#else -__ai uint16x8_t vraddhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vraddhn_u32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vraddhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vraddhn_u64(__p1, __p2)); - return __ret; -} -#else -__ai uint32x4_t vraddhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vraddhn_u64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vraddhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vraddhn_u16(__p1, __p2)); - return __ret; -} -#else -__ai uint8x16_t vraddhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vraddhn_u16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vraddhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vraddhn_s32(__p1, __p2)); - return __ret; -} -#else -__ai int16x8_t vraddhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vraddhn_s32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vraddhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vraddhn_s64(__p1, __p2)); - return __ret; -} -#else -__ai int32x4_t vraddhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vraddhn_s64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vraddhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vraddhn_s16(__p1, __p2)); - return __ret; -} -#else -__ai int8x16_t vraddhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vraddhn_s16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vrbit_p8(poly8x8_t __p0) { - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vrbit_v((int8x8_t)__p0, 4); - return __ret; -} -#else -__ai poly8x8_t vrbit_p8(poly8x8_t __p0) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = (poly8x8_t) __builtin_neon_vrbit_v((int8x8_t)__rev0, 4); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vrbitq_p8(poly8x16_t __p0) { - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__p0, 36); - return __ret; -} -#else -__ai poly8x16_t vrbitq_p8(poly8x16_t __p0) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = (poly8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__rev0, 36); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrbitq_u8(uint8x16_t __p0) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__p0, 48); - return __ret; -} -#else -__ai uint8x16_t vrbitq_u8(uint8x16_t __p0) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__rev0, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrbitq_s8(int8x16_t __p0) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__p0, 32); - return __ret; -} -#else -__ai int8x16_t vrbitq_s8(int8x16_t __p0) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vrbitq_v((int8x16_t)__rev0, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vrbit_u8(uint8x8_t __p0) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrbit_v((int8x8_t)__p0, 16); - return __ret; -} -#else -__ai uint8x8_t vrbit_u8(uint8x8_t __p0) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vrbit_v((int8x8_t)__rev0, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vrbit_s8(int8x8_t __p0) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrbit_v((int8x8_t)__p0, 0); - return __ret; -} -#else -__ai int8x8_t vrbit_s8(int8x8_t __p0) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vrbit_v((int8x8_t)__rev0, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrecpeq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrecpeq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrecpeq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrecpeq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrecpe_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrecpe_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrecpe_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrecpe_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vrecped_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecped_f64(__p0); - return __ret; -} -#else -__ai float64_t vrecped_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecped_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vrecpes_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpes_f32(__p0); - return __ret; -} -#else -__ai float32_t vrecpes_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpes_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrecpsq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrecpsq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vrecpsq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrecpsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrecps_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrecps_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vrecps_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrecps_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vrecpsd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecpsd_f64(__p0, __p1); - return __ret; -} -#else -__ai float64_t vrecpsd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecpsd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vrecpss_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpss_f32(__p0, __p1); - return __ret; -} -#else -__ai float32_t vrecpss_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpss_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vrecpxd_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecpxd_f64(__p0); - return __ret; -} -#else -__ai float64_t vrecpxd_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrecpxd_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vrecpxs_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpxs_f32(__p0); - return __ret; -} -#else -__ai float32_t vrecpxs_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrecpxs_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vrshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vrshld_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vrshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vrshld_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vrshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vrshld_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vrshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vrshld_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vrshrd_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vrshrd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vrshrd_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vrshrd_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vrshrd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vrshrd_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_u32(__p0_206, __p1_206, __p2_206) __extension__ ({ \ - uint16x4_t __s0_206 = __p0_206; \ - uint32x4_t __s1_206 = __p1_206; \ - uint16x8_t __ret_206; \ - __ret_206 = (uint16x8_t)(vcombine_u16((uint16x4_t)(__s0_206), (uint16x4_t)(vrshrn_n_u32(__s1_206, __p2_206)))); \ - __ret_206; \ -}) -#else -#define vrshrn_high_n_u32(__p0_207, __p1_207, __p2_207) __extension__ ({ \ - uint16x4_t __s0_207 = __p0_207; \ - uint32x4_t __s1_207 = __p1_207; \ - uint16x4_t __rev0_207; __rev0_207 = __builtin_shufflevector(__s0_207, __s0_207, 3, 2, 1, 0); \ - uint32x4_t __rev1_207; __rev1_207 = __builtin_shufflevector(__s1_207, __s1_207, 3, 2, 1, 0); \ - uint16x8_t __ret_207; \ - __ret_207 = (uint16x8_t)(__noswap_vcombine_u16((uint16x4_t)(__rev0_207), (uint16x4_t)(__noswap_vrshrn_n_u32(__rev1_207, __p2_207)))); \ - __ret_207 = __builtin_shufflevector(__ret_207, __ret_207, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_207; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_u64(__p0_208, __p1_208, __p2_208) __extension__ ({ \ - uint32x2_t __s0_208 = __p0_208; \ - uint64x2_t __s1_208 = __p1_208; \ - uint32x4_t __ret_208; \ - __ret_208 = (uint32x4_t)(vcombine_u32((uint32x2_t)(__s0_208), (uint32x2_t)(vrshrn_n_u64(__s1_208, __p2_208)))); \ - __ret_208; \ -}) -#else -#define vrshrn_high_n_u64(__p0_209, __p1_209, __p2_209) __extension__ ({ \ - uint32x2_t __s0_209 = __p0_209; \ - uint64x2_t __s1_209 = __p1_209; \ - uint32x2_t __rev0_209; __rev0_209 = __builtin_shufflevector(__s0_209, __s0_209, 1, 0); \ - uint64x2_t __rev1_209; __rev1_209 = __builtin_shufflevector(__s1_209, __s1_209, 1, 0); \ - uint32x4_t __ret_209; \ - __ret_209 = (uint32x4_t)(__noswap_vcombine_u32((uint32x2_t)(__rev0_209), (uint32x2_t)(__noswap_vrshrn_n_u64(__rev1_209, __p2_209)))); \ - __ret_209 = __builtin_shufflevector(__ret_209, __ret_209, 3, 2, 1, 0); \ - __ret_209; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_u16(__p0_210, __p1_210, __p2_210) __extension__ ({ \ - uint8x8_t __s0_210 = __p0_210; \ - uint16x8_t __s1_210 = __p1_210; \ - uint8x16_t __ret_210; \ - __ret_210 = (uint8x16_t)(vcombine_u8((uint8x8_t)(__s0_210), (uint8x8_t)(vrshrn_n_u16(__s1_210, __p2_210)))); \ - __ret_210; \ -}) -#else -#define vrshrn_high_n_u16(__p0_211, __p1_211, __p2_211) __extension__ ({ \ - uint8x8_t __s0_211 = __p0_211; \ - uint16x8_t __s1_211 = __p1_211; \ - uint8x8_t __rev0_211; __rev0_211 = __builtin_shufflevector(__s0_211, __s0_211, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1_211; __rev1_211 = __builtin_shufflevector(__s1_211, __s1_211, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_211; \ - __ret_211 = (uint8x16_t)(__noswap_vcombine_u8((uint8x8_t)(__rev0_211), (uint8x8_t)(__noswap_vrshrn_n_u16(__rev1_211, __p2_211)))); \ - __ret_211 = __builtin_shufflevector(__ret_211, __ret_211, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_211; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_s32(__p0_212, __p1_212, __p2_212) __extension__ ({ \ - int16x4_t __s0_212 = __p0_212; \ - int32x4_t __s1_212 = __p1_212; \ - int16x8_t __ret_212; \ - __ret_212 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_212), (int16x4_t)(vrshrn_n_s32(__s1_212, __p2_212)))); \ - __ret_212; \ -}) -#else -#define vrshrn_high_n_s32(__p0_213, __p1_213, __p2_213) __extension__ ({ \ - int16x4_t __s0_213 = __p0_213; \ - int32x4_t __s1_213 = __p1_213; \ - int16x4_t __rev0_213; __rev0_213 = __builtin_shufflevector(__s0_213, __s0_213, 3, 2, 1, 0); \ - int32x4_t __rev1_213; __rev1_213 = __builtin_shufflevector(__s1_213, __s1_213, 3, 2, 1, 0); \ - int16x8_t __ret_213; \ - __ret_213 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_213), (int16x4_t)(__noswap_vrshrn_n_s32(__rev1_213, __p2_213)))); \ - __ret_213 = __builtin_shufflevector(__ret_213, __ret_213, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_213; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_s64(__p0_214, __p1_214, __p2_214) __extension__ ({ \ - int32x2_t __s0_214 = __p0_214; \ - int64x2_t __s1_214 = __p1_214; \ - int32x4_t __ret_214; \ - __ret_214 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_214), (int32x2_t)(vrshrn_n_s64(__s1_214, __p2_214)))); \ - __ret_214; \ -}) -#else -#define vrshrn_high_n_s64(__p0_215, __p1_215, __p2_215) __extension__ ({ \ - int32x2_t __s0_215 = __p0_215; \ - int64x2_t __s1_215 = __p1_215; \ - int32x2_t __rev0_215; __rev0_215 = __builtin_shufflevector(__s0_215, __s0_215, 1, 0); \ - int64x2_t __rev1_215; __rev1_215 = __builtin_shufflevector(__s1_215, __s1_215, 1, 0); \ - int32x4_t __ret_215; \ - __ret_215 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_215), (int32x2_t)(__noswap_vrshrn_n_s64(__rev1_215, __p2_215)))); \ - __ret_215 = __builtin_shufflevector(__ret_215, __ret_215, 3, 2, 1, 0); \ - __ret_215; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrshrn_high_n_s16(__p0_216, __p1_216, __p2_216) __extension__ ({ \ - int8x8_t __s0_216 = __p0_216; \ - int16x8_t __s1_216 = __p1_216; \ - int8x16_t __ret_216; \ - __ret_216 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_216), (int8x8_t)(vrshrn_n_s16(__s1_216, __p2_216)))); \ - __ret_216; \ -}) -#else -#define vrshrn_high_n_s16(__p0_217, __p1_217, __p2_217) __extension__ ({ \ - int8x8_t __s0_217 = __p0_217; \ - int16x8_t __s1_217 = __p1_217; \ - int8x8_t __rev0_217; __rev0_217 = __builtin_shufflevector(__s0_217, __s0_217, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_217; __rev1_217 = __builtin_shufflevector(__s1_217, __s1_217, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_217; \ - __ret_217 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_217), (int8x8_t)(__noswap_vrshrn_n_s16(__rev1_217, __p2_217)))); \ - __ret_217 = __builtin_shufflevector(__ret_217, __ret_217, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_217; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrsqrteq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrsqrteq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vrsqrteq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrsqrteq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrsqrte_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrsqrte_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vrsqrte_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrsqrte_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vrsqrted_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrsqrted_f64(__p0); - return __ret; -} -#else -__ai float64_t vrsqrted_f64(float64_t __p0) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrsqrted_f64(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vrsqrtes_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrsqrtes_f32(__p0); - return __ret; -} -#else -__ai float32_t vrsqrtes_f32(float32_t __p0) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrsqrtes_f32(__p0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vrsqrtsq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrsqrtsq_v((int8x16_t)__p0, (int8x16_t)__p1, 42); - return __ret; -} -#else -__ai float64x2_t vrsqrtsq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vrsqrtsq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vrsqrts_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrsqrts_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#else -__ai float64x1_t vrsqrts_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vrsqrts_v((int8x8_t)__p0, (int8x8_t)__p1, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64_t vrsqrtsd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrsqrtsd_f64(__p0, __p1); - return __ret; -} -#else -__ai float64_t vrsqrtsd_f64(float64_t __p0, float64_t __p1) { - float64_t __ret; - __ret = (float64_t) __builtin_neon_vrsqrtsd_f64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32_t vrsqrtss_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrsqrtss_f32(__p0, __p1); - return __ret; -} -#else -__ai float32_t vrsqrtss_f32(float32_t __p0, float32_t __p1) { - float32_t __ret; - __ret = (float32_t) __builtin_neon_vrsqrtss_f32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsrad_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vrsrad_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vrsrad_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vrsrad_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vrsrad_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vrsrad_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vrsrad_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vrsrad_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vrsubhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vrsubhn_u32(__p1, __p2)); - return __ret; -} -#else -__ai uint16x8_t vrsubhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vrsubhn_u32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vrsubhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vrsubhn_u64(__p1, __p2)); - return __ret; -} -#else -__ai uint32x4_t vrsubhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vrsubhn_u64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vrsubhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vrsubhn_u16(__p1, __p2)); - return __ret; -} -#else -__ai uint8x16_t vrsubhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vrsubhn_u16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vrsubhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vrsubhn_s32(__p1, __p2)); - return __ret; -} -#else -__ai int16x8_t vrsubhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vrsubhn_s32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vrsubhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vrsubhn_s64(__p1, __p2)); - return __ret; -} -#else -__ai int32x4_t vrsubhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vrsubhn_s64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vrsubhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vrsubhn_s16(__p1, __p2)); - return __ret; -} -#else -__ai int8x16_t vrsubhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vrsubhn_s16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#define __noswap_vset_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vset_lane_i64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsetq_lane_i64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vsetq_lane_f64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vsetq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vsetq_lane_f64(__s0, (int8x16_t)__rev1, __p2); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#define __noswap_vsetq_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x2_t __s1 = __p1; \ - float64x2_t __ret; \ - __ret = (float64x2_t) __builtin_neon_vsetq_lane_f64(__s0, (int8x16_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vset_lane_f64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#else -#define vset_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vset_lane_f64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#define __noswap_vset_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64_t __s0 = __p0; \ - float64x1_t __s1 = __p1; \ - float64x1_t __ret; \ - __ret = (float64x1_t) __builtin_neon_vset_lane_f64(__s0, (int8x8_t)__s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vshld_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vshld_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vshld_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vshld_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vshld_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vshld_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshld_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vshld_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vshld_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vshld_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshld_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vshld_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vshld_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vshld_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_u8(__p0_218, __p1_218) __extension__ ({ \ - uint8x16_t __s0_218 = __p0_218; \ - uint16x8_t __ret_218; \ - __ret_218 = (uint16x8_t)(vshll_n_u8(vget_high_u8(__s0_218), __p1_218)); \ - __ret_218; \ -}) -#else -#define vshll_high_n_u8(__p0_219, __p1_219) __extension__ ({ \ - uint8x16_t __s0_219 = __p0_219; \ - uint8x16_t __rev0_219; __rev0_219 = __builtin_shufflevector(__s0_219, __s0_219, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __ret_219; \ - __ret_219 = (uint16x8_t)(__noswap_vshll_n_u8(__noswap_vget_high_u8(__rev0_219), __p1_219)); \ - __ret_219 = __builtin_shufflevector(__ret_219, __ret_219, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_219; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_u32(__p0_220, __p1_220) __extension__ ({ \ - uint32x4_t __s0_220 = __p0_220; \ - uint64x2_t __ret_220; \ - __ret_220 = (uint64x2_t)(vshll_n_u32(vget_high_u32(__s0_220), __p1_220)); \ - __ret_220; \ -}) -#else -#define vshll_high_n_u32(__p0_221, __p1_221) __extension__ ({ \ - uint32x4_t __s0_221 = __p0_221; \ - uint32x4_t __rev0_221; __rev0_221 = __builtin_shufflevector(__s0_221, __s0_221, 3, 2, 1, 0); \ - uint64x2_t __ret_221; \ - __ret_221 = (uint64x2_t)(__noswap_vshll_n_u32(__noswap_vget_high_u32(__rev0_221), __p1_221)); \ - __ret_221 = __builtin_shufflevector(__ret_221, __ret_221, 1, 0); \ - __ret_221; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_u16(__p0_222, __p1_222) __extension__ ({ \ - uint16x8_t __s0_222 = __p0_222; \ - uint32x4_t __ret_222; \ - __ret_222 = (uint32x4_t)(vshll_n_u16(vget_high_u16(__s0_222), __p1_222)); \ - __ret_222; \ -}) -#else -#define vshll_high_n_u16(__p0_223, __p1_223) __extension__ ({ \ - uint16x8_t __s0_223 = __p0_223; \ - uint16x8_t __rev0_223; __rev0_223 = __builtin_shufflevector(__s0_223, __s0_223, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint32x4_t __ret_223; \ - __ret_223 = (uint32x4_t)(__noswap_vshll_n_u16(__noswap_vget_high_u16(__rev0_223), __p1_223)); \ - __ret_223 = __builtin_shufflevector(__ret_223, __ret_223, 3, 2, 1, 0); \ - __ret_223; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_s8(__p0_224, __p1_224) __extension__ ({ \ - int8x16_t __s0_224 = __p0_224; \ - int16x8_t __ret_224; \ - __ret_224 = (int16x8_t)(vshll_n_s8(vget_high_s8(__s0_224), __p1_224)); \ - __ret_224; \ -}) -#else -#define vshll_high_n_s8(__p0_225, __p1_225) __extension__ ({ \ - int8x16_t __s0_225 = __p0_225; \ - int8x16_t __rev0_225; __rev0_225 = __builtin_shufflevector(__s0_225, __s0_225, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __ret_225; \ - __ret_225 = (int16x8_t)(__noswap_vshll_n_s8(__noswap_vget_high_s8(__rev0_225), __p1_225)); \ - __ret_225 = __builtin_shufflevector(__ret_225, __ret_225, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_225; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_s32(__p0_226, __p1_226) __extension__ ({ \ - int32x4_t __s0_226 = __p0_226; \ - int64x2_t __ret_226; \ - __ret_226 = (int64x2_t)(vshll_n_s32(vget_high_s32(__s0_226), __p1_226)); \ - __ret_226; \ -}) -#else -#define vshll_high_n_s32(__p0_227, __p1_227) __extension__ ({ \ - int32x4_t __s0_227 = __p0_227; \ - int32x4_t __rev0_227; __rev0_227 = __builtin_shufflevector(__s0_227, __s0_227, 3, 2, 1, 0); \ - int64x2_t __ret_227; \ - __ret_227 = (int64x2_t)(__noswap_vshll_n_s32(__noswap_vget_high_s32(__rev0_227), __p1_227)); \ - __ret_227 = __builtin_shufflevector(__ret_227, __ret_227, 1, 0); \ - __ret_227; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshll_high_n_s16(__p0_228, __p1_228) __extension__ ({ \ - int16x8_t __s0_228 = __p0_228; \ - int32x4_t __ret_228; \ - __ret_228 = (int32x4_t)(vshll_n_s16(vget_high_s16(__s0_228), __p1_228)); \ - __ret_228; \ -}) -#else -#define vshll_high_n_s16(__p0_229, __p1_229) __extension__ ({ \ - int16x8_t __s0_229 = __p0_229; \ - int16x8_t __rev0_229; __rev0_229 = __builtin_shufflevector(__s0_229, __s0_229, 7, 6, 5, 4, 3, 2, 1, 0); \ - int32x4_t __ret_229; \ - __ret_229 = (int32x4_t)(__noswap_vshll_n_s16(__noswap_vget_high_s16(__rev0_229), __p1_229)); \ - __ret_229 = __builtin_shufflevector(__ret_229, __ret_229, 3, 2, 1, 0); \ - __ret_229; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vshrd_n_u64(__s0, __p1); \ - __ret; \ -}) -#else -#define vshrd_n_u64(__p0, __p1) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vshrd_n_u64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vshrd_n_s64(__s0, __p1); \ - __ret; \ -}) -#else -#define vshrd_n_s64(__p0, __p1) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vshrd_n_s64(__s0, __p1); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_u32(__p0_230, __p1_230, __p2_230) __extension__ ({ \ - uint16x4_t __s0_230 = __p0_230; \ - uint32x4_t __s1_230 = __p1_230; \ - uint16x8_t __ret_230; \ - __ret_230 = (uint16x8_t)(vcombine_u16((uint16x4_t)(__s0_230), (uint16x4_t)(vshrn_n_u32(__s1_230, __p2_230)))); \ - __ret_230; \ -}) -#else -#define vshrn_high_n_u32(__p0_231, __p1_231, __p2_231) __extension__ ({ \ - uint16x4_t __s0_231 = __p0_231; \ - uint32x4_t __s1_231 = __p1_231; \ - uint16x4_t __rev0_231; __rev0_231 = __builtin_shufflevector(__s0_231, __s0_231, 3, 2, 1, 0); \ - uint32x4_t __rev1_231; __rev1_231 = __builtin_shufflevector(__s1_231, __s1_231, 3, 2, 1, 0); \ - uint16x8_t __ret_231; \ - __ret_231 = (uint16x8_t)(__noswap_vcombine_u16((uint16x4_t)(__rev0_231), (uint16x4_t)(__noswap_vshrn_n_u32(__rev1_231, __p2_231)))); \ - __ret_231 = __builtin_shufflevector(__ret_231, __ret_231, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_231; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_u64(__p0_232, __p1_232, __p2_232) __extension__ ({ \ - uint32x2_t __s0_232 = __p0_232; \ - uint64x2_t __s1_232 = __p1_232; \ - uint32x4_t __ret_232; \ - __ret_232 = (uint32x4_t)(vcombine_u32((uint32x2_t)(__s0_232), (uint32x2_t)(vshrn_n_u64(__s1_232, __p2_232)))); \ - __ret_232; \ -}) -#else -#define vshrn_high_n_u64(__p0_233, __p1_233, __p2_233) __extension__ ({ \ - uint32x2_t __s0_233 = __p0_233; \ - uint64x2_t __s1_233 = __p1_233; \ - uint32x2_t __rev0_233; __rev0_233 = __builtin_shufflevector(__s0_233, __s0_233, 1, 0); \ - uint64x2_t __rev1_233; __rev1_233 = __builtin_shufflevector(__s1_233, __s1_233, 1, 0); \ - uint32x4_t __ret_233; \ - __ret_233 = (uint32x4_t)(__noswap_vcombine_u32((uint32x2_t)(__rev0_233), (uint32x2_t)(__noswap_vshrn_n_u64(__rev1_233, __p2_233)))); \ - __ret_233 = __builtin_shufflevector(__ret_233, __ret_233, 3, 2, 1, 0); \ - __ret_233; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_u16(__p0_234, __p1_234, __p2_234) __extension__ ({ \ - uint8x8_t __s0_234 = __p0_234; \ - uint16x8_t __s1_234 = __p1_234; \ - uint8x16_t __ret_234; \ - __ret_234 = (uint8x16_t)(vcombine_u8((uint8x8_t)(__s0_234), (uint8x8_t)(vshrn_n_u16(__s1_234, __p2_234)))); \ - __ret_234; \ -}) -#else -#define vshrn_high_n_u16(__p0_235, __p1_235, __p2_235) __extension__ ({ \ - uint8x8_t __s0_235 = __p0_235; \ - uint16x8_t __s1_235 = __p1_235; \ - uint8x8_t __rev0_235; __rev0_235 = __builtin_shufflevector(__s0_235, __s0_235, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint16x8_t __rev1_235; __rev1_235 = __builtin_shufflevector(__s1_235, __s1_235, 7, 6, 5, 4, 3, 2, 1, 0); \ - uint8x16_t __ret_235; \ - __ret_235 = (uint8x16_t)(__noswap_vcombine_u8((uint8x8_t)(__rev0_235), (uint8x8_t)(__noswap_vshrn_n_u16(__rev1_235, __p2_235)))); \ - __ret_235 = __builtin_shufflevector(__ret_235, __ret_235, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_235; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_s32(__p0_236, __p1_236, __p2_236) __extension__ ({ \ - int16x4_t __s0_236 = __p0_236; \ - int32x4_t __s1_236 = __p1_236; \ - int16x8_t __ret_236; \ - __ret_236 = (int16x8_t)(vcombine_s16((int16x4_t)(__s0_236), (int16x4_t)(vshrn_n_s32(__s1_236, __p2_236)))); \ - __ret_236; \ -}) -#else -#define vshrn_high_n_s32(__p0_237, __p1_237, __p2_237) __extension__ ({ \ - int16x4_t __s0_237 = __p0_237; \ - int32x4_t __s1_237 = __p1_237; \ - int16x4_t __rev0_237; __rev0_237 = __builtin_shufflevector(__s0_237, __s0_237, 3, 2, 1, 0); \ - int32x4_t __rev1_237; __rev1_237 = __builtin_shufflevector(__s1_237, __s1_237, 3, 2, 1, 0); \ - int16x8_t __ret_237; \ - __ret_237 = (int16x8_t)(__noswap_vcombine_s16((int16x4_t)(__rev0_237), (int16x4_t)(__noswap_vshrn_n_s32(__rev1_237, __p2_237)))); \ - __ret_237 = __builtin_shufflevector(__ret_237, __ret_237, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_237; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_s64(__p0_238, __p1_238, __p2_238) __extension__ ({ \ - int32x2_t __s0_238 = __p0_238; \ - int64x2_t __s1_238 = __p1_238; \ - int32x4_t __ret_238; \ - __ret_238 = (int32x4_t)(vcombine_s32((int32x2_t)(__s0_238), (int32x2_t)(vshrn_n_s64(__s1_238, __p2_238)))); \ - __ret_238; \ -}) -#else -#define vshrn_high_n_s64(__p0_239, __p1_239, __p2_239) __extension__ ({ \ - int32x2_t __s0_239 = __p0_239; \ - int64x2_t __s1_239 = __p1_239; \ - int32x2_t __rev0_239; __rev0_239 = __builtin_shufflevector(__s0_239, __s0_239, 1, 0); \ - int64x2_t __rev1_239; __rev1_239 = __builtin_shufflevector(__s1_239, __s1_239, 1, 0); \ - int32x4_t __ret_239; \ - __ret_239 = (int32x4_t)(__noswap_vcombine_s32((int32x2_t)(__rev0_239), (int32x2_t)(__noswap_vshrn_n_s64(__rev1_239, __p2_239)))); \ - __ret_239 = __builtin_shufflevector(__ret_239, __ret_239, 3, 2, 1, 0); \ - __ret_239; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vshrn_high_n_s16(__p0_240, __p1_240, __p2_240) __extension__ ({ \ - int8x8_t __s0_240 = __p0_240; \ - int16x8_t __s1_240 = __p1_240; \ - int8x16_t __ret_240; \ - __ret_240 = (int8x16_t)(vcombine_s8((int8x8_t)(__s0_240), (int8x8_t)(vshrn_n_s16(__s1_240, __p2_240)))); \ - __ret_240; \ -}) -#else -#define vshrn_high_n_s16(__p0_241, __p1_241, __p2_241) __extension__ ({ \ - int8x8_t __s0_241 = __p0_241; \ - int16x8_t __s1_241 = __p1_241; \ - int8x8_t __rev0_241; __rev0_241 = __builtin_shufflevector(__s0_241, __s0_241, 7, 6, 5, 4, 3, 2, 1, 0); \ - int16x8_t __rev1_241; __rev1_241 = __builtin_shufflevector(__s1_241, __s1_241, 7, 6, 5, 4, 3, 2, 1, 0); \ - int8x16_t __ret_241; \ - __ret_241 = (int8x16_t)(__noswap_vcombine_s8((int8x8_t)(__rev0_241), (int8x8_t)(__noswap_vshrn_n_s16(__rev1_241, __p2_241)))); \ - __ret_241 = __builtin_shufflevector(__ret_241, __ret_241, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_241; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vslid_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vslid_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vslid_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vslid_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vslid_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vslid_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vslid_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vslid_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsli_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#else -#define vsli_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vsli_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsliq_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 38); \ - __ret; \ -}) -#else -#define vsliq_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsliq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8_t vsqaddb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vsqaddb_u8(__p0, __p1); - return __ret; -} -#else -__ai uint8_t vsqaddb_u8(uint8_t __p0, uint8_t __p1) { - uint8_t __ret; - __ret = (uint8_t) __builtin_neon_vsqaddb_u8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32_t vsqadds_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vsqadds_u32(__p0, __p1); - return __ret; -} -#else -__ai uint32_t vsqadds_u32(uint32_t __p0, uint32_t __p1) { - uint32_t __ret; - __ret = (uint32_t) __builtin_neon_vsqadds_u32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vsqaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vsqaddd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vsqaddd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vsqaddd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16_t vsqaddh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vsqaddh_u16(__p0, __p1); - return __ret; -} -#else -__ai uint16_t vsqaddh_u16(uint16_t __p0, uint16_t __p1) { - uint16_t __ret; - __ret = (uint16_t) __builtin_neon_vsqaddh_u16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vsqaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vsqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 48); - return __ret; -} -#else -__ai uint8x16_t vsqaddq_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = (uint8x16_t) __builtin_neon_vsqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 48); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsqaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 50); - return __ret; -} -#else -__ai uint32x4_t vsqaddq_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t) __builtin_neon_vsqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 50); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsqaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vsqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vsqaddq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vsqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsqaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vsqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 49); - return __ret; -} -#else -__ai uint16x8_t vsqaddq_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t) __builtin_neon_vsqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 49); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vsqadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vsqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 16); - return __ret; -} -#else -__ai uint8x8_t vsqadd_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = (uint8x8_t) __builtin_neon_vsqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 16); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vsqadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vsqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 18); - return __ret; -} -#else -__ai uint32x2_t vsqadd_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = (uint32x2_t) __builtin_neon_vsqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 18); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vsqadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vsqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vsqadd_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vsqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vsqadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vsqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 17); - return __ret; -} -#else -__ai uint16x4_t vsqadd_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = (uint16x4_t) __builtin_neon_vsqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 17); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vsqrtq_f64(float64x2_t __p0) { - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vsqrtq_v((int8x16_t)__p0, 42); - return __ret; -} -#else -__ai float64x2_t vsqrtq_f64(float64x2_t __p0) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __ret; - __ret = (float64x2_t) __builtin_neon_vsqrtq_v((int8x16_t)__rev0, 42); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vsqrtq_f32(float32x4_t __p0) { - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vsqrtq_v((int8x16_t)__p0, 41); - return __ret; -} -#else -__ai float32x4_t vsqrtq_f32(float32x4_t __p0) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __ret; - __ret = (float32x4_t) __builtin_neon_vsqrtq_v((int8x16_t)__rev0, 41); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vsqrt_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vsqrt_v((int8x8_t)__p0, 10); - return __ret; -} -#else -__ai float64x1_t vsqrt_f64(float64x1_t __p0) { - float64x1_t __ret; - __ret = (float64x1_t) __builtin_neon_vsqrt_v((int8x8_t)__p0, 10); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vsqrt_f32(float32x2_t __p0) { - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vsqrt_v((int8x8_t)__p0, 9); - return __ret; -} -#else -__ai float32x2_t vsqrt_f32(float32x2_t __p0) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __ret; - __ret = (float32x2_t) __builtin_neon_vsqrt_v((int8x8_t)__rev0, 9); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsrad_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vsrad_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vsrad_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vsrad_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsrad_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vsrad_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vsrad_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vsrad_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsrid_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vsrid_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vsrid_n_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64_t __s0 = __p0; \ - uint64_t __s1 = __p1; \ - uint64_t __ret; \ - __ret = (uint64_t) __builtin_neon_vsrid_n_u64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsrid_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vsrid_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#else -#define vsrid_n_s64(__p0, __p1, __p2) __extension__ ({ \ - int64_t __s0 = __p0; \ - int64_t __s1 = __p1; \ - int64_t __ret; \ - __ret = (int64_t) __builtin_neon_vsrid_n_s64(__s0, __s1, __p2); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsri_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#else -#define vsri_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s0 = __p0; \ - poly64x1_t __s1 = __p1; \ - poly64x1_t __ret; \ - __ret = (poly64x1_t) __builtin_neon_vsri_n_v((int8x8_t)__s0, (int8x8_t)__s1, __p2, 6); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsriq_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 38); \ - __ret; \ -}) -#else -#define vsriq_n_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s0 = __p0; \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - poly64x2_t __ret; \ - __ret = (poly64x2_t) __builtin_neon_vsriq_n_v((int8x16_t)__rev0, (int8x16_t)__rev1, __p2, 38); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 6); \ -}) -#else -#define vst1_p64(__p0, __p1) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 38); \ -}) -#else -#define vst1q_p64(__p0, __p1) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__s1, 42); \ -}) -#else -#define vst1q_f64(__p0, __p1) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_v(__p0, (int8x16_t)__rev1, 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 10); \ -}) -#else -#define vst1_f64(__p0, __p1) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - __builtin_neon_vst1_v(__p0, (int8x8_t)__s1, 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 6); \ -}) -#else -#define vst1_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 38); \ -}) -#else -#define vst1q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2_t __s1 = __p1; \ - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__s1, __p2, 42); \ -}) -#else -#define vst1q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2_t __s1 = __p1; \ - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - __builtin_neon_vst1q_lane_v(__p0, (int8x16_t)__rev1, __p2, 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 10); \ -}) -#else -#define vst1_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1_t __s1 = __p1; \ - __builtin_neon_vst1_lane_v(__p0, (int8x8_t)__s1, __p2, 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p8_x2(__p0, __p1) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 4); \ -}) -#else -#define vst1_p8_x2(__p0, __p1) __extension__ ({ \ - poly8x8x2_t __s1 = __p1; \ - poly8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p64_x2(__p0, __p1) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 6); \ -}) -#else -#define vst1_p64_x2(__p0, __p1) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p16_x2(__p0, __p1) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 5); \ -}) -#else -#define vst1_p16_x2(__p0, __p1) __extension__ ({ \ - poly16x4x2_t __s1 = __p1; \ - poly16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p8_x2(__p0, __p1) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 36); \ -}) -#else -#define vst1q_p8_x2(__p0, __p1) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - poly8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p64_x2(__p0, __p1) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 38); \ -}) -#else -#define vst1q_p64_x2(__p0, __p1) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - poly64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p16_x2(__p0, __p1) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 37); \ -}) -#else -#define vst1q_p16_x2(__p0, __p1) __extension__ ({ \ - poly16x8x2_t __s1 = __p1; \ - poly16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u8_x2(__p0, __p1) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 48); \ -}) -#else -#define vst1q_u8_x2(__p0, __p1) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - uint8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u32_x2(__p0, __p1) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 50); \ -}) -#else -#define vst1q_u32_x2(__p0, __p1) __extension__ ({ \ - uint32x4x2_t __s1 = __p1; \ - uint32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u64_x2(__p0, __p1) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 51); \ -}) -#else -#define vst1q_u64_x2(__p0, __p1) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - uint64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u16_x2(__p0, __p1) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 49); \ -}) -#else -#define vst1q_u16_x2(__p0, __p1) __extension__ ({ \ - uint16x8x2_t __s1 = __p1; \ - uint16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s8_x2(__p0, __p1) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 32); \ -}) -#else -#define vst1q_s8_x2(__p0, __p1) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - int8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f64_x2(__p0, __p1) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 42); \ -}) -#else -#define vst1q_f64_x2(__p0, __p1) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - float64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f32_x2(__p0, __p1) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 41); \ -}) -#else -#define vst1q_f32_x2(__p0, __p1) __extension__ ({ \ - float32x4x2_t __s1 = __p1; \ - float32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f16_x2(__p0, __p1) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 40); \ -}) -#else -#define vst1q_f16_x2(__p0, __p1) __extension__ ({ \ - float16x8x2_t __s1 = __p1; \ - float16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s32_x2(__p0, __p1) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 34); \ -}) -#else -#define vst1q_s32_x2(__p0, __p1) __extension__ ({ \ - int32x4x2_t __s1 = __p1; \ - int32x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s64_x2(__p0, __p1) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 35); \ -}) -#else -#define vst1q_s64_x2(__p0, __p1) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - int64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s16_x2(__p0, __p1) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - __builtin_neon_vst1q_x2_v(__p0, __s1.val[0], __s1.val[1], 33); \ -}) -#else -#define vst1q_s16_x2(__p0, __p1) __extension__ ({ \ - int16x8x2_t __s1 = __p1; \ - int16x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x2_v(__p0, __rev1.val[0], __rev1.val[1], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u8_x2(__p0, __p1) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 16); \ -}) -#else -#define vst1_u8_x2(__p0, __p1) __extension__ ({ \ - uint8x8x2_t __s1 = __p1; \ - uint8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u32_x2(__p0, __p1) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 18); \ -}) -#else -#define vst1_u32_x2(__p0, __p1) __extension__ ({ \ - uint32x2x2_t __s1 = __p1; \ - uint32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u64_x2(__p0, __p1) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 19); \ -}) -#else -#define vst1_u64_x2(__p0, __p1) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u16_x2(__p0, __p1) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 17); \ -}) -#else -#define vst1_u16_x2(__p0, __p1) __extension__ ({ \ - uint16x4x2_t __s1 = __p1; \ - uint16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s8_x2(__p0, __p1) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 0); \ -}) -#else -#define vst1_s8_x2(__p0, __p1) __extension__ ({ \ - int8x8x2_t __s1 = __p1; \ - int8x8x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f64_x2(__p0, __p1) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 10); \ -}) -#else -#define vst1_f64_x2(__p0, __p1) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f32_x2(__p0, __p1) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 9); \ -}) -#else -#define vst1_f32_x2(__p0, __p1) __extension__ ({ \ - float32x2x2_t __s1 = __p1; \ - float32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, __rev1.val[0], __rev1.val[1], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f16_x2(__p0, __p1) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 8); \ -}) -#else -#define vst1_f16_x2(__p0, __p1) __extension__ ({ \ - float16x4x2_t __s1 = __p1; \ - float16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, __rev1.val[0], __rev1.val[1], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s32_x2(__p0, __p1) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 2); \ -}) -#else -#define vst1_s32_x2(__p0, __p1) __extension__ ({ \ - int32x2x2_t __s1 = __p1; \ - int32x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, __rev1.val[0], __rev1.val[1], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s64_x2(__p0, __p1) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 3); \ -}) -#else -#define vst1_s64_x2(__p0, __p1) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s16_x2(__p0, __p1) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - __builtin_neon_vst1_x2_v(__p0, __s1.val[0], __s1.val[1], 1); \ -}) -#else -#define vst1_s16_x2(__p0, __p1) __extension__ ({ \ - int16x4x2_t __s1 = __p1; \ - int16x4x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __builtin_neon_vst1_x2_v(__p0, __rev1.val[0], __rev1.val[1], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p8_x3(__p0, __p1) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 4); \ -}) -#else -#define vst1_p8_x3(__p0, __p1) __extension__ ({ \ - poly8x8x3_t __s1 = __p1; \ - poly8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p64_x3(__p0, __p1) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 6); \ -}) -#else -#define vst1_p64_x3(__p0, __p1) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p16_x3(__p0, __p1) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 5); \ -}) -#else -#define vst1_p16_x3(__p0, __p1) __extension__ ({ \ - poly16x4x3_t __s1 = __p1; \ - poly16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p8_x3(__p0, __p1) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 36); \ -}) -#else -#define vst1q_p8_x3(__p0, __p1) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - poly8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p64_x3(__p0, __p1) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 38); \ -}) -#else -#define vst1q_p64_x3(__p0, __p1) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - poly64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p16_x3(__p0, __p1) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 37); \ -}) -#else -#define vst1q_p16_x3(__p0, __p1) __extension__ ({ \ - poly16x8x3_t __s1 = __p1; \ - poly16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u8_x3(__p0, __p1) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 48); \ -}) -#else -#define vst1q_u8_x3(__p0, __p1) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - uint8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u32_x3(__p0, __p1) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 50); \ -}) -#else -#define vst1q_u32_x3(__p0, __p1) __extension__ ({ \ - uint32x4x3_t __s1 = __p1; \ - uint32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u64_x3(__p0, __p1) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 51); \ -}) -#else -#define vst1q_u64_x3(__p0, __p1) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - uint64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u16_x3(__p0, __p1) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 49); \ -}) -#else -#define vst1q_u16_x3(__p0, __p1) __extension__ ({ \ - uint16x8x3_t __s1 = __p1; \ - uint16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s8_x3(__p0, __p1) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 32); \ -}) -#else -#define vst1q_s8_x3(__p0, __p1) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - int8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f64_x3(__p0, __p1) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 42); \ -}) -#else -#define vst1q_f64_x3(__p0, __p1) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - float64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f32_x3(__p0, __p1) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 41); \ -}) -#else -#define vst1q_f32_x3(__p0, __p1) __extension__ ({ \ - float32x4x3_t __s1 = __p1; \ - float32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f16_x3(__p0, __p1) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 40); \ -}) -#else -#define vst1q_f16_x3(__p0, __p1) __extension__ ({ \ - float16x8x3_t __s1 = __p1; \ - float16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s32_x3(__p0, __p1) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 34); \ -}) -#else -#define vst1q_s32_x3(__p0, __p1) __extension__ ({ \ - int32x4x3_t __s1 = __p1; \ - int32x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s64_x3(__p0, __p1) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 35); \ -}) -#else -#define vst1q_s64_x3(__p0, __p1) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - int64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s16_x3(__p0, __p1) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - __builtin_neon_vst1q_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 33); \ -}) -#else -#define vst1q_s16_x3(__p0, __p1) __extension__ ({ \ - int16x8x3_t __s1 = __p1; \ - int16x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u8_x3(__p0, __p1) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 16); \ -}) -#else -#define vst1_u8_x3(__p0, __p1) __extension__ ({ \ - uint8x8x3_t __s1 = __p1; \ - uint8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u32_x3(__p0, __p1) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 18); \ -}) -#else -#define vst1_u32_x3(__p0, __p1) __extension__ ({ \ - uint32x2x3_t __s1 = __p1; \ - uint32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u64_x3(__p0, __p1) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 19); \ -}) -#else -#define vst1_u64_x3(__p0, __p1) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u16_x3(__p0, __p1) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 17); \ -}) -#else -#define vst1_u16_x3(__p0, __p1) __extension__ ({ \ - uint16x4x3_t __s1 = __p1; \ - uint16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s8_x3(__p0, __p1) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 0); \ -}) -#else -#define vst1_s8_x3(__p0, __p1) __extension__ ({ \ - int8x8x3_t __s1 = __p1; \ - int8x8x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f64_x3(__p0, __p1) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 10); \ -}) -#else -#define vst1_f64_x3(__p0, __p1) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f32_x3(__p0, __p1) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 9); \ -}) -#else -#define vst1_f32_x3(__p0, __p1) __extension__ ({ \ - float32x2x3_t __s1 = __p1; \ - float32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f16_x3(__p0, __p1) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 8); \ -}) -#else -#define vst1_f16_x3(__p0, __p1) __extension__ ({ \ - float16x4x3_t __s1 = __p1; \ - float16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s32_x3(__p0, __p1) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 2); \ -}) -#else -#define vst1_s32_x3(__p0, __p1) __extension__ ({ \ - int32x2x3_t __s1 = __p1; \ - int32x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s64_x3(__p0, __p1) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 3); \ -}) -#else -#define vst1_s64_x3(__p0, __p1) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s16_x3(__p0, __p1) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - __builtin_neon_vst1_x3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 1); \ -}) -#else -#define vst1_s16_x3(__p0, __p1) __extension__ ({ \ - int16x4x3_t __s1 = __p1; \ - int16x4x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __builtin_neon_vst1_x3_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p8_x4(__p0, __p1) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 4); \ -}) -#else -#define vst1_p8_x4(__p0, __p1) __extension__ ({ \ - poly8x8x4_t __s1 = __p1; \ - poly8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 4); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p64_x4(__p0, __p1) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 6); \ -}) -#else -#define vst1_p64_x4(__p0, __p1) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_p16_x4(__p0, __p1) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 5); \ -}) -#else -#define vst1_p16_x4(__p0, __p1) __extension__ ({ \ - poly16x4x4_t __s1 = __p1; \ - poly16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 5); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p8_x4(__p0, __p1) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 36); \ -}) -#else -#define vst1q_p8_x4(__p0, __p1) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - poly8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p64_x4(__p0, __p1) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 38); \ -}) -#else -#define vst1q_p64_x4(__p0, __p1) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - poly64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_p16_x4(__p0, __p1) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 37); \ -}) -#else -#define vst1q_p16_x4(__p0, __p1) __extension__ ({ \ - poly16x8x4_t __s1 = __p1; \ - poly16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 37); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u8_x4(__p0, __p1) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 48); \ -}) -#else -#define vst1q_u8_x4(__p0, __p1) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - uint8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u32_x4(__p0, __p1) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 50); \ -}) -#else -#define vst1q_u32_x4(__p0, __p1) __extension__ ({ \ - uint32x4x4_t __s1 = __p1; \ - uint32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 50); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u64_x4(__p0, __p1) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 51); \ -}) -#else -#define vst1q_u64_x4(__p0, __p1) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - uint64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_u16_x4(__p0, __p1) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 49); \ -}) -#else -#define vst1q_u16_x4(__p0, __p1) __extension__ ({ \ - uint16x8x4_t __s1 = __p1; \ - uint16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 49); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s8_x4(__p0, __p1) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 32); \ -}) -#else -#define vst1q_s8_x4(__p0, __p1) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - int8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f64_x4(__p0, __p1) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 42); \ -}) -#else -#define vst1q_f64_x4(__p0, __p1) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - float64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f32_x4(__p0, __p1) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 41); \ -}) -#else -#define vst1q_f32_x4(__p0, __p1) __extension__ ({ \ - float32x4x4_t __s1 = __p1; \ - float32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 41); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_f16_x4(__p0, __p1) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 40); \ -}) -#else -#define vst1q_f16_x4(__p0, __p1) __extension__ ({ \ - float16x8x4_t __s1 = __p1; \ - float16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 40); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s32_x4(__p0, __p1) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 34); \ -}) -#else -#define vst1q_s32_x4(__p0, __p1) __extension__ ({ \ - int32x4x4_t __s1 = __p1; \ - int32x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 34); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s64_x4(__p0, __p1) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 35); \ -}) -#else -#define vst1q_s64_x4(__p0, __p1) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - int64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1q_s16_x4(__p0, __p1) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - __builtin_neon_vst1q_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 33); \ -}) -#else -#define vst1q_s16_x4(__p0, __p1) __extension__ ({ \ - int16x8x4_t __s1 = __p1; \ - int16x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1q_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 33); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u8_x4(__p0, __p1) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 16); \ -}) -#else -#define vst1_u8_x4(__p0, __p1) __extension__ ({ \ - uint8x8x4_t __s1 = __p1; \ - uint8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 16); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u32_x4(__p0, __p1) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 18); \ -}) -#else -#define vst1_u32_x4(__p0, __p1) __extension__ ({ \ - uint32x2x4_t __s1 = __p1; \ - uint32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 18); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u64_x4(__p0, __p1) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 19); \ -}) -#else -#define vst1_u64_x4(__p0, __p1) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_u16_x4(__p0, __p1) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 17); \ -}) -#else -#define vst1_u16_x4(__p0, __p1) __extension__ ({ \ - uint16x4x4_t __s1 = __p1; \ - uint16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 17); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s8_x4(__p0, __p1) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 0); \ -}) -#else -#define vst1_s8_x4(__p0, __p1) __extension__ ({ \ - int8x8x4_t __s1 = __p1; \ - int8x8x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, (int8x8_t)__rev1.val[0], (int8x8_t)__rev1.val[1], (int8x8_t)__rev1.val[2], (int8x8_t)__rev1.val[3], 0); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f64_x4(__p0, __p1) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 10); \ -}) -#else -#define vst1_f64_x4(__p0, __p1) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f32_x4(__p0, __p1) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 9); \ -}) -#else -#define vst1_f32_x4(__p0, __p1) __extension__ ({ \ - float32x2x4_t __s1 = __p1; \ - float32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 9); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_f16_x4(__p0, __p1) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 8); \ -}) -#else -#define vst1_f16_x4(__p0, __p1) __extension__ ({ \ - float16x4x4_t __s1 = __p1; \ - float16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 8); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s32_x4(__p0, __p1) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 2); \ -}) -#else -#define vst1_s32_x4(__p0, __p1) __extension__ ({ \ - int32x2x4_t __s1 = __p1; \ - int32x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 2); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s64_x4(__p0, __p1) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 3); \ -}) -#else -#define vst1_s64_x4(__p0, __p1) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst1_s16_x4(__p0, __p1) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - __builtin_neon_vst1_x4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 1); \ -}) -#else -#define vst1_s16_x4(__p0, __p1) __extension__ ({ \ - int16x4x4_t __s1 = __p1; \ - int16x4x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 3, 2, 1, 0); \ - __builtin_neon_vst1_x4_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_p64(__p0, __p1) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 6); \ -}) -#else -#define vst2_p64(__p0, __p1) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 38); \ -}) -#else -#define vst2q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - poly64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], 51); \ -}) -#else -#define vst2q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - uint64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_f64(__p0, __p1) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 42); \ -}) -#else -#define vst2q_f64(__p0, __p1) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - float64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_s64(__p0, __p1) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_v(__p0, __s1.val[0], __s1.val[1], 35); \ -}) -#else -#define vst2q_s64(__p0, __p1) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - int64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_v(__p0, __rev1.val[0], __rev1.val[1], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_f64(__p0, __p1) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 10); \ -}) -#else -#define vst2_f64(__p0, __p1) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_v(__p0, __s1.val[0], __s1.val[1], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 6); \ -}) -#else -#define vst2_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 36); \ -}) -#else -#define vst2q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x2_t __s1 = __p1; \ - poly8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 38); \ -}) -#else -#define vst2q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x2_t __s1 = __p1; \ - poly64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 48); \ -}) -#else -#define vst2q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x2_t __s1 = __p1; \ - uint8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 51); \ -}) -#else -#define vst2q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x2_t __s1 = __p1; \ - uint64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], __p2, 32); \ -}) -#else -#define vst2q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x2_t __s1 = __p1; \ - int8x16x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], __p2, 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 42); \ -}) -#else -#define vst2q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x2_t __s1 = __p1; \ - float64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - __builtin_neon_vst2q_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 35); \ -}) -#else -#define vst2q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x2_t __s1 = __p1; \ - int64x2x2_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __builtin_neon_vst2q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __p2, 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 19); \ -}) -#else -#define vst2_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], __p2, 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 10); \ -}) -#else -#define vst2_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst2_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 3); \ -}) -#else -#define vst2_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x2_t __s1 = __p1; \ - __builtin_neon_vst2_lane_v(__p0, __s1.val[0], __s1.val[1], __p2, 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_p64(__p0, __p1) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 6); \ -}) -#else -#define vst3_p64(__p0, __p1) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 38); \ -}) -#else -#define vst3q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - poly64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], 51); \ -}) -#else -#define vst3q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - uint64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_f64(__p0, __p1) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 42); \ -}) -#else -#define vst3q_f64(__p0, __p1) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - float64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_s64(__p0, __p1) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 35); \ -}) -#else -#define vst3q_s64(__p0, __p1) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - int64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_f64(__p0, __p1) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 10); \ -}) -#else -#define vst3_f64(__p0, __p1) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 6); \ -}) -#else -#define vst3_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 36); \ -}) -#else -#define vst3q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x3_t __s1 = __p1; \ - poly8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 38); \ -}) -#else -#define vst3q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x3_t __s1 = __p1; \ - poly64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 48); \ -}) -#else -#define vst3q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x3_t __s1 = __p1; \ - uint8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 51); \ -}) -#else -#define vst3q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x3_t __s1 = __p1; \ - uint64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], __p2, 32); \ -}) -#else -#define vst3q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x3_t __s1 = __p1; \ - int8x16x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], __p2, 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 42); \ -}) -#else -#define vst3q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x3_t __s1 = __p1; \ - float64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - __builtin_neon_vst3q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 35); \ -}) -#else -#define vst3q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x3_t __s1 = __p1; \ - int64x2x3_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __builtin_neon_vst3q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __p2, 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 19); \ -}) -#else -#define vst3_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], __p2, 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 10); \ -}) -#else -#define vst3_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst3_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 3); \ -}) -#else -#define vst3_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x3_t __s1 = __p1; \ - __builtin_neon_vst3_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __p2, 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_p64(__p0, __p1) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 6); \ -}) -#else -#define vst4_p64(__p0, __p1) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 38); \ -}) -#else -#define vst4q_p64(__p0, __p1) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - poly64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], 51); \ -}) -#else -#define vst4q_u64(__p0, __p1) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - uint64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_f64(__p0, __p1) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 42); \ -}) -#else -#define vst4q_f64(__p0, __p1) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - float64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_s64(__p0, __p1) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 35); \ -}) -#else -#define vst4q_s64(__p0, __p1) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - int64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_f64(__p0, __p1) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 10); \ -}) -#else -#define vst4_f64(__p0, __p1) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 6); \ -}) -#else -#define vst4_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 6); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 36); \ -}) -#else -#define vst4q_lane_p8(__p0, __p1, __p2) __extension__ ({ \ - poly8x16x4_t __s1 = __p1; \ - poly8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 36); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 38); \ -}) -#else -#define vst4q_lane_p64(__p0, __p1, __p2) __extension__ ({ \ - poly64x2x4_t __s1 = __p1; \ - poly64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 38); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 48); \ -}) -#else -#define vst4q_lane_u8(__p0, __p1, __p2) __extension__ ({ \ - uint8x16x4_t __s1 = __p1; \ - uint8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 48); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 51); \ -}) -#else -#define vst4q_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x2x4_t __s1 = __p1; \ - uint64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 51); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__s1.val[0], (int8x16_t)__s1.val[1], (int8x16_t)__s1.val[2], (int8x16_t)__s1.val[3], __p2, 32); \ -}) -#else -#define vst4q_lane_s8(__p0, __p1, __p2) __extension__ ({ \ - int8x16x4_t __s1 = __p1; \ - int8x16x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, (int8x16_t)__rev1.val[0], (int8x16_t)__rev1.val[1], (int8x16_t)__rev1.val[2], (int8x16_t)__rev1.val[3], __p2, 32); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 42); \ -}) -#else -#define vst4q_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x2x4_t __s1 = __p1; \ - float64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 42); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - __builtin_neon_vst4q_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 35); \ -}) -#else -#define vst4q_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x2x4_t __s1 = __p1; \ - int64x2x4_t __rev1; \ - __rev1.val[0] = __builtin_shufflevector(__s1.val[0], __s1.val[0], 1, 0); \ - __rev1.val[1] = __builtin_shufflevector(__s1.val[1], __s1.val[1], 1, 0); \ - __rev1.val[2] = __builtin_shufflevector(__s1.val[2], __s1.val[2], 1, 0); \ - __rev1.val[3] = __builtin_shufflevector(__s1.val[3], __s1.val[3], 1, 0); \ - __builtin_neon_vst4q_lane_v(__p0, __rev1.val[0], __rev1.val[1], __rev1.val[2], __rev1.val[3], __p2, 35); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 19); \ -}) -#else -#define vst4_lane_u64(__p0, __p1, __p2) __extension__ ({ \ - uint64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, (int8x8_t)__s1.val[0], (int8x8_t)__s1.val[1], (int8x8_t)__s1.val[2], (int8x8_t)__s1.val[3], __p2, 19); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 10); \ -}) -#else -#define vst4_lane_f64(__p0, __p1, __p2) __extension__ ({ \ - float64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 10); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vst4_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 3); \ -}) -#else -#define vst4_lane_s64(__p0, __p1, __p2) __extension__ ({ \ - int64x1x4_t __s1 = __p1; \ - __builtin_neon_vst4_lane_v(__p0, __s1.val[0], __s1.val[1], __s1.val[2], __s1.val[3], __p2, 3); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vstrq_p128(__p0, __p1) __extension__ ({ \ - poly128_t __s1 = __p1; \ - __builtin_neon_vstrq_p128(__p0, __s1); \ -}) -#else -#define vstrq_p128(__p0, __p1) __extension__ ({ \ - poly128_t __s1 = __p1; \ - __builtin_neon_vstrq_p128(__p0, __s1); \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vsubd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vsubd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vsubd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vsubd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vsubd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vsubd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vsubd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vsubd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vsubq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai float64x2_t vsubq_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __rev0 - __rev1; - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x1_t vsub_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#else -__ai float64x1_t vsub_f64(float64x1_t __p0, float64x1_t __p1) { - float64x1_t __ret; - __ret = __p0 - __p1; - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x8_t __ret; - __ret = vcombine_u16(__p0, vsubhn_u32(__p1, __p2)); - return __ret; -} -#else -__ai uint16x8_t vsubhn_high_u32(uint16x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vcombine_u16(__rev0, __noswap_vsubhn_u32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x4_t __ret; - __ret = vcombine_u32(__p0, vsubhn_u64(__p1, __p2)); - return __ret; -} -#else -__ai uint32x4_t vsubhn_high_u64(uint32x2_t __p0, uint64x2_t __p1, uint64x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vcombine_u32(__rev0, __noswap_vsubhn_u64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vsubhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x16_t __ret; - __ret = vcombine_u8(__p0, vsubhn_u16(__p1, __p2)); - return __ret; -} -#else -__ai uint8x16_t vsubhn_high_u16(uint8x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __noswap_vcombine_u8(__rev0, __noswap_vsubhn_u16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x8_t __ret; - __ret = vcombine_s16(__p0, vsubhn_s32(__p1, __p2)); - return __ret; -} -#else -__ai int16x8_t vsubhn_high_s32(int16x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vcombine_s16(__rev0, __noswap_vsubhn_s32(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x4_t __ret; - __ret = vcombine_s32(__p0, vsubhn_s64(__p1, __p2)); - return __ret; -} -#else -__ai int32x4_t vsubhn_high_s64(int32x2_t __p0, int64x2_t __p1, int64x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vcombine_s32(__rev0, __noswap_vsubhn_s64(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vsubhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x16_t __ret; - __ret = vcombine_s8(__p0, vsubhn_s16(__p1, __p2)); - return __ret; -} -#else -__ai int8x16_t vsubhn_high_s16(int8x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __noswap_vcombine_s8(__rev0, __noswap_vsubhn_s16(__rev1, __rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = vmovl_high_u8(__p0) - vmovl_high_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vsubl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmovl_high_u8(__rev0) - __noswap_vmovl_high_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsubl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = vmovl_high_u32(__p0) - vmovl_high_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vsubl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmovl_high_u32(__rev0) - __noswap_vmovl_high_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = vmovl_high_u16(__p0) - vmovl_high_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vsubl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmovl_high_u16(__rev0) - __noswap_vmovl_high_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = vmovl_high_s8(__p0) - vmovl_high_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vsubl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmovl_high_s8(__rev0) - __noswap_vmovl_high_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vsubl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = vmovl_high_s32(__p0) - vmovl_high_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vsubl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmovl_high_s32(__rev0) - __noswap_vmovl_high_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = vmovl_high_s16(__p0) - vmovl_high_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vsubl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmovl_high_s16(__rev0) - __noswap_vmovl_high_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vsubw_high_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = __p0 - vmovl_high_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vsubw_high_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __noswap_vmovl_high_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vsubw_high_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = __p0 - vmovl_high_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vsubw_high_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __rev0 - __noswap_vmovl_high_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vsubw_high_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = __p0 - vmovl_high_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vsubw_high_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __noswap_vmovl_high_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vsubw_high_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = __p0 - vmovl_high_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vsubw_high_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __noswap_vmovl_high_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vsubw_high_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = __p0 - vmovl_high_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vsubw_high_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __rev0 - __noswap_vmovl_high_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vsubw_high_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = __p0 - vmovl_high_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vsubw_high_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __noswap_vmovl_high_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtrn1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai poly8x8_t vtrn1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vtrn1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai poly16x4_t vtrn1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vtrn1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - return __ret; -} -#else -__ai poly8x16_t vtrn1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vtrn1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai poly64x2_t vtrn1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vtrn1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai poly16x8_t vtrn1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vtrn1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - return __ret; -} -#else -__ai uint8x16_t vtrn1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vtrn1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai uint32x4_t vtrn1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vtrn1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint64x2_t vtrn1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vtrn1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai uint16x8_t vtrn1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vtrn1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - return __ret; -} -#else -__ai int8x16_t vtrn1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vtrn1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float64x2_t vtrn1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vtrn1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai float32x4_t vtrn1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vtrn1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai int32x4_t vtrn1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vtrn1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int64x2_t vtrn1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vtrn1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai int16x8_t vtrn1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtrn1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai uint8x8_t vtrn1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vtrn1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint32x2_t vtrn1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vtrn1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai uint16x4_t vtrn1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtrn1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 2, 10, 4, 12, 6, 14); - return __ret; -} -#else -__ai int8x8_t vtrn1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 2, 10, 4, 12, 6, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vtrn1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float32x2_t vtrn1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vtrn1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int32x2_t vtrn1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vtrn1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 2, 6); - return __ret; -} -#else -__ai int16x4_t vtrn1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 2, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vtrn2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai poly8x8_t vtrn2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vtrn2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai poly16x4_t vtrn2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vtrn2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - return __ret; -} -#else -__ai poly8x16_t vtrn2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vtrn2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai poly64x2_t vtrn2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vtrn2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai poly16x8_t vtrn2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vtrn2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - return __ret; -} -#else -__ai uint8x16_t vtrn2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vtrn2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai uint32x4_t vtrn2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vtrn2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint64x2_t vtrn2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vtrn2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai uint16x8_t vtrn2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vtrn2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - return __ret; -} -#else -__ai int8x16_t vtrn2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vtrn2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float64x2_t vtrn2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vtrn2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai float32x4_t vtrn2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vtrn2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai int32x4_t vtrn2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vtrn2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int64x2_t vtrn2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vtrn2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai int16x8_t vtrn2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vtrn2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai uint8x8_t vtrn2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vtrn2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint32x2_t vtrn2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vtrn2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai uint16x4_t vtrn2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vtrn2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 9, 3, 11, 5, 13, 7, 15); - return __ret; -} -#else -__ai int8x8_t vtrn2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 9, 3, 11, 5, 13, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vtrn2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float32x2_t vtrn2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vtrn2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int32x2_t vtrn2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vtrn2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 5, 3, 7); - return __ret; -} -#else -__ai int16x4_t vtrn2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 5, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vtst_p64(poly64x1_t __p0, poly64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vtst_p64(poly64x1_t __p0, poly64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vtstq_p64(poly64x2_t __p0, poly64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vtstq_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vtstq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vtstq_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vtstq_s64(int64x2_t __p0, int64x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__p0, (int8x16_t)__p1, 51); - return __ret; -} -#else -__ai uint64x2_t vtstq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t) __builtin_neon_vtstq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 51); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vtst_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vtst_u64(uint64x1_t __p0, uint64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x1_t vtst_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#else -__ai uint64x1_t vtst_s64(int64x1_t __p0, int64x1_t __p1) { - uint64x1_t __ret; - __ret = (uint64x1_t) __builtin_neon_vtst_v((int8x8_t)__p0, (int8x8_t)__p1, 19); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64_t vtstd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vtstd_u64(__p0, __p1); - return __ret; -} -#else -__ai uint64_t vtstd_u64(uint64_t __p0, uint64_t __p1) { - uint64_t __ret; - __ret = (uint64_t) __builtin_neon_vtstd_u64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vtstd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vtstd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vtstd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vtstd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8_t vuqaddb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vuqaddb_s8(__p0, __p1); - return __ret; -} -#else -__ai int8_t vuqaddb_s8(int8_t __p0, int8_t __p1) { - int8_t __ret; - __ret = (int8_t) __builtin_neon_vuqaddb_s8(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32_t vuqadds_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vuqadds_s32(__p0, __p1); - return __ret; -} -#else -__ai int32_t vuqadds_s32(int32_t __p0, int32_t __p1) { - int32_t __ret; - __ret = (int32_t) __builtin_neon_vuqadds_s32(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64_t vuqaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vuqaddd_s64(__p0, __p1); - return __ret; -} -#else -__ai int64_t vuqaddd_s64(int64_t __p0, int64_t __p1) { - int64_t __ret; - __ret = (int64_t) __builtin_neon_vuqaddd_s64(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16_t vuqaddh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vuqaddh_s16(__p0, __p1); - return __ret; -} -#else -__ai int16_t vuqaddh_s16(int16_t __p0, int16_t __p1) { - int16_t __ret; - __ret = (int16_t) __builtin_neon_vuqaddh_s16(__p0, __p1); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vuqaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vuqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 32); - return __ret; -} -#else -__ai int8x16_t vuqaddq_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = (int8x16_t) __builtin_neon_vuqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 32); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vuqaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vuqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 34); - return __ret; -} -#else -__ai int32x4_t vuqaddq_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t) __builtin_neon_vuqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 34); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vuqaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vuqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 35); - return __ret; -} -#else -__ai int64x2_t vuqaddq_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t) __builtin_neon_vuqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 35); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vuqaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vuqaddq_v((int8x16_t)__p0, (int8x16_t)__p1, 33); - return __ret; -} -#else -__ai int16x8_t vuqaddq_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t) __builtin_neon_vuqaddq_v((int8x16_t)__rev0, (int8x16_t)__rev1, 33); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vuqadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vuqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 0); - return __ret; -} -#else -__ai int8x8_t vuqadd_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = (int8x8_t) __builtin_neon_vuqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 0); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vuqadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vuqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 2); - return __ret; -} -#else -__ai int32x2_t vuqadd_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = (int32x2_t) __builtin_neon_vuqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x1_t vuqadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vuqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#else -__ai int64x1_t vuqadd_s64(int64x1_t __p0, int64x1_t __p1) { - int64x1_t __ret; - __ret = (int64x1_t) __builtin_neon_vuqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 3); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vuqadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vuqadd_v((int8x8_t)__p0, (int8x8_t)__p1, 1); - return __ret; -} -#else -__ai int16x4_t vuqadd_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = (int16x4_t) __builtin_neon_vuqadd_v((int8x8_t)__rev0, (int8x8_t)__rev1, 1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vuzp1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai poly8x8_t vuzp1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vuzp1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai poly16x4_t vuzp1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vuzp1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - return __ret; -} -#else -__ai poly8x16_t vuzp1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vuzp1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai poly64x2_t vuzp1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vuzp1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai poly16x8_t vuzp1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vuzp1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - return __ret; -} -#else -__ai uint8x16_t vuzp1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vuzp1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai uint32x4_t vuzp1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vuzp1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint64x2_t vuzp1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vuzp1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai uint16x8_t vuzp1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vuzp1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - return __ret; -} -#else -__ai int8x16_t vuzp1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vuzp1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float64x2_t vuzp1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vuzp1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai float32x4_t vuzp1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vuzp1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai int32x4_t vuzp1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vuzp1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int64x2_t vuzp1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vuzp1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai int16x8_t vuzp1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vuzp1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai uint8x8_t vuzp1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vuzp1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint32x2_t vuzp1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vuzp1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai uint16x4_t vuzp1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vuzp1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6, 8, 10, 12, 14); - return __ret; -} -#else -__ai int8x8_t vuzp1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6, 8, 10, 12, 14); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vuzp1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float32x2_t vuzp1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vuzp1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int32x2_t vuzp1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vuzp1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2, 4, 6); - return __ret; -} -#else -__ai int16x4_t vuzp1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2, 4, 6); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vuzp2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai poly8x8_t vuzp2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vuzp2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai poly16x4_t vuzp2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vuzp2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - return __ret; -} -#else -__ai poly8x16_t vuzp2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vuzp2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai poly64x2_t vuzp2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vuzp2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai poly16x8_t vuzp2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vuzp2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - return __ret; -} -#else -__ai uint8x16_t vuzp2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vuzp2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai uint32x4_t vuzp2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vuzp2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint64x2_t vuzp2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vuzp2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai uint16x8_t vuzp2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vuzp2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - return __ret; -} -#else -__ai int8x16_t vuzp2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vuzp2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float64x2_t vuzp2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vuzp2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai float32x4_t vuzp2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vuzp2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai int32x4_t vuzp2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vuzp2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int64x2_t vuzp2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vuzp2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai int16x8_t vuzp2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vuzp2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai uint8x8_t vuzp2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vuzp2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint32x2_t vuzp2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vuzp2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai uint16x4_t vuzp2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vuzp2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7, 9, 11, 13, 15); - return __ret; -} -#else -__ai int8x8_t vuzp2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7, 9, 11, 13, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vuzp2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float32x2_t vuzp2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vuzp2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int32x2_t vuzp2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vuzp2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3, 5, 7); - return __ret; -} -#else -__ai int16x4_t vuzp2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3, 5, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vzip1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai poly8x8_t vzip1_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vzip1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai poly16x4_t vzip1_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vzip1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - return __ret; -} -#else -__ai poly8x16_t vzip1q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vzip1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai poly64x2_t vzip1q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vzip1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai poly16x8_t vzip1q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vzip1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - return __ret; -} -#else -__ai uint8x16_t vzip1q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vzip1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai uint32x4_t vzip1q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vzip1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint64x2_t vzip1q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vzip1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai uint16x8_t vzip1q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vzip1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - return __ret; -} -#else -__ai int8x16_t vzip1q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vzip1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float64x2_t vzip1q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vzip1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai float32x4_t vzip1q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vzip1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai int32x4_t vzip1q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vzip1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int64x2_t vzip1q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vzip1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai int16x8_t vzip1q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vzip1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai uint8x8_t vzip1_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vzip1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai uint32x2_t vzip1_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vzip1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai uint16x4_t vzip1_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vzip1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 8, 1, 9, 2, 10, 3, 11); - return __ret; -} -#else -__ai int8x8_t vzip1_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 8, 1, 9, 2, 10, 3, 11); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vzip1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai float32x2_t vzip1_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vzip1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 2); - return __ret; -} -#else -__ai int32x2_t vzip1_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vzip1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 0, 4, 1, 5); - return __ret; -} -#else -__ai int16x4_t vzip1_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 0, 4, 1, 5); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x8_t vzip2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai poly8x8_t vzip2_p8(poly8x8_t __p0, poly8x8_t __p1) { - poly8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x4_t vzip2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai poly16x4_t vzip2_p16(poly16x4_t __p0, poly16x4_t __p1) { - poly16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - poly16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - poly16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly8x16_t vzip2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - return __ret; -} -#else -__ai poly8x16_t vzip2q_p8(poly8x16_t __p0, poly8x16_t __p1) { - poly8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - poly8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly64x2_t vzip2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai poly64x2_t vzip2q_p64(poly64x2_t __p0, poly64x2_t __p1) { - poly64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - poly64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - poly64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai poly16x8_t vzip2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai poly16x8_t vzip2q_p16(poly16x8_t __p0, poly16x8_t __p1) { - poly16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - poly16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vzip2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - return __ret; -} -#else -__ai uint8x16_t vzip2q_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vzip2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai uint32x4_t vzip2q_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vzip2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint64x2_t vzip2q_u64(uint64x2_t __p0, uint64x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vzip2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai uint16x8_t vzip2q_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vzip2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - return __ret; -} -#else -__ai int8x16_t vzip2q_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float64x2_t vzip2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float64x2_t vzip2q_f64(float64x2_t __p0, float64x2_t __p1) { - float64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x4_t vzip2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai float32x4_t vzip2q_f32(float32x4_t __p0, float32x4_t __p1) { - float32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - float32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - float32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vzip2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai int32x4_t vzip2q_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vzip2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int64x2_t vzip2q_s64(int64x2_t __p0, int64x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int64x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vzip2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai int16x8_t vzip2q_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vzip2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai uint8x8_t vzip2_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vzip2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai uint32x2_t vzip2_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vzip2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai uint16x4_t vzip2_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vzip2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 4, 12, 5, 13, 6, 14, 7, 15); - return __ret; -} -#else -__ai int8x8_t vzip2_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 4, 12, 5, 13, 6, 14, 7, 15); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai float32x2_t vzip2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai float32x2_t vzip2_f32(float32x2_t __p0, float32x2_t __p1) { - float32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - float32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - float32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vzip2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 1, 3); - return __ret; -} -#else -__ai int32x2_t vzip2_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 1, 3); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vzip2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __ret; - __ret = __builtin_shufflevector(__p0, __p1, 2, 6, 3, 7); - return __ret; -} -#else -__ai int16x4_t vzip2_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __builtin_shufflevector(__rev0, __rev1, 2, 6, 3, 7); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#endif -#ifdef __LITTLE_ENDIAN__ -__ai uint8x16_t vabaq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __ret; - __ret = __p0 + vabdq_u8(__p1, __p2); - return __ret; -} -#else -__ai uint8x16_t vabaq_u8(uint8x16_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __ret; - __ret = __rev0 + __noswap_vabdq_u8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabaq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + vabdq_u32(__p1, __p2); - return __ret; -} -#else -__ai uint32x4_t vabaq_u32(uint32x4_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vabdq_u32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabaq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + vabdq_u16(__p1, __p2); - return __ret; -} -#else -__ai uint16x8_t vabaq_u16(uint16x8_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __noswap_vabdq_u16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x16_t vabaq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __ret; - __ret = __p0 + vabdq_s8(__p1, __p2); - return __ret; -} -#else -__ai int8x16_t vabaq_s8(int8x16_t __p0, int8x16_t __p1, int8x16_t __p2) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __ret; - __ret = __rev0 + __noswap_vabdq_s8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabaq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + vabdq_s32(__p1, __p2); - return __ret; -} -#else -__ai int32x4_t vabaq_s32(int32x4_t __p0, int32x4_t __p1, int32x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vabdq_s32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabaq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + vabdq_s16(__p1, __p2); - return __ret; -} -#else -__ai int16x8_t vabaq_s16(int16x8_t __p0, int16x8_t __p1, int16x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __noswap_vabdq_s16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint8x8_t vaba_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __ret; - __ret = __p0 + vabd_u8(__p1, __p2); - return __ret; -} -#else -__ai uint8x8_t vaba_u8(uint8x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __ret; - __ret = __rev0 + __noswap_vabd_u8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x2_t vaba_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __ret; - __ret = __p0 + vabd_u32(__p1, __p2); - return __ret; -} -#else -__ai uint32x2_t vaba_u32(uint32x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint32x2_t __ret; - __ret = __rev0 + __noswap_vabd_u32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x4_t vaba_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __ret; - __ret = __p0 + vabd_u16(__p1, __p2); - return __ret; -} -#else -__ai uint16x4_t vaba_u16(uint16x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint16x4_t __ret; - __ret = __rev0 + __noswap_vabd_u16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int8x8_t vaba_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __ret; - __ret = __p0 + vabd_s8(__p1, __p2); - return __ret; -} -#else -__ai int8x8_t vaba_s8(int8x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __ret; - __ret = __rev0 + __noswap_vabd_s8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x2_t vaba_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __ret; - __ret = __p0 + vabd_s32(__p1, __p2); - return __ret; -} -#else -__ai int32x2_t vaba_s32(int32x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int32x2_t __ret; - __ret = __rev0 + __noswap_vabd_s32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x4_t vaba_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __ret; - __ret = __p0 + vabd_s16(__p1, __p2); - return __ret; -} -#else -__ai int16x4_t vaba_s16(int16x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int16x4_t __ret; - __ret = __rev0 + __noswap_vabd_s16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabdl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(vmovl_u8((uint8x8_t)(vabd_u8(__p0, __p1)))); - return __ret; -} -#else -__ai uint16x8_t vabdl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = (uint16x8_t)(__noswap_vmovl_u8((uint8x8_t)(__noswap_vabd_u8(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vabdl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = (uint16x8_t)(__noswap_vmovl_u8((uint8x8_t)(__noswap_vabd_u8(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vabdl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(vmovl_u32((uint32x2_t)(vabd_u32(__p0, __p1)))); - return __ret; -} -#else -__ai uint64x2_t vabdl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = (uint64x2_t)(__noswap_vmovl_u32((uint32x2_t)(__noswap_vabd_u32(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vabdl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = (uint64x2_t)(__noswap_vmovl_u32((uint32x2_t)(__noswap_vabd_u32(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabdl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(vmovl_u16((uint16x4_t)(vabd_u16(__p0, __p1)))); - return __ret; -} -#else -__ai uint32x4_t vabdl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = (uint32x4_t)(__noswap_vmovl_u16((uint16x4_t)(__noswap_vabd_u16(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vabdl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = (uint32x4_t)(__noswap_vmovl_u16((uint16x4_t)(__noswap_vabd_u16(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabdl_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t)(vmovl_u8((uint8x8_t)(vabd_s8(__p0, __p1)))); - return __ret; -} -#else -__ai int16x8_t vabdl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = (int16x8_t)(__noswap_vmovl_u8((uint8x8_t)(__noswap_vabd_s8(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vabdl_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = (int16x8_t)(__noswap_vmovl_u8((uint8x8_t)(__noswap_vabd_s8(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vabdl_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t)(vmovl_u32((uint32x2_t)(vabd_s32(__p0, __p1)))); - return __ret; -} -#else -__ai int64x2_t vabdl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = (int64x2_t)(__noswap_vmovl_u32((uint32x2_t)(__noswap_vabd_s32(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vabdl_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = (int64x2_t)(__noswap_vmovl_u32((uint32x2_t)(__noswap_vabd_s32(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabdl_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t)(vmovl_u16((uint16x4_t)(vabd_s16(__p0, __p1)))); - return __ret; -} -#else -__ai int32x4_t vabdl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = (int32x4_t)(__noswap_vmovl_u16((uint16x4_t)(__noswap_vabd_s16(__rev0, __rev1)))); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vabdl_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = (int32x4_t)(__noswap_vmovl_u16((uint16x4_t)(__noswap_vabd_s16(__p0, __p1)))); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = vmovl_u8(__p0) + vmovl_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vaddl_u8(uint8x8_t __p0, uint8x8_t __p1) { - uint8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmovl_u8(__rev0) + __noswap_vmovl_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vaddl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = vmovl_u32(__p0) + vmovl_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vaddl_u32(uint32x2_t __p0, uint32x2_t __p1) { - uint32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmovl_u32(__rev0) + __noswap_vmovl_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = vmovl_u16(__p0) + vmovl_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vaddl_u16(uint16x4_t __p0, uint16x4_t __p1) { - uint16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmovl_u16(__rev0) + __noswap_vmovl_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddl_s8(int8x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = vmovl_s8(__p0) + vmovl_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vaddl_s8(int8x8_t __p0, int8x8_t __p1) { - int8x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmovl_s8(__rev0) + __noswap_vmovl_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vaddl_s32(int32x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = vmovl_s32(__p0) + vmovl_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vaddl_s32(int32x2_t __p0, int32x2_t __p1) { - int32x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmovl_s32(__rev0) + __noswap_vmovl_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddl_s16(int16x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = vmovl_s16(__p0) + vmovl_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vaddl_s16(int16x4_t __p0, int16x4_t __p1) { - int16x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmovl_s16(__rev0) + __noswap_vmovl_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddw_u8(uint16x8_t __p0, uint8x8_t __p1) { - uint16x8_t __ret; - __ret = __p0 + vmovl_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vaddw_u8(uint16x8_t __p0, uint8x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __noswap_vmovl_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vaddw_u32(uint64x2_t __p0, uint32x2_t __p1) { - uint64x2_t __ret; - __ret = __p0 + vmovl_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vaddw_u32(uint64x2_t __p0, uint32x2_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __noswap_vmovl_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddw_u16(uint32x4_t __p0, uint16x4_t __p1) { - uint32x4_t __ret; - __ret = __p0 + vmovl_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vaddw_u16(uint32x4_t __p0, uint16x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vmovl_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddw_s8(int16x8_t __p0, int8x8_t __p1) { - int16x8_t __ret; - __ret = __p0 + vmovl_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vaddw_s8(int16x8_t __p0, int8x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __noswap_vmovl_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vaddw_s32(int64x2_t __p0, int32x2_t __p1) { - int64x2_t __ret; - __ret = __p0 + vmovl_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vaddw_s32(int64x2_t __p0, int32x2_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __noswap_vmovl_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddw_s16(int32x4_t __p0, int16x4_t __p1) { - int32x4_t __ret; - __ret = __p0 + vmovl_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vaddw_s16(int32x4_t __p0, int16x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vmovl_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vget_lane_f16(__p0_242, __p1_242) __extension__ ({ \ - float16x4_t __s0_242 = __p0_242; \ - float16_t __ret_242; \ -float16x4_t __reint_242 = __s0_242; \ -int16_t __reint1_242 = vget_lane_s16(*(int16x4_t *) &__reint_242, __p1_242); \ - __ret_242 = *(float16_t *) &__reint1_242; \ - __ret_242; \ -}) -#else -#define vget_lane_f16(__p0_243, __p1_243) __extension__ ({ \ - float16x4_t __s0_243 = __p0_243; \ - float16x4_t __rev0_243; __rev0_243 = __builtin_shufflevector(__s0_243, __s0_243, 3, 2, 1, 0); \ - float16_t __ret_243; \ -float16x4_t __reint_243 = __rev0_243; \ -int16_t __reint1_243 = __noswap_vget_lane_s16(*(int16x4_t *) &__reint_243, __p1_243); \ - __ret_243 = *(float16_t *) &__reint1_243; \ - __ret_243; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vgetq_lane_f16(__p0_244, __p1_244) __extension__ ({ \ - float16x8_t __s0_244 = __p0_244; \ - float16_t __ret_244; \ -float16x8_t __reint_244 = __s0_244; \ -int16_t __reint1_244 = vgetq_lane_s16(*(int16x8_t *) &__reint_244, __p1_244); \ - __ret_244 = *(float16_t *) &__reint1_244; \ - __ret_244; \ -}) -#else -#define vgetq_lane_f16(__p0_245, __p1_245) __extension__ ({ \ - float16x8_t __s0_245 = __p0_245; \ - float16x8_t __rev0_245; __rev0_245 = __builtin_shufflevector(__s0_245, __s0_245, 7, 6, 5, 4, 3, 2, 1, 0); \ - float16_t __ret_245; \ -float16x8_t __reint_245 = __rev0_245; \ -int16_t __reint1_245 = __noswap_vgetq_lane_s16(*(int16x8_t *) &__reint_245, __p1_245); \ - __ret_245 = *(float16_t *) &__reint1_245; \ - __ret_245; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + vmull_u8(__p1, __p2); - return __ret; -} -#else -__ai uint16x8_t vmlal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __noswap_vmull_u8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vmlal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + __noswap_vmull_u8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 + vmull_u32(__p1, __p2); - return __ret; -} -#else -__ai uint64x2_t vmlal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __noswap_vmull_u32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmlal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 + __noswap_vmull_u32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + vmull_u16(__p1, __p2); - return __ret; -} -#else -__ai uint32x4_t vmlal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vmull_u16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmlal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + __noswap_vmull_u16(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + vmull_s8(__p1, __p2); - return __ret; -} -#else -__ai int16x8_t vmlal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __noswap_vmull_s8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vmlal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + __noswap_vmull_s8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 + vmull_s32(__p1, __p2); - return __ret; -} -#else -__ai int64x2_t vmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __noswap_vmull_s32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmlal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 + __noswap_vmull_s32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + vmull_s16(__p1, __p2); - return __ret; -} -#else -__ai int32x4_t vmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vmull_s16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmlal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + __noswap_vmull_s16(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 + vmull_u32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_u32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 + vmull_u16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_u16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 + vmull_s32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 + __noswap_vmull_s32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlal_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 + vmull_s16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlal_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 + __noswap_vmull_s16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlal_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = __p0 + vmull_u32(__p1, (uint32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai uint64x2_t vmlal_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __noswap_vmull_u32(__rev1, (uint32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmlal_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = __p0 + __noswap_vmull_u32(__p1, (uint32x2_t) {__p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlal_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = __p0 + vmull_u16(__p1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai uint32x4_t vmlal_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vmull_u16(__rev1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmlal_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = __p0 + __noswap_vmull_u16(__p1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = __p0 + vmull_s32(__p1, (int32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai int64x2_t vmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __noswap_vmull_s32(__rev1, (int32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmlal_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = __p0 + __noswap_vmull_s32(__p1, (int32x2_t) {__p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = __p0 + vmull_s16(__p1, (int16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai int32x4_t vmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vmull_s16(__rev1, (int16x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmlal_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = __p0 + __noswap_vmull_s16(__p1, (int16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlsl_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 - vmull_u8(__p1, __p2); - return __ret; -} -#else -__ai uint16x8_t vmlsl_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 - __noswap_vmull_u8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vmlsl_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 - __noswap_vmull_u8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlsl_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 - vmull_u32(__p1, __p2); - return __ret; -} -#else -__ai uint64x2_t vmlsl_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint64x2_t __ret; - __ret = __rev0 - __noswap_vmull_u32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmlsl_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 - __noswap_vmull_u32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsl_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 - vmull_u16(__p1, __p2); - return __ret; -} -#else -__ai uint32x4_t vmlsl_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __noswap_vmull_u16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmlsl_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 - __noswap_vmull_u16(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlsl_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 - vmull_s8(__p1, __p2); - return __ret; -} -#else -__ai int16x8_t vmlsl_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 - __noswap_vmull_s8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vmlsl_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 - __noswap_vmull_s8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 - vmull_s32(__p1, __p2); - return __ret; -} -#else -__ai int64x2_t vmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = __rev0 - __noswap_vmull_s32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmlsl_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 - __noswap_vmull_s32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 - vmull_s16(__p1, __p2); - return __ret; -} -#else -__ai int32x4_t vmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __noswap_vmull_s16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmlsl_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 - __noswap_vmull_s16(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __ret; \ - __ret = __s0 - vmull_u32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_lane_u32(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint64x2_t __s0 = __p0; \ - uint32x2_t __s1 = __p1; \ - uint32x2_t __s2 = __p2; \ - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - uint64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_u32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __ret; \ - __ret = __s0 - vmull_u16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_lane_u16(__p0, __p1, __p2, __p3) __extension__ ({ \ - uint32x4_t __s0 = __p0; \ - uint16x4_t __s1 = __p1; \ - uint16x4_t __s2 = __p2; \ - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - uint32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_u16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __ret; \ - __ret = __s0 - vmull_s32(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_lane_s32(__p0, __p1, __p2, __p3) __extension__ ({ \ - int64x2_t __s0 = __p0; \ - int32x2_t __s1 = __p1; \ - int32x2_t __s2 = __p2; \ - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 1, 0); \ - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 1, 0); \ - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 1, 0); \ - int64x2_t __ret; \ - __ret = __rev0 - __noswap_vmull_s32(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmlsl_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __ret; \ - __ret = __s0 - vmull_s16(__s1, __builtin_shufflevector(__s2, __s2, __p3, __p3, __p3, __p3)); \ - __ret; \ -}) -#else -#define vmlsl_lane_s16(__p0, __p1, __p2, __p3) __extension__ ({ \ - int32x4_t __s0 = __p0; \ - int16x4_t __s1 = __p1; \ - int16x4_t __s2 = __p2; \ - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__s0, __s0, 3, 2, 1, 0); \ - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__s1, __s1, 3, 2, 1, 0); \ - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__s2, __s2, 3, 2, 1, 0); \ - int32x4_t __ret; \ - __ret = __rev0 - __noswap_vmull_s16(__rev1, __builtin_shufflevector(__rev2, __rev2, __p3, __p3, __p3, __p3)); \ - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); \ - __ret; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlsl_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = __p0 - vmull_u32(__p1, (uint32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai uint64x2_t vmlsl_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint64x2_t __ret; - __ret = __rev0 - __noswap_vmull_u32(__rev1, (uint32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vmlsl_n_u32(uint64x2_t __p0, uint32x2_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = __p0 - __noswap_vmull_u32(__p1, (uint32x2_t) {__p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsl_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = __p0 - vmull_u16(__p1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai uint32x4_t vmlsl_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 - __noswap_vmull_u16(__rev1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vmlsl_n_u16(uint32x4_t __p0, uint16x4_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = __p0 - __noswap_vmull_u16(__p1, (uint16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = __p0 - vmull_s32(__p1, (int32x2_t) {__p2, __p2}); - return __ret; -} -#else -__ai int64x2_t vmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int64x2_t __ret; - __ret = __rev0 - __noswap_vmull_s32(__rev1, (int32x2_t) {__p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vmlsl_n_s32(int64x2_t __p0, int32x2_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = __p0 - __noswap_vmull_s32(__p1, (int32x2_t) {__p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = __p0 - vmull_s16(__p1, (int16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#else -__ai int32x4_t vmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 - __noswap_vmull_s16(__rev1, (int16x4_t) {__p2, __p2, __p2, __p2}); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vmlsl_n_s16(int32x4_t __p0, int16x4_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = __p0 - __noswap_vmull_s16(__p1, (int16x4_t) {__p2, __p2, __p2, __p2}); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vset_lane_f16(__p0_246, __p1_246, __p2_246) __extension__ ({ \ - float16_t __s0_246 = __p0_246; \ - float16x4_t __s1_246 = __p1_246; \ - float16x4_t __ret_246; \ -float16_t __reint_246 = __s0_246; \ -float16x4_t __reint1_246 = __s1_246; \ -int16x4_t __reint2_246 = vset_lane_s16(*(int16_t *) &__reint_246, *(int16x4_t *) &__reint1_246, __p2_246); \ - __ret_246 = *(float16x4_t *) &__reint2_246; \ - __ret_246; \ -}) -#else -#define vset_lane_f16(__p0_247, __p1_247, __p2_247) __extension__ ({ \ - float16_t __s0_247 = __p0_247; \ - float16x4_t __s1_247 = __p1_247; \ - float16x4_t __rev1_247; __rev1_247 = __builtin_shufflevector(__s1_247, __s1_247, 3, 2, 1, 0); \ - float16x4_t __ret_247; \ -float16_t __reint_247 = __s0_247; \ -float16x4_t __reint1_247 = __rev1_247; \ -int16x4_t __reint2_247 = __noswap_vset_lane_s16(*(int16_t *) &__reint_247, *(int16x4_t *) &__reint1_247, __p2_247); \ - __ret_247 = *(float16x4_t *) &__reint2_247; \ - __ret_247 = __builtin_shufflevector(__ret_247, __ret_247, 3, 2, 1, 0); \ - __ret_247; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vsetq_lane_f16(__p0_248, __p1_248, __p2_248) __extension__ ({ \ - float16_t __s0_248 = __p0_248; \ - float16x8_t __s1_248 = __p1_248; \ - float16x8_t __ret_248; \ -float16_t __reint_248 = __s0_248; \ -float16x8_t __reint1_248 = __s1_248; \ -int16x8_t __reint2_248 = vsetq_lane_s16(*(int16_t *) &__reint_248, *(int16x8_t *) &__reint1_248, __p2_248); \ - __ret_248 = *(float16x8_t *) &__reint2_248; \ - __ret_248; \ -}) -#else -#define vsetq_lane_f16(__p0_249, __p1_249, __p2_249) __extension__ ({ \ - float16_t __s0_249 = __p0_249; \ - float16x8_t __s1_249 = __p1_249; \ - float16x8_t __rev1_249; __rev1_249 = __builtin_shufflevector(__s1_249, __s1_249, 7, 6, 5, 4, 3, 2, 1, 0); \ - float16x8_t __ret_249; \ -float16_t __reint_249 = __s0_249; \ -float16x8_t __reint1_249 = __rev1_249; \ -int16x8_t __reint2_249 = __noswap_vsetq_lane_s16(*(int16_t *) &__reint_249, *(int16x8_t *) &__reint1_249, __p2_249); \ - __ret_249 = *(float16x8_t *) &__reint2_249; \ - __ret_249 = __builtin_shufflevector(__ret_249, __ret_249, 7, 6, 5, 4, 3, 2, 1, 0); \ - __ret_249; \ -}) -#endif - -#if defined(__aarch64__) -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabdl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = vabdl_u8(vget_high_u8(__p0), vget_high_u8(__p1)); - return __ret; -} -#else -__ai uint16x8_t vabdl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vabdl_u8(__noswap_vget_high_u8(__rev0), __noswap_vget_high_u8(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vabdl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = vabdl_u32(vget_high_u32(__p0), vget_high_u32(__p1)); - return __ret; -} -#else -__ai uint64x2_t vabdl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vabdl_u32(__noswap_vget_high_u32(__rev0), __noswap_vget_high_u32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabdl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = vabdl_u16(vget_high_u16(__p0), vget_high_u16(__p1)); - return __ret; -} -#else -__ai uint32x4_t vabdl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vabdl_u16(__noswap_vget_high_u16(__rev0), __noswap_vget_high_u16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabdl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = vabdl_s8(vget_high_s8(__p0), vget_high_s8(__p1)); - return __ret; -} -#else -__ai int16x8_t vabdl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vabdl_s8(__noswap_vget_high_s8(__rev0), __noswap_vget_high_s8(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vabdl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = vabdl_s32(vget_high_s32(__p0), vget_high_s32(__p1)); - return __ret; -} -#else -__ai int64x2_t vabdl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vabdl_s32(__noswap_vget_high_s32(__rev0), __noswap_vget_high_s32(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabdl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = vabdl_s16(vget_high_s16(__p0), vget_high_s16(__p1)); - return __ret; -} -#else -__ai int32x4_t vabdl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vabdl_s16(__noswap_vget_high_s16(__rev0), __noswap_vget_high_s16(__rev1)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = vmovl_high_u8(__p0) + vmovl_high_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vaddl_high_u8(uint8x16_t __p0, uint8x16_t __p1) { - uint8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmovl_high_u8(__rev0) + __noswap_vmovl_high_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vaddl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = vmovl_high_u32(__p0) + vmovl_high_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vaddl_high_u32(uint32x4_t __p0, uint32x4_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmovl_high_u32(__rev0) + __noswap_vmovl_high_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = vmovl_high_u16(__p0) + vmovl_high_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vaddl_high_u16(uint16x8_t __p0, uint16x8_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmovl_high_u16(__rev0) + __noswap_vmovl_high_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = vmovl_high_s8(__p0) + vmovl_high_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vaddl_high_s8(int8x16_t __p0, int8x16_t __p1) { - int8x16_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmovl_high_s8(__rev0) + __noswap_vmovl_high_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vaddl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = vmovl_high_s32(__p0) + vmovl_high_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vaddl_high_s32(int32x4_t __p0, int32x4_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmovl_high_s32(__rev0) + __noswap_vmovl_high_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = vmovl_high_s16(__p0) + vmovl_high_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vaddl_high_s16(int16x8_t __p0, int16x8_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmovl_high_s16(__rev0) + __noswap_vmovl_high_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vaddw_high_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __ret; - __ret = __p0 + vmovl_high_u8(__p1); - return __ret; -} -#else -__ai uint16x8_t vaddw_high_u8(uint16x8_t __p0, uint8x16_t __p1) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __noswap_vmovl_high_u8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vaddw_high_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __ret; - __ret = __p0 + vmovl_high_u32(__p1); - return __ret; -} -#else -__ai uint64x2_t vaddw_high_u32(uint64x2_t __p0, uint32x4_t __p1) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __noswap_vmovl_high_u32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vaddw_high_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __ret; - __ret = __p0 + vmovl_high_u16(__p1); - return __ret; -} -#else -__ai uint32x4_t vaddw_high_u16(uint32x4_t __p0, uint16x8_t __p1) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vmovl_high_u16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vaddw_high_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __ret; - __ret = __p0 + vmovl_high_s8(__p1); - return __ret; -} -#else -__ai int16x8_t vaddw_high_s8(int16x8_t __p0, int8x16_t __p1) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __noswap_vmovl_high_s8(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vaddw_high_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __ret; - __ret = __p0 + vmovl_high_s32(__p1); - return __ret; -} -#else -__ai int64x2_t vaddw_high_s32(int64x2_t __p0, int32x4_t __p1) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __noswap_vmovl_high_s32(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vaddw_high_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __ret; - __ret = __p0 + vmovl_high_s16(__p1); - return __ret; -} -#else -__ai int32x4_t vaddw_high_s16(int32x4_t __p0, int16x8_t __p1) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vmovl_high_s16(__rev1); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_p64(__p0_250, __p1_250, __p2_250, __p3_250) __extension__ ({ \ - poly64x2_t __s0_250 = __p0_250; \ - poly64x1_t __s2_250 = __p2_250; \ - poly64x2_t __ret_250; \ - __ret_250 = vsetq_lane_p64(vget_lane_p64(__s2_250, __p3_250), __s0_250, __p1_250); \ - __ret_250; \ -}) -#else -#define vcopyq_lane_p64(__p0_251, __p1_251, __p2_251, __p3_251) __extension__ ({ \ - poly64x2_t __s0_251 = __p0_251; \ - poly64x1_t __s2_251 = __p2_251; \ - poly64x2_t __rev0_251; __rev0_251 = __builtin_shufflevector(__s0_251, __s0_251, 1, 0); \ - poly64x2_t __ret_251; \ - __ret_251 = __noswap_vsetq_lane_p64(__noswap_vget_lane_p64(__s2_251, __p3_251), __rev0_251, __p1_251); \ - __ret_251 = __builtin_shufflevector(__ret_251, __ret_251, 1, 0); \ - __ret_251; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_lane_f64(__p0_252, __p1_252, __p2_252, __p3_252) __extension__ ({ \ - float64x2_t __s0_252 = __p0_252; \ - float64x1_t __s2_252 = __p2_252; \ - float64x2_t __ret_252; \ - __ret_252 = vsetq_lane_f64(vget_lane_f64(__s2_252, __p3_252), __s0_252, __p1_252); \ - __ret_252; \ -}) -#else -#define vcopyq_lane_f64(__p0_253, __p1_253, __p2_253, __p3_253) __extension__ ({ \ - float64x2_t __s0_253 = __p0_253; \ - float64x1_t __s2_253 = __p2_253; \ - float64x2_t __rev0_253; __rev0_253 = __builtin_shufflevector(__s0_253, __s0_253, 1, 0); \ - float64x2_t __ret_253; \ - __ret_253 = __noswap_vsetq_lane_f64(__noswap_vget_lane_f64(__s2_253, __p3_253), __rev0_253, __p1_253); \ - __ret_253 = __builtin_shufflevector(__ret_253, __ret_253, 1, 0); \ - __ret_253; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_p64(__p0_254, __p1_254, __p2_254, __p3_254) __extension__ ({ \ - poly64x1_t __s0_254 = __p0_254; \ - poly64x1_t __s2_254 = __p2_254; \ - poly64x1_t __ret_254; \ - __ret_254 = vset_lane_p64(vget_lane_p64(__s2_254, __p3_254), __s0_254, __p1_254); \ - __ret_254; \ -}) -#else -#define vcopy_lane_p64(__p0_255, __p1_255, __p2_255, __p3_255) __extension__ ({ \ - poly64x1_t __s0_255 = __p0_255; \ - poly64x1_t __s2_255 = __p2_255; \ - poly64x1_t __ret_255; \ - __ret_255 = __noswap_vset_lane_p64(__noswap_vget_lane_p64(__s2_255, __p3_255), __s0_255, __p1_255); \ - __ret_255; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_lane_f64(__p0_256, __p1_256, __p2_256, __p3_256) __extension__ ({ \ - float64x1_t __s0_256 = __p0_256; \ - float64x1_t __s2_256 = __p2_256; \ - float64x1_t __ret_256; \ - __ret_256 = vset_lane_f64(vget_lane_f64(__s2_256, __p3_256), __s0_256, __p1_256); \ - __ret_256; \ -}) -#else -#define vcopy_lane_f64(__p0_257, __p1_257, __p2_257, __p3_257) __extension__ ({ \ - float64x1_t __s0_257 = __p0_257; \ - float64x1_t __s2_257 = __p2_257; \ - float64x1_t __ret_257; \ - __ret_257 = __noswap_vset_lane_f64(__noswap_vget_lane_f64(__s2_257, __p3_257), __s0_257, __p1_257); \ - __ret_257; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_p64(__p0_258, __p1_258, __p2_258, __p3_258) __extension__ ({ \ - poly64x2_t __s0_258 = __p0_258; \ - poly64x2_t __s2_258 = __p2_258; \ - poly64x2_t __ret_258; \ - __ret_258 = vsetq_lane_p64(vgetq_lane_p64(__s2_258, __p3_258), __s0_258, __p1_258); \ - __ret_258; \ -}) -#else -#define vcopyq_laneq_p64(__p0_259, __p1_259, __p2_259, __p3_259) __extension__ ({ \ - poly64x2_t __s0_259 = __p0_259; \ - poly64x2_t __s2_259 = __p2_259; \ - poly64x2_t __rev0_259; __rev0_259 = __builtin_shufflevector(__s0_259, __s0_259, 1, 0); \ - poly64x2_t __rev2_259; __rev2_259 = __builtin_shufflevector(__s2_259, __s2_259, 1, 0); \ - poly64x2_t __ret_259; \ - __ret_259 = __noswap_vsetq_lane_p64(__noswap_vgetq_lane_p64(__rev2_259, __p3_259), __rev0_259, __p1_259); \ - __ret_259 = __builtin_shufflevector(__ret_259, __ret_259, 1, 0); \ - __ret_259; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopyq_laneq_f64(__p0_260, __p1_260, __p2_260, __p3_260) __extension__ ({ \ - float64x2_t __s0_260 = __p0_260; \ - float64x2_t __s2_260 = __p2_260; \ - float64x2_t __ret_260; \ - __ret_260 = vsetq_lane_f64(vgetq_lane_f64(__s2_260, __p3_260), __s0_260, __p1_260); \ - __ret_260; \ -}) -#else -#define vcopyq_laneq_f64(__p0_261, __p1_261, __p2_261, __p3_261) __extension__ ({ \ - float64x2_t __s0_261 = __p0_261; \ - float64x2_t __s2_261 = __p2_261; \ - float64x2_t __rev0_261; __rev0_261 = __builtin_shufflevector(__s0_261, __s0_261, 1, 0); \ - float64x2_t __rev2_261; __rev2_261 = __builtin_shufflevector(__s2_261, __s2_261, 1, 0); \ - float64x2_t __ret_261; \ - __ret_261 = __noswap_vsetq_lane_f64(__noswap_vgetq_lane_f64(__rev2_261, __p3_261), __rev0_261, __p1_261); \ - __ret_261 = __builtin_shufflevector(__ret_261, __ret_261, 1, 0); \ - __ret_261; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_p64(__p0_262, __p1_262, __p2_262, __p3_262) __extension__ ({ \ - poly64x1_t __s0_262 = __p0_262; \ - poly64x2_t __s2_262 = __p2_262; \ - poly64x1_t __ret_262; \ - __ret_262 = vset_lane_p64(vgetq_lane_p64(__s2_262, __p3_262), __s0_262, __p1_262); \ - __ret_262; \ -}) -#else -#define vcopy_laneq_p64(__p0_263, __p1_263, __p2_263, __p3_263) __extension__ ({ \ - poly64x1_t __s0_263 = __p0_263; \ - poly64x2_t __s2_263 = __p2_263; \ - poly64x2_t __rev2_263; __rev2_263 = __builtin_shufflevector(__s2_263, __s2_263, 1, 0); \ - poly64x1_t __ret_263; \ - __ret_263 = __noswap_vset_lane_p64(__noswap_vgetq_lane_p64(__rev2_263, __p3_263), __s0_263, __p1_263); \ - __ret_263; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vcopy_laneq_f64(__p0_264, __p1_264, __p2_264, __p3_264) __extension__ ({ \ - float64x1_t __s0_264 = __p0_264; \ - float64x2_t __s2_264 = __p2_264; \ - float64x1_t __ret_264; \ - __ret_264 = vset_lane_f64(vgetq_lane_f64(__s2_264, __p3_264), __s0_264, __p1_264); \ - __ret_264; \ -}) -#else -#define vcopy_laneq_f64(__p0_265, __p1_265, __p2_265, __p3_265) __extension__ ({ \ - float64x1_t __s0_265 = __p0_265; \ - float64x2_t __s2_265 = __p2_265; \ - float64x2_t __rev2_265; __rev2_265 = __builtin_shufflevector(__s2_265, __s2_265, 1, 0); \ - float64x1_t __ret_265; \ - __ret_265 = __noswap_vset_lane_f64(__noswap_vgetq_lane_f64(__rev2_265, __p3_265), __s0_265, __p1_265); \ - __ret_265; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlal_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __ret; - __ret = vmlal_u8(__p0, vget_high_u8(__p1), vget_high_u8(__p2)); - return __ret; -} -#else -__ai uint16x8_t vmlal_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmlal_u8(__rev0, __noswap_vget_high_u8(__rev1), __noswap_vget_high_u8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlal_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __ret; - __ret = vmlal_u32(__p0, vget_high_u32(__p1), vget_high_u32(__p2)); - return __ret; -} -#else -__ai uint64x2_t vmlal_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmlal_u32(__rev0, __noswap_vget_high_u32(__rev1), __noswap_vget_high_u32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlal_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __ret; - __ret = vmlal_u16(__p0, vget_high_u16(__p1), vget_high_u16(__p2)); - return __ret; -} -#else -__ai uint32x4_t vmlal_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmlal_u16(__rev0, __noswap_vget_high_u16(__rev1), __noswap_vget_high_u16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlal_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __ret; - __ret = vmlal_s8(__p0, vget_high_s8(__p1), vget_high_s8(__p2)); - return __ret; -} -#else -__ai int16x8_t vmlal_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmlal_s8(__rev0, __noswap_vget_high_s8(__rev1), __noswap_vget_high_s8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __ret; - __ret = vmlal_s32(__p0, vget_high_s32(__p1), vget_high_s32(__p2)); - return __ret; -} -#else -__ai int64x2_t vmlal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmlal_s32(__rev0, __noswap_vget_high_s32(__rev1), __noswap_vget_high_s32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __ret; - __ret = vmlal_s16(__p0, vget_high_s16(__p1), vget_high_s16(__p2)); - return __ret; -} -#else -__ai int32x4_t vmlal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmlal_s16(__rev0, __noswap_vget_high_s16(__rev1), __noswap_vget_high_s16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlal_high_n_u32(uint64x2_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = vmlal_n_u32(__p0, vget_high_u32(__p1), __p2); - return __ret; -} -#else -__ai uint64x2_t vmlal_high_n_u32(uint64x2_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmlal_n_u32(__rev0, __noswap_vget_high_u32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlal_high_n_u16(uint32x4_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = vmlal_n_u16(__p0, vget_high_u16(__p1), __p2); - return __ret; -} -#else -__ai uint32x4_t vmlal_high_n_u16(uint32x4_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmlal_n_u16(__rev0, __noswap_vget_high_u16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlal_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = vmlal_n_s32(__p0, vget_high_s32(__p1), __p2); - return __ret; -} -#else -__ai int64x2_t vmlal_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmlal_n_s32(__rev0, __noswap_vget_high_s32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlal_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = vmlal_n_s16(__p0, vget_high_s16(__p1), __p2); - return __ret; -} -#else -__ai int32x4_t vmlal_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmlal_n_s16(__rev0, __noswap_vget_high_s16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vmlsl_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __ret; - __ret = vmlsl_u8(__p0, vget_high_u8(__p1), vget_high_u8(__p2)); - return __ret; -} -#else -__ai uint16x8_t vmlsl_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vmlsl_u8(__rev0, __noswap_vget_high_u8(__rev1), __noswap_vget_high_u8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlsl_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __ret; - __ret = vmlsl_u32(__p0, vget_high_u32(__p1), vget_high_u32(__p2)); - return __ret; -} -#else -__ai uint64x2_t vmlsl_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmlsl_u32(__rev0, __noswap_vget_high_u32(__rev1), __noswap_vget_high_u32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsl_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __ret; - __ret = vmlsl_u16(__p0, vget_high_u16(__p1), vget_high_u16(__p2)); - return __ret; -} -#else -__ai uint32x4_t vmlsl_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmlsl_u16(__rev0, __noswap_vget_high_u16(__rev1), __noswap_vget_high_u16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vmlsl_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __ret; - __ret = vmlsl_s8(__p0, vget_high_s8(__p1), vget_high_s8(__p2)); - return __ret; -} -#else -__ai int16x8_t vmlsl_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vmlsl_s8(__rev0, __noswap_vget_high_s8(__rev1), __noswap_vget_high_s8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlsl_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __ret; - __ret = vmlsl_s32(__p0, vget_high_s32(__p1), vget_high_s32(__p2)); - return __ret; -} -#else -__ai int64x2_t vmlsl_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmlsl_s32(__rev0, __noswap_vget_high_s32(__rev1), __noswap_vget_high_s32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsl_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __ret; - __ret = vmlsl_s16(__p0, vget_high_s16(__p1), vget_high_s16(__p2)); - return __ret; -} -#else -__ai int32x4_t vmlsl_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmlsl_s16(__rev0, __noswap_vget_high_s16(__rev1), __noswap_vget_high_s16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vmlsl_high_n_u32(uint64x2_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint64x2_t __ret; - __ret = vmlsl_n_u32(__p0, vget_high_u32(__p1), __p2); - return __ret; -} -#else -__ai uint64x2_t vmlsl_high_n_u32(uint64x2_t __p0, uint32x4_t __p1, uint32_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vmlsl_n_u32(__rev0, __noswap_vget_high_u32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vmlsl_high_n_u16(uint32x4_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint32x4_t __ret; - __ret = vmlsl_n_u16(__p0, vget_high_u16(__p1), __p2); - return __ret; -} -#else -__ai uint32x4_t vmlsl_high_n_u16(uint32x4_t __p0, uint16x8_t __p1, uint16_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vmlsl_n_u16(__rev0, __noswap_vget_high_u16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vmlsl_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __ret; - __ret = vmlsl_n_s32(__p0, vget_high_s32(__p1), __p2); - return __ret; -} -#else -__ai int64x2_t vmlsl_high_n_s32(int64x2_t __p0, int32x4_t __p1, int32_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vmlsl_n_s32(__rev0, __noswap_vget_high_s32(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vmlsl_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __ret; - __ret = vmlsl_n_s16(__p0, vget_high_s16(__p1), __p2); - return __ret; -} -#else -__ai int32x4_t vmlsl_high_n_s16(int32x4_t __p0, int16x8_t __p1, int16_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vmlsl_n_s16(__rev0, __noswap_vget_high_s16(__rev1), __p2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulx_lane_f64(__p0_266, __p1_266, __p2_266) __extension__ ({ \ - float64x1_t __s0_266 = __p0_266; \ - float64x1_t __s1_266 = __p1_266; \ - float64x1_t __ret_266; \ - float64_t __x_266 = vget_lane_f64(__s0_266, 0); \ - float64_t __y_266 = vget_lane_f64(__s1_266, __p2_266); \ - float64_t __z_266 = vmulxd_f64(__x_266, __y_266); \ - __ret_266 = vset_lane_f64(__z_266, __s0_266, __p2_266); \ - __ret_266; \ -}) -#else -#define vmulx_lane_f64(__p0_267, __p1_267, __p2_267) __extension__ ({ \ - float64x1_t __s0_267 = __p0_267; \ - float64x1_t __s1_267 = __p1_267; \ - float64x1_t __ret_267; \ - float64_t __x_267 = __noswap_vget_lane_f64(__s0_267, 0); \ - float64_t __y_267 = __noswap_vget_lane_f64(__s1_267, __p2_267); \ - float64_t __z_267 = __noswap_vmulxd_f64(__x_267, __y_267); \ - __ret_267 = __noswap_vset_lane_f64(__z_267, __s0_267, __p2_267); \ - __ret_267; \ -}) -#endif - -#ifdef __LITTLE_ENDIAN__ -#define vmulx_laneq_f64(__p0_268, __p1_268, __p2_268) __extension__ ({ \ - float64x1_t __s0_268 = __p0_268; \ - float64x2_t __s1_268 = __p1_268; \ - float64x1_t __ret_268; \ - float64_t __x_268 = vget_lane_f64(__s0_268, 0); \ - float64_t __y_268 = vgetq_lane_f64(__s1_268, __p2_268); \ - float64_t __z_268 = vmulxd_f64(__x_268, __y_268); \ - __ret_268 = vset_lane_f64(__z_268, __s0_268, 0); \ - __ret_268; \ -}) -#else -#define vmulx_laneq_f64(__p0_269, __p1_269, __p2_269) __extension__ ({ \ - float64x1_t __s0_269 = __p0_269; \ - float64x2_t __s1_269 = __p1_269; \ - float64x2_t __rev1_269; __rev1_269 = __builtin_shufflevector(__s1_269, __s1_269, 1, 0); \ - float64x1_t __ret_269; \ - float64_t __x_269 = __noswap_vget_lane_f64(__s0_269, 0); \ - float64_t __y_269 = __noswap_vgetq_lane_f64(__rev1_269, __p2_269); \ - float64_t __z_269 = __noswap_vmulxd_f64(__x_269, __y_269); \ - __ret_269 = __noswap_vset_lane_f64(__z_269, __s0_269, 0); \ - __ret_269; \ -}) -#endif - -#endif -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + vabdl_u8(__p1, __p2); - return __ret; -} -#else -__ai uint16x8_t vabal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __rev0 + __noswap_vabdl_u8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai uint16x8_t __noswap_vabal_u8(uint16x8_t __p0, uint8x8_t __p1, uint8x8_t __p2) { - uint16x8_t __ret; - __ret = __p0 + __noswap_vabdl_u8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vabal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 + vabdl_u32(__p1, __p2); - return __ret; -} -#else -__ai uint64x2_t vabal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - uint32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - uint64x2_t __ret; - __ret = __rev0 + __noswap_vabdl_u32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai uint64x2_t __noswap_vabal_u32(uint64x2_t __p0, uint32x2_t __p1, uint32x2_t __p2) { - uint64x2_t __ret; - __ret = __p0 + __noswap_vabdl_u32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + vabdl_u16(__p1, __p2); - return __ret; -} -#else -__ai uint32x4_t vabal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __rev0 + __noswap_vabdl_u16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai uint32x4_t __noswap_vabal_u16(uint32x4_t __p0, uint16x4_t __p1, uint16x4_t __p2) { - uint32x4_t __ret; - __ret = __p0 + __noswap_vabdl_u16(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + vabdl_s8(__p1, __p2); - return __ret; -} -#else -__ai int16x8_t vabal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int8x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __rev0 + __noswap_vabdl_s8(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -__ai int16x8_t __noswap_vabal_s8(int16x8_t __p0, int8x8_t __p1, int8x8_t __p2) { - int16x8_t __ret; - __ret = __p0 + __noswap_vabdl_s8(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vabal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 + vabdl_s32(__p1, __p2); - return __ret; -} -#else -__ai int64x2_t vabal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x2_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 1, 0); - int32x2_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 1, 0); - int64x2_t __ret; - __ret = __rev0 + __noswap_vabdl_s32(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -__ai int64x2_t __noswap_vabal_s32(int64x2_t __p0, int32x2_t __p1, int32x2_t __p2) { - int64x2_t __ret; - __ret = __p0 + __noswap_vabdl_s32(__p1, __p2); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + vabdl_s16(__p1, __p2); - return __ret; -} -#else -__ai int32x4_t vabal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int16x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __rev0 + __noswap_vabdl_s16(__rev1, __rev2); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -__ai int32x4_t __noswap_vabal_s16(int32x4_t __p0, int16x4_t __p1, int16x4_t __p2) { - int32x4_t __ret; - __ret = __p0 + __noswap_vabdl_s16(__p1, __p2); - return __ret; -} -#endif - -#if defined(__aarch64__) -#ifdef __LITTLE_ENDIAN__ -__ai uint16x8_t vabal_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __ret; - __ret = vabal_u8(__p0, vget_high_u8(__p1), vget_high_u8(__p2)); - return __ret; -} -#else -__ai uint16x8_t vabal_high_u8(uint16x8_t __p0, uint8x16_t __p1, uint8x16_t __p2) { - uint16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __ret; - __ret = __noswap_vabal_u8(__rev0, __noswap_vget_high_u8(__rev1), __noswap_vget_high_u8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint64x2_t vabal_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __ret; - __ret = vabal_u32(__p0, vget_high_u32(__p1), vget_high_u32(__p2)); - return __ret; -} -#else -__ai uint64x2_t vabal_high_u32(uint64x2_t __p0, uint32x4_t __p1, uint32x4_t __p2) { - uint64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - uint32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - uint32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - uint64x2_t __ret; - __ret = __noswap_vabal_u32(__rev0, __noswap_vget_high_u32(__rev1), __noswap_vget_high_u32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai uint32x4_t vabal_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __ret; - __ret = vabal_u16(__p0, vget_high_u16(__p1), vget_high_u16(__p2)); - return __ret; -} -#else -__ai uint32x4_t vabal_high_u16(uint32x4_t __p0, uint16x8_t __p1, uint16x8_t __p2) { - uint32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - uint16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - uint16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - uint32x4_t __ret; - __ret = __noswap_vabal_u16(__rev0, __noswap_vget_high_u16(__rev1), __noswap_vget_high_u16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int16x8_t vabal_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __ret; - __ret = vabal_s8(__p0, vget_high_s8(__p1), vget_high_s8(__p2)); - return __ret; -} -#else -__ai int16x8_t vabal_high_s8(int16x8_t __p0, int8x16_t __p1, int8x16_t __p2) { - int16x8_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int8x16_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __ret; - __ret = __noswap_vabal_s8(__rev0, __noswap_vget_high_s8(__rev1), __noswap_vget_high_s8(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 7, 6, 5, 4, 3, 2, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int64x2_t vabal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __ret; - __ret = vabal_s32(__p0, vget_high_s32(__p1), vget_high_s32(__p2)); - return __ret; -} -#else -__ai int64x2_t vabal_high_s32(int64x2_t __p0, int32x4_t __p1, int32x4_t __p2) { - int64x2_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 1, 0); - int32x4_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 3, 2, 1, 0); - int32x4_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 3, 2, 1, 0); - int64x2_t __ret; - __ret = __noswap_vabal_s32(__rev0, __noswap_vget_high_s32(__rev1), __noswap_vget_high_s32(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 1, 0); - return __ret; -} -#endif - -#ifdef __LITTLE_ENDIAN__ -__ai int32x4_t vabal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __ret; - __ret = vabal_s16(__p0, vget_high_s16(__p1), vget_high_s16(__p2)); - return __ret; -} -#else -__ai int32x4_t vabal_high_s16(int32x4_t __p0, int16x8_t __p1, int16x8_t __p2) { - int32x4_t __rev0; __rev0 = __builtin_shufflevector(__p0, __p0, 3, 2, 1, 0); - int16x8_t __rev1; __rev1 = __builtin_shufflevector(__p1, __p1, 7, 6, 5, 4, 3, 2, 1, 0); - int16x8_t __rev2; __rev2 = __builtin_shufflevector(__p2, __p2, 7, 6, 5, 4, 3, 2, 1, 0); - int32x4_t __ret; - __ret = __noswap_vabal_s16(__rev0, __noswap_vget_high_s16(__rev1), __noswap_vget_high_s16(__rev2)); - __ret = __builtin_shufflevector(__ret, __ret, 3, 2, 1, 0); - return __ret; -} -#endif - -#endif - -#undef __ai - -#endif /* __ARM_NEON_H */ diff --git a/External/CastXML/share/castxml/clang/include/avx2intrin.h b/External/CastXML/share/castxml/clang/include/avx2intrin.h deleted file mode 100644 index cfa91410a..000000000 --- a/External/CastXML/share/castxml/clang/include/avx2intrin.h +++ /dev/null @@ -1,1256 +0,0 @@ -/*===---- avx2intrin.h - AVX2 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX2INTRIN_H -#define __AVX2INTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx2"))) - -/* SSE4 Multiple Packed Sums of Absolute Difference. */ -#define _mm256_mpsadbw_epu8(X, Y, M) __builtin_ia32_mpsadbw256((X), (Y), (M)) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_abs_epi8(__m256i __a) -{ - return (__m256i)__builtin_ia32_pabsb256((__v32qi)__a); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_abs_epi16(__m256i __a) -{ - return (__m256i)__builtin_ia32_pabsw256((__v16hi)__a); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_abs_epi32(__m256i __a) -{ - return (__m256i)__builtin_ia32_pabsd256((__v8si)__a); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_packs_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_packsswb256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_packs_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_packssdw256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_packus_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_packuswb256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_packus_epi32(__m256i __V1, __m256i __V2) -{ - return (__m256i) __builtin_ia32_packusdw256((__v8si)__V1, (__v8si)__V2); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_add_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)((__v32qi)__a + (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_add_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)((__v16hi)__a + (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_add_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)((__v8si)__a + (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_add_epi64(__m256i __a, __m256i __b) -{ - return __a + __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_adds_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_paddsb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_adds_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_paddsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_adds_epu8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_paddusb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_adds_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_paddusw256((__v16hi)__a, (__v16hi)__b); -} - -#define _mm256_alignr_epi8(a, b, n) __extension__ ({ \ - __m256i __a = (a); \ - __m256i __b = (b); \ - (__m256i)__builtin_ia32_palignr256((__v32qi)__a, (__v32qi)__b, (n)); }) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_and_si256(__m256i __a, __m256i __b) -{ - return __a & __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_andnot_si256(__m256i __a, __m256i __b) -{ - return ~__a & __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_avg_epu8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pavgb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_avg_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pavgw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_blendv_epi8(__m256i __V1, __m256i __V2, __m256i __M) -{ - return (__m256i)__builtin_ia32_pblendvb256((__v32qi)__V1, (__v32qi)__V2, - (__v32qi)__M); -} - -#define _mm256_blend_epi16(V1, V2, M) __extension__ ({ \ - __m256i __V1 = (V1); \ - __m256i __V2 = (V2); \ - (__m256i)__builtin_shufflevector((__v16hi)__V1, (__v16hi)__V2, \ - (((M) & 0x01) ? 16 : 0), \ - (((M) & 0x02) ? 17 : 1), \ - (((M) & 0x04) ? 18 : 2), \ - (((M) & 0x08) ? 19 : 3), \ - (((M) & 0x10) ? 20 : 4), \ - (((M) & 0x20) ? 21 : 5), \ - (((M) & 0x40) ? 22 : 6), \ - (((M) & 0x80) ? 23 : 7), \ - (((M) & 0x01) ? 24 : 8), \ - (((M) & 0x02) ? 25 : 9), \ - (((M) & 0x04) ? 26 : 10), \ - (((M) & 0x08) ? 27 : 11), \ - (((M) & 0x10) ? 28 : 12), \ - (((M) & 0x20) ? 29 : 13), \ - (((M) & 0x40) ? 30 : 14), \ - (((M) & 0x80) ? 31 : 15)); }) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)((__v32qi)__a == (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)((__v16hi)__a == (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)((__v8si)__a == (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi64(__m256i __a, __m256i __b) -{ - return (__m256i)(__a == __b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)((__v32qi)__a > (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)((__v16hi)__a > (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)((__v8si)__a > (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi64(__m256i __a, __m256i __b) -{ - return (__m256i)(__a > __b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hadd_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phaddw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hadd_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phaddd256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hadds_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phaddsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hsub_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phsubw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hsub_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phsubd256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_hsubs_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_phsubsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maddubs_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaddubsw256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_madd_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaddwd256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxsb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxsd256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epu8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxub256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxuw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epu32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmaxud256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminsb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminsd256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epu8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminub256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epu32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pminud256((__v8si)__a, (__v8si)__b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm256_movemask_epi8(__m256i __a) -{ - return __builtin_ia32_pmovmskb256((__v32qi)__a); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi8_epi16(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxbw256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi8_epi32(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxbd256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi8_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxbq256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi16_epi32(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxwd256((__v8hi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi16_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxwq256((__v8hi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepi32_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovsxdq256((__v4si)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu8_epi16(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxbw256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu8_epi32(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxbd256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu8_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxbq256((__v16qi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu16_epi32(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxwd256((__v8hi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu16_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxwq256((__v8hi)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtepu32_epi64(__m128i __V) -{ - return (__m256i)__builtin_ia32_pmovzxdq256((__v4si)__V); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mul_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmuldq256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mulhrs_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmulhrsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mulhi_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmulhuw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mulhi_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pmulhw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mullo_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)((__v16hi)__a * (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mullo_epi32 (__m256i __a, __m256i __b) -{ - return (__m256i)((__v8si)__a * (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mul_epu32(__m256i __a, __m256i __b) -{ - return __builtin_ia32_pmuludq256((__v8si)__a, (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_or_si256(__m256i __a, __m256i __b) -{ - return __a | __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sad_epu8(__m256i __a, __m256i __b) -{ - return __builtin_ia32_psadbw256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_shuffle_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_pshufb256((__v32qi)__a, (__v32qi)__b); -} - -#define _mm256_shuffle_epi32(a, imm) __extension__ ({ \ - __m256i __a = (a); \ - (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)_mm256_set1_epi32(0), \ - (imm) & 0x3, ((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ - 4 + (((imm) & 0x03) >> 0), \ - 4 + (((imm) & 0x0c) >> 2), \ - 4 + (((imm) & 0x30) >> 4), \ - 4 + (((imm) & 0xc0) >> 6)); }) - -#define _mm256_shufflehi_epi16(a, imm) __extension__ ({ \ - __m256i __a = (a); \ - (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \ - 0, 1, 2, 3, \ - 4 + (((imm) & 0x03) >> 0), \ - 4 + (((imm) & 0x0c) >> 2), \ - 4 + (((imm) & 0x30) >> 4), \ - 4 + (((imm) & 0xc0) >> 6), \ - 8, 9, 10, 11, \ - 12 + (((imm) & 0x03) >> 0), \ - 12 + (((imm) & 0x0c) >> 2), \ - 12 + (((imm) & 0x30) >> 4), \ - 12 + (((imm) & 0xc0) >> 6)); }) - -#define _mm256_shufflelo_epi16(a, imm) __extension__ ({ \ - __m256i __a = (a); \ - (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \ - (imm) & 0x3,((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ - 4, 5, 6, 7, \ - 8 + (((imm) & 0x03) >> 0), \ - 8 + (((imm) & 0x0c) >> 2), \ - 8 + (((imm) & 0x30) >> 4), \ - 8 + (((imm) & 0xc0) >> 6), \ - 12, 13, 14, 15); }) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sign_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psignb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sign_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psignw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sign_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psignd256((__v8si)__a, (__v8si)__b); -} - -#define _mm256_slli_si256(a, count) __extension__ ({ \ - __m256i __a = (a); \ - (__m256i)__builtin_ia32_pslldqi256(__a, (count)*8); }) - -#define _mm256_bslli_epi128(a, count) _mm256_slli_si256((a), (count)) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_slli_epi16(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_psllwi256((__v16hi)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sll_epi16(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_psllw256((__v16hi)__a, (__v8hi)__count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_slli_epi32(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_pslldi256((__v8si)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sll_epi32(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_pslld256((__v8si)__a, (__v4si)__count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_slli_epi64(__m256i __a, int __count) -{ - return __builtin_ia32_psllqi256(__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sll_epi64(__m256i __a, __m128i __count) -{ - return __builtin_ia32_psllq256(__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srai_epi16(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_psrawi256((__v16hi)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sra_epi16(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_psraw256((__v16hi)__a, (__v8hi)__count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srai_epi32(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_psradi256((__v8si)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sra_epi32(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_psrad256((__v8si)__a, (__v4si)__count); -} - -#define _mm256_srli_si256(a, count) __extension__ ({ \ - __m256i __a = (a); \ - (__m256i)__builtin_ia32_psrldqi256(__a, (count)*8); }) - -#define _mm256_bsrli_epi128(a, count) _mm256_srli_si256((a), (count)) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srli_epi16(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_psrlwi256((__v16hi)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srl_epi16(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_psrlw256((__v16hi)__a, (__v8hi)__count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srli_epi32(__m256i __a, int __count) -{ - return (__m256i)__builtin_ia32_psrldi256((__v8si)__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srl_epi32(__m256i __a, __m128i __count) -{ - return (__m256i)__builtin_ia32_psrld256((__v8si)__a, (__v4si)__count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srli_epi64(__m256i __a, int __count) -{ - return __builtin_ia32_psrlqi256(__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srl_epi64(__m256i __a, __m128i __count) -{ - return __builtin_ia32_psrlq256(__a, __count); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sub_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)((__v32qi)__a - (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sub_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)((__v16hi)__a - (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sub_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)((__v8si)__a - (__v8si)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sub_epi64(__m256i __a, __m256i __b) -{ - return __a - __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_subs_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psubsb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_subs_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psubsw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_subs_epu8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psubusb256((__v32qi)__a, (__v32qi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_subs_epu16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_psubusw256((__v16hi)__a, (__v16hi)__b); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpackhi_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 8, 32+8, 9, 32+9, 10, 32+10, 11, 32+11, 12, 32+12, 13, 32+13, 14, 32+14, 15, 32+15, 24, 32+24, 25, 32+25, 26, 32+26, 27, 32+27, 28, 32+28, 29, 32+29, 30, 32+30, 31, 32+31); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpackhi_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpackhi_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 2, 8+2, 3, 8+3, 6, 8+6, 7, 8+7); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpackhi_epi64(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector(__a, __b, 1, 4+1, 3, 4+3); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpacklo_epi8(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 0, 32+0, 1, 32+1, 2, 32+2, 3, 32+3, 4, 32+4, 5, 32+5, 6, 32+6, 7, 32+7, 16, 32+16, 17, 32+17, 18, 32+18, 19, 32+19, 20, 32+20, 21, 32+21, 22, 32+22, 23, 32+23); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpacklo_epi16(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpacklo_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 0, 8+0, 1, 8+1, 4, 8+4, 5, 8+5); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_unpacklo_epi64(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_shufflevector(__a, __b, 0, 4+0, 2, 4+2); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_xor_si256(__m256i __a, __m256i __b) -{ - return __a ^ __b; -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_stream_load_si256(__m256i *__V) -{ - return (__m256i)__builtin_ia32_movntdqa256((__v4di *)__V); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_broadcastss_ps(__m128 __X) -{ - return (__m128)__builtin_ia32_vbroadcastss_ps((__v4sf)__X); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_broadcastsd_pd(__m128d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 0); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_broadcastss_ps(__m128 __X) -{ - return (__m256)__builtin_ia32_vbroadcastss_ps256((__v4sf)__X); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_broadcastsd_pd(__m128d __X) -{ - return (__m256d)__builtin_ia32_vbroadcastsd_pd256((__v2df)__X); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_broadcastsi128_si256(__m128i __X) -{ - return (__m256i)__builtin_shufflevector(__X, __X, 0, 1, 0, 1); -} - -#define _mm_blend_epi32(V1, V2, M) __extension__ ({ \ - __m128i __V1 = (V1); \ - __m128i __V2 = (V2); \ - (__m128i)__builtin_shufflevector((__v4si)__V1, (__v4si)__V2, \ - (((M) & 0x01) ? 4 : 0), \ - (((M) & 0x02) ? 5 : 1), \ - (((M) & 0x04) ? 6 : 2), \ - (((M) & 0x08) ? 7 : 3)); }) - -#define _mm256_blend_epi32(V1, V2, M) __extension__ ({ \ - __m256i __V1 = (V1); \ - __m256i __V2 = (V2); \ - (__m256i)__builtin_shufflevector((__v8si)__V1, (__v8si)__V2, \ - (((M) & 0x01) ? 8 : 0), \ - (((M) & 0x02) ? 9 : 1), \ - (((M) & 0x04) ? 10 : 2), \ - (((M) & 0x08) ? 11 : 3), \ - (((M) & 0x10) ? 12 : 4), \ - (((M) & 0x20) ? 13 : 5), \ - (((M) & 0x40) ? 14 : 6), \ - (((M) & 0x80) ? 15 : 7)); }) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_broadcastb_epi8(__m128i __X) -{ - return (__m256i)__builtin_ia32_pbroadcastb256((__v16qi)__X); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_broadcastw_epi16(__m128i __X) -{ - return (__m256i)__builtin_ia32_pbroadcastw256((__v8hi)__X); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_broadcastd_epi32(__m128i __X) -{ - return (__m256i)__builtin_ia32_pbroadcastd256((__v4si)__X); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_broadcastq_epi64(__m128i __X) -{ - return (__m256i)__builtin_ia32_pbroadcastq256(__X); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_broadcastb_epi8(__m128i __X) -{ - return (__m128i)__builtin_ia32_pbroadcastb128((__v16qi)__X); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_broadcastw_epi16(__m128i __X) -{ - return (__m128i)__builtin_ia32_pbroadcastw128((__v8hi)__X); -} - - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_broadcastd_epi32(__m128i __X) -{ - return (__m128i)__builtin_ia32_pbroadcastd128((__v4si)__X); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_broadcastq_epi64(__m128i __X) -{ - return (__m128i)__builtin_ia32_pbroadcastq128(__X); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_permutevar8x32_epi32(__m256i __a, __m256i __b) -{ - return (__m256i)__builtin_ia32_permvarsi256((__v8si)__a, (__v8si)__b); -} - -#define _mm256_permute4x64_pd(V, M) __extension__ ({ \ - __m256d __V = (V); \ - (__m256d)__builtin_shufflevector((__v4df)__V, (__v4df) _mm256_setzero_pd(), \ - (M) & 0x3, ((M) & 0xc) >> 2, \ - ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); }) - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_permutevar8x32_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_permvarsf256((__v8sf)__a, (__v8sf)__b); -} - -#define _mm256_permute4x64_epi64(V, M) __extension__ ({ \ - __m256i __V = (V); \ - (__m256i)__builtin_shufflevector((__v4di)__V, (__v4di) _mm256_setzero_si256(), \ - (M) & 0x3, ((M) & 0xc) >> 2, \ - ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); }) - -#define _mm256_permute2x128_si256(V1, V2, M) __extension__ ({ \ - __m256i __V1 = (V1); \ - __m256i __V2 = (V2); \ - (__m256i)__builtin_ia32_permti256(__V1, __V2, (M)); }) - -#define _mm256_extracti128_si256(V, M) __extension__ ({ \ - (__m128i)__builtin_shufflevector( \ - (__v4di)(V), \ - (__v4di)(_mm256_setzero_si256()), \ - (((M) & 1) ? 2 : 0), \ - (((M) & 1) ? 3 : 1) );}) - -#define _mm256_inserti128_si256(V1, V2, M) __extension__ ({ \ - (__m256i)__builtin_shufflevector( \ - (__v4di)(V1), \ - (__v4di)_mm256_castsi128_si256((__m128i)(V2)), \ - (((M) & 1) ? 0 : 4), \ - (((M) & 1) ? 1 : 5), \ - (((M) & 1) ? 4 : 2), \ - (((M) & 1) ? 5 : 3) );}) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskload_epi32(int const *__X, __m256i __M) -{ - return (__m256i)__builtin_ia32_maskloadd256((const __v8si *)__X, (__v8si)__M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskload_epi64(long long const *__X, __m256i __M) -{ - return (__m256i)__builtin_ia32_maskloadq256((const __v4di *)__X, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskload_epi32(int const *__X, __m128i __M) -{ - return (__m128i)__builtin_ia32_maskloadd((const __v4si *)__X, (__v4si)__M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskload_epi64(long long const *__X, __m128i __M) -{ - return (__m128i)__builtin_ia32_maskloadq((const __v2di *)__X, (__v2di)__M); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_maskstore_epi32(int *__X, __m256i __M, __m256i __Y) -{ - __builtin_ia32_maskstored256((__v8si *)__X, (__v8si)__M, (__v8si)__Y); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_maskstore_epi64(long long *__X, __m256i __M, __m256i __Y) -{ - __builtin_ia32_maskstoreq256((__v4di *)__X, __M, __Y); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_maskstore_epi32(int *__X, __m128i __M, __m128i __Y) -{ - __builtin_ia32_maskstored((__v4si *)__X, (__v4si)__M, (__v4si)__Y); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_maskstore_epi64(long long *__X, __m128i __M, __m128i __Y) -{ - __builtin_ia32_maskstoreq(( __v2di *)__X, __M, __Y); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sllv_epi32(__m256i __X, __m256i __Y) -{ - return (__m256i)__builtin_ia32_psllv8si((__v8si)__X, (__v8si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sllv_epi32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_psllv4si((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_sllv_epi64(__m256i __X, __m256i __Y) -{ - return (__m256i)__builtin_ia32_psllv4di(__X, __Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sllv_epi64(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_psllv2di(__X, __Y); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srav_epi32(__m256i __X, __m256i __Y) -{ - return (__m256i)__builtin_ia32_psrav8si((__v8si)__X, (__v8si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srav_epi32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_psrav4si((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srlv_epi32(__m256i __X, __m256i __Y) -{ - return (__m256i)__builtin_ia32_psrlv8si((__v8si)__X, (__v8si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srlv_epi32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_psrlv4si((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_srlv_epi64(__m256i __X, __m256i __Y) -{ - return (__m256i)__builtin_ia32_psrlv4di(__X, __Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srlv_epi64(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_psrlv2di(__X, __Y); -} - -#define _mm_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \ - __m128d __a = (a); \ - double const *__m = (m); \ - __m128i __i = (i); \ - __m128d __mask = (mask); \ - (__m128d)__builtin_ia32_gatherd_pd((__v2df)__a, (const __v2df *)__m, \ - (__v4si)__i, (__v2df)__mask, (s)); }) - -#define _mm256_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \ - __m256d __a = (a); \ - double const *__m = (m); \ - __m128i __i = (i); \ - __m256d __mask = (mask); \ - (__m256d)__builtin_ia32_gatherd_pd256((__v4df)__a, (const __v4df *)__m, \ - (__v4si)__i, (__v4df)__mask, (s)); }) - -#define _mm_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \ - __m128d __a = (a); \ - double const *__m = (m); \ - __m128i __i = (i); \ - __m128d __mask = (mask); \ - (__m128d)__builtin_ia32_gatherq_pd((__v2df)__a, (const __v2df *)__m, \ - (__v2di)__i, (__v2df)__mask, (s)); }) - -#define _mm256_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \ - __m256d __a = (a); \ - double const *__m = (m); \ - __m256i __i = (i); \ - __m256d __mask = (mask); \ - (__m256d)__builtin_ia32_gatherq_pd256((__v4df)__a, (const __v4df *)__m, \ - (__v4di)__i, (__v4df)__mask, (s)); }) - -#define _mm_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \ - __m128 __a = (a); \ - float const *__m = (m); \ - __m128i __i = (i); \ - __m128 __mask = (mask); \ - (__m128)__builtin_ia32_gatherd_ps((__v4sf)__a, (const __v4sf *)__m, \ - (__v4si)__i, (__v4sf)__mask, (s)); }) - -#define _mm256_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \ - __m256 __a = (a); \ - float const *__m = (m); \ - __m256i __i = (i); \ - __m256 __mask = (mask); \ - (__m256)__builtin_ia32_gatherd_ps256((__v8sf)__a, (const __v8sf *)__m, \ - (__v8si)__i, (__v8sf)__mask, (s)); }) - -#define _mm_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \ - __m128 __a = (a); \ - float const *__m = (m); \ - __m128i __i = (i); \ - __m128 __mask = (mask); \ - (__m128)__builtin_ia32_gatherq_ps((__v4sf)__a, (const __v4sf *)__m, \ - (__v2di)__i, (__v4sf)__mask, (s)); }) - -#define _mm256_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \ - __m128 __a = (a); \ - float const *__m = (m); \ - __m256i __i = (i); \ - __m128 __mask = (mask); \ - (__m128)__builtin_ia32_gatherq_ps256((__v4sf)__a, (const __v4sf *)__m, \ - (__v4di)__i, (__v4sf)__mask, (s)); }) - -#define _mm_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \ - __m128i __a = (a); \ - int const *__m = (m); \ - __m128i __i = (i); \ - __m128i __mask = (mask); \ - (__m128i)__builtin_ia32_gatherd_d((__v4si)__a, (const __v4si *)__m, \ - (__v4si)__i, (__v4si)__mask, (s)); }) - -#define _mm256_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \ - __m256i __a = (a); \ - int const *__m = (m); \ - __m256i __i = (i); \ - __m256i __mask = (mask); \ - (__m256i)__builtin_ia32_gatherd_d256((__v8si)__a, (const __v8si *)__m, \ - (__v8si)__i, (__v8si)__mask, (s)); }) - -#define _mm_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \ - __m128i __a = (a); \ - int const *__m = (m); \ - __m128i __i = (i); \ - __m128i __mask = (mask); \ - (__m128i)__builtin_ia32_gatherq_d((__v4si)__a, (const __v4si *)__m, \ - (__v2di)__i, (__v4si)__mask, (s)); }) - -#define _mm256_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \ - __m128i __a = (a); \ - int const *__m = (m); \ - __m256i __i = (i); \ - __m128i __mask = (mask); \ - (__m128i)__builtin_ia32_gatherq_d256((__v4si)__a, (const __v4si *)__m, \ - (__v4di)__i, (__v4si)__mask, (s)); }) - -#define _mm_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \ - __m128i __a = (a); \ - long long const *__m = (m); \ - __m128i __i = (i); \ - __m128i __mask = (mask); \ - (__m128i)__builtin_ia32_gatherd_q((__v2di)__a, (const __v2di *)__m, \ - (__v4si)__i, (__v2di)__mask, (s)); }) - -#define _mm256_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \ - __m256i __a = (a); \ - long long const *__m = (m); \ - __m128i __i = (i); \ - __m256i __mask = (mask); \ - (__m256i)__builtin_ia32_gatherd_q256((__v4di)__a, (const __v4di *)__m, \ - (__v4si)__i, (__v4di)__mask, (s)); }) - -#define _mm_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \ - __m128i __a = (a); \ - long long const *__m = (m); \ - __m128i __i = (i); \ - __m128i __mask = (mask); \ - (__m128i)__builtin_ia32_gatherq_q((__v2di)__a, (const __v2di *)__m, \ - (__v2di)__i, (__v2di)__mask, (s)); }) - -#define _mm256_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \ - __m256i __a = (a); \ - long long const *__m = (m); \ - __m256i __i = (i); \ - __m256i __mask = (mask); \ - (__m256i)__builtin_ia32_gatherq_q256((__v4di)__a, (const __v4di *)__m, \ - (__v4di)__i, (__v4di)__mask, (s)); }) - -#define _mm_i32gather_pd(m, i, s) __extension__ ({ \ - double const *__m = (m); \ - __m128i __i = (i); \ - (__m128d)__builtin_ia32_gatherd_pd((__v2df)_mm_setzero_pd(), \ - (const __v2df *)__m, (__v4si)__i, \ - (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); }) - -#define _mm256_i32gather_pd(m, i, s) __extension__ ({ \ - double const *__m = (m); \ - __m128i __i = (i); \ - (__m256d)__builtin_ia32_gatherd_pd256((__v4df)_mm256_setzero_pd(), \ - (const __v4df *)__m, (__v4si)__i, \ - (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); }) - -#define _mm_i64gather_pd(m, i, s) __extension__ ({ \ - double const *__m = (m); \ - __m128i __i = (i); \ - (__m128d)__builtin_ia32_gatherq_pd((__v2df)_mm_setzero_pd(), \ - (const __v2df *)__m, (__v2di)__i, \ - (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); }) - -#define _mm256_i64gather_pd(m, i, s) __extension__ ({ \ - double const *__m = (m); \ - __m256i __i = (i); \ - (__m256d)__builtin_ia32_gatherq_pd256((__v4df)_mm256_setzero_pd(), \ - (const __v4df *)__m, (__v4di)__i, \ - (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); }) - -#define _mm_i32gather_ps(m, i, s) __extension__ ({ \ - float const *__m = (m); \ - __m128i __i = (i); \ - (__m128)__builtin_ia32_gatherd_ps((__v4sf)_mm_setzero_ps(), \ - (const __v4sf *)__m, (__v4si)__i, \ - (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) - -#define _mm256_i32gather_ps(m, i, s) __extension__ ({ \ - float const *__m = (m); \ - __m256i __i = (i); \ - (__m256)__builtin_ia32_gatherd_ps256((__v8sf)_mm256_setzero_ps(), \ - (const __v8sf *)__m, (__v8si)__i, \ - (__v8sf)_mm256_set1_ps((float)(int)-1), (s)); }) - -#define _mm_i64gather_ps(m, i, s) __extension__ ({ \ - float const *__m = (m); \ - __m128i __i = (i); \ - (__m128)__builtin_ia32_gatherq_ps((__v4sf)_mm_setzero_ps(), \ - (const __v4sf *)__m, (__v2di)__i, \ - (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) - -#define _mm256_i64gather_ps(m, i, s) __extension__ ({ \ - float const *__m = (m); \ - __m256i __i = (i); \ - (__m128)__builtin_ia32_gatherq_ps256((__v4sf)_mm_setzero_ps(), \ - (const __v4sf *)__m, (__v4di)__i, \ - (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) - -#define _mm_i32gather_epi32(m, i, s) __extension__ ({ \ - int const *__m = (m); \ - __m128i __i = (i); \ - (__m128i)__builtin_ia32_gatherd_d((__v4si)_mm_setzero_si128(), \ - (const __v4si *)__m, (__v4si)__i, \ - (__v4si)_mm_set1_epi32(-1), (s)); }) - -#define _mm256_i32gather_epi32(m, i, s) __extension__ ({ \ - int const *__m = (m); \ - __m256i __i = (i); \ - (__m256i)__builtin_ia32_gatherd_d256((__v8si)_mm256_setzero_si256(), \ - (const __v8si *)__m, (__v8si)__i, \ - (__v8si)_mm256_set1_epi32(-1), (s)); }) - -#define _mm_i64gather_epi32(m, i, s) __extension__ ({ \ - int const *__m = (m); \ - __m128i __i = (i); \ - (__m128i)__builtin_ia32_gatherq_d((__v4si)_mm_setzero_si128(), \ - (const __v4si *)__m, (__v2di)__i, \ - (__v4si)_mm_set1_epi32(-1), (s)); }) - -#define _mm256_i64gather_epi32(m, i, s) __extension__ ({ \ - int const *__m = (m); \ - __m256i __i = (i); \ - (__m128i)__builtin_ia32_gatherq_d256((__v4si)_mm_setzero_si128(), \ - (const __v4si *)__m, (__v4di)__i, \ - (__v4si)_mm_set1_epi32(-1), (s)); }) - -#define _mm_i32gather_epi64(m, i, s) __extension__ ({ \ - long long const *__m = (m); \ - __m128i __i = (i); \ - (__m128i)__builtin_ia32_gatherd_q((__v2di)_mm_setzero_si128(), \ - (const __v2di *)__m, (__v4si)__i, \ - (__v2di)_mm_set1_epi64x(-1), (s)); }) - -#define _mm256_i32gather_epi64(m, i, s) __extension__ ({ \ - long long const *__m = (m); \ - __m128i __i = (i); \ - (__m256i)__builtin_ia32_gatherd_q256((__v4di)_mm256_setzero_si256(), \ - (const __v4di *)__m, (__v4si)__i, \ - (__v4di)_mm256_set1_epi64x(-1), (s)); }) - -#define _mm_i64gather_epi64(m, i, s) __extension__ ({ \ - long long const *__m = (m); \ - __m128i __i = (i); \ - (__m128i)__builtin_ia32_gatherq_q((__v2di)_mm_setzero_si128(), \ - (const __v2di *)__m, (__v2di)__i, \ - (__v2di)_mm_set1_epi64x(-1), (s)); }) - -#define _mm256_i64gather_epi64(m, i, s) __extension__ ({ \ - long long const *__m = (m); \ - __m256i __i = (i); \ - (__m256i)__builtin_ia32_gatherq_q256((__v4di)_mm256_setzero_si256(), \ - (const __v4di *)__m, (__v4di)__i, \ - (__v4di)_mm256_set1_epi64x(-1), (s)); }) - -#undef __DEFAULT_FN_ATTRS - -#endif /* __AVX2INTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/avx512bwintrin.h b/External/CastXML/share/castxml/clang/include/avx512bwintrin.h deleted file mode 100644 index f289ed71a..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512bwintrin.h +++ /dev/null @@ -1,1542 +0,0 @@ -/*===------------- avx512bwintrin.h - AVX512BW intrinsics ------------------=== - * - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512BWINTRIN_H -#define __AVX512BWINTRIN_H - -typedef unsigned int __mmask32; -typedef unsigned long long __mmask64; -typedef char __v64qi __attribute__ ((__vector_size__ (64))); -typedef short __v32hi __attribute__ ((__vector_size__ (64))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bw"))) - -static __inline __v64qi __DEFAULT_FN_ATTRS -_mm512_setzero_qi(void) { - return (__v64qi){ 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 }; -} - -static __inline __v32hi __DEFAULT_FN_ATTRS -_mm512_setzero_hi(void) { - return (__v32hi){ 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 }; -} - -/* Integer compare */ - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_pcmpeqb512_mask((__v64qi)__a, (__v64qi)__b, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_pcmpeqb512_mask((__v64qi)__a, (__v64qi)__b, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 0, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 0, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_pcmpeqw512_mask((__v32hi)__a, (__v32hi)__b, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_pcmpeqw512_mask((__v32hi)__a, (__v32hi)__b, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 0, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 0, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpge_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 5, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 5, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpge_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 5, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 5, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpge_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 5, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 5, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpge_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 5, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 5, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_pcmpgtb512_mask((__v64qi)__a, (__v64qi)__b, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_pcmpgtb512_mask((__v64qi)__a, (__v64qi)__b, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 6, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 6, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_pcmpgtw512_mask((__v32hi)__a, (__v32hi)__b, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_pcmpgtw512_mask((__v32hi)__a, (__v32hi)__b, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 6, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 6, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmple_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 2, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 2, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmple_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 2, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 2, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmple_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 2, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 2, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmple_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 2, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 2, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmplt_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 1, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 1, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmplt_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 1, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 1, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmplt_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 1, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 1, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmplt_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 1, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 1, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epi8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 4, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 4, - __u); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epu8_mask(__m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 4, - (__mmask64)-1); -} - -static __inline__ __mmask64 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 4, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epi16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 4, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 4, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epu16_mask(__m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 4, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 4, - __u); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_add_epi8 (__m512i __A, __m512i __B) { - return (__m512i) ((__v64qi) __A + (__v64qi) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_sub_epi8 (__m512i __A, __m512i __B) { - return (__m512i) ((__v64qi) __A - (__v64qi) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_add_epi16 (__m512i __A, __m512i __B) { - return (__m512i) ((__v32hi) __A + (__v32hi) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_sub_epi16 (__m512i __A, __m512i __B) { - return (__m512i) ((__v32hi) __A - (__v32hi) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mullo_epi16 (__m512i __A, __m512i __B) { - return (__m512i) ((__v32hi) __A * (__v32hi) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_blend_epi8 (__mmask64 __U, __m512i __A, __m512i __W) -{ - return (__m512i) __builtin_ia32_blendmb_512_mask ((__v64qi) __A, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_blend_epi16 (__mmask32 __U, __m512i __A, __m512i __W) -{ - return (__m512i) __builtin_ia32_blendmw_512_mask ((__v32hi) __A, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_abs_epi8 (__m512i __A) -{ - return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_abs_epi8 (__m512i __W, __mmask64 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_abs_epi8 (__mmask64 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_abs_epi16 (__m512i __A) -{ - return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_abs_epi16 (__m512i __W, __mmask32 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_abs_epi16 (__mmask32 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_packs_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_packs_epi32 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) _mm512_setzero_hi(), - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_packs_epi32 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) __W, - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_packs_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_packs_epi16 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_packs_epi16 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) _mm512_setzero_qi(), - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_packus_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_packus_epi32 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) _mm512_setzero_hi(), - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_packus_epi32 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, - (__v16si) __B, - (__v32hi) __W, - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_packus_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_packus_epi16 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_packus_epi16 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_adds_epi8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_adds_epi8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_adds_epi8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_adds_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_adds_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_adds_epi16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_adds_epu8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_adds_epu8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_adds_epu8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_adds_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_adds_epu16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_adds_epu16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_avg_epu8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_avg_epu8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_avg_epu8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_avg_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_avg_epu16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_max_epi8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_max_epi8 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_max_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_max_epi16 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_max_epu8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_max_epu8 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_max_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_max_epu16 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_min_epi8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_min_epi8 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_min_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_min_epi16 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_min_epu8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_min_epu8 (__mmask64 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_min_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_min_epu16 (__mmask32 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_min_epu16 (__m512i __W, __mmask32 __M, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_shuffle_epi8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_shuffle_epi8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_shuffle_epi8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_subs_epi8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_subs_epi8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_subs_epi8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_subs_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_subs_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_subs_epi16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_subs_epu8 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_subs_epu8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_subs_epu8 (__mmask64 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_subs_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_subs_epu16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_subs_epu16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask2_permutex2var_epi16 (__m512i __A, __m512i __I, - __mmask32 __U, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermi2varhi512_mask ((__v32hi) __A, - (__v32hi) __I /* idx */ , - (__v32hi) __B, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_permutex2var_epi16 (__m512i __A, __m512i __I, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */, - (__v32hi) __A, - (__v32hi) __B, - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_permutex2var_epi16 (__m512i __A, __mmask32 __U, - __m512i __I, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */, - (__v32hi) __A, - (__v32hi) __B, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_permutex2var_epi16 (__mmask32 __U, __m512i __A, - __m512i __I, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermt2varhi512_maskz ((__v32hi) __I - /* idx */ , - (__v32hi) __A, - (__v32hi) __B, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mulhrs_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mulhrs_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mulhrs_epi16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mulhi_epi16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mulhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mulhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mulhi_epu16 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mulhi_epu16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mulhi_epu16 (__mmask32 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maddubs_epi16 (__m512i __X, __m512i __Y) { - return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, - (__v64qi) __Y, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_maddubs_epi16 (__m512i __W, __mmask32 __U, __m512i __X, - __m512i __Y) { - return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, - (__v64qi) __Y, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_maddubs_epi16 (__mmask32 __U, __m512i __X, __m512i __Y) { - return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, - (__v64qi) __Y, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_madd_epi16 (__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v16si) _mm512_setzero_si512(), - (__mmask16) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_madd_epi16 (__m512i __W, __mmask16 __U, __m512i __A, - __m512i __B) { - return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_madd_epi16 (__mmask16 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v16si) _mm512_setzero_si512(), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_cvtsepi16_epi8 (__m512i __A) { - return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, - (__v32qi)_mm256_setzero_si256(), - (__mmask32) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_mask_cvtsepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, - (__v32qi)__O, - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_maskz_cvtsepi16_epi8 (__mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, - (__v32qi) _mm256_setzero_si256(), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_cvtusepi16_epi8 (__m512i __A) { - return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, - (__v32qi) _mm256_setzero_si256(), - (__mmask32) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_mask_cvtusepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, - (__v32qi) __O, - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_maskz_cvtusepi16_epi8 (__mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, - (__v32qi) _mm256_setzero_si256(), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_cvtepi16_epi8 (__m512i __A) { - return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, - (__v32qi) _mm256_setzero_si256(), - (__mmask32) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_mask_cvtepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, - (__v32qi) __O, - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm512_maskz_cvtepi16_epi8 (__mmask32 __M, __m512i __A) { - return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, - (__v32qi) _mm256_setzero_si256(), - __M); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_unpackhi_epi8 (__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_unpackhi_epi8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) { - return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_unpackhi_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_unpackhi_epi16 (__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_unpackhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) { - return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_unpackhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_unpacklo_epi8 (__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_unpacklo_epi8 (__m512i __W, __mmask64 __U, __m512i __A, - __m512i __B) { - return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_unpacklo_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_unpacklo_epi16 (__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_unpacklo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, - __m512i __B) { - return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - (__mmask32) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_unpacklo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) _mm512_setzero_hi(), - (__mmask32) __U); -} - -#define _mm512_cmp_epi8_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \ - (__v64qi)(__m512i)(b), \ - (p), (__mmask64)-1); }) - -#define _mm512_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \ - (__v64qi)(__m512i)(b), \ - (p), (__mmask64)(m)); }) - -#define _mm512_cmp_epu8_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \ - (__v64qi)(__m512i)(b), \ - (p), (__mmask64)-1); }) - -#define _mm512_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \ - (__v64qi)(__m512i)(b), \ - (p), (__mmask64)(m)); }) - -#define _mm512_cmp_epi16_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \ - (__v32hi)(__m512i)(b), \ - (p), (__mmask32)-1); }) - -#define _mm512_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \ - (__v32hi)(__m512i)(b), \ - (p), (__mmask32)(m)); }) - -#define _mm512_cmp_epu16_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \ - (__v32hi)(__m512i)(b), \ - (p), (__mmask32)-1); }) - -#define _mm512_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \ - (__v32hi)(__m512i)(b), \ - (p), (__mmask32)(m)); }) - - -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/avx512cdintrin.h b/External/CastXML/share/castxml/clang/include/avx512cdintrin.h deleted file mode 100644 index 3894b29f5..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512cdintrin.h +++ /dev/null @@ -1,131 +0,0 @@ -/*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------=== - * - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512CDINTRIN_H -#define __AVX512CDINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd"))) - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_conflict_epi64 (__m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, - (__v8di) _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, - (__v8di) _mm512_setzero_si512 (), - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_conflict_epi32 (__m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, - (__v16si) _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, - (__v16si) _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_lzcnt_epi32 (__m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A, - (__v16si) _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A, - (__v16si) _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_lzcnt_epi64 (__m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A, - (__v8di) _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A) -{ - return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A, - (__v8di) _mm512_setzero_si512 (), - (__mmask8) __U); -} -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/avx512dqintrin.h b/External/CastXML/share/castxml/clang/include/avx512dqintrin.h deleted file mode 100644 index 8a69f7ffb..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512dqintrin.h +++ /dev/null @@ -1,242 +0,0 @@ -/*===---- avx512dqintrin.h - AVX512DQ intrinsics ---------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512DQINTRIN_H -#define __AVX512DQINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512dq"))) - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mullo_epi64 (__m512i __A, __m512i __B) { - return (__m512i) ((__v8di) __A * (__v8di) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mullo_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmullq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mullo_epi64 (__mmask8 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pmullq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_xor_pd (__m512d __A, __m512d __B) { - return (__m512d) ((__v8di) __A ^ (__v8di) __B); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_xor_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_xorpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_xor_pd (__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_xorpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_xor_ps (__m512 __A, __m512 __B) { - return (__m512) ((__v16si) __A ^ (__v16si) __B); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_xor_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_xorps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_xor_ps (__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_xorps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_or_pd (__m512d __A, __m512d __B) { - return (__m512d) ((__v8di) __A | (__v8di) __B); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_or_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_orpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_or_pd (__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_orpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_or_ps (__m512 __A, __m512 __B) { - return (__m512) ((__v16si) __A | (__v16si) __B); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_or_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_orps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_or_ps (__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_orps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_and_pd (__m512d __A, __m512d __B) { - return (__m512d) ((__v8di) __A & (__v8di) __B); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_and_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_andpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_and_pd (__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_andpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_and_ps (__m512 __A, __m512 __B) { - return (__m512) ((__v16si) __A & (__v16si) __B); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_and_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_andps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_and_ps (__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_andps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_andnot_pd (__m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_andnpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_andnot_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_andnpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_andnot_pd (__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_andnpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_andnot_ps (__m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_andnps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_andnot_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_andnps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_andnot_ps (__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_andnps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/avx512erintrin.h b/External/CastXML/share/castxml/clang/include/avx512erintrin.h deleted file mode 100644 index 56edffc11..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512erintrin.h +++ /dev/null @@ -1,285 +0,0 @@ -/*===---- avx512fintrin.h - AVX2 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512ERINTRIN_H -#define __AVX512ERINTRIN_H - -// exp2a23 -#define _mm512_exp2a23_round_pd(A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_mask_exp2a23_round_pd(S, M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \ - (__v8df)(__m512d)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm512_maskz_exp2a23_round_pd(M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)(M), (R)); }) - -#define _mm512_exp2a23_pd(A) \ - _mm512_exp2a23_round_pd((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_exp2a23_pd(S, M, A) \ - _mm512_mask_exp2a23_round_pd((S), (M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_exp2a23_pd(M, A) \ - _mm512_maskz_exp2a23_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_exp2a23_round_ps(A, R) __extension__ ({ \ - (__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_mask_exp2a23_round_ps(S, M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)(__m512)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm512_maskz_exp2a23_round_ps(M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask8)(M), (R)); }) - -#define _mm512_exp2a23_ps(A) \ - _mm512_exp2a23_round_ps((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_exp2a23_ps(S, M, A) \ - _mm512_mask_exp2a23_round_ps((S), (M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_exp2a23_ps(M, A) \ - _mm512_maskz_exp2a23_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION) - -// rsqrt28 -#define _mm512_rsqrt28_round_pd(A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_mask_rsqrt28_round_pd(S, M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)(__m512d)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm512_maskz_rsqrt28_round_pd(M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)(M), (R)); }) - -#define _mm512_rsqrt28_pd(A) \ - _mm512_rsqrt28_round_pd((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_rsqrt28_pd(S, M, A) \ - _mm512_mask_rsqrt28_round_pd((S), (M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_rsqrt28_pd(M, A) \ - _mm512_maskz_rsqrt28_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_rsqrt28_round_ps(A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_mask_rsqrt28_round_ps(S, M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)(__m512)(S), \ - (__mmask16)(M), (R)); }) - -#define _mm512_maskz_rsqrt28_round_ps(M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)(M), (R)); }) - -#define _mm512_rsqrt28_ps(A) \ - _mm512_rsqrt28_round_ps((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_rsqrt28_ps(S, M, A) \ - _mm512_mask_rsqrt28_round_ps((S), (M), A, _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_rsqrt28_ps(M, A) \ - _mm512_maskz_rsqrt28_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm_rsqrt28_round_ss(A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rsqrt28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)_mm_setzero_ps(), \ - (__mmask8)-1, (R)); }) - -#define _mm_mask_rsqrt28_round_ss(S, M, A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rsqrt28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)(__m128)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm_maskz_rsqrt28_round_ss(M, A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rsqrt28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)_mm_setzero_ps(), \ - (__mmask8)(M), (R)); }) - -#define _mm_rsqrt28_ss(A, B) \ - _mm_rsqrt28_round_ss((A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_mask_rsqrt28_ss(S, M, A, B) \ - _mm_mask_rsqrt28_round_ss((S), (M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_maskz_rsqrt28_ss(M, A, B) \ - _mm_maskz_rsqrt28_round_ss((M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_rsqrt28_round_sd(A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rsqrt28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)_mm_setzero_pd(), \ - (__mmask8)-1, (R)); }) - -#define _mm_mask_rsqrt28_round_sd(S, M, A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rsqrt28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)(__m128d)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm_maskz_rsqrt28_round_sd(M, A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rsqrt28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)_mm_setzero_pd(), \ - (__mmask8)(M), (R)); }) - -#define _mm_rsqrt28_sd(A, B) \ - _mm_rsqrt28_round_sd((A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_mask_rsqrt28_sd(S, M, A, B) \ - _mm_mask_rsqrt28_round_sd((S), (M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_maskz_rsqrt28_sd(M, A, B) \ - _mm_mask_rsqrt28_round_sd((M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -// rcp28 -#define _mm512_rcp28_round_pd(A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_mask_rcp28_round_pd(S, M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)(__m512d)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm512_maskz_rcp28_round_pd(M, A, R) __extension__ ({ \ - (__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \ - (__v8df)_mm512_setzero_pd(), \ - (__mmask8)(M), (R)); }) - -#define _mm512_rcp28_pd(A) \ - _mm512_rcp28_round_pd((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_rcp28_pd(S, M, A) \ - _mm512_mask_rcp28_round_pd((S), (M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_rcp28_pd(M, A) \ - _mm512_maskz_rcp28_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_rcp28_round_ps(A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_mask_rcp28_round_ps(S, M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)(__m512)(S), \ - (__mmask16)(M), (R)); }) - -#define _mm512_maskz_rcp28_round_ps(M, A, R) __extension__ ({ \ - (__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)(M), (R)); }) - -#define _mm512_rcp28_ps(A) \ - _mm512_rcp28_round_ps((A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_rcp28_ps(S, M, A) \ - _mm512_mask_rcp28_round_ps((S), (M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_maskz_rcp28_ps(M, A) \ - _mm512_maskz_rcp28_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION) - -#define _mm_rcp28_round_ss(A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rcp28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)_mm_setzero_ps(), \ - (__mmask8)-1, (R)); }) - -#define _mm_mask_rcp28_round_ss(S, M, A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rcp28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)(__m128)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm_maskz_rcp28_round_ss(M, A, B, R) __extension__ ({ \ - (__m128)__builtin_ia32_rcp28ss_mask((__v4sf)(__m128)(A), \ - (__v4sf)(__m128)(B), \ - (__v4sf)_mm_setzero_ps(), \ - (__mmask8)(M), (R)); }) - -#define _mm_rcp28_ss(A, B) \ - _mm_rcp28_round_ss((A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_mask_rcp28_ss(S, M, A, B) \ - _mm_mask_rcp28_round_ss((S), (M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_maskz_rcp28_ss(M, A, B) \ - _mm_maskz_rcp28_round_ss((M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_rcp28_round_sd(A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rcp28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)_mm_setzero_pd(), \ - (__mmask8)-1, (R)); }) - -#define _mm_mask_rcp28_round_sd(S, M, A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rcp28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)(__m128d)(S), \ - (__mmask8)(M), (R)); }) - -#define _mm_maskz_rcp28_round_sd(M, A, B, R) __extension__ ({ \ - (__m128d)__builtin_ia32_rcp28sd_mask((__v2df)(__m128d)(A), \ - (__v2df)(__m128d)(B), \ - (__v2df)_mm_setzero_pd(), \ - (__mmask8)(M), (R)); }) - -#define _mm_rcp28_sd(A, B) \ - _mm_rcp28_round_sd((A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_mask_rcp28_sd(S, M, A, B) \ - _mm_mask_rcp28_round_sd((S), (M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#define _mm_maskz_rcp28_sd(M, A, B) \ - _mm_maskz_rcp28_round_sd((M), (A), (B), _MM_FROUND_CUR_DIRECTION) - -#endif // __AVX512ERINTRIN_H diff --git a/External/CastXML/share/castxml/clang/include/avx512fintrin.h b/External/CastXML/share/castxml/clang/include/avx512fintrin.h deleted file mode 100644 index 71cc474c0..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512fintrin.h +++ /dev/null @@ -1,3060 +0,0 @@ -/*===---- avx512fintrin.h - AVX2 intrinsics --------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512FINTRIN_H -#define __AVX512FINTRIN_H - -typedef double __v8df __attribute__((__vector_size__(64))); -typedef float __v16sf __attribute__((__vector_size__(64))); -typedef long long __v8di __attribute__((__vector_size__(64))); -typedef int __v16si __attribute__((__vector_size__(64))); - -typedef float __m512 __attribute__((__vector_size__(64))); -typedef double __m512d __attribute__((__vector_size__(64))); -typedef long long __m512i __attribute__((__vector_size__(64))); - -typedef unsigned char __mmask8; -typedef unsigned short __mmask16; - -/* Rounding mode macros. */ -#define _MM_FROUND_TO_NEAREST_INT 0x00 -#define _MM_FROUND_TO_NEG_INF 0x01 -#define _MM_FROUND_TO_POS_INF 0x02 -#define _MM_FROUND_TO_ZERO 0x03 -#define _MM_FROUND_CUR_DIRECTION 0x04 - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512f"))) - -/* Create vectors with repeated elements */ - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_setzero_si512(void) -{ - return (__m512i)(__v8di){ 0, 0, 0, 0, 0, 0, 0, 0 }; -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_set1_epi32(__mmask16 __M, int __A) -{ - return (__m512i) __builtin_ia32_pbroadcastd512_gpr_mask (__A, - (__v16si) - _mm512_setzero_si512 (), - __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_set1_epi64(__mmask8 __M, long long __A) -{ -#ifdef __x86_64__ - return (__m512i) __builtin_ia32_pbroadcastq512_gpr_mask (__A, - (__v8di) - _mm512_setzero_si512 (), - __M); -#else - return (__m512i) __builtin_ia32_pbroadcastq512_mem_mask (__A, - (__v8di) - _mm512_setzero_si512 (), - __M); -#endif -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_setzero_ps(void) -{ - return (__m512){ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -} -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_setzero_pd(void) -{ - return (__m512d){ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_set1_ps(float __w) -{ - return (__m512){ __w, __w, __w, __w, __w, __w, __w, __w, - __w, __w, __w, __w, __w, __w, __w, __w }; -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_set1_pd(double __w) -{ - return (__m512d){ __w, __w, __w, __w, __w, __w, __w, __w }; -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_set1_epi32(int __s) -{ - return (__m512i)(__v16si){ __s, __s, __s, __s, __s, __s, __s, __s, - __s, __s, __s, __s, __s, __s, __s, __s }; -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_set1_epi64(long long __d) -{ - return (__m512i)(__v8di){ __d, __d, __d, __d, __d, __d, __d, __d }; -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_broadcastss_ps(__m128 __X) -{ - float __f = __X[0]; - return (__v16sf){ __f, __f, __f, __f, - __f, __f, __f, __f, - __f, __f, __f, __f, - __f, __f, __f, __f }; -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_broadcastsd_pd(__m128d __X) -{ - double __d = __X[0]; - return (__v8df){ __d, __d, __d, __d, - __d, __d, __d, __d }; -} - -/* Cast between vector types */ - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_castpd256_pd512(__m256d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, -1, -1, -1, -1); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_castps256_ps512(__m256 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, 4, 5, 6, 7, - -1, -1, -1, -1, -1, -1, -1, -1); -} - -static __inline __m128d __DEFAULT_FN_ATTRS -_mm512_castpd512_pd128(__m512d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1); -} - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm512_castps512_ps128(__m512 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); -} - -/* Bitwise operators */ -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_and_epi32(__m512i __a, __m512i __b) -{ - return __a & __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_and_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pandd512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) __src, - (__mmask16) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_and_epi32(__mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pandd512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_and_epi64(__m512i __a, __m512i __b) -{ - return __a & __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_and_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pandq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) __src, - (__mmask8) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pandq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_andnot_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_andnot_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_andnot_epi32 (__mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_andnot_epi64 (__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_andnot_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) __W, __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_andnot_epi64 (__mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_pd (), - __U); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_or_epi32(__m512i __a, __m512i __b) -{ - return __a | __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_or_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) __src, - (__mmask16) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_or_epi32(__mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_or_epi64(__m512i __a, __m512i __b) -{ - return __a | __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_or_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) __src, - (__mmask8) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_or_epi64(__mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_xor_epi32(__m512i __a, __m512i __b) -{ - return __a ^ __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_xor_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) __src, - (__mmask16) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_xor_epi32(__mmask16 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a, - (__v16si) __b, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_xor_epi64(__m512i __a, __m512i __b) -{ - return __a ^ __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_xor_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) __src, - (__mmask8) __k); -} -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_xor_epi64(__mmask8 __k, __m512i __a, __m512i __b) -{ - return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a, - (__v8di) __b, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __k); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_and_si512(__m512i __a, __m512i __b) -{ - return __a & __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_or_si512(__m512i __a, __m512i __b) -{ - return __a | __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_xor_si512(__m512i __a, __m512i __b) -{ - return __a ^ __b; -} -/* Arithmetic */ - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_add_pd(__m512d __a, __m512d __b) -{ - return __a + __b; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_add_ps(__m512 __a, __m512 __b) -{ - return __a + __b; -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_mul_pd(__m512d __a, __m512d __b) -{ - return __a * __b; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_mul_ps(__m512 __a, __m512 __b) -{ - return __a * __b; -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_sub_pd(__m512d __a, __m512d __b) -{ - return __a - __b; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_sub_ps(__m512 __a, __m512 __b) -{ - return __a - __b; -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_add_epi64 (__m512i __A, __m512i __B) -{ - return (__m512i) ((__v8di) __A + (__v8di) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_add_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_add_epi64 (__mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_sub_epi64 (__m512i __A, __m512i __B) -{ - return (__m512i) ((__v8di) __A - (__v8di) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_sub_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_sub_epi64 (__mmask8 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_add_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) ((__v16si) __A + (__v16si) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_add_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_add_epi32 (__mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_sub_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) ((__v16si) __A - (__v16si) __B); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_sub_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) __W, - (__mmask16) __U); -} - -static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_sub_epi32 (__mmask16 __U, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_max_pd(__m512d __A, __m512d __B) -{ - return (__m512d) __builtin_ia32_maxpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_max_ps(__m512 __A, __m512 __B) -{ - return (__m512) __builtin_ia32_maxps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_max_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_maxss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_max_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_maxss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_max_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_maxss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_max_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_maxss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_max_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_maxss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_max_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_maxsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_max_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_maxsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_max_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_maxsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_max_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_maxsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_max_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_maxsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline __m512i -__DEFAULT_FN_ATTRS -_mm512_max_epi32(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_max_epu32(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_max_epi64(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_max_epu64(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_min_pd(__m512d __A, __m512d __B) -{ - return (__m512d) __builtin_ia32_minpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_min_ps(__m512 __A, __m512 __B) -{ - return (__m512) __builtin_ia32_minps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_min_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_minss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_min_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_minss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_min_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_minss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_min_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_minss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_min_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_minss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_min_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_minsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_min_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_minsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_min_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_minsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_min_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_minsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_min_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_minsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline __m512i -__DEFAULT_FN_ATTRS -_mm512_min_epi32(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_min_epu32(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_min_epi64(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_min_epu64(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mul_epi32(__m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mul_epi32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) __W, __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mul_epi32 (__mmask8 __M, __m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) - _mm512_setzero_si512 (), - __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mul_epu32(__m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mul_epu32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) __W, __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mul_epu32 (__mmask8 __M, __m512i __X, __m512i __Y) -{ - return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X, - (__v16si) __Y, - (__v8di) - _mm512_setzero_si512 (), - __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mullo_epi32 (__m512i __A, __m512i __B) -{ - return (__m512i) ((__v16si) __A * (__v16si) __B); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_mullo_epi32 (__mmask16 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) - _mm512_setzero_si512 (), - __M); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mask_mullo_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A, - (__v16si) __B, - (__v16si) __W, __M); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_sqrt_pd(__m512d a) -{ - return (__m512d)__builtin_ia32_sqrtpd512_mask((__v8df)a, - (__v8df) _mm512_setzero_pd (), - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_sqrt_ps(__m512 a) -{ - return (__m512)__builtin_ia32_sqrtps512_mask((__v16sf)a, - (__v16sf) _mm512_setzero_ps (), - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_rsqrt14_pd(__m512d __A) -{ - return (__m512d) __builtin_ia32_rsqrt14pd512_mask ((__v8df) __A, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1);} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_rsqrt14_ps(__m512 __A) -{ - return (__m512) __builtin_ia32_rsqrt14ps512_mask ((__v16sf) __A, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rsqrt14_ss(__m128 __A, __m128 __B) -{ - return (__m128) __builtin_ia32_rsqrt14ss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_rsqrt14_sd(__m128d __A, __m128d __B) -{ - return (__m128d) __builtin_ia32_rsqrt14sd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_rcp14_pd(__m512d __A) -{ - return (__m512d) __builtin_ia32_rcp14pd512_mask ((__v8df) __A, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_rcp14_ps(__m512 __A) -{ - return (__m512) __builtin_ia32_rcp14ps512_mask ((__v16sf) __A, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1); -} -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rcp14_ss(__m128 __A, __m128 __B) -{ - return (__m128) __builtin_ia32_rcp14ss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_rcp14_sd(__m128d __A, __m128d __B) -{ - return (__m128d) __builtin_ia32_rcp14sd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) -1); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_floor_ps(__m512 __A) -{ - return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A, - _MM_FROUND_FLOOR, - (__v16sf) __A, -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_floor_pd(__m512d __A) -{ - return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A, - _MM_FROUND_FLOOR, - (__v8df) __A, -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_ceil_ps(__m512 __A) -{ - return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A, - _MM_FROUND_CEIL, - (__v16sf) __A, -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_ceil_pd(__m512d __A) -{ - return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A, - _MM_FROUND_CEIL, - (__v8df) __A, -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_abs_epi64(__m512i __A) -{ - return (__m512i) __builtin_ia32_pabsq512_mask ((__v8di) __A, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) -1); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_abs_epi32(__m512i __A) -{ - return (__m512i) __builtin_ia32_pabsd512_mask ((__v16si) __A, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_add_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_addss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_add_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_addss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_add_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_addss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_add_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_addss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_add_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_addss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_add_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_addsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_add_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_addsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} -#define _mm_add_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_addsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_add_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_addsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_add_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_addsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_add_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_addpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_add_pd(__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_addpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) _mm512_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_add_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_addps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_add_ps(__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_addps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) _mm512_setzero_ps (), - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_add_round_pd(__A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_addpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) _mm512_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm512_mask_add_round_pd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_addpd512_mask((__v8df) __A, (__v8df) __B, \ - (__v8df) __W, (__mmask8) __U, __R); }) - -#define _mm512_maskz_add_round_pd(__U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_addpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) _mm512_setzero_pd(), (__mmask8) __U, __R); }) - -#define _mm512_add_round_ps(__A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_addps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps(), (__mmask16) -1, __R); }) - -#define _mm512_mask_add_round_ps(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_addps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) __W, (__mmask16)__U, __R); }) - -#define _mm512_maskz_add_round_ps(__U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_addps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps(), (__mmask16)__U, __R); }) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_sub_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_subss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_sub_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_subss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} -#define _mm_sub_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_subss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_sub_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_subss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_sub_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_subss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_sub_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_subsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_sub_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_subsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_sub_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_subsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_sub_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_subsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_sub_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_subsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_sub_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_subpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_sub_pd(__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_subpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_sub_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_subps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_sub_ps(__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_subps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_sub_round_pd(__A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_subpd512_mask ((__v8df) __A, (__v8df) __B,\ - (__v8df) _mm512_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm512_mask_sub_round_pd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_subpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) __W, (__mmask8) __U, __R); }) - -#define _mm512_maskz_sub_round_pd(__U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_subpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) _mm512_setzero_pd(), (__mmask8) __U, __R);}) - -#define _mm512_sub_round_ps(__A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_subps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) -1, __R);}) - -#define _mm512_mask_sub_round_ps(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_subps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) __W, (__mmask16) __U, __R); }); - -#define _mm512_maskz_sub_round_ps(__U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_subps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) __U, __R);}); - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_mul_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_mulss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_mul_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_mulss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} -#define _mm_mul_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_mulss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_mul_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_mulss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_mul_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_mulss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_mul_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_mulsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_mul_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_mulsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_mul_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_mulsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_mul_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_mulsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_mul_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_mulsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_mul_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_mulpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_mul_pd(__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_mulpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_mul_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_mulps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_mul_ps(__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_mulps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mul_round_pd(__A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_mulpd512_mask ((__v8df) __A, (__v8df) __B,\ - (__v8df) _mm512_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm512_mask_mul_round_pd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_mulpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) __W, (__mmask8) __U, __R); }) - -#define _mm512_maskz_mul_round_pd(__U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_mulpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) _mm512_setzero_pd(), (__mmask8) __U, __R);}) - -#define _mm512_mul_round_ps(__A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_mulps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) -1, __R);}) - -#define _mm512_mask_mul_round_ps(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_mulps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) __W, (__mmask16) __U, __R); }); - -#define _mm512_maskz_mul_round_ps(__U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_mulps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) __U, __R);}); - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_div_ss(__m128 __W, __mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_divss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_div_ss(__mmask8 __U,__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_divss_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) _mm_setzero_ps (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_div_round_ss(__A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_divss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1, __R); }) - -#define _mm_mask_div_round_ss(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_divss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_div_round_ss(__U, __A, __B, __R) __extension__ ({ \ - (__m128) __builtin_ia32_divss_mask ((__v4sf) __A, (__v4sf) __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U,__R); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_div_sd(__m128d __W, __mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_divsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_div_sd(__mmask8 __U,__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_divsd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) _mm_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm_div_round_sd(__A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_divsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm_mask_div_round_sd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_divsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) __W, (__mmask8) __U,__R); }) - -#define _mm_maskz_div_round_sd(__U, __A, __B, __R) __extension__ ({ \ - (__m128d) __builtin_ia32_divsd_mask ((__v2df) __A, (__v2df) __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_div_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_divpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __W, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_div_pd(__mmask8 __U, __m512d __A, __m512d __B) { - return (__m512d) __builtin_ia32_divpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_div_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_divps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __W, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_div_ps(__mmask16 __U, __m512 __A, __m512 __B) { - return (__m512) __builtin_ia32_divps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_div_round_pd(__A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_divpd512_mask ((__v8df) __A, (__v8df) __B,\ - (__v8df) _mm512_setzero_pd(), (__mmask8) -1, __R); }) - -#define _mm512_mask_div_round_pd(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_divpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) __W, (__mmask8) __U, __R); }) - -#define _mm512_maskz_div_round_pd(__U, __A, __B, __R) __extension__ ({ \ - (__m512d) __builtin_ia32_divpd512_mask ((__v8df) __A, (__v8df) __B, \ - (__v8df) _mm512_setzero_pd(), (__mmask8) __U, __R);}) - -#define _mm512_div_round_ps(__A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_divps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) -1, __R);}) - -#define _mm512_mask_div_round_ps(__W, __U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_divps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) __W, (__mmask16) __U, __R); }); - -#define _mm512_maskz_div_round_ps(__U, __A, __B, __R) __extension__ ({ \ - (__m512) __builtin_ia32_divps512_mask ((__v16sf) __A, (__v16sf) __B, \ - (__v16sf) _mm512_setzero_ps (), (__mmask16) __U, __R);}); - -#define _mm512_roundscale_ps(A, B) __extension__ ({ \ - (__m512)__builtin_ia32_rndscaleps_mask((__v16sf)(A), (B), (__v16sf)(A), \ - -1, _MM_FROUND_CUR_DIRECTION); }) - -#define _mm512_roundscale_pd(A, B) __extension__ ({ \ - (__m512d)__builtin_ia32_rndscalepd_mask((__v8df)(A), (B), (__v8df)(A), \ - -1, _MM_FROUND_CUR_DIRECTION); }) - -#define _mm512_fmadd_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_mask_fmadd_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_mask3_fmadd_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask3 ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_maskz_fmadd_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_maskz ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_fmsub_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_mask_fmsub_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_maskz_fmsub_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_maskz ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_fnmadd_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask (-(__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_mask3_fnmadd_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask3 (-(__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_maskz_fnmadd_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_maskz (-(__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_fnmsub_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_mask (-(__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_maskz_fnmsub_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddpd512_maskz (-(__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fmadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fmadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask3 ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fmadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_maskz ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fmsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fmsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_maskz ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask (-(__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask3 (-(__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fnmadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_maskz (-(__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fnmsub_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_mask (-(__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fnmsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddpd512_maskz (-(__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_fmadd_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_mask_fmadd_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_mask3_fmadd_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask3 ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_maskz_fmadd_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_maskz ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_fmsub_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_mask_fmsub_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_maskz_fmsub_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_maskz ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_fnmadd_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask (-(__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_mask3_fnmadd_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask3 (-(__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_maskz_fnmadd_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_maskz (-(__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_fnmsub_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_mask (-(__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_maskz_fnmsub_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddps512_maskz (-(__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fmadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fmadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask3 ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fmadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_maskz ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fmsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fmsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_maskz ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask (-(__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask3 (-(__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fnmadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_maskz (-(__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fnmsub_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_mask (-(__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fnmsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddps512_maskz (-(__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_fmaddsub_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_mask_fmaddsub_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_mask3_fmaddsub_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_mask3 ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_maskz_fmaddsub_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_maskz ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_fmsubadd_round_pd(A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) -1, (R)); }) - - -#define _mm512_mask_fmsubadd_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_maskz_fmsubadd_round_pd(U, A, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmaddsubpd512_maskz ((__v8df) (A), \ - (__v8df) (B), -(__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fmaddsub_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fmaddsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fmaddsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_mask3 ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fmaddsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_maskz ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_fmsubadd_pd(__m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fmsubadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_mask ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_fmsubadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfmaddsubpd512_maskz ((__v8df) __A, - (__v8df) __B, - -(__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_fmaddsub_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_mask_fmaddsub_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_mask3_fmaddsub_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_mask3 ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_maskz_fmaddsub_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_maskz ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_fmsubadd_round_ps(A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) -1, (R)); }) - - -#define _mm512_mask_fmsubadd_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_maskz_fmsubadd_round_ps(U, A, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmaddsubps512_maskz ((__v16sf) (A), \ - (__v16sf) (B), -(__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fmaddsub_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fmaddsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fmaddsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_mask3 ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fmaddsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_maskz ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_fmsubadd_ps(__m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fmsubadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_mask ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_fmsubadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfmaddsubps512_maskz ((__v16sf) __A, - (__v16sf) __B, - -(__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask3_fmsub_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmsubpd512_mask3 ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fmsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfmsubpd512_mask3 ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask3_fmsub_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmsubps512_mask3 ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fmsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfmsubps512_mask3 ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask3_fmsubadd_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfmsubaddpd512_mask3 ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fmsubadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfmsubaddpd512_mask3 ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask3_fmsubadd_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfmsubaddps512_mask3 ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fmsubadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfmsubaddps512_mask3 ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask_fnmadd_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfnmaddpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fnmadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfnmaddpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask_fnmadd_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfnmaddps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fnmadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfnmaddps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask_fnmsub_round_pd(A, U, B, C, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfnmsubpd512_mask ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -#define _mm512_mask3_fnmsub_round_pd(A, B, C, U, R) __extension__ ({ \ - (__m512d) __builtin_ia32_vfnmsubpd512_mask3 ((__v8df) (A), \ - (__v8df) (B), (__v8df) (C), \ - (__mmask8) (U), (R)); }) - - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_fnmsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) -{ - return (__m512d) __builtin_ia32_vfnmsubpd512_mask ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask3_fnmsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) -{ - return (__m512d) __builtin_ia32_vfnmsubpd512_mask3 ((__v8df) __A, - (__v8df) __B, - (__v8df) __C, - (__mmask8) __U, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_mask_fnmsub_round_ps(A, U, B, C, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfnmsubps512_mask ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -#define _mm512_mask3_fnmsub_round_ps(A, B, C, U, R) __extension__ ({ \ - (__m512) __builtin_ia32_vfnmsubps512_mask3 ((__v16sf) (A), \ - (__v16sf) (B), (__v16sf) (C), \ - (__mmask16) (U), (R)); }) - - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_fnmsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) -{ - return (__m512) __builtin_ia32_vfnmsubps512_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask3_fnmsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) -{ - return (__m512) __builtin_ia32_vfnmsubps512_mask3 ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__mmask16) __U, - _MM_FROUND_CUR_DIRECTION); -} - - - -/* Vector permutations */ - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_permutex2var_epi32(__m512i __A, __m512i __I, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermt2vard512_mask ((__v16si) __I - /* idx */ , - (__v16si) __A, - (__v16si) __B, - (__mmask16) -1); -} -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_permutex2var_epi64(__m512i __A, __m512i __I, __m512i __B) -{ - return (__m512i) __builtin_ia32_vpermt2varq512_mask ((__v8di) __I - /* idx */ , - (__v8di) __A, - (__v8di) __B, - (__mmask8) -1); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_permutex2var_pd(__m512d __A, __m512i __I, __m512d __B) -{ - return (__m512d) __builtin_ia32_vpermt2varpd512_mask ((__v8di) __I - /* idx */ , - (__v8df) __A, - (__v8df) __B, - (__mmask8) -1); -} -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_permutex2var_ps(__m512 __A, __m512i __I, __m512 __B) -{ - return (__m512) __builtin_ia32_vpermt2varps512_mask ((__v16si) __I - /* idx */ , - (__v16sf) __A, - (__v16sf) __B, - (__mmask16) -1); -} - -#define _mm512_alignr_epi64(A, B, I) __extension__ ({ \ - (__m512i)__builtin_ia32_alignq512_mask((__v8di)(__m512i)(A), \ - (__v8di)(__m512i)(B), \ - (I), (__v8di)_mm512_setzero_si512(), \ - (__mmask8)-1); }) - -#define _mm512_alignr_epi32(A, B, I) __extension__ ({ \ - (__m512i)__builtin_ia32_alignd512_mask((__v16si)(__m512i)(A), \ - (__v16si)(__m512i)(B), \ - (I), (__v16si)_mm512_setzero_si512(), \ - (__mmask16)-1); }) - -/* Vector Extract */ - -#define _mm512_extractf64x4_pd(A, I) __extension__ ({ \ - __m512d __A = (A); \ - (__m256d) \ - __builtin_ia32_extractf64x4_mask((__v8df)__A, \ - (I), \ - (__v4df)_mm256_setzero_si256(), \ - (__mmask8) -1); }) - -#define _mm512_extractf32x4_ps(A, I) __extension__ ({ \ - __m512 __A = (A); \ - (__m128) \ - __builtin_ia32_extractf32x4_mask((__v16sf)__A, \ - (I), \ - (__v4sf)_mm_setzero_ps(), \ - (__mmask8) -1); }) - -/* Vector Blend */ - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_mask_blend_pd(__mmask8 __U, __m512d __A, __m512d __W) -{ - return (__m512d) __builtin_ia32_blendmpd_512_mask ((__v8df) __A, - (__v8df) __W, - (__mmask8) __U); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_mask_blend_ps(__mmask16 __U, __m512 __A, __m512 __W) -{ - return (__m512) __builtin_ia32_blendmps_512_mask ((__v16sf) __A, - (__v16sf) __W, - (__mmask16) __U); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mask_blend_epi64(__mmask8 __U, __m512i __A, __m512i __W) -{ - return (__m512i) __builtin_ia32_blendmq_512_mask ((__v8di) __A, - (__v8di) __W, - (__mmask8) __U); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_mask_blend_epi32(__mmask16 __U, __m512i __A, __m512i __W) -{ - return (__m512i) __builtin_ia32_blendmd_512_mask ((__v16si) __A, - (__v16si) __W, - (__mmask16) __U); -} - -/* Compare */ - -#define _mm512_cmp_round_ps_mask(A, B, P, R) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \ - (__v16sf)(__m512)(B), \ - (P), (__mmask16)-1, (R)); }) - -#define _mm512_mask_cmp_round_ps_mask(U, A, B, P, R) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \ - (__v16sf)(__m512)(B), \ - (P), (__mmask16)(U), (R)); }) - -#define _mm512_cmp_ps_mask(A, B, P) \ - _mm512_cmp_round_ps_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_cmp_ps_mask(U, A, B, P) \ - _mm512_mask_cmp_round_ps_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_cmp_round_pd_mask(A, B, P, R) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \ - (__v8df)(__m512d)(B), \ - (P), (__mmask8)-1, (R)); }) - -#define _mm512_mask_cmp_round_pd_mask(U, A, B, P, R) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \ - (__v8df)(__m512d)(B), \ - (P), (__mmask8)(U), (R)); }) - -#define _mm512_cmp_pd_mask(A, B, P) \ - _mm512_cmp_round_pd_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION) - -#define _mm512_mask_cmp_pd_mask(U, A, B, P) \ - _mm512_mask_cmp_round_pd_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION) - -/* Conversion */ - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_cvttps_epu32(__m512 __A) -{ - return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_cvt_roundepi32_ps(A, R) __extension__ ({ \ - (__m512)__builtin_ia32_cvtdq2ps512_mask((__v16si)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_cvt_roundepu32_ps(A, R) __extension__ ({ \ - (__m512)__builtin_ia32_cvtudq2ps512_mask((__v16si)(A), \ - (__v16sf)_mm512_setzero_ps(), \ - (__mmask16)-1, (R)); }) - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_cvtepi32_pd(__m256i __A) -{ - return (__m512d) __builtin_ia32_cvtdq2pd512_mask ((__v8si) __A, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_cvtepu32_pd(__m256i __A) -{ - return (__m512d) __builtin_ia32_cvtudq2pd512_mask ((__v8si) __A, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1); -} - -#define _mm512_cvt_roundpd_ps(A, R) __extension__ ({ \ - (__m256)__builtin_ia32_cvtpd2ps512_mask((__v8df)(A), \ - (__v8sf)_mm256_setzero_ps(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_cvtps_ph(A, I) __extension__ ({ \ - (__m256i)__builtin_ia32_vcvtps2ph512_mask((__v16sf)(A), (I), \ - (__v16hi)_mm256_setzero_si256(), \ - -1); }) - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_cvtph_ps(__m256i __A) -{ - return (__m512) __builtin_ia32_vcvtph2ps512_mask ((__v16hi) __A, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1, - _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_cvttps_epi32(__m512 a) -{ - return (__m512i) - __builtin_ia32_cvttps2dq512_mask((__v16sf) a, - (__v16si) _mm512_setzero_si512 (), - (__mmask16) -1, _MM_FROUND_CUR_DIRECTION); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm512_cvttpd_epi32(__m512d a) -{ - return (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df) a, - (__v8si)_mm256_setzero_si256(), - (__mmask8) -1, - _MM_FROUND_CUR_DIRECTION); -} - -#define _mm512_cvtt_roundpd_epi32(A, R) __extension__ ({ \ - (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df)(A), \ - (__v8si)_mm256_setzero_si256(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_cvtt_roundps_epi32(A, R) __extension__ ({ \ - (__m512i)__builtin_ia32_cvttps2dq512_mask((__v16sf)(A), \ - (__v16si)_mm512_setzero_si512(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_cvt_roundps_epi32(A, R) __extension__ ({ \ - (__m512i)__builtin_ia32_cvtps2dq512_mask((__v16sf)(A), \ - (__v16si)_mm512_setzero_si512(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_cvt_roundpd_epi32(A, R) __extension__ ({ \ - (__m256i)__builtin_ia32_cvtpd2dq512_mask((__v8df)(A), \ - (__v8si)_mm256_setzero_si256(), \ - (__mmask8)-1, (R)); }) - -#define _mm512_cvt_roundps_epu32(A, R) __extension__ ({ \ - (__m512i)__builtin_ia32_cvtps2udq512_mask((__v16sf)(A), \ - (__v16si)_mm512_setzero_si512(), \ - (__mmask16)-1, (R)); }) - -#define _mm512_cvt_roundpd_epu32(A, R) __extension__ ({ \ - (__m256i)__builtin_ia32_cvtpd2udq512_mask((__v8df)(A), \ - (__v8si)_mm256_setzero_si256(), \ - (__mmask8) -1, (R)); }) - -/* Unpack and Interleave */ -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_unpackhi_pd(__m512d __a, __m512d __b) -{ - return __builtin_shufflevector(__a, __b, 1, 9, 1+2, 9+2, 1+4, 9+4, 1+6, 9+6); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_unpacklo_pd(__m512d __a, __m512d __b) -{ - return __builtin_shufflevector(__a, __b, 0, 8, 0+2, 8+2, 0+4, 8+4, 0+6, 8+6); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_unpackhi_ps(__m512 __a, __m512 __b) -{ - return __builtin_shufflevector(__a, __b, - 2, 18, 3, 19, - 2+4, 18+4, 3+4, 19+4, - 2+8, 18+8, 3+8, 19+8, - 2+12, 18+12, 3+12, 19+12); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_unpacklo_ps(__m512 __a, __m512 __b) -{ - return __builtin_shufflevector(__a, __b, - 0, 16, 1, 17, - 0+4, 16+4, 1+4, 17+4, - 0+8, 16+8, 1+8, 17+8, - 0+12, 16+12, 1+12, 17+12); -} - -/* Bit Test */ - -static __inline __mmask16 __DEFAULT_FN_ATTRS -_mm512_test_epi32_mask(__m512i __A, __m512i __B) -{ - return (__mmask16) __builtin_ia32_ptestmd512 ((__v16si) __A, - (__v16si) __B, - (__mmask16) -1); -} - -static __inline __mmask8 __DEFAULT_FN_ATTRS -_mm512_test_epi64_mask(__m512i __A, __m512i __B) -{ - return (__mmask8) __builtin_ia32_ptestmq512 ((__v8di) __A, - (__v8di) __B, - (__mmask8) -1); -} - -/* SIMD load ops */ - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_loadu_epi32(__mmask16 __U, void const *__P) -{ - return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *)__P, - (__v16si) - _mm512_setzero_si512 (), - (__mmask16) __U); -} - -static __inline __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_loadu_epi64(__mmask8 __U, void const *__P) -{ - return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *)__P, - (__v8di) - _mm512_setzero_si512 (), - (__mmask8) __U); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_loadu_ps(__mmask16 __U, void const *__P) -{ - return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *)__P, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_loadu_pd(__mmask8 __U, void const *__P) -{ - return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_load_ps(__mmask16 __U, void const *__P) -{ - return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__P, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_load_pd(__mmask8 __U, void const *__P) -{ - return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__P, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_loadu_pd(double const *__p) -{ - struct __loadu_pd { - __m512d __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_pd*)__p)->__v; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_loadu_ps(float const *__p) -{ - struct __loadu_ps { - __m512 __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_ps*)__p)->__v; -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_load_ps(double const *__p) -{ - return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__p, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) -1); -} - -static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_load_pd(float const *__p) -{ - return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__p, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) -1); -} - -/* SIMD store ops */ - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_storeu_epi64(void *__P, __mmask8 __U, __m512i __A) -{ - __builtin_ia32_storedqudi512_mask ((__v8di *)__P, (__v8di) __A, - (__mmask8) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A) -{ - __builtin_ia32_storedqusi512_mask ((__v16si *)__P, (__v16si) __A, - (__mmask16) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_storeu_pd(void *__P, __mmask8 __U, __m512d __A) -{ - __builtin_ia32_storeupd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_storeu_pd(void *__P, __m512d __A) -{ - __builtin_ia32_storeupd512_mask((__v8df *)__P, (__v8df)__A, (__mmask8)-1); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_storeu_ps(void *__P, __mmask16 __U, __m512 __A) -{ - __builtin_ia32_storeups512_mask ((__v16sf *)__P, (__v16sf) __A, - (__mmask16) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_storeu_ps(void *__P, __m512 __A) -{ - __builtin_ia32_storeups512_mask((__v16sf *)__P, (__v16sf)__A, (__mmask16)-1); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_store_pd(void *__P, __mmask8 __U, __m512d __A) -{ - __builtin_ia32_storeapd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_store_pd(void *__P, __m512d __A) -{ - *(__m512d*)__P = __A; -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_mask_store_ps(void *__P, __mmask16 __U, __m512 __A) -{ - __builtin_ia32_storeaps512_mask ((__v16sf *)__P, (__v16sf) __A, - (__mmask16) __U); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm512_store_ps(void *__P, __m512 __A) -{ - *(__m512*)__P = __A; -} - -/* Mask ops */ - -static __inline __mmask16 __DEFAULT_FN_ATTRS -_mm512_knot(__mmask16 __M) -{ - return __builtin_ia32_knothi(__M); -} - -/* Integer compare */ - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpeq_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpeq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpge_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpge_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpge_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpge_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpge_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpgt_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpgt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmple_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmple_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmple_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmple_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmple_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmplt_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmplt_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmplt_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmplt_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmplt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epi32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epu32_mask(__m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epi64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_cmpneq_epu64_mask(__m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm512_mask_cmpneq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4, - __u); -} - -#define _mm512_cmp_epi32_mask(a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \ - (__mmask16)-1); }) - -#define _mm512_cmp_epu32_mask(a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \ - (__mmask16)-1); }) - -#define _mm512_cmp_epi64_mask(a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \ - (__mmask8)-1); }) - -#define _mm512_cmp_epu64_mask(a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \ - (__mmask8)-1); }) - -#define _mm512_mask_cmp_epi32_mask(m, a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \ - (__mmask16)(m)); }) - -#define _mm512_mask_cmp_epu32_mask(m, a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \ - (__mmask16)(m)); }) - -#define _mm512_mask_cmp_epi64_mask(m, a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \ - (__mmask8)(m)); }) - -#define _mm512_mask_cmp_epu64_mask(m, a, b, p) __extension__ ({ \ - __m512i __a = (a); \ - __m512i __b = (b); \ - (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \ - (__mmask8)(m)); }) - -#undef __DEFAULT_FN_ATTRS - -#endif // __AVX512FINTRIN_H diff --git a/External/CastXML/share/castxml/clang/include/avx512vlbwintrin.h b/External/CastXML/share/castxml/clang/include/avx512vlbwintrin.h deleted file mode 100644 index 4b885de8b..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512vlbwintrin.h +++ /dev/null @@ -1,2336 +0,0 @@ -/*===---- avx512vlbwintrin.h - AVX512VL and AVX512BW intrinsics ----------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512VLBWINTRIN_H -#define __AVX512VLBWINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bw"))) - -/* Integer compare */ - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpeq_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_pcmpeqb128_mask((__v16qi)__a, (__v16qi)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_pcmpeqb128_mask((__v16qi)__a, (__v16qi)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpeq_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 0, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 0, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_pcmpeqb256_mask((__v32qi)__a, (__v32qi)__b, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_pcmpeqb256_mask((__v32qi)__a, (__v32qi)__b, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 0, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 0, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqw128_mask((__v8hi)__a, (__v8hi)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqw128_mask((__v8hi)__a, (__v8hi)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 0, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_pcmpeqw256_mask((__v16hi)__a, (__v16hi)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_pcmpeqw256_mask((__v16hi)__a, (__v16hi)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 0, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 0, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpge_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpge_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 5, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpge_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 5, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 5, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpge_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 5, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpge_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpge_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 5, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 5, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpgt_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_pcmpgtb128_mask((__v16qi)__a, (__v16qi)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_pcmpgtb128_mask((__v16qi)__a, (__v16qi)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpgt_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 6, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 6, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_pcmpgtb256_mask((__v32qi)__a, (__v32qi)__b, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_pcmpgtb256_mask((__v32qi)__a, (__v32qi)__b, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 6, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtw128_mask((__v8hi)__a, (__v8hi)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtw128_mask((__v8hi)__a, (__v8hi)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 6, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_pcmpgtw256_mask((__v16hi)__a, (__v16hi)__b, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_pcmpgtw256_mask((__v16hi)__a, (__v16hi)__b, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 6, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 6, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmple_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmple_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 2, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmple_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 2, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 2, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmple_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 2, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmple_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmple_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 2, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 2, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmplt_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmplt_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 1, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmplt_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 1, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 1, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmplt_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 1, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmplt_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmplt_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 1, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 1, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpneq_epi8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 4, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_cmpneq_epu8_mask(__m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 4, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epi8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 4, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 4, - __u); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epu8_mask(__m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 4, - (__mmask32)-1); -} - -static __inline__ __mmask32 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epi16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epu16_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 4, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epi16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 4, - __u); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epu16_mask(__m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 4, - (__mmask16)-1); -} - -static __inline__ __mmask16 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 4, - __u); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_add_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B){ - return (__m256i) __builtin_ia32_paddb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_add_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_paddb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) - _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_add_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_paddw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_add_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_paddw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) - _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_sub_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_psubb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_sub_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_psubb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) - _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_sub_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_psubw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_sub_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_psubw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) - _mm256_setzero_si256 (), - (__mmask16) __U); -} -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_add_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_paddb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_add_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_paddb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) - _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_add_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_paddw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_add_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_paddw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_sub_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_psubb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_sub_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_psubb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) - _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_sub_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_psubw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_sub_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_psubw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mullo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmullw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mullo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmullw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) - _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mullo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmullw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mullo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmullw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_blend_epi8 (__mmask16 __U, __m128i __A, __m128i __W) -{ - return (__m128i) __builtin_ia32_blendmb_128_mask ((__v16qi) __A, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_blend_epi8 (__mmask32 __U, __m256i __A, __m256i __W) -{ - return (__m256i) __builtin_ia32_blendmb_256_mask ((__v32qi) __A, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_blend_epi16 (__mmask8 __U, __m128i __A, __m128i __W) -{ - return (__m128i) __builtin_ia32_blendmw_128_mask ((__v8hi) __A, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_blend_epi16 (__mmask16 __U, __m256i __A, __m256i __W) -{ - return (__m256i) __builtin_ia32_blendmw_256_mask ((__v16hi) __A, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_abs_epi8 (__m128i __W, __mmask16 __U, __m128i __A) -{ - return (__m128i) __builtin_ia32_pabsb128_mask ((__v16qi) __A, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_abs_epi8 (__mmask16 __U, __m128i __A) -{ - return (__m128i) __builtin_ia32_pabsb128_mask ((__v16qi) __A, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_abs_epi8 (__m256i __W, __mmask32 __U, __m256i __A) -{ - return (__m256i) __builtin_ia32_pabsb256_mask ((__v32qi) __A, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_abs_epi8 (__mmask32 __U, __m256i __A) -{ - return (__m256i) __builtin_ia32_pabsb256_mask ((__v32qi) __A, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_abs_epi16 (__m128i __W, __mmask8 __U, __m128i __A) -{ - return (__m128i) __builtin_ia32_pabsw128_mask ((__v8hi) __A, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_abs_epi16 (__mmask8 __U, __m128i __A) -{ - return (__m128i) __builtin_ia32_pabsw128_mask ((__v8hi) __A, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_abs_epi16 (__m256i __W, __mmask16 __U, __m256i __A) -{ - return (__m256i) __builtin_ia32_pabsw256_mask ((__v16hi) __A, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_abs_epi16 (__mmask16 __U, __m256i __A) -{ - return (__m256i) __builtin_ia32_pabsw256_mask ((__v16hi) __A, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_packs_epi32 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_packssdw128_mask ((__v4si) __A, - (__v4si) __B, - (__v8hi) _mm_setzero_si128 (), __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_packs_epi32 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_packssdw128_mask ((__v4si) __A, - (__v4si) __B, - (__v8hi) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_packs_epi32 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_packssdw256_mask ((__v8si) __A, - (__v8si) __B, - (__v16hi) _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_packs_epi32 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_packssdw256_mask ((__v8si) __A, - (__v8si) __B, - (__v16hi) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_packs_epi16 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_packsswb128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v16qi) _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_packs_epi16 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_packsswb128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v16qi) __W, - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_packs_epi16 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_packsswb256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v32qi) _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_packs_epi16 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_packsswb256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v32qi) __W, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_packus_epi32 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_packusdw128_mask ((__v4si) __A, - (__v4si) __B, - (__v8hi) _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_packus_epi32 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_packusdw128_mask ((__v4si) __A, - (__v4si) __B, - (__v8hi) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_packus_epi32 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_packusdw256_mask ((__v8si) __A, - (__v8si) __B, - (__v16hi) _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_packus_epi32 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_packusdw256_mask ((__v8si) __A, - (__v8si) __B, - (__v16hi) __W, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_packus_epi16 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_packuswb128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v16qi) _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_packus_epi16 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_packuswb128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v16qi) __W, - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_packus_epi16 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_packuswb256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v32qi) _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_packus_epi16 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_packuswb256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v32qi) __W, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_adds_epi8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_adds_epi8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_adds_epi8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_adds_epi8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_adds_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_adds_epi16 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_adds_epi16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_adds_epi16 (__mmask16 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_adds_epu8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddusb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_adds_epu8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddusb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_adds_epu8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddusb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_adds_epu8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddusb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_adds_epu16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddusw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_adds_epu16 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddusw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_adds_epu16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddusw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_adds_epu16 (__mmask16 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddusw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_avg_epu8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pavgb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_avg_epu8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pavgb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_avg_epu8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pavgb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_avg_epu8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pavgb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_avg_epu16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pavgw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_avg_epu16 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pavgw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_avg_epu16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pavgw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_avg_epu16 (__mmask16 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pavgw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epi8 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epi8 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epi8 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epi8 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epi16 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epi16 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epi16 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epi16 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epu8 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxub128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epu8 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxub128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epu8 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxub256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epu8 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxub256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epu16 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epu16 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pmaxuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epu16 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epu16 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pmaxuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epi8 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pminsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epi8 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pminsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epi8 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pminsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epi8 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pminsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epi16 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pminsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epi16 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pminsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epi16 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pminsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epi16 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pminsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epu8 (__mmask16 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pminub128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epu8 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pminub128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epu8 (__mmask32 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pminub256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epu8 (__m256i __W, __mmask32 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pminub256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epu16 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pminuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epu16 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pminuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epu16 (__mmask16 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pminuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epu16 (__m256i __W, __mmask16 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pminuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_shuffle_epi8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pshufb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_shuffle_epi8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pshufb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_shuffle_epi8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pshufb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_shuffle_epi8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pshufb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_subs_epi8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_subs_epi8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubsb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_subs_epi8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_subs_epi8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubsb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_subs_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_subs_epi16 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubsw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_subs_epi16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_subs_epi16 (__mmask16 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubsw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_subs_epu8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubusb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_subs_epu8 (__mmask16 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubusb128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128 (), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_subs_epu8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubusb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_subs_epu8 (__mmask32 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubusb256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256 (), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_subs_epu16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubusw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_subs_epu16 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubusw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_subs_epu16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubusw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_subs_epu16 (__mmask16 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubusw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256 (), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask2_permutex2var_epi16 (__m128i __A, __m128i __I, __mmask8 __U, - __m128i __B) -{ - return (__m128i) __builtin_ia32_vpermi2varhi128_mask ((__v8hi) __A, - (__v8hi) __I /* idx */ , - (__v8hi) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask2_permutex2var_epi16 (__m256i __A, __m256i __I, - __mmask16 __U, __m256i __B) -{ - return (__m256i) __builtin_ia32_vpermi2varhi256_mask ((__v16hi) __A, - (__v16hi) __I /* idx */ , - (__v16hi) __B, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_permutex2var_epi16 (__m128i __A, __m128i __I, __m128i __B) -{ - return (__m128i) __builtin_ia32_vpermt2varhi128_mask ((__v8hi) __I/* idx */, - (__v8hi) __A, - (__v8hi) __B, - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_permutex2var_epi16 (__m128i __A, __mmask8 __U, __m128i __I, - __m128i __B) -{ - return (__m128i) __builtin_ia32_vpermt2varhi128_mask ((__v8hi) __I/* idx */, - (__v8hi) __A, - (__v8hi) __B, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_permutex2var_epi16 (__mmask8 __U, __m128i __A, __m128i __I, - __m128i __B) -{ - return (__m128i) __builtin_ia32_vpermt2varhi128_maskz ((__v8hi) __I/* idx */, - (__v8hi) __A, - (__v8hi) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_permutex2var_epi16 (__m256i __A, __m256i __I, __m256i __B) -{ - return (__m256i) __builtin_ia32_vpermt2varhi256_mask ((__v16hi) __I/* idx */, - (__v16hi) __A, - (__v16hi) __B, - (__mmask16) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_permutex2var_epi16 (__m256i __A, __mmask16 __U, - __m256i __I, __m256i __B) -{ - return (__m256i) __builtin_ia32_vpermt2varhi256_mask ((__v16hi) __I/* idx */, - (__v16hi) __A, - (__v16hi) __B, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_permutex2var_epi16 (__mmask16 __U, __m256i __A, - __m256i __I, __m256i __B) -{ - return (__m256i) __builtin_ia32_vpermt2varhi256_maskz ((__v16hi) __I/* idx */, - (__v16hi) __A, - (__v16hi) __B, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_maddubs_epi16 (__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - return (__m128i) __builtin_ia32_pmaddubsw128_mask ((__v16qi) __X, - (__v16qi) __Y, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_maddubs_epi16 (__mmask8 __U, __m128i __X, __m128i __Y) { - return (__m128i) __builtin_ia32_pmaddubsw128_mask ((__v16qi) __X, - (__v16qi) __Y, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_maddubs_epi16 (__m256i __W, __mmask16 __U, __m256i __X, - __m256i __Y) { - return (__m256i) __builtin_ia32_pmaddubsw256_mask ((__v32qi) __X, - (__v32qi) __Y, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_maddubs_epi16 (__mmask16 __U, __m256i __X, __m256i __Y) { - return (__m256i) __builtin_ia32_pmaddubsw256_mask ((__v32qi) __X, - (__v32qi) __Y, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_madd_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmaddwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_madd_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaddwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v4si) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_madd_epi16 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaddwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_madd_epi16 (__mmask8 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaddwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v8si) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtsepi16_epi8 (__m128i __A) { - return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtsepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtsepi16_epi8 (__mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_cvtsepi16_epi8 (__m256i __A) { - return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask16) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvtsepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtsepi16_epi8 (__mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtusepi16_epi8 (__m128i __A) { - return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtusepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtusepi16_epi8 (__mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_cvtusepi16_epi8 (__m256i __A) { - return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask16) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvtusepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtusepi16_epi8 (__mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi16_epi8 (__m128i __A) { - - return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtepi16_epi8 (__mmask8 __M, __m128i __A) { - return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_cvtepi16_epi8 (__m256i __A) { - return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - (__mmask16) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvtepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, - (__v16qi) __O, - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepi16_epi8 (__mmask16 __M, __m256i __A) { - return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, - (__v16qi) _mm_setzero_si128(), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mulhrs_epi16 (__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - return (__m128i) __builtin_ia32_pmulhrsw128_mask ((__v8hi) __X, - (__v8hi) __Y, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mulhrs_epi16 (__mmask8 __U, __m128i __X, __m128i __Y) { - return (__m128i) __builtin_ia32_pmulhrsw128_mask ((__v8hi) __X, - (__v8hi) __Y, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mulhrs_epi16 (__m256i __W, __mmask16 __U, __m256i __X, __m256i __Y) { - return (__m256i) __builtin_ia32_pmulhrsw256_mask ((__v16hi) __X, - (__v16hi) __Y, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mulhrs_epi16 (__mmask16 __U, __m256i __X, __m256i __Y) { - return (__m256i) __builtin_ia32_pmulhrsw256_mask ((__v16hi) __X, - (__v16hi) __Y, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mulhi_epu16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmulhuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mulhi_epu16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmulhuw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mulhi_epu16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmulhuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mulhi_epu16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmulhuw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mulhi_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmulhw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mulhi_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmulhw128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mulhi_epi16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmulhw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mulhi_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmulhw256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_unpackhi_epi8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_punpckhbw128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_unpackhi_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_punpckhbw128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128(), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_unpackhi_epi8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_punpckhbw256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_unpackhi_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_punpckhbw256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256(), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_unpackhi_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_punpckhwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_unpackhi_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_punpckhwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_unpackhi_epi16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_punpckhwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_unpackhi_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_punpckhwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_unpacklo_epi8 (__m128i __W, __mmask16 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_punpcklbw128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) __W, - (__mmask16) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_unpacklo_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_punpcklbw128_mask ((__v16qi) __A, - (__v16qi) __B, - (__v16qi) _mm_setzero_si128(), - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_unpacklo_epi8 (__m256i __W, __mmask32 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_punpcklbw256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) __W, - (__mmask32) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_unpacklo_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_punpcklbw256_mask ((__v32qi) __A, - (__v32qi) __B, - (__v32qi) _mm256_setzero_si256(), - (__mmask32) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_unpacklo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_punpcklwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_unpacklo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_punpcklwd128_mask ((__v8hi) __A, - (__v8hi) __B, - (__v8hi) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_unpacklo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_punpcklwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) __W, - (__mmask16) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_unpacklo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_punpcklwd256_mask ((__v16hi) __A, - (__v16hi) __B, - (__v16hi) _mm256_setzero_si256(), - (__mmask16) __U); -} - -#define _mm_cmp_epi8_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \ - (__v16qi)(__m128i)(b), \ - (p), (__mmask16)-1); }) - -#define _mm_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \ - (__v16qi)(__m128i)(b), \ - (p), (__mmask16)(m)); }) - -#define _mm_cmp_epu8_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)(__m128i)(a), \ - (__v16qi)(__m128i)(b), \ - (p), (__mmask16)-1); }) - -#define _mm_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)(__m128i)(a), \ - (__v16qi)(__m128i)(b), \ - (p), (__mmask16)(m)); }) - -#define _mm256_cmp_epi8_mask(a, b, p) __extension__ ({ \ - (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)(__m256i)(a), \ - (__v32qi)(__m256i)(b), \ - (p), (__mmask32)-1); }) - -#define _mm256_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \ - (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)(__m256i)(a), \ - (__v32qi)(__m256i)(b), \ - (p), (__mmask32)(m)); }) - -#define _mm256_cmp_epu8_mask(a, b, p) __extension__ ({ \ - (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)(__m256i)(a), \ - (__v32qi)(__m256i)(b), \ - (p), (__mmask32)-1); }) - -#define _mm256_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \ - (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)(__m256i)(a), \ - (__v32qi)(__m256i)(b), \ - (p), (__mmask32)(m)); }) - -#define _mm_cmp_epi16_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)(__m128i)(a), \ - (__v8hi)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)(__m128i)(a), \ - (__v8hi)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm_cmp_epu16_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)(__m128i)(a), \ - (__v8hi)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)(__m128i)(a), \ - (__v8hi)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_epi16_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)(__m256i)(a), \ - (__v16hi)(__m256i)(b), \ - (p), (__mmask16)-1); }) - -#define _mm256_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)(__m256i)(a), \ - (__v16hi)(__m256i)(b), \ - (p), (__mmask16)(m)); }) - -#define _mm256_cmp_epu16_mask(a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)(__m256i)(a), \ - (__v16hi)(__m256i)(b), \ - (p), (__mmask16)-1); }) - -#define _mm256_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \ - (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)(__m256i)(a), \ - (__v16hi)(__m256i)(b), \ - (p), (__mmask16)(m)); }) - -#undef __DEFAULT_FN_ATTRS - -#endif /* __AVX512VLBWINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/avx512vldqintrin.h b/External/CastXML/share/castxml/clang/include/avx512vldqintrin.h deleted file mode 100644 index daaf19130..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512vldqintrin.h +++ /dev/null @@ -1,953 +0,0 @@ -/*===---- avx512vldqintrin.h - AVX512VL and AVX512DQ intrinsics ---------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512VLDQINTRIN_H -#define __AVX512VLDQINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512dq"))) - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mullo_epi64 (__m256i __A, __m256i __B) { - return (__m256i) ((__v4di) __A * (__v4di) __B); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mullo_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmullq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mullo_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmullq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mullo_epi64 (__m128i __A, __m128i __B) { - return (__m128i) ((__v2di) __A * (__v2di) __B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mullo_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmullq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mullo_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmullq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_andnot_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_andnpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_andnot_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_andnpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_andnot_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_andnpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_andnot_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_andnpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_andnot_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_andnps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_andnot_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_andnps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_andnot_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_andnps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_andnot_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_andnps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_and_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_andpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_and_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_andpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_and_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_andpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_and_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_andpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_and_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_andps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_and_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_andps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_and_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_andps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_and_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_andps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_xor_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_xorpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_xor_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_xorpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_xor_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_xorpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_xor_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_xorpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_xor_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_xorps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_xor_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_xorps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_xor_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_xorps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_xor_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_xorps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_or_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_orpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_or_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_orpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_or_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_orpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_or_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_orpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_or_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_orps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_or_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_orps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_or_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_orps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_or_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_orps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtpd_epi64 (__m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtpd_epi64 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtpd_epi64 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtpd_epi64 (__m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtpd_epi64 (__m256i __W, __mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtpd_epi64 (__mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtpd_epu64 (__m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtpd_epu64 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtpd_epu64 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtpd_epu64 (__m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtpd_epu64 (__m256i __W, __mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtpd_epu64 (__mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtps_epi64 (__m128 __A) { - return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtps_epi64 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtps_epi64 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtps_epi64 (__m128 __A) { - return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtps_epi64 (__m256i __W, __mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtps_epi64 (__mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtps_epu64 (__m128 __A) { - return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtps_epu64 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtps_epu64 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtps_epu64 (__m128 __A) { - return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtps_epu64 (__m256i __W, __mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtps_epu64 (__mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtepi64_pd (__m128i __A) { - return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, - (__v2df) _mm_setzero_pd(), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_cvtepi64_pd (__m128d __W, __mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_cvtepi64_pd (__mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, - (__v2df) _mm_setzero_pd(), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_cvtepi64_pd (__m256i __A) { - return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, - (__v4df) _mm256_setzero_pd(), - (__mmask8) -1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_cvtepi64_pd (__m256d __W, __mmask8 __U, __m256i __A) { - return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepi64_pd (__mmask8 __U, __m256i __A) { - return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, - (__v4df) _mm256_setzero_pd(), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtepi64_ps (__m128i __A) { - return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_cvtepi64_ps (__m128 __W, __mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_cvtepi64_ps (__mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_cvtepi64_ps (__m256i __A) { - return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_mask_cvtepi64_ps (__m128 __W, __mmask8 __U, __m256i __A) { - return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepi64_ps (__mmask8 __U, __m256i __A) { - return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttpd_epi64 (__m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttpd_epi64 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttpd_epi64 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvttpd_epi64 (__m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttpd_epi64 (__m256i __W, __mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttpd_epi64 (__mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttpd_epu64 (__m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttpd_epu64 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttpd_epu64 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvttpd_epu64 (__m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttpd_epu64 (__m256i __W, __mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttpd_epu64 (__mmask8 __U, __m256d __A) { - return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttps_epi64 (__m128 __A) { - return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttps_epi64 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttps_epi64 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvttps_epi64 (__m128 __A) { - return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttps_epi64 (__m256i __W, __mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttps_epi64 (__mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttps_epu64 (__m128 __A) { - return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttps_epu64 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttps_epu64 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, - (__v2di) _mm_setzero_si128(), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvttps_epu64 (__m128 __A) { - return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttps_epu64 (__m256i __W, __mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttps_epu64 (__mmask8 __U, __m128 __A) { - return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, - (__v4di) _mm256_setzero_si256(), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtepu64_pd (__m128i __A) { - return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, - (__v2df) _mm_setzero_pd(), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_cvtepu64_pd (__m128d __W, __mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_cvtepu64_pd (__mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, - (__v2df) _mm_setzero_pd(), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_cvtepu64_pd (__m256i __A) { - return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, - (__v4df) _mm256_setzero_pd(), - (__mmask8) -1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_cvtepu64_pd (__m256d __W, __mmask8 __U, __m256i __A) { - return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepu64_pd (__mmask8 __U, __m256i __A) { - return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, - (__v4df) _mm256_setzero_pd(), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtepu64_ps (__m128i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_cvtepu64_ps (__m128 __W, __mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_cvtepu64_ps (__mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_cvtepu64_ps (__m256i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_mask_cvtepu64_ps (__m128 __W, __mmask8 __U, __m256i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepu64_ps (__mmask8 __U, __m256i __A) { - return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, - (__v4sf) _mm_setzero_ps(), - (__mmask8) __U); -} - -#define _mm_range_pd(__A, __B, __C) __extension__ ({ \ - (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1); }) - -#define _mm_mask_range_pd(__W, __U, __A, __B, __C) __extension__ ({ \ - (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ - (__v2df) __W, (__mmask8) __U); }) - -#define _mm_maskz_range_pd(__U, __A, __B, __C) __extension__ ({ \ - (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U); }) - -#define _mm256_range_pd(__A, __B, __C) __extension__ ({ \ - (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ - (__v4df) _mm256_setzero_pd(), (__mmask8) -1); }) - -#define _mm256_mask_range_pd(__W, __U, __A, __B, __C) __extension__ ({ \ - (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ - (__v4df) __W, (__mmask8) __U); }) - -#define _mm256_maskz_range_pd(__U, __A, __B, __C) __extension__ ({ \ - (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ - (__v4df) _mm256_setzero_pd(), (__mmask8) __U); }) - -#define _mm_range_ps(__A, __B, __C) __extension__ ({ \ - (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1); }) - -#define _mm_mask_range_ps(__W, __U, __A, __B, __C) __extension__ ({ \ - (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ - (__v4sf) __W, (__mmask8) __U); }) - -#define _mm_maskz_range_ps(__U, __A, __B, __C) __extension__ ({ \ - (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U); }) - -#define _mm256_range_ps(__A, __B, __C) __extension__ ({ \ - (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) -1); }) - -#define _mm256_mask_range_ps(__W, __U, __A, __B, __C) __extension__ ({ \ - (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ - (__v8sf) __W, (__mmask8) __U); }) - -#define _mm256_maskz_range_ps(__U, __A, __B, __C) __extension__ ({ \ - (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) __U); }) - -#define _mm_reduce_pd(__A, __B) __extension__ ({ \ - (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) -1); }) - -#define _mm_mask_reduce_pd(__W, __U, __A, __B) __extension__ ({ \ - (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ - (__v2df) __W, (__mmask8) __U); }) - -#define _mm_maskz_reduce_pd(__U, __A, __B) __extension__ ({ \ - (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ - (__v2df) _mm_setzero_pd(), (__mmask8) __U); }) - -#define _mm256_reduce_pd(__A, __B) __extension__ ({ \ - (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ - (__v4df) _mm256_setzero_pd(), (__mmask8) -1); }) - -#define _mm256_mask_reduce_pd(__W, __U, __A, __B) __extension__ ({ \ - (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ - (__v4df) __W, (__mmask8) __U); }) - -#define _mm256_maskz_reduce_pd(__U, __A, __B) __extension__ ({ \ - (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ - (__v4df) _mm256_setzero_pd(), (__mmask8) __U); }) - -#define _mm_reduce_ps(__A, __B) __extension__ ({ \ - (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1); }) - -#define _mm_mask_reduce_ps(__W, __U, __A, __B) __extension__ ({ \ - (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ - (__v4sf) __W, (__mmask8) __U); }) - -#define _mm_maskz_reduce_ps(__U, __A, __B) __extension__ ({ \ - (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U); }) - -#define _mm256_reduce_ps(__A, __B) __extension__ ({ \ - (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) -1); }) - -#define _mm256_mask_reduce_ps(__W, __U, __A, __B) __extension__ ({ \ - (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ - (__v8sf) __W, (__mmask8) __U); }) - -#define _mm256_maskz_reduce_ps(__U, __A, __B) __extension__ ({ \ - (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) __U); }) - -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/avx512vlintrin.h b/External/CastXML/share/castxml/clang/include/avx512vlintrin.h deleted file mode 100644 index 622385ae7..000000000 --- a/External/CastXML/share/castxml/clang/include/avx512vlintrin.h +++ /dev/null @@ -1,4608 +0,0 @@ -/*===---- avx512vlintrin.h - AVX512VL intrinsics ---------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVX512VLINTRIN_H -#define __AVX512VLINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl"))) - -/* Integer compare */ - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 0, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 0, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpeq_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpeq_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 0, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpeq_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 0, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpeq_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 0, - __u); -} - - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpge_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpge_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpge_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpge_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpge_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 5, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpge_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 5, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpge_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 5, - __u); -} - - - - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtd128_mask((__v4si)__a, (__v4si)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtd128_mask((__v4si)__a, (__v4si)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpgtd256_mask((__v8si)__a, (__v8si)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpgtd256_mask((__v8si)__a, (__v8si)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq128_mask((__v2di)__a, (__v2di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq128_mask((__v2di)__a, (__v2di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpgt_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpgt_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq256_mask((__v4di)__a, (__v4di)__b, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_pcmpgtq256_mask((__v4di)__a, (__v4di)__b, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpgt_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 6, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpgt_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 6, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmple_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmple_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmple_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmple_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmple_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmple_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 2, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmple_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 2, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmplt_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmplt_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmplt_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmplt_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmplt_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmplt_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 1, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmplt_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 1, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epi32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)__a, (__v4si)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epu32_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)__a, (__v4si)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epi32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)__a, (__v8si)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epu32_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)__a, (__v8si)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epi64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)__a, (__v2di)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_cmpneq_epu64_mask(__m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm_mask_cmpneq_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - return (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)__a, (__v2di)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epi64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)__a, (__v4di)__b, 4, - __u); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_cmpneq_epu64_mask(__m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 4, - (__mmask8)-1); -} - -static __inline__ __mmask8 __DEFAULT_FN_ATTRS -_mm256_mask_cmpneq_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - return (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)__a, (__v4di)__b, 4, - __u); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_add_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_add_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_add_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_paddq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_add_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_paddq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_sub_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_sub_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_sub_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_psubq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_sub_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_psubq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_add_epi32 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_add_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_add_epi64 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_paddq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_add_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_paddq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_sub_epi32 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_sub_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_sub_epi64 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_psubq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_sub_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_psubq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mul_epi32 (__m256i __W, __mmask8 __M, __m256i __X, - __m256i __Y) -{ - return (__m256i) __builtin_ia32_pmuldq256_mask ((__v8si) __X, - (__v8si) __Y, - (__v4di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mul_epi32 (__mmask8 __M, __m256i __X, __m256i __Y) -{ - return (__m256i) __builtin_ia32_pmuldq256_mask ((__v8si) __X, - (__v8si) __Y, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mul_epi32 (__m128i __W, __mmask8 __M, __m128i __X, - __m128i __Y) -{ - return (__m128i) __builtin_ia32_pmuldq128_mask ((__v4si) __X, - (__v4si) __Y, - (__v2di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mul_epi32 (__mmask8 __M, __m128i __X, __m128i __Y) -{ - return (__m128i) __builtin_ia32_pmuldq128_mask ((__v4si) __X, - (__v4si) __Y, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mul_epu32 (__m256i __W, __mmask8 __M, __m256i __X, - __m256i __Y) -{ - return (__m256i) __builtin_ia32_pmuludq256_mask ((__v8si) __X, - (__v8si) __Y, - (__v4di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mul_epu32 (__mmask8 __M, __m256i __X, __m256i __Y) -{ - return (__m256i) __builtin_ia32_pmuludq256_mask ((__v8si) __X, - (__v8si) __Y, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mul_epu32 (__m128i __W, __mmask8 __M, __m128i __X, - __m128i __Y) -{ - return (__m128i) __builtin_ia32_pmuludq128_mask ((__v4si) __X, - (__v4si) __Y, - (__v2di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mul_epu32 (__mmask8 __M, __m128i __X, __m128i __Y) -{ - return (__m128i) __builtin_ia32_pmuludq128_mask ((__v4si) __X, - (__v4si) __Y, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_mullo_epi32 (__mmask8 __M, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pmulld256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_mullo_epi32 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pmulld256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pmulld128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_mullo_epi32 (__m128i __W, __mmask16 __M, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pmulld128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_and_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pandd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_and_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pandd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_and_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pandd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_and_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pandd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_andnot_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pandnd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_andnot_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pandnd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_andnot_epi32 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pandnd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_andnot_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pandnd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_or_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pord256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_or_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pord256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_or_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pord128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_or_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pord128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_xor_epi32 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pxord256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_xor_epi32 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pxord256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_xor_epi32 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pxord128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_xor_epi32 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pxord128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_and_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pandq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_and_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pandq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_pd (), - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_and_epi64 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pandq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_and_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pandq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_pd (), - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_andnot_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pandnq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_andnot_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pandnq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_pd (), - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_andnot_epi64 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pandnq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_andnot_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pandnq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_pd (), - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_or_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_porq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_or_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_porq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_or_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_porq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_or_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_porq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_xor_epi64 (__m256i __W, __mmask8 __U, __m256i __A, - __m256i __B) -{ - return (__m256i) __builtin_ia32_pxorq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_xor_epi64 (__mmask8 __U, __m256i __A, __m256i __B) -{ - return (__m256i) __builtin_ia32_pxorq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_xor_epi64 (__m128i __W, __mmask8 __U, __m128i __A, - __m128i __B) -{ - return (__m128i) __builtin_ia32_pxorq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_xor_epi64 (__mmask8 __U, __m128i __A, __m128i __B) -{ - return (__m128i) __builtin_ia32_pxorq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -#define _mm_cmp_epi32_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)(__m128i)(a), \ - (__v4si)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epi32_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)(__m128i)(a), \ - (__v4si)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm_cmp_epu32_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)(__m128i)(a), \ - (__v4si)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epu32_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpd128_mask((__v4si)(__m128i)(a), \ - (__v4si)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_epi32_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)(__m256i)(a), \ - (__v8si)(__m256i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_epi32_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpd256_mask((__v8si)(__m256i)(a), \ - (__v8si)(__m256i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_epu32_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)(__m256i)(a), \ - (__v8si)(__m256i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_epu32_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpd256_mask((__v8si)(__m256i)(a), \ - (__v8si)(__m256i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm_cmp_epi64_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)(__m128i)(a), \ - (__v2di)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epi64_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpq128_mask((__v2di)(__m128i)(a), \ - (__v2di)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm_cmp_epu64_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)(__m128i)(a), \ - (__v2di)(__m128i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm_mask_cmp_epu64_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpq128_mask((__v2di)(__m128i)(a), \ - (__v2di)(__m128i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_epi64_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)(__m256i)(a), \ - (__v4di)(__m256i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_epi64_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpq256_mask((__v4di)(__m256i)(a), \ - (__v4di)(__m256i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_epu64_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)(__m256i)(a), \ - (__v4di)(__m256i)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_epu64_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_ucmpq256_mask((__v4di)(__m256i)(a), \ - (__v4di)(__m256i)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_ps_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpps256_mask((__v8sf)(__m256)(a), \ - (__v8sf)(__m256)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_ps_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpps256_mask((__v8sf)(__m256)(a), \ - (__v8sf)(__m256)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm256_cmp_pd_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd256_mask((__v4df)(__m256)(a), \ - (__v4df)(__m256)(b), \ - (p), (__mmask8)-1); }) - -#define _mm256_mask_cmp_pd_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd256_mask((__v4df)(__m256)(a), \ - (__v4df)(__m256)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm128_cmp_ps_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpps128_mask((__v4sf)(__m128)(a), \ - (__v4sf)(__m128)(b), \ - (p), (__mmask8)-1); }) - -#define _mm128_mask_cmp_ps_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmpps128_mask((__v4sf)(__m128)(a), \ - (__v4sf)(__m128)(b), \ - (p), (__mmask8)(m)); }) - -#define _mm128_cmp_pd_mask(a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd128_mask((__v2df)(__m128)(a), \ - (__v2df)(__m128)(b), \ - (p), (__mmask8)-1); }) - -#define _mm128_mask_cmp_pd_mask(m, a, b, p) __extension__ ({ \ - (__mmask8)__builtin_ia32_cmppd128_mask((__v2df)(__m128)(a), \ - (__v2df)(__m128)(b), \ - (p), (__mmask8)(m)); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_mask3 ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_maskz ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_mask ((__v2df) __A, - (__v2df) __B, - -(__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_maskz ((__v2df) __A, - (__v2df) __B, - -(__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_mask3 (-(__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fnmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_maskz (-(__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fnmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddpd128_maskz (-(__v2df) __A, - (__v2df) __B, - -(__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_mask3 ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_maskz ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_mask ((__v4df) __A, - (__v4df) __B, - -(__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_maskz ((__v4df) __A, - (__v4df) __B, - -(__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_mask3 (-(__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fnmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_maskz (-(__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fnmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddpd256_maskz (-(__v4df) __A, - (__v4df) __B, - -(__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfmaddps128_mask3 ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_maskz ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_mask ((__v4sf) __A, - (__v4sf) __B, - -(__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_maskz ((__v4sf) __A, - (__v4sf) __B, - -(__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfmaddps128_mask3 (-(__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fnmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_maskz (-(__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fnmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddps128_maskz (-(__v4sf) __A, - (__v4sf) __B, - -(__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fmadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fmadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfmaddps256_mask3 ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fmadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_maskz ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_mask ((__v8sf) __A, - (__v8sf) __B, - -(__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_maskz ((__v8sf) __A, - (__v8sf) __B, - -(__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfmaddps256_mask3 (-(__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fnmadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_maskz (-(__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fnmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddps256_maskz (-(__v8sf) __A, - (__v8sf) __B, - -(__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fmaddsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddsubpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfmaddsubpd128_mask3 ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) - __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fmaddsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddsubpd128_maskz ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) - __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fmsubadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddsubpd128_mask ((__v2df) __A, - (__v2df) __B, - -(__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_fmsubadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfmaddsubpd128_maskz ((__v2df) __A, - (__v2df) __B, - -(__v2df) __C, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fmaddsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddsubpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfmaddsubpd256_mask3 ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fmaddsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddsubpd256_maskz ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fmsubadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddsubpd256_mask ((__v4df) __A, - (__v4df) __B, - -(__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_fmsubadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfmaddsubpd256_maskz ((__v4df) __A, - (__v4df) __B, - -(__v4df) __C, - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fmaddsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddsubps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfmaddsubps128_mask3 ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fmaddsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddsubps128_maskz ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fmsubadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddsubps128_mask ((__v4sf) __A, - (__v4sf) __B, - -(__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_fmsubadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfmaddsubps128_maskz ((__v4sf) __A, - (__v4sf) __B, - -(__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fmaddsub_ps(__m256 __A, __mmask8 __U, __m256 __B, - __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddsubps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfmaddsubps256_mask3 ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fmaddsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddsubps256_maskz ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fmsubadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddsubps256_mask ((__v8sf) __A, - (__v8sf) __B, - -(__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_fmsubadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfmaddsubps256_maskz ((__v8sf) __A, - (__v8sf) __B, - -(__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfmsubpd128_mask3 ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfmsubpd256_mask3 ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfmsubps128_mask3 ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfmsubps256_mask3 ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfmsubaddpd128_mask3 ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfmsubaddpd256_mask3 ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfmsubaddps128_mask3 ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfmsubaddps256_mask3 ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fnmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfnmaddpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fnmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfnmaddpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fnmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfnmaddps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fnmadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfnmaddps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_fnmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) -{ - return (__m128d) __builtin_ia32_vfnmsubpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask3_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) -{ - return (__m128d) __builtin_ia32_vfnmsubpd128_mask3 ((__v2df) __A, - (__v2df) __B, - (__v2df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_fnmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) -{ - return (__m256d) __builtin_ia32_vfnmsubpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask3_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) -{ - return (__m256d) __builtin_ia32_vfnmsubpd256_mask3 ((__v4df) __A, - (__v4df) __B, - (__v4df) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_fnmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) -{ - return (__m128) __builtin_ia32_vfnmsubps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask3_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) -{ - return (__m128) __builtin_ia32_vfnmsubps128_mask3 ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_fnmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) -{ - return (__m256) __builtin_ia32_vfnmsubps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask3_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) -{ - return (__m256) __builtin_ia32_vfnmsubps256_mask3 ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __C, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_add_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_addpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_add_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_addpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_add_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_addpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_add_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_addpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_add_ps (__m128 __W, __mmask16 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_addps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_add_ps (__mmask16 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_addps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_add_ps (__m256 __W, __mmask16 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_addps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_add_ps (__mmask16 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_addps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_blend_epi32 (__mmask8 __U, __m128i __A, __m128i __W) { - return (__m128i) __builtin_ia32_blendmd_128_mask ((__v4si) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_blend_epi32 (__mmask8 __U, __m256i __A, __m256i __W) { - return (__m256i) __builtin_ia32_blendmd_256_mask ((__v8si) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_blend_pd (__mmask8 __U, __m128d __A, __m128d __W) { - return (__m128d) __builtin_ia32_blendmpd_128_mask ((__v2df) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_blend_pd (__mmask8 __U, __m256d __A, __m256d __W) { - return (__m256d) __builtin_ia32_blendmpd_256_mask ((__v4df) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_blend_ps (__mmask8 __U, __m128 __A, __m128 __W) { - return (__m128) __builtin_ia32_blendmps_128_mask ((__v4sf) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_blend_ps (__mmask8 __U, __m256 __A, __m256 __W) { - return (__m256) __builtin_ia32_blendmps_256_mask ((__v8sf) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_blend_epi64 (__mmask8 __U, __m128i __A, __m128i __W) { - return (__m128i) __builtin_ia32_blendmq_128_mask ((__v2di) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_blend_epi64 (__mmask8 __U, __m256i __A, __m256i __W) { - return (__m256i) __builtin_ia32_blendmq_256_mask ((__v4di) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_compress_pd (__m128d __W, __mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_compressdf128_mask ((__v2df) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_compress_pd (__mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_compressdf128_mask ((__v2df) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_compress_pd (__m256d __W, __mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_compressdf256_mask ((__v4df) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_compress_pd (__mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_compressdf256_mask ((__v4df) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_compress_epi64 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_compressdi128_mask ((__v2di) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_compress_epi64 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_compressdi128_mask ((__v2di) __A, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_compress_epi64 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_compressdi256_mask ((__v4di) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_compress_epi64 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_compressdi256_mask ((__v4di) __A, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_compress_ps (__m128 __W, __mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_compresssf128_mask ((__v4sf) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_compress_ps (__mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_compresssf128_mask ((__v4sf) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_compress_ps (__m256 __W, __mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_compresssf256_mask ((__v8sf) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_compress_ps (__mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_compresssf256_mask ((__v8sf) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_compress_epi32 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_compresssi128_mask ((__v4si) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_compress_epi32 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_compresssi128_mask ((__v4si) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_compress_epi32 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_compresssi256_mask ((__v8si) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_compress_epi32 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_compresssi256_mask ((__v8si) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mask_compressstoreu_pd (void *__P, __mmask8 __U, __m128d __A) { - __builtin_ia32_compressstoredf128_mask ((__v2df *) __P, - (__v2df) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_mask_compressstoreu_pd (void *__P, __mmask8 __U, __m256d __A) { - __builtin_ia32_compressstoredf256_mask ((__v4df *) __P, - (__v4df) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mask_compressstoreu_epi64 (void *__P, __mmask8 __U, __m128i __A) { - __builtin_ia32_compressstoredi128_mask ((__v2di *) __P, - (__v2di) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_mask_compressstoreu_epi64 (void *__P, __mmask8 __U, __m256i __A) { - __builtin_ia32_compressstoredi256_mask ((__v4di *) __P, - (__v4di) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mask_compressstoreu_ps (void *__P, __mmask8 __U, __m128 __A) { - __builtin_ia32_compressstoresf128_mask ((__v4sf *) __P, - (__v4sf) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_mask_compressstoreu_ps (void *__P, __mmask8 __U, __m256 __A) { - __builtin_ia32_compressstoresf256_mask ((__v8sf *) __P, - (__v8sf) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mask_compressstoreu_epi32 (void *__P, __mmask8 __U, __m128i __A) { - __builtin_ia32_compressstoresi128_mask ((__v4si *) __P, - (__v4si) __A, - (__mmask8) __U); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm256_mask_compressstoreu_epi32 (void *__P, __mmask8 __U, __m256i __A) { - __builtin_ia32_compressstoresi256_mask ((__v8si *) __P, - (__v8si) __A, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_cvtepi32_pd (__m128d __W, __mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtdq2pd128_mask ((__v4si) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_cvtepi32_pd (__mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtdq2pd128_mask ((__v4si) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_cvtepi32_pd (__m256d __W, __mmask8 __U, __m128i __A) { - return (__m256d) __builtin_ia32_cvtdq2pd256_mask ((__v4si) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepi32_pd (__mmask8 __U, __m128i __A) { - return (__m256d) __builtin_ia32_cvtdq2pd256_mask ((__v4si) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_cvtepi32_ps (__m128 __W, __mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtdq2ps128_mask ((__v4si) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_cvtepi32_ps (__mmask16 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtdq2ps128_mask ((__v4si) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_cvtepi32_ps (__m256 __W, __mmask8 __U, __m256i __A) { - return (__m256) __builtin_ia32_cvtdq2ps256_mask ((__v8si) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepi32_ps (__mmask16 __U, __m256i __A) { - return (__m256) __builtin_ia32_cvtdq2ps256_mask ((__v8si) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtpd_epi32 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2dq128_mask ((__v2df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtpd_epi32 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2dq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvtpd_epi32 (__m128i __W, __mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvtpd2dq256_mask ((__v4df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtpd_epi32 (__mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvtpd2dq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_cvtpd_ps (__m128 __W, __mmask8 __U, __m128d __A) { - return (__m128) __builtin_ia32_cvtpd2ps_mask ((__v2df) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_cvtpd_ps (__mmask8 __U, __m128d __A) { - return (__m128) __builtin_ia32_cvtpd2ps_mask ((__v2df) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_mask_cvtpd_ps (__m128 __W, __mmask8 __U, __m256d __A) { - return (__m128) __builtin_ia32_cvtpd2ps256_mask ((__v4df) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm256_maskz_cvtpd_ps (__mmask8 __U, __m256d __A) { - return (__m128) __builtin_ia32_cvtpd2ps256_mask ((__v4df) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtpd_epu32 (__m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtpd_epu32 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq128_mask ((__v2df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtpd_epu32 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_cvtpd_epu32 (__m256d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvtpd_epu32 (__m128i __W, __mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq256_mask ((__v4df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtpd_epu32 (__mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvtpd2udq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtps_epi32 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2dq128_mask ((__v4sf) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtps_epi32 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2dq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtps_epi32 (__m256i __W, __mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvtps2dq256_mask ((__v8sf) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtps_epi32 (__mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvtps2dq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_cvtps_pd (__m128d __W, __mmask8 __U, __m128 __A) { - return (__m128d) __builtin_ia32_cvtps2pd128_mask ((__v4sf) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_cvtps_pd (__mmask8 __U, __m128 __A) { - return (__m128d) __builtin_ia32_cvtps2pd128_mask ((__v4sf) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_cvtps_pd (__m256d __W, __mmask8 __U, __m128 __A) { - return (__m256d) __builtin_ia32_cvtps2pd256_mask ((__v4sf) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_cvtps_pd (__mmask8 __U, __m128 __A) { - return (__m256d) __builtin_ia32_cvtps2pd256_mask ((__v4sf) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtps_epu32 (__m128 __A) { - return (__m128i) __builtin_ia32_cvtps2udq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvtps_epu32 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2udq128_mask ((__v4sf) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvtps_epu32 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvtps2udq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvtps_epu32 (__m256 __A) { - return (__m256i) __builtin_ia32_cvtps2udq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvtps_epu32 (__m256i __W, __mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvtps2udq256_mask ((__v8sf) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvtps_epu32 (__mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvtps2udq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttpd_epi32 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2dq128_mask ((__v2df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttpd_epi32 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2dq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvttpd_epi32 (__m128i __W, __mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvttpd2dq256_mask ((__v4df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttpd_epi32 (__mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvttpd2dq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttpd_epu32 (__m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttpd_epu32 (__m128i __W, __mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq128_mask ((__v2df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttpd_epu32 (__mmask8 __U, __m128d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq128_mask ((__v2df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_cvttpd_epu32 (__m256d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_mask_cvttpd_epu32 (__m128i __W, __mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq256_mask ((__v4df) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttpd_epu32 (__mmask8 __U, __m256d __A) { - return (__m128i) __builtin_ia32_cvttpd2udq256_mask ((__v4df) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttps_epi32 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2dq128_mask ((__v4sf) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttps_epi32 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2dq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttps_epi32 (__m256i __W, __mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvttps2dq256_mask ((__v8sf) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttps_epi32 (__mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvttps2dq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttps_epu32 (__m128 __A) { - return (__m128i) __builtin_ia32_cvttps2udq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_cvttps_epu32 (__m128i __W, __mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2udq128_mask ((__v4sf) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_cvttps_epu32 (__mmask8 __U, __m128 __A) { - return (__m128i) __builtin_ia32_cvttps2udq128_mask ((__v4sf) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cvttps_epu32 (__m256 __A) { - return (__m256i) __builtin_ia32_cvttps2udq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_cvttps_epu32 (__m256i __W, __mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvttps2udq256_mask ((__v8sf) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_cvttps_epu32 (__mmask8 __U, __m256 __A) { - return (__m256i) __builtin_ia32_cvttps2udq256_mask ((__v8sf) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtepu32_pd (__m128i __A) { - return (__m128d) __builtin_ia32_cvtudq2pd128_mask ((__v4si) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_cvtepu32_pd (__m128d __W, __mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtudq2pd128_mask ((__v4si) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_cvtepu32_pd (__mmask8 __U, __m128i __A) { - return (__m128d) __builtin_ia32_cvtudq2pd128_mask ((__v4si) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_cvtepu32_pd (__m128i __A) { - return (__m256d) __builtin_ia32_cvtudq2pd256_mask ((__v4si) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_cvtepu32_pd (__m256d __W, __mmask8 __U, __m128i __A) { - return (__m256d) __builtin_ia32_cvtudq2pd256_mask ((__v4si) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepu32_pd (__mmask8 __U, __m128i __A) { - return (__m256d) __builtin_ia32_cvtudq2pd256_mask ((__v4si) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtepu32_ps (__m128i __A) { - return (__m128) __builtin_ia32_cvtudq2ps128_mask ((__v4si) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_cvtepu32_ps (__m128 __W, __mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtudq2ps128_mask ((__v4si) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_cvtepu32_ps (__mmask8 __U, __m128i __A) { - return (__m128) __builtin_ia32_cvtudq2ps128_mask ((__v4si) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_cvtepu32_ps (__m256i __A) { - return (__m256) __builtin_ia32_cvtudq2ps256_mask ((__v8si) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_cvtepu32_ps (__m256 __W, __mmask8 __U, __m256i __A) { - return (__m256) __builtin_ia32_cvtudq2ps256_mask ((__v8si) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_cvtepu32_ps (__mmask8 __U, __m256i __A) { - return (__m256) __builtin_ia32_cvtudq2ps256_mask ((__v8si) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_div_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_divpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_div_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_divpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_div_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_divpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_div_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_divpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_div_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_divps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_div_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_divps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_div_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_divps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_div_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_divps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_expand_pd (__m128d __W, __mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_expanddf128_mask ((__v2df) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_expand_pd (__mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_expanddf128_mask ((__v2df) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_expand_pd (__m256d __W, __mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_expanddf256_mask ((__v4df) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_expand_pd (__mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_expanddf256_mask ((__v4df) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_expand_epi64 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_expanddi128_mask ((__v2di) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_expand_epi64 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_expanddi128_mask ((__v2di) __A, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_expand_epi64 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_expanddi256_mask ((__v4di) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_expand_epi64 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_expanddi256_mask ((__v4di) __A, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_expandloadu_pd (__m128d __W, __mmask8 __U, void const *__P) { - return (__m128d) __builtin_ia32_expandloaddf128_mask ((__v2df *) __P, - (__v2df) __W, - (__mmask8) - __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_expandloadu_pd (__mmask8 __U, void const *__P) { - return (__m128d) __builtin_ia32_expandloaddf128_mask ((__v2df *) __P, - (__v2df) - _mm_setzero_pd (), - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_expandloadu_pd (__m256d __W, __mmask8 __U, void const *__P) { - return (__m256d) __builtin_ia32_expandloaddf256_mask ((__v4df *) __P, - (__v4df) __W, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_expandloadu_pd (__mmask8 __U, void const *__P) { - return (__m256d) __builtin_ia32_expandloaddf256_mask ((__v4df *) __P, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_expandloadu_epi64 (__m128i __W, __mmask8 __U, void const *__P) { - return (__m128i) __builtin_ia32_expandloaddi128_mask ((__v2di *) __P, - (__v2di) __W, - (__mmask8) - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_expandloadu_epi64 (__mmask8 __U, void const *__P) { - return (__m128i) __builtin_ia32_expandloaddi128_mask ((__v2di *) __P, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_expandloadu_epi64 (__m256i __W, __mmask8 __U, - void const *__P) { - return (__m256i) __builtin_ia32_expandloaddi256_mask ((__v4di *) __P, - (__v4di) __W, - (__mmask8) - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_expandloadu_epi64 (__mmask8 __U, void const *__P) { - return (__m256i) __builtin_ia32_expandloaddi256_mask ((__v4di *) __P, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_expandloadu_ps (__m128 __W, __mmask8 __U, void const *__P) { - return (__m128) __builtin_ia32_expandloadsf128_mask ((__v4sf *) __P, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_expandloadu_ps (__mmask8 __U, void const *__P) { - return (__m128) __builtin_ia32_expandloadsf128_mask ((__v4sf *) __P, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) - __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_expandloadu_ps (__m256 __W, __mmask8 __U, void const *__P) { - return (__m256) __builtin_ia32_expandloadsf256_mask ((__v8sf *) __P, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_expandloadu_ps (__mmask8 __U, void const *__P) { - return (__m256) __builtin_ia32_expandloadsf256_mask ((__v8sf *) __P, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_expandloadu_epi32 (__m128i __W, __mmask8 __U, void const *__P) { - return (__m128i) __builtin_ia32_expandloadsi128_mask ((__v4si *) __P, - (__v4si) __W, - (__mmask8) - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_expandloadu_epi32 (__mmask8 __U, void const *__P) { - return (__m128i) __builtin_ia32_expandloadsi128_mask ((__v4si *) __P, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_expandloadu_epi32 (__m256i __W, __mmask8 __U, - void const *__P) { - return (__m256i) __builtin_ia32_expandloadsi256_mask ((__v8si *) __P, - (__v8si) __W, - (__mmask8) - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_expandloadu_epi32 (__mmask8 __U, void const *__P) { - return (__m256i) __builtin_ia32_expandloadsi256_mask ((__v8si *) __P, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_expand_ps (__m128 __W, __mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_expandsf128_mask ((__v4sf) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_expand_ps (__mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_expandsf128_mask ((__v4sf) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_expand_ps (__m256 __W, __mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_expandsf256_mask ((__v8sf) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_expand_ps (__mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_expandsf256_mask ((__v8sf) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_expand_epi32 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_expandsi128_mask ((__v4si) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_expand_epi32 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_expandsi128_mask ((__v4si) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_expand_epi32 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_expandsi256_mask ((__v8si) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_expand_epi32 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_expandsi256_mask ((__v8si) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_getexp_pd (__m128d __A) { - return (__m128d) __builtin_ia32_getexppd128_mask ((__v2df) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_getexp_pd (__m128d __W, __mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_getexppd128_mask ((__v2df) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_getexp_pd (__mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_getexppd128_mask ((__v2df) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_getexp_pd (__m256d __A) { - return (__m256d) __builtin_ia32_getexppd256_mask ((__v4df) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_getexp_pd (__m256d __W, __mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_getexppd256_mask ((__v4df) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_getexp_pd (__mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_getexppd256_mask ((__v4df) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_getexp_ps (__m128 __A) { - return (__m128) __builtin_ia32_getexpps128_mask ((__v4sf) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_getexp_ps (__m128 __W, __mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_getexpps128_mask ((__v4sf) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_getexp_ps (__mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_getexpps128_mask ((__v4sf) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_getexp_ps (__m256 __A) { - return (__m256) __builtin_ia32_getexpps256_mask ((__v8sf) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_getexp_ps (__m256 __W, __mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_getexpps256_mask ((__v8sf) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_getexp_ps (__mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_getexpps256_mask ((__v8sf) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_max_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_maxpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_max_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_maxpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_max_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_maxpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_max_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_maxpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_max_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_maxps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_max_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_maxps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_max_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_maxps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_max_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_maxps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_min_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_minpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_min_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_minpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_min_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_minpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_min_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_minpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_min_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_minps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_min_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_minps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_min_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_minps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_min_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_minps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_mul_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_mulpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_mul_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_mulpd_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_mul_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_mulpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_mul_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_mulpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_mul_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_mulps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_mul_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_mulps_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_mul_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_mulps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_mul_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_mulps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_abs_epi32 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_pabsd128_mask ((__v4si) __A, - (__v4si) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_abs_epi32 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_pabsd128_mask ((__v4si) __A, - (__v4si) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_abs_epi32 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_pabsd256_mask ((__v8si) __A, - (__v8si) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_abs_epi32 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_pabsd256_mask ((__v8si) __A, - (__v8si) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_abs_epi64 (__m128i __A) { - return (__m128i) __builtin_ia32_pabsq128_mask ((__v2di) __A, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_abs_epi64 (__m128i __W, __mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_pabsq128_mask ((__v2di) __A, - (__v2di) __W, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_abs_epi64 (__mmask8 __U, __m128i __A) { - return (__m128i) __builtin_ia32_pabsq128_mask ((__v2di) __A, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_abs_epi64 (__m256i __A) { - return (__m256i) __builtin_ia32_pabsq256_mask ((__v4di) __A, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_abs_epi64 (__m256i __W, __mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_pabsq256_mask ((__v4di) __A, - (__v4di) __W, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_abs_epi64 (__mmask8 __U, __m256i __A) { - return (__m256i) __builtin_ia32_pabsq256_mask ((__v4di) __A, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epi32 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxsd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epi32 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmaxsd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epi32 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxsd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epi32 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmaxsd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epi64 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epi64 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmaxsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epi64 (__m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epi64 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epi64 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmaxsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epi64 (__m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epu32 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxud128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epu32 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmaxud128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epu32 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxud256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epu32 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmaxud256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_max_epu64 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epu64 (__m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pmaxuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_max_epu64 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pmaxuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_max_epu64 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_max_epu64 (__m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pmaxuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_max_epu64 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pmaxuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epi32 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminsd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epi32 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pminsd128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epi32 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminsd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epi32 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pminsd256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epi64 (__m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epi64 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pminsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epi64 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminsq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epi64 (__m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epi64 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pminsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epi64 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminsq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epu32 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminud128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epu32 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pminud128_mask ((__v4si) __A, - (__v4si) __B, - (__v4si) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epu32 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminud256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) - _mm256_setzero_si256 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epu32 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pminud256_mask ((__v8si) __A, - (__v8si) __B, - (__v8si) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epu64 (__m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_min_epu64 (__m128i __W, __mmask8 __M, __m128i __A, - __m128i __B) { - return (__m128i) __builtin_ia32_pminuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) __W, __M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_min_epu64 (__mmask8 __M, __m128i __A, __m128i __B) { - return (__m128i) __builtin_ia32_pminuq128_mask ((__v2di) __A, - (__v2di) __B, - (__v2di) - _mm_setzero_si128 (), - __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_min_epu64 (__m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_min_epu64 (__m256i __W, __mmask8 __M, __m256i __A, - __m256i __B) { - return (__m256i) __builtin_ia32_pminuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) __W, __M); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_min_epu64 (__mmask8 __M, __m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_pminuq256_mask ((__v4di) __A, - (__v4di) __B, - (__v4di) - _mm256_setzero_si256 (), - __M); -} - -#define _mm_roundscale_pd(__A, __imm) __extension__ ({ \ - (__m128d) __builtin_ia32_rndscalepd_128_mask ((__v2df) __A, \ - __imm, (__v2df) _mm_setzero_pd (), (__mmask8) -1); }) - - -#define _mm_mask_roundscale_pd(__W, __U, __A, __imm) __extension__ ({ \ - (__m128d) __builtin_ia32_rndscalepd_128_mask ((__v2df) __A, __imm, \ - (__v2df) __W, (__mmask8) __U); }) - - -#define _mm_maskz_roundscale_pd(__U, __A, __imm) __extension__ ({ \ - (__m128d) __builtin_ia32_rndscalepd_128_mask ((__v2df) __A, __imm, \ - (__v2df) _mm_setzero_pd (), (__mmask8) __U); }) - - -#define _mm256_roundscale_pd(__A, __imm) __extension__ ({ \ - (__m256d) __builtin_ia32_rndscalepd_256_mask ((__v4df) __A, __imm, \ - (__v4df) _mm256_setzero_pd (), (__mmask8) -1); }) - - -#define _mm256_mask_roundscale_pd(__W, __U, __A, __imm) __extension__ ({ \ - (__m256d) __builtin_ia32_rndscalepd_256_mask ((__v4df) __A, __imm, \ - (__v4df) __W, (__mmask8) __U); }) - - -#define _mm256_maskz_roundscale_pd(__U, __A, __imm) __extension__ ({ \ - (__m256d) __builtin_ia32_rndscalepd_256_mask ((__v4df) __A, __imm, \ - (__v4df) _mm256_setzero_pd(), (__mmask8) __U); }) - -#define _mm_roundscale_ps(__A, __imm) __extension__ ({ \ - (__m128) __builtin_ia32_rndscaleps_128_mask ((__v4sf) __A, __imm, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) -1); }) - - -#define _mm_mask_roundscale_ps(__W, __U, __A, __imm) __extension__ ({ \ - (__m128) __builtin_ia32_rndscaleps_128_mask ((__v4sf) __A, __imm, \ - (__v4sf) __W, (__mmask8) __U); }) - - -#define _mm_maskz_roundscale_ps(__U, __A, __imm) __extension__ ({ \ - (__m128) __builtin_ia32_rndscaleps_128_mask ((__v4sf) __A, __imm, \ - (__v4sf) _mm_setzero_ps(), (__mmask8) __U); }) - -#define _mm256_roundscale_ps(__A, __imm) __extension__ ({ \ - (__m256) __builtin_ia32_rndscaleps_256_mask ((__v8sf) __A,__imm, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) -1); }) - -#define _mm256_mask_roundscale_ps(__W, __U, __A,__imm) __extension__ ({ \ - (__m256) __builtin_ia32_rndscaleps_256_mask ((__v8sf) __A, __imm, \ - (__v8sf) __W, (__mmask8) __U); }) - - -#define _mm256_maskz_roundscale_ps(__U, __A, __imm) __extension__ ({ \ - (__m256) __builtin_ia32_rndscaleps_256_mask ((__v8sf) __A, __imm, \ - (__v8sf) _mm256_setzero_ps(), (__mmask8) __U); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_scalef_pd (__m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_scalefpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_scalef_pd (__m128d __W, __mmask8 __U, __m128d __A, - __m128d __B) { - return (__m128d) __builtin_ia32_scalefpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_scalef_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_scalefpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_scalef_pd (__m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_scalefpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) -1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_scalef_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_scalefpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_scalef_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_scalefpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_scalef_ps (__m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_scalefps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_scalef_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_scalefps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_scalef_ps (__mmask8 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_scalefps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_scalef_ps (__m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_scalefps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) -1); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_scalef_ps (__m256 __W, __mmask8 __U, __m256 __A, - __m256 __B) { - return (__m256) __builtin_ia32_scalefps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_scalef_ps (__mmask8 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_scalefps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -#define _mm_i64scatter_pd(__addr,__index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv2df(__addr, (__mmask8) 0xFF, (__v2di) __index, \ - (__v2df) __v1, __scale); }) - -#define _mm_mask_i64scatter_pd(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv2df (__addr, __mask, (__v2di) __index, \ - (__v2df) __v1, __scale); }) - - -#define _mm_i64scatter_epi64(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv2di (__addr, (__mmask8) 0xFF, \ - (__v2di) __index, (__v2di) __v1, __scale); }) - -#define _mm_mask_i64scatter_epi64(__addr, __mask, __index, __v1,\ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv2di (__addr, __mask, (__v2di) __index,\ - (__v2di) __v1, __scale); }) - -#define _mm256_i64scatter_pd(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4df (__addr, (__mmask8) 0xFF,\ - (__v4di) __index, (__v4df) __v1, __scale); }) - -#define _mm256_mask_i64scatter_pd(__addr, __mask, __index, __v1,\ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4df (__addr, __mask, (__v4di) __index,\ - (__v4df) __v1, __scale); }) - -#define _mm256_i64scatter_epi64(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4di (__addr, (__mmask8) 0xFF, (__v4di) __index,\ - (__v4di) __v1, __scale); }) - -#define _mm256_mask_i64scatter_epi64(__addr, __mask, __index, __v1,\ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4di (__addr, __mask, (__v4di) __index,\ - (__v4di) __v1, __scale); }) - -#define _mm_i64scatter_ps(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4sf (__addr, (__mmask8) 0xFF,\ - (__v2di) __index, (__v4sf) __v1, __scale); }) - -#define _mm_mask_i64scatter_ps(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4sf (__addr, __mask, (__v2di) __index,\ - (__v4sf) __v1, __scale); }) - -#define _mm_i64scatter_epi32(__addr, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4si (__addr, (__mmask8) 0xFF,\ - (__v2di) __index, (__v4si) __v1, __scale); }) - -#define _mm_mask_i64scatter_epi32(__addr, __mask, __index, __v1,\ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv4si (__addr, __mask, (__v2di) __index,\ - (__v4si) __v1, __scale); }) - -#define _mm256_i64scatter_ps(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv8sf (__addr, (__mmask8) 0xFF, (__v4di) __index, \ - (__v4sf) __v1, __scale); }) - -#define _mm256_mask_i64scatter_ps(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv8sf (__addr, __mask, (__v4di) __index, \ - (__v4sf) __v1, __scale); }) - -#define _mm256_i64scatter_epi32(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv8si (__addr, (__mmask8) 0xFF, \ - (__v4di) __index, (__v4si) __v1, __scale); }) - -#define _mm256_mask_i64scatter_epi32(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scatterdiv8si(__addr, __mask, (__v4di) __index, \ - (__v4si) __v1, __scale); }) - -#define _mm_i32scatter_pd(__addr, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv2df (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v2df) __v1, __scale); }) - -#define _mm_mask_i32scatter_pd(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv2df (__addr, __mask, (__v4si) __index,\ - (__v2df) __v1, __scale); }) - -#define _mm_i32scatter_epi64(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv2di (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v2di) __v1, __scale); }) - -#define _mm_mask_i32scatter_epi64(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv2di (__addr, __mask, (__v4si) __index, \ - (__v2di) __v1, __scale); }) - -#define _mm256_i32scatter_pd(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4df (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v4df) __v1, __scale); }) - -#define _mm256_mask_i32scatter_pd(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4df (__addr, __mask, (__v4si) __index, \ - (__v4df) __v1, __scale); }) - -#define _mm256_i32scatter_epi64(__addr, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4di (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v4di) __v1, __scale); }) - -#define _mm256_mask_i32scatter_epi64(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4di (__addr, __mask, (__v4si) __index, \ - (__v4di) __v1, __scale); }) - -#define _mm_i32scatter_ps(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4sf (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v4sf) __v1, __scale); }) - -#define _mm_mask_i32scatter_ps(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4sf (__addr, __mask, (__v4si) __index, \ - (__v4sf) __v1, __scale); }) - -#define _mm_i32scatter_epi32(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4si (__addr, (__mmask8) 0xFF, \ - (__v4si) __index, (__v4si) __v1, __scale); }) - -#define _mm_mask_i32scatter_epi32(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv4si (__addr, __mask, (__v4si) __index,\ - (__v4si) __v1, __scale); }) - -#define _mm256_i32scatter_ps(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv8sf (__addr, (__mmask8) 0xFF, \ - (__v8si) __index, (__v8sf) __v1, __scale); }) - -#define _mm256_mask_i32scatter_ps(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv8sf (__addr, __mask, (__v8si) __index,\ - (__v8sf) __v1, __scale); }) - -#define _mm256_i32scatter_epi32(__addr, __index, __v1, __scale) __extension__ ({ \ - __builtin_ia32_scattersiv8si (__addr, (__mmask8) 0xFF, \ - (__v8si) __index, (__v8si) __v1, __scale); }) - -#define _mm256_mask_i32scatter_epi32(__addr, __mask, __index, __v1, \ - __scale) __extension__ ({ \ - __builtin_ia32_scattersiv8si (__addr, __mask, (__v8si) __index, \ - (__v8si) __v1, __scale); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_sqrt_pd (__m128d __W, __mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_sqrtpd128_mask ((__v2df) __A, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_sqrt_pd (__mmask8 __U, __m128d __A) { - return (__m128d) __builtin_ia32_sqrtpd128_mask ((__v2df) __A, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_sqrt_pd (__m256d __W, __mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_sqrtpd256_mask ((__v4df) __A, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_sqrt_pd (__mmask8 __U, __m256d __A) { - return (__m256d) __builtin_ia32_sqrtpd256_mask ((__v4df) __A, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_sqrt_ps (__m128 __W, __mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_sqrtps128_mask ((__v4sf) __A, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_sqrt_ps (__mmask8 __U, __m128 __A) { - return (__m128) __builtin_ia32_sqrtps128_mask ((__v4sf) __A, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_sqrt_ps (__m256 __W, __mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_sqrtps256_mask ((__v8sf) __A, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_sqrt_ps (__mmask8 __U, __m256 __A) { - return (__m256) __builtin_ia32_sqrtps256_mask ((__v8sf) __A, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_sub_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_subpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) __W, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_sub_pd (__mmask8 __U, __m128d __A, __m128d __B) { - return (__m128d) __builtin_ia32_subpd128_mask ((__v2df) __A, - (__v2df) __B, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_sub_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256d __B) { - return (__m256d) __builtin_ia32_subpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) __W, - (__mmask8) __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_sub_pd (__mmask8 __U, __m256d __A, __m256d __B) { - return (__m256d) __builtin_ia32_subpd256_mask ((__v4df) __A, - (__v4df) __B, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_sub_ps (__m128 __W, __mmask16 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_subps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) __W, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_sub_ps (__mmask16 __U, __m128 __A, __m128 __B) { - return (__m128) __builtin_ia32_subps128_mask ((__v4sf) __A, - (__v4sf) __B, - (__v4sf) - _mm_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_sub_ps (__m256 __W, __mmask16 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_subps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) __W, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_sub_ps (__mmask16 __U, __m256 __A, __m256 __B) { - return (__m256) __builtin_ia32_subps256_mask ((__v8sf) __A, - (__v8sf) __B, - (__v8sf) - _mm256_setzero_ps (), - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask2_permutex2var_epi32 (__m128i __A, __m128i __I, __mmask8 __U, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermi2vard128_mask ((__v4si) __A, - (__v4si) __I - /* idx */ , - (__v4si) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask2_permutex2var_epi32 (__m256i __A, __m256i __I, - __mmask8 __U, __m256i __B) { - return (__m256i) __builtin_ia32_vpermi2vard256_mask ((__v8si) __A, - (__v8si) __I - /* idx */ , - (__v8si) __B, - (__mmask8) __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask2_permutex2var_pd (__m128d __A, __m128i __I, __mmask8 __U, - __m128d __B) { - return (__m128d) __builtin_ia32_vpermi2varpd128_mask ((__v2df) __A, - (__v2di) __I - /* idx */ , - (__v2df) __B, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask2_permutex2var_pd (__m256d __A, __m256i __I, __mmask8 __U, - __m256d __B) { - return (__m256d) __builtin_ia32_vpermi2varpd256_mask ((__v4df) __A, - (__v4di) __I - /* idx */ , - (__v4df) __B, - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask2_permutex2var_ps (__m128 __A, __m128i __I, __mmask8 __U, - __m128 __B) { - return (__m128) __builtin_ia32_vpermi2varps128_mask ((__v4sf) __A, - (__v4si) __I - /* idx */ , - (__v4sf) __B, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask2_permutex2var_ps (__m256 __A, __m256i __I, __mmask8 __U, - __m256 __B) { - return (__m256) __builtin_ia32_vpermi2varps256_mask ((__v8sf) __A, - (__v8si) __I - /* idx */ , - (__v8sf) __B, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask2_permutex2var_epi64 (__m128i __A, __m128i __I, __mmask8 __U, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermi2varq128_mask ((__v2di) __A, - (__v2di) __I - /* idx */ , - (__v2di) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask2_permutex2var_epi64 (__m256i __A, __m256i __I, - __mmask8 __U, __m256i __B) { - return (__m256i) __builtin_ia32_vpermi2varq256_mask ((__v4di) __A, - (__v4di) __I - /* idx */ , - (__v4di) __B, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_permutex2var_epi32 (__m128i __A, __m128i __I, __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2vard128_mask ((__v4si) __I - /* idx */ , - (__v4si) __A, - (__v4si) __B, - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_permutex2var_epi32 (__m128i __A, __mmask8 __U, __m128i __I, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2vard128_mask ((__v4si) __I - /* idx */ , - (__v4si) __A, - (__v4si) __B, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_permutex2var_epi32 (__mmask8 __U, __m128i __A, __m128i __I, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2vard128_maskz ((__v4si) __I - /* idx */ , - (__v4si) __A, - (__v4si) __B, - (__mmask8) - __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_permutex2var_epi32 (__m256i __A, __m256i __I, __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2vard256_mask ((__v8si) __I - /* idx */ , - (__v8si) __A, - (__v8si) __B, - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_permutex2var_epi32 (__m256i __A, __mmask8 __U, __m256i __I, - __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2vard256_mask ((__v8si) __I - /* idx */ , - (__v8si) __A, - (__v8si) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_permutex2var_epi32 (__mmask8 __U, __m256i __A, - __m256i __I, __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2vard256_maskz ((__v8si) __I - /* idx */ , - (__v8si) __A, - (__v8si) __B, - (__mmask8) - __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_permutex2var_pd (__m128d __A, __m128i __I, __m128d __B) { - return (__m128d) __builtin_ia32_vpermt2varpd128_mask ((__v2di) __I - /* idx */ , - (__v2df) __A, - (__v2df) __B, - (__mmask8) - - 1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_permutex2var_pd (__m128d __A, __mmask8 __U, __m128i __I, - __m128d __B) { - return (__m128d) __builtin_ia32_vpermt2varpd128_mask ((__v2di) __I - /* idx */ , - (__v2df) __A, - (__v2df) __B, - (__mmask8) - __U); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_permutex2var_pd (__mmask8 __U, __m128d __A, __m128i __I, - __m128d __B) { - return (__m128d) __builtin_ia32_vpermt2varpd128_maskz ((__v2di) __I - /* idx */ , - (__v2df) __A, - (__v2df) __B, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_permutex2var_pd (__m256d __A, __m256i __I, __m256d __B) { - return (__m256d) __builtin_ia32_vpermt2varpd256_mask ((__v4di) __I - /* idx */ , - (__v4df) __A, - (__v4df) __B, - (__mmask8) - - 1); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_permutex2var_pd (__m256d __A, __mmask8 __U, __m256i __I, - __m256d __B) { - return (__m256d) __builtin_ia32_vpermt2varpd256_mask ((__v4di) __I - /* idx */ , - (__v4df) __A, - (__v4df) __B, - (__mmask8) - __U); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_permutex2var_pd (__mmask8 __U, __m256d __A, __m256i __I, - __m256d __B) { - return (__m256d) __builtin_ia32_vpermt2varpd256_maskz ((__v4di) __I - /* idx */ , - (__v4df) __A, - (__v4df) __B, - (__mmask8) - __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_permutex2var_ps (__m128 __A, __m128i __I, __m128 __B) { - return (__m128) __builtin_ia32_vpermt2varps128_mask ((__v4si) __I - /* idx */ , - (__v4sf) __A, - (__v4sf) __B, - (__mmask8) -1); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_permutex2var_ps (__m128 __A, __mmask8 __U, __m128i __I, - __m128 __B) { - return (__m128) __builtin_ia32_vpermt2varps128_mask ((__v4si) __I - /* idx */ , - (__v4sf) __A, - (__v4sf) __B, - (__mmask8) __U); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maskz_permutex2var_ps (__mmask8 __U, __m128 __A, __m128i __I, - __m128 __B) { - return (__m128) __builtin_ia32_vpermt2varps128_maskz ((__v4si) __I - /* idx */ , - (__v4sf) __A, - (__v4sf) __B, - (__mmask8) - __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_permutex2var_ps (__m256 __A, __m256i __I, __m256 __B) { - return (__m256) __builtin_ia32_vpermt2varps256_mask ((__v8si) __I - /* idx */ , - (__v8sf) __A, - (__v8sf) __B, - (__mmask8) -1); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_mask_permutex2var_ps (__m256 __A, __mmask8 __U, __m256i __I, - __m256 __B) { - return (__m256) __builtin_ia32_vpermt2varps256_mask ((__v8si) __I - /* idx */ , - (__v8sf) __A, - (__v8sf) __B, - (__mmask8) __U); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maskz_permutex2var_ps (__mmask8 __U, __m256 __A, __m256i __I, - __m256 __B) { - return (__m256) __builtin_ia32_vpermt2varps256_maskz ((__v8si) __I - /* idx */ , - (__v8sf) __A, - (__v8sf) __B, - (__mmask8) - __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_permutex2var_epi64 (__m128i __A, __m128i __I, __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2varq128_mask ((__v2di) __I - /* idx */ , - (__v2di) __A, - (__v2di) __B, - (__mmask8) -1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mask_permutex2var_epi64 (__m128i __A, __mmask8 __U, __m128i __I, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2varq128_mask ((__v2di) __I - /* idx */ , - (__v2di) __A, - (__v2di) __B, - (__mmask8) __U); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maskz_permutex2var_epi64 (__mmask8 __U, __m128i __A, __m128i __I, - __m128i __B) { - return (__m128i) __builtin_ia32_vpermt2varq128_maskz ((__v2di) __I - /* idx */ , - (__v2di) __A, - (__v2di) __B, - (__mmask8) - __U); -} - - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_permutex2var_epi64 (__m256i __A, __m256i __I, __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2varq256_mask ((__v4di) __I - /* idx */ , - (__v4di) __A, - (__v4di) __B, - (__mmask8) -1); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_mask_permutex2var_epi64 (__m256i __A, __mmask8 __U, __m256i __I, - __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2varq256_mask ((__v4di) __I - /* idx */ , - (__v4di) __A, - (__v4di) __B, - (__mmask8) __U); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_maskz_permutex2var_epi64 (__mmask8 __U, __m256i __A, - __m256i __I, __m256i __B) { - return (__m256i) __builtin_ia32_vpermt2varq256_maskz ((__v4di) __I - /* idx */ , - (__v4di) __A, - (__v4di) __B, - (__mmask8) - __U); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __AVX512VLINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/avxintrin.h b/External/CastXML/share/castxml/clang/include/avxintrin.h deleted file mode 100644 index 6a9972b65..000000000 --- a/External/CastXML/share/castxml/clang/include/avxintrin.h +++ /dev/null @@ -1,1308 +0,0 @@ -/*===---- avxintrin.h - AVX intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __AVXINTRIN_H -#define __AVXINTRIN_H - -typedef double __v4df __attribute__ ((__vector_size__ (32))); -typedef float __v8sf __attribute__ ((__vector_size__ (32))); -typedef long long __v4di __attribute__ ((__vector_size__ (32))); -typedef int __v8si __attribute__ ((__vector_size__ (32))); -typedef short __v16hi __attribute__ ((__vector_size__ (32))); -typedef char __v32qi __attribute__ ((__vector_size__ (32))); - -typedef float __m256 __attribute__ ((__vector_size__ (32))); -typedef double __m256d __attribute__((__vector_size__(32))); -typedef long long __m256i __attribute__((__vector_size__(32))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx"))) - -/* Arithmetic */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_add_pd(__m256d __a, __m256d __b) -{ - return __a+__b; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_add_ps(__m256 __a, __m256 __b) -{ - return __a+__b; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_sub_pd(__m256d __a, __m256d __b) -{ - return __a-__b; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_sub_ps(__m256 __a, __m256 __b) -{ - return __a-__b; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_addsub_pd(__m256d __a, __m256d __b) -{ - return (__m256d)__builtin_ia32_addsubpd256((__v4df)__a, (__v4df)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_addsub_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_addsubps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_div_pd(__m256d __a, __m256d __b) -{ - return __a / __b; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_div_ps(__m256 __a, __m256 __b) -{ - return __a / __b; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_max_pd(__m256d __a, __m256d __b) -{ - return (__m256d)__builtin_ia32_maxpd256((__v4df)__a, (__v4df)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_max_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_maxps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_min_pd(__m256d __a, __m256d __b) -{ - return (__m256d)__builtin_ia32_minpd256((__v4df)__a, (__v4df)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_min_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_minps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_mul_pd(__m256d __a, __m256d __b) -{ - return __a * __b; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_mul_ps(__m256 __a, __m256 __b) -{ - return __a * __b; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_sqrt_pd(__m256d __a) -{ - return (__m256d)__builtin_ia32_sqrtpd256((__v4df)__a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_sqrt_ps(__m256 __a) -{ - return (__m256)__builtin_ia32_sqrtps256((__v8sf)__a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_rsqrt_ps(__m256 __a) -{ - return (__m256)__builtin_ia32_rsqrtps256((__v8sf)__a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_rcp_ps(__m256 __a) -{ - return (__m256)__builtin_ia32_rcpps256((__v8sf)__a); -} - -#define _mm256_round_pd(V, M) __extension__ ({ \ - __m256d __V = (V); \ - (__m256d)__builtin_ia32_roundpd256((__v4df)__V, (M)); }) - -#define _mm256_round_ps(V, M) __extension__ ({ \ - __m256 __V = (V); \ - (__m256)__builtin_ia32_roundps256((__v8sf)__V, (M)); }) - -#define _mm256_ceil_pd(V) _mm256_round_pd((V), _MM_FROUND_CEIL) -#define _mm256_floor_pd(V) _mm256_round_pd((V), _MM_FROUND_FLOOR) -#define _mm256_ceil_ps(V) _mm256_round_ps((V), _MM_FROUND_CEIL) -#define _mm256_floor_ps(V) _mm256_round_ps((V), _MM_FROUND_FLOOR) - -/* Logical */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_and_pd(__m256d __a, __m256d __b) -{ - return (__m256d)((__v4di)__a & (__v4di)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_and_ps(__m256 __a, __m256 __b) -{ - return (__m256)((__v8si)__a & (__v8si)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_andnot_pd(__m256d __a, __m256d __b) -{ - return (__m256d)(~(__v4di)__a & (__v4di)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_andnot_ps(__m256 __a, __m256 __b) -{ - return (__m256)(~(__v8si)__a & (__v8si)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_or_pd(__m256d __a, __m256d __b) -{ - return (__m256d)((__v4di)__a | (__v4di)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_or_ps(__m256 __a, __m256 __b) -{ - return (__m256)((__v8si)__a | (__v8si)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_xor_pd(__m256d __a, __m256d __b) -{ - return (__m256d)((__v4di)__a ^ (__v4di)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_xor_ps(__m256 __a, __m256 __b) -{ - return (__m256)((__v8si)__a ^ (__v8si)__b); -} - -/* Horizontal arithmetic */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_hadd_pd(__m256d __a, __m256d __b) -{ - return (__m256d)__builtin_ia32_haddpd256((__v4df)__a, (__v4df)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_hadd_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_haddps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_hsub_pd(__m256d __a, __m256d __b) -{ - return (__m256d)__builtin_ia32_hsubpd256((__v4df)__a, (__v4df)__b); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_hsub_ps(__m256 __a, __m256 __b) -{ - return (__m256)__builtin_ia32_hsubps256((__v8sf)__a, (__v8sf)__b); -} - -/* Vector permutations */ -static __inline __m128d __DEFAULT_FN_ATTRS -_mm_permutevar_pd(__m128d __a, __m128i __c) -{ - return (__m128d)__builtin_ia32_vpermilvarpd((__v2df)__a, (__v2di)__c); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_permutevar_pd(__m256d __a, __m256i __c) -{ - return (__m256d)__builtin_ia32_vpermilvarpd256((__v4df)__a, (__v4di)__c); -} - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm_permutevar_ps(__m128 __a, __m128i __c) -{ - return (__m128)__builtin_ia32_vpermilvarps((__v4sf)__a, (__v4si)__c); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_permutevar_ps(__m256 __a, __m256i __c) -{ - return (__m256)__builtin_ia32_vpermilvarps256((__v8sf)__a, (__v8si)__c); -} - -#define _mm_permute_pd(A, C) __extension__ ({ \ - __m128d __A = (A); \ - (__m128d)__builtin_shufflevector((__v2df)__A, (__v2df) _mm_setzero_pd(), \ - (C) & 0x1, ((C) & 0x2) >> 1); }) - -#define _mm256_permute_pd(A, C) __extension__ ({ \ - __m256d __A = (A); \ - (__m256d)__builtin_shufflevector((__v4df)__A, (__v4df) _mm256_setzero_pd(), \ - (C) & 0x1, ((C) & 0x2) >> 1, \ - 2 + (((C) & 0x4) >> 2), \ - 2 + (((C) & 0x8) >> 3)); }) - -#define _mm_permute_ps(A, C) __extension__ ({ \ - __m128 __A = (A); \ - (__m128)__builtin_shufflevector((__v4sf)__A, (__v4sf) _mm_setzero_ps(), \ - (C) & 0x3, ((C) & 0xc) >> 2, \ - ((C) & 0x30) >> 4, ((C) & 0xc0) >> 6); }) - -#define _mm256_permute_ps(A, C) __extension__ ({ \ - __m256 __A = (A); \ - (__m256)__builtin_shufflevector((__v8sf)__A, (__v8sf) _mm256_setzero_ps(), \ - (C) & 0x3, ((C) & 0xc) >> 2, \ - ((C) & 0x30) >> 4, ((C) & 0xc0) >> 6, \ - 4 + (((C) & 0x03) >> 0), \ - 4 + (((C) & 0x0c) >> 2), \ - 4 + (((C) & 0x30) >> 4), \ - 4 + (((C) & 0xc0) >> 6)); }) - -#define _mm256_permute2f128_pd(V1, V2, M) __extension__ ({ \ - __m256d __V1 = (V1); \ - __m256d __V2 = (V2); \ - (__m256d)__builtin_ia32_vperm2f128_pd256((__v4df)__V1, (__v4df)__V2, (M)); }) - -#define _mm256_permute2f128_ps(V1, V2, M) __extension__ ({ \ - __m256 __V1 = (V1); \ - __m256 __V2 = (V2); \ - (__m256)__builtin_ia32_vperm2f128_ps256((__v8sf)__V1, (__v8sf)__V2, (M)); }) - -#define _mm256_permute2f128_si256(V1, V2, M) __extension__ ({ \ - __m256i __V1 = (V1); \ - __m256i __V2 = (V2); \ - (__m256i)__builtin_ia32_vperm2f128_si256((__v8si)__V1, (__v8si)__V2, (M)); }) - -/* Vector Blend */ -#define _mm256_blend_pd(V1, V2, M) __extension__ ({ \ - __m256d __V1 = (V1); \ - __m256d __V2 = (V2); \ - (__m256d)__builtin_shufflevector((__v4df)__V1, (__v4df)__V2, \ - (((M) & 0x01) ? 4 : 0), \ - (((M) & 0x02) ? 5 : 1), \ - (((M) & 0x04) ? 6 : 2), \ - (((M) & 0x08) ? 7 : 3)); }) - -#define _mm256_blend_ps(V1, V2, M) __extension__ ({ \ - __m256 __V1 = (V1); \ - __m256 __V2 = (V2); \ - (__m256)__builtin_shufflevector((__v8sf)__V1, (__v8sf)__V2, \ - (((M) & 0x01) ? 8 : 0), \ - (((M) & 0x02) ? 9 : 1), \ - (((M) & 0x04) ? 10 : 2), \ - (((M) & 0x08) ? 11 : 3), \ - (((M) & 0x10) ? 12 : 4), \ - (((M) & 0x20) ? 13 : 5), \ - (((M) & 0x40) ? 14 : 6), \ - (((M) & 0x80) ? 15 : 7)); }) - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_blendv_pd(__m256d __a, __m256d __b, __m256d __c) -{ - return (__m256d)__builtin_ia32_blendvpd256( - (__v4df)__a, (__v4df)__b, (__v4df)__c); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_blendv_ps(__m256 __a, __m256 __b, __m256 __c) -{ - return (__m256)__builtin_ia32_blendvps256( - (__v8sf)__a, (__v8sf)__b, (__v8sf)__c); -} - -/* Vector Dot Product */ -#define _mm256_dp_ps(V1, V2, M) __extension__ ({ \ - __m256 __V1 = (V1); \ - __m256 __V2 = (V2); \ - (__m256)__builtin_ia32_dpps256((__v8sf)__V1, (__v8sf)__V2, (M)); }) - -/* Vector shuffle */ -#define _mm256_shuffle_ps(a, b, mask) __extension__ ({ \ - __m256 __a = (a); \ - __m256 __b = (b); \ - (__m256)__builtin_shufflevector((__v8sf)__a, (__v8sf)__b, \ - (mask) & 0x3, ((mask) & 0xc) >> 2, \ - (((mask) & 0x30) >> 4) + 8, (((mask) & 0xc0) >> 6) + 8, \ - ((mask) & 0x3) + 4, (((mask) & 0xc) >> 2) + 4, \ - (((mask) & 0x30) >> 4) + 12, (((mask) & 0xc0) >> 6) + 12); }) - -#define _mm256_shuffle_pd(a, b, mask) __extension__ ({ \ - __m256d __a = (a); \ - __m256d __b = (b); \ - (__m256d)__builtin_shufflevector((__v4df)__a, (__v4df)__b, \ - (mask) & 0x1, \ - (((mask) & 0x2) >> 1) + 4, \ - (((mask) & 0x4) >> 2) + 2, \ - (((mask) & 0x8) >> 3) + 6); }) - -/* Compare */ -#define _CMP_EQ_OQ 0x00 /* Equal (ordered, non-signaling) */ -#define _CMP_LT_OS 0x01 /* Less-than (ordered, signaling) */ -#define _CMP_LE_OS 0x02 /* Less-than-or-equal (ordered, signaling) */ -#define _CMP_UNORD_Q 0x03 /* Unordered (non-signaling) */ -#define _CMP_NEQ_UQ 0x04 /* Not-equal (unordered, non-signaling) */ -#define _CMP_NLT_US 0x05 /* Not-less-than (unordered, signaling) */ -#define _CMP_NLE_US 0x06 /* Not-less-than-or-equal (unordered, signaling) */ -#define _CMP_ORD_Q 0x07 /* Ordered (nonsignaling) */ -#define _CMP_EQ_UQ 0x08 /* Equal (unordered, non-signaling) */ -#define _CMP_NGE_US 0x09 /* Not-greater-than-or-equal (unord, signaling) */ -#define _CMP_NGT_US 0x0a /* Not-greater-than (unordered, signaling) */ -#define _CMP_FALSE_OQ 0x0b /* False (ordered, non-signaling) */ -#define _CMP_NEQ_OQ 0x0c /* Not-equal (ordered, non-signaling) */ -#define _CMP_GE_OS 0x0d /* Greater-than-or-equal (ordered, signaling) */ -#define _CMP_GT_OS 0x0e /* Greater-than (ordered, signaling) */ -#define _CMP_TRUE_UQ 0x0f /* True (unordered, non-signaling) */ -#define _CMP_EQ_OS 0x10 /* Equal (ordered, signaling) */ -#define _CMP_LT_OQ 0x11 /* Less-than (ordered, non-signaling) */ -#define _CMP_LE_OQ 0x12 /* Less-than-or-equal (ordered, non-signaling) */ -#define _CMP_UNORD_S 0x13 /* Unordered (signaling) */ -#define _CMP_NEQ_US 0x14 /* Not-equal (unordered, signaling) */ -#define _CMP_NLT_UQ 0x15 /* Not-less-than (unordered, non-signaling) */ -#define _CMP_NLE_UQ 0x16 /* Not-less-than-or-equal (unord, non-signaling) */ -#define _CMP_ORD_S 0x17 /* Ordered (signaling) */ -#define _CMP_EQ_US 0x18 /* Equal (unordered, signaling) */ -#define _CMP_NGE_UQ 0x19 /* Not-greater-than-or-equal (unord, non-sign) */ -#define _CMP_NGT_UQ 0x1a /* Not-greater-than (unordered, non-signaling) */ -#define _CMP_FALSE_OS 0x1b /* False (ordered, signaling) */ -#define _CMP_NEQ_OS 0x1c /* Not-equal (ordered, signaling) */ -#define _CMP_GE_OQ 0x1d /* Greater-than-or-equal (ordered, non-signaling) */ -#define _CMP_GT_OQ 0x1e /* Greater-than (ordered, non-signaling) */ -#define _CMP_TRUE_US 0x1f /* True (unordered, signaling) */ - -#define _mm_cmp_pd(a, b, c) __extension__ ({ \ - __m128d __a = (a); \ - __m128d __b = (b); \ - (__m128d)__builtin_ia32_cmppd((__v2df)__a, (__v2df)__b, (c)); }) - -#define _mm_cmp_ps(a, b, c) __extension__ ({ \ - __m128 __a = (a); \ - __m128 __b = (b); \ - (__m128)__builtin_ia32_cmpps((__v4sf)__a, (__v4sf)__b, (c)); }) - -#define _mm256_cmp_pd(a, b, c) __extension__ ({ \ - __m256d __a = (a); \ - __m256d __b = (b); \ - (__m256d)__builtin_ia32_cmppd256((__v4df)__a, (__v4df)__b, (c)); }) - -#define _mm256_cmp_ps(a, b, c) __extension__ ({ \ - __m256 __a = (a); \ - __m256 __b = (b); \ - (__m256)__builtin_ia32_cmpps256((__v8sf)__a, (__v8sf)__b, (c)); }) - -#define _mm_cmp_sd(a, b, c) __extension__ ({ \ - __m128d __a = (a); \ - __m128d __b = (b); \ - (__m128d)__builtin_ia32_cmpsd((__v2df)__a, (__v2df)__b, (c)); }) - -#define _mm_cmp_ss(a, b, c) __extension__ ({ \ - __m128 __a = (a); \ - __m128 __b = (b); \ - (__m128)__builtin_ia32_cmpss((__v4sf)__a, (__v4sf)__b, (c)); }) - -static __inline int __DEFAULT_FN_ATTRS -_mm256_extract_epi32(__m256i __a, const int __imm) -{ - __v8si __b = (__v8si)__a; - return __b[__imm & 7]; -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_extract_epi16(__m256i __a, const int __imm) -{ - __v16hi __b = (__v16hi)__a; - return __b[__imm & 15]; -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_extract_epi8(__m256i __a, const int __imm) -{ - __v32qi __b = (__v32qi)__a; - return __b[__imm & 31]; -} - -#ifdef __x86_64__ -static __inline long long __DEFAULT_FN_ATTRS -_mm256_extract_epi64(__m256i __a, const int __imm) -{ - __v4di __b = (__v4di)__a; - return __b[__imm & 3]; -} -#endif - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_insert_epi32(__m256i __a, int __b, int const __imm) -{ - __v8si __c = (__v8si)__a; - __c[__imm & 7] = __b; - return (__m256i)__c; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_insert_epi16(__m256i __a, int __b, int const __imm) -{ - __v16hi __c = (__v16hi)__a; - __c[__imm & 15] = __b; - return (__m256i)__c; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_insert_epi8(__m256i __a, int __b, int const __imm) -{ - __v32qi __c = (__v32qi)__a; - __c[__imm & 31] = __b; - return (__m256i)__c; -} - -#ifdef __x86_64__ -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_insert_epi64(__m256i __a, long long __b, int const __imm) -{ - __v4di __c = (__v4di)__a; - __c[__imm & 3] = __b; - return (__m256i)__c; -} -#endif - -/* Conversion */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_cvtepi32_pd(__m128i __a) -{ - return (__m256d)__builtin_ia32_cvtdq2pd256((__v4si) __a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_cvtepi32_ps(__m256i __a) -{ - return (__m256)__builtin_ia32_cvtdq2ps256((__v8si) __a); -} - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm256_cvtpd_ps(__m256d __a) -{ - return (__m128)__builtin_ia32_cvtpd2ps256((__v4df) __a); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_cvtps_epi32(__m256 __a) -{ - return (__m256i)__builtin_ia32_cvtps2dq256((__v8sf) __a); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_cvtps_pd(__m128 __a) -{ - return (__m256d)__builtin_ia32_cvtps2pd256((__v4sf) __a); -} - -static __inline __m128i __DEFAULT_FN_ATTRS -_mm256_cvttpd_epi32(__m256d __a) -{ - return (__m128i)__builtin_ia32_cvttpd2dq256((__v4df) __a); -} - -static __inline __m128i __DEFAULT_FN_ATTRS -_mm256_cvtpd_epi32(__m256d __a) -{ - return (__m128i)__builtin_ia32_cvtpd2dq256((__v4df) __a); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_cvttps_epi32(__m256 __a) -{ - return (__m256i)__builtin_ia32_cvttps2dq256((__v8sf) __a); -} - -/* Vector replicate */ -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_movehdup_ps(__m256 __a) -{ - return __builtin_shufflevector(__a, __a, 1, 1, 3, 3, 5, 5, 7, 7); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_moveldup_ps(__m256 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 0, 2, 2, 4, 4, 6, 6); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_movedup_pd(__m256d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 0, 2, 2); -} - -/* Unpack and Interleave */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_unpackhi_pd(__m256d __a, __m256d __b) -{ - return __builtin_shufflevector(__a, __b, 1, 5, 1+2, 5+2); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_unpacklo_pd(__m256d __a, __m256d __b) -{ - return __builtin_shufflevector(__a, __b, 0, 4, 0+2, 4+2); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_unpackhi_ps(__m256 __a, __m256 __b) -{ - return __builtin_shufflevector(__a, __b, 2, 10, 2+1, 10+1, 6, 14, 6+1, 14+1); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_unpacklo_ps(__m256 __a, __m256 __b) -{ - return __builtin_shufflevector(__a, __b, 0, 8, 0+1, 8+1, 4, 12, 4+1, 12+1); -} - -/* Bit Test */ -static __inline int __DEFAULT_FN_ATTRS -_mm_testz_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_vtestzpd((__v2df)__a, (__v2df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm_testc_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_vtestcpd((__v2df)__a, (__v2df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm_testnzc_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_vtestnzcpd((__v2df)__a, (__v2df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm_testz_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_vtestzps((__v4sf)__a, (__v4sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm_testc_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_vtestcps((__v4sf)__a, (__v4sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm_testnzc_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_vtestnzcps((__v4sf)__a, (__v4sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testz_pd(__m256d __a, __m256d __b) -{ - return __builtin_ia32_vtestzpd256((__v4df)__a, (__v4df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testc_pd(__m256d __a, __m256d __b) -{ - return __builtin_ia32_vtestcpd256((__v4df)__a, (__v4df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testnzc_pd(__m256d __a, __m256d __b) -{ - return __builtin_ia32_vtestnzcpd256((__v4df)__a, (__v4df)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testz_ps(__m256 __a, __m256 __b) -{ - return __builtin_ia32_vtestzps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testc_ps(__m256 __a, __m256 __b) -{ - return __builtin_ia32_vtestcps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testnzc_ps(__m256 __a, __m256 __b) -{ - return __builtin_ia32_vtestnzcps256((__v8sf)__a, (__v8sf)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testz_si256(__m256i __a, __m256i __b) -{ - return __builtin_ia32_ptestz256((__v4di)__a, (__v4di)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testc_si256(__m256i __a, __m256i __b) -{ - return __builtin_ia32_ptestc256((__v4di)__a, (__v4di)__b); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_testnzc_si256(__m256i __a, __m256i __b) -{ - return __builtin_ia32_ptestnzc256((__v4di)__a, (__v4di)__b); -} - -/* Vector extract sign mask */ -static __inline int __DEFAULT_FN_ATTRS -_mm256_movemask_pd(__m256d __a) -{ - return __builtin_ia32_movmskpd256((__v4df)__a); -} - -static __inline int __DEFAULT_FN_ATTRS -_mm256_movemask_ps(__m256 __a) -{ - return __builtin_ia32_movmskps256((__v8sf)__a); -} - -/* Vector __zero */ -static __inline void __DEFAULT_FN_ATTRS -_mm256_zeroall(void) -{ - __builtin_ia32_vzeroall(); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_zeroupper(void) -{ - __builtin_ia32_vzeroupper(); -} - -/* Vector load with broadcast */ -static __inline __m128 __DEFAULT_FN_ATTRS -_mm_broadcast_ss(float const *__a) -{ - float __f = *__a; - return (__m128)(__v4sf){ __f, __f, __f, __f }; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_broadcast_sd(double const *__a) -{ - double __d = *__a; - return (__m256d)(__v4df){ __d, __d, __d, __d }; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_broadcast_ss(float const *__a) -{ - float __f = *__a; - return (__m256)(__v8sf){ __f, __f, __f, __f, __f, __f, __f, __f }; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_broadcast_pd(__m128d const *__a) -{ - return (__m256d)__builtin_ia32_vbroadcastf128_pd256(__a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_broadcast_ps(__m128 const *__a) -{ - return (__m256)__builtin_ia32_vbroadcastf128_ps256(__a); -} - -/* SIMD load ops */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_load_pd(double const *__p) -{ - return *(__m256d *)__p; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_load_ps(float const *__p) -{ - return *(__m256 *)__p; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_loadu_pd(double const *__p) -{ - struct __loadu_pd { - __m256d __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_pd*)__p)->__v; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_loadu_ps(float const *__p) -{ - struct __loadu_ps { - __m256 __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_ps*)__p)->__v; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_load_si256(__m256i const *__p) -{ - return *__p; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_loadu_si256(__m256i const *__p) -{ - struct __loadu_si256 { - __m256i __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_si256*)__p)->__v; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_lddqu_si256(__m256i const *__p) -{ - return (__m256i)__builtin_ia32_lddqu256((char const *)__p); -} - -/* SIMD store ops */ -static __inline void __DEFAULT_FN_ATTRS -_mm256_store_pd(double *__p, __m256d __a) -{ - *(__m256d *)__p = __a; -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_store_ps(float *__p, __m256 __a) -{ - *(__m256 *)__p = __a; -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu_pd(double *__p, __m256d __a) -{ - __builtin_ia32_storeupd256(__p, (__v4df)__a); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu_ps(float *__p, __m256 __a) -{ - __builtin_ia32_storeups256(__p, (__v8sf)__a); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_store_si256(__m256i *__p, __m256i __a) -{ - *__p = __a; -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu_si256(__m256i *__p, __m256i __a) -{ - __builtin_ia32_storedqu256((char *)__p, (__v32qi)__a); -} - -/* Conditional load ops */ -static __inline __m128d __DEFAULT_FN_ATTRS -_mm_maskload_pd(double const *__p, __m128d __m) -{ - return (__m128d)__builtin_ia32_maskloadpd((const __v2df *)__p, (__v2df)__m); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_maskload_pd(double const *__p, __m256d __m) -{ - return (__m256d)__builtin_ia32_maskloadpd256((const __v4df *)__p, - (__v4df)__m); -} - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm_maskload_ps(float const *__p, __m128 __m) -{ - return (__m128)__builtin_ia32_maskloadps((const __v4sf *)__p, (__v4sf)__m); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_maskload_ps(float const *__p, __m256 __m) -{ - return (__m256)__builtin_ia32_maskloadps256((const __v8sf *)__p, (__v8sf)__m); -} - -/* Conditional store ops */ -static __inline void __DEFAULT_FN_ATTRS -_mm256_maskstore_ps(float *__p, __m256 __m, __m256 __a) -{ - __builtin_ia32_maskstoreps256((__v8sf *)__p, (__v8sf)__m, (__v8sf)__a); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm_maskstore_pd(double *__p, __m128d __m, __m128d __a) -{ - __builtin_ia32_maskstorepd((__v2df *)__p, (__v2df)__m, (__v2df)__a); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_maskstore_pd(double *__p, __m256d __m, __m256d __a) -{ - __builtin_ia32_maskstorepd256((__v4df *)__p, (__v4df)__m, (__v4df)__a); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm_maskstore_ps(float *__p, __m128 __m, __m128 __a) -{ - __builtin_ia32_maskstoreps((__v4sf *)__p, (__v4sf)__m, (__v4sf)__a); -} - -/* Cacheability support ops */ -static __inline void __DEFAULT_FN_ATTRS -_mm256_stream_si256(__m256i *__a, __m256i __b) -{ - __builtin_ia32_movntdq256((__v4di *)__a, (__v4di)__b); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_stream_pd(double *__a, __m256d __b) -{ - __builtin_ia32_movntpd256(__a, (__v4df)__b); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_stream_ps(float *__p, __m256 __a) -{ - __builtin_ia32_movntps256(__p, (__v8sf)__a); -} - -/* Create vectors */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_set_pd(double __a, double __b, double __c, double __d) -{ - return (__m256d){ __d, __c, __b, __a }; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_set_ps(float __a, float __b, float __c, float __d, - float __e, float __f, float __g, float __h) -{ - return (__m256){ __h, __g, __f, __e, __d, __c, __b, __a }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set_epi32(int __i0, int __i1, int __i2, int __i3, - int __i4, int __i5, int __i6, int __i7) -{ - return (__m256i)(__v8si){ __i7, __i6, __i5, __i4, __i3, __i2, __i1, __i0 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set_epi16(short __w15, short __w14, short __w13, short __w12, - short __w11, short __w10, short __w09, short __w08, - short __w07, short __w06, short __w05, short __w04, - short __w03, short __w02, short __w01, short __w00) -{ - return (__m256i)(__v16hi){ __w00, __w01, __w02, __w03, __w04, __w05, __w06, - __w07, __w08, __w09, __w10, __w11, __w12, __w13, __w14, __w15 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set_epi8(char __b31, char __b30, char __b29, char __b28, - char __b27, char __b26, char __b25, char __b24, - char __b23, char __b22, char __b21, char __b20, - char __b19, char __b18, char __b17, char __b16, - char __b15, char __b14, char __b13, char __b12, - char __b11, char __b10, char __b09, char __b08, - char __b07, char __b06, char __b05, char __b04, - char __b03, char __b02, char __b01, char __b00) -{ - return (__m256i)(__v32qi){ - __b00, __b01, __b02, __b03, __b04, __b05, __b06, __b07, - __b08, __b09, __b10, __b11, __b12, __b13, __b14, __b15, - __b16, __b17, __b18, __b19, __b20, __b21, __b22, __b23, - __b24, __b25, __b26, __b27, __b28, __b29, __b30, __b31 - }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set_epi64x(long long __a, long long __b, long long __c, long long __d) -{ - return (__m256i)(__v4di){ __d, __c, __b, __a }; -} - -/* Create vectors with elements in reverse order */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_setr_pd(double __a, double __b, double __c, double __d) -{ - return (__m256d){ __a, __b, __c, __d }; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_setr_ps(float __a, float __b, float __c, float __d, - float __e, float __f, float __g, float __h) -{ - return (__m256){ __a, __b, __c, __d, __e, __f, __g, __h }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setr_epi32(int __i0, int __i1, int __i2, int __i3, - int __i4, int __i5, int __i6, int __i7) -{ - return (__m256i)(__v8si){ __i0, __i1, __i2, __i3, __i4, __i5, __i6, __i7 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setr_epi16(short __w15, short __w14, short __w13, short __w12, - short __w11, short __w10, short __w09, short __w08, - short __w07, short __w06, short __w05, short __w04, - short __w03, short __w02, short __w01, short __w00) -{ - return (__m256i)(__v16hi){ __w15, __w14, __w13, __w12, __w11, __w10, __w09, - __w08, __w07, __w06, __w05, __w04, __w03, __w02, __w01, __w00 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setr_epi8(char __b31, char __b30, char __b29, char __b28, - char __b27, char __b26, char __b25, char __b24, - char __b23, char __b22, char __b21, char __b20, - char __b19, char __b18, char __b17, char __b16, - char __b15, char __b14, char __b13, char __b12, - char __b11, char __b10, char __b09, char __b08, - char __b07, char __b06, char __b05, char __b04, - char __b03, char __b02, char __b01, char __b00) -{ - return (__m256i)(__v32qi){ - __b31, __b30, __b29, __b28, __b27, __b26, __b25, __b24, - __b23, __b22, __b21, __b20, __b19, __b18, __b17, __b16, - __b15, __b14, __b13, __b12, __b11, __b10, __b09, __b08, - __b07, __b06, __b05, __b04, __b03, __b02, __b01, __b00 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setr_epi64x(long long __a, long long __b, long long __c, long long __d) -{ - return (__m256i)(__v4di){ __a, __b, __c, __d }; -} - -/* Create vectors with repeated elements */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_set1_pd(double __w) -{ - return (__m256d){ __w, __w, __w, __w }; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_set1_ps(float __w) -{ - return (__m256){ __w, __w, __w, __w, __w, __w, __w, __w }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set1_epi32(int __i) -{ - return (__m256i)(__v8si){ __i, __i, __i, __i, __i, __i, __i, __i }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set1_epi16(short __w) -{ - return (__m256i)(__v16hi){ __w, __w, __w, __w, __w, __w, __w, __w, __w, __w, - __w, __w, __w, __w, __w, __w }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set1_epi8(char __b) -{ - return (__m256i)(__v32qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, - __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, - __b, __b, __b, __b, __b, __b, __b }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set1_epi64x(long long __q) -{ - return (__m256i)(__v4di){ __q, __q, __q, __q }; -} - -/* Create __zeroed vectors */ -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_setzero_pd(void) -{ - return (__m256d){ 0, 0, 0, 0 }; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_setzero_ps(void) -{ - return (__m256){ 0, 0, 0, 0, 0, 0, 0, 0 }; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setzero_si256(void) -{ - return (__m256i){ 0LL, 0LL, 0LL, 0LL }; -} - -/* Cast between vector types */ -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_castpd_ps(__m256d __a) -{ - return (__m256)__a; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_castpd_si256(__m256d __a) -{ - return (__m256i)__a; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_castps_pd(__m256 __a) -{ - return (__m256d)__a; -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_castps_si256(__m256 __a) -{ - return (__m256i)__a; -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_castsi256_ps(__m256i __a) -{ - return (__m256)__a; -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_castsi256_pd(__m256i __a) -{ - return (__m256d)__a; -} - -static __inline __m128d __DEFAULT_FN_ATTRS -_mm256_castpd256_pd128(__m256d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1); -} - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm256_castps256_ps128(__m256 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); -} - -static __inline __m128i __DEFAULT_FN_ATTRS -_mm256_castsi256_si128(__m256i __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_castpd128_pd256(__m128d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, -1, -1); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_castps128_ps256(__m128 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, -1, -1, -1, -1); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_castsi128_si256(__m128i __a) -{ - return __builtin_shufflevector(__a, __a, 0, 1, -1, -1); -} - -/* - Vector insert. - We use macros rather than inlines because we only want to accept - invocations where the immediate M is a constant expression. -*/ -#define _mm256_insertf128_ps(V1, V2, M) __extension__ ({ \ - (__m256)__builtin_shufflevector( \ - (__v8sf)(V1), \ - (__v8sf)_mm256_castps128_ps256((__m128)(V2)), \ - (((M) & 1) ? 0 : 8), \ - (((M) & 1) ? 1 : 9), \ - (((M) & 1) ? 2 : 10), \ - (((M) & 1) ? 3 : 11), \ - (((M) & 1) ? 8 : 4), \ - (((M) & 1) ? 9 : 5), \ - (((M) & 1) ? 10 : 6), \ - (((M) & 1) ? 11 : 7) );}) - -#define _mm256_insertf128_pd(V1, V2, M) __extension__ ({ \ - (__m256d)__builtin_shufflevector( \ - (__v4df)(V1), \ - (__v4df)_mm256_castpd128_pd256((__m128d)(V2)), \ - (((M) & 1) ? 0 : 4), \ - (((M) & 1) ? 1 : 5), \ - (((M) & 1) ? 4 : 2), \ - (((M) & 1) ? 5 : 3) );}) - -#define _mm256_insertf128_si256(V1, V2, M) __extension__ ({ \ - (__m256i)__builtin_shufflevector( \ - (__v4di)(V1), \ - (__v4di)_mm256_castsi128_si256((__m128i)(V2)), \ - (((M) & 1) ? 0 : 4), \ - (((M) & 1) ? 1 : 5), \ - (((M) & 1) ? 4 : 2), \ - (((M) & 1) ? 5 : 3) );}) - -/* - Vector extract. - We use macros rather than inlines because we only want to accept - invocations where the immediate M is a constant expression. -*/ -#define _mm256_extractf128_ps(V, M) __extension__ ({ \ - (__m128)__builtin_shufflevector( \ - (__v8sf)(V), \ - (__v8sf)(_mm256_setzero_ps()), \ - (((M) & 1) ? 4 : 0), \ - (((M) & 1) ? 5 : 1), \ - (((M) & 1) ? 6 : 2), \ - (((M) & 1) ? 7 : 3) );}) - -#define _mm256_extractf128_pd(V, M) __extension__ ({ \ - (__m128d)__builtin_shufflevector( \ - (__v4df)(V), \ - (__v4df)(_mm256_setzero_pd()), \ - (((M) & 1) ? 2 : 0), \ - (((M) & 1) ? 3 : 1) );}) - -#define _mm256_extractf128_si256(V, M) __extension__ ({ \ - (__m128i)__builtin_shufflevector( \ - (__v4di)(V), \ - (__v4di)(_mm256_setzero_si256()), \ - (((M) & 1) ? 2 : 0), \ - (((M) & 1) ? 3 : 1) );}) - -/* SIMD load ops (unaligned) */ -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_loadu2_m128(float const *__addr_hi, float const *__addr_lo) -{ - struct __loadu_ps { - __m128 __v; - } __attribute__((__packed__, __may_alias__)); - - __m256 __v256 = _mm256_castps128_ps256(((struct __loadu_ps*)__addr_lo)->__v); - return _mm256_insertf128_ps(__v256, ((struct __loadu_ps*)__addr_hi)->__v, 1); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_loadu2_m128d(double const *__addr_hi, double const *__addr_lo) -{ - struct __loadu_pd { - __m128d __v; - } __attribute__((__packed__, __may_alias__)); - - __m256d __v256 = _mm256_castpd128_pd256(((struct __loadu_pd*)__addr_lo)->__v); - return _mm256_insertf128_pd(__v256, ((struct __loadu_pd*)__addr_hi)->__v, 1); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_loadu2_m128i(__m128i const *__addr_hi, __m128i const *__addr_lo) -{ - struct __loadu_si128 { - __m128i __v; - } __attribute__((__packed__, __may_alias__)); - __m256i __v256 = _mm256_castsi128_si256( - ((struct __loadu_si128*)__addr_lo)->__v); - return _mm256_insertf128_si256(__v256, - ((struct __loadu_si128*)__addr_hi)->__v, 1); -} - -/* SIMD store ops (unaligned) */ -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu2_m128(float *__addr_hi, float *__addr_lo, __m256 __a) -{ - __m128 __v128; - - __v128 = _mm256_castps256_ps128(__a); - __builtin_ia32_storeups(__addr_lo, __v128); - __v128 = _mm256_extractf128_ps(__a, 1); - __builtin_ia32_storeups(__addr_hi, __v128); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu2_m128d(double *__addr_hi, double *__addr_lo, __m256d __a) -{ - __m128d __v128; - - __v128 = _mm256_castpd256_pd128(__a); - __builtin_ia32_storeupd(__addr_lo, __v128); - __v128 = _mm256_extractf128_pd(__a, 1); - __builtin_ia32_storeupd(__addr_hi, __v128); -} - -static __inline void __DEFAULT_FN_ATTRS -_mm256_storeu2_m128i(__m128i *__addr_hi, __m128i *__addr_lo, __m256i __a) -{ - __m128i __v128; - - __v128 = _mm256_castsi256_si128(__a); - __builtin_ia32_storedqu((char *)__addr_lo, (__v16qi)__v128); - __v128 = _mm256_extractf128_si256(__a, 1); - __builtin_ia32_storedqu((char *)__addr_hi, (__v16qi)__v128); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_set_m128 (__m128 __hi, __m128 __lo) { - return (__m256) __builtin_shufflevector(__lo, __hi, 0, 1, 2, 3, 4, 5, 6, 7); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_set_m128d (__m128d __hi, __m128d __lo) { - return (__m256d)_mm256_set_m128((__m128)__hi, (__m128)__lo); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_set_m128i (__m128i __hi, __m128i __lo) { - return (__m256i)_mm256_set_m128((__m128)__hi, (__m128)__lo); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_setr_m128 (__m128 __lo, __m128 __hi) { - return _mm256_set_m128(__hi, __lo); -} - -static __inline __m256d __DEFAULT_FN_ATTRS -_mm256_setr_m128d (__m128d __lo, __m128d __hi) { - return (__m256d)_mm256_set_m128((__m128)__hi, (__m128)__lo); -} - -static __inline __m256i __DEFAULT_FN_ATTRS -_mm256_setr_m128i (__m128i __lo, __m128i __hi) { - return (__m256i)_mm256_set_m128((__m128)__hi, (__m128)__lo); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __AVXINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/bmi2intrin.h b/External/CastXML/share/castxml/clang/include/bmi2intrin.h deleted file mode 100644 index fdae82cf2..000000000 --- a/External/CastXML/share/castxml/clang/include/bmi2intrin.h +++ /dev/null @@ -1,95 +0,0 @@ -/*===---- bmi2intrin.h - BMI2 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __BMI2INTRIN_H -#define __BMI2INTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi2"))) - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_bzhi_u32(unsigned int __X, unsigned int __Y) -{ - return __builtin_ia32_bzhi_si(__X, __Y); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_pdep_u32(unsigned int __X, unsigned int __Y) -{ - return __builtin_ia32_pdep_si(__X, __Y); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_pext_u32(unsigned int __X, unsigned int __Y) -{ - return __builtin_ia32_pext_si(__X, __Y); -} - -#ifdef __x86_64__ - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_bzhi_u64(unsigned long long __X, unsigned long long __Y) -{ - return __builtin_ia32_bzhi_di(__X, __Y); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_pdep_u64(unsigned long long __X, unsigned long long __Y) -{ - return __builtin_ia32_pdep_di(__X, __Y); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_pext_u64(unsigned long long __X, unsigned long long __Y) -{ - return __builtin_ia32_pext_di(__X, __Y); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_mulx_u64 (unsigned long long __X, unsigned long long __Y, - unsigned long long *__P) -{ - unsigned __int128 __res = (unsigned __int128) __X * __Y; - *__P = (unsigned long long) (__res >> 64); - return (unsigned long long) __res; -} - -#else /* !__x86_64__ */ - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_mulx_u32 (unsigned int __X, unsigned int __Y, unsigned int *__P) -{ - unsigned long long __res = (unsigned long long) __X * __Y; - *__P = (unsigned int) (__res >> 32); - return (unsigned int) __res; -} - -#endif /* !__x86_64__ */ - -#undef __DEFAULT_FN_ATTRS - -#endif /* __BMI2INTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/bmiintrin.h b/External/CastXML/share/castxml/clang/include/bmiintrin.h deleted file mode 100644 index dc2f83f3e..000000000 --- a/External/CastXML/share/castxml/clang/include/bmiintrin.h +++ /dev/null @@ -1,149 +0,0 @@ -/*===---- bmiintrin.h - BMI intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __BMIINTRIN_H -#define __BMIINTRIN_H - -#define _tzcnt_u16(a) (__tzcnt_u16((a))) -#define _andn_u32(a, b) (__andn_u32((a), (b))) -/* _bextr_u32 != __bextr_u32 */ -#define _blsi_u32(a) (__blsi_u32((a))) -#define _blsmsk_u32(a) (__blsmsk_u32((a))) -#define _blsr_u32(a) (__blsr_u32((a))) -#define _tzcnt_u32(a) (__tzcnt_u32((a))) - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi"))) - -static __inline__ unsigned short __DEFAULT_FN_ATTRS -__tzcnt_u16(unsigned short __X) -{ - return __X ? __builtin_ctzs(__X) : 16; -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__andn_u32(unsigned int __X, unsigned int __Y) -{ - return ~__X & __Y; -} - -/* AMD-specified, double-leading-underscore version of BEXTR */ -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__bextr_u32(unsigned int __X, unsigned int __Y) -{ - return __builtin_ia32_bextr_u32(__X, __Y); -} - -/* Intel-specified, single-leading-underscore version of BEXTR */ -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_bextr_u32(unsigned int __X, unsigned int __Y, unsigned int __Z) -{ - return __builtin_ia32_bextr_u32 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8))); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blsi_u32(unsigned int __X) -{ - return __X & -__X; -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blsmsk_u32(unsigned int __X) -{ - return __X ^ (__X - 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blsr_u32(unsigned int __X) -{ - return __X & (__X - 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__tzcnt_u32(unsigned int __X) -{ - return __X ? __builtin_ctz(__X) : 32; -} - -#ifdef __x86_64__ - -#define _andn_u64(a, b) (__andn_u64((a), (b))) -/* _bextr_u64 != __bextr_u64 */ -#define _blsi_u64(a) (__blsi_u64((a))) -#define _blsmsk_u64(a) (__blsmsk_u64((a))) -#define _blsr_u64(a) (__blsr_u64((a))) -#define _tzcnt_u64(a) (__tzcnt_u64((a))) - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__andn_u64 (unsigned long long __X, unsigned long long __Y) -{ - return ~__X & __Y; -} - -/* AMD-specified, double-leading-underscore version of BEXTR */ -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__bextr_u64(unsigned long long __X, unsigned long long __Y) -{ - return __builtin_ia32_bextr_u64(__X, __Y); -} - -/* Intel-specified, single-leading-underscore version of BEXTR */ -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_bextr_u64(unsigned long long __X, unsigned int __Y, unsigned int __Z) -{ - return __builtin_ia32_bextr_u64 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8))); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blsi_u64(unsigned long long __X) -{ - return __X & -__X; -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blsmsk_u64(unsigned long long __X) -{ - return __X ^ (__X - 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blsr_u64(unsigned long long __X) -{ - return __X & (__X - 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__tzcnt_u64(unsigned long long __X) -{ - return __X ? __builtin_ctzll(__X) : 64; -} - -#endif /* __x86_64__ */ - -#undef __DEFAULT_FN_ATTRS - -#endif /* __BMIINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/cpuid.h b/External/CastXML/share/castxml/clang/include/cpuid.h deleted file mode 100644 index 5da02e0e5..000000000 --- a/External/CastXML/share/castxml/clang/include/cpuid.h +++ /dev/null @@ -1,209 +0,0 @@ -/*===---- cpuid.h - X86 cpu model detection --------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !(__x86_64__ || __i386__) -#error this header is for x86 only -#endif - -/* Responses identification request with %eax 0 */ -/* AMD: "AuthenticAMD" */ -#define signature_AMD_ebx 0x68747541 -#define signature_AMD_edx 0x69746e65 -#define signature_AMD_ecx 0x444d4163 -/* CENTAUR: "CentaurHauls" */ -#define signature_CENTAUR_ebx 0x746e6543 -#define signature_CENTAUR_edx 0x48727561 -#define signature_CENTAUR_ecx 0x736c7561 -/* CYRIX: "CyrixInstead" */ -#define signature_CYRIX_ebx 0x69727943 -#define signature_CYRIX_edx 0x736e4978 -#define signature_CYRIX_ecx 0x64616574 -/* INTEL: "GenuineIntel" */ -#define signature_INTEL_ebx 0x756e6547 -#define signature_INTEL_edx 0x49656e69 -#define signature_INTEL_ecx 0x6c65746e -/* TM1: "TransmetaCPU" */ -#define signature_TM1_ebx 0x6e617254 -#define signature_TM1_edx 0x74656d73 -#define signature_TM1_ecx 0x55504361 -/* TM2: "GenuineTMx86" */ -#define signature_TM2_ebx 0x756e6547 -#define signature_TM2_edx 0x54656e69 -#define signature_TM2_ecx 0x3638784d -/* NSC: "Geode by NSC" */ -#define signature_NSC_ebx 0x646f6547 -#define signature_NSC_edx 0x43534e20 -#define signature_NSC_ecx 0x79622065 -/* NEXGEN: "NexGenDriven" */ -#define signature_NEXGEN_ebx 0x4778654e -#define signature_NEXGEN_edx 0x72446e65 -#define signature_NEXGEN_ecx 0x6e657669 -/* RISE: "RiseRiseRise" */ -#define signature_RISE_ebx 0x65736952 -#define signature_RISE_edx 0x65736952 -#define signature_RISE_ecx 0x65736952 -/* SIS: "SiS SiS SiS " */ -#define signature_SIS_ebx 0x20536953 -#define signature_SIS_edx 0x20536953 -#define signature_SIS_ecx 0x20536953 -/* UMC: "UMC UMC UMC " */ -#define signature_UMC_ebx 0x20434d55 -#define signature_UMC_edx 0x20434d55 -#define signature_UMC_ecx 0x20434d55 -/* VIA: "VIA VIA VIA " */ -#define signature_VIA_ebx 0x20414956 -#define signature_VIA_edx 0x20414956 -#define signature_VIA_ecx 0x20414956 -/* VORTEX: "Vortex86 SoC" */ -#define signature_VORTEX_ebx 0x74726f56 -#define signature_VORTEX_edx 0x36387865 -#define signature_VORTEX_ecx 0x436f5320 - -/* Features in %ecx for level 1 */ -#define bit_SSE3 0x00000001 -#define bit_PCLMULQDQ 0x00000002 -#define bit_DTES64 0x00000004 -#define bit_MONITOR 0x00000008 -#define bit_DSCPL 0x00000010 -#define bit_VMX 0x00000020 -#define bit_SMX 0x00000040 -#define bit_EIST 0x00000080 -#define bit_TM2 0x00000100 -#define bit_SSSE3 0x00000200 -#define bit_CNXTID 0x00000400 -#define bit_FMA 0x00001000 -#define bit_CMPXCHG16B 0x00002000 -#define bit_xTPR 0x00004000 -#define bit_PDCM 0x00008000 -#define bit_PCID 0x00020000 -#define bit_DCA 0x00040000 -#define bit_SSE41 0x00080000 -#define bit_SSE42 0x00100000 -#define bit_x2APIC 0x00200000 -#define bit_MOVBE 0x00400000 -#define bit_POPCNT 0x00800000 -#define bit_TSCDeadline 0x01000000 -#define bit_AESNI 0x02000000 -#define bit_XSAVE 0x04000000 -#define bit_OSXSAVE 0x08000000 -#define bit_AVX 0x10000000 -#define bit_RDRND 0x40000000 - -/* Features in %edx for level 1 */ -#define bit_FPU 0x00000001 -#define bit_VME 0x00000002 -#define bit_DE 0x00000004 -#define bit_PSE 0x00000008 -#define bit_TSC 0x00000010 -#define bit_MSR 0x00000020 -#define bit_PAE 0x00000040 -#define bit_MCE 0x00000080 -#define bit_CX8 0x00000100 -#define bit_APIC 0x00000200 -#define bit_SEP 0x00000800 -#define bit_MTRR 0x00001000 -#define bit_PGE 0x00002000 -#define bit_MCA 0x00004000 -#define bit_CMOV 0x00008000 -#define bit_PAT 0x00010000 -#define bit_PSE36 0x00020000 -#define bit_PSN 0x00040000 -#define bit_CLFSH 0x00080000 -#define bit_DS 0x00200000 -#define bit_ACPI 0x00400000 -#define bit_MMX 0x00800000 -#define bit_FXSR 0x01000000 -#define bit_FXSAVE bit_FXSR /* for gcc compat */ -#define bit_SSE 0x02000000 -#define bit_SSE2 0x04000000 -#define bit_SS 0x08000000 -#define bit_HTT 0x10000000 -#define bit_TM 0x20000000 -#define bit_PBE 0x80000000 - -/* Features in %ebx for level 7 sub-leaf 0 */ -#define bit_FSGSBASE 0x00000001 -#define bit_SMEP 0x00000080 -#define bit_ENH_MOVSB 0x00000200 - -#if __i386__ -#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ - __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \ - : "0"(__level)) - -#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ - __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \ - : "0"(__level), "2"(__count)) -#else -/* x86-64 uses %rbx as the base register, so preserve it. */ -#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ - __asm(" xchgq %%rbx,%q1\n" \ - " cpuid\n" \ - " xchgq %%rbx,%q1" \ - : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \ - : "0"(__level)) - -#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ - __asm(" xchgq %%rbx,%q1\n" \ - " cpuid\n" \ - " xchgq %%rbx,%q1" \ - : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \ - : "0"(__level), "2"(__count)) -#endif - -static __inline int __get_cpuid (unsigned int __level, unsigned int *__eax, - unsigned int *__ebx, unsigned int *__ecx, - unsigned int *__edx) { - __cpuid(__level, *__eax, *__ebx, *__ecx, *__edx); - return 1; -} - -static __inline int __get_cpuid_max (unsigned int __level, unsigned int *__sig) -{ - unsigned int __eax, __ebx, __ecx, __edx; -#if __i386__ - int __cpuid_supported; - - __asm(" pushfl\n" - " popl %%eax\n" - " movl %%eax,%%ecx\n" - " xorl $0x00200000,%%eax\n" - " pushl %%eax\n" - " popfl\n" - " pushfl\n" - " popl %%eax\n" - " movl $0,%0\n" - " cmpl %%eax,%%ecx\n" - " je 1f\n" - " movl $1,%0\n" - "1:" - : "=r" (__cpuid_supported) : : "eax", "ecx"); - if (!__cpuid_supported) - return 0; -#endif - - __cpuid(__level, __eax, __ebx, __ecx, __edx); - if (__sig) - *__sig = __ebx; - return __eax; -} diff --git a/External/CastXML/share/castxml/clang/include/cuda_builtin_vars.h b/External/CastXML/share/castxml/clang/include/cuda_builtin_vars.h deleted file mode 100644 index 901356b3d..000000000 --- a/External/CastXML/share/castxml/clang/include/cuda_builtin_vars.h +++ /dev/null @@ -1,110 +0,0 @@ -/*===---- cuda_builtin_vars.h - CUDA built-in variables ---------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __CUDA_BUILTIN_VARS_H -#define __CUDA_BUILTIN_VARS_H - -// The file implements built-in CUDA variables using __declspec(property). -// https://msdn.microsoft.com/en-us/library/yhfk0thd.aspx -// All read accesses of built-in variable fields get converted into calls to a -// getter function which in turn would call appropriate builtin to fetch the -// value. -// -// Example: -// int x = threadIdx.x; -// IR output: -// %0 = call i32 @llvm.ptx.read.tid.x() #3 -// PTX output: -// mov.u32 %r2, %tid.x; - -#define __CUDA_DEVICE_BUILTIN(FIELD, INTRINSIC) \ - __declspec(property(get = __fetch_builtin_##FIELD)) unsigned int FIELD; \ - static inline __attribute__((always_inline)) \ - __attribute__((device)) unsigned int __fetch_builtin_##FIELD(void) { \ - return INTRINSIC; \ - } - -#if __cplusplus >= 201103L -#define __DELETE =delete -#else -#define __DELETE -#endif - -// Make sure nobody can create instances of the special varible types. nvcc -// also disallows taking address of special variables, so we disable address-of -// operator as well. -#define __CUDA_DISALLOW_BUILTINVAR_ACCESS(TypeName) \ - __attribute__((device)) TypeName() __DELETE; \ - __attribute__((device)) TypeName(const TypeName &) __DELETE; \ - __attribute__((device)) void operator=(const TypeName &) const __DELETE; \ - __attribute__((device)) TypeName *operator&() const __DELETE - -struct __cuda_builtin_threadIdx_t { - __CUDA_DEVICE_BUILTIN(x,__builtin_ptx_read_tid_x()); - __CUDA_DEVICE_BUILTIN(y,__builtin_ptx_read_tid_y()); - __CUDA_DEVICE_BUILTIN(z,__builtin_ptx_read_tid_z()); -private: - __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_threadIdx_t); -}; - -struct __cuda_builtin_blockIdx_t { - __CUDA_DEVICE_BUILTIN(x,__builtin_ptx_read_ctaid_x()); - __CUDA_DEVICE_BUILTIN(y,__builtin_ptx_read_ctaid_y()); - __CUDA_DEVICE_BUILTIN(z,__builtin_ptx_read_ctaid_z()); -private: - __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_blockIdx_t); -}; - -struct __cuda_builtin_blockDim_t { - __CUDA_DEVICE_BUILTIN(x,__builtin_ptx_read_ntid_x()); - __CUDA_DEVICE_BUILTIN(y,__builtin_ptx_read_ntid_y()); - __CUDA_DEVICE_BUILTIN(z,__builtin_ptx_read_ntid_z()); -private: - __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_blockDim_t); -}; - -struct __cuda_builtin_gridDim_t { - __CUDA_DEVICE_BUILTIN(x,__builtin_ptx_read_nctaid_x()); - __CUDA_DEVICE_BUILTIN(y,__builtin_ptx_read_nctaid_y()); - __CUDA_DEVICE_BUILTIN(z,__builtin_ptx_read_nctaid_z()); -private: - __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_gridDim_t); -}; - -#define __CUDA_BUILTIN_VAR \ - extern const __attribute__((device)) __attribute__((weak)) -__CUDA_BUILTIN_VAR __cuda_builtin_threadIdx_t threadIdx; -__CUDA_BUILTIN_VAR __cuda_builtin_blockIdx_t blockIdx; -__CUDA_BUILTIN_VAR __cuda_builtin_blockDim_t blockDim; -__CUDA_BUILTIN_VAR __cuda_builtin_gridDim_t gridDim; - -// warpSize should translate to read of %WARP_SZ but there's currently no -// builtin to do so. According to PTX v4.2 docs 'to date, all target -// architectures have a WARP_SZ value of 32'. -__attribute__((device)) const int warpSize = 32; - -#undef __CUDA_DEVICE_BUILTIN -#undef __CUDA_BUILTIN_VAR -#undef __CUDA_DISALLOW_BUILTINVAR_ACCESS - -#endif /* __CUDA_BUILTIN_VARS_H */ diff --git a/External/CastXML/share/castxml/clang/include/emmintrin.h b/External/CastXML/share/castxml/clang/include/emmintrin.h deleted file mode 100644 index e22ffaf19..000000000 --- a/External/CastXML/share/castxml/clang/include/emmintrin.h +++ /dev/null @@ -1,1474 +0,0 @@ -/*===---- emmintrin.h - SSE2 intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __EMMINTRIN_H -#define __EMMINTRIN_H - -#include - -typedef double __m128d __attribute__((__vector_size__(16))); -typedef long long __m128i __attribute__((__vector_size__(16))); - -/* Type defines. */ -typedef double __v2df __attribute__ ((__vector_size__ (16))); -typedef long long __v2di __attribute__ ((__vector_size__ (16))); -typedef short __v8hi __attribute__((__vector_size__(16))); -typedef char __v16qi __attribute__((__vector_size__(16))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse2"))) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_add_sd(__m128d __a, __m128d __b) -{ - __a[0] += __b[0]; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_add_pd(__m128d __a, __m128d __b) -{ - return __a + __b; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_sub_sd(__m128d __a, __m128d __b) -{ - __a[0] -= __b[0]; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_sub_pd(__m128d __a, __m128d __b) -{ - return __a - __b; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mul_sd(__m128d __a, __m128d __b) -{ - __a[0] *= __b[0]; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mul_pd(__m128d __a, __m128d __b) -{ - return __a * __b; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_div_sd(__m128d __a, __m128d __b) -{ - __a[0] /= __b[0]; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_div_pd(__m128d __a, __m128d __b) -{ - return __a / __b; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_sqrt_sd(__m128d __a, __m128d __b) -{ - __m128d __c = __builtin_ia32_sqrtsd(__b); - return (__m128d) { __c[0], __a[1] }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_sqrt_pd(__m128d __a) -{ - return __builtin_ia32_sqrtpd(__a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_min_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_minsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_min_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_minpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_max_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_maxsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_max_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_maxpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_and_pd(__m128d __a, __m128d __b) -{ - return (__m128d)((__v4si)__a & (__v4si)__b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_andnot_pd(__m128d __a, __m128d __b) -{ - return (__m128d)(~(__v4si)__a & (__v4si)__b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_or_pd(__m128d __a, __m128d __b) -{ - return (__m128d)((__v4si)__a | (__v4si)__b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_xor_pd(__m128d __a, __m128d __b) -{ - return (__m128d)((__v4si)__a ^ (__v4si)__b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpeq_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpeqpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmplt_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpltpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmple_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmplepd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpgt_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpltpd(__b, __a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpge_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmplepd(__b, __a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpord_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpordpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpunord_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpunordpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpneq_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpneqpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnlt_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnltpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnle_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnlepd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpngt_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnltpd(__b, __a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnge_pd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnlepd(__b, __a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpeq_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpeqsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmplt_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpltsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmple_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmplesd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpgt_sd(__m128d __a, __m128d __b) -{ - __m128d __c = __builtin_ia32_cmpltsd(__b, __a); - return (__m128d) { __c[0], __a[1] }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpge_sd(__m128d __a, __m128d __b) -{ - __m128d __c = __builtin_ia32_cmplesd(__b, __a); - return (__m128d) { __c[0], __a[1] }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpord_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpordsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpunord_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpunordsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpneq_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpneqsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnlt_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnltsd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnle_sd(__m128d __a, __m128d __b) -{ - return (__m128d)__builtin_ia32_cmpnlesd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpngt_sd(__m128d __a, __m128d __b) -{ - __m128d __c = __builtin_ia32_cmpnltsd(__b, __a); - return (__m128d) { __c[0], __a[1] }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cmpnge_sd(__m128d __a, __m128d __b) -{ - __m128d __c = __builtin_ia32_cmpnlesd(__b, __a); - return (__m128d) { __c[0], __a[1] }; -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comieq_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdeq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comilt_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdlt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comile_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdle(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comigt_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdgt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comige_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdge(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comineq_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_comisdneq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomieq_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdeq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomilt_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdlt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomile_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdle(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomigt_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdgt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomige_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdge(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomineq_sd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_ucomisdneq(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpd_ps(__m128d __a) -{ - return __builtin_ia32_cvtpd2ps(__a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtps_pd(__m128 __a) -{ - return __builtin_ia32_cvtps2pd(__a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtepi32_pd(__m128i __a) -{ - return __builtin_ia32_cvtdq2pd((__v4si)__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtpd_epi32(__m128d __a) -{ - return __builtin_ia32_cvtpd2dq(__a); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvtsd_si32(__m128d __a) -{ - return __builtin_ia32_cvtsd2si(__a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtsd_ss(__m128 __a, __m128d __b) -{ - __a[0] = __b[0]; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtsi32_sd(__m128d __a, int __b) -{ - __a[0] = __b; - return __a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtss_sd(__m128d __a, __m128 __b) -{ - __a[0] = __b[0]; - return __a; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttpd_epi32(__m128d __a) -{ - return (__m128i)__builtin_ia32_cvttpd2dq(__a); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvttsd_si32(__m128d __a) -{ - return __a[0]; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtpd_pi32(__m128d __a) -{ - return (__m64)__builtin_ia32_cvtpd2pi(__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvttpd_pi32(__m128d __a) -{ - return (__m64)__builtin_ia32_cvttpd2pi(__a); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtpi32_pd(__m64 __a) -{ - return __builtin_ia32_cvtpi2pd((__v2si)__a); -} - -static __inline__ double __DEFAULT_FN_ATTRS -_mm_cvtsd_f64(__m128d __a) -{ - return __a[0]; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_load_pd(double const *__dp) -{ - return *(__m128d*)__dp; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_load1_pd(double const *__dp) -{ - struct __mm_load1_pd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - double __u = ((struct __mm_load1_pd_struct*)__dp)->__u; - return (__m128d){ __u, __u }; -} - -#define _mm_load_pd1(dp) _mm_load1_pd(dp) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_loadr_pd(double const *__dp) -{ - __m128d __u = *(__m128d*)__dp; - return __builtin_shufflevector(__u, __u, 1, 0); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_loadu_pd(double const *__dp) -{ - struct __loadu_pd { - __m128d __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_pd*)__dp)->__v; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_load_sd(double const *__dp) -{ - struct __mm_load_sd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - double __u = ((struct __mm_load_sd_struct*)__dp)->__u; - return (__m128d){ __u, 0 }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_loadh_pd(__m128d __a, double const *__dp) -{ - struct __mm_loadh_pd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - double __u = ((struct __mm_loadh_pd_struct*)__dp)->__u; - return (__m128d){ __a[0], __u }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_loadl_pd(__m128d __a, double const *__dp) -{ - struct __mm_loadl_pd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - double __u = ((struct __mm_loadl_pd_struct*)__dp)->__u; - return (__m128d){ __u, __a[1] }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_set_sd(double __w) -{ - return (__m128d){ __w, 0 }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_set1_pd(double __w) -{ - return (__m128d){ __w, __w }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_set_pd(double __w, double __x) -{ - return (__m128d){ __x, __w }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_setr_pd(double __w, double __x) -{ - return (__m128d){ __w, __x }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_setzero_pd(void) -{ - return (__m128d){ 0, 0 }; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_move_sd(__m128d __a, __m128d __b) -{ - return (__m128d){ __b[0], __a[1] }; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_sd(double *__dp, __m128d __a) -{ - struct __mm_store_sd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_store_sd_struct*)__dp)->__u = __a[0]; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store1_pd(double *__dp, __m128d __a) -{ - struct __mm_store1_pd_struct { - double __u[2]; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_store1_pd_struct*)__dp)->__u[0] = __a[0]; - ((struct __mm_store1_pd_struct*)__dp)->__u[1] = __a[0]; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_pd(double *__dp, __m128d __a) -{ - *(__m128d *)__dp = __a; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storeu_pd(double *__dp, __m128d __a) -{ - __builtin_ia32_storeupd(__dp, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storer_pd(double *__dp, __m128d __a) -{ - __a = __builtin_shufflevector(__a, __a, 1, 0); - *(__m128d *)__dp = __a; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storeh_pd(double *__dp, __m128d __a) -{ - struct __mm_storeh_pd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[1]; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storel_pd(double *__dp, __m128d __a) -{ - struct __mm_storeh_pd_struct { - double __u; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[0]; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_add_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)((__v16qi)__a + (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_add_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)((__v8hi)__a + (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_add_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)((__v4si)__a + (__v4si)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_add_si64(__m64 __a, __m64 __b) -{ - return __a + __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_add_epi64(__m128i __a, __m128i __b) -{ - return __a + __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_adds_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_paddsb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_adds_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_paddsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_adds_epu8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_paddusb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_adds_epu16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_paddusw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_avg_epu8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_avg_epu16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_madd_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epu8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epu8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mulhi_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mulhi_epu16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mullo_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)((__v8hi)__a * (__v8hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_mul_su32(__m64 __a, __m64 __b) -{ - return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mul_epu32(__m128i __a, __m128i __b) -{ - return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sad_epu8(__m128i __a, __m128i __b) -{ - return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sub_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)((__v16qi)__a - (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sub_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)((__v8hi)__a - (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sub_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)((__v4si)__a - (__v4si)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sub_si64(__m64 __a, __m64 __b) -{ - return __a - __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sub_epi64(__m128i __a, __m128i __b) -{ - return __a - __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_subs_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psubsb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_subs_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psubsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_subs_epu8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psubusb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_subs_epu16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psubusw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_and_si128(__m128i __a, __m128i __b) -{ - return __a & __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_andnot_si128(__m128i __a, __m128i __b) -{ - return ~__a & __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_or_si128(__m128i __a, __m128i __b) -{ - return __a | __b; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_xor_si128(__m128i __a, __m128i __b) -{ - return __a ^ __b; -} - -#define _mm_slli_si128(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v16qi)_mm_setzero_si128(), \ - (__v16qi)(__m128i)(a), \ - ((imm)&0xF0) ? 0 : 16 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 17 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 18 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 19 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 20 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 21 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 22 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 23 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 24 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 25 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 26 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 27 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 28 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 29 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 30 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 31 - ((imm)&0xF)); }) - -#define _mm_bslli_si128(a, imm) \ - _mm_slli_si128((a), (imm)) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_slli_epi16(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sll_epi16(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_slli_epi32(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sll_epi32(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_slli_epi64(__m128i __a, int __count) -{ - return __builtin_ia32_psllqi128(__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sll_epi64(__m128i __a, __m128i __count) -{ - return __builtin_ia32_psllq128(__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srai_epi16(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sra_epi16(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srai_epi32(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sra_epi32(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count); -} - -#define _mm_srli_si128(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v16qi)(__m128i)(a), \ - (__v16qi)_mm_setzero_si128(), \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 0, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 1, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 2, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 3, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 4, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 5, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 6, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 7, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 8, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 9, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 10, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 11, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 12, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 13, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 14, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 15); }) - -#define _mm_bsrli_si128(a, imm) \ - _mm_srli_si128((a), (imm)) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srli_epi16(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srl_epi16(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srli_epi32(__m128i __a, int __count) -{ - return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srl_epi32(__m128i __a, __m128i __count) -{ - return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srli_epi64(__m128i __a, int __count) -{ - return __builtin_ia32_psrlqi128(__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_srl_epi64(__m128i __a, __m128i __count) -{ - return __builtin_ia32_psrlq128(__a, __count); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpeq_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)((__v16qi)__a == (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpeq_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)((__v8hi)__a == (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpeq_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)((__v4si)__a == (__v4si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpgt_epi8(__m128i __a, __m128i __b) -{ - /* This function always performs a signed comparison, but __v16qi is a char - which may be signed or unsigned. */ - typedef signed char __v16qs __attribute__((__vector_size__(16))); - return (__m128i)((__v16qs)__a > (__v16qs)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpgt_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)((__v8hi)__a > (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpgt_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)((__v4si)__a > (__v4si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmplt_epi8(__m128i __a, __m128i __b) -{ - return _mm_cmpgt_epi8(__b, __a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmplt_epi16(__m128i __a, __m128i __b) -{ - return _mm_cmpgt_epi16(__b, __a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmplt_epi32(__m128i __a, __m128i __b) -{ - return _mm_cmpgt_epi32(__b, __a); -} - -#ifdef __x86_64__ -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_cvtsi64_sd(__m128d __a, long long __b) -{ - __a[0] = __b; - return __a; -} - -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvtsd_si64(__m128d __a) -{ - return __builtin_ia32_cvtsd2si64(__a); -} - -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvttsd_si64(__m128d __a) -{ - return __a[0]; -} -#endif - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtepi32_ps(__m128i __a) -{ - return __builtin_ia32_cvtdq2ps((__v4si)__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtps_epi32(__m128 __a) -{ - return (__m128i)__builtin_ia32_cvtps2dq(__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvttps_epi32(__m128 __a) -{ - return (__m128i)__builtin_ia32_cvttps2dq(__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtsi32_si128(int __a) -{ - return (__m128i)(__v4si){ __a, 0, 0, 0 }; -} - -#ifdef __x86_64__ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtsi64_si128(long long __a) -{ - return (__m128i){ __a, 0 }; -} -#endif - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvtsi128_si32(__m128i __a) -{ - __v4si __b = (__v4si)__a; - return __b[0]; -} - -#ifdef __x86_64__ -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvtsi128_si64(__m128i __a) -{ - return __a[0]; -} -#endif - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_load_si128(__m128i const *__p) -{ - return *__p; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_loadu_si128(__m128i const *__p) -{ - struct __loadu_si128 { - __m128i __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_si128*)__p)->__v; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_loadl_epi64(__m128i const *__p) -{ - struct __mm_loadl_epi64_struct { - long long __u; - } __attribute__((__packed__, __may_alias__)); - return (__m128i) { ((struct __mm_loadl_epi64_struct*)__p)->__u, 0}; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set_epi64x(long long q1, long long q0) -{ - return (__m128i){ q0, q1 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set_epi64(__m64 q1, __m64 q0) -{ - return (__m128i){ (long long)q0, (long long)q1 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set_epi32(int i3, int i2, int i1, int i0) -{ - return (__m128i)(__v4si){ i0, i1, i2, i3}; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0) -{ - return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set_epi8(char b15, char b14, char b13, char b12, char b11, char b10, char b9, char b8, char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0) -{ - return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set1_epi64x(long long __q) -{ - return (__m128i){ __q, __q }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set1_epi64(__m64 __q) -{ - return (__m128i){ (long long)__q, (long long)__q }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set1_epi32(int __i) -{ - return (__m128i)(__v4si){ __i, __i, __i, __i }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set1_epi16(short __w) -{ - return (__m128i)(__v8hi){ __w, __w, __w, __w, __w, __w, __w, __w }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_set1_epi8(char __b) -{ - return (__m128i)(__v16qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_setr_epi64(__m64 q0, __m64 q1) -{ - return (__m128i){ (long long)q0, (long long)q1 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_setr_epi32(int i0, int i1, int i2, int i3) -{ - return (__m128i)(__v4si){ i0, i1, i2, i3}; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7) -{ - return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_setr_epi8(char b0, char b1, char b2, char b3, char b4, char b5, char b6, char b7, char b8, char b9, char b10, char b11, char b12, char b13, char b14, char b15) -{ - return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_setzero_si128(void) -{ - return (__m128i){ 0LL, 0LL }; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_si128(__m128i *__p, __m128i __b) -{ - *__p = __b; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storeu_si128(__m128i *__p, __m128i __b) -{ - __builtin_ia32_storedqu((char *)__p, (__v16qi)__b); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_maskmoveu_si128(__m128i __d, __m128i __n, char *__p) -{ - __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storel_epi64(__m128i *__p, __m128i __a) -{ - struct __mm_storel_epi64_struct { - long long __u; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_storel_epi64_struct*)__p)->__u = __a[0]; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_pd(double *__p, __m128d __a) -{ - __builtin_ia32_movntpd(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_si128(__m128i *__p, __m128i __a) -{ - __builtin_ia32_movntdq(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_si32(int *__p, int __a) -{ - __builtin_ia32_movnti(__p, __a); -} - -#ifdef __x86_64__ -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_si64(long long *__p, long long __a) -{ - __builtin_ia32_movnti64(__p, __a); -} -#endif - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_clflush(void const *__p) -{ - __builtin_ia32_clflush(__p); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_lfence(void) -{ - __builtin_ia32_lfence(); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mfence(void) -{ - __builtin_ia32_mfence(); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_packs_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_packs_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_packus_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_extract_epi16(__m128i __a, int __imm) -{ - __v8hi __b = (__v8hi)__a; - return (unsigned short)__b[__imm & 7]; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_insert_epi16(__m128i __a, int __b, int __imm) -{ - __v8hi __c = (__v8hi)__a; - __c[__imm & 7] = __b; - return (__m128i)__c; -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_movemask_epi8(__m128i __a) -{ - return __builtin_ia32_pmovmskb128((__v16qi)__a); -} - -#define _mm_shuffle_epi32(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v4si)(__m128i)(a), \ - (__v4si)_mm_set1_epi32(0), \ - (imm) & 0x3, ((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); }) - -#define _mm_shufflelo_epi16(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \ - (__v8hi)_mm_set1_epi16(0), \ - (imm) & 0x3, ((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ - 4, 5, 6, 7); }) - -#define _mm_shufflehi_epi16(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \ - (__v8hi)_mm_set1_epi16(0), \ - 0, 1, 2, 3, \ - 4 + (((imm) & 0x03) >> 0), \ - 4 + (((imm) & 0x0c) >> 2), \ - 4 + (((imm) & 0x30) >> 4), \ - 4 + (((imm) & 0xc0) >> 6)); }) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpackhi_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpackhi_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpackhi_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4+2, 3, 4+3); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpackhi_epi64(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector(__a, __b, 1, 2+1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpacklo_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpacklo_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpacklo_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4+0, 1, 4+1); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_unpacklo_epi64(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_shufflevector(__a, __b, 0, 2+0); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_movepi64_pi64(__m128i __a) -{ - return (__m64)__a[0]; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_movpi64_epi64(__m64 __a) -{ - return (__m128i){ (long long)__a, 0 }; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_move_epi64(__m128i __a) -{ - return __builtin_shufflevector(__a, (__m128i){ 0 }, 0, 2); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_unpackhi_pd(__m128d __a, __m128d __b) -{ - return __builtin_shufflevector(__a, __b, 1, 2+1); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_unpacklo_pd(__m128d __a, __m128d __b) -{ - return __builtin_shufflevector(__a, __b, 0, 2+0); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_movemask_pd(__m128d __a) -{ - return __builtin_ia32_movmskpd(__a); -} - -#define _mm_shuffle_pd(a, b, i) __extension__ ({ \ - __builtin_shufflevector((__m128d)(a), (__m128d)(b), \ - (i) & 1, (((i) & 2) >> 1) + 2); }) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_castpd_ps(__m128d __a) -{ - return (__m128)__a; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_castpd_si128(__m128d __a) -{ - return (__m128i)__a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_castps_pd(__m128 __a) -{ - return (__m128d)__a; -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_castps_si128(__m128 __a) -{ - return (__m128i)__a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_castsi128_ps(__m128i __a) -{ - return (__m128)__a; -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_castsi128_pd(__m128i __a) -{ - return (__m128d)__a; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_pause(void) -{ - __asm__ volatile ("pause"); -} - -#undef __DEFAULT_FN_ATTRS - -#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) - -#endif /* __EMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/f16cintrin.h b/External/CastXML/share/castxml/clang/include/f16cintrin.h deleted file mode 100644 index 9349b78fe..000000000 --- a/External/CastXML/share/castxml/clang/include/f16cintrin.h +++ /dev/null @@ -1,59 +0,0 @@ -/*===---- f16cintrin.h - F16C intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __F16CINTRIN_H -#define __F16CINTRIN_H - -typedef float __v8sf __attribute__ ((__vector_size__ (32))); -typedef float __m256 __attribute__ ((__vector_size__ (32))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("f16c"))) - -#define _mm_cvtps_ph(a, imm) __extension__ ({ \ - __m128 __a = (a); \ - (__m128i)__builtin_ia32_vcvtps2ph((__v4sf)__a, (imm)); }) - -#define _mm256_cvtps_ph(a, imm) __extension__ ({ \ - __m256 __a = (a); \ - (__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)__a, (imm)); }) - -static __inline __m128 __DEFAULT_FN_ATTRS -_mm_cvtph_ps(__m128i __a) -{ - return (__m128)__builtin_ia32_vcvtph2ps((__v8hi)__a); -} - -static __inline __m256 __DEFAULT_FN_ATTRS -_mm256_cvtph_ps(__m128i __a) -{ - return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __F16CINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/float.h b/External/CastXML/share/castxml/clang/include/float.h deleted file mode 100644 index 238cf76b0..000000000 --- a/External/CastXML/share/castxml/clang/include/float.h +++ /dev/null @@ -1,124 +0,0 @@ -/*===---- float.h - Characteristics of floating point types ----------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __FLOAT_H -#define __FLOAT_H - -/* If we're on MinGW, fall back to the system's float.h, which might have - * additional definitions provided for Windows. - * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx - */ -#if (defined(__MINGW32__) || defined(_MSC_VER)) && __STDC_HOSTED__ && \ - __has_include_next() -# include_next - -/* Undefine anything that we'll be redefining below. */ -# undef FLT_EVAL_METHOD -# undef FLT_ROUNDS -# undef FLT_RADIX -# undef FLT_MANT_DIG -# undef DBL_MANT_DIG -# undef LDBL_MANT_DIG -# undef DECIMAL_DIG -# undef FLT_DIG -# undef DBL_DIG -# undef LDBL_DIG -# undef FLT_MIN_EXP -# undef DBL_MIN_EXP -# undef LDBL_MIN_EXP -# undef FLT_MIN_10_EXP -# undef DBL_MIN_10_EXP -# undef LDBL_MIN_10_EXP -# undef FLT_MAX_EXP -# undef DBL_MAX_EXP -# undef LDBL_MAX_EXP -# undef FLT_MAX_10_EXP -# undef DBL_MAX_10_EXP -# undef LDBL_MAX_10_EXP -# undef FLT_MAX -# undef DBL_MAX -# undef LDBL_MAX -# undef FLT_EPSILON -# undef DBL_EPSILON -# undef LDBL_EPSILON -# undef FLT_MIN -# undef DBL_MIN -# undef LDBL_MIN -# if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) -# undef FLT_TRUE_MIN -# undef DBL_TRUE_MIN -# undef LDBL_TRUE_MIN -# endif -#endif - -/* Characteristics of floating point types, C99 5.2.4.2.2 */ - -#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ -#define FLT_ROUNDS (__builtin_flt_rounds()) -#define FLT_RADIX __FLT_RADIX__ - -#define FLT_MANT_DIG __FLT_MANT_DIG__ -#define DBL_MANT_DIG __DBL_MANT_DIG__ -#define LDBL_MANT_DIG __LDBL_MANT_DIG__ - -#define DECIMAL_DIG __DECIMAL_DIG__ - -#define FLT_DIG __FLT_DIG__ -#define DBL_DIG __DBL_DIG__ -#define LDBL_DIG __LDBL_DIG__ - -#define FLT_MIN_EXP __FLT_MIN_EXP__ -#define DBL_MIN_EXP __DBL_MIN_EXP__ -#define LDBL_MIN_EXP __LDBL_MIN_EXP__ - -#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ -#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ -#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ - -#define FLT_MAX_EXP __FLT_MAX_EXP__ -#define DBL_MAX_EXP __DBL_MAX_EXP__ -#define LDBL_MAX_EXP __LDBL_MAX_EXP__ - -#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ -#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ -#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ - -#define FLT_MAX __FLT_MAX__ -#define DBL_MAX __DBL_MAX__ -#define LDBL_MAX __LDBL_MAX__ - -#define FLT_EPSILON __FLT_EPSILON__ -#define DBL_EPSILON __DBL_EPSILON__ -#define LDBL_EPSILON __LDBL_EPSILON__ - -#define FLT_MIN __FLT_MIN__ -#define DBL_MIN __DBL_MIN__ -#define LDBL_MIN __LDBL_MIN__ - -#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) -# define FLT_TRUE_MIN __FLT_DENORM_MIN__ -# define DBL_TRUE_MIN __DBL_DENORM_MIN__ -# define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ -#endif - -#endif /* __FLOAT_H */ diff --git a/External/CastXML/share/castxml/clang/include/fma4intrin.h b/External/CastXML/share/castxml/clang/include/fma4intrin.h deleted file mode 100644 index f1178877b..000000000 --- a/External/CastXML/share/castxml/clang/include/fma4intrin.h +++ /dev/null @@ -1,230 +0,0 @@ -/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __FMA4INTRIN_H -#define __FMA4INTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma4"))) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_macc_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_macc_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_macc_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_msub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_msub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_msub_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_msub_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_maddsub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maddsub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_msubadd_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_msubadd_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_macc_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_macc_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_msub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_msub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_nmacc_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_nmacc_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_nmsub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_nmsub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_maddsub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maddsub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_msubadd_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_msubadd_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __FMA4INTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/fmaintrin.h b/External/CastXML/share/castxml/clang/include/fmaintrin.h deleted file mode 100644 index 114a14380..000000000 --- a/External/CastXML/share/castxml/clang/include/fmaintrin.h +++ /dev/null @@ -1,228 +0,0 @@ -/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __FMAINTRIN_H -#define __FMAINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma"))) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C) -{ - return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C) -{ - return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C) -{ - return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C) -{ - return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __FMAINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/fxsrintrin.h b/External/CastXML/share/castxml/clang/include/fxsrintrin.h deleted file mode 100644 index 2b3549c05..000000000 --- a/External/CastXML/share/castxml/clang/include/fxsrintrin.h +++ /dev/null @@ -1,55 +0,0 @@ -/*===---- fxsrintrin.h - FXSR intrinsic ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __FXSRINTRIN_H -#define __FXSRINTRIN_H - -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) - -static __inline__ void __DEFAULT_FN_ATTRS -_fxsave(void *__p) { - return __builtin_ia32_fxsave(__p); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_fxsave64(void *__p) { - return __builtin_ia32_fxsave64(__p); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_fxrstor(void *__p) { - return __builtin_ia32_fxrstor(__p); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_fxrstor64(void *__p) { - return __builtin_ia32_fxrstor64(__p); -} - -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/htmintrin.h b/External/CastXML/share/castxml/clang/include/htmintrin.h deleted file mode 100644 index 0088c7cca..000000000 --- a/External/CastXML/share/castxml/clang/include/htmintrin.h +++ /dev/null @@ -1,226 +0,0 @@ -/*===---- htmintrin.h - Standard header for PowerPC HTM ---------------===*\ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __HTMINTRIN_H -#define __HTMINTRIN_H - -#ifndef __HTM__ -#error "HTM instruction set not enabled" -#endif - -#ifdef __powerpc__ - -#include - -typedef uint64_t texasr_t; -typedef uint32_t texasru_t; -typedef uint32_t texasrl_t; -typedef uintptr_t tfiar_t; -typedef uintptr_t tfhar_t; - -#define _HTM_STATE(CR0) ((CR0 >> 1) & 0x3) -#define _HTM_NONTRANSACTIONAL 0x0 -#define _HTM_SUSPENDED 0x1 -#define _HTM_TRANSACTIONAL 0x2 - -#define _TEXASR_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \ - (((TEXASR) >> (63-(BITNUM))) & ((1<<(SIZE))-1)) -#define _TEXASRU_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \ - (((TEXASR) >> (31-(BITNUM))) & ((1<<(SIZE))-1)) - -#define _TEXASR_FAILURE_CODE(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 7, 8) -#define _TEXASRU_FAILURE_CODE(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 8) - -#define _TEXASR_FAILURE_PERSISTENT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 7, 1) -#define _TEXASRU_FAILURE_PERSISTENT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 1) - -#define _TEXASR_DISALLOWED(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 8, 1) -#define _TEXASRU_DISALLOWED(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 8, 1) - -#define _TEXASR_NESTING_OVERFLOW(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 9, 1) -#define _TEXASRU_NESTING_OVERFLOW(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 9, 1) - -#define _TEXASR_FOOTPRINT_OVERFLOW(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 10, 1) -#define _TEXASRU_FOOTPRINT_OVERFLOW(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 10, 1) - -#define _TEXASR_SELF_INDUCED_CONFLICT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 11, 1) -#define _TEXASRU_SELF_INDUCED_CONFLICT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 11, 1) - -#define _TEXASR_NON_TRANSACTIONAL_CONFLICT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 12, 1) -#define _TEXASRU_NON_TRANSACTIONAL_CONFLICT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 12, 1) - -#define _TEXASR_TRANSACTION_CONFLICT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 13, 1) -#define _TEXASRU_TRANSACTION_CONFLICT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 13, 1) - -#define _TEXASR_TRANSLATION_INVALIDATION_CONFLICT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 14, 1) -#define _TEXASRU_TRANSLATION_INVALIDATION_CONFLICT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 14, 1) - -#define _TEXASR_IMPLEMENTAION_SPECIFIC(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 15, 1) -#define _TEXASRU_IMPLEMENTAION_SPECIFIC(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 15, 1) - -#define _TEXASR_INSTRUCTION_FETCH_CONFLICT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 16, 1) -#define _TEXASRU_INSTRUCTION_FETCH_CONFLICT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 16, 1) - -#define _TEXASR_ABORT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 31, 1) -#define _TEXASRU_ABORT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 31, 1) - - -#define _TEXASR_SUSPENDED(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 32, 1) - -#define _TEXASR_PRIVILEGE(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 35, 2) - -#define _TEXASR_FAILURE_SUMMARY(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 36, 1) - -#define _TEXASR_TFIAR_EXACT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 37, 1) - -#define _TEXASR_ROT(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 38, 1) - -#define _TEXASR_TRANSACTION_LEVEL(TEXASR) \ - _TEXASR_EXTRACT_BITS(TEXASR, 63, 12) - -#endif /* __powerpc */ - -#ifdef __s390__ - -/* Condition codes generated by tbegin */ -#define _HTM_TBEGIN_STARTED 0 -#define _HTM_TBEGIN_INDETERMINATE 1 -#define _HTM_TBEGIN_TRANSIENT 2 -#define _HTM_TBEGIN_PERSISTENT 3 - -/* The abort codes below this threshold are reserved for machine use. */ -#define _HTM_FIRST_USER_ABORT_CODE 256 - -/* The transaction diagnostic block is it is defined in the Principles - of Operation chapter 5-91. */ - -struct __htm_tdb { - unsigned char format; /* 0 */ - unsigned char flags; - unsigned char reserved1[4]; - unsigned short nesting_depth; - unsigned long long abort_code; /* 8 */ - unsigned long long conflict_token; /* 16 */ - unsigned long long atia; /* 24 */ - unsigned char eaid; /* 32 */ - unsigned char dxc; - unsigned char reserved2[2]; - unsigned int program_int_id; - unsigned long long exception_id; /* 40 */ - unsigned long long bea; /* 48 */ - unsigned char reserved3[72]; /* 56 */ - unsigned long long gprs[16]; /* 128 */ -} __attribute__((__packed__, __aligned__ (8))); - - -/* Helper intrinsics to retry tbegin in case of transient failure. */ - -static __inline int __attribute__((__always_inline__, __nodebug__)) -__builtin_tbegin_retry_null (int retry) -{ - int cc, i = 0; - - while ((cc = __builtin_tbegin(0)) == _HTM_TBEGIN_TRANSIENT - && i++ < retry) - __builtin_tx_assist(i); - - return cc; -} - -static __inline int __attribute__((__always_inline__, __nodebug__)) -__builtin_tbegin_retry_tdb (void *tdb, int retry) -{ - int cc, i = 0; - - while ((cc = __builtin_tbegin(tdb)) == _HTM_TBEGIN_TRANSIENT - && i++ < retry) - __builtin_tx_assist(i); - - return cc; -} - -#define __builtin_tbegin_retry(tdb, retry) \ - (__builtin_constant_p(tdb == 0) && tdb == 0 ? \ - __builtin_tbegin_retry_null(retry) : \ - __builtin_tbegin_retry_tdb(tdb, retry)) - -static __inline int __attribute__((__always_inline__, __nodebug__)) -__builtin_tbegin_retry_nofloat_null (int retry) -{ - int cc, i = 0; - - while ((cc = __builtin_tbegin_nofloat(0)) == _HTM_TBEGIN_TRANSIENT - && i++ < retry) - __builtin_tx_assist(i); - - return cc; -} - -static __inline int __attribute__((__always_inline__, __nodebug__)) -__builtin_tbegin_retry_nofloat_tdb (void *tdb, int retry) -{ - int cc, i = 0; - - while ((cc = __builtin_tbegin_nofloat(tdb)) == _HTM_TBEGIN_TRANSIENT - && i++ < retry) - __builtin_tx_assist(i); - - return cc; -} - -#define __builtin_tbegin_retry_nofloat(tdb, retry) \ - (__builtin_constant_p(tdb == 0) && tdb == 0 ? \ - __builtin_tbegin_retry_nofloat_null(retry) : \ - __builtin_tbegin_retry_nofloat_tdb(tdb, retry)) - -#endif /* __s390__ */ - -#endif /* __HTMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/htmxlintrin.h b/External/CastXML/share/castxml/clang/include/htmxlintrin.h deleted file mode 100644 index 30f524d5d..000000000 --- a/External/CastXML/share/castxml/clang/include/htmxlintrin.h +++ /dev/null @@ -1,363 +0,0 @@ -/*===---- htmxlintrin.h - XL compiler HTM execution intrinsics-------------===*\ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __HTMXLINTRIN_H -#define __HTMXLINTRIN_H - -#ifndef __HTM__ -#error "HTM instruction set not enabled" -#endif - -#include - -#ifdef __powerpc__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define _TEXASR_PTR(TM_BUF) \ - ((texasr_t *)((TM_BUF)+0)) -#define _TEXASRU_PTR(TM_BUF) \ - ((texasru_t *)((TM_BUF)+0)) -#define _TEXASRL_PTR(TM_BUF) \ - ((texasrl_t *)((TM_BUF)+4)) -#define _TFIAR_PTR(TM_BUF) \ - ((tfiar_t *)((TM_BUF)+8)) - -typedef char TM_buff_type[16]; - -/* This macro can be used to determine whether a transaction was successfully - started from the __TM_begin() and __TM_simple_begin() intrinsic functions - below. */ -#define _HTM_TBEGIN_STARTED 1 - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_simple_begin (void) -{ - if (__builtin_expect (__builtin_tbegin (0), 1)) - return _HTM_TBEGIN_STARTED; - return 0; -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_begin (void* const TM_buff) -{ - *_TEXASRL_PTR (TM_buff) = 0; - if (__builtin_expect (__builtin_tbegin (0), 1)) - return _HTM_TBEGIN_STARTED; -#ifdef __powerpc64__ - *_TEXASR_PTR (TM_buff) = __builtin_get_texasr (); -#else - *_TEXASRU_PTR (TM_buff) = __builtin_get_texasru (); - *_TEXASRL_PTR (TM_buff) = __builtin_get_texasr (); -#endif - *_TFIAR_PTR (TM_buff) = __builtin_get_tfiar (); - return 0; -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_end (void) -{ - if (__builtin_expect (__builtin_tend (0), 1)) - return 1; - return 0; -} - -extern __inline void -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_abort (void) -{ - __builtin_tabort (0); -} - -extern __inline void -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_named_abort (unsigned char const code) -{ - __builtin_tabort (code); -} - -extern __inline void -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_resume (void) -{ - __builtin_tresume (); -} - -extern __inline void -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_suspend (void) -{ - __builtin_tsuspend (); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_user_abort (void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - return _TEXASRU_ABORT (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_named_user_abort (void* const TM_buff, unsigned char *code) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - - *code = _TEXASRU_FAILURE_CODE (texasru); - return _TEXASRU_ABORT (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_illegal (void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - return _TEXASRU_DISALLOWED (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_footprint_exceeded (void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - return _TEXASRU_FOOTPRINT_OVERFLOW (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_nesting_depth (void* const TM_buff) -{ - texasrl_t texasrl; - - if (_HTM_STATE (__builtin_ttest ()) == _HTM_NONTRANSACTIONAL) - { - texasrl = *_TEXASRL_PTR (TM_buff); - if (!_TEXASR_FAILURE_SUMMARY (texasrl)) - texasrl = 0; - } - else - texasrl = (texasrl_t) __builtin_get_texasr (); - - return _TEXASR_TRANSACTION_LEVEL (texasrl); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_nested_too_deep(void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - return _TEXASRU_NESTING_OVERFLOW (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_conflict(void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - /* Return TEXASR bits 11 (Self-Induced Conflict) through - 14 (Translation Invalidation Conflict). */ - return (_TEXASRU_EXTRACT_BITS (texasru, 14, 4)) ? 1 : 0; -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_is_failure_persistent(void* const TM_buff) -{ - texasru_t texasru = *_TEXASRU_PTR (TM_buff); - return _TEXASRU_FAILURE_PERSISTENT (texasru); -} - -extern __inline long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_failure_address(void* const TM_buff) -{ - return *_TFIAR_PTR (TM_buff); -} - -extern __inline long long -__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) -__TM_failure_code(void* const TM_buff) -{ - return *_TEXASR_PTR (TM_buff); -} - -#ifdef __cplusplus -} -#endif - -#endif /* __powerpc__ */ - -#ifdef __s390__ - -#include - -/* These intrinsics are being made available for compatibility with - the IBM XL compiler. For documentation please see the "z/OS XL - C/C++ Programming Guide" publically available on the web. */ - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_simple_begin () -{ - return __builtin_tbegin_nofloat (0); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_begin (void* const tdb) -{ - return __builtin_tbegin_nofloat (tdb); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_end () -{ - return __builtin_tend (); -} - -static __inline void __attribute__((__always_inline__)) -__TM_abort () -{ - return __builtin_tabort (_HTM_FIRST_USER_ABORT_CODE); -} - -static __inline void __attribute__((__always_inline__, __nodebug__)) -__TM_named_abort (unsigned char const code) -{ - return __builtin_tabort ((int)_HTM_FIRST_USER_ABORT_CODE + code); -} - -static __inline void __attribute__((__always_inline__, __nodebug__)) -__TM_non_transactional_store (void* const addr, long long const value) -{ - __builtin_non_tx_store ((uint64_t*)addr, (uint64_t)value); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_nesting_depth (void* const tdb_ptr) -{ - int depth = __builtin_tx_nesting_depth (); - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - if (depth != 0) - return depth; - - if (tdb->format != 1) - return 0; - return tdb->nesting_depth; -} - -/* Transaction failure diagnostics */ - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_user_abort (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - if (tdb->format != 1) - return 0; - - return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_named_user_abort (void* const tdb_ptr, unsigned char* code) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - if (tdb->format != 1) - return 0; - - if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE) - { - *code = tdb->abort_code - _HTM_FIRST_USER_ABORT_CODE; - return 1; - } - return 0; -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_illegal (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - return (tdb->format == 1 - && (tdb->abort_code == 4 /* unfiltered program interruption */ - || tdb->abort_code == 11 /* restricted instruction */)); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_footprint_exceeded (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - return (tdb->format == 1 - && (tdb->abort_code == 7 /* fetch overflow */ - || tdb->abort_code == 8 /* store overflow */)); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_nested_too_deep (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */ -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_conflict (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - return (tdb->format == 1 - && (tdb->abort_code == 9 /* fetch conflict */ - || tdb->abort_code == 10 /* store conflict */)); -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_is_failure_persistent (long const result) -{ - return result == _HTM_TBEGIN_PERSISTENT; -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_failure_address (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - return tdb->atia; -} - -static __inline long __attribute__((__always_inline__, __nodebug__)) -__TM_failure_code (void* const tdb_ptr) -{ - struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr; - - return tdb->abort_code; -} - -#endif /* __s390__ */ - -#endif /* __HTMXLINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/ia32intrin.h b/External/CastXML/share/castxml/clang/include/ia32intrin.h deleted file mode 100644 index 5adf3f1f5..000000000 --- a/External/CastXML/share/castxml/clang/include/ia32intrin.h +++ /dev/null @@ -1,101 +0,0 @@ -/* ===-------- ia32intrin.h ---------------------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __IA32INTRIN_H -#define __IA32INTRIN_H - -#ifdef __x86_64__ -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) -__readeflags(void) -{ - unsigned long long __res = 0; - __asm__ __volatile__ ("pushf\n\t" - "popq %0\n" - :"=r"(__res) - : - : - ); - return __res; -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -__writeeflags(unsigned long long __f) -{ - __asm__ __volatile__ ("pushq %0\n\t" - "popf\n" - : - :"r"(__f) - :"flags" - ); -} - -#else /* !__x86_64__ */ -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) -__readeflags(void) -{ - unsigned int __res = 0; - __asm__ __volatile__ ("pushf\n\t" - "popl %0\n" - :"=r"(__res) - : - : - ); - return __res; -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -__writeeflags(unsigned int __f) -{ - __asm__ __volatile__ ("pushl %0\n\t" - "popf\n" - : - :"r"(__f) - :"flags" - ); -} -#endif /* !__x86_64__ */ - -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) -__rdpmc(int __A) { - return __builtin_ia32_rdpmc(__A); -} - -/* __rdtsc */ -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) -__rdtsc(void) { - return __builtin_ia32_rdtsc(); -} - -/* __rdtscp */ -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) -__rdtscp(unsigned int *__A) { - return __builtin_ia32_rdtscp(__A); -} - -#define _rdtsc() __rdtsc() - -#endif /* __IA32INTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/immintrin.h b/External/CastXML/share/castxml/clang/include/immintrin.h deleted file mode 100644 index 604bc8ca5..000000000 --- a/External/CastXML/share/castxml/clang/include/immintrin.h +++ /dev/null @@ -1,151 +0,0 @@ -/*===---- immintrin.h - Intel intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#define __IMMINTRIN_H - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) -_rdrand16_step(unsigned short *__p) -{ - return __builtin_ia32_rdrand16_step(__p); -} - -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) -_rdrand32_step(unsigned int *__p) -{ - return __builtin_ia32_rdrand32_step(__p); -} - -#ifdef __x86_64__ -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) -_rdrand64_step(unsigned long long *__p) -{ - return __builtin_ia32_rdrand64_step(__p); -} -#endif - -#ifdef __x86_64__ -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_readfsbase_u32(void) -{ - return __builtin_ia32_rdfsbase32(); -} - -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_readfsbase_u64(void) -{ - return __builtin_ia32_rdfsbase64(); -} - -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_readgsbase_u32(void) -{ - return __builtin_ia32_rdgsbase32(); -} - -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_readgsbase_u64(void) -{ - return __builtin_ia32_rdgsbase64(); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_writefsbase_u32(unsigned int __V) -{ - return __builtin_ia32_wrfsbase32(__V); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_writefsbase_u64(unsigned long long __V) -{ - return __builtin_ia32_wrfsbase64(__V); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_writegsbase_u32(unsigned int __V) -{ - return __builtin_ia32_wrgsbase32(__V); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) -_writegsbase_u64(unsigned long long __V) -{ - return __builtin_ia32_wrgsbase64(__V); -} -#endif - -#include - -#include - -#include - -#include - -/* Some intrinsics inside adxintrin.h are available only on processors with ADX, - * whereas others are also available at all times. */ -#include - -#endif /* __IMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/inttypes.h b/External/CastXML/share/castxml/clang/include/inttypes.h deleted file mode 100644 index 3d59d141d..000000000 --- a/External/CastXML/share/castxml/clang/include/inttypes.h +++ /dev/null @@ -1,102 +0,0 @@ -/*===---- inttypes.h - Standard header for integer printf macros ----------===*\ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __CLANG_INTTYPES_H -#define __CLANG_INTTYPES_H - -#include_next - -#if defined(_MSC_VER) && _MSC_VER < 1900 -/* MSVC headers define int32_t as int, but PRIx32 as "lx" instead of "x". - * This triggers format warnings, so fix it up here. */ -#undef PRId32 -#undef PRIdLEAST32 -#undef PRIdFAST32 -#undef PRIi32 -#undef PRIiLEAST32 -#undef PRIiFAST32 -#undef PRIo32 -#undef PRIoLEAST32 -#undef PRIoFAST32 -#undef PRIu32 -#undef PRIuLEAST32 -#undef PRIuFAST32 -#undef PRIx32 -#undef PRIxLEAST32 -#undef PRIxFAST32 -#undef PRIX32 -#undef PRIXLEAST32 -#undef PRIXFAST32 - -#undef SCNd32 -#undef SCNdLEAST32 -#undef SCNdFAST32 -#undef SCNi32 -#undef SCNiLEAST32 -#undef SCNiFAST32 -#undef SCNo32 -#undef SCNoLEAST32 -#undef SCNoFAST32 -#undef SCNu32 -#undef SCNuLEAST32 -#undef SCNuFAST32 -#undef SCNx32 -#undef SCNxLEAST32 -#undef SCNxFAST32 - -#define PRId32 "d" -#define PRIdLEAST32 "d" -#define PRIdFAST32 "d" -#define PRIi32 "i" -#define PRIiLEAST32 "i" -#define PRIiFAST32 "i" -#define PRIo32 "o" -#define PRIoLEAST32 "o" -#define PRIoFAST32 "o" -#define PRIu32 "u" -#define PRIuLEAST32 "u" -#define PRIuFAST32 "u" -#define PRIx32 "x" -#define PRIxLEAST32 "x" -#define PRIxFAST32 "x" -#define PRIX32 "X" -#define PRIXLEAST32 "X" -#define PRIXFAST32 "X" - -#define SCNd32 "d" -#define SCNdLEAST32 "d" -#define SCNdFAST32 "d" -#define SCNi32 "i" -#define SCNiLEAST32 "i" -#define SCNiFAST32 "i" -#define SCNo32 "o" -#define SCNoLEAST32 "o" -#define SCNoFAST32 "o" -#define SCNu32 "u" -#define SCNuLEAST32 "u" -#define SCNuFAST32 "u" -#define SCNx32 "x" -#define SCNxLEAST32 "x" -#define SCNxFAST32 "x" -#endif - -#endif /* __CLANG_INTTYPES_H */ diff --git a/External/CastXML/share/castxml/clang/include/iso646.h b/External/CastXML/share/castxml/clang/include/iso646.h deleted file mode 100644 index dca13c5ba..000000000 --- a/External/CastXML/share/castxml/clang/include/iso646.h +++ /dev/null @@ -1,43 +0,0 @@ -/*===---- iso646.h - Standard header for alternate spellings of operators---=== - * - * Copyright (c) 2008 Eli Friedman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __ISO646_H -#define __ISO646_H - -#ifndef __cplusplus -#define and && -#define and_eq &= -#define bitand & -#define bitor | -#define compl ~ -#define not ! -#define not_eq != -#define or || -#define or_eq |= -#define xor ^ -#define xor_eq ^= -#endif - -#endif /* __ISO646_H */ diff --git a/External/CastXML/share/castxml/clang/include/limits.h b/External/CastXML/share/castxml/clang/include/limits.h deleted file mode 100644 index f04187ced..000000000 --- a/External/CastXML/share/castxml/clang/include/limits.h +++ /dev/null @@ -1,118 +0,0 @@ -/*===---- limits.h - Standard header for integer sizes --------------------===*\ - * - * Copyright (c) 2009 Chris Lattner - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __CLANG_LIMITS_H -#define __CLANG_LIMITS_H - -/* The system's limits.h may, in turn, try to #include_next GCC's limits.h. - Avert this #include_next madness. */ -#if defined __GNUC__ && !defined _GCC_LIMITS_H_ -#define _GCC_LIMITS_H_ -#endif - -/* System headers include a number of constants from POSIX in . - Include it if we're hosted. */ -#if __STDC_HOSTED__ && __has_include_next() -#include_next -#endif - -/* Many system headers try to "help us out" by defining these. No really, we - know how big each datatype is. */ -#undef SCHAR_MIN -#undef SCHAR_MAX -#undef UCHAR_MAX -#undef SHRT_MIN -#undef SHRT_MAX -#undef USHRT_MAX -#undef INT_MIN -#undef INT_MAX -#undef UINT_MAX -#undef LONG_MIN -#undef LONG_MAX -#undef ULONG_MAX - -#undef CHAR_BIT -#undef CHAR_MIN -#undef CHAR_MAX - -/* C90/99 5.2.4.2.1 */ -#define SCHAR_MAX __SCHAR_MAX__ -#define SHRT_MAX __SHRT_MAX__ -#define INT_MAX __INT_MAX__ -#define LONG_MAX __LONG_MAX__ - -#define SCHAR_MIN (-__SCHAR_MAX__-1) -#define SHRT_MIN (-__SHRT_MAX__ -1) -#define INT_MIN (-__INT_MAX__ -1) -#define LONG_MIN (-__LONG_MAX__ -1L) - -#define UCHAR_MAX (__SCHAR_MAX__*2 +1) -#define USHRT_MAX (__SHRT_MAX__ *2 +1) -#define UINT_MAX (__INT_MAX__ *2U +1U) -#define ULONG_MAX (__LONG_MAX__ *2UL+1UL) - -#ifndef MB_LEN_MAX -#define MB_LEN_MAX 1 -#endif - -#define CHAR_BIT __CHAR_BIT__ - -#ifdef __CHAR_UNSIGNED__ /* -funsigned-char */ -#define CHAR_MIN 0 -#define CHAR_MAX UCHAR_MAX -#else -#define CHAR_MIN SCHAR_MIN -#define CHAR_MAX __SCHAR_MAX__ -#endif - -/* C99 5.2.4.2.1: Added long long. - C++11 18.3.3.2: same contents as the Standard C Library header . - */ -#if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L - -#undef LLONG_MIN -#undef LLONG_MAX -#undef ULLONG_MAX - -#define LLONG_MAX __LONG_LONG_MAX__ -#define LLONG_MIN (-__LONG_LONG_MAX__-1LL) -#define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) -#endif - -/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. It's too bad - that we don't have something like #pragma poison that could be used to - deprecate a macro - the code should just use LLONG_MAX and friends. - */ -#if defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__) - -#undef LONG_LONG_MIN -#undef LONG_LONG_MAX -#undef ULONG_LONG_MAX - -#define LONG_LONG_MAX __LONG_LONG_MAX__ -#define LONG_LONG_MIN (-__LONG_LONG_MAX__-1LL) -#define ULONG_LONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) -#endif - -#endif /* __CLANG_LIMITS_H */ diff --git a/External/CastXML/share/castxml/clang/include/lzcntintrin.h b/External/CastXML/share/castxml/clang/include/lzcntintrin.h deleted file mode 100644 index 4c00e42ac..000000000 --- a/External/CastXML/share/castxml/clang/include/lzcntintrin.h +++ /dev/null @@ -1,68 +0,0 @@ -/*===---- lzcntintrin.h - LZCNT intrinsics ---------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __LZCNTINTRIN_H -#define __LZCNTINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("lzcnt"))) - -static __inline__ unsigned short __DEFAULT_FN_ATTRS -__lzcnt16(unsigned short __X) -{ - return __X ? __builtin_clzs(__X) : 16; -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__lzcnt32(unsigned int __X) -{ - return __X ? __builtin_clz(__X) : 32; -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_lzcnt_u32(unsigned int __X) -{ - return __X ? __builtin_clz(__X) : 32; -} - -#ifdef __x86_64__ -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__lzcnt64(unsigned long long __X) -{ - return __X ? __builtin_clzll(__X) : 64; -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_lzcnt_u64(unsigned long long __X) -{ - return __X ? __builtin_clzll(__X) : 64; -} -#endif - -#undef __DEFAULT_FN_ATTRS - -#endif /* __LZCNTINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/mm3dnow.h b/External/CastXML/share/castxml/clang/include/mm3dnow.h deleted file mode 100644 index 3218df827..000000000 --- a/External/CastXML/share/castxml/clang/include/mm3dnow.h +++ /dev/null @@ -1,167 +0,0 @@ -/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef _MM3DNOW_H_INCLUDED -#define _MM3DNOW_H_INCLUDED - -#include -#include - -typedef float __v2sf __attribute__((__vector_size__(8))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"))) - -static __inline__ void __DEFAULT_FN_ATTRS -_m_femms() { - __builtin_ia32_femms(); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pavgusb(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pf2id(__m64 __m) { - return (__m64)__builtin_ia32_pf2id((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfadd(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpeq(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpge(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpgt(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmax(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmin(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmul(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcp(__m64 __m) { - return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcpit1(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcpit2(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrsqrt(__m64 __m) { - return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfsub(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfsubr(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pi2fd(__m64 __m) { - return (__m64)__builtin_ia32_pi2fd((__v2si)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pmulhrw(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pf2iw(__m64 __m) { - return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfnacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfpnacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pi2fw(__m64 __m) { - return (__m64)__builtin_ia32_pi2fw((__v2si)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pswapdsf(__m64 __m) { - return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pswapdsi(__m64 __m) { - return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); -} - -#undef __DEFAULT_FN_ATTRS - -#endif diff --git a/External/CastXML/share/castxml/clang/include/mm_malloc.h b/External/CastXML/share/castxml/clang/include/mm_malloc.h deleted file mode 100644 index 305afd31a..000000000 --- a/External/CastXML/share/castxml/clang/include/mm_malloc.h +++ /dev/null @@ -1,75 +0,0 @@ -/*===---- mm_malloc.h - Allocating and Freeing Aligned Memory Blocks -------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __MM_MALLOC_H -#define __MM_MALLOC_H - -#include - -#ifdef _WIN32 -#include -#else -#ifndef __cplusplus -extern int posix_memalign(void **__memptr, size_t __alignment, size_t __size); -#else -// Some systems (e.g. those with GNU libc) declare posix_memalign with an -// exception specifier. Via an "egregious workaround" in -// Sema::CheckEquivalentExceptionSpec, Clang accepts the following as a valid -// redeclaration of glibc's declaration. -extern "C" int posix_memalign(void **__memptr, size_t __alignment, size_t __size); -#endif -#endif - -#if !(defined(_WIN32) && defined(_mm_malloc)) -static __inline__ void *__attribute__((__always_inline__, __nodebug__, - __malloc__)) -_mm_malloc(size_t __size, size_t __align) -{ - if (__align == 1) { - return malloc(__size); - } - - if (!(__align & (__align - 1)) && __align < sizeof(void *)) - __align = sizeof(void *); - - void *__mallocedMemory; -#if defined(__MINGW32__) - __mallocedMemory = __mingw_aligned_malloc(__size, __align); -#elif defined(_WIN32) - __mallocedMemory = _aligned_malloc(__size, __align); -#else - if (posix_memalign(&__mallocedMemory, __align, __size)) - return 0; -#endif - - return __mallocedMemory; -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -_mm_free(void *__p) -{ - free(__p); -} -#endif - -#endif /* __MM_MALLOC_H */ diff --git a/External/CastXML/share/castxml/clang/include/mmintrin.h b/External/CastXML/share/castxml/clang/include/mmintrin.h deleted file mode 100644 index 484b499dd..000000000 --- a/External/CastXML/share/castxml/clang/include/mmintrin.h +++ /dev/null @@ -1,501 +0,0 @@ -/*===---- mmintrin.h - MMX intrinsics --------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __MMINTRIN_H -#define __MMINTRIN_H - -typedef long long __m64 __attribute__((__vector_size__(8))); - -typedef int __v2si __attribute__((__vector_size__(8))); -typedef short __v4hi __attribute__((__vector_size__(8))); -typedef char __v8qi __attribute__((__vector_size__(8))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mmx"))) - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_empty(void) -{ - __builtin_ia32_emms(); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtsi32_si64(int __i) -{ - return (__m64)__builtin_ia32_vec_init_v2si(__i, 0); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvtsi64_si32(__m64 __m) -{ - return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtsi64_m64(long long __i) -{ - return (__m64)__i; -} - -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvtm64_si64(__m64 __m) -{ - return (long long)__m; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_packs_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_packs_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_packs_pu16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpackhi_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpackhi_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpackhi_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpacklo_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpacklo_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_unpacklo_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_add_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_add_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_add_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_adds_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddsb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_adds_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddsw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_adds_pu8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddusb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_adds_pu16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_paddusw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sub_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sub_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sub_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubd((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_subs_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubsb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_subs_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubsw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_subs_pu8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubusb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_subs_pu16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_psubusw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_madd_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pmaddwd((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_mulhi_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pmulhw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_mullo_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pmullw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sll_pi16(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psllw((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_slli_pi16(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psllwi((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sll_pi32(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_pslld((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_slli_pi32(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_pslldi((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sll_si64(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psllq(__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_slli_si64(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psllqi(__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sra_pi16(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psraw((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srai_pi16(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psrawi((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sra_pi32(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psrad((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srai_pi32(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psradi((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srl_pi16(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psrlw((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srli_pi16(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psrlwi((__v4hi)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srl_pi32(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psrld((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srli_pi32(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psrldi((__v2si)__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srl_si64(__m64 __m, __m64 __count) -{ - return (__m64)__builtin_ia32_psrlq(__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_srli_si64(__m64 __m, int __count) -{ - return (__m64)__builtin_ia32_psrlqi(__m, __count); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_and_si64(__m64 __m1, __m64 __m2) -{ - return __builtin_ia32_pand(__m1, __m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_andnot_si64(__m64 __m1, __m64 __m2) -{ - return __builtin_ia32_pandn(__m1, __m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_or_si64(__m64 __m1, __m64 __m2) -{ - return __builtin_ia32_por(__m1, __m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_xor_si64(__m64 __m1, __m64 __m2) -{ - return __builtin_ia32_pxor(__m1, __m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpeq_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpeqb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpeq_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpeqw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpeq_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpeqd((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpgt_pi8(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpgtb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpgt_pi16(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpgtw((__v4hi)__m1, (__v4hi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cmpgt_pi32(__m64 __m1, __m64 __m2) -{ - return (__m64)__builtin_ia32_pcmpgtd((__v2si)__m1, (__v2si)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_setzero_si64(void) -{ - return (__m64){ 0LL }; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set_pi32(int __i1, int __i0) -{ - return (__m64)__builtin_ia32_vec_init_v2si(__i0, __i1); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set_pi16(short __s3, short __s2, short __s1, short __s0) -{ - return (__m64)__builtin_ia32_vec_init_v4hi(__s0, __s1, __s2, __s3); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set_pi8(char __b7, char __b6, char __b5, char __b4, char __b3, char __b2, - char __b1, char __b0) -{ - return (__m64)__builtin_ia32_vec_init_v8qi(__b0, __b1, __b2, __b3, - __b4, __b5, __b6, __b7); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set1_pi32(int __i) -{ - return _mm_set_pi32(__i, __i); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set1_pi16(short __w) -{ - return _mm_set_pi16(__w, __w, __w, __w); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_set1_pi8(char __b) -{ - return _mm_set_pi8(__b, __b, __b, __b, __b, __b, __b, __b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_setr_pi32(int __i0, int __i1) -{ - return _mm_set_pi32(__i1, __i0); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_setr_pi16(short __w0, short __w1, short __w2, short __w3) -{ - return _mm_set_pi16(__w3, __w2, __w1, __w0); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_setr_pi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5, - char __b6, char __b7) -{ - return _mm_set_pi8(__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0); -} - -#undef __DEFAULT_FN_ATTRS - -/* Aliases for compatibility. */ -#define _m_empty _mm_empty -#define _m_from_int _mm_cvtsi32_si64 -#define _m_to_int _mm_cvtsi64_si32 -#define _m_packsswb _mm_packs_pi16 -#define _m_packssdw _mm_packs_pi32 -#define _m_packuswb _mm_packs_pu16 -#define _m_punpckhbw _mm_unpackhi_pi8 -#define _m_punpckhwd _mm_unpackhi_pi16 -#define _m_punpckhdq _mm_unpackhi_pi32 -#define _m_punpcklbw _mm_unpacklo_pi8 -#define _m_punpcklwd _mm_unpacklo_pi16 -#define _m_punpckldq _mm_unpacklo_pi32 -#define _m_paddb _mm_add_pi8 -#define _m_paddw _mm_add_pi16 -#define _m_paddd _mm_add_pi32 -#define _m_paddsb _mm_adds_pi8 -#define _m_paddsw _mm_adds_pi16 -#define _m_paddusb _mm_adds_pu8 -#define _m_paddusw _mm_adds_pu16 -#define _m_psubb _mm_sub_pi8 -#define _m_psubw _mm_sub_pi16 -#define _m_psubd _mm_sub_pi32 -#define _m_psubsb _mm_subs_pi8 -#define _m_psubsw _mm_subs_pi16 -#define _m_psubusb _mm_subs_pu8 -#define _m_psubusw _mm_subs_pu16 -#define _m_pmaddwd _mm_madd_pi16 -#define _m_pmulhw _mm_mulhi_pi16 -#define _m_pmullw _mm_mullo_pi16 -#define _m_psllw _mm_sll_pi16 -#define _m_psllwi _mm_slli_pi16 -#define _m_pslld _mm_sll_pi32 -#define _m_pslldi _mm_slli_pi32 -#define _m_psllq _mm_sll_si64 -#define _m_psllqi _mm_slli_si64 -#define _m_psraw _mm_sra_pi16 -#define _m_psrawi _mm_srai_pi16 -#define _m_psrad _mm_sra_pi32 -#define _m_psradi _mm_srai_pi32 -#define _m_psrlw _mm_srl_pi16 -#define _m_psrlwi _mm_srli_pi16 -#define _m_psrld _mm_srl_pi32 -#define _m_psrldi _mm_srli_pi32 -#define _m_psrlq _mm_srl_si64 -#define _m_psrlqi _mm_srli_si64 -#define _m_pand _mm_and_si64 -#define _m_pandn _mm_andnot_si64 -#define _m_por _mm_or_si64 -#define _m_pxor _mm_xor_si64 -#define _m_pcmpeqb _mm_cmpeq_pi8 -#define _m_pcmpeqw _mm_cmpeq_pi16 -#define _m_pcmpeqd _mm_cmpeq_pi32 -#define _m_pcmpgtb _mm_cmpgt_pi8 -#define _m_pcmpgtw _mm_cmpgt_pi16 -#define _m_pcmpgtd _mm_cmpgt_pi32 - -#endif /* __MMINTRIN_H */ - diff --git a/External/CastXML/share/castxml/clang/include/module.modulemap b/External/CastXML/share/castxml/clang/include/module.modulemap deleted file mode 100644 index b147e891d..000000000 --- a/External/CastXML/share/castxml/clang/include/module.modulemap +++ /dev/null @@ -1,171 +0,0 @@ -module _Builtin_intrinsics [system] [extern_c] { - explicit module altivec { - requires altivec - header "altivec.h" - } - - explicit module arm { - requires arm - - explicit module acle { - header "arm_acle.h" - export * - } - - explicit module neon { - requires neon - header "arm_neon.h" - export * - } - } - - explicit module intel { - requires x86 - export * - - header "immintrin.h" - header "x86intrin.h" - - explicit module mm_malloc { - header "mm_malloc.h" - export * // note: for dependency - } - - explicit module cpuid { - header "cpuid.h" - } - - explicit module mmx { - header "mmintrin.h" - } - - explicit module f16c { - header "f16cintrin.h" - } - - explicit module sse { - export mmx - export sse2 // note: for hackish dependency - header "xmmintrin.h" - } - - explicit module sse2 { - export sse - header "emmintrin.h" - } - - explicit module sse3 { - export sse2 - header "pmmintrin.h" - } - - explicit module ssse3 { - export sse3 - header "tmmintrin.h" - } - - explicit module sse4_1 { - export ssse3 - header "smmintrin.h" - } - - explicit module sse4_2 { - export sse4_1 - header "nmmintrin.h" - } - - explicit module sse4a { - export sse3 - header "ammintrin.h" - } - - explicit module avx { - export sse4_2 - header "avxintrin.h" - } - - explicit module avx2 { - export avx - header "avx2intrin.h" - } - - explicit module avx512f { - export avx2 - header "avx512fintrin.h" - } - - explicit module avx512er { - header "avx512erintrin.h" - } - - explicit module bmi { - header "bmiintrin.h" - } - - explicit module bmi2 { - header "bmi2intrin.h" - } - - explicit module fma { - header "fmaintrin.h" - } - - explicit module fma4 { - export sse3 - header "fma4intrin.h" - } - - explicit module lzcnt { - header "lzcntintrin.h" - } - - explicit module popcnt { - header "popcntintrin.h" - } - - explicit module mm3dnow { - header "mm3dnow.h" - } - - explicit module xop { - export fma4 - header "xopintrin.h" - } - - explicit module aes_pclmul { - header "wmmintrin.h" - export aes - export pclmul - } - - explicit module aes { - header "__wmmintrin_aes.h" - } - - explicit module pclmul { - header "__wmmintrin_pclmul.h" - } - } - - explicit module systemz { - requires systemz - export * - - header "s390intrin.h" - - explicit module htm { - requires htm - header "htmintrin.h" - header "htmxlintrin.h" - } - - explicit module zvector { - requires zvector, vx - header "vecintrin.h" - } - } -} - -module _Builtin_stddef_max_align_t [system] [extern_c] { - header "__stddef_max_align_t.h" -} diff --git a/External/CastXML/share/castxml/clang/include/nmmintrin.h b/External/CastXML/share/castxml/clang/include/nmmintrin.h deleted file mode 100644 index 57fec1596..000000000 --- a/External/CastXML/share/castxml/clang/include/nmmintrin.h +++ /dev/null @@ -1,30 +0,0 @@ -/*===---- nmmintrin.h - SSE4 intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef _NMMINTRIN_H -#define _NMMINTRIN_H - -/* To match expectations of gcc we put the sse4.2 definitions into smmintrin.h, - just include it now then. */ -#include -#endif /* _NMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/pmmintrin.h b/External/CastXML/share/castxml/clang/include/pmmintrin.h deleted file mode 100644 index e888b6fb7..000000000 --- a/External/CastXML/share/castxml/clang/include/pmmintrin.h +++ /dev/null @@ -1,116 +0,0 @@ -/*===---- pmmintrin.h - SSE3 intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __PMMINTRIN_H -#define __PMMINTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse3"))) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_lddqu_si128(__m128i const *__p) -{ - return (__m128i)__builtin_ia32_lddqu((char const *)__p); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_addsub_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_addsubps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_hadd_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_haddps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_hsub_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_hsubps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_movehdup_ps(__m128 __a) -{ - return __builtin_shufflevector(__a, __a, 1, 1, 3, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_moveldup_ps(__m128 __a) -{ - return __builtin_shufflevector(__a, __a, 0, 0, 2, 2); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_addsub_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_addsubpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_hadd_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_haddpd(__a, __b); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_hsub_pd(__m128d __a, __m128d __b) -{ - return __builtin_ia32_hsubpd(__a, __b); -} - -#define _mm_loaddup_pd(dp) _mm_load1_pd(dp) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_movedup_pd(__m128d __a) -{ - return __builtin_shufflevector(__a, __a, 0, 0); -} - -#define _MM_DENORMALS_ZERO_ON (0x0040) -#define _MM_DENORMALS_ZERO_OFF (0x0000) - -#define _MM_DENORMALS_ZERO_MASK (0x0040) - -#define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK) -#define _MM_SET_DENORMALS_ZERO_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (x))) - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_monitor(void const *__p, unsigned __extensions, unsigned __hints) -{ - __builtin_ia32_monitor((void *)__p, __extensions, __hints); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_mwait(unsigned __extensions, unsigned __hints) -{ - __builtin_ia32_mwait(__extensions, __hints); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __PMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/popcntintrin.h b/External/CastXML/share/castxml/clang/include/popcntintrin.h deleted file mode 100644 index 29c074b61..000000000 --- a/External/CastXML/share/castxml/clang/include/popcntintrin.h +++ /dev/null @@ -1,46 +0,0 @@ -/*===---- popcntintrin.h - POPCNT intrinsics -------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef _POPCNTINTRIN_H -#define _POPCNTINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("popcnt"))) - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_popcnt_u32(unsigned int __A) -{ - return __builtin_popcount(__A); -} - -#ifdef __x86_64__ -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_popcnt_u64(unsigned long long __A) -{ - return __builtin_popcountll(__A); -} -#endif /* __x86_64__ */ - -#undef __DEFAULT_FN_ATTRS - -#endif /* _POPCNTINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/prfchwintrin.h b/External/CastXML/share/castxml/clang/include/prfchwintrin.h deleted file mode 100644 index ba0285751..000000000 --- a/External/CastXML/share/castxml/clang/include/prfchwintrin.h +++ /dev/null @@ -1,45 +0,0 @@ -/*===---- prfchwintrin.h - PREFETCHW intrinsic -----------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined(__X86INTRIN_H) && !defined(_MM3DNOW_H_INCLUDED) -#error "Never use directly; include or instead." -#endif - -#ifndef __PRFCHWINTRIN_H -#define __PRFCHWINTRIN_H - -#if defined(__PRFCHW__) || defined(__3dNOW__) -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -_m_prefetch(void *__P) -{ - __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); -} - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -_m_prefetchw(void *__P) -{ - __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */); -} -#endif - -#endif /* __PRFCHWINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/rdseedintrin.h b/External/CastXML/share/castxml/clang/include/rdseedintrin.h deleted file mode 100644 index 421f4ea48..000000000 --- a/External/CastXML/share/castxml/clang/include/rdseedintrin.h +++ /dev/null @@ -1,56 +0,0 @@ -/*===---- rdseedintrin.h - RDSEED intrinsics -------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __RDSEEDINTRIN_H -#define __RDSEEDINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rdseed"))) - -static __inline__ int __DEFAULT_FN_ATTRS -_rdseed16_step(unsigned short *__p) -{ - return __builtin_ia32_rdseed16_step(__p); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_rdseed32_step(unsigned int *__p) -{ - return __builtin_ia32_rdseed32_step(__p); -} - -#ifdef __x86_64__ -static __inline__ int __DEFAULT_FN_ATTRS -_rdseed64_step(unsigned long long *__p) -{ - return __builtin_ia32_rdseed64_step(__p); -} -#endif - -#undef __DEFAULT_FN_ATTRS - -#endif /* __RDSEEDINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/rtmintrin.h b/External/CastXML/share/castxml/clang/include/rtmintrin.h deleted file mode 100644 index e6a58d743..000000000 --- a/External/CastXML/share/castxml/clang/include/rtmintrin.h +++ /dev/null @@ -1,59 +0,0 @@ -/*===---- rtmintrin.h - RTM intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __RTMINTRIN_H -#define __RTMINTRIN_H - -#define _XBEGIN_STARTED (~0u) -#define _XABORT_EXPLICIT (1 << 0) -#define _XABORT_RETRY (1 << 1) -#define _XABORT_CONFLICT (1 << 2) -#define _XABORT_CAPACITY (1 << 3) -#define _XABORT_DEBUG (1 << 4) -#define _XABORT_NESTED (1 << 5) -#define _XABORT_CODE(x) (((x) >> 24) & 0xFF) - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rtm"))) - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_xbegin(void) -{ - return __builtin_ia32_xbegin(); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_xend(void) -{ - __builtin_ia32_xend(); -} - -#define _xabort(imm) __builtin_ia32_xabort((imm)) - -#undef __DEFAULT_FN_ATTRS - -#endif /* __RTMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/s390intrin.h b/External/CastXML/share/castxml/clang/include/s390intrin.h deleted file mode 100644 index d51274c07..000000000 --- a/External/CastXML/share/castxml/clang/include/s390intrin.h +++ /dev/null @@ -1,39 +0,0 @@ -/*===---- s390intrin.h - SystemZ intrinsics --------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __S390INTRIN_H -#define __S390INTRIN_H - -#ifndef __s390__ -#error " is for s390 only" -#endif - -#ifdef __HTM__ -#include -#endif - -#ifdef __VEC__ -#include -#endif - -#endif /* __S390INTRIN_H*/ diff --git a/External/CastXML/share/castxml/clang/include/shaintrin.h b/External/CastXML/share/castxml/clang/include/shaintrin.h deleted file mode 100644 index 8602d0249..000000000 --- a/External/CastXML/share/castxml/clang/include/shaintrin.h +++ /dev/null @@ -1,75 +0,0 @@ -/*===---- shaintrin.h - SHA intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __SHAINTRIN_H -#define __SHAINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sha"))) - -#define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \ - __builtin_ia32_sha1rnds4((V1), (V2), (M)); }) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha1nexte_epu32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_sha1nexte((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha1msg1_epu32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_sha1msg1((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha1msg2_epu32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_sha1msg2((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha256rnds2_epu32(__m128i __X, __m128i __Y, __m128i __Z) -{ - return (__m128i)__builtin_ia32_sha256rnds2((__v4si)__X, (__v4si)__Y, (__v4si)__Z); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha256msg1_epu32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_sha256msg1((__v4si)__X, (__v4si)__Y); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha256msg2_epu32(__m128i __X, __m128i __Y) -{ - return (__m128i)__builtin_ia32_sha256msg2((__v4si)__X, (__v4si)__Y); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __SHAINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/smmintrin.h b/External/CastXML/share/castxml/clang/include/smmintrin.h deleted file mode 100644 index e197590a3..000000000 --- a/External/CastXML/share/castxml/clang/include/smmintrin.h +++ /dev/null @@ -1,484 +0,0 @@ -/*===---- smmintrin.h - SSE4 intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef _SMMINTRIN_H -#define _SMMINTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.1"))) - -/* SSE4 Rounding macros. */ -#define _MM_FROUND_TO_NEAREST_INT 0x00 -#define _MM_FROUND_TO_NEG_INF 0x01 -#define _MM_FROUND_TO_POS_INF 0x02 -#define _MM_FROUND_TO_ZERO 0x03 -#define _MM_FROUND_CUR_DIRECTION 0x04 - -#define _MM_FROUND_RAISE_EXC 0x00 -#define _MM_FROUND_NO_EXC 0x08 - -#define _MM_FROUND_NINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEAREST_INT) -#define _MM_FROUND_FLOOR (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEG_INF) -#define _MM_FROUND_CEIL (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_POS_INF) -#define _MM_FROUND_TRUNC (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_ZERO) -#define _MM_FROUND_RINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_CUR_DIRECTION) -#define _MM_FROUND_NEARBYINT (_MM_FROUND_NO_EXC | _MM_FROUND_CUR_DIRECTION) - -#define _mm_ceil_ps(X) _mm_round_ps((X), _MM_FROUND_CEIL) -#define _mm_ceil_pd(X) _mm_round_pd((X), _MM_FROUND_CEIL) -#define _mm_ceil_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_CEIL) -#define _mm_ceil_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_CEIL) - -#define _mm_floor_ps(X) _mm_round_ps((X), _MM_FROUND_FLOOR) -#define _mm_floor_pd(X) _mm_round_pd((X), _MM_FROUND_FLOOR) -#define _mm_floor_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_FLOOR) -#define _mm_floor_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_FLOOR) - -#define _mm_round_ps(X, M) __extension__ ({ \ - __m128 __X = (X); \ - (__m128) __builtin_ia32_roundps((__v4sf)__X, (M)); }) - -#define _mm_round_ss(X, Y, M) __extension__ ({ \ - __m128 __X = (X); \ - __m128 __Y = (Y); \ - (__m128) __builtin_ia32_roundss((__v4sf)__X, (__v4sf)__Y, (M)); }) - -#define _mm_round_pd(X, M) __extension__ ({ \ - __m128d __X = (X); \ - (__m128d) __builtin_ia32_roundpd((__v2df)__X, (M)); }) - -#define _mm_round_sd(X, Y, M) __extension__ ({ \ - __m128d __X = (X); \ - __m128d __Y = (Y); \ - (__m128d) __builtin_ia32_roundsd((__v2df)__X, (__v2df)__Y, (M)); }) - -/* SSE4 Packed Blending Intrinsics. */ -#define _mm_blend_pd(V1, V2, M) __extension__ ({ \ - __m128d __V1 = (V1); \ - __m128d __V2 = (V2); \ - (__m128d)__builtin_shufflevector((__v2df)__V1, (__v2df)__V2, \ - (((M) & 0x01) ? 2 : 0), \ - (((M) & 0x02) ? 3 : 1)); }) - -#define _mm_blend_ps(V1, V2, M) __extension__ ({ \ - __m128 __V1 = (V1); \ - __m128 __V2 = (V2); \ - (__m128)__builtin_shufflevector((__v4sf)__V1, (__v4sf)__V2, \ - (((M) & 0x01) ? 4 : 0), \ - (((M) & 0x02) ? 5 : 1), \ - (((M) & 0x04) ? 6 : 2), \ - (((M) & 0x08) ? 7 : 3)); }) - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_blendv_pd (__m128d __V1, __m128d __V2, __m128d __M) -{ - return (__m128d) __builtin_ia32_blendvpd ((__v2df)__V1, (__v2df)__V2, - (__v2df)__M); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M) -{ - return (__m128) __builtin_ia32_blendvps ((__v4sf)__V1, (__v4sf)__V2, - (__v4sf)__M); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M) -{ - return (__m128i) __builtin_ia32_pblendvb128 ((__v16qi)__V1, (__v16qi)__V2, - (__v16qi)__M); -} - -#define _mm_blend_epi16(V1, V2, M) __extension__ ({ \ - __m128i __V1 = (V1); \ - __m128i __V2 = (V2); \ - (__m128i)__builtin_shufflevector((__v8hi)__V1, (__v8hi)__V2, \ - (((M) & 0x01) ? 8 : 0), \ - (((M) & 0x02) ? 9 : 1), \ - (((M) & 0x04) ? 10 : 2), \ - (((M) & 0x08) ? 11 : 3), \ - (((M) & 0x10) ? 12 : 4), \ - (((M) & 0x20) ? 13 : 5), \ - (((M) & 0x40) ? 14 : 6), \ - (((M) & 0x80) ? 15 : 7)); }) - -/* SSE4 Dword Multiply Instructions. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mullo_epi32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) ((__v4si)__V1 * (__v4si)__V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mul_epi32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pmuldq128 ((__v4si)__V1, (__v4si)__V2); -} - -/* SSE4 Floating Point Dot Product Instructions. */ -#define _mm_dp_ps(X, Y, M) __extension__ ({ \ - __m128 __X = (X); \ - __m128 __Y = (Y); \ - (__m128) __builtin_ia32_dpps((__v4sf)__X, (__v4sf)__Y, (M)); }) - -#define _mm_dp_pd(X, Y, M) __extension__ ({\ - __m128d __X = (X); \ - __m128d __Y = (Y); \ - (__m128d) __builtin_ia32_dppd((__v2df)__X, (__v2df)__Y, (M)); }) - -/* SSE4 Streaming Load Hint Instruction. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_stream_load_si128 (__m128i *__V) -{ - return (__m128i) __builtin_ia32_movntdqa ((__v2di *) __V); -} - -/* SSE4 Packed Integer Min/Max Instructions. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epi8 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epi8 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epu16 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epu16 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epi32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epi32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_min_epu32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_max_epu32 (__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2); -} - -/* SSE4 Insertion and Extraction from XMM Register Instructions. */ -#define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N)) -#define _mm_extract_ps(X, N) (__extension__ \ - ({ union { int __i; float __f; } __t; \ - __v4sf __a = (__v4sf)(X); \ - __t.__f = __a[(N) & 3]; \ - __t.__i;})) - -/* Miscellaneous insert and extract macros. */ -/* Extract a single-precision float from X at index N into D. */ -#define _MM_EXTRACT_FLOAT(D, X, N) (__extension__ ({ __v4sf __a = (__v4sf)(X); \ - (D) = __a[N]; })) - -/* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create - an index suitable for _mm_insert_ps. */ -#define _MM_MK_INSERTPS_NDX(X, Y, Z) (((X) << 6) | ((Y) << 4) | (Z)) - -/* Extract a float from X at index N into the first index of the return. */ -#define _MM_PICK_OUT_PS(X, N) _mm_insert_ps (_mm_setzero_ps(), (X), \ - _MM_MK_INSERTPS_NDX((N), 0, 0x0e)) - -/* Insert int into packed integer array at index. */ -#define _mm_insert_epi8(X, I, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \ - __a[(N) & 15] = (I); \ - __a;})) -#define _mm_insert_epi32(X, I, N) (__extension__ ({ __v4si __a = (__v4si)(X); \ - __a[(N) & 3] = (I); \ - __a;})) -#ifdef __x86_64__ -#define _mm_insert_epi64(X, I, N) (__extension__ ({ __v2di __a = (__v2di)(X); \ - __a[(N) & 1] = (I); \ - __a;})) -#endif /* __x86_64__ */ - -/* Extract int from packed integer array at index. This returns the element - * as a zero extended value, so it is unsigned. - */ -#define _mm_extract_epi8(X, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \ - (int)(unsigned char) \ - __a[(N) & 15];})) -#define _mm_extract_epi32(X, N) (__extension__ ({ __v4si __a = (__v4si)(X); \ - __a[(N) & 3];})) -#ifdef __x86_64__ -#define _mm_extract_epi64(X, N) (__extension__ ({ __v2di __a = (__v2di)(X); \ - __a[(N) & 1];})) -#endif /* __x86_64 */ - -/* SSE4 128-bit Packed Integer Comparisons. */ -static __inline__ int __DEFAULT_FN_ATTRS -_mm_testz_si128(__m128i __M, __m128i __V) -{ - return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_testc_si128(__m128i __M, __m128i __V) -{ - return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_testnzc_si128(__m128i __M, __m128i __V) -{ - return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V); -} - -#define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V))) -#define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V)) -#define _mm_test_all_zeros(M, V) _mm_testz_si128 ((M), (V)) - -/* SSE4 64-bit Packed Integer Comparisons. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpeq_epi64(__m128i __V1, __m128i __V2) -{ - return (__m128i)((__v2di)__V1 == (__v2di)__V2); -} - -/* SSE4 Packed Integer Sign-Extension. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi8_epi16(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxbw128((__v16qi) __V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi8_epi32(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxbd128((__v16qi) __V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi8_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxbq128((__v16qi) __V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi16_epi32(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxwd128((__v8hi) __V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi16_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxwq128((__v8hi)__V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepi32_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovsxdq128((__v4si)__V); -} - -/* SSE4 Packed Integer Zero-Extension. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu8_epi16(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxbw128((__v16qi) __V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu8_epi32(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxbd128((__v16qi)__V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu8_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxbq128((__v16qi)__V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu16_epi32(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxwd128((__v8hi)__V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu16_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxwq128((__v8hi)__V); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cvtepu32_epi64(__m128i __V) -{ - return (__m128i) __builtin_ia32_pmovzxdq128((__v4si)__V); -} - -/* SSE4 Pack with Unsigned Saturation. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_packus_epi32(__m128i __V1, __m128i __V2) -{ - return (__m128i) __builtin_ia32_packusdw128((__v4si)__V1, (__v4si)__V2); -} - -/* SSE4 Multiple Packed Sums of Absolute Difference. */ -#define _mm_mpsadbw_epu8(X, Y, M) __extension__ ({ \ - __m128i __X = (X); \ - __m128i __Y = (Y); \ - (__m128i) __builtin_ia32_mpsadbw128((__v16qi)__X, (__v16qi)__Y, (M)); }) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_minpos_epu16(__m128i __V) -{ - return (__m128i) __builtin_ia32_phminposuw128((__v8hi)__V); -} - -/* Handle the sse4.2 definitions here. */ - -/* These definitions are normally in nmmintrin.h, but gcc puts them in here - so we'll do the same. */ - -#undef __DEFAULT_FN_ATTRS -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.2"))) - -/* These specify the type of data that we're comparing. */ -#define _SIDD_UBYTE_OPS 0x00 -#define _SIDD_UWORD_OPS 0x01 -#define _SIDD_SBYTE_OPS 0x02 -#define _SIDD_SWORD_OPS 0x03 - -/* These specify the type of comparison operation. */ -#define _SIDD_CMP_EQUAL_ANY 0x00 -#define _SIDD_CMP_RANGES 0x04 -#define _SIDD_CMP_EQUAL_EACH 0x08 -#define _SIDD_CMP_EQUAL_ORDERED 0x0c - -/* These macros specify the polarity of the operation. */ -#define _SIDD_POSITIVE_POLARITY 0x00 -#define _SIDD_NEGATIVE_POLARITY 0x10 -#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 -#define _SIDD_MASKED_NEGATIVE_POLARITY 0x30 - -/* These macros are used in _mm_cmpXstri() to specify the return. */ -#define _SIDD_LEAST_SIGNIFICANT 0x00 -#define _SIDD_MOST_SIGNIFICANT 0x40 - -/* These macros are used in _mm_cmpXstri() to specify the return. */ -#define _SIDD_BIT_MASK 0x00 -#define _SIDD_UNIT_MASK 0x40 - -/* SSE4.2 Packed Comparison Intrinsics. */ -#define _mm_cmpistrm(A, B, M) __builtin_ia32_pcmpistrm128((A), (B), (M)) -#define _mm_cmpistri(A, B, M) __builtin_ia32_pcmpistri128((A), (B), (M)) - -#define _mm_cmpestrm(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestrm128((A), (LA), (B), (LB), (M)) -#define _mm_cmpestri(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestri128((A), (LA), (B), (LB), (M)) - -/* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */ -#define _mm_cmpistra(A, B, M) \ - __builtin_ia32_pcmpistria128((A), (B), (M)) -#define _mm_cmpistrc(A, B, M) \ - __builtin_ia32_pcmpistric128((A), (B), (M)) -#define _mm_cmpistro(A, B, M) \ - __builtin_ia32_pcmpistrio128((A), (B), (M)) -#define _mm_cmpistrs(A, B, M) \ - __builtin_ia32_pcmpistris128((A), (B), (M)) -#define _mm_cmpistrz(A, B, M) \ - __builtin_ia32_pcmpistriz128((A), (B), (M)) - -#define _mm_cmpestra(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestria128((A), (LA), (B), (LB), (M)) -#define _mm_cmpestrc(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestric128((A), (LA), (B), (LB), (M)) -#define _mm_cmpestro(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestrio128((A), (LA), (B), (LB), (M)) -#define _mm_cmpestrs(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestris128((A), (LA), (B), (LB), (M)) -#define _mm_cmpestrz(A, LA, B, LB, M) \ - __builtin_ia32_pcmpestriz128((A), (LA), (B), (LB), (M)) - -/* SSE4.2 Compare Packed Data -- Greater Than. */ -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmpgt_epi64(__m128i __V1, __m128i __V2) -{ - return (__m128i)((__v2di)__V1 > (__v2di)__V2); -} - -/* SSE4.2 Accumulate CRC32. */ -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_mm_crc32_u8(unsigned int __C, unsigned char __D) -{ - return __builtin_ia32_crc32qi(__C, __D); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_mm_crc32_u16(unsigned int __C, unsigned short __D) -{ - return __builtin_ia32_crc32hi(__C, __D); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_mm_crc32_u32(unsigned int __C, unsigned int __D) -{ - return __builtin_ia32_crc32si(__C, __D); -} - -#ifdef __x86_64__ -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -_mm_crc32_u64(unsigned long long __C, unsigned long long __D) -{ - return __builtin_ia32_crc32di(__C, __D); -} -#endif /* __x86_64__ */ - -#undef __DEFAULT_FN_ATTRS - -#ifdef __POPCNT__ -#include -#endif - -#endif /* _SMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/stdalign.h b/External/CastXML/share/castxml/clang/include/stdalign.h deleted file mode 100644 index 3738d1284..000000000 --- a/External/CastXML/share/castxml/clang/include/stdalign.h +++ /dev/null @@ -1,35 +0,0 @@ -/*===---- stdalign.h - Standard header for alignment ------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __STDALIGN_H -#define __STDALIGN_H - -#ifndef __cplusplus -#define alignas _Alignas -#define alignof _Alignof -#endif - -#define __alignas_is_defined 1 -#define __alignof_is_defined 1 - -#endif /* __STDALIGN_H */ diff --git a/External/CastXML/share/castxml/clang/include/stdarg.h b/External/CastXML/share/castxml/clang/include/stdarg.h deleted file mode 100644 index a57e18364..000000000 --- a/External/CastXML/share/castxml/clang/include/stdarg.h +++ /dev/null @@ -1,52 +0,0 @@ -/*===---- stdarg.h - Variable argument handling ----------------------------=== - * - * Copyright (c) 2008 Eli Friedman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __STDARG_H -#define __STDARG_H - -#ifndef _VA_LIST -typedef __builtin_va_list va_list; -#define _VA_LIST -#endif -#define va_start(ap, param) __builtin_va_start(ap, param) -#define va_end(ap) __builtin_va_end(ap) -#define va_arg(ap, type) __builtin_va_arg(ap, type) - -/* GCC always defines __va_copy, but does not define va_copy unless in c99 mode - * or -ansi is not specified, since it was not part of C90. - */ -#define __va_copy(d,s) __builtin_va_copy(d,s) - -#if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L || !defined(__STRICT_ANSI__) -#define va_copy(dest, src) __builtin_va_copy(dest, src) -#endif - -/* Hack required to make standard headers work, at least on Ubuntu */ -#ifndef __GNUC_VA_LIST -#define __GNUC_VA_LIST 1 -#endif -typedef __builtin_va_list __gnuc_va_list; - -#endif /* __STDARG_H */ diff --git a/External/CastXML/share/castxml/clang/include/stdatomic.h b/External/CastXML/share/castxml/clang/include/stdatomic.h deleted file mode 100644 index e03798766..000000000 --- a/External/CastXML/share/castxml/clang/include/stdatomic.h +++ /dev/null @@ -1,190 +0,0 @@ -/*===---- stdatomic.h - Standard header for atomic types and operations -----=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __CLANG_STDATOMIC_H -#define __CLANG_STDATOMIC_H - -/* If we're hosted, fall back to the system's stdatomic.h. FreeBSD, for - * example, already has a Clang-compatible stdatomic.h header. - */ -#if __STDC_HOSTED__ && __has_include_next() -# include_next -#else - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* 7.17.1 Introduction */ - -#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE -#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE -#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE -#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE -#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE -#define ATOMIC_SHORT_T_LOCK_FREE __GCC_ATOMIC_SHORT_T_LOCK_FREE -#define ATOMIC_INT_T_LOCK_FREE __GCC_ATOMIC_INT_T_LOCK_FREE -#define ATOMIC_LONG_T_LOCK_FREE __GCC_ATOMIC_LONG_T_LOCK_FREE -#define ATOMIC_LLONG_T_LOCK_FREE __GCC_ATOMIC_LLONG_T_LOCK_FREE -#define ATOMIC_POINTER_T_LOCK_FREE __GCC_ATOMIC_POINTER_T_LOCK_FREE - -/* 7.17.2 Initialization */ - -#define ATOMIC_VAR_INIT(value) (value) -#define atomic_init __c11_atomic_init - -/* 7.17.3 Order and consistency */ - -typedef enum memory_order { - memory_order_relaxed = __ATOMIC_RELAXED, - memory_order_consume = __ATOMIC_CONSUME, - memory_order_acquire = __ATOMIC_ACQUIRE, - memory_order_release = __ATOMIC_RELEASE, - memory_order_acq_rel = __ATOMIC_ACQ_REL, - memory_order_seq_cst = __ATOMIC_SEQ_CST -} memory_order; - -#define kill_dependency(y) (y) - -/* 7.17.4 Fences */ - -/* These should be provided by the libc implementation. */ -void atomic_thread_fence(memory_order); -void atomic_signal_fence(memory_order); - -#define atomic_thread_fence(order) __c11_atomic_thread_fence(order) -#define atomic_signal_fence(order) __c11_atomic_signal_fence(order) - -/* 7.17.5 Lock-free property */ - -#define atomic_is_lock_free(obj) __c11_atomic_is_lock_free(sizeof(*(obj))) - -/* 7.17.6 Atomic integer types */ - -#ifdef __cplusplus -typedef _Atomic(bool) atomic_bool; -#else -typedef _Atomic(_Bool) atomic_bool; -#endif -typedef _Atomic(char) atomic_char; -typedef _Atomic(signed char) atomic_schar; -typedef _Atomic(unsigned char) atomic_uchar; -typedef _Atomic(short) atomic_short; -typedef _Atomic(unsigned short) atomic_ushort; -typedef _Atomic(int) atomic_int; -typedef _Atomic(unsigned int) atomic_uint; -typedef _Atomic(long) atomic_long; -typedef _Atomic(unsigned long) atomic_ulong; -typedef _Atomic(long long) atomic_llong; -typedef _Atomic(unsigned long long) atomic_ullong; -typedef _Atomic(uint_least16_t) atomic_char16_t; -typedef _Atomic(uint_least32_t) atomic_char32_t; -typedef _Atomic(wchar_t) atomic_wchar_t; -typedef _Atomic(int_least8_t) atomic_int_least8_t; -typedef _Atomic(uint_least8_t) atomic_uint_least8_t; -typedef _Atomic(int_least16_t) atomic_int_least16_t; -typedef _Atomic(uint_least16_t) atomic_uint_least16_t; -typedef _Atomic(int_least32_t) atomic_int_least32_t; -typedef _Atomic(uint_least32_t) atomic_uint_least32_t; -typedef _Atomic(int_least64_t) atomic_int_least64_t; -typedef _Atomic(uint_least64_t) atomic_uint_least64_t; -typedef _Atomic(int_fast8_t) atomic_int_fast8_t; -typedef _Atomic(uint_fast8_t) atomic_uint_fast8_t; -typedef _Atomic(int_fast16_t) atomic_int_fast16_t; -typedef _Atomic(uint_fast16_t) atomic_uint_fast16_t; -typedef _Atomic(int_fast32_t) atomic_int_fast32_t; -typedef _Atomic(uint_fast32_t) atomic_uint_fast32_t; -typedef _Atomic(int_fast64_t) atomic_int_fast64_t; -typedef _Atomic(uint_fast64_t) atomic_uint_fast64_t; -typedef _Atomic(intptr_t) atomic_intptr_t; -typedef _Atomic(uintptr_t) atomic_uintptr_t; -typedef _Atomic(size_t) atomic_size_t; -typedef _Atomic(ptrdiff_t) atomic_ptrdiff_t; -typedef _Atomic(intmax_t) atomic_intmax_t; -typedef _Atomic(uintmax_t) atomic_uintmax_t; - -/* 7.17.7 Operations on atomic types */ - -#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST) -#define atomic_store_explicit __c11_atomic_store - -#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST) -#define atomic_load_explicit __c11_atomic_load - -#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST) -#define atomic_exchange_explicit __c11_atomic_exchange - -#define atomic_compare_exchange_strong(object, expected, desired) __c11_atomic_compare_exchange_strong(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) -#define atomic_compare_exchange_strong_explicit __c11_atomic_compare_exchange_strong - -#define atomic_compare_exchange_weak(object, expected, desired) __c11_atomic_compare_exchange_weak(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) -#define atomic_compare_exchange_weak_explicit __c11_atomic_compare_exchange_weak - -#define atomic_fetch_add(object, operand) __c11_atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST) -#define atomic_fetch_add_explicit __c11_atomic_fetch_add - -#define atomic_fetch_sub(object, operand) __c11_atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST) -#define atomic_fetch_sub_explicit __c11_atomic_fetch_sub - -#define atomic_fetch_or(object, operand) __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST) -#define atomic_fetch_or_explicit __c11_atomic_fetch_or - -#define atomic_fetch_xor(object, operand) __c11_atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST) -#define atomic_fetch_xor_explicit __c11_atomic_fetch_xor - -#define atomic_fetch_and(object, operand) __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST) -#define atomic_fetch_and_explicit __c11_atomic_fetch_and - -/* 7.17.8 Atomic flag type and operations */ - -typedef struct atomic_flag { atomic_bool _Value; } atomic_flag; - -#define ATOMIC_FLAG_INIT { 0 } - -/* These should be provided by the libc implementation. */ -#ifdef __cplusplus -bool atomic_flag_test_and_set(volatile atomic_flag *); -bool atomic_flag_test_and_set_explicit(volatile atomic_flag *, memory_order); -#else -_Bool atomic_flag_test_and_set(volatile atomic_flag *); -_Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *, memory_order); -#endif -void atomic_flag_clear(volatile atomic_flag *); -void atomic_flag_clear_explicit(volatile atomic_flag *, memory_order); - -#define atomic_flag_test_and_set(object) __c11_atomic_exchange(&(object)->_Value, 1, __ATOMIC_SEQ_CST) -#define atomic_flag_test_and_set_explicit(object, order) __c11_atomic_exchange(&(object)->_Value, 1, order) - -#define atomic_flag_clear(object) __c11_atomic_store(&(object)->_Value, 0, __ATOMIC_SEQ_CST) -#define atomic_flag_clear_explicit(object, order) __c11_atomic_store(&(object)->_Value, 0, order) - -#ifdef __cplusplus -} -#endif - -#endif /* __STDC_HOSTED__ */ -#endif /* __CLANG_STDATOMIC_H */ - diff --git a/External/CastXML/share/castxml/clang/include/stdbool.h b/External/CastXML/share/castxml/clang/include/stdbool.h deleted file mode 100644 index 0467893f3..000000000 --- a/External/CastXML/share/castxml/clang/include/stdbool.h +++ /dev/null @@ -1,44 +0,0 @@ -/*===---- stdbool.h - Standard header for booleans -------------------------=== - * - * Copyright (c) 2008 Eli Friedman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __STDBOOL_H -#define __STDBOOL_H - -/* Don't define bool, true, and false in C++, except as a GNU extension. */ -#ifndef __cplusplus -#define bool _Bool -#define true 1 -#define false 0 -#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) -/* Define _Bool, bool, false, true as a GNU extension. */ -#define _Bool bool -#define bool bool -#define false false -#define true true -#endif - -#define __bool_true_false_are_defined 1 - -#endif /* __STDBOOL_H */ diff --git a/External/CastXML/share/castxml/clang/include/stddef.h b/External/CastXML/share/castxml/clang/include/stddef.h deleted file mode 100644 index 735499671..000000000 --- a/External/CastXML/share/castxml/clang/include/stddef.h +++ /dev/null @@ -1,137 +0,0 @@ -/*===---- stddef.h - Basic type definitions --------------------------------=== - * - * Copyright (c) 2008 Eli Friedman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if !defined(__STDDEF_H) || defined(__need_ptrdiff_t) || \ - defined(__need_size_t) || defined(__need_wchar_t) || \ - defined(__need_NULL) || defined(__need_wint_t) - -#if !defined(__need_ptrdiff_t) && !defined(__need_size_t) && \ - !defined(__need_wchar_t) && !defined(__need_NULL) && \ - !defined(__need_wint_t) -/* Always define miscellaneous pieces when modules are available. */ -#if !__has_feature(modules) -#define __STDDEF_H -#endif -#define __need_ptrdiff_t -#define __need_size_t -#define __need_wchar_t -#define __need_NULL -#define __need_STDDEF_H_misc -/* __need_wint_t is intentionally not defined here. */ -#endif - -#if defined(__need_ptrdiff_t) -#if !defined(_PTRDIFF_T) || __has_feature(modules) -/* Always define ptrdiff_t when modules are available. */ -#if !__has_feature(modules) -#define _PTRDIFF_T -#endif -typedef __PTRDIFF_TYPE__ ptrdiff_t; -#endif -#undef __need_ptrdiff_t -#endif /* defined(__need_ptrdiff_t) */ - -#if defined(__need_size_t) -#if !defined(_SIZE_T) || __has_feature(modules) -/* Always define size_t when modules are available. */ -#if !__has_feature(modules) -#define _SIZE_T -#endif -typedef __SIZE_TYPE__ size_t; -#endif -#undef __need_size_t -#endif /*defined(__need_size_t) */ - -#if defined(__need_STDDEF_H_misc) -/* ISO9899:2011 7.20 (C11 Annex K): Define rsize_t if __STDC_WANT_LIB_EXT1__ is - * enabled. */ -#if (defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 && \ - !defined(_RSIZE_T)) || __has_feature(modules) -/* Always define rsize_t when modules are available. */ -#if !__has_feature(modules) -#define _RSIZE_T -#endif -typedef __SIZE_TYPE__ rsize_t; -#endif -#endif /* defined(__need_STDDEF_H_misc) */ - -#if defined(__need_wchar_t) -#ifndef __cplusplus -/* Always define wchar_t when modules are available. */ -#if !defined(_WCHAR_T) || __has_feature(modules) -#if !__has_feature(modules) -#define _WCHAR_T -#if defined(_MSC_EXTENSIONS) -#define _WCHAR_T_DEFINED -#endif -#endif -typedef __WCHAR_TYPE__ wchar_t; -#endif -#endif -#undef __need_wchar_t -#endif /* defined(__need_wchar_t) */ - -#if defined(__need_NULL) -#undef NULL -#ifdef __cplusplus -# if !defined(__MINGW32__) && !defined(_MSC_VER) -# define NULL __null -# else -# define NULL 0 -# endif -#else -# define NULL ((void*)0) -#endif -#ifdef __cplusplus -#if defined(_MSC_EXTENSIONS) && defined(_NATIVE_NULLPTR_SUPPORTED) -namespace std { typedef decltype(nullptr) nullptr_t; } -using ::std::nullptr_t; -#endif -#endif -#undef __need_NULL -#endif /* defined(__need_NULL) */ - -#if defined(__need_STDDEF_H_misc) -#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L -#include "__stddef_max_align_t.h" -#endif -#define offsetof(t, d) __builtin_offsetof(t, d) -#undef __need_STDDEF_H_misc -#endif /* defined(__need_STDDEF_H_misc) */ - -/* Some C libraries expect to see a wint_t here. Others (notably MinGW) will use -__WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */ -#if defined(__need_wint_t) -/* Always define wint_t when modules are available. */ -#if !defined(_WINT_T) || __has_feature(modules) -#if !__has_feature(modules) -#define _WINT_T -#endif -typedef __WINT_TYPE__ wint_t; -#endif -#undef __need_wint_t -#endif /* __need_wint_t */ - -#endif diff --git a/External/CastXML/share/castxml/clang/include/stdint.h b/External/CastXML/share/castxml/clang/include/stdint.h deleted file mode 100644 index 0303db90b..000000000 --- a/External/CastXML/share/castxml/clang/include/stdint.h +++ /dev/null @@ -1,707 +0,0 @@ -/*===---- stdint.h - Standard header for sized integer types --------------===*\ - * - * Copyright (c) 2009 Chris Lattner - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __CLANG_STDINT_H -#define __CLANG_STDINT_H - -/* If we're hosted, fall back to the system's stdint.h, which might have - * additional definitions. - */ -#if __STDC_HOSTED__ && __has_include_next() - -// C99 7.18.3 Limits of other integer types -// -// Footnote 219, 220: C++ implementations should define these macros only when -// __STDC_LIMIT_MACROS is defined before is included. -// -// Footnote 222: C++ implementations should define these macros only when -// __STDC_CONSTANT_MACROS is defined before is included. -// -// C++11 [cstdint.syn]p2: -// -// The macros defined by are provided unconditionally. In particular, -// the symbols __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS (mentioned in -// footnotes 219, 220, and 222 in the C standard) play no role in C++. -// -// C11 removed the problematic footnotes. -// -// Work around this inconsistency by always defining those macros in C++ mode, -// so that a C library implementation which follows the C99 standard can be -// used in C++. -# ifdef __cplusplus -# if !defined(__STDC_LIMIT_MACROS) -# define __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS_DEFINED_BY_CLANG -# endif -# if !defined(__STDC_CONSTANT_MACROS) -# define __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG -# endif -# endif - -# include_next - -# ifdef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG -# undef __STDC_LIMIT_MACROS -# undef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG -# endif -# ifdef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG -# undef __STDC_CONSTANT_MACROS -# undef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG -# endif - -#else - -/* C99 7.18.1.1 Exact-width integer types. - * C99 7.18.1.2 Minimum-width integer types. - * C99 7.18.1.3 Fastest minimum-width integer types. - * - * The standard requires that exact-width type be defined for 8-, 16-, 32-, and - * 64-bit types if they are implemented. Other exact width types are optional. - * This implementation defines an exact-width types for every integer width - * that is represented in the standard integer types. - * - * The standard also requires minimum-width types be defined for 8-, 16-, 32-, - * and 64-bit widths regardless of whether there are corresponding exact-width - * types. - * - * To accommodate targets that are missing types that are exactly 8, 16, 32, or - * 64 bits wide, this implementation takes an approach of cascading - * redefintions, redefining __int_leastN_t to successively smaller exact-width - * types. It is therefore important that the types are defined in order of - * descending widths. - * - * We currently assume that the minimum-width types and the fastest - * minimum-width types are the same. This is allowed by the standard, but is - * suboptimal. - * - * In violation of the standard, some targets do not implement a type that is - * wide enough to represent all of the required widths (8-, 16-, 32-, 64-bit). - * To accommodate these targets, a required minimum-width type is only - * defined if there exists an exact-width type of equal or greater width. - */ - -#ifdef __INT64_TYPE__ -# ifndef __int8_t_defined /* glibc sys/types.h also defines int64_t*/ -typedef __INT64_TYPE__ int64_t; -# endif /* __int8_t_defined */ -typedef __UINT64_TYPE__ uint64_t; -# define __int_least64_t int64_t -# define __uint_least64_t uint64_t -# define __int_least32_t int64_t -# define __uint_least32_t uint64_t -# define __int_least16_t int64_t -# define __uint_least16_t uint64_t -# define __int_least8_t int64_t -# define __uint_least8_t uint64_t -#endif /* __INT64_TYPE__ */ - -#ifdef __int_least64_t -typedef __int_least64_t int_least64_t; -typedef __uint_least64_t uint_least64_t; -typedef __int_least64_t int_fast64_t; -typedef __uint_least64_t uint_fast64_t; -#endif /* __int_least64_t */ - -#ifdef __INT56_TYPE__ -typedef __INT56_TYPE__ int56_t; -typedef __UINT56_TYPE__ uint56_t; -typedef int56_t int_least56_t; -typedef uint56_t uint_least56_t; -typedef int56_t int_fast56_t; -typedef uint56_t uint_fast56_t; -# define __int_least32_t int56_t -# define __uint_least32_t uint56_t -# define __int_least16_t int56_t -# define __uint_least16_t uint56_t -# define __int_least8_t int56_t -# define __uint_least8_t uint56_t -#endif /* __INT56_TYPE__ */ - - -#ifdef __INT48_TYPE__ -typedef __INT48_TYPE__ int48_t; -typedef __UINT48_TYPE__ uint48_t; -typedef int48_t int_least48_t; -typedef uint48_t uint_least48_t; -typedef int48_t int_fast48_t; -typedef uint48_t uint_fast48_t; -# define __int_least32_t int48_t -# define __uint_least32_t uint48_t -# define __int_least16_t int48_t -# define __uint_least16_t uint48_t -# define __int_least8_t int48_t -# define __uint_least8_t uint48_t -#endif /* __INT48_TYPE__ */ - - -#ifdef __INT40_TYPE__ -typedef __INT40_TYPE__ int40_t; -typedef __UINT40_TYPE__ uint40_t; -typedef int40_t int_least40_t; -typedef uint40_t uint_least40_t; -typedef int40_t int_fast40_t; -typedef uint40_t uint_fast40_t; -# define __int_least32_t int40_t -# define __uint_least32_t uint40_t -# define __int_least16_t int40_t -# define __uint_least16_t uint40_t -# define __int_least8_t int40_t -# define __uint_least8_t uint40_t -#endif /* __INT40_TYPE__ */ - - -#ifdef __INT32_TYPE__ - -# ifndef __int8_t_defined /* glibc sys/types.h also defines int32_t*/ -typedef __INT32_TYPE__ int32_t; -# endif /* __int8_t_defined */ - -# ifndef __uint32_t_defined /* more glibc compatibility */ -# define __uint32_t_defined -typedef __UINT32_TYPE__ uint32_t; -# endif /* __uint32_t_defined */ - -# define __int_least32_t int32_t -# define __uint_least32_t uint32_t -# define __int_least16_t int32_t -# define __uint_least16_t uint32_t -# define __int_least8_t int32_t -# define __uint_least8_t uint32_t -#endif /* __INT32_TYPE__ */ - -#ifdef __int_least32_t -typedef __int_least32_t int_least32_t; -typedef __uint_least32_t uint_least32_t; -typedef __int_least32_t int_fast32_t; -typedef __uint_least32_t uint_fast32_t; -#endif /* __int_least32_t */ - -#ifdef __INT24_TYPE__ -typedef __INT24_TYPE__ int24_t; -typedef __UINT24_TYPE__ uint24_t; -typedef int24_t int_least24_t; -typedef uint24_t uint_least24_t; -typedef int24_t int_fast24_t; -typedef uint24_t uint_fast24_t; -# define __int_least16_t int24_t -# define __uint_least16_t uint24_t -# define __int_least8_t int24_t -# define __uint_least8_t uint24_t -#endif /* __INT24_TYPE__ */ - -#ifdef __INT16_TYPE__ -#ifndef __int8_t_defined /* glibc sys/types.h also defines int16_t*/ -typedef __INT16_TYPE__ int16_t; -#endif /* __int8_t_defined */ -typedef __UINT16_TYPE__ uint16_t; -# define __int_least16_t int16_t -# define __uint_least16_t uint16_t -# define __int_least8_t int16_t -# define __uint_least8_t uint16_t -#endif /* __INT16_TYPE__ */ - -#ifdef __int_least16_t -typedef __int_least16_t int_least16_t; -typedef __uint_least16_t uint_least16_t; -typedef __int_least16_t int_fast16_t; -typedef __uint_least16_t uint_fast16_t; -#endif /* __int_least16_t */ - - -#ifdef __INT8_TYPE__ -#ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/ -typedef __INT8_TYPE__ int8_t; -#endif /* __int8_t_defined */ -typedef __UINT8_TYPE__ uint8_t; -# define __int_least8_t int8_t -# define __uint_least8_t uint8_t -#endif /* __INT8_TYPE__ */ - -#ifdef __int_least8_t -typedef __int_least8_t int_least8_t; -typedef __uint_least8_t uint_least8_t; -typedef __int_least8_t int_fast8_t; -typedef __uint_least8_t uint_fast8_t; -#endif /* __int_least8_t */ - -/* prevent glibc sys/types.h from defining conflicting types */ -#ifndef __int8_t_defined -# define __int8_t_defined -#endif /* __int8_t_defined */ - -/* C99 7.18.1.4 Integer types capable of holding object pointers. - */ -#define __stdint_join3(a,b,c) a ## b ## c - -#define __intn_t(n) __stdint_join3( int, n, _t) -#define __uintn_t(n) __stdint_join3(uint, n, _t) - -#ifndef _INTPTR_T -#ifndef __intptr_t_defined -typedef __intn_t(__INTPTR_WIDTH__) intptr_t; -#define __intptr_t_defined -#define _INTPTR_T -#endif -#endif - -#ifndef _UINTPTR_T -typedef __uintn_t(__INTPTR_WIDTH__) uintptr_t; -#define _UINTPTR_T -#endif - -/* C99 7.18.1.5 Greatest-width integer types. - */ -typedef __INTMAX_TYPE__ intmax_t; -typedef __UINTMAX_TYPE__ uintmax_t; - -/* C99 7.18.4 Macros for minimum-width integer constants. - * - * The standard requires that integer constant macros be defined for all the - * minimum-width types defined above. As 8-, 16-, 32-, and 64-bit minimum-width - * types are required, the corresponding integer constant macros are defined - * here. This implementation also defines minimum-width types for every other - * integer width that the target implements, so corresponding macros are - * defined below, too. - * - * These macros are defined using the same successive-shrinking approach as - * the type definitions above. It is likewise important that macros are defined - * in order of decending width. - * - * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the - * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). - */ - -#define __int_c_join(a, b) a ## b -#define __int_c(v, suffix) __int_c_join(v, suffix) -#define __uint_c(v, suffix) __int_c_join(v##U, suffix) - - -#ifdef __INT64_TYPE__ -# ifdef __INT64_C_SUFFIX__ -# define __int64_c_suffix __INT64_C_SUFFIX__ -# define __int32_c_suffix __INT64_C_SUFFIX__ -# define __int16_c_suffix __INT64_C_SUFFIX__ -# define __int8_c_suffix __INT64_C_SUFFIX__ -# else -# undef __int64_c_suffix -# undef __int32_c_suffix -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT64_C_SUFFIX__ */ -#endif /* __INT64_TYPE__ */ - -#ifdef __int_least64_t -# ifdef __int64_c_suffix -# define INT64_C(v) __int_c(v, __int64_c_suffix) -# define UINT64_C(v) __uint_c(v, __int64_c_suffix) -# else -# define INT64_C(v) v -# define UINT64_C(v) v ## U -# endif /* __int64_c_suffix */ -#endif /* __int_least64_t */ - - -#ifdef __INT56_TYPE__ -# ifdef __INT56_C_SUFFIX__ -# define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__) -# define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__) -# define __int32_c_suffix __INT56_C_SUFFIX__ -# define __int16_c_suffix __INT56_C_SUFFIX__ -# define __int8_c_suffix __INT56_C_SUFFIX__ -# else -# define INT56_C(v) v -# define UINT56_C(v) v ## U -# undef __int32_c_suffix -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT56_C_SUFFIX__ */ -#endif /* __INT56_TYPE__ */ - - -#ifdef __INT48_TYPE__ -# ifdef __INT48_C_SUFFIX__ -# define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__) -# define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__) -# define __int32_c_suffix __INT48_C_SUFFIX__ -# define __int16_c_suffix __INT48_C_SUFFIX__ -# define __int8_c_suffix __INT48_C_SUFFIX__ -# else -# define INT48_C(v) v -# define UINT48_C(v) v ## U -# undef __int32_c_suffix -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT48_C_SUFFIX__ */ -#endif /* __INT48_TYPE__ */ - - -#ifdef __INT40_TYPE__ -# ifdef __INT40_C_SUFFIX__ -# define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__) -# define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__) -# define __int32_c_suffix __INT40_C_SUFFIX__ -# define __int16_c_suffix __INT40_C_SUFFIX__ -# define __int8_c_suffix __INT40_C_SUFFIX__ -# else -# define INT40_C(v) v -# define UINT40_C(v) v ## U -# undef __int32_c_suffix -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT40_C_SUFFIX__ */ -#endif /* __INT40_TYPE__ */ - - -#ifdef __INT32_TYPE__ -# ifdef __INT32_C_SUFFIX__ -# define __int32_c_suffix __INT32_C_SUFFIX__ -# define __int16_c_suffix __INT32_C_SUFFIX__ -# define __int8_c_suffix __INT32_C_SUFFIX__ -#else -# undef __int32_c_suffix -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT32_C_SUFFIX__ */ -#endif /* __INT32_TYPE__ */ - -#ifdef __int_least32_t -# ifdef __int32_c_suffix -# define INT32_C(v) __int_c(v, __int32_c_suffix) -# define UINT32_C(v) __uint_c(v, __int32_c_suffix) -# else -# define INT32_C(v) v -# define UINT32_C(v) v ## U -# endif /* __int32_c_suffix */ -#endif /* __int_least32_t */ - - -#ifdef __INT24_TYPE__ -# ifdef __INT24_C_SUFFIX__ -# define INT24_C(v) __int_c(v, __INT24_C_SUFFIX__) -# define UINT24_C(v) __uint_c(v, __INT24_C_SUFFIX__) -# define __int16_c_suffix __INT24_C_SUFFIX__ -# define __int8_c_suffix __INT24_C_SUFFIX__ -# else -# define INT24_C(v) v -# define UINT24_C(v) v ## U -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT24_C_SUFFIX__ */ -#endif /* __INT24_TYPE__ */ - - -#ifdef __INT16_TYPE__ -# ifdef __INT16_C_SUFFIX__ -# define __int16_c_suffix __INT16_C_SUFFIX__ -# define __int8_c_suffix __INT16_C_SUFFIX__ -#else -# undef __int16_c_suffix -# undef __int8_c_suffix -# endif /* __INT16_C_SUFFIX__ */ -#endif /* __INT16_TYPE__ */ - -#ifdef __int_least16_t -# ifdef __int16_c_suffix -# define INT16_C(v) __int_c(v, __int16_c_suffix) -# define UINT16_C(v) __uint_c(v, __int16_c_suffix) -# else -# define INT16_C(v) v -# define UINT16_C(v) v ## U -# endif /* __int16_c_suffix */ -#endif /* __int_least16_t */ - - -#ifdef __INT8_TYPE__ -# ifdef __INT8_C_SUFFIX__ -# define __int8_c_suffix __INT8_C_SUFFIX__ -#else -# undef __int8_c_suffix -# endif /* __INT8_C_SUFFIX__ */ -#endif /* __INT8_TYPE__ */ - -#ifdef __int_least8_t -# ifdef __int8_c_suffix -# define INT8_C(v) __int_c(v, __int8_c_suffix) -# define UINT8_C(v) __uint_c(v, __int8_c_suffix) -# else -# define INT8_C(v) v -# define UINT8_C(v) v ## U -# endif /* __int8_c_suffix */ -#endif /* __int_least8_t */ - - -/* C99 7.18.2.1 Limits of exact-width integer types. - * C99 7.18.2.2 Limits of minimum-width integer types. - * C99 7.18.2.3 Limits of fastest minimum-width integer types. - * - * The presence of limit macros are completely optional in C99. This - * implementation defines limits for all of the types (exact- and - * minimum-width) that it defines above, using the limits of the minimum-width - * type for any types that do not have exact-width representations. - * - * As in the type definitions, this section takes an approach of - * successive-shrinking to determine which limits to use for the standard (8, - * 16, 32, 64) bit widths when they don't have exact representations. It is - * therefore important that the defintions be kept in order of decending - * widths. - * - * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the - * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). - */ - -#ifdef __INT64_TYPE__ -# define INT64_MAX INT64_C( 9223372036854775807) -# define INT64_MIN (-INT64_C( 9223372036854775807)-1) -# define UINT64_MAX UINT64_C(18446744073709551615) -# define __INT_LEAST64_MIN INT64_MIN -# define __INT_LEAST64_MAX INT64_MAX -# define __UINT_LEAST64_MAX UINT64_MAX -# define __INT_LEAST32_MIN INT64_MIN -# define __INT_LEAST32_MAX INT64_MAX -# define __UINT_LEAST32_MAX UINT64_MAX -# define __INT_LEAST16_MIN INT64_MIN -# define __INT_LEAST16_MAX INT64_MAX -# define __UINT_LEAST16_MAX UINT64_MAX -# define __INT_LEAST8_MIN INT64_MIN -# define __INT_LEAST8_MAX INT64_MAX -# define __UINT_LEAST8_MAX UINT64_MAX -#endif /* __INT64_TYPE__ */ - -#ifdef __INT_LEAST64_MIN -# define INT_LEAST64_MIN __INT_LEAST64_MIN -# define INT_LEAST64_MAX __INT_LEAST64_MAX -# define UINT_LEAST64_MAX __UINT_LEAST64_MAX -# define INT_FAST64_MIN __INT_LEAST64_MIN -# define INT_FAST64_MAX __INT_LEAST64_MAX -# define UINT_FAST64_MAX __UINT_LEAST64_MAX -#endif /* __INT_LEAST64_MIN */ - - -#ifdef __INT56_TYPE__ -# define INT56_MAX INT56_C(36028797018963967) -# define INT56_MIN (-INT56_C(36028797018963967)-1) -# define UINT56_MAX UINT56_C(72057594037927935) -# define INT_LEAST56_MIN INT56_MIN -# define INT_LEAST56_MAX INT56_MAX -# define UINT_LEAST56_MAX UINT56_MAX -# define INT_FAST56_MIN INT56_MIN -# define INT_FAST56_MAX INT56_MAX -# define UINT_FAST56_MAX UINT56_MAX -# define __INT_LEAST32_MIN INT56_MIN -# define __INT_LEAST32_MAX INT56_MAX -# define __UINT_LEAST32_MAX UINT56_MAX -# define __INT_LEAST16_MIN INT56_MIN -# define __INT_LEAST16_MAX INT56_MAX -# define __UINT_LEAST16_MAX UINT56_MAX -# define __INT_LEAST8_MIN INT56_MIN -# define __INT_LEAST8_MAX INT56_MAX -# define __UINT_LEAST8_MAX UINT56_MAX -#endif /* __INT56_TYPE__ */ - - -#ifdef __INT48_TYPE__ -# define INT48_MAX INT48_C(140737488355327) -# define INT48_MIN (-INT48_C(140737488355327)-1) -# define UINT48_MAX UINT48_C(281474976710655) -# define INT_LEAST48_MIN INT48_MIN -# define INT_LEAST48_MAX INT48_MAX -# define UINT_LEAST48_MAX UINT48_MAX -# define INT_FAST48_MIN INT48_MIN -# define INT_FAST48_MAX INT48_MAX -# define UINT_FAST48_MAX UINT48_MAX -# define __INT_LEAST32_MIN INT48_MIN -# define __INT_LEAST32_MAX INT48_MAX -# define __UINT_LEAST32_MAX UINT48_MAX -# define __INT_LEAST16_MIN INT48_MIN -# define __INT_LEAST16_MAX INT48_MAX -# define __UINT_LEAST16_MAX UINT48_MAX -# define __INT_LEAST8_MIN INT48_MIN -# define __INT_LEAST8_MAX INT48_MAX -# define __UINT_LEAST8_MAX UINT48_MAX -#endif /* __INT48_TYPE__ */ - - -#ifdef __INT40_TYPE__ -# define INT40_MAX INT40_C(549755813887) -# define INT40_MIN (-INT40_C(549755813887)-1) -# define UINT40_MAX UINT40_C(1099511627775) -# define INT_LEAST40_MIN INT40_MIN -# define INT_LEAST40_MAX INT40_MAX -# define UINT_LEAST40_MAX UINT40_MAX -# define INT_FAST40_MIN INT40_MIN -# define INT_FAST40_MAX INT40_MAX -# define UINT_FAST40_MAX UINT40_MAX -# define __INT_LEAST32_MIN INT40_MIN -# define __INT_LEAST32_MAX INT40_MAX -# define __UINT_LEAST32_MAX UINT40_MAX -# define __INT_LEAST16_MIN INT40_MIN -# define __INT_LEAST16_MAX INT40_MAX -# define __UINT_LEAST16_MAX UINT40_MAX -# define __INT_LEAST8_MIN INT40_MIN -# define __INT_LEAST8_MAX INT40_MAX -# define __UINT_LEAST8_MAX UINT40_MAX -#endif /* __INT40_TYPE__ */ - - -#ifdef __INT32_TYPE__ -# define INT32_MAX INT32_C(2147483647) -# define INT32_MIN (-INT32_C(2147483647)-1) -# define UINT32_MAX UINT32_C(4294967295) -# define __INT_LEAST32_MIN INT32_MIN -# define __INT_LEAST32_MAX INT32_MAX -# define __UINT_LEAST32_MAX UINT32_MAX -# define __INT_LEAST16_MIN INT32_MIN -# define __INT_LEAST16_MAX INT32_MAX -# define __UINT_LEAST16_MAX UINT32_MAX -# define __INT_LEAST8_MIN INT32_MIN -# define __INT_LEAST8_MAX INT32_MAX -# define __UINT_LEAST8_MAX UINT32_MAX -#endif /* __INT32_TYPE__ */ - -#ifdef __INT_LEAST32_MIN -# define INT_LEAST32_MIN __INT_LEAST32_MIN -# define INT_LEAST32_MAX __INT_LEAST32_MAX -# define UINT_LEAST32_MAX __UINT_LEAST32_MAX -# define INT_FAST32_MIN __INT_LEAST32_MIN -# define INT_FAST32_MAX __INT_LEAST32_MAX -# define UINT_FAST32_MAX __UINT_LEAST32_MAX -#endif /* __INT_LEAST32_MIN */ - - -#ifdef __INT24_TYPE__ -# define INT24_MAX INT24_C(8388607) -# define INT24_MIN (-INT24_C(8388607)-1) -# define UINT24_MAX UINT24_C(16777215) -# define INT_LEAST24_MIN INT24_MIN -# define INT_LEAST24_MAX INT24_MAX -# define UINT_LEAST24_MAX UINT24_MAX -# define INT_FAST24_MIN INT24_MIN -# define INT_FAST24_MAX INT24_MAX -# define UINT_FAST24_MAX UINT24_MAX -# define __INT_LEAST16_MIN INT24_MIN -# define __INT_LEAST16_MAX INT24_MAX -# define __UINT_LEAST16_MAX UINT24_MAX -# define __INT_LEAST8_MIN INT24_MIN -# define __INT_LEAST8_MAX INT24_MAX -# define __UINT_LEAST8_MAX UINT24_MAX -#endif /* __INT24_TYPE__ */ - - -#ifdef __INT16_TYPE__ -#define INT16_MAX INT16_C(32767) -#define INT16_MIN (-INT16_C(32767)-1) -#define UINT16_MAX UINT16_C(65535) -# define __INT_LEAST16_MIN INT16_MIN -# define __INT_LEAST16_MAX INT16_MAX -# define __UINT_LEAST16_MAX UINT16_MAX -# define __INT_LEAST8_MIN INT16_MIN -# define __INT_LEAST8_MAX INT16_MAX -# define __UINT_LEAST8_MAX UINT16_MAX -#endif /* __INT16_TYPE__ */ - -#ifdef __INT_LEAST16_MIN -# define INT_LEAST16_MIN __INT_LEAST16_MIN -# define INT_LEAST16_MAX __INT_LEAST16_MAX -# define UINT_LEAST16_MAX __UINT_LEAST16_MAX -# define INT_FAST16_MIN __INT_LEAST16_MIN -# define INT_FAST16_MAX __INT_LEAST16_MAX -# define UINT_FAST16_MAX __UINT_LEAST16_MAX -#endif /* __INT_LEAST16_MIN */ - - -#ifdef __INT8_TYPE__ -# define INT8_MAX INT8_C(127) -# define INT8_MIN (-INT8_C(127)-1) -# define UINT8_MAX UINT8_C(255) -# define __INT_LEAST8_MIN INT8_MIN -# define __INT_LEAST8_MAX INT8_MAX -# define __UINT_LEAST8_MAX UINT8_MAX -#endif /* __INT8_TYPE__ */ - -#ifdef __INT_LEAST8_MIN -# define INT_LEAST8_MIN __INT_LEAST8_MIN -# define INT_LEAST8_MAX __INT_LEAST8_MAX -# define UINT_LEAST8_MAX __UINT_LEAST8_MAX -# define INT_FAST8_MIN __INT_LEAST8_MIN -# define INT_FAST8_MAX __INT_LEAST8_MAX -# define UINT_FAST8_MAX __UINT_LEAST8_MAX -#endif /* __INT_LEAST8_MIN */ - -/* Some utility macros */ -#define __INTN_MIN(n) __stdint_join3( INT, n, _MIN) -#define __INTN_MAX(n) __stdint_join3( INT, n, _MAX) -#define __UINTN_MAX(n) __stdint_join3(UINT, n, _MAX) -#define __INTN_C(n, v) __stdint_join3( INT, n, _C(v)) -#define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v)) - -/* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */ -/* C99 7.18.3 Limits of other integer types. */ - -#define INTPTR_MIN __INTN_MIN(__INTPTR_WIDTH__) -#define INTPTR_MAX __INTN_MAX(__INTPTR_WIDTH__) -#define UINTPTR_MAX __UINTN_MAX(__INTPTR_WIDTH__) -#define PTRDIFF_MIN __INTN_MIN(__PTRDIFF_WIDTH__) -#define PTRDIFF_MAX __INTN_MAX(__PTRDIFF_WIDTH__) -#define SIZE_MAX __UINTN_MAX(__SIZE_WIDTH__) - -/* ISO9899:2011 7.20 (C11 Annex K): Define RSIZE_MAX if __STDC_WANT_LIB_EXT1__ - * is enabled. */ -#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 -#define RSIZE_MAX (SIZE_MAX >> 1) -#endif - -/* C99 7.18.2.5 Limits of greatest-width integer types. */ -#define INTMAX_MIN __INTN_MIN(__INTMAX_WIDTH__) -#define INTMAX_MAX __INTN_MAX(__INTMAX_WIDTH__) -#define UINTMAX_MAX __UINTN_MAX(__INTMAX_WIDTH__) - -/* C99 7.18.3 Limits of other integer types. */ -#define SIG_ATOMIC_MIN __INTN_MIN(__SIG_ATOMIC_WIDTH__) -#define SIG_ATOMIC_MAX __INTN_MAX(__SIG_ATOMIC_WIDTH__) -#ifdef __WINT_UNSIGNED__ -# define WINT_MIN __UINTN_C(__WINT_WIDTH__, 0) -# define WINT_MAX __UINTN_MAX(__WINT_WIDTH__) -#else -# define WINT_MIN __INTN_MIN(__WINT_WIDTH__) -# define WINT_MAX __INTN_MAX(__WINT_WIDTH__) -#endif - -#ifndef WCHAR_MAX -# define WCHAR_MAX __WCHAR_MAX__ -#endif -#ifndef WCHAR_MIN -# if __WCHAR_MAX__ == __INTN_MAX(__WCHAR_WIDTH__) -# define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__) -# else -# define WCHAR_MIN __UINTN_C(__WCHAR_WIDTH__, 0) -# endif -#endif - -/* 7.18.4.2 Macros for greatest-width integer constants. */ -#define INTMAX_C(v) __INTN_C(__INTMAX_WIDTH__, v) -#define UINTMAX_C(v) __UINTN_C(__INTMAX_WIDTH__, v) - -#endif /* __STDC_HOSTED__ */ -#endif /* __CLANG_STDINT_H */ diff --git a/External/CastXML/share/castxml/clang/include/stdnoreturn.h b/External/CastXML/share/castxml/clang/include/stdnoreturn.h deleted file mode 100644 index a7a301d7e..000000000 --- a/External/CastXML/share/castxml/clang/include/stdnoreturn.h +++ /dev/null @@ -1,30 +0,0 @@ -/*===---- stdnoreturn.h - Standard header for noreturn macro ---------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __STDNORETURN_H -#define __STDNORETURN_H - -#define noreturn _Noreturn -#define __noreturn_is_defined 1 - -#endif /* __STDNORETURN_H */ diff --git a/External/CastXML/share/castxml/clang/include/tbmintrin.h b/External/CastXML/share/castxml/clang/include/tbmintrin.h deleted file mode 100644 index 62f613f9e..000000000 --- a/External/CastXML/share/castxml/clang/include/tbmintrin.h +++ /dev/null @@ -1,150 +0,0 @@ -/*===---- tbmintrin.h - TBM intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __TBMINTRIN_H -#define __TBMINTRIN_H - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("tbm"))) - -#define __bextri_u32(a, b) (__builtin_ia32_bextri_u32((a), (b))) - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blcfill_u32(unsigned int a) -{ - return a & (a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blci_u32(unsigned int a) -{ - return a | ~(a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blcic_u32(unsigned int a) -{ - return ~a & (a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blcmsk_u32(unsigned int a) -{ - return a ^ (a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blcs_u32(unsigned int a) -{ - return a | (a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blsfill_u32(unsigned int a) -{ - return a | (a - 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__blsic_u32(unsigned int a) -{ - return ~a | (a - 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__t1mskc_u32(unsigned int a) -{ - return ~a | (a + 1); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -__tzmsk_u32(unsigned int a) -{ - return ~a & (a - 1); -} - -#ifdef __x86_64__ -#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (int)(b))) - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blcfill_u64(unsigned long long a) -{ - return a & (a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blci_u64(unsigned long long a) -{ - return a | ~(a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blcic_u64(unsigned long long a) -{ - return ~a & (a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blcmsk_u64(unsigned long long a) -{ - return a ^ (a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blcs_u64(unsigned long long a) -{ - return a | (a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blsfill_u64(unsigned long long a) -{ - return a | (a - 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__blsic_u64(unsigned long long a) -{ - return ~a | (a - 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__t1mskc_u64(unsigned long long a) -{ - return ~a | (a + 1); -} - -static __inline__ unsigned long long __DEFAULT_FN_ATTRS -__tzmsk_u64(unsigned long long a) -{ - return ~a & (a - 1); -} -#endif - -#undef __DEFAULT_FN_ATTRS - -#endif /* __TBMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/tgmath.h b/External/CastXML/share/castxml/clang/include/tgmath.h deleted file mode 100644 index a48e267e6..000000000 --- a/External/CastXML/share/castxml/clang/include/tgmath.h +++ /dev/null @@ -1,1374 +0,0 @@ -/*===---- tgmath.h - Standard header for type generic math ----------------===*\ - * - * Copyright (c) 2009 Howard Hinnant - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * -\*===----------------------------------------------------------------------===*/ - -#ifndef __TGMATH_H -#define __TGMATH_H - -/* C99 7.22 Type-generic math . */ -#include - -/* C++ handles type genericity with overloading in math.h. */ -#ifndef __cplusplus -#include - -#define _TG_ATTRSp __attribute__((__overloadable__)) -#define _TG_ATTRS __attribute__((__overloadable__, __always_inline__)) - -// promotion - -typedef void _Argument_type_is_not_arithmetic; -static _Argument_type_is_not_arithmetic __tg_promote(...) - __attribute__((__unavailable__,__overloadable__)); -static double _TG_ATTRSp __tg_promote(int); -static double _TG_ATTRSp __tg_promote(unsigned int); -static double _TG_ATTRSp __tg_promote(long); -static double _TG_ATTRSp __tg_promote(unsigned long); -static double _TG_ATTRSp __tg_promote(long long); -static double _TG_ATTRSp __tg_promote(unsigned long long); -static float _TG_ATTRSp __tg_promote(float); -static double _TG_ATTRSp __tg_promote(double); -static long double _TG_ATTRSp __tg_promote(long double); -static float _Complex _TG_ATTRSp __tg_promote(float _Complex); -static double _Complex _TG_ATTRSp __tg_promote(double _Complex); -static long double _Complex _TG_ATTRSp __tg_promote(long double _Complex); - -#define __tg_promote1(__x) (__typeof__(__tg_promote(__x))) -#define __tg_promote2(__x, __y) (__typeof__(__tg_promote(__x) + \ - __tg_promote(__y))) -#define __tg_promote3(__x, __y, __z) (__typeof__(__tg_promote(__x) + \ - __tg_promote(__y) + \ - __tg_promote(__z))) - -// acos - -static float - _TG_ATTRS - __tg_acos(float __x) {return acosf(__x);} - -static double - _TG_ATTRS - __tg_acos(double __x) {return acos(__x);} - -static long double - _TG_ATTRS - __tg_acos(long double __x) {return acosl(__x);} - -static float _Complex - _TG_ATTRS - __tg_acos(float _Complex __x) {return cacosf(__x);} - -static double _Complex - _TG_ATTRS - __tg_acos(double _Complex __x) {return cacos(__x);} - -static long double _Complex - _TG_ATTRS - __tg_acos(long double _Complex __x) {return cacosl(__x);} - -#undef acos -#define acos(__x) __tg_acos(__tg_promote1((__x))(__x)) - -// asin - -static float - _TG_ATTRS - __tg_asin(float __x) {return asinf(__x);} - -static double - _TG_ATTRS - __tg_asin(double __x) {return asin(__x);} - -static long double - _TG_ATTRS - __tg_asin(long double __x) {return asinl(__x);} - -static float _Complex - _TG_ATTRS - __tg_asin(float _Complex __x) {return casinf(__x);} - -static double _Complex - _TG_ATTRS - __tg_asin(double _Complex __x) {return casin(__x);} - -static long double _Complex - _TG_ATTRS - __tg_asin(long double _Complex __x) {return casinl(__x);} - -#undef asin -#define asin(__x) __tg_asin(__tg_promote1((__x))(__x)) - -// atan - -static float - _TG_ATTRS - __tg_atan(float __x) {return atanf(__x);} - -static double - _TG_ATTRS - __tg_atan(double __x) {return atan(__x);} - -static long double - _TG_ATTRS - __tg_atan(long double __x) {return atanl(__x);} - -static float _Complex - _TG_ATTRS - __tg_atan(float _Complex __x) {return catanf(__x);} - -static double _Complex - _TG_ATTRS - __tg_atan(double _Complex __x) {return catan(__x);} - -static long double _Complex - _TG_ATTRS - __tg_atan(long double _Complex __x) {return catanl(__x);} - -#undef atan -#define atan(__x) __tg_atan(__tg_promote1((__x))(__x)) - -// acosh - -static float - _TG_ATTRS - __tg_acosh(float __x) {return acoshf(__x);} - -static double - _TG_ATTRS - __tg_acosh(double __x) {return acosh(__x);} - -static long double - _TG_ATTRS - __tg_acosh(long double __x) {return acoshl(__x);} - -static float _Complex - _TG_ATTRS - __tg_acosh(float _Complex __x) {return cacoshf(__x);} - -static double _Complex - _TG_ATTRS - __tg_acosh(double _Complex __x) {return cacosh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_acosh(long double _Complex __x) {return cacoshl(__x);} - -#undef acosh -#define acosh(__x) __tg_acosh(__tg_promote1((__x))(__x)) - -// asinh - -static float - _TG_ATTRS - __tg_asinh(float __x) {return asinhf(__x);} - -static double - _TG_ATTRS - __tg_asinh(double __x) {return asinh(__x);} - -static long double - _TG_ATTRS - __tg_asinh(long double __x) {return asinhl(__x);} - -static float _Complex - _TG_ATTRS - __tg_asinh(float _Complex __x) {return casinhf(__x);} - -static double _Complex - _TG_ATTRS - __tg_asinh(double _Complex __x) {return casinh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_asinh(long double _Complex __x) {return casinhl(__x);} - -#undef asinh -#define asinh(__x) __tg_asinh(__tg_promote1((__x))(__x)) - -// atanh - -static float - _TG_ATTRS - __tg_atanh(float __x) {return atanhf(__x);} - -static double - _TG_ATTRS - __tg_atanh(double __x) {return atanh(__x);} - -static long double - _TG_ATTRS - __tg_atanh(long double __x) {return atanhl(__x);} - -static float _Complex - _TG_ATTRS - __tg_atanh(float _Complex __x) {return catanhf(__x);} - -static double _Complex - _TG_ATTRS - __tg_atanh(double _Complex __x) {return catanh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_atanh(long double _Complex __x) {return catanhl(__x);} - -#undef atanh -#define atanh(__x) __tg_atanh(__tg_promote1((__x))(__x)) - -// cos - -static float - _TG_ATTRS - __tg_cos(float __x) {return cosf(__x);} - -static double - _TG_ATTRS - __tg_cos(double __x) {return cos(__x);} - -static long double - _TG_ATTRS - __tg_cos(long double __x) {return cosl(__x);} - -static float _Complex - _TG_ATTRS - __tg_cos(float _Complex __x) {return ccosf(__x);} - -static double _Complex - _TG_ATTRS - __tg_cos(double _Complex __x) {return ccos(__x);} - -static long double _Complex - _TG_ATTRS - __tg_cos(long double _Complex __x) {return ccosl(__x);} - -#undef cos -#define cos(__x) __tg_cos(__tg_promote1((__x))(__x)) - -// sin - -static float - _TG_ATTRS - __tg_sin(float __x) {return sinf(__x);} - -static double - _TG_ATTRS - __tg_sin(double __x) {return sin(__x);} - -static long double - _TG_ATTRS - __tg_sin(long double __x) {return sinl(__x);} - -static float _Complex - _TG_ATTRS - __tg_sin(float _Complex __x) {return csinf(__x);} - -static double _Complex - _TG_ATTRS - __tg_sin(double _Complex __x) {return csin(__x);} - -static long double _Complex - _TG_ATTRS - __tg_sin(long double _Complex __x) {return csinl(__x);} - -#undef sin -#define sin(__x) __tg_sin(__tg_promote1((__x))(__x)) - -// tan - -static float - _TG_ATTRS - __tg_tan(float __x) {return tanf(__x);} - -static double - _TG_ATTRS - __tg_tan(double __x) {return tan(__x);} - -static long double - _TG_ATTRS - __tg_tan(long double __x) {return tanl(__x);} - -static float _Complex - _TG_ATTRS - __tg_tan(float _Complex __x) {return ctanf(__x);} - -static double _Complex - _TG_ATTRS - __tg_tan(double _Complex __x) {return ctan(__x);} - -static long double _Complex - _TG_ATTRS - __tg_tan(long double _Complex __x) {return ctanl(__x);} - -#undef tan -#define tan(__x) __tg_tan(__tg_promote1((__x))(__x)) - -// cosh - -static float - _TG_ATTRS - __tg_cosh(float __x) {return coshf(__x);} - -static double - _TG_ATTRS - __tg_cosh(double __x) {return cosh(__x);} - -static long double - _TG_ATTRS - __tg_cosh(long double __x) {return coshl(__x);} - -static float _Complex - _TG_ATTRS - __tg_cosh(float _Complex __x) {return ccoshf(__x);} - -static double _Complex - _TG_ATTRS - __tg_cosh(double _Complex __x) {return ccosh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_cosh(long double _Complex __x) {return ccoshl(__x);} - -#undef cosh -#define cosh(__x) __tg_cosh(__tg_promote1((__x))(__x)) - -// sinh - -static float - _TG_ATTRS - __tg_sinh(float __x) {return sinhf(__x);} - -static double - _TG_ATTRS - __tg_sinh(double __x) {return sinh(__x);} - -static long double - _TG_ATTRS - __tg_sinh(long double __x) {return sinhl(__x);} - -static float _Complex - _TG_ATTRS - __tg_sinh(float _Complex __x) {return csinhf(__x);} - -static double _Complex - _TG_ATTRS - __tg_sinh(double _Complex __x) {return csinh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_sinh(long double _Complex __x) {return csinhl(__x);} - -#undef sinh -#define sinh(__x) __tg_sinh(__tg_promote1((__x))(__x)) - -// tanh - -static float - _TG_ATTRS - __tg_tanh(float __x) {return tanhf(__x);} - -static double - _TG_ATTRS - __tg_tanh(double __x) {return tanh(__x);} - -static long double - _TG_ATTRS - __tg_tanh(long double __x) {return tanhl(__x);} - -static float _Complex - _TG_ATTRS - __tg_tanh(float _Complex __x) {return ctanhf(__x);} - -static double _Complex - _TG_ATTRS - __tg_tanh(double _Complex __x) {return ctanh(__x);} - -static long double _Complex - _TG_ATTRS - __tg_tanh(long double _Complex __x) {return ctanhl(__x);} - -#undef tanh -#define tanh(__x) __tg_tanh(__tg_promote1((__x))(__x)) - -// exp - -static float - _TG_ATTRS - __tg_exp(float __x) {return expf(__x);} - -static double - _TG_ATTRS - __tg_exp(double __x) {return exp(__x);} - -static long double - _TG_ATTRS - __tg_exp(long double __x) {return expl(__x);} - -static float _Complex - _TG_ATTRS - __tg_exp(float _Complex __x) {return cexpf(__x);} - -static double _Complex - _TG_ATTRS - __tg_exp(double _Complex __x) {return cexp(__x);} - -static long double _Complex - _TG_ATTRS - __tg_exp(long double _Complex __x) {return cexpl(__x);} - -#undef exp -#define exp(__x) __tg_exp(__tg_promote1((__x))(__x)) - -// log - -static float - _TG_ATTRS - __tg_log(float __x) {return logf(__x);} - -static double - _TG_ATTRS - __tg_log(double __x) {return log(__x);} - -static long double - _TG_ATTRS - __tg_log(long double __x) {return logl(__x);} - -static float _Complex - _TG_ATTRS - __tg_log(float _Complex __x) {return clogf(__x);} - -static double _Complex - _TG_ATTRS - __tg_log(double _Complex __x) {return clog(__x);} - -static long double _Complex - _TG_ATTRS - __tg_log(long double _Complex __x) {return clogl(__x);} - -#undef log -#define log(__x) __tg_log(__tg_promote1((__x))(__x)) - -// pow - -static float - _TG_ATTRS - __tg_pow(float __x, float __y) {return powf(__x, __y);} - -static double - _TG_ATTRS - __tg_pow(double __x, double __y) {return pow(__x, __y);} - -static long double - _TG_ATTRS - __tg_pow(long double __x, long double __y) {return powl(__x, __y);} - -static float _Complex - _TG_ATTRS - __tg_pow(float _Complex __x, float _Complex __y) {return cpowf(__x, __y);} - -static double _Complex - _TG_ATTRS - __tg_pow(double _Complex __x, double _Complex __y) {return cpow(__x, __y);} - -static long double _Complex - _TG_ATTRS - __tg_pow(long double _Complex __x, long double _Complex __y) - {return cpowl(__x, __y);} - -#undef pow -#define pow(__x, __y) __tg_pow(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// sqrt - -static float - _TG_ATTRS - __tg_sqrt(float __x) {return sqrtf(__x);} - -static double - _TG_ATTRS - __tg_sqrt(double __x) {return sqrt(__x);} - -static long double - _TG_ATTRS - __tg_sqrt(long double __x) {return sqrtl(__x);} - -static float _Complex - _TG_ATTRS - __tg_sqrt(float _Complex __x) {return csqrtf(__x);} - -static double _Complex - _TG_ATTRS - __tg_sqrt(double _Complex __x) {return csqrt(__x);} - -static long double _Complex - _TG_ATTRS - __tg_sqrt(long double _Complex __x) {return csqrtl(__x);} - -#undef sqrt -#define sqrt(__x) __tg_sqrt(__tg_promote1((__x))(__x)) - -// fabs - -static float - _TG_ATTRS - __tg_fabs(float __x) {return fabsf(__x);} - -static double - _TG_ATTRS - __tg_fabs(double __x) {return fabs(__x);} - -static long double - _TG_ATTRS - __tg_fabs(long double __x) {return fabsl(__x);} - -static float - _TG_ATTRS - __tg_fabs(float _Complex __x) {return cabsf(__x);} - -static double - _TG_ATTRS - __tg_fabs(double _Complex __x) {return cabs(__x);} - -static long double - _TG_ATTRS - __tg_fabs(long double _Complex __x) {return cabsl(__x);} - -#undef fabs -#define fabs(__x) __tg_fabs(__tg_promote1((__x))(__x)) - -// atan2 - -static float - _TG_ATTRS - __tg_atan2(float __x, float __y) {return atan2f(__x, __y);} - -static double - _TG_ATTRS - __tg_atan2(double __x, double __y) {return atan2(__x, __y);} - -static long double - _TG_ATTRS - __tg_atan2(long double __x, long double __y) {return atan2l(__x, __y);} - -#undef atan2 -#define atan2(__x, __y) __tg_atan2(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// cbrt - -static float - _TG_ATTRS - __tg_cbrt(float __x) {return cbrtf(__x);} - -static double - _TG_ATTRS - __tg_cbrt(double __x) {return cbrt(__x);} - -static long double - _TG_ATTRS - __tg_cbrt(long double __x) {return cbrtl(__x);} - -#undef cbrt -#define cbrt(__x) __tg_cbrt(__tg_promote1((__x))(__x)) - -// ceil - -static float - _TG_ATTRS - __tg_ceil(float __x) {return ceilf(__x);} - -static double - _TG_ATTRS - __tg_ceil(double __x) {return ceil(__x);} - -static long double - _TG_ATTRS - __tg_ceil(long double __x) {return ceill(__x);} - -#undef ceil -#define ceil(__x) __tg_ceil(__tg_promote1((__x))(__x)) - -// copysign - -static float - _TG_ATTRS - __tg_copysign(float __x, float __y) {return copysignf(__x, __y);} - -static double - _TG_ATTRS - __tg_copysign(double __x, double __y) {return copysign(__x, __y);} - -static long double - _TG_ATTRS - __tg_copysign(long double __x, long double __y) {return copysignl(__x, __y);} - -#undef copysign -#define copysign(__x, __y) __tg_copysign(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// erf - -static float - _TG_ATTRS - __tg_erf(float __x) {return erff(__x);} - -static double - _TG_ATTRS - __tg_erf(double __x) {return erf(__x);} - -static long double - _TG_ATTRS - __tg_erf(long double __x) {return erfl(__x);} - -#undef erf -#define erf(__x) __tg_erf(__tg_promote1((__x))(__x)) - -// erfc - -static float - _TG_ATTRS - __tg_erfc(float __x) {return erfcf(__x);} - -static double - _TG_ATTRS - __tg_erfc(double __x) {return erfc(__x);} - -static long double - _TG_ATTRS - __tg_erfc(long double __x) {return erfcl(__x);} - -#undef erfc -#define erfc(__x) __tg_erfc(__tg_promote1((__x))(__x)) - -// exp2 - -static float - _TG_ATTRS - __tg_exp2(float __x) {return exp2f(__x);} - -static double - _TG_ATTRS - __tg_exp2(double __x) {return exp2(__x);} - -static long double - _TG_ATTRS - __tg_exp2(long double __x) {return exp2l(__x);} - -#undef exp2 -#define exp2(__x) __tg_exp2(__tg_promote1((__x))(__x)) - -// expm1 - -static float - _TG_ATTRS - __tg_expm1(float __x) {return expm1f(__x);} - -static double - _TG_ATTRS - __tg_expm1(double __x) {return expm1(__x);} - -static long double - _TG_ATTRS - __tg_expm1(long double __x) {return expm1l(__x);} - -#undef expm1 -#define expm1(__x) __tg_expm1(__tg_promote1((__x))(__x)) - -// fdim - -static float - _TG_ATTRS - __tg_fdim(float __x, float __y) {return fdimf(__x, __y);} - -static double - _TG_ATTRS - __tg_fdim(double __x, double __y) {return fdim(__x, __y);} - -static long double - _TG_ATTRS - __tg_fdim(long double __x, long double __y) {return fdiml(__x, __y);} - -#undef fdim -#define fdim(__x, __y) __tg_fdim(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// floor - -static float - _TG_ATTRS - __tg_floor(float __x) {return floorf(__x);} - -static double - _TG_ATTRS - __tg_floor(double __x) {return floor(__x);} - -static long double - _TG_ATTRS - __tg_floor(long double __x) {return floorl(__x);} - -#undef floor -#define floor(__x) __tg_floor(__tg_promote1((__x))(__x)) - -// fma - -static float - _TG_ATTRS - __tg_fma(float __x, float __y, float __z) - {return fmaf(__x, __y, __z);} - -static double - _TG_ATTRS - __tg_fma(double __x, double __y, double __z) - {return fma(__x, __y, __z);} - -static long double - _TG_ATTRS - __tg_fma(long double __x,long double __y, long double __z) - {return fmal(__x, __y, __z);} - -#undef fma -#define fma(__x, __y, __z) \ - __tg_fma(__tg_promote3((__x), (__y), (__z))(__x), \ - __tg_promote3((__x), (__y), (__z))(__y), \ - __tg_promote3((__x), (__y), (__z))(__z)) - -// fmax - -static float - _TG_ATTRS - __tg_fmax(float __x, float __y) {return fmaxf(__x, __y);} - -static double - _TG_ATTRS - __tg_fmax(double __x, double __y) {return fmax(__x, __y);} - -static long double - _TG_ATTRS - __tg_fmax(long double __x, long double __y) {return fmaxl(__x, __y);} - -#undef fmax -#define fmax(__x, __y) __tg_fmax(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// fmin - -static float - _TG_ATTRS - __tg_fmin(float __x, float __y) {return fminf(__x, __y);} - -static double - _TG_ATTRS - __tg_fmin(double __x, double __y) {return fmin(__x, __y);} - -static long double - _TG_ATTRS - __tg_fmin(long double __x, long double __y) {return fminl(__x, __y);} - -#undef fmin -#define fmin(__x, __y) __tg_fmin(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// fmod - -static float - _TG_ATTRS - __tg_fmod(float __x, float __y) {return fmodf(__x, __y);} - -static double - _TG_ATTRS - __tg_fmod(double __x, double __y) {return fmod(__x, __y);} - -static long double - _TG_ATTRS - __tg_fmod(long double __x, long double __y) {return fmodl(__x, __y);} - -#undef fmod -#define fmod(__x, __y) __tg_fmod(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// frexp - -static float - _TG_ATTRS - __tg_frexp(float __x, int* __y) {return frexpf(__x, __y);} - -static double - _TG_ATTRS - __tg_frexp(double __x, int* __y) {return frexp(__x, __y);} - -static long double - _TG_ATTRS - __tg_frexp(long double __x, int* __y) {return frexpl(__x, __y);} - -#undef frexp -#define frexp(__x, __y) __tg_frexp(__tg_promote1((__x))(__x), __y) - -// hypot - -static float - _TG_ATTRS - __tg_hypot(float __x, float __y) {return hypotf(__x, __y);} - -static double - _TG_ATTRS - __tg_hypot(double __x, double __y) {return hypot(__x, __y);} - -static long double - _TG_ATTRS - __tg_hypot(long double __x, long double __y) {return hypotl(__x, __y);} - -#undef hypot -#define hypot(__x, __y) __tg_hypot(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// ilogb - -static int - _TG_ATTRS - __tg_ilogb(float __x) {return ilogbf(__x);} - -static int - _TG_ATTRS - __tg_ilogb(double __x) {return ilogb(__x);} - -static int - _TG_ATTRS - __tg_ilogb(long double __x) {return ilogbl(__x);} - -#undef ilogb -#define ilogb(__x) __tg_ilogb(__tg_promote1((__x))(__x)) - -// ldexp - -static float - _TG_ATTRS - __tg_ldexp(float __x, int __y) {return ldexpf(__x, __y);} - -static double - _TG_ATTRS - __tg_ldexp(double __x, int __y) {return ldexp(__x, __y);} - -static long double - _TG_ATTRS - __tg_ldexp(long double __x, int __y) {return ldexpl(__x, __y);} - -#undef ldexp -#define ldexp(__x, __y) __tg_ldexp(__tg_promote1((__x))(__x), __y) - -// lgamma - -static float - _TG_ATTRS - __tg_lgamma(float __x) {return lgammaf(__x);} - -static double - _TG_ATTRS - __tg_lgamma(double __x) {return lgamma(__x);} - -static long double - _TG_ATTRS - __tg_lgamma(long double __x) {return lgammal(__x);} - -#undef lgamma -#define lgamma(__x) __tg_lgamma(__tg_promote1((__x))(__x)) - -// llrint - -static long long - _TG_ATTRS - __tg_llrint(float __x) {return llrintf(__x);} - -static long long - _TG_ATTRS - __tg_llrint(double __x) {return llrint(__x);} - -static long long - _TG_ATTRS - __tg_llrint(long double __x) {return llrintl(__x);} - -#undef llrint -#define llrint(__x) __tg_llrint(__tg_promote1((__x))(__x)) - -// llround - -static long long - _TG_ATTRS - __tg_llround(float __x) {return llroundf(__x);} - -static long long - _TG_ATTRS - __tg_llround(double __x) {return llround(__x);} - -static long long - _TG_ATTRS - __tg_llround(long double __x) {return llroundl(__x);} - -#undef llround -#define llround(__x) __tg_llround(__tg_promote1((__x))(__x)) - -// log10 - -static float - _TG_ATTRS - __tg_log10(float __x) {return log10f(__x);} - -static double - _TG_ATTRS - __tg_log10(double __x) {return log10(__x);} - -static long double - _TG_ATTRS - __tg_log10(long double __x) {return log10l(__x);} - -#undef log10 -#define log10(__x) __tg_log10(__tg_promote1((__x))(__x)) - -// log1p - -static float - _TG_ATTRS - __tg_log1p(float __x) {return log1pf(__x);} - -static double - _TG_ATTRS - __tg_log1p(double __x) {return log1p(__x);} - -static long double - _TG_ATTRS - __tg_log1p(long double __x) {return log1pl(__x);} - -#undef log1p -#define log1p(__x) __tg_log1p(__tg_promote1((__x))(__x)) - -// log2 - -static float - _TG_ATTRS - __tg_log2(float __x) {return log2f(__x);} - -static double - _TG_ATTRS - __tg_log2(double __x) {return log2(__x);} - -static long double - _TG_ATTRS - __tg_log2(long double __x) {return log2l(__x);} - -#undef log2 -#define log2(__x) __tg_log2(__tg_promote1((__x))(__x)) - -// logb - -static float - _TG_ATTRS - __tg_logb(float __x) {return logbf(__x);} - -static double - _TG_ATTRS - __tg_logb(double __x) {return logb(__x);} - -static long double - _TG_ATTRS - __tg_logb(long double __x) {return logbl(__x);} - -#undef logb -#define logb(__x) __tg_logb(__tg_promote1((__x))(__x)) - -// lrint - -static long - _TG_ATTRS - __tg_lrint(float __x) {return lrintf(__x);} - -static long - _TG_ATTRS - __tg_lrint(double __x) {return lrint(__x);} - -static long - _TG_ATTRS - __tg_lrint(long double __x) {return lrintl(__x);} - -#undef lrint -#define lrint(__x) __tg_lrint(__tg_promote1((__x))(__x)) - -// lround - -static long - _TG_ATTRS - __tg_lround(float __x) {return lroundf(__x);} - -static long - _TG_ATTRS - __tg_lround(double __x) {return lround(__x);} - -static long - _TG_ATTRS - __tg_lround(long double __x) {return lroundl(__x);} - -#undef lround -#define lround(__x) __tg_lround(__tg_promote1((__x))(__x)) - -// nearbyint - -static float - _TG_ATTRS - __tg_nearbyint(float __x) {return nearbyintf(__x);} - -static double - _TG_ATTRS - __tg_nearbyint(double __x) {return nearbyint(__x);} - -static long double - _TG_ATTRS - __tg_nearbyint(long double __x) {return nearbyintl(__x);} - -#undef nearbyint -#define nearbyint(__x) __tg_nearbyint(__tg_promote1((__x))(__x)) - -// nextafter - -static float - _TG_ATTRS - __tg_nextafter(float __x, float __y) {return nextafterf(__x, __y);} - -static double - _TG_ATTRS - __tg_nextafter(double __x, double __y) {return nextafter(__x, __y);} - -static long double - _TG_ATTRS - __tg_nextafter(long double __x, long double __y) {return nextafterl(__x, __y);} - -#undef nextafter -#define nextafter(__x, __y) __tg_nextafter(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// nexttoward - -static float - _TG_ATTRS - __tg_nexttoward(float __x, long double __y) {return nexttowardf(__x, __y);} - -static double - _TG_ATTRS - __tg_nexttoward(double __x, long double __y) {return nexttoward(__x, __y);} - -static long double - _TG_ATTRS - __tg_nexttoward(long double __x, long double __y) {return nexttowardl(__x, __y);} - -#undef nexttoward -#define nexttoward(__x, __y) __tg_nexttoward(__tg_promote1((__x))(__x), (__y)) - -// remainder - -static float - _TG_ATTRS - __tg_remainder(float __x, float __y) {return remainderf(__x, __y);} - -static double - _TG_ATTRS - __tg_remainder(double __x, double __y) {return remainder(__x, __y);} - -static long double - _TG_ATTRS - __tg_remainder(long double __x, long double __y) {return remainderl(__x, __y);} - -#undef remainder -#define remainder(__x, __y) __tg_remainder(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) - -// remquo - -static float - _TG_ATTRS - __tg_remquo(float __x, float __y, int* __z) - {return remquof(__x, __y, __z);} - -static double - _TG_ATTRS - __tg_remquo(double __x, double __y, int* __z) - {return remquo(__x, __y, __z);} - -static long double - _TG_ATTRS - __tg_remquo(long double __x,long double __y, int* __z) - {return remquol(__x, __y, __z);} - -#undef remquo -#define remquo(__x, __y, __z) \ - __tg_remquo(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y), \ - (__z)) - -// rint - -static float - _TG_ATTRS - __tg_rint(float __x) {return rintf(__x);} - -static double - _TG_ATTRS - __tg_rint(double __x) {return rint(__x);} - -static long double - _TG_ATTRS - __tg_rint(long double __x) {return rintl(__x);} - -#undef rint -#define rint(__x) __tg_rint(__tg_promote1((__x))(__x)) - -// round - -static float - _TG_ATTRS - __tg_round(float __x) {return roundf(__x);} - -static double - _TG_ATTRS - __tg_round(double __x) {return round(__x);} - -static long double - _TG_ATTRS - __tg_round(long double __x) {return roundl(__x);} - -#undef round -#define round(__x) __tg_round(__tg_promote1((__x))(__x)) - -// scalbn - -static float - _TG_ATTRS - __tg_scalbn(float __x, int __y) {return scalbnf(__x, __y);} - -static double - _TG_ATTRS - __tg_scalbn(double __x, int __y) {return scalbn(__x, __y);} - -static long double - _TG_ATTRS - __tg_scalbn(long double __x, int __y) {return scalbnl(__x, __y);} - -#undef scalbn -#define scalbn(__x, __y) __tg_scalbn(__tg_promote1((__x))(__x), __y) - -// scalbln - -static float - _TG_ATTRS - __tg_scalbln(float __x, long __y) {return scalblnf(__x, __y);} - -static double - _TG_ATTRS - __tg_scalbln(double __x, long __y) {return scalbln(__x, __y);} - -static long double - _TG_ATTRS - __tg_scalbln(long double __x, long __y) {return scalblnl(__x, __y);} - -#undef scalbln -#define scalbln(__x, __y) __tg_scalbln(__tg_promote1((__x))(__x), __y) - -// tgamma - -static float - _TG_ATTRS - __tg_tgamma(float __x) {return tgammaf(__x);} - -static double - _TG_ATTRS - __tg_tgamma(double __x) {return tgamma(__x);} - -static long double - _TG_ATTRS - __tg_tgamma(long double __x) {return tgammal(__x);} - -#undef tgamma -#define tgamma(__x) __tg_tgamma(__tg_promote1((__x))(__x)) - -// trunc - -static float - _TG_ATTRS - __tg_trunc(float __x) {return truncf(__x);} - -static double - _TG_ATTRS - __tg_trunc(double __x) {return trunc(__x);} - -static long double - _TG_ATTRS - __tg_trunc(long double __x) {return truncl(__x);} - -#undef trunc -#define trunc(__x) __tg_trunc(__tg_promote1((__x))(__x)) - -// carg - -static float - _TG_ATTRS - __tg_carg(float __x) {return atan2f(0.F, __x);} - -static double - _TG_ATTRS - __tg_carg(double __x) {return atan2(0., __x);} - -static long double - _TG_ATTRS - __tg_carg(long double __x) {return atan2l(0.L, __x);} - -static float - _TG_ATTRS - __tg_carg(float _Complex __x) {return cargf(__x);} - -static double - _TG_ATTRS - __tg_carg(double _Complex __x) {return carg(__x);} - -static long double - _TG_ATTRS - __tg_carg(long double _Complex __x) {return cargl(__x);} - -#undef carg -#define carg(__x) __tg_carg(__tg_promote1((__x))(__x)) - -// cimag - -static float - _TG_ATTRS - __tg_cimag(float __x) {return 0;} - -static double - _TG_ATTRS - __tg_cimag(double __x) {return 0;} - -static long double - _TG_ATTRS - __tg_cimag(long double __x) {return 0;} - -static float - _TG_ATTRS - __tg_cimag(float _Complex __x) {return cimagf(__x);} - -static double - _TG_ATTRS - __tg_cimag(double _Complex __x) {return cimag(__x);} - -static long double - _TG_ATTRS - __tg_cimag(long double _Complex __x) {return cimagl(__x);} - -#undef cimag -#define cimag(__x) __tg_cimag(__tg_promote1((__x))(__x)) - -// conj - -static float _Complex - _TG_ATTRS - __tg_conj(float __x) {return __x;} - -static double _Complex - _TG_ATTRS - __tg_conj(double __x) {return __x;} - -static long double _Complex - _TG_ATTRS - __tg_conj(long double __x) {return __x;} - -static float _Complex - _TG_ATTRS - __tg_conj(float _Complex __x) {return conjf(__x);} - -static double _Complex - _TG_ATTRS - __tg_conj(double _Complex __x) {return conj(__x);} - -static long double _Complex - _TG_ATTRS - __tg_conj(long double _Complex __x) {return conjl(__x);} - -#undef conj -#define conj(__x) __tg_conj(__tg_promote1((__x))(__x)) - -// cproj - -static float _Complex - _TG_ATTRS - __tg_cproj(float __x) {return cprojf(__x);} - -static double _Complex - _TG_ATTRS - __tg_cproj(double __x) {return cproj(__x);} - -static long double _Complex - _TG_ATTRS - __tg_cproj(long double __x) {return cprojl(__x);} - -static float _Complex - _TG_ATTRS - __tg_cproj(float _Complex __x) {return cprojf(__x);} - -static double _Complex - _TG_ATTRS - __tg_cproj(double _Complex __x) {return cproj(__x);} - -static long double _Complex - _TG_ATTRS - __tg_cproj(long double _Complex __x) {return cprojl(__x);} - -#undef cproj -#define cproj(__x) __tg_cproj(__tg_promote1((__x))(__x)) - -// creal - -static float - _TG_ATTRS - __tg_creal(float __x) {return __x;} - -static double - _TG_ATTRS - __tg_creal(double __x) {return __x;} - -static long double - _TG_ATTRS - __tg_creal(long double __x) {return __x;} - -static float - _TG_ATTRS - __tg_creal(float _Complex __x) {return crealf(__x);} - -static double - _TG_ATTRS - __tg_creal(double _Complex __x) {return creal(__x);} - -static long double - _TG_ATTRS - __tg_creal(long double _Complex __x) {return creall(__x);} - -#undef creal -#define creal(__x) __tg_creal(__tg_promote1((__x))(__x)) - -#undef _TG_ATTRSp -#undef _TG_ATTRS - -#endif /* __cplusplus */ -#endif /* __TGMATH_H */ diff --git a/External/CastXML/share/castxml/clang/include/tmmintrin.h b/External/CastXML/share/castxml/clang/include/tmmintrin.h deleted file mode 100644 index 120d73c34..000000000 --- a/External/CastXML/share/castxml/clang/include/tmmintrin.h +++ /dev/null @@ -1,224 +0,0 @@ -/*===---- tmmintrin.h - SSSE3 intrinsics -----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __TMMINTRIN_H -#define __TMMINTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("ssse3"))) - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_abs_pi8(__m64 __a) -{ - return (__m64)__builtin_ia32_pabsb((__v8qi)__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_abs_epi8(__m128i __a) -{ - return (__m128i)__builtin_ia32_pabsb128((__v16qi)__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_abs_pi16(__m64 __a) -{ - return (__m64)__builtin_ia32_pabsw((__v4hi)__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_abs_epi16(__m128i __a) -{ - return (__m128i)__builtin_ia32_pabsw128((__v8hi)__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_abs_pi32(__m64 __a) -{ - return (__m64)__builtin_ia32_pabsd((__v2si)__a); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_abs_epi32(__m128i __a) -{ - return (__m128i)__builtin_ia32_pabsd128((__v4si)__a); -} - -#define _mm_alignr_epi8(a, b, n) __extension__ ({ \ - __m128i __a = (a); \ - __m128i __b = (b); \ - (__m128i)__builtin_ia32_palignr128((__v16qi)__a, (__v16qi)__b, (n)); }) - -#define _mm_alignr_pi8(a, b, n) __extension__ ({ \ - __m64 __a = (a); \ - __m64 __b = (b); \ - (__m64)__builtin_ia32_palignr((__v8qi)__a, (__v8qi)__b, (n)); }) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hadd_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phaddw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hadd_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phaddd128((__v4si)__a, (__v4si)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hadd_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phaddw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hadd_pi32(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phaddd((__v2si)__a, (__v2si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hadds_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phaddsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hadds_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phaddsw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsub_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phsubw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsub_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phsubd128((__v4si)__a, (__v4si)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hsub_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phsubw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hsub_pi32(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phsubd((__v2si)__a, (__v2si)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsubs_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_phsubsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_hsubs_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_phsubsw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maddubs_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmaddubsw128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_maddubs_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pmaddubsw((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_mulhrs_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pmulhrsw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_mulhrs_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pmulhrsw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_shuffle_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_pshufb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_shuffle_pi8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pshufb((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sign_epi8(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psignb128((__v16qi)__a, (__v16qi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sign_epi16(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psignw128((__v8hi)__a, (__v8hi)__b); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sign_epi32(__m128i __a, __m128i __b) -{ - return (__m128i)__builtin_ia32_psignd128((__v4si)__a, (__v4si)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sign_pi8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_psignb((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sign_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_psignw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sign_pi32(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_psignd((__v2si)__a, (__v2si)__b); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __TMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/unwind.h b/External/CastXML/share/castxml/clang/include/unwind.h deleted file mode 100644 index 303d79288..000000000 --- a/External/CastXML/share/castxml/clang/include/unwind.h +++ /dev/null @@ -1,282 +0,0 @@ -/*===---- unwind.h - Stack unwinding ----------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -/* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/ - -#ifndef __CLANG_UNWIND_H -#define __CLANG_UNWIND_H - -#if defined(__APPLE__) && __has_include_next() -/* Darwin (from 11.x on) provide an unwind.h. If that's available, - * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE, - * so define that around the include.*/ -# ifndef _GNU_SOURCE -# define _SHOULD_UNDEFINE_GNU_SOURCE -# define _GNU_SOURCE -# endif -// libunwind's unwind.h reflects the current visibility. However, Mozilla -// builds with -fvisibility=hidden and relies on gcc's unwind.h to reset the -// visibility to default and export its contents. gcc also allows users to -// override its override by #defining HIDE_EXPORTS (but note, this only obeys -// the user's -fvisibility setting; it doesn't hide any exports on its own). We -// imitate gcc's header here: -# ifdef HIDE_EXPORTS -# include_next -# else -# pragma GCC visibility push(default) -# include_next -# pragma GCC visibility pop -# endif -# ifdef _SHOULD_UNDEFINE_GNU_SOURCE -# undef _GNU_SOURCE -# undef _SHOULD_UNDEFINE_GNU_SOURCE -# endif -#else - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* It is a bit strange for a header to play with the visibility of the - symbols it declares, but this matches gcc's behavior and some programs - depend on it */ -#ifndef HIDE_EXPORTS -#pragma GCC visibility push(default) -#endif - -typedef uintptr_t _Unwind_Word; -typedef intptr_t _Unwind_Sword; -typedef uintptr_t _Unwind_Ptr; -typedef uintptr_t _Unwind_Internal_Ptr; -typedef uint64_t _Unwind_Exception_Class; - -typedef intptr_t _sleb128_t; -typedef uintptr_t _uleb128_t; - -struct _Unwind_Context; -struct _Unwind_Exception; -typedef enum { - _URC_NO_REASON = 0, - _URC_FOREIGN_EXCEPTION_CAUGHT = 1, - - _URC_FATAL_PHASE2_ERROR = 2, - _URC_FATAL_PHASE1_ERROR = 3, - _URC_NORMAL_STOP = 4, - - _URC_END_OF_STACK = 5, - _URC_HANDLER_FOUND = 6, - _URC_INSTALL_CONTEXT = 7, - _URC_CONTINUE_UNWIND = 8 -} _Unwind_Reason_Code; - -typedef enum { - _UA_SEARCH_PHASE = 1, - _UA_CLEANUP_PHASE = 2, - - _UA_HANDLER_FRAME = 4, - _UA_FORCE_UNWIND = 8, - _UA_END_OF_STACK = 16 /* gcc extension to C++ ABI */ -} _Unwind_Action; - -typedef void (*_Unwind_Exception_Cleanup_Fn)(_Unwind_Reason_Code, - struct _Unwind_Exception *); - -struct _Unwind_Exception { - _Unwind_Exception_Class exception_class; - _Unwind_Exception_Cleanup_Fn exception_cleanup; - _Unwind_Word private_1; - _Unwind_Word private_2; - /* The Itanium ABI requires that _Unwind_Exception objects are "double-word - * aligned". GCC has interpreted this to mean "use the maximum useful - * alignment for the target"; so do we. */ -} __attribute__((__aligned__)); - -typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)(int, _Unwind_Action, - _Unwind_Exception_Class, - struct _Unwind_Exception *, - struct _Unwind_Context *, - void *); - -typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)( - int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *, - struct _Unwind_Context *); -typedef _Unwind_Personality_Fn __personality_routine; - -typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *, - void *); - -#if defined(__arm__) && !defined(__APPLE__) - -typedef enum { - _UVRSC_CORE = 0, /* integer register */ - _UVRSC_VFP = 1, /* vfp */ - _UVRSC_WMMXD = 3, /* Intel WMMX data register */ - _UVRSC_WMMXC = 4 /* Intel WMMX control register */ -} _Unwind_VRS_RegClass; - -typedef enum { - _UVRSD_UINT32 = 0, - _UVRSD_VFPX = 1, - _UVRSD_UINT64 = 3, - _UVRSD_FLOAT = 4, - _UVRSD_DOUBLE = 5 -} _Unwind_VRS_DataRepresentation; - -typedef enum { - _UVRSR_OK = 0, - _UVRSR_NOT_IMPLEMENTED = 1, - _UVRSR_FAILED = 2 -} _Unwind_VRS_Result; - -_Unwind_VRS_Result _Unwind_VRS_Get(struct _Unwind_Context *__context, - _Unwind_VRS_RegClass __regclass, - uint32_t __regno, - _Unwind_VRS_DataRepresentation __representation, - void *__valuep); - -_Unwind_VRS_Result _Unwind_VRS_Set(struct _Unwind_Context *__context, - _Unwind_VRS_RegClass __regclass, - uint32_t __regno, - _Unwind_VRS_DataRepresentation __representation, - void *__valuep); - -static __inline__ -_Unwind_Word _Unwind_GetGR(struct _Unwind_Context *__context, int __index) { - _Unwind_Word __value; - _Unwind_VRS_Get(__context, _UVRSC_CORE, __index, _UVRSD_UINT32, &__value); - return __value; -} - -static __inline__ -void _Unwind_SetGR(struct _Unwind_Context *__context, int __index, - _Unwind_Word __value) { - _Unwind_VRS_Set(__context, _UVRSC_CORE, __index, _UVRSD_UINT32, &__value); -} - -static __inline__ -_Unwind_Word _Unwind_GetIP(struct _Unwind_Context *__context) { - _Unwind_Word __ip = _Unwind_GetGR(__context, 15); - return __ip & ~(_Unwind_Word)(0x1); /* Remove thumb mode bit. */ -} - -static __inline__ -void _Unwind_SetIP(struct _Unwind_Context *__context, _Unwind_Word __value) { - _Unwind_Word __thumb_mode_bit = _Unwind_GetGR(__context, 15) & 0x1; - _Unwind_SetGR(__context, 15, __value | __thumb_mode_bit); -} -#else -_Unwind_Word _Unwind_GetGR(struct _Unwind_Context *, int); -void _Unwind_SetGR(struct _Unwind_Context *, int, _Unwind_Word); - -_Unwind_Word _Unwind_GetIP(struct _Unwind_Context *); -void _Unwind_SetIP(struct _Unwind_Context *, _Unwind_Word); -#endif - - -_Unwind_Word _Unwind_GetIPInfo(struct _Unwind_Context *, int *); - -_Unwind_Word _Unwind_GetCFA(struct _Unwind_Context *); - -_Unwind_Word _Unwind_GetBSP(struct _Unwind_Context *); - -void *_Unwind_GetLanguageSpecificData(struct _Unwind_Context *); - -_Unwind_Ptr _Unwind_GetRegionStart(struct _Unwind_Context *); - -/* DWARF EH functions; currently not available on Darwin/ARM */ -#if !defined(__APPLE__) || !defined(__arm__) - -_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *); -_Unwind_Reason_Code _Unwind_ForcedUnwind(struct _Unwind_Exception *, - _Unwind_Stop_Fn, void *); -void _Unwind_DeleteException(struct _Unwind_Exception *); -void _Unwind_Resume(struct _Unwind_Exception *); -_Unwind_Reason_Code _Unwind_Resume_or_Rethrow(struct _Unwind_Exception *); - -#endif - -_Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *); - -/* setjmp(3)/longjmp(3) stuff */ -typedef struct SjLj_Function_Context *_Unwind_FunctionContext_t; - -void _Unwind_SjLj_Register(_Unwind_FunctionContext_t); -void _Unwind_SjLj_Unregister(_Unwind_FunctionContext_t); -_Unwind_Reason_Code _Unwind_SjLj_RaiseException(struct _Unwind_Exception *); -_Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind(struct _Unwind_Exception *, - _Unwind_Stop_Fn, void *); -void _Unwind_SjLj_Resume(struct _Unwind_Exception *); -_Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *); - -void *_Unwind_FindEnclosingFunction(void *); - -#ifdef __APPLE__ - -_Unwind_Ptr _Unwind_GetDataRelBase(struct _Unwind_Context *) - __attribute__((__unavailable__)); -_Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *) - __attribute__((__unavailable__)); - -/* Darwin-specific functions */ -void __register_frame(const void *); -void __deregister_frame(const void *); - -struct dwarf_eh_bases { - uintptr_t tbase; - uintptr_t dbase; - uintptr_t func; -}; -void *_Unwind_Find_FDE(const void *, struct dwarf_eh_bases *); - -void __register_frame_info_bases(const void *, void *, void *, void *) - __attribute__((__unavailable__)); -void __register_frame_info(const void *, void *) __attribute__((__unavailable__)); -void __register_frame_info_table_bases(const void *, void*, void *, void *) - __attribute__((__unavailable__)); -void __register_frame_info_table(const void *, void *) - __attribute__((__unavailable__)); -void __register_frame_table(const void *) __attribute__((__unavailable__)); -void __deregister_frame_info(const void *) __attribute__((__unavailable__)); -void __deregister_frame_info_bases(const void *)__attribute__((__unavailable__)); - -#else - -_Unwind_Ptr _Unwind_GetDataRelBase(struct _Unwind_Context *); -_Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *); - -#endif - - -#ifndef HIDE_EXPORTS -#pragma GCC visibility pop -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -#endif /* __CLANG_UNWIND_H */ diff --git a/External/CastXML/share/castxml/clang/include/vadefs.h b/External/CastXML/share/castxml/clang/include/vadefs.h deleted file mode 100644 index 7fe9a74e3..000000000 --- a/External/CastXML/share/castxml/clang/include/vadefs.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ===-------- vadefs.h ---------------------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -/* Only include this if we are aiming for MSVC compatibility. */ -#ifndef _MSC_VER -#include_next -#else - -#ifndef __clang_vadefs_h -#define __clang_vadefs_h - -#include_next - -/* Override macros from vadefs.h with definitions that work with Clang. */ -#ifdef _crt_va_start -#undef _crt_va_start -#define _crt_va_start(ap, param) __builtin_va_start(ap, param) -#endif -#ifdef _crt_va_end -#undef _crt_va_end -#define _crt_va_end(ap) __builtin_va_end(ap) -#endif -#ifdef _crt_va_arg -#undef _crt_va_arg -#define _crt_va_arg(ap, type) __builtin_va_arg(ap, type) -#endif - -/* VS 2015 switched to double underscore names, which is an improvement, but now - * we have to intercept those names too. - */ -#ifdef __crt_va_start -#undef __crt_va_start -#define __crt_va_start(ap, param) __builtin_va_start(ap, param) -#endif -#ifdef __crt_va_end -#undef __crt_va_end -#define __crt_va_end(ap) __builtin_va_end(ap) -#endif -#ifdef __crt_va_arg -#undef __crt_va_arg -#define __crt_va_arg(ap, type) __builtin_va_arg(ap, type) -#endif - -#endif -#endif diff --git a/External/CastXML/share/castxml/clang/include/varargs.h b/External/CastXML/share/castxml/clang/include/varargs.h deleted file mode 100644 index b5477d0a6..000000000 --- a/External/CastXML/share/castxml/clang/include/varargs.h +++ /dev/null @@ -1,26 +0,0 @@ -/*===---- varargs.h - Variable argument handling -------------------------------------=== -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -* -*===-----------------------------------------------------------------------=== -*/ -#ifndef __VARARGS_H -#define __VARARGS_H - #error "Please use instead of " -#endif diff --git a/External/CastXML/share/castxml/clang/include/vecintrin.h b/External/CastXML/share/castxml/clang/include/vecintrin.h deleted file mode 100644 index ca7acb473..000000000 --- a/External/CastXML/share/castxml/clang/include/vecintrin.h +++ /dev/null @@ -1,8946 +0,0 @@ -/*===---- vecintrin.h - Vector intrinsics ----------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#if defined(__s390x__) && defined(__VEC__) - -#define __ATTRS_ai __attribute__((__always_inline__)) -#define __ATTRS_o __attribute__((__overloadable__)) -#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__)) - -#define __constant(PARM) \ - __attribute__((__enable_if__ ((PARM) == (PARM), \ - "argument must be a constant integer"))) -#define __constant_range(PARM, LOW, HIGH) \ - __attribute__((__enable_if__ ((PARM) >= (LOW) && (PARM) <= (HIGH), \ - "argument must be a constant integer from " #LOW " to " #HIGH))) -#define __constant_pow2_range(PARM, LOW, HIGH) \ - __attribute__((__enable_if__ ((PARM) >= (LOW) && (PARM) <= (HIGH) && \ - ((PARM) & ((PARM) - 1)) == 0, \ - "argument must be a constant power of 2 from " #LOW " to " #HIGH))) - -/*-- __lcbb -----------------------------------------------------------------*/ - -extern __ATTRS_o unsigned int -__lcbb(const void *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -#define __lcbb(X, Y) ((__typeof__((__lcbb)((X), (Y)))) \ - __builtin_s390_lcbb((X), __builtin_constant_p((Y))? \ - ((Y) == 64 ? 0 : \ - (Y) == 128 ? 1 : \ - (Y) == 256 ? 2 : \ - (Y) == 512 ? 3 : \ - (Y) == 1024 ? 4 : \ - (Y) == 2048 ? 5 : \ - (Y) == 4096 ? 6 : 0) : 0)) - -/*-- vec_extract ------------------------------------------------------------*/ - -static inline __ATTRS_o_ai signed char -vec_extract(vector signed char __vec, int __index) { - return __vec[__index & 15]; -} - -static inline __ATTRS_o_ai unsigned char -vec_extract(vector bool char __vec, int __index) { - return __vec[__index & 15]; -} - -static inline __ATTRS_o_ai unsigned char -vec_extract(vector unsigned char __vec, int __index) { - return __vec[__index & 15]; -} - -static inline __ATTRS_o_ai signed short -vec_extract(vector signed short __vec, int __index) { - return __vec[__index & 7]; -} - -static inline __ATTRS_o_ai unsigned short -vec_extract(vector bool short __vec, int __index) { - return __vec[__index & 7]; -} - -static inline __ATTRS_o_ai unsigned short -vec_extract(vector unsigned short __vec, int __index) { - return __vec[__index & 7]; -} - -static inline __ATTRS_o_ai signed int -vec_extract(vector signed int __vec, int __index) { - return __vec[__index & 3]; -} - -static inline __ATTRS_o_ai unsigned int -vec_extract(vector bool int __vec, int __index) { - return __vec[__index & 3]; -} - -static inline __ATTRS_o_ai unsigned int -vec_extract(vector unsigned int __vec, int __index) { - return __vec[__index & 3]; -} - -static inline __ATTRS_o_ai signed long long -vec_extract(vector signed long long __vec, int __index) { - return __vec[__index & 1]; -} - -static inline __ATTRS_o_ai unsigned long long -vec_extract(vector bool long long __vec, int __index) { - return __vec[__index & 1]; -} - -static inline __ATTRS_o_ai unsigned long long -vec_extract(vector unsigned long long __vec, int __index) { - return __vec[__index & 1]; -} - -static inline __ATTRS_o_ai double -vec_extract(vector double __vec, int __index) { - return __vec[__index & 1]; -} - -/*-- vec_insert -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_insert(signed char __scalar, vector signed char __vec, int __index) { - __vec[__index & 15] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_insert(unsigned char __scalar, vector bool char __vec, int __index) { - vector unsigned char __newvec = (vector unsigned char)__vec; - __newvec[__index & 15] = (unsigned char)__scalar; - return __newvec; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_insert(unsigned char __scalar, vector unsigned char __vec, int __index) { - __vec[__index & 15] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed short -vec_insert(signed short __scalar, vector signed short __vec, int __index) { - __vec[__index & 7] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_insert(unsigned short __scalar, vector bool short __vec, int __index) { - vector unsigned short __newvec = (vector unsigned short)__vec; - __newvec[__index & 7] = (unsigned short)__scalar; - return __newvec; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_insert(unsigned short __scalar, vector unsigned short __vec, int __index) { - __vec[__index & 7] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed int -vec_insert(signed int __scalar, vector signed int __vec, int __index) { - __vec[__index & 3] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_insert(unsigned int __scalar, vector bool int __vec, int __index) { - vector unsigned int __newvec = (vector unsigned int)__vec; - __newvec[__index & 3] = __scalar; - return __newvec; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_insert(unsigned int __scalar, vector unsigned int __vec, int __index) { - __vec[__index & 3] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed long long -vec_insert(signed long long __scalar, vector signed long long __vec, - int __index) { - __vec[__index & 1] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_insert(unsigned long long __scalar, vector bool long long __vec, - int __index) { - vector unsigned long long __newvec = (vector unsigned long long)__vec; - __newvec[__index & 1] = __scalar; - return __newvec; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_insert(unsigned long long __scalar, vector unsigned long long __vec, - int __index) { - __vec[__index & 1] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector double -vec_insert(double __scalar, vector double __vec, int __index) { - __vec[__index & 1] = __scalar; - return __vec; -} - -/*-- vec_promote ------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_promote(signed char __scalar, int __index) { - const vector signed char __zero = (vector signed char)0; - vector signed char __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); - __vec[__index & 15] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_promote(unsigned char __scalar, int __index) { - const vector unsigned char __zero = (vector unsigned char)0; - vector unsigned char __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); - __vec[__index & 15] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed short -vec_promote(signed short __scalar, int __index) { - const vector signed short __zero = (vector signed short)0; - vector signed short __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1, -1, -1, -1, -1); - __vec[__index & 7] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_promote(unsigned short __scalar, int __index) { - const vector unsigned short __zero = (vector unsigned short)0; - vector unsigned short __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1, -1, -1, -1, -1); - __vec[__index & 7] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed int -vec_promote(signed int __scalar, int __index) { - const vector signed int __zero = (vector signed int)0; - vector signed int __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1); - __vec[__index & 3] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_promote(unsigned int __scalar, int __index) { - const vector unsigned int __zero = (vector unsigned int)0; - vector unsigned int __vec = __builtin_shufflevector(__zero, __zero, - -1, -1, -1, -1); - __vec[__index & 3] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector signed long long -vec_promote(signed long long __scalar, int __index) { - const vector signed long long __zero = (vector signed long long)0; - vector signed long long __vec = __builtin_shufflevector(__zero, __zero, - -1, -1); - __vec[__index & 1] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_promote(unsigned long long __scalar, int __index) { - const vector unsigned long long __zero = (vector unsigned long long)0; - vector unsigned long long __vec = __builtin_shufflevector(__zero, __zero, - -1, -1); - __vec[__index & 1] = __scalar; - return __vec; -} - -static inline __ATTRS_o_ai vector double -vec_promote(double __scalar, int __index) { - const vector double __zero = (vector double)0; - vector double __vec = __builtin_shufflevector(__zero, __zero, -1, -1); - __vec[__index & 1] = __scalar; - return __vec; -} - -/*-- vec_insert_and_zero ----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_insert_and_zero(const signed char *__ptr) { - vector signed char __vec = (vector signed char)0; - __vec[7] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_insert_and_zero(const unsigned char *__ptr) { - vector unsigned char __vec = (vector unsigned char)0; - __vec[7] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector signed short -vec_insert_and_zero(const signed short *__ptr) { - vector signed short __vec = (vector signed short)0; - __vec[3] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_insert_and_zero(const unsigned short *__ptr) { - vector unsigned short __vec = (vector unsigned short)0; - __vec[3] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector signed int -vec_insert_and_zero(const signed int *__ptr) { - vector signed int __vec = (vector signed int)0; - __vec[1] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_insert_and_zero(const unsigned int *__ptr) { - vector unsigned int __vec = (vector unsigned int)0; - __vec[1] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector signed long long -vec_insert_and_zero(const signed long long *__ptr) { - vector signed long long __vec = (vector signed long long)0; - __vec[0] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_insert_and_zero(const unsigned long long *__ptr) { - vector unsigned long long __vec = (vector unsigned long long)0; - __vec[0] = *__ptr; - return __vec; -} - -static inline __ATTRS_o_ai vector double -vec_insert_and_zero(const double *__ptr) { - vector double __vec = (vector double)0; - __vec[0] = *__ptr; - return __vec; -} - -/*-- vec_perm ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_perm(vector signed char __a, vector signed char __b, - vector unsigned char __c) { - return (vector signed char)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_perm(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return (vector unsigned char)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector bool char -vec_perm(vector bool char __a, vector bool char __b, - vector unsigned char __c) { - return (vector bool char)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector signed short -vec_perm(vector signed short __a, vector signed short __b, - vector unsigned char __c) { - return (vector signed short)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_perm(vector unsigned short __a, vector unsigned short __b, - vector unsigned char __c) { - return (vector unsigned short)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector bool short -vec_perm(vector bool short __a, vector bool short __b, - vector unsigned char __c) { - return (vector bool short)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector signed int -vec_perm(vector signed int __a, vector signed int __b, - vector unsigned char __c) { - return (vector signed int)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_perm(vector unsigned int __a, vector unsigned int __b, - vector unsigned char __c) { - return (vector unsigned int)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector bool int -vec_perm(vector bool int __a, vector bool int __b, - vector unsigned char __c) { - return (vector bool int)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector signed long long -vec_perm(vector signed long long __a, vector signed long long __b, - vector unsigned char __c) { - return (vector signed long long)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_perm(vector unsigned long long __a, vector unsigned long long __b, - vector unsigned char __c) { - return (vector unsigned long long)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector bool long long -vec_perm(vector bool long long __a, vector bool long long __b, - vector unsigned char __c) { - return (vector bool long long)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -static inline __ATTRS_o_ai vector double -vec_perm(vector double __a, vector double __b, - vector unsigned char __c) { - return (vector double)__builtin_s390_vperm( - (vector unsigned char)__a, (vector unsigned char)__b, __c); -} - -/*-- vec_permi --------------------------------------------------------------*/ - -extern __ATTRS_o vector signed long long -vec_permi(vector signed long long __a, vector signed long long __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector unsigned long long -vec_permi(vector unsigned long long __a, vector unsigned long long __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector bool long long -vec_permi(vector bool long long __a, vector bool long long __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector double -vec_permi(vector double __a, vector double __b, int __c) - __constant_range(__c, 0, 3); - -#define vec_permi(X, Y, Z) ((__typeof__((vec_permi)((X), (Y), (Z)))) \ - __builtin_s390_vpdi((vector unsigned long long)(X), \ - (vector unsigned long long)(Y), \ - (((Z) & 2) << 1) | ((Z) & 1))) - -/*-- vec_sel ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_sel(vector signed char __a, vector signed char __b, - vector unsigned char __c) { - return ((vector signed char)__c & __b) | (~(vector signed char)__c & __a); -} - -static inline __ATTRS_o_ai vector signed char -vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) { - return ((vector signed char)__c & __b) | (~(vector signed char)__c & __a); -} - -static inline __ATTRS_o_ai vector bool char -vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) { - return ((vector bool char)__c & __b) | (~(vector bool char)__c & __a); -} - -static inline __ATTRS_o_ai vector bool char -vec_sel(vector bool char __a, vector bool char __b, vector bool char __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sel(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sel(vector unsigned char __a, vector unsigned char __b, - vector bool char __c) { - return ((vector unsigned char)__c & __b) | (~(vector unsigned char)__c & __a); -} - -static inline __ATTRS_o_ai vector signed short -vec_sel(vector signed short __a, vector signed short __b, - vector unsigned short __c) { - return ((vector signed short)__c & __b) | (~(vector signed short)__c & __a); -} - -static inline __ATTRS_o_ai vector signed short -vec_sel(vector signed short __a, vector signed short __b, - vector bool short __c) { - return ((vector signed short)__c & __b) | (~(vector signed short)__c & __a); -} - -static inline __ATTRS_o_ai vector bool short -vec_sel(vector bool short __a, vector bool short __b, - vector unsigned short __c) { - return ((vector bool short)__c & __b) | (~(vector bool short)__c & __a); -} - -static inline __ATTRS_o_ai vector bool short -vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sel(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sel(vector unsigned short __a, vector unsigned short __b, - vector bool short __c) { - return (((vector unsigned short)__c & __b) | - (~(vector unsigned short)__c & __a)); -} - -static inline __ATTRS_o_ai vector signed int -vec_sel(vector signed int __a, vector signed int __b, - vector unsigned int __c) { - return ((vector signed int)__c & __b) | (~(vector signed int)__c & __a); -} - -static inline __ATTRS_o_ai vector signed int -vec_sel(vector signed int __a, vector signed int __b, vector bool int __c) { - return ((vector signed int)__c & __b) | (~(vector signed int)__c & __a); -} - -static inline __ATTRS_o_ai vector bool int -vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) { - return ((vector bool int)__c & __b) | (~(vector bool int)__c & __a); -} - -static inline __ATTRS_o_ai vector bool int -vec_sel(vector bool int __a, vector bool int __b, vector bool int __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sel(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) { - return ((vector unsigned int)__c & __b) | (~(vector unsigned int)__c & __a); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sel(vector signed long long __a, vector signed long long __b, - vector unsigned long long __c) { - return (((vector signed long long)__c & __b) | - (~(vector signed long long)__c & __a)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sel(vector signed long long __a, vector signed long long __b, - vector bool long long __c) { - return (((vector signed long long)__c & __b) | - (~(vector signed long long)__c & __a)); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sel(vector bool long long __a, vector bool long long __b, - vector unsigned long long __c) { - return (((vector bool long long)__c & __b) | - (~(vector bool long long)__c & __a)); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sel(vector bool long long __a, vector bool long long __b, - vector bool long long __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sel(vector unsigned long long __a, vector unsigned long long __b, - vector unsigned long long __c) { - return (__c & __b) | (~__c & __a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sel(vector unsigned long long __a, vector unsigned long long __b, - vector bool long long __c) { - return (((vector unsigned long long)__c & __b) | - (~(vector unsigned long long)__c & __a)); -} - -static inline __ATTRS_o_ai vector double -vec_sel(vector double __a, vector double __b, vector unsigned long long __c) { - return (vector double)((__c & (vector unsigned long long)__b) | - (~__c & (vector unsigned long long)__a)); -} - -static inline __ATTRS_o_ai vector double -vec_sel(vector double __a, vector double __b, vector bool long long __c) { - vector unsigned long long __ac = (vector unsigned long long)__a; - vector unsigned long long __bc = (vector unsigned long long)__b; - vector unsigned long long __cc = (vector unsigned long long)__c; - return (vector double)((__cc & __bc) | (~__cc & __ac)); -} - -/*-- vec_gather_element -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed int -vec_gather_element(vector signed int __vec, vector unsigned int __offset, - const signed int *__ptr, int __index) - __constant_range(__index, 0, 3) { - __vec[__index] = *(const signed int *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector bool int -vec_gather_element(vector bool int __vec, vector unsigned int __offset, - const unsigned int *__ptr, int __index) - __constant_range(__index, 0, 3) { - __vec[__index] = *(const unsigned int *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_gather_element(vector unsigned int __vec, vector unsigned int __offset, - const unsigned int *__ptr, int __index) - __constant_range(__index, 0, 3) { - __vec[__index] = *(const unsigned int *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector signed long long -vec_gather_element(vector signed long long __vec, - vector unsigned long long __offset, - const signed long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - __vec[__index] = *(const signed long long *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector bool long long -vec_gather_element(vector bool long long __vec, - vector unsigned long long __offset, - const unsigned long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - __vec[__index] = *(const unsigned long long *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_gather_element(vector unsigned long long __vec, - vector unsigned long long __offset, - const unsigned long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - __vec[__index] = *(const unsigned long long *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -static inline __ATTRS_o_ai vector double -vec_gather_element(vector double __vec, vector unsigned long long __offset, - const double *__ptr, int __index) - __constant_range(__index, 0, 1) { - __vec[__index] = *(const double *)( - (__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]); - return __vec; -} - -/*-- vec_scatter_element ----------------------------------------------------*/ - -static inline __ATTRS_o_ai void -vec_scatter_element(vector signed int __vec, vector unsigned int __offset, - signed int *__ptr, int __index) - __constant_range(__index, 0, 3) { - *(signed int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector bool int __vec, vector unsigned int __offset, - unsigned int *__ptr, int __index) - __constant_range(__index, 0, 3) { - *(unsigned int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector unsigned int __vec, vector unsigned int __offset, - unsigned int *__ptr, int __index) - __constant_range(__index, 0, 3) { - *(unsigned int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector signed long long __vec, - vector unsigned long long __offset, - signed long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - *(signed long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector bool long long __vec, - vector unsigned long long __offset, - unsigned long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - *(unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector unsigned long long __vec, - vector unsigned long long __offset, - unsigned long long *__ptr, int __index) - __constant_range(__index, 0, 1) { - *(unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -static inline __ATTRS_o_ai void -vec_scatter_element(vector double __vec, vector unsigned long long __offset, - double *__ptr, int __index) - __constant_range(__index, 0, 1) { - *(double *)((__INTPTR_TYPE__)__ptr + __offset[__index]) = - __vec[__index]; -} - -/*-- vec_xld2 ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_xld2(long __offset, const signed char *__ptr) { - return *(const vector signed char *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_xld2(long __offset, const unsigned char *__ptr) { - return *(const vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector signed short -vec_xld2(long __offset, const signed short *__ptr) { - return *(const vector signed short *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_xld2(long __offset, const unsigned short *__ptr) { - return *(const vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector signed int -vec_xld2(long __offset, const signed int *__ptr) { - return *(const vector signed int *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_xld2(long __offset, const unsigned int *__ptr) { - return *(const vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector signed long long -vec_xld2(long __offset, const signed long long *__ptr) { - return *(const vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_xld2(long __offset, const unsigned long long *__ptr) { - return *(const vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector double -vec_xld2(long __offset, const double *__ptr) { - return *(const vector double *)((__INTPTR_TYPE__)__ptr + __offset); -} - -/*-- vec_xlw4 ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_xlw4(long __offset, const signed char *__ptr) { - return *(const vector signed char *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_xlw4(long __offset, const unsigned char *__ptr) { - return *(const vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector signed short -vec_xlw4(long __offset, const signed short *__ptr) { - return *(const vector signed short *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_xlw4(long __offset, const unsigned short *__ptr) { - return *(const vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector signed int -vec_xlw4(long __offset, const signed int *__ptr) { - return *(const vector signed int *)((__INTPTR_TYPE__)__ptr + __offset); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_xlw4(long __offset, const unsigned int *__ptr) { - return *(const vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset); -} - -/*-- vec_xstd2 --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai void -vec_xstd2(vector signed char __vec, long __offset, signed char *__ptr) { - *(vector signed char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector unsigned char __vec, long __offset, unsigned char *__ptr) { - *(vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector signed short __vec, long __offset, signed short *__ptr) { - *(vector signed short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector unsigned short __vec, long __offset, unsigned short *__ptr) { - *(vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector signed int __vec, long __offset, signed int *__ptr) { - *(vector signed int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector unsigned int __vec, long __offset, unsigned int *__ptr) { - *(vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector signed long long __vec, long __offset, - signed long long *__ptr) { - *(vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector unsigned long long __vec, long __offset, - unsigned long long *__ptr) { - *(vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset) = - __vec; -} - -static inline __ATTRS_o_ai void -vec_xstd2(vector double __vec, long __offset, double *__ptr) { - *(vector double *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -/*-- vec_xstw4 --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai void -vec_xstw4(vector signed char __vec, long __offset, signed char *__ptr) { - *(vector signed char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstw4(vector unsigned char __vec, long __offset, unsigned char *__ptr) { - *(vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstw4(vector signed short __vec, long __offset, signed short *__ptr) { - *(vector signed short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstw4(vector unsigned short __vec, long __offset, unsigned short *__ptr) { - *(vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstw4(vector signed int __vec, long __offset, signed int *__ptr) { - *(vector signed int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -static inline __ATTRS_o_ai void -vec_xstw4(vector unsigned int __vec, long __offset, unsigned int *__ptr) { - *(vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec; -} - -/*-- vec_load_bndry ---------------------------------------------------------*/ - -extern __ATTRS_o vector signed char -vec_load_bndry(const signed char *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector unsigned char -vec_load_bndry(const unsigned char *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector signed short -vec_load_bndry(const signed short *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector unsigned short -vec_load_bndry(const unsigned short *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector signed int -vec_load_bndry(const signed int *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector unsigned int -vec_load_bndry(const unsigned int *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector signed long long -vec_load_bndry(const signed long long *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector unsigned long long -vec_load_bndry(const unsigned long long *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -extern __ATTRS_o vector double -vec_load_bndry(const double *__ptr, unsigned short __len) - __constant_pow2_range(__len, 64, 4096); - -#define vec_load_bndry(X, Y) ((__typeof__((vec_load_bndry)((X), (Y)))) \ - __builtin_s390_vlbb((X), ((Y) == 64 ? 0 : \ - (Y) == 128 ? 1 : \ - (Y) == 256 ? 2 : \ - (Y) == 512 ? 3 : \ - (Y) == 1024 ? 4 : \ - (Y) == 2048 ? 5 : \ - (Y) == 4096 ? 6 : -1))) - -/*-- vec_load_len -----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_load_len(const signed char *__ptr, unsigned int __len) { - return (vector signed char)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_load_len(const unsigned char *__ptr, unsigned int __len) { - return (vector unsigned char)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector signed short -vec_load_len(const signed short *__ptr, unsigned int __len) { - return (vector signed short)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_load_len(const unsigned short *__ptr, unsigned int __len) { - return (vector unsigned short)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector signed int -vec_load_len(const signed int *__ptr, unsigned int __len) { - return (vector signed int)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_load_len(const unsigned int *__ptr, unsigned int __len) { - return (vector unsigned int)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector signed long long -vec_load_len(const signed long long *__ptr, unsigned int __len) { - return (vector signed long long)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_load_len(const unsigned long long *__ptr, unsigned int __len) { - return (vector unsigned long long)__builtin_s390_vll(__len, __ptr); -} - -static inline __ATTRS_o_ai vector double -vec_load_len(const double *__ptr, unsigned int __len) { - return (vector double)__builtin_s390_vll(__len, __ptr); -} - -/*-- vec_store_len ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai void -vec_store_len(vector signed char __vec, signed char *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector unsigned char __vec, unsigned char *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector signed short __vec, signed short *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector unsigned short __vec, unsigned short *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector signed int __vec, signed int *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector unsigned int __vec, unsigned int *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector signed long long __vec, signed long long *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector unsigned long long __vec, unsigned long long *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -static inline __ATTRS_o_ai void -vec_store_len(vector double __vec, double *__ptr, - unsigned int __len) { - __builtin_s390_vstl((vector signed char)__vec, __len, __ptr); -} - -/*-- vec_load_pair ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed long long -vec_load_pair(signed long long __a, signed long long __b) { - return (vector signed long long)(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_load_pair(unsigned long long __a, unsigned long long __b) { - return (vector unsigned long long)(__a, __b); -} - -/*-- vec_genmask ------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_genmask(unsigned short __mask) - __constant(__mask) { - return (vector unsigned char)( - __mask & 0x8000 ? 0xff : 0, - __mask & 0x4000 ? 0xff : 0, - __mask & 0x2000 ? 0xff : 0, - __mask & 0x1000 ? 0xff : 0, - __mask & 0x0800 ? 0xff : 0, - __mask & 0x0400 ? 0xff : 0, - __mask & 0x0200 ? 0xff : 0, - __mask & 0x0100 ? 0xff : 0, - __mask & 0x0080 ? 0xff : 0, - __mask & 0x0040 ? 0xff : 0, - __mask & 0x0020 ? 0xff : 0, - __mask & 0x0010 ? 0xff : 0, - __mask & 0x0008 ? 0xff : 0, - __mask & 0x0004 ? 0xff : 0, - __mask & 0x0002 ? 0xff : 0, - __mask & 0x0001 ? 0xff : 0); -} - -/*-- vec_genmasks_* ---------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_genmasks_8(unsigned char __first, unsigned char __last) - __constant(__first) __constant(__last) { - unsigned char __bit1 = __first & 7; - unsigned char __bit2 = __last & 7; - unsigned char __mask1 = (unsigned char)(1U << (7 - __bit1) << 1) - 1; - unsigned char __mask2 = (unsigned char)(1U << (7 - __bit2)) - 1; - unsigned char __value = (__bit1 <= __bit2 ? - __mask1 & ~__mask2 : - __mask1 | ~__mask2); - return (vector unsigned char)__value; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_genmasks_16(unsigned char __first, unsigned char __last) - __constant(__first) __constant(__last) { - unsigned char __bit1 = __first & 15; - unsigned char __bit2 = __last & 15; - unsigned short __mask1 = (unsigned short)(1U << (15 - __bit1) << 1) - 1; - unsigned short __mask2 = (unsigned short)(1U << (15 - __bit2)) - 1; - unsigned short __value = (__bit1 <= __bit2 ? - __mask1 & ~__mask2 : - __mask1 | ~__mask2); - return (vector unsigned short)__value; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_genmasks_32(unsigned char __first, unsigned char __last) - __constant(__first) __constant(__last) { - unsigned char __bit1 = __first & 31; - unsigned char __bit2 = __last & 31; - unsigned int __mask1 = (1U << (31 - __bit1) << 1) - 1; - unsigned int __mask2 = (1U << (31 - __bit2)) - 1; - unsigned int __value = (__bit1 <= __bit2 ? - __mask1 & ~__mask2 : - __mask1 | ~__mask2); - return (vector unsigned int)__value; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_genmasks_64(unsigned char __first, unsigned char __last) - __constant(__first) __constant(__last) { - unsigned char __bit1 = __first & 63; - unsigned char __bit2 = __last & 63; - unsigned long long __mask1 = (1ULL << (63 - __bit1) << 1) - 1; - unsigned long long __mask2 = (1ULL << (63 - __bit2)) - 1; - unsigned long long __value = (__bit1 <= __bit2 ? - __mask1 & ~__mask2 : - __mask1 | ~__mask2); - return (vector unsigned long long)__value; -} - -/*-- vec_splat --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_splat(vector signed char __vec, int __index) - __constant_range(__index, 0, 15) { - return (vector signed char)__vec[__index]; -} - -static inline __ATTRS_o_ai vector bool char -vec_splat(vector bool char __vec, int __index) - __constant_range(__index, 0, 15) { - return (vector bool char)(vector unsigned char)__vec[__index]; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_splat(vector unsigned char __vec, int __index) - __constant_range(__index, 0, 15) { - return (vector unsigned char)__vec[__index]; -} - -static inline __ATTRS_o_ai vector signed short -vec_splat(vector signed short __vec, int __index) - __constant_range(__index, 0, 7) { - return (vector signed short)__vec[__index]; -} - -static inline __ATTRS_o_ai vector bool short -vec_splat(vector bool short __vec, int __index) - __constant_range(__index, 0, 7) { - return (vector bool short)(vector unsigned short)__vec[__index]; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_splat(vector unsigned short __vec, int __index) - __constant_range(__index, 0, 7) { - return (vector unsigned short)__vec[__index]; -} - -static inline __ATTRS_o_ai vector signed int -vec_splat(vector signed int __vec, int __index) - __constant_range(__index, 0, 3) { - return (vector signed int)__vec[__index]; -} - -static inline __ATTRS_o_ai vector bool int -vec_splat(vector bool int __vec, int __index) - __constant_range(__index, 0, 3) { - return (vector bool int)(vector unsigned int)__vec[__index]; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_splat(vector unsigned int __vec, int __index) - __constant_range(__index, 0, 3) { - return (vector unsigned int)__vec[__index]; -} - -static inline __ATTRS_o_ai vector signed long long -vec_splat(vector signed long long __vec, int __index) - __constant_range(__index, 0, 1) { - return (vector signed long long)__vec[__index]; -} - -static inline __ATTRS_o_ai vector bool long long -vec_splat(vector bool long long __vec, int __index) - __constant_range(__index, 0, 1) { - return (vector bool long long)(vector unsigned long long)__vec[__index]; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_splat(vector unsigned long long __vec, int __index) - __constant_range(__index, 0, 1) { - return (vector unsigned long long)__vec[__index]; -} - -static inline __ATTRS_o_ai vector double -vec_splat(vector double __vec, int __index) - __constant_range(__index, 0, 1) { - return (vector double)__vec[__index]; -} - -/*-- vec_splat_s* -----------------------------------------------------------*/ - -static inline __ATTRS_ai vector signed char -vec_splat_s8(signed char __scalar) - __constant(__scalar) { - return (vector signed char)__scalar; -} - -static inline __ATTRS_ai vector signed short -vec_splat_s16(signed short __scalar) - __constant(__scalar) { - return (vector signed short)__scalar; -} - -static inline __ATTRS_ai vector signed int -vec_splat_s32(signed short __scalar) - __constant(__scalar) { - return (vector signed int)(signed int)__scalar; -} - -static inline __ATTRS_ai vector signed long long -vec_splat_s64(signed short __scalar) - __constant(__scalar) { - return (vector signed long long)(signed long)__scalar; -} - -/*-- vec_splat_u* -----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_splat_u8(unsigned char __scalar) - __constant(__scalar) { - return (vector unsigned char)__scalar; -} - -static inline __ATTRS_ai vector unsigned short -vec_splat_u16(unsigned short __scalar) - __constant(__scalar) { - return (vector unsigned short)__scalar; -} - -static inline __ATTRS_ai vector unsigned int -vec_splat_u32(signed short __scalar) - __constant(__scalar) { - return (vector unsigned int)(signed int)__scalar; -} - -static inline __ATTRS_ai vector unsigned long long -vec_splat_u64(signed short __scalar) - __constant(__scalar) { - return (vector unsigned long long)(signed long long)__scalar; -} - -/*-- vec_splats -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_splats(signed char __scalar) { - return (vector signed char)__scalar; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_splats(unsigned char __scalar) { - return (vector unsigned char)__scalar; -} - -static inline __ATTRS_o_ai vector signed short -vec_splats(signed short __scalar) { - return (vector signed short)__scalar; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_splats(unsigned short __scalar) { - return (vector unsigned short)__scalar; -} - -static inline __ATTRS_o_ai vector signed int -vec_splats(signed int __scalar) { - return (vector signed int)__scalar; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_splats(unsigned int __scalar) { - return (vector unsigned int)__scalar; -} - -static inline __ATTRS_o_ai vector signed long long -vec_splats(signed long long __scalar) { - return (vector signed long long)__scalar; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_splats(unsigned long long __scalar) { - return (vector unsigned long long)__scalar; -} - -static inline __ATTRS_o_ai vector double -vec_splats(double __scalar) { - return (vector double)__scalar; -} - -/*-- vec_extend_s64 ---------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed long long -vec_extend_s64(vector signed char __a) { - return (vector signed long long)(__a[7], __a[15]); -} - -static inline __ATTRS_o_ai vector signed long long -vec_extend_s64(vector signed short __a) { - return (vector signed long long)(__a[3], __a[7]); -} - -static inline __ATTRS_o_ai vector signed long long -vec_extend_s64(vector signed int __a) { - return (vector signed long long)(__a[1], __a[3]); -} - -/*-- vec_mergeh -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_mergeh(vector signed char __a, vector signed char __b) { - return (vector signed char)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3], - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector bool char -vec_mergeh(vector bool char __a, vector bool char __b) { - return (vector bool char)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3], - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_mergeh(vector unsigned char __a, vector unsigned char __b) { - return (vector unsigned char)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3], - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector signed short -vec_mergeh(vector signed short __a, vector signed short __b) { - return (vector signed short)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector bool short -vec_mergeh(vector bool short __a, vector bool short __b) { - return (vector bool short)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mergeh(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)( - __a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector signed int -vec_mergeh(vector signed int __a, vector signed int __b) { - return (vector signed int)(__a[0], __b[0], __a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector bool int -vec_mergeh(vector bool int __a, vector bool int __b) { - return (vector bool int)(__a[0], __b[0], __a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mergeh(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)(__a[0], __b[0], __a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector signed long long -vec_mergeh(vector signed long long __a, vector signed long long __b) { - return (vector signed long long)(__a[0], __b[0]); -} - -static inline __ATTRS_o_ai vector bool long long -vec_mergeh(vector bool long long __a, vector bool long long __b) { - return (vector bool long long)(__a[0], __b[0]); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)(__a[0], __b[0]); -} - -static inline __ATTRS_o_ai vector double -vec_mergeh(vector double __a, vector double __b) { - return (vector double)(__a[0], __b[0]); -} - -/*-- vec_mergel -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_mergel(vector signed char __a, vector signed char __b) { - return (vector signed char)( - __a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11], - __a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]); -} - -static inline __ATTRS_o_ai vector bool char -vec_mergel(vector bool char __a, vector bool char __b) { - return (vector bool char)( - __a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11], - __a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_mergel(vector unsigned char __a, vector unsigned char __b) { - return (vector unsigned char)( - __a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11], - __a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]); -} - -static inline __ATTRS_o_ai vector signed short -vec_mergel(vector signed short __a, vector signed short __b) { - return (vector signed short)( - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector bool short -vec_mergel(vector bool short __a, vector bool short __b) { - return (vector bool short)( - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mergel(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)( - __a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]); -} - -static inline __ATTRS_o_ai vector signed int -vec_mergel(vector signed int __a, vector signed int __b) { - return (vector signed int)(__a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector bool int -vec_mergel(vector bool int __a, vector bool int __b) { - return (vector bool int)(__a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mergel(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)(__a[2], __b[2], __a[3], __b[3]); -} - -static inline __ATTRS_o_ai vector signed long long -vec_mergel(vector signed long long __a, vector signed long long __b) { - return (vector signed long long)(__a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector bool long long -vec_mergel(vector bool long long __a, vector bool long long __b) { - return (vector bool long long)(__a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_mergel(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)(__a[1], __b[1]); -} - -static inline __ATTRS_o_ai vector double -vec_mergel(vector double __a, vector double __b) { - return (vector double)(__a[1], __b[1]); -} - -/*-- vec_pack ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_pack(vector signed short __a, vector signed short __b) { - vector signed char __ac = (vector signed char)__a; - vector signed char __bc = (vector signed char)__b; - return (vector signed char)( - __ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15], - __bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]); -} - -static inline __ATTRS_o_ai vector bool char -vec_pack(vector bool short __a, vector bool short __b) { - vector bool char __ac = (vector bool char)__a; - vector bool char __bc = (vector bool char)__b; - return (vector bool char)( - __ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15], - __bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_pack(vector unsigned short __a, vector unsigned short __b) { - vector unsigned char __ac = (vector unsigned char)__a; - vector unsigned char __bc = (vector unsigned char)__b; - return (vector unsigned char)( - __ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15], - __bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]); -} - -static inline __ATTRS_o_ai vector signed short -vec_pack(vector signed int __a, vector signed int __b) { - vector signed short __ac = (vector signed short)__a; - vector signed short __bc = (vector signed short)__b; - return (vector signed short)( - __ac[1], __ac[3], __ac[5], __ac[7], - __bc[1], __bc[3], __bc[5], __bc[7]); -} - -static inline __ATTRS_o_ai vector bool short -vec_pack(vector bool int __a, vector bool int __b) { - vector bool short __ac = (vector bool short)__a; - vector bool short __bc = (vector bool short)__b; - return (vector bool short)( - __ac[1], __ac[3], __ac[5], __ac[7], - __bc[1], __bc[3], __bc[5], __bc[7]); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_pack(vector unsigned int __a, vector unsigned int __b) { - vector unsigned short __ac = (vector unsigned short)__a; - vector unsigned short __bc = (vector unsigned short)__b; - return (vector unsigned short)( - __ac[1], __ac[3], __ac[5], __ac[7], - __bc[1], __bc[3], __bc[5], __bc[7]); -} - -static inline __ATTRS_o_ai vector signed int -vec_pack(vector signed long long __a, vector signed long long __b) { - vector signed int __ac = (vector signed int)__a; - vector signed int __bc = (vector signed int)__b; - return (vector signed int)(__ac[1], __ac[3], __bc[1], __bc[3]); -} - -static inline __ATTRS_o_ai vector bool int -vec_pack(vector bool long long __a, vector bool long long __b) { - vector bool int __ac = (vector bool int)__a; - vector bool int __bc = (vector bool int)__b; - return (vector bool int)(__ac[1], __ac[3], __bc[1], __bc[3]); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_pack(vector unsigned long long __a, vector unsigned long long __b) { - vector unsigned int __ac = (vector unsigned int)__a; - vector unsigned int __bc = (vector unsigned int)__b; - return (vector unsigned int)(__ac[1], __ac[3], __bc[1], __bc[3]); -} - -/*-- vec_packs --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_packs(vector signed short __a, vector signed short __b) { - return __builtin_s390_vpksh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_packs(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vpklsh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_packs(vector signed int __a, vector signed int __b) { - return __builtin_s390_vpksf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_packs(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vpklsf(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_packs(vector signed long long __a, vector signed long long __b) { - return __builtin_s390_vpksg(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_packs(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vpklsg(__a, __b); -} - -/*-- vec_packs_cc -----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_packs_cc(vector signed short __a, vector signed short __b, int *__cc) { - return __builtin_s390_vpkshs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_packs_cc(vector unsigned short __a, vector unsigned short __b, int *__cc) { - return __builtin_s390_vpklshs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_packs_cc(vector signed int __a, vector signed int __b, int *__cc) { - return __builtin_s390_vpksfs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_packs_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) { - return __builtin_s390_vpklsfs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_packs_cc(vector signed long long __a, vector signed long long __b, - int *__cc) { - return __builtin_s390_vpksgs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_packs_cc(vector unsigned long long __a, vector unsigned long long __b, - int *__cc) { - return __builtin_s390_vpklsgs(__a, __b, __cc); -} - -/*-- vec_packsu -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_packsu(vector signed short __a, vector signed short __b) { - const vector signed short __zero = (vector signed short)0; - return __builtin_s390_vpklsh( - (vector unsigned short)(__a >= __zero) & (vector unsigned short)__a, - (vector unsigned short)(__b >= __zero) & (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_packsu(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vpklsh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_packsu(vector signed int __a, vector signed int __b) { - const vector signed int __zero = (vector signed int)0; - return __builtin_s390_vpklsf( - (vector unsigned int)(__a >= __zero) & (vector unsigned int)__a, - (vector unsigned int)(__b >= __zero) & (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_packsu(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vpklsf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_packsu(vector signed long long __a, vector signed long long __b) { - const vector signed long long __zero = (vector signed long long)0; - return __builtin_s390_vpklsg( - (vector unsigned long long)(__a >= __zero) & - (vector unsigned long long)__a, - (vector unsigned long long)(__b >= __zero) & - (vector unsigned long long)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_packsu(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vpklsg(__a, __b); -} - -/*-- vec_packsu_cc ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_packsu_cc(vector unsigned short __a, vector unsigned short __b, int *__cc) { - return __builtin_s390_vpklshs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_packsu_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) { - return __builtin_s390_vpklsfs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_packsu_cc(vector unsigned long long __a, vector unsigned long long __b, - int *__cc) { - return __builtin_s390_vpklsgs(__a, __b, __cc); -} - -/*-- vec_unpackh ------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_unpackh(vector signed char __a) { - return __builtin_s390_vuphb(__a); -} - -static inline __ATTRS_o_ai vector bool short -vec_unpackh(vector bool char __a) { - return (vector bool short)__builtin_s390_vuphb((vector signed char)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_unpackh(vector unsigned char __a) { - return __builtin_s390_vuplhb(__a); -} - -static inline __ATTRS_o_ai vector signed int -vec_unpackh(vector signed short __a) { - return __builtin_s390_vuphh(__a); -} - -static inline __ATTRS_o_ai vector bool int -vec_unpackh(vector bool short __a) { - return (vector bool int)__builtin_s390_vuphh((vector signed short)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_unpackh(vector unsigned short __a) { - return __builtin_s390_vuplhh(__a); -} - -static inline __ATTRS_o_ai vector signed long long -vec_unpackh(vector signed int __a) { - return __builtin_s390_vuphf(__a); -} - -static inline __ATTRS_o_ai vector bool long long -vec_unpackh(vector bool int __a) { - return (vector bool long long)__builtin_s390_vuphf((vector signed int)__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_unpackh(vector unsigned int __a) { - return __builtin_s390_vuplhf(__a); -} - -/*-- vec_unpackl ------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_unpackl(vector signed char __a) { - return __builtin_s390_vuplb(__a); -} - -static inline __ATTRS_o_ai vector bool short -vec_unpackl(vector bool char __a) { - return (vector bool short)__builtin_s390_vuplb((vector signed char)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_unpackl(vector unsigned char __a) { - return __builtin_s390_vupllb(__a); -} - -static inline __ATTRS_o_ai vector signed int -vec_unpackl(vector signed short __a) { - return __builtin_s390_vuplhw(__a); -} - -static inline __ATTRS_o_ai vector bool int -vec_unpackl(vector bool short __a) { - return (vector bool int)__builtin_s390_vuplhw((vector signed short)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_unpackl(vector unsigned short __a) { - return __builtin_s390_vupllh(__a); -} - -static inline __ATTRS_o_ai vector signed long long -vec_unpackl(vector signed int __a) { - return __builtin_s390_vuplf(__a); -} - -static inline __ATTRS_o_ai vector bool long long -vec_unpackl(vector bool int __a) { - return (vector bool long long)__builtin_s390_vuplf((vector signed int)__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_unpackl(vector unsigned int __a) { - return __builtin_s390_vupllf(__a); -} - -/*-- vec_cmpeq --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmpeq(vector bool char __a, vector bool char __b) { - return (vector bool char)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmpeq(vector signed char __a, vector signed char __b) { - return (vector bool char)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmpeq(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpeq(vector bool short __a, vector bool short __b) { - return (vector bool short)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpeq(vector signed short __a, vector signed short __b) { - return (vector bool short)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpeq(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpeq(vector bool int __a, vector bool int __b) { - return (vector bool int)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpeq(vector signed int __a, vector signed int __b) { - return (vector bool int)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpeq(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpeq(vector bool long long __a, vector bool long long __b) { - return (vector bool long long)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpeq(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)(__a == __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpeq(vector double __a, vector double __b) { - return (vector bool long long)(__a == __b); -} - -/*-- vec_cmpge --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmpge(vector signed char __a, vector signed char __b) { - return (vector bool char)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmpge(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpge(vector signed short __a, vector signed short __b) { - return (vector bool short)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpge(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpge(vector signed int __a, vector signed int __b) { - return (vector bool int)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpge(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpge(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)(__a >= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpge(vector double __a, vector double __b) { - return (vector bool long long)(__a >= __b); -} - -/*-- vec_cmpgt --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmpgt(vector signed char __a, vector signed char __b) { - return (vector bool char)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmpgt(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpgt(vector signed short __a, vector signed short __b) { - return (vector bool short)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpgt(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpgt(vector signed int __a, vector signed int __b) { - return (vector bool int)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpgt(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpgt(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)(__a > __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmpgt(vector double __a, vector double __b) { - return (vector bool long long)(__a > __b); -} - -/*-- vec_cmple --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmple(vector signed char __a, vector signed char __b) { - return (vector bool char)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmple(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmple(vector signed short __a, vector signed short __b) { - return (vector bool short)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmple(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmple(vector signed int __a, vector signed int __b) { - return (vector bool int)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmple(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmple(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmple(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)(__a <= __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmple(vector double __a, vector double __b) { - return (vector bool long long)(__a <= __b); -} - -/*-- vec_cmplt --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmplt(vector signed char __a, vector signed char __b) { - return (vector bool char)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_cmplt(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmplt(vector signed short __a, vector signed short __b) { - return (vector bool short)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmplt(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmplt(vector signed int __a, vector signed int __b) { - return (vector bool int)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmplt(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmplt(vector signed long long __a, vector signed long long __b) { - return (vector bool long long)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) { - return (vector bool long long)(__a < __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_cmplt(vector double __a, vector double __b) { - return (vector bool long long)(__a < __b); -} - -/*-- vec_all_eq -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs(__a, (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs(__a, (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs(__a, (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_eq(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfcedbs(__a, __b, &__cc); - return __cc == 0; -} - -/*-- vec_all_ne -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs(__a, (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs(__a, (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs(__a, (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ne(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfcedbs(__a, __b, &__cc); - return __cc == 3; -} - -/*-- vec_all_ge -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, (vector signed char)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, (vector unsigned char)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, - (vector unsigned char)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, (vector signed short)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, (vector unsigned short)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, - (vector unsigned short)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, (vector signed int)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, (vector unsigned int)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, - (vector unsigned int)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, (vector signed long long)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, __a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, (vector unsigned long long)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, - (vector unsigned long long)__a, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_ge(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__a, __b, &__cc); - return __cc == 0; -} - -/*-- vec_all_gt -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs(__a, (vector signed char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs(__a, (vector unsigned char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, - (vector unsigned char)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs(__a, (vector signed short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs(__a, (vector unsigned short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, - (vector unsigned short)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs(__a, (vector signed int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs(__a, (vector unsigned int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, - (vector unsigned int)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs(__a, (vector signed long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, (vector unsigned long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, __b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, - (vector unsigned long long)__b, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_gt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__a, __b, &__cc); - return __cc == 0; -} - -/*-- vec_all_le -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_le(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs(__a, (vector signed char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs(__a, (vector unsigned char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, - (vector unsigned char)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs(__a, (vector signed short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs(__a, (vector unsigned short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, - (vector unsigned short)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs(__a, (vector signed int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs(__a, (vector unsigned int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, - (vector unsigned int)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs(__a, (vector signed long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, (vector unsigned long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, __b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, - (vector unsigned long long)__b, &__cc); - return __cc == 3; -} - -static inline __ATTRS_o_ai int -vec_all_le(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__b, __a, &__cc); - return __cc == 0; -} - -/*-- vec_all_lt -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, (vector signed char)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, (vector unsigned char)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, - (vector unsigned char)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, (vector signed short)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, (vector unsigned short)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, - (vector unsigned short)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, (vector signed int)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, (vector unsigned int)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, - (vector unsigned int)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, (vector signed long long)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, __a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, (vector unsigned long long)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, - (vector unsigned long long)__a, &__cc); - return __cc == 0; -} - -static inline __ATTRS_o_ai int -vec_all_lt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__b, __a, &__cc); - return __cc == 0; -} - -/*-- vec_all_nge ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_nge(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__a, __b, &__cc); - return __cc == 3; -} - -/*-- vec_all_ngt ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_ngt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__a, __b, &__cc); - return __cc == 3; -} - -/*-- vec_all_nle ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_nle(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__b, __a, &__cc); - return __cc == 3; -} - -/*-- vec_all_nlt ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_nlt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__b, __a, &__cc); - return __cc == 3; -} - -/*-- vec_all_nan ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_nan(vector double __a) { - int __cc; - __builtin_s390_vftcidb(__a, 15, &__cc); - return __cc == 0; -} - -/*-- vec_all_numeric --------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_all_numeric(vector double __a) { - int __cc; - __builtin_s390_vftcidb(__a, 15, &__cc); - return __cc == 3; -} - -/*-- vec_any_eq -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs(__a, (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs(__a, (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs(__a, (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_eq(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfcedbs(__a, __b, &__cc); - return __cc <= 1; -} - -/*-- vec_any_ne -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs(__a, (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vceqbs((vector signed char)__a, - (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs(__a, (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vceqhs((vector signed short)__a, - (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs(__a, (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vceqfs((vector signed int)__a, - (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs(__a, (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vceqgs((vector signed long long)__a, - (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ne(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfcedbs(__a, __b, &__cc); - return __cc != 0; -} - -/*-- vec_any_ge -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, (vector signed char)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, (vector unsigned char)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, - (vector unsigned char)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, (vector signed short)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, (vector unsigned short)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, - (vector unsigned short)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, (vector signed int)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, (vector unsigned int)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, - (vector unsigned int)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, (vector signed long long)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, __a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, (vector unsigned long long)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, - (vector unsigned long long)__a, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_ge(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__a, __b, &__cc); - return __cc <= 1; -} - -/*-- vec_any_gt -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs(__a, (vector signed char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs(__a, (vector unsigned char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, - (vector unsigned char)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs(__a, (vector signed short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs(__a, (vector unsigned short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, - (vector unsigned short)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs(__a, (vector signed int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs(__a, (vector unsigned int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, - (vector unsigned int)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs(__a, (vector signed long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, (vector unsigned long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, __b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, - (vector unsigned long long)__b, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_gt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__a, __b, &__cc); - return __cc <= 1; -} - -/*-- vec_any_le -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_le(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs(__a, (vector signed char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs(__a, (vector unsigned char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__a, - (vector unsigned char)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs(__a, (vector signed short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs(__a, (vector unsigned short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__a, - (vector unsigned short)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs(__a, (vector signed int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs(__a, (vector unsigned int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__a, - (vector unsigned int)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs(__a, (vector signed long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs(__a, (vector unsigned long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, __b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__a, - (vector unsigned long long)__b, &__cc); - return __cc != 0; -} - -static inline __ATTRS_o_ai int -vec_any_le(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__b, __a, &__cc); - return __cc <= 1; -} - -/*-- vec_any_lt -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchbs((vector signed char)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool char __a, vector signed char __b) { - int __cc; - __builtin_s390_vchbs(__b, (vector signed char)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool char __a, vector unsigned char __b) { - int __cc; - __builtin_s390_vchlbs(__b, (vector unsigned char)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool char __a, vector bool char __b) { - int __cc; - __builtin_s390_vchlbs((vector unsigned char)__b, - (vector unsigned char)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchhs((vector signed short)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool short __a, vector signed short __b) { - int __cc; - __builtin_s390_vchhs(__b, (vector signed short)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool short __a, vector unsigned short __b) { - int __cc; - __builtin_s390_vchlhs(__b, (vector unsigned short)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool short __a, vector bool short __b) { - int __cc; - __builtin_s390_vchlhs((vector unsigned short)__b, - (vector unsigned short)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchfs((vector signed int)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool int __a, vector signed int __b) { - int __cc; - __builtin_s390_vchfs(__b, (vector signed int)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool int __a, vector unsigned int __b) { - int __cc; - __builtin_s390_vchlfs(__b, (vector unsigned int)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool int __a, vector bool int __b) { - int __cc; - __builtin_s390_vchlfs((vector unsigned int)__b, - (vector unsigned int)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector signed long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchgs((vector signed long long)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool long long __a, vector signed long long __b) { - int __cc; - __builtin_s390_vchgs(__b, (vector signed long long)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector unsigned long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, __a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool long long __a, vector unsigned long long __b) { - int __cc; - __builtin_s390_vchlgs(__b, (vector unsigned long long)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector bool long long __a, vector bool long long __b) { - int __cc; - __builtin_s390_vchlgs((vector unsigned long long)__b, - (vector unsigned long long)__a, &__cc); - return __cc <= 1; -} - -static inline __ATTRS_o_ai int -vec_any_lt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__b, __a, &__cc); - return __cc <= 1; -} - -/*-- vec_any_nge ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_nge(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__a, __b, &__cc); - return __cc != 0; -} - -/*-- vec_any_ngt ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_ngt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__a, __b, &__cc); - return __cc != 0; -} - -/*-- vec_any_nle ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_nle(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchedbs(__b, __a, &__cc); - return __cc != 0; -} - -/*-- vec_any_nlt ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_nlt(vector double __a, vector double __b) { - int __cc; - __builtin_s390_vfchdbs(__b, __a, &__cc); - return __cc != 0; -} - -/*-- vec_any_nan ------------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_nan(vector double __a) { - int __cc; - __builtin_s390_vftcidb(__a, 15, &__cc); - return __cc != 3; -} - -/*-- vec_any_numeric --------------------------------------------------------*/ - -static inline __ATTRS_ai int -vec_any_numeric(vector double __a) { - int __cc; - __builtin_s390_vftcidb(__a, 15, &__cc); - return __cc != 0; -} - -/*-- vec_andc ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_andc(vector bool char __a, vector bool char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed char -vec_andc(vector signed char __a, vector signed char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed char -vec_andc(vector bool char __a, vector signed char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed char -vec_andc(vector signed char __a, vector bool char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_andc(vector unsigned char __a, vector unsigned char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_andc(vector bool char __a, vector unsigned char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_andc(vector unsigned char __a, vector bool char __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector bool short -vec_andc(vector bool short __a, vector bool short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed short -vec_andc(vector signed short __a, vector signed short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed short -vec_andc(vector bool short __a, vector signed short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed short -vec_andc(vector signed short __a, vector bool short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_andc(vector unsigned short __a, vector unsigned short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_andc(vector bool short __a, vector unsigned short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_andc(vector unsigned short __a, vector bool short __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector bool int -vec_andc(vector bool int __a, vector bool int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed int -vec_andc(vector signed int __a, vector signed int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed int -vec_andc(vector bool int __a, vector signed int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed int -vec_andc(vector signed int __a, vector bool int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_andc(vector unsigned int __a, vector unsigned int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_andc(vector bool int __a, vector unsigned int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_andc(vector unsigned int __a, vector bool int __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector bool long long -vec_andc(vector bool long long __a, vector bool long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed long long -vec_andc(vector signed long long __a, vector signed long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed long long -vec_andc(vector bool long long __a, vector signed long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector signed long long -vec_andc(vector signed long long __a, vector bool long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_andc(vector unsigned long long __a, vector unsigned long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_andc(vector bool long long __a, vector unsigned long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_andc(vector unsigned long long __a, vector bool long long __b) { - return __a & ~__b; -} - -static inline __ATTRS_o_ai vector double -vec_andc(vector double __a, vector double __b) { - return (vector double)((vector unsigned long long)__a & - ~(vector unsigned long long)__b); -} - -static inline __ATTRS_o_ai vector double -vec_andc(vector bool long long __a, vector double __b) { - return (vector double)((vector unsigned long long)__a & - ~(vector unsigned long long)__b); -} - -static inline __ATTRS_o_ai vector double -vec_andc(vector double __a, vector bool long long __b) { - return (vector double)((vector unsigned long long)__a & - ~(vector unsigned long long)__b); -} - -/*-- vec_nor ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_nor(vector bool char __a, vector bool char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_nor(vector signed char __a, vector signed char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_nor(vector bool char __a, vector signed char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_nor(vector signed char __a, vector bool char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_nor(vector unsigned char __a, vector unsigned char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_nor(vector bool char __a, vector unsigned char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_nor(vector unsigned char __a, vector bool char __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_nor(vector bool short __a, vector bool short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_nor(vector signed short __a, vector signed short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_nor(vector bool short __a, vector signed short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_nor(vector signed short __a, vector bool short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_nor(vector unsigned short __a, vector unsigned short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_nor(vector bool short __a, vector unsigned short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_nor(vector unsigned short __a, vector bool short __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_nor(vector bool int __a, vector bool int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_nor(vector signed int __a, vector signed int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_nor(vector bool int __a, vector signed int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_nor(vector signed int __a, vector bool int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_nor(vector unsigned int __a, vector unsigned int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_nor(vector bool int __a, vector unsigned int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_nor(vector unsigned int __a, vector bool int __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_nor(vector bool long long __a, vector bool long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_nor(vector signed long long __a, vector signed long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_nor(vector bool long long __a, vector signed long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_nor(vector signed long long __a, vector bool long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_nor(vector unsigned long long __a, vector unsigned long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_nor(vector bool long long __a, vector unsigned long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_nor(vector unsigned long long __a, vector bool long long __b) { - return ~(__a | __b); -} - -static inline __ATTRS_o_ai vector double -vec_nor(vector double __a, vector double __b) { - return (vector double)~((vector unsigned long long)__a | - (vector unsigned long long)__b); -} - -static inline __ATTRS_o_ai vector double -vec_nor(vector bool long long __a, vector double __b) { - return (vector double)~((vector unsigned long long)__a | - (vector unsigned long long)__b); -} - -static inline __ATTRS_o_ai vector double -vec_nor(vector double __a, vector bool long long __b) { - return (vector double)~((vector unsigned long long)__a | - (vector unsigned long long)__b); -} - -/*-- vec_cntlz --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cntlz(vector signed char __a) { - return __builtin_s390_vclzb((vector unsigned char)__a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cntlz(vector unsigned char __a) { - return __builtin_s390_vclzb(__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cntlz(vector signed short __a) { - return __builtin_s390_vclzh((vector unsigned short)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cntlz(vector unsigned short __a) { - return __builtin_s390_vclzh(__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cntlz(vector signed int __a) { - return __builtin_s390_vclzf((vector unsigned int)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cntlz(vector unsigned int __a) { - return __builtin_s390_vclzf(__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_cntlz(vector signed long long __a) { - return __builtin_s390_vclzg((vector unsigned long long)__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_cntlz(vector unsigned long long __a) { - return __builtin_s390_vclzg(__a); -} - -/*-- vec_cnttz --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cnttz(vector signed char __a) { - return __builtin_s390_vctzb((vector unsigned char)__a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cnttz(vector unsigned char __a) { - return __builtin_s390_vctzb(__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cnttz(vector signed short __a) { - return __builtin_s390_vctzh((vector unsigned short)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cnttz(vector unsigned short __a) { - return __builtin_s390_vctzh(__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cnttz(vector signed int __a) { - return __builtin_s390_vctzf((vector unsigned int)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cnttz(vector unsigned int __a) { - return __builtin_s390_vctzf(__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_cnttz(vector signed long long __a) { - return __builtin_s390_vctzg((vector unsigned long long)__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_cnttz(vector unsigned long long __a) { - return __builtin_s390_vctzg(__a); -} - -/*-- vec_popcnt -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_popcnt(vector signed char __a) { - return __builtin_s390_vpopctb((vector unsigned char)__a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_popcnt(vector unsigned char __a) { - return __builtin_s390_vpopctb(__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_popcnt(vector signed short __a) { - return __builtin_s390_vpopcth((vector unsigned short)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_popcnt(vector unsigned short __a) { - return __builtin_s390_vpopcth(__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_popcnt(vector signed int __a) { - return __builtin_s390_vpopctf((vector unsigned int)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_popcnt(vector unsigned int __a) { - return __builtin_s390_vpopctf(__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_popcnt(vector signed long long __a) { - return __builtin_s390_vpopctg((vector unsigned long long)__a); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_popcnt(vector unsigned long long __a) { - return __builtin_s390_vpopctg(__a); -} - -/*-- vec_rl -----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_rl(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_verllvb( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_rl(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_verllvb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_rl(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_verllvh( - (vector unsigned short)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_rl(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_verllvh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_rl(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_verllvf( - (vector unsigned int)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_rl(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_verllvf(__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_rl(vector signed long long __a, vector unsigned long long __b) { - return (vector signed long long)__builtin_s390_verllvg( - (vector unsigned long long)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_rl(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_verllvg(__a, __b); -} - -/*-- vec_rli ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_rli(vector signed char __a, unsigned long __b) { - return (vector signed char)__builtin_s390_verllb( - (vector unsigned char)__a, (int)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_rli(vector unsigned char __a, unsigned long __b) { - return __builtin_s390_verllb(__a, (int)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_rli(vector signed short __a, unsigned long __b) { - return (vector signed short)__builtin_s390_verllh( - (vector unsigned short)__a, (int)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_rli(vector unsigned short __a, unsigned long __b) { - return __builtin_s390_verllh(__a, (int)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_rli(vector signed int __a, unsigned long __b) { - return (vector signed int)__builtin_s390_verllf( - (vector unsigned int)__a, (int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_rli(vector unsigned int __a, unsigned long __b) { - return __builtin_s390_verllf(__a, (int)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_rli(vector signed long long __a, unsigned long __b) { - return (vector signed long long)__builtin_s390_verllg( - (vector unsigned long long)__a, (int)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_rli(vector unsigned long long __a, unsigned long __b) { - return __builtin_s390_verllg(__a, (int)__b); -} - -/*-- vec_rl_mask ------------------------------------------------------------*/ - -extern __ATTRS_o vector signed char -vec_rl_mask(vector signed char __a, vector unsigned char __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector unsigned char -vec_rl_mask(vector unsigned char __a, vector unsigned char __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector signed short -vec_rl_mask(vector signed short __a, vector unsigned short __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector unsigned short -vec_rl_mask(vector unsigned short __a, vector unsigned short __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector signed int -vec_rl_mask(vector signed int __a, vector unsigned int __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector unsigned int -vec_rl_mask(vector unsigned int __a, vector unsigned int __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector signed long long -vec_rl_mask(vector signed long long __a, vector unsigned long long __b, - unsigned char __c) __constant(__c); - -extern __ATTRS_o vector unsigned long long -vec_rl_mask(vector unsigned long long __a, vector unsigned long long __b, - unsigned char __c) __constant(__c); - -#define vec_rl_mask(X, Y, Z) ((__typeof__((vec_rl_mask)((X), (Y), (Z)))) \ - __extension__ ({ \ - vector unsigned char __res; \ - vector unsigned char __x = (vector unsigned char)(X); \ - vector unsigned char __y = (vector unsigned char)(Y); \ - switch (sizeof ((X)[0])) { \ - case 1: __res = (vector unsigned char) __builtin_s390_verimb( \ - (vector unsigned char)__x, (vector unsigned char)__x, \ - (vector unsigned char)__y, (Z)); break; \ - case 2: __res = (vector unsigned char) __builtin_s390_verimh( \ - (vector unsigned short)__x, (vector unsigned short)__x, \ - (vector unsigned short)__y, (Z)); break; \ - case 4: __res = (vector unsigned char) __builtin_s390_verimf( \ - (vector unsigned int)__x, (vector unsigned int)__x, \ - (vector unsigned int)__y, (Z)); break; \ - default: __res = (vector unsigned char) __builtin_s390_verimg( \ - (vector unsigned long long)__x, (vector unsigned long long)__x, \ - (vector unsigned long long)__y, (Z)); break; \ - } __res; })) - -/*-- vec_sll ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_sll(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_sll(vector signed char __a, vector unsigned short __b) { - return (vector signed char)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_sll(vector signed char __a, vector unsigned int __b) { - return (vector signed char)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sll(vector bool char __a, vector unsigned char __b) { - return (vector bool char)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sll(vector bool char __a, vector unsigned short __b) { - return (vector bool char)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sll(vector bool char __a, vector unsigned int __b) { - return (vector bool char)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sll(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsl(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sll(vector unsigned char __a, vector unsigned short __b) { - return __builtin_s390_vsl(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sll(vector unsigned char __a, vector unsigned int __b) { - return __builtin_s390_vsl(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sll(vector signed short __a, vector unsigned char __b) { - return (vector signed short)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sll(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sll(vector signed short __a, vector unsigned int __b) { - return (vector signed short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sll(vector bool short __a, vector unsigned char __b) { - return (vector bool short)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sll(vector bool short __a, vector unsigned short __b) { - return (vector bool short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sll(vector bool short __a, vector unsigned int __b) { - return (vector bool short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sll(vector unsigned short __a, vector unsigned char __b) { - return (vector unsigned short)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sll(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sll(vector unsigned short __a, vector unsigned int __b) { - return (vector unsigned short)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sll(vector signed int __a, vector unsigned char __b) { - return (vector signed int)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sll(vector signed int __a, vector unsigned short __b) { - return (vector signed int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sll(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sll(vector bool int __a, vector unsigned char __b) { - return (vector bool int)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sll(vector bool int __a, vector unsigned short __b) { - return (vector bool int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sll(vector bool int __a, vector unsigned int __b) { - return (vector bool int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sll(vector unsigned int __a, vector unsigned char __b) { - return (vector unsigned int)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sll(vector unsigned int __a, vector unsigned short __b) { - return (vector unsigned int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sll(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sll(vector signed long long __a, vector unsigned char __b) { - return (vector signed long long)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sll(vector signed long long __a, vector unsigned short __b) { - return (vector signed long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sll(vector signed long long __a, vector unsigned int __b) { - return (vector signed long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sll(vector bool long long __a, vector unsigned char __b) { - return (vector bool long long)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sll(vector bool long long __a, vector unsigned short __b) { - return (vector bool long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sll(vector bool long long __a, vector unsigned int __b) { - return (vector bool long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sll(vector unsigned long long __a, vector unsigned char __b) { - return (vector unsigned long long)__builtin_s390_vsl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sll(vector unsigned long long __a, vector unsigned short __b) { - return (vector unsigned long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sll(vector unsigned long long __a, vector unsigned int __b) { - return (vector unsigned long long)__builtin_s390_vsl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_slb ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_slb(vector signed char __a, vector signed char __b) { - return (vector signed char)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_slb(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vslb( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_slb(vector unsigned char __a, vector signed char __b) { - return __builtin_s390_vslb(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_slb(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vslb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_slb(vector signed short __a, vector signed short __b) { - return (vector signed short)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_slb(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_slb(vector unsigned short __a, vector signed short __b) { - return (vector unsigned short)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_slb(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_slb(vector signed int __a, vector signed int __b) { - return (vector signed int)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_slb(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_slb(vector unsigned int __a, vector signed int __b) { - return (vector unsigned int)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_slb(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_slb(vector signed long long __a, vector signed long long __b) { - return (vector signed long long)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_slb(vector signed long long __a, vector unsigned long long __b) { - return (vector signed long long)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_slb(vector unsigned long long __a, vector signed long long __b) { - return (vector unsigned long long)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_slb(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_slb(vector double __a, vector signed long long __b) { - return (vector double)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_slb(vector double __a, vector unsigned long long __b) { - return (vector double)__builtin_s390_vslb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_sld ----------------------------------------------------------------*/ - -extern __ATTRS_o vector signed char -vec_sld(vector signed char __a, vector signed char __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector unsigned char -vec_sld(vector unsigned char __a, vector unsigned char __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector signed short -vec_sld(vector signed short __a, vector signed short __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector unsigned short -vec_sld(vector unsigned short __a, vector unsigned short __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector signed int -vec_sld(vector signed int __a, vector signed int __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector unsigned int -vec_sld(vector unsigned int __a, vector unsigned int __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector signed long long -vec_sld(vector signed long long __a, vector signed long long __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector unsigned long long -vec_sld(vector unsigned long long __a, vector unsigned long long __b, int __c) - __constant_range(__c, 0, 15); - -extern __ATTRS_o vector double -vec_sld(vector double __a, vector double __b, int __c) - __constant_range(__c, 0, 15); - -#define vec_sld(X, Y, Z) ((__typeof__((vec_sld)((X), (Y), (Z)))) \ - __builtin_s390_vsldb((vector unsigned char)(X), \ - (vector unsigned char)(Y), (Z))) - -/*-- vec_sldw ---------------------------------------------------------------*/ - -extern __ATTRS_o vector signed char -vec_sldw(vector signed char __a, vector signed char __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector unsigned char -vec_sldw(vector unsigned char __a, vector unsigned char __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector signed short -vec_sldw(vector signed short __a, vector signed short __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector unsigned short -vec_sldw(vector unsigned short __a, vector unsigned short __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector signed int -vec_sldw(vector signed int __a, vector signed int __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector unsigned int -vec_sldw(vector unsigned int __a, vector unsigned int __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector signed long long -vec_sldw(vector signed long long __a, vector signed long long __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector unsigned long long -vec_sldw(vector unsigned long long __a, vector unsigned long long __b, int __c) - __constant_range(__c, 0, 3); - -extern __ATTRS_o vector double -vec_sldw(vector double __a, vector double __b, int __c) - __constant_range(__c, 0, 3); - -#define vec_sldw(X, Y, Z) ((__typeof__((vec_sldw)((X), (Y), (Z)))) \ - __builtin_s390_vsldb((vector unsigned char)(X), \ - (vector unsigned char)(Y), (Z) * 4)) - -/*-- vec_sral ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_sral(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_sral(vector signed char __a, vector unsigned short __b) { - return (vector signed char)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_sral(vector signed char __a, vector unsigned int __b) { - return (vector signed char)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sral(vector bool char __a, vector unsigned char __b) { - return (vector bool char)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sral(vector bool char __a, vector unsigned short __b) { - return (vector bool char)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_sral(vector bool char __a, vector unsigned int __b) { - return (vector bool char)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sral(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsra(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sral(vector unsigned char __a, vector unsigned short __b) { - return __builtin_s390_vsra(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sral(vector unsigned char __a, vector unsigned int __b) { - return __builtin_s390_vsra(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sral(vector signed short __a, vector unsigned char __b) { - return (vector signed short)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sral(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_sral(vector signed short __a, vector unsigned int __b) { - return (vector signed short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sral(vector bool short __a, vector unsigned char __b) { - return (vector bool short)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sral(vector bool short __a, vector unsigned short __b) { - return (vector bool short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_sral(vector bool short __a, vector unsigned int __b) { - return (vector bool short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sral(vector unsigned short __a, vector unsigned char __b) { - return (vector unsigned short)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sral(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_sral(vector unsigned short __a, vector unsigned int __b) { - return (vector unsigned short)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sral(vector signed int __a, vector unsigned char __b) { - return (vector signed int)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sral(vector signed int __a, vector unsigned short __b) { - return (vector signed int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_sral(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sral(vector bool int __a, vector unsigned char __b) { - return (vector bool int)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sral(vector bool int __a, vector unsigned short __b) { - return (vector bool int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_sral(vector bool int __a, vector unsigned int __b) { - return (vector bool int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sral(vector unsigned int __a, vector unsigned char __b) { - return (vector unsigned int)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sral(vector unsigned int __a, vector unsigned short __b) { - return (vector unsigned int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sral(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sral(vector signed long long __a, vector unsigned char __b) { - return (vector signed long long)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sral(vector signed long long __a, vector unsigned short __b) { - return (vector signed long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_sral(vector signed long long __a, vector unsigned int __b) { - return (vector signed long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sral(vector bool long long __a, vector unsigned char __b) { - return (vector bool long long)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sral(vector bool long long __a, vector unsigned short __b) { - return (vector bool long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_sral(vector bool long long __a, vector unsigned int __b) { - return (vector bool long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sral(vector unsigned long long __a, vector unsigned char __b) { - return (vector unsigned long long)__builtin_s390_vsra( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sral(vector unsigned long long __a, vector unsigned short __b) { - return (vector unsigned long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sral(vector unsigned long long __a, vector unsigned int __b) { - return (vector unsigned long long)__builtin_s390_vsra( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_srab ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_srab(vector signed char __a, vector signed char __b) { - return (vector signed char)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_srab(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vsrab( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srab(vector unsigned char __a, vector signed char __b) { - return __builtin_s390_vsrab(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srab(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsrab(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srab(vector signed short __a, vector signed short __b) { - return (vector signed short)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srab(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srab(vector unsigned short __a, vector signed short __b) { - return (vector unsigned short)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srab(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srab(vector signed int __a, vector signed int __b) { - return (vector signed int)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srab(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srab(vector unsigned int __a, vector signed int __b) { - return (vector unsigned int)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srab(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srab(vector signed long long __a, vector signed long long __b) { - return (vector signed long long)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srab(vector signed long long __a, vector unsigned long long __b) { - return (vector signed long long)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srab(vector unsigned long long __a, vector signed long long __b) { - return (vector unsigned long long)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srab(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_srab(vector double __a, vector signed long long __b) { - return (vector double)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_srab(vector double __a, vector unsigned long long __b) { - return (vector double)__builtin_s390_vsrab( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_srl ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_srl(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed char -vec_srl(vector signed char __a, vector unsigned short __b) { - return (vector signed char)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_srl(vector signed char __a, vector unsigned int __b) { - return (vector signed char)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_srl(vector bool char __a, vector unsigned char __b) { - return (vector bool char)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool char -vec_srl(vector bool char __a, vector unsigned short __b) { - return (vector bool char)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool char -vec_srl(vector bool char __a, vector unsigned int __b) { - return (vector bool char)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srl(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsrl(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srl(vector unsigned char __a, vector unsigned short __b) { - return __builtin_s390_vsrl(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srl(vector unsigned char __a, vector unsigned int __b) { - return __builtin_s390_vsrl(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srl(vector signed short __a, vector unsigned char __b) { - return (vector signed short)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srl(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srl(vector signed short __a, vector unsigned int __b) { - return (vector signed short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_srl(vector bool short __a, vector unsigned char __b) { - return (vector bool short)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool short -vec_srl(vector bool short __a, vector unsigned short __b) { - return (vector bool short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool short -vec_srl(vector bool short __a, vector unsigned int __b) { - return (vector bool short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srl(vector unsigned short __a, vector unsigned char __b) { - return (vector unsigned short)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srl(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srl(vector unsigned short __a, vector unsigned int __b) { - return (vector unsigned short)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srl(vector signed int __a, vector unsigned char __b) { - return (vector signed int)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srl(vector signed int __a, vector unsigned short __b) { - return (vector signed int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srl(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_srl(vector bool int __a, vector unsigned char __b) { - return (vector bool int)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool int -vec_srl(vector bool int __a, vector unsigned short __b) { - return (vector bool int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool int -vec_srl(vector bool int __a, vector unsigned int __b) { - return (vector bool int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srl(vector unsigned int __a, vector unsigned char __b) { - return (vector unsigned int)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srl(vector unsigned int __a, vector unsigned short __b) { - return (vector unsigned int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srl(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srl(vector signed long long __a, vector unsigned char __b) { - return (vector signed long long)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srl(vector signed long long __a, vector unsigned short __b) { - return (vector signed long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srl(vector signed long long __a, vector unsigned int __b) { - return (vector signed long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_srl(vector bool long long __a, vector unsigned char __b) { - return (vector bool long long)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_srl(vector bool long long __a, vector unsigned short __b) { - return (vector bool long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector bool long long -vec_srl(vector bool long long __a, vector unsigned int __b) { - return (vector bool long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srl(vector unsigned long long __a, vector unsigned char __b) { - return (vector unsigned long long)__builtin_s390_vsrl( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srl(vector unsigned long long __a, vector unsigned short __b) { - return (vector unsigned long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srl(vector unsigned long long __a, vector unsigned int __b) { - return (vector unsigned long long)__builtin_s390_vsrl( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_srb ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_srb(vector signed char __a, vector signed char __b) { - return (vector signed char)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed char -vec_srb(vector signed char __a, vector unsigned char __b) { - return (vector signed char)__builtin_s390_vsrlb( - (vector unsigned char)__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srb(vector unsigned char __a, vector signed char __b) { - return __builtin_s390_vsrlb(__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_srb(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsrlb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srb(vector signed short __a, vector signed short __b) { - return (vector signed short)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed short -vec_srb(vector signed short __a, vector unsigned short __b) { - return (vector signed short)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srb(vector unsigned short __a, vector signed short __b) { - return (vector unsigned short)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_srb(vector unsigned short __a, vector unsigned short __b) { - return (vector unsigned short)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srb(vector signed int __a, vector signed int __b) { - return (vector signed int)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed int -vec_srb(vector signed int __a, vector unsigned int __b) { - return (vector signed int)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srb(vector unsigned int __a, vector signed int __b) { - return (vector unsigned int)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_srb(vector unsigned int __a, vector unsigned int __b) { - return (vector unsigned int)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srb(vector signed long long __a, vector signed long long __b) { - return (vector signed long long)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_srb(vector signed long long __a, vector unsigned long long __b) { - return (vector signed long long)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srb(vector unsigned long long __a, vector signed long long __b) { - return (vector unsigned long long)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_srb(vector unsigned long long __a, vector unsigned long long __b) { - return (vector unsigned long long)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_srb(vector double __a, vector signed long long __b) { - return (vector double)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector double -vec_srb(vector double __a, vector unsigned long long __b) { - return (vector double)__builtin_s390_vsrlb( - (vector unsigned char)__a, (vector unsigned char)__b); -} - -/*-- vec_abs ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_abs(vector signed char __a) { - return vec_sel(__a, -__a, vec_cmplt(__a, (vector signed char)0)); -} - -static inline __ATTRS_o_ai vector signed short -vec_abs(vector signed short __a) { - return vec_sel(__a, -__a, vec_cmplt(__a, (vector signed short)0)); -} - -static inline __ATTRS_o_ai vector signed int -vec_abs(vector signed int __a) { - return vec_sel(__a, -__a, vec_cmplt(__a, (vector signed int)0)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_abs(vector signed long long __a) { - return vec_sel(__a, -__a, vec_cmplt(__a, (vector signed long long)0)); -} - -static inline __ATTRS_o_ai vector double -vec_abs(vector double __a) { - return __builtin_s390_vflpdb(__a); -} - -/*-- vec_nabs ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_nabs(vector double __a) { - return __builtin_s390_vflndb(__a); -} - -/*-- vec_max ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_max(vector signed char __a, vector signed char __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed char -vec_max(vector signed char __a, vector bool char __b) { - vector signed char __bc = (vector signed char)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed char -vec_max(vector bool char __a, vector signed char __b) { - vector signed char __ac = (vector signed char)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_max(vector unsigned char __a, vector unsigned char __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_max(vector unsigned char __a, vector bool char __b) { - vector unsigned char __bc = (vector unsigned char)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_max(vector bool char __a, vector unsigned char __b) { - vector unsigned char __ac = (vector unsigned char)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed short -vec_max(vector signed short __a, vector signed short __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed short -vec_max(vector signed short __a, vector bool short __b) { - vector signed short __bc = (vector signed short)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed short -vec_max(vector bool short __a, vector signed short __b) { - vector signed short __ac = (vector signed short)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_max(vector unsigned short __a, vector unsigned short __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_max(vector unsigned short __a, vector bool short __b) { - vector unsigned short __bc = (vector unsigned short)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_max(vector bool short __a, vector unsigned short __b) { - vector unsigned short __ac = (vector unsigned short)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed int -vec_max(vector signed int __a, vector signed int __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed int -vec_max(vector signed int __a, vector bool int __b) { - vector signed int __bc = (vector signed int)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed int -vec_max(vector bool int __a, vector signed int __b) { - vector signed int __ac = (vector signed int)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_max(vector unsigned int __a, vector unsigned int __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_max(vector unsigned int __a, vector bool int __b) { - vector unsigned int __bc = (vector unsigned int)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_max(vector bool int __a, vector unsigned int __b) { - vector unsigned int __ac = (vector unsigned int)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_max(vector signed long long __a, vector signed long long __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_max(vector signed long long __a, vector bool long long __b) { - vector signed long long __bc = (vector signed long long)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_max(vector bool long long __a, vector signed long long __b) { - vector signed long long __ac = (vector signed long long)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_max(vector unsigned long long __a, vector unsigned long long __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_max(vector unsigned long long __a, vector bool long long __b) { - vector unsigned long long __bc = (vector unsigned long long)__b; - return vec_sel(__bc, __a, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_max(vector bool long long __a, vector unsigned long long __b) { - vector unsigned long long __ac = (vector unsigned long long)__a; - return vec_sel(__b, __ac, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector double -vec_max(vector double __a, vector double __b) { - return vec_sel(__b, __a, vec_cmpgt(__a, __b)); -} - -/*-- vec_min ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_min(vector signed char __a, vector signed char __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed char -vec_min(vector signed char __a, vector bool char __b) { - vector signed char __bc = (vector signed char)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed char -vec_min(vector bool char __a, vector signed char __b) { - vector signed char __ac = (vector signed char)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_min(vector unsigned char __a, vector unsigned char __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_min(vector unsigned char __a, vector bool char __b) { - vector unsigned char __bc = (vector unsigned char)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_min(vector bool char __a, vector unsigned char __b) { - vector unsigned char __ac = (vector unsigned char)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed short -vec_min(vector signed short __a, vector signed short __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed short -vec_min(vector signed short __a, vector bool short __b) { - vector signed short __bc = (vector signed short)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed short -vec_min(vector bool short __a, vector signed short __b) { - vector signed short __ac = (vector signed short)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_min(vector unsigned short __a, vector unsigned short __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_min(vector unsigned short __a, vector bool short __b) { - vector unsigned short __bc = (vector unsigned short)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_min(vector bool short __a, vector unsigned short __b) { - vector unsigned short __ac = (vector unsigned short)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed int -vec_min(vector signed int __a, vector signed int __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed int -vec_min(vector signed int __a, vector bool int __b) { - vector signed int __bc = (vector signed int)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed int -vec_min(vector bool int __a, vector signed int __b) { - vector signed int __ac = (vector signed int)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_min(vector unsigned int __a, vector unsigned int __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_min(vector unsigned int __a, vector bool int __b) { - vector unsigned int __bc = (vector unsigned int)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_min(vector bool int __a, vector unsigned int __b) { - vector unsigned int __ac = (vector unsigned int)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_min(vector signed long long __a, vector signed long long __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_min(vector signed long long __a, vector bool long long __b) { - vector signed long long __bc = (vector signed long long)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector signed long long -vec_min(vector bool long long __a, vector signed long long __b) { - vector signed long long __ac = (vector signed long long)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_min(vector unsigned long long __a, vector unsigned long long __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_min(vector unsigned long long __a, vector bool long long __b) { - vector unsigned long long __bc = (vector unsigned long long)__b; - return vec_sel(__a, __bc, vec_cmpgt(__a, __bc)); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_min(vector bool long long __a, vector unsigned long long __b) { - vector unsigned long long __ac = (vector unsigned long long)__a; - return vec_sel(__ac, __b, vec_cmpgt(__ac, __b)); -} - -static inline __ATTRS_o_ai vector double -vec_min(vector double __a, vector double __b) { - return vec_sel(__a, __b, vec_cmpgt(__a, __b)); -} - -/*-- vec_add_u128 -----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_add_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vaq(__a, __b); -} - -/*-- vec_addc ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_addc(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vaccb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_addc(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vacch(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_addc(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vaccf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_addc(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vaccg(__a, __b); -} - -/*-- vec_addc_u128 ----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_addc_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vaccq(__a, __b); -} - -/*-- vec_adde_u128 ----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_adde_u128(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vacq(__a, __b, __c); -} - -/*-- vec_addec_u128 ---------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_addec_u128(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vacccq(__a, __b, __c); -} - -/*-- vec_avg ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_avg(vector signed char __a, vector signed char __b) { - return __builtin_s390_vavgb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_avg(vector signed short __a, vector signed short __b) { - return __builtin_s390_vavgh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_avg(vector signed int __a, vector signed int __b) { - return __builtin_s390_vavgf(__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_avg(vector signed long long __a, vector signed long long __b) { - return __builtin_s390_vavgg(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_avg(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vavglb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_avg(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vavglh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_avg(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vavglf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_avg(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vavglg(__a, __b); -} - -/*-- vec_checksum -----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned int -vec_checksum(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vcksm(__a, __b); -} - -/*-- vec_gfmsum -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned short -vec_gfmsum(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vgfmb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_gfmsum(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vgfmh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_gfmsum(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vgfmf(__a, __b); -} - -/*-- vec_gfmsum_128 ---------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_gfmsum_128(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vgfmg(__a, __b); -} - -/*-- vec_gfmsum_accum -------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned short -vec_gfmsum_accum(vector unsigned char __a, vector unsigned char __b, - vector unsigned short __c) { - return __builtin_s390_vgfmab(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_gfmsum_accum(vector unsigned short __a, vector unsigned short __b, - vector unsigned int __c) { - return __builtin_s390_vgfmah(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_gfmsum_accum(vector unsigned int __a, vector unsigned int __b, - vector unsigned long long __c) { - return __builtin_s390_vgfmaf(__a, __b, __c); -} - -/*-- vec_gfmsum_accum_128 ---------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_gfmsum_accum_128(vector unsigned long long __a, - vector unsigned long long __b, - vector unsigned char __c) { - return __builtin_s390_vgfmag(__a, __b, __c); -} - -/*-- vec_mladd --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_mladd(vector signed char __a, vector signed char __b, - vector signed char __c) { - return __a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed char -vec_mladd(vector unsigned char __a, vector signed char __b, - vector signed char __c) { - return (vector signed char)__a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed char -vec_mladd(vector signed char __a, vector unsigned char __b, - vector unsigned char __c) { - return __a * (vector signed char)__b + (vector signed char)__c; -} - -static inline __ATTRS_o_ai vector unsigned char -vec_mladd(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed short -vec_mladd(vector signed short __a, vector signed short __b, - vector signed short __c) { - return __a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed short -vec_mladd(vector unsigned short __a, vector signed short __b, - vector signed short __c) { - return (vector signed short)__a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed short -vec_mladd(vector signed short __a, vector unsigned short __b, - vector unsigned short __c) { - return __a * (vector signed short)__b + (vector signed short)__c; -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mladd(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed int -vec_mladd(vector signed int __a, vector signed int __b, - vector signed int __c) { - return __a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed int -vec_mladd(vector unsigned int __a, vector signed int __b, - vector signed int __c) { - return (vector signed int)__a * __b + __c; -} - -static inline __ATTRS_o_ai vector signed int -vec_mladd(vector signed int __a, vector unsigned int __b, - vector unsigned int __c) { - return __a * (vector signed int)__b + (vector signed int)__c; -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mladd(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __a * __b + __c; -} - -/*-- vec_mhadd --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_mhadd(vector signed char __a, vector signed char __b, - vector signed char __c) { - return __builtin_s390_vmahb(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_mhadd(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vmalhb(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed short -vec_mhadd(vector signed short __a, vector signed short __b, - vector signed short __c) { - return __builtin_s390_vmahh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mhadd(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __builtin_s390_vmalhh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed int -vec_mhadd(vector signed int __a, vector signed int __b, - vector signed int __c) { - return __builtin_s390_vmahf(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mhadd(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __builtin_s390_vmalhf(__a, __b, __c); -} - -/*-- vec_meadd --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_meadd(vector signed char __a, vector signed char __b, - vector signed short __c) { - return __builtin_s390_vmaeb(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_meadd(vector unsigned char __a, vector unsigned char __b, - vector unsigned short __c) { - return __builtin_s390_vmaleb(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed int -vec_meadd(vector signed short __a, vector signed short __b, - vector signed int __c) { - return __builtin_s390_vmaeh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_meadd(vector unsigned short __a, vector unsigned short __b, - vector unsigned int __c) { - return __builtin_s390_vmaleh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed long long -vec_meadd(vector signed int __a, vector signed int __b, - vector signed long long __c) { - return __builtin_s390_vmaef(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_meadd(vector unsigned int __a, vector unsigned int __b, - vector unsigned long long __c) { - return __builtin_s390_vmalef(__a, __b, __c); -} - -/*-- vec_moadd --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_moadd(vector signed char __a, vector signed char __b, - vector signed short __c) { - return __builtin_s390_vmaob(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_moadd(vector unsigned char __a, vector unsigned char __b, - vector unsigned short __c) { - return __builtin_s390_vmalob(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed int -vec_moadd(vector signed short __a, vector signed short __b, - vector signed int __c) { - return __builtin_s390_vmaoh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_moadd(vector unsigned short __a, vector unsigned short __b, - vector unsigned int __c) { - return __builtin_s390_vmaloh(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector signed long long -vec_moadd(vector signed int __a, vector signed int __b, - vector signed long long __c) { - return __builtin_s390_vmaof(__a, __b, __c); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_moadd(vector unsigned int __a, vector unsigned int __b, - vector unsigned long long __c) { - return __builtin_s390_vmalof(__a, __b, __c); -} - -/*-- vec_mulh ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_mulh(vector signed char __a, vector signed char __b) { - return __builtin_s390_vmhb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_mulh(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vmlhb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_mulh(vector signed short __a, vector signed short __b) { - return __builtin_s390_vmhh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mulh(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vmlhh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_mulh(vector signed int __a, vector signed int __b) { - return __builtin_s390_vmhf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mulh(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vmlhf(__a, __b); -} - -/*-- vec_mule ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_mule(vector signed char __a, vector signed char __b) { - return __builtin_s390_vmeb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mule(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vmleb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_mule(vector signed short __a, vector signed short __b) { - return __builtin_s390_vmeh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mule(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vmleh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_mule(vector signed int __a, vector signed int __b) { - return __builtin_s390_vmef(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_mule(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vmlef(__a, __b); -} - -/*-- vec_mulo ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed short -vec_mulo(vector signed char __a, vector signed char __b) { - return __builtin_s390_vmob(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_mulo(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vmlob(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_mulo(vector signed short __a, vector signed short __b) { - return __builtin_s390_vmoh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_mulo(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vmloh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed long long -vec_mulo(vector signed int __a, vector signed int __b) { - return __builtin_s390_vmof(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_mulo(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vmlof(__a, __b); -} - -/*-- vec_sub_u128 -----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_sub_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsq(__a, __b); -} - -/*-- vec_subc ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_subc(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vscbib(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_subc(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vscbih(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_subc(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vscbif(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_subc(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vscbig(__a, __b); -} - -/*-- vec_subc_u128 ----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_subc_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vscbiq(__a, __b); -} - -/*-- vec_sube_u128 ----------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_sube_u128(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vsbiq(__a, __b, __c); -} - -/*-- vec_subec_u128 ---------------------------------------------------------*/ - -static inline __ATTRS_ai vector unsigned char -vec_subec_u128(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vsbcbiq(__a, __b, __c); -} - -/*-- vec_sum2 ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned long long -vec_sum2(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vsumgh(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned long long -vec_sum2(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vsumgf(__a, __b); -} - -/*-- vec_sum_u128 -----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_sum_u128(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vsumqf(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_sum_u128(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vsumqg(__a, __b); -} - -/*-- vec_sum4 ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned int -vec_sum4(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vsumb(__a, __b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_sum4(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vsumh(__a, __b); -} - -/*-- vec_test_mask ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai int -vec_test_mask(vector signed char __a, vector unsigned char __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vtm(__a, __b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector signed short __a, vector unsigned short __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector signed int __a, vector unsigned int __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector signed long long __a, vector unsigned long long __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai int -vec_test_mask(vector double __a, vector unsigned long long __b) { - return __builtin_s390_vtm((vector unsigned char)__a, - (vector unsigned char)__b); -} - -/*-- vec_madd ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_madd(vector double __a, vector double __b, vector double __c) { - return __builtin_s390_vfmadb(__a, __b, __c); -} - -/*-- vec_msub ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_msub(vector double __a, vector double __b, vector double __c) { - return __builtin_s390_vfmsdb(__a, __b, __c); -} - -/*-- vec_sqrt ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_sqrt(vector double __a) { - return __builtin_s390_vfsqdb(__a); -} - -/*-- vec_ld2f ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_ld2f(const float *__ptr) { - typedef float __v2f32 __attribute__((__vector_size__(8))); - return __builtin_convertvector(*(const __v2f32 *)__ptr, vector double); -} - -/*-- vec_st2f ---------------------------------------------------------------*/ - -static inline __ATTRS_ai void -vec_st2f(vector double __a, float *__ptr) { - typedef float __v2f32 __attribute__((__vector_size__(8))); - *(__v2f32 *)__ptr = __builtin_convertvector(__a, __v2f32); -} - -/*-- vec_ctd ----------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector double -vec_ctd(vector signed long long __a, int __b) - __constant_range(__b, 0, 31) { - vector double __conv = __builtin_convertvector(__a, vector double); - __conv *= (vector double)(vector unsigned long long)((0x3ffULL - __b) << 52); - return __conv; -} - -static inline __ATTRS_o_ai vector double -vec_ctd(vector unsigned long long __a, int __b) - __constant_range(__b, 0, 31) { - vector double __conv = __builtin_convertvector(__a, vector double); - __conv *= (vector double)(vector unsigned long long)((0x3ffULL - __b) << 52); - return __conv; -} - -/*-- vec_ctsl ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed long long -vec_ctsl(vector double __a, int __b) - __constant_range(__b, 0, 31) { - __a *= (vector double)(vector unsigned long long)((0x3ffULL + __b) << 52); - return __builtin_convertvector(__a, vector signed long long); -} - -/*-- vec_ctul ---------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned long long -vec_ctul(vector double __a, int __b) - __constant_range(__b, 0, 31) { - __a *= (vector double)(vector unsigned long long)((0x3ffULL + __b) << 52); - return __builtin_convertvector(__a, vector unsigned long long); -} - -/*-- vec_roundp -------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_roundp(vector double __a) { - return __builtin_s390_vfidb(__a, 4, 6); -} - -/*-- vec_ceil ---------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_ceil(vector double __a) { - // On this platform, vec_ceil never triggers the IEEE-inexact exception. - return __builtin_s390_vfidb(__a, 4, 6); -} - -/*-- vec_roundm -------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_roundm(vector double __a) { - return __builtin_s390_vfidb(__a, 4, 7); -} - -/*-- vec_floor --------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_floor(vector double __a) { - // On this platform, vec_floor never triggers the IEEE-inexact exception. - return __builtin_s390_vfidb(__a, 4, 7); -} - -/*-- vec_roundz -------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_roundz(vector double __a) { - return __builtin_s390_vfidb(__a, 4, 5); -} - -/*-- vec_trunc --------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_trunc(vector double __a) { - // On this platform, vec_trunc never triggers the IEEE-inexact exception. - return __builtin_s390_vfidb(__a, 4, 5); -} - -/*-- vec_roundc -------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_roundc(vector double __a) { - return __builtin_s390_vfidb(__a, 4, 0); -} - -/*-- vec_round --------------------------------------------------------------*/ - -static inline __ATTRS_ai vector double -vec_round(vector double __a) { - return __builtin_s390_vfidb(__a, 4, 4); -} - -/*-- vec_fp_test_data_class -------------------------------------------------*/ - -#define vec_fp_test_data_class(X, Y, Z) \ - ((vector bool long long)__builtin_s390_vftcidb((X), (Y), (Z))) - -/*-- vec_cp_until_zero ------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cp_until_zero(vector signed char __a) { - return (vector signed char)__builtin_s390_vistrb((vector unsigned char)__a); -} - -static inline __ATTRS_o_ai vector bool char -vec_cp_until_zero(vector bool char __a) { - return (vector bool char)__builtin_s390_vistrb((vector unsigned char)__a); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cp_until_zero(vector unsigned char __a) { - return __builtin_s390_vistrb(__a); -} - -static inline __ATTRS_o_ai vector signed short -vec_cp_until_zero(vector signed short __a) { - return (vector signed short)__builtin_s390_vistrh((vector unsigned short)__a); -} - -static inline __ATTRS_o_ai vector bool short -vec_cp_until_zero(vector bool short __a) { - return (vector bool short)__builtin_s390_vistrh((vector unsigned short)__a); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cp_until_zero(vector unsigned short __a) { - return __builtin_s390_vistrh(__a); -} - -static inline __ATTRS_o_ai vector signed int -vec_cp_until_zero(vector signed int __a) { - return (vector signed int)__builtin_s390_vistrf((vector unsigned int)__a); -} - -static inline __ATTRS_o_ai vector bool int -vec_cp_until_zero(vector bool int __a) { - return (vector bool int)__builtin_s390_vistrf((vector unsigned int)__a); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cp_until_zero(vector unsigned int __a) { - return __builtin_s390_vistrf(__a); -} - -/*-- vec_cp_until_zero_cc ---------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cp_until_zero_cc(vector signed char __a, int *__cc) { - return (vector signed char) - __builtin_s390_vistrbs((vector unsigned char)__a, __cc); -} - -static inline __ATTRS_o_ai vector bool char -vec_cp_until_zero_cc(vector bool char __a, int *__cc) { - return (vector bool char) - __builtin_s390_vistrbs((vector unsigned char)__a, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cp_until_zero_cc(vector unsigned char __a, int *__cc) { - return __builtin_s390_vistrbs(__a, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_cp_until_zero_cc(vector signed short __a, int *__cc) { - return (vector signed short) - __builtin_s390_vistrhs((vector unsigned short)__a, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_cp_until_zero_cc(vector bool short __a, int *__cc) { - return (vector bool short) - __builtin_s390_vistrhs((vector unsigned short)__a, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cp_until_zero_cc(vector unsigned short __a, int *__cc) { - return __builtin_s390_vistrhs(__a, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_cp_until_zero_cc(vector signed int __a, int *__cc) { - return (vector signed int) - __builtin_s390_vistrfs((vector unsigned int)__a, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_cp_until_zero_cc(vector bool int __a, int *__cc) { - return (vector bool int)__builtin_s390_vistrfs((vector unsigned int)__a, - __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cp_until_zero_cc(vector unsigned int __a, int *__cc) { - return __builtin_s390_vistrfs(__a, __cc); -} - -/*-- vec_cmpeq_idx ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpeq_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfeeb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfeeb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfeeb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpeq_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfeeh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfeeh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfeeh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpeq_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfeef((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfeef((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfeef(__a, __b); -} - -/*-- vec_cmpeq_idx_cc -------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpeq_idx_cc(vector signed char __a, vector signed char __b, int *__cc) { - return (vector signed char) - __builtin_s390_vfeebs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfeebs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfeebs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpeq_idx_cc(vector signed short __a, vector signed short __b, int *__cc) { - return (vector signed short) - __builtin_s390_vfeehs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_idx_cc(vector bool short __a, vector bool short __b, int *__cc) { - return __builtin_s390_vfeehs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfeehs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpeq_idx_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector signed int) - __builtin_s390_vfeefs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfeefs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_idx_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) { - return __builtin_s390_vfeefs(__a, __b, __cc); -} - -/*-- vec_cmpeq_or_0_idx -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpeq_or_0_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfeezb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_or_0_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfeezb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_or_0_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfeezb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpeq_or_0_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfeezh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_or_0_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfeezh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_or_0_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfeezh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpeq_or_0_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfeezf((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_or_0_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfeezf((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_or_0_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfeezf(__a, __b); -} - -/*-- vec_cmpeq_or_0_idx_cc --------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpeq_or_0_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfeezbs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_or_0_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfeezbs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpeq_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfeezbs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpeq_or_0_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfeezhs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_or_0_idx_cc(vector bool short __a, vector bool short __b, int *__cc) { - return __builtin_s390_vfeezhs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpeq_or_0_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfeezhs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpeq_or_0_idx_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector signed int) - __builtin_s390_vfeezfs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_or_0_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfeezfs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpeq_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfeezfs(__a, __b, __cc); -} - -/*-- vec_cmpne_idx ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpne_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfeneb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfeneb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfeneb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpne_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfeneh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfeneh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfeneh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpne_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfenef((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfenef((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfenef(__a, __b); -} - -/*-- vec_cmpne_idx_cc -------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpne_idx_cc(vector signed char __a, vector signed char __b, int *__cc) { - return (vector signed char) - __builtin_s390_vfenebs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfenebs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfenebs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpne_idx_cc(vector signed short __a, vector signed short __b, int *__cc) { - return (vector signed short) - __builtin_s390_vfenehs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_idx_cc(vector bool short __a, vector bool short __b, int *__cc) { - return __builtin_s390_vfenehs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfenehs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpne_idx_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector signed int) - __builtin_s390_vfenefs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfenefs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_idx_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) { - return __builtin_s390_vfenefs(__a, __b, __cc); -} - -/*-- vec_cmpne_or_0_idx -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpne_or_0_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfenezb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_or_0_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfenezb((vector unsigned char)__a, - (vector unsigned char)__b); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_or_0_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfenezb(__a, __b); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpne_or_0_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfenezh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_or_0_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfenezh((vector unsigned short)__a, - (vector unsigned short)__b); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_or_0_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfenezh(__a, __b); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpne_or_0_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfenezf((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_or_0_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfenezf((vector unsigned int)__a, - (vector unsigned int)__b); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_or_0_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfenezf(__a, __b); -} - -/*-- vec_cmpne_or_0_idx_cc --------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_cmpne_or_0_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfenezbs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_or_0_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfenezbs((vector unsigned char)__a, - (vector unsigned char)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpne_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfenezbs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_cmpne_or_0_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfenezhs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_or_0_idx_cc(vector bool short __a, vector bool short __b, int *__cc) { - return __builtin_s390_vfenezhs((vector unsigned short)__a, - (vector unsigned short)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpne_or_0_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfenezhs(__a, __b, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_cmpne_or_0_idx_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector signed int) - __builtin_s390_vfenezfs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_or_0_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfenezfs((vector unsigned int)__a, - (vector unsigned int)__b, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpne_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfenezfs(__a, __b, __cc); -} - -/*-- vec_cmprg --------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmprg(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return (vector bool char)__builtin_s390_vstrcb(__a, __b, __c, 4); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmprg(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return (vector bool short)__builtin_s390_vstrch(__a, __b, __c, 4); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmprg(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return (vector bool int)__builtin_s390_vstrcf(__a, __b, __c, 4); -} - -/*-- vec_cmprg_cc -----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmprg_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return (vector bool char)__builtin_s390_vstrcbs(__a, __b, __c, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmprg_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return (vector bool short)__builtin_s390_vstrchs(__a, __b, __c, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmprg_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return (vector bool int)__builtin_s390_vstrcfs(__a, __b, __c, 4, __cc); -} - -/*-- vec_cmprg_idx ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmprg_idx(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vstrcb(__a, __b, __c, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmprg_idx(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __builtin_s390_vstrch(__a, __b, __c, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmprg_idx(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __builtin_s390_vstrcf(__a, __b, __c, 0); -} - -/*-- vec_cmprg_idx_cc -------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmprg_idx_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return __builtin_s390_vstrcbs(__a, __b, __c, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmprg_idx_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return __builtin_s390_vstrchs(__a, __b, __c, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmprg_idx_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return __builtin_s390_vstrcfs(__a, __b, __c, 0, __cc); -} - -/*-- vec_cmprg_or_0_idx -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmprg_or_0_idx(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vstrczb(__a, __b, __c, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmprg_or_0_idx(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __builtin_s390_vstrczh(__a, __b, __c, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmprg_or_0_idx(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __builtin_s390_vstrczf(__a, __b, __c, 0); -} - -/*-- vec_cmprg_or_0_idx_cc --------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmprg_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return __builtin_s390_vstrczbs(__a, __b, __c, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmprg_or_0_idx_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return __builtin_s390_vstrczhs(__a, __b, __c, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmprg_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return __builtin_s390_vstrczfs(__a, __b, __c, 0, __cc); -} - -/*-- vec_cmpnrg -------------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmpnrg(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return (vector bool char)__builtin_s390_vstrcb(__a, __b, __c, 12); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpnrg(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return (vector bool short)__builtin_s390_vstrch(__a, __b, __c, 12); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpnrg(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return (vector bool int)__builtin_s390_vstrcf(__a, __b, __c, 12); -} - -/*-- vec_cmpnrg_cc ----------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_cmpnrg_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return (vector bool char)__builtin_s390_vstrcbs(__a, __b, __c, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_cmpnrg_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return (vector bool short)__builtin_s390_vstrchs(__a, __b, __c, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_cmpnrg_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return (vector bool int)__builtin_s390_vstrcfs(__a, __b, __c, 12, __cc); -} - -/*-- vec_cmpnrg_idx ---------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpnrg_idx(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vstrcb(__a, __b, __c, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpnrg_idx(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __builtin_s390_vstrch(__a, __b, __c, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpnrg_idx(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __builtin_s390_vstrcf(__a, __b, __c, 8); -} - -/*-- vec_cmpnrg_idx_cc ------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpnrg_idx_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return __builtin_s390_vstrcbs(__a, __b, __c, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpnrg_idx_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return __builtin_s390_vstrchs(__a, __b, __c, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpnrg_idx_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return __builtin_s390_vstrcfs(__a, __b, __c, 8, __cc); -} - -/*-- vec_cmpnrg_or_0_idx ----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpnrg_or_0_idx(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c) { - return __builtin_s390_vstrczb(__a, __b, __c, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpnrg_or_0_idx(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c) { - return __builtin_s390_vstrczh(__a, __b, __c, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpnrg_or_0_idx(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c) { - return __builtin_s390_vstrczf(__a, __b, __c, 8); -} - -/*-- vec_cmpnrg_or_0_idx_cc -------------------------------------------------*/ - -static inline __ATTRS_o_ai vector unsigned char -vec_cmpnrg_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - vector unsigned char __c, int *__cc) { - return __builtin_s390_vstrczbs(__a, __b, __c, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_cmpnrg_or_0_idx_cc(vector unsigned short __a, vector unsigned short __b, - vector unsigned short __c, int *__cc) { - return __builtin_s390_vstrczhs(__a, __b, __c, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_cmpnrg_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - vector unsigned int __c, int *__cc) { - return __builtin_s390_vstrczfs(__a, __b, __c, 8, __cc); -} - -/*-- vec_find_any_eq --------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq(vector signed char __a, vector signed char __b) { - return (vector bool char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 4); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq(vector bool char __a, vector bool char __b) { - return (vector bool char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 4); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)__builtin_s390_vfaeb(__a, __b, 4); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq(vector signed short __a, vector signed short __b) { - return (vector bool short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 4); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq(vector bool short __a, vector bool short __b) { - return (vector bool short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 4); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)__builtin_s390_vfaeh(__a, __b, 4); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq(vector signed int __a, vector signed int __b) { - return (vector bool int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 4); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq(vector bool int __a, vector bool int __b) { - return (vector bool int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 4); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)__builtin_s390_vfaef(__a, __b, 4); -} - -/*-- vec_find_any_eq_cc -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq_cc(vector signed char __a, vector signed char __b, int *__cc) { - return (vector bool char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq_cc(vector bool char __a, vector bool char __b, int *__cc) { - return (vector bool char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_eq_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return (vector bool char)__builtin_s390_vfaebs(__a, __b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector bool short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq_cc(vector bool short __a, vector bool short __b, int *__cc) { - return (vector bool short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_eq_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return (vector bool short)__builtin_s390_vfaehs(__a, __b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector bool int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq_cc(vector bool int __a, vector bool int __b, int *__cc) { - return (vector bool int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 4, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_eq_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return (vector bool int)__builtin_s390_vfaefs(__a, __b, 4, __cc); -} - -/*-- vec_find_any_eq_idx ----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_eq_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfaeb(__a, __b, 0); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_eq_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfaeh(__a, __b, 0); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_eq_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfaef(__a, __b, 0); -} - -/*-- vec_find_any_eq_idx_cc -------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_eq_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfaebs(__a, __b, 0, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_eq_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_idx_cc(vector bool short __a, vector bool short __b, - int *__cc) { - return __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfaehs(__a, __b, 0, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_eq_idx_cc(vector signed int __a, vector signed int __b, - int *__cc) { - return (vector signed int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfaefs(__a, __b, 0, __cc); -} - -/*-- vec_find_any_eq_or_0_idx -----------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_eq_or_0_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfaezb((vector unsigned char)__a, - (vector unsigned char)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_or_0_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfaezb((vector unsigned char)__a, - (vector unsigned char)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_or_0_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfaezb(__a, __b, 0); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_eq_or_0_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfaezh((vector unsigned short)__a, - (vector unsigned short)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_or_0_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfaezh((vector unsigned short)__a, - (vector unsigned short)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_or_0_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfaezh(__a, __b, 0); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_eq_or_0_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfaezf((vector unsigned int)__a, - (vector unsigned int)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_or_0_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfaezf((vector unsigned int)__a, - (vector unsigned int)__b, 0); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_or_0_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfaezf(__a, __b, 0); -} - -/*-- vec_find_any_eq_or_0_idx_cc --------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_eq_or_0_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfaezbs((vector unsigned char)__a, - (vector unsigned char)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_or_0_idx_cc(vector bool char __a, vector bool char __b, - int *__cc) { - return __builtin_s390_vfaezbs((vector unsigned char)__a, - (vector unsigned char)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_eq_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfaezbs(__a, __b, 0, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_eq_or_0_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfaezhs((vector unsigned short)__a, - (vector unsigned short)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_or_0_idx_cc(vector bool short __a, vector bool short __b, - int *__cc) { - return __builtin_s390_vfaezhs((vector unsigned short)__a, - (vector unsigned short)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_eq_or_0_idx_cc(vector unsigned short __a, - vector unsigned short __b, int *__cc) { - return __builtin_s390_vfaezhs(__a, __b, 0, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_eq_or_0_idx_cc(vector signed int __a, vector signed int __b, - int *__cc) { - return (vector signed int) - __builtin_s390_vfaezfs((vector unsigned int)__a, - (vector unsigned int)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_or_0_idx_cc(vector bool int __a, vector bool int __b, - int *__cc) { - return __builtin_s390_vfaezfs((vector unsigned int)__a, - (vector unsigned int)__b, 0, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_eq_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfaezfs(__a, __b, 0, __cc); -} - -/*-- vec_find_any_ne --------------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne(vector signed char __a, vector signed char __b) { - return (vector bool char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 12); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne(vector bool char __a, vector bool char __b) { - return (vector bool char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 12); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne(vector unsigned char __a, vector unsigned char __b) { - return (vector bool char)__builtin_s390_vfaeb(__a, __b, 12); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne(vector signed short __a, vector signed short __b) { - return (vector bool short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 12); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne(vector bool short __a, vector bool short __b) { - return (vector bool short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 12); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne(vector unsigned short __a, vector unsigned short __b) { - return (vector bool short)__builtin_s390_vfaeh(__a, __b, 12); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne(vector signed int __a, vector signed int __b) { - return (vector bool int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 12); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne(vector bool int __a, vector bool int __b) { - return (vector bool int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 12); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne(vector unsigned int __a, vector unsigned int __b) { - return (vector bool int)__builtin_s390_vfaef(__a, __b, 12); -} - -/*-- vec_find_any_ne_cc -----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne_cc(vector signed char __a, vector signed char __b, int *__cc) { - return (vector bool char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne_cc(vector bool char __a, vector bool char __b, int *__cc) { - return (vector bool char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool char -vec_find_any_ne_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return (vector bool char)__builtin_s390_vfaebs(__a, __b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector bool short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne_cc(vector bool short __a, vector bool short __b, int *__cc) { - return (vector bool short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool short -vec_find_any_ne_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return (vector bool short)__builtin_s390_vfaehs(__a, __b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne_cc(vector signed int __a, vector signed int __b, int *__cc) { - return (vector bool int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne_cc(vector bool int __a, vector bool int __b, int *__cc) { - return (vector bool int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 12, __cc); -} - -static inline __ATTRS_o_ai vector bool int -vec_find_any_ne_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return (vector bool int)__builtin_s390_vfaefs(__a, __b, 12, __cc); -} - -/*-- vec_find_any_ne_idx ----------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_ne_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfaeb((vector unsigned char)__a, - (vector unsigned char)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfaeb(__a, __b, 8); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_ne_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfaeh((vector unsigned short)__a, - (vector unsigned short)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfaeh(__a, __b, 8); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_ne_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfaef((vector unsigned int)__a, - (vector unsigned int)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfaef(__a, __b, 8); -} - -/*-- vec_find_any_ne_idx_cc -------------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_ne_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_idx_cc(vector bool char __a, vector bool char __b, int *__cc) { - return __builtin_s390_vfaebs((vector unsigned char)__a, - (vector unsigned char)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfaebs(__a, __b, 8, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_ne_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_idx_cc(vector bool short __a, vector bool short __b, - int *__cc) { - return __builtin_s390_vfaehs((vector unsigned short)__a, - (vector unsigned short)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_idx_cc(vector unsigned short __a, vector unsigned short __b, - int *__cc) { - return __builtin_s390_vfaehs(__a, __b, 8, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_ne_idx_cc(vector signed int __a, vector signed int __b, - int *__cc) { - return (vector signed int) - __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_idx_cc(vector bool int __a, vector bool int __b, int *__cc) { - return __builtin_s390_vfaefs((vector unsigned int)__a, - (vector unsigned int)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfaefs(__a, __b, 8, __cc); -} - -/*-- vec_find_any_ne_or_0_idx -----------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_ne_or_0_idx(vector signed char __a, vector signed char __b) { - return (vector signed char) - __builtin_s390_vfaezb((vector unsigned char)__a, - (vector unsigned char)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_or_0_idx(vector bool char __a, vector bool char __b) { - return __builtin_s390_vfaezb((vector unsigned char)__a, - (vector unsigned char)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_or_0_idx(vector unsigned char __a, vector unsigned char __b) { - return __builtin_s390_vfaezb(__a, __b, 8); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_ne_or_0_idx(vector signed short __a, vector signed short __b) { - return (vector signed short) - __builtin_s390_vfaezh((vector unsigned short)__a, - (vector unsigned short)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_or_0_idx(vector bool short __a, vector bool short __b) { - return __builtin_s390_vfaezh((vector unsigned short)__a, - (vector unsigned short)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_or_0_idx(vector unsigned short __a, vector unsigned short __b) { - return __builtin_s390_vfaezh(__a, __b, 8); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_ne_or_0_idx(vector signed int __a, vector signed int __b) { - return (vector signed int) - __builtin_s390_vfaezf((vector unsigned int)__a, - (vector unsigned int)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_or_0_idx(vector bool int __a, vector bool int __b) { - return __builtin_s390_vfaezf((vector unsigned int)__a, - (vector unsigned int)__b, 8); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_or_0_idx(vector unsigned int __a, vector unsigned int __b) { - return __builtin_s390_vfaezf(__a, __b, 8); -} - -/*-- vec_find_any_ne_or_0_idx_cc --------------------------------------------*/ - -static inline __ATTRS_o_ai vector signed char -vec_find_any_ne_or_0_idx_cc(vector signed char __a, vector signed char __b, - int *__cc) { - return (vector signed char) - __builtin_s390_vfaezbs((vector unsigned char)__a, - (vector unsigned char)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_or_0_idx_cc(vector bool char __a, vector bool char __b, - int *__cc) { - return __builtin_s390_vfaezbs((vector unsigned char)__a, - (vector unsigned char)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned char -vec_find_any_ne_or_0_idx_cc(vector unsigned char __a, vector unsigned char __b, - int *__cc) { - return __builtin_s390_vfaezbs(__a, __b, 8, __cc); -} - -static inline __ATTRS_o_ai vector signed short -vec_find_any_ne_or_0_idx_cc(vector signed short __a, vector signed short __b, - int *__cc) { - return (vector signed short) - __builtin_s390_vfaezhs((vector unsigned short)__a, - (vector unsigned short)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_or_0_idx_cc(vector bool short __a, vector bool short __b, - int *__cc) { - return __builtin_s390_vfaezhs((vector unsigned short)__a, - (vector unsigned short)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned short -vec_find_any_ne_or_0_idx_cc(vector unsigned short __a, - vector unsigned short __b, int *__cc) { - return __builtin_s390_vfaezhs(__a, __b, 8, __cc); -} - -static inline __ATTRS_o_ai vector signed int -vec_find_any_ne_or_0_idx_cc(vector signed int __a, vector signed int __b, - int *__cc) { - return (vector signed int) - __builtin_s390_vfaezfs((vector unsigned int)__a, - (vector unsigned int)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_or_0_idx_cc(vector bool int __a, vector bool int __b, - int *__cc) { - return __builtin_s390_vfaezfs((vector unsigned int)__a, - (vector unsigned int)__b, 8, __cc); -} - -static inline __ATTRS_o_ai vector unsigned int -vec_find_any_ne_or_0_idx_cc(vector unsigned int __a, vector unsigned int __b, - int *__cc) { - return __builtin_s390_vfaezfs(__a, __b, 8, __cc); -} - -#undef __constant_pow2_range -#undef __constant_range -#undef __constant -#undef __ATTRS_o -#undef __ATTRS_o_ai -#undef __ATTRS_ai - -#else - -#error "Use -fzvector to enable vector extensions" - -#endif diff --git a/External/CastXML/share/castxml/clang/include/wmmintrin.h b/External/CastXML/share/castxml/clang/include/wmmintrin.h deleted file mode 100644 index a2d931010..000000000 --- a/External/CastXML/share/castxml/clang/include/wmmintrin.h +++ /dev/null @@ -1,33 +0,0 @@ -/*===---- wmmintrin.h - AES intrinsics ------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef _WMMINTRIN_H -#define _WMMINTRIN_H - -#include - -#include <__wmmintrin_aes.h> - -#include <__wmmintrin_pclmul.h> - -#endif /* _WMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/x86intrin.h b/External/CastXML/share/castxml/clang/include/x86intrin.h deleted file mode 100644 index 4d8077e38..000000000 --- a/External/CastXML/share/castxml/clang/include/x86intrin.h +++ /dev/null @@ -1,57 +0,0 @@ -/*===---- x86intrin.h - X86 intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#define __X86INTRIN_H - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include - -/* FIXME: LWP */ - -#endif /* __X86INTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/xmmintrin.h b/External/CastXML/share/castxml/clang/include/xmmintrin.h deleted file mode 100644 index 18aa8c142..000000000 --- a/External/CastXML/share/castxml/clang/include/xmmintrin.h +++ /dev/null @@ -1,1002 +0,0 @@ -/*===---- xmmintrin.h - SSE intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __XMMINTRIN_H -#define __XMMINTRIN_H - -#include - -typedef int __v4si __attribute__((__vector_size__(16))); -typedef float __v4sf __attribute__((__vector_size__(16))); -typedef float __m128 __attribute__((__vector_size__(16))); - -/* This header should only be included in a hosted environment as it depends on - * a standard library to provide allocation routines. */ -#if __STDC_HOSTED__ -#include -#endif - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse"))) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_add_ss(__m128 __a, __m128 __b) -{ - __a[0] += __b[0]; - return __a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_add_ps(__m128 __a, __m128 __b) -{ - return __a + __b; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_sub_ss(__m128 __a, __m128 __b) -{ - __a[0] -= __b[0]; - return __a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_sub_ps(__m128 __a, __m128 __b) -{ - return __a - __b; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mul_ss(__m128 __a, __m128 __b) -{ - __a[0] *= __b[0]; - return __a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mul_ps(__m128 __a, __m128 __b) -{ - return __a * __b; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_div_ss(__m128 __a, __m128 __b) -{ - __a[0] /= __b[0]; - return __a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_div_ps(__m128 __a, __m128 __b) -{ - return __a / __b; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_sqrt_ss(__m128 __a) -{ - __m128 __c = __builtin_ia32_sqrtss(__a); - return (__m128) { __c[0], __a[1], __a[2], __a[3] }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_sqrt_ps(__m128 __a) -{ - return __builtin_ia32_sqrtps(__a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rcp_ss(__m128 __a) -{ - __m128 __c = __builtin_ia32_rcpss(__a); - return (__m128) { __c[0], __a[1], __a[2], __a[3] }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rcp_ps(__m128 __a) -{ - return __builtin_ia32_rcpps(__a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rsqrt_ss(__m128 __a) -{ - __m128 __c = __builtin_ia32_rsqrtss(__a); - return (__m128) { __c[0], __a[1], __a[2], __a[3] }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_rsqrt_ps(__m128 __a) -{ - return __builtin_ia32_rsqrtps(__a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_min_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_minss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_min_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_minps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_max_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_maxss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_max_ps(__m128 __a, __m128 __b) -{ - return __builtin_ia32_maxps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_and_ps(__m128 __a, __m128 __b) -{ - return (__m128)((__v4si)__a & (__v4si)__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_andnot_ps(__m128 __a, __m128 __b) -{ - return (__m128)(~(__v4si)__a & (__v4si)__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_or_ps(__m128 __a, __m128 __b) -{ - return (__m128)((__v4si)__a | (__v4si)__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_xor_ps(__m128 __a, __m128 __b) -{ - return (__m128)((__v4si)__a ^ (__v4si)__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpeq_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpeqss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpeq_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpeqps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmplt_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpltss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmplt_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpltps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmple_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpless(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmple_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpleps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpgt_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_shufflevector(__a, - __builtin_ia32_cmpltss(__b, __a), - 4, 1, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpgt_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpltps(__b, __a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpge_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_shufflevector(__a, - __builtin_ia32_cmpless(__b, __a), - 4, 1, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpge_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpleps(__b, __a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpneq_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpneqss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpneq_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpneqps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnlt_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnltss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnlt_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnltps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnle_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnless(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnle_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnleps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpngt_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_shufflevector(__a, - __builtin_ia32_cmpnltss(__b, __a), - 4, 1, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpngt_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnltps(__b, __a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnge_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_shufflevector(__a, - __builtin_ia32_cmpnless(__b, __a), - 4, 1, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpnge_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpnleps(__b, __a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpord_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpordss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpord_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpordps(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpunord_ss(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpunordss(__a, __b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cmpunord_ps(__m128 __a, __m128 __b) -{ - return (__m128)__builtin_ia32_cmpunordps(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comieq_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comieq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comilt_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comilt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comile_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comile(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comigt_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comigt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comige_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comige(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_comineq_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_comineq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomieq_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomieq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomilt_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomilt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomile_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomile(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomigt_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomigt(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomige_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomige(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_ucomineq_ss(__m128 __a, __m128 __b) -{ - return __builtin_ia32_ucomineq(__a, __b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvtss_si32(__m128 __a) -{ - return __builtin_ia32_cvtss2si(__a); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvt_ss2si(__m128 __a) -{ - return _mm_cvtss_si32(__a); -} - -#ifdef __x86_64__ - -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvtss_si64(__m128 __a) -{ - return __builtin_ia32_cvtss2si64(__a); -} - -#endif - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtps_pi32(__m128 __a) -{ - return (__m64)__builtin_ia32_cvtps2pi(__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvt_ps2pi(__m128 __a) -{ - return _mm_cvtps_pi32(__a); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvttss_si32(__m128 __a) -{ - return __a[0]; -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_cvtt_ss2si(__m128 __a) -{ - return _mm_cvttss_si32(__a); -} - -static __inline__ long long __DEFAULT_FN_ATTRS -_mm_cvttss_si64(__m128 __a) -{ - return __a[0]; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvttps_pi32(__m128 __a) -{ - return (__m64)__builtin_ia32_cvttps2pi(__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtt_ps2pi(__m128 __a) -{ - return _mm_cvttps_pi32(__a); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtsi32_ss(__m128 __a, int __b) -{ - __a[0] = __b; - return __a; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvt_si2ss(__m128 __a, int __b) -{ - return _mm_cvtsi32_ss(__a, __b); -} - -#ifdef __x86_64__ - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtsi64_ss(__m128 __a, long long __b) -{ - __a[0] = __b; - return __a; -} - -#endif - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpi32_ps(__m128 __a, __m64 __b) -{ - return __builtin_ia32_cvtpi2ps(__a, (__v2si)__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvt_pi2ps(__m128 __a, __m64 __b) -{ - return _mm_cvtpi32_ps(__a, __b); -} - -static __inline__ float __DEFAULT_FN_ATTRS -_mm_cvtss_f32(__m128 __a) -{ - return __a[0]; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_loadh_pi(__m128 __a, const __m64 *__p) -{ - typedef float __mm_loadh_pi_v2f32 __attribute__((__vector_size__(8))); - struct __mm_loadh_pi_struct { - __mm_loadh_pi_v2f32 __u; - } __attribute__((__packed__, __may_alias__)); - __mm_loadh_pi_v2f32 __b = ((struct __mm_loadh_pi_struct*)__p)->__u; - __m128 __bb = __builtin_shufflevector(__b, __b, 0, 1, 0, 1); - return __builtin_shufflevector(__a, __bb, 0, 1, 4, 5); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_loadl_pi(__m128 __a, const __m64 *__p) -{ - typedef float __mm_loadl_pi_v2f32 __attribute__((__vector_size__(8))); - struct __mm_loadl_pi_struct { - __mm_loadl_pi_v2f32 __u; - } __attribute__((__packed__, __may_alias__)); - __mm_loadl_pi_v2f32 __b = ((struct __mm_loadl_pi_struct*)__p)->__u; - __m128 __bb = __builtin_shufflevector(__b, __b, 0, 1, 0, 1); - return __builtin_shufflevector(__a, __bb, 4, 5, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_load_ss(const float *__p) -{ - struct __mm_load_ss_struct { - float __u; - } __attribute__((__packed__, __may_alias__)); - float __u = ((struct __mm_load_ss_struct*)__p)->__u; - return (__m128){ __u, 0, 0, 0 }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_load1_ps(const float *__p) -{ - struct __mm_load1_ps_struct { - float __u; - } __attribute__((__packed__, __may_alias__)); - float __u = ((struct __mm_load1_ps_struct*)__p)->__u; - return (__m128){ __u, __u, __u, __u }; -} - -#define _mm_load_ps1(p) _mm_load1_ps(p) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_load_ps(const float *__p) -{ - return *(__m128*)__p; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_loadu_ps(const float *__p) -{ - struct __loadu_ps { - __m128 __v; - } __attribute__((__packed__, __may_alias__)); - return ((struct __loadu_ps*)__p)->__v; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_loadr_ps(const float *__p) -{ - __m128 __a = _mm_load_ps(__p); - return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_set_ss(float __w) -{ - return (__m128){ __w, 0, 0, 0 }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_set1_ps(float __w) -{ - return (__m128){ __w, __w, __w, __w }; -} - -/* Microsoft specific. */ -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_set_ps1(float __w) -{ - return _mm_set1_ps(__w); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_set_ps(float __z, float __y, float __x, float __w) -{ - return (__m128){ __w, __x, __y, __z }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_setr_ps(float __z, float __y, float __x, float __w) -{ - return (__m128){ __z, __y, __x, __w }; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_setzero_ps(void) -{ - return (__m128){ 0, 0, 0, 0 }; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storeh_pi(__m64 *__p, __m128 __a) -{ - __builtin_ia32_storehps((__v2si *)__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storel_pi(__m64 *__p, __m128 __a) -{ - __builtin_ia32_storelps((__v2si *)__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_ss(float *__p, __m128 __a) -{ - struct __mm_store_ss_struct { - float __u; - } __attribute__((__packed__, __may_alias__)); - ((struct __mm_store_ss_struct*)__p)->__u = __a[0]; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storeu_ps(float *__p, __m128 __a) -{ - __builtin_ia32_storeups(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store1_ps(float *__p, __m128 __a) -{ - __a = __builtin_shufflevector(__a, __a, 0, 0, 0, 0); - _mm_storeu_ps(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_ps1(float *__p, __m128 __a) -{ - return _mm_store1_ps(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_store_ps(float *__p, __m128 __a) -{ - *(__m128 *)__p = __a; -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_storer_ps(float *__p, __m128 __a) -{ - __a = __builtin_shufflevector(__a, __a, 3, 2, 1, 0); - _mm_store_ps(__p, __a); -} - -#define _MM_HINT_T0 3 -#define _MM_HINT_T1 2 -#define _MM_HINT_T2 1 -#define _MM_HINT_NTA 0 - -#ifndef _MSC_VER -/* FIXME: We have to #define this because "sel" must be a constant integer, and - Sema doesn't do any form of constant propagation yet. */ - -#define _mm_prefetch(a, sel) (__builtin_prefetch((void *)(a), 0, (sel))) -#endif - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_pi(__m64 *__p, __m64 __a) -{ - __builtin_ia32_movntq(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_stream_ps(float *__p, __m128 __a) -{ - __builtin_ia32_movntps(__p, __a); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_sfence(void) -{ - __builtin_ia32_sfence(); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_extract_pi16(__m64 __a, int __n) -{ - __v4hi __b = (__v4hi)__a; - return (unsigned short)__b[__n & 3]; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_insert_pi16(__m64 __a, int __d, int __n) -{ - __v4hi __b = (__v4hi)__a; - __b[__n & 3] = __d; - return (__m64)__b; -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_max_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pmaxsw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_max_pu8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pmaxub((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_min_pi16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pminsw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_min_pu8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pminub((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_movemask_pi8(__m64 __a) -{ - return __builtin_ia32_pmovmskb((__v8qi)__a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_mulhi_pu16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pmulhuw((__v4hi)__a, (__v4hi)__b); -} - -#define _mm_shuffle_pi16(a, n) __extension__ ({ \ - __m64 __a = (a); \ - (__m64)__builtin_ia32_pshufw((__v4hi)__a, (n)); }) - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_maskmove_si64(__m64 __d, __m64 __n, char *__p) -{ - __builtin_ia32_maskmovq((__v8qi)__d, (__v8qi)__n, __p); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_avg_pu8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pavgb((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_avg_pu16(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_pavgw((__v4hi)__a, (__v4hi)__b); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_sad_pu8(__m64 __a, __m64 __b) -{ - return (__m64)__builtin_ia32_psadbw((__v8qi)__a, (__v8qi)__b); -} - -static __inline__ unsigned int __DEFAULT_FN_ATTRS -_mm_getcsr(void) -{ - return __builtin_ia32_stmxcsr(); -} - -static __inline__ void __DEFAULT_FN_ATTRS -_mm_setcsr(unsigned int __i) -{ - __builtin_ia32_ldmxcsr(__i); -} - -#define _mm_shuffle_ps(a, b, mask) __extension__ ({ \ - __m128 __a = (a); \ - __m128 __b = (b); \ - (__m128)__builtin_shufflevector((__v4sf)__a, (__v4sf)__b, \ - (mask) & 0x3, ((mask) & 0xc) >> 2, \ - (((mask) & 0x30) >> 4) + 4, \ - (((mask) & 0xc0) >> 6) + 4); }) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_unpackhi_ps(__m128 __a, __m128 __b) -{ - return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_unpacklo_ps(__m128 __a, __m128 __b) -{ - return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_move_ss(__m128 __a, __m128 __b) -{ - return __builtin_shufflevector(__a, __b, 4, 1, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_movehl_ps(__m128 __a, __m128 __b) -{ - return __builtin_shufflevector(__a, __b, 6, 7, 2, 3); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_movelh_ps(__m128 __a, __m128 __b) -{ - return __builtin_shufflevector(__a, __b, 0, 1, 4, 5); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpi16_ps(__m64 __a) -{ - __m64 __b, __c; - __m128 __r; - - __b = _mm_setzero_si64(); - __b = _mm_cmpgt_pi16(__b, __a); - __c = _mm_unpackhi_pi16(__a, __b); - __r = _mm_setzero_ps(); - __r = _mm_cvtpi32_ps(__r, __c); - __r = _mm_movelh_ps(__r, __r); - __c = _mm_unpacklo_pi16(__a, __b); - __r = _mm_cvtpi32_ps(__r, __c); - - return __r; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpu16_ps(__m64 __a) -{ - __m64 __b, __c; - __m128 __r; - - __b = _mm_setzero_si64(); - __c = _mm_unpackhi_pi16(__a, __b); - __r = _mm_setzero_ps(); - __r = _mm_cvtpi32_ps(__r, __c); - __r = _mm_movelh_ps(__r, __r); - __c = _mm_unpacklo_pi16(__a, __b); - __r = _mm_cvtpi32_ps(__r, __c); - - return __r; -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpi8_ps(__m64 __a) -{ - __m64 __b; - - __b = _mm_setzero_si64(); - __b = _mm_cmpgt_pi8(__b, __a); - __b = _mm_unpacklo_pi8(__a, __b); - - return _mm_cvtpi16_ps(__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpu8_ps(__m64 __a) -{ - __m64 __b; - - __b = _mm_setzero_si64(); - __b = _mm_unpacklo_pi8(__a, __b); - - return _mm_cvtpi16_ps(__b); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_cvtpi32x2_ps(__m64 __a, __m64 __b) -{ - __m128 __c; - - __c = _mm_setzero_ps(); - __c = _mm_cvtpi32_ps(__c, __b); - __c = _mm_movelh_ps(__c, __c); - - return _mm_cvtpi32_ps(__c, __a); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtps_pi16(__m128 __a) -{ - __m64 __b, __c; - - __b = _mm_cvtps_pi32(__a); - __a = _mm_movehl_ps(__a, __a); - __c = _mm_cvtps_pi32(__a); - - return _mm_packs_pi32(__b, __c); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_mm_cvtps_pi8(__m128 __a) -{ - __m64 __b, __c; - - __b = _mm_cvtps_pi16(__a); - __c = _mm_setzero_si64(); - - return _mm_packs_pi16(__b, __c); -} - -static __inline__ int __DEFAULT_FN_ATTRS -_mm_movemask_ps(__m128 __a) -{ - return __builtin_ia32_movmskps(__a); -} - -#define _MM_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w)) - -#define _MM_EXCEPT_INVALID (0x0001) -#define _MM_EXCEPT_DENORM (0x0002) -#define _MM_EXCEPT_DIV_ZERO (0x0004) -#define _MM_EXCEPT_OVERFLOW (0x0008) -#define _MM_EXCEPT_UNDERFLOW (0x0010) -#define _MM_EXCEPT_INEXACT (0x0020) -#define _MM_EXCEPT_MASK (0x003f) - -#define _MM_MASK_INVALID (0x0080) -#define _MM_MASK_DENORM (0x0100) -#define _MM_MASK_DIV_ZERO (0x0200) -#define _MM_MASK_OVERFLOW (0x0400) -#define _MM_MASK_UNDERFLOW (0x0800) -#define _MM_MASK_INEXACT (0x1000) -#define _MM_MASK_MASK (0x1f80) - -#define _MM_ROUND_NEAREST (0x0000) -#define _MM_ROUND_DOWN (0x2000) -#define _MM_ROUND_UP (0x4000) -#define _MM_ROUND_TOWARD_ZERO (0x6000) -#define _MM_ROUND_MASK (0x6000) - -#define _MM_FLUSH_ZERO_MASK (0x8000) -#define _MM_FLUSH_ZERO_ON (0x8000) -#define _MM_FLUSH_ZERO_OFF (0x0000) - -#define _MM_GET_EXCEPTION_MASK() (_mm_getcsr() & _MM_MASK_MASK) -#define _MM_GET_EXCEPTION_STATE() (_mm_getcsr() & _MM_EXCEPT_MASK) -#define _MM_GET_FLUSH_ZERO_MODE() (_mm_getcsr() & _MM_FLUSH_ZERO_MASK) -#define _MM_GET_ROUNDING_MODE() (_mm_getcsr() & _MM_ROUND_MASK) - -#define _MM_SET_EXCEPTION_MASK(x) (_mm_setcsr((_mm_getcsr() & ~_MM_MASK_MASK) | (x))) -#define _MM_SET_EXCEPTION_STATE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_EXCEPT_MASK) | (x))) -#define _MM_SET_FLUSH_ZERO_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_FLUSH_ZERO_MASK) | (x))) -#define _MM_SET_ROUNDING_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_ROUND_MASK) | (x))) - -#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ -do { \ - __m128 tmp3, tmp2, tmp1, tmp0; \ - tmp0 = _mm_unpacklo_ps((row0), (row1)); \ - tmp2 = _mm_unpacklo_ps((row2), (row3)); \ - tmp1 = _mm_unpackhi_ps((row0), (row1)); \ - tmp3 = _mm_unpackhi_ps((row2), (row3)); \ - (row0) = _mm_movelh_ps(tmp0, tmp2); \ - (row1) = _mm_movehl_ps(tmp2, tmp0); \ - (row2) = _mm_movelh_ps(tmp1, tmp3); \ - (row3) = _mm_movehl_ps(tmp3, tmp1); \ -} while (0) - -/* Aliases for compatibility. */ -#define _m_pextrw _mm_extract_pi16 -#define _m_pinsrw _mm_insert_pi16 -#define _m_pmaxsw _mm_max_pi16 -#define _m_pmaxub _mm_max_pu8 -#define _m_pminsw _mm_min_pi16 -#define _m_pminub _mm_min_pu8 -#define _m_pmovmskb _mm_movemask_pi8 -#define _m_pmulhuw _mm_mulhi_pu16 -#define _m_pshufw _mm_shuffle_pi16 -#define _m_maskmovq _mm_maskmove_si64 -#define _m_pavgb _mm_avg_pu8 -#define _m_pavgw _mm_avg_pu16 -#define _m_psadbw _mm_sad_pu8 -#define _m_ _mm_ -#define _m_ _mm_ - -#undef __DEFAULT_FN_ATTRS - -/* Ugly hack for backwards-compatibility (compatible with gcc) */ -#if defined(__SSE2__) && !__has_feature(modules) -#include -#endif - -#endif /* __XMMINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/xopintrin.h b/External/CastXML/share/castxml/clang/include/xopintrin.h deleted file mode 100644 index 86188bb29..000000000 --- a/External/CastXML/share/castxml/clang/include/xopintrin.h +++ /dev/null @@ -1,803 +0,0 @@ -/*===---- xopintrin.h - XOP intrinsics -------------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __X86INTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __XOPINTRIN_H -#define __XOPINTRIN_H - -#include - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"))) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddw_epi8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddd_epi8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epi8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddd_epi16(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epi16(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epi32(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphadddq((__v4si)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddw_epu8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddd_epu8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epu8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddd_epu16(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epu16(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_haddq_epu32(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsubw_epi8(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsubd_epi16(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_hsubq_epi32(__m128i __A) -{ - return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpcmov(__A, __B, __C); -} - -static __inline__ __m256i __DEFAULT_FN_ATTRS -_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C) -{ - return (__m256i)__builtin_ia32_vpcmov_256(__A, __B, __C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C) -{ - return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_rot_epi8(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_rot_epi16(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_rot_epi32(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_rot_epi64(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B); -} - -#define _mm_roti_epi8(A, N) __extension__ ({ \ - __m128i __A = (A); \ - (__m128i)__builtin_ia32_vprotbi((__v16qi)__A, (N)); }) - -#define _mm_roti_epi16(A, N) __extension__ ({ \ - __m128i __A = (A); \ - (__m128i)__builtin_ia32_vprotwi((__v8hi)__A, (N)); }) - -#define _mm_roti_epi32(A, N) __extension__ ({ \ - __m128i __A = (A); \ - (__m128i)__builtin_ia32_vprotdi((__v4si)__A, (N)); }) - -#define _mm_roti_epi64(A, N) __extension__ ({ \ - __m128i __A = (A); \ - (__m128i)__builtin_ia32_vprotqi((__v2di)__A, (N)); }) - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_shl_epi8(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_shl_epi16(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_shl_epi32(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_shl_epi64(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha_epi8(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha_epi16(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha_epi32(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_sha_epi64(__m128i __A, __m128i __B) -{ - return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B); -} - -#define _mm_com_epu8(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomub((__v16qi)__A, (__v16qi)__B, (N)); }) - -#define _mm_com_epu16(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomuw((__v8hi)__A, (__v8hi)__B, (N)); }) - -#define _mm_com_epu32(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomud((__v4si)__A, (__v4si)__B, (N)); }) - -#define _mm_com_epu64(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomuq((__v2di)__A, (__v2di)__B, (N)); }) - -#define _mm_com_epi8(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomb((__v16qi)__A, (__v16qi)__B, (N)); }) - -#define _mm_com_epi16(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomw((__v8hi)__A, (__v8hi)__B, (N)); }) - -#define _mm_com_epi32(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomd((__v4si)__A, (__v4si)__B, (N)); }) - -#define _mm_com_epi64(A, B, N) __extension__ ({ \ - __m128i __A = (A); \ - __m128i __B = (B); \ - (__m128i)__builtin_ia32_vpcomq((__v2di)__A, (__v2di)__B, (N)); }) - -#define _MM_PCOMCTRL_LT 0 -#define _MM_PCOMCTRL_LE 1 -#define _MM_PCOMCTRL_GT 2 -#define _MM_PCOMCTRL_GE 3 -#define _MM_PCOMCTRL_EQ 4 -#define _MM_PCOMCTRL_NEQ 5 -#define _MM_PCOMCTRL_FALSE 6 -#define _MM_PCOMCTRL_TRUE 7 - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epu8(__m128i __A, __m128i __B) -{ - return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epu16(__m128i __A, __m128i __B) -{ - return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epu32(__m128i __A, __m128i __B) -{ - return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epu64(__m128i __A, __m128i __B) -{ - return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epi8(__m128i __A, __m128i __B) -{ - return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epi16(__m128i __A, __m128i __B) -{ - return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epi32(__m128i __A, __m128i __B) -{ - return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comlt_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comle_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comgt_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comge_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comeq_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comneq_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comfalse_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE); -} - -static __inline__ __m128i __DEFAULT_FN_ATTRS -_mm_comtrue_epi64(__m128i __A, __m128i __B) -{ - return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE); -} - -#define _mm_permute2_pd(X, Y, C, I) __extension__ ({ \ - __m128d __X = (X); \ - __m128d __Y = (Y); \ - __m128i __C = (C); \ - (__m128d)__builtin_ia32_vpermil2pd((__v2df)__X, (__v2df)__Y, \ - (__v2di)__C, (I)); }) - -#define _mm256_permute2_pd(X, Y, C, I) __extension__ ({ \ - __m256d __X = (X); \ - __m256d __Y = (Y); \ - __m256i __C = (C); \ - (__m256d)__builtin_ia32_vpermil2pd256((__v4df)__X, (__v4df)__Y, \ - (__v4di)__C, (I)); }) - -#define _mm_permute2_ps(X, Y, C, I) __extension__ ({ \ - __m128 __X = (X); \ - __m128 __Y = (Y); \ - __m128i __C = (C); \ - (__m128)__builtin_ia32_vpermil2ps((__v4sf)__X, (__v4sf)__Y, \ - (__v4si)__C, (I)); }) - -#define _mm256_permute2_ps(X, Y, C, I) __extension__ ({ \ - __m256 __X = (X); \ - __m256 __Y = (Y); \ - __m256i __C = (C); \ - (__m256)__builtin_ia32_vpermil2ps256((__v8sf)__X, (__v8sf)__Y, \ - (__v8si)__C, (I)); }) - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_frcz_ss(__m128 __A) -{ - return (__m128)__builtin_ia32_vfrczss((__v4sf)__A); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_frcz_sd(__m128d __A) -{ - return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A); -} - -static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_frcz_ps(__m128 __A) -{ - return (__m128)__builtin_ia32_vfrczps((__v4sf)__A); -} - -static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_frcz_pd(__m128d __A) -{ - return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A); -} - -static __inline__ __m256 __DEFAULT_FN_ATTRS -_mm256_frcz_ps(__m256 __A) -{ - return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A); -} - -static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_frcz_pd(__m256d __A) -{ - return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A); -} - -#undef __DEFAULT_FN_ATTRS - -#endif /* __XOPINTRIN_H */ diff --git a/External/CastXML/share/castxml/clang/include/xtestintrin.h b/External/CastXML/share/castxml/clang/include/xtestintrin.h deleted file mode 100644 index 9d3378fd1..000000000 --- a/External/CastXML/share/castxml/clang/include/xtestintrin.h +++ /dev/null @@ -1,41 +0,0 @@ -/*===---- xtestintrin.h - XTEST intrinsic ---------------------------------=== - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *===-----------------------------------------------------------------------=== - */ - -#ifndef __IMMINTRIN_H -#error "Never use directly; include instead." -#endif - -#ifndef __XTESTINTRIN_H -#define __XTESTINTRIN_H - -/* xtest returns non-zero if the instruction is executed within an RTM or active - * HLE region. */ -/* FIXME: This can be an either or for RTM/HLE. Deal with this when HLE is - * supported. */ -static __inline__ int - __attribute__((__always_inline__, __nodebug__, __target__("rtm"))) - _xtest(void) { - return __builtin_ia32_xtest(); -} - -#endif diff --git a/External/CastXML/share/castxml/detect_vs.cpp b/External/CastXML/share/castxml/detect_vs.cpp deleted file mode 100644 index 2e5174382..000000000 --- a/External/CastXML/share/castxml/detect_vs.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright Kitware, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* cl -c -FoNUL detect_vs.cpp */ -#define TO_STRING0(x) #x -#define TO_STRING(x) TO_STRING0(x) -#define TO_DEFINE(x) "#define " #x " " TO_STRING(x) - -#pragma message("") -#ifdef _ATL_VER -# pragma message(TO_DEFINE(_ATL_VER)) -#endif -#ifdef _CHAR_UNSIGNED -# pragma message(TO_DEFINE(_CHAR_UNSIGNED)) -#endif -#ifdef _CPPRTTI -# pragma message(TO_DEFINE(_CPPRTTI)) -#endif -#ifdef _CPPUNWIND -# pragma message(TO_DEFINE(_CPPUNWIND)) -#endif -#ifdef _DEBUG -# pragma message(TO_DEFINE(_DEBUG)) -#endif -#ifdef _DLL -# pragma message(TO_DEFINE(_DLL)) -#endif -#ifdef _INTEGRAL_MAX_BITS -# pragma message(TO_DEFINE(_INTEGRAL_MAX_BITS)) -#endif -#ifdef _MANAGED -# pragma message(TO_DEFINE(_MANAGED)) -#endif -#ifdef _MFC_VER -# pragma message(TO_DEFINE(_MFC_VER)) -#endif -#ifdef _MSC_BUILD -# pragma message(TO_DEFINE(_MSC_BUILD)) -#endif -#ifdef _MSC_EXTENSIONS -# pragma message(TO_DEFINE(_MSC_EXTENSIONS)) -#endif -#ifdef _MSC_FULL_VER -# pragma message(TO_DEFINE(_MSC_FULL_VER)) -#endif -#ifdef _MSC_VER -# pragma message(TO_DEFINE(_MSC_VER)) -#endif -#ifdef _MT -# pragma message(TO_DEFINE(_MT)) -#endif -#ifdef _M_ALPHA -# pragma message(TO_DEFINE(_M_ALPHA)) -#endif -#ifdef _M_AMD64 -# pragma message(TO_DEFINE(_M_AMD64)) -#endif -#ifdef _M_ARM_FP -# pragma message(TO_DEFINE(_M_ARM_FP)) -#endif -#ifdef _M_CEE -# pragma message(TO_DEFINE(_M_CEE)) -#endif -#ifdef _M_CEE_PURE -# pragma message(TO_DEFINE(_M_CEE_PURE)) -#endif -#ifdef _M_CEE_SAFE -# pragma message(TO_DEFINE(_M_CEE_SAFE)) -#endif -#ifdef _M_IA64 -# pragma message(TO_DEFINE(_M_IA64)) -#endif -#ifdef _M_IX86 -# pragma message(TO_DEFINE(_M_IX86)) -#endif -#ifdef _M_IX86_FP -# pragma message(TO_DEFINE(_M_IX86_FP)) -#endif -#ifdef _M_MPPC -# pragma message(TO_DEFINE(_M_MPPC)) -#endif -#ifdef _M_MRX000 -# pragma message(TO_DEFINE(_M_MRX000)) -#endif -#ifdef _M_PPC -# pragma message(TO_DEFINE(_M_PPC)) -#endif -#ifdef _M_X64 -# pragma message(TO_DEFINE(_M_X64)) -#endif -#ifdef _NATIVE_WCHAR_T_DEFINED -# pragma message(TO_DEFINE(_NATIVE_WCHAR_T_DEFINED)) -#endif -#ifdef _OPENMP -# pragma message(TO_DEFINE(_OPENMP)) -#endif -#ifdef _VC_NODEFAULTLIB -# pragma message(TO_DEFINE(_VC_NODEFAULTLIB)) -#endif -#ifdef _WCHAR_T_DEFINED -# pragma message(TO_DEFINE(_WCHAR_T_DEFINED)) -#endif -#ifdef _WIN32 -# pragma message(TO_DEFINE(_WIN32)) -#endif -#ifdef _WIN64 -# pragma message(TO_DEFINE(_WIN64)) -#endif -#ifdef _Wp64 -# pragma message(TO_DEFINE(_Wp64)) -#endif -#ifdef __CLR_VER -# pragma message(TO_DEFINE(__CLR_VER)) -#endif -#ifdef __MSVC_RUNTIME_CHECKS -# pragma message(TO_DEFINE(__MSVC_RUNTIME_CHECKS)) -#endif -#ifdef __cplusplus -# pragma message(TO_DEFINE(__cplusplus)) -#endif -#ifdef __cplusplus_cli -# pragma message(TO_DEFINE(__cplusplus_cli)) -#endif -#pragma message("class type_info;") diff --git a/External/CastXML/share/castxml/empty.cpp b/External/CastXML/share/castxml/empty.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/External/HtmlAgilityPack/HtmlAgilityPack.XML b/External/HtmlAgilityPack/HtmlAgilityPack.XML deleted file mode 100644 index d136fcace..000000000 --- a/External/HtmlAgilityPack/HtmlAgilityPack.XML +++ /dev/null @@ -1,2429 +0,0 @@ - - - - HtmlAgilityPack - - - - - Represents an HTML navigator on an HTML document seen as a data store. - - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - The minimum buffer size. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. - - The TextReader used to feed the HTML data into the document. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. - - A new HtmlNavigator object positioned at the same node as the original HtmlNavigator. - - - - Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. - - The local name of the HTML attribute. - The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. - The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node. - - - - Returns the value of the namespace node corresponding to the specified local name. - Always returns string.Empty for the HtmlNavigator implementation. - - The local name of the namespace node. - Always returns string.Empty for the HtmlNavigator implementation. - - - - Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. - - The HtmlNavigator that you want to compare against. - true if the two navigators have the same position, otherwise, false. - - - - Moves to the same position as the specified HtmlNavigator. - - The HtmlNavigator positioned on the node that you want to move to. - true if successful, otherwise false. If false, the position of the navigator is unchanged. - - - - Moves to the HTML attribute with matching LocalName and NamespaceURI. - - The local name of the HTML attribute. - The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. - true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change. - - - - Moves to the first sibling of the current node. - - true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node. - - - - Moves to the first HTML attribute. - - true if the navigator is successful moving to the first HTML attribute, otherwise, false. - - - - Moves to the first child of the current node. - - true if there is a first child node, otherwise false. - - - - Moves the XPathNavigator to the first namespace node of the current element. - Always returns false for the HtmlNavigator implementation. - - An XPathNamespaceScope value describing the namespace scope. - Always returns false for the HtmlNavigator implementation. - - - - Moves to the node that has an attribute of type ID whose value matches the specified string. - - A string representing the ID value of the node to which you want to move. This argument does not need to be atomized. - true if the move was successful, otherwise false. If false, the position of the navigator is unchanged. - - - - Moves the XPathNavigator to the namespace node with the specified local name. - Always returns false for the HtmlNavigator implementation. - - The local name of the namespace node. - Always returns false for the HtmlNavigator implementation. - - - - Moves to the next sibling of the current node. - - true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged. - - - - Moves to the next HTML attribute. - - - - - - Moves the XPathNavigator to the next namespace node. - Always returns falsefor the HtmlNavigator implementation. - - An XPathNamespaceScope value describing the namespace scope. - Always returns false for the HtmlNavigator implementation. - - - - Moves to the parent of the current node. - - true if there is a parent node, otherwise false. - - - - Moves to the previous sibling of the current node. - - true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node. - - - - Moves to the root node to which the current node belongs. - - - - - Gets the base URI for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the current HTML document. - - - - - Gets the current HTML node. - - - - - Gets a value indicating whether the current node has child nodes. - - - - - Gets a value indicating whether the current node has child nodes. - - - - - Gets a value indicating whether the current node is an empty element. - - - - - Gets the name of the current HTML node without the namespace prefix. - - - - - Gets the qualified name of the current node. - - - - - Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the associated with this implementation. - - - - - Gets the type of the current node. - - - - - Gets the prefix associated with the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the text value of the current node. - - - - - Gets the xml:lang scope for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Represents the type of parsing error. - - - - - A tag was not closed. - - - - - A tag was not opened. - - - - - There is a charset mismatch between stream and declared (META) encoding. - - - - - An end tag was not required. - - - - - An end tag is invalid at this position. - - - - - Represents a fragment of code in a mixed code document. - - - - - Represents a base class for fragments in a mixed code document. - - - - - Gets the fragement text. - - - - - Gets the type of fragment. - - - - - Gets the line number of the fragment. - - - - - Gets the line position (column) of the fragment. - - - - - Gets the fragment position in the document's stream. - - - - - Gets the fragment code text. - - - - - Represents an HTML comment. - - - - - Represents an HTML node. - - - - - Gets the name of a comment node. It is actually defined as '#comment'. - - - - - Gets the name of the document node. It is actually defined as '#document'. - - - - - Gets the name of a text node. It is actually defined as '#text'. - - - - - Gets a collection of flags that define specific behaviors for specific element nodes. - The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. - - - - - Initialize HtmlNode. Builds a list of all tags that have special allowances - - - - - Initializes HtmlNode, providing type, owner and where it exists in a collection - - - - - - - - Creates a new XPathNavigator object for navigating this HTML node. - - An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document. - - - - Determines if an element node can be kept overlapped. - - The name of the element node to check. May not be null. - true if the name is the name of an element node that can be kept overlapped, false otherwise. - - - - Creates an HTML node from a string representing literal HTML. - - The HTML text. - The newly created node instance. - - - - Determines if an element node is a CDATA element node. - - The name of the element node to check. May not be null. - true if the name is the name of a CDATA element node, false otherwise. - - - - Determines if an element node is closed. - - The name of the element node to check. May not be null. - true if the name is the name of a closed element node, false otherwise. - - - - Determines if an element node is defined as empty. - - The name of the element node to check. May not be null. - true if the name is the name of an empty element node, false otherwise. - - - - Determines if a text corresponds to the closing tag of an node that can be kept overlapped. - - The text to check. May not be null. - true or false. - - - - Returns a collection of all ancestor nodes of this element. - - - - - - Get Ancestors with matching name - - - - - - - Returns a collection of all ancestor nodes of this element. - - - - - - Gets all anscestor nodes and the current node - - - - - - - Adds the specified node to the end of the list of children of this node. - - The node to add. May not be null. - The node added. - - - - Adds the specified node to the end of the list of children of this node. - - The node list to add. May not be null. - - - - Gets all Attributes with name - - - - - - - Creates a duplicate of the node - - - - - - Creates a duplicate of the node and changes its name at the same time. - - The new name of the cloned node. May not be null. - The cloned node. - - - - Creates a duplicate of the node and changes its name at the same time. - - The new name of the cloned node. May not be null. - true to recursively clone the subtree under the specified node; false to clone only the node itself. - The cloned node. - - - - Creates a duplicate of the node. - - true to recursively clone the subtree under the specified node; false to clone only the node itself. - The cloned node. - - - - Creates a duplicate of the node and the subtree under it. - - The node to duplicate. May not be null. - - - - Creates a duplicate of the node. - - The node to duplicate. May not be null. - true to recursively clone the subtree under the specified node, false to clone only the node itself. - - - - Creates an XPathNavigator using the root of this document. - - - - - - Gets all Descendant nodes for this node and each of child nodes - - - - - - Returns a collection of all descendant nodes of this element, in document order - - - - - - Gets all Descendant nodes in enumerated list - - - - - - Get all descendant nodes with matching name - - - - - - - Returns a collection of all descendant nodes of this element, in document order - - - - - - Gets all descendant nodes including this node - - - - - - - Gets first generation child node matching name - - - - - - - Gets matching first generation child nodes matching name - - - - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Inserts the specified node immediately after the specified reference node. - - The node to insert. May not be null. - The node that is the reference node. The newNode is placed after the refNode. - The node being inserted. - - - - Inserts the specified node immediately before the specified reference node. - - The node to insert. May not be null. - The node that is the reference node. The newChild is placed before this node. - The node being inserted. - - - - Adds the specified node to the beginning of the list of children of this node. - - The node to add. May not be null. - The node added. - - - - Adds the specified node list to the beginning of the list of children of this node. - - The node list to add. May not be null. - - - - Removes node from parent collection - - - - - Removes all the children and/or attributes of the current node. - - - - - Removes all the children of the current node. - - - - - Removes the specified child node. - - The node being removed. May not be null. - The node removed. - - - - Removes the specified child node. - - The node being removed. May not be null. - true to keep grand children of the node, false otherwise. - The node removed. - - - - Replaces the child node oldChild with newChild node. - - The new node to put in the child list. - The node being replaced in the list. - The node replaced. - - - - Selects a list of nodes matching the expression. - - The XPath expression. - An containing a collection of nodes matching the query, or null if no node matched the XPath expression. - - - - Selects the first XmlNode that matches the XPath expression. - - The XPath expression. May not be null. - The first that matches the XPath query or a null reference if no matching node was found. - - - - Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. - - The name of the attribute to set. May not be null. - The value for the attribute. - The corresponding attribute instance. - - - - Saves all the children of the node to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Saves all the children of the node to a string. - - The saved string. - - - - Saves the current node to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Saves the current node to the specified XmlWriter. - - The XmlWriter to which you want to save. - - - - Saves the current node to a string. - - The saved string. - - - - Gets the collection of HTML attributes for this node. May not be null. - - - - - Gets all the children of the node. - - - - - Gets a value indicating if this node has been closed or not. - - - - - Gets the collection of HTML attributes for the closing tag. May not be null. - - - - - Gets the first child of the node. - - - - - Gets a value indicating whether the current node has any attributes. - - - - - Gets a value indicating whether this node has any child nodes. - - - - - Gets a value indicating whether the current node has any attributes on the closing tag. - - - - - Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. - - - - - Gets or Sets the HTML between the start and end tags of the object. - - - - - Gets or Sets the text between the start and end tags of the object. - - - - - Gets the last child of the node. - - - - - Gets the line number of this node in the document. - - - - - Gets the column number of this node in the document. - - - - - Gets or sets this node's name. - - - - - Gets the HTML node immediately following this element. - - - - - Gets the type of this node. - - - - - The original unaltered name of the tag - - - - - Gets or Sets the object and its content in HTML. - - - - - Gets the to which this node belongs. - - - - - Gets the parent of this node (for nodes that can have parents). - - - - - Gets the node immediately preceding this node. - - - - - Gets the stream position of this node in the document, relative to the start of the document. - - - - - Gets a valid XPath string that points to this node - - - - - Gets or Sets the comment text of the node. - - - - - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - - - - - Gets or Sets the object and its content in HTML. - - - - - A utility class to compute CRC32. - - - - - Compute a checksum for a given array of bytes. - - The array of bytes to compute the checksum for. - The computed checksum. - - - - Compute a checksum for a given string. - - The string to compute the checksum for. - The computed checksum. - - - - Represents an HTML attribute. - - - - - Compares the current instance with another attribute. Comparison is based on attributes' name. - - An attribute to compare with this instance. - A 32-bit signed integer that indicates the relative order of the names comparison. - - - - Creates a duplicate of this attribute. - - The cloned attribute. - - - - Removes this attribute from it's parents collection - - - - - Gets the line number of this attribute in the document. - - - - - Gets the column number of this attribute in the document. - - - - - Gets the qualified name of the attribute. - - - - - Name of attribute with original case - - - - - Gets the HTML document to which this attribute belongs. - - - - - Gets the HTML node to which this attribute belongs. - - - - - Specifies what type of quote the data should be wrapped in - - - - - Gets the stream position of this attribute in the document, relative to the start of the document. - - - - - Gets or sets the value of the attribute. - - - - - Gets a valid XPath string that points to this Attribute - - - - - An Enum representing different types of Quotes used for surrounding attribute values - - - - - A single quote mark ' - - - - - A double quote mark " - - - - - Represents a list of mixed code fragments. - - - - - Gets an enumerator that can iterate through the fragment list. - - - - - Appends a fragment to the list of fragments. - - The fragment to append. May not be null. - - - - Gets an enumerator that can iterate through the fragment list. - - - - - Prepends a fragment to the list of fragments. - - The fragment to append. May not be null. - - - - Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. - - The fragment to remove. May not be null. - - - - Remove all fragments from the list. - - - - - Remove a fragment from the list of fragments, using its index in the list. - - The index of the fragment to remove. - - - - Gets the Document - - - - - Gets the number of fragments contained in the list. - - - - - Gets a fragment from the list using its index. - - - - - Represents a fragment enumerator. - - - - - Advances the enumerator to the next element of the collection. - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Gets the current element in the collection. - - - - - Represents an exception thrown by the HtmlWeb utility class. - - - - - Creates an instance of the HtmlWebException. - - The exception's message. - - - - Represents the type of fragment in a mixed code document. - - - - - The fragment contains code. - - - - - The fragment contains text. - - - - - Represents the type of a node. - - - - - The root of a document. - - - - - An HTML element. - - - - - An HTML comment. - - - - - A text node is always the child of an element or a document node. - - - - - Flags that describe the behavior of an Element node. - - - - - The node is a CDATA node. - - - - - The node is empty. META or IMG are example of such nodes. - - - - - The node will automatically be closed during parsing. - - - - - The node can overlap. - - - - - Represents an HTML text node. - - - - - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - - - - - Gets or Sets the object and its content in HTML. - - - - - Gets or Sets the text of the node. - - - - - Represents a parsing error found during document parsing. - - - - - Gets the type of error. - - - - - Gets the line number of this error in the document. - - - - - Gets the column number of this error in the document. - - - - - Gets a description for the error. - - - - - Gets the the full text of the line containing the error. - - - - - Gets the absolute stream position of this error in the document, relative to the start of the document. - - - - - Represents a complete HTML document. - - - - - Adds Debugging attributes to node. Default is false. - - - - - Defines if closing for non closed nodes must be done at the end or directly in the document. - Setting this to true can actually change how browsers render the page. Default is false. - - - - - Defines if non closed nodes will be checked at the end of parsing. Default is true. - - - - - Defines if a checksum must be computed for the document while parsing. Default is false. - - - - - Defines the default stream encoding to use. Default is System.Text.Encoding.Default. - - - - - Defines if source text must be extracted while parsing errors. - If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. - Default is false. - - - - - Defines the maximum length of source text or parse errors. Default is 100. - - - - - Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. - - - - - Defines if output must conform to XML, instead of HTML. - - - - - Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. - - - - - Defines if name must be output with it's original case. Useful for asp.net tags and attributes - - - - - Defines if name must be output in uppercase. Default is false. - - - - - Defines if declared encoding must be read from the document. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - Default is true. - - - - - Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. - - - - - Defines if the 'id' attribute must be specifically used. Default is true. - - - - - Defines if empty nodes must be written as closed during output. Default is false. - - - - - Creates an instance of an HTML document. - - - - - Creates a new XPathNavigator object for navigating this HTML document. - - An XPathNavigator object. The XPathNavigator is positioned on the root of the document. - - - - Gets a valid XML name. - - Any text. - A string that is a valid XML name. - - - - Applies HTML encoding to a specified string. - - The input string to encode. May not be null. - The encoded string. - - - - Determines if the specified character is considered as a whitespace character. - - The character to check. - true if if the specified character is considered as a whitespace character. - - - - Creates an HTML attribute with the specified name. - - The name of the attribute. May not be null. - The new HTML attribute. - - - - Creates an HTML attribute with the specified name. - - The name of the attribute. May not be null. - The value of the attribute. - The new HTML attribute. - - - - Creates an HTML comment node. - - The new HTML comment node. - - - - Creates an HTML comment node with the specified comment text. - - The comment text. May not be null. - The new HTML comment node. - - - - Creates an HTML element node with the specified name. - - The qualified name of the element. May not be null. - The new HTML node. - - - - Creates an HTML text node. - - The new HTML text node. - - - - Creates an HTML text node with the specified text. - - The text of the node. May not be null. - The new HTML text node. - - - - Detects the encoding of an HTML stream. - - The input stream. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML file. - - Path for the file containing the HTML document to detect. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML text provided on a TextReader. - - The TextReader used to feed the HTML. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML document from a file first, and then loads the file. - - The complete file path to be read. - - - - Detects the encoding of an HTML document from a file first, and then loads the file. - - The complete file path to be read. May not be null. - true to detect encoding, false otherwise. - - - - Detects the encoding of an HTML text. - - The input html text. May not be null. - The detected encoding. - - - - Gets the HTML node with the specified 'id' attribute value. - - The attribute id to match. May not be null. - The HTML node with the matching id or null if not found. - - - - Loads an HTML document from a stream. - - The input stream. - - - - Loads an HTML document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - The minimum buffer size. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads the HTML document from the specified TextReader. - - The TextReader used to feed the HTML data into the document. May not be null. - - - - Loads the HTML document from the specified string. - - String containing the HTML document to load. May not be null. - - - - Saves the HTML document to the specified stream. - - The stream to which you want to save. - - - - Saves the HTML document to the specified stream. - - The stream to which you want to save. May not be null. - The character encoding to use. May not be null. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. May not be null. - The character encoding to use. May not be null. - - - - Saves the HTML document to the specified StreamWriter. - - The StreamWriter to which you want to save. - - - - Saves the HTML document to the specified TextWriter. - - The TextWriter to which you want to save. May not be null. - - - - Saves the HTML document to the specified XmlWriter. - - The XmlWriter to which you want to save. - - - - Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. - - - - - Gets the document's declared encoding. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - - - - - Gets the root node of the document. - - - - - Gets the document's output encoding. - - - - - Gets a list of parse errors found in the document. - - - - - Gets the remaining text. - Will always be null if OptionStopperNodeName is null. - - - - - Gets the offset of Remainder in the original Html text. - If OptionStopperNodeName is null, this will return the length of the original Html text. - - - - - Gets the document's stream encoding. - - - - - Represents a combined list and collection of HTML nodes. - - - - - Initialize the HtmlNodeCollection with the base parent node - - The base node of the collection - - - - Add node to the collection - - - - - - Clears out the collection of HtmlNodes. Removes each nodes reference to parentnode, nextnode and prevnode - - - - - Gets existence of node in collection - - - - - - - Copy collection to array - - - - - - - Get Enumerator - - - - - - Get Explicit Enumerator - - - - - - Get index of node - - - - - - - Insert node at index - - - - - - - Remove node - - - - - - - Remove at index - - - - - - Get first instance of node in supplied collection - - - - - - - - Add node to the end of the collection - - - - - - Get first instance of node with name - - - - - - - Get index of node - - - - - - - Add node to the beginning of the collection - - - - - - Remove node at index - - - - - - - Replace node at index - - - - - - - Get all node descended from this collection - - - - - - Get all node descended from this collection with matching name - - - - - - Gets all first generation elements in collection - - - - - - Gets all first generation elements matching name - - - - - - - All first generation nodes in collection - - - - - - Gets a given node from the list. - - - - - Get node with tag name - - - - - - - Gets the number of elements actually contained in the list. - - - - - Is collection read only - - - - - Gets the node at the specified index. - - - - - A utility class to get HTML document from HTTP. - - - - - Occurs after an HTTP request has been executed. - - - - - Occurs before an HTML document is handled. - - - - - Occurs before an HTTP request is executed. - - - - - Gets the MIME content type for a given path extension. - - The input path extension. - The default content type to return if any error occurs. - The path extension's MIME content type. - - - - Gets the path extension for a given MIME content type. - - The input MIME content type. - The default path extension to return if any error occurs. - The MIME content type's path extension. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The requested type. - An newly created instance. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An containing the namespace-qualified arguments used as input to the transform. - The requested type. - An newly created instance. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An containing the namespace-qualified arguments used as input to the transform. - The requested type. - A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. - An newly created instance. - - - - Gets an HTML document from an Internet resource and saves it to the specified file. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - - - - Gets an HTML document from an Internet resource and saves it to the specified file. - Proxy aware - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - - - - - - Gets an HTML document from an Internet resource and saves it to the specified file. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - - - - Gets an HTML document from an Internet resource and saves it to the specified file. Understands Proxies - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - - - - - Gets the cache file path for a specified url. - - The url fo which to retrieve the cache path. May not be null. - The cache file path. - - - - Gets an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - A new HTML document. - - - - Gets an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - Host to use for Proxy - Port the Proxy is on - User Id for Authentication - Password for Authentication - A new HTML document. - - - - Loads an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - A new HTML document. - - - - Loads an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - Proxy to use with this request - Credentials to use when authenticating - A new HTML document. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The XmlTextWriter to which you want to save. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The XmlTextWriter to which you want to save. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null. - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The XmlTextWriter to which you want to save. - A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. - - - - Gets or Sets a value indicating if document encoding must be automatically detected. - - - - - Gets or Sets a value indicating whether to get document only from the cache. - If this is set to true and document is not found in the cache, nothing will be loaded. - - - - - Gets or Sets the cache path. If null, no caching mechanism will be used. - - - - - Gets a value indicating if the last document was retrieved from the cache. - - - - - Gets the last request duration in milliseconds. - - - - - Gets the URI of the Internet resource that actually responded to the request. - - - - - Gets the last request status. - - - - - Gets or Sets the size of the buffer used for memory operations. - - - - - Gets or Sets a value indicating if cookies will be stored. - - - - - Gets or Sets the User Agent HTTP 1.1 header sent on any webrequest - - - - - Gets or Sets a value indicating whether the caching mechanisms should be used or not. - - - - - Represents the method that will handle the PostResponse event. - - - - - Represents the method that will handle the PreHandleDocument event. - - - - - Represents the method that will handle the PreRequest event. - - - - - A utility class to replace special characters by entities and vice-versa. - Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html - - - - - Replace known entities by characters. - - The source text. - The result text. - - - - Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. - - The node to entitize. - An entitized cloned node. - - - - Replace characters above 127 by entities. - - The source text. - The result text. - - - - Replace characters above 127 by entities. - - The source text. - If set to false, the function will not use known entities name. Default is true. - The result text. - - - - Replace characters above 127 by entities. - - The source text. - If set to false, the function will not use known entities name. Default is true. - If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized. - The result text - - - - A collection of entities indexed by name. - - - - - A collection of entities indexed by value. - - - - - Represents a combined list and collection of HTML nodes. - - - - - Adds supplied item to collection - - - - - - Explicit clear - - - - - Retreives existence of supplied item - - - - - - - Copies collection to array - - - - - - - Get Explicit enumerator - - - - - - Explicit non-generic enumerator - - - - - - Retrieves the index for the supplied item, -1 if not found - - - - - - - Inserts given item into collection at supplied index - - - - - - - Explicit collection remove - - - - - - - Removes the attribute at the specified index. - - The index of the attribute to remove. - - - - Adds a new attribute to the collection with the given values - - - - - - - Inserts the specified attribute as the last attribute in the collection. - - The attribute to insert. May not be null. - The appended attribute. - - - - Creates and inserts a new attribute as the last attribute in the collection. - - The name of the attribute to insert. - The appended attribute. - - - - Creates and inserts a new attribute as the last attribute in the collection. - - The name of the attribute to insert. - The value of the attribute to insert. - The appended attribute. - - - - Checks for existance of attribute with given name - - - - - - - Inserts the specified attribute as the first node in the collection. - - The attribute to insert. May not be null. - The prepended attribute. - - - - Removes a given attribute from the list. - - The attribute to remove. May not be null. - - - - Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. - - The attribute's name. May not be null. - - - - Remove all attributes in the list. - - - - - Returns all attributes with specified name. Handles case insentivity - - Name of the attribute - - - - - Removes all attributes from the collection - - - - - Clears the attribute collection - - - - - Gets a given attribute from the list using its name. - - - - - Gets the number of elements actually contained in the list. - - - - - Gets readonly status of colelction - - - - - Gets the attribute at the specified index. - - - - - Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. - - - - - Gets or sets the token representing code end. - - - - - Gets or sets the token representing code start. - - - - - Gets or sets the token representing code directive. - - - - - Gets or sets the token representing response write directive. - - - - - Creates a mixed code document instance. - - - - - Create a code fragment instances. - - The newly created code fragment instance. - - - - Create a text fragment instances. - - The newly created text fragment instance. - - - - Loads a mixed code document from a stream. - - The input stream. - - - - Loads a mixed code document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads the mixed code document from the specified TextReader. - - The TextReader used to feed the HTML data into the document. - - - - Loads a mixed document from a text - - The text to load. - - - - Saves the mixed document to the specified stream. - - The stream to which you want to save. - - - - Saves the mixed document to the specified stream. - - The stream to which you want to save. - The character encoding to use. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - The character encoding to use. - - - - Saves the mixed document to the specified StreamWriter. - - The StreamWriter to which you want to save. - - - - Saves the mixed document to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Gets the code represented by the mixed code document seen as a template. - - - - - Gets the list of code fragments in the document. - - - - - Gets the list of all fragments in the document. - - - - - Gets the encoding of the stream used to read the document. - - - - - Gets the list of text fragments in the document. - - - - - Represents a fragment of text in a mixed code document. - - - - - Gets the fragment text. - - - - diff --git a/External/HtmlAgilityPack/HtmlAgilityPack.dll b/External/HtmlAgilityPack/HtmlAgilityPack.dll deleted file mode 100644 index b0692c1d9..000000000 Binary files a/External/HtmlAgilityPack/HtmlAgilityPack.dll and /dev/null differ diff --git a/External/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.dll b/External/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index fe643ebc6..000000000 Binary files a/External/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/External/MSBuildExtensionPack/Interop.COMAdmin.dll b/External/MSBuildExtensionPack/Interop.COMAdmin.dll deleted file mode 100644 index b93833040..000000000 Binary files a/External/MSBuildExtensionPack/Interop.COMAdmin.dll and /dev/null differ diff --git a/External/MSBuildExtensionPack/Interop.IWshRuntimeLibrary.dll b/External/MSBuildExtensionPack/Interop.IWshRuntimeLibrary.dll deleted file mode 100644 index 2400e7613..000000000 Binary files a/External/MSBuildExtensionPack/Interop.IWshRuntimeLibrary.dll and /dev/null differ diff --git a/External/MSBuildExtensionPack/Ionic.Zip.dll b/External/MSBuildExtensionPack/Ionic.Zip.dll deleted file mode 100644 index 95fa92885..000000000 Binary files a/External/MSBuildExtensionPack/Ionic.Zip.dll and /dev/null differ diff --git a/External/MSBuildExtensionPack/MSBuild Extension Pack Help.chm b/External/MSBuildExtensionPack/MSBuild Extension Pack Help.chm deleted file mode 100644 index c5a56b616..000000000 Binary files a/External/MSBuildExtensionPack/MSBuild Extension Pack Help.chm and /dev/null differ diff --git a/External/MSBuildExtensionPack/MSBuild.ExtensionPack.dll b/External/MSBuildExtensionPack/MSBuild.ExtensionPack.dll deleted file mode 100644 index 2a89d5e8e..000000000 Binary files a/External/MSBuildExtensionPack/MSBuild.ExtensionPack.dll and /dev/null differ diff --git a/External/MSBuildExtensionPack/MSBuild.ExtensionPack.tasks b/External/MSBuildExtensionPack/MSBuild.ExtensionPack.tasks deleted file mode 100644 index 668100262..000000000 --- a/External/MSBuildExtensionPack/MSBuild.ExtensionPack.tasks +++ /dev/null @@ -1,151 +0,0 @@ - - - - $(MSBuildProjectDirectory) - $(BuildPath)\..\..\BuildBinaries\ - $(MSBuildExtensionsPath)\ExtensionPack\4.0\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/External/NantGoogleCode/NantGoogleCode.dll b/External/NantGoogleCode/NantGoogleCode.dll deleted file mode 100644 index 0e3b9d278..000000000 Binary files a/External/NantGoogleCode/NantGoogleCode.dll and /dev/null differ diff --git a/External/nant/COPYING.txt b/External/nant/COPYING.txt deleted file mode 100644 index 5b6e7c66c..000000000 --- a/External/nant/COPYING.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/External/nant/README.txt b/External/nant/README.txt deleted file mode 100644 index 79edf1955..000000000 --- a/External/nant/README.txt +++ /dev/null @@ -1,158 +0,0 @@ -NAnt - -What is it? ------------ -NAnt is a .NET based build tool. In theory it is kind of like make without -make's wrinkles. In practice it's a lot like Ant. - -If you are not familiar with Jakarta Ant you can get more information at the -Ant project web site (http://ant.apache.org/). - - -Why NAnt? ---------- -Because Ant was too Java specific. -Because Ant needed the Java runtime. NAnt only needs the .NET -or Mono runtime. - - -The Latest Version ------------------- -Details of the latest version can be found on the NAnt project web site -http://nant.sourceforge.net/ - - -Files ------ - README.txt - This file. - Makefile - Makefile for compilation with GNU Make. - Makefile.nmake - Makefile for compilation with Microsoft NMake. - - -Compilation and Installation ----------------------------- - - a. Overview - ----------- - The compilation process uses NAnt to build NAnt. - - The approach is to first compile a copy of NAnt (using make/nmake) for - bootstrapping purpose. Next, the bootstrapped version of NAnt is used in - conjunction with NAnt build file (NAnt.build) to build the full version. - - - b. Prerequisites - ---------------- - To build NAnt, you will need the following components: - - Windows - ------- - - * A version of the Microsoft .NET Framework - - Available from http://msdn.microsoft.com/netframework/ - - You will need the .NET Framework SDK as well as the runtime - components if you intend to compile programs. - - Note: NAnt currently supports versions 1.0, 1.1, 2.0, 3.5, and 4.0 - of the Microsoft .NET Framework. - - or - - * Mono for Windows (version 2.0 or higher) - - Available from http://www.mono-project.com/downloads/ - - Linux/Unix - ---------- - - * GNU toolchain - including GNU make - - * pkg-config - - Available from: http://www.freedesktop.org/Software/pkgconfig - - * A working Mono installation and development libraries (version 2.0 or higher) - - Available from: http://www.mono-project.com/downloads/ - - - b. Building the Software - ------------------------ - - Build NAnt using Microsoft .NET: - - GNU Make - -------- - make install MONO= MCS=csc prefix= [DESTDIR=] [TARGET=] - - eg. make install MONO= MCS=csc prefix="c:\Program Files" TARGET=net-2.0 - - NMake - ----- - nmake -f Makefile.nmake install prefix= [DESTDIR=] [TARGET=] - - eg. nmake -f Makefile.nmake install prefix="c:\Program Files" TARGET=net-4.0 - - - Building NAnt using Mono: - - GNU Make - -------- - make install prefix= [DESTDIR=] [TARGET=] - - eg. make install prefix="c:\Program Files" TARGET=mono-4.0 - - NMake - ----- - nmake -f Makefile.nmake install MONO=mono CSC=mcs prefix= [DESTDIR=] [TARGET=] - - eg. nmake -f Makefile.nmake install MONO=mono CSC=mcs prefix=/usr/local/ - -Note: - -These instructions only apply to the source distribution of NAnt, as the binary distribution -contains pre-built assemblies. - - -Documentation -------------- -Documentation is available in HTML format, in the doc/ directory. - - -License -------- -Copyright (C) 2001-2012 Gerry Shaw - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -As a special exception, the copyright holders of this software give you -permission to link the assemblies with independent modules to produce new -assemblies, regardless of the license terms of these independent modules, -and to copy and distribute the resulting assemblies under terms of your -choice, provided that you also meet, for each linked independent module, -the terms and conditions of the license of that module. An independent -module is a module which is not derived from or based on these assemblies. -If you modify this software, you may extend this exception to your version -of the software, but you are not obligated to do so. If you do not wish to -do so, delete this exception statement from your version. - -A copy of the GNU General Public License is available in the COPYING.txt file -included with all NAnt distributions. - -For more licensing information refer to the GNU General Public License on the -GNU Project web site. -http://www.gnu.org/copyleft/gpl.html diff --git a/External/nant/bin/NAnt.CompressionTasks.dll b/External/nant/bin/NAnt.CompressionTasks.dll deleted file mode 100644 index 11c81c281..000000000 Binary files a/External/nant/bin/NAnt.CompressionTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.CompressionTasks.xml b/External/nant/bin/NAnt.CompressionTasks.xml deleted file mode 100644 index 2eb2db69d..000000000 --- a/External/nant/bin/NAnt.CompressionTasks.xml +++ /dev/null @@ -1,725 +0,0 @@ - - - - NAnt.CompressionTasks - - - - - Summary description for ExpandTask. - - - - - Extracts a file entry from the specified stream. - - The containing the compressed entry. - The directory where to store the expanded file. - The name of the entry including directory information. - The date of the entry. - The uncompressed size of the entry. - - The destination directory for the entry could not be created. - -or- - The entry could not be extracted. - - - We cannot rely on the fact that the directory entry of a given file - is created before the file is extracted, so we should create the - directory if it doesn't yet exist. - - - - - Extracts a directory entry from the specified stream. - - The containing the directory entry. - The directory where to create the subdirectory. - The name of the directory entry. - The date of the entry. - - The destination directory for the entry could not be created. - - - - - Overwrite files, even if they are newer than the corresponding - entries in the archive. The default is . - - - - - Expands a file packed using GZip compression. - - - Expands "test.tar.gz" to "test2.tar". - - - ]]> - - - - - - Extracts the file from the gzip archive. - - - - - The file to expand. - - - - - The destination file. - - - - - Creates a tar file from the specified filesets. - - - Uses #ziplib (SharpZipLib), an open source Tar/Zip/GZip library written entirely in C#. - - - - Tar all files in ${build.dir} and ${doc.dir} into a file - called "backup.tar.gz", and apply gzip compression to it. - - - - - - - - - - - ]]> - - - - - - Creates the tar file. - - - - - The tar file to create. - - - - - Include empty directories in the generated tar file. The default is - . - - - - - Ignore directory structure of source directory, compress all files - into a single directory. - The default value is . - - - - - The set of files to be included in the archive. - - - - - The compression method. The default is . - - - - - Extracts files from a tar archive. - - - - Uses #ziplib - (SharpZipLib), an open source Zip/GZip library written entirely in C#. - - - - Extracts all files from a gzipped tar, preserving the directory structure. - - - ]]> - - - - - - Extracts the files from the archive. - - - - - The archive file to expand. - - - - - The directory where to store the expanded file(s). The default is - the project base directory. - - - - - The compression method. The default is . - - - - - Extracts files from a zip archive. - - - - Uses #ziplib - (SharpZipLib), an open source Zip/GZip library written entirely in C#. - - - - Extracts all the file from the zip, preserving the directory structure. - - - ]]> - - - - - - Extracts the files from the zip file. - - - - - The archive file to expand. - - - - - The directory where the expanded files should be stored. The - default is the project base directory. - - - - - The character encoding that has been used for filenames inside the - zip file. The default is the system's OEM code page. - - - - - Creates a zip file from the specified filesets. - - - - Uses #ziplib - (SharpZipLib), an open source Tar/Zip/GZip library written entirely in C#. - - - - - Zip all files in ${build.dir} and ${doc.dir} into a file - called "backup.zip". - - - - - - - - - - - ]]> - - - - - - Creates the zip file. - - - - - The zip file to create. - - - - - The comment for the file. - - - - - Date/time stamp for the files in the format MM/DD/YYYY HH:MM:SS. - - - - - Desired level of compression. Possible values are 0 (STORE only) - to 9 (highest). The default is 6. - - - - - Include empty directories in the generated zip file. The default is - . - - - - - Ignore directory structure of source directory, compress all files - into a single directory. - The default value is . - - - - - The set of files to be included in the archive. - - - - - Specifies the behaviour when a duplicate file is found. The default - is . - - - - - The character encoding to use for filenames and comment inside the - zip file. The default is the system's OEM code page. - - - - - Specifies how entries with the same name should be processed. - - - - - Overwrite existing entry with same name. - - - - - Preserve existing entry with the same name. - - - - - Report failure when two entries have the same name. - - - - - Specialized for - that ignores case when converting from string. - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Specifies the compression methods supported by - and . - - - - - No compression. - - - - - GZIP compression. - - - - - BZIP2 compression. - - - - - Specialized for - that ignores case when converting from string. - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - A is a with extra - attributes useful in the context of the . - - - - - A 3 digit octal string, specify the user, group and other modes - in the standard Unix fashion. Only applies to plain files. The - default is 644. - - - - - A 3 digit octal string, specify the user, group and other modes - in the standard Unix fashion. Only applies to directories. The - default is 755. - - - - - The username for the tar entry. - - - - - The user identifier (UID) for the tar entry. - - - - - The groupname for the tar entry. - - - - - The group identifier (GID) for the tar entry. - - - - - The top level directory prefix. If set, all file and directory paths - in the fileset will have this value prepended. Can either be a single - directory name or a "/" separated path. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Get the total number of files that are represented by the - filesets in this collection. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A is a with extra - attributes useful in the context of the . - - - - - The top level directory prefix. If set, all file and directory paths - in the fileset will have this value prepended. Can either be a single - directory name or a "/" separated path. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Get the total number of files that are represented by the - filesets in this collection. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - diff --git a/External/nant/bin/NAnt.Core.dll b/External/nant/bin/NAnt.Core.dll deleted file mode 100644 index 1083a4243..000000000 Binary files a/External/nant/bin/NAnt.Core.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.Core.xml b/External/nant/bin/NAnt.Core.xml deleted file mode 100644 index 17018260a..000000000 --- a/External/nant/bin/NAnt.Core.xml +++ /dev/null @@ -1,17156 +0,0 @@ - - - - NAnt.Core - - - - - Used to indicate that a property should be able to be converted into a - . - - - - - Base class for all validator attributes. - - - - - Validates the specified value. - - The value to be validated. - The validation fails. - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value can be converted to a . - - The value to be checked. - cannot be converted to a . - - - - Indicates that property should be treated as a XML attribute for the - task. - - - Examples of how to specify task attributes - - #region Public Instance Properties - - [BuildAttribute("out", Required=true)] - public string Output { - get { return _out; } - set { _out = value; } - } - - [BuildAttribute("optimize")] - [BooleanValidator()] - public bool Optimize { - get { return _optimize; } - set { _optimize = value; } - } - - [BuildAttribute("warnlevel")] - [Int32Validator(0,4)] // limit values to 0-4 - public int WarnLevel { - get { return _warnLevel; } - set { _warnLevel = value; } - } - - [BuildElement("sources")] - public FileSet Sources { - get { return _sources; } - set { _sources = value; } - } - - #endregion Public Instance Properties - - #region Private Instance Fields - - private string _out = null; - private bool _optimize = false; - private int _warnLevel = 4; - private FileSet _sources = new FileSet(); - - #endregion Private Instance Fields - - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the name of the XML attribute. - - - The name of the XML attribute. - - - - - Gets or sets a value indicating whether the attribute is required. - - - if the attribute is required; otherwise, - . The default is . - - - - - Gets or sets a value indicating whether property references should - be expanded. - - - if properties should be expanded; otherwise - . The default is . - - - - - Used to specify how this attribute will be handled as the XML is - parsed and given to the element. - - - if XML should be processed; otherwise - . The default is . - - - - - Indicates that property should be treated as a XML arrayList - - - - Should only be applied to properties exposing strongly typed arrays or - strongly typed collections. - - - The XML format is like this: - - - - - - - - ]]> - - - - - - - Indicates that the property should be treated as an XML element and - further processing should be done. - - - - The XML format is like this: - - - - - - - ]]> - - - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the name of the attribute. - - - The name of the attribute. - - - - - Gets or sets a value indicating whether the attribute is required. - - - if the attribute is required; otherwise, - . The default is . - - - - - Used to specify how this element will be handled as the XML is parsed - and given to the element. - - - if XML should be processed; otherwise - . The default is . - - - - - Initializes a new instance of the - with the specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Gets or sets the type of objects that this container holds. - - - The type of the elements that this container holds. - - - - This can be used for validation and schema generation. - - - If not specified, the type of the elements will be determined using - reflection. - - - is . - - - - Indicates that the property should be treated as a container for a - collection of build elements. - - - - Should only be applied to properties exposing strongly typed arrays or - strongly typed collections. - - - The XML format is like this: - - - - - - - - - - ]]> - - - - - - - Initializes a new instance of the with the - specified name and child element name. - - The name of the collection. - The name of the child elements in the collection - is . - is a zero-length . - - - - The name of the child element within the collection. - - - The name to check for in the XML of the elements in the collection. - - - This can be used for validation and schema generation. - - - - - Used to indicate that a property should be able to be converted into a - . - - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value can be converted to a . - - The value to be checked. - cannot be converted to a . - - - - Indicates that class should be treated as a NAnt element. - - - Attach this attribute to a subclass of Element to have NAnt be able - to recognize it. The name should be short but must not confict - with any other element already in use. - - - - - Initializes a new instance of the - with the specified name. - - The name of the element. - is . - is a zero-length . - - - - Gets or sets the name of the element. - - - The name of the element. - - - - - Indicates that a property should be treated as a XML file set for the - task. - - - - - Initializes a new instance of the with the - specified name. - - The name of the attribute. - is . - is a zero-length . - - - - Indicates that the value of the property to which the attribute is - assigned, can be configured on the framework-level in the NAnt application - configuration file. - - - - The following example shows a property of which the value can be - configured for a specific framework in the NAnt configuration file. - - - [FrameworkConfigurable("exename", Required=true)] - public virtual string ExeName { - get { return _exeName; } - set { _exeName = value; } - } - - - - - - Initializes a new instance of the - with the specified attribute name. - - The name of the framework configuration attribute. - is a . - is a zero-length . - - - - Gets or sets the name of the framework configuration attribute. - - The name of the framework configuration attribute. - - - - Gets or sets a value indicating whether the configuration attribute - is required. - - - if the configuration attribute is required; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether property references should - be expanded. - - - if properties should be expanded; otherwise - . The default is . - - - - - Indicates that the method should be exposed as a function in NAnt build - files. - - - Attach this attribute to a method of a class that derives from - to have NAnt be able to recognize it. - - - - - Initializes a new instance of the - class with the specified name. - - The name of the function. - is . - is a zero-length . - - - - Gets or sets the name of the function. - - - The name of the function. - - - - - Indicates that class should be treated as a set of functions. - - - Attach this attribute to a class that derives from - to have NAnt be able to recognize it as containing custom functions. - - - - - Initializes a new instance of the - class with the specified name. - - The prefix used to distinguish the functions. - The category of the functions. - - is . - -or- - is . - - - is a zero-length . - -or- - is a zero-length . - - - - - Gets or sets the category of the function set. - - - The name of the category of the function set. - - - This will be displayed in the user docs. - - - - - Gets or sets the prefix of all functions in this function set. - - - The prefix of the functions in this function set. - - - - - Indicates that property should be able to be converted into a - within the given range. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specied minimum and maximum values. - - The minimum value. - The maximum value. - - - - Checks whether the specified value can be converted to an - and whether the value lies within the range defined by the - and properties. - - The value to be checked. - - - cannot be converted to an . - - -or- - - is not in the range defined by - and . - - - - - - Gets or sets the minimum value. - - - The minimum value. The default is . - - - - - Gets or sets the maximum value. - - - The maximum value. The default is . - - - - - The base of the number to validate, which must be 2, 8, 10, or 16. - - - The base of the number to validate. - - - The default is 10. - - - - - Defines possible locations in which a task executable can be located. - - - - - Locates the task executable in the current Framework directory. - - - - - Locates the task executable in the current Framework SDK directory. - - - - - Indicates the location that a task executable can be located in. - - - - When applied to a task deriving from , - the program to execute will first be searched for in the designated - location. - - - If the program does not exist in that location, and the file name is - not an absolute path then the list of tool paths of the current - target framework will be searched (in the order in which they are - defined in the NAnt configuration file). - - - - - - Initializes a new instance of the - with the specified location. - - The of the attribute. - - - - Gets or sets the of the task. - - - The location type of the task to which the attribute is assigned. - - - - - Used to indicate whether a property should allow - an empty string value or not. - - - - - Initializes a new instance of the - class. - - - - - Checks if the specified value adheres to the rules defined by the - properties of the . - - The value to be checked. - is an empty string value and is set to . - - - - Gets or sets a value indicating whether an empty string or - should be a considered a valid value. - - - if an empty string or - should be considered a valid value; otherwise, . - The default is . - - - - - Gets or sets a regular expression. The string will be validated to - determine if it matches the expression. - - - - - - - - An optional error message that can be used to better describe the - regular expression error. - - - - - Indicates that property should be treated as a XML attribute for the - task. - - - Examples of how to specify task attributes - - // task XmlType default is string - [TaskAttribute("out", Required=true)] - string _out = null; // assign default value here - - [TaskAttribute("optimize")] - [BooleanValidator()] - // during ExecuteTask you can safely use Convert.ToBoolean(_optimize) - string _optimize = Boolean.FalseString; - - [TaskAttribute("warnlevel")] - [Int32Validator(0,4)] // limit values to 0-4 - // during ExecuteTask you can safely use Convert.ToInt32(_optimize) - string _warnlevel = "0"; - - [BuildElement("sources")] - FileSet _sources = new FileSet(); - - NOTE: Attribute values must be of type of string if you want - to be able to have macros. The field stores the exact value during - Initialize. Just before ExecuteTask is called NAnt will expand - all the macros with the current values. - - - - - Initializes a new instance of the - with the specified attribute name. - - The name of the task attribute. - is a . - is a zero-length . - - - - Indicates that class should be treated as a task. - - - Attach this attribute to a subclass of Task to have NAnt be able - to recognize it. The name should be short but must not confict - with any other task already in use. - - - - - Initializes a new instance of the - with the specified name. - - The name of the task. - is . - is a zero-length . - - - - Models a NAnt XML element in the build file. - - - - Automatically validates attributes in the element based on attributes - applied to members in derived classes. - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - from the specified element. - - The element that should be used to create a new instance of the class. - - - - Performs default initialization. - - - Derived classes that wish to add custom initialization should override - the method. - - - - - Retrieves the location in the build file where the element is - defined. - - The element's build file location - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the project. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the project. - - - - - Derived classes should override to this method to provide extra - initialization and validation not covered by the base class. - - The XML node of the element to use for initialization. - - - - Derived classes should override to this method to provide extra - initialization and validation not covered by the base class. - - - Access to the that was used to initialize - this is available through . - - - - - Copies all instance data of the to a given - . - - - - - Performs initialization using the given set of properties. - - - - - Initializes all build attributes and child elements. - - - - - Locates the XML node for the specified attribute in the project - configuration node. - - The name of attribute for which the XML configuration node should be located. - The framework to use to obtain framework specific information, or if no framework specific information should be used. - - The XML configuration node for the specified attribute, or - if no corresponding XML node could be - located. - - - If there's a valid current framework, the configuration section for - that framework will first be searched. If no corresponding - configuration node can be located in that section, the framework-neutral - section of the project configuration node will be searched. - - - - - Returns the of the - assigned to the specified - . - - The of which the assigned should be retrieved. - - The assigned to the specified - or a null reference is no - is assigned to the . - - - - - Gets or sets the parent of the element. - - - The parent of the element. - - - This will be the parent , , or - depending on where the element is defined. - - - - - Gets the name of the XML element used to initialize this element. - - - The name of the XML element used to initialize this element. - - - - - Gets or sets the to which this element belongs. - - - The to which this element belongs. - - - - - Gets the properties local to this and the - . - - - The properties local to this and the . - - - - - Gets or sets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Gets or sets the XML node of the element. - - - The XML node of the element. - - - - - Gets or sets the location in the build file where the element is - defined. - - - The location in the build file where the element is defined. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was used to - initialize the element. - - - . - - - - Elements that need to perform additional processing of the - that was used to initialize the element, should - override this property and return . - - - When , no build errors will be reported for - unknown nested build elements. - - - - - - Configures an using meta-data provided by - assigned attributes. - - - - - Initializes a new instance of the - class for the given . - - The for which an should be created. - The to initialize the with. - The to use for property expansion. - The framework that the should target. - - is . - -or- - is . - -or- - is . - - - - - Creates a child using property set/get methods. - - The instance that represents the property of the current class. - A representing the get accessor for the property. - A representing the set accessor for the property. - The used to initialize the new instance. - The collection of property values to use for macro expansion. - The from which to obtain framework-specific information. - The child. - - - - Creates an for the given - . - - The for which an should be created. - - An for the given . - - - - - Holds the that should be initialized. - - - - - Holds the that should be used to initialize - the . - - - - - Holds the dictionary that should be used for property - expansion. - - - - - Holds the framework that should be targeted by the - that we're configuring, or - if there's no current target - framework. - - - - - Holds the names of the attributes that still need to be - processed. - - - - - Holds the names of the child nodes that still need to be - processed. - - - - - Holds the logger for the current class. - - - - - Holds the cache of instances. - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Internal interface used for setting element attributes. - - - - - Represents an explicitly named list of directories. - - - A is useful when you want to capture a list of - directories regardless whether they currently exist. - - - - - The base of the directory of this dirlist. The default is the project - base directory. - - - - - Gets the collection of environment variables that should be passed - to external programs that are launched. - - - - The collection of environment variables that should be passed - to external programs that are launched. - - - - - - The command-line arguments for the runtime engine. - - - - - Represents an in which one or more extensions - are found. - - - - - Initializes a new instance of the - class for a given . - - - The instance is not cached for - future use. If this is required, use . - - The for which to construct an . - - - - Creates an for the specified - and caches it for future use. - - - If an for the same assembly is - available in the cache, then this cached instance is returned. - - The for which to construct an . - - The for the specified . - - - - - Gets the containing extensions. - - - - - Initializes a instance of the - class for an extension in a given . - - The in which the extension is found. - is . - - - - Initializes a instance of the - class for an extension in a given . - - The in which the extension is found. - is . - - - - Gets the in which the extension - was found. - - - - - Gets the from which the extension will - be created. - - - The containing the extension. - - - - - Initializes a new instance of the - with the specified type. - - The type of the to consume. - is . - - - - Responsible for scanning types for plugins, and maintaining a cache of - instances. - - - - - Scans a given for plugins. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Registers matching plugins for the specified . - - The which plugins must be registered for. - is . - - - - Functions as a chainable TextReader - - - Implements a abstraction over a TextReader that allows the class to represent - either a TextReader or another ChainableReader to which it is chained. - - By passing a ChainableReader as a constructor paramater it is possiable to - chain many ChainableReaders together. The last ChainableReader in the chain must - be based on a TextReader. - - - - - Makes it so all calls to Read and Peek are passed the ChainableReader - passed as a parameter. - - ChainableReader to forward calls to - - - - Makes it so all calls to Read and Peek are passed the TextReader - passed as a parameter. - - TextReader to forward calls to - - - - Forwards Peek calls to the TextReader or ChainableReader passed in the corresponding constructor. - - Character or -1 if end of stream - - - - Forwards Read calls to the TextReader or ChainableReader passed in the corresponding constructor. - - - Character or -1 if end of stream. - - - - - Closes the reader. - - - - - Calls close and supresses the finalizer for the object. - - - - - Gets a value indicating if the reader is backed by a stream in the - chain. - - - if the reader is backed by a stream; - otherwise, . - - - - - Allows a file's content to be modified while performing an operation. - - - - - Called after construction and after properties are set. Allows - for filter initialization. - - - - - If then the filter will be used; otherwise, - skipped. The default is . - - - - - Opposite of . If - then the filter will be executed; otherwise, skipped. The default - is . - - - - - Creates a new instance of the class - for the specified class in the specified - . - - - An for the specified - is cached for future use. - - The containing the . - The class representing the . - - - - Creates a new instance of the class - for the specified class in the specified - . - - The containing the . - The class representing the . - - - - Gets the name of the class that can be created - using this . - - - The name of the class that can be created using - this . - - - - - Gets the name of the filter which the - can create. - - - The name of the task which the can - create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for - the specified task is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of the filter for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represent a chain of NAnt filters that can be applied to a . - - - - A FilterChain represents a collection of one or more filters that can - be appled to a such as the . - In the case of the , the contents of the copied - files are filtered through each filter specified in the filter chain. - Filtering occurs in the order the filters are specified with filtered - output of one filter feeding into another. - - - :--------:--->:----------:--->:----------: ... :----------:--->:--------:
- :.Source.:--->:.Filter 1.:--->:.Filter 2.: ... :.Filter n.:--->:.target.:
- :--------:--->:----------:--->:----------: ... :----------:--->:--------:
-
- - A list of all filters that come with NAnt is available here. - - - The following tasks support filtering with a FilterChain: - - - - - - - - - -
- - - Replace all occurrences of @NOW@ with the current date/time and - replace tabs with spaces in all copied files. - - - - - - - - - - - - - - - ]]> - - -
- - - Provides the abstract base class for types. - - - - - Should be overridden by derived classes. clones the referenced types - data into the current instance. - - - - - Copies all instance data of the to a given - . - - - - - The ID used to be referenced later. - - - - - The ID to use as the reference. - - - - - Gets a value indicating whether a reference to the type can be - defined. - - - Only types with an assigned - to it, can be referenced. - - - - - Gets the name of the datatype. - - - The name of the datatype. - - - - - Initializes all build attributes and child elements. - - - needs to maintain the order in which the - filters are specified in the build file. - - - - - Used to to instantiate and return the chain of stream based filters. - - The that is the source of input to the filter chain. - - The is the first - in the chain, which is based on a physical stream that feeds the chain. - - - The last in the chain. - - - - - Determines whether a given FilterChain is null or empty. - - - true if is null or empty; - otherwise, false. - - - The FilterChain to check. - - - - - The filters to apply. - - - - - The encoding to assume when filter-copying files. The default is - system's current ANSI code page. - - - - - Configurator that initializes filters in the order in which they've - been specified in the build file. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a physical . That is a reader based - on a stream. - - - Used by to represent a - based on a in the chain. - - - - - Parses NAnt properties and expressions - - - - This filter parses any NAnt properties or expressions found in its input, - inlining their values in its output. - - - Note: Due to limitations on buffering, expressions longer than 2048 - characters are not guaranteed to be expanded. - - Filters are intended to be used as a element of a . - - - Replace all properties with their corresponding values. - - - ]]> - - - - - - Holds data for expression expansion between input and output. - - - - - Called after construction and after properties are set. Allows - for filter initialization. - - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without advancing the current position in the stream. - - Char as an int or -1 if at the end of the stream - - - - Moves to the next character. - - - - - Refills the buffer, running our input through - .) - - - - - Determines whether we've passed the end of our data. - - - - - Replaces all occurrences of a given string in the original input with - user-supplied replacement string. - - - - This filter replaces all occurrences of a given string in the original - input stream with a user-supplied replacement string. By default string - comparisons are case sensitive but this can be changed by setting the - optional attribute to . - - - To use this filter specify the string to be replaced with the - attribute and the string to replace it with using the - attribute. - - - Filters are intended to be used as a element of a . - - - - - Replace all occurrences of "3.14" with "PI". - - - - ]]> - - - - - Replace all occurrences of "string", "String", etc. with "System.String". - - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without - advancing the current position in the stream. - - Peek currently is not supported. - - - Char as an int or -1 if at the end of the stream. - - - - - - Helper function used to search for the filter's traget string. If the string - is found the result is true. If the string was not found false is returned and - nonMatchingChars contains the characters that were read to determine if the - string is present. - - - - It is assumed the stream is positioned at the character after the first character - in the target string. - - - First character in target string - Ture if the stream ended while search for the string. - Characters that were read while searching for the string. - - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - Compares to characters taking into account the _ignoreCase flag. - - - - - - - - The string to be replaced. - - - - - The new value for the replaced string. - Am empty string is permissible. - - - - - Determines if case will be ignored. - The default is . - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Replaces tokens in the original input with user-supplied values. - - - - This filter replaces all token surrounded by a beginning and ending - token. The default beginning and ending tokens both default to '@'. The - optional and attributes - can be specified to change either token. By default string - comparisons are case sensitive but this can be changed by setting the - optional attribute to . - - - Tokens are specified by using the element. It is - possible to specify from 1 to n tokens and replacement values. Values can - be any valid NAnt expression. - - - Filters are intended to be used as a element of a . - - - - - Replace all occurrences of the string @DATE@ with the value of property - "TODAY". - - - - - - ]]> - - - - - Replace all occurrences of the string <DATE> with the value of - property "TODAY". - - - - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Reads the next character applying the filter logic. - - Char as an int or -1 if at the end of the stream - - - - Reads the next character applying the filter logic without - advancing the current position in the stream. - - Peek currently is not supported. - - - Char as an int or -1 if at the end of the stream. - - - - - Initialize the filter by setting its parameters. - - - - - Finds a token give that we are positioned at a beginning token character. Either a - token replacement is returned or the characters that were read looking for the token. - - A token was not found - A token was found by there is no replacement - The stream ended while looking for the token - Either the replacement token or the characters that were read looking for the token - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - Compares to characters taking into account. - - - - - - - - - Marks the beginning of a token. The default is "@". - - - - - Marks the end of a token. The default is "@". - - - - - Tokens and replacement values. - - - - - Determines if case will be ignored. - The default is . - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Converts tabs to spaces. - - - - The filter replaces tabs in a text file - with spaces. - - - Filters are intended to be used as a element of a . - - - - Replace all tabs with four spaces. - - - ]]> - - - - - - Construct that allows this filter to be chained to the one - in the parameter chainedReader. - - Filter that the filter will be chained to - - - - Retrieves the next character with moving the position in the stream. - This method is not implemented - - -1 if end of stream otherwise a character - - - - Retrieves the next character in the stream. - - -1 if end of stream otherwise a character - - - - Returns the next character in the stream replacing the specified character. Using the - allows for the same implementation for Read and Peek - - Delegate to acquire the next character. (Read/Peek) - Char as an int or -1 if at the end of the stream - - - - The number of spaces used when converting a tab. The default is - "8". - - - - - Delegate for Read and Peek. Allows the same implementation - to be used for both methods. - - - - - Functions to return information for a given assembly. - - - - - Gets or sets the that this functionset will - reference. - - - The that this functionset will reference. - - - - - Loads an assembly given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - The loaded assembly. - - is an empty . - is not found, or the module you are trying to load does not specify a filename extension. - is not a valid assembly. - An assembly or module was loaded twice with two different evidences, or the assembly name is longer than MAX_PATH characters. - - - - Loads an assembly given the long form of its name. - - The long form of the assembly name. - - The loaded assembly. - - is a . - is not found. - - - Determine the location of the Microsoft Access 11 Primary Interop - Assembly by loading it using its fully qualified name, and copy it - to the build directory. - - - - - ]]> - - - - - - Gets the full name of the assembly, also known as the display name. - - The assembly to get the full name for. - - The full name of the assembly, also known as the display name. - - - - - Gets an for the specified assembly. - - The assembly to get an for. - - An for the specified assembly. - - - - - - Gets the physical location, in codebase format, of the loaded file - that contains the manifest. - - The assembly to get the location for. - - The location of the specified assembly. - - - - - Functions that return information about an assembly's identity. - - - - - Gets the location of the assembly as a URL. - - The of the assembly. - - The location of the assembly as a URL. - - - - - - Gets the URI, including escape characters, that represents the codebase. - - The of the assembly. - - The URI, including escape characters, that represents the codebase. - - - - - - Gets the full name of the assembly, also known as the display name. - - The of the assembly. - - The full name of the assembly, also known as the display name. - - - - Output the full name of the nunit.framework assembly to the - build log. - - - - ]]> - - - - - - - Gets the simple, unencrypted name of the assembly. - - The of the assembly. - - The simple, unencrypted name of the assembly. - - - - Output the simple name of the nunit.framework assembly to - the build log. - - - - ]]> - - - - - - - Gets the version of the assembly. - - The of the assembly. - - The version of the assembly. - - - - Output the major version of the nunit.framework assembly - to the build log. - - - - ]]> - - - - - - - - Gets the for a given file. - - The assembly file for which to get the . - - An object representing the given file. - - is an empty . - does not exist. - is not a valid assembly. - - The assembly is not added to this domain. - - - - Output the full name of the nunit.framework assembly to the - build log. - - - - ]]> - - - - - - Converts the specified string representation of a logical value to - its equivalent. - - A string containing the value to convert. - - if is equivalent to - "True"; otherwise, . - - is not equivalent to or . - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - "True" if is , or - "False" if is . - - - - - Converts the argument to an integer. - - value to be converted - converted to integer. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to double - - The value to be converted. - converted to double. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to a string. - - The value to be converted. - - converted to string. The function fails - with an exception when the conversion is not possible. - - - Named method ConvertToString as a static ToString method would break - CLS compliance. - - - - - Converts the argument to a datetime. - - value to be converted - converted to datetime. The function fails with an exception when the conversion is not possible. - - - - Converts the argument to a boolean - - The string value to be converted to boolean. Must be 'true' or 'false'. - - converted to boolean. The function fails - with an exception when the conversion is not possible. - - - - - Gets a that is the current local date and - time on this computer. - - - A whose value is the current date and time. - - - - - Gets the year component of the specified date. - - The date of which to get the year component. - - The year, between 1 and 9999. - - - - - Gets the month component of the specified date. - - The date of which to get the month component. - - The month, between 1 and 12. - - - - - Gets the day of the month represented by the specified date. - - The date of which to get the day of the month. - - The day value, between 1 and 31. - - - - - Gets the hour component of the specified date. - - The date of which to get the hour component. - - The hour, between 0 and 23. - - - - - Gets the minute component of the specified date. - - The date of which to get the minute component. - - The minute, between 0 and 59. - - - - - Gets the seconds component of the specified date. - - The date of which to get the seconds component. - - The seconds, between 0 and 59. - - - - - Gets the milliseconds component of the specified date. - - The date of which to get the milliseconds component. - - The millisecond, between 0 and 999. - - - - - Gets the number of ticks that represent the specified date. - - The date of which to get the number of ticks. - - The number of ticks that represent the date and time of the - specified date. - - - - - Gets the day of the week represented by the specified date. - - The date of which to get the day of the week. - - The day of the week, ranging from zero, indicating Sunday, to six, - indicating Saturday. - - - - - Gets the day of the year represented by the specified date. - - The date of which to get the day of the year. - - The day of the year, between 1 and 366. - - - - - Returns the number of days in the specified month of the specified - year. - - The year. - The month (a number ranging from 1 to 12). - - The number of days in for the specified - . - - is less than 1 or greater than 12. - - - - Returns an indication whether the specified year is a leap year. - - A 4-digit year. - - if is a leap year; - otherwise, . - - - - - Converts the specified string representation of a date and time to - its equivalent. - - A string containing a date and time to convert. - - A equivalent to the date and time contained - in . - - does not contain a valid string representation of a date and time. - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - A string representation of formatted using - the general format specifier ("G"). - - - is formatted with the - for the invariant culture. - - - - - Converts the specified to its equivalent - string representation. - - A to convert. - A format string. - - A string representation of formatted - using the specified format - - - is formatted with the - for the invariant culture. - - - - - Groups a set of functions for dealing with directories. - - - - - Returns the creation date and time of the specified directory. - - The directory for which to obtain creation date and time information. - - The creation date and time of the specified directory. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified directory was last written to. - - The directory for which to obtain write date and time information. - - The date and time the specified directory was last written to. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified directory was last accessed. - - The directory for which to obtain access date and time information. - - The date and time the specified directory was last accessed. - - The specified directory does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Gets the current working directory. - - - A containing the path of the current working - directory. - - - - - Retrieves the parent directory of the specified path. - - The path for which to retrieve the parent directory. - - The parent directory, or an empty if - is the root directory, including the root - of a UNC server or share name. - - The directory specified by is read-only. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The specified path was not found. - - - Copy "readme.txt" from the current working directory to - its parent directory. - - - - - - ]]> - - - - - - Returns the volume information, root information, or both for the - specified path. - - The path for which to retrieve the parent directory. - - A string containing the volume information, root information, or - both for the specified path. - - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Determines whether the given path refers to an existing directory - on disk. - - The path to test. - - if refers to an - existing directory; otherwise, . - - - Remove directory "test", if it exists. - - - ]]> - - - - - - Functions for requesting information from DNS. - - - - - Gets the host name of the local computer. - - - A string that contains the DNS host name of the local computer. - - An error is encountered when resolving the local host name. - - - - Converts the specified string representation of a number to its - double-precision floating point number equivalent. - - A string containing a number to convert. - - A double-precision floating point number equivalent to the numeric - value or symbol specified in . - - is not a number in a valid format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of formatted - using the general format specifier ("G"). - - - is formatted with the - for the invariant culture. - - - - - Provide information about the current environment and platform. - - - - - Gets the path to the system special folder identified by the - specified enumeration. - - An enumerated constant that identifies a system special folder. - - The path to the specified system special folder, if that folder - physically exists on your computer; otherwise, the empty string (""). - - is not a member of . - - - Copy "out.log" from the project base directory to the - program files directory. - - - - ]]> - - - - - - Gets the NetBIOS name of this local computer. - - - The NetBIOS name of this local computer. - - The name of this computer cannot be obtained. - - - - Gets an object that represents the - current operating system. - - - An object that contains the current - platform identifier and version number. - - - - Output string representation of the current operating system. - - - - ]]> - - If the operating system is Windows 2000, the output is: - - Microsoft Windows NT 5.0.2195.0 - - - - - - - Gets the user name of the person who started the current thread. - - - The name of the person logged on to the system who started the - current thread. - - - - Modify the home directory of the current user on unix-based systems. - - - - - - - - ]]> - - - - - - Returns the value of the specified environment variable. - - The environment variable of which the value should be returned. - - The value of the specified environment variable. - - Environment variable does not exist. - - - - Gets a value indicating whether the specified environment variable - exists. - - The environment variable that should be checked. - - if the environment variable exists; otherwise, - . - - - - Execute a set of tasks only if the "BUILD_DEBUG" environment - variable is set. - - - - ... - - ]]> - - - - - - Gets a object that describes the major, - minor, build, and revision numbers of the Common Language Runtime. - - - A Version object. - - - Output the major version of the CLR. - - - ]]> - - - - - - Gets the newline string defined for this environment. - - - A string containing CRLF for non-Unix platforms, or LF for Unix - platforms. - - - Output two lines in a log file. - - - ]]> - - - - - - Groups a set of functions for dealing with files. - - - - - Returns the creation date and time of the specified file. - - The file for which to obtain creation date and time information. - - The creation date and time of the specified file. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Returns the date and time the specified file was last written to. - - The file for which to obtain write date and time information. - - The date and time the specified file was last written to. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - - - - Returns the date and time the specified file was last accessed. - - The file for which to obtain access date and time information. - - The date and time the specified file was last accessed. - - The specified file does not exist. - is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both exceed the system-defined maximum length. - The parameter is in an invalid format. - - - - Determines whether the specified file exists. - - The file to check. - - if refers to an - existing file; otherwise, . - - - Execute a set of tasks, if file "output.xml" does not exist. - - - ... - - ]]> - - - - - - Determines whether is more or equal - up-to-date than . - - The file to check against the target file. - The file for which we want to determine the status. - - if is more - or equal up-to-date than ; otherwise, - . - - or is a zero-length string, contains only white space, or contains one or more invalid characters. - The specified path, file name, or both of either or exceed the system-defined maximum length. - - - - Gets the length of the file. - - filename - - Length in bytes, of the file named . - - The file specified cannot be found. - - - - Checks if a given file is an assembly. - - The name or path of the file to be checked. - True if the file is a valid assembly, false if it's not or if the assembly seems corrupted (invalid headers or metadata). - is a null . - is an empty . - is not found, or the file you are trying to check does not specify a filename extension. - The caller does not have path discovery permission. - - - - Functions that provide version information for a physical file on disk. - - - - - Returns a representing the version - information associated with the specified file. - - The file to retrieve the version information for. - - A containing information about the file. - - The file specified cannot be found. - - - - Gets the name of the company that produced the file. - - A instance containing version information about a file. - - The name of the company that produced the file. - - - - - Gets the file version of a file. - - A instance containing version information about a file. - - The file version of a file. - - - - - - Gets the name of the product the file is distributed with. - - A instance containing version information about a file. - - The name of the product the file is distributed with. - - - - - Gets the product version of a file. - - A instance containing version information about a file. - - The product version of a file. - - - - - - Checks whether the specified framework exists, and is valid. - - The framework to test. - - if the specified framework exists ; otherwise, - . - - - - - Checks whether the SDK for the specified framework is installed. - - The framework to test. - - if the SDK for specified framework is installed; - otherwise, . - - - - - - - Gets the identifier of the current target framework. - - - The identifier of the current target framework. - - - - - Gets the identifier of the runtime framework. - - - The identifier of the runtime framework. - - - - - Gets the family of the specified framework. - - The framework of which the family should be returned. - - The family of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the version of the current target framework. - - - The version of the current target framework. - - - - - - Gets the version of the specified framework. - - The framework of which the version should be returned. - - The version of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the description of the current target framework. - - - The description of the current target framework. - - - - - - Gets the description of the specified framework. - - The framework of which the description should be returned. - - The description of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the Common Language Runtime version of the current target - framework. - - - The Common Language Runtime version of the current target framework. - - - - - - Gets the Common Language Runtime version of the specified framework. - - The framework of which the Common Language Runtime version should be returned. - - The Common Language Runtime version of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the framework directory of the specified framework. - - The framework of which the framework directory should be returned. - - The framework directory of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the assembly directory of the specified framework. - - The framework of which the assembly directory should be returned. - - The assembly directory of the specified framework. - - is not a valid framework identifier. - - - - - - Gets the SDK directory of the specified framework. - - The framework of which the SDK directory should be returned. - - The SDK directory of the specified framework, or an empty - if the SDK of the specified framework is not - installed. - - is not a valid framework identifier. - - - - - - Gets the absolute path of the specified tool for the current - target framework. - - The file name of the tool to search for. - - The absolute path to if found in one of the - configured tool paths; otherwise, an error is reported. - - could not be found in the configured tool paths. - - - The configured tool paths are scanned in the order in which they - are defined in the framework configuration. - - - The file name of the tool to search should include the extension. - - - - Use gacutil to install an assembly in the GAC. - - - - - - ]]> - - - - - - Gets the runtime engine of the specified framework. - - The framework of which the runtime engine should be returned. - - The full path to the runtime engine of the specified framework, or - an empty if no runtime engine is defined - for the specified framework. - - is not a valid framework identifier. - - - - - - Gets a comma-separated list of frameworks filtered by the specified - . - - A bitwise combination of values that filter the frameworks to retrieve. - - A comma-separated list of frameworks filtered by the specified - , sorted on name. - - - - Define a build-all target that executes the build - target once for each installed framework targeting compact - devices. - - - - - - - -
- - - ... - - ]]> - - - - - - Checks whether the specified framework is valid. - - The framework to check. - is not a valid framework identifier. - - - - Converts the specified string representation of a number to its - 32-bit signed integer equivalent. - - A string containing a number to convert. - - A 32-bit signed integer equivalent to the number contained in - . - - is not of the correct format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - The string representation of , consisting - of a negative sign if the value is negative, and a sequence of - digits ranging from 0 to 9 with no leading zeroes. - - - is formatted with the - for the invariant culture. - - - - - Converts the specified string representation of a number to its - 64-bit signed integer equivalent. - - A string containing a number to convert. - - A 64-bit signed integer equivalent to the number contained in - . - - is not of the correct format. - represents a number less than or greater than . - - The for the invariant culture is - used to supply formatting information about . - - - - - Converts the specified to its equivalent string - representation. - - A to convert. - - The string representation of , consisting - of a negative sign if the value is negative, and a sequence of - digits ranging from 0 to 9 with no leading zeroes. - - - is formatted with the - for the invariant culture. - - - - - Rounds the value to the nearest whole number - - Number to be rounded, can be anything convertible to a double. - - Rounded value. - - - - - Returns the largest whole number less than or equal to the specified - number. - - value to be , can be anything convertible to a double - - The largest whole number less than or equal to the specified number. - - - - - Returns the smallest whole number greater than or equal to the specified number - - value - - The smallest whole number greater than or equal to the specified number. - - - - - Returns the absolute value of the specified number - - value to take the absolute value from - - when is greater - than or equal to zero; otherwise, -. - - - - - Gets the base directory of the appdomain in which NAnt is running. - - - The base directory of the appdomain in which NAnt is running. - - - - - Gets the NAnt assembly. - - - The NAnt assembly. - - - - - Searches the probing paths of the current target framework for the - specified file. - - The name of the file to search for. - - The absolute path to if found in one of the - configured probing; otherwise, an error is reported. - - could not be found in the configured probing paths. - - - The (relative) probing paths are resolved relative to the base - directory of the appdomain in which NAnt is running. - - - The configured probing paths are scanned recursively in the order - in which they are defined in the framework configuration. - - - The file name to search should include the extension. - - - - - Compile an assembly referencing the nunit.framework assembly - for the current target framework that is shipped as part of the - NAnt distribution. - - - - - - - - - - - - ]]> - - - - - - Searches the probing paths of the current target framework for the - specified file. - - The directory to use a base directory for the probing paths. - The name of the file to search for. - - The absolute path to if found in one of the - configured probing; otherwise, an error is reported. - - could not be found in the configured probing paths. - - - The (relative) probing paths are resolved relative to the specified - base directory. - - - The configured probing paths are scanned recursively in the order - in which they are defined in the framework configuration. - - - The file name to search should include the extension. - - - - - Compile an assembly referencing the nunit.framework assembly - for the current target framework that is shipped as part of the - NAnt distribution. - - - - - - - - - - - - ]]> - - - - - - Gets the name of the current project. - - - The name of the current project, or an empty - if no name is specified in the build file. - - - - - Gets the form of the build file. - - - The form of the build file, or - an empty if the project is not file backed. - - - - - Gets the local path to the build file. - - - The local path of the build file, or an empty - if the project is not file backed. - - - - - Gets the name of the target that will be executed when no other - build targets are specified. - - - The name of the target that will be executed when no other build - targets are specified, or an empty if no - default target is defined for the project. - - - - - Gets the base directory of the current project. - - - The base directory of the current project. - - - - - Checks whether the specified target exists. - - The target to test. - - if the specified target exists; otherwise, - . - - - - Execute target "clean", if it exists. - - - - - - ]]> - - - - - - Gets the name of the target being executed. - - - A that contains the name of the target - being executed. - - No target is being executed. - - - - Checks whether the specified target has already been executed. - - The target to test. - - if the specified target has already been - executed; otherwise, . - - Target does not exist. - - - - Checks whether the specified task exists. - - The task to test. - - if the specified task exists; otherwise, - . - - - - - Returns the from which the specified task - was loaded. - - The name of the task to get the of. - - The from which the specified task was loaded. - - Task is not available. - - - - Checks whether the specified property exists. - - The property to test. - - if the specified property exists; otherwise, - . - - - - Execute a set of tasks if the "build.debug" property - exists. - - - - - - - - ]]> - - - - - - Checks whether the specified property is read-only. - - The property to test. - - if the specified property is read-only; - otherwise, . - - - Check whether the "debug" property is read-only. - property::is-readonly('debug') - - Property has not been set. - - - - Checks whether the specified property is a dynamic property. - - The property to test. - - if the specified property is a dynamic - property; otherwise, . - - Property has not been set. - - - Check whether the "debug" property is a dynamic property. - - property::is-dynamic('debug') - - - - - Gets the name of the platform on which NAnt is running. - - - The name of the platform on which NAnt is running. - - - - - Checks whether NAnt is running on Windows (and not just 32-bit Windows - as the name may lead you to believe). - - - if NAnt is running on Windows; - otherwise, . - - - - - Checks whether NAnt is running on Windows. - - - if NAnt is running on Windows; - otherwise, . - - - - - Checks whether NAnt is running on Unix. - - - if NAnt is running on Unix; - otherwise, . - - - - - Functions that return information about an operating system. - - - - - Gets a value that identifies the operating - system platform. - - The operating system. - - value that identifies the operating system - platform. - - - - - - Gets a object that identifies this operating - system. - - The operating system. - - A object that describes the major version, - minor version, build, and revision of the operating system. - - - - - - Converts the value of the specified operating system to its equivalent - representation. - - The operating system. - - The representation of - . - - - - Output string representation of the current operating system. - - - - ]]> - - If the operating system is Windows 2000, the output is: - - Microsoft Windows NT 5.0.2195.0 - - - - - - - Returns the fully qualified path. - - The file or directory for which to obtain absolute path information. - - A string containing the fully qualified location of , - such as "C:\MyFile.txt". - - is a zero-length string, contains only white space, or contains one or more invalid characters. - contains a colon (":"). - The specified path, file name, or both exceed the system-defined maximum length. - - - - Combines two paths. - - first path - second path - - A string containing the combined paths. If one of the specified paths - is a zero-length string, this method returns the other path. If - contains an absolute path, this method - returns . - - or contain one or more invalid characters. - - - - Changes the extension of the path string. - - The path information to modify. The path cannot contain any of the characters - defined in InvalidPathChars. - The new extension (with a leading period). Specify a null reference - to remove an existing extension from . - - - A string containing the modified path information. - - - On Windows-based desktop platforms, if is - an empty , the path information is returned - unmodified. If has no extension, the returned - path contains - appended to the end of . - - - - For more information see the documentation. - - contains one or more invalid characters. - - - - Returns the directory information for the specified path string. - - The path of a file or directory. - - A containing directory information for - , or an empty if - denotes a root directory, or does not - contain directory information. - - contains invalid characters, is empty, or contains only white spaces. - - - - Returns the extension for the specified path string. - - The path string from which to get the extension. - - A containing the extension of the specified - (including the "."), or an empty - if does not have - extension information. - - contains one or more invalid characters. - - - - Returns the filename for the specified path string. - - The path string from which to obtain the file name and extension. - - - A consisting of the characters after the last - directory character in path. - - - If the last character of is a directory or - volume separator character, an empty is returned. - - - contains one or more invalid characters. - - - - Returns the filename without extension for the specified path string. - - The path of the file. - - A containing the returned - by , minus the last period (.) and all - characters following it. - - contains one or more invalid characters. - - - - Gets the root directory of the specified path. - - The path from which to obtain root directory information. - - A containing the root directory of - , such as "C:\", or an empty - if does not contain root directory information. - - contains invalid characters, or is empty. - - - - Returns a uniquely named zero-byte temporary file on disk and returns the full path to that file. - - - A containing the name of the temporary file. - - - - - Gets the path to the temporary directory. - - - A containing the path information of a - temporary directory. - - - - - Determines whether a path string includes an extension. - - The path to search for an extension. - - . if the characters that follow the last - directory separator or volume separator in the - include a period (.) followed by one or more characters; - otherwise, . - - contains one or more invalid characters. - - - - Determines whether a path string is absolute. - - The path to test. - - if path contains an absolute ; - otherwise, . - - contains one or more invalid characters. - - - - Gets the value of a variable for the specified package. - - The package for which the variable should be retrieved. - The name of the variable. - - The value of variable for the specified - package. - - pkg-config could not be started. - does not exist. - - - - Gets the link flags required to compile the package, including all - its dependencies. - - The package for which the link flags should be retrieved. - - The link flags required to compile the package. - - pkg-config could not be started. - does not exist. - - - - Gets the compile flags required to compile the package, including all - its dependencies. - - The package for which the compile flags should be retrieved. - - The pre-processor and compile flags required to compile the package. - - pkg-config could not be started. - does not exist. - - - - Determines the version of the given package. - - The package to get the version of. - - The version of the given package. - - pkg-config could not be started. - does not exist. - - - - Determines whether the given package is at least version - . - - The package to check. - The version the package should at least have. - - if the given package is at least version - ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is exactly version - . - - The package to check. - The version the package should have. - - if the given package is exactly version - ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is at no newer than version - . - - The package to check. - The version the package should maximum have. - - if the given package is at no newer than - version ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package is between two versions. - - The package to check. - The version the package should at least have. - The version the package should maximum have. - - if the given package is between - and ; otherwise, . - - pkg-config could not be started. - - - - Determines whether the given package exists. - - The package to check. - - if the package exists; otherwise, - . - - pkg-config could not be started. - - - - Runs pkg-config with the specified arguments and returns a - based on the exit code. - - The arguments to pass to pkg-config. - - if pkg-config exited with exit code 0; - otherwise, - - - - - Runs pkg-config with the specified arguments and returns the result - as a . - - The arguments to pass to pkg-config. - - The result of running pkg-config with the specified arguments. - - - - - Factory method to return a new instance of ExecTask - - - - - - - Returns the length of the specified string. - - input string - - The string's length. - - - string::get-length('foo') ==> 3 - - - string::get-length('') ==> 0 - - - - - Returns a substring of the specified string. - - input string - position of the start of the substring - the length of the substring - - - If the is greater than zero, the - function returns a substring starting at character position - with a length of - characters. - - - If the is equal to zero, the function - returns an empty string. - - - or is less than zero. - is greater than the length of . - plus indicates a position not within . - - string::substring('testing string', 0, 4) ==> 'test' - - - string::substring('testing string', 8, 3) ==> 'str' - - - string::substring('testing string', 8, 0) ==> '' - - - string::substring('testing string', -1, 5) ==> ERROR - - - string::substring('testing string', 8, -1) ==> ERROR - - - string::substring('testing string', 5, 17) ==> ERROR - - - - - Tests whether the specified string starts with the specified prefix - string. - - test string - prefix string - - when is a prefix for - the string . Meaning, the characters at the - beginning of are identical to - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::starts-with('testing string', 'test') ==> true - - - string::starts-with('testing string', 'testing') ==> true - - - string::starts-with('testing string', 'string') ==> false - - - string::starts-with('test', 'testing string') ==> false - - - - - Tests whether the specified string ends with the specified suffix - string. - - test string - suffix string - - when is a suffix for - the string . Meaning, the characters at the - end of are identical to - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::ends-with('testing string', 'string') ==> true - - - string::ends-with('testing string', '') ==> true - - - string::ends-with('testing string', 'bring') ==> false - - - string::ends-with('string', 'testing string') ==> false - - - - - Returns the specified string converted to lowercase. - - input string - - The string in lowercase. - - - The casing rules of the invariant culture are used to convert the - to lowercase. - - - string::to-lower('testing string') ==> 'testing string' - - - string::to-lower('Testing String') ==> 'testing string' - - - string::to-lower('Test 123') ==> 'test 123' - - - - - Returns the specified string converted to uppercase. - - input string - - The string in uppercase. - - - The casing rules of the invariant culture are used to convert the - to uppercase. - - - string::to-upper('testing string') ==> 'TESTING STRING' - - - string::to-upper('Testing String') ==> 'TESTING STRING' - - - string::to-upper('Test 123') ==> 'TEST 123' - - - - - Returns a string corresponding to the replacement of a given string - with another in the specified string. - - input string - A to be replaced. - A to replace all occurrences of . - - A equivalent to but - with all instances of replaced with - . - - is an empty string. - - This function performs a word (case-sensitive and culture-sensitive) - search to find . - - - string::replace('testing string', 'test', 'winn') ==> 'winning string' - - - string::replace('testing string', 'foo', 'winn') ==> 'testing string' - - - string::replace('testing string', 'ing', '') ==> 'test str' - - - string::replace('banana', 'ana', 'ana') ==> 'banana' - - - - - Tests whether the specified string contains the given search string. - - The string to search. - The string to locate within . - - if is found in - ; otherwise, . - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::contains('testing string', 'test') ==> true - - - string::contains('testing string', '') ==> true - - - string::contains('testing string', 'Test') ==> false - - - string::contains('testing string', 'foo') ==> false - - - - - Returns the position of the first occurrence in the specified string - of the given search string. - - The string to search. - The string to locate within . - - - The lowest-index position of in - if it is found, or -1 if - does not contain . - - - If is an empty string, the return value - will always be 0. - - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::index-of('testing string', 'test') ==> 0 - - - string::index-of('testing string', '') ==> 0 - - - string::index-of('testing string', 'Test') ==> -1 - - - string::index-of('testing string', 'ing') ==> 4 - - - - - Returns the position of the last occurrence in the specified string - of the given search string. - - The string to search. - The string to locate within . - - - The highest-index position of in - if it is found, or -1 if - does not contain . - - - If is an empty string, the return value - is the last index position in . - - - - This function performs a case-sensitive word search using the - invariant culture. - - - string::last-index-of('testing string', 'test') ==> 0 - - - string::last-index-of('testing string', '') ==> 13 - - - string::last-index-of('testing string', 'Test') ==> -1 - - - string::last-index-of('testing string', 'ing') ==> 11 - - - - - Returns the given string left-padded to the given length. - - The that needs to be left-padded. - The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters. - A Unicode padding character. - - If the length of is at least - , then a new identical - to is returned. Otherwise, - will be padded on the left with as many - characters as needed to create a length of . - - is less than zero. - - Note that only the first character of - will be used when padding the result. - - - string::pad-left('test', 10, ' ') ==> ' test' - - - string::pad-left('test', 10, 'test') ==> 'tttttttest' - - - string::pad-left('test', 3, ' ') ==> 'test' - - - string::pad-left('test', -4, ' ') ==> ERROR - - - - - Returns the given string right-padded to the given length. - - The that needs to be right-padded. - The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters. - A Unicode padding character. - - If the length of is at least - , then a new identical - to is returned. Otherwise, - will be padded on the right with as many - characters as needed to create a length of . - - is less than zero. - - Note that only the first character of - will be used when padding the result. - - - string::pad-right('test', 10, ' ') ==> 'test ' - - - string::pad-right('test', 10, 'abcd') ==> 'testaaaaaa' - - - string::pad-right('test', 3, ' ') ==> 'test' - - - string::pad-right('test', -3, ' ') ==> ERROR - - - - - Returns the given string trimmed of whitespace. - - input string - - The string with any leading or trailing - white space characters removed. - - - string::trim(' test ') ==> 'test' - - - string::trim('\t\tfoo \r\n') ==> 'foo' - - - - - Returns the given string trimmed of leading whitespace. - - input string - - The string with any leading - whites pace characters removed. - - - string::trim-start(' test ') ==> 'test ' - - - string::trim-start('\t\tfoo \r\n') ==> 'foo \r\n' - - - - - Returns the given string trimmed of trailing whitespace. - - input string - - The string with any trailing - white space characters removed. - - - string::trim-end(' test ') ==> ' test' - - - string::trim-end('\t\tfoo \r\n') ==> '\t\tfoo' - - - - - Returns the total number of days represented by the specified - , expressed in whole and fractional days. - - A . - - The total number of days represented by the given . - - - - - Returns the total number of hours represented by the specified - , expressed in whole and fractional hours. - - A . - - The total number of hours represented by the given . - - - - - Returns the total number of minutes represented by the specified - , expressed in whole and fractional minutes. - - A . - - The total number of minutes represented by the given . - - - - - Returns the total number of seconds represented by the specified - , expressed in whole and fractional seconds. - - A . - - The total number of seconds represented by the given . - - - - - Returns the total number of milliseconds represented by the specified - , expressed in whole and fractional milliseconds. - - A . - - The total number of milliseconds represented by the given - . - - - - - Returns the number of whole days represented by the specified - . - - A . - - The number of whole days represented by the given - . - - - - Remove all files that have not been modified in the last 7 days from directory "binaries". - - - - - - - ]]> - - - - - - Returns the number of whole hours represented by the specified - . - - A . - - The number of whole hours represented by the given - . - - - - - Returns the number of whole minutes represented by the specified - . - - A . - - The number of whole minutes represented by the given - . - - - - - Returns the number of whole seconds represented by the specified - . - - A . - - The number of whole seconds represented by the given - . - - - - - Returns the number of whole milliseconds represented by the specified - . - - A . - - The number of whole milliseconds represented by the given - . - - - - - Returns the number of ticks contained in the specified - . - - A . - - The number of ticks contained in the given . - - - - - Returns a that represents a specified number - of days, where the specification is accurate to the nearest millisecond. - - A number of days, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of hours, where the specification is accurate to the nearest - millisecond. - - A number of hours, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of minutes, where the specification is accurate to the nearest - millisecond. - - A number of minutes, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of seconds, where the specification is accurate to the nearest - millisecond. - - A number of seconds, accurate to the nearest millisecond. - - A that represents . - - - - - Returns a that represents a specified number - of milliseconds. - - A number of milliseconds. - - A that represents . - - - - - Returns a that represents a specified time, - where the specification is in units of ticks. - - A number of ticks that represent a time. - - A that represents . - - - - - Constructs a from a time indicated by a - specified string. - - A string. - - A that corresponds to . - - has an invalid format. - At least one of the hours, minutes, or seconds components is outside its valid range. - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of . The format - of the return value is of the form: [-][d.]hh:mm:ss[.ff]. - - - - - Gets the value of the major component of a given version. - - A version. - - The major version number. - - - - - - - - Gets the value of the minor component of a given version. - - A version. - - The minor version number. - - - - - - - - Gets the value of the build component of a given version. - - A version. - - The build number, or -1 if the build number is undefined. - - - - - - - - Gets the value of the revision component of a given version. - - A version. - - The revision number, or -1 if the revision number is undefined. - - - - - - - - Converts the specified string representation of a version to - its equivalent. - - A string containing the major, minor, build, and revision numbers, where each number is delimited with a period character ('.'). - - A instance representing the specified - . - - has fewer than two components or more than four components. - A major, minor, build, or revision component is less than zero. - At least one component of does not parse to a decimal integer. - - - - Converts the specified to its equivalent - string representation. - - A to convert. - - The string representation of the values of the major, minor, build, - and revision components of the specified . - - - - - - - - Changes the file attributes of a file or set of files and directories. - - - - does not have the concept of turning - attributes off. Instead you specify all the attributes that you want - turned on and the rest are turned off by default. - - - Refer to the enumeration in the .NET SDK - for more information about file attributes. - - - - - Set the read-only file attribute for the specified file in - the project directory. - - - - ]]> - - - - - Set the normal file attribute for the specified file. - - - - ]]> - - - - - Set the normal file attribute for all executable files in - the current project directory and sub-directories. - - - - - - - - - ]]> - - - - - - Provides the abstract base class for tasks. - - - A task is a piece of code that can be executed. - - - - - Executes the task unless it is skipped. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - - The actual logging is delegated to the project. - - - If the attribute is set on the task and a - message is logged with level , the - priority of the message will be increased to - when the threshold of the build log is . - - - This will allow individual tasks to run in verbose mode while - the build log itself is still configured with threshold - . - - - The threshold of the project is not taken into account to determine - whether a message should be passed to the logging infrastructure, - as build listeners might be interested in receiving all messages. - - - - - - Logs a formatted message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - - The actual logging is delegated to the project. - - - If the attribute is set on the task and a - message is logged with level , the - priority of the message will be increased to . - when the threshold of the build log is . - - - This will allow individual tasks to run in verbose mode while - the build log itself is still configured with threshold - . - - - - - - Determines whether build output is enabled for the given - . - - The to check. - - if messages with the given - should be passed on to the logging infrastructure; otherwise, - . - - - The threshold of the project is not taken into account to determine - whether a message should be passed to the logging infrastructure, - as build listeners might be interested in receiving all messages. - - - - - Initializes the configuration of the task using configuration - settings retrieved from the NAnt configuration file. - - - TO-DO : Remove this temporary hack when a permanent solution is - available for loading the default values from the configuration - file if a build element is constructed from code. - - - - Initializes the task. - - - Initializes the task. - - - Executes the task. - - - - Locates the XML node for the specified attribute in either the - configuration section of the extension assembly or the.project. - - The name of attribute for which the XML configuration node should be located. - The framework to use to obtain framework specific information, or if no framework specific information should be used. - - The XML configuration node for the specified attribute, or - if no corresponding XML node could be - located. - - - If there's a valid current framework, the configuration section for - that framework will first be searched. If no corresponding - configuration node can be located in that section, the framework-neutral - section of the project configuration node will be searched. - - - - - Determines if task failure stops the build, or is just reported. - The default is . - - - - - Determines whether the task should report detailed build log messages. - The default is . - - - - - If then the task will be executed; otherwise, - skipped. The default is . - - - - - Opposite of . If - then the task will be executed; otherwise, skipped. The default is - . - - - - - The name of the task. - - - - - The prefix used when sending messages to the log. - - - - - Gets or sets the log threshold for this . By - default the threshold of a task is , - causing no messages to be filtered in the task itself. - - - The log threshold level for this . - - - When the threshold of a is higher than the - threshold of the , then all messages will - still be delivered to the build listeners. - - - - - Returns the TaskBuilder used to construct an instance of this - . - - - - - The name of the file which will have its attributes set. This is - provided as an alternate to using the task's fileset. - - - - - All the matching files and directories in this fileset will have - their attributes set. - - - - - Set the archive attribute. The default is . - - - - - Set the hidden attribute. The default is . - - - - - Set the normal file attributes. This attribute is only valid if used - alone. The default is . - - - - - Set the read-only attribute. The default is . - - - - - Set the system attribute. The default is . - - - - - Checks if a resource is available at runtime. - - - - The specified property is set to if the - requested resource is available at runtime, and - if the resource is not available. - - - we advise you to use the following functions instead: - - - - Function - Description - - - - Determines whether the specified file exists. - - - - Determines whether the given path refers to an existing directory on disk. - - - - Checks whether the specified framework exists.. - - - - Checks whether the SDK for the specified framework is installed. - - - - - - Sets the myfile.present property to if the - file is available on the filesystem and if the - file is not available. - - - - ]]> - - - - - Sets the build.dir.present property to - if the directory is available on the filesystem and - if the directory is not available. - - - - ]]> - - - - - Sets the mono-0.21.framework.present property to - if the Mono 0.21 framework is available on the current system and - if the framework is not available. - - - - ]]> - - - - - Sets the net-1.1.frameworksdk.present property to - if the .NET 1.1 Framework SDK is available on the current system and - if the SDK is not available. - - - - ]]> - - - - - - Executes the task. - - - - Sets the property identified by to - when the resource exists and to - when the resource doesn't exist. - - - The availability of the resource could not be evaluated. - - - - Evaluates the availability of a resource. - - - if the resource is available; otherwise, - . - - The availability of the resource could not be evaluated. - - - - Checks if the file specified in the property is - available on the filesystem. - - - when the file exists; otherwise, . - - - - - Checks if the directory specified in the - property is available on the filesystem. - - - when the directory exists; otherwise, . - - - - - Checks if the framework specified in the - property is available on the current system. - - - when the framework is available; otherwise, - . - - - - - Checks if the SDK for the framework specified in the - property is available on the current system. - - - when the SDK for the specified framework is - available; otherwise, . - - - - - The resource which must be available. - - - - - The type of resource which must be present. - - - - - The property that must be set if the resource is available. - - - - - Defines the possible resource checks. - - - - - Determines whether a given file exists. - - - - - Determines whether a given directory exists. - - - - - Determines whether a given framework is available. - - - - - Determines whether a given SDK is available. - - - - - Calls a NAnt target in the current project. - - - - When the is used to execute a target, both that - target and all its dependent targets will be re-executed. - - - To avoid dependent targets from being executed more than once, two - options are available: - - - - - Add an "unless" attribute with value "${target::has-executed('<target name>')}" - to the dependent targets. - - - - - Set the attribute on the - to (recommended). - - - - - - - Call the target "build". - - - - ]]> - - - - - This shows how a project could 'compile' a debug and release build - using a common compile target. - - - - - - - - - - - - - - - - - - ]]> - - - The parameter of the - defaults to , - causing the "init" target to be executed for both - the "debug" and "release" build. - - - This results in the following build log: - - - build: - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = false - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = true - - BUILD SUCCEEDED - - - If the "init" should only be executed once, set the - attribute of the - to . - - - The build log would then look like this: - - - build: - - init: - - [echo] initializing - - compile: - - [echo] compiling with debug = false - - compile: - - [echo] compiling with debug = true - - BUILD SUCCEEDED - - - - - - Executes the specified target. - - - - - Makes sure the is not calling its own - parent. - - - - - NAnt target to call. - - - - - Force an execute even if the target has already been executed. The - default is . - - - - - Execute the specified targets dependencies -- even if they have been - previously executed. The default is . - - - - - - Executes an alternate set of task or type definition depending on - conditions that are individually set on each group. - - - - - The selects one among a number of possible - alternatives. It consists of a sequence of <when> elements - followed by an optional <otherwise> element. - - - Each <when> element has a single attribute, test, which - specifies an expression. The content of the <when> and - <otherwise> elements is a set of nested tasks. - - - The content of the first, and only the first, <when> - element whose test is is executed. If no - <when> element is , the - content of the <otherwise> element is executed. - If no <when> element is , and no - <otherwise> element is present, nothing is done. - - - - - Execute alternate set of tasks depending on the configuration being - built. - - - - - - ... - - - - ... - - - Build configuration '${build.config}' is not supported! - - - ]]> - - - - - Define a sources patternset holding an alternate set of patterns - depending on the configuration being built. - - - - - - - - - - - - - - - - Build configuration '${build.config}' is not supported! - - - ]]> - - - - - - One or more alternative sets of tasks to execute. - - The set of tasks to add. - - - - The set of tasks to execute if none of the - elements are . - - - - - Gets a value indicating whether a fallback element is defined. - - - if a fallback element is defined; otherwise, - . - - - - - Groups a set of tasks to execute when a condition is met. - - - - - Executes embedded tasks/elements in the order in which they are defined. - - - - - Creates and executes the embedded (child XML nodes) elements. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was use to - initialize the element. - - - , as a is - responsable for creating tasks from the nested build elements. - - - - - Used to test arbitrary boolean expression. - - - - - Copies a file, a directory, or set of files to a new file or directory. - - - - Files are only copied if the source file is newer than the destination - file, or if the destination file does not exist. However, you can - explicitly overwrite files with the attribute. - - - Entire directory structures can be copied to a new location. For this - to happen, the following criteria must be met: - - - - - Everything in the fileset is included - - - - - The directory structure is not flattened - - - - - Empty directories are included - - - - - Destination directory does not exist - - - - - If any of these items are not met, then the files within the source - directory will be copied over instead of the entire directory structure. - - - When a is used to select files or directories to - copy, the attribute must be set. Files that are - located under the base directory of the will - be copied to a directory under the destination directory matching the - path relative to the base directory of the , - unless the attribute is set to - . - - - Files that are not located under the the base directory of the - will be copied directly under to the destination - directory, regardless of the value of the - attribute. - -

Encoding

- - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the - appropriate byte order marks. - - - If you employ filters in your copy operation, you should limit the copy - to text files. Binary files will be corrupted by the copy operation. - -
- - - Copy a single file while changing its encoding from "latin1" to - "utf-8". - - - - ]]> - - - - Copy a set of files to a new directory. - - - - - - - ]]> - - - - - Copy a set of files to a directory, replacing @TITLE@ with - "Foo Bar" in all files. - - - - - - - - - - - - - ]]> - - - - - Copy an entire directory and its contents. - - - - - - ]]> - - -
- - - Initialize new instance of the . - - - - - Checks whether the task is initialized with valid attributes. - - - - - Executes the Copy task. - - A file that has to be copied does not exist or could not be copied. - - - - Actually does the file copies. - - - - - The file to copy. - - - - - The file to copy to. - - - - - The directory to copy to. - - - - - Overwrite existing files even if the destination files are newer. - The default is . - - - - - Ignore directory structure of source directory, copy all files into - a single directory, specified by the - attribute. The default is . - - - - - Copy any empty directories included in the . - The default is . - - - - - Used to select the files to copy. To use a , - the attribute must be set. - - - - - Chain of filters used to alter the file's content as it is copied. - - - - - The encoding to use when reading files. The default is the system's - current ANSI code page. - - - - - The encoding to use when writing the files. The default is - the encoding of the input file. - - - - - The set of files to perform a file operation on. - - - - FileCopyMap should now be considered a readonly hashtable. Any changes to - this property will not be taken into account during the file operation - task. To interact with the file operation, use the - property. - - - The key of the is the absolute path of - the destination file and the value is a - holding the path and last write time of the most recently updated - source file that is selected to be copied or moved to the - destination file. - - - On Windows, the is case-insensitive. - - - - - - Gets the operation map containing all the files/directories to - perform file operations on. - - - - The type of class for this object inherits from KeyedCollection - and is structured so that the key of this collection contains the - full path of the target file/location while the value contains - the object - with the operation details. - - - On Windows, the - is case-insensitive. - - - - - - Holds the absolute paths and last write time of a given file. - - - - - Initializes a new instance of the - class - for the specified . - - - A object containing - the full path and last write time of the file the object represents. - - - - - Initializes a new instance of the - class for the specified file and last write time. - - The absolute path of the file. - The last write time of the file. - - - - Gets the absolute path of the current file. - - - The absolute path of the current file. - - - - - Gets the time when the current file was last written to. - - - The time when the current file was last written to. - - - - - Provides methods and properties to properly manage file operations for - NAnt file system based tasks (such as CopyTask and MoveTask). - - - - - Initializes a new instance of the - class with the - source and target locations specified. - - - A object representing the file/location - where the file operation will start. - - - A object representing the file/location - where the file operation will end. - - - - - Normalizes the attributes of - . - - - - - Checks to see whether or not the full path of - - matches the full path of - . - - - is - used to check path equality. - - - true if both paths match; otherwise false. - - - - - Checks to see whether or not the full path of - - is identical to the full path of - . - - - The difference between this method and SourceEqualsTarget is - that the casing of the path is never ignored regardless of - operating system. - - - true if both paths are identical; otherwise false. - - - - - Updates the source of a given instance based on the - . - - If the LastWriteTime property of the - is greater than the LastWriteTime property of - , then - is - replaced with . - - - - The new to replace - the current - object. - - - - - Returns a that represents the current - . - - - A that represents the current - . - - - - - Checks to see if a given - target is considered outdated. - - - A used for comparison purposes - against . - - - The to check. - - - true if the target file is considered out of date; otherwise - false - - - - - Checks to see if the target directory does not exist or that - it does match the source directory name but not string casing. - - - Source directory to check against . - - - The target directory to validate. - - - true if the target directory does not exist or matches the source - directory name but not casing; otherwise false - - - - - Checks to see whether is a file type or - a directory type. - - - The FileSystemInfo type used to compare with. - - - The object to check. - - - true if is the same type as - ; otherwise, false. - - - - - Gets or sets the string comparer to use when comparing - the source path to the target path. - - - - - Gets the full path of - . - - - - - Gets the details of the source path. - - - - - Gets the type of - . - - - - - Gets the type of the file operation an instance of - represents. - - - - - Gets a value indicating whether - is - outdated. - - - true if - is - outdated (or simply a directory); otherwise, false. - - - - - Gets the full path of - . - - - - - Gets the details of the target path. - - - - - Gets the type of - . - - - - - A collection class used to track all of the - objects for - a given file operation task (such as the CopyTask or MoveTask). - - - - - The StringComparer used when comparing file paths. - - - - - Initializes a new instance of the - - class that uses the default string comparer. - - - - - Initializes a new instance of the - - class that uses the specified string comparer. - - - The string comparer to use when comparing keys in the - . - - - - - Determines whether the - contains the - specified key. - - - The key to locate in the - . - - - true if the - contains an element with the specified key; otherwise, false. - - - - - Counts the number of directory operations in a collection. - - - The number of directory operations performed by this collection. - - - - - Counts the number of file operations in a collection. - - - The number of file operations performed by this collection. - - - - - Converts the current instance of - to - the old style FileCopyMap hashtable. - - - The contents of - in a - new hashtable. - - - - - Extracts the key from the specified - element. - - - The from which to - extract the key. - - - The key for the specified - . - - - - - Inserts an element into the - at the - specified index. - - - The zero-based index at which item should be inserted. - - - The to insert. - - - - - Replaces the item at the specified index with the specified item. - - - The zero-based index of the item to be replaced. - - - The new item. - - - - - Used to identify the type of operation a given - represent. - - - - - Indicates that the operation is from file to file. - - - - - Indicates that the operation is from file to directory. - - - - - Indicates that the operation is from directory to directory. - - - - - Deletes a file, fileset or directory. - - - - Deletes either a single file, all files in a specified directory and - its sub-directories, or a set of files specified by one or more filesets. - - - If the or attribute is - set then the fileset contents will be ignored. To delete the files - in the fileset ommit the and - attributes in the <delete> element. - - - If the specified file or directory does not exist, no error is - reported. - - - Read-only files cannot be deleted. Use the - first to remove the read-only attribute. - - - - Delete a single file. - - - ]]> - - - - - Delete a directory and the contents within. If the directory does not - exist, no error is reported. - - - - ]]> - - - - - Delete a set of files. - - - - - - - - - ]]> - - - - - - Ensures the supplied attributes are valid. - - - - - The file to delete. - - - - - The directory to delete. - - - - - Remove any empty directories included in the . - The default is . - - - - - All the files in the file set will be deleted. - - - - - Controls whether to show the name of each deleted file or directory. - The default is . - - - - - An empty task that allows a build file to contain a description. - - - Set a description. - - This is a description. - ]]> - - - - - - Writes a message to the build log or a specified file. - - - - The message can be specified using the attribute - or as inline content. If neither is included - or the message contains - only whitespace - then an empty message will be emitted in the output. - - - Macros in the message will be expanded. - - - When writing to a file, the attribute is - ignored. - - - Since NAnt 0.86, a newline will no longer be implictly added when - writing a message to a file. - - - - - Writes a message with level to the build log. - - - - ]]> - - - - - Writes a two-line message to the build log using inline content. - - - First line - Second line - ]]> - - - - - Writes a two-line message to the build log using the attribute. - - - - ]]> - - - - - Writes a message with expanded macro to the build log. - - - - ]]> - - - - - Functionally equivalent to the previous example. - - - Base build directory = ${nant.project.basedir} - ]]> - - - - - Writes the previous message to a file in the project directory, - overwriting the file if it exists. - - - Base build directory = ${nant.project.basedir} - ]]> - - - - - - Outputs the message to the build log or the specified file. - - - - - The encoding to use when writing message to a file. The default is - UTF-8 encoding without a Byte Order Mark (BOM). - - - - - The message to output. - - - - - Gets or sets the inline content that should be output. - - - The inline content that should be output. - - - - - The file to write the message to. - - - - - Determines whether the should append to the - file, or overwrite it. By default, the file will be overwritten. - - - if output should be appended to the file; - otherwise, . The default is - . - - - - - The logging level with which the message should be output. The default - is . - - - - - Executes a system command. - - - - Use of nested element(s) - is advised over the parameter, as - it supports automatic quoting and can resolve relative to absolute - paths. - - - - Ping "nant.sourceforge.net". - - - - - ]]> - - - - - Execute a java application using IKVM.NET that requires the - Apache FOP jars, and a set of custom jars. - - - - - - - - - - - - - - - - - - - - - ]]> - - - Assuming the base directory of the build file is "c:\ikvm-test" and - the value of the "fop.dist.dir" property is "c:\fop", then the value - of the -cp argument that is passed toikvm.exe is - "c:\ikvm-test\conf;c:\fop\build\fop.jar;conf;c:\fop\lib\xercesImpl-2.2.1.jar;c:\fop\lib\avalon-framework-cvs-20020806.jar;c:\fop\lib\batik.jar;c:\ikvm-test\lib\mylib.jar;c:\ikvm-test\lib\otherlib.zip" - on a DOS-based system. - - - - - - Provides the abstract base class for tasks that execute external applications. - - - - When a is applied to the - deriving class and does not return an - absolute path, then the program to execute will first be searched for - in the location specified by . - - - If the program does not exist in that location, then the list of tool - paths of the current target framework will be scanned in the order in - which they are defined in the NAnt configuration file. - - - - - - Defines the exit code that will be returned by - if the process could not be started, or did not exit (in time). - - - - - Will be used to ensure thread-safe operations. - - - - - Starts the external process and captures its output. - - - The external process did not finish within the configured timeout. - -or- - The exit code of the external process indicates a failure. - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Starts the process and handles errors. - - The that was started. - - - - Reads from the stream until the external program is ended. - - - - - Reads from the stream until the external program is ended. - - - - - Determines the path of the external program that should be executed. - - - A fully qualifies pathname including the program name. - - The task is not available or not configured for the current framework. - - - - The name of the executable that should be used to launch the - external program. - - - The name of the executable that should be used to launch the external - program, or if no name is specified. - - - If available, the configured value in the NAnt configuration - file will be used if no name is specified. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Gets the file to which the standard output should be redirected. - - - The file to which the standard output should be redirected, or - if the standard output should not be - redirected. - - - The default implementation will never allow the standard output - to be redirected to a file. Deriving classes should override this - property to change this behaviour. - - - - - Gets a value indicating whether output will be appended to the - . - - - if output should be appended to the ; - otherwise, . - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - The maximum amount of time the application is allowed to execute, - expressed in milliseconds. Defaults to no time-out. - - - - - The command-line arguments for the external program. - - - - - Specifies whether the external program is a managed application - which should be executed using a runtime engine, if configured. - The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - The value of is only used from - , and then only if its value is set to - . In which case - returns - if is . - - - In all other cases, the value of - is ignored. - - - - - - Specifies whether the external program should be treated as a managed - application, possibly forcing it to be executed under the currently - targeted version of the CLR. - - - A indicating how the program should - be treated. - - - - If is set to , - which is the default value, and is - then - is returned. - - - When the changing to , - then is set to ; - otherwise, it is changed to . - - - - - - Gets or sets the to which standard output - messages of the external program will be written. - - - The to which standard output messages of - the external program will be written. - - - By default, standard output messages wil be written to the build log - with level . - - - - - Gets or sets the to which error output - of the external program will be written. - - - The to which error output of the external - program will be written. - - - By default, error output wil be written to the build log with level - . - - - - - Gets the value that the process specified when it terminated. - - - The code that the associated process specified when it terminated, - or -1000 if the process could not be started or did not - exit (in time). - - - - - Gets the unique identifier for the spawned application. - - - - - Gets or sets a value indicating whether the application should be - spawned. If you spawn an application, its output will not be logged - by NAnt. The default is . - - - - - Gets the command-line arguments, separated by spaces. - - - - - Performs additional checks after the task has been initialized. - - does not hold a valid file name. - - - - Executes the external program. - - - - - The program to execute without command arguments. - - - The path will not be evaluated to a full path using the project - base directory. - - - - - The command-line arguments for the program. These will be - passed as is to the external program. When quoting is necessary, - these must be explictly set as part of the value. Consider using - nested elements instead. - - - - - Environment variables to pass to the program. - - - - - The directory in which the command will be executed. - - - The directory in which the command will be executed. The default - is the project's base directory. - - - - The working directory will be evaluated relative to the project's - base directory if it is relative. - - - - - - - The name of a property in which the exit code of the program should - be stored. Only of interest if is - . - - - If the exit code of the program is "-1000" then the program could - not be started, or did not exit (in time). - - - - - - Specifies whether the external program should be executed using a - runtime engine, if configured. The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Specifies whether the external program is a managed application - which should be executed using a runtime engine, if configured. - The default is . - - - if the external program should be executed - using a runtime engine; otherwise, . - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - The directory the program is in. - - - - The directory the program is in. The default is the project's base - directory. - - - The basedir will be evaluated relative to the project's base - directory if it is relative. - - - - - - The file to which the standard output will be redirected. - - - By default, the standard output is redirected to the console. - - - - - Gets or sets a value indicating whether output should be appended - to the output file. The default is . - - - if output should be appended to the ; - otherwise, . - - - - - Gets or sets a value indicating whether the application should be - spawned. If you spawn an application, its output will not be logged - by NAnt. The default is . - - - - - The name of a property in which the unique identifier of the spawned - application should be stored. Only of interest if - is . - - - - - Exits the current build by throwing a , - optionally printing additional information. - - - - The cause of the build failure can be specified using the - attribute or as inline content. - - - Macros in the message will be expanded. - - - - Exits the current build without giving further information. - - - ]]> - - - - Exits the current build and writes a message to the build log. - - - ]]> - - - - Functionally equivalent to the previous example. - - Something wrong here. - ]]> - - - - - - A message giving further information on why the build exited. - - - Inline content and are mutually exclusive. - - - - - Gets or sets the inline content that should be output in the build - log, giving further information on why the build exited. - - - The inline content that should be output in the build log. - - - Inline content and are mutually exclusive. - - - - - Gets a particular file from a URL source. - - - - Options include verbose reporting and timestamp based fetches. - - - Currently, only HTTP and UNC protocols are supported. FTP support may - be added when more pluggable protocols are added to the System.Net - assembly. - - - The option enables you to control downloads - so that the remote file is only fetched if newer than the local copy. - If there is no local copy, the download always takes place. When a file - is downloaded, the timestamp of the downloaded file is set to the remote - timestamp. - - - This timestamp facility only works on downloads using the HTTP protocol. - - - - - Gets the index page of the NAnt home page, and stores it in the file - help/index.html relative to the project base directory. - - - - ]]> - - - - - Gets the index page of a secured web site using the given credentials, - while connecting using the specified password-protected proxy server. - - - - - - - - - ]]> - - - - - - Initializes task and ensures the supplied attributes are valid. - - - - - This is where the work is done - - - - - Sets the timestamp of a given file to a specified time. - - - - - The URL from which to retrieve a file. - - - - - The file where to store the retrieved file. - - - - - If inside a firewall, proxy server/port information - Format: {proxy server name}:{port number} - Example: proxy.mycompany.com:8080 - - - - - The network proxy to use to access the Internet resource. - - - - - The network credentials used for authenticating the request with - the Internet resource. - - - - - Log errors but don't treat as fatal. The default is . - - - - - Conditionally download a file based on the timestamp of the local - copy. HTTP only. The default is . - - - - - The length of time, in milliseconds, until the request times out. - The default is 100000 milliseconds. - - - - - The security certificates to associate with the request. - - - - - Checks the conditional attributes and executes the children if - . - - - - If no conditions are checked, all child tasks are executed. - - - If more than one attribute is used, they are &&'d. The first - to fail stops the check. - - - The order of condition evaluation is, , - , , - . - - - instead of using the deprecated attributes, we advise you to use the - following functions in combination with the - attribute: - - - - Function - Description - - - - Checks whether the specified property exists. - - - - Checks whether the specified target exists. - - - - - Tests the value of a property using expressions. - - - Build release configuration - - ]]> - - - - Tests the the output of a function. - - - - - ]]> - - - - (Deprecated) Check that a target exists. - - - - - - ]]> - - - - (Deprecated) Check existence of a property. - - - - - ]]> - - - - (Deprecated) Check that a property value is true. - - - - - ]]> - - - - - (Deprecated) Check that a property exists and is - (uses multiple conditions). - - - - - - ]]> - - which is the same as - - - - - - - ]]> - - - - - (Deprecated) Check file dates. If myfile.dll is uptodate, - then do stuff. - - - - - - ]]> - - or - - - - - - - - ]]> - - or - - - - - - - - - - - ]]> - - - - - - Executes embedded tasks in the order in which they are defined. - - - - - Automatically exclude build elements that are defined on the task - from things that get executed, as they are evaluated normally during - XML task initialization. - - - - - Creates and executes the embedded (child XML nodes) elements. - - - Skips any element defined by the host that has - a defined. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was use to - initialize the element. - - - , as a is - responsable for creating tasks from the nested build elements. - - - - - The file to compare if uptodate. - - - - - The file to check against for the uptodate file. - - - - - The that contains the comparison files for - the (s) check. - - - - - The that contains the uptodate files for - the (s) check. - - - - - Used to test whether a property is true. - - - - - Used to test whether a property exists. - - - - - Used to test whether a target exists. - - - - - Used to test arbitrary boolean expression. - - - - - The opposite of the if task. - - - Check that a property does not exist. - - - - - ]]> - - Check that a property value is not true. - - - - - ]]> - - - - Check that a target does not exist. - - - - - ]]> - - - - - - Includes an external build file. - - - - This task is used to break your build file into smaller chunks. You - can load a partial build file and have it included into the build file. - - - Any global (project level) tasks in the included build file are executed - when this task is executed. Tasks in target elements are only executed - if that target is executed. - - - The project element attributes are ignored. - - - This task can only be in the global (project level) section of the - build file. - - - This task can only include files from the file system. - - - - - Include a task that fetches the project version from the - GetProjectVersion.include build file. - - - - ]]> - - - - - - Used to check for recursived includes. - - - - - Verifies parameters. - - - - - Build file to include. - - - - - Load a text file into a single property. - - - - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the appropriate - byte order marks. - - - - - Load file message.txt into property "message". - - - - ]]> - - - - - Load a file using the "latin-1" encoding. - - - - ]]> - - - - - Load a file, replacing all @NOW@ tokens with the current - date/time. - - - - - - - - - - ]]> - - - - - - The file to load. - - - - - The name of the property to save the content to. - - - - - The encoding to use when loading the file. The default is the encoding - associated with the system's current ANSI code page. - - - - - The filterchain definition to use. - - - - - Loads tasks form a given assembly or all assemblies in a given directory - or . - - - - Load tasks from a single assembly. - - - - ]]> - - - - - Scan a single directory for task assemblies. - - - - ]]> - - - - - Use a containing both a directory and an - assembly. - - - - - - - - - ]]> - - - - - - Executes the Load Tasks task. - - Specified assembly or path does not exist. - - - - Validates the attributes. - - Both and are set. - - - - An assembly to load tasks from. - - - - - A directory to scan for task assemblies. - - - - - Used to select which directories or individual assemblies to scan. - - - - - Loops over a set of items. - - - - Can loop over files in directory, lines in a file, etc. - - - The property value is stored before the loop is done, and restored - when the loop is finished. - - - The property is returned to its normal value once it is used. Read-only - parameters cannot be overridden in this loop. - - - - Loops over the files in c:\. - - - - - ]]> - - - - Loops over all files in the project directory. - - - - - - - - - - - - ]]> - - - - Loops over the folders in c:\. - - - - - ]]> - - - - Loops over all folders in the project directory. - - - - - - - - - - - - ]]> - - - - Loops over a list. - - - - - ]]> - - - - - Loops over lines in the file properties.csv, where each line - is of the format name,value. - - - - - - ]]> - - - - - - The NAnt property name(s) that should be used for the current - iterated item. - - - If specifying multiple properties, separate them with a comma. - - - - - The type of iteration that should be done. - - - - - The type of whitespace trimming that should be done. The default - is . - - - - - The source of the iteration. - - - - - The deliminator char. - - - - - Stuff to operate in. Just like the - attribute, but supports more complicated things like a - and such. - - Please remove the attribute if you - are using this element. - - - - - - Tasks to execute for each matching item. - - - - - Do not remove any white space characters. - - - - - Remove all white space characters from the end of the current - item. - - - - - Remove all white space characters from the beginning of the - current item. - - - - - Remove all white space characters from the beginning and end of - the current item. - - - - - Sends an SMTP message. - - - - Text and text files to include in the message body may be specified as - well as binary attachments. - - - - - Sends an email from nant@sourceforge.net to three recipients - with a subject about the attachments. The body of the message will be - the combined contents of all .txt files in the base directory. - All zip files in the base directory will be included as attachments. - The message will be sent using the smtpserver.anywhere.com SMTP - server. - - - - - - - - - - - ]]> - - - - - Sends an email from a gmail account to multiple recipients. This example - illustrates how to add a recipient's name to an email address. - - - - ]]> - - - Email addresses in any of the lists (to, cc, bcc, from) can be in one of - the five listed formats below. - - - - Full Name <address@abcxyz.com> - - - <address@abcxyz.com> Full Name - - - (Full Name) address@abcxyz.com - - - address@abcxyz.com (Full Name) - - - address@abcxyz.com - - - - Remember to use &gt; and &lt; XML entities for the angle brackets. - - - - - - Initializes task and ensures the supplied attributes are valid. - - - - - This is where the work is done. - - - - - Reads a text file and returns the content - in a string. - - The file to read content of. - - The content of the specified file. - - - - - Converts an email address or a series of email addresses from - a object to a new - object. - - - A list of email addresses separated by a semicolon. - - - A new object - containing the addresses from . - - - - - Converts a object containing - email address information to a - object. - - - - Email address information passed to this method should be in - one of five formats. - - - - Full Name <address@abcxyz.com> - - - <address@abcxyz.com> Full Name - - - (Full Name) address@abcxyz.com - - - address@abcxyz.com (Full Name) - - - address@abcxyz.com - - - - If the full name of the intended recipient (or sender) is provided, - that information is included in the resulting - object. - - - - The string that contains the address to parse. - - - A new MailAddress object containing the information from - . - - - - - Simple method that converts an XML escaped string back to its unescaped - format. - - - An html encoded string. - - - The decoded format of the html encoded string. - - - - - Email address of sender. - - - - - Semicolon-separated list of recipient email addresses. - - - - - Reply to email address. - - - - - Semicolon-separated list of CC: recipient email addresses. - - - - - Semicolon-separated list of BCC: recipient email addresses. - - - - - Host name of mail server. The default is localhost. - - - - - The port number used to connect to the mail server. - The default is 25. - - - - - Indicates whether or not ssl should be used to - connect to the smtp host. - - - - - Text to send in body of email message. - - - - - Text to send in subject line of email message. - - - - - Indicates whether or not the body of the email is in - html format. The default value is false. - - - - - The username to use when connecting to the smtp host. - - - - - The password to use when connecting to the smtp host. - - - - - Format of the message. The default is . - - - - - Files that are transmitted as part of the body of the email message. - - - - - Attachments that are transmitted with the message. - - - - - Temporary enum replacement of - to ease transition to newer property flags. - - - - - Indicates the body of the email is formatted in plain text. - - - - - Indicates the body of the email is formatted in html. - - - - - Creates a directory and any non-existent parent directory if necessary. - - - Create the directory build. - - - ]]> - - - - Create the directory tree one/two/three. - - - ]]> - - - - - - Creates the directory specified by the property. - - The directory could not be created. - - - - The directory to create. - - - - - Moves a file, a directory, or set of files to a new file or directory. - - - - Files are only moved if the source file is newer than the destination - file, or if the destination file does not exist. However, you can - explicitly overwrite files with the - attribute. - - - Entire directory structures can be moved to a new location. For this - to happen, the following criteria must be met: - - - - - Everything in the fileset is included - - - - - The directory structure is not flattened - - - - - Empty directories are included - - - - - Destination directory does not exist - - - - - If any of these items are not met, then the files within the source - directory will be moved over instead of the entire directory structure. - - - A can be used to select files or directories to move. - To use a , the - attribute must be set. - -

Encoding

- - Unless an encoding is specified, the encoding associated with the - system's current ANSI code page is used. - - - An UTF-8, little-endian Unicode, and big-endian Unicode encoded text - file is automatically recognized, if the file starts with the - appropriate byte order marks. - - - If you employ filters in your move operation, you should limit the - move to text files. Binary files will be corrupted by the move - operation. - -
- - - Move a single file while changing its encoding from "latin1" to - "utf-8". - - - - ]]> - - - - Move a set of files. - - - - - - - ]]> - - - - - Move a set of files to a directory, replacing @TITLE@ with - "Foo Bar" in all files. - - - - - - - - - - - - - ]]> - - - - - Move an entire directory and its contents. - - - - - - ]]> - - -
- - - Actually does the file moves. - - - - - The file to move. - - - - - The file to move to. - - - - - The directory to move to. - - - - - Used to select the files to move. To use a , - the attribute must be set. - - - - - Ignore directory structure of source directory, move all files into - a single directory, specified by the - attribute. The default is . - - - - - Chain of filters used to alter the file's content as it is moved. - - - - - Creates an XSD File for all available tasks. - - - - This can be used in conjuntion with the command-line option to do XSD - Schema validation on the build file. - - - - Creates a NAnt.xsd file in the current project directory. - - - ]]> - - - - - - Creates a NAnt Schema for given types - - The output stream to save the schema to. If , writing is ignored, no exception generated. - The list of tasks to generate XML Schema for. - The list of datatypes to generate XML Schema for. - The target namespace to output. - The new NAnt Schema. - - - - Creates a new instance. - - The name of the attribute. - Value indicating whether the attribute should be required. - The new instance. - - - - Creates a new instance. - - The minimum value to allow for this choice - The maximum value to allow, Decimal.MaxValue sets it to 'unbound' - The new instance. - - - - The name of the output file to which the XSD should be written. - - - - - The target namespace for the output. Defaults to "http://tempuri.org/nant-donotuse.xsd" - - - - - The for which an XSD should be created. If not - specified, an XSD will be created for all available tasks. - - - - - Creates a new instance of the - class. - - Tasks for which a schema should be generated. - Data Types for which a schema should be generated. - The namespace to use. - http://tempuri.org/nant.xsd - - - - - Runs NAnt on a supplied build file, or a set of build files. - - - - By default, all the properties of the current project will be available - in the new project. Alternatively, you can set - to to not copy any properties to the new - project. - - - You can also set properties in the new project from the old project by - using nested property tags. These properties are always passed to the - new project regardless of the setting of . - This allows you to parameterize your subprojects. - - - References to data types can also be passed to the new project, but by - default they are not. If you set the to - , all references will be copied. - - - - - Build a project located in a different directory if the debug - property is not . - - - - ]]> - - - - - Build a project while adding a set of properties to that project. - - - - - - - - - - ]]> - - - - - Build all projects named default.build located anywhere under - the project base directory. - - - - - - - - - - ]]> - - - - - - Validates the element. - - - - - The build file to build. - - - - - The target to execute. To specify more than one target seperate - targets with a space. Targets are executed in order if possible. - The default is to use target specified in the project's default - attribute. - - - - - Used to specify a set of build files to process. - - - - - Specifies whether current property values should be inherited by - the executed project. The default is . - - - - - Specifies whether all references will be copied to the new project. - The default is . - - - - - Specifies a collection of properties that should be created in the - executed project. Note, existing properties with identical names - that are not read-only will be overwritten. - - - - - Sets a property in the current project. - - - NAnt uses a number of predefined properties. - - - - Define a debug property with value . - - - - ]]> - - - - - Use the user-defined debug property. - - - - ]]> - - - - - Define a read-only property. This is just like passing in the param - on the command line. - - - - ]]> - - - - - Define a property, but do not overwrite the value if the property already exists (eg. it was specified on the command line). - - - - - - - ]]> - - - Executing this build file with the command line option -D:debug=false, - would cause the value specified on the command line to remain unaltered. - - - - - - - - - The name of the NAnt property to set. - - - - - The value to assign to the NAnt property. - - - - - Specifies whether the property is read-only or not. - The default is . - - - - - Specifies whether references to other properties should not be - expanded when the value of the property is set, but expanded when - the property is actually used. By default, properties will be - expanded when set. - - - - - Specifies whether the value of a property should be overwritten if - the property already exists (unless the property is read-only). - The default is . - - - - - Sets project properties based on the evaluatuion of a regular expression. - - - - The attribute must contain one or more - - named grouping constructs, which represents the names of the - properties to be set. These named grouping constructs can be enclosed - by angle brackets (?<name>) or single quotes (?'name'). - - - In the build file, use the XML element to specify <, - and to specify >. - - - The named grouping construct must not contain any punctuation and it - cannot begin with a number. - - - - - Find the last word in the given string and stores it in the property - lastword. - - - - - ]]> - - - - - Split the full filename and extension of a filename. - - - - ]]> - - - - - Split the path and the filename. (This checks for / or \ - as the path separator). - - - - ]]> - - - Results in path=d:\Temp\SomeDir\SomeDir\ and file=bla.xml. - - - - - - Executes the task. - - - - - Represents the regular expression to be evalued. - - - The regular expression to be evalued. - - - The pattern must contain one or more named constructs, which may - not contain any punctuation and cannot begin with a number. - - - - - A comma separated list of options to pass to the regex engine. The - default is . - - - - - Represents the input for the regular expression. - - - The input for the regular expression. - - - - - Sets an environment variable or a whole collection of them. Use an empty - attribute to clear a variable. - - - - Variables will be set for the current NAnt process and all child - processes that NAnt spawns (compilers, shell tools, etc). If the - intention is to only set a variable for a single child process, then - using the and its nested - element might be a better option. - - - Expansion of inline environment variables is performed using the syntax - of the current platform. So on Windows platforms using the string %PATH% - in the attribute will result in the value of - the PATH variable being expanded in place before the variable is set. - - - - Set the MONO_PATH environment variable on a *nix platform. - - - ]]> - - - - Set a collection of environment variables. Note the nested variable used to set var3. - - - - - - - ]]> - - - - Set environment variables using nested path elements. - - - - - - - - - - - - - - - - - ]]> - - - - - - Checks whether the task is initialized with valid attributes. - - - - - Set the environment variables - - - - - Do the actual work here. - - The name of the environment variable. - The value of the environment variable. - - - - The name of a single Environment variable to set - - - - - The literal value for the environment variable. - - - - - The value for a file-based environment variable. NAnt will convert - it to an absolute filename. - - - - - The value for a directory-based environment variable. NAnt will - convert it to an absolute path. - - - - - The value for a PATH like environment variable. You can use - : or ; as path separators and NAnt will convert it to - the platform's local conventions. - - - - - A task for sleeping a specified period of time, useful when a build or deployment process - requires an interval between tasks. - - - Sleep 1 hour, 2 minutes, 3 seconds and 4 milliseconds. - - - ]]> - - - - Sleep 123 milliseconds. - - - ]]> - - - - - - Verify parameters. - - - - - Return time to sleep. - - - - - Sleeps for the specified number of milliseconds. - - Number of milliseconds to sleep. - - - - Hours to add to the sleep time. - - - - - Minutes to add to the sleep time. - - - - - Seconds to add to the sleep time. - - - - - Milliseconds to add to the sleep time. - - - - - Processes a document via XSLT. - - - Create a report in HTML. - - - ]]> - - - - Create a report in HTML, with a param. - - - - - - - ]]> - - - - Create a report in HTML, with a expanded param. - - - - - - - ]]> - - - - Create some code based on a directory of templates. - - - - - - - - - - ]]> - - - - - - Directory in which to store the results. The default is the project - base directory. - - - - - Desired file extension to be used for the targets. The default is - html. - - - - - URI or path that points to the stylesheet to use. If given as path, it can - be relative to the project's basedir or absolute. - - - - - Specifies a single XML document to be styled. Should be used with - the attribute. - - - - - Specifies the output name for the styled result from the - attribute. - - - - - Specifies a group of input files to which to apply the stylesheet. - - - - - XSLT parameters to be passed to the XSLT transformation. - - - - - XSLT extension objects to be passed to the XSLT transformation. - - - - - The network proxy to use to access the Internet resource. - - - - - Sets properties with system information. - - - Sets a number of properties with information about the system environment. The intent of this task is for nightly build logs to have a record of system information so that the build was performed on. - - - Property - Value - - - <>.clr.version - Common Language Runtime version number. - - - <>.env.* - Environment variables (e.g., <>.env.PATH). - - - <>.os.platform - Operating system platform ID. - - - <>.os.version - Operating system version. - - - <>.os - Operating system version string. - - - <>.os.folder.applicationdata - The directory that serves as a common repository for application-specific data for the current roaming user. - - - <>.os.folder.commonapplicationdata - The directory that serves as a common repository for application-specific data that is used by all users. - - - <>.os.folder.commonprogramfiles - The directory for components that are shared across applications. - - - <>.os.folder.desktopdirectory - The directory used to physically store file objects on the desktop. Do not confuse this directory with the desktop folder itself, which is a virtual folder. - - - <>.os.folder.programfiles - The Program Files directory. - - - <>.os.folder.system - The System directory. - - - <>.os.folder.temp - The temporary directory. - - - - When the name of an environment variable is not a valid property name, - the task will fail. In that case, set to - to allow that environment variable to be - skipped. - - - we advise you to use the following functions instead: - - - - Function - Description - - - - Gets a object that identifies this operating system. - - - - Gets the path to a system special folder. - - - - Returns the value of a environment variable. - - - - Gets the path to the temporary directory. - - - - Gets the Common Language Runtime version. - - - - - Register the properties with the default property prefix. - - - ]]> - - - - Register the properties without a prefix. - - - ]]> - - - - Register properties and display a summary. - - - ]]> - - - - - - The string to prefix the property names with. The default is "sys.". - - - - - Touches a file or set of files -- corresponds to the Unix touch command. - - - - If the file specified does not exist, the task will create it. - - - - Touch the Main.cs file. The current time is used. - - - ]]> - - - - - Touch all executable files in the project base directory and its - subdirectories. - - - - - - - - - ]]> - - - - - - Ensures the supplied attributes are valid. - - - - - The file to touch. - - - - - Specifies the new modification time of the file(s) in milliseconds - since midnight Jan 1 1970. - - - - - Specifies the new modification time of the file in the format - MM/DD/YYYY HH:MM:SS. - - - - - Used to select files that should be touched. - - - - - Executes a set of tasks, and optionally catches a build exception to - allow recovery or rollback steps to be taken, or to define some steps - to be taken regardless if the tasks succeed or fail, or both. - - - - The tasks defined in the <> block - will be executed in turn, as they normally would in a target. - - - If a <> block is defined, the - tasks in that block will be executed in turn only if one of the tasks - in the <> block fails. This - failure will then be suppressed by the <> - block. - - - The message associated with the failure can also be caught in a - property for use within the <> - block. The original contents of the property will be restored upon - exiting the <> block. - - - If a <> block is defined, the - tasks in that block will be executed after the tasks in both the - <> and <> - blocks have been executed, regardless of whether any task fails in - either block. - - - - - - - - - - - - - - - - - ]]> - - - The output of this example will be: - - - In try - In catch - Finally done - - - The failure in the <> block will - not cause the build to fail. - - - - - - - - - - - - - - - - - - ]]> - - - The output of this example will be: - - - In try - Caught failure: Just because... - Finally done - Build failed: Bad catch - - - Like the above, the failure in the <> - block does not cause the build to fail. The failure in the - <> block does, however. - Note that the <> block is - executed even though the <> - block failed. - - - - - - - - - - - - - - - - - - ]]> - - - The output of this example will be: - - - In try - Caught failure yet again - Build failed: Property 'failure' has not been set. - - - The in the <> - block failed because the "failure" property was not defined - after exiting the <> block. - Note that the failure in the <> - block has eclipsed the failure in the <> - block. - - - - - - - - - - - - - - - - - - ]]> - - - A more concrete example, that will always clean up the generated - temporary file after it has been created. - - - - - - The tasks in this block will be executed as a normal part of - the build script. - - - - - The tasks in this block will be executed if any task in the try - block fails. - - - - - The tasks in this block will always be executed, regardless of - what happens in the try and catch blocks. - - - Note that any failure in any of the tasks in this block will - prevent any subsequent tasks from executing. - - - - - Defines the name of the property to save the message describing - the failure that has been caught. - - - - The failure message is only available in the context of the catch - block. If you wish to preserve the message, you will need to save - it into another property. - - - Readonly properties cannot be overridden by this mechanism. - - - - - - Sets properties with the current date and time. - - - - By default the displays the current date - and time and sets the following properties: - - - tstamp.date to yyyyMMdd - tstamp.time to HHmm - tstamp.now using the default DateTime.ToString() method - - - To set an additional property with a custom date/time use the - and attributes. - To set a number of additional properties with the exact same date and - time use the nested element (see example). - - - The date and time string displayed by the - uses the computer's default long date and time string format. You - might consider setting these to the - ISO 8601 standard - for date and time notation. - - - - Set the build.date property. - - - ]]> - - - - Set a number of properties for Ant like compatibility. - - - - - - - ]]> - - - - - - The property to receive the date/time string in the given pattern. - - - - The date/time pattern to be used. - - The following table lists the standard format characters for each standard pattern. The format characters are case-sensitive; for example, 'g' and 'G' represent slightly different patterns. - - - Format Character - Description Example Format Pattern (en-US) - - dMM/dd/yyyy - Ddddd, dd MMMM yyyy - fdddd, dd MMMM yyyy HH:mm - Fdddd, dd MMMM yyyy HH:mm:ss - gMM/dd/yyyy HH:mm - GMM/dd/yyyy HH:mm:ss - m, MMMMM dd - r, Rddd, dd MMM yyyy HH':'mm':'ss 'GMT' - syyyy'-'MM'-'dd'T'HH':'mm':'ss - tHH:mm - THH:mm:ss - uyyyy'-'MM'-'dd HH':'mm':'ss'Z' - Udddd, dd MMMM yyyy HH:mm:ss - y, Yyyyy MMMM - - The following table lists the patterns that can be combined to construct custom patterns. The patterns are case-sensitive; for example, "MM" is recognized, but "mm" is not. If the custom pattern contains white-space characters or characters enclosed in single quotation marks, the output string will also contain those characters. Characters not defined as part of a format pattern or as format characters are reproduced literally. - - - Format - Pattern Description - - dThe day of the month. Single-digit days will not have a leading zero. - ddThe day of the month. Single-digit days will have a leading zero. - dddThe abbreviated name of the day of the week. - ddddThe full name of the day of the week. - MThe numeric month. Single-digit months will not have a leading zero. - MMThe numeric month. Single-digit months will have a leading zero. - MMMThe abbreviated name of the month. - MMMMThe full name of the month. - yThe year without the century. If the year without the century is less than 10, the year is displayed with no leading zero. - yyThe year without the century. If the year without the century is less than 10, the year is displayed with a leading zero. - yyyyThe year in four digits, including the century. - ggThe period or era. This pattern is ignored if the date to be formatted does not have an associated period or era string. - hThe hour in a 12-hour clock. Single-digit hours will not have a leading zero. - hhThe hour in a 12-hour clock. Single-digit hours will have a leading zero. - HThe hour in a 24-hour clock. Single-digit hours will not have a leading zero. - HHThe hour in a 24-hour clock. Single-digit hours will have a leading zero. - mThe minute. Single-digit minutes will not have a leading zero. - mmThe minute. Single-digit minutes will have a leading zero. - sThe second. Single-digit seconds will not have a leading zero. - ssThe second. Single-digit seconds will have a leading zero. - fThe fraction of a second in single-digit precision. The remaining digits are truncated. - ffThe fraction of a second in double-digit precision. The remaining digits are truncated. - fffThe fraction of a second in three-digit precision. The remaining digits are truncated. - ffffThe fraction of a second in four-digit precision. The remaining digits are truncated. - fffffThe fraction of a second in five-digit precision. The remaining digits are truncated. - ffffffThe fraction of a second in six-digit precision. The remaining digits are truncated. - fffffffThe fraction of a second in seven-digit precision. The remaining digits are truncated. - tThe first character in the AM/PM designator. - ttThe AM/PM designator. - zThe time zone offset ("+" or "-" followed by the hour only). Single-digit hours will not have a leading zero. For example, Pacific Standard Time is "-8". - zzThe time zone offset ("+" or "-" followed by the hour only). Single-digit hours will have a leading zero. For example, Pacific Standard Time is "-08". - zzzThe full time zone offset ("+" or "-" followed by the hour and minutes). Single-digit hours and minutes will have leading zeros. For example, Pacific Standard Time is "-08:00". - :The default time separator. - /The default date separator. - \ cPattern Where c is any character. Displays the character literally. To display the backslash character, use "\\". - - - - - - Check modification dates on groups of files. - - - If all are same or newer than all , the specified property is set to , otherwise it - is set to . - - - - Check file dates. If myfile.dll is same or newer than myfile.cs, then set myfile.dll.uptodate property - to either or . - - - - - - - - - - - ]]> - - - - - - Property that will be set to or depending on the - result of the date check. - - - - - The that contains list of source files. - - - - - The that contains list of target files. - - - - - Extracts text from an XML file at the location specified by an XPath - expression. - - - - If the XPath expression specifies multiple nodes the node index is used - to determine which of the nodes' text is returned. - - - - - The example provided assumes that the following XML file (App.config) - exists in the current build directory. - - - - - - - - - ]]> - - - - - The example will read the server value from the above - configuration file. - - - - - - - - ]]> - - - - - - Executes the XML peek task. - - - - - Loads an XML document from a file on disk. - - The file name of the file to load the XML document from. - - A document containing - the document object representing the file. - - - - - Gets the contents of the node specified by the XPath expression. - - The XPath expression used to determine which nodes to choose from. - The XML document to select the nodes from. - The node index in the case where multiple nodes satisfy the expression. - - The contents of the node specified by the XPath expression. - - - - - The name of the file that contains the XML document - that is going to be peeked at. - - - - - The index of the node that gets its text returned when the query - returns multiple nodes. - - - - - The property that receives the text representation of the XML inside - the node returned from the XPath expression. - - - - - The XPath expression used to select which node to read. - - - - - Namespace definitions to resolve prefixes in the XPath expression. - - - - - Replaces text in an XML file at the location specified by an XPath - expression. - - - - The location specified by the XPath expression must exist, it will - not create the parent elements for you. However, provided you have - a root element you could use a series of the tasks to build the - XML file up if necessary. - - - - - Change the server setting in the configuration from testhost.somecompany.com - to productionhost.somecompany.com. - - XML file: - - - - - - - - ]]> - - Build fragment: - - - ]]> - - - - - Modify the noNamespaceSchemaLocation in an XML file. - - XML file: - - - - - ]]> - - Build fragment: - - - - - - - ]]> - - - - - - Executes the XML poke task. - - - - - Loads an XML document from a file on disk. - - - The file name of the file to load the XML document from. - - - Value for XmlDocument.PreserveWhitespace that is set before the xml is loaded. - - - An containing - the document object model representing the file. - - - - - Given an XML document and an expression, returns a list of nodes - which match the expression criteria. - - - The XPath expression used to select the nodes. - - - The XML document that is searched. - - - An to use for resolving namespaces - for prefixes in the XPath expression. - - - An containing references to the nodes - that matched the XPath expression. - - - - - Given a node list, replaces the XML within those nodes. - - - The list of nodes to replace the contents of. - - - The text to replace the contents with. - - - - - Saves the XML document to a file. - - The XML document to be saved. - The file name to save the XML document under. - - - - The name of the file that contains the XML document that is going - to be poked. - - - - - The XPath expression used to select which nodes are to be modified. - - - - - The value that replaces the contents of the selected nodes. - - - - - Namespace definitions to resolve prefixes in the XPath expression. - - - - - If then the whitespace in the resulting - document will be preserved; otherwise the whitespace will be removed. - The default is . - - - - - Represents a command-line argument. - - - - When passed to an external application, the argument will be quoted - when appropriate. This does not apply to the - parameter, which is always passed as is. - - - - - A single command-line argument containing a space character. - - - - ]]> - - - - - Two separate command-line arguments. - - - - ]]> - - - - - A single command-line argument with the value \dir;\dir2;\dir3 - on DOS-based systems and /dir:/dir2:/dir3 on Unix-like systems. - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified command-line argument. - - - - - Initializes a new instance of the class - with the given file. - - - - - Initializes a new instance of the class - with the given path. - - - - - Returns the argument as a . - - - The argument as a . - - - File and individual path elements will be quoted if necessary. - - - - - Quotes a command line argument if it contains a single quote or a - space. - - The command line argument. - - A quoted command line argument if - contains a single quote or a space; otherwise, - . - - - - - A single command-line argument; can contain space characters. - - - - - The name of a file as a single command-line argument; will be - replaced with the absolute filename of the file. - - - - - The value for a directory-based command-line argument; will be - replaced with the absolute path of the directory. - - - - - The value for a PATH-like command-line argument; you can use - : or ; as path separators and NAnt will convert it - to the platform's local conventions, while resolving references to - environment variables. - - - Individual parts will be replaced with the absolute path, resolved - relative to the project base directory. - - - - - Sets a single command-line argument and treats it like a PATH - ensures - the right separator for the local platform is used. - - - - - List of command-line arguments; will be passed to the executable - as is. - - - - - Indicates if the argument should be passed to the external program. - If then the argument will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the argument should not be passed to the external - program. If then the argument will be - passed; otherwise, skipped. The default is . - - - - - Gets string value corresponding with the argument. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Provides credentials for password-based authentication schemes. - - - - - Initializes a new instance of the class. - - - - - Returns a instance representing - the current . - - - A instance representing the current - , or if the - credentials should not be used to provide authentication information - to the external resource. - - - - - The domain or computer name that verifies the credentials. - - - - - The password for the user name associated with the credentials. - - - - - The user name associated with the credentials. - - - - - Indicates if the credentials should be used to provide authentication - information to the external resource. If then - the credentials will be passed; otherwise, not. The default is - . - - - - - Indicates if the credentials should not be used to provide authentication - information to the external resource. If then the - credentials will be passed; otherwise, not. The default is - . - - - - - A specialized used for specifying a set of - directories. - - - Hint for supporting tasks that the included directories instead of - files should be used. - - - - - Filesets are groups of files. These files can be found in a directory - tree starting in a base directory and are matched by patterns taken - from a number of patterns. Filesets can appear inside tasks that support - this feature or at the project level, i.e., as children of <project>. - - -

Patterns

- - As described earlier, patterns are used for the inclusion and exclusion. - These patterns look very much like the patterns used in DOS and UNIX: - - - - - '*' matches zero or more characters - For example: - - *.cs matches .cs, x.cs and FooBar.cs, - but not FooBar.xml (does not end with .cs). - - - - - - '?' matches one character - For example: - - ?.cs matches x.cs, A.cs, but not - .cs or xyz.cs (both don't have one character - before .cs). - - - - - - Combinations of *'s and ?'s are allowed. - - - Matching is done per-directory. This means that first the first directory - in the pattern is matched against the first directory in the path to match. - Then the second directory is matched, and so on. For example, when we have - the pattern /?abc/*/*.cs and the path /xabc/foobar/test.cs, - the first ?abc is matched with xabc, then * is matched - with foobar, and finally *.cs is matched with test.cs. - They all match, so the path matches the pattern. - - - To make things a bit more flexible, we added one extra feature, which makes - it possible to match multiple directory levels. This can be used to match a - complete directory tree, or a file anywhere in the directory tree. To do this, - ** must be used as the name of a directory. When ** is used as - the name of a directory in the pattern, it matches zero or more directories. - For example: /test/** matches all files/directories under /test/, - such as /test/x.cs, or /test/foo/bar/xyz.html, but not /xyz.xml. - - - There is one "shorthand" - if a pattern ends with / or \, then - ** is appended. For example, mypackage/test/ is interpreted as - if it were mypackage/test/**. - -

Case-Sensitivity

- - By default, pattern matching is case-sensitive on Unix and case-insensitive - on other platforms. The parameter can be used - to override this. - -

Default Excludes

- - There are a set of definitions that are excluded by default from all - tasks that use filesets. They are: - - - **/.svn - **/.svn/** - **/_svn - **/_svn/** - **/.git - **/.git/** - **/.git* (eg. .gitignore) - **/.hg - **/.hg/** - **/.hg* (eg. .hgignore) - **/SCCS - **/SCCS/** - **/vssver.scc - **/vssver2.scc - **/_vti_cnf/** - **/*~ - **/#*# - **/.#* - **/%*% - **/CVS - **/CVS/** - **/.cvsignore - - - If you do not want these default excludes applied, you may disable them - by setting to . - -
- - - - Pattern - Match - - - **/CVS/* - - - Matches all files in CVS directories that can be - located anywhere in the directory tree. - - Matches: - - - CVS/Repository - - - org/apache/CVS/Entries - - - org/apache/jakarta/tools/ant/CVS/Entries - - - But not: - - - org/apache/CVS/foo/bar/Entries (foo/bar/ part does not match) - - - - - - org/apache/jakarta/** - - - Matches all files in the org/apache/jakarta directory - tree. - - Matches: - - - org/apache/jakarta/tools/ant/docs/index.html - - - org/apache/jakarta/test.xml - - - But not: - - - org/apache/xyz.java (jakarta/ part is missing) - - - - - - org/apache/**/CVS/* - - - Matches all files in CVS directories that are located - anywhere in the directory tree under org/apache. - - Matches: - - - org/apache/CVS/Entries - - - org/apache/jakarta/tools/ant/CVS/Entries - - - But not: - - - org/apache/CVS/foo/bar/Entries (foo/bar/ part does not match) - - - - - - **/test/** - - - Matches all files that have a test element in their - path, including test as a filename. - - - - - - -
- - - Initializes a new instance of the class. - - - - - copy constructor - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Adds a nested set of patterns, or references a standalone patternset. - - - - - Copies all instance data of the to a given - . - - - - - Determines if a file has a more recent last write time than the - given time, or no longer exists. - - A file to check the last write time against. - The datetime to compare against. - - The name of the file that has a last write time greater than - or that no longer exists; - otherwise, . - - - - - Determines if one of the given files has a more recent last write - time than the given time. If one of the given files no longer exists, - the target will be considered out-of-date. - - A collection of filenames to check the last write time against. - The datetime to compare against. - - The name of the first file that has a last write time greater than - ; otherwise, null. - - - - - Indicates whether include and exclude patterns must be treated in a - case-sensitive way. The default is on Unix; - otherwise, . - - - - - When set to , causes the fileset element to - throw a when no files match the - includes and excludes criteria. The default is . - - - - - Indicates whether default excludes should be used or not. - The default is . - - - - - The base of the directory of this fileset. The default is the project - base directory. - - - - - Gets the collection of include patterns. - - - - - Gets the collection of exclude patterns. - - - - - Gets the collection of files that will be added to the - without pattern matching or checking if the - file exists. - - - - - Gets the collection of file names that match the fileset. - - - A collection that contains the file names that match the - . - - - - - Gets the collection of directory names that match the fileset. - - - A collection that contains the directory names that match the - . - - - - - Gets the collection of directory names that were scanned for files. - - - A collection that contains the directory names that were scanned for - files. - - - - - The items to include in the fileset. - - - - - The items to include in the fileset. - - - - - The items to exclude from the fileset. - - - - - The items to exclude from the fileset. - - - - - The files from which a list of patterns or files to include should - be obtained. - - - - - The files from which a list of patterns or files to include should - be obtained. - - - - - The files from which a list of patterns or files to exclude should - be obtained. - - - - - Determines the most recently modified file in the fileset (by LastWriteTime of the ). - - - The of the file that has the newest (closest to present) last write time. - - - - - Indicates whether or not every file and directory is included in - the fileset list. - - - - - The pattern or file name to exclude. - - - - - If then the pattern will be excluded; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the pattern will be excluded; otherwise, skipped. The default - is . - - - - - If then the file name will be added to - the without pattern matching or checking - if the file exists. The default is . - - - - - If then the file will be searched for - on the path. The default is . - - - - - The pattern or file name to include. - - - - - If then the pattern will be included; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the pattern will be included; otherwise, skipped. The default - is . - - - - - Gets the list of patterns in . - - - - - If then the patterns will be excluded; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the patterns will be excluded; otherwise, skipped. The default - is . - - - - - The name of a file; each line of this file is taken to be a - pattern. - - - - - If then the patterns in the include file - will be added to the without pattern - matching or checking if the file exists. The default is - . - - - - - If then the patterns in the include file - will be searched for on the path. The default is . - - - - - If then the patterns will be included; - otherwise, skipped. The default is . - - - - - Opposite of . If - then the patterns will be included; otherwise, skipped. The default - is . - - - - - Initializes a new instance of the class. - - - - - Copy constructor for . Required in order to - assign references of type where - is used. - - A instance to create a from. - - - - Represents an environment variable. - - - - - Initializes a instance with the - specified name and value. - - The name of the environment variable. - The value of the environment variable. - - - - Initializes a instance. - - - - - The name of the environment variable. - - - - - The literal value for the environment variable. - - - - - The value for a file-based environment variable. NAnt will convert - it to an absolute filename. - - - - - The value for a directory-based environment variable. NAnt will - convert it to an absolute path. - - - - - The value for a PATH like environment variable. You can use - : or ; as path separators and NAnt will convert it to - the platform's local conventions. - - - - - Sets a single environment variable and treats it like a PATH - - ensures the right separator for the local platform is used. - - - - - Gets the value of the environment variable. - - - - - Indicates if the environment variable should be passed to the - external program. If then the environment - variable will be passed; otherwise, skipped. The default is - . - - - - - Indicates if the environment variable should not be passed to the - external program. If then the environment - variable will be passed; otherwise, skipped. The default is - . - - - - - A set of environment variables. - - - - - Environment variable to pass to a program. - - - - - Environment variable to pass to a program. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The name of the NAnt property to set. - - - - - The string pattern to use to format the property. - - - - - Indicates if the formatter should be used to format the timestamp. - If then the formatter will be used; - otherwise, skipped. The default is . - - - - - Indicates if the formatter should be not used to format the - timestamp. If then the formatter will be - used; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specifies the execution mode for managed applications. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - Even if set to , the operating system can still - run the program as a managed application. - - On Linux this can be done through binfmt_misc, while on - Windows installing the .NET Framework redistributable caused managed - applications to run on the MS CLR by default. - - - - - - Do not threat the program as a managed application. - - - - - Leave it up to the CLR to determine which specific version of - the CLR will be used to run the application. - - - - - Forces an application to run against the currently targeted - version of a given CLR. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Represents an option. - - - - - name, value constructor - - - - - - - Default constructor - - - - - Name of the option. - - - - - Value of the option. The default is . - - - - - Indicates if the option should be passed to the task. - If then the option will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the option should not be passed to the task. - If then the option will be passed; - otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for the specified - task is found in the collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the option that should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a nested path element. - - - - - The name of a file to add to the path. Will be replaced with - the absolute path of the file. - - - - - The name of a directory to add to the path. Will be replaced with - the absolute path of the directory. - - - - - A string that will be treated as a path-like string. You can use - : or ; as path separators and NAnt will convert it - to the platform's local conventions, while resolving references - to environment variables. - - - - - If then the entry will be added to the - path; otherwise, skipped. The default is . - - - - - Opposite of . If - then the entry will be added to the path; otherwise, skipped. - The default is . - - - - - Gets the parts of a path represented by this element. - - - A containing the parts of a path - represented by this element. - - - - - - Paths are groups of files and/or directories that need to be passed as a single - unit. The order in which parts of the path are specified in the build file is - retained, and duplicate parts are automatically suppressed. - - - - - Define a global <path> that can be referenced by other - tasks or types. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Invoked by for build - attributes with an underlying type. - - The to be used to resolve relative paths. - The string representing a path. - - - - Returns a textual representation of the path, which can be used as - PATH environment variable definition. - - - A textual representation of the path. - - - - - Defines a set of path elements to add to the current path. - - The to add. - - - - Defines a path element to add to the current path. - - The to add. - - - - Returns all path elements defined by this path object. - - - A list of path elements. - - - - - Splits a PATH (with ; or : as separators) into its parts, while - resolving references to environment variables. - - The to be used to resolve relative paths. - The path to translate. - - A PATH split up its parts, with references to environment variables - resolved and duplicate entries removed. - - - - - Initializes a new instance of the class. - - - - - The name pattern to include/exclude. - - - - - If then the pattern will be used; - otherwise, skipped. The default is . - - - - - If then the pattern will be used; - otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Removes all items from the . - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A set of patterns, mostly used to include or exclude certain files. - - - - The individual patterns support if and unless attributes - to specify that the element should only be used if or unless a given - condition is met. - - - The and - elements load patterns from a file. When the file is a relative path, - it will be resolved relative to the project base directory in which - the patternset is defined. Each line of this file is taken to be a - pattern. - - - The number sign (#) as the first non-blank character in a line denotes - that all text following it is a comment: - - - - - - Patterns can be grouped to sets, and later be referenced by their - . - - - When used as a standalone element (global type), any properties that - are referenced will be resolved when the definition is processed, not - when it actually used. Passing a reference to a nested build file - will not cause the properties to be re-evaluated. - - - To improve reuse of globally defined patternsets, avoid referencing - any properties altogether. - - - - - Define a set of patterns that matches all .cs files that do not contain - the text Test in their name. - - - - - - - ]]> - - - - - Define two sets. One holding C# sources, and one holding VB sources. - Both sets only include test sources when the test property is - set. A third set combines both C# and VB sources. - - - - - - - - - - - - - - - - - ]]> - - - - - Define a set from patterns in a file. - - - - - - - ]]> - - - - - Defines a patternset with patterns that are loaded from an external - file, and shows the behavior when that patternset is passed as a - reference to a nested build script. - - - External file "c:\foo\build\service.lst" holding patterns - of source files to include for the Foo.Service assembly: - - - - - Main build script located in "c:\foo\default.build": - - - - - - - - - - - - - - - - ]]> - - Nested build script located in "c:\foo\services\default.build" - which uses the patternset to feed sources files to the C# compiler: - - - - - - - - - - - ]]> - - At the time when the patternset is used in the "service" - build script, the following source files in "c:\foo\services\src" - match the defined patterns: - - - - - You should have observed that: - - - - - although the patternset is used from the "service" - build script, the path to the external file is resolved relative - to the base directory of the "main" build script in - which the patternset is defined. - - - - - the "TraceListener.cs" file is included, even though - the "build.debug" property was changed to false - after the patternset was defined (but before it was passed to - the nested build, and used). - - - - - - - - - Initializes a new instance of the class. - - - - - Adds a nested set of patterns, or references other standalone - patternset. - - The to add. - - - - Defines a single pattern for files to include. - - - - - Loads multiple patterns of files to include from a given file, set - using the parameter. - - - - - Defines a single pattern for files to exclude. - - - - - Loads multiple patterns of files to exclude from a given file, set - using the parameter. - - - - - Contains HTTP proxy settings used to process requests to Internet - resources. - - - - - Initializes a new instance of the class. - - - - - Gets a instance representing the current - . - - - A instance representing the current - , or - if this proxy should not be used to connect to the external resource. - - - - - The name of the proxy host. - - - - - The port number on to use. - - - - - Specifies whether to bypass the proxy server for local addresses. - The default is . - - - - - The credentials to submit to the proxy server for authentication. - - - - - Indicates if the proxy should be used to connect to the external - resource. If then the proxy will be used; - otherwise, not. The default is . - - - - - Indicates if the proxy should not be used to connect to the external - resource. If then the proxy will be used; - otherwise, not. The default is . - - - - - Represents an element of which the XML is processed by its parent task - or type. - - - - - Gets the XML that this element represents. - - - - - Gets a value indicating whether the element is performing additional - processing using the that was use to - initialize the element. - - - , as the XML that represents this build - element is processed by the containing task or type. - - - - - ReplaceTokens filter token. - - - - - Token to be replaced. - - - - - New value of token. - - - - - Indicates if the token should be used to replace values. - If then the token will be used; - otherwise, not. The default is . - - - - - Indicates if the token should not be used to replace values. - If then the token will be used; - otherwise, not. The default is . - - - - - Represents an XML namespace. - - - - - The prefix to associate with the namespace. - - - - - The associated XML namespace URI. - - - - - Indicates if the namespace should be added to the . - If then the namespace will be added; - otherwise, skipped. The default is . - - - - - Indicates if the namespace should not be added to the . - list. If then the parameter will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified prefix. - - The prefix of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents an XSLT extension object. The object should have a default - parameterless constructor and the return value should be one of the - four basic XPath data types of number, string, Boolean or node set. - - - - - Initializes a new instance of the - class. - - - - - The namespace URI to associate with the extension object. - - - The namespace URI to associate with the extension object, or - if not set. - - - - - The full type name of the XSLT extension object. - - - - - The assembly which contains the XSLT extension object. - - - - - Indicates if the extension object should be added to the XSLT argument - list. If then the extension object will be - added; otherwise, skipped. The default is . - - - - - Indicates if the extension object should not be added to the XSLT argument - list. If then the extension object will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the - specified instance. - - - - - Initializes a new instance of the - class with the - specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added - to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the - end of the collection. - - The array of - elements to be added to the end of the collection. - - - - Adds the elements of a - to the end of the collection. - - The - to be added to the end of the collection. - - - - Determines whether a is in the - collection. - - The to locate - in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the - specified value is in the collection. - - The argument value to locate in the - collection. - - if a - with value is found in the collection; - otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - The one-dimensional array that is the - destination of the elements copied from the collection. The array - must have zero-based indexing. - The zero-based index in - at which copying begins. - - - - Retrieves the index of a specified - object in the collection. - - The object for - which the index is returned. - - The index of the specified . If the - is not currently a member of the - collection, it returns -1. - - - - - Inserts a into the collection at - the specified index. - - The zero-based index at which - should be inserted. - The to - insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire - collection. - - - - - Removes a member from the collection. - - The to remove - from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get - or set. - - - - Gets the with the specified name. - - The name of the - to get. - - - - Enumerates the elements of a - . - - - - - Initializes a new instance of the - class - with the specified . - - The collection that should be - enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents an XSLT parameter. - - - - - Initializes a new instance of the - class. - - - - - The name of the XSLT parameter. - - - The name of the XSLT parameter, or if - not set. - - - - - The namespace URI to associate with the parameter. - - - The namespace URI to associate with the parameter, or - if not set. - - - - - The value of the XSLT parameter. - - - The value of the XSLT parameter, or if - not set. - - - - - Indicates if the parameter should be added to the XSLT argument list. - If then the parameter will be added; - otherwise, skipped. The default is . - - - - - Indicates if the parameter should not be added to the XSLT argument - list. If then the parameter will be - added; otherwise, skipped. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Resolves assemblies by caching assemblies that were loaded. - - - - - Initializes an instanse of the - class. - - - - - Initializes an instanse of the - class in the context of the given . - - - - - Installs the assembly resolver by hooking up to the - event. - - - - - Uninstalls the assembly resolver. - - - - - Resolves an assembly not found by the system using the assembly - cache. - - The source of the event. - A that contains the event data. - - The loaded assembly, or if not found. - - - - - Occurs when an assembly is loaded. The loaded assembly is added - to the assembly cache. - - The source of the event. - An that contains the event data. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the in which - the is executing - - - - - Holds the loaded assemblies. - - - - - Holds the in which the - is executing. - - - The in which the - is executing or if the - is not executing in the context of a . - - - - - Represents a valid command-line argument. - - - - - Sets the value of the argument on the specified object. - - The object on which the value of the argument should be set. - The argument is required and no value was specified. - - - The matching property is collection-based, but is not initialized - and cannot be written to. - - -or- - - The matching property is collection-based, but has no strongly-typed - Add method. - - -or- - - The matching property is collection-based, but the signature of the - Add method is not supported. - - - - - - Assigns the specified value to the argument. - - The value that should be assigned to the argument. - - Duplicate argument. - -or- - Invalid value. - - - - - Indicates whether the specified is a - . - - - if can be assigned - to ; otherwise, . - - - - - Indicates whether the specified is collection-based. - - - if can be assigned - to and is not backed by a - that can be assigned to ; - otherwise, . - - - - - Indicates whether the specified is an array. - - - if is an array; - otherwise, . - - - - - Gets the property that backs the argument. - - - The property that backs the arguments. - - - - - Gets the underlying of the argument. - - - The underlying of the argument. - - - If the of the argument is a collection type, - this property will returns the underlying type of that collection. - - - - - Gets the long name of the argument. - - The long name of the argument. - - - - Gets the short name of the argument. - - The short name of the argument. - - - - Gets the description of the argument. - - The description of the argument. - - - - Gets a value indicating whether the argument is required. - - - if the argument is required; otherwise, - . - - - - - Gets a value indicating whether a mathing command-line argument - was already found. - - - if a matching command-line argument was - already found; otherwise, . - - - - - Gets a value indicating whether the argument can be specified multiple - times. - - - if the argument may be specified multiple - times; otherwise, . - - - - - Gets a value indicating whether the argument can only be specified once - with a certain value. - - - if the argument should always have a unique - value; otherwise, . - - - - - Gets the of the property to which the argument - is applied. - - - The of the property to which the argument is - applied. - - - - - Gets a value indicating whether the argument is collection-based. - - - if the argument is backed by a - that can be assigned to and is not backed - by a that can be assigned to - ; otherwise, . - - - - - Gets a value indicating whether the argument is a set of name/value - pairs. - - - if the argument is backed by a - that can be assigned to ; otherwise, - . - - - - - Gets a value indicating whether the argument is array-based. - - - if the argument is backed by an array; - otherwise, . - - - - - Gets a value indicating whether the argument is the default argument. - - - if the argument is the default argument; - otherwise, . - - - - - Gets a value indicating whether the argument cannot be combined with - other arguments. - - - if the argument cannot be combined with other - arguments; otherwise, . - - - - - Allows control of command line parsing. - - - - - Initializes a new instance of the class - with the specified argument type. - - Specifies the checking to be done on the argument. - - - - Gets or sets the checking to be done on the argument. - - The checking that should be done on the argument. - - - - Gets or sets the long name of the argument. - - The long name of the argument. - - - - Gets or sets the short name of the argument. - - The short name of the argument. - - - - Gets or sets the description of the argument. - - The description of the argument. - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified name. - - The name of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The exception that is thrown when one of the command-line arguments provided - is not valid. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the class - with a descriptive message and an inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Used to control parsing of command-line arguments. - - - - - Indicates that this field is required. An error will be displayed - if it is not present when parsing arguments. - - - - - Only valid in conjunction with Multiple. - Duplicate values will result in an error. - - - - - Inidicates that the argument may be specified more than once. - Only valid if the argument is a collection - - - - - Inidicates that if this argument is specified, no other arguments may be specified. - - - - - The default type for non-collection arguments. - The argument is not required, but an error will be reported if it is specified more than once. - - - - - The default type for collection arguments. - The argument is permitted to occur multiple times, but duplicate - values will cause an error to be reported. - - - - - Commandline parser. - - - - - Initializes a new instance of the class - using possible arguments deducted from the specific . - - The from which the possible command-line arguments should be retrieved. - A value indicating whether or not a response file is able to be used. - is a null reference. - - - - Parses an argument list. - - The arguments to parse. - The destination object on which properties will be set corresponding to the specified arguments. - is a null reference. - The of does not match the argument specification that was used to initialize the parser. - - - - Splits a string and removes any empty strings from the - result. Same functionality as the - public string[] Split(char[] separator, StringSplitOptions options) - method in .Net 2.0. Replace with that call when 2.0 is standard. - - - - the array of strings - - - - Read a response file and parse the arguments as usual. - - The response file to load arguments - - - - Parse the argument list using the - - - - - - Returns the that's applied - on the specified property. - - The property of which applied should be returned. - - The that's applied to the - , or a null reference if none was applied. - - - - - Gets a logo banner using version and copyright attributes defined on the - or the - . - - - A logo banner. - - - - - Gets the usage instructions. - - The usage instructions. - - - - Gets a value indicating whether no arguments were specified on the - command line. - - - - - Marks a command-line option as being the default option. When the name of - a command-line argument is not specified, this option will be assumed. - - - - - Initializes a new instance of the class - with the specified argument type. - - Specifies the checking to be done on the argument. - - - - Provides modified version for Copy and Move from the File class that - allow for filter chain processing. - - - - - Constant buffer size for copy/move functions. - - Default value is 8k - - - - Copies a file filtering its content through the filter chain. - - - The file to copy - - - The file to copy to - - - Chain of filters to apply when copying, or is no - filters should be applied. - - - The encoding used to read the soure file. - - - The encoding used to write the destination file. - - - - - Moves a file filtering its content through the filter chain. - - - The file to move. - - - The file to move move to. - - - Chain of filters to apply when moving, or is no - filters should be applied. - - - The encoding used to read the soure file. - - - The encoding used to write the destination file. - - - - - Copies a directory while filtering its file content through the filter chain. - - - Source directory to copy from. - - - Destination directory to copy to. - - - Chain of filters to apply when copying, or is no - filters should be applied. - - - The encoding used to read the soure file. - - - The encoding used to write the destination file. - - - - - Moves a directory while filtering its file content through the filter chain. - - - Source directory to move from. - - - Destination directory to move to. - - - Chain of filters to apply when copying, or is no - filters should be applied. - - - The encoding used to read the soure file. - - - The encoding used to write the destination file. - - - - - Generates a new temporary directory name based on the system's - temporary path. - - - The temp directory name. - - - - - Reads a file filtering its content through the filter chain. - - The file to read. - Chain of filters to apply when reading, or is no filters should be applied. - The encoding used to read the file. - - If is , - then the system's ANSI code page will be used to read the file. - - - - - Returns a uniquely named empty temporary directory on disk. - - - A representing the temporary directory. - - - - - Combines two path strings. - - The first path. - The second path. - - A string containing the combined paths. If one of the specified - paths is a zero-length string, this method returns the other path. - If contains an absolute path, this method - returns . - - - On *nix, processing is delegated to . - - On Windows, this method normalized the paths to avoid running into - the 260 character limit of a path and converts forward slashes in - both and to - the platform's directory separator character. - - - - - - Returns Absolute Path (Fix for 260 Char Limit of Path.GetFullPath(...)) - - The file or directory for which to obtain absolute path information. - Path Resolved - path is a zero-length string, contains only white space or contains one or more invalid characters as defined by . - is . - - - - Returns the home directory of the current user. - - - The home directory of the current user. - - - - - Scans a list of directories for the specified filename. - - The list of directories to search. - The name of the file to look for. - Specifies whether the directory should be searched recursively. - - The directories are scanned in the order in which they are defined. - - - The absolute path to the specified file, or null if the file was - not found. - - - - - Helper class for determining whether assemblies are located in the - Global Assembly Cache. - - - - - Initializes a new instance of the class in - the context of the given . - - - - - Determines whether an assembly is installed in the Global - Assembly Cache given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - if is - installed in the Global Assembly Cache; otherwise, - . - - - - To determine whether the specified assembly is installed in the - Global Assembly Cache, the assembly is loaded into a separate - . - - - If the family of the current runtime framework does not match the - family of the current target framework, this method will return - for all assemblies as there's no way to - determine whether a given assembly is in the Global Assembly Cache - for another framework family than the family of the current runtime - framework. - - - - - - Holds the in which assemblies will be loaded - to determine whether they are in the Global Assembly Cache. - - - - - Holds the context of the . - - - - - Holds a list of assembly files for which already has been determined - whether they are located in the Global Assembly Cache. - - - - The key of the is the full path to the - assembly file and the value is a indicating - whether the assembly is located in the Global Assembly Cache. - - - - - - Holds a value indicating whether the object has been disposed. - - - - - Gets the context of the . - - - The context of the . - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Determines whether an assembly is installed in the Global - Assembly Cache given its file name or path. - - The name or path of the file that contains the manifest of the assembly. - - if is - installed in the Global Assembly Cache; otherwise, - . - - - - - Provides a set of helper methods related to reflection. - - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Loads the type specified in the type string with assembly qualified name. - - The assembly qualified name of the type to load. - Flag set to to throw an exception if the type cannot be loaded. - - is and - an error is encountered while loading the , or - is not an assembly qualified name. - - - If the cannot be instantiated from the assembly - qualified type name, then we'll try to instantiate the type using its - simple type name from an already loaded assembly with an assembly - name mathing the assembly in the assembly qualified type name. - - - The type loaded or if it could not be loaded. - - - - - Provides resource support to NAnt assemblies. This class cannot - be inherited from. - - - - - Prevents the class from being - instantiated explicitly. - - - - - Registers the assembly to be used as the fallback if resources - aren't found in the local satellite assembly. - - - A that represents the - assembly to register. - - - The following example shows how to register a shared satellite - assembly. - - - - - - - - Returns the value of the specified string resource. - - - A that contains the name of the - resource to get. - - - A that contains the value of the - resource localized for the current culture. - - - The returned resource is localized for the cultural settings of the - current . - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - the cultural settings of the current . - - - - - - - - Returns the value of the specified string resource localized for - the specified culture. - - - - - A that contains the value of the - resource localized for the specified culture. - - - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - a specific culture. - - - - - - - - Returns the value of the specified string resource localized for - the specified culture for the specified assembly. - - - A that contains the name of the - resource to get. - - - A that represents - the culture for which the resource is localized. - - - A - - - A that contains the value of the - resource localized for the specified culture. - - - - The GetString method is thread-safe. - - - - The following example demonstrates the GetString method using - specific culture and assembly. - - - - - - - - Registers the specified assembly. - - - A that represents the - assembly to register. - - - - - Determines the manifest resource name of the resource holding the - localized strings. - - The name of the assembly. - - The manifest resource name of the resource holding the localized - strings for the specified assembly. - - - The manifest resource name of the resource holding the localized - strings should match the name of the assembly, minus Tasks - suffix. - - - - - Groups a set of useful manipulation and validation - methods. - - - - - Initializes a new instance of the class. - - - Prevents instantiation of the class. - - - - - Determines whether the last character of the given - matches the specified character. - - The string. - The character. - - if the last character of - matches ; otherwise, . - - is . - - - - Indicates whether or not the specified is - or an string. - - The value to check. - - if is - or an empty string (""); otherwise, . - - - - - Converts an empty string ("") to . - - The value to convert. - - if is an empty - string ("") or ; otherwise, . - - - - - Converts to an empty string. - - The value to convert. - - An empty string if is ; - otherwise, . - - - - - Concatenates a specified separator between each - element of a specified , yielding a - single concatenated string. - - A . - A . - - A consisting of the elements of - interspersed with the separator string. - - - - For example if is ", " and the elements - of are "apple", "orange", "grape", and "pear", - returns "apple, orange, - grape, pear". - - - If is , an empty - string () is used instead. - - - - - - Creates a shallow copy of the specified . - - The that should be copied. - - A shallow copy of the specified . - - - - - Thrown whenever an error occurs during the build. - - - - - The location of the exception in the build document (xml file). - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the class - with the specified descriptive message and inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with a descriptive message and the location in the build file that - caused the exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - - - - Initializes a new instance of the class - with a descriptive message, the location in the build file and an - instance of the exception that is the cause of the current exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - - Creates and returns a string representation of the current - exception. - - - A string representation of the current exception. - - - - - Gets the raw message as specified when the exception was - constructed. - - - The raw message as specified when the exception was - constructed. - - - - - Gets the location in the build file of the element from which the - exception originated. - - - The location in the build file of the element from which the - exception originated. - - - - - Gets a message that describes the current exception. - - - The error message that explains the reason for the exception. - - - Adds location information to the message, if available. - - - - - Represents the set of command-line options supported by NAnt. - - - - - Gets or sets the target framework to use (overrides - NAnt.exe.config settings) - - - The framework that should be used. - - - For a list of possible frameworks, see NAnt.exe.config, possible - values include "net-1.0", "net-1.1", etc. - - - - - Gets or sets the target framework to use (overrides - NAnt.exe.config settings) - - - The framework that should be used. - - - For a list of possible frameworks, see NAnt.exe.config, possible - values include "net-1.0", "net-1.1", etc. - - - - - Gets or sets the buildfile that should be executed. - - - The buildfile that should be executed. - - - Can be both a file or an URI. - - - - - Pauses before program ends. - - - for pausing on program end; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether more information should be - displayed during the build process. - - - if more information should be displayed; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether debug information should be - displayed during the build process. - - - if debug information should be displayed; - otherwise, . The default is . - - - - - Gets or sets a value indicating whether only error and debug debug messages should be - displayed during the build process. - - - if only error or warning messages should be - displayed; otherwise, . The default is - . - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. The default is - . - - - - - Gets a value indicating whether parent directories should be searched - for a buildfile. - - - if parent directories should be searched for - a build file; otherwise, . The default is - . - - - - - Gets or sets the indentation level of the build output. - - - The indentation level of the build output. The default is 0. - - - - - Gets or sets the list of properties that should be set. - - - The list of properties that should be set. - - - - - Gets or sets the of logger to add to the list - of listeners. - - - The of logger to add to the list of - listeners. - - - The should derive from . - - - - - Gets or sets the name of the file to log output to. - - - The name of the file to log output to. - - - - - Gets a collection containing fully qualified type names of classes - implementating that should be added - to the project as listeners. - - - A collection of fully qualified type names that should be added as - listeners to the . - - - - - Gets a collection of assemblies to load extensions from. - - - A collection of assemblies to load extensions from. - - - - - Gets or sets a value indicating whether help - should be printed. - - - if help should be - printed; otherwise, . The default is - . - - - - - Gets or sets a value indicating whether the logo banner should be - printed. - - - if the logo banner should be printed; otherwise, - . The default is . - - - - - Gets or sets a value indicating whether the NAnt help should be - printed. - - - if NAnt help should be printed; otherwise, - . The default is . - - - - - Gets a collection containing the targets that should be executed. - - - A collection that contains the targets that should be executed. - - - - - Custom configuration section handler for the element. - - - - - This just passed things through. Return the node read from the config file. - - - - - Main entry point to NAnt that is called by the ConsoleStub. - - - - - Starts NAnt. This is the Main entry point. - - Command Line args, or whatever you want to pass it. They will treated as Command Line args. - - The exit code. - - - - - Prints the projecthelp to the console. - - The build file to show help for. - - is loaded and transformed with - ProjectHelp.xslt, which is an embedded resource. - - - - - Gets the file name for the build file in the specified directory. - - The directory to look for a build file. When in doubt use Environment.CurrentDirectory for directory. - Look for a build file with this pattern or name. If null look for a file that matches the default build pattern (*.build). - Whether or not to search the parent directories for a build file. - The path to the build file or null if no build file could be found. - - - - Loads the extension assemblies in the current - and scans them for extensions. - - The extension assemblies to load. - The which will be used to output messages to the build log. - - - - Dynamically constructs an instance of - the class specified. - - - - At this point, only looks in the assembly where - is defined. - - - The fully qualified name of the logger that should be instantiated. - Type could not be loaded. - does not implement . - - - - Dynamically constructs an instance of - the class specified. - - - - At this point, only looks in the assembly where - is defined. - - - The fully qualified name of the listener that should be instantiated. - Type could not be loaded. - does not implement . - - - - Add the listeners specified in the command line arguments, - along with the default listener, to the specified project. - - The command-line options. - The to add listeners to. - - - - Spits out generic help info to the console. - - - - - Write the message of the specified and - the inner exceptions to . - - The to write to . - - - - Creates a new instance of the class - for the specified class in the specified - . - - - An for the specified - is cached for future use. - - The containing the . - The class representing the . - - - - Creates a new instance of the - class for the specified class in the - specified. - - The containing the . - The class representing the . - - - - Gets the name of the class that can be - created using this . - - - The name of the class that can be created - using this . - - - - - Gets the name of the data type which the - can create. - - - The name of the data type which the - can create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for - the specified task is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of task for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified capacity. - - - - - Inherits Properties from an existing property - dictionary Instance - - DataType list to inherit - - - - Used for searching filesystem based on given include/exclude rules. - - - Simple client code for testing the class. - - while (true) { - DirectoryScanner scanner = new DirectoryScanner(); - - Console.Write("Scan Basedirectory : "); - string s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.BaseDirectory = s; - - while(true) { - Console.Write("Include pattern : "); - s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.Includes.Add(s); - } - - while(true) { - Console.Write("Exclude pattern : "); - s = Console.ReadLine(); - if (s.Length == 0) break; - scanner.Excludes.Add(s); - } - - foreach (string name in scanner.FileNames) - Console.WriteLine("file:" + name); - foreach (string name in scanner.DirectoryNames) - Console.WriteLine("dir :" + name); - - Console.WriteLine(""); - } - - - - - - Initializes a new instance of the . - - - On unix, patterns are matching case-sensitively; otherwise, they - are matched case-insensitively. - - - - - Initializes a new instance of the - specifying whether patterns are to be match case-sensitively. - - Specifies whether patterns are to be matched case-sensititely. - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Uses and search criteria (relative to - or absolute), to search for filesystem objects. - - - - - Parses specified NAnt search patterns for search directories and - corresponding regex patterns. - - In. NAnt patterns. Absolute or relative paths. - Out. Regex patterns. Absolute canonical paths. - Out. Non-regex files. Absolute canonical paths. - In. Whether to allow a pattern to add search directories. - - - - Given a NAnt search pattern returns a search directory and an regex - search pattern. - - Whether this pattern is an include or exclude pattern - NAnt searh pattern (relative to the Basedirectory OR absolute, relative paths refering to parent directories ( ../ ) also supported) - Out. Absolute canonical path to the directory to be searched - Out. Whether the pattern is potentially recursive or not - Out. Whether this is a regex pattern or not - Out. Regex search pattern (absolute canonical path) - - - - Searches a directory recursively for files and directories matching - the search criteria. - - Directory in which to search (absolute canonical path) - Whether to scan recursively or not - - - - Converts search pattern to a regular expression pattern. - - Search pattern relative to the search directory. - Regular expresssion - - - - Gets or set a value indicating whether or not to use case-sensitive - pattern matching. - - - - - Gets the collection of include patterns. - - - - - Gets the collection of exclude patterns. - - - - - The base directory to scan. The default is the - current directory. - - - - - Gets the list of files that match the given patterns. - - - - - Gets the list of directories that match the given patterns. - - - - - Gets the list of directories that were scanned for files. - - - - - Indicates whether or not the directory scanner included everything - that it scanned. - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a string representing a list of the strings in the collection. - - - A string that represents the contents. - - - - - Initialize a new instance of the - class specifying whether or not string comparison should be - case-sensitive. - - Specifies whether or not string comparison should be case-sensitive. - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Determines whether the specified string is in the - . - - The string to locate in the . The value can be . - - if value is found in the ; otherwise, . - - - String comparisons within the - are only case-sensitive if is - - - - - - Searches for the specified string and returns the zero-based index - of the first occurrence within the . - - The string to locate. The value can be . - - The zero-based index of the first occurrence of - in the , if found; otherwise, -1. - - - String comparisons within the - are only case-sensitive if is - . - - - - - Gets a value indicating whether string comparison is case-sensitive. - - - A value indicating whether string comparison is case-sensitive. - - - - - Gets the value of the specified property. - - The name of the property to get the value of. - - The value of the specified property. - - - - - Splits an input string into a sequence of tokens used during parsing. - - - - - Available tokens - - - - - Encalsulates information about installed frameworks incuding version - information and directory locations for finding tools. - - - - - Resolves the specified assembly to a full path by matching it - against the reference assemblies. - - The file name of the assembly to resolve (without path information). - - An absolute path to the assembly, or if the - assembly could not be found or no reference assemblies are configured - for the current framework. - - - Whether the file name is matched case-sensitively depends on the - operating system. - - - - - Searches the list of tool paths of the current framework for the - given file, and returns the absolute path if found. - - The file name of the tool to search for. - - The absolute path to if found in one of the - configured tool paths; otherwise, . - - is . - - - The configured tool paths are scanned in the order in which they - are defined in the framework configuration. - - - The file name of the tool to search should include the extension. - - - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Gets the name of the framework. - - - The name of the framework. - - - - - Gets the family of the framework. - - - The family of the framework. - - - - - Gets the description of the framework. - - - The description of the framework. - - - - - Gets the vendor of the framework. - - - The vendor of the framework. - - - - - Gets the version of the framework. - - - The version of the framework. - - The framework is not valid. - - When is not configured, the framework is not - considered valid. - - - - - Gets the Common Language Runtime version of the framework. - - - The Common Language Runtime version of the framework. - - The framework is not valid. - - When is , the - framework is not considered valid. - - - - - Gets the CLR type of the framework. - - - The CLR type of the framework. - - The framework is not valid. - - - - Gets the Visual Studio version that corresponds with this - framework. - - - The Visual Studio version that corresponds with this framework. - - The framework is not valid. - There is no version of Visual Studio that corresponds with this framework. - - - - Gets the base directory of the framework tools for the framework. - - - The base directory of the framework tools for the framework. - - The framework is not valid. - - - - Gets the runtime information for this framework. - - - The runtime information for the framework or - if no runtime information is configured for the framework. - - The framework is not valid. - - - - Gets the directory where the system assemblies for the framework - are located. - - - The directory where the system assemblies for the framework are - located. - - The framework is not valid. - - - - Gets the directory containing the SDK tools for the framework. - - - The directory containing the SDK tools for the framework or a null - reference if the configured sdk directory does not exist, or is not - valid. - - The framework is not valid. - - - - Gets the used to initialize this framework. - - - The used to initialize this framework. - - The framework is not valid. - - - - Gets the set of assemblies and directories that should scanned for - NAnt tasks, types or functions. - - - The set of assemblies and directories that should be scanned for - NAnt tasks, types or functions. - - The framework is not valid. - - - - Returns a value indicating whether the current framework is valid. - - - if the framework is installed and correctly - configured; otherwise, . - - - - - Gets the reference assemblies for the current framework. - - - The reference assemblies for the current framework. - - The framework is not valid. - - - - Gets the tool paths for the current framework. - - - The tool paths for the current framework. - - The framework is not valid. - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified capacity. - - - - - Defines the types of frameworks. - - - - - Frameworks that are supported on the current platform, but are not - installed. - - - - - Frameworks that are installed on the current system. - - - - - Retrieves installation state attributes. - - - - - Frameworks that typically target full desktop devices. - - - - - Frameworks that target compact devices. - - - - - Frameworks that run in a browser. - - - - - Retrieves device attributes. - - - - - Frameworks released as part of the open-source Mono - project. - - - - - Frameworks released by Microsoft. - - - - - Retrieves vendor attributes. - - - - - All frameworks supported on the current platform, regarless of their - installation state, target device or vendor. - - - - - Stores the file name, line number and column number to record a position - in a text file. - - - - - Creates a location consisting of a file name, line number and - column number. - - - can be a local URI resource, e.g., file:///C:/WINDOWS/setuplog.txt. - - - - - Creates a location consisting of a file name. - - - can be a local URI resource, e.g., file:///C:/WINDOWS/setuplog.txt. - - - - - Creates an "unknown" location. - - - - Private Init function. - - - - Returns the file name, line number and a trailing space. An error - message can be appended easily. For unknown locations, returns - an empty string. - - - - - Gets a string containing the file name for the location. - - - The file name includes both the file path and the extension. - - - - - Gets the line number for the location. - - - Lines start at 1. Will be zero if not specified. - - - - - Gets the column number for the location. - - - Columns start a 1. Will be zero if not specified. - - - - - Maps XML nodes to the text positions from their original source. - - - - - Initializes a new instance of the class. - - - - - Determines if a file has been loaded by the current project. - - The file to check. - - if the specified file has already been loaded - by the current project; otherwise, . - - - - - Adds an to the map. - - - An can only be added to the map once. - - - - - Returns the in the XML file for the given node. - - - The must be from an - that has been added to the map. - - - - - Represents a position in the build file. - - - - - Initializes a new instance of the - with the speified line and column. - - The line coordinate of the position. - The column coordinate of the position. - - - - The line coordinate of the position. - - - - - The column coordinate of the position. - - - - - Defines the set of levels recognised by the NAnt logging system. - - - - - Designates fine-grained informational events that are most useful - to debug a build process. - - - - - Designates events that offer a more detailed view of the build - process. - - - - - Designates informational events that are useful for getting a - high-level view of the build process. - - - - - Designates potentionally harmful events. - - - - - Designates error events. - - - - - Can be used to suppress all messages. - - - No events should be logged with this . - - - - - Specialized for - that ignores case when converting from string. - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Class representing an event occurring during a build. - - - - An event is built by specifying either a project, a task or a target. - - - A level event will only have a - reference. - - - A level event will have and - references. - - - A level event will have , - and references. - - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Initializes a new instance of the - class for a level event. - - The that emitted the event. - - - - Gets or sets the message associated with this event. - - - The message associated with this event. - - - - - Gets or sets the priority level associated with this event. - - - The priority level associated with this event. - - - - - Gets or sets the associated with this event. - - - The associated with this event. - - - - - Gets the that fired this event. - - - The that fired this event. - - - - - Gets the that fired this event. - - - The that fired this event, or a null reference - if this is a level event. - - - - - Gets the that fired this event. - - - The that fired this event, or - if this is a or level - event. - - - - - Represents the method that handles the build events. - - The source of the event. - A that contains the event data. - - - - Instances of classes that implement this interface can register to be - notified when things happen during a build. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - - - Interface used by NAnt to log the build output. - - - Depending on the supplied command-line arguments, NAnt will set the - to or a - with a file as backend store. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Gets or sets the highest level of message this logger should respond - to. - - The highest level of message this logger should respond to. - - Only messages with a message level higher than or equal to the given - level should actually be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. - - - - - Gets or sets the to which the logger is - to send its output. - - - - - Initializes a new instance of the - class. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - Only messages with a priority higher or equal to the threshold of - the logger will actually be output in the build log. - - - - - Empty implementation which allows derived classes to receive the - output that is generated in this logger. - - The message being logged. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The priority of the message to output. - The message to output. - The number of characters that the message should be indented. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The event to output. - - - - Outputs an indented message to the build log if its priority is - greather than or equal to the of the - logger. - - The event to output. - The number of characters that the message should be indented. - - - - Holds a stack of reports for all running builds. - - - - - Gets or sets the highest level of message this logger should respond - to. - - - The highest level of message this logger should respond to. - - - Only messages with a message level higher than or equal to the given - level should be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - if output is to be unadorned so that emacs - and other editors can parse files names, etc. The default is - . - - - - - Gets or sets the to which the logger is - to send its output. - - - The to which the logger sends its output. - - - - - Used to store information about a build, to allow better reporting to - the user. - - - - - Errors encountered so far. - - - - - Warnings encountered so far. - - - - - The start time of the build process. - - - - - Buffers log messages from DefaultLogger, and sends an e-mail with the - results. - - - The following properties are used to send the mail : - - - Property - Description - - - MailLogger.mailhost - Mail server to use. [default: localhost] - - - MailLogger.from - The address of the e-mail sender. - - - MailLogger.failure.notify - Send build failure e-mails ? [default: true] - - - MailLogger.success.notify - Send build success e-mails ? [default: true] - - - MailLogger.failure.to - The address to send build failure messages to. - - - MailLogger.success.to - The address to send build success messages to. - - - MailLogger.failure.subject - The subject of build failure messages. [default: "Build Failure"] - - - MailLogger.success.subject - The subject of build success messages. [default: "Build Success"] - - - MailLogger.success.attachments - The ID of a fileset holdng set of files to attach when the build is successful. - - - MailLogger.failure.attachments - The ID of a fileset holdng set of files to attach when the build fails. - - - MailLogger.body.encoding - The encoding type of the body of the e-mail message. [default: system's ANSI code page] - - - MailLogger.smtp.username - The name of the user to login to the SMTP server. - - - MailLogger.smtp.password - The password of the specified user. - - - MailLogger.smtp.enablessl - Specifies whether to use SSL to encrypt the connection. [default: false] - - - MailLogger.smtp.port - The SMTP server port to connect to. [default: 25] - - - - - - - Initializes a new instance of the - class. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished, and send an e-mail with - the build results. - - The source of the event. - A object that contains the event data. - - - - Receives and buffers log messages. - - The message being logged. - - - - Gets the value of the specified property. - - Properties to obtain value from. - Suffix of property name. "MailLogger" will be prepended internally. - Value returned if property is not present in . - Value indicating whether the property should exist, or have a default value set. - - The value of the specified property; or the default value if the - property is not present in . - - is , and the specified property is not present and no default value has been given. - - - - Buffer in which the message is constructed prior to sending. - - - - - Holds the stack of currently executing projects. - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specified instance. - - - - - Initializes a new instance of the - class with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Implements a for writing information to - the NAnt logging infrastructure. - - - - - Initializes a new instance of the class - for the specified with the specified output - level and format provider. - - Determines the indentation level. - The with which messages will be output to the build log. - An object that controls formatting. - - - - Writes a character array to the buffer. - - The character array to write to the text stream. - - - - Writes a string to the buffer. - - - - - - Writes an empty string to the logging infrastructure. - - - - - Writes a string to the logging infrastructure. - - The string to write. If is a null reference, only the line termination characters are written. - - - - Writes out a formatted string using the same semantics as - . - - The formatting string. - The object array to write into format string. - - - - Causes any buffered data to be written to the logging infrastructure. - - - - - Closes the current writer and releases any system resources - associated with the writer. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Gets the in which the output is written. - - - The always writes output in UTF8 - encoding. - - - - - Gets the with which messages will be output to - the build log. - - - - - Used to search for files on the PATH. - - - - The local directory is not searched (since this would already be covered - by normal use of the includes element). - - - Also, advanced pattern matching isn't supported: you need to know the - exact name of the file. - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Adds a file to the list of files to be scanned for. - - The filename or search pattern to add to the list. - - - - Scans all direcetories in the PATH environment variable for files. - - - List of matching files found in the PATH. - - - - - Scans all directories in the given environment variable for files. - - The environment variable of which the directories should be scanned. - - List of matching files found in the directory of the given - environment variable. - - - - - Creates a shallow copy of the specified . - - The that should be copied. - - A shallow copy of the specified . - - - - - Returns a value indicating whether NAnt is running in 64-bit mode. - - - if NAnt is running in 64-bit mode; otherwise, - . - - - - - Returns a value indicating whether NAnt is running in 32-bit mode. - - - Note that even if the platform is 64-bit, NAnt may be running in - 32-bit mode. - - - if NAnt is running in 32-bit mode; otherwise, - . - - - - - Returns a value indicating whether NAnt is running on Windows. - - - if NAnt is running on Windows; - otherwise, . - - - - - Central representation of a NAnt project. - - - - The method will initialize the project with the build - file specified in the constructor and execute the default target. - - - - - - - - If no target is given, the default target will be executed if specified - in the project. - - - - - - - - - Constant for the "visiting" state, used when traversing a DFS of - target dependencies. - - - - - Constant for the "visited" state, used when traversing a DFS of - target dependencies. - - - - - Holds the logger for this class. - - - - - Holds the default threshold for build loggers. - - - - - Initializes a new class with the given - document, message threshold and indentation level. - - Any valid build format will do. - The message threshold. - The project indentation level. - - - - Initializes a new class with the given - document, message threshold and indentation level, and using - the specified to load internal configuration - settings. - - Any valid build format will do. - The message threshold. - The project indentation level. - The NAnt should use to initialize configuration settings. - - This constructor is useful for developers using NAnt as a class - library. - - - - - Initializes a new class with the given - source, message threshold and indentation level. - - - The full path to the build file. - This can be of any form that accepts. - - The message threshold. - The project indentation level. - - If the source is a uri of form 'file:///path' then use the path part. - - - - - Initializes a new class with the given - source, message threshold and indentation level, and using - the specified to load internal configuration - settings. - - - The full path to the build file. - This can be of any form that accepts. - - The message threshold. - The project indentation level. - The NAnt should use to initialize configuration settings. - is . - - If the source is a uri of form 'file:///path' then use the path part. - - - - - Initializes a as subproject of the specified - . - - - The full path to the build file. - This can be of any form that accepts. - - The parent . - - Optimized for framework initialization projects, by skipping automatic - discovery of extension assemblies and framework configuration. - - - - - Initializes a with - set to , and - set to 0. - - An containing the build script. - - Optimized for framework initialization projects, by skipping automatic - discovery of extension assemblies and framework configuration. - - - - - Gets the list of supported frameworks filtered by the specified - parameter. - - A bitwise combination of values that filter the frameworks to retrieve. - - An array of type that contains the - frameworks specified by the parameter, - sorted on name. - - - - - Returns the of the given node in an XML - file loaded by NAnt. - - - - The must be from an - that has been loaded by NAnt. - - - NAnt also does not process any of the following node types: - - - - - - - - - - - - - - - - - - - - As a result, no location information is available for these nodes. - - - The to get the for. - - of the given node in an XML file loaded by NAnt, or - if the node was not loaded from - an XML file. - - - is from an XML file that was not loaded by NAnt. - -or - was not processed by NAnt (eg. an XML declaration). - - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches the event to the build listeners - for this . - - The source of the event. - A that contains the event data. - - - - Dispatches a event to the build listeners - for this . - - A that contains the event data. - - - - Writes a level message to the build log with - the given . - - The to log at. - The message to log. - - - - Writes a level formatted message to the build - log with the given . - - The to log at. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - - - Writes a task level message to the build log - with the given . - - The from which the message originated. - The to log at. - The message to log. - - - - Writes a level message to the build log with - the given . - - The from which the message orignated. - The level to log at. - The message to log. - - - - Executes the default target. - - - No top level error handling is done. Any - will be passed onto the caller. - - - - - Executes a specific target, and its dependencies. - - The name of the target to execute. - - Global tasks are not executed. - - - - - Executes a specific target. - - The name of the target to execute. - Whether dependencies should be forced to execute - - Global tasks are not executed. - - - - - Executes the default target and wraps in error handling and time - stamping. - - - if the build was successful; otherwise, - . - - - - - Creates a new from the given . - - The definition. - The new instance. - - - - Creates a new from the given - within a . - - The definition. - The owner . - The new instance. - - - - Expands a from known properties. - - The with replacement tokens. - The location in the build file. Used to throw more accurate exceptions. - The expanded and replaced . - - - - Combines the specified path with the of - the to form a full path to file or directory. - - The relative or absolute path. - - A rooted path, or the of the - if the parameter is a null reference. - - - - - Creates the default and attaches it to - the . - - - - - Increases the of the . - - - - - Decreases the of the . - - - - - Detaches the currently attached instances - from the . - - - - - Attaches the specified build listeners to the . - - The instances to attach to the . - - The currently attached instances will - be detached before the new instances - are attached. - - - - - Inits stuff: - TypeFactory: Calls Initialize and AddProject - Log.IndentSize set to 12 - Project properties are initialized ("nant.* stuff set") - - NAnt Props: - nant.filename - nant.version - nant.location - nant.project.name - nant.project.buildfile (if doc has baseuri) - nant.project.basedir - nant.project.default = defaultTarget - - - An representing the project definition. - The project message threshold. - The project indentation level. - Optimization flags. - is . - - - - This method is only meant to be used by the - class and . - - - - - Creates a new based on the project - definition. - - - The full path to the build file. - This can be of any form that accepts. - - - An based on the specified project - definition. - - - - - Configures the platform properties for the current platform. - - NAnt does not support the current platform. - - - - Updates dependent properties when the - is set. - - - - - Topologically sorts a set of targets. - - The name of the root target. The sort is created in such a way that the sequence of targets up to the root target is the minimum possible such sequence. Must not be . - A collection of instances. - - A collection of instances in sorted order. - - There is a cyclic dependecy among the targets, or a named target does not exist. - - - - - Performs a single step in a recursive depth-first-search traversal - of the target dependency tree. - - - The current target is first set to the "visiting" state, and pushed - onto the "visiting" stack. - - - An exception is then thrown if any child of the current node is in - the visiting state, as that implies a circular dependency. The - exception contains details of the cycle, using elements of the - "visiting" stack. - - - If any child has not already been "visited", this method is called - recursively on it. - - - The current target is then added to the ordered list of targets. - Note that this is performed after the children have been visited in - order to get the correct order. The current target is set to the - "visited" state. - - - By the time this method returns, the ordered list contains the - sequence of targets up to and including the current target. - - - The current target to inspect. Must not be . - A collection of instances. - A mapping from targets to states The states in question are "VISITING" and "VISITED". Must not be . - A stack of targets which are currently being visited. Must not be . - The list to add target names to. This will end up containing the complete list of depenencies in dependency order. Must not be . - - A non-existent target is specified - -or- - A circular dependency is detected. - - - - - Builds an appropriate exception detailing a specified circular - dependency. - - The dependency to stop at. Must not be . - A stack of dependencies. Must not be . - - A detailing the specified circular - dependency. - - - - - Gets or sets the indendation level of the build output. - - - The indentation level of the build output. - - - To change the , the - and methods should be used. - - - - - Gets or sets the indentation size of the build output. - - - The indendation size of the build output. - - - - - Gets or sets the default threshold level for build loggers. - - - The default threshold level for build loggers. - - - - - Gets the name of the . - - - The name of the or an empty - if no name is specified. - - - - - Gets or sets the base directory used for relative references. - - - The base directory used for relative references. - - The directory is not rooted. - - - The gets and sets the built-in property - named "nant.project.basedir". - - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Gets the form of the current project definition. - - - The form of the current project definition. - - - - - Gets a collection of available .NET frameworks. - - - A collection of available .NET frameworks. - - - - - Gets the framework in which NAnt is currently running. - - - The framework in which NAnt is currently running. - - - - - Gets or sets the framework to use for compilation. - - - The framework to use for compilation. - - The value specified is . - The specified framework is not installed, or not configured correctly. - - We will use compiler tools and system assemblies for this framework - in framework-related tasks. - - - - - Gets the name of the platform on which NAnt is currently running. - - - The name of the platform on which NAnt is currently running. - - - - Possible values are: - - - - win32 - - - unix - - - - NAnt does not support the current platform. - - - - Gets the current target. - - - The current target, or if no target is - executing. - - - - - Gets the path to the build file. - - - The path to the build file, or if the build - document is not file backed. - - - - - Gets the active definition. - - - The active definition. - - - - - Gets the NAnt should use to initialize - configuration settings. - - - The NAnt should use to initialize - configuration settings. - - - - - Gets the name of the target that will be executed when no other - build targets are specified. - - - The name of the target that will be executed when no other - build targets are specified, or if no - default target is specified in the build file. - - - - - Gets a value indicating whether tasks should output more build log - messages. - - - if tasks should output more build log message; - otherwise, . - - - - - The list of targets to build. - - - Targets are built in the order they appear in the collection. If - the collection is empty the default target will be built. - - - - - Gets the properties defined in this project. - - The properties defined in this project. - - - This is the collection of properties that are defined by the system - and property task statements. - - - These properties can be used in expansion. - - - - - - Gets the framework-neutral properties defined in the NAnt - configuration file. - - - The framework-neutral properties defined in the NAnt configuration - file. - - - - This is the collection of read-only properties that are defined in - the NAnt configuration file. - - - These properties can only be used for expansion in framework-specific - and framework-neutral configuration settings. These properties are - not available for expansion in the build file. - - - - - - Gets the instances defined in this project. - - - The instances defined in this project. - - - - This is the collection of instances that - are defined by (eg fileset) declarations. - - - - - - Gets the targets defined in this project. - - - The targets defined in this project. - - - - - Gets the build listeners for this project. - - - The build listeners for this project. - - - - - Allow the project construction to be optimized. - - - Use this with care! - - - - - Do not perform any optimizations. - - - - - The project base directory must not be automatically scanned - for extension assemblies. - - - - - Do not scan the project configuration for frameworks, and - do not configure the runtime and target framework. - - - - - Holds a value indicating whether a scan for tasks, types and functions - has already been performed for the current runtime framework. - - - - - Initializes a new instance of the - class for the given . - - The that should be configured. - - - - Loads and processes settings from the specified - of the configuration file. - - - - - Processes the framework nodes of the given platform node. - - An representing the platform on which NAnt is running. - - - - Reads the list of global properties specified in the NAnt configuration - file. - - An representing global properties. - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Gets the underlying instance. - - - The underlying instance. - - - - - Gets the . - - - The . - - - The defines the current namespace - scope and provides methods for looking up namespace information. - - - - - Constant for the "visiting" state, used when traversing a DFS of - property references. - - - - - Constant for the "visited" state, used when travesing a DFS of - property references. - - - - - Initializes a new instance of the - class holding properties for the given - instance. - - The project for which the dictionary will hold properties. - - - - Performs additional custom processes before inserting a new element - into the instance. - - The key of the element to insert. - The value of the element to insert. - - - - Performs additional custom processes before removing an element - from the instance. - - The key of the element to remove. - The value of the element to remove. - - - - Performs additional custom processes when validating the element - with the specified key and value. - - The key of the element to validate. - The value of the element to validate. - - - - Adds a property that cannot be changed. - - The name of the property. - The value to assign to the property. - - Properties added with this method can never be changed. Note that - they are removed if the method is called. - - - - - Marks a property as a property of which the value is expanded at - execution time. - - The name of the property to mark as dynamic. - - - - Adds a property to the collection. - - The name of the property. - The value to assign to the property. - - - - Determines whether the specified property is listed as read-only. - - The name of the property to check. - - if the property is listed as read-only; - otherwise, . - - - - - Determines whether the specified property is listed as dynamic. - - The name of the property to check. - - if the property is listed as dynamic; - otherwise, . - - - - - Inherits properties from an existing property dictionary Instance. - - Property list to inherit. - The list of properties to exclude during inheritance. - - - - Expands a from known properties. - - The replacement tokens. - The to pass through for any exceptions. - The expanded and replaced string. - - - - Determines whether a property already exists. - - The name of the property to check. - - if the specified property already exists; - otherwise, . - - - - - Removes the property with the specified name. - - The name of the property to remove. - - - - Expands a from known properties. - - The replacement tokens. - The to pass through for any exceptions. - A mapping from properties to states. The states in question are "VISITING" and "VISITED". Must not be . - A stack of properties which are currently being visited. Must not be . - The expanded and replaced string. - - - - Evaluates the given expression string and returns the result - - - - - - - - - - Checks whether the specified property is deprecated. - - The property to check. - - - - Builds an appropriate exception detailing a specified circular - reference. - - The property reference to stop at. Must not be . - A stack of property references. Must not be . - - A detailing the specified circular - dependency. - - - - - Maintains a list of the property names that are readonly. - - - - - Maintains a list of the property names of which the value is expanded - on usage, not at initalization. - - - - - The project for which the dictionary holds properties. - - - - - Indexer property. - - - - - Gets the project for which the dictionary holds properties. - - - The project for which the dictionary holds properties. - - - - - Initializes a new instance of the class. - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Executes dependent targets first, then the target. - - - - - This indicates whether the target has already executed. - - - - - The name of the target. - - - - Hides to have - return the name of target, not the name of XML element - which - would always be target. - - - Note: Properties are not allowed in the name. - - - - - - If then the target will be executed; - otherwise, skipped. The default is . - - - - - Gets a value indicating whether the target should be executed. - - - if the target should be executed; otherwise, - . - - - - - Opposite of . If - then the target will be executed; otherwise, skipped. The default - is . - - - - - Gets a value indicating whether the target should NOT be executed. - - - if the target should NOT be executed; - otherwise, . - - - - - The description of the target. - - - - - Space separated list of targets that this target depends on. - - - - - A collection of target names that must be executed before this - target. - - - - - Finds a target by name. - - The name of the target to find. - - The with the specified name, or - if no exists with - the given name. - - - - - Gets the names of the targets in the - combined into one list separated by the given . - - - A that contains a list of the names of the - targets in the , separated by - the specified . - - - - - Gets the names of the targets in the - combined into one comma-separated list. - - - A that contains a comma-separated list of the - names of the targets in the . - - - - - Creates a new instance of the class - for the specified class in the specified - . - - - An for the specified - is cached for future use. - - The containing the . - The class representing the . - - - - Creates a new instance of the class - for the specified class in the specified - . - - The containing the . - The class representing the . - - - - Gets the name of the class that can be created - using this . - - - The name of the class that can be created using - this . - - - - - Gets the name of the task which the - can create. - - - The name of the task which the can - create. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a for the specified - task is in the collection. - - The name of task for which the should be located in the collection. - - if a for the - specified task is found in the collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the for the specified task. - - The name of task for which the should be located in the collection. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Comprises all of the loaded, and available, tasks. - Use these static methods to register, initialize and create a task. - - - - - Scans the given assembly for tasks, types, functions and filters. - - The assembly to scan for tasks, types, functions and filters. - The which will be used to output messages to the build log. - - - - Scans the given assembly for tasks, types, functions and filters. - - The assembly to scan for tasks, types, functions and filters. - The which will be used to output messages to the build log. - - if contains at - least one "extension"; otherwise, . - - - - - Scans the path for any task assemblies and adds them. - - The directory to scan in. - The which will be used to output messages to the build log. - indicating whether scanning of the directory should halt on first error. - - - - Adds any task assemblies in the project base directory - and its tasks subdirectory. - - The project to work from. - - - - Registers the project with , and optionally - scan the for extension assemblies. - - The project to work from. - Specified whether to scan the for extension assemblies. - - - - Looks up a function by name and argument count. - - The name of the function to lookup, including namespace prefix. - The argument of the function to lookup. - The in which the function is invoked. - - A representing the function, or - if a function with the given name and - arguments does not exist. - - - - - Creates a new instance for the given XML and - . - - The XML to initialize the task with. - The that the belongs to. - - The new instance. - - - - - Scans a given for tasks. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Scans a given for data type. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - data type; otherwise, . - - - - - Scans a given for functions. - - The to scan. - The which will be used to output messages to the build log. - - if represents a - valid set of funtions; otherwise, . - - - - - Scans a given for filters. - - The containing the to scan. - The to scan. - The which will be used to output messages to the build log. - - if represents a - ; otherwise, . - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Gets the list of loaded instances. - - - List of loaded instances. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with a descriptive message. - - A descriptive message to include with the exception. - - - - Initializes a new instance of the - class with the specified descriptive message and inner exception. - - A descriptive message to include with the exception. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the - class with a descriptive message and the location in the build file - that caused the exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - - - - Initializes a new instance of the - class with a descriptive message, the location in the build file and - an instance of the exception that is the cause of the current - exception. - - A descriptive message to include with the exception. - The location in the build file where the exception occured. - A nested exception that is the cause of the current exception. - - - - Initializes a new instance of the - class with serialized data. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Used to wrap log messages in xml <message/> elements. - - - - - Holds the stack of currently executing projects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - - Populates with the data needed to serialize - the instance. - - The to populate with data. - The destination for this serialization. - - - - Returns the contents of log captured. - - - - - Signals that a build has started. - - The source of the event. - A object that contains the event data. - - This event is fired before any targets have started. - - - - - Signals that the last target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a target has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a target has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a task has started. - - The source of the event. - A object that contains the event data. - - - - Signals that a task has finished. - - The source of the event. - A object that contains the event data. - - This event will still be fired if an error occurred during the build. - - - - - Signals that a message has been logged. - - The source of the event. - A object that contains the event data. - - Only messages with a priority higher or equal to the threshold of - the logger will actually be output in the build log. - - - - - Flushes buffered build events or messages to the underlying storage. - - - - - Gets or sets the highest level of message this logger should respond - to. - - - The highest level of message this logger should respond to. - - - Only messages with a message level higher than or equal to the given - level should be written to the log. - - - - - Gets or sets a value indicating whether to produce emacs (and other - editor) friendly output. - - - as it has no meaning in XML format. - - - - - Gets or sets the to which the logger is - to send its output. - - - - diff --git a/External/nant/bin/NAnt.DotNetTasks.dll b/External/nant/bin/NAnt.DotNetTasks.dll deleted file mode 100644 index 7e2b702ef..000000000 Binary files a/External/nant/bin/NAnt.DotNetTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.DotNetTasks.xml b/External/nant/bin/NAnt.DotNetTasks.xml deleted file mode 100644 index 39ca76fb9..000000000 --- a/External/nant/bin/NAnt.DotNetTasks.xml +++ /dev/null @@ -1,5373 +0,0 @@ - - - - NAnt.DotNetTasks - - - - - Generates an AssemblyInfo file using the attributes given. - - - - Create a C# AssemblyInfo file containing the specified assembly-level - attributes. - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - Create a C# AssemblyInfo file containing an attribute with multiple - named properties by setting the - attribute on the element to - . - - - - - - - - - - - - - - ]]> - - - - - - Generates an AssemblyInfo file. - - - - - Determines whether the specified AssemblyInfo file in the given - needs to be persisted. - - holding the newly generated AssemblyInfo source. - - if the generated AssemblyInfo source needs - to be persisted; otherwise, . - - - - - Name of the AssemblyInfo file to generate. - - - The name of the AssemblyInfo file to generate. - - - - - The code language in which the AssemblyInfo file should be - generated. - - - - - The assembly-level attributes to generate. - - - The assembly-level attributes to generate. - - - - - The namespaces to import. - - - The namespaces to import. - - - - - Assembly files used to locate the types of the specified attributes. - - - - - Defines the supported code languages for generating an AssemblyInfo - file. - - - - - A value for generating C# code. - - - - - A value for generating JScript code. - - - - - A value for generating Visual Basic code. - - - - - Encapsulates functionality to generate a code file with imports - and assembly-level attributes. - - - - - Initializes a new instance of the - for the specified . - - The for which an instance of the class should be initialized. - The for which an instance of the class should be initialized. - - - - Generates code for the specified imports. - - The imports for which code should be generated. - The to which the generated code will be written. - - - - Generates code for the specified assembly attributes. - - The assembly attributes for which code should be generated. - Imports used to resolve the assembly attribute names to fully qualified type names. - Assembly that will be used to resolve the attribute names to instances. - The to which the generated code will be written. - - - - Gets the in which the AssemblyInfo - code will be generated. - - - - - Gets the that will be used to - generate the AssemblyInfo code. - - - - - Responsible for returning the specified value converted to a - accepted by a constructor for a given - . - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Retrieves the specified corresponding with the specified - type name from a list of assemblies. - - The collection of assemblies that the type should tried to be instantiated from. - The list of imports that can be used to resolve the typename to a full typename. - The typename that should be used to determine the type to which the specified value should be converted. - The value that should be converted to a typed value. - - - is and the identified by has no default public constructor. - -or- - cannot be converted to a value that's suitable for one of the constructors of the identified by . - -or- - The identified by has no suitable constructor. - -or- - A identified by could not be located or loaded. - - - - - Finds a given type from a given list of assemblies and import statements. - - - A list of assemblies to search for a given type. - - - A list of import statements to search for a given type. - - - The name of the type to locate. - - - The type object found from assemblies and import statements based - on the name of the type. - - - - - Wraps al.exe, the assembly linker for the .NET Framework. - - - - All specified sources will be embedded using the /embed flag. - Other source types are not supported. - - - - - Create a library containing all icon files in the current directory. - - - - - - - - ]]> - - - - - Create an executable assembly manifest from modules. - - - - - - - - - ]]> - - - - - - Generates an assembly manifest. - - - - - Determines whether the assembly manifest needs compiling or is - uptodate. - - - if the assembly manifest needs compiling; - otherwise, . - - - - - Specifies an algorithm (in hexadecimal) to hash all files in a - multifile assembly except the file that contains the assembly - manifest. The default algorithm is CALG_SHA1. - - - - - Specifies a string for the Company field in the assembly. - - - A string for the Company field in the assembly. - - - If is an empty string (""), the Win32 - Company resource appears as a single space. - - - - - Specifies a string for the Configuration field in the assembly. - - - A string for the Configuration field in the assembly. - - - If is an empty string (""), the Win32 - Configuration resource appears as a single space. - - - - - Specifies a string for the Copyright field in the assembly. - - - A string for the Copyright field in the assembly. - - - If is an empty string (""), the Win32 - Copyright resource appears as a single space. - - - - - The culture string associated with the output assembly. - The string must be in RFC 1766 format, such as "en-US". - - - - Corresponds with the /c[ulture]: flag. - - - - - - Specifies whether the assembly should be partially signed. The default - is . - - - - - Specifies a string for the Description field in the assembly. - - - A string for the Description field in the assembly. - - - If is an empty string (""), the Win32 - Description resource appears as a single space. - - - - - Security evidence file to embed. - - - The security evidence file to embed. - - - - Corresponds with the /e[vidence] flag. - - - - - - Specifies a string for the File Version field in the assembly. - - - A string for the File Version field in the assembly. - - - - - Specifies a value (in hexadecimal) for the Flags field in - the assembly. - - - A value (in hexadecimal) for the Flags field in the assembly. - - - - - Specifies a container that holds a key pair. - - - - - Specifies a file (filename) that contains a key pair or - just a public key to sign an assembly. - - - The complete path to the key file. - - - - Corresponds with the /keyf[ile]: flag. - - - - - - Specifies the fully-qualified name (class.method) of the method to - use as an entry point when converting a module to an executable file. - - - The fully-qualified name (class.method) of the method to use as an - entry point when converting a module to an executable file. - - - - - One or more modules to be compiled into an assembly. - - - - - The name of the output file for the assembly manifest. - - - The complete output path for the assembly manifest. - - - - Corresponds with the /out flag. - - - - - - The target type (one of lib, exe, or winexe). - - - - Corresponds with the /t[arget]: flag. - - - - - - Specifies a string for the Product field in the assembly. - - - A string for the Product field in the assembly. - - - - - Specifies a string for the Product Version field in the assembly. - - - A string for the Product Version field in the assembly. - - - - - The set of resources to embed. - - - - - The set of compiled resources to embed. - - - Do not yet expose this to build authors. - - - - - Indicates whether the assembly linker for a given target framework - supports the "template" option, which takes an assembly from which - to get all options except the culture field. - The default is . - - - TODO: remove this once Mono bug #74814 is fixed. - - - - - Specifies an assembly from which to get all options except the - culture field. - - - The complete path to the assembly template. - - - - Corresponds with the /template: flag. - - - - - - Specifies a string for the Title field in the assembly. - - - A string for the Title field in the assembly. - - - - - Specifies a string for the Trademark field in the assembly. - - - A string for the Trademark field in the assembly. - - - - - Specifies version information for the assembly. The format of the - version string is major.minor.build.revision. - - - - - Icon to associate with the assembly. - - - - - Inserts a Win32 resource (.res file) in the output file. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program or - if the task is not being executed. - - - - - Provides the abstract base class for compiler tasks. - - - - - Contains a list of extensions for all file types that should be treated as - 'code-behind' when looking for resources. Ultimately this will determine - if we use the "namespace+filename" or "namespace+classname" algorithm, since - code-behind will use the "namespace+classname" algorithm. - - - - - Case-insensitive list of valid culture names for this platform. - - - The key of the is the culture name and - the value is . - - - - - Class constructor for . - - - - - Compiles the sources and resources. - - - - - Determines the manifest resource name of the given resource file. - - The containing information that will used to assemble the manifest resource name. - The resource file of which the manifest resource name should be determined. - The logical location of the resource file. - The source file on which the resource file depends. - - The manifest resource name of the specified resource file. - - - - - Determines the manifest resource name of the given resource file. - - The containing information that will used to assemble the manifest resource name. - The resource file of which the manifest resource name should be determined. - - The manifest resource name of the specified resource file. - - - For .resx resources, the name of the dependent is determined by - replacing the extension of the file with the extension of the - source files for the compiler, and removing the culture name from - the file name for localized resources. - - - - - Extracts the associated namespace/classname linkage found in the - given stream. - - The read-only stream of the source file to search. - - The namespace/classname of the source file matching the resource. - - - - - Writes package references to the specified . - - The to which the package references should be written. - - - - Writes list of warnings to (not) treat as errors to the specified - . - - The to which the list of warnings should be written. - - - - Writes list of warnings to suppress to the specified - . - - The to which the list of warnings to suppress should be written. - - - - Writes conditional compilation constants to the specified - . - - The to which the conditional compilation constants should be written. - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Allows derived classes to provide compiler-specific options. - - The to which the compiler options should be written. - - - - Writes an option using the default output format. - - The to which the compiler options should be written. - The name of the option which should be passed to the compiler. - - - - Writes an option and its value using the default output format. - - The to which the compiler options should be written. - The name of the option which should be passed to the compiler. - The value of the option which should be passed to the compiler. - - The combination of and - (separated by a colon) is quoted - unless is already surrounded by quotes. - - - - - Determines whether compilation is needed. - - - - - Finds the correct namespace/classname for a resource file from the - given dependent source file. - - The file from which the resource linkage of the resource file should be determined. - The culture of the resource file for which the resource linkage should be determined. - - The namespace/classname of the source file matching the resource or - if the dependent source file does not exist. - - - This behaviour may be overidden by each particular compiler to - support the namespace/classname syntax for that language. - - - - - Link a list of files into a resource assembly. - - The collection of resources. - Resource assembly to generate - Culture of the generated assembly. - - - - Compiles a set of resx files to a .resources files. - - The set of resx files to compile. - - - - Determines the culture associated with a given resource file by - scanning the filename for valid culture names. - - The resource file path to check for culture info. - The file on which the resource file depends. - - A valid instance if the resource is - associated with a specific culture; otherwise, . - - - - - Generate debug output. The default is . - - - Only used for <jsc> tasks, but retained for backward - compatibility (Clover.NET). - - - - - The output file created by the compiler. - - - - - Output type. Possible values are exe, winexe, - library or module. - - - - - Define conditional compilation symbol(s). - - - - Corresponds to /d[efine]: flag. - - - - - - Icon to associate with the application. - - - - Corresponds to /win32icon: flag. - - - - - - Specifies a Win32 resource file (.res). - - - - Corresponds to /win32res[ource]: flag. - - - - - - Instructs the compiler to treat all warnings as errors. The default - is . - - - - Corresponds to the /warnaserror[+|-] flag of the compiler. - - - When this property is set to , any messages - that would ordinarily be reported as warnings will instead be - reported as errors. - - - - - - Controls which warnings should be reported as errors. - - - - - Specifies a comma-separated list of warnings that should be suppressed - by the compiler. - - - Comma-separated list of warnings that should be suppressed by the - compiler. - - - - Corresponds with the /nowarn flag. - - - - - - Specifies a list of warnings that you want the compiler to suppress. - - - - - Instructs NAnt to recompile the output file regardless of the file timestamps. - - - When this parameter is to , NAnt will always - run the compiler to rebuild the output file, regardless of the file timestamps. - - - - - Specifies which type contains the Main method that you want to use - as the entry point into the program. - - - - Corresponds to the /m[ain]: flag of the compiler. - - - Use this property when creating an executable file. If this property - is not set, the compiler searches for a valid Main method in all - public classes. - - - - - - Specifies the key pair container used to strongname the assembly. - - - - - Specifies a strong name key file. - - - - - Specifies whether to delay sign the assembly using only the public - portion of the strong name key. The default is - . - - - - - Additional directories to search in for assembly references. - - - - Corresponds with the /lib[path]: flag. - - - - - - Reference metadata from the specified assembly files. - - - - - Specifies list of packages to reference. - - - - - Resources to embed. - - - - This can be a combination of resx files and file resources. - - - .resx files will be compiled by and then - embedded into the resulting executable. - - - The property is used to make - up the resource name added to the assembly manifest for non-resx - files. - - - For .resx files the namespace from the matching source file is used - as prefix. This matches the behaviour of Visual Studio. - - - Multiple resources tags with different namespace prefixes may be - specified. - - - - - - Link the specified modules into this assembly. - - - - - The set of source files for compilation. - - - - - Indicates whether package references are supported by compiler for - a given target framework. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "warnaserror" option that takes a list of warnings. The default - is . - - - - - Indicates whether the compiler for a given target framework supports - a command line option that allows a list of warnings to be - suppressed. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "keycontainer" option. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "keyfile" option. The default is . - - - - - Indicates whether the compiler for a given target framework supports - the "delaysign" option. The default is . - - - - - Gets the file extension required by the current compiler. - - - The file extension required by the current compiler. - - - - - Gets the class name regular expression for the language of the current compiler. - - class name regular expression for the language of the current compiler - - - - Gets the namespace regular expression for the language of the current compiler. - - namespace regular expression for the language of the current compiler - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Holds class and namespace information for resource (*.resx) linkage. - - - - - Initializes a new instance of the - class. - - The namespace the resource is under. - The class name the resource is associated with. - - - - Returns the resource linkage as a string. - - - A string representation of the resource linkage. - - - - - Gets a value indicating whether the - instances contains valid data. - - - if the - instance contains valid data; otherwise, . - - - - - Gets a value indicating whether a namespace name is available - for this instance. - - - if a namespace name is available for - this instance; otherwise, - . - - - - - Gets a value indicating whether a class name is available - for this instance. - - - if a class name is available for - this instance; otherwise, - . - - - - - Gets the name of namespace the resource is under. - - - The name of namespace the resource is under. - - - - - Gets the name of the class (most likely a form) that the resource - is associated with. - - - The name of the class the resource is associated with. - - - - - Gets the culture that the resource is associated with. - - - The culture that the resource is associated with. - - - - - Compiles C# programs. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Default Namespace" of the C# project, and the - value of the attribute - should be set to "". - - - - Compile a "HelloWorld" application, including embedded resources. - - - - - - - - - - - - - - - - - - ]]> - - - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Determines whether compilation is needed. - - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address can be specified as a decimal, hexadecimal, or octal - number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - The name of the XML documentation file to generate. - - - - Corresponds with the /doc: flag. - - - - - - Specifies the size of sections in the output file. Valid values are - 512, 1024, 2048, 4096, and 8192. - - - The size of sections in the output file. - - - - - Instructs the compiler not to import mscorlib.dll. The default is - . - - - - Corresponds with the /nostdlib[+|-] flag. - - - - - - Instructs the compiler not to use implicit references to assemblies. - The default is . - - - - Corresponds with the /noconfig flag. - - - - - - Specifies whether an integer arithmetic statement that is not in - the scope of the checked or unchecked keywords and - that results in a value outside the range of the data type should - cause a run-time exception. The default is . - - - - Corresponds with the /checked[+|-] flag. - - - - - - Instructs the compiler to allow code that uses the unsafe - keyword. The default is . - - - - Corresponds with the /unsafe[+|-] flag. - - - - - - Causes the compiler to only accept syntax that is included in a - given specification. - - - - Corresponds with the /langversion flag. - - - - - - Specifies whether the compiler should perform optimizations to the - make output files smaller, faster, and more effecient. The default - is . - - - if the compiler should perform optimizations; - otherwise, . - - - - Corresponds with the /optimize[+|-] flag. - - - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Specifies the warning level for the compiler to display. Valid values - are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn flag. - - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - - - - Specifies whether the compiler for the active target framework - supports generation of XML Documentation file. The default is - . - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Specifies whether the compiler for the active target framework - supports accepting only a specific language syntax. - The default is . - - - - - Gets the file extension required by the current compiler. - - - For the C# compiler, the file extension is always cs. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Signs delay-signed .NET Assemblies, or re-signs existing assemblies. - - - - The delay-signing mechanism takes a fileset (named targets) - and either a attribute for a file containing the - public and private keys, or to name a key - container. - - - - Sign partially-signed foo.dll with bar.snk. - - - - - - - ]]> - - - - - - Converts a single file or group of files. - - - - - List of assemblies/executables to sign. - - - - - Specifies the filesystem path to the signing key. - - - - - Specifies the key container. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Compiles ILASM programs. - - - - Compiles helloworld.il to helloworld.exe. - - - - - - - - ]]> - - - - - - Compiles the sources. - - - - - Writes the compiler options. - - - - - Writes an option using the default output format. - - - The to which the compiler options should - be written. - - - A that contains the name of the - option which should be passed to the compiler. - - - - - Writes an option and its value using the default output format. - - - The to which the compiler options should - be written. - - - A that contains the name of the - option which should be passed to the compiler. - - - A that contains the value of the - option which should be passed to the compiler. - - - - - Determines whether or not compilation is needed. - - - if compilation is needed; otherwise, - . - - - - - Specifies whether or not the compiler should measure and report - the compilation times. - - - if the compilation times should be - measured and reported; otherwise, . The - default is . - - - - Corresponds to the /CLOCK flag. - - - - - - Specifies whether or not the compiler should generate debug - information. - - - if debug information should be generated; - otherwise, . The default is - . - - - - Corresponds to the /DEBUG flag. - - - - - - Specifies whether or not the compiler should attempt to create a - PE file even if compilation errors have been reported. - - - if a PE file has to be created even if - compilation errors have been reported; otherwise, - . The default is . - - - - Corresponds to the /ERROR flag. - - - - - - Instructs NAnt to recompile the output file regardless of the file - timestamps. - - - if the output file should be recompiled - regardless of its timestamps; otherwise . - The default is . - - - - - Specifies whether or not the compiler should type a formatted - listing of the compilation result. - - - if a formatted listing of the compilation - result should be typed; otherwise, . The - default is . - - - - Corresponds to the /LISTING flag. - - - - - - Instructs the compiler to set the FileAlignment value in - the PE header. - - - An that represents the FileAlignment - value to set in the PE header. The value must be a power of 2, in - range from 512 to 65536. - - - - Corresponds to the /ALIGNMENT flag. - - - - - - Instructs the compiler to set the ImageBase value in - the PE header. - - - A that represents the ImageBase - value to set in the PE header. - - - - Corresponds to the /BASE flag. - - - - - - Instructs the compiler to set the Flags value in the CLR - header. - - - An that represents the Flags - value to set in the CLR header. The most frequently value are 1 - (pre-IL code) and 2 (mixed code). The third bit indicating that - the PE file is strong signed, is ignored. - - - - Corresponds to the /FLAGS flag. - - - - - - Instructs the compiler to set the Subsystem value in the PE - header. - - - An that represents the Subsystem - value to set in the PE header. The most frequently value are 3 - (console application) and 2 (GUI application). - - - - Corresponds to the /SUBSYSTEM flag. - - - - - - Specifies which output type should be generated. - - - A that contains the target type. - Possible values are dll and exe. - - - - Corresponds to the /OUTPUT flag. - - - - - - Instructs the compiler to generate a strong signature of the PE - file. - - - A that contains the private - encryption key. - - - - Corresponds to the /KEY=keysource]]> - flag. - - - - - - Instructs the compiler to generate a strong signature of the PE - file. - - - A that represents the file - containing the private encryption key. - - - - Corresponds to the /KEY=keyfile]]> - flag. - - - - - - Specifies the name of the output file created by the compiler. - - - A that represents the name of - the output file. - - - - Corresponds to the /OUTPUT flag. - - - - - - Instructs the compiler to link the specified unmanaged resource - file into the resulting PE file. - - - A that represents the unmanaged - resource file to link. - - - - Corresponds to the /RESOURCE flag. - - - - - - Specifies the set of source files to compile. - - - A that represents the set - of source files to compile. - - - - - Gets the command-line arguments for the external program. - - - A that contains the command-line - arguments for the external program. - - - - - Compiles JScript.NET programs. - - - Compile helloworld.js to helloworld.exe. - - - - - - - ]]> - - - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Automatically references assemblies if they have the same name as - an imported namespace or as a type annotation when declaring a - variable. The default is . - - - - Corresponds with the /autoref flag. - - - - - - Instructs the compiler not to import standard library, and changes - to . The default is - . - - - - Corresponds with the /noconfig flag. - - - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Causes the compiler to generate errors for implicit method - overrides. The default is . - - - - Corresponds with the /versionsafe flag. - - - - - - Specifies the warning level for the compiler to display. Valid - values are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn flag. - - - - - - Controls which warnings should be reported as errors. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not allow control over which warnings should be - reported as errors. - - - - - Specifies a comma-separated list of warnings that should be suppressed - by the compiler. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support package references. - - - - - Specifies a list of warnings that you want the compiler to suppress. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support suppressing warnings. - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - - - - Specifies the key pair container used to strongname the assembly. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies a strong name key file. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies whether to delay sign the assembly using only the public - portion of the strong name key. - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "keycontainer" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "keyfile" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Indicates whether the compiler for a given target framework supports - the "delaysign" option. The default is . - - - . - - - Override to avoid exposing this to build authors, as the JScript.NET - does not support this. - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Link the specified modules into this assembly. - - - Override to avoid exposing this to build authors, as the JScript.NET - compiler does not support linking modules. - - - - - Gets the file extension required by the current compiler. - - - For the JScript.NET compiler, the file extension is always js. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Generates a .licence file from a .licx file. - - - - If no output file is specified, the default filename is the name of the - target file with the extension .licenses appended. - - - - - Generate the file component.exe.licenses file from component.licx. - - - - ]]> - - - - - - Initializes the class. - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Generates the license file. - - - - - Determines whether the .licenses file needs to be recompiled - or is uptodate. - - The .licenses file. - - if the .licenses file needs compiling; - otherwise, . - - - - - Input file to process. - - - - - Name of the license file to output. - - - - - Names of the references to scan for the licensed component. - - - - - Specifies the executable for which the .licenses file is generated. - - - - - Specifies the executable for which the .licenses file is generated. - - - - - Indicates whether assembly references are supported by the current - target framework. The default is . - - - Applies only to frameworks having a command line tool for compiling - licenses files. - - - - - Indicates whether the current target framework has a command line - tool for compiling licenses files. The default is - . - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - The command-line arguments for the external program. - - - Override to avoid exposing these elements in build file. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Responsible for reading the license and writing them to a license - file. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Creates the whole license file. - - The instance for which the license file should be created. - The .licenses file to create. - - - - Determines whether the given object is serializable in binary - format. - - The object to check. - - if is - serializable in binary format; otherwise, . - - - - - Runs NDoc V1.3.1 to create documentation. - - - - See the NDoc home page for more - information. - - - By default, only the NDoc MSDN documenter ships as part of the NAnt - distribution. To make another NDoc documenter from the NDoc V1.3.1 - distribution available to the , copy the - documenter assembly (and possible dependencies) to the "lib" - directory corresponding with the CLR you're running NAnt on - (eg. <nant root>/bin/lib/net/1.1). - - - - - Document two assemblies using the MSDN documenter. The namespaces are - documented in NamespaceSummary.xml. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - Content of NamespaceSummary.xml : - - - - The Foo.Bar namespace reinvents the wheel. - - - The Foo.Bar.Tests namespace ensures that the Foo.Bar namespace reinvents the wheel correctly. - - - ]]> - - - - - - Initializes the taks and verifies the parameters. - - - - - Generates an NDoc project and builds the documentation. - - - - - Represents the method that will be called to update the overall - percent complete value and the current step name. - - The source of the event. - A that contains the event data. - - - - Represents the method that will be called to update the current - step's precent complete value. - - The source of the event. - A that contains the event data. - - - - Returns the documenter for the given project. - - - Documenter is not found. - - - is . - - - - - Performs macro expansion for the given nodes. - - for which expansion should be performed. - - - - Use Reflection to set HtmplHelp._htmlHelpCompiler private field for MSDN Documentor. - Ndoc could not handle 64bit installations and is not actively developed anymore. - - Active documentor - Path to hhc.exe - - - - Searches in %ProgramFiles(x86)%\HTML Help Workshop and %ProgramFiles%\HTML Help Workshop - for hhc.exe. If not found let ndoc msdn documentor search itself - - the path to hhc.exe if found, null otherwise - - - - The set of assemblies to document. - - - - - The set of namespace summary files. - - - - - Specifies the formats in which the documentation should be generated. - - - - - Collection of additional directories to search for referenced - assemblies. - - - - - Installs or removes .NET Services. - - - - This tasks provides the same functionality as the regsvcs tool - provided in the .NET SDK. - - - It performs the following actions: - - - - Loads and registers an assembly. - - - Generates, registers, and installs a type library into a specified COM+ application. - - - Configures services that are added programmatically to your class. - - - - Refer to the .NET Services Installation Tool (Regsvcs.exe) for more information. - - - - - Adds all public classes contained in myTest.dll to a COM+ - application and produces the myTest.tlb type library. If the - application already exists, it is overwritten. - - - - ]]> - - - - - Adds all public classes contained in myTest.dll to myTargetApp - and produces the myTest.tlb type library. If the application already - exists, it is overwritten. - - - - ]]> - - - - - Adds all public classes contained in myTest.dll to a COM+ - application and produces the myTest.tlb type library. A new - application is always created. - - - - ]]> - - - - - Uninstalls the COM+ application contained in myTest.dll. - - - - ]]> - - - - - - Performs the specified action. - - - - - Defines the action to take with the assembly. The default is - . - - - - - The source assembly file. - - - The assembly must be signed with a strong name. - - - - - Specifies the type library file to install. - - - - - Uses an existing type library. The default is . - - - - - Do not reconfigure an existing target application. - The default is . - - - - - Configures components only; ignores methods and interfaces. - The default is . - - - - - Expect an existing application. The default is . - - - - - Specifies the name of the COM+ application to either find or create. - - - - - Specifies the name or id of the COM+ application to either find or - create. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Defines the possible actions for a .NET Service. - - - - - Finds or creates the target application. - - - - - Creates the target application. - - - - - Uninstalls the target application. - - - - - Converts files from one resource format to another. - - - - If no is specified, the resource file will - be created next to the input file. - - - - - Convert a resource file from the .resx to the .resources - format. - - - - ]]> - - - - - Convert a set of .resx files to the .resources format. - - - - - - - - ]]> - - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Converts a single file or group of files. - - - - - Cleans up generated files. - - - - - Determines whether the specified input file needs to be compiled. - - The input file. - The output file. - - if the input file need to be compiled; - otherwise . - - - - - Determines the full path and extension for the output file. - - The output file for which the full path and extension should be determined. - - The full path (with extensions) for the specified file. - - - - - Determines whether the specified resource file references third - party assemblies by checking whether a <data> element exists - with a "type" attribute that does not start with - "System.". - - The resource file to check. - - if the resource file references third party - assemblies, or an error occurred; otherwise, . - - - This check will only be accurate for 1.0 resource file, but the - 2.0 resx files can only be compiled with a resgen tool that supports - assembly references, so this method will not be used anyway. - - - - - Returns a list of external file references for the specified file. - - The resx file for which a list of external file references should be returned. - - A list of external file references for the specified file, or - if does not - exist or does not support external file references. - - - - - Input file to process. - - - The full path to the input file. - - - - - The resource file to output. - - - - - The target type. The default is resources. - - - - - The directory to which outputs will be stored. - - - - - Use each source file's directory as the current directory for - resolving relative file paths. The default is . - Only supported when targeting .NET 2.0 (or higher). - - - - - Takes a list of .resx or .txt files to convert to .resources files. - - - - - Reference metadata from the specified assembly files. - - - - - Indicates whether assembly references are supported by the - resgen tool for the current target framework. The default - is . - - - - - Indicates whether external file references are supported by the - resgen tool for the current target framework. The default - is . - - - - - For internal use only ! - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - For internal use only ! - - - - - Initializes a new instance of the - class for a given input and output file. - - The resource to compile. - The compiled resource. - - - - Gets the resource file to compile. - - - The resource file to compile. - - - - - Gets the compiled resource file. - - - The compiled resource file. - - - - - Executes the code contained within the task. - - -
Code
- - The must contain a single code - element, which in turn contains the script code. - - - This code can include extensions such as functions, or tasks. Once - the script task has executed those extensions will be available for - use in the buildfile. - - - If no extensions have been defined, a static entry point named - ScriptMain - which must have a single - argument - is required. - -
Namespaces
- - The following namespaces are imported by default: - - - - System - - - System.Collections - - - System.IO - - - System.Text - - - NAnt.Core - - - NAnt.Core.Attributes - - -
Assembly References
- - The assembly references that are specified will be used to compile - the script, and will be loaded into the NAnt appdomain. - - - By default, only the NAnt.Core and mscorlib assemblies - are referenced. - -
- - Run C# code that writes a message to the build log. - - <script language="C#"> - <code> - <![CDATA[ - public static void ScriptMain(Project project) { - project.Log(Level.Info, "Hello World from a script task using C#"); - } - ]]> - </code> - </script> - - - - Define a custom function and call it using C#. - - <script language="C#" prefix="test" > - <code> - <![CDATA[ - [Function("test-func")] - public static string Testfunc( ) { - return "some result !!!!!!!!"; - } - ]]> - </code> - </script> - <echo message='${test::test-func()}'/> - - - - Use a custom namespace in C# to create a database - - <script language="C#" > - <references> - <include name="System.Data.dll" /> - </references> - <imports> - <import namespace="System.Data.SqlClient" /> - </imports> - <code> - <![CDATA[ - public static void ScriptMain(Project project) { - string dbUserName = "nant"; - string dbPassword = "nant"; - string dbServer = "(local)"; - string dbDatabaseName = "NAntSample"; - string connectionString = String.Format("Server={0};uid={1};pwd={2};", dbServer, dbUserName, dbPassword); - - SqlConnection connection = new SqlConnection(connectionString); - string createDbQuery = "CREATE DATABASE " + dbDatabaseName; - SqlCommand createDatabaseCommand = new SqlCommand(createDbQuery); - createDatabaseCommand.Connection = connection; - - connection.Open(); - - try { - createDatabaseCommand.ExecuteNonQuery(); - project.Log(Level.Info, "Database added successfully: " + dbDatabaseName); - } catch (Exception e) { - project.Log(Level.Error, e.ToString()); - } finally { - connection.Close(); - } - } - ]]> - </code> - </script> - - - - - Run Visual Basic.NET code that writes a message to the build log. - - - <script language="VB"> - <code> - <![CDATA[ - Public Shared Sub ScriptMain(project As Project) - project.Log(Level.Info, "Hello World from a script task using Visual Basic.NET") - End Sub - ]]> - </code> - </script> - - - - Define a custom task and call it using C#. - - <script language="C#" prefix="test" > - <code> - <![CDATA[ - [TaskName("usertask")] - public class TestTask : Task { - #region Private Instance Fields - - private string _message; - - #endregion Private Instance Fields - - #region Public Instance Properties - - [TaskAttribute("message", Required=true)] - public string FileName { - get { return _message; } - set { _message = value; } - } - - #endregion Public Instance Properties - - #region Override implementation of Task - - protected override void ExecuteTask() { - Log(Level.Info, _message.ToUpper()); - } - #endregion Override implementation of Task - } - ]]> - </code> - </script> - <usertask message='Hello from UserTask'/> - - - - - Define a custom function and call it using Boo. - - - <script language="Boo.CodeDom.BooCodeProvider, Boo.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" - failonerror="true"> - <code> - <![CDATA[ - - [Function("test-func")] - def MyFunc(): - return "Hello from Boo !!!!!!" - ]]> - </code> - </script> - <echo message='${script::test-func()}'/> - - -
- - - Initializes the task. - - - - - Executes the script block. - - - - - The language of the script block. Possible values are "VB", "vb", "VISUALBASIC", "C#", "c#", "CSHARP". - "JS", "js", "JSCRIPT" "VJS", "vjs", "JSHARP" or a fully-qualified name for a class implementing - . - - - - - Any required references. - - - - - The name of the main class containing the static ScriptMain - entry point. - - - - - The namespace prefix for any custom functions defined in the script. - If ommitted the prefix will default to 'script' - - - - - The namespaces to import. - - - - - The code to execute. - - - - - Compiles Visual Basic.NET programs. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Root namespace" of the VB.NET project, and the - value of the attribute - should be set to "". - - - - Example build file using this task. - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - Finds the correct namespace/classname for a resource file from the - given dependent source file, and ensure the - is prefixed. - - The file from which the resource linkage of the resource file should be determined. - The culture of the resource file for which the resource linkage should be determined. - - The namespace/classname of the source file matching the resource or - if the dependent source file does not exist. - - - - - Writes conditional compilation constants to the specified - . - - The to which the conditional compilation constants should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - Determines whether compilation is needed. - - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address must be specified as a hexadecimal number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - The name of the XML documentation file to generate. Only supported - when targeting .NET 2.0 (or higher). - - - - Corresponds with the /doc: flag. - - - - - - Specifies whether the /imports option gets passed to the - compiler. - - - The value of this attribute is a string that contains one or more - namespaces separated by commas. - - - See the Microsoft.NET Framework SDK documentation for details. - - Example of an imports attribute - - - - - - The namespaces to import. - - - - - Instructs the compiler not to reference standard libraries - (system.dll and VBC.RSP). The default is . - Only supported when targeting .NET 2.0 (or higher). - - - - Corresponds with the /nostdlib flag. - - - - - - Specifies whether /optioncompare option gets passed to the - compiler. - - - text, binary, or an empty string. If the value is - or an empty string, the option will not be - passed to the compiler. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optionexplicit option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optimize option gets passed to the - compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /optionstrict option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies which platform version of common language runtime (CLR) - can run the output file. - - - The platform version of common language runtime (CLR) that can run - the output file. - - - - Corresponds with the /platform flag. - - - - - - Specifies whether the /removeintchecks option gets passed to - the compiler. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the /rootnamespace option gets passed to - the compiler. - - - The value of this attribute is a string that contains the root - namespace of the project. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether the compiler for the active target framework - supports generation of XML Documentation file. The default is - . - - - - - Specifies whether the compiler for the active target framework - supports NOT referencing standard libraries (system.dll and VBC.RSP). - The default is . - - - - - Specifies whether the compiler for the active target framework - supports limiting the platform on which the compiled code can run. - The default is . - - - - - Gets the file extension required by the current compiler. - - - For the VB.NET compiler, the file extension is always vb. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Compiles Visual J# programs using vjc, Microsoft's J# compiler. - - - - In order to have generate manifest resource names - that match those generated by Microsoft Visual Studio.NET, the value of - the attribute of the <> - element should match the "Default Package" of the J#.NET project, and - the value of the attribute - should be set to "". - - - - Compile a "HelloWorld" application, including embedded resources. - - - - - - - - - - - - - - - - - ]]> - - - - - - Writes module references to the specified . - - The to which the module references should be written. - - - - Writes the compiler options to the specified . - - to which the compiler options should be written. - - - - The preferred base address at which to load a DLL. The default base - address for a DLL is set by the .NET Framework common language - runtime. - - - The preferred base address at which to load a DLL. - - - This address can be specified as a decimal, hexadecimal, or octal - number. - - - - - Specifies the type of debugging information generated by the - compiler. The default is . - - - - - No longer expose this to build authors. Use - instead. - - - - - Specifies whether package-scoped members are accessible outside of - the assembly. In other words, package scope is treated as assembly - scope when emitting metadata. The default is . - - - if the option should be passed to the compiler; - otherwise, . - - - - Corresponds to the /securescoping flag. - - - See the Visual J# Reference for details. - - - - ]]> - - - - - Specifies whether to disable language extensions. - - - The value of this property must be either all, net, - or an empty string. - - - - Corresponds to the /x flag. - - - See the Visual J# Reference for details. - - - - To disable only the .NET Framework extensions: - ]]> - To disable the .NET Framework extensions and the VJ++ 6.0 extensions: - ]]> - - - - - Specifies the location of assemblies referenced by way of the /reference flag. - - - - Corresponds to the /libpath:dir[;dir2] flag. - - - See the Visual J# Reference for details. - - - - - - Associate Java-language/COM package names. - - - The value of this propery. must be package=namespace, @filename, - or an empty string. - - - - Corresponds to the /jcpa:package=namespace and /jcpa:@filename flags. - - - See the Visual J# Reference for details. - - - - Map package 'x' to namespace 'y': - ]]> - - - - - Specifies the code page to use for all source code files in the - compilation. - - - - Corresponds with the /codepage flag. - - - See the Visual J# Reference for details. - - - - - - Specifies the warning level for the compiler to display. Valid values - are 0-4. The default is 4. - - - The warning level for the compiler to display. - - - - Corresponds with the /warn option. - - - - - - Controls which warnings should be reported as errors. - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not allow control over which warnings should be - reported as errors. - - - - - Reference packages - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not support package references. - - - - - Link the specified modules into this assembly. - - - Override to avoid exposing this to build authors, as the Visual J# - compiler does not support linking modules. - - - - - Gets the file extension required by the current compiler. - - - For the J# compiler, the file extension is always jsl. - - - - - Gets the class name regular expression for the language of the - current compiler. - - - Class name regular expression for the language of the current - compiler. - - - - - Gets the namespace regular expression for the language of the - current compiler. - - - Namespace regular expression for the language of the current - compiler. - - - - - Override to avoid exposing the configuration setting for this - task as Visual J# will never support package references. - - - , as the Visual J# compiler will never - support package references. - - - - - Represents an assembly-level attribute. - - - - - Initializes a new instance of the - class. - - - - - Typename of the assembly-level attribute. - - - - - Value of the attribute. - - - - - If then the value of the attribute will be - set as is, without actually looking for a matching constructor or - named properties. The default is . - - - if the value of the attribute should be set - as is; otherwise, . - - - - - Indicates if the attribute should be generated. - - - if the attribute should be generated; - otherwise, . - - - - - Indicates if the attribute should be not generated. - - - if the attribute should be not generated; - otherwise, . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with - value is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - A specialized used for setting the lib directories. - - - The primary reason for this class is to allow the - to always be the same value as the parent - - - - - - Initializes a new instance of the class. - - - - - - override this. We will always use the base directory of the parent. - overriding without the TaskAttribute attribute prevents it being set - in the source xml - - - - - Specialized class for managing assembly files. - - - - If an include pattern does not contain any wildcard characters then - the assembly will be searched for in following locations (in the order listed): - - - - - The base directory of the fileset. - - - - - The directories specified using the nested <lib> element. - - - - - The list of reference assemblies of the current target framework. - - - - - The reference assemblies of a given target framework are defined using - <reference-assemblies> filesets in the <framework> node - of the NAnt configuration file. - - - - - Define a reference with name "sys.assemblies", holding - a set of system assemblies. - - - - - - - - ]]> - - - Use the predefined set of assemblies to compile a C# assembly. - - - - - - - - - ]]> - - - - - Compile a C# assembly using assembly references that are searched for - in the "Third Party Assemblies" and "Company Assemblies" - directories. - - - - - - - - - - - - - - - - ]]> - - - - - - - Initializes a new instance of the class. - - - - - copy constructor for FileSet. Required in order to - assign references of FileSet type where - AssemblyFileSets are used - - - - - - Do a normal scan and then resolve assemblies. - - - - - Resolves references to system assemblies and assemblies that can be - resolved using directories specified in . - - - - - Additional directories to search in for assembly references. - - - - loosely Corresponds with the /lib[path]: flag of the various compiler tasks. - - - - - - Represents a compiler warning. - - - - - A warning number, or comma-separated list of warnings, that you want - the compiler to suppress or report. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specifies the type of debugging information generated by the compiler. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - When set to then the following conditional - compilation symbols will also be defined: - - - - DEBUG - - - TRACE - - - - - - - Create no debug information. - - - - - Enable attaching a debugger to the running program. - - - - - Enable attaching a debugger to the running program. - - - - - Only display assembler when the running program is attached to the - debugger. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Specifies whether the generated assembly is strongly named and will - be signed later. - - - - For backward compatibility, the following string values can also be - used in build files: - - - - Value - Corresponding field - - - "true" - - - - "false" - - - - - - - - Not specified. - - - - - Fully sign the assembly. - - - - - Only place the public key in the assembly, allowing the signature - to be added later. - - - - - Specialized that also supports - case-insensitive conversion of "true" to - and "false" to - . - - - - - Initializes a new instance of the - class. - - - - - Converts the given object to the type of this converter, using the - specified context and culture information. - - An that provides a format context. - A object. If a is passed, the current culture is assumed. - The to convert. - - An that represents the converted value. - - - - - Represents an embedded resource. - - - Do not yet expose this to build authors. - - - - - Initializes a new instance of the - with the specified file name and manifest resource name. - - The path of the compiled resource. - The manifest resource name of the embedded resource. - - - - Gets the physical location of the resource to embed. - - - The physical location of the resource to embed. - - - - - Gets the manifest resource name to use when embedding the resource. - - - The manifest resource name to use when embedding the resource. - - - - - Contains a collection of items. - - - Do not yet expose this to build authors. - - - - - Base class for collections that needs to be globally referencable. - - - - - Initializes a new instance of the - class. - - - - - Copies the items of the collection to an , - starting at a particular index. - - The one-dimensional that is the destination of the items copied from the collection. The must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to iterate through - the collection. - - - - - Removes an item at a specific index. - - The zero-based index of the item to remove. - - - - Removes all items from the collection. - - - - - Used by methods that take instances as argument - to verify whether the instance is valid for the collection class. - - The instance to verify. - - - - Checks whether the specified index is within the range of this - collection. - - The index to check. - - - - Gets a value indicating whether access to the collection is - synchronized (thread-safe). - - - . - - - - - Gets the number of items in the collection. - - - The number of items in the collection. - - - - - Gets an object that can be used to synchronize access to the - collection. - - - An object that can be used to synchronize access to the collection. - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets the list of elements contained in the - instance. - - - An containing the elements of the - collection. - - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Gets the with the specified manifest - resource name. - - The manifest resource name of the to get. - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Represents a metadata file without assembly manifest. - - - - - Returns a textual representation of the module, which can be used as - argument for command-line tools. - - - A textual representation of the path, file[,target]. - - - - - The path of the module. - - - - - File name where the module should be copied to before it is compiled - into an assembly. - - - - - Gets or sets the that contains the module. - - - - - Contains a collection of items. - - - Do not yet expose this to build authors. - - - - - Initializes a new instance of the - for the specified . - - The containing the collection. - is . - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Copies the items of the collection to an , - starting at a particular index. - - The one-dimensional that is the destination of the items copied from the collection. The must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Removes all items from the collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Removes an item at a specific index. - - The zero-based index of the item to remove. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Gets the list of elements contained in the - instance. - - - An containing the elements of the - collection. - - - - - Gets a value indicating whether access to the collection is - synchronized (thread-safe). - - - . - - - - - Gets the number of items in the collection. - - - The number of items in the collection. - - - - - Gets an object that can be used to synchronize access to the - collection. - - - An object that can be used to synchronize access to the collection. - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets a value indicating whether the collection has a fixed size. - - - . - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - The parameter is less than 0 or greater than or equal to the value of the property of the . - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - - One or more modules to compile into an assembly. - - - - - Define a global <moduleset> that can be referenced by - other tasks or types. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - The base of the directory of this . - The default is the project base directory. - - - - - The modules to add to this . - - - - - Represents a namespace to import. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class for the specified namespace. - - The namespace. - is . - - - - The name of the namespace to import. - - - The name of the namespace to import. - - - - - The name of the namespace to import. - - - The name of the namespace to import. - - - - - Indicates if the import should be generated. - - - if the import should be generated; otherwise, - . - - - - - Indicates if the import should be not generated. - - - if the import should be not generated; - otherwise, . - - - - - Contains a collection of items. - - - Define a reference with name "system.imports". - - - - - - ]]> - - Use the predefined set of imports to compile a VB.NET assembly. - - - - - - - - - - - - ]]> - - - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Returns a comma-delimited list of namespace imports. - - - A comma-delimited list of namespace imports, or an empty - if there are no namespace imports. - - - Each namespace import is quoted individually. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Adds the items of a to the end of the collection. - - The to be added to the end of the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new item was inserted. - - - - - Inserts a into the collection at the - specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Removes the specified from the - collection. - - The to remove from the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Gets the location of a in the collection. - - The object to locate. - - The zero-based location of the in the - collection. - - - If the is not currently a member of - the collection, -1 is returned. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Gets the with the specified namespace. - - The namespace of the to get. - - - - Gets the of the items in this collection. - - - The of the items in this collection. - - - - - Gets or sets the item at the specified index. - - The zero-based index of the item to get or set. - - - - Enumerates the items of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next item of the collection. - - - if the enumerator was successfully advanced - to the next item; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Gets the current item in the collection. - - - The current item in the collection. - - - - - Represents a package. - - - - - Name of the package to reference. Multiple package can be specified - with a single element as a semi-colon separated list of - package names. - - - - - Indicates if the package should be passed to the task. - If then the package will be passed; - otherwise, skipped. The default is . - - - - - Indicates if the package should not be passed to the task. - If then the package will be passed; - otherwise, skipped. The default is . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Specialized class for managing resource files. - - - - - Initializes a new instance of the class. - - - - - copy constructor for FileSet. Required in order to - assign references of FileSet type where - ResourceFileSet are used - - - - - - Creates a shallow copy of the . - - - A shallow copy of the . - - - - - Gets the manifest resource name for the specified resource file. - - The physical path of the resource file. - - The manifest resource name to be sent to the compiler. - - - - - Gets the manifest resource name for the file using both its physical - and logical path. - - The physical path of the resource file. - The logical location of the resource file. - - The manifest resource name to be sent to the compiler. - - - We use the relative path of the logical path, but the filename and - and the extension of the physical path to match VS.NET - - - - - Indicates the prefix to prepend to the actual resource. - This is usually the default namspace of the assembly. - - - - - Indicates whether prefixes should be dynamically generated by taking - the path of the resource relative to the basedir and appending it - to the specified prefix. The default is . - - - - - Gets a containing all matching resx files. - - - A containing all matching resx files. - - - - - Gets a containing all matching non-resx - files. - - - A containing all matching non-resx files. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Controls the behaviour of a compiler with regards to the reporting of - warnings. - - - - Instruct a compiler to report warning 0519 as an error. - - - - - - ]]> - - - - - Instruct a compiler not to report warning 0519 as an error, if the - release property is . - - - - - - ]]> - - - - - - Specifies a list of warnings that the compiler should treat as - errors. This overrides the - attribute. Only supported when targeting .NET 2.0 or higher. - - - - - Specifies a list of warnings that the compiler should NOT treat as - errors. This is only useful if - is . Only supported when targeting .NET 2.0 - or higher. - - -
-
diff --git a/External/nant/bin/NAnt.MSNetTasks.dll b/External/nant/bin/NAnt.MSNetTasks.dll deleted file mode 100644 index 3099966d5..000000000 Binary files a/External/nant/bin/NAnt.MSNetTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.MSNetTasks.xml b/External/nant/bin/NAnt.MSNetTasks.xml deleted file mode 100644 index 9a442c68a..000000000 --- a/External/nant/bin/NAnt.MSNetTasks.xml +++ /dev/null @@ -1,579 +0,0 @@ - - - - NAnt.MSNetTasks - - - - - Disassembles any portable executable (PE) file that contains - intermediate language (IL) code. - - - - Files are only disassembled if the input file is newer than the output - file, or if the output file does not exist. However, you can - explicitly force files to be disassembled with the - attribute. - - - A can be used to select files to disassemble. - To use a , the - attribute must be set. The file name of the output file will be equal - to the file name of the input file, but with extension ".il". - - - - - Disassembles helloworld.exe to helloworld.il. - - - - ]]> - - - - - Disassembles a set of PE files into the specified directory. - - - - - - - - - ]]> - - - - - - Checks whether the task is initialized with valid attributes. - - - - - Disassembles the PE file(s). - - - - - Disassembles the specified PE file. - - The PE file to disassemble. - - - - Determines the full path and extension for the output file. - - - A that represents the PE file - file for which the corresponding output file should be determined. - - - A that represents the full path - for the output file. - - The path of the output file could not be determined. - - - - Writes the disassembler options. - - - - - Writes an option using the default output format. - - - The to which the disassembler options - should be written. - - - A that contains the name of the - option which should be passed to the disassembler. - - - - - Writes an option and its value using the default output format. - - - The to which the disassembler options - should be written. - - - A that contains the name of the - option which should be passed to the disassembler. - - - A that contains the value of the - option which should be passed to the disassembler. - - - - - Determines whether or not disassembling is needed. - - - if disassembling is needed; otherwise, - . - - - - - Specifies whether or not the disassembler should combine the - /HEADER, /BYTE, and /TOKENS options. The default - is . - - - if the disassembler should combine the - /HEADER, /BYTE, and /TOKENS options; - otherwise, . The default is - . - - - - Corresponds to the /ALL flag. - - - - - - Specifies whether or not the disassembler should generate the - IL stream bytes (in hexadecimal notation) as instruction comments. - The default is . - - - if the IL stream bytes should be generated - as instruction comments; otherwise, . The - default is . - - - - Corresponds to the /BYTE flag. - - - - - - Instructs NAnt to rebuild the output file regardless of the file - timestamps. The default is . - - - if the output file should be rebuilt - regardless of its timestamps; otherwise . - The default is . - - - - - Specifies whether or not the disassembler should include PE header - information and runtime header information in the output. The default - is . - - - if PE header information and runtime header - information should be included in the output; otherwise, - . The default is . - - - - Corresponds to the /HEADER flag. - - - - - - Specifies the PE file to disassemble. - - - A that represents the PE file - to disassemble. - - - - - Specifies whether or not the disassembler should include - references to original source lines. The default is . - - - if references to original source lines - should be included; otherwise, . The - default is . - - - - Corresponds to the /LINENUM flag. - - - - - - Specifies whether or not the disassembler should suppress ILASM - code output. The default is . - - - if ILASM code output should be suppresses; - otherwise, . The default is - . - - - - Corresponds to the /NOIL flag. - - - - - - Specifies whether or not the disassembler should disassemble - public items only. This is a shortcut for ="pub". - The default is . - - - if only public items should be - disassembled; otherwise, . The default is - . - - - - Corresponds to the /PUBONLY flag. - - - - - - Specifies whether or not the disassembler should enclose all names - in single quotation marks. By default, only names that don't match - the ILASM definition of a simple name are quoted. The default is - . - - - if all names should be enclosed in single - quotation marks; otherwise, . The default - is . - - - - Corresponds to the /QUOTEALLNAMES flag. - - - - - - Specifies whether or not the disassembler should generate - structured exception handling clauses in canonical (label) form. - The default is . - - - if structured exception handling clauses - should be generated in canonical form; otherwise, - . The default is . - - - - Corresponds to the /RAWEH flag. - - - - - - Specifies whether or not the disassembler should generate - original source lines as comments. The default is . - - - if original source lines should be - generated as comments; otherwise, . - The default is . - - - - Corresponds to the /SOURCE flag. - - - - - - Specifies whether or not the disassembler should generate metadata - token values as comments. The default is . - - - if metadata token values should be - generated as comments; otherwise, . The - default is . - - - - Corresponds to the /TOKENS flag. - - - - - - Specifies whether or not the disassembler should use the UNICODE - encoding when generating the output. The default is ANSI. - - - if the output should be generated using - the UNICODE encoding; otherwise, . The - default is . - - - - Corresponds to the /UNICODE flag. - - - - - - Specifies whether or not the disassembler should use the UTF-8 - encoding when generating the output. The default is ANSI. - - - if the output should be generated using - the UTF-8 encoding; otherwise, . The - default is . - - - - Corresponds to the /UTF8 flag. - - - - - - Instructs the disassembler to disassemble the specified item only. - - - A that specifies the item to - disassemble. - - - - Corresponds to the /ITEM flag. - - - - - - Instructs the disassembler to disassemble only the items with the - specified visibility. Possible values are PUB, PRI, - FAM, ASM, FAA, FOA, PSC, - or any combination of them separated by +. - - - A that contains the visibility - suboptions. - - - - Corresponds to the /VISIBILITY flag. - - - - - - Specifies the name of the output file created by the disassembler. - - - A that represents the name of - the output file. - - - - Corresponds to the /OUT flag. - - - - - - Specifies the directory to which outputs will be stored. - - - A that represents the - directory to which outputs will be stored. - - - - - Specifies a list of PE files to disassemble. To use a , - the attribute must be specified. - - - A that represents the set - of PE files to disassemble. - - - - - The command-line arguments for the external program. - - - Overridden to ensure the <arg> elements would not be exposed - to build authors. - - - - - Gets the command-line arguments for the external program. - - - A that contains the command-line - arguments for the external program. - - - - - Allows a Windows service to be controlled. - - - Starts the World Wide Web Publishing Service on the local computer. - - - ]]> - - - - Stops the Alerter service on computer 'MOTHER'. - - - ]]> - - - - - - Initializes a new instance of the - class. - - - - - Peforms actions on the service in order to reach the desired status. - - - - - Determines the desired status of the service based on the action - that should be performed on it. - - - The that should be reached - in order for the to be considered successful. - - - - - Starts the service identified by and - . - - instance for controlling the service identified by and . - - - - Stops the service identified by and - . - - instance for controlling the service identified by and . - - - - Restarts the service identified by and - . - - instance for controlling the service identified by and . - - - - Pauses the service identified by and - . - - instance for controlling the service identified by and . - - - - Continues the service identified by and - . - - instance for controlling the service identified by and . - - - - Holds the name of the service that should be controlled. - - - - - Holds the name of the computer on which the service resides. - - - - - Holds the action that should be performed on the service. - - - - - Holds the time, in milliseconds, the task will wait for a service - to reach the desired status. - - - - - The name of the service that should be controlled. - - - - - The name of the computer on which the service resides. The default - is the local computer. - - - - - The action that should be performed on the service. - - - - - The time, in milliseconds, the task will wait for the service to - reach the desired status. The default is 5000 milliseconds. - - - - - Defines the actions that can be performed on a service. - - - - - Starts a service. - - - - - Stops a service. - - - - - Restarts a service. - - - - - Pauses a running service. - - - - - Continues a paused service. - - - - diff --git a/External/nant/bin/NAnt.NUnit.dll b/External/nant/bin/NAnt.NUnit.dll deleted file mode 100644 index cf7d5dc2d..000000000 Binary files a/External/nant/bin/NAnt.NUnit.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.NUnit.xml b/External/nant/bin/NAnt.NUnit.xml deleted file mode 100644 index a7c623995..000000000 --- a/External/nant/bin/NAnt.NUnit.xml +++ /dev/null @@ -1,353 +0,0 @@ - - - - NAnt.NUnit - - - - - Carries data specified through the formatter element. - - - - - Gets or sets the type of the formatter. - - The type of the formatter. - - - - Gets or sets a value indicating whether output should be persisted - to a file. - - - if output should be written to a file; otherwise, - . The default is . - - - - - Gets or sets the extension to append to the output filename. - - The extension to append to the output filename. - - - - Gets or sets the directory where the output file should be written - to, if is . - - - The directory where the output file should be written to. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - The built-in formatter types. - - - - - A plaintext formatter. - - - - - An XML formatter. - - - - - Represents the FormatterElement of the NUnit task. - - - - - Type of formatter. - - - - - Extension to append to the output filename. - - - - - Determines whether output should be persisted to a file. The default - is . - - - - - Specifies the directory where the output file should be written to, - if is . If not - specified, the output file will be written to the directory where - the test module is located. - - - - - Gets the underlying for the element. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - diff --git a/External/nant/bin/NAnt.NUnit1Tasks.dll b/External/nant/bin/NAnt.NUnit1Tasks.dll deleted file mode 100644 index a7bda372c..000000000 Binary files a/External/nant/bin/NAnt.NUnit1Tasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.NUnit1Tasks.xml b/External/nant/bin/NAnt.NUnit1Tasks.xml deleted file mode 100644 index 85367f347..000000000 --- a/External/nant/bin/NAnt.NUnit1Tasks.xml +++ /dev/null @@ -1,538 +0,0 @@ - - - - NAnt.NUnit1Tasks - - - - - The whole test suite started. - - - - - The whole test suite ended. - - - - - Sets the the formatter is supposed to write - its results to. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Prints information about running tests directly to the build log. - - - - Not used, all output goes to Log class. - - - Called when the whole test suite has started. - - - Called when the whole test suite has ended. - - - Convert a stack trace line into something that can be clicked on in an IDE output window. - The StackTrace string, see . - The string that gets appended to the end of file(line): portion. - - - - Runs tests using the NUnit V1.0 framework. - - - - See the NUnit home page for more - information. - - - The or - attributes are only used to stop more than one test suite to stop - running. If any test suite fails a build error will be thrown. - Set to to - ignore test errors and continue build. - - - - - Run tests in the MyProject.Tests.dll assembly. - - - The test results are logged in results.xml and results.txt - using the and - formatters, respectively. - - - - - - - - ]]> - - - - - - Stops running tests when a test causes an error. The default is - . - - - Implies haltonfailure. - - - - - Stops running tests if a test fails (errors are considered failures - as well). The default is . - - - - - Cancel the individual tests if they do not finish in the specified - time (measured in milliseconds). Ignored if fork is disabled. - - - - - Tests to run. - - - - - Formatters to output results of unit tests. - - - - - Represents a test element of an . - - - - - Base name of the test result. The full filename is determined by this - attribute and the extension of formatter. - - - - - Directory to write the reports to. - - - - - Class name of the test. - - - - - Assembly to load the test from. - - - - - Run the tests in a separate . - - - - - Stop the build process if an error occurs during the test run. - - - - - Stop the build process if a test fails (errors are considered failures - as well). - - - - - The application configuration file to use for the NUnit test domain. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Carries data specified through the test element. - - - - - Determines if the unit test needs running. - - - if unit test needs running, otherwise, - . - - - - Determines if the test needs running by looking at the date stamp - of the test assembly and the test results log. - - - - - - Runs a Suite extracted from a TestCase subclass. - - - - - Creates the formatters to be used when running this test. - - - - - Returns the output file or null if does not use a file. - - - - - Returns the test suite from a given class. - - - The assemblyQualifiedName parameter needs to be in form: - "full.qualified.class.name,Assembly" - - - - - Gets the collection of registered formatters. - - Collection of registered formatters. - - - - Gets the result of the test. - - The result of the test. - - - - Prints information about running tests in plain text. - - - - Sets the Writer the formatter is supposed to write its results to. - - - Called when the whole test suite has started. - - - Called when the whole test suite has ended. - - - Convert a stack trace line into something that can be clicked on in an IDE output window. - The StackTrace string, see . - The string that gets appended to the end of file(line): portion. - - - - Decorates NUnits with extra information such as - run-time. - - - - - Initializes a new instance of the - class. - - - - - Gets or sets the total run-time of a test. - - The total run-time of a test. - - - - Prints detailed information about running tests in XML format. - - - - - Initializes a new instance of the - class. - - - - - Sets the the formatter is supposed to - write its results to. - - - - - Called when the whole test suite has started. - - - - - Called when the whole test suite has ended. - - - - diff --git a/External/nant/bin/NAnt.NUnit2Tasks.dll b/External/nant/bin/NAnt.NUnit2Tasks.dll deleted file mode 100644 index 657180c2e..000000000 Binary files a/External/nant/bin/NAnt.NUnit2Tasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.NUnit2Tasks.xml b/External/nant/bin/NAnt.NUnit2Tasks.xml deleted file mode 100644 index 83ba73acd..000000000 --- a/External/nant/bin/NAnt.NUnit2Tasks.xml +++ /dev/null @@ -1,516 +0,0 @@ - - - - NAnt.NUnit2Tasks - - - - - Controls the categories of tests to execute using the . - - - - Only include test cases and fixtures that require no internet access. - - - - - - ]]> - - - - - Exclude test cases and fixtures that are known to fail. - - - - - - ]]> - - - - - - Specifies a list of categories to include. - - - - - Specifies a list of categories to exclude. - - - - - Represents a certain group of test cases or fixtures. - - - - - A name of a category, or comma-separated list of names. - - - - - If then the category will be processed; - otherwise, skipped. The default is . - - - - - If then the category will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class as a wrapper for - the specified list. - - - The list that is wrapped by the newly created instance. - - - - - Initializes a new instance of the class - with the specified instance. - - - The collection to use to initialize the new instance with. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - The collection to use to initialize the new instance with. - - - - - Returns a comma-delimited list of categories. - - - A comma-delimited list of categories, or an empty - if there are no categories. - - - - - Adds the elements of a array to the end of the - collection. - - - The array of elements to be added to the end of - the collection. - - - - - Gets the with the specified name. - - The name of the to get. - - - - Runs tests using the NUnit V2.6 framework. - - - - The attribute is only useful when more - than one test suite is used, and you want to continue running other - test suites although a test failed. - - - Set to to - ignore any errors and continue the build. - - - In order to run a test assembly built with NUnit 2.0 or 2.1 using - , you must add the following node to your - test config file : - - - - ... - - - - - - - - - - ... - - ]]> - - - See the NUnit home page for more - information. - - - - - Run tests in the MyProject.Tests.dll assembly. - - - - - - - ]]> - - - - - Only run tests that are not known to fail in files listed in the tests.txt - file. - - - - - - - - - - - - - - - - - - ]]> - - - - - - Runs the tests and sets up the formatters. - - - - - Gets a new EventListener to use for the unit tests. - - - A new EventListener created with a new EventCollector that - is initialized with . - - - Log writer to send test output to. - - - - - Gets the logging threshold to use for a test runner based on - the current threshold of this task. - - - The logging threshold to use when running a test runner. - - - - - Stop the test run if a test fails. The default is . - - - - - Indicate whether or not to label the text output as the tests run. - - - - - Tests to run. - - - - - Formatters to output results of unit tests. - - - - - Represents a test element of an . - - - - - Name of the assembly to search for tests. - - - - - Name of a specific testfixture to run. If not specified then all - testfixtures are run. - - - - - Assemblies to include in test. - - - - - Assemblies to scan for missing assembly references. - - - - - Categories of test cases to include or exclude. - - - - - Build fails on failure. The default is . - - - - - XSLT transform file to use when using the - formatter. - - - - - The application configuration file to use for the NUnit test domain. - If not specified, NAnt will try to use a configuration name matching - the file name of the assembly with extension ".config". - - - - - Gets all assemblies specified for these tests. - - - All assemblies specified for these tests. - - - - - Contains a strongly typed collection of objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Custom TestDomain, similar to the one included with NUnit, in order - to workaround some limitations in it. - - - - - Initializes a new instance of the - class. - - - - - Runs a single testcase. - - The test assembly. - The application configuration file for the test domain. - List of files to scan for missing assembly references. - - The result of the test. - - - - - Helper class called when an assembly resolve event is raised. - - - - - Initializes an instanse of the - class. - - - - - Called back when the CLR cannot resolve a given assembly. - - The source of the event. - A that contains the event data. - - The nunit.framework we know to be in NAnts bin directory, if - that is the assembly that needs to be resolved; otherwise, - . - - - - - Occurs when an assembly is loaded. The loaded assembly is added - to the assembly cache. - - The source of the event. - An that contains the event data. - - - - Holds the list of directories that will be scanned for missing - assembly references. - - - - - Holds the list of assemblies that can be scanned for missing - assembly references. - - - - - Holds the loaded assemblies. - - - - diff --git a/External/nant/bin/NAnt.SourceControlTasks.dll b/External/nant/bin/NAnt.SourceControlTasks.dll deleted file mode 100644 index 82e44da1f..000000000 Binary files a/External/nant/bin/NAnt.SourceControlTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.SourceControlTasks.xml b/External/nant/bin/NAnt.SourceControlTasks.xml deleted file mode 100644 index 70d9cfba0..000000000 --- a/External/nant/bin/NAnt.SourceControlTasks.xml +++ /dev/null @@ -1,1289 +0,0 @@ - - - - NAnt.SourceControlTasks - - - - - A base class for creating tasks for executing CVS client commands on a - CVS repository. - - - - - A base class for creating tasks for executing CVS client commands on a - CVS repository. - - - - - Name of the environmental variable specifying a users' home - in a *nix environment. - - - - - Used on windows to specify the location of application data. - - - - - The environment variable that holds path information. - - - - - The environment variable that holds the location of the - .cvspass file. - - - - - Property name used to specify the source control executable. This is - used as a readonly property. - - - - - Initializes a new instance of the - class. - - - - - Build up the command line arguments, determine which executable is being - used and find the path to that executable and set the working - directory. - - The process to prepare. - - - - Adds a new global option if none exists. If one does exist then - the use switch is toggled on or of. - - The common name of the option. - The option value or command line switch - of the option. - true if the option should be - appended to the commandline, otherwise false. - - - - Adds a new command option if none exists. If one does exist then - the use switch is toggled on or of. - - The common name of the option. - The option value or command line switch - of the option. - true if the option should be - appended to the commandline, otherwise false. - - - - Set up the environment variables for a process. - - A process to setup. - - - - Append the files specified in the fileset to the command line argument. - Files are changed to use a relative path from the working directory - that the task is spawned in. - - - - - Derive the location of the version control system from the environment - variable PATH. - - The file information of the version control system, - or null if this cannot be found. - - - - The name of the passfile, overriden for each version control system (VCS). - - - - - The path to the specific home directory of the version control system, - this can be where the binary files are kept, or other app - information. - - - - - The environment variable that defines where the version control system - (VCS) home variable is kept. - - - - - The name of the version control system (VCS) executable file. - - - - - - The root variable contains information on how to locate a repository. - Although this information is in different formats it typically must - define the following: - - server location - protocol used to communicate with the repository - repository location on the server - project location in the repository - - - - - - - Destination directory for the local sandbox. If destination is not specified - then the current directory is used. - - - Root path of the local sandbox. - - - - Root path of the local sandbox. - - - - - - The password for logging in to the repository. - - - The password for logging in to the repository. - - - - - The full path to the cached password file. If not specified then the - environment variables are used to try and locate the file. - - - - - Holds a collection of globally available options. - - - - - A collection of options that can be used to modify the default behavoir - of the version control commands. See the sub-tasks for implementation - specifics. - - - - - Command-line arguments for the program. The command line arguments are used to specify - any cvs command options that are not available as attributes. These are appended - after the command itself and are additive to whatever attributes are currently specified. - - - <cvs-checkout cvsroot=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant" - module="nant" - destination="e:\test\merillcornish\working" - readonly="true" - quiet="true" - commandline="-n" - cvsfullpath="C:\Program Files\TortoiseCVS\cvs.exe" - /> -
- Produces the cvs command: - c:\Program Files\TortoiseCVS\cvs.exe -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant -q checkout -n nant -
-
- - - The name of the command that is going to be executed. - - - - - Used to specify the version control system (VCS) files that are going - to be acted on. - - - - - The executable to use for ssh communication. - - - - - The environment name for the ssh variable. - - - - - The name of the version control system executable. - - - - - Get the command line arguments for the task. - - - - - Default value for the recursive directive. The default is - . - - - - - Default value for the quiet command. - - - - - Default value for the really quiet command. - - - - - An environment variable that holds path information about where - cvs is located. - - - - - Name of the password file that cvs stores pserver - cvsroot/ password pairings. - - - - - The default compression level to use for cvs commands. - - - - - The default use of binaries, defaults to use sharpcvs. - - - - - The name of the cvs executable. - - - - - The temporary name of the sharpcvslib binary file, to avoid - conflicts in the path variable. - - - - - Environment variable that holds the executable name that is used for - ssh communication. - - - - - Property name used to specify on a project level whether sharpcvs is - used or not. - - - - - Initializes a new instance of the - class. - - - - - Converts a date value to a string representation that can be - interpreted by cvs. - - Date to convert. - - String interpretation of . - - - - - Build up the command line arguments, determine which executable is being - used and find the path to that executable and set the working - directory. - - The process to prepare. - - - - Override to append any commands before the modele and files. - - - - - Append the command line options or commen names for the options - to the generic options collection. This is then piped to the - command line as a switch. - - - - - Add the given argument to the command line options. Note that are not explicitly - quoted are split into seperate arguments. This is to resolve a recent issue - with quoting command line arguments. - - - - - - The environment name for the ssh variable. - - - - - The name of the cvs binary, or cvs.exe at the time this - was written. - - - - - The name of the pass file, or .cvspass at the time - of this writing. - - - - - The name of the version control system specific home environment - variable. - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - Used to specify the version control system (VCS) files that are going - to be acted on. - - - - - Get the cvs file set. - - - - - The name of the cvs executable. - - - - - The full path to the cvs binary used. The cvs tasks will attempt to - "guess" the location of your cvs binary based on your path. If the - task is unable to resolve the location, or resolves it incorrectly - this can be used to manually specify the path. - - - A full path (i.e. including file name) of your cvs binary: - On Windows: c:\vcs\cvs\cvs.exe - On *nix: /usr/bin/cvs - - - - - - The cvs root variable has the following components: - - - [protocol]:[username]@[servername]:[server path] -
    -
  • protocol: ext, pserver, ssh (sharpcvslib); if you are not using sharpcvslib consult your cvs documentation.
  • -
  • username: [username]
  • -
  • servername: cvs.sourceforge.net
  • -
  • server path: /cvsroot/nant
  • -
-
-
- - NAnt anonymous cvsroot: - - :pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant - - -
- - - The module to perform an operation on. - - - The module to perform an operation on. This is a normal file/folder - name without path information. - - - In NAnt the module name would be: - nant - - - - - - if the SharpCvsLib binaries that come bundled - with NAnt should be used to perform the cvs commands, - otherwise. - - - You may also specify an override value for all cvs tasks instead - of specifying a value for each. To do this set the property - sourcecontrol.usesharpcvslib to . - - - If you choose not to use SharpCvsLib to checkout from cvs you will - need to include a cvs.exe binary in your path. - - - - To use a cvs client in your path instead of sharpcvslib specify - the property: - >property name="sourcecontrol.usesharpcvslib" value="false"< - - The default settings is to use sharpcvslib and the setting closest - to the task execution is used to determine which value is used - to execute the process. - - For instance if the attribute usesharpcvslib was set to false - and the global property was set to true, the usesharpcvslib is - closes to the point of execution and would be used and is false. - Therefore the sharpcvslib binary would NOT be used. - - - - - The executable to use for ssh communication. - - - - - Indicates if the output from the cvs command should be supressed. - The default is . - - - - - Indicates if the output from the cvs command should be stopped. - The default is . - - - - - if the sandbox files should be checked out in - read only mode. The default is . - - - - - if the sandbox files should be checked out in - read/write mode. The default is . - - - - - Compression level to use for all net traffic. This should be a value from 1-9. -
-
- NOTE: This is not available on sharpcvslib. -
-
- - - Produces an XML report that represents the cvs changes from the given - start day, to a given end date. - - - Report changes in NAnt from 1st of June 2004 until 25th of July 2004. - - - ]]> - - - - - - The command being executed. - - - - - Name of the xml file that will contain the cvs log information. - - - - - The earliest change to use in the cvs log command. - - - - - The latest date to use in the cvs log command. - - - - - The cvs command to execute. - - - - - Override use of sharpcvslib, needs to be true. - - - - - - The cvs root variable has the following components: - - - [protocol]:[username]@[servername]:[server path] -
    -
  • protocol: ext, pserver, ssh (sharpcvslib); if you are not using sharpcvslib consult your cvs documentation.
  • -
  • username: [username]
  • -
  • servername: cvs.sourceforge.net
  • -
  • server path: /cvsroot/nant
  • -
-
- - If the cvsroot is not specified then the directory specified by the - attribute - is searched for CVS\Root. - -
- - NAnt anonymous cvsroot: - - :pserver:anonymous@cvs.sourceforge.net:/cvsroot/nant - - -
- - - Checks out a CVS module to the required directory. - - - Checkout NAnt. - - - ]]> - - - - - Checkout NAnt revision named 0_85 to the - folder c:\src\nant\v0.85. - - - - ]]> - - So the nant module tagged with revision 0_85 will be checked - out in the folder v0.85 under the working/ destination directory. -
This could be used to work on different - branches of a repository at the same time.
-
- - - Checkout NAnt with specified revision date to the - folder c:\src\nant\2003_08_16. - - - - ]]> - - -
- - - The command being executed. - - - - - Initializes a new instance of the class. - - - - - Specify the revision to checkout. This corresponds to the "sticky-tag" - of the file. - - - - - Sticky tag or revision to checkout. - - - - - Specify the revision date to checkout. The date specified is validated - and then passed to the cvs binary in a standard format recognized by - cvs. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - The name of the cvs command that is going to be executed. - - - - - Executes the cvs login command which appends or updates an entry to the - specified .cvspass file. - - - Update .cvspass file to include the NAnt anonymous login. - - - ]]> - - - - - - Ensures all information is available to execute the . - - - - - Update the .cvspass file with the given password. If the passfile - is not specified then the default search locations are used: - - CVS_PASSFILE/.cvspass - HOME/.cvspass - USERPROFILE/.cvspass TODO: Confirm that this is valid - behavior or if it is going to give problems with the - cvsnt implementation. - - - - - - Password to append or update to the .cvspass file. - - - - - The full path to the .cvspass file. The default is ~/.cvspass. - - - - - - The current working directory. - - - - - The repository root string. - - - - - Executes the cvs command specified by the command attribute. - - - Checkout NAnt. - - - ]]> - - - - - - The cvs command to execute. - - - - - Specify if the module is needed for this cvs command. - - - - - Exports a cvs module in preperation for a release (i.e. the CVS version - folders are not exported). - - - Export the most recent NAnt sources from cvs. - - - ]]> - - - - - Export NAnt revision named your_favorite_revision_here to the - folder c:\src\nant\replacement_for_module_directory_name. - - **NOTE**: filesets names for the export task must be - prefixed with the module name. This is different than other tasks. - - - - - - - - - ]]> - - - - - - The command being executed. - - - - - Create a new instance of the . - - - The following values are set by default: -
    -
  • Recursive:
  • -
-
-
- - - No shortening. Do not shorten module paths if -d specified. - - - - - Indicates whether the head revision should be used if the revison specified by - or the tags are not - found. The default is . - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Specify the revision to update the file to. This corresponds to the "sticky-tag" - of the file. - - - - - Specify the revision date to update to. The version of the file that - existed at the date specified is retrieved. - - - A valid date time value, which is then converted to a format that - cvs can parse. - - - - - Specify a directory name to replace the module name. Valid names - include any valid filename, excluding path information. - - - - - The export command name for the cvs client. - - - - - Tags all sources in the remote repository with a given tag. - - - - Unlike tag, the rtag command acts only on sources that are in the repository. - Any modified sources on the local file system will NOT be tagged with this - command, so a commit should be performed before an rtag is done. - - - NOTE: Although a working directory is not necessary to perform the command - one must be specified in order to remain in compliance with the cvs library. - - - - Tag NAnt sources remotely. - - - ]]> - - - - Remove a tag from the remote repository. - - - ]]> - - - - - - Initializes a new instance of the - class. - - - - - Append the tag information to the commandline. - - - - - The name of the tag to assign or remove. - - - The name of the tag to assign or remove. - - - - - Indicates whether the tag specified in should - be removed or not. - - - if the specified tag should be removed; - otherwise, . The default is . - - - - - Indicates whether the tag specified in should - be moved to the current file revision. If the tag does not exist - then it is created. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Indicates the repository that is acted on - for the tag command. Note if is - then the tag specified is moved to the revision - of the file on the HEAD of the branch specified. - - - The tag (or more likely) branch that should be used to apply the new tag. - - - - - Indicates the revision date of the file that the tag should be - applied to. - - - A valid date which specifies the revision point that the tag will - be applied to. - - - - - Indicates whether the head revision should be used if the - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - The name of the cvs command that is going to be executed. - - - - - Tags all local sources with the specified tag. - - - - This differs from the - in that it acts on references to the cvs files - contained in your local filesystem. As such the sticky tags and local - revisions can be considered in commits. It also allows you to verify that - all local files have been checked in before a tag is performed. - - - - Tag NAnt sources remotely. - - - ]]> - - - - Remove a tag from the remote repository. - - - ]]> - - - - - - Cvs command to be executed. - - - - - Initializes a new instance of the - class. - - - - - Append the tag information to the commandline. - - - - - The name of the tag to assign or remove. - - - The name of the tag to assign or remove. - - - - - Indicates whether the tag specified in should - be removed or not. - - - if the specified tag should be removed; - otherwise, . The default is . - - - - - Indicates whether the tag specified in should - be moved to the current file revision. If the tag does not exist - then it is created. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - If a directory is specified indicates whether sub-directories should - also be processed. - - - if the sub-directories should be tagged; - otherwise, . The default is . - - - - - Indicates the repository that is acted on - for the tag command. Note if is - then the tag specified is moved to the revision - of the file on the HEAD of the branch specified. - - - The tag (or more likely) branch that should be used to apply the new tag. - - - - - Indicates the revision date of the file that the tag should be - applied to. - - - A valid date which specifies the revision point that the tag will - be applied to. - - - - - Indicates whether the head revision should be used if the revision specified by - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - Indicates whether the head revision should be used if the - or the tags are not - found. - - - if the specified tag should be moved; - otherwise, . The default is . - - - - - The name of the cvs command that is going to be executed. - - - - - Not used - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - Updates a CVS module in a local working directory. - - - Update nant. - - - ]]> - - - - - Update your NAnt revision named your_favorite_revision_here in - the folder c:\src\nant\replacement_for_module_directory_name. - - - - - - - - ]]> - - - - - - The command being executed. - - - - - Initializes a new instance of the - class. - - - Sets the build directory and prune empty directory properties to - . - - - - - If . new directories will be created on the local - sandbox. The default is . - - - - - If empty directories copied down from the - remote repository will be removed from the local sandbox. - The default is . - - - - - If the local copy of the file will be - overwritten with the copy from the remote repository. The default - is . - - - - - Specifies if the command should be executed recursively. The - default is . - - - The -R option is on by default in cvs. - - - - - Specify the revision to update the file to. This corresponds to the - "sticky-tag" of the file. - - - - - Sticky tag or revision to update the local file to. - - - A valid cvs tag. - - - - - Specify the revision date to update to. The version of the file that - existed at the date specified is retrieved. - - - A valid date time value, which is then converted to a format that - cvs can parse. - - - - - Specify if the module is needed for this cvs command. It is - only needed if there is no module information on the local file - system. - - - - - The name of the cvs command that is going to be executed. - - - - - A is a with extra - attributes useful in the context of the . - - - - - Initialize the object and locate the .cvsignore - files to add to the exclude list. - - - - - Indicates whether the entires in the .cvsignore should be used to limit the - file list; to exclude files in .cvsignore, otherwise - . The default is . - - -
-
diff --git a/External/nant/bin/NAnt.VSNetTasks.dll b/External/nant/bin/NAnt.VSNetTasks.dll deleted file mode 100644 index 37f8c3aca..000000000 Binary files a/External/nant/bin/NAnt.VSNetTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.VSNetTasks.xml b/External/nant/bin/NAnt.VSNetTasks.xml deleted file mode 100644 index 445d27556..000000000 --- a/External/nant/bin/NAnt.VSNetTasks.xml +++ /dev/null @@ -1,3986 +0,0 @@ - - - - NAnt.VSNetTasks - - - - - Analyses Microsoft Visual Studio .NET 2003 (Everett) solution files. - - - - - Gets the project file of the project with the given unique identifier. - - The unique identifier of the project for which the project file should be retrieves. - - The project file of the project with the given unique identifier. - - No project with unique identifier could be located. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Loads the projects from the file system and stores them in an - instance variable. - - instance to use to determine whether an assembly is located in the Global Assembly Cache. - instance to use to determine location and references of assemblies. - TODO - A project GUID in the solution file does not match the actual GUID of the project in the project file. - - - - Translates a project path, in the form of a relative file path or - a URL, to an absolute file path. - - The directory of the solution. - The project path to translate to an absolute file path. - - The project path translated to an absolute file path. - - - - - Converts assembly references to projects to project references, adding - a build dependency.c - - The to analyze. - The solution configuration that is built. - containing list of projects that have been built. - containing list of projects that failed to build. - - - - Determines whether any of the project dependencies of the specified - project still needs to be built. - - The to analyze. - containing list of projects that have been built. - - if one of the project dependencies has not - yet been built; otherwise, . - - - - - Returns a number representing how much this file fits this project type. - - - - - - This enables the override in other providers. Do not return big numbers, mainly when compring only on filename. - - - - - Analyses Microsoft Visual Studio .NET 2002 (Rainier) solution files. - - - - - Compiles VS.NET solutions (or sets of projects), automatically determining - project dependencies from inter-project references. - - - - This task support the following projects: - - - - Visual Basic .NET - - - Visual C# .NET - - - Visual J# .NET - - - Visual C++ .NET - - - - Right now, only Microsoft Visual Studio .NET 2002 and 2003 solutions - and projects are supported. Support for .NET Compact Framework projects - is also not available at this time. - - - The also supports the model of referencing - projects by their output filenames, rather than referencing them inside - the solution. It will automatically detect the existance of a file - reference and convert it to a project reference. For example, if project - "A" references the file in the release output directory of - project "B", the will automatically - convert this to a project dependency on project "B" and will - reference the appropriate configuration output directory at the final - build time (ie: reference the debug version of "B" if the - solution is built as debug). - - - The expects all project files to be valid - XML files. - -

Resx Files

- - When building a project for a down-level target framework, special care - should be given to resx files. Resx files (can) contain references to - a specific version of CLR types, and as such are only upward compatible. - - - For example: if you want to be able to build a project both as a .NET 1.0 - and .NET 1.1 assembly, the resx files should only contain references to - .NET 1.0 CLR types. Failure to do this may result in a - failure at runtime on machines with only the .NET Framework 1.0 installed. - -
- - - Compiles all of the projects in test.sln, in release mode, in - the proper order. - - - - ]]> - - - - - Compiles all of the projects in projects.txt, in the proper - order. - - - - - - - - ]]> - - - - - Compiles projects A, B and C, using the output of project X as a - reference. - - - - - - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution except for project A. - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution mapping the specific project at - http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj and any URLs under - http://localhost/B/[remainder] to c:\other\B\[remainder]. This allows the build - to work without WebDAV. - - - - - - - - - ]]> - - - - - Compiles all of the projects in the solution placing compiled outputs - in c:\temp. - - - ]]> - - -
- - - Private var containing custom properties. - - - - - Initializes a new instance of the class. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - The macro cannot be expanded. - - - - Builds the list of folders that should be scanned for assembly - references. - - - The list of folders that should be scanned for assembly references. - - - - - The projects to build. - - - - - The projects to scan, but not build. - - - These projects are used to resolve project references and are - generally external to the solution being built. References to - these project's output files are converted to use the appropriate - solution configuration at build time. - - - - - The name of the VS.NET solution file to build. - - - - The can be used instead to supply a list - of Visual Studio.NET projects that should be built. - - - - - - The name of the solution configuration to build. - - - - Generally release or debug. Not case-sensitive. - - - - - - The name of platform to build the solution for. - - - - - Gets the solution configuration to build. - - - - - The directory where compiled targets will be placed. This - overrides path settings contained in the solution/project. - - - - - WebMap of URL's to project references. - - - - - Fileset of projects to exclude. - - - - - Set of folders where references are searched when not found in path - from project file (HintPath). - - - - - Includes Visual Studio search folders in reference search path. - The default is . - - - - - Allow the task to use WebDAV for retrieving/compiling the projects within solution. Use of - is preferred over WebDAV. The default is . - - - WebDAV support requires permission changes to be made on your project server. These changes may affect - the security of the server and should not be applied to a public installation. - Consult your web server or the NAnt Wiki documentation for more information. - - - - - Set of properties set at solution level. Builders for projects in solution may or may not use them. - - - - TODO: some documentataion which properties could be defined here. - - - - - - Gets the list of folders to scan for assembly references. - - - The list of folders to scan for assembly references. - - - - - Defines how the project is using the ATL library. - - - - - Don't use ATL. - - - - - Use ATL in a Static Library. - - - - - Use ATL in a Shared DLL. - - - - - Defines how the project is using the MFC library. - - - - - Don't use MFC. - - - - - Use MFC in a Static Library. - - - - - Use MFC in a Shared DLL. - - - - - Indicates the possible ways in which precompiled header file use is - specified in a Visual C++ project. - - - The integer values assigned match those specified in the Visual C++ - project file for each setting. - > - - - - Precompiled header file use not specified. - - - - - Don't use a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Create precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Automatically create precompiled header file if necessary. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Use a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yu. - - - - - Represents a single mapping from URL project path to physical project - path. - - - - - Specifies the URL of the project file, or a URL fragment to match. - - - The URL of the project file or the URL fragment to match. - - - - - Specifies the actual path to the project file, or the path fragment - to replace. - - - The actual path to the project file or the path fragment to replace - the URL fragment with. - - - - - Specifies whether the mapping is case-sensitive or not. - - - A boolean flag representing the case-sensitivity of the mapping. Default is . - - - - - Indicates if the URL of the project file should be mapped. - - - if the URL of the project file should be - mapped; otherwise, . - - - - - Indicates if the URL of the project file should not be mapped. - - - if the URL of the project file should not - be mapped; otherwise, . - - - - - Contains a strongly typed collection of - objects. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Find the best matching for the given Uri. - - The value to match against the objects in the collection. - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - value is in the collection. - - The argument value to locate in the collection. - - if a with value - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified value. - - The value of the to get. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Gets the output path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The full output path of the reference. - - - - - Gets the complete set of output files of the reference for the - specified configuration. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The solution configuration that is built. - - if the reference is managed for the - specified configuration; otherwise, . - - - - - Returns the date and time the specified file was last written to. - - The file for which to obtain write date and time information. - - A structure set to the date and time that - the specified file was last written to, or - if the specified file does not - exist. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - if this reference represents a system - assembly; otherwise, . - - - - - Gets the project in which the reference is defined. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The build configuration of the reference. - - . - - - - - Gets the complete set of output files for the specified assembly - and adds them to collection. - - The path of the assembly to get the output files for. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - - Searches for the given file in all paths in . - - The folders to search. - The file to search for. - - The path of the assembly if was found - in ; otherwise, . - - - - - Resolves an assembly reference in the framework assembly directory - of the target framework. - - The file to search for. - - The full path of the assembly file if the assembly could be located - in the framework assembly directory; otherwise, . - - - - - Resolves an assembly reference using a path relative to the project - directory. - - - The full path of the assembly, or if - is or an - empty . - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - if this reference represents a system - assembly; otherwise, . - - - - - Initializes a new instance of the - class with the given . - - The project of the configuration. - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - Expansion of a given macro is not yet implemented. - - - - - Is called each time a regular expression match is found during a - operation. - - The resulting from a single regular expression match during a . - - The expanded . - - - - - Gets the project. - - - - - Gets the name of the configuration. - - - - - Get the directory in which intermediate build output will be stored - for this configuration. - - - - This is a directory relative to the project directory named - obj\<configuration name>. - - - .resx and .licx files will only be recompiled if the - compiled resource files in the are not - uptodate. - - - - - - Gets the output directory. - - - - - Gets the path for the output file. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Gets the set of output files that is specific to the project - configuration. - - - The set of output files that is specific to the project - configuration. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class with the specified initial capacity. - - The appropriate number of entries that the can initially contain. - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - - - Gets a value indicating whether to register the project output for - use with COM components. - - - if the project output should be registered - for use with COM components; otherwise, . - - - - - Base class for all project classes. - - - - - Initializes a new instance of the class. - - - - - Gets the complete set of output files for the project configuration - matching the specified solution configuration. - - The solution configuration that is built. - The set of output files to be updated. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - If the project is not configured to be built for the specified - solution configuration, then no output files are added. - - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The build configuration. - - if the project output for the given build - configuration is managed; otherwise, . - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project file. - - The Visual Studio product version of the specified project XML - file. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Prepares the project for being built. - - The solution configuration that is built. - - The default implementation will ensure that none of the output files - are marked read-only. - - - - - Copies the specified file if the destination file does not exist, or - the source file has been modified since it was previously copied. - - The file to copy. - The destination file. - The in which context the operation will be performed. - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to be logged. - - The actual logging is delegated to the underlying task. - - - - - Logs a message with the given priority. - - The message priority at which the specified message is to be logged. - The message to log, containing zero or more format items. - An array containing zero or more objects to format. - - The actual logging is delegated to the underlying task. - - - - - Gets the Visual Studio product version of the project. - - - The Visual Studio product version of the project. - - - - - Gets the name of the VS.NET project. - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the path of the VS.NET project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - - - Get the directory in which intermediate build output that is not - specific to the build configuration will be stored. - - - - For projects, this is defined - as <Project Directory<\obj. - - - For projects, this is defined - as %HOMEPATH%\VSWebCache\<Machine Name>\<Project Directory>\obj. - - - - - - Gets or sets the unique identifier of the VS.NET project. - - - - - Gets a list of all configurations defined in the project. - - - - - Gets a list of project configurations that can be build. - - - - Project configurations that are not in this list do not need to be - compiled. - - - - - - Gets the extra set of output files for the project. - - - The extra set of output files for the project. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the set of projects that the project depends on. - - - The set of projects that the project depends on. - - - - - TODO: refactor this !!! - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The solution configuration that is built. - - . - - - - - Prepares the project for being built. - - The solution configuration that is built. - - Ensures the configuration-level object directory exists and ensures - that none of the output files are marked read-only. - - - - - Gets the complete set of output files for the project configuration - matching the specified solution configuration. - - The solution configuration that is built. - The set of output files to be updated. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - If the project is not configured to be built for the specified - solution configuration, then no output files are added. - - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Gets the absolute path of the type library for the project - output. - - The configuration to build. - - The absolute path of the type library for the project output. - - - - - Generates a type library for the specified assembly, registers it. - - The project configuration that is built. - The solution configuration that is built. - The path of the type library to generate. - - The regasm tool is used to generate the type library. - - - - - Unregister a type library for the specified assembly, and the types - in that assembly. - - The project configuration that is built. - The solution configuration that is built. - - The regasm tool is used to unregister the type library, and - remove the COM registration for types in the specified assembly. - - - - - Returns containing culture-specific resources. - - - A containing culture-specific resources. - - - The key of the is - and the value is an instance - for that culture. - - - - - Creates and initializes a instance. - - - An initialized instance. - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project to check. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Returns the of the specified project - XML fragment. - - XML fragment representing the project to check. - - The of the specified project XML - fragment. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Holds a case-insensitive list of source files. - - - The key of the is the full path of the - source file and the value is . - - - - - Gets the default file extension of sources for this project. - - - The default file extension of sources for this project. - - - - - Gets a value indicating if this is a web project. - - - if this is a web project; otherwise, - . - - - If the url of a web project has been mapped to a local path - (using the <webmap> element), then this property will return - for a - project. - - - - - Gets the name of the VS.NET project. - - - - - Gets the path of the VS.NET project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - - - Gets or sets the unique identifier of the VS.NET project. - - - - - Groups a set of instances for a specific - culture. - - - - - Initializes a new instance - for the specified culture. - - A . - - - - Gets the intermediate build directory in which the satellite - assembly is built. - - The project build configuration. - - The intermediate build directory in which the satellite assembly - is built. - - - - - Gets a representing the path to the - intermediate file location of the satellite assembly. - - The project build configuration. - The project settings. - - A representing the path to the - intermediate file location of the satellite assembly. - - - - - Gets path of the satellite assembly, relative to the output - directory. - - The project settings. - - The path of the satellite assembly, relative to the output - directory. - - - - - Gets the of the - . - - - - - Gets the set of localized resources. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports - the specified project; otherwise, . - - - - A project is identified as as C# project, if the XML fragment at - least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For C# projects, the default file extension is ".cs". - - - - - Supports grouping of individual projects, and treating them as a solution. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Prepares the project for being built. - - The solution configuration that is built. - - Ensures the configuration-level object directory exists and ensures - that none of the output files are marked read-only. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports - the specified project; otherwise, . - - - - A project is identified as as J# project, if the XML fragment at - least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For J# projects, the default file extension is ".jsl". - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - Visual Studio .NET uses the following search mechanism : - - - - - The project directory. - - - - - The directories specified in the "ReferencePath" property, - which is stored in the .USER file. - - - - - The .NET Framework directory (see KB306149) - - - - - - The directories specified under the following registry - keys: - - - - - HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders - - - - - HKCU\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders - - - - - HKLM\SOFTWARE\Microsoft\VisualStudio\<major version>.<minor version>\AssemblyFolders - - - - - HKCU\SOFTWARE\Microsoft\VisualStudio\<major version>.<minor version>\AssemblyFolders - - - - - Future versions of Visual Studio .NET will also check - in: - - - - - HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersEx - - - - - HKCU\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersEx - - - - - - - - The HintPath. - - - - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - Gets the Visual Studio .NET AssemblyFolders registry key matching - the current target framework. - - - The Visual Studio .NET AssemblyFolders registry key matching the - current target framework. - - The current target framework is not supported. - - We use the target framework instead of the product version of the - containing project file to determine what registry key to scan, as - we don't want to use assemblies meant for uplevel framework versions. - - - - - Indentifies the different output types of a managed project. - - - Visual Studio .NET does not support modules. - - - - - A class library. - - - - - A console application. - - - - - A Windows program. - - - - - Gets the output path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The complete set of output files for the referenced project. - - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this project. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this project. - - - - Apparently, there's some hack in VB.NET that allows a type to be used - that derives from a type in an assembly that is not referenced by the - project. - - - When building from the command line (using vbc), the following error - is reported "error BC30007: Reference required to assembly 'X' - containing the base class 'X'. Add one to your project". - - - Somehow VB.NET can workaround this issue, without actually adding a - reference to that assembly. I verified this with both VS.NET 2003 and - VS.NET 2005. - - - For now, we have no other option than to return all assembly - references of the referenced project if the parent is a VB.NET - project. - - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the output file(s) of this reference - should be copied locally; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - as a project by itself can never be a - system assembly. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The solution configuration that is built. - - . - - - - - Gets the path of the reference, without taking the "copy local" - setting into consideration. - - The solution configuration that is built. - - The output path of the reference. - - - - - Gets the complete set of output files for the referenced project. - - The solution configuration that is built. - The set of output files to be updated. - - The key of the case-insensitive is the - full path of the output file and the value is the path relative to - the output directory. - - - - - Gets the complete set of assemblies that need to be referenced when - a project references this component. - - The solution configuration that is built. - - The complete set of assemblies that need to be referenced when a - project references this component. - - - - - Gets the timestamp of the reference. - - The solution configuration that is built. - - The timestamp of the reference. - - - - - Removes wrapper assembly from build directory, if wrapper assembly - no longer exists in output directory or is not in sync with build - directory, to force rebuild. - - The project configuration. - - - - Gets a value indicating whether the output file(s) of this reference - should be copied locally. - - - if the reference wraps a Primary Interop - Assembly; otherwise, . - - - - - Gets a value indicating whether this reference represents a system - assembly. - - - as none of the system assemblies are wrappers - or Primary Interop Assemblies anyway. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets a value indicating whether the wrapper assembly has already been - created. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - - - - Gets the name of the type library. - - - The name of the type library. - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - - - The definition of the reference does not contain a "VersionMajor" attribute. - - -or - - The definition of the reference does not contain a "VersionMinor" attribute. - - - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - - - - Specifies the type of the project. - - - - - A Visual Basic.NET project. - - - - - A Visual C# project. - - - - - A Visual C++ project. - - - - - A Visual J# project. - - - - - MSBuild project. - - - - - Specifies the result of the build. - - - - - The build failed. - - - - - The build succeeded. - - - - - The build succeeded and the output was updated. - - - - - Visual Studio.NET 2002 - - - - - Visual Studio.NET 2003 - - - - - Visual Studio 2005 - - - - - Visual Studio 2008 - - - - - Visual Studio 2010 - - - - - Indentifies the physical location of a managed project. - - - - - A local project. - - - - - A web project. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - GUID is in the collection, using a case-insensitive lookup. - - The GUID to locate in the collection. - - if a with GUID - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Remove items with the specified guid from the collection. - - The guid of the project to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified GUID. - - The GUID of the to get. - - Performs a case-insensitive lookup. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Gets or sets the in memory representation of the project. - - - The in memory representation of the project, or - if the project is not (yet) loaded. - - - This property will always be for - projects that are not supported. - - - - - Return a mapping between the configurations defined in the - solution file and the project build configurations. - - - Mapping between configurations defined in the solution file - and the project build configurations, or - if the project is not defined in a solution file. - - - This mapping only includes project build configurations that - are configured to be built for a given solution configuration. - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - - The position into which the new element was inserted. - - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Determines whether a with the specified - GUID is in the collection, using a case-insensitive lookup. - - The GUID to locate in the collection. - - if a with GUID - is found in the collection; otherwise, - . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Gets the with the specified GUID. - - The GUID of the to get. - - Performs a case-insensitive lookup. - - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Factory class for VS.NET projects. - - - - - Initializes a new instance of the - class. - - - - - Holds a case-insensitive list of cached projects. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is a - instance. - - - - - Holds a case-insensitive list of cached project GUIDs. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is the GUID - of the project. - - - - - Holds a case-insensitive list of cached project GUIDs. - - - The key of the is the path of the project - file (for web projects this can be a URL) and the value is the Xml - of the project. - - - - - Determines the output type of the project from its XML definition. - - The XML definition of the project settings. - - The output type of the project. - - - - The output type of the project is not set in the specified XML - definition. - - -or- - - The output type of the project is not supported. - - - - - - Gets the project GUID from the given - holding a <VisualStudioProject> node. - - The path of the project file. - The <VisualStudioProject> node from which the project GUID should be retrieved. - - The project GUID from specified <VisualStudioProject> node. - - - - - Gets the .ico file to use as application icon. - - - The .ico file to use as application icon, or - if no application icon should be used. - - - - - Gets the key file to use to sign ActiveX/COM wrappers. - - - The path of the key file to use to sign ActiveX/COM wrappers, - relative to the project root directory, or - if the wrapper assembly should not be signed using a key file. - - - - - Gets the key name to use to sign ActiveX/COM wrappers. - - - The name of the key container to use to sign ActiveX/COM wrappers, - or if the wrapper assembly should not be - signed using a key container. - - - - - Gets the output type of this project. - - - - - Designates when the command line should - be run. Possible values are "OnBuildSuccess", "Always" or - "OnOutputUpdated". - - - - - Contains commands to be run before a build takes place. - - - Valid commands are those in a .bat file. For more info see MSDN. - - - - - Contains commands to be ran after a build has taken place. - - - Valid commands are those in a .bat file. For more info see MSDN. - - - - - Obtains a lifetime service object to control the lifetime policy for - this instance. - - - An object of type used to control the lifetime - policy for this instance. This is the current lifetime service object - for this instance if one exists; otherwise, a new lifetime service - object initialized with a lease that will never time out. - - - - - Gets the file name of the assembly with the given assembly name. - - The assembly name of the assembly of which the file name should be returned. - - The file name of the assembly with the given assembly name. - - - - - Compiles the resource file. - - The solution configuration that is built. - - A representing the compiled resource file. - - - - - Returns a representing the compiled resource - file. - - The solution configuration that is built. - - A representing the compiled resource file. - - - Calling this method does not force compilation of the resource file. - - - - - Gets a representing the physical location - of the resource file. - - - - - Gets a representing the logical location - of the resource file in the project. - - - When the resource file is not linked, this matches the - . - - - - - Gets a value indicating whether the resource is in fact a ResX file. - - - if the resource is a ResX file; otherwise, - . - - - - - Factory class for VS.NET solutions. - - - - - Initializes a new instance of the - class. - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - This method is called from the ctor, and - at that time we're not sure the XML that is passed in, is indeed a - valid Visual Basic project. - - - - - Returns the project location from the specified project XML fragment. - - XML fragment representing the project file. - - The project location of the specified project XML file. - - - The project location could not be determined. - -or- - The project location is invalid. - - - - - Returns a for launching the compiler - for this project. - - The configuration to build. - The response file for the compiler. - - A for launching the compiler for - this project. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports the - specified project; otherwise, . - - - - A project is identified as as Visual Basic project, if the XML - fragment at least has the following information: - - - - - ... - - - ]]> - - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the default file extension of sources for this project. - - - For VB projects, the default file extension is ".vb". - - - - - A mapping from properties in the .vcproj file to command line arguments. - - - - - Initializes a new instance of the - class. - - - - - Gets the argument string corresponding with a configuration property - named with value . - An ignore mask can be used to eliminate some arguments from the search. - - The name of the configuration property. - The value of the configuration property. - Specify any groups that needs to be ignored. - - The argument string corresponding with a configuration property - named with value , - or if no corresponding argument exists. - - - - - Creates a mapping between configuration properties for the Visual - C++ compiler and corresponding command-line arguments. - - - A mapping between configuration properties for the Visual C++ - compiler and corresponding command-line arguments. - - - - The following configuration properties are processed by - : - - - - Category - Property - - - General - Addtional Include Directories (/I[path]) - - - General - Resolve #using References (/AI[path]) - - - Preprocessor - Preprocessor Definitions (/D[macro]) - - - Code Generation - Enable C++ Exceptions (/EHsc) - - - Precompiled Headers - Create/Use Precompiled Header - - - Precompiled Headers - Create/Use PCH Through File - - - Precompiled Headers - Precompiled Header File - - - Output Files - Assembler Output - - - Output Files - ASM List Location - - - Browse Information - Enable Browse Information - - - Browse Information - Browse File - - - Advanced - Force Includes (/FI[name]) - - - Advanced - Force #using (/FU[name]) - - - Advanced - Undefine Preprocessor Definitions (/U[macro]) - - - - - - - Creates a mapping between configuration properties for the Visual - C++ linker and corresponding command-line arguments. - - - A mapping between configuration properties for the Visual C++ - linker and corresponding command-line arguments. - - - - The following configuration properties are processed by - : - - - - Category - Property - - - General - Output File (/OUT:[file]) - - - General - Additional Library Directories (/LIBPATH:[dir]) - - - Input - Additional Dependencies - - - Input - Add Module to Assembly (/ASSEMBLYMODULE:file) - - - Input - Embed Managed Resource File (/ASSEMBLYRESOURCE:file) - - - Debugging - Generate Debug Info (/DEBUG) - - - Debugging - Generate Program Database File (/PDB:name) - - - Debugging - Generate Map File (/MAP) - - - Debugging - Map File Name (/MAP:[filename]) - - - System - Heap Reserve Size (/HEAP:reserve) - - - System - Heap Commit Size (/HEAP:reserve, commit) - - - System - Stack Reserve Size (/STACK:reserve) - - - System - Stack Commit Size (/STACK:reserve, commit) - - - - The following configuration properties are ignored: - - - - Category - Property - - - General - Show Progress (/VERBOSE, /VERBOSE:LIB) - - - General - Suppress Startup Banner (/NOLOGO) - - - - Support for the following configuration properties still needs to - be implemented: - - - - Category - Property - - - General - Ignore Import Library - - - General - Register Output - - - Input - Delay Loaded DLLs (/DELAYLOAD:[dll_name]) - - - Embedded IDL - MIDL Commands (/MIDL:[file]) - - - - - - - Gets the name of the command-line argument. - - - The name of the command-line argument. - - - - - Represents a command-line arguments of which the trailing backslashes - in the value should be duplicated. - - - - - Represents a command-line argument of which the value should be - quoted, and of which trailing backslahes should be duplicated. - - - - - Gets the string that the configuration setting should match in - order for the command line argument to be set. - - - - - Allow us to assign an argument to a specific group. - - - - - The argument is not assigned to any group. - - - - - The argument is ignored when the optimization level is set to - Minimum Size (1) or Maximum Size (2). - - - - - Resolves an assembly reference. - - - The full path to the resolved assembly, or - if the assembly reference could not be resolved. - - - - - Is called each time a regular expression match is found during a - operation. - - The resulting from a single regular expression match during a . - - The expanded . - - The macro is not supported. - Expansion of a given macro is not yet implemented. - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly, or if - the name could not be determined. - - - - - A single build configuration for a Visual C++ project or for a specific - file in the project. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - - The value of a setting for the specified tool, or - if the setting is not defined for the specified tool. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - The value to return if setting is not defined. - - The value of a setting for the specified tool, or - if the setting is not defined for - the specified tool. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - Gets the name of the configuration, including the platform it - targets. - - - Tthe name of the configuration, including the platform it targets. - - - - - Gets the output directory. - - - - - Gets the path in which the output file will be created before its - copied to the actual output path. - - - For Visual C++ projects, the output file will be immediately - created in the output path. - - - - - Gets the name of the configuration. - - - The name of the configuration. - - - - - Gets the platform that the configuration targets. - - - The platform targeted by the configuration. - - - - - Represents the configuration of a file. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - - - Gets the value of a given setting for a specified tool. - - The name of the tool. - The name of the setting. - The value to return if setting is not defined in both the file and project configuration. - - The value of a setting for the specified tool, or - if the setting is not defined in - both the file and project configuration. - - - - If the setting is not defined in the file configuration, then - the project level setting will be used. - - - An empty setting value, which is used as a means to override the - project default, will be returned as a empty . - - - - - - Gets a value indication whether the file should be excluded from - the build for this configuration. - - - if the file should be excluded from the - build for this configuration; otherwise, . - - - - - Gets the relative path of the file. - - - The path of the file relative to the project directory. - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets the path for the output file. - - - The path for the output file, or if there's - no output file for this configuration. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - Visual C++ project. - - - - - Gets a value indicating whether building the project for the specified - build configuration results in managed output. - - The solution configuration that is built. - - if the project output for the specified build - configuration is either a Dynamic Library (dll) or an Application - (exe), and Managed Extensions are enabled; otherwise, - . - - - - - Verifies whether the specified XML fragment represents a valid project - that is supported by this . - - XML fragment representing the project file. - - The XML fragment is not supported by this . - -or- - The XML fragment does not represent a valid project (for this ). - - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - The document element of the project. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro or if the macro is not - supported. - - - - - Build resource files for the given configuration. - - The resource files to build. - The project configuration. - The build configuration. - - TODO: refactor this as we should always get only one element in the - list. Each res file should be built - with its own file configuration. - - - - - Build Interface Definition Language files for the given - configuration. - - The IDL files to build. - The project configuration. - The build configuration. - - TODO: refactor this as we should always get only one element in the - list. Each IDL file should be built - with its own file configuration. - - - - - Merges the specified tool setting of - with . - - - The merge is suppressed when the flag $(noinherit) is defined in - . - - - - - Gets the absolute path to the object file or directory. - - The build configuration - - The absolute path to the object file or directory, or - - - We use an absolute path for the object file, otherwise - <cl> assumes a location relative to the output - directory - not the project directory. - - - - - Returns a value indicating whether the project represented by the - specified XML fragment is supported by . - - XML fragment representing the project to check. - - if supports the - specified project; otherwise, . - - - - A project is identified as as Visual C++ project, if the XML - fragment at least has the following information: - - - - - ]]> - - - - - - Removes leading and trailing quotes from the specified path. - - The path to clean. - - - - Returns the Visual Studio product version of the specified project - XML fragment. - - XML fragment representing the project to check. - - The Visual Studio product version of the specified project XML - fragment. - - - The product version could not be determined. - -or- - The product version is not supported. - - - - - Holds the files included in the project. - - - - For project files with no specific file configuration, the relative - path is added to the list. - - - For project files that have a specific file configuration, a - containing the - instance representing the file configurations is added. - - - - - - Gets the name of the Visual C++ project. - - - - - Gets the type of the project. - - - The type of the project. - - - - - Gets the path of the Visual C++ project. - - - - - Gets the directory containing the VS.NET project. - - - - - Get the location of the project. - - - . - - - For now, we only support local Visual C++ projects. - - - - - Get the directory in which intermediate build output that is not - specific to the build configuration will be stored. - - - This is a directory relative to the project directory, - named temp\. - - - - - Gets or sets the unique identifier of the Visual C++ project. - - - - - Represents a Visual C++ project configuration. - - - - - Expands the given macro. - - The macro to expand. - - The expanded macro. - - - The macro is not supported. - -or- - The macro is not implemented. - -or- - The macro cannot be expanded. - - - Expansion of a given macro is not yet implemented. - - - - - Gets the value of the specified attribute from the specified node. - - The node of which the attribute value should be retrieved. - The attribute of which the value should be returned. - - The value of the attribute with the specified name or - if the attribute does not exist or has no value. - - - - - Holds the output path for this build configuration. - - - Lazy initialized by . - - - - - Holds list of files to link in the order in which they are defined - in the project file. - - - - - Holds the C++ sources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the C++ source files for that - build configuration. - - - - - Holds the resources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the resources files for that - build configuration. - - - - - Holds the IDL files for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the IDL files for that build - configuration. - - - - - Tells the compiler which character set to use. - - - - - Gets a value indicating whether Managed Extensions for C++ are - enabled. - - - - - Gets a value indicating how MFC is used by the configuration. - - - - - Gets a value indicating how ATL is used by the configuration. - - - - - Gets the list of files to link in the order in which they are - defined in the project file. - - - - - Holds the C++ sources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the C++ source files for that - build configuration. - - - - - Gets the resources for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the resources files for that - build configuration. - - - - - Get the IDL files for each build configuration. - - - The key of the hashtable is a build configuration, and the - value is an ArrayList holding the IDL files for that build - configuration. - - - - - Gets the target path for usage in macro expansion. - - - The target path, or a zero-length string if there's no output file - for this configuration. - - - - - Get the directory in which intermediate build output will be stored - for this configuration. - - - - This is a directory relative to the project directory named - obj\<configuration name>. - - - .resx and .licx files will only be recompiled if the - compiled resource files in the are not - uptodate. - - - - - - Get the path of the output directory relative to the project - directory. - - - - - Gets the intermediate directory, specified relative to project - directory. - - - The intermediate directory, specified relative to project directory. - - - - - Gets the absolute path for the output file. - - - The absolute path for the output file, or - if there's no output file for this configuration. - - - - - Gets a comma-separated list of directories to scan for assembly - references. - - - A comma-separated list of directories to scan for assembly - references, or if no additional directories - should scanned. - - - - - The type of output for a given configuration. - - - - - A Makefile. - - - - - Application (.exe). - - - - - Dynamic Library (.dll). - - - - - Static Library (.lib). - - - - - Utility. - - - - - Gets a instance representing the - absolute path to the import library to generate. - - - A representing the absolute path to the - import library to generate, or if no - import library must be generated. - - - - - Gets a value indicating whether the reference is managed for the - specified configuration. - - The build configuration of the reference. - - if the reference is managed for the - specified configuration; otherwise, . - - - - - Gets the name of the referenced assembly. - - - The name of the referenced assembly. - - - - - Gets the name of the tool that should be used to create the - . - - - The name of the tool that should be used to create the - . - - - - - Gets the path of the wrapper assembly. - - - The path of the wrapper assembly. - - - The wrapper assembly is stored in the object directory of the - project. - - - - - Gets the path of the Primary Interop Assembly. - - - The path of the Primary Interop Assembly, or - if not available. - - - - - Gets the hex version of the type library as defined in the definition - of the reference. - - - The hex version of the type library. - - The definition of the reference does not contain a "ControlVersion" attribute. - - - - Gets the GUID of the type library as defined in the definition - of the reference. - - - The GUID of the type library. - - - - - Gets the locale of the type library in hex notation. - - - The locale of the type library. - - -
-
diff --git a/External/nant/bin/NAnt.VisualCppTasks.dll b/External/nant/bin/NAnt.VisualCppTasks.dll deleted file mode 100644 index 4f6c39c96..000000000 Binary files a/External/nant/bin/NAnt.VisualCppTasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.VisualCppTasks.xml b/External/nant/bin/NAnt.VisualCppTasks.xml deleted file mode 100644 index a8ab7a332..000000000 --- a/External/nant/bin/NAnt.VisualCppTasks.xml +++ /dev/null @@ -1,1211 +0,0 @@ - - - - NAnt.VisualCppTasks - - - - - Compiles C/C++ programs using cl.exe, Microsoft's C/C++ compiler. - - - This task is intended for version 13.00.9466 of cl.exe. - - - Compiles helloworld.cpp for the Common Language Runtime. - - - - - - - ]]> - - - - - - Initializes a new instance of the class. - - - - - Compiles the sources. - - - - - Determines if the sources need to be compiled. - - - - - Determines whether the precompiled header file is up-to-date. - - - if no precompiled header file was specified; - otherwise, . - - - In order to determine accurately whether the precompile header file - is up-to-date, we'd need scan all the header files that are pulled - in. As this is not implemented right now, its safer to always - recompile. - - - - - Determines whether any file that are includes in the specified - source file has been updated after the obj was compiled. - - The source file to check. - The last write time of the compiled obj. - - The full path to the include file that was modified after the obj - was compiled, or if no include files were - modified since the obj was compiled. - - - - To determine what includes are defined in a source file, conditional - directives are not honored. - - - If a given include cannot be resolved to an existing file, then - it will be considered stable. - - - - - - Quotes an argument value and duplicates trailing backslahes. - - The argument value to quote. - - The quotes argument value. - - - - - Determines the file name of the OBJ file for the specified source - file. - - The source file for which the OBJ file should be determined. - The path of the object file. - - The file name of the OBJ file for the specified source file. - - - - - Directory where all output files are placed. - - - - - Specifies the path and/or name of the generated precompiled header - file - given either relative to or as an - absolute path. - - - - - The path of the boundary file when generating/using the - specified . If a precompiled header file is - not specified then this attribute is ignored. - - - - - The mode in which the specified (if any) is - used. The default is . - - - - - Specifies whether Managed Extensions for C++ should be enabled. - The default is . - - - - - Tells the compiler to use the specified character set. - - - - - Options to pass to the compiler. - - - - - The list of files to compile. - - - - - The list of directories in which to search for include files. - - - - - Directories that the compiler will search to resolve file references - passed to the #using directive. - - - - - Specifies metadata files to reference in this compilation as an - alternative to passing a file name to #using in source code. - - - - - Macro definitions to pass to cl.exe. - Each entry will generate a /D - - - - - Macro undefines (/U) to pass to cl.exe. - - - - - A name to override the default object file name; can be either a file - or directory name. The default is the output directory. - - - - - A name for the compiler-generated PDB file; can be either a file or - directory name. The default is the output directory. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Defines the supported modes for the use of precompiled header files. - - - - - Create a precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yc. - - - - - Automatically create a precompiled header file if necessary. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /YX. - - - - - Use a (previously generated) precompiled header file. - - - For further information on the use of this option - see the Microsoft documentation on the C++ compiler flag /Yu. - - - - - Run lib.exe, Microsoft's Library Manager. - - - Create a library. - - - - - - - ]]> - - - - - - Creates the library. - - - - - Determines if the sources need to be linked. - - - - - Options to pass to the compiler. - - - - - The output file. - - - - - The module definition file. - - - - - The list of files to combine into the output file. - - - - - Symbols to add to the symbol table. - - - - - Names of default libraries to ignore. - - - - - The list of additional library directories to search. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Links files using link.exe, Microsoft's Incremental Linker. - - - This task is intended for version 7.00.9466 of link.exe. - - - - Combine all object files in the current directory into helloworld.exe. - - - - - - - - ]]> - - - - - - Links the sources. - - - - - Determines if the output needs linking. - - - - - Quotes an argument value and duplicates trailing backslahes. - - The argument value to quote. - - The quotes argument value. - - - - - Options to pass to the compiler. - - - - - Create debugging information for the .exe file or DLL. The default is - . - - - - - The output file. - - - - - A user-specified name for the program database (PDB) that the linker - creates. The default file name for the PDB has the base name of the - and the extension .pdb. - - - - - The name of a module-definition file (.def) to be passed to the - linker. - - - - - Specified DLLs for delay loading. - - - - - The list of files to combine into the output file. - - - - - The list of additional library directories to search. - - - - - Link the specified modules into this assembly. - - - - - Embed the specified resources into this assembly. - - - - - Symbols to add to the symbol table. - - - - - Names of libraries that you want the linker to ignore when it - resolves external references. - - - - - Gets the filename of the external program to start. - - The filename of the external program. - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Compiles messages using mc.exe, Microsoft's Win32 message compiler. - - - - Compile text.mc using the default options. - - - - ]]> - - - Compile text.mc, passing a path to store the header, the rc - file and some additonal options. - - - - ]]> - - - - - - Compiles the sources. - - - - - Determine if source files need re-building. - - - - - Options to pass to the compiler. - - - - - Path to store header file. The default is the project base directory. - - - - - Path to store RC file. The default is the project base directory. - - - - - Input filename. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - This tasks allows you to run MIDL.exe. - - - - This task only supports a small subset of the MIDL.EXE command line - switches, but you can use the options element to specify any other - unsupported commands you want to specify. - - - - - - - - - - - - - ]]> - - - - - - This is where the work is done. - - - - - Check output files to see if we need rebuilding. - - if a rebuild is needed; otherwise, - . - - - - Check output files to see if we need rebuilding. - - - if a rebuild is needed; otherwise, - . - - - - - Writes the response file for midl.exe. - - - - - The /acf switch allows the user to supply an - explicit ACF file name. The switch also - allows the use of different interface names in - the IDL and ACF files. - - - - - The /align switch is functionally the same as the - MIDL /Zp option and is recognized by the MIDL compiler - solely for backward compatibility with MkTypLib. - - The alignment value can be 1, 2, 4, or 8. - - - - The /app_config switch selects application-configuration - mode, which allows you to use some ACF keywords in the - IDL file. With this MIDL compiler switch, you can omit - the ACF and specify an interface in a single IDL file. - - - - - The /char switch helps to ensure that the MIDL compiler - and C compiler operate together correctly for all char - and small types. - - Can be one of signed | unsigned | ascii7 - - - - The /client switch directs the MIDL compiler to generate - client-side C source files for an RPC interface - - can be one of stub | none - - - - The /cstub switch specifies the name of the client - stub file for an RPC interface. - - - - - Specifies the file name for the generated dlldata file for a proxy - DLL. The default file name Dlldata.c is used if - is not specified. - - - - - The /env switch selects the - environment in which the application runs. - - It can take the values win32 and win64 - - - - The /Oi switch directs the MIDL compiler to - use a fully-interpreted marshaling method. - The /Oic and /Oicf switches provide additional - performance enhancements. - - - If you specify the Oi attribute, you must set it to - one of the values: - - Oi="" - - Oi="c" - - Oi="f" - - Oi="cf" - - - - - Specifies a file name for the type library generated by the MIDL - compiler. - - - - - Specifies the name of the header file. - - - - - Specifies the name of the interface identifier file for a COM - interface, overriding the default name obtained by adding _i.c - to the IDL file name. - - - - - Specifies the name of the interface proxy file for a COM interface. - - - - - Name of .IDL file to process. - - - - - Additional options to pass to midl.exe. - - - - - Macro definitions to pass to mdil.exe. - Each entry will generate a /D - - - - - Macro undefines (/U) to pass to mdil. - - - - - The list of directories in which to search for include files. - - - - - Filename of program to execute - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Compiles resources using rc.exe, Microsoft's Win32 resource - compiler. - - - - Compile text.rc to text.res using the default options. - - - - ]]> - - - - - Compile text.rc, passing an additional option. - - - - ]]> - - - - - - Compile the resource file - - - - - Determines if the resource need compiling. - - - - - Check if a resource file has been updated. - - - - - - - Options to pass to the compiler. - - - - - Output file. - - - - - The resource file to compile. - - - - - Default language ID. - - - - - The list of directories in which to search for include files. - - - - - Macro definitions to pass to rc.exe. - Each entry will generate a /d - - - - - Filename of program to execute - - - - - Arguments of program to execute - - - - - Defines the character sets that can be used by the C++ compiler. - - - - - Have the compiler determine the character set. - - - - - Unicode character set. - - - - - Multi-byte character set. - - - - - Represents a library. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with - the specified name. - - is . - - - - The name of the library. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Represents a symbol. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with - the specified name. - - is . - - - - The name of the symbol. - - - - - If then the element will be processed; - otherwise, skipped. The default is . - - - - - If then the element will be skipped; - otherwise, processed. The default is . - - - - - Contains a collection of elements. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with the specified instance. - - - - - Initializes a new instance of the class - with the specified array of instances. - - - - - Adds a to the end of the collection. - - The to be added to the end of the collection. - The position into which the new element was inserted. - - - - Adds the elements of a array to the end of the collection. - - The array of elements to be added to the end of the collection. - - - - Adds the elements of a to the end of the collection. - - The to be added to the end of the collection. - - - - Determines whether a is in the collection. - - The to locate in the collection. - - if is found in the - collection; otherwise, . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the specified index of the target array. - - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Retrieves the index of a specified object in the collection. - - The object for which the index is returned. - - The index of the specified . If the is not currently a member of the collection, it returns -1. - - - - - Inserts a into the collection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - - Returns an enumerator that can iterate through the collection. - - - A for the entire collection. - - - - - Removes a member from the collection. - - The to remove from the collection. - - - - Gets or sets the element at the specified index. - - The zero-based index of the element to get or set. - - - - Enumerates the elements of a . - - - - - Initializes a new instance of the class - with the specified . - - The collection that should be enumerated. - - - - Advances the enumerator to the next element of the collection. - - - if the enumerator was successfully advanced - to the next element; if the enumerator has - passed the end of the collection. - - - - - Sets the enumerator to its initial position, which is before the - first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - Defines how to deal with backslashes in values of command line - arguments. - - - - - Does not perform any processing on backslashes. - - - - - Duplicates the trailing backslash. - - - - - Fixes the trailing backslash by replaces trailing double backslashes - with only one backslash and removing single trailing backslashes. - - - - - Removes all the trailing backslashes. - - - - - Groups a set of useful manipulation methods for - command-line arguments. - - - - - Performs backslash processing on the specified value using a given - method. - - The to process. - The to use. - - with backslashes processed using the given - . - - - - - Duplicates the trailing backslash. - - The input string to check and duplicate the trailing backslash if necessary. - The result string after being processed. - - Also duplicates trailing backslash in quoted value. - - - - - Fixes the trailing backslash. This function replaces the trailing double backslashes with - only one backslash. It also, removes the single trailing backslash. - - The input string. - The result string after being processed. - - - - Removes all the trailing backslashes from the input. - - The input string. - The result string without trailing backslashes. - - - - Quotes an argument value and processes backslashes using a given - . - - The argument value to quote. - The to use. - - The quoted argument value. - - - - diff --git a/External/nant/bin/NAnt.Win32Tasks.dll b/External/nant/bin/NAnt.Win32Tasks.dll deleted file mode 100644 index 80ec5c15d..000000000 Binary files a/External/nant/bin/NAnt.Win32Tasks.dll and /dev/null differ diff --git a/External/nant/bin/NAnt.Win32Tasks.xml b/External/nant/bin/NAnt.Win32Tasks.xml deleted file mode 100644 index 60d28485c..000000000 --- a/External/nant/bin/NAnt.Win32Tasks.xml +++ /dev/null @@ -1,800 +0,0 @@ - - - - NAnt.Win32Tasks - - - - - Groups a set of functions that convert Windows native filenames to - Cygwin POSIX-style pathnames and vice versa. - - - It can be used when a Cygwin program needs to pass a file name to a - native Windows program, or expects to get a file name from a native - Windows program. - - - - - Initializes a new instance of the - class with the specified and properties. - - The in which the class is used. - The set of properties to use for macro expansion. - - - - Gets the DOS (short) form of the specified path. - - The path to convert. - - The DOS (short) form of the specified path. - - cygpath could not be started. - could not be converted to a short form. - - - - Gets the Unix form of the specified path. - - The path to convert. - - The Unix form of the specified path. - - cygpath could not be started. - could not be converted to a Unix form. - - - - Gets the Windows form of the specified path. - - The path to convert. - - The Windows form of the specified path. - - cygpath could not be started. - could not be converted to a Windows form. - - - - Runs cygpath with the specified arguments and returns the result - as a . - - The arguments to pass to cygpath. - - The result of running cygpath with the specified arguments. - - - - - Factory method to return a new instance of ExecTask - - - - - - - Generates a Windows Forms Control that wraps ActiveX Controls defined - in an OCX. - - - - - ]]> - - - - - - Import the ActiveX control. - - - - - Determines whether the assembly needs to be created again. - - - if the assembly needs to be created again; - otherwise, . - - - - - Filename of the .ocx file. - - - - - Filename of the generated assembly. - - - - - Specifies the file containing the public key to use to sign the - resulting assembly. - - - The file containing the public key to use to sign the resulting - assembly. - - - - - Specifies the publisher's official public/private key pair with which - the resulting assembly should be signed with a strong name. - - - The keyfile to use to sign the resulting assembly with a strong name. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the key container in which the public/private key pair - should be found that should be used to sign the resulting assembly - with a strong name. - - - The key container containing a public/private key pair that should - be used to sign the resulting assembly. - - - - - Specifies to sign the resulting control using delayed signing. - - - - - Determines whether C# source code for the Windows Form wrapper should - be generated. The default is . - - - - - Assembly to use for Runtime Callable Wrapper rather than generating - new one [.NET 1.1 or higher]. - - - - - Indicates whether aximp supports using an existing Runtime - Callable Wrapper for a given target framework. The default is - . - - - - - Gets the command-line arguments for the external program. - - - The command-line arguments for the external program. - - - - - Reads the most recent Windows SDK InstallationFolder key into a NAnt property - - - - - ]]> - - - - - - locate the most recent WinSDK installed - - - - - Converts a version expressed as a string into a Version object - - - A containing the version to convert. - - - A object representing the version string. - - - - - - The property to set to the value stored in the InstalledFolder key of the located WinSDK version. - - - - - - - The minimum acceptable Windows SDK version. - - - - - - - The maximum acceptable Windows SDK version. - - - - - - - The minimum acceptable .NET sdk version. - - - - - - - The maximum acceptable .NET sdk version. - - - - - - Reads the mono registry path into a NAnt property. - - - The mono registry keyes can exist in one of two places depending on the platform. This - task will check to see which registry path that Mono is using. - - - - - ]]> - - - - - - The Mono reg key to default to if none of the keys in _regKeys are found - in the running machine. - - - - - Private property name to assign the Mono registry path to. - - - - - Private array of Mono registry paths to test in order. - - - If new registry paths are used by the Mono team, add them to this array. - - - - - Locates the appropriate Mono registry path to use. - - - - - - The property to set to the Mono registry path. - - - - - - Reads a value or set of values from the Windows Registry into one or - more NAnt properties. - - - Read a single value from the registry. - - - ]]> - - Read all the registry values in a key. - - - ]]> - - - - - - read the specified registry value - - - - - Returns the hive for a given key. - - - - - The hive for a given key. - - - - - Returns the key for a given registry hive. - - The registry hive to return the key for. - - The key for a given registry hive. - - - - - The property to set to the specified registry key value. - If this attribute is used then a single value will be read. - - - - - The prefix to use for the specified registry key values. - If this attribute is used then all registry values will be read and stored as properties with this prefix. - - - Registry values a, b, c will be turned into prefixa, prefixb, prefixc named properties - - - - - The registry key to read, including the path. - - - SOFTWARE\Microsoft\.NETFramework\sdkInstallRoot - - - - - Space separated list of registry hives to search for . - For a list of possible values, see . The - default is . - - - - - - - - Registers an assembly, or set of assemblies for use from COM clients. - - - - Refer to the Regasm - documentation for more information on the regasm tool. - - - - - Register types in a single assembly. - - - - ]]> - - - - - Register types of an assembly and generate a type library containing - definitions of accessible types defined within the assembly. - - - - ]]> - - - - - Register types of set of assemblies at once, while specifying a set - of reference assemblies. - - - - - - - - - - - - ]]> - - - - - - Updates the of the specified - . - - The of which the should be updated. - - - - Registers or unregisters a single assembly, or a group of assemblies. - - - - - The name of the file to register. This is provided as an alternate - to using the task's . - - - - - Registry file to export to instead of entering the types directly - into the registry. - - - - - Set the code base registry setting. - - - - - Only refer to already registered type libraries. - - - - - Export the assemblies to the specified type library and register it. - - - - - Unregister the assembly. The default is . - - - - - The set of assemblies to register, or unregister. - - - - - The set of assembly references. - - - - - Gets the working directory for the application. - - - The working directory for the application. - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Gets the filename of the external program to start. - - - The filename of the external program. - - - Override in derived classes to explicitly set the location of the - external tool. - - - - - Exports a .NET assembly to a type library that can be used from unmanaged - code (wraps Microsoft's tlbexp.exe). - - - - See the Microsoft.NET Framework SDK documentation for details. - - - - Export DotNetAssembly.dll to LegacyCOM.dll. - - - ]]> - - - - - - Exports the type library. - - - - - Determines whether the assembly needs to be exported to a type - library again. - - - if the assembly needs to be exported to a - type library; otherwise, . - - - - - Specifies the assembly for which to export a type library. - - - The assembly for which to export a type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the name of the type library file to generate. - - - The name of the type library file to generate. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the file used to determine capitalization of names in a - type library. - - - The file used to determine capitalization of names in a type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - - Imports a type library to a .NET assembly (wraps Microsoft's tlbimp.exe). - - - - This task lets you easily create interop assemblies. By default, it will - not reimport if the underlying COM TypeLib or reference has not changed. - - - See the Microsoft.NET Framework SDK documentation for details. - - - - Import LegacyCOM.dll to DotNetAssembly.dll. - - - ]]> - - - - - Generate an assembly named "Interop.MSVidCtlLib.dll" for the - MS Video Control 1.0 Type Library, transforming any [out, retval] - parameters of methods on dispinterfaces in the type library into - return values in the managed library. - - - - - - - - ]]> - - - - - - Imports the type library to a .NET assembly. - - - - - Returns the path of the type library, removing the identifier of - the type library from the specified string. - - The path from which to extract the path of the type library. - - The path of the type library without the type library identifier. - - - An example of a path which includes the identifier of the type - library (in this case "2") is - C:\WINDOWS\system32\msvidctl.dll\2. - - - - - Determines whether the type library needs to be imported again. - - - if the type library needs to be imported; - otherwise, . - - - - - Specifies the name of the output file. - - - The name of the output file. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the namespace in which to produce the assembly. - - - The namespace in which to produce the assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the version number of the assembly to produce. - - - - The version number of the assembly to produce. - - - The version number should be in the format major.minor.build.revision. - - - See the Microsoft.NET Framework SDK documentation for details. - - - - - - Specifies whether the resulting assembly should be signed with a - strong name using delayed signing. The default is . - - - if the resulting assembly should be signed - with a strong name using delayed signing; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether a primary interop assembly should be produced for - the specified type library. The default is . - - - if a primary interop assembly should be - produced; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the file containing the public key to use to sign the - resulting assembly. - - - The file containing the public key to use to sign the resulting - assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the publisher's official public/private key pair with which - the resulting assembly should be signed with a strong name. - - - The keyfile to use to sign the resulting assembly with a strong name. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the key container in which the public/private key pair - should be found that should be used to sign the resulting assembly - with a strong name. - - - The key container containing a public/private key pair that should - be used to sign the resulting assembly. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies the assembly files to use to resolve references to types - defined outside the current type library. - - - The assembly files to use to resolve references to types defined - outside the current type library. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether a type library should not be imported if all - references within the current assembly or the reference assemblies - cannot be resolved. The default is . - - - if a type library should not be imported if - all references cannot be resolved; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether to import a COM style SafeArray as a managed - class type. The default is . - - - if a COM style SafeArray should be imported - as a managed class type; otherwise, - . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies how to transform the metadata [.NET 1.1 or higher]. - - - - - Specifies the source type library that gets passed to the type - library importer. - - - The source type library that gets passed to the type library - importer. - - See the Microsoft.NET Framework SDK documentation for details. - - - - Specifies whether interfaces should be produced without .NET Framework - security checks. The default is . - - - if interfaces without .NET Framework security - checks should be produced; otherwise, . - - See the Microsoft.NET Framework SDK documentation for details. - - - - Indicates whether tlbimp supports transforming metadata for - a given target framework. The default is . - - - - - Gets the command line arguments for the external program. - - - The command line arguments for the external program. - - - - diff --git a/External/nant/bin/NAnt.exe b/External/nant/bin/NAnt.exe deleted file mode 100644 index 55f9e29a6..000000000 Binary files a/External/nant/bin/NAnt.exe and /dev/null differ diff --git a/External/nant/bin/NAnt.exe.config b/External/nant/bin/NAnt.exe.config deleted file mode 100644 index a3dc8ec13..000000000 --- a/External/nant/bin/NAnt.exe.config +++ /dev/null @@ -1,2929 +0,0 @@ - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - lc - - - false - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - lc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The .NET Framework 1.1 SDK is not installed. - - - - true - true - true - - - cfresgen - - - sn - - - lc - - - - - - - - - - - - - - - - - - - - - - - - - - - The .NET Framework 2.0 SDK is not installed. - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - - - true - - - true - true - true - true - - - true - true - - - sn - - - lc - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - ${csc.tool} - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - true - - - ${mbas.tool} - true - - - ${resgen.tool} - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - strict - - - vbnc - true - - - ${resgen.tool} - true - ${resgen.supportsexternalfilereferences} - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - dmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - smcs - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - false - - - - - - - - - - - - - - - - - - - - - - - - - true - - - true - - - sn - - - false - - - true - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - - - - - - - - - true - - - ${path::combine(prefix, 'lib/mono/1.0/mcs.exe')} - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - true - - - ${path::combine(prefix, 'lib/mono/1.0/mbas.exe')} - true - - - ${resgen.tool} - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - - - - - - - - - - - - - - true - - - gmcs - true - true - true - ${csc.supportsdocgeneration} - true - true - true - true - - - mjs - strict - - - vbnc - true - - - ${resgen.tool} - true - ${resgen.supportsexternalfilereferences} - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - true - - - gmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - - true - - - dmcs - true - linq - true - true - true - true - true - true - true - - - mjs - strict - - - vbnc - true - - - true - true - - - sn - true - - - false - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unable to locate 'mono' module using pkg-config. Download the Mono development packages from http://www.mono-project.com/downloads/. - - - - - - - smcs - true - true - true - true - true - true - true - true - - - true - true - - - sn - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/External/nant/bin/NAnt.xml b/External/nant/bin/NAnt.xml deleted file mode 100644 index 05605b625..000000000 --- a/External/nant/bin/NAnt.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - NAnt - - - - - Stub used to created and launch real ConsoleDriver - class in Core assembly. - - - - - Entry point for executable - - Command Line arguments - The result of the real execution - - - - Constructs the privatebinpath. - - - - For the common version dir, we do not use the framework version - as defined in the NAnt configuration file but the CLR version - since the assemblies in that directory are not specific to a - certain family and the framwork version might differ between - families (eg. mono 1.0 == .NET 1.1). - - - The runtime framework. - The base directory of the domain. - - The privatebinpath. - - - - - Given an absolute directory and an absolute file name, returns a - relative file name. - - An absolute directory. - An absolute file name. - - A relative file name for the given absolute file name. - - - - - Helper class for invoking the application entry point in NAnt.Core - and passing the command-line arguments. - - - - - Initializes a new instance of the - class with the specified command-line arguments. - - The commandline arguments passed to NAnt.exe. - Directories relative to the base directory of the AppDomain to probe for missing assembly references. - - - - Invokes the application entry point in NAnt.Core. - - - - - Gets the status that the build process returned when it exited. - - - The code that the build process specified when it terminated. - - - - diff --git a/External/nant/bin/NDoc.Documenter.NAnt.dll b/External/nant/bin/NDoc.Documenter.NAnt.dll deleted file mode 100644 index e64688320..000000000 Binary files a/External/nant/bin/NDoc.Documenter.NAnt.dll and /dev/null differ diff --git a/External/nant/bin/NDoc.Documenter.NAnt.xml b/External/nant/bin/NDoc.Documenter.NAnt.xml deleted file mode 100644 index 83da5d759..000000000 --- a/External/nant/bin/NDoc.Documenter.NAnt.xml +++ /dev/null @@ -1,373 +0,0 @@ - - - - NDoc.Documenter.NAnt - - - - - NDoc Documenter for building custom NAnt User documentation. - - - - - Initializes a new instance of the class. - - - - - Resets the documenter to a clean state. - - - - - Builds the documentation. - - - - - Gets the documenter's output directory. - - - The documenter's output directory. - - - - - Gets or sets the root namespace to document. - - - The root namespace to document, or a empty - if no restriction should be set on the namespace to document. - - - - - Gets the name of the product for which documentation should be - generated. - - - The name of the product for which documentation should be - generated. - - - - - Gets the version of the product for which documentation should be - generated. - - - The version of the product for which documentation should be - generated. - - - - - Gets the URL of the website of the product for which documentation - should be generated. - - - The URL of the website of the product for which documentation should - be generated. - - - - - Gets the documenter's main output file. - - - The documenter's main output file. - - - - - NDoc configuration class for . - - - - - Initializes a new instance of the - class. - - - - - Gets or sets the output directory. - - - The output directory. - - - - - Gets or sets a value indicating whether .NET Framework SDK links - should point to the online MSDN library. - - - - - Gets or sets the name of the product for which documentation - should be generated. - - - The name of the product for which documentation should be - generated. The default is "NAnt". - - - - - Gets or sets the version of the product for which documentation - should be generated. - - - The version of the product for which documentation should be - generated. - - - - - Gets or sets the URL of product website. - - - The URL of the website of the product for which documentation should - be generated. - - - - - Gets or sets the base URI for linking to NAnt docs. - - - The base URI for linking to NAnt docs. - - - - - Gets or sets the root namespace to document. - - - The root namespace to document, or a empty - if no restriction should be set on the namespace to document. - - - - - Provides an extension object for the XSLT transformations. - - - - - Initializes a new instance of the - class. - - - - - Gets the root namespace to document. - - - The root namespace to document, or a empty - if no restriction should be set on the namespace to document. - - - - - Searches the document for the <class> node with the - given id. - - Type.FullName of class to return - - The <class> node with the given id, or - if the node does not exist. - - - - - Returns an href for a cref. - - The cref for which the href will be looked up. - - The href for the specified cref. - - - - - Returns the name for a given cref. - - The cref for which the name will be looked up. - - The name for the specified cref. - - - - - Returns the NAnt task name for a given cref. - - The cref for the task name will be looked up. - - The NAnt task name for the specified cref. - - - - - Returns the NAnt element name for a given cref. - - The cref for the element name will be looked up. - - The NAnt element name for the specified cref. - - - - - Determines the of the given type node. - - The type node for which to determine the . - - The of the given type node. - - - - - Determines the of the type to which - the given cref points. - - The cref for which to determine the . - - The of the type to which the given - cref points. - - - - - Determines whether the given cref points to a datatype. - - The cref to check. - - if the given cref points to a datatype; - otherwise, . - - - - - Determines whether the given cref points to an element. - - The cref to check. - - if the given cref points to an element; - otherwise, . - - - When the cref points to a or - this method returns . - - - - - Determines whether the given cref points to a datatype. - - The cref to check. - - if the given cref points to a datatype; - otherwise, . - - - - - Determines whether the given cref points to a task. - - The cref to check. - - if the given cref points to a task; - otherwise, . - - - - - Determines whether the given cref points to a functionset. - - The cref to check. - - if the given cref points to a functionset; - otherwise, . - - - - - Encodes a URL string using for reliable - HTTP transmission from the Web server to a client. - - The text to encode. - - The encoded string. - - - - - Gets the BuildElementAttribute name for the "class/property" XmlNode - - The XmlNode to look for a name. - The BuildElementAttrbute.Name if the attribute exists for the node. - - - - Returns the filename to use for the given function XmlElement - - The "method" element to find the filename for. - Specified whether to URLencode the filename. - - - - Returns the filename to use for the given class XmlNode - - The "Class" element to find the filename for. - - The relative path and filename where this type is stored in the - documentation. - - - For a type that is neither a task, enum, global type, filter or - functionset, the returned filename will point to the SDK docs for - that type. - - - - - Gets the TaskNameAttrbute name for the "class" XmlNode - - The XmlNode to look for a name. - The if the attribute exists for the node. - - The class is also checked to make sure it is derived from - - - - - Gets the function name for methods that represent a NAtn function. - - The XmlNode to look for a name. - - The function name if represent a - NAnt function. - - - - - Returns a partial URL to link to the functionset in the function index. - - The "Class" element to find the filename for. - - - - Gets the base url for links to system types. - - - The base url for links to system types. - - - - - Gets the page file extension for links to system types. - - - - diff --git a/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.dll b/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.dll deleted file mode 100644 index 43a627ce9..000000000 Binary files a/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.dll and /dev/null differ diff --git a/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.xml b/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.xml deleted file mode 100644 index 70166d3d7..000000000 --- a/External/nant/bin/extensions/common/2.0/NAnt.MSBuild.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - NAnt.MSBuild - - - - - Functions to return information for MSBuild system. - - - - - - - - Test whether project is VS2005 project and could be built using <msbuild> - - The name or path of the project file (csproj, vbproj, ...). - - True, if it is msbuild project, False otherwise. - - - - - Analyses Microsoft Visual Studio .NET 2005 (Whidbey) solution files. - - - - - Analyses Microsoft Visual Studio .NET 2008 (Orcas) solution files. - - - - - Analyses Microsoft Visual Studio .NET 2010 (Rosario) solution files. - - - - - Determines the version of the target msbuild file. - - - - This method identifies the msbuild version by reviewing the following tags in order: - - - - <ProductVersion> - - - <TargetFrameworkVersion> - - - ToolsVersion attribute - - - - - A representing the msbuild project file. - - - A enum value indicating the msbuild project - file version. - - - version string found in the tags listed above is not recognized. - - - - - Enum indicating the level of verbosity for the NAnt logger. - - - - Indicates no output - - - Indicates little output - - - Indicates normal output - - - Indicates detailed output - - - Indicates all output - - - - Logger classed used for MSBuild tasks in NAnt. - - - - Sample task used for testing. - - - - Sample task constructor. - - Project to assign task to. - Sample name property. - - - Test method. - - - Gets sample name for task. - - - diff --git a/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.dll b/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.dll deleted file mode 100644 index 43a627ce9..000000000 Binary files a/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.dll and /dev/null differ diff --git a/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.xml b/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.xml deleted file mode 100644 index 70166d3d7..000000000 --- a/External/nant/bin/extensions/common/4.0/NAnt.MSBuild.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - NAnt.MSBuild - - - - - Functions to return information for MSBuild system. - - - - - - - - Test whether project is VS2005 project and could be built using <msbuild> - - The name or path of the project file (csproj, vbproj, ...). - - True, if it is msbuild project, False otherwise. - - - - - Analyses Microsoft Visual Studio .NET 2005 (Whidbey) solution files. - - - - - Analyses Microsoft Visual Studio .NET 2008 (Orcas) solution files. - - - - - Analyses Microsoft Visual Studio .NET 2010 (Rosario) solution files. - - - - - Determines the version of the target msbuild file. - - - - This method identifies the msbuild version by reviewing the following tags in order: - - - - <ProductVersion> - - - <TargetFrameworkVersion> - - - ToolsVersion attribute - - - - - A representing the msbuild project file. - - - A enum value indicating the msbuild project - file version. - - - version string found in the tags listed above is not recognized. - - - - - Enum indicating the level of verbosity for the NAnt logger. - - - - Indicates no output - - - Indicates little output - - - Indicates normal output - - - Indicates detailed output - - - Indicates all output - - - - Logger classed used for MSBuild tasks in NAnt. - - - - Sample task used for testing. - - - - Sample task constructor. - - Project to assign task to. - Sample name property. - - - Test method. - - - Gets sample name for task. - - - diff --git a/External/nant/bin/lib/common/2.0/nunit-console-runner.dll b/External/nant/bin/lib/common/2.0/nunit-console-runner.dll deleted file mode 100644 index b0e611afb..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit-console-runner.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/2.0/nunit-console.exe b/External/nant/bin/lib/common/2.0/nunit-console.exe deleted file mode 100644 index 0735eef6b..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit-console.exe and /dev/null differ diff --git a/External/nant/bin/lib/common/2.0/nunit-console.exe.config b/External/nant/bin/lib/common/2.0/nunit-console.exe.config deleted file mode 100644 index 8a6a2a6a6..000000000 --- a/External/nant/bin/lib/common/2.0/nunit-console.exe.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/External/nant/bin/lib/common/2.0/nunit.core.dll b/External/nant/bin/lib/common/2.0/nunit.core.dll deleted file mode 100644 index 5f748becd..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit.core.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/2.0/nunit.core.interfaces.dll b/External/nant/bin/lib/common/2.0/nunit.core.interfaces.dll deleted file mode 100644 index 72b9486d7..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit.core.interfaces.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/2.0/nunit.framework.dll b/External/nant/bin/lib/common/2.0/nunit.framework.dll deleted file mode 100644 index eaea9eedf..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit.framework.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/2.0/nunit.util.dll b/External/nant/bin/lib/common/2.0/nunit.util.dll deleted file mode 100644 index 28d603c66..000000000 Binary files a/External/nant/bin/lib/common/2.0/nunit.util.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll b/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll deleted file mode 100644 index a64360bc4..000000000 Binary files a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.dll b/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.dll deleted file mode 100644 index e2a71cb1e..000000000 Binary files a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpCvsLib.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpZipLib.dll b/External/nant/bin/lib/common/neutral/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index 60ef0c99f..000000000 Binary files a/External/nant/bin/lib/common/neutral/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/NDoc.Core.dll b/External/nant/bin/lib/common/neutral/NDoc.Core.dll deleted file mode 100644 index 07fbbe87e..000000000 Binary files a/External/nant/bin/lib/common/neutral/NDoc.Core.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/NDoc.Documenter.Msdn.dll b/External/nant/bin/lib/common/neutral/NDoc.Documenter.Msdn.dll deleted file mode 100644 index 986998ca4..000000000 Binary files a/External/nant/bin/lib/common/neutral/NDoc.Documenter.Msdn.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/NDoc.ExtendedUI.dll b/External/nant/bin/lib/common/neutral/NDoc.ExtendedUI.dll deleted file mode 100644 index bc3d5a4ee..000000000 Binary files a/External/nant/bin/lib/common/neutral/NDoc.ExtendedUI.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/NUnitCore.dll b/External/nant/bin/lib/common/neutral/NUnitCore.dll deleted file mode 100644 index 0f1873c1e..000000000 Binary files a/External/nant/bin/lib/common/neutral/NUnitCore.dll and /dev/null differ diff --git a/External/nant/bin/lib/common/neutral/netDumbster.dll b/External/nant/bin/lib/common/neutral/netDumbster.dll deleted file mode 100644 index 49d7191fc..000000000 Binary files a/External/nant/bin/lib/common/neutral/netDumbster.dll and /dev/null differ diff --git a/External/nant/bin/log4net.dll b/External/nant/bin/log4net.dll deleted file mode 100644 index 20a2e1c47..000000000 Binary files a/External/nant/bin/log4net.dll and /dev/null differ diff --git a/External/nant/bin/scvs.exe b/External/nant/bin/scvs.exe deleted file mode 100644 index 093d36e1c..000000000 Binary files a/External/nant/bin/scvs.exe and /dev/null differ diff --git a/External/nant/schema/nant.xsd b/External/nant/schema/nant.xsd deleted file mode 100644 index d6290e281..000000000 --- a/External/nant/schema/nant.xsd +++ /dev/null @@ -1,2606 +0,0 @@ - - - - NAnt schema generated at 06/09/2012 07:28:04 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/External/vswhere/vswhere.exe b/External/vswhere/vswhere.exe deleted file mode 100644 index e3bf5d8f8..000000000 Binary files a/External/vswhere/vswhere.exe and /dev/null differ diff --git a/Images/SharpCli.ico b/Images/SharpCli.ico deleted file mode 100644 index 5cfa86ef9..000000000 Binary files a/Images/SharpCli.ico and /dev/null differ diff --git a/Images/SharpGen.ico b/Images/SharpGen.ico deleted file mode 100644 index 327c12123..000000000 Binary files a/Images/SharpGen.ico and /dev/null differ diff --git a/License.txt b/LICENSE similarity index 100% rename from License.txt rename to LICENSE diff --git a/NuGet.config b/NuGet.config new file mode 100644 index 000000000..3ba080467 --- /dev/null +++ b/NuGet.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 000000000..cd2d605e9 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# SharpDX + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/sharpdx/SharpDX/blob/master/LICENSE) +[![Build status](https://ci.appveyor.com/api/projects/status/21v2akj26ytuyml6?svg=true)](https://ci.appveyor.com/project/xoofx/sharpdx) +[![NuGet](https://img.shields.io/nuget/v/SharpDX.svg)](https://www.nuget.org/packages?q=Tags%3A%22SharpDX%22) + +> NOTE: As of 29 Mar 2019, **SharpDX is no longer being under development or maintenance** +> +> SharpDX has been around for almost 9 years, the project is relatively stable and has been used by many products. +> +> But due to the lack of strong technical leadership and community involvment on the project, SharpDX can no longer maintain the quality required for its maintenance +> In consequence, SharpDX is being retired. You can still download all NuGet binaries, you can fork and modify the project as long as you respect the original License. +> +> This repository is now readonly +> +> Signed: Alexandre MUTEL - xoofx + +Official web site: [sharpdx.org](http://sharpdx.org) + +SharpDX is an open-source project delivering the **full DirectX API for .Net on all Windows platforms**, allowing the development of high performance game, 2D and 3D graphics rendering as well as realtime sound application. + +## Download + +All SharpDX packages are available as NuGet packages: [![NuGet](https://img.shields.io/nuget/v/SharpDX.svg)](https://www.nuget.org/packages?q=Tags%3A%22SharpDX%22) + +Nightly packages can be download by adding the NuGet feed "https://ci.appveyor.com/nuget/sharpdx" to your `NuGet.config` file: + +```xml + + + + + + + +``` + +## Wiki Documentation + +You can find more documentation on the [Wiki](http://sharpdx.org/wiki) + +## Build + +In order to compile SharpDX, you need to install **Visual Studio 2017 or newer** with the following workloads and components: + +- [x] Visual C++ Toolset Component +- [x] Windows 10 SDK (10.0.14393.0) Component +- [x] Windows 10 - 1809 SDK (10.0.17763.0) Component +- [x] C# Development Workload +- [x] .NET Core Cross Platform Development Workload + +## Samples + +A collection of [Samples](https://github.com/sharpdx/SharpDX-Samples) using SharpDX exists as a separate github project. diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 76221aeca..000000000 --- a/Readme.md +++ /dev/null @@ -1,30 +0,0 @@ -# SharpDX [![Build status](https://ci.appveyor.com/api/projects/status/21v2akj26ytuyml6?svg=true)](https://ci.appveyor.com/project/xoofx/sharpdx) [![NuGet](https://img.shields.io/nuget/v/SharpDX.svg)](https://www.nuget.org/packages?q=Tags%3A%22SharpDX%22) - -Official web site: [sharpdx.org](http://sharpdx.org) - -SharpDX is an open-source project delivering the **full DirectX API for .Net on all Windows platforms**, allowing the development of high performance game, 2D and 3D graphics rendering as well as realtime sound application. - -## Download - -All SharpDX packages are available as NuGet packages: [![NuGet](https://img.shields.io/nuget/v/SharpDX.svg)](https://www.nuget.org/packages?q=Tags%3A%22SharpDX%22) - -## Wiki Documentation - -You can find more documentation on the [Wiki](http://sharpdx.org/wiki) - -## Build - -In order to compile SharpDX, you need to install **Visual Studio 2017 or newer** with the following workloads and components: - -- [x] Visual C++ Toolset Component -- [x] Windows 10 Creators Update SDK (10.0.15063.0) Component -- [x] C# Development Workload -- [x] .NET Core Cross Platform Development Workload - -## Samples - -A collection of [Samples](https://github.com/sharpdx/SharpDX-Samples) using SharpDX exists as a separate github project. - -## Licensing - -MIT diff --git a/Samples b/Samples index ed7e80cdc..f4fb0fe0f 160000 --- a/Samples +++ b/Samples @@ -1 +1 @@ -Subproject commit ed7e80cdcac145cf1864c6b9358a558e5fe8deb6 +Subproject commit f4fb0fe0f12e3edc4eda3f6307d135a66fa172cd diff --git a/SharpDX-Sources.sln b/SharpDX-Sources.sln deleted file mode 100644 index 386315b2b..000000000 --- a/SharpDX-Sources.sln +++ /dev/null @@ -1,165 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26228.9 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sources", "Sources", "{CC8DB471-0644-430D-9D4B-808A2475BEC0}" - ProjectSection(SolutionItems) = preProject - Source\Mapping.Direct3D1x.xml = Source\Mapping.Direct3D1x.xml - Source\Mapping.xml = Source\Mapping.xml - Source\SharedAssemblyInfo.cs = Source\SharedAssemblyInfo.cs - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX", "Source\SharpDX\SharpDX.csproj", "{D0BCD56A-41C4-4A4E-8590-26864CED07FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.D3DCompiler", "Source\SharpDX.D3DCompiler\SharpDX.D3DCompiler.csproj", "{361D3F81-A48A-47F2-80DF-CA4F9536CB4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct2D1", "Source\SharpDX.Direct2D1\SharpDX.Direct2D1.csproj", "{C97878F4-1510-4BBA-8153-BD71DA7D50D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D11", "Source\SharpDX.Direct3D11\SharpDX.Direct3D11.csproj", "{736DFB52-1AFE-4EFF-9710-89046AB5B1F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DirectSound", "Source\SharpDX.DirectSound\SharpDX.DirectSound.csproj", "{E927F2D5-8E27-462A-8687-CB207EE01164}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DXGI", "Source\SharpDX.DXGI\SharpDX.DXGI.csproj", "{3FC6DE77-B412-4101-9E64-6B9AA831179B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.XAudio2", "Source\SharpDX.XAudio2\SharpDX.XAudio2.csproj", "{4995127E-0B8E-45B8-80C4-6BAC1BBE3783}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D9", "Source\SharpDX.Direct3D9\SharpDX.Direct3D9.csproj", "{B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DirectInput", "Source\SharpDX.DirectInput\SharpDX.DirectInput.csproj", "{112F146B-7C01-490B-B943-EA9341ACCAF2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.RawInput", "Source\SharpDX.RawInput\SharpDX.RawInput.csproj", "{05D17A7B-F200-48C0-B8F9-B7211665A17F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.XInput", "Source\SharpDX.XInput\SharpDX.XInput.csproj", "{764D7CE5-F78B-432E-A849-E40BA44522D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Animation", "Source\SharpDX.Animation\SharpDX.Animation.csproj", "{874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.MediaFoundation", "Source\SharpDX.MediaFoundation\SharpDX.MediaFoundation.csproj", "{CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D11.Effects", "Source\SharpDX.Direct3D11.Effects\SharpDX.Direct3D11.Effects.csproj", "{BBB50A46-3291-4C62-B884-D1AB64F71EA5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DirectComposition", "Source\SharpDX.DirectComposition\SharpDX.DirectComposition.csproj", "{FBE5DD99-00A0-4FED-A116-941A46A0C0D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DirectManipulation", "Source\SharpDX.DirectManipulation\SharpDX.DirectManipulation.csproj", "{F826CCCE-4B72-47F4-9493-DFCB51C106B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Mathematics", "Source\SharpDX.Mathematics\SharpDX.Mathematics.csproj", "{49E4485F-3A2A-4C35-A159-12ECCFC00396}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D12", "Source\SharpDX.Direct3D12\SharpDX.Direct3D12.csproj", "{E5BB5D1C-6C07-495B-923B-FB80B79C535E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Desktop", "Source\SharpDX.Desktop\SharpDX.Desktop.csproj", "{5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D10", "Source\SharpDX.Direct3D10\SharpDX.Direct3D10.csproj", "{618AFA87-81A8-4B1C-8876-5457D49F2DEF}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D0BCD56A-41C4-4A4E-8590-26864CED07FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D0BCD56A-41C4-4A4E-8590-26864CED07FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D0BCD56A-41C4-4A4E-8590-26864CED07FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D0BCD56A-41C4-4A4E-8590-26864CED07FF}.Release|Any CPU.Build.0 = Release|Any CPU - {361D3F81-A48A-47F2-80DF-CA4F9536CB4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {361D3F81-A48A-47F2-80DF-CA4F9536CB4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {361D3F81-A48A-47F2-80DF-CA4F9536CB4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {361D3F81-A48A-47F2-80DF-CA4F9536CB4E}.Release|Any CPU.Build.0 = Release|Any CPU - {C97878F4-1510-4BBA-8153-BD71DA7D50D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C97878F4-1510-4BBA-8153-BD71DA7D50D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C97878F4-1510-4BBA-8153-BD71DA7D50D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C97878F4-1510-4BBA-8153-BD71DA7D50D8}.Release|Any CPU.Build.0 = Release|Any CPU - {736DFB52-1AFE-4EFF-9710-89046AB5B1F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {736DFB52-1AFE-4EFF-9710-89046AB5B1F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {736DFB52-1AFE-4EFF-9710-89046AB5B1F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {736DFB52-1AFE-4EFF-9710-89046AB5B1F9}.Release|Any CPU.Build.0 = Release|Any CPU - {E927F2D5-8E27-462A-8687-CB207EE01164}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E927F2D5-8E27-462A-8687-CB207EE01164}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E927F2D5-8E27-462A-8687-CB207EE01164}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E927F2D5-8E27-462A-8687-CB207EE01164}.Release|Any CPU.Build.0 = Release|Any CPU - {3FC6DE77-B412-4101-9E64-6B9AA831179B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FC6DE77-B412-4101-9E64-6B9AA831179B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FC6DE77-B412-4101-9E64-6B9AA831179B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FC6DE77-B412-4101-9E64-6B9AA831179B}.Release|Any CPU.Build.0 = Release|Any CPU - {4995127E-0B8E-45B8-80C4-6BAC1BBE3783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4995127E-0B8E-45B8-80C4-6BAC1BBE3783}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4995127E-0B8E-45B8-80C4-6BAC1BBE3783}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4995127E-0B8E-45B8-80C4-6BAC1BBE3783}.Release|Any CPU.Build.0 = Release|Any CPU - {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9}.Release|Any CPU.Build.0 = Release|Any CPU - {112F146B-7C01-490B-B943-EA9341ACCAF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {112F146B-7C01-490B-B943-EA9341ACCAF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {112F146B-7C01-490B-B943-EA9341ACCAF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {112F146B-7C01-490B-B943-EA9341ACCAF2}.Release|Any CPU.Build.0 = Release|Any CPU - {05D17A7B-F200-48C0-B8F9-B7211665A17F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {05D17A7B-F200-48C0-B8F9-B7211665A17F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {05D17A7B-F200-48C0-B8F9-B7211665A17F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {05D17A7B-F200-48C0-B8F9-B7211665A17F}.Release|Any CPU.Build.0 = Release|Any CPU - {764D7CE5-F78B-432E-A849-E40BA44522D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {764D7CE5-F78B-432E-A849-E40BA44522D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {764D7CE5-F78B-432E-A849-E40BA44522D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {764D7CE5-F78B-432E-A849-E40BA44522D6}.Release|Any CPU.Build.0 = Release|Any CPU - {874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}.Release|Any CPU.Build.0 = Release|Any CPU - {CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9}.Release|Any CPU.Build.0 = Release|Any CPU - {BBB50A46-3291-4C62-B884-D1AB64F71EA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBB50A46-3291-4C62-B884-D1AB64F71EA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBB50A46-3291-4C62-B884-D1AB64F71EA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBB50A46-3291-4C62-B884-D1AB64F71EA5}.Release|Any CPU.Build.0 = Release|Any CPU - {FBE5DD99-00A0-4FED-A116-941A46A0C0D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBE5DD99-00A0-4FED-A116-941A46A0C0D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBE5DD99-00A0-4FED-A116-941A46A0C0D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBE5DD99-00A0-4FED-A116-941A46A0C0D0}.Release|Any CPU.Build.0 = Release|Any CPU - {F826CCCE-4B72-47F4-9493-DFCB51C106B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F826CCCE-4B72-47F4-9493-DFCB51C106B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F826CCCE-4B72-47F4-9493-DFCB51C106B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F826CCCE-4B72-47F4-9493-DFCB51C106B7}.Release|Any CPU.Build.0 = Release|Any CPU - {49E4485F-3A2A-4C35-A159-12ECCFC00396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49E4485F-3A2A-4C35-A159-12ECCFC00396}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49E4485F-3A2A-4C35-A159-12ECCFC00396}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49E4485F-3A2A-4C35-A159-12ECCFC00396}.Release|Any CPU.Build.0 = Release|Any CPU - {E5BB5D1C-6C07-495B-923B-FB80B79C535E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5BB5D1C-6C07-495B-923B-FB80B79C535E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5BB5D1C-6C07-495B-923B-FB80B79C535E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5BB5D1C-6C07-495B-923B-FB80B79C535E}.Release|Any CPU.Build.0 = Release|Any CPU - {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B}.Release|Any CPU.Build.0 = Release|Any CPU - {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {D0BCD56A-41C4-4A4E-8590-26864CED07FF} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {361D3F81-A48A-47F2-80DF-CA4F9536CB4E} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {C97878F4-1510-4BBA-8153-BD71DA7D50D8} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {736DFB52-1AFE-4EFF-9710-89046AB5B1F9} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {E927F2D5-8E27-462A-8687-CB207EE01164} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {3FC6DE77-B412-4101-9E64-6B9AA831179B} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {4995127E-0B8E-45B8-80C4-6BAC1BBE3783} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {112F146B-7C01-490B-B943-EA9341ACCAF2} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {05D17A7B-F200-48C0-B8F9-B7211665A17F} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {764D7CE5-F78B-432E-A849-E40BA44522D6} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {CA21A201-078B-4EBE-A2AB-C3B1FFEC99F9} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {BBB50A46-3291-4C62-B884-D1AB64F71EA5} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {FBE5DD99-00A0-4FED-A116-941A46A0C0D0} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {F826CCCE-4B72-47F4-9493-DFCB51C106B7} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {49E4485F-3A2A-4C35-A159-12ECCFC00396} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {E5BB5D1C-6C07-495B-923B-FB80B79C535E} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {618AFA87-81A8-4B1C-8876-5457D49F2DEF} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - EndGlobalSection -EndGlobal diff --git a/SharpDX-Tools.sln b/SharpDX-Tools.sln deleted file mode 100644 index c2052be02..000000000 --- a/SharpDX-Tools.sln +++ /dev/null @@ -1,85 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26228.9 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{F1AF9A3B-7856-46C9-992A-391E5455BF1F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCli", "Source\Tools\SharpCli\SharpCli.csproj", "{4E2D9A17-2195-4A51-AAE3-924517440293}" - ProjectSection(ProjectDependencies) = postProject - {5E597A82-9DE9-4BA5-AD76-51202190E951} = {5E597A82-9DE9-4BA5-AD76-51202190E951} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpGen", "Source\Tools\SharpGen\SharpGen.csproj", "{31F85A16-CB01-4456-BE3C-76E9FF3A1343}" - ProjectSection(ProjectDependencies) = postProject - {5E597A82-9DE9-4BA5-AD76-51202190E951} = {5E597A82-9DE9-4BA5-AD76-51202190E951} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpPak", "Source\Tools\SharpPak\SharpPak.csproj", "{5E597A82-9DE9-4BA5-AD76-51202190E951}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Documentation", "Documentation\Documentation.csproj", "{9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{57C5C966-ADB2-43F2-BB54-99BCB56C9F10}" - ProjectSection(SolutionItems) = preProject - ChangeLog.txt = ChangeLog.txt - README.markdown = README.markdown - ReleaseNotes.html = ReleaseNotes.html - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{E462D87D-C180-4114-B8C8-914E6735BF44}" - ProjectSection(SolutionItems) = preProject - Build\SharpDX.build = Build\SharpDX.build - Build\SharpDX.props = Build\SharpDX.props - Build\SharpDX.targets = Build\SharpDX.targets - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpGitLog", "Source\Tools\SharpGitLog\SharpGitLog.csproj", "{15BA35B5-3E54-4715-8857-36F4F96F51FB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDXGen", "Build\SharpDXGen.proj", "{431FA5BD-601B-4E19-9C70-D13AA1A0A926}" - ProjectSection(ProjectDependencies) = postProject - {31F85A16-CB01-4456-BE3C-76E9FF3A1343} = {31F85A16-CB01-4456-BE3C-76E9FF3A1343} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4E2D9A17-2195-4A51-AAE3-924517440293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Release|Any CPU.Build.0 = Release|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Release|Any CPU.Build.0 = Release|Any CPU - {5E597A82-9DE9-4BA5-AD76-51202190E951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E597A82-9DE9-4BA5-AD76-51202190E951}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E597A82-9DE9-4BA5-AD76-51202190E951}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E597A82-9DE9-4BA5-AD76-51202190E951}.Release|Any CPU.Build.0 = Release|Any CPU - {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}.Release|Any CPU.Build.0 = Release|Any CPU - {15BA35B5-3E54-4715-8857-36F4F96F51FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15BA35B5-3E54-4715-8857-36F4F96F51FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15BA35B5-3E54-4715-8857-36F4F96F51FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15BA35B5-3E54-4715-8857-36F4F96F51FB}.Release|Any CPU.Build.0 = Release|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Debug|Any CPU.Build.0 = Debug|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Release|Any CPU.ActiveCfg = Release|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {4E2D9A17-2195-4A51-AAE3-924517440293} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} - {31F85A16-CB01-4456-BE3C-76E9FF3A1343} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} - {5E597A82-9DE9-4BA5-AD76-51202190E951} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} - {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB} = {57C5C966-ADB2-43F2-BB54-99BCB56C9F10} - {15BA35B5-3E54-4715-8857-36F4F96F51FB} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} - {431FA5BD-601B-4E19-9C70-D13AA1A0A926} = {E462D87D-C180-4114-B8C8-914E6735BF44} - EndGlobalSection -EndGlobal diff --git a/SharpDX.sln b/SharpDX.sln index f78dab1f6..48242c86f 100644 --- a/SharpDX.sln +++ b/SharpDX.sln @@ -1,22 +1,19 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.9 +VisualStudioVersion = 15.0.27130.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sources", "Sources", "{CC8DB471-0644-430D-9D4B-808A2475BEC0}" ProjectSection(SolutionItems) = preProject Source\Mapping.Direct3D1x.xml = Source\Mapping.Direct3D1x.xml Source\Mapping.xml = Source\Mapping.xml + Source\MappingFiles.props = Source\MappingFiles.props Source\SharedAssemblyInfo.cs = Source\SharedAssemblyInfo.cs EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{F1AF9A3B-7856-46C9-992A-391E5455BF1F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX", "Source\SharpDX\SharpDX.csproj", "{D0BCD56A-41C4-4A4E-8590-26864CED07FF}" - ProjectSection(ProjectDependencies) = postProject - {4E2D9A17-2195-4A51-AAE3-924517440293} = {4E2D9A17-2195-4A51-AAE3-924517440293} - {431FA5BD-601B-4E19-9C70-D13AA1A0A926} = {431FA5BD-601B-4E19-9C70-D13AA1A0A926} - EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.D3DCompiler", "Source\SharpDX.D3DCompiler\SharpDX.D3DCompiler.csproj", "{361D3F81-A48A-47F2-80DF-CA4F9536CB4E}" EndProject @@ -34,16 +31,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D9", "Source EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.DirectInput", "Source\SharpDX.DirectInput\SharpDX.DirectInput.csproj", "{112F146B-7C01-490B-B943-EA9341ACCAF2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCli", "Source\Tools\SharpCli\SharpCli.csproj", "{4E2D9A17-2195-4A51-AAE3-924517440293}" - ProjectSection(ProjectDependencies) = postProject - {5E597A82-9DE9-4BA5-AD76-51202190E951} = {5E597A82-9DE9-4BA5-AD76-51202190E951} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpGen", "Source\Tools\SharpGen\SharpGen.csproj", "{31F85A16-CB01-4456-BE3C-76E9FF3A1343}" - ProjectSection(ProjectDependencies) = postProject - {5E597A82-9DE9-4BA5-AD76-51202190E951} = {5E597A82-9DE9-4BA5-AD76-51202190E951} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpPak", "Source\Tools\SharpPak\SharpPak.csproj", "{5E597A82-9DE9-4BA5-AD76-51202190E951}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Documentation", "Documentation\Documentation.csproj", "{9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB}" @@ -61,13 +48,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.RawInput", "Source\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.XInput", "Source\SharpDX.XInput\SharpDX.XInput.csproj", "{764D7CE5-F78B-432E-A849-E40BA44522D6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{E462D87D-C180-4114-B8C8-914E6735BF44}" - ProjectSection(SolutionItems) = preProject - Build\SharpDX.build = Build\SharpDX.build - Build\SharpDX.props = Build\SharpDX.props - Build\SharpDX.targets = Build\SharpDX.targets - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDX.Tests", "Source\Tests\SharpDX.Tests\SharpDX.Tests.csproj", "{931FA266-E756-41CA-9736-8B29235DC999}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Animation", "Source\SharpDX.Animation\SharpDX.Animation.csproj", "{874DEC63-9AB9-4A09-B1EA-E8FB1F1B68A1}" @@ -90,9 +70,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Desktop", "Source\S EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpDX.Direct3D10", "Source\SharpDX.Direct3D10\SharpDX.Direct3D10.csproj", "{618AFA87-81A8-4B1C-8876-5457D49F2DEF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDXGen", "Build\SharpDXGen.proj", "{431FA5BD-601B-4E19-9C70-D13AA1A0A926}" - ProjectSection(ProjectDependencies) = postProject - {31F85A16-CB01-4456-BE3C-76E9FF3A1343} = {31F85A16-CB01-4456-BE3C-76E9FF3A1343} +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{3EF31A42-4EEF-44AC-8D18-D036D080A955}" + ProjectSection(SolutionItems) = preProject + Source\Directory.build.props = Source\Directory.build.props + Source\Directory.build.targets = Source\Directory.build.targets EndProjectSection EndProject Global @@ -137,14 +118,6 @@ Global {112F146B-7C01-490B-B943-EA9341ACCAF2}.Debug|Any CPU.Build.0 = Debug|Any CPU {112F146B-7C01-490B-B943-EA9341ACCAF2}.Release|Any CPU.ActiveCfg = Release|Any CPU {112F146B-7C01-490B-B943-EA9341ACCAF2}.Release|Any CPU.Build.0 = Release|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E2D9A17-2195-4A51-AAE3-924517440293}.Release|Any CPU.Build.0 = Release|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31F85A16-CB01-4456-BE3C-76E9FF3A1343}.Release|Any CPU.Build.0 = Release|Any CPU {5E597A82-9DE9-4BA5-AD76-51202190E951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E597A82-9DE9-4BA5-AD76-51202190E951}.Debug|Any CPU.Build.0 = Debug|Any CPU {5E597A82-9DE9-4BA5-AD76-51202190E951}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -204,10 +177,6 @@ Global {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Debug|Any CPU.Build.0 = Debug|Any CPU {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Release|Any CPU.ActiveCfg = Release|Any CPU {618AFA87-81A8-4B1C-8876-5457D49F2DEF}.Release|Any CPU.Build.0 = Release|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Debug|Any CPU.Build.0 = Debug|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Release|Any CPU.ActiveCfg = Release|Any CPU - {431FA5BD-601B-4E19-9C70-D13AA1A0A926}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -222,8 +191,6 @@ Global {4995127E-0B8E-45B8-80C4-6BAC1BBE3783} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} {B4D984DF-85B8-4BBF-8C3B-5CEF905F40D9} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} {112F146B-7C01-490B-B943-EA9341ACCAF2} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {4E2D9A17-2195-4A51-AAE3-924517440293} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} - {31F85A16-CB01-4456-BE3C-76E9FF3A1343} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} {5E597A82-9DE9-4BA5-AD76-51202190E951} = {F1AF9A3B-7856-46C9-992A-391E5455BF1F} {9AA405CA-B7FD-44D0-9EBC-21F5D0F44DEB} = {57C5C966-ADB2-43F2-BB54-99BCB56C9F10} {05D17A7B-F200-48C0-B8F9-B7211665A17F} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} @@ -239,6 +206,8 @@ Global {E5BB5D1C-6C07-495B-923B-FB80B79C535E} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} {5F8DB9E8-FFAE-475F-AC2E-FE2DC5B15A1B} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} {618AFA87-81A8-4B1C-8876-5457D49F2DEF} = {CC8DB471-0644-430D-9D4B-808A2475BEC0} - {431FA5BD-601B-4E19-9C70-D13AA1A0A926} = {E462D87D-C180-4114-B8C8-914E6735BF44} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4DB4E6D7-1EEE-47F3-9530-F142104A7AC2} EndGlobalSection EndGlobal diff --git a/SharpDX.sln.DotSettings b/SharpDX.sln.DotSettings index 56f110ef8..8e980a9a6 100644 --- a/SharpDX.sln.DotSettings +++ b/SharpDX.sln.DotSettings @@ -21,6 +21,7 @@ 1 1 True + NEVER False True False @@ -82,7 +83,12 @@ THE SOFTWARE. <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> $object$_On$event$ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + True + True + True + True True + True True True True diff --git a/Source/Directory.build.props b/Source/Directory.build.props new file mode 100644 index 000000000..97c8d8050 --- /dev/null +++ b/Source/Directory.build.props @@ -0,0 +1,59 @@ + + + true + $(DefineConstants);DIRECTX11_1;DIRECTX11_2;DirectX12 + + http://sharpdx.org/logo_100x100.png + http://sharpdx.org/License.txt + http://sharpdx.org + false + SharpDX DirectX Direct3D Multimedia MDX 3D + + Alexandre Mutel + Alexandre Mutel + Alexandre Mutel + Copyright (c) 2010-2016 Alexandre Mutel + en-US + $(MSBuildThisFileDirectory)/../bin + DESKTOP_APP + REFERENCE + STORE_APP + $(SharpGenMacros);$(AppType);DIRECTX11_1 + $(DefineConstants);$(AppType) + $(DefineConstants);BEFORE_NET45 + SharpDX + true + true + $(MSBuildProjectDirectory)/../ + Generated/$(AppType) + Generated/net40_$(AppType) + $(MSBuildThisFileDirectory)/DocumentationCache/$(TargetFramework)/ + false + + + true + $(MSBuildThisFileDirectory)..\Bin\$(Configuration)\ + $(MSBuildThisFileDirectory)..\Bin\$(Configuration)\$(TargetFramework)\$(PackageId).xml + + + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + + $(DefineConstants);SHARPDX_SIGNED + true + $(MSBuildThisFileDirectory)/../sharpdx.snk + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Directory.build.targets b/Source/Directory.build.targets new file mode 100644 index 000000000..9202a63ad --- /dev/null +++ b/Source/Directory.build.targets @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/Source/DocumentationCache/net40/DocumentationCache.xml b/Source/DocumentationCache/net40/DocumentationCache.xml new file mode 100644 index 000000000..239ef426f --- /dev/null +++ b/Source/DocumentationCache/net40/DocumentationCache.xml @@ -0,0 +1,76750 @@ + + + + + <p>Type of data contained in an input slot.</p> + <p>Use these values to specify the type of data for a particular input element (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>) of an input-layout object.</p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Determines the fill mode to use when rendering triangles.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Indicates triangles facing a particular direction are not drawn.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p>This enumeration is used in <strong>{{ID3D11Resource::GetType}}</strong>. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>This enumeration is used in <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> to create a depth-stencil view.</p> + + + <dd> <p><em>{{D3D11_DSV_DIMENSION_UNKNOWN}}</em> is not a valid value for <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + + + <p>These flags identify the type of resource that will be viewed as a render target.</p> + <p>This enumeration is used in <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> to create a render-target view.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Unordered-access view options.</p> + <p> This enumeration is used by a unordered access-view description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>). </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the {{CPU}} and/or the graphics processing unit ({{GPU}}).</p> + <p>An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>, and <strong>{{D3D11_BUFFER_DESC}}</strong>.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10/11:</p> <p>In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using {{D3DPOOL}}). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.</p> <p>In Direct3D 10/11, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A resource that requires read and write access by the {{GPU}}. This is likely to be the most common usage choice.</p> </dd> + + + <dd> <p>A resource that can only be read by the {{GPU}}. It cannot be written by the {{GPU}}, and cannot be accessed at all by the {{CPU}}. This type of resource must be initialized when it is created, since it cannot be changed after creation.</p> </dd> + + + <dd> <p>A resource that is accessible by both the {{GPU}} (read only) and the {{CPU}} (write only). A dynamic resource is a good choice for a resource that will be updated by the {{CPU}} at least once per frame. To update a dynamic resource, use a <strong>Map</strong> method.</p> <p>For info about how to use dynamic resources, see How to: Use dynamic resources. </p> </dd> + + + <dd> <p>A resource that supports data transfer (copy) from the {{GPU}} to the {{CPU}}.</p> </dd> + + + + + <p>Identifies how to bind a resource to the pipeline.</p> + <p>In general, binding flags can be combined using a logical {{OR}} (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.</p><p>This enumeration is used by a:</p><ul> <li> <strong>Buffer description</strong> when creating a buffer.</li> <li>Texture description when creating a texture (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong> or <strong>{{D3D11_TEXTURE2D_DESC}}</strong> or <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</li> </ul><p>A shader-resource buffer is {{NOT}} a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the {{D3D11_BIND_SHADER_RESOURCE}} flag and is bound to the pipeline using one of these {{APIs:}} <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>, or <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>. Furthermore, a shader-resource buffer cannot use the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p><strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.? + + + <dd> <p>Bind a buffer as a vertex buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as an index buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as a constant buffer to a shader stage; this flag may {{NOT}} be combined with any other bind flag.</p> </dd> + + + <dd> <p>Bind a buffer or texture to a shader stage; this flag cannot be used with the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + <dd> <p>Bind an output buffer for the stream-output stage.</p> </dd> + + + <dd> <p>Bind a texture as a render target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind a texture as a depth-stencil target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind an unordered access resource.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive output from the decoder {{API}}. The common way to create resources for a decoder output is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive input from the video encoder {{API}}. The common way to create resources for a video encoder is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>Specifies the types of {{CPU}} access allowed for a resource.</p> + <p>This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p>Applications may combine one or more of these flags with a logical {{OR}}. When possible, create resources with no {{CPU}} access flags, as this enables better resource optimization.</p><p>The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags.</p> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + + + <p>Identifies options for resources.</p> + <p> This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p> These flags can be combined by bitwise {{OR}}. </p><p> The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags. </p> + + + <dd> <p> Enables {{MIP}} map generation by using <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> on a texture resource. The resource must be created with the <strong>bind flags</strong> that specify that the resource is a render target and a shader resource. </p> </dd> + + + <dd> <p> Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? <strong>Note</strong>?? Starting with Windows?8, we recommend that you enable resource data sharing between two or more Direct3D devices by using a combination of the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags instead. ? </dd> + + + <dd> <p> Sets a resource to be a cube texture created from a Texture2DArray that contains 6 textures. </p> </dd> + + + <dd> <p>Enables instancing of {{GPU}}-generated content.</p> </dd> + + + <dd> <p> Enables a resource as a byte address buffer. </p> </dd> + + + <dd> <p> Enables a resource as a structured buffer. </p> </dd> + + + <dd> <p> Enables a resource with {{MIP}} map clamping for use with <strong>{{ID3D11DeviceContext::SetResourceMinLOD}}</strong>. </p> </dd> + + + <dd> <p>Enables the resource to be synchronized by using the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}}. The following Direct3D?11 resource creation {{APIs}}, that take <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> parameters, have been extended to support the new flag.</p> <ul> <li> <strong>{{ID3D11Device::CreateTexture1D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture2D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture3D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateBuffer}}</strong> </li> </ul> <p>If you call any of these methods with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag set, the interface returned will support the <strong>{{IDXGIKeyedMutex}}</strong> interface. You can retrieve a reference to the <strong>{{IDXGIKeyedMutex}}</strong> interface from the resource by using <strong>{{IUnknown::QueryInterface}}</strong>. The <strong>{{IDXGIKeyedMutex}}</strong> interface implements the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}} to synchronize access to the surface. The device that creates the surface, and any other device that opens the surface by using <strong>OpenSharedResource</strong>, must call <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> before they issue any rendering commands to the surface. When those devices finish rendering, they must call <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong>. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? </dd> + + + <dd> <p> Enables a resource compatible with {{GDI}}. You must set the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag on surfaces that you use with {{GDI}}. Setting the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag allows {{GDI}} rendering on the surface via <strong>{{IDXGISurface1::GetDC}}</strong>. </p> <p>Consider the following programming tips for using {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} when you create a texture or use that texture in a swap chain:</p> <ul> <li>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li> You must bind the texture as a render target for the output-merger stage. For example, set the {{D3D11_BIND_RENDER_TARGET}} flag in the <strong>BindFlags</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure. </li> <li> You must set the maximum number of {{MIP}} map levels to 1. For example, set the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to 1. </li> <li> You must specify that the texture requires read and write access by the {{GPU}}. For example, set the <strong>Usage</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to {{D3D11_USAGE_DEFAULT}}. </li> <li> <p>You must set the texture format to one of the following types. </p> <ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_TYPELESS}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> </ul> For example, set the <strong>Format</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to one of these types. </li> <li> You cannot use {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} with multisampling. Therefore, set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure to 1. Then, set the <strong>SampleDesc</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to this <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </li> </ul> </dd> + + + <dd> <p>Set this flag to enable the use of {{NT}} {{HANDLE}} values when you create a shared resource. By enabling this flag, you deprecate the use of existing {{HANDLE}} values.</p> <p> When you use this flag, you must combine it with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag by using a bitwise {{OR}} operation. The resulting value specifies a new shared resource type that directs the runtime to use {{NT}} {{HANDLE}} values for the shared resource. The runtime then must confirm that the shared resource works on all hardware at the specified feature level. </p> <p>Without this flag set, the runtime does not strictly validate shared resource parameters (that is, formats, flags, usage, and so on). When the runtime does not validate shared resource parameters, behavior of much of the Direct3D {{API}} might be undefined and might vary from driver to driver. </p> <p><strong>Direct3D 11 and earlier:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource might contain protected content; therefore, the operating system should use the resource only when the driver and hardware support content protection. If the driver and hardware do not support content protection and you try to create a resource with this flag, the resource creation fails.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the operating system restricts access to the shared surface. You can use this flag together with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the driver restricts access to the shared surface. You can use this flag in conjunction with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is guarded. Such a resource is returned by the <strong>{{IDCompositionSurface::BeginDraw}}</strong> (DirectComposition) and <strong>{{ISurfaceImageSourceNative::BeginDraw}}</strong> (Windows Runtime) {{APIs}}. For these {{APIs}}, you provide a region of interest ({{ROI}}) on a surface to update. This surface isn't compatible with multiple render targets ({{MRT}}).</p> <p>A guarded resource automatically restricts all writes to the region that is related to one of the preceding {{APIs}}. Additionally, the resource enforces access to the {{ROI}} with these restrictions:</p> <ul> <li> Copy operations from the resource by using <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> are restricted to only copy from the {{ROI}}. </li> <li>When a guarded resource is set as a render target, it must be the only target.</li> </ul> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tile pool.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tiled resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource should be created such that it will be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li> This flag cannot be used with the following <strong>{{D3D11_USAGE}}</strong> values:<ul> <li><strong>{{D3D11_USAGE_DYNAMIC}}</strong></li> <li><strong>{{D3D11_USAGE_STAGING}}</strong></li> </ul> </li> <li> This flag cannot be used with the following <strong>{{D3D11_BIND_FLAG}}</strong> values.<ul> <li><strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong></li> <li><strong>{{D3D11_BIND_INDEX_BUFFER}}</strong></li> </ul> </li> <li>No {{CPU}} access flags can be specified.</li> </ul> <strong>Note</strong>??<p>Creating a texture using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection.</p> ? <p><strong>Note</strong>?? This enumeration value is supported starting with Windows?10. </p> </dd> + + + + + <p>Identifies a resource to be accessed for reading and writing by the {{CPU}}. Applications may combine one or more of these flags.</p> + <p>This enumeration is used in <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>These remarks are divided into the following topics:</p><p> </p><ul> <li>{{Meaning}}</li> <li>{{Common}}</li> </ul> + + + <dd> <p>Resource is mapped for reading. The resource must have been created with read access (see <strong>{{D3D11_CPU_ACCESS_READ}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for reading and writing. The resource must have been created with read and write access (see <strong>{{D3D11_CPU_ACCESS_READ}} and {{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access and dynamic usage (See <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong> and <strong>{{D3D11_USAGE_DYNAMIC}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Cannot be used on a resource created with the <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + + + <p>Specifies how the {{CPU}} should respond when an application calls the <strong>{{ID3D11DeviceContext::Map}}</strong> method on a resource that is being used by the {{GPU}}.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>{{D3D11_MAP_FLAG_DO_NOT_WAIT}} cannot be used with <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong> or <strong>{{D3D11_MAP_WRITE_NOOVERWRITE}}</strong>.</p> + + + + <p>Option(s) for raising an error to a non-continuable exception.</p> + <p>These flags are used by <strong>{{ID3D11Device::GetExceptionMode}}</strong> and <strong>{{ID3D11Device::SetExceptionMode}}</strong>. Use 0 to indicate no flags; multiple flags can be logically {{OR}}'ed together.</p> + + + <dd> <p>Raise an internal driver error to a non-continuable exception.</p> </dd> + + + + + <p> Specifies the parts of the depth stencil to clear. </p> + <p> These flags are used when calling <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong>; the flags can be combined with a bitwise {{OR}}. </p> + + + <dd> <p>Clear the depth buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + <dd> <p>Clear the stencil buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + + + <p>Comparison options.</p> + <p>A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for a depth-stencil buffer (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>), depth-stencil operations (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>), or sampler state (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identify the portion of a depth-stencil buffer for writing depth data.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>The stencil operations that can be performed during depth-stencil testing.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Blend factors, which modulate values for the pixel shader and render target.</p> + <p>Blend operations are specified in a <strong>blend description</strong>.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>{{RGB}} or alpha blending operation.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>blend description</strong>. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identify which components of each pixel of a render target are writable during blending.</p> + <p>These flags can be combined with a bitwise {{OR}}.</p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>The different faces of a cube texture.</p> + + + <dd> <p>Positive X face.</p> </dd> + + + <dd> <p>Negative X face.</p> </dd> + + + <dd> <p>Positive Y face.</p> </dd> + + + <dd> <p>Negative Y face.</p> </dd> + + + <dd> <p>Positive Z face.</p> </dd> + + + <dd> <p>Negative Z face.</p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p>This enumeration is used by <strong>{{D3D11_BUFFEREX_SRV}}</strong> </p> + + + <dd> <p>View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Depth-stencil view options.</p> + <p>This enumeration is used by <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>.</p><p>Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have a read/write conflicts between separate views.</p> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + + + <dd> <p>Resource contains raw, unstructured data. Requires the {{UAV}} format to be {{DXGI_FORMAT_R32_TYPELESS}}. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>Allow data to be appended to the end of the buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> flag must also be used for any view that will be used as a AppendStructuredBuffer or a ConsumeStructuredBuffer. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + <dd> <p>Adds a counter to the unordered-access-view buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> can only be used on a {{UAV}} that is a {{RWStructuredBuffer}} and it enables the functionality needed for the <strong>IncrementCounter</strong> and <strong>DecrementCounter</strong> methods in {{HLSL}}. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + + + <p>Filtering options during texture sampling.</p> + <strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>{{HLSL}} texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td>sample</td><td>samplecmp or samplecmplevelzero</td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following {{DXGI}} formats: {{R32_FLOAT_X8X24_TYPELESS}}, {{R32_FLOAT}}, {{R24_UNORM_X8_TYPELESS}}, {{R16_UNORM}}.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Types of magnification or minification sampler filters.</p> + + + <dd> <p>Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture. </p> </dd> + + + <dd> <p>Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p> Specifies the type of sampler filter reduction. </p> + <p> This enum is used by the <strong>{{D3D11_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates standard (default) filter reduction. </p> </dd> + + + <dd> <p> Indicates a comparison filter reduction. </p> </dd> + + + <dd> <p> Indicates minimum filter reduction. </p> </dd> + + + <dd> <p> Indicates maximum filter reduction. </p> </dd> + + + + + <p>Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.</p> + + + <dd> <p>Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times.</p> </dd> + + + <dd> <p>Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.</p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D11_SAMPLER_DESC}}</strong> or {{HLSL}} code.</p> </dd> + + + <dd> <p>Similar to {{D3D11_TEXTURE_ADDRESS_MIRROR}} and {{D3D11_TEXTURE_ADDRESS_CLAMP}}. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.</p> </dd> + + + + + <p>Which resources are supported for a given format and given device (see <strong>{{ID3D11Device::CheckFormatSupport}}</strong> and <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>).</p> + + + + <p> Unordered resource support options for a compute shader resource (see <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>). </p> + + + + <p>Optional flags that control the behavior of <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + + + + <p>Query types.</p> + <p> Create a query with <strong>{{ID3D11Device::CreateQuery}}</strong>. </p> + + + <dd> <p> Determines whether or not the {{GPU}} is finished processing commands. When the {{GPU}} is finished processing commands <strong>{{ID3D11DeviceContext::GetData}}</strong> will return {{S_OK}}, and pData will point to a {{BOOL}} with a value of <strong>{{TRUE}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Get the number of samples that passed the depth and stencil tests in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. If a depth or stencil test is disabled, then each of those tests will be counted as a pass. </p> </dd> + + + <dd> <p> Get a timestamp value where <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. This kind of query is only useful if two timestamp queries are done in the middle of a {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Determines whether or not a {{D3D11_QUERY_TIMESTAMP}} is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. This type of query should only be invoked once per frame or less. </p> </dd> + + + <dd> <p> Get pipeline statistics, such as the number of pixel shader invocations in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong>. </p> </dd> + + + <dd> <p> Similar to {{D3D11_QUERY_OCCLUSION}}, except <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} indicating whether or not any samples passed the depth and stencil tests - <strong>{{TRUE}}</strong> meaning at least one passed, <strong>{{FALSE}}</strong> meaning none passed. </p> </dd> + + + <dd> <p> Get streaming output statistics, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not any of the streaming output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 0, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 0 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 1, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 1 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 2, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 2 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 3, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 3 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + + + <p>Flags that describe miscellaneous query behavior.</p> + <p>This flag is part of a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> + + + <dd> <p>Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via <strong>{{ID3D11DeviceContext::GetData}}</strong> when using this flag.</p> </dd> + + + + + <p>Options for performance counters.</p> + <p>Independent hardware vendors may define their own set of performance counters for their devices, by giving the enumeration value a number that is greater than the value for {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}.</p><p>This enumeration is used by <strong>{{D3D11_COUNTER_DESC}}</strong> and <strong>{{D3D11_COUNTER_INFO}}</strong>.</p> + + + <dd> <p>Define a performance counter that is dependent on the hardware device.</p> </dd> + + + + + <p>Data type of a performance counter.</p> + <p>These flags are an output parameter in <strong>{{ID3D11Device::CheckCounter}}</strong>.</p> + + + <dd> <p>32-bit floating point.</p> </dd> + + + <dd> <p>16-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>64-bit unsigned integer.</p> </dd> + + + + + <p>Specifies a multi-sample pattern type.</p> + <p>An app calls <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> to get the number of quality levels available during multisampling. A 0 quality level means the hardware does not support multisampling for the particular format. If the number of quality levels is greater than 0 and the hardware supports the fixed sample patterns for the sample count, the app can request the fixed patterns by specifying quality level as either <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> or <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong>. The app can call <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to check for support of the standard fixed patterns. If the hardware only supports the fixed patterns but no additional vendor-specific patterns, the runtime can report the number of quality levels as 1, and the hardware can pretend 0 quality level behaves the same as quality level equal to {{D3D11_STANDARD_MULTISAMPLE_PATTERN}}.</p><p>The runtime defines the following standard sample patterns for 1(trivial), 2, 4, 8, and 16 sample counts. Hardware must support 1, 4, and 8 sample counts. Hardware vendors can expose more sample counts beyond these. However, if vendors support 2, 4(required), 8(required), or 16, they must also support the corresponding standard pattern or center pattern for each of those sample counts.</p><p></p><p></p><p></p> + + + <dd> <p>Pre-defined multi-sample patterns required for Direct3D?11 and Direct3D?10.1 hardware.</p> </dd> + + + <dd> <p>Pattern where all of the samples are located at the pixel center.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Direct3D 11 feature options.</p> + <p> This enumeration is used when querying a driver about support for these features by calling <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. Each value in this enumeration has a corresponding data structure that is required to be passed to the <em>pFeatureSupportData</em> parameter of <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. </p> + + + <dd> <p> The driver supports multithreading. To see an example of testing a driver for multithread support, see How To: Check for Driver Support. Refer to <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong>.</p> </dd> + + + <dd> <p>Supports the use of the double-precision shaders in {{HLSL}}. Refer to <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT2}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT2}}</strong>.</p> </dd> + + + <dd> <p>Supports compute shaders and raw and structured buffers. Refer to <strong>{{D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}}</strong>.</p> </dd> + + + <dd> <p>Supports Direct3D 11.1 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports specific adapter architecture. Refer to <strong>{{D3D11_FEATURE_DATA_ARCHITECTURE_INFO}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports minimum precision of shaders. For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision. Refer to <strong>{{D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 shadowing feature. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 instancing options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 marker options. Refer to <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options, which includes the Direct3D?9 shadowing feature and instancing support. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D 11.3 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.3.</p> </dd> + + + <dd> <p> Supports Direct3D 11.4 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + <dd> <p> Supports {{GPU}} virtual addresses. Refer to <strong>{{D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports a single boolean for {{NV12}} shared textures. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS4}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Values that specify minimum precision levels at shader stages.</p> + + + <dd> <p>Minimum precision level is 10-bit.</p> </dd> + + + <dd> <p>Minimum precision level is 16-bit.</p> </dd> + + + + + <p>Indicates the tier level at which tiled resources are supported.</p> + + + <dd> <p>Tiled resources are not supported.</p> </dd> + + + <dd> <p> Tier_1 tiled resources are supported.</p> <p> The device supports calls to <strong>CreateTexture2D</strong> and so on with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. </p> <p> The device supports calls to <strong>CreateBuffer</strong> with the <strong>{{D3D11_RESOURCE_MISC_TILE_POOL}}</strong> flag. </p> <p> If you access tiles (read or write) that are <strong>{{NULL}}</strong>-mapped, you get undefined behavior, which includes device-removed. Apps can map all tiles to a single "default" tile to avoid this condition. </p> </dd> + + + <dd> <p> Tier_2 tiled resources are supported. </p> <p> Superset of Tier_1 functionality, which includes this additional support: </p> <ul> <li> On Tier_1, if the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. On Tier_2, this guarantee is expanded to include mipmap levels whose size is at least one standard tile shape. For more info, see <strong>{{D3D11_PACKED_MIP_DESC}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> </dd> + + + <dd> <p> Tier_3 tiled resources are supported. </p> <p> Superset of Tier_2 functionality, Tier 3 is essentially Tier 2 but with the additional support of Texture3D for Tiled Resources.</p> </dd> + + + + + <p>Specifies if the hardware and driver support conservative rasterization and at what tier level.</p> + + + <dd> <p>Conservative rasterization isn't supported.</p> </dd> + + + <dd> <p>Tier_1 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_2 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_3 conservative rasterization is supported.</p> </dd> + + + + + <p>Describes the level of support for shader caching in the current graphics driver.</p> + <p>This enum is used by the <strong>{{D3D_FEATURE_DATA_SHADER_CACHE}}</strong> structure.</p> + + + <dd> <p>Indicates that the driver does not support shader caching.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders in memory during the current run of the application.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders on disk to accelerate future runs of the application.</p> </dd> + + + + + <p>Specifies a type of compressed buffer for decoding.</p> + + + <dd> <p>Picture decoding parameter buffer. +</p> </dd> + + + <dd> <p>Macroblock control command buffer. +</p> </dd> + + + <dd> <p>Residual difference block data buffer. +</p> </dd> + + + <dd> <p>Deblocking filter control command buffer. +</p> </dd> + + + <dd> <p>Inverse quantization matrix buffer. +</p> </dd> + + + <dd> <p>Slice-control buffer. +</p> </dd> + + + <dd> <p>Bitstream data buffer. +</p> </dd> + + + <dd> <p>Motion vector buffer. +</p> </dd> + + + <dd> <p>Film grain synthesis data buffer. +</p> </dd> + + + + + <p>Specifies how a video format can be used for video processing.</p> + + + <dd> <p>The format can be used as the input to the video processor.</p> </dd> + + + <dd> <p>The format can be used as the output from the video processor.</p> </dd> + + + + + <p>Defines video processing capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor can blend video content in linear color space. Most video content is gamma corrected, resulting in nonlinear values. This capability flag means that the video processor converts colors to linear space before blending, which produces better results.</p> </dd> + + + <dd> <p>The video processor supports the xvYCC color space for {{YCbCr}} data. </p> </dd> + + + <dd> <p>The video processor can perform range conversion when the input and output are both {{RGB}} but use different color ranges (0-255 or 16-235, for 8-bit {{RGB}}). </p> </dd> + + + <dd> <p>The video processor can apply a matrix conversion to {{YCbCr}} values when the input and output are both {{YCbCr}}. For example, the driver can convert colors from {{BT}}.601 to {{BT}}.709. </p> </dd> + + + <dd> <p>The video processor supports {{YUV}} nominal range . </p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines features that a Microsoft Direct3D?11 video processor can support. </p> + + + <dd> <p>The video processor can set alpha values on the output pixels. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> </dd> + + + <dd> <p>The video processor can downsample the video output. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong>.</p> </dd> + + + <dd> <p>The video processor can perform luma keying. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamLumaKey}}</strong>.</p> </dd> + + + <dd> <p>The video processor can apply alpha values from color palette entries. </p> </dd> + + + <dd> <p>The driver does not support full video processing capabilities. If this capability flag is set, the video processor has the following limitations:</p> <ul> <li>A maximum of two streams are supported:<ul> <li>The first stream must be either {{NV12}} or {{YUY2}}.</li> <li>The second stream must be {{AYUV}}, {{AI44}}, or {{IA44}}.</li> </ul> </li> <li>Image adjustment (proc amp) controls are applied to the entire video processing blit, rather than per stream.</li> <li>Support for per-stream planar alpha is not reliable. (Per-pixel alpha is supported, however.)</li> </ul> </dd> + + + <dd> <p>The video processor can support 3D stereo video. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong>.</p> <p>All drivers setting this caps must support the following stereo formats: <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL}}</strong>, <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL}}</strong>, and <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>.</p> </dd> + + + <dd> <p>The driver can rotate the input data either 90, 180, or 270 degrees clockwise as part of the video processing operation.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamAlpha</strong> call.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamPixelAspectRatio</strong> call.</p> </dd> + + + + + <p>Defines image filter capabilities for a Microsoft Direct3D?11 video processor.</p> + <p>These capability flags indicate support for the image filters defined by the <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> enumeration. To apply a particular filter, call the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamFilter}}</strong> method.</p> + + + <dd> <p>The video processor can adjust the brightness level. </p> </dd> + + + <dd> <p>The video processor can adjust the contrast level. </p> </dd> + + + <dd> <p>The video processor can adjust hue. </p> </dd> + + + <dd> <p>The video processor can adjust the saturation level. </p> </dd> + + + <dd> <p>The video processor can perform noise reduction. </p> </dd> + + + <dd> <p>The video processor can perform edge enhancement. </p> </dd> + + + <dd> <p>The video processor can perform anamorphic scaling. Anamorphic scaling can be used to stretch 4:3 content to a widescreen 16:9 aspect ratio. </p> </dd> + + + <dd> <p>For stereo 3D video, the video processor can adjust the offset between the left and right views, allowing the user to reduce potential eye strain.</p> </dd> + + + + + <p>Defines capabilities related to input formats for a Microsoft Direct3D?11 video processor.</p> + <p>These flags define video processing capabilities that usually are not needed, and that video devices are therefore not required to support.</p><p> The first three flags relate to {{RGB}} support for functions that are normally applied to {{YCbCr}} video: deinterlacing, color adjustment, and luma keying. A device that supports these functions for {{YCbCr}} is not required to support them for {{RGB}} input. Supporting {{RGB}} input for these functions is an additional capability, reflected by these constants. Note that the driver might convert the input to another color space, perform the indicated function, and then convert the result back to {{RGB}}. </p><p>Similarly, a device that supports deinterlacing is not required to support deinterlacing of palettized formats. This capability is indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED}}</strong> flag.</p> + + + <dd> <p>The video processor can deinterlace an input stream that contains interlaced {{RGB}} video. </p> </dd> + + + <dd> <p>The video processor can perform color adjustment on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can perform luma keying on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can deinterlace input streams with palettized color formats.</p> </dd> + + + + + <p>Specifies the automatic image processing capabilities of the video processor.</p> + + + <dd> <p>Denoise.</p> </dd> + + + <dd> <p>Deringing.</p> </dd> + + + <dd> <p>Edge enhancement.</p> </dd> + + + <dd> <p>Color correction.</p> </dd> + + + <dd> <p>Flesh-tone mapping.</p> </dd> + + + <dd> <p>Image stabilization.</p> </dd> + + + <dd> <p>Enhanced image resolution.</p> </dd> + + + <dd> <p>Anamorphic scaling.</p> </dd> + + + + + <p>Defines stereo 3D capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD}}</strong> format.</p> </dd> + + + <dd> <p>The video processor can flip one or both views. For more information, see <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong>.</p> </dd> + + + + + <p>Specifies video processing capabilities that relate to deinterlacing, inverse telecine ({{IVTC}}), and frame-rate conversion.</p> + + + <dd> <p>The video processor can perform blend deinterlacing. </p> <p>In blend deinterlacing, the two fields from an interlaced frame are blended into a single progressive frame. A video processor uses blend deinterlacing when it deinterlaces at half rate, as when converting 60i to 30p. Blend deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform bob deinterlacing.</p> <p>In bob deinterlacing, missing field lines are interpolated from the lines above and below. Bob deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform adaptive deinterlacing.</p> <p>Adaptive deinterlacing uses spatial or temporal interpolation, and switches between the two on a field-by-field basis, depending on the amount of motion. If the video processor does not receive enough reference frames to perform adaptive deinterlacing, it falls back to bob deinterlacing.</p> </dd> + + + <dd> <p>The video processor can perform motion-compensated deinterlacing. </p> <p>Motion-compensated deinterlacing uses motion vectors to recreate missing lines. If the video processor does not receive enough reference frames to perform motion-compensated deinterlacing, it falls back to bob deinterlacing. </p> </dd> + + + <dd> <p>The video processor can perform inverse telecine ({{IVTC}}). </p> <p>If the video processor supports this capability, the <strong>{{ITelecineCaps}}</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure specifies which {{IVTC}} modes are supported. </p> </dd> + + + <dd> <p>The video processor can convert the frame rate by interpolating frames. </p> </dd> + + + + + <p>Specifies the inverse telecine ({{IVTC}}) capabilities of a video processor. </p> + + + <dd> <p>The video processor can reverse 3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:3:3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 3:2:3:2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 5:5 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 6:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 8:7 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse other telecine modes not listed here.</p> </dd> + + + + + <p>Contains flags that describe content-protection capabilities.</p> + + + <dd> <p>The content protection is implemented in software by the driver.</p> </dd> + + + <dd> <p>The content protection is implemented in hardware by the {{GPU}}. +</p> </dd> + + + <dd> <p>Content protection is always applied to a protected surface, regardless of whether the application explicitly enables protection.</p> </dd> + + + <dd> <p>The driver can use partially encrypted buffers. If this capability is not present, the entire buffer must be either encrypted or clear.</p> </dd> + + + <dd> <p>The driver can encrypt data using a separate content key that is encrypted using the session key.</p> </dd> + + + <dd> <p>The driver can refresh the session key without renegotiating the key.</p> </dd> + + + <dd> <p>The driver can read back encrypted data from a protected surface. For more information, see <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong>.</p> </dd> + + + <dd> <p>The driver requires a separate key to read encrypted data from a protected surface.</p> </dd> + + + <dd> <p>If the encryption type is <strong>{{D3DCRYPTOTYPE_AES128_CTR}}</strong>, the application must use a sequential count in the <strong>{{D3D11_AES_CTR_IV}}</strong> structure.</p> </dd> + + + <dd> <p>The driver supports encrypted slice data, but does not support any other encrypted data in the compressed buffer. The caller should not encrypt any data within the buffer other than the slice data.</p> <strong>Note</strong>??The driver should only report this flag for the specific profiles that have this limitation. ? </dd> + + + <dd> <p>The driver can copy encrypted data from one resource to another, decrypting the data as part of the process.</p> </dd> + + + <dd> <p>The hardware supports the protection of specific resources. This means that:</p> <ul> <li>The contents of a protected allocation can never be read by the {{CPU}}.</li> <li>The hardware can ensure a protected resource cannot be copied to an unprotected resource.</li> </ul> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Physical pages of a protected resource can be evicted and potentially paged to disk in low memory conditions without losing the contents of the resource when paged back in. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The hardware supports an automatic teardown mechanism that could trigger hardware keys or protected content to become lost in some conditions. The application can register to be notified when these events occur.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The secure environment is tightly coupled with the {{GPU}} and an <strong>{{ID3D11CryptoSession}}</strong> should be used for communication between the user mode {{DRM}} component and the secure execution environment.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + + + <p>Identifies a video processor filter.</p> + + + <dd> <p>Brightness filter.</p> </dd> + + + <dd> <p>Contrast filter.</p> </dd> + + + <dd> <p>Hue filter.</p> </dd> + + + <dd> <p>Saturation filter.</p> </dd> + + + <dd> <p>Noise reduction filter.</p> </dd> + + + <dd> <p>Edge enhancement filter.</p> </dd> + + + <dd> <p>Anamorphic scaling filter.</p> </dd> + + + <dd> <p>Stereo adjustment filter. When stereo 3D video is enabled, this filter adjusts the offset between the left and right views, allowing the user to reduce potential eye strain. </p> <p>The filter value indicates the amount by which the left and right views are adjusted. A positive value shifts the images away from each other: the left image toward the left, and the right image toward the right. A negative value shifts the images in the opposite directions, closer to each other.</p> </dd> + + + + + <p>Describes how a video stream is interlaced.</p> + + + <dd> <p>Frames are progressive.</p> </dd> + + + <dd> <p>Frames are interlaced. The top field of each frame is displayed first. </p> </dd> + + + <dd> <p>Frame are interlaced. The bottom field of each frame is displayed first.</p> </dd> + + + + + <p>Specifies the intended use for a video processor.</p> + + + <dd> <p>Normal video playback. The graphics driver should expose a set of capabilities that are appropriate for real-time video playback. </p> </dd> + + + <dd> <p>Optimal speed. The graphics driver should expose a minimal set of capabilities that are optimized for performance. </p> <p>Use this setting if you want better performance and can accept some reduction in video quality. For example, you might use this setting in power-saving mode or to play video thumbnails. </p> </dd> + + + <dd> <p>Optimal quality. The grahics driver should expose its maximum set of capabilities.</p> <p>Specify this setting to get the best video quality possible. It is appropriate for tasks such as video editing, when quality is more important than speed. It is not appropriate for real-time playback. </p> </dd> + + + + + <p>Specifies values for the luminance range of {{YUV}} data.</p> + + + <dd> <p>Driver defaults are used, which should be Studio luminance range [16-235],</p> </dd> + + + <dd> <p>Studio luminance range [16-235]</p> </dd> + + + <dd> <p>Full luminance range [0-255]</p> </dd> + + + + + <p>Specifies the alpha fill mode for video processing.</p> + + + <dd> <p>Alpha values inside the target rectangle are set to opaque. </p> </dd> + + + <dd> <p>Alpha values inside the target rectangle are set to the alpha value specified in the background color. To set the background color, call the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor}}</strong> method.</p> </dd> + + + <dd> <p>Existing alpha values remain unchanged in the output surface.</p> </dd> + + + <dd> <p>Alpha values are taken from an input stream, scaled, and copied to the corresponding destination rectangle for that stream. The input stream is specified in the <em>StreamIndex</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong> method. </p> <p>If the input stream does not have alpha data, the video processor sets the alpha values in the target rectangle to opaque. If the input stream is disabled or the source rectangle is empty, the alpha values in the target rectangle are not modified.</p> </dd> + + + + + <p>Specifies the rate at which the video processor produces output frames from an input stream.</p> + + + <dd> <p>The output is the normal frame rate. </p> </dd> + + + <dd> <p>The output is half the frame rate. </p> </dd> + + + <dd> <p>The output is a custom frame rate.</p> </dd> + + + + + <p>Specifies the layout in memory of a stereo 3D video frame.</p> + <p>This enumeration designates the two stereo views as "frame 0" and "frame 1". The <em>LeftViewFrame0</em> parameter of the <strong>VideoProcessorSetStreamStereoFormat</strong> method specifies which view is the left view, and which is the right view.</p><p>For packed formats, if the source rectangle clips part of the surface, the driver interprets the rectangle in logical coordinates relative to the stereo view, rather than absolute pixel coordinates. The result is that frame 0 and frame 1 are clipped proportionately.</p><p>To query whether the device supports stereo 3D video, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check for the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> flag in the <strong>FeatureCaps</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. If this capability flag is present, it means that the driver supports all of the stereo formats that are not listed as optional. To find out which optional formats are supported, call <strong>GetVideoProcessorCaps</strong> and check the <strong>StereoCaps</strong> member of the structure.</p> + + + <dd> <p>The sample does not contain stereo data. If the stereo format is not specified, this value is the default.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed side-by-side, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed top-to-bottom, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are placed in separate resources or in separate texture array elements within the same resource.</p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>The sample contains non-stereo data. However, the driver should create a left/right output of this sample using a specified offset. The offset is specified in the <em>MonoOffset</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong> method. </p> <p>This format is primarily intended for subtitles and other subpicture data, where the entire sample is presented on the same plane.</p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved rows, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved columns, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed in a checkerboard format, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + + + <p>For stereo 3D video, specifies whether the data in frame 0 or frame 1 is flipped, either horizontally or vertically. </p> + + + <dd> <p>Neither frame is flipped.</p> </dd> + + + <dd> <p>The data in frame 0 is flipped.</p> </dd> + + + <dd> <p>The data in frame 1 is flipped.</p> </dd> + + + + + <p>Specifies the video rotation states.</p> + + + <dd> <p>The video is not rotated.</p> </dd> + + + <dd> <p>The video is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 180 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>Specifies the type of Microsoft Direct3D authenticated channel. </p> + + + <dd> <p>Direct3D?11 channel. This channel provides communication with the Direct3D runtime. </p> </dd> + + + <dd> <p>Software driver channel. This channel provides communication with a driver that implements content protection mechanisms in software.</p> </dd> + + + <dd> <p>Hardware driver channel. This channel provides communication with a driver that implements content protection mechanisms in the {{GPU}} hardware. </p> </dd> + + + + + <p>Specifies the type of process that is identified in the <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT}}</strong> structure.</p> + + + + <p>Specifies the type of I/O bus that is used by the graphics adapter.</p> + + + <dd> <p>Indicates a type of bus other than the types listed here. +</p> </dd> + + + <dd> <p>{{PCI}} bus. +</p> </dd> + + + <dd> <p>{{PCI}}-X bus. +</p> </dd> + + + <dd> <p>{{PCI}} Express bus. +</p> </dd> + + + <dd> <p>Accelerated Graphics Port ({{AGP}}) bus. +</p> </dd> + + + <dd> <p>The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +</p> </dd> + + + <dd> <p>One of the <strong>{{D3D11_BUS_IMPL_MODIFIER_Xxx}}</strong> flags is set. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video decoding output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor input view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + + + <p>Describes parameters that are used to create a device.</p> + <p>Device creation flags are used by <strong>{{D3D11CreateDevice}}</strong> and <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p><p>An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple {{CPU}} cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use <strong>{{D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS}}</strong> to request that the runtime and video driver not create any additional threads that might interfere with the application.</p> + + + <dd> <p>Use this flag if your application will only call methods of Direct3D?11 interfaces from a single thread. By default, the <strong>{{ID3D11Device}}</strong> object is thread-safe. By using this flag, you can increase performance. However, if you use this flag and your application calls methods of Direct3D?11 interfaces from multiple threads, undefined behavior might result.</p> </dd> + + + <dd> <p>Creates a device that supports the debug layer. </p> <p>To use this flag, you must have {{D3D11}}*{{SDKLayers}}.dll installed; otherwise, device creation fails. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> </dd> + + + <dd> <strong>Note</strong>??This flag is not supported in Direct3D?11. ? </dd> + + + <dd> <p>Prevents multiple threads from being created. When this flag is used with a Windows Advanced Rasterization Platform ({{WARP}}) device, no additional threads will be created by {{WARP}} and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.</p> </dd> + + + <dd> <p>Creates a device that supports {{BGRA}} formats (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> and <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>). All 10level9 and higher hardware with {{WDDM}} 1.1+ drivers support {{BGRA}} formats. </p> <strong>Note</strong>??Required for Direct2D interoperability with Direct3D resources. ? </dd> + + + <dd> <p>Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver. </p> <p>To use this flag, you must have {{D3D11_1SDKLayers}}.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> <p>If you use this flag and the current driver does not support shader debugging, device creation fails. Shader debugging requires a driver that is implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2).</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX {{SDK}}. We shipped the last version of the DirectX {{SDK}} in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.</p> <strong>Note</strong>??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app. ? <p><strong>Windows?8.1:??</strong>This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app; instead use <strong>{{ID3D11DeviceContext2::IsAnnotationEnabled}}</strong>. This flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app. </p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Use this flag if the device will produce {{GPU}} workloads that take more than two seconds to complete, and you want the operating system to allow them to successfully finish. If this flag is not set, the operating system performs timeout detection and recovery when it detects a {{GPU}} packet that took more than two seconds to execute. If this flag is set, the operating system allows such a long running packet to execute without resetting the {{GPU}}. We recommend not to set this flag if your device needs to be highly responsive so that the operating system can detect and recover from {{GPU}} timeouts. We recommend to set this flag if your device needs to perform time consuming background tasks such as compute, image recognition, and video encoding to allow such tasks to successfully finish.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Forces the creation of the Direct3D device to fail if the display driver is not implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2). When the display driver is not implemented to {{WDDM}} 1.2, only a Direct3D device that is created with feature level 9.1, 9.2, or 9.3 supports video; therefore, if this flag is set, the runtime creates the Direct3D device only for feature level 9.1, 9.2, or 9.3. We recommend not to specify this flag for applications that want to favor Direct3D capability over video. If feature level 10 and higher is available, the runtime will use that feature level regardless of video support.</p> <p>If this flag is set, device creation on the Basic Render Device ({{BRD}}) will succeed regardless of the {{BRD}}'s missing support for video decode. This is because the Media Foundation video stack operates in software mode on {{BRD}}. In this situation, if you force the video stack to create the Direct3D device twice (create the device once with this flag, next discover {{BRD}}, then again create the device without the flag), you actually degrade performance.</p> <p>If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_NULL}}</strong>, <strong>{{D3D_DRIVER_TYPE_REFERENCE}}</strong>, or <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong>, device creation fails at any feature level because none of the associated drivers provide video capability. If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_WARP}}</strong>, device creation succeeds to allow software fallback for video.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>A description of a single element for the input-assembler stage.</p> + <p>An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling <strong>{{ID3D11Device::CreateInputLayout}}</strong>. For an example, see the "Create the Input-Layout Object" subtopic under the Getting Started with the Input-Assembler Stage topic.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name </p> <pre>matrix</pre> <p>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler (see input slot). Valid values are between 0 and 15, defined in {{D3D11}}.h.</p> </dd> + + + <dd> <p>Optional. Offset (in bytes) between each element. Use {{D3D11_APPEND_ALIGNED_ELEMENT}} for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>Identifies the input data class for a single input slot (see <strong>{{D3D11_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to {{D3D11_INPUT_PER_VERTEX_DATA}}).</p> </dd> + + + + + <p>Description of a vertex element in a vertex buffer in an output slot.</p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline (see <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>). The valid range for <em>OutputSlot</em> is 0 to 3.</p> </dd> + + + + + <p>Defines the dimensions of a viewport.</p> + <p>In all cases, <strong>Width</strong> and <strong>Height</strong> must be &gt;= 0 and <strong>TopLeftX</strong> + <strong>Width</strong> and <strong>TopLeftY</strong> + <strong>Height</strong> must be &lt;= {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p><table> <tr><td> <p>Viewport Sizes and Feature Level Support Differences between Direct3D 11 and Direct3D 10:</p> <p>The range for the minimum and maximum viewport size is dependent on the feature level defined by <strong>{{D3D_FEATURE_LEVEL}}</strong>.</p> <ul> <li>Direct3D 11 supports fractional viewports; the parameter types are floating-point numbers. The feature level, {{D3D_FEATURE_LEVEL_11_0}}, supports ({{D3D11_VIEWPORT_BOUNDS_MIN}}, {{D3D11_VIEWPORT_BOUNDS_MAX}}) values between (-32768, 32,767).</li> <li>Direct3D 10 does not support fractional viewports. The feature levels, {{D3D_FEATURE_LEVEL_10_1}} (or below), supports ({{D3D10_VIEWPORT_BOUNDS_MIN}}, {{D3D10_VIEWPORT_BOUNDS_MAX}}) values between (-16384, 16383).</li> </ul> </td></tr> </table><p>?</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + + + <dd> <p>X position of the left hand side of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Y position of the top of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p> Arguments for draw instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong>. </p> + + + <dd> <p> The number of vertices to draw. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Arguments for draw indexed instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong>. </p> + + + <dd> <p> The number of indices read from the index buffer for each instance. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The location of the first index read by the {{GPU}} from the index buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading a vertex from the vertex buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p>Defines a 3D box.</p> + <p>The following diagram shows a 3D box, where the origin is the left, front, top corner.</p><p></p><p>The values for <strong>right</strong>, <strong>bottom</strong>, and <strong>back</strong> are each one pixel past the end of the pixels that are included in the box region. That is, the values for <strong>left</strong>, <strong>top</strong>, and <strong>front</strong> are included in the box region while the values for right, bottom, and back are excluded from the box region. For example, for a box that is one pixel wide, (right - left) == 1; the box region includes the left pixel but not the right pixel.</p><p>Coordinates of a box are in bytes for buffers and in texels for textures.</p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box.</p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <p> Describes the blend state that you use in a call to <strong>{{ID3D11Device::CreateBlendState}}</strong> to create a blend-state object. </p> + <p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><strong>Note</strong>??<strong>{{D3D11_BLEND_DESC}}</strong> is identical to <strong>{{D3D10_BLEND_DESC1}}</strong>.?<p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p> + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering (see <strong>{{D3D11_FILL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Indicates triangles facing the specified direction are not drawn (see <strong>{{D3D11_CULL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Determines if a triangle is front- or back-facing. If this parameter is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + + + <p>Specifies data for initializing a subresource.</p> + <p>This structure is used in calls to create buffers (<strong>{{ID3D11Device::CreateBuffer}}</strong>) and textures (<strong>{{ID3D11Device::CreateTexture1D}}</strong>, <strong>{{ID3D11Device::CreateTexture2D}}</strong>, and <strong>{{ID3D11Device::CreateTexture3D}}</strong>). If the resource you create does not require a system-memory pitch or a system-memory-slice pitch, you can use those members to pass size information, which might help you when you debug a problem with creating a resource.</p><p>A subresource is a single mipmap-level surface. You can pass an array of subresources to one of the preceding methods to create the resource. A subresource can be 1D, 2D, or 3D. How you set the members of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> depend on whether the subresource is 1D, 2D, or 3D.</p><p></p><dl> <dt>1D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the length of the 1D surface in bytes. <strong>pSysMem</strong> points to the start of the 1D surface. You don't need to set <strong>SysMemSlicePitch</strong>. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + (x * BytesPerPixel)</pre> </dd> <dt>2D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the size of the entire 2D surface in bytes. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> <dt>3D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the distance between any two adjacent 2D slices of the 3D surface. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemSlicePitch*d + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> </dl><p>The x, y, and d values are 0-based indices and <strong>BytesPerPixel</strong> depends on the pixel format. For mipmapped 3D surfaces, the number of depth slices in each level is half the number of the previous level (minimum 1) and rounded down if dividing by two results in a non-whole number.</p><strong>Note</strong>??An application must not rely on <strong>SysMemPitch</strong> being exactly equal to the number of texels in a line times the size of a texel. In some cases, <strong>SysMemPitch</strong> will include padding to skip past additional data in a line. This could be padding for alignment or the texture could be a subsection of a larger texture. For example, the <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure could represent a 32 by 32 subsection of a 128 by 128 texture. The value for <strong>SysMemSlicePitch</strong> will reflect any padding included in <strong>SysMemPitch</strong>.? + + + <dd> <p>Pointer to the initialization data.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one line of a texture to the next line. System-memory pitch is used only for 2D and 3D texture data as it is has no meaning for the other resource types. Specify the distance from the first pixel of one 2D slice of a 3D texture to the first pixel of the next 2D slice in that texture in the <strong>SysMemSlicePitch</strong> member.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one depth level to the next. System-memory-slice pitch is only used for 3D texture data as it has no meaning for the other resource types.</p> </dd> + + + + + <p>Provides access to subresource data.</p> + <p>This structure is used in a call to <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>The values in these members tell you how much data you can view:</p><ul> <li><strong>pData</strong> points to row 0 and depth slice 0.</li> <li><strong>RowPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from row to row, where each row contains multiple pixels.</li> <li><strong>DepthPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from depth slice to depth slice, where each depth slice contains multiple rows.</li> </ul><p>When <strong>RowPitch</strong> and <strong>DepthPitch</strong> are not appropriate for the resource type, the runtime might set their values to 0. So, don't use these values for anything other than iterating over rows and depth. Here are some examples:</p><ul> <li>For <strong>Buffer</strong> and <strong>Texture1D</strong>, the runtime assigns values that aren't 0 to <strong>RowPitch</strong> and <strong>DepthPitch</strong>. For example, if a <strong>Buffer</strong> contains 8 bytes, the runtime assigns values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are greater than or equal to 8.</li> <li>For <strong>Texture2D</strong>, the runtime still assigns a value that isn't 0 to <strong>DepthPitch</strong>, assuming that the field isn't used.</li> </ul><strong>Note</strong>?? The runtime might assign values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are larger than anticipated because there might be padding between rows and depth.? + + + <dd> <p>Pointer to the data. When <strong>{{ID3D11DeviceContext::Map}}</strong> provides the reference, the runtime ensures that the reference has a specific alignment, depending on the following feature levels:</p> <ul> <li>For <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong> and higher, the reference is aligned to 16 bytes.</li> <li>For lower than <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>, the reference is aligned to 4 bytes.</li> </ul> </dd> + + + <dd> <p>The row pitch, or width, or physical size (in bytes) of the data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size (in bytes)of the data.</p> </dd> + + + + + <p>Describes a buffer resource.</p> + <p>This structure is used by <strong>{{ID3D11Device::CreateBuffer}}</strong> to create buffer resources.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_BUFFER_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a buffer description.</p><p>If the bind flag is <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>, you must set the <strong>ByteWidth</strong> value in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>.</p> + + + <dd> <p>Size of the buffer in bytes.</p> </dd> + + + <dd> <p>Identify how the buffer is expected to be read from and written to. Frequency of update is a key factor. The most common value is typically {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Identify how the buffer will be bound to the pipeline. Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>{{CPU}} access flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) or 0 if no {{CPU}} access is necessary. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) or 0 if unused. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer. For more info about structured buffers, see Structured Buffer.</p> <p>The size value in <strong>StructureByteStride</strong> must match the size of the format that you use for views of the buffer. For example, if you use a shader resource view ({{SRV}}) to read a buffer in a pixel shader, the {{SRV}} format size must match the size value in <strong>StructureByteStride</strong>.</p> </dd> + + + + + <p>Describes a 1D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture1D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE1D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE1D_U_DIMENSION}} (8192) when you create your 1D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE1D_U_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the array. The range is from 1 to {{D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}. For a 1D texture, the allowable values are: {{D3D11_BIND_SHADER_RESOURCE}}, {{D3D11_BIND_RENDER_TARGET}} and {{D3D11_BIND_DEPTH_STENCIL}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture3D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a shader-resource view.</p> + <p> The <strong>{{D3D11_BUFFER_SRV}}</strong> structure is a member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure, which represents a shader-resource view description. You can create a shader-resource view by calling the <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> method. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the shader-resource-view description. </p> </dd> + + + + + <p>Describes the elements in a raw buffer resource to use in a shader-resource view.</p> + <p>This structure is used by <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a raw view of a buffer.</p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV_FLAG}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a multisampled 2D texture to use in a shader-resource view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> specifying the viewing format. See remarks.</p> </dd> + + + <dd> <p>The resource type of the view. See <strong>{{D3D11_SRV_DIMENSION}}</strong>. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>View the resource as a buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFER_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D texture using information from a shader-resource view (see <strong>{{D3D11_TEX1D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture using information from a shader-resource view (see <strong>{{D3D11_TEX2D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled texture using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D texture using information from a shader-resource view (see <strong>{{D3D11_TEX3D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube texture using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube-texture array using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a raw buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFEREX_SRV}}</strong>). For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a render-target view.</p> + <p> A render-target view is a member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>). Create a render-target view by calling <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the render-target-view description. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture to use in a render-target view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a an array of multisampled 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a render-target view.</p> + <p>This structure is one member of a render target view. See <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render target.</p><p>A render-target-view cannot use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_RTV_DIMENSION}}</strong>), which specifies how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a single subresource because a multisampled 2D texture only contains one subresource (see <strong>{{D3D11_TEX2DMS_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a multisampled 2D texture array that can be accessed (see <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_RTV}}</strong>).</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array 2D textures that are accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.</p> + <p>Because a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.</p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures for a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources of a texture that are accessible from a depth-stencil view.</p> + <p>These are valid formats for a depth-stencil view:</p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p>A depth-stencil view cannot use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, then the format of the parent resource is used.</p><p>A depth-stencil-view description is needed when calling <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p> + + + <dd> <p>Resource data format (see <strong>{{DXGI_FORMAT}}</strong>). See remarks for allowable formats.</p> </dd> + + + <dd> <p>Type of resource (see <strong>{{D3D11_DSV_DIMENSION}}</strong>). Specifies how a depth-stencil resource will be accessed; the value is stored in the union in this structure.</p> </dd> + + + <dd> <p>A value that describes whether the texture is read only. Pass 0 to specify that it is not read only; otherwise, pass one of the members of the <strong>{{D3D11_DSV_FLAG}}</strong> enumerated type.</p> </dd> + + + <dd> <p>Specifies a 1D texture subresource (see <strong>{{D3D11_TEX1D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 1D texture subresources (see <strong>{{D3D11_TEX1D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a 2D texture subresource (see <strong>{{D3D11_TEX2D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 2D texture subresources (see <strong>{{D3D11_TEX2D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a multisampled 2D texture (see <strong>{{D3D11_TEX2DMS_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of multisampled 2D textures (see <strong>{{D3D11_TEX2DMS_ARRAY_DSV}}</strong>).</p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>View options for the resource (see <strong>{{D3D11_BUFFER_UAV_FLAG}}</strong>).</p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_UAV_DIMENSION}}</strong>), which specifies how the resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_UAV}}</strong>).</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>These are the default values for sampler state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MinLOD</td><td>-3.402823466e+38F (-{{FLT_MAX}})</td></tr> <tr><td>MaxLOD</td><td>3.402823466e+38F ({{FLT_MAX}})</td></tr> <tr><td>MipMapLODBias</td><td>0.0f</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor</td><td>float4(1.0f,1.0f,1.0f,1.0f)</td></tr> <tr><td>Texture</td><td>N/A</td></tr> </table><p>?</p> + + + <dd> <p> Filtering method to use when sampling a texture (see <strong>{{D3D11_FILTER}}</strong>). </p> </dd> + + + <dd> <p> Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see <strong>{{D3D11_TEXTURE_ADDRESS_MODE}}</strong>). </p> </dd> + + + <dd> <p>Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.</p> </dd> + + + <dd> <p>Clamping value used if {{D3D11_FILTER_ANISOTROPIC}} or {{D3D11_FILTER_COMPARISON_ANISOTROPIC}} is specified in Filter. Valid values are between 1 and 16.</p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p>Border color to use if {{D3D11_TEXTURE_ADDRESS_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.</p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p>Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D11_FLOAT32_MAX}}.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>Type of query (see <strong>{{D3D11_QUERY}}</strong>).</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>).</p> </dd> + + + + + <p>Query information about the reliability of a timestamp query.</p> + <p>For a list of query types see <strong>{{D3D11_QUERY}}</strong>.</p> + + + <dd> <p>How frequently the {{GPU}} counter increments in Hz.</p> </dd> + + + <dd> <p>If this is <strong>{{TRUE}}</strong>, something occurred in between the query's <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the {{AC}} cord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by <strong>{{ID3D11DeviceContext::GetData}}</strong> for a timestamp query is only reliable if <strong>Disjoint</strong> is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Query information about the amount of data streamed out to the stream-output buffers in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Describes a counter.</p> + <p>This structure is used by <strong>{{ID3D11Counter::GetDesc}}</strong>, <strong>{{ID3D11Device::CheckCounter}}</strong> and <strong>{{ID3D11Device::CreateCounter}}</strong>.</p> + + + <dd> <p>Type of counter (see <strong>{{D3D11_COUNTER}}</strong>).</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Information about the video card's performance counter capabilities.</p> + <p>This structure is returned by <strong>{{ID3D11Device::CheckCounterInfo}}</strong>.</p> + + + <dd> <p>Largest device-dependent counter {{ID}} that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}. See <strong>{{D3D11_COUNTER}}</strong>.</p> </dd> + + + <dd> <p>Number of counters that can be simultaneously supported.</p> </dd> + + + <dd> <p>Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the {{VERTEX_PROCESSING}}, {{GEOMETRY_PROCESSING}}, {{PIXEL_PROCESSING}}, and {{OTHER_GPU_PROCESSING}} counters. </p> </dd> + + + + + <p>Describes an {{HLSL}} class instance.</p> + <p>The {{D3D11_CLASS_INSTANCE_DESC}} structure is returned by the <strong>{{ID3D11ClassInstance::GetDesc}}</strong> method.</p><p>The members of this structure except <strong>InstanceIndex</strong> are valid (non default values) if they describe a class instance aquired using <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The <strong>InstanceIndex</strong> member is only valid when the class instance is aquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>.</p> + + + <dd> <p>The instance {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The instance index of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The type {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>Describes the constant buffer associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base constant buffer offset associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base texture associated with an {{HLSL}} class; the default value is 127.</p> </dd> + + + <dd> <p>The base sampler associated with an {{HLSL}} class; the default value is 15.</p> </dd> + + + <dd> <p>True if the class was created; the default value is false.</p> </dd> + + + + + <p>Describes the multi-threading features that are supported by the current graphics driver.</p> + <p>Use the {{D3D11_FEATURE_DATA_THREADING}} structure with the <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> method to determine multi-threading support.</p> + + + <dd> <p><strong>{{TRUE}}</strong> means resources can be created concurrently on multiple threads while drawing; <strong>{{FALSE}}</strong> means that the presence of coarse synchronization will prevent concurrency.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> means command lists are supported by the current driver; <strong>{{FALSE}}</strong> means that the {{API}} will emulate deferred contexts and command lists with software.</p> </dd> + + + + + <p>Describes double data type support in the current graphics driver.</p> + <p>If the runtime sets <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>, the hardware and driver support the following Shader Model 5 instructions:</p><ul> <li> dadd </li> <li> dmax </li> <li> dmin </li> <li> dmul </li> <li> deq </li> <li> dge </li> <li> dlt </li> <li> dne </li> <li> dmov </li> <li> dmovc </li> <li> dtof </li> <li> ftod </li> </ul><strong>Note</strong>??If <strong>DoublePrecisionFloatShaderOps</strong> is <strong>{{TRUE}}</strong>, the hardware and driver do not necessarily support double-precision division.? + + + <dd> <p>Specifies whether double types are allowed. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong> in order for you to use any {{HLSL}} shader that is compiled with a double type.</p> </dd> + + + + + <p>Describes which resources are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> flags indicating which resources are supported.</p> </dd> + + + + + <p>Describes which unordered resource options are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT2}}</strong> flags indicating which unordered resource options are supported.</p> </dd> + + + + + <p>Describes compute shader and raw and structured buffer support in the current graphics driver.</p> + <p>Direct3D 11 devices ({{D3D_FEATURE_LEVEL_11_0}}) are required to support Compute Shader model 5.0. Direct3D 10.x devices ({{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_10_1}}) can optionally support Compute Shader model 4.0 or 4.1.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if compute shaders and raw and structured buffers are supported; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 11.1 feature options in the current graphics driver.</p> + <p>If a Microsoft Direct3D device supports feature level 11.1 (<strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>), when you call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>, <strong>CheckFeatureSupport</strong> returns a reference to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> with all member set to <strong>{{TRUE}}</strong> except the <strong>{{SAD4ShaderInstructions}}</strong> and <strong>ExtendedDoublesShaderInstructions</strong> members, which are optionally supported by the hardware and driver and therefore can be <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p><p>Feature level 11.1 provides the following additional features:</p><ul> <li>{{UAVs}} at every shader stage with 64 {{UAV}} bind slots instead of 8.</li> <li>Target-independent rasterization, which enables you to set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, 8, or 16 and to render to {{RTVs}} with a single sample.</li> <li>{{UAV}}-only rendering with the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> set to up to 16 (only up to 8 for feature level 11).</li> </ul><p>The runtime always sets the following groupings of members identically. That is, all the values in a grouping are <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> together:</p><ul> <li><strong>DiscardAPIsSeenByDriver</strong> and <strong>FlagsForUpdateAndCopySeenByDriver</strong></li> <li><strong>ClearView</strong>, <strong>CopyWithOverlap</strong>, <strong>ConstantBufferPartialUpdate</strong>, <strong>ConstantBufferOffsetting</strong>, and <strong>MapNoOverwriteOnDynamicConstantBuffer</strong></li> <li><strong>MapNoOverwriteOnDynamicBufferSRV</strong> and <strong>MultisampleRTVWithForcedSampleCountOne</strong></li> </ul> + + + <dd> <p>Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1.</p> </dd> + + + <dd> <p>Specifies whether the driver can render with no render target views ({{RTVs}}) or depth stencil views ({{DSVs}}), and only unordered access views ({{UAVs}}) bound. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver can render with no {{RTVs}} or {{DSVs}} and only {{UAVs}} bound and <strong>{{FALSE}}</strong> otherwise. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, or 8 when you render with no {{RTVs}} or {{DSV}} and only {{UAVs}} bound. For feature level 11.1, this member is always <strong>{{TRUE}}</strong> and you can also set <strong>ForcedSampleCount</strong> to 16 in addition to 1, 4, or 8. The default value of <strong>ForcedSampleCount</strong> is 0, which means the same as if the value is set to 1. You can always set <strong>ForcedSampleCount</strong> to 0 or 1 for {{UAV}}-only rendering independently of how this member is set.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::DiscardView}}</strong> and <strong>{{ID3D11DeviceContext1::DiscardResource}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports these methods and <strong>{{FALSE}}</strong> otherwise. How this member is set does not indicate whether the driver actually uses these methods; that is, the driver might ignore these methods if they are not useful to the hardware. If <strong>{{FALSE}}</strong>, the runtime does not expose these methods to the driver because the driver does not support them. You can monitor this member during development to rule out legacy drivers on hardware where these methods might have otherwise been beneficial. You are not required to write separate code paths based on whether this member is <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>; you can call these methods whenever applicable.</p> </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for copy and update that are exposed by the <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports new semantics for copy and update. The runtime sets this member to <strong>{{FALSE}}</strong> only for legacy drivers. The runtime handles this member similarly to the <strong>DiscardAPIsSeenByDriver</strong> member.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> with overlapping source and destination rectangles. The runtime sets this member to <strong>{{TRUE}}</strong> if you can call <strong>CopySubresourceRegion1</strong> with overlapping source and destination rectangles and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because drivers already support the option for these feature levels. ? </dd> + + + <dd> <p>Specifies whether the driver supports partial updates of constant buffers. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports partial updates of constant buffers and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for setting offsets in constant buffers for a shader. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports allowing you to specify offsets when you call new methods like the <strong>{{ID3D11DeviceContext1::VSSetConstantBuffers1}}</strong> method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic constant buffer (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic buffer {{SRV}} (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation.</p> </dd> + + + <dd> <p>Specifies whether the driver supports multisample rendering when you render with {{RTVs}} bound. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1 with a multisample {{RTV}} bound. The driver can support this option on feature level 10 and higher. If <strong>{{FALSE}}</strong>, the rasterizer-state creation will fail because the driver is legacy or the feature level is too low.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>msad4</strong> intrinsic function in shaders. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support calls to <strong>msad4</strong> intrinsic functions in shaders. If <strong>{{FALSE}}</strong>, the driver is legacy or the hardware does not support the option; the runtime will fail shader creation for shaders that use <strong>msad4</strong>.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>fma</strong> intrinsic function and other extended doubles instructions (<strong>{{DDIV}}</strong> and <strong>{{DRCP}}</strong>) in shaders. The <strong>fma</strong> intrinsic function emits an extended doubles <strong>{{DFMA}}</strong> instruction. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended doubles instructions in shaders (shader model 5 and higher). Support of this option implies support of basic double-precision shader instructions as well. You can use the <strong>{{D3D11_FEATURE_DOUBLES}}</strong> value to query for support of double-precision shaders. If <strong>{{FALSE}}</strong>, the hardware and driver do not support the option; the runtime will fail shader creation for shaders that use extended doubles instructions.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support sharing a greater variety of Texture2D resource types and formats. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended Texture2D resource sharing.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes information about Direct3D 11.1 adapter architecture.</p> + + + <dd> <p>Specifies whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain {{API}} usage patterns that are fine for TileBasedDefferredRenderers ({{TBDRs}}) can perform worse on non-{{TBDRs}} and vice versa. Applications that are careful about rendering can be friendly to both {{TBDR}} and non-{{TBDR}} architectures. <strong>{{TRUE}}</strong> if the rendering device batches rendering commands and <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more information about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. For more information about this feature, see feature level.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D?9 shadow support in the current graphics driver. </p> + <p>Shadows are an important element in realistic 3D scenes. You can use the shadow buffer technique to render shadows. The basic principle of the technique is to use a depth buffer to store the scene depth info from the perspective of the light source, and then compare each point rendered in the scene with that buffer to determine if it is in shadow.</p><p>To render objects into the scene with shadows on them, you create <strong>sampler state objects</strong> with comparison filtering set and the comparison mode (ComparisonFunc) to LessEqual. You can also set BorderColor addressing on this depth sampler, even though BorderColor isn't typically allowed on feature levels 9.1 and 9.2. By using the border color and picking 0.0 or 1.0 as the border color value, you can control whether the regions off the edge of the shadow map appear to be always in shadow or never in shadow respectively. +You can control the shadow filter quality by the Mag and Min filter settings in the comparison sampler. Point sampling will produce shadows with non-anti-aliased edges. Linear filter sampler settings will result in higher quality shadow edges, but might affect performance on some power-optimized devices.</p><strong>Note</strong>??If you use a separate setting for Mag versus Min filter options, you produce an undefined result. Anisotropic filtering is not supported. The Mip filter choice is not relevant because feature level 9.x does not allow mipmapped depth buffers.?<strong>Note</strong>??On feature level 9.x, you can't compile a shader with the <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> intrinsic functions by using older versions of the compiler. For example, you can't use the fxc.exe compiler that ships with the DirectX {{SDK}} or use the <strong>{{D3DCompile}}**</strong> functions (like <strong>{{D3DCompileFromFile}}</strong>) that are implemented in {{D3DCompiler_43}}.dll and earlier. These intrinsic functions on feature level 9.x are only supported in the fxc.exe compiler that ships with the Windows?8 {{SDK}} and later and with the <strong>{{D3DCompile}}**</strong> functions that are implemented in {{D3DCompiler_44}}.dll and later. +But these intrinsic functions are present in shader models for feature levels higher than 9.x.? + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes precision support options for shaders in the current graphics driver.</p> + <p>For hardware at Direct3D 10 and higher feature levels, the runtime sets both members identically. For hardware at Direct3D 9.3 and lower feature levels, the runtime can set a lower precision support in the <strong>PixelShaderMinPrecision</strong> member than the <strong>AllOtherShaderStagesMinPrecision</strong> member; for 9.3 and lower, all other shader stages represent only the vertex shader.</p><p>For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for the pixel shader. A value of zero indicates that the driver supports only full 32-bit precision for the pixel shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for all other shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all other shader stages.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 11.2 feature options in the current graphics driver.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D11_OPTIONS1}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The members of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> will be set appropriately based on the system's graphics hardware and graphics driver. </p> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D11_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support the filtering options (<strong>{{D3D11_FILTER}}</strong>) of comparing the result to the minimum or maximum value during texture sampling. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support these filtering options. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver also support the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method on depth formats. For info about valid depth formats, see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies support for creating <strong>{{ID3D11Buffer}}</strong> resources that can be passed to the <strong>{{ID3D11DeviceContext::Map}}</strong> and <strong>{{ID3D11DeviceContext::Unmap}}</strong> methods. This means that the <strong>{{CPUAccessFlags}}</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure may be set with the desired <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong> elements when the <strong>Usage</strong> member of <strong>{{D3D11_BUFFER_DESC}}</strong> is set to <strong>{{D3D11_USAGE_DEFAULT}}</strong>. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware is capable of at least <strong>{{D3D_FEATURE_LEVEL_11_0}}</strong> and the graphics device driver supports mappable default buffers. </p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether simple instancing is supported.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>SimpleInstancingSupported</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>. </p><p> Simple instancing means that instancing is supported with the caveat that the <strong>InstanceDataStepRate</strong> member of the <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> structure must be equal to 1. This does not change the full instancing support provided by hardware at feature level 9.3 and above, and is meant to expose the instancing support that may be available on feature level 9.2 and 9.1 hardware. </p> + + + <dd> <p> Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether a {{GPU}} profiling technique is supported.</p> + <p>If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_MARKER_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>Profile</strong> member of <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Specifies whether the hardware and driver support a {{GPU}} profiling technique that can be used with development tools. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support data marking.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + <p>You can use the <strong>{{D3D11_FEATURE_D3D9_OPTIONS1}}</strong> enumeration value with <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> to query a driver about support for Direct3D 9 feature options rather than making multiple calls to <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> by using <strong>{{D3D11_FEATURE_D3D9_OPTIONS}}</strong>, <strong>{{D3D11_FEATURE_D3D9_SHADOW_SUPPORT}}</strong>, and <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>, which provide identical info about supported Direct3D 9 feature options.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more info about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. </p> </dd> + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support setting a single face of a <strong>TextureCube</strong> as a render target while the depth stencil surface that is bound alongside can be a <strong>Texture2D</strong> (as opposed to <strong>TextureCube</strong>). The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support this feature; otherwise <strong>{{FALSE}}</strong>.</p> <p>If the hardware and driver don't support this feature, the app must match the render target surface type with the depth stencil surface type. Because hardware at Direct3D 9.3 and lower feature levels doesn't allow <strong>TextureCube</strong> depth surfaces, the only way to render a scene into a <strong>TextureCube</strong> while having depth buffering enabled is to render each <strong>TextureCube</strong> face separately to a <strong>Texture2D</strong> render target first (because that can be matched with a <strong>Texture2D</strong> depth), and then copy the results into the <strong>TextureCube</strong>. If the hardware and driver support this feature, the app can just render to the <strong>TextureCube</strong> faces directly while getting depth buffering out of a <strong>Texture2D</strong> depth buffer.</p> <p>You only need to query this feature from hardware at Direct3D 9.3 and lower feature levels because hardware at Direct3D 10.0 and higher feature levels allow <strong>TextureCube</strong> depth surfaces.</p> </dd> + + + + + + + + <p>Describes Direct3D 11.3 feature options in the current graphics driver.</p> + + + <dd> <p> Whether to use the {{VP}} and {{RT}} array index from any shader feeding the rasterizer. </p> </dd> + + + + + <p> Describes feature data {{GPU}} virtual address support, including maximum address bits per resource and per process. </p> + <p> See <strong>{{D3D11_FEATURE}}</strong>. </p> + + + <dd> <p> The maximum {{GPU}} virtual address bits per resource. </p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process. </p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + + + + <p>Describes a video stream for a Microsoft Direct3D?11 video decoder or video processor. </p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The width of the video frame, in pixels. </p> </dd> + + + <dd> <p>The height of the video frame, in pixels. </p> </dd> + + + <dd> <p>The output surface format, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + + + <p>Describes the configuration of a Microsoft Direct3D?11 decoder device for DirectX Video Acceleration ({{DXVA}}). </p> + + + <dd> <p>If the bitstream data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 0, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the macroblock control data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the residual difference decoding data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>Indicates whether the host-decoder sends raw bit-stream data. If the value is 1, the data for the pictures will be sent in bit-stream buffers as raw bit-stream content. If the value is 0, picture data will be sent using macroblock control command buffers. If either <strong>ConfigResidDiffHost</strong> or <strong>ConfigResidDiffAccelerator</strong> is 1, the value must be 0. </p> </dd> + + + <dd> <p>Specifies whether macroblock control commands are in raster scan order or in arbitrary order. If the value is 1, the macroblock control commands within each macroblock control command buffer are in raster-scan order. If the value is 0, the order is arbitrary. For some types of bit streams, forcing raster order either greatly increases the number of required macroblock control buffers that must be processed, or requires host reordering of the control information. Therefore, supporting arbitrary order can be more efficient. </p> </dd> + + + <dd> <p>Contains the host residual difference configuration. If the value is 1, some residual difference decoding data may be sent as blocks in the spatial domain from the host. If the value is 0, spatial domain data will not be sent. </p> </dd> + + + <dd> <p>Indicates the word size used to represent residual difference spatial-domain blocks for predicted (non-intra) pictures when using host-based residual difference decoding. </p> <p>If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 1, the host will send residual difference spatial-domain blocks for non-intra macroblocks using 8-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 0, the host will send residual difference spatial-domain blocks of data for non-intra macroblocks using 16-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial domain blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial domain blocks for intra macroblocks are sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 0, <strong>ConfigSpatialResid8</strong> must be 0. </p> <p> For intra pictures, spatial-domain blocks must be sent using 8-bit samples if bits-per-pixel ({{BPP}}) is 8, and using 16-bit samples if {{BPP}} &gt; 8. If <strong>ConfigIntraResidUnsigned</strong> is 0, these samples are sent as signed integer values relative to a constant reference value of 2^({{BPP}}?1), and if <strong>ConfigIntraResidUnsigned</strong> is 1, these samples are sent as unsigned integer values relative to a constant reference value of 0. </p> </dd> + + + <dd> <p> If the value is 1, 8-bit difference overflow blocks are subtracted rather than added. The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 1. </p> <p> The ability to subtract differences rather than add them enables 8-bit difference decoding to be fully compliant with the full ?255 range of values required in video decoder specifications, because +255 cannot be represented as the addition of two signed 8-bit numbers, but any number in the range ?255 can be represented as the difference between two signed 8-bit numbers (+255 = +127 minus ?128).</p> </dd> + + + <dd> <p> If the value is 1, spatial-domain blocks for intra macroblocks must be clipped to an 8-bit range on the host and spatial-domain blocks for non-intra macroblocks must be clipped to a 9-bit range on the host. If the value is 0, no such clipping is necessary by the host. </p> <p> The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 0 and <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, any spatial-domain residual difference data must be sent in a chrominance-interleaved form matching the {{YUV}} format chrominance interleaving pattern. The value must be 0 unless <strong>ConfigResidDiffHost</strong> is 1 and the {{YUV}} format is {{NV12}} or {{NV21}}. </p> </dd> + + + <dd> <p> Indicates the method of representation of spatial-domain blocks of residual difference data for intra blocks when using host-based difference decoding. </p> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1), regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks must be sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0, regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> The value of the member must be 0 unless <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, transform-domain blocks of coefficient data may be sent from the host for accelerator-based {{IDCT}}. If the value is 0, accelerator-based {{IDCT}} will not be used. If both <strong>ConfigResidDiffHost</strong> and <strong>ConfigResidDiffAccelerator</strong> are 1, this indicates that some residual difference decoding will be done on the host and some on the accelerator, as indicated by macroblock-level control commands. </p> <p> The value must be 0 if <strong>ConfigBitstreamRaw</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the inverse scan for transform-domain block processing will be performed on the host, and absolute indices will be sent instead for any transform coefficients. If the value is 0, the inverse scan will be performed on the accelerator. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>Config4GroupedCoefs</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the {{IDCT}} specified in Annex W of {{ITU}}-T Recommendation H.263 is used. If the value is 0, any compliant {{IDCT}} can be used for off-host {{IDCT}}. </p> <p> The H.263 annex does not comply with the {{IDCT}} requirements of {{MPEG}}-2 corrigendum 2, so the value must not be 1 for use with {{MPEG}}-2 video. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0, indicating purely host-based residual difference decoding. </p> </dd> + + + <dd> <p> If the value is 1, transform coefficients for off-host {{IDCT}} will be sent using the <strong>{{DXVA_TCoef4Group}}</strong> structure. If the value is 0, the <strong>{{DXVA_TCoefSingle}}</strong> structure is used. The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>ConfigHostInverseScan</strong> is 1. </p> </dd> + + + <dd> <p> Specifies how many frames the decoder device processes at any one time. </p> </dd> + + + <dd> <p> Contains decoder-specific configuration information. </p> </dd> + + + + + <p>Contains an initialization vector ({{IV}}) for 128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher encryption. </p> + + + <dd> <p>The {{IV}}, in big-endian format.</p> </dd> + + + <dd> <p>The block count, in big-endian format.</p> </dd> + + + + + <p>Specifies which bytes in a video surface are encrypted. </p> + + + <dd> <p>The number of bytes that are encrypted at the start of the buffer. </p> </dd> + + + <dd> <p>The number of bytes that are skipped after the first <strong>NumEncryptedBytesAtBeginning</strong> bytes, and then after each block of <strong>NumBytesInEncryptPattern</strong> bytes. Skipped bytes are not encrypted. </p> </dd> + + + <dd> <p>The number of bytes that are encrypted after each block of skipped bytes.</p> </dd> + + + + + <p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. +</p> </dd> + + + <dd> <p>The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +</p> </dd> + + + <dd> <p>The number of macroblocks of data in the buffer. This count includes skipped macroblocks. </p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <strong>pIV</strong> parameter. If <strong>pIV</strong> is <strong>{{NULL}}</strong>, set this member to zero.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video surfaces are partially encrypted.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure that specifies which bytes of the surface are encrypted.</p> </dd> + + + + + <p>Contains driver-specific data for the <strong>{{ID3D11VideoContext::DecoderExtension}}</strong> method.</p> + <p>The exact meaning of each structure member depends on the value of <strong>Function</strong>.</p> + + + + <p>Describes the capabilities of a Microsoft Direct3D?11 video processor.</p> + <p>The video processor stores state information for each input stream. These states persist between blits. With each blit, the application selects which streams to enable or disable. Disabling a stream does not affect the state information for that stream.</p><p>The <strong>MaxStreamStates</strong> member gives the maximum number of stream states that can be saved. The <strong>MaxInputStreams</strong> member gives the maximum number of streams that can be enabled during a blit. These two values can differ. </p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSPR_FILTER_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of frame-rate conversion capabilities. To enumerate the frame-rate conversion capabilities, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method.</p> </dd> + + + <dd> <p>The maximum number of input streams that can be enabled at the same time. </p> </dd> + + + <dd> <p>The maximum number of input streams for which the device can store state data.</p> </dd> + + + + + <p>Defines a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + + + <dd> <p>The number of past reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>The number of future reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The number of custom frame rates that the driver supports. To get the list of custom frame rates, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong> method.</p> </dd> + + + + + <p>Describes the content-protection capabilities of a graphics driver.</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_CONTENT_PROTECTION_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of cryptographic key-exchange types that are supported by the driver. To get the list of key-exchange types, call the <strong>{{ID3D11VideoDevice::CheckCryptoKeyExchange}}</strong> method.</p> </dd> + + + <dd> <p>The encyrption block size, in bytes. The size of data to be encrypted must be a multiple of this value. </p> </dd> + + + <dd> <p>The total amount of memory, in bytes, that can be used to hold protected surfaces.</p> </dd> + + + + + <p>Specifies a custom rate for frame-rate conversion or inverse telecine ({{IVTC}}). </p> + <p>The <strong>CustomRate</strong> member gives the rate conversion factor, while the remaining members define the pattern of input and output samples.</p> + + + <dd> <p>The ratio of the output frame rate to the input frame rate, expressed as a <strong>{{DXGI_RATIONAL}}</strong> structure that holds a rational number. </p> </dd> + + + <dd> <p>The number of output frames that will be generated for every <em>N</em> input samples, where <em>N</em> = <strong>InputFramesOrFields</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the input stream must be interlaced. Otherwise, the input stream must be progressive. </p> </dd> + + + <dd> <p>The number of input fields or frames for every <em>N</em> output frames that will be generated, where <em>N</em> = <strong>OutputFrames</strong>. </p> </dd> + + + + + <p>Defines the range of supported values for an image filter. </p> + <p>The multiplier enables the filter range to have a fractional step value.</p><p>For example, a hue filter might have an actual range of [?180.0 ... +180.0] with a step size of 0.25. The device would report the following range and multiplier:</p><ul> <li>Minimum: ?720</li> <li>Maximum: +720</li> <li>Multiplier: 0.25</li> </ul><p>In this case, a filter value of 2 would be interpreted by the device as 0.50 (or 2 ? 0.25).</p><p>The device should use a multiplier that can be represented exactly as a base-2 fraction.</p> + + + <dd> <p>The minimum value of the filter. </p> </dd> + + + <dd> <p>The maximum value of the filter. </p> </dd> + + + <dd> <p>The default value of the filter. </p> </dd> + + + <dd> <p>A multiplier. Use the following formula to translate the filter setting into the actual filter value: <em>Actual Value</em> = <em>Set Value</em>???<em>Multiplier</em>.</p> </dd> + + + + + <p>Describes a video stream for a video processor.</p> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> enumeration that describes how the video stream is interlaced.</p> </dd> + + + <dd> <p>The frame rate of the input video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the input frames, in pixels.</p> </dd> + + + <dd> <p>The height of the input frames, in pixels.</p> </dd> + + + <dd> <p>The frame rate of the output video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the output frames, in pixels. </p> </dd> + + + <dd> <p>The height of the output frames, in pixels.</p> </dd> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_USAGE}}</strong> enumeration that describes how the video processor will be used. The value indicates the desired trade-off between speed and video quality. The driver uses this flag as a hint when it creates the video processor.</p> </dd> + + + + + <p>Specifies an {{RGB}} color value. </p> + <p>The {{RGB}} values have a nominal range of [0...1]. For an {{RGB}} format with <em>n</em> bits per channel, the value of each color component is calculated as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>For example, for {{RGB}}-32 (8 bits per channel), <code>val = {{BYTE}}(f * 255.0)</code>.</p> + + + <dd> <p>The red value.</p> </dd> + + + <dd> <p>The green value.</p> </dd> + + + <dd> <p>The blue value.</p> </dd> + + + <dd> <p>The alpha value. Values range from 0 (transparent) to 1 (opaque). +</p> </dd> + + + + + + + + <p>Defines a color value for Microsoft Direct3D?11 video.</p> + <p>The anonymous union can represent both {{RGB}} and {{YCbCr}} colors. The interpretation of the union depends on the context. </p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_YCbCrA}}</strong> structure that contains a {{YCbCr}} color value. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_RGBA}}</strong> structure that contains an {{RGB}} color value. </p> </dd> + + + + + <p>Specifies the color space for video processing.</p> + <p>The <strong>{{RGB_Range}}</strong> member applies to {{RGB}} output, while the <strong>{{YCbCr_Matrix}}</strong> and <strong>{{YCbCr_xvYCC}}</strong> members apply to {{YCbCr}} output. If the driver performs color-space conversion on the background color, it uses the values that apply to both color spaces. </p><p>If the driver supports extended {{YCbCr}} (xvYCC), it returns the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC}}</strong> capabilities flag in the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. Otherwise, the driver ignores the value of <strong>{{YCbCr_xvYCC}}</strong> and treats all {{YCbCr}} output as conventional {{YCbCr}}. </p><p>If extended {{YCbCr}} is supported, it can be used with either transfer matrix. Extended {{YCbCr}} does not change the black point or white point?the black point is still 16 and the white point is still 235. However, extended {{YCbCr}} explicitly allows blacker-than-black values in the range 1?15, and whiter-than-white values in the range 236?254. When extended {{YCbCr}} is used, the driver should not clip the luma values to the nominal 16?235 range.</p> + + + <dd> <p>Specifies whether the output is intended for playback or video processing (such as editing or authoring). The device can optimize the processing based on the type. The default state value is 0 (playback). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Playback</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Video processing</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{RGB}} color range. The default state value is 0 (full range). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Full range (0-255)</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Limited range (16-235)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{YCbCr}} transfer matrix. The default state value is 0 ({{BT}}.601). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.601</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.709</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies whether the output uses conventional {{YCbCr}} or extended {{YCbCr}} (xvYCC). The default state value is zero (conventional {{YCbCr}}). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Conventional {{YCbCr}}</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Extended {{YCbCr}} (xvYCC)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE}}</strong>. </p> <p>Introduced in Windows?8.1.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + + + <p>Contains stream-level data for the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method. </p> + <p>If the stereo 3D format is <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>, the <strong>ppPastSurfaces</strong>, <strong>pInputSurface</strong>, and <strong>ppFutureSurfaces</strong> members contain the left view.</p> + + + + <p>Contains a Message Authentication Code ({{MAC}}). </p> + + + <dd> <p>A byte array that contains the cryptographic {{MAC}} value of the message.</p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method. </p> + + + + <p>Contains a response from the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method.</p> + + + + + + + <p>Specifies the protection level for video content.</p> + + + <dd> <dl> <dt><strong>ProtectionEnabled</strong></dt> <dd> <p>If 1, video content protection is enabled. </p> </dd> <dt><strong>OverlayOrFullscreenRequired</strong></dt> <dd> <p>If 1, the application requires video to be displayed using either a hardware overlay or full-screen exclusive mode.</p> </dd> <dt><strong>Reserved </strong></dt> <dd> <p>Reserved. Set all bits to zero. </p> </dd> </dl> </dd> + + + <dd> <p>Use this member to access all of the bits in the union. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_PROTECTION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> value that specifies the channel type. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A handle to the device. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session that is associated with the decoder device.</p> </dd> + + + <dd> <p>A handle to the Direct3D device that is associated with the decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of processes that are allowed to open shared resources that have restricted access. A process cannot open such a resource unless the process has been granted access. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the process. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + <p>The Desktop Window Manager ({{DWM}}) process is identified by setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Other processes are identified by setting the process handle in <strong>ProcessHandle</strong> and setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the process in the list of processes.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessIdentifier</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member contains a valid handle to a process. Otherwise, this member is ignored.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of protected, shared resources that can be opened by any process without restrictions.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The number of output {{IDs}} associated with the specified device and cryptographic session.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + <dd> <p>An output {{ID}} that is associated with the specified device and cryptographic session.</p> </dd> + + + + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of encryption {{GUIDs}}. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies a supported encryption type.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE}} </strong>query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the current encryption type. </p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains the response from the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>The initial sequence number for queries.</p> </dd> + + + <dd> <p>The initial sequence number for commands.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_PROTECTION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A handle to the decoder device. Get this from <strong>{{ID3D11VideoDecoder::GetDriverHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the cryptographic session. Get this from <strong>{{ID3D11CryptoSession::GetCryptoSessionHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the Direct3D device. Get this from <strong>{{D3D11VideoContext::QueryAuthenticatedChannel}}</strong> using <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong>. +</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process. To specify the Desktop Window Manager ({{DWM}}) process, set this member to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Otherwise, set this member to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong> and set the <strong>ProcessHandle</strong> member to a valid handle.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessType</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member specifies a handle to a process. Otherwise, the value is ignored.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the specified process has access to restricted shared resources.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the type of encryption to apply.</p> </dd> + + + + + <p>Identifies the texture resource for a video decoder output view.</p> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video decoder output view.</p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VDOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VDOV}}</strong> structure that identifies the texture resource for the output view.</p> </dd> + + + + + <p>Identifies the texture resource for a video processor input view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video processor input view.</p> + + + <dd> <p>The surface format. If zero, the driver uses the {{DXGI}} format that was used to create the resource. If you are using feature level 9, the value must be zero.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPIV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPIV}}</strong> structure that identifies the texture resource.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The index of the first texture to use.</p> </dd> + + + <dd> <p>The number of textures in the array.</p> </dd> + + + + + <p>Describes a video processor output view.</p> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPOV}}</strong> structure that identifies the texture resource for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2D}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_VPOV}}</strong> structure that identifies the texture array for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2DARRAY}}</strong>.</p> </dd> + + + + + <p>A device-child interface accesses data used by a device.</p> + <p>There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Get a reference to the device that created this interface.</p> + <p>Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a device (see <strong>{{ID3D11Device}}</strong>).</p> </dd> + + + + + <p>Get application-defined data from a device child.</p> + <p> The data stored in the device child is set by calling <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device child if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p>Set application-defined data to a device child and associate that data with an application-defined guid.</p> + <p>The data stored in the device child with this method can be retrieved with <strong>{{ID3D11DeviceChild::GetPrivateData}}</strong>.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device child. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>When this method is called ::addref() will be called on the {{IUnknown}}-derived interface, and when the device child is detroyed ::release() will be called on the {{IUnknown}}-derived interface.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>The depth-stencil-state interface holds a description for depth-stencil state that you can bind to the output-merger stage.</p> + <p>To create a depth-stencil-state object, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>. To bind the depth-stencil-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> + + + + <p>Gets the description for depth-stencil state that you used to create the depth-stencil-state object.</p> + <p>You use the description for depth-stencil state in a call to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> structure that receives a description of the depth-stencil state.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device::CreateBlendState}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device::CreateBlendState}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC}}</strong> structure that receives a description of the blend state.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device::CreateRasterizerState}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RASTERIZER_DESC}}</strong> structure that receives a description of the rasterizer state.</p> </dd> + + + + + <p>A resource interface provides common actions on all resources.</p> + <p>You don't directly create a resource interface; instead, you create buffers and textures that inherit from a resource interface. For more info, see How to: Create a Vertex Buffer, How to: Create an Index Buffer, How to: Create a Constant Buffer, and How to: Create a Texture.</p> + + + + <p>Get the type of the resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Pointer to the resource type (see <strong>{{D3D11_RESOURCE_DIMENSION}}</strong>). </p> </dd> + + + + + <p>Set the eviction priority of a resource.</p> + <p>Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.</p><p>A resource that is set to the maximum priority, {{DXGI_RESOURCE_PRIORITY_MAXIMUM}}, is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model ({{WDDM}}) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.</p><p>Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement. </p> + <p>Returns nothing.</p> + + + <dd> <p>Eviction priority for the resource, which is one of the following values:</p> <ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> </dd> + + + + + <p>Get the eviction priority of a resource.</p> + + <p>One of the following values, which specifies the eviction priority for the resource:</p><ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> + + + + <p>A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.</p> + <p>There are three types of buffers: vertex, index, or a shader-constant buffer. Create a buffer resource by calling <strong>{{ID3D11Device::CreateBuffer}}</strong>.</p><p>A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to <strong>{{ID3D11DeviceContext::IASetVertexBuffers}}</strong> and <strong>{{ID3D11DeviceContext::IASetIndexBuffer}}</strong>, to the stream-output stage by a call to <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>, and to a shader stage by calling the appropriate shader method (such as <strong>{{ID3D11DeviceContext::VSSetConstantBuffers}}</strong> for example).</p><p>Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously.</p> + + + + <p>Get the properties of a buffer resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_BUFFER_DESC}}</strong>) filled in by the method.</p> </dd> + + + + + <p>A 1D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty 1D texture, call <strong>{{ID3D11Device::CreateTexture1D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 1D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong>).</p> </dd> + + + + + <p>A 2D texture interface manages texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device::CreateTexture2D}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE2D_DESC}}</strong>).</p> </dd> + + + + + <p>A 3D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device::CreateTexture3D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</p> </dd> + + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>A view interface is the base interface for all views. There are four types of views; a depth-stencil view, a render-target view, a shader-resource view, and an unordered-access view.</p><ul> <li>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>.</li> <li>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</li> <li>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</li> <li>To create an unordered-access view, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</li> </ul><p>All resources must be bound to the pipeline before they can be accessed.</p><ul> <li>To bind a render-target view or a depth-stencil view, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</li> <li>To bind a shader resource, call <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>.</li> </ul> + + + + <p>Get the resource that is accessed through this view.</p> + <p>This function increments the reference count of the resource by one, so it is necessary to call <strong>Release</strong> on the returned reference when the application is done with it. Destroying (or losing) the returned reference before <strong>Release</strong> is called will result in a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to the resource that is accessed through this view. (See <strong>{{ID3D11Resource}}</strong>.)</p> </dd> + + + + + <p>A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Get the shader resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure to be filled with data about the shader resource view.</p> </dd> + + + + + <p>A render-target-view interface identifies the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.</p> + + + + <p>Get the properties of a render target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the description of a render target view (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Get a description of the resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.)</p> </dd> + + + + + <p>A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.</p> + <p>The vertex-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a vertex shader interface, call <strong>{{ID3D11Device::CreateVertexShader}}</strong>. Before using a vertex shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A hull-shader interface manages an executable program (a hull shader) that controls the hull-shader stage.</p> + <p>The hull-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a hull-shader interface, call <strong>{{ID3D11Device::CreateHullShader}}</strong>. Before using a hull shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::HSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A domain-shader interface manages an executable program (a domain shader) that controls the domain-shader stage.</p> + <p>The domain-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a domain-shader interface, call <strong>{{ID3D11Device::CreateDomainShader}}</strong>. Before using a domain shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::DSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.</p> + <p>The geometry-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a geometry shader interface, call either <strong>{{ID3D11Device::CreateGeometryShader}}</strong> or <strong>{{ID3D11Device::CreateGeometryShaderWithStreamOutput}}</strong>. Before using a geometry shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.</p> + <p>The pixel-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders in are implemented from a common set of features referred to as the common-shader core..</p><p>To create a pixel shader interface, call <strong>{{ID3D11Device::CreatePixelShader}}</strong>. Before using a pixel shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A compute-shader interface manages an executable program (a compute shader) that controls the compute-shader stage.</p> + <p>The compute-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a compute-shader interface, call <strong>{{ID3D11Device::CreateComputeShader}}</strong>. Before using a compute shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::CSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>An input-layout interface holds a definition of how to feed vertex data that is laid out in memory into the input-assembler stage of the graphics pipeline.</p> + <p>To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>. To bind the input-layout object to the input-assembler stage, call <strong>{{ID3D11DeviceContext::IASetInputLayout}}</strong>.</p> + + + + <p>The sampler-state interface holds a description for sampler state that you can bind to any shader stage of the pipeline for reference by texture sample operations.</p> + <p>To create a sampler-state object, call <strong>{{ID3D11Device::CreateSamplerState}}</strong>.</p><p>To bind a sampler-state object to any pipeline shader stage, call the following methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::VSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::HSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::PSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CSSetSamplers}}</strong> </li> </ul><p>You can bind the same sampler-state object to multiple shader stages simultaneously.</p> + + + + <p>Gets the description for sampler state that you used to create the sampler-state object.</p> + <p>You use the description for sampler state in a call to the <strong>{{ID3D11Device::CreateSamplerState}}</strong> method to create the sampler-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SAMPLER_DESC}}</strong> structure that receives a description of the sampler state.</p> </dd> + + + + + <p>This interface encapsulates methods for retrieving data from the {{GPU}} asynchronously.</p> + <p>There are three types of asynchronous interfaces, all of which inherit this interface:</p><ul> <li> <strong>{{ID3D11Query}}</strong> - Queries information from the {{GPU}}.</li> <li> <strong>{{ID3D11Predicate}}</strong> - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.</li> <li> <strong>{{ID3D11Counter}}</strong> - Measures {{GPU}} performance.</li> </ul> + + + + <p>Get the size of the data (in bytes) that is output when calling <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + <p>Size of the data (in bytes) that is output when calling GetData.</p> + + + + <p>A query interface queries information from the {{GPU}}.</p> + <p>A query can be created with <strong>{{ID3D11Device::CreateQuery}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>A query is typically executed as shown in the following code:</p><pre> {{D3D11_QUERY_DESC}} queryDesc; +... // Fill out queryDesc structure +{{ID3D11Query}} * pQuery; +pDevice-&gt;CreateQuery(&amp;queryDesc, &amp;pQuery); +pDeviceContext-&gt;Begin(pQuery); ... // Issue graphics commands pDeviceContext-&gt;End(pQuery); +{{UINT64}} queryData; // This data type is different depending on the query type while( {{S_OK}} != pDeviceContext-&gt;GetData(pQuery, &amp;queryData, sizeof({{UINT64}}), 0) ) +{ +} +</pre><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Get a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + + + <p>A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.</p> + <p>To create a predicate object, call <strong>{{ID3D11Device::CreatePredicate}}</strong>. To set the predicate object, call <strong>{{ID3D11DeviceContext::SetPredication}}</strong>.</p><p>There are two types of predicates: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.</p> + + + + <p>This interface encapsulates methods for measuring {{GPU}} performance.</p> + <p>A counter can be created with <strong>{{ID3D11Device::CreateCounter}}</strong>.</p><p>This is a derived class of <strong>{{ID3D11Asynchronous}}</strong>.</p><p>Counter data is gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.</p><p>Counters are best suited for profiling.</p><p>For a list of the types of performance counters, see <strong>{{D3D11_COUNTER}}</strong>.</p> + + + + <p>Get a counter description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} class.</p> + <p>This interface is created by calling <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The interface is used when binding shader resources to the pipeline using {{APIs}} such as <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p> + + + + <p> Gets the <strong>{{ID3D11ClassLinkage}}</strong> object associated with the current {{HLSL}} class. </p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Gets a description of the current {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p> An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated. </p><ul> <li> A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name <strong>DefaultShader</strong> would work in any shader that contained a type <strong>DefaultShader</strong> even though several shaders could describe a different type. </li> <li> A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in. </li> </ul><p> An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_CLASS_INSTANCE_DESC}}</strong> structure that describes the current {{HLSL}} class. </p> </dd> + + + + + <p>Gets the instance name of the current {{HLSL}} class.</p> + <p>GetInstanceName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The instance name of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pInstanceName</em> parameter. </p> </dd> + + + + + <p>Gets the type of the current {{HLSL}} class.</p> + <p>GetTypeName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Type of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pTypeName</em> parameter. </p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} dynamic linkage.</p> + <p>A class linkage object can hold up to 64K gotten instances. A gotten instance is a handle that references a variable name in any shader that is created with that linkage object. When you create a shader with a class linkage object, the runtime gathers these instances and stores them in the class linkage object. For more information about how a class linkage object is used, see Storing Variables and Types for Shaders to Share.</p><p>An <strong>{{ID3D11ClassLinkage}}</strong> object is created using the <strong>{{ID3D11Device::CreateClassLinkage}}</strong> method.</p> + + + + <p>Gets the class-instance object that represents the specified {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p> A class instance must have at least 1 data member in order to be available for the runtime to use with <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. Any instance with no members will be optimized out of a compiled shader blob as a zero-sized object. If you have a class with no data members, use <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong> instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>The name of a class for which to get the class instance.</p> </dd> + + + <dd> <p>The index of the class instance.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>Initializes a class-instance object that represents an {{HLSL}} class instance.</p> + <p>Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in.</p><p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>The type name of a class to initialize.</p> </dd> + + + <dd> <p>Identifies the constant buffer that contains the class data.</p> </dd> + + + <dd> <p>The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset.</p> </dd> + + + <dd> <p>The texture slot for the first texture; there may be multiple textures following the offset.</p> </dd> + + + <dd> <p>The sampler slot for the first sampler; there may be multiple samplers following the offset.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>The <strong>{{ID3D11CommandList}}</strong> interface encapsulates a list of graphics commands for play back.</p> + <p>There is no explicit creation method, simply declare an <strong>{{ID3D11CommandList}}</strong> interface, then call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> to record commands or <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong> to play back commands.</p> + + + + <p>Gets the initialization flags associated with the deferred context that created the command list.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + <p>The context flag is reserved for future use and is always 0.</p> + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p> + + + + <p>Sets the constant buffers used by the vertex shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{VSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets a pixel shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p> Set ppClassInstances to <strong>{{NULL}}</strong> if no interfaces are used in the shader. If it is not <strong>{{NULL}}</strong>, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the pixel shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MipLODBias</td><td>0</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor[0]</td><td>1.0f</td></tr> <tr><td>BorderColor[1]</td><td>1.0f</td></tr> <tr><td>BorderColor[2]</td><td>1.0f</td></tr> <tr><td>BorderColor[3]</td><td>1.0f</td></tr> <tr><td>MinLOD</td><td>-{{FLT_MAX}}</td></tr> <tr><td>MaxLOD</td><td>{{FLT_MAX}}</td></tr> </table><p>?</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Set a vertex shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Draw indexed, non-instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>If the sum of both indices is negative, the result of the function call is undefined.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, non-instanced primitives.</p> + <p><strong>Draw</strong> submits work to the rendering pipeline.</p><p>The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline.</p><p>Even without any vertex buffer bound to the pipeline, you can generate your own vertex data in your vertex shader by using the <strong>{{SV_VertexID}}</strong> system-value semantic to determine the current vertex that the runtime is processing.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Index of the first vertex, which is usually an offset in a vertex buffer.</p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Invalidate the reference to a resource and reenable the {{GPU}}'s access to that resource.</p> + <p> For info about how to use <strong>Unmap</strong>, see How to: Use dynamic resources. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{ID3D11Resource}}</strong> interface. </p> </dd> + + + <dd> <p>A subresource to be unmapped.</p> </dd> + + + + + <p> Sets the constant buffers used by the pixel shader pipeline stage. </p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an input-layout object to the input-assembler stage.</p> + <p>Input-layout objects describe how vertex buffer data is streamed into the {{IA}} pipeline stage. To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p> Bind an array of vertex buffers to the input-assembler stage. </p> + <p> For info about creating vertex buffers, see How to: Create a Vertex Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (that is, bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer can't be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an index buffer to the input-assembler stage.</p> + <p> For information about creating index buffers, see How to: Create an Index Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p> The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. </p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> object, that contains indices. The index buffer must have been created with the <strong>{{D3D11_BIND_INDEX_BUFFER}}</strong> flag. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers. </p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer to the first index to use.</p> </dd> + + + + + <p>Draw indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors.</p><p>The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}).</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>Index of the first vertex.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Sets the constant buffers used by the geometry shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>You can't use the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface to get information about what is currently bound to the pipeline in the device context. But you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> to get information from a compiled shader. For example, you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> and <strong>{{ID3D11ShaderReflectionVariable}}</strong> to determine the slot in which a geometry shader expects a constant buffer. You can then pass this slot number to <strong>{{GSSetConstantBuffers}}</strong> to set the constant buffer. You can call the <strong>{{D3D11Reflect}}</strong> function to retrieve the address of a reference to the <strong>{{ID3D11ShaderReflection}}</strong> interface and then call <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong> to get a reference to <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{GSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Set a geometry shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p>Bind an array of shader resources to the vertex-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the vertex shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Mark the beginning of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::End}}</strong> to mark the ending of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Mark the end of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::Begin}}</strong> to mark the beginning of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Get data from the graphics processing unit ({{GPU}}) asynchronously.</p> + <p>Queries in a deferred context are limited to predicated drawing. That is, you cannot call <strong>{{ID3D11DeviceContext::GetData}}</strong> on a deferred context to get data about a query; you can only call <strong>GetData</strong> on the immediate context to get data about a query. For predicated drawing, the results of a predication-type query are used by the {{GPU}} and not returned to an application. For more information about predication and predicated drawing, see <strong>{{D3D11DeviceContext::SetPredication}}</strong>.</p><p><strong>GetData</strong> retrieves the data that the runtime collected between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. Certain queries only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> in which case the data returned by <strong>GetData</strong> is accurate up to the last call to <strong>{{ID3D11DeviceContext::End}}</strong>. For information about the queries that only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> and about the type of data that <strong>GetData</strong> retrieves for each query, see <strong>{{D3D11_QUERY}}</strong>.</p><p>If <em>DataSize</em> is 0, <strong>GetData</strong> is only used to check status.</p><p>An application gathers counter data by calling <strong>{{ID3D11DeviceContext::Begin}}</strong>, issuing some graphics commands, calling <strong>{{ID3D11DeviceContext::End}}</strong>, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the <strong>Begin</strong> and <strong>End</strong> calls. For information about performance counter types, see <strong>{{D3D11_COUNTER}}</strong>. </p> + <p>This method returns one of the Direct3D 11 Return Codes. A return value of {{S_OK}} indicates that the data at <em>pData</em> is available for the calling application to access. A return value of {{S_FALSE}} indicates that the data is not yet available. If the data is not yet available, the application must call <strong>GetData</strong> until the data is available.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface for the object about which <strong>GetData</strong> retrieves data.</p> </dd> + + + <dd> <p>Address of memory that will receive the data. If <strong>{{NULL}}</strong>, <strong>GetData</strong> will be used only to check status. The type of data output depends on the type of asynchronous interface.</p> </dd> + + + <dd> <p>Size of the data to retrieve or 0. Must be 0 when <em>pData</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Optional flags. Can be 0 or any combination of the flags enumerated by <strong>{{D3D11_ASYNC_GETDATA_FLAG}}</strong>.</p> </dd> + + + + + <p>Set a rendering predicate.</p> + <p>The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> are invalid.</p><p>Use this method to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting predicate data of the predicate is equal to the <em>PredicateValue</em>. However, some predicates are only hints, so they may not actually prevent operations from being performed. </p><p>The primary usefulness of predication is to allow an application to issue rendering and resource manipulation commands without taking the performance hit of spinning, waiting for <strong>{{ID3D11DeviceContext::GetData}}</strong> to return. So, predication can occur while <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. Another way to think of it: an application can also use predication as a fallback, if it is possible that <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. If <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_OK}}</strong>, the application can skip calling the rendering and resource manipulation commands manually with it's own application logic.</p><p>Rendering and resource manipulation commands for Direct3D?11 include these Draw, Dispatch, Copy, Update, Clear, Generate, and Resolve operations.</p><ul> <li> <strong>Draw</strong> </li> <li> <strong>DrawAuto</strong> </li> <li> <strong>DrawIndexed</strong> </li> <li> <strong>DrawIndexedInstanced</strong> </li> <li> <strong>DrawIndexedInstancedIndirect</strong> </li> <li> <strong>DrawInstanced</strong> </li> <li> <strong>DrawInstancedIndirect</strong> </li> <li> <strong>Dispatch</strong> </li> <li> <strong>DispatchIndirect</strong> </li> <li> <strong>CopyResource</strong> </li> <li> <strong>CopyStructureCount</strong> </li> <li> <strong>CopySubresourceRegion</strong> </li> <li> <strong>CopySubresourceRegion1</strong> </li> <li> <strong>CopyTiles</strong> </li> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateSubresource</strong> </li> <li> <strong>UpdateSubresource1</strong> </li> <li> <strong>UpdateTiles</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> <li> <strong>ClearRenderTargetView</strong> </li> <li> <strong>ClearUnorderedAccessViewFloat</strong> </li> <li> <strong>ClearUnorderedAccessViewUint</strong> </li> <li> <strong>ClearView</strong> </li> <li> <strong>ClearDepthStencilView</strong> </li> <li> <strong>GenerateMips</strong> </li> <li> <strong>ResolveSubresource</strong> </li> </ul><p>You can set a rendering predicate on an immediate or a deferred context. For info about immediate and deferred contexts, see Immediate and Deferred Rendering. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Predicate}}</strong> interface that represents the rendering predicate. A <strong>{{NULL}}</strong> value indicates "no" predication; in this case, the value of <em>PredicateValue</em> is irrelevant but will be preserved for <strong>{{ID3D11DeviceContext::GetPredication}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, rendering will be affected by when the predicate's conditions are met. If <strong>{{FALSE}}</strong>, rendering will be affected when the conditions are not met.</p> </dd> + + + + + <p>Bind an array of shader resources to the geometry shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the geometry shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.</p> + <p>The maximum number of active render targets a device can have active at any given time is set by a #define in {{D3D11}}.h called <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to <strong>{{NULL}}</strong>.</p><p>If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to <strong>{{NULL}}</strong>, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>If the render-target views were created from an array resource type, all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.</p><p>The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.</p><p>Any combination of the eight slots for render targets can have a render target set or not set.</p><p>The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.</p> + <p>Returns nothing.</p> + + + + <p>Binds resources to the output-merger stage.</p> + <p> For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that {{UAVs}} must be given an offset so that they are placed in the slots after the render target views that are being bound. </p><strong>Note</strong>??{{RTVs}}, {{DSV}}, and {{UAVs}} cannot be set independently; they all need to be set at the same time.?<p>Two {{RTVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>Two {{UAVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>An {{RTV}} conflicts with a {{UAV}} if they share a subresource or share a bind point.</p><p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> operates properly in the following situations: </p><ol> <li> <p><em>NumRTVs</em> != {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} and <em>NumUAVs</em> != {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li><em>{{UAVStartSlot}}</em> &gt;= <em>NumRTVs</em></li> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in the set of all <em>ppRenderTargetViews</em> and <em>ppUnorderedAccessViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> performs the following tasks: </p> <ul> <li>Unbinds all currently bound conflicting resources (stream-output target resources ({{SOTargets}}), compute shader ({{CS}}) {{UAVs}}, shader-resource views ({{SRVs}})).</li> <li> Binds <em>ppRenderTargetViews</em>, <em>ppDepthStencilView</em>, and <em>ppUnorderedAccessViews</em>. </li> </ul> </li> <li> <p><em>NumRTVs</em> == {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{UAVs}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppUnorderedAccessViews</em>. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{RTVs}} in slots &gt;= <em>{{UAVStartSlot}}</em></li> <li> All {{RTVs}} that conflict with any {{UAVs}} in <em>ppUnorderedAccessViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppUnorderedAccessViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppUnorderedAccessViews</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>ppDepthStencilView</em>, and the current depth-stencil view remains bound. </p> </li> <li> <p><em>NumUAVs</em> == {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{RTVs}} and {{DSV}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppRenderTargetViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{UAVs}} in slots &lt; <em>NumRTVs</em></li> <li> All {{UAVs}} that conflict with any {{RTVs}} in <em>ppRenderTargetViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppRenderTargetViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppRenderTargetViews</em> and <em>ppDepthStencilView</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>{{UAVStartSlot}}</em>. </p> </li> </ol><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of render targets to bind (ranges between 0 and <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>). If this parameter is nonzero, the number of entries in the array to which <em>ppRenderTargetViews</em> points must equal the number in this parameter. If you set <em>NumRTVs</em> to {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} (0xffffffff), this method does not modify the currently bound render-target views ({{RTVs}}) and also does not modify depth-stencil view ({{DSV}}). </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s that represent the render targets to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumRTVs</em> is 0, no render targets are bound. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong> that represents the depth-stencil view to bind to the device. If this parameter is <strong>{{NULL}}</strong>, the depth-stencil state is not bound. </p> </dd> + + + <dd> <p>Index into a zero-based array to begin setting unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1).</p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1. {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64. </p> <p> For pixel shaders, <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views being bound. </p> </dd> + + + <dd> <p> Number of unordered-access views ({{UAVs}}) in <em>ppUnorderedAccessViews</em>. If you set <em>NumUAVs</em> to {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} (0xffffffff), this method does not modify the currently bound unordered-access views. </p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s that represent the unordered-access views to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumUAVs</em> is 0, no unordered-access views are bound. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is relevant only for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Sets the depth-stencil state of the output-merger stage.</p> + <p>To create a depth-stencil state interface, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to bind to the device. Set this to <strong>{{NULL}}</strong> to use the default state listed in <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>.</p> </dd> + + + <dd> <p>Reference value to perform against when doing a depth-stencil test. See remarks.</p> </dd> + + + + + <p>Set the target output buffers for the stream-output stage of the pipeline.</p> + <p>An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.</p><p> Calling this method using a buffer that is currently bound for writing will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> The array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to bind to the device. The buffers must have been created with the <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong> flag. </p> </dd> + + + <dd> <p> Array of offsets to the output buffers from <em>ppSOTargets</em>, one offset for each buffer. The offset values must be in bytes. </p> </dd> + + + + + <p>Draw geometry of an unknown size.</p> + <p>A draw {{API}} submits work to the rendering pipeline. This {{API}} submits work of an unknown size that was processed by the input assembler, vertex shader, and stream-output stages; the work may or may not have gone through the geometry-shader stage.</p><p>After data has been streamed out to stream-output stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the {{SO}} stage buffers is maintained internally when the data is streamed out. This means that the {{CPU}} does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the {{SO}} stage buffers so that the layouts are available when the buffers are again bound to the input assembler.</p><p>The following diagram shows the DrawAuto process.</p><p></p><p>Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.</p><p>DrawAuto only works when drawing with one input buffer bound as an input to the {{IA}} stage at slot 0. Applications must create the {{SO}} buffer resource with both binding flags, <strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong> and <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong>.</p><p>This {{API}} does not support indexing or instancing.</p><p>If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using <strong>{{D3D11_QUERY_SO_STATISTICS}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Draw indexed, instanced, {{GPU}}-generated primitives.</p> + <p> When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives. </p> </dd> + + + <dd> <p> Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives. </p> </dd> + + + + + <p>Draw instanced, {{GPU}}-generated primitives.</p> + <p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives.</p> </dd> + + + <dd> <p>Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives.</p> </dd> + + + + + <p>Execute a command list from a thread group.</p> + <p>You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z).</p><p>In the following illustration, assume a thread group with 50 threads where the size of the group is given by (5,5,2). A single thread is identified from a thread group with 50 threads in it, using the vector (4,1,1).</p><p></p><p>The following illustration shows the relationship between the parameters passed to <strong>{{ID3D11DeviceContext::Dispatch}}</strong>, Dispatch(5,3,2), the values specified in the numthreads attribute, numthreads(10,8,3), and values that will passed to the compute shader for the thread-related system values +({{SV_GroupIndex}},{{SV_DispatchThreadID}},{{SV_GroupThreadID}},{{SV_GroupID}}).</p><p></p> + <p>Returns nothing.</p> + + + <dd> <p>The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1.</p> </dd> + + + + + <p>Execute a command list over one or more thread groups.</p> + <p>You call the <strong>DispatchIndirect</strong> method to execute commands in a compute shader.</p><p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which must be loaded with data that matches the argument list for <strong>{{ID3D11DeviceContext::Dispatch}}</strong>.</p> </dd> + + + <dd> <p>A byte-aligned offset between the start of the buffer and the arguments.</p> </dd> + + + + + <p>Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline.</p> + <p>To create a rasterizer state interface, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + + <p>Bind an array of viewports to the rasterizer stage of the pipeline.</p> + <p>All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.</p><p>Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p>Returns nothing.</p> + + + <dd> <p>Number of viewports to bind.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_VIEWPORT}}</strong> structures to bind to the device. See the structure page for details about how the viewport size is dependent on the device feature level which has changed between Direct3D 11 and Direct3D 10.</p> </dd> + + + + + <p>Bind an array of scissor rectangles to the rasterizer stage.</p> + <p>All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.</p><p> The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>). </p><p>Which scissor rectangle to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the {{SV_ViewportArrayIndex}} semantic then Direct3D will use the first scissor rectangle in the array.</p><p> Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong>). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of scissor rectangles to bind.</p> </dd> + + + <dd> <p> An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). </p> </dd> + + + + + <p>Copy a region from a source resource to a destination resource.</p> + <p>The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopySubresourceRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopySubresourceRegion</strong> call. Invalid parameters to <strong>CopySubresourceRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device.</p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. <strong>{{D3D11CalcSubresource}}</strong> is a helper function for calculating subresource indexes.</p><p><strong>CopySubresourceRegion</strong> performs the copy on the {{GPU}} (similar to a memcpy by the {{CPU}}). As a consequence, the source and destination resources:</p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must be the same type.</li> <li>Must have compatible {{DXGI}} formats (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopySubresourceRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>May not be currently mapped.</li> </ul><p><strong>CopySubresourceRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopySubresourceRegion</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p> If your app needs to copy an entire resource, we recommend to use <strong>{{ID3D11DeviceContext::CopyResource}}</strong> instead. </p><p><strong>CopySubresourceRegion</strong> is an asynchronous call, which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. For more information about pipeline stalls, see performance considerations.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> or <strong>CopySubresourceRegion</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> You can't use <strong>CopySubresourceRegion</strong> to copy mipmapped volume textures.?<strong>Note</strong>??<strong>Applies only to feature levels 9_x</strong> Subresources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopySubresourceRegion</strong>.?<strong>Note</strong>??If you use <strong>CopySubresourceRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box (see <strong>{{D3D11_BOX}}</strong>) that defines the source subresource that can be copied. If <strong>{{NULL}}</strong>, the entire source subresource is copied. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion</strong> doesn't perform a copy operation.</p> </dd> + + + + + <p>Copy the entire contents of the source resource to the destination resource using the {{GPU}}. </p> + <p>This method is unusual in that it causes the {{GPU}} to perform the copy operation (similar to a memcpy by the {{CPU}}). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:</p><ul> <li>Must be different resources.</li> <li>Must be the same type.</li> <li>Must have identical dimensions (including width, height, depth, and size as appropriate).</li> <li>Must have compatible {{DXGI}} formats, which means the formats must be identical or at least from the same type group. For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyResource</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>Can't be currently mapped.</li> </ul><p><strong>CopyResource</strong> only supports copy; it doesn't support any stretch, color key, or blend. <strong>CopyResource</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p>You can't use an <strong>Immutable</strong> resource as a destination. You can use a <strong>depth-stencil</strong> resource as either a source or a destination provided that the feature level is {{D3D_FEATURE_LEVEL_10_1}} or greater. For feature levels 9_x, resources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopyResource</strong>. Resources created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled, the call to <strong>{{ID3D11DeviceContext::CopyResource}}</strong> fails. Use <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve a multisampled resource to a resource that is not multisampled.</p><p>The method is an asynchronous call, which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. For more info, see performance considerations.</p><p>We recommend to use <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> instead if you only need to copy a portion of the data in a resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the destination resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the source resource.</p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>For a shader-constant buffer; set <em>pDstBox</em> to <strong>{{NULL}}</strong>. It is not possible to use this method to partially update a shader-constant buffer.</p><p>A resource cannot be used as a destination if:</p><ul> <li>the resource is created with <strong>immutable</strong> or <strong>dynamic</strong> usage.</li> <li>the resource is created as a depth-stencil resource.</li> <li>the resource is created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>).</li> </ul><p>When <strong>UpdateSubresource</strong> returns, the application is free to change or even free the data pointed to by <em>pSrcData</em> because the method has already copied/snapped away the original contents.</p><p>The performance of <strong>UpdateSubresource</strong> depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a <strong>Draw</strong> call and later calls <strong>UpdateSubresource</strong> on the same vertex buffer before the <strong>Draw</strong> call is actually executed by the {{GPU}}.</p><ul> <li>When there is contention for the resource, <strong>UpdateSubresource</strong> will perform 2 copies of the source data. First, the data is copied by the {{CPU}} to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the {{GPU}} to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by {{GPU}} when the command buffer is flushed.</li> <li>When there is no resource contention, the behavior of <strong>UpdateSubresource</strong> is dependent on which is faster (from the {{CPU}}'s perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the {{CPU}} copy the data to the final resource location. This is dependent on the architecture of the underlying system.</li> </ul><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<p>To better understand the source row pitch and source depth pitch parameters, the following illustration shows a 3D volume texture.</p><p></p><p>Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is {{DXGI_FORMAT_R32G32B32A32_FLOAT}}, the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.</p><p>To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:</p><ul> <li>Source Row Pitch = [size of one element in bytes] * [number of elements in one row]</li> <li>Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]</li> </ul><p>In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:</p><ul> <li>Source Row Pitch = 16 * 2 = 32</li> <li>Source Depth Pitch = 16 * 2 * 3 = 96</li> </ul><p>The following illustration shows the resource as it is laid out in memory.</p><p></p><p>For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by <em>pData</em> to [(120,100)..(200,220)] in the destination texture. Also assume that <em>rowPitch</em> has been initialized with the proper value (as explained above). <strong>front</strong> and <strong>back</strong> are set to 0 and 1 respectively, because by having <strong>front</strong> equal to <strong>back</strong>, the box is technically empty.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 100; +destRegion.bottom = 220; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 0; +destRegion.bottom = 1; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>For info about various resource types and how <strong>UpdateSubresource</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D11_BOX}}</strong>).</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + + + <p>Copies data from a buffer holding variable length data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to <strong>{{ID3D11Buffer}}</strong>. This can be any buffer resource that other copy commands, such as <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>, are able to write to.</p> </dd> + + + <dd> <p>Offset from the start of <em>pDstBuffer</em> to write 32-bit {{UINT}} structure (vertex) count from <em>pSrcView</em>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> of a Structured Buffer resource created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created. These types of resources have hidden counters tracking "how many" records have been written.</p> </dd> + + + + + <p>Set all the elements in a render target to one value.</p> + <p>Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p><p>When using <strong>{{D3D_FEATURE_LEVEL_9_x}}</strong>, <strong>ClearRenderTargetView</strong> only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the render target.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to fill the render target with.</p> </dd> + + + + + <p>Clears an unordered access resource with bit-precise values.</p> + <p>This {{API}} copies the lower ni bits from each array element i to the corresponding channel, where ni is the number of bits in the ith channel of the resource format (for example, {{R8G8B8_FLOAT}} has 8 bits for the first 3 channels). This works on any {{UAV}} with no format conversion. For a raw or structured buffer view, only the first array element value is used.</p> + <p>Returns nothing.</p> + + + + <p>Clears an unordered access resource with a float value.</p> + <p>This {{API}} works on {{FLOAT}}, {{UNORM}}, and {{SNORM}} unordered access views ({{UAVs}}), with format conversion from {{FLOAT}} to *{{NORM}} where appropriate. On other {{UAVs}}, the operation is invalid and the call will not reach the driver.</p> + <p>Returns nothing.</p> + + + + <p>Clears the depth-stencil resource.</p> + <table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the depth stencil to be cleared.</p> </dd> + + + <dd> <p>Identify the type of data to clear (see <strong>{{D3D11_CLEAR_FLAG}}</strong>).</p> </dd> + + + <dd> <p>Clear the depth buffer with this value. This value will be clamped between 0 and 1.</p> </dd> + + + <dd> <p>Clear the stencil buffer with this value.</p> </dd> + + + + + <p>Generates mipmaps for the given shader resource.</p> + <p>You can call <strong>GenerateMips</strong> on any shader-resource view to generate the lower mipmap levels for the shader resource. <strong>GenerateMips</strong> uses the largest mipmap level of the view to recursively generate the lower levels of the mip and stops with the smallest level that is specified by the view. If the base resource wasn't created with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong>, and <strong>{{D3D11_RESOURCE_MISC_GENERATE_MIPS}}</strong>, the call to <strong>GenerateMips</strong> has no effect.</p><p>Feature levels 9.1, 9.2, and 9.3 can't support automatic generation of mipmaps for 3D (volume) textures.</p><p>Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:</p><pre> {{DXGI_FORMAT_R8G8B8A8_UNORM}} +{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B5G6R5_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B8G8R8X8_UNORM}} +{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}} +</pre><p>Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:</p><pre> {{DXGI_FORMAT_R16G16B16A16_FLOAT}} +{{DXGI_FORMAT_R16G16B16A16_UNORM}} +{{DXGI_FORMAT_R16G16_FLOAT}} +{{DXGI_FORMAT_R16G16_UNORM}} +{{DXGI_FORMAT_R32_FLOAT}} +</pre><p>Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:</p><pre> {{DXGI_FORMAT_R32G32B32A32_FLOAT}} +{{DXGI_FORMAT_B4G4R4A4}} (optional) +</pre><p>Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:</p><pre> {{DXGI_FORMAT_R32G32B32_FLOAT}} (optional) +{{DXGI_FORMAT_R16G16B16A16_SNORM}} +{{DXGI_FORMAT_R32G32_FLOAT}} +{{DXGI_FORMAT_R10G10B10A2_UNORM}} +{{DXGI_FORMAT_R11G11B10_FLOAT}} +{{DXGI_FORMAT_R8G8B8A8_SNORM}} +{{DXGI_FORMAT_R16G16_SNORM}} +{{DXGI_FORMAT_R8G8_UNORM}} +{{DXGI_FORMAT_R8G8_SNORM}} +{{DXGI_FORMAT_R16_FLOAT}} +{{DXGI_FORMAT_R16_UNORM}} +{{DXGI_FORMAT_R16_SNORM}} +{{DXGI_FORMAT_R8_UNORM}} +{{DXGI_FORMAT_R8_SNORM}} +{{DXGI_FORMAT_A8_UNORM}} +{{DXGI_FORMAT_B5G5R5A1_UNORM}} (optional) +</pre><p>For all other unsupported formats, <strong>GenerateMips</strong> will silently fail.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11ShaderResourceView}}</strong> interface that represents the shader resource.</p> </dd> + + + + + <p>Sets the minimum level-of-detail ({{LOD}}) for a resource.</p> + <p>To use a resource with <strong>SetResourceMinLOD</strong>, you must set the <strong>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}}</strong> flag when you create that resource.</p><p>For Direct3D 10 and Direct3D 10.1, when sampling from a texture resource in a shader, the sampler can define a minimum {{LOD}} clamp to force sampling from less detailed mip levels. For Direct3D 11, this functionality is extended from the sampler to the entire resource. Therefore, the application can specify the highest-resolution mip level of a resource that is available for access. This restricts the set of mip levels that are required to be resident in {{GPU}} memory, thereby saving memory.</p><p>The set of mip levels resident per-resource in {{GPU}} memory can be specified by the user.</p><p>Minimum {{LOD}} affects all of the resident mip levels. Therefore, only the resident mip levels can be updated and read from.</p><p>All methods that access texture resources must adhere to minimum {{LOD}} clamps.</p><p>Empty-set accesses are handled as out-of-bounds cases.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> that represents the resource.</p> </dd> + + + <dd> <p>The level-of-detail, which ranges between 0 and the maximum number of mipmap levels of the resource. For example, the maximum number of mipmap levels of a 1D texture is specified in the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE1D_DESC}}</strong> structure.</p> </dd> + + + + + <p>Gets the minimum level-of-detail ({{LOD}}).</p> + <p>Returns the minimum {{LOD}}.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> which represents the resource.</p> </dd> + + + + + <p>Copy a multisampled resource into a non-multisampled resource.</p> + <p>This {{API}} is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.</p><p>The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this:</p><table> <tr><th>Scenario</th><th>Requirements</th></tr> <tr><td>Source and destination are prestructured and typed</td><td>Both the source and destination must have identical formats and that format must be specified in the Format parameter.</td></tr> <tr><td>One resource is prestructured and typed and the other is prestructured and typeless</td><td>The typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is {{DXGI_FORMAT_R32_FLOAT}} and the typeless resource is {{DXGI_FORMAT_R32_TYPELESS}}). The format of the typed resource must be specified in the Format parameter.</td></tr> <tr><td>Source and destination are prestructured and typeless</td><td>Both the source and desintation must have the same typeless format (i.e. both must have {{DXGI_FORMAT_R32_TYPELESS}}), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are {{DXGI_FORMAT_R32_TYPELESS}} then {{DXGI_FORMAT_R32_FLOAT}} could be specified in the Format parameter). <p>For example, given the {{DXGI_FORMAT_R16G16B16A16_TYPELESS}} format:</p> <ul> <li>The source (or dest) format could be {{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>The dest (or source) format could be {{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D11Resource}}</strong>.</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. Use <strong>{{D3D11CalcSubresource}}</strong> to calculate the index.</p> </dd> + + + <dd> <p>Source resource. Must be multisampled.</p> </dd> + + + <dd> <p>The source subresource of the source resource.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.</p> </dd> + + + + + <p>Queues commands from a command list onto a device.</p> + <p>Use this method to play back a command list that was recorded by a deferred context on any thread.</p><p> A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto the immediate context is required for the recorded commands to be executed on the graphics processing unit ({{GPU}}). A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto another deferred context can be used to merge recorded lists. But to run the commands from the merged deferred command list on the {{GPU}}, you need to execute them on the immediate context. </p><p> This method performs some runtime validation related to queries. Queries that are begun in a device context cannot be manipulated indirectly by executing a command list (that is, Begin or End was invoked against the same query by the deferred context which generated the command list). If such a condition occurs, the ExecuteCommandList method does not execute the command list. However, the state of the device context is still maintained, as would be expected (<strong>{{ID3D11DeviceContext::ClearState}}</strong> is performed, unless the application indicates to preserve the device context state). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11CommandList}}</strong> interface that encapsulates a command list. </p> </dd> + + + <dd> <p> A Boolean flag that determines whether the target context state is saved prior to and restored after the execution of a command list. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that no state shall be saved or restored, which causes the target context to return to its default state after the command list executes. Applications should typically use <strong>{{FALSE}}</strong> unless they will restore the state to be nearly equivalent to the state that the runtime would restore if <strong>{{TRUE}}</strong> were passed. When applications use <strong>{{FALSE}}</strong>, they can avoid unnecessary and inefficient state transitions. </p> </dd> + + + + + <p>Bind an array of shader resources to the hull-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set a hull shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a hull shader (see <strong>{{ID3D11HullShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the hull-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set the constant buffers used by the hull-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{HSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an array of shader resources to the domain-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set a domain shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the domain-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the domain-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{DSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the compute-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets an array of views for an unordered resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index of the first element in the zero-based array to begin setting (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1). {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64.</p> </dd> + + + <dd> <p> Number of views to set (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D11UnorderedAccessView}}</strong> references to be set by the method. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is only relevant for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set a compute shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a compute shader (see <strong>{{ID3D11ComputeShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the compute-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre>//Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the compute-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{CSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Get the constant buffers used by the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p> Get the pixel shader currently set on the device. </p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed, to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns nothing. </p> + + + <dd> <p> Address of a reference to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>) to be returned by the method. </p> </dd> + + + <dd> <p> Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). </p> </dd> + + + <dd> <p> The number of class-instance elements in the array. </p> </dd> + + + + + <p>Get an array of sampler states from the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the vertex shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get the constant buffers used by the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get a reference to the input-layout object that is bound to the input-assembler stage.</p> + <p>For information about creating an input-layout object, see Creating the Input-Layout Object.</p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p>Get the vertex buffers bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>The input slot of the first vertex buffer to get. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to {{D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT}} - 1) are available; the maximum number of input slots depends on the feature level.</p> </dd> + + + <dd> <p>The number of vertex buffers to get starting at the offset. The number of buffers (plus the starting slot) cannot exceed the total number of {{IA}}-stage input slots.</p> </dd> + + + <dd> <p>A reference to an array of vertex buffers returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Pointer to an array of stride values returned by the method; one stride value for each buffer in the vertex-buffer array. Each stride value is the size (in bytes) of the elements that are to be used from that vertex buffer.</p> </dd> + + + <dd> <p>Pointer to an array of offset values returned by the method; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.</p> </dd> + + + + + <p>Get a reference to the index buffer that is bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an index buffer returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Specifies format of the data in the index buffer (see <strong>{{DXGI_FORMAT}}</strong>). These formats provide the size and type of the data in the buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers.</p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer, to the first index to use.</p> </dd> + + + + + <p>Get the constant buffers used by the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the geometry shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the type of primitive, and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>).</p> </dd> + + + + + <p>Get the vertex shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler states from the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the rendering predicate state.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>). Value stored here will be <strong>{{NULL}}</strong> upon device creation.</p> </dd> + + + <dd> <p>Address of a boolean to fill with the predicate comparison value. <strong>{{FALSE}}</strong> upon device creation.</p> </dd> + + + + + <p>Get the geometry shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of render targets to retrieve.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s which represent render target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of a render target is not needed. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not needed.</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>The number of render-target views to retrieve.</p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s, which represent render-target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of render-target views is not required. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not required. </p> </dd> + + + <dd> <p> Index into a zero-based array to begin retrieving unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1). For pixel shaders <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views that are bound. </p> </dd> + + + <dd> <p> Number of unordered-access views to return in <em>ppUnorderedAccessViews</em>. This number ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s, which represent unordered-access views that are retrieved. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of unordered-access views is not required. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Gets the depth-stencil state of the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Address of a reference to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to be filled with information from the device. </p> </dd> + + + <dd> <p>Pointer to the stencil reference value used in the depth-stencil test.</p> </dd> + + + + + <p>Get the target output buffers for the stream-output stage of the pipeline.</p> + <p>A maximum of four output buffers can be retrieved.</p><p> The offsets to the output buffers pointed to in the returned <em>ppSOTargets</em> array may be assumed to be -1 (append), as defined for use in <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>. </p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of buffers to get.</p> </dd> + + + <dd> <p> An array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to be retrieved from the device. </p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Gets the array of viewports bound to the rasterizer stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a variable that, on input, specifies the number of viewports (ranges from 0 to <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong>) in the <em>pViewports</em> array; on output, the variable contains the actual number of viewports that are bound to the rasterizer stage. If <em>pViewports</em> is <strong>{{NULL}}</strong>, <strong>{{RSGetViewports}}</strong> fills the variable with the number of viewports currently bound.</p> <strong>Note</strong>?? In some versions of the Windows {{SDK}}, a debug device will raise an exception if the input value in the variable to which <em>pNumViewports</em> points is greater than <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong> even if <em>pViewports</em> is <strong>{{NULL}}</strong>. The regular runtime ignores the value in the variable to which <em>pNumViewports</em> points when <em>pViewports</em> is <strong>{{NULL}}</strong>. This behavior of a debug device might be corrected in a future release of the Windows {{SDK}}. ? </dd> + + + <dd> <p> An array of <strong>{{D3D11_VIEWPORT}}</strong> structures for the viewports that are bound to the rasterizer stage. If the number of viewports (in the variable to which <em>pNumViewports</em> points) is greater than the actual number of viewports currently bound, unused elements of the array contain 0. For info about how the viewport size depends on the device feature level, which has changed between Direct3D 11 and Direct3D 10, see <strong>{{D3D11_VIEWPORT}}</strong>. </p> </dd> + + + + + <p>Get the array of scissor rectangles bound to the rasterizer stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>The number of scissor rectangles (ranges between 0 and {{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}) bound; set <em>pRects</em> to <strong>{{NULL}}</strong> to use <em>pNumRects</em> to see how many rectangles would be returned.</p> </dd> + + + <dd> <p>An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). If NumRects is greater than the number of scissor rects currently bound, then unused members of the array will contain 0.</p> </dd> + + + + + <p>Get the hull-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the hull shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a hull shader (see <strong>{{ID3D11HullShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the constant buffers used by the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the domain-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the domain shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the compute-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Gets an array of views for an unordered resource.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index of the first element in the zero-based array to return (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of views to get (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>A reference to an array of interface references (see <strong>{{ID3D11UnorderedAccessView}}</strong>) to get.</p> </dd> + + + + + <p>Get the compute shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a Compute shader (see <strong>{{ID3D11ComputeShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Restore all default settings.</p> + <p>This method resets any device context to the default settings. This sets all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to <strong>{{NULL}}</strong>. The primitive topology is set to {{UNDEFINED}}.</p><p>For a scenario where you would like to clear a list of commands recorded so far, call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> and throw away the resulting <strong>{{ID3D11CommandList}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}).</p> + <p>Most applications don't need to call this method. If an application calls this method when not necessary, it incurs a performance penalty. Each call to <strong>Flush</strong> incurs a significant amount of overhead.</p><p>When Microsoft Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. <strong>Flush</strong> sends those commands to the {{GPU}} for processing. Typically, the Direct3D runtime sends these commands to the {{GPU}} automatically whenever the runtime determines that they need to be sent, such as when the command buffer is full or when an application maps a resource. <strong>Flush</strong> sends the commands manually.</p><p>We recommend that you use <strong>Flush</strong> when the {{CPU}} waits for an arbitrary amount of time (such as when you call the <strong>Sleep</strong> function).</p><p>Because <strong>Flush</strong> operates asynchronously, it can return either before or after the {{GPU}} finishes executing the queued graphics commands. However, the graphics commands eventually always complete. You can call the <strong>{{ID3D11Device::CreateQuery}}</strong> method with the <strong>{{D3D11_QUERY_EVENT}}</strong> value to create an event query; you can then use that event query in a call to the <strong>{{ID3D11DeviceContext::GetData}}</strong> method to determine when the {{GPU}} is finished processing the graphics commands. +</p><p>Microsoft Direct3D?11 defers the destruction of objects. Therefore, an application can't rely upon objects immediately being destroyed. By calling <strong>Flush</strong>, you destroy any objects whose destruction was deferred. If an application requires synchronous destruction of an object, we recommend that the application release all its references, call <strong>{{ID3D11DeviceContext::ClearState}}</strong>, and then call <strong>Flush</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the type of device context.</p> + <p>A member of <strong>{{D3D11_DEVICE_CONTEXT_TYPE}}</strong> that indicates the type of device context.</p> + + + + <p>Gets the initialization flags associated with the current deferred context.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + + + + <p>Create a command list and record graphics commands into it.</p> + <p> Create a command list from a deferred context and record commands into it by calling <strong>FinishCommandList</strong>. Play back a command list with an immediate context by calling <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p><p> Immediate context state is cleared before and after a command list is executed. A command list has no concept of inheritance. Each call to <strong>FinishCommandList</strong> will record only the state set since any previous call to <strong>FinishCommandList</strong>. </p><p> For example, the state of a device context is its render state or pipeline state. To retrieve device context state, an application can call <strong>{{ID3D11DeviceContext::GetData}}</strong> or <strong>{{ID3D11DeviceContext::GetPredication}}</strong>. </p><p> For more information about how to use <strong>FinishCommandList</strong>, see How to: Record a Command List. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns {{DXGI_ERROR_DEVICE_REMOVED}} if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.</li> <li> Returns {{DXGI_ERROR_INVALID_CALL}} if <strong>FinishCommandList</strong> cannot be called from the current context. See remarks. </li> <li>Returns {{E_OUTOFMEMORY}} if the application has exhausted available memory.</li> </ul> + + + <dd> <p> A Boolean flag that determines whether the runtime saves deferred context state before it executes <strong>FinishCommandList</strong> and restores it afterwards. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that the runtime will not save or restore any state. In this case, the deferred context will return to its default state after the call to <strong>FinishCommandList</strong> completes. For information about default state, see <strong>{{ID3D11DeviceContext::ClearState}}</strong>. Typically, use <strong>{{FALSE}}</strong> unless you restore the state to be nearly equivalent to the state that the runtime would restore if you passed <strong>{{TRUE}}</strong>. When you use <strong>{{FALSE}}</strong>, you can avoid unnecessary and inefficient state transitions. </p> <strong>Note</strong>?? This parameter does not affect the command list that the current call to <strong>FinishCommandList</strong> returns. However, this parameter affects the command list of the next call to <strong>FinishCommandList</strong> on the same deferred context. ? </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11CommandList}}</strong> interface reference is initialized with the recorded command list information. The resulting <strong>{{ID3D11CommandList}}</strong> object is immutable and can only be used with <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p> </dd> + + + + + <p>Represents a hardware-accelerated video decoder for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> + + + + <p>Gets the parameters that were used to create the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that receives a description of the video stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that receives the decoder configuration.</p> </dd> + + + + + <p>Gets a handle to the driver.</p> + <p>The driver handle can be used to configure content protection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the driver.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Queries whether the video processor supports a specified video format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The video format to query, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the capabilities of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure that receives the capabilities.</p> </dd> + + + + + <p>Returns a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + <p>The capabilities defined in the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure are interdependent. Therefore, the driver can support multiple, distinct groups of these capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the group to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the frame-rate conversion capabilities.</p> </dd> + + + + + <p>Gets a list of custom frame rates that a video processor supports.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the frame-rate capability group. To get the maxmum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}} </strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>The zero-based index of the custom rate to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> and check the <strong>CustomRateCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure.</p> <p>This index value is always relative to the capability group specified in the <em>TypeIndex</em> parameter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CUSTOM_RATE}}</strong> structure that receives the custom rate.</p> </dd> + + + + + <p>Gets the range of values for an image filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of image filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER_RANGE}}</strong> structure. The method fills the structure with the range of values for the specified filter.</p> </dd> + + + + + <p>Represents a video processor for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> + + + + <p>Gets the content description that was used to create the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the rate conversion capabilities of the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the rate conversion capabilities.</p> </dd> + + + + + <p>Provides a communication channel with the graphics driver or the Microsoft Direct3D runtime. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateAuthenticatedChannel}}</strong>.</p> + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes.</p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the authenticated channel.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the channel.</p> </dd> + + + + + <p>Represents a cryptographic session. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateCryptoSession}}</strong>.</p> + + + + <p>Gets the type of encryption that is supported by this session.</p> + <p>The application specifies the encryption type when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a {{GUID}} that specifies the encryption type. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets the decoding profile of the session.</p> + <p>The application specifies the profile when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. </p> </dd> + + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>To get the certificate, call <strong>{{ID3D11CryptoSession::GetCertificate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes. </p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the cryptographic session.</p> + <p>You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the session.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video decoding.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video decoder output view. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the input surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorInputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor input view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor output view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + <p>Gets a reference to a decoder buffer.</p> + <p>The graphics driver allocates the buffers that are used for decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call <strong>{{ID3D11VideoContext::ReleaseDecoderBuffer}}</strong> to unlock the surface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>The type of buffer to retrieve, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the size of the buffer, in bytes. </p> </dd> + + + <dd> <p>Receives a reference to the start of the memory buffer. </p> </dd> + + + + + <p>Releases a buffer that was obtained by calling the <strong>{{ID3D11VideoContext::GetDecoderBuffer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Starts a decoding operation to decode a video frame.</p> + <p>After this method is called, call <strong>{{ID3D11VideoContext::SubmitDecoderBuffers}}</strong> to perform decoding operations. When all decoding operations have been executed, call <strong>{{ID3D11VideoContext::DecoderEndFrame}}</strong>. </p><p>Each call to <strong>DecoderBeginFrame</strong> must have a matching call to <strong>DecoderEndFrame</strong>. In most cases you cannot nest <strong>DecoderBeginFrame</strong> calls, but some codecs, such as like {{VC}}-1, can have nested <strong>DecoderBeginFrame</strong> calls for special operations like post processing.</p><p>The following encryption scenarios are supported through the content key:</p><ul> <li>The decoder can choose to not encrypt every frame, for example it may only encrypt the I frames and not encrypt the P/B frames. In these scenario, the decoder will specify pContentKey = {{NULL}} and ContentKeySize = 0 for those frames that it does not encrypt.</li> <li>The decoder can choose to encrypt the compressed buffers using the session key. In this scenario, the decoder will specify a content key containing all zeros.</li> <li>The decoder can choose to encrypt the compressed buffers using a separate content key. In this scenario, the decoder will {{ECB}} encrypt the content key using the session key and pass the encrypted content key.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. <strong>{{D3DERR_WASSTILLDRAWING}}</strong> or <strong>{{E_PENDING}}</strong> is returned if the harware is busy, in which case the decoder should try to make the call again.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. This interface describes the resource that will receive the decoded frame. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> </dd> + + + <dd> <p>The size of the content key that is specified in <em>pContentKey</em>. If <em>pContentKey</em> is {{NULL}}, set <em>ContentKeySize</em> to zero.</p> </dd> + + + <dd> <p>An optional reference to a content key that was used to encrypt the frame data. If no content key was used, set this parameter to <strong>{{NULL}}</strong>. If the caller provides a content key, the caller must use the session key to encrypt the content key.</p> </dd> + + + + + <p>Signals the end of a decoding operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p><p>When using feature levels 9_x, all partially encrypted buffers must use the same EncryptedBlockInfo, and partial encryption cannot be turned off on a per frame basis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Performs an extended function for decoding. This method enables extensions to the basic decoder functionality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_EXTENSION}}</strong> structure that contains data for the function.</p> </dd> + + + + + <p>Sets the target rectangle for the video processor.</p> + <p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor writes to the entire destination surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to apply the target rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the target rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the background color for the video processor.</p> + <p>The video processor uses the background color to fill areas of the target rectangle that do not contain a video image. Areas outside the target rectangle are not affected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the color is specified as a {{YCbCr}} value. Otherwise, the color is specified as an {{RGB}} value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure that specifies the background color.</p> </dd> + + + + + <p>Sets the output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the alpha fill mode for data that the video processor writes to the render target.</p> + <p>To find out which fill modes the device supports, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. If the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL}}</strong> capability, the driver supports all of the fill modes. Otherwise, the <em>AlphaFillMode</em> parameter must be <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>. </p><p>The default fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The alpha fill mode, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>The zero-based index of an input stream. This parameter is used if <em>AlphaFillMode</em> is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>. Otherwise, the parameter is ignored.</p> </dd> + + + + + <p>Sets the amount of downsampling to perform on the output.</p> + <p>Downsampling is sometimes used to reduce the quality of premium content when other forms of content protection are not available. By default, downsampling is disabled.</p><p>If the <em>Enable</em> parameter is <strong>{{TRUE}}</strong>, the driver downsamples the composed image to the specified size, and then scales it back to the size of the target rectangle.</p><p>The width and height of <em>Size</em> must be greater than zero. If the size is larger than the target rectangle, downsampling does not occur.</p><p>To use this feature, the driver must support downsampling, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, downsampling is enabled. Otherwise, downsampling is disabled and the <strong>Size</strong> member is ignored. </p> </dd> + + + <dd> <p>The sampling size.</p> </dd> + + + + + <p>Specifies whether the video processor produces stereo video frames.</p> + <p>By default, the video processor produces mono video frames.</p><p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, stereo output is enabled. Otherwise, the video processor produces mono video frames.</p> </dd> + + + + + <p>Sets a driver-specific video processing state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the current target rectangle for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the target rectangle was explicitly set using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputTargetRect}}</strong> method. Receives the value {{FALSE}} if the target rectangle was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the target rectangle. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the current background color for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the background color is a {{YCbCr}} color, or <strong>{{FALSE}}</strong> if the background color is an {{RGB}} color.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure. The method fills in the structure with the background color.</p> </dd> + + + + + <p>Gets the current output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure. The method fills in the structure with the output color space.</p> </dd> + + + + + <p>Gets the current alpha fill mode for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the alpha fill mode, as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>If the alpha fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>, this parameter receives the zero-based index of an input stream. The input stream provides the alpha values for the alpha fill.</p> </dd> + + + + + <p>Gets the current level of downsampling that is performed by the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if downsampling was explicitly enabled using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong> method. Receives the value <strong>{{FALSE}}</strong> if the downsampling was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the downsampling size. Otherwise, this parameter is ignored.</p> </dd> + + + + + <p>Queries whether the video processor produces stereo video frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo output is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets private state data from the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Specifies whether an input stream on the video processor contains interlaced or progressive frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies the interlacing.</p> </dd> + + + + + <p>Sets the color space for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the rate at which the video processor produces output frames for an input stream.</p> + <p>The standard output rates are normal frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL}}</strong>) and half frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF}}</strong>). In addition, the driver might support custom rates for rate conversion or inverse telecine. To get the list of custom rates, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong>.</p><p>Depending on the output rate, the driver might need to convert the frame rate. If so, the value of <em>RepeatFrame</em> controls whether the driver creates interpolated frames or simply repeats input frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The output rate, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value.</p> </dd> + + + <dd> <p>Specifies how the driver performs frame-rate conversion, if required.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If <em>OutputRate</em> is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, this parameter specifies the exact output rate. Otherwise, this parameter is ignored and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the source rectangle for an input stream on the video processor.</p> + <p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor reads from the entire input surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the destination rectangle for an input stream on the video processor.</p> + <p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p><p>The default destination rectangle is an empty rectangle (0, 0, 0, 0). If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, no data is written from this stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the destination rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the planar alpha for an input stream on the video processor.</p> + <p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALHPA_STREAM}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p><p>Alpha blending is disabled by default. </p><p>For each pixel, the destination color value is computed as follows:</p><p><code>Cd = Cs * (As * Ap * Ae) + Cd * (1.0 - As * Ap * Ae)</code></p><p>where:</p><ul> <li><code>Cd</code> = The color value of the destination pixel</li> <li><code>Cs</code> = The color value of the source pixel</li> <li><code>As</code> = The per-pixel source alpha</li> <li><code>Ap</code> = The planar alpha value</li> <li><code>Ae</code> = The palette-entry alpha value, or 1.0 (see Note)</li> </ul><strong>Note</strong>??Palette-entry alpha values apply only to palettized color formats, and only when the device supports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability. Otherwise, this factor equals 1.0.?<p>The destination alpha value is computed according to the alpha fill mode. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether alpha blending is enabled.</p> </dd> + + + <dd> <p>The planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque). If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use the first 16 entries in the list. Formats with 8 bpp use the first 256 entries.</p><p>If a pixel has a palette index greater than the number of entries, the device treats the pixel as white with opaque alpha. For full-range {{RGB}}, this value is (255, 255, 255, 255); for {{YCbCr}} the value is (255, 235, 128, 128).</p><p>If the driver does not report the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability flag, every palette entry must have an alpha value of 0xFF (opaque). To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of elements in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to an array of palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation. The caller allocates the array.</p> </dd> + + + + + <p>Sets the pixel aspect ratio for an input stream on the video processor.</p> + <p>This function can only be called if the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO}}</strong> capability. If this capability is not set, this function will have no effect.</p><p>Pixel aspect ratios of the form 0/n and n/0 are not valid.</p><p>The default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain valid values. Otherwise, the pixel aspect ratios are unspecified.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the luma key for an input stream on the video processor.</p> + <p>To use this feature, the driver must support luma keying, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>. In addition, if the input format is {{RGB}}, the device must support the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY}}</strong> capability.</p><p>The values of <em>Lower</em> and <em>Upper</em> give the lower and upper bounds of the luma key, using a nominal range of [0...1]. Given a format with <em>n</em> bits per channel, these values are converted to luma values as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>Any pixel whose luma value falls within the upper and lower bounds (inclusive) is treated as transparent.</p><p>For example, if the pixel format uses 8-bit luma, the upper bound is calculated as follows:</p><p><code>{{BYTE}} Y = {{BYTE}}(max(min(1.0, Upper), 0.0) * 255.0)</code></p><p>Note that the value is clamped to the range [0...1] before multiplying by 255.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether luma keying is enabled.</p> </dd> + + + <dd> <p>The lower bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + <dd> <p>The upper bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Enables or disables stereo 3D video for an input stream on the video processor. In addition, this method specifies the layout of the video frames in memory.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether stereo 3D is enabled for this stream. If the value is <strong>{{FALSE}}</strong>, the remaining parameters of this method are ignored.</p> </dd> + + + <dd> <p>Specifies the layout of the two stereo views in memory, as a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the left view. Otherwise, frame 0 contains the right view. </p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> </ul> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the base view. Otherwise, frame 1 contains the base view.</p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> <li>When <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong> is used and the application wants to convert the stereo data to mono, it can either:<ul> <li>Specify the base view as a mono input.</li> <li>Specify both resources and allow the driver to do the conversion from the base view. In this case, <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurface</strong> is considered frame 0 and <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurfaceRight</strong> is considered frame 1.</li> </ul> </li> </ul> </dd> + + + <dd> <p>A flag from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> enumeration, specifying whether one of the views is flipped.</p> </dd> + + + <dd> <p>For <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format, this parameter specifies how to generate the left and right views: </p> <ul> <li>If <em>MonoOffset</em> is positive, the right view is shifted to the right by that many pixels, and the left view is shifted to the left by the same amount. </li> <li>If <em>MonoOffset</em> is negative, the right view is shifted to the left by that many pixels, and the left view is shifted to right by the same amount.</li> </ul> <p>If <em>Format</em> is not <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong>, this parameter must be zero.</p> </dd> + + + + + <p>Enables or disables automatic processing features on the video processor.</p> + <p>By default, the driver might perform certain processing tasks automatically during the video processor blit. This method enables the application to disable these extra video processing features. For example, if you provide your own pixel shader for the video processor, you might want to disable the driver's automatic processing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, automatic processing features are enabled. If <strong>{{FALSE}}</strong>, the driver disables any extra video processing that it might be performing.</p> </dd> + + + + + <p>Enables or disables an image filter for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> <p>To query which filters the driver supports, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to enable the filter.</p> </dd> + + + <dd> <p>The filter level. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored. </p> <p>To find the valid range of levels for a specified filter, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange}}</strong>.</p> </dd> + + + + + <p>Sets a driver-specific state on a video processing stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the format of an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies whether the stream contains interlaced or progressive frames.</p> </dd> + + + + + <p>Gets the color space for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> value that specifies the color space.</p> </dd> + + + + + <p>Gets the rate at which the video processor produces output frames for an input stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value that specifies the output rate.</p> </dd> + + + <dd> <p>Receives a Boolean value that specifies how the driver performs frame-rate conversion, if required. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If the output rate is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, the method fills in this structure with the exact output rate. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the source rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the source rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source rectangle.</p> </dd> + + + + + <p>Gets the destination rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the destination rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the destination rectangle.</p> </dd> + + + + + <p>Gets the planar alpha for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if planar alpha is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque).</p> </dd> + + + + + <p>Gets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use 16 palette entries. Formats with 8 bpp use 256 entries.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of entries in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to a <strong>{{UINT}}</strong> array allocated by the caller. The method fills the array with the palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation.</p> </dd> + + + + + <p>Gets the pixel aspect ratio for an input stream on the video processor. </p> + <p>When the method returns, if <em>*pEnabled</em> is <strong>{{TRUE}}</strong>, the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain the pixel aspect ratios. Otherwise, the default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the pixel aspect ratio is specified. Otherwise, receives the value <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the destination rectangle.</p> </dd> + + + + + <p>Gets the luma key for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if luma keying is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the lower bound for the luma key. The valid range is [0?1]. </p> </dd> + + + <dd> <p>Receives the upper bound for the luma key. The valid range is [0?1]. </p> </dd> + + + + + <p>Gets the stereo 3D format for an input stream on the video processor</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo 3D is enabled for this stream, or <strong>{{FALSE}}</strong> otherwise. If the value is <strong>{{FALSE}}</strong>, ignore the remaining parameters.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value that specifies the layout of the two stereo views in memory.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the left view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the right view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the base view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 1 contains the base view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> value. This value specifies whether one of the views is flipped. +</p> </dd> + + + <dd> <p>Receives the pixel offset used for <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format. This parameter is ignored for other stereo formats.</p> </dd> + + + + + <p>Queries whether automatic processing features of the video processor are enabled.</p> + <p>Automatic processing refers to additional image processing that drivers might have performed on the image data prior to the application receiving the data. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if automatic processing features are enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the image filter settings for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter to query, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value. </p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the image filter is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the filter level.</p> </dd> + + + + + <p>Gets a driver-specific state for a video processing stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Performs a video processing operation on one or more input samples and writes the result to a Direct3D surface.</p> + <p>The maximum value of <em>StreamCount</em> is given in the <strong>MaxStreamStates</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. The maximum number of streams that can be enabled at one time is given in the <strong>MaxInputStreams</strong> member of that structure. </p><p>If the output stereo mode is <strong>{{TRUE}}</strong>:</p><ul> <li>The output view must contain a texture array of two elements.</li> <li>At least one stereo stream must be specified.</li> <li>If multiple input streams are enabled, it is possible that one or more of the input streams may contain mono data.</li> </ul><p>Otherwise:</p><ul> <li>The output view must contain a single element.</li> <li>The stereo format cannot be <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}}</strong> .</li> </ul><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface for the output surface. The output of the video processing operation will be written to this surface.</p> </dd> + + + <dd> <p>The frame number of the output video frame, indexed from zero. </p> </dd> + + + <dd> <p>The number of input streams to process.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}</strong> structures that contain information about the input streams. The caller allocates the array and fills in each structure. The number of elements in the array is given in the <em>StreamCount</em> parameter. </p> </dd> + + + + + <p>Establishes the session key for a cryptographic session. </p> + <p>The key exchange mechanism depends on the type of cryptographic session.</p><p>For {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}), the software decoder generates the secret key, encrypts the secret key by using the public key with {{RSAES}}-{{OAEP}}, and places the cipher text in the <em>pData</em> parameter. The actual size of the buffer for {{RSAES}}-{{OAEP}} is 256 bytes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> byte array, in bytes. </p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. </p> </dd> + + + + + <p>Reads encrypted data from a protected surface. </p> + <p>Not all drivers support this method. To query the driver capabilities, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK}}</strong> flag in the <strong>Caps</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p><p>Some drivers might require a separate key to decrypt the data that is read back. To check for this requirement, call <strong>GetContentProtectionCaps</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY}}</strong> flag. If this flag is present, call <strong>{{ID3D11VideoContext::GetEncryptionBltKey}}</strong> to get the decryption key.</p><p>This method has the following limitations:</p><ul> <li>Reading back sub-rectangles is not supported.</li> <li>Reading back partially encrypted surfaces is not supported.</li> <li>The protected surface must be either an off-screen plain surface or a render target.</li> <li>The destination surface must be a {{D3D11_USAGE_STAGING}} resource.</li> <li>The protected surface cannot be multisampled.</li> <li>Stretching and colorspace conversion are not supported.</li> </ul><p> This function does not honor a {{D3D11}} predicate that may have been set.</p><p> If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the protected surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface that receives the encrypted data. +</p> </dd> + + + <dd> <p>A reference to a buffer that receives the initialization vector ({{IV}}). The caller allocates this buffer, but the driver generates the {{IV}}. </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. When the driver generates the first {{IV}}, it initializes the structure to a random number. For each subsequent {{IV}}, the driver simply increments the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. The application can validate that the same {{IV}} is never used more than once with the same key pair.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Writes encrypted data to a protected surface.</p> + <p>Not all hardware or drivers support this functionality for all cryptographic types. This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT}}</strong> cap is reported.</p><p>This method does not support writing to sub-rectangles of the surface.</p><p>If the hardware and driver support a content key:</p><ul> <li>The data is encrypted by the caller using the content key.</li> <li>The content key is encrypted by the caller using the session key.</li> <li>The encrypted content key is passed to the driver.</li> </ul><p> Otherwise, the data is encrypted by the caller using the session key and {{NULL}} is passed as the content key.</p><p>If the driver and hardware support partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted and which is not. If the entire buffer is encrypted, <em>pEncryptedBlockinfo</em> should be <strong>{{NULL}}</strong>.</p><p>The <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> allows the application to indicate which bytes in the buffer are encrypted. This is specified in bytes, so the application must ensure that the encrypted blocks match the {{GPU}}?s crypto block alignment.</p><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to the surface that contains the source data.</p> </dd> + + + <dd> <p>A reference to the protected surface where the encrypted data is written.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure, or <strong>{{NULL}}</strong>.</p> <p>If the driver supports partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted. If the entire surface is encrypted, set this parameter to <strong>{{NULL}}</strong>. </p> <p>To check whether the driver supports partially encrypted buffers, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION}} +</strong> capabilities flag. If the driver does not support partially encrypted buffers, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains a content encryption key, or <strong>{{NULL}}</strong>. To query whether the driver supports the use of content keys, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY}}</strong> capabilities flag. </p> <p>If the driver supports content keys, use the content key to encrypt the surface. Encrypt the content key using the session key, and place the resulting cipher text in <em>pContentKey</em>. If the driver does not support content keys, use the session key to encrypt the surface and set <em>pContentKey</em> to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the encrypted content key, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the initialization vector ({{IV}}). </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. The caller allocates the structure and generates the {{IV}}. When you generate the first {{IV}}, initialize the structure to a random number. For each subsequent {{IV}}, simply increment the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. This procedure enables the driver to validate that the same {{IV}} is never used more than once with the same key pair.</p> <p>For other encryption types, a different structure might be used, or the encryption might not use an {{IV}}.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Gets a random number that can be used to refresh the session key. </p> + <p>To generate a new session key, perform a bitwise <strong>{{XOR}}</strong> between the previous session key and the random number. The new session key does not take affect until the application calls <strong>{{ID3D11VideoContext::FinishSessionKeyRefresh}}</strong>.</p><p>To query whether the driver supports this method, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> capabilities flag.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pRandomNumber</em> array, in bytes. The size should match the size of the session key.</p> </dd> + + + <dd> <p>A reference to a byte array that receives a random number.</p> </dd> + + + + + <p>Switches to a new session key. </p> + <p>This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> cap is reported.</p><p>Before calling this method, call <strong>{{ID3D11VideoContext::StartSessionKeyRefresh}}</strong>. The <strong>StartSessionKeyRefresh</strong> method gets a random number from the driver, which is used to create a new session key. The new session key does not become active until the application calls <strong>FinishSessionKeyRefresh</strong>. After the application calls <strong>FinishSessionKeyRefresh</strong>, all protected surfaces are encrypted using the new session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + + + <p>Gets the cryptographic key to decrypt the data returned by the <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong> method.</p> + <p>This method applies only when the driver requires a separate content key for the <strong>EncryptionBlt</strong> method. For more information, see the Remarks for <strong>EncryptionBlt</strong>.</p><p>Each time this method is called, the driver generates a new key.</p><p>The <em>KeySize</em> should match the size of the session key.</p><p>The read back key is encrypted by the driver/hardware using the session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Establishes a session key for an authenticated channel. </p> + <p>This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> </dd> + + + <dd> <p>The size of the data in the <em>pData</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. The buffer must contain 256 bytes of data, encrypted using {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}). +</p> </dd> + + + + + <p>Sends a query to an authenticated channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure. The <strong>QueryType</strong> member of the structure specifies the query and defines the meaning of the rest of the array.</p> </dd> + + + <dd> <p>The size of the <em>pOutput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the result of the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure. The meaning of the rest of the array depends on the query.</p> </dd> + + + + + <p>Sends a configuration command to an authenticated channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the command. This buffer always starts with a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure. The <strong>ConfigureType</strong> member of the structure specifies the command and defines the meaning of the rest of the buffer.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_OUTPUT}}</strong> structure that receives the response to the command.</p> </dd> + + + + + <p>Sets the stream rotation for an input stream on the video processor.</p> + <p>This is an optional state and the application should only use it if <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION}}</strong> is reported in <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}.FeatureCaps</strong>.</p><p>The stream source rectangle will be specified in the pre-rotation coordinates (typically landscape) and the stream destination rectangle will be specified in the post-rotation coordinates (typically portrait). The application must update the stream destination rectangle correctly when using a rotation value other than 0? and 180?.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is to be rotated in a clockwise orientation. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream.</p> </dd> + + + + + <p>Gets the stream rotation for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is rotated. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream in a clockwise orientation.</p> </dd> + + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device}}</strong> interface reference.</p><p>If you query an <strong>{{ID3D11Device}}</strong> for <strong>{{ID3D11VideoDevice}}</strong> and the Direct3D?11 device created is using the reference rasterizer or {{WARP}}, or is a hardware device and you are using the Microsoft Basic Display Adapter, <strong>{{E_NOINTERFACE}}</strong> is returned.</p> + + + + <p>Creates a video decoder device for Microsoft Direct3D?11.</p> + <p>This method allocates the necessary decoder buffers. </p><p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream and the decoder profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that specifies the decoder configuration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a video processor device for Microsoft Direct3D?11.</p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>Specifies the frame-rate conversion capabilities for the video processor. The value is a zero-based index that corresponds to the <em>TypeIndex</em> parameter of the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a channel to communicate with the Microsoft Direct3D device or the graphics driver. The channel can be used to send commands and queries for content protection.</p> + <p>If the <em>ChannelType</em> parameter is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, the method creates a channel with the Direct3D device. This type of channel does not support authentication.</p><p>If <em>ChannelType</em> is <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE}}</strong> or <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE}}</strong>, the method creates an authenticated channel with the graphics driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of channel, as a member of the <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a cryptographic session to encrypt video content that is sent to the graphics driver. </p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the cryptographic session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to use. The following {{GUIDs}} are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of key exchange.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_KEY_EXCHANGE_RSAES_OAEP}}</strong></dt> </dl> </td><td> <p>The caller will create the session key, encrypt it with {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}) by using the driver's public key, and pass the session key to the driver.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11CryptoSession}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a resource view for a video decoder, describing the output sample for the decoding operation.</p> + <p>Set the <em>ppVDOVView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the decoder surface. The resource must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. The caller must release the interface. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the input sample for the video processing operation.</p> + <p>Set the <em>ppVPIView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>The surface format is given in the <strong>FourCC</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fails if the video processor does not support this format as an input sample. An app must specify 0 when using 9_1, 9_2, or 9_3 feature levels. </p><p>Resources used for video processor input views must use the following bind flag combinations:</p><ul> <li>Any combination of bind flags that includes <strong>{{D3D11_BIND_DECODER}}</strong>,<strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong>, <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, and <strong>{{D3D11_BIND_UNORDERED_ACCESS_VIEW}}</strong> can be used as for video processor input views (regardless of what other bind flags may be set).</li> <li>Bind flags = 0 is also allowed for a video processor input view.</li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the input surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorInputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the output sample for the video processing operation.</p> + <p>Set the <em>ppVPOView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>Resources used for video processor output views must use the following <strong>{{D3D11_BIND_FLAG}}</strong> combinations:</p><ul> <li> <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> indicates that it can be used for a video processor output view. The following bind flags are allowed to be set with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>:<ul> <li> <strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong> </li> <li> <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong> </li> </ul> </li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> <li>Some {{YUV}} formats can be supported as a video processor output view, but might not be supported as a 3D render target. {{D3D11}} will allow the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag for these formats, but <strong>CreateRenderTargetView</strong> will not be allowed for these formats.</li> </ul><p>If stereo output is enabled, the output view must have 2 array elements. Otherwise, it must only have a single array element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the output surface. The resource must be created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Enumerates the video processor capabilities of the driver.</p> + <p>To create the video processor device, pass the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> reference to the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that describes the video content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the number of profiles that are supported by the driver.</p> + <p>To enumerate the profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> + <p>Returns the number of profiles.</p> + + + + <p>Gets a profile that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the profile. To get the number of profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfileCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the profile.</p> </dd> + + + + + <p>Given aprofile, checks whether the driver supports a specified output format.</p> + <p>If the driver does not support the profile given in <em>pDecoderProfile</em>, the method returns <strong>{{E_INVALIDARG}}</strong>. If the driver supports the profile, but the {{DXGI}} format is not compatible with the profile, the method succeeds but returns the value <strong>{{FALSE}}</strong> in <em>pSupported</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that identifies the profile. To get the list of supported profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> value that specifies the output format. Typical values include <strong>{{DXGI_FORMAT_NV12}}</strong> and <strong>{{DXGI_FORMAT_420_OPAQUE}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the format is supported, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the number of decoder configurations that the driver supports for a specified video description.</p> + <p>To enumerate the decoder configurations, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfig}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>Receives the number of decoder configurations.</p> </dd> + + + + + <p>Gets a decoder configuration that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>The zero-based index of the decoder configuration. To get the number of configurations that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfigCount}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure. The method fills in the structure with the decoder configuration.</p> </dd> + + + + + <p>Queries the driver for its content protection capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> <p>If no encryption will be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> <p>The driver might disallow some combinations of encryption type and profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure. The method fills in this structure with the driver's content protection capabilities. </p> </dd> + + + + + <p>Gets a cryptographic key-exchange mechanism that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the key-exchange type. The driver reports the number of types in the <strong>KeyExchangeTypeCount</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the type of key exchange.</p> </dd> + + + + + <p>Sets private data on the video device and associates that data with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} associated with the data.</p> </dd> + + + <dd> <p>The size of the data, in bytes.</p> </dd> + + + <dd> <p>A reference to the data.</p> </dd> + + + + + <p>Sets a private <strong>{{IUnknown}}</strong> reference on the video device and associates that reference with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p> + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a buffer (vertex buffer, index buffer, or shader-constant buffer).</p> + <p> For example code, see How to: Create a Vertex Buffer, How to: Create an Index Buffer or How to: Create a Constant Buffer. </p><p> For a constant buffer (<strong>BindFlags</strong> of <strong>{{D3D11_BUFFER_DESC}}</strong> set to <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>), you must set the <strong>ByteWidth</strong> value of <strong>{{D3D11_BUFFER_DESC}}</strong> in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, provides the following new functionality for <strong>CreateBuffer</strong>: </p><p> You can create a constant buffer that is larger than the maximum constant buffer size that a shader can access (4096 32-bit*4-component constants ? 64KB). When you bind the constant buffer to the pipeline (for example, via <strong>{{PSSetConstantBuffers}}</strong> or <strong>{{PSSetConstantBuffers1}}</strong>), you can define a range of the buffer that the shader can access that fits within the 4096 constant limit. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. On existing drivers that are implemented to feature level 10 and higher, a call to <strong>CreateBuffer</strong> to request a constant buffer that is larger than 4096 fails. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the buffer. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure that describes the initialization data; use <strong>{{NULL}}</strong> to allocate space only (with the exception that it cannot be <strong>{{NULL}}</strong> if the usage flag is <strong>{{D3D11_USAGE_IMMUTABLE}}</strong>). </p> <p> If you don't pass anything to <em>pInitialData</em>, the initial content of the memory for the buffer is undefined. In this case, you need to write the buffer content some other way before the resource is read. </p> </dd> + + + <dd> <p> Address of a reference to the <strong>{{ID3D11Buffer}}</strong> interface for the buffer object created. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (<strong>{{S_FALSE}}</strong> indicates a pass). </p> </dd> + + + + + <p>Creates an array of 1D textures.</p> + <p><strong>CreateTexture1D</strong> creates a 1D texture resource, which can contain a number of 1D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 width texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x1</li> <li>pInitialData[1] = 16x1</li> <li>pInitialData[2] = 8x1</li> <li>pInitialData[3] = 4x1 +</li> <li>pInitialData[4] = 2x1 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create an array of 2D textures.</p> + <p><strong>CreateTexture2D</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or it may use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a single 3D texture.</p> + <p><strong>CreateTexture3D</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a shader-resource view for accessing data in a resource.</p> + <p> A resource is made up of one or more subresources; a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following {{API}} methods: <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong> and <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>. </p><p>Because a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.</p><strong>Note</strong>?? To successfully create a shader-resource view from a typeless buffer (for example, <strong>{{DXGI_FORMAT_R32G32B32A32_TYPELESS}}</strong>), you must set the <strong>{{D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS}}</strong> flag when you create the buffer.?<p> The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateShaderResourceView</strong> for the following new purpose. </p><p> You can create shader-resource views of video resources so that Direct3D shaders can process those shader-resource views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure for a created shader-resource view must match the type of video resource, {{D3D11_SRV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_SRV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to. </p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}} </strong> flag. </p> </dd> + + + <dd> <p> Pointer to a shader-resource view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with). </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11ShaderResourceView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation). </p> </dd> + + + + + <p>Creates a view for accessing an unordered access resource.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateUnorderedAccessView</strong> for the following new purpose. </p><p>You can create unordered-access views of video resources so that Direct3D shaders can process those unordered-access views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure for a created unordered-access view must match the type of video resource, {{D3D11_UAV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_UAV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateRenderTargetView</strong> for the following new purpose. </p><p>You can create render-target views of video resources so that Direct3D shaders can process those render-target views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> structure for a created render-target view must match the type of video resource, {{D3D11_RTV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_RTV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11RenderTargetView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create a depth-stencil view for accessing resource data.</p> + <p>A depth-stencil view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to the resource that will serve as the depth-stencil surface. This resource must have been created with the <strong>{{D3D11_BIND_DEPTH_STENCIL}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses mipmap level 0 of the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11DepthStencilView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create an input-layout object to describe the input-buffer data for the input-assembler stage.</p> + <p>After creating an input layout object, it must be bound to the input-assembler stage before calling a draw {{API}}.</p><p>Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.</p><p> If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes. </p> + + + <dd> <p> An array of the input-assembler stage input data types; each type is described by an element description (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>). </p> </dd> + + + <dd> <p>The number of input-data types in the array of input-elements.</p> </dd> + + + <dd> <p> A reference to the compiled shader. The compiled shader code contains a input signature which is validated against the array of elements. See remarks. </p> </dd> + + + <dd> <p>Size of the compiled shader.</p> </dd> + + + <dd> <p> A reference to the input-layout object created (see <strong>{{ID3D11InputLayout}}</strong>). To validate the other input parameters, set this reference to be <strong>{{NULL}}</strong> and verify that the method returns {{S_FALSE}}. </p> </dd> + + + + + <p>Create a vertex-shader object from a compiled shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateVertexShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a vertex shader, you can successfully pass the compiled vertex shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateVertexShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateVertexShader</strong> fails. <strong>CreateVertexShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled vertex shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11VertexShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return <strong>{{S_FALSE}}</strong> instead of <strong>{{S_OK}}</strong>.</p> </dd> + + + + + <p>Create a geometry shader.</p> + <p>After it is created, the shader can be set to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShader</strong> fails. <strong>CreateGeometryShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11GeometryShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Creates a geometry shader that can write to streaming output buffers.</p> + <p> For more info about using <strong>CreateGeometryShaderWithStreamOutput</strong>, see Create a Geometry-Shader Object with Stream Output. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShaderWithStreamOutput</strong>. </p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p> Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShaderWithStreamOutput</strong> succeeds. </p><p> If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShaderWithStreamOutput</strong> fails. <strong>CreateGeometryShaderWithStreamOutput</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports. </p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li> All atomics and immediate atomics (for example, atomic_and and imm_atomic_and) </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.</p> <p> To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the <strong>{{D3DGetOutputSignatureBlob}}</strong> compiler function. You can also pass a reference to the compiled shader for the prior stage (for example, the vertex-shader stage or domain-shader stage). This compiled shader provides the output signature for the data. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{D3D11_SO_DECLARATION_ENTRY}}</strong> array. Cannot be <strong>{{NULL}}</strong> if NumEntries &gt; 0. </p> </dd> + + + <dd> <p>The number of entries in the stream output declaration ( ranges from 0 to {{D3D11_SO_STREAM_COUNT}} * {{D3D11_SO_OUTPUT_COMPONENT_COUNT}} ).</p> </dd> + + + <dd> <p>An array of buffer strides; each stride is the size of an element for that buffer.</p> </dd> + + + <dd> <p> The number of strides (or buffers) in <em>pBufferStrides</em> (ranges from 0 to {{D3D11_SO_BUFFER_SLOT_COUNT}}). </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage (ranges from 0 to {{D3D11_SO_STREAM_COUNT}} - 1). Set to {{D3D11_SO_NO_RASTERIZED_STREAM}} if no stream is to be rasterized. </p> </dd> + + + <dd> <p> A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11GeometryShader}}</strong> interface, representing the geometry shader that was created. Set this to <strong>{{NULL}}</strong> to validate the other parameters; if validation passes, the method will return {{S_FALSE}} instead of {{S_OK}}. </p> </dd> + + + + + <p>Create a pixel shader.</p> + <p>After creating the pixel shader, you can set it to the device using <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled pixel shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11PixelShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Create a hull shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateHullShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a hull shader, you can successfully pass the compiled hull shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateHullShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateHullShader</strong> fails. <strong>CreateHullShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Create a domain shader .</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateDomainShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a domain shader, you can successfully pass the compiled domain shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateDomainShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateDomainShader</strong> fails. <strong>CreateDomainShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Create a compute shader.</p> + <p>For an example, see How To: Create a Compute Shader and {{HDRToneMappingCS11}} Sample.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates class linkage libraries to enable dynamic shader linkage.</p> + <p>The <strong>{{ID3D11ClassLinkage}}</strong> interface returned in <em>ppLinkage</em> is associated with a shader by passing it as a parameter to one of the <strong>{{ID3D11Device}}</strong> create shader methods such as <strong>{{ID3D11Device::CreatePixelShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a class-linkage interface reference (see <strong>{{ID3D11ClassLinkage}}</strong>).</p> </dd> + + + + + <p>Create a blend-state object that encapsules blend state for the output-merger stage.</p> + <p> An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> Pointer to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>). </p> </dd> + + + <dd> <p> Address of a reference to the blend-state object created (see <strong>{{ID3D11BlendState}}</strong>). </p> </dd> + + + + + <p>Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.</p> + <p>4096 unique depth-stencil state objects can be created on a device at a time.</p><p>If an application attempts to create a depth-stencil-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique depth-stencil state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a depth-stencil state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the depth-stencil state object created (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Create a rasterizer state object that tells the rasterizer stage how to behave.</p> + <p>4096 unique rasterizer state objects can be created on a device at a time.</p><p>If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a rasterizer state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the rasterizer state object created (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Create a sampler-state object that encapsulates sampling information for a texture.</p> + <p>4096 unique sampler state objects can be created on a device at a time.</p><p>If an application attempts to create a sampler-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique sampler state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a sampler state description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the sampler state object created (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates methods for querying information from the {{GPU}}.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the query object created (see <strong>{{ID3D11Query}}</strong>).</p> </dd> + + + + + <p>Creates a predicate.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a query description where the type of query must be a {{D3D11_QUERY_SO_OVERFLOW_PREDICATE}} or {{D3D11_QUERY_OCCLUSION_PREDICATE}} (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>).</p> </dd> + + + + + <p>Create a counter object for measuring {{GPU}} performance.</p> + <p>If this function succeeds, it will return {{S_OK}}. If it fails, possible return values are: {{S_FALSE}}, {{E_OUTOFMEMORY}}, {{DXGI_ERROR_UNSUPPORTED}}, {{DXGI_ERROR_NONEXCLUSIVE}}, or {{E_INVALIDARG}}.</p><p>{{DXGI_ERROR_UNSUPPORTED}} is returned whenever the application requests to create a well-known counter, but the current device does not support it.</p><p>{{DXGI_ERROR_NONEXCLUSIVE}} indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.</p><p>{{E_INVALIDARG}} is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a counter (see <strong>{{ID3D11Counter}}</strong>).</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. Using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After all scene items are recorded, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device}}</strong>, the <strong>CreateDeferredContext</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Get the support of a given format on the installed video device.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Format</em> parameter is <strong>{{NULL}}</strong>, or returns {{E_FAIL}} if the described format does not exist.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> enumeration that describes a format for which to check for support.</p> </dd> + + + <dd> <p>A bitfield of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> enumeration values describing how the specified format is supported on the installed device. The values are {{ORed}} together.</p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum number of quality levels is defined by {{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}} in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>Number of quality levels supported by the adapter. See remarks.</p> </dd> + + + + + <p>Get a counter's information.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to counter information (see <strong>{{D3D11_COUNTER_INFO}}</strong>).</p> </dd> + + + + + <p>Get the type, name, units of measure, and a description of an existing counter.</p> + <p> Length parameters can be <strong>{{NULL}}</strong>, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-<strong>{{NULL}}</strong> and the corresponding string is <strong>{{NULL}}</strong>, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating <strong>{{NULL}}</strong>) will be returned through the length parameter. When length and the corresponding parameter are both non-<strong>{{NULL}}</strong>, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating <strong>{{NULL}}</strong> character) is passed out through the length parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>). Specifies which counter information is to be retrieved about. </p> </dd> + + + <dd> <p> Pointer to the data type of a counter (see <strong>{{D3D11_COUNTER_TYPE}}</strong>). Specifies the data type of the counter being retrieved. </p> </dd> + + + <dd> <p>Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.</p> </dd> + + + <dd> <p> String to be filled with a brief name for the counter. May be <strong>{{NULL}}</strong> if the application is not interested in the name of the counter. </p> </dd> + + + <dd> <p> Length of the string returned to szName. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szUnits. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szDescription. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets information about the features that are supported by the current graphics driver.</p> + <p>To query for multi-threading support, pass the <strong>{{D3D11_FEATURE_THREADING}}</strong> value to the <em>Feature</em> parameter, pass the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>pFeatureSupportData</em> parameter, and pass the size of the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>FeatureSupportDataSize</em> parameter.</p><p>Calling CheckFeatureSupport with <em>Feature</em> set to {{D3D11_FEATURE_FORMAT_SUPPORT}} causes the method to return the same information that would be returned by <strong>{{ID3D11Device::CheckFormatSupport}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter.</p> + + + <dd> <p>A member of the <strong>{{D3D11_FEATURE}}</strong> enumerated type that describes which feature to query for support.</p> </dd> + + + <dd> <p>Upon completion of the method, the passed structure is filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size of the structure passed to the <em>pFeatureSupportData</em> parameter.</p> </dd> + + + + + <p>Get application-defined data from a device.</p> + <p>This method returns one of the codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved.</p> </dd> + + + <dd> <p>A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data.</p> </dd> + + + + + <p>Set data to a device and associate that data with a guid.</p> + <p>The data stored in the device with this method can be retrieved with <strong>{{ID3D11Device::GetPrivateData}}</strong>.</p><p>The data and guid set with this method will typically be application-defined.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>Gets the feature level of the hardware device.</p> + <p> Feature levels determine the capabilities of your device.</p> + <p>A member of the <strong>{{D3D_FEATURE_LEVEL}}</strong> enumerated type that describes the feature level of the hardware device.</p> + + + + <p>Get the flags used during the call to create the device with <strong>{{D3D11CreateDevice}}</strong>.</p> + <p>A bitfield containing the flags used to create the device. See <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>.</p> + + + + <p>Get the reason why the device was removed.</p> + <p>Possible return values include: </p><ul> <li>{{DXGI_ERROR_DEVICE_HUNG}}</li> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_ERROR_DEVICE_RESET}}</li> <li>{{DXGI_ERROR_DRIVER_INTERNAL_ERROR}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li>{{S_OK}}</li> </ul><p>For more detail on these return codes, see {{DXGI_ERROR}}.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p>The <strong>GetImmediateContext</strong> method returns an <strong>{{ID3D11DeviceContext}}</strong> object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>Set an exception-mode flag to elevate an error condition to a non-continuable exception. </p><p>Whenever an error occurs, a Direct3D device enters the {{DEVICEREMOVED}} state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>An exception-mode flag is used to elevate an error condition to a non-continuable exception. </p> + <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> + + + + <p>Creates a device that represents the display adapter.</p> + <p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Set <em>ppDevice</em> and <em>ppImmediateContext</em> to <strong>{{NULL}}</strong> to determine which feature level is supported by looking at <em>pFeatureLevel</em> without creating a device. </p><p> For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDevice}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><table> <tr><td> <p>Differences between Direct3D 10 and Direct3D 11:</p> <p> In Direct3D 10, the presence of <em>pAdapter</em> dictated which adapter to use and the <em>DriverType</em> could mismatch what the adapter was. </p> <p> In Direct3D 11, if you are trying to create a hardware or a software device, set <em>pAdapter</em> != <strong>{{NULL}}</strong> which constrains the other inputs to be: </p> <ul> <li><em>DriverType</em> must be {{D3D_DRIVER_TYPE_UNKNOWN}} </li> <li><em>Software</em> must be <strong>{{NULL}}</strong>. </li> </ul> <p> On the other hand, if <em>pAdapter</em> == <strong>{{NULL}}</strong>, the <em>DriverType</em> cannot be set to {{D3D_DRIVER_TYPE_UNKNOWN}}; it can be set to either: </p> <ul> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_SOFTWARE}}, <em>Software</em> cannot be <strong>{{NULL}}</strong>. </li> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_HARDWARE}}, the adapter used will be the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong> </li> </ul> </td></tr> </table><p>?</p><p> The function signature {{PFN_D3D11_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><p><strong>Windows Phone 8.1: </strong> This {{API}} is supported. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre>{ {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +};</pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned. </p> </dd> + + + <dd> <p> If successful, returns the first <strong>{{D3D_FEATURE_LEVEL}}</strong> from the <em>pFeatureLevels</em> array which succeeded. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <p>Creates a device that represents the display adapter and a swap chain used for rendering.</p> + <strong>Note</strong>?? If you call this method in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Also, see the remarks section in <strong>{{D3D11CreateDevice}}</strong> for details about input parameter dependencies. To create a device without creating a swap chain, use the <strong>{{D3D11CreateDevice}}</strong> function. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDeviceAndSwapChain}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><p> The function signature {{PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong> if you call it in a Session 0 process. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. The value should be non-<strong>{{NULL}}</strong> when <strong>{{D3D_DRIVER_TYPE}}</strong> is <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong> and <strong>{{NULL}}</strong> otherwise. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre> { {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> A reference to a swap chain description (see <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>) that contains initialization parameters for the swap chain. </p> </dd> + + + <dd> <p> Returns the address of a reference to the <strong>{{IDXGISwapChain}}</strong> object that represents the swap chain used for rendering. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned'. </p> </dd> + + + <dd> <p> Returns a reference to a <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the first element in an array of feature levels supported by the device. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies how to handle the existing contents of a resource during a copy or update operation of a region within that resource.</p> + + + <dd> <p>The existing contents of the resource cannot be overwritten.</p> </dd> + + + <dd> <p>The existing contents of the resource are undefined and can be discarded.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies logical operations to configure for a render target.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Describes flags that are used to create a device context state object (<strong>{{ID3DDeviceContextState}}</strong>) with the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method.</p> + + + + <p>Specifies capabilities of the video decoder.</p> + + + <dd> <p>Indicates that the graphics driver supports at least a subset of downsampling operations.</p> </dd> + + + <dd> <p>Indicates that the decoding hardware cannot support the decode operation in real-time. Decoding is still supported for transcoding scenarios. With this capability, it is possible that decoding can occur in real-time if downsampling is enabled. +</p> </dd> + + + <dd> <p>Indicates that the driver supports changing down sample parameters after the initial down sample parameters have been applied. For more information, see <strong>{{ID3D11VideoContext1::DecoderUpdateDownsampling}}</strong>.</p> </dd> + + + + + <p>Specifies flags that indicate the most efficient methods for performing video processing operations. </p> + + + <dd> <p>Multi-plane overlay hardware can perform the rotation operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the scaling operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the colorspace conversion operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>The video processor output data should be at least triple buffered for optimal performance.</p> </dd> + + + + + <p>Represents the status of an <strong>{{ID3D11CryptoSession}}</strong> interface.</p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC1}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>Enable (or disable) a logical operation.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p> Describes the blend state that you use in a call to <strong>{{ID3D11Device1::CreateBlendState1}}</strong> to create a blend-state object. </p> + <p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this <strong>{{D3D11_BLEND_DESC1}}</strong> to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>Indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a sub sample mapping block.</p> + <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> + + + <dd> <p>The number of clear (non-encrypted) bytes at the start of the block.</p> </dd> + + + <dd> <p>The number of encrypted bytes following the clear bytes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. </p> </dd> + + + <dd> <p>Size of the relevant data.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <em>pIV</em> parameter. If <em>pIV</em> is {{NULL}}, set this member to zero.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures, which indicates exactly which bytes in the decode buffer are encrypted and which are in the clear. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> </dd> + + + <dd> <p>The number of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures specified in the <em>pSubSampleMappingBlocks</em> parameter. If <em>pSubSampleMappingBlocks</em> is {{NULL}}, set this member to zero.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides data to the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> method.</p> + <p>This structure is passed in the <em>pContentKey</em> parameter of the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> function when <strong>{{D3D11_DECODER_ENCRYPTION_HW_CENC}}</strong> is specified in the <strong>guidConfigBitstreamEncryption</strong> member of the <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure when creating the video decoder interface.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides information about the input streams passed into the <strong>{{ID3DVideoContext1::VideoProcessorGetBehaviorHints}}</strong> method.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange input data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateInputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The size of the {{DRM}} command data.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbInput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbInput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbInput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange output data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateOutputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The maximum size of data that the driver can return in the output buffer. The last byte that it can write to is <strong>pbOuput</strong>[<strong>PrivateDataSize</strong> + <strong>MaxHWProtectionDataSize</strong> ? 1].</p> </dd> + + + <dd> <p>The size of the output data written by the driver.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent executing the content protection command.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbOutput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbOutput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbOutput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange data for hardware content protection.</p> + <p>A reference to this structure is passed in the <em>pData</em> parameter of <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method when the <strong>{{ID3D11CryptoSession}}</strong> is creating using the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong> key exchange type.</p> + + + <dd> <p>The function {{ID}} of the {{DRM}} command. The values and meanings of the function {{ID}} are defined by the {{DRM}} specification.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>The result of the hardware {{DRM}} command.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a video sample.</p> + + + <dd> <p>The width of the video sample.</p> </dd> + + + <dd> <p>The height of the video sample.</p> </dd> + + + <dd> <p>The format of the video sample.</p> </dd> + + + <dd> <p>The colorspace of the sample.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage. This blend-state interface supports logical operations as well as blending operations.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device1::CreateBlendState1}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device1::CreateBlendState1}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC1}}</strong> structure that receives a description of the blend state. This blend state can specify logical operations as well as blending operations.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong> {{D3D11_RASTERIZER_DESC1}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count.</p> </dd> + + + + + <p>The <strong>{{ID3DDeviceContextState}}</strong> interface represents a context state object, which holds state and behavior information about a Microsoft Direct3D device.</p> + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + <p>Copies a region from a source resource to a destination resource.</p> + <p>If the display driver supports overlapping, the source and destination subresources can be identical, and the source and destination regions can overlap each other. For existing display drivers that don?t support overlapping, the runtime drops calls with identical source and destination subresources, regardless of whether the regions overlap. To determine whether the display driver supports overlapping, check the <strong>CopyWithOverlap</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>. This overlapping support enables additional scroll functionality in a call to <strong>{{IDXGISwapChain::Present}}</strong>.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> or <strong>CopySubresourceRegion1</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper-left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource.</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box that defines the region of the source subresource that <strong>CopySubresourceRegion1</strong> can copy. If <strong>{{NULL}}</strong>, <strong>CopySubresourceRegion1</strong> copies the entire source subresource. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion1</strong> doesn't perform a copy operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the copy operation. If you specify zero for no copy option, <strong>CopySubresourceRegion1</strong> behaves like <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them. </p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>If you call <strong>UpdateSubresource1</strong> to update a constant buffer, pass any region, and the driver has not been implemented to Windows?8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant). When the runtime drops the call, the runtime doesn't call the corresponding device driver interface ({{DDI}}).</p><p>When you record a call to <strong>UpdateSubresource</strong> with an offset <em>pDstBox</em> in a software command list, the offset in <em>pDstBox</em> is incorrectly applied to <em>pSrcData</em> when you play back the command list. The new-for-Windows?8<strong>UpdateSubresource1</strong> fixes this issue. In a call to <strong>UpdateSubresource1</strong>, <em>pDstBox</em> does not affect <em>pSrcData</em>.</p><p>For info about various resource types and how <strong>UpdateSubresource1</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource1</strong> or <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing.</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>A zero-based index that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, <strong>UpdateSubresource1</strong> writes the data to the destination subresource with no offset. The dimensions of the source must fit the destination.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource1</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the update operation. If you specify zero for no update option, <strong>UpdateSubresource1</strong> behaves like <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them.</p> </dd> + + + + + <p>Discards a resource from the device context.</p> + <p><strong>DiscardResource</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource that <em>pResource</em> points to is no longer needed.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface for the resource to discard. The resource must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardResource</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Discards a resource view from the device context.</p> + <p><strong>DiscardView</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView</strong> allows you to discard a subset of a resource that is in a view (such as a single miplevel). More importantly, <strong>DiscardView</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Sets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{VSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{VSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{VSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the hull-shader stage of the pipeline uses.</p> + <p>The runtime drops the call to <strong>{{HSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{HSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If the <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{HSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + + <p>Sets the constant buffers that the domain-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{DSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{DSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{DSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{GSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{GSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{GSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p> Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer. </p> + <p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p><p> The runtime drops the call to <strong>{{PSSetConstantBuffers1}}</strong> if the numbers of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components. </p><p> The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range): </p><p> [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>] </p><p> That is, the window is the range is from (value in an element of <em>pFirstConstant</em>) to (value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>). </p><p> The runtime also drops the call to <strong>{{PSSetConstantBuffers1}}</strong> on existing drivers that do not support this offsetting. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. </p><p> From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>. </p><p> Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p> If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{PSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants. </p><p> If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>. </p> + <p> Returns nothing. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers being given to the device. </p> </dd> + + + <dd> <p> An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants. </p> </dd> + + + <dd> <p> An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the compute-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{CSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{CSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{CSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Gets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the hull-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + + <p>Gets the constant buffers that the domain-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the pixel shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the compute-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Activates the given context state object and changes the current device behavior to Direct3D?11, Direct3D?10.1, or Direct3D?10.</p> + <p><strong>SwapDeviceContextState</strong> changes device behavior. This device behavior depends on the emulated interface that you passed to the <em>EmulatedInterface</em> parameter of the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method when you created the context state object. </p><p><strong>SwapDeviceContextState</strong> is not supported on a deferred context.</p><p><strong>SwapDeviceContextState</strong> disables the incompatible device interfaces <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong>. When a context state object is active, the runtime disables certain methods on the device and context interfaces. A context state object that is created with <code>__uuidof({{ID3D11Device1}})</code> or <code>__uuidof({{ID3D11Device}})</code> turns off most of the Direct3D?10 device interfaces. A context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> turns off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. +For more information about this behavior, see <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>.</p><p><strong>SwapDeviceContextState</strong> activates the context state object specified by <em>pState</em>. This means that the device behaviors that are associated with the context state object's feature level and compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. In addition, any state that was saved when this context state object was last active is now reactivated, so that the previous state is replaced.</p><p><strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the most recently activated context state object. The object allows the caller to save and then later restore the previous device state. This behavior is useful in a plug-in architecture such as Direct2D that shares a Direct3D device with its plug-ins. A Direct2D interface can use context state objects to save and restore the application's state.</p><p>If the caller did not previously call the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method to create a previous context state object, <strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the default context state object. In either case, usage of <strong>SwapDeviceContextState</strong> is the same.</p><p>The feature level that is specified by the application, and that is chosen by the context state object from the acceptable list that the application supplies to <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>, controls the feature level of the immediate context whenever the context state object is active. Because the Direct3D?11 device is free-threaded, the device methods cannot query the current immediate context feature level. Instead, the device runs at a feature level that is the maximum of all previously created context state objects' feature levels. This means that the device's feature level can increase dynamically.</p><p>The feature level of the context state object controls the functionality available from the immediate context. However, to maintain the free-threaded contract of the Direct3D?11 device methods?the resource-creation methods in particular?the upper-bound feature level of all created context state objects controls the set of resources that the device creates.</p><p>Because the context state object interface is published by the immediate context, the interface requires the same threading model as the immediate context. Specifically, <strong>SwapDeviceContextState</strong> is single-threaded with respect to the other immediate context methods and with respect to the equivalent methods of <strong>{{ID3D10Device}}</strong>.</p><p>Crucially, because only one of the Direct3D?10 or Direct3D?11 ref-count behaviors can be available at a time, one of the Direct3D?10 and Direct3D?11 interfaces must break its ref-count contract. To avoid this situation, the activation of a context state object turns off the incompatible version interface. Also, if you call a method of an incompatible version interface, the call silently fails if the method has return type <strong>void</strong>, returns an <strong>{{HRESULT}}</strong> value of <strong>{{E_INVALIDARG}}</strong>, or sets any out parameter to <strong>{{NULL}}</strong>.</p><p>When you switch from Direct3D?11 mode to either Direct3D?10 mode or Direct3D?10.1 mode, the binding behavior of the device changes. Specifically, the final release of a resource induces unbind in Direct3D?10 mode or Direct3D?10.1 mode. During final release an application releases all of the resource's references, including indirect references such as the linkage from view to resource, and the linkage from context state object to any of the context state object's bound resources. Any bound resource to which the application has no reference is unbound and destroyed, in order to maintain the Direct3D?10 behavior.</p><p><strong>SwapDeviceContextState</strong> does not affect any state that <strong>{{ID3D11VideoContext}}</strong> sets. </p><p>Command lists that are generated by deferred contexts do not hold a reference to context state objects and are not affected by future updates to context state objects.</p><p>No asynchronous objects are affected by <strong>SwapDeviceContextState</strong>. For example, if a query is active before a call to <strong>SwapDeviceContextState</strong>, it is still active after the call.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the context state object that was previously created through the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method. If <strong>SwapDeviceContextState</strong> is called with <em>pState</em> set to <strong>{{NULL}}</strong>, the call has no effect.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the previously-activated context state object.</p> </dd> + + + + + <p>Sets all the elements in a resource view to one value.</p> + <p><strong>ClearView</strong> works only on render-target views ({{RTVs}}), depth/stencil views ({{DSVs}}) on depth-only resources (resources with no stencil component), unordered-access views ({{UAVs}}), or any video view of a <strong>Texture2D</strong> surface. The runtime drops invalid calls. Empty rectangles in the <em>pRect</em> array are a no-op. A rectangle is empty if the top value equals the bottom value or the left value equals the right value.</p><p><strong>ClearView</strong> doesn?t support 3D textures.</p><p><strong>ClearView</strong> applies the same color value to all array slices in a view; all rectangles in the <em>pRect</em> array correspond to each array slice. The <em>pRect</em> array of rectangles is a set of areas to clear on a single surface. If the view is an array, <strong>ClearView</strong> clears all the rectangles on each array slice individually.</p><p>When you apply rectangles to buffers, set the top value to 0 and the bottom value to 1 and set the left value and right value to describe the extent within the buffer. When the top value equals the bottom value or the left value equals the right value, the rectangle is empty and a no-op is achieved.</p><p>The driver converts and clamps color values to the destination format as appropriate per Direct3D conversion rules. For example, if the format of the view is <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>, the driver clamps inputs to 0.0f to 1.0f (+{{INF}} -&gt; 1.0f (0XFF)/NaN -&gt; 0.0f).</p><p>If the format is integer, such as <strong>{{DXGI_FORMAT_R8G8B8A8_UINT}}</strong>, the runtime interprets inputs as integral floats. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p><p>Here are the color mappings:</p><ul> <li>Color[0]: R (or Y for video)</li> <li>Color[1]: G (or U/Cb for video)</li> <li>Color[2]: B (or V/Cr for video)</li> <li>Color[3]: A</li> </ul><p>For video views with {{YUV}} or {{YCbBr}} formats, <strong>ClearView</strong> doesn't convert color values. In situations where the format name doesn?t indicate _UNORM, _UINT, and so on, <strong>ClearView</strong> assumes _UINT. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface that represents the resource view to clear.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to use to clear the resource view.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearView</strong> clears the entire surface.</p> </dd> + + + <dd> <p>Number of rectangles in the array that the <em>pRect</em> parameter specifies.</p> </dd> + + + + + <p>Discards the specified elements in a resource view from the device context.</p> + <p><strong>DiscardView1</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the specified elements in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView1</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView1</strong> allows you to discard elements of a subset of a resource that is in a view (such as elements of a single miplevel). More importantly, <strong>DiscardView1</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource. </p> + <p>Returns nothing</p> + + + <dd> <p> A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView1</strong>; if the debug layer is enabled, the runtime returns an error message. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to discard. If <strong>{{NULL}}</strong>, <strong>DiscardView1</strong> discards the entire view and behaves the same as <strong>DiscardView</strong>. </p> </dd> + + + <dd> <p> Number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the video functionality of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext1}}</strong> interface reference.</p> + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor any {{D3D11}} predicate that may have been set. <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC1}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Allows the driver to return {{IHV}} specific information used when initializing the new hardware key.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the {{ID3D11CryptoSession}} interface. To get this reference, call <strong>{{ID3D11VideoDevice1::CreateCryptoSession}}</strong>.</p> </dd> + + + <dd> <p>The size of the memory referenced by the <em>pPrivateInputData</em> parameter.</p> </dd> + + + <dd> <p>The private input data. The contents of this parameter is defined by the implementation of the secure execution environment. It may contain data about the license or about the stream properties.</p> </dd> + + + <dd> <p>A reference to the private output data. The return data is defined by the implementation of the secure execution environment. It may contain graphics-specific data to be associated with the underlying hardware key.</p> </dd> + + + + + <p>Checks the status of a crypto session.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>Specifies a <strong>{{ID3D11CryptoSession}}</strong> for which status is checked.</p> </dd> + + + <dd> <p>A {{D3D11_CRYPTO_SESSION_STATUS}} that is populated with the crypto session status upon completion.</p> </dd> + + + + + <p>Indicates that decoder downsampling will be used and that the driver should allocate the appropriate reference frames. </p> + <p>This function can only be called once for a specific <strong>{{ID3D11VideoDecoder}}</strong> interface. This method must be called prior to the first call to <strong>DecoderBeginFrame</strong>. To update the downsampling parameters, use <strong>DecoderUpdateDownsampling</strong>.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The color space information of the reference frame data.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>The number of reference frames to be used in the operation.</p> </dd> + + + + + <p>Updates the decoder downsampling parameters.</p> + <p>This method can only be called after decode downsampling is enabled by calling <strong>DecoderEnableDownsampling</strong>. This method is only supported if the <strong>{{D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC}}</strong> capability is reported.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + + + <p>Sets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Sets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> will be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that indicates the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Gets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> can be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Specifies whether the video processor input stream should be flipped vertically or horizontally.</p> + <p>When used in combination, transformations on the processor input stream should be applied in the following order:</p><ul> <li>Rotation</li> <li>Mirroring</li> <li>Source clipping</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>True if mirroring should be enabled; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Gets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Gets values that indicate whether the video processor input stream is being flipped vertically or horizontally.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether mirroring is enabled. True if mirroring is enabled; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped horizontally. True if the stream is being flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped vertically. True if the stream is being flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Returns driver hints that indicate which of the video processor operations are best performed using multi-plane overlay hardware rather than <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> + <p>This method computes the behavior hints using the current state of the video processor as set by the "SetOutput" and "SetStream" methods of <strong>{{ID3D11VideoContext}}</strong> and <strong>{{ID3D11VideoContext1}}</strong>. You must set the proper state before calling this method to ensure that the returned hints contain useful data.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device1}}</strong> interface reference.</p> + + + + <p>Retrieves optional sizes for private driver data. </p> + <p>When <em>pKeyExchangeType</em> is <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong>, the following behavior is expected in the <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method:</p><ul> <li>The <em>DataSize</em> parameter is set to the size of the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure.</li> <li><em>pData</em> points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure. <ul> <li>The <strong>pInputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure where:<ul> <li><strong>pbInput</strong>[0] ? <strong>pbInput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateInputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbInput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> <li>The <strong>pOutputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure where:<ul> <li><strong>pbOutput</strong>[0] ? <strong>pbOutput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateOutputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbOutput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> </ul> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Indicates the crypto type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the decoder profile for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the key exchange type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for input commands.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for output commands.</p> </dd> + + + + + <p>Retrieves capabilities and limitations of the video decoder.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The decode profile for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video width for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video height for which the capabilities are queried.</p> </dd> + + + <dd> <p>The frame rate of the video content. This information is used by the driver to determine whether the video can be decoded in real-time.</p> </dd> + + + <dd> <p>The bit rate of the video stream. A value of zero indicates that the bit rate can be ignored.</p> </dd> + + + <dd> <p>The type of cryptography used to encrypt the video stream. A value of {{NULL}} indicates that the video stream is not encrypted.</p> </dd> + + + <dd> <p>A reference to a bitwise {{OR}} combination of <strong>{{D3D11_VIDEO_DECODER_CAPS}}</strong> values specifying the decoder capabilities. </p> </dd> + + + + + <p>Indicates whether the video decoder supports downsampling with the specified input format, and whether real-time downsampling is supported.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>An object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>An object describing the resolution, format, and colorspace of the output frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if downsampling is supported with the specified input data. True if the driver supports the requested downsampling; otherwise, false.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if real-time decoding is supported with the specified input data. True if the driver supports the requested real-time decoding; otherwise, false. Note that the returned value is based on the current configuration of the video decoder and does not guarantee that real-time decoding will be supported for future downsampling operations.</p> </dd> + + + + + <p>Allows the driver to recommend optimal output downsample parameters from the input parameters.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_VIDEO_SAMPLE_DESC}}</strong> structure that the driver populates with the recommended output buffer parameters for a downsample operation. The driver will attempt to recommend parameters that can support real-time decoding. If it is unable to do so, the driver will recommend values that are as close to the real-time solution as possible.</p> </dd> + + + + + <p>Enumerates the video processor capabilities of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>. </p> + + + + <p>Indicates whether the driver supports the specified combination of format and colorspace conversions.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The format of the video processor input.</p> </dd> + + + <dd> <p>The colorspace of the video processor input.</p> </dd> + + + <dd> <p>The format of the video processor output.</p> </dd> + + + <dd> <p>The colorspace of the video processor output.</p> </dd> + + + <dd> <p>Pointer to a boolean that is set by the driver to indicate if the specified combination of format and colorspace conversions is supported. True if the conversion is supported; otherwise, false.</p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device1}}</strong> adds new methods to those in <strong>{{ID3D11Device}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p><strong>GetImmediateContext1</strong> returns an <strong>{{ID3D11DeviceContext1}}</strong> object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p><strong>GetImmediateContext1</strong> increments the reference count of the immediate context by one. So, call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized.</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device1}}</strong>, the <strong>CreateDeferredContext1</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the graphics adapter has been physically removed from the computer or a driver upgrade for the graphics adapter has occurred. If this error occurs, you should destroy and re-create the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext1</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext1</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Creates a blend-state object that encapsulates blend state for the output-merger stage and allows the configuration of logic operations.</p> + <p>The logical operations (those that enable bitwise logical operations between pixel shader output and render target contents, refer to <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> ) are only available on certain feature levels; call <strong>CheckFeatureSupport</strong> with {{D3D11_FEATURE_D3D11_OPTIONS}} set, to ensure support by checking the boolean field <em>OutputMergerLogicOp</em> of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p><p>An app can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>An app can create up to 4096 unique rasterizer state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p> Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior. </p> + <p> The <strong>{{REFIID}}</strong> value of the emulated interface is a {{GUID}} obtained by use of the <strong>__uuidof</strong> operator. For example, <code>__uuidof({{ID3D11Device}})</code> gets the {{GUID}} of the interface to a Microsoft Direct3D?11 device. </p><p> Call the <strong>{{ID3D11DeviceContext1::SwapDeviceContextState}}</strong> method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. </p><p> When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with <code>__uuidof({{ID3D11Device}})</code> will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> will cause the runtime to turn off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the <strong>{{ID3D10Device1}}</strong> emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition. </p><p> For example, suppose the tessellation stage is made active through the <strong>{{ID3D11DeviceContext}}</strong> interface when you create the device through <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via <strong>QueryInterface</strong>. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call <strong>SwapDeviceContextState</strong> to activate a Direct3D?10-compatible context state object. </p><p> The following table shows the methods that are active and inactive for each emulated interface.</p><table> <tr><th> Emulated interface </th><th>Active device or immediate context interfaces </th><th>Inactive device or immediate context interfaces</th></tr> <tr><td> <p> <strong>{{ID3D11Device}}</strong> or </p> <p> <strong>{{ID3D11Device1}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> + </p> <p> <strong>{{IDXGIDevice2}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <strong>{{ID3D10Device}}</strong> </td></tr> <tr><td> <p> <strong>{{ID3D10Device1}}</strong> or </p> <p> <strong>{{ID3D10Device}}</strong> </p> </td><td> <p> <strong>{{ID3D10Device}}</strong> </p> <p> <strong>{{ID3D10Device1}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{ID3D11DeviceContext}}</strong> (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.) </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>ClearDepthStencilView</strong> </p> </td><td> <p> <strong>ClearDepthStencilView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearRenderTargetView</strong> </p> </td><td> <p> <strong>ClearRenderTargetView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearState</strong> </p> </td><td> <p> <strong>ClearState</strong> </p> </td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewUint</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewFloat</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopyResource</strong> </p> </td><td> <p> <strong>CopyResource</strong> </p> </td></tr> <tr><td> <p> <strong>CopyStructureCount</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopySubresourceRegion</strong> </p> </td><td> <p> <strong>CopySubresourceRegion</strong> </p> </td></tr> <tr><td> <p> <strong>{{CSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Dispatch</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DispatchIndirect</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>CreateBlendState</strong> </p> </td></tr> <tr><td> <p> <strong>Draw</strong> </p> </td><td> <p> <strong>Draw</strong> </p> </td></tr> <tr><td> <p> <strong>DrawAuto</strong> </p> </td><td> <p> <strong>DrawAuto</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexed</strong> </p> </td><td> <p> <strong>DrawIndexed</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DrawInstanced</strong> </p> </td><td> <p> <strong>DrawInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ExecuteCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>FinishCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Flush</strong> </p> </td><td> <p> <strong>Flush</strong> </p> </td></tr> <tr><td> <p> <strong>GenerateMips</strong> </p> </td><td> <p> <strong>GenerateMips</strong> </p> </td></tr> <tr><td> <p> <strong>GetPredication</strong> </p> </td><td> <p> <strong>GetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>GetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetType</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShader}}</strong> </p> </td><td> <p> <strong>{{GSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShader}}</strong> </p> </td><td> <p> <strong>{{GSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{HSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IAGetVertexBuffers}}</strong> </td><td> <p> <strong>{{IAGetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetIndexBuffer}}</strong> </td><td> <p> <strong>{{IASetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetInputLayout}}</strong> </td><td> <p> <strong>{{IASetInputLayout}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetPrimitiveTopology}}</strong> </td><td> <p> <strong>{{IASetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetVertexBuffers}}</strong> </td><td> <p> <strong>{{IASetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShader}}</strong> </p> </td><td> <p> <strong>{{PSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShader}}</strong> </p> </td><td> <p> <strong>{{PSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>ResolveSubresource</strong> </p> </td><td> <p> <strong>ResolveSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetState}}</strong> </p> </td><td> <p> <strong>{{RSGetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetState}}</strong> </p> </td><td> <p> <strong>{{RSSetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>SetPredication</strong> </p> </td><td> <p> <strong>SetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>SetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>SetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>UpdateSubresource</strong> </p> </td><td> <p> <strong>UpdateSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShader}}</strong> </p> </td><td> <p> <strong>{{VSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShader}}</strong> </p> </td><td> <p> <strong>{{VSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>Begin</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>End</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetCreationFlags</strong> </p> </td></tr> <tr><td></td><td> <p> <strong>GetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>GetContextFlags</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetData</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Map</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Unmap</strong> </p> </td><td></td></tr> </table><p>?</p><p> The following table shows the <strong>{{ID3D10Device}}</strong> interface methods that the runtime does not disable because they are not immediate context methods.</p><table> <tr><th> Methods of <strong>{{ID3D10Device}}</strong> </th></tr> <tr><td> <p> <strong>CheckCounter</strong> </p> </td></tr> <tr><td> <p> <strong>CheckCounterInfo</strong> </p> </td></tr> <tr><td> <p> Create*, like <strong>CreateQuery</strong> </p> </td></tr> <tr><td> <p> <strong>GetDeviceRemovedReason</strong> </p> </td></tr> <tr><td> <p> <strong>GetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>OpenSharedResource</strong> </p> </td></tr> <tr><td> <p> <strong>SetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateDataInterface</strong> </p> </td></tr> </table><p>?</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A combination of <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG}}</strong> values that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how to create the context state object. The <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag is currently the only defined flag. If the original device was created with <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong>, you must create all context state objects from that device with the <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag. </p> <p></p> <p>If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections.</p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong> values. The array can contain elements from the following list and determines the order of feature levels for which creation is attempted. Unlike <strong>{{D3D11CreateDevice}}</strong>, you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong> because there is no default feature level array. </p> <pre>{ {{D3D_FEATURE_LEVEL_11_1}}, {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. Unlike <strong>{{D3D11CreateDevice}}</strong>, you must set <em>FeatureLevels</em> to greater than 0 because you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> The {{SDK}} version. You must set this parameter to <strong>{{D3D11_SDK_VERSION}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are obtained by using the <strong>__uuidof</strong> operator on the <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong> interfaces. See Remarks. </p> </dd> + + + <dd> <p> A reference to a variable that receives a <strong>{{D3D_FEATURE_LEVEL}}</strong> value from the <em>pFeatureLevels</em> array. This is the first array value with which <strong>CreateDeviceContextState</strong> succeeded in creating the context state object. If the call to <strong>CreateDeviceContextState</strong> fails, the variable pointed to by <em>pChosenFeatureLevel</em> is set to zero. </p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3DDeviceContextState}}</strong> object that represents the state of a Direct3D device. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag).</p> + <p>The behavior of <strong>OpenSharedResourceByName</strong> is similar to the behavior of the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method; each call to <strong>OpenSharedResourceByName</strong> to access a resource creates a new resource object. In other words, if you call <strong>OpenSharedResourceByName</strong> twice and pass the same resource name to <em>lpName</em>, you receive two resource objects with different <strong>{{IUnknown}}</strong> references.</p><p><strong>To share a resource between two devices</strong></p><ol> <li>Create the resource as shared and specify that it uses {{NT}} handles, by setting the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag.</li> <li>Obtain the {{REFIID}}, or {{GUID}}, of the interface to the resource by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D11Texture2D}}</strong>) retrieves the {{GUID}} of the interface to a 2D texture.</li> <li>Query the resource for the <strong>{{IDXGIResource1}}</strong> interface.</li> <li>Call the <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method to obtain the unique handle to the resource. In this <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> call, you must pass a name for the resource if you want to subsequently call <strong>OpenSharedResourceByName</strong> to access the resource by name. </li> </ol> + <p>This method returns one of the Direct3D 11 return codes. This method also returns {{E_ACCESSDENIED}} if the permissions to access the resource aren't valid.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>OpenSharedResourceByName</strong> fails with {{E_NOTIMPL}} because {{NTHANDLES}} are used. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface enables an application to describe conceptual sections and markers within the application's code flow. An appropriately enabled tool, such as Microsoft Visual Studio Ultimate?2012, can display these sections and markers visually along the tool's Microsoft Direct3D time line, while the tool debugs the application. These visual notes allow users of such a tool to navigate to parts of the time line that are of interest, or to understand what set of Direct3D calls are produced by certain sections of the application's code.</p> + <p>The methods of <strong>{{ID3DUserDefinedAnnotation}}</strong> have no effect when the calling application is not running under a Direct3D-specific profiling tool like Visual Studio Ultimate?2012. +</p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is published by Microsoft Direct3D?11 device contexts. Therefore, <strong>{{ID3DUserDefinedAnnotation}}</strong> has the same threading rules as the <strong>{{ID3D11DeviceContext}}</strong> interface, or any other context interface. For more information about Direct3D threading, see MultiThreading. +To retrieve the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface for the context, call the <strong>QueryInterface</strong> method for the context (for example, <strong>{{ID3D11DeviceContext::QueryInterface}}</strong>). In this call, you must pass the identifier of <strong>{{ID3DUserDefinedAnnotation}}</strong>. </p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is the Microsoft Direct3D?10 and later equivalent of the Direct3D 9 {{PIX}} functions ({{D3DPERF_}}* functions).</p><strong>Note</strong>??Setting the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag in your app replaces calling {{D3DPerf_SetOptions}}(1). But, to prevent Direct3D debugging tools from hooking your app, your app can also call <strong>{{ID3DUserDefinedAnnotation::GetStatus}}</strong> to determine whether it is running under a Direct3D debugging tool and then exit accordingly.?<p>You must call the <strong>BeginEvent</strong> and <strong>EndEvent</strong> methods in pairs; pairs of calls to these methods can nest within pairs of calls to these methods at a higher level in the application's call stack. In other words, a "Draw World" section can entirely contain another section named "Draw Trees," which can in turn entirely contain a section called "Draw Oaks." You can only associate an <strong>EndEvent</strong> method with the most recent <strong>BeginEvent</strong> method, that is, pairs cannot overlap. You cannot call an <strong>EndEvent</strong> for any <strong>BeginEvent</strong> that preceded the most recent <strong>BeginEvent</strong>. In fact, the runtime interprets the first <strong>EndEvent</strong> as ending the second <strong>BeginEvent</strong>.</p> + + + + <p>Marks the beginning of a section of event code.</p> + <p>You call the <strong>EndEvent</strong> method to mark the end of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>BeginEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to <strong>BeginEvent</strong> that have not yet been finalized by calls to the <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> method.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Marks the end of a section of event code.</p> + <p>You call the <strong>BeginEvent</strong> method to mark the beginning of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>EndEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> method that have not yet been finalized by calls to <strong>EndEvent</strong>.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + + <p>Marks a single point of execution in code.</p> + <p>A user can visualize the marker when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>SetMarker</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>This method returns no values.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the marker. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Determines whether the calling application is running under a Microsoft Direct3D profiling tool.</p> + <p>You can call <strong>GetStatus</strong> to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface. For example, the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> and <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.</p> + <p>The return value is nonzero if the calling application is running under a Direct3D profiling tool such as Visual Studio Ultimate?2012, and zero otherwise.</p> + + + + <p>Identifies how to perform a tile-mapping operation.</p> + + + <dd> <p>Indicates that no overwriting of tiles occurs in the tile-mapping operation.</p> </dd> + + + + + <p>Specifies a range of tile mappings to use with <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong>.</p> + + + + <p>Identifies how to check multisample quality levels.</p> + + + <dd> <p>Indicates to check the multisample quality levels of a tiled resource.</p> </dd> + + + + + <p>Identifies how to copy a tile.</p> + + + <dd> <p>Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the +specified buffer location, reading tiles sequentially, +to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), +to the specified buffer location, deswizzling to linear memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. +</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + + + <dd> <p>The x position of a tiled resource. Used for buffer and 1D, 2D, and 3D textures.</p> </dd> + + + <dd> <p>The y position of a tiled resource. Used for 2D and 3D textures.</p> </dd> + + + <dd> <p>The z position of a tiled resource. Used for 3D textures.</p> </dd> + + + <dd> <p>A subresource index value into mipmaps and arrays. Used for 1D, 2D, and 3D textures. </p> <p>For mipmaps that use nonstandard tiling, or are packed, or both use nonstandard tiling and are packed, any subresource value that indicates any of the packed mipmaps all refer to the same tile.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p>Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once.</p> <p>Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>bUseBox</strong>, you use a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p>When the region includes mipmaps that are packed with nonstandard tiling, <strong>bUseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0.</p> </dd> + + + <dd> <p>The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. </p> </dd> + + + <dd> <p>The height of the tiled region, in tiles. Used for 2D and 3D textures. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p>Each packed mipmap is individually reported as 0 for <strong>WidthInTiles</strong>, <strong>HeightInTiles</strong> and <strong>DepthInTiles</strong>. +</p><p>The total number of tiles in subresources is <strong>WidthInTiles</strong>*<strong>HeightInTiles</strong>*<strong>DepthInTiles</strong>. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> <p> <strong>GetResourceTiling</strong> sets <strong>StartTileIndexInOverallResource</strong> to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff) to indicate that the whole +<strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless, and the info to which the <em>pPackedMipDesc</em> parameter of <strong>GetResourceTiling</strong> points applies. For packed tiles, the description of the packed mipmaps comes from a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure instead. +</p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p>Texels are equivalent to pixels. For untyped buffer resources, a texel is just a byte. For multisample antialiasing ({{MSAA}}) surfaces, the numbers are still in terms of pixels/texels. +The values here are independent of the surface dimensions. Even if the surface is smaller than what would fit in a tile, the full tile dimensions are reported here. +</p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p>Describes the tile structure of a tiled resource with mipmaps. </p> + + + <dd> <p>Number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p>Number of packed mipmaps in the tiled resource. </p> <p>This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no +such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same +packing. +</p> <p>On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions +are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one +dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser +mipmaps for a given array slice are considered packed as well. +</p> </dd> + + + <dd> <p>Number of tiles for the packed mipmaps in the tiled resource. </p> <p>If there is no packing, this value is meaningless and is set to 0. +Otherwise, it is set to the number of tiles +that are needed to represent the set of packed mipmaps. +The pixel layout within the packed mipmaps is hardware specific. +If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. +For arrays, this value is only the count of packed mipmaps within +the subresources for each array slice.</p> </dd> + + + <dd> <p>Offset of the first packed tile for the resource +in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this +value is meaningless and is 0. Otherwise, it is the +offset of the first packed tile for the resource in the overall +range of tiles for the resource. A value of 0 for +<strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. +For array surfaces, this is the offset for the tiles that contain the packed +mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset +past the beginning of the tiles for each array slice. </p> <strong>Note</strong>??The +number of overall tiles, packed or not, for a given array slice is +simply the total number of tiles for the resource divided by the +resource's array size, so it is easy to locate the range of tiles for +any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies +which of those are packed. ? </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext2}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext1}}</strong>.</p> + + + + <p>Updates mappings of tile locations in tiled resources to memory locations in a tile pool.</p> + <p>In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of tile-pool tiles. </p><p>You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update:</p><ul> <li><strong>Tiled resource whose mappings are updated.</strong> This is a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Mappings start off all {{NULL}} when a resource is initially created.</li> <li><strong>Set of tile regions on the tiled resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <em>NumTiledResourceRegions</em> specifies how many regions there are, <em>pTiledResourceRegionStartCoordinates</em> and <em>pTiledResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumTiledResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pTiledResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pTiledResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire tiled resource, including all mipmaps, array slices, or both. <p>If <em>pTiledResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pTiledResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pTiledResourceRegionStartCoordinates</em> without having to send an array of <em>pTiledResourceRegionSizes</em> all set to 1.</p> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Tile pool that provides memory where tile mappings can go.</strong> A tiled resource can point to a single tile pool at a time. If a new tile pool is specified (for the first time or different from the last time a tile pool was specified), all existing tile mappings for the tiled resource are cleared and the new set of mappings in the current <strong>UpdateTileMappings</strong> call are applied for the new tile pool. If no tile pool is specified ({{NULL}}) or the same tile pool as a previous <strong>UpdateTileMappings</strong> call is provided, the <strong>UpdateTileMappings</strong> call just adds the new mappings to existing ones (overwriting on overlap). If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a tile pool because it is irrelevant. But if you specify a tile pool anyway, it takes the same behavior as previously described when providing a tile pool. </li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a tile pool (default), a count of tiles in the tiled resource to map to a single tile in a tile pool (sharing the tile), a count of tile mappings in the tiled resource to skip and leave as they are, or a count of tiles in the tile pool to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described tiled resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each tiled resource tile specified has a mapping specified.</p> <p><em>pRangeFlags</em>, <em>pTilePoolStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the tile pool; otherwise, for each range i, pRangeFlags[i] identifies how the mappings in that range of tiles work:</p> <ul> <li>If pRangeFlags[i] is 0, that range defines sequential tiles in the tile pool, with the number of tiles being pRangeTileCounts[i] and the starting location pTilePoolStartOffsets[i]. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_REUSE_SINGLE_TILE}}</strong>, pTilePoolStartOffsets[i] identifies the single tile in the tile pool to map to, and pRangeTileCounts[i] specifies how many tiles from the tile regions to map to that tile pool location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_NULL}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. pTilePoolStartOffsets[i] is ignored for {{NULL}} mappings. </li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_SKIP}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. pTilePoolStartOffsets[i] is ignored for {{SKIP}} mappings.</li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> means the caller promises that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. This allows the device to avoid having to flush previously submitted work in order to do the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources still being referenced by outstanding commands, undefined rendering behavior results, which includes the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to tile mapping data structure itself, which in hardware is a page table. The absence of this flag requires that tile mapping updates specified by this <strong>UpdateTileMappings</strong> call must be completed before any subsequent Direct3D command can proceed.</li> </ul><p>If tile mappings have changed on a tiled resource that the app will render via <strong>RenderTargetView</strong> or <strong>DepthStencilView</strong>, the app must clear, by using the fixed function <strong>Clear</strong> {{APIs}}, the tiles that have changed within the area being rendered (mapped or not). If an app doesn't clear in these situations, the app receives undefined values when it reads from the tiled resource. +</p><strong>Note</strong>??In Direct3D 11.2, hardware can now support <strong>ClearView</strong> on depth-only formats. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.?<p>If an app needs to preserve existing memory contents of areas in a tiled resource where mappings have changed, the app can first save the contents where tile mappings have changed, by copying them to a temporary surface, for example using <strong>CopyTiles</strong>, issuing the required <strong>Clear</strong>, and then copying the contents back. +</p><p>Suppose a tile is mapped into multiple tiled resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the tiled resources. Then, if the same tile is to be rendered via any other tiled resource, the tile must be cleared first as previously described. +</p><p>For more info about tiled resources, see Tiled resources.</p><p>Here are some examples of common <strong>UpdateTileMappings</strong> cases:</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags result in the call being dropped.<p>The debug layer will emit an error.</p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.<p>If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Apps can avoid this situation by only doing update calls that change existing mappings from tiled resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).</p> </li> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. </li> </ul> + + + <dd> <p>A reference to the tiled resource.</p> </dd> + + + <dd> <p>The number of tiled resource regions.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p>A reference to the tile pool.</p> </dd> + + + <dd> <p>The number of tile-pool ranges.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_RANGE_FLAG}}</strong> values that describe each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p>An array of offsets into the tile pool. These are 0-based tile offsets, counting in tiles (not bytes).</p> </dd> + + + <dd> <p>An array of tiles. </p> <p> An array of values that specify the number of tiles in each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source tiled resource to a destination tiled resource.</p> + <p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across tiled resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temp location and then from there written to the destination.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags or passing in non Tiled Resources result in the call being dropped. <p> The dest and the source regions must each entirely fit in their resource or behavior is undefined (debug layer will emit an error). </p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory. <p> If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Applications can avoid this situation by only doing update calls that change existing mappings from Tiled Resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping). </p> </li> </ul> + + + <dd> <p>A reference to the destination tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination tiled resource. </p> </dd> + + + <dd> <p>A reference to the source tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong>, which indicates that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. The device can then avoid having to flush previously submitted work to perform the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources that are still being referenced by outstanding commands, undefined rendering behavior results, including the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to the tile mapping data structure itself (which in hardware is a page table). The absence of the <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> value requires that tile mapping updates that <strong>CopyTileMappings</strong> specifies must be completed before any subsequent Direct3D command can proceed. </p> </dd> + + + + + <p>Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on <strong>Tier_1</strong> tiled resources, where reading and writing unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain. </p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> or <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance. </p><p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Updates tiles by copying from app memory to the tiled resource. </p> + <p><strong>UpdateTiles</strong> drops write operations to unmapped areas (except on <strong>Tier_1</strong> tiled resources, where writing to unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p>The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain.</p><p>The memory layout of the data on the source side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> or <strong>UpdateTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource to update.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region.</p> </dd> + + + <dd> <p>A reference to memory that contains the source tile data that <strong>UpdateTiles</strong> uses to update the tiled resource.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_COPY_NO_OVERWRITE}}</strong>. The other values aren't meaningful here, though +by definition the <strong>{{D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE}}</strong> value is basically what <strong>UpdateTiles</strong> does, but sources from app memory. +</p> </dd> + + + + + <p>Resizes a tile pool.</p> + <p><strong>ResizeTilePool</strong> increases or decreases the size of the tile pool depending on whether the app needs more or less working set for the tiled resources that are mapped into it. An app can allocate additional tile pools for new tiled resources, but if any single tiled resource needs more space than initially available in its tile pool, the app can increase the size of the resource's tile pool. A tiled resource can't have mappings into multiple tile pools simultaneously. </p><p>When you increase the size of a tile pool, additional tiles are added to the end of the tile pool via one or more new allocations by the driver; your app can't detect the breakdown into the new allocations. Existing memory in the tile pool is left untouched, and existing tiled resource mappings into that memory remain intact.</p><p>When you decrease the size of a tile pool, tiles are removed from the end (this is allowed even below the initial allocation size, down to 0). This means that new mappings can't be made past the new size. But, existing mappings past the end of the new size remain intact and useable. The memory is kept active as long as mappings to any part of the allocations that are being used for the tile pool memory remains. If after decreasing, some memory has been kept active because tile mappings are pointing to it and the tile pool is increased again (by any amount), the existing memory is reused first before any additional allocations occur to service the size of the increase. </p><p>To be able to save memory, an app has to not only decrease a tile pool but also remove and remap existing mappings past the end of the new smaller tile pool size.</p><p>The act of decreasing (and removing mappings) doesn't necessarily produce immediate memory savings. Freeing of memory depends on how granular the driver's underlying allocations for the tile pool are. When a decrease in the size of a tile pool happens to be enough to make a driver allocation unused, the driver can free the allocation. If a tile pool was increased and if you then decrease to previous sizes (and remove and remap tile mappings correspondingly), you will most likely yield memory savings. But, this scenario isn't guaranteed in the case that the sizes don't exactly align with the underlying allocation sizes chosen by the driver. </p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns <strong>{{E_INVALIDARG}}</strong> if the new tile pool size isn't a multiple of 64 {{KB}} or 0.</li> <li>Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.</li> <li>Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.</li> </ul><p>For <strong>{{E_INVALIDARG}}</strong> or <strong>{{E_OUTOFMEMORY}}</strong>, the existing tile pool remains unchanged, which includes existing mappings. </p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong> for the tile pool to resize.</p> </dd> + + + <dd> <p>The new size in bytes of the tile pool. The size must be a multiple of 64 {{KB}} or 0.</p> </dd> + + + + + <p>Specifies a data access ordering constraint between multiple tiled resources. For more info about this constraint, see Remarks.</p> + <p>Apps can use tiled resources to reuse tiles in different resources. But, a device and driver might not be able to determine whether some memory in a tile pool that was just rendered to is now being used for reading. +</p><p>For example, an app can render to some tiles in a tile pool with one tiled resource but then read from the same tiles by using a different tiled resource. These tiled-resource operations are different from using one resource and then just switching from writing with <strong>{{ID3D11RenderTargetView}}</strong> to reading with <strong>{{ID3D11ShaderResourceView}}</strong>. The runtime already tracks and handles these one resource operations using <strong>{{ID3D11RenderTargetView}}</strong> and <strong>{{ID3D11ShaderResourceView}}</strong>. +</p><p>When an app transitions from accessing (reading or writing) some location in a tile pool with one resource to accessing the same memory (read or write) via another tiled resource (with mappings to the same memory), the app must call <strong>TiledResourceBarrier</strong> after the first use of the resource and before the second. The parameters are the <em>pTiledResourceOrViewAccessBeforeBarrier</em> for accesses before the barrier (via rendering, copying), and the <em>pTiledResourceOrViewAccessAfterBarrier</em> for accesses after the barrier by using the same tile pool memory. If the resources are identical, the app doesn't need to call <strong>TiledResourceBarrier</strong> because this kind of hazard is already tracked and handled. +</p><p>The barrier call informs the driver that operations issued to the resource before the call must complete before any accesses that occur after the call via a different tiled resource that shares the same memory. +</p><p>Either or both of the parameters (before or after the barrier) can be <strong>{{NULL}}</strong>. <strong>{{NULL}}</strong> before the barrier means all tiled resource accesses before the barrier must complete before the resource specified after the barrier can be referenced by the graphics processing unit ({{GPU}}). <strong>{{NULL}}</strong> after the barrier means that any tiled resources accessed after the barrier can only be executed by the {{GPU}} after accesses to the tiled resources before the barrier are finished. Both <strong>{{NULL}}</strong> means all previous tiled resource accesses are complete before any subsequent tiled resource access can proceed. +</p><p>An app can pass a view reference, a resource, or <strong>{{NULL}}</strong> for each parameter. Views are allowed not only for convenience but also to allow the app to scope the barrier effect to a relevant portion of a resource. +</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must complete before the access operations on the object that <em>pTiledResourceOrViewAccessAfterBarrier</em> specifies.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must begin after the access operations on the object that <em>pTiledResourceOrViewAccessBeforeBarrier</em> specifies.</p> </dd> + + + + + <p> Allows apps to determine when either a capture or profiling request is enabled.</p> + <p>Returns <strong>{{TRUE}}</strong> if the capture tool is present and capturing or the app is being profiled such that <strong>SetMarkerInt</strong> or <strong>BeginEventInt</strong> will be logged to <strong>{{ETW}}</strong>. Otherwise, it returns <strong>{{FALSE}}</strong>. Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so. </p><p>If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.</p> + <p>Returns <strong>{{TRUE}}</strong> if capture or profiling is enabled and <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Allows applications to annotate graphics commands.</p> + <p><strong>SetMarkerInt</strong> allows applications to annotate graphics commands, in order to provide more context to what the {{GPU}} is executing. When {{ETW}} logging or a support tool is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the beginning of a range of graphics commands.</p> + <p><strong>BeginEventInt</strong> allows applications to annotate the beginning of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When <strong>{{ETW}}</strong> logging (or a supported tool) is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the end of a range of graphics commands.</p> + <p><strong>EndEvent</strong> allows applications to annotate the end of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When the appropriate <strong>{{ETW}}</strong> logging is not enabled, this method does nothing. When {{ETW}} logging is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines.</p> + <p>This method does not return a value.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device2}}</strong> adds new methods to those in <strong>{{ID3D11Device1}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists. </p> + <p>The <strong>GetImmediateContext2</strong> method returns an <strong>{{ID3D11DeviceContext2}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext2</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device, <strong>CreateDeferredContext2</strong> fails with <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>, and you can't create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext2</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext2</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p>Gets info about how a tiled resource is broken into tiles.</p> + <p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the tiled resource to get info about.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_TILE_SHAPE}}</strong> to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. </p> <p> If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> to zeros, except the <strong>StartTileIndexInOverallResource</strong> member, which <strong>GetResourceTiling</strong> sets to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff). The <strong>{{D3D11_PACKED_TILE}}</strong> constant indicates that the whole <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When you multisample a texture, the number of quality levels available for an adapter is dependent on the texture format that you use and the number of samples that you request. The maximum number of quality levels is defined by <strong>{{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}}</strong> in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format during multisampling. </p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. Currently, only <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE}}</strong> is supported. </p> </dd> + + + <dd> <p>A reference to a variable the receives the number of quality levels supported by the adapter. See Remarks.</p> </dd> + + + + + <p>Specifies the context in which a query occurs.</p> + <p> This enum is used by the following: </p><ul> <li> <strong>{{D3D11_QUERY_DESC1}}</strong> structure </li> <li> A {{CD3D11_QUERY_DESC1}} constructor.</li> <li> <strong>{{ID3D11DeviceContext3::Flush1}}</strong> method </li> </ul> + + + <dd> <p>The query can occur in all contexts.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D command queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D compute queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D copy queue.</p> </dd> + + + <dd> <p>The query occurs in the context of video.</p> </dd> + + + + + <p>Specifies texture layout options.</p> + <p>This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong> to ensure that each option is supported.</p><p>The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p>To demonstrate, consider the 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant.</p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000 +</code><p>To compute the swizzled address, the following code could be used (where the _pdep_u32 instruction is supported):</p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask); +</code> + + + <dd> <p>The texture layout is undefined, and is selected by the driver.</p> </dd> + + + <dd> <p>Data for the texture is stored in row major (sometimes called pitch-linear) order.</p> </dd> + + + <dd> <p>A default texture uses the standardized swizzle pattern.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting TextureLayout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}. </p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may only be used to create non-multisampled, textures with a single subresource (Planar {{YUV}} textures are supported). These textures may only be used as a source and destination of copy operations, and BindFlags must be zero. +</p> <p>{{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may only be used to create non-multisampled, non-depth-stencil textures. </p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting Layout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}.</p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may not be used with 3D textures. {{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may not be used with 3D textures that have mipmaps.</p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>A <strong>{{D3D11_FILL_MODE}}</strong>-typed value that determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_CULL_MODE}}</strong>-typed value that indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + <dd> <p>A <strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and (<strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1 ). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and ( <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView1::GetDesc1}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_SRV}}</strong> structure that views the resource as a buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_SRV1}}</strong> structure that views the resource as a 2D-texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_SRV1}}</strong> structure that views the resource as a 2D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV}}</strong> structure that views the resource as a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render-target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong> to create a render target.</p><p>A render-target-view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_RTV_DIMENSION}}</strong>-typed value that specifies the resource type and how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_RTV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_RTV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_UAV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_UAV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>A <strong>{{D3D11_QUERY}}</strong>-typed value that specifies the type of query.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies query behavior. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_CONTEXT_TYPE}}</strong>-typed value that specifies the context for the query.</p> </dd> + + + + + <p>A 2D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE2D_DESC1}}</strong> structure that receives the description of the 2D texture.</p> </dd> + + + + + <p>A 3D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE3D_DESC1}}</strong> structure that receives the description of the 3D texture.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count and conservative rasterization mode.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_RASTERIZER_DESC2}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count and conservative rasterization mode. </p> </dd> + + + + + <p>A shader-resource-view interface represents the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Gets the shader-resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that receives the description of the shader-resource view.</p> </dd> + + + + + <p>A render-target-view interface represents the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A render target is a resource that can be written by the output-merger stage at the end of a render pass. Each render target can also have a corresponding depth-stencil view.</p> + + + + <p>Gets the properties of a render-target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> structure that receives the description of the render-target view.</p> </dd> + + + + + <p>An unordered-access-view interface represents the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Gets a description of the resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC1}}</strong> structure that receives the description of the unordered-access resource.</p> </dd> + + + + + <p>Represents a query object for querying information from the graphics processing unit ({{GPU}}).</p> + <p>A query can be created with <strong>{{ID3D11Device3::CreateQuery1}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Gets a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that receives a description of the query.</p> </dd> + + + + + <p> The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext3}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext2}}</strong>. </p> + + + + <p> Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}), with a specified context type and an optional event handle to create an event query. </p> + <p><strong>Flush1</strong> has parameters. For more information, see <strong>{{ID3D11DeviceContext::Flush}}</strong>, which doesn't have parameters. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D11_CONTEXT_TYPE}}</strong> that specifies the context in which a query occurs, such as a 3D command queue, 3D compute queue, 3D copy queue, video, or image. </p> </dd> + + + <dd> <p> An optional event handle. When specified, this method creates an event query. </p> <p><strong>Flush1</strong> operates asynchronously, therefore it can return either before or after the {{GPU}} finishes executing the queued graphics commands, which will eventually complete. To create an event query, you can call <strong>{{ID3D11Device::CreateQuery}}</strong> with the value <strong>{{D3D11_QUERY_EVENT}}</strong> value. To determine when the {{GPU}} is finished processing the graphics commands, you can then use that event query in a call to <strong>{{ID3D11DeviceContext::GetData}}</strong>. </p> </dd> + + + + + <p> Sets the hardware protection state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies whether to enable hardware protection. </p> </dd> + + + + + <p> Gets whether hardware protection is enabled. </p> + <p> This method does not return a value. </p> + + + <dd> <p> After this method returns, points to a {{BOOL}} that indicates whether hardware protection is enabled. </p> </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + + + + + + + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11DeviceContext4}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11DeviceContext4}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + + + + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device3}}</strong> adds new methods to those in <strong>{{ID3D11Device2}}</strong>.</p> + + + + <p>Creates a 2D texture.</p> + <p><strong>CreateTexture2D1</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of subresources is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a 3D texture.</p> + <p><strong>CreateTexture3D1</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the shader-resource view. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}}</strong> flag.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that describes a shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11ShaderResourceView1}}</strong> interface for the created shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Creates a view for accessing an unordered access resource. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the unordered-access view. See Direct3D 11 Return Codes for other possible return values. </p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11RenderTargetView1}}</strong> interface for the created render-target view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p>Creates a query object for querying information from the graphics processing unit ({{GPU}}). </p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that represents a query description.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11Query1}}</strong> interface for the created query object. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Gets an immediate context, which can play back command lists. </p> + <p> The <strong>GetImmediateContext3</strong> method outputs an <strong>{{ID3D11DeviceContext3}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene. </p><p> The <strong>GetImmediateContext3</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext3</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext3</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p> Copies data into a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p> Copies data from a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [Bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When reading from sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offseting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p>Describes Direct3D 11.4 feature options in the current graphics driver.</p> + <p>Use this structure with the {{D3D11_FEATURE_D3D11_OPTIONS4}} member of <strong>{{D3D11_FEATURE}}</strong>. </p><p>Refer to the section on {{NV12}} in Direct3D 11.4 Features.</p> + + + <dd> <p>Specifies a {{BOOL}} that determines if {{NV12}} textures can be shared across processes and {{D3D}} devices.</p> </dd> + + + + + <p> The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device4}}</strong> adds new methods to those in <strong>{{ID3D11Device3}}</strong>, such as <strong>RegisterDeviceRemovedEvent</strong> and <strong>UnregisterDeviceRemoved</strong>. </p> + + + + <p> Registers the "device removed" event and indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism. </p> + <p>Indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism, rather than as an {{HRESULT}} from <strong>Present</strong>. The reason for device removal can be retrieved using <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> after being notified of the occurrence.</p><p> Applications register and un-register a Win32 event handle with a particular device. That event handle will be signaled when the device becomes removed. A poll into the device's <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> method indicates that the device is removed. </p><p> <strong>{{ISignalableNotifier}}</strong> or <strong>SetThreadpoolWait</strong> can be used by {{UWP}} apps. </p><p> When the graphics device is lost, the app or title will receive the graphics event, so that the app or title knows that its graphics device is no longer valid and it is safe for the app or title to re-create its DirectX devices. In response to this event, the app or title needs to re-create its rendering device and pass it into a SetRenderingDevice call on the composition graphics device objects. </p><p> After setting this new rendering device, the app or title needs to redraw content of all the pre-existing surfaces after the composition graphics device's <strong>OnRenderingDeviceReplaced</strong> event is fired. </p><p> This method supports Composition for device loss. </p><p> The event is not signaled when it is most ideal to re-create. So, instead, we recommend iterating through the adapter ordinals and creating the first ordinal that will succeed. </p><p> The application can register an event with the device. The application will be signaled when the device becomes removed. </p><p> If the device is already removed, calls to <strong>RegisterDeviceRemovedEvent</strong> will signal the event immediately. No device-removed error code will be returned from <strong>RegisterDeviceRemovedEvent</strong>. </p><p> Each "device removed" event is never signaled, or is signaled only once. These events are not signaled during device destruction. These events are unregistered during destruction. </p><p> The semantics of <strong>RegisterDeviceRemovedEvent</strong> are similar to <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong>. </p> + <p> See Direct3D 11 Return Codes. </p> + + + <dd> <p> The handle to the "device removed" event. </p> </dd> + + + <dd> <p> A reference to information about the "device removed" event, which can be used in <strong>UnregisterDeviceRemoved</strong> to unregister the event. </p> </dd> + + + + + <p> Unregisters the "device removed" event. </p> + <p> See <strong>RegisterDeviceRemovedEvent</strong>. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Information about the "device removed" event, retrieved during a successful <strong>RegisterDeviceRemovedEvent</strong> call. </p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11Device5}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11Device5}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device5}}</strong> adds new methods to those in <strong>{{ID3D11Device4}}</strong>.</p><strong>Note</strong>??This interface, introduced in the Windows 10 Creators Update, is the latest version of the <strong>{{ID3D11Device}}</strong> interface. Applications targetting Windows 10 Creators Update should use this interface instead of earlier versions.? + + + + <p>Provides threading protection for critical sections of a multi-threaded application.</p> + <p>This interface is obtained by querying it from an immediate device context created with the <strong>{{ID3D11DeviceContext}}</strong> (or later versions of this) interface using {{IUnknown::QueryInterface}}.</p><p>Unlike {{D3D10}}, there is no multithreaded layer in {{D3D11}}. By default, multithread protection is turned off. Use <strong>SetMultithreadProtected</strong> to turn it on, then <strong>Enter</strong> and <strong>Leave</strong> to encapsulate graphics commands that must be executed in a specific order.</p><p>By default in {{D3D11}}, applications can only use one thread with the immediate context at a time. But, applications can use this interface to change that restriction. The interface can turn on threading protection for the immediate context, which will increase the overhead of each immediate context call in order to share one context with multiple threads.</p> + + + + <p>Enter a device's critical section.</p> + <p>If <strong>SetMultithreadProtected</strong> is set to true, then entering a device's critical section prevents other threads from simultaneously calling that device's methods, calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>Leave</strong> is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>Enter</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Turns multithread protection on or off.</p> + <p>True if multithread protection was already turned on prior to calling this method, false otherwise. </p> + + + <dd> <p>Set to true to turn multithread protection on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithread protection is turned on or not.</p> + <p>Returns true if multithread protection is turned on, false otherwise. </p> + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + + + + + + + + + + + + + <p>Specifies the type of a command list.</p> + <p>This enum is used by the following methods:</p><ul> <li> <strong>CreateCommandAllocator</strong> </li> <li> <strong>CreateCommandQueue</strong> </li> <li> <strong>CreateCommandList</strong> </li> </ul> + + + <dd> <p>Specifies a command buffer that the {{GPU}} can execute. A direct command list doesn't inherit any {{GPU}} state. </p> </dd> + + + <dd> <p>Specifies a command buffer that can be executed only directly via a direct command list. A bundle command list inherits all {{GPU}} state (except for the currently set pipeline state object and primitive topology).</p> </dd> + + + <dd> <p>Specifies a command buffer for computing. </p> </dd> + + + <dd> <p>Specifies a command buffer for copying (drawing).</p> </dd> + + + + + <p>Specifies flags to be used when creating a command queue.</p> + <p> This enum is used by the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates a default command queue.</p> </dd> + + + <dd> <p>Indicates that the {{GPU}} timeout should be disabled for this command queue.</p> </dd> + + + + + <p>Defines priority levels for a command queue.</p> + <p> This enumeration is used by the <strong>Priority</strong> member of the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Normal priority.</p> </dd> + + + <dd> <p>High priority.</p> </dd> + + + + + <p>Specifies how the pipeline interprets geometry or hull shader input primitives.</p> + <p>This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader has not been initialized with an input primitive type.</p> </dd> + + + <dd> <p>Interpret the input primitive as a point.</p> </dd> + + + <dd> <p>Interpret the input primitive as a line. </p> </dd> + + + <dd> <p>Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p>Interpret the input primitive as a control point patch.</p> </dd> + + + + + <p>Identifies the type of data contained in an input slot.</p> + <p> Specify one of these values in the member of a <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structure to specify the type of data for the input element of a pipeline state object. </p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Specifies the fill mode to use when rendering triangles.</p> + <p> Fill mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Specifies triangles facing a particular direction are not drawn.</p> + <p> Cull mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Specifies comparison options.</p> + <p> A comparison option determines how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for </p><ul> <li> a depth-stencil buffer (<strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>) </li> <li> depth-stencil operations (<strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong>) </li> <li> sampler state (<strong>{{D3D12_SAMPLER_DESC}}</strong>) </li> </ul> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identifies the portion of a depth-stencil buffer for writing depth data.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> structure.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>Identifies the stencil operations that can be performed during depth-stencil testing.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Specifies blend factors, which modulate values for the pixel shader and render target.</p> + <p>Source and destination blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>Specifies {{RGB}} or alpha blending operations.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>{{D3D12_BLEND}}</strong> value controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>{{D3D12_BLEND_OP}}</strong> value controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identifies which components of each pixel of a render target are writable during blending.</p> + <p> This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. </p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>Specifies logical operations to configure for a render target.</p> + <p>This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + <p>This enum is used by the <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p> When using triangle strip primitive topology, vertex positions are interpreted as vertices of a continuous triangle ?strip?. There is a special index value that represents the desire to have a discontinuity in the strip, the cut index value. This enum lists the supported cut values. +</p> + <p> This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates that there is no cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFF should be used as the cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFFFFFF should be used as the cut value. </p> </dd> + + + + + <p> Flags to control pipeline state. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structures. </p> + + + <dd> <p> Indicates no flags. </p> </dd> + + + <dd> <p> Indicates that the pipeline state should be compiled with additional information to assist debugging. This can only be set on {{WARP}} devices. +</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + + + + <p> Describes minimum precision support options for shaders in the current graphics driver. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> The returned info just indicates that the graphics hardware can perform {{HLSL}} operations at a lower precision than the standard 32-bit float precision, but doesn?t guarantee that the graphics hardware will actually run at a lower precision. </p> + + + <dd> <p>The driver supports only full 32-bit precision for all shader stages.</p> </dd> + + + <dd> <p>The driver supports 10-bit precision.</p> </dd> + + + <dd> <p>The driver supports 16-bit precision.</p> </dd> + + + + + <p> Identifies the tier level at which tiled resources are supported. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> There are three discrete pieces of functionality bundled together for tiled resource functionality: </p><ul> <li> A tile-based texture layout option where nearby texel addresses contain nearby data coordinates. A tile of texels contains nearly the same amount of texels in each cardinal dimension of the resource. This layout is represented in {{D3D12}} by <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </li> <li> Reserve a region of virtual address space for a resource, where each page is initially {{NULL}}-mapped. In {{D3D12}}, this is operation is encapsulated within <strong>{{ID3D12Device::CreateReservedResource}}</strong>, which only works with textures that have the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. </li> <li> The ability to change page mappings and manipulate texture data on tile granularities. In {{D3D12}}, these operations are <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>, <strong>{{ID3D12CommandQueue::CopyTileMappings}}</strong>, and <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong>. </li> </ul><p> Three significant changes over {{D3D11}} are: </p><ul> <li> Tile pools are replaced by heaps. Heaps provide a superset of capabilities than {{D3D11}} tile pools do. </li> <li> Reserved resources may be mapped to pages from multiple heaps at the same time. The {{D3D11}} restriction that all non-{{NULL}} mapped pages must come from the same heap does not exist. </li> <li> Applications should be aware of {{GPU}} virtual address capabilities, which enable litmus tests for particular usage scenarios. See <strong>{{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>. </li> </ul> + + + <dd> <p> Indicates that textures cannot be created with the <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong> layout. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> cannot be used, not even for buffers. </p> </dd> + + + <dd> <p> Indicates that 2D textures can be created with the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. Limitations exist for certain resource formats and properties. For more details, see <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> can be used. </p> <p> {{GPU}} reads or writes to {{NULL}} mappings are undefined. Applications are encouraged to workaround this limitation by repeatedly mapping the same page to everywhere a {{NULL}} mapping would've been used. </p> <p> When the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier_1 functionality is supported, including this additional support: </p> <ul> <li> When the size of a texture mipmap level is at least one standard tile shape for its format, the mipmap level is guaranteed to be nonpacked. For more info, see <strong>{{D3D12_PACKED_MIP_INFO}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see Sample(S,float,int,float,uint). <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> <p> Adapters that support feature level 12_0 all support {{TIER_2}} or greater. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier 2 is supported, with the addition that 3D textures (Volume Tiled Resources) are supported. </p> </dd> + + + + + + + + <p>Identifies the tier level of conservative rasterization.</p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is not supported.</p> </dd> + + + <dd> <p>Tier 1 enforces a maximum 1/2 pixel uncertainty region and does not support post-snap degenerates. This is good for tiled rendering, a texture atlas, light map generation and sub-pixel shadow maps.</p> </dd> + + + <dd> <p> Tier 2 reduces the maximum uncertainty region to 1/256 and requires post-snap degenerates not be culled. This tier is helpful for {{CPU}}-based algorithm acceleration (such as voxelization).</p> </dd> + + + <dd> <p> Tier 3 maintains a maximum 1/256 uncertainty region and adds support for inner input coverage. Inner input coverage adds the new value <code>{{SV_InnerCoverage}}</code> to High Level Shading Language ({{HLSL}}). This is a 32-bit scalar integer that can be specified on input to a pixel shader, and represents the underestimated conservative rasterization information (that is, whether a pixel is guaranteed-to-be-fully covered). This tier is helpful for occlusion culling.</p> </dd> + + + + + <p>Specifies resources that are supported for a provided format.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No resources are supported.</p> </dd> + + + <dd> <p>Buffer resources supported.</p> </dd> + + + <dd> <p>Vertex buffers supported.</p> </dd> + + + <dd> <p>Index buffers supported.</p> </dd> + + + <dd> <p>Streaming output buffers supported.</p> </dd> + + + <dd> <p>1D texture resources supported.</p> </dd> + + + <dd> <p>2D texture resources supported.</p> </dd> + + + <dd> <p>3D texture resources supported.</p> </dd> + + + <dd> <p>Cube texture resources supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Load</strong> function for texture objects is supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Sample</strong> function for texture objects is supported.</p> <strong>Note</strong>??If the device supports the format as a resource (1D, 2D, 3D, or cube map) but doesn't support this option, the resource can still use the Sample method but must use only the point filtering sampler state to perform the sample. ? </dd> + + + <dd> <p>The {{HLSL}} <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> functions for texture objects are supported.</p> <strong>Note</strong>??Windows?8 and later might provide limited support for these functions on Direct3D feature levels 9_1, 9_2, and 9_3. For more info, see Implementing shadow buffers for Direct3D feature level 9. + ? </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Mipmaps are supported.</p> </dd> + + + <dd> <p>Render targets are supported.</p> </dd> + + + <dd> <p>Blend operations supported.</p> </dd> + + + <dd> <p>Depth stencils supported.</p> </dd> + + + <dd> <p>Multisample antialiasing ({{MSAA}}) resolve operations are supported. For more info, see <strong>{{ID3D12GraphicsCommandList::ResolveSubresource}}</strong>. </p> </dd> + + + <dd> <p>Format can be displayed on screen.</p> </dd> + + + <dd> <p>Format can't be cast to another format.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled render target.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled texture and read into a shader with the {{HLSL}} <strong>Load</strong> function.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather function. This value is available in DirectX 10.1 or higher.</p> </dd> + + + <dd> <p>Format supports casting when the resource is a back buffer.</p> </dd> + + + <dd> <p>Format can be used for an unordered access view.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather with comparison function.</p> </dd> + + + <dd> <p>Format can be used with the decoder output.</p> </dd> + + + <dd> <p>Format can be used with the video processor output.</p> </dd> + + + <dd> <p>Format can be used with the video processor input.</p> </dd> + + + <dd> <p>Format can be used with the video encoder.</p> </dd> + + + + + <p> Specifies which unordered resource options are supported for a provided format. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No unordered resource options are supported.</p> </dd> + + + <dd> <p>Format supports atomic add.</p> </dd> + + + <dd> <p>Format supports atomic bitwise operations.</p> </dd> + + + <dd> <p>Format supports atomic compare with store or exchange.</p> </dd> + + + <dd> <p>Format supports atomic exchange.</p> </dd> + + + <dd> <p>Format supports atomic min and max.</p> </dd> + + + <dd> <p>Format supports atomic unsigned min and max.</p> </dd> + + + <dd> <p>Format supports a typed load.</p> </dd> + + + <dd> <p>Format supports a typed store.</p> </dd> + + + <dd> <p>Format supports logic operations in blend state.</p> </dd> + + + <dd> <p> Format supports tiled resources. Refer to Volume Tiled Resources. </p> </dd> + + + <dd> <p> Format supports multi-plane overlays. </p> </dd> + + + + + <p> Specifies options for determining quality levels. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS}}</strong> structure. </p> + + + <dd> <p> No options are supported. </p> </dd> + + + <dd> <p> The number of quality levels can be determined for tiled resources. </p> </dd> + + + + + <p> Specifies the level of sharing across nodes of an adapter, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> + <p> This enum is used by the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p> If an adapter only has 1 node, then cross-node sharing doesn't apply, so the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure is set to {{D3D12_CROSS_NODE_SHARING_NOT_SUPPORTED}}. </p> </dd> + + + <dd> <p> Tier 1 Emulated. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED}} have Tier 1 support. However, drivers stage these copy operations through a driver-internal system memory allocation. This will cause these copy operations to consume time on the destination {{GPU}} as well as the source. </p> </dd> + + + <dd> <p> Tier 1. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1}} only support the following cross-node copy operations: </p> <ul> <li> <strong>{{ID3D12CommandList::CopyBufferRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyTextureRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyResource}}</strong> </li> </ul> <p> Additionally, the cross-node resource must be the destination of the copy operation. </p> </dd> + + + <dd> <p> Tier 2. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_2}} support all operations across nodes, except for the following: </p> <ul> <li> Render target views. </li> <li> Depth stencil views. </li> <li> {{UAV}} atomic operations. Similar to {{CPU}}/{{GPU}} interop, shaders may perform {{UAV}} atomic operations; however, no atomicity across adapters is guaranteed. </li> </ul> <p> Applications can retrieve the node where a resource/heap exists from the <strong>{{D3D12_HEAP_DESC}}</strong> structure. These values are retrievable for opened resources. The runtime performs the appropriate re-mapping in case the 2 devices are using different {{UMD}}-specified node re-mappings. </p> </dd> + + + + + <p> Specifies which resource heap tier the hardware and driver support. </p> + <p> This enum is used by the <strong>ResourceHeapTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> This enum specifies which resource heap tier the hardware and driver support. Lower tiers require more heap attribution than greater tiers. </p><p> Resources can be categorized into the following types: </p><ul> <li>Buffers</li> <li>Non-render target &amp; non-depth stencil textures</li> <li>Render target or depth stencil textures</li> </ul> + + + <dd> <p> Indicates that heaps can only support resources from a single resource category. For the list of resource categories, see Remarks. In tier 1, these resource categories are mutually exclusive and cannot be used with the same heap. The resource category must be declared when creating a heap, using the correct <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constant. Applications cannot create heaps with flags that allow all three categories. </p> </dd> + + + <dd> <p> Indicates that heaps can support resources from all three categories. For the list of resource categories, see Remarks. In tier 2, these resource categories can be mixed within the same heap. Applications may create heaps with flags that allow all three categories; but are not required to do so. Applications may be written to support tier 1 and seamlessly run on tier 2. </p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p>Specifies the version of root signature layout.</p> + <p> This enum is used by the following structures and methods.</p><ul> <li> <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> </li> <li> <strong>{{D3D12_FEATURE_DATA_ROOT_SIGNATURE}}</strong> </li> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>{{D3D12SerializeRootSignature}}</strong> </li> </ul> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version 1.1 of root signature layout. Refer to Root Signature Version 1.1.</p> </dd> + + + + + <p>Specifies a shader model.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_SHADER_MODEL}}</strong> structure.</p> + + + <dd> <p>Indicates shader model 5.1.</p> </dd> + + + <dd> <p>Indicates shader model 6.0.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies the type of heap. When resident, heaps reside in a particular physical memory pool with certain {{CPU}} cache properties. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> </li> <li> <strong>{{D3D12_HEAP_PROPERTIES}}</strong> </li> <li> <strong>GetCustomHeapProperties</strong> </li> </ul><p> The heap types fall into two categories: abstracted heap types, and custom heap types. </p><p> The following are abstracted heap types: </p><ul> <li>{{D3D12_HEAP_TYPE_DEFAULT}}</li> <li>{{D3D12_HEAP_TYPE_UPLOAD}}</li> <li>{{D3D12_HEAP_TYPE_READBACK}}</li> </ul><p> The following is a custom heap type: </p><ul> <li>{{D3D12_HEAP_TYPE_CUSTOM}}</li> </ul><p> The abstracted heap types (_DEFAULT, _UPLOAD, and _READBACK) are useful to simplify writing adapter-neutral applications, because such applications don't need to be aware of the adapter memory architecture. To use an abstracted heap type to simplify writing adapter-neutral applications, the application essentially treats the adapter as if it were a discrete or {{NUMA}} adapter. But, using the heap types enables efficient translation for {{UMA}} adapters. Adapter architecture neutral applications should assume there are two memory pools available, where the pool with the most {{GPU}} bandwidth cannot provide {{CPU}} access. The pool with the least {{GPU}} bandwidth can have {{CPU}} access; but must be either optimized for upload to {{GPU}} or readback from {{GPU}}. </p> + + + <dd> <p> Specifies the default heap. This heap type experiences the most bandwidth for the {{GPU}}, but cannot provide {{CPU}} access. The {{GPU}} can read and write to the memory from this pool, and resource transition barriers may be changed. The majority of heaps and resources are expected to be located here, and are typically populated through resources in upload heaps. </p> </dd> + + + <dd> <p> Specifies a heap used for uploading. This heap type has {{CPU}} access optimized for uploading to the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{CPU}}-write-once, {{GPU}}-read-once data; but {{GPU}}-read-once is stricter than necessary. {{GPU}}-read-once-or-from-cache is an acceptable use-case for the data; but such usages are hard to judge due to differing {{GPU}} cache designs and sizes. If in doubt, stick to the {{GPU}}-read-once definition or profile the difference on many {{GPUs}} between copying the data to a _DEFAULT heap vs. reading the data from an _UPLOAD heap. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ and cannot be changed away from this. The {{CPU}} address for such heaps is commonly not efficient for {{CPU}} reads. </p> <p> The following are typical usages for _UPLOAD heaps: </p> <ul> <li> Initializing resources in a _DEFAULT heap with data from the {{CPU}}. </li> <li> Uploading dynamic data in a constant buffer that is read, repeatedly, by each vertex or pixel. </li> </ul> <p> The following are likely not good usages for _UPLOAD heaps: </p> <ul> <li> Re-initializing the contents of a resource every frame. </li> <li> Uploading constant data which is only used every other Draw call, where each Draw uses a non-trivial amount of other data. </li> </ul> </dd> + + + <dd> <p> Specifies a heap used for reading back. This heap type has {{CPU}} access optimized for reading data back from the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{GPU}}-write-once, {{CPU}}-readable data. The {{CPU}} cache behavior is write-back, which is conducive for multiple sub-cache-line {{CPU}} reads. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_COPY_DEST, and cannot be changed away from this. </p> </dd> + + + <dd> <p> Specifies a custom heap. The application may specify the memory pool and {{CPU}} cache properties directly, which can be useful for {{UMA}} optimizations, multi-engine, multi-adapter, or other special cases. To do so, the application is expected to understand the adapter architecture to make the right choice. For more details, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE, <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>, and <strong>GetCustomHeapProperties</strong>. </p> </dd> + + + + + <p>Specifies the {{CPU}}-page properties for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p> + + + <dd> <p>The {{CPU}}-page property is unknown.</p> </dd> + + + <dd> <p> The {{CPU}} cannot access the heap, therefore no page properties are available. </p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-combined.</p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-back.</p> </dd> + + + + + <p>Specifies the memory pool for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p><p>When the adapter is {{UMA}}, {{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory. When</p><p> the adapter is not {{UMA:}} +{{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL}} refer to the same memory. +{{D3D12_MEMORY_POOL_L1}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory.</p> + + + <dd> <p> The memory pool is unknown. </p> </dd> + + + <dd> <p> The memory pool is {{L0}}. {{L0}} is the physical system memory pool. When the adapter is discrete/{{NUMA}}, this pool has greater bandwidth for the {{CPU}} and less bandwidth for the {{GPU}}. When the adapter is {{UMA}}, this pool is the only one which is valid. </p> </dd> + + + <dd> <p> The memory pool is {{L1}}. {{L1}} is typically known as the physical video memory pool. {{L1}} is only available when the adapter is discrete/{{NUMA}}, and has greater bandwidth for the {{GPU}} and cannot even be accessed by the {{CPU}}. When the adapter is {{UMA}}, this pool is not available. </p> </dd> + + + + + <p> Specifies heap options, such as whether the heap can contain textures, and whether resources are shared across adapters. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{ID3D12Device::CreateHeap}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> </ul><p> The following heap flags must be used with <strong>{{ID3D12Device::CreateHeap}}</strong>, but will be set automatically for implicit heaps created by <strong>{{ID3D12Device::CreateCommittedResource}}</strong>. </p><p> Adapters that only support <strong>heap tier 1</strong> must set two out of the three following flags. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_BUFFERS}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_BUFFER}} (which is a <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> enumeration constant). </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} together with either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. (The latter two items are <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants.) </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} and {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are absent. </td></tr> </table><p>?</p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The heap is shared. Refer to Shared Heaps.</p> </dd> + + + <dd> <p> The heap isn't allowed to contain buffers. </p> </dd> + + + <dd> <p> The heap is allowed to contain swap-chain surfaces. </p> </dd> + + + <dd> <p> The heap is allowed to share resources across adapters. Refer to Shared Heaps. </p> </dd> + + + <dd> <p> The heap is not allowed to store Render Target ({{RT}}) and/or Depth-Stencil ({{DS}}) textures. </p> </dd> + + + <dd> <p>The heap is not allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are present. Refer to <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> and <strong>{{D3D12_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>_</p> </dd> + + + <dd> <p> The heap is allowed to store all types of buffers and/or textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store buffers. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store non-{{RT}}, non-{{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store {{RT}} and/or {{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p> Specifies texture layout options. </p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p><p> This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> to ensure that each option is supported. </p><p> The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p> To demonstrate, consider the 2D 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant: </p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000</code><p> To compute the swizzled address, the following code could be used (where the <strong>_pdep_u32</strong> intrinsic instruction is supported): </p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask);</code> + + + <dd> <p> Indicates that the layout is unknown, and is likely adapter-dependent. During creation, the driver chooses the most efficient layout based on other resource properties, especially resource size and flags. Prefer this choice unless certain functionality is required from another texture layout. </p> <p> Zero-copy texture upload optimizations exist for {{UMA}} architectures; see <strong>{{ID3D12Resource::WriteToSubresource}}</strong>. </p> </dd> + + + <dd> <p> Indicates that data for the texture is stored in row-major order (sometimes called "pitch-linear order"). </p> <p> This texture layout locates consecutive texels of a row contiguously in memory, before the texels of the next row. Similarly, consecutive texels of a particular depth or array slice are contiguous in memory before the texels of the next depth or array slice. Padding may exist between rows and between depth or array slices to align collections of data. A stride is the distance in memory between rows, depth, or array slices; and it includes any padding. </p> <p> This texture layout enables sharing of the texture data between multiple adapters, when other layouts aren't available. </p> <p> Many restrictions apply, because this layout is generally not efficient for extensive usage: </p> <ul> <li> The locality of nearby texels is not rotationally invariant. </li> <li> Only the following texture properties are supported: <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE_2D. </li> <li> A single mip level. </li> <li> A single array slice. </li> <li> 64KB alignment. </li> <li> Non-{{MSAA}}. </li> <li> No <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL. </li> <li> The format cannot be a {{YUV}} format. </li> </ul> </li> <li> The texture must be created on a heap with <strong>{{D3D12_HEAP_FLAG}}</strong>_SHARED_CROSS_ADAPTER. </li> </ul> <p> Buffers are created with <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR, because row-major texture data can be located in them without creating a texture object. This is commonly used for uploading or reading back texture data, especially for discrete/{{NUMA}} adapters. However, <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR can also be used when marshaling texture data between {{GPUs}} or adapters. For examples of usage with <strong>{{ID3D12GraphicsCommandList::CopyTextureRegion}}</strong>, see some of the following topics: </p> <ul> <li> Default Texture Mapping and Standard Swizzle </li> <li> Predication </li> <li> Synchronization and Multi-Engine </li> <li> Uploading Texture Data </li> </ul> </dd> + + + <dd> <p> Indicates that the layout within 64KB tiles and tail mip packing is up to the driver. No standard swizzle pattern. </p> <p> This texture layout is arranged into contiguous 64KB regions, also known as tiles, containing near equilateral amount of consecutive number of texels along each dimension. Tiles are arranged in row-major order. While there is no padding between tiles, there are typically unused texels within the last tile in each dimension. The layout of texels within the tile is undefined. Each subresource immediately follows where the previous subresource end, and the subresource order follows the same sequence as subresource ordinals. However, tail mip packing is adapter-specific. For more details, see tiled resource tier and <strong>{{ID3D12Device::GetResourceTiling}}</strong>. </p> <p> This texture layout enables partially resident or sparse texture scenarios when used together with virtual memory page mapping functionality. This texture layout must be used together with <strong>{{ID3D12Device::CreateReservedResource}}</strong> to enable the usage of <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> <p> Some restrictions apply to textures with this layout: </p> <ul> <li> The adapter must support <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong> 1 or greater. </li> <li> 64KB alignment must be used. </li> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D is not supported, nor are all formats. </li> <li> The tiled resource tier indicates whether textures with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE3D is supported. </li> </ul> </dd> + + + <dd> <p> Indicates that a default texture uses the standardized swizzle pattern. </p> <p> This texture layout is arranged the same way that {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} is, except that the layout of texels within the tile is defined. Tail mip packing is adapter-specific. </p> <p> This texture layout enables optimizations when marshaling data between multiple adapters or between the {{CPU}} and {{GPU}}. The amount of copying can be reduced when multiple components understand the texture memory layout. This layout is generally more efficient for extensive usage than row-major layout, due to the rotationally invariant locality of neighboring texels. This layout can typically only be used with adapters that support standard swizzle, but exceptions exist for cross-adapter shared heaps. </p> <p> The restrictions for this layout are that the following aren't supported: </p> <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D </li> <li> Multi-sample anti-aliasing ({{MSAA}}) </li> <li> <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL </li> <li> Formats within the <strong>{{DXGI_FORMAT}}</strong>_R32G32B32_TYPELESS group </li> </ul> </dd> + + + + + <p> Specifies options for working with resources. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p>Allows a render target view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_RENDER_TARGET}}. Some adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth during common rendering. This characteristic may not be beneficial for textures that are never rendered to, nor is it available for textures compressed with {{BC}} formats. Applications should avoid setting this flag when rendering will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li> Either the texture format must support render target capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support render target capabilities at the current feature level.</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}. +</li> <li>Cannot be used with 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}, nor usage with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}.</li> </ul> </dd> + + + <dd> <p>Allows a depth stencil view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_DEPTH_WRITE}} and/or {{D3D12_RESOURCE_STATE_DEPTH_READ}}. Most adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth and maximize optimizations for early depth-test. Applications should avoid setting this flag when depth operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support depth stencil capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support depth stencil capabilities at the current feature level.</li> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}, 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}, {{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}, {{D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS}}, {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}}, {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}}, nor used with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}} or {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}. +</li> <li>Precludes usage of <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong>. +</li> <li>Precludes {{GPU}} copying of a subregion. <strong>CopyTextureRegion</strong> must copy a whole subresource to or from resources with this flag.</li> </ul> </dd> + + + <dd> <p>Allows an unordered access view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}. Some adapter architectures must resort to less efficient texture layouts in order to provide this functionality. If a texture is rarely used for unordered access, it may be worth having two textures around and copying between them. One texture would have this flag, while the other wouldn't. Applications should avoid setting this flag when unordered access operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support unordered access capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support unordered access capabilities at the current feature level. +</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}, nor when the feature level is less than 11.0. +</li> <li>Cannot be used with {{MSAA}} textures. </li> </ul> </dd> + + + <dd> <p>Disallows a shader resource view to be created for the resource, as well as disables the resource to transition into the state of {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}. Some adapter architectures experience increased bandwidth for depth stencil textures when shader resource views are precluded. If a texture is rarely used for shader resource, it may be worth having two textures around and copying between them. One texture would have this flag and the other wouldn't. Applications should set this flag when depth stencil textures will never be used from shader resource views. +</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. +</li> </ul> </dd> + + + <dd> <p>Allows the resource to be used for cross-adapter data, as well as the same features enabled by {{ALLOW_SIMULTANEOUS_ACCESS}}. Cross adapter resources commonly preclude techniques that reduce effective texture bandwidth during usage, and some adapter architectures may require different caching behavior. Applications should avoid setting this flag when the resource data will never be used with another adapter.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with heaps that have {{D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER}}.</li> <li>Cannot be used with heaps that have {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}.</li> </ul> </dd> + + + <dd> <p>Allows a resource to be simultaneously accessed by multiple different queues, devices or processes (for example, allows a resource to be used with <strong>ResourceBarrier</strong> transitions performed in more than one command list executing at the same time). </p> <p>Simultaneous access allows multiple readers and one writer, as long as the writer doesn't concurrently modify the texels that other readers are accessing. Some adapter architectures cannot leverage techniques to reduce effective texture bandwidth during usage. </p> <p>However, applications should avoid setting this flag when multiple readers are not required during frequent, non-overlapping writes to textures. Use of this flag can compromise resource fences to perform waits, and prevents any compression being used with a resource.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}; but buffers always have the properties represented by this flag. +</li> <li>Cannot be used with {{MSAA}} textures.</li> </ul> </dd> + + + + + <p> Specifies a range of tile mappings. </p> + <p> Use these flags with <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p> The tile range is <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Skip the tile range. </p> </dd> + + + <dd> <p> Reuse a single tile in the tile range. </p> </dd> + + + + + <p> Specifies how to perform a tile-mapping operation. </p> + <p> This enum is used by the following methods:</p><ul> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> </ul> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p>Unsupported, do not use. </p> </dd> + + + + + <p> Specifies how to copy a tile. </p> + <p> This enum is used by the <strong>CopyTiles</strong> method. </p> + + + <dd> <p> No tile-copy flags are specified. </p> </dd> + + + <dd> <p> Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the specified buffer location, reading tiles sequentially, to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), to the specified buffer location, deswizzling to linear memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. </p> </dd> + + + + + <p> Specifies the state of a resource regarding how the resource is being used. </p> + <p> This enum is used by the following methods: </p><ul> <li> <strong>CreateCommittedResource</strong> </li> <li> <strong>CreatePlacedResource</strong> </li> <li> <strong>CreateReservedResource</strong> </li> </ul> + + + <dd> <p>Applications should only transition to this state for accessing a resource across different graphics engine types.</p> <p>Specifically, a resource must be in the {{COMMON}} state before being used on a {{COPY}} queue (when previous used on {{DIRECT}}/{{COMPUTE}}), and before being used on {{DIRECT}}/{{COMPUTE}} (when previously used on {{COPY}}). This restriction does not exist when accessing data between {{DIRECT}} and {{COMPUTE}} queues.</p> <p>The {{COMMON}} state can be used for all usages on a Copy queue using the implicit state transitions. For more information, in Synchronization and Multi-Engine, find "common". </p> <p>Additionally, textures must be in the {{COMMON}} state for {{CPU}} access to be legal, assuming the texture was created in a {{CPU}}-visible heap in the first place.</p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as a vertex buffer or constant buffer. This is a read-only state. </p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as an index buffer. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as a render target. A subresource must be in this state when it is rendered to or when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong>. This is a write-only state. To read from a render target as a shader resource the resource must be in either {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}.</p> </dd> + + + <dd> <p> The resource is used for unordered access. A subresource must be in this state when it is accessed by the 3D pipeline via an unordered access view. A subresource must also be in this state when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewInt}}</strong> or <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong>. This is a read/write state. </p> </dd> + + + <dd> <p>{{DEPTH_WRITE}} is a state which is mutually exclusive with other states. It should be used for <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> when the flags (see <strong>{{D3D12_CLEAR_FLAGS}}</strong>) indicate a given subresource should be cleared (otherwise the subresource state doesn't matter), or when using it in a writable depth stencil view (see <strong>{{D3D12_DSV_FLAGS}}</strong>) when the {{PSO}} has depth write enabled (see <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>). +</p> </dd> + + + <dd> <p>{{DEPTH_READ}} is a state which can be combined with other states. It should be used when the subresource is in a read-only depth stencil view, or when the <em>DepthEnable</em> parameter of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> is false. It can be combined with other read states (for example, {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}), such that the resource can be used for the depth or stencil test, and accessed by a shader within the same draw call. Using it when depth will be written by a draw call or clear command is invalid.</p> </dd> + + + <dd> <p> The resource is used with a shader other than the pixel shader. A subresource must be in this state before being read by any stage (except for the pixel shader stage) via a shader resource view. You can still use the resource in a pixel shader with this flag as long as it also has the flag {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}} set. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with a pixel shader. A subresource must be in this state before being read by the pixel shader via a shader resource view. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with stream output. A subresource must be in this state when it is accessed by the 3D pipeline as a stream-out target. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as an indirect argument. Subresources must be in this state when they are used as the argument buffer passed to the indirect drawing method <strong>{{ID3D12GraphicsCommandList::ExecuteIndirect}}</strong>. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a copy operation. Subresources must be in this state when they are used as the destination of copy operation, or a blt operation. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as the source in a copy operation. Subresources must be in this state when they are used as the source of copy operation, or a blt operation. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a resolve operation. </p> </dd> + + + <dd> <p> The resource is used as the source in a resolve operation. </p> </dd> + + + <dd> <p>This is the required starting state for upload heaps. Applications should generally avoid this state when possible, and instead transition resources to only the actually-used states.</p> </dd> + + + <dd> <p> Synonymous with {{D3D12_RESOURCE_STATE_COMMON}}. </p> </dd> + + + <dd> <p> The resource is used for Predication. </p> </dd> + + + + + <p>Specifies a type of resource barrier (transition in resource use) description.</p> + <p>This enum is used in the <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong> structure. Use these values with the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method.</p> + + + <dd> <p>A transition barrier that indicates a transition of a set of subresources between different usages. The caller must specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p>An aliasing barrier that indicates a transition between usages of 2 different resources that have mappings into the same tile pool. The caller can specify both the before and the after resource. Note that one or both resources can be <strong>{{NULL}}</strong>, which indicates that any tiled resource could cause aliasing.</p> </dd> + + + <dd> <p>An unordered access view ({{UAV}}) barrier that indicates all {{UAV}} accesses (reads or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Flags for setting split resource barriers. </p> + <p>Split barriers allow a single transition to be split into begin and end halves (refer to Synchronization and Multi-Engine).</p><p> This enum is used by the <em>Flags</em> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p> + + + <dd> <p> No flags. </p> </dd> + + + <dd> <p> This starts a barrier transition in a new state, putting a resource in a temporary no-access condition. </p> </dd> + + + <dd> <p> This barrier completes a transition, setting a new state and restoring active access to a resource.</p> </dd> + + + + + <p>Specifies what type of texture copy is to take place.</p> + <p>This enum is used by the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure.</p> + + + <dd> <p>Indicates a subresource, identified by an index, is to be copied.</p> </dd> + + + <dd> <p>Indicates a place footprint, identified by a <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure, is to be copied.</p> </dd> + + + + + <p>Specifies a resolve operation.</p> + <p>This enum is used by the <strong>{{ID3D12GraphicsCommandList1::ResolveSubresourceRegion}}</strong> function.</p> + + + <dd> <p>Resolves compressed source samples to their uncompressed values. When using this operation, the source and destination resources must have the same sample count, unlike the min, max, and average operations that require the destination to have a sample count of 1.</p> </dd> + + + <dd> <p>Resolves the source samples to their minimum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their maximum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their average value. It can be used with any non-integer render target format, including the depth plane. It can't be used with integer render target formats, including the stencil plane.</p> </dd> + + + + + <p> Specifies how memory gets routed by a shader resource view ({{SRV}}). </p> + <p> This enum allows the {{SRV}} to select how memory gets routed to the four return components in a shader after a memory fetch. The options for each shader component [0..3] (corresponding to {{RGBA}}) are: component 0..3 from the {{SRV}} fetch result or force 0 or force 1. </p><p> The default 1:1 mapping can be indicated by specifying {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}}, otherwise an arbitrary mapping can be specified using the macro {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}. See below. </p><p>Note the following defines:</p><code>#define {{D3D12_SHADER_COMPONENT_MAPPING_MASK}} 0x7 +#define {{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}} 3 +#define {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}} (1&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*4)) +#define {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(Src0,Src1,Src2,Src3) ((((Src0)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})| \ (((Src1)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;{{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}})| \ (((Src2)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*2))| \ (((Src3)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*3))| \ {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}})) +#define {{D3D12_DECODE_SHADER_4_COMPONENT_MAPPING}}(ComponentToExtract,Mapping) (({{D3D12_SHADER_COMPONENT_MAPPING}})(Mapping &gt;&gt; ({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*ComponentToExtract) &amp; {{D3D12_SHADER_COMPONENT_MAPPING_MASK}})) +#define {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}} {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(0,1,2,3) +</code> + + + <dd> <p> Indicates return component 0 (red). </p> </dd> + + + <dd> <p> Indicates return component 1 (green). </p> </dd> + + + <dd> <p> Indicates return component 2 (blue). </p> </dd> + + + <dd> <p> Indicates return component 3 (alpha). </p> </dd> + + + <dd> <p> Indicates forcing the resulting value to 0. </p> </dd> + + + <dd> <p> Indicates forcing the resulting value 1. The value of forcing 1 is either 0x1 or 1.0f depending on the format type for that component in the source format. </p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p> This enumeration is used by <strong>{{D3D12_BUFFER_SRV}}</strong>. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies the type of resource that will be viewed as a shader resource.</p> + <p>These values are used by a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + + + <p>Specifies filtering options during texture sampling.</p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure.</p><strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>Microsoft High Level Shader Language ({{HLSL}}) texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><p>Also note the following defines:</p><code>#define {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ( 0x3 ) #define {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ( 7 ) #define {{D3D12_FILTER_TYPE_MASK}} ( 0x3 ) #define {{D3D12_MIN_FILTER_SHIFT}} ( 4 ) #define {{D3D12_MAG_FILTER_SHIFT}} ( 2 ) #define {{D3D12_MIP_FILTER_SHIFT}} ( 0 ) #define {{D3D12_ANISOTROPIC_FILTERING_BIT}} ( 0x40 ) #define {{D3D12_ENCODE_BASIC_FILTER}}( min, mag, mip, reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ ( ( ( min ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIN_FILTER_SHIFT}} ) | \ ( ( ( mag ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MAG_FILTER_SHIFT}} ) | \ ( ( ( mip ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIP_FILTER_SHIFT}} ) | \ ( ( ( reduction ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) &lt;&lt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) ) ) +#define {{D3D12_ENCODE_ANISOTROPIC_FILTER}}( reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ {{D3D12_ANISOTROPIC_FILTERING_BIT}} | \ {{D3D12_ENCODE_BASIC_FILTER}}( {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ reduction ) ) ) +#define {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIN_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MAG_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIP_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_REDUCTION_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_IS_COMPARISON_FILTER}}( {{D3D12Filter}} ) \ ( {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) == {{D3D12_FILTER_REDUCTION_TYPE_COMPARISON}} ) +#define {{D3D12_DECODE_IS_ANISOTROPIC_FILTER}}( {{D3D12Filter}} ) \ ( ( ( {{D3D12Filter}} ) &amp; {{D3D12_ANISOTROPIC_FILTERING_BIT}} ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) ) ) </code><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td> <strong>Sample</strong> </td><td> <strong>SampleCmp</strong> or <strong>SampleCmpLevelZero</strong> </td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following formats: <strong>{{DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R32_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_R24_UNORM_X8_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R16_UNORM}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Specifies the type of magnification or minification sampler filters. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>Point filtering is used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.</p> </dd> + + + <dd> <p>Bilinear interpolation filtering is used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p>Specifies the type of filter reduction. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>The filter type is standard.</p> </dd> + + + <dd> <p>The filter type is comparison.</p> </dd> + + + <dd> <p>The filter type is minimum.</p> </dd> + + + <dd> <p>The filter type is maximum.</p> </dd> + + + + + <p> Identifies a technique for resolving texture coordinates that are outside of the boundaries of a texture. </p> + <p> This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times. </p> </dd> + + + <dd> <p> Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D12_SAMPLER_DESC}}</strong> or {{HLSL}} code. </p> </dd> + + + <dd> <p> Similar to <strong>{{D3D12_TEXTURE_ADDRESS_MODE_MIRROR}}</strong> and <strong>{{D3D12_TEXTURE_ADDRESS_MODE_CLAMP}}</strong>. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. </p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + <p> This enum is used in the <strong>{{D3D12_BUFFER_UAV}}</strong> structure. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> Resource contains raw, unstructured data. Requires the {{UAV}} format to be <strong>{{DXGI_FORMAT_R32_TYPELESS}}</strong>. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies unordered-access view options.</p> + <p> Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure. </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies the type of resource to view as a render target.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Specifies depth-stencil view options.</p> + <p> Specify a combination of the values in this enumeration in the <strong>Flags</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure. The values are combined by using a bitwise {{OR}} operation. </p><p> Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have read/write conflicts between separate views. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p><strong>{{D3D12_DSV_DIMENSION_UNKNOWN}}</strong> is not a valid value for <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multi sampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multi sampling.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies fence options. </p> + <p> This enum is used by the <strong>{{ID3D12Device::CreateFence}}</strong> method. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The fence is shared. </p> </dd> + + + <dd> <p> The fence is shared with another {{GPU}} adapter. </p> </dd> + + + + + <p> Specifies a type of descriptor heap. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure, and the following methods:</p><ul> <li> <strong>CopyDescriptors</strong> </li> <li> <strong>CopyDescriptorsSimple</strong> </li> <li> <strong>GetDescriptorHandleIncrementSize</strong> </li> </ul> + + + <dd> <p> The descriptor heap for the combination of constant-buffer, shader-resource, and unordered-access views. </p> </dd> + + + <dd> <p> The descriptor heap for the sampler. </p> </dd> + + + <dd> <p> The descriptor heap for the render-target view. </p> </dd> + + + <dd> <p> The descriptor heap for the depth-stencil view. </p> </dd> + + + <dd> <p> The number of types of descriptor heaps. </p> </dd> + + + + + <p>Specifies options for a heap.</p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates default usage of a heap.</p> </dd> + + + <dd> <p>The flag {{D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE}} can optionally be set on a descriptor heap to indicate it is be bound on a command list for reference by shaders. Descriptor heaps created <em>without</em> this flag allow applications the option to stage descriptors in {{CPU}} memory before copying them to a shader visible descriptor heap, as a convenience. But it is also fine for applications to directly create descriptors into shader visible descriptor heaps with no requirement to stage anything on the {{CPU}}.</p> <p>This flag only applies to {{CBV}}, {{SRV}}, {{UAV}} and samplers. It does not apply to other descriptor heap types since shaders do not directly reference the other types. </p> </dd> + + + + + <p> Specifies a range so that, for example, if part of a descriptor table has 100 shader-resource views ({{SRVs}}) that range can be declared in one entry rather than 100. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structure. </p> + + + <dd> <p> Specifies a range of {{SRVs}}. </p> </dd> + + + <dd> <p> Specifies a range of unordered-access views ({{UAVs}}). </p> </dd> + + + <dd> <p> Specifies a range of constant-buffer views ({{CBVs}}). </p> </dd> + + + <dd> <p> Specifies a range of samplers. </p> </dd> + + + + + <p>Specifies the shaders that can access the contents of a given root signature slot.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure.</p><p>The compute queue always uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> because it has only one active stage. The 3D queue can choose values, but if it uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong>, all shader stages can access whatever is bound at the root signature slot.</p> + + + <dd> <p>Specifies that all shader stages can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the vertex shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the hull shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the domain shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the geometry shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the pixel shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + + + <p> Specifies the type of root signature slot. </p> + <p> This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure. </p> + + + <dd> <p> The slot is for a descriptor table. </p> </dd> + + + <dd> <p> The slot is for root constants. </p> </dd> + + + <dd> <p> The slot is for a constant-buffer view ({{CBV}}). </p> </dd> + + + <dd> <p> The slot is for a shader-resource view ({{SRV}}). </p> </dd> + + + <dd> <p> The slot is for a unordered-access view ({{UAV}}). </p> </dd> + + + + + <p> Specifies options for root signature layout. </p> + <p> This enum is used in the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p><p>The value in denying access to shader stages is a minor optimization on some hardware. If, for example, the <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> flag has been set to broadcast the root signature to all shader stages, then denying access can overrule this and save the hardware some work. Alternatively if the shader is so simple that no root signature resources are needed, then denying access could be used here too.</p> + + + <dd> <p> Indicates default behavior. </p> </dd> + + + <dd> <p> The app is opting in to using the Input Assembler (requiring an input layout that defines a set of vertex buffer bindings). Omitting this flag can result in one root argument space being saved on some hardware. Omit this flag if the Input Assembler is not required, though the optimization is minor. </p> </dd> + + + <dd> <p> Denies the vertex shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the hull shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the domain shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the geometry shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the pixel shader access to the root signature. </p> </dd> + + + <dd> <p> The root signature allows stream output. This flag can be specified for root signatures authored in {{HLSL}}, similar to how the other flags are specified. <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> will fail if the geometry shader contains stream output but the root signature does not have this flag set. Omit this flag if stream output is not required.</p> </dd> + + + + + <p> Specifies the border color for a static sampler. </p> + <p> This enum is used by the <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates black, with the alpha component as fully transparent. </p> </dd> + + + <dd> <p> Indicates black, with the alpha component as fully opaque. </p> </dd> + + + <dd> <p> Indicates white, with the alpha component as fully opaque. </p> </dd> + + + + + <p>Specifies the volatility of both descriptors and the data they reference in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structure.</p><p>To specify the volatility of just the data referenced by descriptors, refer to <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong>.</p> + + + <dd> <p>Default behavior. Descriptors are static, and default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>If this is the only flag set, then descriptors are volatile and default assumptions are made about data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> <p>If this flag is combined with {{DATA_VOLATILE}}, then both descriptors and data are volaille, which is equivalent to Root Signature Version 1.0.</p> <p>If this flag is combined with {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, then descriptors are volatile. This still doesn?t allow them to change during command list execution so it is valid to combine the additional declaration that data is static while set via root descriptor table during execution ? the underlying descriptors are effectively static for longer than the data is being promised to be static.</p> </dd> + + + <dd> <p>Descriptors are static and the data is volatile.</p> </dd> + + + <dd> <p>Descriptors are static and data is static while set at execute.</p> </dd> + + + <dd> <p>Both descriptors and data are static. This maximizes the potential for driver optimization.</p> </dd> + + + + + <p>Specifies the volatility of the data referenced by descriptors in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure.</p><p>To specify the volatility of both descriptors and data, refer to <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong>. </p> + + + <dd> <p>Default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>Data is volatile. Equivalent to Root Signature Version 1.0.</p> </dd> + + + <dd> <p>Data is static while set at execute.</p> </dd> + + + <dd> <p>Data is static. The best potential for driver optimization.</p> </dd> + + + + + <p>Specifies the type of query heap to create.</p> + <p>This enum is used by the <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure.</p> + + + <dd> <p>This returns a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates that the heap is for high-performance timing data. </p> </dd> + + + <dd> <p>Indicates the heap is to contain pipeline data. Refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Indicates the heap is to contain stream output data. Refer to <strong>{{D3D12_QUERY_DATA_SO_STATISTICS}}</strong>.</p> </dd> + + + + + <p>Specifies the type of query.</p> + <p>This enum is used by <strong>BeginQuery</strong>, <strong>EndQuery</strong> and <strong>ResolveQueryData.</strong> </p> + + + <dd> <p>Indicates the query is for depth/stencil occlusion counts.</p> </dd> + + + <dd> <p>Indicates the query is for a binary depth/stencil occlusion statistics. </p> <p>This new query type acts like {{D3D12_QUERY_TYPE_OCCLUSION}} except that it returns simply a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates the query is for high definition {{GPU}} and {{CPU}} timestamps.</p> </dd> + + + <dd> <p>Indicates the query type is for graphics pipeline statistics, refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Stream 0 output statistics. In Direct3D 12 there is no single stream output ({{SO}}) overflow query for all the output streams. Apps need to issue multiple single-stream queries, and then correlate the results. Stream output is the ability of the {{GPU}} to write vertices to a buffer. The stream output counters monitor progress.</p> </dd> + + + <dd> <p>Stream 1 output statistics.</p> </dd> + + + <dd> <p>Stream 2 output statistics.</p> </dd> + + + <dd> <p>Stream 3 output statistics.</p> </dd> + + + + + <p> Specifies the predication operation to apply. </p> + <p> This enum is used by <strong>SetPredication</strong>. </p><p> Predication is decoupled from queries. Predication can be set based on the value of 64-bits within a buffer. </p> + + + <dd> <p> Enables predication if all 64-bits are zero. </p> </dd> + + + <dd> <p> Enables predication if at least one of the 64-bits are not zero. </p> </dd> + + + + + <p> Specifies the type of the indirect parameter. </p> + <p> This enum is used by the <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates the type is a Draw call.</p> </dd> + + + <dd> <p>Indicates the type is a DrawIndexed call.</p> </dd> + + + <dd> <p>Indicates the type is a Dispatch call.</p> </dd> + + + <dd> <p>Indicates the type is a vertex buffer view.</p> </dd> + + + <dd> <p>Indicates the type is an index buffer view.</p> </dd> + + + <dd> <p>Indicates the type is a constant.</p> </dd> + + + <dd> <p>Indicates the type is a constant buffer view ({{CBV}}).</p> </dd> + + + <dd> <p>Indicates the type is a shader resource view ({{SRV}}).</p> </dd> + + + <dd> <p>Indicates the type is an unordered access view ({{UAV}}).</p> </dd> + + + + + <p>Specifies multiple wait flags for multiple fences.</p> + <p>This enum is used by the <strong>SetEventOnMultipleFenceCompletion</strong> method.</p> + + + <dd> <p>Indicates that none of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that any one of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that all the fences need to be waited on.</p> </dd> + + + + + <p>Specifies a residence priority.</p> + <p>This enum is used by the <strong>SetResidencyPriority</strong> method.</p> + + + <dd> <p>Indicates a minimum priority.</p> </dd> + + + <dd> <p>Indicates a low priority.</p> </dd> + + + <dd> <p>Indicates a normal, medium, priority.</p> </dd> + + + <dd> <p>Indicates a high priority, the default.</p> </dd> + + + <dd> <p>Indicates a maximum priority.</p> </dd> + + + + + <p>Describes a command queue.</p> + <p> This structure is passed into <strong>CreateCommandQueue</strong>. </p><p> This structure is returned by <strong>{{ID3D12CommandQueue::GetDesc}}</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>. </p> </dd> + + + <dd> <p> The priority for the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_PRIORITY}}</strong> enumeration constant to select normal or high priority. </p> </dd> + + + <dd> <p> Specifies any flags from the <strong>{{D3D12_COMMAND_QUEUE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the command queue applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Describes a single element for the input-assembler stage of the graphics pipeline.</p> + <p>This structure is a member of the <strong>{{D3D12_INPUT_LAYOUT_DESC}}</strong> structure. A pipeline state object contains a input-layout structure that defines one element being read from an input slot.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name <strong>matrix</strong>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the format of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. For more info, see Input Slots. Valid values are between 0 and 15. </p> </dd> + + + <dd> <p>Optional. Offset, in bytes, between each element. Use {{D3D12_APPEND_ALIGNED_ELEMENT}} (0xffffffff) for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>A value that identifies the input data class for a single input slot.</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to the {{D3D12_INPUT_PER_VERTEX_DATA}} member of <strong>{{D3D12_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + + + <p>Describes a vertex element in a vertex buffer in an output slot.</p> + <p>Specify an array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures in the <strong>pSODeclaration</strong> member of a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Use, for example, if you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>The component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline. The valid range for <strong>OutputSlot</strong> is 0 to 3.</p> </dd> + + + + + <p>Describes the dimensions of a viewport.</p> + <p>Pass an array of these structures to the <em>pViewports</em> parameter in a call to <strong>{{ID3D12GraphicsCommandList::RSSetViewports}}</strong> to set viewports for the display.</p> + + + <dd> <p>X position of the left hand side of the viewport. </p> </dd> + + + <dd> <p>Y position of the top of the viewport. </p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p>Describes a 3D box.</p> + <p> This structure is used by the methods <strong>WriteToSubresource</strong>, <strong>ReadFromSubresource</strong> and <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box, plus 1. This means that <code>right - left</code> equals the width of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box, plus 1. This means that <code>top - bottom</code> equals the height of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box, plus 1. This means that <code>front - back</code> equals the depth of the box.</p> </dd> + + + + + <p>Describes stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D12_STENCIL_OP}}</strong>-typed value. Each stencil operation can be set differently based on the outcome of the stencil test, which is referred to as <strong>StencilFunc</strong>, in the stencil test portion of depth-stencil testing.</p><p>Members of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> have this structure for their data type. </p> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies the function that compares stencil data against existing stencil data. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a depth-stencil-state structure that controls how depth-stencil testing is performed by the output-merger stage. </p><p>This table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D12_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D12_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D12_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D12_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D12_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p> Specifies whether to enable depth testing. Set this member to <strong>{{TRUE}}</strong> to enable depth testing. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_WRITE_MASK}}</strong>-typed value that identifies a portion of the depth-stencil buffer that can be modified by depth data. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies a function that compares depth data against existing depth data. </p> </dd> + + + <dd> <p> Specifies whether to enable stencil testing. Set this member to <strong>{{TRUE}}</strong> to enable stencil testing. </p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D12_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to enable (or disable) blending. Set to <strong>{{TRUE}}</strong> to enable blending.</p> </dd> + + + <dd> <p>Specifies whether to enable (or disable) a logical operation. Set to <strong>{{TRUE}}</strong> to enable a logical operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D12_COLOR_WRITE_ENABLE}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies a write mask.</p> </dd> + + + + + <p>Describes the blend state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a blend-state structure that controls blending by the output-merger stage. </p><p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this structure to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p><p> Note the helper structure, <strong>{{CD3DX12_BLEND_DESC}}</strong>. </p> + + + <dd> <p> Specifies whether to use alpha-to-coverage as a multisampling technique when setting a pixel to a render target. For more info about using alpha-to-coverage, see Alpha-To-Coverage. </p> </dd> + + + <dd> <p> Specifies whether to enable independent blending in simultaneous render targets. Set to <strong>{{TRUE}}</strong> to enable independent blending. If set to <strong>{{FALSE}}</strong>, only the <strong>RenderTarget</strong>[0] members are used; <strong>RenderTarget</strong>[1..7] are ignored. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures that describe the blend states for render targets; these correspond to the eight render targets that can be bound to the output-merger stage at one time. </p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> contains a rasterizer-state structure. </p><p> Rasterizer state defines the behavior of the rasterizer stage. </p><p> If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>{{D3D12_FILL_MODE_SOLID}}</td></tr> <tr><td><strong>CullMode</strong></td><td>{{D3D12_CULL_MODE_BACK}}</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p> + + + <dd> <p> A <strong>{{D3D12_FILL_MODE}}</strong>-typed value that specifies the fill mode to use when rendering. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CULL_MODE}}</strong>-typed value that specifies that triangles facing the specified direction are not drawn. </p> </dd> + + + <dd> <p> Determines if a triangle is front- or back-facing. If this member is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true. </p> </dd> + + + <dd> <p> Depth value added to a given pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Maximum depth bias of a pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Scalar on a given pixel's slope. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Specifies whether to enable clipping based on distance. </p> <p> The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). </p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p> When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. </p> </dd> + + + <dd> <p> Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off. </p> </dd> + + + + + <p>Describes shader data.</p> + <p> The <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> objects contain <strong>{{D3D12_SHADER_BYTECODE}}</strong> structures that describe various shader types. </p> + + + <dd> <p> A reference to a memory block that contains the shader data. </p> </dd> + + + <dd> <p> The size, in bytes, of the shader data that the <strong>pShaderBytecode</strong> member points to. </p> </dd> + + + + + <p>Describes a streaming output buffer.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p> An array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures. Can't be <strong>{{NULL}}</strong> if <strong>NumEntries</strong> &gt; 0. </p> </dd> + + + <dd> <p> The number of entries in the stream output declaration array that the <strong>pSODeclaration</strong> member points to. </p> </dd> + + + <dd> <p> An array of buffer strides; each stride is the size of an element for that buffer. </p> </dd> + + + <dd> <p> The number of strides (or buffers) that the <strong>pBufferStrides</strong> member points to. </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage. </p> </dd> + + + + + <p>Describes the input-buffer data for the input-assembler stage.</p> + <p> This structure is a member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p> An array of <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structures that describe the data types of the input-assembler stage. </p> </dd> + + + <dd> <p> The number of input-data types in the array of input elements that the <strong>pInputElementDescs</strong> member points to. </p> </dd> + + + + + <p>Stores a pipeline state.</p> + <p> This structure is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure, and the <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure.</p><p>This structure is intended to be filled with the data retrieved from <strong>{{ID3D12PipelineState::GetCachedBlob}}</strong>. This cached {{PSO}} contains data specific to the hardware, driver, and machine that it was retrieved from. Compilation using this data should be faster than compilation without. The rest of the data in the {{PSO}} needs to still be valid, and needs to match the cached {{PSO}}, otherwise {{E_INVALIDARG}} might be returned.</p><p>If the driver has been upgraded to a {{D3D12}} driver after the {{PSO}} was cached, you might see a {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} return code, or if you?re running on a different {{GPU}}, the {{D3D12_ERROR_ADAPTER_NOT_FOUND}} return code.</p> + + + <dd> <p> Specifies reference that references the memory location of the cache. </p> </dd> + + + <dd> <p> Specifies the size of the cache in bytes. </p> </dd> + + + + + + + + <p>Describes a compute pipeline state object.</p> + <p> This structure is used by <strong>CreateComputePipelineState</strong>. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_BYTECODE}}</strong> structure that describes the compute shader. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the compute pipeline state is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> A cached pipeline state object, as a <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong> structure. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_PIPELINE_STATE_FLAGS}}</strong> enumeration constant such as for "tool debug". </p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes Direct3D 12 feature options in the current graphics driver. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> Specifies whether <strong>double</strong> types are allowed for shader operations. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The supported operations are equivalent to Direct3D 11's <strong>ExtendedDoublesShaderInstructions</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure. </p> <p> To use any {{HLSL}} shader that is compiled with a <strong>double</strong> type, the runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1 and 12. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all shader stages. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support resource binding. The runtime sets this member to a <strong>{{D3D12_RESOURCE_BINDING_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Specifies whether pixel shader stencil ref is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether the loading of additional formats for typed unordered-access views ({{UAVs}}) is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether <em>Rasterizer Order Views</em> ({{ROVs}}) are supported. If <strong>{{TRUE}}</strong>, they're supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support conservative rasterization. The runtime sets this member to a <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Don't use this field; instead, use the <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> query (a structure with a <strong>MaxGPUVirtualAddressBitsPerResource</strong> member), which is more accurate. </p> </dd> + + + <dd> <p> {{TRUE}} if the hardware supports textures with the 64KB standard swizzle pattern. Support for this pattern enables zero-copy texture optimizations while providing near-equilateral locality for each dimension within the texture. For texture swizzle options and restrictions, see <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CROSS_NODE_SHARING_TIER}}</strong> enumeration constant that specifies the level of sharing across nodes of an adapter that has multiple nodes, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> </dd> + + + <dd> <p> {{FALSE}} means the device only supports copy operations to and from cross-adapter row-major textures. {{TRUE}} means the device supports shader resource views, unordered access views, and render target views of cross-adapter row-major textures. "Cross-adapter" means between multiple adapters (even from different {{IHVs}}). </p> </dd> + + + <dd> <p> Whether the viewport ({{VP}}) and Render Target ({{RT}}) array index from any shader feeding the rasterizer are supported without geometry shader emulation. Compare the <strong>{{VPAndRTArrayIndexFromAnyShaderFeedingRasterizer}}</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong> structure. In <strong>{{ID3D12ShaderReflection::GetRequiresFlags}}</strong>, see the #define {{D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER}}. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver require heap attribution related to resource type. The runtime sets this member to a <strong>{{D3D12_RESOURCE_HEAP_TIER}}</strong> enumeration constant. </p> </dd> + + + + + <p>Describes the level of support for {{HLSL}} 6.0 wave operations.</p> + <p>A "lane" is single thread of execution. The shader models before version 6.0 expose only one of these at the language level, leaving expansion to parallel {{SIMD}} processing entirely up to the implementation. A "wave" is set of lanes (threads) executed simultaneously in the processor. No explicit barriers are required to guarantee that they execute in parallel. Similar concepts include "warp" and "wavefront". +</p><p> This structure is used with the {{D3D12_FEATURE_D3D12_OPTIONS1}} member of <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p>True if the driver supports {{HLSL}} 6.0 wave operations.</p> </dd> + + + <dd> <p>Specifies the baseline number of lanes in the {{SIMD}} wave that this implementation can support. This term is sometimes known as "wavefront size" or "warp width". Currently apps should rely only on this minimum value for sizing workloads. +</p> </dd> + + + <dd> <p>Specifies the maximum number of lanes in the {{SIMD}} wave that this implementation can support. This capability is reserved for future expansion, and is not expected to be used by current applications. +</p> </dd> + + + <dd> <p>Specifies the total number of {{SIMD}} lanes on the hardware.</p> </dd> + + + <dd> <p>Indicates transitions are possible in and out of the {{CBV}}, and indirect argument states, on compute command lists. If <strong>CheckFeatureSupport</strong> succeeds this value will always be true. </p> </dd> + + + <dd> <p>Indicates that 64bit integer operations are supported.</p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Pass this structure to <strong>CheckFeatureSupport</strong> to check for root signature version support.</p> + + + + <p>Provide detail about the adapter architecture, helping applications better optimize for certain adapter properties.</p> + + + + <dd> <p> In multi-adapter operation, this indicates which physical adapter of the device is relevant. See Multi-Adapter. <strong>NodeIndex</strong> is filled out by the application before calling <strong>CheckFeatureSupport</strong>, as the application can retrieve details about the architecture of each adapter. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support a tile-based renderer. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support a tile-based renderer. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support {{UMA}}. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support cache-coherent {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support cache-coherent {{UMA}}. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + + + + <p>Contains the supported shader model.</p> + <p> Refer to the enumeration constant {{D3D12_FEATURE_SHADER_MODEL}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>Specifies one member of <strong>{{D3D_SHADER_MODEL}}</strong> that indicates the maximum supported shader model.</p> </dd> + + + + + <p> Describes which resources are supported by the current graphics driver for a given format. </p> + <p> Refer to the enum <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT1}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which resources are supported. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT2}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which unordered resource options are supported. </p> </dd> + + + + + <p> Describes the image quality levels for a given format and sample count. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of multi-samples per pixel to return info about. </p> </dd> + + + <dd> <p> Flags to control quality levels, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS}}</strong> enumeration constants. The resulting value specifies options for determining quality levels. </p> </dd> + + + <dd> <p> The number of quality levels. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p> Details the adapter's {{GPU}} virtual address space limitations, including maximum address bits per resource and per process. </p> + <p> See the enumeration constant {{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>The maximum {{GPU}} virtual address bits per resource.</p> <p>Some adapters have significantly less bits available per resource than per process, while other adapters have significantly greater bits available per resource than per process. The latter scenario tends to happen in less common scenarios, like when running a 32-bit process on certain {{UMA}} adapters. +When per resource capabilities are greater than per process, the greater per resource capabilities can only be leveraged by reserved resources or {{NULL}} mapped pages. +</p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process.</p> <p>When this value is nearly equal to the available residency budget, <strong>Evict</strong> will not be a feasible option to manage residency. See <strong>MakeResident</strong> for more details.</p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Describes parameters needed to allocate resources.</p> + <p> This structure is used by the <strong>GetResourceAllocationInfo</strong> method. </p> + + + <dd> <p>The size, in bytes, of the resource.</p> </dd> + + + <dd> <p>The alignment value for the resource; one of 4KB (4096), 64KB (65536) and 4MB (4194304) alignment.</p> </dd> + + + + + <p>Describes heap properties.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> <li> <strong>{{ID3D12Resource::GetHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::GetCustomHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> </ul><p> Valid combinations of struct member values: </p><ul> <li> When <strong>Type</strong> is <strong>{{D3D12_HEAP_TYPE}}</strong>_CUSTOM, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must not be ..._UNKNOWN. </li> <li> When <strong>Type</strong> is not {{D3D12_HEAP_TYPE_CUSTOM}}, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must be ..._UNKNOWN. </li> <li> When using {{D3D12_HEAP_TYPE_CUSTOM}} and <strong>{{D3D12_MEMORY_POOL}}</strong>_L1, on {{NUMA}} adapters, <strong>{{CPUPageProperty}}</strong> must be <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>_NOT_AVAILABLE. To differentiate {{NUMA}} from {{UMA}} adapters, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE and <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </li> </ul> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the type of heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>-typed value that specifies the {{CPU}}-page properties for the heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_MEMORY_POOL}}</strong>-typed value that specifies the memory pool for the heap. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the node where the resource should be created. Exactly one bit of this {{UINT}} must be set. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the set of nodes where the resource is visible. <em>VisibleNodeMask</em> must have the same bits set as <em>CreationNodeMask</em> has. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + + + <p>Describes a heap.</p> + <p> This structure is used by the <strong>CreateHeap</strong> method, and returned by the <strong>GetDesc</strong> method. </p> + + + <dd> <p> The size, in bytes, of the heap. To avoid wasting memory, applications should pass <em>SizeInBytes</em> values which are multiples of the effective <em>Alignment</em>; but non-aligned <em>SizeInBytes</em> is also supported, for convenience. To find out how large a heap must be to support textures with undefined layouts and adapter-specific sizes, call <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that describes the heap properties. </p> </dd> + + + <dd> <p> The alignment value for the heap. Valid values: </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td> 0 </td><td> An alias for 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 4MB. An application must decide whether the heap will contain multi-sample anti-aliasing ({{MSAA}}), in which case, the application must choose {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}}. </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise-{{OR}} operation. The resulting value identifies heap options. When creating heaps to support adapters with resource heap tier 1, an application must choose some flags. </p> </dd> + + + + + <p> Describes a resource, such as a texture. This structure is used extensively. </p> + <p> Use this structure with:</p><ul> <li> <strong>{{ID3D12Resource::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> <li> <strong>{{ID3D12Device::GetCopyableFootprints}}</strong> </li> <li> A number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</li> </ul><p>Two common resources are buffers and textures, which both use this structure, but with quite different uses of the fields.</p> + + + <dd> <p> One member of <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>, specifying the dimensions of the resource (for example, {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}), or whether it is a buffer (({{D3D12_RESOURCE_DIMENSION_BUFFER}}). </p> </dd> + + + <dd> <p> Specifies the alignment. </p> </dd> + + + <dd> <p> Specifies the width of the resource. </p> </dd> + + + <dd> <p> Specifies the height of the resource. </p> </dd> + + + <dd> <p> Specifies the depth of the resource, if it is 3D, or the array size if it is an array of 1D or 2D resources. </p> </dd> + + + <dd> <p> Specifies the number of {{MIP}} levels. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{DXGI_FORMAT}}</strong>. </p> </dd> + + + <dd> <p> Specifies a <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> Bitwise-{{OR}}'d flags, as <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants. </p> </dd> + + + + + <p>Specifies a depth and stencil value.</p> + <p>This structure is used in the <strong>{{D3D12_CLEAR_VALUE}}</strong> structure.</p> + + + <dd> <p>Specifies the depth value.</p> </dd> + + + <dd> <p>Specifies the stencil value.</p> </dd> + + + + + <p>Describes a value used to optimize clear operations for a particular resource.</p> + <p> This structure is optionally passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> </ul> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_FORMAT}}</strong> enum.</p> <p>The format of the commonly cleared color follows the same validation rules as a view/ descriptor creation. In general, the format of the clear color can be any format in the same typeless group that the resource format belongs to.</p> <p>This <em>Format</em> must match the format of the view used during the clear operation. It indicates whether the <em>Color</em> or the <em>DepthStencil</em> member is valid and how to convert the values for usage with the resource.</p> </dd> + + + <dd> <p>Specifies a 4-entry array of float values (each value in the range 0.0 to 1.0), determining the {{RGBA}} value. The order of {{RGBA}} matches the order used with <strong>ClearRenderTargetView</strong>.</p> </dd> + + + <dd> <p>Specifies one member of <strong>{{D3D12_DEPTH_STENCIL_VALUE}}</strong>. These values match the semantics of <em>Depth</em> and <em>Stencil</em> in <strong>ClearDepthStencilView</strong>.</p> </dd> + + + + + <p>Describes a memory range.</p> + <p><strong>End</strong> is one-past-the-end. When <strong>Begin</strong> equals <strong>End</strong>, the range is empty. The size of the range is (<strong>End</strong> - <strong>Begin</strong>). </p><p> This structure is used by the <strong>Map</strong> and <strong>Unmap</strong> methods. </p> + + + <dd> <p> The offset, in bytes, denoting the beginning of a memory range. </p> </dd> + + + <dd> <p> The offset, in bytes, denoting the end of a memory range. <strong>End</strong> is one-past-the-end. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a subresource memory range.</p> + <p> This structure is used by the <strong>AtomicCopyBufferUINT</strong> and <strong>AtomicCopyBufferUINT64</strong> methods. </p> + + + <dd> <p>The index of the subresource.</p> </dd> + + + <dd> <p>A memory range within the subresource.</p> </dd> + + + + + <p>Describes subresource data.</p> + + + <dd> <p>Offset, in bytes, between the start of the parent resource and this subresource.</p> </dd> + + + <dd> <p>The row pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The x-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The y-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The z-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The index of the subresource for the tiled resource.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p> Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p> If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. In this case, <strong>NumTiles</strong> should be equal to <strong>Width</strong> * <strong>Height</strong> * <strong>Depth</strong>.</p> <p> If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once. </p> <p> Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>UseBox</strong>, you use a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p> When the region includes mipmaps that are packed with nonstandard tiling, <strong>UseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0. </p> </dd> + + + <dd> <p> The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p> The height of the tiled region, in tiles. Used for 2D and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p> Describes the tile structure of a tiled resource with mipmaps. </p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p> The number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p> The number of packed mipmaps in the tiled resource. </p> <p> This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same packing. </p> <p> On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser mipmaps for a given array slice are considered packed as well. </p> </dd> + + + <dd> <p> The number of tiles for the packed mipmaps in the tiled resource. </p> <p> If there is no packing, this value is meaningless and is set to 0. Otherwise, it is set to the number of tiles that are needed to represent the set of packed mipmaps. The pixel layout within the packed mipmaps is hardware specific. If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. For arrays, this value is only the count of packed mipmaps within the subresources for each array slice. </p> </dd> + + + <dd> <p> The offset of the first packed tile for the resource in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this value is meaningless and is 0. Otherwise, it is the offset of the first packed tile for the resource in the overall range of tiles for the resource. A value of 0 for <strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. For array surfaces, this is the offset for the tiles that contain the packed mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset past the beginning of the tiles for each array slice. </p> <strong>Note</strong>?? The number of overall tiles, packed or not, for a given array slice is simply the total number of tiles for the resource divided by the resource's array size, so it is easy to locate the range of tiles for any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies which of those are packed. ? </dd> + + + + + <p> Describes the transition of subresources between different usages. </p> + <p> This struct is used by the <strong>Transition</strong> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> struct. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the resource used in the transition. </p> </dd> + + + <dd> <p> The index of the subresource for the transition. Use the <strong>{{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}</strong> flag ( 0xffffffff ) to transition all subresources in a resource at the same time. </p> </dd> + + + <dd> <p> The "before" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The "after" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + + + <p> Describes the transition between usages of two different resources that have mappings into the same heap. </p> + <p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> Both the before and the after resources can be specified or one or both resources can be <strong>{{NULL}}</strong>, which indicates that any placed or reserved resource could cause aliasing. </p><p>Refer to the usage models described in <strong>CreatePlacedResource</strong>.</p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the before resource used in the transition. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the after resource used in the transition. </p> </dd> + + + + + <p> Represents a resource in which all {{UAV}} accesses must complete before any future {{UAV}} accesses can begin. </p> + <p> This struct represents a resource in which all unordered access view ({{UAV}}) accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p><p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> You don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that only read a {{UAV}}. Additionally, you don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that write to the same {{UAV}} if you know that it's safe to execute the {{UAV}} accesses in any order. The resource can be <strong>{{NULL}}</strong>, which indicates that any {{UAV}} access could require the barrier. </p> + + + <dd> <p> The resource used in the transition, as a reference to <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + + + <p> Describes a resource barrier (transition in resource use). </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method. </p> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong>-typed value that specifies the type of resource barrier. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_RESOURCE_BARRIER_FLAGS}}</strong> enumeration constant such as for "begin only" or "end only". </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> structure that describes the transition of subresources between different usages. Members specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> structure that describes the transition between usages of two different resources that have mappings into the same heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> structure that describes a resource in which all {{UAV}} accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Describes the format, width, height, depth, and row-pitch of the subresource into the parent resource. </p> + <p> Use this structure in the <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p><p> The helper structure is <strong>{{CD3DX12_SUBRESOURCE_FOOTPRINT}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. </p> </dd> + + + <dd> <p> The width of the subresource. </p> </dd> + + + <dd> <p> The height of the subresource. </p> </dd> + + + <dd> <p> The depth of the subresource. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. This must be a multiple of {{D3D12_TEXTURE_DATA_PITCH_ALIGNMENT}} (256), and must be greater than or equal to the size of the data within a row. </p> </dd> + + + + + <p> Describes the footprint of a placed subresource, including the offset and the {{D3D12_SUBRESOURCE_FOOTPRINT}}. </p> + <p> This structure is used in the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure, and by <strong>{{ID3D12Device::GetCopyableFootprints}}</strong>. </p><p> All the data referenced by the footprint structure must fit within the bounds of the parent resource. If you use <strong>GetCopyableFootprints</strong> to fill out the structure, the <em>pTotalBytes</em> output field indicates the required size of the resource.</p><p> This structure is also used a number of helper functions (refer to Helper Structures and Functions for {{D3D12}}).</p><p> When copying textures, use this structure along with <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. </p> + + + <dd> <p> The offset of the subresource within the parent resource, in bytes. The offset between the start of the parent resource and this subresource. </p> </dd> + + + <dd> <p> The format, width, height, depth, and row-pitch of the subresource, as a <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p> </dd> + + + + + <p>Describes a portion of a texture for the purpose of texture copies. </p> + <p> Use this structure with <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p> Specifies the resource which will be used for the copy operation.</p>? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT}}, <strong>pResource</strong> must point to a buffer resource.? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX}}, <strong>pResource</strong> must point to a texture resource. </dd> + + + <dd> <p> Specifies which type of resource location this is: a subresource of a texture, or a description of a texture layout which can be applied to a buffer. This <strong>{{D3D12_TEXTURE_COPY_TYPE}}</strong> enum indicates which union member to use. </p> </dd> + + + <dd> <p> Specifies a texture layout, with offset, dimensions, and pitches, for the hardware to understand how to treat a section of a buffer resource as a multi-dimensional texture. To fill-in the correct data for a <strong>CopyTextureRegion</strong> call, see <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the subresource of an arrayed, mip-mapped, or planar texture should be used for the copy operation. </p> </dd> + + + + + <p>This section provides code for sample scenarios. Many of the walk-throughs provide details on what coding is required to be added to a basic sample, to avoid repeating the basic component code for each scenario.</p><p>For the most basic component, refer to the Creating a Basic Direct3D 12 Component section. The following walk-throughs describe more advanced scenarios.</p><p> </p> + + + + <p>Describes the elements in a buffer resource to use in a shader-resource view.</p> + <p> This structure is used by <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a view of a buffer. </p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV_FLAGS}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1. </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> -1 (where <strong>MipLevels</strong> is from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a multi sampled 2D texture to use in a shader-resource view.</p> + <p>This structure is a member of the <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure.</p><p>Since a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_SRV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p> A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. </p><p> When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you can't create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource. </p><p> Create a shader-resource-view description by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong>.</p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_COMPONENT_MAPPING}}</strong> enumeration constant, such as return component 0 (red) from memory, or force the resulting value to 0. This mapping enables the shader resource view ({{SRV}}) to choose how memory gets routed to the 4 return components in a shader after a memory fetch. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV}}</strong> structure that views the resource as a buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_SRV}}</strong> structure that views the resource as a 2D-texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_SRV}}</strong> structure that views the resource as a 2D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array. </p> </dd> + + + + + <p>Describes a constant buffer to view.</p> + <p>This structure is used by <strong>CreateConstantBufferView</strong>.</p> + + + <dd> <p> The {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + <dd> <p>The size in bytes of the constant buffer.</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>This structure is used by <strong>CreateSampler</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_FILTER}}</strong>-typed value that specifies the filtering method to use when sampling a texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a u texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a v texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a w texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if the runtime calculates that a texture should be sampled at mipmap level 3 and <strong>MipLODBias</strong> is 2, the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> or <strong>{{D3D12_FILTER_COMPARISON_ANISOTROPIC}}</strong> is specified in <strong>Filter</strong>. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that specifies a function that compares sampled data against existing sampled data. </p> </dd> + + + <dd> <p> Border color to use if <strong>{{D3D12_TEXTURE_ADDRESS_MODE_BORDER}}</strong> is specified for <strong>AddressU</strong>, <strong>AddressV</strong>, or <strong>AddressW</strong>. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to <strong>MinLOD</strong>. To have no upper limit on {{LOD}}, set this member to a large value. </p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a buffer. </p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> The counter offset, in bytes. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong>-typed value that specifies the view options for the resource. </p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources. </p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p> Describes an array of unordered-access 2D texture resources. </p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using an unordered-access view.</p> + <p>Pass an unordered-access-view description into <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type specifies how the resource will be accessed. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_UAV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the elements in a buffer resource to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a buffer.</p> + + + <dd> <p>Number of bytes between the beginning of the buffer and the first element to access.</p> </dd> + + + <dd> <p>The total number of elements in the view.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The index of the mipmap level to use.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture to use in a render-target view.</p> + <p>This structure is a member of the <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_RTV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p> Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p> Describes the subresources from an array of multi sampled 2D textures to use in a render-target view. </p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures. </p> + + + <dd> <p> The index of the first texture to use in an array of textures. </p> </dd> + + + <dd> <p> The number of textures to use. </p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using a render-target view.</p> + <p>Pass a render-target-view description into <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to create a render-target view.</p><p>A render-target view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_RTV_DIMENSION}}</strong>-typed value that specifies how the render-target resource will be accessed. This type specifies how the resource will be accessed. This member also determines which _RTV to use in the following union.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_RTV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 2D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures that are accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is a member of the <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is nothing to specify in <strong>{{D3D12_TEX2DMS_DSV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures for a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresources of a texture that are accessible from a depth-stencil view.</p> + <p> These are valid formats for a depth-stencil view: </p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p> A depth-stencil view can't use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, the format of the parent resource is used. </p><p> Pass a depth-stencil-view description into <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> to create a depth-stencil view. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. For allowable formats, see Remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DSV_DIMENSION}}</strong>-typed value that specifies how the depth-stencil resource will be accessed. This member also determines which _DSV to use in the following union. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DSV_FLAGS}}</strong> enumeration constants that are combined by using a bitwise {{OR}} operation. The resulting value specifies whether the texture is read only. Pass 0 to specify that it isn't read only; otherwise, pass one or more of the members of the <strong>{{D3D12_DSV_FLAGS}}</strong> enumerated type. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_DSV}}</strong> structure that specifies a 1D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_DSV}}</strong> structure that specifies an array of 1D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_DSV}}</strong> structure that specifies a 2D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_DSV}}</strong> structure that specifies an array of 2D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_DSV}}</strong> structure that specifies a multisampled 2D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_DSV}}</strong> structure that specifies an array of multisampled 2D textures. </p> </dd> + + + + + <p>Describes the descriptor heap.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDescriptorHeap}}</strong> </li> </ul> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the types of descriptors in the heap. </p> </dd> + + + <dd> <p> The number of descriptors in the heap. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DESCRIPTOR_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the heap. </p> </dd> + + + <dd> <p> For single-adapter operation, set this to zero. If there are multiple adapter nodes, set a bit to identify the node (one of the device's physical adapters) to which the descriptor heap applies. Each bit in the mask corresponds to a single node. Only one bit must be set. See Multi-Adapter. </p> </dd> + + + + + <p>Describes a descriptor range.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure. </p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.0 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes constants inline in the root signature that appear in shaders as one constant buffer. </p> + <p>Refer to Resource Binding in {{HLSL}} for more information on shader registers and spaces. </p><p><strong>{{D3D12_ROOT_CONSTANTS}}</strong> is the data type of the <strong>Constants</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_CONSTANTS}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS}} member of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p> The shader register. </p> </dd> + + + <dd> <p> The register space. </p> </dd> + + + <dd> <p> The number of constants that occupy a single shader slot (these constants appear like a single constant buffer). All constants occupy a single root signature bind slot. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.0 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes a static sampler. </p> + <p> Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> The filtering method to use when sampling a texture, as a <strong>{{D3D12_FILTER}}</strong> enumeration constant. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>u</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>v</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>w</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if {{D3D12_FILTER_ANISOTROPIC}} or {{D3D12_FILTER_COMPARISON_ANISOTROPIC}} is specified as the filter. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D12_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_STATIC_BORDER_COLOR}}</strong>, the border color to use if {{D3D12_TEXTURE_ADDRESS_MODE_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p> Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. </p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D12_FLOAT32_MAX}}. </p> </dd> + + + <dd> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> parameters correspond to the binding syntax of {{HLSL}}. For example, in {{HLSL:}} </p> <code>Texture2D&lt;float4&gt; a : register(t2, space3);</code> <p> This corresponds to a <em>ShaderRegister</em> of 2 (indicating the type is {{SRV}}), and <em>RegisterSpace</em> is 3. </p> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> pair is needed to establish correspondence between shader resources and runtime heap descriptors, using the root signature data structure. </p> </dd> + + + <dd> <p> See the description for <em>ShaderRegister</em>. Register space is optional; the default register space is 0. </p> </dd> + + + <dd> <p> Specifies the visibility of the sampler to the pipeline shaders, one member of <strong>{{D3D12_SHADER_VISIBILITY}}</strong>. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a descriptor range, with flags to determine their volatility.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure. </p><p>Refer to the helper structure <strong>{{CD3DX12_DESCRIPTOR_RANGE1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> that determine descriptor and data volatility.</p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.1 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR_TABLE1}}</strong>.</p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.1 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR1}}</strong>.</p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> that determine the volatility of descriptors and the data they reference.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> structure.</p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_PARAMETER1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p>Describes the layout of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER1}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong> that determine the data volatility.</p> </dd> + + + + + <p>Holds any version of a root signature description, and is designed to be used with serialization/deserialization functions.</p> + <p>Use this structure with the following methods.</p><ul> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>GetUnconvertedRootSignatureDesc</strong> </li> <li> <strong>{{D3D12SerializeVersionedRootSignature}}</strong> </li> </ul><p>Refer to the helper structure <strong>{{CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong>. </p> + + + <dd> <p>Specifies one member of {{D3D_ROOT_SIGNATURE_VERSION}} that determines the contents of the union.</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> (version 1.0).</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> (version 1.1).</p> </dd> + + + + + <p> Describes a {{CPU}} descriptor handle. </p> + <p> This structure is returned by the following methods: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart}}</strong> </li> </ul><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CopyDescriptors}}</strong> </li> <li> <strong>{{ID3D12Device::CopyDescriptorsSimple}}</strong> </li> <li> <strong>{{ID3D12Device::CreateConstantBufferView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateSampler}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::OMSetRenderTargets}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes a {{GPU}} descriptor handle. </p> + <p> This structure is returned by <strong>{{ID3D12DescriptorHeap::GetGPUDescriptorHandleForHeapStart}}</strong>. </p><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList:SetComputeRootDescriptorTable}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes details for the discard-resource operation. </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> method. </p><p> If rectangles are supplied in this structure, the resource must have 2D subresources with all specified subresources the same dimension. </p> + + + <dd> <p> The number of rectangles in the array that the <strong>pRects</strong> member specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource to discard. If <strong>{{NULL}}</strong>, <strong>DiscardResource</strong> discards the entire resource. </p> </dd> + + + <dd> <p> Index of the first subresource in the resource to discard. </p> </dd> + + + <dd> <p> The number of subresources in the resource to discard. </p> </dd> + + + + + <p> Describes the purpose of a query heap. A query heap contains an array of individual queries. </p> + <p> Use this structure with <strong>CreateQueryHeap</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the number of queries the heap should contain. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the query heap applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>BeginQuery</strong> and <strong>EndQuery</strong>.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + + <p>Describes query data for stream output.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + <dd> <p>Specifies the number of primitives written.</p> </dd> + + + <dd> <p>Specifies the total amount of storage needed by the primitives.</p> </dd> + + + + + + + + <p>Describes parameters for drawing instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawInstanced</strong>.</p> + + + <dd> <p>Specifies the number of vertices to draw, per instance.</p> </dd> + + + <dd> <p>Specifies the number of instances.</p> </dd> + + + <dd> <p>Specifies an index to the first vertex to start drawing from.</p> </dd> + + + <dd> <p>Specifies an index to the first instance to start drawing from.</p> </dd> + + + + + <p>Describes parameters for drawing indexed instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawIndexedInstanced</strong>. </p> + + + <dd> <p>The number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p> The number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Describes dispatch parameters, for use by the compute shader.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>Dispatch</strong>.</p><p> A compiled compute shader defines the set of instructions to execute per thread and the number of threads to run per group. The thread-group parameters indicate how many thread groups to execute. Each thread group contains the same number of threads, as defined by the compiled compute shader. The thread groups are organized in a three-dimensional grid. The total number of thread groups that the compiled compute shader executes is determined by the following calculation:</p><code>ThreadGroupCountX * ThreadGroupCountY * ThreadGroupCountZ</code><p>In particular, if any of the values in the thread-group parameters are 0, nothing will happen. +</p><p>The maximum size of any dimension is 65535.</p> + + + <dd> <p>The size, in thread groups, of the x-dimension of the thread-group grid. </p> </dd> + + + <dd> <p>The size, in thread groups, of the y-dimension of the thread-group grid.</p> </dd> + + + <dd> <p>The size, in thread groups, of the z-dimension of the thread-group grid. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Describes an indirect argument (an indirect parameter), for use with a command signature. </p> + <p> Use this structure with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> A single <strong>{{D3D12_INDIRECT_ARGUMENT_TYPE}}</strong> enumeration constant. </p> </dd> + + + <dd> <dl> <dt><strong>Slot</strong></dt> <dd> <p> Specifies the slot containing the vertex buffer address. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the constant. </p> </dd> <dt><strong>DestOffsetIn32BitValues</strong></dt> <dd> <p> The offset, in 32-bit values, to set the first constant of the group. Supports multi-value constants at a given root index. Root constant entries must be sorted from smallest to largest DestOffsetIn32BitValues. </p> </dd> <dt><strong>Num32BitValuesToSet</strong></dt> <dd> <p> The number of 32-bit constants that are set at the given root index. Supports multi-value constants at a given root index. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{CBV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{SRV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{UAV}}. </p> </dd> </dl> </dd> + + + + + <p> Describes the arguments (parameters) of a command signature. </p> + <p> Use this structure by <strong>CreateCommandSignature</strong>. </p> + + + <dd> <p> Specifies the size of each argument of a command signature, in bytes. </p> </dd> + + + <dd> <p> Specifies the number of arguments in the command signature. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structures, containing details of the arguments, including whether the argument is a vertex buffer, constant, constant buffer view, shader resource view, or unordered access view. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the command signature is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + + + <p> Describes subresource data. </p> + <p>This structure is used by a number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that contains the subresource data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The depth pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p> Describes the destination of a memory copy operation. </p> + <p>This structure is used by a number of helper methods, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that receives the copied data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The slice pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p>An interface from which <strong>{{ID3D12Device}}</strong> and <strong>{{ID3D12DeviceChild}}</strong> inherit from. It provides methods to associate private data and annotate object names.</p> + + + + <p>Gets application-defined data from a device object.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> that is associated with the data. </p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a memory block that receives the data from the device object if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p> Sets application-defined data to a device object and associates that data with an application-defined <strong>{{GUID}}</strong>. </p> + <p> Rather than using the Direct3D 11 debug object naming scheme of calling <strong>{{ID3D12Object::SetPrivateData}}</strong> using <strong>{{WKPDID_D3DDebugObjectName}}</strong> with an {{ASCII}} name, call <strong>{{ID3D12Object::SetName}}</strong> with a {{UNICODE}} name. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> to associate with the data. </p> </dd> + + + <dd> <p> The size in bytes of the data. </p> </dd> + + + <dd> <p> A reference to a memory block that contains the data to be stored with this device object. If <em>pData</em> is <strong>{{NULL}}</strong>, <em>DataSize</em> must also be 0, and any data that was previously associated with the <strong>{{GUID}}</strong> specified in <em>guid</em> will be destroyed. </p> </dd> + + + + + <p> Associates an <strong>{{IUnknown}}</strong>-derived interface with the device object and associates that interface with an application-defined <strong>{{GUID}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Associates a name with the device object. This name is for use in debug diagnostics and tools. </p> + <p> This method takes {{UNICODE}} names. The older Direct3D 11 debug object naming system through <strong>{{ID3D12Object::SetPrivateData}}</strong> with <strong>{{WKPDID_D3DDebugObjectName}}</strong> used {{ASCII}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the device object. </p> </dd> + + + + + <p>An interface from which other core interfaces inherit from, including <strong>{{ID3D12PipelineLibrary}}</strong>, <strong>{{ID3D12CommandList}}</strong>, <strong>{{ID3D12Pageable}}</strong>, and <strong>{{ID3D12RootSignature}}</strong>. It provides a method to get back to the device object it was created against.</p> + + + + <p>Gets a reference to the device that created this interface. </p> + <p> Any returned interfaces have their reference count incremented by one, so be sure to call ::release() on the returned references before they are freed or else you will have a memory leak. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the device interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the device can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Device}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a device. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12Device}}</strong> interface for the device. </p> </dd> + + + + + <p>The root signature defines what resources are bound to the graphics pipeline. A root signature is configured by the app and links command lists to the resources the shaders require. Currently, there is one graphics and one compute root signature per app.</p> + + + + <p>Contains a method to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> data structure, of a serialized root signature version 1.0. </p> + <p>This interface has been superceded by <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>.</p> + + + + <p> Gets the layout of the root signature. </p> + <p> This method returns a deserialized root signature in a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature. </p> + + + + <p>Contains methods to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, of any version of a serialized root signature. </p> + <p>This interface supercedes <strong>{{ID3D12RootSignatureDeserializer}}</strong>.</p> + + + + <p>Converts root signature description structures to a requested version.</p> + <p>This method allocates additional storage if needed for the converted root signature (memory owned by the deserializer interface). If conversion is done, the deserializer interface doesn?t free the original deserialized root signature memory ? all versions the interface has been asked to convert to are available until the deserializer is destroyed. </p><p>Converting a root signature from 1.1 to 1.0 will drop all <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> and <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> can be useful for generating compatible root signatures that need to run on old operating systems, though does lose optimization opportunities. For instance, multiple root signature versions can be serialized and stored with application assets, with the appropriate version used at runtime based on the operating system capabilities. </p><p>Converting a root signature from 1.0 to 1.1 just adds the appropriate flags to match 1.0 semantics.</p> + <p>This method returns an {{HRESULT}} success or error code. The method can fail with {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>Specifies the required <strong>{{D3D_ROOT_SIGNATURE_VERSION}}</strong>.</p> </dd> + + + <dd> <p>Contains the deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> </dd> + + + + + <p> Gets the layout of the root signature, without converting between root signature versions. </p> + <p>This method returns a deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature.</p> + + + + <p>An interface from which many other core interfaces inherit from. It indicates that the object type encapsulates some amount of {{GPU}}-accessible memory; but does not strongly indicate whether the application can manipulate the object's residency. </p> + <p>For more details, refer to Memory Management in Direct3D 12 and the <strong>MakeResident</strong> method reference. +</p> + + + + <p>A heap is an abstraction of contiguous memory allocation, used to manage physical memory. This heap can be used with <strong>{{ID3D12Resource}}</strong> objects to support placed resources or reserved resources.</p> + + + + <p>Gets the heap description.</p> + <p>Returns the <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap.</p> + + + + + + + + + + <p>Invalidates the {{CPU}} reference to the specified subresource in the resource. <strong>Unmap</strong> also flushes the {{CPU}} cache, when necessary, so that {{GPU}} reads to this address reflect any modifications made by the {{CPU}}. +</p> + <p>Refer to the extensive Remarks and Examples for the <strong>Map</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the index of the subresource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RANGE}}</strong> structure that describes the range of memory to unmap.</p> <p>This indicates the region the {{CPU}} might have modified, and the coordinates are subresource-relative. A null reference indicates the entire subresource might have been modified by the {{CPU}}. It is valid to specify the {{CPU}} didn't write any data by passing a range where <strong>End</strong> is less than or equal to <strong>Begin</strong>.</p> </dd> + + + + + <p>Gets the resource description.</p> + <p>A Direct3D 12 resource description structure.</p> + + + + <p> This method returns the {{GPU}} virtual address of a buffer resource. </p> + <p>This method is only useful for buffer resources, it will return zero for all texture resources.</p><p> For more information on the use of {{GPU}} virtual addresses, refer to Indirect Drawing. </p> + <p> This method returns the {{GPU}} virtual address. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd synonym of {{UINT64}}. </p> + + + + <p>Uses the {{CPU}} to copy data into a subresource, enabling the {{CPU}} to modify the contents of most textures with undefined layouts.</p> + <p>The resource should first be mapped using <strong>Map</strong>. Textures must be in the <strong>{{D3D12_RESOURCE_STATE_COMMON}}</strong> state for {{CPU}} access through <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> to be legal; but buffers do not.</p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p><p><strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> enable near zero-copy optimizations for {{UMA}} adapters, but can prohibitively impair the efficiency of discrete/ {{NUMA}} adapters as the texture data cannot reside in local video memory. Typical applications should stick to discrete-friendly upload techniques, unless they recognize the adapter architecture is {{UMA}}. For more details on uploading, refer to <strong>CopyTextureRegion</strong>, and for more details on {{UMA}}, refer to <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </p><p>On {{UMA}} systems, this routine can be used to minimize the cost of memory copying through the loop optimization known as loop tiling. By breaking up the upload into chucks that comfortably fit in the {{CPU}} cache, the effective bandwidth between the {{CPU}} and main memory more closely achieves theoretical maximums. +</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the index of the subresource. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data into. If {{NULL}}, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + <dd> <p> A reference to the source data in memory. </p> </dd> + + + <dd> <p>The distance from one row of source data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of source data to the next. </p> </dd> + + + + + <p> Uses the {{CPU}} to copy data from a subresource, enabling the {{CPU}} to read the contents of most textures with undefined layouts. </p> + <p> See the Remarks section for <strong>WriteToSubresource</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the destination data in memory. </p> </dd> + + + <dd> <p> The distance from one row of destination data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of destination data to the next. </p> </dd> + + + <dd> <p> Specifies the index of the subresource to read from. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data from. If {{NULL}}, the data is read from the destination subresource with no offset. The dimensions of the destination must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + + + <p> Retrieves the properties of the resource heap, for placed and committed resources. </p> + <p> This method only works on placed and committed resources, not on reserved resources. If the resource was created as reserved, {{E_INVALIDARG}} is returned. The pages could be mapped to none, one, or more heaps. </p><p> For more information, refer to Memory Management in Direct3D 12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. If the resource was created as reserved, {{E_INVALIDARG}} is returned. </p> + + + <dd> <p> Pointer to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure, that on successful completion of the method will contain the resource heap properties. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_HEAP_FLAGS}}</strong> variable, that on successful completion of the method will contain any miscellaneous heap flags. </p> </dd> + + + + + <p>Represents the allocations of storage for graphics processing unit ({{GPU}}) commands.</p> + <p>Use <strong>{{ID3D12Device::CreateCommandAllocator}}</strong> to create a command allocator object. </p><p>The command allocator object corresponds to the underlying allocations in which {{GPU}} commands are stored. The command allocator object applies to both direct command lists and bundles. You must use a command allocator object in a DirectX 12 app.</p> + + + + <p>Indicates to re-use the memory that is associated with the command allocator.</p> + <p>Apps call <strong>Reset</strong> to re-use the memory that is associated with a command allocator. From this call to <strong>Reset</strong>, the runtime and driver determine that the graphics processing unit ({{GPU}}) is no longer executing any command lists that have recorded commands with the command allocator.</p><p>Unlike <strong>{{ID3D12GraphicsCommandList::Reset}}</strong>, it is not recommended that you call <strong>Reset</strong> on the command allocator while a command list is still being executed. </p><p>The debug layer will issue a warning if it can't prove that there are no pending {{GPU}} references to command lists that have recorded commands in the allocator.</p><p>The debug layer will issue an error if <strong>Reset</strong> is called concurrently by multiple threads (on the same allocator object).</p> + <p>This method returns <strong>{{E_FAIL}}</strong> if there is an actively recording command list referencing the command allocator. The debug layer will also issue an error in this case. See Direct3D 12 Return Codes for other possible return values.</p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + + + + <p>Sets the fence to the specified value.</p> + <p>Use this method to set a fence value from the {{CPU}} side. Use <strong>{{ID3D12CommandQueue::Signal}}</strong> to set a fence from the {{GPU}} side.</p> + <p>This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>The value to set the fence to.</p> </dd> + + + + + <p>Represents the state of all currently set shaders as well as certain fixed function state objects.</p> + <p>Use <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> or <strong>{{ID3D12Device::CreateComputePipelineState}}</strong> to create a pipeline state object ({{PSO}}). </p><p>A pipeline state object corresponds to a significant portion of the state of the graphics processing unit ({{GPU}}). This state includes all currently set shaders and certain fixed function state objects. The only way to change states contained within the pipeline object is to change the currently bound pipeline object.</p> + + + + <p> Gets the cached blob representing the pipeline state. </p> + <p>Refer to the remarks for <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> After this method returns, points to the cached blob representing the pipeline state. </p> </dd> + + + + + <p>A descriptor heap is a collection of contiguous allocations of descriptors, one allocation for every descriptor. Descriptor heaps contain many object types that are not part of a Pipeline State Object ({{PSO}}), such as Shader Resource Views ({{SRVs}}), Unordered Access Views ({{UAVs}}), Constant Buffer Views ({{CBVs}}), and Samplers.</p> + + + + <p> Gets the descriptor heap description. </p> + <p> The description of the descriptor heap, as a <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + + <p>Gets the {{CPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{CPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Gets the {{GPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{GPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Manages a query heap. A query heap holds an array of queries, referenced by indexes.</p> + <p>For more information, refer to Queries.</p> + + + + <p> A command signature object enables apps to specify indirect drawing, including the buffer format, command type and resource bindings to be used.</p> + <p> To create a command signature, call <strong>{{ID3D12Device::CreateCommandSignature}}</strong>, as described in Indirect Drawing. </p> + + + + + + + <p> Gets the type of the command list, such as direct, bundle, compute, or copy. </p> + <p> This method returns the type of the command list, as a <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong> enumeration constant, such as direct, bundle, compute, or copy. </p> + + + + + + + <p> Indicates that recording to the command list has finished. </p> + <p> The runtime will validate that the command list has not previously been closed. If an error was encountered during recording, the error code is returned here. The runtime won't call the close device driver interface ({{DDI}}) in this case. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list has already been closed, or an invalid {{API}} was called during command list recording. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory during recording. </li> <li><strong>{{E_INVALIDARG}}</strong> if an invalid argument was passed to the command list {{API}} during recording. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + + <p> Resets a command list back to its initial state as if a new command list was just created. </p> + <p> By using <strong>Reset</strong>, you can re-use command list tracking structures without any allocations. Unlike <strong>{{ID3D12CommandAllocator::Reset}}</strong>, you can call <strong>Reset</strong> while the command list is still being executed. A typical pattern is to submit a command list and then immediately reset it to reuse the allocated memory for another command list. </p><p> You can use <strong>Reset</strong> for both direct command lists and bundles. </p><p> The command allocator that <strong>Reset</strong> takes as input can be associated with no more than one recording command list at a time. The allocator type, direct command list or bundle, must match the type of command list that is being created. </p><p> If a bundle doesn't specify a resource heap, it can't make changes to which descriptor tables are bound. Either way, bundles can't change the resource heap within the bundle. If a heap is specified for a bundle, the heap must match the calling 'parent' command list?s heap. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list was not in the "closed" state when the <strong>Reset</strong> call was made, or the per-device limit would have been exceeded. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory. </li> <li><strong>{{E_INVALIDARG}}</strong> if the allocator is currently being used with another command list in the "recording" state or if the specified allocator was created with the wrong type. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12CommandAllocator}}</strong> object that the device creates command lists from. </p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. This is optional and can be {{NULL}}. If {{NULL}}, the runtime sets a dummy initial pipeline state so that drivers don't have to deal with undefined state. The overhead for this is low, particularly for a command list, for which the overall cost of recording the command list likely dwarfs the cost of one initial state setting. So there is little cost in not setting the initial pipeline state parameter if it isn't convenient. </p> <p>For bundles on the other hand, it might make more sense to try to set the initial state parameter since bundles are likely smaller overall and can be reused frequently.</p> </dd> + + + + + <p>Resets the state of a direct command list back to the state it was in when the command list was created. </p> + <p> It is invalid to call <strong>ClearState</strong> on a bundle. If an app calls <strong>ClearState</strong> on a bundle, the call to <strong>Close</strong> will return <strong>{{E_FAIL}}</strong>. </p><p> When <strong>ClearState</strong> is called, all currently bound resources are unbound. The primitive topology is set to <strong>{{D3D_PRIMITIVE_TOPOLOGY_UNDEFINED}}</strong>. Viewports, scissor rectangles, stencil reference value, and the blend factor are set to empty values (all zeros). Predication is disabled. </p><p> The app-provided pipeline state object becomes bound as the currently set pipeline state object. </p> + <p> Returns nothing. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. </p> </dd> + + + + + <p> Draws non-indexed, instanced primitives. </p> + <p> A draw {{API}} submits work to the rendering pipeline. </p><p> Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. </p><p> The vertex data for an instanced draw call typically comes from a vertex buffer that is bound to the pipeline. But, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}). </p> + <p>Returns nothing</p> + + + <dd> <p> Number of vertices to draw. </p> </dd> + + + <dd> <p> Number of instances to draw. </p> </dd> + + + <dd> <p> Index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Draws indexed, instanced primitives. </p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Executes a command list from a thread group.</p> + <p> You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z). </p> + <p>Returns nothing.</p> + + + <dd> <p> The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1. </p> </dd> + + + + + <p> Copies a region of a buffer from one resource to another. </p> + <p> Consider using the <strong>CopyResource</strong> method when copying an entire resource, and use this method for copying regions of a resource. </p><p><strong>CopyBufferRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the destination <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the destination resource. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the source resource, to start the copy from. </p> </dd> + + + <dd> <p> Specifies the number of bytes to copy. </p> </dd> + + + + + <p> This method uses the {{GPU}} to copy texture data between two locations. Both the source and the destination may reference texture data located within either a buffer resource or a texture resource.</p> + <p> The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopyTextureRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopyTextureRegion</strong> call. Invalid parameters to <strong>CopyTextureRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device. </p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. </p><p><strong>CopyTextureRegion</strong> performs the copy on the {{GPU}} (similar to a <code>memcpy</code> by the {{CPU}}). As a consequence, the source and destination resources: </p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must have compatible <strong>{{DXGI_FORMAT}}</strong>s (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyTextureRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> </ul><p><strong>CopyTextureRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopyTextureRegion</strong> can reinterpret the resource data between a few format types. </p><p> If your app needs to copy an entire resource, we recommend to use <strong>CopyResource</strong> instead. </p><strong>Note</strong>?? If you use <strong>CopyTextureRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.?<p><strong>CopyTextureRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p>Specifies the destination <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. +</p> </dd> + + + <dd> <p> The x-coordinate of the upper left corner of the destination region. </p> </dd> + + + <dd> <p> The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero. </p> </dd> + + + <dd> <p> The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_SOURCE}} state.</p> </dd> + + + <dd> <p> Specifies an optional {{D3D12_BOX}} that sets the size of the source texture to copy. </p> </dd> + + + + + + + + <p> Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on Tier_1 tiled resources, where reading and writing unmapped areas is invalid - refer to <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation. </p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy {{APIs}} like <strong>CopyTextureRegion</strong>.</p><p><strong>CopyTiles</strong> does copy data in a slightly different pattern than the standard copy methods.</p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and de-swizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy {{APIs}}, like <strong>CopyTextureRegion</strong>, to copy small mipmaps individually.</p> + <p> This method does not return a value. </p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D12Resource}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_COPY_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Copy a multi-sampled resource into a non-multi-sampled resource.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> A zero-based index, that identifies the destination subresource. Use <strong>{{D3D12CalcSubresource}}</strong> to calculate the subresource index if the parent resource is complex. </p> </dd> + + + <dd> <p> Source resource. Must be multisampled. </p> </dd> + + + <dd> <p> The source subresource of the source resource. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. </p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p> Bind an array of viewports to the rasterizer stage of the pipeline. </p> + <p> All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled. </p><p> Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array. </p><strong>Note</strong>?? Even though you specify float values to the members of the <strong>{{D3D12_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p> This method does not return a value. </p> + + + <dd> <p> Number of viewports to bind. The range of valid values is (0, {{D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}). </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_VIEWPORT}}</strong> structures to bind to the device. </p> </dd> + + + + + + + + <p>Sets the blend factor that modulate values for a pixel shader, render target, or both.</p> + <p> If you created the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage uses the non-{{NULL}} array of blend factors. </p><p> If you didn't create the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors. </p><p> If you pass {{NULL}}, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }. </p><p> {{D3D11_BLEND_BLEND_FACTOR}} and {{D3D11_BLEND_INV_BLEND_FACTOR}} are <strong>{{D3D12_BLEND}}</strong> enumeration constants. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Array of blend factors, one for each {{RGBA}} component. </p> </dd> + + + + + <p>Sets the reference value for depth stencil tests.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Reference value to perform against when doing a depth-stencil test. </p> </dd> + + + + + <p> Sets all shaders and programs most of the fixed-function state of the graphics processing unit ({{GPU}}) pipeline. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Pointer to the <strong>{{ID3D12PipelineState}}</strong> containing the pipeline state data. </p> </dd> + + + + + <p> Notifies the driver that it needs to synchronize multiple accesses to resources. </p> + <p>There are three types of barrier descriptions:</p><ul> <li> <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> - Transition barriers indicate that a set of subresources transition between different usages. The caller must specify the <em>before</em> and <em>after</em> usages of the subresources. The {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}} flag is used to transition all subresources in a resource at the same time. </li> <li> <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> - Aliasing barriers indicate a transition between usages of two different resources which have mappings into the same heap. The application can specify both the before and the after resource. Note that one or both resources can be {{NULL}} (indicating that any tiled resource could cause aliasing). </li> <li> <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> - Unordered access view barriers indicate all {{UAV}} accesses (read or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. The specified resource may be {{NULL}}. It is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which only read a {{UAV}}. Additionally, it is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which write to the same {{UAV}} if the application knows that it is safe to execute the {{UAV}} accesses in any order. The resource can be {{NULL}} (indicating that any {{UAV}} access could require the barrier). </li> </ul><p> When <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> is passed an array of resource barrier descriptions, the {{API}} behaves as if it was called N times (1 for each array element), in the specified order. Transitions should be batched together into a single {{API}} call when possible, as a performance optimization.</p><p> For descriptions of the usage states a subresource can be in, see the <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration and the Using Resource Barriers to Synchronize Resource States in Direct3D 12 section. </p><p> All subresources in a resource must be in the {{RENDER_TARGET}} state, or {{DEPTH_WRITE}} state, for render targets/depth-stencil resources respectively, when <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> is called. </p><p> When a back buffer is presented, it must be in the {{D3D12_RESOURCE_STATE_PRESENT}} state. If <strong>{{IDXGISwapChain1::Present1}}</strong> is called on a resource which is not in the {{PRESENT}} state, a debug layer warning will be emitted. </p><p>The resource usage bits are group into two categories, read-only and read/write.</p><p> The following usage bits are read-only: </p><ul> <li>{{D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_INDEX_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}}</li> <li>{{D3D12_RESOURCE_STATE_COPY_SOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_READ}}</li> </ul><p>The following usage bits are read/write:</p><ul> <li>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</li> </ul><p>The following usage bits are write-only:</p><ul> <li>{{D3D12_RESOURCE_STATE_COPY_DEST}}</li> <li>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</li> <li>{{D3D12_RESOURCE_STATE_STREAM_OUT}}</li> </ul><p> At most one write bit can be set. If any write bit is set, then no read bit may be set. If no write bit is set, then any number of read bits may be set. </p><p> At any given time, a subresource is in exactly one state (determined by a set of flags). The application must ensure that the states are matched when making a sequence of <strong>ResourceBarrier</strong> calls. In other words, the before and after states in consecutive calls to <strong>ResourceBarrier</strong> must agree. </p><p>To transition all subresources within a resource, the application can set the subresource index to {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}, which implies that all subresources are changed.</p><p> For improved performance, applications should use split barriers (refer to Synchronization and Multi-Engine). Applications should also batch multiple transitions into a single call whenever possible. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of submitted barrier descriptions. </p> </dd> + + + <dd> <p> Pointer to an array of barrier descriptions. </p> </dd> + + + + + <p> Executes a bundle. </p> + <p> Bundles inherit all state from the parent command list on which <strong>ExecuteBundle</strong> is called, except the pipeline state object and primitive topology. All of the state that is set in a bundle will affect the state of the parent command list. Note that <strong>ExecuteBundle</strong> is not a predicated operation. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12GraphicsCommandList}}</strong> that determines the bundle to be executed. </p> </dd> + + + + + <p> Changes the currently bound descriptor heaps that are associated with a command list. </p> + <p><strong>SetDescriptorHeaps</strong> can be called on a bundle, but the bundle descriptor heaps must match the calling command list descriptor heap. For more information on bundle restrictions, refer to Creating and Recording Command Lists and Bundles.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Number of descriptor heaps to bind. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D12DescriptorHeap}}</strong> objects for the heaps to set on the command list. </p> </dd> + + + + + <p> Sets the layout of the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets the layout of the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets a descriptor table into the compute root signature.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a descriptor table into the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a constant in the compute root signature. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a constant in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a group of constants in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p>The slot number for binding.</p> </dd> + + + <dd> <p>The number of constants to set in the root signature.</p> </dd> + + + <dd> <p>The source data for the group of constants to set.</p> </dd> + + + <dd> <p>The offset, in 32-bit values, to set the first constant of the group in the root signature.</p> </dd> + + + + + <p> Sets a group of constants in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The number of constants to set in the root signature. </p> </dd> + + + <dd> <p> The source data for the group of constants to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the first constant of the group in the root signature. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> Specifies the {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the Buffer. Textures are not supported. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets the view for the index buffer. </p> + <p>Only one index buffer can be bound to the graphics pipeline at any one time.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The view specifies the index buffer's address, size, and <strong>{{DXGI_FORMAT}}</strong>, as a reference to a <strong>{{D3D12_INDEX_BUFFER_VIEW}}</strong> structure. </p> </dd> + + + + + <p>Sets a {{CPU}} descriptor handle for the vertex buffers.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting vertex buffers. </p> </dd> + + + <dd> <p> The number of views in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies the vertex buffer views in an array of <strong>{{D3D12_VERTEX_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets the stream output buffer views. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting stream output buffers. </p> </dd> + + + <dd> <p> The number of entries in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_STREAM_OUTPUT_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets {{CPU}} descriptor handles for the render targets and depth stencil. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of entries in the <em>pRenderTargetDescriptors</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structures that describe the {{CPU}} descriptor handles that represents the start of the heap of render target descriptors. </p> </dd> + + + <dd> <p><strong>True</strong> means the handle passed in is the reference to a contiguous range of <em>NumRenderTargetDescriptors</em> descriptors. This case is useful if the set of descriptors to bind already happens to be contiguous in memory (so all that?s needed is a handle to the first one). For example, if <em>NumRenderTargetDescriptors</em> is 3 then the memory layout is taken as follows:</p><p>In this case the driver dereferences the handle and then increments the memory being pointed to.</p> <p><strong>False</strong> means that the handle is the first of an array of <em>NumRenderTargetDescriptors</em> handles. The false case allows an application to bind a set of descriptors from different locations at once. Again assuming that <em>NumRenderTargetDescriptors</em> is 3, the memory layout is taken as follows:</p><p>In this case the driver dereferences three handles that are expected to be adjacent to each other in memory.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap that holds the depth stencil descriptor. </p> </dd> + + + + + <p>Clears the depth-stencil resource.</p> + <p><strong>ClearDepthStencilView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> Returns nothing. </p> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the depth stencil to be cleared. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_CLEAR_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The resulting value identifies the type of data to clear (depth buffer, stencil buffer, or both). </p> </dd> + + + <dd> <p> A value to clear the depth buffer with. This value will be clamped between 0 and 1. </p> </dd> + + + <dd> <p> A value to clear the stencil buffer with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearDepthStencilView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a render target to one value. </p> + <p><strong>ClearRenderTargetView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a {{D3D12_CPU_DESCRIPTOR_HANDLE}} structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to be cleared. </p> </dd> + + + <dd> <p> A 4-component array that represents the color to fill the render target with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearRenderTargetView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a unordered-access view to the specified integer values. </p> + + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D12_GPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewUint</strong> clears the entire resource view. </p> </dd> + + + + + <p>Sets all the elements in a unordered access view to the specified float values.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewFloat</strong> clears the entire resource view. </p> </dd> + + + + + <p>Discards a resource.</p> + <p>The semantics of <strong>DiscardResource</strong> change based on the command list type.</p><p> For <strong>{{D3D12_COMMAND_LIST_TYPE_DIRECT}}</strong>, the following two rules apply: +</p><ul> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</strong> resource barrier state.</li> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG}} _ALLOW_DEPTH_STENCIL</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</strong>. +</li> </ul><p>For <strong>{{D3D12_COMMAND_LIST_TYPE_COMPUTE}}</strong>, the following rule applies: +</p><ul> <li>The resource must have the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}</strong> flag, and <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</strong> resource barrier state.</li> </ul><p><strong>DiscardResource</strong> is not supported on command lists with either <strong>{{D3D12_COMMAND_LIST_TYPE_BUNDLE}}</strong> nor <strong>{{D3D12_COMMAND_LIST_TYPE_COPY}}</strong>.</p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface for the resource to discard. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_DISCARD_REGION}}</strong> structure that describes details for the discard-resource operation. </p> </dd> + + + + + <p>Starts a query running.</p> + <p> In Direct3D 12, the usage of queries is more restricted than Direct3D 11. The following scenarios are no longer supported: </p><ul> <li> A call to <strong>BeginQuery</strong> followed by another call to <strong>BeginQuery</strong> without an intervening call to <strong>EndQuery</strong>. </li> <li> A call to <strong>EndQuery</strong> followed by <strong>EndQuery</strong> without an intervening call to <strong>BeginQuery</strong>. </li> </ul><p> Given these restrictions, there are 3 states that a query can be in: </p><ul> <li>Inactive (this is the initial state of all queries)</li> <li>Querying</li> <li>Predicating</li> </ul><p><strong>BeginQuery</strong> transitions a query from the inactive state to the querying state. <strong>EndQuery</strong> transitions a query from the querying state to the inactive state. <strong>SetPredication</strong> transitions the previous set query from the predicating state to the inactive state and transitions the newly set query from the inactive state to the predicating state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query within the query heap. </p> </dd> + + + + + <p> Ends a running query. </p> + <p> Refer to the remarks for <strong>BeginQuery</strong>, and to Queries. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query in the query heap. </p> </dd> + + + + + <p> </p><p> Extracts data from a query. <strong>ResolveQueryData</strong> works with all heap types (default, upload, and readback).? </p> + <p><strong>ResolveQueryData</strong> performs a batched operation which writes query data into a destination buffer. Query data is written contiguously to the destination buffer, and the parameter. </p><p> Binary occlusion queries write 64-bits per query. The least significant bit is either 0 or 1. The rest of the bits are 0. </p><p>The core runtime will validate the following:</p><ul> <li><em>StartIndex</em> and <em>NumQueries</em> are within range. </li> <li><em>AlignedDestinationBufferOffset</em> is a multiple of 8 bytes. </li> <li><em>DestinationBuffer</em> is a buffer. </li> <li> The written data will not overflow the output buffer. </li> <li> The query type must be supported by the command list type. </li> <li> The query type must be supported by the query heap. </li> </ul><p> The debug layer will issue a warning if the destination buffer is not in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the queries to resolve. </p> </dd> + + + <dd> <p> Specifies the type of query, one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies an index of the first query to resolve. </p> </dd> + + + <dd> <p> Specifies the number of queries to resolve. </p> </dd> + + + <dd> <p> Specifies an <strong>{{ID3D12Resource}}</strong> destination buffer, which must be in the state <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong>. </p> </dd> + + + <dd> <p> Specifies an alignment offset into the destination buffer. Must be a multiple of 8 bytes. </p> </dd> + + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command list, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command list, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Apps perform indirect draws/dispatches using the <strong>ExecuteIndirect</strong> method. </p> + <p>The semantics of this {{API}} are defined with the following pseudo-code:</p><p>Non-{{NULL}} pCountBuffer:</p><code>// Read draw count out of count buffer +{{UINT}} CommandCount = pCountBuffer-&gt;ReadUINT32(CountBufferOffset); CommandCount = min(CommandCount, MaxCommandCount) // Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; CommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>{{NULL}} pCountBuffer:</p><code>// Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; MaxCommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>The debug layer will issue an error if either the count buffer or the argument buffer are not in the {{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}} state. The core runtime will validate:</p><ul> <li><em>CountBufferOffset</em> and <em>ArgumentBufferOffset</em> are 4-byte aligned </li> <li><em>pCountBuffer</em> and <em>pArgumentBuffer</em> are buffer resources (any heap type) </li> <li> The offset implied by <em>MaxCommandCount</em>, <em>ArgumentBufferOffset</em>, and the drawing program stride do not exceed the bounds of <em>pArgumentBuffer</em> (similarly for count buffer) </li> <li>The command list is a direct command list or a compute command list (not a copy or {{JPEG}} decode command list)</li> <li>The root signature of the command list matches the root signature of the command signature</li> </ul><p> The functionality of two {{APIs}} from earlier versions of Direct3D, <code>DrawInstancedIndirect</code> and <code>DrawIndexedInstancedIndirect</code>, are encompassed by <strong>ExecuteIndirect</strong>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a <strong>{{ID3D12CommandSignature}}</strong>. The data referenced by <em>pArgumentBuffer</em> will be interpreted depending on the contents of the command signature. Refer to Indirect Drawing for the {{APIs}} that are used to create a command signature. </p> </dd> + + + <dd> <p>There are two ways that command counts can be specified:</p> <ul> <li> If <em>pCountBuffer</em> is not {{NULL}}, then <em>MaxCommandCount</em> specifies the maximum number of operations which will be performed. The actual number of operations to be performed are defined by the minimum of this value, and a 32-bit unsigned integer contained in <em>pCountBuffer</em> (at the byte offset specified by <em>CountBufferOffset</em>). </li> <li> If <em>pCountBuffer</em> is {{NULL}}, the <em>MaxCommandCount</em> specifies the exact number of operations which will be performed. </li> </ul> </dd> + + + <dd> <p> Specifies one or more <strong>{{ID3D12Resource}}</strong> objects, containing the command arguments. </p> </dd> + + + <dd> <p> Specifies an offset into <em>pArgumentBuffer</em> to identify the first command argument. </p> </dd> + + + <dd> <p> Specifies a reference to a <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that is the offset into <em>pCountBuffer</em>, identifying the argument count. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + + + + <p>This method configures the sample positions used by subsequent draw, copy, resolve, and similar operations.</p> + <p>The operational semantics of sample positions are determined by the various draw, copy, resolve, and other operations that can occur.</p><p><strong>CommandList:</strong> In the absense of any prior calls to SetSamplePositions in a CommandList, samples assume the default position based on the Pipeline State Object ({{PSO}}). The default positions are determined either by the {{SAMPLE_DESC}} portion of the {{PSO}} if it is present, or by the standard sample positions if the {{RASTERIZER_DESC}} portion of the {{PSO}} has ForcedSampleCount set to a value greater than 0.</p><p>After SetSamplePosition has been called, subsequent draw calls must use a {{PSO}} that specifies a matching sample count either using the {{SAMPLE_DESC}} portion of the {{PSO}}, or ForcedSampleCount in the {{RASTERIZER_DESC}} portion of the {{PSO}}.</p><p>SetSamplePositions can only be called on a graphics CommandList. It can't be called in a bundle; bundles inherit sample position state from the calling CommandList and don't modify it.</p><p>Calling SetSamplePositions(0, 0, {{NULL}}) reverts the sample positions to their default values.</p><p><strong>Clear RenderTarget:</strong> Sample positions are ignored when clearing a render target.</p><p><strong>Clear DepthStencil:</strong> When clearing the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of future rendering to the cleared surface or region; the contents of any uncleared regions produced using different sample positions become undefined.</p><p>When clearing the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored.</p><p><strong>Draw to RenderTarget:</strong> When drawing to a render target the sample positions can be changed for each draw call, even when drawing to a region that overlaps previous draw calls. The current sample positions determine the operational semantics of each draw call and samples are taken from taken from the stored contents of the render target, even if the contents were produced using different sample positions.</p><p><strong>Draw using DepthStencil:</strong> When drawing to a depth-stencil surface (read or write) or any region of it, the sample positions must be set to match those used to clear the affected region previously. To use a different sample position, the target region must be cleared first. The pixels outside the clear region are unaffected.</p><p>Hardware may store the depth portion or a depth-stencil surface as plane equations, and evaluate them to produce depth values when the application issues a read. Only the rasterizer and output-merger are required to suport programmable sample positions of the depth portion of a depth-stencil surface. Any other read or write of the depth portion that has been rendered with sample positions set may ignore them and instead sample at the standard positions.</p><p><strong>Resolve RenderTarget:</strong> When resolving a render target or any region of it, the sample positions are ignored; these {{APIs}} operate only on stored color values.</p><p><strong>Resolve DepthStencil:</strong> When resolving the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of past rendering to the resolved surface or region. To use a different sample position, the target region must be cleared first.</p><p>When resolving the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored; stencil resolves operate only on stored stencil values.</p><p><strong>Copy RenderTarget:</strong> When copying from a render target, the sample positions are ignored regardless of whether it is a full or partial copy.</p><p><strong>Copy DepthStencil (Full Subresource):</strong> When copying a full subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface. To use a different sample position, the target region must be cleared first.</p><p>On some hardware properties of the source surface (such as stored plane equations for depth values) transfer to the destination. Therefore, if the destination surface is subsequently drawn to, the sample positions originally used to generate the source content need to be used with the destination surface. The {{API}} requires this on all hardware for consistency even if it may only apply to some.</p><p><strong>Copy DepthStencil (Partial Subresource):</strong> When copying a partial subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface, similarly to copying a full subresource. However, if the content of an affected destination subresources is only partially covered by the copy, the contents of the uncovered portion within those subresources becomes undefined unless all of it was generated using the same sample positions as the copy source. To use a different sample position, the target region must be cleared first.</p><p>When copying a partial subresource from the stencil portion of a depth-stencil surface, the sample postions are ignored. It doesn?t matter what sample positions were used to generate content for any other areas of the destination buffer not covered by the copy ? those contents remain valid.</p><p><strong>Shader SamplePos:</strong> The {{HLSL}} SamplePos intrinsic is not aware of programmable sample positions and results returned to shaders calling this on a surface rendered with programmable positions is undefined. Applications must pass coordinates into their shader manually if needed. Similarly evaluating attributes by sample index is undefined with programmable sample positions.</p><p><strong>Transitioning out of {{DEPTH_READ}} or {{DEPTH_WRITE}} state:</strong> If a subresource in {{DEPTH_READ}} or {{DEPTH_WRITE}} state is transitioned to any other state, including {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some hardware might need to decompress the surface. Therefore, the sample positions must be set on the command list to match those used to generate the content in the source surface. Furthermore, for any subsequent transitions of the surface while the same depth data remains in it, the sample positions must continue to match those set on the command list. To use a different sample position, the target region must be cleared first.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p><p><strong>Transitioning out of {{RENDER_TARGET}} state:</strong> If a subresource in {{RENDER_TARGET}} state is transitioned to anything other than {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some implementations may need to decompress the surface. This decompression is agnostic to sample positions.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of samples to take, per pixel. This value can be 1, 2, 4, 8, or 16, otherwise the SetSamplePosition call is dropped. The number of samples must match the sample count configured in the {{PSO}} at draw time, otherwise the behavior is undefined.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of pixels that sample patterns are being specified for. This value can be either 1 or 4, otherwise the SetSamplePosition call is dropped. A value of 1 configures a single sample pattern to be used for each pixel; a value of 4 configures separate sample patterns for each pixel in a 2x2 pixel grid which is repeated over the render-target or viewport space, aligned to even coordintes.</p> <p>Note that the maximum number of combined samples can't exceed 16, otherwise the call is dropped. If NumPixels is set to 4, NumSamplesPerPixel can specify no more than 4 samples.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_reads_(NumSamplesPerPixel*NumPixels)</code></p> <p>Specifies an array of {{D3D12_SAMPLE_POSITION}} elements. The size of the array is NumPixels * NumSamplesPerPixel. If NumPixels is set to 4, then the first group of sample positions corresponds to the upper-left pixel in the 2x2 grid of pixels; the next group of sample positions corresponds to the upper-right pixel, the next group to the lower-left pixel, and the final group to the lower-right pixel.</p> <p>If centroid interpolation is used during rendering, the order of positions for each pixel determines centroid-sampling prioritiy. That is, the first covered sample in the order specified is chosen as the centroid sample location.</p> </dd> + + + + + + + + <p> Updates mappings of tile locations in reserved resources to memory locations in a resource heap. </p> + <p>Use <strong>UpdateTileMappings</strong> to map the virtual pages of a reserved resource to the physical pages of a heap. The mapping does not have to be in order. The operation is similar to <strong>{{ID3D11DeviceContext2::UpdateTileMappings}}</strong> with the one key difference that {{D3D12}} allows a reserved resource to have tiles from multiple heaps.</p><p> In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of heap tiles. </p><p> You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update: </p><ul> <li><strong>Reserved resource whose mappings are updated.</strong> Mappings start off all {{NULL}} when a resource is initially created. </li> <li><strong>Set of tile regions on the reserved resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <ul> <li><em>NumResourceRegions</em> specifies how many regions there are.</li> <li><em>pResourceRegionStartCoordinates</em> and <em>pResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire reserved resource, including all mipmaps, array slices, or both. </li> <li> <p> If <em>pResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pResourceRegionStartCoordinates</em> without having to send an array of <em>pResourceRegionSizes</em> all set to 1. </p> </li> </ul> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Heap that provides memory where tile mappings can go.</strong> If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a heap.</li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a heap (default), a count of tiles in the reserved resource to map to a single tile in a heap (sharing the tile), a count of tile mappings in the reserved resource to skip and leave as they are, or a count of tiles in the heap to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described reserved resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each reserved resource tile specified has a mapping specified. </p> <p><em>pRangeFlags</em>, <em>pHeapRangeStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the heap; otherwise, for each range i,<em>pRangeFlags[i]</em> identifies how the mappings in that range of tiles work: </p> <ul> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NONE}}</strong>, that range defines sequential tiles in the heap, with the number of tiles being <em>pRangeTileCounts[i]</em> and the starting location <em>pHeapRangeStartOffsets[i]</em>. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE}}</strong>, <em>pHeapRangeStartOffsets[i]</em> identifies the single tile in the heap to map to, and <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to that heap location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NULL}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{NULL}} mappings. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_SKIP}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{SKIP}} mappings. </li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D12_TILE_MAPPING_FLAG_NO_HAZARD}}</strong>. Refer to the description of this flag in <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>.</li> </ul><p> Reserved resources must follow the same rules for tile aliasing, initialization, and data inheritance as placed resources. See <strong>CreatePlacedResource</strong> for more details.</p><p> Here are some examples of common <strong>UpdateTileMappings</strong> cases: </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to the reserved resource. </p> </dd> + + + <dd> <p> The number of reserved resource regions. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> A reference to the resource heap. </p> </dd> + + + <dd> <p> The number of tile ranges. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D12_TILE_RANGE_FLAGS}}</strong> values that describes each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> An array of offsets into the resource heap. These are 0-based tile offsets, counting in tiles (not bytes). </p> </dd> + + + <dd> <p> An array of tiles. An array of values that specify the number of tiles in each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source reserved resource to a destination reserved resource.</p> + <p>Use <strong>CopyTileMappings</strong> to copy the tile mappings from one reserved resource to another, either to duplicate a resource mapping, or to initialize a new mapping before modifying it using <strong>UpdateTileMappings</strong>.</p><p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across reserved resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temporary location and from there written to the destination. </p><p>The destination and the source regions must each entirely fit in their resource or behavior is undefined and the debug layer will emit an error.</p><p> For more info on tiled resources, refer to the "DirectX tiled resources" section within DirectX programming. </p> + <p>This method does not return a value. If an {{E_OUTOFMEMORY}} occurs, the device is removed.</p> + + + <dd> <p>A reference to the destination reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination reserved resource. </p> </dd> + + + <dd> <p>A reference to the source reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source reserved resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the reserved region. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>. </p> </dd> + + + + + <p>Submits an array of command lists for execution.</p> + <p> The driver is free to patch the submitted command lists. It is the calling application?s responsibility to ensure that the graphics processing unit ({{GPU}}) is not currently reading the any of the submitted command lists from a previous execution. </p><p> Applications are encouraged to batch together command list executions to reduce fixed costs associated with submitted commands to the {{GPU}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of command lists to be executed. </p> </dd> + + + <dd> <p> The array of <strong>{{ID3D12CommandList}}</strong> command lists to be executed. </p> </dd> + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command queue, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the start of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXBeginEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p>Waits until the specified fence reaches or exceeds the specified value.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Fence}}</strong> object. </p> </dd> + + + <dd> <p>The value that the command queue is waiting for the fence to reach or exceed. So when <strong>{{ID3D12Fence::GetCompletedValue}}</strong> is greater than or equal to <em>Value</em>, the wait is terminated.</p> </dd> + + + + + <p>This method is used to determine the rate at which the {{GPU}} timestamp counter increments.</p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The {{GPU}} timestamp counter frequency (in ticks/second).</p> </dd> + + + + + <p>This method samples the {{CPU}} and {{GPU}} timestamp counters at the same moment in time. </p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The value of the {{GPU}} timestamp counter.</p> </dd> + + + <dd> <p>The value of the {{CPU}} timestamp counter.</p> </dd> + + + + + <p> Gets the description of the command queue. </p> + <p> The description of the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + <p> Reports the number of physical adapters (nodes) that are associated with this device. </p> + <p> The number of physical adapters (nodes) that this device has. </p> + + + + <p>Creates a command queue.</p> + <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command queue can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandQueue}}) will get the <strong>{{GUID}}</strong> of the interface to a command queue. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command queue. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> Specifies a {{D3D12_COMMAND_QUEUE_DESC}} that describes the command queue. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the command queue interface. See remarks. An input parameter. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandQueue}}</strong> interface for the command queue. </p> </dd> + + + + + <p>Creates a command allocator object.</p> + <p> The device creates command lists from the command allocator. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command allocator. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>-typed value that specifies the type of command allocator to create. The type of command allocator can be the type that records either direct command lists or bundles. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command allocator interface (<strong>{{ID3D12CommandAllocator}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command allocator can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandAllocator}}) will get the <strong>{{GUID}}</strong> of the interface to a command allocator. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandAllocator}}</strong> interface for the command allocator. </p> </dd> + + + + + + + + <p>Creates a compute pipeline state object.</p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the pipeline state object. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure that describes compute pipeline state. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the pipeline state interface (<strong>{{ID3D12PipelineState}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the pipeline state can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12PipelineState}}) will get the <strong>{{GUID}}</strong> of the interface to a pipeline state. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12PipelineState}}</strong> interface for the pipeline state object. The pipeline state object is an immutable state object. It contains no methods. </p> </dd> + + + + + + + + <p> Gets information about the features that are supported by the current graphics driver.</p> + <p>Refer to Capability Querying.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns <strong>{{E_INVALIDARG}}</strong> if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter. </p> + + + <dd> <p> A <strong>{{D3D12_FEATURE}}</strong>-typed value that describes the feature to query for support. </p> </dd> + + + <dd> <p> The passed structure is filled with data that describes the feature support. To see the structure types, see the Remarks section in <strong>{{D3D12_FEATURE}} enumeration</strong>. </p> </dd> + + + <dd> <p> The size of the structure passed to the <em>pFeatureSupportData</em> parameter. </p> </dd> + + + + + + + + <p> Gets the size of the handle increment for the given type of descriptor heap. This value is typically used to increment a handle into a descriptor array by the correct amount.</p> + <p>The descriptor size returned by this method is used as one input to the helper structures <strong>{{CD3DX12_CPU_DESCRIPTOR_HANDLE}}</strong> and <strong>{{CD3DX12_GPU_DESCRIPTOR_HANDLE}}</strong>.</p> + <p> Returns the size of the handle increment for the given type of descriptor heap, including any necessary padding.</p> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to get the size of the handle increment for. </p> </dd> + + + + + + + + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the shader resource.</p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure that describes the shader-resource view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{SRVs}} target a full buffer and are typed (not raw or structured), and for textures {{SRVs}} target a full texture, all mips and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the shader-resource view. This handle can be created in a shader-visible or non-shader-visible descriptor heap.</p> </dd> + + + + + <p> Creates a view for unordered accessing. </p> + <p> Returns nothing. </p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the unordered access. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p> The <strong>{{ID3D12Resource}}</strong> for the counter (if any) associated with the {{UAV}}. </p> <p> If <em>pCounterResource</em> is not specified, the <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be 0. </p> <p> If <em>pCounterResource</em> is specified, then there is a counter associated with the {{UAV}}, and the runtime performs validation of the following requirements: </p> <ul> <li> The <strong>StructureByteStride</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be greater than 0. </li> <li> The format must be {{DXGI_FORMAT_UNKNOWN}}. </li> <li> The {{D3D12_BUFFER_UAV_FLAG_RAW}} flag (a <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong> enumeration constant) must not be set. </li> <li> Both of the resources (<em>pResource</em> and <em>pCounterResource</em>) must be buffers. </li> <li> The <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be a multiple of 4 bytes, and must be within the range of the counter resource. </li> <li><em>pResource</em> cannot be {{NULL}} </li> <li><em>pDesc</em> cannot be {{NULL}}. </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure that describes the unordered-access view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{UAVs}} target a full buffer and are typed, and for textures {{UAVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the unordered-access view. </p> </dd> + + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the render target. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure that describes the render-target view.</p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and {{RTVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the render-target view. </p> </dd> + + + + + + + + <p>Create a sampler object that encapsulates sampling information for a texture.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D12_SAMPLER_DESC}}</strong> structure that describes the sampler. </p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the sampler.</p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of destination descriptor ranges to copy to. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy to. </p> </dd> + + + <dd> <p> An array of destination descriptor range sizes to copy to. </p> </dd> + + + <dd> <p> The number of source descriptor ranges to copy from. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy from. </p> </dd> + + + <dd> <p> An array of source descriptor range sizes to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of descriptors to copy. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the destination descriptors to start to copy to. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the source descriptors to start to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Gets the size and alignment of memory required for a collection of resources on this adapter. </p> + <p> When using <strong>CreatePlacedResource</strong>, the application must use this method to understand the size and alignment characteristics of texture resources. The results of this method vary depending on the particular adapter, and must be treated as unique to this adapter and driver version. </p><p> Applications cannot use the output of <strong>GetResourceAllocationInfo</strong> to understand packed mip properties of textures. To understand packed mip properties of textures, applications must use <strong>GetResourceTiling</strong>. Texture resource sizes significantly differ from the information returned by <strong>GetResourceTiling</strong>, because some adapter architectures allocate extra memory for textures to reduce the effective bandwidth during common rendering scenarios. This even includes textures that have constraints on their texture layouts or have standardized texture layouts. That extra memory cannot be sparsely mapped or remapped by an application using <strong>CreateReservedResource</strong> and <strong>UpdateTileMappings</strong>, so it isn't reported in <strong>GetResourceTiling</strong>. </p><p> Applications can forgo using <strong>GetResourceAllocationInfo</strong> for buffer resources (<strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER). Buffers have the same size on all adapters, which is merely the smallest multiple of 64KB which is greater or equal to <strong>{{D3D12_RESOURCE_DESC}}</strong>::<strong>Width</strong>. </p><p> When multiple resource descriptions are passed in, the C++ algorithm for calculating a structure size and alignment are used. For example, a three-element array with two tiny 64KB-aligned resources and a tiny 4MB-aligned resource reports differing sizes based on the order of the array. If the 4MB aligned resource is in the middle, the resulting <strong>Size</strong> is 12MB. Otherwise, the resulting <strong>Size</strong> is 8MB. The <strong>Alignment</strong> returned would always be 4MB, as it is the superset of all alignments in the resource array. </p> + <p> Returns a <strong>{{D3D12_RESOURCE_ALLOCATION_INFO}}</strong> structure that provides info about video memory allocated for the specified array of resources. </p> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters). Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> The number of resource descriptors in the <em>pResourceDescs</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RESOURCE_DESC}}</strong> structures that described the resources to get info about. </p> </dd> + + + + + <p> Divulges the equivalent custom heap properties that are used for non-custom heap types, based on the adapter's architectural properties. </p> + <p> Returns a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the specified heap. The <strong>Type</strong> member of the returned {{D3D12_HEAP_PROPERTIES}} is always {{D3D12_HEAP_TYPE_CUSTOM}}. </p><p> When <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>::UMA is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L1}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{TRUE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p> + + + <dd> <p> For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter). Each bit in the mask corresponds to a single node. Only 1 bit must be set. See Multi-Adapter. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the heap to get properties for. {{D3D12_HEAP_TYPE_CUSTOM}} is not supported as a parameter value. </p> </dd> + + + + + <p> Creates both a resource and an implicit heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. </p> + <p> This method creates both a resource and a heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. The created heap is known as an implicit heap, because the heap object cannot be obtained by the application. The application must ensure the {{GPU}} will no longer read or write to this resource before releasing the final reference on the resource. </p><p> The implicit heap is made resident for {{GPU}} access before the method returns to the application. See Residency. </p><p> The resource {{GPU}} {{VA}} mapping cannot be changed. See <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong> and Volume Tiled Resources. </p><p> This method may be called by multiple threads concurrently. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. For other possible return values, see Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the resource's heap. </p> </dd> + + + <dd> <p> Heap options, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a <strong>{{D3D12_HEAP_TYPE}}</strong>_UPLOAD heap, <em>InitialResourceState</em> must be <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialResourceState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_RENDER_TARGET or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> <p> While riidResource is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to memory that receives the requested interface reference to the created resource object. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> is valid. </p> </dd> + + + + + <p> Creates a heap that can be used with placed resources and reserved resources. </p> + <p><strong>CreateHeap</strong> creates a heap that can be used with placed resources and reserved resources. Before releasing the final reference on the heap, the application must ensure that the {{GPU}} will no longer read or write to this heap. Placed resource objects will hold a reference on the heap they are created on, but reserved resources will not hold a reference for each mapping made to a heap. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the heap. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the heap interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the heap can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Heap}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a heap. <em>riid</em> is, most commonly, the {{GUID}} for <strong>{{ID3D12Heap}}</strong>, but it may be any {{GUID}} for any interface. If the resource object does not support the interface for the specified {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the heap. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p> Creates a resource that is placed in a specific heap. Placed resources are the lightest weight resource objects available, and are the fastest to create and destroy. </p> + <p><strong>CreatePlacedResource</strong> is similar to fully mapping a reserved resource to an offset within a heap; but the virtual address space associated with a heap may be reused as well. </p><p> Placed resources are lighter weight than committed resources to create and destroy, because no heap is created or destroyed during this operation. However, placed resources enable an even lighter weight technique to reuse memory than resource creation and destruction: reuse through aliasing and aliasing barriers. Multiple placed resources may simultaneously overlap each other on the same heap, but only a single overlapping resource can be used at a time. </p><p> There are two placed resource usage semantics, a simple model and an advanced model. The simple model is recommended, and is the most likely model for tool support, until the advanced model is proven to be required by the app. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Heap}}</strong> interface that represents the heap in which the resource is placed. </p> </dd> + + + <dd> <p> The offset, in bytes, to the resource. The <em>HeapOffset</em> must be a multiple of the resource's alignment, and <em>HeapOffset</em> plus the resource size must be smaller than or equal to the heap size. <strong>GetResourceAllocationInfo</strong> must be used to understand the sizes of texture resources. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a {{D3D12_HEAP_TYPE_UPLOAD}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_GENERIC_READ}}. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. </p> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. Although <strong>riid</strong> is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the resource. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> and other parameters are valid. </p> </dd> + + + + + + + + <p> Creates a shared handle to an heap, resource, or fence object. </p> + <p> Both heaps and committed resources can be shared. Sharing a committed resource shares the implicit heap along with the committed resource description, such that a compatible resource description can be mapped to the heap from another device. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following values: </p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid. </li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource. </li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li> Possibly other error codes that are described in the Direct3D 12 Return Codes topic. </li> </ul> + + + <dd> <p> A reference to the <strong>{{ID3D12DeviceChild}}</strong> interface that represents the heap, resource, or fence object to create for sharing. The following interfaces (derived from <strong>{{ID3D12DeviceChild}}</strong>) are supported: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + <dd> <p> A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a <strong>Boolean</strong> value that determines whether child processes can inherit the returned handle. </p> <p> Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor. </p> <p> The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights. </p> </dd> + + + <dd> <p>Currently the only value this parameter accepts is {{GENERIC_ALL}}.</p> </dd> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the shared heap. The name is limited to {{MAX_PATH}} characters. Name comparison is case-sensitive. </p> <p> If <em>Name</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace. </p> <p> The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users. </p> <p> The object can be created in a private namespace. For more information, see Object Namespaces. </p> </dd> + + + <dd> <p> A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource. </p> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using {{HANDLE}} and {{REFIID}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The handle that was output by the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12Heap}}) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using Name and Access. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The name that was optionally passed as the <em>Name</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The access level that was specified in the <em>Access</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the shared handle. </p> </dd> + + + + + <p>Makes objects resident for the device.</p> + <p><strong>MakeResident</strong> loads the data associated with a resource from disk, and re-allocates the memory from the resource's appropriate memory pool. This method should be called on the object which owns the physical memory. +</p><p>Use this method, and <strong>Evict</strong>, to manage {{GPU}} video memory, noting that this was done automatically in {{D3D11}}, but now has to be done by the app in {{D3D12}}.</p><p><strong>MakeResident</strong> and <strong>Evict</strong> can help applications manage the residency budget on many adapters. <strong>MakeResident</strong> explicitly pages-in data and, then, precludes page-out so the {{GPU}} can access the data. <strong>Evict</strong> enables page-out.</p><p>Some {{GPU}} architectures do not benefit from residency manipulation, due to the lack of sufficient {{GPU}} virtual address space. Use <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> and <strong>{{IDXGIAdapter3::QueryVideoMemoryInfo}}</strong> to recognize when the maximum {{GPU}} {{VA}} space per-process is too small or roughly the same size as the residency budget. For such architectures, the residency budget will always be constrained by the amount of {{GPU}} virtual address space. <strong>Evict</strong> will not free-up any residency budget on such systems. +</p><p>Applications must handle <strong>MakeResident</strong> failures, even if there appears to be enough residency budget available. Physical memory fragmentation and adapter architecture quirks can preclude the utilization of large contiguous ranges. Applications should free up more residency budget before trying again. +</p><p><strong>MakeResident</strong> is ref-counted, such that <strong>Evict</strong> must be called the same amount of times as <strong>MakeResident</strong> before <strong>Evict</strong> takes effect. Objects that support residency are made resident during creation, so a single <strong>Evict</strong> call will actually evict the object. </p><p>Applications must use fences to ensure the {{GPU}} doesn't use non-resident objects. <strong>MakeResident</strong> must return before the {{GPU}} executes a command list that references the object. <strong>Evict</strong> must be called after the {{GPU}} finishes executing a command list that references the object.</p><p>Evicted objects still consume the same {{GPU}} virtual address and same amount of {{GPU}} virtual address space. Therefore, resource descriptors and other {{GPU}} virtual address references are not invalidated after <strong>Evict</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to make resident for the device. </p> </dd> + + + <dd> <p>A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + <p>Enables the page-out of data, which precludes {{GPU}} access of that data.</p> + <p><strong>Evict</strong> persists the data associated with a resource to disk, and then removes the resource from the memory pool where it was located. This method should be called on the object which owns the physical memory: either a committed resource (which owns both virtual and physical memory assignments) or a heap - noting that reserved resources do not have physical memory, and placed resources are borrowing memory from a heap. +</p><p>Refer to the remarks for <strong>MakeResident</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to evict from the device. </p> </dd> + + + <dd> <p> A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + + + + <p>Gets the reason that the device was removed.</p> + <p>This method returns the reason that the device was removed.</p> + + + + <p> Gets a resource layout that can be copied. Helps the app fill-in <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> when suballocating space in upload heaps. </p> + <p> This routine assists the application in filling out <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structures, when suballocating space in upload heaps. The resulting structures are {{GPU}} adapter-agnostic, meaning that the values will not vary from one {{GPU}} adapter to the next. <strong>GetCopyableFootprints</strong> uses specified details about resource formats, texture layouts, and alignment requirements (from the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure) to fill out the subresource structures. Applications have access to all these details, so this method, or a variation of it, could be written as part of the app. </p> + <p> This method does not return a value. </p> + + + + <p> Creates a query heap. A query heap contains an array of queries. </p> + <p> Refer to Queries for more information. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the query heap in a <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies a {{REFIID}} that uniquely identifies the heap. </p> </dd> + + + <dd> <p> Specifies a reference to the heap, that will be returned on successful completion of the method. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p>A development-time aid for certain types of profiling and experimental prototyping.</p> + <p>This method is only useful during the development of applications. It enables developers to profile {{GPU}} usage of multiple algorithms without experiencing artifacts from dynamic frequency scaling.</p><p>Do not call this method in normal execution for a shipped application. This method only works while the machine is in developer mode. If developer mode is not enabled, then device removal will occur. Instead, call this method in response to an off-by-default, developer-facing switch. Calling it in response to command line parameters, config files, registry keys, and developer console commands are reasonable usage scenarios. </p><p>A stable power state typically fixes {{GPU}} clock rates at a slower setting that is significantly lower than that experienced by users under normal application load. This reduction in clock rate affects the entire system. Slow clock rates are required to ensure processors don?t exhaust power, current, and thermal limits. Normal usage scenarios commonly leverage a processors ability to dynamically over-clock. Any conclusions made by comparing two designs under a stable power state should be double-checked with supporting results from real usage scenarios.</p> + <p>This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>Specifies a {{BOOL}} that turns the stable power state on or off.</p> </dd> + + + + + <p> This method creates a command signature. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Describes the command signature to be created with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12RootSignature}}</strong> that the command signature applies to. </p> <p>The root signature is required if any of the commands in the signature will update bindings on the pipeline. If the only command present is a draw or dispatch, the root signature parameter can be set to {{NULL}}.</p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command signature interface (<strong>{{ID3D12CommandSignature}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command signature can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12CommandSignature}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a command signature. </p> </dd> + + + <dd> <p> Specifies a reference, that on successful completion of the method will point to the created command signature (<strong>{{ID3D12CommandSignature}}</strong>). </p> </dd> + + + + + <p> Gets info about how a tiled resource is broken into tiles. </p> + <p> To estimate the total resource size of textures needed when calculating heap sizes and calling <strong>CreatePlacedResource</strong>, use <strong>GetResourceAllocationInfo</strong> instead of <strong>GetResourceTiling</strong>. <strong>GetResourceTiling</strong> cannot be used for this. </p><p> For more information on tiled resources, refer to Volume Tiled Resources. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a tiled <strong>{{ID3D12Resource}}</strong> to get info about. </p> </dd> + + + <dd> <p> A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_PACKED_MIP_INFO}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of {{D3D12_TILE_SHAPE}} to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of {{D3D12_SUBRESOURCE_TILING}} to zeros, except the <em>StartTileIndexInOverallResource</em> member, which <strong>GetResourceTiling</strong> sets to {{D3D12_PACKED_TILE}} (0xffffffff). The {{D3D12_PACKED_TILE}} constant indicates that the whole <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p> Gets a locally unique identifier for the current device (adapter). </p> + <p> This method returns a unique identifier for the adapter that is specific to the adapter hardware. Applications can use this identifier to define robust mappings across various {{APIs}} (Direct3D 12, {{DXGI}}). </p><p> A locally unique identifier ({{LUID}}) is a 64-bit value that is guaranteed to be unique only on the system on which it was generated. The uniqueness of a locally unique identifier ({{LUID}}) is guaranteed only until the system is restarted. </p> + <p> The locally unique identifier for the adapter. </p> + + + + <p>Manages a pipeline library, in particular loading and retrieving individual {{PSOs}}.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + + + + <p>Adds the input {{PSO}} to an internal database with the corresponding name.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the name already exists, {{E_OUTOFMEMORY}} if unable to allocate storage in the library. +</p> + + + <dd> <p>Specifies a unique name for the library. Overwriting is not supported.</p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12PipelineState}}</strong> to add.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. </p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. The input desc is matched against the data in the current library database, and remembered in order to prevent duplication of {{PSO}} contents. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Returns the amount of memory required to serialize the current contents of the database. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns a {{SIZE_T}} object, containing the size required in bytes.</p> + + + + <p>Writes the contents of the library to the provided memory, to be provided back to the runtime at a later time. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the buffer provided isn?t big enough. +</p> + + + <dd> <p>Specifies a reference to the data. This memory must be readable and writeable up to the input size. This data can be saved and provided to <strong>CreatePipelineLibrary</strong> at a later time, including future instances of this or other processes. The data becomes invalidated if the runtime or driver is updated, and is not portable to other hardware or devices.</p> </dd> + + + <dd> <p>The size provided must be at least the size returned from <strong>GetSerializedSize</strong>. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter, and expands on the range of methods provided by <strong>{{ID3D12Device}}</strong>.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p> + + + + <p>Creates a cached pipeline library. By grouping {{PSOs}} that are expected to share data together into a library before serializing, there?s less overhead due to metadata, as well as opportunity to avoid redundant or duplicated data from being written to disk.</p> + <p>A pipeline library enables the following operations.</p><ul> <li>Adding Pipeline State Objects ({{PSOs}}) to an existing library object (refer to <strong>StorePipeline</strong>). </li> <li>Serializing a {{PSO}} library into a contiguous block of memory for disk storage (refer to <strong>Serialize</strong>).</li> <li>De-serializing a {{PSO}} library from persistent storage (this is handled by <strong>CreatePipelineLibrary</strong>).</li> <li>Retrieving individual {{PSOs}} from the library (refer to <strong>LoadComputePipeline</strong> and <strong>LoadGraphicsPipeline</strong>).</li> </ul><p>At no point in the lifecycle of a pipeline library is there duplication between {{PSOs}} with identical sub-components. +A recommended solution for managing the lifetime of the provided reference while only having to ref-count the returned interface is to leverage <strong>{{ID3D12Object::SetPrivateDataInterface}}</strong>, and use an object which implements <strong>{{IUnknown}}</strong>, and frees the memory when the ref-count reaches 0. +</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the blob is corrupted or unrecognized, {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} if the provided data came from an old driver or runtime, and {{D3D12_ERROR_ADAPTER_NOT_FOUND}} if the data came from different hardware.</p><p>If you pass nullptr for <em>ppPipelineLibrary</em> then the runtime will still perform the validation of the blob but avoid creating the actual library and returns {{S_FALSE}} if the library would have been created.</p><p>Also, the feature requires an updated driver, and attempting to use it on old drivers will return {{E_NOTIMPL}}.</p> + + + <dd> <p> If the input library blob is empty, the initial contents of the library is empty. If the input library blob is not empty, it is validated for integrity, parsed, and the reference is stored. The reference provided as input to this method must remain valid for the lifetime of the object returned. For efficiency reasons, the data is not copied. +</p> </dd> + + + <dd> <p>Specifies the length of <em>pLibraryBlob</em> in bytes.</p> </dd> + + + <dd> <p>Specifies a unique {{REFIID}} for the <strong>{{ID3D12PipelineLibrary}}</strong> object. +Typically set this and the following parameter with the macro <code>{{IID_PPV_ARGS}}(&amp;Library)</code>, where <em>Library</em> is the name of the object.</p> </dd> + + + <dd> <p>Returns a reference to the created library.</p> </dd> + + + + + <p>Specifies an event that should be fired when one or more of a collection of fences reach specific values.</p> + <p>To specify a single fence refer to the <strong>SetEventOnCompletion</strong> method.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the <strong>{{ID3D12Fence}}</strong> objects.</p> </dd> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the fence values required for the event is to be signaled.</p> </dd> + + + <dd> <p>Specifies the number of fences to be included.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_MULTIPLE_FENCE_WAIT_FLAGS}}</strong> that determines how to proceed.</p> </dd> + + + <dd> <p>A handle to the event object.</p> </dd> + + + + + <p> </p><p>This method sets residency priorities of a specified list of objects.</p> + <p>For more information, refer to Residency.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies the number of objects in the <em>ppObjects</em> and <em>pPriorities</em> arrays.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, containing references to <strong>{{ID3D12Pageable}}</strong> objects.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, of <strong>{{D3D12_RESIDENCY_PRIORITY}}</strong> values for the list of objects.</p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + <p> Deserializes a root signature so you can determine the layout definition (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). </p> + <p>This function has been superceded by <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong>.</p><p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12RootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12RootSignatureDeserializer::GetRootSignature}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). <strong>{{ID3D12RootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12RootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Serializes a root signature of any version that can be passed to <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p> + <p> If an application procedurally generates a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, it must pass a reference to this <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> in a call to <strong>{{D3D12SerializeVersionedRootSignature}}</strong> to make the serialized form. The application then passes the serialized form to which <em>ppBlob</em> points into <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p><p> If a shader has been authored with a root signature in it (when that capability is added), the compiled shader will contain a serialized root signature in it already. </p><p> The function signature {{PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function was released with the Windows 10 Anniversary Update (14393) and supersedes <strong>{{D3D12SerializeRootSignature}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Gets a debug interface. </p> + <p> The function signature {{PFN_D3D12_GET_DEBUG_INTERFACE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the debug interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the debug interface can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Debug}}</strong>) will get the <strong>{{GUID}}</strong> of the debug interface. </p> </dd> + + + <dd> <p> The debug interface, as a reference to reference to void. See <strong>{{ID3D12Debug}}</strong> and <strong>{{ID3D12DebugDevice}}</strong>. </p> </dd> + + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Specifies options for the amount of information to report about a live device object's lifetime. </p> + <p> This enumeration is used by <strong>{{ID3D12DebugDevice::ReportLiveDeviceObjects}}</strong>. </p> + + + <dd></dd> + + + <dd> <p>Obtain a summary about a live device object's lifetime. </p> </dd> + + + <dd> <p>Obtain detailed information about a live device object's lifetime. </p> </dd> + + + <dd> <p> Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the data type of the memory pointed to by the <em>pData</em> parameter of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + + <p>Flags for optional {{D3D12}} Debug Layer features.</p> + <p>This enum is used by <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + <dd> <p>The default. No optional Debug Layer features.</p> </dd> + + + <dd> <p>The Debug Layer is allowed to deliberately change functional behavior of an application in order to help identify potential errors. By default, the Debug Layer allows most invalid {{API}} usage to run the natural course.</p> </dd> + + + <dd> <p>Performs additional resource state validation of resources set in descriptors at the time <strong>{{ID3D12CommandQueue::ExecuteCommandLists}}</strong> is called. By design descriptors can be changed even after submitting command lists assuming proper synchronization. Conservative resource state tracking ignores this allowance and validates all resources used in descriptor tables when <strong>ExecuteCommandLists</strong> is called. The result may be false validation errors.</p> </dd> + + + <dd> <p>Disables validation of bundle commands by virtually injecting checks into the calling command list validation paths.</p> </dd> + + + <dd> <p>Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of shader patching used by {{GPU}}-Based Validation at either the device or command list level.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p> + + + <dd> <p>No shader patching is to be done. This will retain the original shader bytecode. Can lead to errors in some of the {{GPU}}-Based Validation state tracking as the unpatched shader may still change resource state (see Common state promotion) but the promotion will be untracked without patching the shader. This can improve performance but no validation will be performed and may also lead to misleading {{GPU}}-Based Validation errors. Use this mode very carefully. </p> </dd> + + + <dd> <p>Shaders can be patched with resource state tracking code but no validation. This may improve performance but no validation will be performed.</p> </dd> + + + <dd> <p>The default. Shaders are patched with validation code but erroneous instructions will still be executed. </p> </dd> + + + <dd> <p>Shaders are patched with validation code and erroneous instructions are skipped in execution. This can help avoid crashes or device removal.</p> </dd> + + + <dd> <p>Unused, simply the count of the number of modes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how {{GPU}}-Based Validation handles patched pipeline states during <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> and <strong>{{ID3D12Device::CreateComputePipelineState}}</strong>.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p><p>Generally speaking most application developers are likely to leave this parameter unchanged. However, if the overhead of deferring patched {{PSO}} creation is suspected to be too much of a performance problem, then developers should consider changing this setting.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Indicates the debug parameter type used by <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugCommandList1::GetDebugParameter}}</strong>.</p> + + + + <p> Specifies categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D12InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters. </p> + <p>This is part of the Information Queue feature, refer to the <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + + <p> Debug message severity levels for an information queue.</p> + <p> Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>AddApplicationMessage</strong> and <strong>AddMessage</strong>. </p> + + + <dd> <p> Indicates a corruption error. </p> </dd> + + + <dd> <p> Indicates an error. </p> </dd> + + + <dd> <p> Indicates a warning. </p> </dd> + + + <dd> <p> Indicates an information message. </p> </dd> + + + <dd> <p> Indicates a message other than corruption, error, warning or information. </p> </dd> + + + + + <p> Specifies debug message {{IDs}} for setting up an info-queue filter (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>); use these messages to allow or deny message categories to pass through the storage and retrieval filters. These {{IDs}} are used by methods such as <strong>{{ID3D12InfoQueue::GetMessage}}</strong> or <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. </p> + <p> This enum is used by <strong>AddMessage</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes settings used by {{GPU}}-Based Validation. </p> + <p>Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> to configure device-wide {{GPU}}-Based Validation settings. </p><p>Individual command lists can override the default shader patch mode using <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong>.</p> + + + <dd> <p>Specifies a {{UINT}} that limits the number of messages that can be stored in the {{GPU}}-Based Validation message log. The default value is 256. Since many identical errors can be produced in a single Draw/Dispatch call it may be useful to increase this number. Note this can become a memory burden if a large number of command lists are used as there is a committed message log per command list.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that {{GPU}}-Based Validation uses when injecting validation code into shaders, except when overridden by per-command-list {{GPU}}-Based Validation settings (see <strong>{{D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS}}</strong>). The default value is {{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION}}.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS}}</strong> that indicates how {{GPU}}-Based Validation handles patching pipeline states. The default value is {{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE}}.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes per-command-list settings used by {{GPU}}-Based Validation. </p> + <p> Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> to configure per-command-list {{GPU}}-Based Validation settings. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that overrides the default device-level shader patch mode (see <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong>). By default this value is initialized to the <em>DefaultShaderPatchMode</em> assigned to the device (see <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong>.</p> </dd> + + + + + <p> A debug message in the Information Queue.</p> + <p> This structure is returned from <strong>{{ID3D12InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D12InfoQueue}}</strong>). </p> + + + <dd> <p> The category of the message. See <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>. </p> </dd> + + + <dd> <p> The severity of the message. See <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>. </p> </dd> + + + <dd> <p> The {{ID}} of the message. See <strong>{{D3D12_MESSAGE_ID}}</strong>. </p> </dd> + + + <dd> <p> The message string. </p> </dd> + + + <dd> <p> The length of <em>pDescription</em>, in bytes. </p> </dd> + + + + + <p> Allow or deny certain types of messages to pass through a filter.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p>Number of message categories to allow or deny. </p> </dd> + + + <dd> <p> Array of message categories to allow or deny. Array must have at least <em>NumCategories</em> members (see <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>). </p> </dd> + + + <dd> <p> Number of message severity levels to allow or deny. </p> </dd> + + + <dd> <p> Array of message severity levels to allow or deny. Array must have at least <em>NumSeverities</em> members (see <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>). </p> </dd> + + + <dd> <p> Number of message {{IDs}} to allow or deny. </p> </dd> + + + <dd> <p> Array of message {{IDs}} to allow or deny. Array must have at least <em>NumIDs</em> members (see <strong>{{D3D12_MESSAGE_ID}}</strong>). </p> </dd> + + + + + <p> Debug message filter; contains a lists of message types to allow or deny.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p> Specifies types of messages that you want to allow. See <strong>{{D3D12_INFO_QUEUE_FILTER_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies types of messages that you want to deny. </p> </dd> + + + + + <p> A debug interface controls debug settings and validates pipeline state. It can only be used if the debug layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Enables the debug layer. </p> + <p>To enable the debug layers using this {{API}}, it must be called before the {{D3D12}} device is created. Calling this {{API}} after creating the {{D3D12}} device will cause the {{D3D12}} runtime to remove the device.</p> + <p> This method does not return a value. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds {{GPU}}-Based Validation and Dependent Command Queue Synchronization to the debug layer.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables the debug layer.</p> + <p>This method is identical to <strong>{{ID3D12Debug::EnableDebugLayer}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This method enables or disables {{GPU}}-Based Validation ({{GBV}}) before creating a device with the debug layer enabled. </p> + <p>{{GPU}}-Based Validation can only be enabled/disabled prior to creating a device. By default, {{GPU}}-Based Validation is disabled. To disable {{GPU}}-Based Validation after initially enabling it the device must be fully released and recreated. </p><p>For more information, see Using {{D3D12}} Debug Layer {{GPU}}-Based Validation.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable {{GPU}}-Based Validation, otherwise {{FALSE}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables dependent command queue synchronization when using a {{D3D12}} device with the debug layer enabled.</p> + <p>Dependent Command Queue Synchronization is a {{D3D12}} Debug Layer feature that gives the debug layer the ability to track resource states more accurately when enabled. Dependent Command Queue Synchronization is enabled by default. </p><p>When Dependent Command Queue Synchronization is enabled, the debug layer holds back actual submission of {{GPU}} work until all outstanding fence <strong>Wait</strong> conditions are met. This gives the debug layer the ability to make reasonable assumptions about {{GPU}} state (such as resource states) on the {{CPU}}-timeline when multiple command queues are potentially doing concurrent work.</p><p>With Dependent Command Queue Synchronization disabled, all resource states tracked by the debug layer are cleared each time <strong>{{ID3D12CommandQueue::Signal}}</strong> is called. This results in significantly less useful resource state validation.</p><p>Disabling Dependent Command Queue Synchronization may reduce some debug layer performance overhead when using multiple command queues. However, it is suggested to leave it enabled unless this overhead is problematic. Note that applications that use only a single command queue will see no performance changes with Dependent Command Queue Synchronization disabled.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable Dependent Command Queue Synchronization, otherwise {{FALSE}}.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies device-wide debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies the {{D3D12}} optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to get.</p> </dd> + + + <dd> <p>Debug parameter data to set.</p> </dd> + + + <dd> <p>Size in bytes of the data pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the amount of information to report on a device object's lifetime.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> </dd> + + + + + <p> This interface represents a graphics device for debugging. </p> + + + + <p> Set a bit field of flags that will turn debug features on and off. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> Feature-mask flags, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, that feature will be set to on; otherwise, the feature will be set to off. </p> </dd> + + + + + <p> Gets a bit field of flags that indicates which debug features are on or off. </p> + <p> Mask of feature-mask flags, as a bitwise {{OR}}'ed combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. </p> + + + + <p> Reports information about a device object's lifetime. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime. </p> </dd> + + + + + <p> Provides methods to monitor and debug a command queue. </p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method is very similar to <strong>{{ID3D12DebugCommandList::AssertResourceState}}</strong>, however there are methods on the command queue that work directly with resources that might need to be monitored (for example <strong>{{ID3D13CommandQueue::CopyTileMappings}}</strong>).</p> + <p> This method returns true if the resource or subresource is in the specified state, false otherwise. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p> The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p> Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This interface enables modification of additional command list debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Validates that the given state matches the state of the subresource, assuming the state of the given subresource is known during recording of a command list (e.g. the resource was transitioned earlier in the same command list recording). If the state is not yet known this method sets the known state for further validation later in the same command list recording.</p> + <p>Since execution of command lists occurs sometime after recording, the state of a resource often cannot be known during command list recording. <strong>AssertResourceState</strong> gives an application developer the ability to impose an assumed state on a resource or subresource at a fixed recording point in a command list.</p><p>Often the state of a resource or subresource can either be known due to a previous barrier or inferred-by-use (for example, was used in an earlier call to <strong>CopyBufferRegion</strong>) during command list recording. In such cases <strong>AssertResourceState</strong> can produce a debug message if the given state does not match the known or assumed state.</p><p>This {{API}} is for debug validation only and does not affect the actual runtime or {{GPU}} state of the resource.</p> + <p>This method returns <strong>true</strong> if the tracked state of the resource or subresource matches the specified state, <strong>false</strong> otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more <strong>{{D3D12_RESOURCE_STATES}}</strong> flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies optional Debug Layer settings of a command list.</p> + <p>Certain debug behaviors of {{D3D12}} Debug Layer can be modified by setting debug parameters. These can be used to toggle extra validation or expose experimental debug features.</p><p><strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> only impacts debug settings for the associated command list. For device-wide debug parameters see the <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> method.</p><p>Resetting a command list restores the debug parameters to the default values. This is because a command list reset is treated as equivalent to creating a new command list.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Pointer to debug parameter data to set. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Specifies the size in bytes of the debug parameter <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional Command List Debug Layer settings.</p> + <p> Returns {{S_OK}} if successful, otherwise {{E_INVALIDARG}}. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that determines which debug parameter data to copy to the memory pointed to by <em>pData</em>.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p> Provides methods to monitor and debug a command list.</p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method returns true if the resource or subresource is in the specified state, false otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p> Turns the debug features for a command list on or off.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. </p> </dd> + + + + + <p> Returns the debug feature flags that have been set on a command list. </p> + <p> A bit mask containing the set debug features. </p> + + + + <p> An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Set the maximum number of messages that can be added to the message queue. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Maximum number of messages that can be added to the message queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> </dd> + + + + + <p> Clear all messages from the message queue. </p> + <p> This method does not return a value. </p> + + + + <p> Get a message from the message queue. </p> + <p>This method does not remove any messages from the message queue. </p><p>This method gets messages from the message queue after an optional retrieval filter has been applied. </p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example: </p><code> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D12_MESSAGE}} * pMessage = ({{D3D12_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>GetNumStoredMessagesAllowedByRetrievalFilter</strong>). 0 is the message at the front of the message queue. </p> </dd> + + + <dd> <p> Returned message.</p> </dd> + + + <dd> <p>Size of <em>pMessage</em> in bytes. </p> </dd> + + + + + <p> Get the number of messages that were allowed to pass through a storage filter. </p> + <p> Number of messages allowed by a storage filter. </p> + + + + <p>Get the number of messages that were denied passage through a storage filter. </p> + <p> Number of messages denied by a storage filter. </p> + + + + <p> Get the number of messages currently stored in the message queue. </p> + <p> Number of messages currently stored in the message queue. </p> + + + + <p> Get the number of messages that are able to pass through a retrieval filter. </p> + <p>Number of messages allowed by a retrieval filter. </p> + + + + <p> Get the number of messages that were discarded due to the message count limit. </p> + <p>Get and set the message count limit with <strong>GetMessageCountLimit</strong> and <strong>SetMessageCountLimit</strong>, respectively. </p> + <p> Number of messages discarded. </p> + + + + <p> Get the maximum number of messages that can be added to the message queue. </p> + <p> Maximum number of messages that can be added to the queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> + + + + <p> Add storage filters to the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Array of storage filters.</p> </dd> + + + + + <p> Get the storage filter at the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Storage filter at the top of the storage-filter stack. </p> </dd> + + + <dd> <p> Size of the storage filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the storage filter will be output to this parameter. </p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty storage filter onto the storage-filter stack. </p> + <p>An empty storage filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a storage filter onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a storage filter.</p> </dd> + + + + + <p> Pop a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the storage-filter stack in bytes. </p> + <p> Size of the storage-filter stack in bytes. </p> + + + + <p> Add storage filters to the top of the retrieval-filter stack. </p> + <p>The following code example shows how to use this method: </p><code> {{D3D12_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D12_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D12_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D12_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D12_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); </code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Array of retrieval filters. </p> </dd> + + + + + <p> Get the retrieval filter at the top of the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Retrieval filter at the top of the retrieval-filter stack. </p> </dd> + + + <dd> <p> Size of the retrieval filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the retrieval filter will be output to this parameter. </p> </dd> + + + + + <p> Remove a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty retrieval filter onto the retrieval-filter stack. </p> + <p>An empty retrieval filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a retrieval filter onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a retrieval filter.</p> </dd> + + + + + <p> Pop a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the retrieval-filter stack in bytes. </p> + <p> Size of the retrieval-filter stack in bytes. </p> + + + + <p>Adds a debug message to the message queue and sends that message to debug output. </p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D12InfoQueue::AddApplicationMessage}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Category of a message. </p> </dd> + + + <dd> <p> Severity of a message. </p> </dd> + + + <dd> <p> Unique identifier of a message. </p> </dd> + + + <dd> <p> User-defined message. </p> </dd> + + + + + <p> Adds a user-defined message to the message queue and sends that message to debug output. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Severity of a message.</p> </dd> + + + <dd> <p> Specifies the message string. </p> </dd> + + + + + <p> Set a message category to break on when a message with that category passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A message severity level to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Get a message category to break on when a message with that category passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message severity level to break on.</p> </dd> + + + + + <p> Get a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + + + <p> Set a boolean that turns the debug output on or off. </p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Disable/Enable the debug output (true to disable or mute the output, false to enable the output). </p> </dd> + + + + + <p> Get a boolean that determines if debug output is on or off. </p> + <p> Whether the debug output is on or off (true for on, false for off). </p> + + + + <p>Options for the amount of information to report about a device object's lifetime.</p> + <p> This enumeration is used by <strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>. </p><p> Several inline functions exist to combine the options using operators, see the {{D3D11SDKLayers}}.h header file for details. </p> + + + <dd> <p> Specifies to obtain a summary about a device object's lifetime. </p> </dd> + + + <dd> <p> Specifies to obtain detailed information about a device object's lifetime. </p> </dd> + + + <dd> <p> Do not use this enumeration constant. It is for internal use only. </p> </dd> + + + + + <p>Indicates which resource types to track.</p> + <p>The <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> or <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> method tracks a specific type of resource.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No resource types are tracked.</p> </dd> + + + <dd> <p>Track device memory that is created with unordered access view ({{UAV}}) bind flags.</p> </dd> + + + <dd> <p>Track device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory.</p> </dd> + + + <dd> <p>Track all shaders that use group shared memory.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created with {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all memory on the device.</p> </dd> + + + + + <p>Options that specify how to perform shader debug tracking.</p> + <p> This enumeration is used by the following methods: </p><ul> <li> <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11RefTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> </li> </ul><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No debug tracking is performed.</p> </dd> + + + <dd> <p>Track the reading of uninitialized data.</p> </dd> + + + <dd> <p>Track read-after-write hazards.</p> </dd> + + + <dd> <p>Track write-after-read hazards.</p> </dd> + + + <dd> <p>Track write-after-write hazards.</p> </dd> + + + <dd> <p>Track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address.</p> </dd> + + + <dd> <p>Track read-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-read hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address across thread groups.</p> </dd> + + + <dd> <p>Track hazards that are specific to unordered access views ({{UAVs}}).</p> </dd> + + + <dd> <p>Track all hazards.</p> </dd> + + + <dd> <p>Track all hazards and track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p> All of the preceding tracking options are set except <strong>{{D3D11_SHADER_TRACKING_OPTION_IGNORE}}</strong>. </p> </dd> + + + + + <p>Categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D11InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D11InfoQueue::AddMessage}}</strong>. When creating an <strong>info queue filter</strong>, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.</p> + <p>This is part of the Information Queue feature. See <strong>{{ID3D11InfoQueue}} Interface</strong>.</p> + + + + <p>Debug message severity levels for an information queue.</p> + <p>Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + + + <dd> <p>Defines some type of corruption which has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + + + + <p>A debug message in the Information Queue.</p> + <p>This structure is returned from <strong>{{ID3D11InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D11InfoQueue}} Interface</strong>).</p> + + + <dd> <p>The category of the message. See <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>The severity of the message. See <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>.</p> </dd> + + + <dd> <p>The {{ID}} of the message. See <strong>{{D3D11_MESSAGE_ID}}</strong>.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of pDescription in bytes.</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by querying it from the <strong>{{ID3D11Device}}</strong> using <strong>{{IUnknown::QueryInterface}}</strong>. </p><p> For more information about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set a bit field of flags that will turn debug features on and off.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>Setting one of the following feature-mask flags will cause a rendering-operation method (listed below) to do some extra task when called. </p><table> <tr><td>{{D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP}} (0x2)</td><td>Application will wait for the {{GPU}} to finish processing the rendering operation before continuing.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP}} (0x1)</td><td>Runtime will additionally call <strong>{{ID3D11DeviceContext::Flush}}</strong>.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} (0x4)</td><td>Runtime will call <strong>{{IDXGISwapChain::Present}}</strong>. Presentation of render buffers will occur according to the settings established by prior calls to <strong>{{ID3D11Debug::SetSwapChain}}</strong> and <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</td></tr> </table><p>?</p><p>These feature-mask flags apply to the following rendering-operation methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::Draw}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexed}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawAuto}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopyResource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> </li> </ul><p>By setting one of the following feature-mask flags, you can control the behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods to aid in testing and debugging. </p><strong>Note</strong>??These flags are supported by the Direct3D 11.1 runtime, which is available starting with Windows?8.?<table> <tr><td>{{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}} (0x8)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is always discarded. Use this flag to test code paths that regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}}.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}} (0x10)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is never discarded. Use this flag to test code paths that do not need to regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}}.</td></tr> </table><p>?</p><p>The behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods depends on system-wide memory pressure. Therefore, the scenario where content is lost and must be regenerated is uncommon for most applications. The preceding new options in the Direct3D debug layer let you simulate that scenario consistently and test code paths.</p><p>The following flag is supported by the Direct3D 11.1 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} (0x40)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>When the debug layer is enabled, it performs certain actions to reveal application problems. By setting the {{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} feature-mask flag, you can enable the debug layer without getting the following default debugging behavior:</p><ul> <li>If an application calls <strong>{{ID3D11DeviceContext1::DiscardView}}</strong>, the runtime fills in the resource with a random color.</li> <li>If an application calls <strong>{{IDXGISwapChain1::Present1}}</strong> with partial presentation parameters, the runtime ignores the partial presentation information.</li> </ul><p>The following flag is supported by the Direct3D 11.2 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} (0x80)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>By default (that is, without {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} set), the debug layer validates the proper usage of all tile mappings for tiled resources for bound resources for every operation performed on the device context (for example, draw, copy, and so on). Depending on the size of the tiled resources used (if any), this validation can be processor intensive and slow. Apps might want to initially run with tiled resource tile mapping validation on; then, when they determine that the calling pattern is safe, they can disable the validation by setting {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}}.</p><p>If {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set when a tiled resource is created, the debug layer never performs the tracking of tile mapping for that resource for its entire lifetime. Alternatively, if {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set for any given device context method call (like draw or copy calls) involving tiled resources, the debug layer skips all tile mapping validation for the call.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. For descriptions of the feature-mask flags, see Remarks.</p> </dd> + + + + + <p>Get a bitfield of flags that indicates which debug features are on or off.</p> + <p>Mask of feature-mask flags bitwise {{ORed}} together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See <strong>{{ID3D11Debug::SetFeatureMask}}</strong> for a list of possible feature-mask flags.</p> + + + + <p>Set the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The application will only sleep if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is a set in the <strong>feature mask</strong>. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <p>Value is set with <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</p> + <p>Number of milliseconds to sleep after Present is called.</p> + + + + <p>Sets a swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The swap chain set by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <p>The swap chain retrieved by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Check to see if the draw pipeline state is valid.</p> + <p>Use validate prior to calling a draw method (for example, <strong>{{ID3D11DeviceContext::Draw}}</strong>); validation requires the debug layer.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong>, that represents a device context.</p> </dd> + + + + + <p>Report information about a device object's lifetime.</p> + <p><strong>ReportLiveDeviceObjects</strong> uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value from the <strong>{{D3D11_RLDO_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Verifies whether the dispatch pipeline state is valid.</p> + <p>Use this method before you call a dispatch method (for example, <strong>{{ID3D11DeviceContext::Dispatch}}</strong>). Validation requires the debug layer.</p> + <p>This method returns one of the return codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong> that represents a device context.</p> </dd> + + + + + <strong>Note</strong>?? The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <p>The tracing device interface sets shader tracking information, which enables accurate logging and playback of shader execution.</p> + <p>To get this interface, turn on the debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the reference rasterizer's default race-condition tracking options for the specified resource types.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on," otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets the reference rasterizer's race-condition tracking options for a specific shader.</p> + <strong>Note</strong>??After a call to <strong>SetShaderTrackingOptions</strong>, the tracking options that the <em>Options</em> parameter specifies are set for all calls by the shader that the <em>pShader</em> parameter specifies, until the next call to <strong>SetShaderTrackingOptions</strong>. If you set a flag that is specific to unordered access views ({{UAV}}) (for example, <strong>{{D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS}}</strong>) in the <em>Options</em> parameter for a compute shader, <strong>SetShaderTrackingOptions</strong> ignores it.?<strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.</p> + <p> To get this interface, turn on debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Maximum number of messages that can be added to the message queue. -1 means no limit.</p> </dd> + + + + + <p>Clear all messages from the message queue.</p> + <p>Returns nothing.</p> + + + + <p>Get a message from the message queue.</p> + <p>This method does not remove any messages from the message queue.</p><p>This method gets messages from the message queue after an optional retrieval filter has been applied.</p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D11_MESSAGE}} * pMessage = ({{D3D11_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</pre><p>For an overview see <strong>Information Queue Overview</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>{{ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter}}</strong>). 0 is the message at the front of the message queue.</p> </dd> + + + <dd> <p>Returned message (see <strong>{{D3D11_MESSAGE}}</strong>).</p> </dd> + + + <dd> <p>Size of pMessage in bytes, including the size of the message string that the pMessage points to.</p> </dd> + + + + + <p>Get the number of messages that were allowed to pass through a storage filter.</p> + <p>Number of messages allowed by a storage filter.</p> + + + + <p>Get the number of messages that were denied passage through a storage filter.</p> + <p>Number of messages denied by a storage filter.</p> + + + + <p>Get the number of messages currently stored in the message queue.</p> + <p>Number of messages currently stored in the message queue.</p> + + + + <p>Get the number of messages that are able to pass through a retrieval filter.</p> + <p>Number of messages allowed by a retrieval filter.</p> + + + + <p>Get the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{ID3D11InfoQueue::GetMessageCountLimit}}</strong> and <strong>{{ID3D11InfoQueue::SetMessageCountLimit}}</strong>, respectively.</p> + <p>Number of messages discarded.</p> + + + + <p>Get the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>Maximum number of messages that can be added to the queue. -1 means no limit.</p> + + + + <p>Add storage filters to the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of storage filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the storage filter at the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Storage filter at the top of the storage-filter stack.</p> </dd> + + + <dd> <p>Size of the storage filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the storage filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a storage filter onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a storage filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the storage-filter stack in bytes.</p> + <p>Size of the storage-filter stack in bytes.</p> + + + + <p>Add storage filters to the top of the retrieval-filter stack.</p> + <p>The following code example shows how to use <strong>{{ID3D11InfoQueue::AddRetrievalFilterEntries}}</strong>:</p><pre> {{D3D11_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D11_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D11_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D11_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D11_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of retrieval filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the retrieval filter at the top of the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Retrieval filter at the top of the retrieval-filter stack.</p> </dd> + + + <dd> <p>Size of the retrieval filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the retrieval filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a retrieval filter onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a retrieval filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the retrieval-filter stack in bytes.</p> + <p>Size of the retrieval-filter stack in bytes.</p> + + + + <p>Add a debug message to the message queue and send that message to debug output.</p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Category of a message (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Unique identifier of a message (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>User-defined message.</p> </dd> + + + + + <p>Add a user-defined message to the message queue and send that message to debug output.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Message string.</p> </dd> + + + + + <p>Set a message category to break on when a message with that category passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>, which represents a message severity level to break on.</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Get a message category to break on when a message with that category passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message severity level to break on (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + + + <p>Get a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Set a boolean that turns the debug output on or off.</p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.</p> + <p>Returns nothing.</p> + + + <dd> <p>Disable/Enable the debug output (<strong>{{TRUE}}</strong> to disable or mute the output, <strong>{{FALSE}}</strong> to enable the output).</p> </dd> + + + + + <p>Get a boolean that turns the debug output on or off.</p> + <p>Whether the debug output is on or off (true for on, false for off).</p> + + + + <p>Indicates the device state.</p> + <p>A state-block mask indicates the device states that a pass or a technique changes.</p> + + + <dd> <p>Boolean value indicating whether to save the vertex shader state. </p> </dd> + + + <dd> <p>Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of vertex-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the hull shader state. </p> </dd> + + + <dd> <p>Array of hull-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of hull-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of hull-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of hull-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the domain shader state. </p> </dd> + + + <dd> <p>Array of domain-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.</p> </dd> + + + <dd> <p>Array of domain-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of domain-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.</p> </dd> + + + <dd> <p>Array of domain-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the geometry shader state. </p> </dd> + + + <dd> <p>Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot. </p> </dd> + + + <dd> <p>Array of geometry-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader state.</p> </dd> + + + <dd> <p>Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of pixel-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader unordered access views.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader state.</p> </dd> + + + <dd> <p>Array of compute-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of compute-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of compute-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of compute-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader unordered access views.</p> </dd> + + + <dd> <p>Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the index buffer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the input layout state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the primitive topology state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the render targets states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the depth-stencil state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the blend state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the viewports states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the scissor rectangles states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the rasterizer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the stream-out buffers states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the predication state. </p> </dd> + + + + + <p>Describes an effect-variable type.</p> + <p>{{D3DX11_EFFECT_TYPE_DESC}} is used with <strong>{{ID3DX11EffectType::GetDesc}}</strong> </p> + + + <dd> <p>Name of the type, for example "float4" or "MyStruct".</p> </dd> + + + <dd> <p>The variable class (see <strong>{{D3D10_SHADER_VARIABLE_CLASS}}</strong>). </p> </dd> + + + <dd> <p>The variable type (see <strong>{{D3D10_SHADER_VARIABLE_TYPE}}</strong>).</p> </dd> + + + <dd> <p>Number of elements in this type (0 if not an array).</p> </dd> + + + <dd> <p>Number of members (0 if not a structure).</p> </dd> + + + <dd> <p>Number of rows in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of columns in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of bytes required to represent this data type, when tightly packed.</p> </dd> + + + <dd> <p>Number of bytes occupied by this data type, when laid out in a constant buffer.</p> </dd> + + + <dd> <p>Number of bytes to seek between elements, when laid out in a constant buffer.</p> </dd> + + + + + <p>Describes an effect variable.</p> + <p>{{D3DX11_EFFECT_VARIABLE_DESC}} is used with <strong>{{ID3DX11EffectVariable::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this variable, annotation, or structure member.</p> </dd> + + + <dd> <p>Semantic string of this variable or structure member ({{NULL}} for annotations or if not present).</p> </dd> + + + <dd> <p>Optional flags for effect variables.</p> </dd> + + + <dd> <p>Number of annotations on this variable (always 0 for annotations).</p> </dd> + + + <dd> <p>Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers).</p> </dd> + + + <dd> <p>Used if the variable has been explicitly bound using the register keyword. Check Flags for {{D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT}}.</p> </dd> + + + + + <p>Describes an effect shader.</p> + <p>{{D3DX11_EFFECT_SHADER_DESC}} is used with <strong>{{ID3DX11EffectShaderVariable::GetShaderDesc}}</strong>.</p> + + + <dd> <p>Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> is the shader is defined inline; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Shader bytecode.</p> </dd> + + + <dd> <p>The length of pBytecode. </p> </dd> + + + <dd> <p>Stream out declaration string (for geometry shader with {{SO}}).</p> </dd> + + + <dd> <p>Indicates which stream is rasterized. {{D3D11}} geometry shaders can output up to four streams of data, one of which can be rasterized.</p> </dd> + + + <dd> <p>Number of entries in the input signature.</p> </dd> + + + <dd> <p>Number of entries in the output signature.</p> </dd> + + + <dd> <p>Number of entries in the patch constant signature.</p> </dd> + + + + + <p>Describes an effect pass, which contains pipeline state.</p> + <p>{{D3DX11_PASS_DESC}} is used with <strong>{{ID3DX11EffectPass::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this pass (<strong>{{NULL}}</strong> if not anonymous).</p> </dd> + + + <dd> <p>Number of annotations on this pass.</p> </dd> + + + <dd> <p>Signature from the vertex shader or geometry shader (if there is no vertex shader) or <strong>{{NULL}}</strong> if neither exists.</p> </dd> + + + <dd> <p>Singature size in bytes.</p> </dd> + + + <dd> <p>The stencil-reference value used in the depth-stencil state.</p> </dd> + + + <dd> <p>The sample mask for the blend state.</p> </dd> + + + <dd> <p>The per-component blend factors ({{RGBA}}) for the blend state.</p> </dd> + + + + + <p>Describes an effect pass.</p> + <p>{{D3DX11_PASS_SHADER_DESC}} is used with <strong>{{ID3DX11EffectPass}}</strong> Get*ShaderDesc methods.</p><p>If this is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. It's name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, pShaderVariable != <strong>{{NULL}}</strong>, but pShaderVariable-&gt;IsValid() == <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The variable that this shader came from.</p> </dd> + + + <dd> <p>The element of pShaderVariable (if an array) or 0 if not applicable.</p> </dd> + + + + + <p>Describes an effect technique.</p> + <p>{{D3DX11_TECHNIQUE_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this technique ({{NULL}} if not anonymous).</p> </dd> + + + <dd> <p>Number of passes contained in the technique.</p> </dd> + + + <dd> <p>Number of annotations on this technique.</p> </dd> + + + + + <p>Describes an effect group.</p> + <p>{{D3DX11_GROUP_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this group (only <strong>{{NULL}}</strong> if global).</p> </dd> + + + <dd> <p>Number of techniques contained in group.</p> </dd> + + + <dd> <p>Number of annotations on this group.</p> </dd> + + + + + <p>Describes an effect.</p> + <p>{{D3DX11_EFFECT_DESC}} is used with <strong>{{ID3DX11Effect::GetDesc}}</strong>.</p> + + + <dd> <p>Number of constant buffers in this effect.</p> </dd> + + + <dd> <p>Number of global variables in this effect.</p> </dd> + + + <dd> <p>Number of global interfaces in this effect.</p> </dd> + + + <dd> <p>Number of techniques in this effect.</p> </dd> + + + <dd> <p>Number of groups in this effect.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Tests that the effect type is valid.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if it is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get an effect-type description.</p> + <p>The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-type description. See <strong>{{D3DX11_EFFECT_TYPE_DESC}}</strong>.</p> </dd> + + + + + <p>Get a member type by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an member type by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A member's name.</p> </dd> + + + + + <p>Get a member type by semantic.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A semantic.</p> </dd> + + + + + <p>Get the name of a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The name of the member.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectVariable}}</strong> interface is the base class for all effect variables.</p><p>The lifetime of an <strong>{{ID3DX11EffectVariable}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Compare the data type with the data stored.</p> + <p>This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get type information.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + + <p>Get a description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-variable description (see <strong>{{D3DX11_EFFECT_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The annotation name.</p> </dd> + + + + + <p>Get a structure member by index.</p> + <p>If the effect variable is an structure, use this method to look up a member by index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a structure member by name.</p> + <p>If the effect variable is an structure, use this method to look up a member by name.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a structure member by semantic.</p> + <p>If the effect variable is an structure, use this method to look up a member by attached semantic.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic.</p> </dd> + + + + + <p>Get an array element.</p> + <p>If the effect variable is an array, use this method to return one of the elements.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index; otherwise 0.</p> </dd> + + + + + <p>Get a constant buffer.</p> + <p>Effect variables are read-from or written-to a constant buffer.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a scalar variable.</p> + <p>AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a scalar variable. See <strong>{{ID3DX11EffectScalarVariable}}</strong>.</p> + + + + <p>Get a vector variable.</p> + <p>AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a vector variable. See <strong>{{ID3DX11EffectVectorVariable}}</strong>.</p> + + + + <p>Get a matrix variable.</p> + <p>AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a matrix variable. See <strong>{{ID3DX11EffectMatrixVariable}}</strong>.</p> + + + + <p>Get a string variable.</p> + <p>AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a string variable. See <strong>{{ID3DX11EffectStringVariable}}</strong>.</p> + + + + <p>Get a class-instance variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to class-instance variable. See <strong>{{ID3DX11EffectClassInstanceVariable}}</strong>.</p> + + + + <p>Get an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an interface variable. See <strong>{{ID3DX11EffectInterfaceVariable}}</strong>.</p> + + + + <p>Get a shader-resource variable.</p> + <p>AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader-resource variable. See <strong>{{ID3DX11EffectShaderResourceVariable}}</strong>.</p> + + + + <p>Get an unordered-access-view variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an unordered-access-view variable. See <strong>{{ID3DX11EffectUnorderedAccessViewVariable}}</strong>.</p> + + + + <p>Get a render-target-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a render-target-view variable. See <strong>{{ID3DX11EffectRenderTargetViewVariable}}</strong>.</p> + + + + <p>Get a depth-stencil-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil-view variable. See <strong>{{ID3DX11EffectDepthStencilViewVariable}}</strong>.</p> + + + + <p>Get a constant buffer.</p> + <p>AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a constant buffer. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a shader variable.</p> + <p>AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader variable. See <strong>{{ID3DX11EffectShaderVariable}}</strong>.</p> + + + + <p>Get a effect-blend variable.</p> + <p>AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an effect blend variable. See <strong>{{ID3DX11EffectBlendVariable}}</strong>.</p> + + + + <p>Get a depth-stencil variable.</p> + <p>AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil variable. See <strong>{{ID3DX11EffectDepthStencilVariable}}</strong>.</p> + + + + <p>Get a rasterizer variable.</p> + <p>AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a rasterizer variable. See <strong>{{ID3DX11EffectRasterizerVariable}}</strong>.</p> + + + + <p>Get a sampler variable.</p> + <p>AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a sampler variable. See <strong>{{ID3DX11EffectSamplerVariable}}</strong>.</p> + + + + <p>Set data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to set.</p> </dd> + + + + + <p>Get data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to get.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>A vector-variable interface accesses a four-component vector.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Set a floating-point matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in the matrix.</p> </dd> + + + + + <p>Get a matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in a matrix.</p> </dd> + + + + + <p>Set an array of floating-point matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first matrix.</p> </dd> + + + <dd> <p>The number of matrix elements to skip from the start of the array.</p> </dd> + + + <dd> <p>The number of elements to set.</p> </dd> + + + + + <p>Get an array of matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of the first matrix in an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix returned.</p> </dd> + + + <dd> <p>The number of matrices in the returned array.</p> </dd> + + + + + + + + + + + <p>Transpose and set a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a matrix.</p> </dd> + + + + + <p>Transpose and get a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a transposed matrix.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Transpose and get an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of an array of tranposed matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to get.</p> </dd> + + + <dd> <p>The number of matrices in the array to get.</p> </dd> + + + + + + + + + + + <p>A string-variable interface accesses a string variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get the string.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the string.</p> </dd> + + + + + <p>Get an array of strings.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first string in the array.</p> </dd> + + + <dd> <p>The offset (in number of strings) between the start of the array and the first string to get.</p> </dd> + + + <dd> <p>The number of strings in the returned array.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Accesses an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Sets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> interface.</p> </dd> + + + + + <p>Get a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> reference that will be set to the class instance.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Get a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Accesses an unordered access view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong>.</p> </dd> + + + + + <p>Get an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set on return.</p> </dd> + + + + + <p>Set an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{ID3D11UnorderedAccessView}}</strong> references.</p> </dd> + + + <dd> <p>Index of the first unordered-access-view.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Get an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set to the {{UAV}} array on return. </p> </dd> + + + <dd> <p>Index of the first interface.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Get a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Set an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to store the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>A depth-stencil-view-variable interface accesses a depth-stencil view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Get a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Set an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to set the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Set a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Reverts a previously set constant buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Set a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-resource-view interface for accessing a texture buffer.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface for accessing a texture buffer. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>A shader-variable interface accesses a shader variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to a shader description (see <strong>{{D3DX11_EFFECT_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11VertexShader}}</strong> reference that will be set to the vertex shader on return.</p> </dd> + + + + + <p>Get a geometry shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11GeometryShader}}</strong> reference that will be set to the geometry shader on return.</p> </dd> + + + + + <p>Get a pixel shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11PixelShader}}</strong> reference that will be set to the pixel shader on return.</p> </dd> + + + + + <p>Get a hull shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the shader.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11HullShader}}</strong> reference that will be set to the hull shader on return.</p> </dd> + + + + + <p>Get a domain shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the domain shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DomainShader}}</strong> reference that will be set to the domain shader on return.</p> </dd> + + + + + <p>Get a compute shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the compute shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11ComputeShader}}</strong> reference that will be set to the compute shader on return.</p> </dd> + + + + + <p>Get an input-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based shader-element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an output-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a patch constant signature description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index. </p> </dd> + + + <dd> <p>A zero-based element index. </p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>The blend-variable interface accesses blend state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a blend-state interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>).</p> </dd> + + + + + <p>Sets an effect's blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11BlendState}}</strong> interface containing the blend-state to set.</p> </dd> + + + + + <p>Reverts a previously set blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + + + <p>Get a reference to a blend-state variable.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-variable interface accesses depth-stencil state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a depth-stencil interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Sets the depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DepthStencilState}}</strong> interface containing the new depth stencil state.</p> </dd> + + + + + <p>Reverts a previously set depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + + + <p>Get a reference to a variable that contains depth-stencil state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a depth-stencil-state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a rasterizer interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a rasterizer interface (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Sets the rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11RasterizerState}}</strong> interface.</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains rasteriser state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a rasteriser-state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + + + <p>A sampler interface accesses sampler state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a sampler interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a sampler interface (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11SamplerState}}</strong> interface containing the sampler state.</p> </dd> + + + + + <p>Revert a previously set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a sampler description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectPass}}</strong> interface encapsulates state assignments within a technique.</p><p>The lifetime of an <strong>{{ID3DX11EffectPass}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique.</p><p>To get an effect-pass interface, call a method like <strong>{{ID3DX11EffectTechnique::GetPassByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a pass to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a pass description.</p> + <p>A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pass description (see <strong>{{D3DX11_PASS_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a vertex-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a geometry-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a geometry-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a pixel-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pixel-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get hull-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a hull-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a domain-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a domain-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a compute-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a compute-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Set the state contained in a pass to the device.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Unused.</p> </dd> + + + <dd> <p>The <strong>{{ID3D11DeviceContext}}</strong> to apply the pass to.</p> </dd> + + + + + <p>Generate a mask for allowing/preventing state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectTechnique}}</strong> interface is a collection of passes.</p><p>The lifetime of an <strong>{{ID3DX11EffectTechnique}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments.</p><p>To get an effect-technique interface, call a method such as <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a technique to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a technique description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a technique description (see <strong>{{D3DX11_TECHNIQUE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The zero-based index of the interface reference.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Name of the annotation.</p> </dd> + + + + + <p>Get a pass by index.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a pass by name.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>The name of the pass.</p> </dd> + + + + + <p>Compute a state-block mask to allow/prevent state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectGroup}}</strong> interface accesses an Effect group.</p><p>The lifetime of an <strong>{{ID3DX11EffectGroup}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>To get an <strong>{{ID3DX11EffectGroup}}</strong> interface, call a method like <strong>{{ID3DX11Effect::GetGroupByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Gets a group description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3DX11_GROUP_DESC}}</strong> structure.</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Pointer to an <strong>{{ID3DX11EffectVariable}}</strong> interface.</p> + + + <dd> <p>Index of the annotation.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Get a technique by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>, or <strong>{{NULL}}</strong> if the technique is not found.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>An <strong>{{ID3DX11Effect}}</strong> interface manages a set of state objects, resources, and shaders for implementing a rendering effect.</p> + <p>An effect is created by calling <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><p>The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.?<strong>Note</strong>??<p>If you call <strong>QueryInterface</strong> on an <strong>{{ID3DX11Effect}}</strong> object to retrieve the <strong>{{IUnknown}}</strong> interface, <strong>QueryInterface</strong> returns {{E_NOINTERFACE}}. To work around this issue, use the following code:</p> <pre> {{IUnknown}}* pIUnknown = ({{IUnknown}}*)pEffect; pIUnknown-&gt;AddRef(); +</pre>? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get the device that created the effect.</p> + <p>An effect is created for a specific device, by calling a function such as <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Device}}</strong>.</p> </dd> + + + + + <p>Get an effect description.</p> + <p>An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect description (see <strong>{{D3DX11_EFFECT_DESC}}</strong>).</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the constant buffer indicated by the Name. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a variable by index.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the index exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a variable by name.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> whether or not a variable is found. <strong>{{ID3DX11Effect::IsValid}}</strong> should be called to verify whether or not the name exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Returns an invalid variable if the specified name cannot be found.</p> + + + <dd> <p>The variable name.</p> </dd> + + + + + <p>Get a variable by semantic.</p> + <p>Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the semantic exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the effect variable indicated by the Semantic. See <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic name.</p> </dd> + + + + + <p>Gets an effect group by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Index of the effect group.</p> </dd> + + + + + <p>Gets an effect group by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Name of the effect group.</p> </dd> + + + + + <p>Get a technique by index.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. </p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>. If a technique with the appropriate name is not found an invalid technique is returned. <strong>{{ID3DX11EffectTechnique::IsValid}}</strong> should be called on the returned technique to determine whether it is valid.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>Gets a class linkage interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns a reference to an <strong>{{ID3D11ClassLinkage}}</strong> interface.</p> + + + + <p>Creates a copy of an effect interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Flags affecting the creation of the cloned effect. Can be 0 or one of the following values.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DX11_EFFECT_CLONE_FORCE_NONSINGLE}}</td><td>Ignore all "single" qualifiers on cbuffers. All cbuffers will have their own <strong>{{ID3D11Buffer}}</strong>s created in the cloned effect.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3DX11Effect}}</strong> reference that will be set to the copy of the effect.</p> </dd> + + + + + <p>Minimize the amount of memory required for an effect.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. {{API}} methods to read variables will no longer work once reflection data has been removed.</p><p>The following methods will fail after Optimize has been called on an effect.</p><ul> <li> <strong>{{ID3DX11Effect::GetConstantBufferByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetConstantBufferByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDesc}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDevice}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableBySemantic}}</strong> </li> </ul><strong>Note</strong>??References retrieved with these methods before calling <strong>{{ID3DX11Effect::Optimize}}</strong> are still valid after <strong>{{ID3DX11Effect::Optimize}}</strong> is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.?<strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Test an effect to see if the reflection metadata has been removed from memory.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. Of course, {{API}} methods to read variables will no longer work once reflection data has been removed.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the effect is optimized; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Creates an effect from a binary effect or file.</p> + <strong>Note</strong>??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The return value is one of the values listed in Direct3D 11 Return Codes.</p> + + + <dd> <p>Blob of compiled effect data.</p> </dd> + + + <dd> <p>Length of the data blob.</p> </dd> + + + <dd> <p>No effect flags exist. Set to zero.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{ID3D11Device}}</strong> on which to create Effect resources.</p> </dd> + + + <dd> <p>Address of the newly created <strong>{{ID3DX11Effect}}</strong> interface.</p> </dd> + + + + + <p> Defines results for animation updates.</p> + + + <dd> <p> No animation variables have changed.</p> </dd> + + + <dd> <p> One or more animation variables has changed.</p> </dd> + + + + + <p> Defines the activity status of an animation manager.</p> + + + <dd> <p> The animation manager is idle; no animations are currently playing.</p> </dd> + + + <dd> <p> The animation manager is busy; at least one animation is currently playing or scheduled.</p> </dd> + + + + + <p> Defines animation modes.</p> + + + <dd> <p> Animation is disabled.</p> </dd> + + + <dd> <p> The animation mode is managed by the system.</p> </dd> + + + <dd> <p> Animation is enabled.</p> </dd> + + + + + <p>Defines the pattern for a loop iteration.</p> + + + <dd> <p>The start of a loop begins with the first value (v1-&gt;v2, v1-&gt;v2, v1-&gt;v2, and so on).</p> </dd> + + + <dd> <p>The start of a loop alternates between values (v1-&gt;v2, v2-&gt;v1, v1-&gt;v2, and so on).</p> </dd> + + + + + <p> Defines the rounding modes to be used when the value of an animation variable is converted from a floating-point type to an integer type.</p> + + + <dd> <p> Round to the nearest integer.</p> </dd> + + + <dd> <p> Round down.</p> </dd> + + + <dd> <p> Round up.</p> </dd> + + + + + <p> Defines the status for a storyboard.</p> + <p>Unless <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, it returns only the following status values:</p><ul> <li>{{UI_ANIMATION_STORYBOARD_BUILDING}}</li> <li>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</li> <li>{{UI_ANIMATION_STORYBOARD_PLAYING}}</li> <li>{{UI_ANIMATION_STORYBOARD_READY}}</li> </ul><p>All status values can be passed to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p><p>The following diagram illustrates the transitions between these states.</p><p></p> + + + <dd> <p> The storyboard has never been scheduled.</p> </dd> + + + <dd> <p> The storyboard is scheduled to play.</p> </dd> + + + <dd> <p> The storyboard was canceled.</p> </dd> + + + <dd> <p> The storyboard is currently playing.</p> </dd> + + + <dd> <p> The storyboard was truncated.</p> </dd> + + + <dd> <p> The storyboard has finished playing.</p> </dd> + + + <dd> <p> The storyboard is built and ready for scheduling.</p> </dd> + + + <dd> <p> Scheduling the storyboard failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority.</p> </dd> + + + + + <p> Defines results for storyboard scheduling.</p> + <p> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> returns {{UI_ANIMATION_SCHEDULING_DEFERRED}} only if the application attempts to schedule a storyboard during a callback to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p> + + + <dd> <p> Scheduling failed for an unexpected reason.</p> </dd> + + + <dd> <p> Scheduling failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority. For more information, see <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>.</p> </dd> + + + <dd> <p> Scheduling failed because the storyboard is already scheduled.</p> </dd> + + + <dd> <p> Scheduling succeeded.</p> </dd> + + + <dd> <p> Scheduling is deferred and will be attempted when the current callback completes.</p> </dd> + + + + + <p> Defines potential effects on a storyboard if a priority comparison returns false.</p> + <p>This enumeration is used as the <em>priorityEffect</em> parameter of <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>, informing the client of the potential effect on the storyboard to be scheduled when the return value is false ({{S_FALSE}}). {{UI_ANIMATION_PRIORITY_EFFECT_FAILURE}} means that the attempt to schedule the storyboard might fail if the return value is false. {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}} means that the attempt to schedule the storyboard will succeed, but if the return value is false, the storyboard could play later than it would otherwise.</p><p> This enumeration can help an application decide how aggressive to be about reducing latency in the {{UI}}. For example, if the application returns true when the effect is {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}}, then other animations might get canceled or compressed even though doing so was not strictly necessary to play a new animation within the application-specified longest acceptable delay.</p> + + + <dd> <p> This storyboard might not be successfully scheduled.</p> </dd> + + + <dd> <p> The storyboard will be scheduled, but might start playing later.</p> </dd> + + + + + <p> Defines animation slope characteristics.</p> + + + <dd> <p> An increasing slope.</p> </dd> + + + <dd> <p> A decreasing slope.</p> </dd> + + + + + <p>Defines which aspects of an interpolator depend on a given input.</p> + <p>Multiple <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> values can be combined using a bitwise-{{OR}} operation.</p> + + + <dd> <p>No aspect depends on the input.</p> </dd> + + + <dd> <p>The intermediate values depend on the input.</p> </dd> + + + <dd> <p>The final value depends on the input.</p> </dd> + + + <dd> <p>The final velocity depends on the input.</p> </dd> + + + <dd> <p>The duration depends on the input.</p> </dd> + + + + + <p> Defines the behavior of a timer when the animation manager is idle.</p> + + + <dd> <p> The timer continues to generate timer events (is enabled) when the animation manager is idle.</p> </dd> + + + <dd> <p> The timer is suspended (disabled) when the animation manager is idle. </p> </dd> + + + + + <p> Defines activity status for a timer's client.</p> + + + <dd> <p> The client is idle.</p> </dd> + + + <dd> <p> The client is busy.</p> </dd> + + + + + + + + <p> Defines the animation manager, which provides a central interface for creating and managing animations.</p> + <p><strong>{{IUIAnimationManager}}</strong> defines a central control object for animations. A single instance of <strong>{{IUIAnimationManager}}</strong> is typically used to compose, schedule, and manage all animations for a client application.</p><p> <strong>{{IUIAnimationVariable}}</strong>, <strong>{{IUIAnimationTransition}}</strong>, and <strong>{{IUIAnimationStoryboard}}</strong> are the primary components for building animations. Use <strong>{{IUIAnimationManager}}</strong> to create and manage these components.</p> + + + + <p> Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the new animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p> Creates a new storyboard.</p> + <p>Storyboards can specify complex coordinated updates to many animation variables. These updates happen in sequence or in parallel, and they are guaranteed to remain synchronized within the storyboard. A storyboard is created, populated with transitions on animation variables, and then scheduled. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling <strong>FinishAllStoryboards</strong> ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changing statuses of storyboards as necessary and updating any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>This method is used to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks section for more information.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it has not started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable once the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when the scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the reminder of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable.</p> </dd> + + + + + <p> Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>The result can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable.</p> </dd> + + + + + <p> Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable as an integer.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the final value of the animation variable as an integer. This is the value after all currently scheduled animations have completed.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the previous value of the animation variable as an integer. This is the value of the animation variable before the most recent update.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the storyboard that is currently animating the animation variable.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The current storyboard, or <strong>{{NULL}}</strong> if no storyboard is currently animating the animation variable.</p> </dd> + + + + + <p> Sets the lower bound (floor) for the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The lower bound for the animation variable.</p> </dd> + + + + + <p> Sets an upper bound (ceiling) for the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The upper bound for the animation variable.</p> </dd> + + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Sets the tag for an animation variable.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for an animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The animation variable's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Specifies a variable change handler. This handler is notified of changes to the value of the animation variable.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableChangeHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Specifies an integer variable change handler. This handler is notified of changes to the integer value of the animation variable.</p> + <p>Passing {{NULL}} for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Winodws Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> An integer variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableIntegerChangeHandler}}</strong> interface or be {{NULL}}. See Remarks.</p> </dd> + + + + + <p> Defines a storyboard, which contains a group of transitions that are synchronized relative to one another.</p> + <p><strong>{{IUIAnimationStoryboard}}</strong> is a primary component for building animations, along with <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationTransition}}</strong>. </p> + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong> Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p> Creates a loop between two specified keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_END_KEYFRAME_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>It might not be possible to determine the end keyframe time when the start keyframe is reached.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_LOOPS_OVERLAP}}</strong></dt> </dl> </td><td> <p>Two repeated portions of a storyboard might overlap.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p> The keyframe at which the loop is to end. It must not be posssible for <em>endKeyframe</em> to occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p> The number of times the loop is to be repeated; this parameter must be 0 or a positive number. Use <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) to repeat the loop indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to attempt to add itself to the schedule of playing storyboards. The rules are as follows:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard begins playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of a keyframe loop iteration, the loop is terminated and the loop value is set to the starting loop value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler to be called whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Defines a transition, which determines how an animation variable changes over time.</p> + <p><strong>{{IUIAnimationTransition}}</strong> is one of the primary interfaces used to add animation to an application, along with the <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationStoryboard}}</strong> interfaces.</p><p> <strong>{{UIAnimationTransitionLibrary}}</strong> implements a library of standard transitions.</p> + + + + <p> Sets the initial value for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p> Sets the initial velocity for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Determines whether a transition's duration is currently known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p> Returns {{S_OK}} if the duration is known, {{S_FALSE}} if the duration is not known, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in schedule.</p> </td></tr> </table><p>?</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> method before calling this method. This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The requested value for the duration cannot be determined.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling status updates to an animation manager.</p> + + + + <p> Handles status changes to an animation manager.</p> + <p>A call made in this callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Defines a method for handling events related to animation variable updates.</p> + <p> <strong> OnValueChanged</strong> receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong>.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> method.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling animation variable update events.</p> + <p> <strong> OnIntegerValueChanged</strong> receives animation variable value updates as <strong>{{INT32}}</strong> values. To receive value updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + <p>The rounding mode for an animation variable is specified using the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines methods for handling status and update events for a storyboard.</p> + + + + <p> Handles events that occur when a storyboard's status changes.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::SetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard whose status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Handles events that occur when a storyboard is updated.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p> Defines a method for priority comparison that the animation manager uses to resolve scheduling conflicts.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p> + + + + <p> Determines whether a new storyboard has priority over a scheduled storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified in <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates an instantaneous transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The figure below shows the effect on an animation variable over time during an instantaneous transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The figure below shows the effect on an animation variable over time during a constant-duration transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The figure below shows the effect on an animation variable over time during a discrete transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear-speed transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal-velocity transition, with an amplitude determined by the initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-velocity transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave in seconds.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range transition, with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave, in seconds.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise with the deceleration ratio. If the initial velocity is nonzero, it is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The figures below show the effect on animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the above figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of the time spent accelerating to the duration.</p> </dd> + + + <dd> <p> The ratio of the time spent decelerating to the duration.</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The figure below shows such a reversal transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to a specified final value over the duration of the transition, ending at a specified velocity.</p><p>The figure below shows the effect on an animation variable over time during a cubic transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The figure below shows the effect on an animation variable over time during a parabolic-acceleration transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Defines methods for creating a custom interpolator.</p> + <p>Client applications can use the transitions provided in <strong>{{IUIAnimationTransitionLibrary}}</strong> or in a library provided by a third party; however, if you need custom behavior, you can create your own transitions by implementing the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements <strong>{{IUIAnimationTransition}}</strong> by calling the <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong> method and passing in the custom interpolator. After the interpolator is wrapped, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> interface.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return <strong>{{IUIAnimationTransition}}</strong> interfaces.</p> + + + + <p>Sets the initial value and velocity at the start of the transition.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator}}</strong> at different offsets. However, it can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + + + <p> Sets the duration of the transition.</p> + <p>Windows Animation calls this method only after calling the <strong>GetDependencies</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency will have a duration parameter in its associated creation method of <strong>{{IUIAnimationTransitionFactory}}</strong>. The interpolator should store its duration when first initialized and overwrite it when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + + + <p> Interpolates the value of an animation variable at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + + + <p> Interpolates the velocity, or rate of change, at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p> The interpolated velocity.</p> </dd> + + + + + <p> Gets the aspects of the interpolator that depend on the initial value or velocity passed to <strong>SetInitialValueAndVelocity</strong>, or that depend on the duration passed to <strong>SetDuration</strong>.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator (1) that accepts a final value as a parameter, (2) that always comes to a gradual stop at that final value, and (3) whose duration is determined by the difference between the final and initial values. The interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for <em>initialValueDependencies</em>. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> because this is set when the interpolator is created and is not affected by the initial value. Likewise it should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong> because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter what velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong> because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for creating transitions from custom interpolators.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that it can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong>.</p> + + + + <p> Creates a transition from a custom interpolator.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p> </dd> + + + <dd> <p> The new transition.</p> </dd> + + + + + <p> Defines an animation timer, which provides services for managing animation timing.</p> + <p>A timer helps to manage animation rendering by automatically indicating the passage of a small unit of time, called a tick. In turn, ticks can trigger animation rendering or other animation events. Each animation timer provides timing for a single animation manager.</p><p>The timing system is designed to provide the necessary timing services needed to support animations and does not require applications to play an explicit role in generating the ticks. The animation timer can be set up to automatically update the animation manager for each tick without application-side handling.</p><p>An application may not need to use a timer with Windows Animation, depending on the graphics platform it is using. For example, an application drawing with Direct2D or Direct3D can synchronize to monitor's refresh rate, yielding very smooth animation. However, such applications may still find the <strong>{{IUIAnimationTimer}}</strong> interface useful for its <strong>GetTime</strong> method, which returns an accurate system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + + + + <p> Specifies a timer update handler.</p> + <p> The timer update handler receives time updates (ticks) from the timer. The timer indicates an update by calling the <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> method on the specified handler.</p><p>Passing <strong>{{NULL}}</strong> for the <em>updateHandler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. If the update handler is already connected to a timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer update handler, or <strong>{{NULL}}</strong> (see Remarks). The specified object must implement the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> interface.</p> </dd> + + + <dd> <p> A member of <strong>{{UI_ANIMATION_IDLE_BEHAVIOR}}</strong> that specifies the behavior of the timer when it is idle.</p> </dd> + + + + + <p> Specifies a timer event handler.</p> + <p> Timing events include the <strong>OnPreUpdate</strong>, <strong>OnPostUpdate</strong>, and <strong>OnRenderingTooSlow</strong> methods of the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface.</p><p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer event handler. The specified object must implement the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Enables the animation timer.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Disables the animation timer.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Determines whether the timer is currently enabled.</p> + <p> Returns {{S_OK}} if the animation timer is enabled, {{S_FALSE}} if the animation timer is disabled, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the current time.</p> + <p> This method can be used in both the application-driven and timer-driven configurations to retrieve the system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See Windows Animation Error Codes for a list of error codes.</p> + + + <dd> <p> The current time, in <strong>{{UI_ANIMATION_SECONDS}}</strong>.</p> </dd> + + + + + <p> Sets the frame rate below which the timer notifies the application that rendering is too slow.</p> + <p> If the rendering frame rate for an animation falls below the specified frame rate, an <strong>{{IUIAnimationTimerEventHandler::OnRenderingTooSlow}}</strong> event is raised.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The minimum desirable frame rate, in frames per second.</p> </dd> + + + + + <p> Defines methods for handling timing update events.</p> + <p>The <strong>{{UIAnimationManager}}</strong> object implements this interface, so a client application can query the <strong>{{UIAnimationManager}}</strong> object for this interface and then pass the interface to <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>. It is not necessary to disconnect the <strong>{{UIAnimationManager}}</strong> and <strong>{{UIAnimationTimer}}</strong> objects; releasing them both is sufficient to clean up.</p> + + + + <p> Handles update events from the timer.</p> + <p>This method is used by the <strong>{{UIAnimationTimer}}</strong> object to update the state of the <strong>{{UIAnimationManager}}</strong> object. The <strong>{{UIAnimationTimer}}</strong> object calls <strong>{{UIAnimationTimerEventHandler::OnPostUpdate}}</strong> only when calls to this method return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current timer time, in seconds.</p> </dd> + + + <dd> <p> Receives a member of the <strong>{{UI_ANIMATION_UPDATE_RESULT}}</strong> enumeration, indicating whether any animation variables changed as a result of the update.</p> </dd> + + + + + <p> Specifies a handler for timer client status change events.</p> + <p>If the update handler is already connected to the timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}.</strong></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A handler for timer client events. The specified object must implement <strong>{{IUIAnimationTimerUpdateHandler}}</strong>. </p> </dd> + + + + + <p> Clears the handler for timer client status change events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling events related to changes in timer client status.</p> + + + + <p> Handles events that occur when the status of the timer's client changes.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new status of the timer's client.</p> </dd> + + + <dd> <p> The previous status of the timer's client.</p> </dd> + + + + + <p> Defines methods for handling timing events.</p> + <p> Use <strong> SetTimerEventHandler</strong> to specify the timing events handler for an instance of <strong>{{IUIAnimationTimer}}</strong>. </p> + + + + <p> Handles events that occur before an animation update begins.</p> + <p>For each tick, a timer calls the following sequence of methods:</p><ul> <li><strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong></li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong> </li> </ul><p><strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong> method. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur after an animation update is finished.</p> + <p>The <strong>{{UIAnimationTimer}}</strong> object calls this method only when calls to <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p><p>For each tick, a timer calls the following sequence of methods:</p><ul> <li> <strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li><strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong></li> </ul><p> <strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong>. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur when the rendering frame rate for an animation falls below a minimum desirable frame rate. </p> + <p> The minimum desirable frame rate is specified using the <strong>{{IUIAnimationTimer::SetFrameRateThreshold}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current frame rate, in frames per second.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p>Creates a new animation variable for each specified dimension.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create three animation variables for the X, Y, and Z coordinates of an object that can move freely within a a three-dimensional space.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) of initial values for the animation variable.</p> </dd> + + + <dd> <p>The number of dimensions that require animated values. This parameter specifies the number of values listed in <em>initialValue</em>.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p>Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p>Creates a new storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling the <strong>FinishAllStoryboards</strong> method ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed.</p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. </p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changes the status of all storyboards as necessary, and updates any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status of the animation manager.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>Use this method to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it hasn't started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable after the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info. </p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the rest of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager2::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or on any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines an animation variable, which represents a visual element that can be animated in multiple dimensions.</p> + + + + <p>Gets the number of dimensions that the animation variable is to be animated in.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the animation curve of the animation variable.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + + + <p>Gets the animation curve of the animation variable for the specified dimension.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + <dd> <p>The number of animation curves. +</p> </dd> + + + + + <p>Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + + + <p>Gets the final value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + + + <p>Gets the previous value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the integer value of the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the integer value of the animation variable for the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the final integer value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the final integer value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable in the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the active storyboard for the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The active storyboard, or {{NULL}} if the animation variable is not being animated.</p> </dd> + + + + + <p>Sets the lower bound (floor) for the value of the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The lower bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the lower bound (floor) value of each specified dimension for the animation variable. The value of each animation variable should not fall below its lower bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the lower bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require lower bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) for the value of the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The upper bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) value of each specified dimension for the animation variable. The value of each animation variable should not rise above its upper bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the upper bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require upper bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the rounding mode of the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The rounding mode.</p> </dd> + + + + + <p>Sets the tag of the animation variable. </p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>), and it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>The identifier portion of the tag. </p> </dd> + + + + + <p> Gets the tag of the animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional, so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p>Specifies a handler for changes to the value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The handler for changes to the value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the integer value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>Shutdown</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the integer value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the animation curve of the animation variable. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the animation curve of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationTransition}}</strong> interface that defines a transition. An <strong>{{IUIAnimationTransition2}}</strong> transition determines how an animation variable changes over time in a given dimension.</p> + + + + <p>Gets the number of dimensions in which the animation variable has a transition specified.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value of the transition.</p> + <p>Do not call this method after the transition has been added to a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p>Sets the initial value of the transition for each specified dimension in the animation variable.</p> + <p>The animation manager should not call this method after the transition has been added to a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial values for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition values. This parameter specifies the number of values listed in <em>value</em>.</p> </dd> + + + + + <p>Sets the initial velocity of the transition.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Sets the initial velocity of the transition for each specified dimension in the animation variable.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial velocities for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition velocities. This parameter specifies the number of values listed in <em>velocity</em>.</p> </dd> + + + + + <p>Determines whether the duration of a transition is known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>IsDurationKnown</strong> method before calling this method. </p><p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling updates to an <strong>animation manager</strong>.</p> + + + + <p> Handles status changes to an <strong>animation manager</strong>.</p> + <p>Calls made to other Windows Animation methods from <strong>{{IUIAnimationManager2::OnManagerStatusChanged}}</strong> fail and return <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + <p> The <strong> OnValueChanged</strong> method receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use the <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p> + + + + + + + <p> Handles events that occur when the value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>{{IUIAnimationVariableChangeHandler2::OnValueChanged}}</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable2::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new value of the animation variable.</p> </dd> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension in which the value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableIntegerChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + + + + <p> Handles events that occur when the integer value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>OnValueChanged</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, and 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>GetValue</strong> </li> <li> <strong>GetFinalValue</strong> </li> <li> <strong>GetPreviousValue</strong> </li> <li> <strong>GetIntegerValue</strong> </li> <li> <strong>GetFinalIntegerValue</strong> </li> <li> <strong>GetPreviousIntegerValue</strong> </li> <li> <strong>GetCurrentStoryboard</strong> </li> <li> <strong>GetVariableFromTag</strong> </li> <li> <strong>GetStoryboardFromTag</strong> </li> <li> <strong>GetTag</strong> </li> <li> <strong>GetTag</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The previous integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The dimension in which the integer value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation curve update events. </p> + + + + <p> Handles events that occur when the animation curve of an animation variable changes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The animation variable for which the animation curve has been updated.</p> </dd> + + + + + <p>Defines methods for handling storyboard events. </p> + + + + <p> Handles storyboard status change events.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager2::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::SetTag}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard for which the status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p>Handles storyboard update events.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager2::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p>Defines a method for handling storyboard loop iteration events.</p> + + + + <p>Handles loop iteration change events, which occur when a loop within a storyboard begins a new iteration.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard to which the loop belongs.</p> </dd> + + + <dd> <p>The loop {{ID}}.</p> </dd> + + + <dd> <p>The iteration count for the latest <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + <dd> <p>The iteration count for the previous <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + + + <p>Defines a method that resolves scheduling conflicts through priority comparison.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p> + + + + <p>Determines the relative priority between a scheduled storyboard and a new storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded, or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> </ul> + <p>Returns the following if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified by <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p>Defines a library of standard transitions for a specified dimension.</p> + <p>Windows Animation includes a library of common transitions that developers can apply to variables through a storyboard. The parameters for specifying a transition depend on the type of transition. For some transitions, the duration of the transition is an explicit parameter; for others, the duration is determined by other parameters, such as speed or acceleration when the transition begins. A transition's initial value or velocity can be overridden if a discontinuous jump is desired, and duration can be queried after the transition is added to a storyboard.</p><p>If an application requires an effect that cannot be specified using the transition library, developers can implement custom transitions. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from interpolators. An interpolator must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by the <strong>{{UIAnimationTransitionFactory2}}</strong> object.</p> + + + + <p> Creates an instantaneous scalar transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates an instantaneous vector transition for each specified dimension.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant scalar transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The following figure shows the change in value for an animation variable over time during a constant-duration transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete scalar transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a discrete vector transition for each specified dimension.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear scalar transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear vector transition in the specified dimension.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed scalar transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a linear-speed vector transition in the specified dimension.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal scalar transition where amplitude is determined by initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-velocity transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range scalar transition with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate scalar transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise for the deceleration ratio. If the value of initial velocity is nonzero, the value is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The following figures show the change in value for animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent accelerating (0 to 1).</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent decelerating (0 to 1).</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal scalar transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The folllowing figure shows such a reversal transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic scalar transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a cubic vector transition for each specified dimension.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final velocities (in units per second) of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em> and <em>finalVelocity</em>.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop scalar transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches the final value with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The following figure shows the change in value over time of an animation variable during a smooth-stop transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration scalar transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value, ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The following figure shows the change in value over time of an animation variable during a parabolic-acceleration transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity, in units/second, at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration, in units/second?, during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear scalar transition.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time for an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear vector transition for each specified dimension.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time of an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p>Defines a method that allows a custom interpolator to provide transition information, in the form of a cubic polynomial curve, to the animation manager.</p> + + + + <p>Adds a cubic polynomial segment that describes the shape of a transition curve to the animation function. </p> + <p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The cubic polynomial constant coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial linear coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial quadratic coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial cubic coefficient.</p> </dd> + + + + + <p>Adds a sinusoidal segment that describes the shape of a transition curve to the animation function. </p> + <p>Defined by the function Y(t) = bias + amplitude*sin(360*frequency*t + phase), where 'sin' is the sin of an angle specified in degrees (for example, sin(n + 360) == sin(n) for any real number 'n').</p><p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The bias constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The amplitude constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The frequency constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The phase constant in the sinusoidal function.</p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationInterpolator}}</strong> interface that defines methods for creating a custom interpolator. <strong>{{IUIAnimationInterpolator2}}</strong> supports interpolation in a given dimension. </p> + <p>Client applications can use the transitions provided in the <strong>{{IUIAnimationTransitionLibrary}}</strong> or<strong>{{IUIAnimationTransitionLibrary2}}</strong> interfaces, or in a library provided by a third party; however, custom transitions can be created by implementing the <strong>{{IUIAnimationInterpolator}}</strong> or <strong>{{IUIAnimationInterpolator2}}</strong> interfaces.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements the <strong>{{IUIAnimationTransition}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong>) or the <strong>{{IUIAnimationTransition2}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory2::CreateTransition}}</strong>) and passing in the custom interpolator. After the interpolator wrapper has been created, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> or <strong>{{IUIAnimationTransition2}}</strong> interfaces.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return an <strong>{{IUIAnimationTransition}}</strong> interface or an <strong>{{IUIAnimationTransition2}}</strong> interface.</p> + + + + <p>Gets the number of dimensions that require interpolation.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value and velocity of the transition for the given dimension.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator2}}</strong> at different offsets. However, <strong>SetInitialValueAndVelocity</strong> can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + <dd> <p>The dimension in which to set the initial value or velocity of the transition.</p> </dd> + + + + + <p>Used to determine which kinds of command lists are capable of supporting various operations. For example, whether a command list supports immediate writes. </p> + + + <dd> <p>Specifies that no command list supports the operation in question.</p> </dd> + + + <dd> <p>Specifies that direct command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that command list bundles can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that compute command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that copy command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-decode command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-processing command lists can support the operation is question.</p> </dd> + + + + + <p>Sets the duration of the transition in the given dimension.</p> + <p>Windows Animation calls this method only after calling the <strong>{{IUIAnimationInterpolator2::GetDependencies}}</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency has a duration parameter in the <strong>{{IUIAnimationTransitionFactory}}</strong> or <strong>{{IUIAnimationTransitionFactory2}}</strong> creation method that is associated with that interpolator. The interpolator should store its duration when first initialized and overwrite the duration when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator doesn't need to check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + <dd> <p>The dimension from which to retrieve the final value.</p> </dd> + + + + + <p>Interpolates the value of an animation variable at the specified offset and for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the value.</p> </dd> + + + + + <p>Interpolates the velocity, or rate of change, at the specified offset for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition. </p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero. +</p> </dd> + + + <dd> <p>The interpolated velocity.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the velocity.</p> </dd> + + + + + <p>Generates a primitive interpolation of the specified animation curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that defines the custom animation curve information.</p> </dd> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + + + <p>For the given dimension, <strong>GetDependencies</strong> retrieves the aspects of the interpolator that depend on the initial value or velocity that is passed to the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method or the duration that is passed to the <strong>{{IUIAnimationInterpolator2::SetDuration}}</strong> method.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator that:</p><ul> <li>Accepts a final value as a parameter.</li> <li>Always comes to a gradual stop at that final value.</li> <li>Has a duration determined by the difference between the final value and the initial value.</li> </ul><p>In this case the interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for the <em>initialValueDependencies</em> parameter. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong>, because this value is set when the interpolator is created and is not affected by the initial value. Likewise, the interpolator should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong>, because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return a correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, and then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter which velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong>, because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for creating transitions from custom interpolators.</p><p><strong>{{IUIAnimationTransitionFactory2}}</strong> supports the creation of transitions in a specified dimension.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that the application can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement either the <strong>{{IUIAnimationInterpolator}}</strong> interface or the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong> or by <strong>{{UIAnimationTransitionFactory2}}</strong>.</p> + + + + <p>Creates a transition from a custom interpolator for a given dimension.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface.</p> </dd> + + + <dd> <p>The new transition.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p>Creates a loop between two keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p>The keyframe at which the loop is to end. <em>endKeyframe</em> must not occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p>The number of times the loop is to be repeated; the last iteration of a loop can terminate fractionally between keyframes. A value of zero indicates that the specified portion of a storyboard will not be played. A value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) indicates that the loop will repeat indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + <dd> <p>The pattern for the loop iteration. </p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) specifies that the start of the loop must alternate between keyframes (k1-&gt;k2, k2-&gt;k1, k1-&gt;k2, and so on).</p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_NORMAL}}</strong> (0) specifies that the start of the loop must begin with the first keyframe (k1-&gt;k2, k1-&gt;k2, k1-&gt;k2, and so on).</p> <strong>Note</strong>??If <em>repeatMode</em> has a value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) and <em>cRepetition</em> has a value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1), the loop terminates on the end keyframe. + ? </dd> + + + <dd> <p>The handler for each loop iteration event. The default value is 0.</p> </dd> + + + <dd> <p>The loop {{ID}} to pass to <em>pIterationChangeHandler</em>. The default value is 0.</p> </dd> + + + <dd> <p>If true, specifies that <em>pIterationChangeHandler</em> will be incorporated into the estimate of the time interval until the next animation event that is returned by the <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> method. The default value is 0, or false.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher-priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager2::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p><p> Use <strong>{{IUIAnimationStoryboard2::SetSkipDuration}}</strong> to start a storyboard animation at a specified offset instead of delaying the start of a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p>Specifies an offset from the beginning of a storyboard at which to start animating.</p> + <p>Calls to <strong>SetSkipDuration</strong> fail if the storyboard has been scheduled.</p><p><strong>SetSkipDuration</strong> does not delay the start of a scheduled storyboard. See <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> for more info on how to set a delay for a scheduled storyboard.</p><p>This diagram shows a skip duration, or offset, for a storyboard. </p><p></p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset, or amount of time, to skip at the beginning of the storyboard.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of an alternating keyframe loop iteration, the loop is terminated with the loop value set to the ending loop value.</p><p> If this method is called at the end of a non-alternating keyframe loop iteration, where "loop wrapping" results in the loop value being set to the starting value of the next iteration, the loop is executed once more in order for the loop value to be set to the ending loop value.</p><p>For alternating keyframe loops, each iteration has a starting value that is equivalent to the ending value of the preceding loop. In this case, "loop wrapping" is not an issue.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). It can be used by an application to identify a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>This method can return the identifier, the object, or both portions of the tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler that Windows Animation should call whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardStatusChanged</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardUpdated</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Strip flag options.</p> + <p>These flags are used by <strong>{{D3DStripShader}}</strong>.</p> + + + + <p>Values that identify parts of the content of an arbitrary length data buffer.</p> + <p>These values are passed to the <strong>{{D3DGetBlobPart}}</strong> or <strong>{{D3DSetBlobPart}}</strong> function.</p> + + + + <p>Describes shader data.</p> + <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures is passed to <strong>{{D3DCompressShaders}}</strong> to compress the shader data into a more compact form.</p> + + + <dd> <p>A reference to shader data.</p> </dd> + + + <dd> <p>Length of shader data that <strong>pBytecode</strong> points to.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Reads a file that is on disk into memory.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DReadFileToBlob}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to read into memory.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that contains information that <strong>{{D3DReadFileToBlob}}</strong> read from the <em>pFileName</em> file. You can use this <strong>{{ID3DBlob}}</strong> interface to access the file information and pass it to other compiler functions.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Writes a memory blob to a file on disk.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DWriteBlobToFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a <strong>{{ID3DBlob}}</strong> interface that contains the memory blob to write to the file that the <em>pFileName</em> parameter specifies.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to which to write.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to overwrite information in the <em>pFileName</em> file. {{TRUE}} specifies to overwrite information and {{FALSE}} specifies not to overwrite information.</p> </dd> + + + + + <p>Compile {{HLSL}} code or an effect file into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile}}</strong> and <strong>{{D3DCompile2}}</strong> is that the latter method takes some optional parameters that can be used to control some aspects of how bytecode is generated. If this extra flexibility is not required, there is no performance gain from using <strong>{{D3DCompile2}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> You can use this parameter for strings that specify error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p>Optional. A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The name of the shader entry point function where shader execution begins. When you compile using a fx profile (for example, fx_4_0, fx_5_0, and so on), <strong>{{D3DCompile}}</strong> ignores <em>pEntrypoint</em>. In this case, we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it. For all other shader profiles, a valid <em>pEntrypoint</em> is required. +</p> </dd> + + + <dd> <p>A string that specifies the shader target or set of shader features to compile against. The shader target can be shader model 2, shader model 3, shader model 4, or shader model 5. The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile constants</strong>.</p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile effect constants</strong>. When you compile a shader and not an effect file, <strong>{{D3DCompile}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong> is that <strong>{{D3DCompile2}}</strong> takes some optional parameters (<em>SecondaryDataFlags</em>, <em>pSecondaryData</em> and <em>SecondaryDataSize</em>) that can be used to control some aspects of how bytecode is generated. Refer to the descriptions of these parameters for more details. There is no difference otherwise to the efficiency of the bytecode generated between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data ({{ASCII}} {{HLSL}} code).</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>An optional reference to a constant null-terminated string containing the name that identifies the source data to use in error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>An optional array of <strong>{{D3D_SHADER_MACRO}}</strong> structures that define shader macros. Each macro definition contains a name and a {{NULL}}-terminated definition. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> interface that the compiler uses to handle include files. If you set this parameter to <strong>{{NULL}}</strong> and the shader contains a #include, a compile error occurs. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the shader entry point function where shader execution begins. When you compile an effect, <strong>{{D3DCompile2}}</strong> ignores <em>pEntrypoint</em>; we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that specifies the shader target or set of shader features to compile against. The shader target can be a shader model (for example, shader model 2, shader model 3, shader model 4, or shader model 5). The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>A combination of shader <strong>{{D3D}} compile constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code.</p> </dd> + + + <dd> <p>A combination of effect <strong>{{D3D}} compile effect constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the effect. When you compile a shader and not an effect file, <strong>{{D3DCompile2}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS}} (0x01)</td><td>Merge unordered access view ({{UAV}}) slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS}} (0x02)</td><td>Preserve template slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH}} (0x04)</td><td>Require that templates in the secondary data that the <em>pSecondaryData</em> parameter points to match when the compiler compiles the {{HLSL}} code.</td></tr> </table> <p>?</p> <p>If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to secondary data. If you don't pass secondary data, set to <strong>{{NULL}}</strong>. Use this secondary data to align {{UAV}} slots in two shaders. Suppose shader A has {{UAVs}} and they are bound to some slots. To compile shader B such that {{UAVs}} with the same names are mapped in B to the same slots as in A, pass A?s byte code to <strong>{{D3DCompile2}}</strong> as the secondary data. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSecondaryData</em> points to. If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store. Refer to the section, "Compiling shaders for {{UWP}}", in the remarks for <strong>{{D3DCompile2}}</strong>.?<p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DCompileFromFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Preprocesses uncompiled {{HLSL}} code.</p> + <p><strong>{{D3DPreprocess}}</strong> outputs #line directives and preserves line numbering of source input so that output line numbering can be properly related to the input source.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> The name of the file that contains the uncompiled {{HLSL}} code.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The address of a <strong>{{ID3DBlob}}</strong> that contains the compiled code.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DBlob}}</strong> that contains compiler error messages, or <strong>{{NULL}}</strong> if there were no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Gets shader debug information.</p> + <p>Debug information is embedded in the body of the shader after calling <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data; either uncompiled or compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains debug information.</p> </dd> + + + + + <p>Gets a reference to a reflection interface.</p> + <p>Shader code contains metadata that can be inspected using the reflection {{APIs}}.</p><p>The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> Interface from a shader.</p><pre> pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector); +</pre> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11ShaderReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a reflection interface.</p> </dd> + + + + + <p>Creates a library-reflection interface from source data that contains an {{HLSL}} library of functions. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>A reference to source data as an {{HLSL}} library of functions. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11LibraryReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to a library-reflection interface, <strong>{{ID3D11LibraryReflection}}</strong>.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Flags affecting the behavior of <strong>{{D3DDisassemble}}</strong>. <em>Flags</em> can be a combination of zero or more of the following values. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_COLOR_CODE}}</strong></td><td>Enable the output of color codes.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}}</strong></td><td>Enable the output of default values.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}}</strong></td><td>Enable instruction numbering.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}}</strong></td><td>No effect.</td></tr> <tr><td><strong>{{D3D_DISASM_DISABLE_DEBUG_INFO}}</strong></td><td>Disable debug information.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}}</strong></td><td>Enable instruction offsets.</td></tr> <tr><td><strong>{{D3D_DISASM_INSTRUCTION_ONLY}}</strong></td><td>Disassemble instructions only.</td></tr> <tr><td><strong> {{D3D_DISASM_PRINT_HEX_LITERALS}}</strong></td><td>Use hex symbols in disassemblies.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The comment string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses assembly text.</p> </dd> + + + + + <p>Disassembles a specific region of compiled Microsoft High Level Shader Language ({{HLSL}}) code.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DDisassembleRegion}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of zero or more of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DDisassembleRegion}}</strong> disassembles the compiled shader data.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_DISASM_ENABLE_COLOR_CODE}} (0x01)</td><td>Enable the output of color codes.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}} (0x02)</td><td>Enable the output of default values.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}} (0x04)</td><td>Enable instruction numbering.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}} (0x08)</td><td>No effect.</td></tr> <tr><td>{{D3D_DISASM_DISABLE_DEBUG_INFO}} (0x10)</td><td>Disable the output of debug information.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}} (0x20)</td><td>Enable the output of instruction offsets.</td></tr> <tr><td>{{D3D_DISASM_INSTRUCTION_ONLY}} (0x40)</td><td>This flag has no effect in <strong>{{D3DDisassembleRegion}}</strong>. Cycle information comes from the trace; therefore, cycle information is available only in <strong>{{D3DDisassemble11Trace}}</strong>'s trace disassembly.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>The number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> starts the disassembly.</p> </dd> + + + <dd> <p>The number of instructions to disassemble.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> finishes the disassembly.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses the disassembled {{HLSL}} code.</p> </dd> + + + + + <p>Creates a linker interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateLinker}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Linker}}</strong> interface that is used to link a shader module.</p> </dd> + + + + + <p>Creates a shader module interface from source data for the shader module. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DLoadModule}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the source data for the shader module.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Module}}</strong> interface that is used for shader resource re-binding.</p> </dd> + + + + + <p>Creates a function-linking-graph interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateFunctionLinkingGraph}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11FunctionLinkingGraph}}</strong> interface that is used for constructing shaders that consist of a sequence of precompiled function calls.</p> </dd> + + + + + <p>Retrieves the byte offsets for instructions within a section of shader code.</p> + <p>A new kind of Microsoft High Level Shader Language ({{HLSL}}) debugging information from a program database ({{PDB}}) file uses instruction-byte offsets within a shader blob (arbitrary-length data buffer). You use <strong>{{D3DGetTraceInstructionOffsets}}</strong> to translate to and from instruction indexes.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DGetTraceInstructionOffsets}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the instruction offsets.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE}} (0x01)</td><td>Include non-executable code in the retrieved information.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The index of the instruction in the compiled shader data for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> starts to retrieve the byte offsets.</p> </dd> + + + <dd> <p>The number of instructions for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the byte offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the actual number of offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of instructions in the section of shader code.</p> </dd> + + + + + <strong>Note</strong>??<strong>{{D3DGetInputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the output signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetInputAndOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input and output signatures from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Removes unwanted blobs from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Strip flag options, represented by <strong>{{D3DCOMPILER_STRIP_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the unwanted stripped out shader code.</p> </dd> + + + + + <p>Retrieves a specific part from a compilation result.</p> + <p><strong>{{D3DGetBlobPart}}</strong> retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the <em>Part</em> parameter specifies.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part of the buffer to retrieve.</p> </dd> + + + <dd> <p>Flags that indicate how to retrieve the blob part. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the specified part of the buffer.</p> </dd> + + + + + <p>Sets information in a compilation result.</p> + <p><strong>{{D3DSetBlobPart}}</strong> modifies data in a compiled shader. Currently, <strong>{{D3DSetBlobPart}}</strong> can update only the private data in a compiled shader. You can use <strong>{{D3DSetBlobPart}}</strong> to attach arbitrary uninterpreted data to a compiled shader.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DSetBlobPart}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The length of the compiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part to set. Currently, you can update only private data; that is, <strong>{{D3DSetBlobPart}}</strong> currently only supports the <strong>{{D3D_BLOB_PRIVATE_DATA}}</strong> value.</p> </dd> + + + <dd> <p>Flags that indicate how to set the blob part. Currently, no flags are defined; therefore, set to zero.</p> </dd> + + + <dd> <p>A reference to data to set in the compilation result.</p> </dd> + + + <dd> <p>The length of the data that <em>pPart</em> points to.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface for the new shader in which the new part data is set.</p> </dd> + + + + + <p>Creates a buffer.</p> + <p>The latest {{D3dcompiler_nn}}.dll contains the <strong>{{D3DCreateBlob}}</strong> compiler function. Therefore, you are no longer required to create and use an arbitrary length data buffer by using the <strong>{{D3D10CreateBlob}}</strong> function that is contained in {{D3d10}}.dll.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>Number of bytes in the blob.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the buffer.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Compresses a set of shaders into a more compact form. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>The number of shaders to compress.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures that describe the set of shaders to compress.</p> </dd> + + + <dd> <p>Flags that indicate how to compress the shaders. Currently, only the {{D3D_COMPRESS_SHADER_KEEP_ALL_PARTS}} (0x00000001) flag is defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the compressed shader data.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Decompresses one or more shaders from a compressed set. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The number of shaders to decompress.</p> </dd> + + + <dd> <p>The index of the first shader to decompress.</p> </dd> + + + <dd> <p>An array of indexes that represent the shaders to decompress.</p> </dd> + + + <dd> <p>Flags that indicate how to decompress. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the decompressed shader data.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of shaders that <strong>{{D3DDecompressShaders}}</strong> decompressed.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code from a Direct3D10 effect.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Shader compile options.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains disassembly text.</p> </dd> + + + + + <p>Indicates shader type.</p> + + + <dd> <p>Pixel shader.</p> </dd> + + + <dd> <p>Vertex shader.</p> </dd> + + + <dd> <p>Geometry shader.</p> </dd> + + + <dd> <p>Hull shader.</p> </dd> + + + <dd> <p>Domain shader.</p> </dd> + + + <dd> <p>Compute shader.</p> </dd> + + + <dd> <p>Indicates the end of the enumeration constants.</p> </dd> + + + + + <p>Describes a shader signature.</p> + <p>A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.</p><p>When compiling a shader or an effect, some {{API}} calls validate shader signatures That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.</p><p>Get a shader-signature from a shader or an effect by calling {{APIs}} such as <strong>{{ID3D11ShaderReflection::GetInputParameterDesc}}</strong>. </p> + + + <dd> <p>A per-parameter string that identifies how the data will be used. For more info, see Semantics. </p> </dd> + + + <dd> <p>Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.</p> </dd> + + + <dd> <p>The register that will contain this variable's data.</p> </dd> + + + <dd> <p>A <strong>{{D3D_NAME}}</strong>-typed value that identifies a predefined string that determines the functionality of certain pipeline stages.</p> </dd> + + + <dd> <p>A <strong>{{D3D_REGISTER_COMPONENT_TYPE}}</strong>-typed value that identifies the per-component-data type that is stored in a register. Each register can store up to four-components of data.</p> </dd> + + + <dd> <p>Mask which indicates which components of a register are used.</p> </dd> + + + <dd> <p>Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). </p> </dd> + + + <dd> <p>Indicates which stream the geometry shader is using for the signature parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_MIN_PRECISION}}</strong>-typed value that indicates the minimum desired interpolation precision. For more info, see Using {{HLSL}} minimum precision.</p> </dd> + + + + + <p>Describes a shader constant-buffer.</p> + <p>Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling <strong>{{ID3D11ShaderReflectionConstantBuffer::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D_CBUFFER_TYPE}}</strong>-typed value that indicates the intended use of the constant data.</p> </dd> + + + <dd> <p>The number of unique variables.</p> </dd> + + + <dd> <p>Buffer size (in bytes).</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies properties for the shader constant-buffer.</p> </dd> + + + + + <p>Describes a shader variable.</p> + <p> Get a shader-variable description using reflection by calling <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong>. </p><p> As of the June 2010 update, <strong>DefaultValue</strong> emits default values for reflection. </p> + + + <dd> <p>The variable name.</p> </dd> + + + <dd> <p>Offset from the start of the parent structure to the beginning of the variable.</p> </dd> + + + <dd> <p>Size of the variable (in bytes).</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value identifies shader-variable properties. </p> </dd> + + + <dd> <p>The default value for initializing the variable.</p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the texture. </p> </dd> + + + <dd> <p>The size of the texture, in bytes. </p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the sampler. </p> </dd> + + + <dd> <p>The size of the sampler, in bytes. </p> </dd> + + + + + <p>Describes a shader-variable type.</p> + <p>Get a shader-variable-type description by calling <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type.</p> </dd> + + + <dd> <p>Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of elements in an array; otherwise 0.</p> </dd> + + + <dd> <p>Number of members in the structure; otherwise 0.</p> </dd> + + + <dd> <p>Offset, in bytes, between the start of the parent structure and this variable. Can be 0 if not a structure member.</p> </dd> + + + <dd> <p>Name of the shader-variable type. This member can be <strong>{{NULL}}</strong> if it isn't used. This member supports dynamic shader linkage interface types, which have names. For more info about dynamic shader linkage, see Dynamic Linking.</p> </dd> + + + + + <p>Describes a shader.</p> + <p>A shader is written in {{HLSL}} and compiled into an intermediate language by the {{HLSL}} compiler. The shader description returns information about the compiled shader. Get a shader description by calling <strong>{{ID3D11ShaderReflection::GetDesc}}</strong>.</p> + + + <dd> <p>Shader version.</p> </dd> + + + <dd> <p>The name of the originator of the shader.</p> </dd> + + + <dd> <p>Shader compilation/parse flags.</p> </dd> + + + <dd> <p>The number of shader-constant buffers.</p> </dd> + + + <dd> <p>The number of resource (textures and buffers) bound to a shader.</p> </dd> + + + <dd> <p>The number of parameters in the input signature.</p> </dd> + + + <dd> <p>The number of parameters in the output signature.</p> </dd> + + + <dd> <p>The number of intermediate-language instructions in the compiled shader.</p> </dd> + + + <dd> <p>The number of temporary registers in the compiled shader.</p> </dd> + + + <dd> <p>Number of temporary arrays used.</p> </dd> + + + <dd> <p>Number of constant defines.</p> </dd> + + + <dd> <p>Number of declarations (input + output).</p> </dd> + + + <dd> <p>Number of non-categorized texture instructions.</p> </dd> + + + <dd> <p>Number of texture load instructions</p> </dd> + + + <dd> <p>Number of texture comparison instructions</p> </dd> + + + <dd> <p>Number of texture bias instructions</p> </dd> + + + <dd> <p>Number of texture gradient instructions.</p> </dd> + + + <dd> <p>Number of floating point arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of signed integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of unsigned integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of static flow control instructions used.</p> </dd> + + + <dd> <p>Number of dynamic flow control instructions used.</p> </dd> + + + <dd> <p>Number of macro instructions used.</p> </dd> + + + <dd> <p>Number of array instructions used.</p> </dd> + + + <dd> <p>Number of cut instructions used.</p> </dd> + + + <dd> <p>Number of emit instructions used.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>-typed value that represents the geometry shader output topology.</p> </dd> + + + <dd> <p>Geometry shader maximum output vertex count.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE}}</strong>-typed value that represents the input primitive for a geometry shader or hull shader.</p> </dd> + + + <dd> <p>Number of parameters in the patch-constant signature.</p> </dd> + + + <dd> <p>Number of geometry shader instances.</p> </dd> + + + <dd> <p>Number of control points in the hull shader and domain shader.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_OUTPUT_PRIMITIVE}}</strong>-typed value that represents the tessellator output-primitive type.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_PARTITIONING}}</strong>-typed value that represents the tessellator partitioning mode.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_DOMAIN}}</strong>-typed value that represents the tessellator domain.</p> </dd> + + + <dd> <p>Number of barrier instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of interlocked instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of texture writes in a compute shader.</p> </dd> + + + + + <p>Describes how a shader resource is bound to a shader input.</p> + <p>Get a shader-input-signature description by calling <strong>{{ID3D11ShaderReflection::GetResourceBindingDesc}}</strong> or <strong>{{ID3D11ShaderReflection::GetResourceBindingDescByName}}</strong>.</p> + + + <dd> <p>Name of the shader resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed value that identifies the type of data in the resource.</p> </dd> + + + <dd> <p>Starting bind point.</p> </dd> + + + <dd> <p>Number of contiguous bind points for arrays.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values for shader input-parameter options. </p> </dd> + + + <dd> <p>If the input is a texture, the <strong>{{D3D_RESOURCE_RETURN_TYPE}}</strong>-typed value that identifies the return type.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value that identifies the dimensions of the bound resource.</p> </dd> + + + <dd> <p>The number of samples for a multisampled texture; when a texture isn't multisampled, the value is set to -1 (0xFFFFFFFF). </p> </dd> + + + + + <p>Describes a library.</p> + + + <dd> <p>The name of the originator of the library.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies how the compiler compiles.</p> </dd> + + + <dd> <p>The number of functions exported from the library.</p> </dd> + + + + + <p>Describes a function.</p> + + + <dd> <p>The shader version.</p> </dd> + + + <dd> <p>The name of the originator of the function.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies shader compilation and parsing.</p> </dd> + + + <dd> <p>The number of constant buffers for the function.</p> </dd> + + + <dd> <p>The number of bound resources for the function.</p> </dd> + + + <dd> <p>The number of emitted instructions for the function.</p> </dd> + + + <dd> <p>The number of temporary registers used by the function.</p> </dd> + + + <dd> <p>The number of temporary arrays used by the function.</p> </dd> + + + <dd> <p>The number of constant defines for the function.</p> </dd> + + + <dd> <p>The number of declarations (input + output) for the function.</p> </dd> + + + <dd> <p>The number of non-categorized texture instructions for the function.</p> </dd> + + + <dd> <p>The number of texture load instructions for the function.</p> </dd> + + + <dd> <p>The number of texture comparison instructions for the function.</p> </dd> + + + <dd> <p>The number of texture bias instructions for the function.</p> </dd> + + + <dd> <p>The number of texture gradient instructions for the function.</p> </dd> + + + <dd> <p>The number of floating point arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of signed integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of unsigned integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of static flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of dynamic flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of macro instructions used by the function.</p> </dd> + + + <dd> <p>The number of array instructions used by the function.</p> </dd> + + + <dd> <p>The number of mov instructions used by the function.</p> </dd> + + + <dd> <p>The number of movc instructions used by the function.</p> </dd> + + + <dd> <p>The number of type conversion instructions used by the function.</p> </dd> + + + <dd> <p>The number of bitwise arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>A <strong>{{D3D_FEATURE_LEVEL}}</strong>-typed value that specifies the minimum Direct3D feature level target of the function byte code.</p> </dd> + + + <dd> <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. For a list of values, see <strong>{{ID3D11ShaderReflection::GetRequiresFlags}}</strong>. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p>The number of logical parameters in the function signature, not including the return value.</p> </dd> + + + <dd> <p>Indicates whether the function returns a value. <strong>{{TRUE}}</strong> indicates it returns a value; otherwise, <strong>{{FALSE}}</strong> (it is a subroutine).</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 vertex shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 vertex shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 pixel shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 pixel shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes a function parameter. </p> + <p>Get a function-parameter description by calling <strong>{{ID3D11FunctionParameterReflection::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the function parameter.</p> </dd> + + + <dd> <p>The {{HLSL}} semantic that is associated with this function parameter. This name includes the index, for example, {{SV_Target}}[n].</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type for the parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class for the parameter as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>The number of rows for a matrix parameter.</p> </dd> + + + <dd> <p>The number of columns for a matrix parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_INTERPOLATION_MODE}}</strong>-typed value that identifies the interpolation mode for the parameter.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_PARAMETER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies semantic flags for the parameter.</p> </dd> + + + <dd> <p>The first input register for this parameter.</p> </dd> + + + <dd> <p>The first input register component for this parameter.</p> </dd> + + + <dd> <p>The first output register for this parameter.</p> </dd> + + + <dd> <p>The first output register component for this parameter.</p> </dd> + + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get the description of a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-type description (see <strong>{{D3D11_SHADER_TYPE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-reflection-variable type by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection-variable type by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The variable type.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type.</p> + <p>IsEqual indicates whether the sources of the <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type. For example, if two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references were retrieved from variables, IsEqual can be used to see if the variables have the same type.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the references have the same underlying type; otherwise returns {{S_FALSE}}.</p> + + + + <p>Gets the base class of a class.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong> containing the base class type. Returns <strong>{{NULL}}</strong> if the class does not have a base class.</p> + + + + <p>Gets an <strong>{{ID3D11ShaderReflectionType}} Interface</strong> interface containing the variable base class type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>Gets the number of interfaces.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of interfaces.</p> + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether a variable is of the specified type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if object being queried is equal to or inherits from the type in the <em>pType</em> parameter; otherwise returns {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Indicates whether a class type implements an interface.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the interface is implemented; otherwise return {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>Get a shader-variable description.</p> + <p>This method can be used to determine if the <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> is valid, the method returns <strong>{{E_FAIL}}</strong> when the variable is not valid.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-variable description (see <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>This method returns the buffer of the current <strong>{{ID3D11ShaderReflectionVariable}}</strong>.</p> + <p> Returns a reference to the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> of the present <strong>{{ID3D11ShaderReflectionVariable}}</strong>. </p> + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>This shader-reflection interface provides access to a constant buffer.</p> + <p> To create a constant-buffer interface, call <strong>{{ID3D11ShaderReflection::GetConstantBufferByIndex}}</strong> or <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it. </p> + + + + <p>Get a constant-buffer description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong>, which represents a shader-buffer description.</p> </dd> + + + + + <p>Get a shader-reflection variable by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a shader-reflection variable interface (see <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a sentinel object (end of list marker). To determine if GetVariableByName successfully completed, call <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> and check the returned <strong>{{HRESULT}}</strong>; any return value other than success means that GetVariableByName failed.</p> + + + <dd> <p>Variable name.</p> </dd> + + + + + <p>A shader-reflection interface accesses shader information.</p> + <p> An <strong>{{ID3D11ShaderReflection}}</strong> interface can be retrieved for a shader by using <strong>{{D3DReflect}}</strong>. The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> from a shader. </p><pre>pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector);</pre> + + + + <p>Get a shader description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader description. See <strong>{{D3D11_SHADER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader.</p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Get an input-parameter description for a shader.</p> + <p>An input-parameter description is also called a shader signature. The shader signature contains information about the input parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p> A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> </dd> + + + + + <p>Get an output-parameter description for a shader.</p> + <p>An output-parameter description is also called a shader signature. The shader signature contains information about the output parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-output-parameter description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a patch-constant parameter description for a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Gets a variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Gets the number of Mov instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Mov instructions.</p> + + + + <p>Gets the number of Movc instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Movc instructions.</p> + + + + <p>Gets the number of conversion instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of conversion instructions.</p> + + + + <p>Gets the number of bitwise instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of bitwise instructions.</p> + + + + <p>Gets the geometry-shader input-primitive description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> The input-primitive description. See <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>, <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>, or <strong>{{D3D10_PRIMITIVE_TOPOLOGY}}</strong>. </p> + + + + <p>Indicates whether a shader is a sample frequency shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns true if the shader is a sample frequency shader; otherwise returns false.</p> + + + + <p>Gets the number of interface slots in a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of interface slots in the shader.</p> + + + + <p>Gets the minimum feature level.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to one of the enumerated values in <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the minimum feature level. </p> </dd> + + + + + <p>Retrieves the sizes, in units of threads, of the X, Y, and Z dimensions of the shader's thread-group grid.</p> + <p> This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll. </p><p>When a compute shader is written it defines the actions of a single thread group only. If multiple thread groups are required, it is the role of the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> call to issue multiple thread groups. </p> + <p> Returns the total size, in threads, of the thread-group grid by calculating the product of the size of each dimension. +</p><code>*pSizeX * *pSizeY * *pSizeZ;</code> + + + <dd> <p>A reference to the size, in threads, of the x-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the y-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the z-dimension of the thread-group grid. The maximum size is 64.</p> </dd> + + + + + <p>Gets a group of flags that indicates the requirements of a shader.</p> + <p>Here is how the {{D3D11Shader}}.h header defines the shader requirements flags:</p><pre> #define {{D3D_SHADER_REQUIRES_DOUBLES}} 0x00000001 +#define {{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}} 0x00000002 +#define {{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}} 0x00000004 +#define {{D3D_SHADER_REQUIRES_64_UAVS}} 0x00000008 +#define {{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}} 0x00000010 +#define {{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}} 0x00000020 +#define {{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}} 0x00000040 +#define {{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}} 0x00000080 +</pre> + <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. </p><table> <tr><th>Shader requirement flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_DOUBLES}}</strong></td><td>Shader requires that the graphics driver and hardware support double data type. For more info, see <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}}</strong></td><td>Shader requires an early depth stencil.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}}</strong></td><td>Shader requires unordered access views ({{UAVs}}) at every pipeline stage.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_64_UAVS}}</strong></td><td>Shader requires 64 {{UAVs}}.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}}</strong></td><td>Shader requires the graphics driver and hardware to support minimum precision. For more info, see Using {{HLSL}} minimum precision.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support extended doubles instructions. For more info, see the <strong>ExtendedDoublesShaderInstructions</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support the <strong>msad4</strong> intrinsic function in shaders. For more info, see the <strong>{{SAD4ShaderInstructions}}</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}}</strong></td><td>Shader requires that the graphics driver and hardware support Direct3D 9 shadow support. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_TILED_RESOURCES}}</strong></td><td>Shader requires that the graphics driver and hardware support tiled resources. For more info, see <strong>GetResourceTiling</strong>. </td></tr> </table><p>?</p> + + + + <p> A library-reflection interface accesses library info. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a library-reflection interface, call <strong>{{D3DReflectLibrary}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LibraryReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the library descriptor structure for the library reflection.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_LIBRARY_DESC}}</strong> structure that receives a description of the library reflection.</p> </dd> + + + + + <p>Gets the function reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionReflection}}</strong> interface that represents the function reflector.</p> + + + <dd> <p>The zero-based index of the function reflector to retrieve.</p> </dd> + + + + + <p>A function-reflection interface accesses function info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-reflection interface, call <strong>{{ID3D11LibraryReflection::GetFunctionByIndex}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the function descriptor structure for the function.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_FUNCTION_DESC}}</strong> structure that receives a description of the function.</p> </dd> + + + + + <p>Gets a constant buffer by index for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Gets a constant buffer by name for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets a variable by name.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets the function parameter reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionParameterReflection}}</strong> interface that represents the function parameter reflector.</p> + + + <dd> <p>The zero-based index of the function parameter reflector to retrieve.</p> </dd> + + + + + <p>A function-parameter-reflection interface accesses function-parameter info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-parameter-reflection interface, call <strong>{{ID3D11FunctionReflection::GetFunctionParameter}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionParameterReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the parameter descriptor structure for the function's parameter.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_PARAMETER_DESC}}</strong> structure that receives a description of the function's parameter. </p> </dd> + + + + + <p> A module interface creates an instance of a module that is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module interface, call <strong>{{D3DLoadModule}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Module}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes an instance of a shader module that is used for resource rebinding.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The name of a shader module to initialize. This can be <strong>{{NULL}}</strong> if you don't want to specify a name for the module.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface to initialize.</p> </dd> + + + + + <p> A module-instance interface is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module-instance interface, call <strong>{{ID3D11Module::CreateInstance}}</strong> or <strong>{{ID3D11FunctionLinkingGraph::CreateModuleInstance}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11ModuleInstance}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Rebinds a constant buffer from a source slot to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The source slot number for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a constant buffer by name to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the constant buffer for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a texture or buffer from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a texture or buffer by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the texture or buffer for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the sampler for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the {{UAV}} for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource as an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource by name as an unordered access view ({{UAV}}) to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the resource for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p> A linker interface is used to link a shader module. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linker interface, call <strong>{{D3DCreateLinker}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Linker}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p> Links the shader and produces a shader blob that the Direct3D runtime can use. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module instance to link from. </p> </dd> + + + <dd> <p> The name of the shader module instance to link from. </p> </dd> + + + <dd> <p> The name for the shader blob that is produced. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled shader code. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages. </p> </dd> + + + + + <p>Adds an instance of a library module to be used for linking.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module instance.</p> </dd> + + + + + <p>Adds a clip plane with the plane coefficients taken from a cbuffer entry for 10Level9 shaders.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Indicates the tier level at which view instancing is supported.</p> + + + <dd> <p>View instancing is not supported.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping only.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping at worst, but the {{GPU}} can perform view instancing more efficiently in certain circumstances which are architecture-dependent.</p> </dd> + + + <dd> <p>View instancing is supported and instancing begins with the first shader stage that references {{SV_ViewID}} or with rasterization if no shader stage references {{SV_ViewID}}. This means that redundant work is eliminated across view instances when it's not dependent on {{SV_ViewID}}. Before rasterization, work that doesn't directly depend on {{SV_ViewID}} is shared across all views; only work that depends on {{SV_ViewID}} is repeated for each view.</p> <strong>Note</strong> If a hull shader produces tessellation factors that are dependent on {{SV_ViewID}}, then tessellation and all subsequent work must be repeated per-view. Similarly, if the amount of geometry produced by the geometry shader depends on {{SV_ViewID}}, then the geometry shader must be repeated per-view before proceeding to rasterization. <p>View instance masking only effects whether work that directly depends on {{SV_ViewID}} is performed, not the entire loop iteration (per-view). If the view instance mask is non-0, some work that depends on {{SV_ViewID}} might still be performed on masked-off pixels but will have no externally-visible effect; for example, no {{UAV}} writes are performed and clipping/rasterzation is not invoked. If the view instance mask is 0 no work is performed, including work that's not dependent on {{SV_ViewID}}.</p> </dd> + + + + + <p> A linking-node interface is used for shader linking. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linking-node interface, call <strong>{{ID3D11FunctionLinkingGraph::SetInputSignature}}</strong>, <strong>{{ID3D11FunctionLinkingGraph::SetOutputSignature}}</strong>, or <strong>{{ID3D11FunctionLinkingGraph::CallFunction}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LinkingNode}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-linking-graph interface, call <strong>{{D3DCreateFunctionLinkingGraph}}</strong>. </p><p>You can use the function-linking-graph ({{FLG}}) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write {{HLSL}} and then call the {{HLSL}} compiler. Instead, the shader structure is specified programmatically via a C++ {{API}}. {{FLG}} nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. {{FLG}} edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the {{HLSL}} behavior. Values can only be passed forward in this sequence.</p><strong>Note</strong>??<strong>{{ID3D11FunctionLinkingGraph}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes a shader module from the function-linking-graph object.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module to initialize.</p> </dd> + + + <dd> <p>An optional reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Sets the input signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the input signature.</p> </dd> + + + <dd> <p>The number of input parameters in the <em>pInputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the input signature of the function-linking-graph.</p> </dd> + + + + + <p>Sets the output signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the output signature.</p> </dd> + + + <dd> <p>The number of output parameters in the <em>pOutputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the output signature of the function-linking-graph.</p> </dd> + + + + + <p>Creates a call-function linking node to use in the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> The optional namespace for the function, or <strong>{{NULL}}</strong> if no namespace is needed. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module that contains the function prototype. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the function in the function-linking-graph. </p> </dd> + + + + + <p>Passes a value from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + + + <p>Passes a value with swizzle from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>The name of the source swizzle.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + <dd> <p>The name of the destination swizzle.</p> </dd> + + + + + <p>Gets the error from the last function call of the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the error. </p> </dd> + + + + + <p>Generates Microsoft High Level Shader Language ({{HLSL}}) shader code that represents the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the {{HLSL}} shader source code that represents the function-linking-graph. You can compile this {{HLSL}} code, but first you must add code or include statements for the functions called in the function-linking-graph.</p> </dd> + + + + + <p>Driver type options.</p> + <p>The driver type is required when calling <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + + + <dd> <p>The driver type is unknown.</p> </dd> + + + <dd> <p>A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration (on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver type is often referred to as a hardware abstraction layer or {{HAL}}.</p> </dd> + + + <dd> <p>A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special {{CPU}} instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration of functionality, debugging, or verifying bugs in other drivers. The reference device for this driver is installed by the Windows {{SDK}} 8.0 or later and is intended only as a debug aid for development purposes. This driver may be referred to as a {{REF}} driver, a reference driver, or a reference rasterizer.</p> <strong>Note</strong>??When you use the {{REF}} driver in Windows Store apps, the {{REF}} driver renders correctly but doesn't display any output on the screen. To verify bugs in hardware drivers for Windows Store apps, use <strong>{{D3D_DRIVER_TYPE_WARP}}</strong> for the {{WARP}} driver instead. ? </dd> + + + <dd> <p>A {{NULL}} driver, which is a reference driver without render capability. This driver is commonly used for debugging non-rendering {{API}} calls, it is not appropriate for retail applications. This driver is installed by the DirectX {{SDK}}.</p> </dd> + + + <dd> <p>A software driver, which is a driver implemented completely in software. The software implementation is not intended for a high-performance application due to its very slow performance.</p> </dd> + + + <dd> <p>A {{WARP}} driver, which is a high-performance software rasterizer. The rasterizer supports <strong>feature levels</strong> 9_1 through level 10_1 with a high performance software implementation. For information about limitations creating a {{WARP}} device on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. For more information about using a {{WARP}} driver, see Windows Advanced Rasterization Platform ({{WARP}}) In-Depth Guide.</p> <strong>Note</strong>??The {{WARP}} driver that Windows?8 includes supports feature levels 9_1 through level 11_1. ? <strong>Note</strong>??The {{WARP}} driver that Windows?8.1 includes fully supports feature level 11_1, including tiled resources, <strong>{{IDXGIDevice3::Trim}}</strong>, shared {{BCn}} surfaces, minblend, and map default. ? </dd> + + + + + <p> Describes the set of features targeted by a Direct3D device. </p> + <p> For an overview of the capabilities of each feature level, see Overview For Each Feature Level. </p><p> For information about limitations creating non-hardware-type devices on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. </p> + + + <dd> <p> Targets features supported by feature level 9.1 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.2 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.3 including shader model 2.0b. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.0 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.1 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.1 including shader model 5 and logical blend operations. This feature level requires a display driver that is at least implemented to {{WDDM}} for Windows?8 ({{WDDM}} 1.2). </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.1 including shader model 5. </p> </dd> + + + + + <p>Values that indicate how the pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on screen.</p> + <p>Use the <strong>{{ID3D11DeviceContext::IASetPrimitiveTopology}}</strong> method and a value from <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong> to bind a primitive topology to the input-assembler stage. Use the <strong>{{ID3D11DeviceContext::IAGetPrimitiveTopology}}</strong> method to retrieve the primitive topology for the input-assembler stage.</p><p>The following diagram shows the various primitive types for a geometry shader object.</p> + + + + <p>Values that indicate how the pipeline interprets geometry or hull shader input primitives.</p> + <p> The <strong>{{ID3D11ShaderReflection::GetGSInputPrimitive}}</strong> method returns a <strong>{{D3D_PRIMITIVE}}</strong>-typed value. </p> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p>The type is undefined.</p> </dd> + + + <dd> <p>The data is organized in a point list.</p> </dd> + + + <dd> <p>The data is organized in a line list.</p> </dd> + + + <dd> <p>The data is organized in a triangle list.</p> </dd> + + + <dd> <p>The data is organized in a line list with adjacency data.</p> </dd> + + + <dd> <p>The data is organized in a triangle list with adjacency data.</p> </dd> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + + + <p>Values that identify the type of resource to be viewed as a shader resource.</p> + <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value is specified in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure or the <strong>Dimension</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Values that indicate the location of a shader #include file. </p> + <p>You pass a <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value to the <em>IncludeType</em> parameter in a call to the <strong>{{ID3DInclude::Open}}</strong> method to indicate the location of the #include file.</p> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. </p> <p>Do not use this value.</p> </dd> + + + + + <p>Values that identify the class of a shader variable.</p> + <p>The class of a shader variable is not a programming class; the class identifies the variable class such as scalar, vector, object, and so on. <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed values are specified in the <strong>Class</strong> member of the <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify information about a shader variable.</p> + <p>A call to the <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> method returns <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong> values in the <strong>uFlags</strong> member of a <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong> structure.</p> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify various data, texture, and buffer types that can be assigned to a shader variable.</p> + <p> A call to the <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong> method returns a <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong> value in the <strong>Type</strong> member of a <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure. </p><p> The types in a structured buffer describe the structure of the elements in the buffer. The layout of these types generally match their C++ struct counterparts. The following examples show structured buffers: </p><pre>struct mystruct {float4 val; uint ind;}; {{RWStructuredBuffer}}&lt;mystruct&gt; rwbuf; {{RWStructuredBuffer}}&lt;float3&gt; rwbuf2;</pre> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> <p> For more information about structured buffer, see the <strong>Remarks</strong> section. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p> The variable is an 8-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 10-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 12-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read and write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify shader-input options.</p> + <p><strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure. </p> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> This value is reserved. </p> </dd> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> Forces the enumeration to compile to 32 bits. This value is not used directly by titles. </p> </dd> + + + + + <p>Values that identify resource types that can be bound to a shader and that are reflected as part of the resource description for the shader.</p> + <p><strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed values are specified in the <strong>Type</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + + + <p>Values that identify the indended use of a constant-data buffer.</p> + <p><strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong> structure.</p> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify the intended use of constant-buffer data. </p> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + + + <p>Values that identify shader parameters that use system-value semantics.</p> + <p> The <strong>{{D3D_NAME}}</strong> values identify shader parameters that have predefined system-value semantics. These values are used in a shader-signature description. For more information about shader-signature description, see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains an instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + + + <p>Values that identify the return type of a resource.</p> + <p>A resource return type is specified in the <strong>ReturnType</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + <dd> <p>Unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Signed integer.</p> </dd> + + + <dd> <p>Unsigned integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + + + <p>Values that identify the data types that can be stored in a register.</p> + <p>A register component type is specified in the <strong>ComponentType</strong> member of the <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong> structure.</p> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + + + <p>Values that identify domain options for tessellator data.</p> + <p>The data domain defines the type of data. This enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + + + <p>Values that identify partitioning options.</p> + <p>During tessellation, the partition option helps to determine how the algorithm chooses the next partition value; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + + + <p>Values that identify output primitive types.</p> + <p>The output primitive type determines how the tessellator output data is organized; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + + + <p>Values that indicate the minimum desired interpolation precision.</p> + <p>For more info, see <strong>Scalar Types</strong> and Using {{HLSL}} minimum precision.</p> + + + <dd> <p>Default minimum precision, which is 32-bit precision.</p> </dd> + + + <dd> <p>Minimum precision is min16float, which is 16-bit floating point. </p> </dd> + + + <dd> <p>Minimum precision is min10float, which is 10-bit floating point. </p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>Minimum precision is min16int, which is 16-bit signed integer. </p> </dd> + + + <dd> <p>Minimum precision is min16uint, which is 16-bit unsigned integer. </p> </dd> + + + <dd> <p>Minimum precision is any 16-bit value. </p> </dd> + + + <dd> <p>Minimum precision is any 10-bit value. </p> </dd> + + + + + <p>Specifies interpolation mode, which affects how values are calculated during rasterization.</p> + + + <dd> <p>The interpolation mode is undefined.</p> </dd> + + + <dd> <p>Don't interpolate between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but sample clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and sample clamped when multisampling.</p> </dd> + + + + + <p>Indicates semantic flags for function parameters.</p> + + + <dd> <p>The parameter has no semantic flags.</p> </dd> + + + <dd> <p>Indicates an input parameter.</p> </dd> + + + <dd> <p>Indicates an output parameter.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Defines a shader macro.</p> + <p>You can use shader macros in your shaders. The <strong>{{D3D_SHADER_MACRO}}</strong> structure defines a single shader macro as shown in the following example:</p><pre> {{D3D_SHADER_MACRO}} Shader_Macros[] = { "zero", "0", {{NULL}}, {{NULL}} }; +</pre><p>The following shader or effect creation functions take an array of shader macros as an input parameter:</p><ul> <li> <strong>{{D3D10CompileShader}}</strong> </li> <li> <strong>{{D3DX10CreateEffectFromFile}}</strong> </li> <li> <strong>{{D3DX10PreprocessShaderFromFile}}</strong> </li> <li> <strong>{{D3DX11CreateAsyncShaderPreprocessProcessor}}</strong> </li> </ul> + + + <dd> <p>The macro name.</p> </dd> + + + <dd> <p>The macro definition.</p> </dd> + + + + + <p>This interface is used to return arbitrary length data.</p> + <p>An <strong>{{ID3D10Blob}}</strong> is obtained by calling <strong>{{D3D10CreateBlob}}</strong>.</p><p>The <strong>{{ID3DBlob}}</strong> interface is type defined in the {{D3DCommon}}.h header file as a <strong>{{ID3D10Blob}}</strong> interface, which is fully defined in the {{D3DCommon}}.h header file. <strong>{{ID3DBlob}}</strong> is version neutral and can be used in code for any Direct3D version.</p><p>Blobs can be used as a data buffer, storing vertex, adjacency, and material information during mesh optimization and loading operations. Also, these objects are used to return object code and error messages in {{APIs}} that compile vertex, geometry and pixel shaders.</p> + + + + <p>Get a reference to the data.</p> + <p>Returns a reference.</p> + + + + <p>Get the size.</p> + <p>The size of the data, in bytes.</p> + + + + + + + + + + + + + <p><strong>{{ID3DInclude}}</strong> is an include interface that the user implements to allow an application to call user-overridable methods for opening and closing shader #include files. </p> + <p> To use this interface, create an interface that inherits from <strong>{{ID3DInclude}}</strong> and implement custom behavior for the methods. </p> + + + + <p>A user-implemented method for opening and reading the contents of a shader #include file.</p> + <p> The user-implemented method must return {{S_OK}}. If <strong>Open</strong> fails when it reads the #include file, the application programming interface ({{API}}) that caused <strong>Open</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> A <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value that indicates the location of the #include file. </p> </dd> + + + <dd> <p>Name of the #include file.</p> </dd> + + + <dd> <p> Pointer to the container that includes the #include file. The compiler might pass {{NULL}} in <em>pParentData</em>. For more information, see the "Searching for Include Files" section in Compile an Effect (Direct3D 11). </p> </dd> + + + <dd> <p> Pointer to the buffer that contains the include directives. This reference remains valid until you call<strong>{{ID3DInclude::Close}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the number of bytes that <strong>Open</strong> returns in <em>ppData</em>. </p> </dd> + + + + + <p>A user-implemented method for closing a shader #include file.</p> + <p> If <strong>{{ID3DInclude::Open}}</strong> was successful, <strong>Close</strong> is guaranteed to be called before the {{API}} using the <strong>{{ID3DInclude}}</strong> interface returns. </p> + <p> The user-implemented <strong>Close</strong> method should return {{S_OK}}. If <strong>Close</strong> fails when it closes the #include file, the application programming interface ({{API}}) that caused <strong>Close</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> Pointer to the buffer that contains the include directives. This is the reference that was returned by the corresponding <strong>{{ID3DInclude::Open}}</strong> call. </p> </dd> + + + + + <p>The type of a font represented by a single font file. Font formats that consist of multiple files, for example Type 1 .{{PFM}} and .{{PFB}}, have separate enum values for each of the file types.</p> + + + <dd> <p>Font type is not recognized by the DirectWrite font system.</p> </dd> + + + <dd> <p>OpenType font with {{CFF}} outlines.</p> </dd> + + + <dd> <p>OpenType font with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font that contains a TrueType collection.</p> </dd> + + + <dd> <p>Type 1 {{PFM}} font.</p> </dd> + + + <dd> <p>Type 1 {{PFB}} font.</p> </dd> + + + <dd> <p>Vector .{{FON}} font.</p> </dd> + + + <dd> <p>Bitmap .{{FON}} font.</p> </dd> + + + + + <p>Indicates the file format of a complete font face.</p> + <p>Font formats that consist of multiple files, such as Type 1 .{{PFM}} and .{{PFB}}, have a single enum entry.</p> + + + <dd> <p>OpenType font face with {{CFF}} outlines.</p> </dd> + + + <dd> <p>The font data includes only the {{CFF}} table from an OpenType {{CFF}} font. This font face type can be used only for embedded fonts (i.e., custom font file loaders) and the resulting font face object supports only the minimum functionality necessary to render glyphs.</p> </dd> + + + <dd> <p>OpenType font face with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font face that is a part of a TrueType collection.</p> </dd> + + + <dd> <p>A Type 1 font face.</p> </dd> + + + <dd> <p>A vector .{{FON}} format font face.</p> </dd> + + + <dd> <p>A bitmap .{{FON}} format font face.</p> </dd> + + + <dd> <p>Font face type is not recognized by the DirectWrite font system.</p> </dd> + + + + + <p>Specifies algorithmic style simulations to be applied to the font face. Bold and oblique simulations can be combined via bitwise {{OR}} operation.</p> + <p> Style simulations are not recommended for good typographic quality.</p> + + + <dd> <p>Indicates that no simulations are applied to the font face.</p> </dd> + + + <dd> <p>Indicates that algorithmic emboldening is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_BOLD}}</strong> increases weight by applying a widening algorithm to the glyph outline. This may be used to simulate a bold weight where no designed bold weight is available.</p> </dd> + + + <dd> <p>Indicates that algorithmic italicization is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_OBLIQUE}}</strong> applies obliquing (shear) to the glyph outline. This may be used to simulate an oblique/italic style where no designed oblique/italic style is available.</p> </dd> + + + + + <p>Represents the density of a typeface, in terms of the lightness or heaviness of the strokes. The enumerated values correspond to the usWeightClass definition in the OpenType specification. The <em>usWeightClass</em> represents an integer value between 1 and 999. Lower values indicate lighter weights; higher values indicate heavier weights.</p> + <p>Weight differences are generally differentiated by an increased stroke or thickness that is associated with a given character in a typeface, as compared to a "normal" character from that same typeface. +The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p><p></p><strong>Note</strong>??Not all weights are available for all typefaces. When a weight is not available for a typeface, the closest matching weight is returned.?<p>Font weight values less than 1 or greater than 999 are considered invalid, and they are rejected by font {{API}} functions.</p> + + + <dd> <p>Predefined font weight : Thin (100).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Light (300).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-Light (350).</p> </dd> + + + <dd> <p>Predefined font weight : Normal (400).</p> </dd> + + + <dd> <p>Predefined font weight : Regular (400).</p> </dd> + + + <dd> <p>Predefined font weight : Medium (500).</p> </dd> + + + <dd> <p>Predefined font weight : Demi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Bold (700).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Black (900).</p> </dd> + + + <dd> <p>Predefined font weight : Heavy (900).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-black (950).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-black (950).</p> </dd> + + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Represents the style of a font face as normal, italic, or oblique.</p> + <p>Three terms categorize the slant of a font: normal, italic, and oblique. </p><table> <tr><th>Font style</th><th>Description</th></tr> <tr><td>Normal</td><td>The characters in a normal, or roman, font are upright. +</td></tr> <tr><td>Italic +</td><td>The characters in an italic font are truly slanted and appear as they were designed. +</td></tr> <tr><td>Oblique</td><td>The characters in an oblique font are artificially slanted.</td></tr> </table><p>?</p><p>For Oblique, the slant is achieved by performing a shear transformation on the characters from a normal font. When a true italic font is not available on a computer or printer, an oblique style can be generated from the normal font and used to simulate an italic font. The following illustration shows the normal, italic, and oblique font styles for the Palatino Linotype font. Notice how the italic font style has a more flowing and visually appealing appearance than the oblique font style, which is simply created by skewing the normal font style version of the text.</p><p></p><strong>Note</strong>?? Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font {{API}} functions.? + + + <dd> <p>Font style : Normal.</p> </dd> + + + <dd> <p>Font style : Oblique. </p> </dd> + + + <dd> <p>Font style : Italic.</p> </dd> + + + + + <p>The informational string enumeration which identifies a string embedded in a font file.</p> + + + <dd> <p>Indicates the string containing the unspecified name {{ID}}.</p> </dd> + + + <dd> <p>Indicates the string containing the copyright notice provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing a version number.</p> </dd> + + + <dd> <p>Indicates the string containing the trademark information provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font manufacturer.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font designer.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font designer (with protocol, e.g., http://, ftp://).</p> </dd> + + + <dd> <p>Indicates the string containing the description of the font. This may also contain revision information, usage recommendations, history, features, and so on.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the {{URL}}, it can be used to register the font.</p> </dd> + + + <dd> <p>The full name of the font, like Arial Bold, from <em>name id 4</em> in the name table</p> </dd> + + + <dd> <p>Indicates the string containing the description of how the font may be legally used, or different example scenarios for licensed use.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} where additional licensing information can be found.</p> </dd> + + + <dd> <p>Indicates the string containing the {{GDI}}-compatible family name. Since {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names (e.g., "Arial", "Arial Narrow", "Arial Black").</p> </dd> + + + <dd> <p>Indicates the string containing a {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Indicates the string containing the family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Indicates the string containing the subfamily name preferred by the designer. This name is typically only present if it differs from the {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Contains sample text for display in font lists. This can be the font name or any other text that the designer thinks is the best example to display the font in.</p> </dd> + + + <dd> <p>The postscript name of the font, like GillSans-Bold, from <em>name id 6</em> in the name table.</p> </dd> + + + <dd> <p>The postscript {{CID}} findfont name, from <em>name id 20</em> in the name table</p> </dd> + + + + + <p>Specifies the type of DirectWrite factory object.</p> + <p>A DirectWrite factory object contains information about its internal state, such as font loader registration and cached font data. In most cases you should use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state information, thereby reducing memory usage. However, there are cases when it is desirable to reduce the impact of a component on the rest of the process, such as a plug-in from an untrusted source, by sandboxing and isolating it from the rest of the process components. In such cases, you should use an isolated factory for the sandboxed component.</p> + + + <dd> <p>Indicates that the DirectWrite factory is a shared factory and that it allows for the reuse of cached font data across multiple in-process components. Such factories also take advantage of cross process font caching components for better performance.</p> </dd> + + + <dd> <p>Indicates that the DirectWrite factory object is isolated. Objects created from the isolated factory do not interact with internal DirectWrite state from other components.</p> </dd> + + + + + <p> Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. +</p> + + + <dd> <p>The red, green, and blue color components of each pixel are assumed to occupy the same point.</p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with red on the left, green in the center, and blue on the right. This is the most common pixel geometry for {{LCD}} monitors. </p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with blue on the left, green in the center, and red on the right.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p> Specifies the direction in which reading progresses. </p><strong>Note</strong>??<strong>{{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}</strong> and <strong>{{DWRITE_READING_DIRECTION_BOTTOM_TO_TOP}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that reading progresses from left to right.</p> </dd> + + + <dd> <p>Indicates that reading progresses from right to left.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Indicates that reading progresses from top to bottom.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> Indicates that reading progresses from bottom to top.</p> </dd> + + + + + <p> Indicates the direction of how lines of text are placed relative to one another. </p> + + + <dd> <p>Specifies that text lines are placed from top to bottom.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from bottom to top.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from left to right.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from right to left.</p> </dd> + + + + + <p>Specifies the alignment of paragraph text along the reading direction axis, relative to the leading and trailing edge of the layout box.</p> + + + <dd> <p>The leading edge of the paragraph text is aligned to the leading edge of the layout box.</p> </dd> + + + <dd> <p>The trailing edge of the paragraph text is aligned to the trailing edge of the layout box.</p> </dd> + + + <dd> <p>The center of the paragraph text is aligned to the center of the layout box.</p> </dd> + + + <dd> <p>Align text to the leading side, and also justify text to fill the lines.</p> </dd> + + + + + <p> Specifies the alignment of paragraph text along the flow direction axis, relative to the top and bottom of the flow's layout box. </p> + + + <dd> <p>The top of the text flow is aligned to the top edge of the layout box.</p> </dd> + + + <dd> <p>The bottom of the text flow is aligned to the bottom edge of the layout box.</p> </dd> + + + <dd> <p>The center of the flow is aligned to the center of the layout box.</p> </dd> + + + + + <p> Specifies the word wrapping to be used in a particular multiline paragraph. </p><strong>Note</strong>??<strong>{{DWRITE_WORD_WRAPPING_EMERGENCY_BREAK}}</strong>, <strong>{{DWRITE_WORD_WRAPPING_WHOLE}} _WORD</strong>, and <strong>{{DWRITE_WORD_WRAPPING_CHARACTER}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that words are broken across lines to avoid text overflowing the layout box.</p> </dd> + + + <dd> <p>Indicates that words are kept within the same line even when it overflows the layout box. This option is often used with scrolling to reveal overflow text.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Words are broken across lines to avoid text overflowing the layout box. Emergency wrapping occurs if the word is larger than the maximum width. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> When emergency wrapping, only wrap whole words, never breaking words when the layout width is too small for even a single word. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Wrap between any valid character clusters.</p> </dd> + + + + + <p>The method used for line spacing in a text layout.</p> + <p>The line spacing method is set by using the <strong>SetLineSpacing</strong> method of the <strong>{{IDWriteTextFormat}}</strong> or <strong>{{IDWriteTextLayout}}</strong> interfaces. To get the current line spacing method of a text format or text layou use the <strong>GetLineSpacing</strong>.</p> + + + <dd> <p>Line spacing depends solely on the content, adjusting to accommodate the size of fonts and inline objects.</p> </dd> + + + <dd> <p>Lines are explicitly set to uniform spacing, regardless of the size of fonts and inline objects. This can be useful to avoid the uneven appearance that can occur from font fallback.</p> </dd> + + + <dd> <p>Line spacing and baseline distances are proportional to the computed values based on the content, the size of the fonts and inline objects. </p> <strong>Note</strong>??This value is only available on Windows?10 or later and it can be used with <strong>{{IDWriteTextLayout3::SetLineSpacing}}</strong>, but can not be used with <strong>{{IDWriteTextFormat::SetLineSpacing}}</strong>. ? </dd> + + + + + <p>Specifies the text granularity used to trim text overflowing the layout box.</p> + + + <dd> <p>No trimming occurs. Text flows beyond the layout width.</p> </dd> + + + <dd> <p>Trimming occurs at a character cluster boundary.</p> </dd> + + + <dd> <p>Trimming occurs at a word boundary.</p> </dd> + + + + + <p>A value that indicates the typographic feature of text supplied by the font.</p> + + + <dd> <p>The default.</p> </dd> + + + <dd> <p>Indicates that the font is displayed vertically.</p> </dd> + + + <dd> <p>Replaces normal figures with figures adjusted for vertical display.</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with an alternative form.</p> <p><strong>Equivalent OpenType tag:</strong> 'afrc' </p> </dd> + + + <dd> <p> Turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.</p> <p><strong>Equivalent OpenType tag:</strong> 'c2pc'</p> </dd> + + + <dd> <p>Turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text. </p> <p><strong>Equivalent OpenType tag:</strong> 'c2sc'</p> </dd> + + + <dd> <p> In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.</p> <p><strong>Equivalent OpenType tag:</strong> 'calt'</p> </dd> + + + <dd> <p> Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.</p> <p><strong>Equivalent OpenType tag:</strong> 'case'</p> </dd> + + + <dd> <p> To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called.</p> <p><strong>Equivalent OpenType tag:</strong> 'ccmp'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.</p> <p><strong>Equivalent OpenType tag:</strong> 'clig'</p> </dd> + + + <dd> <p> Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons. </p> <p><strong>Equivalent OpenType tag:</strong> 'cpsp'</p> </dd> + + + <dd> <p>Replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character. </p> <p><strong>Equivalent OpenType tag:</strong> 'cswh'</p> </dd> + + + <dd> <p> In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'curs'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user's preference.</p> <p><strong>Equivalent OpenType tag:</strong> 'dlig'</p> </dd> + + + <dd> <p> Replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. For example, a user would invoke this feature to replace kanji character U+5516 with U+555E. +</p> <p><strong>Equivalent OpenType tag:</strong> 'expt'</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with 'common' (diagonal) fractions.</p> <p><strong>Equivalent OpenType tag:</strong> 'frac'</p> </dd> + + + <dd> <p> Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a {{CJKV}} font, this may include "lower {{ASCII}}" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. For example, a user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions.</p> <p><strong>Equivalent OpenType tag:</strong> 'fwid'</p> </dd> + + + <dd> <p> Produces the half forms of consonants in Indic scripts. For example, in Hindi (Devanagari script), the conjunct {{KKa}}, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form. </p> <p><strong>Equivalent OpenType tag:</strong> 'half'</p> </dd> + + + <dd> <p> Produces the halant forms of consonants in Indic scripts. For example, in Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form.</p> <p><strong>Equivalent OpenType tag:</strong> 'haln'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'halt'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. </p> <p><strong>Equivalent OpenType tag:</strong> 'hist'</p> </dd> + + + <dd> <p> Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color.</p> <p><strong>Equivalent OpenType tag:</strong> 'hkna'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.</p> <p><strong>Equivalent OpenType tag:</strong> 'hlig'</p> </dd> + + + <dd> <p> Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many {{CJKV}} fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents.</p> <p><strong>Equivalent OpenType tag:</strong> 'hwid'</p> </dd> + + + <dd> <p> Used to access the {{JIS}} X 0212-1990 glyphs for the cases when the {{JIS}} X 0213:2004 form is encoded. The {{JIS}} X 0212-1990 (aka, "Hojo Kanji") and {{JIS}} X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both {{JIS}} X 0212-1990 and {{JIS}} X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that {{JIS}} X 0213:2004 forms be the preferred encoded form.</p> <p><strong>Equivalent OpenType tag:</strong> 'hojo'</p> </dd> + + + <dd> <p> The National Language Council ({{NLC}}) of Japan has defined new glyph shapes for a number of {{JIS}} characters, which were incorporated into {{JIS}} X 0213:2004 as new prototypical forms. The 'jp04' feature is A subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of {{JIS}} X 0213:2004.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp04'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} C 6226-1978 ({{JIS78}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp78'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} X 0208-1983 ({{JIS83}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp83'</p> </dd> + + + <dd> <p> Replaces Japanese glyphs from the {{JIS78}} or {{JIS83}} specifications with the corresponding forms from the {{JIS}} X 0208-1990 ({{JIS90}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp90'</p> </dd> + + + <dd> <p> Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.</p> <p><strong>Equivalent OpenType tag:</strong> 'kern'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.</p> <p><strong>Equivalent OpenType tag:</strong> 'liga'</p> </dd> + + + <dd> <p>Changes selected figures from oldstyle to the default lining form. For example, a user may invoke this feature in order to get lining figures, which fit better with all-capital text. This feature overrides results of the Oldstyle Figures feature (onum).</p> <p><strong>Equivalent OpenType tag:</strong> 'lnum'</p> </dd> + + + <dd> <p> Enables localized forms of glyphs to be substituted for default forms. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct. </p> <p><strong>Equivalent OpenType tag:</strong> 'locl'</p> </dd> + + + <dd> <p> Positions mark glyphs with respect to base glyphs. For example, in Arabic script positioning the Hamza above the Yeh.</p> <p><strong>Equivalent OpenType tag: </strong> 'mark'</p> </dd> + + + <dd> <p> Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).</p> <p><strong>Equivalent OpenType tag:</strong> 'mgrk'</p> </dd> + + + <dd> <p> Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. For example, in Arabic, the ligaturised mark Ha with Hamza above it can also be obtained by positioning these marks relative to one another.</p> <p><strong>Equivalent OpenType tag:</strong> 'mkmk'</p> </dd> + + + <dd> <p> Replaces default glyphs with various notational forms (such as glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.</p> <p><strong>Equivalent OpenType tag:</strong> 'nalt'</p> </dd> + + + <dd> <p> Used to access glyphs made from glyph shapes defined by the National Language Council ({{NLC}}) of Japan for a number of {{JIS}} characters in 2000. </p> <p><strong>Equivalent OpenType tag:</strong> 'nlck'</p> </dd> + + + <dd> <p> Changes selected figures from the default lining style to oldstyle form. For example, a user may invoke this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. This feature overrides results of the Lining Figures feature (lnum).</p> <p><strong>Equivalent OpenType tag:</strong> 'onum'</p> </dd> + + + <dd> <p> Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.</p> <p><strong>Equivalent OpenType tag:</strong> 'ordn'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs ({{GPOS}}, not {{GSUB}} feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated).</p> <p><strong>Equivalent OpenType tag:</strong> 'palt'</p> </dd> + + + <dd> <p>Turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and it is referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia). </p> <p><strong>Equivalent OpenType tag:</strong> 'pcap'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'pnum'</p> </dd> + + + <dd> <p> Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in {{CJKV}} fonts, but may also be used for Kana in Japanese fonts.</p> <p><strong>Equivalent OpenType tag:</strong> 'pwid'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'qwid'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to ensure correct glyph formation. </p> <p><strong>Equivalent OpenType tag:</strong> 'rlig'</p> </dd> + + + <dd> <p> Identifies glyphs in the font which have been designed for "ruby", from the old typesetting term for four-point-sized type. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. </p> <p><strong>Equivalent OpenType tag:</strong> 'ruby'</p> </dd> + + + <dd> <p> Replaces the default forms with the stylistic alternates. Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. </p> <p><strong>Equivalent OpenType tag:</strong> 'salt'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors.</p> <p><strong>Equivalent OpenType tag:</strong> 'sinf'</p> </dd> + + + <dd> <p> Turns lowercase characters into small capitals. This corresponds to the common {{SC}} font layout. It is generally used for display lines set in Large &amp; small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included.</p> <p><strong>Equivalent OpenType tag:</strong> 'smcp'</p> </dd> + + + <dd> <p> Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'smpl'</p> </dd> + + + <dd> <p> In addition to, or instead of, stylistic alternatives of individual glyphs (see 'salt' feature), some fonts may contain sets of stylistic variant glyphs corresponding to portions of the character set, such as multiple variants for lowercase letters in a Latin font. Glyphs in stylistic sets may be designed to harmonise visually, interract in particular ways, or otherwise work together. Examples of fonts including stylistic sets are Zapfino Linotype and Adobe's Poetica. Individual features numbered sequentially with the tag name convention 'ss01' 'ss02' 'ss03' . 'ss20' provide a mechanism for glyphs in these sets to be associated via {{GSUB}} lookup indexes to default forms and to each other, and for users to select from available stylistic sets</p> <p><strong>Equivalent OpenType tag:</strong> 'ss01'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss02'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss03'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss04'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss05'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss06'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss07'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss08'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss09'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss10'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss11'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss12'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss13'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss14'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss15'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss16'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss17'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss18'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss19'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss20'</p> </dd> + + + <dd> <p> May replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement.</p> <p><strong>Equivalent OpenType tag:</strong> 'subs'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles).</p> <p><strong>Equivalent OpenType tag:</strong> 'sups'</p> </dd> + + + <dd> <p> Replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character.</p> <p><strong>Equivalent OpenType tag:</strong> 'swsh'</p> </dd> + + + <dd> <p> Replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes.</p> <p><strong>Equivalent OpenType tag:</strong> 'titl'</p> </dd> + + + <dd> <p> Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts).</p> <p><strong>Equivalent OpenType tag:</strong> 'tnam'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'tnum'</p> </dd> + + + <dd> <p> Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'trad'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'twid'</p> </dd> + + + <dd> <p> Maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. +</p> <p><strong>Equivalent OpenType tag:</strong> 'unic'</p> </dd> + + + <dd> <p>Allows the user to change from the default 0 to a slashed form. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. </p> <p><strong>Equivalent OpenType tag:</strong> 'zero'</p> </dd> + + + + + <p>Indicates additional shaping requirements for text.</p> + + + <dd> <p>Indicates that there is no additional shaping requirements for text. Text is shaped with the writing system default behavior.</p> </dd> + + + <dd> <p>Indicates that text should leave no visible control or format control characters.</p> </dd> + + + + + <p> Indicates the condition at the edges of inline object or text used to determine line-breaking behavior.</p> + + + <dd> <p> Indicates whether a break is allowed by determining the condition of the neighboring text span or inline object.</p> </dd> + + + <dd> <p> Indicates that a line break is allowed, unless overruled by the condition of the neighboring text span or inline object, either prohibited by a "may not break" condition or forced by a "must break" condition. </p> </dd> + + + <dd> <p> Indicates that there should be no line break, unless overruled by a "must break" condition from the neighboring text span or inline object. </p> </dd> + + + <dd> <p> Indicates that the line break must happen, regardless of the condition of the adjacent text span or inline object. </p> </dd> + + + + + <p>Specifies how to apply number substitution on digits and related punctuation.</p> + + + <dd> <p>Specifies that the substitution method should be determined based on the {{LOCALE_IDIGITSUBSTITUTION}} value of the specified text culture.</p> </dd> + + + <dd> <p>If the culture is Arabic or Persian, specifies that the number shapes depend on the context. Either traditional or nominal number shapes are used, depending on the nearest preceding strong character or (if there is none) the reading direction of the paragraph.</p> </dd> + + + <dd> <p>Specifies that code points 0x30-0x39 are always rendered as nominal numeral shapes (ones of the European number), that is, no substitution is performed.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the national number shapes as specified by the {{LOCALE_SNATIVEDIGITS}} value of the specified text culture.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the traditional shapes for the specified culture. For most cultures, this is the same as NativeNational. However, NativeNational results in Latin numbers for some Arabic cultures, whereasDWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL results in arabic numbers for all Arabic cultures.</p> </dd> + + + + + <p>Identifies a type of alpha texture.</p> + <p>An alpha texture is a bitmap of alpha values, each representing opacity of a pixel or subpixel.</p> + + + <dd> <p>Specifies an alpha texture for aliased text rendering (that is, each pixel is either fully opaque or fully transparent), with one byte per pixel.</p> </dd> + + + <dd> <p>Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and one byte per pixel in the vertical dimension.</p> </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + + + <dd> <p>The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.</p> </dd> + + + <dd> <p>The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of <strong>ascent</strong>, <strong>descent</strong>, and <strong>lineGap</strong>. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.</p> </dd> + + + <dd> <p>The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.</p> </dd> + + + <dd> <p>The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.</p> </dd> + + + <dd> <p>The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.</p> </dd> + + + <dd> <p>The suggested underline thickness value of the font face in font design units.</p> </dd> + + + <dd> <p>The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.</p> </dd> + + + <dd> <p>The suggested strikethrough thickness value of the font face in font design units.</p> </dd> + + + + + <p>Specifies the metrics of an individual glyph. The units depend on how the metrics are obtained.</p> + + + <dd> <p>Specifies the X offset from the glyph origin to the left edge of the black box. The glyph origin is the current horizontal writing position. A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').</p> </dd> + + + <dd> <p>Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.</p> </dd> + + + <dd> <p>Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally. The value is negative when the right edge of the black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the vertical offset from the vertical origin to the top of the black box. Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.</p> </dd> + + + <dd> <p>Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically. Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different. Its Y coordinate is specified by <strong>verticalOriginY</strong> value, and its X coordinate is half the <strong>advanceWidth</strong> to the right of the horizontal origin.</p> </dd> + + + <dd> <p>Specifies the vertical distance from the bottom edge of the black box to the advance height. This is positive when the bottom edge of the black box is within the layout box, or negative when the bottom edge of black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system. The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing and the top (that is, yMax) of the glyph's bounding box.</p> </dd> + + + + + <p>The optional adjustment to a glyph's position.</p> + <p>An glyph offset changes the position of a glyph without affecting the pen position. Offsets are in logical, pre-transform units.</p> + + + <dd> <p>The offset in the advance direction of the run. A positive advance offset moves the glyph to the right (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.</p> </dd> + + + <dd> <p>The offset in the ascent direction, that is, the direction ascenders point. A positive ascender offset moves the glyph up (in pre-transform coordinates). A negative ascender offset moves the glyph down.</p> </dd> + + + + + <p>The <strong>{{DWRITE_MATRIX}}</strong> structure specifies the graphics transform to be applied to rendered glyphs.</p> + + + <dd> <p>A value indicating the horizontal scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical shear / sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shear / negative sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shift (always orthogonal regardless of rotation).</p> </dd> + + + <dd> <p>A value indicating the vertical shift (always orthogonal regardless of rotation.)</p> </dd> + + + + + <p>Specifies a range of text positions where format is applied in the text represented by an <strong>{{IDWriteTextLayout}}</strong> object.</p> + + + + <p>Specifies properties used to identify and execute typographic features in the current font face.</p> + <p>A non-zero value generally enables the feature execution, while the zero value disables it. A feature requiring a selector uses this value to indicate the selector index.</p><p>The OpenType standard provides access to typographic features available in the font by means of a feature tag with the associated parameters. The OpenType feature tag is a 4-byte identifier of the registered name of a feature. For example, the 'kern' feature name tag is used to identify the 'Kerning' feature in OpenType font. Similarly, the OpenType feature tag for 'Standard Ligatures' and 'Fractions' is 'liga' and 'frac' respectively. Since a single run can be associated with more than one typographic features, the Text String {{API}} accepts typographic settings for a run as a list of features and are executed in the order they are specified.</p><p>The value of the tag member represents the OpenType name tag of the feature, while the param value represents additional parameter for the execution of the feature referred by the tag member. Both <strong>nameTag</strong> and <strong>parameter</strong> are stored as little endian, the same convention followed by {{GDI}}. Most features treat the Param value as a binary value that indicates whether to turn the execution of the feature on or off, with it being off by default in the majority of cases. Some features, however, treat this value as an integral value representing the integer index to the list of alternate results it may produce during the execution; for instance, the feature 'Stylistic Alternates' or 'salt' uses the <strong>parameter</strong> value as an index to the list of alternate substituting glyphs it could produce for a specified glyph. </p> + + + <dd> <p>The feature OpenType name identifier.</p> </dd> + + + <dd> <p>The execution parameter of the feature.</p> </dd> + + + + + <p>Contains a set of typographic features to be applied during text shaping.</p> + + + <dd> <p>A reference to a structure that specifies properties used to identify and execute typographic features in the font.</p> </dd> + + + <dd> <p>A value that indicates the number of features being applied to a font face.</p> </dd> + + + + + <p>Specifies the trimming option for text overflowing the layout box. </p> + + + <dd> <p>A value that specifies the text granularity used to trim text overflowing the layout box.</p> </dd> + + + <dd> <p>A character code used as the delimiter that signals the beginning of the portion of text to be preserved. Text starting from the Nth occurence of the delimiter (where N equals delimiterCount) counting backwards from the end of the text block will be preserved. For example, given the text is a path like c:\A\B\C\D\file.txt and delimiter equal to '\' and delimiterCount equal to 1, the file.txt portion of the text would be preserved. Specifying a delimiterCount of 2 would preserve D\file.txt. </p> </dd> + + + <dd> <p>The delimiter count, counting from the end of the text, to preserve text from.</p> </dd> + + + + + <p>Stores the association of text and its writing system script, as well as some display attributes.</p> + + + <dd> <p>The zero-based index representation of writing system script.</p> </dd> + + + <dd> <p>A value that indicates additional shaping requirement of text.</p> </dd> + + + + + <p>Line breakpoint characteristics of a character.</p> + + + <dd> <p>Indicates a breaking condition before the character.</p> </dd> + + + <dd> <p>Indicates a breaking condition after the character.</p> </dd> + + + <dd> <p>Indicates that the character is some form of whitespace, which may be meaningful for justification.</p> </dd> + + + <dd> <p>Indicates that the character is a soft hyphen, often used to indicate hyphenation points inside words.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph is shaped alone.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph has justification applied.</p> </dd> + + + <dd> <p>Indicates that the glyph is the start of a cluster.</p> </dd> + + + <dd> <p>Indicates that the glyph is a diacritic mark.</p> </dd> + + + <dd> <p>Indicates that the glyph is a word boundary with no visible space.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs. All coordinates are in device independent pixels ({{DIPs}}). </p> + + + <dd> <p>The physical font face object to draw with.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIPs}} (equals 1/96 inch), not points.</p> </dd> + + + <dd> <p>The number of glyphs in the glyph run.</p> </dd> + + + <dd> <p>A reference to an array of indices to render for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph advance widths for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph offsets for the glyph run.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying <strong>isSideways</strong> = true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The implicit resolved bidi level of the run. Odd levels indicate right-to-left languages like Hebrew and Arabic, while even levels indicate left-to-right languages like English and Japanese (when written horizontally). For right-to-left languages, the text origin is on the right, and text should be drawn to the left.</p> </dd> + + + + + <p>Contains additional properties related to those in <strong>{{DWRITE_GLYPH_RUN}}</strong>.</p> + + + + <p>Contains information about the width, thickness, offset, run height, reading direction, and flow direction of an underline. </p> + <p>All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the underline, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the underline, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the underline from the baseline. A positive offset represents a position below the baseline (away from the text) and a negative offset is above (toward the text).</p> </dd> + + + <dd> <p>A value that indicates the height of the tallest run where the underline is applied.</p> </dd> + + + <dd> <p>A value that indicates the reading direction of the text associated with the underline. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>A value that indicates the flow direction of the text associated with the underline. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters which contains the locale of the text that the underline is being drawn under. For example, in vertical text, the underline belongs on the left for Chinese but on the right for Japanese. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information regarding the size and placement of strikethroughs. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the strikethrough, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the strikethrough, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the strikethrough from the baseline. A positive offset represents a position below the baseline and a negative offset is above. Typically, the offset will be negative.</p> </dd> + + + <dd> <p>Reading direction of the text associated with the strikethrough. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>Flow direction of the text associated with the strikethrough. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters containing the locale of the text that is the strikethrough is being drawn over. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + + + <p>Contains information about a glyph cluster.</p> + + + <dd> <p>The total advance width of all glyphs in the cluster.</p> </dd> + + + <dd> <p>The number of text positions in the cluster.</p> </dd> + + + <dd> <p>Indicates whether a line can be broken right after the cluster.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a whitespace character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a newline character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a soft hyphen character.</p> </dd> + + + <dd> <p>Indicates whether the cluster is read from right to left.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains properties describing the geometric measurement of an +application-defined inline object.</p> + + + <dd> <p>The width of the inline object.</p> </dd> + + + <dd> <p>The height of the inline object.</p> </dd> + + + <dd> <p>The distance from the top of the object to the point where it is lined up with the adjacent text. If the baseline is at the bottom, then <strong>baseline</strong> simply equals <strong>height</strong>.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the object is to be placed upright or alongside the text baseline for vertical text.</p> </dd> + + + + + <p>Indicates how much any visible {{DIPs}} (device independent pixels) overshoot each side of the layout or inline objects.</p><p>Positive overhangs indicate that the visible area extends outside the layout box or inline object, while negative values mean there is whitespace inside. The returned values are unaffected by rendering transforms or pixel snapping. Additionally, they may not exactly match the final target's pixel bounds after applying grid fitting and hinting.</p> + + + <dd> <p>The distance from the left-most visible {{DIP}} to its left-alignment edge.</p> </dd> + + + <dd> <p>The distance from the top-most visible {{DIP}} to its top alignment edge.</p> </dd> + + + <dd> <p>The distance from the right-most visible {{DIP}} to its right-alignment edge.</p> </dd> + + + <dd> <p>The distance from the bottom-most visible {{DIP}} to its lower-alignment edge.</p> </dd> + + + + + <p>Describes the region obtained by a hit test.</p> + + + <dd> <p>The first text position within the hit region. </p> </dd> + + + <dd> <p>The number of text positions within the hit region. </p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The width of the hit region.</p> </dd> + + + <dd> <p>The height of the hit region.</p> </dd> + + + <dd> <p>The <strong>{{BIDI}} level</strong> of the text positions within the hit region.</p> </dd> + + + <dd> <p>true if the hit region contains text; otherwise, false.</p> </dd> + + + <dd> <p>true if the text range is trimmed; otherwise, false.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Releases a fragment from a file. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the client-defined context of a font fragment returned from <strong>ReadFileFragment</strong>.</p> </dd> + + + + + <p> Obtains the total size of a file. </p> + <p> Implementing <strong>GetFileSize</strong>() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the total size of the file.</p> </dd> + + + + + <p> Obtains the last modified time of the file. </p> + <p>The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 ({{UTC}}).</p> </dd> + + + + + <p> Handles loading font file resources of a particular type from a font file reference key into a font file stream object. </p> + <p>The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file stream object that encapsulates an open file resource. </p> + <p>The resource is closed when the last reference to <em>fontFileStream</em> is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by <em> fontFileReferenceKeySize</em>.</p> </dd> + + + <dd> <p>The size of font file reference key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFontFileStream}}</strong> object.</p> </dd> + + + + + <p>A built-in implementation of the <strong>{{IDWriteFontFileLoader}}</strong> interface, that operates on local font files +and exposes local font file information from the font file reference key. Font file references created using <strong>CreateFontFileReference</strong> use this font file loader.</p> + + + + <p>Obtains the length of the absolute file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>Size of font file reference key in bytes.</p> </dd> + + + <dd> <p>Length of the file path string, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + + + <p>Obtains the absolute font file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The character array that receives the local file path.</p> </dd> + + + <dd> <p>The length of the file path character array.</p> </dd> + + + + + <p>Obtains the last write time of the file from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The time of the last font file modification.</p> </dd> + + + + + <p> Represents a font file. Applications such as font managers or font viewers can call <strong>{{IDWriteFontFile::Analyze}}</strong> to find out if a particular file is a font file, and whether it is a font type that is supported by the font system.</p> + + + + <p> Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font file reference key. Note that the reference value is only valid until the font file object it is obtained from is released. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font file reference key in bytes. This parameter is passed uninitialized.</p> </dd> + + + + + <p> Obtains the file loader associated with a font file object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the font file loader associated with the font file object.</p> </dd> + + + + + <p> Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system. </p> + <strong>Important</strong>??Certain font file types are recognized, but not supported by the font system. For example, the font system will recognize a file as a Type 1 font file but will not be able to construct a font face object from it. In such situations, <strong>Analyze</strong> will set <em>isSupportedFontType</em> output parameter to <strong>{{FALSE}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the font type is supported by the font system; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font file. Note that even if <em> isSupportedFontType</em> is <strong>{{FALSE}}</strong>, the <em>fontFileType</em> value may be different from <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font face. If <em>fontFileType</em> is not equal to <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>, then that can be constructed from the font file. </p> </dd> + + + <dd> <p>When this method returns, contains the number of font faces contained in the font file.</p> </dd> + + + + + <p> Represents text rendering settings such as ClearType level, enhanced contrast, and gamma correction for glyph rasterization and filtering.</p><p>An application typically obtains a rendering parameters object by calling the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p> + + + + <p>Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + <p>The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.</p> + <p>Returns the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + + + + <p>Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.</p> + <p>Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.</p> + <p>Returns the amount of contrast enhancement. Valid values are greater than or equal to zero.</p> + + + + <p>Gets the ClearType level of the rendering parameters object. </p> + <p>The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)</p> + <p>The ClearType level of the rendering parameters object.</p> + + + + <p>Gets the pixel geometry of the rendering parameters object.</p> + <p> A value that indicates the type of pixel geometry used in the rendering parameters object.</p> + + + + <p>Gets the rendering mode of the rendering parameters object.</p> + <p>By default, the rendering mode is initialized to {{DWRITE_RENDERING_MODE_DEFAULT}}, which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the <strong>{{IDWriteFontFace::GetRecommendedRenderingMode}}</strong> method.</p> + <p>A value that indicates the rendering mode of the rendering parameters object.</p> + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p> Obtains the file format type of a font face. </p> + <p>A value that indicates the type of format for the font face (such as Type 1, TrueType, vector, or bitmap).</p> + + + + <p> Obtains the font files representing a font face. </p> + <p>The <strong>{{IDWriteFontFace::GetFiles}}</strong> method should be called twice. The first time you call <strong>GetFiles</strong><em>fontFiles</em> should be <strong>{{NULL}}</strong>. When the method returns, <em>numberOfFiles</em> receives the number of font files that represent the font face.</p><p>Then, call the method a second time, passing the <em>numberOfFiles</em> value that was output the first call, and a non-null buffer of the correct size to store the <strong>{{IDWriteFontFile}}</strong> references.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <em>fontFiles</em> is <strong>{{NULL}}</strong>, receives the number of files representing the font face. Otherwise, the number of font files being requested should be passed. See the Remarks section below for more information.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a user-provided array that stores references to font files representing the font face. This parameter can be <strong>{{NULL}}</strong> if the user wants only the number of files representing the font face. This {{API}} increments reference count of the font file references returned according to {{COM}} conventions, and the client should release them when finished.</p> </dd> + + + + + <p> Obtains the index of a font face in the context of its font files. </p> + <p>The zero-based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value is zero.</p> + + + + <p> Obtains the algorithmic style simulation flags of a font face. </p> + <p>Font face simulation flags for algorithmic means of making text bold or italic.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p>Returns <strong>{{TRUE}}</strong> if the font is a symbol font, otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, a?<strong>{{DWRITE_FONT_METRICS}}</strong> structure that holds metrics (such as ascent, descent, or cap height) for the current font face element. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Obtains the number of glyphs in the font face. </p> + <p>The number of glyphs in the font face.</p> + + + + <p> Obtains ideal (resolution-independent) glyph metrics in font design units. </p> + <p>Design glyph metrics are used for glyph positioning.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains an array of {{DWRITE_GLYPH_METRICS}} structures. <em>glyphMetrics</em> must be initialized with an empty buffer that contains at least as many elements as <em>glyphCount</em>. The metrics returned by this function are in font design units.</p> </dd> + + + <dd> <p>Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation</p> </dd> + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p> Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the <strong>{{IDWriteFontFileStream}}</strong> interface implemented by the font file loader. </p> + <p> The context for the same tag may be different for each call, so each one must be held and released separately. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases the table obtained earlier from <strong>TryGetFontTable</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Computes the outline of a run of glyphs by calling back to the outline sink interface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of glyph indices. The glyphs are in logical order and the advance direction depends on the <em>isRightToLeft</em> parameter. The array must be allocated and be able to contain the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph advances in {{DIPs}}. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. <em>glyphAdvances</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. <em>glyphOffsets</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of glyphs in the run.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the ascender of the glyph runs alongside the baseline. If <strong>{{FALSE}}</strong>, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have <em>isSideways</em> set to <strong>{{FALSE}}</strong>.</p> <p>A client can render a vertical run by setting <em>isSideways</em> to <strong>{{TRUE}}</strong> and rotating the resulting geometry 90 degrees to the right using a transform. The <em>isSideways</em> and <em>isRightToLeft</em> parameters cannot both be true.</p> </dd> + + + <dd> <p>The visual order of the glyphs. If this parameter is <strong>{{FALSE}}</strong>, then glyph advances are from left to right. If <strong>{{TRUE}}</strong>, the advance direction is right to left. By default, the advance direction is left to right.</p> </dd> + + + <dd> <p>A reference to the interface that is called back to perform outline drawing operations.</p> </dd> + + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>A reference to an object that contains rendering settings such as gamma level, enhanced contrast, and ClearType level. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRIC}}</strong>S structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Obtains glyph metrics in font design units with the return values compatible with what {{GDI}} would produce.</p> + <p>Standard <strong>{{HRESULT}}</strong> error code. If any of the input glyph indices are outside of the valid glyph index range for the current font face, <strong>{{E_INVALIDARG}}</strong> will be returned.</p> + + + <dd> <p>The ogical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>When set to <strong>{{FALSE}}</strong>, the metrics are the same as the metrics of {{GDI}} aliased text. When set to <strong>{{TRUE}}</strong>, the metrics are the same as the metrics of text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>.</p> </dd> + + + <dd> <p>An array of glyph indices for which to compute the metrics.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_GLYPH_METRICS}}</strong> structures filled by this function. The metrics are in font design units.</p> </dd> + + + <dd> <p>A {{BOOL}} value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation.</p> </dd> + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Gets an object which represents the set of installed fonts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the system font collection object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + <dd> <p>If this parameter is nonzero, the function performs an immediate check for changes to the set of installed fonts. If this parameter is <strong>{{FALSE}}</strong>, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify <strong>{{TRUE}}</strong> if it has itself just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p> Creates a font collection using a custom font collection loader. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined font collection loader, which must have been previously registered using <strong>RegisterFontCollectionLoader</strong>.</p> </dd> + + + <dd> <p>The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of the collection key.</p> </dd> + + + <dd> <p>Contains an address of a reference to the system font collection object if the method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p>Registers a custom font collection loader with the factory object. </p> + <p>This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontCollectionLoader}}</strong> object to be registered.</p> </dd> + + + + + <p> Unregisters a custom font collection loader that was previously registered using <strong>RegisterFontCollectionLoader</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a font file reference object from a local font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided <em>filePath</em> doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided <em>lastWriteTime</em> doesn't match the file on the disk.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font file reference object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a reference to an application-specific font file resource. </p> + <p> This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. <em>fontFileReferenceKey</em> has to be unique only in the scope of the <em>fontFileLoader</em> used in this call. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font file reference key that uniquely identifies the font file resource during the lifetime of <em>fontFileLoader</em>.</p> </dd> + + + <dd> <p>The size of the font file reference key in bytes.</p> </dd> + + + <dd> <p>The font file loader that will be used by the font system to load data from the file identified by <em>fontFileReferenceKey</em>.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font file object when this method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that represents a font face. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the type of file format of the font face.</p> </dd> + + + <dd> <p>The number of font files, in element count, required to represent the font face.</p> </dd> + + + <dd> <p>A font file object representing the font face. Because <strong>{{IDWriteFontFace}}</strong> maintains its own references to the input font file objects, you may release them after this call.</p> </dd> + + + <dd> <p>The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the How to Add Support for Multiple Monitors topic.</p> + <p>Standard {{HRESULT}} error code.</p> + + + + <p> Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle for the specified monitor.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the rendering parameters object created by this method.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p> Registers a font file loader with DirectWrite. </p> + <p> This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontFileLoader}}</strong> object for a particular file resource type.</p> </dd> + + + + + <p> Unregisters a font file loader that was previously registered with the DirectWrite font system using <strong>RegisterFontFileLoader</strong>. </p> + <p> This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a text format object used for text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the name of the font family</p> </dd> + + + <dd> <p>A reference to a font collection object. When this is <strong>{{NULL}}</strong>, indicates the system font collection.</p> </dd> + + + <dd> <p>A value that indicates the font weight for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font style for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font stretch for the text object created by this method.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIP}} ("device-independent pixel") units. A {{DIP}} equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of characters that contains the locale name.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created text format object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a typography object for use in a text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a newly created typography object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that is used for interoperability with {{GDI}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to a {{GDI}} interop object if successful, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The number of characters in the string.</p> </dd> + + + <dd> <p>A reference to an object that indicates the format to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the resultant text layout object.</p> </dd> + + + + + <p> Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. </p> + <p>The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired <strong>CreateTextLayout</strong> should be used instead.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The length of the string, in character count.</p> </dd> + + + <dd> <p>The text formatting object to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} device <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} device <em>pixelsPerDip</em> is 1.25 (120/96).</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per {{DIP}}.</p> </dd> + + + <dd> <p> Instructs the text layout to use the same metrics as {{GDI}} bi-level text when set to <strong>{{FALSE}}</strong>. When set to <strong>{{TRUE}}</strong>, instructs the text layout to use the same metrics as text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>. </p> </dd> + + + <dd> <p>When this method returns, contains an address to the reference of the resultant text layout object.</p> </dd> + + + + + <p> Creates an inline object for trimming, using an ellipsis as the omission sign. </p> + <p>The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing <strong>{{IDWriteInlineObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A text format object, created with <strong>CreateTextFormat</strong>, used for text layout.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the omission (that is, ellipsis trimming) sign created by this method.</p> </dd> + + + + + <p> Returns an interface for performing text analysis. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created text analyzer object.</p> </dd> + + + + + <p> Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use {{NLS}} defaults for the given culture instead). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies how to apply number substitution on digits and related punctuation.</p> </dd> + + + <dd> <p>The name of the locale to be used in the <em>numberSubstitution</em> object.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether to ignore user overrides.</p> </dd> + + + <dd> <p>When this method returns, contains an address to a reference to the number substitution object created by this method.</p> </dd> + + + + + <p>Specifies the mode used by a <strong>WriteBufferImmediate</strong> operation.</p> + + + <dd> <p>The write operation behaves the same as normal copy-write operations.</p> </dd> + + + <dd> <p>The write operation is guaranteed to occur after all preceding commands in the command stream have started, including previous <strong>WriteBufferImmediate</strong> operations.</p> </dd> + + + <dd> <p>The write operation is deferred until all previous commands in the command stream have completed through the {{GPU}} pipeline, including previous <strong>WriteBufferImmediate</strong> operations. Write operations that specify <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT}}</strong> don't block subsequent operations from starting. If there are no previous operations in the command stream, then the write operation behaves as if <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN}}</strong> was specified.</p> </dd> + + + + + <p> Creates a glyph run analysis object, which encapsulates information used to render a glyph run. </p> + <p>The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the properties of the glyph run (font face, advances, and so on).</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1.25.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the <em>emSize</em> and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline).</p> </dd> + + + <dd> <p>Specifies the measuring mode to use with glyphs.</p> </dd> + + + <dd> <p>The horizontal position (X-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position (Y-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created glyph run analysis object.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Gets a reference to the current font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, the address of a reference to the newly created <strong>{{IDWriteFontFile}}</strong> object.</p> </dd> + + + + + <p> Used to construct a collection of fonts given a particular type of key. </p> + <p>The font collection loader interface is recommended to be implemented by a singleton object. Note that font collection loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file enumerator object that encapsulates a collection of font files. The font system calls back to this interface to create a font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IDWriteFactory}}</strong> object that was used to create the current font collection.</p> </dd> + + + <dd> <p>A font collection key that uniquely identifies the collection of font files within the scope of the font collection loader being used. The buffer allocated for this key must be at least the size, in bytes, specified by <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size of the font collection key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font file enumerator.</p> </dd> + + + + + <p> Represents a collection of strings indexed by locale name.</p> + <p>The set of strings represented by an <strong>{{IDWriteLocalizedStrings}}</strong> are indexed by a zero based <em>{{UINT32}}</em> number that maps to a locale. The numeric index for a specific locale is retreived by using the <strong>FindLocaleName</strong> method.</p><p>A common use for the <strong>{{IDWriteLocalizedStrings}}</strong> interface is to hold a list of localized font family names created by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method. The following example shows how to get the family name for the "en-us" locale.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + + + + <p> Gets the number of language/string pairs. </p> + <p>The number of language/string pairs.</p> + + + + <p> Gets the zero-based index of the locale name/string pair with the specified locale name. </p> + <p>Note that if the locale name does not exist, the return value is a success and the <em>exists</em> parameter is <strong>{{FALSE}}</strong>. If you are getting the font family name for a font and the specified locale name does not exist, one option is to set the index to 0 as shown below. There is always at least one locale for a font family.</p><pre>{{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; +</pre> + <p>If the specified locale name does not exist, the return value is <strong>{{S_OK}}</strong>, but <em>index</em> is <strong>{{UINT_MAX}}</strong> and <em>exists</em> is <strong>{{FALSE}}</strong>. +</p> + + + <dd> <p>A null-terminated array of characters containing the locale name to look for.</p> </dd> + + + <dd> <p>The zero-based index of the locale name/string pair. This method initializes <em>index</em> to <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the locale name exists; otherwise, <strong>{{FALSE}}</strong>. This method initializes <em>exists</em> to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the locale name with the specified index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the length in characters of the locale name, not including the null terminator.</p> </dd> + + + + + <p> Copies the locale name with the specified index to the specified array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains a character array, which is null-terminated, that receives the locale name from the language/string pair. The buffer allocated for this array must be at least the size of <em>size</em>, in element count.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the string with the specified index. </p> + <p>Use <strong>GetStringLength</strong> to get the string length before calling the <strong>{{IDWriteLocalizedStrings::GetString}}</strong> method, as shown in the following code.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A zero-based index of the language/string pair.</p> </dd> + + + <dd> <p>The length in characters of the string, not including the null terminator, from the language/string pair.</p> </dd> + + + + + <p> Copies the string with the specified index to the specified array. </p> + <p>The string returned must be allocated by the caller. You can get the size of the string by using the <strong>GetStringLength</strong> method prior to calling <strong>GetString</strong>, as shown in the following example.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the language/string pair to be examined.</p> </dd> + + + <dd> <p>The null terminated array of characters that receives the string from the language/string pair. The buffer allocated for this array should be at least the size of <em>size</em>. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + + + <p>Represents a family of related fonts.</p> + <p>A font family is a set of fonts that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include style, such as italic, and weight, such as bold. The following illustration shows examples of fonts that are members of the "Times New Roman" font family.</p><p>An <strong>{{IDWriteFontFamily}}</strong> object can be retrieved from a font collection using the <strong>{{IDWriteFontCollection::GetFontFamily}}</strong> method shown in the following example. <strong>GetFontFamily</strong> takes a <strong>{{UINT32}}</strong> index and returns the font family for the font at that index.</p><pre>{{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); +} +</pre><p>The font family name is used to specify the font family for text layout and text format objects. You can get a list of localized font family names from an <strong>{{IDWriteFontFamily}}</strong> object in the form of an <strong>{{IDWriteLocalizedStrings}}</strong> object by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method, as shown in the following code.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} +</pre> + + + + <p> Creates a localized strings object that contains the family names for the font family, indexed by locale name. </p> + <p> The following code example shows how to get the font family name from a <strong>{{IDWriteFontFamily}}</strong> object.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The address of a reference to the newly created <strong>{{IDWriteLocalizedStrings}}</strong> object.</p> </dd> + + + + + <p> Gets the font that best matches the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Gets a list of fonts in the font family ranked in order of how well they match the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>An address of a reference to the newly created <strong>{{IDWriteFontList}}</strong> object.</p> </dd> + + + + + <p> Represents a physical font in a font collection. This interface is used to create font faces from physical fonts, or to retrieve information such as font face metrics or face names from existing font faces.</p> + + + + <p> Gets the font family to which the specified font belongs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font family object to which the specified font belongs.</p> </dd> + + + + + <p> Gets the weight, or stroke thickness, of the specified font. </p> + <p>A value that indicates the weight for the specified font.</p> + + + + <p> Gets the stretch, or width, of the specified font. </p> + <p>A value that indicates the type of stretch, or width, applied to the specified font.</p> + + + + <p> Gets the style, or slope, of the specified font. </p> + <p>A value that indicates the type of style, or slope, of the specified font.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p><strong>{{TRUE}}</strong> if the font is a symbol font; otherwise, <strong>{{FALSE}}</strong>.</p> + + + + <p> Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address to a reference to the newly created localized strings object.</p> </dd> + + + + + <p> Gets a localized strings collection containing the specified informational strings, indexed by locale name. </p> + <p> If the font does not contain the string specified by <em>informationalStringID</em>, the return value is <strong>{{S_OK}}</strong> but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that identifies the informational string to get. For example, <strong>{{DWRITE_INFORMATIONAL_STRING_DESCRIPTION}}</strong> specifies a string that contains a description of the font. </p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created localized strings object.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a value that indicates what simulations are applied to the specified font. </p> + <p> A value that indicates one or more of the types of simulations (none, bold, or oblique) applied to the specified font.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a structure that has font metrics for the current font face. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Determines whether the font supports a specified character. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value for the method to inspect.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font supports the specified character; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Creates a font face object for the font. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + <p>The <strong>{{IDWriteFactory::GetSystemFontCollection}}</strong> method will give you an <strong>{{IDWriteFontCollection}}</strong> object, which encapsulates the set of fonts installed on the system, as shown in the following code example.</p><pre>{{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. +if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); +} +</pre><p> <strong>{{IDWriteTextFormat}}</strong> and <strong>{{IDWriteTextLayout}}</strong> both have a <strong>GetFontCollection</strong> method that returns the font collection being used by the object. These interfaces use the system font collection by default, but can use a custom font collection instead.</p><p>To determine what fonts are available on the system, get a reference to the system font collection. You can then use the <strong>{{IDWriteFontCollection::GetFontFamilyCount}}</strong> method to determine the number of fonts and loop through the list. The following example enumerates the fonts in the system font collection, and prints the font family names to the console.</p><pre> #include &lt;dwrite.h&gt; +#include &lt;string.h&gt; +#include &lt;stdio.h&gt; +#include &lt;new&gt; // SafeRelease inline function. +template &lt;class T&gt; inline void SafeRelease(T **ppT) +{ if (*ppT) { (*ppT)-&gt;Release(); *ppT = {{NULL}}; } +} void wmain() +{ {{IDWriteFactory}}* pDWriteFactory = {{NULL}}; {{HRESULT}} hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory) ); {{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. if ({{SUCCEEDED}}(hr)) { hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); } {{UINT32}} familyCount = 0; // Get the number of font families in the collection. if ({{SUCCEEDED}}(hr)) { familyCount = pFontCollection-&gt;GetFontFamilyCount(); } for ({{UINT32}} i = 0; i &lt; familyCount; ++i) { {{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. if ({{SUCCEEDED}}(hr)) { hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); } {{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. if ({{SUCCEEDED}}(hr)) { hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); } {{UINT32}} index = 0; {{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } } // If the specified locale doesn't exist, select the first on the list. if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); } // Allocate a string big enough to hold the name. wchar_t* name = new (std::nothrow) wchar_t[length+1]; if (name == {{NULL}}) { hr = {{E_OUTOFMEMORY}}; } // Get the family name. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetString(index, name, length+1); } if ({{SUCCEEDED}}(hr)) { // Print out the family name. wprintf(L"%s\n", name); } SafeRelease(&amp;pFontFamily); SafeRelease(&amp;pFamilyNames); delete [] name; } SafeRelease(&amp;pFontCollection); SafeRelease(&amp;pDWriteFactory); +} </pre> + + + + <p> Gets the number of font families in the collection. </p> + <p>The number of font families in the collection.</p> + + + + <p> Creates a font family object given a zero-based font family index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font family.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font family object.</p> </dd> + + + + + <p> Finds the font family with the specified family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters, which is null-terminated, containing the name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.</p> </dd> + + + <dd> <p>When this method returns, contains the zero-based index of the matching font family if the family name was found; otherwise, <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the family name exists; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong to the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font face object that specifies the physical font.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets the font collection that contains the fonts in the font list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the current <strong>{{IDWriteFontCollection}}</strong> object.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets a font given its zero-based index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Represents a font typography setting.</p> + + + + <p> Adds an OpenType font feature. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the OpenType name identifier and the execution parameter for the font feature being added.</p> </dd> + + + + + <p> Gets the number of OpenType font features for the current font. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>The number of font features for the current text format.</p> + + + + <p> Gets the font feature at the specified index. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the font feature to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains the font feature which is at the specified index.</p> </dd> + + + + + <p> Wraps an application-defined inline graphic, allowing {{DWrite}} to query metrics as if the graphic were a glyph inline with the text.</p> + + + + <p> The application implemented rendering callback (<strong>{{IDWriteTextRenderer::DrawInlineObject}}</strong>) can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the measurement of the inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the visible extents (in {{DIPs}}) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes.</p><p>The overhangs should be returned relative to the reported size of the object (see <strong>{{DWRITE_INLINE_OBJECT_METRICS}}</strong>), and should not be baseline adjusted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Layout uses this to determine the line-breaking behavior of the inline object among the text. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it.</p> </dd> + + + + + <p> The <strong>{{IDWriteTextFormat}}</strong> interface describes the font and paragraph properties used to format text, and it describes locale information. </p> + <p> To get a reference to the <strong>{{IDWriteTextFormat}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextFormat}}</strong> method as shown in the following code.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory_-&gt;CreateTextFormat( L"Gabriola", {{NULL}}, {{DWRITE_FONT_WEIGHT_REGULAR}}, {{DWRITE_FONT_STYLE_NORMAL}}, {{DWRITE_FONT_STRETCH_NORMAL}}, 72.0f, L"en-us", &amp;pTextFormat_ ); +} </pre><p>When creating an <strong>{{IDWriteTextFormat}}</strong> object using the <strong>CreateTextFormat</strong> function, the application specifies the font family, font collection, font weight, font size, and locale name for the text format.</p><p>These properties cannot be changed after the <strong>{{IDWriteTextFormat}}</strong> object is created. To change these properties, a new <strong>{{IDWriteTextFormat}}</strong> object must be created with the desired properties.</p><p> The <strong>{{IDWriteTextFormat}}</strong> interface is used to draw text with a single format</p><p> To draw text with multiple formats, or to use a custom text renderer, use the <strong>{{IDWriteTextLayout}}</strong> interface. <strong>{{IDWriteTextLayout}}</strong> enables the application to change the format for ranges of text within the string. The <strong>{{IDWriteFactory::CreateTextLayout}}</strong> takes an <strong>{{IDWriteTextFormat}}</strong> object as a parameter and initially applies the format information to the entire string. </p><p> This object may not be thread-safe, and it may carry the state of text format change. </p> + + + + <p>Sets the alignment of text in a paragraph, relative to the leading and trailing edge of a layout box for a <strong>{{IDWriteTextFormat}}</strong> interface.</p> + <p> The text can be aligned to the leading or trailing edge of the layout box, or it can be centered. The following illustration shows text with the alignment set to <strong>{{DWRITE_TEXT_ALIGNMENT_LEADING}}</strong>, <strong>{{DWRITE_TEXT_ALIGNMENT_CENTER}}</strong>, and <strong>{{DWRITE_TEXT_ALIGNMENT_TRAILING}}</strong>, respectively. </p><p></p><strong>Note</strong>??The alignment is dependent on reading direction, the above is for left-to-right reading direction. For right-to-left reading direction it would be the opposite.?<p>See <strong>{{DWRITE_TEXT_ALIGNMENT}}</strong> for more information. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The textAlignment argument is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> Sets the alignment option of a paragraph relative to the layout box's top and bottom edge. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph alignment option being set for a paragraph; see <strong>{{DWRITE_PARAGRAPH_ALIGNMENT}}</strong> for more information.</p> </dd> + + + + + <p> Sets the word wrapping option. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The word wrapping option being set for a paragraph; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> </dd> + + + + + <p> Sets the paragraph reading direction. </p> + <p> The reading direction and flow direction must always be set 90 degrees orthogonal to each other, or else you will get the error {{DWRITE_E_FLOWDIRECTIONCONFLICTS}} when you use layout functions like Draw or GetMetrics. So if you set a vertical reading direction (for example, to {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}), then you must also use SetFlowDirection to set the flow direction appropriately (for example, to {{DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The text reading direction (for example, <strong>{{DWRITE_READING_DIRECTION_RIGHT_TO_LEFT}}</strong> for languages, such as Arabic, that read from right to left) for a paragraph. </p> </dd> + + + + + <p> Sets the paragraph flow direction. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph flow direction; see <strong>{{DWRITE_FLOW_DIRECTION}}</strong> for more information.</p> </dd> + + + + + <p> Sets a fixed distance between two adjacent tab stops. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The fixed distance between two adjacent tab stops.</p> </dd> + + + + + <p> Sets trimming options for text overflowing the layout width. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Text trimming options.</p> </dd> + + + <dd> <p>Application-defined omission sign. This parameter may be <strong>{{NULL}}</strong>. See <strong>{{IDWriteInlineObject}}</strong> for more information.</p> </dd> + + + + + <p> Sets the line spacing. </p> + <p> For the default method, spacing depends solely on the content. For uniform spacing, the specified line height overrides the content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies how line height is being determined; see <strong>{{DWRITE_LINE_SPACING_METHOD}}</strong> for more information.</p> </dd> + + + <dd> <p>The line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>The distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the alignment option of text relative to the layout box's leading and trailing edge. </p> + <p>Returns the text alignment option of the current paragraph.</p> + + + + <p> Gets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box. </p> + <p>A value that indicates the current paragraph alignment option.</p> + + + + <p> Gets the word wrapping option. </p> + <p>Returns the word wrapping option; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> + + + + <p> Gets the current reading direction for text in a paragraph. </p> + <p>A value that indicates the current reading direction for text in a paragraph.</p> + + + + <p> Gets the direction that text lines flow. </p> + <p>The direction that text lines flow within their parent container. For example, <strong>{{DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM}}</strong> indicates that text lines are placed from top to bottom.</p> + + + + <p> Gets the incremental tab stop position. </p> + <p>The incremental tab stop value.</p> + + + + <p> Gets the trimming options for text that overflows the layout box. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, it contains a reference to a <strong>{{DWRITE_TRIMMING}}</strong> structure that holds the text trimming options for the overflowing text.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a trimming omission sign. This parameter may be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates how line height is determined.</p> </dd> + + + <dd> <p>When this method returns, contains the line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>When this method returns, contains the distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the current font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font collection being used for the current text.</p> </dd> + + + + + <p> Gets the length of the font family name. </p> + <p>The size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the font family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a character array, which is null-terminated, that receives the current font family name. The buffer allocated for this array should be at least the size, in elements, of <em>nameSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>fontFamilyName</em> character array, in character count, including the terminated <strong>{{NULL}}</strong> character. To find the size of <em>fontFamilyName</em>, use <strong>GetFontFamilyNameLength</strong>.</p> </dd> + + + + + <p> Gets the font weight of the text. </p> + <p>A value that indicates the type of weight (such as normal, bold, or black). </p> + + + + <p> Gets the font style of the text.</p> + <p>A value which indicates the type of font style (such as slope or incline).</p> + + + + <p> Gets the font stretch of the text. </p> + <p>A value which indicates the type of font stretch (such as normal or condensed).</p> + + + + <p> Gets the font size in {{DIP}} unites. </p> + <p>The current font size in {{DIP}} units.</p> + + + + <p> Gets the length of the locale name. </p> + <p>The size of the character array in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a character array that receives the current locale name.</p> </dd> + + + <dd> <p>The size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character. Use <strong>GetLocaleNameLength</strong> to get the size of the locale name character array.</p> </dd> + + + + + <p>Holds the appropriate digits and numeric punctuation for a specified locale.</p> + + + + <p>Implemented by the text analyzer's client to provide text to the analyzer. It allows the separation between the logical view of text as a continuous stream of characters identifiable by unique text positions, and the actual memory layout of potentially discrete blocks of text in the client's backing store. </p> + <p>If any of these callbacks returns an error, then the analysis functions will stop prematurely and return a callback error. Note that rather than return {{E_NOTIMPL}}, an application should stub the method and return a constant/null and {{S_OK}}.</p> + + + + <p>Gets a block of text starting at the specified text position. </p> + <p>Returning <strong>{{NULL}}</strong> indicates the end of text, which is the position after the last character. This function is called iteratively for each consecutive block, tying together several fragmented blocks in the backing store into a virtual contiguous string.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The first position of the piece to obtain. All positions are in <strong>{{UTF16}}</strong> code units, not whole characters, which matters when supplementary characters are used.</p> </dd> + + + <dd> <p>When this method returns, contains an address of the block of text as an array of characters to be retrieved from the text analysis.</p> </dd> + + + <dd> <p>When this method returns, contains the number of <strong>{{UTF16}}</strong> units of the retrieved chunk. The returned length is not the length of the block, but the length remaining in the block, from the specified position until its end. For example, querying for a position that is 75 positions into a 100-position block would return 25.</p> </dd> + + + + + <p>Gets a block of text immediately preceding the specified position.</p> + <p>{{NULL}} indicates no chunk available at the specified position, either because <em>textPosition</em> equals 0, <em>textPosition</em> is greater than the entire text content length, or the queried position is not mapped into the application's backing store.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position immediately after the last position of the block of text to obtain.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the block of text, as an array of characters from the specified range. The text range will be from <em>textPosition</em> to the front of the block.</p> </dd> + + + <dd> <p>Number of {{UTF16}} units of the retrieved block. The length returned is from the specified position to the front of the block.</p> </dd> + + + + + <p>Gets the paragraph reading direction.</p> + <p>The reading direction of the current paragraph.</p> + + + + <p>Gets the locale name on the range affected by the text analysis.</p> + <p>The <em>localeName</em> reference must remain valid until the next call or until the analysis returns.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position to examine.</p> </dd> + + + <dd> <p>Contains the length of the text being affected by the text analysis up to the next differing locale.</p> </dd> + + + <dd> <p>Contains an address of a reference to an array of characters which receives the locale name from the text affected by the text analysis. The array of characters is null-terminated.</p> </dd> + + + + + <p>Gets the number substitution from the text range affected by the text analysis.</p> + <p>Any implementation should return the number substitution with an incremented reference count, and the analysis will release when finished with it (either before the next call or before it returns). However, the sink callback may hold onto it after that.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>Contains the length of the text, in characters, remaining in the text range up to the next differing number substitution.</p> </dd> + + + <dd> <p>Contains an address of a reference to an object, which was created with <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong>, that holds the appropriate digits and numeric punctuation for a given locale.</p> </dd> + + + + + <p>This interface is implemented by the text analyzer's client to receive the output of a given text analysis. </p> + <p>The text analyzer disregards any current state of the analysis sink, therefore, a Set method call on a range overwrites the previously set analysis result of the same range.</p> + + + + <p>Reports script analysis for the specified text range.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains a zero-based index representation of a writing system script and a value indicating whether additional shaping of text is required.</p> </dd> + + + + + <p>Sets line-break opportunities for each character, starting from the specified position.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting text position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains breaking conditions set for each character from the starting position to the end of the specified range.</p> </dd> + + + + + <p>Sets a bidirectional level on the range, which is called once per run change (either explicit or resolved implicit).</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>The explicit level from the paragraph reading direction and any embedded control codes {{RLE}}/{{RLO}}/{{LRE}}/{{LRO}}/{{PDF}}, which is determined before any additional rules.</p> </dd> + + + <dd> <p>The final implicit level considering the explicit level and characters' natural directionality, after all Bidi rules have been applied.</p> </dd> + + + + + <p>Sets the number substitution on the text range affected by the text analysis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>An object that holds the appropriate digits and numeric punctuation for a given locale. Use <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong> to create this object.</p> </dd> + + + + + <p> Analyzes various text properties for complex script processing such as bidirectional (bidi) support for languages like Arabic, determination of line break opportunities, glyph placement, and number substitution.</p> + + + + <p> Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script {{ID}} to the sink callback <strong>SetScript</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback <strong>SetBidiLevel</strong>. </p> + <p> While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback <strong>SetNumberSubstitution</strong>. </p> + <p> Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback <strong>SetLineBreakpoints</strong>. </p> + <p> Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Parses the input text string and maps it to the set of glyphs and associated glyph data according to the font and the writing system's rendering rules. </p> + <p> Note that the mapping from characters to glyphs is, in general, many-to-many. The recommended estimate for the per-glyph output buffers is (3 * <em>textLength</em> / 2 + 16). This is not guaranteed to be sufficient. The value of the <em>actualGlyphCount</em> parameter is only valid if the call succeeds. In the event that <em>maxGlyphCount</em> is not big enough, <strong>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</strong> will be returned. The application should allocate a larger buffer and try again. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters to convert to glyphs.</p> </dd> + + + <dd> <p>The length of <em>textString</em>.</p> </dd> + + + <dd> <p>The font face that is the source of the output glyphs.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> if the text is intended to be drawn vertically.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> for right-to-left text.</p> </dd> + + + <dd> <p>A reference to a Script analysis result from an <strong>AnalyzeScript</strong> call.</p> </dd> + + + <dd> <p>The locale to use when selecting glyphs. For example the same character may map to different glyphs for ja-jp versus zh-chs. If this is <strong>{{NULL}}</strong>, then the default mapping based on the script is used.</p> </dd> + + + <dd> <p>A reference to an optional number substitution which selects the appropriate glyphs for digits and related numeric characters, depending on the results obtained from <strong>AnalyzeNumberSubstitution</strong>. Passing <strong>{{NULL}}</strong> indicates that no substitution is needed and that the digits should receive nominal glyphs.</p> </dd> + + + <dd> <p>An array of references to the sets of typographic features to use in each feature range.</p> </dd> + + + <dd> <p>The length of each feature range, in characters. The sum of all lengths should be equal to <em>textLength</em>.</p> </dd> + + + <dd> <p>The number of feature ranges.</p> </dd> + + + <dd> <p>The maximum number of glyphs that can be returned.</p> </dd> + + + <dd> <p>When this method returns, contains the mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contains shaping properties for each character.</p> </dd> + + + <dd> <p>The output glyph indices.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contain shaping properties for each output glyph.</p> </dd> + + + <dd> <p>When this method returns, contains the actual number of glyphs returned if the call succeeds.</p> </dd> + + + + + <p> Places glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Place glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines the pixel snapping properties such as pixels per {{DIP}}(device-independent pixel) and the current transform matrix of a text renderer.</p> + + + + <p> Determines whether pixel snapping is disabled. The recommended default is <strong>{{FALSE}}</strong>, unless doing animation that requires subpixel vertical placement. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if pixel snapping is disabled; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a transform that maps abstract coordinates to {{DIPs}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a structure which has transform information for pixel snapping.</p> </dd> + + + + + <p> Gets the number of physical pixels per {{DIP}}. </p> + <p> Because a {{DIP}} (device-independent pixel) is 1/96 inch, the <em>pixelsPerDip</em> value is the number of logical pixels per inch divided by 96.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of physical pixels per {{DIP}}.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p> Sets the layout maximum width.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum width of the layout box.</p> </dd> + + + + + <p> Sets the layout maximum height. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum height of the layout box. </p> </dd> + + + + + <p> Sets the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to set.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets null-terminated font family name for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font family name that applies to the entire text string within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the font weight for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. </p> + <p>The font weight can be set to one of the predefined font weight values provided in the <strong>{{DWRITE_FONT_WEIGHT}}</strong> enumeration or an integer from 1 to 999. Values outside this range will cause the method to fail with an <strong>{{E_INVALIDARG}}</strong> return value.</p><p>The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font style for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure.</p> + <p>The font style can be set to Normal, Italic or Oblique. The following illustration shows three styles for the Palatino font. For more information, see <strong>{{DWRITE_FONT_STYLE}}</strong>.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font stretch for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value which indicates the type of font stretch for text within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Sets the font size in {{DIP}} units for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font size in {{DIP}} units to be set for text in the range specified by <em>textRange</em>. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p>Sets strikethrough for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean flag that indicates whether strikethrough takes place in the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the application-defined drawing effect. </p> + <p>An <strong>{{ID2D1Brush}}</strong>, such as a color or gradient brush, can be set as a drawing effect if you are using the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> to draw text and that brush will be used to draw the specified range of text.</p><p> This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering.</p> </dd> + + + <dd> <p>The text range to which this change applies.</p> </dd> + + + + + <p> Sets the inline object. </p> + <p>The application may call this function to specify the set of properties describing an application-defined inline object for specific range.</p><p> This inline object applies to the specified range and will be passed back to the application by way of the <strong>DrawInlineObject</strong> callback when the range is drawn. Any text in that range will be suppressed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined inline object. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets font typography features for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to font typography settings. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the locale name for text within a specified text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated locale name string.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Gets the layout maximum width. </p> + <p>Returns the layout maximum width.</p> + + + + <p> Gets the layout maximum height. </p> + <p>The layout maximum height.</p> + + + + <p> Gets the font collection associated with the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Contains an address of a reference to the current font collection.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the length of the font family name at the current position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the character array containing the font family name, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family.</p> </dd> + + + + + <p> Copies the font family name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to examine.</p> </dd> + + + <dd> <p>When this method returns, contains an array of characters that receives the current font family name. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The size of the character array in character count including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family name.</p> </dd> + + + + + <p> Gets the font weight of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font weight being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font weight.</p> </dd> + + + + + <p> Gets the font style (also known as slope) of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font style (also known as slope or incline) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font style.</p> </dd> + + + + + <p> Gets the font stretch of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font stretch (also known as width) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font stretch.</p> </dd> + + + + + <p> Gets the font em height of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font in ems of the text at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font size.</p> </dd> + + + + + <p> Gets the underline presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether underline is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the strikethrough presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether strikethrough is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to strikethrough.</p> </dd> + + + + + <p> Gets the application-defined drawing effect at the specified text position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text whose drawing effect is to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect.</p> </dd> + + + + + <p> Gets the inline object at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The specified text position.</p> </dd> + + + <dd> <p>Contains the application-defined inline object.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the inline object.</p> </dd> + + + + + <p> Gets the typography setting of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current typography setting.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the typography.</p> </dd> + + + + + <p> Gets the length of the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Gets the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the character array receiving the current locale name.</p> </dd> + + + <dd> <p>Size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Draws text using the specified client drawing context.</p> + <p>To draw text with this method, a <em>textLayout</em> object needs to be created by the application using <strong>{{IDWriteFactory::CreateTextLayout}}</strong>. </p><p>After the <em>textLayout</em> object is obtained, the application calls the <strong>{{IDWriteTextLayout::Draw}}</strong> method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the <em>textRenderer</em> argument; there, the corresponding <strong>DrawGlyphRun</strong> {{API}} is called. </p><p>If you set a vertical text reading direction on {{IDWriteTextLayout}} via SetReadingDirection with {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}} (or bottom to top), then you must pass an interface that implements {{IDWriteTextRenderer1}}. Otherwise you get the error {{DWRITE_E_TEXTRENDERERINCOMPATIBLE}} because the original {{IDWriteTextRenderer}} interface only supported horizontal text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined drawing context. </p> </dd> + + + <dd> <p>Pointer to the set of callback functions used to draw parts of a text string.</p> </dd> + + + <dd> <p>The x-coordinate of the layout's left side.</p> </dd> + + + <dd> <p>The y-coordinate of the layout's top side.</p> </dd> + + + + + <p> Retrieves the information about each individual text line of the text string. </p> + <p> If <em>maxLineCount</em> is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>*actualLineCount</em> is set to the number of lines needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to an array of structures containing various calculated length values of individual text lines.</p> </dd> + + + <dd> <p>The maximum size of the <em>lineMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>lineMetrics</em> array that is needed.</p> </dd> + + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Returns the overhangs (in {{DIPs}}) of the layout and all objects contained in it, including text glyphs and inline objects.</p> + <p>Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Overshoots of visible extents (in {{DIPs}}) outside the layout.</p> </dd> + + + + + <p> Retrieves logical properties and measurements of each glyph cluster. </p> + <p> If <em>maxClusterCount</em> is not large enough, then {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>actualClusterCount</em> is set to the number of clusters needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains metrics, such as line-break or total advance width, for a glyph cluster.</p> </dd> + + + <dd> <p>The maximum size of the <em>clusterMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>clusterMetrics</em> array that is needed.</p> </dd> + + + + + <p>Determines the minimum possible width the layout can be set to without emergency breaking between the characters of whole words occurring.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Minimum width.</p> </dd> + + + + + <p> The application calls this function passing in a specific pixel location relative to the top-left location of the layout box and obtains the information about the correspondent hit-test metrics of the text string where the hit-test has occurred. When the specified pixel location is outside the text string, the function sets the output value <em>*isInside</em> to <strong>{{FALSE}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The pixel location X to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>The pixel location Y to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is at the leading or the trailing side of the character. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this value is set according to the output <em>hitTestMetrics-&gt;textPosition</em> value to represent the edge closest to the hit-test location.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is inside the text string. When <strong>{{FALSE}}</strong>, the position nearest the text's edge is returned.</p> </dd> + + + <dd> <p>The output geometry fully enclosing the hit-test location. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this structure represents the geometry enclosing the edge closest to the hit-test location.</p> </dd> + + + + + <p> The application calls this function to get the pixel location relative to the top-left of the layout box given the text position and the logical side of the position. This function is normally used as part of caret positioning of text where the caret is drawn at the location corresponding to the current text editing position. It may also be used as a way to programmatically obtain the geometry of a particular text position in {{UI}} automation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position used to get the pixel location.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the pixel location is of the leading or the trailing side of the specified text position.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location X, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location Y, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output geometry fully enclosing the specified text position.</p> </dd> + + + + + <p> The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. One of the main usages is to implement highlight selection of the text string. The function returns {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. The application is responsible for allocating a new buffer of greater size and calling the function again. A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function <strong>{{IDWriteTextLayout}}</strong>::GetLineLengths), and the maxBidiReorderingDepth value from the <strong>{{DWRITE_TEXT_METRICS}}</strong> structure of the output argument *textMetrics (from the function <strong>{{IDWriteFactory}}</strong>::<strong>CreateTextLayout</strong>). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.</p> + <p>You create an <strong>{{IDWriteBitmapRenderTarget}}</strong> by using the <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> method, as shown in the following code.</p><pre>if ({{SUCCEEDED}}(hr)) +{ hr = g_pGdiInterop-&gt;CreateBitmapRenderTarget(hdc, r.right, r.bottom, &amp;g_pBitmapRenderTarget); +} +</pre><p> <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> takes a handle to a {{DC}} and the desired width and height. In the above example, the width and height given are the size of the window rect.</p> + + + + <p> Draws a run of glyphs to a bitmap target at the specified position.</p> + <p>You can use the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the <strong>{{IDWriteTextRenderer::DrawGlyphRun}}</strong> callback method as shown in the following code.</p><pre>{{STDMETHODIMP}} GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, {{FLOAT}} baselineOriginX, {{FLOAT}} baselineOriginY, {{DWRITE_MEASURING_MODE}} measuringMode, __in {{DWRITE_GLYPH_RUN}} const* glyphRun, __in {{DWRITE_GLYPH_RUN_DESCRIPTION}} const* glyphRunDescription, {{IUnknown}}* clientDrawingEffect ) +{ {{HRESULT}} hr = {{S_OK}}; // Pass on the drawing call to the render target to do the real work. {{RECT}} dirtyRect = {0}; hr = pRenderTarget_-&gt;DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, {{RGB}}(0,200,255), &amp;dirtyRect ); return hr; +} +</pre><p>The <em>baselineOriginX</em>, <em>baslineOriginY</em>, <em>measuringMethod</em>, and <em>glyphRun</em> parameters are provided (as arguments) when the callback method is invoked. The <em>renderingParams</em>, <em>textColor</em> and <em>blackBoxRect</em> are not.</p><p>Default rendering params can be retrieved by using the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The horizontal position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The vertical position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p> The structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p> The object that controls rendering behavior.</p> </dd> + + + <dd> <p> The foreground color of the text.</p> </dd> + + + <dd> <p> The optional rectangle that receives the bounding box (in pixels not {{DIPs}}) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.</p> </dd> + + + + + <p> Gets a handle to the memory device context. </p> + <p> An application can use the device context to draw using {{GDI}} functions. An application can obtain the bitmap handle ({{HBITMAP}}) by calling <strong>GetCurrentObject</strong>. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call <strong>GetObject</strong> to fill in a <strong>{{DIBSECTION}}</strong> structure. The bitmap is always a 32-bit top-down {{DIB}}. </p><p>Note that this method takes no parameters and returns an {{HDC}} variable, not an {{HRESULT}}.</p><pre>memoryHdc = g_pBitmapRenderTarget-&gt;GetMemoryDC(); +</pre><p>The {{HDC}} returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.</p> + <p>Returns a device context handle to the memory device context.</p> + + + + <p> Gets the number of bitmap pixels per {{DIP}}. </p> + <p>A {{DIP}} (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.</p> + <p>The number of bitmap pixels per {{DIP}}.</p> + + + + <p> Sets the number of bitmap pixels per {{DIP}} (device-independent pixel). A {{DIP}} is 1/96 inch, so this value is the number if pixels per inch divided by 96. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the number of pixels per {{DIP}}.</p> </dd> + + + + + <p> Gets the transform that maps abstract coordinates to {{DIPs}}. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a transform matrix.</p> </dd> + + + + + <p> Sets the transform that maps abstract coordinate to {{DIPs}} (device-independent pixel). This does not affect the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the new transform. This parameter can be <strong>{{NULL}}</strong>, in which case the identity transform is implied.</p> </dd> + + + + + <p> Gets the dimensions of the target bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the width and height of the bitmap in pixels.</p> </dd> + + + + + <p> Resizes the bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new bitmap width, in pixels.</p> </dd> + + + <dd> <p>The new bitmap height, in pixels.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p> Creates a font object that matches the properties specified by the <strong>{{LOGFONT}}</strong> structure. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created <strong>{{IDWriteFont}}</strong> object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Initializes a <strong>{{LOGFONT}}</strong> structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a <strong>{{LOGFONT}}</strong> by using <strong>ConvertFontToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a <strong>{{LOGFONT}}</strong> as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFont}}</strong> object to be converted into a {{GDI}}-compatible <strong>{{LOGFONT}}</strong> structure.</p> </dd> + + + <dd> <p>When this method returns, contains a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the specified font object is part of the system font collection; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Initializes a {{LOGFONT}} structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a {{LOGFONT}} by using <strong>ConvertFontFaceToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a {{LOGFONT}} as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFontFace}}</strong> object to be converted into a {{GDI}}-compatible {{LOGFONT}} structure.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + + + <p> Creates an <strong>{{IDWriteFontFace}}</strong> object that corresponds to the currently selected <strong>{{HFONT}}</strong> of the specified <strong>{{HDC}}</strong>. </p> + <p>This function is intended for scenarios in which an application wants to use {{GDI}} and Uniscribe 1.x for text layout and shaping, but DirectWrite for final rendering. This function assumes the client is performing text output using glyph indexes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to a device context into which a font has been selected. It is assumed that the client has already performed font mapping and that the font selected into the device context is the actual font to be used for rendering glyphs.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure. The font face returned is guaranteed to reference the same physical typeface that would be used for drawing glyphs (but not necessarily characters) using ExtTextOut.</p> </dd> + + + + + <p> Creates an object that encapsulates a bitmap and memory {{DC}} (device context) which can be used for rendering glyphs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the optional device context used to create a compatible memory {{DC}} (device context).</p> </dd> + + + <dd> <p>The width of the bitmap render target.</p> </dd> + + + <dd> <p>The height of the bitmap render target.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created <strong>{{IDWriteBitmapRenderTarget}}</strong> object.</p> </dd> + + + + + <p> Contains low-level information used to render a glyph run.</p> + <p>The alpha texture can be a bi-level alpha texture or a ClearType alpha texture. </p><p>A bi-level alpha texture contains one byte per pixel, therefore the size of the buffer for a bi-level texture will be the area of the texture bounds, in bytes. Each byte in a bi-level alpha texture created by <strong>CreateAlphaTexture</strong> is either set to {{DWRITE_ALPHA_MAX}} (that is, 255) or zero.</p><p>A ClearType alpha texture contains three bytes per pixel, therefore the size of the buffer for a ClearType alpha texture is three times the area of the texture bounds, in bytes.</p> + + + + <p> Gets the bounding rectangle of the physical pixels affected by the glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of texture requested. If a bi-level texture is requested, the bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only antialiased glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains the bounding rectangle of the physical pixels affected by the glyph run, or an empty rectangle if there are no glyphs of the specified texture type.</p> </dd> + + + + + <p> Creates an alpha texture of the specified type for glyphs within a specified bounding rectangle. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the type of texture requested. This can be <strong>{{DWRITE_TEXTURE_BILEVEL_1x1}}</strong> or <strong>{{DWRITE_TEXTURE_CLEARTYPE_3x1}}</strong>. If a bi-level texture is requested, the texture contains only bi-level glyphs. Otherwise, the texture contains only antialiased glyphs.</p> </dd> + + + <dd> <p>The bounding rectangle of the texture, which can be different than the bounding rectangle returned by <strong>GetAlphaTextureBounds</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the array of alpha values from the texture. The buffer allocated for this array must be at least the size of <em>bufferSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>alphaValues</em> array, in bytes. The minimum size depends on the dimensions of the rectangle and the type of texture requested.</p> </dd> + + + + + <p> Gets alpha blending properties required for ClearType blending. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An object that specifies the ClearType level and enhanced contrast, gamma, pixel geometry, and rendering mode. In most cases, the values returned by the output parameters of this method are based on the properties of this object, unless a {{GDI}}-compatible rendering mode was specified.</p> </dd> + + + <dd> <p>When this method returns, contains the gamma value to use for gamma correction.</p> </dd> + + + <dd> <p>When this method returns, contains the enhanced contrast value to be used for blending.</p> </dd> + + + <dd> <p>When this method returns, contains the ClearType level used in the alpha blending.</p> </dd> + + + + + <p>Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.</p> + <p>This function creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects. DirectWrite factory contains internal state data such as font loader registration and cached font data. In most cases it is recommended you use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state data, and thereby reduce memory usage. However, there are cases when it is desirable to reduce the impact of a component, such as a plug-in from an untrusted source, on the rest of the process, by sandboxing and isolating it from the rest of the process components. In such cases, it is recommended you use an isolated factory for the sandboxed component.</p><p>The following example shows how to create a shared DirectWrite factory.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the factory object will be shared or isolated.</p> </dd> + + + <dd> <p>A {{GUID}} value that identifies the DirectWrite factory interface, such as __uuidof(<strong>{{IDWriteFactory}}</strong>).</p> </dd> + + + <dd> <p>An address of a reference to the newly created DirectWrite factory object.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FAMILY}}</strong> enumeration contains values that specify the kind of typeface classification.</p> + + + <dd> <p>Any typeface classification.</p> </dd> + + + <dd> <p>No fit typeface classification.</p> </dd> + + + <dd> <p>Text display typeface classification.</p> </dd> + + + <dd> <p>Script (or hand written) typeface classification.</p> </dd> + + + <dd> <p>Decorative typeface classification.</p> </dd> + + + <dd> <p>Symbol typeface classification.</p> </dd> + + + <dd> <p>Pictorial (or symbol) typeface classification.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SERIF_STYLE}}</strong> enumeration contains values that specify the appearance of the serif text.</p> + + + <dd> <p>Any appearance of the serif text.</p> </dd> + + + <dd> <p>No fit appearance of the serif text.</p> </dd> + + + <dd> <p>Cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square appearance of the serif text.</p> </dd> + + + <dd> <p>Thin appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + <dd> <p>Exaggerated appearance of the serif text.</p> </dd> + + + <dd> <p>Triangle appearance of the serif text.</p> </dd> + + + <dd> <p>Normal sans appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse sans appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Flared appearance of the serif text.</p> </dd> + + + <dd> <p>Rounded appearance of the serif text.</p> </dd> + + + <dd> <p>Script appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> enumeration contains values that specify the weight of characters.</p> + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> values roughly correspond to the <strong>{{DWRITE_FONT_WEIGHT}}</strong> values by using (panose_weight - 2) * 100 = font_weight.</p> + + + <dd> <p>Any weight.</p> </dd> + + + <dd> <p>No fit weight.</p> </dd> + + + <dd> <p>Very light weight.</p> </dd> + + + <dd> <p>Light weight.</p> </dd> + + + <dd> <p>Thin weight.</p> </dd> + + + <dd> <p>Book weight.</p> </dd> + + + <dd> <p>Medium weight.</p> </dd> + + + <dd> <p>Demi weight.</p> </dd> + + + <dd> <p>Bold weight.</p> </dd> + + + <dd> <p>Heavy weight.</p> </dd> + + + <dd> <p>Black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_PROPORTION}}</strong> enumeration contains values that specify the proportion of the glyph shape by considering additional detail to standard characters.</p> + + + <dd> <p>Any proportion for the text.</p> </dd> + + + <dd> <p>No fit proportion for the text.</p> </dd> + + + <dd> <p>Old style proportion for the text.</p> </dd> + + + <dd> <p>Modern proportion for the text.</p> </dd> + + + <dd> <p>Extra width proportion for the text.</p> </dd> + + + <dd> <p>Expanded proportion for the text.</p> </dd> + + + <dd> <p>Condensed proportion for the text.</p> </dd> + + + <dd> <p>Very expanded proportion for the text.</p> </dd> + + + <dd> <p>Very condensed proportion for the text.</p> </dd> + + + <dd> <p>Monospaced proportion for the text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CONTRAST}}</strong> enumeration contains values that specify the ratio between thickest and thinnest point of the stroke for a letter such as uppercase 'O'.</p> + + + <dd> <p>Any contrast.</p> </dd> + + + <dd> <p>No fit contrast.</p> </dd> + + + <dd> <p>No contrast.</p> </dd> + + + <dd> <p>Very low contrast.</p> </dd> + + + <dd> <p>Low contrast.</p> </dd> + + + <dd> <p>Medium low contrast.</p> </dd> + + + <dd> <p>Medium contrast.</p> </dd> + + + <dd> <p>Medium high contrast.</p> </dd> + + + <dd> <p>High contrast.</p> </dd> + + + <dd> <p>Very high contrast.</p> </dd> + + + <dd> <p>Horizontal low contrast.</p> </dd> + + + <dd> <p>Horizontal medium contrast.</p> </dd> + + + <dd> <p>Horizontal high contrast.</p> </dd> + + + <dd> <p>Broken contrast.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_STROKE_VARIATION}}</strong> enumeration contains values that specify the relationship between thin and thick stems of text characters.</p> + + + <dd> <p>Any stroke variation for text characters.</p> </dd> + + + <dd> <p>No fit stroke variation for text characters.</p> </dd> + + + <dd> <p>No stroke variation for text characters.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual diagonal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual transitional.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant horizontal.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ARM_STYLE}}</strong> enumeration contains values that specify the style of termination of stems and rounded letterforms for text.</p> + + + <dd> <p>Any arm style.</p> </dd> + + + <dd> <p>No fit arm style.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight wedge.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is straight single serif.</p> </dd> + + + <dd> <p>The arm style is straight double serif.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LETTERFORM}}</strong> enumeration contains values that specify the roundness of letterform for text.</p> + + + <dd> <p>Any letterform.</p> </dd> + + + <dd> <p>No fit letterform.</p> </dd> + + + <dd> <p>Normal contact letterform.</p> </dd> + + + <dd> <p>Normal weighted letterform.</p> </dd> + + + <dd> <p>Normal boxed letterform.</p> </dd> + + + <dd> <p>Normal flattened letterform.</p> </dd> + + + <dd> <p>Normal rounded letterform.</p> </dd> + + + <dd> <p>Normal off-center letterform.</p> </dd> + + + <dd> <p>Normal square letterform.</p> </dd> + + + <dd> <p>Oblique contact letterform.</p> </dd> + + + <dd> <p>Oblique weighted letterform.</p> </dd> + + + <dd> <p>Oblique boxed letterform.</p> </dd> + + + <dd> <p>Oblique flattened letterform.</p> </dd> + + + <dd> <p>Oblique rounded letterform.</p> </dd> + + + <dd> <p>Oblique off-center letterform.</p> </dd> + + + <dd> <p>Oblique square letterform.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_MIDLINE}}</strong> enumeration contains values that specify info about the placement of midline across uppercase characters and the treatment of diagonal stem apexes.</p> + + + <dd> <p>Any midline.</p> </dd> + + + <dd> <p>No fit midline.</p> </dd> + + + <dd> <p>Standard trimmed midline.</p> </dd> + + + <dd> <p>Standard pointed midline.</p> </dd> + + + <dd> <p>Standard serifed midline.</p> </dd> + + + <dd> <p>High trimmed midline.</p> </dd> + + + <dd> <p>High pointed midline.</p> </dd> + + + <dd> <p>High serifed midline.</p> </dd> + + + <dd> <p>Constant trimmed midline.</p> </dd> + + + <dd> <p>Constant pointed midline.</p> </dd> + + + <dd> <p>Constant serifed midline.</p> </dd> + + + <dd> <p>Low trimmed midline.</p> </dd> + + + <dd> <p>Low pointed midline.</p> </dd> + + + <dd> <p>Low serifed midline.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XHEIGHT}}</strong> enumeration contains values that specify info about the relative size of lowercase letters and the treatment of diacritic marks (xheight).</p> + + + <dd> <p>Any xheight.</p> </dd> + + + <dd> <p>No fit xheight.</p> </dd> + + + <dd> <p>Constant small xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Constant large xheight.</p> </dd> + + + <dd> <p>Ducking small xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + <dd> <p>Ducking large xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_TOOL_KIND}}</strong> enumeration contains values that specify the kind of tool that is used to create character forms.</p> + + + <dd> <p>Any kind of tool.</p> </dd> + + + <dd> <p>No fit for the kind of tool.</p> </dd> + + + <dd> <p>Flat {{NIB}} tool.</p> </dd> + + + <dd> <p>Pressure point tool.</p> </dd> + + + <dd> <p>Engraved tool.</p> </dd> + + + <dd> <p>Ball tool.</p> </dd> + + + <dd> <p>Brush tool.</p> </dd> + + + <dd> <p>Rough tool.</p> </dd> + + + <dd> <p>Felt-pen-brush-tip tool.</p> </dd> + + + <dd> <p>Wild-brush tool.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SPACING}}</strong> enumeration contains values that specify character spacing (monospace versus proportional).</p> + + + <dd> <p>Any spacing.</p> </dd> + + + <dd> <p>No fit for spacing.</p> </dd> + + + <dd> <p>Spacing is proportional.</p> </dd> + + + <dd> <p>Spacing is monospace.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT_RATIO}}</strong> enumeration contains values that specify info about the ratio between width and height of the character face.</p> + + + <dd> <p>Any aspect ratio.</p> </dd> + + + <dd> <p>No fit for aspect ratio.</p> </dd> + + + <dd> <p>Very condensed aspect ratio.</p> </dd> + + + <dd> <p>Condensed aspect ratio.</p> </dd> + + + <dd> <p>Normal aspect ratio.</p> </dd> + + + <dd> <p>Expanded aspect ratio.</p> </dd> + + + <dd> <p>Very expanded aspect ratio.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_TOPOLOGY}}</strong> enumeration contains values that specify the topology of letterforms.</p> + + + <dd> <p>Any script topology.</p> </dd> + + + <dd> <p>No fit for script topology.</p> </dd> + + + <dd> <p>Script topology is roman disconnected.</p> </dd> + + + <dd> <p>Script topology is roman trailing.</p> </dd> + + + <dd> <p>Script topology is roman connected.</p> </dd> + + + <dd> <p>Script topology is cursive disconnected.</p> </dd> + + + <dd> <p>Script topology is cursive trailing.</p> </dd> + + + <dd> <p>Script topology is cursive connected.</p> </dd> + + + <dd> <p>Script topology is black-letter disconnected.</p> </dd> + + + <dd> <p>Script topology is black-letter trailing.</p> </dd> + + + <dd> <p>Script topology is black-letter connected.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_FORM}}</strong> enumeration contains values that specify the general look of the character face, with consideration of its slope and tails.</p> + + + <dd> <p>Any script form.</p> </dd> + + + <dd> <p>No fit for script form.</p> </dd> + + + <dd> <p>Script form is upright with no wrapping.</p> </dd> + + + <dd> <p>Script form is upright with some wrapping.</p> </dd> + + + <dd> <p>Script form is upright with more wrapping.</p> </dd> + + + <dd> <p>Script form is upright with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with no wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with some wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with more wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with no wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with some wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with more wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with extreme wrapping.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FINIALS}}</strong> enumeration contains values that specify how character ends and miniscule ascenders are treated.</p> + + + <dd> <p>Any finials.</p> </dd> + + + <dd> <p>No fit for finials.</p> </dd> + + + <dd> <p>No loops.</p> </dd> + + + <dd> <p>No closed loops.</p> </dd> + + + <dd> <p>No open loops.</p> </dd> + + + <dd> <p>Sharp with no loops.</p> </dd> + + + <dd> <p>Sharp with closed loops.</p> </dd> + + + <dd> <p>Sharp with open loops.</p> </dd> + + + <dd> <p>Tapered with no loops.</p> </dd> + + + <dd> <p>Tapered with closed loops.</p> </dd> + + + <dd> <p>Tapered with open loops.</p> </dd> + + + <dd> <p>Round with no loops.</p> </dd> + + + <dd> <p>Round with closed loops.</p> </dd> + + + <dd> <p>Round with open loops.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XASCENT}}</strong> enumeration contains values that specify the relative size of the lowercase letters.</p> + + + <dd> <p>Any xascent.</p> </dd> + + + <dd> <p>No fit for xascent.</p> </dd> + + + <dd> <p>Very low xascent.</p> </dd> + + + <dd> <p>Low xascent.</p> </dd> + + + <dd> <p>Medium xascent.</p> </dd> + + + <dd> <p>High xascent.</p> </dd> + + + <dd> <p>Very high xascent.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_CLASS}}</strong> enumeration contains values that specify the general look of the character face.</p> + + + <dd> <p>Any class of decorative typeface.</p> </dd> + + + <dd> <p>No fit for decorative typeface.</p> </dd> + + + <dd> <p>Derivative decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard topology decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard elements decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard aspect decorative typeface.</p> </dd> + + + <dd> <p>Initials decorative typeface.</p> </dd> + + + <dd> <p>Cartoon decorative typeface.</p> </dd> + + + <dd> <p>Picture stems decorative typeface.</p> </dd> + + + <dd> <p>Ornamented decorative typeface.</p> </dd> + + + <dd> <p>Text and background decorative typeface.</p> </dd> + + + <dd> <p>Collage decorative typeface.</p> </dd> + + + <dd> <p>Montage decorative typeface.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT}}</strong> enumeration contains values that specify the ratio between the width and height of the character face.</p> + + + <dd> <p>Any aspect.</p> </dd> + + + <dd> <p>No fit for aspect.</p> </dd> + + + <dd> <p>Super condensed aspect.</p> </dd> + + + <dd> <p>Very condensed aspect.</p> </dd> + + + <dd> <p>Condensed aspect.</p> </dd> + + + <dd> <p>Normal aspect.</p> </dd> + + + <dd> <p>Extended aspect.</p> </dd> + + + <dd> <p>Very extended aspect.</p> </dd> + + + <dd> <p>Super extended aspect.</p> </dd> + + + <dd> <p>Monospace aspect.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FILL}}</strong> enumeration contains values that specify the type of fill and line treatment.</p> + + + <dd> <p>Any fill.</p> </dd> + + + <dd> <p>No fit for fill.</p> </dd> + + + <dd> <p>The fill is the standard solid fill.</p> </dd> + + + <dd> <p>No fill.</p> </dd> + + + <dd> <p>The fill is patterned fill.</p> </dd> + + + <dd> <p>The fill is complex fill.</p> </dd> + + + <dd> <p>The fill is shaped fill.</p> </dd> + + + <dd> <p>The fill is drawn distressed.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LINING}}</strong> enumeration contains values that specify the handling of the outline for the decorative typeface.</p> + + + <dd> <p>Any lining.</p> </dd> + + + <dd> <p>No fit for lining.</p> </dd> + + + <dd> <p>No lining.</p> </dd> + + + <dd> <p>The lining is inline.</p> </dd> + + + <dd> <p>The lining is outline.</p> </dd> + + + <dd> <p>The lining is engraved.</p> </dd> + + + <dd> <p>The lining is shadowed.</p> </dd> + + + <dd> <p>The lining is relief.</p> </dd> + + + <dd> <p>The lining is backdrop.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_TOPOLOGY}}</strong> enumeration contains values that specify the overall shape characteristics of the font.</p> + + + <dd> <p>Any decorative topology.</p> </dd> + + + <dd> <p>No fit for decorative topology.</p> </dd> + + + <dd> <p>Standard decorative topology.</p> </dd> + + + <dd> <p>Square decorative topology.</p> </dd> + + + <dd> <p>Multiple segment decorative topology.</p> </dd> + + + <dd> <p>Art deco decorative topology.</p> </dd> + + + <dd> <p>Uneven weighting decorative topology.</p> </dd> + + + <dd> <p>Diverse arms decorative topology.</p> </dd> + + + <dd> <p>Diverse forms decorative topology.</p> </dd> + + + <dd> <p>Lombardic forms decorative topology.</p> </dd> + + + <dd> <p>Upper case in lower case decorative topology.</p> </dd> + + + <dd> <p>The decorative topology is implied.</p> </dd> + + + <dd> <p>Horseshoe E and A decorative topology.</p> </dd> + + + <dd> <p>Cursive decorative topology.</p> </dd> + + + <dd> <p>Blackletter decorative topology.</p> </dd> + + + <dd> <p>Swash variance decorative topology.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CHARACTER_RANGES}}</strong> enumeration contains values that specify the type of characters available in the font.</p> + + + <dd> <p>Any range.</p> </dd> + + + <dd> <p>No fit for range.</p> </dd> + + + <dd> <p>The range includes extended collection.</p> </dd> + + + <dd> <p>The range includes literals.</p> </dd> + + + <dd> <p>The range doesn't include lower case.</p> </dd> + + + <dd> <p>The range includes small capitals.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_KIND}}</strong> enumeration contains values that specify the kind of symbol set.</p> + + + <dd> <p>Any kind of symbol set.</p> </dd> + + + <dd> <p>No fit for the kind of symbol set.</p> </dd> + + + <dd> <p>The kind of symbol set is montages.</p> </dd> + + + <dd> <p>The kind of symbol set is pictures.</p> </dd> + + + <dd> <p>The kind of symbol set is shapes.</p> </dd> + + + <dd> <p>The kind of symbol set is scientific symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is music symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is expert symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is patterns.</p> </dd> + + + <dd> <p>The kind of symbol set is boarders.</p> </dd> + + + <dd> <p>The kind of symbol set is icons.</p> </dd> + + + <dd> <p>The kind of symbol set is logos.</p> </dd> + + + <dd> <p>The kind of symbol set is industry specific.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_ASPECT_RATIO}}</strong> enumeration contains values that specify the aspect ratio of symbolic characters.</p> + + + <dd> <p>Any aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No fit for aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No width aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Exceptionally wide symbolic characters.</p> </dd> + + + <dd> <p>Super wide symbolic characters.</p> </dd> + + + <dd> <p>Very wide symbolic characters.</p> </dd> + + + <dd> <p>Wide symbolic characters.</p> </dd> + + + <dd> <p>Normal aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Narrow symbolic characters.</p> </dd> + + + <dd> <p>Very narrow symbolic characters.</p> </dd> + + + + + <p>The <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong> enumeration contains values that specify the policy used by the <strong>{{IDWriteFontFace1::GetRecommendedRenderingMode}}</strong> method to determine whether to render glyphs in outline mode.</p> + <p>Glyphs are rendered in outline mode by default at large sizes for performance reasons, but how large (that is, the outline threshold) depends on the quality of outline rendering. If the graphics system renders anti-aliased outlines, a relatively low threshold is used. But if the graphics system renders aliased outlines, a much higher threshold is used.</p> + + + + <p>The <strong>{{DWRITE_BASELINE}}</strong> enumeration contains values that specify the baseline for text alignment.</p> + + + <dd> <p>The Roman baseline for horizontal; the Central baseline for vertical.</p> </dd> + + + <dd> <p>The baseline that is used by alphabetic scripts such as Latin, Greek, and Cyrillic.</p> </dd> + + + <dd> <p>Central baseline, which is generally used for vertical text.</p> </dd> + + + <dd> <p>Mathematical baseline, which math characters are centered on.</p> </dd> + + + <dd> <p>Hanging baseline, which is used in scripts like Devanagari.</p> </dd> + + + <dd> <p>Ideographic bottom baseline for {{CJK}}, left in vertical.</p> </dd> + + + <dd> <p>Ideographic top baseline for {{CJK}}, right in vertical.</p> </dd> + + + <dd> <p>The bottom-most extent in horizontal, left-most in vertical.</p> </dd> + + + <dd> <p>The top-most extent in horizontal, right-most in vertical.</p> </dd> + + + + + <p>The <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong> enumeration contains values that specify the desired kind of glyph orientation for the text.</p> + <p>The client specifies a <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value to the analyzer as the desired orientation.</p><strong>Note</strong>??This is the client preference, and the constraints of the script determine the final presentation.? + + + <dd> <p>The default glyph orientation. In vertical layout, naturally horizontal scripts (Latin, Thai, Arabic, Devanagari) rotate 90 degrees clockwise, while ideographic scripts (Chinese, Japanese, Korean) remain upright, 0 degrees.</p> </dd> + + + <dd> <p>Stacked glyph orientation. Ideographic scripts and scripts that permit stacking (Latin, Hebrew) are stacked in vertical reading layout. Connected scripts (Arabic, Syriac, 'Phags-pa, Ogham), which would otherwise look broken if glyphs were kept at 0 degrees, remain connected and rotate.</p> </dd> + + + + + <p>The <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> enumeration contains values that specify how the glyph is oriented to the x-axis.</p> + <p>The text analyzer outputs <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> values. The value that it outputs depends on the desired orientation, bidi level, and character properties.</p> + + + <dd> <p>Glyph orientation is upright.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>Glyph orientation is upside-down.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>The <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong> enumeration contains values that specify the type of antialiasing to use for text when the rendering mode calls for antialiasing.</p> + + + <dd> <p>ClearType antialiasing computes coverage independently for the red, green, and blue color elements of each pixel. This allows for more detail than conventional antialiasing. However, because there is no one alpha value for each pixel, ClearType is not suitable for rendering text onto a transparent intermediate bitmap.</p> </dd> + + + <dd> <p>Grayscale antialiasing computes one coverage value for each pixel. Because the alpha value of each pixel is well-defined, text can be rendered onto a transparent bitmap, which can then be composited with other content.</p> <strong>Note</strong>??Grayscale rendering with <strong>{{IDWriteBitmapRenderTarget1}}</strong> uses premultiplied alpha. ? </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS1}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + <p><strong>{{DWRITE_FONT_METRICS1}}</strong> inherits from <strong>{{DWRITE_FONT_METRICS}}</strong>:</p><code> struct {{DWRITE_FONT_METRICS1}} : public {{DWRITE_FONT_METRICS}} +{ +... +};</code> + + + <dd> <p>Left edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Top edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Right edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Bottom edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Horizontal position of the subscript relative to the baseline origin. This is typically negative (to the left) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the subscript relative to the baseline. This is typically negative.</p> </dd> + + + <dd> <p>Horizontal size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Vertical size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Horizontal position of the superscript relative to the baseline origin. This is typically positive (to the right) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the superscript relative to the baseline. This is typically positive.</p> </dd> + + + <dd> <p>Horizontal size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>Vertical size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>A Boolean value that indicates that the ascent, descent, and lineGap are based on newer 'typographic' values in the font, rather than legacy values.</p> </dd> + + + + + <p>The <strong>{{DWRITE_CARET_METRICS}}</strong> structure specifies the metrics for caret placement in a font.</p> + + + <dd> <p>Vertical rise of the caret in font design units. Rise / Run yields the caret angle. Rise = 1 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal run of the caret in font design units. Rise / Run yields the caret angle. Run = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal offset of the caret, in font design units, along the baseline for good appearance. Offset = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + + + + + + + + + + + + + + + <p>The <strong>{{DWRITE_PANOSE}}</strong> union describes typeface classification values that you use with <strong>{{IDWriteFont1::GetPanose}}</strong> to select and match the font.</p> + <strong>Note</strong>??The <strong>familyKind</strong> member (index 0) is the only stable entry in the 10-byte array because all the entries that follow can change dynamically depending on the context of the first member.? + + + + <p>The <strong>{{DWRITE_UNICODE_RANGE}}</strong> structure specifies the range of Unicode code points.</p> + + + <dd> <p>The first code point in the Unicode range.</p> </dd> + + + <dd> <p>The last code point in the Unicode range.</p> </dd> + + + + + <p>The <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure specifies script properties for caret navigation and justification.</p> + + + <dd> <p>The standardized four character code for the given script. </p> <strong>Note</strong>??These only include the general Unicode scripts, not any additional {{ISO}} 15924 scripts for bibliographic distinction. ? </dd> + + + <dd> <p>The standardized numeric code, ranging 0-999.</p> </dd> + + + <dd> <p>Number of characters to estimate look-ahead for complex scripts. Latin and all Kana are generally 1. Indic scripts are up to 15, and most others are 8.</p> <strong>Note</strong>??Combining marks and variation selectors can produce clusters that are longer than these look-aheads, so this estimate is considered typical language use. Diacritics must be tested explicitly separately. ? </dd> + + + <dd> <p>Appropriate character to elongate the given script for justification. For example:</p> <ul> <li>Arabic - U+0640 Tatweel</li> <li>Ogham - U+1680 Ogham Space Mark</li> </ul> </dd> + + + <dd> <p>Restrict the caret to whole clusters, like Thai and Devanagari. Scripts such as Arabic by default allow navigation between clusters. Others like Thai always navigate across whole clusters.</p> </dd> + + + <dd> <p>The language uses dividers between words, such as spaces between Latin or the Ethiopic wordspace. Examples include Latin, Greek, Devanagari, and Ethiopic. Chinese, Korean, and Thai are excluded.</p> </dd> + + + <dd> <p>The characters are discrete units from each other. This includes both block scripts and clustered scripts. Examples include Latin, Greek, Cyrillic, Hebrew, Chinese, and Thai.</p> </dd> + + + <dd> <p>The language is a block script, expanding between characters. Examples include Chinese, Japanese, Korean, and Bopomofo.</p> </dd> + + + <dd> <p>The language is justified within glyph clusters, not just between glyph clusters, such as the character sequence of Thai Lu and Sara Am (U+{{E026}}, U+{{E033}}), which form a single cluster but still expand between them. Examples include Thai, Lao, and Khmer.</p> </dd> + + + <dd> <p>The script's clusters are connected to each other (such as the baseline-linked Devanagari), and no separation is added between characters.</p> <strong>Note</strong>??Cursively linked scripts like Arabic are also connected (but not all connected scripts are cursive). ? <p>Examples include Devanagari, Arabic, Syriac, Bengala, Gurmukhi, and Ogham. Latin, Chinese, and Thaana are excluded.</p> </dd> + + + <dd> <p>The script is naturally cursive (Arabic and Syriac), meaning it uses other justification methods like kashida extension rather than inter-character spacing.</p> <strong>Note</strong>?? Although other scripts like Latin and Japanese might actually support handwritten cursive forms, they are not considered cursive scripts. ? <p>Examples include Arabic, Syriac, and Mongolian. Thaana, Devanagari, Latin, and Chinese are excluded.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure specifies justification info per glyph.</p> + + + <dd> <p>Minimum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, typically being zero except for kashida.</p> </dd> + + + <dd> <p>Maximum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, being zero for fixed-size characters and connected scripts, and non-zero for discrete scripts, and non-zero for cursive scripts at expansion points.</p> </dd> + + + <dd> <p>Maximum amount of compression to apply to the side of the glyph. This might vary from zero up to the glyph cluster size.</p> </dd> + + + <dd> <p>Priority of this expansion point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Priority of this compression point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Allow this expansion point to use up any remaining slack space even after all expansion priorities have been used up.</p> </dd> + + + <dd> <p>Allow this compression point to use up any remaining space even after all compression priorities have been used up.</p> </dd> + + + <dd> <p>Apply expansion and compression to the leading edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Apply expansion and compression to the trailing edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The interface you implement to provide needed information to the text analyzer, like the text and associated text properties.</p><p> </p><strong>Note</strong>?? If any of these callbacks return an error, the analysis functions will stop prematurely and return a callback error.? + + + + <p>Used by the text analyzer to obtain the desired glyph orientation and resolved bidi level.</p> + <p>The text analyzer calls back to this to get the desired glyph orientation and resolved bidi level, which it uses along with the script properties of the text to determine the actual orientation of each character, which it reports back to the client via the sink SetGlyphOrientation method.</p> + <p>Returning an error will abort the analysis.</p> + + + <dd> <p>The text position.</p> </dd> + + + <dd> <p>A reference to the text length.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value that specifies the desired kind of glyph orientation for the text.</p> </dd> + + + <dd> <p>A reference to the resolved bidi level.</p> </dd> + + + + + <p> The interface you implement to receive the output of the text analyzers.</p> + + + + <p>The text analyzer calls back to this to report the actual orientation of each character for shaping and drawing.</p> + <p>Returns a successful code or an error code to abort analysis.</p> + + + <dd> <p>The starting position to report from.</p> </dd> + + + <dd> <p>Number of {{UTF}}-16 units of the reported range.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle of the glyphs within the text range (pass to <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to get the world relative transform).</p> </dd> + + + <dd> <p>The adjusted bidi level to be used by the client layout for reordering runs. This will differ from the resolved bidi level retrieved from the source for cases such as Arabic stacked top-to-bottom, where the glyphs are still shaped as {{RTL}}, but the runs are {{TTB}} along with any {{CJK}} or Latin.</p> </dd> + + + <dd> <p>Whether the glyphs are rotated on their side, which is the default case for {{CJK}} and the case stacked Latin</p> </dd> + + + <dd> <p>Whether the script should be shaped as right-to-left. For Arabic stacked top-to-bottom, even when the adjusted bidi level is coerced to an even level, this will still be true.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the amount of contrast enhancement to use for grayscale antialiasing.</p> + <p>The contrast enhancement value. Valid values are greater than or equal to zero.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Gets a font collection representing the set of {{EUDC}} (end-user defined characters) fonts.</p> + <p>Note that if no {{EUDC}} is set on the system, the returned collection will be empty, meaning it will return success but GetFontFamilyCount will be zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to fill.</p> </dd> + + + <dd> <p>Whether to check for updates.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace1}}</strong> interface.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that holds metrics for the current font face element. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRICS1}}</strong> structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Gets caret metrics for the font in design units.</p> + <p>Caret metrics are used by text editors for drawing the correct caret placement and slant.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_CARET_METRICS}}</strong> structure that is filled.</p> </dd> + + + + + <p>Retrieves a list of character ranges supported by a font.</p> + <p>A list of character ranges supported by the font is useful for scenarios like character picking, glyph display, and efficient font selection lookup. This is similar to {{GDI}}'s <strong>GetFontUnicodeRanges</strong>, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.</p> + <p>Returns {{TRUE}} if the font is monospaced, otherwise it returns {{FALSE}}.</p> + + + + <p>Retrieves the advances in design units for a sequences of glyphs.</p> + <p> This is equivalent to calling GetGlyphMetrics and using only the advance width and height.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve advances for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances for.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advance height rather than horizontal advance widths.</p> </dd> + + + + + <p>Returns the pixel-aligned advances for a sequences of glyphs.</p> + <p>This is equivalent to calling <strong>GetGdiCompatibleGlyphMetrics</strong> and using only the advance width and height. </p><p>Like <strong>GetGdiCompatibleGlyphMetrics</strong>, these are in design units, meaning they must be scaled down by {{DWRITE_FONT_METRICS::designUnitsPerEm}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96 this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.</p> </dd> + + + <dd> <p>When {{FALSE}}, the metrics are the same as {{GDI}} aliased text ({{DWRITE_MEASURING_MODE_GDI_CLASSIC}}). When {{TRUE}}, the metrics are the same as those measured by {{GDI}} using a font using {{CLEARTYPE_NATURAL_QUALITY}} ({{DWRITE_MEASURING_MODE_GDI_NATURAL}}).</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advances rather than horizontal advances.</p> </dd> + + + <dd> <p>Total glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + + + <p>Retrieves the kerning pair adjustments from the font's kern table.</p> + <p><strong>GetKerningPairAdjustments</strong> isn't a direct replacement for {{GDI}}'s character based <strong>GetKerningPairs</strong>, but it serves the same role, without the client needing to cache them locally. <strong>GetKerningPairAdjustments</strong> also uses glyph id's directly rather than {{UCS}}-2 characters (how the kern table actually stores them), which avoids glyph collapse and ambiguity, such as the dash and hyphen, or space and non-breaking space. </p><p>Newer fonts may have only {{GPOS}} kerning instead of the legacy pair-table kerning. Such fonts, like Gabriola, will only return 0's for adjustments. <strong>GetKerningPairAdjustments</strong> doesn't virtualize and flatten these {{GPOS}} entries into kerning pairs.</p><p>You can realize a performance benefit by calling <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> to determine whether you need to call <strong>GetKerningPairAdjustments</strong>. If you previously called <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> and it returned {{FALSE}}, you can avoid calling <strong>GetKerningPairAdjustments</strong> because the font has no kerning pair-table entries. That is, in this situation, a call to <strong>GetKerningPairAdjustments</strong> would be a no-op.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve adjustments for.</p> </dd> + + + <dd> <p>The advances, returned in font design units, for each glyph. The last glyph adjustment is zero.</p> </dd> + + + + + <p>Determines whether the font supports pair-kerning.</p> + <p>If the font doesn't support pair table kerning, you don't need to call <strong>{{IDWriteFontFace1::GetKerningPairAdjustments}}</strong> because it would retrieve all zeroes.</p> + <p>Returns {{TRUE}} if the font supports kerning pairs, otherwise {{FALSE}}.</p> + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>This method should be used to determine the actual rendering mode in cases where the rendering mode of the rendering params object is {{DWRITE_RENDERING_MODE_DEFAULT}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a horizontal position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a vertical position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Specifies the world transform.</p> </dd> + + + <dd> <p>Whether the glyphs in the run are sideways or not.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Retrieves the vertical forms of the nominal glyphs retrieved from GetGlyphIndices.</p> + <p> The retrieval uses the font's 'vert' table. This is used in {{CJK}} vertical layout so the correct characters are shown.</p><p>Call <strong>GetGlyphIndices</strong> to get the nominal glyph indices, followed by calling this to remap the to the substituted forms, when the run is sideways, and the font has vertical glyph variants. See <strong>HasVerticalGlyphVariants</strong> for more info. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve.</p> </dd> + + + <dd> <p>Original glyph indices from cmap.</p> </dd> + + + <dd> <p>The vertical form of glyph indices.</p> </dd> + + + + + <p>Determines whether the font has any vertical glyph variants.</p> + <p>For OpenType fonts, <strong>HasVerticalGlyphVariants</strong> returns {{TRUE}} if the font contains a "vert" feature. </p><p> <strong>{{IDWriteFontFace1::GetVerticalGlyphVariants}}</strong> retrieves the vertical forms of the nominal glyphs that are retrieved from <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong>. </p> + <p>Returns {{TRUE}} if the font contains vertical glyph variants, otherwise {{FALSE}}.</p> + + + + <p>Represents a physical font in a font collection.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that has font metrics for the current font face. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font and is used for font selection and matching.</p> + <p>If the font has no {{PANOSE}} values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_PANOSE}}</strong> structure to fill in.</p> </dd> + + + + + <p>Retrieves the list of character ranges supported by a font.</p> + <p>The list of character ranges supported by a font, is useful for scenarios like character picking, glyph display, and efficient font selection lookup. GetUnicodeRanges is similar to {{GDI}}'s GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).</p> + <p>Returns true if the font is monospaced, else it returns false.</p> + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Applies spacing between characters, properly adjusting glyph clusters and diacritics.</p> + <p>The input and output advances/offsets are allowed to alias the same array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The length of the clustermap and original text.</p> </dd> + + + <dd> <p>The number of glyphs.</p> </dd> + + + <dd> <p>Mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>The advance width of each glyph.</p> </dd> + + + <dd> <p>The offset of the origin of each glyph.</p> </dd> + + + <dd> <p>Properties of each glyph, from GetGlyphs.</p> </dd> + + + <dd> <p>The new advance width of each glyph.</p> </dd> + + + <dd> <p>The new offset of the origin of each glyph.</p> </dd> + + + + + <p>Retrieves the given baseline from the font.</p> + <p>If the baseline does not exist in the font, it is not considered an error, but the function will return exists = false. You may then use heuristics to calculate the missing base, or, if the flag simulationAllowed is true, the function will compute a reasonable approximation for you.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_BASELINE}}</strong>-typed value that specifies the baseline of interest.</p> </dd> + + + <dd> <p>Whether the baseline is vertical or horizontal.</p> </dd> + + + <dd> <p>Simulate the baseline if it is missing in the font.</p> </dd> + + + <dd> <p>Script analysis result from AnalyzeScript.</p> <strong>Note</strong>??You can pass an empty script analysis structure, like this <code>{{DWRITE_SCRIPT_ANALYSIS}} scriptAnalysis = {};</code>, and this method will return the default baseline. ? </dd> + + + <dd> <p>The language of the run.</p> </dd> + + + <dd> <p>The baseline coordinate value in design units.</p> </dd> + + + <dd> <p>Whether the returned baseline exists in the font.</p> </dd> + + + + + <p>Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink callback <strong>SetGlyphOrientation</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p> + <p>The translation component of the transform returned is zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle that was reported into <strong>{{IDWriteTextAnalysisSink1::SetGlyphOrientation}}</strong>.</p> </dd> + + + <dd> <p>Whether the run's glyphs are sideways or not.</p> </dd> + + + <dd> <p>Returned transform.</p> </dd> + + + + + <p>Retrieves the properties for a given script.</p> + <p>Returns properties for the given script. If the script is invalid, it returns generic properties for the unknown script and {{E_INVALIDARG}}.</p> + + + <dd> <p>The script for a run of text returned from <strong>{{IDWriteTextAnalyzer::AnalyzeScript}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure that describes info for the script.</p> </dd> + + + + + <p>Determines the complexity of text, and whether you need to call <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> for full script shaping. </p> + <p>Text is not simple if the characters are part of a script that has complex shaping requirements, require bidi analysis, combine with other characters, reside in the supplementary planes, or have glyphs that participate in standard OpenType features. The length returned will not split combining marks from their base characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves justification opportunity information for each of the glyphs given the text and shaping glyph properties.</p> + <p>This function is called per-run, after shaping is done via the <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> method. </p><strong>Note</strong>??this function only supports natural metrics (<strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face that was used for shaping. This is mainly important for returning correct results of the kashida width. </p> <p>May be {{NULL}}. </p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Characters used to produce the glyphs.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Glyph properties produced from shaping.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that receives info for the allowed justification expansion/compression for each glyph.</p> </dd> + + + + + <p>Justifies an array of glyph advances to fit the line width.</p> + <p>You call <strong>JustifyGlyphAdvances</strong> after you call <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong> to collect all the opportunities, and <strong>JustifyGlyphAdvances</strong> spans across the entire line. The input and output arrays are allowed to alias each other, permitting in-place update.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The line width.</p> </dd> + + + <dd> <p>The glyph count.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that contains info for the allowed justification expansion/compression for each glyph. Get this info from <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong>. </p> </dd> + + + <dd> <p>An array of glyph advances.</p> </dd> + + + <dd> <p>An array of glyph offsets.</p> </dd> + + + <dd> <p>The returned array of justified glyph advances.</p> </dd> + + + <dd> <p>The returned array of justified glyph offsets.</p> </dd> + + + + + <p>Fills in new glyphs for complex scripts where justification increased the advances of glyphs, such as Arabic with kashida.</p> + <p>You call <strong>GetJustifiedGlyphs</strong> after the line has been justified, and it is per-run. </p><p>You should call <strong>GetJustifiedGlyphs</strong> if <strong>{{IDWriteTextAnalyzer1::GetScriptProperties}}</strong> returns a non-null <strong>{{DWRITE_SCRIPT_PROPERTIES}}.justificationCharacter</strong> for that script.</p><p> Use <strong>GetJustifiedGlyphs</strong> mainly for cursive scripts like Arabic. If <em>maxGlyphCount</em> is not large enough, <strong>GetJustifiedGlyphs</strong> returns the error {{E_NOT_SUFFICIENT_BUFFER}} and fills the variable to which <em>actualGlyphCount</em> points with the needed glyph count.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face used for shaping.</p> <p>May be {{NULL}}.</p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Maximum number of output glyphs allocated by caller.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Original glyphs produced from shaping.</p> </dd> + + + <dd> <p>Original glyph advances produced from shaping.</p> </dd> + + + <dd> <p>Justified glyph advances from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Justified glyph offsets from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Properties of each glyph, from <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong>. </p> </dd> + + + <dd> <p>The new glyph count written to the modified arrays, or the needed glyph count if the size is not large enough.</p> </dd> + + + <dd> <p>Updated clustermap.</p> </dd> + + + <dd> <p>Updated glyphs with new glyphs inserted where needed.</p> </dd> + + + <dd> <p>Updated glyph advances.</p> </dd> + + + <dd> <p>Updated glyph offsets.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p>Enables or disables pair-kerning on a given text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The text range to which the change applies.</p> </dd> + + + + + <p>Gets whether or not pair-kerning is enabled at given position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Sets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Gets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Encapsulates a 32-bit device independent bitmap and device context, which you can use for rendering glyphs.</p> + + + + <p>Gets the current text antialiasing mode of the bitmap render target.</p> + <p>Returns a <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> + + + + <p>Sets the current text antialiasing mode of the bitmap render target.</p> + <p>The antialiasing mode of a newly-created bitmap render target defaults to <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE}}</strong>. An app can change the antialiasing mode by calling <strong>SetTextAntialiasMode</strong>. For example, an app might specify <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE}}</strong> for grayscale antialiasing when it renders text onto a transparent bitmap.</p> + <p>Returns {{S_OK}} if successful, or {{E_INVALIDARG}} if the argument is not valid.</p> + + + <dd> <p>A <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> </dd> + + + + + <p>The optical margin alignment mode.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS}}</strong>, then the alignment uses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + + + <dd> <p>Align to the default origin and side-bearings of the glyph.</p> </dd> + + + <dd> <p>Align to the ink of the glyphs, such that the black box abuts the margins.</p> </dd> + + + + + <p>Specifies whether to enable grid-fitting of glyph outlines (also known as hinting).</p> + + + <dd> <p>Choose grid fitting based on the font's table information.</p> </dd> + + + <dd> <p>Always disable grid fitting, using the ideal glyph outlines.</p> </dd> + + + <dd> <p>Enable grid fitting, adjusting glyph outlines for device pixel display.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs with glyph color information. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>Glyph run to draw for this layer.</p> </dd> + + + <dd> <p>Pointer to the glyph run description for this layer. This may be <strong>{{NULL}}</strong>. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.</p> </dd> + + + <dd> <p>X coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Y coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Color value of the run; if all members are zero, the run should be drawn using the current brush.</p> </dd> + + + <dd> <p>Zero-based index into the font?s color palette; if this is <strong>0xFFFF</strong>, the run should be drawn using the current brush.</p> </dd> + + + + + <p>Allows you to access fallback fonts from the font list.</p><p>The <strong>{{IDWriteFontFallback}}</strong> interface defines a fallback sequence to map character ranges to fonts, which is either created via <strong>{{IDWriteFontFallbackBuilder}}</strong> or retrieved from <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> + + + + <p>Determines an appropriate font to use to render the beginning range of text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text source implementation holds the text and locale.</p> </dd> + + + <dd> <p>Starting position to analyze.</p> </dd> + + + <dd> <p>Length of the text to analyze.</p> </dd> + + + <dd> <p>Default font collection to use.</p> </dd> + + + <dd> <p>Family name of the base font. If you pass null, no matching will be done against the family.</p> </dd> + + + <dd> <p>The desired weight.</p> </dd> + + + <dd> <p>The desired style.</p> </dd> + + + <dd> <p>The desired stretch.</p> </dd> + + + <dd> <p>Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.</p> </dd> + + + <dd> <p>The font that should be used to render the first <em>mappedLength</em> characters of the text. If it returns {{NULL}}, that means that no font can render the text, and <em>mappedLength</em> is the number of characters to skip (rendered with a missing glyph). +</p> </dd> + + + <dd> <p>Scale factor to multiply the em size of the returned font by.</p> </dd> + + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines. </p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. This interface has all the same methods as <strong>{{IDWriteTextFormat}}</strong> and adds the ability for you to apply an explicit orientation.</p> + + + + <p>Sets the orientation of a text format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The orientation to apply to the text format.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>The preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Sets the wrapping mode of the last line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If set to {{FALSE}}, the last line is not wrapped. If set to {{TRUE}}, the last line is wrapped.</p> <p>The last line is wrapped by default.</p> </dd> + + + + + <p>Gets the wrapping mode of the last line.</p> + <p>Returns {{FALSE}} if the last line is not wrapped; {{TRUE}} if the last line is wrapped.</p> + + + + <p>Sets the optical margin alignment for the text format.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_USING_SIDE_BEARINGS}}</strong>, then the alignment Suses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The optical alignment to set.</p> </dd> + + + + + <p>Gets the optical margin alignment for the text format.</p> + <p>The optical alignment.</p> + + + + <p> Applies the custom font fallback onto the layout. If none is set, it uses the default system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font fallback to apply to the layout.</p> </dd> + + + + + <p>Gets the current fallback. If none was ever set since creating the layout, it will be nullptr.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the the current font fallback object.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Set the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Preferred glyph orientation.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Set whether or not the last word on the last line is wrapped. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Line wrapping option.</p> </dd> + + + + + <p>Get whether or not the last word on the last line is wrapped.</p> + + + + <p>Set how the glyphs align to the edges the margin. Default behavior is to align glyphs using their default glyphs metrics, which include side bearings. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Optical alignment option.</p> </dd> + + + + + <p>Get how the glyphs align to the edges the margin. </p> + + + + <p>Apply a custom font fallback onto layout. If none is specified, the layout uses the system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Custom font fallback created from <strong>{{IDWriteFontFallbackBuilder::CreateFontFallback}}</strong> or <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> </dd> + + + + + <p>Get the current font fallback object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current font fallback object.</p> </dd> + + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p><p>Extends <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to pass valid values for the baseline origin rather than zeroes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a complete list of OpenType features available for a script or font. If a feature is partially supported, then this method indicates that it is supported. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to get features from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The maximum number of tags to return.</p> </dd> + + + <dd> <p>The actual number of tags returned.</p> </dd> + + + <dd> <p>An array of OpenType font feature tags.</p> </dd> + + + + + <p>Checks if a typographic feature is available for a glyph or a set of glyphs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read glyph information from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The font feature tag to check.</p> </dd> + + + <dd> <p>The number of glyphs to check.</p> </dd> + + + <dd> <p>An array of glyph indices to check.</p> </dd> + + + <dd> <p>An array of integers that indicate whether or not the font feature applies to each glyph specified.</p> </dd> + + + + + <p>Allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + + + + <p>Appends a single mapping to the list. Call this once for each additional mapping.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Unicode ranges that apply to this mapping.</p> </dd> + + + <dd> <p>Number of Unicode ranges.</p> </dd> + + + <dd> <p>List of target family name strings.</p> </dd> + + + <dd> <p>Number of target family names.</p> </dd> + + + <dd> <p>Optional explicit font collection for this mapping.</p> </dd> + + + <dd> <p>Locale of the context.</p> </dd> + + + <dd> <p>Base family name to match against, if applicable.</p> </dd> + + + <dd> <p>Scale factor to multiply the result target font by.</p> </dd> + + + + + <p>Add all the mappings from an existing font fallback object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An existing font fallback object.</p> </dd> + + + + + <p>Creates the finalized fallback object from the mappings added.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the created fallback list.</p> </dd> + + + + + <p>Represents a physical font in a font collection.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Enables determining if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has color information ({{COLR}} and {{CPAL}} tables); otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace2}}</strong> interface.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Allows you to determine if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if a color rendering path is potentially necessary.</p> + + + + <p>Gets the number of color palettes defined by the font. </p> + <p>The return value is zero if the font has no color information. Color fonts are required to define at least one palette, with palette index zero reserved as the default palette.</p> + + + + <p>Get the number of entries in each color palette.</p> + <p>The number of entries in each color palette. All color palettes in a font have the same number of palette entries. The return value is zero if the font has no color information. +</p> + + + + <p>Gets color values from the font's color palette.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{E_INVALIDARG}}</dt> </dl> </td><td> <p>The sum of <em>firstEntryIndex</em> and <em>entryCount</em> is greater than the actual number of palette entries that's returned by the <strong>GetPaletteEntryCount</strong> method. +</p> </td></tr> <tr><td> <dl> <dt>{{DWRITE_E_NOCOLOR}}</dt> </dl> </td><td> <p>The font doesn't have a palette with the specified palette index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the color palette. If the font does not have a palette with the specified index, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong>.</p> </dd> + + + <dd> <p>Zero-based index of the first palette entry to read.</p> </dd> + + + <dd> <p>Number of palette entries to read.</p> </dd> + + + <dd> <p>Array that receives the color values.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>This interface allows the application to enumerate through the color glyph runs. The enumerator enumerates the layers in a back to front order for appropriate layering.</p> + + + + <p>Move to the next glyph run in the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if there is a next glyph run.</p> </dd> + + + + + <p>Returns the current glyph run of the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the current glyph run.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the grid fitting mode.</p> + <p>Returns a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the grid fitting mode.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Creates a font fallback object from the system font fallback list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback object.</p> </dd> + + + + + <p>Creates a font fallback builder object.</p><p>A font fall back builder allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback builder object.</p> </dd> + + + + + <p>This method is called on a glyph run to translate it in to multiple color glyph runs.</p> + <p> If the code calls this method with a glyph run that contains no color information, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls <strong>DrawGlyphRun</strong> with each of the returned glyph runs and foreground colors. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>The vertical baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>Original glyph run containing monochrome glyph {{IDs}}.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Measuring mode used to compute glyph positions if the run contains color glyphs.</p> </dd> + + + <dd> <p> World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, and identity transform is assumed. </p> </dd> + + + <dd> <p> Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>. </p> </dd> + + + <dd> <p> If the original glyph run contains color glyphs, this parameter receives a reference to an <strong>{{IDWriteColorGlyphRunEnumerator}}</strong> interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> and the output reference is <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p>The geometry of a device pixel.</p> </dd> + + + <dd> <p>Method of rendering glyphs. In most cases, this should be {{DWRITE_RENDERING_MODE_DEFAULT}} to automatically use an appropriate mode.</p> </dd> + + + <dd> <p>How to grid fit glyph outlines. In most cases, this should be {{DWRITE_GRID_FIT_DEFAULT}} to automatically choose an appropriate mode.</p> </dd> + + + <dd> <p>Holds the newly created rendering parameters object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates a glyph run analysis object, which encapsulates information used to render a glyph run.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure specifying the properties of the glyph run.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the emSize and pixelsPerDip.</p> </dd> + + + <dd> <p>Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default and not outline).</p> </dd> + + + <dd> <p>Specifies the method to measure glyphs.</p> </dd> + + + <dd> <p>How to grid-fit glyph outlines. This must be non-default.</p> </dd> + + + <dd> <p>Specifies the antialias mode.</p> </dd> + + + <dd> <p>Horizontal position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Receives a reference to the newly created object.</p> </dd> + + + + + <p>Identifies a string in a font.</p> + + + <dd> <p>Unspecified font property identifier.</p> </dd> + + + <dd> <p>Family name for the weight-width-slope model.</p> </dd> + + + <dd> <p>Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Face name of the font, for example Regular or Bold.</p> </dd> + + + <dd> <p>The full name of the font, for example "Arial Bold", from name id 4 in the name table.</p> </dd> + + + <dd> <p>{{GDI}}-compatible family name. Because {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names, for example "Arial", "Arial Narrow", "Arial Black".</p> </dd> + + + <dd> <p>The postscript name of the font, for example "GillSans-Bold", from name id 6 in the name table.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font was primarily designed to support.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font declares it is able to support.</p> </dd> + + + <dd> <p>Semantic tag to describe the font, for example Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic.</p> </dd> + + + <dd> <p>Weight of the font represented as a decimal string in the range 1-999.</p> </dd> + + + <dd> <p>Stretch of the font represented as a decimal string in the range 1-9.</p> </dd> + + + <dd> <p>Style of the font represented as a decimal string in the range 0-2.</p> </dd> + + + <dd> <p>Total number of properties.</p> </dd> + + + + + <p>Specifies the location of a resource.</p> + + + <dd> <p>The resource is remote, and information about it is unknown, including the file size and date. If you attempt to create a font or file stream, the creation will fail until locality becomes at least partial. </p> </dd> + + + <dd> <p>The resource is partially local, which means you can query the size and date of the file stream. With this type, you also might be able to create a font face and retrieve the particular glyphs for metrics and drawing, but not all the glyphs will be present.</p> </dd> + + + <dd> <p>The resource is completely local, and all font functions can be called without concern of missing data or errors related to network connectivity.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics</p> + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Font property used for filtering font sets and building a font set with explicit properties.</p> + + + <dd> <p>Specifies the requested font property, such as {{DWRITE_FONT_PROPERTY_ID_FAMILY_NAME}}.</p> </dd> + + + <dd> <p>Specifies the value, such as "Segoe {{UI}}".</p> </dd> + + + <dd> <p>Specifies the locale to use, such as "en-{{US}}". Simply leave this empty when used with the font set filtering functions, as they will find a match regardless of language. For passing to AddFontFaceReference, the localeName specifies the language of the property value.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + <dd> <p>White space before the content of the line. This is included in the line height and baseline distances. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space above the content.</p> </dd> + + + <dd> <p>White space after the content of the line. This is included in the height of the line. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space below the content.</p> </dd> + + + + + <p></p> + + + <dd> <p>Method used to determine line spacing.</p> </dd> + + + <dd> <p>Spacing between lines. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>Line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} between lines</li> <li>proportional line spacing: a scaling factor to be applied to the computed line height; for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Distance from top of line to baseline. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>default line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} from the top of the line to the baseline</li> <li>proportional line spacing: a scaling factor applied to the computed baseline; for each line, the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining leading is distributed after the line. It is ignored for the default and uniform line spacing methods. The leading that is available to distribute before or after the line depends on the values of the height and baseline parameters.</p> </dd> + + + <dd> <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics.</p> </dd> + + + + + <p>Represents a color glyph run. The {{IDWriteFactory4::TranslateColorGlyphRun}} method returns an ordered collection of color glyph runs of varying types depending on what the font supports.</p> + + + <dd> <p>Type of glyph image format for this color run. Exactly one type will be set since TranslateColorGlyphRun has already broken down the run into separate parts.</p> </dd> + + + <dd> <p>Measuring mode to use for this glyph run.</p> </dd> + + + + + <p>Data for a single glyph from GetGlyphImageData.</p> + + + <dd> <p>Pointer to the glyph data.</p> </dd> + + + <dd> <p>Size of glyph data in bytes.</p> </dd> + + + <dd> <p>Unique identifier for the glyph data. Clients may use this to cache a parsed/decompressed version and tell whether a repeated call to the same font returns the same data.</p> </dd> + + + <dd> <p>Pixels per em of the returned data. For non-scalable raster data ({{PNG}}/{{TIFF}}/{{JPG}}), this can be larger or smaller than requested from GetGlyphImageData when there isn't an exact match. For scaling intermediate sizes, use: desired pixels per em * font em size / actual pixels per em.</p> </dd> + + + <dd> <p>Size of image when the format is pixel data.</p> </dd> + + + <dd> <p>Left origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Right origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Top origin along the vertical central baseline.</p> </dd> + + + <dd> <p>Bottom origin along vertical central baseline.</p> </dd> + + + + + + + + <p>Represents a reference to a font face. A uniquely identifying reference to a font, from which you can create a font face to query font metrics and use for rendering. A font face reference consists of a font file, font face index, and font face simulation. The file data may or may not be physically present on the local machine yet. </p> + + + + <p>Creates a font face from the reference for use with layout, shaping, or rendering.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + <p>Creates a font face with alternate font simulations, for example, to explicitly simulate a bold font face out of a regular variant.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + + + + <p>Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero. </p> + <p> the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.</p> + + + + <p>Obtains the algorithmic style simulation flags of a font face.</p> + <p>Returns the algorithmic style simulation flags of a font face.</p> + + + + <p>Obtains the font file representing a font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.</p> + <p>the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal <strong>GetFileSize</strong>.</p> + + + + <p>Get the total size of the font face in bytes. </p> + <p>Returns the total size of the font face in bytes. If the locality is remote, this value is unknown and will be zero.</p> + + + + <p>Get the last modified date.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the last modified date. The time may be zero if the font file loader does not expose file time.</p> </dd> + + + + + <p>Get the locality of this font face reference.</p> + <p>You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with {{DWRITE_E_REMOTEFONT}}. This function may change between calls depending on background downloads and whether cached data expires.</p> + <p>Returns the locality of this font face reference.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p> Downloading a character involves downloading every glyph it depends on directly or indirectly, via font tables (cmap, {{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>Downloading a glyph involves downloading any other glyphs it depends on from the font tables ({{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a font in a font collection.</p> + + + + <p>Used with the EnqueuMakeResident function to choose how residency operations proceed when the memory budget is exceeded.</p> + <p></p> + + + <dd> <p>Specifies the default residency policy, which allows residency operations to succeed regardless of the application's current memory budget. EnqueueMakeResident returns {{E_OUTOFMEMORY}} only when there is no memory available.</p> </dd> + + + <dd> <p>Specifies that the EnqueueMakeResident function should return {{E_OUTOFMEMORY}} when the residency operation would exceed the application's current memory budget.</p> </dd> + + + + + <p>Creates a font face object for the font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFace3}}</strong> interface for the newly created font face object.</p> </dd> + + + + + <p>Compares two instances of font references for equality.</p> + <p>Returns whether the two instances of font references are equal. Returns <strong>{{TRUE}}</strong> if the two instances are equal; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{IDWriteFont}}</strong> interface for the other font instance to compare to this font instance.</p> </dd> + + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + + + + <p>Gets the current locality of the font.</p> + <p>For fully local files, the result will always be {{DWRITE_LOCALITY_LOCAL}}. A downloadable file may be any of the states, and this function may change between calls.</p> + <p>Returns the current locality of the font.</p> + + + + <p>Represents an absolute reference to a font face.</p> + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font, used for font selection and matching.</p> + <p>This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{DWRITE_PANOSE}}</strong> structure that receives the {{PANOSE}} values from the font.</p> </dd> + + + + + <p>Gets the weight of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_WEIGHT}}</strong>-typed value that specifies the density of a typeface, in terms of the lightness or heaviness of the strokes. </p> + + + + <p>Gets the stretch (also known as width) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STRETCH}}</strong>-typed value that specifies the degree to which a font has been stretched compared to a font's normal aspect ratio. </p> + + + + <p>Gets the style (also known as slope) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STYLE}}</strong>-typed value that specifies the style of the font. </p> + + + + <p>Creates a localized strings object that contains the family names for the font family, indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Gets a localized strings collection that contains the specified informational strings, indexed by locale name.</p> + <p>If the font doesn't contain the specified string, the return value is {{S_OK}}, but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>A <strong>{{DWRITE_INFORMATIONAL_STRING_ID}}</strong>-typed value that identifies the strings to get.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + <dd> <p>A reference to a variable that receives whether the font contains the specified string {{ID}}. <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Determines whether the font supports the specified character.</p> + <p>Returns whether the font supports the specified character. Returns <strong>{{TRUE}}</strong> if the font has the specified character; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>Determines whether the character is locally downloaded from the font.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has the specified character locally available, <strong>{{FALSE}}</strong> if not or if the font does not support that character. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines whether the glyph is locally downloaded from the font.</p> + <p>Returns {{TRUE}} if the font has the specified glyph locally available.</p> + + + <dd> <p>Glyph identifier.</p> </dd> + + + + + <p>Determines whether the specified characters are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of characters.</p> </dd> + + + <dd> <p>The number of elements in the character array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified characters are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified characters are local, {{FALSE}} if any of the specified characters are remote.</p> </dd> + + + + + <p>Determines whether the specified glyphs are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of glyph indices.</p> </dd> + + + <dd> <p>The number of elements in the glyph index array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified glyphs are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified glyphs are local, {{FALSE}} if any of the specified glyphs are remote.</p> </dd> + + + + + <p></p> + + + + <p>Get the number of total fonts in the set.</p> + <p>Returns the number of total fonts in the set.</p> + + + + <p>Gets a reference to the font at the specified index, which may be local or remote.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font.</p> </dd> + + + <dd> <p>Receives a reference the font face reference object, or nullptr on failure.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases). </p> </dd> + + + <dd> <p>Receives a reference to the newly created strings list.</p> </dd> + + + + + <p>Returns how many times a given property value occurs in the set.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>Receives how many times the property occurs.</p> </dd> + + + + + <p>Returns a subset of fonts filtered by the given properties.</p> + <p>If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>List of properties to filter using.</p> </dd> + + + <dd> <p>The number of properties to filter.</p> </dd> + + + <dd> <p>The subset of fonts that match the properties, or nullptr on failure.</p> </dd> + + + + + <p>Contains methods for building a font set.</p> + + + + <p>Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reference to the font.</p> </dd> + + + <dd> <p>List of properties to associate with the reference.</p> </dd> + + + <dd> <p>The number of properties defined.</p> </dd> + + + + + <p>Appends an existing font set to the one being built, allowing one to aggregate two sets or to essentially extend an existing one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font set to append font face references from.</p> </dd> + + + + + <p>Creates a font set from all the font face references added so far with AddFontFaceReference.</p> + <p>Creating a font set takes less time if the references were added with metadata rather than needing to extract the metadata from the font file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the newly created font set object, or nullptr in case of failure.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + + + + <p>Gets the underlying font set used by this collection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the font set used by the collection.</p> </dd> + + + + + + + + <p>Represents a family of related fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Represents a collection of strings indexed by number. An {{IDWriteStringList}} is identical to {{IDWriteLocalizedStrings}} except for the semantics, where localized strings are indexed on language (each language has one string property) whereas {{IDWriteStringList}} may contain multiple strings of the same language, such as a string list of family names from a font set. You can QueryInterface from an {{IDWriteLocalizedStrings}} to an {{IDWriteStringList}}. </p> + + + + <p>Gets the number of strings in the string list.</p> + <p>Returns the number of strings in the string list.</p> + + + + <p>Gets the length in characters (not including the null terminator) of the locale name with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Receives the length in characters, not including the null terminator.</p> </dd> + + + + + <p>Copies the locale name with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Character array that receives the locale name.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p>Gets the length in characters (not including the null terminator) of the string with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Receives the length in characters of the string, not including the null terminator.</p> </dd> + + + + + <p>Copies the string with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Character array that receives the string.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p></p> + + + + <p>Registers a client-defined listener object that receives download notifications. All registered listener's DownloadCompleted will be called after <strong>BeginDownload</strong> completes. </p> + <p>An <strong>{{IDWriteFontDownloadListener}}</strong> can also be passed to <strong>BeginDownload</strong> using the context parameter, rather than globally registered to the queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Unregisters a notification handler that was previously registered using <strong>AddListener</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling <strong>BeginDownload</strong> clears the queue.</p> + <p>{{TRUE}} if the queue is empty, {{FALSE}} if there are requests pending for <strong>BeginDownload</strong>.</p> + + + + <p>Begins an asynchronous download operation. The download operation executes in the background until it completes or is cancelled by a <strong>CancelDownload</strong> call.</p> + <p>BeginDownload removes all download requests from the queue, transferring them to a background download operation. If any previous downloads are still ongoing when BeginDownload is called again, the new download does not complete until the previous downloads have finished. If the queue is empty and no active downloads are pending, the <strong>DownloadCompleted</strong> callback is called immediately with {{DWRITE_DOWNLOAD_RESULT_NONE}}.</p> + <p> Returns {{S_OK}} if a download was successfully begun, {{S_FALSE}} if the queue was empty, or a standard {{HRESULT}} error code.</p> + + + + <p> Removes all download requests from the queue and cancels any active download operations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.</p> + <p>The current generation number of the download queue.</p> + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the rendering mode.</p> + <p>Returns a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the rendering mode.</p> + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Creates a glyph-run-analysis object that encapsulates info that DirectWrite uses to render a glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p> The amount of contrast enhancement, zero or greater. </p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p> A <strong>{{DWRITE_PIXEL_GEOMETRY}}</strong>-typed value that specifies the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value that specifies the method (for example, ClearType natural quality) for rendering glyphs. In most cases, specify <strong>{{DWRITE_RENDERING_MODE1_DEFAULT}}</strong> to automatically use an appropriate mode. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value that specifies how to grid-fit glyph outlines. In most cases, specify <strong>{{DWRITE_GRID_FIT_DEFAULT}}</strong> to automatically choose an appropriate mode. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to a <strong>{{IDWriteRenderingParams3}}</strong> interface for the newly created rendering parameters object, or <strong>{{NULL}}</strong> in case of failure. </p> </dd> + + + + + <p>Creates a reference to a font given a full path. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>Last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.</p> </dd> + + + <dd> <p>The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Contains newly created font face reference object, or nullptr in case of failure.</p> </dd> + + + + + <p>Retrieves the list of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates an empty font set builder to add font face references and create a custom font set. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set builder object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Create a weight/width/slope tree from a set of fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of fonts to use to build the collection.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Retrieves a weight/width/slope tree of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates whether to include cloud fonts or only locally installed fonts.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + <dd> <p>If this parameter is {{TRUE}}, the function performs an immediate check for changes to the set of system fonts. If this parameter is {{FALSE}}, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify {{TRUE}} if it has just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p>Gets the font download queue associated with this factory object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the font download queue interface.</p> </dd> + + + + + <p>Represents a list of fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p> Application-defined callback interface that receives notifications from the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong> interface). Callbacks will occur on the downloading thread, and objects must be prepared to handle calls on their methods from other threads at any time.</p> + + + + <p>The DownloadCompleted method is called back on an arbitrary thread when a download operation ends. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the download queue interface on which the BeginDownload method was called.</p> </dd> + + + <dd> <p>Optional context object that was passed to BeginDownload. AddRef is called on the context object by BeginDownload and Release is called after the DownloadCompleted method returns.</p> </dd> + + + <dd> <p>Result of the download operation.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p>Creates a font object that matches the properties specified by the {{LOGFONT}} structure.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font collection to search. If {{NULL}}, the local system font collection is used.</p> </dd> + + + <dd> <p>Receives a newly created font object if successful, or {{NULL}} in case of error.</p> </dd> + + + + + <p>Reads the font signature from the given font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face to read font signature from.</p> </dd> + + + <dd> <p>Font signature from the {{OS}}/2 table, ulUnicodeRange and ulCodePageRange.</p> </dd> + + + + + <p>Gets a list of matching fonts based on the specified {{LOGFONT}} values. Only fonts of that family name will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font set to search.</p> </dd> + + + <dd> <p>&gt;Receives the filtered font set if successful.</p> </dd> + + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. </p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure describing how the space between lines is managed for the paragraph.</p> </dd> + + + + + <p></p> + + + + <p>Invalidates the layout, forcing layout to remeasure before calling the metrics or drawing functions. This is useful if the locality of a font changes, and layout should be redrawn, or if the size of a client implemented {{IDWriteInlineObject}} changes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets line spacing information.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Retrieves properties of each line.</p> + <p> If maxLineCount is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and actualLineCount is set to the number of lines needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array to fill with line information.</p> </dd> + + + <dd> <p>The maximum size of the lineMetrics array.</p> </dd> + + + <dd> <p>The actual size of the lineMetrics array that is needed.</p> </dd> + + + + + <p>Enumerator for an ordered collection of color glyph runs.</p> + + + + <p>Gets the current color glyph run.</p> + <p>Standard {{HRESULT}} error code. An error is returned if there is no current glyph run, i.e., if MoveNext has not yet been called or if the end of the sequence has been reached.</p> + + + <dd> <p>Receives a reference to the color glyph run. The reference remains valid until the next call to MoveNext or until the interface is released.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. It contains font face type, appropriate file references and face identification data. Various font data such as metrics, names and glyph outlines are obtained from {{IDWriteFontFace}}.</p> + + + + <p>Gets the available image formats of a specific glyph and ppem. </p> + <p>Glyphs often have at least TrueType or {{CFF}} outlines, but they may also have {{SVG}} outlines, or they may have only bitmaps with no TrueType/{{CFF}} outlines. Some image formats, notably the {{PNG}}/{{JPEG}} ones, are size specific and will return no match when there isn't an entry in that size range.</p><p>Glyph ids beyond the glyph count return {{DWRITE_GLYPH_IMAGE_FORMATS_NONE}}.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph.</p> </dd> + + + <dd> </dd> + + + <dd> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + + + <p>Gets a reference to the glyph data based on the desired image format.</p> + <p> The glyphDataContext must be released via <strong>ReleaseGlyphImageData</strong> when done if the data is not empty, similar to <strong>{{IDWriteFontFileStream::ReadFileFragment}}</strong> and <strong>{{IDWriteFontFileStream::ReleaseFileFragment}}</strong>. The data reference is valid so long as the <strong>{{IDWriteFontFace}}</strong> exists and <strong>ReleaseGlyphImageData</strong> has not been called. </p><p> The <strong>{{DWRITE_GLYPH_IMAGE_DATA::uniqueDataId}}</strong> is valuable for caching purposes so that if the same resource is returned more than once, an existing resource can be quickly retrieved rather than needing to reparse or decompress the data. </p><p> The function only returns {{SVG}} or raster data - requesting TrueType/{{CFF}}/{{COLR}} data returns {{DWRITE_E_INVALIDARG}}. Those must be drawn via DrawGlyphRun or queried using GetGlyphOutline instead. Exactly one format may be requested or else the function returns {{DWRITE_E_INVALIDARG}}. If the glyph does not have that format, the call is not an error, but the function returns empty data. </p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph to retrieve image data for.</p> </dd> + + + <dd> <p>Requested pixels per em.</p> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + <dd> <p>On return contains data for a glyph.</p> </dd> + + + <dd> </dd> + + + + + <p>Releases the table data obtained from ReadGlyphData.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Opaque context from ReadGlyphData.</p> </dd> + + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Translates a glyph run to a sequence of color glyph runs, which can be rendered to produce a color representation of the original "base" run.</p> + <p>Calling <strong>{{IDWriteFactory2::TranslateColorGlyphRun}}</strong> is equivalent to calling <strong>{{IDWriteFactory4::TranslateColorGlyph}}</strong> run with the following formats specified: {{DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE}}|{{DWRITE_GLYPH_IMAGE_FORMATS_CFF}}|{{DWRITE_GLYPH_IMAGE_FORMATS_COLR}}.</p> + <p>Returns {{DWRITE_E_NOCOLOR}} if the font has no color information, the glyph run does not contain any color glyphs, or the specified color palette index is out of range. In this case, the client should render the original glyph run. Otherwise, returns a standard {{HRESULT}} error code.</p> + + + <dd> <p>Horizontal and vertical origin of the base glyph run in pre-transform coordinates.</p> </dd> + + + <dd> <p>Pointer to the original "base" glyph run.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Which data formats the runs should be split into.</p> </dd> + + + <dd> <p>Measuring mode, needed to compute the origins of each glyph.</p> </dd> + + + <dd> <p>Matrix converting from the client's coordinate space to device coordinates (pixels), i.e., the world transform multiplied by any {{DPI}} scaling.</p> </dd> + + + <dd> <p>Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>.</p> </dd> + + + <dd> <p>If the function succeeds, receives a reference to an enumerator object that can be used to obtain the color glyph runs. If the base run has no color glyphs, then the output reference is {{NULL}} and the method returns {{DWRITE_E_NOCOLOR}}.</p> </dd> + + + + + <p>Converts glyph run placements to glyph origins.</p> + <p>The transform and {{DPI}} have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p>The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p>The position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p>World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is {{NULL}}, and identity transform is assumed. </p> </dd> + + + <dd> <p>On return contains the glyph origins for the glyphrun.</p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p>Used to indicate the level of support that the adapter provides for optional features of Direct3D 12.</p> + <p></p> + + + <dd> <p> Indicates whether timestamp queries are supported on copy queues. </p> </dd> + + + <dd> <p> Indicates whether casting from one fully typed format to another, compatible, format is supported. </p> </dd> + + + <dd> <p> Indicates the kinds of command lists that support the ability to write an immediate value directly from the command stream into a specified buffer. </p> </dd> + + + <dd> <p> Indicates the level of support the adapter has for view instancing. </p> </dd> + + + <dd> <p> Indicates whether barycentrics are supported. </p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + <p> Indicates the measuring method used for text layout.</p> + + + <dd> <p> Specifies that text is measured using glyph ideal metrics whose values are independent to the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using glyph display-compatible metrics whose values tuned for the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using the same glyph display metrics as text measured by {{GDI}} using a font created with {{CLEARTYPE_NATURAL_QUALITY}}.</p> </dd> + + + + + <p>Specifies which formats are supported in the font, either at a font-wide level or per glyph.</p> + + + <dd> <p>Indicates no data is available for this glyph.</p> </dd> + + + <dd> <p>The glyph has TrueType outlines.</p> </dd> + + + <dd> <p>The glyph has {{CFF}} outlines.</p> </dd> + + + <dd> <p>The glyph has multilayered {{COLR}} data.</p> </dd> + + + <dd> <p>The glyph has {{SVG}} outlines as standard {{XML}}. Fonts may store the content gzip'd rather than plain text, indicated by the first two bytes as gzip header {0x1F 0x8B}.</p> </dd> + + + <dd> <p>The glyph has {{PNG}} image data, with standard {{PNG}} {{IHDR}}.</p> </dd> + + + <dd> <p>The glyph has {{JPEG}} image data, with standard {{JIFF}} {{SOI}} header.</p> </dd> + + + <dd> <p>The glyph has {{TIFF}} image data.</p> </dd> + + + <dd> <p>The glyph has raw 32-bit premultiplied {{BGRA}} data.</p> </dd> + + + + + <p>Specifies how the alpha value of a bitmap or render target should be treated.</p> + <p>The <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration is used with the <strong>{{D2D1_PIXEL_FORMAT}}</strong> enumeration to specify the alpha mode of a render target or bitmap. Different render targets and bitmaps support different alpha modes. For a list, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>The alpha value might not be meaningful.</p> </dd> + + + <dd> <p>The alpha value has been premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color. </p> </dd> + + + <dd> <p>The alpha value is ignored.</p> </dd> + + + + + <p> Contains the data format and alpha mode for a bitmap or render target. </p> + <p>For more information about the pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>A value that specifies the size and arrangement of channels in each pixel.</p> </dd> + + + <dd> <p>A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unkown. </p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as an unsigned 32-bit integer value, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate value of the point. </p> </dd> + + + <dd> <p>The y-coordinate value of the point.</p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as floating-point values, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate of the point. +</p> </dd> + + + <dd> <p>The y-coordinate of the point. +</p> </dd> + + + + + <p>A 2D vector that consists of two single-precision floating-point values (x, y). </p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A 4D vector that consists of four single-precision floating-point values (x, y, z, w).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + <dd> <p>The w value of the vector.</p> </dd> + + + + + <p>Represents a rectangle defined by the coordinates of the upper-left corner (left, top) and the coordinates of the lower-right corner (right, bottom). </p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p> Represents a rectangle defined by the upper-left corner pair of coordinates (left,top) and the lower-right corner pair of coordinates (right, bottom). These coordinates are expressed as a 32-bit integer values.</p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p>Stores an ordered pair of floating-point values, typically the width and height of a rectangle. </p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Stores an ordered pair of integers, typically the width and height of a rectangle.</p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Represents a 3-by-2 matrix.</p> + + + <dd> <p> The value in the first row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the first row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and second column of the matrix.</p> </dd> + + + + + <p>Describes a 4-by-3 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X3_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X3_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X3_F}} {{D2D1_MATRIX_4X3_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-3 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 4-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X4_F}} {{D2D1_MATRIX_4X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-4 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 5-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_5X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_5X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_5X4_F}} {{D2D1_MATRIX_5X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fifth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 5-by-4 floating point array that describes the matrix.</p> </dd> + + + + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether an opacity mask contains graphics or text. Direct2D uses this information to determine which gamma space to use when blending the opacity mask.</p> + + + <dd> <p>The opacity mask contains graphics. The opacity mask is blended in the gamma 2.2 color space.</p> </dd> + + + <dd> <p>The opacity mask contains non-{{GDI}} text. The gamma space used for blending is obtained from the render target's text rendering parameters. (<strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong>).</p> </dd> + + + <dd> <p>The opacity mask contains text rendered using the {{GDI}}-compatible rendering mode. The opacity mask is blended using the gamma for {{GDI}} rendering.</p> </dd> + + + + + <p>Specifies how a brush paints areas outside of its normal content area.</p> + <p>For an <strong>{{ID2D1BitmapBrush}}</strong>, the brush's content is the brush's bitmap. For an <strong>{{ID2D1LinearGradientBrush}}</strong>, the brush's content area is the gradient axis. For an <strong>{{ID2D1RadialGradientBrush}}</strong>, the brush's content is the area within the gradient ellipse. </p> + + + <dd> <p>Repeat the edge pixels of the brush's content for all regions outside the normal content area.</p> </dd> + + + <dd> <p>Repeat the brush's content.</p> </dd> + + + <dd> <p> The same as {{D2D1_EXTEND_MODE_WRAP}}, except that alternate tiles of the brush's content are flipped. (The brush's normal content is drawn untransformed.)</p> </dd> + + + + + <p>Specifies how the edges of nontext primitives are rendered.</p> + + + <dd> <p>Edges are antialiased using the Direct2D per-primitive method of high-quality antialiasing.</p> </dd> + + + <dd> <p>Objects are aliased in most cases. Objects are antialiased only when they are drawn to a render target created by the <strong>CreateDxgiSurfaceRenderTarget</strong> method and Direct3D multisampling has been enabled on the backing DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> </dd> + + + + + <p>Describes the antialiasing mode used for drawing text. </p> + <p>This enumeration is used with the <strong>SetTextAntialiasMode</strong> of an <strong>{{ID2D1RenderTarget}}</strong> to specify how text and glyphs are antialiased.</p><p> By default, Direct2D renders text in ClearType mode. Factors that can downgrade the default quality to grayscale or aliased:</p><ul> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_ALIASED}} </strong>, then the default text antialiasing mode is aliased. To change the DirectWrite rendering mode of an <strong>{{ID2D1RenderTarget}}</strong>, use the <strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong> method. </li> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_OUTLINE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If the render target has an alpha channel and is not set to <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If <strong>{{ID2D1RenderTarget::PushLayer}}</strong> is called without <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> (and the corresponding <strong>PopLayer</strong> has not been called yet), then the default text antialiasing mode is grayscale.</li> </ul> + + + <dd> <p>Use the system default. See Remarks.</p> </dd> + + + <dd> <p>Use ClearType antialiasing.</p> </dd> + + + <dd> <p>Use grayscale antialiasing.</p> </dd> + + + <dd> <p>Do not use antialiasing.</p> </dd> + + + + + <p>Specifies the algorithm that is used when images are scaled or rotated.</p><strong>Note</strong>??Starting in Windows?8, more interpolations modes are available. See <strong>{{D2D1_INTERPOLATION_MODE}}</strong> for more info.? + <p> To stretch an image, each pixel in the original image must be mapped to a group of pixels in the larger image. To shrink an image, groups of pixels in the original image must be mapped to single pixels in the smaller image. The effectiveness of the algorithms that perform these mappings determines the quality of a scaled image. Algorithms that produce higher-quality scaled images tend to require more processing time. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} </strong>provides faster but lower-quality interpolation, while <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> provides higher-quality interpolation. </p> + + + + <p>Specifies whether text snapping is suppressed or clipping to the layout rectangle is enabled. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>Text is not vertically snapped to pixel boundaries. This setting is recommended for text that is being animated. </p> </dd> + + + <dd> <p>Text is clipped to the layout rectangle.</p> </dd> + + + <dd> <p>Text is vertically snapped to pixel boundaries and is not clipped to the layout rectangle. </p> </dd> + + + <dd> <p>In Windows?8.1 and later, text is rendered using color versions of glyphs, if defined by the font.</p> </dd> + + + <dd> <p>Bitmap origins of color glyph bitmaps are not snapped.</p> </dd> + + + + + <p>Specifies whether an arc should be greater than 180 degrees.</p> + + + <dd> <p> An arc's sweep should be 180 degrees or less.</p> </dd> + + + <dd> <p> An arc's sweep should be 180 degrees or greater.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes the sequence of dashes and gaps in a stroke. </p> + <p>The following illustration shows several available dash styles. </p> + + + <dd> <p>A solid line with no breaks.</p> </dd> + + + <dd> <p>A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH}}</strong> is {2, 2}.</p> </dd> + + + <dd> <p>A dot followed by a longer gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DOT}}</strong> is {0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT}}</strong> is {2, 2, 0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT_DOT}}</strong> is {2, 2, 0, 2, 0, 2}.</p> </dd> + + + <dd> <p>The dash pattern is specified by an array of floating-point values.</p> </dd> + + + + + <p>Describes the shape that joins two lines or segments. </p> + <p> A miter limit affects how sharp miter joins are allowed to be. If the line join style is <strong>{{D2D1_LINE_JOIN_MITER_OR_BEVEL}}</strong>, then the join will be mitered with regular angular vertices if it doesn't extend beyond the miter limit; otherwise, the line join will be beveled.</p><p>The following illustration shows different line join settings for the same stroked path geometry. </p><p></p> + + + <dd> <p>Regular angular vertices. </p> </dd> + + + <dd> <p>Beveled vertices. </p> </dd> + + + <dd> <p>Rounded vertices. </p> </dd> + + + <dd> <p>Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices. </p> </dd> + + + + + <p>Specifies the different methods by which two geometries can be combined.</p> + <p>The following illustration shows the different geometry combine modes. +</p> + + + <dd> <p>The two regions are combined by taking the union of both. Given two geometries, <em>A</em> and <em>B</em>, the resulting geometry is geometry <em>A</em> + geometry <em>B</em>.</p> </dd> + + + <dd> <p>The two regions are combined by taking their intersection. The new area consists of the overlapping region between the two geometries. </p> </dd> + + + <dd> <p>The two regions are combined by taking the area that exists in the first region but not the second and the area that exists in the second region but not the first. Given two geometries, <em>A</em> and <em>B</em>, the new region consists of (<em>A</em>-<em>B</em>) + (<em>B</em>-<em>A</em>). </p> </dd> + + + <dd> <p>The second region is excluded from the first. Given two geometries, <em>A</em> and <em>B</em>, the area of geometry <em>B</em> is removed from the area of geometry <em>A</em>, producing a region that is <em>A</em>-<em>B</em>.</p> </dd> + + + + + <p>Describes how one geometry object is spatially related to another geometry object. </p> + + + <dd> <p>The relationship between the two geometries cannot be determined. This value is never returned by any {{D2D}} method. </p> </dd> + + + <dd> <p>The two geometries do not intersect at all.</p> </dd> + + + <dd> <p>The instance geometry is entirely contained by the passed-in geometry.</p> </dd> + + + <dd> <p>The instance geometry entirely contains the passed-in geometry.</p> </dd> + + + <dd> <p>The two geometries overlap but neither completely contains the other. </p> </dd> + + + + + <p>Specifies how a geometry is simplified to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is filled or hollow. </p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is open or closed. </p> + + + + <p>Indicates whether a segment should be stroked and whether the join between this segment and the previous one should be smooth. This enumeration allows a bitwise combination of its member values. </p> + + + <dd> <p>The segment is joined as specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface, and it is stroked. </p> </dd> + + + <dd> <p>The segment is not stroked.</p> </dd> + + + <dd> <p>The segment is always joined with the one preceding it using a round line join, regardless of which <strong>{{D2D1_LINE_JOIN}}</strong>enumeration is specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface. If this segment is the first segment and the figure is closed, a round line join is used to connect the closing segment with the first segment. If the figure is not closed, this setting has no effect on the first segment of the figure. If <strong>{{ID2D1SimplifiedGeometrySink::SetSegmentFlags}}</strong> is called just before <strong>{{ID2D1SimplifiedGeometrySink::EndFigure}}</strong>, the join between the closing segment and the last explicitly specified segment is affected.</p> </dd> + + + + + <p>Defines the direction that an elliptical arc is drawn. </p> + + + <dd> <p> Arcs are drawn in a counterclockwise (negative-angle) direction. </p> </dd> + + + <dd> <p> Arcs are drawn in a clockwise (positive-angle) direction. </p> </dd> + + + + + <p>Specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry. </p> + <p>Use the <strong>{{D2D1_FILL_MODE}}</strong> enumeration when creating an <strong>{{ID2D1GeometryGroup}}</strong> with the <strong>CreateGeometryGroup</strong> method, or when modifying the fill mode of an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> with the <strong>{{ID2D1SimplifiedGeometrySink::SetFillMode}}</strong> method.</p><p>Direct2D fills the interior of a path by using one of the two fill modes specified by this enumeration: <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) or <strong>{{D2D1_FILL_MODE_WINDING}}</strong> (winding). Because the modes determine how to fill the interior of a closed shape, all shapes are treated as closed when they are filled. If there is a gap in a segment in a shape, draw an imaginary line to close it. </p><p> To see the difference between the winding and alternate fill modes, assume that you have four circles with the same center and a different radius, as shown in the following illustration. The first one has the radius of 25, the second 50, the third 75, and the fourth 100.</p><p>The following illustration shows the shape filled by using the alternate fill mode. Notice that the center and third ring are not filled. This is because a ray drawn from any point in either of those two rings passes through an even number of segments. </p><p>The following illustration explains this process. </p><p>The following illustration shows how the same shape is filled when the winding fill mode is specified. </p><p>Notice that all the rings are filled. This is because all the segments run in the same direction, so a ray drawn from any point will cross one or more segments, and the sum of the crossings will not equal zero. </p><p>The following illustration explains this process. The red arrows represent the direction in which the segments are drawn and the black arrow represents an arbitrary ray that runs from a point in the innermost ring. Starting with a value of zero, for each segment that the ray crosses, a value of one is added for every clockwise intersection. All points lie in the fill region in this illustration, because the count does not equal zero. </p> + + + <dd> <p>Determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region. </p> </dd> + + + <dd> <p>Determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path. </p> </dd> + + + + + <p>Specifies options that can be applied when a layer resource is applied to create a layer. </p><strong>Note</strong>??Starting in Windows?8, the <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> option is no longer supported. See <strong>{{D2D1_LAYER_OPTIONS1}}</strong> for Windows?8 layer options.? + <p>ClearType antialiasing must use the current contents of the render target to blend properly. When a pushed layer requests initializing for ClearType, Direct2D copies the current contents of the render target into the layer so that ClearType antialiasing can be performed. Rendering ClearType text into a transparent layer does not produce the desired results.</p><p>A small performance hit from re-copying content occurs when <strong>{{ID2D1RenderTarget::Clear}}</strong> is called.</p> + + + + <p>Describes whether a window is occluded. </p> + <p>If the window was occluded the last time <strong>EndDraw</strong> was called, the next time the render target calls <strong>CheckWindowState</strong>, it returns <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to check the current window state, call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This will ensure that your next call to <strong>CheckWindowState</strong> state returns the actual window state.</p> + + + <dd> <p>The window is not occluded.</p> </dd> + + + <dd> <p>The window is occluded.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes the minimum DirectX support required for hardware rendering by a render target.</p> + + + <dd> <p>Direct2D determines whether the video card provides adequate hardware rendering support.</p> </dd> + + + <dd> <p>The video card must support DirectX 9.</p> </dd> + + + <dd> <p>The video card must support DirectX 10. </p> </dd> + + + + + <p> Describes how a render target is remoted and whether it should be {{GDI}}-compatible. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target attempts to use Direct3D command-stream remoting and uses bitmap remoting if stream remoting fails. The render target is not {{GDI}}-compatible.</p> </dd> + + + <dd> <p>The render target renders content locally and sends it to the terminal services client as a bitmap. </p> </dd> + + + <dd> <p>The render target can be used efficiently with {{GDI}}.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Specifies additional features supportable by a compatible render target when it is created. This enumeration allows a bitwise combination of its member values.</p> + <p>Use this enumeration when creating a compatible render target with the <strong>CreateCompatibleRenderTarget</strong> method. For more information about compatible render targets, see the Render Targets Overview. </p><p>The <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> option may only be requested if the parent render target was created with <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> (for most render targets) or <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> (for render targets created by the <strong>CreateCompatibleRenderTarget</strong> method).</p> + + + <dd> <p>The render target supports no additional features.</p> </dd> + + + <dd> <p>The render target supports interoperability with the Windows Graphics Device Interface ({{GDI}}). </p> </dd> + + + + + <p> Specifies how a device context is initialized for {{GDI}} rendering when it is retrieved from the render target.</p> + <p>Use this enumeration with the <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> method to specify how the device context is initialized for {{GDI}} rendering.</p> + + + <dd> <p>The current contents of the render target are copied to the device context when it is initialized. </p> </dd> + + + <dd> <p>The device context is cleared to transparent black when it is initialized.</p> </dd> + + + + + <p>Indicates the type of information provided by the Direct2D Debug Layer. </p> + <p>To receive debugging messages, you must install the Direct2D Debug Layer.</p> + + + + <p>Specifies whether Direct2D provides synchronization for an <strong>{{ID2D1Factory}}</strong> and the resources it creates, so that they may be safely accessed from multiple threads. </p> + <p>When you create a factory, you can specify whether it is multithreaded or singlethreaded. A singlethreaded factory provides no serialization against any other single threaded instance within Direct2D, so this mechanism provides a very large degree of scaling on the {{CPU}}.</p><p>You can also create a multithreaded factory instance. In this case, the factory and all derived objects can be used from any thread, and each render target can be rendered to independently. Direct2D serializes calls to these objects, so a single multithreaded Direct2D instance won't scale as well on the {{CPU}} as many single threaded instances. However, the resources can be shared within the multithreaded instance.</p><p>Note the qualifier "On the {{CPU}}": {{GPUs}} generally take advantage of fine-grained parallelism more so than {{CPUs}}. For example, multithreaded calls from the {{CPU}} might still end up being serialized when being sent to the {{GPU}}; however, a whole bank of pixel and vertex shaders will run in parallel to perform the rendering.</p> + + + + <p>Describes the pixel format and dpi of a bitmap.</p> + + + <dd> <p>The bitmap's pixel format and alpha mode.</p> </dd> + + + <dd> <p>The horizontal dpi of the bitmap.</p> </dd> + + + <dd> <p>The vertical dpi of the bitmap.</p> </dd> + + + + + <p> Contains the position and color of a gradient stop. </p> + <p>Gradient stops can be specified in any order if they are at different positions. Two stops may share a position. In this case, the first stop specified is treated as the "low" stop (nearer 0.0f) and subsequent stops are treated as "higher" (nearer 1.0f). This behavior is useful if a caller wants an instant transition in the middle of a stop.</p><p>Typically, there are at least two points in a collection, although creation with only one stop is permitted. For example, one point is at position 0.0f, another point is at position 1.0f, and additional points are distributed in the [0, 1] range. Where the gradient progression is beyond the range of [0, 1], the stops are stored, but may affect the gradient. </p><p>When drawn, the [0, 1] range of positions is mapped to the brush, in a brush-dependent way. For details, see <strong>{{ID2D1LinearGradientBrush}}</strong> and <strong>{{ID2D1RadialGradientBrush}}</strong>. </p><p>Gradient stops with a position outside the [0, 1] range cannot be seen explicitly, but they can still affect the colors produced in the [0, 1] range. For example, a two-stop gradient {{0.0f, Black}, {2.0f, White}} is indistinguishable visually from {{0.0f, Black}, {1.0f, Mid-level gray}}. Also, the colors are clamped before interpolation.</p> + + + <dd> <p>A value that indicates the relative position of the gradient stop in the brush. This value must be in the [0.0f, 1.0f] range if the gradient stop is to be seen explicitly. </p> </dd> + + + <dd> <p>The color of the gradient stop.</p> </dd> + + + + + <p> Describes the opacity and transformation of a brush.</p> + <p>This structure is used when creating a brush. For convenience, Direct2D provides the <strong>{{D2D1::BrushProperties}}</strong> function for creating <strong>{{D2D1_BRUSH_PROPERTIES}}</strong> structures.</p><p>After creating a brush, you can change its opacity or transform by calling the <strong>SetOpacity</strong> or <strong>SetTransform</strong> methods.</p> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the degree of opacity of the brush.</p> </dd> + + + <dd> <p>The transformation that is applied to the brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p> Contains the starting point and endpoint of the gradient axis for an <strong>{{ID2D1LinearGradientBrush}}</strong>. </p> + <p>Use this method when creating new <strong>{{ID2D1LinearGradientBrush}}</strong> objects with the <strong>CreateLinearGradientBrush</strong> method. For convenience, Direct2D provides the <strong>{{D2D1::LinearGradientBrushProperties}}</strong> helper function for creating new <strong>{{D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES}}</strong> structures.</p><p>The following illustration shows how a linear gradient changes as you change its start and end points. For the first gradient, the start point is set to (0,0) and the end point to (150, 50); this creates a diagonal gradient that starts at the upper-left corner and extends to the lower-right corner of the area being painted. When you set the start point to (0, 25) and the end point to (150, 25), a horizontal gradient is created. Similarly, setting the start point to (75, 0) and the end point to (75, 50) creates a vertical gradient. Setting the start point to (0, 50) and the end point to (150, 0) creates a diagonal gradient that starts at the lower-left corner and extends to the upper-right corner of the area being painted.</p><p></p> + + + + <p> Contains the gradient origin offset and the size and position of the gradient ellipse for an <strong>{{ID2D1RadialGradientBrush}}</strong>. </p> + <p>Different values for <em>center</em>, <em>gradientOriginOffset</em>, <em>radiusX</em> and/or <em>radiusY</em> produce different gradients. The following illustration shows several radial gradients that have different gradient origin offsets, creating the appearance of the light illuminating the circles from different angles.</p><p></p><p>For convenience, Direct2D provides the <strong>{{D2D1::RadialGradientBrushProperties}}</strong> function for creating new <strong>{{D2D1_RADIAL_GRADIENT_BRUSH}}</strong> structures.</p> + + + + <p>Represents a cubic bezier segment drawn between two points.</p> + <p> A cubic Bezier curve is defined by four points: a start point, an end point (<em>point3</em>), and two control points (<em>point1</em> and <em>point2</em>). A Bezier segment does not contain a property for the starting point of the curve; it defines only the end point. The beginning point of the curve is the current point of the path to which the Bezier curve is added.</p><p> The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line toward themselves and producing a curve. The first control point, <em>point1</em>, affects the beginning portion of the curve; the second control point, <em>point2</em>, affects the ending portion of the curve. </p><strong>Note</strong>??The curve doesn't necessarily pass through either of the control points; each control point moves its portion of the line toward itself, but not through itself.? + + + <dd> <p>The first control point for the Bezier segment.</p> </dd> + + + <dd> <p>The second control point for the Bezier segment.</p> </dd> + + + <dd> <p>The end point for the Bezier segment.</p> </dd> + + + + + <p>Contains the three vertices that describe a triangle.</p> + + + <dd> <p>The first vertex of a triangle.</p> </dd> + + + <dd> <p>The second vertex of a triangle.</p> </dd> + + + <dd> <p>The third vertex of a triangle.</p> </dd> + + + + + <p>Describes an elliptical arc between two points.</p> + + + <dd> <p>The end point of the arc.</p> </dd> + + + <dd> <p>The x-radius and y-radius of the arc.</p> </dd> + + + <dd> <p>A value that specifies how many degrees in the clockwise direction the ellipse is rotated relative to the current coordinate system.</p> </dd> + + + <dd> <p>A value that specifies whether the arc sweep is clockwise or counterclockwise.</p> </dd> + + + <dd> <p>A value that specifies whether the given arc is larger than 180 degrees.</p> </dd> + + + + + <p> Contains the control point and end point for a quadratic Bezier segment.</p> + + + <dd> <p>The control point of the quadratic Bezier segment.</p> </dd> + + + <dd> <p>The end point of the quadratic Bezier segment.</p> </dd> + + + + + <p> Contains the center point, x-radius, and y-radius of an ellipse.</p> + + + <dd> <p>The center point of the ellipse.</p> </dd> + + + <dd> <p>The X-radius of the ellipse.</p> </dd> + + + <dd> <p>The Y-radius of the ellipse.</p> </dd> + + + + + <p> Contains the dimensions and corner radii of a rounded rectangle.</p> + <p>Each corner of the rectangle specified by the <em>rect</em> is replaced with a quarter ellipse, with a radius in each direction specified by <em>radiusX</em> and <em>radiusY</em>.</p><p> If the <em>radiusX</em> is greater than or equal to half the width of the rectangle, and the <em>radiusY</em> is greater than or equal to one-half the height, the rounded rectangle is an ellipse with the same width and height of the <em>rect</em>. </p><p>Even when both <em>radiuX</em> and <em>radiusY</em> are zero, the rounded rectangle is different from a rectangle., When stroked, the corners of the rounded rectangle are roundly joined, not mitered (square). </p> + + + <dd> <p>The coordinates of the rectangle.</p> </dd> + + + <dd> <p>The x-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + <dd> <p>The y-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + + + <p> Describes the stroke that outlines a shape. </p> + <p>The following illustration shows different <em>dashOffset</em> values for the same custom dash style.</p><p></p> + + + <dd> <p>The cap applied to the start of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The cap applied to the end of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The shape at either end of each dash segment.</p> </dd> + + + <dd> <p>A value that describes how segments are joined. This value is ignored for a vertex if the segment flags specify that the segment should have a smooth join. </p> </dd> + + + <dd> <p>The limit of the thickness of the join on a mitered corner. This value is always treated as though it is greater than or equal to 1.0f. </p> </dd> + + + <dd> <p>A value that specifies whether the stroke has a dash pattern and, if so, the dash style. </p> </dd> + + + <dd> <p>A value that specifies an offset in the dash sequence. A positive dash offset value shifts the dash pattern, in units of stroke width, toward the start of the stroked geometry. A negative dash offset value shifts the dash pattern, in units of stroke width, toward the end of the stroked geometry.</p> </dd> + + + + + <p> Contains the content bounds, mask information, opacity settings, and other options for a layer resource. </p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p> A value that specifies whether the layer intends to render text with ClearType antialiasing.</p> </dd> + + + + + <p> Contains rendering options (hardware or software), pixel format, {{DPI}} information, remoting options, and Direct3D support requirements for a render target. </p> + <p>Use this structure when creating a render target, or use it with the <strong>{{ID2D1RenderTarget::IsSupported}}</strong> method to check the properties supported by an existing render target.</p><p>As a convenience, Direct2D provides the <strong>{{D2D1::RenderTargetProperties}}</strong> helper function for creating <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structures. An easy way to create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that works for most render targets is to call the function without specifying any parameters. Doing so creates a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that has its fields set to default values. For more information, see <strong>{{D2D1::RenderTargetProperties}}</strong>.</p><p>Not all render targets support hardware rendering. For a list, see the Render Targets Overview.</p> + + + <dd> <p>A value that specifies whether the render target should force hardware or software rendering. A value of <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong> specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that {{WIC}} bitmap render targets do not support hardware rendering.</p> </dd> + + + <dd> <p>The pixel format and alpha mode of the render target. You can use the <strong>{{D2D1::PixelFormat}}</strong> function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>The horizontal {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>The vertical {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>A value that specifies how the render target is remoted and whether it should be {{GDI}}-compatible. Set to <strong>{{D2D1_RENDER_TARGET_USAGE_NONE}}</strong> to create a render target that is not compatible with {{GDI}} and uses Direct3D command-stream remoting if it is available. </p> </dd> + + + <dd> <p>A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the <strong>type </strong> member is set to <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong>; if <strong>type </strong> is set to to <strong>{{D2D1_RENDER_TARGET_TYPE_HARDWARE}}</strong>, render target creation fails. A value of <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating <strong>{{ID2D1HwndRenderTarget}}</strong> and <strong>{{ID2D1DCRenderTarget}}</strong> objects.</p> </dd> + + + + + <p> Contains the {{HWND}}, pixel size, and presentation options for an <strong>{{ID2D1HwndRenderTarget}}</strong>.</p> + <p>Use this structure when you call the <strong>CreateHwndRenderTarget</strong> method to create a new <strong>{{ID2D1HwndRenderTarget}}</strong>.</p><p>For convenience, Direct2D provides the <strong>{{D2D1::HwndRenderTargetProperties}}</strong> function for creating new <strong>{{D2D1_HWND_RENDER_TARGET_PROPERTIES}}</strong> structures.</p> + + + + <p>Describes the drawing state of a render target. </p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Contains the debugging level of an <strong>{{ID2D1Factory}}</strong> object. </p> + <p>To enable debugging, you must install the Direct2D Debug Layer.</p> + + + + <p> Describes a geometric path that does not contain quadratic bezier curves or arcs. </p> + <p>A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the <strong>BeginFigure</strong> method and specify the figure's start point, then use <strong>AddLines</strong> and <strong>AddBeziers</strong> to add line and Bezier segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p><p>To create geometry paths that can contain arcs and quadratic Bezier curves, use an <strong>{{ID2D1GeometrySink}}</strong>.</p> + + + + <p>Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. </p> + <p>The fill mode defaults to {{D2D1_FILL_MODE_ALTERNATE}}. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Not doing will put the geometry sink in an error state. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The method used to determine whether a given point is part of the geometry.</p> </dd> + + + + + <p>Specifies stroke and join options to be applied to new segments added to the geometry sink. </p> + <p>After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Stroke and join options to be applied to new segments added to the geometry sink.</p> </dd> + + + + + <p>Starts a new figure at the specified point. </p> + <p>If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point at which to begin the new figure.</p> </dd> + + + <dd> <p>Whether the new figure should be hollow or filled.</p> </dd> + + + + + <p> Creates a sequence of lines using the specified points and adds them to the geometry sink.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. </p> </dd> + + + <dd> <p>The number of points in the <em>points</em> array.</p> </dd> + + + + + <p>Creates a sequence of cubic Bezier curves and adds them to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.</p> </dd> + + + <dd> <p>The number of Bezier segments in the <em>beziers</em> array.</p> </dd> + + + + + <p> Ends the current figure; optionally, closes it.</p> + <p>Calling this method without a matching call to <strong>BeginFigure</strong> places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the <strong>Close</strong> method is called.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by <strong>BeginFigure</strong>.</p> </dd> + + + + + <p>Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. </p> + <p>Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one <strong>EndFigure</strong> call for each call to <strong>BeginFigure</strong>.</p><p>After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Forces the factory to refresh any system defaults that it might have changed since factory creation.</p> + <p>You should call this method before calling the <strong>GetDesktopDpi</strong> method, to ensure that the system {{DPI}} is current.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the current desktop dots per inch ({{DPI}}). To refresh this value, call <strong>ReloadSystemMetrics</strong>.</p> + <p>Use this method to obtain the system {{DPI}} when setting physical pixel values, such as when you specify the size of a window.</p> + <p>This method does not return a value.</p> + + + + <p> Creates an <strong>{{ID2D1RectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1RoundedRectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1EllipseGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1GeometryGroup}}</strong>, which is an object that holds other geometries.</p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a <strong>{{ID2D1GeometryGroup}}</strong> object, call the <strong>CreateGeometryGroup</strong> method on the <strong>{{ID2D1Factory}}</strong> object, passing in the <em>fillMode</em> with possible values of <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) and <strong>{{D2D1_FILL_MODE_WINDING}}</strong>, an array of geometry objects to add to the geometry group, and the number of elements in this array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Transforms the specified geometry and stores the result as an <strong>{{ID2D1TransformedGeometry}}</strong> object. </p> + <p>Like other resources, a transformed geometry inherits the resource space and threading policy of the factory that created it. This object is immutable.</p><p>When stroking a transformed geometry with the <strong>DrawGeometry</strong> method, the stroke width is not affected by the transform applied to the geometry. The stroke width is only affected by the world transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an empty <strong>{{ID2D1PathGeometry}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1StrokeStyle}}</strong> that describes start cap, dash pattern, and other features of a stroke.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1DrawingStateBlock}}</strong> that can be used with the <strong>SaveDrawingState</strong> and <strong>RestoreDrawingState</strong> methods of a render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that renders to a Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>You must use <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> for the <strong>minLevel</strong> member of the <em>renderTargetProperties</em> parameter with this method.</p><p>Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p><ul> <li></li> </ul> <p><strong>Note</strong>?? This method isn't supported on Windows Phone and will fail when called on a device with error code 0x8899000b (?There is no hardware rendering device available for this operation?). Because the Windows Phone Emulator supports {{WARP}} rendering, this method will fail when called on the emulator with a different error code, 0x88982f80 (wincodec_err_unsupportedpixelformat).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap that receives the rendering output of the render target.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method. </p> </dd> + + + + + <p>Creates an <strong>{{ID2D1HwndRenderTarget}}</strong>, a render target that renders to a window.</p> + <p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that draws to a DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> + <p>To write to a Direct3D surface, you obtain an {{IDXGISurface}} and pass it to the <strong>CreateDxgiSurfaceRenderTarget</strong> method to create a {{DXGI}} surface render target; you can then use the {{DXGI}} surface render target to draw 2-D content to the {{DXGI}} surface. </p><p>A {{DXGI}} surface render target is a type of <strong>{{ID2D1RenderTarget}}</strong>. Like other Direct2D render targets, you can use it to create resources and issue drawing commands. </p><p>The {{DXGI}} surface render target and the {{DXGI}} surface must use the same {{DXGI}} format. If you specify the {{DXGI_FORMAT_UNKOWN}} format when you create the render target, it will automatically use the surface's format.</p><p>The {{DXGI}} surface render target does not perform {{DXGI}} surface synchronization. </p><p>For more information about creating and using {{DXGI}} surface render targets, see the Direct2D and Direct3D Interoperability Overview.</p><p>To work with Direct2D, the Direct3D device that provides the {{IDXGISurface}} must be created with the <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag.</p><p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{IDXGISurface}} to which the render target will draw.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method.</p> </dd> + + + + + <p>Creates a render target that draws to a Windows Graphics Device Interface ({{GDI}}) device context.</p> + <p>Before you can render with a {{DC}} render target, you must use the render target's <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. Do this for each different {{DC}} and whenever there is a change in the size of the area you want to draw to.</p><p>To enable the {{DC}} render target to work with {{GDI}}, set the render target's {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>.</p><p>Your application should create render targets once and hold on to them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. To enable the device context ({{DC}}) render target to work with {{GDI}}, set the {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and the alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>. For more information about pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, <em>dcRenderTarget</em> contains the address of the reference to the <strong>{{ID2D1DCRenderTarget}}</strong> created by the method.</p> </dd> + + + + + <p>Represents an object that can receive drawing commands. Interfaces that inherit from <strong>{{ID2D1RenderTarget}}</strong> render the drawing commands they receive in different ways. </p> + <p>Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p> + + + + <p>Creates a Direct2D bitmap from a reference to in-memory source data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The dimension of the bitmap to create in pixels.</p> </dd> + + + <dd> <p>A reference to the memory location of the image data, or <strong>{{NULL}}</strong> to create an uninitialized bitmap.</p> </dd> + + + <dd> <p>The byte count of each scanline, which is equal to (the image width in pixels ? the number of bytes per pixel) + memory padding. If <em>srcData</em> is <strong>{{NULL}}</strong>, this value is ignored. (Note that pitch is also sometimes called <em>stride</em>.)</p> </dd> + + + <dd> <p>The pixel format and dots per inch ({{DPI}}) of the bitmap to create.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a reference to the new bitmap. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> by copying the specified Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>Before Direct2D can load a {{WIC}} bitmap, that bitmap must be converted to a supported pixel format and alpha mode. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> whose data is shared with another resource.</p> + <p>The <strong>CreateSharedBitmap</strong> method is useful for efficiently reusing bitmap data and can also be used to provide interoperability with Direct3D. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1BitmapBrush}}</strong> from the specified bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new <strong>{{ID2D1SolidColorBrush}}</strong> that has the specified color and a base opacity of 1.0f. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1GradientStopCollection}}</strong> from the specified gradient stops that uses the <strong>{{D2D1_GAMMA_2_2}}</strong> color interpolation gamma and the clamp extend mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1LinearGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1RadialGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a new bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target and has the same size, {{DPI}}, and pixel format (but not alpha mode) as the current render target. </p> + <p>The bitmap render target created by this method is not compatible with {{GDI}} and has an alpha mode of <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to a new bitmap render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. </p> + <p>Regardless of whether a size is initially specified, the layer automatically resizes as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when <strong>PushLayer</strong> is called.</p> </dd> + + + <dd> <p>When the method returns, contains a reference to a reference to the new layer. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Create a mesh that uses triangles to describe a shape.</p> + <p>To populate a mesh, use its <strong>Open</strong> method to obtain an <strong>{{ID2D1TessellationSink}}</strong>. To draw the mesh, use the render target's <strong>FillMesh</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the new mesh.</p> </dd> + + + + + <p>Draws a line between the specified points using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawLine</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The start point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The end point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the line's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid line.</p> </dd> + + + + + <p>Draws the outline of a rectangle that has the specified dimensions and stroke style. </p> + <p>When this method fails, it does not return an error code. To determine whether a drawing method (such as <strong>DrawRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimension of the rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's interior.</p> </dd> + + + + + <p> Draws the outline of the specified rounded rectangle using the specified stroke style.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rounded rectangle's outline. </p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of the rounded rectangle's stroke, or <strong>{{NULL}}</strong> to paint a solid stroke. The default value is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Paints the interior of the specified rounded rectangle.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the rounded rectangle.</p> </dd> + + + + + <p>Draws the outline of the specified ellipse using the specified stroke style. </p> + <p>The <strong>DrawEllipse</strong> method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius of the ellipse to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the ellipse's outline.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the ellipse's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified ellipse. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius, in device-independent pixels, of the ellipse to paint.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the ellipse.</p> </dd> + + + + + <p>Draws the outline of the specified geometry using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to draw.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the geometry's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified geometry. </p> + <p>If the <em>opacityBrush</em> parameter is not <strong>{{NULL}}</strong>, the alpha value of each pixel of the mapped <em>opacityBrush</em> is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by <em>brush</em>. +</p><p>When this method fails, it does not return an error code. To determine whether a drawing operation (such as <strong>FillGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to paint.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's interior.</p> </dd> + + + <dd> <p>The opacity mask to apply to the geometry, or <strong>{{NULL}}</strong> for no opacity mask. If an opacity mask (the <em>opacityBrush</em> parameter) is specified, <em>brush</em> must be an <strong>{{ID2D1BitmapBrush}}</strong> that has its x- and y-extend modes set to <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong>. For more information, see the Remarks section. </p> </dd> + + + + + <p> Paints the interior of the specified mesh.</p> + <p>The current antialias mode of the render target must be <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> when <strong>FillMesh</strong> is called. To change the render target's antialias mode, use the <strong>SetAntialiasMode</strong> method.</p><p><strong>FillMesh</strong> does not expect a particular winding order for the triangles in the <strong>{{ID2D1Mesh}}</strong>; both clockwise and counter-clockwise will work. </p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillMesh</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The mesh to paint.</p> </dd> + + + <dd> <p>The brush used to paint the mesh.</p> </dd> + + + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + <p>For this method to work properly, the render target must be using the <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> antialiasing mode. You can set the antialiasing mode by calling the <strong>{{ID2D1RenderTarget::SetAntialiasMode}}</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillOpacityMask</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + + + + <p>Draws the specified bitmap after scaling it to the size of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawBitmap</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to render.</p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn. If the rectangle is not well-ordered, nothing is drawn, but the render target does not enter an error state.</p> </dd> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the opacity value to be applied to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. Default is 1.0f.</p> </dd> + + + <dd> <p>The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong>. </p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to draw; <strong>{{NULL}}</strong> to draw the entire bitmap.</p> </dd> + + + + + <p>Draws the specified text using the format information provided by an <strong>{{IDWriteTextFormat}}</strong> object.</p> + <p>To create an <strong>{{IDWriteTextFormat}}</strong> object, create an <strong>{{IDWriteFactory}}</strong> and call its <strong>CreateTextFormat</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawText</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the formatted text described by the specified <strong>{{IDWriteTextLayout}}</strong> object.</p> + <p>When drawing the same text repeatedly, using the <strong>DrawTextLayout</strong> method is more efficient than using the <strong>DrawText</strong> method because the text doesn't need to be formatted and the layout processed with each call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawTextLayout</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the specified glyphs. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGlyphRun</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin, in device-independent pixels, of the glyphs' baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. </p> </dd> + + + + + Applies the specified transform to the render target, replacing the existing transformation. All subsequent drawing operations occur in the transformed space. + + + + <p>Gets the current transform of the render target. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this returns, contains the current transform of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Sets the antialiasing mode of the render target. The antialiasing mode applies to all subsequent drawing operations, excluding text and glyph drawing operations. </p> + <p>To specify the antialiasing mode for text and glyph operations, use the <strong>SetTextAntialiasMode</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode for future drawing operations. </p> </dd> + + + + + <p> Retrieves the current antialiasing mode for nontext drawing operations.</p> + <p>The current antialiasing mode for nontext drawing operations. </p> + + + + <p>Specifies the antialiasing mode to use for subsequent text and glyph drawing operations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode to use for subsequent text and glyph drawing operations.</p> </dd> + + + + + <p>Gets the current antialiasing mode for text and glyph drawing operations. </p> + <p>The current antialiasing mode for text and glyph drawing operations. </p> + + + + <p>Specifies text rendering options to be applied to all subsequent text and glyph drawing operations. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text rendering options to be applied to all subsequent text and glyph drawing operations; <strong>{{NULL}}</strong> to clear current text rendering options. </p> </dd> + + + + + <p>Retrieves the render target's current text rendering options. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, <em>textRenderingParams</em>contains the address of a reference to the render target's current text rendering options. </p> </dd> + + + + + <p>Specifies a label for subsequent drawing operations. </p> + <p>The labels specified by this method are printed by debug error messages. If no tag is set, the default value for each tag is 0.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Gets the label for subsequent drawing operations. </p> + <p>If the same address is passed for both parameters, both parameters receive the value of the second tag. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter. </p> </dd> + + + <dd> <p>When this method returns, contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter.</p> </dd> + + + + + <p>Adds the specified layer to the render target so that it receives all subsequent drawing operations until <strong>PopLayer</strong> is called. </p> + <p>The <strong>PushLayer</strong> method allows a caller to begin redirecting rendering to a layer. All rendering operations are valid in a layer. The location of the layer is affected by the world transform set on the render target. </p><p>Each <strong>PushLayer</strong> must have a matching <strong>PopLayer</strong> call. If there are more <strong>PopLayer</strong> calls than <strong>PushLayer</strong> calls, the render target is placed into an error state. If <strong>Flush</strong> is called before all outstanding layers are popped, the render target is placed into an error state, and an error is returned. The error state can be cleared by a call to <strong>EndDraw</strong>.</p><p>A particular <strong>{{ID2D1Layer}}</strong> resource can be active only at one time. In other words, you cannot call a <strong>PushLayer</strong> method, and then immediately follow with another <strong>PushLayer</strong> method with the same layer resource. Instead, you must call the second <strong>PushLayer</strong> method with different layer resources. +</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Stops redirecting drawing operations to the layer that is specified by the last <strong>PushLayer</strong> call. </p> + <p>A <strong>PopLayer</strong> must match a previous <strong>PushLayer</strong> call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Executes all pending drawing commands. </p> + <p>This command does not flush the Direct3D device context that is associated with the render target.</p><p>Calling this method resets the error state of the render target.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0).</p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Saves the current drawing state to the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the render target's drawing state to that of the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Specifies a rectangle to which all subsequent drawing operations are clipped. </p> + <p>The <em>clipRect</em> is transformed by the current world transform set on the render target. After the transform is applied to the <em>clipRect</em> that is passed in, the axis-aligned bounding box for the <em>clipRect</em> is computed. For efficiency, the contents are clipped to this axis-aligned bounding box and not to the original <em>clipRect</em> that is passed in. </p><p>The following diagrams show how a rotation transform is applied to the render target, the resulting <em>clipRect</em>, and a calculated axis-aligned bounding box.</p><ol> <li> <p>Assume the rectangle in the following illustration is a render target that is aligned to the screen pixels.</p> <p></p> </li> <li> <p>Apply a rotation transform to the render target. In the following illustration, the black rectangle represents the original render target and the red dashed rectangle represents the transformed render target.</p> <p></p> </li> <li> <p>After calling <strong>PushAxisAlignedClip</strong>, the rotation transform is applied to the <em>clipRect</em>. In the following illustration, the blue rectangle represents the transformed <em>clipRect</em>.</p> <p></p> </li> <li> <p>The axis-aligned bounding box is calculated. The green dashed rectangle represents the bounding box in the following illustration. All contents are clipped to this axis-aligned bounding box.</p> <p></p> </li> </ol><strong>Note</strong>??If rendering operations fail or if <strong>PopAxisAlignedClip</strong> is not called, clip rects may cause some artifacts on the render target. <strong>PopAxisAlignedClip</strong> can be considered a drawing operation that is designed to fix the borders of a clipping region. Without this call, the borders of a clipped area may be not antialiased or otherwise corrected.?<p>The <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> must match. Otherwise, the error state is set. For the render target to continue receiving new commands, you can call <strong>Flush</strong> to clear the error. </p><p>A <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> pair can occur around or within a PushLayer and PopLayer, but cannot overlap. For example, the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> is valid, but the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> is invalid.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The size and position of the clipping area, in device-independent pixels.</p> </dd> + + + <dd> <p>The antialiasing mode that is used to draw the edges of clip rects that have subpixel boundaries, and to blend the clip with the scene contents. The blending is performed once when the <strong>PopAxisAlignedClip</strong> method is called, and does not apply to each primitive within the layer. </p> </dd> + + + + + <p>Removes the last axis-aligned clip from the render target. After this method is called, the clip is no longer applied to subsequent drawing operations. </p> + <p>A <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> pair can occur around or within a <strong>PushLayer</strong>/<strong>PopLayer</strong> pair, but may not overlap. For example, a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> sequence is valid, but a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> sequence is not. </p><p><strong>PopAxisAlignedClip</strong> must be called once for every call to <strong>PushAxisAlignedClip</strong>.</p><p>For an example, see How to Clip with an Axis-Aligned Clip Rectangle.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>Direct2D interprets the <em>clearColor</em> as straight alpha (not premultiplied). If the render target's alpha mode is <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, the alpha channel of <em>clearColor</em> is ignored and replaced with 1.0f (fully opaque).</p><p>If the render target has an active clip (specified by <strong>PushAxisAlignedClip</strong>), the clear command is applied only to the area within the clip region.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The color to which the drawing area is cleared, or <strong>{{NULL}}</strong> for transparent black.</p> </dd> + + + + + <p>Initiates drawing on this render target. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p>BeginDraw and EndDraw are used to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an {{HRESULT}} indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing {{HRESULT}}. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate {{HRESULT}} and error information when <strong>EndDraw</strong> is called. +</p> + <p>This method does not return a value.</p> + + + + <p>Ends drawing operations on the render target and indicates the current error state and associated tags. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p> <strong>BeginDraw</strong> and <strong>EndDraw</strong> are use to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The <strong>BeginDraw</strong> method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an <strong>{{HRESULT}}</strong> indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing <strong>{{HRESULT}}</strong>. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate <strong>{{HRESULT}}</strong> and error information when <strong>EndDraw</strong> is called. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. </p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the pixel format and alpha mode of the render target. </p> + <p>The pixel format and alpha mode of the render target.</p> + + + + <p>Sets the dots per inch ({{DPI}}) of the render target. </p> + <p>This method specifies the mapping from pixel space to device-independent space for the render target. If both <em>dpiX</em> and <em>dpiY</em> are 0, the factory-read system {{DPI}} is chosen. If one parameter is zero and the other unspecified, the {{DPI}} is not changed.</p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A value greater than or equal to zero that specifies the horizontal {{DPI}} of the render target.</p> </dd> + + + <dd> <p>A value greater than or equal to zero that specifies the vertical {{DPI}} of the render target.</p> </dd> + + + + + <p>Return the render target's dots per inch ({{DPI}}).</p> + <p>This method indicates the mapping from pixel space to device-independent space for the render target. </p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the horizontal {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the vertical {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Returns the size of the render target in device-independent pixels.</p> + <p>The current size of the render target in device-independent pixels.</p> + + + + <p>Returns the size of the render target in device pixels.</p> + <p>The size of the render target in device pixels.</p> + + + + <p>Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.</p> + <p>This method returns the maximum texture size of the Direct3D device.</p><strong>Note</strong>??The software renderer and {{WARP}} devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? + <p> The maximum size, in pixels, of any one bitmap dimension supported by the render target.</p> + + + + <p>Indicates whether the render target supports the specified properties.</p> + <p>This method does not evaluate the {{DPI}} settings specified by the <em>renderTargetProperties</em> parameter.</p> + <p><strong>{{TRUE}}</strong> if the specified render target properties are supported by this render target; otherwise, <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The render target properties to test.</p> </dd> + + + + + <p>Renders to an intermediate texture created by the <strong>CreateCompatibleRenderTarget</strong> method. </p> + <p>An <strong>{{ID2D1BitmapRenderTarget}}</strong> writes to an intermediate texture. It's useful for creating patterns for use with an <strong>{{ID2D1BitmapBrush}}</strong> or caching drawing data that will be used repeatedly. </p><p>To write directly to a {{WIC}} bitmap instead, use the <strong>{{ID2D1Factory::CreateWicBitmapRenderTarget}}</strong> method. This method returns an <strong>{{ID2D1RenderTarget}}</strong> that writes to the specified {{WIC}} bitmap. </p> + + + + <p>Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations. </p> + <p>The {{DPI}} for the <strong>{{ID2D1Bitmap}}</strong> obtained from <strong>GetBitmap</strong> will be the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> when the render target was created. Changing the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> by calling <strong>SetDpi</strong> doesn't affect the {{DPI}} of the bitmap, even if <strong>SetDpi</strong> is called before <strong>GetBitmap</strong>. Using <strong>SetDpi</strong> to change the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> does affect how contents are rendered into the bitmap: it just doesn't affect the {{DPI}} of the bitmap retrieved by <strong>GetBitmap</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the bitmap for this render target. This bitmap can be used for drawing operations. </p> </dd> + + + + + <p>Populates an <strong>{{ID2D1Mesh}}</strong> object with triangles. </p> + + + + <p>Copies the specified triangles to the sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of <strong>{{D2D1_TRIANGLE}}</strong> structures that describe the triangles to add to the sink.</p> </dd> + + + <dd> <p>The number of triangles to copy from the <em>triangles</em> array.</p> </dd> + + + + + <p> Closes the sink and returns its error status.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a geometry resource and defines a set of helper methods for manipulating and measuring geometric shapes. Interfaces that inherit from <strong>{{ID2D1Geometry}}</strong> define specific shapes.</p> + <p>There are several types of Direct2D geometry objects: a simple geometry (<strong>{{ID2D1RectangleGeometry}}</strong>, <strong>{{ID2D1RoundedRectangleGeometry}}</strong>, or <strong>{{ID2D1EllipseGeometry}}</strong>), a path geometry (<strong>{{ID2D1PathGeometry}}</strong>), or a composite geometry (<strong>{{ID2D1GeometryGroup}}</strong> and <strong>{{ID2D1TransformedGeometry}}</strong>).</p><p> Direct2D geometries enable you to describe two-dimensional figures and also offer many uses, such as defining hit-test regions, clip regions, and even animation paths.</p><p>Direct2D geometries are immutable and device-independent resources created by <strong>{{ID2D1Factory}}</strong>. In general, you should create geometries once and retain them for the life of the application, or until they need to be modified. For more information about device-independent and device-dependent resources, see the Resources Overview.</p> + + + + Retrieves the bounds of the geometry. + + + + <p>Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The amount by which to widen the geometry by stroking its outline.</p> </dd> + + + <dd> <p>The style of the stroke that widens the geometry. +</p> </dd> + + + <dd> <p>A transform to apply to the geometry after the geometry is transformed and after the geometry has been stroked.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test for containment. +</p> </dd> + + + <dd> <p>The thickness of the stroke to apply. +</p> </dd> + + + <dd> <p>The style of stroke to apply.</p> </dd> + + + <dd> <p>The transform to apply to the stroked geometry. +</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. +</p> </dd> + + + + + <p>Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test. +</p> </dd> + + + <dd> <p>The transform to apply to the geometry prior to testing for containment, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a <strong>{{BOOL}}</strong> value that is <strong>{{TRUE}}</strong> if the area filled by the geometry contains <em>point</em>; otherwise, <strong>{{FALSE}}</strong>. +You must allocate storage for this parameter.</p> </dd> + + + + + <p>Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance.</p> + <p>When interpreting the returned <em>relation</em> value, it is important to remember that the member <strong>{{D2D1_GEOMETRY_RELATION_IS_CONTAINED}}</strong> of the <strong>{{D2D1_GEOMETRY_RELATION}}</strong> enumeration type means that this geometry is contained inside <em>inputGeometry</em>, not that this geometry contains <em>inputGeometry</em>. </p><p>For more information about how to interpret other possible return values, see <strong>{{D2D1_GEOMETRY_RELATION}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The geometry to test. </p> </dd> + + + <dd> <p>The transform to apply to <em>inputGeometry</em>, or <strong>{{NULL}}</strong>. +</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a value that describes how this geometry is related to <em>inputGeometry</em>. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry.</p> </dd> + + + <dd> <p>The <strong>{{ID2D1TessellationSink}}</strong> to which the tessellated is appended.</p> </dd> + + + + + <p>Combines this geometry with the specified geometry and stores the result in an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the outline of the geometry and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry before computing its area.</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter.</p> </dd> + + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + + + <p>Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry.</p> </dd> + + + <dd> <p>The transform to apply to the geometry before calculating the specified point and tangent.</p> </dd> + + + <dd> <p>The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Widens the geometry by the specified stroke and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines an object that paints an area. Interfaces that derive from <strong>{{ID2D1Brush}}</strong> describe how the area is painted. </p> + <p>An <strong>{{ID2D1BitmapBrush}}</strong> is a device-dependent resource: your application should create bitmap brushes after it initializes the render target with which the bitmap brush will be used, and recreate the bitmap brush whenever the render target needs recreated. (For more information about resources, see Resources Overview.)</p><p>Brush space in Direct2D is specified differently than in {{XPS}} and Windows Presentation Foundation ({{WPF}}). In Direct2D, brush space is not relative to the object being drawn, but rather is the current coordinate system of the render target, transformed by the brush transform, if present. To paint an object as it would be painted by a {{WPF}} brush, you must translate the brush space origin to the upper-left corner of the object's bounding box, and then scale the brush space so that the base tile fills the bounding box of the object.</p><p>For more information about brushes, see the Brushes Overview. </p> + + + + <p>Sets the degree of opacity of this brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> </dd> + + + + + <p> Sets the transformation applied to the brush.</p> + <p>When you paint with a brush, it paints in the coordinate space of the render target. Brushes do not automatically position themselves to align with the object being painted; by default, they begin painting at the origin (0, 0) of the render target. </p><p>You can "move" the gradient defined by an <strong>{{ID2D1LinearGradientBrush}}</strong> to a target area by setting its start point and end point. Likewise, you can move the gradient defined by an <strong>{{ID2D1RadialGradientBrush}}</strong> by changing its center and radii. </p><p>To align the content of an <strong>{{ID2D1BitmapBrush}}</strong> to the area being painted, you can use the <strong>SetTransform</strong> method to translate the bitmap to the desired location. This transform only affects the brush; it does not affect any other content drawn by the render target. </p><p>The following illustrations show the effect of using an <strong>{{ID2D1BitmapBrush}}</strong> to fill a rectangle located at (100, 100). The illustration on the left illustration shows the result of filling the rectangle without transforming the brush: the bitmap is drawn at the render target's origin. As a result, only a portion of the bitmap appears in the rectangle.</p><p>The illustration on the right shows the result of transforming the <strong>{{ID2D1BitmapBrush}}</strong> so that its content is shifted 50 pixels to the right and 50 pixels down. The bitmap now fills the rectangle.</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>The transformation to apply to this brush.</p> </dd> + + + + + <p>Gets the degree of opacity of this brush. </p> + <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> + + + + <p>Gets the transform applied to this brush. </p> + <p>When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform applied to this brush.</p> </dd> + + + + + <p>Represents a Direct2D drawing resource.</p> + + + + <p>Retrieves the factory associated with this resource.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the factory that created this resource. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + <p>An <strong>{{ID2D1Image}}</strong> is abstract. Concrete instances can be created through <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> and <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p><p> Images are evaluated lazily. If the type of image passed in is concrete, then the image can be directly sampled from. Other images can act only as a source of pixels and can produce content only as a result of calling <strong>{{ID2D1DeviceContext::DrawImage}}</strong>.</p> + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + <p>Returns the size, in device-independent pixels ({{DIPs}}), of the bitmap.</p> + <p>A {{DIP}} is 1/96?of an inch. To retrieve the size in device pixels, use the <strong>{{ID2D1Bitmap::GetPixelSize}}</strong> method.</p> + <p>The size, in {{DIPs}}, of the bitmap.</p> + + + + <p>Returns the size, in device-dependent units (pixels), of the bitmap.</p> + <p>The size, in pixels, of the bitmap.</p> + + + + <p>Retrieves the pixel format and alpha mode of the bitmap.</p> + <p>The pixel format and alpha mode of the bitmap.</p> + + + + <p>Return the dots per inch ({{DPI}}) of the bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The horizontal {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The vertical {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Copies the specified region from the specified bitmap into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>.</p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The bitmap to copy from.</p> </dd> + + + <dd> <p>The area of <em>bitmap</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from the specified render target into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>All clips and layers must be popped off of the render target before calling this method. The method returns <strong>{{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}}</strong> if any clips or layers are currently applied to the render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The render target that contains the region to copy.</p> </dd> + + + <dd> <p>The area of <em>renderTarget</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from memory into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. </p><p>If this method is passed invalid input (such as an invalid destination rectangle), can produce unpredictable results, such as a distorted image or device failure.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The data to copy.</p> </dd> + + + <dd> <p>The stride, or pitch, of the source bitmap stored in <em>srcData</em>. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding.</p> </dd> + + + + + <p>Represents an collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes.</p> + + + + + <p>Retrieves the number of gradient stops in the collection.</p> + <p>The number of gradient stops in the collection.</p> + + + + <p>Copies the gradient stops from the collection into an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> + <p>Gradient stops are copied in order of position, starting with the gradient stop with the smallest position value and progressing to the gradient stop with the largest position value.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates the gamma space in which the gradient stops are interpolated. </p> + <p>The gamma space in which the gradient stops are interpolated. </p> + + + + <p>Indicates the behavior of the gradient outside the normalized gradient range. </p> + <p>The behavior of the gradient outside the [0,1] normalized gradient range.</p> + + + + <p>Paints an area with a bitmap.</p> + <p> A bitmap brush is used to fill a geometry with a bitmap. Like all brushes, it defines an infinite plane of content. Because bitmaps are finite, the brush relies on an "extend mode" to determine how the plane is filled horizontally and vertically.</p> + + + + <p>Specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> </dd> + + + + + <p>Specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> </dd> + + + + + <p>Specifies the interpolation mode used when the brush bitmap is scaled or rotated.</p> + <p>This method sets the interpolation mode for a bitmap, which is an enum value that is specified in the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. {{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} represents nearest neighbor filtering. It looks up the nearest bitmap pixel to the current rendering pixel and chooses its exact color. {{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}} represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, bilinear interpolation positions the bitmap more precisely to the application requests, but blurs the bitmap in the process. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The interpolation mode used when the brush bitmap is scaled or rotated.</p> </dd> + + + + + <p>Specifies the bitmap source that this brush uses to paint. </p> + <p>This method specifies the bitmap source that this brush uses to paint. The bitmap is not resized or rescaled automatically to fit the geometry that it fills. The bitmap stays at its native size. To resize or translate the bitmap, use the <strong>SetTransform</strong> method to apply a transform to the brush. </p><p>The native size of a bitmap is the width and height in bitmap pixels, divided by the bitmap {{DPI}}. This native size forms the base tile of the brush. To tile a subregion of the bitmap, you must generate a new bitmap containing this subregion and use <strong>SetBitmap</strong> to apply it to the brush. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap source used by the brush.</p> </dd> + + + + + <p> Gets the method by which the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.</p> + + + + <p> Gets the method by which the brush vertically tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + + + + <p>Gets the interpolation method used when the brush bitmap is scaled or rotated. </p> + <p>This method gets the interpolation mode of a bitmap, which is specified by the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}}</strong> represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process. </p> + <p>The interpolation method used when the brush bitmap is scaled or rotated.</p> + + + + <p> Gets the bitmap source that this brush uses to paint.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address to a reference to the bitmap with which this brush paints.</p> </dd> + + + + + <p>Paints an area with a solid color. </p> + + + + + <p>Specifies the color of this solid color brush. </p> + <p>To help create colors, Direct2D provides the <strong>ColorF</strong> class. It offers several helper methods for creating colors and provides a set or predefined colors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The color of this solid color brush.</p> </dd> + + + + + <p> Retrieves the color of the solid color brush.</p> + <p>The color of this solid color brush.</p> + + + + <p>Paints an area with a linear gradient. </p> + <p>An <strong>{{ID2D1LinearGradientBrush}}</strong> paints an area with a linear gradient along a line between the brush start point and end point. The gradient, defined by the brush <strong>{{ID2D1GradientStopCollection}}</strong>, is extruded perpendicular to this line, and then transformed by a brush transform (if specified). </p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush start point and end point are also transformed. </p><p>It is possible to specify a gradient axis that does not completely fill the area that is being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong>, specified by the <strong>{{ID2D1GradientStopCollection}}</strong>, determines how the remaining area is painted. +</p> + + + + <p>Sets the starting coordinates of the linear gradient in the brush's coordinate space. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Sets the ending coordinates of the linear gradient in the brush's coordinate space.</p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the starting coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p>Retrieves the ending coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p> Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this linear gradient brush.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p> Paints an area with a radial gradient.</p> + <p>The <strong>{{ID2D1RadialGradientBrush}}</strong> is similar to the <strong>{{ID2D1LinearGradientBrush}}</strong> in that they both map a collection of gradient stops to a gradient. However, the linear gradient has a start and an end point to define the gradient vector, while the radial gradient uses an ellipse and a gradient origin to define its gradient behavior. To define the position and size of the ellipse, use the <strong>SetCenter</strong>, <strong>SetRadiusX</strong>, and <strong>SetRadiusY</strong> methods to specify the center, x-radius, and y-radius of the ellipse. The gradient origin is the center of the ellipse, unless a gradient offset is specified by using the <strong>SetGradientOriginOffset</strong> method.</p><p>The brush maps the gradient stop position 0.0f of the gradient origin, and the position 1.0f is mapped to the ellipse boundary. When the gradient origin is within the ellipse, the contents of the ellipse enclose the entire [0, 1] range of the brush gradient stops. If the gradient origin is outside the bounds of the ellipse, the brush still works, but its gradient is not well-defined.</p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps just one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush ellipse and gradient origin are also transformed.</p><p>It is possible to specify an ellipse that does not completely fill area being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong> and setting (specified by the brush <strong>{{ID2D1GradientStopCollection}}</strong>) determines how the remaining area is painted. +</p> + + + + <p>Specifies the center of the gradient ellipse in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The center of the gradient ellipse, in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the offset of the gradient origin relative to the gradient ellipse's center.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The offset of the gradient origin from the center of the gradient ellipse.</p> </dd> + + + + + <p> Specifies the x-radius of the gradient ellipse, in the brush's coordinate space.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The x-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the y-radius of the gradient ellipse, in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The y-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the center of the gradient ellipse. </p> + <p>The center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the offset of the gradient origin relative to the gradient ellipse's center. </p> + <p>The offset of the gradient origin from the center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the x-radius of the gradient ellipse. </p> + <p>The x-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the y-radius of the gradient ellipse. </p> + <p>The y-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this radial gradient brush object.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and additional information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + + + + + <p> Retrieves the type of shape used at the beginning of a stroke. </p> + <p>The type of shape used at the beginning of a stroke.</p> + + + + <p>Retrieves the type of shape used at the end of a stroke. </p> + <p>The type of shape used at the end of a stroke.</p> + + + + <p>Gets a value that specifies how the ends of each dash are drawn. </p> + <p>A value that specifies how the ends of each dash are drawn.</p> + + + + <p>Retrieves the limit on the ratio of the miter length to half the stroke's thickness. </p> + <p>A positive number greater than or equal to 1.0f that describes the limit on the ratio of the miter length to half the stroke's thickness.</p> + + + + <p>Retrieves the type of joint used at the vertices of a shape's outline. </p> + <p>A value that specifies the type of joint used at the vertices of a shape's outline.</p> + + + + <p>Retrieves a value that specifies how far in the dash sequence the stroke will start. </p> + <p>A value that specifies how far in the dash sequence the stroke will start. </p> + + + + <p>Gets a value that describes the stroke's dash pattern. </p> + <p>If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the <strong>GetDashes</strong> method.</p> + <p>A value that describes the predefined dash pattern used, or <strong>{{D2D1_DASH_STYLE_CUSTOM}}</strong> if a custom dash style is used.</p> + + + + <p>Retrieves the number of entries in the dashes array. </p> + <p>The number of entries in the dashes array if the stroke is dashed; otherwise, 0.</p> + + + + <p>Copies the dash pattern to the specified array. </p> + <p>The dashes are specified in units that are a multiple of the stroke width, with subsequent members of the array indicating the dashes and gaps between dashes: the first entry indicates a filled dash, the second a gap, and so on. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array that will receive the dash pattern. The array must be able to contain at least as many elements as specified by <em>dashesCount</em>. You must allocate storage for this array.</p> </dd> + + + <dd> <p>The number of dashes to copy. If this value is less than the number of dashes in the stroke style's dashes array, the returned dashes are truncated to <em>dashesCount</em>. If this value is greater than the number of dashes in the stroke style's dashes array, the extra dashes are set to 0.0f. To obtain the actual number of dashes in the stroke style's dashes array, use the <strong>GetDashesCount</strong> method. </p> </dd> + + + + + <p>Describes a two-dimensional rectangle. </p> + + + + + <p> Retrieves the rectangle that describes the rectangle geometry's dimensions.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Contains a reference to a rectangle that describes the rectangle geometry's dimensions when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Describes a rounded rectangle. </p> + + + + + <p>Retrieves a rounded rectangle that describes this rounded rectangle geometry. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference that receives a rounded rectangle that describes this rounded rectangle geometry. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Represents an ellipse. </p> + + + + + <p>Gets the <strong>{{D2D1_ELLIPSE}}</strong> structure that describes this ellipse geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Represents a composite geometry, composed of other <strong>{{ID2D1Geometry}}</strong> objects. </p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. </p> + + + + <p>Indicates how the intersecting areas of the geometries contained in this geometry group are combined.</p> + <p> A value that indicates how the intersecting areas of the geometries contained in this geometry group are combined. </p> + + + + <p>Indicates the number of geometry objects in the geometry group. </p> + <p>The number of geometries in the <strong>{{ID2D1GeometryGroup}}</strong>.</p> + + + + <p>Retrieves the geometries in the geometry group. </p> + <p>The returned geometries are referenced and counted, and the caller must release them.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an array of geometries to be filled by this method. The length of the array is specified by the <em>geometryCount</em> parameter. If the array is <strong>{{NULL}}</strong>, then this method performs no operation. You must allocate the memory for this array.</p> </dd> + + + <dd> <p>A value indicating the number of geometries to return in the <em>geometries</em> array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to <strong>{{NULL}}</strong>. To obtain the number of geometries currently in the geometry group, use the <strong>GetSourceGeometryCount</strong> method.</p> </dd> + + + + + <p>Represents a geometry that has been transformed. </p> + <p>Using an <strong>{{ID2D1TransformedGeometry}}</strong> rather than transforming a geometry by using a render target's transform enables you to transform a geometry without transforming its stroke.</p> + + + + <p>Retrieves the source geometry of this transformed geometry object. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the source geometry for this transformed geometry object. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the matrix used to transform the <strong>{{ID2D1TransformedGeometry}}</strong> object's source geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Creates a line segment between the current point and the specified end point and adds it to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The end point of the line to draw.</p> </dd> + + + + + Creates a cubic Bezier curve between the current point and the specified end point and adds it to the geometry sink. + + + + <p>Creates a quadratic Bezier curve between the current point and the specified end point.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A structure that describes the control point and the end point of the quadratic Bezier curve to add.</p> </dd> + + + + + <p>Adds a sequence of quadratic Bezier segments as an array in a single call.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of a sequence of quadratic Bezier segments.</p> </dd> + + + <dd> <p>A value indicating the number of quadratic Bezier segments in <em>beziers</em>. </p> </dd> + + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Represents a complex shape that may be composed of arcs, curves, and lines. </p> + <p>An <strong>{{ID2D1PathGeometry}}</strong> object enables you to describe a geometric path. To describe an <strong>{{ID2D1PathGeometry}}</strong> object's path, use the object's <strong>Open</strong> method to retrieve an <strong>{{ID2D1GeometrySink}}</strong>. Use the sink to populate the path geometry with figures and segments. </p> + + + + <p>Retrieves the geometry sink that is used to populate the path geometry with figures and segments. </p> + <p>Because path geometries are immutable and can only be populated once, it is an error to call <strong>Open</strong> on a path geometry more than once.</p><p>Note that the fill mode defaults to <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong>. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Failure to do so will put the geometry sink in an error state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, <em>geometrySink</em> contains the address of a reference to the geometry sink that is used to populate the path geometry with figures and segments. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Copies the contents of the path geometry to the specified <strong>{{ID2D1GeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the number of segments in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of segments in the path geometry when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Retrieves the number of figures in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of figures in the path geometry when this method returns. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Represents a set of vertices that form a list of triangles. </p> + + + + + <p>Opens the mesh for population.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to an <strong>{{ID2D1TessellationSink}}</strong> that is used to populate the mesh. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents the backing store required to render a layer. </p> + <p>To create a layer, call the <strong>CreateLayer</strong> method of the render target where the layer will be used. To draw to a layer, push the layer to the render target stack by calling the <strong>PushLayer</strong> method. After you have finished drawing to the layer, call the <strong>PopLayer</strong> method.</p><p>Between <strong>PushLayer</strong> and <strong>PopLayer</strong> calls, the layer is in use and cannot be used by another render target. </p><p>If the size of the layer is not specified, the corresponding <strong>PushLayer</strong> call determines the minimum layer size, based on the layer content bounds and the geometric mask. The layer resource can be larger than the size required by <strong>PushLayer</strong> without any rendering artifacts.</p><p>If the size of a layer is specified, or if the layer has been used and the required backing store size as calculated during <strong>PushLayer</strong> is larger than the layer, then the layer resource is expanded on each axis monotonically to ensure that it is large enough. The layer resource never shrinks in size.</p> + + + + <p>Gets the size of the layer in device-independent pixels. </p> + <p>The size of the layer in device-independent pixels.</p> + + + + <p>Represents the drawing state of a render target: the antialiasing mode, transform, tags, and text-rendering options. </p> + + + + + <p>Retrieves the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, and tags portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Specifies the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode, transform, and tags portion of the drawing state.</p> </dd> + + + + + <p>Specifies the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text-rendering configuration of the drawing state, or {{NULL}} to use default settings.</p> </dd> + + + + + <p>Retrieves the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an <strong>{{IDWriteRenderingParams}}</strong> object that describes the text-rendering configuration of the drawing state.</p> </dd> + + + + + <p>Renders drawing instructions to a window.</p> + <p>As is the case with other render targets, you must call <strong>BeginDraw</strong> before issuing drawing commands. After you've finished drawing, call <strong>EndDraw</strong> to indicate that drawing is finished and to release access to the buffer backing the render target. For <strong>{{ID2D1HwndRenderTarget}}</strong>, the only side effect of <strong>BeginDraw</strong> is changing the state of the render target to allow drawing commands to be issued. <strong>EndDraw</strong> flushes any batched drawing commands. If no errors have occurred, then it also presents the buffer, causing it to appear on the associated window. Finally, <strong>EndDraw</strong> returns the {{HRESULT}} of the first error that occurred in drawing or presenting, as well as the tag state at the time the error occurred.</p><p><strong>{{ID2D1HwndRenderTarget}}</strong> objects are double buffered, so drawing commands issued do not appear immediately, but rather are performed on an offscreen surface. When <strong>EndDraw</strong> is called, if there have been no rendering errors, the offscreen buffer is presented. If there have been rendering errors in the batch flushed by <strong>EndDraw</strong>, then the buffer is not presented, and the application must call <strong>BeginDraw</strong> and re-draw the frame. <strong>Flush</strong> can be used to check for errors before calling <strong>EndDraw</strong> if an application wants the frame to be presented regardless of errors. </p><p>A hardware render target's back-buffer is the size specified by <strong>GetPixelSize</strong>. If <strong>EndDraw</strong> presents the buffer, this bitmap is stretched to cover the surface where it is presented: the entire client area of the window. This stretch is performed using bilinear filtering if the render target is rendering in hardware and using nearest-neighbor filtering if the rendering target is using software. (Typically, an application will call <strong>Resize</strong> to ensure the pixel size of the render target and the pixel size of the destination match, and no scaling is necessary, though this is not a requirement.) </p><p>In the case where a window straddles adapters, Direct2D ensures that the portion of the off-screen render target is copied from the adapter where rendering is occurring to the adapter that needs to display the contents. If the adapter a render target is on has been removed or the driver upgraded while the application is running, this is returned as an error in the <strong>EndDraw</strong> call. In this case, the application should create a new render target and resources as necessary. +</p> + + + + <p>Indicates whether the {{HWND}} associated with this render target is occluded. </p> + <strong>Note</strong>??If the window was occluded the last time that <strong>EndDraw</strong> was called, the next time that the render target calls <strong>CheckWindowState</strong>, it will return <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to determine the current window state, you should call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This call will ensure that your next call to <strong>CheckWindowState</strong> state will return the actual window state.? + <p>A value that indicates whether the {{HWND}} associated with this render target is occluded.</p> + + + + Changes the size of the render target to the specified pixel size. + <p>After this method is called, the contents of the render target's back-buffer are not defined, even if the <strong>{{D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS}}</strong> option was specified when the render target was created.</p> + + + + <p> Returns the {{HWND}} associated with this render target.</p> + <p>The {{HWND}} associated with this render target.</p> + + + + <p>Provides access to an device context that can accept {{GDI}} drawing commands. </p> + <p>You don't create an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> object directly; instead, you use the <strong>QueryInterface</strong> method of an existing render target instance to provide an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> version of that render target. </p><p>Not all render targets support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface. The render target must be {{GDI}}-compatible (the <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> flag was specified when creating the render target), use the {{DXGI_FORMAT_B8G8R8A8_UNORM}} pixel format, and use the <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong> alpha mode.</p><p>Note that the <strong>QueryInterface</strong> method always succeeds; if the render target doesn't support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, calling <strong>GetDC</strong> will fail. (For render targets created through the <strong>CreateCompatibleRenderTarget</strong> method, the render target that created it must have these settings.) </p><p>To test whether a given render target supports the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}} </strong>that specifies {{GDI}} compatibility and the appropriate pixel format, then call the render target's <strong>IsSupported</strong> method to see whether the render target is {{GDI}}-compatible. </p> + + + + <p>Retrieves the device context associated with this render target. </p> + <p>Calling this method flushes the render target.</p><p>This command can be called only after <strong>BeginDraw</strong> and before <strong>EndDraw</strong>. </p><strong>Note</strong>??In Windows?7 and earlier, you should not call <strong>GetDC</strong> between <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> commands or between <strong>PushLayer</strong>/<strong>PopLayer</strong>. However, this restriction does not apply to Windows?8 and later.?<p> <strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the device context should be cleared.</p> </dd> + + + <dd> <p>When this method returns, contains the device context associated with this render target. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Indicates that drawing with the device context retrieved using the <strong>GetDC</strong> method is finished. </p> + <p><strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Issues drawing commands to a {{GDI}} device context. </p> + + + + + <p> Binds the render target to the device context to which it issues drawing commands.</p> + <p>Before you can render with the {{DC}} render target, you must use its <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. You do this each time you use a different {{DC}}, or the size of the area you want to draw to changes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The device context to which the render target issues drawing commands.</p> </dd> + + + <dd> <p>The dimensions of the handle to a device context ({{HDC}}) to which the render target is bound. </p> </dd> + + + + + <p>Creates a factory object that can be used to create Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface provides the starting point for Direct2D. In general, objects created from a single instance of a factory object can be used with other resources created from that instance, but not with resources created by other factory instances. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The threading model of the factory and the resources it creates.</p> </dd> + + + <dd> <p>A reference to the {{IID}} of <strong>{{ID2D1Factory}}</strong> that is obtained by using __uuidof({{ID2D1Factory}}).</p> </dd> + + + <dd> <p>The level of detail provided to the debugging layer.</p> </dd> + + + <dd> <p>When this method returns, contains the address to a reference to the new factory.</p> </dd> + + + + + <p>Creates a rotation transformation that rotates by the specified angle about the specified point.</p> + <p>Rotation occurs in the plane of the 2-D surface.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The clockwise rotation angle, in degrees. </p> </dd> + + + <dd> <p>The point about which to rotate.</p> </dd> + + + <dd> <p>When this method returns, contains the new rotation transformation. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a skew transformation that has the specified x-axis angle, y-axis angle, and center point. </p> + <p>This function does not return a value.</p> + + + <dd> <p>The x-axis skew angle, which is measured in degrees counterclockwise from the y-axis.</p> </dd> + + + <dd> <p>The y-axis skew angle, which is measured in degrees counterclockwise from the x-axis.</p> </dd> + + + <dd> <p>The center point of the skew operation.</p> </dd> + + + <dd> <p>When this method returns, contains the rotation transformation. You must allocate storate for this parameter.</p> </dd> + + + + + <p>Indicates whether the specified matrix is invertible.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to test.</p> </dd> + + + + + <p>Tries to invert the specified matrix.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to invert.</p> </dd> + + + + + <p>Specifies the color context types.</p> + + + <dd> <p>An uninitialized color context.</p> </dd> + + + <dd> <p>A color context that is a full {{ICC}} color profile.</p> </dd> + + + <dd> <p>A color context that is one of a number of set color spaces (sRGB, AdobeRGB) that are defined in the {{EXIF}} specification.</p> </dd> + + + + + <p>Specifies the desired cache usage.</p> + <p>The <strong>CreateBitmap</strong> of the <strong>{{IWICImagingFactory}}</strong> interface does not support {{WICBitmapNoCache}} when the <em>pixelFormat</em> is a native pixel format provided by Windows Imaging Component ({{WIC}}).</p> + + + <dd> <p>Do not cache the bitmap.</p> </dd> + + + <dd> <p>Cache the bitmap when needed.</p> </dd> + + + <dd> <p>Cache the bitmap at initialization.</p> </dd> + + + + + <p>Specifies decode options.</p> + + + <dd> <p>Cache metadata when needed.</p> </dd> + + + <dd> <p>Cache metadata when decoder is loaded.</p> </dd> + + + + + <p>Specifies the cache options available for an encoder.</p> + + + <dd> <p>The encoder is cached in memory. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is cached to a temporary file. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is not cached.</p> </dd> + + + + + <p>Specifies the type of Windows Imaging Component ({{WIC}}) component.</p> + + + <dd> <p>A {{WIC}} decoder.</p> </dd> + + + <dd> <p>A {{WIC}} encoder.</p> </dd> + + + <dd> <p>A {{WIC}} pixel converter.</p> </dd> + + + <dd> <p>A {{WIC}} metadata reader.</p> </dd> + + + <dd> <p>A {{WIC}} metadata writer.</p> </dd> + + + <dd> <p>A {{WIC}} pixel format.</p> </dd> + + + <dd> <p>All {{WIC}} components.</p> </dd> + + + + + <p>Specifies component enumeration options.</p> + + + <dd> <p>Enumerate any components that are not disabled. Because this value is 0x0, it is always included with the other options.</p> </dd> + + + <dd> <p>Force a read of the registry before enumerating components.</p> </dd> + + + <dd> <p>Include disabled components in the enumeration. The set of disabled components is disjoint with the set of default enumerated components</p> </dd> + + + <dd> <p>Include unsigned components in the enumeration. This option has no effect.</p> </dd> + + + <dd> <p>At the end of component enumeration, filter out any components that are not Windows provided.</p> </dd> + + + + + <p>Specifies the sampling or filtering mode to use when scaling an image.</p> + + + <dd> <p>A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation. </p> <p>The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.</p> </dd> + + + <dd> <p>A bilinear interpolation algorithm. </p> <p>The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid.</p> </dd> + + + <dd> <p>A bicubic interpolation algorithm. </p> <p>Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid. </p> </dd> + + + <dd> <p>A Fant resampling algorithm. </p> <p>Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel.</p> </dd> + + + <dd> <p>A high quality bicubic interpolation algorithm. Destination pixel values are computed using a much denser sampling kernel than regular cubic. The kernel is resized in response to the scale factor, making it suitable for downscaling by factors greater than 2.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? </dd> + + + + + <p>Specifies the type of palette used for an indexed image format.</p> + + + <dd> <p>An arbitrary custom palette provided by caller.</p> </dd> + + + <dd> <p>An optimal palette generated using a median-cut algorithm. Derived from the colors in an image.</p> </dd> + + + <dd> <p>A black and white palette.</p> </dd> + + + <dd> <p>A palette that has its 8-color on-off primaries and the 16 system colors added. With duplicates removed, 16 colors are available.</p> </dd> + + + <dd> <p>A palette that has 3 intensity levels of each primary: 27-color on-off primaries and the 16 system colors added. With duplicates removed, 35 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 intensity levels of each primary: 64-color on-off primaries and the 16 system colors added. With duplicates removed, 72 colors are available.</p> </dd> + + + <dd> <p>A palette that has 5 intensity levels of each primary: 125-color on-off primaries and the 16 system colors added. With duplicates removed, 133 colors are available.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteFixedHalftoneWeb}}</strong>.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteTypeFixedHalftone216}}</strong>.</p> </dd> + + + <dd> <p>A palette that has its 252-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has its 256-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 16 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 256 shades of gray.</p> </dd> + + + + + <p>Specifies the type of {{dither}} algorithm to apply when converting between image formats.</p> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A 4x4 ordered dither algorithm. </p> </dd> + + + <dd> <p>An 8x8 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 16x16 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 spiral dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An error diffusion algorithm.</p> </dd> + + + + + <p>Specifies the desired alpha channel usage.</p> + + + <dd> <p>Use alpha channel.</p> </dd> + + + <dd> <p>Use a pre-multiplied alpha channel.</p> </dd> + + + <dd> <p>Ignore alpha channel.</p> </dd> + + + <dd> <p>Sentinel value.</p> </dd> + + + + + <p>Specifies the flip and rotation transforms.</p> + + + <dd> <p>A rotation of 0 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 90 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 180 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 270 degrees.</p> </dd> + + + <dd> <p>A horizontal flip. Pixels are flipped around the vertical y-axis.</p> </dd> + + + <dd> <p>A vertical flip. Pixels are flipped around the horizontal x-axis.</p> </dd> + + + + + <p>Specifies access to an <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Specifies the capabilities of the decoder.</p> + + + <dd> <p>Decoder recognizes the image was encoded with an encoder produced by the same vendor. </p> <p></p> </dd> + + + <dd> <p>Decoder can decode all the images within an image container.</p> </dd> + + + <dd> <p>Decoder can decode some of the images within an image container.</p> </dd> + + + <dd> <p>Decoder can enumerate the metadata blocks within a container format.</p> </dd> + + + <dd> <p>Decoder can find and decode a thumbnail.</p> </dd> + + + + + <p>Specifies the progress operations to receive notifications for.</p> + + + <dd> <p>Receive copy pixel operation.</p> </dd> + + + <dd> <p>Receive write pixel operation.</p> </dd> + + + <dd> <p>Receive all progress operations available.</p> </dd> + + + + + <p>Specifies when the progress notification callback should be called.</p> + + + <dd> <p>The callback should be called when codec operations begin.</p> </dd> + + + <dd> <p>The callback should be called when codec operations end.</p> </dd> + + + <dd> <p>The callback should be called frequently to report status.</p> </dd> + + + <dd> <p>The callback should be called on all available progress notifications.</p> </dd> + + + + + <p>Specifies the component signing status.</p> + + + <dd> <p>A signed component.</p> </dd> + + + <dd> <p>An unsigned component</p> </dd> + + + <dd> <p>A component is safe. </p> <p>Components that do not have a binary component to sign, such as a pixel format, should return this value.</p> </dd> + + + <dd> <p>A component has been disabled.</p> </dd> + + + + + <p>Specifies the logical screen descriptor properties for Graphics Interchange Format ({{GIF}}) metadata.</p> + + + <dd> <p> [{{VT_UI1}} | {{VT_VECTOR}}] Indicates the signature property.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the width in pixels. </p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the height in pixels. </p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the global color table flag. <strong>{{TRUE}}</strong> if a global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the color resolution in bits per pixel.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the table is sorted; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the index within the color table to use for the background (pixels not defined in the image).</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the factor used to compute an approximation of the aspect ratio.</p> </dd> + + + + + <p>Specifies the image descriptor metadata properties for Graphics Interchange Format ({{GIF}}) frames.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the X offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the Y offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates width of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates height of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the local color table flag. <strong>{{TRUE}}</strong> if global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the interlace flag. <strong>{{TRUE}}</strong> if image is interlaced; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the color table is sorted from most frequently to least frequently used color; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + + + <p>Specifies the graphic control extension metadata properties that define the transitions between each frame animation for Graphics Interchange Format ({{GIF}}) images.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the disposal requirements. 0 - no disposal, 1 - do not dispose, 2 - restore to background color, 3 - restore to previous.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the user input flag. <strong>{{TRUE}}</strong> if user input should advance to the next frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the transparency flag. <strong>{{TRUE}}</strong> if a transparent color in is in the color table for this frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates how long to display the next frame before advancing to the next frame, in units of 1/100th of a second.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates which color in the palette should be treated as transparent.</p> </dd> + + + + + <p>Specifies the application extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates a string that identifies the application.</p> </dd> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates data that is exposed by the application.</p> </dd> + + + + + <p>Specifies the comment extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} comment properties.</p> + + + <dd> <p>Indicates the metadata property is comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} luminance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a luminance table.</p> </dd> + + + + + <p>Specifies the {{JPEG}} chrominance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a chrominance table.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UNKNOWN}}] The {{IPTC}} block embedded in this 8BIM {{IPTC}} block.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIMResolutionInfo block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The horizontal resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the horizontal resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image width is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The vertical resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the vertical resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image height is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} digest metadata block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_BLOB}}] The embedded {{IPTC}} digest value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) gAMA chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the gamma value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) background (bKGD) chunk metadata properties.</p> + + + <dd> <p>Indicates the background color. There are three possible types, depending on the image's pixel format.</p> <p></p> <dl> <dt>{{VT_UI1}}</dt> <dd> <p>Specifies the index of the background color in an image with an indexed pixel format.</p> </dd> <dt>{{VT_UI2}}</dt> <dd> <p>Specifies the background color in a grayscale image.</p> </dd> <dt>{{VT_VECTOR}}|{{VT_UI2}}</dt> <dd> <p>Specifies the background color in an {{RGB}} image as three {{USHORT}} values: {0x<em>{{RRRR}}</em>, 0x<em>{{GGGG}}</em>, 0x<em>{{BBBB}}</em>}.</p> </dd> </dl> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iTXT chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the keywords in the iTXT metadata chunk.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates whether the text in the iTXT chunk is compressed. 1 if the text is compressed; otherwise, 0.</p> </dd> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the human language used by the translated keyword and the text.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates a translation of the keyword into the language indicated by the language tag.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates additional text in the iTXT metadata chunk.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) cHRM chunk metadata properties for {{CIE}} {{XYZ}} chromaticity.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue y value ratio.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) hIST chunk metadata properties.</p> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI2}}] Indicates the approximate usage frequency of each color in the color palette. </p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iCCP chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the International Color Consortium ({{ICC}}) profile name.</p> </dd> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI1}}] Indicates the embedded {{ICC}} profile.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) sRGB chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the rendering intent for an sRGB color space image. The rendering intents have the following meaning.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td>0</td><td>Perceptual</td></tr> <tr><td>1</td><td>Relative colorimetric</td></tr> <tr><td>2</td><td>Saturation</td></tr> <tr><td>3</td><td>Absolute colorimetric</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) tIME chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the year of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the month of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates day of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the hour of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the minute of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the second of the last modification.</p> </dd> + + + + + <p>Specifies the access level of a Windows Graphics Device Interface ({{GDI}}) section.</p> + + + <dd> <p>Indicates a read only access level.</p> </dd> + + + <dd> <p>Indicates a read/write access level.</p> </dd> + + + + + + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies additional options to an <strong>{{IWICPlanarBitmapSourceTransform}}</strong> implementation. </p> + + + + <p>Specifies the options for indexing a {{JPEG}} image. </p> + + + <dd> <p>Index generation is deferred until <strong>{{IWICBitmapSource::CopyPixels}}</strong> is called on the image.</p> </dd> + + + <dd> <p>Index generation is performed when the when the image is initially loaded.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies conversion matrix from Y'Cb'Cr' to R'G'B'. </p> + + + <dd> <p>Specifies the identity transfer matrix.</p> </dd> + + + <dd> <p>Specifies the {{BT601}} transfer matrix.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the memory layout of pixel data in a {{JPEG}} image scan. </p> + + + <dd> <p>The pixel data is stored in an interleaved memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a planar memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a progressive layout.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the Tagged Image File Format ({{TIFF}}) compression options.</p> + + + <dd> <p>Indicates a suitable compression algorithm based on the image and pixel format.</p> </dd> + + + <dd> <p>Indicates no compression.</p> </dd> + + + <dd> <p>Indicates a {{CCITT3}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{CCITT4}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{LZW}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates a {{RLE}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{ZIP}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates an {{LZWH}} differencing algorithm.</p> </dd> + + + + + <p>Specifies the {{JPEG}} {{YCrCB}} subsampling options. </p> + <p>The native {{JPEG}} encoder uses <strong>{{WICJpegYCrCbSubsampling420}}</strong>.</p> + + + <dd> <p>The default subsampling option. </p> </dd> + + + <dd> <p>Subsampling option that uses both horizontal and vertical decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses horizontal decimation .</p> </dd> + + + <dd> <p>Subsampling option that uses no decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses 2x vertical downsampling only. This option is only available in Windows?8.1 and later.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) filters available for compression optimization.</p> + + + <dd> <p>Indicates an unspecified {{PNG}} filter. This enables {{WIC}} to algorithmically choose the best filtering option for the image.</p> </dd> + + + <dd> <p>Indicates no {{PNG}} filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} sub filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} up filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} average filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} paeth filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} adaptive filter. This enables {{WIC}} to choose the best filtering mode on a per-scanline basis.</p> </dd> + + + + + <p>Specifies named white balances for raw images.</p> + + + <dd> <p>The default white balance.</p> </dd> + + + <dd> <p>A daylight white balance.</p> </dd> + + + <dd> <p>A cloudy white balance.</p> </dd> + + + <dd> <p>A shade white balance.</p> </dd> + + + <dd> <p>A tungsten white balance.</p> </dd> + + + <dd> <p>A fluorescent white balance.</p> </dd> + + + <dd> <p>Daylight white balance.</p> </dd> + + + <dd> <p>A flash white balance.</p> </dd> + + + <dd> <p>A custom white balance. This is typically used when using a picture (grey-card) as white balance.</p> </dd> + + + <dd> <p>An automatic balance.</p> </dd> + + + <dd> <p>An "as shot" white balance.</p> </dd> + + + + + <p>Specifies the capability support of a raw image.</p> + + + <dd> <p>The capability is not supported.</p> </dd> + + + <dd> <p>The capability supports only get operations.</p> </dd> + + + <dd> <p>The capability supports get and set operations.</p> </dd> + + + + + <p>Specifies the rotation capabilities of the codec.</p> + + + <dd> <p>Rotation is not supported.</p> </dd> + + + <dd> <p>Set operations for rotation is not supported.</p> </dd> + + + <dd> <p>90 degree rotations are supported.</p> </dd> + + + <dd> <p>All rotation angles are supported.</p> </dd> + + + + + <p>Specifies the parameter set used by a raw codec.</p> + + + <dd> <p>An as shot parameter set.</p> </dd> + + + <dd> <p>A user adjusted parameter set.</p> </dd> + + + <dd> <p>A codec adjusted parameter set.</p> </dd> + + + + + <p>Specifies the render intent of the next <strong>CopyPixels</strong> call. </p> + + + + <p>Specifies the dimension type of the data contained in {{DDS}} image.</p> + <p>Both <strong>{{WICDdsTexture2d}}</strong> and <strong>{{WICDdsTextureCube}}</strong> correspond to <strong>{{D3D11_RESOURCE_DIMENSION_TEXTURE2D}}</strong>. When using <strong>{{ID3D11Device::CreateTexture2D}}</strong>, they are distinguished by the flag <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> in the structure <strong>{{D3D11_TEXTURE2D_DESC}}</strong>.</p> + + + <dd> <p>{{DDS}} image contains a 1-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 2-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 3-dimensional texture . </p> </dd> + + + <dd> <p>The {{DDS}} image contains a cube texture represented as an array of 6 faces. </p> </dd> + + + + + <p>Specifies the the meaning of pixel color component values contained in the {{DDS}} image.</p> + + + <dd> <p>Alpha behavior is unspecified and must be determined by the reader.</p> </dd> + + + <dd> <p>The alpha data is straight.</p> </dd> + + + <dd> <p>The alpha data is premultiplied.</p> </dd> + + + <dd> <p>The alpha data is opaque ({{UNORM}} value of 1). This can be used by a compliant reader as a performance optimization. For example, blending operations can be converted to copies.</p> </dd> + + + <dd> <p>The alpha channel contains custom data that is not alpha.</p> </dd> + + + + + <p>Represents a rectangle for Windows Imaging Component ({{WIC}})?{{API}}.</p> + + + <dd> <p>The horizontal coordinate of the rectangle.</p> </dd> + + + <dd> <p>The vertical coordinate of the rectangle.</p> </dd> + + + <dd> <p>The width of the rectangle.</p> </dd> + + + <dd> <p>The height of the rectangle.</p> </dd> + + + + + <p>Contains members that identify a pattern within an image file which can be used to identify a particular format.</p> + + + <dd> <p>The offset the pattern is located in the file.</p> </dd> + + + <dd> <p>The pattern length.</p> </dd> + + + <dd> <p>The actual pattern.</p> </dd> + + + <dd> <p>The pattern mask.</p> </dd> + + + <dd> <p>The end of the stream.</p> </dd> + + + + + <p>This defines parameters that you can use to override the default parameters normally used when encoding an image. </p> + <p>If this parameter is not passed to the encoding {{API}}, the encoder uses these settings.</p><ul> <li>A pixel format of (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>).</li> <li>An x and y {{DPI}} of 96.</li> <li>The entire image bounds will be used for encoding.</li> </ul><strong>Note</strong>??The parameters as specified can't result in a scale. The encoder can use a larger portion of the input image based on the passed in {{DPI}} and the pixel width and height.? + + + <dd> <p>The pixel format to which the image is processed before it is written to the encoder.</p> </dd> + + + <dd> <p>The {{DPI}} in the x dimension.</p> </dd> + + + <dd> <p>The {{DPI}} in the y dimension.</p> </dd> + + + <dd> <p>The top corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The left corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The width in pixels of the part of the image to write.</p> </dd> + + + <dd> <p>The height in pixels of the part of the image to write.</p> </dd> + + + + + <p>Specifies the pixel format and size of a component plane.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Component width of the plane.</p> </dd> + + + <dd> <p>Component height of the plane.</p> </dd> + + + + + <p>Specifies the pixel format, buffer, stride and size of a component plane for a planar pixel format.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Pointer to the buffer that holds the plane?s pixel components.</p> </dd> + + + <dd> <p>The stride of the buffer ponted to by <em>pbData</em>. Stride indicates the total number of bytes to go from the beginning of one scanline to the beginning of the next scanline.</p> </dd> + + + <dd> <p>The total size of the buffer pointed to by <em>pbBuffer</em>.</p> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the frame header for an image by calling <strong>{{IWICJpegFrameDecode::GetFrameHeader}}</strong>.</p> + + + <dd> <p>The width of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The height of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The transfer matrix of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The scan type of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The number of components in the frame.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The sample factors. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_SAMPLE_FACTORS_ONE}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_420}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_422}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_440}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_444}}</li> </ul> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_ONE}}</li> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_THREE}} </li> </ul> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the scan header for an image by calling <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> + + + <dd> <p>The number of components in the scan.</p> </dd> + + + <dd> <p>The interval of reset markers within the scan.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_HUFFMAN_BASELINE_ONE}}</li> <li>{{WIC_JPEG_HUFFMAN_BASELINE_THREE}} </li> </ul> </dd> + + + <dd> <p>The start of the spectral selection.</p> </dd> + + + <dd> <p>The end of the spectral selection.</p> </dd> + + + <dd> <p>The successive approximation high.</p> </dd> + + + <dd> <p>The successive approximation low.</p> </dd> + + + + + <p>Defines raw codec capabilites.</p> + + + <dd> <p>Size of the <strong>{{WICRawCapabilitiesInfo}}</strong> structure.</p> </dd> + + + <dd> <p>The codec's major version.</p> </dd> + + + <dd> <p>The codec's minor version.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of exposure compensation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of contrast support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of {{RGB}} white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICNamedWhitePoint}}</strong> support.</p> </dd> + + + <dd> <p>The <strong>{{WICNamedWhitePoint}}</strong> mask.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of kelvin white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of gamma support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tint support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of saturation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of sharpness support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of noise reduction support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of destination color profile support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tone curve support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawRotationCapabilities}}</strong> of rotation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICRawRenderMode}}</strong> support.</p> </dd> + + + + + <p>Represents a raw image tone curve point.</p> + + + <dd> <p>The tone curve input.</p> </dd> + + + <dd> <p>The tone curve output.</p> </dd> + + + + + <p>Represents a raw image tone curve.</p> + + + <dd> <p>The number of tone curve points.</p> </dd> + + + <dd> <p>The array of tone curve points.</p> </dd> + + + + + <p>Specifies the {{DDS}} image dimension, <strong>{{DXGI_FORMAT}}</strong> and alpha mode of contained data.</p> + + + + <p>Specifies the <strong>{{DXGI_FORMAT}}</strong> and block information of a {{DDS}} format.</p> + + + + <p>Defines methods that add the concept of writeability and static in-memory representations of bitmaps to <strong>{{IWICBitmapSource}}</strong>. </p> + <p><strong>{{IWICBitmap}}</strong> inherits from <strong>{{IWICBitmapSource}}</strong> and therefore also inherits the <strong>CopyPixels</strong> method. When pixels need to be moved to a new memory location, <strong>CopyPixels</strong> is often the most efficient. </p><p> Because of to the internal memory representation implied by the <strong>{{IWICBitmap}}</strong>, in-place modification and processing using the <strong>Lock</strong> is more efficient than <strong>CopyPixels</strong>, usually reducing to a simple reference access directly into the memory owned by the bitmap rather than a as a copy. This is contrasted to procedural bitmaps which implement only <strong>CopyPixels</strong> because there is no internal memory representation and one would need to be created on demand to satisfy a call to <strong>Lock</strong>. </p> + + + + <p>Provides access to a rectangular area of the bitmap.</p> + <p>Locks are exclusive for writing but can be shared for reading. You cannot call <strong>CopyPixels</strong> while the <strong>{{IWICBitmap}}</strong> is locked for writing. Doing so will return an error, since locks are exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to be accessed.</p> </dd> + + + <dd> <p>The access mode you wish to obtain for the lock. This is a bitwise combination of <strong>{{WICBitmapLockFlags}}</strong> for read, write, or read and write access.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockRead}}</strong></dt> </dl> </td><td> <p>The read access lock.</p> </td></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockWrite}}</strong></dt> </dl> </td><td> <p>The write access lock.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference that receives the locked memory location.</p> </dd> + + + + + <p>Provides access for palette modifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + + + <p>Changes the physical resolution of the image.</p> + <p> This method has no effect on the actual pixels or samples stored in the bitmap. Instead the interpretation of the sampling rate is modified. This means that a 96 {{DPI}} image which is 96 pixels wide is one inch. If the physical resolution is modified to 48 {{DPI}}, then the bitmap is considered to be 2 inches wide but has the same number of pixels. If the resolution is less than <strong>{{REAL_EPSILON}}</strong> (1.192092896e-07F) the error code <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong> is returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution.</p> </dd> + + + <dd> <p>The vertical resolution.</p> </dd> + + + + + <p>Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.</p> + <p>This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and scalers. Components that implement this interface can be connected together in a graph to pull imaging data through.</p><p>This interface defines only the notion of readability or being able to produce pixels. Modifying or writing to a bitmap is considered to be a specialization specific to bitmaps which have storage and is defined in the descendant interface <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Retrieves the pixel width and height of the bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel width of the bitmap.</p> </dd> + + + <dd> <p>A reference that receives the pixel height of the bitmap</p> </dd> + + + + + <p>Retrieves the pixel format of the bitmap source.. </p> + <p> The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the pixel format {{GUID}} the bitmap is stored in. For a list of available pixel formats, see the Native Pixel Formats topic.</p> </dd> + + + + + <p>Specifies the viewport/stencil and render target associated with a view instance.</p> + <p>The values specified in a view instance location structure can be added to ViewportArrayIndex and RenderTargetArrayIndex values output by the shader prior to rasterization to compute the final effective index of the viewport and render target to send primitives to. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in a {{PSO}} to the same value to act as a uniform base value for all views.</p> + + + <dd> <p> The index of the viewport in the viewports array to be used by the view instance associated with this location. </p> </dd> + + + <dd> <p> The index of the render target in the render targets array to be used by the view instance associated with this location. </p> </dd> + + + + + <p>Retrieves the sampling rate between pixels and physical world measurements.</p> + <p> Some formats, such as {{GIF}} and {{ICO}}, do not have full {{DPI}} support. For {{GIF}}, this method calculates the {{DPI}} values from the aspect ratio, using a base {{DPI}} of (96.0, 96.0). The {{ICO}} format does not support {{DPI}} at all, and the method always returns (96.0,96.0) for {{ICO}} images. </p><p> Additionally, {{WIC}} itself does not transform images based on the {{DPI}} values in an image. It is up to the caller to transform an image based on the resolution returned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the x-axis dpi resolution.</p> </dd> + + + <dd> <p>A reference that receives the y-axis dpi resolution.</p> </dd> + + + + + <p>Retrieves the color table for indexed pixel formats.</p> + <p> If the <strong>{{IWICBitmapSource}}</strong> is an <strong>{{IWICBitmapFrameDecode}}</strong>, the function may return the image's global palette if a frame-level palette is not available. The global palette may also be retrieved using the <strong>CopyPalette</strong> method. </p> + <p>Returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_PALETTEUNAVAILABLE}}</strong></dt> </dl> </td><td> <p>The palette was unavailable.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The palette was successfully copied.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{IWICPalette}}</strong>. A palette can be created using the <strong>CreatePalette</strong> method.</p> </dd> + + + + + <p>Instructs the object to produce pixels.</p> + <p><strong>CopyPixels</strong> is one of the two main image processing routines (the other being <strong>Lock</strong>) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a {{JPEG}} stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface. </p><p> The caller can restrict the operation to a rectangle of interest ({{ROI}}) using the prc parameter. The {{ROI}} sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a <strong>{{NULL}}</strong> {{ROI}} implies that the whole bitmap should be returned. +</p><p> The caller controls the memory management and must provide an output buffer (<em>pbBuffer</em>) for the results of the copy along with the buffer's bounds (<em>cbBufferSize</em>). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method. </p><p> If the caller needs to perform numerous copies of an expensive <strong>{{IWICBitmapSource}}</strong> such as a {{JPEG}}, it is recommended to create an in-memory <strong>{{IWICBitmap}}</strong> first. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy. A <strong>{{NULL}}</strong> value specifies the entire bitmap.</p> </dd> + + + <dd> <p>The stride of the bitmap</p> </dd> + + + <dd> <p>The size of the buffer.</p> </dd> + + + <dd> <p>A reference to the buffer.</p> </dd> + + + + + <p>Exposes methods for accessing and building a color table, primarily for indexed pixel formats.</p> + <p>If the <strong>{{WICBitmapPaletteType}}</strong> is not <strong>{{WICBitmapPaletteCustom}}</strong>, then the colors are automatically generated based on the table above. If the user subsequently changes a color palette entry the {{WICBitmapPalette}} is set to Custom by that action.</p><p> <strong>InitializeFromBitmap</strong>'s <em>fAddTransparentColor</em> parameter will add a transparent color to the end of the color collection if its size if less than 256, otherwise index 255 will be replaced with the transparent color. If a pre-defined palette type is used, it will change to BitmapPaletteTypeCustom since it no longer matches the predefined palette.</p><p>The palette interface is an auxiliary imaging interface in that it does not directly concern bitmaps and pixels; rather it provides indexed color translation for indexed bitmaps. For an indexed pixel format with M bits per pixels: (The number of colors in the palette) greater than 2^M.</p><p>Traditionally the basic operation of the palette is to provide a translation from a byte (or smaller) index into a 32bpp color value. This is often accomplished by a 256 entry table of color values.</p> + + + + <p>Initializes the palette to one of the pre-defined palettes specified by <strong>{{WICBitmapPaletteType}}</strong> and optionally adds a transparent color.</p> + <p>If a transparent color is added to a palette, the palette is no longer predefined and is returned as <strong>{{WICBitmapPaletteTypeCustom}}</strong>. For palettes with less than 256 entries, the transparent entry is added to the end of the palette (that is, a 16-color palette becomes a 17-color palette). For palettes with 256 colors, the transparent palette entry will replace the last entry in the pre-defined palette. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>InitializeCustom</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes a palette using a computed optimized values based on the reference bitmap.</p> + <p> The resulting palette contains the specified number of colors which best represent the colors present in the bitmap. The algorithm operates on the opaque {{RGB}} color value of each pixel in the reference bitmap and hence ignores any alpha values. If a transparent color is required, set the fAddTransparentColor parameter to <strong>{{TRUE}}</strong> and one fewer optimized color will be computed, reducing the <em>colorCount</em>, and a fully transparent color entry will be added. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source bitmap.</p> </dd> + + + <dd> <p>The number of colors to initialize the palette with.</p> </dd> + + + <dd> <p>A value to indicate whether to add a transparent color.</p> </dd> + + + + + <p>Initialize the palette based on a given palette.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source palette.</p> </dd> + + + + + <p>Retrieves the <strong>{{WICBitmapPaletteType}}</strong> that describes the palette. </p> + <p><strong>{{WICBitmapPaletteCustom}}</strong> is used for palettes initialized from both <strong>InitializeCustom</strong> and <strong>InitializeFromBitmap</strong>. There is no distinction is made between optimized and custom palettes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetColorCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Fills out the supplied color array with the colors from the internal color table. The color array should be sized according to the return results from <strong>GetColorCount</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value that describes whether the palette is black and white.</p> + <p>A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is black and white. <strong>{{TRUE}}</strong> indicates that the palette is black and white; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value that describes whether a palette is grayscale.</p> + <p>A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is grayscale. <strong>{{TRUE}}</strong> indicates that the palette is grayscale; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Proxy function for the <strong>HasAlpha</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Determines if the source pixel format can be converted to the destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source pixel format.</p> </dd> + + + <dd> <p>The destionation pixel format.</p> </dd> + + + <dd> <p>A reference that receives a value indicating whether the source pixel format can be converted to the destination pixel format.</p> </dd> + + + + + <p>Allows a format converter to be initialized with a planar source. You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICFormatConverter}}</strong>.</p> + + + + <p>Initializes a format converter with a planar source, and specifies the interleaved output pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of <strong>{{IWICBitmapSource}}</strong> that represents image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Query if the format converter can convert from one format to another.</p> + <p>To specify an interleaved input pixel format, provide a length 1 array to <em>pSrcPixelFormats</em>.</p> + <p>If the conversion is not supported, this method returns {{S_OK}}, but *<em>pfCanConvert</em> is set to {{FALSE}}. </p><p>If this method fails, the out parameter <em>pfCanConvert</em> is invalid.</p> + + + <dd> <p>An array of {{WIC}} pixel formats that represents source image planes.</p> </dd> + + + <dd> <p>The number of source pixel formats specified by the <em>pSrcFormats</em> parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>True if the conversion is supported.</p> </dd> + + + + + <p>Represents a resized version of the input bitmap using a resampling or filtering algorithm.</p> + <p>Images can be scaled to larger sizes; however, even with sophisticated scaling algorithms, there is only so much information in the image and artifacts tend to worsen the more you scale up.</p><p> The scaler will reapply the resampling algorithm every time <strong>CopyPixels</strong> is called. If the scaled image is to be animated, the scaled image should be created once and cached in a new bitmap, after which the <strong>{{IWICBitmapScaler}}</strong> may be released. In this way the scaling algorithm - which may be computationally expensive relative to drawing - is performed only once and the result displayed many times. </p><p> The scaler is optimized to use the minimum amount of memory required to scale the image correctly. The scaler may be used to produce parts of the image incrementally (banding) by calling <strong>CopyPixels</strong> with different rectangles representing the output bands of the image. Resampling typically requires overlapping rectangles from the source image and thus may need to request the same pixels from the source bitmap multiple times. Requesting scanlines out-of-order from some image decoders can have a significant performance penalty. Because of this reason, the scaler is optimized to handle consecutive horizontal bands of scanlines (rectangle width equal to the bitmap width). In this case the accumulator from the previous vertically adjacent rectangle is re-used to avoid duplicate scanline requests from the source. This implies that banded output from the scaler may have better performance if the bands are requested sequentially. Of course if the scaler is simply used to produce a single rectangle output, this concern is eliminated because the scaler will internally request scanlines in the correct order. </p> + + + + <p>Initializes the bitmap scaler with the provided parameters.</p> + <p> <strong>{{IWICBitmapScaler}}</strong> can't be initialized multiple times. For example, when scaling every frame in a multi-frame image, a new <strong>{{IWICBitmapScaler}}</strong> must be created and initialized for each frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The destination width.</p> </dd> + + + <dd> <p>The desination height.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapInterpolationMode}}</strong> to use when scaling.</p> </dd> + + + + + <p>Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.</p> + + + + <p>Initializes the bitmap clipper with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>he input bitmap source.</p> </dd> + + + <dd> <p>The rectangle of the bitmap source to clip.</p> </dd> + + + + + <p>Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. Rotations are done before the flip.</p> + <p>{{IWICBitmapFipRotator}} requests data on a per-pixel basis, while {{WIC}} codecs provide data on a per-scanline basis. This causes the fliprotator object to exhibit n? behavior if there is no buffering. This occures because each pixel in the transformed image requires an entire scanline to be decoded in the file. It is recommended that you buffer the image using <strong>{{IWICBitmap}}</strong>, or flip/rotate the image using Direct2D.</p> + + + + <p>Initializes the bitmap flip rotator with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapTransformOptions}}</strong> to flip or rotate the image.</p> </dd> + + + + + <p>Exposes methods that support the <strong>Lock</strong> method.</p> + <p>The bitmap lock is simply an abstraction for a rectangular memory window into the bitmap. For the simplest case, a system memory bitmap, this is simply a reference to the top left corner of the rectangle and a stride value.</p><p>To release the exclusive lock set by <strong>Lock</strong> method and the associated <strong>{{IWICBitmapLock}}</strong> object, call {{IUnknown::Release}} on the <strong>{{IWICBitmapLock}}</strong> object.</p> + + + + <p>Retrieves the width and height, in pixels, of the locked rectangle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the width of the locked rectangle.</p> </dd> + + + <dd> <p>A reference that receives the height of the locked rectangle.</p> </dd> + + + + + <p>Provides access to the {{stride}} value for the memory.</p> + <p> Note the {{stride}} value is specific to the <strong>{{IWICBitmapLock}}</strong>, not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Gets the reference to the top left pixel in the locked rectangle.</p> + <p>The reference provided by this method should not be used outside of the lifetime of the lock itself.</p><p><strong>GetDataPointer</strong> is not available in multi-threaded apartment applications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the size of the buffer.</p> </dd> + + + <dd> <p>A reference that receives a reference to the top left pixel in the locked rectangle.</p> </dd> + + + + + <p>Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel format {{GUID}} of the locked area.</p> </dd> + + + + + <p>Exposes methods for color management.</p> + <p>A Color Context is an abstraction for a color profile. The profile can either be loaded from a file (like "sRGB Color Space Profile.icm"), read from a memory buffer, or can be defined by an {{EXIF}} color space. The system color profile directory can be obtained by calling <strong>GetColorDirectory</strong>.</p><p>Once a color context has been initialized, it cannot be re-initialized.</p> + + + + <p>Initializes the color context from the given file.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the file.</p> </dd> + + + + + <p>Initializes the color context from a memory block.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffer used to initialize the <strong>{{IWICColorContext}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + + + <p>Initializes the color context using an Exchangeable Image File ({{EXIF}}) color space.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The value of the {{EXIF}} color space.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the color context type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICColorContextType}}</strong> of the color context.</p> </dd> + + + + + <p>Retrieves the color context profile.</p> + <p>Only use this method if the context type is <strong>{{WICColorContextProfile}}</strong>. +</p><p>Calling this method with <em>pbBuffer</em> set to <strong>{{NULL}}</strong> will cause it to return the required buffer size in <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the color context profile.</p> </dd> + + + <dd> <p>A reference that receives the actual buffer size needed to retrieve the entire color context profile.</p> </dd> + + + + + <p>Retrieves the Exchangeable Image File ({{EXIF}}) color space color context.</p> + <p>This method should only be used when <strong>{{IWICColorContext::GetType}}</strong> indicates <strong>{{WICColorContextExifColorSpace}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the {{EXIF}} color space color context.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>3 through 65534</dt> </dl> </td><td> <p>Unused.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Exposes methods that transforms an <strong>{{IWICBitmapSource}}</strong> from one color context to another.</p> + <p>A <strong>{{IWICColorTransform}}</strong> is an imaging pipeline component that knows how to pull pixels obtained from a given <strong>{{IWICBitmapSource}}</strong> through a color transform. The color transform is defined by mapping colors from the source color context to the destination color context in a given output pixel format.</p><p>Once initialized, a color transform cannot be reinitialized. Because of this, a color transform cannot be used with multiple sources or varying parameters.</p> + + + + <p>Initializes an <strong>{{IWICColorTransform}}</strong> with a <strong>{{IWICBitmapSource}}</strong> and transforms it from one <strong>{{IWICColorContext}}</strong> to another. </p> + <p>The currently supported formats for the <em>pIContextSource</em> and <em>pixelFmtDest</em> parameters are: +</p><ul> <li>{{GUID_WICPixelFormat8bppGray}}</li> <li>{{GUID_WICPixelFormat16bppGray}}</li> <li>{{GUID_WICPixelFormat16bppBGR555}}</li> <li>{{GUID_WICPixelFormat16bppBGR565}}</li> <li>{{GUID_WICPixelFormat24bppBGR}}</li> <li>{{GUID_WICPixelFormat24bppRGB}}</li> <li>{{GUID_WICPixelFormat32bppBGR}}</li> <li>{{GUID_WICPixelFormat32bppBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPRGBA}} (Windows?8 and later)</li> <li>{{GUID_WICPixelFormat32bppRGBA}}</li> <li>{{GUID_WICPixelFormat32bppBGR101010}}</li> <li>{{GUID_WICPixelFormat32bppCMYK}}</li> <li>{{GUID_WICPixelFormat48bppBGR}}</li> <li>{{GUID_WICPixelFormat64bppBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPRGBA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppRGBA}} (Windows?8 and later)</li> </ul><p>In order to get correct behavior from a color transform, the input and output pixel formats must be compatible with the source and destination color profiles. For example, an sRGB destination color profile will produce incorrect results when used with a {{CMYK}} destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods used for in-place metadata editing. A fast metadata encoder enables you to add and remove metadata to an image without having to fully re-encode the image.</p> + <p> A decoder must be created using the <strong>{{WICDecodeOptions}}</strong> value <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> to perform in-place metadata updates. Using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option causes the decoder to release the file stream necessary to perform the metadata updates. </p><p> Not all metadata formats support fast metadata encoding. The native metadata handlers that support metadata are {{IFD}}, Exif, {{XMP}}, and {{GPS}}. </p><p> If a fast metadata encoder fails, the image will need to be fully re-encoded to add the metadata. </p> + + + + <p>Finalizes metadata changes to the image stream.</p> + <p>If the commit fails and returns <strong>{{WINCODEC_ERR_STREAMNOTAVAILABLE}}</strong>, ensure that the image decoder was loaded using the <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> option. A fast metadata encoder is not supported when the decoder is created using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option. </p><p>If the commit fails for any reason, you will need to re-encode the image to ensure the new metadata is added to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a Windows Imaging Component ({{WIC}}) stream for referencing imaging and metadata content.</p> + <p>Decoders and metadata handlers are expected to create sub streams of whatever stream they hold when handing off control for embedded metadata to another metadata handler. If the stream is not restricted then use {{MAXLONGLONG}} as the max size and offset 0.</p><p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + + + + <p>Initializes a stream from another stream. Access rights are inherited from the underlying stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initialize stream.</p> </dd> + + + + + <p>Initializes a stream from a particular file.</p> + <p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a shared file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The file used to initialize the stream.</p> </dd> + + + <dd> <p>The desired file access mode.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GENERIC_READ}}</strong></dt> </dl> </td><td> <p>Read access.</p> </td></tr> <tr><td><dl> <dt><strong>{{GENERIC_WRITE}}</strong></dt> </dl> </td><td> <p>Write access.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Initializes a stream to treat a block of memory as a stream. The stream cannot grow beyond the buffer size. </p> + <p>This method should be avoided whenever possible. The caller is responsible for ensuring the memory block is valid for the lifetime of the stream when using <strong>InitializeFromMemory</strong>. A workaround for this behavior is to create an <strong>{{IStream}}</strong> and use <strong>InitializeFromIStream</strong> to create the <strong>{{IWICStream}}</strong>.</p><p>If you require a growable memory stream, use <strong>CreateStreamOnHGlobal</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the buffer used to initialize the stream.</p> </dd> + + + <dd> <p>The size of buffer.</p> </dd> + + + + + <p>Initializes the stream as a substream of another stream.</p> + <p>The stream functions with its own stream position, independent of the underlying stream but restricted to a region. All seek positions are relative to the sub region. It is allowed, though not recommended, to have multiple writable sub streams overlapping the same range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the input stream.</p> </dd> + + + <dd> <p>The stream offset used to create the new stream.</p> </dd> + + + <dd> <p>The maximum size of the stream.</p> </dd> + + + + + <p>Exposes methods that provide enumeration services for individual metadata items.</p> + + + + <p>Advanced the current position in the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of items to be retrieved.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>An array of enumerated items.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>The number of items that were retrieved. This value is always less than or equal to the number of items requested.</p> </dd> + + + + + <p>Skips to given number of objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of objects to skip.</p> </dd> + + + + + <p>Resets the current position to the beginning of the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a copy of the current <strong>{{IWICEnumMetadataItem}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods for retrieving metadata blocks and items from a decoder or its image frames using a metadata query expression.</p> + <p>A metadata query reader uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>The benefit of the query reader is the ability to access a metadata item in a single step. +</p><p>The query reader also provides the way to traverse the whole set of metadata hierarchy with the help of the <strong>GetEnumerator</strong> method. +However, it is not recommended to use this method since <strong>{{IWICMetadataBlockReader}}</strong> and <strong>{{IWICMetadataReader}}</strong> provide a more convenient and cheaper way. +</p> + + + + <p>Gets the metadata query readers container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the cointainer format {{GUID}}.</p> </dd> + + + + + <p>Retrieves the current path relative to the root metadata block.</p> + <p>If you pass <strong>{{NULL}}</strong> to <em>wzNamespace</em>, <strong>GetLocation</strong> ignores <em>cchMaxLength</em> and returns the required buffer length to store the path in the variable that <em>pcchActualLength</em> points to. +</p><p>If the query reader is relative to the top of the metadata hierarchy, it will return a single-char string.</p><p>If the query reader is relative to a nested metadata block, this method will return the path to the current query reader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the <em>wzNamespace</em> buffer.</p> </dd> + + + <dd> <p>Pointer that receives the current namespace location.</p> </dd> + + + <dd> <p>The actual buffer length that was needed to retrieve the current namespace location.</p> </dd> + + + + + <p>Retrieves the metadata block or item identified by a metadata query expression. </p> + <p><strong>GetMetadataByName</strong> uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>If multiple blocks or items exist that are expressed by the same query expression, the first metadata block or item found will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The query expression to the requested metadata block or item.</p> </dd> + + + <dd> <p>When this method returns, contains the metadata block or item requested.</p> </dd> + + + + + <p>Gets an enumerator of all metadata items at the current relative location within the metadata hierarchy.</p> + <p>The retrieved enumerator only contains query strings for the metadata blocks and items in the current level of the hierarchy. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IEnumString}}</strong> interface for the enumerator that contains query strings that can be used in the current <strong>{{IWICMetadataQueryReader}}</strong>. +</p> </dd> + + + + + <p>Exposes methods for setting or removing metadata blocks and items to an encoder or its image frames using a metadata query expression.</p> + <p>A metadata query writer uses metadata query expressions to set or remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p> + + + + <p>Sets a metadata item to a specific location.</p> + <p><strong>SetMetadataByName</strong> uses metadata query expressions to remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p> If the value set is a nested metadata block then use variant type <code>{{VT_UNKNOWN}}</code> and <em>pvarValue</em> pointing to the <strong>{{IWICMetadataQueryWriter}}</strong> of the new metadata block. The ordering of metadata items is at the discretion of the query writer since relative locations are not specified. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the metadata item.</p> </dd> + + + <dd> <p>The metadata to set.</p> </dd> + + + + + <p>Proxy function for the <strong>RemoveMetadataByName</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.</p> + <p>There are a number of concrete implemenations of this interface representing each of the standard encoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native encoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpEncoder}}</td><td>0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82</td></tr> <tr><td>{{CLSID_WICPngEncoder}}</td><td>0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc</td></tr> <tr><td>{{CLSID_WICJpegEncoder}}</td><td>0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76</td></tr> <tr><td>{{CLSID_WICGifEncoder}}</td><td>0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd</td></tr> <tr><td>{{CLSID_WICTiffEncoder}}</td><td>0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8</td></tr> <tr><td>{{CLSID_WICWmpEncoder}}</td><td>0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2</td></tr> </table><p>?</p><p>Additionally this interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p> + + + + <p>Initializes the encoder with an {{IStream}} which tells the encoder where to encode the bits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the encoder's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the encoder's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapEncoderInfo}}</strong> for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICColorContext}}</strong> objects for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the global thumbnail for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to set as the global thumbnail.</p> </dd> + + + + + <p>Sets the global preview for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to use as the global preview.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapFrameEncode}}</strong> instance.</p> + <p>The parameter <em>ppIEncoderOptions</em> can be used to receive an {{IPropertyBag2}} that can then be used to specify encoder options. This is done by passing a reference to a <strong>{{NULL}}</strong> {{IPropertyBag2}} reference in <em>ppIEncoderOptions</em>. The returned {{IPropertyBag2}} is initialized with all encoder options that are available for the given format, at their default values. To specify non-default encoding behavior, set the needed encoder options on the {{IPropertyBag2}} and pass it to <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>.</p><strong>Note</strong>??Do not pass in a reference to an initialized {{IPropertyBag2}}. The reference will be overwritten, and the original {{IPropertyBag2}} will not be freed.?<p>Otherwise, you can pass <strong>{{NULL}}</strong> in <em>ppIEncoderOptions</em> if you do not intend to specify encoder options.</p><p>See Encoding Overview for an example of how to set encoder options.</p><p>For formats that support encoding multiple frames (for example, {{TIFF}}, {{JPEG}}-{{XR}}), you can work on only one frame at a time. This means that you must call <strong>{{IWICBitmapFrameEncode::Commit}}</strong> before you call <strong>CreateNewFrame</strong> again. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all changes for the image and closes the stream.</p> + <p>To finalize an image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p><p>After the encoder has been committed, it can't be re-initialized or reused with another stream. A new encoder interface must be created, for example, with <strong>{{IWICImagingFactory::CreateEncoder}}</strong>. +</p><p>For the encoder <strong>Commit</strong> to succeed, you must at a minimum call <strong>{{IWICBitmapEncoder::Initialize}}</strong> and either <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> or <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong>. +</p><p> <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> specifies all parameters needed to encode the image data. <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> requires that you also call <strong>{{IWICBitmapFrameEncode::SetSize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong> (if the pixel format is indexed). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents an encoder's individual image frames.</p> + + + + <p>Initializes the frame encoder using the given properties.</p> + <p>If you don't want any encoding options, pass <strong>{{NULL}}</strong> for <em>pIEncoderOptions</em>. Otherwise, pass the {{IPropertyBag2}} that was provided by <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> with updated values. +</p><p>For a complete list of encoding options supported by the Windows-provided codecs, see Native {{WIC}} Codecs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The set of properties to use for <strong>{{IWICBitmapFrameEncode}}</strong> initialization.</p> </dd> + + + + + <p>Sets the output image dimensions for the frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the output image.</p> </dd> + + + <dd> <p>The height of the output image.</p> </dd> + + + + + <p>Sets the physical resolution of the output image.</p> + <p>Windows Imaging Component ({{WIC}}) doesn't perform any special processing as a result of {{DPI}} resolution values. For example, data returned from <strong>{{IWICBitmapSource::CopyPixels}}</strong> isn't scaled by the {{DPI}}. The app must handle {{DPI}} resolution. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution value.</p> </dd> + + + <dd> <p>The vertical resolution value.</p> </dd> + + + + + <p>Requests that the encoder use the specified pixel format.</p> + <p>The encoder might not support the requested pixel format. If not, <strong>SetPixelFormat</strong> returns the closest match in the memory block that <em>pPixelFormat</em> points to. If the returned pixel format doesn't match the requested format, you must use an <strong>{{IWICFormatConverter}}</strong> object to convert the pixel data.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_WRONGSTATE}}</strong></dt> </dl> </td><td> <p>The <strong>{{IWICBitmapFrameEncode::Initialize}}</strong> method was not called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>On input, the requested pixel format {{GUID}}. On output, the closest pixel format {{GUID}} supported by the encoder; this may be different than the requested format. For a list of pixel format {{GUIDs}}, see Native Pixel Formats.</p> </dd> + + + + + <p>Proxy function for the <strong>SetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICPalette}}</strong> for indexed pixel formats.</p> + <p>This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.</p><p>If you already called <strong>{{IWICBitmapEncoder::SetPalette}}</strong> to set a global palette, this method overrides that palette for the current frame.</p><p>The palette must be specified before your first call to <strong>WritePixels</strong>/<strong>WriteSource</strong>. Doing so will cause <strong>WriteSource</strong> to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to <strong>WriteSource</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies scan-line data from a caller-supplied buffer to the <strong>{{IWICBitmapFrameEncode}}</strong> object. +</p> + <p>Successive <strong>WritePixels</strong> calls are assumed to be sequential scan-line access in the output image.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_CODECTOOMANYSCANLINES}}</strong></dt> </dl> </td><td> <p>The value of <em>lineCount</em> is larger than the number of scan lines in the image.</p> </td></tr> </table><p>?</p> + + + + <p>Encodes a bitmap source.</p> + <p>If <strong>SetSize</strong> is not called prior to calling <strong>WriteSource</strong>, the size given in <em>prc</em> is used if not <strong>{{NULL}}</strong>. Otherwise, the size of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used. </p><p>If <strong>SetPixelFormat</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used.</p><p>If <strong>SetResolution</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of <em>pIBitmapSource</em> is used.</p><p>If <strong>SetPalette</strong> is not called prior to calling <strong>WriteSource</strong>, the target pixel format is indexed, and the pixel format of <em>pIBitmapSource</em> matches the encoder frame's pixel format, then the <em>pIBitmapSource</em> pixel format is used.</p><p>When encoding a {{GIF}} image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor ({{ISV}}) {{GIF}} codec, <strong>WriteSource</strong> will use the global palette to encode the frame even when <em>pIBitmapSource</em> has a frame level palette.</p><p>Starting with Windows?Vista, repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>.</p><p>Starting with Windows?8.1, the source rect must be at least the dimensions set through <strong>SetSize</strong>. If the source rect width exceeds the <strong>SetSize</strong> width, extra pixels on the right side are ignored. If the source rect height exceeds the remaining unfilled height, extra scan lines on the bottom are ignored. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap source to encode.</p> </dd> + + + <dd> <p>The size rectangle of the bitmap source.</p> </dd> + + + + + <p>Commits the frame to the image.</p> + <p>After the frame <strong>Commit</strong> has been called, you can't use or reinitialize the <strong>{{IWICBitmapFrameEncode}}</strong> object and any objects created from it. +</p><p>To finalize the image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the metadata query writer for the encoder frame.</p> + <p>If you are setting metadata on the frame, you must do this before you use <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> or <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> to write any image pixels to the frame</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to metadata query writer for the encoder frame.</p> </dd> + + + + + <p>Allows planar component image pixels to be written to an encoder. When supported by the encoder, this allows an application to encode planar component image data without first converting to an interleaved pixel format.</p><p>You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICBitmapFrameEncode}}</strong> for the {{JPEG}} encoder. +</p> + <p>Encoding {{YCbCr}} data using <strong>{{IWICPlanarBitmapFrameEncode}}</strong> is similar but not identical to encoding interleaved data using {{IWICBitmapFrameEncode}}. The planar interface only exposes the ability to write planar frame image data, and you should continue to use the frame encode interface to set metadata or a thumbnail and to commit at the end of the operation. +</p> + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WritePixels</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>Line Count Restriction</th><th>Chroma Plane Width</th><th>Chroma Plane Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>Any</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>The number of lines to encode. See the Remarks section for {{WIC}} Jpeg specific line count restrictions.</p> </dd> + + + <dd> <p>Specifies the source buffers for each component plane encoded. </p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pPlanes</em> parameter.</p> </dd> + + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WriteSource</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. </p><p>If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>Specifies an array of <strong>{{IWICBitmapSource}}</strong> that represent image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The source rectangle of pixels to encode from the <strong>{{IWICBitmapSource}}</strong> planes. Null indicates the entire source. The source rect width must match the width set through <strong>SetSize</strong>. Repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>. </p> </dd> + + + + + <p>Encodes <strong>{{ID2D1Image}}</strong> interfaces to an <strong>{{IWICBitmapEncoder}}</strong>. The input images can be larger than the maximum device texture size.</p> + + + + <p>Encodes the image to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>.</p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the {{IWICBitmapFrameEncode}} before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the image as a thumbnail to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>. </p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the <strong>{{IWICBitmapFrameEncode}}</strong> before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the given image as the thumbnail to the given {{WIC}} bitmap encoder.</p> + <p>You must create the image that you pass in on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If you don't specify additional parameters in the variable that <em>pImageParameters</em> points to, the encoder uses a set of useful defaults. For info about these defaults, see <strong>{{WICImageParameters}}</strong>. </p><p>Before you call <strong>WriteThumbnail</strong>, you must set up the <strong>{{IWICBitmapEncoder}}</strong> interface for the encoder on which you want to set the thumbnail. </p><p>If <strong>WriteThumbnail</strong> fails, it might return {{E_OUTOFMEMORY}}, {{D2DERR_WRONG_RESOURCE_DOMAIN}}, or other error codes from the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Direct2D image that will be encoded.</p> </dd> + + + <dd> <p>The encoder on which the thumbnail is set.</p> </dd> + + + <dd> <p>Additional parameters to control encoding.</p> </dd> + + + + + <p>Exposes methods that represent a decoder.</p><p>The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette. </p> + <p>There are a number of concrete implemenations of this interface representing each of the standard decoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), icon ({{ICO}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native decoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpDecoder}}</td><td>0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78</td></tr> <tr><td>{{CLSID_WICPngDecoder}}</td><td>0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51</td></tr> <tr><td>{{CLSID_WICIcoDecoder}}</td><td>0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe</td></tr> <tr><td>{{CLSID_WICJpegDecoder}}</td><td>0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca</td></tr> <tr><td>{{CLSID_WICGifDecoder}}</td><td>0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe</td></tr> <tr><td>{{CLSID_WICTiffDecoder}}</td><td>0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b</td></tr> <tr><td>{{CLSID_WICWmpDecoder}}</td><td>0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d</td></tr> </table><p>?</p><p>This interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p><p>Codecs written as {{TIFF}} container formats that are not register will decode as a {{TIFF}} image. Client applications should check for a zero frame count to determine if the codec is valid.</p> + + + + <p>Retrieves the capabilities of the decoder based on the specified stream.</p> + <p>Custom decoder implementations should save the current position of the specified {{IStream}}, read whatever information is necessary in order to determine which capabilities it can provide for the supplied stream, and restore the stream position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to retrieve the decoder capabilities from.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDecoderCapabilities}}</strong> of the decoder.</p> </dd> + + + + + <p>Initializes the decoder with the provided stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to use for initialization.</p> <p>The stream contains the encoded pixels which are decoded each time the <strong>CopyPixels</strong> method on the <strong>{{IWICBitmapFrameDecode}}</strong> interface (see <strong>GetFrame</strong>) is invoked.</p> </dd> + + + <dd> <p>The <strong>{{WICDecodeOptions}}</strong> to use for initialization.</p> </dd> + + + + + <p>Retrieves the image's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the image's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapDecoderInfo}}</strong> for the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CopyPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a preview image, if supported.</p> + <p>Not all formats support previews. Only the native Microsoft?Windows Digital Photo ({{WDP}}) codec support previews.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the preview bitmap if supported.</p> </dd> + + + + + <p>Proxy function for the <strong>GetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the total number of frames in the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the total number of frames in the image.</p> </dd> + + + + + <p>Retrieves the specified frame of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The particular frame to retrieve.</p> </dd> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapFrameDecode}}</strong>.</p> </dd> + + + + + + + + + <p>Copies pixel data using the supplied input parameters.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle of pixels to copy.</p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p> The {{GUID}} of desired pixel format in which the pixels should be returned. </p> <p>This {{GUID}} must be a format obtained through an <strong>GetClosestPixelFormat</strong> call.</p> </dd> + + + <dd> <p> The desired rotation or flip to perform prior to the pixel copy. </p> <p>The transform must be an operation supported by an <strong>DoesSupportTransform</strong> call.</p> <p>If a <em>dstTransform</em> is specified, <em>nStride</em> is the <em>transformed stride</em> and is based on the <em>pguidDstFormat</em> pixel format, not the original source's pixel format.</p> </dd> + + + <dd> <p>The {{stride}} of the destination buffer.</p> </dd> + + + <dd> <p>The size of the destination buffer.</p> </dd> + + + <dd> <p>The output buffer.</p> </dd> + + + + + <p>Returns the closest dimensions the implementation can natively scale to given the desired dimensions.</p> + <p>The Windows provided codecs provide the following support for native scaling: +</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{PNG:}} No scaling support.</li> <li>{{JPEG:}} Native down-scaling by a factor of 8, 4, or 2.</li> <li>{{JPEG}}-{{XR:}} Native scaling of the original image by powers of 2. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired width. A reference that receives the closest supported width.</p> </dd> + + + <dd> <p>The desired height. A reference that receives the closest supported height.</p> </dd> + + + + + <p>Retrieves the closest pixel format to which the implementation of <strong>{{IWICBitmapSourceTransform}}</strong> can natively copy pixels, given a desired format.</p> + <p>The Windows provided codecs provide the following support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of <strong>{{IWICBitmapSourceTransform}}</strong>.</li> <li>{{JPEG}}, {{PNG}}, {{JPEG}}-{{XR:}} Trivial support (always returns the same value as <strong>{{IWICBitmapFrameDecode::GetPixelFormat}}</strong>).</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether a specific transform option is supported natively by the implementation of the <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p> + <p>The Windows provided codecs provide the following level of support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{JPEG}}, {{PNG:}} Trivial support ({{WICBitmapTransformRotate0}} only).</li> <li>{{JPEG}}-{{XR:}} Support for all transformation/rotations. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides access to planar Y?CbCr pixel formats where pixel components are stored in separate component planes. This interface also allows access to other codec optimizations for flip/rotate, scale, and format conversion to other Y?CbCr planar formats; this is similar to the pre-existing <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p><p>QueryInterface can be used to obtain this interface from the Windows provided implementations of <strong>{{IWICBitmapFrameDecode}}</strong> for the {{JPEG}} decoder, <strong>{{IWICBitmapScaler}}</strong>, <strong>{{IWICBitmapFlipRotator}}</strong>, and <strong>{{IWICColorTransform}}</strong>.</p> + + + + <p>Use this method to determine if a desired planar output is supported and allow the caller to choose an optimized code path if it is. Otherwise, callers should fall back to <strong>{{IWICBitmapSourceTransform}}</strong> or <strong>{{IWICBitmapSource}}</strong> and retrieve interleaved pixels.</p><p> The following transforms can be checked:</p><ul> <li> Determine if the flip/rotate option specified via <strong>{{WICBitmapTransformOptions}}</strong> is supported.</li> <li>Determine if the requested planar pixel format configuration is supported.</li> <li>Determine the closest dimensions the implementation can natively scale to given the desired dimensions. +</li> </ul><p>When a transform is supported, this method returns the description of the resulting planes in the <em>pPlaneDescriptions</em> parameter. +</p> + <p>Check the value of <em>pfIsSupported</em> to determine if the transform is supported via <strong>{{IWICPlanarBitmapSourceTransform::CopyPixels}}</strong>. If this method fails, the output parameters for width, height, and plane descriptions are zero initialized. +Other return values indicate failure. </p> + + + + <p>Copies pixels into the destination planes. Configured by the supplied input parameters. </p><p>If a <em>dstTransform</em>, scale, or format conversion is specified, <em>cbStride</em> is the transformed stride and is based on the destination pixel format of the <em>pDstPlanes</em> parameter, not the original source's pixel format.</p> + <p>{{WIC}} {{JPEG}} Decoder: +Depending on the configured chroma subsampling of the image, the source rectangle has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>llumaWidth</td><td>llumaHeight</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The <em>pDstPlanes</em> parameter supports the following pixel formats.</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the specified scale, flip/rotate, and planar format configuration is not supported this method fails with <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong>. You can check if a transform is supported by calling <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> + + + <dd> <p>The source rectangle of pixels to copy. </p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The desired rotation or flip to perform prior to the pixel copy. A rotate can be combined with a flip horizontal or a flip vertical, see <strong>{{WICBitmapTransformOptions}}</strong>.</p> </dd> + + + <dd> <p>Used to specify additional configuration options for the transform. See <strong>{{WICPlanarOptions}}</strong> for more detail.</p> <p>{{WIC}} {{JPEG}} Decoder: +<strong>{{WICPlanarOptionsPreserveSubsampling}}</strong> can be specified to retain the subsampling ratios when downscaling. By default, the {{JPEG}} decoder attempts to preserve quality by downscaling only the Y plane in some cases, changing the image to 4:4:4 chroma subsampling. +</p> </dd> + + + <dd> <p>Specifies the pixel format and output buffer for each component plane. The number of planes and pixel format of each plane must match values obtainable through <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pDstPlanes</em> parameter.</p> </dd> + + + + + <p>Defines methods for decoding individual image frames of an encoded file.</p> + + + + <p>Retrieves a metadata query reader for the frame.</p> + <p>For image formats with one frame ({{JPG}}, {{PNG}}, {{JPEG}}-{{XR}}), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame ({{GIF}}, {{TIFF}}), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of {{GIF}} a decoder-level metadata reader will be present. If the decoder doesn?t support metadata ({{BMP}}, {{ICO}}), this will return {{WINCODEC_ERR_UNSUPPORTEDOPERATION}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to the frame's metadata query reader.</p> </dd> + + + + + <p>Retrieves the <strong>{{IWICColorContext}}</strong> associated with the image frame.</p> + <p>If {{NULL}} is passed for <em>ppIColorContexts</em>, and 0 is passed for <em>cCount</em>, this method will return the total number of color contexts in the image in <em>pcActualCount</em>. </p><p>The <em>ppIColorContexts</em> array must be filled with valid data: each <strong>{{IWICColorContext}}*</strong> in the array must have been created using <strong>{{IWICImagingFactory::CreateColorContext}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a small preview of the frame, if supported by the codec.</p> + <p>Not all formats support thumbnails. Joint Photographic Experts Group ({{JPEG}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}) support thumbnails.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapSource}}</strong> of the thumbnail.</p> </dd> + + + + + <p>Exposes methods for obtaining information about and controlling progressive decoding.</p> + <p>Images can only be progressively decoded if they were progressively encoded. Progressive images automatically start at the highest (best quality) progressive level. The caller must manually set the decoder to a lower progressive level.</p><p>{{E_NOTIMPL}} is returned if the codec does not support progressive level decoding.</p> + + + + <p>Gets the number of levels of progressive decoding supported by the {{CODEC}}.</p> + <p>Users should not use this function to iterate through the progressive levels of a progressive {{JPEG}} image. {{JPEG}} progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive {{JPEG}} image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the number of levels supported by the {{CODEC}}.</p> </dd> + + + + + <p>Gets the decoder's current progressive level.</p> + <p>The level always defaults to the highest progressive level. In order to decode a lower progressive level, <strong>SetCurrentLevel</strong> must first be called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the current level specified.</p> </dd> + + + + + <p>Specifies the level to retrieve on the next call to <strong>CopyPixels</strong>.</p> + <p> A call does not have to request every level supported. If a caller requests level 1, without having previously requested level 0, the bits returned by the next call to <strong>CopyPixels</strong> will include both levels. </p><p> If the requested level is invalid, the error returned is {{WINCODEC_ERR_INVALIDPROGRESSIVELEVEL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p><strong>{{IWICProgressCallback}}</strong> interface is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + + + + <p><strong>Notify</strong> method is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + <p>Registers a progress notification callback function.</p> + <p>Applications can only register a single callback. Subsequent registration calls will replace the previously registered callback. To unregister a callback, pass in <strong>{{NULL}}</strong> or register a new callback function.</p><p> Progress is reported in an increasing order between 0.0 and 1.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationBegin}}</strong>, the callback is guaranteed to be called with progress 0.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationEnd}}</strong>, the callback is guaranteed to be called with progress 1.0. </p><p><strong>{{WICProgressNotificationFrequent}}</strong> increases the frequency in which the callback is called. If an operation is expected to take more than 30 seconds, <strong>{{WICProgressNotificationFrequent}}</strong> should be added to <em>dwProgressFlags</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A function reference to the application defined progress notification callback function. See <strong>ProgressNotificationCallback</strong> for the callback signature.</p> </dd> + + + <dd> <p>A reference to component data for the callback method.</p> </dd> + + + <dd> <p>The <strong>{{WICProgressOperation}}</strong> and <strong>{{WICProgressNotification}}</strong> flags to use for progress notification.</p> </dd> + + + + + <p>Exposes methods that provide component information.</p> + + + + <p>Retrieves the component's <strong>{{WICComponentType}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetCLSID</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the signing status of the component.</p> + <p>Signing is unused by {{WIC}}. Therefore, all components {{WICComponentSigned}}.</p><p>This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICComponentSigning}}</strong> status of the component.</p> </dd> + + + + + <p>Retrieves the name of component's author.</p> + <p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzAuthor</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the name of the component's author. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's authors name. The author name is optional; if an author name is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the vendor {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the component's vendor {{GUID}}.</p> </dd> + + + + + <p>Proxy function for the <strong>GetVersion</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the component's specification version.</p> + <p>All built-in components return "1.0.0.0", except for pixel formats, which do not have a spec version.</p><p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzSpecVersion</em> buffer.</p> </dd> + + + <dd> <p>When this method returns, contain a culture invarient string of the component's specification version. The version form is {{NN}}.{{NN}}.{{NN}}.{{NN}}.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's specification version. The specification version is optional; if a value is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the component's friendly name, which is a human-readable display name for the component.</p> + <p>If <em>cchFriendlyName</em> is 0 and <em>wzFriendlyName</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzFriendlyName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the friendly name of the component. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's friendly name.</p> </dd> + + + + + <p>Exposes methods that provide information about a pixel format converter.</p> + + + + <p>Retrieves a list of {{GUIDs}} that signify which pixel formats the converter supports.</p> + <p>The format converter does not necessarily guarantee symmetricality with respect to conversion; that is, a converter may be able to convert {{FROM}} a particular format without actually being able to convert {{TO}} a particular format. In order to test symmetricality, use <strong>CanConvert</strong>.</p><p>To determine the number of pixel formats a coverter can handle, set <em>cFormats</em> to <code>0</code> and <em>pPixelFormatGUIDs</em> to <code>{{NULL}}</code>. The converter will fill <em>pcActual</em> with the number of formats supported by that converter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pPixelFormatGUIDs</em> array.</p> </dd> + + + <dd> <p>Pointer to a {{GUID}} array that receives the pixel formats the converter supports.</p> </dd> + + + <dd> <p>The actual array size needed to retrieve all pixel formats supported by the converter.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICFormatConverter}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a particular codec.</p> + + + + <p>Proxy function for the <strong>GetContainerFormat</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the pixel formats the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the array size needed to retrieve all the supported pixel formats by calling it with <em>cFormats</em> set to <code>0</code> and <em>pguidPixelFormats</em> set to <code>{{NULL}}</code>. This call sets <em>pcActual</em> to the array size needed. Once the needed array size is determined, a second <strong>GetPixelFormats</strong> call with <em>pguidPixelFormats</em> set to an array of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pguidPixelFormats</em> array. Use <code>0</code> on first call to determine the needed array size.</p> </dd> + + + <dd> <p>Receives the supported pixel formats. Use <code>{{NULL}}</code> on first call to determine needed array size.</p> </dd> + + + <dd> <p>The array size needed to retrieve all supported pixel formats.</p> </dd> + + + + + <p>Retrieves the color manangement version number the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchColorManagementVersion</em> set to <code>0</code> and <em>wzColorManagementVersion</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetColorManagementVersion</strong> call with <em>cchColorManagementVersion</em> set to the buffer size and <em>wzColorManagementVersion</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the version buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the color management version number. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the full color management version number.</p> </dd> + + + + + <p>Retrieves the name of the device manufacture associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceManufacturer</em> set to <code>0</code> and <em>wzDeviceManufacturer</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceManufacturer</strong> call with <em>cchDeviceManufacturer</em> set to the buffer size and <em>wzDeviceManufacturer</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device manufacture's name. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the device manufacture's name. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the device manufacture's name.</p> </dd> + + + + + <p>Retrieves a comma delimited list of device models associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceModels</em> set to <code>0</code> and <em>wzDeviceModels</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceModels</strong> call with <em>cchDeviceModels</em> set to the buffer size and <em>wzDeviceModels</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device models buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of device model names associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all of the device model names.</p> </dd> + + + + + <p>Proxy function for the <strong>GetMimeTypes</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a comma delimited list of the file name extensions associated with the codec.</p> + <p>The default extension for an image encoder is the first item in the list of returned extensions.</p><p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchFileExtensions</em> set to <code>0</code> and <em>wzFileExtensions</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetFileExtensions</strong> call with <em>cchFileExtensions</em> set to the buffer size and <em>wzFileExtensions</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the file name extension buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of file name extensions associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all file name extensions associated with the codec. </p> </dd> + + + + + <p>Proxy function for the <strong>DoesSupportAnimation</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value indicating whether the codec supports chromakeys.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports chromakeys; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports lossless formats.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports lossless formats; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports multi frame images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports multi frame images; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the given mime type matches the mime type of the codec.</p> + <strong>Note</strong>??The Windows provided codecs do not implement this method and return {{E_NOTIMPL}}.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The codec does not implement this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The mime type to compare.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the mime types match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Exposes methods that provide information about an encoder.</p> + + + + <p>Creates a new <strong>{{IWICBitmapEncoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a decoder.</p> + + + + <p>Retrieves the file pattern signatures supported by the decoder.</p> + <p> To retrieve all pattern signatures, this method should first be called with <em>pPatterns</em> set to <code>{{NULL}}</code> to retrieve the actual buffer size needed through <em>pcbPatternsActual</em>. Once the needed buffer size is known, allocate a buffer of the needed size and call <strong>GetPatterns</strong> again with the allocated buffer. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array size of the <em>pPatterns</em> array.</p> </dd> + + + <dd> <p>Receives a list of <strong>{{WICBitmapPattern}}</strong> objects supported by the decoder.</p> </dd> + + + <dd> <p>Receives the number of patterns the decoder supports.</p> </dd> + + + <dd> <p>Receives the actual buffer size needed to retrieve all pattern signatures supported by the decoder. </p> </dd> + + + + + <p>Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to pattern match within.</p> </dd> + + + <dd> <p>A reference that receives <strong>{{TRUE}}</strong> if the patterns match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapDecoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a pixel format.</p> + + + + <p>Gets the pixel format {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the pixel format {{GUID}}.</p> </dd> + + + + + <p>Gets the pixel format's <strong>{{IWICColorContext}}</strong>.</p> + <p>The returned color context is the default color space for the pixel format. However, if an {{IWICBitmapSource}} specifies its own color context, the source's context should be preferred over the pixel format's default. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetBitsPerPixel</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetChannelCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the pixel format's channel mask.</p> + <p>If 0 and {{NULL}} are passed in for <em>cbMaskBuffer</em> and <em>pbMaskBuffer</em>, respectively, the required buffer size will be returned through <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index to the channel mask to retrieve.</p> </dd> + + + <dd> <p>The size of the <em>pbMaskBuffer</em> buffer.</p> </dd> + + + <dd> <p>Pointer to the mask buffer.</p> </dd> + + + <dd> <p>The actual buffer size needed to obtain the channel mask.</p> </dd> + + + + + <p>Extends <strong>{{IWICPixelFormatInfo}}</strong> by providing additional information about a pixel format.</p> + + + + <p>Returns whether the format supports transparent pixels.</p> + <p> An indexed pixel format will not return <strong>{{TRUE}}</strong> even though it may have some transparency support. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if the pixel format supports transparency; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the <strong>{{WICPixelFormatNumericRepresentation}}</strong> of the pixel format.</p> </dd> + + + + + <p>Exposes methods used to create components for the Windows Imaging Component ({{WIC}}) such as decoders, encoders and pixel format converters.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given {{IStream}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> based on the given file handle.</p> + <p>When a decoder is created using this method, the file handle must remain alive during the lifetime of the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateComponentInfo</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapEncoder}}</strong> class.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICPalette}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICFormatConverter}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of an <strong>{{IWICBitmapScaler}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapClipper</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapFlipRotator</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICStream}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorContext}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorTransform}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> object.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a <strong>{{IWICBitmap}}</strong> from a <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a specified rectangle of an <strong>{{IWICBitmapSource}}</strong>.</p> + <p>Providing a rectangle that is larger than the source will produce undefined results.</p><p>This method always creates a separate copy of the source image, similar to the cache option <strong>{{WICBitmapCacheOnLoad}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a memory block.</p> + <p>The size of the {{IWICBitmap}} to be created must be smaller than or equal to the size of the image in <em>pbBuffer</em>.</p><p>The {{stride}} of the destination bitmap will equal the <em>stride</em> of the source data, regardless of the width and height specified.</p><p>The <em>pixelFormat</em> parameter defines the pixel format for both the input data and the output bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a bitmap handle.</p> + <p>For a non-palletized bitmap, set {{NULL}} for the <em>hPalette</em> parameter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from an icon handle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an {{IEnumUnknown}} object of the specified component types.</p> + <p>Component types must be enumerated seperately. Combinations of component types and <strong>{{WICAllComponents}}</strong> are unsupported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p>The Windows provided codecs do not support fast metadata encoding at the decoder level, and only support fast metadata encoding at the frame level. To create a fast metadata encoder from a frame, see <strong>CreateFastMetadataEncoderFromFrameDecode</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given image frame.</p> + <p>For a list of support metadata formats for fast metadata encoding, see {{WIC}} Metadata Overview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{IWICBitmapFrameDecode}}</strong> to create the <strong>{{IWICFastMetadataEncoder}}</strong> from.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a new fast metadata encoder.</p> </dd> + + + + + <p>Proxy function for the <strong>CreateQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateQueryWriterFromReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>An extension of the {{WIC}} factory interface that includes the ability to create an <strong>{{IWICImageEncoder}}</strong>. This interface uses a Direct2D device and an input image to encode to a destination <strong>{{IWICBitmapEncoder}}</strong>.</p> + + + + <p>Creates a new image encoder object.</p> + <p>You must create images to pass to the image encoder on the same Direct2D device that you pass to this method. </p><p>You are responsible for setting up the bitmap encoder itself through the existing <strong>{{IWICBitmapEncoder}}</strong> {{APIs}}. The <strong>{{IWICBitmapEncoder}}</strong> or the {{IWICBitmapFrameEncode}} object is passed to each of the <strong>{{IWICImageEncoder}}</strong> methods: <strong>WriteThumbnail</strong>, <strong>WriteFrame</strong>, and <strong>WriteFrameThumbnail</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{ID2D1Device}}</strong> object on which the corresponding image encoder is created.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IWICImageEncoder}}</strong> interface for the encoder object that you can use to encode Direct2D images.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + + + + + <p>Retrieves information about which capabilities are supported for a raw image.</p> + <p>It is recommended that a codec report that a capability is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives <strong>{{WICRawCapabilitiesInfo}}</strong> that provides the capabilities supported by the raw image.</p> </dd> + + + + + <p>Sets the desired <strong>{{WICRawParameterSet}}</strong> option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current set of parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the current set of parameters.</p> </dd> + + + + + <p>Sets the exposure compensation stop value.</p> + <p>It is recommended that a codec report that this method is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The exposure compensation value. The value range for exposure compensation is -5.0 through +5.0, which equates to 10 full stops.</p> </dd> + + + + + <p>Gets the exposure compensation stop value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the exposure compensation stop value. The default is the "as-shot" setting.</p> </dd> + + + + + <p>Sets the white point {{RGB}} values.</p> + <p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The red white point value.</p> </dd> + + + <dd> <p>The green white point value.</p> </dd> + + + <dd> <p>The blue white point value.</p> </dd> + + + + + <p>Gets the white point {{RGB}} values.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the red white point value.</p> </dd> + + + <dd> <p>A reference that receives the green white point value.</p> </dd> + + + <dd> <p>A reference that receives the blue white point value.</p> </dd> + + + + + <p>Sets the named white point of the raw file.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in the {{API}}.</p><p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Gets the named white point of the raw image.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in <strong>{{WICNamedWhitePoint}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Sets the white point Kelvin value.</p> + <p>Codec implementers should faithfully adjust the color temperature within the range supported natively by the raw image. For values outside the native support range, the codec implementer should provide a best effort representation of the image at that color temperature.</p><p>Codec implementers should return <strong>{{WINCODEC_ERR_VALUEOUTOFRANGE}}</strong> if the value is out of defined acceptable range.</p><p>Codec implementers must ensure proper interoperability with other white point setting methods such as <strong>SetWhitePointRGB</strong>. For example, if the caller sets the white point via <strong>SetNamedWhitePoint</strong> then the codec implementer may want to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wants to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The white point Kelvin value. Acceptable Kelvin values are 1,500 through 30,000.</p> </dd> + + + + + <p>Gets the white point Kelvin temperature of the raw image.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the white point Kelvin temperature of the raw image. The default is the "as-shot" setting value.</p> </dd> + + + + + <p>Gets the information about the current Kelvin range of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the minimum Kelvin temperature.</p> </dd> + + + <dd> <p>A reference that receives the maximum Kelvin temperature. </p> </dd> + + + <dd> <p>A reference that receives the Kelvin step value.</p> </dd> + + + + + <p>Sets the contrast value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Gets the contrast value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Sets the desired gamma value.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired gamma value.</p> </dd> + + + + + <p>Gets the current gamma setting of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current gamma setting.</p> </dd> + + + + + <p>Sets the sharpness value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Gets the sharpness value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Sets the saturation value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The saturation value of the raw image. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Gets the saturation value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the saturation value of the raw image. The default value is the "as-shot" setting. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Sets the tint value of the raw image.</p> + <p>The codec implementer must determine what the outer range values represent and must determine how to map the values to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Gets the tint value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Sets the noise reduction value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Gets the noise reduction value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents full highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Sets the destination color context.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The destination color context.</p> </dd> + + + + + <p>Sets the tone curve for the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> structure.</p> </dd> + + + <dd> <p>The desired tone curve.</p> </dd> + + + + + <p>Gets the tone curve of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the <strong>{{WICRawToneCurve}}</strong> of the raw image.</p> </dd> + + + <dd> <p>A reference that receives the size needed to obtain the tone curve structure.</p> </dd> + + + + + <p>Sets the desired rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired rotation angle.</p> </dd> + + + + + <p>Gets the current rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current rotation angle.</p> </dd> + + + + + <p>Sets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the notification callback method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the notification callback method.</p> </dd> + + + + + <p>Provides information and functionality specific to the {{DDS}} image format.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapDecoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsDecoder}}</strong>.</p> + + + + <p>Gets {{DDS}}-specific data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the structure where the information is returned.</p> </dd> + + + + + <p>Retrieves the specified frame of the {{DDS}} image.</p> + <p>A {{DDS}} file can contain multiple images that are organized into a three level hierarchy. First, {{DDS}} file may contain multiple textures in a texture array. Second, each texture can have multiple mip levels. Finally, the texture may be a 3D (volume) texture and have multiple slices, each of which is a 2D texture. See the {{DDS}} documentation for more information.</p><p>{{WIC}} maps this three level hierarchy into a linear array of <strong>{{IWICBitmapFrameDecode}}</strong>, accessible via <strong>{{IWICBitmapDecoder::GetFrame}}</strong>. However, determining which frame corresponds to a triad of <em>arrayIndex</em>, <em>mipLevel</em>, and <em>sliceIndex</em> value is not trivial because each mip level of a 3D texture has a different depth (number of slices). This method provides additional convenience over <strong>{{IWICBitmapDecoder::GetFrame}}</strong> for {{DDS}} images by calculating the correct frame given the three indices. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested index within the texture array.</p> </dd> + + + <dd> <p> The requested mip level.</p> </dd> + + + <dd> <p>The requested slice within the 3D texture. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{IWICBitmapFrameDecode}}</strong> object. +</p> </dd> + + + + + <p>Enables writing {{DDS}} format specific information to an encoder.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapEncoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsEncoder}}</strong>.</p> + + + + <p>Sets {{DDS}}-specific data.</p> + <p>You cannot call this method after you have started to write frame data, for example by calling <strong>{{IWICDdsEncoder::CreateNewFrame}}</strong>. </p><p>Setting {{DDS}} parameters using this method provides the {{DDS}} encoder with information about the expected number of frames and the dimensions and other parameters of each frame. The {{DDS}} encoder will fail if you do not set frame data that matches these expectations. For example, if you set <strong>{{WICDdsParameters::Width}}</strong> and <strong>Height</strong> to 32, and <strong>MipLevels</strong> to 6, the {{DDS}} encoder will expect 6 frames with the following dimensions:</p><ul> <li>32x32 pixels.</li> <li>16x16 pixels.</li> <li>8x8 pixels.</li> <li>4x4 pixels.</li> <li>2x2 pixels.</li> <li>1x1 pixels.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is described.</p> </dd> + + + + + <p>Gets {{DDS}}-specific data.</p> + <p>An application can call <strong>GetParameters</strong> to obtain the default {{DDS}} parameters, modify some or all of them, and then call <strong>SetParameters</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is returned.</p> </dd> + + + + + <p>Creates a new frame to encode.</p> + <p>This is equivalent to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, but returns additional information about the array index, mip level and slice of the newly created frame. In contrast to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, there is no <strong>{{IPropertyBag2}}</strong>* parameter because individual {{DDS}} frames do not have separate properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the newly created frame object.</p> </dd> + + + <dd> <p>Points to the location where the array index is returned.</p> </dd> + + + <dd> <p>Points to the location where the mip level index is returned.</p> </dd> + + + <dd> <p>Points to the location where the slice index is returned.</p> </dd> + + + + + <p>Provides access to a single frame of {{DDS}} image data in its native <strong>{{DXGI_FORMAT}}</strong> form, as well as information about the image data.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapFrameDecode}}</strong> using the {{DDS}} codec and QueryInterface for {{IID_IWICDdsFrameDecode}}.</p> + + + + <p>Gets the width and height, in blocks, of the {{DDS}} image.</p> + <p>For block compressed textures, the returned width and height values do not completely define the texture size because the image is padded to fit the closest whole block size. For example, three {{BC1}} textures with pixel dimensions of 1x1, 2x2 and 4x4 will all report <em>pWidthInBlocks</em> = 1 and <em>pHeightInBlocks</em> = 1. </p><p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method returns the texture size in pixels; for these formats the block size returned by <strong>{{IWICDdsFrameDecoder::GetFormatInfo}}</strong> is 1x1. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the {{DDS}} image in blocks.</p> </dd> + + + <dd> <p>The height of the {{DDS}} image in blocks.</p> </dd> + + + + + <p>Gets information about the format in which the {{DDS}} image is stored.</p> + <p>This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Information about the {{DDS}} format.</p> </dd> + + + + + <p>Requests pixel data as it is natively stored within the {{DDS}} file.</p> + <p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method behaves similarly to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. However, it does not perform any pixel format conversion, and instead produces the raw data from the {{DDS}} file.</p><p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method copies the block data directly into the provided buffer. In this case, the <em>prcBoundsInBlocks</em> parameter is defined in blocks, not pixels. To determine if this is the case, call <strong>GetFormatInfo</strong> and read the <strong>DxgiFormat</strong> member of the returned <strong>{{WICDdsFormatInfo}}</strong> structure. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy from the source. A {{NULL}} value specifies the entire texture.</p> <p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, all values of the rectangle are expressed in number of blocks, not pixels.</p> </dd> + + + <dd> <p>The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.</p> </dd> + + + <dd> <p>The size, in bytes, of the destination buffer.</p> </dd> + + + <dd> <p>A reference to the destination buffer.</p> </dd> + + + + + <p>Exposes methods for decoding {{JPEG}} images. Provides access to the Start Of Frame ({{SOF}}) header, Start of Scan ({{SOS}}) header, the Huffman and Quantization tables, and the compressed {{JPEG}} {{JPEG}} data. Also enables indexing for efficient random access. </p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameDecoder}}</strong> interface for the {{JPEG}} decoder.</p> + + + + <p>Retrieves a value indicating whether this decoder supports indexing for efficient random access.</p> + <p>Indexing is only supported for some {{JPEG}} types. Call this method</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>True if indexing is supported; otherwise, false.</p> </dd> + + + + + <p>Enables indexing of the {{JPEG}} for efficient random access.</p> + <p>This method enables efficient random-access to the image pixels at the expense of memory usage. The amount of memory required for indexing depends on the requested index granularity. Unless <strong>SetIndexing</strong> is called, it is much more efficient to access a {{JPEG}} by progressing through its pixels top-down during calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. +</p><p>This method will fail if indexing is unsupported on the file. <strong>{{IWICJpegFrameDecode::DoesSupportIndexing}}</strong> should be called to first determine whether indexing is supported. If this method is called multiple times, the final call changes the index granularity to the requested size. +</p><p>The provided interval size controls horizontal spacing of index entries. This value is internally rounded up according to the {{JPEG}}?s {{MCU}} (minimum coded unit) size, which is typically either 8 or 16 unscaled pixels. The vertical size of the index interval is always equal to one {{MCU}} size.</p><p> Indexes can be generated immediately, or during future calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong> to reduce redundant decompression work. </p> + <p>Returns {{S_OK}} upon successful completion.</p> + + + <dd> <p>A value specifying whether indexes should be generated immediately or deferred until a future call to <strong>{{IWICBitmapSource::CopyPixels}}</strong>.</p> </dd> + + + <dd> <p>The granularity of the indexing, in pixels.</p> </dd> + + + + + <p>Removes the indexing from a {{JPEG}} that has been indexed using <strong>{{IWICJpegFrameDecode::SetIndexing}}</strong>.</p> + <p>Returns {{S_OK}} upons successful completion.</p> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame ({{SOF}}) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves parameters from the Start Of Scan ({{SOS}}) marker for the scan with the specified index.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The index of the scan for which header data is retrieved.</p> </dd> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves a copy of the compressed {{JPEG}} scan directly from the {{WIC}} decoder frame's output stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The byte position in the scan data to begin copying. Use 0 on the first call. If the output buffer size is insufficient to store the entire scan, this offset allows you to resume copying from the end of the previous copy operation.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pbScanData</em> array.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>A reference that receives the size of the scan data actually copied into <em>pbScanData</em>. The size returned may be smaller that the size of <em>cbScanData</em>. This parameter may be {{NULL}}.</p> </dd> + + + + + + + + <p>Exposes methods for writing compressed {{JPEG}} scan data directly to the {{WIC}} encoder's output stream. Also provides access to the Huffman and quantization tables.</p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameEncoder}}</strong> interface for the {{JPEG}} encoder.</p><p>The {{WIC}} {{JPEG}} encoder supports a smaller subset of {{JPEG}} features than the decoder does.</p><ul> <li>The encoder is limited to a single scan. It does not support encoding images that are multi-scan, either for progressive encoding or planar component data.</li> <li>The encoder supports two quantization tables, two {{AC}} Huffman tables, and two {{DC}} Huffman tables. The luma tables are used for the Y channel and, in the case of {{YCCK}}, the black channel. The chroma tables are used for the CbCr channels. </li> <li>The encoder supports encoding gray, {{YCbCr}} ({{RGB}}), and {{YCCK}} ({{CMYK}}).</li> <li>The encoder supports 4 fixed compontent subsampling, 4:2:0, 4:2:2, 4:4:0, and 4:4:4. This subsamples chroma only.</li> <li>The encoder does not support restart markers.</li> </ul> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Writes scan data to a {{JPEG}} frame.</p> + <p><strong>WriteScan</strong> may be called multiple times. Each call appends the scan data specified to any previous scan data. Complete the scan by calling <strong>{{IWICBitmapFrameEncode::Commit}}</strong>. </p><p>Any calls to set encoder parameters or image metadata that will appear before the scan data in the resulting {{JPEG}} file must be completed before the first call to this method. This includes calls to <strong>{{IWICBitmapFrameEncode::SetColorContexts}}</strong> , <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, <strong>{{IWICBitmapFrameEncode::SetResolution}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetThumbnail}}</strong>. <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> is required as it has no default value for encoded image size. +</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The size of the data in the <em>pbScanData</em> parameter.</p> </dd> + + + <dd> <p>The scan data to write.</p> </dd> + + + + + + + + + + + + + + + + + <p>Obtains a <strong>{{IWICBitmapSource}}</strong> in the desired pixel format from a given <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If the <em>pISrc</em> bitmap is already in the desired format, <em>pISrc</em> is copied to the destination bitmap reference and a reference is added. If it is not in the desired format however, <strong>{{WICConvertBitmapSource}}</strong> will instantiate a <em>dstFormat</em> format converter and initialize it with <em>pISrc</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>The <strong>{{WICCreateBitmapFromSection}}</strong> function calls the <strong>{{WICCreateBitmapFromSectionEx}}</strong> function with the <em>desiredAccessLevel</em> parameter set to <strong>{{WICSectionAccessLevelRead}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains the short name associated with a given {{GUID}}.</p> + <p>Windows Imaging Component ({{WIC}}) short name mappings can be found within the following registry key: </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} to retrieve the short name for.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the short name associated with the {{GUID}}.</p> </dd> + + + <dd> <p>The actual size needed to retrieve the entire short name associated with the {{GUID}}.</p> </dd> + + + + + <p>Obtains the {{GUID}} associated with the given short name.</p> + <p>You can extend the short name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the short name.</p> </dd> + + + <dd> <p>A reference that receives the {{GUID}} associated with the given short name.</p> </dd> + + + + + <p>Obtains the name associated with a given schema.</p> + <p>You can extend the schema name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Schemas</strong> ????????????<strong>{{BB5ACC38}}-{{F216}}-4CEC-{{A6C5}}-5F6E739763A9</strong> ???????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The metadata format {{GUID}}.</p> </dd> + + + <dd> <p>The {{URI}} string of the schema for which the name is to be retrieved.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the schema's name.</p> <p>To obtain the required buffer size, call <strong>{{WICMapSchemaToName}}</strong> with <em>cchName</em> set to 0 and <em>wzName</em> set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the entire schema name.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Specifies how the Crop effect handles the crop rectangle falling on fractional pixel coordinates. </p> + + + + <p>Specifies the color channel the Displacement map effect extracts the intensity from and uses it to spatially displace the image in the X or Y direction.</p> + + + + <p> Speficies whether a flip and/or rotation operation should be performed by the Bitmap source effect </p> + + + + <p> Identifiers for properties of the Gaussian blur effect. </p> + + + + <p> The optimization mode for the Gaussian blur effect. </p> + + + + <p> Identifiers for properties of the Directional blur effect. </p> + + + + <p>Specifies the optimization mode for the Directional blur effect.</p> + + + + <p> Identifiers for properties of the Shadow effect. </p> + + + + <p>The level of performance optimization for the Shadow effect.</p> + + + + <p> Identifiers for properties of the Blend effect. </p> + + + + <p>The blend mode used for the Blend effect.</p> + + + + <p>Identifiers for properties of the Saturation effect.</p> + + + + <p>Identifiers for properties of the Hue rotate effect.</p> + + + + <p>Identifiers for the properties of the Color matrix effect.</p> + + + + <p>The alpha mode of the output of the Color matrix effect.</p> + + + + <p> Identifiers for properties of the Bitmap source effect. </p> + + + + <p>The interpolation mode used to scale the image in the Bitmap source effect. If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties. </p> + + + + <p>Specifies the alpha mode of the output of the Bitmap source effect.</p> + + + + <p> Identifiers for properties of the Composite effect. </p> + + + + <p> Identifiers for properties of the 3D transform effect. </p> + + + + <p> The interpolation mode the 3D transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for the properties of the 3D perspective transform effect. </p> + + + + <p> The interpolation mode the 3D perspective transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p>Identifiers for properties of the 2D affine transform effect.</p> + + + + <p>The interpolation mode to be used with the 2D affine transform effect to scale the image. There are 6 scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode uses more processing time than the nearest neighbor mode, but outputs a higher quality image.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the {{DPI}} compensation effect. </p> + + + + <p> The interpolation mode the {{DPI}} compensation effect uses to scale the image. </p> + + + + <p> Identifiers for properties of the Scale effect. </p> + + + + <p>The interpolation mode the Scale effect uses to scale the image. There are 6 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for properties of the Turbulence effect. </p> + + + + <p>The turbulence noise mode for the Turbulence effect. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function. </p> + + + + <p> Identifiers for properties of the Displacement map effect. </p> + + + + <p> Identifiers for the properties of the Color management effect. </p> + + + + <p> Indicates how the Color management effect should interpret alpha data that is contained in the input image. </p> + + + + <p>The quality level of the transform for the Color management effect. </p> + + + + <p>Specifies which {{ICC}} rendering intent the Color management effect should use.</p> + + + + <p> Identifiers for properties of the Histogram effect. </p> + + + + <p> Identifiers for properties of the Point-specular lighting effect. </p> + + + + <p>The interpolation mode the Point-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Spot-specular lighting effect. </p> + + + + <p>The interpolation mode the Spot-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Distant-specular lighting effect. </p> + + + + <p>The interpolation mode the Distant-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Point-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Point-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed</p> + + + + <p> Identifiers for properties of the Spot-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Spot-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for properties of the Distant-diffuse lighting effect.</p> + + + + <p>The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the Flood effect. </p> + + + + <p>Identifiers for properties of the Linear transfer effect.</p> + + + + <p> Identifiers for properties of the Gamma transfer effect. </p> + + + + <p> Identifiers for properties of the Table transfer effect. </p> + + + + <p>Identifiers for properties of the Discrete transfer effect.</p> + + + + <p>Identifiers for properties of the Convolve matrix effect.</p> + + + + <p>The interpolation mode the Convolve matrix effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for the properties of the Brightness effect.</p> + + + + <p> Identifiers for the properties of the Arithmetic composite effect. </p> + + + + <p>Identifiers for properties of the Crop effect.</p> + + + + <p>Identifiers for properties of the Border effect.</p> + + + + <p>The edge mode for the Border effect. </p> + + + + <p> Identifiers for properties of the Morphology effect. </p> + + + + <p> The mode for the Morphology effect. </p> + + + + <p> Identifiers for properties of the Tile effect. </p> + + + + <p> Identifiers for properties of the Atlas effect. </p> + + + + <p> Identifiers for properties of the Opacity metadata effect. </p> + + + + <p>Specifies the types of properties supported by the Direct2D property interface. </p> + + + + <dd> <p>An unknown property.</p> </dd> + + + <dd> <p>An arbitrary-length string.</p> </dd> + + + <dd> <p>A 32-bit integer value constrained to be either 0 or 1.</p> </dd> + + + <dd> <p>An unsigned 32-bit integer.</p> </dd> + + + <dd> <p>A signed 32-bit integer.</p> </dd> + + + <dd> <p>A 32-bit float.</p> </dd> + + + <dd> <p>Two 32-bit float values.</p> </dd> + + + <dd> <p> Three 32-bit float values.</p> </dd> + + + <dd> <p>Four 32-bit float values.</p> </dd> + + + <dd> <p>An arbitrary number of bytes.</p> </dd> + + + <dd> <p>A returned {{COM}} or nano-{{COM}} interface. </p> </dd> + + + <dd> <p>An enumeration. The value should be treated as a <strong>{{UINT32}}</strong> with a defined array of fields to specify the bindings to human-readable strings.</p> </dd> + + + <dd> <p>An enumeration. The value is the count of sub-properties in the array. The set of array elements will be contained in the sub-property.</p> </dd> + + + <dd> <p>A {{CLSID}}.</p> </dd> + + + <dd> <p>A 3x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x4 matrix of float values.</p> </dd> + + + <dd> <p>A 5x4 matrix of float values.</p> </dd> + + + <dd> <p>A nano-{{COM}} color context interface reference.</p> </dd> + + + + + <p>Specifies the indices of the system properties present on the <strong>{{ID2D1Properties}}</strong> interface for an <strong>{{ID2D1Effect}}</strong>.</p> + <p>Under normal circumstances the minimum and maximum number of inputs to the effect are the same. If the effect supports a variable number of inputs, the <strong>{{ID2D1Effect::SetNumberOfInputs}}</strong> method can be used to choose the number that the application will enable.</p> + + + + <p>Specifies the indices of the system sub-properties that may be present in any property.</p> + + + + <dd> <p>The name for the parent property.</p> </dd> + + + <dd> <p>A Boolean indicating whether the parent property is writeable.</p> </dd> + + + <dd> <p>The minimum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The maximum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The default value of the parent property.</p> </dd> + + + <dd> <p>An array of name/index pairs that indicate the possible values that can be set to the parent property.</p> </dd> + + + <dd> <p>An index sub-property used by the elements of the <strong>{{D2D1_SUBPROPERTY_FIELDS}}</strong> array.</p> </dd> + + + + + <p>Specifies how a bitmap can be used.</p> + <p><strong>{{D2D1_BITMAP_OPTIONS_NONE}}</strong> implies that none of the flags are set. This means that the bitmap can be used for drawing from, cannot be set as a target and cannot be read from by the {{CPU}}.</p><p><strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> means that the bitmap can be specified as a target in <strong>{{ID2D1DeviceContext::SetTarget}}</strong>. If you also specify the <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> flag the bitmap can be used a target but, it cannot be drawn from. Attempting to draw with a bitmap that has both flags set will result in the device context being put into an error state with <strong>{{D2DERR_BITMAP_CANNOT_DRAW}}</strong>. </p><p><strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> means that the bitmap can be mapped by using <strong>{{ID2D1Bitmap1::Map}}</strong>. This flag requires <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> and cannot be combined with any other flags. The bitmap must be updated with the <strong>CopyFromBitmap</strong> or <strong>CopyFromRenderTarget</strong> methods. </p><strong>Note</strong>??You should only use <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> is when the purpose of the bitmap is to be a target only or when the bitmap will be mapped .?<p><strong>{{D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE}}</strong> means that it is possible to get a {{DC}} associated with this bitmap. This must be used in conjunction with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>. The <strong>{{DXGI_FORMAT}}</strong> must be either <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>.</p> + + + <dd> <p>The bitmap is created with default properties.</p> </dd> + + + <dd> <p>The bitmap can be used as a device context target.</p> </dd> + + + <dd> <p>The bitmap cannot be used as an input. </p> </dd> + + + <dd> <p>The bitmap can be read from the {{CPU}}.</p> </dd> + + + <dd> <p>The bitmap works with <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong>.</p> <strong>Note</strong>??This flag is not available in Windows Store apps. ? </dd> + + + + + <p>Used to specify the blend mode for all of the Direct2D blending operations.</p> + <p>The figure here shows an example of each of the modes with images that have an opacity of 1.0 or 0.5. </p><p></p><p>There can be slightly different interpretations of these enumeration values depending on where the value is used.</p><ul> <li> <p>With a composite effect: +</p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong> with the inputs inverted.</li> <li> <p> As a parameter to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>: </p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is a no-op since the destination is already in the selected target.</li> </ul> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The destination is rendered over the source.</p> </dd> + + + <dd> <p>Performs a logical clip of the source pixels against the destination pixels.</p> </dd> + + + <dd> <p>The inverse of the <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong> operation.</p> </dd> + + + <dd> <p>This is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong>.</p> </dd> + + + <dd> <p>The is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_DESTINATION_IN}}</strong>.</p> </dd> + + + <dd> <p>Writes the source pixels over the destination where there are destination pixels.</p> </dd> + + + <dd> <p>The logical inverse of <strong>{{D2D1_COMPOSITE_MODE_SOURCE_ATOP}}</strong>.</p> </dd> + + + <dd> <p>The source is inverted with the destination.</p> </dd> + + + <dd> <p>The channel components are summed.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>Equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong>, but pixels outside of the source bounds are unchanged. +</p> </dd> + + + <dd> <p>Destination colors are inverted according to a source mask. +</p> </dd> + + + + + <p>Represents the bit depth of the imaging pipeline in Direct2D.</p> + <strong>Note</strong>?? Feature level 9 may or may not support precision types other than 8BPC.? + + + <dd> <p>The buffer precision is not specified.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer standard {{RGB}} data per channel.</p> </dd> + + + <dd> <p>Use 16-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 16-bit floats per channel.</p> </dd> + + + <dd> <p>Use 32-bit floats per channel.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits.</p> <p>Do not use this value.</p> </dd> + + + + + <p>Specifies how the memory to be mapped from the corresponding <strong>{{ID2D1Bitmap1}}</strong> should be treated.</p> + <p>The <strong>{{D2D1_MAP_OPTIONS_READ}}</strong> option can be used only if the bitmap was created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag.</p><p>These flags will be not be able to be used on bitmaps created by the <strong>{{ID2D1DeviceContext}}</strong>. However, the {{ID2D1SourceTransform}} will receive bitmaps for which these flags are valid.</p><p><strong>{{D2D1_MAP_OPTIONS_DISCARD}}</strong> can only be used with <strong>{{D2D1_MAP_OPTIONS_WRITE}}</strong>. Both of these options are only available through the effect author {{API}}, not through the Direct2D rendering {{API}}. +</p> + + + + <p>This is used to specify the quality of image scaling with <strong>{{ID2D1DeviceContext::DrawImage}}</strong> and with the 2D affine transform effect. </p> + + + + + <p>Specifies how units in Direct2D will be interpreted.</p> + <p>Setting the unit mode to <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong> is similar to setting the <strong>{{ID2D1DeviceContext}}</strong> dots per inch (dpi) to 96. However, Direct2D still checks the dpi to determine the threshold for enabling vertical antialiasing for text, and when the unit mode is restored, the dpi will be remembered.</p> + + + <dd> <p>Units will be interpreted as device-independent pixels (1/96").</p> </dd> + + + <dd> <p>Units will be interpreted as pixels.</p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>This specifies options that apply to the device context for its lifetime.</p> + + + + <dd> <p>The device context is created with default options.</p> </dd> + + + <dd> <p>Distribute rendering work across multiple threads. Refer to Improving the performance of Direct2D apps for additional notes on the use of this flag.</p> </dd> + + + + + <p>Defines how the world transform, dots per inch (dpi), and stroke width affect the shape of the pen used to stroke a primitive.</p> + <p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the stroke isn't affected by the world transform.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the application has the same behavior in Windows 7 and later.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}}</strong> the stroke is always 1 pixel wide.</p><p>Apart from the stroke, any value derived from the stroke width is not affected when the transformType is either fixed or hairline. This includes miters, line caps and so on.</p><p> It is important to distinguish between the geometry being stroked and the shape of the stroke pen. When {{D2D1_STROKE_TRANSFORM_TYPE_FIXED}} or {{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}} is specified, the geometry still respects the transform and dpi, but the pen that traces the geometry will not.</p><p>Here is an illustration of a stroke with dashing and a skew and stretch transform.</p><p>And here is an illustration of a fixed width stroke which does not get transformed.</p> + + + <dd> <p>The stroke respects the currently set world transform, the dpi, and the stroke width.</p> </dd> + + + <dd> <p>The stroke does not respect the world transform but it does respect the dpi and stroke width.</p> </dd> + + + <dd> <p>The stroke is forced to 1 pixel wide (in device space) and does not respect the world transform, the dpi, or the stroke width.</p> </dd> + + + + + <p>Used to specify the geometric blend mode for all Direct2D primitives. </p> + + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>The resulting pixel values use the minimum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + <dd> <p>The resulting pixel values are the sum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + + + <p>Specifies the threading mode used while simultaneously creating the device, factory, and device context. +</p> + + + <dd> <p>Resources may only be invoked serially. Device context state is not protected from multi-threaded access. </p> </dd> + + + <dd> <p>Resources may be invoked from multiple threads. Resources use interlocked reference counting and their state is protected. +</p> </dd> + + + + + <p>Defines how to interpolate between colors.</p> + + + <dd> <p>Colors are interpolated with straight alpha.</p> </dd> + + + <dd> <p>Colors are interpolated with premultiplied alpha.</p> </dd> + + + + + <p>Specifies how the layer contents should be prepared. +</p> + + + <dd> <p>Default layer behavior. A premultiplied layer target is pushed and its contents are cleared to transparent black. +</p> </dd> + + + <dd> <p> The layer is not cleared to transparent black.</p> </dd> + + + <dd> <p> The layer is always created as ignore alpha. All content rendered into the layer will be treated as opaque.</p> </dd> + + + + + <p>Defines when font resources should be subset during printing.</p> + + + <dd> <p>Uses a heuristic strategy to decide when to subset fonts. </p> <strong>Note</strong>??If the print driver has requested archive-optimized content, then Direct2D will subset fonts once, for the entire document. ? </dd> + + + <dd> <p>Subsets and embeds font resources in each page, then discards that font subset after the page is printed out. </p> </dd> + + + <dd> <p>Sends out the original font resources without subsetting along with the page that first uses the font, and re-uses the font resources for later pages without resending them. </p> </dd> + + + + + <p>This structure allows a <strong>{{ID2D1Bitmap1}}</strong> to be created with bitmap options and color context information available. +</p> + <p>If both <strong>dpiX</strong> and <strong>dpiY</strong> are 0, the dpi of the bitmap will be set to the desktop dpi if the device context is a windowed context, or 96 dpi for any other device context.</p> + + + + <p> Describes mapped memory from the <strong>{{ID2D1Bitmap1::Map}}</strong> {{API}}.</p> + <p>The mapped rectangle is used to map a rectangle into the caller's address space.</p> + + + + <p>Describes limitations to be applied to an imaging effect renderer.</p> + <p>The renderer can allocate tiles larger than the minimum tile allocation. The allocated tiles will be powers of two of the minimum size on each axis, except that the size on each axis will not exceed the guaranteed maximum texture size for the device feature level. </p><p>The <strong>minimumPixelRenderExtent</strong> is the size of the square tile below which the renderer will expand the tile allocation rather than attempting to subdivide the rendering tile any further. When this threshold is reached, the allocation tile size is expanded. This might occur repeatedly until rendering can either proceed or it is determined that the graph cannot be rendered.</p><p>The buffer precision is used for intermediate buffers if it is otherwise unspecified by the effects or the internal effect topology. The application can also use the <strong>Output.BufferPrecision</strong> method to specify the output precision for a particular effect. This takes precedence over the context precision. In addition, the effect might set a different precision internally if required. If the buffer type on the context is <strong>{{D2D1_BUFFER_PRECISION_UNKNOWN}}</strong> and otherwise not specified by the effect or transform, the precision of the output will be the maximum precision of the inputs to the transform. The buffer precision does not affect the number of channels used. </p> + + + <dd> <p>The buffer precision used by default if the buffer precision is not otherwise specified by the effect or the transform.</p> </dd> + + + <dd> <p>The tile allocation size to be used by the imaging effect renderer.</p> </dd> + + + + + <p>Describes features of an effect.</p> + <strong>Note</strong>??The caller should not rely heavily on the input rectangles returned by this structure. They can change due to subtle changes in effect implementations and due to optimization changes in the effect rendering system.? + + + <dd> <p>The effect whose input connection is being specified.</p> </dd> + + + <dd> <p>The input index of the effect that is being considered.</p> </dd> + + + <dd> <p>The amount of data that would be available on the input. This can be used to query this information when the data is not yet available. </p> </dd> + + + + + <p>Describes a point on a path geometry.</p> + + + + <dd> <p>The end point after walking the path.</p> </dd> + + + <dd> <p>A unit vector indicating the tangent point.</p> </dd> + + + <dd> <p>The index of the segment on which point resides. This index is global to the entire path, not just to a particular figure.</p> </dd> + + + <dd> <p>The index of the figure on which point resides.</p> </dd> + + + <dd> <p>The length of the section of the path stretching from the start of the path to the start of <strong>endSegment</strong>.</p> </dd> + + + + + <p>Describes image brush features.</p> + + + + <dd> <p>The source rectangle in the image space from which the image will be tiled or interpolated.</p> </dd> + + + <dd> <p>The extend mode in the image x-axis.</p> </dd> + + + <dd> <p>The extend mode in the image y-axis.</p> </dd> + + + <dd> <p>The interpolation mode to use when scaling the image brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p>Describes the stroke that outlines a shape.</p> + + + + <dd> <p>The cap to use at the start of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the end of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the start and end of each dash.</p> </dd> + + + <dd> <p>The line join to use.</p> </dd> + + + <dd> <p>The limit beyond which miters are either clamped or converted to bevels.</p> </dd> + + + <dd> <p>The type of dash to use.</p> </dd> + + + <dd> <p>The location of the first dash, relative to the start of the figure. </p> </dd> + + + <dd> <p>The rule that determines what render target properties affect the nib of the stroke.</p> </dd> + + + + + <p>Contains the content bounds, mask information, opacity settings, and other options for a layer resource.</p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p>Additional options for the layer creation.</p> </dd> + + + + + <p>Describes the drawing state of a device context.</p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>The blend mode for the device context to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>{{D2D1_UNIT_MODE}}</p> </dd> + + + + + <p>The creation properties for a <strong>{{ID2D1PrintControl}}</strong> object.</p> + + + + <p>Specifies the options with which the Direct2D device, factory, and device context are created. +</p> + <p>The root objects referred to here are the Direct2D device, Direct2D factory and the Direct2D device context. +</p> + + + + <p>Represents a color context that can be used with an <strong>{{ID2D1Bitmap1}}</strong> object.</p> + + + + <p>Gets the color space of the color context.</p> + <p>This method returns the color space of the contained {{ICC}} profile.</p> + + + + <p>Gets the size of the color profile associated with the bitmap. </p> + <p>This can be used to allocate a buffer to receive the color profile bytes associated with the context.</p> + <p>This method returns the size of the profile in bytes.</p> + + + + <p>Gets the color profile bytes for an <strong>{{ID2D1ColorContext}}</strong>. </p> + <p>If <em>profileSize</em> is insufficient to store the entire profile, <em>profile</em> is zero-initialized before this method fails.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_BUFFER}}</td><td>The supplied buffer was too small to accomodate the data.</td></tr> </table><p>?</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1PrintControl}}</strong> object that converts Direct2D primitives stored in <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + <strong>Note</strong>??This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation?factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_FAIL}}</td><td>Generic failure code.</td></tr> <tr><td>{{D2DERR_PRINT_FORMAT_NOT_SUPPORTED}}</td><td>The print format is not supported by the document target.</td></tr> </table><p>?</p> + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <strong>Note</strong>??Direct2D may exceed the maximum texture memory you set with this method for a single frame if necessary to render the frame.? + <p>This method does not return a value.</p> + + + <dd> <p>The new maximum texture memory in bytes.</p> </dd> + + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <p>The maximum amount of texture memory in bytes.</p> + + + + <p>Clears all of the rendering resources used by Direct2D. </p> + <p> If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Discards only resources that haven't been used for greater than the specified time in milliseconds. The default is 0 milliseconds.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Sets the given input image by index. </p> + <p>If the input index is out of range, the input image is ignored. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The index of the image to set.</p> </dd> + + + <dd> <p>The input image to set.</p> </dd> + + + <dd> <p>Whether to invalidate the graph at the location of the effect input</p> </dd> + + + + + <p>Allows the application to change the number of inputs to an effect.</p> + <p>Most effects do not support a variable number of inputs. Use <strong>{{ID2D1Properties::GetValue}}</strong> with the <strong>{{D2D1_PROPERTY_MIN_INPUTS}}</strong> and <strong>{{D2D1_PROPERTY_MAX_INPUTS}}</strong> values to determine the number of inputs supported by an effect.</p><p>If the input count is less than the minimum or more than the maximum supported inputs, the call will fail.</p><p>If the input count is unchanged, the call will succeed with <strong>{{S_OK}}</strong>. </p><p>Any inputs currently selected on the effect will be unaltered by this call unless the number of inputs is made smaller. If the number of inputs is made smaller, inputs beyond the selected range will be released.</p><p>If the method fails, the existing input and input count will remain unchanged.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the effect.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Gets the number of inputs to the effect. </p> + + <p>This method returns the number of inputs to the effect. </p> + + + + <p>Gets the output image from the effect. </p> + <p>The output image can be set as an input to another effect, or can be directly passed into the <strong>{{ID2D1DeviceContext}}</strong> in order to render the effect. </p><p>It is also possible to use <strong>QueryInterface</strong> to retrieve the same output image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the output image for the effect.</p> </dd> + + + + + <p>A developer implemented interface that allows a metafile to be replayed.</p> + + + + <p> This method is called once for each record stored in a metafile.</p> + <p>Return true if the record is successfully.</p> + + + <dd> <p>The type of the record.</p> </dd> + + + <dd> <p>The data for the record.</p> </dd> + + + <dd> <p>The byte size of the record data.</p> </dd> + + + + + <p>A Direct2D resource that wraps a {{WMF}}, {{EMF}}, or {{EMF}}+ metafile.</p> + + + + <p>This method streams the contents of the command to the given metafile sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The sink into which Direct2D will call back.</p> </dd> + + + + + <p> Gets the bounds of the metafile, in device-independent pixels ({{DIPs}}), as reported in the metafile?s header.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p> </p><p>The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as {{XPS}} when some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.</p> + <p>The <strong>{{ID2D1CommandSink}}</strong> can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The <strong>{{ID2D1CommandSink}}</strong> interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the <strong>{{ID2D1CommandList}}</strong> was created and will be passed in to the <strong>{{ID2D1CommandSink}}</strong> implementation. </p><p>Not all methods implemented by <strong>{{ID2D1DeviceContext}}</strong> are present.</p> + + + + <p>Notifies the implementation of the command sink that drawing is about to commence.</p> + <p> This method always returns <strong>{{S_OK}}</strong>. </p> + + + + <p>Indicates when <strong>{{ID2D1CommandSink}}</strong> processing has completed.</p> + <p>The <strong>{{HRESULT}}</strong> active at the end of the command list will be returned.</p><p> It allows the calling function or method to indicate a failure back to the stream implementation.</p> + <p>If the method/function succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the antialiasing mode that will be used to render any subsequent geometry.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode selected for the command list.</p> </dd> + + + + + <p>Sets the tags that correspond to the tags in the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The first tag to associate with the primitive.</p> </dd> + + + <dd> <p>The second tag to associate with the primitive.</p> </dd> + + + + + <p>Indicates the new default antialiasing mode for text.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode for the text.</p> </dd> + + + + + <p>Indicates more detailed text rendering parameters.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters to use for text rendering.</p> </dd> + + + + + <p>Sets a new transform.</p> + <p>The transform will be applied to the corresponding device context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The transform to be set.</p> </dd> + + + + + <p>Sets a new primitive blend mode.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>The unit mode changes the meaning of subsequent units from device-independent pixels ({{DIPs}}) to pixels or the other way. The command sink does not record a {{DPI}}, this is implied by the playback context or other playback interface such as <strong>{{ID2D1PrintControl}}</strong>.</p> + <p>The unit mode changes the interpretation of units from {{DIPs}} to pixels or vice versa.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>The clear color is restricted by the currently selected clip and layer bounds.</p><p>If no color is specified, the color should be interpreted by context. Examples include but are not limited to:</p><ul> <li>Transparent black for a premultiplied bitmap target.</li> <li>Opaque black for an ignore bitmap target.</li> <li>Containing no content (or white) for a printer page.</li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The color to which the command sink should be cleared.</p> </dd> + + + + + <p>Indicates the glyphs to be drawn.</p> + <p> <strong>DrawText</strong> and <strong>DrawTextLayout</strong> are broken down into glyph runs and rectangles by the time the command sink is processed. So, these methods aren't available on the command sink. Since the application may require additional callback processing when calling <strong>DrawTextLayout</strong>, this semantic can't be easily preserved in the command list.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The upper left corner of the baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Additional non-rendering information about the glyphs.</p> </dd> + + + <dd> <p>The brush used to fill the glyphs.</p> </dd> + + + <dd> <p>The measuring mode to apply to the glyphs.</p> </dd> + + + + + <p>Draws a line drawn between two points.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The start point of the line.</p> </dd> + + + <dd> <p>The end point of the line.</p> </dd> + + + <dd> <p>The brush used to fill the line.</p> </dd> + + + <dd> <p>The width of the stroke to fill the line.</p> </dd> + + + <dd> <p>The style of the stroke. If not specified, the stroke is solid.</p> </dd> + + + + + <p>Indicates the geometry to be drawn to the command sink.</p> + <p> <strong>Ellipses</strong> and <strong>rounded rectangles</strong> are converted to the corresponding ellipse and rounded rectangle geometries before calling into the <strong>DrawGeometry</strong> method. +</p> + <p>An {{HRESULT}}. </p> + + + <dd> <p>The geometry to be stroked.</p> </dd> + + + <dd> <p>The brush that will be used to fill the stroked geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a rectangle.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to be drawn to the command sink.</p> </dd> + + + <dd> <p>The brush used to stroke the geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The <em>destinationRectangle</em> parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If you specify {{NULL}}, then the destination rectangle is (left=0, top=0, right = width(<em>sourceRectangle</em>), bottom = height(<em>sourceRectangle</em>). </p><p>The <em>sourceRectangle</em> defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> clips this rectangle to the size of the source bitmap, so it's impossible to sample outside of the bitmap. If you specify {{NULL}}, then the source rectangle is taken to be the size of the source bitmap. </p><p>The <em>perspectiveTransform</em> is specified in addition to the transform on device context. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Draws the provided image to the command sink. </p> + <p>Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The image to be drawn to the command sink.</p> </dd> + + + <dd> <p>This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin.</p> </dd> + + + <dd> <p>The corresponding rectangle in the image space will be mapped to the provided origins when processing the image.</p> </dd> + + + <dd> <p>The interpolation mode to use to scale the image if necessary. +</p> </dd> + + + <dd> <p>If specified, the composite mode that will be applied to the limits of the currently selected clip.</p> </dd> + + + + + <p>Draw a metafile to the device context.</p> + <p>The <em>targetOffset</em> defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image is rendered to the corresponding destination. If you don't specify the offset, the destination origin will be (0, 0). The top, left corner of the image will be mapped to the target offset. This will not necessarily be the origin. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Indicates a mesh to be filled by the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The mesh object to be filled.</p> </dd> + + + <dd> <p>The brush with which to fill the mesh.</p> </dd> + + + + + <p>Fills an opacity mask on the command sink.</p> + <p>The opacity mask bitmap must be considered to be clamped on each axis.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The bitmap whose alpha channel will be sampled to define the opacity mask.</p> </dd> + + + <dd> <p>The brush with which to fill the mask.</p> </dd> + + + <dd> <p>The destination rectangle in which to fill the mask. If not specified, this is the origin.</p> </dd> + + + <dd> <p>The source rectangle within the opacity mask. If not specified, this is the entire mask.</p> </dd> + + + + + <p>Indicates to the command sink a geometry to be filled.</p> + <p>If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.</p><p>Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to <strong>FillGeometry</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The geometry that should be filled.</p> </dd> + + + <dd> <p>The primary brush used to fill the geometry.</p> </dd> + + + <dd> <p>A brush whose alpha channel is used to modify the opacity of the primary fill brush. </p> </dd> + + + + + <p>Indicates to the command sink a rectangle to be filled.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to fill.</p> </dd> + + + <dd> <p>The brush with which to fill the rectangle.</p> </dd> + + + + + <p>Pushes a clipping rectangle onto the clip and layer stack.</p> + <p>If the current world transform is not preserving the axis, <em>clipRectangle</em> is transformed and the bounds of the transformed rectangle are used instead.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle that defines the clip.</p> </dd> + + + <dd> <p>The antialias mode for the clip.</p> </dd> + + + + + <p>Pushes a layer onto the clip and layer stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters that define the layer.</p> </dd> + + + <dd> <p>The layer resource that receives subsequent drawing operations.</p> </dd> + + + + + <p>Removes an axis-aligned clip from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Removes a layer from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Represents a sequence of commands that can be recorded and played back.</p> + <p>The command list does not include static copies of resources with the recorded set of commands. All bitmaps, effects, and geometries are stored as references to the actual resource and all the brushes are stored by value. All the resource creation and destruction happens outside of the command list. The following table lists resources and how they are treated inside of a command list.</p><table> <tr><th>Resource</th><th>How it is treated by the command list</th></tr> <tr><td>Solid-color brush</td><td>Passed by value.</td></tr> <tr><td>Bitmap brush</td><td>The brush is passed by value but the bitmap that is used to create the brush is in fact referenced.</td></tr> <tr><td>Gradient brushes ? both linear and radial gradient</td><td>The brush is passed by value but the gradient stop collection itself is referenced. The gradient stop collection object is immutable. </td></tr> <tr><td>Bitmaps</td><td>Passed by reference.</td></tr> <tr><td>Drawing state block</td><td>The actual state on the device context is converted into set functions like set transform and is passed by value.</td></tr> <tr><td>Geometry</td><td>Immutable object passed by value.</td></tr> <tr><td>Stroke style</td><td>Immutable object passed by value.</td></tr> <tr><td>Mesh</td><td>Immutable object passed by value.</td></tr> </table><p>?</p> + + + + <p>Streams the contents of the command list to the specified command sink. </p> + <p>The command sink can be implemented by any caller of the {{API}}.</p><p>If the caller makes any design-time failure calls while a command list is selected as a target, the command list is placed in an error state. The stream call fails without making any calls to the passed in sink.</p><p>Sample use:</p><pre>Class MyCommandSink : public {{ID2D1CommandSink}} +{ +public: // All of the {{ID2D1CommandSink}} methods implemented here. +}; {{HRESULT}} +StreamToMyCommandSink( __in {{ID2D1CommandList}} *pCommandList ) +{ {{HRESULT}} hr = {{S_OK}}; MyCommandSink *pCommandSink = new MyCommandSink(); hr = pCommandSink ? {{S_OK}} : {{E_OUTOFMEMORY}}; if ({{SUCCEEDED}}(hr)) { // Receive the contents of the command sink streamed to the sink. hr = pCommandList-&gt;Stream(pCommandSink); } SafeRelease(&amp;pCommandSink); return hr; }</pre> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p><p>The return value indicates any failures the command sink implementation returns through its <strong>EndDraw</strong> method.</p> + + + <dd> <p>The sink into which the command list will be streamed.</p> </dd> + + + + + <p>Instructs the command list to stop accepting commands so that you can use it as an input to an effect or in a call to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>. You should call the method after it has been attached to an <strong>{{ID2D1DeviceContext}}</strong> and written to but before the command list is used.</p> + <p>This method returns {{D2DERR_WRONG_STATE}} if it has already been called on the command list. If an error occurred on the device context during population, the method returns that error. Otherwise, the method returns {{S_OK}}. </p><p>If the <strong>Close</strong> method returns an error, any future use of the command list results in the same error.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}} </td><td>Close has already been called on the command list.</td></tr> </table><p>?</p><p> </p><strong>Note</strong>??If the device context associated with the command list has an error, the command list returns the same error.? + + + + <p>Converts Direct2D primitives stored in an <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + + + + <p>Converts Direct2D primitives in the passed-in command list into a fixed page representation for use by the print subsystem. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + <dd> <p>The command list that contains the rendering operations.</p> </dd> + + + <dd> <p>The size of the page to add.</p> </dd> + + + <dd> <p>The print ticket stream.</p> </dd> + + + <dd> <p>Contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter.</p> </dd> + + + <dd> <p>Contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter. +</p> </dd> + + + + + <p>Passes all remaining resources to the print sub-system, then clean up and close the current print job. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + + <p>Represents a brush based on an <strong>{{ID2D1Image}}</strong>.</p> + + + + <p>Sets the image associated with the provided image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The image to be associated with the image brush.</p> </dd> + + + + + <p>Sets how the content inside the source rectangle in the image brush will be extended on the x-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the x-axis of the image.</p> </dd> + + + + + <p>Sets the extend mode on the y-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the y-axis of the image.</p> </dd> + + + + + <p>Sets the interpolation mode for the image brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>How the contents of the image will be interpolated to handle the brush transform.</p> </dd> + + + + + <p>Sets the source rectangle in the image brush.</p> + <p>The top left corner of the <em>sourceRectangle</em> parameter maps to the brush space origin. That is, if the brush and world transforms are both identity, the portion of the image in the top left corner of the source rectangle will be rendered at (0,0) in the render target.</p><p>The source rectangle will be expanded differently depending on whether the input image is based on pixels (a bitmap or effect) or by a command list. </p><ul> <li>If the input image is a bitmap or an effect, the rectangle will be expanded to encapsulate a full input pixel before being additionally down-scaled to ensure that the projected rectangle will be correct in the final scene-space.</li> <li>If the input image is a command list, the command list will be slightly expanded to encapsulate a full input pixel. +</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>The source rectangle that defines the portion of the image to tile.</p> </dd> + + + + + <p>Gets the image associated with the image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, contains the address of a reference to the image associated with this brush. </p> </dd> + + + + + <p>Gets the extend mode of the image brush on the x-axis.</p> + + <p>This method returns the x-extend mode.</p> + + + + <p>Gets the extend mode of the image brush on the y-axis of the image.</p> + + <p>This method returns the y-extend mode.</p> + + + + <p>Gets the interpolation mode of the image brush.</p> + <p>This method returns the interpolation mode.</p> + + + + <p>Gets the rectangle that will be used as the bounds of the image when drawn as an image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of the output source rectangle.</p> </dd> + + + + + <p>Paints an area with a bitmap. </p> + + + + <p>Sets the interpolation mode for the brush.</p> + <strong>Note</strong>??If <em>interpolationMode</em> is not a valid member of {{D2D1_INTERPOLATION_MODE}}, then this method silently ignores the call.? + + + <dd> <p>The mode to use.</p> </dd> + + + + + <p>Returns the current interpolation mode of the brush.</p> + <p>The current interpolation mode.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + <p>This interface adds functionality to <strong>{{ID2D1StrokeStyle}}</strong>.</p> + + + + <p>Gets the stroke transform type.</p> + <p>This method returns the stroke transform type.</p> + + + + <p>The <strong>{{ID2D1PathGeometry1}}</strong> interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>. In particular, it provides the path geometry-specific <strong>ComputePointAndSegmentAtLength</strong> method.</p> + <p>This interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>.</p> + + + + <p> Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One of the inputs was in an invalid range.</td></tr> </table><p>?</p> + + + <dd> <p>The distance to walk along the path.</p> </dd> + + + <dd> <p>The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.</p> </dd> + + + <dd> <p>The transform to apply to the path prior to walking.</p> </dd> + + + <dd> <p>The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a description of the point that can be found at the given location.</p> </dd> + + + + + <p>Represents a set of run-time bindable and discoverable properties that allow a data-driven application to modify the state of a Direct2D effect.</p> + <p>This interface supports access through either indices or property names. In addition to top-level properties, each property in an <strong>{{ID2D1Properties}}</strong> object may contain an <strong>{{ID2D1Properties}}</strong> object, which stores metadata describing the parent property. </p> + + + + <p>Gets the number of top-level properties. </p> + <p>This method returns the number of custom properties on the <strong>{{ID2D1Properties}}</strong> interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.</p> + <p>This method returns the number of custom (non-system) properties that can be accessed by the object.</p> + + + + Gets the property name that corresponds to the given index. + + + + <p>Gets the number of characters for the given property name. This is a template overload. See Remarks.</p> + <p>The value returned by this method can be used to ensure that the buffer size for <strong>GetPropertyName</strong> is appropriate. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetPropertyNameLength( U index ) {{CONST}}; + <p>This method returns the size in characters of the name corresponding to the given property index, or zero if the property index does not exist. </p> + + + <dd> <p>The index of the property name to retrieve.</p> </dd> + + + + + <p>Gets the <strong>{{D2D1_PROPERTY_TYPE}}</strong> of the selected property. </p> + <p>If the property does not exist, the method returns <strong>{{D2D1_PROPERTY_TYPE_UNKNOWN}}</strong>.</p> + <p>This method returns a <strong>{{D2D1_PROPERTY_TYPE}}</strong>-typed value for the type of the selected property.</p> + + + + <p>Gets the index corresponding to the given property name. </p> + <p> If the property does not exist, this method returns <strong>{{D2D1_INVALID_PROPERTY_INDEX}}</strong>. This reserved value will never map to a valid index and will cause <strong>{{NULL}}</strong> or sentinel values to be returned from other parts of the property interface.</p> + <p>The index of the corresponding property name.</p> + + + <dd> <p>The name of the property to retrieve.</p> </dd> + + + + + Sets the named property to the given value. + + + + <p>Sets the corresponding property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; {{HRESULT}} SetValue( U index, _In_ const T &amp;value ); + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INVALID_PROPERTY}}</td><td>The specified property does not exist.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> <tr><td>{{D3DERR_OUT_OF_VIDEO_MEMORY}}</td><td>Failed to allocate required video memory.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_FAIL}}</td><td>Unspecified failure.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the property to set.</p> </dd> + + + <dd> <p>The data to set.</p> </dd> + + + + + <p>Gets the property value by name. This is a template overload. See Remarks.</p> + <p>If <em>propertyName</em> does not exist, no information is retrieved.</p><p>Any error not in the standard set returned by a property implementation will be mapped into the standard error range.</p><p> </p>template&lt;typename T&gt; T GetValueByName( _In_ {{PCWSTR}} propertyName ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The property name to get.</p> </dd> + + + + + <p>Gets the value of the property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; T GetValue( U index ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The index of the property from which the value is to be obtained.</p> </dd> + + + + + <p>Gets the size of the property value in bytes, using the property index. This is a template overload. See Remarks.</p> + <p>This method returns zero if <em>index</em> does not exist. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetValueSize( U index ) {{CONST}}; + <p>This method returns size of the value in bytes, using the property index </p> + + + <dd> <p>The index of the property.</p> </dd> + + + + + <p>Gets the sub-properties of the provided property by index. This is a template overload. See Remarks. </p> + <p> If there are no sub-properties, <em>subProperties</em> will be <strong>{{NULL}}</strong>, and <strong>{{D2DERR_NO_SUBPROPERTIES}}</strong> will be returned. </p><p> </p>template&lt;typename U&gt; {{HRESULT}} GetSubProperties( U index, _Outptr_opt_ {{ID2D1Properties}} **subProperties ) {{CONST}}; + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_NO_SUBPROPERTIES}}</td><td>The specified property does not exist.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the sub-properties to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the sub-properties.</p> </dd> + + + + + <p> Represents a bitmap that can be used as a surface for an <strong>{{ID2D1DeviceContext}}</strong> or mapped into system memory, and can contain additional color context information.</p> + + + + + <p>Gets the color context information associated with the bitmap. </p> + <p>If the bitmap was created without specifying a color context, the returned context is <strong>{{NULL}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the color context interface associated with the bitmap.</p> </dd> + + + + + <p>Gets the options used in creating the bitmap.</p> + + <p>This method returns the options used.</p> + + + + <p>Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created. </p> + <p>The bitmap used must have been created from a {{DXGI}} surface render target, a derived render target, or a device context created from an <strong>{{ID2D1Device}}</strong>.</p><p>The returned surface can be used with Microsoft Direct3D or any other {{API}} that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through <strong>{{ID2D1Factory::CreateDxgiSurfaceRenderTarget}}</strong> or on a device context created on the same device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_BITMAP_BOUND_AS_TARGET}}</td><td>Cannot draw with a bitmap that is currently bound as the target bitmap.</td></tr> </table><p>?</p> + + + <dd> <p>The underlying {{DXGI}} surface for the bitmap.</p> </dd> + + + + + <p>Maps the given bitmap into memory.</p> + <strong>Note</strong>??You can't use bitmaps for some purposes while mapped. Particularly, the <strong>{{ID2D1Bitmap::CopyFromBitmap}}</strong> method doesn't work if either the source or destination bitmap is mapped.?<p>The bitmap must have been created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>The options used in mapping the bitmap into memory.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the rectangle that is mapped into memory.</p> </dd> + + + + + <p>Unmaps the bitmap from memory. </p> + <p>Any memory returned from the <strong>Map</strong> call is now invalid and may be reclaimed by the operating system or used for other purposes. </p><p>The bitmap must have been previously mapped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid.</td></tr> <tr><td>{{E_POINTER}}</td><td>Pointer is not valid.</td></tr> </table><p>?</p> + + + + <p>Represents a collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes. It provides get methods for all the new parameters added to the gradient stop collection.</p> + + + + + <p>Copies the gradient stops from the collection into memory.</p> + <p>If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong>, this method returns the same values specified in the creation method. If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, the stops returned here will first be transformed into the gamma space specified by the <em>colorInterpolationGamma</em> parameter. See the <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong> method for more info about color space and gamma space.</p><p>If <em>gradientStopsCount</em> is less than the number of gradient stops in the collection, the remaining gradient stops are omitted. If <em>gradientStopsCount</em> is larger than the number of gradient stops in the collection, the extra gradient stops are set to <strong>{{NULL}}</strong>. To obtain the number of gradient stops in the collection, use the <strong>GetGradientStopCount</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a one-dimensional array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> </dd> + + + <dd> <p>The number of gradient stops to copy. </p> </dd> + + + + + <p>Gets the color space of the input colors as well as the space in which gradient stops are interpolated.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns the color space related to the color interpolation gamma. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the color space after interpolation has occurred.</p> + <p>If you create using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns <strong>{{D2D1_COLOR_SPACE_SRGB}}</strong>. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the precision of the gradient buffer.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns {{D2D1_BUFFER_PRECISION_8BPC_UNORM}}. </p> + <p>The buffer precision of the gradient buffer.</p> + + + + <p>Retrieves the color interpolation mode that the gradient stop collection uses.</p> + <p>The color interpolation mode.</p> + + + + <p>Implementation of a drawing state block that adds the functionality of primitive blend in addition to already existing antialias mode, transform, tags and text rendering mode.</p><strong>Note</strong>??You can get an <strong>{{ID2D1DrawingStateBlock1}}</strong> using the <strong>{{ID2D1Factory::CreateDrawingStateBlock}}</strong> method or you can use the QueryInterface method on an <strong>{{ID2D1DrawingStateBlock}}</strong> object.? + + + + <p>Gets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Sets the <strong>{{D2D1_DRAWING_STATE_DESCRIPTION1}}</strong> associated with this drawing state block.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Creates a bitmap that can be used as a target surface, for reading back to the {{CPU}}, or as a source for the <strong>DrawBitmap</strong> and <strong>{{ID2D1BitmapBrush}}</strong> {{APIs}}. In addition, color context information can be passed to the bitmap.</p> + <p>The new bitmap can be used as a target for <strong>SetTarget</strong> if it is created with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a Direct2D bitmap by copying a {{WIC}} bitmap.</p> + <p>Starting with Windows?8.1, the <em>bitmapProperties</em> parameter is optional. When it is not specified, the created bitmap inherits the pixel format and alpha mode from <em>wicBitmapSource</em>. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.</p><p>When the <em>bitmapProperties</em> parameter is specified, the value in <em>bitmapProperties-&gt;pixelFormat</em> must either be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> or must match the {{WIC}} pixel format in <em>wicBitmapSource</em>.</p><p>When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong>, the newly created bitmap inherits the alpha mode from <em>wicBitmapSource</em>. When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>, <strong>{{D2D1_ALPHA_MODE_STRAIGHT}}</strong>, or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, this forces the newly created bitmap to use the specified alpha mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{WIC}} bitmap source to copy from.</p> </dd> + + + <dd> <p>A bitmap properties structure that specifies bitmap creation options.</p> </dd> + + + <dd> <p>The address of the newly created bitmap object.</p> </dd> + + + + + <p>Creates a color context.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap.</p><p>When <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>, <em>profile</em> and <em>profileSize</em> must be specified. Otherwise, these parameters should be set to <strong>{{NULL}}</strong> and zero respectively. When the space is {{D2D1_COLOR_SPACE_CUSTOM}}, the model field of the profile header is inspected to determine if this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space remains custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>Filename</em>.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p> Creates a bitmap from a {{DXGI}} surface that can be set as a target surface or have additional color context information specified.</p> + <p>If the bitmap properties are not specified, the following information is assumed: </p><ul> <li>The bitmap {{DPI}} is 96.</li> <li>The pixel format matches that of the surface.</li> <li>The returned bitmap will inherit the bind flags of the {{DXGI}} surface.<ul> <li>However, only the subset of flags meaningful to Direct2D will be inherited. For example, {{D3D10_USAGE_DYNAMIC}} is not compatible with any public Direct2D flags.</li> </ul> </li> <li>The color context is unknown.</li> <li>The alpha mode of the bitmap will be premultiplied (common case) or straight ({{A8}}). +</li> </ul><p>If the bitmap properties are specified, the bitmap properties will be used as follows:</p><ul> <li>The bitmap {{DPI}} will be specified by the bitmap properties.</li> <li>If both dpiX and dpiY are 0, the bitmap {{DPI}} will be 96.</li> <li>The pixel format must be compatible with the shader resource view or render target view of the surface.</li> <li>The bitmap options must be compatible with the bind flags of the {{DXGI}} surface. However, they may be a subset. This will influence what resource views are created by the bitmap.</li> <li>The color context information will be used from the bitmap properties, if specified.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface from which the bitmap can be created. </p> <strong>Note</strong>??The {{DXGI}} surface must have been created from the same Direct3D device that the Direct2D device context is associated with. + ? </dd> + + + <dd> <p>The bitmap properties specified in addition to the surface. </p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new bitmap object.</p> </dd> + + + + + <p>Creates an effect for the specified class {{ID}}. </p> + <p> If the created effect is a custom effect that is implemented in a {{DLL}}, this doesn't increment the reference count for that {{DLL}}. If the application deletes an effect while that effect is loaded, the resulting behavior is unpredictable. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}} </td><td>The effect requires capabilities not supported by the {{D2D}} device.</td></tr> </table><p>?</p> + + + <dd> <p>The class {{ID}} of the effect to create. See Built-in Effects for a list of effect {{IDs}}.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new effect.</p> </dd> + + + + + <p>Creates a gradient stop collection, enabling the gradient to contain color channels with values outside of [0,1] and also enabling rendering to a high-color render target with interpolation in sRGB space.</p> + <p>This method linearly interpolates between the color stops. An optional color space conversion is applied post-interpolation. Whether and how this gamma conversion is applied is determined by the pre- and post-interpolation. This method will fail if the device context does not support the requested buffer precision.</p><p>In order to get the desired result, you need to ensure that the inputs are specified in the correct color space. +</p><p>You must always specify colors in straight alpha, regardless of interpolation mode being premultiplied or straight. The interpolation mode only affects the interpolated values. Likewise, the stops returned by <strong>{{ID2D1GradientStopCollection::GetGradientStops}}</strong> will always have straight alpha. </p><p>If you specify <strong>{{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}}</strong>, then all stops are premultiplied before interpolation, and then un-premultiplied before color conversion. +</p><p>Starting with Windows?8, the interpolation behavior of this method has changed. </p><p>The table here shows the behavior in Windows?7 and earlier.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>1.0</td><td>Clamps the inputs and then converts from sRGB to scRGB.</td><td>Converts from scRGB to sRGB post-interpolation.</td><td>1.0</td></tr> <tr><td>2.2</td><td>Clamps the inputs.</td><td>No Operation</td><td>2.2</td></tr> </table><p>?</p><p>The table here shows the behavior in Windows?8 and later.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>sRGB to scRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>1.0</td></tr> <tr><td>scRGB to sRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>2.2</td></tr> <tr><td>sRGB to sRGB</td><td>No Operation</td><td>No Operation</td><td>2.2</td></tr> <tr><td>scRGB to scRGB</td><td>No Operation</td><td>No Operation</td><td>1.0</td></tr> </table><p>?</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>An array of color values and offsets.</p> </dd> + + + <dd> <p>The number of elements in the <em>gradientStops</em> array.</p> </dd> + + + <dd> <p>Specifies both the input color space and the space in which the color interpolation occurs.</p> </dd> + + + <dd> <p>The color space that colors will be converted to after interpolation occurs.</p> </dd> + + + <dd> <p>The precision of the texture used to hold interpolated values.</p> <strong>Note</strong>??This method will fail if the underlying Direct3D device does not support the requested buffer precision. Use <strong>{{ID2D1DeviceContext::IsBufferPrecisionSupported}}</strong> to determine what is supported. + ? </dd> + + + <dd> <p>Defines how colors outside of the range defined by the stop collection are determined.</p> </dd> + + + <dd> <p>Defines how colors are interpolated. {{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}} is the default, see Remarks for more info.</p> </dd> + + + <dd> <p>The new gradient stop collection.</p> </dd> + + + + + <p>Creates an image brush. The input image can be any type of image, including a bitmap, effect, or a command list. +</p> + <p>The image brush can be used to fill an arbitrary geometry, an opacity mask or text.</p><p>This sample illustrates drawing a rectangle with an image brush.</p><pre>{{HRESULT}} +CreatePatternBrush( __in {{ID2D1DeviceContext}} *pDeviceContext, __deref_out {{ID2D1ImageBrush}} **ppImageBrush ) +{ {{HRESULT}} hr = {{S_OK}}; {{ID2D1Image}} *pOldTarget = {{NULL}}; pDeviceContext-&gt;GetTarget(&amp;pOldTarget); {{ID2D1CommandList}} *pCommandList = {{NULL}}; hr = pDeviceContext-&gt;CreateCommandList(&amp;pCommandList); if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;SetTarget(pCommandList); hr = RenderPatternToCommandList(pDeviceContext); } pDeviceContext-&gt;SetTarget(pOldTarget); {{ID2D1ImageBrush}} *pImageBrush = {{NULL}}; if ({{SUCCEEDED}}(hr)) { hr = pDeviceContext-&gt;CreateImageBrush( pCommandList, {{D2D1::ImageBrushProperties}}( {{D2D1::RectF}}(198, 298, 370, 470), {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_INTERPOLATION_MODE_LINEAR}} ), &amp;pImageBrush ); } // Fill a rectangle with the image brush. if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;FillRectangle( {{D2D1::RectF}}(0, 0, 100, 100), pImageBrush); } SafeRelease(&amp;pImageBrush); SafeRelease(&amp;pCommandList); SafeRelease(&amp;pOldTarget); return hr; +}</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The image to be used as a source for the image brush.</p> </dd> + + + <dd> <p>The properties specific to an image brush.</p> </dd> + + + <dd> <p>Properties common to all brushes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the input rectangles.</p> </dd> + + + + + <p>Creates a bitmap brush, the input image is a Direct2D bitmap object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The bitmap to use as the brush.</p> </dd> + + + <dd> <p>A bitmap brush properties structure.</p> </dd> + + + <dd> <p>A brush properties structure.</p> </dd> + + + <dd> <p>The address of the newly created bitmap brush object.</p> </dd> + + + + + <p>Creates a <strong>{{ID2D1CommandList}}</strong> object.</p> + <p>A <strong>{{ID2D1CommandList}}</strong> can store Direct2D commands to be displayed later through <strong>{{ID2D1DeviceContext::DrawImage}}</strong> or through an image brush.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Indicates whether the format is supported by the device context. The formats supported are usually determined by the underlying hardware.</p> + <p>You can use supported formats in the <strong>{{D2D1_PIXEL_FORMAT}}</strong> structure to create bitmaps and render targets. Direct2D doesn't support all {{DXGI}} formats, even though they may have some level of Direct3D support by the hardware. +</p> + <p>Returns {{TRUE}} if the format is supported. Returns {{FALSE}} if the format is not supported.</p> + + + <dd> <p>The {{DXGI}} format to check.</p> </dd> + + + + + <p>Indicates whether the buffer precision is supported by the underlying Direct3D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Gets the bounds of an image without the world transform of the context applied.</p> + <p>The image bounds don't include multiplication by the world transform. They do reflect the current {{DPI}}, unit mode, and interpolation mode of the context. To get the bounds that include the world transform, use <strong>{{ID2D1DeviceContext::GetImageWorldBounds}}</strong>.</p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with a target offset of (0,0) and an identity world transform matrix. They do not reflect the current clip rectangle set on the device context or the extent of the context's current target image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}) and in local space.</p> </dd> + + + + + <p>Gets the bounds of an image with the world transform of the context applied.</p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. To get bounds which don't include the world transform, use <strong>{{ID2D1DeviceContext::GetImageLocalBounds}}</strong>. </p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with the same image and a target offset of (0,0). They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target image. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p> Gets the world-space bounds in {{DIPs}} of the glyph run using the device context {{DPI}}. </p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyph run to render.</p> </dd> + + + <dd> <p>The DirectWrite measuring mode that indicates how glyph metrics are used to measure text when it is formatted.</p> </dd> + + + <dd> <p>The bounds of the glyph run in {{DIPs}} and in world space.</p> </dd> + + + + + <p>Gets the device associated with a device context.</p> + <p>The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an <strong>{{ID2D1DeviceContext}}</strong> interface and then call <strong>GetDevice</strong>. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an <strong>{{ID2D1Device}}</strong> object.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a Direct2D device associated with this device context.</p> </dd> + + + + + <p>The bitmap or command list to which the Direct2D device context will now render.</p> + <p>The target can be changed at any time, including while the context is drawing.</p><p>The target can be either a bitmap created with the <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> flag, or it can be a command list. Other kinds of images cannot be set as a target. For example, you cannot set the output of an effect as target. If the target is not valid the context will enter the <strong>{{D2DERR_INVALID_TARGET}} </strong>error state.</p><p>You cannot use <strong>SetTarget</strong> to render to a bitmap/command list from multiple device contexts simultaneously. An image is considered ?being rendered to? if it has ever been set on a device context within a <strong>BeginDraw</strong>/<strong>EndDraw</strong> timespan. If an attempt is made to render to an image through multiple device contexts, all subsequent device contexts after the first will enter an error state. </p><p>Callers wishing to attach an image to a second device context should first call <strong>EndDraw</strong> on the first device context. +</p><p>Here is an example of the correct calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC1-&gt;SetTarget(pImage); +// ? +pDC1-&gt;EndDraw(); pDC2-&gt;BeginDraw(); +pDC2-&gt;SetTarget(pImage); +// ? +pDC2-&gt;EndDraw(); +</pre><p>Here is an example of the incorrect calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC2-&gt;BeginDraw(); pDC1-&gt;SetTarget(pImage); // ... pDC1-&gt;SetTarget({{NULL}}); pDC2-&gt;SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1. // ... pDC1-&gt;EndDraw(); // This EndDraw {{SUCCEEDs}}. +pDC2-&gt;EndDraw(); // This EndDraw {{FAILs}} </pre><strong>Note</strong>??Changing the target does not change the bitmap that an {{HWND}} render target presents from, nor does it change the bitmap that a {{DC}} render target blts to/from.?<p>This {{API}} makes it easy for an application to use a bitmap as a source (like in <strong>DrawBitmap</strong>) and as a destination at the same time. Attempting to use a bitmap as a source on the same device context to which it is bound as a target will put the device context into the {{D2DERR_BITMAP_BOUND_AS_TARGET}} error state.</p><p>It is acceptable to have a bitmap bound as a target bitmap on multiple render targets at once. Applications that do this must properly synchronize rendering with <strong>Flush</strong> or <strong>EndDraw</strong>.</p><p>You can change the target at any time, including while the context is drawing.</p><p>You can set the target to {{NULL}}, in which case drawing calls will put the device context into an error state with {{D2DERR_WRONG_STATE}}. Calling <strong>SetTarget</strong> with a {{NULL}} target does not restore the original target bitmap to the device context.</p><p>If the device context has an outstanding {{HDC}}, the context will enter the <strong>{{D2DERR_WRONG_STATE}}</strong> error state. The target will not be changed.</p><p>If the bitmap and the device context are not in the same resource domain, the context will enter <strong>\</strong> error state. The target will not be changed.</p><p> <strong>{{ID2D1RenderTarget::GetPixelSize}}</strong> returns the size of the current target bitmap (or 0, 0) if there is no bitmap bound). +<strong>{{ID2D1RenderTarget::GetSize}}</strong> returns the pixel size of the current bitmap scaled by the {{DPI}} of the render target. +<strong>SetTarget</strong> does not affect the {{DPI}} of the render target. +</p><p> <strong>{{ID2D1RenderTarget::GetPixelFormat}}</strong> returns the pixel format of the current target bitmap (or <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong> if there is none).</p><p> <strong>{{ID2D1Bitmap::CopyFromRenderTarget}}</strong> copies from the currently bound target bitmap.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the target currently associated with the device context.</p> + <p>If a target is not associated with the device context, <em>target</em> will contain <strong>{{NULL}}</strong> when the methods returns.</p><p>If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:</p><ul> <li> <strong>CreateHwndRenderTarget</strong> </li> <li> <strong>CreateDxgiSurfaceRenderTarget</strong> </li> <li> <strong>CreateWicBitmapRenderTarget</strong> </li> <li> <strong>CreateDCRenderTarget</strong> </li> <li> <strong>CreateCompatibleRenderTarget</strong> </li> </ul><p>It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for <strong>{{ID2D1RenderTarget}}</strong> methods.</p><p> <strong>CreateDxgiSurfaceRenderTarget</strong> will create a bitmap that is usable as a bitmap source if the {{DXGI}} surface is bindable as a shader resource view.</p><p> <strong>CreateCompatibleRenderTarget</strong> will always create bitmaps that are usable as a bitmap source.</p><p> <strong>{{ID2D1RenderTarget::BeginDraw}}</strong> will copy from the {{HDC}} to the original bitmap associated with it. <strong>{{ID2D1RenderTarget::EndDraw}}</strong> will copy from the original bitmap to the {{HDC}}. </p><p> <strong>{{IWICBitmap}}</strong> objects will be locked in the following circumstances:</p><ul> <li>BeginDraw has been called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>{{IWICBitmap}} objects will be unlocked in the following circumstances:</p><ul> <li>EndDraw is called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>Direct2D will only lock bitmaps that are not currently locked.</p><p>Calling <strong>QueryInterface</strong> for <strong>{{ID2D1GdiInteropRenderTarget}}</strong> will always succeed. <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the {{GDI_COMPATIBLE}} flag set.</p><p> <strong>{{ID2D1HwndRenderTarget::Resize}}</strong> will return <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if there are any outstanding references to the original target bitmap associated with the render target.</p><p>Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the target currently associated with the device context.</p> </dd> + + + + + <p>Sets the rendering controls for the given device context. </p> + <p> The rendering controls allow the application to tune the precision, performance, and resource usage of rendering operations.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The rendering controls to be applied.</p> </dd> + + + + + <p>Gets the rendering controls that have been applied to the context.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the rendering controls for this context.</p> </dd> + + + + + <p>Changes the primitive blend mode that is used for all rendering operations in the device context.</p> + <p>The primitive blend will apply to all of the primitive drawn on the context, unless this is overridden with the <em>compositeMode</em> parameter on the <strong>DrawImage</strong> {{API}}.</p><p> The primitive blend applies to the interior of any primitives drawn on the context. In the case of <strong>DrawImage</strong>, this will be implied by the image rectangle, offset and world transform.</p><p>If the primitive blend is anything other than <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong> then ClearType rendering will be turned off. If the application explicitly forces ClearType rendering in these modes, the drawing context will be placed in an error state. {{D2DERR_WRONG_STATE}} will be returned from either <strong>EndDraw</strong> or <strong>Flush</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The primitive blend to use.</p> </dd> + + + + + <p>Returns the currently set primitive blend used by the device context. </p> + + <p>The current primitive blend. The default value is <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong>.</p> + + + + <p>Specifies parameters used during view instancing configuration.</p> + <p>View instancing is declared in a {{PSO}} using this structure. The view instance count is set in the {{PSO}} to allow whole-pipeline optimization based on the number of views.</p><p>View instancing is disabled when it's not declared in the {{PSO}} or when ViewInstanceCount is set to 0. When disabled, rendering behaves as if view instancing is enabled and ViewInstanceCount is set to 1; shaders only see a value of 0 in {{SV_ViewID}} and just one view instance is produced. This allows shaders that are aware of view instancing to still be used in {{PSOs}} that disable it. Some adapters might support shader model 6.1 (which exposes {{SV_ViewID}}) but not view instancing; these adapters must still support shaders that input {{SV_ViewID}} in {{PSOs}} that declare ViewInstanceCount as 0 or 1.</p><p>The shader prior to rasterization can output {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values which don't have to depend on {{SV_ViewID}}. To compute the final effective index of the viewport and render target where primitives will be sent, these values, when present, are added to the ViewportArrayIndex and RenderTargetArrayIndex values of the view instance locations declared in the {{PSO}}. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in the {{PSO}} to a single value (such as 0) to act as a uniform base index to which the dynamically-selected {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values are added.</p> + + + <dd> <p> Specifies the number of views to be used, up to {{D3D12_MAX_VIEW_INSTANCE_COUNT}}. </p> </dd> + + + <dd> <p> The address of a memory location that contains <strong>ViewInstanceCount</strong> view instance location structures that specify the location of viewport/scissor and render target details of each view instance. </p> </dd> + + + <dd> <p> Configures view instancing with additional options. </p> </dd> + + + + + <p>Sets what units will be used to interpret values passed into the device context.</p><p></p> + <p> This method will affect all properties and parameters affected by <strong>SetDpi</strong> and <strong>GetDpi</strong>. This affects all coordinates, lengths, and other properties that are not explicitly defined as being in another unit. For example:</p><ul> <li><strong>SetUnitMode</strong> will affect a coordinate passed into <strong>{{ID2D1DeviceContext::DrawLine}}</strong>, and the scaling of a geometry passed into <strong>{{ID2D1DeviceContext::FillGeometry}}</strong>. </li> <li><strong>SetUnitMode</strong> will not affect the value returned by <strong>{{ID2D1Bitmap::GetPixelSize}}</strong>. </li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>An enumeration defining how passed-in units will be interpreted by the device context.</p> </dd> + + + + + <p>Gets the mode that is being used to interpret values by the device context.</p> + + <p>The unit mode.</p> + + + + <p>Draws a series of glyphs to the device context.</p> + <p>The <em>glyphRunDescription</em> is ignored when rendering, but can be useful for printing and serialization of rendering commands, such as to an {{XPS}} or {{SVG}} file. This extends <strong>{{ID2D1RenderTarget::DrawGlyphRun}}</strong>, which lacked the glyph run description.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Origin of first glyph in the series.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Supplementary glyph series information.</p> </dd> + + + <dd> <p>The brush that defines the text color.</p> </dd> + + + <dd> <p>The measuring mode of the glyph series, used to determine the advances and offsets. The default value is {{DWRITE_MEASURING_MODE_NATURAL}}.</p> </dd> + + + + + <p></p><p>A command list cannot reference effects which are part of effect graphs that consume the command list.</p> + + + + <p>Draw a metafile to the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If {{NULL}} is specified, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle)). </p><p>The <em>sourceRectangle</em> parameter defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> will clip this rectangle to the size of the source bitmap, thus making it impossible to sample outside of the bitmap. If {{NULL}} is specified, then the source rectangle is taken to be the size of the source bitmap. </p><p>If you specify <em>perspectiveTransform</em> it is applied to the rect in addition to the transform set on the render target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Push a layer onto the clip and layer stack of the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The parameters that defines the layer.</p> </dd> + + + <dd> <p>The layer resource to push on the device context that receives subsequent drawing operations. </p> <strong>Note</strong>??If a layer is not specified, Direct2D manages the layer resource automatically. ? </dd> + + + + + <p>This indicates that a portion of an effect's input is invalid. This method can be called many times.</p><p>You can use this method to propagate invalid rectangles through an effect graph. You can query Direct2D using the <strong>GetEffectInvalidRectangles</strong> method.</p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can also use this method to invalidate caches that have accumulated while rendering effects that have the <strong>{{D2D1_PROPERTY_CACHED}}</strong> property set to true.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Gets the number of invalid output rectangles that have accumulated on the effect. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to count the invalid rectangles on.</p> </dd> + + + <dd> <p>The returned rectangle count.</p> </dd> + + + + + <p>Gets the invalid rectangles that have accumulated since the last time the effect was drawn and <strong>EndDraw</strong> was then called on the device context.</p> + <p> </p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can use the <strong>InvalidateEffectInputRectangle</strong> method to specify invalidated rectangles for Direct2D to propagate through an effect graph.</p><p>If multiple invalid rectangles are requested, the rectangles that this method returns may overlap. When this is the case, the rectangle count might be lower than the count that <strong>GetEffectInvalidRectangleCount</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Returns the input rectangles that are required to be supplied by the caller to produce the given output rectangle. </p> + <p>The caller should be very careful not to place a reliance on the required input rectangles returned. Small changes for correctness to an effect's behavior can result in different rectangles being returned. In addition, different kinds of optimization applied inside the render can also influence the result. </p> + <p> A failure code, this will typically only be because an effect in the chain returned some error. </p> + + + <dd> <p>The image whose output is being rendered.</p> </dd> + + + <dd> <p>The portion of the output image whose inputs are being inspected.</p> </dd> + + + <dd> <p> A list of the inputs whos rectangles are being queried. </p> </dd> + + + <dd> <p>The input rectangles returned to the caller.</p> </dd> + + + <dd> <p>The number of inputs.</p> </dd> + + + + + <p>Fill using the alpha channel of the supplied opacity mask bitmap. The brush opacity will be modulated by the mask. The render target antialiasing mode must be set to aliased.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap that acts as the opacity mask</p> </dd> + + + <dd> <p>The brush to use for filling the primitive.</p> </dd> + + + <dd> <p>The destination rectangle to output to in the render target</p> </dd> + + + <dd> <p>The source rectangle from the opacity mask bitmap.</p> </dd> + + + + + <p> Creates Direct2D resources. </p> + <p> The <strong>{{ID2D1Factory1}}</strong> interface is used to create devices, register and unregister effects, and enumerate effects properties. Effects are registered and unregistered globally. The registration {{APIs}} are placed on this interface for convenience. </p> + + + + <p>Creates a <strong>{{ID2D1Device}}</strong> object.</p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a <strong>{{ID2D1StrokeStyle1}}</strong> object.</p> + <p>It is valid to specify a dash array only if {{D2D1_DASH_STYLE_CUSTOM}} is also specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Creates an <strong>{{ID2D1PathGeometry1}}</strong> object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Creates a new drawing state block, this can be used in subsequent SaveDrawingState and RestoreDrawingState operations on the render target. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The drawing state description structure.</p> </dd> + + + <dd> <p>The address of the newly created drawing state block.</p> </dd> + + + + + <p>Creates a new <strong>{{ID2D1GdiMetafile}}</strong> object that you can use to replay metafile content. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a stream.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p> <strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory, derived device, and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a string.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p><strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory and derived device and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Unregisters an effect within the factory instance that corresponds to the <em>classId</em> provided. </p> + <p>In order for the effect to be fully unloaded, you must call <strong>UnregisterEffect</strong> the same number of times that you have registered the effect.</p><p>The <strong>UnregisterEffect</strong> method unregisters only those effects that are registered on the same factory. It cannot be used to unregister a built-in effect.</p> + <p>{{D2DERR_EFFECT_IS_NOT_REGISTERED}} if the effect is not registered, {{S_OK}} otherwise.</p> + + + <dd> <p>The identifier of the effect to be unregistered.</p> </dd> + + + + + <p>Returns the class {{IDs}} of the currently registered effects and global effects on this factory.</p> + <p>The set of class {{IDs}} will be atomically returned by the {{API}}. The set will not be interrupted by other threads registering or unregistering effects.</p><p>If <em>effectsRegistered</em> is larger than <em>effectCount</em>, the supplied array will still be filled to capacity with the current set of registered effects. This method returns the {{CLSIDs}} for all global effects and all effects registered to this factory.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</td><td><em>effectsRegistered</em> is larger than <em>effectCount</em>.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains an array of effects. <strong>{{NULL}}</strong> if no effects are retrieved.</p> </dd> + + + <dd> <p>The capacity of the <em>effects</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects copied into <em>effects</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects currently registered in the system.</p> </dd> + + + + + <p>Retrieves the properties of an effect.</p> + <p>The returned effect properties will have all the mutable properties for the effect set to a default of <strong>{{NULL}}</strong>, or an empty value. </p><ul> <li>Value types will be zero-filled.</li> <li>Blob and string types will be zero-length.</li> <li>Array types will have length 1 and the element of the array will conform to the previous rules.</li> </ul><p>This method cannot be used to return the properties for any effect not visible to <strong>{{ID2D1DeviceContext::CreateEffect}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The requested effect could not be found.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The {{ID}} of the effect to retrieve properties from.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the property interface that can be used to query the metadata of the effect.</p> </dd> + + + + + <p> A locking mechanism from a Direct2D factory that Direct2D uses to control exclusive resource access in an app that is uses multiple threads. </p> + <p> You can get an <strong>{{ID2D1Multithread}}</strong> object by querying for it from an <strong>{{ID2D1Factory}}</strong> object. </p><p> You should use this lock while doing any operation on a Direct3D/{{DXGI}} surface. Direct2D will wait on any call until you leave the critical section. </p><strong>Note</strong>?? Normal rendering is guarded automatically by an internal Direct2D lock.? + + + + <p> Returns whether the Direct2D factory was created with the <strong>{{D2D1_FACTORY_TYPE_MULTI_THREADED}}</strong> flag. </p> + <p>Returns true if the Direct2D factory was created as multi-threaded, or false if it was created as single-threaded.</p> + + + + <p>Enters the Direct2D {{API}} critical section, if it exists. </p> + <p>This method does not return a value.</p> + + + + <p>Leaves the Direct2D {{API}} critical section, if it exists.</p> + <p>This method does not return a value.</p> + + + + <p>Creates a new Direct2D device associated with the provided {{DXGI}} device. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>If the creation properties are not specified, then <em>d2dDevice</em> will inherit its threading mode from <em>dxgiDevice</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} device the Direct2D device is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device.</p> </dd> + + + + + <p>Creates a new Direct2D device context associated with a {{DXGI}} surface. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>This function will also create a new <strong>{{ID2D1Device}}</strong> that can be retrieved through <strong>{{ID2D1DeviceContext::GetDevice}}</strong>.</p><p>The {{DXGI}} device will be specified implicitly through <em>dxgiSurface</em>.</p><p>If <em>creationProperties</em> are not specified, the Direct2D device will inherit its threading mode from the {{DXGI}} device implied by <em>dxgiSurface</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface the Direct2D device context is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device context.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device context.</p> </dd> + + + + + <p>Converts the given color from one colorspace to another.</p> + <p>The converted color.</p> + + + <dd> <p>The source color space.</p> </dd> + + + <dd> <p>The destination color space.</p> </dd> + + + <dd> <p>The source color.</p> </dd> + + + + + <p>Returns the sine and cosine of an angle.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The angle to calculate.</p> </dd> + + + <dd> <p>The sine of the angle.</p> </dd> + + + <dd> <p>The cosine of the angle.</p> </dd> + + + + + <p>Returns the tangent of an angle.</p> + <p>The tangent of the angle.</p> + + + <dd> <p>The angle to calculate the tangent for.</p> </dd> + + + + + <p>Returns the length of a 3 dimensional vector.</p> + <p>The length of the vector.</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + + <dd> <p>There were no changes.</p> </dd> + + + <dd> <p>The properties of the effect changed.</p> </dd> + + + <dd> <p>The context state changed.</p> </dd> + + + <dd> <p>The effect?s transform graph has changed. This happens only when an effect supports a variable input count.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + <dd> <p>The logical equivalent of having no flags set.</p> </dd> + + + <dd> <p>If this flag is set, the renderer assumes that the vertex shader will cover the entire region of interest with vertices and need not clear the destination render target. If this flag is not set, the renderer assumes that the vertices do not cover the entire region interest and must clear the render target to transparent black first.</p> </dd> + + + <dd> <p>The renderer will use a depth buffer when rendering custom vertices. The depth buffer will be used for calculating occlusion information. This can result in the renderer output being draw-order dependent if it contains transparency.</p> </dd> + + + <dd> <p>Indicates that custom vertices do not overlap each other.</p> </dd> + + + + + <p>Indicates whether the vertex buffer changes infrequently or frequently.</p> + <p>If a dynamic vertex buffer is created, Direct2D will not necessarily map the buffer directly to a Direct3D vertex buffer. Instead, a system memory copy can be copied to the rendering engine vertex buffer as the effects are rendered.</p> + + + <dd> <p>The created vertex buffer is updated infrequently.</p> </dd> + + + <dd> <p>The created vertex buffer is changed frequently.</p> </dd> + + + + + <p>Specifies the blend operation on two color sources.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND_OP}}</strong>.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Specifies how one of the color sources is to be derived and optionally specifies a preblend operation on the color source.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND}}</strong>.</p> + + + <dd> <p>The data source is black (0, 0, 0, 0). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is white (1, 1, 1, 1). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from the second input of the blend transform. There is not a preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from second input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from second input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the second input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data from the second input of the blend transform. The preblend operation clamps the data to 1 or less.</p> </dd> + + + <dd> <p>The data source is the blend factor. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is the blend factor. The preblend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + + + <p>Allows a caller to control the channel depth of a stage in the rendering pipeline.</p> + + + <dd> <p>The channel depth is the default. It is inherited from the inputs.</p> </dd> + + + <dd> <p>The channel depth is 1.</p> </dd> + + + <dd> <p>The channel depth is 4.</p> </dd> + + + + + <p>Represents filtering modes that a transform may select to use on input textures.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D11_FILTER}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + + + <p>Defines capabilities of the underlying Direct3D device which may be queried using <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + + <p>Defines a property binding to a pair of functions which get and set the corresponding property. </p> + <p>The <strong>propertyName</strong> is used to cross-correlate the property binding with the registration {{XML}}. The <strong>propertyName</strong> must be present in the {{XML}} call or the registration will fail. All properties must be bound.</p> + + + <dd> <p> The name of the property.</p> </dd> + + + <dd> <p> The function that will receive the data to set.</p> </dd> + + + <dd> <p>The function that will be asked to write the output data.</p> </dd> + + + + + <p>Defines a resource texture when the original resource texture is created.</p> + + + + <dd> <p>The extents of the resource table in each dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must be a number from 1 to 3.</p> </dd> + + + <dd> <p>The precision of the resource texture to create. </p> </dd> + + + <dd> <p>The number of channels in the resource texture.</p> </dd> + + + <dd> <p>The filtering mode to use on the texture.</p> </dd> + + + <dd> <p>Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>Defines the properties of a vertex buffer that are standard for all vertex shader definitions.</p> + <p>If <strong>usage</strong> is dynamic, the system might return a system memory buffer and copy these vertices into the rendering vertex buffer for each element.</p><p>If the initialization data is not specified, the buffer will be uninitialized.</p> + + + <dd> <p>The number of inputs to the vertex shader.</p> </dd> + + + <dd> <p>Indicates how frequently the vertex buffer is likely to be updated.</p> </dd> + + + <dd> <p>The initial contents of the vertex buffer.</p> </dd> + + + <dd> <p>The size of the vertex buffer, in bytes.</p> </dd> + + + + + <p>Defines a vertex shader and the input element description to define the input layout. The combination is used to allow a custom vertex effect to create a custom vertex shader and pass it a custom layout.</p> + <p>The vertex shader will be loaded by the <strong>CreateVertexBuffer</strong> call that accepts the vertex buffer properties.</p><p>This structure does not need to be specified if one of the standard vertex shaders is used.</p> + + + <dd> <p>The unique {{ID}} of the vertex shader.</p> </dd> + + + <dd> <p>An array of input assembler stage data types.</p> </dd> + + + <dd> <p>The number of input elements in the vertex shader.</p> </dd> + + + <dd> <p>The vertex stride.</p> </dd> + + + + + <p>Defines a range of vertices that are used when rendering less than the full contents of a vertex buffer.</p> + + + + <dd> <p>The first vertex in the range to process.</p> </dd> + + + <dd> <p>The number of vertices to use.</p> </dd> + + + + + <p>Defines a blend description to be used in a particular blend transform.</p> + <p>This description closely matches the <strong>{{D3D11_BLEND_DESC}}</strong> struct with some omissions and the addition of the blend factor in the description.</p> + + + <dd> <p>Specifies the first {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies the second {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies how to combine the {{RGB}} data sources.</p> </dd> + + + <dd> <p>Specifies the first alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies the second alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies how to combine the alpha data sources.</p> </dd> + + + <dd> <p>Parameters to the blend operations. The blend must use <strong>{{D2D1_BLEND_BLEND_FACTOR}}</strong> for this to be used.</p> </dd> + + + + + <p>Describes the options that transforms may set on input textures.</p> + + + + <dd> <p>The type of filter to apply to the input texture.</p> </dd> + + + <dd> <p>The mip level to retrieve from the upstream transform, if specified.</p> </dd> + + + + + <p>Describes the support for doubles in shaders.</p> + <p>Fill this structure by passing a {{D2D1_FEATURE_DOUBLES}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>{{TRUE}} is doubles are supported within the shaders.</p> </dd> + + + + + <p>Describes compute shader support, which is an option on {{D3D10}} feature level.</p> + <p>You can fill this structure by passing a {{D2D1_}} {{FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>Shader model 4 compute shaders are supported.</p> </dd> + + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + <p>This interface is passed to an effect implementation through the <strong>{{ID2D1EffectImpl::Initialize}}</strong> method. In order to prevent applications casually gaining access to this interface, and to separate reference counts between the public and private interfaces, it is not possible to call <strong>QueryInterface</strong> between the <strong>{{ID2D1DeviceContext}}</strong> and the <strong>{{ID2D1EffectContext}}</strong>.</p><p>Each call to <strong>{{ID2D1Effect::Initialize}}</strong> will be provided a different <strong>{{ID2D1EffectContext}}</strong> interface. This interface tracks resource allocations for the effect. When the effect is released, the corresponding allocations will also be released.</p> + + + + <p>Gets the unit mapping that an effect will use for properties that could be in either dots per inch (dpi) or pixels.</p> + <p> If the <strong>{{D2D1_UNIT_MODE}}</strong> is <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong>, both <em>dpiX</em> and <em>dpiY</em> will be set to 96.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The dpi on the x-axis.</p> </dd> + + + <dd> <p>The dpi on the y-axis.</p> </dd> + + + + + <p> Creates a Direct2D effect for the specified class {{ID}}. This is the same as <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> so custom effects can create other effects and wrap them in a transform. </p> + <p>The created effect does not reference count the {{DLL}} from which the effect was created. If the caller unregisters an effect while this effect is loaded, the resulting behavior is unpredictable.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> </table><p>?</p> + + + + <p>This indicates the maximum feature level from the provided list which is supported by the device. If none of the provided levels are supported, then this {{API}} fails with {{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}</td><td>None of the provided levels are supported.</td></tr> </table><p>?</p> + + + <dd> <p>The feature levels provided by the application.</p> </dd> + + + <dd> <p>The count of feature levels provided by the application</p> </dd> + + + <dd> <p>The maximum feature level from the <em>featureLevels</em> list which is supported by the {{D2D}} device. +</p> </dd> + + + + + <p>Wraps an effect graph into a single transform node and then inserted into a transform graph. This allows an effect to aggregate other effects. This will typically be done in order to allow the effect properties to be re-expressed with a different contract, or to allow different components to integrate each-other?s effects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to be wrapped in a transform node.</p> </dd> + + + <dd> <p>The returned transform node that encapsulates the effect graph.</p> </dd> + + + + + <p>This creates a blend transform that can be inserted into a transform graph. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the blend transform.</p> </dd> + + + <dd> <p>Describes the blend transform that is to be created.</p> </dd> + + + <dd> <p>The returned blend transform.</p> </dd> + + + + + <p>Creates a transform that extends its input infinitely in every direction based on the passed in extend mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The extend mode in the X-axis direction.</p> </dd> + + + <dd> <p>The extend mode in the Y-axis direction.</p> </dd> + + + <dd> <p>The returned transform.</p> </dd> + + + + + <p>Creates and returns an offset transform.</p> + <p>An offset transform is used to offset an input bitmap without having to insert a rendering pass. An offset transform is automatically inserted by an Affine transform if the transform evaluates to a pixel-aligned transform.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The offset amount.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to an offset transform object.</p> </dd> + + + + + <p>Creates and returns a bounds adjustment transform.</p> + <p>A support transform can be used for two different reasons.</p><ul> <li>To indicate that a region of its input image is already transparent black. This can increase efficiency for rendering bitmaps. <strong>Note</strong>??If the indicated region does {{NOT}} contain only transparent black pixels, then rendering results are undefined. ? </li> <li>To increase the size of the input image. The expanded area will be treated as transparent black +</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The initial output rectangle for the bounds adjustment transform.</p> </dd> + + + <dd> <p>The returned bounds adjustment transform.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>This tests to see if the given shader is loaded.</p> + <p>Whether the shader is loaded.</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + + + <p>Creates or finds the given resource texture, depending on whether a resource id is specified. It also optionally initializes the texture with the specified data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>An optional reference to the unique id that identifies the lookup table.</p> </dd> + + + <dd> <p>The properties used to create the resource texture.</p> </dd> + + + <dd> <p>The optional data to be loaded into the resource texture. +</p> </dd> + + + <dd> <p>An optional reference to the stride to advance through the resource texture, according to dimension.</p> </dd> + + + <dd> <p>The size, in bytes, of the data.</p> </dd> + + + <dd> <p>The returned texture that can be used as a resource in a Direct2D effect.</p> </dd> + + + + + <p>Finds the given resource texture if it has already been created with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested resource texture was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a vertex buffer or finds a standard vertex buffer and optionally initializes it with vertices. The returned buffer can be specified in the render info to specify both a vertex shader and or to pass custom vertices to the standard vertex shader used by Direct2D. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>This finds the given vertex buffer if it has already been created with <strong>{{ID2D1EffectContext::CreateVertexBuffer}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested vertex buffer was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a color context from a color space. </p><p>If the color space is Custom, the context is initialized from the <em>profile</em> and <em>profileSize</em> parameters.</p><p>If the color space is not Custom, the context is initialized with the profile bytes associated with the color space. The <em>profile</em> and <em>profileSize</em> parameters are ignored.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>filename</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>This indicates whether an optional capability is supported by the {{D3D}} device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The feature to query support for.</p> </dd> + + + <dd> <p>A structure indicating information about how or if the feature is supported.</p> </dd> + + + <dd> <p>The size of the <em>featureSupportData</em> parameter.</p> </dd> + + + + + <p> Indicates whether the buffer precision is supported by the underlying Direct2D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Describes a node in a transform topology.</p> + <p>Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.</p> + + + + <p>Gets the number of inputs to the transform node.</p> + + <p>This method returns the number of inputs to this transform node.</p> + + + + <p>Defines a mappable single-dimensional vertex buffer.</p> + + + + + <p>Maps the provided data into user memory.</p> + <p> If <em>data</em> is larger than <em>bufferSize</em>, this method fails. </p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains the address of a reference to the available buffer.</p> </dd> + + + <dd> <p>The desired size of the buffer.</p> </dd> + + + + + <p>Unmaps the vertex buffer.</p> + <p>After this method returns, the mapped memory from the vertex buffer is no longer accessible by the effect.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}}</td><td>The object was not in the correct state to process the method.</td></tr> </table><p>?</p> + + + + <p>Tracks a transform-created resource texture.</p> + + + + + <p>Updates the specific resource texture inside the specific range or box using the supplied data.</p> + <p>The number of dimensions in the update must match those of the created texture.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td> {{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The "left" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The "right" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The stride to advance through the input data, according to dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must match the number used to load the texture.</p> </dd> + + + <dd> <p>The data to be placed into the resource texture.</p> </dd> + + + <dd> <p>The size of the data buffer to be used to update the resource texture.</p> </dd> + + + + + <p>Describes the render information common to all of the various transform implementations.</p> + <p>This interface is used by a transform implementation to first describe and then indicate changes to the rendering pass that corresponds to the transform.</p> + + + + <p>Sets how a specific input to the transform should be handled by the renderer in terms of sampling.</p> + <p>The input description must be matched correctly by the effect shader code.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input that will have the input description applied.</p> </dd> + + + <dd> <p>The description of the input to be applied to the transform.</p> </dd> + + + + + <p>Allows a caller to control the output precision and channel-depth of the transform in which the render information is encapsulated.</p> + <p> If the output precision of the transform is not specified, then it will default to the precision specified on the Direct2D device context. The maximum of 16bpc <strong>{{UNORM}}</strong> and 16bpc <strong>{{FLOAT}}</strong> is 32bpc <strong>{{FLOAT}}</strong>.</p><p>The output channel depth will match the maximum of the input channel depths if the channel depth is <strong>{{D2D1_CHANNEL_DEPTH_DEFAULT}}</strong>.</p><p>There is no global output channel depth, this is always left to the control of the transforms. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of buffer that should be used as an output from this transform.</p> </dd> + + + <dd> <p>The number of channels that will be used on the output buffer. </p> </dd> + + + + + <p>Specifies that the output of the transform in which the render information is encapsulated is or is not cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output of the transform is cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides an estimated hint of shader execution cost to {{D2D}}.</p> + <p>The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this {{API}} is optional, but it may improve performance if you provide an accurate number. </p><strong>Note</strong>??Instructions that occur in a loop should be counted according to the number of loop iterations.? + <p>This method does not return a value.</p> + + + <dd> <p>An approximate instruction count of the associated shader.</p> </dd> + + + + + <p>This interface is used to describe a {{GPU}} rendering pass on a vertex or pixel shader. It is passed to <strong>{{ID2D1DrawTransform}}</strong>.</p> + + + + <p>Sets the constant buffer for this transform's pixel shader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the texture to be bound to the pixel shader.</p> </dd> + + + <dd> <p>The created resource texture.</p> </dd> + + + + + <p>Sets the constant buffer for this transform's vertex shader.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Set the shader instructions for this transform.</p> + <p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and will fail to Draw, it will place the context into an error state which can be retrieved through the <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call. </p><p>Specifying <em>pixelOptions</em> other than {{D2D1_PIXEL_OPTIONS_NONE}} can enable the renderer to perform certain optimizations such as combining various parts of the effect graph together. If this information does not accurately describe the shader, indeterminate rendering artifacts can result. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The resource id for the shader.</p> </dd> + + + <dd> <p>Additional information provided to the renderer to indicate the operations the pixel shader does.</p> </dd> + + + + + <p>Sets a vertex buffer, a corresponding vertex shader, and options to control how the vertices are to be handled by the Direct2D context.</p> + <p>The vertex shaders associated with the vertex buffer through the vertex shader {{GUID}} must have been loaded through the <strong>{{ID2D1EffectContext::LoadVertexShader}}</strong> method before this call is made.</p><p>If you pass the vertex option <strong>{{D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR}}</strong>, then the method fails unless the blend description is exactly this: </p><pre>{{D2D1_BLEND_DESCRIPTION}} blendDesc = { {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, { 1.0f, 1.0f, 1.0f, 1.0f } };</pre><p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p><p> If blendDescription is {{NULL}}, a foreground-over blend mode is used.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The vertex buffer, if this is cleared, the default vertex shader and mapping to the transform rectangles will be used.</p> </dd> + + + <dd> <p>Options that influence how the renderer will interact with the vertex shader.</p> </dd> + + + <dd> <p>How the vertices will be blended with the output texture.</p> </dd> + + + <dd> <p>The set of vertices to use from the buffer. +</p> </dd> + + + <dd> <p>The {{GUID}} of the vertex shader.</p> </dd> + + + + + <p>Enables specification of information for a compute-shader rendering pass.</p> + <p>The transform changes the state on this render information to specify the compute shader and its dependent resources.</p> + + + + <p>Establishes or changes the constant buffer data for this transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Sets the compute shader to the given shader resource. The resource must be loaded before this call is made.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{GUID}} of the shader.</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index to the given texture resource. The texture resource must already have been loaded with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> method. This call will fail if the specified index overlaps with any input. The input indices always precede the texture {{LUT}} indices. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>Represents a graph of transform nodes.</p> + <p>This interface allows a graph of transform nodes to be specified. This interface is passed to <strong>{{ID2D1EffectImpl::Initialize}}</strong> to allow an effect implementation to specify a graph of transforms or a single transform.</p> + + + + <p>Returns the number of inputs to the transform graph.</p> + <p>The number of inputs to this transform graph.</p> + + + + <p>Sets a single transform node as being equivalent to the whole graph.</p> + <p>This equivalent to calling <strong>{{ID2D1TransformGraph::Clear}}</strong>, adding a single node, connecting all of the node inputs to the effect inputs in order, and setting the transform not as the graph output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node to be set.</p> </dd> + + + + + <p>Adds the provided node to the transform graph.</p> + <p>This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way. +</p><p>A transform graph cannot be directly added to another transform graph. +Only interfaces derived from <strong>{{ID2D1TransformNode}}</strong> can be added to the transform graph. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be added to the transform graph.</p> </dd> + + + + + <p>Removes the provided node from the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p><p>Any connections to this node will be removed when the node is removed.</p><p>After the node is removed, it cannot be used by the interface until it has been added to the graph by <strong>AddNode</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be removed from the transform graph.</p> </dd> + + + + + <p>Sets the output node for the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be considered the output of the transform node.</p> </dd> + + + + + <p>Connects two nodes inside the transform graph.</p> + <p>Both nodes must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node from which the connection will be made.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Connects a transform node inside the graph to the corresponding effect input of the encapsulating effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The effect input to which the transform node will be bound.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Clears the transform nodes and all connections from the transform graph.</p> + <p>Used when enough changes to transfoms would make editing of the transform graph inefficient.</p> + <p>This method does not return a value.</p> + + + + <p>Uses the specified input as the effect output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input to the effect.</p> </dd> + + + + + <p>Represents the base interface for all of the transforms implemented by the transform author.</p> + <p>Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.</p> + + + + <p>Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle from which the inputs must be mapped.</p> </dd> + + + <dd> <p>The corresponding set of inputs. The inputs will directly correspond to the transform inputs.</p> </dd> + + + <dd> <p>The number of inputs specified. Direct2D guarantees that this is equal to the number of inputs specified on the transform.</p> </dd> + + + + + <p>Performs the inverse mapping to <strong>MapOutputRectToInputRects</strong>.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>Unlike the <strong>MapOutputRectToInputRects</strong> and <strong>MapInvalidRect</strong> functions, this method is explicitly called by the renderer at a determined place in its rendering algorithm. The transform implementation may change its state based on the input rectangles and use this information to control its rendering information. This method is always called before the <strong>MapInvalidRect</strong> and <strong>MapOutputRectToInputRects</strong> methods of the transform.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the input rectangles for this rendering pass into the transform.</p> + <p>The transform implementation must regard <strong>MapInvalidRect</strong> as purely functional. The transform implementation can base the mapped input rectangle on the transform implementation's current state as specified by the encapsulating effect properties. But the transform implementation can't change its own state in response to a call to <strong>MapInvalidRect</strong>. Direct2D can call this method at any time and in any sequence following a call to the <strong>MapInputRectsToOutputRect</strong> method. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the input rectangle.</p> </dd> + + + <dd> <p>The invalid input rectangle.</p> </dd> + + + <dd> <p>The output rectangle to which the input rectangle must be mapped.</p> </dd> + + + + + <p>A specialized implementation of the Shantzis calculations to a transform implemented on the {{GPU}}. These calculations are described in the paper A model for efficient and flexible image computing.</p><p>The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the <strong>SetDrawInfo</strong> method. </p> + + + + <p> Provides the {{GPU}} render info interface to the transform implementation.</p> + <p>The transform can maintain a reference to this interface for its lifetime. If any properties change on the transform, it can apply these changes to the corresponding <em>drawInfo</em> interface. </p><p>This is also used to determine that the corresponding nodes in the graph are dirty.</p> + <p>Any {{HRESULT}} value can be returned when implementing this method. A failure will be returned from the corresponding <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call.</p> + + + <dd> <p>The interface supplied back to the calling method to allow it to specify the {{GPU}} based transform pass.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Sets the render information used to specify the compute shader pass.</p> + <p>If this method fails, <strong>{{ID2D1TransformGraph::AddNode}}</strong> fails.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The render information object to set.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Supplies data to an analysis effect.</p> + <p> This interface can be implemented by either an <strong>{{ID2D1DrawTransform}}</strong> or an <strong>{{ID2D1ComputeTransform}}</strong>.</p> + + + + <p>Supplies the analysis data to an analysis transform.</p> + <p>The output of the transform will be copied to {{CPU}}-accessible memory by the imaging effects system before being passed to the implementation.</p><p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data that the transform will analyze.</p> </dd> + + + <dd> <p>The size of the analysis data.</p> </dd> + + + + + <p>Represents a {{CPU}}-based rasterization stage in the transform pipeline graph.</p> + <p><strong>{{ID2D1SourceTransform}}</strong> specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.</p> + + + + <p>Sets the render information for the transform.</p> + <p>Provides a render information interface to the source transform to allow it to specify state to the rendering system.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The interface supplied to the transform to allow specifying the {{CPU}} based transform pass.</p> </dd> + + + + + <p>Draws the transform to the graphics processing unit ({{GPU}})?based Direct2D pipeline.</p> + <p>The implementation of the rasterizer guarantees that adding the <em>renderRect</em> to the <em>targetOrigin</em> does not exceed the bounds of the bitmap.</p><p>When implementing this method you must update the bitmap in this way: </p><ol> <li>Call the <strong>{{ID2D1Bitmap::Map}}</strong> method with the {{D2D1_MAP_OPTIONS_DISCARD}} and {{D2D1_MAP_OPTIONS_WRITE}} +flags.</li> <li>Update the buffer this method returns.</li> <li>Call the <strong>{{ID2D1Bitmap::Unmap}}</strong> method.</li> </ol><p>If you set the buffer precision manually on the associated <strong>{{ID2D1RenderInfo}}</strong> object, it must handle different pixel formats in this method by calling <strong>{{ID2D1Bitmap::GetPixelFormat}}</strong>. If you set the buffer precision manually, then you can rely on that format always being the one you provided.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The target to which the transform should be written.</p> </dd> + + + <dd> <p>The area within the source from which the image should be drawn.</p> </dd> + + + <dd> <p>The origin within the target bitmap to which the source data should be drawn.</p> </dd> + + + + + <p>Represents the set of transforms implemented by the effect-rendering system, which provides fixed-functionality.</p> + + + + + <p>Sets the properties of the output buffer of the specified transform node.</p> + <p>You can use the <strong>{{ID2D1EffectContext::IsBufferPrecisionSupported}}</strong> method to see if buffer precision is supported.</p><p>The available channel depth and precision depend on the capabilities of the underlying Microsoft Direct3D device.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> </table><p>?</p> + + + <dd> <p>The number of bits and the type of the output buffer.</p> </dd> + + + <dd> <p>The number of channels in the output buffer (1 or 4).</p> </dd> + + + + + <p>Sets whether the output of the specified transform is cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output should be cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides methods to allow a blend operation to be inserted into a transform graph.</p><p>The image output of the blend transform is the same as rendering an image effect graph with these steps:</p><ul> <li>Copy the first input to the destination image.</li> <li>Render the next input on top using the blend description.</li> <li>Continue for each additional input.</li> </ul> + + + + + <p>Changes the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new blend description specified for the blend transform.</p> </dd> + + + + + <p>Gets the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the blend description specified for the blend transform.</p> </dd> + + + + + <p>Extends the input rectangle to infinity using the specified extend modes.</p> + + + + <p>Sets the extend mode in the x direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the x direction.</p> </dd> + + + + + <p>Sets the extend mode in the y direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the y direction.</p> </dd> + + + + + <p>Gets the extend mode in the x direction.</p> + + <p>This method returns the extend mode in the x direction.</p> + + + + <p>Gets the extend mode in the y direction.</p> + + <p>This method returns the extend mode in the y direction.</p> + + + + <p>Instructs the effect-rendering system to offset an input bitmap without inserting a rendering pass.</p> + <p>Because a rendering pass is not required, the interface derives from a transform node. This allows it to be inserted into a graph but does not allow an output buffer to be specified.</p> + + + + <p>Sets the offset in the current offset transform.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new offset to apply to the offset transform.</p> </dd> + + + + + <p>Gets the offset currently in the offset transform.</p> + + <p>The current transform offset.</p> + + + + <p>A support transform for effects to modify the output rectangle of the previous effect or bitmap. </p> + <p>The support transform can be used for two different reasons.</p><ul> <li> <p>To indicate that a region of its input image is already transparent black. The expanded area will be treated as transparent black.</p> <p>This can increase efficiency for rendering bitmaps.</p> </li> <li> <p>To increase the size of the input image.</p> </li> </ul><p>?</p><p>?</p> + + + + <p>This sets the output bounds for the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Returns the output rectangle of the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Allows a custom effect's interface and behavior to be specified by the effect author.</p> + <p>This interface is created by the effect author from a static factory registered through the <strong>{{ID2D1Factory::RegisterEffect}}</strong> method.</p> + + + + <p>The effect can use this method to do one time initialization tasks. If this method is not needed, the method can just return <strong>{{S_OK}}</strong>.</p> + <p>This moves resource creation cost to the <strong>CreateEffect</strong> call, rather than during rendering.</p><p>If the implementation fails this call, the corresponding <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> call also fails.</p><p>The following example shows an effect implementing an initialize method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An internal context interface that creates and returns effect author?centric types.</p> </dd> + + + <dd> <p>The effect can populate the transform graph with a topology and can update it later.</p> </dd> + + + + + <p>Prepares an effect for the rendering process.</p> + <p>This method is called by the renderer when the effect is within an effect graph that is drawn.</p><p> The method will be called:</p><ul> <li>If the effect has been initialized but has not previously been drawn.</li> <li>If an effect property has been set since the last draw call.</li> <li>If the context state has changed since the effect was last drawn.</li> </ul><p>The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.</p><p>Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the type of change the effect should expect.</p> </dd> + + + + + <p>The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. </p><p>The renderer calls this method when:</p><ul> <li>When the effect is first initialized.</li> <li>If the number of inputs to the effect changes.</li> </ul> + <p>An error that prevents the effect from being initialized if called as part of the CreateEffect call. If the effect fails a subsequent SetGraph call:</p><ul> <li>The error will be returned from the property method that caused the number of inputs to the effect to change. +</li> <li>The effect object will be placed into an error state, if subsequently used to render, the context will be placed into a temporary error state, that particular effect will fail to render and the failure will be returned on the next EndDraw or Flush call.</li> </ul> + + + <dd> <p>The graph to which the effect describes its transform topology through the SetDescription call.</p> </dd> + + + + + <p>The rendering priority affects the extent to which Direct2D will throttle its rendering workload.</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Retrieves the current rendering priority of the device.</p> + <p> The current rendering priority of the device.</p> + + + + <p>Sets the priority of Direct2D rendering operations performed on any device context associated with the device.</p> + <p>Calling this method affects the rendering priority of all device contexts associated with the device. This method can be called at any time, but is not guaranteed to take effect until the beginning of the next frame. The recommended usage is to call this method outside of <strong>BeginDraw</strong> and <strong>EndDraw</strong> blocks. Cycling this property frequently within drawing blocks will effectively reduce the benefits of any throttling that is applied.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The desired rendering priority for the device and associated contexts.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.</p> + + + + <p>Enables creation and drawing of geometry realization objects. </p> + + + + <p>Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The width of the stroke. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The stroke style (optional).</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Renders a given geometry realization to the target with the specified brush.</p> + <p> This method respects all currently set state (transform, {{DPI}}, unit mode, target image, clips, layers); however, artifacts such as faceting may appear when rendering the realizations with a large effective scale (either via the transform or the {{DPI}}). Callers should create their realizations with an appropriate flattening tolerance using either <strong>{{D2D1_DEFAULT_FLATTENING_TOLERANCE}}</strong> or <strong>ComputeFlatteningTolerance</strong> to compensate for this. </p><p>Additionally, callers should be aware of the safe render bounds when creating geometry realizations. If a geometry extends outside of [-524,287, 524,287] {{DIPs}} in either the X- or the Y- direction in its original (pre-transform) coordinate space, then it may be clipped to those bounds when it is realized. This clipping will be visible even if the realization is subsequently transformed to fit within the safe render bounds.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry realization to be rendered.</p> </dd> + + + <dd> <p>The brush to render the realization with.</p> </dd> + + + + + <p> Creates Direct2D resources. </p><p> This interface also enables the creation of <strong>{{ID2D1Device1}}</strong> objects. </p> + + + + <p>Creates an <strong>{{ID2D1Device1}}</strong> object. </p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device1}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink}}</strong> interface. It also enables access to the new primitive blend modes, {{MIN}} and {{ADD}}, through its <strong>SetPrimitiveBlend1</strong> method.</p> + + + + <p>Sets a new primitive blend mode. </p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>Computes the maximum factor by which a given transform can stretch any vector.</p> + <p>Formally, if M is the input matrix, this method will return the maximum value of |V * M| / |V| for all vectors V, where |.| denotes length. </p><strong>Note</strong>??Since this describes how M affects vectors (rather than points), the translation components (_31 and _32) of M are ignored.? + <p>The scale factor.</p> + + + <dd> <p>The input transform matrix.</p> </dd> + + + + + <p> Identifiers for properties of the {{YCbCr}} effect. </p> + + + + <p> Specifies the chroma subsampling of the input chroma image used by the {{YCbCr}} effect. </p> + + + + <p>Specifies the interpolation mode for the {{YCbCr}} effect.</p> + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + + + + + + + + + + <p> Specifies the appearance of the ink nib (pen tip) as part of an <strong>{{D2D1_INK_STYLE_PROPERTIES}}</strong> structure. </p> + + + + <p>Specifies the flip and rotation at which an image appears.</p> + + + <dd> <p>The orientation is unchanged.</p> </dd> + + + <dd> <p>The image is flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees.</p> </dd> + + + + + <p>Controls option flags for a new {{ID2D1ImageSource}} when it is created.</p> + <p> ? </p><p>{{D2D1_IMAGE_SOURCE_CREATION_OPTIONS_RELEASE_SOURCE}} causes the image source to not retain a reference to the source object used to create it. It can decrease the quality and efficiency of printing.</p> + + + <dd> <p>No options are used.</p> </dd> + + + <dd> <p>Indicates the image source should release its reference to the {{WIC}} bitmap source after it has initialized. By default, the image source retains a reference to the {{WIC}} bitmap source for the lifetime of the object to enable quality and speed optimizations for printing. This option disables that optimization. +</p> </dd> + + + <dd> <p>Indicates the image source should only populate subregions of the image cache on-demand. You can control this behavior using the <strong>EnsureCached</strong> and <strong>TrimCache</strong> methods. This options provides the ability to improve memory usage by only keeping needed portions of the image in memory. This option requires that the image source has a reference to the {{WIC}} bitmap source, and is incompatible with {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE}}.</p> </dd> + + + + + <p>Option flags controlling primary conversion performed by <strong>CreateImageSourceFromDxgi</strong>, if any.</p> + + + + <p>Option flags for transformed image sources.</p> + + + <dd> <p>No option flags.</p> </dd> + + + <dd> <p>Prevents the image source from being automatically scaled (by a ratio of the context {{DPI}} divided by 96) while drawn.</p> </dd> + + + + + <p>Specifies how to render gradient mesh edges.</p> + + + <dd> <p>Render this patch edge aliased. Use this value for the internal edges of your gradient mesh.</p> </dd> + + + <dd> <p>Render this patch edge antialiased. Use this value for the external (boundary) edges of your mesh.</p> </dd> + + + <dd> <p>Render this patch edge aliased and also slightly inflated. Use this for the internal edges of your gradient mesh when there could be t-junctions among patches. Inflating the internal edges mitigates seams that can appear along those junctions.</p> </dd> + + + + + <p>Specifies additional aspects of how a sprite batch is to be drawn, as part of a call to <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong>.</p> + + + + <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> + + + <dd> <p>Color bitmap glyph positions are snapped to the nearest pixel if the bitmap resolution matches that of the device context.</p> </dd> + + + <dd> <p>Color bitmap glyph positions are not snapped.</p> </dd> + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Properties of a transformed image source.</p> + + + <dd> <p>The orientation at which the image source is drawn.</p> </dd> + + + <dd> <p>The horizontal scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The vertical scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The interpolation mode used when the image source is drawn. This is ignored if the image source is drawn using the DrawImage method, or using an image brush.</p> </dd> + + + <dd> <p>Image sourc option flags.</p> </dd> + + + + + <p>Represents a point, radius pair that makes up part of a <strong>{{D2D1_INK_BEZIER_SEGMENT}}</strong>.</p> + + + + <p>Represents a Bezier segment to be used in the creation of an <strong>{{ID2D1Ink}}</strong> object. This structure differs from <strong>{{D2D1_BEZIER_SEGMENT}}</strong> in that it is composed of <strong>{{D2D1_INK_POINT}}</strong>s, which contain a radius in addition to x- and y-coordinates. </p> + + + + <p> Defines the general pen tip shape and the transform used in an <strong>{{ID2D1InkStyle}}</strong> object. </p> + + + + <p> Represents a tensor patch with 16 control points, 4 corner colors, and boundary flags. An {{ID2D1GradientMesh}} is made up of 1 or more gradient mesh patches. Use the <strong>GradientMeshPatch function</strong> or the <strong>GradientMeshPatchFromCoonsPatch function</strong> to create one. </p> + <p>The following image shows the numbering of control points on a tensor grid.</p> + + + + <p>Creates a color context from a simple color profile. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The simple color profile to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + <p> Represents a collection of style properties to be used by methods like <strong>{{ID2D1DeviceContext2::DrawInk}}</strong> when rendering ink. The ink style defines the nib (pen tip) shape and transform. </p> + + + + <p>Sets the transform to apply to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform to apply to this style?s nib shape. Note that the translation components of the transform matrix are ignored for the purposes of rendering.</p> </dd> + + + + + <p>Retrieves the transform to be applied to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the transform to be applied to this style's nib shape.</p> </dd> + + + + + <p>Sets the pre-transform nib shape for this style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The pre-transform nib shape to use in this style.</p> </dd> + + + + + <p>Retrieves the pre-transform nib shape for this style.</p> + <p>Returns the pre-transform nib shape for this style.</p> + + + + <p>Represents a single continuous stroke of variable-width ink, as defined by a series of Bezier segments and widths.</p> + + + + <p>Sets the starting point for this ink object. This determines where this ink object will start rendering.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The new starting point for this ink object.</p> </dd> + + + + + <p>Retrieves the starting point for this ink object.</p> + <p>The starting point for this ink object.</p> + + + + <p>Adds the given segments to the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of segments to be added to this ink object.</p> </dd> + + + <dd> <p>The number of segments to be added to this ink object.</p> </dd> + + + + + <p>Removes the given number of segments from the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of segments to be removed from the end of this ink object. Note that segmentsCount must be less or equal to the number of segments in the ink object.</p> </dd> + + + + + <p>Updates the specified segments in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to update.</p> </dd> + + + <dd> <p>A reference to the array of segment data to be used in the update.</p> </dd> + + + <dd> <p>The number of segments in this ink object that will be updated with new data. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Updates the last segment in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the segment data with which to overwrite this ink object's last segment. Note that if there are currently no segments in the ink object, SetSegmentsAtEnd will return an error.</p> </dd> + + + + + <p>Returns the number of segments in this ink object.</p> + <p>Returns the number of segments in this ink object.</p> + + + + <p>Retrieves the specified subset of segments stored in this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of retrieved segments.</p> </dd> + + + <dd> <p>The number of segments to retrieve. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Retrieves a geometric representation of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The world transform to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The flattening tolerance to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The geometry sink to which the geometry representation will be streamed.</p> </dd> + + + + + <p>Retrieve the bounds of the geometry, with an optional applied transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>The world transform to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of this ink object.</p> </dd> + + + + + <p>Represents a device-dependent representation of a gradient mesh composed of patches. Use the <strong>{{ID2D1DeviceContext2::CreateGradientMesh}} method</strong> to create an instance of {{ID2D1GradientMesh}}.</p> + + + + <p>Returns the number of patches that make up this gradient mesh.</p> + <p>Returns the number of patches that make up this gradient mesh.</p> + + + + <p>Returns a subset of the patches that make up this gradient mesh.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Index of the first patch to return.</p> </dd> + + + <dd> <p>A reference to the array to be filled with the patch data.</p> </dd> + + + <dd> <p>The number of patches to be returned.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p><strong>OfferResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully offered </li> <li><strong>{{E_INVALIDARG}}</strong> if a resource in the array or the priority is invalid </li> </ul> + + + + <p> Restores access to resources that were previously offered by calling <strong>OfferResources</strong>. </p> + <p> After you call <strong>OfferResources</strong> to offer one or more resources, +you must call <strong>TryReclaimResources</strong> before you can use those resources again. +You must check the value in the <strong>resourcesDiscarded</strong> to determine whether the resource?s content was discarded. +If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully reclaimed </li> <li><strong>{{E_INVALIDARG}}</strong> if the resources are invalid </li> </ul> + + + + <p>Produces 2D pixel data that has been sourced from {{WIC}}.</p> + <p> Create an an instance of {{ID2D1ImageSourceFromWic}} using <strong>{{ID2D1DeviceContext2::CreateImageSourceFromWic}}</strong>. </p> + + + + <p> Ensures that a specified region of the image source cache is populated. This method can be used to minimize glitches by performing expensive work to populate caches outside of a rendering loop. This method can also be used to speculatively load image data before it is needed by drawing routines. </p> + <p>This {{API}} loads image data into caches of image sources, if that data was not already cached. It does not trim pre-existing caches, if any. More areas within the cache can be populated than actually requested.</p><p> ? </p><p>The provided region must be constructed to include the scale with which the image source will subsequently be drawn. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, that should be populated in the cache. By default, this is the entire extent of the image.</p> </dd> + + + + + <p>This method trims the populated regions of the image source cache to just the specified rectangle.</p> + <p>The provided region must be constructed to include the scale at which the image source will be drawn at. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p> ? </p><p>This method will fail if on-demand caching was not requested when the image source was created.</p><p> ? </p><p>As with <strong>{{ID2D1Device::ClearResources}}</strong>, the caller can need to subsequently issue a {{D3D}} flush before memory usage is reduced.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, which should be preserved in the image source cache. Regions which are outside of the rectangle are evicted from the cache. By default, this is an empty rectangle, meaning that the entire image is evicted from the cache.</p> </dd> + + + + + <p>Retrieves the underlying bitmap image source from the Windows Imaging Component ({{WIC}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>On return contains the bitmap image source.</p> </dd> + + + + + <p>Represents an image source which shares resources with an original image source.</p> + + + + <p> Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p>A container for 3D lookup table data that can be passed to the LookupTable3D effect.</p><p>An {{ID2DLookupTable3D}} instance is created using <strong>{{ID2D1DeviceContext2::CreateLookupTable3D}}</strong> or {{ID2D1EffectContext1::CreateLookupTable3D}}.</p> + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Creates a new <strong>{{ID2D1Ink}}</strong> object that starts at the given point.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1InkStyle}}</strong> object, for use with ink rendering methods such as <strong>DrawInk</strong>.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1GradientMesh}}</strong> instance using the given array of patches.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates an image source object from a {{WIC}} bitmap source, while populating all pixel memory within the image source. The image is loaded and stored while using a minimal amount of memory.</p> + <p> This method creates an image source which can be used to draw the image. </p><p>This method supports images that exceed the maximum texture size. Large images are internally stored within a sparse tile cache. </p><p> This {{API}} supports the same set of pixel formats and alpha modes supported by <strong>CreateBitmapFromWicBitmap</strong>. If the {{GPU}} does not support a given pixel format, this method will return {{D2DERR_UNSUPPORTED_PIXEL_FORMAT}}. This method does not apply adjustments such as gamma or alpha premultiplication which affect the appearance of the image. </p><p>This method automatically selects an appropriate storage format to minimize {{GPU}} memory usage., such as using separate luminance and chrominance textures for {{JPEG}} images. </p><p>If the loadingOptions argument is {{NULL}}, {{D2D}} uses {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{WIC}} bitmap source to create the image source from.</p> </dd> + + + <dd> <p>Options for creating the image source. Default options are used if {{NULL}}.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + <p>Creates an image source from a set of {{DXGI}} surface(s). The {{YCbCr}} surface(s) are converted to {{RGBA}} automatically during subsequent drawing.</p> + <p> This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of {{DXGI}} formats and {{DXGI}} color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported: </p><table> <tr><th>Color Space Type</th><th>Surface Count(s)</th><th>Surface Format(s)</th></tr> <tr><td>{{DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709}}</td><td>1</td><td> Standard {{D2D}}-supported pixel formats: <ul> <li>{{DXGI_FORMAT_A8_UNORM}}</li> <li>{{DXGI_FORMAT_R8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8X8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>{{DXGI_FORMAT_R32G32B32A32_FLOAT}}</li> <li>{{DXGI_FORMAT_BC1_UNORM}}</li> <li>{{DXGI_FORMAT_BC2_UNORM}}</li> <li>{{DXGI_FORMAT_BC3_UNORM}}</li> </ul> </td></tr> <tr><td>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601}}</td><td>1, 2, 3</td><td> When Surface count is 1: <ul> <li>{{DXGI_FORMAT_AYUV}}</li> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> <li>{{DXGI_FORMAT_V408}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> <tr><td> {{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601}} <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020}}</p> </td><td>1,2,3</td><td> <p>When Surface count is 1: </p> <ul> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> </table><p>?</p><p>The {{GPU}} must also have sufficient support for a pixel format to be supported by {{D2D}}. To determine whether {{D2D}} supports a format, call IsDxgiFormatSupported.</p><p>This {{API}} converts {{YCbCr}} formats to sRGB using the provided color space type and options. {{RGBA}} data is assumed to be in the desired space, and {{D2D}} does not apply any conversion.</p><p> If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is {{NULL}}, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up). </p><p> If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another. </p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{DXGI}} surfaces to create the image source from.</p> </dd> + + + <dd> <p>The regions of the surfaces to create the image source from.</p> </dd> + + + <dd> <p>The number of surfaces provided; must be between one and three.</p> </dd> + + + <dd> <p>The color space of the input.</p> </dd> + + + <dd> <p>Options controlling color space conversions.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Returns the world bounds of a given gradient mesh.</p> + <p>The world bounds reflect the current {{DPI}}, unit mode, and world transform of the context. They indicate which pixels would be impacted by calling DrawGradientMesh with the given gradient mesh. +They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The gradient mesh whose world bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the gradient mesh, in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the device context using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the render target. If {{NULL}} is specified, the destination rectangle is {0, 0, w, h}, where w and h are the width and height of the metafile as reported by <strong>{{ID2D1GdiMetafile::GetBounds}}</strong>. </p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the metafile. If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>Creates an image source which shares resources with an original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The original image.</p> </dd> + + + <dd> <p>Properties for the source image.</p> </dd> + + + <dd> <p>Receives the new image source.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device1}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext2}}</strong> objects. </p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext2}}</strong> from a Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flush all device contexts that reference a given bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap, created on this device, for which all referencing device contexts will be flushed. </p> </dd> + + + + + <p>Returns the {{DXGI}} device associated with this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{DXGI}} device associated with this Direct2D device.</p> </dd> + + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device2}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device2}}</strong> object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink1}}</strong> interface. It also enables access to ink rendering and gradient mesh rendering.</p> + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the command sink using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the destination rectangle is the size of the target.</p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafile}} interface. It also enables accessing the metafile {{DPI}} and bounds.</p> + + + + <p>Gets the {{DPI}} reported by the metafile.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the horizontal {{DPI}} reported by the metafile.</p> </dd> + + + <dd> <p>Receives the vertical {{DPI}} reported by the metafile.</p> </dd> + + + + + <p>Gets the bounds of the metafile in source space in {{DIPs}}. This corresponds to the frame rect in an {{EMF}}/{{EMF}}+.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafileSink}} interface. It also enables access to metafile records.</p> + + + + <p>Provides access to metafile records, including their type, data, and flags.</p> + <p>For details on the {{EMF}} and {{EMF}}+ formats, please see Microsoft technical documents {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The type of metafile record being processed. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for a list of record types.</p> </dd> + + + <dd> <p>The data contained in this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record data layouts.</p> </dd> + + + <dd> <p>{{TThe}} size of the data pointed to by recordData. </p> </dd> + + + <dd> <p>The set of flags set for this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record flags.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Updates the properties of the specified sprites in this sprite batch. Providing a null value for any property will leave that property unmodified for that sprite. </p> + <p>Returns {{S_OK}} on success. Returns {{E_INVALIDARG}} if an invalid value was passed to the method. In this case, no sprites are modified by this call to SetSprites.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to update.</p> </dd> + + + <dd> <p>The number of sprites to update with new properties. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. </p> <p>Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the updated sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each updated sprite.</p> </dd> + + + + + <p>Retrieves the specified subset of sprites from this sprite batch. For the best performance, use nullptr for properties that you do not need to retrieve.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to retrieve.</p> </dd> + + + <dd> <p>The number of sprites to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the destination rectangles for the retrieved sprites.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the source rectangles for the retrieved sprites. </p> <p>The InfiniteRectU is returned for any sprites that were not assigned a source rectangle.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the colors to be applied to the retrieved sprites. </p> <p>The color {1.0f, 1.0f, 1.0f, 1.0f} is returned for any sprites that were not assigned a color.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the transforms to be applied to the retrieved sprites. </p> <p>The identity matrix is returned for any sprites that were not assigned a transform.</p> </dd> + + + + + <p>Retrieves the number of sprites in this sprite batch.</p> + <p>Returns the number of sprites in this sprite batch</p> + + + + <p>Removes all sprites from this sprite batch.</p> + <p>This method does not return a value.</p> + + + + <p>This interface performs all the same functions as the <strong>{{ID2D1DeviceContext2}}</strong> interface, plus it enables functionality for creating and drawing sprite batches.</p> + + + + <p>Creates a new, empty sprite batch. After creating a sprite batch, use <strong>{{ID2D1SpriteBatch::AddSprites}}</strong> to add sprites to it, then use <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong> to draw it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Renders all sprites in the given sprite batch to the device context using the specified drawing options.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device2}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext3}}</strong> objects.</p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext3}}</strong> from this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device3}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device3}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink2}}</strong> interface. It also enables access to sprite batch rendering.</p> + + + + <p>Renders part or all of the given sprite batch to the device context using the specified drawing options.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The index of the first sprite in the sprite batch to draw.</p> </dd> + + + <dd> <p>The number of sprites to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>This object supplies the values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> + + + + <p>Provides values to an {{SVG}} glyph for fill.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the area is painted. A null brush will cause the context-fill value to come from the <strong>defaultFillBrush</strong>. If the defaultFillBrush is also null, the context-fill value will be 'none'. To set the ?context-fill? value, this method uses the provided brush with its opacity set to 1. To set the ?context-fill-opacity? value, this method uses the opacity of the provided brush. </p> </dd> + + + + + <p>Returns the requested fill parameters.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + + + <p>Provides values to an {{SVG}} glyph for stroke properties. The brush with opacity set to 1 is used as the 'context-stroke'. The opacity of the brush is used as the 'context-stroke-opacity' value.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the stroke is painted. A null brush will cause the context-stroke value to be none.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dasharray' property. A null value will cause the stroke-dasharray to be set to 'none'.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p>Returns the number of dashes in the dash array.</p> + <p>Returns the number of dashes in the dash array.</p> + + + + <p>Returns the requested stroke parameters. Any parameters that are non-null will receive the value of the requested parameter. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the stroke is painted.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dasharray' property.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p> This interface performs all the same functions as the <strong>{{ID2D1DeviceContext3}}</strong> interface, plus it enables functionality for handling new types of color font glyphs. </p> + + + + <p>Creates an {{SVG}} glyph style object.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>On completion points to the created <strong>{{ID2D1SvgGlyphStyle}}</strong> object.</p> </dd> + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Draws a text layout object. If the layout is not subsequently changed, this can be more efficient than DrawText when drawing the same layout repeatedly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point, described in device-independent pixels, at which the upper-left corner of the text described by <em>textLayout</em> is drawn.</p> </dd> + + + <dd> <p>The formatted text to draw. Any drawing effects that do not inherit from <strong>{{ID2D1Resource}}</strong> are ignored. If there are drawing effects that inherit from <strong>{{ID2D1Resource}}</strong> that are not brushes, this method fails and the render target is put in an error state. </p> </dd> + + + <dd> <p>The brush used to paint the text.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font.</p> </dd> + + + <dd> <p> A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is <strong>{{D2D1_DRAW_TEXT_OPTIONS_NONE}}</strong>, which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. </p> </dd> + + + + + <p>Draws a color bitmap glyph run using one of the bitmap formats.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the format of the glyph image. Supported formats are {{DWRITE_GLYPH_IMAGE_FORMATS_PNG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_JPEG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_TIFF}}, or {{DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8}}. This method will result in an error if the color glyph run does not contain the requested format. </p> <p>Only one format can be specified at a time, combinations of flags are not valid input.</p> </dd> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Indicates the measuring method.</p> </dd> + + + <dd> <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> </dd> + + + + + <p>Draws a color glyph run that has the format of {{DWRITE_GLYPH_IMAGE_FORMATS_SVG}}.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>Values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Indicates the measuring method used for text layout.</p> </dd> + + + + + <p> Retrieves an image of the color bitmap glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The format for the glyph image. If there is no image data in the requested format for the requested glyph, this method will return an error. </p> </dd> + + + <dd> <p>The origin for the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the choice of which bitmap to use from the font. It also affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image. This input transform affects the choice of which bitmap to use from the font. It is also factored into the output glyphTransform.</p> </dd> + + + <dd> <p>Dots per inch along the x-axis.</p> </dd> + + + <dd> <p>Dots per inch along the y-axis.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion contains the retrieved glyph image.</p> </dd> + + + + + <p> Retrieves an image of the {{SVG}} glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Origin of the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph to retrieve.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image.</p> </dd> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion, contains the retrieved glyph image.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device3}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext4}}</strong> objects. </p> + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Sets the maximum capacity of the color glyph cache. </p> + <p>The color glyph cache is used to store color bitmap glyphs and {{SVG}} glyphs, enabling faster performance if the same glyphs are needed again. The capacity determines the amount of memory that {{D2D}} may use to store glyphs that the application does not already reference. If the application references a glyph using <strong>GetColorBitmapGlyphImage</strong> or <strong>GetSvgGlyphImage</strong>, after it has been evicted, this glyph does not count toward the cache capacity.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The maximum capacity of the color glyph cache.</p> </dd> + + + + + <p>Gets the maximum capacity of the color glyph cache.</p> + <p>Returns the maximum capacity of the color glyph cache in bytes.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device4}}</strong> objects.</p> + + + + <p> Creates an <strong>{{ID2D1Device4}}</strong> object. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink3}}</strong> interface. It also enables access to the new primitive blend mode, {{MAX}}, through the <strong>SetPrimitiveBlend2</strong> method.</p> + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Represents a color context to be used with the Color Management Effect.</p> + + + + + + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + + + + + + + <p>Creates a color context from a {{DXGI}} color space type. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The color space to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Returns the interior points for a gradient mesh patch based on the points defining a Coons patch.</p><strong>Note</strong>??<p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p>? + <p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p> + <p>This function does not return a value.</p> + + + + <p>Identifiers for properties of the Contrast effect.</p> + + + + <p>Indentifiers for properties of the {{RGB}} to Hue effect.</p> + + + + <p>Values for the <strong>{{D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE}}</strong> property of the {{RGB}} to Hue effect.</p> + + + + <p>Identifiers for properties of the Hue to {{RGB}} effect.</p> + + + + <p>Values for the <strong>{{D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE}}</strong> property of the Hue to {{RGB}} effect.</p> + + + + <p>Identifiers for properties of the Chroma-key effect.</p> + + + + <p>Identifiers for properties of the Emboss effect.</p> + + + + <p>Identifiers for properties of the Exposure effect.</p> + + + + <p>Identifiers for properties of the Posterize effect.</p> + + + + <p>Identifiers for properties of the Sepia effect.</p> + + + + <p>Identifiers for properties of the Sharpen effect.</p> + + + + <p>Identifiers for properties of the Straighten effect.</p> + + + + <p>Values for the <strong>{{D2D1_STRAIGHTEN_PROP_SCALE_MODE}}</strong> property of the Straighten effect.</p> + + + + <p>Identifiers for properties of the Temperature and Tint effect.</p> + + + + <p>Identifiers for properties of the Vignette effect.</p> + + + + <p>Identifiers for properties of the Edge Detection effect.</p> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_STRENGTH}} property is a float value modulating the response of the edge detection filter. A low strength value means that weaker edges will get filtered out, while a high value means stronger edges will get filtered out. The allowed range is 0.0 to 1.0. The default value is 0.5.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_BLUR_RADIUS}} property is a float value specifying the amount of blur to apply. Applying blur is used to remove high frequencies and reduce phantom edges. The allowed range is 0.0 to 10.0. The default value is 0.0 (no blur applied).</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_MODE}} property is a <strong>{{D2D1_EDGEDETECTION_MODE}}</strong> enumeration value which mode to use for edge detection. The default value is {{D2D1_EDGEDETECTION_MODE_SOBEL}}.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} property is a boolean value. Edge detection only applies to the {{RGB}} channels, the alpha channel is ignored for purposes of detecting edges. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is false, the output edges is fully opaque. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is true, the input opacity is preserved. The default value is false.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration value indicating the alpha mode of the input file. If the input is not opaque, this value is used to determine whether to unpremultiply the inputs. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information. The default value is {{D2D1_ALPHA_MODE_PREMULTIPLIED}}.</p> </dd> + + + + + <p>Values for the <strong>{{D2D1_EDGEDETECTION_PROP_MODE}}</strong> property of the Edge Detection effect.</p> + + + + <p>Identifiers for properties of the Highlights and Shadows effect.</p> + + + + <p>Values for the <strong>{{D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA}}</strong> property of the Highlights and Shadows effect.</p> + + + + <p>Identifiers for the properties of the 3D Lookup Table effect.</p> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_LUT}} property is a reference to an <strong>{{ID2D1LookupTable3D}}</strong> object. The default value is null.</p> </dd> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> value indicating the alpha mode of the input file. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information.</p> </dd> + + + + + <p>This effect adjusts the opacity of an image by multiplying the alpha channel of the input by the specified opacity value. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Opacity}}.</p> + + + + <p>This effect combines two images by adding weighted pixels from input images. It has two inputs, named Destination and Source.</p><p>The cross fade formula is <strong>output = weight * Destination + (1 - weight) * Source</strong>.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1CrossFade}}.</p> + + + + <p>This effect tints the source image by multiplying the source image by the specified color. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Tint}}.</p> + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Interface for all {{SVG}} elements.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + <p>Interface describing an {{SVG}} points value in a polyline or polygon element.</p> + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Used with <strong>{{ID3D11On12Device::CreateWrappedResource}}</strong> to override flags that would be inferred by the resource properties or heap properties, including bind flags, misc flags, and {{CPU}} access flags. </p> + <p> Use this structure with <strong>CreateWrappedResource</strong>. </p> + + + + <p>Handles the creation, wrapping and releasing of {{D3D11}} resources for Direct3D 11on12.</p> + + + + <p> This method creates {{D3D11}} resources for use with {{D3D}} 11on12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to an already-created {{D3D12}} resource or heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D11_RESOURCE_FLAGS}}</strong> structure that enables an application to override flags that would be inferred by the resource/heap properties. The {{D3D11_RESOURCE_FLAGS}} structure contains bind flags, misc flags, and {{CPU}} access flags. </p> </dd> + + + <dd> <p> The use of the resource on input, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The use of the resource on output, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the wrapped resource interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the wrapped resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a wrapped resource. </p> </dd> + + + <dd> <p> After the method returns, points to the newly created wrapped {{D3D11}} resource or heap. </p> </dd> + + + + + <p> Releases {{D3D11}} resources that were wrapped for {{D3D}} 11on12. </p> + <p> Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until <strong>{{ID3D11On12Device::AcquireWrappedResources}}</strong> is called. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Acquires {{D3D11}} resources for use with {{D3D}} 11on12. Indicates that rendering to the wrapped resources can begin again. </p> + <p> This method marks the resources as "acquired" in hazard tracking. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing {{D3D12}} device to use for {{D3D11}} interop. </p> + <p> The function signature {{PFN_D3D11ON12_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes that are documented for <strong>{{D3D11CreateDevice}}</strong>. See Direct3D 12 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> Specifies a pre-existing {{D3D12}} device to use for {{D3D11}} interop. May not be {{NULL}}. </p> </dd> + + + <dd> <p> One or more bitwise {{OR}}'ed flags from <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>. These are the same flags as those used by <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. Specifies which runtime layers to enable. <em>Flags</em> must be compatible with device flags, and its <em>NodeMask</em> must be a subset of the <em>NodeMask</em> provided to the present {{API}}. </p> </dd> + + + <dd> <p> An array of any of the following: </p> <ul> <li>{{D3D_FEATURE_LEVEL_12_1}}</li> <li>{{D3D_FEATURE_LEVEL_12_0}}</li> <li>{{D3D_FEATURE_LEVEL_11_1}}</li> <li>{{D3D_FEATURE_LEVEL_11_0}}</li> <li>{{D3D_FEATURE_LEVEL_10_1}}</li> <li>{{D3D_FEATURE_LEVEL_10_0}}</li> <li>{{D3D_FEATURE_LEVEL_9_3}}</li> <li>{{D3D_FEATURE_LEVEL_9_2}}</li> <li>{{D3D_FEATURE_LEVEL_9_1}}</li> </ul> <p> The first feature level which is less than or equal to the {{D3D12}} device's feature level will be used to perform {{D3D11}} validation. Creation will fail if no acceptable feature levels are provided. Providing {{NULL}} will default to the {{D3D12}} device's feature level. </p> </dd> + + + <dd> <p> The size of the feature levels array, in bytes. </p> </dd> + + + <dd> <p> An array of unique queues for {{D3D11On12}} to use. Valid queue types: 3D command queue. </p> </dd> + + + <dd> <p> The size of the command queue array, in bytes. </p> </dd> + + + <dd> <p> Which node of the {{D3D12}} device to use. Only 1 bit may be set. </p> </dd> + + + <dd> <p> Pointer to the returned <strong>{{ID3D11Device}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned <strong>{{ID3D11DeviceContext}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned feature level. May be {{NULL}}. </p> </dd> + + + + + <p>Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition.</p> + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once. </p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle (<strong>{{HWND}}</strong>).</p> + <p>A Microsoft DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns <strong>{{DCOMPOSITION_ERROR_ACCESS_DENIED}}</strong>. </p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context (<strong>{{HDC}}</strong>) returned by the <strong>GetDC</strong> function, or by calls to Microsoft DirectX <strong>Present</strong> methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The <em>topmost</em> parameter determines whether child windows clip the visual tree. </p><p> Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window's visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDComposition::VirtualSurfaceTrim}}</strong> method. </p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>This method enables an application to use a shared composition surface in a composition tree. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the <em>surface</em> reference in calls to the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. +</p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the <strong>{{DWMWA_CLOAK}}</strong> flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. For more information, see How to animate the bitmap of a layered child window and DirectComposition layered child window sample.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying <strong>{{WS_EX_LAYERED}}</strong> when creating the window with the <strong>CreateWindowEx</strong> function or by setting <strong>{{WS_EX_LAYERED}}</strong> via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of ?{{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Determines whether the DirectComposition device object is still valid.</p> + <p> If the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) device is lost, the DirectComposition device associated with the {{DXGI}} device is also lost. When it detects a lost device, DirectComposition sends the <strong>{{WM_PAINT}}</strong> message to all windows that are composing DirectComposition content using the lost device. An application should call <strong>CheckDeviceState</strong> in response to each <strong>{{WM_PAINT}}</strong> message to ensure that the DirectComposition device object is still valid. The application must take steps to recover content if the device object becomes invalid. Steps include creating new {{DXGI}} and DirectComposition devices, and recreating all content. (It?s not possible to create just a new {{DXGI}} device and associate it with the existing DirectComposition device.) The system ensures that the device object remains valid between <strong>{{WM_PAINT}}</strong> messages. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>{{TRUE}} if the DirectComposition device object is still valid; otherwise {{FALSE}}.</p> </dd> + + + + + <p>Represents a binding between a Microsoft DirectComposition visual tree and a destination on top of which the visual tree should be composed. </p> + + + + <p>Sets a visual object as the new root object of a visual tree.</p> + <p>A visual can be either the root of a single visual tree, or a child of another visual, but it cannot be both at the same time. This method fails if the <em>visual</em> parameter is already the root of another visual tree, or is a child of another visual.</p><p>If <em>visual</em> is {{NULL}}, the visual tree is empty. If there was a previous non-{{NULL}} root visual, that visual becomes available for use as the root of another visual tree, or as a child of another visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The visual object that is the new root of this visual tree. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a Microsoft DirectComposition visual. </p> + + + + <p>Changes the value of the OffsetX property of this visual. The OffsetX property specifies the new offset of the visual along the x-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetX property of a visual transforms the coordinate system of the entire visual subtree that is rooted at that visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetX property. In other words, the effect of setting the Transform property and the OffsetX property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetX value as <em>offsetX</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetX}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetX property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the x-axis, in pixels.</p> </dd> + + + + + <p>Changes the value of the OffsetY property of this visual. The OffsetY property specifies the new offset of the visual along the y-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetY property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetY property. In other words, the effect of setting the Transform property and the OffsetY property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetY value as <em>offsetY</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetY}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetY property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the y-axis, in pixels.</p> </dd> + + + + + Sets the Transform property of this visual. The Transform property specifies a 2D transform used to modify the coordinate system of this visual. The property can specify either a 3-by-2 transform matrix or a transform object. + + + + <p>Sets the TransformParent property of this visual. The TransformParent property establishes the coordinate system relative to which this visual is composed.</p> + <p>The coordinate system of a visual is modified by the OffsetX, OffsetY, and Transform properties. Normally, these properties define the coordinate system of a visual relative to its immediate parent. This method specifies the visual relative to which the coordinate system for this visual is based. The specified visual must be an ancestor of the current visual. If it is not an ancestor, the coordinate system is based on this visual's immediate parent, just as if the TransformParent property were set to {{NULL}}. Because visuals can be reparented, this property can take effect again if the specified visual becomes an ancestor of the target visual through a reparenting operation. </p><p>If the <em>visual</em> parameter is {{NULL}}, the coordinate system is always transformed relative to the visual's immediate parent. This is the default behavior if this method is not used. </p><p>This method fails if the <em>visual</em> parameter is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual that establishes the base coordinate system for this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the Effect property of this visual. The Effect property modifies how the subtree that is rooted at this visual is blended with the background, and can apply a 3D perspective transform to the visual. </p> + <p>This method creates an implicit off-screen surface to which the subtree that is rooted at this visual is composed. The surface is used as one of the inputs to the specified effect. The output of the effect is composed directly to the composition target. Some effects also use the composition target as another implicit input. This is typically the case for compositional or blend effects such as opacity, where the composition target is considered to be the "background." In that case, any visuals that are "behind" the current visual are included in the composition target when the current visual is rendered and are considered to be the "background" that this visual composes to. </p><p>If this visual is not the root of a visual tree and one of its ancestors also has an effect applied to it, the off-screen surface created by the closest ancestor is the composition target to which this visual's effect is composed. Otherwise, the composition target is the root composition target. As a consequence, the background for compositional and blend effects includes only the visuals up to the closest ancestor that itself has an effect. Conversely, any effects applied to visuals under the current visual use the newly created off-screen surface as the background, which may affect how those visuals ultimately compose on top of what the end user perceives as being "behind" those visuals. </p><p>If the <em>effect</em> parameter is {{NULL}}, no bitmap effect is applied to this visual. Any previous effects that were associated with this visual are removed. The off-screen surface is also removed and the visual subtree is composed directly to the parent composition target, which may also affect how compositional or blend effects under this visual are rendered. </p><p>This method fails if <em>effect</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to an effect object. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the BitmapInterpolationMode property, which specifies the mode for Microsoft DirectComposition to use when interpolating pixels from bitmaps that are not axis-aligned or drawn exactly at scale. </p> + <p>The interpolation mode affects how a bitmap is composed when it is transformed such that there is no one-to-one correspondence between pixels in the bitmap and pixels on the screen. </p><p>By default, a visual inherits the interpolation mode of the parent visual, which may inherit the interpolation mode of its parent visual, and so on. A visual uses the default interpolation mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If no visuals set the interpolation mode, the default for the entire visual tree is nearest neighbor interpolation, which offers the lowest visual quality but the highest performance. </p><p>If the <em>interpolationMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, this visual's bitmap is composed with the specified interpolation mode, and this mode becomes the new default mode for the children of this visual. That is, if the interpolation mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, the bitmaps of the child visuals are composed using the interpolation mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + + + <p>Sets the BorderMode property, which specifies how to compose the edges of bitmaps and clips associated with this visual, or with visuals in the subtree rooted at this visual.</p> + <p>The border mode affects how the edges of a bitmap are composed when the bitmap is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. It also affects how content is clipped at the corners of a clip that has rounded corners, and at the edge of a clip that is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. </p><p>By default, a visual inherits the border mode of its parent visual, which may inherit the border mode of its parent visual, and so on. A visual uses the default border mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>. If no visuals set the border mode, the default for the entire visual tree is aliased rendering, which offers the lowest visual quality but the highest performance. </p><p>If the <em>borderMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, this visual's bitmap and clip are composed with the specified border mode. In addition, this border mode becomes the new default for the children of the current visual. That is, if the border mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, the bitmaps and clips of the child visuals are composed using the border mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The border mode to use.</p> </dd> + + + + + Sets the Clip property of this visual to the specified rectangular region or clip object. The Clip property restricts the rendering of the visual subtree that is rooted at this visual to a rectangular region. + + + + <p>Sets the Content property of this visual to the specified bitmap or window wrapper.</p> + <p> The <em>content</em> parameter must point to one of the following:</p><ul> <li>An object that implements the <strong>{{IDCompositionSurface}}</strong> interface.</li> <li>An object that implements the <strong>{{IDXGISwapChain1}}</strong> interface.</li> <li>A wrapper object that is returned by the <strong>CreateSurfaceFromHandle</strong> or <strong>CreateSurfaceFromHwnd</strong> method. +</li> </ul><p>The new content replaces any content that was previously associated with the visual. If the <em>content</em> parameter is {{NULL}}, the visual has no associated content.</p><p>A visual can be associated with a bitmap object or a window wrapper. A bitmap is either a Microsoft DirectX swap chain or a Microsoft DirectComposition surface.</p><p>A window wrapper is created with the <strong>CreateSurfaceFromHwnd</strong> method and is a stand-in for the rasterization of another window, which must be a top-level window or a layered child window. A window wrapper is conceptually equivalent to a bitmap that is the size of the target window on which the contents of the window are drawn. The contents include the target window's child windows (layered or otherwise), and any DirectComposition content that is drawn in the child windows. </p><p>A DirectComposition surface wrapper is created with the <strong>CreateSurfaceFromHandle</strong> method and is a reference to a swap chain. An application might use a surface wrapper in a cross-process scenario where one process creates the swap chain and another process associates the bitmap with a visual.</p><p>The bitmap is always drawn at position (0,0) relative to the visual's coordinate system, although the coordinate system is directly affected by the OffsetX, OffsetY, and Transform properties, as well as indirectly by the transformations on ancestor visuals. The bitmap of a visual is always drawn behind the children of that visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The object that is the new content of this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Adds a new child visual to the children list of this visual.</p> + <p>Child visuals are arranged in an ordered list. The contents of a child visual are drawn in front of (or above) the contents of its parent visual, but behind (or below) the contents of its children.</p><p>The <em>referenceVisual</em> parameter must be an existing child of the parent visual, or it must be {{NULL}}. The <em>insertAbove</em> parameter indicates whether the new child should be rendered immediately above the reference visual in the Z order, or immediately below it.</p><p>If the <em>referenceVisual</em> parameter is {{NULL}}, the specified visual is rendered above or below all children of the parent visual, depending on the value of the <em>insertAbove</em> parameter. If <em>insertAbove</em> is {{TRUE}}, the new child visual is above no sibling, therefore it is rendered below all of its siblings. Conversely, if <em>insertAbove</em> is {{FALSE}}, the visual is below no sibling, therefore it is rendered above all of its siblings.</p><p>The visual specified by the <em>visual</em> parameter cannot be either a child of a single other visual, or the root of a visual tree that is associated with a composition target. If <em>visual</em> is already a child of another visual, <strong>AddVisual</strong> fails. The child visual must be removed from the children list of its previous parent before adding it to the children list of the new parent. If <em>visual</em> is the root of a visual tree, the visual must be dissociated from that visual tree before adding it to the children list of the new parent. To dissociate the visual from a visual tree, call the <strong>{{IDCompositionTarget::SetRoot}}</strong> method and specify either a different visual or {{NULL}} as the <em>visual</em> parameter.</p><p>A child visual need not have been created by the same <strong>{{IDCompositionDevice}}</strong> interface as its parent. When visuals from different devices are combined in the same visual tree, Microsoft DirectComposition composes the tree as it normally would, except that changes to a particular visual take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called on the device object that created the visual. The ability to combine visuals from different devices enables multiple threads to create and manipulate a single visual tree while maintaining independent devices that can be used to commit changes asynchronously</p><p>This method fails if <em>visual</em> or <em>referenceVisual</em> is an invalid reference, or if the visual referenced by the <em>referenceVisual</em> parameter is not a child of the parent visual. These interfaces cannot be custom implementations; only interfaces created by DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to add. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} to place the new child visual in front of the visual specified by the <em>referenceVisual</em> parameter, or {{FALSE}} to place it behind <em>referenceVisual</em>.</p> </dd> + + + <dd> <p>The existing child visual next to which the new visual should be added.</p> </dd> + + + + + <p>Removes a child visual from the children list of this visual.</p> + <p>The child visual is removed from the list of children. The order of the remaining child visuals is not changed.</p><p>This method fails if <em>visual</em> is not a child of the parent visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to remove from the children list. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Removes all visuals from the children list of this visual.</p> + <p>This method can be called even if this visual has no children. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the blending mode for this visual.</p> + <p>The composite mode determines how visual's bitmap is blended with the screen. By default, the visual is blended with "source over" semantics; that is, the colors are blended with per-pixel transparency.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The blending mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Represents a 2D transformation that can be used to modify the coordinate space of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform}}</strong> interface is an abstract interface that represents a 2D affine transformation. Transformations affect the entire visual subtree that is rooted at the visual that the transform is associated with. A transform object can be associated with multiple visuals. When a transform object is modified, all affected visuals are recomposed to reflect the change.</p><p>Transforms operate by modifying the coordinate system for all rendering operations on a visual. For example, ordinarily a bitmap that is associated with a visual draws at position (0,0) and extends the full width and height of the bitmap. If a translation transform is applied, the bitmap draws at a position that is offset by that transform. If a scale transform is applied, the extent covered by the bitmap is affected by the scale transform. More than one transform can be simultaneously applied to a visual by using the <strong>{{IDCompositionDevice::CreateTransformGroup}}</strong> interface.</p> + + + + <p>Represents a 3D transformation effect that can be used to modify the rasterization of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform3D}}</strong> interface is an abstract interface that represents a 3D perspective transformation effect. A 3D transform object can be associated with multiple visuals and multiple effect groups. When a 3D transform object is modified, all affected visuals are recomposed to reflect the change.</p> + + + + <p>Represents a 2D transformation that affects only the offset of a visual along the x-axis and y-axis.</p> + <p>A translation transform represents the following 3-by-2 matrix:</p><p></p><p>The effect is simply to offset the coordinate system by <em>x</em> and <em>y</em>.</p> + + + + <p>Changes the value of the OffsetX property of a 2D translation transform. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method perfoms an affine transformation, which moves every point by a fixed distance in the same direction. It is similar to shifting the origin of the coordinate space. </p><p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the OffsetX property was previously animated, this method removes the animation and sets the OffsetX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The distance to translate along the x-axis, in pixels.</p> </dd> + + + + + Changes or animates the value of the OffsetY property of a 2D translation transform. The OffsetY property specifies the translation along the y-axis. + + + + <p>Represents a 3D transformation that affects the offset of a visual along the x-axis, y-axis, and z-axis. </p> + <p>A 3D translation transform represents the following 4-by-4 matrix: </p><p></p><p> The effect is to offset the blending position of the visual's subtree by <em>x</em>, <em>y</em>, and <em>z</em>.</p> + + + + <p>Animates the value of the OffsetX property of a 3D translation transform effect. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetX property unless this method is called again. If the OffsetX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetY property of a 3D translation transform effect. The OffsetY property specifies the distance to translate along the y-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetY property unless this method is called again. If the OffsetY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetZ property of a 3D translation transform effect. The OffsetZ property specifies the distance to translate along the z-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetZ property unless this method is called again. If the OffsetZ property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetZ property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Animates the value of the ScaleX property of a 2D scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 2D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the ScaleZ property of a scale transform. The ScaleZ property specifies the scale factor along the z-axis. + + + + <p>Animates the value of the ScaleX property of a scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 3D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the ScaleZ property of a 3D scale transform. The ScaleZ property specifies the scale factor along the z-axis.</p> + <p>This method fails if the <em>scaleZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleZ property was previously animated, this method removes the animation and sets the ScaleZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the CenterX property of a 3D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterX property was previously animated, this method removes the animation and sets the CenterX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new x-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 3D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Changes the value of the CenterZ property of a 3D scale transform. The CenterZ property specifies the z-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Represents a 2D transformation that affects the rotation of a visual around the z-axis. The coordinate system is rotated around the specified center point. </p> + <p>A rotate transform represents the following 3-by-3 matrix:</p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise, and to apply the corresponding translation such that the center point does not move.</p> + + + + <p>Animates the value of the Angle property of a 2D rotation transform. The Angle property specifies the rotation angle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterY property of a 2D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a 3D transformation that affects the rotation of a visual along an arbitrary axis in 3D space. The coordinate system is rotated around the specified center point. </p> + <p>A 3D rotate transform represents the following 4-by-4 matrix:</p><p></p><p>where the <em>offsetX</em>, <em>offsetY</em>, and <em>offsetZ</em> values of the matrix are the following: </p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise around the specified axis, and to apply the corresponding translation such that the center point does not move.</p><p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p><p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p> + + + + <p>Animates the value of the Angle property of a 3D rotation transform. The Angle property specifies the rotation angle. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected 3D transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the AxisX property of a 3D rotation transform. The AxisX property specifies the x-coordinate for the axis vector of rotation. The default value is zero. + + + + <p>Changes the value of the AxisY property of a 3D rotation transform. The AxisY property specifies the y-coordinate for the axis vector of rotation. The default value is zero.</p> + <p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p><p>This method fails if the <em>axisY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AxisY property was previously animated, this method removes the animation and sets the AxisY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate for the axis vector of rotation. </p> </dd> + + + + + Changes or animates the value of the AxisZ property of a 3D rotation transform. The AxisZ property specifies the z-coordinate for the axis vector of rotation. The default value is 1.0. + + + + Changes or animates the value of the CenterX property of a 3D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed. The default value is zero. + + + + <p>Animates the value of the CenterY property of a 3D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterZ property of a 3D rotation transform. The CenterZ property specifies the z-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Animates the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the AngleX property unless this method is called again. If the AngleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that represents how the value of the AngleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method fails if the <em>angleX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleX property was previously animated, this method removes the animation and sets the AngleX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the x-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Changes the value of the AngleY property of a 2D skew transform. The AngleY property specifies the skew angle along the y-axis.</p> + <p>This method fails if the <em>angleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleY property was previously animated, this method removes the animation and sets the AngleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the y-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D skew transform. The CenterX property specifies the x-coordinate of the point about which the skew is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D skew transform. The CenterY property specifies the y-coordinate of the point about which the skew is performed.</p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + <p>Represents an arbitrary affine 2D transformation defined by a 3-by-2 matrix.</p><p></p> + + + + <p>Changes all values of the matrix of this 2D transform.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 2D transform.</p> </dd> + + + + + <p>Animates the value of one element of the matrix of this 2D transform.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the element unless this method is called again. If the element was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 2, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 1, inclusive.</p> </dd> + + + <dd> <p>An animation that represents how the value of the specified element changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents an arbitrary 3D transformation defined by a 4-by-4 matrix.</p><p></p> + <p>A 3D matrix transform represents the following 4-by-4 matrix:</p><p></p><p> The application can set any of the values in the first three columns. Note that the fourth column is padded to allow for matrix concatenation. </p> + + + + <p>Changes all values of the matrix of this 3D transformation effect.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 3D transformation effect.</p> </dd> + + + + + <p>Changes the value of one element of the matrix of this 3D transform.</p> + <p>This method fails if the <em>value</em> parameter is NaN, positive infinity, or negative infinity.</p><p>If the specified element was previously animated, this method removes the animation and sets the element to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The new value of the specified element.</p> </dd> + + + + + <p>Represents a bitmap effect that modifies the rasterization of a visual's subtree. </p> + <p><strong>{{IDCompositionEffect}}</strong> is an abstract interface that represents a bitmap effect. An effect applies to the entire visual subtree rooted at the visual that the effect is associated with. An effect object can be associated with multiple visuals. When an effect object is modified, all affected visuals are recomposed to reflect the change. </p><p>More than one effect can be simultaneously applied to a visual by using the <strong>{{IDCompositionEffectGroup}}</strong> interface.</p> + + + + <p>Represents a group of bitmap effects that are applied together to modify the rasterization of a visual's subtree. </p> + + + + <p>Changes the value of the Opacity property.</p> + <p>The opacity is interpreted as completely transparent for all values less than or equal to 0, and as completely opaque for all values greater than or equal to 1. All values between 0 and 1 represent partial opacity. </p><p>This method fails if the <em>opacity</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the Opacity property was previously animated, this method removes the animation and sets the Opacity property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new value of the Opacity property.</p> </dd> + + + + + <p>Sets the 3D transformation effect object that modifies the rasterization of the visuals that this effect group is applied to.</p> + <p>This method fails if <em>transform3D</em> is an invalid reference, or if the reference was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this effect group. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p><p>If the <em>transform3D</em> parameter is {{NULL}}, the effect group does not apply any perspective transformations to the visuals. Setting the transform to {{NULL}} is equivalent to setting the transform to an <strong>{{IDCompositionMatrixTransform3D}}</strong> object where the specified matrix is the identity matrix. However, an application should use a {{NULL}} transform whenever possible because it is slightly faster. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>Pointer to an <strong>{{IDCompositionTransform3D}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a clip object that is used to restrict the rendering of a visual subtree to a rectangular area. </p> + + + + <p>Represents a clip object that restricts the rendering of a visual subtree to the specified rectangular region. Optionally, the clip object may have rounded corners specified.</p> + + + + <p>Animates the value of the Left property of a clip rectangle. The Left property specifies the x-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Left property unless this method is called again. If the Left property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Left property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Top property of a clip rectangle. The Top property specifies the y-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Top property unless this method is called again. If the Top property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Top property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Right property of a clip rectangle. The Right property specifies the x-coordinate of the lower-right corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Right property unless this method is called again. If the Right property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Right property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the Bottom property of a clip object. The Bottom property specifies the y-coordinate of the lower-right corner of the clip rectangle. </p> + <p> This method fails if the <em>bottom</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the Bottom property was previously animated, this method removes the animation and sets the Bottom property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the Bottom property, in pixels. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusX property of this clip. The TopLeftRadiusX property specifies the x radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the x radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusY property of this clip. The TopLeftRadiusY property specifies the y radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the TopRightRadiusX property of this clip. The TopRightRadiusX property specifies the x radius of the ellipse that rounds the top-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the TopRightRadiusY property of this clip. The TopRightRadiusY property specifies the y radius of the ellipse that rounds the top-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + Changes or animates the value of the BottomLeftRadiusX property of this clip. The BottomLeftRadiusX property specifies the x radius of the ellipse that rounds the lower-left corner of the clip. + + + + <p>Changes the value of the BottomLeftRadiusY property of this clip. The BottomLeftRadiusY property specifies the y radius of the ellipse that rounds the lower-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the BottomRightRadiusX property of this clip. The BottomRightRadiusX property specifies the x radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the BottomRightRadiusY property of this clip. The BottomRightRadiusY property specifies the y radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Marks the end of drawing on this Microsoft DirectComposition surface object.</p> + <p>This method completes an update that was begun by a previous call to the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. After this method returns, the application can start another update on the same surface object or on a different one. </p><p>If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> before calling <strong>{{IDCompositionSurface::EndDraw}}</strong> for a surface with a pending update, that update is not processed by that Commit call. The update only takes effect on screen after the application calls <strong>{{IDCompositionSurface::EndDraw}}</strong> followed by the {{IDCompositionDevice2::Commit}} method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Suspends the drawing on this Microsoft DirectComposition surface object.</p> + <p>Because only one surface can be open for drawing at a time, calling <strong>SuspendDraw</strong> allows the user to call <strong>{{IDCompositionSurface::BeginDraw}}</strong> on a different surface. Drawing to this surface can be resumed by calling <strong>{{IDCompositionSurface::ResumeDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Resumes drawing on this Microsoft DirectComposition surface object.</p> + <p> This method allows the surface update to continue unless there are other surfaces that have active, unsuspended draws.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Scrolls a rectangular area of a Microsoft DirectComposition logical surface.</p> + <p>This method allows an application to blt/copy a sub-rectangle of a DirectComposition surface object. This avoids re-rendering content that is already available. </p><p>The <em>scrollRect</em> rectangle must be contained in the boundaries of the surface. If the <em>scrollRect</em> rectangle goes outside the bounds of the surface, this method fails. </p><p>The bits copied by the scroll operation (source) are defined by the intersection of the <em>scrollRect</em> and <em>clipRect</em> rectangles. </p><p>The bits shown on the screen (destination) are defined by the intersection of the offset source rectangle and <em>clipRect</em>. </p><p>Scroll operations can only be called before calling <strong>BeginDraw</strong> or after calling <strong>EndDraw</strong>. Suspended or resumed surfaces are not candidates for scrolling because they are still being updated. </p><p>The application is responsible for ensuring that the scrollable area for an <strong>{{IDCompositionVirtualSurface}}</strong> is limited to valid pixels. The behavior for invalid pixels in the <em>scrollRect</em> is undefined. </p><p>Virtual surface sub-rectangular areas that were discarded by a trim or a resize operation can't be scrolled even if the trim or resize is applied in the same batch. <strong>Trim</strong> and <strong>Resize</strong> are applied immediately. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The rectangular area of the surface to be scrolled, relative to the upper-left corner of the surface. If this parameter is {{NULL}}, the entire surface is scrolled.</p> </dd> + + + <dd> <p>The <em>clipRect</em> clips the destination (<em>scrollRect</em> after offset) of the scroll. +The only bitmap content that will be scrolled are those that remain inside the clip rectangle after the scroll is completed.</p> </dd> + + + <dd> <p>The amount of horizontal scrolling, in pixels. Use positive values to scroll right, and negative values to scroll left.</p> </dd> + + + <dd> <p>The amount of vertical scrolling, in pixels. Use positive values to scroll down, and negative values to scroll up.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Discards pixels that fall outside of the specified trim rectangles.</p> + <p>A virtual surface might not have enough storage for every pixel in the surface. An application instructs the composition engine to allocate memory for the surface by calling the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method, and to release memory for the surface by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method. The array of rectangles represents the regions of the virtual surface that should remain allocated after this method returns. Any pixels that are outside the specified set of rectangles are no longer used for texturing, and their memory may be reclaimed. </p><p>If the <em>count</em> parameter is zero, no pixels are kept, and all of the memory allocated for the virtual surface may be reclaimed. The <em>rectangles</em> parameter can be {{NULL}} only if the <em>count</em> parameter is zero. This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of rectangles to keep.</p> </dd> + + + <dd> <p>The number of rectangles in the <em>rectangles</em> array.</p> </dd> + + + + + <p>Represents a filter effect.</p><p>{{IDCompositionFilterEffect}} exposes a subset of Direct2D's image effects through Direction Composition for use in {{CSS}} filters in the browser platform.</p> + + + + <p>Sets the the input at an index to the specified filter effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the index the to apply the filter effect at.</p> </dd> + + + <dd> <p>The filter effect to apply. The following effects are available: </p> <ul> <li> <strong>{{IDCompositionAffineTransform2DEffect}}</strong> </li> <li> <strong>{{IDCompositionArithmeticCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionBlendEffect}}</strong> </li> <li> <strong>{{IDCompositionBrightnessEffect}}</strong> </li> <li> <strong>{{IDCompositionColorNatrixEffect}}</strong> </li> <li> <strong>{{IDCompositionCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionFloodEffect}}</strong> </li> <li> <strong>{{IDCompositionGaussianBlurEffect}}</strong> </li> <li> <strong>{{IDCompositionHueRotationEffect}}</strong> </li> <li> <strong>{{IDCompositionLinearTransferRffect}}</strong> </li> <li> <strong>{{IDCompositionSaturationRffect}}</strong> </li> <li> <strong>{{IDCompositionShadowEffect}}</strong> </li> <li> <strong>{{IDCompositionTableTransferEffect}}</strong> </li> <li> <strong>{{IDCompositionTurbulenceEffect}}</strong> </li> </ul> </dd> + + + <dd> <p>Flags to apply to the filter effect. </p> </dd> + + + + + <p></p> + + + + <p>Sets the amount of blur to be applied to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. A value of zero {{DIPs}} disables this effect entirely. </p> </dd> + + + + + <p>Sets the mode used to calculate the border of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode used to calculate the border of the image.</p> </dd> + + + + + <p>The brightness effect controls the brightness of the image.</p> + + + + <p>Sets the upper portion of the brightness transfer curve. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The upper portion of the brightness transfer curve. The white point adjusts the appearance of the brighter portions of the image. +This vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Specifies the lower portion of the brightness transfer curve for the brightness effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The lower portion of the brightness transfer curve. The black point adjusts the appearance of the darker portions of the image. The vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Sets the x value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the white point. This value must be between 0 and 1.</p> </dd> + + + + + <p>Sets the y value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the white point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the x value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the black point.</p> </dd> + + + + + <p>Sets the y value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the black point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p>Sets the matrix used by the effect to multiply the {{RGBA}} values of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The matrix used by the effect to multiply the {{RGBA}} values of the image. The matrix is column major and is applied as shown in the following equation: </p></dd> + + + + + <p>Sets an element of the color matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>An animation that represents how the element value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the alpha mode of the output for the color matrix effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The alpha mode of the output for the color matrix effect.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p> The shadow effect is used to generate a shadow from the alpha channel of an image. The shadow is more opaque for higher alpha values and more transparent for lower alpha values. You can set the amount of blur and the color of the shadow. </p> + + + + <p>Sets the amount of blur to be applied to the alpha channel of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the alpha channel of the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. </p> </dd> + + + + + <p>Sets color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The color of the shadow.</p> </dd> + + + + + <p>Sets the red value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the red value for the color of the shadow changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the green value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The green value for the color of the shadow.</p> </dd> + + + + + <p>Sets the blue value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blue value for the color of the shadow.</p> </dd> + + + + + <p>Sets the alpha value for the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the alpha value for the effect changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The hue rotate effect alters the hue of an image by applying a color matrix based on the rotation angle. </p> + + + + <p>Sets the angle to rotate the hue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the angle value changes over time. The effect calculates a color matrix based on the rotation angle (?) according to the following matrix equations: </p><p> This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> This effect is used to alter the saturation of an image. The saturation effect is a specialization of the?color matrix?effect. </p> + + + + <p>Sets the saturation of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the saturation of the image changes over time. This parameter must not be {{NULL}}. You can set the saturation to a value between 0 and 1. If you set it to 1 the output image is fully saturated. If you set it to 0 the output image is monochrome. The saturation value is unitless. The effect calculates a color matrix based on the saturation value (s in the equation here) using the following equation: </p></dd> + + + + + <p> The turbulence effect is used to generate a bitmap based on the Perlin noise function. The turbulence effect has no input image. </p> + + + + <p>Sets the coordinates where the turbulence output is generated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The coordinates where the turbulence output is generated. The algorithm used to generate the Perlin noise is position dependent, so a different offset results in a different output. This value is not bounded and the units are specified in {{DIPs}} </p> <strong>Note</strong>??Note The offset does not have the same effect as a translation because the noise function output is infinite and the function will wrap around the tile. ? </dd> + + + + + <p>Sets the base frequencies in the X and Y direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The base frequencies in the X and Y direction. This must be greater than 0. The units are specified in 1/{{DIPs}}. A value of 1 (1/{{DIPs}}) for the base frequency results in the Perlin noise completing an entire cycle between two pixels. The ease interpolation for these pixels results in completely random pixels, since there is no correlation between the pixels. A value of 0.1(1/{{DIPs}}) for the base frequency results in the Perlin noise function repeating every 10 {{DIPs}}. This results in correlation between pixels and the typical turbulence effect is visible. </p> </dd> + + + + + <p>Sets the size of the turbulence output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the turbulence output</p> </dd> + + + + + <p>Sets the number of octaves for the noise function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of octaves for the noise function. This value must be greater than 0.</p> </dd> + + + + + <p>Sets the seed for the pseudo random generator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The seed for the pseudo random generator. This value is unbounded.</p> </dd> + + + + + <p>Sets the turbulence noise mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The turbulence noise mode. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function.</p> </dd> + + + + + <p>Specifies whether stitching is on or off.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether stitching is on or off. The base frequency is adjusted so that the output bitmap can be stitched. This is useful if you want to tile multiple copies of the turbulence effect output. If this value is {{TRUE}}, the output bitmap can be tiled (using the tile effect) without the appearance of seams and the base frequency is adjusted so that output bitmap can be stitched. If this value is {{FALSE}}, the base frequency is not adjusted, so seams may appear between tiles if the bitmap is tiled. </p> </dd> + + + + + <p> The linear transfer effect is used to map the color intensities of an image using a linear function created from a list of values you provide for each channel. </p> + + + + <p>Sets the Y-intercept of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Y-intercept of the linear function for the red channel.</p> </dd> + + + + + <p>Sets the slope of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the red channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} the effect applies the RedLinearTransfer function to the red channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the green channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The slope of the linear function for the green channel.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenLinearTransfer function to the green channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the blue channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueLinearTransfer function to the blue channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the the Y-intercept of the linear function for the alpha channel. changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the alpha channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaLinearTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. </p> </dd> + + + + + <p>The table transfer effect is used to map the color intensities of an image using a transfer function created from interpolating a list of values you provide.</p> + + + + <p>Sets the list of values used to define the transfer function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the red channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the green channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the blue channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the alpha channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} it applies the RedTableTransfer function to the red channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenTableTransfer function to the green channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueTableTransfer function to the Blue channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaTableTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. The effect clamps the values before it premultiplies the alpha. </p> </dd> + + + + + <p>Sets a value in the red table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the green table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The value to set.</p> </dd> + + + + + <p>Sets a value in the blue table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the alpha table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The new value.</p> </dd> + + + + + <p> The composite effect is used to combine 2 or more images. This effect has 13 different composite modes. The composite effect accepts 2 or more inputs. When you specify 2 images, destination is the first input (index 0) and the source is the second input (index 1). If you specify more than 2 inputs, the images are composited starting with the first input and the second and so on. </p> + + + + <p>Sets the mode for the composite effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode for the composite effect.</p> </dd> + + + + + <p> The Blend Effect is used to combine 2 images. </p> + + + + <p>Sets the blend mode to use when the blend effect combines the two images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blend mode to use when the blend effect combines the two images.</p> </dd> + + + + + <p>The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images.</p> + + + + <p>Sets the coefficients for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The coefficients for the equation used to composite the two input images.</p> </dd> + + + + + <p>Specifies whether to clamp color values before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether to clamp the color values. A value of {{TRUE}} causes color values to be clamped between 0 and 1.</p> </dd> + + + + + <p>Sets the first coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the second coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the second coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the third coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the third coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the fourth coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the fourth coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images. </p> + + + + <p>Sets the interpolation mode of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the interpolation mode of the effect.</p> </dd> + + + + + <p>Sets the border mode to use with the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the border mode to use with the effect.</p> </dd> + + + + + <p>Sets the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the transform matrix for the effect to use.</p> </dd> + + + + + <p>Sets an element of the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>The new value of the element.</p> </dd> + + + + + <p>Sets the sharpness of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the sharpness value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice2::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once.</p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice2::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a fence. This interface extends <strong>{{ID3D12Fence}}</strong>, and supports the retrieval of the flags used to create the original fence. This new feature is useful primarily for opening shared fences.</p><strong>Note</strong> <strong>{{ID3D12Fence1}}</strong> was introduced in the Windows 10 Fall Creators Update, and is the latest version of the <strong>{{ID3D12Fence}}</strong> interface. Applications targeting Windows 10 Fall Creators Update and later should use <strong>{{ID3D12Fence1}}</strong> instead of earlier versions. + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created. </p> </dd> + + + <dd> <p>The height of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method.</p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, CenterZ, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p><p>To set the opacity and transform values, use the corresponding methods on the <strong>{{IDCompositionEffectGroup}}</strong> that was created.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of {{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables display of performance debugging counters.</p> + <p>Microsoft DirectComposition keeps a count of how many DirectComposition devices have performance counters enabled, for the entire desktop session. If the count is non-zero, the performance counters are displayed. Therefore, disabling the counters may not make them go away if another device is also requesting display of the counters.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function. +</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the surface reference in calls to the {{IDCompositionVisual::SetContent}} method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. </p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of those visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the {{DWMWA_CLOAK}} flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying {{WS_EX_LAYERED}} when creating the window with the <strong>CreateWindowEx</strong> function or by setting {{WS_EX_LAYERED}} via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the opacity mode for this visual.</p> + <p>The opacity mode affects how the Opacity property of an effect group object affects the composition of a visual sub-tree. DirectComposition supports two opacity modes: Layer and Multiply. In Layer mode, each visual sub-tree can be logically viewed as a bitmap that contains the opaque rasterization of that entire sub-tree, to which the opacity value is then applied. In this manner, overlapping opaque surfaces blend with the sub-tree?s background, but not with each other. In contrast, in Multiply mode the opacity is applied individually to each surface as it is composed, so surfaces blend with each other. Multiply mode is faster than Layer mode and always preferred if the visual tree contains entirely non-overlapping contents. However, Multiply mode may produce undesired visual results for overlapping elements. </p><p>By default, a visual inherits the opacity mode of its parent visual, which may inherit the opacity mode of its parent visual, and so on. A visual uses the {{DCOMPOSITION_OPACITY_MODE_LAYER}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_OPACITY_MODE_INHERIT}}. If no visuals set the opacity mode, the default for the entire visual tree is {{DCOMPOSITION_OPACITY_MODE_LAYER}}. </p><p>If the <em>opacityMode</em> parameter is anything other than {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, this visual's surfaces are composed with the specified opacity mode. In addition, this opacity mode becomes the new default for the children of the current visual. That is, if the opacity mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, the surfaces the child visuals are composed using the opacity mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The opacity mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Specifies whether or not surfaces that have 3D transformations applied to them should be displayed when facing away from the observer.</p> + <p>The back face visibility property affects how surfaces that have 3D transformations applied are rendered. </p><p>By default, a visual inherits the back face visibility property of its parent visual, which may inherit the back face visibility property of its parent visual, and so on. A visual uses the {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}. If no visuals set the back face visibility property, the default for the entire visual tree is {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}}. </p><p>If the <em>visibility</em> parameter is anything other than {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, this visual's surfaces are composed with the specified visibility mode. In addition, this visibility mode becomes the new default for the children of the current visual. That is, if the visibility mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, the surfaces the child visuals are composed using the visibility mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The back face visibility to use when composing surfaces in this visual?s sub-tree to the screen.</p> </dd> + + + + + <p>Represents a debug visual.</p> + + + + <p>Enables a visual heatmap that represents overdraw regions.</p> + <p>Heatmaps can be enabled by calling <strong>EnableHeatMap</strong>. The heatmaps are drawn on the source of the VisualDebug visual and child visuals. The heatmaps are represented in a specified color for all visual content. The heatmap color must have an transparency in order to see the overlaying overdraw regions. The colored surfaces are blended together to visually show all overdraw regions in a single view. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd></dd> + + + + + <p>Disables visual heatmaps.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables highlighting visuals when content is being redrawn.</p> + <p>Highlighting redraw regions can be enabled by calling <strong>EnableRedrawRegions</strong>. With this function, redrawn client areas are visually highlighted every frame the visual is updated. Redraw regions are drawn on the source of the VisualDebug and child visuals. Redraw is triggered when properties of a visual are updated. The updated visusal does not neccessarly need to visually change to trigger a redraw. The highlighting will cycle through Blue, Yellow, Pink and Green to provide an order of which content is being updated. The redraw regions are only visible while the window of the VisualDebug is being updated. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables visual redraw regions.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A newly created virtual surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> or <strong>{{IDCompositionVirtualSurface::Resize}}</strong> method.</p><p>Microsoft DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created virtual surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p> Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition. </p> + + + + <p>Creates an instance of <strong>{{IDCompositionGaussianBlurEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionBrightnessEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionColorMatrixEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionShadowEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionHueRotationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionSaturationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTurbulenceEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionLinearTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTableTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionCompositeEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionBlendEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionArithmeticCompositeEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionAffineTransform2DEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Changes the value of OffsetZ property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value.</p> </dd> + + + + + <p>Sets the value of the visual's opacity property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the opacity property.</p> </dd> + + + + + <p>Sets the Transform property of this visual to the specified 3D transform object.</p> + <p>Setting the Transform property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>If the Transform property previously specified a transform matrix, the newly specified transform object replaces the transform matrix.</p><p>A transformation specified by the Transform property is applied after the OffsetX and OffsetY properties. In other words, the effect of setting the Transform property and the OffsetX and OffsetY properties is the same as setting only the Transform property on a transform group where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has those same OffsetX and OffsetY values. However, you should use the <strong>{{IDCompositionVisual::SetOffsetX}}</strong> and <strong>SetOffsetY</strong> methods whenever possible because they are slightly faster. </p><p>This method fails if <em>transform</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p><p>If the <em>transform</em> parameter is {{NULL}}, the coordinate system of this visual is transformed only by its OffsetX and OffsetY properties. Setting the Transform property to {{NULL}} is equivalent to setting it to an <strong>{{IDCompositionMatrixTransform}}</strong> object where the specified matrix is the identity matrix. However, an application should set the Transform property to {{NULL}} whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The transform object that is used to modify the coordinate system of this visual. This parameter can point to an <strong>{{IDCompositionTransform}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the visual's Visible property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the visible property.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the <strong>{{IDCompositionDevice::Commit}}</strong> method.</p><p>The {{DXGI}} device specified by <em>dxgiDevice</em> is used to create all DirectComposition surface objects. In particular, the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method returns an interface reference to a {{DXGI}} surface that belongs to the device specified by the <em>dxgiDevice</em> parameter. </p><p>When creating the {{DXGI}} device, developers must specify the <strong>{{D3D11_CREATE_DEVICE}} {{BGRA_SUPPORT}}</strong> or <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag for Direct2D interoperability with Microsoft Direct3D resources.</p><p>The <em>iid</em> parameter must be <code>__uuidof({{IDCompositionDevice}})</code>, and the <em>dcompositionDevice</em> parameter receives a reference to an <strong>{{IDCompositionDevice}}</strong> interface. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The {{DXGI}} device to use to create DirectComposition surface objects.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. </p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the {{IDCompositionDevice2::Commit}} method. </p><p>The <em>renderingDevice</em> parameter may point to a {{DXGI}}, Direct3D, Direct2D device object, or it may be {{NULL}}. This parameter affects the behavior of the {{IDCompositionDevice2::CreateSurface}}, {{IDCompositionDevice2::CreateVirtualSurface}} and {{IDCompositionSurface::BeginDraw}} methods. </p><p>If the <em>renderingDevice</em> parameter is {{NULL}} then the returned DirectComposition device cannot directly create DirectComposition surface objects. In particular, {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods return {{E_INVALIDARG}}, regardless of the supplied parameters. However, such a DirectComposition device object can still be used to indirectly create surfaces if the application creates a surface factory object via the {{IDCompositionDevice2::CreateSurfaceFactory}} method. </p><p>If the <em>renderingDevice</em> parameter points to a {{DXGI}} device, that device is used to allocate all video memory needed by the {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods. Moreover, the {{IDCompositionSurface::BeginDraw}} method returns an interface reference to a {{DXGI}} surface that belongs to that same {{DXGI}} device. </p><p>If the <em>renderingDevice</em> parameter points to a Direct2D device object, DirectComposition extracts from it the underlying {{DXGI}} device object and uses it as if that {{DXGI}} device object had been passed in as the <em>renderingDevice</em> parameter. However, passing in a Direct2D object further causes {{IDCompositionSurface::BeginDraw}} to accept __uuidof({{ID2D1DeviceContext}}) for its <em>iid</em> parameter for any objects created with the {{IDCompositionDevice2::CreateSurface}} or {{IDCompositionDevice2::CreateVirtualSurface}} methods. In that case, the Direct2D device context object returned by {{IDCompositionSurface::BeginDraw}} will belong to the same Direct2D device passed as the <em>renderingDevice</em> parameter. </p><p>If the <em>iid</em> parameter is __uuidof({{IDCompositionDevice}}), then the dcompositionDevice parameter receives a reference to a Version 1 {{IDCompositionDevice}} interface, but the underlying object is a Version 2 desktop device object. The application can later obtain a reference to either the {{IDCompositionDevice2}} or {{IDCompositionDesktopDevice}} interfaces by calling the <strong>QueryInterface</strong> method on that device. Similarly, all DirectComposition objects created from such a device are Version 2 objects under the covers. For example, the {{IDCompositionDevice::CreateVisual}} method will return an {{IDCompositionVisual}} interface to the created visual, but the application can obtain a reference to the {{IDCompositionVisual2}} interface via the QueryInterface method. This behavior allows an application written to the DirectComposition {{V1}} {{API}} to incrementally adopt DirectComposition {{V2}} features by changing the device creation method from {{DCompositionCreateDevice}} to {{DCompositionCreateDevice2}}, while still requesting the {{IDCompositionDevice2}} interface. This allows the rest of the code to remain unchanged, while allowing the application to use QueryInterface in just the places where new functionality is needed. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new DirectComposition device object, which can be used to create other DirectComposition objects.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that can be bound to a +Microsoft DirectX swap chain or swap buffer and associated +with a visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The requested access to the composition surface object. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>0x0000L</dt> </dl> </td><td> <p>No access.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_READ}}</strong></dt> <dt>0x0001L</dt> </dl> </td><td> <p>Read access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_WRITE}}</strong></dt> <dt>0x0002L</dt> </dl> </td><td> <p>Write access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_ALL_ACCESS}}</strong></dt> <dt>0x0003L</dt> </dl> </td><td> <p>Read/write access. Always specify this flag except when duplicating a surface in another process, in which case set <em>desiredAccess</em> to 0.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains the security descriptor for the composition surface object, and specifies whether the handle of the composition surface object is inheritable when a child process is created. If this parameter is {{NULL}}, the composition surface object is created with default security attributes that grant read and write access to the current process, but do not enable child processes to inherit the handle.</p> </dd> + + + <dd> <p>The handle of the new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse wheel messages to the given {{HWND}}. This will fail if there is already an interaction attached to this visual. After calling this {{API}}, the device that owns the visual must be committed. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse button down and any subsequent move and up events to the given {{HWND}}. There is no move thresholding; when enabled, all events including and following the down are unconditionally redirected to the specified window. After calling this {{API}}, the device owning the visual must be committed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Represents a function for animating one or more properties of one or more Microsoft DirectComposition objects. Any object property that takes a scalar value can be animated.</p> + + + + <p>Resets the animation function so that it contains no segments.</p> + <p>This method returns the animation function to a clean state, as when the animation was first constructed. After this method is called, the next segment to be added becomes the first segment of the animation function. Because it is the first segment, it can have any non-negative beginning offset.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the absolute time at which the animation function starts.</p> + <p>By default, an animation function starts when the first frame of the animation takes effect. For example, if an application creates a simple animation function with a single primitive at offset zero, associates the animation with some property, and then calls the <strong>{{IDCompositionDevice::Commit}}</strong> method, the first frame that includes the commit samples the animation at offset zero for the first primitive. This implies that the actual default start time of all animations varies depending on the time between when the application creates the animation and calls <strong>Commit</strong>, to the time it takes the composition engine to pick up the committed changes. The application can use the <strong>SetAbsoluteBeginTime</strong> method to exercise finer control over the starting time of an animation. </p><p>This method does not control when animations take effect; it only affects how animations are sampled after they start. If the application specifies the exact time of the next frame as the absolute begin time, the result is the same as not calling this method at all. If the specified begin time is different from the time of the next frame, the result is one of following: </p><ul> <li>If the specified time is later than the next frame time, the animation start is delayed until the specified begin time.</li> <li>If the specified time is earlier than the next frame time, the beginning of the animation is dropped and sampling starts into the animation function. +</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The starting time for this animation.</p> </dd> + + + + + <p>Adds a cubic polynomial segment to the animation function.</p> + <p>A cubic segment transitions time along a cubic polynomial. For a given time input (t), the output value is given by the following equation. </p><p><em>x</em>(<em>t</em>) = <em>at</em>? + <em>bt</em>? + <em>ct</em> + <em>d</em></p><p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p><p>If all coefficients except <em>constantCoefficient</em> are zero, the value of this segment remains constant over time, and the animation does not cause a recomposition for the duration of the segment.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect.</p> </dd> + + + <dd> <p>The constant coefficient of the polynomial.</p> </dd> + + + <dd> <p>The linear coefficient of the polynomial.</p> </dd> + + + <dd> <p>The quadratic coefficient of the polynomial.</p> </dd> + + + <dd> <p>The cubic coefficient of the polynomial.</p> </dd> + + + + + <p>Adds a sinusoidal segment to the animation function.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity, or if the <em>beginOffset</em> parameter is negative. </p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect. </p> </dd> + + + <dd> <p>A constant that is added to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the time offset, in Hertz.</p> </dd> + + + <dd> <p>A constant that is added to the time offset, in degrees.</p> </dd> + + + + + <p>Adds a repeat segment that causes the specified portion of an animation function to be repeated.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>This animation segment remains in effect until the begin time of the next segment. If the animation function contains no more segments, this segment remains in effect indefinitely.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation to the point at which the repeat should begin.</p> </dd> + + + <dd> <p>The duration, in seconds, of a portion of the animation immediately preceding the begin time that is specified by <em>beginOffset</em>. This is the portion that will be repeated.</p> </dd> + + + + + <p>Adds an end segment that marks the end of an animation function. </p> + <p>When the specified offset is reached, the property or properties affected by this animation are set to the specified final value, and then the animation stops. If no end segment is added, the final segment of the animation function runs indefinitely. Calling this method is semantically identical to making the last segment of the animation function a cubic polynomial where the cubic, quadratic, and linear coefficients are all zeros, and the constant coefficient is the desired final value.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>endOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>After this method is called, all methods on this animation object fail except the <strong>{{IDCompositionAnimation::Reset}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when the function ends.</p> </dd> + + + <dd> <p>The final value of the animation.</p> </dd> + + + + + <p>Specifies the interpolation mode to be used when a bitmap is composed with any transform where the pixels in the bitmap don't line up exactly one-to-one with pixels on screen. </p> + <p>The default interpolation mode for a visual is <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If all visuals in a visual tree specify this mode, the default for all visuals is nearest neighbor sampling, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmaps are interpolated by using nearest-neighbor sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated by using linear sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated according to the mode established by the parent visual.</p> </dd> + + + + + <p>Specifies the border mode to use when composing a bitmap or applying a clip with any transform such that the edges of the bitmap or clip are not axis-aligned with integer coordinates. </p> + <p>The default border mode for any given visual is <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, which delegates the determination of the border mode to the parent visual. If all visuals in a visual tree specify this mode, the default for all visuals is aliased rendering, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmap and clip edges are antialiased.</p> </dd> + + + <dd> <p>Bitmap and clip edges are aliased. See Remarks.</p> </dd> + + + <dd> <p>Bitmap and clip edges are drawn according to the mode established by the parent visual.</p> </dd> + + + + + <p>The mode to use to blend the bitmap content of a visual with the render target.</p> + <p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The bitmap colors are inverted. </p> </dd> + + + <dd> <p>Bitmap colors subtract for color channels in the background. </p> </dd> + + + <dd> <p>Bitmaps are blended according to the mode established by the parent visual. </p> </dd> + + + + + <p>Specifies the backface visibility to be applied to a visual. </p> + + + <dd> <p>Surfaces in this visual's sub-tree are visible regardless of transformation.</p> </dd> + + + <dd> <p>Surfaces in this visual's sub-tree are only visible when facing the observer.</p> </dd> + + + <dd> <p>The back face visibility is the same as that of the target visual's parent visual.</p> </dd> + + + + + <p>Specifies how the effective opacity value of a visual is applied to that visual?s content and children.</p> + + + <dd> <p>The target visual defines a logical layer into which its entire sub-tree is composed with a starting effective opacity of 1.0. The original opacity value is then used to blend the layer onto the visual?s background.</p> </dd> + + + <dd> <p>The opacity value is multiplied with the effective opacity of the parent visual and the result is then individually applied to each piece of content in this visual?s sub-tree.</p> </dd> + + + <dd> <p>The opacity mode is the same as that of the target visual?s parent visual.</p> </dd> + + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Describes timing and composition statistics for a frame.</p> + <p>The <strong>{{IDCompositionDevice::GetFrameStatistics}}</strong> method fills this structure. An application can use the information in this structure to estimate the timestamp of the next few frames that will be started by the composition engine. Note that this is only an estimate because the composition engine may or may not compose the next frame, depending on whether any active animations or other work are pending for that frame. In addition, the composition engine may change frame rates according to the cost of composing individual frames.</p> + + + <dd> <p>The time stamp of the last batch of commands to be processed by the composition engine.</p> </dd> + + + <dd> <p>The rate at which the composition engine is producing frames, in frames per second.</p> </dd> + + + <dd> <p>The current time as computed by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>The units in which the <strong>lastFrameTime</strong> and <strong>currentTime</strong> members are specified, in Hertz.</p> </dd> + + + <dd> <p>The estimated time when the next frame will be displayed.</p> </dd> + + + + + <p>Defines the possible states of Direct Manipulation. The viewport can process input in any state unless otherwise noted.</p> + + + + <p>Defines how hit testing is handled by Direct Manipulation when using a dedicated hit-test thread registered through <strong>RegisterHitTestTarget</strong>.</p> + + + + <p>Defines the interaction configuration states available in Direct Manipulation.</p> + + + + <p>Defines the gestures that can be passed to <strong>SetManualGesture</strong>.</p> + <p>By default, Direct Manipulation always reassigns tap and press-and-hold gestures to the application. +</p><p>Use <strong>{{DIRECTMANIPULATION_GESTURE_PINCH_ZOOM}}</strong> to zoom instead of scale. +</p> + + + + <p> Defines the Direct Manipulation motion type.</p> + + + + <p>Defines the input behavior options for the viewport.</p> + <p><strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS}}</strong> is used in the <strong>SetViewportOptions</strong> method. These flags can be combined to set the input behavior for a viewport.</p> + + + <dd> <p>No special behaviors. This is the default value used to set or revert to default behavior.</p> </dd> + + + <dd> <p>At the end of an interaction, the viewport transitions to <strong>{{DIRECTMANIPULATION_READY}}</strong> and then immediately to <strong>{{DIRECTMANIPULATION_DISABLED}}</strong>. The viewport must be explicitly enabled through the <strong>Enable</strong> method before the next interaction can be processed.</p> </dd> + + + <dd> <p> <strong>Update</strong> must be called to redraw the content within the viewport. The content is not updated automatically during an input event.</p> </dd> + + + <dd> <p>All input from a contact associated with the viewport is passed to the {{UI}} thread for processing.</p> </dd> + + + <dd> <p>If set, all <strong>{{WM_POINTERDOWN}}</strong> messages are passed to the application for hit testing. Otherwise, Direct Manipulation will process the messages for hit testing against the existing list of running viewports, and the application will not see the input.</p> <p>Applies only when viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>.</p> </dd> + + + <dd> <p>Specifies that pixel snapping during a manipulation is disabled.</p> <p>Anti-aliasing can create irregular edge rendering. Artifacts, commonly seen as blurry, or semi-transparent, edges can occur when the location of an edge falls in the middle of a device pixel rather than between device pixels. </p> </dd> + + + + + <p>Modifies how the final inertia end position is calculated.</p> + <p>For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL}}</strong> snap points, the snap points are chosen based on the natural ending position of inertia as calculated by the touch interaction engine. For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE}}</strong> snap points, the selected snap point depends on where inertia started.</p> + + + <dd> <p>Content always stops at the snap point closest to where inertia would naturally stop along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at a snap point closest to where inertia would naturally stop along the direction of inertia, depending on how close the snap point is. </p> </dd> + + + <dd> <p>Content always stops at the snap point closest to the release point along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at the next snap point, if the motion starts far from it.</p> </dd> + + + + + <p>Defines the coordinate system for a collection of snap points.</p> + <p>If <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> and <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> are both specified, the snap points are interpreted as specified from the bottom and right boundaries of the content (the size of the content - the size of the viewport). This is intended for {{RTL}} reading scenarios where content is normally specified and rendered from right-to-left or bottom-to-top.</p> + + + <dd> <p>Default. </p> <p>Snap points are specified relative to the top and left boundaries of the content unless <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> is also specified, in which case they are relative to the bottom and right boundaries of the content. For zoom, the boundary is 1.0f.</p> </dd> + + + <dd> <p>Snap points are specified relative to the origin of the viewport.</p> </dd> + + + <dd> <p>Snap points are interpreted as specified in the negative direction of the origin. The origin is shifted to the bottom and right of the viewport or content. Cannot be set for zoom.</p> </dd> + + + + + <p>Defines the horizontal alignment options for content within a viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the left side of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the right side of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the horizontal alignment.</p> </dd> + + + + + <p>Defines the vertical alignment settings for content within the viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the top of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the bottom of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the vertical alignment.</p> </dd> + + + + + <p>Defines the threading behavior for <strong>SetInputMode</strong> or <strong>SetUpdateMode</strong>. The exact meaning of each constant depends on the method called.</p> + + + + <p>Defines the drag-and-drop interaction states for the viewport.</p> + <p>For each interaction, the status always starts at <strong>{{DIRECTMANIPULATION_DRAG_DROP_READY}}</strong> and ends at either <strong>{{DIRECTMANIPULATION_DRAG_DROP_CANCELLED}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_COMMITTED}}</strong>. There are no explicit callbacks for the transition from {{CANCELLED}}/{{COMMITTED}} to {{READY}}. +</p><p>The meaning of the {{CANCELLED}} and {{COMMITED}} values depend on the previous status.</p><ul> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_PRESELECT}}</strong>, they mean the same thing: the content goes back to the original location and no other actions should be taken.</li> <li>{{FOR}} <strong>{{DIRECTMANIPULATION_DRAG_DROP_SELECTING}}</strong>, {{COMMITED}} means apply the selection change; {{CANCELLED}} means avoid the selection change.</li> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_DRAGGING}}</strong>, {{COMMITED}} means perform the drop action; {{CANCELLED}} means cancel the drop action.</li> </ul> + + + <dd> <p>The viewport is at rest and ready for input.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is not selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is being dragged.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a revert.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a commit.</p> </dd> + + + + + <p>Defines behaviors for the drag-drop interaction.</p> + + + <dd> <p>Specifies that vertical movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that horizontal movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that the gesture is to be cross-slide only.</p> </dd> + + + <dd> <p>Specifies that the gesture is a drag initiated by cross-slide.</p> </dd> + + + <dd> <p>Specifies that the gesture a drag initiated by press-and-hold.</p> </dd> + + + + + <p>Defines gestures recognized by Direct Manipulation.</p> + + + + <p>Determines the type and direction of automatic scrolling animation to apply. </p> + + + <dd> <p>If content is scrolling, slowly stop along the direction of the motion.</p> </dd> + + + <dd> <p>Scroll towards the positive boundary of the content.</p> </dd> + + + <dd> <p>Scroll towards the origin of the content.</p> </dd> + + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Activates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated, by default. The manager does not receive or respond to input and callbacks until <strong>Activate</strong> is called for the window. </p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Deactivates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated by default. The manager does not receive or respond to input until <strong>Activate</strong> is called. The manipulation manager should be deactivated when the app does not receive or respond to input. For example, when the app is minimized.</p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Registers a dedicated thread for hit testing.</p> + <p>Hit testing is typically performed on the application {{UI}} thread. The application receives a <strong>{{WM_POINTERDOWN}}</strong> message on which hit-testing is performed. If a manipulation is required, <strong>SetContact</strong> is called on one or more viewports. An application can use the <strong>RegisterHitTestTarget</strong> method to delegate this hit-testing responsibility to a separate hit-testing thread. +</p><p>Once a dedicated hit-test target is successfully registered, <strong>{{WM_POINTERDOWN}}</strong> messages are processed on the hit-testing thread. If a manipulation, such as pan or zoom, is required, <strong>SetContact</strong> is called from this thread. +</p><p>If <strong>SetContact</strong> is not called from the hit-testing thread, <strong>{{WM_POINTERDOWN}}</strong> messages may be processed on the {{UI}} thread, depending on the <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong> specified during registration. +</p><p>If <strong>SetContact</strong> is not called by either the hit-test thread or the {{UI}} thread, Direct Manipulation ignores the input which is then handled on the {{UI}} thread. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of the main app window (typically created from the {{UI}} thread).</p> </dd> + + + <dd> <p>The handle of the window in which hit testing is registered (should be created from the hit testing thread). Pass in nullptr to unregister a previously registered hit-test target.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong>. Specifies whether the {{UI}} window or the hit testing window (or both) receives the hit testing <strong>{{WM_POINTERDOWN}}</strong> message , and in what order.</p> </dd> + + + + + <p>Passes keyboard and mouse messages to the manipulation manager on the app's {{UI}} thread.</p> + <p>Call this method for mouse and keyboard input.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input message to process.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if no further processing should be done with this message; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets a reference to an <strong>{{IDirectManipulationUpdateManager}}</strong> object that receives compositor updates. </p> + <p>For the compositor to respond to update events from Direct Manipulation, you must associate <strong>{{IDirectManipulationUpdateManager}}</strong> to an <strong>{{IDirectManipulationCompositor}}</strong> object during initialization. Use <strong>GetUpdateManager</strong> to obtain a reference to a <strong>{{IDirectManipulationUpdateManager}}</strong> object. Pass this reference to the compositor using the <strong>SetUpdateManager</strong> method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create a new <strong>{{IDirectManipulationViewport}}</strong> object.</p><p>The viewport manages the interaction state and mapping of input to output actions.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Extends the <strong>{{IDirectManipulationManager2}}</strong> interface that provides access to all the Direct Manipulation features and {{APIs}} available to the client application. </p><p>The <strong>{{IDirectManipulationManager3}}</strong> interface adds support for retrieving an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p><strong>Note</strong>??To obtain an <strong>{{IDirectManipulationManager3}}</strong> interface reference, <strong>QueryInterface</strong> on an existing <strong>{{IDirectManipulationManager}}</strong> interface reference.? + + + + <p>Retrieves an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Starts or resumes input processing by the viewport.</p> + <p>This method directs a viewport to attempt to respond to input.</p><p>Call this method if the <strong>{{AUTODISABLE}}</strong> option is set. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>, or <strong>{{S_FALSE}}</strong> if there is no work to do (for example, the viewport is already enabled). Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Stops input processing by the viewport.</p> + <p>When a viewport is disabled, it immediately stops all transforms and moves the content to the final location. </p><p>Call this method when you want to modify multiple attributes atomically. This method can be called at any time. </p><p>The viewport will not resume processing input until <strong>Enable</strong> is called. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies an association between a contact and the viewport.</p> + <p>Call this method when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p><p> <strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p><p>After initialization, Direct Manipulation is not aware of viewport z-order or parent-child relations between viewports. The order of <strong>SetContact</strong> calls defines the viewport tree. To establish the correct viewport hierarchy, <strong>SetContact</strong> should be called first on the child-most viewport, followed by the parent, grand-parent, and so on. +</p><p>Use <strong>{{GET_POINTERID_WPARAM}}</strong> to get the reference identifier from a reference message. The contact is removed automatically when <strong>{{WM_POINTERUP}}</strong> is received. +</p><p>If a contact is associated with one or more viewports using the <strong>SetContact</strong> method, Direct Manipulation will examine further input from that contact and attempt to identify an appropriate manipulation based on the configuration of the associated viewports. If a manipulation is recognized, the application will then receive a <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message for this contact. In this context, the <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message indicates that Direct Manipulation has captured the contact and the application will not receive input from this contact that is consumed for this manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes a contact that is associated with a viewport.</p> + <p>This method releases a contact from a specific Direct Manipulation viewport (equivalent to the user removing a touch point). </p><p>The viewport state is not affected unless the last remaining contact on the viewport is removed, in which case the viewport will transition to inertia, if supported. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes all contacts that are associated with the viewport. Inertia is started if the viewport supports inertia.</p> + <p>This is equivalent to calling <strong>ReleaseContact</strong> on every contact associated with the viewport. The outcome is equivalent to the user removing all touch points from the viewport. </p><p>If supported, inertia will be started after calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Gets the tag value of a viewport.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The out parameters are optional, so the method can return an {{ID}}, the viewport object, or both. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{IID}} to the interface.</p> </dd> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The identifier portion of the tag.</p> </dd> + + + + + <p>Sets a viewport tag.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The object parameter is optional, so that the method can set just an {{ID}}. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Retrieves the rectangle for the viewport relative to the origin of the viewport coordinate system specified by <strong>SetViewportRect</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the bounding rectangle for the viewport, relative to the origin of the viewport coordinate system.</p> + <p>The viewport rectangle specifies the region of content that is visible to the user. In conjunction with the primary content rectangle, the viewport rectangle is used to determine chaining behaviors.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle.</p> </dd> + + + + + <p>Moves the viewport to a specific area of the primary content and specifies whether to animate the transition.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The leftmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The topmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The rightmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The bottommost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>Specifies whether to animate the zoom behavior.</p> </dd> + + + + + <p>Specifies the transform from the viewport coordinate system to the window client coordinate system. </p> + <p>Call this function to specify the viewport position, scaling and orientation on the screen. Viewport position, scaling, orientation and size are uniquely determined by the viewport transform and the viewport rectangle. The application can specify the viewport transform using this method, and the viewport rectangle using <strong>SetViewportRect</strong>. +</p><p>The viewport rectangle (the rectangular area inside the content that is visible to the user) is specified in viewport coordinates. If the viewport rectangle top-left point is (0,0), the viewport rectangle is positioned exactly at the viewport coordinate system origin. Viewports offset from the viewport coordinate system origin can be specified in two ways:</p><ul> <li>Through the viewport rectangle top-left point</li> <li>Through the viewport transform translation component (_31, _32)</li> </ul><p>The viewport transform converts from the viewport coordinate system to the window client coordinate system. Direct Manipulation ignores the window {{RTL}} property, so the client area origin is always the top-left point. +The transforms are applied in the following order: +</p><ol> <li>Viewport rectangle offset</li> <li>Viewport transform (from viewport to client coordinate system)</li> <li>Client to screen mapping (from client to screen coordinate system) +</li> </ol> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Specifies a display transform for the viewport, and synchronizes the output transform with the new value of the display transform.</p> + <p>If the application performs special output processing of the content outside of the compositor (content not fully captured in the viewport transform), it should call this method to specify the display transform for the special processing. +</p><p>The display transform affects how manipulation updates are applied to the output transform. For example, if the display transform is set to scale 3x, panning will move the content 3x the original distance. +</p><p>When a display transform is changed using this method, the output transform will be synchronized to the new value of the display transform. +</p><p>This method cannot be called if the viewport status is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Gets the primary content of a viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. </p><p>Primary content is an element that gets transformed (e.g. moved, scaled, rotated) in response to a user interaction. Primary content is created at the same time as the viewport and cannot be added or removed.</p> + <p> This method gets the content of the viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds secondary content, such as a panning indicator, to a viewport.</p> + <p>Secondary content is created by calling <strong>CreateContent</strong>. Once added, the secondary content will move relative to the primary content in response to a manipulation. Its motion is determined by rules associated with each type of secondary content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the viewport.</p> </dd> + + + + + <p>Removes secondary content from a viewport.</p> + <p>Secondary content can be removed from the viewport at any time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content object to remove.</p> </dd> + + + + + <p>Sets how the viewport handles input and output.</p><p>Calling this method overrides all settings previously specified with <strong>SetUpdateMode</strong> or <strong>SetInputMode</strong>.</p> + <p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds an interaction configuration for the viewport.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p><p>You cannot add another drag and drop behavior after an existing one has already been added.</p><p>This method is designed to allow an application to switch pre-added configurations, as a configuration cannot be changed while a manipulation is occurring. Under most circumstances it is better to update the configuration using <strong>ActivateConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Removes an interaction configuration for the viewport.</p> + <p>This method removes a possible configuration that was added by using <strong>AddConfiguration</strong>. This method can be called only if the configuration is not active.</p><p>An interaction configuration specifies how the manipulation engine responds to input and which gestures are supported. Any number of configurations can be added to the viewport using <strong>AddConfiguration</strong>. Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets the configuration for input interaction.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specify the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets which gestures are ignored by Direct Manipulation. </p> + <p>Use this method to specify which gestures the application processes on the {{UI}} thread. If a gesture is recognized, it will be passed to the application for processing and ignored by Direct Manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the motion types supported in a viewport that can be chained to a parent viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> that specifies the motion types that are enabled for this viewport.</p> </dd> + + + + + <p>Adds a new event handler to listen for viewport events.</p> + <p>The event callback is fired from the thread that owns the specified window. Consecutive events of the same callback method may be coalesced. +</p><strong>Note</strong>??If the viewport has a drag-drop behavior attached, the event handler should implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of a window owned by the thread for the event callback.</p> </dd> + + + <dd> <p>The handler that is called when viewport status and update events occur. The specified object must implement the <strong>{{IDirectManipulationViewportEventHandler}}</strong> interface.</p> </dd> + + + <dd> <p>The handle that represents this event handler callback.</p> </dd> + + + + + <p>Removes an existing event handler from the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that was returned by a previous call to <strong>AddEventHandler</strong>.</p> </dd> + + + + + <p>Specifies if input is visible to the {{UI}} thread.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. </p><p> Direct Manipulation consumes all the input that drives the manipulation and the application receives {{WM_POINTERCAPTURECHANGED}} messages. +</p><p>In some situations an application may want to receive input that is driving a manipulation. Set {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}} in this case. The application will receive all input messages, even input used by Direct Manipulation to drive a manipulation. </p><strong>Note</strong>??The application will not receive {{WM_POINTERCAPTURECHANGED}} messages.?<p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Specifies whether a viewport updates content manually instead of during an input event.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. In this mode, visual updates are pushed to compositor driven by input. This is the expected mode of operation if the application is using system-provided implementation of <strong>{{IDirectManipulationCompositor}}</strong>. +</p><p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, it should switch viewport update mode to manual by setting {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}. When in manual mode, the compositor pulls visual updates whenever it calls <strong>Update</strong> on Direct Manipulation. +</p><p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Stops the manipulation and returns the viewport to a ready state. +</p> + <p>If a mandatory snap point has been configured, the content may animate to the nearest snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases all resources that are used by the viewport and prepares it for destruction from memory. +</p> + <p>Once <strong>Abandon</strong> has been called, do not make subsequent function calls on the viewport. If a function is called after <strong>Abandon</strong>, <strong>{{E_INVALID_STATE}}</strong> will be returned.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides management of behaviors on a viewport. A behavior affects the functionality of a particular part of the Direct Manipulation workflow. </p> + <p><strong>{{IDirectManipulationViewport2}}</strong> can be used in place of <strong>{{IDirectManipulationViewport}}</strong>. +</p><p>Behaviors are created using <strong>{{IDirectManipulationManager2}}</strong> and an appropriate class {{ID}}.</p><p>A behavior can be attached or removed at any time and takes effect immediately (even during an active manipulation or inertia animation).</p> + + + + <p>Adds a behavior to the viewport and returns a cookie to the caller.</p> + <p>A behavior takes effect immediately after <strong>AddBehavior</strong> is called. This must be considered when adding a behavior during an active manipulation or inertia phase.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. Attaching a behavior that is already attached to this viewport or another viewport results in a failure.</p> + + + <dd> <p>A behavior created using the <strong>CreateBehavior</strong> method.</p> </dd> + + + <dd> <p>A cookie is returned so the caller can remove this behavior later. This allows the caller to release any reference on the behavior and let Direct Manipulation maintain an appropriate lifetime, similar to event handlers. </p> </dd> + + + + + <p>Removes a behavior from the viewport that matches the given cookie.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If the behavior has already been removed or if the behavior is not attached to this viewport a failure is returned.</p> + + + <dd> <p>A valid cookie returned from the <strong>AddBehavior</strong> call on the same viewport.</p> </dd> + + + + + <p>Removes all behaviors added to the viewport.</p> + <p><strong>RemoveAllBehaviors</strong> only returns an error if the removal of a behavior from the viewport was unsuccessful. In the event that a specific behavior is not removed successfully, <strong>RemoveAllBehaviors</strong> removes all remaining behaviors.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines methods for handling status and update events for the viewport.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + <p>Client apps implement this handler to receive status and update events for viewports. Use <strong>AddEventHandler</strong> to set the handler for a viewport. Each viewport can have more than one handler.</p> + + + + <p>Called when the status of a viewport changes.</p> + <p>If you call <strong>GetStatus</strong> from within this handler, the status returned is not guaranteed to be the same as at the time of the call. This is because of the asynchronous nature of the notification.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport for which status has changed.</p> </dd> + + + <dd> <p>The new status of the viewport.</p> </dd> + + + <dd> <p>The previous status of the viewport.</p> </dd> + + + + + <p>Called after all content in the viewport has been updated.</p> + <p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>. <strong>OnContentUpdated</strong> is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that has been updated.</p> </dd> + + + + + <p>Called when content inside a viewport is updated. +</p> + <p>This method is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. For instance, when the position of the content is changed, you can use <strong>{{IDirectManipualtionContent::GetContentTransform}}</strong> to retrieve the new value.</p><p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that is updated.</p> </dd> + + + <dd> <p>The content in the viewport that has changed.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Retrieves the bounding rectangle of the content, relative to the bounding rectangle of the viewport (if defined).</p> + <p>If the bounding rectangle has not been set using <strong>SetContentRect</strong>, then <strong>{{UI_E_VALUE_NOT_SET}}</strong> is returned. However, the actual content rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Specifies the bounding rectangle of the content, relative to its viewport. +</p> + <p>The default bounding rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Retrieves the viewport that contains the content.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use.</p> </dd> + + + <dd> <p>The viewport object.</p> </dd> + + + + + <p> </p><p>Retrieves the tag object set on this content. </p> + <p><strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p><strong>GetTag</strong> queries the tag value for the specified interface and returns a reference to that interface.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to identify a motion. +The parameters are optional, so that the method can return both parts of the tag, the identifier portion, or the tag object. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use. The tag object typically implements this interface.</p> </dd> + + + <dd> <p>The tag object.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Specifies the tag object for the content. </p> + <p> <strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to store and retrieve an arbitrary object associated with the content.</p><p>The <em>object</em> parameter is optional, so that the method can set just the identifier portion. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Gets the final transform applied to the content.</p> + <p>This transform might contain the other custom curves applied during manipulation and inertia.</p><p>This transform contains both the content transform and the sync transform set with <strong>SyncContentTransform</strong>. +</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Modifies the content transform while maintaining the output transform.</p> + <p>This method will fail if the viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong>, <strong>{{DIRECTMANIPULATION_INERTIA}}</strong> or <strong>{{DIRECTMANIPULATION_SUSPENDED}}</strong>.</p><p>This method is useful when the application wants to apply transforms on top of the content transforms at the end of a manipulation, while preserving the visual output transform of the content.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p> Specifies snap points for the inertia end position at uniform intervals.</p> + <p>Snap point locations are in content coordinate units. </p><p>Specify snap points through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong>. </p><p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p><p>Snap points are not at boundaries by default. If you wish for content to stop at a boundary, a snap point must be set at the boundary.</p><p> Snap points set by <strong>SetSnapInterval</strong> can be cleared by calling <strong>SetSnapInterval</strong> with an interval of 0.0f.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>The interval between each snap point.</p> </dd> + + + <dd> <p>The offset from the coordinate specified in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + + + <p>Specifies the snap points for the inertia rest position.</p> + <p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If there is no change in the snap points, this method can return <strong>{{S_FALSE}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If invalid snap points are specified, existing snap points might be affected.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values. Only <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_X}}</strong>, <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_Y}}</strong>, or <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong> are allowed.</p> </dd> + + + <dd> <p>An array of snap points within the boundaries of the content to snap to. Should be specified in increasing order relative to the origin set in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + <dd> <p> The size of the array of snap points. Should be greater than 0.</p> </dd> + + + + + <p>Specifies the type of snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE}}</strong> enumeration values.</p> <p>If set to <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE}}</strong>, snap points specified through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong> are cleared.</p> </dd> + + + + + <p> Specifies the coordinate system for snap points or snap intervals. </p> + <p>The origin is relative to the content boundaries. If no boundary has been set (<strong>SetContentRect</strong> is never called) the default boundaries are (-{{FLT_MAX}}, {{FLT_MAX}}). </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. </p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong>. </p> <p>If <em>motion</em> is set to translation (<strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> or <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong>), all values of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> are valid. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, only <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> is valid (<em>origin</em> must be set to 0.0f).</p> </dd> + + + <dd> <p>The initial, or starting, snap point. All snap points are relative to this one. Only used when <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> is set. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, then <em>origin</em> must be set to 0.0f.</p> </dd> + + + + + <p>Specifies the minimum and maximum boundaries for zoom.</p> + <p>If the content is outside the new boundaries, and the viewport is {{ENABLED}} or {{READY}}, then the content is reset to be within the new boundaries. If inertia configuration is enabled, the reset operation uses an inertia animation. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The minimum zoom level allowed. Must be greater than or equal to 0.1f, which corresponds to 100% zoom.</p> </dd> + + + <dd> <p>The maximum zoom allowed. Must be greater than <em>zoomMinimum</em> and less than {{FLT_MAX}}.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Specifies the vertical alignment of the primary content in the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT}}</strong>.</p> <strong>Note</strong>??You cannot combine <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_TOP}}</strong>, <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER}}</strong>, or <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM}}</strong>. <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Gets the final transform, including inertia, of the primary content.</p> + <strong>Warning</strong>??Calling this method can cause a race condition if inertia has ended or been interrupted. This can also occur during the <strong>OnViewportStatusChanged</strong> callback.? + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transformed matrix that represents the inertia ending position.</p> </dd> + + + <dd> <p>The size of the matrix. </p> <p> This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the center point of the manipulation in content coordinates. If there is no manipulation in progress, retrieves the center point of the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The center on the horizontal axis.</p> </dd> + + + <dd> <p>The center on the vertical axis.</p> </dd> + + + + + <p>Defines methods to handle drag-drop behavior events.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when a status change happens in the viewport that the drag-and-drop behavior is attached to. </p> + <p>If a class is implementing <strong>{{IDirectManipulationViewportEventHandler}}</strong> it should also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong> if that viewport will use drag and drop. Direct Manipulation will query the <strong>{{IDirectManipulationViewportEventHandler}}</strong> instances to verify that they also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated viewport.</p> </dd> + + + <dd> <p>The current state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + <dd> <p>The previous state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Gets the status of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>This method returns the drag-drop status at the time of the call and not at the time when the return value is read.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>.</p> </dd> + + + + + <p>Defines methods to handle interactions when they are detected.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when an interaction is detected.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport on which the interaction was detected.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INTERACTION_TYPE}}</strong>.</p> </dd> + + + + + <p>Represents a time-keeping object that measures the latency of the composition infrastructure used by the application and provides this data to Direct Manipulation. +</p> + + + + <p>Retrieves the composition timing information from the compositor.</p> + <p>The system implementation of <strong>{{IDirectManipulationFrameInfoProvider}}</strong> uses DirectComposition. <strong>GetFrameStatistics</strong> is used to calculate the parameter values for <strong>GetNextFrameInfo</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current time, in milliseconds.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor begins constructing the next frame.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor finishes composing and drawing the next frame on the screen.</p> </dd> + + + + + <p> </p><p>Represents a compositor object that associates manipulated content with a drawing surface, such as <strong>canvas</strong> (Windows Store app using JavaScript) or <strong>Canvas</strong> (Windows Store app using C++, C#, or Visual Basic).</p> + <p>The content of a Direct Manipulation viewport must be manually updated during an input event for custom implementations of <strong>{{IDirectManipulationCompositor}}</strong>. Call <strong>Update</strong> to redraw the content within the viewport. </p><p>You specify manual mode on a viewport by calling either of these functions:</p><ul> <li> <strong>SetViewportOptions</strong>, with <strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE}}</strong> specified.</li> <li> <strong>SetUpdateMode</strong>, with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> specified.</li> </ul> + + + + <p>Associates content (owned by the caller) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. </p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. This can be primary content, obtained from the viewport by calling <strong>GetPrimaryContent</strong>, or secondary content, such as a panning indicator, created by calling <strong>CreateContent</strong>. +</p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Removes content from the compositor.</p> + <p>This method removes content added with <strong>AddContent</strong> and restores the original relationships between parent visuals and child visuals in the composition tree. In other words, <strong>RemoveContent</strong> undoes <strong>AddContent</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to remove from the composition tree.</p> </dd> + + + + + <p> </p><p> Sets the update manager used to send compositor updates to Direct Manipulation. </p> + <p>Retrieve <em>updateManager</em> by calling <strong>GetUpdateManager</strong>.</p><p>Call this method during Direct Manipulation initialization to connect the compositor to the <em>update manager</em>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all pending updates in the compositor to the system for rendering.</p> + <p>This method enables Direct Manipulation to flush any pending changes to its visuals before a system event, such as a process suspension.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p> </p><p>Defines methods for handling manipulation update events.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Notifies the compositor when to update inertia animation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Manages how compositor updates are sent to Direct Manipulation.</p><p>This interface enables the compositor to trigger an update on Direct Manipulation whenever there is a compositor update. The application should not call the methods of this interface directly. +</p> + + + + <p>Registers a callback that is triggered by a handle.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The event handle that triggers the callback.</p> </dd> + + + <dd> <p>The event handler to call when the event is fired.</p> </dd> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Deregisters a callback.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Updates Direct Manipulation at the current time.</p> + <p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, this implementation should call <strong>Update</strong> whenever there is a compositor update. Frame timing information can be provided to Direct Manipulation through the <strong>{{IDirectManipulationFrameInfoProvider}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents the auto-scroll animation behavior of content as it approaches the boundary of a given axis or axes.</p> + + + + <p>Performs the auto-scroll animation for the viewport this behavior is attached to. </p> + <p><strong>SetConfiguration</strong> takes effect immediately. If the content is not in inertia, and <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION_STOP}}</strong> is specified for <em>scrollMotion</em>, then this method returns {{S_FALSE}}. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> and <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong> from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. <strong>{{DIRECTMANIPULATION_MOTION_NONE}}</strong> cannot be specified.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION}}</strong>. </p> </dd> + + + + + <p>Represents a service for managing associations between a contact and a viewport.</p><p> <strong>SetContact</strong> is called when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p> + + + + <p>Specifies the amount of time to defer the execution of a call to <strong>SetContact</strong> for this <em>referenceId</em>.</p><p><strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel all scheduled calls to <strong>SetContact</strong> for this <em>referenceId</em>. </p> + <p>This function fails if the timeout specified in <strong>DeferContact</strong> has already been reached. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel the deferral set in <strong>DeferContact</strong> and process the scheduled <strong>SetContact</strong> call for this <em>referenceId</em>. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flags indicating the memory location of a resource.</p> + <p>This enum is used by <strong>QueryResourceResidency</strong>.</p> + + + <dd> <p>The resource is located in video memory.</p> </dd> + + + <dd> <p>At least some of the resource is located in {{CPU}} memory.</p> </dd> + + + <dd> <p>At least some of the resource has been paged out to the hard drive.</p> </dd> + + + + + <p> Options for handling pixels in a display surface after calling <strong>{{IDXGISwapChain1::Present1}}</strong>. </p> + <p> This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong>structures. </p><p> To use multisampling with <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling <strong>{{ID3D11Device::CreateTexture2D}}</strong> with a filled <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure (<strong>BindFlags</strong> member set to <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> and <strong>SampleDesc</strong> member with multisampling parameters). Next call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render-target view for the texture, and render your scene into the texture. Finally call <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve the multisampled texture into your non-multisampled swap chain. </p><p> The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager ({{DWM}}) for composition. In the bitblt model, which is used with the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> and <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> values, contents of the back buffer get copied into the redirection surface on each call to <strong>{{IDXGISwapChain1::Present1}}</strong>. In the flip model, which is used with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value, all back buffers are shared with the {{DWM}}. Therefore, the {{DWM}} can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics. </p><p> When you call <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip model swap chain (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>) with 0 specified in the <em>SyncInterval</em> parameter, <strong>{{IDXGISwapChain1::Present1}}</strong>'s behavior is the same as the behavior of Direct3D 9Ex's <strong>{{IDirect3DDevice9Ex::PresentEx}}</strong> with <strong>{{D3DSWAPEFFECT_FLIPEX}}</strong> and {{D3DPRESENT_FORCEIMMEDIATE}}. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames. </p><p> Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix {{GDI}} and DirectX presentation. In the flip model, the application must create the swap chain with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, and then must use <strong>GetDC</strong> on the back buffer explicitly. After the first successful call to <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip-model swap chain, {{GDI}} no longer works with the <strong>{{HWND}}</strong> that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like <strong>ScrollWindowEx</strong>. </p><p> For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas. </p> + + + + <p>Options for swap-chain behavior.</p> + <p>This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> structure and the <strong>{{IDXGISwapChain::ResizeTarget}}</strong> method.</p><p>This enumeration is also used by the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>You don't need to set <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> for swap chains that you create in full-screen mode with the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method because those swap chains already behave as if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. That is, presented content is not accessible by remote access or through the <strong>desktop duplication {{APIs}}</strong>.</p><p>Swap chains that you create with the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, and <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> methods are not protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is not set and are protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the <strong>desktop duplication {{APIs}}</strong>.</p><p>When you call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> to change the swap chain's back buffer, you can reset or change all <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> flags.</p> + + + <dd> <p>Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode. </p> </dd> + + + <dd> <p>Set this flag to enable an application to switch modes by calling <strong>{{IDXGISwapChain::ResizeTarget}}</strong>. When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.</p> </dd> + + + <dd> <p>Set this flag to enable an application to render using {{GDI}} on a swap chain or a surface. This will allow the application to call <strong>{{IDXGISurface1::GetDC}}</strong> on the 0th back buffer or a surface.</p> </dd> + + + <dd> <p>Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the <strong>desktop duplication {{APIs}}</strong>. </p> <p>This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and {{APIs}}.</p> <p>If you use this flag with windowed (<strong>{{HWND}}</strong> or <strong>{{IWindow}}</strong>) swap chains where another process created the <strong>{{HWND}}</strong>, the owner of the <strong>{{HWND}}</strong> must use the <strong>SetWindowDisplayAffinity</strong> function appropriately in order to allow calls to <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> to succeed. +</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> {{API}} instead of <strong>{{IDXGIDevice1::SetMaximumFrameLatency}}</strong>.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with <strong>CoreWindow</strong> swap chains, which are created with <strong>CreateSwapChainForCoreWindow</strong>. Apps should not create foreground swap chains if <strong>{{IDXGIOutput2::SupportsOverlays}}</strong> indicates that hardware support for overlays is not available.</p> <p>Note that <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> cannot be used to add or remove this flag.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for full-screen video. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for {{YUV}} video.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li>This flag can only be used with swap effect <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>.</li> </ul> <strong>Note</strong>??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection. ? <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling <strong>SetFullscreenState</strong>({{TRUE}}), but the recommended approach for Win32 developers is to use this tearing flag instead.</p> <p>To check for hardware support of this feature, refer to <strong>{{IDXGIFactory5::CheckFeatureSupport}}</strong>. For usage information refer to <strong>{{IDXGISwapChain::Present}}</strong> and the <strong>{{DXGI_PRESENT}}</strong> flags.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Describes timing and presentation statistics for a frame.</p> + <p>You initialize the <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure with the <strong>{{IDXGIOutput::GetFrameStatistics}}</strong> or <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> method.</p><p>You can only use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p><p>The values in the <strong>PresentCount</strong> and <strong>PresentRefreshCount</strong> members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the <strong>SyncRefreshCount</strong> and <strong>SyncQPCTime</strong> members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. +If the swap chain draws in windowed mode, these values are based on when the swap chain is created.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + + + <p>Describes a mapped rectangle that is used to access a surface.</p> + <p>The <strong>{{DXGI_MAPPED_RECT}}</strong> structure is initialized by the <strong>{{IDXGISurface::Map}}</strong> method.</p> + + + <dd> <p>A value that describes the width, in bytes, of the surface.</p> </dd> + + + <dd> <p>A reference to the image buffer of the surface.</p> </dd> + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p>Represents a handle to a shared resource.</p> + <p>To create a shared surface, pass a shared-resource handle into the <strong>{{IDXGIDevice::CreateSurface}}</strong> method.</p> + + + <dd> <p>A handle to a shared resource.</p> </dd> + + + + + <p>Describes a surface.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSurface</strong> methods.</p> + + + <dd> <p>A value describing the surface width.</p> </dd> + + + <dd> <p>A value describing the surface height.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_FORMAT}}</strong> enumerated type that describes the surface format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters for the surface.</p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSwapChain</strong> methods.</p><p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>If you create a swap chain with one buffer, specifying <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> does not cause the contents of the single buffer to be swapped with the front buffer.</p><p>For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.</p> + + + <dd> <p>A <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the backbuffer display mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_USAGE}}</strong> enumerated type that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you call <strong>{{IDXGIFactory::CreateSwapChain}}</strong> to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.</p> </dd> + + + <dd> <p>An <strong>{{HWND}}</strong> handle to the output window. This member must not be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the output is in windowed mode. <strong>{{TRUE}}</strong> if the output is in windowed mode; otherwise, <strong>{{FALSE}}</strong>. </p> <p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>; that is, do not set this member to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the <strong>BufferDesc</strong> member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. </p> <p>For more information about choosing windowed verses full screen, see <strong>{{IDXGIFactory::CreateSwapChain}}</strong>.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_EFFECT}}</strong> enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> enumerated type that describes options for swap-chain behavior.</p> </dd> + + + + + <p>Describes an adapter (or video card) using {{DXGI}} 1.1.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure provides a {{DXGI}} 1.1 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + + + <p> Don't use this structure; it is not supported and it will be removed from the header in a future release. </p> + + + <dd> <p> The primary coordinates, as an 8 by 2 array of {{FLOAT}} values. </p> </dd> + + + <dd> <p> The white points, as a 16 by 2 array of {{FLOAT}} values. </p> </dd> + + + + + <p> An <strong>{{IDXGIObject}}</strong> interface is a base interface for all {{DXGI}} objects; <strong>{{IDXGIObject}}</strong> supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object. </p> + <p><strong>{{IDXGIObject}}</strong> implements base-class functionality for the following interfaces: </p><ul> <li> <strong>{{IDXGIAdapter}}</strong> </li> <li> <strong>{{IDXGIDevice}}</strong> </li> <li> <strong>{{IDXGIFactory}}</strong> </li> <li> <strong>{{IDXGIOutput}}</strong> </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets application-defined data to the object and associates that data with a {{GUID}}.</p> + <p><strong>SetPrivateData</strong> makes a copy of the specified data and stores it with the object.</p><p>Private data that <strong>SetPrivateData</strong> stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through <strong>{{ID3D11Device::SetPrivateData}}</strong> or by a Direct3D?11 child device through <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>).</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the well-known private data {{GUID}} (<strong>{{WKPDID_D3DDebugObjectName}}</strong>) that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre><p>You can use <strong>{{WKPDID_D3DDebugObjectName}}</strong> to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks (<strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>) and with the event tracing for Windows events that we've added to Windows?8. +</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A {{GUID}} that identifies the data. Use this {{GUID}} in a call to <strong>GetPrivateData</strong> to get the data.</p> </dd> + + + <dd> <p>The size of the object's data.</p> </dd> + + + <dd> <p>A reference to the object's data.</p> </dd> + + + + + <p>Set an interface in the object's private data.</p> + <p>This {{API}} associates an interface reference with the object.</p><p>When the interface is set its reference count is incremented. When the data are overwritten (by calling {{SPD}} or {{SPDI}} with the same {{GUID}}) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the interface.</p> </dd> + + + <dd> <p>The interface to set.</p> </dd> + + + + + <p>Get a reference to the object's data.</p> + <p>If the data returned is a reference to an <strong>{{IUnknown}}</strong>, or one of its derivative classes, previously set by <strong>{{IDXGIObject::SetPrivateDataInterface}}</strong>, you must call <strong>::Release()</strong> on the reference before the reference is freed to decrement the reference count.</p><p>You can pass <strong>{{GUID_DeviceType}}</strong> in the <em>Name</em> parameter of <strong>GetPrivateData</strong> to retrieve the device type from the display adapter object (<strong>{{IDXGIAdapter}}</strong>, <strong>{{IDXGIAdapter1}}</strong>, <strong>{{IDXGIAdapter2}}</strong>). </p><p><strong>To get the type of device on which the display adapter was created</strong></p><ol> <li>Call <strong>{{IUnknown::QueryInterface}}</strong> on the <strong>{{ID3D11Device}}</strong> or <strong>{{ID3D10Device}}</strong> object to retrieve the <strong>{{IDXGIDevice}}</strong> object.</li> <li>Call <strong>GetParent</strong> on the <strong>{{IDXGIDevice}}</strong> object to retrieve the <strong>{{IDXGIAdapter}}</strong> object.</li> <li>Call <strong>GetPrivateData</strong> on the <strong>{{IDXGIAdapter}}</strong> object with <strong>{{GUID_DeviceType}}</strong> to retrieve the type of device on which the display adapter was created. <em>pData</em> will point to a value from the driver-type enumeration (for example, a value from <strong>{{D3D_DRIVER_TYPE}}</strong>).</li> </ol><p>On Windows?7 or earlier, this type is either a value from <strong>{{D3D10_DRIVER_TYPE}}</strong> or <strong>{{D3D_DRIVER_TYPE}}</strong> depending on which kind of device was created. On Windows?8, this type is always a value from <strong>{{D3D_DRIVER_TYPE}}</strong>. Don't use <strong>{{IDXGIObject::SetPrivateData}}</strong> with <strong>{{GUID_DeviceType}}</strong> because the behavior when doing so is undefined.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the data.</p> </dd> + + + <dd> <p>The size of the data.</p> </dd> + + + <dd> <p>Pointer to the data.</p> </dd> + + + + + <p>Gets the parent of the object.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>The {{ID}} of the requested interface.</p> </dd> + + + <dd> <p>The address of a reference to the parent object.</p> </dd> + + + + + <p>Inherited from objects that are tied to the device so that they can retrieve a reference to it.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Retrieves the device.</p> + <p>The type of interface that is returned can be any interface published by the device. For example, it could be an {{IDXGIDevice}} * called pDevice, and therefore the {{REFIID}} would be obtained by calling __uuidof(pDevice).</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}).</p> + + + <dd> <p>The reference id for the device.</p> </dd> + + + <dd> <p>The address of a reference to the device.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetSharedHandle</strong> anymore to retrieve the handle to a shared resource. Instead, use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> to get a handle for sharing. To use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong>, you must create the resource as shared and specify that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag). We also recommend that you create shared resources that use {{NT}} handles so you can use <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on on those shared resources.]</p><p>Gets the handle to a shared resource.</p> + <p><strong>GetSharedHandle</strong> returns a handle for the resource that you created as shared (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> with or without the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag). You can pass this handle to the <strong>{{ID3D11Device::OpenSharedResource}}</strong> method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an {{NT}} handle. Therefore, don't use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on.</p><p>The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.</p><p><strong>GetSharedHandle</strong> can also return handles for resources that were passed into <strong>{{ID3D11Device::OpenSharedResource}}</strong> to open those resources.</p><p><strong>GetSharedHandle</strong> fails if the resource to which it wants to get a handle is not shared.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Get the expected resource usage.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a usage flag (see {{DXGI_USAGE}}). For Direct3D 10, a surface can be used as a shader input or a render-target output.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get the eviction priority.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} to determine how to manage overcommitted memory.</p><p>Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the eviction priority, which determines when a resource can be evicted from memory. </p> <p>The following defined values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.</p> + <p>The <strong>{{IDXGIFactory1}}</strong> is required to create a resource capable of supporting the <strong>{{IDXGIKeyedMutex}}</strong> interface.</p><p>An <strong>{{IDXGIKeyedMutex}}</strong> should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag.</p><p>For information about creating a keyed mutex, see the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method.</p> + + + + <p>Using a key, acquires exclusive rendering access to a shared resource.</p> + <p>The <strong>AcquireSync</strong> method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>AcquireSync</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p><p>The <strong>AcquireSync</strong> method uses the key as follows, depending on the state of the surface:</p><ul> <li>On initial creation, the surface is unowned and any device can call the <strong>AcquireSync</strong> method to gain access. For an unowned device, only a key of 0 will succeed. Calling the <strong>AcquireSync</strong> method for any other key will stall the calling {{CPU}} thread.</li> <li>If the surface is owned by a device when you call the <strong>AcquireSync</strong> method, the {{CPU}} thread that called the <strong>AcquireSync</strong> method will stall until the owning device calls the <strong>ReleaseSync</strong> method using the same Key.</li> <li>If the surface is unowned when you call the <strong>AcquireSync</strong> method (for example, the last owning device has already called the <strong>ReleaseSync</strong> method), the <strong>AcquireSync</strong> method will succeed if you specify the same key that was specified when the <strong>ReleaseSync</strong> method was last called. Calling the <strong>AcquireSync</strong> method using any other key will cause a stall.</li> <li>When the owning device calls the <strong>ReleaseSync</strong> method with a particular key, and more than one device is waiting after calling the <strong>AcquireSync</strong> method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.</li> <li>A keyed mutex does not support recursive calls to the <strong>AcquireSync</strong> method.</li> </ul> + <p>Return {{S_OK}} if successful.</p><p>If the owning device attempted to create another keyed mutex on the same shared resource, <strong>AcquireSync</strong> returns {{E_FAIL}}.</p><p><strong>AcquireSync</strong> can also return the following <strong>{{DWORD}}</strong> constants. Therefore, you should explicitly check for these constants. If you only use the <strong>{{SUCCEEDED}}</strong> macro on the return value to determine if <strong>AcquireSync</strong> succeeded, you will not catch these constants.</p><ul> <li>{{WAIT_ABANDONED}} - The shared surface and keyed mutex are no longer in a consistent state. If <strong>AcquireSync</strong> returns this value, you should release and recreate both the keyed mutex and the shared surface.</li> <li>{{WAIT_TIMEOUT}} - The time-out interval elapsed before the specified key was released.</li> </ul> + + + <dd> <p>A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + <dd> <p>The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified <em>Key</em>. If this value is set to zero, the <strong>AcquireSync</strong> method will test to see if the keyed mutex has been released and returns immediately. If this value is set to {{INFINITE}}, the time-out interval will never elapse.</p> </dd> + + + + + <p>Using a key, releases exclusive rendering access to a shared resource.</p> + <p>The <strong>ReleaseSync</strong> method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>After you call the <strong>ReleaseSync</strong> method, the shared resource is unset from the rendering pipeline. </p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p> + <p>Returns {{S_OK}} if successful.</p><p>If the device attempted to release a keyed mutex that is not valid or owned by the device, <strong>ReleaseSync</strong> returns {{E_FAIL}}.</p> + + + <dd> <p>A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the <strong>ReleaseSync</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + + + <p>The <strong>{{IDXGISurface}}</strong> interface implements methods for image-data objects.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. </p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>.</p> + + + + <p>Get a description of the surface.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface description (see <strong>{{DXGI_SURFACE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>The <strong>{{IDXGISurface1}}</strong> interface extends the <strong>{{IDXGISurface}}</strong> by adding support for using Windows Graphics Device Interface ({{GDI}}) to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface1}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface1}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface1}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface1}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface1}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface1}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface1}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface1}}</strong>.</p> + + + + <p>Returns a device context ({{DC}}) that allows you to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface using Windows Graphics Device Interface ({{GDI}}).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>After you use the <strong>GetDC</strong> method to retrieve a {{DC}}, you can render to the {{DXGI}} surface by using {{GDI}}. The <strong>GetDC</strong> method readies the surface for {{GDI}} rendering and allows inter-operation between {{DXGI}} and {{GDI}} technologies. </p><p>Keep the following in mind when using this method:</p><ul> <li>You must create the surface by using the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag for a surface or by using the <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong> flag for swap chains, otherwise this method fails.</li> <li>You must release the device and call the <strong>{{IDXGISurface1::ReleaseDC}}</strong> method before you issue any new Direct3D commands.</li> <li>This method fails if an outstanding {{DC}} has already been created by this method.</li> <li>The format for the surface or swap chain must be <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</li> <li>On <strong>GetDC</strong>, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong> method on the device prior to Direct3D rendering after {{GDI}} rendering.</li> <li>Prior to resizing buffers you must release all outstanding {{DCs}}.</li> </ul><p> You can also call <strong>GetDC</strong> on the back buffer at index 0 of a swap chain by obtaining an <strong>{{IDXGISurface1}}</strong> from the swap chain. The following code illustrates the process.</p><pre> {{IDXGISwapChain}}* g_pSwapChain = {{NULL}}; +{{IDXGISurface1}}* g_pSurface1 = {{NULL}}; +... +//Setup the device and and swapchain +g_pSwapChain-&gt;GetBuffer(0, __uuidof({{IDXGISurface1}}), (void**) &amp;g_pSurface1); +g_pSurface1-&gt;GetDC( {{FALSE}}, &amp;g_hDC ); +... +//Draw on the {{DC}} using {{GDI}} +... +//When finish drawing release the {{DC}} +g_pSurface1-&gt;ReleaseDC( {{NULL}} ); </pre> + <p>Returns {{S_OK}} if successful; otherwise, an error code.</p> + + + <dd> <p>A Boolean value that specifies whether to preserve Direct3D contents in the {{GDI}} {{DC}}. <strong>{{TRUE}}</strong> directs the runtime not to preserve Direct3D contents in the {{GDI}} {{DC}}; that is, the runtime discards the Direct3D contents. <strong>{{FALSE}}</strong> guarantees that Direct3D contents are available in the {{GDI}} {{DC}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{HDC}}</strong> handle that represents the current device context for {{GDI}} rendering.</p> </dd> + + + + + <p>Releases the {{GDI}} device context ({{DC}}) that is associated with the current surface and allows you to use Direct3D to render.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>ReleaseDC</strong> method to release the {{DC}} and indicate that your application finished all {{GDI}} rendering to this surface. You must call the <strong>ReleaseDC</strong> method before you can use Direct3D to perform additional rendering.</p><p>Prior to resizing buffers you must release all outstanding {{DCs}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for {{GDI}} rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in <strong>{{NULL}}</strong>, <strong>ReleaseDC</strong> considers the whole surface as dirty. Otherwise, <strong>ReleaseDC</strong> uses the area specified by the {{RECT}} as a performance hint to indicate what areas have been manipulated by {{GDI}} rendering.</p> <p>You can pass a reference to an empty <strong>{{RECT}}</strong> structure (a rectangle with no position or area) if you didn't change any content.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerate adapter (video card) outputs.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>When the <strong>EnumOutputs</strong> method succeeds and fills the <em>ppOutput</em> parameter with the address of the reference to the output interface, <strong>EnumOutputs</strong> increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the <strong>Release</strong> method to decrement the reference count.</p><p><strong>EnumOutputs</strong> first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. <strong>EnumOutputs</strong> then returns other outputs.</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}). {{DXGI_ERROR_NOT_FOUND}} is returned if the index is greater than the number of outputs.</p><p>If the adapter came from a device created using {{D3D_DRIVER_TYPE_WARP}}, then the adapter has no outputs, so {{DXGI_ERROR_NOT_FOUND}} is returned. +</p> + + + <dd> <p>The index of the output.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIOutput}}</strong> interface at the position specified by the <em>Output</em> parameter.</p> </dd> + + + + + <p>Gets a {{DXGI}} 1.0 description of an adapter (or video card).</p> + <p>Graphics apps can use the {{DXGI}} {{API}} to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model ({{WDDM}}) drivers. The following are the critical steps involved.</p><ul> <li> Graphics driver model determination ? Because {{DXGI}} is only available on systems with {{WDDM}} drivers, the app must first confirm the driver model by using the following {{API}}. <pre> HasWDDMDriver() +{ {{LPDIRECT3DCREATE9EX}} pD3D9Create9Ex = {{NULL}}; {{HMODULE}} hD3D9 = {{NULL}}; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( {{NULL}} == hD3D9 ) { return false; } // /* Try to create {{IDirect3D9Ex}} interface (also known as a {{DX9L}} interface). This interface can only be created if the driver is a {{WDDM}} driver. */ // pD3D9Create9Ex = ({{LPDIRECT3DCREATE9EX}}) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != {{NULL}}; +} </pre> </li> <li> Retrieval of graphics memory values.? After the app determines the driver model to be {{WDDM}}, the app can use the Direct3D 10 or later {{API}} and {{DXGI}} to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that contains the amount of available graphics memory. <pre> {{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +{{IDXGIAdapter}} * pDXGIAdapter; +pDXGIDevice-&gt;GetAdapter(&amp;pDXGIAdapter); +{{DXGI_ADAPTER_DESC}} adapterDesc; +pDXGIAdapter-&gt;GetDesc(&amp;adapterDesc); </pre> </li> </ul> + <p>Returns {{S_OK}} if successful; otherwise returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p>Checks whether the system supports a device interface for a graphics component.</p> + <strong>Note</strong>??You can use <strong>CheckInterfaceSupport</strong> only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista {{SP1}} and later versions of the operating system. If you try to use <strong>CheckInterfaceSupport</strong> to check whether a Direct3D 11.x and later version interface is supported, <strong>CheckInterfaceSupport</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Therefore, do not use <strong>CheckInterfaceSupport</strong>. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the <strong>{{ID3D11Device::CreateBlendState}}</strong> method and it fails, the operating system does not support the <strong>{{ID3D11BlendState}}</strong> interface.? + <p>{{S_OK}} indicates that the interface is supported, otherwise {{DXGI_ERROR_UNSUPPORTED}} is returned (For more information, see {{DXGI_ERROR}}).</p> + + + <dd> <p>The {{GUID}} of the interface of the device version for which support is being checked. For example, __uuidof({{ID3D10Device}}).</p> </dd> + + + <dd> <p>The user mode driver version of <em>InterfaceName</em>. This is returned only if the interface is supported, otherwise this parameter will be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Get a description of the output.</p> + <p> On a high {{DPI}} desktop, <strong>GetDesc</strong> returns the visualized screen size unless the app is marked high {{DPI}} aware. For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> + <p>Returns a code that indicates success or failure. {{S_OK}} if successful, {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> is passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to the output description (see <strong>{{DXGI_OUTPUT_DESC}}</strong>).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>FindClosestMatchingMode</strong> anymore to find the display mode that most closely matches the requested display mode. Instead, use <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong>, which supports stereo display mode.]</p><p>Finds the display mode that most closely matches the requested display mode.</p> + <p><strong>FindClosestMatchingMode</strong> behaves similarly to the <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> except <strong>FindClosestMatchingMode</strong> considers only the mono display modes. <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> considers only stereo modes if you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure that <em>pModeToMatch</em> points to, and considers only mono modes if <strong>Stereo</strong> is not set.</p><p> <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> returns a matched display-mode set with only stereo modes or only mono modes. +<strong>FindClosestMatchingMode</strong> behaves as though you specified the input mode as mono.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Halt a thread until the next vertical blank occurs.</p> + <p>A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Takes ownership of an output.</p> + <p>When you are finished with the output, call <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>.</p><p><strong>TakeOwnership</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a device (such as an <strong>{{ID3D10Device}}</strong>).</p> </dd> + + + <dd> <p>Set to <strong>{{TRUE}}</strong> to enable other threads or applications to take ownership of the device; otherwise, set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Releases ownership of the output.</p> + <p>If you are not using a swap chain, get access to an output by calling <strong>{{IDXGIOutput::TakeOwnership}}</strong> and release it when you are finished by calling <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>. An application that uses a swap chain will typically not call either of these methods.</p> + <p>Returns nothing.</p> + + + + <p>Gets a description of the gamma-control capabilities.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a description of the gamma-control capabilities (see <strong>{{DXGI_GAMMA_CONTROL_CAPABILITIES}}</strong>).</p> </dd> + + + + + <p>Sets the gamma controls.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure that describes the gamma curve to set.</p> </dd> + + + + + <p>Gets the gamma control settings.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>An array of gamma control settings (see <strong>{{DXGI_GAMMA_CONTROL}}</strong>).</p> </dd> + + + + + <p>Changes the display mode.</p> + <p><strong>{{IDXGIOutput::SetDisplaySurface}}</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p><p>This method should only be called between <strong>{{IDXGIOutput::TakeOwnership}}</strong> and <strong>{{IDXGIOutput::ReleaseOwnership}}</strong> calls.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a surface (see <strong>{{IDXGISurface}}</strong>) used for rendering an image to the screen. The surface must have been created as a back buffer ({{DXGI_USAGE_BACKBUFFER}}).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplaySurfaceData</strong> anymore to retrieve the current display surface. Instead, use <strong>{{IDXGIOutput1::GetDisplaySurfaceData1}}</strong>, which supports stereo display mode.]</p><p>Gets a copy of the current display surface.</p> + <p><strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> can only be called when an output is in full-screen mode. If the method succeeds, {{DXGI}} fills the destination surface.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with {{CPU}}-write permission (see {{D3D10_CPU_ACCESS_WRITE}}). Other surfaces should be created with {{CPU}} read-write permission (see {{D3D10_CPU_ACCESS_READ_WRITE}}). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Gets statistics about recently rendered frames.</p> + <p>This {{API}} is similar to <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p><p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.? + <p>If this function succeeds, it returns {{S_OK}}. Otherwise, it might return {{DXGI_ERROR_INVALID_CALL}}.</p> + + + <dd> <p>A reference to frame statistics (see <strong>{{DXGI_FRAME_STATISTICS}}</strong>).</p> </dd> + + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + <p>Accesses one of the swap-chain's back buffers.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A zero-based buffer index. </p> <p>If the swap chain's swap effect is <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong>, this method can only access the first buffer; for this situation, set the index to zero.</p> <p>If the swap chain's swap effect is either <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the <strong>{{IDXGIResource::GetUsage}}</strong> method for such buffers, they have the <strong>{{DXGI_USAGE_READ_ONLY}}</strong> flag set.</p> </dd> + + + <dd> <p>The type of interface used to manipulate the buffer.</p> </dd> + + + <dd> <p>A reference to a back-buffer interface.</p> </dd> + + + + + <p>Sets the display state to windowed or full screen.</p> + <p>{{DXGI}} may change the display state of a swap chain in response to end user or system requests.</p><p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>SetFullscreenState</strong>; that is, do not set the <strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.</p> + <p>This methods returns: </p><ul> <li>{{S_OK}} if the action succeeded and the swap chain was placed in the requested state.</li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance: <ul> <li>The application is running over Terminal Server.</li> <li>The output window is occluded.</li> <li>The output window does not have keyboard focus.</li> <li>Another application is already in full-screen mode.</li> </ul> <p>When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.</p> </li> <li>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}} is returned if a fullscreen/windowed mode transition is occurring when this {{API}} is called.</li> <li>Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.</li> </ul> + + + <dd> <p>A Boolean value that specifies whether to set the display state to windowed or full screen. <strong>{{TRUE}}</strong> for full screen, and <strong>{{FALSE}}</strong> for windowed.</p> </dd> + + + <dd> <p>If you pass <strong>{{TRUE}}</strong> to the <em>Fullscreen</em> parameter to set the display state to full screen, you can optionally set this parameter to a reference to an <strong>{{IDXGIOutput}}</strong> interface for the output target that contains the swap chain. If you set this parameter to <strong>{{NULL}}</strong>, {{DXGI}} will choose the output based on the swap-chain's device and the output window's placement. If you pass <strong>{{FALSE}}</strong> to <em>Fullscreen</em>, you must set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Get the state associated with full-screen mode.</p> + <p>When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a boolean whose value is either: +</p> <ul> <li><strong>{{TRUE}}</strong> if the swap chain is in full-screen mode</li> <li><strong>{{FALSE}}</strong> if the swap chain is in windowed mode</li> </ul> </dd> + + + <dd> <p>A reference to the output target (see <strong>{{IDXGIOutput}}</strong>) when the mode is full screen; otherwise <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDesc</strong> anymore to get a description of the swap chain. Instead, use <strong>{{IDXGISwapChain1::GetDesc1}}</strong>.]</p><p>Get a description of the swap chain.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized. </p> + <p> You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for <strong>ResizeBuffers</strong> to succeed. </p><p> Direct references are held by the application after it calls <strong>AddRef</strong> on a resource. </p><p> Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on. </p><p> Before you call <strong>ResizeBuffers</strong>, ensure that the application releases all references (by calling the appropriate number of <strong>Release</strong> invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use <strong>{{ID3D11DeviceContext::ClearState}}</strong> to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling <strong>{{ID3D11DeviceContext::ClearState}}</strong>, then <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong>, then <strong>Release</strong> on the command list). After you call <strong>ResizeBuffers</strong>, you can re-query interfaces via <strong>{{IDXGISwapChain::GetBuffer}}</strong>. </p><p> For swap chains that you created with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, before you call <strong>ResizeBuffers</strong>, also call <strong>{{IDXGISurface1::ReleaseDC}}</strong> on the swap chain's back-buffer surface to ensure that you have no outstanding {{GDI}} device contexts ({{DCs}}) open. </p><p> We recommend that you call <strong>ResizeBuffers</strong> when a client window is resized (that is, when an application receives a {{WM_SIZE}} message). </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + + + <p>Resizes the output target.</p> + <p><strong>ResizeTarget</strong> resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call <strong>ResizeTarget</strong> to resize the target window (rather than a Microsoft Win32API such as <strong>SetWindowPos</strong>) without knowledge of the swap chain display mode.</p><p>If a Windows Store app calls <strong>ResizeTarget</strong>, it fails with {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}.</p><p>You cannot call <strong>ResizeTarget</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p><p>Apps must still call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> after they call <strong>ResizeTarget</strong> because only <strong>ResizeBuffers</strong> can change the back buffers. But, if those apps have implemented window resize processing to call <strong>ResizeBuffers</strong>, they don't need to explicitly call <strong>ResizeBuffers</strong> after they call <strong>ResizeTarget</strong> because the window resize processing will achieve what the app requires.</p> + <p>Returns a code that indicates success or failure. <strong>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}}</strong> is returned if a full-screen/windowed mode transition is occurring when this {{API}} is called. See {{DXGI_ERROR}} for additional {{DXGI}} error codes.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>ResizeTarget</strong> uses the existing format. We only recommend that you use <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> when the swap chain is in full-screen mode as this method is not thread safe.</p> </dd> + + + + + <p>Get the output (the display monitor) that contains the majority of the client area of the target window.</p> + <p>If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p><p>You cannot call <strong>GetContainingOutput</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the output interface (see <strong>{{IDXGIOutput}}</strong>).</p> </dd> + + + + + <p>Gets performance statistics about the last render frame.</p> + <p>You cannot use <strong>GetFrameStatistics</strong> for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.</p><p>You can only use <strong>GetFrameStatistics</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure for the frame statistics.</p> </dd> + + + + + <p>Gets the number of times that <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> has been called.</p> + <p>For info about presentation statistics for a frame, see <strong>{{DXGI_FRAME_STATISTICS}}</strong>.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p> An <strong>{{IDXGIFactory}}</strong> interface implements methods for generating {{DXGI}} objects (which handle full screen transitions). </p> + <p> Create a factory by calling <strong>CreateDXGIFactory</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice}} * pDXGIDevice = nullptr; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter = nullptr; +hr = pDXGIDevice-&gt;GetAdapter( &amp;pDXGIAdapter ); {{IDXGIFactory}} * pIDXGIFactory = nullptr; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory}}), (void **)&amp;pIDXGIFactory);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerates the adapters (video cards).</p> + <p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters</strong> next returns other adapters with outputs. <strong>EnumAdapters</strong> finally returns adapters without outputs. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Allows {{DXGI}} to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The combination of <em>WindowHandle</em> and <em>Flags</em> informs {{DXGI}} to stop monitoring window messages for the previously-associated window.</p><p>If the application switches to full-screen mode, {{DXGI}} will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.</p><p>Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a {{WM_SIZE}} message, the application should release any outstanding swap-chain back buffers, call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, {{DXGI}} will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to <strong>ResizeBuffers</strong> on {{WM_SIZE}} is always recommended, since {{WM_SIZE}} is always sent during a fullscreen transition.</p><p>While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but {{UI}} elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field {{WM_SIZING}}, then check against <strong>{{IDXGIOutput::FindClosestMatchingMode}}</strong>. If a matching mode is found, allow the resize. (The {{IDXGIOutput}} can be retrieved from <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)</p><p>Applications that want to handle mode changes or Alt+Enter themselves should call <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swap chain creation. The <em>WindowHandle</em> argument, if non-<strong>{{NULL}}</strong>, specifies that the application message queues will not be handled by the {{DXGI}} runtime for all swap chains of a particular target <strong>{{HWND}}</strong>. Calling <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swapchain creation ensures that {{DXGI}} will not interfere with application's handling of window mode changes or Alt+Enter.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is invalid, or {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>The handle of the window that is to be monitored. This parameter can be <strong>{{NULL}}</strong>; but only if the flags are also 0. </p> </dd> + + + <dd> <p>One or more of the following values: +</p> <ul> <li>{{DXGI_MWA_NO_WINDOW_CHANGES}} - Prevent {{DXGI}} from monitoring an applications message queue; this makes {{DXGI}} unable to respond to mode changes.</li> <li>{{DXGI_MWA_NO_ALT_ENTER}} - Prevent {{DXGI}} from responding to an alt-enter sequence.</li> <li>{{DXGI_MWA_NO_PRINT_SCREEN}} - Prevent {{DXGI}} from responding to a print-screen key.</li> </ul> </dd> + + + + + <p>Get the window through which the user controls the transition to and from full screen.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.? + <p>Returns a code that indicates success or failure. <strong>{{S_OK}}</strong> indicates success, {{DXGI_ERROR_INVALID_CALL}} indicates <em>pWindowHandle</em> was passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a window handle.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>CreateSwapChain</strong> anymore to create a swap chain. Instead, use <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, or <strong>CreateSwapChainForComposition</strong> depending on how you want to create the swap chain.]</p><p>Creates a swap chain.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and {{DXGI_STATUS_OCCLUDED}} will be returned.</p><p>If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.</p><p>Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:</p><ul> <li>Create a windowed swap chain and then set it full-screen using <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>.</li> <li>Save a reference to the swap chain immediately after creation, and use it to get the output window size during a {{WM_SIZE}} event. Then resize the swap chain buffers (with <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>) during the transition from windowed to full-screen.</li> </ul><p>If the swap chain is in full-screen mode, before you release it you must use <strong>SetFullscreenState</strong> to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of {{DXGI}} Overview.</p><p>After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to <strong>{{IDXGISwapChain::Present}}</strong>. To work around this issue, we recommend that you execute the following code right after you call <strong>CreateSwapChain</strong> to create a full-screen swap chain (<strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> set to <strong>{{FALSE}}</strong>). +</p><pre> // Detect if newly created full-screen swap chain isn't actually full screen. +{{IDXGIOutput}}* pTarget; {{BOOL}} bFullscreen; +if ({{SUCCEEDED}}(pSwapChain-&gt;GetFullscreenState(&amp;bFullscreen, &amp;pTarget))) +{ pTarget-&gt;Release(); +} +else bFullscreen = {{FALSE}}; +// If not full screen, enable full screen again. +if (!bFullscreen) +{ ShowWindow(hWnd, {{SW_MINIMIZE}}); ShowWindow(hWnd, {{SW_RESTORE}}); pSwapChain-&gt;SetFullscreenState({{TRUE}}, {{NULL}}); +} +</pre><p>You can specify <strong>{{DXGI_SWAP_EFFECT}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> values in the swap-chain description that <em>pDesc</em> points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 {{APIs}}.</p><p>However, to use stereo presentation and to change resize behavior for the flip model, applications must use the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>, {{DXGI_STATUS_OCCLUDED}} if you request full-screen mode and it is unavailable, or {{E_OUTOFMEMORY}}. Other error codes defined by the type of device passed in may also be returned.</p> + + + + <p>Create an adapter interface that represents a software adapter.</p> + <p>A software adapter is a {{DLL}} that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.</p><p>Calling this method will increment the module's reference count by one. The reference count can be decremented by calling <strong>FreeLibrary</strong>.</p><p>The typical calling scenario is to call <strong>LoadLibrary</strong>, pass the handle to <strong>CreateSoftwareAdapter</strong>, then immediately call <strong>FreeLibrary</strong> on the {{DLL}} and forget the {{DLL}}'s <strong>{{HMODULE}}</strong>. Since the software adapter calls <strong>FreeLibrary</strong> when it is destroyed, the lifetime of the {{DLL}} will now be owned by the adapter, and the application is free of any further consideration of its lifetime.</p> + <p>A return code indicating success or failure.</p> + + + <dd> <p>Handle to the software adapter's dll. {{HMODULE}} can be obtained with <strong>GetModuleHandle</strong> or <strong>LoadLibrary</strong>.</p> </dd> + + + <dd> <p>Address of a reference to an adapter (see <strong>{{IDXGIAdapter}}</strong>).</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Returns the adapter for the specified device.</p> + <p>If the <strong>GetAdapter</strong> method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the {{DXGI_ERROR}} that indicates failure. If the <em>pAdapter</em> parameter is <strong>{{NULL}}</strong> this method returns {{E_INVALIDARG}}.</p> + + + <dd> <p>The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Returns a surface. This method is used internally and you should not call it directly in your application.</p> + <p>The <strong>CreateSurface</strong> method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.</p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when it calls <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>. +</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SURFACE_DESC}}</strong> structure that describes the surface.</p> </dd> + + + <dd> <p>The number of surfaces to create.</p> </dd> + + + <dd> <p>A {{DXGI_USAGE}} flag that specifies how the surface is expected to be used.</p> </dd> + + + <dd> <p>An optional reference to a <strong>{{DXGI_SHARED_RESOURCE}}</strong> structure that contains shared resource information for opening views of such resources.</p> </dd> + + + <dd> <p>The address of an <strong>{{IDXGISurface}}</strong> interface reference to the first created surface.</p> </dd> + + + + + <p>Gets the residency status of an array of resources.</p> + <p>The information returned by the <em>pResidencyStatus</em> argument array describes the residency status at the time that the <strong>QueryResourceResidency</strong> method was called. </p><strong>Note</strong>??The residency status will constantly change.?<p>If you call the <strong>QueryResourceResidency</strong> method during a device removed state, the <em>pResidencyStatus</em> argument will return the <strong>{{DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY}}</strong> flag.</p><strong>Note</strong>??This method should not be called every frame as it incurs a non-trivial amount of overhead.? + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_DEVICE_REMOVED}}, {{E_INVALIDARG}}, or {{E_POINTER}} (see Common {{HRESULT}} Values and WinError.h for more information).</p> + + + <dd> <p>An array of <strong>{{IDXGIResource}}</strong> interfaces.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RESIDENCY}}</strong> flags. Each element describes the residency status for corresponding element in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array and <em>pResidencyStatus</em> argument array.</p> </dd> + + + + + <p>Sets the {{GPU}} thread priority.</p> + <p>The values for the <em>Priority</em> parameter function as follows:</p><ul> <li>Positive values increase the likelihood that the {{GPU}} scheduler will grant {{GPU}} execution cycles to the device when rendering.</li> <li>Negative values lessen the likelihood that the device will receive {{GPU}} execution cycles when devices compete for them.</li> <li>The device is guaranteed to receive some {{GPU}} execution cycles at all settings.</li> </ul><p>To use the <strong>SetGPUThreadPriority</strong> method, you should have a comprehensive understanding of {{GPU}} scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the <strong>SetGPUThreadPriority</strong> method can impede rendering speed and result in a poor user experience.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Priority</em> parameter is invalid.</p> + + + <dd> <p>A value that specifies the required {{GPU}} thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>Gets the {{GPU}} thread priority.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_POINTER}} if the <em>pPriority</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a variable that receives a value that indicates the current {{GPU}} thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>The <strong>{{IDXGIFactory1}}</strong> interface implements methods for generating {{DXGI}} objects.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>To create a factory, call the <strong>CreateDXGIFactory1</strong> function.</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong> or <strong>{{IDXGIDevice1}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory1}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory1}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Enumerates both adapters (video cards) with or without outputs.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory1}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters1</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters1</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters1</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters1</strong> next returns other adapters with outputs. <strong>EnumAdapters1</strong> finally returns adapters without outputs.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter1}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Informs an application of the possible need to re-enumerate adapters.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p> + <p><strong>{{FALSE}}</strong>, if a new adapter is becoming available or the current adapter is going away. <strong>{{TRUE}}</strong>, no adapter changes.</p><p><strong>IsCurrent</strong> returns <strong>{{FALSE}}</strong> to inform the calling application to re-enumerate adapters.</p> + + + + <p> The <strong>{{IDXGIAdapter1}}</strong> interface represents a display sub-system (including one or more {{GPU}}'s, {{DACs}} and video memory). </p> + <p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p>A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.</p><p> To enumerate the display sub-systems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Gets a {{DXGI}} 1.1 description of an adapter (or video card).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>GetDesc1</strong> method to get a {{DXGI}} 1.1 description of an adapter. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter}}</strong> method.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC1}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice1}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p>This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>) and the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> method if desired. </p><p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p> The <strong>{{IDXGIDevice1}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice1}}</strong> interface. To retrieve the <strong>{{IDXGIDevice1}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.</p> </dd> + + + + + <p>Gets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.0 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the fullscreen display mode.</p><p>If the <strong>CreateDXGIFactory</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory::Release}}</strong> method to release the interface.</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>?<p>The <strong>CreateDXGIFactory</strong> function does not exist for Windows Store apps. Instead, Windows Store apps use the <strong>CreateDXGIFactory1</strong> function.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory}}</strong> object.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.1 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} 1.1 factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the full-screen display mode. </p><p>If the <strong>CreateDXGIFactory1</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory1}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory1::Release}}</strong> method to release the interface.</p><p>This entry point is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory1</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory1}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory1}}</strong> object.</p> </dd> + + + + + <p> Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type. </p> + + + + <dd> <p>The format is not known.</p> </dd> + + + <dd> <p>A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8</p> </dd> + + + <dd> <p>A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A three-component, 96-bit typeless format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8</p> </dd> + + + <dd> <p>A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit signed-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8</p> </dd> + + + <dd> <p>A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit typeless format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit typeless format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit typeless format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format for alpha only.</p> </dd> + + + <dd> <p>A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{UYVY}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{YUY2}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V-&gt;{{R8}}, +U-&gt;{{G8}}, +Y-&gt;{{B8}}, +and A-&gt;{{A8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R10}}, +Y-&gt;{{G10}}, +V-&gt;{{B10}}, +and A-&gt;{{A2}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R16}}, +Y-&gt;{{G16}}, +V-&gt;{{B16}}, +and A-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_P010}} is no different than {{DXGI_FORMAT_P016}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit per channel planar {{YUV}} 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any {{RECT}} that are used for this format are multiples of 2. This format differs from {{DXGI_FORMAT_NV12}} in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the {{CPU}} to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-{{NV12}} 4:2:0 layout (for example, {{YV12}}, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than {{NV12}} can be used when the application does not need the data to be in a standard layout. </p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. </p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt;{{G8}}, +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt;{{A8}}.</p> <p>A unique valid view format for this video resource format is {{DXGI_FORMAT_R8G8_B8G8_UNORM}}. With this view format, the width of the view appears to be twice what the {{DXGI_FORMAT_R8G8B8A8_UNORM}} or {{DXGI_FORMAT_R8G8B8A8_UINT}} view would be when hardware reconstructs {{RGBA}} automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt; +{{G8}}[0], +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt; +{{G8}}[1].</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_Y210}} is no different than {{DXGI_FORMAT_Y216}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common planar {{YUV}} 4:1:1 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the {{UV}} plane, and the remainder is padding. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format that is used for palletized {{RGB}} data when the processor processes {{ISDB}}-T data and for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format with 8 bits of alpha that is used for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A video format; an 8-bit version of a hybrid planar 4:2:2 format.</p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4 rendering format. </p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4:4:4 rendering format. </p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Flags used with <strong>ReportLiveObjects</strong> to specify the amount of info to report about an object's lifetime. </p> + <p> Use this enumeration with <strong>{{IDXGIDebug::ReportLiveObjects}}</strong>. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Values that specify categories of debug messages.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. When you create an info queue filter, you can use these values to allow or deny any categories of messages to pass through the storage and retrieval filters.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Unknown category.</p> </dd> + + + <dd> <p>Miscellaneous category.</p> </dd> + + + <dd> <p>Initialization category.</p> </dd> + + + <dd> <p>Cleanup category.</p> </dd> + + + <dd> <p>Compilation category.</p> </dd> + + + <dd> <p>State creation category.</p> </dd> + + + <dd> <p>State setting category.</p> </dd> + + + <dd> <p>State getting category.</p> </dd> + + + <dd> <p>Resource manipulation category.</p> </dd> + + + <dd> <p>Execution category.</p> </dd> + + + <dd> <p>Shader category.</p> </dd> + + + + + <p>Values that specify debug message severity levels for an information queue.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. Also, use this enumeration with <strong>{{IDXGIInfoQueue::AddApplicationMessage}}</strong>. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Defines some type of corruption that has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> </dd> + + + + + <p>Describes a debug message in the information queue.</p> + <p> <strong>{{IDXGIInfoQueue::GetMessage}}</strong> returns a reference to this structure.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of the message string at <strong>pDescription</strong>, in bytes.</p> </dd> + + + + + <p>Describes the types of messages to allow or deny to pass through a filter.</p> + <p>This structure is a member of the <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure.</p><p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + + + <dd> <p>The number of message categories to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong> enumeration values that describe the message categories to allow or deny. The array must have at least <strong>NumCategories</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong> enumeration values that describe the message severity levels to allow or deny. The array must have at least <strong>NumSeverities</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>An array of integers that represent the message {{IDs}} to allow or deny. The array must have at least <strong>NumIDs</strong> number of elements.</p> </dd> + + + + + <p>Describes a debug message filter, which contains lists of message types to allow and deny.</p> + <p>Use with an <strong>{{IDXGIInfoQueue}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to allow.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to deny.</p> </dd> + + + + + <p>This interface controls the debug information queue, and can only be used if the debug layer is turned on.</p> + <p>This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function.</p><p>For more info about the debug layer, see Debug Layer.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the maximum number of messages that can be added to the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the limit on the number of messages.</p> </dd> + + + <dd> <p>The maximum number of messages that can be added to the queue. ?1 means no limit.</p> </dd> + + + + + <p>Clears all messages from the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that clears the messages.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p>Gets the number of messages that can pass through a retrieval filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that can pass through a retrieval filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages currently stored in the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages currently stored in the message queue.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{IDXGIInfoQueue::GetMessageCountLimit}}</strong> and <strong>{{IDXGIInfoQueue::SetMessageCountLimit}}</strong>, respectively. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that were discarded.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue reaches the maximum limit, new messages coming in push old messages out.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the maximum number of messages that can be added to the queue. ?1 means no limit.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that a storage filter allowed to pass through.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages allowed by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were denied passage through a storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages denied by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Adds storage filters to the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the storage filter at the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetStorageFilter</strong> outputs the size of the storage filter.</p> </dd> + + + + + <p>Removes a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty storage filter.</p> </dd> + + + + + <p>Pushes a deny-all storage filter onto the storage-filter stack.</p> + <p>A deny-all storage filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + + + <p>Pushes a copy of the storage filter that is currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the storage filter.</p> </dd> + + + + + <p>Pushes a storage filter onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the storage-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the storage-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds retrieval filters to the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the retrieval filter at the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetRetrievalFilter</strong> outputs the size of the retrieval filter.</p> </dd> + + + + + <p>Removes a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty retrieval filter.</p> </dd> + + + + + <p>Pushes a deny-all retrieval filter onto the retrieval-filter stack.</p> + <p>A deny-all retrieval filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the deny-all retrieval filter.</p> </dd> + + + + + <p>Pushes a copy of the retrieval filter that is currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the retrieval filter.</p> </dd> + + + + + <p>Pushes a retrieval filter onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the retrieval-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the retrieval-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds a debug message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Adds a user-defined message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Sets a message category to break on when a message with that category passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnCategory</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnSeverity</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnID</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the break on a message category is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this category of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + + + <p>Determines whether the break on a message severity level is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this severity of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + + + <p>Determines whether the break on a message identifier is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this break on a message identifier is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + + + <p>Turns the debug output on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to turn the debug output on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the debug output is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether the debug output is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + + + <p>This interface controls debug settings, and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function. </p><p> For more info about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Reports info about the lifetime of an object or objects.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the object or objects to get info about. Use one of the <strong>{{DXGI_DEBUG_ID}}</strong> {{GUIDs}}.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_DEBUG_RLO_FLAGS}}</strong>-typed value that specifies the amount of info to report.</p> </dd> + + + + + <p>Controls debug settings for Microsoft DirectX Graphics Infrastructure ({{DXGI}}). You can use the <strong>{{IDXGIDebug1}}</strong> interface in Windows Store apps. </p> + <p>Call the <strong>{{DXGIGetDebugInterface1}}</strong> function to obtain the <strong>{{IDXGIDebug1}}</strong> interface.</p><p>The <strong>{{IDXGIDebug1}}</strong> interface can be used only if the debug layer is turned on. For more info, see Debug Layer.</p> + + + + + + + + + + + + + <p>Retrieves a debugging interface.</p> + <p> <strong>{{IDXGIDebug}}</strong> and <strong>{{IDXGIInfoQueue}}</strong> are debugging interfaces.</p><p>To access <strong>{{DXGIGetDebugInterface}}</strong>, call the <strong>GetModuleHandle</strong> function to get Dxgidebug.dll and the <strong>GetProcAddress</strong> function to get the address of <strong>{{DXGIGetDebugInterface}}</strong>.</p><p><strong>Windows?8.1:??</strong>Starting in Windows?8.1, Windows Store apps call the <strong>{{DXGIGetDebugInterface1}}</strong> function to get an <strong>{{IDXGIDebug1}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Flags indicating the method the raster uses to create an image on a surface.</p> + <p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Scanline order is unspecified.</p> </dd> + + + <dd> <p>The image is created from the first scanline to the last without skipping any.</p> </dd> + + + <dd> <p>The image is created beginning with the upper field.</p> </dd> + + + <dd> <p>The image is created beginning with the lower field.</p> </dd> + + + + + <p>Flags indicating how an image is stretched to fit a given monitor's resolution.</p> + <p>Selecting the {{CENTERED}} or {{STRETCHED}} modes can result in a mode change even if you specify the native resolution of the display in the {{DXGI_MODE_DESC}}. If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via {{ALT}}+{{ENTER}} or <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>), you should use {{UNSPECIFIED}}.</p><p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Unspecified scaling.</p> </dd> + + + <dd> <p>Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an {{LED}} display).</p> </dd> + + + <dd> <p>Specifies stretched scaling.</p> </dd> + + + + + <p>Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.</p> + + + <dd> <p>Unspecified rotation.</p> </dd> + + + <dd> <p>Specifies no rotation.</p> </dd> + + + <dd> <p>Specifies 90 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 180 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 270 degrees of rotation.</p> </dd> + + + + + <p>Represents an {{RGB}} color.</p> + <p>This structure is a member of the <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure.</p> + + + <dd> <p>A value representing the color of the red component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the green component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the blue component. The range of this value is between 0 and 1.</p> </dd> + + + + + <p>Describes color values.</p> + <p>You can set the members of this structure to values outside the range of 0 through 1 to implement some unusual effects. Values greater than 1 produce strong lights that tend to wash out a scene. Negative values produce dark lights that actually remove light from a scene. </p> + + + <dd> <p>Floating-point value that specifies the red component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the red component, while a value of 1.0 indicates that red is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the green component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the green component, while a value of 1.0 indicates that green is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the blue component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the blue component, while a value of 1.0 indicates that blue is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the alpha component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates fully transparent, while a value of 1.0 indicates fully opaque.</p> </dd> + + + + + <p>Controls the settings of a gamma curve.</p> + <p>The <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure is used by the <strong>{{IDXGIOutput::SetGammaControl}}</strong> method.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with scalar values that are applied to rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with offset values that are applied to the rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RGB}}</strong> structures that control the points of a gamma curve.</p> </dd> + + + + + <p>Controls the gamma capabilities of an adapter.</p> + <p>To get a list of the capabilities for controlling gamma correction, call <strong>{{IDXGIOutput::GetGammaControlCapabilities}}</strong>.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>True if scaling and offset operations are supported during gamma correction; otherwise, false.</p> </dd> + + + <dd> <p>A value describing the maximum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the minimum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the number of control points in the array.</p> </dd> + + + <dd> <p>An array of values describing control points; the maximum length of control points is 1025.</p> </dd> + + + + + <p>Describes a display mode.</p> + <p>This structure is used by the <strong>GetDisplayModeList</strong> and <strong>FindClosestMatchingMode</strong> methods.</p><p>The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.</p><ul> <li> <p>Feature level &gt;= 9.1</p> <ul> <li> <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong> </li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong></li> <li> <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> (except 10.x on Windows?Vista)</li> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> (except 10.x on Windows?Vista)</li> </ul> </li> <li> <p>Feature level &gt;= 10.0</p> <ul> <li> <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong> </li> <li><strong>{{DXGI_FORMAT_R10G10B10A2_UNORM}}</strong></li> </ul> </li> <li> <p>Feature level &gt;= 11.0</p> <ul> <li><strong>{{DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM}}</strong></li> </ul> </li> </ul><p>You can pass one of these format values to <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to determine if it is a valid format for displaying on screen. If <strong>{{ID3D11Device::CheckFormatSupport}}</strong> returns <strong>{{D3D11_FORMAT_SUPPORT_DISPLAY}}</strong> in the bit field to which the <em>pFormatSupport</em> parameter points, the format is valid for displaying on screen.</p><p>Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>), you must set the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC}}</strong> to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>.</p><p>Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> render target view from a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> swap chain so they can use automatic color space conversion when they render the swap chain.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned width value.</p> </dd> + + + <dd> <p>A value describing the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned height value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure describing the refresh rate in hertz</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure describing the display format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type describing the scanline drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type describing the scaling mode.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{DC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{AC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} quantization table.</p> + + + <dd> <p>An array of bytes containing the elements of the quantization table.</p> </dd> + + + + + <p>Specifies color space types.</p> + <p>This enum is used within {{DXGI}} in the <strong>CheckColorSpaceSupport</strong>, <strong>SetColorSpace1</strong> and <strong>CheckOverlayColorSpaceSupport</strong> methods. It is also referenced in {{D3D11}} video methods such as <strong>{{ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1}}</strong>, and {{D2D}} methods such as <strong>{{ID2D1DeviceContext2::CreateImageSourceFromDxgi}}</strong>.</p><p>The following color parameters are defined:</p> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>1.0</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for {{ITU}}-R Recommendation {{BT}}.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> <tr><td>{{Transfer}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{JPG}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{MPEG2}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This definition is commonly used for H.264 and {{HEVC}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This definition may be used by {{HEVC}}, and is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <p>A custom color definition is used. </p> </dd> + + + + + <p>Represents a rational number.</p> + <p>This structure is a member of the <strong>{{DXGI_MODE_DESC}}</strong> structure.</p><p>The <strong>{{DXGI_RATIONAL}}</strong> structure operates under the following rules:</p><ul> <li>0/0 is legal and will be interpreted as 0/1.</li> <li>0/anything is interpreted as zero.</li> <li>If you are representing a whole number, the denominator should be 1.</li> </ul> + + + <dd> <p>An unsigned integer value representing the top of the rational number.</p> </dd> + + + <dd> <p>An unsigned integer value representing the bottom of the rational number.</p> </dd> + + + + + <p>Describes multi-sampling parameters for a resource.</p> + <p>This structure is a member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.</p><p>If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.</p><table> <tr><td> <p>Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:</p> <p>Direct3D 10.1 has defined two standard quality levels: <strong>{{D3D10_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D10_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D10_1}}.h.</p> <p>Direct3D 11 has defined two standard quality levels: <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D11}}.h.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of multisamples per pixel.</p> </dd> + + + <dd> <p>The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by <strong>{{ID3D10Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 10 or <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 11.</p> <p>For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.</p> </dd> + + + + + <p>Identifies the type of reference shape.</p> + + + <dd> <p>The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap ({{DIB}}) format {{AND}} mask that is followed by another 1 bpp {{DIB}} format {{XOR}} mask of the same size.</p> </dd> + + + <dd> <p>The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp {{ARGB}} {{DIB}} format.</p> </dd> + + + <dd> <p>The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp {{ARGB}} format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the {{RGB}} value should replace the screen pixel. When the mask value is 0xFF, an {{XOR}} operation is performed on the {{RGB}} value and the screen pixel; the result replaces the screen pixel.</p> </dd> + + + + + <p>Identifies the alpha value, transparency behavior, of a surface.</p> + <p>For more information about alpha mode, see <strong>{{D2D1_ALPHA_MODE}}</strong>.</p> + + + <dd> <p>Indicates that the transparency behavior is not specified.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.</p> </dd> + + + <dd> <p>Indicates to ignore the transparency behavior.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Identifies the importance of a resource?s content when you call the <strong>{{IDXGIDevice2::OfferResources}}</strong> method to offer the resource. </p> + <p>Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.</p> + + + + <p>Identifies resize behavior when the back-buffer size does not match the size of the target output.</p> + <p>The {{DXGI_SCALING_NONE}} value is supported only for flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value. You pass these values in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. </p><p>{{DXGI_SCALING_ASPECT_RATIO_STRETCH}} will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.</p><code>float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight &gt;= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast&lt;{{LONG}}&gt;(offsetX); rect.top = static_cast&lt;{{LONG}}&gt;(offsetY); rect.right = static_cast&lt;{{LONG}}&gt;(offsetX + scaledWidth); rect.bottom = static_cast&lt;{{LONG}}&gt;(offsetY + scaledHeight); rect.left = std::max&lt;{{LONG}}&gt;(0, rect.left); rect.top = std::max&lt;{{LONG}}&gt;(0, rect.top); rect.right = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputWidth), rect.right); rect.bottom = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputHeight), rect.bottom); +</code><p>Note that <em>outputWidth</em> and <em>outputHeight</em> are the pixel sizes of the presentation target size. In the case of <strong>CoreWindow</strong>, this requires converting the <em>logicalWidth</em> and <em>logicalHeight</em> values from {{DIPS}} to pixels using the window's {{DPI}} property.</p> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of {{DXGI}} when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the {{WS_EX_LAYOUTRTL}} style is associated with the <strong>{{HWND}}</strong> handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.</p> <p>This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to <strong>{{IDXGISwapChain1::SetBackgroundColor}}</strong>.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.</p> <p>This constant is supported on Windows Phone 8 and Windows 10. </p> <p>Note that with legacy Win32 window swapchains, this works the same as {{DXGI_SCALING_STRETCH}}. +</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current graphics rendering task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the <strong>GraphicsPreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p><p>The following figure shows granularity of graphics rendering tasks.</p> + + + <dd> <p>Indicates the preemption granularity as a {{DMA}} buffer.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics primitive. A primitive is a section in a {{DMA}} buffer and can be a group of triangles.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current compute task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the <strong>ComputePreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p> + + + <dd> <p>Indicates the preemption granularity as a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a dispatch (for example, a call to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method). A dispatch is a part of a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a compute instruction in a thread.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structure describes the movement of a rectangle.</p> + <p>This structure is used by <strong>GetFrameMoveRects</strong>.</p> + + + <dd> <p>The starting position of a rectangle.</p> </dd> + + + <dd> <p>The target region to which to move a rectangle.</p> </dd> + + + + + <p>The {{DXGI_OUTDUPL_DESC}} structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>This structure is used by <strong>GetDesc</strong>.</p> + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure describes the position of the hardware cursor.</p> + <p>The <strong>Position</strong> member is valid only if the <strong>Visible</strong> member?s value is set to <strong>{{TRUE}}</strong>.</p> + + + <dd> <p>The position of the hardware cursor relative to the top-left of the adapter output.</p> </dd> + + + <dd> <p>Specifies whether the hardware cursor is visible. <strong>{{TRUE}}</strong> if visible; otherwise, <strong>{{FALSE}}</strong>. If the hardware cursor is not visible, the calling application does not display the cursor in the client.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure describes information about the cursor shape.</p> + <p>An application draws the cursor shape with the top-left-hand corner drawn at the position that the <strong>Position</strong> member of the <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure specifies; the application does not use the hot spot to draw the cursor shape.</p><p>An application calls the <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to retrieve cursor shape information in a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure.</p> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_TYPE}}</strong>-typed value that specifies the type of cursor shape. </p> </dd> + + + <dd> <p>The width in pixels of the mouse cursor.</p> </dd> + + + <dd> <p>The height in scan lines of the mouse cursor.</p> </dd> + + + <dd> <p>The width in bytes of the mouse cursor.</p> </dd> + + + <dd> <p>The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure describes the current desktop image.</p> + <p>A non-zero <strong>LastMouseUpdateTime</strong> indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero <strong>LastMouseUpdateTime</strong>; however, the application must check the value of the <strong>PointerShapeBufferSize</strong> member to determine whether the shape was updated too.</p><p>If only the reference was updated (that is, the desktop image was not updated), the <strong>AccumulatedFrames</strong>, <strong>TotalMetadataBufferSize</strong>, and <strong>LastPresentTime</strong> members are set to zero.</p><p>An <strong>AccumulatedFrames</strong> value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the <strong>AccumulatedFrames</strong> value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.</p><p>A non-zero <strong>TotalMetadataBufferSize</strong> indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the <strong>{{IDXGIOutputDuplication::GetFrameDirtyRects}}</strong>, <strong>{{IDXGIOutputDuplication::GetFrameMoveRects}}</strong>, or <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to obtain information about each type of metadata.</p><strong>Note</strong>??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? + + + <dd> <p>The time stamp of the last update of the desktop image. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image.</p> </dd> + + + <dd> <p>The time stamp of the last update to the mouse. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the <strong>PointerShapeBufferSize</strong> member.</p> </dd> + + + <dd> <p>The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. <strong>{{TRUE}}</strong> if dirty regions were accumulated; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. <strong>{{TRUE}}</strong> if protected content was already blacked; otherwise, <strong>{{FALSE}}</strong>. The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure that describes the most recent mouse position if the <strong>LastMouseUpdateTime</strong> member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.</p> </dd> + + + <dd> <p>Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.</p> </dd> + + + <dd> <p>Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.</p> </dd> + + + + + <p>Describes a display mode and whether the display mode supports stereo.</p> + <p><strong>{{DXGI_MODE_DESC1}}</strong> is identical to <strong>{{DXGI_MODE_DESC}}</strong> except that <strong>{{DXGI_MODE_DESC1}}</strong> includes the <strong>Stereo</strong> member.</p><p>This structure is used by the <strong>GetDisplayModeList1</strong> and <strong>FindClosestMatchingMode1</strong> methods.</p> + + + <dd> <p>A value that describes the resolution width.</p> </dd> + + + <dd> <p>A value that describes the resolution height.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that describes the display format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong>-typed value that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCALING}}</strong>-typed value that describes the scaling mode.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, <strong>CreateSwapChainForComposition</strong>, <strong>CreateSwapChainForCompositionSurfaceHandle</strong>, and <strong>GetDesc1</strong> methods.</p><strong>Note</strong>??You cannot cast a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> to a <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and vice versa. An application must explicitly use the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the newer version of the swap-chain description structure.?<p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>For a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member), you must set the <strong>Format</strong> member to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>; you must set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that the <strong>SampleDesc</strong> member specifies to one and the <strong>Quality</strong> member of <strong>{{DXGI_SAMPLE_DESC}}</strong> to zero because multiple sample antialiasing ({{MSAA}}) is not supported; you must set the <strong>BufferCount</strong> member to from two to sixteen. For more info about flip-model swap chain, see {{DXGI}} Flip Model.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width value. You cannot specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A value that describes the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned height value. You cannot specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure that describes the display format.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_USAGE}}</strong>-typed value that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SCALING}}</strong>-typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SWAP_EFFECT}}</strong>-typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method because this method supports only flip presentation model.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_ALPHA_MODE}}</strong>-typed value that identifies the transparency behavior of the swap-chain back buffer.</p> </dd> + + + <dd> <p>A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior.</p> </dd> + + + + + <p>Describes full-screen mode for a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong> and <strong>GetFullscreenDesc</strong> methods.</p> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type that describes the scaling mode.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the swap chain is in windowed mode. <strong>{{TRUE}}</strong> if the swap chain is in windowed mode; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes information about present that helps the operating system optimize presentation.</p> + <p>This structure is used by the <strong>Present1</strong> method.</p><p>The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.</p><p>The following diagram and coordinates illustrate this example.</p><code> DirtyRectsCount = 2 +pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video +pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line +*pScrollRect = { 0, 0, 50, 70 } +*pScrollOffset = { 0, -10 } +</code><p>Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.</p><p>The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the <strong>pScrollRect</strong> member. +The arrow shows the scroll offset. The scroll offset is specified by the <strong>pScrollOffset</strong> member. +Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the <strong>DirtyRectsCount</strong> and <strong>pDirtyRects</strong> members.</p><p>The scroll rectangle and offset are not supported for the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.</p><p>The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see {{DXGI}} Flip Model.</p><p>For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.</p> + + + <dd> <p>The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.</p> </dd> + + + <dd> <p>A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to <strong>{{NULL}}</strong> if <strong>DirtyRectsCount</strong> is 0. An application must not update any pixel outside of the dirty rectangles.</p> </dd> + + + <dd> <p> A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.</p> <p>The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to <strong>{{NULL}}</strong> to indicate that no content is scrolled from the previous frame.</p> </dd> + + + <dd> <p>A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to <strong>{{NULL}}</strong> to indicate no offset.</p> </dd> + + + + + <p>Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure provides a {{DXGI}} 1.2 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_GRAPHICS_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_COMPUTE_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current compute task.</p> </dd> + + + + + <p> </p><p> The <strong>{{IDXGIDisplayControl}}</strong> interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable. </p><p> We recommend that you not use <strong>{{IDXGIDisplayControl}}</strong> to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the <strong>{{IDXGIFactory2::IsWindowedStereoEnabled}}</strong> method to determine whether to render in stereo; for your full-screen apps, call the <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong> method and then determine whether any of the returned display modes support rendering in stereo. </p> + <strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface is only used by the <strong>Display</strong> app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?<strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface does not exist for Windows Store apps.?<p> Call <strong>QueryInterface</strong> from a factory object (<strong>{{IDXGIFactory}}</strong>, <strong>{{IDXGIFactory1}}</strong> or <strong>{{IDXGIFactory2}}</strong>) to retrieve the <strong>{{IDXGIDisplayControl}}</strong> interface. The following code shows how. </p><pre>{{IDXGIDisplayControl}} * pDXGIDisplayControl; +hr = g_pDXGIFactory-&gt;QueryInterface(__uuidof({{IDXGIDisplayControl}}), (void **)&amp;pDXGIDisplayControl);</pre><p> The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls <strong>{{IDXGIDisplayControl::IsStereoEnabled}}</strong> to query for stereo configuration. Control applets can use the <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> method to register for notifications of all stereo configuration changes. </p><p><strong>Platform Update for Windows?7:??</strong> Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.</p> + <p>You pass a Boolean value to the <strong>{{IDXGIDisplayControl::SetStereoEnabled}}</strong> method to either enable or disable the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> + <p><strong>IsStereoEnabled</strong> returns {{TRUE}} when the operating system's stereoscopic 3D display behavior is enabled and {{FALSE}} when this behavior is disabled.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetStereoEnabled</strong> doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> </dd> + + + + + <p> The <strong>{{IDXGIOutputDuplication}}</strong> interface accesses and manipulates the duplicated desktop image. </p> + <p> A collaboration application can use <strong>{{IDXGIOutputDuplication}}</strong> to access the desktop image. <strong>{{IDXGIOutputDuplication}}</strong> is supported in Desktop Window Manager ({{DWM}}) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit {{GDI}} non-{{DWM}} desktop modes are not supported. </p><p> An application can use <strong>{{IDXGIOutputDuplication}}</strong> on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses <strong>{{IDXGIOutputDuplication}}</strong> to perform the following operations: </p><ol> <li>Acquire the next desktop image.</li> <li>Retrieve the information that describes the image.</li> <li> Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls <strong>{{IDXGISurface::Map}}</strong>. Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client. </li> <li>After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.</li> </ol><p>The following components of the operating system can generate the desktop image:</p><ul> <li> The {{DWM}} by composing the desktop image </li> <li>A full-screen DirectX or OpenGL application</li> <li>An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen</li> </ul><p> All current <strong>{{IDXGIOutputDuplication}}</strong> interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> interface. </p><p> Examples of situations in which <strong>{{IDXGIOutputDuplication}}</strong> becomes invalid are: </p><ul> <li>Desktop switch</li> <li>Mode change</li> <li> Switch from {{DWM}} on, {{DWM}} off, or other full-screen application </li> </ul><p> In these situations, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and must create a new <strong>{{IDXGIOutputDuplication}}</strong> interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the <strong>{{IDXGIOutput1::DuplicateOutput}}</strong> method fails. </p><p> While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data. </p><p> The desktop image is always in the <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> format. </p><p> The <strong>{{IDXGIOutputDuplication}}</strong> interface does not exist for Windows Store apps. </p> + + + + <p>Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.</p> + <p>After an application creates an <strong>{{IDXGIOutputDuplication}}</strong> interface, it calls <strong>GetDesc</strong> to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure that describes the duplicated output. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Indicates that the application is ready to process the next desktop image.</p> + <p>When <strong>AcquireNextFrame</strong> returns successfully, the calling application can access the desktop image that <strong>AcquireNextFrame</strong> returns in the variable at <em>ppDesktopResource</em>. +If the caller specifies a zero time-out interval in the <em>TimeoutInMilliseconds</em> parameter, <strong>AcquireNextFrame</strong> verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an <strong>{{INFINITE}}</strong> time-out interval in the <em>TimeoutInMilliseconds</em> parameter, the time-out interval never elapses.</p><strong>Note</strong>??You cannot cancel the wait that you specified in the <em>TimeoutInMilliseconds</em> parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-<strong>{{INFINITE}}</strong> time-out interval. After the time-out interval elapses, you can check for these other conditions and then call <strong>AcquireNextFrame</strong> again to wait for the next frame.?<p><strong>AcquireNextFrame</strong> acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that <strong>AcquireNextFrame</strong> acquires might have only the desktop image updated, only the reference shape or position updated, or both.</p> + <p><strong>AcquireNextFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully received the next desktop image.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_WAIT_TIMEOUT}} if the time-out interval elapsed before the next desktop frame was available.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>AcquireNextFrame</strong> without releasing the previous frame.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>AcquireNextFrame</strong> is incorrect; for example, if <em>pFrameInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.</p> <p>For more information about the time-out interval, see Remarks.</p> </dd> + + + <dd> <p>A reference to a memory location that receives the <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure that describes timing and presentation statistics for a frame.</p> </dd> + + + <dd> <p>A reference to a variable that receives the <strong>{{IDXGIResource}}</strong> interface of the surface that contains the desktop bitmap.</p> </dd> + + + + + <p>Gets information about dirty rectangles for the current desktop frame.</p> + <p><strong>GetFrameDirtyRects</strong> stores a size value in the variable at <em>pDirtyRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pDirtyRectsBuffer</em>:</p><ul> <li><strong>GetFrameDirtyRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameDirtyRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pDirtyRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>DirtyRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pDirtyRectsBufferSizeRequired</em> to determine the number of <strong>{{RECT}}</strong>s returned in the <em>pDirtyRectsBuffer</em> array.</p><p>The buffer contains the list of dirty <strong>{{RECT}}</strong>s for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move <strong>{{RECT}}</strong>s before it processes dirty <strong>{{RECT}}</strong>s.? + <p><strong>GetFrameDirtyRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about dirty rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameDirtyRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameDirtyRects</strong> is incorrect; for example, if <em>pDirtyRectsBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pDirtyRectsBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{RECT}}</strong> structures that identifies the dirty rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions in the buffer at <em>pDirtyRectsBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the moved rectangles for the current desktop frame.</p> + <p><strong>GetFrameMoveRects</strong> stores a size value in the variable at <em>pMoveRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pMoveRectBuffer</em>:</p><ul> <li><strong>GetFrameMoveRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameMoveRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pMoveRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>MoveRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pMoveRectsBufferSizeRequired</em> to determine the number of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures returned.</p><p>The buffer contains the list of move {{RECTs}} for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move {{RECTs}} before it processes dirty {{RECTs}}.? + <p><strong>GetFrameMoveRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about moved rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided is not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameMoveRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameMoveRects</strong> is incorrect; for example, if <em>pMoveRectBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pMoveRectBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures that identifies the moved rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions in the buffer at <em>pMoveRectBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the new reference shape for the current desktop frame.</p> + <p><strong>GetFramePointerShape</strong> stores a size value in the variable at <em>pPointerShapeBufferSizeRequired</em>. This value specifies the number of bytes that <em>pPointerShapeBufferSizeRequired</em> needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pPointerShapeBuffer</em>:</p><ul> <li><strong>GetFramePointerShape</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFramePointerShape</strong> supplies a bigger than necessary buffer. The size value returned at <em>pPointerShapeBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>PointerShapeBufferSize</em> parameter.</li> </ul><p>The <em>pPointerShapeInfo</em> parameter describes the new reference shape.</p> + <p><strong>GetFramePointerShape</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about the new reference shape.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFramePointerShape</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFramePointerShape</strong> is incorrect; for example, if <em>pPointerShapeInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pPointerShapeBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to a buffer to which <strong>GetFramePointerShape</strong> copies and returns pixel data for the new reference shape.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFramePointerShape</strong> needs to store the new reference shape pixel data in the buffer at <em>pPointerShapeBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure that receives the reference shape information.</p> </dd> + + + + + <p>Provides the {{CPU}} with efficient access to a desktop image if that desktop image is already in system memory.</p> + <p>You can successfully call <strong>MapDesktopSurface</strong> if the <strong>DesktopImageInSystemMemory</strong> member of the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure is set to <strong>{{TRUE}}</strong>. If <strong>DesktopImageInSystemMemory</strong> is <strong>{{FALSE}}</strong>, <strong>MapDesktopSurface</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Call <strong>{{IDXGIOutputDuplication::GetDesc}}</strong> to retrieve the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure.</p> + <p><strong>MapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the surface data.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already has an outstanding map on the desktop image. The application must call <strong>UnMapDesktopSurface</strong> before it calls <strong>MapDesktopSurface</strong> again. {{DXGI_ERROR_INVALID_CALL}} is also returned if the application did not own the desktop image when it called <strong>MapDesktopSurface</strong>.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the <strong>{{IDXGISurface::Map}}</strong> method.</li> <li>{{E_INVALIDARG}} if the <em>pLockedRect</em> parameter is incorrect; for example, if <em>pLockedRect</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_MAPPED_RECT}}</strong> structure that receives the surface data that the {{CPU}} needs to directly access the surface data. </p> </dd> + + + + + <p>Invalidates the reference to the desktop image that was retrieved by using <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</p> + <p><strong>UnMapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application did not map the desktop surface by calling <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Indicates that the application finished processing the frame.</p> + <p>The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.</p><p>For performance reasons, we recommend that you release the frame just before you call the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted {{GPU}} cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.</p> + <p><strong>ReleaseFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already released the frame.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>The <strong>{{IDXGISurface2}}</strong> interface extends the <strong>{{IDXGISurface1}}</strong> interface by adding support for subresource surfaces and getting a handle to a shared resource.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface2}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface2}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface2}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface2}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface2}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface2}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface2}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface2}}</strong>.</p><p>You can call the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method to create an <strong>{{IDXGISurface2}}</strong> interface that refers to one subresource of a stereo resource.</p> + + + + <p>Gets the parent resource and subresource index that support a subresource surface.</p> + <p>For subresource surface objects that the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method creates, <strong>GetResource</strong> simply returns the values that were used to create the subresource surface.</p><p>Current objects that implement <strong>{{IDXGISurface}}</strong> are either resources or views. <strong>GetResource</strong> for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{E_NOINTERFACE}} if the object does not implement the {{GUID}} that the <em>riid</em> parameter specifies.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the parent resource object for the subresource surface.</p> </dd> + + + <dd> <p>A reference to a variable that receives the index of the subresource surface.</p> </dd> + + + + + <p> An <strong>{{IDXGIResource1}}</strong> interface extends the <strong>{{IDXGIResource}}</strong> interface by adding support for creating a subresource surface object and for creating a handle to a shared resource. </p> + <p> To determine the type of memory a resource is currently located in, use <strong>{{IDXGIDevice::QueryResourceResidency}}</strong>. To share resources between processes, use <strong>{{ID3D11Device1::OpenSharedResource1}}</strong>. For information about how to share resources between multiple Windows graphics {{APIs}}, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics {{APIs}}. </p><p> You can retrieve the <strong>{{IDXGIResource1}}</strong> interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports <strong>{{ID3D10Resource}}</strong> or <strong>{{ID3D11Resource}}</strong> also supports <strong>{{IDXGIResource1}}</strong>. For example, the Direct3D 2D texture object that you create from <strong>{{ID3D11Device::CreateTexture2D}}</strong> supports <strong>{{IDXGIResource1}}</strong>. You can call <strong>QueryInterface</strong> on the 2D texture object (<strong>{{ID3D11Texture2D}}</strong>) to retrieve the <strong>{{IDXGIResource1}}</strong> interface. For example, to retrieve the <strong>{{IDXGIResource1}}</strong> interface from the 2D texture object, use the following code. </p><pre>{{IDXGIResource1}} * pDXGIResource; +hr = g_pd3dTexture2D-&gt;QueryInterface(__uuidof({{IDXGIResource1}}), (void **)&amp;pDXGIResource);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a subresource surface object.</p> + <p>Subresource surface objects implement the <strong>{{IDXGISurface2}}</strong> interface, which inherits from <strong>{{IDXGISurface1}}</strong> and indirectly <strong>{{IDXGISurface}}</strong>. Therefore, the {{GDI}}-interoperable methods of <strong>{{IDXGISurface1}}</strong> work if the original resource interface object was created with the {{GDI}}-interoperable flag (<strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong>).</p><p><strong>CreateSubresourceSurface</strong> creates a subresource surface that is based on the resource interface on which <strong>CreateSubresourceSurface</strong> is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.</p><p>You can use <strong>CreateSubresourceSurface</strong> to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if the index is out of range or if the subresource is not a valid surface.</li> <li>{{E_OUTOFMEMORY}} if insufficient memory is available to create the subresource surface object.</li> </ul><p>A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.</p> + + + <dd> <p>The index of the subresource surface object to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to a <strong>{{IDXGISurface2}}</strong> interface that represents the created subresource surface object at the position specified by the <em>index</em> parameter.</p> </dd> + + + + + <p>Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. </p> + <p><strong>CreateSharedHandle</strong> only returns the {{NT}} handle when you created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags). If you created the resource as shared and specified that it uses {{NT}} handles, you must use <strong>CreateSharedHandle</strong> to get a handle for sharing. In this situation, you can't use the <strong>{{IDXGIResource::GetSharedHandle}}</strong> method because it will fail.</p><p>You can pass the handle that <strong>CreateSharedHandle</strong> returns in a call to the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to give a device access to a shared resource that you created on a different device.</p><p>Because the handle that <strong>CreateSharedHandle</strong> returns is an {{NT}} handle, you can use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on. You can call <strong>CreateSharedHandle</strong> only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call <strong>DuplicateHandle</strong>. When you no longer need the shared resource handle, call <strong>CloseHandle</strong> to close the handle, in order to avoid memory leaks.</p><p>If you pass a name for the resource to <em>lpName</em> when you call <strong>CreateSharedHandle</strong> to share the resource, you can subsequently pass this name in a call to the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.</p><p>If you created the resource as shared and did not specify that it uses {{NT}} handles, you cannot use <strong>CreateSharedHandle</strong> to get a handle for sharing because <strong>CreateSharedHandle</strong> will fail.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid.</li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource.</li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSharedHandle</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.</p> <p>Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor.</p> <p>The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.</p> </dd> + + + <dd> <p>The requested access rights to the resource. In addition to the generic access rights, {{DXGI}} defines the following values:</p> <ul> <li><strong>{{DXGI_SHARED_RESOURCE_READ}}</strong> ( 0x80000000L ) - specifies read access to the resource.</li> <li><strong>{{DXGI_SHARED_RESOURCE_WRITE}}</strong> ( 1 ) - specifies write access to the resource.</li> </ul> <p>You can combine these values by using a bitwise {{OR}} operation.</p> </dd> + + + <dd> <p>The name of the resource to share. The name is limited to {{MAX_PATH}} characters. Name comparison is case sensitive. You will need the resource name if you call the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to access the shared resource by name. If you instead call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to access the shared resource by handle, set this parameter to <strong>{{NULL}}</strong>.</p> <p>If <em>lpName</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace.</p> <p>The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see +Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.</p> <p>The object can be created in a private namespace. For more information, see Object Namespaces.</p> </dd> + + + <dd> <p>A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice2}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes methods to block {{CPU}} processing until the {{GPU}} completes processing, and to offer resources to the operating system. </p> + <p> The <strong>{{IDXGIDevice2}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice2}}</strong> interface. To retrieve the <strong>{{IDXGIDevice2}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>{{IDXGIDevice2::ReclaimResource}}</strong> method to reclaim the resource. You cannot call <strong>OfferResources</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><strong>Note</strong>??The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.?<p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>OfferResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>OfferResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully offered</li> <li>{{E_INVALIDARG}} if a resource in the array or the priority is invalid</li> </ul> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice2::OfferResources}}</strong>.</p> + <p>After you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer one or more resources, you must call <strong>ReclaimResources</strong> before you can use those resources again. You must check the values in the array at <em>pDiscarded</em> to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.</p><p>To reclaim shared resources, call <strong>ReclaimResources</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources</strong> only while you hold the mutex.</p><p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>ReclaimResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully reclaimed</li> <li>{{E_INVALIDARG}} if the resources are invalid</li> </ul> + + + + <p>Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.</p> + <p><strong>EnqueueSetEvent</strong> calls the <strong>SetEvent</strong> function on the event object after all previously submitted rendering commands complete or the device is removed.</p><p>After an application calls <strong>EnqueueSetEvent</strong>, it can immediately call the <strong>WaitForSingleObject</strong> function to put itself to sleep until rendering commands complete.</p><p>You cannot use <strong>EnqueueSetEvent</strong> to determine work completion that is associated with presentation (<strong>{{IDXGISwapChain::Present}}</strong>); instead, we recommend that you use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values:</p><ul> <li><strong>{{E_OUTOFMEMORY}}</strong> if insufficient memory is available to complete the operation.</li> <li><strong>{{E_INVALIDARG}}</strong> if the parameter was validated and determined to be incorrect.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>EnqueueSetEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.</p> <p>The handle must have the {{EVENT_MODIFY_STATE}} access right. For more information about access rights, see Synchronization Object Security and Access Rights.</p> </dd> + + + + + <p>Provides presentation capabilities that are enhanced from <strong>{{IDXGISwapChain}}</strong>. These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p><p><strong>{{IDXGISwapChain1}}</strong> provides the <strong>IsTemporaryMonoSupported</strong> method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. +</p><strong>Note</strong>??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original (<strong>{{IDXGISwapChain}}</strong>) and new (<strong>{{IDXGISwapChain1}}</strong>) swap chain interfaces generally have the same behavior. For information about how <strong>{{IDXGISwapChain}}</strong> methods are translated into <strong>{{IDXGISwapChain1}}</strong> methods, see the descriptions of the <strong>{{IDXGISwapChain1}}</strong> methods.? + + + + <p>Gets a description of the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure that describes the swap chain.</p> </dd> + + + + + <p>Gets a description of a full-screen swap chain.</p> + <p>The semantics of <strong>GetFullscreenDesc</strong> are identical to that of the <strong>{{IDXGISwapchain::GetDesc}}</strong> method for <strong>{{HWND}}</strong>-based swap chains.</p> + <p><strong>GetFullscreenDesc</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the description of the full-screen swap chain.</li> <li> {{DXGI_ERROR_INVALID_CALL}} for non-<strong>{{HWND}}</strong> swap chains or if <em>pDesc</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structure that describes the full-screen swap chain.</p> </dd> + + + + + <p>Retrieves the underlying <strong>{{HWND}}</strong> for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain that is associated with an <strong>{{HWND}}</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p>If <em>pHwnd</em> receives <strong>{{NULL}}</strong> (that is, the swap chain is not <strong>{{HWND}}</strong>-based), <strong>GetHwnd</strong> returns {{DXGI_ERROR_INVALID_CALL}}.</p> + + + + <p>Retrieves the underlying <strong>CoreWindow</strong> object for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong> method to create a swap chain that is associated with an <strong>CoreWindow</strong> object.</p> + <p><strong>GetCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the underlying <strong>CoreWindow</strong> object.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>ppUnk</em> is <strong>{{NULL}}</strong>; that is, the swap chain is not associated with a <strong>CoreWindow</strong> object.</li> <li>Any <strong>{{HRESULT}}</strong> that a call to <strong>QueryInterface</strong> to query for an <strong>CoreWindow</strong> object might typically return.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Presents a frame on the display screen. </p> + <p>An app can use <strong>Present1</strong> to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager ({{DWM}}). The {{DWM}} can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to <strong>Present1</strong>, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p><p>For info about calling <strong>Present1</strong> when your app uses multiple threads, see Multithread Considerations and Multithreading and {{DXGI}}.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_REMOVED}} , {{DXGI_STATUS_OCCLUDED}}, {{DXGI_ERROR_INVALID_CALL}}, or {{E_OUTOFMEMORY}}. </p> + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks.</li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput1}}</strong>), <strong>Present1</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_PRESENT_PARAMETERS}}</strong> structure that describes updated rectangles and scroll information of the frame to present.</p> </dd> + + + + + <p>Determines whether a swap chain supports ?temporary mono.?</p> + <p>Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the <strong>{{IDXGISwapChain1::Present1}}</strong> method with the <strong>{{DXGI_PRESENT_STEREO_TEMPORARY_MONO}}</strong> flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.</p> + <p>Indicates whether to use the swap chain in temporary mono mode. <strong>{{TRUE}}</strong> indicates that you can use temporary-mono mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsTemporaryMonoSupported</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Gets the output (the display monitor) to which you can restrict the contents of a present operation.</p> + <p>If the method succeeds, the runtime fills the buffer at <em>ppRestrictToOutput</em> with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p> + <p>Returns {{S_OK}} if the restrict-to output was successfully retrieved; otherwise, returns {{E_INVALIDARG}} if the reference is invalid.</p> + + + <dd> <p> A reference to a buffer that receives a reference to the <strong>{{IDXGIOutput}}</strong> interface for the restrict-to output. An application passes this reference to <strong>{{IDXGIOutput}}</strong> in a call to the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain.</p> </dd> + + + + + <p>Changes the background color of the swap chain.</p> + <p>The background color affects only swap chains that you create with <strong>{{DXGI_SCALING_NONE}}</strong> in windowed mode. You pass this value in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.</p><p>When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The <strong>{{DXGI_PRESENT}}</strong> flags that you pass to <strong>{{IDXGISwapChain1::Present1}}</strong> can help achieve the effect that you require. For example, if you call <strong>SetBackgroundColor</strong> and then call <strong>{{IDXGISwapChain1::Present1}}</strong> with the <em>Flags</em> parameter set to <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong>, you change only the background color without changing the displayed contents of the swap chain.</p><p>When you call the <strong>{{IDXGISwapChain1::Present1}}</strong> method to display contents of the swap chain, <strong>{{IDXGISwapChain1::Present1}}</strong> uses the <strong>{{DXGI_ALPHA_MODE}}</strong> value that is specified in the <strong>AlphaMode</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to determine how to handle the <strong>a</strong> member of the <strong>{{DXGI_RGBA}}</strong> structure, the alpha value of the background color, that achieves window transparency. For example, if <strong>AlphaMode</strong> is <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong> ignores the a member of <strong>{{DXGI_RGBA}}</strong>.</p><strong>Note</strong>??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard {{RGB}} data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? + <p><strong>SetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the background color.</li> <li>{{E_INVALIDARG}} if the <em>pColor</em> parameter is incorrect, for example, <em>pColor</em> is {{NULL}} or any of the floating-point values of the members of <strong>{{DXGI_RGBA}}</strong> to which <em>pColor</em> points are outside the range from 0.0 through 1.0.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetBackgroundColor</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that specifies the background color to set.</p> </dd> + + + + + <p>Retrieves the background color of the swap chain.</p> + <strong>Note</strong>??The background color that <strong>GetBackgroundColor</strong> retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The default value of the background color is black with full opacity: 0,0,0,1.? + <p><strong>GetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the background color.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the <em>pColor</em> parameter is invalid, for example, <em>pColor</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that receives the background color of the swap chain.</p> </dd> + + + + + <p>Sets the rotation of the back buffers for the swap chain.</p> + <p>You can only use <strong>SetRotation</strong> to rotate the back buffers for flip-model swap chains that you present in windowed mode. </p><p><strong>SetRotation</strong> isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, <strong>SetRotation</strong> doesn't fail, but you must ensure that you specify no rotation (<strong>{{DXGI_MODE_ROTATION_IDENTITY}}</strong>) for the swap chain. Otherwise, when you call <strong>{{IDXGISwapChain1::Present1}}</strong> or <strong>{{IDXGISwapChain::Present}}</strong> to present a frame, the presentation fails.</p> + <p><strong>SetRotation</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the rotation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call <strong>SetRotation</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies how to set the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p>Gets the rotation of the back buffers for the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a variable that receives a <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p> The <strong>{{IDXGIFactory2}}</strong> interface includes methods to create a newer version swap chain with more features than <strong>{{IDXGISwapChain}}</strong> and to monitor stereoscopic 3D capabilities. </p> + <p>To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 factory interface, pass <strong>{{IDXGIFactory2}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object that either <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> returns. +</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, or <strong>{{IDXGIDevice2}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory2}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Determines whether to use stereo mode.</p> + <p>We recommend that windowed applications call <strong>IsWindowedStereoEnabled</strong> before they attempt to use stereo. <strong>IsWindowedStereoEnabled</strong> returns <strong>{{TRUE}}</strong> if both of the following items are true:</p><ul> <li>All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model ({{WDDM}}) for Windows?8 ({{WDDM}} 1.2). However, the adapter does not necessarily have to be able to scan out stereo.</li> <li>The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager ({{DWM}}) performs stereo composition on at least one adapter output.</li> </ul><p>The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.</p><p>The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.</p> + <p>Indicates whether to use stereo mode. <strong>{{TRUE}}</strong> indicates that you can use stereo mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsWindowedStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with an <strong>{{HWND}}</strong> handle to the output window for the swap chain.</p> + <strong>Note</strong>??Do not use this method in Windows Store apps. Instead, use <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>hWnd</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain at a time with an <strong>{{HWND}}</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForHwnd</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong><strong>{{DXGI_SCALING_NONE}}</strong> is not supported on Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed and causes <strong>CreateSwapChainForHwnd</strong> to return {{DXGI_ERROR_INVALID_CALL}} when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with the <strong>CoreWindow</strong> object for the output window for the swap chain.</p> + <strong>Note</strong>??Use this method in Windows Store apps rather than <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>pWindow</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain (per layer) at a time with a <strong>CoreWindow</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Identifies the adapter on which a shared resource object was created.</p> + <p>You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call <strong>GetSharedResourceAdapterLuid</strong> before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> or <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method.</p> + <p><strong>GetSharedResourceAdapterLuid</strong> returns: </p><ul> <li>{{S_OK}} if it identified the adapter.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if <em>hResource</em> is invalid.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetSharedResourceAdapterLuid</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to a shared resource object. The <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method returns this handle.</p> </dd> + + + <dd> <p>A reference to a variable that receives a locally unique identifier (<strong>{{LUID}}</strong>) value that identifies the adapter. <strong>{{LUID}}</strong> is defined in Dxgi.h. An <strong>{{LUID}}</strong> is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an <strong>{{LUID}}</strong> is guaranteed only until the operating system is restarted.</p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of stereo status.</p> + <p><strong>RegisterStereoStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when stereo status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in stereo status by using event signaling.</p> + <p><strong>RegisterStereoStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of stereo status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when stereo status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterStereoStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of occlusion status.</p> + <p>Apps choose the Windows message that Windows sends when occlusion status changes.</p> + <p><strong>RegisterOcclusionStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is not a valid window handle or not the window handle that the current process owns.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when occlusion status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in occlusion status by using event signaling.</p> + <p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the same event handle, <strong>RegisterOcclusionStatusEvent</strong> fails with {{DXGI_ERROR_INVALID_CALL}}.</p><p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the different event handles, <strong>RegisterOcclusionStatusEvent</strong> properly registers the events.</p> + <p><strong>RegisterOcclusionStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if the method successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>hEvent</em> is not a valid handle or not an event handle. </li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of occlusion status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle.</p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when occlusion status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterOcclusionStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterOcclusionStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Creates a swap chain that you can use to send Direct3D content into the DirectComposition {{API}} or the <strong>Windows.{{UI}}.Xaml</strong> framework to compose in a window.</p> + <p>You can use composition swap chains with either DirectComposition?s <strong>{{IDCompositionVisual}}</strong> interface or {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class. For DirectComposition, you can call the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For {{XAML}}, the <strong>SwapChainBackgroundPanel</strong> class exposes a classic {{COM}} interface <strong>{{ISwapChainBackgroundPanelNative}}</strong>. You can use the <strong>{{ISwapChainBackgroundPanelNative::SetSwapChain}}</strong> method to bind to the {{XAML}} {{UI}} graph. For info about how to use composition swap chains with {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class, see DirectX and {{XAML}} interop.</p><p>The <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>, <strong>{{IDXGISwapChain::ResizeTarget}}</strong>, <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>, <strong>{{IDXGISwapChain1::GetHwnd}}</strong>, and <strong>{{IDXGISwapChain::GetCoreWindow}}</strong> methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForComposition</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForComposition</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p> The <strong>{{IDXGIAdapter2}}</strong> interface represents a display subsystem, which includes one or more {{GPUs}}, {{DACs}}, and video memory. </p> + <p> A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p> + + + + <p>Gets a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current task.</p> + <p>Use the <strong>GetDesc2</strong> method to get a {{DXGI}} 1.2 description of an adapter. To get a {{DXGI}} 1.1 description, use the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p><p>The Windows Display Driver Model ({{WDDM}}) scheduler can preempt the {{GPU}}'s execution of application tasks. The granularity at which the {{GPU}} can be preempted from performing its current task in the {{WDDM}} 1.1 or earlier driver model is a direct memory access ({{DMA}}) buffer for graphics tasks or a compute packet for compute tasks. The {{GPU}} can switch between tasks only after it completes the currently executing unit of work, a {{DMA}} buffer or a compute packet. </p><p>A {{DMA}} buffer is the largest independent unit of graphics work that the {{WDDM}} scheduler can submit to the {{GPU}}. This buffer contains a set of {{GPU}} instructions that the {{WDDM}} driver and {{GPU}} use. A compute packet is the largest independent unit of compute work that the {{WDDM}} scheduler can submit to the {{GPU}}. A compute packet contains dispatches (for example, calls to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method), which contain thread groups. The {{WDDM}} 1.2 or later driver model allows the {{GPU}} to be preempted at finer granularity levels than a {{DMA}} buffer or compute packet. You can use the <strong>GetDesc2</strong> method to retrieve the granularity levels for graphics and compute tasks.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, earlier versions of <strong>GetDesc2</strong> (<strong>GetDesc</strong> and <strong>GetDesc1</strong>) return zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of the adapter description structure and ?Software Adapter? for the description string in the <strong>Description</strong> member. <strong>GetDesc2</strong> returns the actual feature level 9 hardware values in these members.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput1}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To determine the outputs that are available from the adapter, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To determine the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. You can then call <strong>QueryInterface</strong> from any <strong>{{IDXGIOutput}}</strong> object to obtain an <strong>{{IDXGIOutput1}}</strong> object.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>Finds the display mode that most closely matches the requested display mode.</p> + <p>Direct3D devices require {{UNORM}} formats.</p><p><strong>FindClosestMatchingMode1</strong> finds the closest matching available display mode to the mode that you specify in <em>pModeToMatch</em>.</p><p>If you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure to which <em>pModeToMatch</em> points to specify a stereo mode as input, <strong>FindClosestMatchingMode1</strong> considers only stereo modes. <strong>FindClosestMatchingMode1</strong> considers only mono modes if <strong>Stereo</strong> is not set.</p><p><strong>FindClosestMatchingMode1</strong> resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:</p><ol> <li><strong>ScanlineOrdering</strong></li> <li><strong>Scaling</strong></li> <li><strong>Format</strong></li> <li><strong>Resolution</strong></li> <li><strong>RefreshRate</strong></li> </ol><p>When <strong>FindClosestMatchingMode1</strong> determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when <strong>FindClosestMatchingMode1</strong> matches <strong>Resolution</strong>, it already filtered the display mode list by a certain <strong>ScanlineOrdering</strong>, <strong>Scaling</strong>, and <strong>Format</strong>, while it ignores <strong>RefreshRate</strong>. This ordering doesn't define the absolute ordering for every usage scenario of <strong>FindClosestMatchingMode1</strong>, because the application can choose some values initially, which effectively changes the order of resolving members.</p><p><strong>FindClosestMatchingMode1</strong> matches members of the display mode one at a time, generally in a specified order.</p><p>If a member is unspecified, <strong>FindClosestMatchingMode1</strong> gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, <strong>FindClosestMatchingMode1</strong> uses the default desktop output to find values. If an application uses a fully unspecified display mode, <strong>FindClosestMatchingMode1</strong> typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, <strong>FindClosestMatchingMode1</strong> resolves unspecified members later than specified members.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that describes the display mode to match. Members of <strong>{{DXGI_MODE_DESC1}}</strong> can be unspecified, which indicates no preference for that member. A value of 0 for <strong>Width</strong> or <strong>Height</strong> indicates that the value is unspecified. If either <strong>Width</strong> or <strong>Height</strong> is 0, both must be 0. A numerator and denominator of 0 in <strong>RefreshRate</strong> indicate it is unspecified. Other members of <strong>{{DXGI_MODE_DESC1}}</strong> have enumeration values that indicate that the member is unspecified. If <em>pConcernedDevice</em> is <strong>{{NULL}}</strong>, the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC1}}</strong> cannot be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that receives a description of the display mode that most closely matches the display mode described at <em>pModeToMatch</em>.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. If this parameter is <strong>{{NULL}}</strong>, <strong>FindClosestMatchingMode1</strong> returns only modes whose format matches that of <em>pModeToMatch</em>; otherwise, <strong>FindClosestMatchingMode1</strong> returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:</p> <ul> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.0 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.0 Hardware </li> <li> Hardware Support for Direct3D 10Level9 Formats </li> <li> Hardware Support for Direct3D 10.1 Formats </li> <li> Hardware Support for Direct3D 10 Formats </li> </ul> </dd> + + + + + <p>Copies the display surface (front buffer) to a user-provided resource.</p> + <p><strong>GetDisplaySurfaceData1</strong> is similar to <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> except <strong>GetDisplaySurfaceData1</strong> takes an <strong>{{IDXGIResource}}</strong> and <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> takes an <strong>{{IDXGISurface}}</strong>.</p><p><strong>GetDisplaySurfaceData1</strong> returns an error if the input resource is not a 2D texture (represented by the <strong>{{ID3D11Texture2D}}</strong> interface) with an array size (<strong>ArraySize</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure) that is equal to the swap chain buffers.</p><p>The original <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> and the updated <strong>GetDisplaySurfaceData1</strong> behave exactly the same. <strong>GetDisplaySurfaceData1</strong> was required because textures with an array size equal to 2 (<strong>ArraySize</strong> = 2) do not implement <strong>{{IDXGISurface}}</strong>.</p><p> You can call <strong>GetDisplaySurfaceData1</strong> only when an output is in full-screen mode. If <strong>GetDisplaySurfaceData1</strong> succeeds, it fills the destination resource.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with {{CPU}} write permission (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Other surfaces can be created with {{CPU}} read-write permission (<strong>{{D3D11_CPU_ACCESS_READ}}</strong> | <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). <strong>GetDisplaySurfaceData1</strong> modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). <strong>GetDisplaySurfaceData1</strong> performs the stretch and shrink with point sampling. </p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a resource interface that represents the resource to which <strong>GetDisplaySurfaceData1</strong> copies the display surface.</p> </dd> + + + + + <p>Creates a desktop duplication interface from the <strong>{{IDXGIOutput1}}</strong> interface that represents an adapter output.</p> + <p>If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.</p><p>For <strong>DuplicateOutput</strong> to succeed, you must create <em>pDevice</em> from <strong>{{IDXGIFactory1}}</strong> or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>.</p><p>If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.</p><p>By default, only four processes can use a <strong>{{IDXGIOutputDuplication}}</strong> interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop. </p><p>For improved performance, consider using <strong>DuplicateOutput1</strong>.</p> + <p><strong>DuplicateOutput</strong> returns: </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported. If <strong>DuplicateOutput</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput</strong> again after such a notification occurs. For more information, refer to <strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong> and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>DuplicateOutput</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Provides the implementation of a shared fixed-size surface for Direct2D drawing.</p><strong>Note</strong>??If the surface is larger than the screen size, use <strong>{{IVirtualSurfaceImageSourceNative}}</strong> instead.? + <p>This interface provides the native implementation of the <strong>SurfaceImageSource</strong> Windows runtime type. To obtain a reference to <strong>{{ISurfaceImageSourceNative}}</strong>, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNative}}&gt; m_sisNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisNative) </pre> + + + + <p>Sets the {{DXGI}} device, created with {{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}, that will draw the surface. This method must be called from the {{UI}} thread.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface.</p> </dd> + + + + + <p>Opens the supplied {{DXGI}} surface for drawing.</p> + <p>If the app window that contains the <strong>SurfaceImageSource</strong> isn't active, like when it's suspended, calling the <strong>BeginDraw</strong> method returns an error.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface that will be drawn into.</p> </dd> + + + <dd> <p>Receives a reference to the surface for drawing. </p> </dd> + + + <dd> <p>Receives the point (x,y) offset of the surface that will be drawn into.</p> </dd> + + + + + <p>Closes the surface draw operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides an interface for the implementation of drawing behaviors when a <strong>VirtualSurfaceImageSource</strong> requests an update. </p> + <p>This interface is implemented by the developer to provide specific drawing behaviors for updates to a <strong>VirtualSurfaceImageSource</strong>. Classes that implement this interface are provided to the <strong>{{IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded}}</strong>, which calls the <strong>UpdatesNeeded</strong> method implementation whenever an update is requested.</p> + + + + <p>Invalidates a specific region of the shared surface for drawing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface to invalidate.</p> </dd> + + + + + <p>Gets the total number of regions of the surface that must be updated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of regions to update.</p> </dd> + + + + + <p>Gets the set of regions that must be updated on the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of regions that must be updated. You obtain this by calling <strong>GetUpdateRectCount</strong>.</p> </dd> + + + <dd> <p>Receives a list of regions that must be updated.</p> </dd> + + + + + <p>Gets the boundaries of the visible region of the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a rectangle that specifies the visible region of the shared surface.</p> </dd> + + + + + <p>Registers for the callback that will perform the drawing when an update to the shared surface is requested.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an implementation of <strong>{{IVirtualSurfaceUpdatesCallbackNative}}</strong>.</p> </dd> + + + + + <p>Resizes the surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated width of the surface.</p> </dd> + + + <dd> <p>The updated height of the surface.</p> </dd> + + + + + + + + <p>Sets the DirectX swap chain for <strong>SwapChainBackgroundPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables performing bulk operations across all <strong>SurfaceImageSource</strong> objects created in the same process.</p> + + + + <p>Flushes all current {{GPU}} work for all <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects associated with the given device.</p> + <p>The <strong>FlushAllSurfacesWithDevice</strong> method flushes current {{GPU}} work for all <strong>SurfaceImageSource</strong> objects that were created with <em>device</em>. This {{GPU}} work includes Direct2D rendering work and internal {{GPU}} work done by the framework associated with rendering. This is useful if an application has created multiple <strong>SurfaceImageSource</strong> objects and needs to flush the {{GPU}} work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the {{UI}} thread to improve performance.</p><p>You can call the <strong>FlushAllSurfacesWithDevice</strong> method from a non-{{UI}} thread. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides the implementation of a shared Microsoft DirectX surface which is displayed in a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides the native implementation of the <strong>SurfaceImageSource</strong> class. To get a reference to the <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call the <strong>QueryInterface</strong> method.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNativeWithD2D}}&gt; m_sisD2DNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisD2DNative) </pre><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time. </p><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface enables drawing to a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> from one or more background threads, which allows high-performance DirectX rendering off the {{UI}} thread.</p><p>Only call the <strong>SetDevice</strong>, <strong>BeginDraw</strong>, and <strong>EndDraw</strong> methods on <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, not on the <strong>{{ISurfaceImageSourceNative}}</strong> or <strong>{{IVirtualSurfaceImageSourceNative}}</strong> interfaces. </p><p>In order to support batching updates to multiple surfaces to improve performance, you can pass an <strong>{{ID2D1Device}}</strong> to the <strong>SetDevice</strong> method, instead of an <strong>{{ID3D11Device}}</strong>. The <strong>BeginDraw</strong> method can then optionally return a shared <strong>{{ID2D1DeviceContext}}</strong>, which the app uses to draw all content for that update.</p><p>To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support. </p><p>You can call the <strong>BeginDraw</strong>, <strong>SuspendDraw</strong>, and <strong>ResumeDraw</strong> methods from any background thread to enable high-performance multithreaded drawing.</p><p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the DirectX content with the current {{XAML}} {{UI}} thread frame. You can call <strong>BeginDraw</strong> on a background thread, call <strong>SuspendDraw</strong> when you're done drawing on the background thread, and call <strong>EndDraw</strong> on the {{UI}} thread.</p><p>Use <strong>SuspendDraw</strong> and <strong>ResumeDraw</strong> to suspend and resume drawing on any background or {{UI}} thread. </p><p>Handle the <strong>SurfaceContentsLost</strong> event to determine when you need to recreate content which may be lost if the system resets the {{GPU}}.</p> + + + + <p>Sets the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) or Direct2D device, created with <strong>{{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}</strong>, that will draw the surface.</p> + <p>This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface. You can pass an <strong>{{ID2D1Device}}</strong> to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread. </p> </dd> + + + + + <p>Initiates an update to the associated <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Closes the surface draw operation.</p> + <p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the Microsoft DirectX content with the current {{XAML}} {{UI}} thread frame. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Suspends the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Resume the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative}}&gt; m_swapChainNative; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative}}), (void **)&amp;m_swapChainNative); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative2}}&gt; m_swapChainNative2; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative2}}), (void **)&amp;m_swapChainNative2); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong> using a handle to the swap chain.</p> + <p>SetSwapChain({{HANDLE}} swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.</p><p>{{XAML}} supports setting a {{DXGI}} swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the <strong>{{ISwapChainPanelNative}}</strong> interface from a SwapChainPanel instance and calling <strong>SetSwapChain({{IDXGISwapChain}} *swapChain)</strong>. </p><p>This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a {{XAML}} SwapChainPanel in the foreground app.</p><pre> &lt;!-- {{XAML}} markup --&gt; +&lt;Page&gt; &lt;SwapChainPanel x:Name=?captureStreamDisplayPanel? /&gt; +&lt;/Page&gt; // Definitions +ComPtr&lt;{{IDXGISwapChain1}}&gt; m_swapChain; +{{HANDLE}} m_swapChainHandle; +ComPtr&lt;{{ID3D11Device}}&gt; m_d3dDevice; +ComPtr&lt;{{IDXGIAdapter}}&gt; dxgiAdapter; +ComPtr&lt;{{IDXGIFactory2}}&gt; dxgiFactory; +ComPtr&lt;{{IDXGIFactoryMedia}}&gt; dxgiFactoryMedia; +ComPtr&lt;{{IDXGIDevice}}&gt; dxgiDevice; +{{DXGI_SWAP_CHAIN_DESC1}} swapChainDesc = {0}; // Get {{DXGI}} factory (assume standard boilerplate has created {{D3D11Device}}) +m_d3dDevice.As(&amp;dxgiDevice); +dxgiDevice-&gt;GetAdapter(&amp;dxgiAdapter); +dxgiAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), &amp;dxgiFactory); // Create swap chain and get handle +{{DCompositionCreateSurfaceHandle}}({{GENERIC_ALL}}, nullptr, &amp;m_swapChainHandle); +dxgiFactory.As(&amp;dxgiFactoryMedia); +dxgiFactoryMedia-&gt;CreateSwapChainForCompositionSurfaceHandle( m_d3dDevice.Get(), m_swapChainHandle, &amp;swapChainDesc, nullptr, &amp;m_swapChain +); // Set swap chain to display in a SwapChainPanel +ComPtr&lt;{{ISwapChainPanelNative2}}&gt; panelNative; +reinterpret_cast&lt;{{IUnknown}}*&gt;(captureStreamDisplayPanel)-&gt;QueryInterface({{IID_PPV_ARGS}}(&amp;panelNative))); +panelNative-&gt;SetSwapChainHandle(m_swapChainHandle); </pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Options for swap-chain color space.</p> + <p>This enum is used by <strong>SetColorSpace</strong>.</p> + + + <dd> <p>Specifies nominal range {{YCbCr}}, which isn't an absolute color space, but a way of encoding {{RGB}} info.</p> </dd> + + + <dd> <p>Specifies {{BT}}.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.</p> </dd> + + + <dd> <p>Specifies xvYCC or extended-gamut {{YCC}} (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.</p> </dd> + + + + + <p> Indicates options for presenting frames to the swap chain. </p> + <p>This enum is used by the <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure.</p> + + + <dd> <p> Specifies that the presentation mode is a composition surface, meaning that the conversion from {{YUV}} to {{RGB}} is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform {{YUV}} to {{RGB}} conversion itself, reducing the frequency of {{YUV}} to {{RGB}} conversion to once per video frame. </p> </dd> + + + <dd> <p> Specifies that the presentation mode is an overlay surface, meaning that the {{YUV}} to {{RGB}} conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See <strong>{{IDXGIDecodeSwapChain}}</strong>. </p> </dd> + + + <dd> <p> No presentation is specified. </p> </dd> + + + <dd> <p>An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:</p> <ul> <li>Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. +</li> <li>Stop using hardware protection if possible.</li> </ul> <p>Note that simply re-creating the swap chain or the device will usually have no impact as the {{DWM}} will continue to run out of memory and will return the same failure. </p> </dd> + + + + + <p>Specifies overlay support to check for in a call to <strong>{{IDXGIOutput3::CheckOverlaySupport}}</strong>.</p> + + + + <p>Represents a 3x2 matrix. Used with <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> to indicate the scaling and translation transform for <strong>SwapChainPanel</strong> swap chains.</p> + + + + <p>Used with <strong>{{IDXGIFactoryMedia}}</strong>::<strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> to describe a decode swap chain.</p> + + + + <p>Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.</p> + <p>This structure is used with the <strong>GetFrameStatisticsMedia</strong> method.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + <dd> <p>A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See <strong>{{DXGI_FRAME_PRESENTATION_MODE}}</strong>.</p> </dd> + + + <dd> <p>If the system approves an app's custom present duration request, this field is set to the approved custom present duration.</p> <p>If the app's custom present duration request is not approved, this field is set to zero.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice3}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes a method to trim graphics memory usage by the {{DXGI}} device. </p> + <p> The <strong>{{IDXGIDevice3}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice3}}</strong> interface. To retrieve the <strong>{{IDXGIDevice3}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice3}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice3}}), (void **)&amp;pDXGIDevice);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Trims the graphics memory allocated by the <strong>{{IDXGIDevice3}}</strong> {{DXGI}} device on the app's behalf.</p><p>For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for {{PLM}} and in general lead to increased memory usage by the overall system.</p><p>Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including <strong>CoreWindow</strong> and {{XAML}} interop) must call <strong>Trim</strong> in response to the {{PLM}} suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.</p><p>Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the <strong>Trim</strong> call, therefore apps should only call <strong>Trim</strong> when going idle for a period of time (in response to {{PLM}} suspend, for example).</p><p>Apps should ensure that they call <strong>Trim</strong> as one of the last {{D3D}} operations done before going idle. Direct3D will normally defer the destruction of {{D3D}} objects. Calling <strong>Trim</strong>, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling <strong>Trim</strong> will cause the object to be destroyed and memory to be deallocated before the app suspends.</p><p>Similar to <strong>{{ID3D11DeviceContext::Flush}}</strong>, apps should call <strong>{{ID3D11DeviceContext::ClearState}}</strong> before calling <strong>Trim</strong>. <strong>ClearState</strong> clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.</p><p>It is also prudent to release references on middleware before calling <strong>Trim</strong>, as that middleware may also need to release references +to Direct3D objects.</p> + <p>This method does not return a value.</p> + + + + <p>Extends <strong>{{IDXGISwapChain1}}</strong> with methods to support swap back buffer scaling and lower-latency swap chains.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + + + + <p>Sets the source region to be used for the swap chain.</p><p>Use <strong>SetSourceSize</strong> to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> method. Prior to Windows?8.1, calling <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].</p> + <p>This method can return:</p><ul> <li>{{E_INVALIDARG}} if one or more parameters exceed the size of the back buffer.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the source region used for the swap chain.</p><p>Use <strong>GetSourceSize</strong> to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use <strong>SetSourceSize</strong> to set this portion of the swap chain. </p> + <p> This method can return error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + + <p>Sets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>This method is only valid for use on swap chains created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>. Otherwise, the result will be {{DXGI_ERROR_INVALID_CALL}}.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.</p> </dd> + + + + + <p>Gets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.</p> </dd> + + + + + <p>Returns a waitable handle that signals when the {{DXGI}} adapter has finished presenting a new frame.</p><p>Windows?8.1 introduces new {{APIs}} that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the {{DXGI}} swap chain with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong> flag set, then call <strong>GetFrameLatencyWaitableObject</strong> to retrieve the waitable handle. Use the waitable handle with <strong>WaitForSingleObjectEx</strong> to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.</p> + <p>A handle to the waitable object, or {{NULL}} if the swap chain was not created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>.</p> + + + + <p>Sets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>SetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{E_INVALIDARG}} if the <em>pMatrix</em> parameter is incorrect, for example, <em>pMatrix</em> is {{NULL}} or the matrix represented by <strong>{{DXGI_MATRIX_3X2_F}}</strong> includes components other than scale and translation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>GetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Queries an adapter output for multiplane overlay support. If this {{API}} returns ?{{TRUE}}?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this {{API}} returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER}}</strong> flag).</p> + <p>See <strong>CreateSwapChainForCoreWindow</strong> for info on creating a foreground swap chain.</p> + <p>{{TRUE}} if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns {{FALSE}}.</p> + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p>Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) object was created.</p> + <p>The <strong>GetCreationFlags</strong> method returns flags that were passed to the <strong>CreateDXGIFactory2</strong> function, or were implicitly constructed by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, <strong>{{D3D11CreateDevice}}</strong>, or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + <p>The creation flags.</p> + + + + <p> Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface. </p> + <p> Decode swap chains are intended for use primarily with {{YUV}} surface formats. When using decode buffers created with an {{RGB}} surface format, the <em>TargetRect</em> and <em>DestSize</em> must be set equal to the buffer dimensions. <em>SourceRect</em> cannot exceed the buffer dimensions. </p><p> In clone mode, the decode swap chain is only guaranteed to be shown on the primary output. </p><p> Decode swap chains cannot be used with dirty rects. </p> + + + + <p>Presents a frame on the output adapter. The frame is a subresource of the <strong>{{IDXGIResource}}</strong> object that was used to create the decode swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the following error codes:</p><ul> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_STATUS_OCCLUDED}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li><strong>{{E_OUTOFMEMORY}}</strong></li> </ul> + + + + <p>Sets the rectangle that defines the source region for the video processing blit operation.</p><p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the source region to set for the swap chain.</p> </dd> + + + + + <p>Sets the rectangle that defines the target region for the video processing blit operation.</p><p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the target region to set for the swap chain.</p> </dd> + + + + + <p>Sets the size of the destination surface to use for the video processing blit operation.</p><p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>The width of the destination size, in pixels.</p> </dd> + + + <dd> <p>The height of the destination size, in pixels.</p> </dd> + + + + + <p>Gets the source region that is used for the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source region for the swap chain.</p> </dd> + + + + + <p>Gets the rectangle that defines the target region for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the target region for the swap chain.</p> </dd> + + + + + <p>Gets the size of the destination surface to use for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a variable that receives the width in pixels.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height in pixels.</p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space to set for the swap chain.</p> </dd> + + + + + <p>Gets the color space used by the swap chain.</p> + <p>A combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space for the swap chain.</p> + + + + <p> Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video. </p> + <p> To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) media factory interface, pass <strong>{{IDXGIFactoryMedia}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object returned by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, or <strong>CreateDXGIFactory2</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, <strong>{{IDXGIDevice2}}</strong>, or <strong>{{IDXGIDevice3}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactoryMedia}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactoryMedia}}), (void **)&amp;pIDXGIFactory);</pre> + + + + <p>Creates a {{YUV}} swap chain for an existing DirectComposition surface handle.</p> + <p><strong>CreateSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul> + + + + <p> Creates a {{YUV}} swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an <strong>{{IDXGIResource}}</strong> buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the <strong>{{IDXGIResource}}</strong>. </p> + <p>The <strong>{{IDXGIResource}}</strong> provided via the <em>pYuvDecodeBuffers</em> parameter must point to at least one subresource, and all subresources must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag.</p> + <p><strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>. </li> <li> Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>. </li> </ul> + + + + <p>This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.</p><p> For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel. </p> + <p> Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the {{DXGI}} output adapter is attached to an external display then <strong>CheckPresentDurationSupport</strong> will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes. </p><p> Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds. </p> + + + + <p>Queries the system for a <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure that indicates whether a custom refresh rate is currently approved by the system.</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + + <p>Requests a custom presentation duration (custom refresh rate).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>The custom presentation duration, specified in hundreds of nanoseconds.</p> </dd> + + + + + <p>Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.</p> + <p>If the {{DXGI}} output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.</p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput3}}</strong> interface exposes a method to check for overlay support.</p> + + + + <p>Checks for overlay support.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlaySupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay support. </p> </dd> + + + + + <p>Creates a {{DXGI}} 1.3 factory that you can use to generate other {{DXGI}} objects.</p><p>In Windows?8, any {{DXGI}} factory created while {{DXGIDebug}}.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that {{DXGIDebug}}.dll be loaded instead. Use <strong>CreateDXGIFactory2</strong> and specify the {{DXGI_CREATE_FACTORY_DEBUG}} flag to request {{DXGIDebug}}.dll; the {{DLL}} will be loaded if it is present on the system.</p> + <p>This function accepts a flag indicating whether {{DXGIDebug}}.dll is loaded. The function otherwise behaves identically to <strong>CreateDXGIFactory1</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>Valid values include the <strong>{{DXGI_CREATE_FACTORY_DEBUG}} (0x01)</strong> flag, and zero.</p> <strong>Note</strong>??This flag will be set by the {{D3D}} runtime if:<ul> <li>The system creates an implicit factory during device creation.</li> <li>The {{D3D11_CREATE_DEVICE_DEBUG}} flag is specified during device creation, for example using <strong>{{D3D11CreateDevice}}</strong> (or the swapchain method, or the Direct3D 10 equivalents).</li> </ul> ? </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory2}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory2}}</strong> object.</p> </dd> + + + + + <p>Retrieves an interface that Windows Store apps use for debugging the Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>The <strong>{{DXGIGetDebugInterface1}}</strong> function returns <strong>{{E_NOINTERFACE}}</strong> on systems without the Windows Software Development Kit ({{SDK}}) installed, because it's a development-time aid.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Not used.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type, which can be the identifier for the <strong>{{IDXGIDebug}}</strong>, <strong>{{IDXGIDebug1}}</strong>, or <strong>{{IDXGIInfoQueue}}</strong> interfaces.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Specifies color space support for the swap chain.</p> + + + <dd> <p>Color space support is present.</p> </dd> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies support for overlay color space.</p> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies the memory segment group to use.</p> + <p>This enum is used by <strong>QueryVideoMemoryInfo</strong> and <strong>SetVideoMemoryReservation</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p> The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the {{GPU}}. Applications should target the local segment group as the target size for their working set.</p> </dd> + + + <dd> <p>The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.</p> </dd> + + + + + <p>Describes the current video memory budgeting parameters.</p> + <p>Use this structure with <strong>QueryVideoMemoryInfo</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p>Specifies the {{OS}}-provided video memory budget, in bytes, that the application should target. If <em>CurrentUsage</em> is greater than <em>Budget</em>, the application may incur stuttering or performance penalties due to background activity by the {{OS}} to provide other applications with a fair usage of video memory.</p> </dd> + + + <dd> <p> Specifies the application?s current video memory usage, in bytes.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call <strong>{{IDXGIAdapter3::SetVideoMemoryReservation}}</strong>.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that is reserved by the application. The {{OS}} uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement. </p> </dd> + + + + + <p>Extends <strong>{{IDXGISwapChain2}}</strong> with methods to support getting the index of the swap chain's current back buffer and support for color space.</p> + + + + <p>Gets the index of the swap chain's current back buffer.</p> + <p>Returns the index of the current back buffer.</p> + + + + <p>Checks the swap chain's support for color space.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check support for.</p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for color space support. </p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies the color space to set.</p> </dd> + + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a {{D3D12}} command queue as an input device. This should be called when the application window is resized. </p> + <p> This method is only valid to call when the swapchain was created using a {{D3D12}} command queue (<strong>{{ID3D12CommandQueue}}</strong>) as an input device. </p><p> When a swapchain is created on a multi-{{GPU}} adapter, the backbuffers are all created on node 1 and only a single command queue is supported. <strong>ResizeBuffers1</strong> enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering ({{AFR}}) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters. </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p><p> Also see the Remarks section in <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, all of which is relevant to <strong>ResizeBuffers1</strong>. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + <dd> <p> An array of {{UINTs}}, of total size <em>BufferCount</em>, where the value indicates which node the back buffer should be created on. Buffers created using <strong>ResizeBuffers1</strong> with a non-null <em>pCreationNodeMask</em> array are visible to all nodes. </p> </dd> + + + <dd> <p> An array of command queues (<strong>{{ID3D12CommandQueue}}</strong> instances), of total size <em>BufferCount</em>. Each queue provided must match the corresponding creation node mask specified in the <em>pCreationNodeMask</em> array. When <strong>Present()</strong> is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation. </p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput4}}</strong> interface exposes a method to check for overlay color space support.</p> + + + + <p>Checks for overlay color space support.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check overlay support for.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlayColorSpaceSupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay color space support. </p> </dd> + + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p> Outputs the <strong>{{IDXGIAdapter}}</strong> for the specified {{LUID}}. </p> + <p> For Direct3D 12, it's no longer possible to backtrack from a device to the <strong>{{IDXGIAdapter}}</strong> that was used to create it. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> enables an app to retrieve information about the adapter where a {{D3D12}} device was created. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> is designed to be paired with <strong>{{ID3D12Device::GetAdapterLuid}}</strong>. For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + + <p> Provides an adapter which can be provided to {{D3D12CreateDevice}} to use the {{WARP}} renderer. </p> + <p> For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory4}}</strong> object referenced by the <em>ppvAdapter</em> parameter. </p> </dd> + + + <dd> <p> The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be {{NULL}}. </p> </dd> + + + + + <p>This interface adds some memory residency methods, for budgeting and reserving physical memory.</p> + <p>For more details, refer to the Residency section of the {{D3D12}} documentation.</p> + + + + <p>Registers to receive notification of hardware content protection teardown events.</p> + <p>Call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong>() to check for the presence of the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN}}</strong> capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call <strong>{{ID3D11VideoContext1::CheckCryptoSessionStatus}}</strong> to determine the impact of the hardware teardown for a specific <strong>{{ID3D11CryptoSession}}</strong> interface. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the event object that the operating system sets when hardware content protection teardown occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters an event to stop it from receiving notification of hardware content protection teardown events.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p> This method informs the process of the current budget and process usage. </p> + <p> Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is queried. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Fills in a {{DXGI_QUERY_VIDEO_MEMORY_INFO}} structure with the current values. </p> </dd> + + + + + <p> This method sends the minimum required physical memory for an application, to the {{OS}}. </p> + <p> Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the {{OS}} quickly minimize the impact of large memory pressure situations. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is being set. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that sets the minimum required physical memory, in bytes. </p> </dd> + + + + + <p>This method establishes a correlation between a {{CPU}} synchronization object and the budget change event.</p> + <p>Instead of calling <strong>QueryVideoMemoryInfo</strong> regularly, applications can use {{CPU}} synchronization objects to efficiently wake threads when budget changes occur. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies a {{HANDLE}} for the event.</p> </dd> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>This method stops notifying a {{CPU}} synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.</p> + <p>An application may switch back to polling for the information regularly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + + + + <p>Specifies the header metadata type.</p> + <p>This enum is used by the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>Indicates there is no header metadata.</p> </dd> + + + <dd> <p>Indicates the header metadata is held by a <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p>Specifies flags for the <strong>OfferResources1</strong> method.</p> + + + + <p>Specifies result flags for the <strong>ReclaimResources1</strong> method.</p> + + + + <p>Specifies a range of hardware features, to be used when checking for feature support.</p> + <p>This enum is used by the <strong>CheckFeatureSupport</strong> method.</p> + + + <dd> <p>The display supports tearing, a requirement of variable refresh rate displays.</p> </dd> + + + + + <p>Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.</p> + <p>The X and Y coordinates of the parameters mean the xy chromacity coordinate in the {{CIE1931}} color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.</p><p>This structure is used in conjunction with the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000. </p> </dd> + + + <dd> <p>The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.</p> </dd> + + + <dd> <p>The maximum nit value (in units of 0.00001 nit) used anywhere in the content. </p> </dd> + + + <dd> <p>The per-frame average of the maximum nit values (in units of 0.00001 nit).</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the <strong>{{IDXGIOutputDuplication}}</strong> object.</p> + <p>This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original <strong>DuplicateOutput</strong> function always converts the fullscreen surface to a 32-bit {{BGRA}} format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit {{BGRA}} incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using <strong>DuplicateOutput1</strong> also allows receiving the full gamut of colors in cases where a high-color format (such as {{R10G10B10A2}}) is being presented. </p><p>The <em>pSupportedFormats</em> array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the <em>pSupportedFormats</em> array, {{DXGI}} will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong>. The list of supported formats should always contain {{DXGI_FORMAT_B8G8R8A8_UNORM}}, as this is the most common format for the desktop. +</p> + <p> </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput1</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li> <p>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported.</p> <p>If <strong>DuplicateOutput1</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput1</strong> again after such a notification occurs. For more information, see the desktop switch (<strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong>) and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </p> </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput1</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + <p>This method sets High Dynamic Range ({{HDR}}) and Wide Color Gamut ({{WCG}}) header metadata.</p> + <p>This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_HDR_METADATA_TYPE}}</strong> enum.</p> </dd> + + + <dd> <p>Specifies the size of <em>pMetaData</em>, in bytes.</p> </dd> + + + <dd> <p>Specifies a void reference that references the metadata, if it exists. Refer to the <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.</p> + <p><strong>OfferResources1</strong> (an extension of the original <strong>{{IDXGIDevice2::OfferResources}}</strong> {{API}}) enables {{D3D}} based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. +A de-committed allocation cannot be reused, so opting in to the new {{DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT}} flag means the new reclaim results must be properly handled. Refer to the flag descriptions in <strong>{{DXGI_RECLAIM_RESOURCE_RESULTS}}</strong> and the Example below.</p><p><strong>OfferResources1</strong> and <strong>ReclaimResources1</strong> may <em>not</em> be used interchangeably with <strong>OfferResources</strong> and <strong>ReclaimResources</strong>. +</p><p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources1</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources1</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>ReclaimResources1</strong> method to reclaim the resource. You cannot call <strong>OfferResources1</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources1</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources1</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><p>The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources1</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if a resource in the array, or the priority, is invalid.</p> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + <dd> <p>Specifies the <strong>{{DXGI_OFFER_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice4::OfferResources1}}</strong>.</p> + <p>After you call <strong>OfferResources1</strong> to offer one or more resources, you must call <strong>ReclaimResources1</strong> before you can use those resources again.</p><p>To reclaim shared resources, call <strong>ReclaimResources1</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources1</strong> only while you hold the mutex.</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the resources are invalid.</p> + + + + <p>This interface enables a single method to support variable refresh rate displays.</p> + + + + <p>Used to check for hardware feature support.</p> + <p>Refer to the description of <strong>{{DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of <strong>{{DXGI_FEATURE}}</strong> to query support for.</p> </dd> + + + <dd> <p>Specifies a reference to a buffer that will be filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size, in bytes, of <em>pFeatureSupportData</em>.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + + + + + + + <p> </p><p>Specifies the aspect-ratio mode.</p> + + + <dd> <p>Do not maintain the aspect ratio of the video. Stretch the video to fit the output rectangle.</p> </dd> + + + <dd> <p>Preserve the aspect ratio of the video by letterboxing or within the output rectangle.</p> </dd> + + + <dd> <strong>Note</strong>??Currently the {{EVR}} ignores this flag. ? <p>Correct the aspect ratio if the physical size of the display device does not match the display resolution. For example, if the native resolution of the monitor is 1600 by 1200 (4:3) but the display resolution is 1280 by 1024 (5:4), the monitor will display non-square pixels.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePicture}}</strong> flag.</p> </dd> + + + <dd> <p>Apply a non-linear horizontal stretch if the aspect ratio of the destination rectangle does not match the aspect ratio of the source rectangle.</p> <p>The non-linear stretch algorithm preserves the aspect ratio in the middle of the picture and stretches (or shrinks) the image progressively more toward the left and right. This mode is useful when viewing 4:3 content full-screen on a 16:9 display, instead of pillar-boxing. Non-linear vertical stretch is not supported, because the visual results are generally poor.</p> <p>This mode may cause performance degradation.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePixel}}</strong> and <strong>{{MFVideoARMode_PreservePicture}}</strong> flags.</p> </dd> + + + <dd> <p>Bitmask to validate flag values. This value is not a valid flag.</p> </dd> + + + + + <p> </p><p>Contains flags that define how the enhanced video renderer ({{EVR}}) displays the video.</p> + <p>To set these flags, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.</p><p>The flags named "{{MFVideoRenderPrefs_Allow}}..." cause the {{EVR}} to use lower-quality settings only when requested by the quality manager. (For more information, see <strong>{{IMFQualityAdvise}}</strong>.) The flags named "{{MFVideoRenderPrefs_Force}}..." cause the video mixer to use lower-quality settings regardless of the quality manager. </p> + + + <dd> <p> If this flag is set, the {{EVR}} does not draw the border color. By default, the {{EVR}} draws a border on areas of the destination rectangle that have no video. See <strong>{{IMFVideoDisplayControl::SetBorderColor}}</strong>. </p> </dd> + + + <dd> <p> If this flag is set, the {{EVR}} does not clip the video when the video window straddles two monitors. By default, if the video window straddles two monitors, the {{EVR}} clips the video to the monitor that contains the largest area of video. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to batch Direct3D <strong>Present</strong> calls. This optimization enables the system to enter to idle states more frequently, which can reduce power consumption. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to batch Direct3D <strong>Present</strong> calls.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. The {{EVR}} will then scale the result to the correct output size. The effective resolution will be lower if this setting is applied.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Prevent the {{EVR}} from repainting the video window after a stop command. By default, the {{EVR}} repaints the video window black after a stop command.</p> </dd> + + + <dd> <p> Bitmask to validate flag values. This value is not a valid flag. </p> </dd> + + + + + <p>Defines messages for an enhanced video renderer ({{EVR}}) presenter. This enumeration is used with the <strong>{{IMFVideoPresenter::ProcessMessage}}</strong> method.</p> + + + + <p>Contains flags that are used to configure how the enhanced video renderer ({{EVR}}) performs deinterlacing.</p> + <p>To set these flags, call the <strong>{{IMFVideoMixerControl2::SetMixingPrefs}}</strong> method.</p><p>These flags control some trade-offs between video quality and rendering speed. The constants named "{{MFVideoMixPrefs_Allow}}..." enable lower-quality settings, but only when the quality manager requests a drop in quality. The constants named "{{MFVideoMixPrefs_Force}}..." force the {{EVR}} to use lower-quality settings regardless of what the quality manager requests. (For more information about the quality manager, see <strong>{{IMFQualityAdvise}}</strong>.)</p><p>Currently two lower-quality modes are supported, as described in the following table. Either is preferable to dropping an entire frame.</p><p></p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td> <p>Half interface</p> </td><td> <p>The {{EVR}}'s video mixer skips the second field (relative to temporal order) of each interlaced frame. The video mixer still deinterlaces the first field, and this operation typically interpolates data from the second field. The overall frame rate is unaffected.</p> </td></tr> <tr><td> <p>Bob deinterlacing</p> </td><td> <p>The video mixer uses bob deinterlacing, even if the driver supports a higher-quality deinterlacing algorithm.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Force the {{EVR}} to skip the second field (in temporal order) of every interlaced frame. </p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to skip the second field (in temporal order) of every interlaced frame.</p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to use bob deinterlacing, even if the driver supports a higher-quality deinterlacing mode.</p> </dd> + + + <dd> <p>Force the {{EVR}} to use bob deinterlacing, even if the driver supports a higher-quality mode.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag. +</p> </dd> + + + + + <p>Contains flags that are used to configure the Microsoft DirectShow enhanced video renderer ({{EVR}}) filter.</p> + + + <dd> <p>Enables dynamic adjustments to video quality during playback.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag.</p> </dd> + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p> </p><p>Defines a normalized rectangle, which is used to specify sub-rectangles in a video rectangle. When a rectangle N is <em>normalized</em> relative to some other rectangle R, it means the following:</p><ul> <li> <p>The coordinate (0.0, 0.0) on N is mapped to the upper-left corner of R.</p> </li> <li> <p>The coordinate (1.0, 1.0) on N is mapped to the lower-right corner of R.</p> </li> </ul><p>Any coordinates of N that fall outside the range [0...1] are mapped to positions outside the rectangle R. A normalized rectangle can be used to specify a region within a video rectangle without knowing the resolution or even the aspect ratio of the video. For example, the upper-left quadrant is defined as {0.0, 0.0, 0.5, 0.5}.</p> + + + <dd> <p>X-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>X-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + + + <p>Maps a position on an input video stream to the corresponding position on an output video stream.</p><p>To obtain a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the renderer with the service {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}.</p> + + + + <p>Maps output image coordinates to input image coordinates. This method provides the reverse transformation for components that map coordinates on the input image to different coordinates on the output image. </p> + <p>In the following diagram, R(dest) is the destination rectangle for the video. You can obtain this rectangle by calling <strong>{{IMFVideoDisplayControl::GetVideoPosition}}</strong>. The rectangle {{R1}} is a substream within the video. The point P has pixel coordinates (x,y) relative to R(dest).</p><p></p><p>The position of P relative to R(dest) in <em>normalized</em> coordinates is calculated as follows:</p><code>float xn = float(x + 0.5) / widthDest; +float xy = float(y + 0.5) / heightDest; +</code><p>where <em>widthDest</em> and <em>heightDest</em> are the width and height of R(dest) in pixels.</p><p>To calculate the position of P relative to {{R1}}, call <strong>MapOutputCoordinateToInputStream</strong> as follows:</p><code>float x1 = 0, y1 = 0; +hr = pMap-&gt;MapOutputCoordinateToInputStream(xn, yn, 0, dwInputStreamIndex, &amp;x1, &amp;y1);</code><p>The values returned in <em>x1</em> and <em>y1</em> are normalized to the range [0...1]. To convert back to pixel coordinates, scale these values by the size of {{R1:}}</p><code>int scaledx = int(floor(x1 * widthR1)); +int scaledy = int(floor(xy * heightR1));</code><p>Note that <em>x1</em> and <em>y1</em> might fall outside the range [0...1] if P lies outside of {{R1}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> X-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Y-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Output stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Input stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Receives the mapped x-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Receives the mapped y-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + + + <p>Returns the device identifier supported by a video renderer component. This interface is implemented by mixers and presenters for the enhanced video renderer ({{EVR}}). If you replace either of these components, the mixer and presenter must report the same device identifier.</p> + + + + <p> </p><p>Returns the identifier of the video device supported by an {{EVR}} mixer or presenter.</p> + <p>If a mixer or presenter uses Direct3D 9, it must return the value {{IID_IDirect3DDevice9}} in <em>pDeviceID</em>. The {{EVR}}'s default mixer and presenter both return this value. If you write a custom mixer or presenter, it can return some other value. However, the mixer and presenter must use matching device identifiers.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device identifier. Generally, the value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) displays video.</p><p>The {{EVR}} presenter implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li>The {{EVR}} media sink. </li> <li>The DirectShow {{EVR}} filter. </li> <li>The {{EVR}} presenter. </li> </ul><p>If you implement a custom presenter for the {{EVR}}, the presenter can optionally expose this interface as a service.</p> + + + + <p> Gets the size and aspect ratio of the video, prior to any stretching by the video renderer. </p> + <p>If no media types have been set on any video streams, the method succeeds but all parameters are set to zero.</p><p>You can set <em>pszVideo</em> or <em>pszARVideo</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one of the parameters must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the native video rectangle. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the aspect ratio of the video. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the range of sizes that the enhanced video renderer ({{EVR}}) can display without significantly degrading performance or image quality. </p> + <p>You can set <em>pszMin</em> or <em>pszMax</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the maximum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the source and destination rectangles for the video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>One or more required parameters are <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the source rectangle.</p> </dd> + + + <dd> <p>Receives the current destination rectangle.</p> </dd> + + + + + <p> </p><p>Specifies how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> Queries how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the clipping window for the video. </p> + <p>There is no default clipping window. The application must set the clipping window.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a handle to the window where the enhanced video renderer ({{EVR}}) will draw the video.</p> </dd> + + + + + <p> </p><p>Repaints the current video frame. Call this method whenever the application receives a {{WM_PAINT}} message.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} cannot repaint the frame at this time. This error can occur while the {{EVR}} is switching between full-screen and windowed mode. The caller can safely ignore this error.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> Gets a copy of the current image being displayed by the video renderer. </p> + <p>This method can be called at any time. However, calling the method too frequently degrades the video playback performance.</p><p>This method retrieves a copy of the final composited image, which includes any substreams, alpha-blended bitmap, aspect ratio correction, background color, and so forth.</p><p>In windowed mode, the bitmap is the size of the destination rectangle specified in <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. In full-screen mode, the bitmap is the size of the display.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LICENSE_INCORRECT_RIGHTS}}</strong></dt> </dl> </td><td> <p>The content is protected and the license does not permit capturing the image.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{BITMAPINFOHEADER}}</strong> structure that receives a description of the bitmap. Set the <strong>biSize</strong> member of the structure to <code>sizeof({{BITMAPINFOHEADER}})</code> before calling the method.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains a packed Windows device-independent bitmap ({{DIB}}). The caller must free the memory for the bitmap by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the buffer returned in <em>pDib</em>, in bytes.</p> </dd> + + + <dd> <p>Receives the time stamp of the captured image.</p> </dd> + + + + + <p> </p><p>Sets the border color for the video.</p> + <p>By default, if the video window straddles two monitors, the enhanced video renderer ({{EVR}}) clips the video to one monitor and draws the border color on the remaining portion of the window. (To change the clipping behavior, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.)</p><p>The border color is not used for letterboxing. To change the letterbox color, call <strong>{{IMFVideoProcessor::SetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the border color as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> Gets the border color for the video. </p> + <p>The border color is used for areas where the enhanced video renderer ({{EVR}}) does not draw any video.</p><p>The border color is not used for letterboxing. To get the letterbox color, call <strong>{{IMFVideoProcessor::GetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the border color, as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> </p><p>Sets various preferences related to video rendering.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p> Gets various video rendering settings. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. ]</p><p> Sets or unsets full-screen rendering mode.</p><p>To implement full-screen playback, an application should simply resize the video window to cover the entire area of the monitor. Also set the window to be a topmost window, so that the application receives all mouse-click messages. For more information about topmost windows, see the documentation for the <strong>SetWindowPos</strong> function.</p> + <p> The default {{EVR}} presenter implements full-screen mode using Direct3D exclusive mode. </p><p> If you use this method to switch to full-screen mode, set the application window to be a topmost window and resize the window to cover the entire monitor. This ensures that the application window receives all mouse-click messages. Also set the keyboard focus to the application window. When you switch out of full-screen mode, restore the window's original size and position. </p><p> By default, the cursor is still visible in full-screen mode. To hide the cursor, call <strong>ShowCursor</strong>. </p><p>The transition to and from full-screen mode occurs asynchronously. To get the current mode, call <strong>{{IMFVideoDisplayControl::GetFullscreen}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Queries whether the enhanced video renderer ({{EVR}}) is currently in full-screen mode. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} is currently switching between full-screen and windowed mode.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the {{EVR}} is in full-screen mode. If <strong>{{FALSE}}</strong>, the {{EVR}} will display the video inside the application-provided clipping window.</p> </dd> + + + + + <p>Represents a video presenter. A <em>video presenter</em> is an object that receives video frames, typically from a video mixer, and presents them in some way, typically by rendering them to the display. The enhanced video renderer ({{EVR}}) provides a default video presenter, and applications can implement custom presenters.</p><p>The video presenter receives video frames as soon as they are available from upstream. The video presenter is responsible for presenting frames at the correct time and for synchronizing with the presentation clock.</p> + + + + <p> </p><p>Sends a message to the video presenter. Messages are used to signal the presenter that it must perform some action, or that some event has occurred.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the message as a member of the <strong>{{MFVP_MESSAGE_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Message parameter. The meaning of this parameter depends on the message type.</p> </dd> + + + + + <p> </p><p>Retrieves the presenter's media type.</p> + <p>This method returns the media type that the presenter sets for the mixer's output type. It describes the format of the composited image.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media type is not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables the presenter for the enhanced video renderer ({{EVR}}) to request a specific frame from the video mixer.</p><p>The sample objects created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function implement this interface. To retrieve a reference to this interface, call <strong>QueryInterface</strong> on the sample.</p> + + + + <p> </p><p>Called by the mixer to get the time and duration of the sample requested by the presenter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No time stamp was set for this sample. See <strong>{{IMFDesiredSample::Clear}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the desired sample time that should be mixed.</p> </dd> + + + <dd> <p>Receives the sample duration that should be mixed.</p> </dd> + + + + + <p> </p><p>Called by the presenter to set the time and duration of the sample that it requests from the mixer.</p> + <p>This value should be set prior to passing the buffer to the mixer for a Mix operation. The mixer sets the actual start and duration times on the sample before sending it back.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The time of the requested sample.</p> </dd> + + + <dd> <p>The duration of the requested sample.</p> </dd> + + + + + <p> </p><p>Clears the time stamps previously set by a call to <strong>{{IMFDesiredSample::SetDesiredSampleTimeAndDuration}}</strong>.</p> + <p>After this method is called, the <strong>{{IMFDesiredSample::GetDesiredSampleTimeAndDuration}}</strong> method returns {{MF_E_NOT_AVAILABLE}}.</p><p>This method also clears the time stamp and duration and removes all attributes from the sample.</p> + <p>This method does not return a value.</p> + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) mixes video substreams. Applications can use this interface to control video mixing during playback.</p><p>The {{EVR}} mixer implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier {{GUID}} is {{MR_VIDEO_MIXER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li> The {{EVR}} media sink. </li> <li> The DirectShow {{EVR}} filter. </li> <li> The {{EVR}} mixer. </li> </ul><p>If you implement a custom mixer for the {{EVR}}, the mixer can optionally expose this interface as a service.</p> + + + + <p> </p><p>Sets the z-order of a video stream.</p> + <p>The {{EVR}} draws the video streams in the order of their z-order values, starting with zero. The reference stream must be first in the z-order, and the remaining streams can be in any order.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value of <em>dwZ</em> is larger than the maximum z-order value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid z-order for this stream. For the reference stream, <em>dwZ</em> must be zero. For all other streams, <em>dwZ</em> must be greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Z-order value. The z-order of the reference stream must be zero. The maximum z-order value is the number of streams minus one.</p> </dd> + + + + + <p> </p><p>Retrieves the z-order of a video stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Receives the z-order value.</p> </dd> + + + + + <p> Sets the position of a video stream within the composition rectangle. </p> + <p> The mixer draws each video stream inside a bounding rectangle that is specified relative to the final video image. This bounding rectangle is given in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. </p><p> The coordinates of the bounding rectangle must fall within the range [0.0, 1.0]. Also, the X and Y coordinates of the upper-left corner cannot exceed the X and Y coordinates of the lower-right corner. In other words, the bounding rectangle must fit entirely within the composition rectangle and cannot be flipped vertically or horizontally. </p><p>The following diagram shows how the {{EVR}} mixes substreams.</p><p>The output rectangle for the stream is specified by calling <strong>SetStreamOutputRect</strong>. The source rectangle is specified by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. The mixer applies the output rectangle first, when it mixes the streams into a single bounding rectangle. This bounding rectangle is called <em>composition space</em>. Then the presenter applies the source rectangle to the composited image.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The coordinates of the bounding rectangle given in <em>pnrcOutput</em> are not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that defines the bounding rectangle for the video stream.</p> </dd> + + + + + <p> </p><p>Retrieves the position of a video stream within the composition rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the bounding rectangle, in normalized coordinates.</p> </dd> + + + + + <p>Controls preferences for video deinterlacing.</p><p> The default video mixer for the Enhanced Video Renderer ({{EVR}}) implements this interface.</p><p>To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> on any of the following objects, using the <strong>{{MR_VIDEO_MIXER_SERVICE}}</strong> service identifier:</p><ul> <li>The Media Session, if the topology contains an instance of the {{EVR}}.</li> <li>The {{EVR}} media sink.</li> <li>The DirectShow {{EVR}} filter.</li> <li>The {{EVR}} mixer.</li> </ul> + + + + <p>Sets the preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration. </p> </dd> + + + + + <p>Gets the current preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>Sets a new mixer or presenter for the Enhanced Video Renderer ({{EVR}}).</p><p>Both the {{EVR}} media sink and the DirectShow {{EVR}} filter implement this interface. To get a reference to the interface, call <strong>QueryInterface</strong> on the media sink or the filter. Do not use <strong>{{IMFGetService}}</strong> to get a reference to this interface.</p> + <p>The {{EVR}} activation object returned by the <strong>{{MFCreateVideoRendererActivate}}</strong> function does not expose this interface. Instead, the activation object supports attributes that specify a custom mixer or presenter. For more information, see Enhanced Video Renderer Attributes.</p> + + + + <p> </p><p>Sets a new mixer or presenter for the enhanced video renderer ({{EVR}}).</p> + <p>Call this method directly after creating the {{EVR}}, before you do any of the following:</p><ul> <li> <p>Call <strong>{{IMFGetService::GetService}}</strong> on the {{EVR}}.</p> </li> <li> <p>Call <strong>{{IEVRFilterConfig::SetNumberOfStreams}}</strong> on the {{EVR}}.</p> </li> <li> <p>Connect any pins on the {{EVR}} filter, or set any media types on {{EVR}} media sink.</p> </li> </ul><p>The {{EVR}} filter returns {{VFW_E_WRONG_STATE}} if any of the filter's pins are connected. The {{EVR}} media sink returns {{MF_E_INVALIDREQUEST}} if a media type is set on any of the streams, or the presentation clock is running or paused.</p><p>The device identifiers for the mixer and the presenter must match. The <strong>{{IMFVideoDeviceID::GetDeviceID}}</strong> method returns the device identifier. If they do not match, the method returns {{E_INVALIDARG}}.</p><p>If the video renderer is in the protected media path ({{PMP}}), the mixer and presenter objects must be certified safe components and pass any trust authority verification that is being enforced. Otherwise, this method will fail.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Either the mixer or the presenter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The mixer and presenter cannot be replaced in the current state. ({{EVR}} media sink.)</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>One or more input pins are connected. (DirectShow {{EVR}} filter.)</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTransform}}</strong> interface of the mixer to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default mixer.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFVideoPresenter}}</strong> interface of the presenter to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default presenter.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p> </p><p>Sets the number of input pins on the {{EVR}} filter.</p> + <p>After this method has been called, it cannot be called a second time on the same instance of the {{EVR}} filter. Also, the method fails if any input pins are connected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid number of streams. The minimum is one, and the maximum is 16.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>This method has already been called, or at least one pin is already connected.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the total number of input pins on the {{EVR}} filter. This value includes the input pin for the reference stream, which is created by default. For example, to mix one substream plus the reference stream, set this parameter to 2.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Configures the DirectShow <strong>Enhanced Video Renderer</strong> ({{EVR}}) filter. To get a reference to this interface, call <strong>QueryInterface</strong> on the {{EVR}} filter.</p> + + + + <p>Sets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> ({{EVR}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + + <p>Gets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables a custom video mixer or video presenter to get interface references from the Enhanced Video Renderer ({{EVR}}). The mixer can also use this interface to get interface references from the presenter, and the presenter can use it to get interface references from the mixer.</p><p>To use this interface, implement the <strong>{{IMFTopologyServiceLookupClient}}</strong> interface on your custom mixer or presenter. The {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> with a reference to the {{EVR}}'s <strong>{{IMFTopologyServiceLookup}}</strong> interface.</p> + + + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p>Initializes a video mixer or presenter. This interface is implemented by mixers and presenters, and enables them to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>When the {{EVR}} loads the video mixer and the video presenter, the {{EVR}} queries the object for this interface and calls <strong>InitServicePointers</strong>. Inside the <strong>InitServicePointers</strong> method, the object can query the {{EVR}} for interface references.</p> + + + + <p> </p><p>Signals the mixer or presenter to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>The <strong>{{IMFTopologyServiceLookup}}</strong> reference is guaranteed to be valid only during the call to <strong>InitServicePointers</strong>. The mixer or presenter should not store a reference to this interface after the method returns.</p><p>When the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong>, the mixer or presenter should release any references it obtained from the {{EVR}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyServiceLookup}}</strong> interface. To query the {{EVR}} for an interface, call <strong>{{IMFTopologyServiceLookup::LookupService}}</strong>.</p> </dd> + + + + + <p> </p><p>Signals the object to release the interface references obtained from the enhanced video renderer ({{EVR}}).</p> + <p>After this method is called, any interface references obtained during the previous call to <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> are no longer valid. The object must release them.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Queries whether the plug-in has any transient vulnerabilities at this time. </p> + <p>This method provides a way for the plug-in to report temporary conditions that would cause the input trust authority ({{ITA}}) to distrust the plug-in. For example, if an {{EVR}} presenter is in windowed mode, it is vulnerable to {{GDI}} screen captures.</p><p>To disable screen capture in Direct3D, the plug-in must do the following:</p><ul> <li> <p>Create the Direct3D device in full-screen exlusive mode.</p> </li> <li> <p>Specify the {{D3DCREATE_DISABLE_PRINTSCREEN}} flag when you create the device. For more information, see <strong>{{IDirect3D9::CreateDevice}}</strong> in the DirectX documentation.</p> </li> </ul><p>In addition, the graphics adapter must support the Windows Vista Display Driver Model ({{WDDM}}) and the Direct3D extensions for Windows Vista (sometimes called {{D3D9Ex}} or {{D3D9L}}).</p><p>If these conditions are met, the presenter can return <strong>{{TRUE}}</strong> in the <em>pYes</em> parameter. Otherwise, it should return <strong>{{FALSE}}</strong>.</p><p>The {{EVR}} calls this method whenever the device changes. If the plug-in returns <strong>{{FALSE}}</strong>, the {{EVR}} treats this condition as if the plug-in had a new output connector of unknown type. The policy object can then allow or block playback, depending on the {{ITA}}'s policy.</p><p>This method should be used only to report transient conditions. A plug-in that is never in a trusted state should not implement the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface at all.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in has no transient vulnerabilities at the moment and can receive protected content. If <strong>{{FALSE}}</strong>, the plug-in has a transient vulnerability. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (untrusted).</p> </dd> + + + + + <p> Queries whether the plug-in can limit the effective video resolution. </p> + <p>Constriction is a protection mechanism that limits the effective resolution of the video frame to a specified maximum number of pixels.</p><p>Video constriction can be implemented by either the mixer or the presenter.</p><p>If the method returns <strong>{{TRUE}}</strong>, the {{EVR}} might call <strong>{{IEVRTrustedVideoPlugin::SetConstriction}}</strong> at any time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in can limit the effective video resolution. Otherwise, the plug-in cannot limit the video resolution. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (not supported).</p> </dd> + + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Enables or disables the ability of the plug-in to export the video image. </p> + <p>An {{EVR}} plug-in might expose a way for the application to get a copy of the video frames. For example, the standard {{EVR}} presenter implements <strong>{{IMFVideoDisplayControl::GetCurrentImage}}</strong>.</p><p>If the plug-in supports image exporting, this method enables or disables it. Before this method has been called for the first time, the {{EVR}} assumes that the mechanism is enabled.</p><p>If the plug-in does not support image exporting, this method should return {{S_OK}} and ignore the value of <em>bDisable</em>. If the method fails, the {{EVR}} treats it as a failure to enforce the policy, which will probably cause playback to stop.</p><p>While image exporting is disabled, any associated export method, such as <strong>GetCurrentImage</strong>, should return {{MF_E_LICENSE_INCORRECT_RIGHTS}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Boolean value. Specify <strong>{{TRUE}}</strong> to disable image exporting, or <strong>{{FALSE}}</strong> to enable it.</p> </dd> + + + + + <p> </p><p>Creates the default video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of this object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer and video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the video mixer. If the mixer is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the owner of the video presenter. If the presenter is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video mixer. The caller must release the interface.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an instance of the enhanced video renderer ({{EVR}}) media sink.</p> + <p>This function creates the Media Foundation version of the {{EVR}}. To create the DirectShow {{EVR}} filter, call <strong>CoCreateInstance</strong> with the class identifier {{CLSID_EnhancedVideoRenderer}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the {{EVR}}.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates a media sample that manages a Direct3D surface. </p> + <p>The media sample created by this function exposes the following interfaces in addition to <strong>{{IMFSample}}</strong>:</p><ul> <li> <strong>{{IMFDesiredSample}}</strong> </li> <li> <strong>{{IMFTrackedSample}}</strong> </li> </ul><p>If <em>pUnkSurface</em> is non-<strong>{{NULL}}</strong>, the sample contains a single media buffer, which holds a reference to the Direct3D surface. To get the Direct3D surface from the media buffer, call <strong>{{IMFGetService::GetService}}</strong> on the buffer, using the service identifier {{MR_BUFFER_SERVICE}}. The media buffer does not implement <strong>{{IMF2DBuffer}}</strong>, nor does it implement the <strong>{{IMFMediaBuffer::Lock}}</strong> and <strong>Unlock</strong> methods.</p><p>Alternatively, you can set <em>pUnkSurface</em> to <strong>{{NULL}}</strong>, and later add a DirectX surface buffer to the sample by calling <strong>{{IMFSample::AddBuffer}}</strong>. To create a DirectX surface buffer, call <strong>{{MFCreateDXSurfaceBuffer}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the Direct3D surface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the sample's <strong>{{IMFSample}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an object that allocates video samples.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Contains encoding statistics from the Digital Living Network Alliance ({{DLNA}}) media sink.</p><p>This structure is used with the {{MF_MP2DLNA_STATISTICS}} attribute.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink. </p><p>The {{DLNA}} media sink exposes this interface. To get a reference to this interface, call <strong>CoCreateInstance</strong>. The {{CLSID}} is <strong>{{CLSID_MPEG2DLNASink}}</strong>.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></strong></dt> </dl> </td><td> <p>The method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream. The {{DLNA}} media sink writes data to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the {{DLNA}} media sink accepts {{PAL}} video formats. Otherwise, it accepts {{NTSC}} video formats.</p> </dd> + + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies options for the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_CREATION_OPTIONS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies the current playback state.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags that describe a media item.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_MEDIAITEM_CHARACTERISTICS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags for the <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> structure.</p><p>Some of these flags, marked [out], convey information back to the {{MFPlay}} player object. The application should set or clear these flags as appropriate, before returning from the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Defines event types for the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + <p>For each event type, the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback receives a reference to a data structure. The first part of the data structure is always an <strong>{{MFP_EVENT_HEADER}}</strong> structure. The following table lists the data structure for each event type.</p><p>In your implementation of <strong>OnMediaPlayerEvent</strong>, you must cast the <em>pEventHeader</em> parameter to the correct structure type. A set of macros is defined for this purpose. These macros check the value of the event type and return <strong>{{NULL}}</strong> if there is a mismatch; otherwise they return a reference to the correct structure type.</p><table> <tr><td><strong>Event type</strong></td><td> <p><strong>Event structure</strong></p> <p><strong>Pointer cast macro</strong></p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAY}}</td><td> <p> <strong>{{MFP_PLAY_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAY_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PAUSE}}</td><td> <p> <strong>{{MFP_PAUSE_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PAUSE_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_STOP}}</td><td> <p> <strong>{{MFP_STOP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_STOP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_POSITION_SET}}</td><td> <p> <strong>{{MFP_POSITION_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_RATE_SET}}</td><td> <p> <strong>{{MFP_RATE_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CREATED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</td><td> <p> <strong>{{MFP_MEDIAITEM_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_FRAME_STEP}}</td><td> <p> <strong>{{MFP_FRAME_STEP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CLEARED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MF}}</td><td> <p> <strong>{{MFP_MF_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MF_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ERROR}}</td><td> <p> <strong>{{MFP_ERROR_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ERROR_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</td><td> <p> <strong>{{MFP_PLAYBACK_ENDED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</td><td> <p> <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains information that is common to every type of {{MFPlay}} event.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAY}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Play}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAY_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Pause}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PAUSE_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_STOP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Stop}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_STOP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetPosition}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the {{MFP_EVENT_TYPE_RATE_SET}} event. This event is sent when the <strong>{{IMFPMediaPlayer::SetRate}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> macro for this purpose.</p><p>Media items are created asynchronously. If multiple items are created, the operations can complete in any order, not necessarily in the same order as the method calls. You can use the <strong>dwUserData</strong> member to identify the items, if you have simultaneous requests pending. </p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> macro for this purpose.</p><p>If one or more streams could not be connected to a media sink, the event property store contains the {{MFP_PKEY_StreamRenderingResults}} property. The value of the property is an array of <strong>{{HRESULT}}</strong> values, indicating which streams were connected successfully. The event property store can be accessed through the <strong>header.pPropertyStore</strong> member.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::FrameStep}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::ClearMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MF}}</strong> event. The {{MFPlay}} player object uses this event to forward certain events from the Media Foundation pipeline to the application.</p> + <p> To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MF_EVENT}}</strong> macro for this purpose.</p><p>If <strong>{{MFEventType}}</strong> is {{MEStreamSinkFormatChanged}}, the following property may be stored in the event property store, which can be accessed through the <strong>header.pPropertyStore</strong> member.</p><table> <tr><th>Property</th><th>Description</th></tr> <tr><td> {{MFP_PKEY_StreamIndex}} </td><td>The index of the stream whose format changed. </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event. This event is sent if an error occurs during playback. </p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_ERROR_EVENT}}</strong> macro for this purpose.</p><p>This event is not used to signal the failure of an asynchronous <strong>{{IMFPMediaPlayer}}</strong> method. If an asynchronous method fails, the error is reported in the standard event listed for that method. The <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event is used for errors that happen outside the context of an asynchronous method call.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</strong> event. This event is sent when the current media item finishes playing.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</strong> event. This event is sent if the application plays a media file from a server that requires authentication. The application can respond by providing the user credentials.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method. You can use the <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> macro for this purpose.</p><p>If the <strong>flags</strong> member contains the <strong>{{MFP_CREDENTIAL_PROMPT}}</strong> flag, the application should do the following:</p><ol> <li>Prompt the user to enter a user name and password.</li> <li>Store the user name in the credentials object by calling <strong>{{IMFNetCredential::SetUser}}</strong> on the <strong>pCredential</strong> reference.</li> <li>Store the password by calling <strong>{{IMFNetCredential::SetPassword}}</strong> on the <strong>pCredential</strong> reference.</li> </ol><p>To cancel authentication, set <strong>fProceedWithAuthentication</strong> equal to <strong>{{FALSE}}</strong>.</p><p>By default, {{MFPlay}} uses the network source's implementation of <strong>{{IMFNetCredentialManager}}</strong> to manage credentials. An application can provide its own implementation of this interface as follows:</p><ol> <li>Call <strong>QueryInterface</strong> on the <strong>{{IMFPMediaPlayer}}</strong> reference to get the <strong>{{IPropertyStore}}</strong> interface.</li> <li>Call <strong>{{IPropertyStore::SetValue}}</strong> to set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property.</li> </ol> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Contains methods to play media files.</p><p>The {{MFPlay}} player object exposes this interface. To get a reference to this interface, call <strong>{{MFPCreateMediaPlayer}}</strong>.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Starts playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PLAY}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Pauses playback. While playback is paused, the most recent video frame is displayed, and audio is silent.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stops playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_STOP}}</strong>.</p><p>The current media item is still valid. After playback stops, the playback position resets to the beginning of the current media item. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Steps forward one video frame.</p> + <p> This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong>.</p><p>The player object does not support frame stepping during reverse playback (that is, while the playback rate is negative).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Cannot frame step. Reasons for this error code include:</p> <ul> <li>There is no media item queued for playback.</li> <li>The current media item does not contain video.</li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The media source does not support frame stepping, or the current playback rate is negative.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback position.</p> + <p>If you call this method while playback is stopped, the new position takes effect after playback resumes.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong>.</p><p>If playback was started before <strong>SetPosition</strong> is called, playback resumes at the new position. If playback was paused, the video is refreshed to display the current frame at the new position. </p><p>If you make two consecutive calls to <strong>SetPosition</strong> with <em>guidPositionType</em> equal to <strong>{{MFP_POSITIONTYPE_100NS}}</strong>, and the second call is made before the first call has completed, the second call supersedes the first. The status code for the superseded call is set to <strong>{{S_FALSE}}</strong> in the event data for that call. This behavior prevents excessive latency from repeated calls to <strong>SetPosition</strong>, as each call may force the media source to perform a relatively lengthy seek operation. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}( {{ERROR_SEEK}} )</strong></strong></dt> </dl> </td><td> <p>The value of <em>pvPositionValue</em> is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback position.</p> + <p>The playback position is calculated relative to the start time of the media item, which can be specified by calling <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>. For example, if you set the start time to 20 seconds and the source duration is 60 seconds, the range of values returned by <strong>GetPosition</strong> is 0?40 seconds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the playback duration of the current media item.</p> + <p>This method calculates the playback duration, taking into account the start and stop times for the media item. To set the start and stop times, call <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong> on the media item. To get the actual duration of the underlying media file, regardless of start and stop times, call <strong>{{IMFPMediaItem::GetDuration}}</strong>.</p><p>For example, suppose that you load a 30-second audio file and set the start time equal to 2 seconds and stop time equal to 10 seconds. The <strong>{{IMFPMediaItem::GetDuration}}</strong> method will return 30 seconds, but the <strong>{{IMFPMediaPlayer::GetDuration}}</strong> method will return 8 seconds.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The media source does not have a duration. This error can occur with a live source, such as a video camera.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback rate.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong>.</p><p>The method sets the nearest supported rate, which will depend on the underlying media source. For example, if <em>flRate</em> is 50 and the source's maximum rate is 8? normal rate, the method will set the rate to 8.0. The actual rate is indicated in the event data for the <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong> event.</p><p>To find the range of supported rates, call <strong>{{IMFPMediaPlayer::GetSupportedRates}}</strong>.</p><p>This method does not support playback rates of zero, although Media Foundation defines a meaning for zero rates in some other contexts.</p><p>The new rate applies only to the current media item. Setting a new media item resets the playback rate to 1.0.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flRate</em> parameter is zero.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback rate.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of supported playback rates.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 indicates normal playback speed, 0.5 indicates half speed, and 2.0 indicates twice speed. Positive values indicate forward playback, and negative values indicate reverse playback. +</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not support playback in the requested direction (either forward or reverse).</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback state of the {{MFPlay}} player object.</p> + <p>This method can be called after the player object has been shut down.</p><p>Many of the <strong>{{IMFPMediaPlayer}}</strong> methods complete asynchronously. While an asynchronous operation is pending, the current state is not updated until the operation completes. When the operation completes, the application receives an event callback, and the new state is given in the <strong>{{MFP_EVENT_HEADER}}</strong> structure that is passed to the callback.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from a {{URL}}.</p> + <p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromURL</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromURL</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromURL</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p><p>Currently, this method returns <strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong> if the {{URL}} specifies any of the following protocols: rtsp*, mms*, or mcast. If you want to use the Media Foundation network source with {{MFPlay}}, first use the Source Resolver to create the source, and then call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></strong></dt> </dl> </td><td> <p>Unsupported protocol. </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from an object.</p> + <p>The <em>pIUnknownObj</em> parameter must specify one of the following:</p><ul> <li>A reference to a media source. Media sources expose the <strong>{{IMFMediaSource}}</strong> interface. It is the caller's responsibility to call <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source.</li> <li>A reference to a byte stream. Byte streams expose the <strong>{{IMFByteStream}}</strong> interface. Internally, the method calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </li> </ul><p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromObject</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromObject</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromObject</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queues a media item for playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong>.</p><p>To create a media item, call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong>. A media item must be used with the same {{MFPlay}} player object that created that item. If the media item was created by a different instance of the player object, <strong>SetMediaItem</strong> returns <strong>{{E_INVALIDARG}}</strong>. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The media item contains protected content. {{MFPlay}} currently does not support protected content.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_AUDIO_PLAYBACK_DEVICE}}</strong></strong></dt> </dl> </td><td> <p>No audio playback device was found. This error can occur if the media source contains audio, but no audio playback devices are available on the system.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Clears the current media item.</p><strong>Note</strong>??This method is currently not implemented.? + <p>This method stops playback and releases the player object's references to the current media item.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the current media item.</p> + <p>The <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method is asynchronous. Therefore, while <strong>SetMediaItem</strong> is pending, <strong>GetMediaItem</strong> will not return the media item that was just set. Instead, the application should implement <strong>{{IMFPMediaPlayerCallback}}</strong> interface and handle the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see Receiving Events From the Player.</p><p>The previous remark also applies to setting the media item in the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_FAIL}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio volume.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio volume.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p>This method does not change the master volume level for the player's audio session. Instead, it adjusts the per-channel volume levels for audio stream(s) that belong to the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>The <em>flVolume</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio balance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio balance.</p> + <p>If you call this method before playback starts, the setting is applied when playback starts.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flBalance</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the audio is muted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Mutes or unmutes the audio.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p> This method does not mute the entire audio session to which the player belongs. It mutes only the streams from the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the size and aspect ratio of the video. These values are computed before any scaling is done to fit the video into the destination window.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of video sizes that can be displayed without significantly degrading performance or image quality.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>. Sizes are given in pixels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the video source rectangle.</p><p>{{MFPlay}} clips the video to this rectangle and stretches the rectangle to fill the video window.</p> + <p>{{MFPlay}} stretches the source rectangle to fill the entire video window. By default, {{MFPlay}} maintains the source's correct aspect ratio, letterboxing if needed. The letterbox color is controlled by the <strong>{{IMFPMediaPlayer::SetBorderColor}}</strong> method.</p><p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p> To set the video position before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the video source rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies whether the aspect ratio of the video is preserved during playback.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the aspect-ratio mode before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current aspect-ratio correction mode. This mode controls whether the aspect ratio of the video is preserved during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the window where the video is displayed.</p> + <p>The video window is specified when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Updates the video frame.</p> + <p>Call this method when your application's video playback window receives either a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message. This method performs two functions: </p><ul> <li>Ensures that the video frame is repainted while playback is paused or stopped. </li> <li>Adjusts the displayed video to match the current size of the video window.</li> </ul><strong>Important</strong>??Call the {{GDI}} <strong>BeginPaint</strong> function before calling <strong>UpdateVideo</strong>.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the color for the video border. The border color is used to letterbox the video.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the border color before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>M<strong>{{F_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current color of the video border. The border color is used to letterbox the video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Applies an audio or video effect to playback.</p> + <p>The object specified in the <em>pEffect</em> parameter can implement either a video effect or an audio effect. The effect is applied to any media items set after the method is called. It is not applied to the current media item. </p><p>For each media item, the effect is applied to the first selected stream of the matching type (audio or video). If a media item has two selected streams of the same type, the second stream does not receive the effect. The effect is ignored if the media item does not contain a stream that matches the effect type. For example, if you set a video effect and play a file that contains just audio, the video effect is ignored, although no error is raised.</p><p>The effect is applied to all subsequent media items, until the application removes the effect. To remove an effect, call <strong>{{IMFPMediaPlayer::RemoveEffect}}</strong> or <strong>{{IMFPMediaPlayer::RemoveAllEffects}}</strong>.</p><p>If you set multiple effects of the same type (audio or video), they are applied in the same order in which you call <strong>InsertEffect</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDINDEX}}</strong></strong></dt> </dl> </td><td> <p>This effect was already added.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes an effect that was added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effect is not removed from the current media item.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The effect was not found.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes all effects that were added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effects are not removed from the current media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Shuts down the {{MFPlay}} player object and releases any resources the object is using.</p> + <p>After this method is called, most <strong>{{IMFPMediaPlayer}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>. Also, any media items created from this instance of the player object are invalidated and most <strong>{{IMFPMediaItem}}</strong> methods also return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>The player object automatically shuts itself down when its reference count reaches zero. You can use the <strong>Shutdown</strong> method to shut down the player before all of the references have been released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Note</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Represents a media item. A <em>media item</em> is an abstraction for a source of media data, such as a video file. Use this interface to get information about the source, or to change certain playback settings, such as the start and stop times. To get a reference to this interface, call one of the following methods:</p><ul> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> </li> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> </li> </ul> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the {{MFPlay}} player object that created the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the {{URL}} that was used to create the media item.</p> + <p>This method applies when the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> to create a media item. If the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create a media item, the <strong>GetURL</strong> method for that media item returns <strong>{{MF_E_NOTFOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>No {{URL}} is associated with this media item.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the object that was used to create the media item.</p> + <p>The object reference is set if the application uses <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create the media item. Otherwise, <strong>GetObject</strong> returns {{MF_E_NOTFOUND}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>The media item was created from a {{URL}}, not from an object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the application-defined value stored in the media item.</p> + <p>You can assign this value when you first create the media item, by specifying it in the <em>dwUserData</em> parameter of the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method. To update the value, call <strong>{{IMFPMediaItem::SetUserData}}</strong>.</p><p>This method can be called after the player object is shut down.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stores an application-defined value in the media item.</p> + <p>This method can be called after the player object is shut down.</p> + <p>This method can return one of these values.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the start and stop times for the media item.</p> + <p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters receive the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFP_POSITIONTYPE_100NS}}</td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): {{VT_I8}}</li> <li>Variant member: <strong>hVal</strong></li> </ul> </td></tr> </table><p>?</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the start and stop time for the media item.</p> + <p>By default, a media item plays from the beginning to the end of the file. This method adjusts the start time and/or the stop time:</p><ul> <li>To set the start time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStartPositionType</em> and <em>pvStartValue</em>.</li> <li>To set the stop time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStopPositionType</em> and <em>pvStopValue</em>.</li> </ul><p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters give the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{MFP_POSITIONTYPE_100NS}}</strong></td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): <strong>{{VT_I8}}</strong></li> <li>Variant member: <strong>hVal</strong></li> </ul> <p>To clear a previously set time, use an empty <strong>{{PROPVARIANT}}</strong> (<strong>{{VT_EMPTY}}</strong>).</p> </td></tr> </table><p>?</p><p>The adjusted start and stop times are used the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>Invalid start or stop time. Any of the following can cause this error:</p> <ul> <li>Time less than zero.</li> <li>Time greater than the total duration of the media item.</li> <li>Stop time less than start time.</li> </ul> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains a video stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains an audio stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains protected content.</p><strong>Note</strong>??Currently <strong>{{IMFPMediaPlayer}}</strong> does not support playing protected content.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the duration of the media item.</p> + <p>The method returns the total duration of the content, regardless of any values set through <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the number of streams (audio, video, and other) in the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether a stream is selected to play.</p> + <p> To select or deselect a stream, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Selects or deselects a stream.</p> + <p>You can use this method to change which streams are selected. The change goes into effect the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again with this media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a stream attribute.</p> + <p>Stream attributes describe an individual stream (audio, video, or other) within the presentation. To get an attribute that applies to the entire presentation, call <strong>{{IMFPMediaItem::GetPresentationAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a presentation attribute.</p> + <p>Presentation attributes describe the presentation as a whole. To get an attribute that applies to an individual stream within the presentation, call <strong>{{IMFPMediaItem::GetStreamAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets various flags that describe the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Sets a media sink for the media item. A <em>media sink</em> is an object that consumes the data from one or more streams. </p> + <p>By default, the {{MFPlay}} player object renders audio streams to the Streaming Audio Renderer ({{SAR}}) and video streams to the Enhanced Video Renderer ({{EVR}}). You can use the <strong>SetStreamSink</strong> method to provide a different media sink for an audio or video stream; or to support other stream types besides audio and video. You can also use it to configure the {{SAR}} or {{EVR}} before they are used.</p><p>Call this method before calling <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>. Calling this method after <strong>SetMediaItem</strong> has no effect, unless you stop playback and call <strong>SetMediaItem</strong> again.</p><p>To reset the media item to use the default media sink, set <em>pMediaSink</em> to <strong>{{NULL}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a property store that contains metadata for the source, such as author or title.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Callback interface for the <strong>{{IMFPMediaPlayer}}</strong> interface.</p><p>To set the callback, pass an <strong>{{IMFPMediaPlayerCallback}}</strong> reference to the <strong>{{MFPCreateMediaPlayer}}</strong> function in the <em>pCallback</em> parameter. The application implements the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Called by the {{MFPlay}} player object to notify the application of a playback event.</p> + <p> The specific type of playback event is given in the <strong>eEventType</strong> member of the <strong>{{MFP_EVENT_HEADER}}</strong> structure. This structure contains information that is common to all of the event types. Some event types use extended structures. A set of macros is defined for casting the <em>pEventHeader</em> reference to the correct structure type. For more information, see <strong>{{MFP_EVENT_TYPE}}</strong>. </p><p>It is safe to call <strong>{{IMFPMediaPlayer}}</strong> and <strong>{{IMFPMediaItem}}</strong> methods inside the <strong>OnMediaPlayer</strong> method. {{MFPlay}} is guaranteed not to reenter the <strong>OnMediaPlayer</strong> method. That is, calls to <strong>OnMediaPlayer</strong> are serialized, and the method will not be invoked again from inside <strong>OnMediaPlayer</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a new instance of the {{MFPlay}} player object.</p> + <p>Before calling this function, call <strong>CoIntialize(Ex)</strong> from the same thread to initialize the {{COM}} library.</p><p>Internally, <strong>{{MFPCreateMediaPlayer}}</strong> calls <strong>{{MFStartup}}</strong> to initialize the Microsoft Media Foundation platform. When the player object is destroyed, it calls <strong>{{MFShutdown}}</strong> to shut down the platform. It is not necessary for an application to call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> when using {{MFPlay}}.</p><strong>Note</strong>??If you use other Media Foundation {{APIs}} outside the life time of the player object, then your application should call <strong>{{MFStartup}}</strong> and <strong>{{MFShutdown}}</strong>.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines the {{ASF}} splitter options.</p> + + + <dd> <p>The splitter delivers samples for the {{ASF}} content in reverse order to accommodate reverse playback.</p> </dd> + + + <dd> <p>The splitter delivers samples for streams that are protected with Windows Media Digital Rights Management.</p> </dd> + + + + + <p> </p><p>Defines status conditions for the <strong>{{IMFASFSplitter::GetNextSample}}</strong> method.</p> + + + + <p> </p><p>Defines the {{ASF}} multiplexer options.</p> + + + <dd> <p>The multiplexer automatically adjusts the bit rate of the {{ASF}} content in response to the characteristics of the streams being multiplexed.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} indexer options.</p> + + + <dd> <p>The indexer creates a new index object.</p> </dd> + + + <dd> <p>The indexer returns values for reverse playback.</p> </dd> + + + <dd> <p>The indexer creates an index object for a live {{ASF}} stream.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} stream selector options.</p> + + + <dd> <p>The stream selector will not set thinning. Thinning is the process of removing samples from a stream to reduce the bit rate.</p> </dd> + + + <dd> <p>The stream selector will use the average bit rate of streams when selecting streams.</p> </dd> + + + + + <p> </p><p>Defines the selection options for an {{ASF}} stream.</p> + + + <dd> <p>No samples from the stream are delivered.</p> </dd> + + + <dd> <p>Only samples from the stream that are clean points are delivered.</p> </dd> + + + <dd> <p>All samples from the stream are delivered.</p> </dd> + + + + + <p> </p><p>Specifies how the {{ASF}} file sink should apply Windows Media {{DRM}}.</p> + + + <dd> <p>Undefined action.</p> </dd> + + + <dd> <p>Encode the content using Windows Media {{DRM}}. Use this flag if the source content does not have {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcode the content using Windows Media {{DRM}}. Use this flag if the source content has Windows Media {{DRM}} protection and you want to change the encoding parameters but not the {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcrypt the content. Use this flag if the source content has {{DRM}} protection and you want to change the {{DRM}} protection; for example, if you want to convert from Windows Media {{DRM}} version 1 to Windows Media {{DRM}} version 7 or later.</p> </dd> + + + <dd> <p>Reserved. Do not use.</p> </dd> + + + + + <p> </p><p>Contains statistics about the progress of the {{ASF}} multiplexer.</p> + <p>Use <strong>{{IMFASFMultiplexer::GetStatistics}}</strong> to retrieve this structure.</p> + + + <dd> <p>Number of frames written by the {{ASF}} multiplexer.</p> </dd> + + + <dd> <p>Number of frames dropped by the {{ASF}} multiplexer.</p> </dd> + + + + + <p> Specifies an index for the {{ASF}} indexer object. </p> + <p> The index object of an {{ASF}} file can contain a number of distinct indexes. Each index is identified by the type of index and the stream number. No {{ASF}} index object can contain more than one index for a particular combination of stream number and index type.</p> + + + <dd> <p> The type of index. Currently this value must be {{GUID_NULL}}, which specifies time-based indexing. </p> </dd> + + + <dd> <p> The stream number to which this structure applies. </p> </dd> + + + + + <p> </p><p>Describes the indexing configuration for a stream and type of index.</p> + + + <dd> <p> <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and the type of index.</p> </dd> + + + <dd> <p>Number of bytes used for each index entry. If the value is {{MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC}}, the index entries have variable size.</p> </dd> + + + <dd> <p>Optional text description of the index.</p> </dd> + + + <dd> <p>Indexing interval. The units of this value depend on the index type. A value of {{MFASFINDEXER_NO_FIXED_INTERVAL}} indicates that there is no fixed indexing interval.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> Retrieves the size of the header section of an Advanced Systems Format ({{ASF}}) file. </p> + <p>The header of an {{ASF}} file or stream can be passed to the <strong>{{IMFASFContentInfo::ParseHeader}}</strong> method to populate the ContentInfo object with the header information.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The buffer does not contain valid {{ASF}} data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer does not contain enough valid data. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing the beginning of {{ASF}} content. The size of the valid data in the buffer must be at least {{MFASF_MIN_HEADER_BYTES}} in bytes.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the header section of the content. The value includes the size of the {{ASF}} Header Object plus the size of the header section of the Data Object. Therefore, the resulting value is the offset to the start of the data packets in the {{ASF}} Data Object.</p> </dd> + + + + + <p> </p><p>Parses the information in an {{ASF}} header and uses that information to set values in the ContentInfo object. You can pass the entire header in a single buffer or send it in several pieces.</p> + <p>If you pass the header in pieces, the ContentInfo object will keep references to the buffer objects until the entire header is parsed. Therefore, do not write over the buffers passed into this method.</p><p>The start of the Header object has the following layout in memory:</p><table> <tr><th>Field Name</th><th>Size in bytes</th></tr> <tr><td>Object {{ID}}</td><td>16</td></tr> <tr><td>Object Size</td><td>8</td></tr> <tr><td>Number of Header Objects</td><td>4</td></tr> <tr><td>Reserved1</td><td>1</td></tr> <tr><td>Reserved2</td><td>1</td></tr> </table><p>?</p><p>The first call to <strong>ParseHeader</strong> reads everything up to and including Rerserved2, so it requires a minimum of 30 bytes. (Note that the <strong>{{IMFASFContentInfo::GetHeaderSize}}</strong> method reads only the Object {{ID}} and Object Size fields, so that method requires a minimum of 24 bytes.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The header is completely parsed and validated.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The input buffer does not contain valid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The input buffer is to small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_ASF_PARSEINPROGRESS}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the header passed was incomplete. This is the successful return code for all calls but the last one when passing the header in pieces.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing some or all of the header. The buffer must contain at least 30 bytes, which is the size of the Header Object, not including the objects contained in the Header Object (that is, everything up to and including the Reserved2 field in the Header Object).</p> </dd> + + + <dd> <p>Offset, in bytes, of the first byte in the buffer relative to the beginning of the header.</p> </dd> + + + + + <p> </p><p>Encodes the data in the <strong>{{MFASFContentInfo}}</strong> object into a binary Advanced Systems Format ({{ASF}}) header.</p> + <p>The size received in the <em>pcbHeader</em> parameter includes the padding size. The content information shrinks or expands the padding data depending on the size of the {{ASF}} Header Objects.</p><p>During this call, the stream properties are set based on the encoding properties of the profile. These properties are available through the <strong>{{IMFMetadata}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Objects do not exist for the media that the ContentInfo object holds reference to. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Object size exceeds 10 {{MB}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer passed in <em>pIHeader</em> is not large enough to hold the {{ASF}} Header Object information. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the buffer object that will receive the encoded header. Set to <strong>{{NULL}}</strong> to retrieve the size of the header. </p> </dd> + + + <dd> <p> Size of the encoded {{ASF}} header in bytes. If <em>pIHeader</em> is <strong>{{NULL}}</strong>, this value is set to the buffer size required to hold the encoded header. </p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) profile that describes the {{ASF}} content.</p> + <p>The profile is set by calling either <strong>{{IMFASFContentInfo::SetProfile}}</strong> or <strong>{{IMFASFContentInfo::ParseHeader}}</strong>.</p><p>The {{ASF}} profile object returned by this method does not include any of the <strong>{{MF_PD_ASF_xxx}}</strong> attributes (see Presentation Descriptor Attributes). To get these attributes, do the following:</p><ol> <li> <p>Call <strong>{{IMFASFContentInfo::GeneratePresentationDescriptor}}</strong> to get the {{ASF}} presentation descriptor. You can query the presentation descriptor for the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> <li> <p>(Optional.) Call <strong>{{MFCreateASFProfileFromPresentationDescriptor}}</strong> to convert the presentation descriptor into an {{ASF}} profile. The profile object created by this function contains the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> </ol><p>An {{ASF}} profile is a template for file encoding, and is intended mainly for creating {{ASF}} content. If you are reading an existing {{ASF}} file, it is recommended that you use the presentation descriptor to get information about the file. One exception is that the profile contains the mutual exclusion and stream prioritization objects, which are not exposed directly from the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an <strong>{{IMFASFProfile}}</strong> interface reference. The caller must release the interface. If the object does not have an {{ASF}} profile, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor for {{ASF}} content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a property store that can be used to set encoding properties.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number to configure. Set to zero to configure file-level encoding properties.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves a stream from the profile by stream index, and/or retrieves the stream number for a stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the stream to retrieve. Stream indexes are sequential and zero-based. You can get the number of streams that are in the profile by calling the <strong>{{IMFASFProfile::GetStreamCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives the stream number of the requested stream. Stream numbers are one-based and are not necessarily sequential. This parameter can be set to <strong>{{NULL}}</strong> if the stream number is not required.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong> if you want to retrieve the stream number without accessing the stream configuration.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) stream configuration object for a stream in the profile. This method references the stream by stream number instead of stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain the interface reference.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a stream to the profile or reconfigures an existing stream.</p> + <p>If the stream number in the {{ASF}} stream configuration object is already included in the profile, the information in the new object replaces the old one. If the profile does not contain a stream for the stream number, the {{ASF}} stream configuration object is added as a new stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFStreamConfig}}</strong> interface of a configured {{ASF}} stream configuration object.</p> </dd> + + + + + <p> </p><p>Removes a stream from the Advanced Systems Format ({{ASF}}) profile object.</p> + <p>After a stream is removed, the {{ASF}} profile object reassigns stream indexes so that the index values are sequential starting from zero. Any previously stored stream index numbers are no longer valid after deleting a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to remove.</p> </dd> + + + + + <p> </p><p>Creates an Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The {{ASF}} stream configuration object created by this method is not included in the profile. To include the stream, you must first configure the stream configuration and then call <strong>{{IMFASFProfile::SetStream}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>ppIStream</em> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>stream configuration object could not be created due to insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of Advanced Systems Format ({{ASF}}) mutual exclusion objects that are associated with the profile.</p> + <p>Multiple mutual exclusion objects may be required for streams that are mutually exclusive in more than one way. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of mutual exclusion objects.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>This method does not create a copy of the mutual exclusion object. The returned reference refers to the mutual exclusion contained in the profile object. You must not make any changes to the mutual exclusion object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the mutual exclusion object in the profile, you must first clone the mutual exclusion object by calling <strong>{{IMFASFMutualExclusion::Clone}}</strong>. Make whatever changes are required to the clone of the object, remove the old mutual exclusion object from the profile by calling the <strong>{{IMFASFProfile::RemoveMutualExclusion}}</strong> method, and then add the updated object by calling the <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the mutual exclusion object in the profile.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the {{ASF}} mutual exclusion object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a configured Advanced Systems Format ({{ASF}}) mutual exclusion object to the profile.</p> + <p>You can create a mutual exclusion object by calling the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFMutualExclusion}}</strong> interface of a configured {{ASF}} mutual exclusion object.</p> </dd> + + + + + <p> </p><p>Removes an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>When a mutual exclusion object is removed from the profile, the {{ASF}} profile object reassigns the mutual exclusion indexes so that they are sequential starting with zero. Any previously stored indexes are no longer valid after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the mutual exclusion object to remove from the profile.</p> </dd> + + + + + <p> </p><p>Creates a new Advanced Systems Format ({{ASF}}) mutual exclusion object. Mutual exclusion objects can be added to a profile by calling the <strong>AddMutualExclusion</strong> method.</p> + <p>The {{ASF}} mutual exclusion object created by this method is not associated with the profile. Call <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> after configuring the object to make this association.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved.</p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <strong>Note</strong>??This method is not implemented.? + <p> Returns <strong>{{E_NOTIMPL}}</strong>. </p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format profile object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p>Gets the major media type of the stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the major media type for the stream. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> </p><p>Retrieves the stream number of the stream.</p> + <p>The method returns the stream number.</p> + + + + <p> </p><p>Assigns a stream number to the stream.</p> + <p>Stream numbers start from 1 and do not need to be sequential.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number to assign to the stream.</p> </dd> + + + + + <p> </p><p>Retrieves the media type of the stream.</p> + <p>To reduce unnecessary copying, the method returns a reference to the media type that is stored internally by the object. Do not modify the returned media type, as the results are not defined.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type object associated with the stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the media type for the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>Some validation of the media type is performed by this method. However, a media type can be successfully set, but cause an error when the stream is added to the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type object.</p> </dd> + + + + + <p> </p><p>Retrieves the number of payload extensions that are configured for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of payload extensions.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p> </p><p>Configures a payload extension for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>A reference to a buffer that contains information about this extension system. This information is the same for all samples and is stored in the content header (not with each sample). This parameter can be <strong>{{NULL}}</strong> if <em>cbExtensionSystemInfo</em> is 0.</p> </dd> + + + <dd> <p>Amount of data, in bytes, that describes this extension system. If this value is 0, then <em>pbExtensionSystemInfo</em> can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Removes all payload extensions that are configured for the stream.</p> + <p>None.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates a copy of the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p>Configures an Advanced Systems Format ({{ASF}}) mutual exclusion object, which manages information about a group of streams in an {{ASF}} profile that are mutually exclusive. When streams or groups of streams are mutually exclusive, only one of them is read at a time, they are not read concurrently.</p><p>A common example of mutual exclusion is a set of streams that each include the same content encoded at a different bit rate. The stream that is used is determined by the available bandwidth to the reader.</p><p>An <strong>{{IMFASFMutualExclusion}}</strong> interface exists for every {{ASF}} mutual exclusion object. A reference to this interface is obtained when you create the object using the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>An {{ASF}} profile object can support multiple mutual exclusions. Each must be configured using a separate {{ASF}} mutual exclusion object.</p> + + + + <p> </p><p>Retrieves the type of mutual exclusion represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams of several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A variable that receives the type identifier. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Sets the type of mutual exclusion that is represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams in several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The type of mutual exclusion that is represented by the {{ASF}} mutual exclusion object. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Retrieves the number of records in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of streams in every other record.</p><p>Use this method in conjunction with <strong>{{IMFASFMutualExclusion::GetStreamsForRecord}}</strong> to retrieve the streams that are included in each record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the count of records.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers contained in a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of the record for which to retrieve the stream numbers.</p> </dd> + + + <dd> <p>An array that receives the stream numbers. Set to <strong>{{NULL}}</strong> to get the number of elements required, which is indicated by the value of <em>pcStreams</em> on return. If this parameter is not <strong>{{NULL}}</strong>, the method will copy as many stream numbers to the array as there are elements indicated by the value of <em>pcStreams</em>.</p> </dd> + + + <dd> <p>On input, the number of elements in the array referenced by <em>pwStreamNumArray</em>. On output, the method sets this value to the count of stream numbers in the record. You can call <strong>GetStreamsForRecord</strong> with <em>pwStreamNumArray</em> set to <strong>{{NULL}}</strong> to retrieve the number of elements required to hold all of the stream numbers.</p> </dd> + + + + + <p> </p><p>Adds a stream number to a record in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of all streams in every other record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The specified stream number is already associated with the record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number to which the stream is added. A record number is set by the <strong>{{IMFASFMutualExclusion::AddRecord}}</strong> method.</p> </dd> + + + <dd> <p>The stream number to add to the record.</p> </dd> + + + + + <p> </p><p>Removes a stream number from a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The stream number is not listed for the specified record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number from which to remove the stream number.</p> </dd> + + + <dd> <p>The stream number to remove from the record.</p> </dd> + + + + + <p> </p><p>Removes a record from the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>When a record is removed, the {{ASF}} mutual exclusion object indexes the remaining records so that they are sequential starting with zero. You should enumerate the records to ensure that you have the correct index for each record. If the record removed is the one with the highest index, removing it has no effect on the other indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the record to remove.</p> </dd> + + + + + <p> </p><p>Adds a record to the mutual exclusion object. A record specifies streams that are mutually exclusive with the streams in all other records.</p> + <p>A record can include one or more stream numbers. All of the streams in a record are mutually exclusive with all the streams in all other records in the {{ASF}} mutual exclusion object.</p><p>You can use records to create complex mutual exclusion scenarios by using multiple {{ASF}} mutual exclusion objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the index assigned to the new record. Record indexes are zero-based and sequential.</p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format mutual exclusion object.</p> + <p>The cloned object is a new object, completely independent of the object from which it was cloned.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the number of entries in the stream priority list.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the stream priority list.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the stream number of a stream in the stream priority list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument or the <em>dwStreamIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the entry to retrieve from the stream priority list. To get the number of entries in the priority list, call <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the stream number of the stream priority entry.</p> </dd> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Removes a stream from the stream priority list.</p> + <p>When a stream is removed from the stream priority list, the index values of all streams that follow it in the list are decremented.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the entry in the stream priority list to remove. Values range from zero, to one less than the stream count retrieved by calling <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Creates a copy of the {{ASF}} stream prioritization object.</p> + <p>The new object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamPrioritization}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and configures it to parse data from an {{ASF}} data section.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIContentInfo</em> parameter is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of a ContentInfo object that describes the data to be parsed.</p> </dd> + + + + + <p> </p><p>Sets option flags on the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>This method can only be called after the splitter is initialized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The splitter is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter does not contain a valid flag.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{MFASF_SPLITTER_REVERSE}} flag is set, but the content cannot be parsed in reverse.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise combination of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the streams to be parsed by the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>Calling this method supersedes any previous stream selections; only the streams specified in the <em>pwStreamNumbers</em> array will be selected.</p><p>By default, no streams are selected by the splitter.</p><p>You can obtain a list of the currently selected streams by calling the <strong>{{IMFASFSplitter::GetSelectedStreams}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwStreamNumbers</em> is <strong>{{NULL}}</strong> and <em>wNumStreams</em> contains a value greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number was passed in the array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of variables containing the list of stream numbers to select.</p> </dd> + + + <dd> <p>The number of valid elements in the stream number array.</p> </dd> + + + + + <p> Gets a list of currently selected streams. </p> + <p>To get the number of selected streams, set <em>pwStreamNumbers</em> to <strong>{{NULL}}</strong>. The method will return <strong>{{MF_E_BUFFERTOSMALL}}</strong> but will also set the value of <code>*pwNumStreams</code> equal to the number of selected streams. Then allocate an array of that size and call the method again, passing the array in the <em>pwStreamNumbers</em> parameter.</p><p>The following code shows these steps:</p><pre>{{HRESULT}} DisplaySelectedStreams({{IMFASFSplitter}} *pSplitter) +{ {{WORD}} count = 0; {{HRESULT}} hr = pSplitter-&gt;GetSelectedStreams({{NULL}}, &amp;count); if (hr == {{MF_E_BUFFERTOOSMALL}}) { {{WORD}} *pStreamIds = new (std::nothrow) {{WORD}}[count]; if (pStreamIds) { hr = pSplitter-&gt;GetSelectedStreams(pStreamIds, &amp;count); if ({{SUCCEEDED}}(hr)) { for ({{WORD}} i = 0; i &lt; count; i++) { printf("Selected stream {{ID:}} %d\n", pStreamIds[i]); } } delete [] pStreamIds; } else { hr = {{E_OUTOFMEMORY}}; } } return hr; +} +</pre><p>Alternatively, you can allocate an array that is equal to the total number of streams and pass that to <em>pwStreamNumbers</em>.</p><p>Before calling this method, initialize <code>*pwNumStreams</code> to the number of elements in <em>pwStreamNumbers</em>. If <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>, set <code>*pwNumStreams</code> to zero.</p><p> By default, no streams are selected by the splitter. Select streams by calling the <strong>{{IMFASFSplitter::SelectStreams}}</strong> method. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The <em>pwStreamNumbers</em> array is smaller than the number of selected streams. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The address of an array of <strong>{{WORDs}}</strong>. This array receives the stream numbers of the selected streams. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, points to a variable that contains the number of elements in the <em>pwStreamNumbers</em> array. Set the variable to zero if <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>. </p> <p>On output, receives the number of elements that were copied into <em>pwStreamNumbers</em>. Each element is the identifier of a selected stream.</p> </dd> + + + + + <p> </p><p>Sends packetized Advanced Systems Format ({{ASF}}) data to the {{ASF}} splitter for processing.</p> + <p>After using this method to parse data, you must call <strong>{{IMFASFSplitter::GetNextSample}}</strong> to retrieve parsed media samples.</p><p>If your {{ASF}} data contains variable-sized packets, you must set the <strong>{{MFASFSPLITTER_PACKET_BOUNDARY}}</strong> attribute on the buffers to indicate the sample boundaries, and the buffers cannot span multiple packets.</p><p>If the method returns {{ME_E_NOTACCEPTING}}, call <strong>GetNextSample</strong> to get the output samples, or call <strong>{{IMFASFSplitter::Flush}}</strong> to clear the splitter.</p><p>The splitter might hold a reference count on the input buffer. Therefore, do not write over the valid data in the buffer after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIBuffer</em> parameter is <strong>{{NULL}}</strong>.</p> <p>The specified offset value in <em>cbBufferOffset</em> is greater than the length of the buffer.</p> <p>The total value of <em>cbBufferOffset</em> and <em>cbLength</em> is greater than the length of the buffer.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFASFSplitter::Initialize}}</strong> method was not called or the call failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The splitter cannot process more input at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing data to be parsed.</p> </dd> + + + <dd> <p>The offset into the data buffer where the splitter should begin parsing. This value is typically set to 0.</p> </dd> + + + <dd> <p>The length, in bytes, of the data to parse. This value is measured from the offset specified by <em>cbBufferOffset</em>. Set to 0 to process to the end of the buffer.</p> </dd> + + + + + <p> </p><p>Retrieves a sample from the Advanced Systems Format ({{ASF}}) splitter after the data has been parsed.</p> + <p>Before calling this method, call <strong>{{IMFASFSplitter::ParseData}}</strong> to give input data to the splitter. If the input does not contain enough data for a complete sample, the <strong>GetNextSample</strong> method succeeds but returns <strong>{{NULL}}</strong> in the <em>ppISample</em> parameter.</p><p>The {{ASF}} splitter skips samples for unselected streams. To select streams, call <strong>{{IMFASFSplitter::SelectStreams}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The {{ASF}} data in the buffer is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_MISSINGDATA}}</strong></dt> </dl> </td><td> <p>There is a gap in the {{ASF}} data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong></dt> </dl> </td><td> <p>More samples are ready to be retrieved. Call <strong>GetNextSample</strong> in a loop until the <em>pdwStatusFlags</em> parameter receives the value zero.</p> </td></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>No additional samples are ready. Call <strong>{{IMFASFSplitter::ParseData}}</strong> to give more input data to the splitter.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If the method returns a sample in the <em>ppISample</em> parameter, this parameter receives the number of the stream to which the sample belongs.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the parsed sample. The caller must release the interface. If no samples are ready, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and releases all pending samples.</p> + <p>Any samples waiting to be retrieved when <strong>Flush</strong> is called are lost.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the send time of the last sample received.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwLastSendTime</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the send time of the last sample received.</p> </dd> + + + + + <p>Provides methods to create Advanced Systems Format ({{ASF}}) data packets. The methods of this interface process input samples into the packets that make up an {{ASF}} data section. The {{ASF}} multiplexer exposes this interface. To create the {{ASF}} multiplexer, call <strong>{{MFCreateASFMultiplexer}}</strong>.</p> + + + + <p> </p><p>Initializes the multiplexer with the data from an {{ASF}} ContentInfo object.</p> + <p>This call must be made once at the beginning of encoding, with <em>pIContentInfo</em> pointing to the {{ASF}} ContentInfo object that describes the content to be encoded. This enables the {{ASF}} multiplexer to see, among other things, which streams will be present in the encoding session. This call typically does not affect the data in the {{ASF}} ContentInfo object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the <strong>{{MFASFContentInfo}}</strong> object that contains the header information of the new {{ASF}} file. The multiplexer will generate data packets for this file.</p> </dd> + + + + + <p> </p><p>Sets multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. These flags specify which multiplexer options to use. For more information, see "Multiplexer Initialization and Leaky Bucket Settings" in Creating the Multiplexer Object.</p> </dd> + + + + + <p> </p><p>Retrieves flags indicating the configured multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more values from the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. To set these flags, call <strong>{{IMFASFMultiplexer::SetFlags}}</strong>.</p> </dd> + + + + + <p> Delivers input samples to the multiplexer. </p> + <p> The application passes samples to <strong>ProcessSample</strong>, and the {{ASF}} multiplexer queues them internally until they are ready to be placed into {{ASF}} packets. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the {{ASF}} data packet. </p><p>After each call to <strong>ProcessSample</strong>, call <strong>GetNextPacket</strong> in a loop to get all of the available data packets. For a code example, see Generating New {{ASF}} Data Packets.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> There are too many packets waiting to be retrieved from the multiplexer. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the packets.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BANDWIDTH_OVERRUN}}</strong></dt> </dl> </td><td> <p> The sample that was processed violates the bandwidth limitations specified for the stream in the {{ASF}} ContentInfo object. When this error is generated, the sample is dropped. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The value passed in <em>wStreamNumber</em> is invalid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LATE_SAMPLE}}</strong></dt> </dl> </td><td> <p> The presentation time of the input media sample is earlier than the send time. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number of the stream to which the sample belongs. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The input sample contains the media data to be converted to {{ASF}} data packets. When possible, the time stamp of this sample should be accurate. </p> </dd> + + + <dd> <p> The adjustment to apply to the time stamp of the sample. This parameter is used if the caller wants to shift the sample time on <em>pISample</em>. This value should be positive if the time stamp should be pushed ahead and negative if the time stamp should be pushed back. This time stamp is added to sample time on <em>pISample</em>, and the resulting time is used by the multiplexer instead of the original sample time. If no adjustment is needed, set this value to 0. </p> </dd> + + + + + <p> </p><p>Retrieves the next output {{ASF}} packet from the multiplexer.</p> + <p> The client needs to call this method, ideally after every call to <strong>{{IMFASFMultiplexer::ProcessSample}}</strong>, to get the output {{ASF}} packets. Call this method in a loop as long as the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag is received. </p><p>If no packets are ready, the method returns <strong>{{S_OK}}</strong> but does not return a sample in <em>ppIPacket</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives zero or more status flags. If more than one packet is waiting, the method sets the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFSample}}</strong> interface of the first output sample of the data packet. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Signals the multiplexer to process all queued output media samples. Call this method after passing the last sample to the multiplexer.</p> + <p>You must call <strong>Flush</strong> after the last sample has been passed into the {{ASF}} multiplexer and before you call <strong>{{IMFASFMultiplexer::End}}</strong>. This causes all output media samples in progress to be completed. After calling <strong>Flush</strong>, call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> in a loop until all the pending media samples have been packetized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Collects data from the multiplexer and updates the {{ASF}} ContentInfo object to include that information in the {{ASF}} Header Object.</p> + <p>For non-live encoding scenarios (such as encoding to a file), the user should call <strong>End</strong> to update the specified ContentInfo object, adding data that the multiplexer has collected during the packet generation process. The user should then call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and write the output header at the beginning of the {{ASF}} file (overwriting the header obtained at the beginning of the encoding session). For more information, see Writing an {{ASF}} Header Object for a New File.</p><p>During live encoding, it is usually not possible to rewrite the header, so this call is not required for live encoding. (The header in those cases will simply lack some of the information that was not available until the end of the encoding session.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_FLUSH_NEEDED}}</strong></dt> </dl> </td><td> <p>There are pending output media samples waiting in the multiplexer. Call <strong>{{IMFASFMultiplexer::Flush}}</strong> to force the media samples to be packetized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object. This must be the same object that was used to initialize the multiplexer. The ContentInfo object represents the {{ASF}} Header Object of the file for which the multiplexer generated data packets.</p> </dd> + + + + + <p> </p><p>Retrieves multiplexer statistics.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain statistics.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ASF_MUX_STATISTICS}}</strong> structure that receives the statistics.</p> </dd> + + + + + <p> </p><p>Sets the maximum time by which samples from various streams can be out of synchronization. The multiplexer will not accept a sample with a time stamp that is out of synchronization with the latest samples from any other stream by an amount that exceeds the synchronization tolerance.</p> + <p>The synchronization tolerance is the maximum difference in presentation times at any given point between samples of different streams that the {{ASF}} multiplexer can accommodate. That is, if the synchronization tolerance is 3 seconds, no stream can be more than 3 seconds behind any other stream in the time stamps passed to the multiplexer. The multiplexer determines a default synchronization tolerance to use, but this method overrides it (usually to increase it). More tolerance means the potential for greater latency in the multiplexer. If the time stamps are synchronized among the streams, actual latency will be much lower than <em>msSyncTolerance</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Synchronization tolerance in milliseconds.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets indexer options.</p> + <p><strong>{{IMFASFIndexer::SetFlags}}</strong> must be called before <strong>{{IMFASFIndexer::Initialize}}</strong>. Attempting to call <strong>SetFlags</strong> after <strong>Initialize</strong> will return {{MF_E_INVALIDREQUEST}} as a result.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The indexer object was initialized before setting flags for it. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration specifying the indexer options to use.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes the indexer object. This method reads information in a ContentInfo object about the configuration of the content and the properties of the existing index, if present. Use this method before using the indexer for either writing or reading an index. You must make this call before using any of the other methods of the <strong>{{IMFASFIndexer}}</strong> interface.</p> + <p>The indexer needs to examine the data in the ContentInfo object to properly write or read the index for the content. The indexer will not make changes to the content information and will not hold any references to the <strong>{{IMFASFContentInfo}}</strong> interface.</p><p>In the {{ASF}} header, the maximum data-packet size must equal the minimum data-packet size. Otherwise, the method returns <strong>{{MF_E_UNEXPECTED}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>Invalid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>Unexpected error.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the offset of the index object from the start of the content.</p> + <p>The index continues from the offset retrieved by this method to the end of the file.</p><p>You must call <strong>{{IMFASFIndexer::Initialize}}</strong> to set up the indexer before calling this method.</p><p>If the index is retrieved by using more than one call to <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong>, the position of individual index portions is equal to the index offset plus the offset of the portion within the index.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pIContentInfo</em> is <strong>{{NULL}}</strong> or <em>pcbIndexOffset</em> is <strong>{{NULL}}</strong></p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + <dd> <p>Receives the offset of the index relative to the beginning of the content described by the ContentInfo object. This is the position relative to the beginning of the {{ASF}} file.</p> </dd> + + + + + <p> </p><p>Adds byte streams to be indexed.</p> + <p>For a reading scenario, only one byte stream should be used by the indexer object. For an index generating scenario, it depends how many index objects are needed to be generated. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer object has already been initialized and it has packets which have been indexed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of <strong>{{IMFByteStream}}</strong> interface references. To get the byte stream, call <strong>{{MFCreateASFIndexerByteStream}}</strong>.</p> </dd> + + + <dd> <p>The number of references in the <em>ppIByteStreams</em> array.</p> </dd> + + + + + <p> </p><p>Retrieves the number of byte streams that are in use by the indexer object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pcByteStreams</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of byte streams that are in use by the indexer object.</p> </dd> + + + + + <p> </p><p>Retrieves the index settings for a specified stream and index type.</p> + <p>To read an existing {{ASF}} index, call <strong>{{IMFASFIndexer::SetIndexByteStreams}}</strong> before calling this method.</p><p>If an index exists for the stream and the value passed into <em>pcbIndexDescriptor</em> is smaller than the required size of the <em>pbIndexDescriptor</em> buffer, the method returns {{MF_E_BUFFERTOOSMALL}}. The required buffer size is returned in the <em>pcbIndexDescriptor</em> parameter.</p><p>If there is no index for the specified stream, the method returns <strong>{{FALSE}}</strong> in the <em>pfIsIndexed</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer size specified in <em>pcbIndexDescriptor</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that contains the stream number and index type for which to get the status.</p> </dd> + + + <dd> <p>A variable that retrieves a Boolean value specifying whether the index described by <em>pIndexIdentifier</em> has been created.</p> </dd> + + + <dd> <p>A buffer that receives the index descriptor. The index descriptor consists of an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>On input, specifies the size, in bytes, of the buffer that <em>pbIndexDescriptor</em> points to. The value can be zero if <em>pbIndexDescriptor</em> is <strong>{{NULL}}</strong>. On output, receives the size of the index descriptor, in bytes.</p> </dd> + + + + + <p> </p><p>Configures the index for a stream.</p> + <p>You must make all calls to <strong>SetIndexStatus</strong> before making any calls to <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong>.</p><p>The indexer object is configured to create temporal indexes for each stream by default. Call this method only if you want to override the default settings.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>At attempt was made to change the index status in a seek-only scenario. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index descriptor to set. The index descriptor is an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>The size, in bytes, of the index descriptor.</p> </dd> + + + <dd> <p>A Boolean value. Set to <strong>{{TRUE}}</strong> to have the indexer create an index of the type specified for the stream specified in the index descriptor.</p> </dd> + + + + + <p> Given a desired seek time, gets the offset from which the client should start reading data. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The requested seek time is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_INDEX}}</strong></dt> </dl> </td><td> <p> No index exists of the specified type for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The value of the index entry for which to get the position. The format of this value varies depending on the type of index, which is specified in the index identifier. For time-based indexing, the variant type is <strong>{{VT_I8}}</strong> and the value is the desired seek time, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and index type. </p> </dd> + + + <dd> <p> Receives the offset within the data segment of the {{ASF}} Data Object. The offset is in bytes, and is relative to the start of packet 0. The offset gives the starting location from which the client should begin reading from the stream. This location might not correspond exactly to the requested seek time. </p> <p> For reverse playback, if no key frame exists after the desired seek position, this parameter receives the value <strong>{{MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT}}</strong>. In that case, the seek position should be 1 byte pass the end of the data segment. </p> </dd> + + + <dd> <p> Receives the approximate time stamp of the data that is located at the offset returned in the <em>pcbOffsetWithinData</em> parameter. The accuracy of this value is equal to the indexing interval of the {{ASF}} index, typically about 1 second. </p> <ul> <li> If the index type specified in <em>pIndexIdentifier</em> is <strong>{{GUID_NULL}}</strong> (time indexing), this parameter can be <strong>{{NULL}}</strong>. </li> <li> For all other index types, this parameter must be <strong>{{NULL}}</strong>. </li> </ul> <p> If the approximate time stamp cannot be determined, this parameter receives the value <strong>{{MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN}}</strong>. </p> </dd> + + + <dd> <p> Receives the payload number of the payload that contains the information for the specified stream. Packets can contain multiple payloads, each containing data for a different stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Accepts an {{ASF}} packet for the file and creates index entries for them.</p> + <p>The {{ASF}} indexer creates indexes for a file internally. You can get the completed index for all data packets sent to the indexer by committing the index with <strong>{{IMFASFIndexer::CommitIndex}}</strong> and then calling <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the index entries into a media buffer. To determine the size of the index so you can allocate a buffer large enough to hold the index, call <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>.</p><p> When this method creates index entries, they are immediately available for use by <strong>{{IMFASFIndexer::GetSeekPositionForValue}}</strong>. </p><p> The media sample specified in <em>pIASFPacketSample</em> must hold a buffer that contains a single {{ASF}} packet. Get the sample from the {{ASF}} multiplexer by calling the <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> method. </p><p>You cannot use this method while reading an index, only when writing an index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The argument passed in is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of a media sample that contains the {{ASF}} packet. </p> </dd> + + + + + <p> </p><p>Adds information about a new index to the ContentInfo object associated with {{ASF}} content. You must call this method before copying the index to the content so that the index will be readable by the indexer later.</p> + <p>For the index to function properly, you must call this method after all {{ASF}} packets in the file have been passed to the indexer by using the <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong> method. After you call this method, you must retrieve the indexes by calling <strong>GetCompletedIndex</strong> and write them to the appropriate location in the file. Finally, you must generate a new {{ASF}} header by calling the <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> method of the {{ASF}} ContentInfo object.</p><p> An application must use the <strong>CommitIndex</strong> method only when writing a new index otherwise <strong>CommitIndex</strong> may return {{MF_E_INVALIDREQUEST}} as a result. For example, {{MF_E_INVALIDREQUEST}} is returned if the application has flags other than {{MFASF_INDEXER_WRITE_NEW_INDEX}} set on the indexer object. <strong>CommitIndex</strong> can also return {{MFASF_INDEXER_WRITE_NEW_INDEX}} if the index entries have already been committed through an earlier <strong>CommitIndex</strong> call.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The caller made an invalid request. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + + + <p> </p><p>Retrieves the size, in bytes, of the buffer required to store the completed index.</p> + <p>Use this method to get the size of the index and then allocate a buffer big enough to hold it. </p><p>The index must be committed with a call to<strong>{{IMFASFIndexer::CommitIndex}}</strong> before calling <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>. If the index is not committed before <strong>GetIndexWriteSpace</strong> is called, then {{MF_E_INDEX_NOT_COMMITTED}} will be returned as a result. </p><p>Call <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the completed index into a media buffer.</p><p>You cannot use this method in a reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index has not been committed. For more information; see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the index, in bytes</p> </dd> + + + + + <p> </p><p>Retrieves the completed index from the {{ASF}} indexer object.</p> + <p>This method uses as much of the buffer as possible, and updates the length of the buffer appropriately.</p><p>If <em>pIIndexBuffer</em> is large enough to contain the entire buffer, <em>cbOffsetWithinIndex</em> should be 0, and the call needs to be made only once. Otherwise, there should be no gaps between successive buffers.</p><p>The user must write this data to the content at <em>cbOffsetFromIndexStart</em> bytes after the end of the {{ASF}} data object. You can call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong> to determine the start position of the {{ASF}} index.</p><p>This call will not succeed unless <strong>{{IMFASFIndexer::CommitIndex}}</strong> has been called. After calling <strong>GetCompletedIndex</strong>, the caller must call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and overwrite the existing {{ASF}} header with the new header; otherwise, the {{ASF}} header will not match the content, and the file is not guaranteed to play correctly.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index was not committed before attempting to get the completed index. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a media buffer that receives the index data.</p> </dd> + + + <dd> <p>The offset of the data to be retrieved, in bytes from the start of the index data. Set to 0 for the first call. If subsequent calls are needed (the buffer is not large enough to hold the entire index), set to the byte following the last one retrieved.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams that are in the Advanced Systems Format ({{ASF}}) content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the content.</p> </dd> + + + + + <p> </p><p>Retrieves the number of outputs for the Advanced Systems Format ({{ASF}}) content.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of outputs.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve the stream count.</p> </dd> + + + <dd> <p>Receives the number of streams associated with the output.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers for all of the streams that are associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve stream numbers.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers associated with the output. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetOutputStreamCount}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the output number associated with a stream.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to retrieve an output number.</p> </dd> + + + <dd> <p>Receives the output number.</p> </dd> + + + + + <p> </p><p>Retrieves the manual output override selection that is set for a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number for which to retrieve the output override selection.</p> </dd> + + + <dd> <p>Receives the output override selection. The value is a member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the selection status of an output, overriding other selection criteria.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to set selection.</p> </dd> + + + <dd> <p>Member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration specifying the level of selection for the output.</p> </dd> + + + + + <p> </p><p>Retrieves the number of mutual exclusion objects associated with an output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve the count of mutually exclusive relationships.</p> </dd> + + + <dd> <p>Receives the number of mutual exclusions.</p> </dd> + + + + + <p> </p><p>Retrieves a mutual exclusion object for an output.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve a mutual exclusion object.</p> </dd> + + + <dd> <p>Mutual exclusion number. This is an index of mutually exclusive relationships associated with the output. Set to a number between 0, and 1 less than the number of mutual exclusion objects retrieved by calling <strong>{{IMFASFStreamSelector::GetOutputMutexCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the mutual exclusion object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a mutual exclusion record to use for a mutual exclusion object associated with an output.</p> + <p>An output is a stream in an Advanced Systems Format ({{ASF}}) data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p><p>An {{ASF}} file can contain multiple mutually exclusive relationships, such as a file with both language based and bit-rate based mutual exclusion. If an output is involved in multiple mutually exclusive relationships, a record from each must be selected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to set a stream.</p> </dd> + + + <dd> <p>Index of the mutual exclusion for which to select.</p> </dd> + + + <dd> <p>Record of the specified mutual exclusion to select.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers that apply to a bandwidth step. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for {{MBR}} content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bandwidth step number for which to retrieve information. Set this value to a number between 0, and 1 less than the number of bandwidth steps returned by <strong>{{IMFASFStreamSelector::GetBandwidthStepCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the bit rate associated with the bandwidth step.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + <dd> <p>Address of an array that receives the selection status of each stream, as an <strong>{{ASF_SELECTION_STATUS}}</strong> value. The members of this array correspond to the members of the <em>rgwStreamNumbers</em> array by index. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + + + <p> </p><p>Retrieves the index of a bandwidth step that is appropriate for a specified bit rate. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>In a streaming multiple bit rate ({{MBR}}) scenario, call this method with the current data rate of the network connection to determine the correct step to use. You can also call this method periodically throughout streaming to ensure that the best step is used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The bit rate to find a bandwidth step for.</p> </dd> + + + <dd> <p>Receives the step number. Use this number to retrieve information about the step by calling <strong>{{IMFASFStreamSelector::GetBandwidthStep}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets options for the stream selector.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_STREAMSELECTOR_FLAGS}}</strong> enumeration specifying the options to use.</p> </dd> + + + + + <p>Configures Windows Media Digital Rights Management ({{DRM}}) for Network Devices on a network sink.</p><p> The Advanced Systems Format ({{ASF}}) streaming media sink exposes this interface. To get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface, perform the following tasks.</p><ol> <li>Get the activation object for the {{ASF}} streaming media sink by calling <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>.</li> <li>Create the media sink by calling the activation object <strong>ActivateObject</strong> method.</li> <li>Get an <strong>{{IMFDRMNetHelper}}</strong> reference by calling <strong>QueryInterface</strong> on the media sink.</li> </ol><p>For more information, see Remarks.</p> + <p>To stream protected content over a network, the <em>{{ASF}} streaming media sink</em> provides an output trust authority ({{OTA}}) that supports Windows Media {{DRM}} for Network Devices and implements the <strong>{{IMFDRMNetHelper}}</strong> interface. For this {{OTA}}, encryption occurs on each frame before multiplexing. The license request and response process takes place in the media sink.</p><p>The application gets a reference to <strong>{{IMFDRMNetHelper}}</strong> and uses the methods to handle the license request and response. The application is also responsible for sending the license to the client.</p><p>To stream the content, the application does the following:</p><ol> <li>Provide the {{HTTP}} byte stream to which the media sink writes the streamed content. <p>To stream {{DRM}}-protected content over a network from a server to a client, an application must use the Microsoft Media Foundation Protected Media Path ({{PMP}}). The media sink and the application-provided {{HTTP}} byte stream exist in mfpmp.exe. Therefore, the byte stream must expose the <strong>{{IMFActivate}}</strong> interface so that it can be created out-of-process.</p><strong>Note</strong>??This might affect how the code is packaged. The {{DLL}} that contains the {{HTTP}} byte stream and other dependent {{DLLs}} must be signed for the Protected Environment ({{PE}}-signed). ? </li> <li>Set the <strong>{{MFPKEY_ASFMEDIASINK_DRMACTION}}</strong> property to <strong>{{MFSINK_WMDRMACTION_TRANSCRYPT}}</strong>. The media sink's property store is available to the application through the {{ASF}} ContentInfo. To get the property store, call <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>.</li> <li>Get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface by querying the media sink.</li> <li>To make a license request, call <strong>{{IMFDRMNetHelper::ProcessLicenseRequest}}</strong>. This method calls into the {{OTA}} implementation and retrieves the license.<p>When the clock starts for the first time or restarts , the encrypter that is used for encrypting samples is retrieved, and the license response is cached.</p> </li> <li>To get the cached license response, call <strong>{{IMFDRMNetHelper::GetChainedLicenseResponse}}</strong>.</li> </ol> + + + + <p>Gets the license response for the specified request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. +</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte array that contains the license request.</p> </dd> + + + <dd> <p>Size, in bytes, of the license request.</p> </dd> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + <dd> <p>Receives the key identifier. The caller must release the string by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Not implemented in this release.</p> + <p>The method returns <strong>{{E_NOTIMPL}}</strong>.</p> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Header Object object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an {{ASF}} profile object from a presentation descriptor.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor that contains the profile information.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor from an {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface of the {{ASF}} profile object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Splitter.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} Multiplexer.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMultiplexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Indexer object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFIndexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a byte stream to access the index in an {{ASF}} stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table:</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The call succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The offset specified in <em>cbIndexStartOffset</em> is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream that contains the {{ASF}} stream.</p> </dd> + + + <dd> <p>Byte offset of the index within the {{ASF}} stream. To get this value, call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. Use this interface to read from the index or write to the index. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} stream selector.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamSelector}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream that will be used to write the {{ASF}} stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an activation object that can be used to create the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string that contains the output file name.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFASFContentInfo}}</strong> interface of an initialized {{ASF}} Header Object object. Use this interface to configure the {{ASF}} media sink.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Video ({{WMV}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Audio ({{WMA}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. </p> + <p>To create the {{ASF}} streaming sink in another process, call <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>. </p><p>An application can get a reference to the {{ASF}} ContentInfo Object by calling <strong>{{IUnknown::QueryInterface}}</strong> on the media sink object received in the <em>ppIMediaSink</em> parameter. The ContentInfo object is used to set the encoder configuration settings, provide stream properties supplied by an {{ASF}} profile, and add metadata information. These configuration settings populate the various {{ASF}} header objects of the encoded {{ASF}} file. For more information, see +Setting Properties in the ContentInfo Object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a byte stream object in which the {{ASF}} media sink writes the streamed content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{ASF}} streaming-media sink object. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> on the received reference. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. The activation object can be used to create the {{ASF}} streaming sink in another process.</p> + <p>Starting in Windows?7, Media Foundation provides an {{ASF}} streaming sink that writes the content in a live streaming scenario. This function should be used in secure transcode scenarios where this media sink needs to be created and configured in the remote +process. Like the {{ASF}} file sink, the new media sink performs {{ASF}} related tasks such as writing the {{ASF}} header, generating data packets (muxing). The content is written to a caller-implemented byte stream such as an {{HTTP}} byte stream. +The caller must also provide an activation object that media sink can use to create the byte stream remotely. </p><p>In addition, it performs transcryption for streaming protected content. It hosts the Windows Media Digital Rights Management ({{DRM}}) for Network Devices Output Trust Authority ({{OTA}}) that handles the license request and response. For more information, see <strong>{{IMFDRMNetHelper}}</strong> interface.</p><p>The new media sink does not perform any time adjustments. If the clock seeks, the timestamps are not changed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream object. The byte stream exposes the <strong>{{IMFByteStream}}</strong> interface. The {{ASF}} streaming sink will write data to this byte stream.</p> </dd> + + + <dd> <p>A reference to an {{ASF}} ContentInfo Object that contains the properties that describe the {{ASF}} content. These settings can contain stream settings, encoding properties, and metadata. For more information about these properties, see Setting Properties in the ContentInfo Object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface of the activation object that is used to create the {{ASF}} streaming-media sink. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> by using the received reference. The <strong>ActivateObject</strong> method also calls <strong>{{IMFActivate::Activate}}</strong> on the byte stream activate object specified by <em>pByteStreamActivate</em>, to create it so that the media sink can write streamed content in the byte stream. The caller must release the <strong>{{IMFActivate}}</strong> interface reference of the media sink activation object received in <em>ppIActivate</em>.</p> </dd> + + + + + <p>Specifies the type of work queue for the <strong>{{MFAllocateWorkQueueEx}}</strong> function to create.</p> + + + + <p> Specifies the status of a topology during playback. </p> + <p> This enumeration is used with the {{MESessionTopologyStatus}} event. The {{MESessionTopologyStatus}} event always has an <strong>{{MF_EVENT_TOPOLOGY_STATUS}}</strong> attribute whose value is a member of this enumeration. </p><p> For a single topology, the Media Session sends these status flags in numerical order, starting with <strong>{{MF_TOPOSTATUS_READY}}</strong>. However, there is no guarantee about the ordering of the events across two different topologies. For example, you might get <strong>{{MF_TOPOSTATUS_READY}}</strong> for a topology before you get <strong>{{MF_TOPOSTATUS_ENDED}}</strong> for the previous topology. </p> + + + <dd> <p> This value is not used. </p> </dd> + + + <dd> <p> The topology is ready to start. After this status flag is received, you can use the Media Session's <strong>{{IMFGetService::GetService}}</strong> method to query the topology for services, such as rate control. </p> </dd> + + + <dd> <p> The Media Session has started to read data from the media sources in the topology. </p> </dd> + + + <dd> <p>The Media Session modified the topology, because the format of a stream changed.</p> </dd> + + + <dd> <p> The media sinks have switched from the previous topology to this topology. This status value is not sent for the first topology that is played. For the first topology, the {{MESessionStarted}} event indicates that the media sinks have started receiving data. </p> </dd> + + + <dd> <p> Playback of this topology is complete. The Media Session might still use the topology internally. The Media Session does not completely release the topology until it sends the next <strong>{{MF_TOPOSTATUS_STARTED_SOURCE}}</strong> status event or the {{MESessionEnded}} event. </p> </dd> + + + + + <p>Contains flags for registering and enumeration Media Foundation transforms ({{MFTs}}).</p><p>These flags are used in the following functions:</p><ul> <li> <strong>{{MFTEnumEx}}</strong>: These flags control which Media Foundation transforms ({{MFTs}}) are enumerated, as well as the enumeration order.</li> <li> <strong>{{MFTRegister}}</strong>: A subset of these flags are used when registering an {{MFT}}.</li> </ul> + <p>For registration, these flags describe the {{MFT}} that is being registered. Some flags do not apply in that context. For enumeration, these flags control which {{MFTs}} are selected in the enumeration. For more details about the precise meaning of these flags, see the reference topics for <strong>{{MFTRegister}}</strong> and <strong>{{MFTEnumEx}}</strong> </p><p>For registration, the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>, <strong>{{MFT_ENUM_FLAG_ASYNCMFT}}</strong>, and <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flags are mutually exclusive. For enumeration, these three flags can be combined.</p> + + + + <p>Describes the type of data provided by a frame source.</p> + <p>The values of this enumeration are used with the {{MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPES}} attribute.</p> + + + <dd> <p>The frame source provides color data.</p> </dd> + + + <dd> <p>The frame source provides infrared data.</p> </dd> + + + <dd> <p>The frame source provides depth data.</p> </dd> + + + <dd> <p>The frame source provides custom data.</p> </dd> + + + + + <p>Specifies how 3D video frames are stored in memory.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_3D_FORMAT}} attribute.</p> + + + <dd> <p>The base view is stored in a single buffer. The other view is discarded.</p> </dd> + + + <dd> <p>Each media sample contains multiple buffers, one for each view.</p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed side-by-side into a single frame. </p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed top-and-bottom into a single frame. </p> </dd> + + + + + <p>Specifies how a 3D video frame is stored in a media sample.</p> + <p>This enumeration is used with the {{MFSampleExtension_3DVideo_SampleFormat}} attribute.</p><p>The exact layout of the views in memory is specified by the following media type attributes:</p><ul> <li> {{MF_MT_VIDEO_3D_FORMAT}} </li> <li> {{MF_MT_VIDEO_3D_FIRST_IS_LEFT}} </li> <li> {{MF_MT_VIDEO_3D_LEFT_IS_BASE}} </li> <li> {{MF_MT_VIDEO_3D_NUM_VIEWS}} </li> </ul> + + + <dd> <p>Each view is stored in a separate buffer. The sample contains one buffer per view.</p> </dd> + + + <dd> <p>All of the views are stored in the same buffer. The sample contains a single buffer. </p> </dd> + + + + + <p>Describes the rotation of the video image in the counter-clockwise direction.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_ROTATION}} attribute.</p> + + + <dd> <p>The image is not rotated.</p> </dd> + + + <dd> <p>The image is rotated 90 degrees counter-clockwise.</p> </dd> + + + <dd> <p>The image is rotated 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated 270 degrees counter-clockwise.</p> </dd> + + + + + + + + <p>Specifies the type of copy protection required for a video stream. </p> + <p>Use these flags with the <strong>{{MF_MT_DRM_FLAGS}}</strong> attribute.</p> + + + <dd> <p>No copy protection is required. </p> </dd> + + + <dd> <p>Analog copy protection should be applied. </p> </dd> + + + <dd> <p>Digital copy protection should be applied. </p> </dd> + + + + + <p> </p><p>Specifies whether to pad a video image so that it fits within a specified aspect ratio.</p> + <p>Use these flags with the <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> attribute.</p> + + + <dd> <p>Do not pad the image.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 4?3 area.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 16?9 area.</p> </dd> + + + + + <p> </p><p>Describes the intended aspect ratio for a video stream.</p> + <p>Use these flags with the <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> attribute.</p> + + + <dd> <p>The aspect ratio is unknown.</p> </dd> + + + <dd> <p>The source is 16?9 content encoded within a 4?3 area.</p> </dd> + + + <dd> <p>The source is 2.35:1 content encoded within a 16?9 or 4?3 area.</p> </dd> + + + + + <p> </p><p>Contains flags that specify how to convert an audio media type.</p> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEX}}</strong> structure if possible, or a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure otherwise.</p> </dd> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> </dd> + + + + + + + + <p>Provides information on a screen-to-screen move and a dirty rectangle copy operation.</p> + + + <dd> <p>A <strong>{{POINT}}</strong> structure that describes the source (<em>x, y</em>) point where the source rectangle is copied from.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure that contains the destination rectangle where the dirty rectangle is copied to.</p> </dd> + + + + + + + + + + + <p>Defines a regions of interest. </p> + + + <dd> <p>The bounds of the region.</p> </dd> + + + <dd> <p>Specifies the quantization parameter delta for the specified region from the rest of the frame.</p> </dd> + + + + + <p>The <strong>FaceRectInfoBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceRectInfo</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceRectInfo</strong> structures in the blob.</p> </dd> + + + + + <p>The <strong>FaceRectInfo</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute contains the face rectangle info detected by the driver. By default driver\{{MFT0}} should provide the face information on preview stream. If the driver advertises the capability on other streams, driver\{{MFT}} must provide the face info on the corresponding streams if the application enables face detection on those streams. When video stabilization is enabled on the driver, the face information should be provided post-video stabilization. The dominate face must be the first <strong>FaceRectInfo</strong> in the blob.</p><p>The <strong>FaceRectInfoBlobHeader</strong> and <strong>FaceRectInfo</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute. The metadata item structure for face {{ROIs}} (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face {{ROIs}} metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Relative coordinates on the frame that face detection is running ({{Q31}} format).</p> </dd> + + + <dd> <p>Confidence level of the region being a face (0 - 100).</p> </dd> + + + + + <p>The <strong>FaceCharacterizationBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceCharacterization</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceCharacterization</strong> structures in the blob. Must match the number of <strong>FaceRectInfo</strong> structures in <strong>FaceRectInfoBlobHeader</strong>.</p> </dd> + + + + + <p>The <strong>FaceCharacterization</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute contains the blink and facial expression state for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that does not support blink or facial expression detection, this attribute should be omitted.</p><p>The facial expressions that can be detected are defined as follows:</p><pre>#define {{MF_METADATAFACIALEXPRESSION_SMILE}} 0x00000001</pre><p>The <strong>FaceCharacterizationBlobHeader</strong> and <strong>FaceCharacterization</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute. The metadata item structure for the face characterizations (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face characterizations metadata payload) is up to driver and must be 8-byte aligned. </p> + + + <dd> <p>0 indicates no blink for the left eye, 100 indicates definite blink for the left eye (0 - 100).</p> </dd> + + + <dd> <p>0 indicates no blink for the right eye, 100 indicates definite blink for the right eye (0 - 100).</p> </dd> + + + <dd> <p>A defined facial expression value.</p> </dd> + + + <dd> <p>0 indicates no such facial expression as identified, 100 indicates definite such facial expression as defined (0 - 100).</p> </dd> + + + + + <p>This structure contains blob information for the {{EV}} compensation feedback for the photo captured.</p> + + + <dd> <p>A {{KSCAMERA_EXTENDEDPROP_EVCOMP_XXX}} step flag.</p> </dd> + + + <dd> <p>The {{EV}} compensation value in units of the step specified.</p> </dd> + + + + + <p>The CapturedMetadataISOGains structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong>.</p> + <p>The <strong>CapturedMetadataISOGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong> attribute. The metadata item structure for {{ISO}} gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + {{ISO}} gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>This structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. </p> + <p>The <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute contains the white balance gains applied to R, G, B by the sensor or {{ISP}} when the preview frame was captured. This is a unitless.</p><p>The <strong>CapturedMetadataWhiteBalanceGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. The metadata item structure for white balance gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + white balance gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>The <strong>R</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>G</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>B</strong> value of the blob.</p> </dd> + + + + + <p>The <strong>MetadataTimeStamps</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute contains the time stamp information for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that cannot provide the time stamp for face {{ROIs}}, this attribute should be omitted.</p><p>For the <strong>Flags</strong> field, the following bit flags indicate which time stamp is valid:</p><pre>#define {{MF_METADATATIMESTAMPS_DEVICE}} 0x00000001 +#define {{MF_METADATATIMESTAMPS_PRESENTATION}} 0x00000002</pre><p>{{MFT0}} must set <strong>Flags</strong> to <strong>{{MF_METADATATIEMSTAMPS_DEVICE}}</strong> and the appropriate {{QPC}} time for <strong>Device</strong>, if the driver provides the timestamp metadata for the face {{ROIs}}.</p><p>The <strong>MetadataTimeStamps</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute. The metadata item structure for timestamp (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + timestamp metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Bitwise {{OR}} of the <strong>{{MF_METADATATIMESTAMPS_}}*</strong> flags.</p> </dd> + + + <dd> <p>{{QPC}} time for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + <dd> <p>{{PTS}} for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + + + <p>The <strong>HistogramGrid</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + + + <dd> <p>Width of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Height of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Absolute coordinates of the region on the sensor output that the histogram is collected for.</p> </dd> + + + + + <p>The <strong>HistogramBlobHeader</strong> structure describes the blob size and the number of histograms in the blob for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute.</p> + + + <dd> <p>Size of the entire histogram blob in bytes.</p> </dd> + + + <dd> <p>Number of histograms in the blob. Each histogram is identified by a <strong>HistogramHeader</strong>.</p> </dd> + + + + + <p>The <strong>HistogramHeader</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute contains a histogram when a preview frame is captured.</p><p>For the <strong>ChannelMasks</strong> field, the following bitmasks indicate the available channels in the histogram:</p><pre>#define {{MF_HISTOGRAM_CHANNEL_Y}} 0x00000001 +#define {{MF_HISTOGRAM_CHANNEL_R}} 0x00000002 +#define {{MF_HISTOGRAM_CHANNEL_G}} 0x00000004 +#define {{MF_HISTOGRAM_CHANNEL_B}} 0x00000008 +#define {{MF_HISTOGRAM_CHANNEL_Cb}} 0x00000010 +#define {{MF_HISTOGRAM_CHANNEL_Cr}} 0x00000020</pre><p>Each blob can contain multiple histograms collected from different regions or different color spaces of the same frame. Each histogram in the blob is identified by its own <strong>HistogramHeader</strong>. Each histogram has its own region and sensor output size associated. For full frame histogram, the region will match the sensor output size specified in <strong>HistogramGrid</strong>.</p><p>Histogram data for all available channels are grouped under one histogram. Histogram data for each channel is identified by a <strong>HistogramDataHeader</strong> immediate above the data. <strong>ChannelMasks</strong> indicate how many and what channels are having the histogram data, which is the bitwise {{OR}} of the supported <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks as defined above. <strong>ChannelMask</strong> indicates what channel the data is for, which is identified by any one of the <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks.</p><p>Histogram data is an array of <strong>{{ULONG}}</strong> with each entry representing the number of pixels falling under a set of tonal values as categorized by the bin. The data in the array should start from bin 0 to bin N-1, where N is the number of bins in the histogram, for example, <strong>HistogramBlobHeader.Bins</strong>.</p><p>For Windows?10, if <strong>{{KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM}}</strong> is supported, at minimum a full frame histogram with Y channel must be provided which should be the first histogram in the histogram blob. +Note that <strong>HistogramBlobHeader</strong>, <strong>HistogramHeader</strong>, <strong>HistogramDataHeader</strong> and Histogram data only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. The metadata item structure for the histogram (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + all histogram metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Size of this header + (<strong>HistogramDataHeader</strong> + histogram data following) * number of channels available.</p> </dd> + + + <dd> <p>Number of bins in the histogram.</p> </dd> + + + <dd> <p>Color space that the histogram is collected from</p> </dd> + + + <dd> <p>Masks of the color channels that the histogram is collected for.</p> </dd> + + + <dd> <p>Grid that the histogram is collected from.</p> </dd> + + + + + <p>The <strong>HistogramDataHeader</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. </p> + + + <dd> <p>Size in bytes of this header + all following histogram data.</p> </dd> + + + <dd> <p>Mask of the color channel for the histogram data.</p> </dd> + + + <dd> <p>1 if linear, 0 if nonlinear.</p> </dd> + + + + + <p> </p><p>Contains coefficients used to transform multichannel audio into a smaller number of audio channels. This process is called <em>fold-down</em>.</p> + <p>To specify this information in the media type, set the <strong>{{MF_MT_AUDIO_FOLDDOWN_MATRIX}}</strong> attribute.</p><p>The {{ASF}} media source supports fold-down from six channels (5.1 audio) to two channels (stereo). It gets the information from the g_wszFold6To2Channels3 attribute in the {{ASF}} header. This attribute is documented in the Windows Media Format {{SDK}} documentation.</p> + + + <dd> <p>Size of the structure, in bytes.</p> </dd> + + + <dd> <p>Number of source channels.</p> </dd> + + + <dd> <p>Number of destination channels.</p> </dd> + + + <dd> <p>Specifies the assignment of audio channels to speaker positions in the transformed audio. This member is a bitwise <strong>{{OR}}</strong> of flags that define the speaker positions. For a list of valid flags, see <strong>{{MF_MT_AUDIO_CHANNEL_MASK}}</strong> attribute.</p> </dd> + + + <dd> <p>Array that contains the fold-down coefficients. The number of coefficients is <strong>cSrcChannels</strong>?<strong>cDstChannels</strong>. If the number of coefficients is less than the size of the array, the remaining elements in the array are ignored. For more information about how the coefficients are applied, see Windows Media Audio Professional Codec Features.</p> </dd> + + + + + <p> </p><p>Defines custom color primaries for a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This structure is used with the <strong>{{MF_MT_CUSTOM_VIDEO_PRIMARIES}}</strong> attribute.</p> + + + <dd> <p>Red x-coordinate.</p> </dd> + + + <dd> <p>Red y-coordinate.</p> </dd> + + + <dd> <p>Green x-coordinate.</p> </dd> + + + <dd> <p>Green y-coordinate.</p> </dd> + + + <dd> <p>Blue x-coordinate.</p> </dd> + + + <dd> <p>Blue y-coordinate.</p> </dd> + + + <dd> <p>White point x-coordinate.</p> </dd> + + + <dd> <p>White point y-coordinate.</p> </dd> + + + + + <p>Contains format data for a binary stream in an Advanced Streaming Format ({{ASF}}) file.</p> + <p>This structure is used with the {{MF_MT_ARBITRARY_HEADER}} media type attribute.</p><p>This structure corresponds to the first 60 bytes of the Type-Specific Data field of the Stream Properties Object, in files where the stream type is {{ASF_Binary_Media}}. For more information, see the {{ASF}} specification.</p><p>The Format Data field of the Type-Specific Data field is contained in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type.</p> + + + <dd> <p>Major media type. This value is the {{GUID}} stored in the Major Media Type field of the Type-Specific Data field of the {{ASF}} file. It might not match the major type {{GUID}} from the Media Foundation media type. </p> </dd> + + + <dd> <p>Media subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples have a fixed size in bytes. Otherwise, samples have variable size.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the data in this stream uses temporal compression. Otherwise, samples are independent of each other.</p> </dd> + + + <dd> <p>If <strong>bFixedSizeSamples</strong> is <strong>{{TRUE}}</strong>, this member specifies the sample size in bytes. Otherwise, the value is ignored and should be 0.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This {{GUID}} identifies the structure of the additional format data, which is stored in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type. If no additional format data is present, <strong>formattype</strong> equals {{GUID_NULL}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with two components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with three components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A four dimensional vector, used to represent a rotation.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + <dd> <p>W component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A transform describing the location of a camera relative to other cameras or an established external reference.</p> + <p>The <strong>Position</strong> value should be expressed in real-world coordinates in units of meters. The coordinate system of both position and orientation should be right-handed Cartesian as shown in the following diagram. </p><strong>Important</strong>??<p>The position and orientation are expressed as transforms toward the reference frame or origin. For example, a <strong>Position</strong> value of {-5, 0, 0} means that the origin is 5 meters to the left of the sensor, and therefore the sensor is 5 meters to the right of the origin. A sensor that is positioned 2 meters above the origin should specify a <strong>Position</strong> of {0, -2, 0} because that is the translation from the sensor to the origin.</p> <p>If the sensor is aligned with the origin, the rotation is the identity quaternion and the forward vector is along the -Z axis {0, 0, -1}. If the sensor is rotated +30 degrees around the Y axis from the origin, then the <strong>Orientation</strong> value should be a rotation of -30 degrees around the Y axis, because it represents the rotation from the sensor to the origin.</p>? + + + <dd> <p>A reference {{GUID}} identifying the calibration process for the data, allowing different consumers to identify calibration data from the same process.</p> </dd> + + + <dd> <p>The transform position.</p> </dd> + + + <dd> <p>The transform rotation.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes the location of a camera relative to other cameras or an established external reference. </p> + + + <dd> <p>The number of transforms in the <em>CalibratedTransforms</em> array.</p> </dd> + + + <dd> <p>The array of transforms in the extrinsic data.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera model. </p> + <p>For square pixels, the X and Y fields of the <strong>FocalLength</strong> should be the same.</p><p>The <strong>PrincipalPoint</strong> field is expressed in pixels, not in normalized coordinates. The origin [0,0] is the bottom, left corner of the image.</p> + + + <dd> <p>The focal length of the camera.</p> </dd> + + + <dd> <p>The principal point of the camera.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a polynomial lens distortion model.</p> + + + <dd> <p>The first radial distortion coefficient.</p> </dd> + + + <dd> <p>The second radial distortion coefficient.</p> </dd> + + + <dd> <p>The third radial distortion coefficient.</p> </dd> + + + <dd> <p>The first tangential distortion coefficient.</p> </dd> + + + <dd> <p>The second tangential distortion coefficient.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera intrinsic model for a specified resolution.</p> + + + <dd> <p>The width for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p>The height for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p> The pinhole camera model.</p> </dd> + + + <dd> <p> The lens distortion model.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Contains zero or 1 pinhole camera intrinsic models that describe how to project a 3D point in physical world onto the 2D image frame of a camera.</p> + + + <dd> <p>The number of camera intrinsic models in the <em>IntrinsicModels</em> array.</p> </dd> + + + <dd> <p>The array of camera intrinsic models in the intrinsic data.</p> </dd> + + + + + <p> Contains data that is needed to implement the <strong>{{IMFAsyncResult}}</strong> interface. </p> + <p> Any custom implementation of the <strong>{{IMFAsyncResult}}</strong> interface must inherit this structure. For more information, see Custom Asynchronous Result Objects. </p> + + + + <p>Initializes Microsoft Media Foundation.</p> + <p> An application must call this function before using Media Foundation. Before your application quits, call <strong>{{MFShutdown}}</strong> once for every previous call to <strong>{{MFStartup}}</strong>. </p><p> Do not call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> from work queue threads. For more information about work queues, see Work Queues. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BAD_STARTUP_VERSION}}</strong></dt> </dl> </td><td> <p> The <em>Version</em> parameter requires a newer version of Media Foundation than the version that is running.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DISABLED_IN_SAFEMODE}}</strong></dt> </dl> </td><td> <p> The Media Foundation platform is disabled because the system was started in "Safe Mode" (fail-safe boot). </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Media Foundation is not implemented on the system. This error can occur if the media components are not present (See {{KB2703761}} for more info). </p> </td></tr> </table><p>?</p> + + + <dd> <p>Version number. Use the value <strong>{{MF_VERSION}}</strong>, defined in mfapi.h.</p> </dd> + + + <dd> <p>This parameter is optional when using C++ but required in C. The value must be one of the following flags: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>{{MFSTARTUP_NOSOCKET}}</dt> </dl> </td><td> <p> Do not initialize the sockets library. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_LITE}}</dt> </dl> </td><td> <p> Equivalent to {{MFSTARTUP_NOSOCKET}}. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_FULL}}</dt> </dl> </td><td> <p> Initialize the entire Media Foundation platform. This is the default value when <em>dwFlags</em> is not specified. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Shuts down the Microsoft Media Foundation platform. Call this function once for every call to <strong>{{MFStartup}}</strong>. Do not call this function from work queue threads.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Blocks the <strong>{{MFShutdown}}</strong> function.</p> + <p>This function prevents work queue threads from being shut down when <strong>{{MFShutdown}}</strong> is called. Use this function to ensure that asynchronous operations complete gracefully before the platform shuts down.</p><p>This function holds a lock on the Media Foundation platform. To unlock the platform, call <strong>{{MFUnlockPlatform}}</strong>. The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>The <strong>{{MFShutdown}}</strong> function blocks until the platform is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.) To avoid memory leaks, the application should unlock the platform before the wait period ends. For example, cancel any asynchronous operations that are waiting to complete and are holding a lock on the platform.</p><p>The default implementation of the <strong>{{IMFAsyncResult}}</strong> interface automatically locks the Media Foundation platform when the result object is created. Releasing the interface unlocks the platform. Therefore, in most cases your application does not need to lock the platform directly. For more information, see Work Queues.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the Media Foundation platform after it was locked by a call to the <strong>{{MFLockPlatform}}</strong> function.</p> + <p>The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Puts an asynchronous operation on a work queue.</p> + <p> This function creates an asynchronous result object and puts the result object on the work queue. The work queue calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em>. </p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or {{MFAllocateWorkQueueEx}}. </p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue. </p> + <p> To invoke the work-item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>. </p> </dd> + + + + + <p>Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p> To invoke the work item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p>Queues a work item that waits for an event to be signaled.</p> + <p>This function enables a component to wait for an event without blocking the current thread. </p><p>The function puts a work item on the specified work queue. This work item waits for the event given in <em>hEvent</em> to be signaled. When the event is signaled, the work item invokes a callback. (The callback is contained in the result object given in <em>pResult</em>. For more information, see <strong>{{MFCreateAsyncResult}}</strong>).</p><p>The work item is dispatched on a work queue by the <strong>{{IMFAsyncCallback::GetParameters}}</strong> method of the callback. The work queue can be any of the following:</p><ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>).</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>).</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul><p>Do not use any of the following work queues: <strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_RT}}</strong>, or <strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to an event object. To create an event object, call <strong>CreateEvent</strong> or <strong>CreateEventEx</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the wait. To cancel the wait, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Creates a work queue that is guaranteed to serialize work items. The serial work queue wraps an existing multithreaded work queue. The serial work queue enforces a first-in, first-out ({{FIFO}}) execution order.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>Multithreaded queues use a thread pool, which can reduce the total number of threads in the pipeline. However, they do not serialize work items. A serial work queue enables the application to get the benefits of the thread pool, without needing to perform manual serialization of its own work items.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of an existing work queue. This must be either a multithreaded queue or another serial work queue. Any of the following can be used:</p> <ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>)</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>)</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul> </dd> + + + <dd> <p>Receives an identifier for the new serial work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>When the timer interval elapses, the timer calls <strong>{{MFInvokeCallback}}</strong> with the <em>pResult</em> reference to invoke the asynchronous callback. The callback is specified when you create the result object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>This function creates an asynchronous result object. When the timer interval elapses, the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> Attempts to cancel an asynchronous operation that was scheduled with <strong>{{MFScheduleWorkItem}}</strong> or <strong>{{MFScheduleWorkItemEx}}</strong>.</p> + <p>Because work items are asynchronous, the work-item callback might still be invoked after <strong>{{MFCancelWorkItem}}</strong> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves the timer interval for the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets a callback function to be called at a fixed interval.</p> + <p>To get the timer interval for the periodic callback, call <strong>{{MFGetTimerPeriodicity}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the callback function, of type <strong>{{MFPERIODICCALLBACK}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a caller-provided object that implements <strong>{{IUnknown}}</strong>, or <strong>{{NULL}}</strong>. This parameter is passed to the callback function.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the callback. To cancel the callback, call <strong>{{MFRemovePeriodicCallback}}</strong> and pass this key as the <em>dwKey</em> parameter.</p> </dd> + + + + + <p> </p><p>Cancels a callback function that was set by the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The callback is dispatched on another thread, and this function does not attempt to synchronize with the callback thread. Therefore, it is possible for the callback to be invoked after this function returns.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new work queue. This function extends the capabilities of the <strong>{{MFAllocateWorkQueue}}</strong> function by making it possible to create a work queue that has a message loop.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>The <strong>{{MFAllocateWorkQueue}}</strong> function is equivalent to calling <strong>{{MFAllocateWorkQueueEx}}</strong> with the value {{MF_STANDARD_WORKQUEUE}} for the <em>WorkQueueType</em> parameter.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The application exceeded the maximum number of work queues.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p> Creates a new work queue.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an identifier for the work queue.</p> </dd> + + + + + <p> Locks a work queue.</p> + <p>This function prevents the <strong>{{MFShutdown}}</strong> function from shutting down the work queue. Use this function to ensure that asynchronous operations on the work queue complete gracefully before the platform shuts down. The <strong>{{MFShutdown}}</strong> function blocks until the work queue is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.)</p><p>Call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue. Each call to <strong>{{MFLockWorkQueue}}</strong> must be matched by a corresponding call to <strong>{{MFUnlockWorkQueue}}</strong>.</p><p> </p><strong>Note</strong>??The <strong>{{MFAllocateWorkQueue}}</strong> function implicitly locks the work queue that it creates.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier for the work queue. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. </p> </dd> + + + + + <p> </p><p>Unlocks a work queue.</p> + <p>The application must call <strong>{{MFUnlockWorkQueue}}</strong> once for every call to <strong>{{MFAllocateWorkQueue}}</strong> and then once for every call to <strong>{{MFLockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue to be unlocked. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task.For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function extends the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function by adding the <em>lPriority</em> parameter.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request. </p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task. For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>The base relative priority for the work-queue threads. For more information, see <strong>AvSetMmThreadPriority</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function unregisters a work queue that was associated with an {{MMCSS}} class through the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndUnregisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class currently associated with this work queue.</p> + <p>If the work queue is not associated with an {{MMCSS}} task, the function retrieves an empty string.</p><p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the task name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier currently associated with this work queue.</p> + <p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Registers the standard Microsoft Media Foundation platform work queues with the Multimedia Class Scheduler Service ({{MMCSS}}). +</p> + <p>To unregister the platform work queues from the {{MMCSS}} class, call <strong>{{MFUnregisterPlatformFromMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}}, or use the value zero to create a new task group. On output, receives the actual task group {{ID}}.</p> </dd> + + + <dd> <p>The base priority of the work-queue threads. </p> </dd> + + + + + <p>Unregisters the Microsoft Media Foundation platform work queues from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains and locks a shared work queue.</p> + <p>A <em>multithreaded work queue</em> uses a thread pool to dispatch work items. Whenever a thread becomes available, it dequeues the next work item from the queue. Work items are dequeued in first-in-first-out order, but work items are not serialized. In other words, the work queue does not wait for a work item to complete before it starts the next work item. </p><p>Within a single process, the Microsoft Media Foundation platform creates up to one multithreaded queue for each Multimedia Class Scheduler Service ({{MMCSS}}) task. The <strong>{{MFLockSharedWorkQueue}}</strong> function checks whether a matching work queue already exists. If not, the function creates a new work queue and registers the work queue with {{MMCSS}}. The function returns the {{MMCSS}} task identifier (<em>pdwTaskId</em>) and the work queue identifier (<em>pID</em>). To queue a work item, pass the work queue identifier to any of the following functions: </p><ul> <li> <strong>{{MFPutWorkItem}}</strong> </li> <li> <strong>{{MFPutWorkItem2}}</strong> </li> <li> <strong>{{MFPutWorkItemEx}}</strong> </li> <li> <strong>{{MFPutWorkItemEx2}}</strong> </li> </ul><p>The <strong>{{MFLockSharedWorkQueue}}</strong> function also locks the queue. Before the process exits, call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue.</p><p>If the regular priority queue is being used (<em>wszClass</em>=""), then {{NULL}} must be passed in to <em>pdwTaskId</em> and the value 0 must be passed into <em>BasePriority</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The base priority of the work-queue threads. If the regular-priority queue is being used (<em>wszClass</em>=""), then the value 0 must be passed in.</p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}} , or use the value zero to create a new task group. If the regular priority queue is being used (<em>wszClass</em>=""), then <strong>{{NULL}}</strong> must be passed in. On output, receives the actual task group {{ID}}. </p> </dd> + + + <dd> <p>Receives an identifier for the new work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p>Gets the relative thread priority of a work queue.</p> + <p>This function returns the relative thread priority set by the <strong>{{MFBeginRegisterWorkQueueWithMMCSSEx}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Receives the relative thread priority.</p> </dd> + + + + + <p> </p><p>Creates an asynchronous result object. Use this function if you are implementing an asynchronous method.</p> + <p>To invoke the callback specified in <em>pCallback</em>, call the <strong>{{MFInvokeCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object stored in the asynchronous result. This reference is returned by the <strong>{{IMFAsyncResult::GetObject}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is implemented by the caller of the asynchronous method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object. This value is provided by the caller of the asynchronous method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAsyncResult}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Invokes a callback method to complete an asynchronous operation. </p> + <p> If you are implementing an asynchronous method, use this function to invoke the caller's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>The callback is invoked from a Media Foundation work queue. For more information, see Writing an Asynchronous Method.</p><p>The <strong>{{MFShutdown}}</strong> function shuts down the work queue threads, so the callback is not guaranteed to be invoked after <strong>{{MFShutdown}}</strong> is called.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The <strong>{{MFShutdown}}</strong> function was called to shut down the Media Foundation platform.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. To create this object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p> Creates a byte stream from a file. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to a null-terminated string that contains the file name. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> Creates a byte stream that is backed by a temporary local file. </p> + <p> This function creates a file in the system temporary folder, and then returns a byte stream object for that file. The full path name of the file is storted in the <strong>{{MF_BYTESTREAM_ORIGIN_NAME}}</strong> attribute. The file is created with the <strong>{{FILE_FLAG_DELETE_ON_CLOSE}}</strong> flag, and is deleted after the byte stream is released.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a byte stream from a file.</p> + <p>When the request is completed, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. The callback object should then call the <strong>{{MFEndCreateFile}}</strong> function to get a reference to the byte stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a null-terminated string containing the file name.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{MFCancelCreateFile}}</strong> function. The caller must release the interface. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a byte stream from a file.</p> + <p>Call this function when the <strong>{{MFBeginCreateFile}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels an asynchronous request to create a byte stream from a file.</p> + <p>You can use this function to cancel a previous call to <strong>{{MFBeginCreateFile}}</strong>. Because that function is asynchronous, however, it might complete before the operation can be canceled. Therefore, your callback might still be invoked after you call this function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the cancellation object. This reference is received in the <em>ppCancelCookie</em> parameter of the <strong>{{MFBeginCreateFile}}</strong> function.</p> </dd> + + + + + <p> </p><p>Allocates system memory and creates a media buffer to manage it.</p> + <p>The function allocates a buffer with a 1-byte memory alignment. To allocate a buffer that is aligned to a larger memory boundary, call <strong>{{MFCreateAlignedMemoryBuffer}}</strong>.</p><p>When the media buffer object is destroyed, it releases the allocated memory.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer that wraps an existing media buffer. The new media buffer points to the same memory as the original media buffer, or to an offset from the start of the memory.</p> + <p>The maximum size of the wrapper buffer is limited to the size of the valid data in the original buffer. This might be less than the allocated size of the original buffer. To set the size of the valid data, call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The requested offset or the requested length is not valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the original media buffer. </p> </dd> + + + <dd> <p>The start of the new buffer, as an offset in bytes from the start of the original buffer. </p> </dd> + + + <dd> <p>The size of the new buffer. The value of <em>cbOffset</em> + <em>dwLength</em> must be less than or equal to the size of valid data the original buffer. (The size of the valid data is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.) </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Converts a Media Foundation media buffer into a buffer that is compatible with DirectX Media Objects ({{DMOs}}).</p> + <p>The {{DMO}} buffer created by this function also exposes the <strong>{{IMFSample}}</strong> interface. If <em>pIMFSample</em> is <strong>{{NULL}}</strong>, all of the <strong>{{IMFSample}}</strong> methods return {{MF_E_NOT_INITIALIZED}}. Otherwise, they call through to the <em>pIMFSample</em> reference.</p><p>If the Media Foundation buffer specified by <em>pIMFMediaBuffer</em> exposes the <strong>{{IMF2DBuffer}}</strong> interface, the {{DMO}} buffer also exposes <strong>{{IMF2DBuffer}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. The <em>pIMFMediaBuffer</em> parameter must not be <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the sample that contains the Media Foundation buffer. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Offset in bytes from the start of the Media Foundation buffer. This offset defines where the {{DMO}} buffer starts. If this parameter is zero, the {{DMO}} buffer starts at the beginning of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMediaBuffer}}</strong> interface. This interface is documented in the DirectShow {{SDK}} documentation. The caller must release the interface.</p> </dd> + + + + + <p>Converts a Microsoft Direct3D?9 format identifier to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier.</p> + <p>Returns a <strong>{{DXGI_FORMAT}}</strong> value.</p> + + + <dd> <p>The <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code to convert.</p> </dd> + + + + + <p>Converts a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier to a Microsoft Direct3D?9 format identifier.</p> + <p>Returns a <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code.</p> + + + <dd> <p>The <strong>{{DXGI_FORMAT}}</strong> value to convert.</p> </dd> + + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Unlocks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>Call this function after a successful call to the <strong>{{MFLockDXGIDeviceManager}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a media buffer object that manages a Direct3D 9 surface. </p> + <p>This function creates a media buffer object that holds a reference to the Direct3D surface specified in <em>punkSurface</em>. Locking the buffer gives the caller access to the surface memory. When the buffer object is destroyed, it releases the surface. For more information about media buffers, see Media Buffers.</p><strong>Note</strong>??This function does not allocate the Direct3D surface itself.?<p> The buffer object created by this function also exposes the <strong>{{IMF2DBuffer}}</strong> interface. For more information, see DirectX Surface Buffer. </p><p>This function does not support {{DXGI}} surfaces.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifies the type of Direct3D 9 surface. Currently this value must be <strong>{{IID_IDirect3DSurface9}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the DirectX surface. </p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + + + + <p>Creates a media buffer object that manages a Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Set this parameter to <code>__uuidof({{IWICBitmap}})</code>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the bitmap surface. The bitmap surface must be a {{WIC}} bitmap that exposes the <strong>{{IWICBitmap}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer to manage a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>The returned buffer object supports the following interfaces:</p><ul> <li> <strong>{{IMF2DBuffer}}</strong> </li> <li> <strong>{{IMF2DBuffer2}}</strong> </li> <li> <strong>{{IMFDXGIBuffer}}</strong> </li> <li> <strong>{{IMFMediaBuffer}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Identifies the type of {{DXGI}} surface. This value must be <strong>{{IID_ID3D11Texture2D}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} surface. </p> </dd> + + + <dd> <p>The zero-based index of a subresource of the surface. The media buffer object is associated with this subresource.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with Direct3D. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + <p>Creates an object that allocates video samples that are compatible with Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>This function creates an allocator for {{DXGI}} video surfaces. The buffers created by this allocator expose the <strong>{{IMFDXGIBuffer}}</strong> interface. To create an allocator for Microsoft Direct3D?9 video surfaces, call <strong>{{MFCreateVideoSampleAllocator}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorEx}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorEx}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Microsoft Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Allocates system memory with a specified byte alignment and creates a media buffer to manage the memory. </p> + <p> When the media buffer object is destroyed, it releases the allocated memory. </p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p> Specifies the memory alignment for the buffer. Use one of the following constants. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_1_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000000</dt> </dl> </td><td> <p> Align to 1 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_2_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> Align to 2 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_4_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000003</dt> </dl> </td><td> <p> Align to 4 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_8_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000007</dt> </dl> </td><td> <p> Align to 8 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_16_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000000F</dt> </dl> </td><td> <p> Align to 16 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_32_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000001F</dt> </dl> </td><td> <p> Align to 32 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_64_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000003F</dt> </dl> </td><td> <p> Align to 64 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_128_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000007F</dt> </dl> </td><td> <p> Align to 128 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_256_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000000FF</dt> </dl> </td><td> <p> Align to 256 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_512_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000001FF</dt> </dl> </td><td> <p> Align to 512 bytes. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a media event object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The event type. See <strong>{{IMFMediaEvent::GetType}}</strong>. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. See <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. If the event type does not have an extended type, use the value {{GUID_NULL}}.</p> </dd> + + + <dd> <p>The event status. See <strong>{{IMFMediaEvent::GetStatus}}</strong> </p> </dd> + + + <dd> <p>The value associated with the event, if any. See <strong>{{IMFMediaEvent::GetValue}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an event queue.</p> + <p>This function creates a helper object that you can use to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEventQueue}}</strong> interface of the event queue. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty media sample.</p> + <p>Initially the sample does not contain any media buffers.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the media sample. The caller must release the interface.</p> </dd> + + + + + <p> Creates an empty attribute store. </p> + <p>Attributes are used throughout Microsoft Media Foundation to configure objects, describe media formats, query object properties, and other purposes. For more information, see Attributes in Media Foundation.</p><p>For a complete list of all the defined attribute {{GUIDs}} in Media Foundation, see Media Foundation Attributes.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + <dd> <p>The initial number of elements allocated for the attribute store. The attribute store grows as needed. </p> </dd> + + + + + <p> </p><p>Initializes the contents of an attribute store from a byte array.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p><p>This function deletes any attributes that were previously stored in <em>pAttributes</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The buffer is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to the array that contains the initialization data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves the size of the buffer needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>Use this function to find the size of the array that is needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Converts the contents of an attribute store to a byte array.</p> + <p>The function skips any attributes with <strong>{{IUnknown}}</strong> reference values ({{MF_ATTRIBUTE_IUNKNOWN}}); they are not stored in the array.</p><p>To convert the byte array back into an attribute store, call <strong>{{MFInitAttributesFromBlob}}</strong>.</p><p>To write an attribute store to a stream, call the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer given in <em>pBuf</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to an array that receives the attribute data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes. To get the required size of the buffer, call <strong>{{MFGetAttributesAsBlobSize}}</strong>.</p> </dd> + + + + + <p> Adds information about a Media Foundation transform ({{MFT}}) to the registry. </p><p>Applications can enumerate the {{MFT}} by calling the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> function.</p> + <p> The registry entries created by this function are read by the following functions: </p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFTEnum}}</strong> </td><td>Enumerates {{MFTs}} by media type and category.</td></tr> <tr><td> <strong>{{MFTEnumEx}}</strong> </td><td>Extended version of <strong>{{MFTEnum}}</strong>.</td></tr> <tr><td> <strong>{{MFTGetInfo}}</strong> </td><td>Looks up an {{MFT}} by {{CLSID}} and retrieves the registry information.</td></tr> </table><p>?</p><p>This function does not register the {{CLSID}} of the {{MFT}} for the <strong>CoCreateInstance</strong> or <strong>CoGetClassObject</strong> functions. </p><p> To remove the entries from the registry, call <strong>{{MFTUnregister}}</strong>. If you remove an {{MFT}} from the system, you should always call <strong>{{MFTUnregister}}</strong>.</p><p> The formats given in the <em>pInputTypes</em> and <em>pOutputTypes</em> parameters are intended to help applications search for {{MFTs}} by format. Applications can use the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> functions to enumerate {{MFTs}} that match a particular set of formats.</p><p>It is recommended to specify at least one input type in <em>pInputTypes</em> and one output type in the <em>pOutputTypes</em> parameter. Otherwise, the {{MFT}} might be skipped in the enumeration.</p><p>On 64-bit Windows, the 32-bit version of this function registers the {{MFT}} in the 32-bit node of the registry. For more information, see 32-bit and 64-bit Application Data in the Registry.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Unregisters a Media Foundation transform ({{MFT}}). </p> + <p> This function removes the registry entries created by the <strong>{{MFTRegister}}</strong> function.</p><p>It is safe to call <strong>{{MFTUnregister}}</strong> twice with the same {{CLSID}}. If the {{CLSID}} is not found in the registry, the function succeeds and does nothing.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>The <em>pClassFactory</em> parameter specifies a class factory object that creates the {{MFT}}. The class factory's <strong>{{IClassFactory::CreateInstance}}</strong> method must return an object that supports the <strong>{{IMFTransform}}</strong> interface.</p><strong>Note</strong>??The <strong>{{MFTEnumEx}}</strong> function retrieves a list of <strong>{{IMFActivate}}</strong> references. However, the class factory does not need to support the <strong>{{IMFActivate}}</strong> interface. Instead, the <strong>{{MFTEnumEx}}</strong> function provides an implementation of <strong>{{IMFActivate}}</strong> that wraps the class factory.?<p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocal}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. The class factory creates the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters one or more Media Foundation transforms ({{MFTs}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocal}}</strong> function.</p><p>If the <em>pClassFactory</em> parameter is <strong>{{NULL}}</strong>, all local {{MFTs}} in the process are unregistered. Otherwise, the function unregisters the {{MFT}} associated with the class factory specified by the <em>pClassFactory</em> parameter. In that case, the <em>pClassFactory</em> parameter should equal a reference value that was previously passed to the <strong>{{MFTRegisterLocal}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>pClassFactory</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocalByCLSID}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters a Media Foundation transform ({{MFT}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>clsidMFT</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + + + <p> Enumerates Media Foundation transforms ({{MFTs}}) in the registry. </p><p>Starting in Windows?7, applications should use the <strong>{{MFTEnumEx}}</strong> function instead.</p> + <p> This function returns a list of all the {{MFTs}} in the specified category that match the search criteria given by the <em>pInputType</em>, <em>pOutputType</em>, and <em>pAttributes</em> parameters. Any of those parameters can be <strong>{{NULL}}</strong>. </p><p> If no {{MFTs}} match the criteria, the method succeeds but returns the value zero in <em>pcMFTs</em>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnum}}</strong> function.</p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnumEx}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnumEx}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnumEx}}</strong> function to allow external applications and internal components to discover the hardware {{MFTs}} that correspond to a specific video adapter. </p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnum2}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnum2}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets information from the registry about a Media Foundation transform ({{MFT}}). </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + <dd> <p> Receives a reference to a wide-character string containing the friendly name of the {{MFT}}. The caller must free the string by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an input format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppInputTypes</em> array. If <em>ppInputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an output format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppOutputType</em> array. If <em>ppOutputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The caller must release the interface. The attribute store might contain attributes that are stored in the registry for the specified {{MFT}}. (For more information, see <strong>{{MFTRegister}}</strong>.) If no attributes are stored in the registry for this {{MFT}}, the attribute store is empty. </p> <p>This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets a reference to the Microsoft Media Foundation plug-in manager.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPluginControl}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the merit value of a hardware codec.</p> + <p> The function fails if the {{MFT}} does not represent a hardware device with a valid Output Protection Manager ({{OPM}}) certificate. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the Media Foundation transform ({{MFT}}) that represents the codec.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>verifier</em> array.</p> </dd> + + + <dd> <p>The address of a buffer that contains one of the following:</p> <ul> <li>The class identifier ({{CLSID}}) of the {{MFT}}.</li> <li>A null-terminated wide-character string that contains the symbol link for the underlying hardware device. Include the size of the terminating null in the value of <em>cbVerifier</em>.</li> </ul> </dd> + + + <dd> <p>Receives the merit value.</p> </dd> + + + + + <p>Registers a scheme handler in the caller's process.</p> + <p>Scheme handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local scheme handlers take precedence over scheme handlers that are registered in the registry. Local scheme handlers are not visible to other processes.</p><p>Use this function if you want to register a custom scheme handler for your application, but do not want the handler available to other applications.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the scheme. The scheme includes the trailing ':' character; for example, "http:".</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a scheme handler object. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + <p>Registers a byte-stream handler in the caller's process.</p> + <p>Byte-stream handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local byte-stream handlers take precedence over byte-stream handlers that are registered in the registry. Local byte-stream handlers are not visible to other processes.</p><p>Use this function if you want to register a custom byte-stream handler for your application, but do not want the handler available to other applications.</p><p>Either <em>szFileExtension</em> or <em>szMimeType</em> can be <strong>{{NULL}}</strong>; at least one must be non-<strong>{{NULL}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the file name extension for this handler.</p> </dd> + + + <dd> <p>A string that contains the {{MIME}} type for this handler.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream handler. The byte-stream handler exposes the <strong>{{IMFByteStreamHandler}}</strong> interface.</p> </dd> + + + + + <p>Creates a wrapper for a byte stream.</p> + <p>The <strong>{{IMFByteStream}}</strong> methods on the wrapper call directly through to the original byte stream, except for the <strong>{{IMFByteStream::Close}}</strong> method. Calling <strong>Close</strong> on the wrapper closes the wrapper object, but leaves the original byte stream open.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the original byte stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the wrapper. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object for a Windows Runtime class.</p> + <p>To create the Windows Runtime object, call <strong>{{IMFActivate::ActivateObject}}</strong> or <strong>{{IClassFactory::CreateInstance}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier that is associated with the activatable runtime class.</p> </dd> + + + <dd> <p>A reference to an optional <strong>{{IPropertySet}}</strong> object, which is used to configure the Windows Runtime class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. The activation object created by this function supports the following interfaces:</p> <ul> <li> <strong>{{IClassFactory}}</strong> </li> <li> <strong>{{IMFActivate}}</strong> </li> <li> <strong>{{IPersistStream}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + <p> Validates the size of a buffer for a video format block. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is large enough. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is too small, or the format block is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_FORMAT}}</strong></dt> </dl> </td><td> <p> This function does not support the specified format type. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies the type of format block. It must be one of the following values:</p> <dl><dt><strong>{{FORMAT_DvInfo}}</strong></dt><dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt><dt><strong>{{FORMAT_MPEG2Video}}</strong></dt><dt><strong>{{FORMAT_MPEGStreams}}</strong></dt><dt><strong>{{FORMAT_MPEGVideo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo2}}</strong></dt><dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </dd> + + + <dd> <p> Pointer to a buffer that contains the format block. </p> </dd> + + + <dd> <p> Size of the <em>pBlock</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Creates an empty media type.</p> + <p> The media type is created without any attributes. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates an <strong>{{MFVIDEOFORMAT}}</strong> structure from a video media type.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Converts a Media Foundation audio media type to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p>If the <strong>wFormatTag</strong> member of the returned structure is <strong>{{WAVE_FORMAT_EXTENSIBLE}}</strong>, you can cast the reference to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{WAVEFORMATEX}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <strong>{{WAVEFORMATEX}}</strong> structure.</p> </dd> + + + <dd> <p>Contains a flag from the <strong>{{MFWaveFormatExConvertFlags}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER2}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER2}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG1VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG1VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG2VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG2VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the image size for a video format. Given a <strong>{{BITMAPINFOHEADER}}</strong> structure, this function calculates the correct value of the <strong>biSizeImage</strong> member. </p> + <p> Before calling this function, you must set at least the following members of the <strong>{{BITMAPINFOHEADER}}</strong> structure:</p><ul> <li><strong>biCompression</strong></li> <li><strong>biBitCount</strong></li> <li><strong>biWidth</strong></li> <li><strong>biHeight</strong></li> </ul><p>Also, if <strong>biCompression</strong> is <strong>{{BI_BITFIELDS}}</strong>, the <strong>{{BITMAPINFOHEADER}}</strong> structure must be followed by an array of color masks. </p><p> This function fails if the <strong>{{BITMAPINFOHEADER}}</strong> structure describes a format that is not a video format. For example, it fails if <strong>biCompresson</strong> is <strong>{{BI_JPEG}}</strong> or <strong>{{BI_PNG}}</strong> .</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{BITMAPINFOHEADER}}</strong> structure is not valid, or the value of <em>cbBufSize</em> is too small. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p>The function returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Media subtype for the video format. For a list of subtypes, see Media Type {{GUIDs}}.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of each frame, in bytes. If the format is compressed or is not recognized, the value is zero.</p> </dd> + + + + + <p> Converts a video frame rate into a frame duration.</p> + <p>This function is useful for calculating time stamps on a sample, given the frame rate.</p><p>Also, average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p> For certain common frame rates, the function gets the frame duration from a look-up table:</p><table> <tr><th>Frames per second (floating point)</th><th>Frames per second (fractional)</th><th>Average time per frame</th></tr> <tr><td>59.94</td><td>60000/1001</td><td>166833</td></tr> <tr><td>29.97</td><td>30000/1001</td><td>333667</td></tr> <tr><td>23.976</td><td>24000/1001</td><td>417188</td></tr> <tr><td>60</td><td>60/1</td><td>166667</td></tr> <tr><td>30</td><td>30/1</td><td>333333</td></tr> <tr><td>50</td><td>50/1</td><td>200000</td></tr> <tr><td>25</td><td>25/1</td><td>400000</td></tr> <tr><td>24</td><td>24/1</td><td>416667</td></tr> </table><p>?</p><p> Most video content uses one of the frame rates listed here. For other frame rates, the function calculates the duration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The numerator of the frame rate. </p> </dd> + + + <dd> <p> The denominator of the frame rate. </p> </dd> + + + <dd> <p> Receives the average duration of a video frame, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Calculates the frame rate, in frames per second, from the average duration of a video frame.</p> + <p>Average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p>This function uses a look-up table for certain common durations. The table is listed in the Remarks section for the <strong>{{MFFrameRateToAverageTimePerFrame}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The average duration of a video frame, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the numerator of the frame rate.</p> </dd> + + + <dd> <p>Receives the denominator of the frame rate.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Initializes a media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Initializes a media type from a <strong>{{WAVEFORMATEX}}</strong> structure. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{WAVEFORMATEX}}</strong> structure, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + + + <p> </p><p>Initializes a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</li> <li><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The media type is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The function allocates memory for the format block. The caller must release the format block by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Creates a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>. The function also allocates memory for the format block, which the caller must release by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Compares a full media type to a partial media type.</p> + <p>A pipeline component can return a partial media type to describe a range of possible formats the component might accept. A partial media type has at least a major type {{GUID}}, but might be missing some of the other attributes that are needed to fully describe the type. The missing attributes represent "don't care" values for the partial type. For example, a partial video type might be missing the attributes for the width and height of the video.</p><p>This function returns <strong>{{TRUE}}</strong> if the following conditions are both true:</p><ul> <li> The partial media type contains a major type {{GUID}}. </li> <li> All of the attributes in the partial type exist in the full type and are set to the same value. </li> </ul><p> Otherwise, the function returns <strong>{{FALSE}}</strong>. </p> + <p>If the full media type is compatible with the partial media type, the function returns <strong>{{TRUE}}</strong>. Otherwise, the function returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the full media type.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the partial media type.</p> </dd> + + + + + <p> Creates a media type that wraps another media type. </p> + <p> The original media type (<em>pOrig</em>) is stored in the new media type under the <strong>{{MF_MT_WRAPPED_TYPE}}</strong> attribute. To extract the original media type, call <strong>{{MFUnwrapMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type to wrap in a new media type. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the major type for the new media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the subtype for the new media type. For possible values, see:</p> <ul> <li> <strong>Audio Subtypes</strong> </li> <li> Video Subtypes </li> </ul> <p>Applications can define custom subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the new media type that wraps the original media type. The caller must release the interface. </p> </dd> + + + + + <p> Retrieves a media type that was wrapped in another media type by the <strong>{{MFWrapMediaType}}</strong> function. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates a video media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure. </p> + <p> Instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure to initialize a video media type, you can call <strong>{{MFCreateMediaType}}</strong> and set the media type attributes directly. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a partial video media type with a specified subtype. </p> + <p> This function creates a media type and sets the major type equal to <strong>{{MFMediaType_Video}}</strong> and the subtype equal to the value specified in <em>pAMSubtype</em>. </p><p>You can get the same result with the following steps:</p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. </li> <li> Set the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute to <strong>{{MFMediaType_Video}}</strong>. </li> <li> Set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute to the subtype. </li> </ol><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a {{GUID}} that specifies the subtype. See Video Subtype {{GUIDs}}. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether a {{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value is a {{YUV}} format.</p> + <p>This function checks whether <em>Format</em> specifies a {{YUV}} format. Not every {{YUV}} format is recognized by this function. However, if a {{YUV}} format is not recognized by this function, it is probably not supported for video rendering or DirectX video acceleration ({{DXVA}}).</p> + <p>The function returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The value specifies a {{YUV}} format.</p> </td></tr> <tr><td> <dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The value does not specify a recognized {{YUV}} format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value.</p> </dd> + + + + + <p> This function is not implemented.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns <strong>{{E_FAIL}}</strong>.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Calculates the minimum surface stride for a video format. </p> + <p> This function calculates the minimum stride needed to hold the image in memory. Use this function if you are allocating buffers in system memory. Surfaces allocated in video memory might require a larger stride, depending on the graphics card. </p><p> If you are working with a DirectX surface buffer, use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to find the surface stride. </p><p> For planar {{YUV}} formats, this function returns the stride for the Y plane. Depending on the format, the chroma planes might have a different stride. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the minimum surface stride, in pixels.</p> </dd> + + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p> This function is equivalent to the <strong>{{MFCalculateImageSize}}</strong> function. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll.? + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of one frame, in bytes. If the format is compressed or is not recognized, this value is zero.</p> </dd> + + + + + <p>Creates a video media type from a <strong>{{BITMAPINFOHEADER}}</strong> structure.</p> + <p>If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates a Media Foundation media type from another format representation.</p> + <p>If the original format is a DirectShow audio media type, and the format type is not recognized, the function sets the following attributes on the converted media type.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_MT_AM_FORMAT_TYPE}}</strong> </td><td>Contains the format type {{GUID}}.</td></tr> <tr><td> <strong>{{MF_MT_USER_DATA}}</strong> </td><td>Contains the format block.</td></tr> </table><p>?</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p>The {{GUID}} specified in <em>guidRepresentation</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies which format representation to convert. The following value is defined.</p> <table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td>{{AM_MEDIA_TYPE_REPRESENTATION}}</td><td>Convert a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the format representation to convert. The layout of the buffer depends on the value of <em>guidRepresentation</em>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future.]</p><p>Creates an audio media type from a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p> The <strong>{{IMFAudioMediaType}}</strong> interface is deprecrated, so applications should avoid using this function. To create a media type from a <strong>{{WAVEFORMATEX}}</strong> structure, do the following: </p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. The returned media type object is initially empty. </li> <li> Call <strong>{{MFInitMediaTypeFromWaveFormatEx}}</strong> to populate the media type from the <strong>{{WAVEFORMATEX}}</strong> structure. </li> </ol><p> Alternatively, you can call <strong>{{MFCreateMediaType}}</strong> and then set the media type attributes directly. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAudioMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Returns the {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value for an uncompressed video format.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns a {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value that identifies the video format. If the video format is compressed or not recognized, the return value is {{D3DFMT_UNKNOWN}}.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for a standard video format such as {{DVD}}, analog television, or {{ATSC}} digital television.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for an uncompressed {{RGB}} video format.</p> + <p> This function fills in some reasonable default values for the specified {{RGB}} format. </p><p> Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. See Media Type Attributes. </p><p> In general, you should avoid calling this function. If you know all of the format details, you can fill in the <strong>{{MFVIDEOFORMAT}}</strong> structure without this function. If you do not know all of the format details, attributes are preferable to using the <strong>{{MFVIDEOFORMAT}}</strong> structure. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Converts the extended color information from an <strong>{{MFVIDEOFORMAT}}</strong> to the equivalent DirectX Video Acceleration ({{DXVA}}) color information. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Sets the extended color information in a <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>This function sets the following fields in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><ul> <li><strong>videoInfo.{{MFNominalRange}}</strong></li> <li><strong>videoInfo.{{MFVideoLighting}}</strong></li> <li><strong>videoInfo.{{MFVideoPrimaries}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferFunction}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferMatrix}}</strong></li> <li><strong>videoInfo.SourceChromaSubsampling</strong></li> </ul><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Copies an image or image plane from one buffer to another. </p> + <p> This function copies a single plane of the image. For planar {{YUV}} formats, you must call the function once for each plane. In this case, <em>pDest</em> and <em>pSrc</em> must point to the start of each plane. </p><p> This function is optimized if the {{MMX}}, {{SSE}}, or {{SSE2}} instruction sets are available on the processor. The function performs a non-temporal store (the data is written to memory directly without polluting the cache). </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the start of the first row of pixels in the destination buffer. </p> </dd> + + + <dd> <p> Stride of the destination buffer, in bytes. </p> </dd> + + + <dd> <p> Pointer to the start of the first row of pixels in the source image. </p> </dd> + + + <dd> <p> Stride of the source image, in bytes. </p> </dd> + + + <dd> <p> Width of the image, in bytes. </p> </dd> + + + <dd> <p> Number of rows of pixels to copy. </p> </dd> + + + + + <p> Converts an array of 16-bit floating-point numbers into an array of 32-bit floating-point numbers. </p> + <p> The function converts <em>dwCount</em> values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Number of elements in the <em>pSrc</em> array to convert. </p> </dd> + + + + + <p> Converts an array of 32-bit floating-point numbers into an array of 16-bit floating-point numbers. </p> + <p> The function converts the values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Number of elements in the <em>pSrc</em> array to convert.</p> </dd> + + + + + <p>Creates a system-memory buffer object to hold 2D image data.</p> + <p>The returned buffer object also exposes the <strong>{{IMF2DBuffer2}}</strong> interface.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Unrecognized video format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Width of the image, in pixels. </p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>A <strong>{{FOURCC}}</strong> code or {{D3DFORMAT}} value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}},</strong> the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p>Allocates a system-memory buffer that is optimal for a specified media type.</p> + <p>For video formats, if the format is recognized, the function creates a 2-D buffer that implements the <strong>{{IMF2DBuffer2}}</strong> interface. Otherwise it creates a linear buffer. To get the <strong>{{IMF2DBuffer2}}</strong> interface, call <strong>QueryInterface</strong> on the reference returned in <em>ppBuffer</em>. If the <strong>QueryInterface</strong> method fails, use the <strong>{{IMFMediaBuffer}}</strong> interface to access the buffer memory.</p><p>For audio formats, the function allocates a buffer that is large enough to contain <em>llDuration</em> audio samples, or <em>dwMinLength</em>, whichever is larger.</p><p>This function always allocates system memory. For Direct3D surfaces, use the <strong>{{MFCreateDXGISurfaceBuffer}}</strong> or <strong>{{MFCreateDXSurfaceBuffer}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>The sample duration. This value is required for audio formats.</p> </dd> + + + <dd> <p>The minimum size of the buffer, in bytes. The actual buffer size might be larger. Specify zero to allocate the default buffer size for the media type.</p> </dd> + + + <dd> <p>The minimum memory alignment for the buffer. Specify zero to use the default memory alignment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty collection object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the collection object's <strong>{{IMFCollection}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Allocates a block of memory.</p> + <p>In the current version of Media Foundation, this function is equivalent to calling the <strong>HeapAlloc</strong> function and specifying the heap of the calling process.</p><p>To free the allocated memory, call <strong>{{MFHeapFree}}</strong>.</p> + <p>If the function succeeds, it returns a reference to the allocated memory block. If the function fails, it returns <strong>{{NULL}}</strong>.</p> + + + <dd> <p>Number of bytes to allocate.</p> </dd> + + + <dd> <p>Zero or more flags. For a list of valid flags, see <strong>HeapAlloc</strong> in the Windows {{SDK}} documentation.</p> </dd> + + + <dd> <p> Reserved. Set to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Set to zero. </p> </dd> + + + <dd> <p> Reserved. Set to <strong>eAllocationTypeIgnore</strong>. </p> </dd> + + + + + <p> </p><p>Frees a block of memory that was allocated by calling the <strong>{{MFHeapAlloc}}</strong> function.</p> + <p>This function does not return a value.</p> + + + + <p>Calculates ((a * b) + d) / c, where each term is a 64-bit signed value.</p> + <strong>Note</strong>??A previous version of this topic described the parameters incorrectly. The divisor is <em>c</em> and the rounding factor is <em>d</em>.? + <p>Returns the result of the calculation. If numeric overflow occurs, the function returns _I64_MAX (positive overflow) or {{LLONG_MIN}} (negative overflow). If Mfplat.dll cannot be loaded, the function returns _I64_MAX.</p> + + + <dd> <p>A multiplier.</p> </dd> + + + <dd> <p>Another multiplier.</p> </dd> + + + <dd> <p>The divisor.</p> </dd> + + + <dd> <p>The rounding factor.</p> </dd> + + + + + <p>Gets the class identifier for a content protection system.</p> + <p>The class identifier can be used to create the input trust authority ({{ITA}}) for the content protection system. Call <strong>CoCreateInstance</strong> or <strong>{{IMFPMPHost::CreateObjectByCLSID}}</strong> to get an <strong>{{IMFTrustedInput}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} that identifies the content protection system.</p> </dd> + + + <dd> <p>Receives the class identifier to the content protection system.</p> </dd> + + + + + <p> </p><p>Defines the behavior of the <strong>{{IMFMediaSession::SetTopology}}</strong> method.</p> + <p> These flags are optional, and are not mutually exclusive. If no flags are set, the Media Session resolves the topology and then adds it to the queue of pending presentations. </p> + + + + <p> Defines flags for the <strong>{{IMFMediaSession::GetFullTopology}}</strong> method. </p> + + + + <p> Contains flags that define the behavior of the <strong>{{MFCreatePMPMediaSession}}</strong> function. </p> + + + + <p> </p><p>Defines the object types that are created by the source resolver.</p> + + + <dd> <p>Media source. You can query the object for the <strong>{{IMFMediaSource}}</strong> interface.</p> </dd> + + + <dd> <p>Byte stream. You can query the object for the <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>Invalid type.</p> </dd> + + + + + + + + <p>Specifies how the topology loader connects a topology node. This enumeration is used with the <strong>{{MF_TOPONODE_CONNECT_METHOD}}</strong> attribute. </p> + + + + <p> </p><p>Defines status flags for the <strong>{{MF_TOPOLOGY_RESOLUTION_STATUS}}</strong> attribute.</p> + + + + <p>Defines the characteristics of a media source. These flags are retrieved by the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method.</p> + <p>To skip forward or backward in a playlist, call <strong>{{IMFMediaSource::Start}}</strong> or <strong>{{IMFMediaSession::Start}}</strong> with the <strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong> time-format {{GUID}}. This capability applies only when the <strong>{{MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS}}</strong> flag is present.</p> + + + + + + + <p>Defines stream marker information for the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. The <strong>PlaceMarker</strong> method places a marker on the stream between samples. The <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration defines the marker type and the type of information associated with the marker.</p> + <p>If the Streaming Audio Renderer receives an <strong>{{MFSTREAMSINK_MARKER_TICK}}</strong> marker, it inserts silence to cover the gap in the data. </p> + + + + <p>Specifies how to rotate a video image.</p> + + + <dd> <p>Do not rotate the image.</p> </dd> + + + <dd> <p>Rotate the image to the correct viewing orientation.</p> </dd> + + + + + <p>Specifies how to flip a video image.</p> + + + <dd> <p>Do not flip the image.</p> </dd> + + + <dd> <p>Flip the image horizontally.</p> </dd> + + + <dd> <p>Flip the image vertically.</p> </dd> + + + + + <p>Specifies whether the topology loader enables Microsoft DirectX Video Acceleration ({{DXVA}}) in the topology.</p> + <p>This enumeration is used with the {{MF_TOPOLOGY_DXVA_MODE}} topology attribute.</p><p>If an {{MFT}} supports {{DXVA}}, the {{MFT}} must return <strong>{{TRUE}}</strong> for the <strong>{{MF_SA_D3D_AWARE}}</strong> attribute. To enable {{DXVA}}, the topology loader calls <strong>{{IMFTransform::ProcessMessage}}</strong> on the {{MFT}}, passing the {{MFT}} a reference to the <strong>{{IDirect3DDeviceManager9}}</strong> interface. The topology loader gets the <strong>{{IDirect3DDeviceManager9}}</strong> reference from the media sink for the video stream. Typically the enhanced video renderer ({{EVR}}) is the media sink.</p><p>Previous versions of Microsoft Media Foundation supported {{DXVA}} only for decoders.</p> + + + <dd> <p>The topology loader enables {{DXVA}} +on the decoder if possible, and drops optional Media Foundation transforms ({{MFTs}}) that do not support {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader disables all video acceleration. This setting forces software processing, even when the decoder supports {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader enables {{DXVA}} on every {{MFT}} that supports it.</p> </dd> + + + + + <p>Specifies whether the topology loader will insert hardware-based Media Foundation transforms ({{MFTs}}) into the topology.</p> + <p> This enumeration is used with the {{MF_TOPOLOGY_HARDWARE_MODE}} topology attribute. </p> + + + <dd> <p>Use only software {{MFTs}}. Do not use hardware-based {{MFTs}}. This mode is the default, for backward compatibility with existing applications.</p> </dd> + + + <dd> <p>Use hardware-based {{MFTs}} when possible, and software {{MFTs}} otherwise. This mode is the recommended one.</p> </dd> + + + <dd> <p>If hardware-based {{MFTs}} are available, the topoloader will insert them. If not, the connection will fail.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p> </p><p>Defines the type of a topology node.</p> + + + <dd> <p>Output node. Represents a media sink in the topology.</p> </dd> + + + <dd> <p>Source node. Represents a media stream in the topology.</p> </dd> + + + <dd> <p>Transform node. Represents a Media Foundation Transform ({{MFT}}) in the topology.</p> </dd> + + + <dd> <p>Tee node. A tee node does not hold a reference to an object. Instead, it represents a fork in the stream. A tee node has one input and multiple outputs, and samples from the upstream node are delivered to all of the downstream nodes.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> </p><p>Defines when a transform in a topology is flushed.</p> + + + <dd> <p>The transform is flushed whenever the stream changes, including seeks and new segments.</p> </dd> + + + <dd> <p>The transform is flushed when seeking is performed on the stream.</p> </dd> + + + <dd> <p>The transform is never flushed during streaming. It is flushed only when the object is released.</p> </dd> + + + + + <p> </p><p>Defines at what times a transform in a topology is drained.</p> + + + <dd> <p>The transform is drained when the end of a stream is reached. It is not drained when markout is reached at the end of a segment.</p> </dd> + + + <dd> <p>The transform is drained whenever a topology ends.</p> </dd> + + + <dd> <p>The transform is never drained.</p> </dd> + + + + + <p>Contains flags that describe the characteristics of a clock. These flags are returned by the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method.</p> + + + + <p> </p><p>Defines the state of a clock.</p> + + + <dd> <p>The clock is invalid. A clock might be invalid for several reasons. Some clocks return this state before the first start. This state can also occur if the underlying device is lost.</p> </dd> + + + <dd> <p>The clock is running. While the clock is running, the time advances at the clock's frequency and current rate.</p> </dd> + + + <dd> <p>The clock is stopped. While stopped, the clock reports a time of 0.</p> </dd> + + + <dd> <p>The clock is paused. While paused, the clock reports the time it was paused.</p> </dd> + + + + + <p> </p><p>Defines properties of a clock.</p> + + + <dd> <p>Jitter values are always negative. In other words, the time returned by <strong>{{IMFClock::GetCorrelatedTime}}</strong> might jitter behind the actual clock time, but will never jitter ahead of the actual time. If this flag is not present, the clock might jitter in either direction.</p> </dd> + + + + + <p> </p><p>Contains flags for the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + + + + + + + + + + <p> Describes the current status of a call to the <strong>{{IMFShutdown::Shutdown}}</strong> method.</p> + + + + <p> </p><p>Indicates whether the {{URL}} is from a trusted source.</p> + + + <dd> <p>The validity of the {{URL}} cannot be guaranteed because it is not signed. The application should warn the user.</p> </dd> + + + <dd> <p>The {{URL}} is the original one provided with the content.</p> </dd> + + + <dd> <p>The {{URL}} was originally signed and has been tampered with. The file should be considered corrupted, and the application should not navigate to the {{URL}} without issuing a strong warning the user.</p> </dd> + + + + + <p> </p><p>Specifies the direction of playback (forward or reverse).</p> + + + <dd> <p>Forward playback.</p> </dd> + + + <dd> <p>Reverse playback.</p> </dd> + + + + + <p> </p><p>Specifies how aggressively a pipeline component should drop samples.</p> + <p>In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode. The specific algorithm used depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels.</p><p>For example, suppose an encoded video stream has three B-frames between each pair of P-frames. A decoder might implement the following drop modes:</p><ul> <li> <p>Mode 1: Drop one out of every three B frames.</p> </li> <li> <p>Mode 2: Drop one out of every two B frames.</p> </li> <li> <p>Mode 3: Drop all delta frames.</p> </li> <li> <p>Modes 4 and 5: Unsupported.</p> </li> </ul><p>The enhanced video renderer ({{EVR}}) can drop video frames before sending them to the {{EVR}} mixer.</p> + + + <dd> <p>Normal processing of samples. Drop mode is disabled.</p> </dd> + + + <dd> <p>First drop mode (least aggressive).</p> </dd> + + + <dd> <p>Second drop mode.</p> </dd> + + + <dd> <p>Third drop mode.</p> </dd> + + + <dd> <p>Fourth drop mode.</p> </dd> + + + <dd> <p>Fifth drop mode (most aggressive, if it is supported; see Remarks).</p> </dd> + + + <dd> <p>Maximum number of drop modes. This value is not a valid flag.</p> </dd> + + + + + <p>Specifies the quality level for a pipeline component. The quality level determines how the component consumes or produces samples.</p> + <p> Each successive quality level decreases the amount of processing that is needed, while also reducing the resulting quality of the audio or video. The specific algorithm used to reduce quality depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels. Also, the same quality level might not be comparable between two different components. </p><p> Video decoders can often reduce quality by leaving out certain post-processing steps. The enhanced video renderer ({{EVR}}) can sometimes reduce quality by switching to a different deinterlacing mode. </p> + + + <dd> <p> Normal quality. </p> </dd> + + + <dd> <p> One level below normal quality. </p> </dd> + + + <dd> <p> Two levels below normal quality. </p> </dd> + + + <dd> <p> Three levels below normal quality. </p> </dd> + + + <dd> <p> Four levels below normal quality. </p> </dd> + + + <dd> <p> Five levels below normal quality. </p> </dd> + + + <dd> <p> Maximum number of quality levels. This value is not a valid flag. </p> </dd> + + + + + <p>Contains flags for the <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method.</p> + <p>If the decoder sets the <strong>{{MF_QUALITY_CANNOT_KEEP_UP}}</strong> flag, the quality manager tries to reduce latency through the media source and the media sink. For example, it might request the Enhanced Video Renderer ({{EVR}}) to drop frames. During this period, the quality manager stops calling the decoder's <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method, until samples are no longer arriving late at the sink. At that point, the quality manager resumes calling <strong>NotifyQualityEvent</strong> on the decoder.</p> + + + + <p> </p><p>Contains flags for adding a topology to the sequencer source, or updating a topology already in the queue.</p> + + + <dd> <p>This topology is the last topology in the sequence.</p> </dd> + + + + + <p> Specifies how the credential manager should obtain user credentials. </p> + <p>The application implements the credential manager, which must expose the <strong>{{IMFNetCredentialManager}}</strong> interface. If the <strong>{{REQUIRE_PROMPT}}</strong> flag is set, the credential manager should prompt the user for his or her name and password.</p><p>The credential cache object sets the <strong>{{REQUIRE_PROMPT}}</strong> flag if the cache does not yet contain valid credentials. It also sets this flag if the credentials will be sent as plain text, unless the credential manager previously set the <strong>{{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}}</strong> option. (See <strong>{{IMFNetCredentialCache::SetUserOptions}}</strong>.)</p> + + + <dd> <p> The credential manager should prompt the user to provide the credentials. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>The credentials are saved to persistent storage. This flag acts as a hint for the application's {{UI}}. If the application prompts the user for credentials, the {{UI}} can indicate that the credentials have already been saved.</p> </dd> + + + + + <p> </p><p>Describes options for the caching network credentials.</p> + + + <dd> <p>Allow the credential cache object to save credentials in persistant storage.</p> </dd> + + + <dd> <p>Do not allow the credential cache object to cache the credentials in memory. This flag cannot be combined with the {{MFNET_CREDENTIAL_SAVE}} flag.</p> </dd> + + + <dd> <p>The user allows credentials to be sent over the network in clear text.</p> <p> By default, <strong>{{IMFNetCredentialCache::GetCredential}}</strong> always returns the {{REQUIRE_PROMPT}} flag when the authentication flags include {{MFNET_AUTHENTICATION_CLEAR_TEXT}}, even if cached credentials are available. If you set the {{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}} option, the <strong>GetCredential</strong> method will not return {{REQUIRE_PROMPT}} for clear text, if cached credentials are available.</p> <p>Do not set this flag without notifying the user that credentials might be sent in clear text.</p> </dd> + + + + + <p> </p><p>Specifies how the user's credentials will be used.</p> + + + <dd> <p>The credentials will be used to authenticate with a proxy.</p> </dd> + + + <dd> <p>The credentials will be sent over the network unencrypted.</p> </dd> + + + <dd> <p>The credentials must be from a user who is currently logged on.</p> </dd> + + + + + <p> Indicates the type of control protocol that is used in streaming or downloading. </p> + + + <dd> <p> The protocol type has not yet been determined. </p> </dd> + + + <dd> <p> The protocol type is {{HTTP}}. This includes {{HTTPv9}}, {{WMSP}}, and {{HTTP}} download. </p> </dd> + + + <dd> <p> The protocol type is Real Time Streaming Protocol ({{RTSP}}). </p> </dd> + + + <dd> <p> The content is read from a file. The file might be local or on a remote share. </p> </dd> + + + <dd> <p>The protocol type is multicast.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p> </p><p>Describes the type of transport used in streaming or downloading data ({{TCP}} or {{UDP}}).</p> + + + <dd> <p>The data transport type is {{UDP}}.</p> </dd> + + + <dd> <p>The data transport type is {{TCP}}.</p> </dd> + + + + + <p> </p><p>Defines the status of the cache for a media file or entry.</p> + + + <dd> <p>The cache for a file or entry does not exist.</p> </dd> + + + <dd> <p>The cache for a file or entry is growing.</p> </dd> + + + <dd> <p>The cache for a file or entry is completed.</p> </dd> + + + + + <p>Defines statistics collected by the network source. The values in this enumeration define property identifiers ({{PIDs}}) for the <strong>{{MFNETSOURCE_STATISTICS}}</strong> property.</p><p>To retrieve statistics from the network source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MFNETSOURCE_STATISTICS_SERVICE}}</strong> and the interface identifier {{IID_IPropertyStore}}. The retrieved reference is an <strong>{{IPropertyStore}}</strong> reference. To get the value of a network statistic, construct a <strong>{{PROPERTYKEY}}</strong> with <strong>fmtid</strong> equal to <strong>{{MFNETSOURCE_STATISTICS}}</strong> and <strong>pid</strong> equal to a value from this enumeration. Then call <strong>{{IPropertyStore::GetValue}}</strong> with the property key to retrieve the value of the statistic as a <strong>{{PROPVARIANT}}</strong>. </p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Specifies how the default proxy locator will specify the connection settings to a proxy server. The application must set these values in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> + + + + <p> </p><p>Defines actions that can be performed on a stream.</p> + + + <dd> <p>No action.</p> </dd> + + + <dd> <p>Play the stream.</p> </dd> + + + <dd> <p>Copy the stream.</p> </dd> + + + <dd> <p>Export the stream to another format.</p> </dd> + + + <dd> <p>Extract the data from the stream and pass it to the application. For example, acoustic echo cancellation requires this action.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Last member of the enumeration.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_CGMSA}}</strong>.</p> + <p>These flags are equivalent to the {{OPM_CGMSA_Protection_Level}} enumeration constants used in the Output Protection Protocol ({{OPM}}). </p> + + + <dd> <p>{{CGMS}}-A is disabled.</p> </dd> + + + <dd> <p>The protection level is Copy Freely.</p> </dd> + + + <dd> <p>The protection level is Copy No More.</p> </dd> + + + <dd> <p>The protection level is Copy One Generation.</p> </dd> + + + <dd> <p>The protection level is Copy Never.</p> </dd> + + + <dd> <p>Redistribution control (also called the broadcast flag) is required. This flag can be combined with the other flags.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_ACP}}</strong>.</p> + + + <dd> <p>Specifies {{ACP}} is disabled.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level one.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level two.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level three.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Specifies values for audio constriction.</p> + <p>Values defined by the <strong>{{MFAudioConstriction}}</strong> enumeration matches the <strong>{{EAudioConstriction}}</strong> enumeration defined <strong>audioenginebaseapo.h</strong>.</p> + + + <dd> <p>Audio is not constricted. </p> </dd> + + + <dd> <p>Audio is down sampled to 48 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 44 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 14hKz/16-bit.</p> </dd> + + + <dd> <p>Audio is muted.</p> </dd> + + + + + <p> </p><p>Defines the version number for sample protection.</p> + + + <dd> <p>No sample protection.</p> </dd> + + + <dd> <p>Version 1.</p> </dd> + + + <dd> <p>Version 2.</p> </dd> + + + <dd> <p>Version 3.</p> </dd> + + + + + <p>Defines flags for the {{MF_TRANSCODE_TOPOLOGYMODE}} attribute.</p> + + + + <p>Defines the profile flags that are set in the {{MF_TRANSCODE_ADJUST_PROFILE}} attribute.</p><p>These flags are checked by <strong>{{MFCreateTranscodeTopology}}</strong> during topology building. Based on these flags, <strong>{{MFCreateTranscodeTopology}}</strong> adjusts the transcode profile by modifying the configuration settings for the streams according to the input requirements of the encoder used in the topology. </p><p>For more information about the stream settings that an application can specify, see Using the Transcode {{API}}.</p> + <p>If the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag is specified, the following changes are made for the video stream:</p><ul> <li>If the frame rate of the media source specified in the <em>pSrc</em> parameter of <strong>{{MFCreateTranscodeTopology}}</strong> and the frame rate specified by the application in the <strong>{{MF_MT_FRAME_RATE}}</strong> attribute differ by less than 1/1000, the profile uses the media source frame rate. This is because the pipeline considers the difference to be negligible.</li> <li>If the application does not specify an interlaced mode by setting the <strong>{{MF_MT_INTERLACE_MODE}}</strong> attribute, the profile is changed to use progressive frames.</li> </ul><p>The <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag must be accompanied with the required audio and video stream attributes provided by the application. For the audio stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_AUDIO_NUM_CHANNELS}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_SAMPLES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BLOCK_ALIGNMENT}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_AVG_BYTES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BITS_PER_SAMPLE}}</strong> </li> </ul><p> For the video stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_FRAME_RATE}}</strong> </li> <li> <strong>{{MF_MT_FRAME_SIZE}}</strong> </li> <li> <strong>{{MF_MT_AVG_BITRATE}}</strong> </li> <li> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </li> </ul><p> If these attributes are not set, <strong>{{MFCreateTranscodeTopology}}</strong> creates the topology but Media Session fails to generate the encoded file. The failure code depends on the {{MFT}} node in the topology. For example, if the application does not set the frame size, the {{WMV}} encoder fails to encode the content and application gets the {{MF_E_INVALIDMEDIATYPE}} error code through the Media Session. </p><p>Use the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag when you want to transcode the file by using the input stream attributes. The input source stream attributes are copied to the output media type before the {{MFT}} node is inserted in the topology. If you set additional stream attributes, this flag does not overwrite the set values. Only the missing attributes are filled with the input source's attribute values. This flag is useful in remux scenario where you want to generate the output file in the same format as the input source. If you want to perform format conversion, make sure you set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute for the stream to specify the encoder that topology builder must use. The transform node is added in the topology unless {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} is set. In this case, and the content is not encoded. Instead, if permitted by the container, the content is embedded in the specified container. </p><p>For example, assume that your input source is an {{MP3}} file. You set the container to be <strong>{{MFTranscodeContainerType_ASF}}</strong>, you do not set any stream attributes, and you set the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag. In this case, the generated output file is an {{ASF}} file (.wma) containing {{MP3}} media data. Note that if you use this flag, certain input stream attributes and the container type might not be compatible. </p> + + + + <p>Defines algorithms for the video processor which is use by {{MF_VIDEO_PROCESSOR_ALGORITHM}}.</p> + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies whether a stream associated with an <strong>{{IMFSensorDevice}}</strong> is an input or an output stream.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Defines the properties of a clock. </p> + + + <dd> <p> The interval at which the clock correlates its clock time with the system time, in 100-nanosecond units. If the value is zero, the correlation is made whenever the <strong>{{IMFClock::GetCorrelatedTime}}</strong> method is called. </p> </dd> + + + <dd> <p> The unique identifier of the underlying device that provides the time. If two clocks have the same unique identifier, they are based on the same device. If the underlying device is not shared between two clocks, the value can be <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> A bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFCLOCK_RELATIONAL_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> The clock frequency in Hz. A value of <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong> means that the clock has a frequency of 10 {{MHz}} (100-nanosecond ticks), which is the standard <strong>{{MFTIME}}</strong> time unit in Media Foundation. If the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the value of this field must be <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong>. </p> </dd> + + + <dd> <p> The amount of inaccuracy that may be present on the clock, in parts per billion (ppb). For example, an inaccuracy of 50 ppb means the clock might drift up to 50 seconds per billion seconds of real time. If the tolerance is not known, the value is <strong>{{MFCLOCK_TOLERANCE_UNKNOWN}}</strong>. This constant is equal to 50 parts per million (ppm). </p> </dd> + + + <dd> <p> The amount of jitter that may be present, in 100-nanosecond units. Jitter is the variation in the frequency due to sampling the underlying clock. Jitter does not include inaccuracies caused by drift, which is reflected in the value of <strong>dwClockTolerance</strong>. </p> <p> For clocks based on a single device, the minimum jitter is the length of the tick period (the inverse of the frequency). For example, if the frequency is 10 Hz, the jitter is 0.1 second, which is 1,000,000 in <strong>{{MFTIME}}</strong> units. This value reflects the fact that the clock might be sampled just before the next tick, resulting in a clock time that is one period less than the actual time. If the frequency is greater than 10 {{MHz}}, the jitter should be set to 1 (the minimum value). </p> <p> If a clock's underlying hardware device does not directly time stamp the incoming data, the jitter also includes the time required to dispatch the driver's interrupt service routine ({{ISR}}). In that case, the expected jitter should include the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_ISR}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the device driver's {{ISR}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_DPC}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the deferred procedure call ({{DPC}}) processing. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_PASSIVE}}</strong></dt> </dl> </td><td> <p> Jitter due to dropping to normal thread execution before time stamping. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Contains information about a revoked component.</p> + + + <dd> <p>Specifies the reason for the revocation. The following values are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_BOOT_DRIVER_VERIFICATION_FAILED}}</strong></dt> </dl> </td><td> <p>A boot driver could not be verified.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>A certificate in a trusted component's certificate chain was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_HS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The high-security certificate for authenticating the protected environment ({{PE}}) was revoked.</p> <p>The high-security certificate is typically used by {{ITAs}} that handle high-definition content and next-generation formats such as {{HD}}-{{DVD}}.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_EKU}}</strong></dt> </dl> </td><td> <p>A certificate's extended key usage ({{EKU}}) object is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_ROOT}}</strong></dt> </dl> </td><td> <p>The root certificate is not valid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_LS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The low-security certificate for authenticating the {{PE}} was revoked.</p> <p>The low-security certificate is typically used by {{ITAs}} that handle standard-definition content and current-generation formats.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_REVOKED}}</strong></dt> </dl> </td><td> <p>A trusted component was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_ABSENT}}</strong></dt> </dl> </td><td> <p>The {{GRL}} was not found.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_LOAD_FAILED}}</strong></dt> </dl> </td><td> <p>Could not load the global revocation list ({{GRL}}).</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_INVALID_GRL_SIGNATURE}}</strong></dt> </dl> </td><td> <p>The {{GRL}} signature is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MINCRYPT_FAILURE}}</strong></dt> </dl> </td><td> <p>A certificate chain was not well-formed, or a boot driver is unsigned or is signed with an untrusted certificate.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TEST_SIGNED_COMPONENT_LOADING}}</strong></dt> </dl> </td><td> <p>A component was signed by a test certificate.</p> </td></tr> </table> <p>?</p> <p>In addition, one of the following flags might be present, indicating the type of component that failed to load.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_USER_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>User-mode component.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_KERNEL_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>Kernel-mode component.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains a hash of the file header.</p> </dd> + + + <dd> <p>Contains a hash of the public key in the component's certificate.</p> </dd> + + + <dd> <p>File name of the revoked component.</p> </dd> + + + + + <p> </p><p>Contains information about one or more revoked components.</p> + + + <dd> <p>Revocation information version.</p> </dd> + + + <dd> <p>Number of elements in the <strong>pRRComponents</strong> array.</p> </dd> + + + <dd> <p>Array of <strong>{{MFRR_COMPONENT_HASH_INFO}}</strong> structures.</p> </dd> + + + + + <p> </p><p>Contains an image that is stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Picture</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Picture</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains a picture related to the content, such as album art.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMPicture for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li><strong>{{ASF_FLAT_PICTURE}}</strong> structure. </li> <li> Null-terminated wide-character string that contains the {{MIME}} type. </li> <li> Null-terminated wide-character string that contains a description. </li> <li> <p>Image data.</p> </li> </ul><p>This format differs from the <strong>{{WM_PICTURE}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_PICTURE}}</strong> structure contains internal references to two strings and the image data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_PICTURE}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + + <p> </p><p>Contains synchronized lyrics stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Lyrics_Synchronised</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Lyrics_Synchronised</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains lyrics synchronized to times in the source file.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMLyrics_Synchronised for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li> <p><strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure.</p> </li> <li> <p>Null-terminated wide-character string that contains a description.</p> </li> <li> <p>Lyric data. The format of the lyric data is described in the Windows Media Format {{SDK}} documentation.</p> </li> </ul><p>This format differs from the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure contains internal references to two strings and the lyric data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + <dd> <p>Specifies the format of time stamps in the lyrics. This member is equivalent to the <strong>bTimeStampFormat</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure is documented in the Windows Media Format {{SDK}}.</p> </dd> + + + <dd> <p>Specifies the type of synchronized strings that are in the lyric data. This member is equivalent to the <strong>bContentType</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure.</p> </dd> + + + <dd> <p>Size, in bytes, of the lyric data.</p> </dd> + + + + + <p>Specifies a new attribute value for a topology node.</p> + <p> Due to an error in the structure declaration, the <strong>u64</strong> member is declared as a 32-bit integer, not a 64-bit integer. Therefore, any 64-bit value passed to the <strong>{{IMFTopologyNodeAttributeEditor::UpdateNodeAttributes}}</strong> method is truncated to 32 bits. </p> + + + <dd> <p> The identifier of the topology node to update. To get the identifier of a topology node, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> {{GUID}} that specifies the attribute to update. </p> </dd> + + + <dd> <p> Attribute type, specified as a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT32}}</strong>. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT64}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> Attribute value (floating point). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>. </p> </dd> + + + + + <p> </p><p>Specifies the buffering requirements of a file.</p> + <p>This structure describes the buffering requirements for content encoded at the bit rate specified in the <strong>dwBitrate</strong>. The <strong>msBufferWindow</strong> member indicates how much data should be buffered before starting playback. The size of the buffer in bytes is <strong>msBufferWinow</strong>?<strong>dwBitrate</strong> / 8000.</p> + + + <dd> <p>Bit rate, in bits per second.</p> </dd> + + + <dd> <p>Size of the buffer window, in milliseconds.</p> </dd> + + + + + <p> </p><p>Specifies the buffering parameters for a network byte stream.</p> + + + <dd> <p>Size of the file, in bytes. If the total size is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Size of the playable media data in the file, excluding any trailing data that is not useful for playback. If this value is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MF_LEAKY_BUCKET_PAIR}}</strong> structures. Each member of the array gives the buffer window for a particular bit rate.</p> </dd> + + + <dd> <p>The number of elements in the <strong>prgBuckets</strong> array.</p> </dd> + + + <dd> <p>Amount of data to buffer from the network, in 100-nanosecond units. This value is in addition to the buffer windows defined in the <strong>prgBuckets</strong> member.</p> </dd> + + + <dd> <p>Amount of additional data to buffer when seeking, in 100-nanosecond units. This value reflects the fact that downloading must start from the previous key frame before the seek point. If the value is unknown, set this member to zero.</p> </dd> + + + <dd> <p>The playback duration of the file, in 100-nanosecond units. If the duration is unknown, set this member to zero.</p> </dd> + + + <dd> <p>Playback rate.</p> </dd> + + + + + <p>Specifies a range of bytes.</p> + + + <dd> <p>The offset, in bytes, of the start of the range.</p> </dd> + + + <dd> <p>The offset, in bytes, of the end of the range.</p> </dd> + + + + + <p> </p><p>Contains the authentication information for the credential manager.</p> + + + <dd> <p>The response code of the authentication challenge. For example, {{NS_E_PROXY_ACCESSDENIED}}.</p> </dd> + + + <dd> <p>Set this flag to <strong>{{TRUE}}</strong> if the currently logged on user's credentials should be used as the default credentials.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the authentication package will send unencrypted credentials over the network. Otherwise, the authentication package encrypts the credentials.</p> </dd> + + + <dd> <p>The original {{URL}} that requires authentication.</p> </dd> + + + <dd> <p>The name of the site or proxy that requires authentication.</p> </dd> + + + <dd> <p>The name of the realm for this authentication.</p> </dd> + + + <dd> <p>The name of the authentication package. For example, "Digest" or "{{MBS_BASIC}}".</p> </dd> + + + <dd> <p>The number of times that the credential manager should retry after authentication fails.</p> </dd> + + + + + <p> </p><p>Describes an action requested by an output trust authority ({{OTA}}). The request is sent to an input trust authority ({{ITA}}).</p> + + + <dd> <p>Specifies the action as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains a ticket object, provided by the {{OTA}}.</p> </dd> + + + <dd> <p>Size of the ticket object, in bytes.</p> </dd> + + + + + <p> </p><p>Contains parameters for the <strong>{{IMFInputTrustAuthority::BindAccess}}</strong> or <strong>{{IMFInputTrustAuthority::UpdateAccess}}</strong> method.</p> + + + + <p>Contains information about the audio and video streams for the transcode sink activation object.</p><p>To get the information stored in this structure, call <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong>.</p> + <p>The <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong> method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-<strong>{{NULL}}</strong> after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> + + + + <p>Contains parameters for the <strong>{{IMFLocalMFTRegistration::RegisterMFTs}}</strong> method.</p> + + + + <p>Contains information about the data that you want to provide as input to a protection system function.</p> + + + <dd> <p>The identifier of the function that you need to run. This value is defined by the implementation of the protection system. </p> </dd> + + + <dd> <p>The size of the private data that the implementation of the security processor implementation reserved. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The size of the data provided as input to the protection system function that you want to run. </p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The data to provide as input to the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for use by the independent hardware vendor ({{IHV}}). Bytes <strong>PrivateDataByteCount</strong> through <strong>{{HWProtectionDataByteCount}}</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the input data for the protection system function. </p> <p>The protection system specification defines the format and size of the {{DRM}} function.</p> </dd> + + + + + <p>Contains information about the data you received as output from a protection system function.</p> + + + <dd> <p>The size of the private data that the implementation of the security processor reserves, in bytes. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The maximum size of data that the independent hardware vendor ({{IHV}}) can return in the output buffer, in bytes.</p> </dd> + + + <dd> <p>The size of the data that the {{IHV}} wrote to the output buffer, in bytes.</p> </dd> + + + <dd> <p>The result of the protection system function.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data. </p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent running the protection system function. +</p> </dd> + + + <dd> <p>The output of the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for {{IHV}} use. Bytes <strong>PrivateDataByteCount</strong> through <strong>MaxHWProtectionDataByteCount</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the region of the array into which the driver should return the output data from the protection system function.</p> <p>The protection system specification defines the format and size of the function.</p> </dd> + + + + + <p>Advises the secure processor of the Multimedia Class Scheduler service ({{MMCSS}}) parameters so that real-time tasks can be scheduled at the expected priority.</p> + + + <dd> <p>The identifier for the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread that runs the {{MMCSS}} task.</p> </dd> + + + + + + + + + + + <p>Provides playback controls for protected and unprotected content. The Media Session and the protected media path ({{PMP}}) session objects expose this interface. This interface is the primary interface that applications use to control the Media Foundation pipeline.</p><p>To obtain a reference to this interface, call <strong>{{MFCreateMediaSession}}</strong> or <strong>{{MFCreatePMPMediaSession}}</strong>.</p> + + + + <p> Sets a topology on the Media Session. </p> + <p> If <em>pTopology</em> is a full topology, set the <strong>{{MFSESSION_SETTOPOLOGY_NORESOLUTION}}</strong> flag in the <em>dwSetTopologyFlags</em> parameter. Otherwise, the topology is assumed to be a partial topology. The Media Session uses the topology loader to resolve a partial topology into a full topology.</p><p>If the Media Session is currently paused or stopped, the <strong>SetTopology</strong> method does not take effect until the next call to <strong>{{IMFMediaSession::Start}}</strong>.</p><p>If the Media Session is currently running, or on the next call to <strong>Start</strong>, the <strong>SetTopology</strong> method does the following:</p><ul> <li>If the <strong>{{MFSESSION_SETTOPOLOGY_IMMEDIATE}}</strong> flag is set in <em>dwSetTopologyFlags</em>, the Media Session ends the current presentation immediately, clears all pending topologies, and uses <em>pTopology</em> to start a new presentation.</li> <li>Otherwise, the Media Session queues <em>pTopology</em> and starts the new presentation when the current presentation has completed. If there is no current presentation, the new presentation starts immediately.</li> <li>Starting in Windows?7, you can also specify the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag to clear the current topology but leave any other pending topologies on the queue.</li> </ul><p> This method is asynchronous. If the method returns {{S_OK}}, the Media Session sends an {{MESessionTopologySet}} event when the operation completes. If the Media Session is currently paused to stopped, the Media Session does not send the {{MESessionTopologySet}} event until the next call to <strong>{{IMFMediaSession::Start}}</strong> </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_INVALID_TIME_ATTRIBUTES}}</strong></dt> </dl> </td><td> <p>The topology has invalid values for one or more of the following attributes:</p> <ul> <li> <strong>{{MF_TOPONODE_MEDIASTART}}</strong> </li> <li> <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTART}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTOP}}</strong> </li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_DEBUGGING_NOT_ALLOWED}}</strong></dt> </dl> </td><td> <p> Protected content cannot be played while debugging. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_SETTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to the topology object's <strong>{{IMFTopology}}</strong> interface. </p> </dd> + + + + + <p> </p><p>Clears all of the presentations that are queued for playback in the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionTopologiesCleared}} event.</p><p>This method does not clear the current topology; it only removes topologies that are placed in the queue, waiting for playback. To remove the current topology, call <strong>{{IMFMediaSession::SetTopology}}</strong> with the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Starts the Media Session. </p> + <p>When this method is called, the Media Session starts the presentation clock and begins to process media samples.</p><p>This method is asynchronous. When the method completes, the Media Session sends an {{MESessionStarted}} event.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that specifies the time format for the <em>pvarStartPosition</em> parameter. This parameter can be <strong>{{NULL}}</strong>. The value <strong>{{NULL}}</strong> is equivalent to passing in <strong>{{GUID_NULL}}</strong>.</p> <p>The following time format {{GUIDs}} are defined:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>Presentation time. The <em>pvarStartPosition</em> parameter must have one of the following <strong>{{PROPVARIANT}}</strong> types.</p> <ul> <li><strong>{{VT_I8}}</strong>: The <em>pvarStartPosition</em> parameter contains the starting position in 100-nanosecond units, relative to the start of the presentation.</li> <li><strong>{{VT_EMPTY}}</strong>: Playback starts from the current position.</li> </ul> <p>All media sources support this time format.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong></dt> </dl> </td><td> <p>Segment offset. This time format is supported by the Sequencer Source. The starting time is an offset within a segment.</p> <p>Call the <strong>{{MFCreateSequencerSegmentOffset}}</strong> function to create the <strong>{{PROPVARIANT}}</strong> value for the +<em>pvarStartPosition</em> parameter.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong></dt> </dl> </td><td> <strong>Note</strong>??Requires Windows?7 or later. ? <p>Skip to a playlist entry. The <em>pvarStartPosition</em> parameter specifies the index of the playlist entry, relative to the current entry. For example, the value 2 skips forward two entries. To skip backward, pass a negative value. The <strong>{{PROPVARIANT}}</strong> type is <strong>{{VT_I4}}</strong>.</p> <p>If a media source supports this time format, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns one or both of the following flags:</p> <ul> <li><strong>{{MFMEDIASOURCE_CAN_SKIPFORWARD}}</strong></li> <li><strong>{{MFMEDIASOURCE_CAN_SKIPBACKWARD}}</strong></li> </ul> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that specifies the starting position for playback. The meaning and data type of this parameter are indicated by the <em>pguidTimeFormat</em> parameter. </p> </dd> + + + + + <p> </p><p>Pauses the Media Session.</p> + <p>This method pauses the presentation clock.</p><p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionPaused}} event.</p><p>This method fails if the Media Session is stopped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SESSION_PAUSEWHILESTOPPED}}</strong></dt> </dl> </td><td> <p>The Media Session cannot pause while stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Stops the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionStopped}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Closes the Media Session and releases all of the resources it is using.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionClosed}} event.</p><p>After the <strong>Close</strong> method is called, the only valid methods on the Media Session are the following:</p><ul> <li> <p> <strong>{{IMFMediaSession::GetClock}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetFullTopology}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetSessionCapabilities}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::Shutdown}}</strong> </p> </li> </ul><p>All other methods return {{MF_E_INVALIDREQUEST}}, or else queue an event with that error code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the Media Session and releases all the resources used by the Media Session.</p> + <p>Call this method when you are done using the Media Session, before the final call to <strong>{{IUnknown::Release}}</strong>. Otherwise, your application will leak memory.</p><p>After this method is called, other <strong>{{IMFMediaSession}}</strong> methods return {{MF_E_SHUTDOWN}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the Media Session's presentation clock.</p> + <p>The application can query the returned <strong>{{IMFClock}}</strong> reference for the <strong>{{IMFPresentationClock}}</strong> interface. However, the application should not use this interface to control the state of the presentation clock. Instead, the application should always call the transport control methods on the Media Session's <strong>{{IMFMediaSession}}</strong> interface, such as <strong>Start</strong>, <strong>Stop</strong>, and <strong>Pause</strong>.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The Media Session does not have a presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the capabilities of the Media Session, based on the current presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_PAUSE}}</strong></dt> </dl> </td><td> <p>The Media Session can be paused.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_FORWARD}}</strong></dt> </dl> </td><td> <p>The Media Session supports forward playback at rates faster than 1.0.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_REVERSE}}</strong></dt> </dl> </td><td> <p>The Media Session supports reverse playback.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_SEEK}}</strong></dt> </dl> </td><td> <p>The Media Session can be seeked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_START}}</strong></dt> </dl> </td><td> <p>The Media Session can be started.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> Gets a topology from the Media Session.</p><p>This method can get the current topology or a queued topology.</p> + <p> If the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag is specified in the <em>dwGetFullTopologyFlags</em> parameter, the method returns the topology for the current presentation. Otherwise, the method searches all of the queued topologies for one that matches the identifier given in the <em>TopoId</em> parameter. </p><p> This method can be used to retrieve the topology for the current presentation or any pending presentations. It cannot be used to retrieve a topology that has already ended. </p><p> The topology returned in <em>ppFullTopo</em> is a full topology, not a partial topology. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_GETFULLTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The identifier of the topology. This parameter is ignored if the <em>dwGetFullTopologyFlags</em> parameter contains the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag. To get the identifier of a topology, call <strong>{{IMFTopology::GetTopologyID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology. The caller must release the interface. </p> </dd> + + + + + <p>Creates a media source from a {{URL}} or a byte stream. The Source Resolver implements this interface. To create the source resolver, call <strong>{{MFCreateSourceResolver}}</strong> function.</p> + + + + <p> Creates a media source or a byte stream from a {{URL}}. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain either the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag, but should not contain both.</p><p>It is recommended that you do not set <strong>{{MF_RESOLUTION_WRITE}}</strong> on the input argument <em>dwFlags</em> unless it is necessary for your scenario. For most use-cases, media sources do not need to be created with write capability. Creating a media source with write capability may have a lower probability of success than creating a media source without write capability. This is because there can be stricter checks on the content represented by the {{URL}} when creating a media source with write capability.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><strong>Note</strong>??This method cannot be called remotely.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p> The {{URL}} scheme is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Null-terminated string that contains the {{URL}} to resolve. </p> </dd> + + + <dd> <p> Bitwise {{OR}} of one or more flags. See <strong>Source Resolver Flags</strong>. See remarks below.</p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Creates a media source from a byte stream. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values (both if possible):</p><ul> <li> Specify the {{URL}} in the <em>pwszURL</em> parameter. </li> <li> Specify the {{MIME}} type by setting the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. (This attribute might be set already when you create the byte stream, depending on how the byte stream was created.) </li> </ul><strong>Note</strong>??This method cannot be called remotely.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> This byte stream is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p> Null-terminated string that contains the {{URL}} of the byte stream. The {{URL}} is optional and can be <strong>{{NULL}}</strong>. See Remarks for more information. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source or a byte stream from a {{URL}}.</p> + <p>The <em>dwFlags</em> parameter must contain either the {{MF_RESOLUTION_MEDIASOURCE}} flag or the {{MF_RESOLUTION_BYTESTREAM}} flag, but should not contain both.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromURL}}</strong> to get a reference to the object that was created.</p><p>The usage of the <em>pProps</em> parameter depends on the implementation of the media source. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p>The {{URL}} scheme is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated string that contains the {{URL}} to resolve.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Completes an asynchronous request to create an object from a {{URL}}. </p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p> The operation was canceled. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromByteStream}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p>The byte stream is not supported.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream does not support seeking.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p>A null-terminated string that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of one or more flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A oointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source from a byte stream.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The application canceled the operation.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Cancels an asynchronous request to create an object. </p> + <p> You can use this method to cancel a previous call to <strong>BeginCreateObjectFromByteStream</strong> or <strong>BeginCreateObjectFromURL</strong>. Because these methods are asynchronous, however, they might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method. </p><strong>Note</strong>??This method cannot be called remotely.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSourceResolver::BeginCreateObjectFromByteStream}}</strong> or <strong>{{IMFSourceResolver::BeginCreateObjectFromURL}}</strong> method. </p> </dd> + + + + + <p>Implemented by media source objects.</p><p>Media sources are objects that generate media data. For example, the data might come from a video file, a network stream, or a hardware device, such as a camera. Each media source contains one or more streams, and each stream delivers data of one type, such as audio or video.</p> + <p>In Windows?8, this interface is extended with <strong>{{IMFMediaSourceEx}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the media source.</p> + <p>The characteristics of a media source can change at any time. If this happens, the source sends an {{MESourceCharacteristicsChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves a copy of the media source's presentation descriptor. Applications use the presentation descriptor to select streams and to get information about the source content.</p> + <p>The presentation descriptor contains the media source's default settings for the presentation. The application can change these settings by selecting or deselecting streams, or by changing the media type on a stream. Do not modify the presentation descriptor unless the source is stopped. The changes take affect when the source's <strong>{{IMFMediaSource::Start}}</strong> method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation descriptor's <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Starts, seeks, or restarts the media source by specifying where to start playback.</p> + <p>This method is asynchronous. If the operation succeeds, the media source sends the following events:</p><ul> <li> For each new stream, the source sends an {{MENewStream}} event. This event is sent for the first <strong>Start</strong> call in which the stream appears. The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> For each <em>updated</em> stream, the source sends an {{MEUpdatedStream}} event. A stream is updated if the stream already existed when <strong>Start</strong> was called (for example, if the application seeks during playback). The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> If the previous state was stopped, the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused and the starting position is the current position (<strong>{{VT_EMPTY}}</strong>), the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused, and a new starting position is specified, the source sends an {{MESourceSeeked}} event. </li> <li> If the source sends an {{MESourceStarted}} event, each media stream sends an {{MEStreamStarted}} event. If the source sends an {{MESourceSeeked}} event, each stream sends an {{MEStreamSeeked}} event. </li> </ul><p> If the start operation fails asynchronously (after the method returns <strong>{{S_OK}}</strong>), the media source sends an {{MESourceStarted}} event that contains a failure code, without sending any of the other events listed here. If the method fails synchronously (returns an error code), no events are raised. </p><p> A call to <strong>Start</strong> results in a <em>seek</em> if the previous state was started or paused, and the new starting position is not <strong>{{VT_EMPTY}}</strong>. Not every media source can seek. If a media source can seek, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the <strong>{{MFMEDIASOURCE_CAN_SEEK}}</strong> flag. </p><p> Events from the media source are not synchronized with events from the media streams. If you seek a media source, therefore, you can still receive samples from the earlier position after getting the {{MESourceSeeked}} event. If you need to synchronize the operations, wait for the stream event, {{MEStreamSeeked}}, which marks the exact point in the stream where the seek occurs. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The start position is past the end of the presentation ({{ASF}} media source). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_HW_MFT_FAILED_START_STREAMING}}</strong></dt> </dl> </td><td> <p>A hardware device was unable to start streaming. This error code can be returned by a media source that represents a hardware device, such as a camera. For example, if the camera is already being used by another application, the method might return this error code.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The start request is not valid. For example, the start position is past the end of the presentation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The media source's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p> The media source does not support the time format specified in <em>pguidTimeFormat</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get the presentation descriptor, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. You can modify the presentation descriptor before calling <strong>Start</strong>, to select or deselect streams or change the media types. </p> </dd> + + + <dd> <p> Pointer to a {{GUID}} that specifies the time format. The time format defines the units for the <em>pvarStartPosition</em> parameter. If the value <em></em> is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. This parameter can be <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, it is equalivent to <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> Specifies where to start playback. The units of this parameter are indicated by the time format given in <em>pguidTimeFormat</em>. If the time format is <strong>{{GUID_NULL}}</strong>, the variant type must be <strong>{{VT_I8}}</strong> or <strong>{{VT_EMPTY}}</strong>. Use <strong>{{VT_I8}}</strong> to specify a new starting position, in 100-nanosecond units. Use <strong>{{VT_EMPTY}}</strong> to start from the current position. Other time formats might use other <strong>{{PROPVARIANT}}</strong> types. </p> </dd> + + + + + <p> </p><p>Stops all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourceStopped}} event, and every active stream sends an {{MEStreamStopped}} event. If the method returns a failure code, no events are raised.</p><p>When a media source is stopped, its current position reverts to zero. After that, if the <strong>Start</strong> method is called with {{VT_EMPTY}} for the starting position, playback starts from the beginning of the presentation.</p><p>While the source is stopped, no streams produce data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourcePaused}} event, and every active stream sends an {{MEStreamPaused}} event. If the method returns a failure code, no events are raised.</p><p>The media source must be in the started state. The method fails if the media source is paused or stopped.</p><p>While the source is paused, calls to <strong>{{IMFMediaStream::RequestSample}}</strong> succeed, but the streams will not deliver any samples until after the source is started again. Note that the source's event queue is not serialized with the stream event queues, so the client might receive some samples after the {{MESourcePaused}} event, due to multi-threading issues. But the client will not receive any samples from a stream after the {{MEStreamPaused}} event.</p><p>Not every media source can pause. If a media source can pause, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the {{MFMEDIASOURCE_CAN_PAUSE}} flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>Invalid state transition. The media source must be in the started state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the media source and releases the resources it is using.</p> + <p>If the application creates the media source, either directly or through the source resolver, the application is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks.</p><p>After this method is called, methods on the media source and all of its media streams return {{MF_E_SHUTDOWN}} (except for <strong>{{IUnknown}}</strong> methods).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFMediaSource}}</strong> interface to provide additional capabilities for a media source.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media source. </p> + <p>Implementations of this interface can return <strong>{{E_NOTIMPL}}</strong> for any methods that are not required by the media source.</p> + + + + <p>Gets an attribute store for the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the entire source. For stream-level attributes, use the <strong>{{IMFMediaSourceEx::GetStreamAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute store for a stream on the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the specified stream. For attributes that apply to the entire source, use the <strong>{{IMFMediaSourceEx::GetSourceAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support stream-level attributes.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. To get the identifier, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong> on the stream descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets a reference to the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager on the media source.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} Manager. The media source should query this reference for the <strong>{{IMFDXGIDeviceManager}}</strong> interface.</p> </dd> + + + + + <p> Creates a media source or a byte stream from a {{URL}}. </p> + <p>Applications do not use this interface. This interface is exposed by scheme handlers, which are used by the source resolver. A scheme handler is designed to parse one type of {{URL}} scheme. When the scheme handler is given a {{URL}}, it parses the resource that is located at that {{URL}} and creates either a media source or a byte stream.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called by the media pipeline to provide the app with an instance of <strong>{{IMFPresentationClock}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Represents one stream in a media source. </p> + <p>Streams are created when a media source is started. For each stream, the media source sends an {{MENewStream}} event with a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface.</p> + + + + <p> </p><p>Retrieves a reference to the media source that created this media stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a stream descriptor for this media stream.</p> + <p>Do not modify the stream descriptor. To change the presentation, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> and modify the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Requests a sample from the media source. </p> + <p>If <em>pToken</em> is not <strong>{{NULL}}</strong>, the media stream calls <strong>AddRef</strong> on <em>pToken</em> and places the token in a first-in, first-out queue.</p><p>When the next sample is available, the media stream stream does the following:</p><ol> <li> Pulls the first token from the queue. </li> <li> Sets the <strong>{{MFSampleExtension_Token}}</strong> attribute on the media sample. The attribute data is a reference to the token object. </li> <li> Sends an {{MEMediaSample}} event. The event data is a reference to the media sample's <strong>{{IMFSample}}</strong> interface. </li> <li> Calls <strong>Release</strong> on the token. </li> </ol><p>If the media stream cannot fulfill the caller's request for a sample, it simply releases the token object and skips steps 2 and 3.</p><p>The caller should monitor the reference count on the request token. If the media stream sends an {{MEMediaSample}} event, get the <strong>{{MFSampleExtension_Token}}</strong> attribute from the sample and match the attribute value against the token. If the token's reference count falls to zero and you did not receive an {{MEMediaSample}} event, it means that the request was dropped.</p><p>Because the Media Foundation pipeline is multithreaded, the source's <strong>RequestSample</strong> method might get called after the source has stopped. If the media source is stopped, the method should return <strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong>. The pipeline does not treat this return code as an error condition. If the source returns any other error code, the pipeline treats it as fatal error and halts the session.</p><strong>Note</strong>??Earlier versions of the documentation listed the wrong error code for this case.?<p>If the media source is paused, the method succeeds, but the stream does not deliver the sample until the source is started again.</p><p>If a media source enounters an error asynchronously while processing data, it should signal the error in one of the following ways (but not both):</p><ul> <li>Return an error code from the next <strong>RequestSample</strong> call.</li> <li>Send an {{MEError}} event.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_END_OF_STREAM}}</strong></dt> </dl> </td><td> <p> The end of the stream was reached. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong></dt> </dl> </td><td> <p> The media source is stopped.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The source's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface to an object that is used as a token for the request. The caller must implement this object. This parameter can be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Implemented by media sink objects. This interface is the base interface for all Media Foundation media sinks. Stream sinks handle the actual processing of data on each stream.</p> + + + + <p> </p><p>Gets the characteristics of the media sink.</p> + <p> The characteristics of a media sink are fixed throughout the life time of the sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_FIXED_STREAMS}}</strong></strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The media sink has a fixed number of streams. It does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> and <strong>{{IMFMediaSink::RemoveStreamSink}}</strong> methods. This flag is a hint to the application. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CANNOT_MATCH_CLOCK}}</strong></strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The media sink cannot match rates with an external clock.</p> <p>For best results, this media sink should be used as the time source for the presentation clock. If any other time source is used, the media sink cannot match rates with the clock, with poor results (for example, glitching).</p> <p>This flag should be used sparingly, because it limits how the pipeline can be configured.</p> <p>For more information about the presentation clock, see Presentation Clock.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_RATELESS}}</strong></strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The media sink is rateless. It consumes samples as quickly as possible, and does not synchronize itself to a presentation clock.</p> <p>Most archiving sinks are rateless.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CLOCK_REQUIRED}}</strong></strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The media sink requires a presentation clock. The presentation clock is set by calling the media sink's <strong>{{IMFMediaSink::SetPresentationClock}}</strong> method.</p> <p>This flag is obsolete, because all media sinks must support the <strong>SetPresentationClock</strong> method, even if the media sink ignores the clock (as in a rateless media sink).</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CAN_PREROLL}}</strong></strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p> The media sink can accept preroll samples before the presentation clock starts. The media sink exposes the <strong>{{IMFMediaSinkPreroll}}</strong> interface. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE}}</strong></strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>The first stream sink (index 0) is a reference stream. The reference stream must have a media type before the media types can be set on the other stream sinks.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Adds a new stream sink to the media sink.</p> + <p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>If <em>pMediaType</em> is <strong>{{NULL}}</strong>, use the <strong>{{IMFMediaTypeHandler}}</strong> interface to set the media type. Call <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong> to get a reference to the interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The specified stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_EXISTS}}</strong></dt> </dl> </td><td> <p>There is already a stream sink with the same stream identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. New stream sinks cannot be added.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the new stream. The value is arbitrary but must be unique.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface, specifying the media type for the stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the new stream sink's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Removes a stream sink from the media sink.</p> + <p>After this method is called, the corresponding stream sink object is no longer valid. The <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong> and <strong>{{IMFMediaSink::GetStreamSinkById}}</strong> methods will no longer return that stream sink. You can re-use the stream identifier if you add another stream (by calling <strong>AddStreamSink</strong>).</p><p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>In some cases, the media sink supports this method but does not allow every stream sink to be removed. (For example, it might not allow stream 0 to be removed.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>This particular stream sink cannot be removed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream number is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. Stream sinks cannot be removed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream to remove. The stream identifier is defined when you call <strong>{{IMFMediaSink::AddStreamSink}}</strong> to add the stream sink.</p> </dd> + + + + + <p> </p><p>Gets the number of stream sinks on this media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of stream sinks.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by index.</p> + <p>Enumerating stream sinks is not a thread-safe operation, because stream sinks can be added or removed between calls to this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaSink::GetStreamSinkCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by stream identifier.</p> + <p>If you add a stream sink by calling the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method, the stream identifier is specified in the <em>dwStreamSinkIdentifier</em> parameter of that method. If the media sink has a fixed set of streams, the media sink assigns the stream identifiers.</p><p>To enumerate the streams by index number instead of stream identifier, call <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream identifier of the stream sink.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the presentation clock on the media sink.</p> + <p>During streaming, the media sink attempts to match rates with the presentation clock. Ideally, the media sink presents samples at the correct time according to the presentation clock and does not fall behind. Rateless media sinks are an exception to this rule, as they consume samples as quickly as possible and ignore the clock. If the sink is rateless, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_RATELESS}} flag.</p><p>The presentation clock must have a time source. Before calling this method, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> on the presentation clock to set the presentation time source. Some media sinks provide time sources; therefore, the media sink might be the time source for its own presentation clock. Regardless of what object provides the time source, however, the media sink must attempt to match rates with the clock specified in <em>pPresentationClock</em>. If a media sink cannot match rates with an external time source, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method retrieves the {{MEDIASINK_CANNOT_MATCH_CLOCK}} flag. In this case, <strong>SetPresentationClock</strong> will still succeed, but the results will not be optimal. The sink might not render samples quickly enough to match rates with the presentation clock.</p><p>If <em>pPresentationClock</em> is non-<strong>{{NULL}}</strong>, the media sink must register for clock state notifications, by calling <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock. If the method is called again with a new presentation clock, or if <em>pPresentationClock</em> is <strong>{{NULL}}</strong>, the media sink must call <strong>{{IMFPresentationClock::RemoveClockStateSink}}</strong> to deregister itself from the previous clock.</p><p>All media sinks must support this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>The presentation clock does not have a time source. Call <strong>SetTimeSource</strong> on the presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock, or <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, the media sink stops listening to the presentaton clock that was previously set, if any.</p> </dd> + + + + + <p> </p><p>Gets the presentation clock that was set on the media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>No clock has been set. To set the presentation clock, call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Shuts down the media sink and releases the resources it is using.</p> + <p>If the application creates the media sink, it is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks. In most applications, however, the application creates an activation object for the media sink, and the Media Session uses that object to create the media sink. In that case, the Media Session ? not the application ? shuts down the media sink. (For more information, see Activation Objects.)</p><p>After this method returns, all methods on the media sink return {{MF_E_SHUTDOWN}}, except for <strong>{{IUnknown}}</strong> methods and <strong>{{IMFMediaEventGenerator}}</strong> methods. The sink will not raise any events after this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a stream on a media sink object.</p> + + + + <p> </p><p>Retrieves the media sink that owns this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the stream identifier for this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the stream identifier. If this stream sink was added by calling <strong>{{IMFMediaSink::AddStreamSink}}</strong>, the stream identifier is in the <em>dwStreamSinkIdentifier</em> parameter of that method. Otherwise, the media sink defines the identifier.</p> </dd> + + + + + + + + <p> </p><p>Delivers a sample to the stream. The media sink processes the sample.</p> + <p>Call this method when the stream sink sends an {{MEStreamSinkRequestSample}} event.</p><p>This method can return {{MF_E_INVALID_TIMESTAMP}} for various reasons, depending on the implementation of the media sink:</p><ul> <li> <p>Negative time stamps.</p> </li> <li> <p>Time stamps that jump backward (within the same stream).</p> </li> <li> <p>The time stamps for one stream have drifted too far from the time stamps on another stream within the same media sink (for example, an archive sink that multiplexes the streams).</p> </li> </ul><p>Not every media sink returns an error code in these situations.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>The media sink is in the wrong state to receive a sample. For example, preroll is complete but the presenation clock has not started yet.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample has an invalid time stamp. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The media sink is paused or stopped and cannot process the sample.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>The presentation clock was not set. Call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a time stamp.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of a sample that contains valid data for the stream.</p> </dd> + + + + + <p> </p><p>Places a marker in the stream. </p> + <p>This method causes the stream sink to send an {{MEStreamSinkMarker}} event after the stream sink consumes all of the samples that were delivered up to this point (before the call to <strong>PlaceMarker</strong>).</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></strong></dt> </dl> </td><td> <p> This stream was removed from the media sink and is no longer valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the marker type, as a member of the <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that contains additional information related to the marker. The meaning of this value depends on the marker type. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that is attached to the {{MEStreamSinkMarker}} event. Call <strong>{{IMFMediaEvent::GetValue}}</strong> to get this value from the event. The caller can use this information for any purpose. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Causes the stream sink to drop any samples that it has received and has not rendered yet.</p> + <p>If any samples are still queued from previous calls to the <strong>{{IMFStreamSink::ProcessSample}}</strong> method, the media sink immediately discards them, without processing them. This can cause a glitch in the rendered output. The running state of the sink (running, paused, or stopped) does not change.</p><p>Any pending marker events from the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method are dispatched immediately, with the status code {{E_ABORT}}.</p><p>This method is synchronous. It does not return until the sink has discarded all pending samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized yet. You might need to set a media type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + + <p>Allocates video samples for a video media sink.</p><p>The stream sinks on the enhanced video renderer ({{EVR}}) expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier {{MR_VIDEO_ACCELERATION_SERVICE}}. Custom media sinks can also implement this interface. The Media Session uses this interface to allocate samples for the {{EVR}}, unless the upstream decoder supports DirectX Video Acceleration ({{DXVA}}).</p> + + + + <p> </p><p>Specifies the Direct3D device manager for the video media sink to use.</p> + <p>The media sink uses the Direct3D device manager to obtain a reference to the Direct3D device, which it uses to allocate Direct3D surfaces. The device manager enables multiple objects in the pipeline (such as a video renderer and a video decoder) to share the same Direct3D device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of the Direct3D device manager. The media sink queries this reference for the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Releases all of the video samples that have been allocated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Specifies the number of samples to allocate and the media type for the samples. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Invalid media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of samples to allocate. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Gets a video sample from the allocator. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The allocator was not initialized. Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocator}}</strong> or <strong>InitializeSampleAllocatorEx::InitializeSampleAllocatorEx</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SAMPLEALLOCATOR_EMPTY}}</strong></dt> </dl> </td><td> <p> No samples are available. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released and then returned to the pool of available samples, the allocator invokes the <strong>NotifyRelease</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when allocator samples are released for pruning by the allocator, or when the allocator is removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample to be pruned.</p> </dd> + + + + + <p>Enables an application to track video samples allocated by the enhanced video renderer ({{EVR}}).</p><p>The stream sinks on the {{EVR}} expose this interface as a service. To get a reference to the interface, call the <strong>{{IMFGetService::GetService}}</strong> method, using the <strong>{{MR_VIDEO_ACCELERATION_SERVICE}}</strong> service identifier.</p> + + + + <p>Sets the callback object that receives notification whenever a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released, it returns to the pool of available samples. When this happens, the allocator invokes the <strong>{{IMFVideoSampleAllocatorNotify::NotifyRelease}}</strong> callback.</p><p>The allocator holds at most one callback reference. Calling this method again replaces the previous callback reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFVideoSampleAllocatorNotify}}</strong> interface that receives notification, or <strong>{{NULL}}</strong> to remove the callback.</p> </dd> + + + + + <p>Gets the number of video samples that are currently available for use.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. The <strong>AllocateSample</strong> method removes a sample from the sample pool and returns it to the caller. When a sample is released, it returns to the pool. The <strong>GetFreeSampleCount</strong> method returns the count of samples that remain in the sample pool.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of available samples.</p> </dd> + + + + + <p>Allocates video samples that contain Microsoft Direct3D?11 texture surfaces.</p> + <p>You can use this interface to allocateDirect3D?11 video samples, rather than allocate the texture surfaces and media samples directly. To get a reference to this interface, call the <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> function. </p><p>To allocate video samples, perform the following steps:</p><ol> <li>Obtain a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. For a Media Foundation transform ({{MFT}}), this step occurs during the <strong>{{MFT_MESSAGE_SET_D3D_MANAGER}}</strong> event.</li> <li>Call <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> to create the allocator object and get a reference to the <strong>{{IMFVideoSampleAllocatorEx}}</strong> interface.</li> <li>Call <strong>{{IMFVideoSampleAllocator::SetDirectXManager}}</strong> on the allocator to set the <strong>{{IMFDXGIDeviceManager}}</strong> reference on the allocator.</li> <li>Call <strong>{{MFCreateAttributes}}</strong> to get a reference to the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Set the {{MF_SA_D3D11_USAGE}} and {{MF_SA_D3D11_BINDFLAGS}} attributes.</li> <li>Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocatorEx}}</strong>.</li> </ol> + + + + <p>Initializes the video sample allocator object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initial number of samples to allocate. </p> </dd> + + + <dd> <p>The maximum number of samples to allocate.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this interface to configure the allocator. Currently, the following configuration attributes are defined:</p> <ul> <li> {{MF_SA_BUFFERS_PER_SAMPLE}} </li> <li> {{MF_SA_D3D11_BINDFLAGS}} </li> <li> {{MF_SA_D3D11_USAGE}} </li> <li> {{MF_SA_D3D11_SHARED}} </li> <li> {{MF_SA_D3D11_SHARED_WITHOUT_MUTEX}} </li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Provides functionality for getting the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + + + + <p>Gets the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>Sets the border color.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color as an {{ARGB}} (alpha, red, green, blue) value.</p> </dd> + + + + + <p>Sets the source rectangle. The source rectangle is the portion of the input frame that is blitted to the destination surface.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle.</p> </dd> + + + + + <p>Sets the destination rectangle. The destination rectangle is the portion of the output surface where the source rectangle is blitted.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + + + <p>Specifies whether to flip the video image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_VIDEO_PROCESSOR_MIRROR}}</strong> value that specifies whether to flip the video image, either horizontally or vertically.</p> </dd> + + + + + <p>Specifies whether to rotate the video to the correct orientation.</p> + <p>The original orientation of the video is specified by the {{MF_MT_VIDEO_ROTATION}} attribute of the input media type.</p><p> If <em>eRotation</em> is <strong>{{ROTATION_NONE}}</strong>, the video processor does not correct the orientation of the output video. If the original video is rotated, and <em>eRotation</em> is <strong>{{ROTATION_NORMAL}}</strong>, the video processor corrects the orientation, so that the ouput video is not rotated. The video processor letterboxes the output as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{MF_VIDEO_PROCESSOR_ROTATION}}</strong> value that specifies whether to rotate the image.</p> </dd> + + + + + <p>Specifies the amount of downsampling to perform on the output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sampling size. To disable constriction, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Overrides the rotation operation that is performed in the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Rotation value in degrees. Typically, you can only use values from the <strong>{{MFVideoRotationFormat}}</strong> enumeration.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables effects that were implemented with <strong>{{IDirectXVideoProcessor::VideoProcessorBlt}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Returns the list of supported effects in the currently configured video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the list of suppported effect capabilities.</p> </dd> + + + + + <p>Represents a topology. A <em>topology</em> describes a collection of media sources, sinks, and transforms that are connected in a certain order. These objects are represented within the topology by <em>topology nodes</em>, which expose the <strong>{{IMFTopologyNode}}</strong> interface. A topology describes the path of multimedia data through these nodes.</p><p>To create a topology, call <strong>{{MFCreateTopology}}</strong>.</p> + + + + <p> Gets the identifier of the topology.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the identifier, as a <strong>{{TOPOID}}</strong> value. </p> </dd> + + + + + <p> </p><p>Adds a node to the topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pNode</em> is invalid, possibly because the node already exists in the topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a node from the topology.</p> + <p>This method does not destroy the node, so the <strong>{{IMFTopologyNode}}</strong> reference is still valid after the method returns.</p><p>The method breaks any connections between the specified node and other nodes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified node is not a member of this topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> Gets the number of nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of nodes. </p> </dd> + + + + + <p> Gets a node in the topology, specified by index. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The index is less than zero. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p> No node can be found at the index <em>wIndex</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The zero-based index of the node. To get the number of nodes in the topology, call <strong>{{IMFTopology::GetNodeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the reference. </p> </dd> + + + + + <p> </p><p>Removes all nodes from the topology.</p> + <p>You do not need to clear a topology before disposing of it. The <strong>Clear</strong> method is called automatically when the topology is destroyed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Converts this topology into a copy of another topology. </p> + <p>This method does the following:</p><ul> <li> Removes all of the nodes from this topology. </li> <li> Clones the nodes from <em>pTopology</em> and adds them to this topology. The cloned nodes have the same node identifiers as the nodes from <em>pTopology</em>. </li> <li> Connects the cloned nodes to match the connections in <em>pTopology</em>. </li> <li> Copies the attributes from <em>pTopology</em> to this topology. </li> <li> Copies the topology identifier from <em>pTopology</em> to this topology.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the topology to clone. </p> </dd> + + + + + <p>Gets a node in the topology, specified by node identifier.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The topology does not contain a node with this identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of the node to retrieve. To get a node's identifier, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the source nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the source nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty.</p> </dd> + + + + + <p> Gets the output nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the output nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty. </p> </dd> + + + + + <p>Represents a node in a topology. The following node types are supported:</p><ul> <li> Output node. Represents a media sink. </li> <li> Source node. Represents a media stream. </li> <li> Transform node. Represents a Media Foundation Transform ({{MFT}}). </li> <li> Tee node. Delivers a media stream to two or more nodes. </li> </ul><p>To create a new node, call the <strong>{{MFCreateTopologyNode}}</strong> function.</p> + + + + <p> </p><p>Sets the object associated with this node.</p> + <p>All node types support this method, but the object reference is not used by every node type.</p><table> <tr><th>Node type</th><th>Object reference</th></tr> <tr><td>Source node.</td><td>Not used.</td></tr> <tr><td>Transform node.</td><td> <strong>{{IMFTransform}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Output node</td><td> <strong>{{IMFStreamSink}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Tee node.</td><td>Not used.</td></tr> </table><p>?</p><p>If the object supports <strong>{{IPersist}}</strong>, <strong>{{IPersistStorage}}</strong>, or <strong>{{IPersistPropertyBag}}</strong>, the method gets the object's {{CLSID}} and sets the <strong>{{MF_TOPONODE_TRANSFORM_OBJECTID}}</strong> attribute on the node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the object's <strong>{{IUnknown}}</strong> interface. Use the value <strong>{{NULL}}</strong> to clear an object that was previous set.</p> </dd> + + + + + <p> Gets the object associated with this node. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> There is no object associated with this node. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the node type.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the node type, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> Retrieves the identifier of the node.</p> + <p> When a node is first created, it is assigned an identifier. Node identifiers are unique within a topology, but can be reused across several topologies. The topology loader uses the identifier to look up nodes in the previous topology, so that it can reuse objects from the previous topology. </p><p> To find a node in a topology by its identifier, call <strong>{{IMFTopology::GetNodeByID}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the identifier.</p> </dd> + + + + + <p> Sets the identifier for the node.</p> + <p> When a node is first created, it is assigned an identifier. Typically there is no reason for an application to override the identifier. Within a topology, each node identifier should be unique. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{TOPOID}}</strong> has already been set for this object. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the node. </p> </dd> + + + + + <p> </p><p>Retrieves the number of input streams that currently exist on this node.</p> + <p>The input streams may or may not be connected to output streams on other nodes. To get the node that is connected to a specified input stream, call <strong>{{IMFTopologyNode::GetInput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetInputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of input streams.</p> </dd> + + + + + <p> </p><p>Retrieves the number of output streams that currently exist on this node.</p> + <p>The output streams may or may not be connected to input streams on other nodes. To get the node that is connected to a specific output stream on this node, call <strong>{{IMFTopologyNode::GetOutput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetOutputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of output streams.</p> </dd> + + + + + <p> </p><p>Connects an output stream from this node to the input stream of another node.</p> + <p>Node connections represent data flow from one node to the next. The streams are logical, and are specified by index.</p><p>If the node is already connected at the specified output, the method breaks the existing connection. If <em>dwOutputIndex</em> or <em>dwInputIndexOnDownstreamNode</em> specify streams that do not exist yet, the method adds as many streams as needed.</p><p>This method checks for certain invalid conditions:</p><ul> <li> <p>An output node cannot have any output connections. If you call this method on an output node, the method returns {{E_FAIL}}.</p> </li> <li> <p>A node cannot be connected to itself. If <em>pDownstreamNode</em> specifies the same node as the method call, the method returns {{E_INVALIDARG}}.</p> </li> </ul><p>However, if the method succeeds, it does not guarantee that the node connection is valid. It is possible to create a partial topology that the topology loader cannot resolve. If so, the <strong>{{IMFTopoLoader::Load}}</strong> method will fail.</p><p>To break an existing node connection, call <strong>{{IMFTopologyNode::DisconnectOutput}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The method failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid parameter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream on this node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the node to connect to.</p> </dd> + + + <dd> <p>Zero-based index of the input stream on the other node.</p> </dd> + + + + + <p> </p><p>Disconnects an output stream on this node.</p> + <p>If the specified output stream is connected to another node, this method breaks the connection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwOutputIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified output stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream to disconnect.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified input stream on this node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified input stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the output stream that is connected to this node's input stream.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified output stream on this node.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified output stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the input stream that is connected to this node's output stream.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an output stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no output stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an output stream on this node.</p> + <p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}.</p><p>The preferred output type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred output type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred output type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an input stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no input stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an input stream on this node.</p> + <p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p><p>The preferred input type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred input type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred input type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> Copies the data from another topology node into this node.</p> + <p> The two nodes must have the same node type. To get the node type, call <strong>{{IMFTopologyNode::GetNodeType}}</strong>. </p><p> This method copies the object reference, preferred types, and attributes from <em>pNode</em> to this node. It also copies the <strong>{{TOPOID}}</strong> that uniquely identifies each node in a topology. It does not duplicate any of the connections from <em>pNode</em> to other nodes. </p><p> The purpose of this method is to copy nodes from one topology to another. Do not use duplicate nodes within the same topology. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The node types do not match. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node to copy. </p> </dd> + + + + + <p> Queries an object for a specified service interface. </p> + <p>A service is an interface that is exposed by one object but might be implemented by another object. The <strong>GetService</strong> method is equivalent to <strong>QueryInterface</strong>, with the following difference: when <strong>QueryInterface</strong> retrieves a reference to an interface, it is guaranteed that you can query the returned interface and get back the original interface. The <strong>GetService</strong> method does not make this guarantee, because the retrieved interface might be implemented by a separate object.</p><p>The <strong>{{MFGetService}}</strong> function is a helper function that queries an object for <strong>{{IMFGetService}}</strong> and calls the <strong>GetService</strong> method.</p> + + + + <p> </p><p>Retrieves a service interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the service.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The service identifier ({{SID}}) of the service. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives the interface reference. The caller must release the interface.</p> </dd> + + + + + <p>Provides timing information from a clock in Microsoft Media Foundation.</p><p>Clocks and some media sinks expose this interface through <strong>QueryInterface</strong>.</p> + <p>The <strong>{{IMFClock}}</strong> interface applies to any kind of clock. The presentation clock exposes the <strong>{{IMFPresentationClock}}</strong> interface in addition to <strong>{{IMFClock}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of values from the <strong>{{MFCLOCK_CHARACTERISTICS_FLAGS}}</strong> enumeration indicating the characteristics of the clock.</p> </dd> + + + + + <p> Retrieves the last clock time that was correlated with system time. </p> + <p>At some fixed interval, a clock correlates its internal clock ticks with the system time. (The system time is the time returned by the high-resolution performance counter.) This method returns:</p><ul> <li> The most recent clock time that was correlated with system time. </li> <li> The system time when the correlation was performed. </li> </ul><p> The clock time is returned in the <em>pllClockTime</em> parameter and is expressed in units of the clock's frequency. If the clock's <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the clock's frequency is 10 {{MHz}} (each clock tick is 100 nanoseconds). Otherwise, you can get the clock's frequency by calling <strong>{{IMFClock::GetProperties}}</strong>. The frequency is given in the <strong>qwClockFrequency</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure returned by that method. </p><p> The system time is returned in the <em>phnsSystemTime</em> parameter, and is always expressed in 100-nanosecond units. </p><p> To find out how often the clock correlates its clock time with the system time, call <strong>GetProperties</strong>. The correlation interval is given in the <strong>qwCorrelationRate</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure. If <strong>qwCorrelationRate</strong> is zero, it means the clock performs the correlation whenever <strong>GetCorrelatedTime</strong> is called. Otherwise, you can calculate the current clock time by extrapolating from the last correlated time. </p><p> Some clocks support rate changes through the <strong>{{IMFRateControl}}</strong> interface. If so, the clock time advances at a speed of frequency ? current rate. If a clock does not expose the <strong>{{IMFRateControl}}</strong> interface, the rate is always 1.0. </p><p>For the presentation clock, the clock time is the presentation time, and is always relative to the starting time specified in <strong>{{IMFPresentationClock::Start}}</strong>. You can also get the presentation time by calling <strong>{{IMFPresentationClock::GetTime}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a time source. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Reserved, must be zero. </p> </dd> + + + <dd> <p> Receives the last known clock time, in units of the clock's frequency. </p> </dd> + + + <dd> <p> Receives the system time that corresponds to the clock time returned in <em>pllClockTime</em>, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Retrieves the clock's continuity key. (Not supported.)</p> + <p>Continuity keys are currently not supported in Media Foundation. Clocks must return the value zero in the <em>pdwContinuityKey</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the continuity key.</p> </dd> + + + + + <p> </p><p>Retrieves the current state of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Receives the clock state, as a member of the <strong>{{MFCLOCK_STATE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the properties of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFCLOCK_PROPERTIES}}</strong> structure that receives the properties.</p> </dd> + + + + + <p>Represents a presentation clock, which is used to schedule when samples are rendered and to synchronize multiple streams.</p> + <p>To create a new instance of the presentation clock, call the {{MFCreatePresentationClock}} function. The presentation clock must have a time source, which is an object that provides the clock times. For example, the audio renderer is a time source that uses the sound card to drive the clock. Time sources expose the {{IMFPresentationTimeSource}} interface. To set the time source, call <strong>SetTimeSource</strong>. The presentation clock does not begin running until the <strong>Start</strong> method is called.</p><p>To get the presentation clock from the Media Session, call {{IMFMediaSession::GetClock}}.</p> + + + + <p> </p><p>Sets the time source for the presentation clock. The time source is the object that drives the clock by providing the current time.</p> + <p>The presentation clock cannot start until it has a time source.</p><p>The time source is automatically registered to receive state change notifications from the clock, through the time source's {{IMFClockStateSink}} interface, which all time sources must implement.</p><p>This time source have a frequency of 10 {{MHz}}. See {{IMFClock::GetClockCharacteristics}}. If not, the method returns {{MF_E_CLOCK_NOT_SIMPLE}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NOT_SIMPLE}}</strong></dt> </dl> </td><td> <p>The time source does not have a frequency of 10 {{MHz}}.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The time source has not been initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the {{IMFPresentationTimeSource}} interface of the time source.</p> </dd> + + + + + <p> </p><p>Retrieves the clock's presentation time source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the time source's {{IMFPresentationTimeSource}} interface. The caller must release the interface.</p> </dd> + + + + + <p> Retrieves the latest clock time. </p> + <p>This method does not attempt to smooth out jitter or otherwise account for any inaccuracies in the clock time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a presentation time source. Call <strong>{{IMFPresentationClock::SetTimeSource}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives the latest clock time, in 100-nanosecond units. The time is relative to when the clock was last started. </p> </dd> + + + + + <p> </p><p>Registers an object to be notified whenever the clock starts, stops, or pauses, or changes rate.</p> + <p>Before releasing the object, call {{IMFPresentationClock::RemoveClockStateSink}} to unregister the object for state-change notifications.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Unregisters an object that is receiving state-change notifications from the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Starts the presentation clock.</p> + <p>This method is valid in all states (stopped, paused, or running).</p><p>If the clock is paused and restarted from the same position (<em>llClockStartOffset</em> is {{PRESENTATION_CURRENT_POSITION}}), the presentation clock sends an {{IMFClockStateSink::OnClockRestart}} notification. Otherwise, the clock sends an {{IMFClockStateSink::OnClockStart}} notification.</p><p>The presentation clock initiates the state change by calling <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> methods. These calls are made asynchronously.</p><p>If the clock is already running, calling <strong>Start</strong> again has the effect of seeking the clock to the new <em>StartOffset</em> position.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Initial starting time, in 100-nanosecond units. At the time the <strong>Start</strong> method is called, the clock's {{IMFPresentationClock::GetTime}} method returns this value, and the clock time increments from there. If the value is {{PRESENTATION_CURRENT_POSITION}}, the clock starts from its current position. Use this value if the clock is paused and you want to restart it from the same position.</p> </dd> + + + + + <p> </p><p>Stops the presentation clock. While the clock is stopped, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} method returns zero.</p> + <p>This method is valid when the clock is running or paused.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockStop}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStop</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses the presentation clock. While the clock is paused, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} returns the time at which the clock was paused.</p> + <p>This method is valid when the clock is running. It is not valid when the clock is paused or stopped.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockPause}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockPause</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already paused.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The clock is stopped. This request is not valid when the clock is stopped.</p> </td></tr> </table><p>?</p> + + + + <p> Provides the clock times for the presentation clock. </p> + <p>This interface is implemented by presentation time sources. A presentation time source is an object that provides the clock time for the presentation clock. For example, the audio renderer is a presentation time source. The rate at which the audio renderer consumes audio samples determines the clock time. If the audio format is 44100 samples per second, the audio renderer will report that one second has passed for every 44100 audio samples it plays. In this case, the timing is provided by the sound card.</p><p>To set the presentation time source on the presentation clock, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> with a reference to the time source's <strong>{{IMFPresentationTimeSource}}</strong> interface.</p><p>A presentation time source must also implement the <strong>{{IMFClockStateSink}}</strong> interface. The presentaton clock uses this interface to notify the time source when the clock state changes.</p><p>Media Foundation provides a presentation time source that is based on the system clock. To create this object, call the <strong>{{MFCreateSystemTimeSource}}</strong> function.</p> + + + + <p> </p><p>Retrieves the underlying clock that the presentation time source uses to generate its clock times.</p> + <p>A presentation time source must support stopping, starting, pausing, and rate changes. However, in many cases the time source derives its clock times from a hardware clock or other device. The underlying clock is always running, and might not support rate changes.</p><p>Optionally, a time source can expose the underlying clock by implementing this method. The underlying clock is always running, even when the presentation time source is paused or stopped. (Therefore, the underlying clock returns the {{MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING}} flag in the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method).</p><p>The underlying clock is useful if you want to make decisions based on the clock times while the presentation clock is stopped or paused.</p><p>If the time source does not expose an underlying clock, the method returns {{MF_E_NO_CLOCK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>This time source does not expose an underlying clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + <p> Called when the presentation clock starts. </p> + <p>This method is called whe the presentation clock's <strong>{{IMFPresentationClock::Start}}</strong> method is called, with the following exception: If the clock is paused and <strong>Start</strong> is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, <strong>{{IMFClockStateSink::OnClockRestart}}</strong> is called instead of <strong>OnClockStart</strong>.</p><p>The clock notifies the presentation time source by calling the time source's <strong>OnClockStart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockStart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockStart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p><p>The value given in <em>llClockStartOffset</em> is the presentation time when the clock starts, so it is relative to the start of the presentation. Media sinks should not render any data with a presentation time earlier than <em>llClockStartOffSet</em>. If a sample straddles the offset?that is, if the offset falls between the sample's start and stop times?the sink should either trim the sample so that only data after <em>llClockStartOffset</em> is rendered, or else simply drop the sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock started, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new starting time for the clock, in 100-nanosecond units. This parameter can also equal <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, indicating the clock has started or restarted from its current position. </p> </dd> + + + + + <p> Called when the presentation clock stops. </p> + <p> When the presentation clock's <strong>{{IMFPresentationClock::Stop}}</strong> method is called, the clock notifies the presentation time source by calling the presentation time source's <strong>OnClockStop</strong> method. This call occurs synchronously within the <strong>Stop</strong> method. If the time source returns an error from <strong>OnClockStop</strong>, the presentation clock's <strong>Stop</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockStop</strong> method is called asynchronously, after the state change is completed. </p><p>If an object is already stopped, it should return <strong>{{S_OK}}</strong> from <strong>OnClockStop</strong>. It should not return an error code. </p><strong>Note</strong>??Although the header file mferror.h defines an error code named <strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong>, it should not be returned in this situation.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong></dt> </dl> </td><td> <p>Deprecated. Do not use this error code.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The system time when the clock stopped, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock pauses. </p> + <p>When the presentation clock's <strong>{{IMFPresentationClock::Pause}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockPause</strong> method. This call occurs synchronously within the <strong>Pause</strong> method. If the time source returns an error from <strong>OnClockPause</strong>, the presentation clock's <strong>Pause</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockPause</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock was paused, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock restarts from the same position while paused. </p> + <p> This method is called if the presentation clock is paused and the <strong>{{IMFPresentationClock::Start}}</strong> method is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>. </p><p> The clock notifies the presentation time source by calling the time source's <strong>OnClockRestart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockRestart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockRestart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock restarted, in 100-nanosecond units. </p> </dd> + + + + + <p>Called when the rate changes on the presentation clock. </p> + <p> When the presentation clock's <strong>{{IMFRateControl::SetRate}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockSetRate</strong> method. This call occurs synchronously within the <strong>SetRate</strong> method. If the time source returns an error from <strong>OnClockSetRate</strong>, the presentation clock's <strong>SetRate</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockSetRate</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the rate was set, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new rate, as a multiplier of the normal playback rate. </p> </dd> + + + + + <p> Describes the details of a presentation. A <em>presentation</em> is a set of related media streams that share a common presentation time. </p> + <p>Presentation descriptors are used to configure media sources and some media sinks. To get the presentation descriptor from a media source, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. To create a new presentation descriptor, call <strong>{{MFCreatePresentationDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the number of stream descriptors in the presentation. Each stream descriptor contains information about one stream in the media source. To retrieve a stream descriptor, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves a stream descriptor for a stream in the presentation. The stream descriptor contains information about the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the stream. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the stream is currently selected, or <strong>{{FALSE}}</strong> if the stream is currently deselected. If a stream is selected, the media source generates data for that stream when <strong>{{IMFMediaSource::Start}}</strong> is called. The media source will not generated data for deselected streams. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>.To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream descriptor's <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a stream in the presentation.</p> + <p> If a stream is selected, the media source will generate data for that stream. The media source will not generated data for deselected streams. To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number to select, indexed from zero. To find the number of streams in the presentation, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong>.</p> </dd> + + + + + <p> </p><p>Deselects a stream in the presentation.</p> + <p> If a stream is deselected, no data is generated for that stream. To select the stream again, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number to deselect, indexed from zero. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method. </p> </dd> + + + + + <p> </p><p>Creates a copy of this presentation descriptor.</p> + <p> This method performs a shallow copy of the presentation descriptor. The stream descriptors are not cloned. Therefore, use caution when modifying the presentation presentation descriptor or its stream descriptors. </p><p> If the original presentation descriptor is from a media source, do not modify the presentation descriptor unless the source is stopped. If you use the presentation descriptor to configure a media sink, do not modify the presentation descriptor after the sink is configured. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the new presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Gets information about one stream in a media source. </p> + <p>A presentation descriptor contains one or more stream descriptors. To get the stream descriptors from a presentation descriptor, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. To create a new stream descriptor, call <strong>{{MFCreateStreamDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an identifier for the stream.</p> + <p>The stream identifier uniquely identifies a stream within a presentation. It does not change throughout the lifetime of the stream. For example, if the presentation changes while the source is running, the index number of the stream may change, but the stream identifier does not.</p><p>In general, stream identifiers do not have a specific meaning, other than to identify the stream. Some media sources may assign stream identifiers based on meaningful values, such as packet identifiers, but this depends on the implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the stream identifier.</p> </dd> + + + + + <p> </p><p>Retrieves a media type handler for the stream. The media type handler can be used to enumerate supported media types for the stream, get the current media type, and set the media type.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Gets and sets media types on an object, such as a media source or media sink. </p> + <p>This interface is exposed by <em>media-type handlers</em>.</p><ul> <li> For media sources, get the media-type handler from the stream descriptor by calling <strong>{{IMFStreamDescriptor::GetMediaTypeHandler}}</strong>.</li> <li>For media sinks, get the media-type handler by calling <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong>.</li> </ul><p>If you are implementing a custom media source or media sink, you can create a simple media-type handler by calling <strong>{{MFCreateSimpleTypeHandler}}</strong>, or you can provide your own implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Queries whether the object supports a specified media type.</p> + <p> If the object supports the media type given in <em>pMediaType</em>, the method returns <strong>{{S_OK}}</strong>. For a media source, it means the source can generate data that conforms to that media type. For a media sink, it means the sink can receive data that conforms to that media type. If the object does not support the media type, the method fails. </p><p> The <em>ppMediaType</em> parameter is optional. If the method fails, the object might use <em>ppMediaType</em> to return a media type that the object does support, and which closely matches the one given in <em>pMediaType</em>. The method is not guaranteed to return a media type in <em>ppMediaType</em>. If no type is returned, this parameter receives a <strong>{{NULL}}</strong> reference. If the method succeeds, this parameter receives a <strong>{{NULL}}</strong> reference. If the caller sets <em>ppMediaType</em> to <strong>{{NULL}}</strong>, this parameter is ignored. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with {{SP2}} and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The object does not support this media type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to check. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the closest matching media type, or receives the value <strong>{{NULL}}</strong>. If non-<strong>{{NULL}}</strong>, the caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> </p><p>Retrieves the number of media types in the object's list of supported media types.</p> + <p> To get the supported media types, call <strong>{{IMFMediaTypeHandler::GetMediaTypeByIndex}}</strong>. </p><p> For a media source, the media type handler for each stream must contain at least one supported media type. For media sinks, the media type handler for each stream might contain zero media types. In that case, the application must provide the media type. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of media types in the list.</p> </dd> + + + + + <p> </p><p>Retrieves a media type from the object's list of supported media types.</p> + <p>Media types are returned in the approximate order of preference. The list of supported types is not guaranteed to be complete. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwIndex</em> parameter is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Zero-based index of the media type to retrieve. To get the number of media types in the list, call <strong>{{IMFMediaTypeHandler::GetMediaTypeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Sets the object's media type.</p> + <p>For media sources, setting the media type means the source will generate data that conforms to that media type. For media sinks, setting the media type means the sink can receive data that conforms to that media type.</p><p>Any implementation of this method should check whether <em>pMediaType</em> differs from the object's current media type. If the types are identical, the method should return {{S_OK}} but avoid releasing and recreating resources unnecessarily. If the types are not identical, the method should validate the new type.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> Invalid request. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the new media type.</p> </dd> + + + + + <p> </p><p>Retrieves the current media type of the object.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p> No media type is set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the major media type of the object. </p> + <p>The major type identifies what kind of data is in the stream, such as audio or video. To get the specific details of the format, call <strong>{{IMFMediaTypeHandler::GetCurrentMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a {{GUID}} that identifies the major type. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p>Provides a timer that invokes a callback at a specified time.</p> + <p>The presentation clock exposes this interface. To get a reference to the interface, call <strong>QueryInterface</strong>.</p> + + + + <p> </p><p>Sets a timer that invokes a callback at the specified time.</p> + <p>If the clock is stopped, the method returns {{MF_S_CLOCK_STOPPED}}. The callback will not be invoked until the clock is started.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The clock was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_CLOCK_STOPPED}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the clock is stopped.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFTIMER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The time at which the timer should fire, in units of the clock's frequency. The time is either absolute or relative to the current time, depending on the value of <em>dwFlags</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. The callback's <strong>Invoke</strong> method is called at the time specified in the <em>llClockTime</em> parameter.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of a cancellation object. The caller must release the interface. To cancel the timer, pass this reference to the <strong>{{IMFTimer::CancelTimer}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Cancels a timer that was set using the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + <p>Because the timer is dispatched asynchronously, the application's timer callback might get invoked even if this method succeeds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Exposed by some Media Foundation objects that must be explicitly shut down. </p> + <p>The following types of object expose <strong>{{IMFShutdown}}</strong>:</p><ul> <li> Content enablers (<strong>{{IMFContentEnabler}}</strong> interface) </li> <li> Input trust authorities (<strong>{{IMFInputTrustAuthority}}</strong> interface) </li> <li> Presentation clocks (<strong>{{IMFPresentationClock}}</strong> interface) </li> <li> Asynchronous {{MFTs}} </li> </ul><p> Any component that creates one of these objects is responsible for calling <strong>Shutdown</strong> on the object before releasing the object. Typically, applications do not create any of these objects directly, so it is not usually necessary to use this interface in an application. </p><p> To obtain a reference to this interface, call <strong>QueryInterface</strong> on the object. </p><p> If you are implementing a custom object, your object can expose this interface, but only if you can guarantee that your application will call <strong>Shutdown</strong>. </p><p>Media sources, media sinks, and <em>synchronous</em> {{MFTs}} should not implement this interface, because the Media Foundation pipeline will not call <strong>Shutdown</strong> on these objects. Asynchronous {{MFTs}} must implement this interface.</p><p> This interface is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p><p> Some Media Foundation interfaces define a <strong>Shutdown</strong> method, which serves the same purpose as <strong>{{IMFShutdown::Shutdown}}</strong> but is not directly related to it. </p> + + + + <p> Shuts down a Media Foundation object and releases all resources associated with the object. </p> + <p>The <strong>{{MFShutdownObject}}</strong> helper function is equivalent to calling this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Queries the status of an earlier call to the <strong>{{IMFShutdown::Shutdown}}</strong> method. </p> + <p>Until <strong>Shutdown</strong> is called, the <strong>GetShutdownStatus</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>If an object's <strong>Shutdown</strong> method is asynchronous, <em>pStatus</em> might receive the value <strong>{{MFSHUTDOWN_INITIATED}}</strong>. When the object is completely shut down, <em>pStatus</em> receives the value <strong>{{MFSHUTDOWN_COMPLETED}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The <strong>Shutdown</strong> method has not been called on this object. </p> </td></tr> </table><p>?</p> + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p>Enables playback of protected content by providing the application with a reference to a content enabler object.</p><p>Applications that play protected content should implement this interface.</p> + <p>A <em>content enabler</em> is an object that performs some action that is required to play a piece of protected content. For example, the action might be obtaining a {{DRM}} license. Content enablers expose the <strong>{{IMFContentEnabler}}</strong> interface, which defines a generic mechanism for content enabler. Content enablers are created inside the protected media path ({{PMP}}) process. However, they must be invoked from the application process. Therefore, the <strong>{{IMFContentProtectionManager}}</strong> interface provides a way for the {{PMP}} Media Session to notify the application.</p><p>To use this interface, do the following:</p><ol> <li> <p>Implement the interface in your application.</p> </li> <li> <p>Create an attribute store by calling <strong>{{MFCreateAttributes}}</strong>.</p> </li> <li> <p>Set the <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> attribute on the attribute store. The attribute value is a reference to your <strong>{{IMFContentProtectionManager}}</strong> implementation.</p> </li> <li> <p>Call <strong>{{MFCreatePMPMediaSession}}</strong> and pass the attribute store in the <em>pConfiguration</em> parameter.</p> </li> </ol><p>If the content requires a content enabler, the application's <strong>BeginEnableContent</strong> method is called. Usually this method called during the <strong>{{IMFMediaSession::SetTopology}}</strong> operation, before the Media Session raises the {{MESessionTopologySet}} event. The application might receive multiple <strong>BeginEnableContent</strong> calls for a single piece of content. The {{MESessionTopologySet}} event signals that the content-enabling process is complete for the current topology. The <strong>BeginEnableContent</strong> method can also be called outside of the <strong>SetTopology</strong> operation, but less commonly.</p><p>Many content enablers send machine-specific data to the network, which can have privacy implications. One of the purposes of the <strong>{{IMFContentProtectionManager}}</strong> interface is to give applications an opportunity to display information to the user and enable to user to opt in or out of the process.</p> + + + + <p>Begins an asynchronous request to perform a content enabling action.</p><p>This method requests the application to perform a specific step needed to acquire rights to the content, using a content enabler object.</p> + <p>Do not block within this callback method. Instead, perform the content enabling action asynchronously on another thread. When the operation is finished, notify the protected media path ({{PMP}}) through the <em>pCallback</em> parameter.</p><p>If you return a success code from this method, you must call <strong>Invoke</strong> on the callback. Conversely, if you return an error code from this method, you must not call <strong>Invoke</strong>. If the operation fails after the method returns a success code, use status code on the <strong>{{IMFAsyncResult}}</strong> object to report the error.</p><p>After the callback is invoked, the {{PMP}} will call the application's <strong>{{IMFContentProtectionManager::EndEnableContent}}</strong> method to complete the asynchronous call.</p><p>This method is not necessarily called every time the application plays protected content. Generally, the method will not be called if the user has a valid, up-to-date license for the content. Internally, the input trust authority ({{ITA}}) determines whether <strong>BeginEnableContent</strong> is called, based on the content provider's {{DRM}} policy. For more information, see Protected Media Path.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFActivate}}</strong> interface of a content enabler object. To create the content enabler, call <strong>{{IMFActivate::ActivateObject}}</strong> and request the <strong>{{IMFContentEnabler}}</strong> interface. The application should use the methods in <strong>{{IMFContentEnabler}}</strong> to complete the content enabling action. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFTopology}}</strong> interface of the pending topology. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. When the operation is complete, the application should call <strong>{{IMFAsyncCallback::Invoke}}</strong> on the callback. </p> </dd> + + + <dd> <p> Reserved. Currently this parameter is always <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Ends an asynchronous request to perform a content enabling action. This method is called by the protected media path ({{PMP}}) to complete an asynchronous call to <strong>{{IMFContentProtectionManager::BeginEnableContent}}</strong>.</p> + <p>When the <strong>BeginEnableContent</strong> method completes asynchronously, the application notifies the {{PMP}} by invoking the asynchronous callback. The {{PMP}} calls <strong>EndEnableContent</strong> on the application to get the result code. This method is called on the application's thread from inside the callback method. Therefore, it must not block the thread that invoked the callback.</p><p>The application must return the success or failure code of the asynchronous processing that followed the call to <strong>BeginEnableContent</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implements one step that must be performed for the user to access media content. For example, the steps might be individualization followed by license acquisition. Each of these steps would be encapsulated by a content enabler object that exposes the <strong>{{IMFContentEnabler}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the type of operation that this content enabler performs.</p> + <p>The following {{GUIDs}} are defined for the <em>pType</em> parameter.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFENABLETYPE_MF_RebootRequired}}</td><td>The user must reboot his or her computer.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateRevocationInformation}}</td><td>Update revocation information.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateUntrustedComponent}}</td><td>Update untrusted components.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV1_LicenseAcquisition}}</td><td>License acquisition for Windows Media Digital Rights Management ({{DRM}}) version 1.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_Individualization}}</td><td>Individualization.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_LicenseAcquisition}}</td><td>License acquisition for Windows Media {{DRM}} version 7 or later.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the type of operation. An application can tailor its user interface ({{UI}}) strings for known operation types. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves a {{URL}} for performing a manual content enabling action.</p> + <p>If the enabling action can be performed by navigating to a {{URL}}, this method returns the {{URL}}. If no such {{URL}} exists, the method returns a failure code.</p><p>The purpose of the {{URL}} depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of {{URL}}</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{URL}} to obtain the license. Call <strong>{{IMFContentEnabler::GetEnableData}}</strong> and submit the data to the {{URL}} as an {{HTTP}} {{POST}} request. To receive notification when the license is acquired, call <strong>{{IMFContentEnabler::MonitorEnable}}</strong>.</td></tr> <tr><td>Revocation</td><td>{{URL}} to a webpage where the user can download and install an updated component.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No {{URL}} is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the {{URL}}. The caller must release the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the number of characters returned in <em>ppwszURL</em>, including the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_URL_TRUST_STATUS}}</strong> enumeration indicating whether the {{URL}} is trusted.</p> </dd> + + + + + <p> </p><p>Retrieves the data for a manual content enabling action.</p> + <p>The purpose of the data depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of data</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{HTTP}} {{POST}} data.</td></tr> <tr><td>Revocation</td><td> <strong>{{MFRR_COMPONENTS}}</strong> structure.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the data. The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer.</p> </dd> + + + + + <p> </p><p>Queries whether the content enabler can perform all of its actions automatically.</p> + <p>If this method returns <strong>{{TRUE}}</strong> in the <em>pfAutomatic</em> parameter, call the <strong>{{IMFContentEnabler::AutomaticEnable}}</strong> method to perform the enabling action.</p><p>If this method returns <strong>{{FALSE}}</strong> in the <em>pfAutomatic</em> parameter, the application must use manual enabling. To do so, call <strong>{{IMFContentEnabler::GetEnableURL}}</strong> and <strong>{{IMFContentEnabler::GetEnableData}}</strong> to get the {{URL}} and data needed for manual enabling.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the content enabler can perform the enabing action automatically.</p> </dd> + + + + + <p> </p><p>Performs a content enabling action without any user interaction.</p> + <p>This method is asynchronous. When the operation is complete, the content enabler sends an {{MEEnablerCompleted}} event. While the operation is in progress, the content enabler might send {{MEEnablerProgress}} events.</p><p>To find out whether the content enabler supports this method, call <strong>{{IMFContentEnabler::IsAutomaticSupported}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Requests notification when the enabling action is completed.</p> + <p>If you use a manual enabling action, call this method to be notified when the operation completes. If this method returns {{S_OK}}, the content enabler will send an {{MEEnablerCompleted}} event when the operation is completed. If the application cancels the operatation before completing it, call <strong>{{IMFContentEnabler::Cancel}}</strong>.</p><p>You do not have to call <strong>MonitorEnable</strong> when you use automatic enabling by calling <strong>{{IMFContentEnabler::AutomaticEnable}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded and no action was required.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels a pending content enabling action.</p> + <p>The content enabler sends an {{MEEnablerCompleted}} event with a status code of {{E_CANCEL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Manages metadata for an object. Metadata is information that describes a media file, stream, or other content. Metadata consists of individual properties, where each property contains a descriptive name and a value. A property may be associated with a particular language.</p><p>To get this interface from a media source, use the <strong>{{IMFMetadataProvider}}</strong> interface.</p> + + + + <p> Sets the language for setting and retrieving metadata. </p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages".</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing an {{RFC}} 1766-compliant language tag.</p> </dd> + + + + + <p> Gets the current language setting.</p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages."</p><p>The <strong>{{IMFMetadata::SetLanguage}}</strong> and <strong>{{IMFMetadata::GetProperty}}</strong> methods set and get metadata for the current language setting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The metadata provider does not support multiple languages.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> No language was set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to a null-terminated string containing an {{RFC}} 1766-compliant language tag. The caller must release the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p> Gets a list of the languages in which metadata is available.</p> + <p> For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages". </p><p> To set the current language, call <strong>{{IMFMetadata::SetLanguage}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a <strong>{{PROPVARIANT}}</strong> that receives the list of languages. The list is returned as an array of null-terminated wide-character strings. Each string in the array is an {{RFC}} 1766-compliant language tag. </p> <p>The returned <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The list might be empty, if no language tags are present. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Sets the value of a metadata property. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the value of the property. For multivalued properties, use a <strong>{{PROPVARIANT}}</strong> with a {{VT_VECTOR}} type.</p> </dd> + + + + + <p> Gets the value of a metadata property.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The requested property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to a null-terminated string that containings the name of the property. To get the list of property names, call <strong>{{IMFMetadata::GetAllPropertyNames}}</strong>.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value of the property. The <strong>{{PROPVARIANT}}</strong> type depends on the property. For multivalued properties, the <strong>{{PROPVARIANT}}</strong> is a <strong>{{VT_VECTOR}}</strong> type. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Deletes a metadata property.</p> + <p>For a media source, deleting a property from the metadata collection does not change the original content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + + + <p> Gets a list of all the metadata property names on this object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. If no properties are available, the <strong>{{PROPVARIANT}}</strong> type is {{VT_EMPTY}}. Otherwise, the <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Gets metadata from a media source or other object.</p><p>If a media source supports this interface, it must expose the interface as a service. To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_METADATA_PROVIDER_SERVICE}}</strong>. Other types of object can expose this interface through <strong>QueryInterface</strong>.</p><p>Use this interface to get a reference to the <strong>{{IMFMetadata}}</strong> interface.</p> + + + + <p> Gets a collection of metadata, either for an entire presentation, or for one stream in the presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No metadata is available for the requested stream or presentation.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. </p> </dd> + + + <dd> <p> If this parameter is zero, the method retrieves metadata that applies to the entire presentation. Otherwise, this <em></em> parameter specifies a stream identifier, and the method retrieves metadata for that stream. To get the stream identifier for a stream, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMetadata}}</strong> interface. Use this interface to access the metadata. The caller must release the interface.</p> </dd> + + + + + <p>Queries the range of playback rates that are supported, including reverse playback.</p><p>To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}.</p> + <p>Applications can use this interface to discover the fastest and slowest playback rates that are possible, and to query whether a given playback rate is supported. Applications obtain this interface from the Media Session. Internally, the Media Session queries the objects in the pipeline. For more information, see How to Determine Supported Rates.</p><p>To get the current playback rate and to change the playback rate, use the <strong>{{IMFRateControl}}</strong> interface.</p><p>Playback rates are expressed as a ratio the normal playback rate. Reverse playback is expressed as a negative rate. Playback is either <em>thinned</em> or <em>non-thinned</em>. In thinned playback, some of the source data is skipped (typically delta frames). In non-thinned playback, all of the source data is rendered.</p><p>You might need to implement this interface if you are writing a pipeline object (media source, transform, or media sink). For more information, see Implementing Rate Control.</p> + + + + <p> </p><p>Retrieves the slowest playback rate supported by the object.</p> + <p>The value returned in <em>plfRate</em> represents a lower bound. Playback at this rate is not guaranteed. Call <strong>{{IMFRateSupport::IsRateSupported}}</strong> to check whether the boundary rate is supported. For example, a component that supports arbitrarily slow rates will return zero in <em>pflRate</em>, and applications should call <strong>IsRateSupported</strong> separately to determine whether the component supports rate 0.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the slowest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the slowest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the slowest thinned playback rate. Otherwise, the method retrieves the slowest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the slowest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Gets the fastest playback rate supported by the object.</p> + <p>For some formats (such as {{ASF}}), thinning means dropping all frames that are not I-frames. If a component produces stream data, such as a media source or a demultiplexer, it should pay attention to the <em>fThin</em> parameter and return {{MF_E_THINNING_UNSUPPORTED}} if it cannot thin the stream.</p><p>If the component processes or receives a stream (most transforms or media sinks), it may ignore this parameter if it does not care whether the stream is thinned. In the Media Session's implementation of rate support, if the transforms do not explicitly support reverse playback, the Media Session will attempt to playback in reverse with thinning but not without thinning. Therefore, most applications will set <em>fThin</em> to <strong>{{TRUE}}</strong> when using the Media Session for reverse playback.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the fastest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the fastest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the fastest thinned playback rate. Otherwise, the method retrieves the fastest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the fastest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Queries whether the object supports a specified playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The object supports the specified rate.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified rate.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method queries whether the object supports the playback rate with thinning. Otherwise, the method queries whether the object supports the playback rate without thinning. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>The playback rate to query.</p> </dd> + + + <dd> <p>If the object does not support the playback rate given in <em>flRate</em>, this parameter receives the closest supported playback rate. If the method returns {{S_OK}}, this parameter receives the value given in <em>flRate</em>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets or sets the playback rate. </p> + <p>Objects can expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}. The Media Session supports this interface. Media sources and transforms support this interface if they support rate changes. Media sinks do not need to support this interface. Media sinks are notified of rate changes through the <strong>{{IMFClockStateSink::OnClockSetRate}}</strong> method.</p><p>For more information, see About Rate Control.</p><p>To discover the playback rates that an object supports, use the <strong>{{IMFRateSupport}}</strong> interface</p> + + + + <p> Sets the playback rate. </p> + <p>The Media Session prevents some transitions between rate boundaries, depending on the current playback state:</p><table> <tr><th>Playback State</th><th>Forward/Reverse</th><th>Forward/Zero</th><th>Reverse/Zero</th></tr> <tr><td>Running</td><td>No</td><td>No</td><td>No</td></tr> <tr><td>Paused</td><td>No</td><td>Yes</td><td>No</td></tr> <tr><td>Stopped</td><td>Yes</td><td>Yes</td><td>Yes</td></tr> </table><p>?</p><p>If the transition is not supported, the method returns <strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong>.</p><p>When a media source completes a call to <strong>SetRate</strong>, it sends the {{MESourceRateChanged}} event. Other pipeline components do not send this event.</p><p>If a media source switches between thinned and non-thinned playback, the streams send an {{MEStreamThinMode}} event to indicate the transition. Events from the media source are not synchronized with events from the media streams. After you receive the {{MESourceRateChanged}} event, you can still receive samples that were queued before the stream switched to thinned or non-thinned mode. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p><p>When the Media Session completes a call to <strong>SetRate</strong>, it sends the {{MESessionRateChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support reverse playback. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support thinning. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p> The object does not support the requested playback rate. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong></dt> </dl> </td><td> <p> The object cannot change to the new rate while in the running state. </p> </td></tr> </table><p>?</p> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the media streams are thinned. Otherwise, the stream is not thinned. For media sources and demultiplexers, the object must thin the streams when this parameter is <strong>{{TRUE}}</strong>. For downstream transforms, such as decoders and multiplexers, this parameter is informative; it notifies the object that the input streams are thinned. For information, see About Rate Control. </p> </dd> + + + <dd> <p> The requested playback rate. Postive values indicate forward playback, negative values indicate reverse playback, and zero indicates scrubbing (the source delivers a single frame). </p> </dd> + + + + + + + + <p> </p><p>Gets the current playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the stream is currently being thinned. If the object does not support thinning, this parameter always receives the value <strong>{{FALSE}}</strong>. This parameter can be <strong>{{NULL}}</strong>. For more information, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the current playback rate.</p> </dd> + + + + + <p>Converts between Society of Motion Picture and Television Engineers ({{SMPTE}}) time codes and 100-nanosecond time units.</p> + <p>If an object supports this interface, it must expose the interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_TIMECODE_SERVICE}}</strong>.</p><p>The Advanced Streaming Format ({{ASF}}) media source exposes this interface.</p> + + + + <p>Starts an asynchronous call to convert Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertTimecodeToHNS}}</strong> to complete the asynchronous request.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>void CreateTimeCode( {{DWORD}} dwFrames, {{DWORD}} dwSeconds, {{DWORD}} dwMinutes, {{DWORD}} dwHours, {{DWORD}} dwRange, {{PROPVARIANT}} *pvar ) +{ {{ULONGLONG}} ullTimecode = (({{ULONGLONG}})dwRange) &lt;&lt; 32; ullTimecode += dwFrames % 10; ullTimecode += (( ({{ULONGLONG}})dwFrames ) / 10) &lt;&lt; 4; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) % 10) &lt;&lt; 8; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) / 10) &lt;&lt; 12; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) % 10) &lt;&lt; 16; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) / 10) &lt;&lt; 20; ullTimecode += (( ({{ULONGLONG}})dwHours ) % 10) &lt;&lt; 24; ullTimecode += (( ({{ULONGLONG}})dwHours ) / 10) &lt;&lt; 28; pvar-&gt;vt = {{VT_I8}}; pvar-&gt;hVal.QuadPart = ({{LONGLONG}})ullTimecode; +} +</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pPropVarTimecode</em> is not <strong>{{VT_I8}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Time in {{SMPTE}} time code to convert. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to <strong>{{VT_I8}}</strong>. The <strong>hVal.QuadPart</strong> member contains the time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>{{PPointer}} to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertTimecodeToHNS}}</strong> method completes asynchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives the converted time.</p> </dd> + + + + + <p>Starts an asynchronous call to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertHNSToTimecode}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The time to convert, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertHNSToTimecode}}</strong> method completes asynchronously.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>{{HRESULT}} ParseTimeCode( const {{PROPVARIANT}}&amp; var, {{DWORD}} *pdwRange, {{DWORD}} *pdwFrames, {{DWORD}} *pdwSeconds, {{DWORD}} *pdwMinutes, {{DWORD}} *pdwHours ) +{ if (var.vt != {{VT_I8}}) { return {{E_INVALIDARG}}; } {{ULONGLONG}} ullTimeCode = ({{ULONGLONG}})var.hVal.QuadPart; {{DWORD}} dwTimecode = ({{DWORD}})(ullTimeCode &amp; 0xFFFFFFFF); *pdwRange = ({{DWORD}})(ullTimeCode &gt;&gt; 32); *pdwFrames = dwTimecode &amp; 0x0000000F; *pdwFrames += (( dwTimecode &amp; 0x000000F0) &gt;&gt; 4 ) * 10; *pdwSeconds = ( dwTimecode &amp; 0x00000F00) &gt;&gt; 8; *pdwSeconds += (( dwTimecode &amp; 0x0000F000) &gt;&gt; 12 ) * 10; *pdwMinutes = ( dwTimecode &amp; 0x000F0000) &gt;&gt; 16; *pdwMinutes += (( dwTimecode &amp; 0x00F00000) &gt;&gt; 20 ) * 10; *pdwHours = ( dwTimecode &amp; 0x0F000000) &gt;&gt; 24; *pdwHours += (( dwTimecode &amp; 0xF0000000) &gt;&gt; 28 ) * 10; return {{S_OK}}; +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the converted time. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to {{VT_I8}}. The <strong>hVal.QuadPart</strong> member contains the converted time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>Controls the master volume level of the audio session associated with the streaming audio renderer ({{SAR}}) and the audio capture source.</p><p>The {{SAR}} and the audio capture source expose this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. For the {{SAR}}, use the service identifier {{MR_POLICY_VOLUME_SERVICE}}. For the audio capture source, use the service identifier {{MR_CAPTURE_POLICY_VOLUME_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or the audio capture source, or call it on the Media Session.</p> + <p>To control the volume levels of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface. The <strong>{{IMFAudioStreamVolume}}</strong> interface is supported by the {{SAR}} only.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> <p>The master volume level of the audio session.</p> </li> <li> <p>The volume level of the channel.</p> </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuaton for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels. To change the volume level of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p> Attenuation (dB) = 20 * log10(<em>Level</em>) </p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Sets the master volume level.</p> + <p>Events outside of the application can change the master volume level. For example, the user can change the volume from the system volume-control program (SndVol). If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Retrieves the master volume level.</p> + <p>If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Mutes or unmutes the audio.</p> + <p>This method does not change the volume level returned by the <strong>{{IMFSimpleAudioVolume::GetMasterVolume}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio.</p> </dd> + + + + + <p> </p><p>Queries whether the audio is muted.</p> + <p>Calling <strong>{{IMFSimpleAudioVolume::SetMasterVolume}}</strong> to set the volume does not change whether the audio is muted.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the audio is muted; otherwise, the audio is not muted.</p> </dd> + + + + + <p>Controls the volume levels of individual audio channels.</p><p>The streaming audio renderer ({{SAR}}) exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MR_STREAM_VOLUME_SERVICE}}</strong>. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + <p>If your application does not require channel-level volume control, you can use the <strong>{{IMFSimpleAudioVolume}}</strong> interface to control the master volume level of the audio session.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> The master volume level of the audio session. </li> <li> The volume level of the channel. </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuation for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p>Attenuation (dB) = 20 * log10(<em>Level</em>)</p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Retrieves the number of channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of channels in the audio stream.</p> </dd> + + + + + <p> </p><p>Sets the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the volume level for the channel.</p> </dd> + + + + + <p> </p><p>Sets the individual volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The array specifies the volume levels for all of the channels. Before calling the method, set each element of the array to the desired volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The method fills the array with the volume level for each channel in the stream.</p> </dd> + + + + + <p>Configures the audio session that is associated with the streaming audio renderer ({{SAR}}). Use this interface to change how the audio session appears in the Windows volume control.</p><p>The {{SAR}} exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MR_AUDIO_POLICY_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + + + + <p> </p><p>Assigns the audio session to a group of sessions.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{GUID}}</strong> that identifies the session group. Groups are application-defined. To create a new session group, assign a new {{GUID}}.</p> </dd> + + + + + <p> </p><p>Retrieves the group of sessions to which this audio session belongs.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the session group.</p> </dd> + + + + + <p> </p><p>Sets the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string that contains the display name.</p> </dd> + + + + + <p> </p><p>Retrieves the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the display name string. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Sets the icon resource for the audio session. The Windows volume control displays this icon. </p> + <p>The icon path has the format "path,index" or "path,-id", where <em>path</em> is the fully qualified path to a {{DLL}}, executable file, or icon file; <em>index</em> is the zero-based index of the icon within the file; and <em>id</em> is a resource identifier. Note that resource identifiers are preceded by a minus sign (-) to distinguish them from indexes. The path can contain environment variables, such as "%windir%". For more information, see <strong>{{IAudioSessionControl::SetIconPath}}</strong> in the Windows {{SDK}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A wide-character string that specifies the icon. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the icon resource for the audio session. The Windows volume control displays this icon.</p> + <p>If the application did not set an icon path, the method returns an empty string ("").</p><p>For more information, see <strong>{{IAudioSessionControl::GetIconPath}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a wide-character string that specifies a shell resource. The format of the string is described in the topic <strong>{{IMFAudioPolicy::SetIconPath}}</strong>. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Callback interface to get media data from the sample-grabber sink. </p> + <p>The sample-grabber sink enables an application to get data from the Media Foundation pipeline without implementing a custom media sink. To use the sample-grabber sink, the application must perform the following steps:</p><ol> <li> <p>Implement the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> </li> <li> <p>Call <strong>{{MFCreateSampleGrabberSinkActivate}}</strong>, passing in the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface reference. This function returns an <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Create a topology that includes an output node with the sink's <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Pass this topology to the Media Session.</p> </li> </ol><p>During playback, the sample-grabber sink calls methods on the application's callback.</p><p>You cannot use the sample-grabber sink to get protected content.</p> + + + + <p> </p><p>Called when the presentation clock is set on the sample-grabber sink.</p> + <p>This method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p> A reference to a buffer that contains the sample data. </p> </dd> + + + <dd> <p> Size of the <em>pSampleBuffer</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink is shut down.</p> + <p>This method is called when the sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method is called.</p><p>The <strong>OnShutdown</strong> method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> + <p>This callback interface is used with the sample-grabber sink. It extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface by adding the <strong>OnProcessSampleEx</strong> method, which supersedes the <strong>{{IMFSampleGrabberSinkCallback::OnProcessSample}}</strong> method.</p><p> The <strong>OnProcessSampleEx</strong> method adds a parameter that contains the attributes for the media sample. You can use the attributes to get information about the sample, such as field dominance and telecine flags. </p><p>To use this interface, do the following: </p><ol> <li>Implement a callback object that exposes the interface.</li> <li>Create the sample-grabber sink by calling the <strong>{{MFCreateSampleGrabberSinkActivate}}</strong> function. Pass the callback reference in the <em>pIMFSampleGrabberSinkCallback</em> parameter.</li> <li>The sample-grabber sink will call <strong>QueryInterface</strong> on the callback object.</li> <li>If the callback object exposes the <strong>{{IMFSampleGrabberSinkCallback2}}</strong> interface, the sample-grabber sink will use the <strong>OnProcessSampleEx</strong> callback method. Otherwise, the sample-grabber sink will use the older <strong>OnProcessSample</strong> callback method.</li> </ol> + + + + <p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type {{GUID}} that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>Sample flags. The sample-grabber sink gets the value of this parameter by calling the <strong>{{IMFSample::GetSampleFlags}}</strong> method of the media sample.</p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong></p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the sample data.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pSampleBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. Use this interface to get the attributes for this sample (if any). For a list of sample attributes, see Sample Attributes.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Registers the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Each source node in the topology defines one branch of the topology. The branch includes every topology node that receives data from that node. An application can assign each branch of a topology its own work queue and then associate those work queues with {{MMCSS}} tasks. </p><p>To use this method, perform the following steps.</p><ol> <li>Create the topology.</li> <li>Set the following attributes on the source nodes in the topology.<ul> <li> <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong>. Specifies an identifier for the work queue. The Media Session will allocate a new work queue.</li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_CLASS}}</strong>. Specifies the {{MMCSS}} class. </li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_TASKID}}</strong>. Specifies the {{MMCSS}} task identifier (optional). If this attribute is not set, {{MMCSS}} assigns a new task identifier. </li> </ul> </li> <li>Queue the topology by calling <strong>{{IMFMediaSession::SetTopology}}</strong>.</li> <li>Wait for the {{MESessionTopologyStatus}} event with the <strong>{{MF_TOPOSTATUS_READY}}</strong> status.</li> <li>Call <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong>. This method registers all of the topology work queues with {{MMCSS}}.</li> </ol><p>The <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong> method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. Within the callback method, call <strong>{{IMFWorkQueueServices::EndRegisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request. After this operation completes, the Media Session automatically registers the work queues for every new topology that is queued on the Media Session. The application does not need to call the method again for new topologies.</p><p>To unregister the topology work queues from {{MMCSS}}, call <strong>{{IMFWorkQueueServices::BeginUnregisterTopologyWorkQueuesWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unregisters the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>There is no work queue with the specified identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p> Associates a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task. </p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndRegisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The platform work queue to register with {{MMCSS}}. See Work Queue Identifiers. To register all of the standard work queues to the same {{MMCSS}} task, set this parameter to <strong>{{MFASYNC_CALLBACK_QUEUE_ALL}}</strong>.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task to be performed. </p> </dd> + + + <dd> <p> The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to register with {{MMCSS}}. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the pwszClass buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Extends the <strong>{{IMFWorkQueueServices}}</strong> interface.</p> + <p>This interface allows applications to control +both platform and topology work queues.</p><p>The <strong>{{IMFWorkQueueServices}}</strong> can be obtained from the session by querying for the <strong>{{MF_WORKQUEUE_SERVICES}}</strong> service.</p> + + + + <p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) string associated with the given topology work queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of the topology work queue. </p> </dd> + + + <dd> <p>Pointer to the buffer the work queue's {{MMCSS}} task id will be copied to.</p> </dd> + + + + + <p>Registers a platform work queue with Multimedia Class Scheduler Service ({{MMCSS}}) using the specified class and task id.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of one of the standard platform work queues.</p> </dd> + + + <dd> <p>The {{MMCSS}} class which the work queue should be registered with.</p> </dd> + + + <dd> <p> The task id which the work queue should be registered with. If <em>dwTaskId</em> is 0, a new {{MMCSS}} bucket will be created.</p> </dd> + + + <dd> <p>The priority.</p> </dd> + + + <dd> <p>Standard callback used for async operations in Media Foundation.</p> </dd> + + + <dd> <p>Standard state used for async operations in Media Foundation.</p> </dd> + + + + + <p>Gets the priority of the Multimedia Class Scheduler Service ({{MMCSS}}) priority associated with the specified platform work queue.</p> + <p>Pointer to a buffer allocated by the caller that the work queue's {{MMCSS}} task id will be copied to.</p> + + + <dd> <p>Topology work queue id for which the info will be returned.</p> </dd> + + + <dd></dd> + + + + + <p> Adjusts playback quality. This interface is exposed by the quality manager. </p> + <p>Media Foundation provides a default quality manager that is tuned for playback. Applications can provide a custom quality manager to the Media Session by setting the <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> attribute when creating the Media Session.</p> + + + + <p> </p><p>Called when the Media Session is about to start playing a new topology.</p> + <p>In a typical quality manager this method does the following:</p><ol> <li> <p>Enumerates the nodes in the topology.</p> </li> <li> <p>Calls <strong>{{IMFTopologyNode::GetObject}}</strong> to get the node's underlying object.</p> </li> <li> <p>Queries for the <strong>{{IMFQualityAdvise}}</strong> interface.</p> </li> </ol><p>The quality manager can then use the <strong>{{IMFQualityAdvise}}</strong> references to adjust audio-video quality as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the new topology. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the previous topology.</p> </dd> + + + + + <p> </p><p>Called when the Media Session selects a presentation clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the presentation clock.</p> </dd> + + + + + <p> </p><p>Called when the media processor is about to deliver an input sample to a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the input stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample.</p> </dd> + + + + + <p> </p><p>Called after the media processor gets an output sample from a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the output stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the output sample.</p> </dd> + + + + + <p> </p><p>Called when a pipeline component sends an {{MEQualityNotify}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Called when the Media Session is shutting down.</p> + <p>The quality manager should release all references to the Media Session when this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the quality manager to adjust the audio or video quality of a component in the pipeline.</p><p>This interface is exposed by pipeline components that can adjust their quality. Typically it is exposed by decoders and stream sinks. For example, the enhanced video renderer ({{EVR}}) implements this interface. However, media sources can also implement this interface.</p><p>To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_QUALITY_SERVICES}}. For all other pipeline objects (transforms and media sinks), call <strong>QueryInterface</strong>.</p> + <p>The quality manager typically obtains this interface when the quality manager's <strong>{{IMFQualityManager::NotifyTopology}}</strong> method is called.</p> + + + + <p> </p><p>Sets the drop mode. In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode.</p> + <p>If this method is called on a media source, the media source might switch between thinned and non-thinned output. If that occurs, the affected streams will send an {{MEStreamThinMode}} event to indicate the transition. The operation is asynchronous; after <strong>SetDropMode</strong> returns, you might receive samples that were queued before the transition. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_DROP_MODES}}</strong></dt> </dl> </td><td> <p>The component does not support the specified mode or any higher modes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the quality level. The quality level determines how the component consumes or produces samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_QUALITY_LEVELS}}</strong></dt> </dl> </td><td> <p>The component does not support the specified quality level or any levels below it.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current drop mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current quality level.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Drops samples over a specified interval of time.</p> + <p>Ideally the quality manager can prevent a renderer from falling behind. But if this does occur, then simply lowering quality does not guarantee the renderer will ever catch up. As a result, audio and video might fall out of sync. To correct this problem, the quality manager can call <strong>DropTime</strong> to request that the renderer drop samples quickly over a specified time interval. After that period, the renderer stops dropping samples.</p><p>This method is primarily intended for the video renderer. Dropped audio samples cause audio glitching, which is not desirable.</p><p>If a component does not support this method, it should return {{MF_E_DROPTIME_NOT_SUPPORTED}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DROPTIME_NOT_SUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Amount of time to drop, in 100-nanosecond units. This value is always absolute. If the method is called multiple times, do not add the times from previous calls.</p> </dd> + + + + + <p>Enables a pipeline object to adjust its own audio or video quality, in response to quality messages.</p> + <p>This interface enables a pipeline object to respond to quality messages from the media sink. Currently, it is supported only for video decoders.</p><p>If a video decoder exposes <strong>{{IMFQualityAdvise}}</strong> but not <strong>{{IMFQualityAdvise2}}</strong>, the quality manager controls quality adjustments for the decoder. In this case, the quality manager responds to {{MEQualityNotify}} events from the Enhanced Video Renderer ({{EVR}}) by calling <strong>{{IMFQualityAdvise}}</strong> methods on the decoder.</p><p>If the decoder exposes <strong>{{IMFQualityAdvise2}}</strong>, the quality manager forwards the {{MEQualityNotify}} events to the decoder and does not adjust the decoder's quality settings. The decoder should respond to these events by adjusting its own quality settings internally.</p><p>The preceding remarks apply to the default implementation of the quality manager; custom quality managers can implement other behaviors.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Forwards an {{MEQualityNotify}} event from the media sink.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries an object for the number of <em>quality modes</em> it supports. Quality modes are used to adjust the trade-off between quality and speed when rendering audio or video.</p><p>The default presenter for the <em>enhanced video renderer</em> ({{EVR}}) implements this interface. The {{EVR}} uses the interface to respond to quality messages from the quality manager.</p> + + + + <p>Gets the maximum <em>drop mode</em>. A higher drop mode means that the object will, if needed, drop samples more aggressively to match the presentation clock.</p> + <p>To get the current drop mode, call the <strong>{{IMFQualityAdvise::GetDropMode}}</strong> method. To set the drop mode, call the <strong>{{IMFQualityAdvise::SetDropMode}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the maximum drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the minimum quality level that is supported by the component.</p> + <p>To get the current quality level, call the <strong>{{IMFQualityAdvise::GetQualityLevel}}</strong> method. To set the quality level, call the <strong>{{IMFQualityAdvise::SetQualityLevel}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the minimum quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}).</p><p>Any pipeline object that creates worker threads should implement this interface.</p> + <p>Media Foundation provides a mechanism for applications to associate branches in the topology with {{MMCSS}} tasks. A topology branch is defined by a source node in the topology and all of the nodes downstream from it. An application registers a topology branch with {{MMCSS}} by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node and then calling <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong>.</p><p>When the application registers a topology branch with {{MMCSS}}, the Media Session queries every pipeline object in that branch for the <strong>{{IMFRealTimeClient}}</strong> interface. If the object exposes the interface, the Media Session calls <strong>RegisterThreads</strong>.</p><p>When the application unregisters the topology branch, the Media Session calls <strong>UnregisterThreads</strong>.</p><p>If a pipeline object creates its own worker threads but does not implement this interface, it can cause priority inversions in the Media Foundation pipeline, because high-priority processing threads might be blocked while waiting for the component to process data on a thread with lower priority.</p><p>Pipeline objects that do not create worker threads do not need to implement this interface.</p><p>In Windows?8, this interface is extended with <strong>{{IMFRealTimeClientEx}}</strong>.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p> The object's worker threads should register themselves with {{MMCSS}} by calling <strong>AvSetMmThreadCharacteristics</strong>, using the task name and identifier specified in this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{MMCSS}} task identifier. </p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + + + <p> Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>The object's worker threads should unregister themselves from {{MMCSS}} by calling <strong>AvRevertMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue for the topology branch that contains this object.</p> + <p> An application can register a branch of the topology to use a private work queue. The Media Session notifies any pipeline object that supports <strong>{{IMFRealTimeClient}}</strong> by calling <strong>SetWorkQueue</strong> with the application's work queue identifier. </p><p>When the application unregisters the topology branch, the Media Session calls <strong>SetWorkQueue</strong> again with the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue, or the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. See Remarks. </p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}). </p><p>This interface is a replacement for the <strong>{{IMFRealTimeClient}}</strong> interface.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>If the object does not create worker threads, the method should simply return {{S_OK}} and take no further action. </p><p>Otherwise, if the value of <code>*pdwTaskIndex</code> is zero on input, the object should perform the following steps:</p><ol> <li>A single worker thread calls <strong>AvSetMmThreadCharacteristics</strong> to create a new {{MMCSS}} task identifier. Store this value.</li> <li>Any additional worker threads call <strong>AvSetMmThreadCharacteristics</strong> using the new task identifier.</li> <li>Return the new task identifier to the caller, by setting <code>*pdwTaskIndex</code> equal to the task identifier.</li> </ol><p>If the value of <code>*pdwTaskIndex</code> is nonzero on input, the parameter contains an existing {{MMCSS}} task identifer. In that case, all worker threads of the object should register themselves for that task by calling <strong>AvSetMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MMCSS}} task identifier. If the value is zero on input, the object should create a new {{MCCSS}} task group. See Remarks.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread.</p> </dd> + + + + + <p>Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue that this object should use for asynchronous work items. </p> + <p>The object should use the values of <em>dwMultithreadedWorkQueueId</em> and <em>lWorkItemBasePriority</em> when it queues new work items. Use the <strong>{{MFPutWorkItem2}}</strong> or <strong>{{MFPutWorkItemEx2}}</strong> function to queue the work item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The work queue identifier.</p> </dd> + + + <dd> <p>The base priority for work items.</p> </dd> + + + + + <p>Implemented by the Sequencer Source. The sequencer source enables an application to create a sequence of topologies. To create the sequencer source, call <strong>{{MFCreateSequencerSource}}</strong>. For step-by-step instructions about how to create a playlist, see How to Create a Playlist.</p> + + + + <p> </p><p>Adds a topology to the end of the queue.</p> + <p>The sequencer plays topologies in the order they are queued. You can queue as many topologies as you want to preroll.</p><p>The application must indicate to the sequencer when it has queued the last topology on the Media Session. To specify the last topology, set the SequencerTopologyFlags_Last flag in the <em>dwFlags</em> parameter when you append the topology. The sequencer uses this information to end playback with the pipeline. Otherwise, the sequencer waits indefinitely for a new topology to be queued.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The source topology node is missing one of the following attributes:</p> <ul> <li> <p> <strong>{{MF_TOPONODE_STREAM_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_PRESENTATION_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_SOURCE}}</strong> </p> </li> </ul> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology. This reference cannot be <strong>{{NULL}}</strong>. If an application passes <strong>{{NULL}}</strong>, the call fails with an {{E_INVALIDARG}} error code.</p> </dd> + + + <dd> <p>A combination of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier for this topology.</p> </dd> + + + + + <p> </p><p>Deletes a topology from the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The sequencer element identifier of the topology to delete.</p> </dd> + + + + + <p> </p><p>Maps a presentation descriptor to its associated sequencer element identifier and the topology it represents.</p> + <p>The topology returned in <em>ppTopology</em> is the original topology that the application specified in <strong>AppendTopology</strong>. The source nodes in this topology contain references to the native sources. Do not queue this topology on the Media Session. Instead, call <strong>{{IMFMediaSourceTopologyProvider::GetMediaSourceTopology}}</strong> to get the sequencer source's modified topology. The source nodes in the modified topology contain references to the sequencer source, rather than the native sources.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The presentation descriptor is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_SEQUENCER_CONTEXT_CANCELED}}</strong></dt> </dl> </td><td> <p>This segment was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier. This value is assigned by the sequencer source when the application calls <strong>{{IMFSequencerSource::AppendTopology}}</strong>. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the original topology that the application added to the sequencer source. The caller must release the interface. This parameter can receive the value <strong>{{NULL}}</strong> if the sequencer source has switched to the next presentation. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Updates a topology in the queue.</p> + <p>This method is asynchronous. When the operation is completed, the sequencer source sends an {{MESequencerSourceTopologyUpdated}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The sequencer source has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the updated topology object.</p> </dd> + + + + + <p> </p><p>Updates the flags for a topology in the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + + + <p>Enables an application to get a topology from the sequencer source. This interface is exposed by the sequencer source object.</p> + + + + <p> </p><p>Returns a topology for a media source that builds an internal topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. For example, a <strong>{{NULL}}</strong> input parameter, or the presentation descriptor is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get this reference, either call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> on the media source, or get the reference from the {{MENewPresentation}} event.</p> </dd> + + + <dd> <p>Receives a reference to the topology's <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p>Updates the attributes of one or more nodes in the Media Session's current topology.</p><p>The Media Session exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE}}.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute.</p> + + + + <p> </p><p>Updates the attributes of one or more nodes in the current topology.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute. The method ignores any other attributes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The number of elements in the <em>pUpdates</em> array.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MFTOPONODE_ATTRIBUTE_UPDATE}}</strong> structures. Each element of the array updates one attribute on a node.</p> </dd> + + + + + <p> Controls how a byte stream buffers data from a network. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + <p> If a byte stream implements this interface, a media source can use it to control how the byte stream buffers data. This interface is designed for byte streams that read data from a network. </p><p> A byte stream that implements this interface should also implement the <strong>{{IMFMediaEventGenerator}}</strong> interface. When the byte stream starts buffering, it sends an {{MEBufferingStarted}} event. When it stops buffering, it sends an {{MEBufferingStopped}} event. </p><p> The byte stream must send a matching {{MEBufferingStopped}} event for every {{MEBufferingStarted}} event. The byte stream must not send {{MEBufferingStarted}} events unless the media source has enabled buffering by calling <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>. </p><p> After the byte stream sends an {{MEBufferingStarted}} event, it should send {{MEBufferingStopped}} if any of the following occur: </p><ul> <li> The byte stream finishes buffering data. </li> <li> The byte stream reaches the end of the stream. </li> <li> The media source calls <strong>EnableBuffering</strong> with the value <strong>{{FALSE}}</strong>. </li> <li> The media source calls <strong>StopBuffering</strong>. </li> </ul><p> The byte stream should not send any more buffering events after it reaches the end of the file. </p><p> If buffering is disabled, the byte stream does not send any buffering events. Internally, however, it might still buffer data while it waits for I/O requests to complete. Therefore, <strong>{{IMFByteStream}}</strong> methods might take an indefinite length of time to complete. </p><p> If the byte stream is buffering data internally and the media source calls <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>, the byte stream can send {{MEBufferingStarted}} immediately. </p><p> After the presentation has started, the media source should forward and {{MEBufferingStarted}} and {{MEBufferingStopped}} events that it receives while started. The Media Session will pause the presentation clock while buffering is progress and restart the presentation clock when buffering completes. The media source should only forward these events while the presentation is playing. The purpose of sending these events to the Media Session is to pause the presentation time while the source buffers data. </p> + + + + <p> </p><p>Sets the buffering parameters.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFBYTESTREAM_BUFFERING_PARAMS}}</strong> structure that contains the buffering parameters. The byte stream uses this information to calculate how much data to buffer from the network.</p> </dd> + + + + + <p> </p><p>Enables or disables buffering.</p> + <p>Before calling this method, call <strong>{{IMFByteStreamBuffering::SetBufferingParams}}</strong> to set the buffering parameters on the byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether the byte stream buffers data. If <strong>{{TRUE}}</strong>, buffering is enabled. If <strong>{{FALSE}}</strong>, buffering is disabled.</p> </dd> + + + + + <p> </p><p>Stops any buffering that is in progress.</p> + <p>If the byte stream is currently buffering data, it stops and sends an {{MEBufferingStopped}} event. If the byte stream is not currently buffering, this method has no effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The byte stream successfully stopped buffering.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No buffering was in progress.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how a network byte stream transfers data to a local cache. Optionally, this interface is exposed by byte streams that read data from a network, for example, through {{HTTP}}. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Stops the background transfer of data to the local cache.</p> + <p>The byte stream resumes transferring data to the cache if the application does one of the following:</p><ul> <li>Reads data from the byte stream.</li> <li>Calls the byte stream's <strong>{{IMFByteStreamBuffering::EnableBuffering}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks a byte stream by time position.</p> + <p>A byte stream can implement this interface if it supports time-based seeking. For example, a byte stream that reads data from a server might implement the interface. Typically, a local file-based byte stream would not implement it.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Queries whether the byte stream supports time-based seeking.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the byte stream supports time-based seeking, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Seeks to a new position in the byte stream.</p> + <p>If the byte stream reads from a server, it might cache the seek request until the next read request. Therefore, the byte stream might not send a request to the server immediately.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new position, in 100-nanosecond units.</p> </dd> + + + + + <p>Gets the result of a time-based seek.</p> + <p>This method returns the server response from a previous time-based seek. </p><strong>Note</strong>??This method normally cannot be invoked until some data is read from the byte stream, because the <strong>{{IMFByteStreamTimeSeek::TimeSeek}}</strong> method does not send a server request immediately.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The byte stream does not support time-based seeking, or no data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the new position after the seek, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the stop time, in 100-nanosecond units. If the stop time is unknown, the value is zero.</p> </dd> + + + <dd> <p>Receives the total duration of the file, in 100-nanosecond units. If the duration is unknown, the value is ?1.</p> </dd> + + + + + <p>Controls how a network byte stream transfers data to a local cache. This interface extends the <strong>{{IMFByteStreamCacheControl}}</strong> interface.</p> + <p>Byte streams object in Microsoft Media Foundation can optionally implement this interface. To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object. </p> + + + + <p>Gets the ranges of bytes that are currently stored in the cache.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of ranges returned in the <em>ppRanges</em> array.</p> </dd> + + + <dd> <p>Receives an array of <strong>{{MF_BYTE_STREAM_CACHE_RANGE}}</strong> structures. Each structure specifies a range of bytes stored in the cache. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Limits the cache size.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The maximum number of bytes to store in the cache, or <strong>{{ULONGLONG_MAX}} </strong> for no limit. The default value is no limit.</p> </dd> + + + + + <p>Queries whether background transfer is active.</p> + <p>Background transfer might stop because the cache limit was reached (see <strong>{{IMFByteStreamCacheControl2::SetCacheLimit}}</strong>) or because the <strong>{{IMFByteStreamCacheControl::StopBackgroundTransfer}}</strong> method was called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if background transfer is currently active, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Sets the user name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the user name. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the user name is encrypted. Otherwise, the user name is not encrypted.</p> </dd> + + + + + <p> </p><p>Sets the password.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the password. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the password is encrypted. Otherwise, the password is not encrypted.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Retrieves the password.</p> + <p>If the password is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the password. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Queries whether logged-on credentials should be used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If logged-on credentials should be used, the value is <strong>{{TRUE}}</strong>. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Implemented by applications to provide user credentials for a network source.</p><p>To use this interface, implement it in your application. Then create a property store object and set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property. The value of the property is a reference to your application's <strong>{{IMFNetCredentialManager}}</strong> interface. Then pass the property store to one of the source resolver's creation functions, such as <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong>, in the <em>pProps</em> parameter.</p><p>Media Foundation does not provide a default implementation of this interface. Applications that support authentication must implement this interface.</p> + + + + <p> </p><p>Begins an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFNetCredentialManagerGetParam}}</strong> structure.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{IMFAsyncResult}}</strong> interface that contains the asynchronous result.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface, which is used to retrieve the credentials. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Specifies whether the user's credentials succeeded in the authentication challenge. The network source calls this method to informs the application whether the user's credentials were authenticated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p>Boolean value. The value is <strong>{{TRUE}}</strong> if the credentials succeeded in the authentication challenge. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets credentials from the credential cache.</p><p>This interface is implemented by the credential cache object. Applications that implement the <strong>{{IMFNetCredentialManager}}</strong> interface can use this object to store the user's credentials. To create the credential cache object, call <strong>{{MFCreateCredentialCache}}</strong>.</p> + + + + <p> </p><p>Retrieves the credential object for the specified {{URL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string containing the {{URL}} for which the credential is needed.</p> </dd> + + + <dd> <p>A null-terminated wide-character string containing the realm for the authentication.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetAuthenticationFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialRequirements}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Reports whether the credential object provided successfully passed the authentication challenge.</p> + <p>This method is called by the network source into the credential manager.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the credential object succeeded in the authentication challenge; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Specifies how user credentials are stored.</p> + <p>If no flags are specified, the credentials are cached in memory. This method can be implemented by the credential manager and called by the network source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface. Obtain this reference by calling <strong>{{IMFNetCredentialCache::GetCredential}}</strong>.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialOptions}}</strong> enumeration.</p> </dd> + + + + + <p>Implemented by a client and called by Microsoft Media Foundation to get the client Secure Sockets Layer ({{SSL}}) certificate requested by the server. </p><p>In most {{HTTPS}} connections the server provides a certificate so that the client can ensure the identity of the server. However, in certain cases the server might wants to verify the identity of the client by requesting the client to send a certificate. For this scenario, a client application must provide a mechanism for Media Foundation to retrieve the client side certificate while opening an {{HTTPS}} {{URL}} with the source resolver or the scheme handler. The application must implement <strong>{{IMFSSLCertificateManager}}</strong>, set the <strong>{{IUnknown}}</strong> reference of the implemented object in the {{MFNETSOURCE_SSLCERTIFICATE_MANAGER}} property, and pass the property store to the source resolver. While opening the {{URL}}, Media Foundation calls the <strong>{{IMFSSLCertificateManager}}</strong> methods to get the certificate information. If the application needs to connect to {{HTTPS}} {{URL}} that requires a client-side certificate, or the application wants customized control over the type of server certificates to accept, then they can implement this interface. This interface can also be used by the application to validate the server {{SSL}} certificate.</p><p>If the <strong>{{IUnknown}}</strong> reference is not provided by the application and the {{HTTPS}} {{URL}} does not require the client to provide a certificate, +Media Foundation uses the default implementation to open the {{URL}}. +</p> + + + + <p>Gets the client {{SSL}} certificate synchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>Pointer to the buffer that stores the certificate. +This caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that receives the number of bytes required to hold the certificate data in the buffer pointed by <em>*ppbData</em>.</p> </dd> + + + + + <p>Starts an asynchronous call to get the client {{SSL}} certificate.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSSLCertificateManager::EndGetClientCertificate}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to get the client {{SSL}} certificate. </p> + <p>Call this method after the <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the buffer that stores the certificate. +The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer, in bytes.</p> </dd> + + + + + <p>Indicates whether the server {{SSL}} certificate must be verified by the caller, Media Foundation, or the <strong>{{IMFSSLCertificateManager}}</strong> implementation class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a string that contains the {{URL}} that is sent to the server.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if <strong>{{IMFSSLCertificateManager::OnServerCertificate}}</strong> is used to verify the server certificate. +Set to <strong>{{FALSE}}</strong> if Media Foundation verifies the server certificate by using the certificates in the Windows certificate store. +</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if the {{SSL}} certificate for the client is available for immediate retrieval. Media Foundation calls <strong>{{IMFSSLCertificateManager::GetClientCertificate}}</strong> to obtain the client certificate synchronously. If the value is set to <strong>{{FALSE}}</strong>, Media Foundation obtains the client {{SSL}} certificate with an asynchronous call to <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong>.</p> </dd> + + + + + <p>Called by Media Foundation when the server {{SSL}} certificate has been received; indicates whether the server certificate is accepted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} used to send the request to the server, and for which a server-side {{SSL}} certificate has been received.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the server {{SSL}} certificate.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that indicates the size of <em>pbData</em> in bytes.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> variable that indicates whether the certificate is accepted.</p> </dd> + + + + + <p>Notifies the application when a byte stream requests a {{URL}}, and enables the application to block {{URL}} redirection.</p> + <p>To set the callback interface:</p><ol> <li>Query the byte stream object for the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Call <strong>{{IMFAttributes::SetUnknown}}</strong> to set the {{MFNETSOURCE_RESOURCE_FILTER}} attribute.</li> </ol> + + + + <p>Called when the byte stream redirects to a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} to which the connection has been redirected.</p> </dd> + + + <dd> <p>To cancel the redirection, set this parameter to <strong>{{VARIANT_TRUE}}</strong>. To allow the redirection, set this parameter to <strong>{{VARIANT_FALSE}}</strong>.</p> </dd> + + + + + <p>Called when the byte stream requests a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} that the byte stream is requesting.</p> </dd> + + + + + <p>Callback interface to receive notifications from a network source on the progress of an asynchronous open operation.</p> + + + + <p> </p><p>Called by the network source when the open operation begins or ends.</p> + <p>The networks source calls this method with the following event types.</p><ul> <li> <p> {{MEConnectStart}} </p> </li> <li> <p> {{MEConnectEnd}} </p> </li> </ul><p>For more information, see How to Get Events from the Network Source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface.</p> </dd> + + + + + <p>Determines the proxy to use when connecting to a server. The network source uses this interface.</p><p>Applications can create the proxy locator configured by the application by implementing the <strong>{{IMFNetProxyLocatorFactory}}</strong> interface and setting the <strong>{{MFNETSOURCE_PROXYLOCATORFACTORY}}</strong> property on the source resolver. Otherwise, the network source uses the default Media Foundation implementation.</p><p>To create the default proxy locator, call <strong>{{MFCreateProxyLocator}}</strong>.</p> + + + + <p> </p><p>Initializes the proxy locator object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string containing the hostname of the destination server.</p> </dd> + + + <dd> <p>Null-terminated wide-character string containing the destination {{URL}}.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Determines the next proxy to use.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>There are no more proxy objects.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Keeps a record of the success or failure of using the current proxy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p><strong>{{HRESULT}}</strong> specifying the result of using the current proxy for connection.</p> </dd> + + + + + <p> </p><p>Retrieves the current proxy information including hostname and port.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pszStr</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives a null-terminated string containing the proxy hostname and port. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the number of elements in the <em>pszStr</em> array. On output, receives the required size of the buffer.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the default proxy locator.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the new proxy locator object's <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Persists media data from a source byte stream to an application-provided byte stream.</p><p>The byte stream used for {{HTTP}} download implements this interface. To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the byte stream, with the service identifier {{MFNET_SAVEJOB_SERVICE}}.</p> + + + + <p> </p><p>Begins saving a Windows Media file to the application's byte stream.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSaveJob::EndSave}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of the application's byte stream. The data from the source byte stream is written to this byte stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the percentage of content saved to the provided byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the percentage of completion.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves a supported protocol by index</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value passed in the <em>nProtocolIndex</em> parameter was greater than the total number of supported protocols, returned by <strong>GetNumberOfSupportedProtocols</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the protocol to retrieve. To get the number of supported protocols, call <strong>{{IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols}}</strong>.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MFNETSOURCE_PROTOCOL_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Not implemented in this release.</p> + <p>This method returns {{S_OK}}.</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request to create an object from a {{URL}}.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the Invoke method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create an object from a {{URL}}.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p><p>The operation cannot be canceled if <strong>BeginCreateObject</strong> returns <strong>{{NULL}}</strong> in the <em>ppIUnknownCancelCookie</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSchemeHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> Creates a media source from a byte stream. </p> + <p>Applications do not use this interface directly. This interface is exposed by byte-stream handlers, which are used by the source resolver. When the byte-stream handler is given a byte stream, it parses the stream and creates a media source. Byte-stream handlers are registered by file name extension or {{MIME}} type.</p> + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the {{MF_RESOLUTION_MEDIASOURCE}} flag and should not contain the {{MF_RESOLUTION_BYTESTREAM}} flag.</p><p>The byte-stream handler is responsible for parsing the stream and validating the contents. If the stream is not valid or the byte stream handler cannot parse the stream, the handler should return a failure code. The byte stream is not guaranteed to match the type of stream that the byte handler is designed to parse.</p><p>If the <em>pwszURL</em> parameter is not <strong>{{NULL}}</strong>, the byte-stream handler might use the {{URL}} during the resolution process. (For example, it might use the file name extension, if present.) Also, the byte stream might contain the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute, specifying the {{MIME}} type.</p><p>When the operation completes, the byte-stream handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFByteStreamHandler::EndCreateObject}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>String that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of zero or more flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The byte-stream handler can use this property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled. See <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create a media source.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFByteStreamHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the maximum number of bytes needed to create the media source or determine that the byte stream handler cannot parse this stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the maximum number of bytes that are required.</p> </dd> + + + + + <p> Implemented by components that provide input trust authorities ({{ITAs}}). This interface is used to get the {{ITA}} for each of the component's streams. </p> + + + + <p> </p><p>Retrieves the input trust authority ({{ITA}}) for a specified stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The {{ITA}} does not expose the requested interface.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream identifier for which the {{ITA}} is being requested.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. Currently the only supported value is {{IID_IMFInputTrustAuthority}}.</p> </dd> + + + <dd> <p>Receives a reference to the {{ITA}}'s <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables other components in the protected media path ({{PMP}}) to use the input protection system provided by an input trust authorities ({{ITA}}). An {{ITA}} is a component that implements an input protection system for media content. {{ITAs}} expose the <strong>{{IMFInputTrustAuthority}}</strong> interface.</p><p>An {{ITA}} translates policy from the content's native format into a common format that is used by other {{PMP}} components. It also provides a decrypter, if one is needed to decrypt the stream.</p><p>The topology contains one {{ITA}} instance for every protected stream in the media source. The {{ITA}} is obtained from the media source by calling <strong>{{IMFTrustedInput::GetInputTrustAuthority}}</strong>.</p> + + + + <p> </p><p>Retrieves a decrypter transform.</p> + <p>The decrypter should be created in a disabled state, where any calls to <strong>{{IMFTransform::ProcessOutput}}</strong> automatically fail. After the input trust authority ({{ITA}}) has verified that it is running inside the protected media path ({{PMP}}), the {{ITA}} should enable the decrypter.</p><p>An {{ITA}} is not required to provide a decrypter. If the source content is not encrypted, the method should return {{MF_E_NOT_PROTECTED}}. The {{PMP}} will then proceed without using a decrypter for that stream.</p><p>The {{ITA}} must create a new instance of its decrypter for each call to <strong>GetDecrypter</strong>. Do not return multiple references to the same decrypter. They must be separate instances because the Media Session might place them in two different branches of the topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The decrypter does not support the requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_PROTECTED}}</strong></dt> </dl> </td><td> <p>This input trust authority ({{ITA}}) does not provide a decrypter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface being requested. Currently this value must be {{IID_IMFTransform}}, which requests the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Requests permission to perform a specified action on the stream.</p> + <p>This method verifies whether the user has permission to perform a specified action on the stream. The {{ITA}} does any work needed to verify the user's right to perform the action, such as checking licenses.</p><p>To verify the user's rights, the {{ITA}} might need to perform additional steps that require interaction with the user or consent from the user. For example, it might need to acquire a new license or individualize a {{DRM}} component. In that case, the {{ITA}} creates an activation object for a content enabler and returns the activation object's <strong>{{IMFActivate}}</strong> interface in the <em>ppContentEnablerActivate</em> parameter. The activation object is responsible for creating a content enabler that exposes the <strong>{{IMFContentEnabler}}</strong> interface. The content enabler is used as follows:</p><ol> <li> <p>The Media Session returns the <strong>{{IMFActivate}}</strong> reference to the application.</p> </li> <li> <p>The application calls <strong>{{IMFActivate::ActivateObject}}</strong> to activate the content enabler.</p> </li> <li> <p>The application calls <strong>{{IMFContentEnabler}}</strong> methods to perform whatever actions are needed, such as individualization or obtaining a license. The content enabler object must encapsulate this functionality through the <strong>{{IMFContentEnabler}}</strong> interface.</p> </li> <li> <p>The Media Session calls <strong>RequestAccess</strong> again.</p> </li> </ol><p>The return value signals whether the user has permission to perform the action:</p><ul> <li> <p>If the user already has permission to perform the action, the method returns {{S_OK}} and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the user does not have permission, the method returns a failure code and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the {{ITA}} must perform additional steps that require interaction with the user, the method returns a failure code and returns the content enabler's <strong>{{IMFActivate}}</strong> reference in <em>ppContentEnablerActivate</em>.</p> </li> </ul><p>The Media Session will not allow the action unless this method returns {{S_OK}}. However, a return value of {{S_OK}} does not guarantee that the action will be performed, because some other failure might occur after this method is called. When the action is definitely about to happen, the Media Session calls <strong>{{IMFInputTrustAuthority::BindAccess}}</strong>.</p><p>A stream can go to multiple outputs, so this method might be called multiple times with different actions, once for every output.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The user has permission to perform this action.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_NEEDS_INDIVIDUALIZATION}}</strong></dt> </dl> </td><td> <p>The user must individualize the application.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_LICENSE_REQUIRED}}</strong></dt> </dl> </td><td> <p>The user must obtain a license.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested action, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the value <strong>{{NULL}}</strong> or a reference to the <strong>{{IMFActivate}}</strong> interface. The <strong>{{IMFActivate}}</strong> interface is used to create a content enabler object. The caller must release the interface. For more information, see Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the policy that defines which output protection systems are allowed for this stream, and the configuration data for each protection system.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The action that will be performed on this stream, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFOutputPolicy}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) that a requested action is about to be performed.</p> + <p>Before calling this method, the Media Session calls <strong>{{IMFInputTrustAuthority::RequestAccess}}</strong> to request an action. The <strong>BindAccess</strong> method notifies the {{ITA}} that the action is definitely about to occur, so that the {{ITA}} can update its internal state as needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>BindAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) when the number of output trust authorities ({{OTAs}}) that will perform a specified action has changed.</p> + <p>The {{ITA}} can update its internal state if needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>UpdateAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Resets the input trust authority ({{ITA}}) to its initial state.</p> + <p>When this method is called, the {{ITA}} should disable any decrypter that was returned in the <strong>{{IMFInputTrustAuthority::GetDecrypter}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implemented by components that provide output trust authorities ({{OTAs}}). Any Media Foundation transform ({{MFT}}) or media sink that is designed to work within the protected media path ({{PMP}}) and also sends protected content outside the Media Foundation pipeline must implement this interface.</p><p>The policy engine uses this interface to negotiate what type of content protection should be applied to the content. Applications do not use this interface directly.</p> + <p>If an {{MFT}} supports <strong>{{IMFTrustedOutput}}</strong>, it must expose the interface through <strong>QueryInterface</strong>. The interface applies to all of the input streams on the {{MFT}}. (There is no mechanism to return a separate <strong>{{IMFTrustedOutput}}</strong> reference for each stream.) The {{MFT}} must apply the output policies to all of its input streams. If the {{MFT}} sends different streams to separate connectors, it must report all of the connector attributes.</p> + + + + <p> Gets the number of output trust authorities ({{OTAs}}) provided by this trusted output. Each {{OTA}} reports a single action.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{OTAs}}. </p> </dd> + + + + + <p> Gets an output trust authority ({{OTA}}), specified by index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the {{OTA}} to retrieve. To get the number of {{OTAs}} provided by this object, call <strong>{{IMFTrustedOutput::GetOutputTrustAuthorityCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFOutputTrustAuthority}}</strong> interface of the {{OTA}}. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether this output is a policy sink, meaning it handles the rights and restrictions required by the input trust authority ({{ITA}}).</p> + <p>A trusted output is generally considered to be a policy sink if it does not pass the media content that it receives anywhere else; or, if it does pass the media content elsewhere, either it protects the content using some proprietary method such as encryption, or it sufficiently devalues the content so as not to require protection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, this object is a policy sink. If <strong>{{FALSE}}</strong>, the policy must be enforced further downstream.</p> </dd> + + + + + <p>Encapsulates the functionality of one or more output protection systems that a trusted output supports. This interface is exposed by output trust authority ({{OTA}}) objects. Each {{OTA}} represents a single action that the trusted output can perform, such as play, copy, or transcode. An {{OTA}} can represent more than one physical output if each output performs the same action.</p> + + + + <p> </p><p>Retrieves the action that is performed by this output trust authority ({{OTA}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the {{MFPOLICYMANAGER_ACTION}} enumeration.</p> </dd> + + + + + <p> Sets one or more policy objects on the output trust authority ({{OTA}}). </p> + <p>If the method returns <strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong>, the {{OTA}} sends an {{MEPolicySet}} event when it enforces the policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong></dt> </dl> </td><td> <p> The policy was negotiated successfully, but the {{OTA}} will enforce it asynchronously. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_POLICY_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The {{OTA}} does not support the requirements of this policy. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The address of an array of <strong>{{IMFOutputPolicy}}</strong> references. </p> </dd> + + + <dd> <p> The number of elements in the <em>ppPolicy</em> array. </p> </dd> + + + <dd> <p> Receives either a reference to a buffer allocated by the {{OTA}}, or the value <strong>{{NULL}}</strong>. If this parameter receives a non-<strong>{{NULL}}</strong> value, the caller must release the buffer by calling <strong>CoTaskMemFree</strong>. </p> <strong>Note</strong>??Currently this parameter is reserved. An {{OTA}} should set the reference to <strong>{{NULL}}</strong>. ? </dd> + + + <dd> <p> Receives the size of the <em>ppbTicket</em> buffer, in bytes. If <em>ppbTicket</em> receives the value <strong>{{NULL}}</strong>, <em>pcbTicket</em> receives the value zero.</p> </dd> + + + + + <p>Encapsulates a usage policy from an input trust authority ({{ITA}}). Output trust authorities ({{OTAs}}) use this interface to query which protection systems they are required to enforce by the {{ITA}}.</p> + + + + <p> Retrieves a list of the output protection systems that the output trust authority ({{OTA}}) must enforce, along with configuration data for each protection system. </p> + <p>The video {{OTA}} returns the <strong>{{MFCONNECTOR_UNKNOWN}}</strong> connector type unless the Direct3D device is in full-screen mode. (Direct3D windowed mode is not generally a secure video mode.) You can override this behavior by implementing a custom {{EVR}} presenter that implements the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Describes the output that is represented by the {{OTA}} calling this method. This value is a bitwise {{OR}} of zero or more of the following flags. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUS}}</strong></dt> </dl> </td><td> <p> Hardware bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_COMPRESSED}}</strong></dt> </dl> </td><td> <p> The output sends compressed data. If this flag is absent, the output sends uncompressed data. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUSIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_DIGITAL}}</strong></dt> </dl> </td><td> <p> The output sends a digital signal. If this flag is absent, the output sends an analog signal. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_NONSTANDARDIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_SOFTWARE}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_VIDEO}}</strong></dt> </dl> </td><td> <p> The output sends video data. If this flag is absent, the output sends audio data. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Indicates a specific family of output connectors that is represented by the {{OTA}} calling this method. Possible values include the following. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_AGP}}</strong></dt> </dl> </td><td> <p> {{AGP}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPONENT}}</strong></dt> </dl> </td><td> <p> Component video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPOSITE}}</strong></dt> </dl> </td><td> <p> Composite video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_D_JPN}}</strong></dt> </dl> </td><td> <p> Japanese D connector. (Connector conforming to the {{EIAJ}} {{RC}}-5237 standard.) </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DVI}}</strong></dt> </dl> </td><td> <p> Digital video interface ({{DVI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_HDMI}}</strong></dt> </dl> </td><td> <p> High-definition multimedia interface ({{HDMI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_LVDS}}</strong></dt> </dl> </td><td> <p> Low voltage differential signaling ({{LVDS}}) connector.</p> <p>A connector using the {{LVDS}} interface to connect internally to a display device. The connection between the graphics adapter and the display device is permanent and not accessible to the user. Applications should not enable High-Bandwidth Digital Content Protection ({{HDCP}}) for this connector.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI}}</strong></dt> </dl> </td><td> <p> {{PCI}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI_Express}}</strong></dt> </dl> </td><td> <p> {{PCI}} Express bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCIX}}</strong></dt> </dl> </td><td> <p> {{PCI}}-X bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SDI}}</strong></dt> </dl> </td><td> <p> Audio data sent over a connector via S/{{PDIF}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SPDIF}}</strong></dt> </dl> </td><td> <p> Serial digital interface connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SVIDEO}}</strong></dt> </dl> </td><td> <p> S-Video connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded Unified Display Interface ({{UDI}}). </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External {{UDI}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UNKNOWN}}</strong></dt> </dl> </td><td> <p> Unknown connector type. See Remarks. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_VGA}}</strong></dt> </dl> </td><td> <p> {{VGA}} connector. </p> </td></tr> <tr><td><dl> <dt><strong> {{MFCONNECTOR_MIRACAST}}</strong></dt> </dl> </td><td> <p>Miracast wireless connector. </p> <p>Supported in Windows?8.1 and later.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to an array of {{GUID}} values that specify which output protection systems are supported by the {{OTA}} that is calling this method. </p> </dd> + + + <dd> <p> Number of elements in the <em>rgGuidProtectionSchemasSupported</em> array. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object. The caller must release the interface. Each object in the collection is an <strong>{{IMFOutputSchema}}</strong> reference. Each <strong>{{IMFOutputSchema}}</strong> reference defines an output protection system that the {{OTA}} must enforce. </p> </dd> + + + + + <p> </p><p>Retrieives a {{GUID}} identifying the input trust authority ({{ITA}}) that created this output policy object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> </p><p>Retrieves the minimum version of the global revocation list ({{GRL}}) that must be enforced by the protected environment for this policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum {{GRL}} version.</p> </dd> + + + + + <p>Encapsulates information about an output protection system and its corresponding configuration data.</p> + <p>If the configuration information for the output protection system does not require more than a <strong>{{DWORD}}</strong> of space, the configuration information is retrieved in the <strong>GetConfigurationData</strong> method. If more than a <strong>{{DWORD}}</strong> of configuration information is needed, it is stored using the <strong>{{IMFAttributes}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the output protection system that is represented by this object. Output protection systems are identified by {{GUID}} value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the {{GUID}} that identifies the output protection system.</p> </dd> + + + + + <p> </p><p>Returns configuration data for the output protection system. The configuration data is used to enable or disable the protection system, and to set the protection levels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the configuration data. The meaning of this data depends on the output protection system.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} identifying the input trust authority ({{ITA}}) that generated this output schema object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> Establishes a one-way secure channel between two objects. </p> + + + + <p> </p><p>Retrieves the client's certificate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer allocated by the object. The buffer contains the client's certificate. The caller must release the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Passes the encrypted session key to the client.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the encrypted session key. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbEncryptedSessionKey</em> buffer, in bytes.</p> </dd> + + + + + <p> Provides encryption for media data inside the protected media path ({{PMP}}). </p> + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on input.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the sample protection certificate.</p> + <p>For certain version numbers of sample protection, the downstream component must provide a certificate. Components that do not support these version numbers can return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme for which to receive a certificate. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Receives a reference to a buffer containing the certificate. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves initialization information for sample protection from the upstream component.</p> + <p>This method must be implemented by the upstream component. The method fails if the component does not support the requested sample protection version. Downstream components do not implement this method and should return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the output stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a certificate provided by the downstream component.</p> </dd> + + + <dd> <p>Size of the certificate, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains the initialization information for downstream component. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes sample protection on the downstream component.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the input stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the initialization data provided by the upstream component. To retrieve this buffer, call <strong>{{IMFSampleProtection::InitOutputProtection}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p>Enables a media sink to receive samples before the presentation clock is started.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>Media sinks can implement this interface to support seamless playback and transitions. If a media sink exposes this interface, it can receive samples before the presentation clock starts. It can then pre-process the samples, so that rendering can begin immediately when the clock starts. Prerolling helps to avoid glitches during playback.</p><p>If a media sink supports preroll, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method should return the {{MEDIASINK_CAN_PREROLL}} flag.</p> + + + + <p> Notifies the media sink that the presentation clock is about to start. </p> + <p> After this method is called, the media sink sends any number of {{MEStreamSinkRequestSample}} events to request samples, until is has enough preroll data. When it has enough preroll data, the media sink sends an {{MEStreamSinkPrerolled}} event. This event signals that the client can start the presentation clock. </p><p> During preroll, the media sink can prepare the samples that it receives, so that they are ready to be rendered. It does not actually render any samples until the clock starts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The upcoming start time for the presentation clock, in 100-nanosecond units. This time is the same value that will be given to the <strong>{{IMFPresentationClock::Start}}</strong> method when the presentation clock is started. </p> </dd> + + + + + <p>Optionally supported by media sinks to perform required tasks before shutdown. This interface is typically exposed by archive sinks?that is, media sinks that write to a file. It is used to perform tasks such as flushing data to disk or updating a file header.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>If a media sink exposes this interface, the Media Session will call <strong>BeginFinalize</strong> on the sink before the session closes.</p> + + + + <p> </p><p>Notifies the media sink to asynchronously take any steps it needs to finish its tasks.</p> + <p>Many archive media sinks have steps they need to do at the end of archiving to complete their file operations, such as updating the header (for some formats) or flushing all pending writes to disk. In some cases, this may include expensive operations such as indexing the content. <strong>BeginFinalize</strong> is an asynchronous way to initiate final tasks.</p><p>When the finalize operation is complete, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFFinalizableMediaSink::EndFinalize}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of an asynchronous object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous finalize operation.</p> + <p>Call this method after the <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p>Passes configuration information to the media sinks that are used for streaming the content. Optionally, this interface is supported by media sinks. The built-in {{ASF}} streaming media sink and the {{MP3}} media sink implement this interface.</p> + + + + <p>Called by the streaming media client before the Media Session starts streaming to specify the byte offset or the time offset.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A Boolean value that specifies whether <em>qwSeekOffset</em> gives a byte offset of a time offset.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies a byte offset.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies the time position in 100-nanosecond units.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A byte offset or a time offset, depending on the value passed in <em>fSeekOffsetIsByteOffset</em>. Time offsets are specified in 100-nanosecond units. +</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the object that is hosting this proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface reference to and from a stream.</p><p>Stream objects that support <strong>{{IStream}}</strong> can expose this interface to provide custom marshaling for interface references.</p> + + + + <p> </p><p>Stores the data needed to marshal an interface across a process boundary.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface from data stored in the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHost::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHost::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an object in the protect media path ({{PMP}}) process, from a {{CLSID}}. </p> + <p> You can use the <em>pStream</em> parameter to initialize the object after it is created. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the object to create. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. If this parameter is not <strong>{{NULL}}</strong>, the {{PMP}} host queries the created object for the <strong>{{IPersistStream}}</strong> interface and calls <strong>{{IPersistStream::Load}}</strong>, passing in the <em>pStream</em> reference. </p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> Enables a media source to receive a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>If a media source exposes this interface, the Protected Media Path ({{PMP}}) Media Session calls <strong>SetPMPHost</strong> with a reference to the <strong>{{IMFPMPHost}}</strong> interface. The media source can use the <strong>{{IMFPMPHost}}</strong> interface to create objects in the {{PMP}} process.</p> + + + + <p> Provides a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>The <strong>{{IMFPMPHost}}</strong> reference is apartment threaded. The media source must add the reference to the global interface table ({{GIT}}) before using it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Enables two instances of the Media Session to share the same protected media path ({{PMP}}) process. </p> + <p>If your application creates more than one instance of the Media Session, you can use this interface to share the same {{PMP}} process among several instances. This can be more efficient than re-creating the {{PMP}} process each time.</p><p>Use this interface as follows:</p><ol> <li> Create the first instance of the {{PMP}} Media Session by calling <strong>{{MFCreatePMPMediaSession}}</strong>. </li> <li> Retrieve an <strong>{{IMFPMPServer}}</strong> reference from the first Media Session by calling <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_PMP_SERVER_CONTEXT}}</strong>. </li> <li> Create the second instance of the {{PMP}} Media Session. Set the {{MF_SESSION_SERVER_CONTEXT}} attribute on the <em>pConfiguration</em> parameter of the <strong>{{MFCreatePMPMediaSession}}</strong> function. The attribute value is the <strong>{{IMFPMPServer}}</strong> reference retrieved in step 2. </li> </ol> + + + + <p> </p><p>Blocks the protected media path ({{PMP}}) process from ending.</p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to {{IMFPMPServer::UnlockProcess}}, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to {{IMFPMPServer::LockProcess}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an object in the protected media path ({{PMP}}) process.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{CLSID}} of the object to create.</p> </dd> + + + <dd> <p>Interface identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Modifies a topology for use in a Terminal Services environment. </p> + <p>To use this interface, do the following:</p><ol> <li> Call <strong>GetSystemMetrics</strong> with the <strong>{{SM_REMOTESESSION}}</strong> flag. The function returns <strong>{{TRUE}}</strong> if the calling process is associated with a Terminal Services client session. </li> <li> If <strong>GetSystemMetrics</strong> returns <strong>{{TRUE}}</strong>, call <strong>{{MFCreateRemoteDesktopPlugin}}</strong>. This function returns a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface. </li> <li> Call <strong>UpdateTopology</strong> with a reference to the topology. </li> </ol><p>The application must call <strong>UpdateTopology</strong> before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + + + + <p> </p><p>Modifies a topology for use in a Terminal Services environment.</p> + <p>If the application is running in a Terminal Services client session, call this method before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology.</p> </dd> + + + + + <p> Sets and retrieves Synchronized Accessible Media Interchange ({{SAMI}}) styles on the {{SAMI}} Media Source. </p> + <p> To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_SAMI_SERVICE}}</strong>. Call <strong>GetService</strong> either directly on the {{SAMI}} media source, or on the Media Session (if you are using the {{SAMI}} source with the Media Session).</p> + + + + <p> Gets the number of styles defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{SAMI}} styles in the file. </p> </dd> + + + + + <p> Gets a list of the style names defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. The <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must clear the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> Sets the current style on the {{SAMI}} media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the style. To clear the current style, pass an empty string (""). To get the list of style names, call <strong>{{IMFSAMIStyle::GetStyles}}</strong>.</p> </dd> + + + + + <p> Gets the current style from the {{SAMI}} media source. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to a null-terminated string that contains the name of the style. If no style is currently set, the method returns an empty string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p>Implemented by the transcode profile object.</p><p>The transcode profile stores configuration settings that the topology builder uses to generate the transcode topology for the output file. These configuration settings are specified by the caller and include audio and video stream properties, encoder settings, and container settings that are specified by the caller.</p><p>To create the transcode profile object, call <strong>{{MFCreateTranscodeProfile}}</strong>. The configured transcode profile is passed to <strong>{{MFCreateTranscodeTopology}}</strong>, which creates the transcode topology with the appropriate settings. </p> + + + + <p>Sets audio stream configuration settings in the transcode profile.</p><p>To get a list of compatible audio media types supported by the Media Foundation transform ({{MFT}}) encoder , call <strong>{{MFTranscodeGetAudioOutputAvailableTypes}}</strong>. You can get the attributes that are set on the required media type and set them on the transcode profile. To set the audio attributes properly, create a new attribute store and copy the attribute store from the required media media type by calling <strong>{{IMFAttributes::CopyAllItems}}</strong>. This makes sure that the caller does not hold the references to the media type retrieved from the encoder. For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio stream settings that are currently set in the transcode profile. </p> + <p>If there are no audio attributes set in the transcode profile, the call to <strong>GetAudioAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following topics describe the audio attributes:</p><ul> <li> Audio Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current audio stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets video stream configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the video stream settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the <strong>GetVideoAttributes</strong> method succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following list shows the video attributes:</p><ul> <li> Video Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> <li> {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current video stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets container configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the container settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the call to <strong>GetContainerAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p> To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute. The following list shows the container attributes:</p><ul> <li> {{MF_TRANSCODE_CONTAINERTYPE}} </li> <li> {{MF_TRANSCODE_SKIP_METADATA_TRANSFER}} </li> <li> {{MF_TRANSCODE_TOPOLOGYMODE}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current container type for the output file. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets an output byte stream for the transcode media sink.</p> + <p>Call this method to provide a writeable byte stream that will receive the transcoded data.</p><p>Alternatively, you can provide the name of an output file, by calling <strong>{{IMFTranscodeSinkInfoProvider::SetOutputFile}}</strong>. These two methods are mutually exclusive.</p><p>The <em>pByteStreamActivate</em> parameter must specify an activation object that creates a writeable byte stream. Internally, the transcode media sink calls <strong>{{IMFActivate::ActivateObject}}</strong> to create the byte stream, as follows:</p><code>{{IMFByteStream}} *pByteStream = {{NULL}}; {{HRESULT}} hr = pByteStreamActivate-&gt;ActivateObject({{IID_IMFByteStream}}, (void**)&amp;pByteStream);</code><p>Currently, Microsoft Media Foundation does not provide any byte-stream activation objects. To use this method, an application must provide a custom implementation of <strong>{{IMFActivate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of a byte-stream activation object. </p> </dd> + + + + + <p>Sets the transcoding profile on the transcode sink activation object.</p> + <p>Before calling this method, initialize the profile object as follows:</p><ul> <li>Set the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to specify the container type of the output file.</li> <li>If the output file will have a video stream, set video attributes by calling the <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> method.</li> <li>If the output file will have an audio stream, set audio attributes by calling the <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface. To get a reference to this interface, call <strong>{{MFCreateTranscodeProfile}}</strong>.</p> </dd> + + + + + <p> Gets the media types for the audio and video streams specified in the transcode profile.</p> + <p>Before calling this method, call <strong>{{IMFTranscodeSinkInfoProvider::SetProfile}}</strong> to set the transcode profile. The <strong>GetSinkInfo</strong> method uses the profile to create media types for the audio and video streams. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MF_TRANSCODE_SINK_INFO}}</strong> structure.</p> <p>If the method succeeds, the method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-{{NULL}} after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> </dd> + + + + + <p>Enables an application to use a Media Foundation transform ({{MFT}}) that has restrictions on its use.</p> + <p>If you register an {{MFT}} that requires unlocking, include the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag when you call the <strong>{{MFTRegister}}</strong> function.</p> + + + + <p>Unlocks a Media Foundation transform ({{MFT}}) so that the application can use it.</p> + <p>This method authenticates the caller, using a private communication channel between the {{MFT}} and the object that implements the <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface. The details of the communication depend entirely on the implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{MFT}}.</p> </dd> + + + + + <p>Registers Media Foundation transforms ({{MFTs}}) in the caller's process.</p><p>The Media Session exposes this interface as a service. To obtain a reference to this interface, call the <strong>{{IMFGetService::GetService}}</strong> method on the Media Session with the service identifier <strong>{{MF_LOCAL_MFT_REGISTRATION_SERVICE}}</strong>.</p> + <p>This interface requires the Media Session. If you are not using the Media Session for playback, call one of the following functions instead:</p><ul> <li> <strong>{{MFTRegisterLocal}}</strong> </li> <li> <strong>{{MFTRegisterLocalByCLSID}}</strong> </li> </ul> + + + + <p>Registers one or more Media Foundation transforms ({{MFTs}}) in the caller's process.</p> + <p>This method is similar to the <strong>{{MFTRegisterLocalByCLSID}}</strong> function. It registers one or more {{MFTs}} in the caller's process. These {{MFTs}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag.</p><p>Unlike <strong>{{MFTRegisterLocalByCLSID}}</strong>, however, this method also makes the {{MFT}} available in the Protected Media Path ({{PMP}}) process, and is therefore useful if you are using the Media Session inside the {{PMP}}. For more information, see the following topics:</p><ul> <li> <strong>{{MFCreatePMPMediaSession}}</strong> </li> <li> Protected Media Path </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTRATION_INFO}}</strong> structures.</p> </dd> + + + <dd> <p>The number of elements in the <em>pMFTs</em> array.</p> </dd> + + + + + + + + + + + + + + + + + <p>Allows a media source to create a Windows Runtime object in the Protected Media Path ({{PMP}}) process. </p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHostApp::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHostApp::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a Windows Runtime object in the protected media path ({{PMP}}) process. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Id of object to create.</p> </dd> + + + <dd> <p>Data to be passed to the object by way of a <strong>{{IPersistStream}}</strong>.</p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the created object. </p> </dd> + + + + + <p>Provides a mechanism for a media source to implement content protection functionality in a Windows Store apps.</p> + <p><strong>When to implement:</strong> A media source implements <strong>{{IMFPMPClientApp}}</strong> in order to implement content protection functionality for Windows Store apps. </p> + + + + <p>Sets a reference to the <strong>{{IMFPMPHostApp}}</strong> interface allowing a media source to create objects in the {{PMP}} process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a request for a sample from a MediaStreamSource. </p> + <p><strong>{{MFMediaStreamSourceSampleRequest}}</strong> is implemented by the <strong>Windows.Media.Core.MediaStreamSourceSampleRequest</strong> runtime class.</p> + + + + <p>Sets the sample for the media stream source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample for the media stream source.</p> </dd> + + + + + <p>Tracks the reference counts on a video media sample. Video samples created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function expose this interface.</p> + <p>Use this interface to determine whether it is safe to delete or re-use the buffer contained in a sample. One object assigns itself as the owner of the video sample by calling <strong>SetAllocator</strong>. When all objects release their reference counts on the sample, the owner's callback method is invoked.</p> + + + + <p> </p><p>Sets the owner for the sample.</p> + <p>When this method is called, the sample holds an additional reference count on itself. When every other object releases its reference counts on the sample, the sample invokes the <em>pSampleAllocator</em> callback method. To get a reference to the sample, call <strong>{{IMFAsyncResult::GetObject}}</strong> on the asynchronous result object given to the callback's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>After the callback is invoked, the sample clears the callback. To reinstate the callback, you must call <strong>SetAllocator</strong> again.</p><p>It is safe to pass in the sample's <strong>{{IMFSample}}</strong> interface reference as the state object (<em>pUnkState</em>) for the callback. If <em>pUnkState</em> points to the sample, the <strong>SetAllocator</strong> method accounts for the additional reference count on <em>pUnkState</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The owner was already set. This method cannot be called twice on the sample.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to perform a handshake with the protected environment. This is needed because the <strong>CreateFile</strong> and <strong>DeviceIoControl</strong> {{APIs}} are not available to Windows Store apps.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create and use an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object.</p> + + + + <p>Allows content protection systems to access the protected environment.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object and use the <strong>Call</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The length in bytes of the input data.</p> </dd> + + + <dd> <p>A reference to the input data.</p> </dd> + + + <dd> <p>The length in bytes of the output data.</p> </dd> + + + <dd> <p>A reference to the output data.</p> </dd> + + + + + <p>Gets the Global Revocation List ({{GLR}}).</p> + <p>Allows reading of the system Global Revocation List ({{GRL}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the data returned in <strong>output</strong>.</p> </dd> + + + <dd> <p>Receives the contents of the global revocation list file.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to get the procedure address of a function in the signed library. This method provides the same functionality as <strong>GetProcAddress</strong> which is not available to Windows Store apps.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create and use an <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + + <p>Gets the procedure address of the specified function in the signed library.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create an <strong>{{IMFSignedLibrary}}</strong> object and call the <strong>GetProcedureAddress</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The entry point name in the {{DLL}} that specifies the function.</p> </dd> + + + <dd> <p>Receives the address of the entry point.</p> </dd> + + + + + <p>Provides a method that retireves system id data.</p> + + + + <p>Retrieves system id data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The size in bytes of the returned data.</p> </dd> + + + <dd> <p>Receives the returned data. The caller must free this buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Sets up the <strong>{{IMFSystemId}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Calls into the implementation of the protection system in the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the function that you want to run. This identifier is defined by the implementation of the protection system.</p> </dd> + + + <dd> <p>The number of bytes of in the buffer that <em>InputBuffer</em> specifies, including private data.</p> </dd> + + + <dd> <p>A reference to the data that you want to provide as input.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the length in bytes of the data that the function wrote to the buffer that <em>OutputBuffer</em> specifies, including the private data. </p> </dd> + + + <dd> <p>Pointer to the buffer where you want the function to write its output.</p> </dd> + + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Allows a decryptor to manage hardware keys and decrypt hardware samples.</p> + + + + <p> Allows the display driver to return {{IHV}}-specific information used when initializing a new hardware key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of bytes in the buffer that <em>InputPrivateData</em> specifies.</p> </dd> + + + <dd> <p>The contents of this parameter are defined by the implementation of the protection system that runs in the security processor. The contents may contain data about license or stream properties.</p> </dd> + + + <dd> <p>The return data is also defined by the implementation of the protection system implementation that runs in the security processor. The contents may contain data associated with the underlying hardware key.</p> </dd> + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + + + + + + + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p></p> + + + + <p></p> + + + + <p></p> + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + <p>Called by the media pipeline to get information about a transform provided by the sensor transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the transform for which information is being requested. In the current release, this value will always be 0.</p> </dd> + + + <dd> <p>Gets the identifier for the transform.</p> </dd> + + + <dd> <p>The attribute store to be populated.</p> </dd> + + + <dd> <p>A collection of <strong>{{IMFSensorStream}}</strong> objects.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the Media Session in the application's process.</p> + <p> If your application does not play protected content, you can use this function to create the Media Session in the application's process. To use the Media Session for protected content, you must call <strong>{{MFCreatePMPMediaSession}}</strong>. </p><p> You can use the <em>pConfiguration</em> parameter to specify any of the following attributes: </p><ul> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> <li> {{MF_LOW_LATENCY}} </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> Creates an instance of the Media Session inside a Protected Media Path ({{PMP}}) process. </p> + <p>You can use the <em>pConfiguration</em> parameter to set any of the following attributes:</p><ul> <li> <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_REMOTE_SOURCE_MODE}}</strong> </li> <li> <strong>{{MF_SESSION_SERVER_CONTEXT}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> </ul><p>If this function cannot create the {{PMP}} Media Session because a trusted binary was revoked, the <em>ppEnablerActivate</em> parameter receives an <strong>{{IMFActivate}}</strong> interface reference. The application can use this reference to create a content enabler object, which can then be used to download an updated binary:</p><ol> <li> Call <strong>{{IMFActivate::ActivateObject}}</strong> with the interface identifier {{IID_IMFContentEnabler}} to get an <strong>{{IMFContentEnabler}}</strong> interface reference. </li> <li> Use that interface to download the updated binary. </li> <li> Call <strong>{{MFCreatePMPMediaSession}}</strong> again. </li> </ol><p>If the function successfully creates the {{PMP}} Media Session, the <em>ppEnablerActivate</em> parameter receives the value <strong>{{NULL}}</strong>.</p><p>Do not make calls to the {{PMP}} Media Session from a thread that is processing a window message sent from another thread. To test whether the current thread falls into this category, call <strong>InSendMessage</strong>.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Creates the source resolver, which is used to create a media source from a {{URL}} or byte stream. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from mf.dll. Starting in Windows?7, this function is exported from mfplat.dll, and mf.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the source resolver's <strong>{{IMFSourceResolver}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create property stores.]</p><p> Creates an empty property store object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the {{URL}} schemes that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{URL}} schemes. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves the {{MIME}} types that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{MIME}} types. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates a topology object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology object. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> Creates a topology node.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The type of node to create, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the media type for a stream associated with a topology node.</p> + <p>This function gets the actual media type from the object that is associated with the topology node. The <em>pNode</em> parameter should specify a node that belongs to a fully resolved topology. If the node belongs to a partial topology, the function will probably fail. </p><p>Tee nodes do not have an associated object to query. For tee nodes, the function gets the node's input type, if available. Otherwise, if no input type is available, the function gets the media type of the node's primary output stream. The primary output stream is identified by the <strong>{{MF_TOPONODE_PRIMARYOUTPUT}}</strong> attribute.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + <dd> <p>The identifier of the stream to query. This parameter is interpreted as follows:</p> <ul> <li>Transform nodes: The value is the zero-based index of the input or output stream.</li> <li>All other node types: The value must be zero.</li> </ul> </dd> + + + <dd> <p><strong>If {{TRUE}}</strong>, the function gets an output type<strong>. If {{FALSE}}</strong>, the function gets an input type. This parameter is interpreted as follows:</p> <ul> <li>Output nodes: The value must be <strong>{{TRUE}}</strong>.</li> <li>Source nodes: The value must be <strong>{{FALSE}}</strong>.</li> <li>Tee nodes: The value is ignored.</li> <li>Transform nodes: If the value is <strong>{{TRUE}}</strong>, the <em>dwStreamIndex</em> parameter is the index for an output stream. Otherwise, <em>dwStreamIndex</em> is the index for an input stream.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries an object for a specified service interface.</p><p>This function is a helper function that wraps the <strong>{{IMFGetService::GetService}}</strong> method. The function queries the object for the <strong>{{IMFGetService}}</strong> interface and, if successful, calls <strong>GetService</strong> on the object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p> The service requested cannot be found in the object represented by <em>punkObject</em>. </p> </td></tr> </table><p>?</p> + + + + <p> Returns the system time. </p> + <p> Returns the system time, in 100-nanosecond units. </p> + + + + <p>Creates the presentation clock. The presentation clock is used to schedule the time at which samples are rendered and to synchronize multiple streams. +</p> + <p>The caller must shut down the presentation clock by calling <strong>{{IMFShutdown::Shutdown}}</strong> on the clock.</p><p>Typically applications do not create the presentation clock. The Media Session automatically creates the presentation clock. To get a reference to the presentation clock from the Media Session, call <strong>{{IMFMediaSession::GetClock}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a presentation time source that is based on the system time.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IMFPresentationTimeSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor.</p> + <p> If you are writing a custom media source, you can use this function to create the source presentation descriptor. The presentation descriptor is created with no streams selected. Generally, a media source should select at least one stream by default. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of elements in the <em>apStreamDescriptors</em> array.</p> </dd> + + + <dd> <p>Array of <strong>{{IMFStreamDescriptor}}</strong> interface references. Each reference represents a stream descriptor for one stream in the presentation.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Queries whether a media presentation requires the Protected Media Path ({{PMP}}).</p> + <p>If this function returns <strong>{{S_OK}}</strong>, it means the {{PMP}} is required for this presentation. Call <strong>{{MFCreatePMPMediaSession}}</strong> to create the {{PMP}} session object.</p><p>If the function returns <strong>{{S_FALSE}}</strong>, you can use the unprotected pipeline. Call <strong>{{MFCreateMediaSession}}</strong> to create the regular Media Session object.</p><p>Internally, this function checks whether any of the stream descriptors in the presentation have the <strong>{{MF_SD_PROTECTED}}</strong> attribute with the value <strong>{{TRUE}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>This presentation requires a protected environment.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{S_FALSE}}</strong></strong></dt> </dl> </td><td> <p>This presentation does not require a protected environment.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of a presentation descriptor. The presentation descriptor is created by the media source, and describes the presentation.</p> </dd> + + + + + <p> </p><p>Serializes a presentation descriptor to a byte array.</p> + <p>To deserialize the presentation descriptor, pass the byte array to the <strong>{{MFDeserializePresentationDescriptor}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor to serialize.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to an array of bytes containing the serialized presentation descriptor. The caller must free the memory for the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> </p><p>Deserializes a presentation descriptor from a byte array.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the <em>pbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Pointer to an array of bytes that contains the serialized presentation descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Creates a stream descriptor. </p> + <p> If you are writing a custom media source, you can use this function to create stream descriptors for the source. This function automatically creates the stream descriptor media type handler and initializes it with the list of types given in <em>apMediaTypes</em>. The function does not set the current media type on the handler, however. To set the type, call <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Stream identifier. </p> </dd> + + + <dd> <p> Number of elements in the <em>apMediaTypes</em> array. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{IMFMediaType}}</strong> interface references. These references are used to initialize the media type handler for the stream descriptor. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface of the new stream descriptor. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates a media-type handler that supports a single media type at a time.</p> + <p>The media-type handler created by this function supports one media type at a time. Set the media type by calling <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. After the type is set, <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong> always checks against that type.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface of the media-type handler. The caller must release the interface.</p> </dd> + + + + + <p>Shuts down a Media Foundation object and releases all resources associated with the object.</p><p>This function is a helper function that wraps the <strong>{{IMFShutdown::Shutdown}}</strong> method. The function queries the object for the <strong>{{IMFShutdown}}</strong> interface and, if successful, calls <strong>Shutdown</strong> on the object.</p> + <p>This function is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Creates the Streaming Audio Renderer. </p> + <p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFAttributes}}</strong> interface specified in the <em>pAudioAttributes</em> parameter.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the Streaming Audio Renderer.</p> + <p>To create the audio renderer, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference.</p><strong>Note</strong>??To avoid a memory leak, call <strong>{{IMFActivate::ShutdownObject}}</strong> before releasing the final reference to the audio renderer or the audio renderer activate object.?<p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the enhanced video renderer ({{EVR}}) media sink.</p> + <p>To create the {{EVR}}, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><p>To configure the {{EVR}}, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE}}</strong> </td><td>Activation object for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID}}</strong> </td><td>{{CLSID}} for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS}}</strong> </td><td>Flags for creating a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE}}</strong> </td><td>Activation object for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID}}</strong> </td><td>{{CLSID}} for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS}}</strong> </td><td>Flags for creating a custom presenter.</td></tr> </table><p>?</p><p>When <strong>{{IMFActivate::ActivateObject}}</strong> is called, the activation objects sets the video window on the {{EVR}} by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. Passing <strong>{{NULL}}</strong> for the <em>hwndVideo</em> parameter is not an error, but no video will render unless the {{EVR}} has a valid video window.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Handle to the window where the video will be displayed.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the {{EVR}}. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring {{MP4}} files.</p> + <p>The {{MP4}} media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author 3GP files, use the <strong>{{MFCreate3GPMediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring 3GP files.</p> + <p>The 3GP media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author {{MP4}} files, use the <strong>{{MFCreateMPEG4MediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the 3GP file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the 3GP media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the {{MP3}} media sink.</p> + <p> The {{MP3}} media sink takes compressed {{MP3}} +audio samples as input, and writes an {{MP3}} file with {{ID3}} headers as output. The {{MP3}} media sink does not perform {{MP3}} audio encoding. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP3}} file to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{MP3}} media sink.. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the {{AC}}-3 media sink.</p> + <p>The {{AC}}-3 media sink takes compressed {{AC}}-3 audio as input and writes the audio to the byte stream without modification. The primary use for this media sink is to stream {{AC}}-3 audio over a network. The media sink does not perform {{AC}}-3 audio encoding.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{AC}}-3 file to this byte stream. The byte stream must be writable. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{AC}}-3 audio stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_Dolby_AC3}}</strong> or <strong>{{MFAudioFormat_Dolby_DDPlus}}</strong></td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the audio data transport stream ({{ADTS}}) media sink.</p> + <p>The {{ADTS}} media sink converts Advanced Audio Coding ({{AAC}}) audio packets into an {{ADTS}} stream. The primary use for this media sink is to stream {{ADTS}} over a network. The output is not an audio file, but a stream of audio frames with {{ADTS}} headers.</p><p>The media sink can accept raw {{AAC}} frames ({{MF_MT_AAC_PAYLOAD_TYPE}} = 0) or {{ADTS}} packets ({{MF_MT_AAC_PAYLOAD_TYPE}} = 1). If the input is raw {{AAC}}, the media sink inserts an {{ADTS}} header at the start of each audio frame. If the input is {{ADTS}} packets, the media sink passes the packets through to the byte stream, without modification.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{ADTS}} stream to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{ADTS}} stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_AAC}}</strong></td></tr> <tr><td> {{MF_MT_AAC_PAYLOAD_TYPE}} </td><td>0 (raw {{AAC}}) or 1 ({{ADTS}})</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a generic media sink that wraps a multiplexer Microsoft Media Foundation transform ({{MFT}}).</p> + <p>This function attempts to find a multiplexer {{MFT}} that supports an output type with the following definition:</p><ul> <li>Major type: <strong>{{MFMediaType_Stream}}</strong></li> <li>Subtype: <em>guidOutputSubType</em></li> <li>Additional format attributes (optional)</li> </ul><p>To provide a list of additional format attributes:</p><ol> <li>Call <strong>{{MFCreateAttributes}}</strong> to get an <strong>{{IMFAttributes}}</strong> reference.</li> <li>Use the <strong>{{IMFAttributes}}</strong> interface to set the attributes. (See Media Type Attributes.)</li> <li>Pass the <strong>{{IMFAttributes}}</strong> reference in the <em>pOutputAttributes</em> parameter.</li> </ol><p>The multiplexer {{MFT}} must be registered in the <strong>{{MFT_CATEGORY_MULTIPLEXER}}</strong> category.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The subtype {{GUID}} of the output type for the {{MFT}}.</p> </dd> + + + <dd> <p>A list of format attributes for the {{MFT}} output type. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The output from the {{MFT}} is written to this byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring fragmented {{MP4}} files.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an Audio-Video Interleaved ({{AVI}}) Sink.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the byte stream that will be used to write the {{AVI}} file.</p> </dd> + + + <dd> <p>Pointer to the media type of the video input stream</p> </dd> + + + <dd> <p>Pointer to the media type of the audio input stream</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> Interface. The caller must release this interface.</p> </dd> + + + + + <p> Creates an {{WAVE}} archive sink. The {{WAVE}} archive sink takes +audio and writes it to an .wav file. +</p> + + + <dd> <p> Pointer to the byte stream that will be used to write the .wav file.</p> </dd> + + + <dd> <p>Pointer to the audio media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release this interface.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the topology loader.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopoLoader}}</strong> interface of the topology loader. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates an activation object for the sample grabber media sink.</p> + <p>To create the sample grabber sink, call <strong>{{IMFActivate::ActivateObject}}</strong> on the reference received in the <em>ppIActivate</em> parameter.</p><p>Before calling <strong>ActivateObject</strong>, you can configure the sample grabber by setting any of the following attributes on the <em>ppIActivate</em> reference:</p><ul> <li> {{MF_SAMPLEGRABBERSINK_IGNORE_CLOCK}} </li> <li> <strong>{{MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, defining the media type for the sample grabber's input stream. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to complete the creation of the sample grabber. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates the default implementation of the quality manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the quality manager's <strong>{{IMFQualityManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the sequencer source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved. Must be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSequencerSource}}</strong> interface of the sequencer source. The caller must release the interface.</p> </dd> + + + + + <p> Creates a <strong>{{PROPVARIANT}}</strong> that can be used to seek within a sequencer source presentation. </p> + <p> The <strong>{{PROPVARIANT}}</strong> returned in <em>pvarSegmentOffset</em> can be used for the <em>pvarStartPosition</em> parameter in the <strong>{{IMFMediaSession::Start}}</strong> method. Use the time format <strong>{{GUID}} {{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Sequencer element identifier. This value specifies the segment in which to begin playback. The element identifier is returned in the <strong>{{IMFSequencerSource::AppendTopology}}</strong> method. </p> </dd> + + + <dd> <p> Starting position within the segment, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong>. The method fills in the <strong>{{PROPVARIANT}}</strong> with the information needed for performing a seek operation. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Creates a media source that aggregates a collection of media sources. </p> + <p>The aggregated media source is useful for combining streams from separate media sources. For example, you can use it to combine a video capture source and an audio capture source. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <em>pSourceCollection</em> collection does not contain any elements.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCollection}}</strong> interface of the collection object that contains a list of media sources. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the aggregated media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a credential cache object. An application can use this object to implement a custom credential manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredentialCache}}</strong> interface of the new credential cache object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a default proxy locator.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The name of the protocol.</p> <strong>Note</strong>??In this release of Media Foundation, the default proxy locator does not support {{RTSP}}. ? </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains the proxy configuration in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the scheme handler for the network source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the protected media path ({{PMP}}) server object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MFPMPSESSION_CREATION_FLAGS}}</strong> enumeration that specifies how to create the {{PMP}} session.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPMPServer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the remote desktop plug-in object. Use this object if the application is running in a Terminal Services client session.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p>Remote desktop connections are not allowed by the current session policy.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface of the plug-in object. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create named property stores.]</p><p>Creates an empty property store to hold name/value pairs.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{INamedPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sample copier transform.</p> + <p>The sample copier is a Media Foundation transform ({{MFT}}) that copies data from input samples to output samples without modifying the data. The following data is copied from the sample:</p><ul> <li>All Sample Attributes.</li> <li>The time stamp and duration.</li> <li>Sample flags (see <strong>{{IMFSample::SetSampleFlags}}</strong>).</li> <li>The data in the media buffers. If the input sample contains multiple buffers, the data is copied into a single buffer on the output sample.</li> </ul><p>This {{MFT}} is useful in the following situation:</p><ul> <li>One pipeline object, such as a media source, allocates media samples for output.</li> <li>Another pipeline object, such as a media sink, allocates its own media samples for input. For example, the object might require buffers allocated from a special memory pool, such as video memory.</li> </ul><p>The following diagram shows this situation with a media source and a media sink.</p><p></p><p>In order for the media sink to receive data from the media source, the data must be copied into the media samples owned by the media sink. The sample copier can be used for this purpose.</p><p>A specific example of such a media sink is the Enhanced Video Renderer ({{EVR}}). The {{EVR}} allocates samples that contain Direct3D surface buffers, so it cannot receive video samples directly from a media source. Starting in Windows?7, the topology loader automatically handles this case by inserting the sample copier between the media source and the {{EVR}}.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an empty transcode profile object.</p><p>The transcode profile stores configuration settings for the output file. These configuration settings are specified by the caller, and include audio and video stream properties, encoder settings, and container settings. To set these properties, the caller must call the appropriate <strong>{{IMFTranscodeProfile}}</strong> methods.</p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function. The underlying topology builder uses these settings to build the transcode topology.</p> + <p>The <strong>{{MFCreateTranscodeProfile}}</strong> function creates an empty transcode profile. You must configure the transcode profile setting attributes that define the media types and the container properties. Use the following methods to configure the profile:</p><ul> <li> <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetContainerAttributes}}</strong> </li> </ul><p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a partial transcode topology.</p><p>The underlying topology builder creates a partial topology by connecting the required pipeline objects: +source, encoder, and sink. The encoder and the sink are configured according to the settings specified by the caller in the transcode profile. </p><p>To create the transcode profile object, call the <strong>{{MFCreateTranscodeProfile}}</strong> function and set the required attributes by calling the appropriate the <strong>{{IMFTranscodeProfile}}</strong> methods. </p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function, which creates the transcode topology with the appropriate settings. The caller can then set this topology on the Media Session and start the session to begin the encoding process. When the Media Session ends, the transcoded file is generated.</p> + <p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded, and <em>ppTranscodeTopo</em> receives a reference to the transcode topology.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwszOutputFilePath</em> contains invalid characters.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED}}</strong></dt> </dl> </td><td> <p>No streams are selected in the media source.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_CONTAINERTYPE}}</strong></dt> </dl> </td><td> <p>The profile does not contain the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>For one or more streams, cannot find an encoder that accepts the media type given in the profile.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS}}</strong></dt> </dl> </td><td> <p>The profile does not specify a media type for any of the selected streams on the media source.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a topology for transcoding to a byte stream.</p> + <p>This function creates a partial topology that contains the media source, the encoder, and the media sink. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source. The media source provides that source content for transcoding.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The transcoded output will be written to this byte stream.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface of a transcoding profile. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a list of output formats from an audio encoder.</p> + <p>This function assumes the encoder will be used in its default encoding mode, which is typically constant bit-rate ({{CBR}}) encoding. Therefore, the types returned by the function might not work with other modes, such as variable bit-rate ({{VBR}}) encoding.</p><p>Internally, this function works by calling <strong>{{MFTEnumEx}}</strong> to find a matching encoder, and then calling <strong>{{IMFTransform::GetOutputAvailableType}}</strong> to get the encoder's output types.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>Failed to find an encoder that matches the specified configuration settings.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the subtype of the output media. The encoder uses this value as a filter when it is enumerating the available output types. For information about the audio subtypes, see <strong>Audio Subtype {{GUIDs}}</strong>. </p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The attribute store specifies the encoder configuration settings. This parameter can be <strong>{{NULL}}</strong>. The attribute store can hold any of the following attributes.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFT_FIELDOFUSE_UNLOCK_Attribute}}</strong></dt> </dl> </td><td> <p>Set this attribute to unlock an encoder that has field-of-use descriptions.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_ENCODINGPROFILE}}</strong></dt> </dl> </td><td> <p>Specifies a device conformance profile for a Windows Media encoder.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_QUALITYVSSPEED}}</strong></dt> </dl> </td><td> <p>Sets the tradeoff between encoding quality and encoding speed.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object that contains a list of preferred audio media types. The collection contains <strong>{{IMFMediaType}}</strong> references. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates the transcode sink activation object.</p><p>The transcode sink activation object can be used to create any of the following file sinks:</p><ul> <li>3GP file sink</li> <li>{{MP3}} file sink</li> <li>{{MP4}} file sink</li> </ul><p>The transcode sink activation object exposes the <strong>{{IMFTranscodeSinkInfoProvider}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IMFTrackedSample}}</strong> object that tracks the reference counts on a video media sample.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IStream}}</strong> reference.</p> + <p>This function enables applications to pass an <strong>{{IStream}}</strong> object to a Media Foundation {{API}} that takes an <strong>{{IMFByteStream}}</strong> reference.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value.</p> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Returns an <strong>{{IStream}}</strong> reference that wraps a Microsoft Media Foundation byte stream.</p> + <p>This function enables an application to pass a Media Foundation byte stream to an {{API}} that takes an <strong>{{IStream}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IRandomAccessStream}}</strong> object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IRandomAccessStream}}</strong> object that wraps a Microsoft Media Foundation byte stream.</p> + <p>The returned byte stream object exposes the <strong>{{IMFGetService}}</strong> interface. To get the original <strong>{{IMFByteStream}}</strong> reference, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier <strong>{{MF_WRAPPED_OBJECT}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Create an <strong>{{IMFMediaType}}</strong> from properties.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates properties from a <strong>{{IMFMediaType}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enumerates a list of audio or video capture devices.</p> + <p>Each returned <strong>{{IMFActivate}}</strong> reference represents a capture device, and can be used to create a media source for that device. You can also use the <strong>{{IMFActivate}}</strong> reference to query for attributes that describe the device. The following attributes might be set:</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME}} </td><td>The display name of the device.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE}} </td><td>The major type and subtype {{GUIDs}} that describe the device's output format.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} </td><td>The type of capture device (audio or video).</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </td><td>The audio endpoint {{ID}} string. (Audio devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}} </td><td>The device category. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE}} </td><td> Whether a device is a hardware or software device. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </td><td>The symbolic link for the device driver. (Video devices only.)</td></tr> </table><p>?</p><p>To create a media source from an <strong>{{IMFActivate}}</strong> reference, call the <strong>{{IMFActivate::ActivateObject}}</strong> method.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an attribute store that contains search criteria. To create the attribute store, call <strong>{{MFCreateAttributes}}</strong>. Set one or more of the following attributes on the attribute store:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}}</strong></dt> </dl> </td><td> <p>Specifies whether to enumerate audio or video devices. (Required.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}}</strong></dt> </dl> </td><td> <p>For audio capture devices, specifies the device role. (Optional.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}}</strong></dt> </dl> </td><td> <p>For video capture devices, specifies the device category. (Optional.)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives an array of <strong>{{IMFActivate}}</strong> interface references. Each reference represents an activation object for a media source. The function allocates the memory for the array. The caller must release the references in the array and call <strong>CoTaskMemFree</strong> to free the memory for the array.</p> </dd> + + + <dd> <p>Receives the number of elements in the <em>pppSourceActivate</em> array. If no capture devices match the search criteria, this parameter receives the value 0.</p> </dd> + + + + + <p>Creates a media source for a hardware capture device.</p> + <strong>Important</strong>??When the capture device is no longer needed, you must shut down the device by calling <strong>Shutdown</strong> on the <strong>{{IMFMediaSource}}</strong> object you obtained by calling <strong>{{MFCreateDeviceSource}}</strong>. Failure to call <strong>Shutdown</strong> can result in memory links because the system may keep a reference to <strong>{{IMFMediaSource}}</strong> resources until <strong>Shutdown</strong> is called.?<p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IMFMediaSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object that represents a hardware capture device.</p> + <p>This function creates an activation object that can be used to create a media source for a hardware device. To create the media source itself, call <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object that allows content protection systems to perform a handshake with the protected environment.</p> + + + + <p>Loads a dynamic link library that is signed for the protected environment.</p> + <p>A singlemodule load count is maintained on the dynamic link library (as it is with <strong>LoadLibrary</strong>). This load count is freed when the final release is called on the <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + <dd> <p>The name of the dynamic link library to load. This dynamic link library must be signed for the protected environment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSignedLibrary}}</strong> interface for the library.</p> </dd> + + + + + <p>Returns an <strong>{{IMFSystemId}}</strong> object for retrieving system id data.</p> + + + + <p>Gets the local system {{ID}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p> + + + <dd> <p>Application-specific verifier value.</p> </dd> + + + <dd> <p>Length in bytes of verifier.</p> </dd> + + + <dd> <p>Returned {{ID}} string. This value must be freed by the caller by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentProtectionDevice}}</strong> interface for the specified media protection system.</p> + + + + <p>Checks whether a hardware security processor is supported for the specified media protection system.</p> + + + <dd> <p>The identifier of the protection system that you want to check.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the hardware security processor is supported for the specified protection system; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentDecryptorContext}}</strong> interface for the specified media protection system. </p> + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Creates an instance of the <strong>{{IMFSensorStream}}</strong> interface.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{IMFSensorGroup}}</strong> is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{LPCWSTR}}</strong> is null.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Used to determinine whether the adapter supports creating heaps from existing system memory. Such heaps are not intended for general use, but are exceptionally useful for diagnostic purposes because they are guaranteed to persist even after the adapter faults or experiences a device-removal event. Persistence is not guaranteed for heaps returned by CreateHeap or CreateCommittedResource, even when the heap resides in system memory.</p> + <p>For a variety of performance and compatibility reasons, applications should not make use of this feature except for diagnostic purposes. In particular, heaps created using this feature only support system-memory heaps with cross-adapter properties, which precludes many optimization opportunities that typical application scenarios could otherwise take advantage of.</p> + + + <dd> <p>True if the adapter can create a heap from existing system memory. Otherwise, false.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains flags that indicate the status of the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + <p>Contains flags for the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + + + + + + + + + + <p>Contains statistics about the performance of the sink writer.</p> + + + <dd> <p>The size of the structure, in bytes.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the sink writer. The sink writer updates this value each time the application calls <strong>{{IMFSinkWriter::WriteSample}}</strong>.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample to be encoded. The sink writer updates this value whenever it calls <strong>{{IMFTransform::ProcessOutput}}</strong> on the encoder.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the media sink. The sink writer updates this value whenever it calls <strong>{{IMFStreamSink::ProcessSample}}</strong> on the media sink.</p> </dd> + + + <dd> <p>The time stamp of the most recent stream tick. The sink writer updates this value whenever the application calls <strong>{{IMFSinkWriter::SendStreamTick}}</strong>.</p> </dd> + + + <dd> <p>The system time of the most recent sample request from the media sink. The sink writer updates this value whenever it receives an {{MEStreamSinkRequestSample}} event from the media sink. The value is the current system time.</p> </dd> + + + <dd> <p>The number of samples received.</p> </dd> + + + <dd> <p>The number of samples encoded.</p> </dd> + + + <dd> <p>The number of samples given to the media sink.</p> </dd> + + + <dd> <p>The number of stream ticks received.</p> </dd> + + + <dd> <p>The amount of data, in bytes, currently waiting to be processed. </p> </dd> + + + <dd> <p>The total amount of data, in bytes, that has been sent to the media sink.</p> </dd> + + + <dd> <p>The number of pending sample requests.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink.</p> </dd> + + + + + <p>Creates an instance of either the sink writer or the source reader.</p> + <p>To get a reference to this interface, call the <strong>CoCreateInstance</strong> function. The {{CLSID}} is <strong>{{CLSID_MFReadWriteClassFactory}}</strong>. Call the <strong>{{MFStartup}}</strong> function before using the interface.</p><p>As an alternative to using this interface, you can call any of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Internally, these functions use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Creates an instance of the sink writer or source reader, given a {{URL}}.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A null-terminated string that contains a {{URL}}. If <em>clsid</em> is {{CLSID_}}<strong>{{MFSinkWriter}}</strong>, the {{URL}} specifies the name of the output file. The sink writer creates a new file with this name. If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, the {{URL}} specifies the input file for the source reader.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sink writer or source reader, given an <strong>{{IUnknown}}</strong> reference. </p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object that is used to initialize the source reader or sink writer. The method queries this reference for one of the following interfaces.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IMFByteStream}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a byte stream. </p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>, the sink writer writes data to this byte stream.</p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, this byte stream provides the source data for the source reader.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSink}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media sink. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSource}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media source. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Implemented by the Microsoft Media Foundation source reader object.</p> + <p>To create the source reader, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSourceReaderEx}}</strong>.</p> + + + + <p>Queries whether a stream is selected.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the stream is selected and will generate data. Receives <strong>{{FALSE}}</strong> if the stream is not selected and will not generate data.</p> </dd> + + + + + <p>Selects or deselects one or more streams.</p> + <p>There are two common uses for this method:</p><ul> <li>To change the default stream selection. Some media files contain multiple streams of the same type. For example, a file might include audio streams for multiple languages. You can use this method to change which of the streams is selected. To get information about each stream, call <strong>{{IMFSourceReader::GetPresentationAttribute}}</strong> or <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If you will not need data from one of the streams, it is a good idea to deselect that stream. If the stream is selected, the media source might hold onto a queue of unread data, and the queue might grow indefinitely, consuming memory. </li> </ul><p>For an example of deselecting a stream, see Tutorial: Decoding Audio.</p><p>If a stream is deselected, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong> for that stream. Other <strong>{{IMFSourceReader}}</strong> methods are valid for deselected streams.</p><p>Stream selection does not affect how the source reader loads or unloads decoders in memory. In particular, deselecting a stream does not force the source reader to unload the decoder for that stream.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to select streams or <strong>{{FALSE}}</strong> to deselect streams. If a stream is deselected, it will not generate data.</p> </dd> + + + + + <p>Gets a format that is supported natively by the media source.</p> + <p>This method queries the underlying media source for its native output format. Potentially, each source stream can produce more than one output format. Use the <em>dwMediaTypeIndex</em> parameter to loop through the available formats. Generally, file sources offer just one format per stream, but capture devices might offer several formats.</p><p> The method returns a copy of the media type, so it is safe to modify the object received in the <em> ppMediaType</em> parameter.</p><p>To set the output type for a stream, call the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_MORE_TYPES}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the current media type for a stream.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets the media type for a stream.</p><p>This media type defines that format that the Source Reader produces as output. It can differ from the native format provided by the media source. See Remarks for more information.</p> + <p>For each stream, you can set the media type to any of the following:</p><ul> <li>One of the native types offered by the media source. To enumerate the native types, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If the native media type is compressed, you can specify a corresponding uncompressed format. The Source Reader will search for a decoder that can decode from the native format to the specified uncompressed format.</li> </ul><p>Audio resampling support was added to the source reader with Windows?8. In versions of Windows prior to Windows?8, the source reader does not support audio resampling. If you need to resample the audio in versions of Windows earlier than Windows?8, you can use the <strong>Audio Resampler {{DSP}}</strong>.</p><p>If you set the {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attribute to <strong>{{TRUE}}</strong> when you create the Source Reader, the Source Reader will convert {{YUV}} video to {{RGB}}-32. This conversion is not optimized for real-time video playback.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>At least one decoder was found for the native stream type, but the type specified by <em>pMediaType</em> was rejected.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find a decoder for the native stream type.</p> </td></tr> </table><p>?</p> + + + + <p>Seeks to a new position in the media source.</p> + <p>The <strong>SetCurrentPosition</strong> method does not guarantee exact seeking. The accuracy of the seek depends on the media content. If the media content contains a video stream, the <strong>SetCurrentPosition</strong> method typically seeks to the nearest key frame before the desired position. The distance between key frames depends on several factors, including the encoder implementation, the video content, and the particular encoding settings used to encode the content. The distance between key frame can vary within a single video file (for example, depending on scene complexity).</p><p>After seeking, the application should call <strong>{{IMFSourceReader::ReadSample}}</strong> and advance to the desired position. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that specifies the <em>time format</em>. The time format defines the units for the <em>varPosition</em> parameter. The following value is defined for all media sources:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>100-nanosecond units.</p> </td></tr> </table> <p>?</p> <p>Some media sources might support additional values. </p> </dd> + + + <dd> <p>The position from which playback will be started. The units are specified by the <em>guidTimeFormat</em> parameter. If the <em>guidTimeFormat</em> parameter is <strong>{{GUID_NULL}}</strong>, set the variant type to <strong>{{VT_I8}}</strong>.</p> </dd> + + + + + <p>Reads the next sample from the media source.</p> + <p>If the requested stream is not selected, the return code is <strong>{{MF_E_INVALIDREQUEST}}</strong>. See <strong>{{IMFSourceReader::SetStreamSelection}}</strong>.</p><p> This method can complete synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOTACCEPTING}}</strong></strong></dt> </dl> </td><td> <p>A flush operation is pending. See <strong>{{IMFSourceReader::Flush}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to pull data from. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ANY_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>Get the next available sample, regardless of which stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_CONTROL_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the time stamp of the sample, or the time of the stream event indicated in <em>pdwStreamFlags</em>. The time is given in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface or the value <strong>{{NULL}}</strong> (see Remarks). If this parameter receives a non-<strong>{{NULL}}</strong> reference, the caller must release the interface.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>The <strong>Flush</strong> method discards all queued samples and cancels all pending sample requests.</p><p>This method can complete either synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about the setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p><p>In synchronous mode, the method blocks until the operation is complete.</p><p>In asynchronous mode, the application's <strong>{{IMFSourceReaderCallback::OnFlush}}</strong> method is called when the flush operation completes. While a flush operation is pending, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_NOTACCEPTING}}</strong>.</p><strong>Note</strong>??In Windows?7, there was a bug in the implementation of this method, which causes <strong>OnFlush</strong> to be called before the flush operation completes. A hotfix is available that fixes this bug. For more information, see http://support.microsoft.com/kb/979567.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to flush. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Queries the underlying media source or decoder for an interface.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. If the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, the method queries the media source. Otherwise, it queries the decoder that is associated with the specified stream. The following values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A service identifier {{GUID}}. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls the <strong>{{IMFGetService::GetService}}</strong> method. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute from the underlying media source.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A {{GUID}} that identifies the attribute to retrieve. If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, <em>guidAttribute</em> can specify one of the following:</p> <ul> <li>A presentation descriptor attribute. For a list of values, see Presentation Descriptor Attributes.</li> <li> {{MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS}}. Use this value to get characteristics flags from the media source.</li> </ul> <p>Otherwise, if the <em>dwStreamIndex</em> parameter specifies a stream, <em>guidAttribute</em> specifies a stream descriptor attribute. For a list of values, see Stream Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value of the attribute. Call the <strong>PropVariantClear</strong> function to free the <strong>{{PROPVARIANT}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IMFSourceReader}}</strong> interface.</p><p>The Source Reader implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Source Reader.</p> + + + + <p>Sets the native media type for a stream on the media source.</p> + <p>This method sets the output type that is produced by the media source. Unlike the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method, this method does not insert any decoders, video processors, or other transforms. The media source must support the specified media type natively. To get a list of supported types from the media source, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>This method can trigger a change in the output format for the stream. If so, the <strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong> flag is returned in the <em>pdwStreamFlags</em> parameter. The method might also cause the Source Reader to remove any effects that were added by the <strong>{{IMFSourceReaderEx::AddTransformForStream}}</strong> method. If this occurs, the <strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong> flag is returned in <em>pdwStreamFlags</em>. </p><p>This method is useful with audio and video capture devices, because a device might support several output formats. This method enables the application to choose the device format before decoders and other transforms are added.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd></dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong></dt> </dl> </td><td> <p>All effects were removed from the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong></dt> </dl> </td><td> <p>The current output type changed.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Adds a transform, such as an audio or video effect, to a stream.</p> + <p>This method attempts to add the transform at the end of the current processing chain. </p><p>To use this method, make the following sequence of calls:</p><ol> <li>Call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> to set the output type that you want for the stream. In this step, you can specify a media type that contains only the major type and subtype {{GUIDs}}. For example, to get 32-bit {{RGB}} output, set a major type of <strong>{{MFMediaType_Video}}</strong> and a subtype of <strong>{{MFVideoFormat_RGB32}}</strong>. (For more information, see Media Type {{GUIDs}}.)</li> <li>Call <strong>AddTransformForStream</strong>. If the Source Reader successfully connects the transform, it sets the output type on the transform.</li> <li>Call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong> to get the output type from the transform. This method returns a media type with a complete format description.</li> <li>Optionally, if you want to modify the output type, call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> again to set a complete media type on the transform.</li> </ol><p>The <strong>AddTransformForStream</strong> method will not insert a decoder into the processing chain. If the native stream format is encoded, and the transform requires an uncompressed format, call <strong>SetCurrentMediaType</strong> to set the uncompressed format (step 1 in the previous list). However, the method will insert a video processor to convert between {{RGB}} and {{YUV}} formats, if required.</p><p>The method fails if the source reader was configured with the {{MF_READWRITE_DISABLE_CONVERTERS}} or {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attributes. </p><p>In asynchronous mode, the method also fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>You can add a transform at any time during streaming. However, the method does not flush or drain the pipeline before inserting the transform. Therefore, if data is already in the pipeline, the next sample is not guaranteed to have the transform applied.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The transform does not support the current stream format, and no conversion was possible. See Remarks for more information.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to configure. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following:</p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes all of the Media Foundation transforms ({{MFTs}}) for a specified stream, with the exception of the decoder.</p> + <p>Calling this method can reset the current output type for the stream. To get the new output type, call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream for which to remove the {{MFTs}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>You can use this method to configure an {{MFT}} after it is inserted into the processing chain. Do not use the reference returned in <em>ppTransform</em> to set media types on the {{MFT}} or to process data. In particular, calling any of the following <strong>{{IMFTransform}}</strong> methods could have unexpected results.</p><ul> <li> <strong>AddInputStreams</strong> </li> <li> <strong>DeleteInputStream</strong> </li> <li> <strong>ProcessEvent</strong> </li> <li> <strong>ProcessInput</strong> </li> <li> <strong>ProcessMessage</strong> </li> <li> <strong>ProcessOutput</strong> </li> <li> <strong>SetInputType</strong> </li> <li> <strong>SetOutputType</strong> </li> </ul><p>If a decoder is present, it appears at index position zero.</p><p>To avoid losing any data, you should drain the source reader before calling this method. For more information, see Draining the Data Pipeline.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>dwTransformIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query for the {{MFT}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation source reader.</p> + <p>Use the {{MF_SOURCE_READER_ASYNC_CALLBACK}} attribute to set the callback reference when you first create the source reader object.</p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>If you do not specify a callback reference, the source reader operates synchronously.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::ReadSample}}</strong> method completes.</p> + <p>The <em>pSample</em> parameter might be <strong>{{NULL}}</strong>. For example, when the source reader reaches the end of a stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_ENDOFSTREAM}}</strong> flag, and <em>pSample</em> is <strong>{{NULL}}</strong>. </p><p>If there is a gap in the stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_STREAMTICK}}</strong> flag, <em>pSample</em> is <strong>{{NULL}}</strong>, and <em>llTimestamp</em> indicates the time when the gap occurred. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::Flush}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the source reader receives certain events from the media source.</p> + <p>In the current implementation, the source reader uses this method to forward the following events to the application:</p><ul> <li> {{MEBufferingStarted}} </li> <li> {{MEBufferingStopped}} </li> <li> {{MEConnectEnd}} </li> <li> {{MEConnectStart}} </li> <li> {{MEExtendedType}} </li> <li> {{MESourceCharacteristicsChanged}} </li> <li> {{MESourceMetadataChanged}} </li> </ul><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + <dd> <p>For stream events, the value is the zero-based index of the stream that sent the event. For source events, the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface of the event.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSourceReaderCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSourceReader}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSourceReader}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + <p>Adds a stream to the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. This media type specifies the format of the samples that will be written to the file. It does not need to match the input format. To set the input format, call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong>.</p> </dd> + + + <dd> <p>Receives the zero-based index of the new stream.</p> </dd> + + + + + <p>Sets the input format for a stream on the sink writer.</p> + <p>The input format does not have to match the target format that is written to the media sink. If the formats do not match, the method attempts to load an encoder that can encode from the input format to the target format.</p><p>After streaming begins?that is, after the first call to <strong>{{IMFSinkWriter::WriteSample}}</strong>?you can call this method at any time to change the input format. However, the underlying encoder and media sink must support dynamic format changes.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>The underlying media sink does not support the format, no conversion is possible, or a dynamic format change is not possible.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find an encoder for the encoded format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream. The index is received by the <em>pdwStreamIndex</em> parameter of the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. The media type specifies the input format.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. Use the attribute store to configure the encoder. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Initializes the sink writer for writing.</p> + <p>Call this method after you configure the input streams and before you send any data to the sink writer. </p><p>You must call <strong>BeginWriting</strong> before calling any of the following methods:</p><ul> <li> <strong>{{IMFSinkWriter::Finalize}}</strong> </li> <li> <strong>{{IMFSinkWriter::Flush}}</strong> </li> <li> <strong>{{IMFSinkWriter::NotifyEndOfSegment}}</strong> </li> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>The underlying media sink must have at least one input stream. Otherwise, <strong>BeginWriting</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. To add input streams, call the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p><p>If <strong>BeginWriting</strong> succeeds, any further calls to <strong>BeginWriting</strong> return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + + <p>Delivers a sample to the sink writer.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>By default, the sink writer limits the rate of incoming data by blocking the calling thread inside the <strong>WriteSample</strong> method. This prevents the application from delivering samples too quickly. To disable this behavior, set the {{MF_SINK_WRITER_DISABLE_THROTTLING}} attribute when you create the sink writer.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream for this sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + + + <p>Indicates a gap in an input stream.</p> + <p>For video, call this method once for each missing frame. For audio, call this method at least once per second during a gap in the audio. Set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute on the first media sample after the gap.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>The position in the stream where the gap in the data occurs. The value is given in 100-nanosecond units, relative to the start of the stream.</p> </dd> + + + + + <p>Places a marker in the specified stream.</p> + <p>To use this method, you must provide an asynchronous callback when you create the sink writer. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}.</p><p>Markers provide a way to be notified when the media sink consumes all of the samples in a stream up to a certain point. The media sink does not process the marker until it has processed all of the samples that came before the marker. When the media sink processes the marker, the sink writer calls the application's <strong>OnMarker</strong> method. When the callback is invoked, you know that the sink has consumed all of the previous samples for that stream.</p><p>For example, to change the format midstream, call <strong>PlaceMarker</strong> at the point where the format changes. When <strong>OnMarker</strong> is called, it is safe to call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong> to change the input type (assuming that the media sink supports dynamic format changes).</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p> </p><strong>Note</strong>??The <em>pvContext</em> parameter of the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method is not passed to the <em>pvarContextValue</em> parameter of the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. These two parameters are not directly related.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Pointer to an application-defined value. The value of this parameter is returned to the caller in the <em>pvContext</em> parameter of the caller's <strong>{{IMFSinkWriterCallback::OnMarker}}</strong> callback method. The application is responsible for any memory allocation associated with this data. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Notifies the media sink that a stream has reached the end of a segment.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink for the specified streams. For more information, see <strong>{{IMFStreamSink::PlaceMarker}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to signal that all streams have reached the end of a segment.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>For each stream that is flushed, the sink writer drops all pending samples, flushes the encoder, and sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to flush, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to flush all of the streams.</p> </dd> + + + + + <p>Completes all writing operations on the sink writer.</p> + <p>Call this method after you send all of the input samples to the sink writer. The method performs any operations needed to create the final output from the media sink.</p><p>If you provide a callback interface when you create the sink writer, this method completes asynchronously. When the operation completes, the <strong>{{IMFSinkWriterCallback::OnFinalize}}</strong> method of your callback is called. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}. Otherwise, if you do not provide a callback, the <strong>Finalize</strong> method blocks until the operation completes.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> to place end-of-segment markers for each stream on the media sink. It also calls <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> and <strong>EndFinalize</strong> if the media sink supports the <strong>{{IMFFinalizableMediaSink}}</strong> interface.</p><p>After this method is called, the following methods will fail:</p><ul> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>If you do not call <strong>Finalize</strong>, the output from the media sink might be incomplete or invalid. For example, required file headers might be missing from the output file.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries the underlying media sink or encoder for an interface.</p> + <p>If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong>, the method attempts to get the interface from the media sink. Otherwise, it attempts to get the interface from the encoder for the stream at the specified index. If that fails, or if no encoder is present, the method attempts to get the interface from the stream on the media sink.</p><p> If the input and output types of the sink are identical and compressed, it's possible that no encoding is required and the video encoder will not be instantiated. In that case, <strong>GetServiceForStream</strong> will return {{MF_E_UNSUPPORTED_SERVICE}}. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A service identifier {{GUID}}, or <strong>{{GUID_NULL}}</strong>. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls <strong>{{IMFGetService::GetService}}</strong>. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets statistics about the performance of the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}} </strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MF_SINK_WRITER_STATISTICS}}</strong> structure. Before calling the method, set the <strong>cb</strong> member to the size of the structure in bytes. The method fills the structure with statistics from the sink writer.</p> </dd> + + + + + <p>Extends the <strong>{{IMFSinkWriter}}</strong> interface.</p><p>The Sink Writer implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Sink Writer.</p> + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream.</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a reference to a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Provides additional functionality on the sink writer for dynamically changing the media type and encoder configuration. </p> + <p>The Sink Writer implements this interface in Windows?8.1. To get a reference to this interface, call <strong>QueryInterface</strong> on the <strong>{{IMFSinkWriter}}</strong>.</p> + + + + <p>Dynamically changes the target media type that Sink Writer is encoding to. </p> + <p>The new media type must be supported by the media sink being used and by the encoder {{MFTs}} installed on the system. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>The new media format to encode to.</p> </dd> + + + <dd> <p>The new set of encoding parameters to configure the encoder with. If not specified, previously provided parameters will be used. +</p> </dd> + + + + + <p>Dynamically updates the encoder configuration with a collection of new encoder settings.</p> + <p>The encoder will be configured with these settings after all previously queued input media samples have been sent to it through <strong>{{IMFTransform::ProcessInput}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>A set of encoding parameters to configure the encoder with. </p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation sink writer. </p> + <p>Set the callback reference by setting the {{MF_SINK_WRITER_ASYNC_CALLBACK}} attribute when you first create the sink writer. </p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::Finalize}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSinkWriterCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSinkWriter}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSinkWriter}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Creates the source reader from a {{URL}}.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong> method to create a media source from the {{URL}}. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of a media file to open.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This byte stream will provide the source data for the source reader.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a media source.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>By default, when the application releases the source reader, the source reader shuts down the media source by calling <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source. At that point, the application can no longer use the media source.</p><p>To change this default behavior, set the {{MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN}} attribute in the <em>pAttributes</em> parameter. If this attribute is <strong>{{TRUE}}</strong>, the application is responsible for shutting down the media source.</p><p>When using the Source Reader, do not call any of the following methods on the media source:</p><ul> <li> <strong>{{IMFMediaSource::Pause}}</strong> </li> <li> <strong>{{IMFMediaSource::Start}}</strong> </li> <li> <strong>{{IMFMediaSource::Stop}}</strong> </li> <li>All <strong>{{IMFMediaEventGenerator}}</strong> methods</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The source contains protected content.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a {{URL}} or byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>The first three parameters to this function can be <strong>{{NULL}}</strong>; however, only certain combinations are valid:</p><p> </p><table> <tr><th>Description</th><th><em>pwszOutputURL</em></th><th><em>pByteStream</em></th><th><em>pAttributes</em></th></tr> <tr><td>Specify a byte stream, with no {{URL}}.</td><td><strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Required (must not be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify a {{URL}}, with no byte stream.</td><td>not <strong>{{NULL}}</strong></td><td><strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify both a {{URL}} and a byte stream.</td><td>non-<strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> </table><p>?</p><p>The <em>pAttributes</em> parameter is required in the first case and optional in the others.</p><ul> <li>Case 1: Specify a byte stream without a {{URL}}. The <em>pAttributes</em> parameter must point to an attribute store that contains the {{MF_TRANSCODE_CONTAINERTYPE}} attribute. The sink writer uses the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to determine the type of file container to write, such as {{ASF}} or {{MP4}}.</li> <li>Case 2: Specify a {{URL}} without a byte stream. The sink writer creates a new file named <em>pwszOutputURL</em>. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, if the {{MF_TRANSCODE_CONTAINERTYPE}} attribute is absent or <em>pAttributes</em> is <strong>{{NULL}}</strong>, the sink writer uses the file name extension to select the container type; for example, ".asf" for an {{ASF}} file.</li> <li>Case 3: Specify both a {{URL}} and a byte stream. The sink writer writes to the byte stream. The {{URL}} provided in <em>pwszOutputURL</em> is informational only; the sink writer does not create a new file. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, the sink writer uses the file name extension to select the container type. The {{MF_TRANSCODE_CONTAINERTYPE}} attribute overrides the {{URL}} file name extension in this case.</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified {{URL}} was not found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If this parameter is a valid reference, the sink writer writes to the provided byte stream. (The byte stream must be writable.) Otherwise, if <em>pByteStream</em> is <strong>{{NULL}}</strong>, the sink writer creates a new file named <em>pwszOutputURL</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a media sink.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>When you are done using the media sink, call the media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method. (The sink writer does not shut down the media sink.) Release the sink writer before calling <strong>Shutdown</strong> on the media sink.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaSink}}</strong> interface of a media sink. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Defines the data type for a key/value pair.</p> + + + <dd> <p>Unsigned 32-bit integer.</p> </dd> + + + <dd> <p>Unsigned 64-bit integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p><strong>{{GUID}}</strong> value.</p> </dd> + + + <dd> <p>{{NULL}}-terminated wide-character string.</p> </dd> + + + <dd> <p>Byte array.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference.</p> </dd> + + + + + <p> </p><p>Specifies how to compare the attributes on two objects.</p> + + + <dd> <p>Check whether all the attributes in <em>pThis</em> exist in <em>pTheirs</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether all the attributes in <em>pTheirs</em> exist in <em>pThis</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether both objects have identical attributes with the same data.</p> </dd> + + + <dd> <p>Check whether the attributes that exist in both objects have the same data.</p> </dd> + + + <dd> <p>Find the object with the fewest number of attributes, and check if those attributes exist in the other object and have the same data.</p> </dd> + + + + + <p> </p><p>Defines flags for serializing and deserializing attribute stores.</p> + + + <dd> <p>If this flag is set, <strong>{{IUnknown}}</strong> references in the attribute store are marshaled to and from the stream. If this flag is absent, <strong>{{IUnknown}}</strong> references in the attribute store are not marshaled or serialized.</p> </dd> + + + + + <p>Contains flags for the <strong>{{IMF2DBuffer2::Lock2DSize}}</strong> method.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Specifies the conversion function from linear {{RGB}} to non-linear {{RGB}} (R'G'B'). </p> + <p> These flags are used with the <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferFunction}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown. Treat as {{MFVideoTransFunc_709}}. </p> </dd> + + + <dd> <p> Linear {{RGB}} (gamma = 1.0). </p> </dd> + + + <dd> <p> True 1.8 gamma, L' = L^1/1.8. </p> </dd> + + + <dd> <p> True 2.0 gamma, L' = L^1/2.0. </p> </dd> + + + <dd> <p> True 2.2 gamma, L' = L^1/2.2. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709 transfer function. Gamma 2.2 curve with a linear segment in the lower range. This transfer function is used in {{BT}}.709, {{BT}}.601, {{SMPTE}} 296M, {{SMPTE}} 170M, {{BT}}.470, and {{SPMTE}} 274M. In addition {{BT}}-1361 uses this function within the range [0...1]. </p> </dd> + + + <dd> <p> {{SPMTE}} 240M transfer function. Gamma 2.2 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> sRGB transfer function. Gamma 2.4 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> True 2.8 gamma. L' = L^1/2.8. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System B, G ({{PAL}}). </p> </dd> + + + <dd> <p>Logarithmic transfer (100:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Logarithmic transfer (316.22777:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Symmetric {{ITU}}-R {{BT}}.709.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p>Specifies the color primaries of a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoPrimaries}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p> The color primaries are unknown. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709. Also used for sRGB and scRGB. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System B,G ({{NTSC}}). </p> </dd> + + + <dd> <p> {{SMPTE}} 170M. </p> </dd> + + + <dd> <p> {{SMPTE}} 240M. </p> </dd> + + + <dd> <p> {{EBU}} 3213. </p> </dd> + + + <dd> <p> {{SMPTE}} C ({{SMPTE}} {{RP}} 145). </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> </p><p>Describes the optimal lighting for viewing a particular set of video content.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> attribute.</p> + + + <dd> <p>The optimal lighting is unknown.</p> </dd> + + + <dd> <p>Bright lighting; for example, outdoors.</p> </dd> + + + <dd> <p>Medium brightness; for example, normal office lighting.</p> </dd> + + + <dd> <p>Dim; for example, a living room with a television and additional low lighting.</p> </dd> + + + <dd> <p>Dark; for example, a movie theater.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Describes the conversion matrices between Y'PbPr (component video) and studio R'G'B'.</p> + <p>This enumeration is used with the <strong>{{MF_MT_YUV_MATRIX}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferMatrix}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown transfer matrix. Treat as {{MFVideoTransferMatrix_BT709}}.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.709 transfer matrix.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.601 transfer matrix. Also used for {{SMPTE}} 170 and {{ITU}}-R {{BT}}.470-2 System B,G.</p> </dd> + + + <dd> <p>{{SMPTE}} 240M transfer matrix.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Contains flags that define the chroma encoding scheme for Y'Cb'Cr' data.</p> + <p>These flags are used with the <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoChromaSubSampling}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown encoding scheme.</p> </dd> + + + <dd> <p>Chroma should be reconstructed as if the underlying video was progressive content, rather than skipping fields or applying chroma filtering to minimize artifacts from reconstructing 4:2:0 interlaced chroma.</p> </dd> + + + <dd> <p>Chroma samples are aligned horizontally with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel to the right of the corresponding luma sample.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel down from the corresponding luma sample.</p> </dd> + + + <dd> <p>The U and V planes are aligned vertically. If this flag is not set, the chroma planes are assumed to be out of phase by 1/2 chroma sample, alternating between a line of U followed by a line of V.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-2 video. Chroma samples are aligned horizontally with the luma samples, but are not aligned vertically. The U and V planes are aligned vertically.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-1 video.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{PAL}} {{DV}} video.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically and horizontally with the luma samples. {{YUV}} formats such as 4:4:4, 4:2:2, and 4:1:1 are always cosited in both directions and should use this flag.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p>Specifies whether color data includes headroom and toeroom. Headroom allows for values beyond 1.0 white ("whiter than white"), and toeroom allows for values below reference 0.0 black ("blacker than black"). </p> + <p> This enumeration is used with the <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_NominalRange}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown nominal range. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_0_255}}. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_16_235}}. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [0...255] for 8-bit samples or [0...1023] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [16...235] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0..1] maps to [48...208] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p>The normalized range [0..1] maps to [64...127] for 8-bit samples or [256...508] for 10-bit samples. This range is used in the xRGB color space.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Contains flags that describe a video stream.</p><p>These flags are used in the <strong>{{MFVideoInfo}}</strong> structure, which is part of the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. The following table lists the attributes that correspond to the flags defined in this enumeration.</p><table> <tr><th>Flags</th><th>Media Type Attribute</th></tr> <tr><td> <p>{{MFVideoFlag_PAD_TO_None}}</p> <p>{{MFVideoFlag_PAD_TO_4x3}}</p> <p>{{MFVideoFlag_PAD_TO_16x9}}</p> </td><td> <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint235_1}}</p> </td><td> <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_AnalogProtected}}</p> <p>{{MFVideoFlag_DigitallyProtected}}</p> </td><td> <strong>{{MF_MT_DRM_FLAGS}}</strong> </td></tr> <tr><td>{{MFVideoFlag_PanScanEnabled}}</td><td> <strong>{{MF_MT_PAN_SCAN_ENABLED}}</strong> </td></tr> <tr><td>{{MFVideoFlag_BottomUpLinearRep}}</td><td>Use the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute to specify a negative stride.</td></tr> </table><p>?</p><p>The following flags were defined to describe per-sample interlacing information, but are obsolete:</p><ul> <li> {{MFVideoFlag_ProgressiveContent}} </li> <li> {{MFVideoFlag_FieldRepeatCountMask}} </li> <li> {{MFVideoFlag_FieldRepeatCountShift}} </li> <li> {{MFVideoFlag_ProgressiveSeqReset}} </li> <li> {{MFVideoFlag_LowerFieldFirst}} </li> </ul><p>Instead, components should use sample attributes to describe per-sample interlacing information, as described in the topic Video Interlacing.</p> + + + + <p> </p><p>Contains values that specify common video formats.</p> + + + <dd> <p>Reserved; do not use.</p> </dd> + + + <dd> <p>{{NTSC}} television (720 x 480i).</p> </dd> + + + <dd> <p>{{PAL}} television (720 x 576i).</p> </dd> + + + <dd> <p>{{DVD}}, {{NTSC}} standard (720 x 480).</p> </dd> + + + <dd> <p>{{DVD}}, {{PAL}} standard (720 x 576).</p> </dd> + + + <dd> <p>{{DV}} video, {{PAL}} standard.</p> </dd> + + + <dd> <p>{{DV}} video, {{NTSC}} standard.</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{SD}} (480i).</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} interlaced (1080i)</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} progressive (720p)</p> </dd> + + + + + + + + <p> </p><p>Specifies the origin for a seek request.</p> + + + <dd> <p>The seek position is specified relative to the start of the stream.</p> </dd> + + + <dd> <p>The seek position is specified relative to the current read/write position in the stream.</p> </dd> + + + + + <p> </p><p>Specifies the requested access mode for opening a file.</p> + + + <dd> <p>Read mode.</p> </dd> + + + <dd> <p>Write mode.</p> </dd> + + + <dd> <p>Read and write mode.</p> </dd> + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p> Specifies the behavior when opening a file. </p> + + + <dd> <p> Use the default behavior. </p> </dd> + + + <dd> <p> Open the file with no system caching. </p> </dd> + + + <dd> <p>Subsequent open operations can have write access to the file. </p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Specifies the object type for the <strong>{{IMFPluginControl}}</strong> interface.</p> + + + + <p>Defines policy settings for the <strong>{{IMFPluginControl2::SetPolicy}}</strong> method.</p> + + + + + + + <p>Contains media type information for registering a Media Foundation transform ({{MFT}}). </p> + + + <dd> <p>The major media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>The media subtype. For a list of possible values, see the following topics:</p> <ul> <li> Audio Subtype {{GUIDs}} </li> <li> Video Subtype {{GUIDs}} </li> </ul> </dd> + + + + + <p> </p><p>Represents a ratio.</p> + + + <dd> <p>Numerator of the ratio.</p> </dd> + + + <dd> <p>Denominator of the ratio.</p> </dd> + + + + + <p> Specifies an offset as a fixed-point real number. </p> + <p> The value of the number is <strong>value</strong> + (<strong>fract</strong> / 65536.0f).</p> + + + <dd> <p> The fractional part of the number. </p> </dd> + + + <dd> <p> The integer part of the number. </p> </dd> + + + + + <p> Specifies a rectangular area within a video frame. </p> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the x-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the y-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> A <strong>{{SIZE}}</strong> structure that contains the width and height of the rectangle. </p> </dd> + + + + + <p> </p><p>Contains video format information that applies to both compressed and uncompressed formats.</p><p>This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVideoInfo}}</strong> structure. The following table lists the attributes that correspond to the members of this structure.</p><table> <tr><th>Structure Member</th><th>Media Type Attribute</th></tr> <tr><td><strong>dwWidth</strong>, <strong>dwHeight</strong></td><td> <strong>{{MF_MT_FRAME_SIZE}}</strong> </td></tr> <tr><td><strong>PixelAspectRatio</strong></td><td> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </td></tr> <tr><td><strong>SourceChromaSubsampling</strong></td><td> <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> </td></tr> <tr><td><strong>InterlaceMode</strong></td><td> <strong>{{MF_MT_INTERLACE_MODE}}</strong> </td></tr> <tr><td><strong>TransferFunction</strong></td><td> <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> </td></tr> <tr><td><strong>ColorPrimaries</strong></td><td> <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> </td></tr> <tr><td><strong>TransferMatrix</strong></td><td> <strong>{{MF_MT_YUV_MATRIX}}</strong> </td></tr> <tr><td><strong>SourceLighting</strong></td><td> <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> </td></tr> <tr><td><strong>FramesPerSecond</strong></td><td> <strong>{{MF_MT_FRAME_RATE}}</strong> </td></tr> <tr><td><strong>NominalRange</strong></td><td> <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> </td></tr> <tr><td><strong>GeometricAperture</strong></td><td> <strong>{{MF_MT_GEOMETRIC_APERTURE}}</strong> </td></tr> <tr><td><strong>MinimumDisplayAperture</strong></td><td> <strong>{{MF_MT_MINIMUM_DISPLAY_APERTURE}}</strong> </td></tr> <tr><td><strong>PanScanAperture</strong></td><td> <strong>{{MF_MT_PAN_SCAN_APERTURE}}</strong> </td></tr> <tr><td><strong>VideoFlags</strong></td><td>See <strong>{{MFVideoFlags}}</strong>.</td></tr> </table><p>?</p> + + + + <p> </p><p>Describes a 4:4:4:4 Y'Cb'Cr' sample.</p> + + + <dd> <p>Cr (chroma difference) value.</p> </dd> + + + <dd> <p>Cb (chroma difference) value.</p> </dd> + + + <dd> <p>Y (luma) value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p> </p><p>Describes an {{ARGB}} color value.</p> + + + <dd> <p>Blue value.</p> </dd> + + + <dd> <p>Green value.</p> </dd> + + + <dd> <p>Red value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p>Contains one palette entry in a color table.</p> + <p>This union can be used to represent both {{RGB}} palettes and Y'Cb'Cr' palettes. The video format that defines the palette determines which union member should be used.</p> + + + <dd> <p> <strong>{{MFARGB}}</strong> structure that contains an {{RGB}} color.</p> </dd> + + + <dd> <p> <strong>{{MFAYUVSample}}</strong> structure that contains a Y'Cb'Cr' color.</p> </dd> + + + + + <p> </p><p>Contains information about an uncompressed video format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + + + + <p> </p><p>Contains information about a video compression format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>For uncompressed video formats, set the structure members to zero.</p> + + + + <p> </p><p>Describes a video format.</p> + <p>Applications should avoid using this structure. Instead, it is recommended that applications use attributes to describe the video format. For a list of media type attributes, see Media Type Attributes. With attributes, you can set just the format information that you know, which is easier (and more likely to be accurate) than trying to fill in complete format information for the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><p>To initialize a media type object from an <strong>{{MFVIDEOFORMAT}}</strong> structure, call <strong>{{MFInitMediaTypeFromMFVideoFormat}}</strong>.</p><p>You can use the <strong>{{MFVIDEOFORMAT}}</strong> structure as the format block for a DirectShow media type. Set the format {{GUID}} to {{FORMAT_MFVideoFormat}}.</p> + + + <dd> <p>Size of the structure, in bytes. This value includes the size of the palette entries that may appear after the <strong>surfaceInfo</strong> member.</p> </dd> + + + <dd> <p> <strong>{{MFVideoInfo}}</strong> structure. This structure contains information that applies to both compressed and uncompressed formats.</p> </dd> + + + <dd> <p>Video subtype. See Video Subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> <strong>{{MFVideoCompressedInfo}}</strong> structure. This structure contains information that applies only to compressed formats.</p> </dd> + + + <dd> <p> <strong>{{MFVideoSurfaceInfo}}</strong> structure. This structure contains information that applies only to uncompressed formats.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies which value to retrieve. </p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value, if the value is found. Call <strong>PropVariantClear</strong> to free the memory allocated by this method. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the method searches for the key and returns {{S_OK}} if the key is found, but does not copy the value.</p> </dd> + + + + + <p> </p><p>Retrieves the data type of the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key is not stored in this object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Queries whether a stored attribute value equals to a specified <strong>{{PROPVARIANT}}</strong>.</p> + <p>The method sets <em>pbResult</em> to <strong>{{FALSE}}</strong> for any of the following reasons:</p><ul> <li> <p>No attribute is found whose key matches the one given in <em>guidKey</em>.</p> </li> <li> <p>The attribute's <strong>{{PROPVARIANT}}</strong> type does not match the type given in <em>Value</em>.</p> </li> <li> <p>The attribute value does not match the value given in <em>Value</em>.</p> </li> <li> <p>The method fails.</p> </li> </ul><p>Otherwise, the method sets <em>pbResult</em> to <strong>{{TRUE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p><strong>{{PROPVARIANT}}</strong> that contains the value to compare.</p> </dd> + + + <dd> <p>Receives a Boolean value indicating whether the attribute matches the value given in <em>Value</em>. See Remarks. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Compares the attributes on this object with the attributes on another object.</p> + <p>If <em>pThis</em> is the object whose <strong>Compare</strong> method is called, and <em>pTheirs</em> is the object passed in as the <em>pTheirs</em> parameter, the following comparisons are defined by <em>MatchType</em>.</p><table> <tr><th>Match type</th><th>Returns <strong>{{TRUE}}</strong> if and only if</th></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_OUR_ITEMS}}</strong></td><td>For every attribute in <em>pThis</em>, an attribute with the same key and value exists in <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_THEIR_ITEMS}}</strong></td><td>For every attribute in <em>pTheirs</em>, an attribute with the same key and value exists in <em>pThis</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_ALL_ITEMS}}</strong></td><td>The key/value pairs are identical in both objects.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_INTERSECTION}}</strong></td><td>Take the intersection of the keys in <em>pThis</em> and the keys in <em>pTheirs</em>. The values associated with those keys are identical in both <em>pThis</em> and <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_SMALLER}}</strong></td><td>Take the object with the smallest number of attributes. For every attribute in that object, an attribute with the same key and value exists in the other object.</td></tr> </table><p>?</p><p>The <em>pTheirs</em> and <em>pbResult</em> parameters must not be <strong>{{NULL}}</strong>. If either parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the object to compare with this object.</p> </dd> + + + <dd> <p>Member of the <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong> enumeration, specifying the type of comparison to make.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the two sets of attributes match in the way specified by the <em>MatchType</em> parameter. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT32}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>{{UINT32}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT32}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT32}}</strong> value. If the key is found and the data type is <strong>{{UINT32}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT64}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a <strong>{{UINT64}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT64}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT64}}</strong> value. If the key is found and the data type is <strong>{{UINT64}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>double</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>double</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>double</strong> value. If the key is found and the data type is <strong>double</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_GUID}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} value. If the key is found and the data type is {{GUID}}, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves the length of a string value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives the number of characters in the string, not including the terminating <strong>{{NULL}}</strong> character. To get the string value, call <strong>{{IMFAttributes::GetString}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a wide-character string associated with a key.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedString}}</strong> method, which allocates the buffer to hold the string.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The length of the string is too large to fit in a <strong>{{UINT32}}</strong> value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to hold the string.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a wide-character array allocated by the caller. The array must be large enough to hold the string, including the terminating <strong>{{NULL}}</strong> character. If the key is found and the value is a string type, the method copies the string into this buffer. To find the length of the string, call <strong>{{IMFAttributes::GetStringLength}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pwszValue</em> array, in characters. This value includes the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets a wide-character string associated with a key. This method allocates the memory for the string. </p> + <p>To copy a string value into a caller-allocated buffer, use the <strong>{{IMFAttributes::GetString}}</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><strong>Note</strong>??An earlier version of the documentation incorrectly stated that the <em>pcchLength</em> parameter can be <strong>{{NULL}}</strong>. Setting this parameter to <strong>{{NULL}}</strong> might succeed in some cases, but is not guaranteed. The caller must pass a non-<strong>{{NULL}}</strong> reference for this parameter.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a string. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>. </p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives a copy of the string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + <dd> <p> Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter must not be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves the length of a byte array associated with a key.</p> + <p>To get the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a byte array, this parameter receives the size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves a byte array associated with a key. This method copies the array into a caller-allocated buffer.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedBlob}}</strong> method, which allocates the buffer to hold the byte array.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></strong></dt> </dl> </td><td> <p>The buffer is not large enough to the array.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDTYPE}}</strong></strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer allocated by the caller. If the key is found and the value is a byte array, the method copies the array into this buffer. To find the required size of the buffer, call <strong>{{IMFAttributes::GetBlobSize}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pBuf</em> buffer, in bytes.</p> </dd> + + + <dd> <p>Receives the size of the byte array. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an interface reference associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The attribute value is an <strong>{{IUnknown}}</strong> reference but does not support requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_IUNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds an attribute value with a specified key. </p> + <p> This method checks whether the <strong>{{PROPVARIANT}}</strong> type is one of the attribute types defined in <strong>{{MF_ATTRIBUTE_TYPE}}</strong>, and fails if an unsupported type is used. However, this method does not check whether the <strong>{{PROPVARIANT}}</strong> is the correct type for the specified attribute {{GUID}}. (There is no programmatic way to associate attribute {{GUIDs}} with property types.) For a list of Media Foundation attributes and their data types, see Media Foundation Attributes. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p> Insufficient memory. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> Invalid attribute type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value. </p> </dd> + + + <dd> <p> A <strong>{{PROPVARIANT}}</strong> that contains the attribute value. The method copies the value. The <strong>{{PROPVARIANT}}</strong> type must be one of the types listed in the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + + + <p> </p><p>Removes a key/value pair from the object's attribute list.</p> + <p>If the specified key does not exist, the method returns <strong>{{S_OK}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to delete.</p> </dd> + + + + + <p> </p><p>Removes all key/value pairs from the object's attribute list.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Associates a <strong>{{UINT32}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT32}}</strong> value, call <strong>{{IMFAttributes::GetUINT32}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>{{UINT64}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT64}}</strong> value, call <strong>{{IMFAttributes::GetUINT64}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>double</strong> value with a key.</p> + <p>To retrieve the double value, call <strong>{{IMFAttributes::GetDouble}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a {{GUID}} value with a key.</p> + <p>To retrieve the {{GUID}} value, call <strong>{{IMFAttributes::GetGUID}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a wide-character string with a key.</p> + <p>To retrieve the string, call <strong>{{IMFAttributes::GetString}}</strong> or <strong>{{IMFAttributes::GetAllocatedString}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Null-terminated wide-character string to associate with this key. The method stores a copy of the string.</p> </dd> + + + + + <p> </p><p>Associates a byte array with a key.</p> + <p>To retrieve the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong> or <strong>{{IMFAttributes::GetAllocatedBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Pointer to a byte array to associate with this key. The method stores a copy of the array.</p> </dd> + + + <dd> <p>Size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Associates an <strong>{{IUnknown}}</strong> reference with a key.</p> + <p>To retrieve the <strong>{{IUnknown}}</strong> reference, call <strong>{{IMFAttributes::GetUnknown}}</strong>.</p><p>It is not an error to call <strong>SetUnknown</strong> with <em>pUnknown</em> equal to <strong>{{NULL}}</strong>. However, <strong>GetUnknown</strong> will return <strong>{{MF_E_INVALIDTYPE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference to be associated with this key.</p> </dd> + + + + + <p> </p><p>Locks the attribute store so that no other thread can access it. If the attribute store is already locked by another thread, this method blocks until the other thread unlocks the object. After calling this method, call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the object.</p> + <p>This method can cause a deadlock if a thread that calls <strong>LockStore</strong> waits on a thread that calls any other <strong>{{IMFAttributes}}</strong> methods on the same object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the attribute store after a call to the <strong>{{IMFAttributes::LockStore}}</strong> method. While the object is unlocked, multiple threads can access the object's attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the number of attributes that are set on this object.</p> + <p>To enumerate all of the attributes, call <strong>{{IMFAttributes::GetItemByIndex}}</strong> for each index value.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of attributes. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Retrieves an attribute at the specified index.</p> + <p>To enumerate all of an object's attributes in a thread-safe way, do the following:</p><ol> <li> <p>Call <strong>{{IMFAttributes::LockStore}}</strong> to prevent another thread from adding or deleting attributes.</p> </li> <li> <p>Call <strong>{{IMFAttributes::GetCount}}</strong> to find the number of attributes.</p> </li> <li> <p>Call <strong>GetItemByIndex</strong> to get each attribute by index.</p> </li> <li> <p>Call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the attribute store.</p> </li> </ol><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the attribute to retrieve. To get the number of attributes, call <strong>{{IMFAttributes::GetCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{GUID}} that identifies this attribute.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value. This parameter can be <strong>{{NULL}}</strong>. If it is not <strong>{{NULL}}</strong>, the method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the attribute value. Call <strong>PropVariantClear</strong> to free the memory allocated by this method.</p> </dd> + + + + + <p> Copies all of the attributes from this object into another attribute store. </p> + <p> This method deletes all of the attributes originally stored in <em>pDest</em>. </p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong> on an <strong>{{IMFSample}}</strong>, which inherits this method, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store that receives the copy. </p> </dd> + + + + + <p>Represents a block of memory that contains media data. Use this interface to access the data in the buffer.</p> + <p>If the buffer contains 2-D image data (such as an uncompressed video frame), you should query the buffer for the <strong>{{IMF2DBuffer}}</strong> interface. The methods on <strong>{{IMF2DBuffer}}</strong> are optimized for 2-D data.</p><p>To get a buffer from a media sample, call one of the following <strong>{{IMFSample}}</strong> methods:</p><ul> <li> <p> <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> </p> </li> <li> <p> <strong>{{IMFSample::GetBufferByIndex}}</strong> </p> </li> </ul><p>To create a new buffer object, use one of the following functions.</p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFCreateMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory.</td></tr> <tr><td> <strong>{{MFCreateMediaBufferWrapper}}</strong> </td><td>Creates a media buffer that wraps an existing media buffer.</td></tr> <tr><td> <strong>{{MFCreateDXSurfaceBuffer}}</strong> </td><td>Creates a buffer that manages a DirectX surface.</td></tr> <tr><td> <strong>{{MFCreateAlignedMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory with a specified alignment.</td></tr> </table><p>?</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Gives the caller access to the memory in the buffer, for reading or writing</p> + <p>This method gives the caller access to the entire buffer, up to the maximum size returned in the <em>pcbMaxLength</em> parameter. The value returned in <em>pcbCurrentLength</em> is the size of any valid data already in the buffer, which might be less than the total buffer size.</p><p>The reference returned in <em>ppbBuffer</em> is guaranteed to be valid, and can safely be accessed across the entire buffer for as long as the lock is held. When you are done accessing the buffer, call <strong>{{IMFMediaBuffer::Unlock}}</strong> to unlock the buffer. You must call <strong>Unlock</strong> once for each call to <strong>Lock</strong>. After you unlock the buffer, the reference returned in <em>ppbBuffer</em> is no longer valid, and should not be used. Generally, it is best to call <strong>Lock</strong> only when you need to access the buffer memory, and not earlier.</p><p>Locking the buffer does not prevent other threads from calling <strong>Lock</strong>, so you should not rely on this method to synchronize threads.</p><p>This method does not allocate any memory, or transfer ownership of the memory to the caller. Do not release or free the memory; the media buffer will free the memory when the media buffer is destroyed.</p><p>If you modify the contents of the buffer, update the current length by calling <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>If the buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, you should use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to lock the buffer. For 2-D buffers, the <strong>Lock2D</strong> method is more efficient than the <strong>Lock</strong> method. If the buffer is locked using <strong>Lock2D</strong>, the Lock method might return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when locking the surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the start of the buffer.</p> </dd> + + + <dd> <p>Receives the maximum amount of data that can be written to the buffer. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + <dd> <p>Receives the length of the valid data in the buffer, in bytes. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for every call to <strong>{{IMFMediaBuffer::Lock}}</strong>.</p> + <p>It is an error to call <strong>Unlock</strong> if you did not call <strong>Lock</strong> previously.</p><p>After calling this method, do not use the reference returned by the <strong>Lock</strong> method. It is no longer guaranteed to be valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when unlocking the surface.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the length of the valid data in the buffer.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the length of the valid data, in bytes. If the buffer does not contain any valid data, the value is zero.</p> </dd> + + + + + <p> </p><p>Sets the length of the valid data in the buffer.</p> + <p>Call this method if you write data into the buffer.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified length is greater than the maximum size of the buffer.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Length of the valid data, in bytes. This value cannot be greater than the allocated size of the buffer, which is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the allocated size of the buffer.</p> + <p>The buffer might or might not contain any valid data, and if there is valid data in the buffer, it might be smaller than the buffer's allocated size. To get the length of the valid data, call <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the allocated size of the buffer, in bytes.</p> </dd> + + + + + <p>Represents a media sample, which is a container object for media data. For video, a sample typically contains one video frame. For audio data, a sample typically contains multiple audio samples, rather than a single sample of audio.</p><p>A media sample contains zero or more buffers. Each buffer manages a block of memory, and is represented by the <strong>{{IMFMediaBuffer}}</strong> interface. A sample can have multiple buffers. The buffers are kept in an ordered list and accessed by index value. It is also valid to have an empty sample with no buffers.</p> + <p>To create a new media sample, call <strong>{{MFCreateSample}}</strong>.</p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong>, inherited from the <strong>{{IMFAttributes}}</strong> interface, on an <strong>{{IMFSample}}</strong>, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To get attibutes from a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To set attibutes on a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the presentation time of the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a presentation time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the presentation time of the sample.</p> + <p>Some pipeline components require samples that have time stamps. Generally the component that generates the data for the sample also sets the time stamp. The Media Session might modify the time stamps.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the duration of the sample.</p> + <p>If the sample contains more than one buffer, the duration includes the data from all of the buffers.</p><p>If the retrieved duration is zero, or if the method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>, the duration is unknown. In that case, it might be possible to calculate the duration from the media type?for example, by using the video frame rate or the audio sampling rate.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The sample does not have a specified duration.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the duration, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the duration of the sample.</p> + <p>This method succeeds if the duration is negative, although negative durations are probably not valid for most types of data. It is the responsibility of the object that consumes the sample to validate the duration.</p><p>The duration can also be zero. This might be valid for some types of data. For example, the sample might contain stream metadata with no buffers.</p><p>Until this method is called, the <strong>{{IMFSample::GetSampleDuration}}</strong> method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Duration of the sample, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the number of buffers in the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of buffers in the sample. A sample might contain zero buffers.</p> </dd> + + + + + <p> Gets a buffer from the sample, by index.</p><p> </p><strong>Note</strong>??In most cases, it is safer to use the <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> method. If the sample contains more than one buffer, the <strong>ConvertToContiguousBuffer</strong> method replaces them with a single buffer, copies the original data into that buffer, and returns the new buffer to the caller. The copy operation occurs at most once. On subsequent calls, no data is copied.? + <p>A sample might contain more than one buffer. Use the <strong>GetBufferByIndex</strong> method to enumerate the individual buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument, or the index is out of range. </p> </td></tr> </table><p>?</p> + + + + <p> Converts a sample with multiple buffers into a sample with a single buffer. </p> + <p>If the sample contains more than one buffer, this method copies the data from the original buffers into a new buffer, and replaces the original buffer list with the new buffer. The new buffer is returned in the <em>ppBuffer</em> parameter.</p><p> If the sample contains a single buffer, this method returns a reference to the original buffer. In typical use, most samples do not contain multiple buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The sample does not contain any buffers.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds a buffer to the end of the list of buffers in the sample. </p> + <p>For uncompressed video data, each buffer should contain a single video frame, and samples should not contain multiple frames. In general, storing multiple buffers in a sample is discouraged.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the buffer's <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a buffer at a specified index from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the buffer. To find the number of buffers in the sample, call <strong>{{IMFSample::GetBufferCount}}</strong>. Buffers are indexed from zero.</p> </dd> + + + + + <p> </p><p>Removes all of the buffers from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the total length of the valid data in all of the buffers in the sample. The length is calculated as the sum of the values retrieved by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Copies the sample data to a buffer. This method concatenates the valid data from all of the buffers of the sample, in order.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to contain the data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the destination buffer. The buffer must be large enough to hold the valid data in the sample. To get the size of the data in the sample, call <strong>{{IMFSample::GetTotalLength}}</strong>.</p> </dd> + + + + + <p> Represents a buffer that contains a two-dimensional surface, such as a video frame. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media buffer.</p><p>To use a 2-D buffer, it is important to know the <em>stride</em>, which is the number of bytes needed to go from one row of pixels to the next. The stride may be larger than the image width, because the surface may contain padding bytes after each row of pixels. Stride can also be negative, if the pixels are oriented bottom-up in memory. For more information, see Image Stride.</p><p>Every video format defines a <em>contiguous</em> or <em>packed</em> representation. This representation is compatible with the standard layout of a DirectX surface in system memory, with no additional padding. For {{RGB}} video, the contiguous representation has a pitch equal to the image width in bytes, rounded up to the nearest <strong>{{DWORD}}</strong> boundary. For {{YUV}} video, the layout of the contiguous representation depends on the {{YUV}} format. For planar {{YUV}} formats, the Y plane might have a different pitch than the U and V planes.</p><p>If a media buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, the underlying buffer is not guaranteed to have a contiguous representation, because there might be additional padding bytes after each row of pixels. When a buffer is non-contiguous, the <strong>Lock</strong> and <strong>Lock2D</strong> methods have different behaviors:</p><ul> <li> The <strong>Lock2D</strong> method returns a reference to the underlying buffer. The buffer might not be contiguous. </li> <li> The <strong>Lock</strong> method returns a buffer that is guaranteed to be contiguous. If the underlying buffer is not contiguous, the method copies the data into a new buffer, and the <strong>Unlock</strong> method copies it back into the original buffer. </li> </ul><p>Call the <strong>Lock2D</strong> method to access the 2-D buffer in its native format. The native format might not be contiguous. The buffer's <strong>{{IMFMediaBuffer::Lock}}</strong> method returns a contiguous representation of the buffer. However, this might require an internal copy from the native format. For 2-D buffers, therefore, you should use the <strong>Lock2D</strong> method and avoid the <strong>Lock</strong> method. Because the <strong>Lock</strong> method might cause up to two buffer copies, the <strong>Lock2D</strong> method is generally more efficient and should be used when possible. To find out if the underlying buffer is contiguous, call <strong>{{IMF2DBuffer::IsContiguousFormat}}</strong>.</p><p>For uncompressed images, the amount of valid data in the buffer is determined by the width, height, and pixel layout of the image. For this reason, if you call <strong>Lock2D</strong> to access the buffer, do not rely on the values returned by <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> or <strong>{{IMFMediaBuffer::GetMaxLength}}</strong>. Similarly, if you modify the data in the buffer, you do not have to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> to update the size. Generally, you should avoid mixing calls to <strong>{{IMF2DBuffer}}</strong> and <strong>{{IMFMediaBuffer}}</strong> methods on the same media buffer.</p> + + + + <p> </p><p>Gives the caller access to the memory in the buffer.</p> + <p>If <em>p</em> is a reference to the first byte in a row of pixels, <em>p</em> + (*<em>plPitch</em>) points to the first byte in the next row of pixels. A buffer might contain padding after each row of pixels, so the stride might be wider than the width of the image in bytes. Do not access the memory that is reserved for padding bytes, because it might not be read-accessible or write-accessible. For more information, see Image Stride.</p><p>The reference returned in <em>pbScanline0</em> remains valid as long as the caller holds the lock. When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2D</strong>. After you unlock the buffer, the reference returned in <em>pbScanline0</em> is no longer valid and should not be used. Generally, it is best to call <strong>Lock2D</strong> only when you need to access the buffer memory, and not earlier.</p><p>The values returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> and <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> methods do not apply to the buffer that is returned by the <strong>Lock2D</strong> method. For the same reason, you do not need to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> after manipulating the data in the buffer returned by the <strong>Lock2D</strong> method.</p><p>The <strong>{{IMFMediaBuffer::Lock}}</strong> method fails while the <strong>Lock2D</strong> lock is held, and vice-versa. Applications should use only one of these methods at a time.</p><p>When the underlying buffer is a Direct3D surface, the method fails if the surface is not lockable.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>Cannot lock the Direct3D surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory.</p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for each call to <strong>{{IMF2DBuffer::Lock2D}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves a reference to the buffer memory and the surface stride.</p> + <p>Before calling this method, you must lock the buffer by calling <strong>{{IMF2DBuffer::Lock2D}}</strong>. The reference returned in <em>plPitch</em> is valid only while the buffer remains locked.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_INVALID_FUNCTION}}</strong></dt> </dl> </td><td> <p>You must lock the buffer before calling this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image.</p> </dd> + + + <dd> <p>Receives the stride, in bytes. For more information, see Image Stride.</p> </dd> + + + + + <p> </p><p>Queries whether the buffer is contiguous in its native format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface. For non-contiguous buffers, the <strong>{{IMFMediaBuffer::Lock}}</strong> method must perform an internal copy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the buffer is contiguous, and <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bytes needed to store the contents of the buffer in contiguous format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bytes needed to store the contents of the buffer in contiguous format.</p> </dd> + + + + + <p> </p><p>Copies this buffer into the caller's buffer, converting the data to contiguous format.</p> + <p>If the original buffer is not contiguous, this method converts the contents into contiguous format during the copy. For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid size specified in <em>pbDestBuffer</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the destination buffer where the data will be copied. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the destination buffer, in bytes. To get the required size, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p> </p><p>Copies data to this buffer from a buffer that has a contiguous format.</p> + <p>This method copies the contents of the source buffer into the buffer that is managed by this <strong>{{IMF2DBuffer}}</strong> object. The source buffer must be in contiguous format. While copying, the method converts the contents into the destination buffer's native format, correcting for the buffer's pitch if necessary.</p><p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in the <strong>{{IMF2DBuffer}}</strong> interface topic.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the source buffer. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the source buffer, in bytes. To get the maximum size of the buffer, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p>Represents a buffer that contains a two-dimensional surface, such as a video frame.</p> + <p>This interface extends the <strong>{{IMF2DBuffer}}</strong> interface and adds a safer version of the <strong>{{IMF2DBuffer::Lock2D}}</strong> method.</p> + + + + <p>Gives the caller access to the memory in the buffer.</p> + <p>When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2DSize</strong>.</p><p>This method is equivalent to the <strong>{{IMF2DBuffer::Lock2D}}</strong> method. However, <strong>Lock2DSize</strong> is preferred because it enables the caller to validate memory references, and because it supports read-only locks. A buffer is not guaranteed to support the <strong>{{IMF2DBuffer2}}</strong> interface. To access a buffer, you should try the following methods in the order listed:</p><ol> <li><strong>{{IMF2DBuffer2::Lock2DSize}}</strong></li> <li> <strong>{{IMF2DBuffer::Lock2D}}</strong> </li> <li> <strong>{{IMFMediaBuffer::Lock}}</strong> </li> </ol><p>The <em>ppbBufferStart</em> and <em>pcbBufferLength</em> parameters receive the bounds of the buffer memory. Use these values to guard against buffer overruns. Use the values of <em>ppbScanline0</em> and <em>plPitch</em> to access the image data. If the image is bottom-up in memory, <em>ppbScanline0</em> will point to the last scan line in memory and <em>plPitch</em> will be negative. For more information, see Image Stride.</p><p>The <em>lockFlags</em> parameter specifies whether the buffer is locked for read-only access, write-only access, or read/write access. </p><ul> <li>If the buffer is already locked for read-only access, it cannot be locked for write access.</li> <li>If the buffer is already locked for write-only access, it cannot be locked for read access.</li> <li>If the buffer is already locked for read/write acess, it can be locked for read or write acess.</li> </ul><p>When possible, use a read-only or write-only lock, and avoid locking the buffer for read/write access. If the buffer represents a DirectX Graphics Infrastructure ({{DXGI}}) surface, a read/write lock can cause an extra copy between {{CPU}} memory and {{GPU}} memory.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. The buffer might already be locked with an incompatible locking flag. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>There is insufficient memory to complete the operation. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MF2DBuffer_LockFlags}}</strong> enumeration that specifies whether to lock the buffer for reading, writing, or both.</p> </dd> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory. </p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory. </p> </dd> + + + <dd> <p>Receives a reference to the start of the accessible buffer in memory.</p> </dd> + + + <dd> <p>Receives the length of the buffer, in bytes.</p> </dd> + + + + + <p>Copies the buffer to another 2D buffer object.</p> + <p>The destination buffer must be at least as large as the source buffer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMF2DBuffer2}}</strong> interface of the destination buffer.</p> </dd> + + + + + <p>Represents a buffer that contains a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>To create a {{DXGI}} media buffer, first create the {{DXGI}} surface. Then call <strong>{{MFCreateDXGISurfaceBuffer}}</strong>. </p> + + + + <p>Queries the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface for an interface.</p> + <p>You can use this method to get a reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface. If the buffer is locked, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the index of the subresource that is associated with this media buffer.</p> + <p>The subresource index is specified when you create the media buffer object. See <strong>{{MFCreateDXGISurfaceBuffer}}</strong>.</p><p>For more information about texture subresources, see <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the zero-based index of the subresource.</p> </dd> + + + + + <p>Gets an <strong>{{IUnknown}}</strong> reference that was previously stored in the media buffer object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> </table><p>?</p> + + + + <p>Stores an arbitrary <strong>{{IUnknown}}</strong> reference in the media buffer object.</p> + <p>To retrieve the reference from the object, call <strong>{{IMFDXGIBuffer::GetUnknown}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_OBJECT_ALREADY_EXISTS}}</strong></dt> </dl> </td><td> <p>An item already exists with this key.</p> </td></tr> </table><p>?</p> + + + + <p> Represents a description of a media format. </p> + <p> To create a new media type, call <strong>{{MFCreateMediaType}}</strong>. </p><p> All of the information in a media type is stored as attributes. To clone a media type, call <strong>{{IMFAttributes::CopyAllItems}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>Gets the major type of the format. </p> + <p> This method is equivalent to getting the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute from the media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The major type is not set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the major type <strong>{{GUID}}</strong>. The major type describes the broad category of the format, such as audio or video. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> Queries whether the media type is a temporally compressed format. Temporal compression uses information from previously decoded samples when decompressing the current sample.</p> + <p> This method returns <strong>{{FALSE}}</strong> in <em>pfCompressed</em> if the media type's <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{TRUE}}</strong>. If the <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{FALSE}}</strong> or not set, the method returns <strong>{{TRUE}}</strong>. </p><p> If the method returns <strong>{{TRUE}}</strong> in <em>pfCompressed</em>, it is a hint that the format has temporal compression applied to it. If the method returns <strong>{{FALSE}}</strong>, the format does not use temporal compression, although it might use intra-frame compression. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the format uses temporal compression, or <strong>{{FALSE}}</strong> if the format does not use temporal compression.</p> </dd> + + + + + <p> Compares two media types and determines whether they are identical. If they are not identical, the method indicates how the two formats differ. </p> + <p> Both of the media types must have a major type, or the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p> If the method succeeds and all of the comparison flags are set in <em>pdwFlags</em>, the return value is <strong>{{S_OK}}</strong>. If the method succeeds but one or more comparison flags are not set, the method returns <strong>{{S_FALSE}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p> The types are not equal. Examine the <em>pdwFlags</em> parameter to determine how the types differ. </p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The types are equal. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> One or both media types are invalid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to compare.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags, indicating the degree of similarity between the two media types. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_MAJOR_TYPES}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>The major types are the same. The major type is specified by the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_TYPES}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The subtypes are the same, or neither media type has a subtype. The subtype is specified by the <strong>{{MF_MT_SUBTYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_DATA}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The attributes in one of the media types are a subset of the attributes in the other, and the values of these attributes match, excluding the value of the <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes.</p> <p>Specifically, the method takes the media type with the smaller number of attributes and checks whether each attribute from that type is present in the other media type and has the same value (not including <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}}). </p> <p>To perform other comparisons, use the <strong>{{IMFAttributes::Compare}}</strong> method. For example, the <strong>Compare</strong> method can test for identical attributes, or test the intersection of the two attribute sets. For more information, see <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The user data is identical, or neither media type contains user data. User data is specified by the <strong>{{MF_MT_USER_DATA}}</strong> attribute.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p>[<strong>{{IMFAudioMediaType}}</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Represents a description of an audio format.</p> + <p><strong>Windows Server?2008 and Windows?Vista:??</strong>If the major type of a media type is <strong>{{MFMediaType_Audio}}</strong>, you can query the media type object for the <strong>{{IMFAudioMediaType}}</strong> interface.</p><p> To convert an audio media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>[<strong>GetAudioFormat</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> + <p>If you need to convert the media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p> There are no guarantees about how long the returned reference is valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> This method returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.]</p><p> Retrieves an alternative representation of the media type.</p> + <p>This method is equivalent to <strong>{{IMFMediaType::GetRepresentation}}</strong> but includes the <em>lStride</em> parameter.</p><p>Instead of calling this method, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Provides information about the result of an asynchronous operation. </p> + <p>Use this interface to complete an asynchronous operation. You get a reference to this interface when your callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. To complete the operation, pass the <strong>{{IMFAsyncResult}}</strong> reference to the <strong>End...</strong> method that corresponds to the <strong>Begin...</strong> method that starts the operation. For example, if the asynchronous method is named <strong>BeginRead</strong>, call the <strong>EndRead</strong> method. For more information, see Calling Asynchronous Methods.</p><p>If you are implementing an asynchronous method, call <strong>{{MFCreateAsyncResult}}</strong> to create an instance of this object. For more information, see Writing an Asynchronous Method.</p><p>Any custom implementation of this interface must inherit the <strong>{{MFASYNCRESULT}}</strong> structure.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method.</p> + <p>The caller of the asynchronous method specifies the state object, and can use it for any caller-defined purpose. The state object can be <strong>{{NULL}}</strong>. If the state object is <strong>{{NULL}}</strong>, <strong>GetState</strong> returns <strong>{{E_POINTER}}</strong>.</p><p>If you are implementing an asynchronous method, set the state object on the through the <em>punkState</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no state object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the state object's <strong>{{IUnknown}}</strong> interface. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the status of the asynchronous operation.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation completed successfully.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets the status of the asynchronous operation.</p> + <p>If you implement an asynchronous method, call <strong>SetStatus</strong> to set the status code for the operation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The status of the asynchronous operation.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method, without incrementing the object's reference count.</p> + <p>This method cannot be called remotely.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>Returns a reference to the state object's <strong>{{IUnknown}}</strong> interface, or <strong>{{NULL}}</strong> if no object was set. This reference does not have an outstanding reference count. If you store this reference, you must call <strong>AddRef</strong> on the reference.</p> + + + + <p>Callback interface to notify the application when an asynchronous method completes. </p> + <p> For more information about asynchronous methods in Microsoft Media Foundation, see Asynchronous Callback Methods. </p><p>This interface is also used to perform a work item in a Media Foundation work-queue. For more information, see Work Queues. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + <p> </p><p>Called when an asynchronous operation is completed.</p> + <p>Within your implementation of <strong>Invoke</strong>, call the corresponding <strong>End...</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass this reference to the asynchronous <strong>End...</strong> method to complete the asynchronous call.</p> </dd> + + + + + <p>Provides logging information about the parent object the async callback is associated with.</p> + <p><strong>{{IMFAsyncCallbackLogging}}</strong> is primarily used for async callbacks to return an {{ID}} of the parent object that they are associated with.</p> + + + + <p>Gets the reference to the parent object the async callback is associated with. </p> + <p>void reference to the object.</p> + + + + <p>Gets the tag of the parent object the async callback is associated object.</p> + <p>The tag of the object.</p> + + + + <p>Represents an event generated by a Media Foundation object. Use this interface to get information about the event.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> or <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> on the event generator.</p> + <p>If you are implementing an object that generates events, call the <strong>{{MFCreateMediaEvent}}</strong> function to create a new event object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the event type. The event type indicates what happened to trigger the event. It also defines the meaning of the event value.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event type. For a list of event types, see Media Foundation Events.</p> </dd> + + + + + <p> </p><p>Retrieves the extended type of the event.</p> + <p>To define a custom event, create a new extended-type {{GUID}} and send an {{MEExtendedType}} event with that {{GUID}}.</p><p>Some standard Media Foundation events also use the extended type to differentiate between types of event data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a <strong>{{GUID}}</strong> that identifies the extended type.</p> </dd> + + + + + <p> </p><p>Retrieves an <strong>{{HRESULT}}</strong> that specifies the event status.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event status. If the operation that generated the event was successful, the value is a success code. A failure code means that an error condition triggered the event.</p> </dd> + + + + + <p> </p><p>Retrieves the value associated with the event, if any. The value is retrieved as a <strong>{{PROPVARIANT}}</strong> structure. The actual data type and the meaning of the value depend on the event.</p> + <p>Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong> structure. After the method returns, call <strong>PropVariantClear</strong> to free the memory that was allocated for the <strong>{{PROPVARIANT}}</strong> data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> structure. The method fills this structure with the data.</p> </dd> + + + + + <p> Retrieves events from any Media Foundation object that generates events. </p> + <p>An object that supports this interface maintains a queue of events. The client of the object can retrieve the events either synchronously or asynchronously. The synchronous method is <strong>GetEvent</strong>. The asynchronous methods are <strong>BeginGetEvent</strong> and <strong>EndGetEvent</strong>.</p> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p> + <p>This method executes synchronously.</p><p>If the queue already contains an event, the method returns {{S_OK}} immediately. If the queue does not contain an event, the behavior depends on the value of <em>dwFlags</em>:</p><ul> <li> <p>If <em>dwFlags</em> is 0, the method blocks indefinitely until a new event is queued, or until the event generator is shut down.</p> </li> <li> <p>If <em>dwFlags</em> is {{MF_EVENT_FLAG_NO_WAIT}}, the method fails immediately with the return code {{MF_E_NO_EVENTS_AVAILABLE}}.</p> </li> </ul><p>This method returns {{MF_E_MULTIPLE_SUBSCRIBERS}} if you previously called <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> and have not yet called <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_EVENTS_AVAILABLE}}</strong></dt> </dl> </td><td> <p>There are no events in the queue.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>0</strong></dt> </dl> </td><td> <p>The method blocks until the event generator queues an event.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_EVENT_FLAG_NO_WAIT}}</strong></dt> </dl> </td><td> <p>The method returns immediately.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p> + <p>When a new event is available, the event generator calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong> to get a reference to the <strong>{{IMFMediaEvent}}</strong> interface, and use that interface to examine the event.</p><p>Do not call <strong>BeginGetEvent</strong> a second time before calling <strong>EndGetEvent</strong>. While the first call is still pending, additional calls to the same object will fail. Also, the <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> method fails if an asynchronous request is still pending.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and a different state object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request with a different callback reference.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and state object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The client must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. For example code, see <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Puts a new event in the object's queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the event value. This parameter can be <strong>{{NULL}}</strong>. This value is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Used by the Microsoft Media Foundation proxy/stub {{DLL}} to marshal certain asynchronous method calls across process boundaries.</p><p>Applications do not use or implement this interface.</p> + + + + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> Retrieves the characteristics of the byte stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_READABLE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The byte stream can be read. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_WRITABLE}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p> The byte stream can be written to. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_SEEKABLE}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p> The byte stream can be seeked. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_REMOTE}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p> The byte stream is from a remote source, such as a network. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_DIRECTORY}}</strong></dt> <dt>0x00000080</dt> </dl> </td><td> <p> The byte stream represents a file directory. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p> Seeking within this stream might be slow. For example, the byte stream might download from a network.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>The byte stream is currently downloading data to a local cache. Read operations on the byte stream might take longer until the data is completely downloaded.</p> <p>This flag is cleared after all of the data has been downloaded.</p> <p>If the <strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong> flag is also set, it means the byte stream must download the entire file sequentially. Otherwise, the byte stream can respond to seek requests by restarting the download from a new point in the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SHARE_WRITE}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>Another thread or process can open this byte stream for writing. If this flag is present, the length of the +byte stream could change while it is being read. </p> <p>This flag can affect the behavior of byte-stream handlers. For more information, see {{MF_BYTESTREAMHANDLER_ACCEPTS_SHARE_WRITE}}.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_DOES_NOT_USE_NETWORK}}</strong></dt> <dt>0x00000800</dt> </dl> </td><td> <p>The byte stream is not currently +using the network to receive the content. Networking hardware +may enter a power saving state when this bit is set.</p> <strong>Note</strong>??Requires Windows?8 or later. ? </td></tr> </table> <p>?</p> </dd> + + + + + <p> Retrieves the length of the stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the length of the stream, in bytes. If the length is unknown, this value is -1. </p> </dd> + + + + + <p> </p><p>Sets the length of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Length of the stream in bytes. </p> </dd> + + + + + <p> Retrieves the current read or write position in the stream. </p> + <p> The methods that update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>SetCurrentPosition</strong>, and <strong>Seek</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the current position, in bytes. </p> </dd> + + + + + <p> </p><p>Sets the current read or write position.</p> + <p> If the new position is larger than the length of the stream, the method returns {{E_INVALIDARG}}. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by setting the current position to the value passed in to the <em>qwPosition</em> parameter. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>Seek</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> </table><p>?</p> + + + <dd> <p>New position in the stream, as a byte offset from the start of the stream.</p> </dd> + + + + + <p> </p><p>Queries whether the current position has reached the end of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the value <strong>{{TRUE}}</strong> if the end of the stream has been reached, or <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <p> Reads data from the stream. </p> + <p> This method reads at most <em>cb</em> bytes from the current position in the stream and copies them into the buffer provided by the caller. The number of bytes that were read is returned in the <em>pcbRead</em> parameter. The method does not return an error code on reaching the end of the file, so the application should check the value in <em>pcbRead</em> after the method returns. </p><p> This method is synchronous. It blocks until the read operation completes. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are copied into the buffer. This parameter cannot be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Begins an asynchronous read operation from the stream. </p> + <p> When all of the data has been read into the buffer, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndRead}}</strong> to complete the asynchronous request. </p><p> Do not read from, write to, free, or reallocate the buffer while an asynchronous read is pending. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Completes an asynchronous read operation. </p> + <p> Call this method after the <strong>{{IMFByteStream::BeginRead}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p> Receives the number of bytes that were read. </p> </dd> + + + + + <p> </p><p>Writes data to the stream.</p> + <p> This method writes the contents of the <em>pb</em> buffer to the stream, starting at the current stream position. The number of bytes that were written is returned in the <em>pcbWritten</em> parameter. </p><p> This method is synchronous. It blocks until the write operation completes. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position offset. </p><p> Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that contains the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are written. </p> </dd> + + + + + <p> Begins an asynchronous write operation to the stream. </p> + <p> When all of the data has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndWrite}}</strong> to complete the asynchronous request. </p><p> Do not reallocate, free, or write to the buffer while an asynchronous write is still pending. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer containing the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous write operation.</p> + <p> Call this method when the <strong>{{IMFByteStream::BeginWrite}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p> Receives the number of bytes that were written. </p> </dd> + + + + + <p> </p><p>Moves the current position in the stream by a specified offset.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the <em>qwSeekOffset</em> to the seek <em>SeekOrigin</em> position. This should be the same value passed back in the <em>pqwCurrentPosition</em> parameter. +Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>SetCurrentPosition</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the origin of the seek as a member of the <strong>{{MFBYTESTREAM_SEEK_ORIGIN}}</strong> enumeration. The offset is calculated relative to this position. </p> </dd> + + + <dd> <p> Specifies the new position, as a byte offset from the seek origin. </p> </dd> + + + <dd> <p> Specifies zero or more flags. The following flags are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO}}</strong></dt> </dl> </td><td> <p> All pending I/O requests are canceled after the seek request completes successfully. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the new position after the seek. </p> </dd> + + + + + <p> Clears any internal buffers used by the stream. If you are writing to the stream, the buffered data is written to the underlying file or device. </p> + <p> If the byte stream is read-only, this method has no effect.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Closes the stream and releases any resources associated with the stream, such as sockets or file handles. This method also cancels any pending asynchronous I/O requests. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to write a media sample to the stream.</p> + <p>Call this method when the <strong>{{IMFSampleOutputStream::BeginWriteSample}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + + + + + + Defines size, enumerators, and synchronization methods for all nongeneric collections. <p></p>Namespace: System.CollectionsAssembly: mscorlib (in mscorlib.dll)&lt;ComVisibleAttribute(True)&gt; _ +Public Interface {{ICollection}} Inherits {{IEnumerableDim}} instance As {{ICollection}} +[ComVisibleAttribute(true)] +public interface {{ICollection}} : {{IEnumerable}}[ComVisibleAttribute(true)] +public interface class {{ICollection}} : {{IEnumerable}}/** @attribute ComVisibleAttribute(true) */ +public interface {{ICollection}} extends {{IEnumerableComVisibleAttribute}}(true) +public interface {{ICollection}} extends {{IEnumerableNot}} applicable. <p>The {{ICollection}} interface is the base interface for classes in the System.Collections namespace.</p> <p>The {{ICollection}} interface extends {{IEnumerable}}; {{IDictionary}} and {{IList}} are more specialized interfaces that extend {{ICollection}}. An {{IDictionary}} implementation is a collection of key/value pairs, like the Hashtable class. An {{IList}} implementation is a collection of values and its members can be accessed by index, like the ArrayList class.</p> <p>Some collections that limit access to their elements, such as the Queue class and the Stack class, directly implement the {{ICollection}} interface.</p> <p>If neither the {{IDictionary}} interface nor the {{IList}} interface meet the requirements of the required collection, derive the new collection class from the {{ICollection}} interface instead for more flexibility.</p> <p>For the generic version of this interface, see System.Collections.Generic.{{ICollection}}.</p> <p>Windows 98, Windows Server 2000 {{SP4}}, Windows {{CE}}, Windows Millennium Edition, Windows Mobile for Pocket {{PC}}, Windows Mobile for Smartphone, Windows Server 2003, Windows {{XP}} Media Center Edition, Windows {{XP}} Professional x64 Edition, Windows {{XP}} {{SP2}}, Windows {{XP}} Starter Edition</p><p></p><p></p> The Microsoft .{{NET}} Framework 3.0 is supported on Windows Vista, Microsoft Windows {{XP}} {{SP2}}, and Windows Server 2003 {{SP1}}. .{{NET}} FrameworkSupported in: 3.0, 2.0, 1.1, 1.0.{{NET}} Compact FrameworkSupported in: 2.0, 1.0XNA FrameworkSupported in: 1.0ReferenceICollection MembersSystem.Collections NamespaceIDictionaryIListSystem.Collections.Generic.{{ICollection}} + + + + <p> </p><p>Retrieves the number of objects in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of objects in the collection.</p> </dd> + + + + + <p> </p><p>Retrieves an object in the collection.</p> + <p> This method does not remove the object from the collection. To remove an object, call <strong>{{IMFCollection::RemoveElement}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the object to retrieve. Objects are indexed in the order in which they were added to the collection. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. The retrieved reference value might be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Adds an object to the collection.</p> + <p>If <em>pUnkElement</em> is <strong>{{NULL}}</strong>, a <strong>{{NULL}}</strong> reference is added to the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes an object from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the object to remove. Objects are indexed in the order in which they were added to the collection.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface. This parameter cannot be <strong>{{NULL}}</strong>, but the retrieved reference value might be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Adds an object at the specified index in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index where the object will be added to the collection.</p> </dd> + + + <dd> <p>The object to insert.</p> </dd> + + + + + <p> </p><p>Removes all items from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Provides an event queue for applications that need to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This interface is exposed by a helper object that implements an event queue. If you are writing a component that implements the <strong>{{IMFMediaEventGenerator}}</strong> interface, you can use this object in your implementation. The event queue object is thread safe and provides methods to queue events and to pull them from the queue either synchronously or asynchronously. To create the event queue object, call <strong>{{MFCreateEventQueue}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::GetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Puts an event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains attributes. To create the event object, call <strong>{{MFCreateMediaEvent}}</strong>. Add attributes to the event by using methods from the <strong>{{IMFAttributes}}</strong> interface. (The <strong>{{IMFMediaEvent}}</strong> interface inherits <strong>{{IMFAttributes}}</strong>.)</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of the event to be put in the queue.</p> </dd> + + + + + <p> </p><p>Creates an event, sets a <strong>{{PROPVARIANT}}</strong> as the event data, and puts the event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::QueueEvent}}</strong>. Pass the parameters from that method directly to this method.</p><p>You can also call this method when your component needs to raise an event that does not contain attributes. If the event data is an <strong>{{IUnknown}}</strong> reference, you can use <strong>{{IMFMediaEventQueue::QueueEventParamUnk}}</strong>. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an event, sets an <strong>{{IUnknown}}</strong> reference as the event data, and puts the event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains an <strong>{{IUnknown}}</strong> reference value and no attributes. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type of the event to be added to the queue. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type of the event. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface. The method sets this reference as the event value. The reference is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Shuts down the event queue.</p> + <p>Call this method when your component shuts down. After this method is called, all <strong>{{IMFMediaEventQueue}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>This method removes all of the events from the queue.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the application to defer the creation of an object. This interface is exposed by activation objects.</p> + <p>Typically, the application calls some function that returns an <strong>{{IMFActivate}}</strong> reference and then passes that reference to another component. The other component calls <strong>ActivateObject</strong> at a later time to create the object. In the protected media path ({{PMP}}), the <strong>{{IMFActivate}}</strong> reference might be marshaled to the protected process, so that the object can be created in that process.</p> + + + + <p> Creates the object associated with this activation object. </p> + <p>Some Microsoft Media Foundation objects must be shut down before being released. If so, the caller is responsible for shutting down the object that is returned in <em>ppv</em>. To shut down the object, do one of the following:</p><ul> <li>Call <strong>{{IMFActivate::ShutdownObject}}</strong> on the activation object, or</li> <li>Call the object-specific shutdown method. This method will depend on the type of object. Possibilities include:<ul> <li>Media sources: Call <strong>{{IMFMediaSource::Shutdown}}</strong>.</li> <li>Media sinks: Call <strong>{{IMFMediaSink::Shutdown}}</strong>.</li> <li>Any object that supports the <strong>{{IMFShutdown}}</strong> interface: Call <strong>{{IMFShutdown::Shutdown}}</strong>.</li> </ul> </li> </ul><p>The <strong>{{IMFActivate::ShutdownObject}}</strong> method is generic to all object types. If the object does not require a shutdown method, <strong>ShutdownObject</strong> succeeds and has no effect. If you do not know the specific shutdown method for the object (or do not know the object type), call <strong>{{IMFActivate::ShutdownObject}}</strong>.</p><p> After the first call to <strong>ActivateObject</strong>, subsequent calls return a reference to the same instance, until the client calls either <strong>ShutdownObject</strong> or <strong>{{IMFActivate::DetachObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Interface identifier ({{IID}}) of the requested interface. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Shuts down the created object.</p> + <p>If you create an object by calling <strong>{{IMFActivate::ActivateObject}}</strong>, call <strong>ShutdownObject</strong> when you are done using the object.</p><p>The component that calls <strong>ActivateObject</strong>?not the component that creates the activation object?is responsible for calling <strong>ShutdownObject</strong>. For example, in a typical playback application, the application creates activation objects for the media sinks, but the Media Session calls <strong>ActivateObject</strong>. Therefore the Media Session, not the application, calls <strong>ShutdownObject</strong>.</p><p>After <strong>ShutdownObject</strong> is called, the activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Detaches the created object from the activation object.</p> + <p>The activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p><p>The <strong>DetachObject</strong> method does not shut down the created object. If the <strong>DetachObject</strong> method succeeds, the client must shut down the created object. This rule applies only to objects that have a shutdown method or that support the <strong>{{IMFShutdown}}</strong> interface. See the remarks for <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>Implementation of this method is optional. If the activation object does not support this method, the method returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong>.</p> + <p>Media Foundation provides a set of built-in media sources and decoders. Applications can enumerate them as follows: </p><ul> <li>Media sources are enumerated through the Source Resolver.</li> <li>Transforms, such as decoders, are enumerated through the <strong>{{MFTEnum}}</strong> and <strong>{{MFTEnumEx}}</strong> functions.</li> </ul><p>Applications might also enumerate these objects indirectly. For example, if an application uses the topology loader to resolve a partial topology, the topology loader calls <strong>{{MFTEnumEx}}</strong> to find the required decoders.</p><p>Third parties can implement their own custom media sources and decoders, and register them for enumeration so that other applications can use them.</p><p>To control the enumeration order, Media Foundation maintains two process-wide lists of {{CLSIDs:}} a preferred list and a blocked list. An object whose {{CLSID}} appears in the preferred list appears first in the enumeration order. An object whose {{CLSID}} appears on the blocked list is not enumerated.</p><p>The lists are initially populated from the registry. Applications can use the <strong>{{IMFPluginControl}}</strong> interface to modify the lists for the current process.</p><p>The preferred list contains a set of key/value pairs, where the keys are strings and the values are {{CLSIDs}}. These key/value pairs are defined as follows:</p><ul> <li>For media sources, the key name is a file name extension, protocol scheme, or {{MIME}} type. The value is the {{CLSID}} of a scheme handler or byte-stream handler for that media source.</li> <li>For decoders, the key name is a media subtype {{GUID}} in canonical string form. (For more information about media subtypes, see Media Types.) The value is the {{CLSID}} of the Media Foundation transform ({{MFT}}) that implements the decoder. </li> </ul><p>The following examples show the various types of key:</p><ul> <li>File extension: ".wmv"</li> <li>Scheme: "http:"</li> <li>{{MIME}} type: "video/mp4"</li> <li>Media subtype: "{47504A4D-0000-0010-8000-00AA00389B71}"</li> </ul><p>To search the preferred list by key name, call the <strong>{{IMFPluginControl::GetPreferredClsid}}</strong> method. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetPreferredClsidByIndex}}</strong> method in a loop.</p><p>The blocked list contains a list of {{CLSIDs}}. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetDisabledByIndex}}</strong> method in a loop. To check whether a specific {{CLSID}} appears on the list, call the <strong>{{IMFPluginControl::IsDisabled}}</strong> method.</p> + + + + <p>Searches the preferred list for a class identifier ({{CLSID}}) that matches a specified key name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>No {{CLSID}} matching this key was found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name to match. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{CLSID}} from the preferred list.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the preferred list, specified by index value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the key name associated with the {{CLSID}}. The caller must free the memory for the returned string by calling the <strong>CoTaskMemFree</strong> function. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the preferred list or removes a {{CLSID}} from the list.</p> + <p>The preferred list is global to the caller's process. Calling this method does not affect the list in other process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name for the {{CLSID}}. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>The {{CLSID}} to add to the list. If this parameter is <strong>{{NULL}}</strong>, the key/value entry specified by the <em>selector</em> parameter is removed from the list. </p> </dd> + + + + + <p>Queries whether a class identifier ({{CLSID}}) appears in the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} appears in the blocked list.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} is not in the blocked list.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object for the query.</p> </dd> + + + <dd> <p>The {{CLSID}} to search for.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the blocked list, or removes a {{CLSID}} from the list.</p> + <p> The blocked list is global to the caller's process. Calling this method does not affect the list in other processes. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The {{CLSID}} to add or remove.</p> </dd> + + + <dd> <p>Specifies whether to add or remove the {{CSLID}}. If the value is <strong>{{TRUE}}</strong>, the method adds the {{CLSID}} to the blocked list. Otherwise, the method removes it from the list.</p> </dd> + + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>This interface extends the <strong>{{IMFPluginControl}}</strong> interface.</p> + <p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong> and query the returned reference for <strong>{{IMFPluginControl2}}</strong>.</p> + + + + <p>Sets the policy for which media sources and transforms are enumerated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value from the <strong>{{MF_PLUGIN_CONTROL_POLICY}}</strong> enumeration that specifies the policy.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Queries the Microsoft Direct3D device for an interface.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>For more info see, Supporting Direct3D 11 Video Decoding in Media Foundation.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>If a <strong>{{ID3D11VideoDevice}}</strong> is specified and the {{D3D}} device created is using the reference rasterizer or {{WARP}}. Or it is a hardware device and you are using the Microsoft Basic Display Adapter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device supports the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong>. To get a reference to the Direct3D11 device, use <strong>{{IID_ID3D11Device}}</strong> as the <em>riid</em>.</li> <li> <strong>{{ID3D11VideoDevice}}</strong>. To get a reference to the Direct3D11 video device, use <strong>{{IID_ID3D11VideoDevice}}</strong> as the <em>riid</em>.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gives the caller exclusive access to the Microsoft Direct3D device.</p> + <p>When you are done using the Direct3D device, call <strong>{{IMFDXGIDeviceManager::UnlockDevice}}</strong> to unlock the device.</p><p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>If <em>fBlock</em> is <strong>{{TRUE}}</strong>, this method can potentially deadlock. For example, it will deadlock if a thread calls <strong>LockDevice</strong> and then waits on another thread that calls <strong>LockDevice</strong>. It will also deadlock if a thread calls <strong>LockDevice</strong> twice without calling <strong>UnlockDevice</strong> in between. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_VIDEO_DEVICE_LOCKED}}</strong></dt> </dl> </td><td> <p>The device is locked and <em>fBlock</em> is <strong>{{FALSE}}</strong>. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device will support the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong> </li> <li> <strong>{{ID3D11VideoContext}}</strong> </li> <li> <strong>{{ID3D11VideoDevice}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Specifies whether to wait for the device lock. If the device is already locked and this parameter is <strong>{{TRUE}}</strong>, the method blocks until the device is unlocked. Otherwise, if the device is locked and this parameter is <strong>{{FALSE}}</strong>, the method returns immediately with the error code <strong>{{DXVA2_E_VIDEO_DEVICE_LOCKED}}</strong>.</p> </dd> + + + + + <p>Gets a handle to the Microsoft Direct3D device. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device handle.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Tests whether a Microsoft Direct3D device handle is valid.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + + + <p>Unlocks the Microsoft Direct3D device.</p> + <p> Call this method to release the device after calling <strong>{{IMFDXGIDeviceManager::LockDevice}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the <strong>{{IMFAttributes}}</strong> for the substream with the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The stream specified substream index is invalid. Call <strong>GetStreamCount</strong> to get the number of substreams managed by the multiplexed media source.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + + + + + + + + + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + <p>Specifies the immediate value and destination address written using <strong>{{ID3D12CommandList2::WriteBufferImmediate}}</strong>.</p> + <p></p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + + + + + + + <p> </p><p>Writes the contents of an attribute store to a stream.</p> + <p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function serializes <strong>{{IUnknown}}</strong> references in the attribute store, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::SaveReference}}</strong> to serialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoMarshalInterface</strong> to serialize a proxy for the object.</p> </li> </ul><p>If <em>dwOptions</em> does not include the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function skips <strong>{{IUnknown}}</strong> references in the attribute store.</p><p>To load the attributes from the stream, call <strong>{{MFDeserializeAttributesFromStream}}</strong>.</p><p>The main purpose of this function is to marshal attributes across process boundaries.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream where the attributes are saved.</p> </dd> + + + + + <p> </p><p>Loads attributes from a stream into an attribute store.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p><p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function deserializes <strong>{{IUnknown}}</strong> references from the stream, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::LoadReference}}</strong> to deserialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoUnmarshalInterface</strong> to deserialize a proxy for the object.</p> </li> </ul><p>This function deletes any attributes that were previously stored in <em>pAttr</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream from which to read the attributes.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Defines flags for the <strong>{{IMFTransform::ProcessInput}}</strong> method. Currently no flags are defined.</p> + + + + <p> Defines flags for the <strong>{{IMFTransform::ProcessOutput}}</strong> method. </p> + <p>The values in this enumeration are not bit flags, so they should not be combined with a bitwise <strong>{{OR}}</strong>. Also, the caller should test for these flags with the equality operator, not a bitwise <strong>{{AND}}</strong>:</p><code>// Correct. +if (Buffer.dwStatus == {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) +{ ... +} // Incorrect. +if ((Buffer.dwStatus &amp; {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) != 0) +{ ... +} +</code> + + + + <p> </p><p>Indicates the status of an input stream on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>The input stream can receive more data at this time. To deliver more input data, call <strong>{{IMFTransform::ProcessInput}}</strong>.</p> </dd> + + + + + <p> </p><p>Indicates whether a Media Foundation transform ({{MFT}}) can produce output data.</p> + + + <dd> <p>There is a sample available for at least one output stream. To retrieve the available output samples, call <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Describes an input stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the transform, the only flags guaranteed to be accurate are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags. For all other flags, the client should first set the media type on every non-optional stream.</p><p>In the default processing model, an {{MFT}} holds a reference count on the sample that it receives in <strong>ProcessInput</strong>. It does not process the sample immediately inside <strong>ProcessInput</strong>. When <strong>ProcessOutput</strong> is called, the {{MFT}} produces output data and then discards the input sample. The following variations on this model are defined:</p><ul> <li> <p>If an {{MFT}} never holds onto input samples between <strong>ProcessInput</strong> and <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}.</p> </li> <li> <p>If an {{MFT}} holds some input samples beyond the next call to <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_HOLDS_BUFFERS}}.</p> </li> </ul> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of input data must contain complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each media sample that the client provides as input must contain exactly one unit of data, as defined for the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that processes uncompressed audio should not set this flag. The {{MFT}} should accept buffers that contain more than a single audio frame, for efficiency.</p> </dd> + + + <dd> <p> All input samples must be the same size. The size is given in the <strong>cbSize</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The {{MFT}} must provide this value. During processing, the {{MFT}} should verify the size of input samples, and may drop samples with incorrect size.</p> </dd> + + + <dd> <p>The {{MFT}} might hold one or more input samples after <strong>{{IMFTransform::ProcessOutput}}</strong> is called. If this flag is present, the <strong>hnsMaxLatency</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure gives the maximum latency, and the <strong>cbMaxLookahead</strong> member gives the maximum number of bytes of lookahead.</p> </dd> + + + <dd> <p>The {{MFT}} does not hold input samples after the <strong>{{IMFTransform::ProcessInput}}</strong> method returns. It releases the sample before the <strong>ProcessInput</strong> method returns.</p> <p>If this flag is absent, the {{MFT}} might hold a reference count on the samples that are passed to the <strong>ProcessInput</strong> method. The client must not re-use or delete the buffer memory until the {{MFT}} releases the sample's <strong>{{IMFSample}}</strong> reference.</p> <p>If this flag is absent, it does not guarantee that the {{MFT}} holds a reference count on the input samples. It is valid for an {{MFT}} to release input samples in <strong>ProcessInput</strong> even if the {{MFT}} does not set this flag. However, setting this flag might enable to client to optimize how it re-uses buffers.</p> <p>An {{MFT}} should not set this flag if it ever holds onto an input sample after returning from <strong>ProcessInput</strong>.</p> </dd> + + + <dd> <p>This input stream can be removed by calling <strong>{{IMFTransform::DeleteInputStream}}</strong>.</p> </dd> + + + <dd> <p>This input stream is optional. The transform can produce output without receiving input from this stream. The caller can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. It is possible for every input stream on a transform to be optional, but at least one input must be selected in order to produce output.</p> </dd> + + + <dd> <p>The {{MFT}} can perform in-place processing. In this mode, the {{MFT}} directly modifies the input buffer. When the client calls <strong>ProcessOutput</strong>, the same sample that was delivered to this stream is returned in the output stream that has a matching stream identifier. This flag implies that the {{MFT}} holds onto the input buffer, so this flag cannot combined with the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}} flag.</p> <p>If this flag is present, the {{MFT}} must set the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag for the output stream that corresponds to this input stream. (See <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>).</p> </dd> + + + + + <p> </p><p>Describes an output stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the {{MFT}}, the only flag guaranteed to be accurate is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag. For all other flags, the client should first set the media type on every non-optional stream.</p><p>The {{MFT_OUTPUT_STREAM_DISCARDABLE}} and {{MFT_OUTPUT_STREAM_LAZY_READ}} flags define different behaviors for how the {{MFT}} can discard output data.</p><ul> <li> <p>{{MFT_OUTPUT_STREAM_DISCARDABLE:}} The {{MFT}} discards output data only if the client calls <strong>ProcessOutput</strong> with the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag. The {{MFT}} never discards data when the client calls <strong>ProcessInput</strong>.</p> </li> <li> <p>{{MFT_OUTPUT_STREAM_LAZY_READ:}} If the client continues to call <strong>ProcessInput</strong> without collecting the output from this stream, the {{MFT}} eventually discards the output. If all output streams have the {{MFT_OUTPUT_STREAM_LAZY_READ}} flag, the {{MFT}} never refuses more input data.</p> </li> </ul><p>If neither of these flags is set, the {{MFT}} never discards output data.</p> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of output data from the {{MFT}} contains complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each output sample contains exactly one unit of data, as defined for the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that outputs uncompressed audio should not set this flag. For efficiency, it should output more than one audio frame at a time.</p> </dd> + + + <dd> <p>All output samples are the same size.</p> </dd> + + + <dd> <p>The {{MFT}} can discard the output data from this output stream, if requested by the client. To discard the output, set the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> </dd> + + + <dd> <p>This output stream is optional. The client can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. When an optional stream is deselected, it does not produce any output data.</p> </dd> + + + <dd> <p>The {{MFT}} provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. The {{MFT}} cannot use output samples provided by the client for this stream.</p> <p>If this flag is not set, the {{MFT}} must set <strong>cbSize</strong> to a nonzero value in the <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure, so that the client can allocate the correct buffer size. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </dd> + + + <dd> <p>The {{MFT}} can either provide output samples for this stream or it can use samples that the client allocates. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> <p>If the {{MFT}} does not set this flag or the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag, the client must allocate the samples for this output stream. The {{MFT}} will not provide its own samples.</p> </dd> + + + <dd> <p>The {{MFT}} does not require the client to process the output for this stream. If the client continues to send input data without getting the output from this stream, the {{MFT}} simply discards the previous input.</p> </dd> + + + <dd> <p>The {{MFT}} might remove this output stream during streaming. This flag typically applies to demultiplexers, where the input data contains multiple streams that can start and stop during streaming. For more information, see <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Defines flags for the setting or testing the media type on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Test the proposed media type, but do not set it.</p> </dd> + + + + + <p> </p><p>Defines flags for processing output samples in a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Do not produce output for streams in which the <strong>pSample</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure is <strong>{{NULL}}</strong>. This flag is not valid unless the {{MFT}} has marked the output stream with the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> </dd> + + + <dd> <p>Regenerates the last output sample.</p> <p><strong>Note</strong> Requires Windows?8.</p> </dd> + + + + + <p> </p><p>Indicates the status of a call to <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> + <p>If the {{MFT}} sets this flag, the <strong>ProcessOutput</strong> method returns {{MF_E_TRANSFORM_STREAM_CHANGE}} and no output data is produced. The client should respond as follows:</p><ol> <li> <p>Call <strong>{{IMFTransform::GetStreamCount}}</strong> to get the new number of streams.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetStreamIDs}}</strong> to get the new stream identifiers.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetOutputAvailableType}}</strong> and <strong>{{IMFTransform::SetOutputType}}</strong> to set the media types on the new streams.</p> </li> </ol><p>Until these steps are completed, all further calls to <strong>ProcessOutput</strong> return {{MF_E_TRANSFORM_STREAM_CHANGE}}.</p> + + + + <p> </p><p>Not supported.</p><strong>Note</strong>??Earlier versions of this documentation described the <strong>_MFT_DRAIN_TYPE</strong> enumeration incorrectly. The enumeration is not supported. For more information, see <strong>{{MFT_MESSAGE_TYPE}}</strong>.? + + + + <p>Defines messages for a Media Foundation transform ({{MFT}}). To send a message to an {{MFT}}, call <strong>{{IMFTransform::ProcessMessage}}</strong>.</p> + <p>Some messages require specific actions from the {{MFT}}. These events have "{{MESSAGE}}" in the message name. Other messages are informational; they notify the {{MFT}} of some action by the client, and do not require any particular response from the {{MFT}}. These messages have "{{NOTIFY}}" in the messages name. Except where noted, an {{MFT}} should not rely on the client sending notification messages.</p> + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + <p>Specifies how to output a 3D stereoscopic video stream.</p> + <p>This enumeration is used with the {{MF_ENABLE_3DVIDEO_OUTPUT}} attribute.</p> + + + <dd> <p>Output the base view only. Discard the other view.</p> </dd> + + + <dd> <p>Output a stereo view (two buffers).</p> </dd> + + + + + + + + + + + <p> </p><p>Contains information about an input stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetInputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags in the <strong>dwFlags</strong> member.</p><ul> <li> <p>The {{MFT_INPUT_STREAM_REMOVABLE}} flag indicates that the stream can be deleted.</p> </li> <li> <p>The {{MFT_INPUT_STREAM_OPTIONAL}} flag indicates that the stream is optional and does not require a media type.</p> </li> </ul><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetInputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag in the <strong>dwFlags</strong> member. This flag indicates that the stream is optional and does not require a media type.</p><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetOutputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output buffer for a Media Foundation transform. This structure is used in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> + <p>You must provide an <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure for each selected output stream.</p><p>{{MFTs}} can support two different allocation models for output samples:</p><ul> <li> The {{MFT}} allocates the output sample. </li> <li> The client allocates the output sample. </li> </ul><p>To find which model the {{MFT}} supports for a given output stream, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> and check the value of <strong>dwFlags</strong>.</p><table> <tr><th>Flag</th><th>Allocation Model</th></tr> <tr><td>{{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}}</td><td>The {{MFT}} allocates the output samples for the stream. Set <strong>pSample</strong> to <strong>{{NULL}}</strong> for this stream.</td></tr> <tr><td>{{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}}</td><td>The {{MFT}} supports both allocation models.</td></tr> <tr><td>Neither (default)</td><td>The client must allocate the output samples for the stream.</td></tr> </table><p>?</p><p>The behavior of <strong>ProcessOutput</strong> depends on the initial value of <strong>pSample</strong> and the value of the <em>dwFlags</em> parameter in the <strong>ProcessOutput</strong> method.</p><ul> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> contains the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag, the {{MFT}} discards the output data.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. (To get the flags for the output stream, call the <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> method.)</p> </li> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> does not contain the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}}, the {{MFT}} provides a sample for the output data. The {{MFT}} sets <strong>pSample</strong> to point to the sample that it provides. The {{MFT}} can either allocate a new sample or re-use an input sample.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </li> <li> <p>If <strong>pSample</strong> is non-<strong>{{NULL}}</strong>, the {{MFT}} uses the sample provided by the caller.</p> <p>Restriction: This output stream must not have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> </li> </ul><p>Any other combinations are invalid and cause <strong>ProcessOutput</strong> to return {{E_INVALIDARG}}.</p><p>Each call to <strong>ProcessOutput</strong> can produce zero or more events and up to one sample per output stream.</p> + + + + <p>Not for application use.</p> + <p>This structure is used internally by the Microsoft Media Foundation {{AVStream}} proxy.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + + + + + + + <p>Implemented by all Media Foundation Transforms ({{MFTs}}).</p> + + + + <p> Gets the minimum and maximum number of input and output streams for this Media Foundation transform ({{MFT}}). </p> + <p> If the {{MFT}} has a fixed number of streams, the minimum and maximum values are the same. </p><p> It is not recommended to create an {{MFT}} that supports zero inputs or zero outputs. An {{MFT}} with no inputs or no outputs may not be compatible with the rest of the Media Foundation pipeline. You should create a Media Foundation sink or source for this purpose instead. </p><p> When an {{MFT}} is first created, it is not guaranteed to have the minimum number of streams. To find the actual number of streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamLimits}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the minimum number of input streams. </p> </dd> + + + <dd> <p> Receives the maximum number of input streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + <dd> <p> Receives the minimum number of output streams. </p> </dd> + + + <dd> <p> Receives the maximum number of output streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + + + <p> Gets the current number of input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> The number of streams includes unselected streams?that is, streams with no media type or a <strong>{{NULL}}</strong> media type.</p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamCount}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of input streams. </p> </dd> + + + <dd> <p> Receives the number of output streams. </p> </dd> + + + + + <p> Gets the stream identifiers for the input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> Stream identifiers are necessary because some {{MFTs}} can add or remove streams, so the index of a stream may not be unique. Therefore, <strong>{{IMFTransform}}</strong> methods that operate on streams take stream identifiers. </p><p>This method can return <strong>{{E_NOTIMPL}}</strong> if both of the following conditions are true:</p><ul> <li> The transform has a fixed number of streams. </li> <li> The streams are numbered consecutively from 0 to n ? 1, where n is the number of input streams or output streams. In other words, the first input stream is 0, the second is 1, and so on; and the first output stream is 0, the second is 1, and so on. </li> </ul><p>This method must be implemented if any of the following conditions is true:</p><ul> <li> The {{MFT}} can add or remove output streams. </li> <li> The {{MFT}} allows the client to add or remove input streams. </li> <li> The stream identifiers are not consecutive. </li> </ul><p> All input stream identifiers must be unique within an {{MFT}}, and all output stream identifiers must be unique. However, an input stream and an output stream can share the same identifier. </p><p> If the client adds an input stream, the client assigns the identifier, so the {{MFT}} must allow arbitrary identifiers, as long as they are unique. If the {{MFT}} creates an output stream, the {{MFT}} assigns the identifier. </p><p> By convention, if an {{MFT}} has exactly one fixed input stream and one fixed output stream, it should assign the identifier 0 to both streams. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamIDs}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. See Remarks. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> One or both of the arrays is too small. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of elements in the <em>pdwInputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the input stream identifiers. The array size must be at least equal to the number of input streams. To get the number of input streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p> <p>If the caller passes an array that is larger than the number of input streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + <dd> <p> Number of elements in the <em>pdwOutputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the output stream identifiers. The array size must be at least equal to the number of output streams. To get the number of output streams, call <strong>GetStreamCount</strong>. </p> <p>If the caller passes an array that is larger than the number of output streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + + + <p> Gets the buffer requirements and other information for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the input stream. </p> </dd> + + + + + <p> Gets the buffer requirements and other information for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the output stream. </p> </dd> + + + + + <p> Gets the global attribute store for this Media Foundation transform ({{MFT}}). </p> + <p> Use the <strong>{{IMFAttributes}}</strong> reference retrieved by this method to get or set attributes that apply to the entire {{MFT}}. To get the attribute store for an input stream, call <strong>{{IMFTransform::GetInputStreamAttributes}}</strong>. To get the attribute store for an output stream, call <strong>{{IMFTransform::GetOutputStreamAttributes}}</strong>. </p><p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. Exception: Hardware-based {{MFTs}} must implement this method. See Hardware {{MFTs}}.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support attributes. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support input stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support output stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Removes an input stream from this Media Foundation transform ({{MFT}}). </p> + <p> If the transform has a fixed number of input streams, the method returns <strong>{{E_NOTIMPL}}</strong>. </p><p> An {{MFT}} might support this method but not allow certain input streams to be removed. If an input stream can be removed, the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method returns the <strong>{{MFT_INPUT_STREAM_REMOVABLE}}</strong> flag for that stream. Otherwise, the stream cannot be removed, and the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. The method also fails if the {{MFT}} currently has the minimum number of input streams that it requires. To find the minimum number of streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If the transform still has unprocessed input for that stream, the method might succeed or it might return <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>. If the method succeeds, the {{MFT}} will continue to process the remaining input after the stream is removed. If the method returns <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>, you must clear the input buffers before removing the stream. To clear the input buffers, either call <strong>{{IMFTransform::ProcessOutput}}</strong> or else call <strong>{{IMFTransform::ProcessMessage}}</strong> with the <strong>{{MFT_MESSAGE_COMMAND_FLUSH}}</strong> to flush the {{MFT}}. Then call the <strong>DeleteInputStream</strong> again. An {{MFT}} should never discard input buffers when <strong>DeleteInputStream</strong> is called. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTDeleteInputStream}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The transform has a fixed number of input streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The stream is not removable, or the transform currently has the minimum number of input streams it can support. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong></dt> </dl> </td><td> <p> The transform has unprocessed input buffers for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifier of the input stream to remove. </p> </dd> + + + + + <p> Adds one or more new input streams to this Media Foundation transform ({{MFT}}). </p> + <p> If the new streams exceed the maximum number of input streams for this transform, the method returns <strong>{{E_INVALIDARG}}.</strong> To find the maximum number of input streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If any of the new stream identifiers conflicts with an existing input stream, the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTAddInputStreams}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} has a fixed number of input streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of streams to add. </p> </dd> + + + <dd> <p> Array of stream identifiers. The new stream identifiers must not match any existing input streams. </p> </dd> + + + + + <p> Gets an available media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each input stream and orders them by preference. This method enumerates the available media types for an input stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream might change the available types for another stream, or change the preference order. However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetInputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of input types until one or more output types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p><p>For encoders, after the output type is set, <strong>GetInputAvailableType</strong> must return a list of input types that are compatible with the current output type. This means that all types returned by <strong>GetInputAvailableType</strong> after the output type is set must be valid types for <strong>SetInputType</strong>.</p><p>Encoders should reject input types if the attributes of the input media type and output media type do not match, such as resolution setting with {{MF_MT_FRAME_SIZE}}, nominal range setting with {{MF_MT_VIDEO_NOMINAL_RANGE}}, or frame rate setting with {{MF_MT_FRAME_SIZE}}</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. </p> </dd> + + + + + <p> Gets an available media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each output stream and orders them by preference. This method enumerates the available media types for an output stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns {{MF_}}<strong>{{E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream can change the available types for another stream (or change the preference order). However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of output types until one or more input types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function. </p><p> This method can return a <em>partial</em> media type. A partial media type contains an incomplete description of a format, and is used to provide a hint to the caller. For example, a partial type might include just the major type and subtype {{GUIDs}}. However, after the client sets the input types on the {{MFT}}, the {{MFT}} should generally return at least one complete output type, which can be used without further modification. For more information, see Complete and Partial Media Types.</p><p>Some {{MFTs}} cannot provide an accurate list of output types until the {{MFT}} receives the first input sample. For example, the {{MFT}} might need to read the first packet header to deduce the format. An {{MFT}} should handle this situation as follows:</p><ol> <li> Before the {{MFT}} receives any input, it offers a list of one or more output types that it could possibly produce. For example, an {{MPEG}}-2 decoder might return a media type that describes the {{MPEG}}-2 main profile/main level. </li> <li> The client selects one of these types (generally the first) and sets it on the output stream. </li> <li> The client delivers the first input sample by calling <strong>{{IMFTransform::ProcessInput}}</strong>. </li> <li> If the output type does not conform to the input data, the transform signals a format change in the <strong>ProcessOutput</strong> method. For more information about format changes, see <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> The calls <strong>GetOutputAvailableType</strong> again. At this point, the method should return an updated list of types that reflects the input data. </li> <li> The client selects a new output type from this list and calls <strong>SetOutputType</strong>. </li> </ol><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more output types before setting the input type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetInputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more input types before setting the output type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p>If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The transform cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Gets the current media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified input stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetInputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The input media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the current media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified output stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The output media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Queries whether an input stream on this Media Foundation transform ({{MFT}}) can accept more data. </p> + <p> If the method returns the <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong> flag, you can deliver an input sample to the specified stream by calling <strong>{{IMFTransform::ProcessInput}}</strong>. If the method succeeds but does not return any flags in the <em>pdwFlags</em> parameter, it means the input stream already has as much data as it can accept. </p><p> Use this method to test whether the input stream is ready to accept more data, without incurring the overhead of allocating a new sample and calling <strong>ProcessInput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output (or both). </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a member of the <strong>_MFT_INPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong>, the stream specified in <em>dwInputStreamID</em> can accept more input data. </p> </dd> + + + + + <p> Queries whether the Media Foundation transform ({{MFT}}) is ready to produce output data. </p> + <p> If the method returns the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag, it means you can generate one or more output samples by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> {{MFTs}} are not required to implement this method. If the method returns <strong>{{E_NOTIMPL}}</strong>, you must call <strong>ProcessOutput</strong> to determine whether the transform has output data. </p><p> If the {{MFT}} has more than one output stream, but it does not produce samples at the same time for each stream, it can set the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag when just one stream is ready. However, if the {{MFT}} normally produces samples at the same time for each output stream, it should not set this flag until all streams are ready. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a member of the <strong>_MFT_OUTPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong>, the {{MFT}} can produce an output sample. </p> </dd> + + + + + <p> Sets the range of time stamps the client needs for output. </p> + <p> This method can be used to optimize preroll, especially in formats that have gaps between time stamps, or formats where the data must start on a sync point, such as {{MPEG}}-2. Calling this method is optional, and implementation of this method by an {{MFT}} is optional. If the {{MFT}} does not implement the method, the return value is <strong>{{E_NOTIMPL}}</strong>.</p><p> If an {{MFT}} implements this method, it must limit its output data to the range of times specified by <em>hnsLowerBound</em> and <em>hnsUpperBound</em>. The {{MFT}} discards any input data that is not needed to produce output within this range. If the sample boundaries do not exactly match the range, the {{MFT}} should split the output samples, if possible. Otherwise, the output samples can overlap the range. </p><p> For example, suppose the output range is 100 to 150 milliseconds (ms), and the output format is video with each frame lasting 33 ms. A sample with a time stamp of 67 ms overlaps the range (67 + 33 = 100) and is produced as output. A sample with a time stamp of 66 ms is discarded (66 + 33 = 99). Similarly, a sample with a time stamp of 150 ms is produced as output, but a sample with a time stamp of 151 is discarded.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputBounds}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the earliest time stamp. The Media Foundation transform ({{MFT}}) will accept input until it can produce an output sample that begins at this time; or until it can produce a sample that ends at this time or later. If there is no lower bound, use the value <strong>{{MFT_OUTPUT_BOUND_LOWER_UNBOUNDED}}</strong>. </p> </dd> + + + <dd> <p> Specifies the latest time stamp. The {{MFT}} will not produce an output sample with time stamps later than this time. If there is no upper bound, use the value <strong>{{MFT_OUTPUT_BOUND_UPPER_UNBOUNDED}}</strong>. </p> </dd> + + + + + <p> Sends an event to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> An {{MFT}} can handle sending the event downstream, or it can let the pipeline do this, as indicated by the return value: </p><ul> <li><strong>{{E_NOTIMPL}}</strong>: The {{MFT}} ignores all events, and the pipeline should send all events downstream. After the pipeline receives this return value, it might not call <strong>ProcessEvent</strong> again. </li> <li><strong>{{S_OK}}</strong>: The {{MFT}} has examined this event, but the pipeline should send the event downstream. Internally, the {{MFT}} might respond to the event in some way, or it might ignore the event. </li> <li><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong>: The pipeline should not propagate this event downstream. Either the {{MFT}} will send the event downstream, or else the {{MFT}} will consume the event and not send it downstream. The {{MFT}} should only consume the event if the event should stop at this {{MFT}} and not travel any further downstream. But in most cases, the event should travel downstream. </li> </ul><p> To send the event downstream, the {{MFT}} adds the event to the collection object that is provided by the client in the <strong>pEvents</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure, when the client calls <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> Events must be serialized with the samples that come before and after them. Attach the event to the output sample that follows the event. (The pipeline will process the event first, and then the sample.) If an {{MFT}} holds back one or more samples between calls to <strong>{{IMFTransform::ProcessInput}}</strong> and <strong>ProcessOutput</strong>, the {{MFT}} should handle sending all events downstream, because in this situation the pipeline cannot correlate input samples with output samples. </p><p> If an {{MFT}} does not hold back samples and does not need to examine any events, it can return <strong>{{E_NOTIMPL}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessEvent}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong></dt> </dl> </td><td> <p> The pipeline should not propagate the event. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of an event object. </p> </dd> + + + + + <p> Sends a message to the Media Foundation transform ({{MFT}}). </p> + <p> Before calling this method, set the media types on all input and output streams. </p><p> The {{MFT}} might ignore certain message types. If so, the method returns <strong>{{S_OK}}</strong>. An error code indicates that the transform handles this message type but was unable to process the message in this instance. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessMessage}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. Applies to the <strong>{{MFT_MESSAGE_NOTIFY_END_OF_STREAM}}</strong> message. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The message to send, specified as a member of the <strong>{{MFT_MESSAGE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Message parameter. The meaning of this parameter depends on the message type. </p> </dd> + + + + + <p> Delivers data to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> In most cases, if the method succeeds, the {{MFT}} stores the sample and holds a reference count on the <strong>{{IMFSample}}</strong> reference. Do not re-use the sample until the {{MFT}} releases the sample. Instead of storing the sample, however, an {{MFT}} might copy the sample data into a new buffer. In that case, the {{MFT}} should set the <strong>{{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}</strong> flag in the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method. </p><p> If the {{MFT}} already has enough input data to produce an output sample, it does not accept new input data, and <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. At that point, the client should clear the pending input data by doing one of the following: </p><ul> <li> Generate new output by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> Flush the input data by calling <strong>{{IMFTransform::ProcessMessage}}</strong> with the {{MFT_}}<strong>{{MESSAGE_COMMAND_FLUSH}}</strong> message. </li> </ul><p> An exception to this rule is the <strong>{{MFT_OUTPUT_STREAM_LAZY_READ}}</strong> flag. When this flag is present, the transform will discard stored samples if you give it more input. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. A transform should never queue any more input data than is required to produce the correct output. </p><p> An {{MFT}} can process the input data in the <strong>ProcessInput</strong> method. However, most {{MFTs}} wait until the client calls <strong>ProcessOutput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. It should never be in both states or neither state. An {{MFT}} should only accept as much input as it needs to generate at least one output sample, at which point <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. When <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>, the client can assume that the {{MFT}} is ready to produce output. </p><p> If an {{MFT}} encounters a non-fatal error in the input data, it can simply drop the data and attempt to recover when it gets the more input data. To request more input data, the {{MFT}} returns <strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong> from the <strong>{{IMFTransform::ProcessOutput}}</strong> method. If the {{MFT}} drops any data, it should set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute attribute on the next output sample, to notify the caller that there is a gap in the data stream. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessInput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The input sample requires a valid sample duration. To set the duration, call <strong>{{IMFSample::SetSampleDuration}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid durations. Some {{MFTs}} do not require sample durations.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The input sample requires a time stamp. To set the time stamp, call <strong>{{IMFSample::SetSampleTime}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid time stamps. Some {{MFTs}} do not require time stamps.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> The transform cannot process more input at this time. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The media type is not supported for DirectX Video Acceleration ({{DXVA}}). A {{DXVA}}-enabled decoder might return this error code. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessInput}}</strong>, unlike the <strong>{{IMediaObject::ProcessInput}}</strong> method.? + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The sample must contain at least one media buffer that contains valid input data. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + + + <p> Generates output from the current input data. </p> + <p> The size of the <em>pOutputSamples</em> array must be equal to or greater than the number of <em>selected</em> output streams. The number of selected output streams equals the total number of output streams minus the number of <em>deselected</em> streams. A stream is deselected if it has the <strong>{{MFT_OUTPUT_STREAM_OPTIONAL}}</strong> flag and the caller does not set a media type (or sets the media type to <strong>{{NULL}}</strong>). For more information, see <strong>_MFT_OUTPUT_STREAM_INFO_FLAGS</strong> enumeration. </p><p>This method generates output samples and can also generate events. If the method succeeds, at least one of the following conditions is true:</p><ul> <li> One or more samples in the <em>pOutputSamples</em> array contains output data. </li> <li> One or more members of the <em>pOutputSamples</em> array contains a non-empty collection of events. </li> </ul><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including Mftransform.h, this method is renamed <strong>{{MFTProcessOutput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The <strong>ProcessOutput</strong> method was called on an asynchronous {{MFT}} that was not expecting this method call.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier in the <strong>dwStreamID</strong> member of one or more <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong></dt> </dl> </td><td> <p> The transform cannot produce output data until it receives more input data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_STREAM_CHANGE}}</strong></dt> </dl> </td><td> <p> The format has changed on an output stream, or there is a new preferred format, or there is a new output stream. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the media type on one or more streams of the {{MFT}}. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessOutput}}</strong>, unlike the <strong>{{IMediaObject::ProcessOutput}}</strong> method.? + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_FLAGS</strong> enumeration. </p> </dd> + + + <dd> <p> Number of elements in the <em>pOutputSamples</em> array. The value must be at least 1. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures, allocated by the caller. The {{MFT}} uses this array to return output data to the caller. </p> </dd> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_STATUS</strong> enumeration. </p> </dd> + + + + + <p> </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>The <strong>SetInputStreamState</strong> method sets the Device {{MFT}} input stream state and media type.</p> + <p>This interface function helps to transition the input stream to a specified state with a specified media type set on the input stream. This will be used by device transform manager ({{DTM}}) when the Device {{MFT}} requests a specific input stream?s state and media type to be changed. Device {{MFT}} would need to request such a change when one of the Device {{MFT}}'s output changes.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, if Output 2?s media type changes to 1080p, Device {{MFT}} has to change Input 1's media type to 1080p. To achieve this, Device {{MFT}} should request {{DTM}} to call this method using the {{METransformInputStreamStateChanged}} message. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Initialization succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>When <strong>{{S_OK}}</strong> is returned, perform the state change operation. Otherwise, this contains an error that occurred while setting the media type on the devproxy output pin. In this case, propagate the error appropriately.</p> </dd> + + + + + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + + + + + + + + + + + + + <p>Creates a generic activation object for Media Foundation transforms ({{MFTs}}).</p> + <p>Most applications will not use this function; it is used internally by the <strong>{{MFTEnumEx}}</strong> function. </p><p>An <em>activation object</em> is a helper object that creates another object, somewhat similar to a class factory. The <strong>{{MFCreateTransformActivate}}</strong> function creates an activation object for {{MFTs}}. Before this activation object can create an {{MFT}}, the caller must initialize the activation object by setting one or more attributes on it.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MFT_TRANSFORM_CLSID_Attribute}} </td><td>Required. Contains the {{CLSID}} of the {{MFT}}. The activation object creates the {{MFT}} by passing this {{CLSID}} to the <strong>CoCreateInstance</strong> function.</td></tr> <tr><td> {{MF_TRANSFORM_CATEGORY_Attribute}} </td><td>Optional. Specifies the category of the {{MFT}}.</td></tr> <tr><td> {{MF_TRANSFORM_FLAGS_Attribute}} </td><td>Contains various flags that describe the {{MFT}}. For hardware-based {{MFTs}}, set the <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flag. Otherwise, this attribute is optional.</td></tr> <tr><td> {{MFT_CODEC_MERIT_Attribute}} </td><td> <p>Optional. Contains the merit value of a hardware codec.</p> <p>If this attribute is set and its value is greater than zero, the activation object calls <strong>{{MFGetMFTMerit}}</strong> to get the trusted merit value for the {{MFT}}. If the trusted merit is less than the value of this attribute, the activation object's <strong>{{IMFActivate::ActivateObject}}</strong> method fails and returns <strong>{{MF_E_INVALID_CODEC_MERIT}}</strong>.</p> </td></tr> <tr><td> {{MFT_ENUM_HARDWARE_URL_Attribute}} </td><td>Required for hardware-based {{MFTs}}. Specifies the symbolic link for the hardware device. The device proxy uses this value to configure the {{MFT}}.</td></tr> <tr><td> {{MFT_FIELDOFUSE_UNLOCK_Attribute}} </td><td> <p>Optional. Contains an <strong>{{IMFFieldOfUseMFTUnlock}}</strong> reference, which can be used to unlock the {{MFT}}. The <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface is used with {{MFTs}} that have usage restrictions.</p> <p>If this attribute is set and the {{MF_TRANSFORM_FLAGS_Attribute}} attribute contains the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag, the activation object calls <strong>{{IMFFieldOfUseMFTUnlock::Unlock}}</strong> when it creates the {{MFT}}. An application can also set the {{MFT_FIELDOFUSE_UNLOCK_Attribute}} attribute without setting the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag. In that case, the application must call <strong>Unlock</strong>.</p> </td></tr> <tr><td> {{MFT_PREFERRED_ENCODER_PROFILE}} </td><td> <p>Optional. Contains the encoding profile for an encoder. The value of this attribute is an <strong>{{IMFAttributes}}</strong> reference.</p> <p>If this attribute is set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object uses the encoding profile to configure the {{MFT}}. The {{MFT}} must expose either <strong>{{ICodecAPI}}</strong> or <strong>{{IPropertyStore}}</strong> for this purpose.</p> </td></tr> <tr><td> {{MFT_PREFERRED_OUTPUTTYPE_Attribute}} </td><td> <p>Optional. Specifies the preferred output format for an encoder.</p> <p>If this attribute set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object sets this media type on the {{MFT}}.</p> </td></tr> </table><p>?</p><p>For more information about activation objects, see Activation Objects. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</code> enumeration defines flags that describe an input buffer.</p> + + + <dd> <p>The beginning of the data is a synchronization point.</p> </dd> + + + <dd> <p>The buffer's time stamp is valid.</p> <p>The buffer's indicated time length is valid.</p> </dd> + + + <dd> <p>The buffer's indicated time length is valid.</p> </dd> + + + + + + + + <p>Media Foundation transforms ({{MFTs}}) are an evolution of the transform model first introduced with DirectX Media Objects ({{DMOs}}). This topic summarizes the main ways in which {{MFTs}} differ from {{DMOs}}. Read this topic if you are already familiar with the {{DMO}} interfaces, or if you want to convert an existing {{DMO}} into an {{MFT}}.</p><p>This topic contains the following sections:</p><p> </p><ul> <li>{{Number}}</li> <li>{{Format}}</li> <li>{{Streaming}}<ul> <li>{{Allocating}}</li> <li>{{Processing}}</li> <li>{{Flushing}}</li> <li>{{Stream}}</li> </ul> </li> <li>{{Miscellaneous}}</li> <li>{{Flags}}<ul> <li>{{ProcessInput}}</li> <li>{{ProcessOutput}}</li> <li>{{GetInputStatus}}</li> <li>{{GetOutputStatus}}</li> <li>{{GetInputStreamInfo}}</li> <li>{{GetOutputStreamInfo}}</li> <li>{{SetInputType/SetOutputType}}</li> </ul> </li> <li>{{Error}}</li> <li>{{Creating}}</li> <li>{{Related}}</li> </ul> + + + + <p> </p><p>The <code>{{DMO_INPUT_STREAM_INFO_FLAGS}}</code> enumeration defines flags that describe an input stream.</p> + + + <dd> <p>The stream requires whole samples. Samples must not span multiple buffers, and buffers must not contain partial samples.</p> </dd> + + + <dd> <p>Each buffer must contain exactly one sample.</p> </dd> + + + <dd> <p>All the samples in this stream must be the same size.</p> </dd> + + + <dd> <p>The {{DMO}} performs lookahead on the incoming data, and may hold multiple input buffers for this stream.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{DMO_SET_TYPE_FLAGS}}</code> enumeration defines flags for setting the media type on a stream.</p> + <p>The {{DMO_SET_TYPEF_TEST_ONLY}} and {{DMO_SET_TYPEF_CLEAR}} flags are mutually exclusive. Do not set both flags.</p> + + + <dd> <p>Test the media type but do not set it.</p> </dd> + + + <dd> <p>Clear the media type that was set for the stream.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_PROCESS_OUTPUT_FLAGS}}</code> enumeration defines flags that specify output processing requests.</p> + + + <dd> <p>Discard the output when the reference to the output buffer is <strong>{{NULL}}</strong>.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <strong>{{DMO_MEDIA_TYPE}}</strong> structure describes the format of the data used by a stream in a Microsoft DirectX Media Object ({{DMO}}).</p> + <p>This structure is identical to the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The <strong>bFixedSizeSamples</strong>, <strong>bTemporalCompression</strong>, and <strong>lSampleSize</strong> members are for compatibility with DirectShow. Other {{DMO}} clients are not required to use them.</p> + + + <dd> <p>Major type {{GUID}} of the stream.</p> </dd> + + + <dd> <p>Subtype {{GUID}} of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are of a fixed size. This field is informational only. For audio, it is generally set to <strong>{{TRUE}}</strong>. For video, it is usually <strong>{{TRUE}}</strong> for uncompressed video and <strong>{{FALSE}}</strong> for compressed video.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are compressed using temporal (interframe) compression. (A value of <strong>{{TRUE}}</strong> indicates that not all frames are key frames.) This field is informational only.</p> </dd> + + + <dd> <p>Size of the sample in bytes. For compressed data, the value can be zero.</p> </dd> + + + <dd> <p>{{GUID}} specifying the format type. The <strong>pbFormat</strong> member points to the corresponding format structure. Format types include the following.</p> <table> <tr><th>Format type</th><th>Format structure</th></tr> <tr><td><dl> <dt><strong>{{FORMAT_DvInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{DVINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEG2Video}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG2VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEGVideo}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG1VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_None}}</strong></dt> </dl> </td><td> <p>None.</p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER2}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </td><td> <p> <strong>{{WAVEFORMATEX}}</strong> </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Not used. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the format block of the media type.</p> </dd> + + + <dd> <p>Pointer to the format structure. The structure type is specified by the <strong>formattype</strong> member. The format structure must be present, unless <strong>formattype</strong> is {{GUID_NULL}} or {{FORMAT_None}}.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{IMediaBuffer}}</code> interface provides methods for manipulating a data buffer. Buffers passed to the <strong>{{IMediaObject::ProcessInput}}</strong> and <strong>ProcessOutput</strong> methods must implement this interface.</p> + + + + + + + + + + + + + <p> </p><p>The <code>{{IMediaObject}}</code> interface provides methods for manipulating a Microsoft DirectX Media Object ({{DMO}}).</p> + + + + + + + + + + <p> </p><p>The <code>GetOutputStreamInfo</code> method retrieves information about an output stream; for example, whether the stream is discardable, and whether it uses a fixed sample size. This information never changes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a bitwise combination of zero or more <strong>{{DMO_OUTPUT_STREAM_INFO_FLAGS}}</strong> flags.</p> </dd> + + + + + <p> </p><p>The <code>GetInputType</code> method retrieves a preferred media type for a specified input stream.</p> + <p>Call this method to enumerate an input stream's preferred media types. The {{DMO}} assigns each media type an index value in order of preference. The most preferred type has an index of zero. To enumerate all the types, make successive calls while incrementing the type index until the method returns {{DMO_E_NO_MORE_ITEMS}}. The {{DMO}} is not guaranteed to enumerate every media type that it supports.</p><p>The format block in the returned type might be <strong>{{NULL}}</strong>. If so, the format type is {{GUID_NULL}}. Check the format type before dereferencing the format block.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block. (This function is also safe to call when the format block is <strong>{{NULL}}</strong>.)</p><p>To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method. Setting the media type on one stream can change another stream's preferred types. In fact, a stream might not have a preferred type until the type is set on another stream. For example, a decoder might not have a preferred output type until the input type is set. However, the {{DMO}} is not required to update its preferred types dynamically in this fashion. Thus, the types returned by this method are not guaranteed to be valid; they might fail when used in the <strong>SetInputType</strong> method.</p><p>To test whether a particular media type is acceptable, call <strong>SetInputType</strong> with the {{DMO_SET_TYPEF_TEST_ONLY}} flag.</p><p>To test whether the <em>dwTypeIndex</em> parameter is in range, set <em>pmt</em> to <strong>{{NULL}}</strong>. The method returns {{S_OK}} if the index is in range, or {{DMO_E_NO_MORE_ITEMS}} if the index is out of range.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NO_MORE_ITEMS}}</strong></dt> </dl> </td><td> <p>Type index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Zero-based index on the set of acceptable media types.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller, or <strong>{{NULL}}</strong>. If this parameter is non-<strong>{{NULL}}</strong>, the method fills the structure with the media type. You can use the value <strong>{{NULL}}</strong> to test whether the type index is in range, by checking the return code.</p> </dd> + + + + + + + + <p> </p><p>The <code>SetInputType</code> method sets the media type on an input stream, or tests whether a media type is acceptable.</p> + <p>Call this method to test, set, or clear the media type on an input stream:</p><ul> <li>To test the media type without setting it, use the {{DMO_SET_TYPEF_TEST_ONLY}} flag. If the media type is not acceptable, the method returns {{S_FALSE}}.</li> <li>To set the media type, set <em>dwFlags</em> to zero. If the media type is not acceptable, the method returns {{DMO_E_TYPE_NOT_ACCEPTED}}.</li> <li>To clear the current media type (if any), use the {{DMO_SET_TYPEF_CLEAR}} flag and set <em>pmt</em> to <strong>{{NULL}}</strong>. When the method returns, the stream no longer has a media type. The {{DMO}} cannot process samples until the application sets a new media type.</li> </ul><p>The media types that are currently set on other streams can affect whether the media type is acceptable.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_ACCEPTED}}</strong></dt> </dl> </td><td> <p>Media type was not accepted</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Media type is not acceptable</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Media type was set successfully, or is acceptable</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure that specifies the media type.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_SET_TYPE_FLAGS}}</strong> enumeration.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputCurrentType</code> method retrieves the media type that was set for an input stream, if any.</p> + <p>The caller must set the media type for the stream before calling this method. To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller. The method fills the structure with the media type.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputSizeInfo</code> method retrieves the buffer requirements for a specified input stream.</p> + <p>The buffer requirements may depend on the media types of the various streams. Before calling this method, set the media type of each stream by calling the <strong>{{IMediaObject::SetInputType}}</strong> and <strong>{{IMediaObject::SetOutputType}}</strong> methods. If the media types have not been set, this method might return an error.</p><p>If the {{DMO}} performs lookahead on the input stream, it returns the {{DMO_INPUT_STREAMF_HOLDS_BUFFERS}} flag in the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method. During processing, the {{DMO}} holds up to the number of bytes indicated by the <em>pcbMaxLookahead</em> parameter. The application must allocate enough buffers for the {{DMO}} to hold this much data.</p><p>A buffer is <em>aligned</em> if the buffer's start address is a multiple of <em>*pcbAlignment</em>. The alignment must be a power of two. Depending on the microprocessor, reads and writes to an aligned buffer might be faster than to an unaligned buffer. Also, some microprocessors do not support unaligned reads and writes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the minimum size of an input buffer for this stream, in bytes.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the maximum amount of data that the {{DMO}} will hold for lookahead, in bytes. If the {{DMO}} does not perform lookahead on the stream, the value is zero.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required buffer alignment, in bytes. If the input stream has no alignment requirement, the value is 1.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>Flush</code> method flushes all internally buffered data.</p> + <p>The {{DMO}} performs the following actions when this method is called:</p><ul> <li>Releases any <strong>{{IMediaBuffer}}</strong> references it holds.</li> <li>Discards any values that specify the time stamp or sample length for a media buffer.</li> <li>Reinitializes any internal states that depend on the contents of a media sample.</li> </ul><p>Media types, maximum latency, and locked state do not change.</p><p>When the method returns, every input stream accepts data. Output streams cannot produce any data until the application calls the <strong>{{IMediaObject::ProcessInput}}</strong> method on at least one input stream.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + + <p> </p><p>The <code>Discontinuity</code> method signals a discontinuity on the specified input stream.</p> + <p>A discontinuity represents a break in the input. A discontinuity might occur because no more data is expected, the format is changing, or there is a gap in the data. After a discontinuity, the {{DMO}} does not accept further input on that stream until all pending data has been processed. The application should call the <strong>{{IMediaObject::ProcessOutput}}</strong> method until none of the streams returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag.</p><p>This method might fail if it is called before the client sets the input and output types on the {{DMO}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The {{DMO}} is not accepting input.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The input and output types have not been set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>ProcessInput</code> method delivers a buffer to the specified input stream.</p> + <p>The input buffer specified in the <em>pBuffer</em> parameter is read-only. The {{DMO}} will not modify the data in this buffer. All write operations occur on the output buffers, which are given in a separate call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>If the {{DMO}} does not process all the data in the buffer, it keeps a reference count on the buffer. It releases the buffer once it has generated all the output, unless it needs to perform lookahead on the data. (To determine whether a {{DMO}} performs lookahead, call the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method.)</p><p>If this method returns {{DMO_E_NOTACCEPTING}}, call <strong>ProcessOutput</strong> until the input stream can accept more data. To determine whether the stream can accept more data, call the <strong>{{IMediaObject::GetInputStatus}}</strong> method.</p><p>If the method returns {{S_FALSE}}, no output was generated from this input and the application does not need to call <strong>ProcessOutput</strong>. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>Data cannot be accepted.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output to process.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to the buffer's <strong>{{IMediaBuffer}}</strong> interface.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Time stamp that specifies the start time of the data in the buffer. If the buffer has a valid time stamp, set the {{DMO_INPUT_DATA_BUFFERF_TIME}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + <dd> <p>Reference time specifying the duration of the data in the buffer. If this value is valid, set the {{DMO_INPUT_DATA_BUFFERF_TIMELENGTH}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + + + <p> </p><p>The <code>ProcessOutput</code> method generates output from the current input data.</p> + <p>The <em>pOutputBuffers</em> parameter points to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures. The application must allocate one structure for each output stream. To determine the number of output streams, call the <strong>{{IMediaObject::GetStreamCount}}</strong> method. Set the <em>cOutputBufferCount</em> parameter to this number.</p><p>Each <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure contains a reference to a buffer's <strong>{{IMediaBuffer}}</strong> interface. The application allocates these buffers. The other members of the structure are status fields. The {{DMO}} sets these fields if the method succeeds. If the method fails, their values are undefined.</p><p>When the application calls <code>ProcessOutput</code>, the {{DMO}} processes as much input data as possible. It writes the output data to the output buffers, starting from the end of the data in each buffer. (To find the end of the data, call the <strong>{{IMediaBuffer::GetBufferAndLength}}</strong> method.) The {{DMO}} never holds a reference count on an output buffer.</p><p>If the {{DMO}} fills an entire output buffer and still has input data to process, the {{DMO}} returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag in the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure. The application should check for this flag by testing the <strong>dwStatus</strong> member of each structure.</p><p>If the method returns {{S_FALSE}}, no output was generated. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p><p><strong>Discarding data:</strong></p><p>You can discard data from a stream by setting the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <em>dwFlags</em> parameter. For each stream that you want to discard, set the <strong>pBuffer</strong> member of the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure to <strong>{{NULL}}</strong>.</p><p>For each stream in which <strong>pBuffer</strong> is <strong>{{NULL}}</strong>:</p><ul> <li>If the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag is set, and the stream is discardable or optional, the {{DMO}} discards the data.</li> <li>If the flag is set but the stream is neither discardable nor optional, the {{DMO}} discards the data if possible. It is not guaranteed to discard the data.</li> <li>If the flag is not set, the {{DMO}} does not produce output data for that stream, but does not discard the data.</li> </ul><p>To check whether a stream is discardable or optional, call the <strong>{{IMediaObject::GetOutputStreamInfo}}</strong> method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output was generated</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_PROCESS_OUTPUT_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Number of output buffers.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures containing the output buffers. Specify the size of the array in the <em>cOutputBufferCount</em> parameter.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a reserved value (zero). The application should ignore this value.</p> </dd> + + + + + <p> </p><p>The <code>Lock</code> method acquires or releases a lock on the {{DMO}}. Call this method to keep the {{DMO}} serialized when performing multiple operations.</p> + <p>This method prevents other threads from calling methods on the {{DMO}}. If another thread calls a method on the {{DMO}}, the thread blocks until the lock is released.</p><p>If you are using the Active Template Library ({{ATL}}) to implement a {{DMO}}, the name of the Lock method conflicts with the <strong>{{CComObjectRootEx::Lock}}</strong> method. To work around this problem, define the preprocessor symbol {{FIX_LOCK_NAME}} before including the header file Dmo.h:</p><pre> #define {{FIX_LOCK_NAME}} +#include &lt;dmo.h&gt; +</pre><p>This directive causes the preprocessor to rename the <strong>{{IMediaObject}}</strong> method to <em>{{DMOLock}}</em>. In your {{DMO}}, implement the method as <em>{{DMOLock}}</em>. In your implementation, call the {{ATL}} <strong>Lock</strong> or <strong>Unlock</strong> method, depending on the value of <em>bLock</em>. Applications can still invoke the method using the name <em>Lock</em> because the vtable order does not change.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Value that specifies whether to acquire or release the lock. If the value is non-zero, a lock is acquired. If the value is zero, the lock is released.</p> </dd> + + + + + + + + <p> </p><p>The <code>Next</code> method retrieves a specified number of items in the enumeration sequence.</p> + <p>If the method succeeds, the arrays given by the <em>pCLSID</em> and <em>Names</em> parameters are filled with {{CLSIDs}} and wide-character strings. The value of *<em>pcItemsFetched</em> specifies the number of items returned in these arrays.</p><p>The method returns {{S_OK}} if it retrieves the requested number of items (in other words, if *<em>pcItemsFetched</em> equals <em>cItemsToFetch</em>). Otherwise, it returns {{S_FALSE}} or an error code.</p><p>The caller must free the memory allocated for each string returned in the <em>Names</em> parameter, using the <strong>CoTaskMemFree</strong> function.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Retrieved fewer items than requested.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Retrieved the requested number of items.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of items to retrieve.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the {{CLSIDs}} of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the friendly names of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the actual number of items retrieved. Can be <strong>{{NULL}}</strong> if <em>cItemsToFetch</em> equals 1.</p> </dd> + + + + + + + + <p> </p><p>The <code>Reset</code> method resets the enumeration sequence to the beginning.</p> + <p>Returns {{S_OK}}.</p> + + + + + + + + + + + + + <p> </p><p>The <code>Clone</code> method creates a copy of the {{DMO}} in its current state.</p> + <p>If the method succeeds, the <strong>{{IMediaObjectInPlace}}</strong> interface that it returns has an outstanding reference count. Be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Address of a reference to receive the new {{DMO}}'s <strong>{{IMediaObjectInPlace}}</strong> interface.</p> </dd> + + + + + <p> </p><p>The <code>GetLatency</code> method retrieves the latency introduced by this {{DMO}}.</p> + <p>This method returns the average time required to process each buffer. This value usually depends on factors in the run-time environment, such as the processor speed and the {{CPU}} load. One possible way to implement this method is for the {{DMO}} to keep a running average based on historical data.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Pointer to a variable that receives the latency, in 100-nanosecond units.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>The <code>GetCurrentOperationMode</code> method retrieves the optimization features in effect.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the current features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>The <code>GetCurrentSampleRequirements</code> method retrieves the optimization features required to process the next sample, given the features already agreed to by the application.</p> + <p>After an application calls the <strong>{{IDMOVideoOutputOptimizations::SetOperationMode}}</strong> method, it must provide all the features it has agreed to. However, the {{DMO}} might not require every feature on every sample. This method enables the {{DMO}} to waive an agreed-upon feature for one sample.</p><p>Before processing a sample, the application can call this method. If the {{DMO}} does not require a given feature in order to process the next sample, it omits the corresponding flag from the <em>pdwRequestedFeatures</em> parameter. For the next sample only, the application can ignore the feature. The results of this method are valid only for the next call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>The {{DMO}} will return only the flags that were agreed to in the <strong>SetOperationMode</strong> method. In other words, you cannot dynamically enable new features with this method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Defines error status codes for the Media Engine.</p> + <p>The values greater than zero correspond to error codes defined for the <strong>MediaError</strong> object in {{HTML5}}.</p> + + + <dd> <p>No error.</p> </dd> + + + <dd> <p>The process of fetching the media resource was stopped at the user's request. </p> </dd> + + + <dd> <p>A network error occurred while fetching the media resource. </p> </dd> + + + <dd> <p>An error occurred while decoding the media resource. </p> </dd> + + + <dd> <p>The media resource is not supported. </p> </dd> + + + <dd> <p>An error occurred while encrypting the media resource.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines event codes for the Media Engine. </p> + <p>The application receives Media Engine events through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. The <strong>EventNotify</strong> method includes two event parameters, <em>param1</em> and <em>param2</em>. The meaning of the parameters depends on the event code. If the event description does not list any parameters, ignore the values of <em>param1</em> and <em>param2</em>.</p><p>Values below 1000 correspond to events defined in {{HTML}} 5 for media elements.</p> + + + <dd> <p>The Media Engine has started to load the source. See <strong>{{IMFMediaEngine::Load}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine is loading the source.</p> </dd> + + + <dd> <p>The Media Engine has suspended a load operation.</p> </dd> + + + <dd> <p>The Media Engine cancelled a load operation that was in progress. </p> </dd> + + + <dd> <p>An error occurred.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A member of the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</td></tr> <tr><td><em>param2</em></td><td>An <strong>{{HRESULT}}</strong> error code, or zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine has switched to the <strong>{{MF_MEDIA_ENGINE_NETWORK_EMPTY}}</strong> state. This can occur when the <strong>{{IMFMediaEngine::Load}}</strong> method is called, or if an error occurs during the <strong>Load</strong> method. See <strong>{{IMFMediaEngine::GetNetworkState}}</strong>.</p> </dd> + + + <dd> <p>The <strong>Load</strong> algorithm is stalled, waiting for data.</p> </dd> + + + <dd> <p>The Media Engine is switching to the playing state. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>The media engine has paused. See <strong>{{IMFMediaEngine::Pause}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough source data to determine the duration and dimensions of the source.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough data to render some content (for example, a video frame).</p> </dd> + + + <dd> <p>Playback has stopped because the next frame is not available.</p> </dd> + + + <dd> <p>Playback has started. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>Playback can start, but the Media Engine might need to stop to buffer more data.</p> </dd> + + + <dd> <p>The Media Engine can probably play through to the end of the resource, without stopping to buffer data.</p> </dd> + + + <dd> <p>The Media Engine has started seeking to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has seeked to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The playback position has changed. See <strong>{{IMFMediaEngine::GetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>Playback has reached the end of the source. This event is not sent if the <strong>GetLoop</strong>is <strong>{{TRUE}}</strong>.</p> </dd> + + + <dd> <p>The playback rate has changed. See <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> </dd> + + + <dd> <p>The duration of the media source has changed. See <strong>{{IMFMediaEngine::GetDuration}}</strong>.</p> </dd> + + + <dd> <p>The audio volume changed. See <strong>{{IMFMediaEngine::SetVolume}}</strong>.</p> </dd> + + + <dd> <p>The output format of the media source has changed.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>Zero if the video format changed, 1 if the audio format changed.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine flushed any pending events from its queue.</p> </dd> + + + <dd> <p>The playback position reached a timeline marker. See <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong>.</p> </dd> + + + <dd> <p>The audio balance changed. See <strong>{{IMFMediaEngineEx::SetBalance}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has finished downloading the source data.</p> </dd> + + + <dd> <p>The media source has started to buffer data.</p> </dd> + + + <dd> <p>The media source has stopped buffering data.</p> </dd> + + + <dd> <p>The <strong>{{IMFMediaEngineEx::FrameStep}}</strong> method completed.</p> </dd> + + + <dd> <p>The Media Engine's <strong>Load</strong> algorithm is waiting to start.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A handle to a waitable event, of type <strong>{{HANDLE}}</strong>.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> <p>If Media Engine is created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong> flag, the Media Engine sends the <strong>{{MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE}}</strong> event at the start of the <strong>Load</strong> algorithm. The <em>param1</em> parameter is a handle to a waitable event. The <strong>Load</strong> thread waits for the application to signal the event by calling <strong>SetEvent</strong>.</p> <p>If the Media Engine is not created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong>, it does not send this event, and the <strong>Load</strong> thread does not wait to be signalled.</p> </dd> + + + <dd> <p>The first frame of the media source is ready to render.</p> </dd> + + + <dd> <p>Raised when a new track is added or removed.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when there is new information about the Output Protection Manager ({{OPM}}). </p> <p>This event will be raised when an {{OPM}} failure occurs, but {{ITA}} allows fallback without the {{OPM}}. In this case, constriction can be applied. </p> <p>This event will not be raised when there is an {{OPM}} failure and the fallback also fails. For example, if {{ITA}} blocks playback entirely when {{OPM}} cannot be established.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when one of the component streams of a media stream fails. This event is only raised if the media stream contains other component streams that did not fail.</p> </dd> + + + + + <p>Defines network status codes for the Media Engine.</p> + + + <dd> <p>The initial state.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, and has selected a media resource, but is not using the network.</p> </dd> + + + <dd> <p>The Media Engine is loading a media resource.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, but has not selected a media resource.</p> </dd> + + + + + <p>Defines ready-state values for the Media Engine.</p> + <p>These values correspond to constants defined for the <strong>{{HTMLMediaElement}}.readyState</strong> attribute in {{HTML5}}.</p> + + + <dd> <p>No data is available.</p> </dd> + + + <dd> <p>Some metadata is available, including the duration and, for video files, the video dimensions. No media data is available.</p> </dd> + + + <dd> <p>There is media data for the current playback position, but not enough data for playback or seeking.</p> </dd> + + + <dd> <p>There is enough media data to enable some playback or seeking. The amount of data might be a little as the next video frame.</p> </dd> + + + <dd> <p>There is enough data to play the resource, based on the current rate at which the resource is being fetched. </p> </dd> + + + + + <p>Specifies the likelihood that the Media Engine can play a specified type of media resource.</p> + + + <dd> <p>The Media Engine cannot play the resource.</p> </dd> + + + <dd> <p>The Media Engine might be able to play the resource.</p> </dd> + + + <dd> <p>The Media Engine can probably play the resource.</p> </dd> + + + + + <p>Defines preload hints for the Media Engine. These values correspond to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + + + <dd> <p>The <strong>preload</strong> attribute is missing. </p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is an empty string. This value is equivalent to <strong>{{MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC}}</strong>.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "none". This value is a hint to the user agent not to preload the resource.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "metadata". This value is a hint to the user agent to fetch the resource metadata.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "auto". This value is a hint to the user agent to preload the entire resource.</p> </dd> + + + + + <p>Specifies the layout for a packed 3D video frame.</p> + + + <dd> <p>None.</p> </dd> + + + <dd> <p>The views are packed side-by-side in a single frame.</p> </dd> + + + <dd> <p>The views are packed top-to-bottom in a single frame.</p> </dd> + + + + + <p>Identifies statistics that the Media Engine tracks during playback. To get a playback statistic from the Media Engine, call <strong>{{IMFMediaEngineEx::GetStatistics}}</strong>.</p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Defines values for the media engine seek mode.</p> + <p>This enumeration is used with the <strong>MediaEngineEx::SetCurrentTimeEx</strong>.</p> + + + <dd> <p>Specifies normal seek.</p> </dd> + + + <dd> <p>Specifies an approximate seek. </p> </dd> + + + + + <p>Specifies media engine extension types.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies the content protection requirements for a video frame.</p> + + + <dd> <p>The video frame should be protected.</p> </dd> + + + <dd> <p>Direct3D surface protection must be applied to any surface that contains the frame.</p> </dd> + + + <dd> <p>Direct3D anti-screen-scrape protection must be applied to any surface that contains the frame.</p> </dd> + + + + + + + + + + + + + + <p>Defines the different ready states of the Media Source Extension.</p> + + + <dd> <p>The media source is closed.</p> </dd> + + + <dd> <p>The media source is open.</p> </dd> + + + <dd> <p>The media source is ended.</p> </dd> + + + + + <p>Defines the different error states of the Media Source Extension.</p> + + + <dd> <p>Specifies no error.</p> </dd> + + + <dd> <p>Specifies an error with the network.</p> </dd> + + + <dd> <p>Specifies an error with decoding.</p> </dd> + + + <dd> <p>Specifies an unknown error.</p> </dd> + + + + + <p>Defines media key error codes for the media engine.</p> + <p><strong>{{MF_MEDIA_ENGINE_KEYERR}}</strong> is used with the <em>code</em> parameter of <strong>{{IMFMediaKeySessionNotify::KeyError}}</strong> and the <em>code</em> value returned from <strong>{{IMFMediaKeySession::GetError}}</strong>.</p> + + + <dd> <p>Unknown error occurred.</p> </dd> + + + <dd> <p>An error with the client occurred.</p> </dd> + + + <dd> <p>An error with the service occurred.</p> </dd> + + + <dd> <p>An error with the output occurred.</p> </dd> + + + <dd> <p>An error occurred related to a hardware change.</p> </dd> + + + <dd> <p>An error with the domain occurred.</p> </dd> + + + + + + + + <p>Defines the status of the Output Protection Manager ({{OPM}}).</p> + + + + <p>Contains flags for the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Contains flags that specify whether the Media Engine will play protected content, and whether the Media Engine will use the Protected Media Path ({{PMP}}).</p> + <p>These flags are used with the {{MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS}} attribute.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind of timed text track.</p> + + + <dd> <p>The kind of timed text track is unknown.</p> </dd> + + + <dd> <p>The kind of timed text track is subtitles.</p> </dd> + + + <dd> <p>The kind of timed text track is closed captions.</p> </dd> + + + <dd> <p>The kind of timed text track is metadata.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the units in which the timed text is measured.</p> + + + <dd> <p>The timed text is measured in pixels.</p> </dd> + + + <dd> <p>The timed text is measured as a percentage.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the font style of the timed text.</p> + + + <dd> <p>The font style is normal, sometimes referred to as roman.</p> </dd> + + + <dd> <p>The font style is oblique.</p> </dd> + + + <dd> <p>The font style is italic.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned in its parent block element. </p> + + + <dd> <p>Text is aligned at the start of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned at the end of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned in the center of its parent block element.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned with the display. </p> + + + <dd> <p>Text is aligned before an element.</p> </dd> + + + <dd> <p>Text is aligned after an element.</p> </dd> + + + <dd> <p>Text is aligned in the center between elements.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is decorated (underlined and so on). </p> + + + <dd> <p>Text isn't decorated.</p> </dd> + + + <dd> <p>Text is underlined.</p> </dd> + + + <dd> <p>Text has a line through it.</p> </dd> + + + <dd> <p>Text has a line over it.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the sequence in which text is written on its parent element.</p> + + + <dd> <p>Text is written from left to right and top to bottom.</p> </dd> + + + <dd> <p>Text is written from right to left and top to bottom.</p> </dd> + + + <dd> <p>Text is written from top to bottom and right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom and left to right.</p> </dd> + + + <dd> <p>Text is written from left to right.</p> </dd> + + + <dd> <p>Text is written from right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text appears when the parent element is scrolled.</p> + + + <dd> <p>Text pops on when the parent element is scrolled.</p> </dd> + + + <dd> <p>Text rolls up when the parent element is scrolled.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind error that occurred with a timed text track.</p> + <p>This enumeration is used to return error information from the <strong>{{IMFTimedTextTrack::GetErrorCode}}</strong> method.</p> + + + <dd> <p>No error occurred.</p> </dd> + + + <dd> <p>A fatal error occurred.</p> </dd> + + + <dd> <p>An error occurred with the data format of the timed text track.</p> </dd> + + + <dd> <p>A network error occurred when trying to load the timed text track.</p> </dd> + + + <dd> <p>An internal error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of a timed text cue event.</p> + + + <dd> <p>The cue has become active.</p> </dd> + + + <dd> <p>The cue has become inactive.</p> </dd> + + + <dd> <p>All cues have been deactivated.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Identifies the kind of media stream that failed.</p> + + + <dd> <p>The stream type is unknown.</p> </dd> + + + <dd> <p>The stream is an audio stream.</p> </dd> + + + <dd> <p>The stream is a video stream.</p> </dd> + + + + + + + + <p>Provides the current error status for the Media Engine.</p> + <p>The <strong>{{IMFMediaError}}</strong> interface corresponds to the <strong>MediaError</strong> object in {{HTML5}}.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEngine::GetError}}</strong>.</p> + + + + <p>Gets the error code.</p> + <p>Returns a value from the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</p> + + + + <p>Gets the extended error code.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> + + + + <p>Sets the error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, specified as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets the extended error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> </dd> + + + + + <p>Represents a list of time ranges, where each range is defined by a start and end time.</p> + <p>The <strong>{{IMFMediaTimeRange}}</strong> interface corresponds to the <strong>TimeRanges</strong> interface in {{HTML5}}.</p><p>Several <strong>{{IMFMediaEngine}}</strong> methods return <strong>{{IMFMediaTimeRange}}</strong> references.</p> + + + + <p>Gets the number of time ranges contained in the object.</p> + <p>This method corresponds to the <strong>TimeRanges.length</strong> attribute in {{HTML5}}.</p> + <p>Returns the number of time ranges.</p> + + + + <p>Gets the start time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.start</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the start time, in seconds.</p> </dd> + + + + + <p>Gets the end time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.end</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the end time, in seconds.</p> </dd> + + + + + <p>Queries whether a specified time falls within any of the time ranges.</p> + <p>This method returns <strong>{{TRUE}}</strong> if the following condition holds for any time range in the list:</p><dl> <dd>(<em>start</em> &lt;= <em>time</em>) &amp;&amp; (<em>time</em> &lt;= <em>end</em>)</dd> </dl> + <p>Returns <strong>{{TRUE}}</strong> if any time range contained in this object spans the value of the <em>time</em> parameter. Otherwise, returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The time, in seconds.</p> </dd> + + + + + <p>Adds a new range to the list of time ranges.</p> + <p>If the new range intersects a range already in the list, the two ranges are combined. Otherwise, the new range is added to the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The start time, in seconds.</p> </dd> + + + <dd> <p>The end time, in seconds.</p> </dd> + + + + + <p>Clears the list of time ranges.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Callback interface for the <strong>{{IMFMediaEngine}}</strong> interface. </p> + <p>To set the callback reference on the Media Engine, set the {{MF_MEDIA_ENGINE_CALLBACK}} attribute in the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Notifies the application when a playback event occurs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_EVENT}}</strong> enumeration that specifies the event.</p> </dd> + + + <dd> <p>The first event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + <dd> <p>The second event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + + + <p>Provides the Media Engine with a list of media resources.</p> + <p>The <strong>{{IMFMediaEngineSrcElements}}</strong> interface represents an ordered list of media resources.</p><p>This interface enables the application to provide the same audio/video content in several different encoding formats, such as H.264 and Windows Media Video. If a particular codec is not present on the user's computer, the Media Engine will try the next {{URL}} in the list. To use this interface, do the following:</p><ol> <li>Create an implementation of this interface.</li> <li>Initialize your implementation with a list of {{URLs}}. Optionally, provide {{MIME}} types and media query strings for each {{URL}}.</li> <li>Call the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method.</li> </ol> + + + + <p>Gets the number of source elements in the list.</p> + <p>Returns the number of source elements.</p> + + + + <p>Gets the {{URL}} of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the source element. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{URL}} is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the {{MIME}} type of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{MIME}} type. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{MIME}} type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the intended media type of an element in the list.</p> + <p>The string returned in <em>pMedia</em> should be a media-query string that conforms to the {{W3C}} <em>Media Queries</em> specification.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains a media-query string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no media type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Adds a source element to the end of the list.</p> + <p>Any of the parameters to this method can be <strong>{{NULL}}</strong>.</p><p>This method allocates copies of the <strong>{{BSTR}}</strong>s that are passed in.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A media-query string that specifies the intended media type, or <strong>{{NULL}}</strong>. If specified, the string should conform to the {{W3C}} <em>Media Queries</em> specification.</p> </dd> + + + + + <p>Removes all of the source elements from the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables an application to play audio or video files.</p> + <p>The Media Engine implements this interface. To create an instance of the Media Engine, call <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong>.</p><p>This interface is extended with <strong>{{IMFMediaEngineEx}}</strong>.</p> + + + + <p>Gets the most recent error status.</p> + <p>This method returns the last error status, if any, that resulted from loading the media source. If there has not been an error, <em>ppError</em> receives the value <strong>{{NULL}}</strong>.</p><p>This method corresponds to the <strong>error</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives either a reference to the <strong>{{IMFMediaError}}</strong> interface, or the value <strong>{{NULL}}</strong>. If the value is <strong>non-{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Sets the current error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets a list of media sources.</p> + <p>This method corresponds to adding a list of <strong>source</strong> elements to a media element in {{HTML5}}. </p><p>The Media Engine tries to load each item in the <em>pSrcElements</em> list, until it finds one that loads successfully. After this method is called, the application can use the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to update the list at any time. To reload the list, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load a {{URL}}, it sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>If the application also calls <strong>{{IMFMediaEngine::SetSource}}</strong>, the {{URL}} passed to <strong>SetSource</strong> takes precedence over the list given to <strong>SetSourceElements</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEngineSrcElements}}</strong> interface. The caller must implement this interface. </p> </dd> + + + + + <p>Sets the {{URL}} of a media resource.</p> + <p>This method corresponds to setting the <strong>src</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The {{URL}} specified by this method takes precedence over media resources specified in the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method. To load the {{URL}}, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method asynchronously loads the {{URL}}. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the {{URL}}, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + + + <p>Gets the {{URL}} of the current media resource, or an empty string if no media resource is present.</p> + <p>This method corresponds to the <strong>currentSrc</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>Initially, the current media resource is empty. It is updated when the Media Engine performs the resource selection algorithm.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the current media resource. If there is no media resource, <em>ppUrl</em> receives an empty string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Gets the current network state of the media engine.</p> + <p>This method corresponds to the <strong>networkState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_NETWORK}}</strong> enumeration value.</p> + + + + <p>Gets the preload flag.</p> + <p>This method corresponds to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> enumeration value.</p> + + + + <p>Sets the preload flag.</p> + <p>This method corresponds to setting the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> value equal to the preload flag.</p> </dd> + + + + + <p>Queries how much resource data the media engine has buffered.</p> + <p>This method corresponds to the <strong>buffered</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The returned <strong>{{IMFMediaTimeRange}}</strong> interface represents a list of time ranges. The time ranges indicate which portions of the media resource have been downloaded. The time range list can be empty.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Loads the current media source.</p> + <p>The main purpose of this method is to reload a list of source elements after updating the list. For more information, see <strong>SetSourceElements</strong>. Otherwise, calling this method is generally not required. To load a new media source, call <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>.</p><p>The <strong>Load</strong> method explictly invokes the Media Engine's media resource loading algorithm. Before calling this method, you must set the media resource by calling <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>. </p><p>This method completes asynchronously. When the <strong>Load</strong> operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the file, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>This method corresponds to the <strong>load</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries how likely it is that the Media Engine can play a specified type of media resource.</p> + <p>This method corresponds to the <strong>canPlayType</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The <strong>canPlayType</strong> attribute defines the following values.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>"" (empty string)</td><td>The user-agent cannot play the resource, or the resource type is "application/octet-stream".</td></tr> <tr><td>"probably"</td><td>The user-agent probably can play the resource.</td></tr> <tr><td>"maybe"</td><td>Neither of the previous values applies.</td></tr> </table><p>?</p><p>The value "probably" is used because a {{MIME}} type for a media resource is generally not a complete description of the resource. For example, "video/mp4" specifies an {{MP4}} file with video, but does not describe the codec. Even with the optional codecs parameter, the {{MIME}} type omits some information, such as the actual coded bit rate. Therefore, it is usually impossible to be certain that playback is possible until the actual media resource is opened.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives an <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration value.</p> </dd> + + + + + <p>Gets the ready state, which indicates whether the current media resource can be rendered.</p> + <p>This method corresponds to the <strong>readyState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_READY}}</strong> enumeration value.</p> + + + + <p>Queries whether the Media Engine is currently seeking to a new playback position.</p> + <p>This method corresponds to the <strong>seeking</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine is seeking, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the current playback position.</p> + <p>This method corresponds to the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback position, in seconds.</p> + + + + <p>Seeks to a new playback position.</p> + <p>This method corresponds to setting the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the seek operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKING}}</strong> event. When the seek operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKED}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new playback position, in seconds.</p> </dd> + + + + + <p>Gets the initial playback position.</p> + <p>This method corresponds to the <strong>initialTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns the initial playback position, in seconds.</p> + + + + <p>Gets the duration of the media resource.</p> + <p>This method corresponds to the <strong>duration</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If the duration changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE}}</strong> event. See <strong>{{IMFMediaEngineNotify::EventNotify}}</strong>.</p> + <p>Returns the duration, in seconds. If no media data is available, the method returns not-a-number (NaN). If the duration is unbounded, the method returns an infinite value.</p> + + + + <p>Queries whether playback is currently paused.</p> + <p>This method corresponds to the <strong>paused</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if playback is paused, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the default playback rate.</p> + <p>This method corresponds to getting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p><p>The default playback rate is used for the next call to the <strong>{{IMFMediaEngine::Play}}</strong> method. To change the current playback rate, call <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> + <p>Returns the default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the default playback rate.</p> + <p>This method corresponds to setting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the current playback rate.</p> + <p>This method corresponds to getting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the current playback rate.</p> + <p>This method corresponds to setting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the time ranges that have been rendered.</p> + <p>This method corresponds to the <strong>played</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the time ranges to which the Media Engine can currently seek.</p> + <p>This method corresponds to the <strong>seekable</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>To find out whether the media source supports seeking, call <strong>{{IMFMediaEngineEx::GetResourceCharacteristics}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries whether playback has ended.</p> + <p>This method corresponds to the <strong>ended</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the direction of playback is forward and playback has reached the end of the media resource. Returns <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Queries whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If this method returns <strong>{{TRUE}}</strong>, playback begins automatically after the <strong>{{IMFMediaEngine::Load}}</strong> method completes. Otherwise, playback begins when the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine automatically begins playback, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to setting the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine automatically begins playback after it loads a media source. Otherwise, playback does not begin until the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + + + <p>Queries whether the Media Engine will loop playback.</p> + <p>This method corresponds to getting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If looping is enabled, the Media Engine seeks to the start of the content when playback reaches the end.</p> + <p>Returns <strong>{{TRUE}}</strong> if looping is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine loops playback.</p> + <p>If <em>Loop</em> is <strong>{{TRUE}}</strong>, playback loops back to the beginning when it reaches the end of the source.</p><p>This method corresponds to setting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to enable looping, or <strong>{{FALSE}}</strong> to disable looping.</p> </dd> + + + + + <p>Starts playback.</p> + <p>This method corresponds to the <strong>play</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAY}}</strong> event. When playback is under way, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAYING}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Pauses playback.</p> + <p>This method corresponds to the <strong>pause</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the transition to paused is complete, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PAUSE}} </strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the audio is muted. </p> + <p>Returns <strong>{{TRUE}}</strong> if the audio is muted, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Mutes or unmutes the audio. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio. </p> </dd> + + + + + <p>Gets the audio volume level.</p> + <p>Returns the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> + + + + <p>Sets the audio volume level.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). </p> </dd> + + + + + + + + <p>Queries whether the current media resource contains a video stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains a video stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain a video stream.</p> + + + + <p>Queries whether the current media resource contains an audio stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains an audio stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain an audio stream.</p> + + + + <p>Gets the size of the video frame, adjusted for aspect ratio.</p> + <p>This method adjusts for the correct picture aspect ratio. +For example, if the encoded frame is 720 ? 420 and the picture aspect ratio is 4:3, the method will return a size equal to 640 ? 480 pixels.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the width in pixels.</p> </dd> + + + <dd> <p>Receives the height in pixels.</p> </dd> + + + + + <p>Gets the picture aspect ratio of the video stream.</p> + <p>The Media Engine automatically converts the pixel aspect ratio to 1:1 (square pixels).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the x component of the aspect ratio.</p> </dd> + + + <dd> <p>Receives the y component of the aspect ratio.</p> </dd> + + + + + <p>Shuts down the Media Engine and releases the resources it is using. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies the current video frame to a {{DXGI}} surface or {{WIC}} bitmap.</p> + <p>In frame-server mode, call this method to blit the video frame to a {{DXGI}} or {{WIC}} surface. The application can call this method at any time after the Media Engine loads a video resource. Typically, however, the application calls <strong>{{IMFMediaEngine::OnVideoStreamTick}}</strong> first, to determine whether a new frame is available. If <strong>OnVideoStreamTick</strong> returns <strong>{{S_OK}}</strong>, the application then calls <strong>TransferVideoFrame</strong>.</p><p>The Media Engine scales and letterboxes the video to fit the destination rectangle. It fills the letterbox area with the border color.</p><p>For protected content, call the <strong>{{IMFMediaEngineProtectedContent::TransferVideoFrame}}</strong> method instead of this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface. </p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Queries the Media Engine to find out whether a new video frame is ready.</p> + <p>In frame-server mode, the application should call this method whenever a vertical blank occurs in the display device. If the method returns <strong>{{S_OK}}</strong>, call <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> to blit the frame to the render target. If the method returns <strong>{{S_FALSE}}</strong>, wait for the next vertical blank and call the method again.</p><p>Do not call this method in rendering mode or audio-only mode. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the Media Engine does not have a new frame.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>A new video frame is ready for display.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If a new frame is ready, receives the presentation time of the frame.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngine}}</strong> interface.</p> + <p>The <strong>{{IMFMediaEngine}}</strong> interface contains methods that map to the {{HTML5}} media elements. The <strong>{{IMFMediaEngineEx}}</strong> provides additional functionality that does not correspond directly to {{HTML5}}.</p> + + + + <p>Opens a media resource from a byte stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream.</p> </dd> + + + <dd> <p>The {{URL}} of the byte stream.</p> </dd> + + + + + <p>Gets a playback statistic from the Media Engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_STATISTIC}}</strong> enumeration that identifies the statistic to get.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the statistic. The data type and meaning of this value depends on the value of <em>StatisticID</em>. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Updates the source rectangle, destination rectangle, and border color for the video.</p> + <p>In rendering mode, call this method to reposition the video, update the border color, or repaint the video frame. If all of the parameters are <strong>{{NULL}}</strong>, the method repaints the most recent video frame.</p><p>In frame-server mode, this method has no effect.</p><p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. The source rectangle defines the area of the video frame that is displayed. If this parameter is <strong>{{NULL}}</strong>, the entire video frame is displayed.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. The destination rectangle defines the area of the window or DirectComposition visual where the video is drawn.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Gets the audio balance. </p> + <p>Returns the balance. The value can be any number in the following range (inclusive). </p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table><p>?</p><p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> + + + + <p>Sets the audio balance.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_BALANCECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The audio balance. The value can be any number in the following range (inclusive). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table> <p>?</p> <p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> </dd> + + + + + <p>Queries whether the Media Engine can play at a specified playback rate.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 is normal playback speed, 0.5 is half speed, and 2.0 is 2? speed. Positive values mean forward playback, and negative values mean reverse playback.</p><p>The results of this method can vary depending on the media resource that is currently loaded. Some media formats might support faster playback rates than others. Also, some formats might not support reverse play.</p> + <p>Returns <strong>{{TRUE}}</strong> if the playback rate is supported, or <strong>{{FALSE}}</strong> otherwise.</p> + + + <dd> <p>The requested playback rate.</p> </dd> + + + + + <p>Steps forward or backward one frame.</p> + <p>The frame-step direction is independent of the current playback direction.</p><p>This method completes asynchronously. When the operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED}}</strong> event and enters the paused state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to step forward or <strong>{{FALSE}}</strong> to step backward.</p> </dd> + + + + + <p>Gets various flags that describe the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}} enumeration</strong>.</p> </dd> + + + + + <p>Gets a presentation attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The attribute to query. For a list of presentation attributes, see Presentation Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Gets the number of streams in the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Gets a stream-level attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>The attribute to query. Possible values are listed in the following topics: +</p> <ul> <li> Stream Descriptor Attributes </li> <li> Media Type Attributes </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. Call <strong>PropVariantClear</strong> to free the memory allocated by the method. </p> </dd> + + + + + <p>Queries whether a stream is selected to play.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Selects or deselects a stream for playback. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to select or deselect the stream.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Applies the stream selections from previous calls to <strong>SetStreamSelection</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains protected content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the media resource contains protected content, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Inserts a video effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of video effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the video effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the video effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Inserts an audio effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of audio effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the audio effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the audio effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Removes all audio and video effects.</p> + <p> Call this method to remove all of the effects that were added with the <strong>InsertAudioEffect</strong> and <strong>InsertVideoEffect</strong> methods. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies a presentation time when the Media Engine will send a marker event.</p> + <p>When playback reaches the time specified by <em>timeToFire</em>, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER}}</strong> event through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. Calling this method cancels any previous marker that is still pending. </p><p>If the application seeks past the marker point, the Media Engine cancels the marker and does not send the event.</p><p>During forward playback, set <em>timeToFire</em> to a value greater than the current playback position. During reverse playback, set <em>timeToFire</em> to a value less than the playback position.</p><p>To cancel a marker, call <strong>{{IMFMediaEngineEx::CancelTimelineMarkerTimer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The presentation time for the marker event, in seconds.</p> </dd> + + + + + <p>Gets the time of the next timeline marker, if any.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the marker time, in seconds. If no marker is set, this parameter receives the value <strong>NaN</strong>.</p> </dd> + + + + + <p>Cancels the next pending timeline marker.</p> + <p>Call this method to cancel the <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains stereoscopic 3D video.</p> + <p>Returns <strong>{{TRUE}}</strong> if the media resource contains 3D video, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>For stereoscopic 3D video, gets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, sets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration that specifies the layout. The two views can be arranged side-by-side, or top-to-bottom.</p> </dd> + + + + + <p>For stereoscopic 3D video, queries how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, specifies how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration that specifies the 3D video rendering mode.</p> </dd> + + + + + <p>Enables or disables windowless swap-chain mode.</p> + <p>In windowless swap-chain mode, the Media Engine creates a windowless swap chain and presents video frames to the swap chain. To render the video, call <strong>{{IMFMediaEngineEx::GetVideoSwapchainHandle}}</strong> to get a handle to the swap chain, and then associate the handle with a Microsoft DirectComposition visual. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, windowless swap-chain mode is enabled. </p> </dd> + + + + + <p>Gets a handle to the windowless swap chain.</p> + <p>To enable windowless swap-chain mode, call <strong>{{IMFMediaEngineEx::EnableWindowlessSwapchainMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the swap chain.</p> </dd> + + + + + <p>Enables or disables mirroring of the video.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video is mirrored horizontally. Otherwise, the video is displayed normally.</p> </dd> + + + + + <p>Gets the audio stream category used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio stream category for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio device endpoint role used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio device endpoint used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks to a new playback position using the specified <strong>{{MF_MEDIA_ENGINE_SEEK_MODE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables or disables the time update timer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the update timer is enabled. Otherwise, the timer is disabled.</p> </dd> + + + + + <p>Enables an application to load media resources in the Media Engine.</p> + <p>To use this interface, set the {{MF_MEDIA_ENGINE_EXTENSION}} attribute when you call the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Queries whether the object can load a specified type of media resource.</p> + <p>Implement this method if your Media Engine extension supports one or more {{MIME}} types.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine is set to audio-only mode. Otherwise, the Media Engine is set to audio-video mode.</p> </dd> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration.</p> </dd> + + + + + <p>Begins an asynchronous request to create either a byte stream or a media source.</p> + <p>This method requests the object to create either a byte stream or a media source, depending on the value of the <em>type</em> parameter:</p><ul> <li>If <em>type</em> is <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, the method creates a byte stream for the {{URL}} that is specified in <em>bstrURL</em>. In this case, the <em>pByteStream</em> parameter is <strong>{{NULL}}</strong>. </li> <li>If <em>type</em> is <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, the method creates a media source, using the byte stream that is specified in the <em>pByteStream</em> parameter. Note that <em>pByteStream</em> can also be <strong>{{NULL}}</strong> in this case.</li> </ul><p>The method is performed asynchronously. The Media Engine calls the <strong>{{IMFMediaEngineExtension::EndCreateObject}}</strong> method to complete the operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface.</p> <p>If the <em>type</em> parameter equals <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, this parameter is <strong>{{NULL}}</strong>. </p> <p>If <em>type</em> equals <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, this parameter either contains a reference to a byte stream or is <strong>{{NULL}}</strong>. See Remarks for more information.</p> </dd> + + + <dd> <p>A member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration that specifies which type of object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Create a byte stream. The byte stream must support the <strong>{{IMFByteStream}}</strong> interface.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_MEDIASOURCE}}</strong></dt> </dl> </td><td> <p>Create a media source. The media source must support the <strong>{{IMFMediaSource}}</strong> interface.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface. This reference can be used to cancel the asynchronous operation, by passing the reference to the <strong>{{IMFMediaEngineExtension::CancelObjectCreation}}</strong> method. </p> <p>The caller must release the interface. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is used to signal the completion of the asynchronous operation.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object impemented by the caller. You can use this object to hold state information for the callback. The object is returned to the caller when the callback is invoked. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Cancels the current request to create an object.</p> + <p>This method attempts to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might complete before the operation can be canceled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The reference that was returned in the the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method. </p> </dd> + + + + + <p>Completes an asynchronous request to create a byte stream or media source.</p> + <p>The Media Engine calls this method to complete the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the byte stream or media source. The caller must release the interface</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Enables the Media Engine to access protected content while in frame-server mode.</p> + <p>In frame-server mode, this method enables the Media Engine to share protected content with the Direct3D?11 device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the Direct3D?11 device content. The Media Engine queries this reference for the <strong>{{ID3D11VideoContext}}</strong> interface. </p> </dd> + + + + + <p>Gets the content protections that must be applied in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Specifies the window that should receive output link protections.</p> + <p>In frame-server mode, call this method to specify the destination window for protected video content. The Media Engine uses this window to set link protections, using the Output Protection Manager ({{OPM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window.</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Sets the content protection manager ({{CPM}}).</p> + <p>The Media Engine uses the {{CPM}} to handle events related to protected content, such as license acquisition.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFContentProtectionManager}}</strong> interface, implemented by the caller.</p> </dd> + + + + + <p>Sets the application's certificate.</p> + <p>Call this method to access protected video content in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a buffer that contains the certificate in X.509 format, followed by the application identifier signed with a {{SHA}}-256 signature using the private key from the certificate.</p> </dd> + + + <dd> <p>The size of the <em>pbBlob</em> buffer, in bytes.</p> </dd> + + + + + <p><em>Media sources</em> are objects that generate media data in the Media Foundation pipeline. This section describes the media source {{APIs}} in detail. Read this section if you are implementing a custom media source, or using a media source outside of the Media Foundation pipeline.</p><p>If your application uses the control layer, it needs to use only a limited subset of the media source {{APIs}}. For information, see the topic Using Media Sources with the Media Session.</p><p> </p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables playback of web audio.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating if the connecting to Web audio should delay the page's load event.</p> + <p>True if connection to Web audio should delay the page's load event; otherwise, false.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Connects web audio to Media Engine using the specified sample rate.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Disconnects web audio from the Media Engine </p> + <p>Returns {{S_OK}} on successful completion.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Used to indicate that the media source has opened.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has ended.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has closed.</p> + <p>This method does not return a value.</p> + + + + <p>Enables <strong>{{IMFSourceBufferList}}</strong> object to notify its clients of important state changes.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been added.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been removed.</p> + <p>This method does not return a value.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFSourceBuffer}}</strong>.</p> + + + + <p>Used to indicate that the source buffer has started updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has been aborted.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that an error has occurred with the source buffer.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + + + <p>Used to indicate that the source buffer is updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has finished updating.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a buffer which contains media data for a <strong>{{IMFMediaSourceExtension}}</strong>. </p> + <p><strong>{{IMFSourceBuffer}}</strong> is used in conjunction with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Gets a value that indicates if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong> is in process.</p> + <p><strong>true</strong> if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong>; otherwise, <strong>false</strong>.</p> + + + + <p>Gets the buffered time range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffered time range.</p> </dd> + + + + + <p>Gets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>The timestamp offset.</p> + + + + <p>Sets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the timestamp for the start of the append window.</p> + <p>The timestamp for the start of the append window.</p> + + + + <p>Sets the timestamp for the start of the append window.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The timestamp for the start of the append window.</p> </dd> + + + + + <p>Gets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + + <p>Sets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + <dd></dd> + + + + + <p>Appends the specified media segment to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Appends the media segment from the specified byte stream to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Aborts the processing of the current media segment. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the media segments defined by the specified time range from the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Represents a collection of <strong>{{IMFSourceBuffer}}</strong> objects.</p> + + + + <p>Gets the number of <strong>{{IMFSourceBuffer}}</strong> objects in the list.</p> + <p>The number of source buffers in the list.</p> + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the list.</p> + <p>The source buffer.</p> + + + + <p>Provides functionality for the Media Source Extension ({{MSE}}).</p> + <p> Media Source Extensions ({{MSE}}) is a World Wide Web Consortium ({{W3C}}) standard that extends the {{HTML5}} media elements to enable dynamically changing the media stream without the use of plug-ins. The <strong>{{IMFMediaSourceExtension}}</strong> interface and the related Microsoft Win32 {{API}} implement {{MSE}} and are expected to only be called by web browsers implementing {{MSE}}. </p><p>The {{MSE}} media source keeps track of the ready state of the of the source as well as a list of <strong>{{IMFSourceBuffer}}</strong> objects which provide media data for the source.</p> + + + + <p>Gets the collection of source buffers associated with this media source.</p> + <p>The collection of source buffers.</p> + + + + <p>Gets the source buffers that are actively supplying media data to the media source.</p> + <p>The list of active source buffers.</p> + + + + <p>Gets the ready state of the media source.</p> + <p>The ready state of the media source.</p> + + + + <p>Gets the duration of the media source in 100-nanosecond units.</p> + <p>The duration of the media source in 100-nanosecond units. </p> + + + + <p>Sets the duration of the media source in 100-nanosecond units.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The duration of the media source in 100-nanosecond units.</p> </dd> + + + + + <p>Adds a <strong>{{IMFSourceBuffer}}</strong> to the collection of buffers associated with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the specified source buffer from the collection of source buffers managed by the <strong>{{IMFMediaSourceExtension}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Indicate that the end of the media stream has been reached. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Used to pass error information.</p> </dd> + + + + + <p>Gets a value that indicates if the specified {{MIME}} type is supported by the media source.</p> + <p><strong>true</strong> if the media type is supported; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The media type to check support for.</p> </dd> + + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the collection of buffers.</p> + <p>The source buffer.</p> + + + + <p>Implemented by the media engine to add encrypted media extensions methods.</p> + + + + <p>Gets the media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> </dd> + + + + + <p>Sets the media keys object to use with the media engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to provide additional capabilities.</p> + + + + <p>Provides an enhanced version of <strong>{{IMFMediaEngineSrcElements::AddElement}}</strong> to add the key system intended to be used with content to an element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the key system for the given source element index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source element index.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element.</p> </dd> + + + + + <p>Represents a callback to the media engine to notify key request data.</p> + + + + <p>Notifies the application that a key or keys are needed along with any initialization data.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The initialization data.</p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + + + <p>Represents a media keys used for decrypting media data using a Digital Rights Management ({{DRM}}) key system. </p> + + + + <p>Creates a media key session object using the specified initialization data and custom data. +. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type of the media container used for the content.</p> </dd> + + + <dd> <p>The initialization data for the key system. </p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + <dd> <p>Custom data sent to the key system.</p> </dd> + + + <dd> <p>The count in bytes of <em>cbCustomData</em>.</p> </dd> + + + <dd> <p>notify</p> </dd> + + + <dd> <p>The media key session.</p> </dd> + + + + + <p>Gets the key system string the <strong>{{IMFMediaKeys}}</strong> object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p></p> + <p><strong>Shutdown</strong> should be called by the application before final release. The Content Decryption Module ({{CDM}}) reference and any other resources is released at this point. However, related sessions are not freed or closed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the suspend notify interface of the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The suspend notify interface of the Content Decryption Module ({{CDM}}).</p> </dd> + + + + + <p>Represents a session with the Digital Rights Management ({{DRM}}) key system.</p> + + + + <p>Gets the error state associated with the media key session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code.</p> </dd> + + + <dd> <p>Platform specific error information.</p> </dd> + + + + + <p>Gets the name of the key system name the media keys object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the key system.</p> </dd> + + + + + <p>Gets a unique session id created for this session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key session id.</p> </dd> + + + + + <p>Passes in a key value with any associated data required by the Content Decryption Module for the given key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd></dd> + + + <dd> <p>The count in bytes of <em>key</em>.</p> </dd> + + + + + <p>Closes the media key session and must be called before the key session is released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides a mechanism for notifying the app about information regarding the media key session. </p> + + + + <p>Passes information to the application so it can initiate a key acquisition.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The {{URL}} to send the message to.</p> </dd> + + + <dd> <p>The message to send to the application.</p> </dd> + + + <dd> <p>The length in bytes of <em>message</em>.</p> </dd> + + + + + <p>Notifies the application that the key has been added. </p> + <p><strong>KeyAdded</strong> can also be called if the keys requested for the session have already been acquired.</p> + <p>This method does not return a value.</p> + + + + <p>Notifies the application that an error occurred while processing the key.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Used to enable the client to notify the Content Decryption Module ({{CDM}}) when global resources should be brought into a consistent state prior to suspending. +</p> + + + + <p>Indicates that the suspend process is starting and resources should be brought into a consistent state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The actual suspend is about to occur and no more calls will be made into the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Provides methods for getting information about the Output Protection Manager ({{OPM}}).</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the Media Engine.</p><p>The <strong>{{MF_MEDIA_ENGINE_EVENT_OPMINFO}}</strong> <strong>{{IMFMediaEvent}}</strong> event is raised when there is a change in the {{OPM}} status.</p> + + + + <p>Gets status information about the Output Protection Manager ({{OPM}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{INVALIDARG}}</strong></dt> </dl> </td><td> <p>If any of the parameters are <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a time range object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media error object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaError}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p> Checks if <em>keySystem</em> is a supported key system and creates the related Content Decryption Module ({{CDM}}). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys system.</p> </dd> + + + <dd> <p>Points to a location to store Content Decryption Module ({{CDM}}) data which might be locked by multiple process and so might be incompatible with store app suspension.</p> </dd> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of the <strong>{{IMFMediaKeys}}</strong> object.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key system.</p> </dd> + + + <dd> <p>Points to the default file location for the store Content Decryption Module ({{CDM}}) data.</p> </dd> + + + <dd> <p>Points to a the inprivate location for the store Content Decryption Module ({{CDM}}) data. Specifying this path allows the {{CDM}} to comply with the application?s privacy policy by putting personal information in the file location indicated by this path.</p> </dd> + + + <dd> <p>Receives the media keys.</p> </dd> + + + + + + + + + + + <p>Enables the media source to be transferred between the media engine and the sharing engine for Play To.</p> + + + + <p>Specifies wether or not the source should be transferred.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>true</strong> if the source should be transferred; otherwise, <strong>false</strong>.</p> </dd> + + + + + <p>Detaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the byte stream.</p> </dd> + + + <dd> <p>Receives the media source.</p> </dd> + + + <dd> <p>Receives the media source extension.</p> </dd> + + + + + <p>Attaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the byte stream. </p> </dd> + + + <dd> <p>Specifies the media source.</p> </dd> + + + <dd> <p>Specifies the media source extension.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A timed-text object represents a component of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Registers a timed-text notify object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTimedTextNotify}}</strong> interface for the timed-text notify object to register.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Selects or deselects a track of text in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to select. </p> </dd> + + + <dd> <p>Specifies whether to select or deselect a track of text. Specify <strong>{{TRUE}}</strong> to select the track or <strong>{{FALSE}}</strong> to deselect the track. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface for the data source to add.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source from the specified {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the timed-text data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Removes the timed-text track with the specified identifier.</p> + <p>Get the identifier for a track by calling <strong>GetId</strong>. </p><p>When a track is removed, all buffered data from the track is also removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to remove.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Retrieves a list of all timed-text tracks registered with the <strong>{{IMFTimedText}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of active timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of active timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of all the timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of all of the timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of the timed-metadata tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of the timed-metadata tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables inband mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether inband mode is enabled.</p> + <p>Returns whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Interface that defines callbacks for Microsoft Media Foundation Timed Text notifications.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is added</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was added. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is removed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was removed. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a track is selected or deselected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was selected or deselected. </p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the track was selected. <strong>{{FALSE}}</strong> if the track was deselected. </p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an error occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An {{MF_TIMED_TEXT_ERROR_CODE}} representing the last error.</p> </dd> + + + <dd> <p>The extended error code for the last error.</p> </dd> + + + <dd> <p>The identifier of the track on which the error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a cue event occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value specifying the type of event that has occured.</p> </dd> + + + <dd> <p>The current time when the cue event occurred.</p> </dd> + + + <dd> <p>The <strong>{{IMFTimedTextCue}}</strong> object representing the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Resets the timed-text-notify object.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a track of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the track of timed text.</p> + <p>Returns the identifier of the track. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the label of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the label of a timed-text track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the language of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the language of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text track.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is inband.</p> + <p>Returns whether the timed-text track is inband. If <strong>{{TRUE}}</strong>, the timed-text track is inband; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the in-band metadata of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the in-band metadata of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is active.</p> + <p>Returns whether the timed-text track is active. If <strong>{{TRUE}}</strong>, the timed-text track is active; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating the error type of the latest error associated with the track.</p> + <p>A value indicating the error type of the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extended error code for the latest error associated with the track.</p> + <p>If the most recent error was associated with a track, this value will be the same <strong>{{HRESULT}}</strong> as returned by the <strong>{{IMFTimedTextNotify::Error}}</strong> method.</p> + <p>The extended error code for the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a {{GUID}} that identifies the track's underlying data format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A {{GUID}} that identifies the track's underlying data format.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a list of timed-text tracks.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the length, in tracks, of the timed-text-track list.</p> + <p>Returns the length, in tracks, of the timed-text-track list.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the index of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the identifier of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of a timed-text cue.</p> + <p>The identifier is retrieved by this method is dynamically generated by the system and is guaranteed to uniquely identify a cue within a single timed-text track. It is not guaranteed to be unique across tracks. If a cue already has an identifier that is provided in the text-track data format, this {{ID}} can be retrieved by calling <strong>GetOriginalId</strong>.</p> + <p>The identifier of a timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the cue identifier that is provided in the text-track data format, if available.</p> + <p>This method retrieves an identifier for the cue that is included in the source data, if one was specified. The system dynamically generates identifiers for cues that are guaranteed to be unique within a single time-text track. To obtain this system-generated {{ID}}, call <strong>GetId</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The cue identifier that is provided in the text-track data format.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text cue.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the start time of the cue in the track.</p> + <p>Returns the start time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the duration time of the cue in the track.</p> + <p>Returns the duration time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the timed-text cue.</p> + <p>Returns the identifier of the timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the display region of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextRegion}}</strong> interface for the timed-text region. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Specifies the supported protection schemes for encrypted samples.</p> + <p>The encryption scheme for a sample is specified using the {{MFSampleExtension_Encryption_ProtectionScheme}} attribute.</p> + + + <dd> <p>No encryption scheme.</p> </dd> + + + <dd> <p>The encryption scheme is {{AES}} counter mode ({{CTR}}).</p> </dd> + + + <dd> <p>The encryption scheme is Cipher Block Chaining ({{CBC}}).</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the style of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of lines of text in the timed-text cue.</p> + <p>Returns the number of lines of text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a line of text in the cue from the index of the line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the line of text in the cue to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextFormattedText}}</strong> interface for the line of text in the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a block of formatted timed-text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the text.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of subformats in the formatted timed-text object.</p> + <p>Returns the number of subformats. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a subformat in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the subformat in the formatted timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the first character of the subformat. </p> </dd> + + + <dd> <p>A reference to a variable that receives the length, in characters, of the subformat. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the subformat's timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text style is external.</p> + <p>Returns whether the timed-text style is external. If <strong>{{TRUE}}</strong>, the timed-text style is external; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font family of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the font family of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font size of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the font size of the timed-text style.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text style is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text always shows the background.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text always shows the background. The variable specifies <strong>{{TRUE}}</strong> if the background is always shown; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font style of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_FONT_STYLE}}</strong>-typed value that specifies the font style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text is bold.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text is bold. The variable specifies <strong>{{TRUE}}</strong> if the style is bold; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the right to left writing mode of the timed-text style is enabled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the right to left writing mode is enabled. The variable specifies <strong>{{TRUE}}</strong> if the right to left writing mode is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text alignment of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_ALIGNMENT}}</strong>-typed value that specifies the text alignment.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets how text is decorated for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{MF_TIMED_TEXT_DECORATION}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies how text is decorated.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text outline for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + <dd> <p>A reference to a variable that receives the thickness.</p> </dd> + + + <dd> <p>A reference to a variable that receives the blur radius.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the display region of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the position of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the X-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives the Y-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extent of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the width of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the writing mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_WRITING_MODE}}</strong>-typed value that specifies the writing mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the display alignment of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_DISPLAY_ALIGNMENT}}</strong>-typed value that specifies the display alignment of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the height of each line of text in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the height of each line of text in the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether a clip of text overflowed the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether a clip of text overflowed the region. The variable specifies <strong>{{TRUE}}</strong> if the clip overflowed; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the padding that surrounds the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the padding before the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the padding after the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the word wrap feature is enabled in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the word wrap feature is enabled in the region. The variable specifies <strong>{{TRUE}}</strong> if word wrap is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the Z-index (depth) of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the Z-index (depth) of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the scroll mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_SCROLL_MODE}}</strong>-typed value that specifies the scroll mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the data content of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the data content of the timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the length in bytes of the data content.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Specifies a type of capture device.</p> + + + <dd> <p>An audio capture device, such as a microphone.</p> </dd> + + + <dd> <p>A video capture device, such as a webcam.</p> </dd> + + + + + <p>Specifies a type of capture sink.</p> + + + <dd> <p>A recording sink, for capturing audio and video to a file.</p> </dd> + + + <dd> <p>A preview sink, for previewing live audio or video.</p> </dd> + + + <dd> <p>A photo sink, for capturing still images.</p> </dd> + + + + + + + + <p>Defines the values for the source stream category.</p> + + + <dd> <p>Specifies a video preview stream.</p> </dd> + + + <dd> <p>Specifies a video capture stream.</p> </dd> + + + <dd> <p>Specifies an independent photo stream.</p> </dd> + + + <dd> <p>Specifies a dependent photo stream.</p> </dd> + + + <dd> <p>Specifies an audio stream.</p> </dd> + + + <dd> <p>Specifies an unsupported stream.</p> </dd> + + + + + <p>Callback interface for receiving events from the capture engine.</p> + <p>To set the callback interface on the capture engine, call the <strong>{{IMFCaptureEngine::Initialize}}</strong> method.</p> + + + + <p>Called by the capture engine to notify the application of a capture event.</p> + <p>To get the type of event, call <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. This method returns one of the following {{GUIDs}}.</p><table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ALL_EFFECTS_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveAllEffects}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_BLOCKED}}</strong></td><td>Video capture has been blocked by the driver.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_UNBLOCKED}}</strong></td><td>Video capture has been restored by the driver after having been blocked.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_ADDED}}</strong></td><td>The <strong>{{IMFCaptureSource::AddEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ERROR}}</strong></td><td>An error occurred during capture.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong></td><td>The <strong>{{IMFCaptureEngine::Initialize}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong></td><td>The <strong>{{IMFCaptureEngine::TakePhoto}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SINK_PREPARED}}</strong></td><td>The <strong>{{IMFCaptureSink::Prepare}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SOURCE_CURRENT_DEVICE_MEDIA_TYPE_SET}}</strong></td><td>The <strong>{{IMFCaptureSource::SetCurrentDeviceMediaType}}</strong> method completed.</td></tr> </table><p>?</p><p>This method may be called from a worker thread. The implementation should be thread-safe.</p><p>To get the status code for the event, call <strong>{{IMFMediaEvent::GetStatus}}</strong>. If the status code is an error code, it indicates that the requested operation failed.</p><p>In addition, the event object specified by <em>pEvent</em> might contain any of the following attributes.</p><ul> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> </ul><p>To get event attributes, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaEvent}}</strong> inherits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface. Use this interface to get information about the event, as described in Remarks.</p> </dd> + + + + + <p>Callback interface to receive data from the capture engine.</p> + <p>To set the callback interface, call one of the following methods.</p><ul> <li> <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong> </li> </ul> + + + + <p>Called when the capture sink receives a sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface. Use this interface to get the time stamp, duration, and stream data. For more information, see Media Samples. This parameter can be <strong>{{NULL}}</strong>, so make sure to check for a <strong>{{NULL}}</strong> value before you dereference the reference.</p> </dd> + + + + + <p>Controls a capture sink, which is an object that receives one or more streams from a capture device.</p> + <p>The capture engine creates the following capture sinks.</p><ul> <li>Photo sink. Encodes still image files.</li> <li>Preview sink. Previews live audio or video.</li> <li>Recording sink. Creates compressed audio/video files or compressed audio/video streams.</li> </ul><p>To get a reference to a capture sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. Each capture sink implements an interface that derives from <strong>{{IMFCaptureSink}}</strong>. Call <strong>QueryInterface</strong> to get a reference to the derived interface.</p><table> <tr><th>Sink</th><th>Interface</th></tr> <tr><td>Photo sink</td><td> <strong>{{IMFCapturePhotoSink}}</strong> </td></tr> <tr><td>Preview sink</td><td> <strong>{{IMFCapturePreviewSink}}</strong> </td></tr> <tr><td>Recording sink</td><td> <strong>{{IMFCaptureRecordSink}}</strong> </td></tr> </table><p>?</p><p>Applications cannot directly create the capture sinks.</p><p>If an image stream native media type is set to {{JPEG}}, the photo sink should be configured with a format identical to native source format. {{JPEG}} native type is passthrough only.</p><p>If an image stream native type is set to {{JPEG}}, to add an effect, change the native type on the image stream to an uncompressed video media type (such as {{NV12}} or {{RGB32}}) and then add the effect.</p><p>If the native type is H.264 for the record stream, the record sink should be configured with the same media type. H.264 native type is passthrough only and cannot be decoded.</p><p>Record streams that expose H.264 do not expose any other type. H.264 record streams cannot be used in conjunction with effects. To add effects, instead connect the preview stream to the recordsink using <strong>AddStream</strong>.</p> + + + + <p>Gets the output format for a stream on this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSinkStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to query. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the reference.</p> </dd> + + + + + <p>Queries the underlying Sink Writer object for an interface.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + + <p>Connects a stream from the capture source to this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The format specified in <em>pMediaType</em> is not valid for this capture sink.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid, or the specified source stream was already connected to this sink.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The source stream to connect. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An <strong>{{IMFMediaType}}</strong> reference that specifies the desired format of the output stream. The details of the format will depend on the capture sink.</p> <ul> <li>Photo sink: A still image format compatible with Windows Imaging Component ({{WIC}}).</li> <li>Preview sink: An uncompressed audio or video format.</li> <li>Record sink: The audio or video format that will be written to the output file.</li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. For compressed streams, you can use this parameter to configure the encoder. This parameter can also be <strong>{{NULL}}</strong>. For the preview sink, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the index of the new stream on the capture sink. Note that this index will not necessarily match the value of <em>dwSourceStreamIndex</em>. </p> </dd> + + + + + <p>Prepares the capture sink by loading any required pipeline components, such as encoders, video processors, and media sinks.</p> + <p>Calling this method is optional. This method gives the application an opportunity to configure the pipeline components before they are used. The method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_SINK_PREPARED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. After this event is received, call <strong>{{IMFCaptureSink::GetService}}</strong> to configure individual components.</p><p>Before calling this method, configure the capture sink by adding at least one stream. To add a stream, call <strong>{{IMFCaptureSink::AddStream}}</strong>.</p><p>The <strong>Prepare</strong> method fails if the capture sink is currently in use. For example, calling <strong>Prepare</strong> on the preview sink fails if the capture engine is currently previewing.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + + <p>Removes all streams from the capture sink.</p> + <p>You can use this method to reconfigure the sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Controls the recording sink. The recording sink creates compressed audio/video files or compressed audio/video streams.</p> + <p>The recording sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported. (However, if a callback is used, you can provide a separate callback for each stream.)</p><p>If the destination is a byte stream or an output file, the application specifies a container type, such as {{MP4}} or {{ASF}}. The capture engine then multiplexes the audio and video to produce the format defined by the container type. If the destination is a callback interface, however, the capture engine does not multiplex or otherwise interleave the samples. The callback option gives you the most control over the recorded output, but requires more work by the application.</p><p>To start the recording, call <strong>{{IMFCaptureEngine::StartRecord}}</strong>.</p> + + + + <p>Specifies a byte stream that will receive the data for the recording.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the file container type. Possible values are documented in the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </dd> + + + + + <p>Specifies the name of the output file for the recording.</p> + <p>The capture engine uses the file name extension to select the container type for the output file. For example, if the file name extension is ."mp4", the capture engine creates an {{MP4}} file.</p><p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the recording data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Sets a custom media sink for recording.</p> + <p>This method overrides the default selection of the media sink for recording.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Gets the rotation that is currently being applied to the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Controls the preview sink. The preview sink enables the application to preview audio and video from the camera.</p> + <p>To start preview, call <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + + + + <p>Specifies a window for preview.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window. The preview sink draws the video frames inside this window.</p> </dd> + + + + + <p>Specifies a Microsoft DirectComposition visual for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a DirectComposition visual that implements the <strong>{{IDCompositionVisual}}</strong> interface.</p> </dd> + + + + + <p>Updates the video frame. Call this method when the preview window receives a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets a callback to receive the preview data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetRenderHandle}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled. If <strong>{{FALSE}}</strong>, mirror is disabled.</p> </dd> + + + + + <p>Gets the rotation of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Sets a custom media sink for preview.</p> + <p>This method overrides the default selection of the media sink for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Controls the photo sink. The photo sink captures still images from the video stream.</p> + <p>The photo sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported.</p><p>To capture an image, call <strong>{{IMFCaptureEngine::TakePhoto}}</strong>.</p> + + + + <p>Specifies the name of the output file for the still image.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the still-image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Specifies a byte stream that will receive the still image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + + + <p>Controls the capture source object. The capture source manages the audio and video capture devices.</p> + <p>To get a reference to the capture source, call <strong>{{IMFCaptureEngine::GetSource}}</strong>.</p> + + + + <p>Gets the current capture device's <strong>{{IMFMediaSource}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the current capture device's <strong>{{IMFActivate}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to the underlying Source Reader object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture source was not initialized. Possibly there is no capture device on the system.</p> </td></tr> </table><p>?</p> + + + + <p>Adds an effect to a capture stream.</p> + <p>The effect must be implemented as a Media Foundation Transform ({{MFT}}). The <em>pUnknown</em> parameter can point to an instance of the {{MFT}}, or to an activation object for the {{MFT}}. For more information, see Activation Objects.</p><p>The effect is applied to the stream before the data reaches the capture sinks. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>No compatible media type could be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following: </p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes an effect from a capture stream.</p> + <p>This method removes an effect that was previously added using the <strong>{{IMFCaptureSource::AddEffect}}</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. Possibly the specified effect could not be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the effect object. </p> </dd> + + + + + <p>Removes all effects from a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a format that is supported by one of the capture streams.</p> + <p>To enumerate all of the available formats on a stream, call this method in a loop while incrementing <em>dwMediaTypeIndex</em>, until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>.</p><p>Some cameras might support a range of frame rates. The minimum and maximum frame rates are stored in the {{MF_MT_FRAME_RATE_RANGE_MIN}} and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes on the media type.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Sets the output format for a capture stream.</p> + <p>This method sets the native output type on the capture device. The device must support the specified format. To get the list of available formats, call <strong>{{IMFCaptureSource::GetAvailableDeviceMediaType}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface.</p> </dd> + + + + + <p>Gets the current media type for a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the number of device streams.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of device streams.</p> </dd> + + + + + <p>Gets the stream category for the specified source stream index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the source stream.</p> </dd> + + + <dd> <p>Receives the {{MF_CAPTURE_ENGINE_STREAM_CATEGORY}} of the specified source stream.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The device stream does not have mirroring capability.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The source is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled; if <strong>{{FALSE}}</strong>, mirroring is disabled.</p> </dd> + + + + + <p>Gets the actual device stream index translated from a friendly stream name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The friendly name. Can be one of the following:</p> <ul> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_RECORD}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_PREVIEW}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_INDEPENDENT_PHOTO_STREAM}}</li> </ul> </dd> + + + <dd> <p>Receives the value of the stream index that corresponds to the friendly name.</p> </dd> + + + + + <p>Controls one or more capture devices. The capture engine implements this interface. To get a reference to this interface, call either <strong>{{MFCreateCaptureEngine}}</strong> or <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + <p><strong>{{IMFCaptureEngine}}</strong> only supports one pass {{CBR}} encoding.</p> + + + + <p>Initializes the capture engine.</p> + <p>You must call this method once before using the capture engine. Calling the method a second time returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The <strong>Initialize</strong> method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CAPTURE_DEVICES_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No capture devices are available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnEventCallback}}</strong> interface. The caller must implement this interface. The capture engine uses this interface to send asynchronous events to the caller.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. </p> <p>You can use this parameter to configure the capture engine. Call <strong>{{MFCreateAttributes}}</strong> to create an attribute store, and then set any of the following attributes.</p> <ul> <li> {{MF_CAPTURE_ENGINE_D3D_MANAGER}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_DXVA}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_HARDWARE_TRANSFORMS}} </li> <li> {{MF_CAPTURE_ENGINE_ENCODER_MFT_FIELDOFUSE_UNLOCK_Attribute}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> <li> {{MF_CAPTURE_ENGINE_MEDIASOURCE_CONFIG}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} </li> <li> {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} </li> </ul> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies an audio-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use an audio device, and the <em>pAudioSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pAudioSource</em> is <strong>{{NULL}}</strong>, the capture engine selects the microphone that is built into the video camera specified by <em>pVideoSource</em>. If the video camera does not have a microphone, the capture engine enumerates the audio-capture devices on the system and selects the first one.</p> <p>To override the default audio device, set <em>pAudioSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Audio/Video Capture in Media Foundation.</p> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies a video-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use a video device, and the <em>pVideoSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pVideoSource</em> is <strong>{{NULL}}</strong>, the capture engine enumerates the video-capture devices on the system and selects the first one.</p> <p>To override the default video device, set <em>pVideoSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Enumerating Video Capture Devices.</p> </dd> + + + + + <p>Starts preview.</p> + <p>Before calling this method, configure the preview sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the preview sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>After the preview sink is configured, you can stop and start preview by calling <strong>{{IMFCaptureEngine::StopPreview}}</strong> and <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The preview sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops preview.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture engine is not currently previewing.</p> </td></tr> </table><p>?</p> + + + + <p>Starts recording audio and/or video to a file.</p> + <p>Before calling this method, configure the recording sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the recording sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>To stop recording, call <strong>{{IMFCaptureEngine::StopRecord}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The recording sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops recording.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean value that specifies whether to finalize the output file. To create a valid output file, specify <strong>{{TRUE}}</strong>. Specify <strong>{{FALSE}}</strong> only if you want to interrupt the recording and discard the output file. If the value is <strong>{{FALSE}}</strong>, the operation completes more quickly, but the file will not be playable. </p> </dd> + + + <dd> <p>A Boolean value that specifies if the unprocessed samples waiting to be encoded should be flushed.</p> </dd> + + + + + <p>Captures a still image from the video stream.</p> + <p>Before calling this method, configure the photo sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the photo sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to one of the capture sink objects. You can use the capture sinks to configure preview, recording, or still-image capture.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{MF_CAPTURE_ENGINE_SINK_TYPE}}</strong> value that specifies the capture sink to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a reference to the capture source object. Use the capture source to configure the capture devices.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the capture engine.</p> + <p>To get a reference to this interface, call the CoCreateInstance function and specify the {{CLSID}} equal to <strong>{{CLSID_MFCaptureEngineClassFactory}}</strong>. </p><p>Calling the <strong>{{MFCreateCaptureEngine}}</strong> function is equivalent to calling <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + + + + <p>Creates an instance of the capture engine.</p> + <p>Before calling this method, call the <strong>{{MFStartup}}</strong> function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create. Currently, this parameter must equal <strong>{{CLSID_MFCaptureEngine}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface. The capture engine supports the <strong>{{IMFCaptureEngine}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Extensions for the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> callback interface that is used to receive data from the capture engine.</p> + + + + <p>Called by the capture sink when the format of the sample is changed.</p> + <p>The return value is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new media type.</p> </dd> + + + + + <p>Extends the <strong>{{IMFCaptureSink}}</strong> interface to provide functionality for dynamically setting the output media type of the record sink or preview sink.</p> + + + + <p>Dynamically sets the output media type of the record sink or preview sink.</p> + <p>This is an asynchronous call. Listen to the {{MF_CAPTURE_ENGINE_OUTPUT_MEDIA_TYPE_SET}} event +to be notified when the output media type has been set.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_MEDIATYPE}}</strong></dt> </dl> </td><td> <p>The sink does not support the media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream index to change the output media type on.</p> </dd> + + + <dd> <p>The new output media type.</p> </dd> + + + <dd> <p>The new encoder attributes. This can be <strong>null</strong>.</p> </dd> + + + + + <p>Contains the header information that is part of the raw input data. </p> + <p>To get more information on the device, use <strong>hDevice</strong> in a call to <strong>GetRawInputDeviceInfo</strong>.</p> + + + <dd> <p>The type of raw input. It can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Raw input comes from some device that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Raw input comes from the keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Raw input comes from the mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The size, in bytes, of the entire input packet of data. This includes <strong>{{RAWINPUT}}</strong> plus possible extra input reports in the <strong>{{RAWHID}}</strong> variable length array. </p> </dd> + + + <dd> <p>A handle to the device generating the raw input data. </p> </dd> + + + <dd> <p>The value passed in the <em>wParam</em> parameter of the <strong>{{WM_INPUT}}</strong> message. </p> </dd> + + + + + <p>Contains information about the state of the keyboard. </p> + + + <dd> <p>The scan code from the key depression. The scan code for keyboard overrun is <strong>{{KEYBOARD_OVERRUN_MAKE_CODE}}</strong>. </p> </dd> + + + <dd> <p>Flags for scan code information. It can be one or more of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RI_KEY_BREAK}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The key is up.</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E0}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The scan code has the {{E0}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E1}}</strong></dt> <dt>4</dt> </dl> </td><td> <p>The scan code has the {{E1}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_MAKE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The key is down.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Reserved; must be zero. </p> </dd> + + + <dd> <p>Windows message compatible virtual-key code. For more information, see Virtual Key Codes. </p> </dd> + + + <dd> <p>The corresponding window message, for example <strong>{{WM_KEYDOWN}}</strong>, <strong>{{WM_SYSKEYDOWN}}</strong>, and so forth. </p> </dd> + + + <dd> <p>The device-specific additional information for the event. </p> </dd> + + + + + <p>Describes the format of the raw input from a Human Interface Device ({{HID}}). </p> + <p>Each <strong>{{WM_INPUT}}</strong> can indicate several inputs, but all of the inputs come from the same {{HID}}. The size of the <strong>bRawData</strong> array is <strong>dwSizeHid</strong> * <strong>dwCount</strong>.</p> + + + <dd> <p>The size, in bytes, of each {{HID}} input in <strong>bRawData</strong>. </p> </dd> + + + <dd> <p>The number of {{HID}} inputs in <strong>bRawData</strong>.</p> </dd> + + + <dd> <p>The raw input data, as an array of bytes. </p> </dd> + + + + + + + + <p>This section describes how the system provides raw input to your application and how an application receives and processes that input. Raw input is sometimes referred to as generic input. </p> + + + + <p>Defines the raw input data coming from the specified mouse.</p> + <p>For the mouse, the Usage Page is 1 and the Usage is 2.</p> + + + <dd> <p>The identifier of the mouse device.</p> </dd> + + + <dd> <p>The number of buttons for the mouse.</p> </dd> + + + <dd> <p>The number of data points per second. This information may not be applicable for every mouse device.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the mouse has a wheel for horizontal scrolling; otherwise, <strong>{{FALSE}}</strong>. </p> <p><strong>Windows?{{XP:}}??</strong>This member is only supported starting with Windows?Vista.</p> </dd> + + + + + <p>Defines the raw input data coming from the specified keyboard. </p> + <p>For the keyboard, the Usage Page is 1 and the Usage is 6. </p> + + + <dd> <p>The type of the keyboard. </p> </dd> + + + <dd> <p>The subtype of the keyboard. </p> </dd> + + + <dd> <p>The scan code mode. </p> </dd> + + + <dd> <p>The number of function keys on the keyboard.</p> </dd> + + + <dd> <p>The number of {{LED}} indicators on the keyboard.</p> </dd> + + + <dd> <p>The total number of keys on the keyboard. </p> </dd> + + + + + <p>Defines the raw input data coming from the specified Human Interface Device ({{HID}}). </p> + + + <dd> <p>The vendor identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The product identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The version number for the {{HID}}. </p> </dd> + + + <dd> <p>The top-level collection Usage Page for the device. </p> </dd> + + + <dd> <p>The top-level collection Usage for the device. </p> </dd> + + + + + <p>Defines the raw input data coming from any device. </p> + + + <dd> <p>The size, in bytes, of the <strong>{{RID_DEVICE_INFO}}</strong> structure. </p> </dd> + + + <dd> <p>The type of raw input data. This member can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Data comes from an {{HID}} that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Data comes from a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Data comes from a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEMOUSE}}</strong>, this is the <strong>{{RID_DEVICE_INFO_MOUSE}}</strong> structure that defines the mouse. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEKEYBOARD}}</strong>, this is the <strong>{{RID_DEVICE_INFO_KEYBOARD}}</strong> structure that defines the keyboard. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEHID}}</strong>, this is the <strong>{{RID_DEVICE_INFO_HID}}</strong> structure that defines the {{HID}} device. </p> </dd> + + + + + <p>Defines information for the raw input devices. </p> + <p>If <strong>{{RIDEV_NOLEGACY}}</strong> is set for a mouse or a keyboard, the system does not generate any legacy message for that device for the application. For example, if the mouse {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_LBUTTONDOWN}}</strong> and related legacy mouse messages are not generated. Likewise, if the keyboard {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_KEYDOWN}}</strong> and related legacy keyboard messages are not generated.</p><p>If <strong>{{RIDEV_REMOVE}}</strong> is set and the <strong>hwndTarget</strong> member is not set to <strong>{{NULL}}</strong>, then parameter validation will fail.</p> + + + <dd> <p>Top level collection Usage page for the raw input device. </p> </dd> + + + <dd> <p>Top level collection Usage for the raw input device. </p> </dd> + + + <dd> <p>Mode flag that specifies how to interpret the information provided by <strong>usUsagePage</strong> and <strong>usUsage</strong>. It can be zero (the default) or one of the following values. By default, the operating system sends raw input from devices with the specified top level collection ({{TLC}}) to the registered application as long as it has the window focus. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDEV_APPKEYS}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>If set, the application command keys are handled. <strong>{{RIDEV_APPKEYS}}</strong> can be specified only if <strong>{{RIDEV_NOLEGACY}}</strong> is specified for a keyboard device.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_CAPTUREMOUSE}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the mouse button click does not activate the other window.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_DEVNOTIFY}}</strong></dt> <dt>0x00002000</dt> </dl> </td><td> <p>If set, this enables the caller to receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for device arrival and device removal.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXCLUDE}}</strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p>If set, this specifies the top level collections to exclude when reading a complete usage page. This flag only affects a {{TLC}} whose usage page is already specified with <strong>{{RIDEV_PAGEONLY}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXINPUTSINK}}</strong></dt> <dt>0x00001000</dt> </dl> </td><td> <p>If set, this enables the caller to receive input in the background only if the foreground application does not process it. In other words, if the foreground application is not registered for raw input, then the background application that is registered will receive the input.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_INPUTSINK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p>If set, this enables the caller to receive the input even when the caller is not in the foreground. Note that <strong>hwndTarget</strong> must be specified.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOHOTKEYS}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the application-defined keyboard device hotkeys are not handled. However, the system hotkeys; for example, {{ALT}}+{{TAB}} and {{CTRL}}+{{ALT}}+{{DEL}}, are still handled. By default, all keyboard hotkeys are handled. <strong>{{RIDEV_NOHOTKEYS}}</strong> can be specified even if <strong>{{RIDEV_NOLEGACY}}</strong> is not specified and <strong>hwndTarget</strong> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOLEGACY}}</strong></dt> <dt>0x00000030</dt> </dl> </td><td> <p>If set, this prevents any devices specified by <strong>usUsagePage</strong> or <strong>usUsage</strong> from generating legacy messages. This is only for the mouse and keyboard. See Remarks.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_PAGEONLY}}</strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>If set, this specifies all devices whose top level collection is from the specified <strong>usUsagePage</strong>. Note that <strong>usUsage</strong> must be zero. To exclude a particular top level collection, use <strong>{{RIDEV_EXCLUDE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_REMOVE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>If set, this removes the top level collection from the inclusion list. This tells the operating system to stop reading from a device which matches the top level collection.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A handle to the target window. If <strong>{{NULL}}</strong> it follows the keyboard focus.</p> </dd> + + + + + <p>Contains information about a raw input device.</p> + + + <dd> <p>A handle to the raw input device. </p> </dd> + + + <dd> <p>The type of device. This can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The device is an {{HID}} that is not a keyboard and not a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The device is a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The device is a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the raw input from the specified device.</p> + <p><strong>GetRawInputData</strong> gets the raw input one <strong>{{RAWINPUT}}</strong> structure at a time. In contrast, <strong>GetRawInputBuffer</strong> gets an array of <strong>{{RAWINPUT}}</strong> structures.</p> + <p>If <em>pData</em> is <strong>{{NULL}}</strong> and the function is successful, the return value is 0. If <em>pData</em> is not <strong>{{NULL}}</strong> and the function is successful, the return value is the number of bytes copied into pData.</p><p>If there is an error, the return value is (<strong>{{UINT}}</strong>)-1.</p> + + + <dd> <p>A handle to the <strong>{{RAWINPUT}}</strong> structure. This comes from the <em>lParam</em> in <strong>{{WM_INPUT}}</strong>. </p> </dd> + + + <dd> <p>The command flag. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RID_HEADER}}</strong></dt> <dt>0x10000005</dt> </dl> </td><td> <p>Get the header information from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RID_INPUT}}</strong></dt> <dt>0x10000003</dt> </dl> </td><td> <p>Get the raw data from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the data that comes from the <strong>{{RAWINPUT}}</strong> structure. This depends on the value of <em>uiCommand</em>. If <em>pData</em> is <strong>{{NULL}}</strong>, the required size of the buffer is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Retrieves information about the raw input device.</p> + <p>If successful, this function returns a non-negative number indicating the number of bytes copied to <em>pData</em>. </p><p>If <em>pData</em> is not large enough for the data, the function returns -1. If <em>pData</em> is <strong>{{NULL}}</strong>, the function returns a value of zero. In both of these cases, <em>pcbSize</em> is set to the minimum size required for the <em>pData</em> buffer.</p><p>Call <strong>GetLastError</strong> to identify any other errors.</p> + + + <dd> <p>A handle to the raw input device. This comes from the <strong>hDevice</strong> member of <strong>{{RAWINPUTHEADER}}</strong> or from <strong>GetRawInputDeviceList</strong>. </p> </dd> + + + <dd> <p>Specifies what data will be returned in <em>pData</em>. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICENAME}}</strong></dt> <dt>0x20000007</dt> </dl> </td><td> <p><em>pData</em> points to a string that contains the device name. </p> <p>For this <em>uiCommand</em> only, the value in <em>pcbSize</em> is the character count (not the byte count).</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICEINFO}}</strong></dt> <dt>0x2000000b</dt> </dl> </td><td> <p><em>pData</em> points to an <strong>{{RID_DEVICE_INFO}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_PREPARSEDDATA}}</strong></dt> <dt>0x20000005</dt> </dl> </td><td> <p><em>pData</em> points to the previously parsed data.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a buffer that contains the information specified by <em>uiCommand</em>. If <em>uiCommand</em> is <strong>{{RIDI_DEVICEINFO}}</strong>, set the <strong>cbSize</strong> member of <strong>{{RID_DEVICE_INFO}}</strong> to <code>sizeof({{RID_DEVICE_INFO}})</code> before calling <strong>GetRawInputDeviceInfo</strong>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + + + <p>Performs a buffered read of the raw input data.</p> + <p>Using <strong>GetRawInputBuffer</strong>, the raw input data is buffered in the array of <strong>{{RAWINPUT}}</strong> structures. For an unbuffered read, use the <strong>GetMessage</strong> function to read in the raw input data. </p><p>The <strong>{{NEXTRAWINPUTBLOCK}}</strong> macro allows an application to traverse an array of <strong>{{RAWINPUT}}</strong> structures.</p><strong>Note</strong>??To get the correct size of the raw input buffer, do not use *<em>pcbSize</em>, use *<em>pcbSize</em> * 8 instead. To ensure <strong>GetRawInputBuffer</strong> behaves properly on {{WOW64}}, you must align the <strong>{{RAWINPUT}}</strong> structure by 8 bytes. The following code shows how to align <strong>{{RAWINPUT}}</strong> for {{WOW64}}. <pre>[StructLayout(LayoutKind.Explicit)] +internal struct {{RAWINPUT}} +{ [FieldOffset(0)] public {{RAWINPUTHEADER}} header; [FieldOffset(16+8)] public {{RAWMOUSE}} mouse; [FieldOffset(16+8)] public {{RAWKEYBOARD}} keyboard; [FieldOffset(16+8)] public {{RAWHID}} hid; +} +</pre>? + <p>If <em>pData</em> is {{NULL}} and the function is successful, the return value is zero. If <em>pData</em> is not {{NULL}} and the function is successful, the return value is the number of <strong>{{RAWINPUT}}</strong> structures written to <em>pData</em>.</p><p>If an error occurs, the return value is (<strong>{{UINT}}</strong>)-1. Call <strong>GetLastError</strong> for the error code.</p> + + + <dd> <p>A reference to a buffer of <strong>{{RAWINPUT}}</strong> structures that contain the raw input data. If <strong>{{NULL}}</strong>, the minimum required buffer, in bytes, is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUT}}</strong> structure. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Registers the devices that supply the raw input data.</p> + <p>To receive <strong>{{WM_INPUT}}</strong> messages, an application must first register the raw input devices using <strong>RegisterRawInputDevices</strong>. By default, an application does not receive raw input.</p><p>To receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> messages, an application must specify the {{RIDEV_DEVNOTIFY}} flag for each device class that is specified by the usUsagePage and usUsage fields of the <strong>{{RAWINPUTDEVICE}}</strong> structure . By default, an application does not receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for raw input device arrival and removal.</p><p>If a <strong>{{RAWINPUTDEVICE}}</strong> structure has the {{RIDEV_REMOVE}} flag set and the hwndTarget parameter is not set to {{NULL}}, then parameter validation will fail. </p> + <p><strong>{{TRUE}}</strong> if the function succeeds; otherwise, <strong>{{FALSE}}</strong>. If the function fails, call <strong>GetLastError</strong> for more information.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures that represent the devices that supply the raw input.</p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures pointed to by <em>pRawInputDevices</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the information about the raw input devices for the current application.</p> + <p>To receive raw input from a device, an application must register it by using <strong>RegisterRawInputDevices</strong>. </p> + <p>If successful, the function returns a non-negative number that is the number of <strong>{{RAWINPUTDEVICE}}</strong> structures written to the buffer. </p><p>If the <em>pRawInputDevices</em> buffer is too small or <strong>{{NULL}}</strong>, the function sets the last error as <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>, returns -1, and sets <em>puiNumDevices</em> to the required number of devices. If the function fails for any other reason, it returns -1. For more details, call <strong>GetLastError</strong>. </p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures for the application. </p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures in *<em>pRawInputDevices</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure. </p> </dd> + + + + + <p>Enumerates the raw input devices attached to the system. </p> + <p>The devices returned from this function are the mouse, the keyboard, and other Human Interface Device ({{HID}}) devices.</p><p>To get more detailed information about the attached devices, call <strong>GetRawInputDeviceInfo</strong> using the hDevice from <strong>{{RAWINPUTDEVICELIST}}</strong>. </p> + <p>If the function is successful, the return value is the number of devices stored in the buffer pointed to by <em>pRawInputDeviceList</em>.</p><p>On any other error, the function returns (<strong>{{UINT}}</strong>) -1 and <strong>GetLastError</strong> returns the error indication.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICELIST}}</strong> structures for the devices attached to the system. If <strong>{{NULL}}</strong>, the number of devices are returned in *<em>puiNumDevices</em>. </p> </dd> + + + <dd> <p>If <em>pRawInputDeviceList</em> is <strong>{{NULL}}</strong>, the function populates this variable with the number of devices attached to the system; otherwise, this variable specifies the number of <strong>{{RAWINPUTDEVICELIST}}</strong> structures that can be contained in the buffer to which <em>pRawInputDeviceList</em> points. If this value is less than the number of devices attached to the system, the function returns the actual number of devices in this variable and fails with <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>.</p> </dd> + + + <dd> <p>The size of a <strong>{{RAWINPUTDEVICELIST}}</strong> structure, in bytes.</p> </dd> + + + + + <p>Indicates the filter type.</p> + <strong>Note</strong>??Note that the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>LowPassOnePoleFilter</strong> or the <strong>HighPassOnePoleFilter</strong>.? + + + <dd> <p>Attenuates (reduces) frequencies above the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies outside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies inside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies above the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>Defines a destination voice that is the target of a send from another voice and specifies whether a filter should be used.</p> + + + + <dd> <p>Indicates whether a filter should be used on data sent to the voice pointed to by <strong>pOutputVoice</strong>. Flags can be 0 or {{XAUDIO2_SEND_USEFILTER}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{IXAudio2Voice}}</strong> that will be the target of the send. The <strong>pOutputVoice</strong> member cannot be {{NULL}}.</p> </dd> + + + + + <p>Defines a set of voices to receive data from a single output voice.</p> + <p>If <strong>pSends</strong> is not {{NULL}} all of its elements must be non-{{NULL}}. To send output to the default mastering voice call <strong>{{IXAudio2Voice::SetOutputVoices}}</strong> with the pSendList argument set to {{NULL}}. </p><p>Setting <strong>SendCount</strong> to 0 is useful for certain effects such as volume meters or file writers that don't generate any audio output to pass on to another voice. </p><p>If needed, a voice will perform a single sample rate conversion, from the voice's input sample rate to the input sample rate of the voice's output voices. Because only one sample rate conversion will be performed, all the voice's output voices must have the same input sample rate. If the input sample rates of the voice and its output voices are the same, no sample rate conversion is performed. +</p> + + + <dd> <p>Number of voices to receive the output of the voice. An <strong>OutputCount</strong> value of 0 indicates the voice should not send output to any voices.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_SEND_DESCRIPTOR}}</strong> structures describing destination voices and the filters that should be used when sending to the voices. This array should contain <strong>SendCount</strong> elements. If <strong>SendCount</strong> is 0 <strong>pSends</strong> should be {{NULL}}. Note that <strong>pSends</strong> cannot contain the same voice more than once.</p> </dd> + + + + + <p>Contains information about an {{XAPO}} for use in an effect chain.</p> + <p>{{XAPO}} instances are passed to {{XAudio2}} as <strong>{{IUnknown}}</strong> interfaces and {{XAudio2}} uses <strong>{{IXAPO::QueryInterface}}</strong> to acquire an <strong>{{IXAPO}}</strong> interface and to detect whether the {{XAPO}} implements the <strong>{{IXAPOParameters}}</strong> interface. </p><p>For additional information on using {{XAPOs}} with {{XAudio2}} see How to: Create an Effect Chain and How to: Use an {{XAPO}} in {{XAudio2}}.</p> + + + + <p>Defines an effect chain.</p> + + + + <dd> <p>Number of effects in the effect chain for the voice.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structures containing references to {{XAPO}} instances.</p> </dd> + + + + + <p>Defines filter parameters for a source voice.</p> + <p>Setting {{XAUDIO2_FILTER_PARAMETERS}} with the following values is acoustically equivalent to the filter being fully bypassed.</p><pre>{{XAUDIO2_FILTER_PARAMETERS}} FilterParams; +FilterParams.Frequency = 1.0f; +FilterParams.OneOverQ = 1.0f; +FilterParams.Type = LowPassFilter; +</pre><p>The following formulas show the relationship between the members of {{XAUDIO2_FILTER_PARAMETERS}} and the per-voice filter.</p><pre>Yl( n ) = {{F1}} yb( n ) + yl( n - 1 ) +Yb( n ) = {{F1}} yh( n ) + yb( n - 1 ) +Yh( n ) = x( n ) - yl( n ) - OneOverQ(yb( n - 1 ) +Yn( n ) = Yl(n) + Yh(n) </pre><p>Where:</p><pre>Yl = lowpass output +Yb = bandpass output +Yh = highpass output +Yn = notch output +{{F1}} = {{XAUDIO2_FILTER_PARAMETERS}}.Frequency +OneOverQ = {{XAUDIO2_FILTER_PARAMETERS}}.OneOverQ</pre> + + + <dd> <p>The <strong>{{XAUDIO2_FILTER_TYPE}}</strong>.</p> </dd> + + + <dd> <p>Filter radian frequency calculated as (2 * sin(pi * (desired filter cutoff frequency) / sampleRate)). The frequency must be greater than or equal to 0 and less than or equal to {{XAUDIO2_MAX_FILTER_FREQUENCY}}. The maximum frequency allowable is equal to the source sound's sample rate divided by six which corresponds to the maximum filter radian frequency of 1. For example, if a sound's sample rate is 48000 and the desired cutoff frequency is the maximum allowable value for that sample rate, 8000, the value for <strong>Frequency</strong> will be 1. +If {{XAUDIO2_HELPER_FUNCTIONS}} is defined, {{XAudio2}}.h will include the <strong>{{XAudio2RadiansToCutoffFrequency}}</strong> and <strong>{{XAudio2CutoffFrequencyToRadians}}</strong> helper functions for converting between hertz and radian frequencies. Defining {{XAUDIO2_HELPER_FUNCTIONS}} will also include <strong>{{XAudio2CutoffFrequencyToOnePoleCoefficient}}</strong> for converting between hertz and a one-pole coefficient suitable for use with the LowPassOnePoleFilter and HighPassOnePoleFilter. </p> </dd> + + + <dd> <p>Reciprocal of Q factor. Controls how quickly frequencies beyond Frequency are dampened. Larger values result in quicker dampening while smaller values cause dampening to occur more gradually. Must be greater than 0 and less than or equal to {{XAUDIO2_MAX_FILTER_ONEOVERQ}}.</p> </dd> + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + <p>Used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> when submitting xWMA data.</p> + <p>When streaming an xWMA file a few packets at a time, {{XAUDIO2_END_OF_STREAM}} should be specified on the last packet. Alternatively, the application may call <strong>{{IXAudio2SourceVoice::Discontinuity}}</strong> after submitting the last packet. </p><p>In addition, when streaming an xWMA file a few packets at a time, the application should subtract <strong>pDecodedPacketCumulativeBytes</strong>[<strong>PacketCount</strong>-1] of the previous packet from all the entries of the currently submitted packet. </p><p>The members of <strong>{{XAUDIO2_BUFFER_WMA}}</strong> correspond to values contained in the 'dpds' {{RIFF}} chunk of the xWMA file being played. <strong>PacketCount</strong> will correspond to the size in {{UINT32s}} of the chunk. <strong>pDecodedPacketCumulativeBytes</strong> will correspond to a {{UINT32}} buffer containing the contents of the chunk. The contents of the buffer will need to be byte swapped when loading the buffer on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped and destroyed. </p><p>{{XAUDIO}} 2.8 in Windows 8.x does not support xWMA decoding. Use Windows Media Foundation {{APIs}} to perform the decoding from {{WMA}} to {{PCM}} instead. This functionality is available in the DirectX {{SDK}} versions of {{XAUDIO}} and in {{XAUDIO}} 2.9 in Windows?10.</p> + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Contains performance information.</p> + <p>{{CPU}} cycles are recorded using . Use to convert these values.</p> + + + <dd> <p>{{CPU}} cycles spent on audio processing since the last call to the <strong>{{IXAudio2::StartEngine}}</strong> or <strong>{{IXAudio2::GetPerformanceData}}</strong> function.</p> </dd> + + + <dd> <p>Total {{CPU}} cycles elapsed since the last call. </p> <strong>Note</strong>??This only counts cycles on the {{CPU}} on which {{XAudio2}} is running. ? </dd> + + + <dd> <p>Fewest {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Most {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Total memory currently in use.</p> </dd> + + + <dd> <p>Minimum delay that occurs between the time a sample is read from a source buffer and the time it reaches the speakers. </p> <table> <tr><th>Windows</th></tr> <tr><td>The delay reported is a variable value equal to the rough distance between the last sample submitted to the driver by {{XAudio2}} and the sample currently playing. The following factors can affect the delay: playing multichannel audio on a hardware-accelerated device; the type of audio device (WavePci, WaveCyclic, or WaveRT); and, to a lesser extent, audio hardware implementation. +</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>The delay reported is a fixed value, which is normally 1,024 samples (21.333 ms at 48 kHz). If <strong>{{XOverrideSpeakerConfig}}</strong> has been called using the <strong>{{XAUDIOSPEAKERCONFIG_LOW_LATENCY}}</strong> flag, the delay reported is 512 samples (10.667 ms at 48 kHz). +</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Total audio dropouts since the engine started.</p> </dd> + + + <dd> <p>Number of source voices currently playing. </p> </dd> + + + <dd> <p>Total number of source voices currently in existence. </p> </dd> + + + <dd> <p>Number of submix voices currently playing.</p> </dd> + + + <dd> <p>Number of resampler xAPOs currently active.</p> </dd> + + + <dd> <p>Number of matrix mix xAPOs currently active.</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>Number of source voices decoding {{XMA}} data.</td></tr> </table> <p>?</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>A voice can use more than one {{XMA}} stream.</td></tr> </table> <p>?</p> </dd> + + + + + <p>Contains the new global debug configuration for {{XAudio2}}. Used with the <strong>SetDebugConfiguration</strong> function.</p> + <p>Debugging messages can be completely turned off by initializing <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> to all zeroes.</p><strong>Note</strong>??For this version of {{XAudio2}}, only the <strong>{{XAUDIO2_LOG_ERRORS}}</strong> value is supported on <strong>TraceMask</strong> or <strong>BreakMask</strong>. All other members and values are ignored.? + + + + <p>{{IXAudio2}} is the interface for the {{XAudio2}} object that manages all audio engine states, the audio processing thread, the voice graph, and so forth. </p><p>This is the only {{XAudio2}} interface that is derived from the {{COM}} <strong>{{IUnknown}}</strong> interface. It controls the lifetime of the {{XAudio2}} object using two methods derived from <strong>{{IUnknown}}</strong>: <strong>{{IXAudio2::AddRef}}</strong> and <strong>{{IXAudio2::Release}}</strong>. No other {{XAudio2}} objects are reference-counted; their lifetimes are explicitly controlled using <em>create</em> and <em>destroy</em> calls, and are bounded by the lifetime of the {{XAudio2}} object that owns them.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} included three member functions that are not present in the Windows 8 version: <strong>GetDeviceCount</strong>, <strong>GetDeviceDetails</strong>, and <strong>Initialize</strong>. These enumeration methods are no longer provided and standard Windows Audio {{APIs}} should be used for device enumeration instead.</p> + + + + <p>Adds an <strong>{{IXAudio2EngineCallback}}</strong> reference to the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>This method can be called multiple times, allowing different components or layers of the same application to manage their own engine callback implementations separately. </p><p>It is invalid to call <strong>RegisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>RegisterForCallbacks</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + + <p>Removes an <strong>{{IXAudio2EngineCallback}}</strong> reference from the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>It is invalid to call <strong>UnregisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). </p> + <p>This method does not return a value.</p> + + + + <p>Creates and configures a source voice.</p> + <p>Source voices read audio data from the client. They process the data and send it to the {{XAudio2}} processing graph. </p><p>A source voice includes a variable-rate sample rate conversion, to convert data from the source format sample rate to the output rate required for the voice send list. If you use a {{NULL}} send list, the target sample rate will be the mastering voice's input sample rate. If you provide a single voice in pSendList, that voice's input sample rate is the target rate. If you provide multiple voices in the pSendList, all the source voice's output voices must be running at the same input sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destory a mastering voice if any source or submix voices still exist. </p><p>Source voices are always processed before any submix or mastering voices. This means that you do not need a ProcessingStage parameter to control the processing order. </p><p>When first created, source voices are in the stopped state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSourceVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSourceVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSourceVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSourceVoice</strong> is called. +</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}}-specific error codes.</p> + + + <dd> <p>If successful, returns a reference to the new <strong>{{IXAudio2SourceVoice}}</strong> object.</p> </dd> + + + <dd> <p>Pointer to a one of the structures in the table below. This structure contains the expected format for all audio buffers submitted to the source voice. +{{XAudio2}} supports {{PCM}} and {{ADPCM}} voice types. </p> <table> <tr><th>Format tag</th><th>Wave format structure</th><th>Size (in bytes)</th></tr> <tr><td>{{WAVE_FORMAT_PCM}} (0x0001) </td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>16</td></tr> <tr><td>-or-</td><td> <strong>{{WAVEFORMATEX}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_IEEE_FLOAT}} (0x0003) [32-bit]</td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_ADPCM}} (0x0002) [{{MS}}-{{ADPCM}}]</td><td> <strong>{{ADPCMWAVEFORMAT}}</strong> </td><td>50</td></tr> <tr><td>{{WAVE_FORMAT_EXTENSIBLE}} (0xFFFE)</td><td> <strong>{{WAVEFORMATEXTENSIBLE}}</strong> </td><td>40</td></tr> </table> <p>?</p> <p>{{XAudio2}} supports the following {{PCM}} formats. +</p> <ul> <li>8-bit (unsigned) integer {{PCM}} </li> <li>16-bit integer {{PCM}} (optimal format for {{XAudio2}}) </li> <li>20-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>24-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>32-bit integer {{PCM}} </li> <li>32-bit float {{PCM}} (preferred format after 16-bit integer) +</li> </ul> <p>The number of channels in a source voice must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. The sample rate of a source voice must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}.</p> <strong>Note</strong>??{{PCM}} data formats such as <strong>{{PCMWAVEFORMAT}}</strong> and <strong>{{ADPCMWAVEFORMAT}}</strong> that require more information than provided by <strong>{{WAVEFORMATEX}}</strong> have a <strong>{{WAVEFORMATEX}}</strong> structure as the first member in their format structures. When you create a source voice with one of those formats, cast the format's structure as a <strong>{{WAVEFORMATEX}}</strong> structure and use it as the value for <em>pSourceFormat</em>. ? </dd> + + + <dd> <p>Flags that specify the behavior of the source voice. A flag can be 0 or a combination of one or more of the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_NOPITCH}}</td><td>No pitch control is available on the voice.?</td></tr> <tr><td>{{XAUDIO2_VOICE_NOSRC}}</td><td>No sample rate conversion is available on the voice. The voice's outputs must have the same sample rate.<strong>Note</strong>??The {{XAUDIO2_VOICE_NOSRC}} flag causes the voice to behave as though the {{XAUDIO2_VOICE_NOPITCH}} flag also is specified. ? </td></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.?</td></tr> </table> <p>?</p> <strong>Note</strong>??The {{XAUDIO2_VOICE_MUSIC}} flag is not supported on Windows. ? </dd> + + + <dd> <p>Highest allowable frequency ratio that can be set on this voice. The value for this argument must be between {{XAUDIO2_MIN_FREQ_RATIO}} and {{XAUDIO2_MAX_FREQ_RATIO}}. Subsequent calls to <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> are clamped between {{XAUDIO2_MIN_FREQ_RATIO}} and <strong>MaxFrequencyRatio</strong>. +The maximum value for this argument is defined as {{XAUDIO2_MAX_FREQ_RATIO}}, which allows pitch to be raised by up to 10 octaves. </p> <p>If <em>MaxFrequencyRatio</em> is less than 1.0, the voice will use that ratio immediately after being created (rather than the default of 1.0). </p> <p> </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For {{XMA}} voices, there is one more restriction on the <em>MaxFrequencyRatio</em> argument and the voice's sample rate. The product of these two numbers cannot exceed {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO}} for one-channel voices or {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL}} for voices with any other number of channels. If the value specified for <em>MaxFrequencyRatio</em> is too high for the specified format, the call to <strong>CreateSourceVoice</strong> fails and produces a debug message. +</td></tr> </table> <p>?</p> <strong>Note</strong>??You can use the lowest possible <em>MaxFrequencyRatio</em> value to reduce {{XAudio2}}'s memory usage. ? </dd> + + + <dd> <p>Pointer to a client-provided callback interface, <strong>{{IXAudio2VoiceCallback}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the source voice. If pSendList is {{NULL}}, the send list defaults to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the source voice.</p> </dd> + + + + + <p>Creates and configures a submix voice.</p> + <p>Submix voices receive the output of one or more source or submix voices. They process the output, and then send it to another submix voice or to a mastering voice. </p><p>A submix voice performs a sample rate conversion from the input sample rate to the input rate of its output voices in <em>pSendList</em>. If you specify multiple voice sends, they must all have the input same sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destroy a mastering voice if any source or submix voices still exist. </p><p>When first created, submix voices are in the started state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means that memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSubmixVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSubmixVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the <em>pEffectChain</em> argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSubmixVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSubmixVoice</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>On success, returns a reference to the new <strong>{{IXAudio2SubmixVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels in the input audio data of the submix voice. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. +</p> </dd> + + + <dd> <p>Sample rate of the input audio data of submix voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. <em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> </dd> + + + <dd> <p>Flags that specify the behavior of the submix voice. It can be 0 or the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An arbitrary number that specifies when this voice is processed with respect to other submix voices, if the {{XAudio2}} engine is running other submix voices. The voice is processed after all other voices that include a smaller <em>ProcessingStage</em> value and before all other voices that include a larger <em>ProcessingStage</em> value. Voices that include the same <em>ProcessingStage</em> value are processed in any order. A submix voice cannot send to another submix voice with a lower or equal <em>ProcessingStage</em> value. This prevents audio being lost due to a submix cycle. +</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the submix voice. If <em>pSendList</em> is {{NULL}}, the send list will default to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the submix voice. </p> </dd> + + + + + <p>Creates and configures a mastering voice.</p> + <p>Mastering voices receive the output of one or more source or submix voices. They process the data, and send it to the audio output device. </p><p>Typically, you should create a mastering voice with an input sample rate that will be used by the majority of the title's audio content. The mastering voice performs a sample rate conversion from this input sample rate to the actual device output rate. </p><p>You cannot create a source or submix voices until a mastering voice exists. You cannot destroy a mastering voice if any source or submix voices still exist. </p><p>Mastering voices are always processed after all source and submix voices. This means that you need not specify a <em>ProcessingStage</em> parameter to control the processing order. </p><p>{{XAudio2}} only allows one mastering voice to exist at once. If you attempt to create more than one voice, {{XAUDIO2_E_INVALID_CALL}} is returned. If an additional mastering voice is needed, for example for an output device with a different audio category set, you will need to create an additional {{XAudio2}} instance. </p><p>When first created, mastering voices are in the started state. </p><p>It is invalid to call <strong>CreateMasteringVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateMasteringVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateMasteringVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateMasteringVoice</strong> is called. </p><p>Note that the DirectX {{SDK}} {{XAUDIO2}} version of <strong>CreateMasteringVoice</strong> took a DeviceIndex argument instead of a szDeviceId and a StreamCategory argument. This reflects the changes needed for the standard Windows device enumeration model.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. Returns {{ERROR_NOT_FOUND}} if no default audio device exists and {{NULL}} is passed in as the szDeviceId parameter. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p> If successful, returns a reference to the new <strong>{{IXAudio2MasteringVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels the mastering voice expects in its input audio. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. </p> <p>You can set <em>InputChannels</em> to {{XAUDIO2_DEFAULT_CHANNELS}}, which causes {{XAudio2}} to try to detect the system speaker configuration setup. </p> </dd> + + + <dd> <p>Sample rate of the input audio data of the mastering voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. +<em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> <p>You can set <em>InputSampleRate</em> to {{XAUDIO2_DEFAULT_SAMPLERATE}}, with the default being determined by the current platform. </p> <p>Windows {{XP}} defaults to 44100. </p> <p>Windows Vista and Windows 7 default to the setting specified in the Sound Control Panel. The default for this setting is 44100 (or 48000 if required by the driver). Flags +</p> </dd> + + + <dd> <p> Flags that specify the behavior of the mastering voice. Must be 0.</p> </dd> + + + <dd> <p>Identifier of the device to receive the output audio. Specifying the default value of {{NULL}} causes {{XAudio2}} to select the global default audio device.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes an effect chain to use in the mastering voice, or {{NULL}} to use no effects.</p> </dd> + + + <dd> <p>The audio stream category to use for this mastering voice.</p> </dd> + + + + + <p>Starts the audio processing thread.</p> + <p>After <strong>StartEngine</strong> is called, all started voices begin to consume audio. All enabled effects start running, and the resulting audio is sent to any connected output devices. When {{XAudio2}} is first initialized, the engine is already in the started state. </p><p>It is invalid to call <strong>StartEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>StartEngine</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Stops the audio processing thread.</p> + <p>When <strong>StopEngine</strong> is called, all output is stopped immediately. However, the audio graph is left untouched, preserving effect parameters, effect histories (for example, the data stored by a reverb effect in order to emit echoes of a previous sound), voice states, pending source buffers, cursor positions, and so forth. When the engine is restarted, the resulting audio output will be identical?apart from a period of silence?to the output that would have been produced if the engine had never been stopped. </p><p>It is invalid to call <strong>StopEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Atomically applies a set of operations that are tagged with a given identifier.</p> + <p><strong>CommitChanges</strong> does nothing if no operations are tagged with the given identifier. </p><p>See the {{XAudio2}} Operation Sets overview about working with <strong>CommitChanges</strong> and {{XAudio2}} interface methods that may be deferred. +</p> + <p>Returns {{S_OK}} if successful; returns an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Identifier of the set of operations to be applied. To commit all pending operations, pass <strong>{{XAUDIO2_COMMIT_ALL}}</strong>. </p> </dd> + + + + + <p>Returns current resource usage details, such as available memory or {{CPU}} usage.</p> + <p>For specific information on the statistics returned by <strong>GetPerformanceData</strong>, see the <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure reference. </p> + <p>This method does not return a value.</p> + + + <dd> <p>On success, reference to an <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure that is returned. +</p> </dd> + + + + + <p>Changes global debug logging options for {{XAudio2}}.</p> + <p>SetDebugConfiguration sets the debug configuration for the given instance of {{XAudio2}} engine. See <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> Structure for supported debug options. By default, {{XAudio2}} does not log debug output or break on errors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> structure that contains the new debug configuration.</p> </dd> + + + <dd> <p>This parameter is reserved and must be {{NULL}}.</p> </dd> + + + + + <p><strong>{{IXAudio2Voice}}</strong> represents the base interface from which <strong>{{IXAudio2SourceVoice}}</strong>, <strong>{{IXAudio2SubmixVoice}}</strong> and <strong>{{IXAudio2MasteringVoice}}</strong> are derived. The methods listed below are common to all voice subclasses.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Returns information about the creation flags, input channels, and sample rate of a voice.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{XAUDIO2_VOICE_DETAILS}}</strong> structure containing information about the voice.</p> </dd> + + + + + <p>Designates a new set of submix or mastering voices to receive the output of the voice.</p> + <p>This method is only valid for source and submix voices. Mastering voices can not send audio to another voice. </p><p>After calling <strong>SetOutputVoices</strong> a voice's current send levels will be replaced by a default send matrix. The <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> method must be called to set a custom matrix for the new sendlist. </p><p>It is invalid to call <strong>SetOutputVoices</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>SetOutputVoices</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}.</p><strong>Note</strong>??Calling <strong>SetOutputVoices</strong> invalidates any send matrices previously set with <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>Array of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structure references to destination voices. If <em>pSendList</em> is {{NULL}}, the voice will send its output to the current mastering voice. To set the voice to not send its output anywhere set the <strong>OutputCount</strong> member of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> to 0. All of the voices in a send list must have the same input sample rate, see {{XAudio2}} Sample Rate Conversions for additional information.</p> </dd> + + + + + <p>Replaces the effect chain of the voice.</p> + <p>The number of output channels allowed for a voice's effect chain is locked at creation of the voice. If you create the voice with an effect chain, any new effect chain passed to <strong>SetEffectChain</strong> must have the same number of input and output channels as the original effect chain. If you create the voice without an effect chain, the number of output channels allowed for the effect chain will default to the number of input channels for the voice. If any part of effect chain creation fails, none of it is applied. </p><p>After you attach an effect to an {{XAudio2}} voice, {{XAudio2}} takes control of the effect, and the client should not make any further calls to it. The simplest way to ensure this is to release all references to the effect. </p><p>It is invalid to call <strong>SetEffectChain</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>SetEffectChain</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>SetEffectChain</strong> successfully completes, and may be deleted immediately after <strong>SetEffectChain</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes the new effect chain to use. If {{NULL}} is passed, the current effect chain is removed.</p> <strong>Note</strong>??If <em>pEffectChain</em> is non-{{NULL}}, the <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that it points to must specify at least one effect. ? </dd> + + + + + <p>Enables the effect at a given position in the effect chain of the voice.</p> + <p>Be careful when you enable an effect while the voice that hosts it is running. Such an action can result in a problem if the effect significantly changes the audio's pitch or volume. </p><p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p><strong>EnableEffect</strong> takes effect immediately when you call it from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Disables the effect at a given position in the effect chain of the voice.</p> + <p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p>Disabling an effect immediately removes it from the processing graph. Any pending audio in the effect?such as a reverb tail?is not played. Be careful disabling an effect while the voice that hosts it is running. This can result in an audible artifact if the effect significantly changes the audio's pitch or volume. </p><p><strong>DisableEffect</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of valid error codes.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Returns the running state of the effect at a specified position in the effect chain of the voice.</p> + <p><strong>GetEffectState</strong> always returns the effect's actual current state. However, this may not be the state set by the most recent <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call: the actual state is only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if EnableEffect/DisableEffect was called with a deferred operation {{ID}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Returns {{TRUE}} If the effect is enabled. If the effect is disabled, returns {{FALSE}}.</p> </dd> + + + + + <p>Sets parameters for a given effect in the voice's effect chain.</p> + <p>The specific effect being used determines the valid size and format of the <em>pParameters</em> buffer. The call will fail if <em>pParameters</em> is invalid or if <em>ParametersByteSize</em> is not exactly the size that the effect expects. The client must take care to direct the <strong>SetEffectParameters</strong> call to the right effect. If this call is directed to a different effect that happens to accept the same parameter block size, the parameters will be interpreted differently. This may lead to unexpected results. </p><p>The memory pointed to by <em>pParameters</em> must <em>not</em> be freed immediately, because {{XAudio2}} will need to refer to it later when the parameters actually are applied to the effect. This happens during the next audio processing pass if the <em>OperationSet</em> argument is <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. Otherwise, the parameters are applied to the effect later, during the first processing pass after the <strong>{{IXAudio2::CommitChanges}}</strong> function is called with the same <em>OperationSet</em> argument. </p><p><strong>SetEffectParameters</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetEffectParameters}}</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. The actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface. +</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p> Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p> Size of the <strong>pParameters</strong> array in bytes.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the current effect-specific parameters of a given effect in the voice's effect chain.</p> + <p><strong>GetEffectParameters</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}). </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface.</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p>Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p>Size, in bytes, of the pParameters array.</p> </dd> + + + + + <p>Sets the voice's filter parameters.</p> + <p><strong>SetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p>This method is usable only on source and submix voices and has no effect on mastering voices.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetFilterParameters}}</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the voice's filter parameters.</p> + <p><strong>GetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p><strong>GetFilterParameters</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}). </p><strong>Note</strong>??<strong>GetFilterParameters</strong> is usable only on source and submix voices and has no effect on mastering voices.? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + + + <p>Sets the filter parameters on one of this voice's sends.</p> + <p><strong>SetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on a mastering voice's sends. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be set.</p> </dd> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the filter parameters from one of this voice's sends.</p> + <p><strong>GetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on mastering voices? sends. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be read.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Writes a number of 32-bit immediate values to the specified buffer locations directly from the command stream.</p> + <p><strong>WriteBufferImmediate</strong> performs <em>Count</em> number of 32-bit writes: one for each value and destination specified in <em>pParams</em>.</p><p>The receiving buffer (resource) must be in the <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong> state to be a valid destination for <strong>WriteBufferImmediate</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures that are pointed to by <em>pParams</em> and <em>pModes</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures equal to <em>Count</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE}}</strong> structures equal to <em>Count</em>. The default value is <strong>null</strong>; passing <strong>null</strong> causes the system to write all immediate values using <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT}}</strong>.</p> </dd> + + + + + <p>Sets the volume levels for the voice, per channel.</p> + <p><strong>SetChannelVolumes</strong> controls a voice's per-channel output levels and is applied just after the voice's final {{SRC}} and before its sends. </p><p>This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetChannelVolumes}}</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Number of channels in the voice.</p> </dd> + + + <dd> <p>Array containing the new volumes of each channel in the voice. The array must have <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the volume levels for the voice, per channel.</p> + <p>These settings are applied after the effect chain is applied. This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain, 0 means silence, and negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>GetChannelVolumes</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Confirms the channel count of the voice.</p> </dd> + + + <dd> <p>Returns the current volume level of each channel in the voice. The array must have at least <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Sets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method is valid only for source and submix voices, because mastering voices write directly to the device with no matrix mixing. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>The {{X3DAudio}} function <strong>{{X3DAudioCalculate}}</strong> can produce an output matrix for use with <strong>SetOutputMatrix</strong> based on a sound's position and a listener's position.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputMatrix}}</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Pointer to a destination <strong>{{IXAudio2Voice}}</strong> for which to set volume levels.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>SetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> ? <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel <em>S</em> to destination channel <em>D</em> is specified in the form <em>pLevelMatrix</em>[<em>SourceChannels</em> ? <em>D</em> + <em>S</em>]. +</p> <p>For example, when rendering two-channel stereo input into 5.1 output that is weighted toward the front channels?but is absent from the center and low-frequency channels?the matrix might have the values shown in the following table. </p> <table> <tr><th>Output</th><th>Left Input [Array Index]</th><th>Right Input [Array Index]</th></tr> <tr><td>Left</td><td>1.0 [0]</td><td>0.0 [1]</td></tr> <tr><td>Right</td><td>0.0 [2]</td><td>1.0 [3]</td></tr> <tr><td>Front Center</td><td>0.0 [4]</td><td>0.0 [5]</td></tr> <tr><td>{{LFE}}</td><td>0.0 [6]</td><td>0.0 [7]</td></tr> <tr><td>Rear Left</td><td>0.8 [8]</td><td>0.0 [9]</td></tr> <tr><td>Rear Right</td><td>0.0 [10]</td><td>0.8 [11]</td></tr> </table> <p>?</p> <strong>Note</strong>??The left and right input are fully mapped to the output left and right channels; 80 percent of the left and right input is mapped to the rear left and right channels. ? <p>See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method applies only to source and submix voices, because mastering voices write directly to the device with no matrix mixing. Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume level of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>See <strong>{{WAVEFORMATEXTENSIBLE}}</strong> for information on standard channel ordering. </p><strong>Note</strong>??<strong>GetOutputMatrix</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer specifying the destination <strong>{{IXAudio2Voice}}</strong> to retrieve the output matrix for.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>GetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> * <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel S to destination channel D is returned in the form <em>pLevelMatrix</em>[<em>DestinationChannels</em> ? S + D]. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Destroys the voice. If necessary, stops the voice and removes it from the {{XAudio2}} graph.</p> + <p>If any other voice is currently sending audio to this voice, the method fails. </p><p><strong>DestroyVoice</strong> waits for the audio processing thread to be idle, so it can take a little while (typically no more than a couple of milliseconds). This is necessary to guarantee that the voice will no longer make any callbacks or read any audio data, so the application can safely free up these resources as soon as the call returns. </p><p>To avoid title thread interruptions from a blocking <strong>DestroyVoice</strong> call, the application can destroy voices on a separate non-critical thread, or the application can use voice pooling strategies to reuse voices rather than destroying them. Note that voices can only be reused with audio that has the same data format and the same number of channels the voice was created with. A voice can play audio data with different sample rates than that of the voice by calling <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> with an appropriate ratio parameter. </p><p>It is invalid to call <strong>DestroyVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Use a source voice to submit audio data to the {{XAudio2}} processing pipeline.You must send voice data to a mastering voice to be heard, either directly or through intermediate submix voices. +</p> + + + + + <p>Starts consumption and processing of audio by the voice. Delivers the result to any connected submix or mastering voices, or to the output device.</p> + <p>If the {{XAudio2}} engine is stopped, the voice stops running. However, it remains in the started state, so that it starts running again as soon as the engine starts. </p><p>When first created, source voices are in the stopped state. Submix and mastering voices are in the started state. </p><p>After <strong>Start</strong> is called it has no further effect if called again before <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called. In addition multiple calls to <strong>Start</strong> without matching calls to <strong>{{IXAudio2SourceVoice::Stop}}</strong> will result in warning messages in debug builds.</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Flags that control how the voice is started. Must be 0.</p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Stops consumption of audio by the current voice.</p> + <p>All source buffers that are queued on the voice and the current cursor position are preserved. This allows the voice to continue from where it left off, when it is restarted. The <strong>{{IXAudio2SourceVoice::FlushSourceBuffers}}</strong> method can be used to flush queued source buffers. </p><p>By default, any pending output from voice effects?for example, reverb tails?is not played. Instead, the voice is immediately rendered silent. The {{XAUDIO2_PLAY_TAILS}} flag can be used to continue emitting effect output after the voice stops running. </p><p>A voice stopped with the {{XAUDIO2_PLAY_TAILS}} flag stops consuming source buffers, but continues to process its effects and send audio to its destination voices. A voice in this state can later be stopped completely by calling <strong>Stop</strong> again with the Flags argument set to 0. This enables stopping a voice with {{XAUDIO2_PLAY_TAILS}}, waiting sufficient time for any audio being produced by its effects to finish, and then fully stopping the voice by calling <strong>Stop</strong> again without {{XAUDIO2_PLAY_TAILS}}. This technique allows voices with effects to be stopped gracefully while ensuring idle voices will not continue to be processed after they have finished producing audio. </p><p><strong>Stop</strong> is always asynchronous, even if called within a callback. </p><strong>Note</strong>??{{XAudio2}} never calls any voice callbacks for a voice if the voice is stopped (even if it was stopped with {{XAUDIO2_PLAY_TAILS}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Flags that control how the voice is stopped. Can be 0 or the following: +</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_PLAY_TAILS}}</td><td>Continue emitting effect output after the voice is stopped.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Adds a new audio buffer to the voice queue.</p> + <p>The voice processes and plays back the buffers in its queue in the order that they were submitted. </p><p>The <strong>{{XAUDIO2_BUFFER}}</strong> structure includes details about the audio buffer's location and size, the part of the buffer that should actually be played, the loop region (if any) and loop count, the context reference to be used in any callbacks relating to this buffer, and an optional {{XAUDIO2_END_OF_STREAM}} flag that indicates that it is the last buffer of a contiguous sound. </p><p>If the voice is started and has no buffers queued, the new buffer will start playing immediately. If the voice is stopped, the buffer is added to the voice's queue and will be played when the voice starts. </p><p>If only part of the given buffer should be played, the <strong>PlayBegin</strong> and <strong>PlayLength</strong> fields in the <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the region to be played. A <strong>PlayLength</strong> value of 0 means to play the entire buffer (and in this case <strong>PlayBegin</strong> must be 0 as well). </p><p>If all or part of the buffer should be played in a continuous loop, the <strong>LoopBegin</strong>, <strong>LoopLength</strong> and <strong>LoopCount</strong> fields in <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the characteristics of the loop region. A <strong>LoopBegin</strong> value of {{XAUDIO2_NO_LOOP_REGION}} means that no looping should be performed, and in this case <strong>LoopLength</strong> and <strong>LoopCount</strong> must be given as 0. If a loop region is specified, it must be non-empty (<strong>LoopLength</strong> &gt; 0), and the loop count must be between 1 and {{XAUDIO2_MAX_LOOP_COUNT}} inclusive (or {{XAUDIO2_LOOP_INFINITE}} to specify an endless loop which will only end when <strong>{{IXAudio2SourceVoice::ExitLoop}}</strong> is called). A loop count of <em>N</em> means to skip backwards N times, i.e. to play the loop region <em>N</em>+1 times. </p><p>If an explicit play region is specified, it must begin and end within the given audio buffer (or, in the compressed case, within the set of samples that the buffer will decode to). In addition, the loop region cannot end past the end of the play region. </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For certain audio formats, there may be additional restrictions on the valid endpoints of any play or loop regions; e.g. for {{XMA}} buffers, the regions can only begin or end at 128-sample boundaries in the decoded audio. +</td></tr> </table><p>?</p><p>The <em>pBuffer</em> reference can be reused or freed immediately after calling this method, but the actual audio data referenced by <em>pBuffer</em> must remain valid until the buffer has been fully consumed by {{XAudio2}} (which is indicated by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback). </p><p>Up to {{XAUDIO2_MAX_QUEUED_BUFFERS}} buffers can be queued on a voice at any one time. </p><p><strong>SubmitSourceBuffer</strong> takes effect immediately when called from an {{XAudio2}} callback with an OperationSet of {{XAUDIO2_COMMIT_NOW}}. +</p><table> <tr><th>Xbox 360</th></tr> <tr><td>This method can be called from an Xbox system thread (most other {{XAudio2}} methods cannot). However, a maximum of two source buffers can be submitted from a system thread at a time.</td></tr> </table><p>?</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_BUFFER}}</strong> structure to queue. +</p> </dd> + + + <dd> <p>Pointer to an additional <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure used when submitting {{WMA}} data. </p> </dd> + + + + + <p>Removes all pending audio buffers from the voice queue.</p> + <p>If the voice is started, the buffer that is currently playing is not removed from the queue. </p><p><strong>FlushSourceBuffers</strong> can be called regardless of whether the voice is currently started or stopped. </p><p>For every buffer removed, an <strong>OnBufferEnd</strong> callback will be made, but none of the other per-buffer callbacks (<strong>OnBufferStart</strong>, <strong>OnStreamEnd</strong> or <strong>OnLoopEnd</strong>) will be made. </p><p><strong>FlushSourceBuffers</strong> does not change a the voice's running state, so if the voice was playing a buffer prior to the call, it will continue to do so, and will deliver all the callbacks for the buffer normally. This means that the <strong>OnBufferEnd</strong> callback for this buffer will take place after the <strong>OnBufferEnd</strong> callbacks for the buffers that were removed. Thus, an {{XAudio2}} client that calls <strong>FlushSourceBuffers</strong> cannot expect to receive <strong>OnBufferEnd</strong> callbacks in the order in which the buffers were submitted. </p><p>No warnings for starvation of the buffer queue will be emitted when the currently playing buffer completes; it is assumed that the client has intentionally removed the buffers that followed it. However, there may be an audio pop if this buffer does not end at a zero crossing. If the application must ensure that the flush operation takes place while a specific buffer is playing?perhaps because the buffer ends with a zero crossing?it must call <strong>FlushSourceBuffers</strong> from a callback, so that it executes synchronously. </p><p>Calling <strong>FlushSourceBuffers</strong> after a voice is stopped and then submitting new data to the voice resets all of the voice's internal counters. </p><p>A voice's state is not considered reset after calling <strong>FlushSourceBuffers</strong> until the <strong>OnBufferEnd</strong> callback occurs (if a buffer was previously submitted) or <strong>{{IXAudio2SourceVoice::GetState}}</strong> returns with <strong>{{XAUDIO2_VOICE_STATE}}</strong>. <strong>BuffersQueued</strong> == 0. For example, if you stop a voice and call <strong>FlushSourceBuffers</strong>, it's still not legal to immediately call <strong>{{IXAudio2SourceVoice::SetSourceSampleRate}}</strong> (which requires the voice to not have any buffers currently queued), until either of the previously mentioned conditions are met. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Notifies an {{XAudio2}} voice that no more buffers are coming after the last one that is currently in its queue.</p> + <p><strong>Discontinuity</strong> suppresses the warnings that normally occur in the debug build of {{XAudio2}} when a voice runs out of audio buffers to play. It is preferable to mark the final buffer of a stream by tagging it with the {{XAUDIO2_END_OF_STREAM}} flag, but in some cases the client may not know that a buffer is the end of a stream until after the buffer has been submitted. </p><p>Because calling <strong>Discontinuity</strong> is equivalent to applying the {{XAUDIO2_END_OF_STREAM}} flag retroactively to the last buffer submitted, an <strong>OnStreamEnd</strong> callback will be made when this buffer completes. +</p><strong>Note</strong>??{{XAudio2}} may consume its entire buffer queue and emit a warning before the <strong>Discontinuity</strong> call takes effect, so <strong>Discontinuity</strong> is not guaranteed to suppress the warnings.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Stops looping the voice when it reaches the end of the current loop region. </p> + <p>If the cursor for the voice is not in a loop region, <strong>ExitLoop</strong> does nothing. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Sets the frequency adjustment ratio of the voice.</p> + <p>Frequency adjustment is expressed as <em>source frequency</em> / <em>target frequency</em>. Changing the frequency ratio changes the rate audio is played on the voice. A ratio greater than 1.0 will cause the audio to play faster and a ratio less than 1.0 will cause the audio to play slower. Additionally, the frequency ratio affects the pitch of audio on the voice. As an example, a value of 1.0 has no effect on the audio, whereas a value of 2.0 raises pitch by one octave and 0.5 lowers it by one octave. </p><p>If <strong>SetFrequencyRatio</strong> is called specifying a Ratio value outside the valid range, the method will set the frequency ratio to the nearest valid value. A warning also will be generated for debug builds. </p><strong>Note</strong>??<strong>{{IXAudio2SourceVoice::GetFrequencyRatio}}</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Frequency adjustment ratio. This value must be between {{XAUDIO2_MIN_FREQ_RATIO}} and the <em>MaxFrequencyRatio</em> parameter specified when the voice was created (see <strong>{{IXAudio2::CreateSourceVoice}}</strong>). {{XAUDIO2_MIN_FREQ_RATIO}} currently is 0.0005, which allows pitch to be lowered by up to 11 octaves.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. +</p> </dd> + + + + + <p>Returns the frequency adjustment ratio of the voice.</p> + <p><strong>GetFrequencyRatio</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}). </p><p>For information on frequency ratios, see <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Returns the current frequency adjustment ratio if successful.</p> </dd> + + + + + <p>Reconfigures the voice to consume source data at a different sample rate than the rate specified when the voice was created.</p> + <p>The <strong>SetSourceSampleRate</strong> method supports reuse of {{XAudio2}} voices by allowing a voice to play sounds with a variety of sample rates. To use <strong>SetSourceSampleRate</strong> the voice must have been created without the {{XAUDIO2_VOICE_NOPITCH}} or {{XAUDIO2_VOICE_NOSRC}} flags and must not have any buffers currently queued. </p><p>The typical use of <strong>SetSourceSampleRate</strong> is to support voice pooling. For example to support voice pooling an application would precreate all the voices it expects to use. Whenever a new sound will be played the application chooses an inactive voice or ,if all voices are busy, picks the least important voice and calls <strong>SetSourceSampleRate</strong> on the voice with the new sound's sample rate. After <strong>SetSourceSampleRate</strong> has been called on the voice, the application can immediately start submitting and playing buffers with the new sample rate. This allows the application to avoid the overhead of creating and destroying voices frequently during gameplay. +</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>The new sample rate the voice should process submitted data at. Valid sample rates are 1kHz to 200kHz. </p> </dd> + + + + + <p>A submix voice is used primarily for performance improvements and effects processing. </p> + <p>Data buffers cannot be submitted directly to submix voices and will not be audible unless submitted to a mastering voice. A submix voice can be used to ensure that a particular set of voice data is converted to the same format and/or to have a particular effect chain processed on the collective result. +</p><p>{{IXAudio2SubmixVoice}} inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to submix voices. The interface type exists solely because some of the base class methods are implemented differently for submix voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + <p>A mastering voice is used to represent the audio output device.</p><p>Data buffers cannot be submitted directly to mastering voices, but data submitted to other types of voices must be directed to a mastering voice to be heard. +</p><p><strong>{{IXAudio2MasteringVoice}}</strong> inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to mastering voices. The interface type exists solely because some of the base class methods are implemented differently for mastering voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + + <p>Returns the channel mask for this voice.</p> + <p>The <em>pChannelMask</em> argument is a bit-mask of the various channels in the speaker geometry reported by the audio system. This information is needed for the <strong>{{X3DAudioInitialize}}</strong> <em>SpeakerChannelMask</em> parameter. </p><p>The {{X3DAUDIO}}.H header declares a number of <strong>{{SPEAKER_}}</strong> positional defines to decode these channels masks. </p><p>Examples include: </p><pre>{{SPEAKER_STEREO}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) {{SPEAKER_5POINT1}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) // | {{SPEAKER_FRONT_CENTER}} (0x4) // | {{SPEAKER_LOW_FREQUENCY}} (0x8) // | {{SPEAKER_BACK_LEFT}} (0x10) | {{SPEAKER_BACK_RIGHT}} (0x20)</pre><strong>Note</strong>??For the DirectX {{SDK}} versions of {{XAUDIO}}, the channel mask for the output device was obtained via the <strong>{{IXAudio2::GetDeviceDetails}}</strong> method, which doesn't exist in Windows?8 and later.? + <p>This method does not return a value.</p> + + + <dd> <p> Returns the channel mask for this voice. This corresponds to the <strong>dwChannelMask</strong> member of the <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure. +</p> </dd> + + + + + <p>The {{IXAudio2EngineCallback}} interface contains methods that notify the client when certain events happen in the <strong>{{IXAudio2}}</strong> engine.</p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods via an interface reference provided by the client, using the <strong>{{XAudio2Create}}</strong> method. Methods in this interface return <strong>void</strong>, rather than an {{HRESULT}}. +</p><p>See {{XAudio2}} Callbacks for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called by {{XAudio2}} just before an audio processing pass begins.</p> + + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} just after an audio processing pass ends.</p> + <p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + + <p>Called if a critical system error occurs that requires {{XAudio2}} to be closed down and restarted.</p> + <p>If you provide the {{ID}} of a specific device in the <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong> or use the {{XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT}} flag, then a critical error will occur and <strong>OnCriticalError</strong> is raised if the underlying {{WASAPI}} rendering device becomes unavailable. This can occur when a headset or speaker is unplugged or when a {{USB}} audio device is removed, for example. Once a critical error has occurred, audio processing stops and all further calls to {{XAudio2}} fail. The only way to recover in this situation is to release the {{XAudio2}} instance and create a new one. </p><p></p><p>If you specified {{NULL}} or <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong>, then the system uses a Virtual Audio Client to represent the audio endpoint. In this case, if the underlying {{WASAPI}} rendering device becomes unavailable, the system automatically selects a new audio rendering device for rendering, audio processing continues, and <strong>OnCriticalError</strong> is not raised.</p><p>On the mobile device family, a Virtual Audio Client is always used and <strong>OnCriticalError</strong> is never raised, regardless of the values you provide to <strong>CreateMasteringVoice</strong>.</p><p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Error code returned by {{XAudio2}}.</p> </dd> + + + + + <p>The <strong>{{IXAudio2VoiceCallback}}</strong> interface contains methods that notify the client when certain events happen in a given <strong>{{IXAudio2SourceVoice}}</strong>. </p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods through an interface reference provided by the client in the <strong>{{IXAudio2::CreateSourceVoice}}</strong> method. Methods in this interface return void, rather than an {{HRESULT}}. +</p><p>See the {{XAudio2}} Callbacks topic for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called during each processing pass for each voice, just before {{XAudio2}} reads data from the voice's buffer queue.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of bytes that must be submitted immediately to avoid starvation. This allows the implementation of just-in-time streaming scenarios; the client can keep the absolute minimum data queued on the voice at all times, and pass it fresh data just before the data is required. This model provides the lowest possible latency attainable with {{XAudio2}}. For xWMA and {{XMA}} data <em>BytesRequired</em> will always be zero, since the concept of a frame of xWMA or {{XMA}} data is meaningless. </p> <strong>Note</strong>??In a situation where there is always plenty of data available on the source voice, <em>BytesRequired</em> should always report zero, because it doesn't need any samples immediately to avoid glitching. ? </dd> + + + + + <p>Called just after the processing pass for the voice ends.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice has just finished playing a contiguous audio stream.</p> + <p><strong>OnStreamEnd</strong> is triggered when {{XAudio2}} processes an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set. See the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> method for more information. </p><p>The <strong>OnStreamEnd</strong> callback indicates that {{XAudio2}} has finished consuming the last buffer submitted to the voice. With {{PCM}} data, all audio is guaranteed to have been played and the voice can be stopped or destroyed safely. </p><p>The <strong>OnStreamEnd</strong> callback only indicates that an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set has been processed. The callback is strictly informational and does not change the state of the source voice that triggered it. A voice stays in the start state until <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called and will continue to play submitted source buffers and to trigger additional callbacks. </p><p><strong>OnStreamEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice is about to start processing a new audio buffer.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferStart</strong> is guaranteed to be called just before the first byte of the current buffer is consumed. It is appropriate to use this callback for changes to the voice state such as the following. </p><ul> <li>Submitting a new buffer to the voice </li> <li>Adjusting the volume, pitch, and effect parameters of the voice </li> <li>Enabling or disabling an effect in the voice's effect chain</li> </ul>All the actions listed above are synchronous when performed in an {{XAudio2}} callback, so the changes will take effect immediately, affecting the buffer that is about to start.<p>It is also safe to use this callback to write audio data to the buffer directly, which can be useful for low-latency streaming scenarios. However, as with all {{XAudio2}} callbacks, no work should be done that uses a significant amount of processor time or could block execution, including synchronous disk or network reads. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the pContext member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice finishes processing a buffer. </p> + <p>After an <strong>OnBufferEnd</strong> callback the audio memory for the buffer associated with <em>pBufferContext</em> can safely be released. </p><p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext </strong>member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed and before the first byte of the next buffer is consumed. This callback can be used to overwrite or release the audio data referenced by the completed buffer, and to update other state associated with the voice as appropriate. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Context reference assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice reaches the end position of a loop.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnLoopEnd</strong> is not sample-accurate; that is, actions in the callback do not occur at the exact moment that a given sample is being processed. It is only guaranteed to be called shortly after the last sample in the loop has been processed. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted. </p> </dd> + + + + + <p>Called when a critical error occurs during voice processing.</p> + <p><strong>OnVoiceError</strong> is called in the event of an error during voice processing, such as a hardware {{XMA}} decoder error on the Xbox 360. The arguments report which buffer was being processed at the time of the error, and its {{HRESULT}} code. If the error is not recoverable by destroying and re-creating the voice, the <strong>OnCriticalError</strong> engine callback will be called as well. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + <dd> <p> The {{HRESULT}} code of the error encountered.</p> </dd> + + + + + <p>Creates a new <strong>{{XAudio2}}</strong> object and returns a reference to its <strong>{{IXAudio2}}</strong> interface.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} supported a flag <strong>{{XAUDIO2_DEBUG_ENGINE}}</strong> to select between the release and 'checked' version. This flag is not supported or defined in the Windows 8 version of {{XAUDIO2}}. </p><strong>Note</strong>??No versions of the DirectX {{SDK}} contain the xaudio2.lib import library. DirectX {{SDK}} versions use {{COM}} to create a new <strong>{{XAudio2}}</strong> object.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Describes parameters for use with the volume meter {{APO}}.</p> + <p>This structure is used with the <strong>{{XAudio2}} {{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p><em>pPeakLevels</em> and <em>pRMSLevels</em> are not returned by <strong>{{IXAudio2Voice::GetEffectParameters}}</strong>, the arrays are only filled out if they are present. If <em>pPeakLevels</em> and <em>pRMSLevels</em> are used they must be allocated by the application. The application is responsible for freeing the arrays when they are no longer needed. </p><p><em>ChannelCount</em> must be set by the application to match the number of channels in the voice the effect is applied to.</p> + + + <dd> <p>Array that will be filled with the maximum absolute level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pPeakLevels</em> may be {{NULL}} if <em>pRMSLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Array that will be filled with root mean square level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pRMSLevels</em> may be {{NULL}} if <em>pPeakLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Number of channels being processed.</p> </dd> + + + + + <p>Describes parameters for use in the reverb {{APO}}.</p> + <p>All parameters related to sampling rate or time are relative to a 48kHz voice and must be scaled for use with other sampling rates. For example, setting <em>ReflectionsDelay</em> to 300ms gives a true 300ms delay when the reverb is hosted in a 48kHz voice, but becomes a 150ms delay when hosted in a 24kHz voice. </p> + + + <dd> <p>Percentage of the output that will be reverb. Allowable values are from 0 to 100.</p> </dd> + + + <dd> <p>The delay time of the first reflection relative to the direct path. Permitted range is from 0 to 300 milliseconds. </p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay of reverb relative to the first reflection. Permitted range is from 0 to 85 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left rear output and right rear output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left side output and right side output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Position of the left input within the simulated space relative to the listener. With <em>PositionLeft</em> set to the minimum value, the left input is placed close to the listener. In this position, early reflections are dominant, and the reverb decay is set back in the sound field and reduced in amplitude. With <em>PositionLeft</em> set to the maximum value, the left input is placed at a maximum distance from the listener within the simulated room. <em>PositionLeft</em> does not affect the reverb decay time (liveness of the room), only the apparent position of the source relative to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Same as <em>PositionLeft</em>, but affecting only the right input. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??PositionRight is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??<em>PositionMatrixRight</em> is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). </p> </dd> + + + <dd> <p>Controls the character of the individual wall reverberations. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). +</p> </dd> + + + <dd> <p>Adjusts the decay time of low frequencies relative to the decay time at 1 kHz. The values correspond to dB of gain as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td><td>+1</td><td>+2</td><td>+3</td><td>+4</td></tr> </table> <p>?</p> <strong>Note</strong>??A <em>LowEQGain</em> value of 8 results in the decay time of low frequencies being equal to the decay time at 1 kHz. ? <p> Permitted range is from 0 to 12 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter that is controlled by the <em>LowEQGain</em> parameter. The values correspond to frequency in Hz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr> <tr><th>Frequency (Hz)</th><td>50</td><td>100</td><td>150</td><td>200</td><td>250</td><td>300</td><td>350</td><td>400</td><td>450</td><td>500</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 9 (no units). </p> </dd> + + + <dd> <p>Adjusts the decay time of high frequencies relative to the decay time at 1 kHz. When set to zero, high frequencies decay at the same rate as 1 kHz. When set to maximum value, high frequencies decay at a much faster rate than 1 kHz. </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 8 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the high pass filter that is controlled by the <em>HighEQGain</em> parameter. The values correspond to frequency in kHz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr> <tr><th>Frequency (kHz)</th><td>1</td><td>1.5</td><td>2</td><td>2.5</td><td>3</td><td>3.5</td><td>4</td><td>4.5</td><td>5</td><td>5.5</td><td>6</td><td>6.5</td><td>7</td><td>7.5</td><td>8</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 14 (no units).</p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter for the room effect. Permitted range is from 20 to 20,000 Hz.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Sets the pass band intensity level of the low-pass filter for both the early reflections and the late field reverberation. Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Sets the intensity of the low-pass filter for both the early reflections and the late field reverberation at the corner frequency (<em>RoomFilterFreq</em>). Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the early reflections. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the reverberations. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Reverberation decay time at 1 kHz. This is the time that a full scale input signal decays by 60 dB. Permitted range is from 0.1 to infinity seconds.</p> </dd> + + + <dd> <p>Controls the modal density in the late field reverberation. For colorless spaces, <em>Density</em> should be set to the maximum value (100). As Density is decreased, the sound becomes hollow (comb filtered). This is an effect that can be useful if you are trying to model a silo. Permitted range as a percentage is from 0 to 100.</p> </dd> + + + <dd> <p>The apparent size of the acoustic space. Permitted range is from 1 to 100 feet.</p> </dd> + + + <dd> <p>If set to {{TRUE}}, disables late field reflection calculations. Disabling late field reflection calculations results in a significant {{CPU}} time savings.</p> <strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this member. ? </dd> + + + + + <p>Describes {{I3DL2}} (Interactive 3D Audio Rendering Guidelines Level 2.0) parameters for use in the <strong>ReverbConvertI3DL2ToNative</strong> function.</p> + <p>There are many preset values defined for the <strong>{{XAUDIO2FX_REVERB_I3DL2_PARAMETERS}}</strong> structure. For more information, see <strong>{{XAUDIO2FX_I3DL2_PRESET}}</strong>. </p> + + + + <p>Creates a new volume meter audio processing object ({{APO}}) and returns a reference to it.</p> + <p>For information on creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview.</p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateVolumeMeter}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateVolumeMeter}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateVolumeMeter}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pVolumeMeterAPO; +{{XAudio2CreateVolumeMeter}}(&amp;pVolumeMeterAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioVolumeMeter</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("4FC3B166-972A-40CF-{{BC37}}-7DB03DB2FBA3")) AudioVolumeMeter; +</code><p><strong>{{XAudio2CreateVolumeMeter}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The volume meter uses the <strong>{{XAUDIO2FX_VOLUMEMETER_LEVELS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method when the {{XAPO}} is bound to the audio graph.</p><strong>Note</strong>??<strong>{{XAudio2CreateVolumeMeter}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioVolumeMeter</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioVolumeMeter(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateVolumeMeter}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioVolumeMeter(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the created volume meter {{APO}}.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Creates a new reverb audio processing object ({{APO}}), and returns a reference to it.</p> + <p><strong>{{XAudio2CreateReverb}}</strong> creates an effect performing Princeton Digital Reverb. The {{XAPO}} effect library ({{XAPOFX}}) includes an alternate reverb effect. Use <strong>CreateFX</strong> to create this alternate effect. </p><p>The reverb {{APO}} supports has the following restrictions: </p><ul> <li>Input audio data must be {{FLOAT32}}. </li> <li>Framerate must be within {{XAUDIO2FX_REVERB_MIN_FRAMERATE}} (20,000 Hz) and {{XAUDIO2FX_REVERB_MAX_FRAMERATE}} (48,000 Hz). </li> <li>The input and output channels must be one of the following combinations.<ul> <li>Mono input and mono output </li> <li>Mono input and 5.1 output </li> <li>Stereo input and stereo output </li> <li>Stereo input and 5.1 output</li> </ul> </li> </ul>The reverb {{APO}} maintains internal state information between processing samples. You can only use an instance of the {{APO}} with one source of audio data at a time. Multiple voices that require reverb effects would each need to create a separate reverb effect with<strong>{{XAudio2CreateReverb}}</strong>.<p>For information about creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview. </p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateReverb}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateReverb}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateReverb}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pReverbAPO; +{{XAudio2CreateReverb}}(&amp;pReverbAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioReverb</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("{{C2633B16}}-471B-4498-{{B8C5}}-4F0959E2EC09")) AudioReverb; +</code><p><strong>{{XAudio2CreateReverb}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The reverb uses the <strong>{{XAUDIO2FX_REVERB_PARAMETERS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. </p><strong>Note</strong>??<strong>{{XAudio2CreateReverb}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioReverb</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioReverb(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateReverb}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioReverb(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a reference to the reverb {{APO}} that is created.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Defines a {{DSP}} setting at a given normalized distance.</p> + + + + <dd> <p>Normalized distance. This must be within 0.0f to 1.0f.</p> </dd> + + + <dd> <p>{{DSP}} control setting.</p> </dd> + + + + + <p>Defines an explicit piecewise curve made up of linear segments, directly defining {{DSP}} behavior with respect to normalized distance.</p> + + + + <dd> <p> <strong>{{X3DAUDIO_DISTANCE_CURVE_POINT}}</strong> array. The array must have no duplicates and be sorted in ascending order with respect to distance.</p> </dd> + + + <dd> <p>Number of distance curve points. There must be two or more points since all curves must have at least two endpoints defining values at 0.0f and 1.0f normalized distance, respectively.</p> </dd> + + + + + <p>Specifies directionality for a single-channel non-{{LFE}} emitter by scaling {{DSP}} behavior with respect to the emitter's orientation.</p> + <p>For a detailed explanation of sound cones see Sound Cones.</p> + + + <dd> <p>Inner cone angle in radians. This value must be within 0.0f to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Outer cone angle in radians. This value must be within <em>InnerAngle</em> to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Volume scaler on/within inner cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Volume scaler on/beyond outer cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on/within inner cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on or beyond outer cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on or within inner cone. This must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on/beyond outer cone. This must be within 0.0f to 2.0f. +</p> </dd> + + + + + <p>Defines a point of 3D audio reception.</p> + <p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>The parameter type <strong>{{X3DAUDIO_VECTOR}}</strong> is typed to DirectX::XMFLOAT3, to provide x, y and z floating-point values. </p><p>A listener's front and top vectors must be orthonormal. To be considered orthonormal, a pair of vectors must have a magnitude of 1 +- 1x10-5 and a dot product of 0 +- 1x10-5. </p> + + + <dd> <p>Orientation of front direction. When <strong>pCone</strong> is {{NULL}} <strong>OrientFront</strong> is used only for matrix and delay calculations. When <strong>pCone</strong> is not {{NULL}} <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. This value must be orthonormal with <strong>OrientTop</strong> when used.</p> </dd> + + + <dd> <p>Orientation of top direction, used only for matrix and delay calculations. This value must be orthonormal with <strong>OrientFront</strong> when used.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units per second, used only for doppler calculations. This value does not affect <strong>Position</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_CONE}}</strong> structure for this listener. Providing a listener cone will specify that additional calculations are performed when determining the volume and filter {{DSP}} parameters for individual sound sources. A {{NULL}} <strong>pCone</strong> value specifies an omnidirectional sound and no cone processing is applied. <strong>pCone</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + + + <p>Defines a single-point or multiple-point 3D audio source that is used with an arbitrary number of sound channels.</p> + <p><strong>{{X3DAUDIO_EMITTER}}</strong> only supports a cone in a single-point emitter. Multi-point emitters are a convenient and efficient way to manage a related group of sound sources. Many properties are shared among all channel points, such as Doppler?the same Doppler shift is applied to all channels in the emitter. Thus, the Doppler value need only be calculated once, not per-point as would be needed with multiple separate single-point emitters. Because <strong>{{X3DAUDIO_EMITTER}}</strong> only has one orientation vector, a multi-point emitter cone would be of limited usefulness, forcing all channels to behave as if they were facing the same direction. If multiple independent cones are needed, multiple single-point emitters should be used, each with its own orientation. </p><p>The parameter type {{X3DAUDIO_VECTOR}} is typed to DirectX::XMFLOAT3, to provide x , y , and z floating-point values. </p><p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>For user-defined distance curves, the distance field of the first point must be 0.0f and the distance field of the last point must be 1.0f. </p><p>If an emitter moves beyond a distance of (<strong>CurveDistanceScaler</strong> ? 1.0f), the last point on the curve is used to compute the volume output level. The last point is determined by the following: +</p><pre>{{X3DAUDIO_DISTANCE_CURVE}}.pPoints[PointCount-1].{{DSPSetting}})</pre> + + + <dd> <p>Pointer to a sound cone. Used only with single-channel emitters for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. {{NULL}} specifies the emitter is omnidirectional.</p> </dd> + + + <dd> <p>Orientation of the front direction. This value must be orthonormal with <strong>OrientTop</strong>. <strong>OrientFront</strong> must be normalized when used. For single-channel emitters without cones <strong>OrientFront</strong> is only used for emitter angle calculations. For multi channel emitters or single-channel with cones <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Orientation of the top direction. This value must be orthonormal with <strong>OrientFront</strong>. <strong>OrientTop</strong> is only used with multi-channel emitters for matrix calculations.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units/second. This value is used only for doppler calculations. It does not affect <strong>Position</strong>. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius calculations. If <strong>InnerRadius</strong> is 0, then no inner radius is used, but <strong>InnerRadiusAngle</strong> may still be used. This value must be between 0.0f and {{MAX_FLT}}. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius angle calculations. This value must be between 0.0f and {{X3DAUDIO_PI}}/4.0. </p> </dd> + + + <dd> <p>Number of emitters defined by the <strong>{{X3DAUDIO_EMITTER}}</strong> structure. Must be greater than 0. </p> </dd> + + + <dd> <p>Distance from <strong>Position</strong> that channels will be placed if <strong>ChannelCount</strong> is greater than 1. <strong>ChannelRadius</strong> is only used with multi-channel emitters for matrix calculations. Must be greater than or equal to 0.0f.</p> </dd> + + + <dd> <p>Table of channel positions, expressed as an azimuth in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector. An azimuth of {{X3DAUDIO_2PI}} specifies a channel is a low-frequency effects ({{LFE}}) channel. {{LFE}} channels are positioned at the emitter base and are calculated with respect to <strong>pLFECurve</strong> only, never <strong>pVolumeCurve</strong>. <strong>pChannelAzimuths</strong> must have at least <strong>ChannelCount</strong> elements, but can be <strong>{{NULL}}</strong> if <strong>ChannelCount</strong> = 1. The table values must be within 0.0f to {{X3DAUDIO_2PI}}. <strong>pChannelAzimuths</strong> is used with multi-channel emitters for matrix calculations. </p> </dd> + + + <dd> <p>Volume-level distance curve, which is used only for matrix calculations. {{NULL}} specifies a specialized default curve that conforms to the inverse square law, such that when distance is between 0.0f and <strong>CurveDistanceScaler</strong> ? 1.0f, no attenuation is applied. +When distance is greater than <strong>CurveDistanceScaler</strong> ? 1.0f, the amplification factor is (<strong>CurveDistanceScaler</strong> ? 1.0f)/distance. At a distance of <strong>CurveDistanceScaler</strong> ? 2.0f, the sound will be at half volume or -6 dB, at a distance of <strong>CurveDistanceScaler</strong> ? 4.0f, the sound will be at one quarter volume or -12 dB, and so on. <strong>pVolumeCurve</strong> and pLFECurve are independent of each other. <strong>pVolumeCurve</strong> does not affect <strong>{{LFE}} channel</strong> volume. </p> </dd> + + + <dd> <p>{{LFE}} roll-off distance curve, or {{NULL}} to use default curve: [0.0f, <strong>CurveDistanceScaler</strong> ?1.0f], [<strong>CurveDistanceScaler</strong> ?1.0f, 0.0f]. A {{NULL}} value for <strong>pLFECurve</strong> specifies a default curve that conforms to the inverse square law with distances &lt;= <strong>CurveDistanceScaler</strong> clamped to no attenuation. +<strong>pVolumeCurve</strong> and <strong>pLFECurve</strong> are independent of each other. <strong>pLFECurve</strong> does not affect non {{LFE}} channel volume. </p> </dd> + + + <dd> <p>Low-pass filter ({{LPF}}) direct-path coefficient distance curve, or {{NULL}} to use the default curve: [0.0f, 1.0f], [1.0f, 0.75f]. <strong>pLPFDirectCurve</strong> is only used for {{LPF}} direct-path calculations. +</p> </dd> + + + <dd> <p>{{LPF}} reverb-path coefficient distance curve, or {{NULL}} to use default curve: [0.0f, 0.75f], [1.0f, 0.75f]. <strong>pLPFReverbCurve</strong> is only used for {{LPF}} reverb path calculations.</p> </dd> + + + <dd> <p>Reverb send level distance curve, or {{NULL}} to use default curve: [0.0f, 1.0f], [1.0f, 0.0f]. </p> </dd> + + + <dd> <p>Curve distance scaler that is used to scale normalized distance curves to user-defined world units, and/or to exaggerate their effect. This does not affect any other calculations. The value must be within the range {{FLT_MIN}} to {{FLT_MAX}}. <strong>CurveDistanceScaler</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Doppler shift scaler that is used to exaggerate Doppler shift effect. <strong>DopplerScaler</strong> is only used for Doppler calculations and does not affect any other calculations. The value must be within the range 0.0f to {{FLT_MAX}}.</p> </dd> + + + + + <p>Receives the results from a call to <strong>{{X3DAudioCalculate}}</strong>.</p> + <p>The following members must be initialized before passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function: </p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes</strong></li> <li><strong>SrcChannelCount </strong></li> <li><strong>DstChannelCount</strong></li> </ul><p>The following members are returned by passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function:</p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes </strong></li> <li><strong>{{LPFDirectCoefficient}} </strong></li> <li><strong>{{LPFReverbCoefficient}}</strong></li> <li><strong>ReverbLevel </strong></li> <li><strong>DopplerFactor </strong></li> <li><strong>EmitterToListenerAngle</strong></li> <li><strong>EmitterToListenerDistance </strong></li> <li><strong>EmitterVelocityComponent </strong></li> <li><strong>ListenerVelocityComponent</strong></li> </ul><strong>Note</strong>??For <strong>pMatrixCoefficients</strong> and <strong>pDelayTimes</strong>, <strong>{{X3DAudioCalculate}}</strong> does not allocate additional memory. <strong>{{X3DAudioCalculate}}</strong> merely modifies the values at the memory locations allocated for these references.? + + + + <p>Sets all global 3D audio constants.</p> + <p><strong>{{X3DAUDIO_HANDLE}}</strong> is an opaque data structure. Because the operating system doesn't allocate any additional storage for the 3D audio instance handle, you don't need to free or close it.</p> + <p>This function does not return a value.</p> + + + <dd> <p>Assignment of channels to speaker positions. This value must not be zero. The only permissible value on Xbox 360 is {{SPEAKER_XBOX}}.</p> </dd> + + + <dd> <p>Speed of sound, in user-defined world units per second. Use this value only for doppler calculations. It must be greater than or equal to {{FLT_MIN}}.</p> </dd> + + + <dd> <p>3D audio instance handle. Use this handle when you call <strong>{{X3DAudioCalculate}}</strong>.</p> </dd> + + + + + <p>Calculates {{DSP}} settings with respect to 3D parameters.</p> + <p>You typically call <strong>{{X3DAudioCalculate}}</strong> once for each pair of emitting objects and listeners in the scene. After each call, to apply the 3D effects, the app manually applies the calculation results at <em>pDSPSettings</em> to the {{XAUDIO2}} graph. For more info, see How to: Integrate {{X3DAudio}} with {{XAudio2}}.</p><strong>Important</strong>?? The listener and emitter values must be valid. Floating-point specials (NaN, {{QNaN}}, +{{INF}}, -{{INF}}) can cause the entire audio output to go silent if introduced into a running audio graph.? + <p>This function does not return a value.</p> + + + <dd> <p>3D audio instance handle. Call <strong>{{X3DAudioInitialize}}</strong> to get this handle.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_LISTENER}}</strong> representing the point of reception.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_EMITTER}}</strong> representing the sound source.</p> </dd> + + + <dd> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{X3DAUDIO_CALCULATE_MATRIX}}</td><td>Enables matrix coefficient table calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DELAY}}</td><td>Enables delay time array calculation (stereo only).?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_DIRECT}}</td><td>Enables low pass filter ({{LPF}}) direct-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_REVERB}}</td><td>Enables {{LPF}} reverb-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REVERB}}</td><td>Enables reverb send level calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DOPPLER}}</td><td>Enables Doppler shift factor calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_EMITTER_ANGLE}}</td><td>Enables emitter-to-listener interior angle calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_ZEROCENTER}}</td><td>Fills the center channel with silence. This flag allows you to keep a 6-channel matrix so you do not have to remap the channels, but the center channel will be silent. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REDIRECT_TO_LFE}}</td><td> Applies an equal mix of all source channels to a low frequency effect ({{LFE}}) destination channel. It only applies to matrix calculations with a source that does not have an {{LFE}} channel and a destination that does have an {{LFE}} channel. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_DSP_SETTINGS}}</strong> structure that receives the calculation results.</p> </dd> + + + + + <p>Describes the contents of a stream buffer. </p> + <p>This metadata can be used to implement optimizations that require knowledge of a stream buffer's contents. For example, {{XAPOs}} that always produce silent output from silent input can check the flag on the input stream buffer to determine if any signal processing is necessary. If silent, the {{XAPO}} can simply set the flag on the output stream buffer to silent and return, thus averting the work of processing silent data. </p><p>Likewise, {{XAPOs}} that receive valid input data, but generate silence (for any reason), may set the output stream buffer's flag accordingly, rather than writing silent samples to the buffer. </p><p>These flags represent what should be assumed is in the respective buffer. The flags may not reflect what is actually stored in memory. For example, the {{XAPO_BUFFER_SILENT}} indicates that silent data should be assumed, however the respective memory may be uninitialized </p> + + + <dd> <p>Stream buffer contains only silent samples.</p> </dd> + + + <dd> <p>Stream buffer contains audio data to be processed.</p> </dd> + + + + + <p>Describes general characteristics of an {{XAPO}}. Used with <strong>{{IXAPO::GetRegistrationProperties}}</strong>, <strong>{{CXAPOParametersBase::CXAPOParametersBase}}</strong>, and <strong>{{CXAPOBase::CXAPOBase}}</strong>. </p> + + + + + <p>Defines stream buffer parameters that remain constant while an {{XAPO}} is locked. Used with the <strong>{{IXAPO::LockForProcess}}</strong> method.</p> + <p>The byte size of the respective stream buffer must be at least <em>MaxFrameCount</em> ? (<em>pFormat</em>-&gt;nBlockAlign) bytes. </p> + + + + <p>Defines stream buffer parameters that may change from one call to the next. Used with the <strong>Process</strong> method.</p> + <p>Although the format and maximum size values of a particular stream buffer are constant, as defined by the <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong> structure, the actual memory address of the stream buffer is permitted to change. For constant-bit-rate ({{CBR}}) {{XAPOs}}, ValidFrameCount is constant and is always equal to the corresponding <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong>.MaxFrameCount for this buffer. </p><strong>Note</strong>??Only constant-bit-rate {{XAPOs}} are currently supported.? + + + + <p>The interface for an Audio Processing Object which be used in an {{XAudio2}} effect chain.</p> + + + + + <p>Returns the registration properties of an {{XAPO}}. </p> + + <p>Returns {{S_OK}} if successful; returns an error code otherwise.</p> + + + <dd> <p> Receives a reference to a <strong>{{XAPO_REGISTRATION_PROPERTIES}}</strong> structure containing the registration properties the {{XAPO}} was created with; use <strong>{{XAPOFree}}</strong> to free the structure. </p> </dd> + + + + + <p>Queries if a specific input format is supported for a given output format.</p> + <p>The <strong>{{IXAPO::IsOutputFormatSupported}}</strong> and <strong>IsInputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsInputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods. </p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p> Output format. +</p> </dd> + + + <dd> <p> Input format to check for being supported.</p> </dd> + + + <dd> <p> If not {{NULL}}, and the input format is not supported for the given output format, <em>ppSupportedInputFormat</em> returns a reference to the closest input format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Queries if a specific output format is supported for a given input format.</p> + <p>The <strong>{{IXAPO::IsInputFormatSupported}}</strong> and <strong>IsOutputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsOutputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods.</p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p>Input format. </p> </dd> + + + <dd> <p>Output format to check for being supported.</p> </dd> + + + <dd> <p>If not {{NULL}} and the output format is not supported for the given input format, <em>ppSupportedOutputFormat</em> returns a reference to the closest output format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Performs any effect-specific initialization.</p> + <p>The contents of <em>pData</em> are defined by a given {{XAPO}}. Immutable parameters (constant for the lifetime of the {{XAPO}}) should be set in this method. Once initialized, an {{XAPO}} cannot be initialized again. An {{XAPO}} should be initialized before passing it to {{XAudio2}} as part of an effect chain. </p><strong>Note</strong>??{{XAudio2}} does not call this method, it should be called by the client before passing the {{XAPO}} to {{XAudio2}}.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + <dd> <p> Effect-specific initialization parameters, may be {{NULL}} if <em>DataByteSize</em> is 0.</p> </dd> + + + <dd> <p> Size of <em>pData</em> in bytes, may be 0 if <em>pData</em> is {{NULL}}.</p> </dd> + + + + + <p>Resets variables dependent on frame history.</p> + <p>Constant and locked parameters such as the input and output formats remain unchanged. Variables set by <strong>{{IXAPOParameters::SetParameters}}</strong> remain unchanged. </p><p>For example, an effect with delay should zero out its delay line during this method, but should not reallocate anything as the {{XAPO}} remains locked with a constant input and output configuration. </p><p>{{XAudio2}} only calls this method if the {{XAPO}} is locked. </p><p>This method is called from the realtime thread and should not block. +</p> + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} to lock the input and output configurations of an {{XAPO}} allowing it to do any final initialization before <strong>Process</strong> is called on the realtime thread.</p> + <p>Once locked, the input and output configuration and any other locked parameters remain constant until <strong>UnLockForProcess</strong> is called. After an {{XAPO}} is locked, further calls to <strong>LockForProcess</strong> have no effect until the <strong>UnLockForProcess</strong> function is called. </p><p>An {{XAPO}} indicates what specific formats it supports through its implementation of the <strong>IsInputFormatSupported</strong> and <strong>IsOutputFormatSupported</strong> methods. An {{XAPO}} should assert the input and output configurations are supported and that any required effect-specific initialization is complete. The <strong>IsInputFormatSupported</strong>, <strong>IsOutputFormatSupported</strong>, and <strong>Initialize</strong> methods should be used as necessary before calling this method. </p><p>Because <strong>Process</strong> is a nonblocking method, all internal memory buffers required for <strong>Process</strong> should be allocated in <strong>LockForProcess</strong>. </p><p> <strong>Process</strong> is never called before <strong>LockForProcess</strong> returns successfully. </p><p><strong>LockForProcess</strong> is called directly by {{XAudio2}} and should not be called by the client code. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Deallocates variables that were allocated with the <strong>LockForProcess</strong> method.</p> + <p>Unlocking an {{XAPO}} instance allows it to be reused with different input and output formats.</p> + <p>This method does not return a value.</p> + + + + <p>Runs the {{XAPO}}'s digital signal processing ({{DSP}}) code on the given input and output buffers.</p> + <p>Implementations of this function should not block, as the function is called from the realtime audio processing thread. </p><p>All code that could cause a delay, such as format validation and memory allocation, should be put in the <strong>{{IXAPO::LockForProcess}}</strong> method, which is not called from the realtime audio processing thread. </p><p>For in-place processing, the <em>pInputProcessParameters</em> parameter will not necessarily be the same as <em>pOutputProcessParameters</em>. Rather, their <em>pBuffer</em> members will point to the same memory. </p><p>Multiple input and output buffers may be used with in-place {{XAPOs}}, though the input buffer count must equal the output buffer count. For in-place processing when multiple input and output buffers are used, the {{XAPO}} may assume the number of input buffers equals the number of output buffers. </p><p>In addition to writing to the output buffer, as appropriate, an {{XAPO}} is responsible for setting the output stream's buffer flags and valid frame count. </p><p>When <em>IsEnabled</em> is {{FALSE}}, the {{XAPO}} should not apply its normal processing to the given input/output buffers during. It should instead pass data from input to output with as little modification possible. Effects that perform format conversion should continue to do so. Effects must ensure transitions between normal and thru processing do not introduce discontinuities into the signal. </p><p>When writing a <strong>Process</strong> method, it is important to note {{XAudio2}} audio data is interleaved, which means data from each channel is adjacent for a particular sample number. For example, if there was a 4-channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, and so on. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of elements in pInputProcessParameters. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p> Input array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. </p> </dd> + + + <dd> <p>Number of elements in <em>pOutputProcessParameters</em>. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p>Output array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. On input, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the number of frames that the {{XAPO}} should write to the output buffer. On output, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the actual number of frames written.</p> </dd> + + + <dd> <p> {{TRUE}} to process normally; {{FALSE}} to process thru. See Remarks for additional information.</p> </dd> + + + + + <p>Returns the number of input frames required to generate the given number of output frames.</p> + <p>{{XAudio2}} calls this method to determine what size input buffer an {{XAPO}} requires to generate the given number of output frames. This method only needs to be called once while an {{XAPO}} is locked. <strong>CalcInputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of input frames required.</p> + + + <dd> <p> The number of output frames desired. +</p> </dd> + + + + + <p>Returns the number of output frames that will be generated from a given number of input frames.</p> + <p>{{XAudio2}} calls this method to determine how large of an output buffer an {{XAPO}} will require for a certain number of input frames. <strong>CalcOutputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of output frames that will be produced. </p> + + + <dd> <p> The number of input frames. +</p> </dd> + + + + + <p>An optional interface that allows an {{XAPO}} to use effect-specific parameters.</p> + + + + + <p>Sets effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::SetParameters}}</strong> function. The data passed to <strong>SetParameters</strong> can be used to set the state of the {{XAPO}} and control the behavior of the <strong>{{IXAPO::Process}}</strong> function. </p><p><strong>SetParameters</strong> can only be called on the real-time audio processing thread; no synchronization between <strong>SetParameters</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. However, the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> method may be called from any thread as it adds in the required synchronization to deliver a copy (asynchronously) of the parameters to <strong>SetParameters</strong> on the real-time thread; no synchronization between <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Gets the current values for any effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::GetParameters}}</strong> function. The data returned in <em>pParameters</em> can be used to provide information about the current state of the {{XAPO}}. </p><p>Unlike SetParameters, {{XAudio2}} does not call this method on the realtime audio processing thread. Thus, the {{XAPO}} must protect variables shared with <strong>{{IXAPOParameters::SetParameters}}</strong> or <strong>{{IXAPO::Process}}</strong> using appropriate synchronization. The <strong>{{CXAPOParametersBase}}</strong> class is an implementation of <strong>{{IXAPOParameters}}</strong> and its implementation of <strong>GetParameters</strong> efficiently handles this synchronization for the user. </p><p>{{XAudio2}} calls this method from the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p>This method may block and should never be called from the realtime audio processing thread instead get the current parameters from <strong>{{CXAPOParametersBase::BeginProcess}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives an effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Parameters for use with the {{FXEQ}} {{XAPO}}.</p> + <p>Each band ranges from <strong>FrequencyCenterN</strong> - (<strong>BandwidthN</strong> / 2) to <strong>FrequencyCenterN</strong> + (<strong>BandwidthN</strong> / 2). </p> + + + <dd> <p>Center frequency in Hz for band 0. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 0. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 0. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 1. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 1. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}}</p> </dd> + + + <dd> <p>Width of band 1. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + <dd> <p>Center frequency in Hz for band 2. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 2. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 2. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 3. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 3. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 3. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + + + <p>Parameters for use with the {{FXMasteringLimiter}} {{XAPO}}.</p> + + + + + <p>Parameters for use with the {{FXReverb}} {{XAPO}}.</p> + + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface.Value must be between {{FXREVERB_MIN_DIFFUSION}} and {{FXREVERB_MAX_DIFFUSION}}.</p> </dd> + + + <dd> <p>Size of the room. Value must be between {{FXREVERB_MIN_ROOMSIZE}} and {{FXREVERB_MAX_ROOMSIZE}}. Note that physical meaning of RoomSize is subjective and not tied to any particular units. A smaller value will result in reflections reaching the listener more quickly while reflections will take longer with larger values for RoomSize.</p> </dd> + + + + + <p>Initialization parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Use of this structure is optional. The default <strong>MaxDelay</strong> is <strong>{{FXECHO_DEFAULT_DELAY}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this functionality.? + + + + <p>Parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Echo only supports {{FLOAT32}} audio formats.</p> + + + + <p>Creates an instance of the requested {{XAPOFX}} effect.</p> + <p>The created {{XAPO}} will have a reference count of 1. Client code must call <strong>{{IUnknown::Release}}</strong> after passing the {{XAPO}} to {{XAudio2}} to allow {{XAudio2}} to dispose of the {{XAPO}} when it is no longer needed. Use <strong> {{IXAudio2::CreateSourceVoice}}</strong> or <strong>{{IXAudio2Voice::SetEffectChain}}</strong> to pass an {{XAPO}} to {{XAudio2}}. </p><strong>Note</strong>??The DirectX {{SDK}} version of this function doesn't have the <em>pInitData</em> or <em>InitDataByteSize</em> parameters as it only takes the first 2 parameters. To set initial parameters for the {{XAPOFX}} effect that is created with the DirectX {{SDK}} version of this function, you must bind that effect to a voice and use <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. +For info about how to do this, see How to: Use {{XAPOFX}} in {{XAudio2}}.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the current state of the Xbox 360 Controller.</p> + <p>This structure is used by the <strong>{{XINPUT_STATE}}</strong> structure when polling for changes in the state of the controller. </p><p>The specific mapping of button to game function varies depending on the game type. </p><p>The constant {{XINPUT_GAMEPAD_TRIGGER_THRESHOLD}} may be used as the value which <em>bLeftTrigger</em> and <em>bRightTrigger</em> must be greater than to register as pressed. This is optional, but often desirable. Xbox 360 Controller buttons do not manifest crosstalk. +</p> + + + <dd> <p>Bitmask of the device digital buttons, as follows. A set bit indicates that the corresponding button is pressed. </p> <table> <tr><th>Device button</th><th>Bitmask</th></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_UP}}</td><td> 0x0001</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_DOWN}}</td><td> 0x0002</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_LEFT}}</td><td> 0x0004</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_RIGHT}}</td><td> 0x0008</td></tr> <tr><td>{{XINPUT_GAMEPAD_START}}</td><td> 0x0010</td></tr> <tr><td>{{XINPUT_GAMEPAD_BACK}}</td><td> 0x0020</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_THUMB}}</td><td> 0x0040</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_THUMB}}</td><td> 0x0080</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_SHOULDER}}</td><td> 0x0100</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_SHOULDER}}</td><td> 0x0200</td></tr> <tr><td>{{XINPUT_GAMEPAD_A}}</td><td> 0x1000</td></tr> <tr><td>{{XINPUT_GAMEPAD_B}}</td><td> 0x2000</td></tr> <tr><td>{{XINPUT_GAMEPAD_X}}</td><td> 0x4000</td></tr> <tr><td>{{XINPUT_GAMEPAD_Y}}</td><td> 0x8000</td></tr> </table> <p>?</p> <p>Bits that are set but not defined above are reserved, and their state is undefined. </p> </dd> + + + <dd> <p>The current value of the left trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>The current value of the right trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>Left thumbstick x-axis value. Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick. A value of 0 is centered. Negative values signify down or to the left. Positive values signify up or to the right. The constants {{XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE}} or {{XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE}} can be used as a positive and negative value to filter a thumbstick input. +</p> </dd> + + + <dd> <p>Left thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick x-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + + + <p>Represents the state of a controller.</p> + <p>The <em>dwPacketNumber</em> member is incremented only if the status of the controller has changed since the controller was last polled. </p> + + + <dd> <p>State packet number. The packet number indicates whether there have been any changes in the state of the controller. If the <em>dwPacketNumber</em> member is the same in sequentially returned <strong>{{XINPUT_STATE}}</strong> structures, the controller state has not changed.</p> </dd> + + + <dd> <p> <strong>{{XINPUT_GAMEPAD}}</strong> structure containing the current state of an Xbox 360 Controller.</p> </dd> + + + + + <p>Specifies motor speed levels for the vibration function of a controller.</p> + <p>The left motor is the low-frequency rumble motor. The right motor is the high-frequency rumble motor. The two motors are not the same, and they create different vibration effects.</p> + + + <dd> <p>Speed of the left motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + <dd> <p>Speed of the right motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies keystroke data returned by <strong>{{XInputGetKeystroke}}</strong>.</p> + <p>Future devices may return {{HID}} codes and virtual key values that are not supported on current devices, and are currently undefined. Applications should ignore these unexpected values. </p><p>A <em>virtual-key</em> code is a byte value that represents a particular physical key on the keyboard, not the character or characters (possibly none) that the key can be mapped to based on keyboard state. The keyboard state at the time a virtual key is pressed modifies the character reported. For example, {{VK_4}} might represent a "4" or a "$", depending on the state of the {{SHIFT}} key. </p><p>A reported keyboard event includes the virtual key that caused the event, whether the key was pressed or released (or is repeating), and the state of the keyboard at the time of the event. The keyboard state includes information about whether any {{CTRL}}, {{ALT}}, or {{SHIFT}} keys are down. </p><p>If the keyboard event represents an Unicode character (for example, pressing the "A" key), the <em>Unicode</em> member will contain that character. Otherwise, <em>Unicode</em> will contain the value zero. </p><p>The valid virtual-key ({{VK_xxx}}) codes are defined in {{XInput}}.h. In addition to codes that indicate key presses, the following codes indicate controller input. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{VK_PAD_A}}</td><td><strong>A</strong> button?</td></tr> <tr><td>{{VK_PAD_B}}</td><td><strong>B</strong> button?</td></tr> <tr><td>{{VK_PAD_X}}</td><td><strong>X</strong> button?</td></tr> <tr><td>{{VK_PAD_Y}}</td><td><strong>Y</strong> button?</td></tr> <tr><td>{{VK_PAD_RSHOULDER}}</td><td>Right shoulder button?</td></tr> <tr><td>{{VK_PAD_LSHOULDER}}</td><td>Left shoulder button?</td></tr> <tr><td>{{VK_PAD_LTRIGGER}}</td><td>Left trigger?</td></tr> <tr><td>{{VK_PAD_RTRIGGER}}</td><td>Right trigger?</td></tr> <tr><td>{{VK_PAD_DPAD_UP}}</td><td>Directional pad up?</td></tr> <tr><td>{{VK_PAD_DPAD_DOWN}}</td><td>Directional pad down?</td></tr> <tr><td>{{VK_PAD_DPAD_LEFT}}</td><td>Directional pad left?</td></tr> <tr><td>{{VK_PAD_DPAD_RIGHT}}</td><td>Directional pad right?</td></tr> <tr><td>{{VK_PAD_START}}</td><td><strong>{{START}}</strong> button?</td></tr> <tr><td>{{VK_PAD_BACK}}</td><td><strong>{{BACK}}</strong> button?</td></tr> <tr><td>{{VK_PAD_LTHUMB_PRESS}}</td><td>Left thumbstick click?</td></tr> <tr><td>{{VK_PAD_RTHUMB_PRESS}}</td><td>Right thumbstick click?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UP}}</td><td>Left thumbstick up?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWN}}</td><td>Left thumbstick down?</td></tr> <tr><td>{{VK_PAD_LTHUMB_RIGHT}}</td><td>Left thumbstick right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_LEFT}}</td><td>Left thumbstick left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPLEFT}}</td><td>Left thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPRIGHT}}</td><td>Left thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNRIGHT}}</td><td>Left thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNLEFT}}</td><td>Left thumbstick down and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UP}}</td><td>Right thumbstick up?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWN}}</td><td>Right thumbstick down?</td></tr> <tr><td>{{VK_PAD_RTHUMB_RIGHT}}</td><td>Right thumbstick right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_LEFT}}</td><td>Right thumbstick left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPLEFT}}</td><td>Right thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPRIGHT}}</td><td>Right thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNRIGHT}}</td><td>Right thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNLEFT}}</td><td>Right thumbstick down and left?</td></tr> </table><p>?</p> + + + + <p>Retrieves the current state of the specified controller.</p> + <p>When <strong>{{XInputGetState}}</strong> is used to retrieve controller data, the left and right triggers are each reported separately. For legacy reasons, when DirectInput retrieves controller data, the two triggers share the same axis. The legacy behavior is noticeable in the current Game Device Control Panel, which uses DirectInput for controller state.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_STATE}}</strong> structure that receives the current state of the controller.</p> </dd> + + + + + <p>Sends data to a connected controller. This function is used to activate the vibration function of a controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>.</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_VIBRATION}}</strong> structure containing the vibration information to send to the controller.</p> </dd> + + + + + <p>Retrieves the capabilities and features of a connected controller.</p> + <strong>Note</strong>??The legacy {{XINPUT}} 9.1.0 version (included in Windows?Vista and later) always returned a fixed set of capabilities regardless of attached device.? + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value in the range 0?3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers. </p> </dd> + + + <dd> <p>Input flags that identify the controller type. If this value is 0, then the capabilities of all controllers connected to the system are returned. Currently, only one value is supported:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{XINPUT_FLAG_GAMEPAD}}</strong></td><td>Limit query to devices of Xbox 360 Controller type.</td></tr> </table> <p>?</p> <p>Any value of <em>dwflags</em> other than the above or 0 is illegal and will result in an error break when debugging.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_CAPABILITIES}}</strong> structure that receives the controller capabilities.</p> </dd> + + + + + <p>Sets the reporting state of {{XInput}}.</p> + <p>This function is meant to be called when an application gains or loses focus (such as via <strong>{{WM_ACTIVATEAPP}}</strong>). Using this function, you will not have to change the {{XInput}} query loop in your application as neutral data will always be reported if {{XInput}} is disabled. +</p><p>In a controller that supports vibration effects:</p><ul> <li>Passing <strong>{{FALSE}}</strong> will stop any vibration effects currently playing. In this state, calls to <strong>{{XInputSetState}}</strong> will be registered, but not passed to the device.</li> <li>Passing <strong>{{TRUE}}</strong> will pass the last vibration request (even if it is 0) sent to <strong>{{XInputSetState}}</strong> to the device.</li> </ul> + <p>This function does not return a value.</p> + + + <dd> <p>If enable is <strong>{{FALSE}}</strong>, {{XInput}} will only send neutral data in response to <strong>{{XInputGetState}}</strong> (all buttons up, axes centered, and triggers at 0). <strong>{{XInputSetState}}</strong> calls will be registered but not sent to the device. Sending any value other than <strong>{{FALSE}} </strong>will restore reading and writing functionality to normal.</p> </dd> + + + + + <p>Retrieves the sound rendering and sound capture audio device {{IDs}} that are associated with the headset connected to the specified controller.</p> + <p>Callers must allocate the memory for the buffers passed to <strong>{{XInputGetAudioDeviceIds}}</strong>. The resulting strings can be of arbitrary length.</p> + <p>If the function successfully retrieves the device {{IDs}} for render and capture, the return code is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If there is no headset connected to the controller, the function will also retrieve <strong>{{ERROR_SUCCESS}}</strong> with <strong>{{NULL}}</strong> as the values for <em>pRenderDeviceId</em> and <em>pCaptureDeviceId</em>. +</p><p>If the controller port device is not physically connected, the function will return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, it will return a valid Win32 error code. +</p> + + + <dd> <p> Index of the gamer associated with the device.</p> </dd> + + + <dd> <p> Windows Core Audio device {{ID}} string for render (speakers).</p> </dd> + + + <dd> <p> Size, in wide-chars, of the render device {{ID}} string buffer.</p> </dd> + + + <dd> <p>Windows Core Audio device {{ID}} string for capture (microphone).</p> </dd> + + + <dd> <p>Size, in wide-chars, of capture device {{ID}} string buffer.</p> </dd> + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + <p>A multithread interface accesses multithread settings and can only be used if the thread-safe layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D10Device}} Interface</strong> using {{IUnknown::QueryInterface}}.</p> + + + + <p>Enter a device's critical section.</p> + <p>Entering a device's critical section prevents other threads from simultaneously calling that device's methods (if <strong>multithread protection</strong> is set to true), calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>{{ID3D10Multithread::Leave}}</strong> is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>{{ID3D10Multithread::Enter}}</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Turn multithreading on or off.</p> + <p>True if multithreading was turned on prior to calling this method, false otherwise.</p> + + + <dd> <p>True to turn multithreading on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithreading is turned on or not.</p> + <p>Whether or not multithreading is turned on. True means on, false means off.</p> + + + + <p> The +<strong>{{LOCKTYPE}}</strong> enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the +<strong>{{ILockBytes::LockRegion}}</strong> and +<strong>{{IStream::LockRegion}}</strong> methods.</p> + + + + <p> The +<strong>{{STATSTG}}</strong> structure contains statistical data about an open storage, stream, or byte-array object. This structure is used in the +<strong>{{IEnumSTATSTG}}</strong>, +<strong>{{ILockBytes}}</strong>, +<strong>{{IStorage}}</strong>, and +<strong>{{IStream}}</strong> interfaces.</p> + + + + <p> The +<strong>{{ISequentialStream}}</strong> interface supports simplified sequential access to stream objects. The +<strong>{{IStream}}</strong> interface inherits its +<strong>Read</strong> and +<strong>Write</strong> methods from +<strong>{{ISequentialStream}}</strong>.</p> + + + + <p>Reads a specified number of bytes from the stream object into memory starting at the current read/write location within the stream.</p> + + + <dd><p>[in] +Points to the buffer into which the stream is read. If an error occurs, this value is {{NULL}}.</p></dd> + + + <dd><p>[in] +Specifies the number of bytes of data to attempt to read from the stream object.</p></dd> + + + <dd><p>[out] +Pointer to a location where this method writes the actual number of bytes read from the stream object. You can set this reference to {{NULL}} to indicate that you are not interested in this value. In this case, this method does not provide the actual number of bytes read.</p></dd> + + + + + <p>Writes a specified number of bytes into the stream object starting at the current read/write location within the stream.</p> + + + <dd><p>[in] Points to the buffer into which the stream should be written.</p></dd> + + + <dd><p>[in] The number of bytes of data to attempt to write into the stream.</p></dd> + + + <dd><p>[out] Pointer to a location where this method writes the actual number of bytes written to the stream object. The caller can set this reference to {{NULL}}, in which case this method does not provide the actual number of bytes written.</p></dd> + + + + + <p> The +<strong>{{IStream}}</strong> interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.</p><p>The +<strong>{{IStream}}</strong> interface defines methods similar to the {{MS}}-{{DOS}} {{FAT}} file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a {{DOS}} file and a stream object is that in the latter case, streams are opened using an +<strong>{{IStream}}</strong> interface reference rather than a file handle.</p><p>The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.</p><p>Streams can remain open for long periods of time without consuming file-system resources. The <strong>{{IUnknown::Release}}</strong> method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.</p><p>Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous +<strong>{{IMoniker::BindToStorage}}</strong> operation and for receiving asynchronous notifications. See +{{URL}} Monikers for more information. The following table compares the behavior of asynchronous +<strong>{{ISequentialStream::Read}}</strong> and +<strong>{{IStream::Seek}}</strong> calls returned in <strong>{{IBindStatusCallback::OnDataAvailable}}</strong> in these two download models:</p> + + + + <p> The <strong>Seek</strong> method changes the seek reference to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek reference.</p> + <p><strong>{{IStream::Seek}}</strong> changes the seek reference so that subsequent read and write operations can be performed at a different location in the stream object. It is an error to seek before the beginning of the stream. It is not, however, an error to seek past the end of the stream. Seeking past the end of the stream is useful for subsequent write operations, as the stream byte range will be extended to the new seek position immediately before the write is complete.</p><p>You can also use this method to obtain the current value of the seek reference by calling this method with the <em>dwOrigin</em> parameter set to <strong>{{STREAM_SEEK_CUR}}</strong> and the <em>dlibMove</em> parameter set to 0 so that the seek reference is not changed. The current seek reference is returned in the <em>plibNewPosition</em> parameter.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The seek reference was successfully adjusted.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>Indicates that the [out] parameter <em>plibNewPosition</em> points to invalid memory, because <em>plibNewPosition</em> is not read.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The <em>dwOrigin</em> parameter contains an invalid value, or the <em>dlibMove</em> parameter contains a bad offset value. For example, the result of the seek reference is a negative offset value.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>The displacement to be added to the location indicated by the <em>dwOrigin</em> parameter. If <em>dwOrigin</em> is <strong>{{STREAM_SEEK_SET}}</strong>, this is interpreted as an unsigned value rather than a signed value.</p> </dd> + + + <dd> <p>The origin for the displacement specified in <em>dlibMove</em>. The origin can be the beginning of the file (<strong>{{STREAM_SEEK_SET}}</strong>), the current seek reference (<strong>{{STREAM_SEEK_CUR}}</strong>), or the end of the file (<strong>{{STREAM_SEEK_END}}</strong>). For more information about values, see the <strong>{{STREAM_SEEK}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the value of the new seek reference from the beginning of the stream. </p> <p>You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the new seek reference.</p> </dd> + + + + + <p>The <strong>SetSize</strong> method changes the size of the stream object.</p> + <p><strong>{{IStream::SetSize}}</strong> changes the size of the stream object. Call this method to preallocate space for the stream. If the <em>libNewSize</em> parameter is larger than the current stream size, the stream is extended to the indicated size by filling the intervening space with bytes of undefined value. This operation is similar to the +<strong>{{ISequentialStream::Write}}</strong> method if the seek reference is past the current end of the stream.</p><p>If the <em>libNewSize</em> parameter is smaller than the current stream, the stream is truncated to the indicated size.</p><p>The seek reference is not affected by the change in stream size.</p><p>Calling <strong>{{IStream::SetSize}}</strong> can be an effective way to obtain a large chunk of contiguous space.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The size of the stream object was successfully changed.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream size is not changed because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The value of the <em>libNewSize</em> parameter is not supported by the implementation. Not all streams support greater than 2?? bytes. If a stream does not support more than 2?? bytes, the high <strong>{{DWORD}}</strong> data type of <em>libNewSize</em> must be zero. If it is nonzero, the implementation may return {{STG_E_INVALIDFUNCTION}}. In general, {{COM}}-based implementations of the <strong>{{IStream}}</strong> interface do not support streams larger than 2?? bytes.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Specifies the new size, in bytes, of the stream.</p> </dd> + + + + + <p>The <strong>CopyTo</strong> method copies a specified number of bytes from the current seek reference in the stream to the current seek reference in another stream.</p> + <p>The <strong>CopyTo</strong> method copies the specified bytes from one stream to another. It can also be used to copy a stream to itself. The seek reference in each stream instance is adjusted for the number of bytes read or written. This method is equivalent to reading <em>cb</em> bytes into memory using +<strong>{{ISequentialStream::Read}}</strong> and then immediately writing them to the destination stream using +<strong>{{ISequentialStream::Write}}</strong>, although <strong>{{IStream::CopyTo}}</strong> will be more efficient.</p><p>The destination stream can be a clone of the source stream created by calling the +<strong>{{IStream::Clone}}</strong> method.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns an error, you cannot assume that the seek references are valid for either the source or destination. Additionally, the values of <em>pcbRead</em> and <em>pcbWritten</em> are not meaningful even though they are returned.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns successfully, the actual number of bytes read and written are the same.</p><p>To copy the remainder of the source from the current seek reference, specify the maximum large integer value for the <em>cb</em> parameter. If the seek reference is the beginning of the stream, this operation copies the entire stream.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream object was successfully copied.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the data to be copied is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The value of one of the reference parameters is invalid.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream is not copied because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>A reference to the destination stream. The stream pointed to by <em>pstm</em> can be a new stream or a clone of the source stream.</p> </dd> + + + <dd> <p>The number of bytes to copy from the source stream.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes read from the source. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes read.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes written to the destination. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes written.</p> </dd> + + + + + <p>The <strong>Commit</strong> method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, <strong>{{IStream::Commit}}</strong> has no effect other than flushing all memory buffers to the next-level storage object. The {{COM}} compound file implementation of streams does not support opening streams in transacted mode.</p> + <p>The <strong>Commit</strong> method ensures that changes to a stream object opened in transacted mode are reflected in the parent storage. Changes that have been made to the stream since it was opened or last committed are reflected to the parent storage object. If the parent is opened in transacted mode, the parent may revert at a later time, rolling back the changes to this stream object. The compound file implementation does not support the opening of streams in transacted mode, so this method has very little effect other than to flush memory buffers. For more information, see +{{IStream}} - Compound File Implementation.</p><p>If the stream is open in direct mode, this method ensures that any memory buffers have been flushed out to the underlying storage object. This is much like a flush in traditional file systems.</p><p>The <strong>{{IStream::Commit}}</strong> method is useful on a direct mode stream when the implementation of the +<strong>{{IStream}}</strong> interface is a wrapper for underlying file system {{APIs}}. In this case, <strong>{{IStream::Commit}}</strong> would be connected to the file system's flush call.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>Changes to the stream object were successfully committed to the parent level.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The commit operation failed due to lack of space on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Controls how the changes for the stream object are committed. See the +<strong>{{STGC}}</strong> enumeration for a definition of these values.</p> </dd> + + + + + <p>The <strong>Revert</strong> method discards all changes that have been made to a transacted stream since the last +<strong>{{IStream::Commit}}</strong> call. On streams open in direct mode and streams using the {{COM}} compound file implementation of <strong>{{IStream::Revert}}</strong>, this method has no effect.</p> + <p>The <strong>Revert</strong> method discards changes made to a transacted stream since the last commit operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully reverted to its previous version.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> </dl> + + + + + + + + + + <p> The <strong>Stat</strong> method retrieves the +<strong>{{STATSTG}}</strong> structure for this stream.</p> + <p><strong>{{IStream::Stat}}</strong> retrieves a reference to the +<strong>{{STATSTG}}</strong> structure that contains information about this open stream. When this stream is within a structured storage and +<strong>{{IStorage::EnumElements}}</strong> is called, it creates an enumerator object with the +<strong>{{IEnumSTATSTG}}</strong> interface on it, which can be called to enumerate the storages and streams through the +<strong>{{STATSTG}}</strong> structures associated with each of them.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was successfully returned at the specified location.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_ACCESSDENIED}}</strong></dt> <dd> <p>The caller does not have enough permissions for accessing statistics for this storage object.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was not returned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDFLAG}}</strong></dt> <dd> <p>The value for the <em>grfStateFlag</em> parameter is not valid.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>pStatStg</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + + <p> The <strong>Clone</strong> method creates a new stream object with its own seek reference that references the same bytes as the original stream.</p> + <p>The <strong>Clone</strong> method creates a new stream object for accessing the same bytes but using a separate seek reference. The new stream object sees the same data as the source-stream object. Changes written to one object are immediately visible in the other. Range locking is shared between the stream objects.</p><p>The initial setting of the seek reference in the cloned stream instance is the same as the current setting of the seek reference in the original stream at the time of the clone operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully cloned.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The stream was not cloned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>ppStm</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>When successful, reference to the location of an +<strong>{{IStream}}</strong> reference to the new stream object. If an error occurs, this parameter is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> The +<strong>{{STGC}}</strong> enumeration constants specify the conditions for performing the commit operation in the +<strong>{{IStorage::Commit}}</strong> and +<strong>{{IStream::Commit}}</strong> methods.</p> + <p>You can specify <strong>{{STGC_DEFAULT}}</strong> or some combination of <strong>{{STGC_OVERWRITE}}</strong>, <strong>{{STGC_ONLYIFCURRENT}}</strong>, and <strong>{{STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE}}</strong> for normal commit operations. You can specify <strong>{{STGC_CONSOLIDATE}}</strong> with any other {{STGC}} flags.</p><p>Typically, use <strong>{{STGC_ONLYIFCURRENT}}</strong> to protect the storage object in cases where more than one user can edit the object simultaneously.</p> + + + + <p> The +<strong>{{STATFLAG}}</strong> enumeration values indicate whether the method should try to return a name in the <strong>pwcsName</strong> member of the +<strong>{{STATSTG}}</strong> structure. The values are used in the +<strong>{{ILockBytes::Stat}}</strong>, +<strong>{{IStorage::Stat}}</strong>, and +<strong>{{IStream::Stat}}</strong> methods to save memory when the <strong>pwcsName</strong> member is not required.</p> + + + + <p> </p><p>The <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration defines constants that indicate whether an audio stream will run in shared mode or in exclusive mode.</p> + <p>The <strong>{{IAudioClient::Initialize}}</strong> and <strong>{{IAudioClient::IsFormatSupported}}</strong> methods use the constants defined in the <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration.</p><p>In shared mode, the client can share the audio endpoint device with clients that run in other user-mode processes. The audio engine always supports formats for client streams that match the engine's mix format. In addition, the audio engine might support another format if the Windows audio service can insert system effects into the client stream to convert the client format to the mix format.</p><p>In exclusive mode, the Windows audio service attempts to establish a connection in which the client has exclusive access to the audio endpoint device. In this mode, the audio engine inserts no system effects into the local stream to aid in the creation of the connection point. Either the audio device can handle the specified format directly or the method fails.</p><p>For more information about shared-mode and exclusive-mode streams, see User-Mode Audio Components.</p> + + + <dd> <p>The audio stream will run in shared mode. For more information, see Remarks.</p> </dd> + + + <dd> <p>The audio stream will run in exclusive mode. For more information, see Remarks.</p> </dd> + + + + + <p>Specifies the category of an audio stream.</p> + <p>Note that only a subset of the audio stream categories are valid for certain stream types.</p><table> <tr><th>Stream type</th><th>Valid categories</th></tr> <tr><td>Render stream</td><td>All categories are valid.</td></tr> <tr><td>Capture stream</td><td>AudioCategory_Communications, AudioCategory_Speech, AudioCategory_Other</td></tr> <tr><td>Loopback stream</td><td>AudioCategory_Other</td></tr> </table><p>?</p><p>Games should categorize their music streams as <strong>AudioCategory_GameMedia</strong> so that game music mutes automatically if another application plays music in the background. Music or video applications should categorize their streams as <strong>AudioCategory_Media</strong> or <strong>AudioCategory_Movie</strong> so they will take priority over <strong>AudioCategory_GameMedia</strong> streams.</p><p>The values <strong>AudioCategory_ForegroundOnlyMedia</strong> and <strong>AudioCategory_BackgroundCapableMedia</strong> are deprecated. For Windows Store apps, these values will continue to function the same when running on Windows?10 as they did on Windows?8.1. Attempting to use these values in a Universal Windows Platform ({{UWP}}) app, will result in compilation errors and an exception at runtime. Using these values in a Windows desktop application built with the Windows?10 {{SDK}} the will result in a compilation error.</p> + + + <dd> <p>Other audio stream.</p> </dd> + + + <dd> <p>Media that will only stream when the app is in the foreground. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Media that can be streamed when the app is in the background. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Real-time communications, such as {{VOIP}} or chat.</p> </dd> + + + <dd> <p>Alert sounds.</p> </dd> + + + <dd> <p>Sound effects.</p> </dd> + + + <dd> <p>Game sound effects.</p> </dd> + + + <dd> <p>Background audio for games.</p> </dd> + + + <dd> <p>Game chat audio. Similar to <strong>AudioCategory_Communications</strong> except that <strong>AudioCategory_GameChat</strong> will not attenuate other streams.</p> </dd> + + + <dd> <p>Speech.</p> </dd> + + + <dd> <p>Stream that includes audio with dialog.</p> </dd> + + + <dd> <p>Stream that includes audio without dialog.</p> </dd> + + + + + <p> </p><p>The <strong>AudioSessionState</strong> enumeration defines constants that indicate the current state of an audio session.</p> + <p>When a client opens a session by assigning the first stream to the session (by calling the <strong>{{IAudioClient::Initialize}}</strong> method), the initial session state is inactive. The session state changes from inactive to active when a stream in the session begins running (because the client has called the <strong>{{IAudioClient::Start}}</strong> method). The session changes from active to inactive when the client stops the last running stream in the session (by calling the <strong>{{IAudioClient::Stop}}</strong> method). The session state changes to expired when the client destroys the last stream in the session by releasing all references to the stream object.</p><p>The system volume-control program, Sndvol, displays volume controls for both active and inactive sessions. Sndvol stops displaying the volume control for a session when the session state changes to expired. For more information about Sndvol, see Audio Sessions.</p><p>The <strong>{{IAudioSessionControl::GetState}}</strong> and <strong>{{IAudioSessionEvents::OnStateChanged}}</strong> methods use the constants defined in the <strong>AudioSessionState</strong> enumeration.</p><p>For more information about session states, see Audio Sessions.</p> + + + <dd> <p>The audio session is inactive. (It contains at least one stream, but none of the streams in the session is currently running.)</p> </dd> + + + <dd> <p>The audio session is active. (At least one of the streams in the session is running.)</p> </dd> + + + <dd> <p>The audio session has expired. (It contains no streams.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + + + + + + + + + + <p>Status codes that can be returned by {{DXGI}} functions.</p><p></p> + <p>The <strong>{{HRESULT}}</strong> value for each <strong>{{DXGI_STATUS}}</strong> value is determined from this macro that is defined in {{DXGItype}}.h:</p><pre> #define _FACDXGI 0x87a +#define {{MAKE_DXGI_STATUS}}(code) {{MAKE_HRESULT}}(0, _FACDXGI, code) +</pre><p>For example, <strong>{{DXGI_STATUS_OCCLUDED}}</strong> is defined as <strong>0x087A0001</strong>:</p><pre> #define {{DXGI_STATUS_OCCLUDED}} {{MAKE_DXGI_STATUS}}(1) +</pre> + + + + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>{{XAudio2}} constants that specify default parameters, maximum values, and flags.</p><p> </p><p><strong>{{XAudio2}} boundary values</strong></p> + + + + + + + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + + + + + + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>A table of controller subtypes available in {{XInput}}.</p> + + + + + + + + + + + + + + + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + + + + + + + + + + + + + + + + <p>Represents a virtual adapter. This interface extends <strong>Id3d12device2</strong> to support the creation of special-purpose diagnostic heaps in system memory that persist even in the event of a {{GPU}}-fault or device-removed scenario.</p><strong>Note</strong> This interface, introduced in the Windows 10 Fall Creators Update, is the latest version of the <strong>{{ID3D12Device}}</strong> interface. Applications targeting the Windows 10 Fall Creators Update and later should use this interface instead of earlier versions. + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device.</p> + + + + <p>Specifies the type of unit contained in an <strong>{{IMFSample}}</strong> in a {{MFSampleExtension_ForwardedDecodeUnits}} collection.</p> + + + + + + + + <p>Gets the {{ID}} of the process with which the activity is associated.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pPID</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Part of a contract between {{D3D11On12}} diagnostic layers and graphics diagnostics tools. This interface facilitates diagnostics tools to capture information at a lower level than the {{DXGI}} swapchain.</p> + + + + + + + + + + <p>Represents the activity of a process associated with a sensor.</p> + + + + <p>Gets an <strong>{{IMFSensorProcessActivity}}</strong> object representing the current process activity of a sensor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppProcessActivity</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Gets the streaming mode of the sensor process.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pMode</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Gets the count of <strong>{{IMFSensorActivityReport}}</strong> objects that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified device name.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>symbolicName</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The system is out of memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No sensor with the specified symbolic name was found.</p> </td></tr> </table><p> </p> + + + + <p>Represents an activity report for a sensor.</p> + + + + <p>Gets the symbolic link for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor symbolic link is written.</p> </dd> + + + <dd> <p>The character count of the <em>SymbolicLink</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>SymbolicLink</em> string.</p> </dd> + + + + + <p>Interface implemented by the client to receive callbacks when sensor activity reports are available.</p> + <p>Register the callback by passing an implementation of this interface into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Gets a value indicating whether the sensor is currently streaming.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pfStreaming</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a value indicating whether the sensor is currently streaming.</p> </dd> + + + + + <p>Raised by the media pipeline when a new <strong>{{IMFSensorActivitiesReport}}</strong> is available.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the count of <strong>{{IMFSensorProcessActivity}}</strong> objects, representing the current activity of a process associated with the sensor, that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pulCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Provides methods for controlling a sensor activity monitor.</p> + <p>Get an instance of this class by calling <strong>{{MFCreateSensorActivityMonitor}}</strong>. Sensor activity reports are delivered through the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface passed into this method.</p> + + + + <p>Stops the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p> </p> + + + + <p>Gets the time associated with the sensor activity report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pft</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the time associated with the sensor activity report.</p> </dd> + + + + + + + + <p>Gets the friendly name for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor friendly name is written.</p> </dd> + + + <dd> <p>The character count of the <em>FriendlyName</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>FriendlyName</em> string.</p> </dd> + + + + + + + + <p>Provides access to <strong>{{IMFSensorActivityReport}}</strong> objects that describe the current activity of a sensor.</p> + <p>Register to receive sensor activities reports by implementing the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface and passing the implementation into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> </table><p> </p> + + + + <p>Starts the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The sensor activity monitor has already been started.</p> </td></tr> </table><p> </p> + + + + <p>Initializes a new instance of the <strong>{{IMFSensorActivityMonitor}}</strong> interface.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppActivityMonitor</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + + + + + + + + + + + + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows 8. + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows {{XP}} with Service Pack 2 ({{SP2}}) and later.</li> <li>Windows {{XP}} Media Center Edition 2005 with {{KB900325}} (Windows {{XP}} Media Center Edition 2005) and {{KB925766}} (October 2006 Update Rollup for Windows {{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Increments the reference count for an interface on an object. This method should be called for every new copy of a reference to an interface on an object.</p> + <p>Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use <strong>AddRef</strong> to stabilize a copy of an interface reference. It can also be called when the life of a cloned reference must extend beyond the lifetime of the original reference. The cloned reference must be released by calling <strong>{{IUnknown::Release}}</strong>.</p><p>The internal reference counter that <strong>AddRef</strong> maintains should be a 32-bit unsigned integer.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Retrieves references to the supported interfaces on an object.</p><p>This method calls <strong>{{IUnknown::AddRef}}</strong> on the reference it returns.</p> + <p>For any one object, a specific query for the <strong>{{IUnknown}}</strong> interface on any of the object's interfaces must always return the same reference value. This enables a client to determine whether two references point to the same component by calling <strong>QueryInterface</strong> with {{IID_IUnknown}} and comparing the results. It is specifically not the case that queries for interfaces other than {{IUnknown}} (even the same interface through the same reference) must return the same reference value.</p><p>There are four requirements for implementations of <strong>QueryInterface</strong> (In these cases, "must succeed" means "must succeed barring catastrophic failure."):</p><ul> <li> <p>The set of interfaces accessible on an object through <strong>QueryInterface</strong> must be static, not dynamic. This means that if a call to <strong>QueryInterface</strong> for a reference to a specified interface succeeds the first time, it must succeed again, and if it fails the first time, it must fail on all subsequent queries.</p> </li> <li> <p>It must be reflexive — if a client holds a reference to an interface on an object, and queries for that interface, the call must succeed.</p> </li> <li> <p>It must be symmetric — if a client holding a reference to one interface queries successfully for another, a query through the obtained reference for the first interface must succeed.</p> </li> <li> <p>It must be transitive — if a client holding a reference to one interface queries successfully for a second, and through that reference queries successfully for a third interface, a query for the first interface through the reference for the third interface must succeed.</p> </li> </ul> + <p>This method returns {{S_OK}} if the interface is supported, and {{E_NOINTERFACE}} otherwise. If <em>ppvObject</em> is <strong>{{NULL}}</strong>, this method returns {{E_POINTER}}.</p> + + + + <p>Decrements the reference count for an interface on an object.</p> + <p>When the reference count on an object reaches zero, <strong>Release</strong> must cause the interface reference to free itself. When the released reference is the only existing reference to an object (whether the object supports single or multiple interfaces), the implementation must free the object.</p><p>Note that aggregation of objects restricts the ability to recover interface references.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Enables clients to get references to other interfaces on a given object through the <strong>QueryInterface</strong> method, and manage the existence of the object through the <strong>AddRef</strong> and <strong>Release</strong> methods. All other {{COM}} interfaces are inherited, directly or indirectly, from <strong>{{IUnknown}}</strong>. Therefore, the three methods in <strong>{{IUnknown}}</strong> are the first entries in the {{VTable}} for every interface. +</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Describes a sensor profile {{ID}}.</p> + + + <dd> <p>A <strong>Sensor Profile {{GUID}}</strong> that describes the type of sensor profile. </p> </dd> + + + <dd> <p>The index of the sensor profile.</p> </dd> + + + <dd> <p>Not currently used.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/DocumentationCache/net45/DocumentationCache.xml b/Source/DocumentationCache/net45/DocumentationCache.xml new file mode 100644 index 000000000..9c5ad4399 --- /dev/null +++ b/Source/DocumentationCache/net45/DocumentationCache.xml @@ -0,0 +1,76750 @@ + + + + + <p>Type of data contained in an input slot.</p> + <p>Use these values to specify the type of data for a particular input element (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>) of an input-layout object.</p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Determines the fill mode to use when rendering triangles.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Indicates triangles facing a particular direction are not drawn.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p>This enumeration is used in <strong>{{ID3D11Resource::GetType}}</strong>. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>This enumeration is used in <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> to create a depth-stencil view.</p> + + + <dd> <p><em>{{D3D11_DSV_DIMENSION_UNKNOWN}}</em> is not a valid value for <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + + + <p>These flags identify the type of resource that will be viewed as a render target.</p> + <p>This enumeration is used in <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> to create a render-target view.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Unordered-access view options.</p> + <p> This enumeration is used by a unordered access-view description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>). </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the {{CPU}} and/or the graphics processing unit ({{GPU}}).</p> + <p>An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>, and <strong>{{D3D11_BUFFER_DESC}}</strong>.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10/11:</p> <p>In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using {{D3DPOOL}}). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.</p> <p>In Direct3D 10/11, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A resource that requires read and write access by the {{GPU}}. This is likely to be the most common usage choice.</p> </dd> + + + <dd> <p>A resource that can only be read by the {{GPU}}. It cannot be written by the {{GPU}}, and cannot be accessed at all by the {{CPU}}. This type of resource must be initialized when it is created, since it cannot be changed after creation.</p> </dd> + + + <dd> <p>A resource that is accessible by both the {{GPU}} (read only) and the {{CPU}} (write only). A dynamic resource is a good choice for a resource that will be updated by the {{CPU}} at least once per frame. To update a dynamic resource, use a <strong>Map</strong> method.</p> <p>For info about how to use dynamic resources, see How to: Use dynamic resources. </p> </dd> + + + <dd> <p>A resource that supports data transfer (copy) from the {{GPU}} to the {{CPU}}.</p> </dd> + + + + + <p>Identifies how to bind a resource to the pipeline.</p> + <p>In general, binding flags can be combined using a logical {{OR}} (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.</p><p>This enumeration is used by a:</p><ul> <li> <strong>Buffer description</strong> when creating a buffer.</li> <li>Texture description when creating a texture (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong> or <strong>{{D3D11_TEXTURE2D_DESC}}</strong> or <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</li> </ul><p>A shader-resource buffer is {{NOT}} a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the {{D3D11_BIND_SHADER_RESOURCE}} flag and is bound to the pipeline using one of these {{APIs:}} <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>, or <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>. Furthermore, a shader-resource buffer cannot use the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p><strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.? + + + <dd> <p>Bind a buffer as a vertex buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as an index buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as a constant buffer to a shader stage; this flag may {{NOT}} be combined with any other bind flag.</p> </dd> + + + <dd> <p>Bind a buffer or texture to a shader stage; this flag cannot be used with the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + <dd> <p>Bind an output buffer for the stream-output stage.</p> </dd> + + + <dd> <p>Bind a texture as a render target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind a texture as a depth-stencil target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind an unordered access resource.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive output from the decoder {{API}}. The common way to create resources for a decoder output is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive input from the video encoder {{API}}. The common way to create resources for a video encoder is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>Specifies the types of {{CPU}} access allowed for a resource.</p> + <p>This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p>Applications may combine one or more of these flags with a logical {{OR}}. When possible, create resources with no {{CPU}} access flags, as this enables better resource optimization.</p><p>The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags.</p> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + + + <p>Identifies options for resources.</p> + <p> This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p> These flags can be combined by bitwise {{OR}}. </p><p> The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags. </p> + + + <dd> <p> Enables {{MIP}} map generation by using <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> on a texture resource. The resource must be created with the <strong>bind flags</strong> that specify that the resource is a render target and a shader resource. </p> </dd> + + + <dd> <p> Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? <strong>Note</strong>?? Starting with Windows?8, we recommend that you enable resource data sharing between two or more Direct3D devices by using a combination of the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags instead. ? </dd> + + + <dd> <p> Sets a resource to be a cube texture created from a Texture2DArray that contains 6 textures. </p> </dd> + + + <dd> <p>Enables instancing of {{GPU}}-generated content.</p> </dd> + + + <dd> <p> Enables a resource as a byte address buffer. </p> </dd> + + + <dd> <p> Enables a resource as a structured buffer. </p> </dd> + + + <dd> <p> Enables a resource with {{MIP}} map clamping for use with <strong>{{ID3D11DeviceContext::SetResourceMinLOD}}</strong>. </p> </dd> + + + <dd> <p>Enables the resource to be synchronized by using the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}}. The following Direct3D?11 resource creation {{APIs}}, that take <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> parameters, have been extended to support the new flag.</p> <ul> <li> <strong>{{ID3D11Device::CreateTexture1D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture2D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture3D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateBuffer}}</strong> </li> </ul> <p>If you call any of these methods with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag set, the interface returned will support the <strong>{{IDXGIKeyedMutex}}</strong> interface. You can retrieve a reference to the <strong>{{IDXGIKeyedMutex}}</strong> interface from the resource by using <strong>{{IUnknown::QueryInterface}}</strong>. The <strong>{{IDXGIKeyedMutex}}</strong> interface implements the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}} to synchronize access to the surface. The device that creates the surface, and any other device that opens the surface by using <strong>OpenSharedResource</strong>, must call <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> before they issue any rendering commands to the surface. When those devices finish rendering, they must call <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong>. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? </dd> + + + <dd> <p> Enables a resource compatible with {{GDI}}. You must set the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag on surfaces that you use with {{GDI}}. Setting the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag allows {{GDI}} rendering on the surface via <strong>{{IDXGISurface1::GetDC}}</strong>. </p> <p>Consider the following programming tips for using {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} when you create a texture or use that texture in a swap chain:</p> <ul> <li>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li> You must bind the texture as a render target for the output-merger stage. For example, set the {{D3D11_BIND_RENDER_TARGET}} flag in the <strong>BindFlags</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure. </li> <li> You must set the maximum number of {{MIP}} map levels to 1. For example, set the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to 1. </li> <li> You must specify that the texture requires read and write access by the {{GPU}}. For example, set the <strong>Usage</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to {{D3D11_USAGE_DEFAULT}}. </li> <li> <p>You must set the texture format to one of the following types. </p> <ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_TYPELESS}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> </ul> For example, set the <strong>Format</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to one of these types. </li> <li> You cannot use {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} with multisampling. Therefore, set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure to 1. Then, set the <strong>SampleDesc</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to this <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </li> </ul> </dd> + + + <dd> <p>Set this flag to enable the use of {{NT}} {{HANDLE}} values when you create a shared resource. By enabling this flag, you deprecate the use of existing {{HANDLE}} values.</p> <p> When you use this flag, you must combine it with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag by using a bitwise {{OR}} operation. The resulting value specifies a new shared resource type that directs the runtime to use {{NT}} {{HANDLE}} values for the shared resource. The runtime then must confirm that the shared resource works on all hardware at the specified feature level. </p> <p>Without this flag set, the runtime does not strictly validate shared resource parameters (that is, formats, flags, usage, and so on). When the runtime does not validate shared resource parameters, behavior of much of the Direct3D {{API}} might be undefined and might vary from driver to driver. </p> <p><strong>Direct3D 11 and earlier:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource might contain protected content; therefore, the operating system should use the resource only when the driver and hardware support content protection. If the driver and hardware do not support content protection and you try to create a resource with this flag, the resource creation fails.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the operating system restricts access to the shared surface. You can use this flag together with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the driver restricts access to the shared surface. You can use this flag in conjunction with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is guarded. Such a resource is returned by the <strong>{{IDCompositionSurface::BeginDraw}}</strong> (DirectComposition) and <strong>{{ISurfaceImageSourceNative::BeginDraw}}</strong> (Windows Runtime) {{APIs}}. For these {{APIs}}, you provide a region of interest ({{ROI}}) on a surface to update. This surface isn't compatible with multiple render targets ({{MRT}}).</p> <p>A guarded resource automatically restricts all writes to the region that is related to one of the preceding {{APIs}}. Additionally, the resource enforces access to the {{ROI}} with these restrictions:</p> <ul> <li> Copy operations from the resource by using <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> are restricted to only copy from the {{ROI}}. </li> <li>When a guarded resource is set as a render target, it must be the only target.</li> </ul> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tile pool.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tiled resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource should be created such that it will be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li> This flag cannot be used with the following <strong>{{D3D11_USAGE}}</strong> values:<ul> <li><strong>{{D3D11_USAGE_DYNAMIC}}</strong></li> <li><strong>{{D3D11_USAGE_STAGING}}</strong></li> </ul> </li> <li> This flag cannot be used with the following <strong>{{D3D11_BIND_FLAG}}</strong> values.<ul> <li><strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong></li> <li><strong>{{D3D11_BIND_INDEX_BUFFER}}</strong></li> </ul> </li> <li>No {{CPU}} access flags can be specified.</li> </ul> <strong>Note</strong>??<p>Creating a texture using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection.</p> ? <p><strong>Note</strong>?? This enumeration value is supported starting with Windows?10. </p> </dd> + + + + + <p>Identifies a resource to be accessed for reading and writing by the {{CPU}}. Applications may combine one or more of these flags.</p> + <p>This enumeration is used in <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>These remarks are divided into the following topics:</p><p> </p><ul> <li>{{Meaning}}</li> <li>{{Common}}</li> </ul> + + + <dd> <p>Resource is mapped for reading. The resource must have been created with read access (see <strong>{{D3D11_CPU_ACCESS_READ}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for reading and writing. The resource must have been created with read and write access (see <strong>{{D3D11_CPU_ACCESS_READ}} and {{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access and dynamic usage (See <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong> and <strong>{{D3D11_USAGE_DYNAMIC}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Cannot be used on a resource created with the <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + + + <p>Specifies how the {{CPU}} should respond when an application calls the <strong>{{ID3D11DeviceContext::Map}}</strong> method on a resource that is being used by the {{GPU}}.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>{{D3D11_MAP_FLAG_DO_NOT_WAIT}} cannot be used with <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong> or <strong>{{D3D11_MAP_WRITE_NOOVERWRITE}}</strong>.</p> + + + + <p>Option(s) for raising an error to a non-continuable exception.</p> + <p>These flags are used by <strong>{{ID3D11Device::GetExceptionMode}}</strong> and <strong>{{ID3D11Device::SetExceptionMode}}</strong>. Use 0 to indicate no flags; multiple flags can be logically {{OR}}'ed together.</p> + + + <dd> <p>Raise an internal driver error to a non-continuable exception.</p> </dd> + + + + + <p> Specifies the parts of the depth stencil to clear. </p> + <p> These flags are used when calling <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong>; the flags can be combined with a bitwise {{OR}}. </p> + + + <dd> <p>Clear the depth buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + <dd> <p>Clear the stencil buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + + + <p>Comparison options.</p> + <p>A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for a depth-stencil buffer (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>), depth-stencil operations (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>), or sampler state (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identify the portion of a depth-stencil buffer for writing depth data.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>The stencil operations that can be performed during depth-stencil testing.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Blend factors, which modulate values for the pixel shader and render target.</p> + <p>Blend operations are specified in a <strong>blend description</strong>.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>{{RGB}} or alpha blending operation.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>blend description</strong>. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identify which components of each pixel of a render target are writable during blending.</p> + <p>These flags can be combined with a bitwise {{OR}}.</p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>The different faces of a cube texture.</p> + + + <dd> <p>Positive X face.</p> </dd> + + + <dd> <p>Negative X face.</p> </dd> + + + <dd> <p>Positive Y face.</p> </dd> + + + <dd> <p>Negative Y face.</p> </dd> + + + <dd> <p>Positive Z face.</p> </dd> + + + <dd> <p>Negative Z face.</p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p>This enumeration is used by <strong>{{D3D11_BUFFEREX_SRV}}</strong> </p> + + + <dd> <p>View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Depth-stencil view options.</p> + <p>This enumeration is used by <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>.</p><p>Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have a read/write conflicts between separate views.</p> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + + + <dd> <p>Resource contains raw, unstructured data. Requires the {{UAV}} format to be {{DXGI_FORMAT_R32_TYPELESS}}. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>Allow data to be appended to the end of the buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> flag must also be used for any view that will be used as a AppendStructuredBuffer or a ConsumeStructuredBuffer. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + <dd> <p>Adds a counter to the unordered-access-view buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> can only be used on a {{UAV}} that is a {{RWStructuredBuffer}} and it enables the functionality needed for the <strong>IncrementCounter</strong> and <strong>DecrementCounter</strong> methods in {{HLSL}}. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + + + <p>Filtering options during texture sampling.</p> + <strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>{{HLSL}} texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td>sample</td><td>samplecmp or samplecmplevelzero</td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following {{DXGI}} formats: {{R32_FLOAT_X8X24_TYPELESS}}, {{R32_FLOAT}}, {{R24_UNORM_X8_TYPELESS}}, {{R16_UNORM}}.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Types of magnification or minification sampler filters.</p> + + + <dd> <p>Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture. </p> </dd> + + + <dd> <p>Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p> Specifies the type of sampler filter reduction. </p> + <p> This enum is used by the <strong>{{D3D11_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates standard (default) filter reduction. </p> </dd> + + + <dd> <p> Indicates a comparison filter reduction. </p> </dd> + + + <dd> <p> Indicates minimum filter reduction. </p> </dd> + + + <dd> <p> Indicates maximum filter reduction. </p> </dd> + + + + + <p>Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.</p> + + + <dd> <p>Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times.</p> </dd> + + + <dd> <p>Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.</p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D11_SAMPLER_DESC}}</strong> or {{HLSL}} code.</p> </dd> + + + <dd> <p>Similar to {{D3D11_TEXTURE_ADDRESS_MIRROR}} and {{D3D11_TEXTURE_ADDRESS_CLAMP}}. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.</p> </dd> + + + + + <p>Which resources are supported for a given format and given device (see <strong>{{ID3D11Device::CheckFormatSupport}}</strong> and <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>).</p> + + + + <p> Unordered resource support options for a compute shader resource (see <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>). </p> + + + + <p>Optional flags that control the behavior of <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + + + + <p>Query types.</p> + <p> Create a query with <strong>{{ID3D11Device::CreateQuery}}</strong>. </p> + + + <dd> <p> Determines whether or not the {{GPU}} is finished processing commands. When the {{GPU}} is finished processing commands <strong>{{ID3D11DeviceContext::GetData}}</strong> will return {{S_OK}}, and pData will point to a {{BOOL}} with a value of <strong>{{TRUE}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Get the number of samples that passed the depth and stencil tests in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. If a depth or stencil test is disabled, then each of those tests will be counted as a pass. </p> </dd> + + + <dd> <p> Get a timestamp value where <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. This kind of query is only useful if two timestamp queries are done in the middle of a {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Determines whether or not a {{D3D11_QUERY_TIMESTAMP}} is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. This type of query should only be invoked once per frame or less. </p> </dd> + + + <dd> <p> Get pipeline statistics, such as the number of pixel shader invocations in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong>. </p> </dd> + + + <dd> <p> Similar to {{D3D11_QUERY_OCCLUSION}}, except <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} indicating whether or not any samples passed the depth and stencil tests - <strong>{{TRUE}}</strong> meaning at least one passed, <strong>{{FALSE}}</strong> meaning none passed. </p> </dd> + + + <dd> <p> Get streaming output statistics, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not any of the streaming output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 0, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 0 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 1, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 1 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 2, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 2 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 3, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 3 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + + + <p>Flags that describe miscellaneous query behavior.</p> + <p>This flag is part of a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> + + + <dd> <p>Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via <strong>{{ID3D11DeviceContext::GetData}}</strong> when using this flag.</p> </dd> + + + + + <p>Options for performance counters.</p> + <p>Independent hardware vendors may define their own set of performance counters for their devices, by giving the enumeration value a number that is greater than the value for {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}.</p><p>This enumeration is used by <strong>{{D3D11_COUNTER_DESC}}</strong> and <strong>{{D3D11_COUNTER_INFO}}</strong>.</p> + + + <dd> <p>Define a performance counter that is dependent on the hardware device.</p> </dd> + + + + + <p>Data type of a performance counter.</p> + <p>These flags are an output parameter in <strong>{{ID3D11Device::CheckCounter}}</strong>.</p> + + + <dd> <p>32-bit floating point.</p> </dd> + + + <dd> <p>16-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>64-bit unsigned integer.</p> </dd> + + + + + <p>Specifies a multi-sample pattern type.</p> + <p>An app calls <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> to get the number of quality levels available during multisampling. A 0 quality level means the hardware does not support multisampling for the particular format. If the number of quality levels is greater than 0 and the hardware supports the fixed sample patterns for the sample count, the app can request the fixed patterns by specifying quality level as either <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> or <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong>. The app can call <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to check for support of the standard fixed patterns. If the hardware only supports the fixed patterns but no additional vendor-specific patterns, the runtime can report the number of quality levels as 1, and the hardware can pretend 0 quality level behaves the same as quality level equal to {{D3D11_STANDARD_MULTISAMPLE_PATTERN}}.</p><p>The runtime defines the following standard sample patterns for 1(trivial), 2, 4, 8, and 16 sample counts. Hardware must support 1, 4, and 8 sample counts. Hardware vendors can expose more sample counts beyond these. However, if vendors support 2, 4(required), 8(required), or 16, they must also support the corresponding standard pattern or center pattern for each of those sample counts.</p><p></p><p></p><p></p> + + + <dd> <p>Pre-defined multi-sample patterns required for Direct3D?11 and Direct3D?10.1 hardware.</p> </dd> + + + <dd> <p>Pattern where all of the samples are located at the pixel center.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Direct3D 11 feature options.</p> + <p> This enumeration is used when querying a driver about support for these features by calling <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. Each value in this enumeration has a corresponding data structure that is required to be passed to the <em>pFeatureSupportData</em> parameter of <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. </p> + + + <dd> <p> The driver supports multithreading. To see an example of testing a driver for multithread support, see How To: Check for Driver Support. Refer to <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong>.</p> </dd> + + + <dd> <p>Supports the use of the double-precision shaders in {{HLSL}}. Refer to <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT2}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT2}}</strong>.</p> </dd> + + + <dd> <p>Supports compute shaders and raw and structured buffers. Refer to <strong>{{D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}}</strong>.</p> </dd> + + + <dd> <p>Supports Direct3D 11.1 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports specific adapter architecture. Refer to <strong>{{D3D11_FEATURE_DATA_ARCHITECTURE_INFO}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports minimum precision of shaders. For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision. Refer to <strong>{{D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 shadowing feature. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 instancing options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 marker options. Refer to <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options, which includes the Direct3D?9 shadowing feature and instancing support. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D 11.3 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.3.</p> </dd> + + + <dd> <p> Supports Direct3D 11.4 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + <dd> <p> Supports {{GPU}} virtual addresses. Refer to <strong>{{D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports a single boolean for {{NV12}} shared textures. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS4}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Values that specify minimum precision levels at shader stages.</p> + + + <dd> <p>Minimum precision level is 10-bit.</p> </dd> + + + <dd> <p>Minimum precision level is 16-bit.</p> </dd> + + + + + <p>Indicates the tier level at which tiled resources are supported.</p> + + + <dd> <p>Tiled resources are not supported.</p> </dd> + + + <dd> <p> Tier_1 tiled resources are supported.</p> <p> The device supports calls to <strong>CreateTexture2D</strong> and so on with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. </p> <p> The device supports calls to <strong>CreateBuffer</strong> with the <strong>{{D3D11_RESOURCE_MISC_TILE_POOL}}</strong> flag. </p> <p> If you access tiles (read or write) that are <strong>{{NULL}}</strong>-mapped, you get undefined behavior, which includes device-removed. Apps can map all tiles to a single "default" tile to avoid this condition. </p> </dd> + + + <dd> <p> Tier_2 tiled resources are supported. </p> <p> Superset of Tier_1 functionality, which includes this additional support: </p> <ul> <li> On Tier_1, if the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. On Tier_2, this guarantee is expanded to include mipmap levels whose size is at least one standard tile shape. For more info, see <strong>{{D3D11_PACKED_MIP_DESC}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> </dd> + + + <dd> <p> Tier_3 tiled resources are supported. </p> <p> Superset of Tier_2 functionality, Tier 3 is essentially Tier 2 but with the additional support of Texture3D for Tiled Resources.</p> </dd> + + + + + <p>Specifies if the hardware and driver support conservative rasterization and at what tier level.</p> + + + <dd> <p>Conservative rasterization isn't supported.</p> </dd> + + + <dd> <p>Tier_1 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_2 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_3 conservative rasterization is supported.</p> </dd> + + + + + <p>Describes the level of support for shader caching in the current graphics driver.</p> + <p>This enum is used by the <strong>{{D3D_FEATURE_DATA_SHADER_CACHE}}</strong> structure.</p> + + + <dd> <p>Indicates that the driver does not support shader caching.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders in memory during the current run of the application.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders on disk to accelerate future runs of the application.</p> </dd> + + + + + <p>Specifies a type of compressed buffer for decoding.</p> + + + <dd> <p>Picture decoding parameter buffer. +</p> </dd> + + + <dd> <p>Macroblock control command buffer. +</p> </dd> + + + <dd> <p>Residual difference block data buffer. +</p> </dd> + + + <dd> <p>Deblocking filter control command buffer. +</p> </dd> + + + <dd> <p>Inverse quantization matrix buffer. +</p> </dd> + + + <dd> <p>Slice-control buffer. +</p> </dd> + + + <dd> <p>Bitstream data buffer. +</p> </dd> + + + <dd> <p>Motion vector buffer. +</p> </dd> + + + <dd> <p>Film grain synthesis data buffer. +</p> </dd> + + + + + <p>Specifies how a video format can be used for video processing.</p> + + + <dd> <p>The format can be used as the input to the video processor.</p> </dd> + + + <dd> <p>The format can be used as the output from the video processor.</p> </dd> + + + + + <p>Defines video processing capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor can blend video content in linear color space. Most video content is gamma corrected, resulting in nonlinear values. This capability flag means that the video processor converts colors to linear space before blending, which produces better results.</p> </dd> + + + <dd> <p>The video processor supports the xvYCC color space for {{YCbCr}} data. </p> </dd> + + + <dd> <p>The video processor can perform range conversion when the input and output are both {{RGB}} but use different color ranges (0-255 or 16-235, for 8-bit {{RGB}}). </p> </dd> + + + <dd> <p>The video processor can apply a matrix conversion to {{YCbCr}} values when the input and output are both {{YCbCr}}. For example, the driver can convert colors from {{BT}}.601 to {{BT}}.709. </p> </dd> + + + <dd> <p>The video processor supports {{YUV}} nominal range . </p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines features that a Microsoft Direct3D?11 video processor can support. </p> + + + <dd> <p>The video processor can set alpha values on the output pixels. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> </dd> + + + <dd> <p>The video processor can downsample the video output. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong>.</p> </dd> + + + <dd> <p>The video processor can perform luma keying. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamLumaKey}}</strong>.</p> </dd> + + + <dd> <p>The video processor can apply alpha values from color palette entries. </p> </dd> + + + <dd> <p>The driver does not support full video processing capabilities. If this capability flag is set, the video processor has the following limitations:</p> <ul> <li>A maximum of two streams are supported:<ul> <li>The first stream must be either {{NV12}} or {{YUY2}}.</li> <li>The second stream must be {{AYUV}}, {{AI44}}, or {{IA44}}.</li> </ul> </li> <li>Image adjustment (proc amp) controls are applied to the entire video processing blit, rather than per stream.</li> <li>Support for per-stream planar alpha is not reliable. (Per-pixel alpha is supported, however.)</li> </ul> </dd> + + + <dd> <p>The video processor can support 3D stereo video. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong>.</p> <p>All drivers setting this caps must support the following stereo formats: <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL}}</strong>, <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL}}</strong>, and <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>.</p> </dd> + + + <dd> <p>The driver can rotate the input data either 90, 180, or 270 degrees clockwise as part of the video processing operation.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamAlpha</strong> call.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamPixelAspectRatio</strong> call.</p> </dd> + + + + + <p>Defines image filter capabilities for a Microsoft Direct3D?11 video processor.</p> + <p>These capability flags indicate support for the image filters defined by the <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> enumeration. To apply a particular filter, call the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamFilter}}</strong> method.</p> + + + <dd> <p>The video processor can adjust the brightness level. </p> </dd> + + + <dd> <p>The video processor can adjust the contrast level. </p> </dd> + + + <dd> <p>The video processor can adjust hue. </p> </dd> + + + <dd> <p>The video processor can adjust the saturation level. </p> </dd> + + + <dd> <p>The video processor can perform noise reduction. </p> </dd> + + + <dd> <p>The video processor can perform edge enhancement. </p> </dd> + + + <dd> <p>The video processor can perform anamorphic scaling. Anamorphic scaling can be used to stretch 4:3 content to a widescreen 16:9 aspect ratio. </p> </dd> + + + <dd> <p>For stereo 3D video, the video processor can adjust the offset between the left and right views, allowing the user to reduce potential eye strain.</p> </dd> + + + + + <p>Defines capabilities related to input formats for a Microsoft Direct3D?11 video processor.</p> + <p>These flags define video processing capabilities that usually are not needed, and that video devices are therefore not required to support.</p><p> The first three flags relate to {{RGB}} support for functions that are normally applied to {{YCbCr}} video: deinterlacing, color adjustment, and luma keying. A device that supports these functions for {{YCbCr}} is not required to support them for {{RGB}} input. Supporting {{RGB}} input for these functions is an additional capability, reflected by these constants. Note that the driver might convert the input to another color space, perform the indicated function, and then convert the result back to {{RGB}}. </p><p>Similarly, a device that supports deinterlacing is not required to support deinterlacing of palettized formats. This capability is indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED}}</strong> flag.</p> + + + <dd> <p>The video processor can deinterlace an input stream that contains interlaced {{RGB}} video. </p> </dd> + + + <dd> <p>The video processor can perform color adjustment on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can perform luma keying on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can deinterlace input streams with palettized color formats.</p> </dd> + + + + + <p>Specifies the automatic image processing capabilities of the video processor.</p> + + + <dd> <p>Denoise.</p> </dd> + + + <dd> <p>Deringing.</p> </dd> + + + <dd> <p>Edge enhancement.</p> </dd> + + + <dd> <p>Color correction.</p> </dd> + + + <dd> <p>Flesh-tone mapping.</p> </dd> + + + <dd> <p>Image stabilization.</p> </dd> + + + <dd> <p>Enhanced image resolution.</p> </dd> + + + <dd> <p>Anamorphic scaling.</p> </dd> + + + + + <p>Defines stereo 3D capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD}}</strong> format.</p> </dd> + + + <dd> <p>The video processor can flip one or both views. For more information, see <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong>.</p> </dd> + + + + + <p>Specifies video processing capabilities that relate to deinterlacing, inverse telecine ({{IVTC}}), and frame-rate conversion.</p> + + + <dd> <p>The video processor can perform blend deinterlacing. </p> <p>In blend deinterlacing, the two fields from an interlaced frame are blended into a single progressive frame. A video processor uses blend deinterlacing when it deinterlaces at half rate, as when converting 60i to 30p. Blend deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform bob deinterlacing.</p> <p>In bob deinterlacing, missing field lines are interpolated from the lines above and below. Bob deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform adaptive deinterlacing.</p> <p>Adaptive deinterlacing uses spatial or temporal interpolation, and switches between the two on a field-by-field basis, depending on the amount of motion. If the video processor does not receive enough reference frames to perform adaptive deinterlacing, it falls back to bob deinterlacing.</p> </dd> + + + <dd> <p>The video processor can perform motion-compensated deinterlacing. </p> <p>Motion-compensated deinterlacing uses motion vectors to recreate missing lines. If the video processor does not receive enough reference frames to perform motion-compensated deinterlacing, it falls back to bob deinterlacing. </p> </dd> + + + <dd> <p>The video processor can perform inverse telecine ({{IVTC}}). </p> <p>If the video processor supports this capability, the <strong>{{ITelecineCaps}}</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure specifies which {{IVTC}} modes are supported. </p> </dd> + + + <dd> <p>The video processor can convert the frame rate by interpolating frames. </p> </dd> + + + + + <p>Specifies the inverse telecine ({{IVTC}}) capabilities of a video processor. </p> + + + <dd> <p>The video processor can reverse 3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:3:3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 3:2:3:2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 5:5 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 6:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 8:7 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse other telecine modes not listed here.</p> </dd> + + + + + <p>Contains flags that describe content-protection capabilities.</p> + + + <dd> <p>The content protection is implemented in software by the driver.</p> </dd> + + + <dd> <p>The content protection is implemented in hardware by the {{GPU}}. +</p> </dd> + + + <dd> <p>Content protection is always applied to a protected surface, regardless of whether the application explicitly enables protection.</p> </dd> + + + <dd> <p>The driver can use partially encrypted buffers. If this capability is not present, the entire buffer must be either encrypted or clear.</p> </dd> + + + <dd> <p>The driver can encrypt data using a separate content key that is encrypted using the session key.</p> </dd> + + + <dd> <p>The driver can refresh the session key without renegotiating the key.</p> </dd> + + + <dd> <p>The driver can read back encrypted data from a protected surface. For more information, see <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong>.</p> </dd> + + + <dd> <p>The driver requires a separate key to read encrypted data from a protected surface.</p> </dd> + + + <dd> <p>If the encryption type is <strong>{{D3DCRYPTOTYPE_AES128_CTR}}</strong>, the application must use a sequential count in the <strong>{{D3D11_AES_CTR_IV}}</strong> structure.</p> </dd> + + + <dd> <p>The driver supports encrypted slice data, but does not support any other encrypted data in the compressed buffer. The caller should not encrypt any data within the buffer other than the slice data.</p> <strong>Note</strong>??The driver should only report this flag for the specific profiles that have this limitation. ? </dd> + + + <dd> <p>The driver can copy encrypted data from one resource to another, decrypting the data as part of the process.</p> </dd> + + + <dd> <p>The hardware supports the protection of specific resources. This means that:</p> <ul> <li>The contents of a protected allocation can never be read by the {{CPU}}.</li> <li>The hardware can ensure a protected resource cannot be copied to an unprotected resource.</li> </ul> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Physical pages of a protected resource can be evicted and potentially paged to disk in low memory conditions without losing the contents of the resource when paged back in. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The hardware supports an automatic teardown mechanism that could trigger hardware keys or protected content to become lost in some conditions. The application can register to be notified when these events occur.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The secure environment is tightly coupled with the {{GPU}} and an <strong>{{ID3D11CryptoSession}}</strong> should be used for communication between the user mode {{DRM}} component and the secure execution environment.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + + + <p>Identifies a video processor filter.</p> + + + <dd> <p>Brightness filter.</p> </dd> + + + <dd> <p>Contrast filter.</p> </dd> + + + <dd> <p>Hue filter.</p> </dd> + + + <dd> <p>Saturation filter.</p> </dd> + + + <dd> <p>Noise reduction filter.</p> </dd> + + + <dd> <p>Edge enhancement filter.</p> </dd> + + + <dd> <p>Anamorphic scaling filter.</p> </dd> + + + <dd> <p>Stereo adjustment filter. When stereo 3D video is enabled, this filter adjusts the offset between the left and right views, allowing the user to reduce potential eye strain. </p> <p>The filter value indicates the amount by which the left and right views are adjusted. A positive value shifts the images away from each other: the left image toward the left, and the right image toward the right. A negative value shifts the images in the opposite directions, closer to each other.</p> </dd> + + + + + <p>Describes how a video stream is interlaced.</p> + + + <dd> <p>Frames are progressive.</p> </dd> + + + <dd> <p>Frames are interlaced. The top field of each frame is displayed first. </p> </dd> + + + <dd> <p>Frame are interlaced. The bottom field of each frame is displayed first.</p> </dd> + + + + + <p>Specifies the intended use for a video processor.</p> + + + <dd> <p>Normal video playback. The graphics driver should expose a set of capabilities that are appropriate for real-time video playback. </p> </dd> + + + <dd> <p>Optimal speed. The graphics driver should expose a minimal set of capabilities that are optimized for performance. </p> <p>Use this setting if you want better performance and can accept some reduction in video quality. For example, you might use this setting in power-saving mode or to play video thumbnails. </p> </dd> + + + <dd> <p>Optimal quality. The grahics driver should expose its maximum set of capabilities.</p> <p>Specify this setting to get the best video quality possible. It is appropriate for tasks such as video editing, when quality is more important than speed. It is not appropriate for real-time playback. </p> </dd> + + + + + <p>Specifies values for the luminance range of {{YUV}} data.</p> + + + <dd> <p>Driver defaults are used, which should be Studio luminance range [16-235],</p> </dd> + + + <dd> <p>Studio luminance range [16-235]</p> </dd> + + + <dd> <p>Full luminance range [0-255]</p> </dd> + + + + + <p>Specifies the alpha fill mode for video processing.</p> + + + <dd> <p>Alpha values inside the target rectangle are set to opaque. </p> </dd> + + + <dd> <p>Alpha values inside the target rectangle are set to the alpha value specified in the background color. To set the background color, call the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor}}</strong> method.</p> </dd> + + + <dd> <p>Existing alpha values remain unchanged in the output surface.</p> </dd> + + + <dd> <p>Alpha values are taken from an input stream, scaled, and copied to the corresponding destination rectangle for that stream. The input stream is specified in the <em>StreamIndex</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong> method. </p> <p>If the input stream does not have alpha data, the video processor sets the alpha values in the target rectangle to opaque. If the input stream is disabled or the source rectangle is empty, the alpha values in the target rectangle are not modified.</p> </dd> + + + + + <p>Specifies the rate at which the video processor produces output frames from an input stream.</p> + + + <dd> <p>The output is the normal frame rate. </p> </dd> + + + <dd> <p>The output is half the frame rate. </p> </dd> + + + <dd> <p>The output is a custom frame rate.</p> </dd> + + + + + <p>Specifies the layout in memory of a stereo 3D video frame.</p> + <p>This enumeration designates the two stereo views as "frame 0" and "frame 1". The <em>LeftViewFrame0</em> parameter of the <strong>VideoProcessorSetStreamStereoFormat</strong> method specifies which view is the left view, and which is the right view.</p><p>For packed formats, if the source rectangle clips part of the surface, the driver interprets the rectangle in logical coordinates relative to the stereo view, rather than absolute pixel coordinates. The result is that frame 0 and frame 1 are clipped proportionately.</p><p>To query whether the device supports stereo 3D video, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check for the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> flag in the <strong>FeatureCaps</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. If this capability flag is present, it means that the driver supports all of the stereo formats that are not listed as optional. To find out which optional formats are supported, call <strong>GetVideoProcessorCaps</strong> and check the <strong>StereoCaps</strong> member of the structure.</p> + + + <dd> <p>The sample does not contain stereo data. If the stereo format is not specified, this value is the default.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed side-by-side, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed top-to-bottom, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are placed in separate resources or in separate texture array elements within the same resource.</p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>The sample contains non-stereo data. However, the driver should create a left/right output of this sample using a specified offset. The offset is specified in the <em>MonoOffset</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong> method. </p> <p>This format is primarily intended for subtitles and other subpicture data, where the entire sample is presented on the same plane.</p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved rows, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved columns, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed in a checkerboard format, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + + + <p>For stereo 3D video, specifies whether the data in frame 0 or frame 1 is flipped, either horizontally or vertically. </p> + + + <dd> <p>Neither frame is flipped.</p> </dd> + + + <dd> <p>The data in frame 0 is flipped.</p> </dd> + + + <dd> <p>The data in frame 1 is flipped.</p> </dd> + + + + + <p>Specifies the video rotation states.</p> + + + <dd> <p>The video is not rotated.</p> </dd> + + + <dd> <p>The video is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 180 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>Specifies the type of Microsoft Direct3D authenticated channel. </p> + + + <dd> <p>Direct3D?11 channel. This channel provides communication with the Direct3D runtime. </p> </dd> + + + <dd> <p>Software driver channel. This channel provides communication with a driver that implements content protection mechanisms in software.</p> </dd> + + + <dd> <p>Hardware driver channel. This channel provides communication with a driver that implements content protection mechanisms in the {{GPU}} hardware. </p> </dd> + + + + + <p>Specifies the type of process that is identified in the <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT}}</strong> structure.</p> + + + + <p>Specifies the type of I/O bus that is used by the graphics adapter.</p> + + + <dd> <p>Indicates a type of bus other than the types listed here. +</p> </dd> + + + <dd> <p>{{PCI}} bus. +</p> </dd> + + + <dd> <p>{{PCI}}-X bus. +</p> </dd> + + + <dd> <p>{{PCI}} Express bus. +</p> </dd> + + + <dd> <p>Accelerated Graphics Port ({{AGP}}) bus. +</p> </dd> + + + <dd> <p>The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +</p> </dd> + + + <dd> <p>One of the <strong>{{D3D11_BUS_IMPL_MODIFIER_Xxx}}</strong> flags is set. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video decoding output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor input view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + + + <p>Describes parameters that are used to create a device.</p> + <p>Device creation flags are used by <strong>{{D3D11CreateDevice}}</strong> and <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p><p>An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple {{CPU}} cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use <strong>{{D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS}}</strong> to request that the runtime and video driver not create any additional threads that might interfere with the application.</p> + + + <dd> <p>Use this flag if your application will only call methods of Direct3D?11 interfaces from a single thread. By default, the <strong>{{ID3D11Device}}</strong> object is thread-safe. By using this flag, you can increase performance. However, if you use this flag and your application calls methods of Direct3D?11 interfaces from multiple threads, undefined behavior might result.</p> </dd> + + + <dd> <p>Creates a device that supports the debug layer. </p> <p>To use this flag, you must have {{D3D11}}*{{SDKLayers}}.dll installed; otherwise, device creation fails. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> </dd> + + + <dd> <strong>Note</strong>??This flag is not supported in Direct3D?11. ? </dd> + + + <dd> <p>Prevents multiple threads from being created. When this flag is used with a Windows Advanced Rasterization Platform ({{WARP}}) device, no additional threads will be created by {{WARP}} and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.</p> </dd> + + + <dd> <p>Creates a device that supports {{BGRA}} formats (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> and <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>). All 10level9 and higher hardware with {{WDDM}} 1.1+ drivers support {{BGRA}} formats. </p> <strong>Note</strong>??Required for Direct2D interoperability with Direct3D resources. ? </dd> + + + <dd> <p>Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver. </p> <p>To use this flag, you must have {{D3D11_1SDKLayers}}.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> <p>If you use this flag and the current driver does not support shader debugging, device creation fails. Shader debugging requires a driver that is implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2).</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX {{SDK}}. We shipped the last version of the DirectX {{SDK}} in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.</p> <strong>Note</strong>??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app. ? <p><strong>Windows?8.1:??</strong>This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app; instead use <strong>{{ID3D11DeviceContext2::IsAnnotationEnabled}}</strong>. This flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app. </p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Use this flag if the device will produce {{GPU}} workloads that take more than two seconds to complete, and you want the operating system to allow them to successfully finish. If this flag is not set, the operating system performs timeout detection and recovery when it detects a {{GPU}} packet that took more than two seconds to execute. If this flag is set, the operating system allows such a long running packet to execute without resetting the {{GPU}}. We recommend not to set this flag if your device needs to be highly responsive so that the operating system can detect and recover from {{GPU}} timeouts. We recommend to set this flag if your device needs to perform time consuming background tasks such as compute, image recognition, and video encoding to allow such tasks to successfully finish.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Forces the creation of the Direct3D device to fail if the display driver is not implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2). When the display driver is not implemented to {{WDDM}} 1.2, only a Direct3D device that is created with feature level 9.1, 9.2, or 9.3 supports video; therefore, if this flag is set, the runtime creates the Direct3D device only for feature level 9.1, 9.2, or 9.3. We recommend not to specify this flag for applications that want to favor Direct3D capability over video. If feature level 10 and higher is available, the runtime will use that feature level regardless of video support.</p> <p>If this flag is set, device creation on the Basic Render Device ({{BRD}}) will succeed regardless of the {{BRD}}'s missing support for video decode. This is because the Media Foundation video stack operates in software mode on {{BRD}}. In this situation, if you force the video stack to create the Direct3D device twice (create the device once with this flag, next discover {{BRD}}, then again create the device without the flag), you actually degrade performance.</p> <p>If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_NULL}}</strong>, <strong>{{D3D_DRIVER_TYPE_REFERENCE}}</strong>, or <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong>, device creation fails at any feature level because none of the associated drivers provide video capability. If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_WARP}}</strong>, device creation succeeds to allow software fallback for video.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>A description of a single element for the input-assembler stage.</p> + <p>An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling <strong>{{ID3D11Device::CreateInputLayout}}</strong>. For an example, see the "Create the Input-Layout Object" subtopic under the Getting Started with the Input-Assembler Stage topic.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name </p> <pre>matrix</pre> <p>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler (see input slot). Valid values are between 0 and 15, defined in {{D3D11}}.h.</p> </dd> + + + <dd> <p>Optional. Offset (in bytes) between each element. Use {{D3D11_APPEND_ALIGNED_ELEMENT}} for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>Identifies the input data class for a single input slot (see <strong>{{D3D11_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to {{D3D11_INPUT_PER_VERTEX_DATA}}).</p> </dd> + + + + + <p>Description of a vertex element in a vertex buffer in an output slot.</p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline (see <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>). The valid range for <em>OutputSlot</em> is 0 to 3.</p> </dd> + + + + + <p>Defines the dimensions of a viewport.</p> + <p>In all cases, <strong>Width</strong> and <strong>Height</strong> must be &gt;= 0 and <strong>TopLeftX</strong> + <strong>Width</strong> and <strong>TopLeftY</strong> + <strong>Height</strong> must be &lt;= {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p><table> <tr><td> <p>Viewport Sizes and Feature Level Support Differences between Direct3D 11 and Direct3D 10:</p> <p>The range for the minimum and maximum viewport size is dependent on the feature level defined by <strong>{{D3D_FEATURE_LEVEL}}</strong>.</p> <ul> <li>Direct3D 11 supports fractional viewports; the parameter types are floating-point numbers. The feature level, {{D3D_FEATURE_LEVEL_11_0}}, supports ({{D3D11_VIEWPORT_BOUNDS_MIN}}, {{D3D11_VIEWPORT_BOUNDS_MAX}}) values between (-32768, 32,767).</li> <li>Direct3D 10 does not support fractional viewports. The feature levels, {{D3D_FEATURE_LEVEL_10_1}} (or below), supports ({{D3D10_VIEWPORT_BOUNDS_MIN}}, {{D3D10_VIEWPORT_BOUNDS_MAX}}) values between (-16384, 16383).</li> </ul> </td></tr> </table><p>?</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + + + <dd> <p>X position of the left hand side of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Y position of the top of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p> Arguments for draw instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong>. </p> + + + <dd> <p> The number of vertices to draw. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Arguments for draw indexed instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong>. </p> + + + <dd> <p> The number of indices read from the index buffer for each instance. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The location of the first index read by the {{GPU}} from the index buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading a vertex from the vertex buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p>Defines a 3D box.</p> + <p>The following diagram shows a 3D box, where the origin is the left, front, top corner.</p><p></p><p>The values for <strong>right</strong>, <strong>bottom</strong>, and <strong>back</strong> are each one pixel past the end of the pixels that are included in the box region. That is, the values for <strong>left</strong>, <strong>top</strong>, and <strong>front</strong> are included in the box region while the values for right, bottom, and back are excluded from the box region. For example, for a box that is one pixel wide, (right - left) == 1; the box region includes the left pixel but not the right pixel.</p><p>Coordinates of a box are in bytes for buffers and in texels for textures.</p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box.</p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <p> Describes the blend state that you use in a call to <strong>{{ID3D11Device::CreateBlendState}}</strong> to create a blend-state object. </p> + <p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><strong>Note</strong>??<strong>{{D3D11_BLEND_DESC}}</strong> is identical to <strong>{{D3D10_BLEND_DESC1}}</strong>.?<p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p> + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering (see <strong>{{D3D11_FILL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Indicates triangles facing the specified direction are not drawn (see <strong>{{D3D11_CULL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Determines if a triangle is front- or back-facing. If this parameter is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + + + <p>Specifies data for initializing a subresource.</p> + <p>This structure is used in calls to create buffers (<strong>{{ID3D11Device::CreateBuffer}}</strong>) and textures (<strong>{{ID3D11Device::CreateTexture1D}}</strong>, <strong>{{ID3D11Device::CreateTexture2D}}</strong>, and <strong>{{ID3D11Device::CreateTexture3D}}</strong>). If the resource you create does not require a system-memory pitch or a system-memory-slice pitch, you can use those members to pass size information, which might help you when you debug a problem with creating a resource.</p><p>A subresource is a single mipmap-level surface. You can pass an array of subresources to one of the preceding methods to create the resource. A subresource can be 1D, 2D, or 3D. How you set the members of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> depend on whether the subresource is 1D, 2D, or 3D.</p><p></p><dl> <dt>1D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the length of the 1D surface in bytes. <strong>pSysMem</strong> points to the start of the 1D surface. You don't need to set <strong>SysMemSlicePitch</strong>. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + (x * BytesPerPixel)</pre> </dd> <dt>2D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the size of the entire 2D surface in bytes. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> <dt>3D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the distance between any two adjacent 2D slices of the 3D surface. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemSlicePitch*d + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> </dl><p>The x, y, and d values are 0-based indices and <strong>BytesPerPixel</strong> depends on the pixel format. For mipmapped 3D surfaces, the number of depth slices in each level is half the number of the previous level (minimum 1) and rounded down if dividing by two results in a non-whole number.</p><strong>Note</strong>??An application must not rely on <strong>SysMemPitch</strong> being exactly equal to the number of texels in a line times the size of a texel. In some cases, <strong>SysMemPitch</strong> will include padding to skip past additional data in a line. This could be padding for alignment or the texture could be a subsection of a larger texture. For example, the <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure could represent a 32 by 32 subsection of a 128 by 128 texture. The value for <strong>SysMemSlicePitch</strong> will reflect any padding included in <strong>SysMemPitch</strong>.? + + + <dd> <p>Pointer to the initialization data.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one line of a texture to the next line. System-memory pitch is used only for 2D and 3D texture data as it is has no meaning for the other resource types. Specify the distance from the first pixel of one 2D slice of a 3D texture to the first pixel of the next 2D slice in that texture in the <strong>SysMemSlicePitch</strong> member.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one depth level to the next. System-memory-slice pitch is only used for 3D texture data as it has no meaning for the other resource types.</p> </dd> + + + + + <p>Provides access to subresource data.</p> + <p>This structure is used in a call to <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>The values in these members tell you how much data you can view:</p><ul> <li><strong>pData</strong> points to row 0 and depth slice 0.</li> <li><strong>RowPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from row to row, where each row contains multiple pixels.</li> <li><strong>DepthPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from depth slice to depth slice, where each depth slice contains multiple rows.</li> </ul><p>When <strong>RowPitch</strong> and <strong>DepthPitch</strong> are not appropriate for the resource type, the runtime might set their values to 0. So, don't use these values for anything other than iterating over rows and depth. Here are some examples:</p><ul> <li>For <strong>Buffer</strong> and <strong>Texture1D</strong>, the runtime assigns values that aren't 0 to <strong>RowPitch</strong> and <strong>DepthPitch</strong>. For example, if a <strong>Buffer</strong> contains 8 bytes, the runtime assigns values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are greater than or equal to 8.</li> <li>For <strong>Texture2D</strong>, the runtime still assigns a value that isn't 0 to <strong>DepthPitch</strong>, assuming that the field isn't used.</li> </ul><strong>Note</strong>?? The runtime might assign values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are larger than anticipated because there might be padding between rows and depth.? + + + <dd> <p>Pointer to the data. When <strong>{{ID3D11DeviceContext::Map}}</strong> provides the reference, the runtime ensures that the reference has a specific alignment, depending on the following feature levels:</p> <ul> <li>For <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong> and higher, the reference is aligned to 16 bytes.</li> <li>For lower than <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>, the reference is aligned to 4 bytes.</li> </ul> </dd> + + + <dd> <p>The row pitch, or width, or physical size (in bytes) of the data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size (in bytes)of the data.</p> </dd> + + + + + <p>Describes a buffer resource.</p> + <p>This structure is used by <strong>{{ID3D11Device::CreateBuffer}}</strong> to create buffer resources.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_BUFFER_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a buffer description.</p><p>If the bind flag is <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>, you must set the <strong>ByteWidth</strong> value in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>.</p> + + + <dd> <p>Size of the buffer in bytes.</p> </dd> + + + <dd> <p>Identify how the buffer is expected to be read from and written to. Frequency of update is a key factor. The most common value is typically {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Identify how the buffer will be bound to the pipeline. Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>{{CPU}} access flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) or 0 if no {{CPU}} access is necessary. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) or 0 if unused. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer. For more info about structured buffers, see Structured Buffer.</p> <p>The size value in <strong>StructureByteStride</strong> must match the size of the format that you use for views of the buffer. For example, if you use a shader resource view ({{SRV}}) to read a buffer in a pixel shader, the {{SRV}} format size must match the size value in <strong>StructureByteStride</strong>.</p> </dd> + + + + + <p>Describes a 1D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture1D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE1D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE1D_U_DIMENSION}} (8192) when you create your 1D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE1D_U_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the array. The range is from 1 to {{D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}. For a 1D texture, the allowable values are: {{D3D11_BIND_SHADER_RESOURCE}}, {{D3D11_BIND_RENDER_TARGET}} and {{D3D11_BIND_DEPTH_STENCIL}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture3D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a shader-resource view.</p> + <p> The <strong>{{D3D11_BUFFER_SRV}}</strong> structure is a member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure, which represents a shader-resource view description. You can create a shader-resource view by calling the <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> method. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the shader-resource-view description. </p> </dd> + + + + + <p>Describes the elements in a raw buffer resource to use in a shader-resource view.</p> + <p>This structure is used by <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a raw view of a buffer.</p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV_FLAG}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a multisampled 2D texture to use in a shader-resource view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> specifying the viewing format. See remarks.</p> </dd> + + + <dd> <p>The resource type of the view. See <strong>{{D3D11_SRV_DIMENSION}}</strong>. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>View the resource as a buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFER_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D texture using information from a shader-resource view (see <strong>{{D3D11_TEX1D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture using information from a shader-resource view (see <strong>{{D3D11_TEX2D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled texture using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D texture using information from a shader-resource view (see <strong>{{D3D11_TEX3D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube texture using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube-texture array using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a raw buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFEREX_SRV}}</strong>). For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a render-target view.</p> + <p> A render-target view is a member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>). Create a render-target view by calling <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the render-target-view description. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture to use in a render-target view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a an array of multisampled 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a render-target view.</p> + <p>This structure is one member of a render target view. See <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render target.</p><p>A render-target-view cannot use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_RTV_DIMENSION}}</strong>), which specifies how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a single subresource because a multisampled 2D texture only contains one subresource (see <strong>{{D3D11_TEX2DMS_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a multisampled 2D texture array that can be accessed (see <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_RTV}}</strong>).</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array 2D textures that are accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.</p> + <p>Because a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.</p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures for a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources of a texture that are accessible from a depth-stencil view.</p> + <p>These are valid formats for a depth-stencil view:</p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p>A depth-stencil view cannot use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, then the format of the parent resource is used.</p><p>A depth-stencil-view description is needed when calling <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p> + + + <dd> <p>Resource data format (see <strong>{{DXGI_FORMAT}}</strong>). See remarks for allowable formats.</p> </dd> + + + <dd> <p>Type of resource (see <strong>{{D3D11_DSV_DIMENSION}}</strong>). Specifies how a depth-stencil resource will be accessed; the value is stored in the union in this structure.</p> </dd> + + + <dd> <p>A value that describes whether the texture is read only. Pass 0 to specify that it is not read only; otherwise, pass one of the members of the <strong>{{D3D11_DSV_FLAG}}</strong> enumerated type.</p> </dd> + + + <dd> <p>Specifies a 1D texture subresource (see <strong>{{D3D11_TEX1D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 1D texture subresources (see <strong>{{D3D11_TEX1D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a 2D texture subresource (see <strong>{{D3D11_TEX2D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 2D texture subresources (see <strong>{{D3D11_TEX2D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a multisampled 2D texture (see <strong>{{D3D11_TEX2DMS_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of multisampled 2D textures (see <strong>{{D3D11_TEX2DMS_ARRAY_DSV}}</strong>).</p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>View options for the resource (see <strong>{{D3D11_BUFFER_UAV_FLAG}}</strong>).</p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_UAV_DIMENSION}}</strong>), which specifies how the resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_UAV}}</strong>).</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>These are the default values for sampler state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MinLOD</td><td>-3.402823466e+38F (-{{FLT_MAX}})</td></tr> <tr><td>MaxLOD</td><td>3.402823466e+38F ({{FLT_MAX}})</td></tr> <tr><td>MipMapLODBias</td><td>0.0f</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor</td><td>float4(1.0f,1.0f,1.0f,1.0f)</td></tr> <tr><td>Texture</td><td>N/A</td></tr> </table><p>?</p> + + + <dd> <p> Filtering method to use when sampling a texture (see <strong>{{D3D11_FILTER}}</strong>). </p> </dd> + + + <dd> <p> Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see <strong>{{D3D11_TEXTURE_ADDRESS_MODE}}</strong>). </p> </dd> + + + <dd> <p>Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.</p> </dd> + + + <dd> <p>Clamping value used if {{D3D11_FILTER_ANISOTROPIC}} or {{D3D11_FILTER_COMPARISON_ANISOTROPIC}} is specified in Filter. Valid values are between 1 and 16.</p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p>Border color to use if {{D3D11_TEXTURE_ADDRESS_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.</p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p>Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D11_FLOAT32_MAX}}.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>Type of query (see <strong>{{D3D11_QUERY}}</strong>).</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>).</p> </dd> + + + + + <p>Query information about the reliability of a timestamp query.</p> + <p>For a list of query types see <strong>{{D3D11_QUERY}}</strong>.</p> + + + <dd> <p>How frequently the {{GPU}} counter increments in Hz.</p> </dd> + + + <dd> <p>If this is <strong>{{TRUE}}</strong>, something occurred in between the query's <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the {{AC}} cord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by <strong>{{ID3D11DeviceContext::GetData}}</strong> for a timestamp query is only reliable if <strong>Disjoint</strong> is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Query information about the amount of data streamed out to the stream-output buffers in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Describes a counter.</p> + <p>This structure is used by <strong>{{ID3D11Counter::GetDesc}}</strong>, <strong>{{ID3D11Device::CheckCounter}}</strong> and <strong>{{ID3D11Device::CreateCounter}}</strong>.</p> + + + <dd> <p>Type of counter (see <strong>{{D3D11_COUNTER}}</strong>).</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Information about the video card's performance counter capabilities.</p> + <p>This structure is returned by <strong>{{ID3D11Device::CheckCounterInfo}}</strong>.</p> + + + <dd> <p>Largest device-dependent counter {{ID}} that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}. See <strong>{{D3D11_COUNTER}}</strong>.</p> </dd> + + + <dd> <p>Number of counters that can be simultaneously supported.</p> </dd> + + + <dd> <p>Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the {{VERTEX_PROCESSING}}, {{GEOMETRY_PROCESSING}}, {{PIXEL_PROCESSING}}, and {{OTHER_GPU_PROCESSING}} counters. </p> </dd> + + + + + <p>Describes an {{HLSL}} class instance.</p> + <p>The {{D3D11_CLASS_INSTANCE_DESC}} structure is returned by the <strong>{{ID3D11ClassInstance::GetDesc}}</strong> method.</p><p>The members of this structure except <strong>InstanceIndex</strong> are valid (non default values) if they describe a class instance aquired using <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The <strong>InstanceIndex</strong> member is only valid when the class instance is aquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>.</p> + + + <dd> <p>The instance {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The instance index of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The type {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>Describes the constant buffer associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base constant buffer offset associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base texture associated with an {{HLSL}} class; the default value is 127.</p> </dd> + + + <dd> <p>The base sampler associated with an {{HLSL}} class; the default value is 15.</p> </dd> + + + <dd> <p>True if the class was created; the default value is false.</p> </dd> + + + + + <p>Describes the multi-threading features that are supported by the current graphics driver.</p> + <p>Use the {{D3D11_FEATURE_DATA_THREADING}} structure with the <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> method to determine multi-threading support.</p> + + + <dd> <p><strong>{{TRUE}}</strong> means resources can be created concurrently on multiple threads while drawing; <strong>{{FALSE}}</strong> means that the presence of coarse synchronization will prevent concurrency.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> means command lists are supported by the current driver; <strong>{{FALSE}}</strong> means that the {{API}} will emulate deferred contexts and command lists with software.</p> </dd> + + + + + <p>Describes double data type support in the current graphics driver.</p> + <p>If the runtime sets <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>, the hardware and driver support the following Shader Model 5 instructions:</p><ul> <li> dadd </li> <li> dmax </li> <li> dmin </li> <li> dmul </li> <li> deq </li> <li> dge </li> <li> dlt </li> <li> dne </li> <li> dmov </li> <li> dmovc </li> <li> dtof </li> <li> ftod </li> </ul><strong>Note</strong>??If <strong>DoublePrecisionFloatShaderOps</strong> is <strong>{{TRUE}}</strong>, the hardware and driver do not necessarily support double-precision division.? + + + <dd> <p>Specifies whether double types are allowed. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong> in order for you to use any {{HLSL}} shader that is compiled with a double type.</p> </dd> + + + + + <p>Describes which resources are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> flags indicating which resources are supported.</p> </dd> + + + + + <p>Describes which unordered resource options are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT2}}</strong> flags indicating which unordered resource options are supported.</p> </dd> + + + + + <p>Describes compute shader and raw and structured buffer support in the current graphics driver.</p> + <p>Direct3D 11 devices ({{D3D_FEATURE_LEVEL_11_0}}) are required to support Compute Shader model 5.0. Direct3D 10.x devices ({{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_10_1}}) can optionally support Compute Shader model 4.0 or 4.1.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if compute shaders and raw and structured buffers are supported; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 11.1 feature options in the current graphics driver.</p> + <p>If a Microsoft Direct3D device supports feature level 11.1 (<strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>), when you call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>, <strong>CheckFeatureSupport</strong> returns a reference to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> with all member set to <strong>{{TRUE}}</strong> except the <strong>{{SAD4ShaderInstructions}}</strong> and <strong>ExtendedDoublesShaderInstructions</strong> members, which are optionally supported by the hardware and driver and therefore can be <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p><p>Feature level 11.1 provides the following additional features:</p><ul> <li>{{UAVs}} at every shader stage with 64 {{UAV}} bind slots instead of 8.</li> <li>Target-independent rasterization, which enables you to set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, 8, or 16 and to render to {{RTVs}} with a single sample.</li> <li>{{UAV}}-only rendering with the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> set to up to 16 (only up to 8 for feature level 11).</li> </ul><p>The runtime always sets the following groupings of members identically. That is, all the values in a grouping are <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> together:</p><ul> <li><strong>DiscardAPIsSeenByDriver</strong> and <strong>FlagsForUpdateAndCopySeenByDriver</strong></li> <li><strong>ClearView</strong>, <strong>CopyWithOverlap</strong>, <strong>ConstantBufferPartialUpdate</strong>, <strong>ConstantBufferOffsetting</strong>, and <strong>MapNoOverwriteOnDynamicConstantBuffer</strong></li> <li><strong>MapNoOverwriteOnDynamicBufferSRV</strong> and <strong>MultisampleRTVWithForcedSampleCountOne</strong></li> </ul> + + + <dd> <p>Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1.</p> </dd> + + + <dd> <p>Specifies whether the driver can render with no render target views ({{RTVs}}) or depth stencil views ({{DSVs}}), and only unordered access views ({{UAVs}}) bound. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver can render with no {{RTVs}} or {{DSVs}} and only {{UAVs}} bound and <strong>{{FALSE}}</strong> otherwise. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, or 8 when you render with no {{RTVs}} or {{DSV}} and only {{UAVs}} bound. For feature level 11.1, this member is always <strong>{{TRUE}}</strong> and you can also set <strong>ForcedSampleCount</strong> to 16 in addition to 1, 4, or 8. The default value of <strong>ForcedSampleCount</strong> is 0, which means the same as if the value is set to 1. You can always set <strong>ForcedSampleCount</strong> to 0 or 1 for {{UAV}}-only rendering independently of how this member is set.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::DiscardView}}</strong> and <strong>{{ID3D11DeviceContext1::DiscardResource}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports these methods and <strong>{{FALSE}}</strong> otherwise. How this member is set does not indicate whether the driver actually uses these methods; that is, the driver might ignore these methods if they are not useful to the hardware. If <strong>{{FALSE}}</strong>, the runtime does not expose these methods to the driver because the driver does not support them. You can monitor this member during development to rule out legacy drivers on hardware where these methods might have otherwise been beneficial. You are not required to write separate code paths based on whether this member is <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>; you can call these methods whenever applicable.</p> </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for copy and update that are exposed by the <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports new semantics for copy and update. The runtime sets this member to <strong>{{FALSE}}</strong> only for legacy drivers. The runtime handles this member similarly to the <strong>DiscardAPIsSeenByDriver</strong> member.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> with overlapping source and destination rectangles. The runtime sets this member to <strong>{{TRUE}}</strong> if you can call <strong>CopySubresourceRegion1</strong> with overlapping source and destination rectangles and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because drivers already support the option for these feature levels. ? </dd> + + + <dd> <p>Specifies whether the driver supports partial updates of constant buffers. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports partial updates of constant buffers and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for setting offsets in constant buffers for a shader. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports allowing you to specify offsets when you call new methods like the <strong>{{ID3D11DeviceContext1::VSSetConstantBuffers1}}</strong> method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic constant buffer (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic buffer {{SRV}} (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation.</p> </dd> + + + <dd> <p>Specifies whether the driver supports multisample rendering when you render with {{RTVs}} bound. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1 with a multisample {{RTV}} bound. The driver can support this option on feature level 10 and higher. If <strong>{{FALSE}}</strong>, the rasterizer-state creation will fail because the driver is legacy or the feature level is too low.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>msad4</strong> intrinsic function in shaders. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support calls to <strong>msad4</strong> intrinsic functions in shaders. If <strong>{{FALSE}}</strong>, the driver is legacy or the hardware does not support the option; the runtime will fail shader creation for shaders that use <strong>msad4</strong>.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>fma</strong> intrinsic function and other extended doubles instructions (<strong>{{DDIV}}</strong> and <strong>{{DRCP}}</strong>) in shaders. The <strong>fma</strong> intrinsic function emits an extended doubles <strong>{{DFMA}}</strong> instruction. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended doubles instructions in shaders (shader model 5 and higher). Support of this option implies support of basic double-precision shader instructions as well. You can use the <strong>{{D3D11_FEATURE_DOUBLES}}</strong> value to query for support of double-precision shaders. If <strong>{{FALSE}}</strong>, the hardware and driver do not support the option; the runtime will fail shader creation for shaders that use extended doubles instructions.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support sharing a greater variety of Texture2D resource types and formats. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended Texture2D resource sharing.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes information about Direct3D 11.1 adapter architecture.</p> + + + <dd> <p>Specifies whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain {{API}} usage patterns that are fine for TileBasedDefferredRenderers ({{TBDRs}}) can perform worse on non-{{TBDRs}} and vice versa. Applications that are careful about rendering can be friendly to both {{TBDR}} and non-{{TBDR}} architectures. <strong>{{TRUE}}</strong> if the rendering device batches rendering commands and <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more information about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. For more information about this feature, see feature level.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D?9 shadow support in the current graphics driver. </p> + <p>Shadows are an important element in realistic 3D scenes. You can use the shadow buffer technique to render shadows. The basic principle of the technique is to use a depth buffer to store the scene depth info from the perspective of the light source, and then compare each point rendered in the scene with that buffer to determine if it is in shadow.</p><p>To render objects into the scene with shadows on them, you create <strong>sampler state objects</strong> with comparison filtering set and the comparison mode (ComparisonFunc) to LessEqual. You can also set BorderColor addressing on this depth sampler, even though BorderColor isn't typically allowed on feature levels 9.1 and 9.2. By using the border color and picking 0.0 or 1.0 as the border color value, you can control whether the regions off the edge of the shadow map appear to be always in shadow or never in shadow respectively. +You can control the shadow filter quality by the Mag and Min filter settings in the comparison sampler. Point sampling will produce shadows with non-anti-aliased edges. Linear filter sampler settings will result in higher quality shadow edges, but might affect performance on some power-optimized devices.</p><strong>Note</strong>??If you use a separate setting for Mag versus Min filter options, you produce an undefined result. Anisotropic filtering is not supported. The Mip filter choice is not relevant because feature level 9.x does not allow mipmapped depth buffers.?<strong>Note</strong>??On feature level 9.x, you can't compile a shader with the <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> intrinsic functions by using older versions of the compiler. For example, you can't use the fxc.exe compiler that ships with the DirectX {{SDK}} or use the <strong>{{D3DCompile}}**</strong> functions (like <strong>{{D3DCompileFromFile}}</strong>) that are implemented in {{D3DCompiler_43}}.dll and earlier. These intrinsic functions on feature level 9.x are only supported in the fxc.exe compiler that ships with the Windows?8 {{SDK}} and later and with the <strong>{{D3DCompile}}**</strong> functions that are implemented in {{D3DCompiler_44}}.dll and later. +But these intrinsic functions are present in shader models for feature levels higher than 9.x.? + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes precision support options for shaders in the current graphics driver.</p> + <p>For hardware at Direct3D 10 and higher feature levels, the runtime sets both members identically. For hardware at Direct3D 9.3 and lower feature levels, the runtime can set a lower precision support in the <strong>PixelShaderMinPrecision</strong> member than the <strong>AllOtherShaderStagesMinPrecision</strong> member; for 9.3 and lower, all other shader stages represent only the vertex shader.</p><p>For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for the pixel shader. A value of zero indicates that the driver supports only full 32-bit precision for the pixel shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for all other shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all other shader stages.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 11.2 feature options in the current graphics driver.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D11_OPTIONS1}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The members of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> will be set appropriately based on the system's graphics hardware and graphics driver. </p> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D11_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support the filtering options (<strong>{{D3D11_FILTER}}</strong>) of comparing the result to the minimum or maximum value during texture sampling. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support these filtering options. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver also support the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method on depth formats. For info about valid depth formats, see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies support for creating <strong>{{ID3D11Buffer}}</strong> resources that can be passed to the <strong>{{ID3D11DeviceContext::Map}}</strong> and <strong>{{ID3D11DeviceContext::Unmap}}</strong> methods. This means that the <strong>{{CPUAccessFlags}}</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure may be set with the desired <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong> elements when the <strong>Usage</strong> member of <strong>{{D3D11_BUFFER_DESC}}</strong> is set to <strong>{{D3D11_USAGE_DEFAULT}}</strong>. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware is capable of at least <strong>{{D3D_FEATURE_LEVEL_11_0}}</strong> and the graphics device driver supports mappable default buffers. </p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether simple instancing is supported.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>SimpleInstancingSupported</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>. </p><p> Simple instancing means that instancing is supported with the caveat that the <strong>InstanceDataStepRate</strong> member of the <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> structure must be equal to 1. This does not change the full instancing support provided by hardware at feature level 9.3 and above, and is meant to expose the instancing support that may be available on feature level 9.2 and 9.1 hardware. </p> + + + <dd> <p> Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether a {{GPU}} profiling technique is supported.</p> + <p>If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_MARKER_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>Profile</strong> member of <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Specifies whether the hardware and driver support a {{GPU}} profiling technique that can be used with development tools. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support data marking.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + <p>You can use the <strong>{{D3D11_FEATURE_D3D9_OPTIONS1}}</strong> enumeration value with <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> to query a driver about support for Direct3D 9 feature options rather than making multiple calls to <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> by using <strong>{{D3D11_FEATURE_D3D9_OPTIONS}}</strong>, <strong>{{D3D11_FEATURE_D3D9_SHADOW_SUPPORT}}</strong>, and <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>, which provide identical info about supported Direct3D 9 feature options.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more info about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. </p> </dd> + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support setting a single face of a <strong>TextureCube</strong> as a render target while the depth stencil surface that is bound alongside can be a <strong>Texture2D</strong> (as opposed to <strong>TextureCube</strong>). The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support this feature; otherwise <strong>{{FALSE}}</strong>.</p> <p>If the hardware and driver don't support this feature, the app must match the render target surface type with the depth stencil surface type. Because hardware at Direct3D 9.3 and lower feature levels doesn't allow <strong>TextureCube</strong> depth surfaces, the only way to render a scene into a <strong>TextureCube</strong> while having depth buffering enabled is to render each <strong>TextureCube</strong> face separately to a <strong>Texture2D</strong> render target first (because that can be matched with a <strong>Texture2D</strong> depth), and then copy the results into the <strong>TextureCube</strong>. If the hardware and driver support this feature, the app can just render to the <strong>TextureCube</strong> faces directly while getting depth buffering out of a <strong>Texture2D</strong> depth buffer.</p> <p>You only need to query this feature from hardware at Direct3D 9.3 and lower feature levels because hardware at Direct3D 10.0 and higher feature levels allow <strong>TextureCube</strong> depth surfaces.</p> </dd> + + + + + + + + <p>Describes Direct3D 11.3 feature options in the current graphics driver.</p> + + + <dd> <p> Whether to use the {{VP}} and {{RT}} array index from any shader feeding the rasterizer. </p> </dd> + + + + + <p> Describes feature data {{GPU}} virtual address support, including maximum address bits per resource and per process. </p> + <p> See <strong>{{D3D11_FEATURE}}</strong>. </p> + + + <dd> <p> The maximum {{GPU}} virtual address bits per resource. </p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process. </p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + + + + <p>Describes a video stream for a Microsoft Direct3D?11 video decoder or video processor. </p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The width of the video frame, in pixels. </p> </dd> + + + <dd> <p>The height of the video frame, in pixels. </p> </dd> + + + <dd> <p>The output surface format, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + + + <p>Describes the configuration of a Microsoft Direct3D?11 decoder device for DirectX Video Acceleration ({{DXVA}}). </p> + + + <dd> <p>If the bitstream data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 0, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the macroblock control data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the residual difference decoding data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>Indicates whether the host-decoder sends raw bit-stream data. If the value is 1, the data for the pictures will be sent in bit-stream buffers as raw bit-stream content. If the value is 0, picture data will be sent using macroblock control command buffers. If either <strong>ConfigResidDiffHost</strong> or <strong>ConfigResidDiffAccelerator</strong> is 1, the value must be 0. </p> </dd> + + + <dd> <p>Specifies whether macroblock control commands are in raster scan order or in arbitrary order. If the value is 1, the macroblock control commands within each macroblock control command buffer are in raster-scan order. If the value is 0, the order is arbitrary. For some types of bit streams, forcing raster order either greatly increases the number of required macroblock control buffers that must be processed, or requires host reordering of the control information. Therefore, supporting arbitrary order can be more efficient. </p> </dd> + + + <dd> <p>Contains the host residual difference configuration. If the value is 1, some residual difference decoding data may be sent as blocks in the spatial domain from the host. If the value is 0, spatial domain data will not be sent. </p> </dd> + + + <dd> <p>Indicates the word size used to represent residual difference spatial-domain blocks for predicted (non-intra) pictures when using host-based residual difference decoding. </p> <p>If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 1, the host will send residual difference spatial-domain blocks for non-intra macroblocks using 8-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 0, the host will send residual difference spatial-domain blocks of data for non-intra macroblocks using 16-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial domain blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial domain blocks for intra macroblocks are sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 0, <strong>ConfigSpatialResid8</strong> must be 0. </p> <p> For intra pictures, spatial-domain blocks must be sent using 8-bit samples if bits-per-pixel ({{BPP}}) is 8, and using 16-bit samples if {{BPP}} &gt; 8. If <strong>ConfigIntraResidUnsigned</strong> is 0, these samples are sent as signed integer values relative to a constant reference value of 2^({{BPP}}?1), and if <strong>ConfigIntraResidUnsigned</strong> is 1, these samples are sent as unsigned integer values relative to a constant reference value of 0. </p> </dd> + + + <dd> <p> If the value is 1, 8-bit difference overflow blocks are subtracted rather than added. The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 1. </p> <p> The ability to subtract differences rather than add them enables 8-bit difference decoding to be fully compliant with the full ?255 range of values required in video decoder specifications, because +255 cannot be represented as the addition of two signed 8-bit numbers, but any number in the range ?255 can be represented as the difference between two signed 8-bit numbers (+255 = +127 minus ?128).</p> </dd> + + + <dd> <p> If the value is 1, spatial-domain blocks for intra macroblocks must be clipped to an 8-bit range on the host and spatial-domain blocks for non-intra macroblocks must be clipped to a 9-bit range on the host. If the value is 0, no such clipping is necessary by the host. </p> <p> The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 0 and <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, any spatial-domain residual difference data must be sent in a chrominance-interleaved form matching the {{YUV}} format chrominance interleaving pattern. The value must be 0 unless <strong>ConfigResidDiffHost</strong> is 1 and the {{YUV}} format is {{NV12}} or {{NV21}}. </p> </dd> + + + <dd> <p> Indicates the method of representation of spatial-domain blocks of residual difference data for intra blocks when using host-based difference decoding. </p> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1), regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks must be sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0, regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> The value of the member must be 0 unless <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, transform-domain blocks of coefficient data may be sent from the host for accelerator-based {{IDCT}}. If the value is 0, accelerator-based {{IDCT}} will not be used. If both <strong>ConfigResidDiffHost</strong> and <strong>ConfigResidDiffAccelerator</strong> are 1, this indicates that some residual difference decoding will be done on the host and some on the accelerator, as indicated by macroblock-level control commands. </p> <p> The value must be 0 if <strong>ConfigBitstreamRaw</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the inverse scan for transform-domain block processing will be performed on the host, and absolute indices will be sent instead for any transform coefficients. If the value is 0, the inverse scan will be performed on the accelerator. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>Config4GroupedCoefs</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the {{IDCT}} specified in Annex W of {{ITU}}-T Recommendation H.263 is used. If the value is 0, any compliant {{IDCT}} can be used for off-host {{IDCT}}. </p> <p> The H.263 annex does not comply with the {{IDCT}} requirements of {{MPEG}}-2 corrigendum 2, so the value must not be 1 for use with {{MPEG}}-2 video. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0, indicating purely host-based residual difference decoding. </p> </dd> + + + <dd> <p> If the value is 1, transform coefficients for off-host {{IDCT}} will be sent using the <strong>{{DXVA_TCoef4Group}}</strong> structure. If the value is 0, the <strong>{{DXVA_TCoefSingle}}</strong> structure is used. The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>ConfigHostInverseScan</strong> is 1. </p> </dd> + + + <dd> <p> Specifies how many frames the decoder device processes at any one time. </p> </dd> + + + <dd> <p> Contains decoder-specific configuration information. </p> </dd> + + + + + <p>Contains an initialization vector ({{IV}}) for 128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher encryption. </p> + + + <dd> <p>The {{IV}}, in big-endian format.</p> </dd> + + + <dd> <p>The block count, in big-endian format.</p> </dd> + + + + + <p>Specifies which bytes in a video surface are encrypted. </p> + + + <dd> <p>The number of bytes that are encrypted at the start of the buffer. </p> </dd> + + + <dd> <p>The number of bytes that are skipped after the first <strong>NumEncryptedBytesAtBeginning</strong> bytes, and then after each block of <strong>NumBytesInEncryptPattern</strong> bytes. Skipped bytes are not encrypted. </p> </dd> + + + <dd> <p>The number of bytes that are encrypted after each block of skipped bytes.</p> </dd> + + + + + <p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. +</p> </dd> + + + <dd> <p>The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +</p> </dd> + + + <dd> <p>The number of macroblocks of data in the buffer. This count includes skipped macroblocks. </p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <strong>pIV</strong> parameter. If <strong>pIV</strong> is <strong>{{NULL}}</strong>, set this member to zero.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video surfaces are partially encrypted.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure that specifies which bytes of the surface are encrypted.</p> </dd> + + + + + <p>Contains driver-specific data for the <strong>{{ID3D11VideoContext::DecoderExtension}}</strong> method.</p> + <p>The exact meaning of each structure member depends on the value of <strong>Function</strong>.</p> + + + + <p>Describes the capabilities of a Microsoft Direct3D?11 video processor.</p> + <p>The video processor stores state information for each input stream. These states persist between blits. With each blit, the application selects which streams to enable or disable. Disabling a stream does not affect the state information for that stream.</p><p>The <strong>MaxStreamStates</strong> member gives the maximum number of stream states that can be saved. The <strong>MaxInputStreams</strong> member gives the maximum number of streams that can be enabled during a blit. These two values can differ. </p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSPR_FILTER_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of frame-rate conversion capabilities. To enumerate the frame-rate conversion capabilities, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method.</p> </dd> + + + <dd> <p>The maximum number of input streams that can be enabled at the same time. </p> </dd> + + + <dd> <p>The maximum number of input streams for which the device can store state data.</p> </dd> + + + + + <p>Defines a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + + + <dd> <p>The number of past reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>The number of future reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The number of custom frame rates that the driver supports. To get the list of custom frame rates, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong> method.</p> </dd> + + + + + <p>Describes the content-protection capabilities of a graphics driver.</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_CONTENT_PROTECTION_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of cryptographic key-exchange types that are supported by the driver. To get the list of key-exchange types, call the <strong>{{ID3D11VideoDevice::CheckCryptoKeyExchange}}</strong> method.</p> </dd> + + + <dd> <p>The encyrption block size, in bytes. The size of data to be encrypted must be a multiple of this value. </p> </dd> + + + <dd> <p>The total amount of memory, in bytes, that can be used to hold protected surfaces.</p> </dd> + + + + + <p>Specifies a custom rate for frame-rate conversion or inverse telecine ({{IVTC}}). </p> + <p>The <strong>CustomRate</strong> member gives the rate conversion factor, while the remaining members define the pattern of input and output samples.</p> + + + <dd> <p>The ratio of the output frame rate to the input frame rate, expressed as a <strong>{{DXGI_RATIONAL}}</strong> structure that holds a rational number. </p> </dd> + + + <dd> <p>The number of output frames that will be generated for every <em>N</em> input samples, where <em>N</em> = <strong>InputFramesOrFields</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the input stream must be interlaced. Otherwise, the input stream must be progressive. </p> </dd> + + + <dd> <p>The number of input fields or frames for every <em>N</em> output frames that will be generated, where <em>N</em> = <strong>OutputFrames</strong>. </p> </dd> + + + + + <p>Defines the range of supported values for an image filter. </p> + <p>The multiplier enables the filter range to have a fractional step value.</p><p>For example, a hue filter might have an actual range of [?180.0 ... +180.0] with a step size of 0.25. The device would report the following range and multiplier:</p><ul> <li>Minimum: ?720</li> <li>Maximum: +720</li> <li>Multiplier: 0.25</li> </ul><p>In this case, a filter value of 2 would be interpreted by the device as 0.50 (or 2 ? 0.25).</p><p>The device should use a multiplier that can be represented exactly as a base-2 fraction.</p> + + + <dd> <p>The minimum value of the filter. </p> </dd> + + + <dd> <p>The maximum value of the filter. </p> </dd> + + + <dd> <p>The default value of the filter. </p> </dd> + + + <dd> <p>A multiplier. Use the following formula to translate the filter setting into the actual filter value: <em>Actual Value</em> = <em>Set Value</em>???<em>Multiplier</em>.</p> </dd> + + + + + <p>Describes a video stream for a video processor.</p> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> enumeration that describes how the video stream is interlaced.</p> </dd> + + + <dd> <p>The frame rate of the input video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the input frames, in pixels.</p> </dd> + + + <dd> <p>The height of the input frames, in pixels.</p> </dd> + + + <dd> <p>The frame rate of the output video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the output frames, in pixels. </p> </dd> + + + <dd> <p>The height of the output frames, in pixels.</p> </dd> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_USAGE}}</strong> enumeration that describes how the video processor will be used. The value indicates the desired trade-off between speed and video quality. The driver uses this flag as a hint when it creates the video processor.</p> </dd> + + + + + <p>Specifies an {{RGB}} color value. </p> + <p>The {{RGB}} values have a nominal range of [0...1]. For an {{RGB}} format with <em>n</em> bits per channel, the value of each color component is calculated as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>For example, for {{RGB}}-32 (8 bits per channel), <code>val = {{BYTE}}(f * 255.0)</code>.</p> + + + <dd> <p>The red value.</p> </dd> + + + <dd> <p>The green value.</p> </dd> + + + <dd> <p>The blue value.</p> </dd> + + + <dd> <p>The alpha value. Values range from 0 (transparent) to 1 (opaque). +</p> </dd> + + + + + + + + <p>Defines a color value for Microsoft Direct3D?11 video.</p> + <p>The anonymous union can represent both {{RGB}} and {{YCbCr}} colors. The interpretation of the union depends on the context. </p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_YCbCrA}}</strong> structure that contains a {{YCbCr}} color value. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_RGBA}}</strong> structure that contains an {{RGB}} color value. </p> </dd> + + + + + <p>Specifies the color space for video processing.</p> + <p>The <strong>{{RGB_Range}}</strong> member applies to {{RGB}} output, while the <strong>{{YCbCr_Matrix}}</strong> and <strong>{{YCbCr_xvYCC}}</strong> members apply to {{YCbCr}} output. If the driver performs color-space conversion on the background color, it uses the values that apply to both color spaces. </p><p>If the driver supports extended {{YCbCr}} (xvYCC), it returns the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC}}</strong> capabilities flag in the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. Otherwise, the driver ignores the value of <strong>{{YCbCr_xvYCC}}</strong> and treats all {{YCbCr}} output as conventional {{YCbCr}}. </p><p>If extended {{YCbCr}} is supported, it can be used with either transfer matrix. Extended {{YCbCr}} does not change the black point or white point?the black point is still 16 and the white point is still 235. However, extended {{YCbCr}} explicitly allows blacker-than-black values in the range 1?15, and whiter-than-white values in the range 236?254. When extended {{YCbCr}} is used, the driver should not clip the luma values to the nominal 16?235 range.</p> + + + <dd> <p>Specifies whether the output is intended for playback or video processing (such as editing or authoring). The device can optimize the processing based on the type. The default state value is 0 (playback). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Playback</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Video processing</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{RGB}} color range. The default state value is 0 (full range). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Full range (0-255)</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Limited range (16-235)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{YCbCr}} transfer matrix. The default state value is 0 ({{BT}}.601). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.601</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.709</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies whether the output uses conventional {{YCbCr}} or extended {{YCbCr}} (xvYCC). The default state value is zero (conventional {{YCbCr}}). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Conventional {{YCbCr}}</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Extended {{YCbCr}} (xvYCC)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE}}</strong>. </p> <p>Introduced in Windows?8.1.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + + + <p>Contains stream-level data for the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method. </p> + <p>If the stereo 3D format is <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>, the <strong>ppPastSurfaces</strong>, <strong>pInputSurface</strong>, and <strong>ppFutureSurfaces</strong> members contain the left view.</p> + + + + <p>Contains a Message Authentication Code ({{MAC}}). </p> + + + <dd> <p>A byte array that contains the cryptographic {{MAC}} value of the message.</p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method. </p> + + + + <p>Contains a response from the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method.</p> + + + + + + + <p>Specifies the protection level for video content.</p> + + + <dd> <dl> <dt><strong>ProtectionEnabled</strong></dt> <dd> <p>If 1, video content protection is enabled. </p> </dd> <dt><strong>OverlayOrFullscreenRequired</strong></dt> <dd> <p>If 1, the application requires video to be displayed using either a hardware overlay or full-screen exclusive mode.</p> </dd> <dt><strong>Reserved </strong></dt> <dd> <p>Reserved. Set all bits to zero. </p> </dd> </dl> </dd> + + + <dd> <p>Use this member to access all of the bits in the union. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_PROTECTION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> value that specifies the channel type. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A handle to the device. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session that is associated with the decoder device.</p> </dd> + + + <dd> <p>A handle to the Direct3D device that is associated with the decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of processes that are allowed to open shared resources that have restricted access. A process cannot open such a resource unless the process has been granted access. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the process. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + <p>The Desktop Window Manager ({{DWM}}) process is identified by setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Other processes are identified by setting the process handle in <strong>ProcessHandle</strong> and setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the process in the list of processes.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessIdentifier</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member contains a valid handle to a process. Otherwise, this member is ignored.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of protected, shared resources that can be opened by any process without restrictions.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The number of output {{IDs}} associated with the specified device and cryptographic session.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + <dd> <p>An output {{ID}} that is associated with the specified device and cryptographic session.</p> </dd> + + + + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of encryption {{GUIDs}}. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies a supported encryption type.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE}} </strong>query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the current encryption type. </p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains the response from the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>The initial sequence number for queries.</p> </dd> + + + <dd> <p>The initial sequence number for commands.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_PROTECTION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A handle to the decoder device. Get this from <strong>{{ID3D11VideoDecoder::GetDriverHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the cryptographic session. Get this from <strong>{{ID3D11CryptoSession::GetCryptoSessionHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the Direct3D device. Get this from <strong>{{D3D11VideoContext::QueryAuthenticatedChannel}}</strong> using <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong>. +</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process. To specify the Desktop Window Manager ({{DWM}}) process, set this member to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Otherwise, set this member to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong> and set the <strong>ProcessHandle</strong> member to a valid handle.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessType</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member specifies a handle to a process. Otherwise, the value is ignored.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the specified process has access to restricted shared resources.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the type of encryption to apply.</p> </dd> + + + + + <p>Identifies the texture resource for a video decoder output view.</p> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video decoder output view.</p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VDOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VDOV}}</strong> structure that identifies the texture resource for the output view.</p> </dd> + + + + + <p>Identifies the texture resource for a video processor input view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video processor input view.</p> + + + <dd> <p>The surface format. If zero, the driver uses the {{DXGI}} format that was used to create the resource. If you are using feature level 9, the value must be zero.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPIV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPIV}}</strong> structure that identifies the texture resource.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The index of the first texture to use.</p> </dd> + + + <dd> <p>The number of textures in the array.</p> </dd> + + + + + <p>Describes a video processor output view.</p> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPOV}}</strong> structure that identifies the texture resource for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2D}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_VPOV}}</strong> structure that identifies the texture array for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2DARRAY}}</strong>.</p> </dd> + + + + + <p>A device-child interface accesses data used by a device.</p> + <p>There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Get a reference to the device that created this interface.</p> + <p>Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a device (see <strong>{{ID3D11Device}}</strong>).</p> </dd> + + + + + <p>Get application-defined data from a device child.</p> + <p> The data stored in the device child is set by calling <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device child if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p>Set application-defined data to a device child and associate that data with an application-defined guid.</p> + <p>The data stored in the device child with this method can be retrieved with <strong>{{ID3D11DeviceChild::GetPrivateData}}</strong>.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device child. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>When this method is called ::addref() will be called on the {{IUnknown}}-derived interface, and when the device child is detroyed ::release() will be called on the {{IUnknown}}-derived interface.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>The depth-stencil-state interface holds a description for depth-stencil state that you can bind to the output-merger stage.</p> + <p>To create a depth-stencil-state object, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>. To bind the depth-stencil-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> + + + + <p>Gets the description for depth-stencil state that you used to create the depth-stencil-state object.</p> + <p>You use the description for depth-stencil state in a call to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> structure that receives a description of the depth-stencil state.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device::CreateBlendState}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device::CreateBlendState}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC}}</strong> structure that receives a description of the blend state.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device::CreateRasterizerState}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RASTERIZER_DESC}}</strong> structure that receives a description of the rasterizer state.</p> </dd> + + + + + <p>A resource interface provides common actions on all resources.</p> + <p>You don't directly create a resource interface; instead, you create buffers and textures that inherit from a resource interface. For more info, see How to: Create a Vertex Buffer, How to: Create an Index Buffer, How to: Create a Constant Buffer, and How to: Create a Texture.</p> + + + + <p>Get the type of the resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Pointer to the resource type (see <strong>{{D3D11_RESOURCE_DIMENSION}}</strong>). </p> </dd> + + + + + <p>Set the eviction priority of a resource.</p> + <p>Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.</p><p>A resource that is set to the maximum priority, {{DXGI_RESOURCE_PRIORITY_MAXIMUM}}, is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model ({{WDDM}}) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.</p><p>Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement. </p> + <p>Returns nothing.</p> + + + <dd> <p>Eviction priority for the resource, which is one of the following values:</p> <ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> </dd> + + + + + <p>Get the eviction priority of a resource.</p> + + <p>One of the following values, which specifies the eviction priority for the resource:</p><ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> + + + + <p>A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.</p> + <p>There are three types of buffers: vertex, index, or a shader-constant buffer. Create a buffer resource by calling <strong>{{ID3D11Device::CreateBuffer}}</strong>.</p><p>A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to <strong>{{ID3D11DeviceContext::IASetVertexBuffers}}</strong> and <strong>{{ID3D11DeviceContext::IASetIndexBuffer}}</strong>, to the stream-output stage by a call to <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>, and to a shader stage by calling the appropriate shader method (such as <strong>{{ID3D11DeviceContext::VSSetConstantBuffers}}</strong> for example).</p><p>Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously.</p> + + + + <p>Get the properties of a buffer resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_BUFFER_DESC}}</strong>) filled in by the method.</p> </dd> + + + + + <p>A 1D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty 1D texture, call <strong>{{ID3D11Device::CreateTexture1D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 1D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong>).</p> </dd> + + + + + <p>A 2D texture interface manages texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device::CreateTexture2D}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE2D_DESC}}</strong>).</p> </dd> + + + + + <p>A 3D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device::CreateTexture3D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</p> </dd> + + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>A view interface is the base interface for all views. There are four types of views; a depth-stencil view, a render-target view, a shader-resource view, and an unordered-access view.</p><ul> <li>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>.</li> <li>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</li> <li>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</li> <li>To create an unordered-access view, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</li> </ul><p>All resources must be bound to the pipeline before they can be accessed.</p><ul> <li>To bind a render-target view or a depth-stencil view, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</li> <li>To bind a shader resource, call <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>.</li> </ul> + + + + <p>Get the resource that is accessed through this view.</p> + <p>This function increments the reference count of the resource by one, so it is necessary to call <strong>Release</strong> on the returned reference when the application is done with it. Destroying (or losing) the returned reference before <strong>Release</strong> is called will result in a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to the resource that is accessed through this view. (See <strong>{{ID3D11Resource}}</strong>.)</p> </dd> + + + + + <p>A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Get the shader resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure to be filled with data about the shader resource view.</p> </dd> + + + + + <p>A render-target-view interface identifies the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.</p> + + + + <p>Get the properties of a render target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the description of a render target view (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Get a description of the resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.)</p> </dd> + + + + + <p>A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.</p> + <p>The vertex-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a vertex shader interface, call <strong>{{ID3D11Device::CreateVertexShader}}</strong>. Before using a vertex shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A hull-shader interface manages an executable program (a hull shader) that controls the hull-shader stage.</p> + <p>The hull-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a hull-shader interface, call <strong>{{ID3D11Device::CreateHullShader}}</strong>. Before using a hull shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::HSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A domain-shader interface manages an executable program (a domain shader) that controls the domain-shader stage.</p> + <p>The domain-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a domain-shader interface, call <strong>{{ID3D11Device::CreateDomainShader}}</strong>. Before using a domain shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::DSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.</p> + <p>The geometry-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a geometry shader interface, call either <strong>{{ID3D11Device::CreateGeometryShader}}</strong> or <strong>{{ID3D11Device::CreateGeometryShaderWithStreamOutput}}</strong>. Before using a geometry shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.</p> + <p>The pixel-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders in are implemented from a common set of features referred to as the common-shader core..</p><p>To create a pixel shader interface, call <strong>{{ID3D11Device::CreatePixelShader}}</strong>. Before using a pixel shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A compute-shader interface manages an executable program (a compute shader) that controls the compute-shader stage.</p> + <p>The compute-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a compute-shader interface, call <strong>{{ID3D11Device::CreateComputeShader}}</strong>. Before using a compute shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::CSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>An input-layout interface holds a definition of how to feed vertex data that is laid out in memory into the input-assembler stage of the graphics pipeline.</p> + <p>To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>. To bind the input-layout object to the input-assembler stage, call <strong>{{ID3D11DeviceContext::IASetInputLayout}}</strong>.</p> + + + + <p>The sampler-state interface holds a description for sampler state that you can bind to any shader stage of the pipeline for reference by texture sample operations.</p> + <p>To create a sampler-state object, call <strong>{{ID3D11Device::CreateSamplerState}}</strong>.</p><p>To bind a sampler-state object to any pipeline shader stage, call the following methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::VSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::HSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::PSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CSSetSamplers}}</strong> </li> </ul><p>You can bind the same sampler-state object to multiple shader stages simultaneously.</p> + + + + <p>Gets the description for sampler state that you used to create the sampler-state object.</p> + <p>You use the description for sampler state in a call to the <strong>{{ID3D11Device::CreateSamplerState}}</strong> method to create the sampler-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SAMPLER_DESC}}</strong> structure that receives a description of the sampler state.</p> </dd> + + + + + <p>This interface encapsulates methods for retrieving data from the {{GPU}} asynchronously.</p> + <p>There are three types of asynchronous interfaces, all of which inherit this interface:</p><ul> <li> <strong>{{ID3D11Query}}</strong> - Queries information from the {{GPU}}.</li> <li> <strong>{{ID3D11Predicate}}</strong> - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.</li> <li> <strong>{{ID3D11Counter}}</strong> - Measures {{GPU}} performance.</li> </ul> + + + + <p>Get the size of the data (in bytes) that is output when calling <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + <p>Size of the data (in bytes) that is output when calling GetData.</p> + + + + <p>A query interface queries information from the {{GPU}}.</p> + <p>A query can be created with <strong>{{ID3D11Device::CreateQuery}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>A query is typically executed as shown in the following code:</p><pre> {{D3D11_QUERY_DESC}} queryDesc; +... // Fill out queryDesc structure +{{ID3D11Query}} * pQuery; +pDevice-&gt;CreateQuery(&amp;queryDesc, &amp;pQuery); +pDeviceContext-&gt;Begin(pQuery); ... // Issue graphics commands pDeviceContext-&gt;End(pQuery); +{{UINT64}} queryData; // This data type is different depending on the query type while( {{S_OK}} != pDeviceContext-&gt;GetData(pQuery, &amp;queryData, sizeof({{UINT64}}), 0) ) +{ +} +</pre><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Get a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + + + <p>A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.</p> + <p>To create a predicate object, call <strong>{{ID3D11Device::CreatePredicate}}</strong>. To set the predicate object, call <strong>{{ID3D11DeviceContext::SetPredication}}</strong>.</p><p>There are two types of predicates: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.</p> + + + + <p>This interface encapsulates methods for measuring {{GPU}} performance.</p> + <p>A counter can be created with <strong>{{ID3D11Device::CreateCounter}}</strong>.</p><p>This is a derived class of <strong>{{ID3D11Asynchronous}}</strong>.</p><p>Counter data is gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.</p><p>Counters are best suited for profiling.</p><p>For a list of the types of performance counters, see <strong>{{D3D11_COUNTER}}</strong>.</p> + + + + <p>Get a counter description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} class.</p> + <p>This interface is created by calling <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The interface is used when binding shader resources to the pipeline using {{APIs}} such as <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p> + + + + <p> Gets the <strong>{{ID3D11ClassLinkage}}</strong> object associated with the current {{HLSL}} class. </p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Gets a description of the current {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p> An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated. </p><ul> <li> A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name <strong>DefaultShader</strong> would work in any shader that contained a type <strong>DefaultShader</strong> even though several shaders could describe a different type. </li> <li> A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in. </li> </ul><p> An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_CLASS_INSTANCE_DESC}}</strong> structure that describes the current {{HLSL}} class. </p> </dd> + + + + + <p>Gets the instance name of the current {{HLSL}} class.</p> + <p>GetInstanceName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The instance name of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pInstanceName</em> parameter. </p> </dd> + + + + + <p>Gets the type of the current {{HLSL}} class.</p> + <p>GetTypeName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Type of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pTypeName</em> parameter. </p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} dynamic linkage.</p> + <p>A class linkage object can hold up to 64K gotten instances. A gotten instance is a handle that references a variable name in any shader that is created with that linkage object. When you create a shader with a class linkage object, the runtime gathers these instances and stores them in the class linkage object. For more information about how a class linkage object is used, see Storing Variables and Types for Shaders to Share.</p><p>An <strong>{{ID3D11ClassLinkage}}</strong> object is created using the <strong>{{ID3D11Device::CreateClassLinkage}}</strong> method.</p> + + + + <p>Gets the class-instance object that represents the specified {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p> A class instance must have at least 1 data member in order to be available for the runtime to use with <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. Any instance with no members will be optimized out of a compiled shader blob as a zero-sized object. If you have a class with no data members, use <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong> instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>The name of a class for which to get the class instance.</p> </dd> + + + <dd> <p>The index of the class instance.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>Initializes a class-instance object that represents an {{HLSL}} class instance.</p> + <p>Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in.</p><p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>The type name of a class to initialize.</p> </dd> + + + <dd> <p>Identifies the constant buffer that contains the class data.</p> </dd> + + + <dd> <p>The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset.</p> </dd> + + + <dd> <p>The texture slot for the first texture; there may be multiple textures following the offset.</p> </dd> + + + <dd> <p>The sampler slot for the first sampler; there may be multiple samplers following the offset.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>The <strong>{{ID3D11CommandList}}</strong> interface encapsulates a list of graphics commands for play back.</p> + <p>There is no explicit creation method, simply declare an <strong>{{ID3D11CommandList}}</strong> interface, then call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> to record commands or <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong> to play back commands.</p> + + + + <p>Gets the initialization flags associated with the deferred context that created the command list.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + <p>The context flag is reserved for future use and is always 0.</p> + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p> + + + + <p>Sets the constant buffers used by the vertex shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{VSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets a pixel shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p> Set ppClassInstances to <strong>{{NULL}}</strong> if no interfaces are used in the shader. If it is not <strong>{{NULL}}</strong>, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the pixel shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MipLODBias</td><td>0</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor[0]</td><td>1.0f</td></tr> <tr><td>BorderColor[1]</td><td>1.0f</td></tr> <tr><td>BorderColor[2]</td><td>1.0f</td></tr> <tr><td>BorderColor[3]</td><td>1.0f</td></tr> <tr><td>MinLOD</td><td>-{{FLT_MAX}}</td></tr> <tr><td>MaxLOD</td><td>{{FLT_MAX}}</td></tr> </table><p>?</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Set a vertex shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Draw indexed, non-instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>If the sum of both indices is negative, the result of the function call is undefined.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, non-instanced primitives.</p> + <p><strong>Draw</strong> submits work to the rendering pipeline.</p><p>The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline.</p><p>Even without any vertex buffer bound to the pipeline, you can generate your own vertex data in your vertex shader by using the <strong>{{SV_VertexID}}</strong> system-value semantic to determine the current vertex that the runtime is processing.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Index of the first vertex, which is usually an offset in a vertex buffer.</p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Invalidate the reference to a resource and reenable the {{GPU}}'s access to that resource.</p> + <p> For info about how to use <strong>Unmap</strong>, see How to: Use dynamic resources. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{ID3D11Resource}}</strong> interface. </p> </dd> + + + <dd> <p>A subresource to be unmapped.</p> </dd> + + + + + <p> Sets the constant buffers used by the pixel shader pipeline stage. </p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an input-layout object to the input-assembler stage.</p> + <p>Input-layout objects describe how vertex buffer data is streamed into the {{IA}} pipeline stage. To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p> Bind an array of vertex buffers to the input-assembler stage. </p> + <p> For info about creating vertex buffers, see How to: Create a Vertex Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (that is, bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer can't be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an index buffer to the input-assembler stage.</p> + <p> For information about creating index buffers, see How to: Create an Index Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p> The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. </p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> object, that contains indices. The index buffer must have been created with the <strong>{{D3D11_BIND_INDEX_BUFFER}}</strong> flag. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers. </p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer to the first index to use.</p> </dd> + + + + + <p>Draw indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors.</p><p>The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}).</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>Index of the first vertex.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Sets the constant buffers used by the geometry shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>You can't use the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface to get information about what is currently bound to the pipeline in the device context. But you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> to get information from a compiled shader. For example, you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> and <strong>{{ID3D11ShaderReflectionVariable}}</strong> to determine the slot in which a geometry shader expects a constant buffer. You can then pass this slot number to <strong>{{GSSetConstantBuffers}}</strong> to set the constant buffer. You can call the <strong>{{D3D11Reflect}}</strong> function to retrieve the address of a reference to the <strong>{{ID3D11ShaderReflection}}</strong> interface and then call <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong> to get a reference to <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{GSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Set a geometry shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p>Bind an array of shader resources to the vertex-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the vertex shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Mark the beginning of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::End}}</strong> to mark the ending of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Mark the end of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::Begin}}</strong> to mark the beginning of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Get data from the graphics processing unit ({{GPU}}) asynchronously.</p> + <p>Queries in a deferred context are limited to predicated drawing. That is, you cannot call <strong>{{ID3D11DeviceContext::GetData}}</strong> on a deferred context to get data about a query; you can only call <strong>GetData</strong> on the immediate context to get data about a query. For predicated drawing, the results of a predication-type query are used by the {{GPU}} and not returned to an application. For more information about predication and predicated drawing, see <strong>{{D3D11DeviceContext::SetPredication}}</strong>.</p><p><strong>GetData</strong> retrieves the data that the runtime collected between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. Certain queries only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> in which case the data returned by <strong>GetData</strong> is accurate up to the last call to <strong>{{ID3D11DeviceContext::End}}</strong>. For information about the queries that only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> and about the type of data that <strong>GetData</strong> retrieves for each query, see <strong>{{D3D11_QUERY}}</strong>.</p><p>If <em>DataSize</em> is 0, <strong>GetData</strong> is only used to check status.</p><p>An application gathers counter data by calling <strong>{{ID3D11DeviceContext::Begin}}</strong>, issuing some graphics commands, calling <strong>{{ID3D11DeviceContext::End}}</strong>, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the <strong>Begin</strong> and <strong>End</strong> calls. For information about performance counter types, see <strong>{{D3D11_COUNTER}}</strong>. </p> + <p>This method returns one of the Direct3D 11 Return Codes. A return value of {{S_OK}} indicates that the data at <em>pData</em> is available for the calling application to access. A return value of {{S_FALSE}} indicates that the data is not yet available. If the data is not yet available, the application must call <strong>GetData</strong> until the data is available.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface for the object about which <strong>GetData</strong> retrieves data.</p> </dd> + + + <dd> <p>Address of memory that will receive the data. If <strong>{{NULL}}</strong>, <strong>GetData</strong> will be used only to check status. The type of data output depends on the type of asynchronous interface.</p> </dd> + + + <dd> <p>Size of the data to retrieve or 0. Must be 0 when <em>pData</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Optional flags. Can be 0 or any combination of the flags enumerated by <strong>{{D3D11_ASYNC_GETDATA_FLAG}}</strong>.</p> </dd> + + + + + <p>Set a rendering predicate.</p> + <p>The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> are invalid.</p><p>Use this method to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting predicate data of the predicate is equal to the <em>PredicateValue</em>. However, some predicates are only hints, so they may not actually prevent operations from being performed. </p><p>The primary usefulness of predication is to allow an application to issue rendering and resource manipulation commands without taking the performance hit of spinning, waiting for <strong>{{ID3D11DeviceContext::GetData}}</strong> to return. So, predication can occur while <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. Another way to think of it: an application can also use predication as a fallback, if it is possible that <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. If <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_OK}}</strong>, the application can skip calling the rendering and resource manipulation commands manually with it's own application logic.</p><p>Rendering and resource manipulation commands for Direct3D?11 include these Draw, Dispatch, Copy, Update, Clear, Generate, and Resolve operations.</p><ul> <li> <strong>Draw</strong> </li> <li> <strong>DrawAuto</strong> </li> <li> <strong>DrawIndexed</strong> </li> <li> <strong>DrawIndexedInstanced</strong> </li> <li> <strong>DrawIndexedInstancedIndirect</strong> </li> <li> <strong>DrawInstanced</strong> </li> <li> <strong>DrawInstancedIndirect</strong> </li> <li> <strong>Dispatch</strong> </li> <li> <strong>DispatchIndirect</strong> </li> <li> <strong>CopyResource</strong> </li> <li> <strong>CopyStructureCount</strong> </li> <li> <strong>CopySubresourceRegion</strong> </li> <li> <strong>CopySubresourceRegion1</strong> </li> <li> <strong>CopyTiles</strong> </li> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateSubresource</strong> </li> <li> <strong>UpdateSubresource1</strong> </li> <li> <strong>UpdateTiles</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> <li> <strong>ClearRenderTargetView</strong> </li> <li> <strong>ClearUnorderedAccessViewFloat</strong> </li> <li> <strong>ClearUnorderedAccessViewUint</strong> </li> <li> <strong>ClearView</strong> </li> <li> <strong>ClearDepthStencilView</strong> </li> <li> <strong>GenerateMips</strong> </li> <li> <strong>ResolveSubresource</strong> </li> </ul><p>You can set a rendering predicate on an immediate or a deferred context. For info about immediate and deferred contexts, see Immediate and Deferred Rendering. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Predicate}}</strong> interface that represents the rendering predicate. A <strong>{{NULL}}</strong> value indicates "no" predication; in this case, the value of <em>PredicateValue</em> is irrelevant but will be preserved for <strong>{{ID3D11DeviceContext::GetPredication}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, rendering will be affected by when the predicate's conditions are met. If <strong>{{FALSE}}</strong>, rendering will be affected when the conditions are not met.</p> </dd> + + + + + <p>Bind an array of shader resources to the geometry shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the geometry shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.</p> + <p>The maximum number of active render targets a device can have active at any given time is set by a #define in {{D3D11}}.h called <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to <strong>{{NULL}}</strong>.</p><p>If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to <strong>{{NULL}}</strong>, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>If the render-target views were created from an array resource type, all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.</p><p>The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.</p><p>Any combination of the eight slots for render targets can have a render target set or not set.</p><p>The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.</p> + <p>Returns nothing.</p> + + + + <p>Binds resources to the output-merger stage.</p> + <p> For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that {{UAVs}} must be given an offset so that they are placed in the slots after the render target views that are being bound. </p><strong>Note</strong>??{{RTVs}}, {{DSV}}, and {{UAVs}} cannot be set independently; they all need to be set at the same time.?<p>Two {{RTVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>Two {{UAVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>An {{RTV}} conflicts with a {{UAV}} if they share a subresource or share a bind point.</p><p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> operates properly in the following situations: </p><ol> <li> <p><em>NumRTVs</em> != {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} and <em>NumUAVs</em> != {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li><em>{{UAVStartSlot}}</em> &gt;= <em>NumRTVs</em></li> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in the set of all <em>ppRenderTargetViews</em> and <em>ppUnorderedAccessViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> performs the following tasks: </p> <ul> <li>Unbinds all currently bound conflicting resources (stream-output target resources ({{SOTargets}}), compute shader ({{CS}}) {{UAVs}}, shader-resource views ({{SRVs}})).</li> <li> Binds <em>ppRenderTargetViews</em>, <em>ppDepthStencilView</em>, and <em>ppUnorderedAccessViews</em>. </li> </ul> </li> <li> <p><em>NumRTVs</em> == {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{UAVs}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppUnorderedAccessViews</em>. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{RTVs}} in slots &gt;= <em>{{UAVStartSlot}}</em></li> <li> All {{RTVs}} that conflict with any {{UAVs}} in <em>ppUnorderedAccessViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppUnorderedAccessViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppUnorderedAccessViews</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>ppDepthStencilView</em>, and the current depth-stencil view remains bound. </p> </li> <li> <p><em>NumUAVs</em> == {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{RTVs}} and {{DSV}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppRenderTargetViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{UAVs}} in slots &lt; <em>NumRTVs</em></li> <li> All {{UAVs}} that conflict with any {{RTVs}} in <em>ppRenderTargetViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppRenderTargetViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppRenderTargetViews</em> and <em>ppDepthStencilView</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>{{UAVStartSlot}}</em>. </p> </li> </ol><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of render targets to bind (ranges between 0 and <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>). If this parameter is nonzero, the number of entries in the array to which <em>ppRenderTargetViews</em> points must equal the number in this parameter. If you set <em>NumRTVs</em> to {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} (0xffffffff), this method does not modify the currently bound render-target views ({{RTVs}}) and also does not modify depth-stencil view ({{DSV}}). </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s that represent the render targets to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumRTVs</em> is 0, no render targets are bound. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong> that represents the depth-stencil view to bind to the device. If this parameter is <strong>{{NULL}}</strong>, the depth-stencil state is not bound. </p> </dd> + + + <dd> <p>Index into a zero-based array to begin setting unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1).</p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1. {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64. </p> <p> For pixel shaders, <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views being bound. </p> </dd> + + + <dd> <p> Number of unordered-access views ({{UAVs}}) in <em>ppUnorderedAccessViews</em>. If you set <em>NumUAVs</em> to {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} (0xffffffff), this method does not modify the currently bound unordered-access views. </p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s that represent the unordered-access views to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumUAVs</em> is 0, no unordered-access views are bound. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is relevant only for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Sets the depth-stencil state of the output-merger stage.</p> + <p>To create a depth-stencil state interface, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to bind to the device. Set this to <strong>{{NULL}}</strong> to use the default state listed in <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>.</p> </dd> + + + <dd> <p>Reference value to perform against when doing a depth-stencil test. See remarks.</p> </dd> + + + + + <p>Set the target output buffers for the stream-output stage of the pipeline.</p> + <p>An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.</p><p> Calling this method using a buffer that is currently bound for writing will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> The array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to bind to the device. The buffers must have been created with the <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong> flag. </p> </dd> + + + <dd> <p> Array of offsets to the output buffers from <em>ppSOTargets</em>, one offset for each buffer. The offset values must be in bytes. </p> </dd> + + + + + <p>Draw geometry of an unknown size.</p> + <p>A draw {{API}} submits work to the rendering pipeline. This {{API}} submits work of an unknown size that was processed by the input assembler, vertex shader, and stream-output stages; the work may or may not have gone through the geometry-shader stage.</p><p>After data has been streamed out to stream-output stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the {{SO}} stage buffers is maintained internally when the data is streamed out. This means that the {{CPU}} does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the {{SO}} stage buffers so that the layouts are available when the buffers are again bound to the input assembler.</p><p>The following diagram shows the DrawAuto process.</p><p></p><p>Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.</p><p>DrawAuto only works when drawing with one input buffer bound as an input to the {{IA}} stage at slot 0. Applications must create the {{SO}} buffer resource with both binding flags, <strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong> and <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong>.</p><p>This {{API}} does not support indexing or instancing.</p><p>If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using <strong>{{D3D11_QUERY_SO_STATISTICS}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Draw indexed, instanced, {{GPU}}-generated primitives.</p> + <p> When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives. </p> </dd> + + + <dd> <p> Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives. </p> </dd> + + + + + <p>Draw instanced, {{GPU}}-generated primitives.</p> + <p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives.</p> </dd> + + + <dd> <p>Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives.</p> </dd> + + + + + <p>Execute a command list from a thread group.</p> + <p>You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z).</p><p>In the following illustration, assume a thread group with 50 threads where the size of the group is given by (5,5,2). A single thread is identified from a thread group with 50 threads in it, using the vector (4,1,1).</p><p></p><p>The following illustration shows the relationship between the parameters passed to <strong>{{ID3D11DeviceContext::Dispatch}}</strong>, Dispatch(5,3,2), the values specified in the numthreads attribute, numthreads(10,8,3), and values that will passed to the compute shader for the thread-related system values +({{SV_GroupIndex}},{{SV_DispatchThreadID}},{{SV_GroupThreadID}},{{SV_GroupID}}).</p><p></p> + <p>Returns nothing.</p> + + + <dd> <p>The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1.</p> </dd> + + + + + <p>Execute a command list over one or more thread groups.</p> + <p>You call the <strong>DispatchIndirect</strong> method to execute commands in a compute shader.</p><p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which must be loaded with data that matches the argument list for <strong>{{ID3D11DeviceContext::Dispatch}}</strong>.</p> </dd> + + + <dd> <p>A byte-aligned offset between the start of the buffer and the arguments.</p> </dd> + + + + + <p>Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline.</p> + <p>To create a rasterizer state interface, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + + <p>Bind an array of viewports to the rasterizer stage of the pipeline.</p> + <p>All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.</p><p>Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p>Returns nothing.</p> + + + <dd> <p>Number of viewports to bind.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_VIEWPORT}}</strong> structures to bind to the device. See the structure page for details about how the viewport size is dependent on the device feature level which has changed between Direct3D 11 and Direct3D 10.</p> </dd> + + + + + <p>Bind an array of scissor rectangles to the rasterizer stage.</p> + <p>All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.</p><p> The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>). </p><p>Which scissor rectangle to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the {{SV_ViewportArrayIndex}} semantic then Direct3D will use the first scissor rectangle in the array.</p><p> Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong>). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of scissor rectangles to bind.</p> </dd> + + + <dd> <p> An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). </p> </dd> + + + + + <p>Copy a region from a source resource to a destination resource.</p> + <p>The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopySubresourceRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopySubresourceRegion</strong> call. Invalid parameters to <strong>CopySubresourceRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device.</p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. <strong>{{D3D11CalcSubresource}}</strong> is a helper function for calculating subresource indexes.</p><p><strong>CopySubresourceRegion</strong> performs the copy on the {{GPU}} (similar to a memcpy by the {{CPU}}). As a consequence, the source and destination resources:</p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must be the same type.</li> <li>Must have compatible {{DXGI}} formats (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopySubresourceRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>May not be currently mapped.</li> </ul><p><strong>CopySubresourceRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopySubresourceRegion</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p> If your app needs to copy an entire resource, we recommend to use <strong>{{ID3D11DeviceContext::CopyResource}}</strong> instead. </p><p><strong>CopySubresourceRegion</strong> is an asynchronous call, which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. For more information about pipeline stalls, see performance considerations.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> or <strong>CopySubresourceRegion</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> You can't use <strong>CopySubresourceRegion</strong> to copy mipmapped volume textures.?<strong>Note</strong>??<strong>Applies only to feature levels 9_x</strong> Subresources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopySubresourceRegion</strong>.?<strong>Note</strong>??If you use <strong>CopySubresourceRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box (see <strong>{{D3D11_BOX}}</strong>) that defines the source subresource that can be copied. If <strong>{{NULL}}</strong>, the entire source subresource is copied. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion</strong> doesn't perform a copy operation.</p> </dd> + + + + + <p>Copy the entire contents of the source resource to the destination resource using the {{GPU}}. </p> + <p>This method is unusual in that it causes the {{GPU}} to perform the copy operation (similar to a memcpy by the {{CPU}}). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:</p><ul> <li>Must be different resources.</li> <li>Must be the same type.</li> <li>Must have identical dimensions (including width, height, depth, and size as appropriate).</li> <li>Must have compatible {{DXGI}} formats, which means the formats must be identical or at least from the same type group. For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyResource</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>Can't be currently mapped.</li> </ul><p><strong>CopyResource</strong> only supports copy; it doesn't support any stretch, color key, or blend. <strong>CopyResource</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p>You can't use an <strong>Immutable</strong> resource as a destination. You can use a <strong>depth-stencil</strong> resource as either a source or a destination provided that the feature level is {{D3D_FEATURE_LEVEL_10_1}} or greater. For feature levels 9_x, resources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopyResource</strong>. Resources created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled, the call to <strong>{{ID3D11DeviceContext::CopyResource}}</strong> fails. Use <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve a multisampled resource to a resource that is not multisampled.</p><p>The method is an asynchronous call, which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. For more info, see performance considerations.</p><p>We recommend to use <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> instead if you only need to copy a portion of the data in a resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the destination resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the source resource.</p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>For a shader-constant buffer; set <em>pDstBox</em> to <strong>{{NULL}}</strong>. It is not possible to use this method to partially update a shader-constant buffer.</p><p>A resource cannot be used as a destination if:</p><ul> <li>the resource is created with <strong>immutable</strong> or <strong>dynamic</strong> usage.</li> <li>the resource is created as a depth-stencil resource.</li> <li>the resource is created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>).</li> </ul><p>When <strong>UpdateSubresource</strong> returns, the application is free to change or even free the data pointed to by <em>pSrcData</em> because the method has already copied/snapped away the original contents.</p><p>The performance of <strong>UpdateSubresource</strong> depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a <strong>Draw</strong> call and later calls <strong>UpdateSubresource</strong> on the same vertex buffer before the <strong>Draw</strong> call is actually executed by the {{GPU}}.</p><ul> <li>When there is contention for the resource, <strong>UpdateSubresource</strong> will perform 2 copies of the source data. First, the data is copied by the {{CPU}} to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the {{GPU}} to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by {{GPU}} when the command buffer is flushed.</li> <li>When there is no resource contention, the behavior of <strong>UpdateSubresource</strong> is dependent on which is faster (from the {{CPU}}'s perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the {{CPU}} copy the data to the final resource location. This is dependent on the architecture of the underlying system.</li> </ul><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<p>To better understand the source row pitch and source depth pitch parameters, the following illustration shows a 3D volume texture.</p><p></p><p>Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is {{DXGI_FORMAT_R32G32B32A32_FLOAT}}, the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.</p><p>To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:</p><ul> <li>Source Row Pitch = [size of one element in bytes] * [number of elements in one row]</li> <li>Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]</li> </ul><p>In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:</p><ul> <li>Source Row Pitch = 16 * 2 = 32</li> <li>Source Depth Pitch = 16 * 2 * 3 = 96</li> </ul><p>The following illustration shows the resource as it is laid out in memory.</p><p></p><p>For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by <em>pData</em> to [(120,100)..(200,220)] in the destination texture. Also assume that <em>rowPitch</em> has been initialized with the proper value (as explained above). <strong>front</strong> and <strong>back</strong> are set to 0 and 1 respectively, because by having <strong>front</strong> equal to <strong>back</strong>, the box is technically empty.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 100; +destRegion.bottom = 220; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 0; +destRegion.bottom = 1; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>For info about various resource types and how <strong>UpdateSubresource</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D11_BOX}}</strong>).</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + + + <p>Copies data from a buffer holding variable length data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to <strong>{{ID3D11Buffer}}</strong>. This can be any buffer resource that other copy commands, such as <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>, are able to write to.</p> </dd> + + + <dd> <p>Offset from the start of <em>pDstBuffer</em> to write 32-bit {{UINT}} structure (vertex) count from <em>pSrcView</em>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> of a Structured Buffer resource created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created. These types of resources have hidden counters tracking "how many" records have been written.</p> </dd> + + + + + <p>Set all the elements in a render target to one value.</p> + <p>Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p><p>When using <strong>{{D3D_FEATURE_LEVEL_9_x}}</strong>, <strong>ClearRenderTargetView</strong> only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the render target.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to fill the render target with.</p> </dd> + + + + + <p>Clears an unordered access resource with bit-precise values.</p> + <p>This {{API}} copies the lower ni bits from each array element i to the corresponding channel, where ni is the number of bits in the ith channel of the resource format (for example, {{R8G8B8_FLOAT}} has 8 bits for the first 3 channels). This works on any {{UAV}} with no format conversion. For a raw or structured buffer view, only the first array element value is used.</p> + <p>Returns nothing.</p> + + + + <p>Clears an unordered access resource with a float value.</p> + <p>This {{API}} works on {{FLOAT}}, {{UNORM}}, and {{SNORM}} unordered access views ({{UAVs}}), with format conversion from {{FLOAT}} to *{{NORM}} where appropriate. On other {{UAVs}}, the operation is invalid and the call will not reach the driver.</p> + <p>Returns nothing.</p> + + + + <p>Clears the depth-stencil resource.</p> + <table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the depth stencil to be cleared.</p> </dd> + + + <dd> <p>Identify the type of data to clear (see <strong>{{D3D11_CLEAR_FLAG}}</strong>).</p> </dd> + + + <dd> <p>Clear the depth buffer with this value. This value will be clamped between 0 and 1.</p> </dd> + + + <dd> <p>Clear the stencil buffer with this value.</p> </dd> + + + + + <p>Generates mipmaps for the given shader resource.</p> + <p>You can call <strong>GenerateMips</strong> on any shader-resource view to generate the lower mipmap levels for the shader resource. <strong>GenerateMips</strong> uses the largest mipmap level of the view to recursively generate the lower levels of the mip and stops with the smallest level that is specified by the view. If the base resource wasn't created with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong>, and <strong>{{D3D11_RESOURCE_MISC_GENERATE_MIPS}}</strong>, the call to <strong>GenerateMips</strong> has no effect.</p><p>Feature levels 9.1, 9.2, and 9.3 can't support automatic generation of mipmaps for 3D (volume) textures.</p><p>Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:</p><pre> {{DXGI_FORMAT_R8G8B8A8_UNORM}} +{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B5G6R5_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B8G8R8X8_UNORM}} +{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}} +</pre><p>Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:</p><pre> {{DXGI_FORMAT_R16G16B16A16_FLOAT}} +{{DXGI_FORMAT_R16G16B16A16_UNORM}} +{{DXGI_FORMAT_R16G16_FLOAT}} +{{DXGI_FORMAT_R16G16_UNORM}} +{{DXGI_FORMAT_R32_FLOAT}} +</pre><p>Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:</p><pre> {{DXGI_FORMAT_R32G32B32A32_FLOAT}} +{{DXGI_FORMAT_B4G4R4A4}} (optional) +</pre><p>Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:</p><pre> {{DXGI_FORMAT_R32G32B32_FLOAT}} (optional) +{{DXGI_FORMAT_R16G16B16A16_SNORM}} +{{DXGI_FORMAT_R32G32_FLOAT}} +{{DXGI_FORMAT_R10G10B10A2_UNORM}} +{{DXGI_FORMAT_R11G11B10_FLOAT}} +{{DXGI_FORMAT_R8G8B8A8_SNORM}} +{{DXGI_FORMAT_R16G16_SNORM}} +{{DXGI_FORMAT_R8G8_UNORM}} +{{DXGI_FORMAT_R8G8_SNORM}} +{{DXGI_FORMAT_R16_FLOAT}} +{{DXGI_FORMAT_R16_UNORM}} +{{DXGI_FORMAT_R16_SNORM}} +{{DXGI_FORMAT_R8_UNORM}} +{{DXGI_FORMAT_R8_SNORM}} +{{DXGI_FORMAT_A8_UNORM}} +{{DXGI_FORMAT_B5G5R5A1_UNORM}} (optional) +</pre><p>For all other unsupported formats, <strong>GenerateMips</strong> will silently fail.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11ShaderResourceView}}</strong> interface that represents the shader resource.</p> </dd> + + + + + <p>Sets the minimum level-of-detail ({{LOD}}) for a resource.</p> + <p>To use a resource with <strong>SetResourceMinLOD</strong>, you must set the <strong>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}}</strong> flag when you create that resource.</p><p>For Direct3D 10 and Direct3D 10.1, when sampling from a texture resource in a shader, the sampler can define a minimum {{LOD}} clamp to force sampling from less detailed mip levels. For Direct3D 11, this functionality is extended from the sampler to the entire resource. Therefore, the application can specify the highest-resolution mip level of a resource that is available for access. This restricts the set of mip levels that are required to be resident in {{GPU}} memory, thereby saving memory.</p><p>The set of mip levels resident per-resource in {{GPU}} memory can be specified by the user.</p><p>Minimum {{LOD}} affects all of the resident mip levels. Therefore, only the resident mip levels can be updated and read from.</p><p>All methods that access texture resources must adhere to minimum {{LOD}} clamps.</p><p>Empty-set accesses are handled as out-of-bounds cases.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> that represents the resource.</p> </dd> + + + <dd> <p>The level-of-detail, which ranges between 0 and the maximum number of mipmap levels of the resource. For example, the maximum number of mipmap levels of a 1D texture is specified in the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE1D_DESC}}</strong> structure.</p> </dd> + + + + + <p>Gets the minimum level-of-detail ({{LOD}}).</p> + <p>Returns the minimum {{LOD}}.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> which represents the resource.</p> </dd> + + + + + <p>Copy a multisampled resource into a non-multisampled resource.</p> + <p>This {{API}} is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.</p><p>The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this:</p><table> <tr><th>Scenario</th><th>Requirements</th></tr> <tr><td>Source and destination are prestructured and typed</td><td>Both the source and destination must have identical formats and that format must be specified in the Format parameter.</td></tr> <tr><td>One resource is prestructured and typed and the other is prestructured and typeless</td><td>The typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is {{DXGI_FORMAT_R32_FLOAT}} and the typeless resource is {{DXGI_FORMAT_R32_TYPELESS}}). The format of the typed resource must be specified in the Format parameter.</td></tr> <tr><td>Source and destination are prestructured and typeless</td><td>Both the source and desintation must have the same typeless format (i.e. both must have {{DXGI_FORMAT_R32_TYPELESS}}), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are {{DXGI_FORMAT_R32_TYPELESS}} then {{DXGI_FORMAT_R32_FLOAT}} could be specified in the Format parameter). <p>For example, given the {{DXGI_FORMAT_R16G16B16A16_TYPELESS}} format:</p> <ul> <li>The source (or dest) format could be {{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>The dest (or source) format could be {{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D11Resource}}</strong>.</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. Use <strong>{{D3D11CalcSubresource}}</strong> to calculate the index.</p> </dd> + + + <dd> <p>Source resource. Must be multisampled.</p> </dd> + + + <dd> <p>The source subresource of the source resource.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.</p> </dd> + + + + + <p>Queues commands from a command list onto a device.</p> + <p>Use this method to play back a command list that was recorded by a deferred context on any thread.</p><p> A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto the immediate context is required for the recorded commands to be executed on the graphics processing unit ({{GPU}}). A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto another deferred context can be used to merge recorded lists. But to run the commands from the merged deferred command list on the {{GPU}}, you need to execute them on the immediate context. </p><p> This method performs some runtime validation related to queries. Queries that are begun in a device context cannot be manipulated indirectly by executing a command list (that is, Begin or End was invoked against the same query by the deferred context which generated the command list). If such a condition occurs, the ExecuteCommandList method does not execute the command list. However, the state of the device context is still maintained, as would be expected (<strong>{{ID3D11DeviceContext::ClearState}}</strong> is performed, unless the application indicates to preserve the device context state). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11CommandList}}</strong> interface that encapsulates a command list. </p> </dd> + + + <dd> <p> A Boolean flag that determines whether the target context state is saved prior to and restored after the execution of a command list. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that no state shall be saved or restored, which causes the target context to return to its default state after the command list executes. Applications should typically use <strong>{{FALSE}}</strong> unless they will restore the state to be nearly equivalent to the state that the runtime would restore if <strong>{{TRUE}}</strong> were passed. When applications use <strong>{{FALSE}}</strong>, they can avoid unnecessary and inefficient state transitions. </p> </dd> + + + + + <p>Bind an array of shader resources to the hull-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set a hull shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a hull shader (see <strong>{{ID3D11HullShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the hull-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set the constant buffers used by the hull-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{HSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an array of shader resources to the domain-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set a domain shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the domain-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the domain-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{DSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the compute-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets an array of views for an unordered resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index of the first element in the zero-based array to begin setting (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1). {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64.</p> </dd> + + + <dd> <p> Number of views to set (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D11UnorderedAccessView}}</strong> references to be set by the method. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is only relevant for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set a compute shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a compute shader (see <strong>{{ID3D11ComputeShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the compute-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre>//Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the compute-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{CSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Get the constant buffers used by the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p> Get the pixel shader currently set on the device. </p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed, to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns nothing. </p> + + + <dd> <p> Address of a reference to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>) to be returned by the method. </p> </dd> + + + <dd> <p> Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). </p> </dd> + + + <dd> <p> The number of class-instance elements in the array. </p> </dd> + + + + + <p>Get an array of sampler states from the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the vertex shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get the constant buffers used by the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get a reference to the input-layout object that is bound to the input-assembler stage.</p> + <p>For information about creating an input-layout object, see Creating the Input-Layout Object.</p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p>Get the vertex buffers bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>The input slot of the first vertex buffer to get. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to {{D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT}} - 1) are available; the maximum number of input slots depends on the feature level.</p> </dd> + + + <dd> <p>The number of vertex buffers to get starting at the offset. The number of buffers (plus the starting slot) cannot exceed the total number of {{IA}}-stage input slots.</p> </dd> + + + <dd> <p>A reference to an array of vertex buffers returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Pointer to an array of stride values returned by the method; one stride value for each buffer in the vertex-buffer array. Each stride value is the size (in bytes) of the elements that are to be used from that vertex buffer.</p> </dd> + + + <dd> <p>Pointer to an array of offset values returned by the method; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.</p> </dd> + + + + + <p>Get a reference to the index buffer that is bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an index buffer returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Specifies format of the data in the index buffer (see <strong>{{DXGI_FORMAT}}</strong>). These formats provide the size and type of the data in the buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers.</p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer, to the first index to use.</p> </dd> + + + + + <p>Get the constant buffers used by the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the geometry shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the type of primitive, and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>).</p> </dd> + + + + + <p>Get the vertex shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler states from the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the rendering predicate state.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>). Value stored here will be <strong>{{NULL}}</strong> upon device creation.</p> </dd> + + + <dd> <p>Address of a boolean to fill with the predicate comparison value. <strong>{{FALSE}}</strong> upon device creation.</p> </dd> + + + + + <p>Get the geometry shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of render targets to retrieve.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s which represent render target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of a render target is not needed. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not needed.</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>The number of render-target views to retrieve.</p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s, which represent render-target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of render-target views is not required. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not required. </p> </dd> + + + <dd> <p> Index into a zero-based array to begin retrieving unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1). For pixel shaders <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views that are bound. </p> </dd> + + + <dd> <p> Number of unordered-access views to return in <em>ppUnorderedAccessViews</em>. This number ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s, which represent unordered-access views that are retrieved. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of unordered-access views is not required. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Gets the depth-stencil state of the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Address of a reference to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to be filled with information from the device. </p> </dd> + + + <dd> <p>Pointer to the stencil reference value used in the depth-stencil test.</p> </dd> + + + + + <p>Get the target output buffers for the stream-output stage of the pipeline.</p> + <p>A maximum of four output buffers can be retrieved.</p><p> The offsets to the output buffers pointed to in the returned <em>ppSOTargets</em> array may be assumed to be -1 (append), as defined for use in <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>. </p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of buffers to get.</p> </dd> + + + <dd> <p> An array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to be retrieved from the device. </p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Gets the array of viewports bound to the rasterizer stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a variable that, on input, specifies the number of viewports (ranges from 0 to <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong>) in the <em>pViewports</em> array; on output, the variable contains the actual number of viewports that are bound to the rasterizer stage. If <em>pViewports</em> is <strong>{{NULL}}</strong>, <strong>{{RSGetViewports}}</strong> fills the variable with the number of viewports currently bound.</p> <strong>Note</strong>?? In some versions of the Windows {{SDK}}, a debug device will raise an exception if the input value in the variable to which <em>pNumViewports</em> points is greater than <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong> even if <em>pViewports</em> is <strong>{{NULL}}</strong>. The regular runtime ignores the value in the variable to which <em>pNumViewports</em> points when <em>pViewports</em> is <strong>{{NULL}}</strong>. This behavior of a debug device might be corrected in a future release of the Windows {{SDK}}. ? </dd> + + + <dd> <p> An array of <strong>{{D3D11_VIEWPORT}}</strong> structures for the viewports that are bound to the rasterizer stage. If the number of viewports (in the variable to which <em>pNumViewports</em> points) is greater than the actual number of viewports currently bound, unused elements of the array contain 0. For info about how the viewport size depends on the device feature level, which has changed between Direct3D 11 and Direct3D 10, see <strong>{{D3D11_VIEWPORT}}</strong>. </p> </dd> + + + + + <p>Get the array of scissor rectangles bound to the rasterizer stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>The number of scissor rectangles (ranges between 0 and {{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}) bound; set <em>pRects</em> to <strong>{{NULL}}</strong> to use <em>pNumRects</em> to see how many rectangles would be returned.</p> </dd> + + + <dd> <p>An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). If NumRects is greater than the number of scissor rects currently bound, then unused members of the array will contain 0.</p> </dd> + + + + + <p>Get the hull-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the hull shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a hull shader (see <strong>{{ID3D11HullShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the constant buffers used by the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the domain-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the domain shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the compute-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Gets an array of views for an unordered resource.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index of the first element in the zero-based array to return (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of views to get (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>A reference to an array of interface references (see <strong>{{ID3D11UnorderedAccessView}}</strong>) to get.</p> </dd> + + + + + <p>Get the compute shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a Compute shader (see <strong>{{ID3D11ComputeShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Restore all default settings.</p> + <p>This method resets any device context to the default settings. This sets all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to <strong>{{NULL}}</strong>. The primitive topology is set to {{UNDEFINED}}.</p><p>For a scenario where you would like to clear a list of commands recorded so far, call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> and throw away the resulting <strong>{{ID3D11CommandList}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}).</p> + <p>Most applications don't need to call this method. If an application calls this method when not necessary, it incurs a performance penalty. Each call to <strong>Flush</strong> incurs a significant amount of overhead.</p><p>When Microsoft Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. <strong>Flush</strong> sends those commands to the {{GPU}} for processing. Typically, the Direct3D runtime sends these commands to the {{GPU}} automatically whenever the runtime determines that they need to be sent, such as when the command buffer is full or when an application maps a resource. <strong>Flush</strong> sends the commands manually.</p><p>We recommend that you use <strong>Flush</strong> when the {{CPU}} waits for an arbitrary amount of time (such as when you call the <strong>Sleep</strong> function).</p><p>Because <strong>Flush</strong> operates asynchronously, it can return either before or after the {{GPU}} finishes executing the queued graphics commands. However, the graphics commands eventually always complete. You can call the <strong>{{ID3D11Device::CreateQuery}}</strong> method with the <strong>{{D3D11_QUERY_EVENT}}</strong> value to create an event query; you can then use that event query in a call to the <strong>{{ID3D11DeviceContext::GetData}}</strong> method to determine when the {{GPU}} is finished processing the graphics commands. +</p><p>Microsoft Direct3D?11 defers the destruction of objects. Therefore, an application can't rely upon objects immediately being destroyed. By calling <strong>Flush</strong>, you destroy any objects whose destruction was deferred. If an application requires synchronous destruction of an object, we recommend that the application release all its references, call <strong>{{ID3D11DeviceContext::ClearState}}</strong>, and then call <strong>Flush</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the type of device context.</p> + <p>A member of <strong>{{D3D11_DEVICE_CONTEXT_TYPE}}</strong> that indicates the type of device context.</p> + + + + <p>Gets the initialization flags associated with the current deferred context.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + + + + <p>Create a command list and record graphics commands into it.</p> + <p> Create a command list from a deferred context and record commands into it by calling <strong>FinishCommandList</strong>. Play back a command list with an immediate context by calling <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p><p> Immediate context state is cleared before and after a command list is executed. A command list has no concept of inheritance. Each call to <strong>FinishCommandList</strong> will record only the state set since any previous call to <strong>FinishCommandList</strong>. </p><p> For example, the state of a device context is its render state or pipeline state. To retrieve device context state, an application can call <strong>{{ID3D11DeviceContext::GetData}}</strong> or <strong>{{ID3D11DeviceContext::GetPredication}}</strong>. </p><p> For more information about how to use <strong>FinishCommandList</strong>, see How to: Record a Command List. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns {{DXGI_ERROR_DEVICE_REMOVED}} if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.</li> <li> Returns {{DXGI_ERROR_INVALID_CALL}} if <strong>FinishCommandList</strong> cannot be called from the current context. See remarks. </li> <li>Returns {{E_OUTOFMEMORY}} if the application has exhausted available memory.</li> </ul> + + + <dd> <p> A Boolean flag that determines whether the runtime saves deferred context state before it executes <strong>FinishCommandList</strong> and restores it afterwards. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that the runtime will not save or restore any state. In this case, the deferred context will return to its default state after the call to <strong>FinishCommandList</strong> completes. For information about default state, see <strong>{{ID3D11DeviceContext::ClearState}}</strong>. Typically, use <strong>{{FALSE}}</strong> unless you restore the state to be nearly equivalent to the state that the runtime would restore if you passed <strong>{{TRUE}}</strong>. When you use <strong>{{FALSE}}</strong>, you can avoid unnecessary and inefficient state transitions. </p> <strong>Note</strong>?? This parameter does not affect the command list that the current call to <strong>FinishCommandList</strong> returns. However, this parameter affects the command list of the next call to <strong>FinishCommandList</strong> on the same deferred context. ? </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11CommandList}}</strong> interface reference is initialized with the recorded command list information. The resulting <strong>{{ID3D11CommandList}}</strong> object is immutable and can only be used with <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p> </dd> + + + + + <p>Represents a hardware-accelerated video decoder for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> + + + + <p>Gets the parameters that were used to create the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that receives a description of the video stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that receives the decoder configuration.</p> </dd> + + + + + <p>Gets a handle to the driver.</p> + <p>The driver handle can be used to configure content protection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the driver.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Queries whether the video processor supports a specified video format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The video format to query, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the capabilities of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure that receives the capabilities.</p> </dd> + + + + + <p>Returns a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + <p>The capabilities defined in the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure are interdependent. Therefore, the driver can support multiple, distinct groups of these capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the group to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the frame-rate conversion capabilities.</p> </dd> + + + + + <p>Gets a list of custom frame rates that a video processor supports.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the frame-rate capability group. To get the maxmum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}} </strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>The zero-based index of the custom rate to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> and check the <strong>CustomRateCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure.</p> <p>This index value is always relative to the capability group specified in the <em>TypeIndex</em> parameter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CUSTOM_RATE}}</strong> structure that receives the custom rate.</p> </dd> + + + + + <p>Gets the range of values for an image filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of image filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER_RANGE}}</strong> structure. The method fills the structure with the range of values for the specified filter.</p> </dd> + + + + + <p>Represents a video processor for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> + + + + <p>Gets the content description that was used to create the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the rate conversion capabilities of the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the rate conversion capabilities.</p> </dd> + + + + + <p>Provides a communication channel with the graphics driver or the Microsoft Direct3D runtime. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateAuthenticatedChannel}}</strong>.</p> + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes.</p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the authenticated channel.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the channel.</p> </dd> + + + + + <p>Represents a cryptographic session. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateCryptoSession}}</strong>.</p> + + + + <p>Gets the type of encryption that is supported by this session.</p> + <p>The application specifies the encryption type when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a {{GUID}} that specifies the encryption type. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets the decoding profile of the session.</p> + <p>The application specifies the profile when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. </p> </dd> + + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>To get the certificate, call <strong>{{ID3D11CryptoSession::GetCertificate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes. </p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the cryptographic session.</p> + <p>You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the session.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video decoding.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video decoder output view. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the input surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorInputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor input view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor output view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + <p>Gets a reference to a decoder buffer.</p> + <p>The graphics driver allocates the buffers that are used for decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call <strong>{{ID3D11VideoContext::ReleaseDecoderBuffer}}</strong> to unlock the surface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>The type of buffer to retrieve, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the size of the buffer, in bytes. </p> </dd> + + + <dd> <p>Receives a reference to the start of the memory buffer. </p> </dd> + + + + + <p>Releases a buffer that was obtained by calling the <strong>{{ID3D11VideoContext::GetDecoderBuffer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Starts a decoding operation to decode a video frame.</p> + <p>After this method is called, call <strong>{{ID3D11VideoContext::SubmitDecoderBuffers}}</strong> to perform decoding operations. When all decoding operations have been executed, call <strong>{{ID3D11VideoContext::DecoderEndFrame}}</strong>. </p><p>Each call to <strong>DecoderBeginFrame</strong> must have a matching call to <strong>DecoderEndFrame</strong>. In most cases you cannot nest <strong>DecoderBeginFrame</strong> calls, but some codecs, such as like {{VC}}-1, can have nested <strong>DecoderBeginFrame</strong> calls for special operations like post processing.</p><p>The following encryption scenarios are supported through the content key:</p><ul> <li>The decoder can choose to not encrypt every frame, for example it may only encrypt the I frames and not encrypt the P/B frames. In these scenario, the decoder will specify pContentKey = {{NULL}} and ContentKeySize = 0 for those frames that it does not encrypt.</li> <li>The decoder can choose to encrypt the compressed buffers using the session key. In this scenario, the decoder will specify a content key containing all zeros.</li> <li>The decoder can choose to encrypt the compressed buffers using a separate content key. In this scenario, the decoder will {{ECB}} encrypt the content key using the session key and pass the encrypted content key.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. <strong>{{D3DERR_WASSTILLDRAWING}}</strong> or <strong>{{E_PENDING}}</strong> is returned if the harware is busy, in which case the decoder should try to make the call again.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. This interface describes the resource that will receive the decoded frame. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> </dd> + + + <dd> <p>The size of the content key that is specified in <em>pContentKey</em>. If <em>pContentKey</em> is {{NULL}}, set <em>ContentKeySize</em> to zero.</p> </dd> + + + <dd> <p>An optional reference to a content key that was used to encrypt the frame data. If no content key was used, set this parameter to <strong>{{NULL}}</strong>. If the caller provides a content key, the caller must use the session key to encrypt the content key.</p> </dd> + + + + + <p>Signals the end of a decoding operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p><p>When using feature levels 9_x, all partially encrypted buffers must use the same EncryptedBlockInfo, and partial encryption cannot be turned off on a per frame basis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Performs an extended function for decoding. This method enables extensions to the basic decoder functionality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_EXTENSION}}</strong> structure that contains data for the function.</p> </dd> + + + + + <p>Sets the target rectangle for the video processor.</p> + <p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor writes to the entire destination surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to apply the target rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the target rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the background color for the video processor.</p> + <p>The video processor uses the background color to fill areas of the target rectangle that do not contain a video image. Areas outside the target rectangle are not affected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the color is specified as a {{YCbCr}} value. Otherwise, the color is specified as an {{RGB}} value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure that specifies the background color.</p> </dd> + + + + + <p>Sets the output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the alpha fill mode for data that the video processor writes to the render target.</p> + <p>To find out which fill modes the device supports, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. If the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL}}</strong> capability, the driver supports all of the fill modes. Otherwise, the <em>AlphaFillMode</em> parameter must be <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>. </p><p>The default fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The alpha fill mode, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>The zero-based index of an input stream. This parameter is used if <em>AlphaFillMode</em> is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>. Otherwise, the parameter is ignored.</p> </dd> + + + + + <p>Sets the amount of downsampling to perform on the output.</p> + <p>Downsampling is sometimes used to reduce the quality of premium content when other forms of content protection are not available. By default, downsampling is disabled.</p><p>If the <em>Enable</em> parameter is <strong>{{TRUE}}</strong>, the driver downsamples the composed image to the specified size, and then scales it back to the size of the target rectangle.</p><p>The width and height of <em>Size</em> must be greater than zero. If the size is larger than the target rectangle, downsampling does not occur.</p><p>To use this feature, the driver must support downsampling, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, downsampling is enabled. Otherwise, downsampling is disabled and the <strong>Size</strong> member is ignored. </p> </dd> + + + <dd> <p>The sampling size.</p> </dd> + + + + + <p>Specifies whether the video processor produces stereo video frames.</p> + <p>By default, the video processor produces mono video frames.</p><p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, stereo output is enabled. Otherwise, the video processor produces mono video frames.</p> </dd> + + + + + <p>Sets a driver-specific video processing state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the current target rectangle for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the target rectangle was explicitly set using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputTargetRect}}</strong> method. Receives the value {{FALSE}} if the target rectangle was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the target rectangle. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the current background color for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the background color is a {{YCbCr}} color, or <strong>{{FALSE}}</strong> if the background color is an {{RGB}} color.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure. The method fills in the structure with the background color.</p> </dd> + + + + + <p>Gets the current output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure. The method fills in the structure with the output color space.</p> </dd> + + + + + <p>Gets the current alpha fill mode for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the alpha fill mode, as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>If the alpha fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>, this parameter receives the zero-based index of an input stream. The input stream provides the alpha values for the alpha fill.</p> </dd> + + + + + <p>Gets the current level of downsampling that is performed by the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if downsampling was explicitly enabled using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong> method. Receives the value <strong>{{FALSE}}</strong> if the downsampling was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the downsampling size. Otherwise, this parameter is ignored.</p> </dd> + + + + + <p>Queries whether the video processor produces stereo video frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo output is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets private state data from the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Specifies whether an input stream on the video processor contains interlaced or progressive frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies the interlacing.</p> </dd> + + + + + <p>Sets the color space for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the rate at which the video processor produces output frames for an input stream.</p> + <p>The standard output rates are normal frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL}}</strong>) and half frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF}}</strong>). In addition, the driver might support custom rates for rate conversion or inverse telecine. To get the list of custom rates, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong>.</p><p>Depending on the output rate, the driver might need to convert the frame rate. If so, the value of <em>RepeatFrame</em> controls whether the driver creates interpolated frames or simply repeats input frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The output rate, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value.</p> </dd> + + + <dd> <p>Specifies how the driver performs frame-rate conversion, if required.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If <em>OutputRate</em> is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, this parameter specifies the exact output rate. Otherwise, this parameter is ignored and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the source rectangle for an input stream on the video processor.</p> + <p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor reads from the entire input surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the destination rectangle for an input stream on the video processor.</p> + <p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p><p>The default destination rectangle is an empty rectangle (0, 0, 0, 0). If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, no data is written from this stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the destination rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the planar alpha for an input stream on the video processor.</p> + <p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALHPA_STREAM}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p><p>Alpha blending is disabled by default. </p><p>For each pixel, the destination color value is computed as follows:</p><p><code>Cd = Cs * (As * Ap * Ae) + Cd * (1.0 - As * Ap * Ae)</code></p><p>where:</p><ul> <li><code>Cd</code> = The color value of the destination pixel</li> <li><code>Cs</code> = The color value of the source pixel</li> <li><code>As</code> = The per-pixel source alpha</li> <li><code>Ap</code> = The planar alpha value</li> <li><code>Ae</code> = The palette-entry alpha value, or 1.0 (see Note)</li> </ul><strong>Note</strong>??Palette-entry alpha values apply only to palettized color formats, and only when the device supports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability. Otherwise, this factor equals 1.0.?<p>The destination alpha value is computed according to the alpha fill mode. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether alpha blending is enabled.</p> </dd> + + + <dd> <p>The planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque). If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use the first 16 entries in the list. Formats with 8 bpp use the first 256 entries.</p><p>If a pixel has a palette index greater than the number of entries, the device treats the pixel as white with opaque alpha. For full-range {{RGB}}, this value is (255, 255, 255, 255); for {{YCbCr}} the value is (255, 235, 128, 128).</p><p>If the driver does not report the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability flag, every palette entry must have an alpha value of 0xFF (opaque). To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of elements in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to an array of palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation. The caller allocates the array.</p> </dd> + + + + + <p>Sets the pixel aspect ratio for an input stream on the video processor.</p> + <p>This function can only be called if the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO}}</strong> capability. If this capability is not set, this function will have no effect.</p><p>Pixel aspect ratios of the form 0/n and n/0 are not valid.</p><p>The default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain valid values. Otherwise, the pixel aspect ratios are unspecified.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the luma key for an input stream on the video processor.</p> + <p>To use this feature, the driver must support luma keying, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>. In addition, if the input format is {{RGB}}, the device must support the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY}}</strong> capability.</p><p>The values of <em>Lower</em> and <em>Upper</em> give the lower and upper bounds of the luma key, using a nominal range of [0...1]. Given a format with <em>n</em> bits per channel, these values are converted to luma values as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>Any pixel whose luma value falls within the upper and lower bounds (inclusive) is treated as transparent.</p><p>For example, if the pixel format uses 8-bit luma, the upper bound is calculated as follows:</p><p><code>{{BYTE}} Y = {{BYTE}}(max(min(1.0, Upper), 0.0) * 255.0)</code></p><p>Note that the value is clamped to the range [0...1] before multiplying by 255.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether luma keying is enabled.</p> </dd> + + + <dd> <p>The lower bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + <dd> <p>The upper bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Enables or disables stereo 3D video for an input stream on the video processor. In addition, this method specifies the layout of the video frames in memory.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether stereo 3D is enabled for this stream. If the value is <strong>{{FALSE}}</strong>, the remaining parameters of this method are ignored.</p> </dd> + + + <dd> <p>Specifies the layout of the two stereo views in memory, as a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the left view. Otherwise, frame 0 contains the right view. </p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> </ul> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the base view. Otherwise, frame 1 contains the base view.</p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> <li>When <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong> is used and the application wants to convert the stereo data to mono, it can either:<ul> <li>Specify the base view as a mono input.</li> <li>Specify both resources and allow the driver to do the conversion from the base view. In this case, <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurface</strong> is considered frame 0 and <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurfaceRight</strong> is considered frame 1.</li> </ul> </li> </ul> </dd> + + + <dd> <p>A flag from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> enumeration, specifying whether one of the views is flipped.</p> </dd> + + + <dd> <p>For <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format, this parameter specifies how to generate the left and right views: </p> <ul> <li>If <em>MonoOffset</em> is positive, the right view is shifted to the right by that many pixels, and the left view is shifted to the left by the same amount. </li> <li>If <em>MonoOffset</em> is negative, the right view is shifted to the left by that many pixels, and the left view is shifted to right by the same amount.</li> </ul> <p>If <em>Format</em> is not <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong>, this parameter must be zero.</p> </dd> + + + + + <p>Enables or disables automatic processing features on the video processor.</p> + <p>By default, the driver might perform certain processing tasks automatically during the video processor blit. This method enables the application to disable these extra video processing features. For example, if you provide your own pixel shader for the video processor, you might want to disable the driver's automatic processing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, automatic processing features are enabled. If <strong>{{FALSE}}</strong>, the driver disables any extra video processing that it might be performing.</p> </dd> + + + + + <p>Enables or disables an image filter for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> <p>To query which filters the driver supports, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to enable the filter.</p> </dd> + + + <dd> <p>The filter level. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored. </p> <p>To find the valid range of levels for a specified filter, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange}}</strong>.</p> </dd> + + + + + <p>Sets a driver-specific state on a video processing stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the format of an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies whether the stream contains interlaced or progressive frames.</p> </dd> + + + + + <p>Gets the color space for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> value that specifies the color space.</p> </dd> + + + + + <p>Gets the rate at which the video processor produces output frames for an input stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value that specifies the output rate.</p> </dd> + + + <dd> <p>Receives a Boolean value that specifies how the driver performs frame-rate conversion, if required. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If the output rate is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, the method fills in this structure with the exact output rate. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the source rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the source rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source rectangle.</p> </dd> + + + + + <p>Gets the destination rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the destination rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the destination rectangle.</p> </dd> + + + + + <p>Gets the planar alpha for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if planar alpha is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque).</p> </dd> + + + + + <p>Gets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use 16 palette entries. Formats with 8 bpp use 256 entries.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of entries in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to a <strong>{{UINT}}</strong> array allocated by the caller. The method fills the array with the palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation.</p> </dd> + + + + + <p>Gets the pixel aspect ratio for an input stream on the video processor. </p> + <p>When the method returns, if <em>*pEnabled</em> is <strong>{{TRUE}}</strong>, the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain the pixel aspect ratios. Otherwise, the default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the pixel aspect ratio is specified. Otherwise, receives the value <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the destination rectangle.</p> </dd> + + + + + <p>Gets the luma key for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if luma keying is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the lower bound for the luma key. The valid range is [0?1]. </p> </dd> + + + <dd> <p>Receives the upper bound for the luma key. The valid range is [0?1]. </p> </dd> + + + + + <p>Gets the stereo 3D format for an input stream on the video processor</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo 3D is enabled for this stream, or <strong>{{FALSE}}</strong> otherwise. If the value is <strong>{{FALSE}}</strong>, ignore the remaining parameters.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value that specifies the layout of the two stereo views in memory.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the left view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the right view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the base view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 1 contains the base view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> value. This value specifies whether one of the views is flipped. +</p> </dd> + + + <dd> <p>Receives the pixel offset used for <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format. This parameter is ignored for other stereo formats.</p> </dd> + + + + + <p>Queries whether automatic processing features of the video processor are enabled.</p> + <p>Automatic processing refers to additional image processing that drivers might have performed on the image data prior to the application receiving the data. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if automatic processing features are enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the image filter settings for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter to query, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value. </p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the image filter is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the filter level.</p> </dd> + + + + + <p>Gets a driver-specific state for a video processing stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Performs a video processing operation on one or more input samples and writes the result to a Direct3D surface.</p> + <p>The maximum value of <em>StreamCount</em> is given in the <strong>MaxStreamStates</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. The maximum number of streams that can be enabled at one time is given in the <strong>MaxInputStreams</strong> member of that structure. </p><p>If the output stereo mode is <strong>{{TRUE}}</strong>:</p><ul> <li>The output view must contain a texture array of two elements.</li> <li>At least one stereo stream must be specified.</li> <li>If multiple input streams are enabled, it is possible that one or more of the input streams may contain mono data.</li> </ul><p>Otherwise:</p><ul> <li>The output view must contain a single element.</li> <li>The stereo format cannot be <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}}</strong> .</li> </ul><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface for the output surface. The output of the video processing operation will be written to this surface.</p> </dd> + + + <dd> <p>The frame number of the output video frame, indexed from zero. </p> </dd> + + + <dd> <p>The number of input streams to process.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}</strong> structures that contain information about the input streams. The caller allocates the array and fills in each structure. The number of elements in the array is given in the <em>StreamCount</em> parameter. </p> </dd> + + + + + <p>Establishes the session key for a cryptographic session. </p> + <p>The key exchange mechanism depends on the type of cryptographic session.</p><p>For {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}), the software decoder generates the secret key, encrypts the secret key by using the public key with {{RSAES}}-{{OAEP}}, and places the cipher text in the <em>pData</em> parameter. The actual size of the buffer for {{RSAES}}-{{OAEP}} is 256 bytes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> byte array, in bytes. </p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. </p> </dd> + + + + + <p>Reads encrypted data from a protected surface. </p> + <p>Not all drivers support this method. To query the driver capabilities, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK}}</strong> flag in the <strong>Caps</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p><p>Some drivers might require a separate key to decrypt the data that is read back. To check for this requirement, call <strong>GetContentProtectionCaps</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY}}</strong> flag. If this flag is present, call <strong>{{ID3D11VideoContext::GetEncryptionBltKey}}</strong> to get the decryption key.</p><p>This method has the following limitations:</p><ul> <li>Reading back sub-rectangles is not supported.</li> <li>Reading back partially encrypted surfaces is not supported.</li> <li>The protected surface must be either an off-screen plain surface or a render target.</li> <li>The destination surface must be a {{D3D11_USAGE_STAGING}} resource.</li> <li>The protected surface cannot be multisampled.</li> <li>Stretching and colorspace conversion are not supported.</li> </ul><p> This function does not honor a {{D3D11}} predicate that may have been set.</p><p> If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the protected surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface that receives the encrypted data. +</p> </dd> + + + <dd> <p>A reference to a buffer that receives the initialization vector ({{IV}}). The caller allocates this buffer, but the driver generates the {{IV}}. </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. When the driver generates the first {{IV}}, it initializes the structure to a random number. For each subsequent {{IV}}, the driver simply increments the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. The application can validate that the same {{IV}} is never used more than once with the same key pair.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Writes encrypted data to a protected surface.</p> + <p>Not all hardware or drivers support this functionality for all cryptographic types. This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT}}</strong> cap is reported.</p><p>This method does not support writing to sub-rectangles of the surface.</p><p>If the hardware and driver support a content key:</p><ul> <li>The data is encrypted by the caller using the content key.</li> <li>The content key is encrypted by the caller using the session key.</li> <li>The encrypted content key is passed to the driver.</li> </ul><p> Otherwise, the data is encrypted by the caller using the session key and {{NULL}} is passed as the content key.</p><p>If the driver and hardware support partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted and which is not. If the entire buffer is encrypted, <em>pEncryptedBlockinfo</em> should be <strong>{{NULL}}</strong>.</p><p>The <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> allows the application to indicate which bytes in the buffer are encrypted. This is specified in bytes, so the application must ensure that the encrypted blocks match the {{GPU}}?s crypto block alignment.</p><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to the surface that contains the source data.</p> </dd> + + + <dd> <p>A reference to the protected surface where the encrypted data is written.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure, or <strong>{{NULL}}</strong>.</p> <p>If the driver supports partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted. If the entire surface is encrypted, set this parameter to <strong>{{NULL}}</strong>. </p> <p>To check whether the driver supports partially encrypted buffers, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION}} +</strong> capabilities flag. If the driver does not support partially encrypted buffers, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains a content encryption key, or <strong>{{NULL}}</strong>. To query whether the driver supports the use of content keys, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY}}</strong> capabilities flag. </p> <p>If the driver supports content keys, use the content key to encrypt the surface. Encrypt the content key using the session key, and place the resulting cipher text in <em>pContentKey</em>. If the driver does not support content keys, use the session key to encrypt the surface and set <em>pContentKey</em> to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the encrypted content key, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the initialization vector ({{IV}}). </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. The caller allocates the structure and generates the {{IV}}. When you generate the first {{IV}}, initialize the structure to a random number. For each subsequent {{IV}}, simply increment the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. This procedure enables the driver to validate that the same {{IV}} is never used more than once with the same key pair.</p> <p>For other encryption types, a different structure might be used, or the encryption might not use an {{IV}}.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Gets a random number that can be used to refresh the session key. </p> + <p>To generate a new session key, perform a bitwise <strong>{{XOR}}</strong> between the previous session key and the random number. The new session key does not take affect until the application calls <strong>{{ID3D11VideoContext::FinishSessionKeyRefresh}}</strong>.</p><p>To query whether the driver supports this method, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> capabilities flag.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pRandomNumber</em> array, in bytes. The size should match the size of the session key.</p> </dd> + + + <dd> <p>A reference to a byte array that receives a random number.</p> </dd> + + + + + <p>Switches to a new session key. </p> + <p>This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> cap is reported.</p><p>Before calling this method, call <strong>{{ID3D11VideoContext::StartSessionKeyRefresh}}</strong>. The <strong>StartSessionKeyRefresh</strong> method gets a random number from the driver, which is used to create a new session key. The new session key does not become active until the application calls <strong>FinishSessionKeyRefresh</strong>. After the application calls <strong>FinishSessionKeyRefresh</strong>, all protected surfaces are encrypted using the new session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + + + <p>Gets the cryptographic key to decrypt the data returned by the <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong> method.</p> + <p>This method applies only when the driver requires a separate content key for the <strong>EncryptionBlt</strong> method. For more information, see the Remarks for <strong>EncryptionBlt</strong>.</p><p>Each time this method is called, the driver generates a new key.</p><p>The <em>KeySize</em> should match the size of the session key.</p><p>The read back key is encrypted by the driver/hardware using the session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Establishes a session key for an authenticated channel. </p> + <p>This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> </dd> + + + <dd> <p>The size of the data in the <em>pData</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. The buffer must contain 256 bytes of data, encrypted using {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}). +</p> </dd> + + + + + <p>Sends a query to an authenticated channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure. The <strong>QueryType</strong> member of the structure specifies the query and defines the meaning of the rest of the array.</p> </dd> + + + <dd> <p>The size of the <em>pOutput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the result of the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure. The meaning of the rest of the array depends on the query.</p> </dd> + + + + + <p>Sends a configuration command to an authenticated channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the command. This buffer always starts with a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure. The <strong>ConfigureType</strong> member of the structure specifies the command and defines the meaning of the rest of the buffer.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_OUTPUT}}</strong> structure that receives the response to the command.</p> </dd> + + + + + <p>Sets the stream rotation for an input stream on the video processor.</p> + <p>This is an optional state and the application should only use it if <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION}}</strong> is reported in <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}.FeatureCaps</strong>.</p><p>The stream source rectangle will be specified in the pre-rotation coordinates (typically landscape) and the stream destination rectangle will be specified in the post-rotation coordinates (typically portrait). The application must update the stream destination rectangle correctly when using a rotation value other than 0? and 180?.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is to be rotated in a clockwise orientation. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream.</p> </dd> + + + + + <p>Gets the stream rotation for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is rotated. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream in a clockwise orientation.</p> </dd> + + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device}}</strong> interface reference.</p><p>If you query an <strong>{{ID3D11Device}}</strong> for <strong>{{ID3D11VideoDevice}}</strong> and the Direct3D?11 device created is using the reference rasterizer or {{WARP}}, or is a hardware device and you are using the Microsoft Basic Display Adapter, <strong>{{E_NOINTERFACE}}</strong> is returned.</p> + + + + <p>Creates a video decoder device for Microsoft Direct3D?11.</p> + <p>This method allocates the necessary decoder buffers. </p><p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream and the decoder profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that specifies the decoder configuration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a video processor device for Microsoft Direct3D?11.</p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>Specifies the frame-rate conversion capabilities for the video processor. The value is a zero-based index that corresponds to the <em>TypeIndex</em> parameter of the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a channel to communicate with the Microsoft Direct3D device or the graphics driver. The channel can be used to send commands and queries for content protection.</p> + <p>If the <em>ChannelType</em> parameter is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, the method creates a channel with the Direct3D device. This type of channel does not support authentication.</p><p>If <em>ChannelType</em> is <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE}}</strong> or <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE}}</strong>, the method creates an authenticated channel with the graphics driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of channel, as a member of the <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a cryptographic session to encrypt video content that is sent to the graphics driver. </p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the cryptographic session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to use. The following {{GUIDs}} are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of key exchange.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_KEY_EXCHANGE_RSAES_OAEP}}</strong></dt> </dl> </td><td> <p>The caller will create the session key, encrypt it with {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}) by using the driver's public key, and pass the session key to the driver.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11CryptoSession}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a resource view for a video decoder, describing the output sample for the decoding operation.</p> + <p>Set the <em>ppVDOVView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the decoder surface. The resource must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. The caller must release the interface. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the input sample for the video processing operation.</p> + <p>Set the <em>ppVPIView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>The surface format is given in the <strong>FourCC</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fails if the video processor does not support this format as an input sample. An app must specify 0 when using 9_1, 9_2, or 9_3 feature levels. </p><p>Resources used for video processor input views must use the following bind flag combinations:</p><ul> <li>Any combination of bind flags that includes <strong>{{D3D11_BIND_DECODER}}</strong>,<strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong>, <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, and <strong>{{D3D11_BIND_UNORDERED_ACCESS_VIEW}}</strong> can be used as for video processor input views (regardless of what other bind flags may be set).</li> <li>Bind flags = 0 is also allowed for a video processor input view.</li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the input surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorInputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the output sample for the video processing operation.</p> + <p>Set the <em>ppVPOView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>Resources used for video processor output views must use the following <strong>{{D3D11_BIND_FLAG}}</strong> combinations:</p><ul> <li> <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> indicates that it can be used for a video processor output view. The following bind flags are allowed to be set with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>:<ul> <li> <strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong> </li> <li> <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong> </li> </ul> </li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> <li>Some {{YUV}} formats can be supported as a video processor output view, but might not be supported as a 3D render target. {{D3D11}} will allow the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag for these formats, but <strong>CreateRenderTargetView</strong> will not be allowed for these formats.</li> </ul><p>If stereo output is enabled, the output view must have 2 array elements. Otherwise, it must only have a single array element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the output surface. The resource must be created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Enumerates the video processor capabilities of the driver.</p> + <p>To create the video processor device, pass the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> reference to the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that describes the video content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the number of profiles that are supported by the driver.</p> + <p>To enumerate the profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> + <p>Returns the number of profiles.</p> + + + + <p>Gets a profile that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the profile. To get the number of profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfileCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the profile.</p> </dd> + + + + + <p>Given aprofile, checks whether the driver supports a specified output format.</p> + <p>If the driver does not support the profile given in <em>pDecoderProfile</em>, the method returns <strong>{{E_INVALIDARG}}</strong>. If the driver supports the profile, but the {{DXGI}} format is not compatible with the profile, the method succeeds but returns the value <strong>{{FALSE}}</strong> in <em>pSupported</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that identifies the profile. To get the list of supported profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> value that specifies the output format. Typical values include <strong>{{DXGI_FORMAT_NV12}}</strong> and <strong>{{DXGI_FORMAT_420_OPAQUE}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the format is supported, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the number of decoder configurations that the driver supports for a specified video description.</p> + <p>To enumerate the decoder configurations, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfig}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>Receives the number of decoder configurations.</p> </dd> + + + + + <p>Gets a decoder configuration that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>The zero-based index of the decoder configuration. To get the number of configurations that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfigCount}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure. The method fills in the structure with the decoder configuration.</p> </dd> + + + + + <p>Queries the driver for its content protection capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> <p>If no encryption will be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> <p>The driver might disallow some combinations of encryption type and profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure. The method fills in this structure with the driver's content protection capabilities. </p> </dd> + + + + + <p>Gets a cryptographic key-exchange mechanism that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the key-exchange type. The driver reports the number of types in the <strong>KeyExchangeTypeCount</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the type of key exchange.</p> </dd> + + + + + <p>Sets private data on the video device and associates that data with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} associated with the data.</p> </dd> + + + <dd> <p>The size of the data, in bytes.</p> </dd> + + + <dd> <p>A reference to the data.</p> </dd> + + + + + <p>Sets a private <strong>{{IUnknown}}</strong> reference on the video device and associates that reference with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p> + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a buffer (vertex buffer, index buffer, or shader-constant buffer).</p> + <p> For example code, see How to: Create a Vertex Buffer, How to: Create an Index Buffer or How to: Create a Constant Buffer. </p><p> For a constant buffer (<strong>BindFlags</strong> of <strong>{{D3D11_BUFFER_DESC}}</strong> set to <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>), you must set the <strong>ByteWidth</strong> value of <strong>{{D3D11_BUFFER_DESC}}</strong> in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, provides the following new functionality for <strong>CreateBuffer</strong>: </p><p> You can create a constant buffer that is larger than the maximum constant buffer size that a shader can access (4096 32-bit*4-component constants ? 64KB). When you bind the constant buffer to the pipeline (for example, via <strong>{{PSSetConstantBuffers}}</strong> or <strong>{{PSSetConstantBuffers1}}</strong>), you can define a range of the buffer that the shader can access that fits within the 4096 constant limit. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. On existing drivers that are implemented to feature level 10 and higher, a call to <strong>CreateBuffer</strong> to request a constant buffer that is larger than 4096 fails. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the buffer. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure that describes the initialization data; use <strong>{{NULL}}</strong> to allocate space only (with the exception that it cannot be <strong>{{NULL}}</strong> if the usage flag is <strong>{{D3D11_USAGE_IMMUTABLE}}</strong>). </p> <p> If you don't pass anything to <em>pInitialData</em>, the initial content of the memory for the buffer is undefined. In this case, you need to write the buffer content some other way before the resource is read. </p> </dd> + + + <dd> <p> Address of a reference to the <strong>{{ID3D11Buffer}}</strong> interface for the buffer object created. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (<strong>{{S_FALSE}}</strong> indicates a pass). </p> </dd> + + + + + <p>Creates an array of 1D textures.</p> + <p><strong>CreateTexture1D</strong> creates a 1D texture resource, which can contain a number of 1D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 width texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x1</li> <li>pInitialData[1] = 16x1</li> <li>pInitialData[2] = 8x1</li> <li>pInitialData[3] = 4x1 +</li> <li>pInitialData[4] = 2x1 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create an array of 2D textures.</p> + <p><strong>CreateTexture2D</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or it may use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a single 3D texture.</p> + <p><strong>CreateTexture3D</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a shader-resource view for accessing data in a resource.</p> + <p> A resource is made up of one or more subresources; a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following {{API}} methods: <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong> and <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>. </p><p>Because a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.</p><strong>Note</strong>?? To successfully create a shader-resource view from a typeless buffer (for example, <strong>{{DXGI_FORMAT_R32G32B32A32_TYPELESS}}</strong>), you must set the <strong>{{D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS}}</strong> flag when you create the buffer.?<p> The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateShaderResourceView</strong> for the following new purpose. </p><p> You can create shader-resource views of video resources so that Direct3D shaders can process those shader-resource views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure for a created shader-resource view must match the type of video resource, {{D3D11_SRV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_SRV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to. </p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}} </strong> flag. </p> </dd> + + + <dd> <p> Pointer to a shader-resource view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with). </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11ShaderResourceView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation). </p> </dd> + + + + + <p>Creates a view for accessing an unordered access resource.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateUnorderedAccessView</strong> for the following new purpose. </p><p>You can create unordered-access views of video resources so that Direct3D shaders can process those unordered-access views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure for a created unordered-access view must match the type of video resource, {{D3D11_UAV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_UAV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateRenderTargetView</strong> for the following new purpose. </p><p>You can create render-target views of video resources so that Direct3D shaders can process those render-target views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> structure for a created render-target view must match the type of video resource, {{D3D11_RTV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_RTV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11RenderTargetView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create a depth-stencil view for accessing resource data.</p> + <p>A depth-stencil view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to the resource that will serve as the depth-stencil surface. This resource must have been created with the <strong>{{D3D11_BIND_DEPTH_STENCIL}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses mipmap level 0 of the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11DepthStencilView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create an input-layout object to describe the input-buffer data for the input-assembler stage.</p> + <p>After creating an input layout object, it must be bound to the input-assembler stage before calling a draw {{API}}.</p><p>Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.</p><p> If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes. </p> + + + <dd> <p> An array of the input-assembler stage input data types; each type is described by an element description (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>). </p> </dd> + + + <dd> <p>The number of input-data types in the array of input-elements.</p> </dd> + + + <dd> <p> A reference to the compiled shader. The compiled shader code contains a input signature which is validated against the array of elements. See remarks. </p> </dd> + + + <dd> <p>Size of the compiled shader.</p> </dd> + + + <dd> <p> A reference to the input-layout object created (see <strong>{{ID3D11InputLayout}}</strong>). To validate the other input parameters, set this reference to be <strong>{{NULL}}</strong> and verify that the method returns {{S_FALSE}}. </p> </dd> + + + + + <p>Create a vertex-shader object from a compiled shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateVertexShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a vertex shader, you can successfully pass the compiled vertex shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateVertexShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateVertexShader</strong> fails. <strong>CreateVertexShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled vertex shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11VertexShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return <strong>{{S_FALSE}}</strong> instead of <strong>{{S_OK}}</strong>.</p> </dd> + + + + + <p>Create a geometry shader.</p> + <p>After it is created, the shader can be set to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShader</strong> fails. <strong>CreateGeometryShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11GeometryShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Creates a geometry shader that can write to streaming output buffers.</p> + <p> For more info about using <strong>CreateGeometryShaderWithStreamOutput</strong>, see Create a Geometry-Shader Object with Stream Output. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShaderWithStreamOutput</strong>. </p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p> Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShaderWithStreamOutput</strong> succeeds. </p><p> If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShaderWithStreamOutput</strong> fails. <strong>CreateGeometryShaderWithStreamOutput</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports. </p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li> All atomics and immediate atomics (for example, atomic_and and imm_atomic_and) </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.</p> <p> To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the <strong>{{D3DGetOutputSignatureBlob}}</strong> compiler function. You can also pass a reference to the compiled shader for the prior stage (for example, the vertex-shader stage or domain-shader stage). This compiled shader provides the output signature for the data. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{D3D11_SO_DECLARATION_ENTRY}}</strong> array. Cannot be <strong>{{NULL}}</strong> if NumEntries &gt; 0. </p> </dd> + + + <dd> <p>The number of entries in the stream output declaration ( ranges from 0 to {{D3D11_SO_STREAM_COUNT}} * {{D3D11_SO_OUTPUT_COMPONENT_COUNT}} ).</p> </dd> + + + <dd> <p>An array of buffer strides; each stride is the size of an element for that buffer.</p> </dd> + + + <dd> <p> The number of strides (or buffers) in <em>pBufferStrides</em> (ranges from 0 to {{D3D11_SO_BUFFER_SLOT_COUNT}}). </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage (ranges from 0 to {{D3D11_SO_STREAM_COUNT}} - 1). Set to {{D3D11_SO_NO_RASTERIZED_STREAM}} if no stream is to be rasterized. </p> </dd> + + + <dd> <p> A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11GeometryShader}}</strong> interface, representing the geometry shader that was created. Set this to <strong>{{NULL}}</strong> to validate the other parameters; if validation passes, the method will return {{S_FALSE}} instead of {{S_OK}}. </p> </dd> + + + + + <p>Create a pixel shader.</p> + <p>After creating the pixel shader, you can set it to the device using <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled pixel shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11PixelShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Create a hull shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateHullShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a hull shader, you can successfully pass the compiled hull shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateHullShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateHullShader</strong> fails. <strong>CreateHullShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Create a domain shader .</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateDomainShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a domain shader, you can successfully pass the compiled domain shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateDomainShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateDomainShader</strong> fails. <strong>CreateDomainShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Create a compute shader.</p> + <p>For an example, see How To: Create a Compute Shader and {{HDRToneMappingCS11}} Sample.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates class linkage libraries to enable dynamic shader linkage.</p> + <p>The <strong>{{ID3D11ClassLinkage}}</strong> interface returned in <em>ppLinkage</em> is associated with a shader by passing it as a parameter to one of the <strong>{{ID3D11Device}}</strong> create shader methods such as <strong>{{ID3D11Device::CreatePixelShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a class-linkage interface reference (see <strong>{{ID3D11ClassLinkage}}</strong>).</p> </dd> + + + + + <p>Create a blend-state object that encapsules blend state for the output-merger stage.</p> + <p> An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> Pointer to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>). </p> </dd> + + + <dd> <p> Address of a reference to the blend-state object created (see <strong>{{ID3D11BlendState}}</strong>). </p> </dd> + + + + + <p>Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.</p> + <p>4096 unique depth-stencil state objects can be created on a device at a time.</p><p>If an application attempts to create a depth-stencil-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique depth-stencil state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a depth-stencil state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the depth-stencil state object created (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Create a rasterizer state object that tells the rasterizer stage how to behave.</p> + <p>4096 unique rasterizer state objects can be created on a device at a time.</p><p>If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a rasterizer state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the rasterizer state object created (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Create a sampler-state object that encapsulates sampling information for a texture.</p> + <p>4096 unique sampler state objects can be created on a device at a time.</p><p>If an application attempts to create a sampler-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique sampler state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a sampler state description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the sampler state object created (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates methods for querying information from the {{GPU}}.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the query object created (see <strong>{{ID3D11Query}}</strong>).</p> </dd> + + + + + <p>Creates a predicate.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a query description where the type of query must be a {{D3D11_QUERY_SO_OVERFLOW_PREDICATE}} or {{D3D11_QUERY_OCCLUSION_PREDICATE}} (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>).</p> </dd> + + + + + <p>Create a counter object for measuring {{GPU}} performance.</p> + <p>If this function succeeds, it will return {{S_OK}}. If it fails, possible return values are: {{S_FALSE}}, {{E_OUTOFMEMORY}}, {{DXGI_ERROR_UNSUPPORTED}}, {{DXGI_ERROR_NONEXCLUSIVE}}, or {{E_INVALIDARG}}.</p><p>{{DXGI_ERROR_UNSUPPORTED}} is returned whenever the application requests to create a well-known counter, but the current device does not support it.</p><p>{{DXGI_ERROR_NONEXCLUSIVE}} indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.</p><p>{{E_INVALIDARG}} is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a counter (see <strong>{{ID3D11Counter}}</strong>).</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. Using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After all scene items are recorded, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device}}</strong>, the <strong>CreateDeferredContext</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Get the support of a given format on the installed video device.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Format</em> parameter is <strong>{{NULL}}</strong>, or returns {{E_FAIL}} if the described format does not exist.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> enumeration that describes a format for which to check for support.</p> </dd> + + + <dd> <p>A bitfield of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> enumeration values describing how the specified format is supported on the installed device. The values are {{ORed}} together.</p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum number of quality levels is defined by {{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}} in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>Number of quality levels supported by the adapter. See remarks.</p> </dd> + + + + + <p>Get a counter's information.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to counter information (see <strong>{{D3D11_COUNTER_INFO}}</strong>).</p> </dd> + + + + + <p>Get the type, name, units of measure, and a description of an existing counter.</p> + <p> Length parameters can be <strong>{{NULL}}</strong>, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-<strong>{{NULL}}</strong> and the corresponding string is <strong>{{NULL}}</strong>, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating <strong>{{NULL}}</strong>) will be returned through the length parameter. When length and the corresponding parameter are both non-<strong>{{NULL}}</strong>, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating <strong>{{NULL}}</strong> character) is passed out through the length parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>). Specifies which counter information is to be retrieved about. </p> </dd> + + + <dd> <p> Pointer to the data type of a counter (see <strong>{{D3D11_COUNTER_TYPE}}</strong>). Specifies the data type of the counter being retrieved. </p> </dd> + + + <dd> <p>Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.</p> </dd> + + + <dd> <p> String to be filled with a brief name for the counter. May be <strong>{{NULL}}</strong> if the application is not interested in the name of the counter. </p> </dd> + + + <dd> <p> Length of the string returned to szName. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szUnits. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szDescription. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets information about the features that are supported by the current graphics driver.</p> + <p>To query for multi-threading support, pass the <strong>{{D3D11_FEATURE_THREADING}}</strong> value to the <em>Feature</em> parameter, pass the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>pFeatureSupportData</em> parameter, and pass the size of the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>FeatureSupportDataSize</em> parameter.</p><p>Calling CheckFeatureSupport with <em>Feature</em> set to {{D3D11_FEATURE_FORMAT_SUPPORT}} causes the method to return the same information that would be returned by <strong>{{ID3D11Device::CheckFormatSupport}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter.</p> + + + <dd> <p>A member of the <strong>{{D3D11_FEATURE}}</strong> enumerated type that describes which feature to query for support.</p> </dd> + + + <dd> <p>Upon completion of the method, the passed structure is filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size of the structure passed to the <em>pFeatureSupportData</em> parameter.</p> </dd> + + + + + <p>Get application-defined data from a device.</p> + <p>This method returns one of the codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved.</p> </dd> + + + <dd> <p>A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data.</p> </dd> + + + + + <p>Set data to a device and associate that data with a guid.</p> + <p>The data stored in the device with this method can be retrieved with <strong>{{ID3D11Device::GetPrivateData}}</strong>.</p><p>The data and guid set with this method will typically be application-defined.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>Gets the feature level of the hardware device.</p> + <p> Feature levels determine the capabilities of your device.</p> + <p>A member of the <strong>{{D3D_FEATURE_LEVEL}}</strong> enumerated type that describes the feature level of the hardware device.</p> + + + + <p>Get the flags used during the call to create the device with <strong>{{D3D11CreateDevice}}</strong>.</p> + <p>A bitfield containing the flags used to create the device. See <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>.</p> + + + + <p>Get the reason why the device was removed.</p> + <p>Possible return values include: </p><ul> <li>{{DXGI_ERROR_DEVICE_HUNG}}</li> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_ERROR_DEVICE_RESET}}</li> <li>{{DXGI_ERROR_DRIVER_INTERNAL_ERROR}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li>{{S_OK}}</li> </ul><p>For more detail on these return codes, see {{DXGI_ERROR}}.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p>The <strong>GetImmediateContext</strong> method returns an <strong>{{ID3D11DeviceContext}}</strong> object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>Set an exception-mode flag to elevate an error condition to a non-continuable exception. </p><p>Whenever an error occurs, a Direct3D device enters the {{DEVICEREMOVED}} state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>An exception-mode flag is used to elevate an error condition to a non-continuable exception. </p> + <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> + + + + <p>Creates a device that represents the display adapter.</p> + <p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Set <em>ppDevice</em> and <em>ppImmediateContext</em> to <strong>{{NULL}}</strong> to determine which feature level is supported by looking at <em>pFeatureLevel</em> without creating a device. </p><p> For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDevice}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><table> <tr><td> <p>Differences between Direct3D 10 and Direct3D 11:</p> <p> In Direct3D 10, the presence of <em>pAdapter</em> dictated which adapter to use and the <em>DriverType</em> could mismatch what the adapter was. </p> <p> In Direct3D 11, if you are trying to create a hardware or a software device, set <em>pAdapter</em> != <strong>{{NULL}}</strong> which constrains the other inputs to be: </p> <ul> <li><em>DriverType</em> must be {{D3D_DRIVER_TYPE_UNKNOWN}} </li> <li><em>Software</em> must be <strong>{{NULL}}</strong>. </li> </ul> <p> On the other hand, if <em>pAdapter</em> == <strong>{{NULL}}</strong>, the <em>DriverType</em> cannot be set to {{D3D_DRIVER_TYPE_UNKNOWN}}; it can be set to either: </p> <ul> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_SOFTWARE}}, <em>Software</em> cannot be <strong>{{NULL}}</strong>. </li> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_HARDWARE}}, the adapter used will be the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong> </li> </ul> </td></tr> </table><p>?</p><p> The function signature {{PFN_D3D11_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><p><strong>Windows Phone 8.1: </strong> This {{API}} is supported. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre>{ {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +};</pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned. </p> </dd> + + + <dd> <p> If successful, returns the first <strong>{{D3D_FEATURE_LEVEL}}</strong> from the <em>pFeatureLevels</em> array which succeeded. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <p>Creates a device that represents the display adapter and a swap chain used for rendering.</p> + <strong>Note</strong>?? If you call this method in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Also, see the remarks section in <strong>{{D3D11CreateDevice}}</strong> for details about input parameter dependencies. To create a device without creating a swap chain, use the <strong>{{D3D11CreateDevice}}</strong> function. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDeviceAndSwapChain}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><p> The function signature {{PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong> if you call it in a Session 0 process. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. The value should be non-<strong>{{NULL}}</strong> when <strong>{{D3D_DRIVER_TYPE}}</strong> is <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong> and <strong>{{NULL}}</strong> otherwise. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre> { {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> A reference to a swap chain description (see <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>) that contains initialization parameters for the swap chain. </p> </dd> + + + <dd> <p> Returns the address of a reference to the <strong>{{IDXGISwapChain}}</strong> object that represents the swap chain used for rendering. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned'. </p> </dd> + + + <dd> <p> Returns a reference to a <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the first element in an array of feature levels supported by the device. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies how to handle the existing contents of a resource during a copy or update operation of a region within that resource.</p> + + + <dd> <p>The existing contents of the resource cannot be overwritten.</p> </dd> + + + <dd> <p>The existing contents of the resource are undefined and can be discarded.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies logical operations to configure for a render target.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Describes flags that are used to create a device context state object (<strong>{{ID3DDeviceContextState}}</strong>) with the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method.</p> + + + + <p>Specifies capabilities of the video decoder.</p> + + + <dd> <p>Indicates that the graphics driver supports at least a subset of downsampling operations.</p> </dd> + + + <dd> <p>Indicates that the decoding hardware cannot support the decode operation in real-time. Decoding is still supported for transcoding scenarios. With this capability, it is possible that decoding can occur in real-time if downsampling is enabled. +</p> </dd> + + + <dd> <p>Indicates that the driver supports changing down sample parameters after the initial down sample parameters have been applied. For more information, see <strong>{{ID3D11VideoContext1::DecoderUpdateDownsampling}}</strong>.</p> </dd> + + + + + <p>Specifies flags that indicate the most efficient methods for performing video processing operations. </p> + + + <dd> <p>Multi-plane overlay hardware can perform the rotation operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the scaling operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the colorspace conversion operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>The video processor output data should be at least triple buffered for optimal performance.</p> </dd> + + + + + <p>Represents the status of an <strong>{{ID3D11CryptoSession}}</strong> interface.</p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC1}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>Enable (or disable) a logical operation.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p> Describes the blend state that you use in a call to <strong>{{ID3D11Device1::CreateBlendState1}}</strong> to create a blend-state object. </p> + <p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this <strong>{{D3D11_BLEND_DESC1}}</strong> to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>Indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a sub sample mapping block.</p> + <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> + + + <dd> <p>The number of clear (non-encrypted) bytes at the start of the block.</p> </dd> + + + <dd> <p>The number of encrypted bytes following the clear bytes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. </p> </dd> + + + <dd> <p>Size of the relevant data.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <em>pIV</em> parameter. If <em>pIV</em> is {{NULL}}, set this member to zero.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures, which indicates exactly which bytes in the decode buffer are encrypted and which are in the clear. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> </dd> + + + <dd> <p>The number of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures specified in the <em>pSubSampleMappingBlocks</em> parameter. If <em>pSubSampleMappingBlocks</em> is {{NULL}}, set this member to zero.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides data to the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> method.</p> + <p>This structure is passed in the <em>pContentKey</em> parameter of the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> function when <strong>{{D3D11_DECODER_ENCRYPTION_HW_CENC}}</strong> is specified in the <strong>guidConfigBitstreamEncryption</strong> member of the <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure when creating the video decoder interface.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides information about the input streams passed into the <strong>{{ID3DVideoContext1::VideoProcessorGetBehaviorHints}}</strong> method.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange input data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateInputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The size of the {{DRM}} command data.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbInput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbInput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbInput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange output data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateOutputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The maximum size of data that the driver can return in the output buffer. The last byte that it can write to is <strong>pbOuput</strong>[<strong>PrivateDataSize</strong> + <strong>MaxHWProtectionDataSize</strong> ? 1].</p> </dd> + + + <dd> <p>The size of the output data written by the driver.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent executing the content protection command.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbOutput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbOutput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbOutput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange data for hardware content protection.</p> + <p>A reference to this structure is passed in the <em>pData</em> parameter of <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method when the <strong>{{ID3D11CryptoSession}}</strong> is creating using the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong> key exchange type.</p> + + + <dd> <p>The function {{ID}} of the {{DRM}} command. The values and meanings of the function {{ID}} are defined by the {{DRM}} specification.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>The result of the hardware {{DRM}} command.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a video sample.</p> + + + <dd> <p>The width of the video sample.</p> </dd> + + + <dd> <p>The height of the video sample.</p> </dd> + + + <dd> <p>The format of the video sample.</p> </dd> + + + <dd> <p>The colorspace of the sample.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage. This blend-state interface supports logical operations as well as blending operations.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device1::CreateBlendState1}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device1::CreateBlendState1}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC1}}</strong> structure that receives a description of the blend state. This blend state can specify logical operations as well as blending operations.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong> {{D3D11_RASTERIZER_DESC1}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count.</p> </dd> + + + + + <p>The <strong>{{ID3DDeviceContextState}}</strong> interface represents a context state object, which holds state and behavior information about a Microsoft Direct3D device.</p> + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + <p>Copies a region from a source resource to a destination resource.</p> + <p>If the display driver supports overlapping, the source and destination subresources can be identical, and the source and destination regions can overlap each other. For existing display drivers that don?t support overlapping, the runtime drops calls with identical source and destination subresources, regardless of whether the regions overlap. To determine whether the display driver supports overlapping, check the <strong>CopyWithOverlap</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>. This overlapping support enables additional scroll functionality in a call to <strong>{{IDXGISwapChain::Present}}</strong>.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> or <strong>CopySubresourceRegion1</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper-left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource.</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box that defines the region of the source subresource that <strong>CopySubresourceRegion1</strong> can copy. If <strong>{{NULL}}</strong>, <strong>CopySubresourceRegion1</strong> copies the entire source subresource. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion1</strong> doesn't perform a copy operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the copy operation. If you specify zero for no copy option, <strong>CopySubresourceRegion1</strong> behaves like <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them. </p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>If you call <strong>UpdateSubresource1</strong> to update a constant buffer, pass any region, and the driver has not been implemented to Windows?8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant). When the runtime drops the call, the runtime doesn't call the corresponding device driver interface ({{DDI}}).</p><p>When you record a call to <strong>UpdateSubresource</strong> with an offset <em>pDstBox</em> in a software command list, the offset in <em>pDstBox</em> is incorrectly applied to <em>pSrcData</em> when you play back the command list. The new-for-Windows?8<strong>UpdateSubresource1</strong> fixes this issue. In a call to <strong>UpdateSubresource1</strong>, <em>pDstBox</em> does not affect <em>pSrcData</em>.</p><p>For info about various resource types and how <strong>UpdateSubresource1</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource1</strong> or <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing.</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>A zero-based index that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, <strong>UpdateSubresource1</strong> writes the data to the destination subresource with no offset. The dimensions of the source must fit the destination.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource1</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the update operation. If you specify zero for no update option, <strong>UpdateSubresource1</strong> behaves like <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them.</p> </dd> + + + + + <p>Discards a resource from the device context.</p> + <p><strong>DiscardResource</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource that <em>pResource</em> points to is no longer needed.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface for the resource to discard. The resource must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardResource</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Discards a resource view from the device context.</p> + <p><strong>DiscardView</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView</strong> allows you to discard a subset of a resource that is in a view (such as a single miplevel). More importantly, <strong>DiscardView</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Sets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{VSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{VSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{VSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the hull-shader stage of the pipeline uses.</p> + <p>The runtime drops the call to <strong>{{HSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{HSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If the <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{HSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + + <p>Sets the constant buffers that the domain-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{DSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{DSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{DSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{GSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{GSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{GSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p> Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer. </p> + <p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p><p> The runtime drops the call to <strong>{{PSSetConstantBuffers1}}</strong> if the numbers of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components. </p><p> The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range): </p><p> [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>] </p><p> That is, the window is the range is from (value in an element of <em>pFirstConstant</em>) to (value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>). </p><p> The runtime also drops the call to <strong>{{PSSetConstantBuffers1}}</strong> on existing drivers that do not support this offsetting. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. </p><p> From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>. </p><p> Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p> If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{PSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants. </p><p> If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>. </p> + <p> Returns nothing. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers being given to the device. </p> </dd> + + + <dd> <p> An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants. </p> </dd> + + + <dd> <p> An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the compute-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{CSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{CSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{CSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Gets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the hull-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + + <p>Gets the constant buffers that the domain-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the pixel shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the compute-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Activates the given context state object and changes the current device behavior to Direct3D?11, Direct3D?10.1, or Direct3D?10.</p> + <p><strong>SwapDeviceContextState</strong> changes device behavior. This device behavior depends on the emulated interface that you passed to the <em>EmulatedInterface</em> parameter of the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method when you created the context state object. </p><p><strong>SwapDeviceContextState</strong> is not supported on a deferred context.</p><p><strong>SwapDeviceContextState</strong> disables the incompatible device interfaces <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong>. When a context state object is active, the runtime disables certain methods on the device and context interfaces. A context state object that is created with <code>__uuidof({{ID3D11Device1}})</code> or <code>__uuidof({{ID3D11Device}})</code> turns off most of the Direct3D?10 device interfaces. A context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> turns off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. +For more information about this behavior, see <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>.</p><p><strong>SwapDeviceContextState</strong> activates the context state object specified by <em>pState</em>. This means that the device behaviors that are associated with the context state object's feature level and compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. In addition, any state that was saved when this context state object was last active is now reactivated, so that the previous state is replaced.</p><p><strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the most recently activated context state object. The object allows the caller to save and then later restore the previous device state. This behavior is useful in a plug-in architecture such as Direct2D that shares a Direct3D device with its plug-ins. A Direct2D interface can use context state objects to save and restore the application's state.</p><p>If the caller did not previously call the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method to create a previous context state object, <strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the default context state object. In either case, usage of <strong>SwapDeviceContextState</strong> is the same.</p><p>The feature level that is specified by the application, and that is chosen by the context state object from the acceptable list that the application supplies to <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>, controls the feature level of the immediate context whenever the context state object is active. Because the Direct3D?11 device is free-threaded, the device methods cannot query the current immediate context feature level. Instead, the device runs at a feature level that is the maximum of all previously created context state objects' feature levels. This means that the device's feature level can increase dynamically.</p><p>The feature level of the context state object controls the functionality available from the immediate context. However, to maintain the free-threaded contract of the Direct3D?11 device methods?the resource-creation methods in particular?the upper-bound feature level of all created context state objects controls the set of resources that the device creates.</p><p>Because the context state object interface is published by the immediate context, the interface requires the same threading model as the immediate context. Specifically, <strong>SwapDeviceContextState</strong> is single-threaded with respect to the other immediate context methods and with respect to the equivalent methods of <strong>{{ID3D10Device}}</strong>.</p><p>Crucially, because only one of the Direct3D?10 or Direct3D?11 ref-count behaviors can be available at a time, one of the Direct3D?10 and Direct3D?11 interfaces must break its ref-count contract. To avoid this situation, the activation of a context state object turns off the incompatible version interface. Also, if you call a method of an incompatible version interface, the call silently fails if the method has return type <strong>void</strong>, returns an <strong>{{HRESULT}}</strong> value of <strong>{{E_INVALIDARG}}</strong>, or sets any out parameter to <strong>{{NULL}}</strong>.</p><p>When you switch from Direct3D?11 mode to either Direct3D?10 mode or Direct3D?10.1 mode, the binding behavior of the device changes. Specifically, the final release of a resource induces unbind in Direct3D?10 mode or Direct3D?10.1 mode. During final release an application releases all of the resource's references, including indirect references such as the linkage from view to resource, and the linkage from context state object to any of the context state object's bound resources. Any bound resource to which the application has no reference is unbound and destroyed, in order to maintain the Direct3D?10 behavior.</p><p><strong>SwapDeviceContextState</strong> does not affect any state that <strong>{{ID3D11VideoContext}}</strong> sets. </p><p>Command lists that are generated by deferred contexts do not hold a reference to context state objects and are not affected by future updates to context state objects.</p><p>No asynchronous objects are affected by <strong>SwapDeviceContextState</strong>. For example, if a query is active before a call to <strong>SwapDeviceContextState</strong>, it is still active after the call.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the context state object that was previously created through the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method. If <strong>SwapDeviceContextState</strong> is called with <em>pState</em> set to <strong>{{NULL}}</strong>, the call has no effect.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the previously-activated context state object.</p> </dd> + + + + + <p>Sets all the elements in a resource view to one value.</p> + <p><strong>ClearView</strong> works only on render-target views ({{RTVs}}), depth/stencil views ({{DSVs}}) on depth-only resources (resources with no stencil component), unordered-access views ({{UAVs}}), or any video view of a <strong>Texture2D</strong> surface. The runtime drops invalid calls. Empty rectangles in the <em>pRect</em> array are a no-op. A rectangle is empty if the top value equals the bottom value or the left value equals the right value.</p><p><strong>ClearView</strong> doesn?t support 3D textures.</p><p><strong>ClearView</strong> applies the same color value to all array slices in a view; all rectangles in the <em>pRect</em> array correspond to each array slice. The <em>pRect</em> array of rectangles is a set of areas to clear on a single surface. If the view is an array, <strong>ClearView</strong> clears all the rectangles on each array slice individually.</p><p>When you apply rectangles to buffers, set the top value to 0 and the bottom value to 1 and set the left value and right value to describe the extent within the buffer. When the top value equals the bottom value or the left value equals the right value, the rectangle is empty and a no-op is achieved.</p><p>The driver converts and clamps color values to the destination format as appropriate per Direct3D conversion rules. For example, if the format of the view is <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>, the driver clamps inputs to 0.0f to 1.0f (+{{INF}} -&gt; 1.0f (0XFF)/NaN -&gt; 0.0f).</p><p>If the format is integer, such as <strong>{{DXGI_FORMAT_R8G8B8A8_UINT}}</strong>, the runtime interprets inputs as integral floats. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p><p>Here are the color mappings:</p><ul> <li>Color[0]: R (or Y for video)</li> <li>Color[1]: G (or U/Cb for video)</li> <li>Color[2]: B (or V/Cr for video)</li> <li>Color[3]: A</li> </ul><p>For video views with {{YUV}} or {{YCbBr}} formats, <strong>ClearView</strong> doesn't convert color values. In situations where the format name doesn?t indicate _UNORM, _UINT, and so on, <strong>ClearView</strong> assumes _UINT. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface that represents the resource view to clear.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to use to clear the resource view.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearView</strong> clears the entire surface.</p> </dd> + + + <dd> <p>Number of rectangles in the array that the <em>pRect</em> parameter specifies.</p> </dd> + + + + + <p>Discards the specified elements in a resource view from the device context.</p> + <p><strong>DiscardView1</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the specified elements in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView1</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView1</strong> allows you to discard elements of a subset of a resource that is in a view (such as elements of a single miplevel). More importantly, <strong>DiscardView1</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource. </p> + <p>Returns nothing</p> + + + <dd> <p> A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView1</strong>; if the debug layer is enabled, the runtime returns an error message. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to discard. If <strong>{{NULL}}</strong>, <strong>DiscardView1</strong> discards the entire view and behaves the same as <strong>DiscardView</strong>. </p> </dd> + + + <dd> <p> Number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the video functionality of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext1}}</strong> interface reference.</p> + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor any {{D3D11}} predicate that may have been set. <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC1}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Allows the driver to return {{IHV}} specific information used when initializing the new hardware key.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the {{ID3D11CryptoSession}} interface. To get this reference, call <strong>{{ID3D11VideoDevice1::CreateCryptoSession}}</strong>.</p> </dd> + + + <dd> <p>The size of the memory referenced by the <em>pPrivateInputData</em> parameter.</p> </dd> + + + <dd> <p>The private input data. The contents of this parameter is defined by the implementation of the secure execution environment. It may contain data about the license or about the stream properties.</p> </dd> + + + <dd> <p>A reference to the private output data. The return data is defined by the implementation of the secure execution environment. It may contain graphics-specific data to be associated with the underlying hardware key.</p> </dd> + + + + + <p>Checks the status of a crypto session.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>Specifies a <strong>{{ID3D11CryptoSession}}</strong> for which status is checked.</p> </dd> + + + <dd> <p>A {{D3D11_CRYPTO_SESSION_STATUS}} that is populated with the crypto session status upon completion.</p> </dd> + + + + + <p>Indicates that decoder downsampling will be used and that the driver should allocate the appropriate reference frames. </p> + <p>This function can only be called once for a specific <strong>{{ID3D11VideoDecoder}}</strong> interface. This method must be called prior to the first call to <strong>DecoderBeginFrame</strong>. To update the downsampling parameters, use <strong>DecoderUpdateDownsampling</strong>.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The color space information of the reference frame data.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>The number of reference frames to be used in the operation.</p> </dd> + + + + + <p>Updates the decoder downsampling parameters.</p> + <p>This method can only be called after decode downsampling is enabled by calling <strong>DecoderEnableDownsampling</strong>. This method is only supported if the <strong>{{D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC}}</strong> capability is reported.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + + + <p>Sets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Sets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> will be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that indicates the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Gets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> can be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Specifies whether the video processor input stream should be flipped vertically or horizontally.</p> + <p>When used in combination, transformations on the processor input stream should be applied in the following order:</p><ul> <li>Rotation</li> <li>Mirroring</li> <li>Source clipping</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>True if mirroring should be enabled; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Gets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Gets values that indicate whether the video processor input stream is being flipped vertically or horizontally.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether mirroring is enabled. True if mirroring is enabled; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped horizontally. True if the stream is being flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped vertically. True if the stream is being flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Returns driver hints that indicate which of the video processor operations are best performed using multi-plane overlay hardware rather than <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> + <p>This method computes the behavior hints using the current state of the video processor as set by the "SetOutput" and "SetStream" methods of <strong>{{ID3D11VideoContext}}</strong> and <strong>{{ID3D11VideoContext1}}</strong>. You must set the proper state before calling this method to ensure that the returned hints contain useful data.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device1}}</strong> interface reference.</p> + + + + <p>Retrieves optional sizes for private driver data. </p> + <p>When <em>pKeyExchangeType</em> is <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong>, the following behavior is expected in the <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method:</p><ul> <li>The <em>DataSize</em> parameter is set to the size of the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure.</li> <li><em>pData</em> points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure. <ul> <li>The <strong>pInputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure where:<ul> <li><strong>pbInput</strong>[0] ? <strong>pbInput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateInputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbInput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> <li>The <strong>pOutputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure where:<ul> <li><strong>pbOutput</strong>[0] ? <strong>pbOutput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateOutputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbOutput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> </ul> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Indicates the crypto type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the decoder profile for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the key exchange type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for input commands.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for output commands.</p> </dd> + + + + + <p>Retrieves capabilities and limitations of the video decoder.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The decode profile for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video width for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video height for which the capabilities are queried.</p> </dd> + + + <dd> <p>The frame rate of the video content. This information is used by the driver to determine whether the video can be decoded in real-time.</p> </dd> + + + <dd> <p>The bit rate of the video stream. A value of zero indicates that the bit rate can be ignored.</p> </dd> + + + <dd> <p>The type of cryptography used to encrypt the video stream. A value of {{NULL}} indicates that the video stream is not encrypted.</p> </dd> + + + <dd> <p>A reference to a bitwise {{OR}} combination of <strong>{{D3D11_VIDEO_DECODER_CAPS}}</strong> values specifying the decoder capabilities. </p> </dd> + + + + + <p>Indicates whether the video decoder supports downsampling with the specified input format, and whether real-time downsampling is supported.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>An object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>An object describing the resolution, format, and colorspace of the output frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if downsampling is supported with the specified input data. True if the driver supports the requested downsampling; otherwise, false.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if real-time decoding is supported with the specified input data. True if the driver supports the requested real-time decoding; otherwise, false. Note that the returned value is based on the current configuration of the video decoder and does not guarantee that real-time decoding will be supported for future downsampling operations.</p> </dd> + + + + + <p>Allows the driver to recommend optimal output downsample parameters from the input parameters.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_VIDEO_SAMPLE_DESC}}</strong> structure that the driver populates with the recommended output buffer parameters for a downsample operation. The driver will attempt to recommend parameters that can support real-time decoding. If it is unable to do so, the driver will recommend values that are as close to the real-time solution as possible.</p> </dd> + + + + + <p>Enumerates the video processor capabilities of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>. </p> + + + + <p>Indicates whether the driver supports the specified combination of format and colorspace conversions.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The format of the video processor input.</p> </dd> + + + <dd> <p>The colorspace of the video processor input.</p> </dd> + + + <dd> <p>The format of the video processor output.</p> </dd> + + + <dd> <p>The colorspace of the video processor output.</p> </dd> + + + <dd> <p>Pointer to a boolean that is set by the driver to indicate if the specified combination of format and colorspace conversions is supported. True if the conversion is supported; otherwise, false.</p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device1}}</strong> adds new methods to those in <strong>{{ID3D11Device}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p><strong>GetImmediateContext1</strong> returns an <strong>{{ID3D11DeviceContext1}}</strong> object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p><strong>GetImmediateContext1</strong> increments the reference count of the immediate context by one. So, call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized.</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device1}}</strong>, the <strong>CreateDeferredContext1</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the graphics adapter has been physically removed from the computer or a driver upgrade for the graphics adapter has occurred. If this error occurs, you should destroy and re-create the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext1</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext1</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Creates a blend-state object that encapsulates blend state for the output-merger stage and allows the configuration of logic operations.</p> + <p>The logical operations (those that enable bitwise logical operations between pixel shader output and render target contents, refer to <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> ) are only available on certain feature levels; call <strong>CheckFeatureSupport</strong> with {{D3D11_FEATURE_D3D11_OPTIONS}} set, to ensure support by checking the boolean field <em>OutputMergerLogicOp</em> of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p><p>An app can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>An app can create up to 4096 unique rasterizer state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p> Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior. </p> + <p> The <strong>{{REFIID}}</strong> value of the emulated interface is a {{GUID}} obtained by use of the <strong>__uuidof</strong> operator. For example, <code>__uuidof({{ID3D11Device}})</code> gets the {{GUID}} of the interface to a Microsoft Direct3D?11 device. </p><p> Call the <strong>{{ID3D11DeviceContext1::SwapDeviceContextState}}</strong> method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. </p><p> When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with <code>__uuidof({{ID3D11Device}})</code> will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> will cause the runtime to turn off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the <strong>{{ID3D10Device1}}</strong> emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition. </p><p> For example, suppose the tessellation stage is made active through the <strong>{{ID3D11DeviceContext}}</strong> interface when you create the device through <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via <strong>QueryInterface</strong>. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call <strong>SwapDeviceContextState</strong> to activate a Direct3D?10-compatible context state object. </p><p> The following table shows the methods that are active and inactive for each emulated interface.</p><table> <tr><th> Emulated interface </th><th>Active device or immediate context interfaces </th><th>Inactive device or immediate context interfaces</th></tr> <tr><td> <p> <strong>{{ID3D11Device}}</strong> or </p> <p> <strong>{{ID3D11Device1}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> + </p> <p> <strong>{{IDXGIDevice2}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <strong>{{ID3D10Device}}</strong> </td></tr> <tr><td> <p> <strong>{{ID3D10Device1}}</strong> or </p> <p> <strong>{{ID3D10Device}}</strong> </p> </td><td> <p> <strong>{{ID3D10Device}}</strong> </p> <p> <strong>{{ID3D10Device1}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{ID3D11DeviceContext}}</strong> (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.) </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>ClearDepthStencilView</strong> </p> </td><td> <p> <strong>ClearDepthStencilView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearRenderTargetView</strong> </p> </td><td> <p> <strong>ClearRenderTargetView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearState</strong> </p> </td><td> <p> <strong>ClearState</strong> </p> </td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewUint</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewFloat</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopyResource</strong> </p> </td><td> <p> <strong>CopyResource</strong> </p> </td></tr> <tr><td> <p> <strong>CopyStructureCount</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopySubresourceRegion</strong> </p> </td><td> <p> <strong>CopySubresourceRegion</strong> </p> </td></tr> <tr><td> <p> <strong>{{CSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Dispatch</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DispatchIndirect</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>CreateBlendState</strong> </p> </td></tr> <tr><td> <p> <strong>Draw</strong> </p> </td><td> <p> <strong>Draw</strong> </p> </td></tr> <tr><td> <p> <strong>DrawAuto</strong> </p> </td><td> <p> <strong>DrawAuto</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexed</strong> </p> </td><td> <p> <strong>DrawIndexed</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DrawInstanced</strong> </p> </td><td> <p> <strong>DrawInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ExecuteCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>FinishCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Flush</strong> </p> </td><td> <p> <strong>Flush</strong> </p> </td></tr> <tr><td> <p> <strong>GenerateMips</strong> </p> </td><td> <p> <strong>GenerateMips</strong> </p> </td></tr> <tr><td> <p> <strong>GetPredication</strong> </p> </td><td> <p> <strong>GetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>GetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetType</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShader}}</strong> </p> </td><td> <p> <strong>{{GSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShader}}</strong> </p> </td><td> <p> <strong>{{GSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{HSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IAGetVertexBuffers}}</strong> </td><td> <p> <strong>{{IAGetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetIndexBuffer}}</strong> </td><td> <p> <strong>{{IASetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetInputLayout}}</strong> </td><td> <p> <strong>{{IASetInputLayout}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetPrimitiveTopology}}</strong> </td><td> <p> <strong>{{IASetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetVertexBuffers}}</strong> </td><td> <p> <strong>{{IASetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShader}}</strong> </p> </td><td> <p> <strong>{{PSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShader}}</strong> </p> </td><td> <p> <strong>{{PSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>ResolveSubresource</strong> </p> </td><td> <p> <strong>ResolveSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetState}}</strong> </p> </td><td> <p> <strong>{{RSGetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetState}}</strong> </p> </td><td> <p> <strong>{{RSSetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>SetPredication</strong> </p> </td><td> <p> <strong>SetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>SetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>SetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>UpdateSubresource</strong> </p> </td><td> <p> <strong>UpdateSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShader}}</strong> </p> </td><td> <p> <strong>{{VSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShader}}</strong> </p> </td><td> <p> <strong>{{VSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>Begin</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>End</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetCreationFlags</strong> </p> </td></tr> <tr><td></td><td> <p> <strong>GetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>GetContextFlags</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetData</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Map</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Unmap</strong> </p> </td><td></td></tr> </table><p>?</p><p> The following table shows the <strong>{{ID3D10Device}}</strong> interface methods that the runtime does not disable because they are not immediate context methods.</p><table> <tr><th> Methods of <strong>{{ID3D10Device}}</strong> </th></tr> <tr><td> <p> <strong>CheckCounter</strong> </p> </td></tr> <tr><td> <p> <strong>CheckCounterInfo</strong> </p> </td></tr> <tr><td> <p> Create*, like <strong>CreateQuery</strong> </p> </td></tr> <tr><td> <p> <strong>GetDeviceRemovedReason</strong> </p> </td></tr> <tr><td> <p> <strong>GetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>OpenSharedResource</strong> </p> </td></tr> <tr><td> <p> <strong>SetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateDataInterface</strong> </p> </td></tr> </table><p>?</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A combination of <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG}}</strong> values that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how to create the context state object. The <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag is currently the only defined flag. If the original device was created with <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong>, you must create all context state objects from that device with the <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag. </p> <p></p> <p>If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections.</p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong> values. The array can contain elements from the following list and determines the order of feature levels for which creation is attempted. Unlike <strong>{{D3D11CreateDevice}}</strong>, you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong> because there is no default feature level array. </p> <pre>{ {{D3D_FEATURE_LEVEL_11_1}}, {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. Unlike <strong>{{D3D11CreateDevice}}</strong>, you must set <em>FeatureLevels</em> to greater than 0 because you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> The {{SDK}} version. You must set this parameter to <strong>{{D3D11_SDK_VERSION}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are obtained by using the <strong>__uuidof</strong> operator on the <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong> interfaces. See Remarks. </p> </dd> + + + <dd> <p> A reference to a variable that receives a <strong>{{D3D_FEATURE_LEVEL}}</strong> value from the <em>pFeatureLevels</em> array. This is the first array value with which <strong>CreateDeviceContextState</strong> succeeded in creating the context state object. If the call to <strong>CreateDeviceContextState</strong> fails, the variable pointed to by <em>pChosenFeatureLevel</em> is set to zero. </p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3DDeviceContextState}}</strong> object that represents the state of a Direct3D device. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag).</p> + <p>The behavior of <strong>OpenSharedResourceByName</strong> is similar to the behavior of the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method; each call to <strong>OpenSharedResourceByName</strong> to access a resource creates a new resource object. In other words, if you call <strong>OpenSharedResourceByName</strong> twice and pass the same resource name to <em>lpName</em>, you receive two resource objects with different <strong>{{IUnknown}}</strong> references.</p><p><strong>To share a resource between two devices</strong></p><ol> <li>Create the resource as shared and specify that it uses {{NT}} handles, by setting the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag.</li> <li>Obtain the {{REFIID}}, or {{GUID}}, of the interface to the resource by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D11Texture2D}}</strong>) retrieves the {{GUID}} of the interface to a 2D texture.</li> <li>Query the resource for the <strong>{{IDXGIResource1}}</strong> interface.</li> <li>Call the <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method to obtain the unique handle to the resource. In this <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> call, you must pass a name for the resource if you want to subsequently call <strong>OpenSharedResourceByName</strong> to access the resource by name. </li> </ol> + <p>This method returns one of the Direct3D 11 return codes. This method also returns {{E_ACCESSDENIED}} if the permissions to access the resource aren't valid.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>OpenSharedResourceByName</strong> fails with {{E_NOTIMPL}} because {{NTHANDLES}} are used. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface enables an application to describe conceptual sections and markers within the application's code flow. An appropriately enabled tool, such as Microsoft Visual Studio Ultimate?2012, can display these sections and markers visually along the tool's Microsoft Direct3D time line, while the tool debugs the application. These visual notes allow users of such a tool to navigate to parts of the time line that are of interest, or to understand what set of Direct3D calls are produced by certain sections of the application's code.</p> + <p>The methods of <strong>{{ID3DUserDefinedAnnotation}}</strong> have no effect when the calling application is not running under a Direct3D-specific profiling tool like Visual Studio Ultimate?2012. +</p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is published by Microsoft Direct3D?11 device contexts. Therefore, <strong>{{ID3DUserDefinedAnnotation}}</strong> has the same threading rules as the <strong>{{ID3D11DeviceContext}}</strong> interface, or any other context interface. For more information about Direct3D threading, see MultiThreading. +To retrieve the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface for the context, call the <strong>QueryInterface</strong> method for the context (for example, <strong>{{ID3D11DeviceContext::QueryInterface}}</strong>). In this call, you must pass the identifier of <strong>{{ID3DUserDefinedAnnotation}}</strong>. </p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is the Microsoft Direct3D?10 and later equivalent of the Direct3D 9 {{PIX}} functions ({{D3DPERF_}}* functions).</p><strong>Note</strong>??Setting the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag in your app replaces calling {{D3DPerf_SetOptions}}(1). But, to prevent Direct3D debugging tools from hooking your app, your app can also call <strong>{{ID3DUserDefinedAnnotation::GetStatus}}</strong> to determine whether it is running under a Direct3D debugging tool and then exit accordingly.?<p>You must call the <strong>BeginEvent</strong> and <strong>EndEvent</strong> methods in pairs; pairs of calls to these methods can nest within pairs of calls to these methods at a higher level in the application's call stack. In other words, a "Draw World" section can entirely contain another section named "Draw Trees," which can in turn entirely contain a section called "Draw Oaks." You can only associate an <strong>EndEvent</strong> method with the most recent <strong>BeginEvent</strong> method, that is, pairs cannot overlap. You cannot call an <strong>EndEvent</strong> for any <strong>BeginEvent</strong> that preceded the most recent <strong>BeginEvent</strong>. In fact, the runtime interprets the first <strong>EndEvent</strong> as ending the second <strong>BeginEvent</strong>.</p> + + + + <p>Marks the beginning of a section of event code.</p> + <p>You call the <strong>EndEvent</strong> method to mark the end of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>BeginEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to <strong>BeginEvent</strong> that have not yet been finalized by calls to the <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> method.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Marks the end of a section of event code.</p> + <p>You call the <strong>BeginEvent</strong> method to mark the beginning of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>EndEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> method that have not yet been finalized by calls to <strong>EndEvent</strong>.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + + <p>Marks a single point of execution in code.</p> + <p>A user can visualize the marker when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>SetMarker</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>This method returns no values.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the marker. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Determines whether the calling application is running under a Microsoft Direct3D profiling tool.</p> + <p>You can call <strong>GetStatus</strong> to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface. For example, the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> and <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.</p> + <p>The return value is nonzero if the calling application is running under a Direct3D profiling tool such as Visual Studio Ultimate?2012, and zero otherwise.</p> + + + + <p>Identifies how to perform a tile-mapping operation.</p> + + + <dd> <p>Indicates that no overwriting of tiles occurs in the tile-mapping operation.</p> </dd> + + + + + <p>Specifies a range of tile mappings to use with <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong>.</p> + + + + <p>Identifies how to check multisample quality levels.</p> + + + <dd> <p>Indicates to check the multisample quality levels of a tiled resource.</p> </dd> + + + + + <p>Identifies how to copy a tile.</p> + + + <dd> <p>Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the +specified buffer location, reading tiles sequentially, +to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), +to the specified buffer location, deswizzling to linear memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. +</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + + + <dd> <p>The x position of a tiled resource. Used for buffer and 1D, 2D, and 3D textures.</p> </dd> + + + <dd> <p>The y position of a tiled resource. Used for 2D and 3D textures.</p> </dd> + + + <dd> <p>The z position of a tiled resource. Used for 3D textures.</p> </dd> + + + <dd> <p>A subresource index value into mipmaps and arrays. Used for 1D, 2D, and 3D textures. </p> <p>For mipmaps that use nonstandard tiling, or are packed, or both use nonstandard tiling and are packed, any subresource value that indicates any of the packed mipmaps all refer to the same tile.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p>Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once.</p> <p>Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>bUseBox</strong>, you use a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p>When the region includes mipmaps that are packed with nonstandard tiling, <strong>bUseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0.</p> </dd> + + + <dd> <p>The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. </p> </dd> + + + <dd> <p>The height of the tiled region, in tiles. Used for 2D and 3D textures. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p>Each packed mipmap is individually reported as 0 for <strong>WidthInTiles</strong>, <strong>HeightInTiles</strong> and <strong>DepthInTiles</strong>. +</p><p>The total number of tiles in subresources is <strong>WidthInTiles</strong>*<strong>HeightInTiles</strong>*<strong>DepthInTiles</strong>. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> <p> <strong>GetResourceTiling</strong> sets <strong>StartTileIndexInOverallResource</strong> to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff) to indicate that the whole +<strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless, and the info to which the <em>pPackedMipDesc</em> parameter of <strong>GetResourceTiling</strong> points applies. For packed tiles, the description of the packed mipmaps comes from a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure instead. +</p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p>Texels are equivalent to pixels. For untyped buffer resources, a texel is just a byte. For multisample antialiasing ({{MSAA}}) surfaces, the numbers are still in terms of pixels/texels. +The values here are independent of the surface dimensions. Even if the surface is smaller than what would fit in a tile, the full tile dimensions are reported here. +</p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p>Describes the tile structure of a tiled resource with mipmaps. </p> + + + <dd> <p>Number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p>Number of packed mipmaps in the tiled resource. </p> <p>This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no +such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same +packing. +</p> <p>On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions +are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one +dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser +mipmaps for a given array slice are considered packed as well. +</p> </dd> + + + <dd> <p>Number of tiles for the packed mipmaps in the tiled resource. </p> <p>If there is no packing, this value is meaningless and is set to 0. +Otherwise, it is set to the number of tiles +that are needed to represent the set of packed mipmaps. +The pixel layout within the packed mipmaps is hardware specific. +If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. +For arrays, this value is only the count of packed mipmaps within +the subresources for each array slice.</p> </dd> + + + <dd> <p>Offset of the first packed tile for the resource +in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this +value is meaningless and is 0. Otherwise, it is the +offset of the first packed tile for the resource in the overall +range of tiles for the resource. A value of 0 for +<strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. +For array surfaces, this is the offset for the tiles that contain the packed +mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset +past the beginning of the tiles for each array slice. </p> <strong>Note</strong>??The +number of overall tiles, packed or not, for a given array slice is +simply the total number of tiles for the resource divided by the +resource's array size, so it is easy to locate the range of tiles for +any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies +which of those are packed. ? </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext2}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext1}}</strong>.</p> + + + + <p>Updates mappings of tile locations in tiled resources to memory locations in a tile pool.</p> + <p>In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of tile-pool tiles. </p><p>You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update:</p><ul> <li><strong>Tiled resource whose mappings are updated.</strong> This is a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Mappings start off all {{NULL}} when a resource is initially created.</li> <li><strong>Set of tile regions on the tiled resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <em>NumTiledResourceRegions</em> specifies how many regions there are, <em>pTiledResourceRegionStartCoordinates</em> and <em>pTiledResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumTiledResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pTiledResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pTiledResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire tiled resource, including all mipmaps, array slices, or both. <p>If <em>pTiledResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pTiledResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pTiledResourceRegionStartCoordinates</em> without having to send an array of <em>pTiledResourceRegionSizes</em> all set to 1.</p> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Tile pool that provides memory where tile mappings can go.</strong> A tiled resource can point to a single tile pool at a time. If a new tile pool is specified (for the first time or different from the last time a tile pool was specified), all existing tile mappings for the tiled resource are cleared and the new set of mappings in the current <strong>UpdateTileMappings</strong> call are applied for the new tile pool. If no tile pool is specified ({{NULL}}) or the same tile pool as a previous <strong>UpdateTileMappings</strong> call is provided, the <strong>UpdateTileMappings</strong> call just adds the new mappings to existing ones (overwriting on overlap). If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a tile pool because it is irrelevant. But if you specify a tile pool anyway, it takes the same behavior as previously described when providing a tile pool. </li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a tile pool (default), a count of tiles in the tiled resource to map to a single tile in a tile pool (sharing the tile), a count of tile mappings in the tiled resource to skip and leave as they are, or a count of tiles in the tile pool to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described tiled resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each tiled resource tile specified has a mapping specified.</p> <p><em>pRangeFlags</em>, <em>pTilePoolStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the tile pool; otherwise, for each range i, pRangeFlags[i] identifies how the mappings in that range of tiles work:</p> <ul> <li>If pRangeFlags[i] is 0, that range defines sequential tiles in the tile pool, with the number of tiles being pRangeTileCounts[i] and the starting location pTilePoolStartOffsets[i]. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_REUSE_SINGLE_TILE}}</strong>, pTilePoolStartOffsets[i] identifies the single tile in the tile pool to map to, and pRangeTileCounts[i] specifies how many tiles from the tile regions to map to that tile pool location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_NULL}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. pTilePoolStartOffsets[i] is ignored for {{NULL}} mappings. </li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_SKIP}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. pTilePoolStartOffsets[i] is ignored for {{SKIP}} mappings.</li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> means the caller promises that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. This allows the device to avoid having to flush previously submitted work in order to do the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources still being referenced by outstanding commands, undefined rendering behavior results, which includes the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to tile mapping data structure itself, which in hardware is a page table. The absence of this flag requires that tile mapping updates specified by this <strong>UpdateTileMappings</strong> call must be completed before any subsequent Direct3D command can proceed.</li> </ul><p>If tile mappings have changed on a tiled resource that the app will render via <strong>RenderTargetView</strong> or <strong>DepthStencilView</strong>, the app must clear, by using the fixed function <strong>Clear</strong> {{APIs}}, the tiles that have changed within the area being rendered (mapped or not). If an app doesn't clear in these situations, the app receives undefined values when it reads from the tiled resource. +</p><strong>Note</strong>??In Direct3D 11.2, hardware can now support <strong>ClearView</strong> on depth-only formats. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.?<p>If an app needs to preserve existing memory contents of areas in a tiled resource where mappings have changed, the app can first save the contents where tile mappings have changed, by copying them to a temporary surface, for example using <strong>CopyTiles</strong>, issuing the required <strong>Clear</strong>, and then copying the contents back. +</p><p>Suppose a tile is mapped into multiple tiled resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the tiled resources. Then, if the same tile is to be rendered via any other tiled resource, the tile must be cleared first as previously described. +</p><p>For more info about tiled resources, see Tiled resources.</p><p>Here are some examples of common <strong>UpdateTileMappings</strong> cases:</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags result in the call being dropped.<p>The debug layer will emit an error.</p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.<p>If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Apps can avoid this situation by only doing update calls that change existing mappings from tiled resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).</p> </li> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. </li> </ul> + + + <dd> <p>A reference to the tiled resource.</p> </dd> + + + <dd> <p>The number of tiled resource regions.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p>A reference to the tile pool.</p> </dd> + + + <dd> <p>The number of tile-pool ranges.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_RANGE_FLAG}}</strong> values that describe each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p>An array of offsets into the tile pool. These are 0-based tile offsets, counting in tiles (not bytes).</p> </dd> + + + <dd> <p>An array of tiles. </p> <p> An array of values that specify the number of tiles in each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source tiled resource to a destination tiled resource.</p> + <p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across tiled resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temp location and then from there written to the destination.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags or passing in non Tiled Resources result in the call being dropped. <p> The dest and the source regions must each entirely fit in their resource or behavior is undefined (debug layer will emit an error). </p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory. <p> If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Applications can avoid this situation by only doing update calls that change existing mappings from Tiled Resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping). </p> </li> </ul> + + + <dd> <p>A reference to the destination tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination tiled resource. </p> </dd> + + + <dd> <p>A reference to the source tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong>, which indicates that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. The device can then avoid having to flush previously submitted work to perform the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources that are still being referenced by outstanding commands, undefined rendering behavior results, including the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to the tile mapping data structure itself (which in hardware is a page table). The absence of the <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> value requires that tile mapping updates that <strong>CopyTileMappings</strong> specifies must be completed before any subsequent Direct3D command can proceed. </p> </dd> + + + + + <p>Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on <strong>Tier_1</strong> tiled resources, where reading and writing unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain. </p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> or <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance. </p><p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Updates tiles by copying from app memory to the tiled resource. </p> + <p><strong>UpdateTiles</strong> drops write operations to unmapped areas (except on <strong>Tier_1</strong> tiled resources, where writing to unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p>The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain.</p><p>The memory layout of the data on the source side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> or <strong>UpdateTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource to update.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region.</p> </dd> + + + <dd> <p>A reference to memory that contains the source tile data that <strong>UpdateTiles</strong> uses to update the tiled resource.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_COPY_NO_OVERWRITE}}</strong>. The other values aren't meaningful here, though +by definition the <strong>{{D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE}}</strong> value is basically what <strong>UpdateTiles</strong> does, but sources from app memory. +</p> </dd> + + + + + <p>Resizes a tile pool.</p> + <p><strong>ResizeTilePool</strong> increases or decreases the size of the tile pool depending on whether the app needs more or less working set for the tiled resources that are mapped into it. An app can allocate additional tile pools for new tiled resources, but if any single tiled resource needs more space than initially available in its tile pool, the app can increase the size of the resource's tile pool. A tiled resource can't have mappings into multiple tile pools simultaneously. </p><p>When you increase the size of a tile pool, additional tiles are added to the end of the tile pool via one or more new allocations by the driver; your app can't detect the breakdown into the new allocations. Existing memory in the tile pool is left untouched, and existing tiled resource mappings into that memory remain intact.</p><p>When you decrease the size of a tile pool, tiles are removed from the end (this is allowed even below the initial allocation size, down to 0). This means that new mappings can't be made past the new size. But, existing mappings past the end of the new size remain intact and useable. The memory is kept active as long as mappings to any part of the allocations that are being used for the tile pool memory remains. If after decreasing, some memory has been kept active because tile mappings are pointing to it and the tile pool is increased again (by any amount), the existing memory is reused first before any additional allocations occur to service the size of the increase. </p><p>To be able to save memory, an app has to not only decrease a tile pool but also remove and remap existing mappings past the end of the new smaller tile pool size.</p><p>The act of decreasing (and removing mappings) doesn't necessarily produce immediate memory savings. Freeing of memory depends on how granular the driver's underlying allocations for the tile pool are. When a decrease in the size of a tile pool happens to be enough to make a driver allocation unused, the driver can free the allocation. If a tile pool was increased and if you then decrease to previous sizes (and remove and remap tile mappings correspondingly), you will most likely yield memory savings. But, this scenario isn't guaranteed in the case that the sizes don't exactly align with the underlying allocation sizes chosen by the driver. </p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns <strong>{{E_INVALIDARG}}</strong> if the new tile pool size isn't a multiple of 64 {{KB}} or 0.</li> <li>Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.</li> <li>Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.</li> </ul><p>For <strong>{{E_INVALIDARG}}</strong> or <strong>{{E_OUTOFMEMORY}}</strong>, the existing tile pool remains unchanged, which includes existing mappings. </p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong> for the tile pool to resize.</p> </dd> + + + <dd> <p>The new size in bytes of the tile pool. The size must be a multiple of 64 {{KB}} or 0.</p> </dd> + + + + + <p>Specifies a data access ordering constraint between multiple tiled resources. For more info about this constraint, see Remarks.</p> + <p>Apps can use tiled resources to reuse tiles in different resources. But, a device and driver might not be able to determine whether some memory in a tile pool that was just rendered to is now being used for reading. +</p><p>For example, an app can render to some tiles in a tile pool with one tiled resource but then read from the same tiles by using a different tiled resource. These tiled-resource operations are different from using one resource and then just switching from writing with <strong>{{ID3D11RenderTargetView}}</strong> to reading with <strong>{{ID3D11ShaderResourceView}}</strong>. The runtime already tracks and handles these one resource operations using <strong>{{ID3D11RenderTargetView}}</strong> and <strong>{{ID3D11ShaderResourceView}}</strong>. +</p><p>When an app transitions from accessing (reading or writing) some location in a tile pool with one resource to accessing the same memory (read or write) via another tiled resource (with mappings to the same memory), the app must call <strong>TiledResourceBarrier</strong> after the first use of the resource and before the second. The parameters are the <em>pTiledResourceOrViewAccessBeforeBarrier</em> for accesses before the barrier (via rendering, copying), and the <em>pTiledResourceOrViewAccessAfterBarrier</em> for accesses after the barrier by using the same tile pool memory. If the resources are identical, the app doesn't need to call <strong>TiledResourceBarrier</strong> because this kind of hazard is already tracked and handled. +</p><p>The barrier call informs the driver that operations issued to the resource before the call must complete before any accesses that occur after the call via a different tiled resource that shares the same memory. +</p><p>Either or both of the parameters (before or after the barrier) can be <strong>{{NULL}}</strong>. <strong>{{NULL}}</strong> before the barrier means all tiled resource accesses before the barrier must complete before the resource specified after the barrier can be referenced by the graphics processing unit ({{GPU}}). <strong>{{NULL}}</strong> after the barrier means that any tiled resources accessed after the barrier can only be executed by the {{GPU}} after accesses to the tiled resources before the barrier are finished. Both <strong>{{NULL}}</strong> means all previous tiled resource accesses are complete before any subsequent tiled resource access can proceed. +</p><p>An app can pass a view reference, a resource, or <strong>{{NULL}}</strong> for each parameter. Views are allowed not only for convenience but also to allow the app to scope the barrier effect to a relevant portion of a resource. +</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must complete before the access operations on the object that <em>pTiledResourceOrViewAccessAfterBarrier</em> specifies.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must begin after the access operations on the object that <em>pTiledResourceOrViewAccessBeforeBarrier</em> specifies.</p> </dd> + + + + + <p> Allows apps to determine when either a capture or profiling request is enabled.</p> + <p>Returns <strong>{{TRUE}}</strong> if the capture tool is present and capturing or the app is being profiled such that <strong>SetMarkerInt</strong> or <strong>BeginEventInt</strong> will be logged to <strong>{{ETW}}</strong>. Otherwise, it returns <strong>{{FALSE}}</strong>. Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so. </p><p>If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.</p> + <p>Returns <strong>{{TRUE}}</strong> if capture or profiling is enabled and <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Allows applications to annotate graphics commands.</p> + <p><strong>SetMarkerInt</strong> allows applications to annotate graphics commands, in order to provide more context to what the {{GPU}} is executing. When {{ETW}} logging or a support tool is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the beginning of a range of graphics commands.</p> + <p><strong>BeginEventInt</strong> allows applications to annotate the beginning of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When <strong>{{ETW}}</strong> logging (or a supported tool) is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the end of a range of graphics commands.</p> + <p><strong>EndEvent</strong> allows applications to annotate the end of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When the appropriate <strong>{{ETW}}</strong> logging is not enabled, this method does nothing. When {{ETW}} logging is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines.</p> + <p>This method does not return a value.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device2}}</strong> adds new methods to those in <strong>{{ID3D11Device1}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists. </p> + <p>The <strong>GetImmediateContext2</strong> method returns an <strong>{{ID3D11DeviceContext2}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext2</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device, <strong>CreateDeferredContext2</strong> fails with <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>, and you can't create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext2</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext2</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p>Gets info about how a tiled resource is broken into tiles.</p> + <p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the tiled resource to get info about.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_TILE_SHAPE}}</strong> to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. </p> <p> If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> to zeros, except the <strong>StartTileIndexInOverallResource</strong> member, which <strong>GetResourceTiling</strong> sets to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff). The <strong>{{D3D11_PACKED_TILE}}</strong> constant indicates that the whole <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When you multisample a texture, the number of quality levels available for an adapter is dependent on the texture format that you use and the number of samples that you request. The maximum number of quality levels is defined by <strong>{{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}}</strong> in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format during multisampling. </p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. Currently, only <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE}}</strong> is supported. </p> </dd> + + + <dd> <p>A reference to a variable the receives the number of quality levels supported by the adapter. See Remarks.</p> </dd> + + + + + <p>Specifies the context in which a query occurs.</p> + <p> This enum is used by the following: </p><ul> <li> <strong>{{D3D11_QUERY_DESC1}}</strong> structure </li> <li> A {{CD3D11_QUERY_DESC1}} constructor.</li> <li> <strong>{{ID3D11DeviceContext3::Flush1}}</strong> method </li> </ul> + + + <dd> <p>The query can occur in all contexts.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D command queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D compute queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D copy queue.</p> </dd> + + + <dd> <p>The query occurs in the context of video.</p> </dd> + + + + + <p>Specifies texture layout options.</p> + <p>This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong> to ensure that each option is supported.</p><p>The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p>To demonstrate, consider the 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant.</p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000 +</code><p>To compute the swizzled address, the following code could be used (where the _pdep_u32 instruction is supported):</p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask); +</code> + + + <dd> <p>The texture layout is undefined, and is selected by the driver.</p> </dd> + + + <dd> <p>Data for the texture is stored in row major (sometimes called pitch-linear) order.</p> </dd> + + + <dd> <p>A default texture uses the standardized swizzle pattern.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting TextureLayout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}. </p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may only be used to create non-multisampled, textures with a single subresource (Planar {{YUV}} textures are supported). These textures may only be used as a source and destination of copy operations, and BindFlags must be zero. +</p> <p>{{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may only be used to create non-multisampled, non-depth-stencil textures. </p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting Layout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}.</p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may not be used with 3D textures. {{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may not be used with 3D textures that have mipmaps.</p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>A <strong>{{D3D11_FILL_MODE}}</strong>-typed value that determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_CULL_MODE}}</strong>-typed value that indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + <dd> <p>A <strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and (<strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1 ). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and ( <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView1::GetDesc1}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_SRV}}</strong> structure that views the resource as a buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_SRV1}}</strong> structure that views the resource as a 2D-texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_SRV1}}</strong> structure that views the resource as a 2D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV}}</strong> structure that views the resource as a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render-target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong> to create a render target.</p><p>A render-target-view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_RTV_DIMENSION}}</strong>-typed value that specifies the resource type and how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_RTV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_RTV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_UAV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_UAV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>A <strong>{{D3D11_QUERY}}</strong>-typed value that specifies the type of query.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies query behavior. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_CONTEXT_TYPE}}</strong>-typed value that specifies the context for the query.</p> </dd> + + + + + <p>A 2D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE2D_DESC1}}</strong> structure that receives the description of the 2D texture.</p> </dd> + + + + + <p>A 3D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE3D_DESC1}}</strong> structure that receives the description of the 3D texture.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count and conservative rasterization mode.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_RASTERIZER_DESC2}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count and conservative rasterization mode. </p> </dd> + + + + + <p>A shader-resource-view interface represents the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Gets the shader-resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that receives the description of the shader-resource view.</p> </dd> + + + + + <p>A render-target-view interface represents the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A render target is a resource that can be written by the output-merger stage at the end of a render pass. Each render target can also have a corresponding depth-stencil view.</p> + + + + <p>Gets the properties of a render-target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> structure that receives the description of the render-target view.</p> </dd> + + + + + <p>An unordered-access-view interface represents the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Gets a description of the resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC1}}</strong> structure that receives the description of the unordered-access resource.</p> </dd> + + + + + <p>Represents a query object for querying information from the graphics processing unit ({{GPU}}).</p> + <p>A query can be created with <strong>{{ID3D11Device3::CreateQuery1}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Gets a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that receives a description of the query.</p> </dd> + + + + + <p> The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext3}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext2}}</strong>. </p> + + + + <p> Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}), with a specified context type and an optional event handle to create an event query. </p> + <p><strong>Flush1</strong> has parameters. For more information, see <strong>{{ID3D11DeviceContext::Flush}}</strong>, which doesn't have parameters. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D11_CONTEXT_TYPE}}</strong> that specifies the context in which a query occurs, such as a 3D command queue, 3D compute queue, 3D copy queue, video, or image. </p> </dd> + + + <dd> <p> An optional event handle. When specified, this method creates an event query. </p> <p><strong>Flush1</strong> operates asynchronously, therefore it can return either before or after the {{GPU}} finishes executing the queued graphics commands, which will eventually complete. To create an event query, you can call <strong>{{ID3D11Device::CreateQuery}}</strong> with the value <strong>{{D3D11_QUERY_EVENT}}</strong> value. To determine when the {{GPU}} is finished processing the graphics commands, you can then use that event query in a call to <strong>{{ID3D11DeviceContext::GetData}}</strong>. </p> </dd> + + + + + <p> Sets the hardware protection state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies whether to enable hardware protection. </p> </dd> + + + + + <p> Gets whether hardware protection is enabled. </p> + <p> This method does not return a value. </p> + + + <dd> <p> After this method returns, points to a {{BOOL}} that indicates whether hardware protection is enabled. </p> </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + + + + + + + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11DeviceContext4}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11DeviceContext4}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + + + + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device3}}</strong> adds new methods to those in <strong>{{ID3D11Device2}}</strong>.</p> + + + + <p>Creates a 2D texture.</p> + <p><strong>CreateTexture2D1</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of subresources is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a 3D texture.</p> + <p><strong>CreateTexture3D1</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the shader-resource view. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}}</strong> flag.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that describes a shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11ShaderResourceView1}}</strong> interface for the created shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Creates a view for accessing an unordered access resource. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the unordered-access view. See Direct3D 11 Return Codes for other possible return values. </p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11RenderTargetView1}}</strong> interface for the created render-target view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p>Creates a query object for querying information from the graphics processing unit ({{GPU}}). </p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that represents a query description.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11Query1}}</strong> interface for the created query object. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Gets an immediate context, which can play back command lists. </p> + <p> The <strong>GetImmediateContext3</strong> method outputs an <strong>{{ID3D11DeviceContext3}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene. </p><p> The <strong>GetImmediateContext3</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext3</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext3</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p> Copies data into a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p> Copies data from a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [Bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When reading from sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offseting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p>Describes Direct3D 11.4 feature options in the current graphics driver.</p> + <p>Use this structure with the {{D3D11_FEATURE_D3D11_OPTIONS4}} member of <strong>{{D3D11_FEATURE}}</strong>. </p><p>Refer to the section on {{NV12}} in Direct3D 11.4 Features.</p> + + + <dd> <p>Specifies a {{BOOL}} that determines if {{NV12}} textures can be shared across processes and {{D3D}} devices.</p> </dd> + + + + + <p> The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device4}}</strong> adds new methods to those in <strong>{{ID3D11Device3}}</strong>, such as <strong>RegisterDeviceRemovedEvent</strong> and <strong>UnregisterDeviceRemoved</strong>. </p> + + + + <p> Registers the "device removed" event and indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism. </p> + <p>Indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism, rather than as an {{HRESULT}} from <strong>Present</strong>. The reason for device removal can be retrieved using <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> after being notified of the occurrence.</p><p> Applications register and un-register a Win32 event handle with a particular device. That event handle will be signaled when the device becomes removed. A poll into the device's <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> method indicates that the device is removed. </p><p> <strong>{{ISignalableNotifier}}</strong> or <strong>SetThreadpoolWait</strong> can be used by {{UWP}} apps. </p><p> When the graphics device is lost, the app or title will receive the graphics event, so that the app or title knows that its graphics device is no longer valid and it is safe for the app or title to re-create its DirectX devices. In response to this event, the app or title needs to re-create its rendering device and pass it into a SetRenderingDevice call on the composition graphics device objects. </p><p> After setting this new rendering device, the app or title needs to redraw content of all the pre-existing surfaces after the composition graphics device's <strong>OnRenderingDeviceReplaced</strong> event is fired. </p><p> This method supports Composition for device loss. </p><p> The event is not signaled when it is most ideal to re-create. So, instead, we recommend iterating through the adapter ordinals and creating the first ordinal that will succeed. </p><p> The application can register an event with the device. The application will be signaled when the device becomes removed. </p><p> If the device is already removed, calls to <strong>RegisterDeviceRemovedEvent</strong> will signal the event immediately. No device-removed error code will be returned from <strong>RegisterDeviceRemovedEvent</strong>. </p><p> Each "device removed" event is never signaled, or is signaled only once. These events are not signaled during device destruction. These events are unregistered during destruction. </p><p> The semantics of <strong>RegisterDeviceRemovedEvent</strong> are similar to <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong>. </p> + <p> See Direct3D 11 Return Codes. </p> + + + <dd> <p> The handle to the "device removed" event. </p> </dd> + + + <dd> <p> A reference to information about the "device removed" event, which can be used in <strong>UnregisterDeviceRemoved</strong> to unregister the event. </p> </dd> + + + + + <p> Unregisters the "device removed" event. </p> + <p> See <strong>RegisterDeviceRemovedEvent</strong>. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Information about the "device removed" event, retrieved during a successful <strong>RegisterDeviceRemovedEvent</strong> call. </p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11Device5}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11Device5}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device5}}</strong> adds new methods to those in <strong>{{ID3D11Device4}}</strong>.</p><strong>Note</strong>??This interface, introduced in the Windows 10 Creators Update, is the latest version of the <strong>{{ID3D11Device}}</strong> interface. Applications targetting Windows 10 Creators Update should use this interface instead of earlier versions.? + + + + <p>Provides threading protection for critical sections of a multi-threaded application.</p> + <p>This interface is obtained by querying it from an immediate device context created with the <strong>{{ID3D11DeviceContext}}</strong> (or later versions of this) interface using {{IUnknown::QueryInterface}}.</p><p>Unlike {{D3D10}}, there is no multithreaded layer in {{D3D11}}. By default, multithread protection is turned off. Use <strong>SetMultithreadProtected</strong> to turn it on, then <strong>Enter</strong> and <strong>Leave</strong> to encapsulate graphics commands that must be executed in a specific order.</p><p>By default in {{D3D11}}, applications can only use one thread with the immediate context at a time. But, applications can use this interface to change that restriction. The interface can turn on threading protection for the immediate context, which will increase the overhead of each immediate context call in order to share one context with multiple threads.</p> + + + + <p>Enter a device's critical section.</p> + <p>If <strong>SetMultithreadProtected</strong> is set to true, then entering a device's critical section prevents other threads from simultaneously calling that device's methods, calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>Leave</strong> is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>Enter</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Turns multithread protection on or off.</p> + <p>True if multithread protection was already turned on prior to calling this method, false otherwise. </p> + + + <dd> <p>Set to true to turn multithread protection on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithread protection is turned on or not.</p> + <p>Returns true if multithread protection is turned on, false otherwise. </p> + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + + + + + + + + + + + + + <p>Specifies the type of a command list.</p> + <p>This enum is used by the following methods:</p><ul> <li> <strong>CreateCommandAllocator</strong> </li> <li> <strong>CreateCommandQueue</strong> </li> <li> <strong>CreateCommandList</strong> </li> </ul> + + + <dd> <p>Specifies a command buffer that the {{GPU}} can execute. A direct command list doesn't inherit any {{GPU}} state. </p> </dd> + + + <dd> <p>Specifies a command buffer that can be executed only directly via a direct command list. A bundle command list inherits all {{GPU}} state (except for the currently set pipeline state object and primitive topology).</p> </dd> + + + <dd> <p>Specifies a command buffer for computing. </p> </dd> + + + <dd> <p>Specifies a command buffer for copying (drawing).</p> </dd> + + + + + <p>Specifies flags to be used when creating a command queue.</p> + <p> This enum is used by the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates a default command queue.</p> </dd> + + + <dd> <p>Indicates that the {{GPU}} timeout should be disabled for this command queue.</p> </dd> + + + + + <p>Defines priority levels for a command queue.</p> + <p> This enumeration is used by the <strong>Priority</strong> member of the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Normal priority.</p> </dd> + + + <dd> <p>High priority.</p> </dd> + + + + + <p>Specifies how the pipeline interprets geometry or hull shader input primitives.</p> + <p>This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader has not been initialized with an input primitive type.</p> </dd> + + + <dd> <p>Interpret the input primitive as a point.</p> </dd> + + + <dd> <p>Interpret the input primitive as a line. </p> </dd> + + + <dd> <p>Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p>Interpret the input primitive as a control point patch.</p> </dd> + + + + + <p>Identifies the type of data contained in an input slot.</p> + <p> Specify one of these values in the member of a <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structure to specify the type of data for the input element of a pipeline state object. </p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Specifies the fill mode to use when rendering triangles.</p> + <p> Fill mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Specifies triangles facing a particular direction are not drawn.</p> + <p> Cull mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Specifies comparison options.</p> + <p> A comparison option determines how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for </p><ul> <li> a depth-stencil buffer (<strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>) </li> <li> depth-stencil operations (<strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong>) </li> <li> sampler state (<strong>{{D3D12_SAMPLER_DESC}}</strong>) </li> </ul> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identifies the portion of a depth-stencil buffer for writing depth data.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> structure.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>Identifies the stencil operations that can be performed during depth-stencil testing.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Specifies blend factors, which modulate values for the pixel shader and render target.</p> + <p>Source and destination blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>Specifies {{RGB}} or alpha blending operations.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>{{D3D12_BLEND}}</strong> value controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>{{D3D12_BLEND_OP}}</strong> value controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identifies which components of each pixel of a render target are writable during blending.</p> + <p> This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. </p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>Specifies logical operations to configure for a render target.</p> + <p>This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + <p>This enum is used by the <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p> When using triangle strip primitive topology, vertex positions are interpreted as vertices of a continuous triangle ?strip?. There is a special index value that represents the desire to have a discontinuity in the strip, the cut index value. This enum lists the supported cut values. +</p> + <p> This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates that there is no cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFF should be used as the cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFFFFFF should be used as the cut value. </p> </dd> + + + + + <p> Flags to control pipeline state. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structures. </p> + + + <dd> <p> Indicates no flags. </p> </dd> + + + <dd> <p> Indicates that the pipeline state should be compiled with additional information to assist debugging. This can only be set on {{WARP}} devices. +</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + + + + <p> Describes minimum precision support options for shaders in the current graphics driver. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> The returned info just indicates that the graphics hardware can perform {{HLSL}} operations at a lower precision than the standard 32-bit float precision, but doesn?t guarantee that the graphics hardware will actually run at a lower precision. </p> + + + <dd> <p>The driver supports only full 32-bit precision for all shader stages.</p> </dd> + + + <dd> <p>The driver supports 10-bit precision.</p> </dd> + + + <dd> <p>The driver supports 16-bit precision.</p> </dd> + + + + + <p> Identifies the tier level at which tiled resources are supported. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> There are three discrete pieces of functionality bundled together for tiled resource functionality: </p><ul> <li> A tile-based texture layout option where nearby texel addresses contain nearby data coordinates. A tile of texels contains nearly the same amount of texels in each cardinal dimension of the resource. This layout is represented in {{D3D12}} by <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </li> <li> Reserve a region of virtual address space for a resource, where each page is initially {{NULL}}-mapped. In {{D3D12}}, this is operation is encapsulated within <strong>{{ID3D12Device::CreateReservedResource}}</strong>, which only works with textures that have the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. </li> <li> The ability to change page mappings and manipulate texture data on tile granularities. In {{D3D12}}, these operations are <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>, <strong>{{ID3D12CommandQueue::CopyTileMappings}}</strong>, and <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong>. </li> </ul><p> Three significant changes over {{D3D11}} are: </p><ul> <li> Tile pools are replaced by heaps. Heaps provide a superset of capabilities than {{D3D11}} tile pools do. </li> <li> Reserved resources may be mapped to pages from multiple heaps at the same time. The {{D3D11}} restriction that all non-{{NULL}} mapped pages must come from the same heap does not exist. </li> <li> Applications should be aware of {{GPU}} virtual address capabilities, which enable litmus tests for particular usage scenarios. See <strong>{{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>. </li> </ul> + + + <dd> <p> Indicates that textures cannot be created with the <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong> layout. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> cannot be used, not even for buffers. </p> </dd> + + + <dd> <p> Indicates that 2D textures can be created with the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. Limitations exist for certain resource formats and properties. For more details, see <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> can be used. </p> <p> {{GPU}} reads or writes to {{NULL}} mappings are undefined. Applications are encouraged to workaround this limitation by repeatedly mapping the same page to everywhere a {{NULL}} mapping would've been used. </p> <p> When the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier_1 functionality is supported, including this additional support: </p> <ul> <li> When the size of a texture mipmap level is at least one standard tile shape for its format, the mipmap level is guaranteed to be nonpacked. For more info, see <strong>{{D3D12_PACKED_MIP_INFO}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see Sample(S,float,int,float,uint). <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> <p> Adapters that support feature level 12_0 all support {{TIER_2}} or greater. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier 2 is supported, with the addition that 3D textures (Volume Tiled Resources) are supported. </p> </dd> + + + + + + + + <p>Identifies the tier level of conservative rasterization.</p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is not supported.</p> </dd> + + + <dd> <p>Tier 1 enforces a maximum 1/2 pixel uncertainty region and does not support post-snap degenerates. This is good for tiled rendering, a texture atlas, light map generation and sub-pixel shadow maps.</p> </dd> + + + <dd> <p> Tier 2 reduces the maximum uncertainty region to 1/256 and requires post-snap degenerates not be culled. This tier is helpful for {{CPU}}-based algorithm acceleration (such as voxelization).</p> </dd> + + + <dd> <p> Tier 3 maintains a maximum 1/256 uncertainty region and adds support for inner input coverage. Inner input coverage adds the new value <code>{{SV_InnerCoverage}}</code> to High Level Shading Language ({{HLSL}}). This is a 32-bit scalar integer that can be specified on input to a pixel shader, and represents the underestimated conservative rasterization information (that is, whether a pixel is guaranteed-to-be-fully covered). This tier is helpful for occlusion culling.</p> </dd> + + + + + <p>Specifies resources that are supported for a provided format.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No resources are supported.</p> </dd> + + + <dd> <p>Buffer resources supported.</p> </dd> + + + <dd> <p>Vertex buffers supported.</p> </dd> + + + <dd> <p>Index buffers supported.</p> </dd> + + + <dd> <p>Streaming output buffers supported.</p> </dd> + + + <dd> <p>1D texture resources supported.</p> </dd> + + + <dd> <p>2D texture resources supported.</p> </dd> + + + <dd> <p>3D texture resources supported.</p> </dd> + + + <dd> <p>Cube texture resources supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Load</strong> function for texture objects is supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Sample</strong> function for texture objects is supported.</p> <strong>Note</strong>??If the device supports the format as a resource (1D, 2D, 3D, or cube map) but doesn't support this option, the resource can still use the Sample method but must use only the point filtering sampler state to perform the sample. ? </dd> + + + <dd> <p>The {{HLSL}} <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> functions for texture objects are supported.</p> <strong>Note</strong>??Windows?8 and later might provide limited support for these functions on Direct3D feature levels 9_1, 9_2, and 9_3. For more info, see Implementing shadow buffers for Direct3D feature level 9. + ? </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Mipmaps are supported.</p> </dd> + + + <dd> <p>Render targets are supported.</p> </dd> + + + <dd> <p>Blend operations supported.</p> </dd> + + + <dd> <p>Depth stencils supported.</p> </dd> + + + <dd> <p>Multisample antialiasing ({{MSAA}}) resolve operations are supported. For more info, see <strong>{{ID3D12GraphicsCommandList::ResolveSubresource}}</strong>. </p> </dd> + + + <dd> <p>Format can be displayed on screen.</p> </dd> + + + <dd> <p>Format can't be cast to another format.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled render target.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled texture and read into a shader with the {{HLSL}} <strong>Load</strong> function.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather function. This value is available in DirectX 10.1 or higher.</p> </dd> + + + <dd> <p>Format supports casting when the resource is a back buffer.</p> </dd> + + + <dd> <p>Format can be used for an unordered access view.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather with comparison function.</p> </dd> + + + <dd> <p>Format can be used with the decoder output.</p> </dd> + + + <dd> <p>Format can be used with the video processor output.</p> </dd> + + + <dd> <p>Format can be used with the video processor input.</p> </dd> + + + <dd> <p>Format can be used with the video encoder.</p> </dd> + + + + + <p> Specifies which unordered resource options are supported for a provided format. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No unordered resource options are supported.</p> </dd> + + + <dd> <p>Format supports atomic add.</p> </dd> + + + <dd> <p>Format supports atomic bitwise operations.</p> </dd> + + + <dd> <p>Format supports atomic compare with store or exchange.</p> </dd> + + + <dd> <p>Format supports atomic exchange.</p> </dd> + + + <dd> <p>Format supports atomic min and max.</p> </dd> + + + <dd> <p>Format supports atomic unsigned min and max.</p> </dd> + + + <dd> <p>Format supports a typed load.</p> </dd> + + + <dd> <p>Format supports a typed store.</p> </dd> + + + <dd> <p>Format supports logic operations in blend state.</p> </dd> + + + <dd> <p> Format supports tiled resources. Refer to Volume Tiled Resources. </p> </dd> + + + <dd> <p> Format supports multi-plane overlays. </p> </dd> + + + + + <p> Specifies options for determining quality levels. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS}}</strong> structure. </p> + + + <dd> <p> No options are supported. </p> </dd> + + + <dd> <p> The number of quality levels can be determined for tiled resources. </p> </dd> + + + + + <p> Specifies the level of sharing across nodes of an adapter, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> + <p> This enum is used by the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p> If an adapter only has 1 node, then cross-node sharing doesn't apply, so the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure is set to {{D3D12_CROSS_NODE_SHARING_NOT_SUPPORTED}}. </p> </dd> + + + <dd> <p> Tier 1 Emulated. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED}} have Tier 1 support. However, drivers stage these copy operations through a driver-internal system memory allocation. This will cause these copy operations to consume time on the destination {{GPU}} as well as the source. </p> </dd> + + + <dd> <p> Tier 1. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1}} only support the following cross-node copy operations: </p> <ul> <li> <strong>{{ID3D12CommandList::CopyBufferRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyTextureRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyResource}}</strong> </li> </ul> <p> Additionally, the cross-node resource must be the destination of the copy operation. </p> </dd> + + + <dd> <p> Tier 2. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_2}} support all operations across nodes, except for the following: </p> <ul> <li> Render target views. </li> <li> Depth stencil views. </li> <li> {{UAV}} atomic operations. Similar to {{CPU}}/{{GPU}} interop, shaders may perform {{UAV}} atomic operations; however, no atomicity across adapters is guaranteed. </li> </ul> <p> Applications can retrieve the node where a resource/heap exists from the <strong>{{D3D12_HEAP_DESC}}</strong> structure. These values are retrievable for opened resources. The runtime performs the appropriate re-mapping in case the 2 devices are using different {{UMD}}-specified node re-mappings. </p> </dd> + + + + + <p> Specifies which resource heap tier the hardware and driver support. </p> + <p> This enum is used by the <strong>ResourceHeapTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> This enum specifies which resource heap tier the hardware and driver support. Lower tiers require more heap attribution than greater tiers. </p><p> Resources can be categorized into the following types: </p><ul> <li>Buffers</li> <li>Non-render target &amp; non-depth stencil textures</li> <li>Render target or depth stencil textures</li> </ul> + + + <dd> <p> Indicates that heaps can only support resources from a single resource category. For the list of resource categories, see Remarks. In tier 1, these resource categories are mutually exclusive and cannot be used with the same heap. The resource category must be declared when creating a heap, using the correct <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constant. Applications cannot create heaps with flags that allow all three categories. </p> </dd> + + + <dd> <p> Indicates that heaps can support resources from all three categories. For the list of resource categories, see Remarks. In tier 2, these resource categories can be mixed within the same heap. Applications may create heaps with flags that allow all three categories; but are not required to do so. Applications may be written to support tier 1 and seamlessly run on tier 2. </p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p>Specifies the version of root signature layout.</p> + <p> This enum is used by the following structures and methods.</p><ul> <li> <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> </li> <li> <strong>{{D3D12_FEATURE_DATA_ROOT_SIGNATURE}}</strong> </li> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>{{D3D12SerializeRootSignature}}</strong> </li> </ul> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version 1.1 of root signature layout. Refer to Root Signature Version 1.1.</p> </dd> + + + + + <p>Specifies a shader model.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_SHADER_MODEL}}</strong> structure.</p> + + + <dd> <p>Indicates shader model 5.1.</p> </dd> + + + <dd> <p>Indicates shader model 6.0.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies the type of heap. When resident, heaps reside in a particular physical memory pool with certain {{CPU}} cache properties. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> </li> <li> <strong>{{D3D12_HEAP_PROPERTIES}}</strong> </li> <li> <strong>GetCustomHeapProperties</strong> </li> </ul><p> The heap types fall into two categories: abstracted heap types, and custom heap types. </p><p> The following are abstracted heap types: </p><ul> <li>{{D3D12_HEAP_TYPE_DEFAULT}}</li> <li>{{D3D12_HEAP_TYPE_UPLOAD}}</li> <li>{{D3D12_HEAP_TYPE_READBACK}}</li> </ul><p> The following is a custom heap type: </p><ul> <li>{{D3D12_HEAP_TYPE_CUSTOM}}</li> </ul><p> The abstracted heap types (_DEFAULT, _UPLOAD, and _READBACK) are useful to simplify writing adapter-neutral applications, because such applications don't need to be aware of the adapter memory architecture. To use an abstracted heap type to simplify writing adapter-neutral applications, the application essentially treats the adapter as if it were a discrete or {{NUMA}} adapter. But, using the heap types enables efficient translation for {{UMA}} adapters. Adapter architecture neutral applications should assume there are two memory pools available, where the pool with the most {{GPU}} bandwidth cannot provide {{CPU}} access. The pool with the least {{GPU}} bandwidth can have {{CPU}} access; but must be either optimized for upload to {{GPU}} or readback from {{GPU}}. </p> + + + <dd> <p> Specifies the default heap. This heap type experiences the most bandwidth for the {{GPU}}, but cannot provide {{CPU}} access. The {{GPU}} can read and write to the memory from this pool, and resource transition barriers may be changed. The majority of heaps and resources are expected to be located here, and are typically populated through resources in upload heaps. </p> </dd> + + + <dd> <p> Specifies a heap used for uploading. This heap type has {{CPU}} access optimized for uploading to the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{CPU}}-write-once, {{GPU}}-read-once data; but {{GPU}}-read-once is stricter than necessary. {{GPU}}-read-once-or-from-cache is an acceptable use-case for the data; but such usages are hard to judge due to differing {{GPU}} cache designs and sizes. If in doubt, stick to the {{GPU}}-read-once definition or profile the difference on many {{GPUs}} between copying the data to a _DEFAULT heap vs. reading the data from an _UPLOAD heap. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ and cannot be changed away from this. The {{CPU}} address for such heaps is commonly not efficient for {{CPU}} reads. </p> <p> The following are typical usages for _UPLOAD heaps: </p> <ul> <li> Initializing resources in a _DEFAULT heap with data from the {{CPU}}. </li> <li> Uploading dynamic data in a constant buffer that is read, repeatedly, by each vertex or pixel. </li> </ul> <p> The following are likely not good usages for _UPLOAD heaps: </p> <ul> <li> Re-initializing the contents of a resource every frame. </li> <li> Uploading constant data which is only used every other Draw call, where each Draw uses a non-trivial amount of other data. </li> </ul> </dd> + + + <dd> <p> Specifies a heap used for reading back. This heap type has {{CPU}} access optimized for reading data back from the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{GPU}}-write-once, {{CPU}}-readable data. The {{CPU}} cache behavior is write-back, which is conducive for multiple sub-cache-line {{CPU}} reads. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_COPY_DEST, and cannot be changed away from this. </p> </dd> + + + <dd> <p> Specifies a custom heap. The application may specify the memory pool and {{CPU}} cache properties directly, which can be useful for {{UMA}} optimizations, multi-engine, multi-adapter, or other special cases. To do so, the application is expected to understand the adapter architecture to make the right choice. For more details, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE, <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>, and <strong>GetCustomHeapProperties</strong>. </p> </dd> + + + + + <p>Specifies the {{CPU}}-page properties for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p> + + + <dd> <p>The {{CPU}}-page property is unknown.</p> </dd> + + + <dd> <p> The {{CPU}} cannot access the heap, therefore no page properties are available. </p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-combined.</p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-back.</p> </dd> + + + + + <p>Specifies the memory pool for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p><p>When the adapter is {{UMA}}, {{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory. When</p><p> the adapter is not {{UMA:}} +{{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL}} refer to the same memory. +{{D3D12_MEMORY_POOL_L1}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory.</p> + + + <dd> <p> The memory pool is unknown. </p> </dd> + + + <dd> <p> The memory pool is {{L0}}. {{L0}} is the physical system memory pool. When the adapter is discrete/{{NUMA}}, this pool has greater bandwidth for the {{CPU}} and less bandwidth for the {{GPU}}. When the adapter is {{UMA}}, this pool is the only one which is valid. </p> </dd> + + + <dd> <p> The memory pool is {{L1}}. {{L1}} is typically known as the physical video memory pool. {{L1}} is only available when the adapter is discrete/{{NUMA}}, and has greater bandwidth for the {{GPU}} and cannot even be accessed by the {{CPU}}. When the adapter is {{UMA}}, this pool is not available. </p> </dd> + + + + + <p> Specifies heap options, such as whether the heap can contain textures, and whether resources are shared across adapters. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{ID3D12Device::CreateHeap}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> </ul><p> The following heap flags must be used with <strong>{{ID3D12Device::CreateHeap}}</strong>, but will be set automatically for implicit heaps created by <strong>{{ID3D12Device::CreateCommittedResource}}</strong>. </p><p> Adapters that only support <strong>heap tier 1</strong> must set two out of the three following flags. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_BUFFERS}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_BUFFER}} (which is a <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> enumeration constant). </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} together with either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. (The latter two items are <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants.) </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} and {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are absent. </td></tr> </table><p>?</p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The heap is shared. Refer to Shared Heaps.</p> </dd> + + + <dd> <p> The heap isn't allowed to contain buffers. </p> </dd> + + + <dd> <p> The heap is allowed to contain swap-chain surfaces. </p> </dd> + + + <dd> <p> The heap is allowed to share resources across adapters. Refer to Shared Heaps. </p> </dd> + + + <dd> <p> The heap is not allowed to store Render Target ({{RT}}) and/or Depth-Stencil ({{DS}}) textures. </p> </dd> + + + <dd> <p>The heap is not allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are present. Refer to <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> and <strong>{{D3D12_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>_</p> </dd> + + + <dd> <p> The heap is allowed to store all types of buffers and/or textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store buffers. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store non-{{RT}}, non-{{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store {{RT}} and/or {{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p> Specifies texture layout options. </p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p><p> This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> to ensure that each option is supported. </p><p> The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p> To demonstrate, consider the 2D 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant: </p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000</code><p> To compute the swizzled address, the following code could be used (where the <strong>_pdep_u32</strong> intrinsic instruction is supported): </p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask);</code> + + + <dd> <p> Indicates that the layout is unknown, and is likely adapter-dependent. During creation, the driver chooses the most efficient layout based on other resource properties, especially resource size and flags. Prefer this choice unless certain functionality is required from another texture layout. </p> <p> Zero-copy texture upload optimizations exist for {{UMA}} architectures; see <strong>{{ID3D12Resource::WriteToSubresource}}</strong>. </p> </dd> + + + <dd> <p> Indicates that data for the texture is stored in row-major order (sometimes called "pitch-linear order"). </p> <p> This texture layout locates consecutive texels of a row contiguously in memory, before the texels of the next row. Similarly, consecutive texels of a particular depth or array slice are contiguous in memory before the texels of the next depth or array slice. Padding may exist between rows and between depth or array slices to align collections of data. A stride is the distance in memory between rows, depth, or array slices; and it includes any padding. </p> <p> This texture layout enables sharing of the texture data between multiple adapters, when other layouts aren't available. </p> <p> Many restrictions apply, because this layout is generally not efficient for extensive usage: </p> <ul> <li> The locality of nearby texels is not rotationally invariant. </li> <li> Only the following texture properties are supported: <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE_2D. </li> <li> A single mip level. </li> <li> A single array slice. </li> <li> 64KB alignment. </li> <li> Non-{{MSAA}}. </li> <li> No <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL. </li> <li> The format cannot be a {{YUV}} format. </li> </ul> </li> <li> The texture must be created on a heap with <strong>{{D3D12_HEAP_FLAG}}</strong>_SHARED_CROSS_ADAPTER. </li> </ul> <p> Buffers are created with <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR, because row-major texture data can be located in them without creating a texture object. This is commonly used for uploading or reading back texture data, especially for discrete/{{NUMA}} adapters. However, <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR can also be used when marshaling texture data between {{GPUs}} or adapters. For examples of usage with <strong>{{ID3D12GraphicsCommandList::CopyTextureRegion}}</strong>, see some of the following topics: </p> <ul> <li> Default Texture Mapping and Standard Swizzle </li> <li> Predication </li> <li> Synchronization and Multi-Engine </li> <li> Uploading Texture Data </li> </ul> </dd> + + + <dd> <p> Indicates that the layout within 64KB tiles and tail mip packing is up to the driver. No standard swizzle pattern. </p> <p> This texture layout is arranged into contiguous 64KB regions, also known as tiles, containing near equilateral amount of consecutive number of texels along each dimension. Tiles are arranged in row-major order. While there is no padding between tiles, there are typically unused texels within the last tile in each dimension. The layout of texels within the tile is undefined. Each subresource immediately follows where the previous subresource end, and the subresource order follows the same sequence as subresource ordinals. However, tail mip packing is adapter-specific. For more details, see tiled resource tier and <strong>{{ID3D12Device::GetResourceTiling}}</strong>. </p> <p> This texture layout enables partially resident or sparse texture scenarios when used together with virtual memory page mapping functionality. This texture layout must be used together with <strong>{{ID3D12Device::CreateReservedResource}}</strong> to enable the usage of <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> <p> Some restrictions apply to textures with this layout: </p> <ul> <li> The adapter must support <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong> 1 or greater. </li> <li> 64KB alignment must be used. </li> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D is not supported, nor are all formats. </li> <li> The tiled resource tier indicates whether textures with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE3D is supported. </li> </ul> </dd> + + + <dd> <p> Indicates that a default texture uses the standardized swizzle pattern. </p> <p> This texture layout is arranged the same way that {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} is, except that the layout of texels within the tile is defined. Tail mip packing is adapter-specific. </p> <p> This texture layout enables optimizations when marshaling data between multiple adapters or between the {{CPU}} and {{GPU}}. The amount of copying can be reduced when multiple components understand the texture memory layout. This layout is generally more efficient for extensive usage than row-major layout, due to the rotationally invariant locality of neighboring texels. This layout can typically only be used with adapters that support standard swizzle, but exceptions exist for cross-adapter shared heaps. </p> <p> The restrictions for this layout are that the following aren't supported: </p> <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D </li> <li> Multi-sample anti-aliasing ({{MSAA}}) </li> <li> <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL </li> <li> Formats within the <strong>{{DXGI_FORMAT}}</strong>_R32G32B32_TYPELESS group </li> </ul> </dd> + + + + + <p> Specifies options for working with resources. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p>Allows a render target view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_RENDER_TARGET}}. Some adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth during common rendering. This characteristic may not be beneficial for textures that are never rendered to, nor is it available for textures compressed with {{BC}} formats. Applications should avoid setting this flag when rendering will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li> Either the texture format must support render target capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support render target capabilities at the current feature level.</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}. +</li> <li>Cannot be used with 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}, nor usage with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}.</li> </ul> </dd> + + + <dd> <p>Allows a depth stencil view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_DEPTH_WRITE}} and/or {{D3D12_RESOURCE_STATE_DEPTH_READ}}. Most adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth and maximize optimizations for early depth-test. Applications should avoid setting this flag when depth operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support depth stencil capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support depth stencil capabilities at the current feature level.</li> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}, 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}, {{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}, {{D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS}}, {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}}, {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}}, nor used with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}} or {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}. +</li> <li>Precludes usage of <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong>. +</li> <li>Precludes {{GPU}} copying of a subregion. <strong>CopyTextureRegion</strong> must copy a whole subresource to or from resources with this flag.</li> </ul> </dd> + + + <dd> <p>Allows an unordered access view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}. Some adapter architectures must resort to less efficient texture layouts in order to provide this functionality. If a texture is rarely used for unordered access, it may be worth having two textures around and copying between them. One texture would have this flag, while the other wouldn't. Applications should avoid setting this flag when unordered access operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support unordered access capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support unordered access capabilities at the current feature level. +</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}, nor when the feature level is less than 11.0. +</li> <li>Cannot be used with {{MSAA}} textures. </li> </ul> </dd> + + + <dd> <p>Disallows a shader resource view to be created for the resource, as well as disables the resource to transition into the state of {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}. Some adapter architectures experience increased bandwidth for depth stencil textures when shader resource views are precluded. If a texture is rarely used for shader resource, it may be worth having two textures around and copying between them. One texture would have this flag and the other wouldn't. Applications should set this flag when depth stencil textures will never be used from shader resource views. +</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. +</li> </ul> </dd> + + + <dd> <p>Allows the resource to be used for cross-adapter data, as well as the same features enabled by {{ALLOW_SIMULTANEOUS_ACCESS}}. Cross adapter resources commonly preclude techniques that reduce effective texture bandwidth during usage, and some adapter architectures may require different caching behavior. Applications should avoid setting this flag when the resource data will never be used with another adapter.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with heaps that have {{D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER}}.</li> <li>Cannot be used with heaps that have {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}.</li> </ul> </dd> + + + <dd> <p>Allows a resource to be simultaneously accessed by multiple different queues, devices or processes (for example, allows a resource to be used with <strong>ResourceBarrier</strong> transitions performed in more than one command list executing at the same time). </p> <p>Simultaneous access allows multiple readers and one writer, as long as the writer doesn't concurrently modify the texels that other readers are accessing. Some adapter architectures cannot leverage techniques to reduce effective texture bandwidth during usage. </p> <p>However, applications should avoid setting this flag when multiple readers are not required during frequent, non-overlapping writes to textures. Use of this flag can compromise resource fences to perform waits, and prevents any compression being used with a resource.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}; but buffers always have the properties represented by this flag. +</li> <li>Cannot be used with {{MSAA}} textures.</li> </ul> </dd> + + + + + <p> Specifies a range of tile mappings. </p> + <p> Use these flags with <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p> The tile range is <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Skip the tile range. </p> </dd> + + + <dd> <p> Reuse a single tile in the tile range. </p> </dd> + + + + + <p> Specifies how to perform a tile-mapping operation. </p> + <p> This enum is used by the following methods:</p><ul> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> </ul> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p>Unsupported, do not use. </p> </dd> + + + + + <p> Specifies how to copy a tile. </p> + <p> This enum is used by the <strong>CopyTiles</strong> method. </p> + + + <dd> <p> No tile-copy flags are specified. </p> </dd> + + + <dd> <p> Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the specified buffer location, reading tiles sequentially, to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), to the specified buffer location, deswizzling to linear memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. </p> </dd> + + + + + <p> Specifies the state of a resource regarding how the resource is being used. </p> + <p> This enum is used by the following methods: </p><ul> <li> <strong>CreateCommittedResource</strong> </li> <li> <strong>CreatePlacedResource</strong> </li> <li> <strong>CreateReservedResource</strong> </li> </ul> + + + <dd> <p>Applications should only transition to this state for accessing a resource across different graphics engine types.</p> <p>Specifically, a resource must be in the {{COMMON}} state before being used on a {{COPY}} queue (when previous used on {{DIRECT}}/{{COMPUTE}}), and before being used on {{DIRECT}}/{{COMPUTE}} (when previously used on {{COPY}}). This restriction does not exist when accessing data between {{DIRECT}} and {{COMPUTE}} queues.</p> <p>The {{COMMON}} state can be used for all usages on a Copy queue using the implicit state transitions. For more information, in Synchronization and Multi-Engine, find "common". </p> <p>Additionally, textures must be in the {{COMMON}} state for {{CPU}} access to be legal, assuming the texture was created in a {{CPU}}-visible heap in the first place.</p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as a vertex buffer or constant buffer. This is a read-only state. </p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as an index buffer. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as a render target. A subresource must be in this state when it is rendered to or when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong>. This is a write-only state. To read from a render target as a shader resource the resource must be in either {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}.</p> </dd> + + + <dd> <p> The resource is used for unordered access. A subresource must be in this state when it is accessed by the 3D pipeline via an unordered access view. A subresource must also be in this state when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewInt}}</strong> or <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong>. This is a read/write state. </p> </dd> + + + <dd> <p>{{DEPTH_WRITE}} is a state which is mutually exclusive with other states. It should be used for <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> when the flags (see <strong>{{D3D12_CLEAR_FLAGS}}</strong>) indicate a given subresource should be cleared (otherwise the subresource state doesn't matter), or when using it in a writable depth stencil view (see <strong>{{D3D12_DSV_FLAGS}}</strong>) when the {{PSO}} has depth write enabled (see <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>). +</p> </dd> + + + <dd> <p>{{DEPTH_READ}} is a state which can be combined with other states. It should be used when the subresource is in a read-only depth stencil view, or when the <em>DepthEnable</em> parameter of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> is false. It can be combined with other read states (for example, {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}), such that the resource can be used for the depth or stencil test, and accessed by a shader within the same draw call. Using it when depth will be written by a draw call or clear command is invalid.</p> </dd> + + + <dd> <p> The resource is used with a shader other than the pixel shader. A subresource must be in this state before being read by any stage (except for the pixel shader stage) via a shader resource view. You can still use the resource in a pixel shader with this flag as long as it also has the flag {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}} set. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with a pixel shader. A subresource must be in this state before being read by the pixel shader via a shader resource view. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with stream output. A subresource must be in this state when it is accessed by the 3D pipeline as a stream-out target. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as an indirect argument. Subresources must be in this state when they are used as the argument buffer passed to the indirect drawing method <strong>{{ID3D12GraphicsCommandList::ExecuteIndirect}}</strong>. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a copy operation. Subresources must be in this state when they are used as the destination of copy operation, or a blt operation. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as the source in a copy operation. Subresources must be in this state when they are used as the source of copy operation, or a blt operation. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a resolve operation. </p> </dd> + + + <dd> <p> The resource is used as the source in a resolve operation. </p> </dd> + + + <dd> <p>This is the required starting state for upload heaps. Applications should generally avoid this state when possible, and instead transition resources to only the actually-used states.</p> </dd> + + + <dd> <p> Synonymous with {{D3D12_RESOURCE_STATE_COMMON}}. </p> </dd> + + + <dd> <p> The resource is used for Predication. </p> </dd> + + + + + <p>Specifies a type of resource barrier (transition in resource use) description.</p> + <p>This enum is used in the <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong> structure. Use these values with the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method.</p> + + + <dd> <p>A transition barrier that indicates a transition of a set of subresources between different usages. The caller must specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p>An aliasing barrier that indicates a transition between usages of 2 different resources that have mappings into the same tile pool. The caller can specify both the before and the after resource. Note that one or both resources can be <strong>{{NULL}}</strong>, which indicates that any tiled resource could cause aliasing.</p> </dd> + + + <dd> <p>An unordered access view ({{UAV}}) barrier that indicates all {{UAV}} accesses (reads or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Flags for setting split resource barriers. </p> + <p>Split barriers allow a single transition to be split into begin and end halves (refer to Synchronization and Multi-Engine).</p><p> This enum is used by the <em>Flags</em> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p> + + + <dd> <p> No flags. </p> </dd> + + + <dd> <p> This starts a barrier transition in a new state, putting a resource in a temporary no-access condition. </p> </dd> + + + <dd> <p> This barrier completes a transition, setting a new state and restoring active access to a resource.</p> </dd> + + + + + <p>Specifies what type of texture copy is to take place.</p> + <p>This enum is used by the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure.</p> + + + <dd> <p>Indicates a subresource, identified by an index, is to be copied.</p> </dd> + + + <dd> <p>Indicates a place footprint, identified by a <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure, is to be copied.</p> </dd> + + + + + <p>Specifies a resolve operation.</p> + <p>This enum is used by the <strong>{{ID3D12GraphicsCommandList1::ResolveSubresourceRegion}}</strong> function.</p> + + + <dd> <p>Resolves compressed source samples to their uncompressed values. When using this operation, the source and destination resources must have the same sample count, unlike the min, max, and average operations that require the destination to have a sample count of 1.</p> </dd> + + + <dd> <p>Resolves the source samples to their minimum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their maximum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their average value. It can be used with any non-integer render target format, including the depth plane. It can't be used with integer render target formats, including the stencil plane.</p> </dd> + + + + + <p> Specifies how memory gets routed by a shader resource view ({{SRV}}). </p> + <p> This enum allows the {{SRV}} to select how memory gets routed to the four return components in a shader after a memory fetch. The options for each shader component [0..3] (corresponding to {{RGBA}}) are: component 0..3 from the {{SRV}} fetch result or force 0 or force 1. </p><p> The default 1:1 mapping can be indicated by specifying {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}}, otherwise an arbitrary mapping can be specified using the macro {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}. See below. </p><p>Note the following defines:</p><code>#define {{D3D12_SHADER_COMPONENT_MAPPING_MASK}} 0x7 +#define {{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}} 3 +#define {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}} (1&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*4)) +#define {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(Src0,Src1,Src2,Src3) ((((Src0)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})| \ (((Src1)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;{{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}})| \ (((Src2)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*2))| \ (((Src3)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*3))| \ {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}})) +#define {{D3D12_DECODE_SHADER_4_COMPONENT_MAPPING}}(ComponentToExtract,Mapping) (({{D3D12_SHADER_COMPONENT_MAPPING}})(Mapping &gt;&gt; ({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*ComponentToExtract) &amp; {{D3D12_SHADER_COMPONENT_MAPPING_MASK}})) +#define {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}} {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(0,1,2,3) +</code> + + + <dd> <p> Indicates return component 0 (red). </p> </dd> + + + <dd> <p> Indicates return component 1 (green). </p> </dd> + + + <dd> <p> Indicates return component 2 (blue). </p> </dd> + + + <dd> <p> Indicates return component 3 (alpha). </p> </dd> + + + <dd> <p> Indicates forcing the resulting value to 0. </p> </dd> + + + <dd> <p> Indicates forcing the resulting value 1. The value of forcing 1 is either 0x1 or 1.0f depending on the format type for that component in the source format. </p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p> This enumeration is used by <strong>{{D3D12_BUFFER_SRV}}</strong>. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies the type of resource that will be viewed as a shader resource.</p> + <p>These values are used by a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + + + <p>Specifies filtering options during texture sampling.</p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure.</p><strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>Microsoft High Level Shader Language ({{HLSL}}) texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><p>Also note the following defines:</p><code>#define {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ( 0x3 ) #define {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ( 7 ) #define {{D3D12_FILTER_TYPE_MASK}} ( 0x3 ) #define {{D3D12_MIN_FILTER_SHIFT}} ( 4 ) #define {{D3D12_MAG_FILTER_SHIFT}} ( 2 ) #define {{D3D12_MIP_FILTER_SHIFT}} ( 0 ) #define {{D3D12_ANISOTROPIC_FILTERING_BIT}} ( 0x40 ) #define {{D3D12_ENCODE_BASIC_FILTER}}( min, mag, mip, reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ ( ( ( min ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIN_FILTER_SHIFT}} ) | \ ( ( ( mag ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MAG_FILTER_SHIFT}} ) | \ ( ( ( mip ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIP_FILTER_SHIFT}} ) | \ ( ( ( reduction ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) &lt;&lt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) ) ) +#define {{D3D12_ENCODE_ANISOTROPIC_FILTER}}( reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ {{D3D12_ANISOTROPIC_FILTERING_BIT}} | \ {{D3D12_ENCODE_BASIC_FILTER}}( {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ reduction ) ) ) +#define {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIN_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MAG_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIP_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_REDUCTION_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_IS_COMPARISON_FILTER}}( {{D3D12Filter}} ) \ ( {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) == {{D3D12_FILTER_REDUCTION_TYPE_COMPARISON}} ) +#define {{D3D12_DECODE_IS_ANISOTROPIC_FILTER}}( {{D3D12Filter}} ) \ ( ( ( {{D3D12Filter}} ) &amp; {{D3D12_ANISOTROPIC_FILTERING_BIT}} ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) ) ) </code><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td> <strong>Sample</strong> </td><td> <strong>SampleCmp</strong> or <strong>SampleCmpLevelZero</strong> </td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following formats: <strong>{{DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R32_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_R24_UNORM_X8_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R16_UNORM}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Specifies the type of magnification or minification sampler filters. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>Point filtering is used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.</p> </dd> + + + <dd> <p>Bilinear interpolation filtering is used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p>Specifies the type of filter reduction. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>The filter type is standard.</p> </dd> + + + <dd> <p>The filter type is comparison.</p> </dd> + + + <dd> <p>The filter type is minimum.</p> </dd> + + + <dd> <p>The filter type is maximum.</p> </dd> + + + + + <p> Identifies a technique for resolving texture coordinates that are outside of the boundaries of a texture. </p> + <p> This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times. </p> </dd> + + + <dd> <p> Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D12_SAMPLER_DESC}}</strong> or {{HLSL}} code. </p> </dd> + + + <dd> <p> Similar to <strong>{{D3D12_TEXTURE_ADDRESS_MODE_MIRROR}}</strong> and <strong>{{D3D12_TEXTURE_ADDRESS_MODE_CLAMP}}</strong>. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. </p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + <p> This enum is used in the <strong>{{D3D12_BUFFER_UAV}}</strong> structure. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> Resource contains raw, unstructured data. Requires the {{UAV}} format to be <strong>{{DXGI_FORMAT_R32_TYPELESS}}</strong>. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies unordered-access view options.</p> + <p> Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure. </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies the type of resource to view as a render target.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Specifies depth-stencil view options.</p> + <p> Specify a combination of the values in this enumeration in the <strong>Flags</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure. The values are combined by using a bitwise {{OR}} operation. </p><p> Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have read/write conflicts between separate views. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p><strong>{{D3D12_DSV_DIMENSION_UNKNOWN}}</strong> is not a valid value for <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multi sampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multi sampling.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies fence options. </p> + <p> This enum is used by the <strong>{{ID3D12Device::CreateFence}}</strong> method. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The fence is shared. </p> </dd> + + + <dd> <p> The fence is shared with another {{GPU}} adapter. </p> </dd> + + + + + <p> Specifies a type of descriptor heap. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure, and the following methods:</p><ul> <li> <strong>CopyDescriptors</strong> </li> <li> <strong>CopyDescriptorsSimple</strong> </li> <li> <strong>GetDescriptorHandleIncrementSize</strong> </li> </ul> + + + <dd> <p> The descriptor heap for the combination of constant-buffer, shader-resource, and unordered-access views. </p> </dd> + + + <dd> <p> The descriptor heap for the sampler. </p> </dd> + + + <dd> <p> The descriptor heap for the render-target view. </p> </dd> + + + <dd> <p> The descriptor heap for the depth-stencil view. </p> </dd> + + + <dd> <p> The number of types of descriptor heaps. </p> </dd> + + + + + <p>Specifies options for a heap.</p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates default usage of a heap.</p> </dd> + + + <dd> <p>The flag {{D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE}} can optionally be set on a descriptor heap to indicate it is be bound on a command list for reference by shaders. Descriptor heaps created <em>without</em> this flag allow applications the option to stage descriptors in {{CPU}} memory before copying them to a shader visible descriptor heap, as a convenience. But it is also fine for applications to directly create descriptors into shader visible descriptor heaps with no requirement to stage anything on the {{CPU}}.</p> <p>This flag only applies to {{CBV}}, {{SRV}}, {{UAV}} and samplers. It does not apply to other descriptor heap types since shaders do not directly reference the other types. </p> </dd> + + + + + <p> Specifies a range so that, for example, if part of a descriptor table has 100 shader-resource views ({{SRVs}}) that range can be declared in one entry rather than 100. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structure. </p> + + + <dd> <p> Specifies a range of {{SRVs}}. </p> </dd> + + + <dd> <p> Specifies a range of unordered-access views ({{UAVs}}). </p> </dd> + + + <dd> <p> Specifies a range of constant-buffer views ({{CBVs}}). </p> </dd> + + + <dd> <p> Specifies a range of samplers. </p> </dd> + + + + + <p>Specifies the shaders that can access the contents of a given root signature slot.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure.</p><p>The compute queue always uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> because it has only one active stage. The 3D queue can choose values, but if it uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong>, all shader stages can access whatever is bound at the root signature slot.</p> + + + <dd> <p>Specifies that all shader stages can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the vertex shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the hull shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the domain shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the geometry shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the pixel shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + + + <p> Specifies the type of root signature slot. </p> + <p> This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure. </p> + + + <dd> <p> The slot is for a descriptor table. </p> </dd> + + + <dd> <p> The slot is for root constants. </p> </dd> + + + <dd> <p> The slot is for a constant-buffer view ({{CBV}}). </p> </dd> + + + <dd> <p> The slot is for a shader-resource view ({{SRV}}). </p> </dd> + + + <dd> <p> The slot is for a unordered-access view ({{UAV}}). </p> </dd> + + + + + <p> Specifies options for root signature layout. </p> + <p> This enum is used in the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p><p>The value in denying access to shader stages is a minor optimization on some hardware. If, for example, the <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> flag has been set to broadcast the root signature to all shader stages, then denying access can overrule this and save the hardware some work. Alternatively if the shader is so simple that no root signature resources are needed, then denying access could be used here too.</p> + + + <dd> <p> Indicates default behavior. </p> </dd> + + + <dd> <p> The app is opting in to using the Input Assembler (requiring an input layout that defines a set of vertex buffer bindings). Omitting this flag can result in one root argument space being saved on some hardware. Omit this flag if the Input Assembler is not required, though the optimization is minor. </p> </dd> + + + <dd> <p> Denies the vertex shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the hull shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the domain shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the geometry shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the pixel shader access to the root signature. </p> </dd> + + + <dd> <p> The root signature allows stream output. This flag can be specified for root signatures authored in {{HLSL}}, similar to how the other flags are specified. <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> will fail if the geometry shader contains stream output but the root signature does not have this flag set. Omit this flag if stream output is not required.</p> </dd> + + + + + <p> Specifies the border color for a static sampler. </p> + <p> This enum is used by the <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates black, with the alpha component as fully transparent. </p> </dd> + + + <dd> <p> Indicates black, with the alpha component as fully opaque. </p> </dd> + + + <dd> <p> Indicates white, with the alpha component as fully opaque. </p> </dd> + + + + + <p>Specifies the volatility of both descriptors and the data they reference in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structure.</p><p>To specify the volatility of just the data referenced by descriptors, refer to <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong>.</p> + + + <dd> <p>Default behavior. Descriptors are static, and default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>If this is the only flag set, then descriptors are volatile and default assumptions are made about data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> <p>If this flag is combined with {{DATA_VOLATILE}}, then both descriptors and data are volaille, which is equivalent to Root Signature Version 1.0.</p> <p>If this flag is combined with {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, then descriptors are volatile. This still doesn?t allow them to change during command list execution so it is valid to combine the additional declaration that data is static while set via root descriptor table during execution ? the underlying descriptors are effectively static for longer than the data is being promised to be static.</p> </dd> + + + <dd> <p>Descriptors are static and the data is volatile.</p> </dd> + + + <dd> <p>Descriptors are static and data is static while set at execute.</p> </dd> + + + <dd> <p>Both descriptors and data are static. This maximizes the potential for driver optimization.</p> </dd> + + + + + <p>Specifies the volatility of the data referenced by descriptors in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure.</p><p>To specify the volatility of both descriptors and data, refer to <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong>. </p> + + + <dd> <p>Default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>Data is volatile. Equivalent to Root Signature Version 1.0.</p> </dd> + + + <dd> <p>Data is static while set at execute.</p> </dd> + + + <dd> <p>Data is static. The best potential for driver optimization.</p> </dd> + + + + + <p>Specifies the type of query heap to create.</p> + <p>This enum is used by the <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure.</p> + + + <dd> <p>This returns a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates that the heap is for high-performance timing data. </p> </dd> + + + <dd> <p>Indicates the heap is to contain pipeline data. Refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Indicates the heap is to contain stream output data. Refer to <strong>{{D3D12_QUERY_DATA_SO_STATISTICS}}</strong>.</p> </dd> + + + + + <p>Specifies the type of query.</p> + <p>This enum is used by <strong>BeginQuery</strong>, <strong>EndQuery</strong> and <strong>ResolveQueryData.</strong> </p> + + + <dd> <p>Indicates the query is for depth/stencil occlusion counts.</p> </dd> + + + <dd> <p>Indicates the query is for a binary depth/stencil occlusion statistics. </p> <p>This new query type acts like {{D3D12_QUERY_TYPE_OCCLUSION}} except that it returns simply a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates the query is for high definition {{GPU}} and {{CPU}} timestamps.</p> </dd> + + + <dd> <p>Indicates the query type is for graphics pipeline statistics, refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Stream 0 output statistics. In Direct3D 12 there is no single stream output ({{SO}}) overflow query for all the output streams. Apps need to issue multiple single-stream queries, and then correlate the results. Stream output is the ability of the {{GPU}} to write vertices to a buffer. The stream output counters monitor progress.</p> </dd> + + + <dd> <p>Stream 1 output statistics.</p> </dd> + + + <dd> <p>Stream 2 output statistics.</p> </dd> + + + <dd> <p>Stream 3 output statistics.</p> </dd> + + + + + <p> Specifies the predication operation to apply. </p> + <p> This enum is used by <strong>SetPredication</strong>. </p><p> Predication is decoupled from queries. Predication can be set based on the value of 64-bits within a buffer. </p> + + + <dd> <p> Enables predication if all 64-bits are zero. </p> </dd> + + + <dd> <p> Enables predication if at least one of the 64-bits are not zero. </p> </dd> + + + + + <p> Specifies the type of the indirect parameter. </p> + <p> This enum is used by the <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates the type is a Draw call.</p> </dd> + + + <dd> <p>Indicates the type is a DrawIndexed call.</p> </dd> + + + <dd> <p>Indicates the type is a Dispatch call.</p> </dd> + + + <dd> <p>Indicates the type is a vertex buffer view.</p> </dd> + + + <dd> <p>Indicates the type is an index buffer view.</p> </dd> + + + <dd> <p>Indicates the type is a constant.</p> </dd> + + + <dd> <p>Indicates the type is a constant buffer view ({{CBV}}).</p> </dd> + + + <dd> <p>Indicates the type is a shader resource view ({{SRV}}).</p> </dd> + + + <dd> <p>Indicates the type is an unordered access view ({{UAV}}).</p> </dd> + + + + + <p>Specifies multiple wait flags for multiple fences.</p> + <p>This enum is used by the <strong>SetEventOnMultipleFenceCompletion</strong> method.</p> + + + <dd> <p>Indicates that none of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that any one of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that all the fences need to be waited on.</p> </dd> + + + + + <p>Specifies a residence priority.</p> + <p>This enum is used by the <strong>SetResidencyPriority</strong> method.</p> + + + <dd> <p>Indicates a minimum priority.</p> </dd> + + + <dd> <p>Indicates a low priority.</p> </dd> + + + <dd> <p>Indicates a normal, medium, priority.</p> </dd> + + + <dd> <p>Indicates a high priority, the default.</p> </dd> + + + <dd> <p>Indicates a maximum priority.</p> </dd> + + + + + <p>Describes a command queue.</p> + <p> This structure is passed into <strong>CreateCommandQueue</strong>. </p><p> This structure is returned by <strong>{{ID3D12CommandQueue::GetDesc}}</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>. </p> </dd> + + + <dd> <p> The priority for the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_PRIORITY}}</strong> enumeration constant to select normal or high priority. </p> </dd> + + + <dd> <p> Specifies any flags from the <strong>{{D3D12_COMMAND_QUEUE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the command queue applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Describes a single element for the input-assembler stage of the graphics pipeline.</p> + <p>This structure is a member of the <strong>{{D3D12_INPUT_LAYOUT_DESC}}</strong> structure. A pipeline state object contains a input-layout structure that defines one element being read from an input slot.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name <strong>matrix</strong>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the format of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. For more info, see Input Slots. Valid values are between 0 and 15. </p> </dd> + + + <dd> <p>Optional. Offset, in bytes, between each element. Use {{D3D12_APPEND_ALIGNED_ELEMENT}} (0xffffffff) for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>A value that identifies the input data class for a single input slot.</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to the {{D3D12_INPUT_PER_VERTEX_DATA}} member of <strong>{{D3D12_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + + + <p>Describes a vertex element in a vertex buffer in an output slot.</p> + <p>Specify an array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures in the <strong>pSODeclaration</strong> member of a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Use, for example, if you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>The component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline. The valid range for <strong>OutputSlot</strong> is 0 to 3.</p> </dd> + + + + + <p>Describes the dimensions of a viewport.</p> + <p>Pass an array of these structures to the <em>pViewports</em> parameter in a call to <strong>{{ID3D12GraphicsCommandList::RSSetViewports}}</strong> to set viewports for the display.</p> + + + <dd> <p>X position of the left hand side of the viewport. </p> </dd> + + + <dd> <p>Y position of the top of the viewport. </p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p>Describes a 3D box.</p> + <p> This structure is used by the methods <strong>WriteToSubresource</strong>, <strong>ReadFromSubresource</strong> and <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box, plus 1. This means that <code>right - left</code> equals the width of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box, plus 1. This means that <code>top - bottom</code> equals the height of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box, plus 1. This means that <code>front - back</code> equals the depth of the box.</p> </dd> + + + + + <p>Describes stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D12_STENCIL_OP}}</strong>-typed value. Each stencil operation can be set differently based on the outcome of the stencil test, which is referred to as <strong>StencilFunc</strong>, in the stencil test portion of depth-stencil testing.</p><p>Members of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> have this structure for their data type. </p> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies the function that compares stencil data against existing stencil data. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a depth-stencil-state structure that controls how depth-stencil testing is performed by the output-merger stage. </p><p>This table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D12_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D12_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D12_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D12_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D12_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p> Specifies whether to enable depth testing. Set this member to <strong>{{TRUE}}</strong> to enable depth testing. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_WRITE_MASK}}</strong>-typed value that identifies a portion of the depth-stencil buffer that can be modified by depth data. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies a function that compares depth data against existing depth data. </p> </dd> + + + <dd> <p> Specifies whether to enable stencil testing. Set this member to <strong>{{TRUE}}</strong> to enable stencil testing. </p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D12_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to enable (or disable) blending. Set to <strong>{{TRUE}}</strong> to enable blending.</p> </dd> + + + <dd> <p>Specifies whether to enable (or disable) a logical operation. Set to <strong>{{TRUE}}</strong> to enable a logical operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D12_COLOR_WRITE_ENABLE}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies a write mask.</p> </dd> + + + + + <p>Describes the blend state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a blend-state structure that controls blending by the output-merger stage. </p><p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this structure to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p><p> Note the helper structure, <strong>{{CD3DX12_BLEND_DESC}}</strong>. </p> + + + <dd> <p> Specifies whether to use alpha-to-coverage as a multisampling technique when setting a pixel to a render target. For more info about using alpha-to-coverage, see Alpha-To-Coverage. </p> </dd> + + + <dd> <p> Specifies whether to enable independent blending in simultaneous render targets. Set to <strong>{{TRUE}}</strong> to enable independent blending. If set to <strong>{{FALSE}}</strong>, only the <strong>RenderTarget</strong>[0] members are used; <strong>RenderTarget</strong>[1..7] are ignored. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures that describe the blend states for render targets; these correspond to the eight render targets that can be bound to the output-merger stage at one time. </p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> contains a rasterizer-state structure. </p><p> Rasterizer state defines the behavior of the rasterizer stage. </p><p> If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>{{D3D12_FILL_MODE_SOLID}}</td></tr> <tr><td><strong>CullMode</strong></td><td>{{D3D12_CULL_MODE_BACK}}</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p> + + + <dd> <p> A <strong>{{D3D12_FILL_MODE}}</strong>-typed value that specifies the fill mode to use when rendering. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CULL_MODE}}</strong>-typed value that specifies that triangles facing the specified direction are not drawn. </p> </dd> + + + <dd> <p> Determines if a triangle is front- or back-facing. If this member is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true. </p> </dd> + + + <dd> <p> Depth value added to a given pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Maximum depth bias of a pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Scalar on a given pixel's slope. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Specifies whether to enable clipping based on distance. </p> <p> The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). </p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p> When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. </p> </dd> + + + <dd> <p> Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off. </p> </dd> + + + + + <p>Describes shader data.</p> + <p> The <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> objects contain <strong>{{D3D12_SHADER_BYTECODE}}</strong> structures that describe various shader types. </p> + + + <dd> <p> A reference to a memory block that contains the shader data. </p> </dd> + + + <dd> <p> The size, in bytes, of the shader data that the <strong>pShaderBytecode</strong> member points to. </p> </dd> + + + + + <p>Describes a streaming output buffer.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p> An array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures. Can't be <strong>{{NULL}}</strong> if <strong>NumEntries</strong> &gt; 0. </p> </dd> + + + <dd> <p> The number of entries in the stream output declaration array that the <strong>pSODeclaration</strong> member points to. </p> </dd> + + + <dd> <p> An array of buffer strides; each stride is the size of an element for that buffer. </p> </dd> + + + <dd> <p> The number of strides (or buffers) that the <strong>pBufferStrides</strong> member points to. </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage. </p> </dd> + + + + + <p>Describes the input-buffer data for the input-assembler stage.</p> + <p> This structure is a member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p> An array of <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structures that describe the data types of the input-assembler stage. </p> </dd> + + + <dd> <p> The number of input-data types in the array of input elements that the <strong>pInputElementDescs</strong> member points to. </p> </dd> + + + + + <p>Stores a pipeline state.</p> + <p> This structure is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure, and the <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure.</p><p>This structure is intended to be filled with the data retrieved from <strong>{{ID3D12PipelineState::GetCachedBlob}}</strong>. This cached {{PSO}} contains data specific to the hardware, driver, and machine that it was retrieved from. Compilation using this data should be faster than compilation without. The rest of the data in the {{PSO}} needs to still be valid, and needs to match the cached {{PSO}}, otherwise {{E_INVALIDARG}} might be returned.</p><p>If the driver has been upgraded to a {{D3D12}} driver after the {{PSO}} was cached, you might see a {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} return code, or if you?re running on a different {{GPU}}, the {{D3D12_ERROR_ADAPTER_NOT_FOUND}} return code.</p> + + + <dd> <p> Specifies reference that references the memory location of the cache. </p> </dd> + + + <dd> <p> Specifies the size of the cache in bytes. </p> </dd> + + + + + + + + <p>Describes a compute pipeline state object.</p> + <p> This structure is used by <strong>CreateComputePipelineState</strong>. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_BYTECODE}}</strong> structure that describes the compute shader. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the compute pipeline state is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> A cached pipeline state object, as a <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong> structure. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_PIPELINE_STATE_FLAGS}}</strong> enumeration constant such as for "tool debug". </p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes Direct3D 12 feature options in the current graphics driver. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> Specifies whether <strong>double</strong> types are allowed for shader operations. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The supported operations are equivalent to Direct3D 11's <strong>ExtendedDoublesShaderInstructions</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure. </p> <p> To use any {{HLSL}} shader that is compiled with a <strong>double</strong> type, the runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1 and 12. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all shader stages. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support resource binding. The runtime sets this member to a <strong>{{D3D12_RESOURCE_BINDING_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Specifies whether pixel shader stencil ref is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether the loading of additional formats for typed unordered-access views ({{UAVs}}) is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether <em>Rasterizer Order Views</em> ({{ROVs}}) are supported. If <strong>{{TRUE}}</strong>, they're supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support conservative rasterization. The runtime sets this member to a <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Don't use this field; instead, use the <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> query (a structure with a <strong>MaxGPUVirtualAddressBitsPerResource</strong> member), which is more accurate. </p> </dd> + + + <dd> <p> {{TRUE}} if the hardware supports textures with the 64KB standard swizzle pattern. Support for this pattern enables zero-copy texture optimizations while providing near-equilateral locality for each dimension within the texture. For texture swizzle options and restrictions, see <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CROSS_NODE_SHARING_TIER}}</strong> enumeration constant that specifies the level of sharing across nodes of an adapter that has multiple nodes, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> </dd> + + + <dd> <p> {{FALSE}} means the device only supports copy operations to and from cross-adapter row-major textures. {{TRUE}} means the device supports shader resource views, unordered access views, and render target views of cross-adapter row-major textures. "Cross-adapter" means between multiple adapters (even from different {{IHVs}}). </p> </dd> + + + <dd> <p> Whether the viewport ({{VP}}) and Render Target ({{RT}}) array index from any shader feeding the rasterizer are supported without geometry shader emulation. Compare the <strong>{{VPAndRTArrayIndexFromAnyShaderFeedingRasterizer}}</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong> structure. In <strong>{{ID3D12ShaderReflection::GetRequiresFlags}}</strong>, see the #define {{D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER}}. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver require heap attribution related to resource type. The runtime sets this member to a <strong>{{D3D12_RESOURCE_HEAP_TIER}}</strong> enumeration constant. </p> </dd> + + + + + <p>Describes the level of support for {{HLSL}} 6.0 wave operations.</p> + <p>A "lane" is single thread of execution. The shader models before version 6.0 expose only one of these at the language level, leaving expansion to parallel {{SIMD}} processing entirely up to the implementation. A "wave" is set of lanes (threads) executed simultaneously in the processor. No explicit barriers are required to guarantee that they execute in parallel. Similar concepts include "warp" and "wavefront". +</p><p> This structure is used with the {{D3D12_FEATURE_D3D12_OPTIONS1}} member of <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p>True if the driver supports {{HLSL}} 6.0 wave operations.</p> </dd> + + + <dd> <p>Specifies the baseline number of lanes in the {{SIMD}} wave that this implementation can support. This term is sometimes known as "wavefront size" or "warp width". Currently apps should rely only on this minimum value for sizing workloads. +</p> </dd> + + + <dd> <p>Specifies the maximum number of lanes in the {{SIMD}} wave that this implementation can support. This capability is reserved for future expansion, and is not expected to be used by current applications. +</p> </dd> + + + <dd> <p>Specifies the total number of {{SIMD}} lanes on the hardware.</p> </dd> + + + <dd> <p>Indicates transitions are possible in and out of the {{CBV}}, and indirect argument states, on compute command lists. If <strong>CheckFeatureSupport</strong> succeeds this value will always be true. </p> </dd> + + + <dd> <p>Indicates that 64bit integer operations are supported.</p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Pass this structure to <strong>CheckFeatureSupport</strong> to check for root signature version support.</p> + + + + <p>Provide detail about the adapter architecture, helping applications better optimize for certain adapter properties.</p> + + + + <dd> <p> In multi-adapter operation, this indicates which physical adapter of the device is relevant. See Multi-Adapter. <strong>NodeIndex</strong> is filled out by the application before calling <strong>CheckFeatureSupport</strong>, as the application can retrieve details about the architecture of each adapter. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support a tile-based renderer. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support a tile-based renderer. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support {{UMA}}. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support cache-coherent {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support cache-coherent {{UMA}}. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + + + + <p>Contains the supported shader model.</p> + <p> Refer to the enumeration constant {{D3D12_FEATURE_SHADER_MODEL}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>Specifies one member of <strong>{{D3D_SHADER_MODEL}}</strong> that indicates the maximum supported shader model.</p> </dd> + + + + + <p> Describes which resources are supported by the current graphics driver for a given format. </p> + <p> Refer to the enum <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT1}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which resources are supported. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT2}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which unordered resource options are supported. </p> </dd> + + + + + <p> Describes the image quality levels for a given format and sample count. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of multi-samples per pixel to return info about. </p> </dd> + + + <dd> <p> Flags to control quality levels, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS}}</strong> enumeration constants. The resulting value specifies options for determining quality levels. </p> </dd> + + + <dd> <p> The number of quality levels. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p> Details the adapter's {{GPU}} virtual address space limitations, including maximum address bits per resource and per process. </p> + <p> See the enumeration constant {{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>The maximum {{GPU}} virtual address bits per resource.</p> <p>Some adapters have significantly less bits available per resource than per process, while other adapters have significantly greater bits available per resource than per process. The latter scenario tends to happen in less common scenarios, like when running a 32-bit process on certain {{UMA}} adapters. +When per resource capabilities are greater than per process, the greater per resource capabilities can only be leveraged by reserved resources or {{NULL}} mapped pages. +</p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process.</p> <p>When this value is nearly equal to the available residency budget, <strong>Evict</strong> will not be a feasible option to manage residency. See <strong>MakeResident</strong> for more details.</p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Describes parameters needed to allocate resources.</p> + <p> This structure is used by the <strong>GetResourceAllocationInfo</strong> method. </p> + + + <dd> <p>The size, in bytes, of the resource.</p> </dd> + + + <dd> <p>The alignment value for the resource; one of 4KB (4096), 64KB (65536) and 4MB (4194304) alignment.</p> </dd> + + + + + <p>Describes heap properties.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> <li> <strong>{{ID3D12Resource::GetHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::GetCustomHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> </ul><p> Valid combinations of struct member values: </p><ul> <li> When <strong>Type</strong> is <strong>{{D3D12_HEAP_TYPE}}</strong>_CUSTOM, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must not be ..._UNKNOWN. </li> <li> When <strong>Type</strong> is not {{D3D12_HEAP_TYPE_CUSTOM}}, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must be ..._UNKNOWN. </li> <li> When using {{D3D12_HEAP_TYPE_CUSTOM}} and <strong>{{D3D12_MEMORY_POOL}}</strong>_L1, on {{NUMA}} adapters, <strong>{{CPUPageProperty}}</strong> must be <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>_NOT_AVAILABLE. To differentiate {{NUMA}} from {{UMA}} adapters, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE and <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </li> </ul> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the type of heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>-typed value that specifies the {{CPU}}-page properties for the heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_MEMORY_POOL}}</strong>-typed value that specifies the memory pool for the heap. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the node where the resource should be created. Exactly one bit of this {{UINT}} must be set. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the set of nodes where the resource is visible. <em>VisibleNodeMask</em> must have the same bits set as <em>CreationNodeMask</em> has. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + + + <p>Describes a heap.</p> + <p> This structure is used by the <strong>CreateHeap</strong> method, and returned by the <strong>GetDesc</strong> method. </p> + + + <dd> <p> The size, in bytes, of the heap. To avoid wasting memory, applications should pass <em>SizeInBytes</em> values which are multiples of the effective <em>Alignment</em>; but non-aligned <em>SizeInBytes</em> is also supported, for convenience. To find out how large a heap must be to support textures with undefined layouts and adapter-specific sizes, call <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that describes the heap properties. </p> </dd> + + + <dd> <p> The alignment value for the heap. Valid values: </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td> 0 </td><td> An alias for 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 4MB. An application must decide whether the heap will contain multi-sample anti-aliasing ({{MSAA}}), in which case, the application must choose {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}}. </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise-{{OR}} operation. The resulting value identifies heap options. When creating heaps to support adapters with resource heap tier 1, an application must choose some flags. </p> </dd> + + + + + <p> Describes a resource, such as a texture. This structure is used extensively. </p> + <p> Use this structure with:</p><ul> <li> <strong>{{ID3D12Resource::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> <li> <strong>{{ID3D12Device::GetCopyableFootprints}}</strong> </li> <li> A number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</li> </ul><p>Two common resources are buffers and textures, which both use this structure, but with quite different uses of the fields.</p> + + + <dd> <p> One member of <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>, specifying the dimensions of the resource (for example, {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}), or whether it is a buffer (({{D3D12_RESOURCE_DIMENSION_BUFFER}}). </p> </dd> + + + <dd> <p> Specifies the alignment. </p> </dd> + + + <dd> <p> Specifies the width of the resource. </p> </dd> + + + <dd> <p> Specifies the height of the resource. </p> </dd> + + + <dd> <p> Specifies the depth of the resource, if it is 3D, or the array size if it is an array of 1D or 2D resources. </p> </dd> + + + <dd> <p> Specifies the number of {{MIP}} levels. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{DXGI_FORMAT}}</strong>. </p> </dd> + + + <dd> <p> Specifies a <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> Bitwise-{{OR}}'d flags, as <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants. </p> </dd> + + + + + <p>Specifies a depth and stencil value.</p> + <p>This structure is used in the <strong>{{D3D12_CLEAR_VALUE}}</strong> structure.</p> + + + <dd> <p>Specifies the depth value.</p> </dd> + + + <dd> <p>Specifies the stencil value.</p> </dd> + + + + + <p>Describes a value used to optimize clear operations for a particular resource.</p> + <p> This structure is optionally passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> </ul> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_FORMAT}}</strong> enum.</p> <p>The format of the commonly cleared color follows the same validation rules as a view/ descriptor creation. In general, the format of the clear color can be any format in the same typeless group that the resource format belongs to.</p> <p>This <em>Format</em> must match the format of the view used during the clear operation. It indicates whether the <em>Color</em> or the <em>DepthStencil</em> member is valid and how to convert the values for usage with the resource.</p> </dd> + + + <dd> <p>Specifies a 4-entry array of float values (each value in the range 0.0 to 1.0), determining the {{RGBA}} value. The order of {{RGBA}} matches the order used with <strong>ClearRenderTargetView</strong>.</p> </dd> + + + <dd> <p>Specifies one member of <strong>{{D3D12_DEPTH_STENCIL_VALUE}}</strong>. These values match the semantics of <em>Depth</em> and <em>Stencil</em> in <strong>ClearDepthStencilView</strong>.</p> </dd> + + + + + <p>Describes a memory range.</p> + <p><strong>End</strong> is one-past-the-end. When <strong>Begin</strong> equals <strong>End</strong>, the range is empty. The size of the range is (<strong>End</strong> - <strong>Begin</strong>). </p><p> This structure is used by the <strong>Map</strong> and <strong>Unmap</strong> methods. </p> + + + <dd> <p> The offset, in bytes, denoting the beginning of a memory range. </p> </dd> + + + <dd> <p> The offset, in bytes, denoting the end of a memory range. <strong>End</strong> is one-past-the-end. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a subresource memory range.</p> + <p> This structure is used by the <strong>AtomicCopyBufferUINT</strong> and <strong>AtomicCopyBufferUINT64</strong> methods. </p> + + + <dd> <p>The index of the subresource.</p> </dd> + + + <dd> <p>A memory range within the subresource.</p> </dd> + + + + + <p>Describes subresource data.</p> + + + <dd> <p>Offset, in bytes, between the start of the parent resource and this subresource.</p> </dd> + + + <dd> <p>The row pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The x-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The y-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The z-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The index of the subresource for the tiled resource.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p> Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p> If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. In this case, <strong>NumTiles</strong> should be equal to <strong>Width</strong> * <strong>Height</strong> * <strong>Depth</strong>.</p> <p> If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once. </p> <p> Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>UseBox</strong>, you use a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p> When the region includes mipmaps that are packed with nonstandard tiling, <strong>UseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0. </p> </dd> + + + <dd> <p> The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p> The height of the tiled region, in tiles. Used for 2D and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p> Describes the tile structure of a tiled resource with mipmaps. </p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p> The number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p> The number of packed mipmaps in the tiled resource. </p> <p> This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same packing. </p> <p> On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser mipmaps for a given array slice are considered packed as well. </p> </dd> + + + <dd> <p> The number of tiles for the packed mipmaps in the tiled resource. </p> <p> If there is no packing, this value is meaningless and is set to 0. Otherwise, it is set to the number of tiles that are needed to represent the set of packed mipmaps. The pixel layout within the packed mipmaps is hardware specific. If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. For arrays, this value is only the count of packed mipmaps within the subresources for each array slice. </p> </dd> + + + <dd> <p> The offset of the first packed tile for the resource in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this value is meaningless and is 0. Otherwise, it is the offset of the first packed tile for the resource in the overall range of tiles for the resource. A value of 0 for <strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. For array surfaces, this is the offset for the tiles that contain the packed mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset past the beginning of the tiles for each array slice. </p> <strong>Note</strong>?? The number of overall tiles, packed or not, for a given array slice is simply the total number of tiles for the resource divided by the resource's array size, so it is easy to locate the range of tiles for any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies which of those are packed. ? </dd> + + + + + <p> Describes the transition of subresources between different usages. </p> + <p> This struct is used by the <strong>Transition</strong> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> struct. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the resource used in the transition. </p> </dd> + + + <dd> <p> The index of the subresource for the transition. Use the <strong>{{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}</strong> flag ( 0xffffffff ) to transition all subresources in a resource at the same time. </p> </dd> + + + <dd> <p> The "before" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The "after" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + + + <p> Describes the transition between usages of two different resources that have mappings into the same heap. </p> + <p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> Both the before and the after resources can be specified or one or both resources can be <strong>{{NULL}}</strong>, which indicates that any placed or reserved resource could cause aliasing. </p><p>Refer to the usage models described in <strong>CreatePlacedResource</strong>.</p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the before resource used in the transition. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the after resource used in the transition. </p> </dd> + + + + + <p> Represents a resource in which all {{UAV}} accesses must complete before any future {{UAV}} accesses can begin. </p> + <p> This struct represents a resource in which all unordered access view ({{UAV}}) accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p><p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> You don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that only read a {{UAV}}. Additionally, you don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that write to the same {{UAV}} if you know that it's safe to execute the {{UAV}} accesses in any order. The resource can be <strong>{{NULL}}</strong>, which indicates that any {{UAV}} access could require the barrier. </p> + + + <dd> <p> The resource used in the transition, as a reference to <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + + + <p> Describes a resource barrier (transition in resource use). </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method. </p> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong>-typed value that specifies the type of resource barrier. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_RESOURCE_BARRIER_FLAGS}}</strong> enumeration constant such as for "begin only" or "end only". </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> structure that describes the transition of subresources between different usages. Members specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> structure that describes the transition between usages of two different resources that have mappings into the same heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> structure that describes a resource in which all {{UAV}} accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Describes the format, width, height, depth, and row-pitch of the subresource into the parent resource. </p> + <p> Use this structure in the <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p><p> The helper structure is <strong>{{CD3DX12_SUBRESOURCE_FOOTPRINT}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. </p> </dd> + + + <dd> <p> The width of the subresource. </p> </dd> + + + <dd> <p> The height of the subresource. </p> </dd> + + + <dd> <p> The depth of the subresource. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. This must be a multiple of {{D3D12_TEXTURE_DATA_PITCH_ALIGNMENT}} (256), and must be greater than or equal to the size of the data within a row. </p> </dd> + + + + + <p> Describes the footprint of a placed subresource, including the offset and the {{D3D12_SUBRESOURCE_FOOTPRINT}}. </p> + <p> This structure is used in the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure, and by <strong>{{ID3D12Device::GetCopyableFootprints}}</strong>. </p><p> All the data referenced by the footprint structure must fit within the bounds of the parent resource. If you use <strong>GetCopyableFootprints</strong> to fill out the structure, the <em>pTotalBytes</em> output field indicates the required size of the resource.</p><p> This structure is also used a number of helper functions (refer to Helper Structures and Functions for {{D3D12}}).</p><p> When copying textures, use this structure along with <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. </p> + + + <dd> <p> The offset of the subresource within the parent resource, in bytes. The offset between the start of the parent resource and this subresource. </p> </dd> + + + <dd> <p> The format, width, height, depth, and row-pitch of the subresource, as a <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p> </dd> + + + + + <p>Describes a portion of a texture for the purpose of texture copies. </p> + <p> Use this structure with <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p> Specifies the resource which will be used for the copy operation.</p>? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT}}, <strong>pResource</strong> must point to a buffer resource.? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX}}, <strong>pResource</strong> must point to a texture resource. </dd> + + + <dd> <p> Specifies which type of resource location this is: a subresource of a texture, or a description of a texture layout which can be applied to a buffer. This <strong>{{D3D12_TEXTURE_COPY_TYPE}}</strong> enum indicates which union member to use. </p> </dd> + + + <dd> <p> Specifies a texture layout, with offset, dimensions, and pitches, for the hardware to understand how to treat a section of a buffer resource as a multi-dimensional texture. To fill-in the correct data for a <strong>CopyTextureRegion</strong> call, see <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the subresource of an arrayed, mip-mapped, or planar texture should be used for the copy operation. </p> </dd> + + + + + <p>This section provides code for sample scenarios. Many of the walk-throughs provide details on what coding is required to be added to a basic sample, to avoid repeating the basic component code for each scenario.</p><p>For the most basic component, refer to the Creating a Basic Direct3D 12 Component section. The following walk-throughs describe more advanced scenarios.</p><p> </p> + + + + <p>Describes the elements in a buffer resource to use in a shader-resource view.</p> + <p> This structure is used by <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a view of a buffer. </p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV_FLAGS}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1. </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> -1 (where <strong>MipLevels</strong> is from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a multi sampled 2D texture to use in a shader-resource view.</p> + <p>This structure is a member of the <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure.</p><p>Since a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_SRV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p> A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. </p><p> When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you can't create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource. </p><p> Create a shader-resource-view description by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong>.</p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_COMPONENT_MAPPING}}</strong> enumeration constant, such as return component 0 (red) from memory, or force the resulting value to 0. This mapping enables the shader resource view ({{SRV}}) to choose how memory gets routed to the 4 return components in a shader after a memory fetch. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV}}</strong> structure that views the resource as a buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_SRV}}</strong> structure that views the resource as a 2D-texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_SRV}}</strong> structure that views the resource as a 2D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array. </p> </dd> + + + + + <p>Describes a constant buffer to view.</p> + <p>This structure is used by <strong>CreateConstantBufferView</strong>.</p> + + + <dd> <p> The {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + <dd> <p>The size in bytes of the constant buffer.</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>This structure is used by <strong>CreateSampler</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_FILTER}}</strong>-typed value that specifies the filtering method to use when sampling a texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a u texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a v texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a w texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if the runtime calculates that a texture should be sampled at mipmap level 3 and <strong>MipLODBias</strong> is 2, the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> or <strong>{{D3D12_FILTER_COMPARISON_ANISOTROPIC}}</strong> is specified in <strong>Filter</strong>. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that specifies a function that compares sampled data against existing sampled data. </p> </dd> + + + <dd> <p> Border color to use if <strong>{{D3D12_TEXTURE_ADDRESS_MODE_BORDER}}</strong> is specified for <strong>AddressU</strong>, <strong>AddressV</strong>, or <strong>AddressW</strong>. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to <strong>MinLOD</strong>. To have no upper limit on {{LOD}}, set this member to a large value. </p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a buffer. </p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> The counter offset, in bytes. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong>-typed value that specifies the view options for the resource. </p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources. </p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p> Describes an array of unordered-access 2D texture resources. </p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using an unordered-access view.</p> + <p>Pass an unordered-access-view description into <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type specifies how the resource will be accessed. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_UAV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the elements in a buffer resource to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a buffer.</p> + + + <dd> <p>Number of bytes between the beginning of the buffer and the first element to access.</p> </dd> + + + <dd> <p>The total number of elements in the view.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The index of the mipmap level to use.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture to use in a render-target view.</p> + <p>This structure is a member of the <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_RTV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p> Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p> Describes the subresources from an array of multi sampled 2D textures to use in a render-target view. </p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures. </p> + + + <dd> <p> The index of the first texture to use in an array of textures. </p> </dd> + + + <dd> <p> The number of textures to use. </p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using a render-target view.</p> + <p>Pass a render-target-view description into <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to create a render-target view.</p><p>A render-target view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_RTV_DIMENSION}}</strong>-typed value that specifies how the render-target resource will be accessed. This type specifies how the resource will be accessed. This member also determines which _RTV to use in the following union.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_RTV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 2D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures that are accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is a member of the <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is nothing to specify in <strong>{{D3D12_TEX2DMS_DSV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures for a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresources of a texture that are accessible from a depth-stencil view.</p> + <p> These are valid formats for a depth-stencil view: </p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p> A depth-stencil view can't use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, the format of the parent resource is used. </p><p> Pass a depth-stencil-view description into <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> to create a depth-stencil view. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. For allowable formats, see Remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DSV_DIMENSION}}</strong>-typed value that specifies how the depth-stencil resource will be accessed. This member also determines which _DSV to use in the following union. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DSV_FLAGS}}</strong> enumeration constants that are combined by using a bitwise {{OR}} operation. The resulting value specifies whether the texture is read only. Pass 0 to specify that it isn't read only; otherwise, pass one or more of the members of the <strong>{{D3D12_DSV_FLAGS}}</strong> enumerated type. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_DSV}}</strong> structure that specifies a 1D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_DSV}}</strong> structure that specifies an array of 1D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_DSV}}</strong> structure that specifies a 2D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_DSV}}</strong> structure that specifies an array of 2D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_DSV}}</strong> structure that specifies a multisampled 2D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_DSV}}</strong> structure that specifies an array of multisampled 2D textures. </p> </dd> + + + + + <p>Describes the descriptor heap.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDescriptorHeap}}</strong> </li> </ul> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the types of descriptors in the heap. </p> </dd> + + + <dd> <p> The number of descriptors in the heap. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DESCRIPTOR_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the heap. </p> </dd> + + + <dd> <p> For single-adapter operation, set this to zero. If there are multiple adapter nodes, set a bit to identify the node (one of the device's physical adapters) to which the descriptor heap applies. Each bit in the mask corresponds to a single node. Only one bit must be set. See Multi-Adapter. </p> </dd> + + + + + <p>Describes a descriptor range.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure. </p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.0 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes constants inline in the root signature that appear in shaders as one constant buffer. </p> + <p>Refer to Resource Binding in {{HLSL}} for more information on shader registers and spaces. </p><p><strong>{{D3D12_ROOT_CONSTANTS}}</strong> is the data type of the <strong>Constants</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_CONSTANTS}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS}} member of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p> The shader register. </p> </dd> + + + <dd> <p> The register space. </p> </dd> + + + <dd> <p> The number of constants that occupy a single shader slot (these constants appear like a single constant buffer). All constants occupy a single root signature bind slot. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.0 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes a static sampler. </p> + <p> Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> The filtering method to use when sampling a texture, as a <strong>{{D3D12_FILTER}}</strong> enumeration constant. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>u</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>v</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>w</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if {{D3D12_FILTER_ANISOTROPIC}} or {{D3D12_FILTER_COMPARISON_ANISOTROPIC}} is specified as the filter. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D12_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_STATIC_BORDER_COLOR}}</strong>, the border color to use if {{D3D12_TEXTURE_ADDRESS_MODE_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p> Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. </p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D12_FLOAT32_MAX}}. </p> </dd> + + + <dd> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> parameters correspond to the binding syntax of {{HLSL}}. For example, in {{HLSL:}} </p> <code>Texture2D&lt;float4&gt; a : register(t2, space3);</code> <p> This corresponds to a <em>ShaderRegister</em> of 2 (indicating the type is {{SRV}}), and <em>RegisterSpace</em> is 3. </p> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> pair is needed to establish correspondence between shader resources and runtime heap descriptors, using the root signature data structure. </p> </dd> + + + <dd> <p> See the description for <em>ShaderRegister</em>. Register space is optional; the default register space is 0. </p> </dd> + + + <dd> <p> Specifies the visibility of the sampler to the pipeline shaders, one member of <strong>{{D3D12_SHADER_VISIBILITY}}</strong>. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a descriptor range, with flags to determine their volatility.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure. </p><p>Refer to the helper structure <strong>{{CD3DX12_DESCRIPTOR_RANGE1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> that determine descriptor and data volatility.</p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.1 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR_TABLE1}}</strong>.</p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.1 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR1}}</strong>.</p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> that determine the volatility of descriptors and the data they reference.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> structure.</p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_PARAMETER1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p>Describes the layout of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER1}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong> that determine the data volatility.</p> </dd> + + + + + <p>Holds any version of a root signature description, and is designed to be used with serialization/deserialization functions.</p> + <p>Use this structure with the following methods.</p><ul> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>GetUnconvertedRootSignatureDesc</strong> </li> <li> <strong>{{D3D12SerializeVersionedRootSignature}}</strong> </li> </ul><p>Refer to the helper structure <strong>{{CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong>. </p> + + + <dd> <p>Specifies one member of {{D3D_ROOT_SIGNATURE_VERSION}} that determines the contents of the union.</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> (version 1.0).</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> (version 1.1).</p> </dd> + + + + + <p> Describes a {{CPU}} descriptor handle. </p> + <p> This structure is returned by the following methods: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart}}</strong> </li> </ul><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CopyDescriptors}}</strong> </li> <li> <strong>{{ID3D12Device::CopyDescriptorsSimple}}</strong> </li> <li> <strong>{{ID3D12Device::CreateConstantBufferView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateSampler}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::OMSetRenderTargets}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes a {{GPU}} descriptor handle. </p> + <p> This structure is returned by <strong>{{ID3D12DescriptorHeap::GetGPUDescriptorHandleForHeapStart}}</strong>. </p><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList:SetComputeRootDescriptorTable}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes details for the discard-resource operation. </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> method. </p><p> If rectangles are supplied in this structure, the resource must have 2D subresources with all specified subresources the same dimension. </p> + + + <dd> <p> The number of rectangles in the array that the <strong>pRects</strong> member specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource to discard. If <strong>{{NULL}}</strong>, <strong>DiscardResource</strong> discards the entire resource. </p> </dd> + + + <dd> <p> Index of the first subresource in the resource to discard. </p> </dd> + + + <dd> <p> The number of subresources in the resource to discard. </p> </dd> + + + + + <p> Describes the purpose of a query heap. A query heap contains an array of individual queries. </p> + <p> Use this structure with <strong>CreateQueryHeap</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the number of queries the heap should contain. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the query heap applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>BeginQuery</strong> and <strong>EndQuery</strong>.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + + <p>Describes query data for stream output.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + <dd> <p>Specifies the number of primitives written.</p> </dd> + + + <dd> <p>Specifies the total amount of storage needed by the primitives.</p> </dd> + + + + + + + + <p>Describes parameters for drawing instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawInstanced</strong>.</p> + + + <dd> <p>Specifies the number of vertices to draw, per instance.</p> </dd> + + + <dd> <p>Specifies the number of instances.</p> </dd> + + + <dd> <p>Specifies an index to the first vertex to start drawing from.</p> </dd> + + + <dd> <p>Specifies an index to the first instance to start drawing from.</p> </dd> + + + + + <p>Describes parameters for drawing indexed instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawIndexedInstanced</strong>. </p> + + + <dd> <p>The number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p> The number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Describes dispatch parameters, for use by the compute shader.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>Dispatch</strong>.</p><p> A compiled compute shader defines the set of instructions to execute per thread and the number of threads to run per group. The thread-group parameters indicate how many thread groups to execute. Each thread group contains the same number of threads, as defined by the compiled compute shader. The thread groups are organized in a three-dimensional grid. The total number of thread groups that the compiled compute shader executes is determined by the following calculation:</p><code>ThreadGroupCountX * ThreadGroupCountY * ThreadGroupCountZ</code><p>In particular, if any of the values in the thread-group parameters are 0, nothing will happen. +</p><p>The maximum size of any dimension is 65535.</p> + + + <dd> <p>The size, in thread groups, of the x-dimension of the thread-group grid. </p> </dd> + + + <dd> <p>The size, in thread groups, of the y-dimension of the thread-group grid.</p> </dd> + + + <dd> <p>The size, in thread groups, of the z-dimension of the thread-group grid. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Describes an indirect argument (an indirect parameter), for use with a command signature. </p> + <p> Use this structure with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> A single <strong>{{D3D12_INDIRECT_ARGUMENT_TYPE}}</strong> enumeration constant. </p> </dd> + + + <dd> <dl> <dt><strong>Slot</strong></dt> <dd> <p> Specifies the slot containing the vertex buffer address. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the constant. </p> </dd> <dt><strong>DestOffsetIn32BitValues</strong></dt> <dd> <p> The offset, in 32-bit values, to set the first constant of the group. Supports multi-value constants at a given root index. Root constant entries must be sorted from smallest to largest DestOffsetIn32BitValues. </p> </dd> <dt><strong>Num32BitValuesToSet</strong></dt> <dd> <p> The number of 32-bit constants that are set at the given root index. Supports multi-value constants at a given root index. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{CBV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{SRV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{UAV}}. </p> </dd> </dl> </dd> + + + + + <p> Describes the arguments (parameters) of a command signature. </p> + <p> Use this structure by <strong>CreateCommandSignature</strong>. </p> + + + <dd> <p> Specifies the size of each argument of a command signature, in bytes. </p> </dd> + + + <dd> <p> Specifies the number of arguments in the command signature. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structures, containing details of the arguments, including whether the argument is a vertex buffer, constant, constant buffer view, shader resource view, or unordered access view. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the command signature is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + + + <p> Describes subresource data. </p> + <p>This structure is used by a number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that contains the subresource data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The depth pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p> Describes the destination of a memory copy operation. </p> + <p>This structure is used by a number of helper methods, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that receives the copied data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The slice pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p>An interface from which <strong>{{ID3D12Device}}</strong> and <strong>{{ID3D12DeviceChild}}</strong> inherit from. It provides methods to associate private data and annotate object names.</p> + + + + <p>Gets application-defined data from a device object.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> that is associated with the data. </p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a memory block that receives the data from the device object if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p> Sets application-defined data to a device object and associates that data with an application-defined <strong>{{GUID}}</strong>. </p> + <p> Rather than using the Direct3D 11 debug object naming scheme of calling <strong>{{ID3D12Object::SetPrivateData}}</strong> using <strong>{{WKPDID_D3DDebugObjectName}}</strong> with an {{ASCII}} name, call <strong>{{ID3D12Object::SetName}}</strong> with a {{UNICODE}} name. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> to associate with the data. </p> </dd> + + + <dd> <p> The size in bytes of the data. </p> </dd> + + + <dd> <p> A reference to a memory block that contains the data to be stored with this device object. If <em>pData</em> is <strong>{{NULL}}</strong>, <em>DataSize</em> must also be 0, and any data that was previously associated with the <strong>{{GUID}}</strong> specified in <em>guid</em> will be destroyed. </p> </dd> + + + + + <p> Associates an <strong>{{IUnknown}}</strong>-derived interface with the device object and associates that interface with an application-defined <strong>{{GUID}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Associates a name with the device object. This name is for use in debug diagnostics and tools. </p> + <p> This method takes {{UNICODE}} names. The older Direct3D 11 debug object naming system through <strong>{{ID3D12Object::SetPrivateData}}</strong> with <strong>{{WKPDID_D3DDebugObjectName}}</strong> used {{ASCII}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the device object. </p> </dd> + + + + + <p>An interface from which other core interfaces inherit from, including <strong>{{ID3D12PipelineLibrary}}</strong>, <strong>{{ID3D12CommandList}}</strong>, <strong>{{ID3D12Pageable}}</strong>, and <strong>{{ID3D12RootSignature}}</strong>. It provides a method to get back to the device object it was created against.</p> + + + + <p>Gets a reference to the device that created this interface. </p> + <p> Any returned interfaces have their reference count incremented by one, so be sure to call ::release() on the returned references before they are freed or else you will have a memory leak. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the device interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the device can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Device}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a device. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12Device}}</strong> interface for the device. </p> </dd> + + + + + <p>The root signature defines what resources are bound to the graphics pipeline. A root signature is configured by the app and links command lists to the resources the shaders require. Currently, there is one graphics and one compute root signature per app.</p> + + + + <p>Contains a method to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> data structure, of a serialized root signature version 1.0. </p> + <p>This interface has been superceded by <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>.</p> + + + + <p> Gets the layout of the root signature. </p> + <p> This method returns a deserialized root signature in a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature. </p> + + + + <p>Contains methods to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, of any version of a serialized root signature. </p> + <p>This interface supercedes <strong>{{ID3D12RootSignatureDeserializer}}</strong>.</p> + + + + <p>Converts root signature description structures to a requested version.</p> + <p>This method allocates additional storage if needed for the converted root signature (memory owned by the deserializer interface). If conversion is done, the deserializer interface doesn?t free the original deserialized root signature memory ? all versions the interface has been asked to convert to are available until the deserializer is destroyed. </p><p>Converting a root signature from 1.1 to 1.0 will drop all <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> and <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> can be useful for generating compatible root signatures that need to run on old operating systems, though does lose optimization opportunities. For instance, multiple root signature versions can be serialized and stored with application assets, with the appropriate version used at runtime based on the operating system capabilities. </p><p>Converting a root signature from 1.0 to 1.1 just adds the appropriate flags to match 1.0 semantics.</p> + <p>This method returns an {{HRESULT}} success or error code. The method can fail with {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>Specifies the required <strong>{{D3D_ROOT_SIGNATURE_VERSION}}</strong>.</p> </dd> + + + <dd> <p>Contains the deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> </dd> + + + + + <p> Gets the layout of the root signature, without converting between root signature versions. </p> + <p>This method returns a deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature.</p> + + + + <p>An interface from which many other core interfaces inherit from. It indicates that the object type encapsulates some amount of {{GPU}}-accessible memory; but does not strongly indicate whether the application can manipulate the object's residency. </p> + <p>For more details, refer to Memory Management in Direct3D 12 and the <strong>MakeResident</strong> method reference. +</p> + + + + <p>A heap is an abstraction of contiguous memory allocation, used to manage physical memory. This heap can be used with <strong>{{ID3D12Resource}}</strong> objects to support placed resources or reserved resources.</p> + + + + <p>Gets the heap description.</p> + <p>Returns the <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap.</p> + + + + + + + + + + <p>Invalidates the {{CPU}} reference to the specified subresource in the resource. <strong>Unmap</strong> also flushes the {{CPU}} cache, when necessary, so that {{GPU}} reads to this address reflect any modifications made by the {{CPU}}. +</p> + <p>Refer to the extensive Remarks and Examples for the <strong>Map</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the index of the subresource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RANGE}}</strong> structure that describes the range of memory to unmap.</p> <p>This indicates the region the {{CPU}} might have modified, and the coordinates are subresource-relative. A null reference indicates the entire subresource might have been modified by the {{CPU}}. It is valid to specify the {{CPU}} didn't write any data by passing a range where <strong>End</strong> is less than or equal to <strong>Begin</strong>.</p> </dd> + + + + + <p>Gets the resource description.</p> + <p>A Direct3D 12 resource description structure.</p> + + + + <p> This method returns the {{GPU}} virtual address of a buffer resource. </p> + <p>This method is only useful for buffer resources, it will return zero for all texture resources.</p><p> For more information on the use of {{GPU}} virtual addresses, refer to Indirect Drawing. </p> + <p> This method returns the {{GPU}} virtual address. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd synonym of {{UINT64}}. </p> + + + + <p>Uses the {{CPU}} to copy data into a subresource, enabling the {{CPU}} to modify the contents of most textures with undefined layouts.</p> + <p>The resource should first be mapped using <strong>Map</strong>. Textures must be in the <strong>{{D3D12_RESOURCE_STATE_COMMON}}</strong> state for {{CPU}} access through <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> to be legal; but buffers do not.</p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p><p><strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> enable near zero-copy optimizations for {{UMA}} adapters, but can prohibitively impair the efficiency of discrete/ {{NUMA}} adapters as the texture data cannot reside in local video memory. Typical applications should stick to discrete-friendly upload techniques, unless they recognize the adapter architecture is {{UMA}}. For more details on uploading, refer to <strong>CopyTextureRegion</strong>, and for more details on {{UMA}}, refer to <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </p><p>On {{UMA}} systems, this routine can be used to minimize the cost of memory copying through the loop optimization known as loop tiling. By breaking up the upload into chucks that comfortably fit in the {{CPU}} cache, the effective bandwidth between the {{CPU}} and main memory more closely achieves theoretical maximums. +</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the index of the subresource. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data into. If {{NULL}}, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + <dd> <p> A reference to the source data in memory. </p> </dd> + + + <dd> <p>The distance from one row of source data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of source data to the next. </p> </dd> + + + + + <p> Uses the {{CPU}} to copy data from a subresource, enabling the {{CPU}} to read the contents of most textures with undefined layouts. </p> + <p> See the Remarks section for <strong>WriteToSubresource</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the destination data in memory. </p> </dd> + + + <dd> <p> The distance from one row of destination data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of destination data to the next. </p> </dd> + + + <dd> <p> Specifies the index of the subresource to read from. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data from. If {{NULL}}, the data is read from the destination subresource with no offset. The dimensions of the destination must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + + + <p> Retrieves the properties of the resource heap, for placed and committed resources. </p> + <p> This method only works on placed and committed resources, not on reserved resources. If the resource was created as reserved, {{E_INVALIDARG}} is returned. The pages could be mapped to none, one, or more heaps. </p><p> For more information, refer to Memory Management in Direct3D 12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. If the resource was created as reserved, {{E_INVALIDARG}} is returned. </p> + + + <dd> <p> Pointer to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure, that on successful completion of the method will contain the resource heap properties. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_HEAP_FLAGS}}</strong> variable, that on successful completion of the method will contain any miscellaneous heap flags. </p> </dd> + + + + + <p>Represents the allocations of storage for graphics processing unit ({{GPU}}) commands.</p> + <p>Use <strong>{{ID3D12Device::CreateCommandAllocator}}</strong> to create a command allocator object. </p><p>The command allocator object corresponds to the underlying allocations in which {{GPU}} commands are stored. The command allocator object applies to both direct command lists and bundles. You must use a command allocator object in a DirectX 12 app.</p> + + + + <p>Indicates to re-use the memory that is associated with the command allocator.</p> + <p>Apps call <strong>Reset</strong> to re-use the memory that is associated with a command allocator. From this call to <strong>Reset</strong>, the runtime and driver determine that the graphics processing unit ({{GPU}}) is no longer executing any command lists that have recorded commands with the command allocator.</p><p>Unlike <strong>{{ID3D12GraphicsCommandList::Reset}}</strong>, it is not recommended that you call <strong>Reset</strong> on the command allocator while a command list is still being executed. </p><p>The debug layer will issue a warning if it can't prove that there are no pending {{GPU}} references to command lists that have recorded commands in the allocator.</p><p>The debug layer will issue an error if <strong>Reset</strong> is called concurrently by multiple threads (on the same allocator object).</p> + <p>This method returns <strong>{{E_FAIL}}</strong> if there is an actively recording command list referencing the command allocator. The debug layer will also issue an error in this case. See Direct3D 12 Return Codes for other possible return values.</p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + + + + <p>Sets the fence to the specified value.</p> + <p>Use this method to set a fence value from the {{CPU}} side. Use <strong>{{ID3D12CommandQueue::Signal}}</strong> to set a fence from the {{GPU}} side.</p> + <p>This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>The value to set the fence to.</p> </dd> + + + + + <p>Represents the state of all currently set shaders as well as certain fixed function state objects.</p> + <p>Use <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> or <strong>{{ID3D12Device::CreateComputePipelineState}}</strong> to create a pipeline state object ({{PSO}}). </p><p>A pipeline state object corresponds to a significant portion of the state of the graphics processing unit ({{GPU}}). This state includes all currently set shaders and certain fixed function state objects. The only way to change states contained within the pipeline object is to change the currently bound pipeline object.</p> + + + + <p> Gets the cached blob representing the pipeline state. </p> + <p>Refer to the remarks for <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> After this method returns, points to the cached blob representing the pipeline state. </p> </dd> + + + + + <p>A descriptor heap is a collection of contiguous allocations of descriptors, one allocation for every descriptor. Descriptor heaps contain many object types that are not part of a Pipeline State Object ({{PSO}}), such as Shader Resource Views ({{SRVs}}), Unordered Access Views ({{UAVs}}), Constant Buffer Views ({{CBVs}}), and Samplers.</p> + + + + <p> Gets the descriptor heap description. </p> + <p> The description of the descriptor heap, as a <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + + <p>Gets the {{CPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{CPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Gets the {{GPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{GPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Manages a query heap. A query heap holds an array of queries, referenced by indexes.</p> + <p>For more information, refer to Queries.</p> + + + + <p> A command signature object enables apps to specify indirect drawing, including the buffer format, command type and resource bindings to be used.</p> + <p> To create a command signature, call <strong>{{ID3D12Device::CreateCommandSignature}}</strong>, as described in Indirect Drawing. </p> + + + + + + + <p> Gets the type of the command list, such as direct, bundle, compute, or copy. </p> + <p> This method returns the type of the command list, as a <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong> enumeration constant, such as direct, bundle, compute, or copy. </p> + + + + + + + <p> Indicates that recording to the command list has finished. </p> + <p> The runtime will validate that the command list has not previously been closed. If an error was encountered during recording, the error code is returned here. The runtime won't call the close device driver interface ({{DDI}}) in this case. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list has already been closed, or an invalid {{API}} was called during command list recording. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory during recording. </li> <li><strong>{{E_INVALIDARG}}</strong> if an invalid argument was passed to the command list {{API}} during recording. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + + <p> Resets a command list back to its initial state as if a new command list was just created. </p> + <p> By using <strong>Reset</strong>, you can re-use command list tracking structures without any allocations. Unlike <strong>{{ID3D12CommandAllocator::Reset}}</strong>, you can call <strong>Reset</strong> while the command list is still being executed. A typical pattern is to submit a command list and then immediately reset it to reuse the allocated memory for another command list. </p><p> You can use <strong>Reset</strong> for both direct command lists and bundles. </p><p> The command allocator that <strong>Reset</strong> takes as input can be associated with no more than one recording command list at a time. The allocator type, direct command list or bundle, must match the type of command list that is being created. </p><p> If a bundle doesn't specify a resource heap, it can't make changes to which descriptor tables are bound. Either way, bundles can't change the resource heap within the bundle. If a heap is specified for a bundle, the heap must match the calling 'parent' command list?s heap. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list was not in the "closed" state when the <strong>Reset</strong> call was made, or the per-device limit would have been exceeded. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory. </li> <li><strong>{{E_INVALIDARG}}</strong> if the allocator is currently being used with another command list in the "recording" state or if the specified allocator was created with the wrong type. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12CommandAllocator}}</strong> object that the device creates command lists from. </p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. This is optional and can be {{NULL}}. If {{NULL}}, the runtime sets a dummy initial pipeline state so that drivers don't have to deal with undefined state. The overhead for this is low, particularly for a command list, for which the overall cost of recording the command list likely dwarfs the cost of one initial state setting. So there is little cost in not setting the initial pipeline state parameter if it isn't convenient. </p> <p>For bundles on the other hand, it might make more sense to try to set the initial state parameter since bundles are likely smaller overall and can be reused frequently.</p> </dd> + + + + + <p>Resets the state of a direct command list back to the state it was in when the command list was created. </p> + <p> It is invalid to call <strong>ClearState</strong> on a bundle. If an app calls <strong>ClearState</strong> on a bundle, the call to <strong>Close</strong> will return <strong>{{E_FAIL}}</strong>. </p><p> When <strong>ClearState</strong> is called, all currently bound resources are unbound. The primitive topology is set to <strong>{{D3D_PRIMITIVE_TOPOLOGY_UNDEFINED}}</strong>. Viewports, scissor rectangles, stencil reference value, and the blend factor are set to empty values (all zeros). Predication is disabled. </p><p> The app-provided pipeline state object becomes bound as the currently set pipeline state object. </p> + <p> Returns nothing. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. </p> </dd> + + + + + <p> Draws non-indexed, instanced primitives. </p> + <p> A draw {{API}} submits work to the rendering pipeline. </p><p> Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. </p><p> The vertex data for an instanced draw call typically comes from a vertex buffer that is bound to the pipeline. But, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}). </p> + <p>Returns nothing</p> + + + <dd> <p> Number of vertices to draw. </p> </dd> + + + <dd> <p> Number of instances to draw. </p> </dd> + + + <dd> <p> Index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Draws indexed, instanced primitives. </p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Executes a command list from a thread group.</p> + <p> You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z). </p> + <p>Returns nothing.</p> + + + <dd> <p> The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1. </p> </dd> + + + + + <p> Copies a region of a buffer from one resource to another. </p> + <p> Consider using the <strong>CopyResource</strong> method when copying an entire resource, and use this method for copying regions of a resource. </p><p><strong>CopyBufferRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the destination <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the destination resource. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the source resource, to start the copy from. </p> </dd> + + + <dd> <p> Specifies the number of bytes to copy. </p> </dd> + + + + + <p> This method uses the {{GPU}} to copy texture data between two locations. Both the source and the destination may reference texture data located within either a buffer resource or a texture resource.</p> + <p> The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopyTextureRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopyTextureRegion</strong> call. Invalid parameters to <strong>CopyTextureRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device. </p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. </p><p><strong>CopyTextureRegion</strong> performs the copy on the {{GPU}} (similar to a <code>memcpy</code> by the {{CPU}}). As a consequence, the source and destination resources: </p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must have compatible <strong>{{DXGI_FORMAT}}</strong>s (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyTextureRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> </ul><p><strong>CopyTextureRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopyTextureRegion</strong> can reinterpret the resource data between a few format types. </p><p> If your app needs to copy an entire resource, we recommend to use <strong>CopyResource</strong> instead. </p><strong>Note</strong>?? If you use <strong>CopyTextureRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.?<p><strong>CopyTextureRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p>Specifies the destination <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. +</p> </dd> + + + <dd> <p> The x-coordinate of the upper left corner of the destination region. </p> </dd> + + + <dd> <p> The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero. </p> </dd> + + + <dd> <p> The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_SOURCE}} state.</p> </dd> + + + <dd> <p> Specifies an optional {{D3D12_BOX}} that sets the size of the source texture to copy. </p> </dd> + + + + + + + + <p> Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on Tier_1 tiled resources, where reading and writing unmapped areas is invalid - refer to <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation. </p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy {{APIs}} like <strong>CopyTextureRegion</strong>.</p><p><strong>CopyTiles</strong> does copy data in a slightly different pattern than the standard copy methods.</p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and de-swizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy {{APIs}}, like <strong>CopyTextureRegion</strong>, to copy small mipmaps individually.</p> + <p> This method does not return a value. </p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D12Resource}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_COPY_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Copy a multi-sampled resource into a non-multi-sampled resource.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> A zero-based index, that identifies the destination subresource. Use <strong>{{D3D12CalcSubresource}}</strong> to calculate the subresource index if the parent resource is complex. </p> </dd> + + + <dd> <p> Source resource. Must be multisampled. </p> </dd> + + + <dd> <p> The source subresource of the source resource. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. </p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p> Bind an array of viewports to the rasterizer stage of the pipeline. </p> + <p> All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled. </p><p> Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array. </p><strong>Note</strong>?? Even though you specify float values to the members of the <strong>{{D3D12_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p> This method does not return a value. </p> + + + <dd> <p> Number of viewports to bind. The range of valid values is (0, {{D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}). </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_VIEWPORT}}</strong> structures to bind to the device. </p> </dd> + + + + + + + + <p>Sets the blend factor that modulate values for a pixel shader, render target, or both.</p> + <p> If you created the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage uses the non-{{NULL}} array of blend factors. </p><p> If you didn't create the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors. </p><p> If you pass {{NULL}}, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }. </p><p> {{D3D11_BLEND_BLEND_FACTOR}} and {{D3D11_BLEND_INV_BLEND_FACTOR}} are <strong>{{D3D12_BLEND}}</strong> enumeration constants. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Array of blend factors, one for each {{RGBA}} component. </p> </dd> + + + + + <p>Sets the reference value for depth stencil tests.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Reference value to perform against when doing a depth-stencil test. </p> </dd> + + + + + <p> Sets all shaders and programs most of the fixed-function state of the graphics processing unit ({{GPU}}) pipeline. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Pointer to the <strong>{{ID3D12PipelineState}}</strong> containing the pipeline state data. </p> </dd> + + + + + <p> Notifies the driver that it needs to synchronize multiple accesses to resources. </p> + <p>There are three types of barrier descriptions:</p><ul> <li> <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> - Transition barriers indicate that a set of subresources transition between different usages. The caller must specify the <em>before</em> and <em>after</em> usages of the subresources. The {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}} flag is used to transition all subresources in a resource at the same time. </li> <li> <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> - Aliasing barriers indicate a transition between usages of two different resources which have mappings into the same heap. The application can specify both the before and the after resource. Note that one or both resources can be {{NULL}} (indicating that any tiled resource could cause aliasing). </li> <li> <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> - Unordered access view barriers indicate all {{UAV}} accesses (read or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. The specified resource may be {{NULL}}. It is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which only read a {{UAV}}. Additionally, it is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which write to the same {{UAV}} if the application knows that it is safe to execute the {{UAV}} accesses in any order. The resource can be {{NULL}} (indicating that any {{UAV}} access could require the barrier). </li> </ul><p> When <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> is passed an array of resource barrier descriptions, the {{API}} behaves as if it was called N times (1 for each array element), in the specified order. Transitions should be batched together into a single {{API}} call when possible, as a performance optimization.</p><p> For descriptions of the usage states a subresource can be in, see the <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration and the Using Resource Barriers to Synchronize Resource States in Direct3D 12 section. </p><p> All subresources in a resource must be in the {{RENDER_TARGET}} state, or {{DEPTH_WRITE}} state, for render targets/depth-stencil resources respectively, when <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> is called. </p><p> When a back buffer is presented, it must be in the {{D3D12_RESOURCE_STATE_PRESENT}} state. If <strong>{{IDXGISwapChain1::Present1}}</strong> is called on a resource which is not in the {{PRESENT}} state, a debug layer warning will be emitted. </p><p>The resource usage bits are group into two categories, read-only and read/write.</p><p> The following usage bits are read-only: </p><ul> <li>{{D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_INDEX_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}}</li> <li>{{D3D12_RESOURCE_STATE_COPY_SOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_READ}}</li> </ul><p>The following usage bits are read/write:</p><ul> <li>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</li> </ul><p>The following usage bits are write-only:</p><ul> <li>{{D3D12_RESOURCE_STATE_COPY_DEST}}</li> <li>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</li> <li>{{D3D12_RESOURCE_STATE_STREAM_OUT}}</li> </ul><p> At most one write bit can be set. If any write bit is set, then no read bit may be set. If no write bit is set, then any number of read bits may be set. </p><p> At any given time, a subresource is in exactly one state (determined by a set of flags). The application must ensure that the states are matched when making a sequence of <strong>ResourceBarrier</strong> calls. In other words, the before and after states in consecutive calls to <strong>ResourceBarrier</strong> must agree. </p><p>To transition all subresources within a resource, the application can set the subresource index to {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}, which implies that all subresources are changed.</p><p> For improved performance, applications should use split barriers (refer to Synchronization and Multi-Engine). Applications should also batch multiple transitions into a single call whenever possible. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of submitted barrier descriptions. </p> </dd> + + + <dd> <p> Pointer to an array of barrier descriptions. </p> </dd> + + + + + <p> Executes a bundle. </p> + <p> Bundles inherit all state from the parent command list on which <strong>ExecuteBundle</strong> is called, except the pipeline state object and primitive topology. All of the state that is set in a bundle will affect the state of the parent command list. Note that <strong>ExecuteBundle</strong> is not a predicated operation. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12GraphicsCommandList}}</strong> that determines the bundle to be executed. </p> </dd> + + + + + <p> Changes the currently bound descriptor heaps that are associated with a command list. </p> + <p><strong>SetDescriptorHeaps</strong> can be called on a bundle, but the bundle descriptor heaps must match the calling command list descriptor heap. For more information on bundle restrictions, refer to Creating and Recording Command Lists and Bundles.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Number of descriptor heaps to bind. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D12DescriptorHeap}}</strong> objects for the heaps to set on the command list. </p> </dd> + + + + + <p> Sets the layout of the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets the layout of the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets a descriptor table into the compute root signature.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a descriptor table into the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a constant in the compute root signature. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a constant in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a group of constants in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p>The slot number for binding.</p> </dd> + + + <dd> <p>The number of constants to set in the root signature.</p> </dd> + + + <dd> <p>The source data for the group of constants to set.</p> </dd> + + + <dd> <p>The offset, in 32-bit values, to set the first constant of the group in the root signature.</p> </dd> + + + + + <p> Sets a group of constants in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The number of constants to set in the root signature. </p> </dd> + + + <dd> <p> The source data for the group of constants to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the first constant of the group in the root signature. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> Specifies the {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the Buffer. Textures are not supported. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets the view for the index buffer. </p> + <p>Only one index buffer can be bound to the graphics pipeline at any one time.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The view specifies the index buffer's address, size, and <strong>{{DXGI_FORMAT}}</strong>, as a reference to a <strong>{{D3D12_INDEX_BUFFER_VIEW}}</strong> structure. </p> </dd> + + + + + <p>Sets a {{CPU}} descriptor handle for the vertex buffers.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting vertex buffers. </p> </dd> + + + <dd> <p> The number of views in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies the vertex buffer views in an array of <strong>{{D3D12_VERTEX_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets the stream output buffer views. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting stream output buffers. </p> </dd> + + + <dd> <p> The number of entries in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_STREAM_OUTPUT_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets {{CPU}} descriptor handles for the render targets and depth stencil. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of entries in the <em>pRenderTargetDescriptors</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structures that describe the {{CPU}} descriptor handles that represents the start of the heap of render target descriptors. </p> </dd> + + + <dd> <p><strong>True</strong> means the handle passed in is the reference to a contiguous range of <em>NumRenderTargetDescriptors</em> descriptors. This case is useful if the set of descriptors to bind already happens to be contiguous in memory (so all that?s needed is a handle to the first one). For example, if <em>NumRenderTargetDescriptors</em> is 3 then the memory layout is taken as follows:</p><p>In this case the driver dereferences the handle and then increments the memory being pointed to.</p> <p><strong>False</strong> means that the handle is the first of an array of <em>NumRenderTargetDescriptors</em> handles. The false case allows an application to bind a set of descriptors from different locations at once. Again assuming that <em>NumRenderTargetDescriptors</em> is 3, the memory layout is taken as follows:</p><p>In this case the driver dereferences three handles that are expected to be adjacent to each other in memory.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap that holds the depth stencil descriptor. </p> </dd> + + + + + <p>Clears the depth-stencil resource.</p> + <p><strong>ClearDepthStencilView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> Returns nothing. </p> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the depth stencil to be cleared. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_CLEAR_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The resulting value identifies the type of data to clear (depth buffer, stencil buffer, or both). </p> </dd> + + + <dd> <p> A value to clear the depth buffer with. This value will be clamped between 0 and 1. </p> </dd> + + + <dd> <p> A value to clear the stencil buffer with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearDepthStencilView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a render target to one value. </p> + <p><strong>ClearRenderTargetView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a {{D3D12_CPU_DESCRIPTOR_HANDLE}} structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to be cleared. </p> </dd> + + + <dd> <p> A 4-component array that represents the color to fill the render target with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearRenderTargetView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a unordered-access view to the specified integer values. </p> + + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D12_GPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewUint</strong> clears the entire resource view. </p> </dd> + + + + + <p>Sets all the elements in a unordered access view to the specified float values.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewFloat</strong> clears the entire resource view. </p> </dd> + + + + + <p>Discards a resource.</p> + <p>The semantics of <strong>DiscardResource</strong> change based on the command list type.</p><p> For <strong>{{D3D12_COMMAND_LIST_TYPE_DIRECT}}</strong>, the following two rules apply: +</p><ul> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</strong> resource barrier state.</li> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG}} _ALLOW_DEPTH_STENCIL</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</strong>. +</li> </ul><p>For <strong>{{D3D12_COMMAND_LIST_TYPE_COMPUTE}}</strong>, the following rule applies: +</p><ul> <li>The resource must have the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}</strong> flag, and <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</strong> resource barrier state.</li> </ul><p><strong>DiscardResource</strong> is not supported on command lists with either <strong>{{D3D12_COMMAND_LIST_TYPE_BUNDLE}}</strong> nor <strong>{{D3D12_COMMAND_LIST_TYPE_COPY}}</strong>.</p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface for the resource to discard. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_DISCARD_REGION}}</strong> structure that describes details for the discard-resource operation. </p> </dd> + + + + + <p>Starts a query running.</p> + <p> In Direct3D 12, the usage of queries is more restricted than Direct3D 11. The following scenarios are no longer supported: </p><ul> <li> A call to <strong>BeginQuery</strong> followed by another call to <strong>BeginQuery</strong> without an intervening call to <strong>EndQuery</strong>. </li> <li> A call to <strong>EndQuery</strong> followed by <strong>EndQuery</strong> without an intervening call to <strong>BeginQuery</strong>. </li> </ul><p> Given these restrictions, there are 3 states that a query can be in: </p><ul> <li>Inactive (this is the initial state of all queries)</li> <li>Querying</li> <li>Predicating</li> </ul><p><strong>BeginQuery</strong> transitions a query from the inactive state to the querying state. <strong>EndQuery</strong> transitions a query from the querying state to the inactive state. <strong>SetPredication</strong> transitions the previous set query from the predicating state to the inactive state and transitions the newly set query from the inactive state to the predicating state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query within the query heap. </p> </dd> + + + + + <p> Ends a running query. </p> + <p> Refer to the remarks for <strong>BeginQuery</strong>, and to Queries. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query in the query heap. </p> </dd> + + + + + <p> </p><p> Extracts data from a query. <strong>ResolveQueryData</strong> works with all heap types (default, upload, and readback).? </p> + <p><strong>ResolveQueryData</strong> performs a batched operation which writes query data into a destination buffer. Query data is written contiguously to the destination buffer, and the parameter. </p><p> Binary occlusion queries write 64-bits per query. The least significant bit is either 0 or 1. The rest of the bits are 0. </p><p>The core runtime will validate the following:</p><ul> <li><em>StartIndex</em> and <em>NumQueries</em> are within range. </li> <li><em>AlignedDestinationBufferOffset</em> is a multiple of 8 bytes. </li> <li><em>DestinationBuffer</em> is a buffer. </li> <li> The written data will not overflow the output buffer. </li> <li> The query type must be supported by the command list type. </li> <li> The query type must be supported by the query heap. </li> </ul><p> The debug layer will issue a warning if the destination buffer is not in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the queries to resolve. </p> </dd> + + + <dd> <p> Specifies the type of query, one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies an index of the first query to resolve. </p> </dd> + + + <dd> <p> Specifies the number of queries to resolve. </p> </dd> + + + <dd> <p> Specifies an <strong>{{ID3D12Resource}}</strong> destination buffer, which must be in the state <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong>. </p> </dd> + + + <dd> <p> Specifies an alignment offset into the destination buffer. Must be a multiple of 8 bytes. </p> </dd> + + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command list, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command list, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Apps perform indirect draws/dispatches using the <strong>ExecuteIndirect</strong> method. </p> + <p>The semantics of this {{API}} are defined with the following pseudo-code:</p><p>Non-{{NULL}} pCountBuffer:</p><code>// Read draw count out of count buffer +{{UINT}} CommandCount = pCountBuffer-&gt;ReadUINT32(CountBufferOffset); CommandCount = min(CommandCount, MaxCommandCount) // Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; CommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>{{NULL}} pCountBuffer:</p><code>// Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; MaxCommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>The debug layer will issue an error if either the count buffer or the argument buffer are not in the {{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}} state. The core runtime will validate:</p><ul> <li><em>CountBufferOffset</em> and <em>ArgumentBufferOffset</em> are 4-byte aligned </li> <li><em>pCountBuffer</em> and <em>pArgumentBuffer</em> are buffer resources (any heap type) </li> <li> The offset implied by <em>MaxCommandCount</em>, <em>ArgumentBufferOffset</em>, and the drawing program stride do not exceed the bounds of <em>pArgumentBuffer</em> (similarly for count buffer) </li> <li>The command list is a direct command list or a compute command list (not a copy or {{JPEG}} decode command list)</li> <li>The root signature of the command list matches the root signature of the command signature</li> </ul><p> The functionality of two {{APIs}} from earlier versions of Direct3D, <code>DrawInstancedIndirect</code> and <code>DrawIndexedInstancedIndirect</code>, are encompassed by <strong>ExecuteIndirect</strong>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a <strong>{{ID3D12CommandSignature}}</strong>. The data referenced by <em>pArgumentBuffer</em> will be interpreted depending on the contents of the command signature. Refer to Indirect Drawing for the {{APIs}} that are used to create a command signature. </p> </dd> + + + <dd> <p>There are two ways that command counts can be specified:</p> <ul> <li> If <em>pCountBuffer</em> is not {{NULL}}, then <em>MaxCommandCount</em> specifies the maximum number of operations which will be performed. The actual number of operations to be performed are defined by the minimum of this value, and a 32-bit unsigned integer contained in <em>pCountBuffer</em> (at the byte offset specified by <em>CountBufferOffset</em>). </li> <li> If <em>pCountBuffer</em> is {{NULL}}, the <em>MaxCommandCount</em> specifies the exact number of operations which will be performed. </li> </ul> </dd> + + + <dd> <p> Specifies one or more <strong>{{ID3D12Resource}}</strong> objects, containing the command arguments. </p> </dd> + + + <dd> <p> Specifies an offset into <em>pArgumentBuffer</em> to identify the first command argument. </p> </dd> + + + <dd> <p> Specifies a reference to a <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that is the offset into <em>pCountBuffer</em>, identifying the argument count. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + + + + <p>This method configures the sample positions used by subsequent draw, copy, resolve, and similar operations.</p> + <p>The operational semantics of sample positions are determined by the various draw, copy, resolve, and other operations that can occur.</p><p><strong>CommandList:</strong> In the absense of any prior calls to SetSamplePositions in a CommandList, samples assume the default position based on the Pipeline State Object ({{PSO}}). The default positions are determined either by the {{SAMPLE_DESC}} portion of the {{PSO}} if it is present, or by the standard sample positions if the {{RASTERIZER_DESC}} portion of the {{PSO}} has ForcedSampleCount set to a value greater than 0.</p><p>After SetSamplePosition has been called, subsequent draw calls must use a {{PSO}} that specifies a matching sample count either using the {{SAMPLE_DESC}} portion of the {{PSO}}, or ForcedSampleCount in the {{RASTERIZER_DESC}} portion of the {{PSO}}.</p><p>SetSamplePositions can only be called on a graphics CommandList. It can't be called in a bundle; bundles inherit sample position state from the calling CommandList and don't modify it.</p><p>Calling SetSamplePositions(0, 0, {{NULL}}) reverts the sample positions to their default values.</p><p><strong>Clear RenderTarget:</strong> Sample positions are ignored when clearing a render target.</p><p><strong>Clear DepthStencil:</strong> When clearing the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of future rendering to the cleared surface or region; the contents of any uncleared regions produced using different sample positions become undefined.</p><p>When clearing the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored.</p><p><strong>Draw to RenderTarget:</strong> When drawing to a render target the sample positions can be changed for each draw call, even when drawing to a region that overlaps previous draw calls. The current sample positions determine the operational semantics of each draw call and samples are taken from taken from the stored contents of the render target, even if the contents were produced using different sample positions.</p><p><strong>Draw using DepthStencil:</strong> When drawing to a depth-stencil surface (read or write) or any region of it, the sample positions must be set to match those used to clear the affected region previously. To use a different sample position, the target region must be cleared first. The pixels outside the clear region are unaffected.</p><p>Hardware may store the depth portion or a depth-stencil surface as plane equations, and evaluate them to produce depth values when the application issues a read. Only the rasterizer and output-merger are required to suport programmable sample positions of the depth portion of a depth-stencil surface. Any other read or write of the depth portion that has been rendered with sample positions set may ignore them and instead sample at the standard positions.</p><p><strong>Resolve RenderTarget:</strong> When resolving a render target or any region of it, the sample positions are ignored; these {{APIs}} operate only on stored color values.</p><p><strong>Resolve DepthStencil:</strong> When resolving the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of past rendering to the resolved surface or region. To use a different sample position, the target region must be cleared first.</p><p>When resolving the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored; stencil resolves operate only on stored stencil values.</p><p><strong>Copy RenderTarget:</strong> When copying from a render target, the sample positions are ignored regardless of whether it is a full or partial copy.</p><p><strong>Copy DepthStencil (Full Subresource):</strong> When copying a full subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface. To use a different sample position, the target region must be cleared first.</p><p>On some hardware properties of the source surface (such as stored plane equations for depth values) transfer to the destination. Therefore, if the destination surface is subsequently drawn to, the sample positions originally used to generate the source content need to be used with the destination surface. The {{API}} requires this on all hardware for consistency even if it may only apply to some.</p><p><strong>Copy DepthStencil (Partial Subresource):</strong> When copying a partial subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface, similarly to copying a full subresource. However, if the content of an affected destination subresources is only partially covered by the copy, the contents of the uncovered portion within those subresources becomes undefined unless all of it was generated using the same sample positions as the copy source. To use a different sample position, the target region must be cleared first.</p><p>When copying a partial subresource from the stencil portion of a depth-stencil surface, the sample postions are ignored. It doesn?t matter what sample positions were used to generate content for any other areas of the destination buffer not covered by the copy ? those contents remain valid.</p><p><strong>Shader SamplePos:</strong> The {{HLSL}} SamplePos intrinsic is not aware of programmable sample positions and results returned to shaders calling this on a surface rendered with programmable positions is undefined. Applications must pass coordinates into their shader manually if needed. Similarly evaluating attributes by sample index is undefined with programmable sample positions.</p><p><strong>Transitioning out of {{DEPTH_READ}} or {{DEPTH_WRITE}} state:</strong> If a subresource in {{DEPTH_READ}} or {{DEPTH_WRITE}} state is transitioned to any other state, including {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some hardware might need to decompress the surface. Therefore, the sample positions must be set on the command list to match those used to generate the content in the source surface. Furthermore, for any subsequent transitions of the surface while the same depth data remains in it, the sample positions must continue to match those set on the command list. To use a different sample position, the target region must be cleared first.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p><p><strong>Transitioning out of {{RENDER_TARGET}} state:</strong> If a subresource in {{RENDER_TARGET}} state is transitioned to anything other than {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some implementations may need to decompress the surface. This decompression is agnostic to sample positions.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of samples to take, per pixel. This value can be 1, 2, 4, 8, or 16, otherwise the SetSamplePosition call is dropped. The number of samples must match the sample count configured in the {{PSO}} at draw time, otherwise the behavior is undefined.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of pixels that sample patterns are being specified for. This value can be either 1 or 4, otherwise the SetSamplePosition call is dropped. A value of 1 configures a single sample pattern to be used for each pixel; a value of 4 configures separate sample patterns for each pixel in a 2x2 pixel grid which is repeated over the render-target or viewport space, aligned to even coordintes.</p> <p>Note that the maximum number of combined samples can't exceed 16, otherwise the call is dropped. If NumPixels is set to 4, NumSamplesPerPixel can specify no more than 4 samples.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_reads_(NumSamplesPerPixel*NumPixels)</code></p> <p>Specifies an array of {{D3D12_SAMPLE_POSITION}} elements. The size of the array is NumPixels * NumSamplesPerPixel. If NumPixels is set to 4, then the first group of sample positions corresponds to the upper-left pixel in the 2x2 grid of pixels; the next group of sample positions corresponds to the upper-right pixel, the next group to the lower-left pixel, and the final group to the lower-right pixel.</p> <p>If centroid interpolation is used during rendering, the order of positions for each pixel determines centroid-sampling prioritiy. That is, the first covered sample in the order specified is chosen as the centroid sample location.</p> </dd> + + + + + + + + <p> Updates mappings of tile locations in reserved resources to memory locations in a resource heap. </p> + <p>Use <strong>UpdateTileMappings</strong> to map the virtual pages of a reserved resource to the physical pages of a heap. The mapping does not have to be in order. The operation is similar to <strong>{{ID3D11DeviceContext2::UpdateTileMappings}}</strong> with the one key difference that {{D3D12}} allows a reserved resource to have tiles from multiple heaps.</p><p> In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of heap tiles. </p><p> You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update: </p><ul> <li><strong>Reserved resource whose mappings are updated.</strong> Mappings start off all {{NULL}} when a resource is initially created. </li> <li><strong>Set of tile regions on the reserved resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <ul> <li><em>NumResourceRegions</em> specifies how many regions there are.</li> <li><em>pResourceRegionStartCoordinates</em> and <em>pResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire reserved resource, including all mipmaps, array slices, or both. </li> <li> <p> If <em>pResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pResourceRegionStartCoordinates</em> without having to send an array of <em>pResourceRegionSizes</em> all set to 1. </p> </li> </ul> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Heap that provides memory where tile mappings can go.</strong> If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a heap.</li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a heap (default), a count of tiles in the reserved resource to map to a single tile in a heap (sharing the tile), a count of tile mappings in the reserved resource to skip and leave as they are, or a count of tiles in the heap to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described reserved resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each reserved resource tile specified has a mapping specified. </p> <p><em>pRangeFlags</em>, <em>pHeapRangeStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the heap; otherwise, for each range i,<em>pRangeFlags[i]</em> identifies how the mappings in that range of tiles work: </p> <ul> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NONE}}</strong>, that range defines sequential tiles in the heap, with the number of tiles being <em>pRangeTileCounts[i]</em> and the starting location <em>pHeapRangeStartOffsets[i]</em>. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE}}</strong>, <em>pHeapRangeStartOffsets[i]</em> identifies the single tile in the heap to map to, and <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to that heap location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NULL}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{NULL}} mappings. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_SKIP}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{SKIP}} mappings. </li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D12_TILE_MAPPING_FLAG_NO_HAZARD}}</strong>. Refer to the description of this flag in <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>.</li> </ul><p> Reserved resources must follow the same rules for tile aliasing, initialization, and data inheritance as placed resources. See <strong>CreatePlacedResource</strong> for more details.</p><p> Here are some examples of common <strong>UpdateTileMappings</strong> cases: </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to the reserved resource. </p> </dd> + + + <dd> <p> The number of reserved resource regions. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> A reference to the resource heap. </p> </dd> + + + <dd> <p> The number of tile ranges. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D12_TILE_RANGE_FLAGS}}</strong> values that describes each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> An array of offsets into the resource heap. These are 0-based tile offsets, counting in tiles (not bytes). </p> </dd> + + + <dd> <p> An array of tiles. An array of values that specify the number of tiles in each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source reserved resource to a destination reserved resource.</p> + <p>Use <strong>CopyTileMappings</strong> to copy the tile mappings from one reserved resource to another, either to duplicate a resource mapping, or to initialize a new mapping before modifying it using <strong>UpdateTileMappings</strong>.</p><p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across reserved resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temporary location and from there written to the destination. </p><p>The destination and the source regions must each entirely fit in their resource or behavior is undefined and the debug layer will emit an error.</p><p> For more info on tiled resources, refer to the "DirectX tiled resources" section within DirectX programming. </p> + <p>This method does not return a value. If an {{E_OUTOFMEMORY}} occurs, the device is removed.</p> + + + <dd> <p>A reference to the destination reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination reserved resource. </p> </dd> + + + <dd> <p>A reference to the source reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source reserved resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the reserved region. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>. </p> </dd> + + + + + <p>Submits an array of command lists for execution.</p> + <p> The driver is free to patch the submitted command lists. It is the calling application?s responsibility to ensure that the graphics processing unit ({{GPU}}) is not currently reading the any of the submitted command lists from a previous execution. </p><p> Applications are encouraged to batch together command list executions to reduce fixed costs associated with submitted commands to the {{GPU}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of command lists to be executed. </p> </dd> + + + <dd> <p> The array of <strong>{{ID3D12CommandList}}</strong> command lists to be executed. </p> </dd> + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command queue, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the start of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXBeginEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p>Waits until the specified fence reaches or exceeds the specified value.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Fence}}</strong> object. </p> </dd> + + + <dd> <p>The value that the command queue is waiting for the fence to reach or exceed. So when <strong>{{ID3D12Fence::GetCompletedValue}}</strong> is greater than or equal to <em>Value</em>, the wait is terminated.</p> </dd> + + + + + <p>This method is used to determine the rate at which the {{GPU}} timestamp counter increments.</p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The {{GPU}} timestamp counter frequency (in ticks/second).</p> </dd> + + + + + <p>This method samples the {{CPU}} and {{GPU}} timestamp counters at the same moment in time. </p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The value of the {{GPU}} timestamp counter.</p> </dd> + + + <dd> <p>The value of the {{CPU}} timestamp counter.</p> </dd> + + + + + <p> Gets the description of the command queue. </p> + <p> The description of the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + <p> Reports the number of physical adapters (nodes) that are associated with this device. </p> + <p> The number of physical adapters (nodes) that this device has. </p> + + + + <p>Creates a command queue.</p> + <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command queue can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandQueue}}) will get the <strong>{{GUID}}</strong> of the interface to a command queue. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command queue. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> Specifies a {{D3D12_COMMAND_QUEUE_DESC}} that describes the command queue. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the command queue interface. See remarks. An input parameter. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandQueue}}</strong> interface for the command queue. </p> </dd> + + + + + <p>Creates a command allocator object.</p> + <p> The device creates command lists from the command allocator. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command allocator. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>-typed value that specifies the type of command allocator to create. The type of command allocator can be the type that records either direct command lists or bundles. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command allocator interface (<strong>{{ID3D12CommandAllocator}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command allocator can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandAllocator}}) will get the <strong>{{GUID}}</strong> of the interface to a command allocator. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandAllocator}}</strong> interface for the command allocator. </p> </dd> + + + + + + + + <p>Creates a compute pipeline state object.</p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the pipeline state object. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure that describes compute pipeline state. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the pipeline state interface (<strong>{{ID3D12PipelineState}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the pipeline state can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12PipelineState}}) will get the <strong>{{GUID}}</strong> of the interface to a pipeline state. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12PipelineState}}</strong> interface for the pipeline state object. The pipeline state object is an immutable state object. It contains no methods. </p> </dd> + + + + + + + + <p> Gets information about the features that are supported by the current graphics driver.</p> + <p>Refer to Capability Querying.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns <strong>{{E_INVALIDARG}}</strong> if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter. </p> + + + <dd> <p> A <strong>{{D3D12_FEATURE}}</strong>-typed value that describes the feature to query for support. </p> </dd> + + + <dd> <p> The passed structure is filled with data that describes the feature support. To see the structure types, see the Remarks section in <strong>{{D3D12_FEATURE}} enumeration</strong>. </p> </dd> + + + <dd> <p> The size of the structure passed to the <em>pFeatureSupportData</em> parameter. </p> </dd> + + + + + + + + <p> Gets the size of the handle increment for the given type of descriptor heap. This value is typically used to increment a handle into a descriptor array by the correct amount.</p> + <p>The descriptor size returned by this method is used as one input to the helper structures <strong>{{CD3DX12_CPU_DESCRIPTOR_HANDLE}}</strong> and <strong>{{CD3DX12_GPU_DESCRIPTOR_HANDLE}}</strong>.</p> + <p> Returns the size of the handle increment for the given type of descriptor heap, including any necessary padding.</p> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to get the size of the handle increment for. </p> </dd> + + + + + + + + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the shader resource.</p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure that describes the shader-resource view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{SRVs}} target a full buffer and are typed (not raw or structured), and for textures {{SRVs}} target a full texture, all mips and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the shader-resource view. This handle can be created in a shader-visible or non-shader-visible descriptor heap.</p> </dd> + + + + + <p> Creates a view for unordered accessing. </p> + <p> Returns nothing. </p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the unordered access. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p> The <strong>{{ID3D12Resource}}</strong> for the counter (if any) associated with the {{UAV}}. </p> <p> If <em>pCounterResource</em> is not specified, the <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be 0. </p> <p> If <em>pCounterResource</em> is specified, then there is a counter associated with the {{UAV}}, and the runtime performs validation of the following requirements: </p> <ul> <li> The <strong>StructureByteStride</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be greater than 0. </li> <li> The format must be {{DXGI_FORMAT_UNKNOWN}}. </li> <li> The {{D3D12_BUFFER_UAV_FLAG_RAW}} flag (a <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong> enumeration constant) must not be set. </li> <li> Both of the resources (<em>pResource</em> and <em>pCounterResource</em>) must be buffers. </li> <li> The <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be a multiple of 4 bytes, and must be within the range of the counter resource. </li> <li><em>pResource</em> cannot be {{NULL}} </li> <li><em>pDesc</em> cannot be {{NULL}}. </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure that describes the unordered-access view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{UAVs}} target a full buffer and are typed, and for textures {{UAVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the unordered-access view. </p> </dd> + + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the render target. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure that describes the render-target view.</p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and {{RTVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the render-target view. </p> </dd> + + + + + + + + <p>Create a sampler object that encapsulates sampling information for a texture.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D12_SAMPLER_DESC}}</strong> structure that describes the sampler. </p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the sampler.</p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of destination descriptor ranges to copy to. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy to. </p> </dd> + + + <dd> <p> An array of destination descriptor range sizes to copy to. </p> </dd> + + + <dd> <p> The number of source descriptor ranges to copy from. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy from. </p> </dd> + + + <dd> <p> An array of source descriptor range sizes to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of descriptors to copy. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the destination descriptors to start to copy to. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the source descriptors to start to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Gets the size and alignment of memory required for a collection of resources on this adapter. </p> + <p> When using <strong>CreatePlacedResource</strong>, the application must use this method to understand the size and alignment characteristics of texture resources. The results of this method vary depending on the particular adapter, and must be treated as unique to this adapter and driver version. </p><p> Applications cannot use the output of <strong>GetResourceAllocationInfo</strong> to understand packed mip properties of textures. To understand packed mip properties of textures, applications must use <strong>GetResourceTiling</strong>. Texture resource sizes significantly differ from the information returned by <strong>GetResourceTiling</strong>, because some adapter architectures allocate extra memory for textures to reduce the effective bandwidth during common rendering scenarios. This even includes textures that have constraints on their texture layouts or have standardized texture layouts. That extra memory cannot be sparsely mapped or remapped by an application using <strong>CreateReservedResource</strong> and <strong>UpdateTileMappings</strong>, so it isn't reported in <strong>GetResourceTiling</strong>. </p><p> Applications can forgo using <strong>GetResourceAllocationInfo</strong> for buffer resources (<strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER). Buffers have the same size on all adapters, which is merely the smallest multiple of 64KB which is greater or equal to <strong>{{D3D12_RESOURCE_DESC}}</strong>::<strong>Width</strong>. </p><p> When multiple resource descriptions are passed in, the C++ algorithm for calculating a structure size and alignment are used. For example, a three-element array with two tiny 64KB-aligned resources and a tiny 4MB-aligned resource reports differing sizes based on the order of the array. If the 4MB aligned resource is in the middle, the resulting <strong>Size</strong> is 12MB. Otherwise, the resulting <strong>Size</strong> is 8MB. The <strong>Alignment</strong> returned would always be 4MB, as it is the superset of all alignments in the resource array. </p> + <p> Returns a <strong>{{D3D12_RESOURCE_ALLOCATION_INFO}}</strong> structure that provides info about video memory allocated for the specified array of resources. </p> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters). Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> The number of resource descriptors in the <em>pResourceDescs</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RESOURCE_DESC}}</strong> structures that described the resources to get info about. </p> </dd> + + + + + <p> Divulges the equivalent custom heap properties that are used for non-custom heap types, based on the adapter's architectural properties. </p> + <p> Returns a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the specified heap. The <strong>Type</strong> member of the returned {{D3D12_HEAP_PROPERTIES}} is always {{D3D12_HEAP_TYPE_CUSTOM}}. </p><p> When <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>::UMA is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L1}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{TRUE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p> + + + <dd> <p> For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter). Each bit in the mask corresponds to a single node. Only 1 bit must be set. See Multi-Adapter. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the heap to get properties for. {{D3D12_HEAP_TYPE_CUSTOM}} is not supported as a parameter value. </p> </dd> + + + + + <p> Creates both a resource and an implicit heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. </p> + <p> This method creates both a resource and a heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. The created heap is known as an implicit heap, because the heap object cannot be obtained by the application. The application must ensure the {{GPU}} will no longer read or write to this resource before releasing the final reference on the resource. </p><p> The implicit heap is made resident for {{GPU}} access before the method returns to the application. See Residency. </p><p> The resource {{GPU}} {{VA}} mapping cannot be changed. See <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong> and Volume Tiled Resources. </p><p> This method may be called by multiple threads concurrently. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. For other possible return values, see Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the resource's heap. </p> </dd> + + + <dd> <p> Heap options, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a <strong>{{D3D12_HEAP_TYPE}}</strong>_UPLOAD heap, <em>InitialResourceState</em> must be <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialResourceState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_RENDER_TARGET or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> <p> While riidResource is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to memory that receives the requested interface reference to the created resource object. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> is valid. </p> </dd> + + + + + <p> Creates a heap that can be used with placed resources and reserved resources. </p> + <p><strong>CreateHeap</strong> creates a heap that can be used with placed resources and reserved resources. Before releasing the final reference on the heap, the application must ensure that the {{GPU}} will no longer read or write to this heap. Placed resource objects will hold a reference on the heap they are created on, but reserved resources will not hold a reference for each mapping made to a heap. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the heap. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the heap interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the heap can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Heap}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a heap. <em>riid</em> is, most commonly, the {{GUID}} for <strong>{{ID3D12Heap}}</strong>, but it may be any {{GUID}} for any interface. If the resource object does not support the interface for the specified {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the heap. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p> Creates a resource that is placed in a specific heap. Placed resources are the lightest weight resource objects available, and are the fastest to create and destroy. </p> + <p><strong>CreatePlacedResource</strong> is similar to fully mapping a reserved resource to an offset within a heap; but the virtual address space associated with a heap may be reused as well. </p><p> Placed resources are lighter weight than committed resources to create and destroy, because no heap is created or destroyed during this operation. However, placed resources enable an even lighter weight technique to reuse memory than resource creation and destruction: reuse through aliasing and aliasing barriers. Multiple placed resources may simultaneously overlap each other on the same heap, but only a single overlapping resource can be used at a time. </p><p> There are two placed resource usage semantics, a simple model and an advanced model. The simple model is recommended, and is the most likely model for tool support, until the advanced model is proven to be required by the app. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Heap}}</strong> interface that represents the heap in which the resource is placed. </p> </dd> + + + <dd> <p> The offset, in bytes, to the resource. The <em>HeapOffset</em> must be a multiple of the resource's alignment, and <em>HeapOffset</em> plus the resource size must be smaller than or equal to the heap size. <strong>GetResourceAllocationInfo</strong> must be used to understand the sizes of texture resources. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a {{D3D12_HEAP_TYPE_UPLOAD}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_GENERIC_READ}}. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. </p> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. Although <strong>riid</strong> is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the resource. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> and other parameters are valid. </p> </dd> + + + + + + + + <p> Creates a shared handle to an heap, resource, or fence object. </p> + <p> Both heaps and committed resources can be shared. Sharing a committed resource shares the implicit heap along with the committed resource description, such that a compatible resource description can be mapped to the heap from another device. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following values: </p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid. </li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource. </li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li> Possibly other error codes that are described in the Direct3D 12 Return Codes topic. </li> </ul> + + + <dd> <p> A reference to the <strong>{{ID3D12DeviceChild}}</strong> interface that represents the heap, resource, or fence object to create for sharing. The following interfaces (derived from <strong>{{ID3D12DeviceChild}}</strong>) are supported: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + <dd> <p> A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a <strong>Boolean</strong> value that determines whether child processes can inherit the returned handle. </p> <p> Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor. </p> <p> The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights. </p> </dd> + + + <dd> <p>Currently the only value this parameter accepts is {{GENERIC_ALL}}.</p> </dd> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the shared heap. The name is limited to {{MAX_PATH}} characters. Name comparison is case-sensitive. </p> <p> If <em>Name</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace. </p> <p> The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users. </p> <p> The object can be created in a private namespace. For more information, see Object Namespaces. </p> </dd> + + + <dd> <p> A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource. </p> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using {{HANDLE}} and {{REFIID}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The handle that was output by the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12Heap}}) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using Name and Access. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The name that was optionally passed as the <em>Name</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The access level that was specified in the <em>Access</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the shared handle. </p> </dd> + + + + + <p>Makes objects resident for the device.</p> + <p><strong>MakeResident</strong> loads the data associated with a resource from disk, and re-allocates the memory from the resource's appropriate memory pool. This method should be called on the object which owns the physical memory. +</p><p>Use this method, and <strong>Evict</strong>, to manage {{GPU}} video memory, noting that this was done automatically in {{D3D11}}, but now has to be done by the app in {{D3D12}}.</p><p><strong>MakeResident</strong> and <strong>Evict</strong> can help applications manage the residency budget on many adapters. <strong>MakeResident</strong> explicitly pages-in data and, then, precludes page-out so the {{GPU}} can access the data. <strong>Evict</strong> enables page-out.</p><p>Some {{GPU}} architectures do not benefit from residency manipulation, due to the lack of sufficient {{GPU}} virtual address space. Use <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> and <strong>{{IDXGIAdapter3::QueryVideoMemoryInfo}}</strong> to recognize when the maximum {{GPU}} {{VA}} space per-process is too small or roughly the same size as the residency budget. For such architectures, the residency budget will always be constrained by the amount of {{GPU}} virtual address space. <strong>Evict</strong> will not free-up any residency budget on such systems. +</p><p>Applications must handle <strong>MakeResident</strong> failures, even if there appears to be enough residency budget available. Physical memory fragmentation and adapter architecture quirks can preclude the utilization of large contiguous ranges. Applications should free up more residency budget before trying again. +</p><p><strong>MakeResident</strong> is ref-counted, such that <strong>Evict</strong> must be called the same amount of times as <strong>MakeResident</strong> before <strong>Evict</strong> takes effect. Objects that support residency are made resident during creation, so a single <strong>Evict</strong> call will actually evict the object. </p><p>Applications must use fences to ensure the {{GPU}} doesn't use non-resident objects. <strong>MakeResident</strong> must return before the {{GPU}} executes a command list that references the object. <strong>Evict</strong> must be called after the {{GPU}} finishes executing a command list that references the object.</p><p>Evicted objects still consume the same {{GPU}} virtual address and same amount of {{GPU}} virtual address space. Therefore, resource descriptors and other {{GPU}} virtual address references are not invalidated after <strong>Evict</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to make resident for the device. </p> </dd> + + + <dd> <p>A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + <p>Enables the page-out of data, which precludes {{GPU}} access of that data.</p> + <p><strong>Evict</strong> persists the data associated with a resource to disk, and then removes the resource from the memory pool where it was located. This method should be called on the object which owns the physical memory: either a committed resource (which owns both virtual and physical memory assignments) or a heap - noting that reserved resources do not have physical memory, and placed resources are borrowing memory from a heap. +</p><p>Refer to the remarks for <strong>MakeResident</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to evict from the device. </p> </dd> + + + <dd> <p> A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + + + + <p>Gets the reason that the device was removed.</p> + <p>This method returns the reason that the device was removed.</p> + + + + <p> Gets a resource layout that can be copied. Helps the app fill-in <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> when suballocating space in upload heaps. </p> + <p> This routine assists the application in filling out <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structures, when suballocating space in upload heaps. The resulting structures are {{GPU}} adapter-agnostic, meaning that the values will not vary from one {{GPU}} adapter to the next. <strong>GetCopyableFootprints</strong> uses specified details about resource formats, texture layouts, and alignment requirements (from the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure) to fill out the subresource structures. Applications have access to all these details, so this method, or a variation of it, could be written as part of the app. </p> + <p> This method does not return a value. </p> + + + + <p> Creates a query heap. A query heap contains an array of queries. </p> + <p> Refer to Queries for more information. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the query heap in a <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies a {{REFIID}} that uniquely identifies the heap. </p> </dd> + + + <dd> <p> Specifies a reference to the heap, that will be returned on successful completion of the method. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p>A development-time aid for certain types of profiling and experimental prototyping.</p> + <p>This method is only useful during the development of applications. It enables developers to profile {{GPU}} usage of multiple algorithms without experiencing artifacts from dynamic frequency scaling.</p><p>Do not call this method in normal execution for a shipped application. This method only works while the machine is in developer mode. If developer mode is not enabled, then device removal will occur. Instead, call this method in response to an off-by-default, developer-facing switch. Calling it in response to command line parameters, config files, registry keys, and developer console commands are reasonable usage scenarios. </p><p>A stable power state typically fixes {{GPU}} clock rates at a slower setting that is significantly lower than that experienced by users under normal application load. This reduction in clock rate affects the entire system. Slow clock rates are required to ensure processors don?t exhaust power, current, and thermal limits. Normal usage scenarios commonly leverage a processors ability to dynamically over-clock. Any conclusions made by comparing two designs under a stable power state should be double-checked with supporting results from real usage scenarios.</p> + <p>This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>Specifies a {{BOOL}} that turns the stable power state on or off.</p> </dd> + + + + + <p> This method creates a command signature. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Describes the command signature to be created with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12RootSignature}}</strong> that the command signature applies to. </p> <p>The root signature is required if any of the commands in the signature will update bindings on the pipeline. If the only command present is a draw or dispatch, the root signature parameter can be set to {{NULL}}.</p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command signature interface (<strong>{{ID3D12CommandSignature}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command signature can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12CommandSignature}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a command signature. </p> </dd> + + + <dd> <p> Specifies a reference, that on successful completion of the method will point to the created command signature (<strong>{{ID3D12CommandSignature}}</strong>). </p> </dd> + + + + + <p> Gets info about how a tiled resource is broken into tiles. </p> + <p> To estimate the total resource size of textures needed when calculating heap sizes and calling <strong>CreatePlacedResource</strong>, use <strong>GetResourceAllocationInfo</strong> instead of <strong>GetResourceTiling</strong>. <strong>GetResourceTiling</strong> cannot be used for this. </p><p> For more information on tiled resources, refer to Volume Tiled Resources. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a tiled <strong>{{ID3D12Resource}}</strong> to get info about. </p> </dd> + + + <dd> <p> A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_PACKED_MIP_INFO}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of {{D3D12_TILE_SHAPE}} to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of {{D3D12_SUBRESOURCE_TILING}} to zeros, except the <em>StartTileIndexInOverallResource</em> member, which <strong>GetResourceTiling</strong> sets to {{D3D12_PACKED_TILE}} (0xffffffff). The {{D3D12_PACKED_TILE}} constant indicates that the whole <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p> Gets a locally unique identifier for the current device (adapter). </p> + <p> This method returns a unique identifier for the adapter that is specific to the adapter hardware. Applications can use this identifier to define robust mappings across various {{APIs}} (Direct3D 12, {{DXGI}}). </p><p> A locally unique identifier ({{LUID}}) is a 64-bit value that is guaranteed to be unique only on the system on which it was generated. The uniqueness of a locally unique identifier ({{LUID}}) is guaranteed only until the system is restarted. </p> + <p> The locally unique identifier for the adapter. </p> + + + + <p>Manages a pipeline library, in particular loading and retrieving individual {{PSOs}}.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + + + + <p>Adds the input {{PSO}} to an internal database with the corresponding name.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the name already exists, {{E_OUTOFMEMORY}} if unable to allocate storage in the library. +</p> + + + <dd> <p>Specifies a unique name for the library. Overwriting is not supported.</p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12PipelineState}}</strong> to add.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. </p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. The input desc is matched against the data in the current library database, and remembered in order to prevent duplication of {{PSO}} contents. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Returns the amount of memory required to serialize the current contents of the database. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns a {{SIZE_T}} object, containing the size required in bytes.</p> + + + + <p>Writes the contents of the library to the provided memory, to be provided back to the runtime at a later time. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the buffer provided isn?t big enough. +</p> + + + <dd> <p>Specifies a reference to the data. This memory must be readable and writeable up to the input size. This data can be saved and provided to <strong>CreatePipelineLibrary</strong> at a later time, including future instances of this or other processes. The data becomes invalidated if the runtime or driver is updated, and is not portable to other hardware or devices.</p> </dd> + + + <dd> <p>The size provided must be at least the size returned from <strong>GetSerializedSize</strong>. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter, and expands on the range of methods provided by <strong>{{ID3D12Device}}</strong>.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p> + + + + <p>Creates a cached pipeline library. By grouping {{PSOs}} that are expected to share data together into a library before serializing, there?s less overhead due to metadata, as well as opportunity to avoid redundant or duplicated data from being written to disk.</p> + <p>A pipeline library enables the following operations.</p><ul> <li>Adding Pipeline State Objects ({{PSOs}}) to an existing library object (refer to <strong>StorePipeline</strong>). </li> <li>Serializing a {{PSO}} library into a contiguous block of memory for disk storage (refer to <strong>Serialize</strong>).</li> <li>De-serializing a {{PSO}} library from persistent storage (this is handled by <strong>CreatePipelineLibrary</strong>).</li> <li>Retrieving individual {{PSOs}} from the library (refer to <strong>LoadComputePipeline</strong> and <strong>LoadGraphicsPipeline</strong>).</li> </ul><p>At no point in the lifecycle of a pipeline library is there duplication between {{PSOs}} with identical sub-components. +A recommended solution for managing the lifetime of the provided reference while only having to ref-count the returned interface is to leverage <strong>{{ID3D12Object::SetPrivateDataInterface}}</strong>, and use an object which implements <strong>{{IUnknown}}</strong>, and frees the memory when the ref-count reaches 0. +</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the blob is corrupted or unrecognized, {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} if the provided data came from an old driver or runtime, and {{D3D12_ERROR_ADAPTER_NOT_FOUND}} if the data came from different hardware.</p><p>If you pass nullptr for <em>ppPipelineLibrary</em> then the runtime will still perform the validation of the blob but avoid creating the actual library and returns {{S_FALSE}} if the library would have been created.</p><p>Also, the feature requires an updated driver, and attempting to use it on old drivers will return {{E_NOTIMPL}}.</p> + + + <dd> <p> If the input library blob is empty, the initial contents of the library is empty. If the input library blob is not empty, it is validated for integrity, parsed, and the reference is stored. The reference provided as input to this method must remain valid for the lifetime of the object returned. For efficiency reasons, the data is not copied. +</p> </dd> + + + <dd> <p>Specifies the length of <em>pLibraryBlob</em> in bytes.</p> </dd> + + + <dd> <p>Specifies a unique {{REFIID}} for the <strong>{{ID3D12PipelineLibrary}}</strong> object. +Typically set this and the following parameter with the macro <code>{{IID_PPV_ARGS}}(&amp;Library)</code>, where <em>Library</em> is the name of the object.</p> </dd> + + + <dd> <p>Returns a reference to the created library.</p> </dd> + + + + + <p>Specifies an event that should be fired when one or more of a collection of fences reach specific values.</p> + <p>To specify a single fence refer to the <strong>SetEventOnCompletion</strong> method.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the <strong>{{ID3D12Fence}}</strong> objects.</p> </dd> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the fence values required for the event is to be signaled.</p> </dd> + + + <dd> <p>Specifies the number of fences to be included.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_MULTIPLE_FENCE_WAIT_FLAGS}}</strong> that determines how to proceed.</p> </dd> + + + <dd> <p>A handle to the event object.</p> </dd> + + + + + <p> </p><p>This method sets residency priorities of a specified list of objects.</p> + <p>For more information, refer to Residency.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies the number of objects in the <em>ppObjects</em> and <em>pPriorities</em> arrays.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, containing references to <strong>{{ID3D12Pageable}}</strong> objects.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, of <strong>{{D3D12_RESIDENCY_PRIORITY}}</strong> values for the list of objects.</p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + <p> Deserializes a root signature so you can determine the layout definition (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). </p> + <p>This function has been superceded by <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong>.</p><p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12RootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12RootSignatureDeserializer::GetRootSignature}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). <strong>{{ID3D12RootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12RootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Serializes a root signature of any version that can be passed to <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p> + <p> If an application procedurally generates a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, it must pass a reference to this <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> in a call to <strong>{{D3D12SerializeVersionedRootSignature}}</strong> to make the serialized form. The application then passes the serialized form to which <em>ppBlob</em> points into <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p><p> If a shader has been authored with a root signature in it (when that capability is added), the compiled shader will contain a serialized root signature in it already. </p><p> The function signature {{PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function was released with the Windows 10 Anniversary Update (14393) and supersedes <strong>{{D3D12SerializeRootSignature}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Gets a debug interface. </p> + <p> The function signature {{PFN_D3D12_GET_DEBUG_INTERFACE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the debug interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the debug interface can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Debug}}</strong>) will get the <strong>{{GUID}}</strong> of the debug interface. </p> </dd> + + + <dd> <p> The debug interface, as a reference to reference to void. See <strong>{{ID3D12Debug}}</strong> and <strong>{{ID3D12DebugDevice}}</strong>. </p> </dd> + + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Specifies options for the amount of information to report about a live device object's lifetime. </p> + <p> This enumeration is used by <strong>{{ID3D12DebugDevice::ReportLiveDeviceObjects}}</strong>. </p> + + + <dd></dd> + + + <dd> <p>Obtain a summary about a live device object's lifetime. </p> </dd> + + + <dd> <p>Obtain detailed information about a live device object's lifetime. </p> </dd> + + + <dd> <p> Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the data type of the memory pointed to by the <em>pData</em> parameter of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + + <p>Flags for optional {{D3D12}} Debug Layer features.</p> + <p>This enum is used by <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + <dd> <p>The default. No optional Debug Layer features.</p> </dd> + + + <dd> <p>The Debug Layer is allowed to deliberately change functional behavior of an application in order to help identify potential errors. By default, the Debug Layer allows most invalid {{API}} usage to run the natural course.</p> </dd> + + + <dd> <p>Performs additional resource state validation of resources set in descriptors at the time <strong>{{ID3D12CommandQueue::ExecuteCommandLists}}</strong> is called. By design descriptors can be changed even after submitting command lists assuming proper synchronization. Conservative resource state tracking ignores this allowance and validates all resources used in descriptor tables when <strong>ExecuteCommandLists</strong> is called. The result may be false validation errors.</p> </dd> + + + <dd> <p>Disables validation of bundle commands by virtually injecting checks into the calling command list validation paths.</p> </dd> + + + <dd> <p>Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of shader patching used by {{GPU}}-Based Validation at either the device or command list level.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p> + + + <dd> <p>No shader patching is to be done. This will retain the original shader bytecode. Can lead to errors in some of the {{GPU}}-Based Validation state tracking as the unpatched shader may still change resource state (see Common state promotion) but the promotion will be untracked without patching the shader. This can improve performance but no validation will be performed and may also lead to misleading {{GPU}}-Based Validation errors. Use this mode very carefully. </p> </dd> + + + <dd> <p>Shaders can be patched with resource state tracking code but no validation. This may improve performance but no validation will be performed.</p> </dd> + + + <dd> <p>The default. Shaders are patched with validation code but erroneous instructions will still be executed. </p> </dd> + + + <dd> <p>Shaders are patched with validation code and erroneous instructions are skipped in execution. This can help avoid crashes or device removal.</p> </dd> + + + <dd> <p>Unused, simply the count of the number of modes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how {{GPU}}-Based Validation handles patched pipeline states during <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> and <strong>{{ID3D12Device::CreateComputePipelineState}}</strong>.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p><p>Generally speaking most application developers are likely to leave this parameter unchanged. However, if the overhead of deferring patched {{PSO}} creation is suspected to be too much of a performance problem, then developers should consider changing this setting.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Indicates the debug parameter type used by <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugCommandList1::GetDebugParameter}}</strong>.</p> + + + + <p> Specifies categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D12InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters. </p> + <p>This is part of the Information Queue feature, refer to the <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + + <p> Debug message severity levels for an information queue.</p> + <p> Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>AddApplicationMessage</strong> and <strong>AddMessage</strong>. </p> + + + <dd> <p> Indicates a corruption error. </p> </dd> + + + <dd> <p> Indicates an error. </p> </dd> + + + <dd> <p> Indicates a warning. </p> </dd> + + + <dd> <p> Indicates an information message. </p> </dd> + + + <dd> <p> Indicates a message other than corruption, error, warning or information. </p> </dd> + + + + + <p> Specifies debug message {{IDs}} for setting up an info-queue filter (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>); use these messages to allow or deny message categories to pass through the storage and retrieval filters. These {{IDs}} are used by methods such as <strong>{{ID3D12InfoQueue::GetMessage}}</strong> or <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. </p> + <p> This enum is used by <strong>AddMessage</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes settings used by {{GPU}}-Based Validation. </p> + <p>Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> to configure device-wide {{GPU}}-Based Validation settings. </p><p>Individual command lists can override the default shader patch mode using <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong>.</p> + + + <dd> <p>Specifies a {{UINT}} that limits the number of messages that can be stored in the {{GPU}}-Based Validation message log. The default value is 256. Since many identical errors can be produced in a single Draw/Dispatch call it may be useful to increase this number. Note this can become a memory burden if a large number of command lists are used as there is a committed message log per command list.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that {{GPU}}-Based Validation uses when injecting validation code into shaders, except when overridden by per-command-list {{GPU}}-Based Validation settings (see <strong>{{D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS}}</strong>). The default value is {{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION}}.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS}}</strong> that indicates how {{GPU}}-Based Validation handles patching pipeline states. The default value is {{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE}}.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes per-command-list settings used by {{GPU}}-Based Validation. </p> + <p> Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> to configure per-command-list {{GPU}}-Based Validation settings. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that overrides the default device-level shader patch mode (see <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong>). By default this value is initialized to the <em>DefaultShaderPatchMode</em> assigned to the device (see <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong>.</p> </dd> + + + + + <p> A debug message in the Information Queue.</p> + <p> This structure is returned from <strong>{{ID3D12InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D12InfoQueue}}</strong>). </p> + + + <dd> <p> The category of the message. See <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>. </p> </dd> + + + <dd> <p> The severity of the message. See <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>. </p> </dd> + + + <dd> <p> The {{ID}} of the message. See <strong>{{D3D12_MESSAGE_ID}}</strong>. </p> </dd> + + + <dd> <p> The message string. </p> </dd> + + + <dd> <p> The length of <em>pDescription</em>, in bytes. </p> </dd> + + + + + <p> Allow or deny certain types of messages to pass through a filter.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p>Number of message categories to allow or deny. </p> </dd> + + + <dd> <p> Array of message categories to allow or deny. Array must have at least <em>NumCategories</em> members (see <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>). </p> </dd> + + + <dd> <p> Number of message severity levels to allow or deny. </p> </dd> + + + <dd> <p> Array of message severity levels to allow or deny. Array must have at least <em>NumSeverities</em> members (see <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>). </p> </dd> + + + <dd> <p> Number of message {{IDs}} to allow or deny. </p> </dd> + + + <dd> <p> Array of message {{IDs}} to allow or deny. Array must have at least <em>NumIDs</em> members (see <strong>{{D3D12_MESSAGE_ID}}</strong>). </p> </dd> + + + + + <p> Debug message filter; contains a lists of message types to allow or deny.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p> Specifies types of messages that you want to allow. See <strong>{{D3D12_INFO_QUEUE_FILTER_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies types of messages that you want to deny. </p> </dd> + + + + + <p> A debug interface controls debug settings and validates pipeline state. It can only be used if the debug layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Enables the debug layer. </p> + <p>To enable the debug layers using this {{API}}, it must be called before the {{D3D12}} device is created. Calling this {{API}} after creating the {{D3D12}} device will cause the {{D3D12}} runtime to remove the device.</p> + <p> This method does not return a value. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds {{GPU}}-Based Validation and Dependent Command Queue Synchronization to the debug layer.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables the debug layer.</p> + <p>This method is identical to <strong>{{ID3D12Debug::EnableDebugLayer}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This method enables or disables {{GPU}}-Based Validation ({{GBV}}) before creating a device with the debug layer enabled. </p> + <p>{{GPU}}-Based Validation can only be enabled/disabled prior to creating a device. By default, {{GPU}}-Based Validation is disabled. To disable {{GPU}}-Based Validation after initially enabling it the device must be fully released and recreated. </p><p>For more information, see Using {{D3D12}} Debug Layer {{GPU}}-Based Validation.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable {{GPU}}-Based Validation, otherwise {{FALSE}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables dependent command queue synchronization when using a {{D3D12}} device with the debug layer enabled.</p> + <p>Dependent Command Queue Synchronization is a {{D3D12}} Debug Layer feature that gives the debug layer the ability to track resource states more accurately when enabled. Dependent Command Queue Synchronization is enabled by default. </p><p>When Dependent Command Queue Synchronization is enabled, the debug layer holds back actual submission of {{GPU}} work until all outstanding fence <strong>Wait</strong> conditions are met. This gives the debug layer the ability to make reasonable assumptions about {{GPU}} state (such as resource states) on the {{CPU}}-timeline when multiple command queues are potentially doing concurrent work.</p><p>With Dependent Command Queue Synchronization disabled, all resource states tracked by the debug layer are cleared each time <strong>{{ID3D12CommandQueue::Signal}}</strong> is called. This results in significantly less useful resource state validation.</p><p>Disabling Dependent Command Queue Synchronization may reduce some debug layer performance overhead when using multiple command queues. However, it is suggested to leave it enabled unless this overhead is problematic. Note that applications that use only a single command queue will see no performance changes with Dependent Command Queue Synchronization disabled.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable Dependent Command Queue Synchronization, otherwise {{FALSE}}.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies device-wide debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies the {{D3D12}} optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to get.</p> </dd> + + + <dd> <p>Debug parameter data to set.</p> </dd> + + + <dd> <p>Size in bytes of the data pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the amount of information to report on a device object's lifetime.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> </dd> + + + + + <p> This interface represents a graphics device for debugging. </p> + + + + <p> Set a bit field of flags that will turn debug features on and off. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> Feature-mask flags, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, that feature will be set to on; otherwise, the feature will be set to off. </p> </dd> + + + + + <p> Gets a bit field of flags that indicates which debug features are on or off. </p> + <p> Mask of feature-mask flags, as a bitwise {{OR}}'ed combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. </p> + + + + <p> Reports information about a device object's lifetime. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime. </p> </dd> + + + + + <p> Provides methods to monitor and debug a command queue. </p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method is very similar to <strong>{{ID3D12DebugCommandList::AssertResourceState}}</strong>, however there are methods on the command queue that work directly with resources that might need to be monitored (for example <strong>{{ID3D13CommandQueue::CopyTileMappings}}</strong>).</p> + <p> This method returns true if the resource or subresource is in the specified state, false otherwise. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p> The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p> Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This interface enables modification of additional command list debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Validates that the given state matches the state of the subresource, assuming the state of the given subresource is known during recording of a command list (e.g. the resource was transitioned earlier in the same command list recording). If the state is not yet known this method sets the known state for further validation later in the same command list recording.</p> + <p>Since execution of command lists occurs sometime after recording, the state of a resource often cannot be known during command list recording. <strong>AssertResourceState</strong> gives an application developer the ability to impose an assumed state on a resource or subresource at a fixed recording point in a command list.</p><p>Often the state of a resource or subresource can either be known due to a previous barrier or inferred-by-use (for example, was used in an earlier call to <strong>CopyBufferRegion</strong>) during command list recording. In such cases <strong>AssertResourceState</strong> can produce a debug message if the given state does not match the known or assumed state.</p><p>This {{API}} is for debug validation only and does not affect the actual runtime or {{GPU}} state of the resource.</p> + <p>This method returns <strong>true</strong> if the tracked state of the resource or subresource matches the specified state, <strong>false</strong> otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more <strong>{{D3D12_RESOURCE_STATES}}</strong> flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies optional Debug Layer settings of a command list.</p> + <p>Certain debug behaviors of {{D3D12}} Debug Layer can be modified by setting debug parameters. These can be used to toggle extra validation or expose experimental debug features.</p><p><strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> only impacts debug settings for the associated command list. For device-wide debug parameters see the <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> method.</p><p>Resetting a command list restores the debug parameters to the default values. This is because a command list reset is treated as equivalent to creating a new command list.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Pointer to debug parameter data to set. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Specifies the size in bytes of the debug parameter <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional Command List Debug Layer settings.</p> + <p> Returns {{S_OK}} if successful, otherwise {{E_INVALIDARG}}. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that determines which debug parameter data to copy to the memory pointed to by <em>pData</em>.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p> Provides methods to monitor and debug a command list.</p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method returns true if the resource or subresource is in the specified state, false otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p> Turns the debug features for a command list on or off.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. </p> </dd> + + + + + <p> Returns the debug feature flags that have been set on a command list. </p> + <p> A bit mask containing the set debug features. </p> + + + + <p> An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Set the maximum number of messages that can be added to the message queue. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Maximum number of messages that can be added to the message queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> </dd> + + + + + <p> Clear all messages from the message queue. </p> + <p> This method does not return a value. </p> + + + + <p> Get a message from the message queue. </p> + <p>This method does not remove any messages from the message queue. </p><p>This method gets messages from the message queue after an optional retrieval filter has been applied. </p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example: </p><code> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D12_MESSAGE}} * pMessage = ({{D3D12_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>GetNumStoredMessagesAllowedByRetrievalFilter</strong>). 0 is the message at the front of the message queue. </p> </dd> + + + <dd> <p> Returned message.</p> </dd> + + + <dd> <p>Size of <em>pMessage</em> in bytes. </p> </dd> + + + + + <p> Get the number of messages that were allowed to pass through a storage filter. </p> + <p> Number of messages allowed by a storage filter. </p> + + + + <p>Get the number of messages that were denied passage through a storage filter. </p> + <p> Number of messages denied by a storage filter. </p> + + + + <p> Get the number of messages currently stored in the message queue. </p> + <p> Number of messages currently stored in the message queue. </p> + + + + <p> Get the number of messages that are able to pass through a retrieval filter. </p> + <p>Number of messages allowed by a retrieval filter. </p> + + + + <p> Get the number of messages that were discarded due to the message count limit. </p> + <p>Get and set the message count limit with <strong>GetMessageCountLimit</strong> and <strong>SetMessageCountLimit</strong>, respectively. </p> + <p> Number of messages discarded. </p> + + + + <p> Get the maximum number of messages that can be added to the message queue. </p> + <p> Maximum number of messages that can be added to the queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> + + + + <p> Add storage filters to the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Array of storage filters.</p> </dd> + + + + + <p> Get the storage filter at the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Storage filter at the top of the storage-filter stack. </p> </dd> + + + <dd> <p> Size of the storage filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the storage filter will be output to this parameter. </p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty storage filter onto the storage-filter stack. </p> + <p>An empty storage filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a storage filter onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a storage filter.</p> </dd> + + + + + <p> Pop a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the storage-filter stack in bytes. </p> + <p> Size of the storage-filter stack in bytes. </p> + + + + <p> Add storage filters to the top of the retrieval-filter stack. </p> + <p>The following code example shows how to use this method: </p><code> {{D3D12_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D12_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D12_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D12_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D12_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); </code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Array of retrieval filters. </p> </dd> + + + + + <p> Get the retrieval filter at the top of the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Retrieval filter at the top of the retrieval-filter stack. </p> </dd> + + + <dd> <p> Size of the retrieval filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the retrieval filter will be output to this parameter. </p> </dd> + + + + + <p> Remove a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty retrieval filter onto the retrieval-filter stack. </p> + <p>An empty retrieval filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a retrieval filter onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a retrieval filter.</p> </dd> + + + + + <p> Pop a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the retrieval-filter stack in bytes. </p> + <p> Size of the retrieval-filter stack in bytes. </p> + + + + <p>Adds a debug message to the message queue and sends that message to debug output. </p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D12InfoQueue::AddApplicationMessage}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Category of a message. </p> </dd> + + + <dd> <p> Severity of a message. </p> </dd> + + + <dd> <p> Unique identifier of a message. </p> </dd> + + + <dd> <p> User-defined message. </p> </dd> + + + + + <p> Adds a user-defined message to the message queue and sends that message to debug output. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Severity of a message.</p> </dd> + + + <dd> <p> Specifies the message string. </p> </dd> + + + + + <p> Set a message category to break on when a message with that category passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A message severity level to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Get a message category to break on when a message with that category passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message severity level to break on.</p> </dd> + + + + + <p> Get a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + + + <p> Set a boolean that turns the debug output on or off. </p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Disable/Enable the debug output (true to disable or mute the output, false to enable the output). </p> </dd> + + + + + <p> Get a boolean that determines if debug output is on or off. </p> + <p> Whether the debug output is on or off (true for on, false for off). </p> + + + + <p>Options for the amount of information to report about a device object's lifetime.</p> + <p> This enumeration is used by <strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>. </p><p> Several inline functions exist to combine the options using operators, see the {{D3D11SDKLayers}}.h header file for details. </p> + + + <dd> <p> Specifies to obtain a summary about a device object's lifetime. </p> </dd> + + + <dd> <p> Specifies to obtain detailed information about a device object's lifetime. </p> </dd> + + + <dd> <p> Do not use this enumeration constant. It is for internal use only. </p> </dd> + + + + + <p>Indicates which resource types to track.</p> + <p>The <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> or <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> method tracks a specific type of resource.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No resource types are tracked.</p> </dd> + + + <dd> <p>Track device memory that is created with unordered access view ({{UAV}}) bind flags.</p> </dd> + + + <dd> <p>Track device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory.</p> </dd> + + + <dd> <p>Track all shaders that use group shared memory.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created with {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all memory on the device.</p> </dd> + + + + + <p>Options that specify how to perform shader debug tracking.</p> + <p> This enumeration is used by the following methods: </p><ul> <li> <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11RefTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> </li> </ul><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No debug tracking is performed.</p> </dd> + + + <dd> <p>Track the reading of uninitialized data.</p> </dd> + + + <dd> <p>Track read-after-write hazards.</p> </dd> + + + <dd> <p>Track write-after-read hazards.</p> </dd> + + + <dd> <p>Track write-after-write hazards.</p> </dd> + + + <dd> <p>Track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address.</p> </dd> + + + <dd> <p>Track read-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-read hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address across thread groups.</p> </dd> + + + <dd> <p>Track hazards that are specific to unordered access views ({{UAVs}}).</p> </dd> + + + <dd> <p>Track all hazards.</p> </dd> + + + <dd> <p>Track all hazards and track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p> All of the preceding tracking options are set except <strong>{{D3D11_SHADER_TRACKING_OPTION_IGNORE}}</strong>. </p> </dd> + + + + + <p>Categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D11InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D11InfoQueue::AddMessage}}</strong>. When creating an <strong>info queue filter</strong>, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.</p> + <p>This is part of the Information Queue feature. See <strong>{{ID3D11InfoQueue}} Interface</strong>.</p> + + + + <p>Debug message severity levels for an information queue.</p> + <p>Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + + + <dd> <p>Defines some type of corruption which has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + + + + <p>A debug message in the Information Queue.</p> + <p>This structure is returned from <strong>{{ID3D11InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D11InfoQueue}} Interface</strong>).</p> + + + <dd> <p>The category of the message. See <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>The severity of the message. See <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>.</p> </dd> + + + <dd> <p>The {{ID}} of the message. See <strong>{{D3D11_MESSAGE_ID}}</strong>.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of pDescription in bytes.</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by querying it from the <strong>{{ID3D11Device}}</strong> using <strong>{{IUnknown::QueryInterface}}</strong>. </p><p> For more information about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set a bit field of flags that will turn debug features on and off.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>Setting one of the following feature-mask flags will cause a rendering-operation method (listed below) to do some extra task when called. </p><table> <tr><td>{{D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP}} (0x2)</td><td>Application will wait for the {{GPU}} to finish processing the rendering operation before continuing.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP}} (0x1)</td><td>Runtime will additionally call <strong>{{ID3D11DeviceContext::Flush}}</strong>.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} (0x4)</td><td>Runtime will call <strong>{{IDXGISwapChain::Present}}</strong>. Presentation of render buffers will occur according to the settings established by prior calls to <strong>{{ID3D11Debug::SetSwapChain}}</strong> and <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</td></tr> </table><p>?</p><p>These feature-mask flags apply to the following rendering-operation methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::Draw}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexed}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawAuto}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopyResource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> </li> </ul><p>By setting one of the following feature-mask flags, you can control the behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods to aid in testing and debugging. </p><strong>Note</strong>??These flags are supported by the Direct3D 11.1 runtime, which is available starting with Windows?8.?<table> <tr><td>{{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}} (0x8)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is always discarded. Use this flag to test code paths that regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}}.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}} (0x10)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is never discarded. Use this flag to test code paths that do not need to regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}}.</td></tr> </table><p>?</p><p>The behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods depends on system-wide memory pressure. Therefore, the scenario where content is lost and must be regenerated is uncommon for most applications. The preceding new options in the Direct3D debug layer let you simulate that scenario consistently and test code paths.</p><p>The following flag is supported by the Direct3D 11.1 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} (0x40)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>When the debug layer is enabled, it performs certain actions to reveal application problems. By setting the {{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} feature-mask flag, you can enable the debug layer without getting the following default debugging behavior:</p><ul> <li>If an application calls <strong>{{ID3D11DeviceContext1::DiscardView}}</strong>, the runtime fills in the resource with a random color.</li> <li>If an application calls <strong>{{IDXGISwapChain1::Present1}}</strong> with partial presentation parameters, the runtime ignores the partial presentation information.</li> </ul><p>The following flag is supported by the Direct3D 11.2 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} (0x80)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>By default (that is, without {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} set), the debug layer validates the proper usage of all tile mappings for tiled resources for bound resources for every operation performed on the device context (for example, draw, copy, and so on). Depending on the size of the tiled resources used (if any), this validation can be processor intensive and slow. Apps might want to initially run with tiled resource tile mapping validation on; then, when they determine that the calling pattern is safe, they can disable the validation by setting {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}}.</p><p>If {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set when a tiled resource is created, the debug layer never performs the tracking of tile mapping for that resource for its entire lifetime. Alternatively, if {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set for any given device context method call (like draw or copy calls) involving tiled resources, the debug layer skips all tile mapping validation for the call.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. For descriptions of the feature-mask flags, see Remarks.</p> </dd> + + + + + <p>Get a bitfield of flags that indicates which debug features are on or off.</p> + <p>Mask of feature-mask flags bitwise {{ORed}} together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See <strong>{{ID3D11Debug::SetFeatureMask}}</strong> for a list of possible feature-mask flags.</p> + + + + <p>Set the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The application will only sleep if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is a set in the <strong>feature mask</strong>. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <p>Value is set with <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</p> + <p>Number of milliseconds to sleep after Present is called.</p> + + + + <p>Sets a swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The swap chain set by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <p>The swap chain retrieved by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Check to see if the draw pipeline state is valid.</p> + <p>Use validate prior to calling a draw method (for example, <strong>{{ID3D11DeviceContext::Draw}}</strong>); validation requires the debug layer.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong>, that represents a device context.</p> </dd> + + + + + <p>Report information about a device object's lifetime.</p> + <p><strong>ReportLiveDeviceObjects</strong> uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value from the <strong>{{D3D11_RLDO_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Verifies whether the dispatch pipeline state is valid.</p> + <p>Use this method before you call a dispatch method (for example, <strong>{{ID3D11DeviceContext::Dispatch}}</strong>). Validation requires the debug layer.</p> + <p>This method returns one of the return codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong> that represents a device context.</p> </dd> + + + + + <strong>Note</strong>?? The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <p>The tracing device interface sets shader tracking information, which enables accurate logging and playback of shader execution.</p> + <p>To get this interface, turn on the debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the reference rasterizer's default race-condition tracking options for the specified resource types.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on," otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets the reference rasterizer's race-condition tracking options for a specific shader.</p> + <strong>Note</strong>??After a call to <strong>SetShaderTrackingOptions</strong>, the tracking options that the <em>Options</em> parameter specifies are set for all calls by the shader that the <em>pShader</em> parameter specifies, until the next call to <strong>SetShaderTrackingOptions</strong>. If you set a flag that is specific to unordered access views ({{UAV}}) (for example, <strong>{{D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS}}</strong>) in the <em>Options</em> parameter for a compute shader, <strong>SetShaderTrackingOptions</strong> ignores it.?<strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.</p> + <p> To get this interface, turn on debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Maximum number of messages that can be added to the message queue. -1 means no limit.</p> </dd> + + + + + <p>Clear all messages from the message queue.</p> + <p>Returns nothing.</p> + + + + <p>Get a message from the message queue.</p> + <p>This method does not remove any messages from the message queue.</p><p>This method gets messages from the message queue after an optional retrieval filter has been applied.</p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D11_MESSAGE}} * pMessage = ({{D3D11_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</pre><p>For an overview see <strong>Information Queue Overview</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>{{ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter}}</strong>). 0 is the message at the front of the message queue.</p> </dd> + + + <dd> <p>Returned message (see <strong>{{D3D11_MESSAGE}}</strong>).</p> </dd> + + + <dd> <p>Size of pMessage in bytes, including the size of the message string that the pMessage points to.</p> </dd> + + + + + <p>Get the number of messages that were allowed to pass through a storage filter.</p> + <p>Number of messages allowed by a storage filter.</p> + + + + <p>Get the number of messages that were denied passage through a storage filter.</p> + <p>Number of messages denied by a storage filter.</p> + + + + <p>Get the number of messages currently stored in the message queue.</p> + <p>Number of messages currently stored in the message queue.</p> + + + + <p>Get the number of messages that are able to pass through a retrieval filter.</p> + <p>Number of messages allowed by a retrieval filter.</p> + + + + <p>Get the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{ID3D11InfoQueue::GetMessageCountLimit}}</strong> and <strong>{{ID3D11InfoQueue::SetMessageCountLimit}}</strong>, respectively.</p> + <p>Number of messages discarded.</p> + + + + <p>Get the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>Maximum number of messages that can be added to the queue. -1 means no limit.</p> + + + + <p>Add storage filters to the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of storage filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the storage filter at the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Storage filter at the top of the storage-filter stack.</p> </dd> + + + <dd> <p>Size of the storage filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the storage filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a storage filter onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a storage filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the storage-filter stack in bytes.</p> + <p>Size of the storage-filter stack in bytes.</p> + + + + <p>Add storage filters to the top of the retrieval-filter stack.</p> + <p>The following code example shows how to use <strong>{{ID3D11InfoQueue::AddRetrievalFilterEntries}}</strong>:</p><pre> {{D3D11_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D11_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D11_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D11_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D11_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of retrieval filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the retrieval filter at the top of the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Retrieval filter at the top of the retrieval-filter stack.</p> </dd> + + + <dd> <p>Size of the retrieval filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the retrieval filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a retrieval filter onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a retrieval filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the retrieval-filter stack in bytes.</p> + <p>Size of the retrieval-filter stack in bytes.</p> + + + + <p>Add a debug message to the message queue and send that message to debug output.</p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Category of a message (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Unique identifier of a message (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>User-defined message.</p> </dd> + + + + + <p>Add a user-defined message to the message queue and send that message to debug output.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Message string.</p> </dd> + + + + + <p>Set a message category to break on when a message with that category passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>, which represents a message severity level to break on.</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Get a message category to break on when a message with that category passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message severity level to break on (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + + + <p>Get a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Set a boolean that turns the debug output on or off.</p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.</p> + <p>Returns nothing.</p> + + + <dd> <p>Disable/Enable the debug output (<strong>{{TRUE}}</strong> to disable or mute the output, <strong>{{FALSE}}</strong> to enable the output).</p> </dd> + + + + + <p>Get a boolean that turns the debug output on or off.</p> + <p>Whether the debug output is on or off (true for on, false for off).</p> + + + + <p>Indicates the device state.</p> + <p>A state-block mask indicates the device states that a pass or a technique changes.</p> + + + <dd> <p>Boolean value indicating whether to save the vertex shader state. </p> </dd> + + + <dd> <p>Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of vertex-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the hull shader state. </p> </dd> + + + <dd> <p>Array of hull-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of hull-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of hull-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of hull-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the domain shader state. </p> </dd> + + + <dd> <p>Array of domain-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.</p> </dd> + + + <dd> <p>Array of domain-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of domain-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.</p> </dd> + + + <dd> <p>Array of domain-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the geometry shader state. </p> </dd> + + + <dd> <p>Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot. </p> </dd> + + + <dd> <p>Array of geometry-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader state.</p> </dd> + + + <dd> <p>Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of pixel-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader unordered access views.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader state.</p> </dd> + + + <dd> <p>Array of compute-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of compute-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of compute-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of compute-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader unordered access views.</p> </dd> + + + <dd> <p>Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the index buffer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the input layout state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the primitive topology state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the render targets states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the depth-stencil state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the blend state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the viewports states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the scissor rectangles states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the rasterizer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the stream-out buffers states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the predication state. </p> </dd> + + + + + <p>Describes an effect-variable type.</p> + <p>{{D3DX11_EFFECT_TYPE_DESC}} is used with <strong>{{ID3DX11EffectType::GetDesc}}</strong> </p> + + + <dd> <p>Name of the type, for example "float4" or "MyStruct".</p> </dd> + + + <dd> <p>The variable class (see <strong>{{D3D10_SHADER_VARIABLE_CLASS}}</strong>). </p> </dd> + + + <dd> <p>The variable type (see <strong>{{D3D10_SHADER_VARIABLE_TYPE}}</strong>).</p> </dd> + + + <dd> <p>Number of elements in this type (0 if not an array).</p> </dd> + + + <dd> <p>Number of members (0 if not a structure).</p> </dd> + + + <dd> <p>Number of rows in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of columns in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of bytes required to represent this data type, when tightly packed.</p> </dd> + + + <dd> <p>Number of bytes occupied by this data type, when laid out in a constant buffer.</p> </dd> + + + <dd> <p>Number of bytes to seek between elements, when laid out in a constant buffer.</p> </dd> + + + + + <p>Describes an effect variable.</p> + <p>{{D3DX11_EFFECT_VARIABLE_DESC}} is used with <strong>{{ID3DX11EffectVariable::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this variable, annotation, or structure member.</p> </dd> + + + <dd> <p>Semantic string of this variable or structure member ({{NULL}} for annotations or if not present).</p> </dd> + + + <dd> <p>Optional flags for effect variables.</p> </dd> + + + <dd> <p>Number of annotations on this variable (always 0 for annotations).</p> </dd> + + + <dd> <p>Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers).</p> </dd> + + + <dd> <p>Used if the variable has been explicitly bound using the register keyword. Check Flags for {{D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT}}.</p> </dd> + + + + + <p>Describes an effect shader.</p> + <p>{{D3DX11_EFFECT_SHADER_DESC}} is used with <strong>{{ID3DX11EffectShaderVariable::GetShaderDesc}}</strong>.</p> + + + <dd> <p>Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> is the shader is defined inline; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Shader bytecode.</p> </dd> + + + <dd> <p>The length of pBytecode. </p> </dd> + + + <dd> <p>Stream out declaration string (for geometry shader with {{SO}}).</p> </dd> + + + <dd> <p>Indicates which stream is rasterized. {{D3D11}} geometry shaders can output up to four streams of data, one of which can be rasterized.</p> </dd> + + + <dd> <p>Number of entries in the input signature.</p> </dd> + + + <dd> <p>Number of entries in the output signature.</p> </dd> + + + <dd> <p>Number of entries in the patch constant signature.</p> </dd> + + + + + <p>Describes an effect pass, which contains pipeline state.</p> + <p>{{D3DX11_PASS_DESC}} is used with <strong>{{ID3DX11EffectPass::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this pass (<strong>{{NULL}}</strong> if not anonymous).</p> </dd> + + + <dd> <p>Number of annotations on this pass.</p> </dd> + + + <dd> <p>Signature from the vertex shader or geometry shader (if there is no vertex shader) or <strong>{{NULL}}</strong> if neither exists.</p> </dd> + + + <dd> <p>Singature size in bytes.</p> </dd> + + + <dd> <p>The stencil-reference value used in the depth-stencil state.</p> </dd> + + + <dd> <p>The sample mask for the blend state.</p> </dd> + + + <dd> <p>The per-component blend factors ({{RGBA}}) for the blend state.</p> </dd> + + + + + <p>Describes an effect pass.</p> + <p>{{D3DX11_PASS_SHADER_DESC}} is used with <strong>{{ID3DX11EffectPass}}</strong> Get*ShaderDesc methods.</p><p>If this is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. It's name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, pShaderVariable != <strong>{{NULL}}</strong>, but pShaderVariable-&gt;IsValid() == <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The variable that this shader came from.</p> </dd> + + + <dd> <p>The element of pShaderVariable (if an array) or 0 if not applicable.</p> </dd> + + + + + <p>Describes an effect technique.</p> + <p>{{D3DX11_TECHNIQUE_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this technique ({{NULL}} if not anonymous).</p> </dd> + + + <dd> <p>Number of passes contained in the technique.</p> </dd> + + + <dd> <p>Number of annotations on this technique.</p> </dd> + + + + + <p>Describes an effect group.</p> + <p>{{D3DX11_GROUP_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this group (only <strong>{{NULL}}</strong> if global).</p> </dd> + + + <dd> <p>Number of techniques contained in group.</p> </dd> + + + <dd> <p>Number of annotations on this group.</p> </dd> + + + + + <p>Describes an effect.</p> + <p>{{D3DX11_EFFECT_DESC}} is used with <strong>{{ID3DX11Effect::GetDesc}}</strong>.</p> + + + <dd> <p>Number of constant buffers in this effect.</p> </dd> + + + <dd> <p>Number of global variables in this effect.</p> </dd> + + + <dd> <p>Number of global interfaces in this effect.</p> </dd> + + + <dd> <p>Number of techniques in this effect.</p> </dd> + + + <dd> <p>Number of groups in this effect.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Tests that the effect type is valid.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if it is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get an effect-type description.</p> + <p>The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-type description. See <strong>{{D3DX11_EFFECT_TYPE_DESC}}</strong>.</p> </dd> + + + + + <p>Get a member type by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an member type by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A member's name.</p> </dd> + + + + + <p>Get a member type by semantic.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A semantic.</p> </dd> + + + + + <p>Get the name of a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The name of the member.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectVariable}}</strong> interface is the base class for all effect variables.</p><p>The lifetime of an <strong>{{ID3DX11EffectVariable}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Compare the data type with the data stored.</p> + <p>This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get type information.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + + <p>Get a description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-variable description (see <strong>{{D3DX11_EFFECT_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The annotation name.</p> </dd> + + + + + <p>Get a structure member by index.</p> + <p>If the effect variable is an structure, use this method to look up a member by index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a structure member by name.</p> + <p>If the effect variable is an structure, use this method to look up a member by name.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a structure member by semantic.</p> + <p>If the effect variable is an structure, use this method to look up a member by attached semantic.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic.</p> </dd> + + + + + <p>Get an array element.</p> + <p>If the effect variable is an array, use this method to return one of the elements.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index; otherwise 0.</p> </dd> + + + + + <p>Get a constant buffer.</p> + <p>Effect variables are read-from or written-to a constant buffer.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a scalar variable.</p> + <p>AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a scalar variable. See <strong>{{ID3DX11EffectScalarVariable}}</strong>.</p> + + + + <p>Get a vector variable.</p> + <p>AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a vector variable. See <strong>{{ID3DX11EffectVectorVariable}}</strong>.</p> + + + + <p>Get a matrix variable.</p> + <p>AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a matrix variable. See <strong>{{ID3DX11EffectMatrixVariable}}</strong>.</p> + + + + <p>Get a string variable.</p> + <p>AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a string variable. See <strong>{{ID3DX11EffectStringVariable}}</strong>.</p> + + + + <p>Get a class-instance variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to class-instance variable. See <strong>{{ID3DX11EffectClassInstanceVariable}}</strong>.</p> + + + + <p>Get an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an interface variable. See <strong>{{ID3DX11EffectInterfaceVariable}}</strong>.</p> + + + + <p>Get a shader-resource variable.</p> + <p>AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader-resource variable. See <strong>{{ID3DX11EffectShaderResourceVariable}}</strong>.</p> + + + + <p>Get an unordered-access-view variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an unordered-access-view variable. See <strong>{{ID3DX11EffectUnorderedAccessViewVariable}}</strong>.</p> + + + + <p>Get a render-target-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a render-target-view variable. See <strong>{{ID3DX11EffectRenderTargetViewVariable}}</strong>.</p> + + + + <p>Get a depth-stencil-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil-view variable. See <strong>{{ID3DX11EffectDepthStencilViewVariable}}</strong>.</p> + + + + <p>Get a constant buffer.</p> + <p>AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a constant buffer. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a shader variable.</p> + <p>AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader variable. See <strong>{{ID3DX11EffectShaderVariable}}</strong>.</p> + + + + <p>Get a effect-blend variable.</p> + <p>AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an effect blend variable. See <strong>{{ID3DX11EffectBlendVariable}}</strong>.</p> + + + + <p>Get a depth-stencil variable.</p> + <p>AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil variable. See <strong>{{ID3DX11EffectDepthStencilVariable}}</strong>.</p> + + + + <p>Get a rasterizer variable.</p> + <p>AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a rasterizer variable. See <strong>{{ID3DX11EffectRasterizerVariable}}</strong>.</p> + + + + <p>Get a sampler variable.</p> + <p>AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a sampler variable. See <strong>{{ID3DX11EffectSamplerVariable}}</strong>.</p> + + + + <p>Set data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to set.</p> </dd> + + + + + <p>Get data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to get.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>A vector-variable interface accesses a four-component vector.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Set a floating-point matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in the matrix.</p> </dd> + + + + + <p>Get a matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in a matrix.</p> </dd> + + + + + <p>Set an array of floating-point matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first matrix.</p> </dd> + + + <dd> <p>The number of matrix elements to skip from the start of the array.</p> </dd> + + + <dd> <p>The number of elements to set.</p> </dd> + + + + + <p>Get an array of matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of the first matrix in an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix returned.</p> </dd> + + + <dd> <p>The number of matrices in the returned array.</p> </dd> + + + + + + + + + + + <p>Transpose and set a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a matrix.</p> </dd> + + + + + <p>Transpose and get a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a transposed matrix.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Transpose and get an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of an array of tranposed matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to get.</p> </dd> + + + <dd> <p>The number of matrices in the array to get.</p> </dd> + + + + + + + + + + + <p>A string-variable interface accesses a string variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get the string.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the string.</p> </dd> + + + + + <p>Get an array of strings.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first string in the array.</p> </dd> + + + <dd> <p>The offset (in number of strings) between the start of the array and the first string to get.</p> </dd> + + + <dd> <p>The number of strings in the returned array.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Accesses an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Sets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> interface.</p> </dd> + + + + + <p>Get a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> reference that will be set to the class instance.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Get a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Accesses an unordered access view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong>.</p> </dd> + + + + + <p>Get an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set on return.</p> </dd> + + + + + <p>Set an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{ID3D11UnorderedAccessView}}</strong> references.</p> </dd> + + + <dd> <p>Index of the first unordered-access-view.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Get an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set to the {{UAV}} array on return. </p> </dd> + + + <dd> <p>Index of the first interface.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Get a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Set an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to store the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>A depth-stencil-view-variable interface accesses a depth-stencil view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Get a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Set an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to set the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Set a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Reverts a previously set constant buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Set a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-resource-view interface for accessing a texture buffer.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface for accessing a texture buffer. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>A shader-variable interface accesses a shader variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to a shader description (see <strong>{{D3DX11_EFFECT_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11VertexShader}}</strong> reference that will be set to the vertex shader on return.</p> </dd> + + + + + <p>Get a geometry shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11GeometryShader}}</strong> reference that will be set to the geometry shader on return.</p> </dd> + + + + + <p>Get a pixel shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11PixelShader}}</strong> reference that will be set to the pixel shader on return.</p> </dd> + + + + + <p>Get a hull shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the shader.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11HullShader}}</strong> reference that will be set to the hull shader on return.</p> </dd> + + + + + <p>Get a domain shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the domain shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DomainShader}}</strong> reference that will be set to the domain shader on return.</p> </dd> + + + + + <p>Get a compute shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the compute shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11ComputeShader}}</strong> reference that will be set to the compute shader on return.</p> </dd> + + + + + <p>Get an input-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based shader-element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an output-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a patch constant signature description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index. </p> </dd> + + + <dd> <p>A zero-based element index. </p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>The blend-variable interface accesses blend state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a blend-state interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>).</p> </dd> + + + + + <p>Sets an effect's blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11BlendState}}</strong> interface containing the blend-state to set.</p> </dd> + + + + + <p>Reverts a previously set blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + + + <p>Get a reference to a blend-state variable.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-variable interface accesses depth-stencil state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a depth-stencil interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Sets the depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DepthStencilState}}</strong> interface containing the new depth stencil state.</p> </dd> + + + + + <p>Reverts a previously set depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + + + <p>Get a reference to a variable that contains depth-stencil state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a depth-stencil-state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a rasterizer interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a rasterizer interface (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Sets the rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11RasterizerState}}</strong> interface.</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains rasteriser state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a rasteriser-state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + + + <p>A sampler interface accesses sampler state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a sampler interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a sampler interface (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11SamplerState}}</strong> interface containing the sampler state.</p> </dd> + + + + + <p>Revert a previously set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a sampler description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectPass}}</strong> interface encapsulates state assignments within a technique.</p><p>The lifetime of an <strong>{{ID3DX11EffectPass}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique.</p><p>To get an effect-pass interface, call a method like <strong>{{ID3DX11EffectTechnique::GetPassByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a pass to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a pass description.</p> + <p>A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pass description (see <strong>{{D3DX11_PASS_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a vertex-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a geometry-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a geometry-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a pixel-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pixel-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get hull-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a hull-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a domain-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a domain-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a compute-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a compute-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Set the state contained in a pass to the device.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Unused.</p> </dd> + + + <dd> <p>The <strong>{{ID3D11DeviceContext}}</strong> to apply the pass to.</p> </dd> + + + + + <p>Generate a mask for allowing/preventing state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectTechnique}}</strong> interface is a collection of passes.</p><p>The lifetime of an <strong>{{ID3DX11EffectTechnique}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments.</p><p>To get an effect-technique interface, call a method such as <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a technique to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a technique description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a technique description (see <strong>{{D3DX11_TECHNIQUE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The zero-based index of the interface reference.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Name of the annotation.</p> </dd> + + + + + <p>Get a pass by index.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a pass by name.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>The name of the pass.</p> </dd> + + + + + <p>Compute a state-block mask to allow/prevent state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectGroup}}</strong> interface accesses an Effect group.</p><p>The lifetime of an <strong>{{ID3DX11EffectGroup}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>To get an <strong>{{ID3DX11EffectGroup}}</strong> interface, call a method like <strong>{{ID3DX11Effect::GetGroupByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Gets a group description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3DX11_GROUP_DESC}}</strong> structure.</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Pointer to an <strong>{{ID3DX11EffectVariable}}</strong> interface.</p> + + + <dd> <p>Index of the annotation.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Get a technique by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>, or <strong>{{NULL}}</strong> if the technique is not found.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>An <strong>{{ID3DX11Effect}}</strong> interface manages a set of state objects, resources, and shaders for implementing a rendering effect.</p> + <p>An effect is created by calling <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><p>The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.?<strong>Note</strong>??<p>If you call <strong>QueryInterface</strong> on an <strong>{{ID3DX11Effect}}</strong> object to retrieve the <strong>{{IUnknown}}</strong> interface, <strong>QueryInterface</strong> returns {{E_NOINTERFACE}}. To work around this issue, use the following code:</p> <pre> {{IUnknown}}* pIUnknown = ({{IUnknown}}*)pEffect; pIUnknown-&gt;AddRef(); +</pre>? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get the device that created the effect.</p> + <p>An effect is created for a specific device, by calling a function such as <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Device}}</strong>.</p> </dd> + + + + + <p>Get an effect description.</p> + <p>An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect description (see <strong>{{D3DX11_EFFECT_DESC}}</strong>).</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the constant buffer indicated by the Name. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a variable by index.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the index exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a variable by name.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> whether or not a variable is found. <strong>{{ID3DX11Effect::IsValid}}</strong> should be called to verify whether or not the name exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Returns an invalid variable if the specified name cannot be found.</p> + + + <dd> <p>The variable name.</p> </dd> + + + + + <p>Get a variable by semantic.</p> + <p>Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the semantic exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the effect variable indicated by the Semantic. See <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic name.</p> </dd> + + + + + <p>Gets an effect group by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Index of the effect group.</p> </dd> + + + + + <p>Gets an effect group by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Name of the effect group.</p> </dd> + + + + + <p>Get a technique by index.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. </p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>. If a technique with the appropriate name is not found an invalid technique is returned. <strong>{{ID3DX11EffectTechnique::IsValid}}</strong> should be called on the returned technique to determine whether it is valid.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>Gets a class linkage interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns a reference to an <strong>{{ID3D11ClassLinkage}}</strong> interface.</p> + + + + <p>Creates a copy of an effect interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Flags affecting the creation of the cloned effect. Can be 0 or one of the following values.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DX11_EFFECT_CLONE_FORCE_NONSINGLE}}</td><td>Ignore all "single" qualifiers on cbuffers. All cbuffers will have their own <strong>{{ID3D11Buffer}}</strong>s created in the cloned effect.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3DX11Effect}}</strong> reference that will be set to the copy of the effect.</p> </dd> + + + + + <p>Minimize the amount of memory required for an effect.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. {{API}} methods to read variables will no longer work once reflection data has been removed.</p><p>The following methods will fail after Optimize has been called on an effect.</p><ul> <li> <strong>{{ID3DX11Effect::GetConstantBufferByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetConstantBufferByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDesc}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDevice}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableBySemantic}}</strong> </li> </ul><strong>Note</strong>??References retrieved with these methods before calling <strong>{{ID3DX11Effect::Optimize}}</strong> are still valid after <strong>{{ID3DX11Effect::Optimize}}</strong> is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.?<strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Test an effect to see if the reflection metadata has been removed from memory.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. Of course, {{API}} methods to read variables will no longer work once reflection data has been removed.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the effect is optimized; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Creates an effect from a binary effect or file.</p> + <strong>Note</strong>??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The return value is one of the values listed in Direct3D 11 Return Codes.</p> + + + <dd> <p>Blob of compiled effect data.</p> </dd> + + + <dd> <p>Length of the data blob.</p> </dd> + + + <dd> <p>No effect flags exist. Set to zero.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{ID3D11Device}}</strong> on which to create Effect resources.</p> </dd> + + + <dd> <p>Address of the newly created <strong>{{ID3DX11Effect}}</strong> interface.</p> </dd> + + + + + <p> Defines results for animation updates.</p> + + + <dd> <p> No animation variables have changed.</p> </dd> + + + <dd> <p> One or more animation variables has changed.</p> </dd> + + + + + <p> Defines the activity status of an animation manager.</p> + + + <dd> <p> The animation manager is idle; no animations are currently playing.</p> </dd> + + + <dd> <p> The animation manager is busy; at least one animation is currently playing or scheduled.</p> </dd> + + + + + <p> Defines animation modes.</p> + + + <dd> <p> Animation is disabled.</p> </dd> + + + <dd> <p> The animation mode is managed by the system.</p> </dd> + + + <dd> <p> Animation is enabled.</p> </dd> + + + + + <p>Defines the pattern for a loop iteration.</p> + + + <dd> <p>The start of a loop begins with the first value (v1-&gt;v2, v1-&gt;v2, v1-&gt;v2, and so on).</p> </dd> + + + <dd> <p>The start of a loop alternates between values (v1-&gt;v2, v2-&gt;v1, v1-&gt;v2, and so on).</p> </dd> + + + + + <p> Defines the rounding modes to be used when the value of an animation variable is converted from a floating-point type to an integer type.</p> + + + <dd> <p> Round to the nearest integer.</p> </dd> + + + <dd> <p> Round down.</p> </dd> + + + <dd> <p> Round up.</p> </dd> + + + + + <p> Defines the status for a storyboard.</p> + <p>Unless <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, it returns only the following status values:</p><ul> <li>{{UI_ANIMATION_STORYBOARD_BUILDING}}</li> <li>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</li> <li>{{UI_ANIMATION_STORYBOARD_PLAYING}}</li> <li>{{UI_ANIMATION_STORYBOARD_READY}}</li> </ul><p>All status values can be passed to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p><p>The following diagram illustrates the transitions between these states.</p><p></p> + + + <dd> <p> The storyboard has never been scheduled.</p> </dd> + + + <dd> <p> The storyboard is scheduled to play.</p> </dd> + + + <dd> <p> The storyboard was canceled.</p> </dd> + + + <dd> <p> The storyboard is currently playing.</p> </dd> + + + <dd> <p> The storyboard was truncated.</p> </dd> + + + <dd> <p> The storyboard has finished playing.</p> </dd> + + + <dd> <p> The storyboard is built and ready for scheduling.</p> </dd> + + + <dd> <p> Scheduling the storyboard failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority.</p> </dd> + + + + + <p> Defines results for storyboard scheduling.</p> + <p> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> returns {{UI_ANIMATION_SCHEDULING_DEFERRED}} only if the application attempts to schedule a storyboard during a callback to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p> + + + <dd> <p> Scheduling failed for an unexpected reason.</p> </dd> + + + <dd> <p> Scheduling failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority. For more information, see <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>.</p> </dd> + + + <dd> <p> Scheduling failed because the storyboard is already scheduled.</p> </dd> + + + <dd> <p> Scheduling succeeded.</p> </dd> + + + <dd> <p> Scheduling is deferred and will be attempted when the current callback completes.</p> </dd> + + + + + <p> Defines potential effects on a storyboard if a priority comparison returns false.</p> + <p>This enumeration is used as the <em>priorityEffect</em> parameter of <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>, informing the client of the potential effect on the storyboard to be scheduled when the return value is false ({{S_FALSE}}). {{UI_ANIMATION_PRIORITY_EFFECT_FAILURE}} means that the attempt to schedule the storyboard might fail if the return value is false. {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}} means that the attempt to schedule the storyboard will succeed, but if the return value is false, the storyboard could play later than it would otherwise.</p><p> This enumeration can help an application decide how aggressive to be about reducing latency in the {{UI}}. For example, if the application returns true when the effect is {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}}, then other animations might get canceled or compressed even though doing so was not strictly necessary to play a new animation within the application-specified longest acceptable delay.</p> + + + <dd> <p> This storyboard might not be successfully scheduled.</p> </dd> + + + <dd> <p> The storyboard will be scheduled, but might start playing later.</p> </dd> + + + + + <p> Defines animation slope characteristics.</p> + + + <dd> <p> An increasing slope.</p> </dd> + + + <dd> <p> A decreasing slope.</p> </dd> + + + + + <p>Defines which aspects of an interpolator depend on a given input.</p> + <p>Multiple <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> values can be combined using a bitwise-{{OR}} operation.</p> + + + <dd> <p>No aspect depends on the input.</p> </dd> + + + <dd> <p>The intermediate values depend on the input.</p> </dd> + + + <dd> <p>The final value depends on the input.</p> </dd> + + + <dd> <p>The final velocity depends on the input.</p> </dd> + + + <dd> <p>The duration depends on the input.</p> </dd> + + + + + <p> Defines the behavior of a timer when the animation manager is idle.</p> + + + <dd> <p> The timer continues to generate timer events (is enabled) when the animation manager is idle.</p> </dd> + + + <dd> <p> The timer is suspended (disabled) when the animation manager is idle. </p> </dd> + + + + + <p> Defines activity status for a timer's client.</p> + + + <dd> <p> The client is idle.</p> </dd> + + + <dd> <p> The client is busy.</p> </dd> + + + + + + + + <p> Defines the animation manager, which provides a central interface for creating and managing animations.</p> + <p><strong>{{IUIAnimationManager}}</strong> defines a central control object for animations. A single instance of <strong>{{IUIAnimationManager}}</strong> is typically used to compose, schedule, and manage all animations for a client application.</p><p> <strong>{{IUIAnimationVariable}}</strong>, <strong>{{IUIAnimationTransition}}</strong>, and <strong>{{IUIAnimationStoryboard}}</strong> are the primary components for building animations. Use <strong>{{IUIAnimationManager}}</strong> to create and manage these components.</p> + + + + <p> Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the new animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p> Creates a new storyboard.</p> + <p>Storyboards can specify complex coordinated updates to many animation variables. These updates happen in sequence or in parallel, and they are guaranteed to remain synchronized within the storyboard. A storyboard is created, populated with transitions on animation variables, and then scheduled. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling <strong>FinishAllStoryboards</strong> ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changing statuses of storyboards as necessary and updating any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>This method is used to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks section for more information.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it has not started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable once the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when the scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the reminder of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable.</p> </dd> + + + + + <p> Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>The result can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable.</p> </dd> + + + + + <p> Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable as an integer.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the final value of the animation variable as an integer. This is the value after all currently scheduled animations have completed.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the previous value of the animation variable as an integer. This is the value of the animation variable before the most recent update.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the storyboard that is currently animating the animation variable.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The current storyboard, or <strong>{{NULL}}</strong> if no storyboard is currently animating the animation variable.</p> </dd> + + + + + <p> Sets the lower bound (floor) for the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The lower bound for the animation variable.</p> </dd> + + + + + <p> Sets an upper bound (ceiling) for the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The upper bound for the animation variable.</p> </dd> + + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Sets the tag for an animation variable.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for an animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The animation variable's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Specifies a variable change handler. This handler is notified of changes to the value of the animation variable.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableChangeHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Specifies an integer variable change handler. This handler is notified of changes to the integer value of the animation variable.</p> + <p>Passing {{NULL}} for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Winodws Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> An integer variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableIntegerChangeHandler}}</strong> interface or be {{NULL}}. See Remarks.</p> </dd> + + + + + <p> Defines a storyboard, which contains a group of transitions that are synchronized relative to one another.</p> + <p><strong>{{IUIAnimationStoryboard}}</strong> is a primary component for building animations, along with <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationTransition}}</strong>. </p> + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong> Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p> Creates a loop between two specified keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_END_KEYFRAME_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>It might not be possible to determine the end keyframe time when the start keyframe is reached.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_LOOPS_OVERLAP}}</strong></dt> </dl> </td><td> <p>Two repeated portions of a storyboard might overlap.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p> The keyframe at which the loop is to end. It must not be posssible for <em>endKeyframe</em> to occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p> The number of times the loop is to be repeated; this parameter must be 0 or a positive number. Use <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) to repeat the loop indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to attempt to add itself to the schedule of playing storyboards. The rules are as follows:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard begins playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of a keyframe loop iteration, the loop is terminated and the loop value is set to the starting loop value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler to be called whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Defines a transition, which determines how an animation variable changes over time.</p> + <p><strong>{{IUIAnimationTransition}}</strong> is one of the primary interfaces used to add animation to an application, along with the <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationStoryboard}}</strong> interfaces.</p><p> <strong>{{UIAnimationTransitionLibrary}}</strong> implements a library of standard transitions.</p> + + + + <p> Sets the initial value for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p> Sets the initial velocity for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Determines whether a transition's duration is currently known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p> Returns {{S_OK}} if the duration is known, {{S_FALSE}} if the duration is not known, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in schedule.</p> </td></tr> </table><p>?</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> method before calling this method. This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The requested value for the duration cannot be determined.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling status updates to an animation manager.</p> + + + + <p> Handles status changes to an animation manager.</p> + <p>A call made in this callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Defines a method for handling events related to animation variable updates.</p> + <p> <strong> OnValueChanged</strong> receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong>.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> method.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling animation variable update events.</p> + <p> <strong> OnIntegerValueChanged</strong> receives animation variable value updates as <strong>{{INT32}}</strong> values. To receive value updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + <p>The rounding mode for an animation variable is specified using the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines methods for handling status and update events for a storyboard.</p> + + + + <p> Handles events that occur when a storyboard's status changes.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::SetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard whose status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Handles events that occur when a storyboard is updated.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p> Defines a method for priority comparison that the animation manager uses to resolve scheduling conflicts.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p> + + + + <p> Determines whether a new storyboard has priority over a scheduled storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified in <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates an instantaneous transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The figure below shows the effect on an animation variable over time during an instantaneous transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The figure below shows the effect on an animation variable over time during a constant-duration transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The figure below shows the effect on an animation variable over time during a discrete transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear-speed transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal-velocity transition, with an amplitude determined by the initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-velocity transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave in seconds.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range transition, with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave, in seconds.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise with the deceleration ratio. If the initial velocity is nonzero, it is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The figures below show the effect on animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the above figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of the time spent accelerating to the duration.</p> </dd> + + + <dd> <p> The ratio of the time spent decelerating to the duration.</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The figure below shows such a reversal transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to a specified final value over the duration of the transition, ending at a specified velocity.</p><p>The figure below shows the effect on an animation variable over time during a cubic transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The figure below shows the effect on an animation variable over time during a parabolic-acceleration transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Defines methods for creating a custom interpolator.</p> + <p>Client applications can use the transitions provided in <strong>{{IUIAnimationTransitionLibrary}}</strong> or in a library provided by a third party; however, if you need custom behavior, you can create your own transitions by implementing the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements <strong>{{IUIAnimationTransition}}</strong> by calling the <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong> method and passing in the custom interpolator. After the interpolator is wrapped, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> interface.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return <strong>{{IUIAnimationTransition}}</strong> interfaces.</p> + + + + <p>Sets the initial value and velocity at the start of the transition.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator}}</strong> at different offsets. However, it can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + + + <p> Sets the duration of the transition.</p> + <p>Windows Animation calls this method only after calling the <strong>GetDependencies</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency will have a duration parameter in its associated creation method of <strong>{{IUIAnimationTransitionFactory}}</strong>. The interpolator should store its duration when first initialized and overwrite it when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + + + <p> Interpolates the value of an animation variable at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + + + <p> Interpolates the velocity, or rate of change, at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p> The interpolated velocity.</p> </dd> + + + + + <p> Gets the aspects of the interpolator that depend on the initial value or velocity passed to <strong>SetInitialValueAndVelocity</strong>, or that depend on the duration passed to <strong>SetDuration</strong>.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator (1) that accepts a final value as a parameter, (2) that always comes to a gradual stop at that final value, and (3) whose duration is determined by the difference between the final and initial values. The interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for <em>initialValueDependencies</em>. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> because this is set when the interpolator is created and is not affected by the initial value. Likewise it should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong> because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter what velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong> because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for creating transitions from custom interpolators.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that it can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong>.</p> + + + + <p> Creates a transition from a custom interpolator.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p> </dd> + + + <dd> <p> The new transition.</p> </dd> + + + + + <p> Defines an animation timer, which provides services for managing animation timing.</p> + <p>A timer helps to manage animation rendering by automatically indicating the passage of a small unit of time, called a tick. In turn, ticks can trigger animation rendering or other animation events. Each animation timer provides timing for a single animation manager.</p><p>The timing system is designed to provide the necessary timing services needed to support animations and does not require applications to play an explicit role in generating the ticks. The animation timer can be set up to automatically update the animation manager for each tick without application-side handling.</p><p>An application may not need to use a timer with Windows Animation, depending on the graphics platform it is using. For example, an application drawing with Direct2D or Direct3D can synchronize to monitor's refresh rate, yielding very smooth animation. However, such applications may still find the <strong>{{IUIAnimationTimer}}</strong> interface useful for its <strong>GetTime</strong> method, which returns an accurate system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + + + + <p> Specifies a timer update handler.</p> + <p> The timer update handler receives time updates (ticks) from the timer. The timer indicates an update by calling the <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> method on the specified handler.</p><p>Passing <strong>{{NULL}}</strong> for the <em>updateHandler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. If the update handler is already connected to a timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer update handler, or <strong>{{NULL}}</strong> (see Remarks). The specified object must implement the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> interface.</p> </dd> + + + <dd> <p> A member of <strong>{{UI_ANIMATION_IDLE_BEHAVIOR}}</strong> that specifies the behavior of the timer when it is idle.</p> </dd> + + + + + <p> Specifies a timer event handler.</p> + <p> Timing events include the <strong>OnPreUpdate</strong>, <strong>OnPostUpdate</strong>, and <strong>OnRenderingTooSlow</strong> methods of the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface.</p><p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer event handler. The specified object must implement the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Enables the animation timer.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Disables the animation timer.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Determines whether the timer is currently enabled.</p> + <p> Returns {{S_OK}} if the animation timer is enabled, {{S_FALSE}} if the animation timer is disabled, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the current time.</p> + <p> This method can be used in both the application-driven and timer-driven configurations to retrieve the system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See Windows Animation Error Codes for a list of error codes.</p> + + + <dd> <p> The current time, in <strong>{{UI_ANIMATION_SECONDS}}</strong>.</p> </dd> + + + + + <p> Sets the frame rate below which the timer notifies the application that rendering is too slow.</p> + <p> If the rendering frame rate for an animation falls below the specified frame rate, an <strong>{{IUIAnimationTimerEventHandler::OnRenderingTooSlow}}</strong> event is raised.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The minimum desirable frame rate, in frames per second.</p> </dd> + + + + + <p> Defines methods for handling timing update events.</p> + <p>The <strong>{{UIAnimationManager}}</strong> object implements this interface, so a client application can query the <strong>{{UIAnimationManager}}</strong> object for this interface and then pass the interface to <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>. It is not necessary to disconnect the <strong>{{UIAnimationManager}}</strong> and <strong>{{UIAnimationTimer}}</strong> objects; releasing them both is sufficient to clean up.</p> + + + + <p> Handles update events from the timer.</p> + <p>This method is used by the <strong>{{UIAnimationTimer}}</strong> object to update the state of the <strong>{{UIAnimationManager}}</strong> object. The <strong>{{UIAnimationTimer}}</strong> object calls <strong>{{UIAnimationTimerEventHandler::OnPostUpdate}}</strong> only when calls to this method return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current timer time, in seconds.</p> </dd> + + + <dd> <p> Receives a member of the <strong>{{UI_ANIMATION_UPDATE_RESULT}}</strong> enumeration, indicating whether any animation variables changed as a result of the update.</p> </dd> + + + + + <p> Specifies a handler for timer client status change events.</p> + <p>If the update handler is already connected to the timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}.</strong></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A handler for timer client events. The specified object must implement <strong>{{IUIAnimationTimerUpdateHandler}}</strong>. </p> </dd> + + + + + <p> Clears the handler for timer client status change events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling events related to changes in timer client status.</p> + + + + <p> Handles events that occur when the status of the timer's client changes.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new status of the timer's client.</p> </dd> + + + <dd> <p> The previous status of the timer's client.</p> </dd> + + + + + <p> Defines methods for handling timing events.</p> + <p> Use <strong> SetTimerEventHandler</strong> to specify the timing events handler for an instance of <strong>{{IUIAnimationTimer}}</strong>. </p> + + + + <p> Handles events that occur before an animation update begins.</p> + <p>For each tick, a timer calls the following sequence of methods:</p><ul> <li><strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong></li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong> </li> </ul><p><strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong> method. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur after an animation update is finished.</p> + <p>The <strong>{{UIAnimationTimer}}</strong> object calls this method only when calls to <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p><p>For each tick, a timer calls the following sequence of methods:</p><ul> <li> <strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li><strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong></li> </ul><p> <strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong>. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur when the rendering frame rate for an animation falls below a minimum desirable frame rate. </p> + <p> The minimum desirable frame rate is specified using the <strong>{{IUIAnimationTimer::SetFrameRateThreshold}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current frame rate, in frames per second.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p>Creates a new animation variable for each specified dimension.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create three animation variables for the X, Y, and Z coordinates of an object that can move freely within a a three-dimensional space.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) of initial values for the animation variable.</p> </dd> + + + <dd> <p>The number of dimensions that require animated values. This parameter specifies the number of values listed in <em>initialValue</em>.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p>Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p>Creates a new storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling the <strong>FinishAllStoryboards</strong> method ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed.</p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. </p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changes the status of all storyboards as necessary, and updates any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status of the animation manager.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>Use this method to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it hasn't started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable after the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info. </p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the rest of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager2::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or on any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines an animation variable, which represents a visual element that can be animated in multiple dimensions.</p> + + + + <p>Gets the number of dimensions that the animation variable is to be animated in.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the animation curve of the animation variable.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + + + <p>Gets the animation curve of the animation variable for the specified dimension.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + <dd> <p>The number of animation curves. +</p> </dd> + + + + + <p>Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + + + <p>Gets the final value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + + + <p>Gets the previous value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the integer value of the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the integer value of the animation variable for the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the final integer value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the final integer value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable in the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the active storyboard for the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The active storyboard, or {{NULL}} if the animation variable is not being animated.</p> </dd> + + + + + <p>Sets the lower bound (floor) for the value of the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The lower bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the lower bound (floor) value of each specified dimension for the animation variable. The value of each animation variable should not fall below its lower bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the lower bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require lower bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) for the value of the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The upper bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) value of each specified dimension for the animation variable. The value of each animation variable should not rise above its upper bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the upper bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require upper bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the rounding mode of the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The rounding mode.</p> </dd> + + + + + <p>Sets the tag of the animation variable. </p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>), and it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>The identifier portion of the tag. </p> </dd> + + + + + <p> Gets the tag of the animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional, so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p>Specifies a handler for changes to the value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The handler for changes to the value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the integer value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>Shutdown</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the integer value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the animation curve of the animation variable. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the animation curve of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationTransition}}</strong> interface that defines a transition. An <strong>{{IUIAnimationTransition2}}</strong> transition determines how an animation variable changes over time in a given dimension.</p> + + + + <p>Gets the number of dimensions in which the animation variable has a transition specified.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value of the transition.</p> + <p>Do not call this method after the transition has been added to a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p>Sets the initial value of the transition for each specified dimension in the animation variable.</p> + <p>The animation manager should not call this method after the transition has been added to a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial values for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition values. This parameter specifies the number of values listed in <em>value</em>.</p> </dd> + + + + + <p>Sets the initial velocity of the transition.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Sets the initial velocity of the transition for each specified dimension in the animation variable.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial velocities for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition velocities. This parameter specifies the number of values listed in <em>velocity</em>.</p> </dd> + + + + + <p>Determines whether the duration of a transition is known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>IsDurationKnown</strong> method before calling this method. </p><p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling updates to an <strong>animation manager</strong>.</p> + + + + <p> Handles status changes to an <strong>animation manager</strong>.</p> + <p>Calls made to other Windows Animation methods from <strong>{{IUIAnimationManager2::OnManagerStatusChanged}}</strong> fail and return <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + <p> The <strong> OnValueChanged</strong> method receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use the <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p> + + + + + + + <p> Handles events that occur when the value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>{{IUIAnimationVariableChangeHandler2::OnValueChanged}}</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable2::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new value of the animation variable.</p> </dd> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension in which the value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableIntegerChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + + + + <p> Handles events that occur when the integer value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>OnValueChanged</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, and 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>GetValue</strong> </li> <li> <strong>GetFinalValue</strong> </li> <li> <strong>GetPreviousValue</strong> </li> <li> <strong>GetIntegerValue</strong> </li> <li> <strong>GetFinalIntegerValue</strong> </li> <li> <strong>GetPreviousIntegerValue</strong> </li> <li> <strong>GetCurrentStoryboard</strong> </li> <li> <strong>GetVariableFromTag</strong> </li> <li> <strong>GetStoryboardFromTag</strong> </li> <li> <strong>GetTag</strong> </li> <li> <strong>GetTag</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The previous integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The dimension in which the integer value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation curve update events. </p> + + + + <p> Handles events that occur when the animation curve of an animation variable changes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The animation variable for which the animation curve has been updated.</p> </dd> + + + + + <p>Defines methods for handling storyboard events. </p> + + + + <p> Handles storyboard status change events.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager2::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::SetTag}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard for which the status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p>Handles storyboard update events.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager2::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p>Defines a method for handling storyboard loop iteration events.</p> + + + + <p>Handles loop iteration change events, which occur when a loop within a storyboard begins a new iteration.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard to which the loop belongs.</p> </dd> + + + <dd> <p>The loop {{ID}}.</p> </dd> + + + <dd> <p>The iteration count for the latest <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + <dd> <p>The iteration count for the previous <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + + + <p>Defines a method that resolves scheduling conflicts through priority comparison.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p> + + + + <p>Determines the relative priority between a scheduled storyboard and a new storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded, or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> </ul> + <p>Returns the following if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified by <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p>Defines a library of standard transitions for a specified dimension.</p> + <p>Windows Animation includes a library of common transitions that developers can apply to variables through a storyboard. The parameters for specifying a transition depend on the type of transition. For some transitions, the duration of the transition is an explicit parameter; for others, the duration is determined by other parameters, such as speed or acceleration when the transition begins. A transition's initial value or velocity can be overridden if a discontinuous jump is desired, and duration can be queried after the transition is added to a storyboard.</p><p>If an application requires an effect that cannot be specified using the transition library, developers can implement custom transitions. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from interpolators. An interpolator must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by the <strong>{{UIAnimationTransitionFactory2}}</strong> object.</p> + + + + <p> Creates an instantaneous scalar transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates an instantaneous vector transition for each specified dimension.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant scalar transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The following figure shows the change in value for an animation variable over time during a constant-duration transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete scalar transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a discrete vector transition for each specified dimension.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear scalar transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear vector transition in the specified dimension.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed scalar transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a linear-speed vector transition in the specified dimension.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal scalar transition where amplitude is determined by initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-velocity transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range scalar transition with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate scalar transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise for the deceleration ratio. If the value of initial velocity is nonzero, the value is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The following figures show the change in value for animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent accelerating (0 to 1).</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent decelerating (0 to 1).</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal scalar transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The folllowing figure shows such a reversal transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic scalar transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a cubic vector transition for each specified dimension.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final velocities (in units per second) of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em> and <em>finalVelocity</em>.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop scalar transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches the final value with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The following figure shows the change in value over time of an animation variable during a smooth-stop transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration scalar transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value, ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The following figure shows the change in value over time of an animation variable during a parabolic-acceleration transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity, in units/second, at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration, in units/second?, during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear scalar transition.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time for an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear vector transition for each specified dimension.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time of an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p>Defines a method that allows a custom interpolator to provide transition information, in the form of a cubic polynomial curve, to the animation manager.</p> + + + + <p>Adds a cubic polynomial segment that describes the shape of a transition curve to the animation function. </p> + <p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The cubic polynomial constant coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial linear coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial quadratic coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial cubic coefficient.</p> </dd> + + + + + <p>Adds a sinusoidal segment that describes the shape of a transition curve to the animation function. </p> + <p>Defined by the function Y(t) = bias + amplitude*sin(360*frequency*t + phase), where 'sin' is the sin of an angle specified in degrees (for example, sin(n + 360) == sin(n) for any real number 'n').</p><p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The bias constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The amplitude constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The frequency constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The phase constant in the sinusoidal function.</p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationInterpolator}}</strong> interface that defines methods for creating a custom interpolator. <strong>{{IUIAnimationInterpolator2}}</strong> supports interpolation in a given dimension. </p> + <p>Client applications can use the transitions provided in the <strong>{{IUIAnimationTransitionLibrary}}</strong> or<strong>{{IUIAnimationTransitionLibrary2}}</strong> interfaces, or in a library provided by a third party; however, custom transitions can be created by implementing the <strong>{{IUIAnimationInterpolator}}</strong> or <strong>{{IUIAnimationInterpolator2}}</strong> interfaces.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements the <strong>{{IUIAnimationTransition}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong>) or the <strong>{{IUIAnimationTransition2}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory2::CreateTransition}}</strong>) and passing in the custom interpolator. After the interpolator wrapper has been created, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> or <strong>{{IUIAnimationTransition2}}</strong> interfaces.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return an <strong>{{IUIAnimationTransition}}</strong> interface or an <strong>{{IUIAnimationTransition2}}</strong> interface.</p> + + + + <p>Gets the number of dimensions that require interpolation.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value and velocity of the transition for the given dimension.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator2}}</strong> at different offsets. However, <strong>SetInitialValueAndVelocity</strong> can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + <dd> <p>The dimension in which to set the initial value or velocity of the transition.</p> </dd> + + + + + <p>Used to determine which kinds of command lists are capable of supporting various operations. For example, whether a command list supports immediate writes. </p> + + + <dd> <p>Specifies that no command list supports the operation in question.</p> </dd> + + + <dd> <p>Specifies that direct command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that command list bundles can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that compute command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that copy command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-decode command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-processing command lists can support the operation is question.</p> </dd> + + + + + <p>Sets the duration of the transition in the given dimension.</p> + <p>Windows Animation calls this method only after calling the <strong>{{IUIAnimationInterpolator2::GetDependencies}}</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency has a duration parameter in the <strong>{{IUIAnimationTransitionFactory}}</strong> or <strong>{{IUIAnimationTransitionFactory2}}</strong> creation method that is associated with that interpolator. The interpolator should store its duration when first initialized and overwrite the duration when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator doesn't need to check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + <dd> <p>The dimension from which to retrieve the final value.</p> </dd> + + + + + <p>Interpolates the value of an animation variable at the specified offset and for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the value.</p> </dd> + + + + + <p>Interpolates the velocity, or rate of change, at the specified offset for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition. </p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero. +</p> </dd> + + + <dd> <p>The interpolated velocity.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the velocity.</p> </dd> + + + + + <p>Generates a primitive interpolation of the specified animation curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that defines the custom animation curve information.</p> </dd> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + + + <p>For the given dimension, <strong>GetDependencies</strong> retrieves the aspects of the interpolator that depend on the initial value or velocity that is passed to the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method or the duration that is passed to the <strong>{{IUIAnimationInterpolator2::SetDuration}}</strong> method.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator that:</p><ul> <li>Accepts a final value as a parameter.</li> <li>Always comes to a gradual stop at that final value.</li> <li>Has a duration determined by the difference between the final value and the initial value.</li> </ul><p>In this case the interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for the <em>initialValueDependencies</em> parameter. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong>, because this value is set when the interpolator is created and is not affected by the initial value. Likewise, the interpolator should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong>, because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return a correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, and then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter which velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong>, because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for creating transitions from custom interpolators.</p><p><strong>{{IUIAnimationTransitionFactory2}}</strong> supports the creation of transitions in a specified dimension.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that the application can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement either the <strong>{{IUIAnimationInterpolator}}</strong> interface or the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong> or by <strong>{{UIAnimationTransitionFactory2}}</strong>.</p> + + + + <p>Creates a transition from a custom interpolator for a given dimension.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface.</p> </dd> + + + <dd> <p>The new transition.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p>Creates a loop between two keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p>The keyframe at which the loop is to end. <em>endKeyframe</em> must not occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p>The number of times the loop is to be repeated; the last iteration of a loop can terminate fractionally between keyframes. A value of zero indicates that the specified portion of a storyboard will not be played. A value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) indicates that the loop will repeat indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + <dd> <p>The pattern for the loop iteration. </p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) specifies that the start of the loop must alternate between keyframes (k1-&gt;k2, k2-&gt;k1, k1-&gt;k2, and so on).</p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_NORMAL}}</strong> (0) specifies that the start of the loop must begin with the first keyframe (k1-&gt;k2, k1-&gt;k2, k1-&gt;k2, and so on).</p> <strong>Note</strong>??If <em>repeatMode</em> has a value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) and <em>cRepetition</em> has a value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1), the loop terminates on the end keyframe. + ? </dd> + + + <dd> <p>The handler for each loop iteration event. The default value is 0.</p> </dd> + + + <dd> <p>The loop {{ID}} to pass to <em>pIterationChangeHandler</em>. The default value is 0.</p> </dd> + + + <dd> <p>If true, specifies that <em>pIterationChangeHandler</em> will be incorporated into the estimate of the time interval until the next animation event that is returned by the <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> method. The default value is 0, or false.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher-priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager2::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p><p> Use <strong>{{IUIAnimationStoryboard2::SetSkipDuration}}</strong> to start a storyboard animation at a specified offset instead of delaying the start of a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p>Specifies an offset from the beginning of a storyboard at which to start animating.</p> + <p>Calls to <strong>SetSkipDuration</strong> fail if the storyboard has been scheduled.</p><p><strong>SetSkipDuration</strong> does not delay the start of a scheduled storyboard. See <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> for more info on how to set a delay for a scheduled storyboard.</p><p>This diagram shows a skip duration, or offset, for a storyboard. </p><p></p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset, or amount of time, to skip at the beginning of the storyboard.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of an alternating keyframe loop iteration, the loop is terminated with the loop value set to the ending loop value.</p><p> If this method is called at the end of a non-alternating keyframe loop iteration, where "loop wrapping" results in the loop value being set to the starting value of the next iteration, the loop is executed once more in order for the loop value to be set to the ending loop value.</p><p>For alternating keyframe loops, each iteration has a starting value that is equivalent to the ending value of the preceding loop. In this case, "loop wrapping" is not an issue.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). It can be used by an application to identify a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>This method can return the identifier, the object, or both portions of the tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler that Windows Animation should call whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardStatusChanged</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardUpdated</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Strip flag options.</p> + <p>These flags are used by <strong>{{D3DStripShader}}</strong>.</p> + + + + <p>Values that identify parts of the content of an arbitrary length data buffer.</p> + <p>These values are passed to the <strong>{{D3DGetBlobPart}}</strong> or <strong>{{D3DSetBlobPart}}</strong> function.</p> + + + + <p>Describes shader data.</p> + <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures is passed to <strong>{{D3DCompressShaders}}</strong> to compress the shader data into a more compact form.</p> + + + <dd> <p>A reference to shader data.</p> </dd> + + + <dd> <p>Length of shader data that <strong>pBytecode</strong> points to.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Reads a file that is on disk into memory.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DReadFileToBlob}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to read into memory.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that contains information that <strong>{{D3DReadFileToBlob}}</strong> read from the <em>pFileName</em> file. You can use this <strong>{{ID3DBlob}}</strong> interface to access the file information and pass it to other compiler functions.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Writes a memory blob to a file on disk.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DWriteBlobToFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a <strong>{{ID3DBlob}}</strong> interface that contains the memory blob to write to the file that the <em>pFileName</em> parameter specifies.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to which to write.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to overwrite information in the <em>pFileName</em> file. {{TRUE}} specifies to overwrite information and {{FALSE}} specifies not to overwrite information.</p> </dd> + + + + + <p>Compile {{HLSL}} code or an effect file into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile}}</strong> and <strong>{{D3DCompile2}}</strong> is that the latter method takes some optional parameters that can be used to control some aspects of how bytecode is generated. If this extra flexibility is not required, there is no performance gain from using <strong>{{D3DCompile2}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> You can use this parameter for strings that specify error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p>Optional. A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The name of the shader entry point function where shader execution begins. When you compile using a fx profile (for example, fx_4_0, fx_5_0, and so on), <strong>{{D3DCompile}}</strong> ignores <em>pEntrypoint</em>. In this case, we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it. For all other shader profiles, a valid <em>pEntrypoint</em> is required. +</p> </dd> + + + <dd> <p>A string that specifies the shader target or set of shader features to compile against. The shader target can be shader model 2, shader model 3, shader model 4, or shader model 5. The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile constants</strong>.</p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile effect constants</strong>. When you compile a shader and not an effect file, <strong>{{D3DCompile}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong> is that <strong>{{D3DCompile2}}</strong> takes some optional parameters (<em>SecondaryDataFlags</em>, <em>pSecondaryData</em> and <em>SecondaryDataSize</em>) that can be used to control some aspects of how bytecode is generated. Refer to the descriptions of these parameters for more details. There is no difference otherwise to the efficiency of the bytecode generated between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data ({{ASCII}} {{HLSL}} code).</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>An optional reference to a constant null-terminated string containing the name that identifies the source data to use in error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>An optional array of <strong>{{D3D_SHADER_MACRO}}</strong> structures that define shader macros. Each macro definition contains a name and a {{NULL}}-terminated definition. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> interface that the compiler uses to handle include files. If you set this parameter to <strong>{{NULL}}</strong> and the shader contains a #include, a compile error occurs. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the shader entry point function where shader execution begins. When you compile an effect, <strong>{{D3DCompile2}}</strong> ignores <em>pEntrypoint</em>; we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that specifies the shader target or set of shader features to compile against. The shader target can be a shader model (for example, shader model 2, shader model 3, shader model 4, or shader model 5). The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>A combination of shader <strong>{{D3D}} compile constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code.</p> </dd> + + + <dd> <p>A combination of effect <strong>{{D3D}} compile effect constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the effect. When you compile a shader and not an effect file, <strong>{{D3DCompile2}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS}} (0x01)</td><td>Merge unordered access view ({{UAV}}) slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS}} (0x02)</td><td>Preserve template slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH}} (0x04)</td><td>Require that templates in the secondary data that the <em>pSecondaryData</em> parameter points to match when the compiler compiles the {{HLSL}} code.</td></tr> </table> <p>?</p> <p>If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to secondary data. If you don't pass secondary data, set to <strong>{{NULL}}</strong>. Use this secondary data to align {{UAV}} slots in two shaders. Suppose shader A has {{UAVs}} and they are bound to some slots. To compile shader B such that {{UAVs}} with the same names are mapped in B to the same slots as in A, pass A?s byte code to <strong>{{D3DCompile2}}</strong> as the secondary data. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSecondaryData</em> points to. If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store. Refer to the section, "Compiling shaders for {{UWP}}", in the remarks for <strong>{{D3DCompile2}}</strong>.?<p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DCompileFromFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Preprocesses uncompiled {{HLSL}} code.</p> + <p><strong>{{D3DPreprocess}}</strong> outputs #line directives and preserves line numbering of source input so that output line numbering can be properly related to the input source.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> The name of the file that contains the uncompiled {{HLSL}} code.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The address of a <strong>{{ID3DBlob}}</strong> that contains the compiled code.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DBlob}}</strong> that contains compiler error messages, or <strong>{{NULL}}</strong> if there were no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Gets shader debug information.</p> + <p>Debug information is embedded in the body of the shader after calling <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data; either uncompiled or compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains debug information.</p> </dd> + + + + + <p>Gets a reference to a reflection interface.</p> + <p>Shader code contains metadata that can be inspected using the reflection {{APIs}}.</p><p>The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> Interface from a shader.</p><pre> pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector); +</pre> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11ShaderReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a reflection interface.</p> </dd> + + + + + <p>Creates a library-reflection interface from source data that contains an {{HLSL}} library of functions. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>A reference to source data as an {{HLSL}} library of functions. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11LibraryReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to a library-reflection interface, <strong>{{ID3D11LibraryReflection}}</strong>.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Flags affecting the behavior of <strong>{{D3DDisassemble}}</strong>. <em>Flags</em> can be a combination of zero or more of the following values. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_COLOR_CODE}}</strong></td><td>Enable the output of color codes.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}}</strong></td><td>Enable the output of default values.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}}</strong></td><td>Enable instruction numbering.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}}</strong></td><td>No effect.</td></tr> <tr><td><strong>{{D3D_DISASM_DISABLE_DEBUG_INFO}}</strong></td><td>Disable debug information.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}}</strong></td><td>Enable instruction offsets.</td></tr> <tr><td><strong>{{D3D_DISASM_INSTRUCTION_ONLY}}</strong></td><td>Disassemble instructions only.</td></tr> <tr><td><strong> {{D3D_DISASM_PRINT_HEX_LITERALS}}</strong></td><td>Use hex symbols in disassemblies.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The comment string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses assembly text.</p> </dd> + + + + + <p>Disassembles a specific region of compiled Microsoft High Level Shader Language ({{HLSL}}) code.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DDisassembleRegion}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of zero or more of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DDisassembleRegion}}</strong> disassembles the compiled shader data.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_DISASM_ENABLE_COLOR_CODE}} (0x01)</td><td>Enable the output of color codes.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}} (0x02)</td><td>Enable the output of default values.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}} (0x04)</td><td>Enable instruction numbering.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}} (0x08)</td><td>No effect.</td></tr> <tr><td>{{D3D_DISASM_DISABLE_DEBUG_INFO}} (0x10)</td><td>Disable the output of debug information.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}} (0x20)</td><td>Enable the output of instruction offsets.</td></tr> <tr><td>{{D3D_DISASM_INSTRUCTION_ONLY}} (0x40)</td><td>This flag has no effect in <strong>{{D3DDisassembleRegion}}</strong>. Cycle information comes from the trace; therefore, cycle information is available only in <strong>{{D3DDisassemble11Trace}}</strong>'s trace disassembly.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>The number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> starts the disassembly.</p> </dd> + + + <dd> <p>The number of instructions to disassemble.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> finishes the disassembly.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses the disassembled {{HLSL}} code.</p> </dd> + + + + + <p>Creates a linker interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateLinker}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Linker}}</strong> interface that is used to link a shader module.</p> </dd> + + + + + <p>Creates a shader module interface from source data for the shader module. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DLoadModule}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the source data for the shader module.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Module}}</strong> interface that is used for shader resource re-binding.</p> </dd> + + + + + <p>Creates a function-linking-graph interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateFunctionLinkingGraph}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11FunctionLinkingGraph}}</strong> interface that is used for constructing shaders that consist of a sequence of precompiled function calls.</p> </dd> + + + + + <p>Retrieves the byte offsets for instructions within a section of shader code.</p> + <p>A new kind of Microsoft High Level Shader Language ({{HLSL}}) debugging information from a program database ({{PDB}}) file uses instruction-byte offsets within a shader blob (arbitrary-length data buffer). You use <strong>{{D3DGetTraceInstructionOffsets}}</strong> to translate to and from instruction indexes.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DGetTraceInstructionOffsets}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the instruction offsets.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE}} (0x01)</td><td>Include non-executable code in the retrieved information.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The index of the instruction in the compiled shader data for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> starts to retrieve the byte offsets.</p> </dd> + + + <dd> <p>The number of instructions for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the byte offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the actual number of offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of instructions in the section of shader code.</p> </dd> + + + + + <strong>Note</strong>??<strong>{{D3DGetInputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the output signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetInputAndOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input and output signatures from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Removes unwanted blobs from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Strip flag options, represented by <strong>{{D3DCOMPILER_STRIP_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the unwanted stripped out shader code.</p> </dd> + + + + + <p>Retrieves a specific part from a compilation result.</p> + <p><strong>{{D3DGetBlobPart}}</strong> retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the <em>Part</em> parameter specifies.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part of the buffer to retrieve.</p> </dd> + + + <dd> <p>Flags that indicate how to retrieve the blob part. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the specified part of the buffer.</p> </dd> + + + + + <p>Sets information in a compilation result.</p> + <p><strong>{{D3DSetBlobPart}}</strong> modifies data in a compiled shader. Currently, <strong>{{D3DSetBlobPart}}</strong> can update only the private data in a compiled shader. You can use <strong>{{D3DSetBlobPart}}</strong> to attach arbitrary uninterpreted data to a compiled shader.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DSetBlobPart}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The length of the compiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part to set. Currently, you can update only private data; that is, <strong>{{D3DSetBlobPart}}</strong> currently only supports the <strong>{{D3D_BLOB_PRIVATE_DATA}}</strong> value.</p> </dd> + + + <dd> <p>Flags that indicate how to set the blob part. Currently, no flags are defined; therefore, set to zero.</p> </dd> + + + <dd> <p>A reference to data to set in the compilation result.</p> </dd> + + + <dd> <p>The length of the data that <em>pPart</em> points to.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface for the new shader in which the new part data is set.</p> </dd> + + + + + <p>Creates a buffer.</p> + <p>The latest {{D3dcompiler_nn}}.dll contains the <strong>{{D3DCreateBlob}}</strong> compiler function. Therefore, you are no longer required to create and use an arbitrary length data buffer by using the <strong>{{D3D10CreateBlob}}</strong> function that is contained in {{D3d10}}.dll.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>Number of bytes in the blob.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the buffer.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Compresses a set of shaders into a more compact form. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>The number of shaders to compress.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures that describe the set of shaders to compress.</p> </dd> + + + <dd> <p>Flags that indicate how to compress the shaders. Currently, only the {{D3D_COMPRESS_SHADER_KEEP_ALL_PARTS}} (0x00000001) flag is defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the compressed shader data.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Decompresses one or more shaders from a compressed set. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The number of shaders to decompress.</p> </dd> + + + <dd> <p>The index of the first shader to decompress.</p> </dd> + + + <dd> <p>An array of indexes that represent the shaders to decompress.</p> </dd> + + + <dd> <p>Flags that indicate how to decompress. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the decompressed shader data.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of shaders that <strong>{{D3DDecompressShaders}}</strong> decompressed.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code from a Direct3D10 effect.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Shader compile options.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains disassembly text.</p> </dd> + + + + + <p>Indicates shader type.</p> + + + <dd> <p>Pixel shader.</p> </dd> + + + <dd> <p>Vertex shader.</p> </dd> + + + <dd> <p>Geometry shader.</p> </dd> + + + <dd> <p>Hull shader.</p> </dd> + + + <dd> <p>Domain shader.</p> </dd> + + + <dd> <p>Compute shader.</p> </dd> + + + <dd> <p>Indicates the end of the enumeration constants.</p> </dd> + + + + + <p>Describes a shader signature.</p> + <p>A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.</p><p>When compiling a shader or an effect, some {{API}} calls validate shader signatures That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.</p><p>Get a shader-signature from a shader or an effect by calling {{APIs}} such as <strong>{{ID3D11ShaderReflection::GetInputParameterDesc}}</strong>. </p> + + + <dd> <p>A per-parameter string that identifies how the data will be used. For more info, see Semantics. </p> </dd> + + + <dd> <p>Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.</p> </dd> + + + <dd> <p>The register that will contain this variable's data.</p> </dd> + + + <dd> <p>A <strong>{{D3D_NAME}}</strong>-typed value that identifies a predefined string that determines the functionality of certain pipeline stages.</p> </dd> + + + <dd> <p>A <strong>{{D3D_REGISTER_COMPONENT_TYPE}}</strong>-typed value that identifies the per-component-data type that is stored in a register. Each register can store up to four-components of data.</p> </dd> + + + <dd> <p>Mask which indicates which components of a register are used.</p> </dd> + + + <dd> <p>Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). </p> </dd> + + + <dd> <p>Indicates which stream the geometry shader is using for the signature parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_MIN_PRECISION}}</strong>-typed value that indicates the minimum desired interpolation precision. For more info, see Using {{HLSL}} minimum precision.</p> </dd> + + + + + <p>Describes a shader constant-buffer.</p> + <p>Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling <strong>{{ID3D11ShaderReflectionConstantBuffer::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D_CBUFFER_TYPE}}</strong>-typed value that indicates the intended use of the constant data.</p> </dd> + + + <dd> <p>The number of unique variables.</p> </dd> + + + <dd> <p>Buffer size (in bytes).</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies properties for the shader constant-buffer.</p> </dd> + + + + + <p>Describes a shader variable.</p> + <p> Get a shader-variable description using reflection by calling <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong>. </p><p> As of the June 2010 update, <strong>DefaultValue</strong> emits default values for reflection. </p> + + + <dd> <p>The variable name.</p> </dd> + + + <dd> <p>Offset from the start of the parent structure to the beginning of the variable.</p> </dd> + + + <dd> <p>Size of the variable (in bytes).</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value identifies shader-variable properties. </p> </dd> + + + <dd> <p>The default value for initializing the variable.</p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the texture. </p> </dd> + + + <dd> <p>The size of the texture, in bytes. </p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the sampler. </p> </dd> + + + <dd> <p>The size of the sampler, in bytes. </p> </dd> + + + + + <p>Describes a shader-variable type.</p> + <p>Get a shader-variable-type description by calling <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type.</p> </dd> + + + <dd> <p>Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of elements in an array; otherwise 0.</p> </dd> + + + <dd> <p>Number of members in the structure; otherwise 0.</p> </dd> + + + <dd> <p>Offset, in bytes, between the start of the parent structure and this variable. Can be 0 if not a structure member.</p> </dd> + + + <dd> <p>Name of the shader-variable type. This member can be <strong>{{NULL}}</strong> if it isn't used. This member supports dynamic shader linkage interface types, which have names. For more info about dynamic shader linkage, see Dynamic Linking.</p> </dd> + + + + + <p>Describes a shader.</p> + <p>A shader is written in {{HLSL}} and compiled into an intermediate language by the {{HLSL}} compiler. The shader description returns information about the compiled shader. Get a shader description by calling <strong>{{ID3D11ShaderReflection::GetDesc}}</strong>.</p> + + + <dd> <p>Shader version.</p> </dd> + + + <dd> <p>The name of the originator of the shader.</p> </dd> + + + <dd> <p>Shader compilation/parse flags.</p> </dd> + + + <dd> <p>The number of shader-constant buffers.</p> </dd> + + + <dd> <p>The number of resource (textures and buffers) bound to a shader.</p> </dd> + + + <dd> <p>The number of parameters in the input signature.</p> </dd> + + + <dd> <p>The number of parameters in the output signature.</p> </dd> + + + <dd> <p>The number of intermediate-language instructions in the compiled shader.</p> </dd> + + + <dd> <p>The number of temporary registers in the compiled shader.</p> </dd> + + + <dd> <p>Number of temporary arrays used.</p> </dd> + + + <dd> <p>Number of constant defines.</p> </dd> + + + <dd> <p>Number of declarations (input + output).</p> </dd> + + + <dd> <p>Number of non-categorized texture instructions.</p> </dd> + + + <dd> <p>Number of texture load instructions</p> </dd> + + + <dd> <p>Number of texture comparison instructions</p> </dd> + + + <dd> <p>Number of texture bias instructions</p> </dd> + + + <dd> <p>Number of texture gradient instructions.</p> </dd> + + + <dd> <p>Number of floating point arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of signed integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of unsigned integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of static flow control instructions used.</p> </dd> + + + <dd> <p>Number of dynamic flow control instructions used.</p> </dd> + + + <dd> <p>Number of macro instructions used.</p> </dd> + + + <dd> <p>Number of array instructions used.</p> </dd> + + + <dd> <p>Number of cut instructions used.</p> </dd> + + + <dd> <p>Number of emit instructions used.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>-typed value that represents the geometry shader output topology.</p> </dd> + + + <dd> <p>Geometry shader maximum output vertex count.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE}}</strong>-typed value that represents the input primitive for a geometry shader or hull shader.</p> </dd> + + + <dd> <p>Number of parameters in the patch-constant signature.</p> </dd> + + + <dd> <p>Number of geometry shader instances.</p> </dd> + + + <dd> <p>Number of control points in the hull shader and domain shader.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_OUTPUT_PRIMITIVE}}</strong>-typed value that represents the tessellator output-primitive type.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_PARTITIONING}}</strong>-typed value that represents the tessellator partitioning mode.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_DOMAIN}}</strong>-typed value that represents the tessellator domain.</p> </dd> + + + <dd> <p>Number of barrier instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of interlocked instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of texture writes in a compute shader.</p> </dd> + + + + + <p>Describes how a shader resource is bound to a shader input.</p> + <p>Get a shader-input-signature description by calling <strong>{{ID3D11ShaderReflection::GetResourceBindingDesc}}</strong> or <strong>{{ID3D11ShaderReflection::GetResourceBindingDescByName}}</strong>.</p> + + + <dd> <p>Name of the shader resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed value that identifies the type of data in the resource.</p> </dd> + + + <dd> <p>Starting bind point.</p> </dd> + + + <dd> <p>Number of contiguous bind points for arrays.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values for shader input-parameter options. </p> </dd> + + + <dd> <p>If the input is a texture, the <strong>{{D3D_RESOURCE_RETURN_TYPE}}</strong>-typed value that identifies the return type.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value that identifies the dimensions of the bound resource.</p> </dd> + + + <dd> <p>The number of samples for a multisampled texture; when a texture isn't multisampled, the value is set to -1 (0xFFFFFFFF). </p> </dd> + + + + + <p>Describes a library.</p> + + + <dd> <p>The name of the originator of the library.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies how the compiler compiles.</p> </dd> + + + <dd> <p>The number of functions exported from the library.</p> </dd> + + + + + <p>Describes a function.</p> + + + <dd> <p>The shader version.</p> </dd> + + + <dd> <p>The name of the originator of the function.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies shader compilation and parsing.</p> </dd> + + + <dd> <p>The number of constant buffers for the function.</p> </dd> + + + <dd> <p>The number of bound resources for the function.</p> </dd> + + + <dd> <p>The number of emitted instructions for the function.</p> </dd> + + + <dd> <p>The number of temporary registers used by the function.</p> </dd> + + + <dd> <p>The number of temporary arrays used by the function.</p> </dd> + + + <dd> <p>The number of constant defines for the function.</p> </dd> + + + <dd> <p>The number of declarations (input + output) for the function.</p> </dd> + + + <dd> <p>The number of non-categorized texture instructions for the function.</p> </dd> + + + <dd> <p>The number of texture load instructions for the function.</p> </dd> + + + <dd> <p>The number of texture comparison instructions for the function.</p> </dd> + + + <dd> <p>The number of texture bias instructions for the function.</p> </dd> + + + <dd> <p>The number of texture gradient instructions for the function.</p> </dd> + + + <dd> <p>The number of floating point arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of signed integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of unsigned integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of static flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of dynamic flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of macro instructions used by the function.</p> </dd> + + + <dd> <p>The number of array instructions used by the function.</p> </dd> + + + <dd> <p>The number of mov instructions used by the function.</p> </dd> + + + <dd> <p>The number of movc instructions used by the function.</p> </dd> + + + <dd> <p>The number of type conversion instructions used by the function.</p> </dd> + + + <dd> <p>The number of bitwise arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>A <strong>{{D3D_FEATURE_LEVEL}}</strong>-typed value that specifies the minimum Direct3D feature level target of the function byte code.</p> </dd> + + + <dd> <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. For a list of values, see <strong>{{ID3D11ShaderReflection::GetRequiresFlags}}</strong>. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p>The number of logical parameters in the function signature, not including the return value.</p> </dd> + + + <dd> <p>Indicates whether the function returns a value. <strong>{{TRUE}}</strong> indicates it returns a value; otherwise, <strong>{{FALSE}}</strong> (it is a subroutine).</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 vertex shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 vertex shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 pixel shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 pixel shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes a function parameter. </p> + <p>Get a function-parameter description by calling <strong>{{ID3D11FunctionParameterReflection::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the function parameter.</p> </dd> + + + <dd> <p>The {{HLSL}} semantic that is associated with this function parameter. This name includes the index, for example, {{SV_Target}}[n].</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type for the parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class for the parameter as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>The number of rows for a matrix parameter.</p> </dd> + + + <dd> <p>The number of columns for a matrix parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_INTERPOLATION_MODE}}</strong>-typed value that identifies the interpolation mode for the parameter.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_PARAMETER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies semantic flags for the parameter.</p> </dd> + + + <dd> <p>The first input register for this parameter.</p> </dd> + + + <dd> <p>The first input register component for this parameter.</p> </dd> + + + <dd> <p>The first output register for this parameter.</p> </dd> + + + <dd> <p>The first output register component for this parameter.</p> </dd> + + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get the description of a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-type description (see <strong>{{D3D11_SHADER_TYPE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-reflection-variable type by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection-variable type by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The variable type.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type.</p> + <p>IsEqual indicates whether the sources of the <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type. For example, if two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references were retrieved from variables, IsEqual can be used to see if the variables have the same type.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the references have the same underlying type; otherwise returns {{S_FALSE}}.</p> + + + + <p>Gets the base class of a class.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong> containing the base class type. Returns <strong>{{NULL}}</strong> if the class does not have a base class.</p> + + + + <p>Gets an <strong>{{ID3D11ShaderReflectionType}} Interface</strong> interface containing the variable base class type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>Gets the number of interfaces.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of interfaces.</p> + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether a variable is of the specified type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if object being queried is equal to or inherits from the type in the <em>pType</em> parameter; otherwise returns {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Indicates whether a class type implements an interface.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the interface is implemented; otherwise return {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>Get a shader-variable description.</p> + <p>This method can be used to determine if the <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> is valid, the method returns <strong>{{E_FAIL}}</strong> when the variable is not valid.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-variable description (see <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>This method returns the buffer of the current <strong>{{ID3D11ShaderReflectionVariable}}</strong>.</p> + <p> Returns a reference to the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> of the present <strong>{{ID3D11ShaderReflectionVariable}}</strong>. </p> + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>This shader-reflection interface provides access to a constant buffer.</p> + <p> To create a constant-buffer interface, call <strong>{{ID3D11ShaderReflection::GetConstantBufferByIndex}}</strong> or <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it. </p> + + + + <p>Get a constant-buffer description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong>, which represents a shader-buffer description.</p> </dd> + + + + + <p>Get a shader-reflection variable by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a shader-reflection variable interface (see <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a sentinel object (end of list marker). To determine if GetVariableByName successfully completed, call <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> and check the returned <strong>{{HRESULT}}</strong>; any return value other than success means that GetVariableByName failed.</p> + + + <dd> <p>Variable name.</p> </dd> + + + + + <p>A shader-reflection interface accesses shader information.</p> + <p> An <strong>{{ID3D11ShaderReflection}}</strong> interface can be retrieved for a shader by using <strong>{{D3DReflect}}</strong>. The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> from a shader. </p><pre>pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector);</pre> + + + + <p>Get a shader description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader description. See <strong>{{D3D11_SHADER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader.</p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Get an input-parameter description for a shader.</p> + <p>An input-parameter description is also called a shader signature. The shader signature contains information about the input parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p> A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> </dd> + + + + + <p>Get an output-parameter description for a shader.</p> + <p>An output-parameter description is also called a shader signature. The shader signature contains information about the output parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-output-parameter description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a patch-constant parameter description for a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Gets a variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Gets the number of Mov instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Mov instructions.</p> + + + + <p>Gets the number of Movc instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Movc instructions.</p> + + + + <p>Gets the number of conversion instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of conversion instructions.</p> + + + + <p>Gets the number of bitwise instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of bitwise instructions.</p> + + + + <p>Gets the geometry-shader input-primitive description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> The input-primitive description. See <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>, <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>, or <strong>{{D3D10_PRIMITIVE_TOPOLOGY}}</strong>. </p> + + + + <p>Indicates whether a shader is a sample frequency shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns true if the shader is a sample frequency shader; otherwise returns false.</p> + + + + <p>Gets the number of interface slots in a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of interface slots in the shader.</p> + + + + <p>Gets the minimum feature level.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to one of the enumerated values in <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the minimum feature level. </p> </dd> + + + + + <p>Retrieves the sizes, in units of threads, of the X, Y, and Z dimensions of the shader's thread-group grid.</p> + <p> This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll. </p><p>When a compute shader is written it defines the actions of a single thread group only. If multiple thread groups are required, it is the role of the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> call to issue multiple thread groups. </p> + <p> Returns the total size, in threads, of the thread-group grid by calculating the product of the size of each dimension. +</p><code>*pSizeX * *pSizeY * *pSizeZ;</code> + + + <dd> <p>A reference to the size, in threads, of the x-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the y-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the z-dimension of the thread-group grid. The maximum size is 64.</p> </dd> + + + + + <p>Gets a group of flags that indicates the requirements of a shader.</p> + <p>Here is how the {{D3D11Shader}}.h header defines the shader requirements flags:</p><pre> #define {{D3D_SHADER_REQUIRES_DOUBLES}} 0x00000001 +#define {{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}} 0x00000002 +#define {{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}} 0x00000004 +#define {{D3D_SHADER_REQUIRES_64_UAVS}} 0x00000008 +#define {{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}} 0x00000010 +#define {{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}} 0x00000020 +#define {{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}} 0x00000040 +#define {{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}} 0x00000080 +</pre> + <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. </p><table> <tr><th>Shader requirement flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_DOUBLES}}</strong></td><td>Shader requires that the graphics driver and hardware support double data type. For more info, see <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}}</strong></td><td>Shader requires an early depth stencil.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}}</strong></td><td>Shader requires unordered access views ({{UAVs}}) at every pipeline stage.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_64_UAVS}}</strong></td><td>Shader requires 64 {{UAVs}}.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}}</strong></td><td>Shader requires the graphics driver and hardware to support minimum precision. For more info, see Using {{HLSL}} minimum precision.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support extended doubles instructions. For more info, see the <strong>ExtendedDoublesShaderInstructions</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support the <strong>msad4</strong> intrinsic function in shaders. For more info, see the <strong>{{SAD4ShaderInstructions}}</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}}</strong></td><td>Shader requires that the graphics driver and hardware support Direct3D 9 shadow support. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_TILED_RESOURCES}}</strong></td><td>Shader requires that the graphics driver and hardware support tiled resources. For more info, see <strong>GetResourceTiling</strong>. </td></tr> </table><p>?</p> + + + + <p> A library-reflection interface accesses library info. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a library-reflection interface, call <strong>{{D3DReflectLibrary}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LibraryReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the library descriptor structure for the library reflection.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_LIBRARY_DESC}}</strong> structure that receives a description of the library reflection.</p> </dd> + + + + + <p>Gets the function reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionReflection}}</strong> interface that represents the function reflector.</p> + + + <dd> <p>The zero-based index of the function reflector to retrieve.</p> </dd> + + + + + <p>A function-reflection interface accesses function info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-reflection interface, call <strong>{{ID3D11LibraryReflection::GetFunctionByIndex}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the function descriptor structure for the function.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_FUNCTION_DESC}}</strong> structure that receives a description of the function.</p> </dd> + + + + + <p>Gets a constant buffer by index for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Gets a constant buffer by name for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets a variable by name.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets the function parameter reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionParameterReflection}}</strong> interface that represents the function parameter reflector.</p> + + + <dd> <p>The zero-based index of the function parameter reflector to retrieve.</p> </dd> + + + + + <p>A function-parameter-reflection interface accesses function-parameter info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-parameter-reflection interface, call <strong>{{ID3D11FunctionReflection::GetFunctionParameter}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionParameterReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the parameter descriptor structure for the function's parameter.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_PARAMETER_DESC}}</strong> structure that receives a description of the function's parameter. </p> </dd> + + + + + <p> A module interface creates an instance of a module that is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module interface, call <strong>{{D3DLoadModule}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Module}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes an instance of a shader module that is used for resource rebinding.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The name of a shader module to initialize. This can be <strong>{{NULL}}</strong> if you don't want to specify a name for the module.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface to initialize.</p> </dd> + + + + + <p> A module-instance interface is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module-instance interface, call <strong>{{ID3D11Module::CreateInstance}}</strong> or <strong>{{ID3D11FunctionLinkingGraph::CreateModuleInstance}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11ModuleInstance}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Rebinds a constant buffer from a source slot to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The source slot number for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a constant buffer by name to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the constant buffer for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a texture or buffer from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a texture or buffer by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the texture or buffer for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the sampler for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the {{UAV}} for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource as an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource by name as an unordered access view ({{UAV}}) to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the resource for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p> A linker interface is used to link a shader module. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linker interface, call <strong>{{D3DCreateLinker}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Linker}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p> Links the shader and produces a shader blob that the Direct3D runtime can use. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module instance to link from. </p> </dd> + + + <dd> <p> The name of the shader module instance to link from. </p> </dd> + + + <dd> <p> The name for the shader blob that is produced. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled shader code. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages. </p> </dd> + + + + + <p>Adds an instance of a library module to be used for linking.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module instance.</p> </dd> + + + + + <p>Adds a clip plane with the plane coefficients taken from a cbuffer entry for 10Level9 shaders.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Indicates the tier level at which view instancing is supported.</p> + + + <dd> <p>View instancing is not supported.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping only.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping at worst, but the {{GPU}} can perform view instancing more efficiently in certain circumstances which are architecture-dependent.</p> </dd> + + + <dd> <p>View instancing is supported and instancing begins with the first shader stage that references {{SV_ViewID}} or with rasterization if no shader stage references {{SV_ViewID}}. This means that redundant work is eliminated across view instances when it's not dependent on {{SV_ViewID}}. Before rasterization, work that doesn't directly depend on {{SV_ViewID}} is shared across all views; only work that depends on {{SV_ViewID}} is repeated for each view.</p> <strong>Note</strong> If a hull shader produces tessellation factors that are dependent on {{SV_ViewID}}, then tessellation and all subsequent work must be repeated per-view. Similarly, if the amount of geometry produced by the geometry shader depends on {{SV_ViewID}}, then the geometry shader must be repeated per-view before proceeding to rasterization. <p>View instance masking only effects whether work that directly depends on {{SV_ViewID}} is performed, not the entire loop iteration (per-view). If the view instance mask is non-0, some work that depends on {{SV_ViewID}} might still be performed on masked-off pixels but will have no externally-visible effect; for example, no {{UAV}} writes are performed and clipping/rasterzation is not invoked. If the view instance mask is 0 no work is performed, including work that's not dependent on {{SV_ViewID}}.</p> </dd> + + + + + <p> A linking-node interface is used for shader linking. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linking-node interface, call <strong>{{ID3D11FunctionLinkingGraph::SetInputSignature}}</strong>, <strong>{{ID3D11FunctionLinkingGraph::SetOutputSignature}}</strong>, or <strong>{{ID3D11FunctionLinkingGraph::CallFunction}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LinkingNode}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-linking-graph interface, call <strong>{{D3DCreateFunctionLinkingGraph}}</strong>. </p><p>You can use the function-linking-graph ({{FLG}}) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write {{HLSL}} and then call the {{HLSL}} compiler. Instead, the shader structure is specified programmatically via a C++ {{API}}. {{FLG}} nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. {{FLG}} edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the {{HLSL}} behavior. Values can only be passed forward in this sequence.</p><strong>Note</strong>??<strong>{{ID3D11FunctionLinkingGraph}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes a shader module from the function-linking-graph object.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module to initialize.</p> </dd> + + + <dd> <p>An optional reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Sets the input signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the input signature.</p> </dd> + + + <dd> <p>The number of input parameters in the <em>pInputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the input signature of the function-linking-graph.</p> </dd> + + + + + <p>Sets the output signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the output signature.</p> </dd> + + + <dd> <p>The number of output parameters in the <em>pOutputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the output signature of the function-linking-graph.</p> </dd> + + + + + <p>Creates a call-function linking node to use in the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> The optional namespace for the function, or <strong>{{NULL}}</strong> if no namespace is needed. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module that contains the function prototype. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the function in the function-linking-graph. </p> </dd> + + + + + <p>Passes a value from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + + + <p>Passes a value with swizzle from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>The name of the source swizzle.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + <dd> <p>The name of the destination swizzle.</p> </dd> + + + + + <p>Gets the error from the last function call of the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the error. </p> </dd> + + + + + <p>Generates Microsoft High Level Shader Language ({{HLSL}}) shader code that represents the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the {{HLSL}} shader source code that represents the function-linking-graph. You can compile this {{HLSL}} code, but first you must add code or include statements for the functions called in the function-linking-graph.</p> </dd> + + + + + <p>Driver type options.</p> + <p>The driver type is required when calling <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + + + <dd> <p>The driver type is unknown.</p> </dd> + + + <dd> <p>A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration (on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver type is often referred to as a hardware abstraction layer or {{HAL}}.</p> </dd> + + + <dd> <p>A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special {{CPU}} instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration of functionality, debugging, or verifying bugs in other drivers. The reference device for this driver is installed by the Windows {{SDK}} 8.0 or later and is intended only as a debug aid for development purposes. This driver may be referred to as a {{REF}} driver, a reference driver, or a reference rasterizer.</p> <strong>Note</strong>??When you use the {{REF}} driver in Windows Store apps, the {{REF}} driver renders correctly but doesn't display any output on the screen. To verify bugs in hardware drivers for Windows Store apps, use <strong>{{D3D_DRIVER_TYPE_WARP}}</strong> for the {{WARP}} driver instead. ? </dd> + + + <dd> <p>A {{NULL}} driver, which is a reference driver without render capability. This driver is commonly used for debugging non-rendering {{API}} calls, it is not appropriate for retail applications. This driver is installed by the DirectX {{SDK}}.</p> </dd> + + + <dd> <p>A software driver, which is a driver implemented completely in software. The software implementation is not intended for a high-performance application due to its very slow performance.</p> </dd> + + + <dd> <p>A {{WARP}} driver, which is a high-performance software rasterizer. The rasterizer supports <strong>feature levels</strong> 9_1 through level 10_1 with a high performance software implementation. For information about limitations creating a {{WARP}} device on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. For more information about using a {{WARP}} driver, see Windows Advanced Rasterization Platform ({{WARP}}) In-Depth Guide.</p> <strong>Note</strong>??The {{WARP}} driver that Windows?8 includes supports feature levels 9_1 through level 11_1. ? <strong>Note</strong>??The {{WARP}} driver that Windows?8.1 includes fully supports feature level 11_1, including tiled resources, <strong>{{IDXGIDevice3::Trim}}</strong>, shared {{BCn}} surfaces, minblend, and map default. ? </dd> + + + + + <p> Describes the set of features targeted by a Direct3D device. </p> + <p> For an overview of the capabilities of each feature level, see Overview For Each Feature Level. </p><p> For information about limitations creating non-hardware-type devices on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. </p> + + + <dd> <p> Targets features supported by feature level 9.1 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.2 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.3 including shader model 2.0b. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.0 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.1 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.1 including shader model 5 and logical blend operations. This feature level requires a display driver that is at least implemented to {{WDDM}} for Windows?8 ({{WDDM}} 1.2). </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.1 including shader model 5. </p> </dd> + + + + + <p>Values that indicate how the pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on screen.</p> + <p>Use the <strong>{{ID3D11DeviceContext::IASetPrimitiveTopology}}</strong> method and a value from <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong> to bind a primitive topology to the input-assembler stage. Use the <strong>{{ID3D11DeviceContext::IAGetPrimitiveTopology}}</strong> method to retrieve the primitive topology for the input-assembler stage.</p><p>The following diagram shows the various primitive types for a geometry shader object.</p> + + + + <p>Values that indicate how the pipeline interprets geometry or hull shader input primitives.</p> + <p> The <strong>{{ID3D11ShaderReflection::GetGSInputPrimitive}}</strong> method returns a <strong>{{D3D_PRIMITIVE}}</strong>-typed value. </p> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p>The type is undefined.</p> </dd> + + + <dd> <p>The data is organized in a point list.</p> </dd> + + + <dd> <p>The data is organized in a line list.</p> </dd> + + + <dd> <p>The data is organized in a triangle list.</p> </dd> + + + <dd> <p>The data is organized in a line list with adjacency data.</p> </dd> + + + <dd> <p>The data is organized in a triangle list with adjacency data.</p> </dd> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + + + <p>Values that identify the type of resource to be viewed as a shader resource.</p> + <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value is specified in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure or the <strong>Dimension</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Values that indicate the location of a shader #include file. </p> + <p>You pass a <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value to the <em>IncludeType</em> parameter in a call to the <strong>{{ID3DInclude::Open}}</strong> method to indicate the location of the #include file.</p> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. </p> <p>Do not use this value.</p> </dd> + + + + + <p>Values that identify the class of a shader variable.</p> + <p>The class of a shader variable is not a programming class; the class identifies the variable class such as scalar, vector, object, and so on. <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed values are specified in the <strong>Class</strong> member of the <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify information about a shader variable.</p> + <p>A call to the <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> method returns <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong> values in the <strong>uFlags</strong> member of a <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong> structure.</p> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify various data, texture, and buffer types that can be assigned to a shader variable.</p> + <p> A call to the <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong> method returns a <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong> value in the <strong>Type</strong> member of a <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure. </p><p> The types in a structured buffer describe the structure of the elements in the buffer. The layout of these types generally match their C++ struct counterparts. The following examples show structured buffers: </p><pre>struct mystruct {float4 val; uint ind;}; {{RWStructuredBuffer}}&lt;mystruct&gt; rwbuf; {{RWStructuredBuffer}}&lt;float3&gt; rwbuf2;</pre> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> <p> For more information about structured buffer, see the <strong>Remarks</strong> section. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p> The variable is an 8-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 10-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 12-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read and write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify shader-input options.</p> + <p><strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure. </p> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> This value is reserved. </p> </dd> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> Forces the enumeration to compile to 32 bits. This value is not used directly by titles. </p> </dd> + + + + + <p>Values that identify resource types that can be bound to a shader and that are reflected as part of the resource description for the shader.</p> + <p><strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed values are specified in the <strong>Type</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + + + <p>Values that identify the indended use of a constant-data buffer.</p> + <p><strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong> structure.</p> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify the intended use of constant-buffer data. </p> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + + + <p>Values that identify shader parameters that use system-value semantics.</p> + <p> The <strong>{{D3D_NAME}}</strong> values identify shader parameters that have predefined system-value semantics. These values are used in a shader-signature description. For more information about shader-signature description, see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains an instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + + + <p>Values that identify the return type of a resource.</p> + <p>A resource return type is specified in the <strong>ReturnType</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + <dd> <p>Unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Signed integer.</p> </dd> + + + <dd> <p>Unsigned integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + + + <p>Values that identify the data types that can be stored in a register.</p> + <p>A register component type is specified in the <strong>ComponentType</strong> member of the <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong> structure.</p> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + + + <p>Values that identify domain options for tessellator data.</p> + <p>The data domain defines the type of data. This enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + + + <p>Values that identify partitioning options.</p> + <p>During tessellation, the partition option helps to determine how the algorithm chooses the next partition value; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + + + <p>Values that identify output primitive types.</p> + <p>The output primitive type determines how the tessellator output data is organized; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + + + <p>Values that indicate the minimum desired interpolation precision.</p> + <p>For more info, see <strong>Scalar Types</strong> and Using {{HLSL}} minimum precision.</p> + + + <dd> <p>Default minimum precision, which is 32-bit precision.</p> </dd> + + + <dd> <p>Minimum precision is min16float, which is 16-bit floating point. </p> </dd> + + + <dd> <p>Minimum precision is min10float, which is 10-bit floating point. </p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>Minimum precision is min16int, which is 16-bit signed integer. </p> </dd> + + + <dd> <p>Minimum precision is min16uint, which is 16-bit unsigned integer. </p> </dd> + + + <dd> <p>Minimum precision is any 16-bit value. </p> </dd> + + + <dd> <p>Minimum precision is any 10-bit value. </p> </dd> + + + + + <p>Specifies interpolation mode, which affects how values are calculated during rasterization.</p> + + + <dd> <p>The interpolation mode is undefined.</p> </dd> + + + <dd> <p>Don't interpolate between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but sample clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and sample clamped when multisampling.</p> </dd> + + + + + <p>Indicates semantic flags for function parameters.</p> + + + <dd> <p>The parameter has no semantic flags.</p> </dd> + + + <dd> <p>Indicates an input parameter.</p> </dd> + + + <dd> <p>Indicates an output parameter.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Defines a shader macro.</p> + <p>You can use shader macros in your shaders. The <strong>{{D3D_SHADER_MACRO}}</strong> structure defines a single shader macro as shown in the following example:</p><pre> {{D3D_SHADER_MACRO}} Shader_Macros[] = { "zero", "0", {{NULL}}, {{NULL}} }; +</pre><p>The following shader or effect creation functions take an array of shader macros as an input parameter:</p><ul> <li> <strong>{{D3D10CompileShader}}</strong> </li> <li> <strong>{{D3DX10CreateEffectFromFile}}</strong> </li> <li> <strong>{{D3DX10PreprocessShaderFromFile}}</strong> </li> <li> <strong>{{D3DX11CreateAsyncShaderPreprocessProcessor}}</strong> </li> </ul> + + + <dd> <p>The macro name.</p> </dd> + + + <dd> <p>The macro definition.</p> </dd> + + + + + <p>This interface is used to return arbitrary length data.</p> + <p>An <strong>{{ID3D10Blob}}</strong> is obtained by calling <strong>{{D3D10CreateBlob}}</strong>.</p><p>The <strong>{{ID3DBlob}}</strong> interface is type defined in the {{D3DCommon}}.h header file as a <strong>{{ID3D10Blob}}</strong> interface, which is fully defined in the {{D3DCommon}}.h header file. <strong>{{ID3DBlob}}</strong> is version neutral and can be used in code for any Direct3D version.</p><p>Blobs can be used as a data buffer, storing vertex, adjacency, and material information during mesh optimization and loading operations. Also, these objects are used to return object code and error messages in {{APIs}} that compile vertex, geometry and pixel shaders.</p> + + + + <p>Get a reference to the data.</p> + <p>Returns a reference.</p> + + + + <p>Get the size.</p> + <p>The size of the data, in bytes.</p> + + + + + + + + + + + + + <p><strong>{{ID3DInclude}}</strong> is an include interface that the user implements to allow an application to call user-overridable methods for opening and closing shader #include files. </p> + <p> To use this interface, create an interface that inherits from <strong>{{ID3DInclude}}</strong> and implement custom behavior for the methods. </p> + + + + <p>A user-implemented method for opening and reading the contents of a shader #include file.</p> + <p> The user-implemented method must return {{S_OK}}. If <strong>Open</strong> fails when it reads the #include file, the application programming interface ({{API}}) that caused <strong>Open</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> A <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value that indicates the location of the #include file. </p> </dd> + + + <dd> <p>Name of the #include file.</p> </dd> + + + <dd> <p> Pointer to the container that includes the #include file. The compiler might pass {{NULL}} in <em>pParentData</em>. For more information, see the "Searching for Include Files" section in Compile an Effect (Direct3D 11). </p> </dd> + + + <dd> <p> Pointer to the buffer that contains the include directives. This reference remains valid until you call<strong>{{ID3DInclude::Close}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the number of bytes that <strong>Open</strong> returns in <em>ppData</em>. </p> </dd> + + + + + <p>A user-implemented method for closing a shader #include file.</p> + <p> If <strong>{{ID3DInclude::Open}}</strong> was successful, <strong>Close</strong> is guaranteed to be called before the {{API}} using the <strong>{{ID3DInclude}}</strong> interface returns. </p> + <p> The user-implemented <strong>Close</strong> method should return {{S_OK}}. If <strong>Close</strong> fails when it closes the #include file, the application programming interface ({{API}}) that caused <strong>Close</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> Pointer to the buffer that contains the include directives. This is the reference that was returned by the corresponding <strong>{{ID3DInclude::Open}}</strong> call. </p> </dd> + + + + + <p>The type of a font represented by a single font file. Font formats that consist of multiple files, for example Type 1 .{{PFM}} and .{{PFB}}, have separate enum values for each of the file types.</p> + + + <dd> <p>Font type is not recognized by the DirectWrite font system.</p> </dd> + + + <dd> <p>OpenType font with {{CFF}} outlines.</p> </dd> + + + <dd> <p>OpenType font with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font that contains a TrueType collection.</p> </dd> + + + <dd> <p>Type 1 {{PFM}} font.</p> </dd> + + + <dd> <p>Type 1 {{PFB}} font.</p> </dd> + + + <dd> <p>Vector .{{FON}} font.</p> </dd> + + + <dd> <p>Bitmap .{{FON}} font.</p> </dd> + + + + + <p>Indicates the file format of a complete font face.</p> + <p>Font formats that consist of multiple files, such as Type 1 .{{PFM}} and .{{PFB}}, have a single enum entry.</p> + + + <dd> <p>OpenType font face with {{CFF}} outlines.</p> </dd> + + + <dd> <p>The font data includes only the {{CFF}} table from an OpenType {{CFF}} font. This font face type can be used only for embedded fonts (i.e., custom font file loaders) and the resulting font face object supports only the minimum functionality necessary to render glyphs.</p> </dd> + + + <dd> <p>OpenType font face with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font face that is a part of a TrueType collection.</p> </dd> + + + <dd> <p>A Type 1 font face.</p> </dd> + + + <dd> <p>A vector .{{FON}} format font face.</p> </dd> + + + <dd> <p>A bitmap .{{FON}} format font face.</p> </dd> + + + <dd> <p>Font face type is not recognized by the DirectWrite font system.</p> </dd> + + + + + <p>Specifies algorithmic style simulations to be applied to the font face. Bold and oblique simulations can be combined via bitwise {{OR}} operation.</p> + <p> Style simulations are not recommended for good typographic quality.</p> + + + <dd> <p>Indicates that no simulations are applied to the font face.</p> </dd> + + + <dd> <p>Indicates that algorithmic emboldening is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_BOLD}}</strong> increases weight by applying a widening algorithm to the glyph outline. This may be used to simulate a bold weight where no designed bold weight is available.</p> </dd> + + + <dd> <p>Indicates that algorithmic italicization is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_OBLIQUE}}</strong> applies obliquing (shear) to the glyph outline. This may be used to simulate an oblique/italic style where no designed oblique/italic style is available.</p> </dd> + + + + + <p>Represents the density of a typeface, in terms of the lightness or heaviness of the strokes. The enumerated values correspond to the usWeightClass definition in the OpenType specification. The <em>usWeightClass</em> represents an integer value between 1 and 999. Lower values indicate lighter weights; higher values indicate heavier weights.</p> + <p>Weight differences are generally differentiated by an increased stroke or thickness that is associated with a given character in a typeface, as compared to a "normal" character from that same typeface. +The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p><p></p><strong>Note</strong>??Not all weights are available for all typefaces. When a weight is not available for a typeface, the closest matching weight is returned.?<p>Font weight values less than 1 or greater than 999 are considered invalid, and they are rejected by font {{API}} functions.</p> + + + <dd> <p>Predefined font weight : Thin (100).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Light (300).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-Light (350).</p> </dd> + + + <dd> <p>Predefined font weight : Normal (400).</p> </dd> + + + <dd> <p>Predefined font weight : Regular (400).</p> </dd> + + + <dd> <p>Predefined font weight : Medium (500).</p> </dd> + + + <dd> <p>Predefined font weight : Demi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Bold (700).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Black (900).</p> </dd> + + + <dd> <p>Predefined font weight : Heavy (900).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-black (950).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-black (950).</p> </dd> + + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Represents the style of a font face as normal, italic, or oblique.</p> + <p>Three terms categorize the slant of a font: normal, italic, and oblique. </p><table> <tr><th>Font style</th><th>Description</th></tr> <tr><td>Normal</td><td>The characters in a normal, or roman, font are upright. +</td></tr> <tr><td>Italic +</td><td>The characters in an italic font are truly slanted and appear as they were designed. +</td></tr> <tr><td>Oblique</td><td>The characters in an oblique font are artificially slanted.</td></tr> </table><p>?</p><p>For Oblique, the slant is achieved by performing a shear transformation on the characters from a normal font. When a true italic font is not available on a computer or printer, an oblique style can be generated from the normal font and used to simulate an italic font. The following illustration shows the normal, italic, and oblique font styles for the Palatino Linotype font. Notice how the italic font style has a more flowing and visually appealing appearance than the oblique font style, which is simply created by skewing the normal font style version of the text.</p><p></p><strong>Note</strong>?? Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font {{API}} functions.? + + + <dd> <p>Font style : Normal.</p> </dd> + + + <dd> <p>Font style : Oblique. </p> </dd> + + + <dd> <p>Font style : Italic.</p> </dd> + + + + + <p>The informational string enumeration which identifies a string embedded in a font file.</p> + + + <dd> <p>Indicates the string containing the unspecified name {{ID}}.</p> </dd> + + + <dd> <p>Indicates the string containing the copyright notice provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing a version number.</p> </dd> + + + <dd> <p>Indicates the string containing the trademark information provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font manufacturer.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font designer.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font designer (with protocol, e.g., http://, ftp://).</p> </dd> + + + <dd> <p>Indicates the string containing the description of the font. This may also contain revision information, usage recommendations, history, features, and so on.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the {{URL}}, it can be used to register the font.</p> </dd> + + + <dd> <p>The full name of the font, like Arial Bold, from <em>name id 4</em> in the name table</p> </dd> + + + <dd> <p>Indicates the string containing the description of how the font may be legally used, or different example scenarios for licensed use.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} where additional licensing information can be found.</p> </dd> + + + <dd> <p>Indicates the string containing the {{GDI}}-compatible family name. Since {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names (e.g., "Arial", "Arial Narrow", "Arial Black").</p> </dd> + + + <dd> <p>Indicates the string containing a {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Indicates the string containing the family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Indicates the string containing the subfamily name preferred by the designer. This name is typically only present if it differs from the {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Contains sample text for display in font lists. This can be the font name or any other text that the designer thinks is the best example to display the font in.</p> </dd> + + + <dd> <p>The postscript name of the font, like GillSans-Bold, from <em>name id 6</em> in the name table.</p> </dd> + + + <dd> <p>The postscript {{CID}} findfont name, from <em>name id 20</em> in the name table</p> </dd> + + + + + <p>Specifies the type of DirectWrite factory object.</p> + <p>A DirectWrite factory object contains information about its internal state, such as font loader registration and cached font data. In most cases you should use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state information, thereby reducing memory usage. However, there are cases when it is desirable to reduce the impact of a component on the rest of the process, such as a plug-in from an untrusted source, by sandboxing and isolating it from the rest of the process components. In such cases, you should use an isolated factory for the sandboxed component.</p> + + + <dd> <p>Indicates that the DirectWrite factory is a shared factory and that it allows for the reuse of cached font data across multiple in-process components. Such factories also take advantage of cross process font caching components for better performance.</p> </dd> + + + <dd> <p>Indicates that the DirectWrite factory object is isolated. Objects created from the isolated factory do not interact with internal DirectWrite state from other components.</p> </dd> + + + + + <p> Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. +</p> + + + <dd> <p>The red, green, and blue color components of each pixel are assumed to occupy the same point.</p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with red on the left, green in the center, and blue on the right. This is the most common pixel geometry for {{LCD}} monitors. </p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with blue on the left, green in the center, and red on the right.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p> Specifies the direction in which reading progresses. </p><strong>Note</strong>??<strong>{{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}</strong> and <strong>{{DWRITE_READING_DIRECTION_BOTTOM_TO_TOP}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that reading progresses from left to right.</p> </dd> + + + <dd> <p>Indicates that reading progresses from right to left.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Indicates that reading progresses from top to bottom.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> Indicates that reading progresses from bottom to top.</p> </dd> + + + + + <p> Indicates the direction of how lines of text are placed relative to one another. </p> + + + <dd> <p>Specifies that text lines are placed from top to bottom.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from bottom to top.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from left to right.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from right to left.</p> </dd> + + + + + <p>Specifies the alignment of paragraph text along the reading direction axis, relative to the leading and trailing edge of the layout box.</p> + + + <dd> <p>The leading edge of the paragraph text is aligned to the leading edge of the layout box.</p> </dd> + + + <dd> <p>The trailing edge of the paragraph text is aligned to the trailing edge of the layout box.</p> </dd> + + + <dd> <p>The center of the paragraph text is aligned to the center of the layout box.</p> </dd> + + + <dd> <p>Align text to the leading side, and also justify text to fill the lines.</p> </dd> + + + + + <p> Specifies the alignment of paragraph text along the flow direction axis, relative to the top and bottom of the flow's layout box. </p> + + + <dd> <p>The top of the text flow is aligned to the top edge of the layout box.</p> </dd> + + + <dd> <p>The bottom of the text flow is aligned to the bottom edge of the layout box.</p> </dd> + + + <dd> <p>The center of the flow is aligned to the center of the layout box.</p> </dd> + + + + + <p> Specifies the word wrapping to be used in a particular multiline paragraph. </p><strong>Note</strong>??<strong>{{DWRITE_WORD_WRAPPING_EMERGENCY_BREAK}}</strong>, <strong>{{DWRITE_WORD_WRAPPING_WHOLE}} _WORD</strong>, and <strong>{{DWRITE_WORD_WRAPPING_CHARACTER}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that words are broken across lines to avoid text overflowing the layout box.</p> </dd> + + + <dd> <p>Indicates that words are kept within the same line even when it overflows the layout box. This option is often used with scrolling to reveal overflow text.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Words are broken across lines to avoid text overflowing the layout box. Emergency wrapping occurs if the word is larger than the maximum width. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> When emergency wrapping, only wrap whole words, never breaking words when the layout width is too small for even a single word. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Wrap between any valid character clusters.</p> </dd> + + + + + <p>The method used for line spacing in a text layout.</p> + <p>The line spacing method is set by using the <strong>SetLineSpacing</strong> method of the <strong>{{IDWriteTextFormat}}</strong> or <strong>{{IDWriteTextLayout}}</strong> interfaces. To get the current line spacing method of a text format or text layou use the <strong>GetLineSpacing</strong>.</p> + + + <dd> <p>Line spacing depends solely on the content, adjusting to accommodate the size of fonts and inline objects.</p> </dd> + + + <dd> <p>Lines are explicitly set to uniform spacing, regardless of the size of fonts and inline objects. This can be useful to avoid the uneven appearance that can occur from font fallback.</p> </dd> + + + <dd> <p>Line spacing and baseline distances are proportional to the computed values based on the content, the size of the fonts and inline objects. </p> <strong>Note</strong>??This value is only available on Windows?10 or later and it can be used with <strong>{{IDWriteTextLayout3::SetLineSpacing}}</strong>, but can not be used with <strong>{{IDWriteTextFormat::SetLineSpacing}}</strong>. ? </dd> + + + + + <p>Specifies the text granularity used to trim text overflowing the layout box.</p> + + + <dd> <p>No trimming occurs. Text flows beyond the layout width.</p> </dd> + + + <dd> <p>Trimming occurs at a character cluster boundary.</p> </dd> + + + <dd> <p>Trimming occurs at a word boundary.</p> </dd> + + + + + <p>A value that indicates the typographic feature of text supplied by the font.</p> + + + <dd> <p>The default.</p> </dd> + + + <dd> <p>Indicates that the font is displayed vertically.</p> </dd> + + + <dd> <p>Replaces normal figures with figures adjusted for vertical display.</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with an alternative form.</p> <p><strong>Equivalent OpenType tag:</strong> 'afrc' </p> </dd> + + + <dd> <p> Turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.</p> <p><strong>Equivalent OpenType tag:</strong> 'c2pc'</p> </dd> + + + <dd> <p>Turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text. </p> <p><strong>Equivalent OpenType tag:</strong> 'c2sc'</p> </dd> + + + <dd> <p> In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.</p> <p><strong>Equivalent OpenType tag:</strong> 'calt'</p> </dd> + + + <dd> <p> Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.</p> <p><strong>Equivalent OpenType tag:</strong> 'case'</p> </dd> + + + <dd> <p> To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called.</p> <p><strong>Equivalent OpenType tag:</strong> 'ccmp'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.</p> <p><strong>Equivalent OpenType tag:</strong> 'clig'</p> </dd> + + + <dd> <p> Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons. </p> <p><strong>Equivalent OpenType tag:</strong> 'cpsp'</p> </dd> + + + <dd> <p>Replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character. </p> <p><strong>Equivalent OpenType tag:</strong> 'cswh'</p> </dd> + + + <dd> <p> In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'curs'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user's preference.</p> <p><strong>Equivalent OpenType tag:</strong> 'dlig'</p> </dd> + + + <dd> <p> Replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. For example, a user would invoke this feature to replace kanji character U+5516 with U+555E. +</p> <p><strong>Equivalent OpenType tag:</strong> 'expt'</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with 'common' (diagonal) fractions.</p> <p><strong>Equivalent OpenType tag:</strong> 'frac'</p> </dd> + + + <dd> <p> Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a {{CJKV}} font, this may include "lower {{ASCII}}" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. For example, a user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions.</p> <p><strong>Equivalent OpenType tag:</strong> 'fwid'</p> </dd> + + + <dd> <p> Produces the half forms of consonants in Indic scripts. For example, in Hindi (Devanagari script), the conjunct {{KKa}}, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form. </p> <p><strong>Equivalent OpenType tag:</strong> 'half'</p> </dd> + + + <dd> <p> Produces the halant forms of consonants in Indic scripts. For example, in Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form.</p> <p><strong>Equivalent OpenType tag:</strong> 'haln'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'halt'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. </p> <p><strong>Equivalent OpenType tag:</strong> 'hist'</p> </dd> + + + <dd> <p> Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color.</p> <p><strong>Equivalent OpenType tag:</strong> 'hkna'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.</p> <p><strong>Equivalent OpenType tag:</strong> 'hlig'</p> </dd> + + + <dd> <p> Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many {{CJKV}} fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents.</p> <p><strong>Equivalent OpenType tag:</strong> 'hwid'</p> </dd> + + + <dd> <p> Used to access the {{JIS}} X 0212-1990 glyphs for the cases when the {{JIS}} X 0213:2004 form is encoded. The {{JIS}} X 0212-1990 (aka, "Hojo Kanji") and {{JIS}} X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both {{JIS}} X 0212-1990 and {{JIS}} X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that {{JIS}} X 0213:2004 forms be the preferred encoded form.</p> <p><strong>Equivalent OpenType tag:</strong> 'hojo'</p> </dd> + + + <dd> <p> The National Language Council ({{NLC}}) of Japan has defined new glyph shapes for a number of {{JIS}} characters, which were incorporated into {{JIS}} X 0213:2004 as new prototypical forms. The 'jp04' feature is A subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of {{JIS}} X 0213:2004.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp04'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} C 6226-1978 ({{JIS78}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp78'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} X 0208-1983 ({{JIS83}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp83'</p> </dd> + + + <dd> <p> Replaces Japanese glyphs from the {{JIS78}} or {{JIS83}} specifications with the corresponding forms from the {{JIS}} X 0208-1990 ({{JIS90}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp90'</p> </dd> + + + <dd> <p> Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.</p> <p><strong>Equivalent OpenType tag:</strong> 'kern'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.</p> <p><strong>Equivalent OpenType tag:</strong> 'liga'</p> </dd> + + + <dd> <p>Changes selected figures from oldstyle to the default lining form. For example, a user may invoke this feature in order to get lining figures, which fit better with all-capital text. This feature overrides results of the Oldstyle Figures feature (onum).</p> <p><strong>Equivalent OpenType tag:</strong> 'lnum'</p> </dd> + + + <dd> <p> Enables localized forms of glyphs to be substituted for default forms. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct. </p> <p><strong>Equivalent OpenType tag:</strong> 'locl'</p> </dd> + + + <dd> <p> Positions mark glyphs with respect to base glyphs. For example, in Arabic script positioning the Hamza above the Yeh.</p> <p><strong>Equivalent OpenType tag: </strong> 'mark'</p> </dd> + + + <dd> <p> Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).</p> <p><strong>Equivalent OpenType tag:</strong> 'mgrk'</p> </dd> + + + <dd> <p> Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. For example, in Arabic, the ligaturised mark Ha with Hamza above it can also be obtained by positioning these marks relative to one another.</p> <p><strong>Equivalent OpenType tag:</strong> 'mkmk'</p> </dd> + + + <dd> <p> Replaces default glyphs with various notational forms (such as glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.</p> <p><strong>Equivalent OpenType tag:</strong> 'nalt'</p> </dd> + + + <dd> <p> Used to access glyphs made from glyph shapes defined by the National Language Council ({{NLC}}) of Japan for a number of {{JIS}} characters in 2000. </p> <p><strong>Equivalent OpenType tag:</strong> 'nlck'</p> </dd> + + + <dd> <p> Changes selected figures from the default lining style to oldstyle form. For example, a user may invoke this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. This feature overrides results of the Lining Figures feature (lnum).</p> <p><strong>Equivalent OpenType tag:</strong> 'onum'</p> </dd> + + + <dd> <p> Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.</p> <p><strong>Equivalent OpenType tag:</strong> 'ordn'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs ({{GPOS}}, not {{GSUB}} feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated).</p> <p><strong>Equivalent OpenType tag:</strong> 'palt'</p> </dd> + + + <dd> <p>Turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and it is referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia). </p> <p><strong>Equivalent OpenType tag:</strong> 'pcap'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'pnum'</p> </dd> + + + <dd> <p> Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in {{CJKV}} fonts, but may also be used for Kana in Japanese fonts.</p> <p><strong>Equivalent OpenType tag:</strong> 'pwid'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'qwid'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to ensure correct glyph formation. </p> <p><strong>Equivalent OpenType tag:</strong> 'rlig'</p> </dd> + + + <dd> <p> Identifies glyphs in the font which have been designed for "ruby", from the old typesetting term for four-point-sized type. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. </p> <p><strong>Equivalent OpenType tag:</strong> 'ruby'</p> </dd> + + + <dd> <p> Replaces the default forms with the stylistic alternates. Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. </p> <p><strong>Equivalent OpenType tag:</strong> 'salt'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors.</p> <p><strong>Equivalent OpenType tag:</strong> 'sinf'</p> </dd> + + + <dd> <p> Turns lowercase characters into small capitals. This corresponds to the common {{SC}} font layout. It is generally used for display lines set in Large &amp; small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included.</p> <p><strong>Equivalent OpenType tag:</strong> 'smcp'</p> </dd> + + + <dd> <p> Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'smpl'</p> </dd> + + + <dd> <p> In addition to, or instead of, stylistic alternatives of individual glyphs (see 'salt' feature), some fonts may contain sets of stylistic variant glyphs corresponding to portions of the character set, such as multiple variants for lowercase letters in a Latin font. Glyphs in stylistic sets may be designed to harmonise visually, interract in particular ways, or otherwise work together. Examples of fonts including stylistic sets are Zapfino Linotype and Adobe's Poetica. Individual features numbered sequentially with the tag name convention 'ss01' 'ss02' 'ss03' . 'ss20' provide a mechanism for glyphs in these sets to be associated via {{GSUB}} lookup indexes to default forms and to each other, and for users to select from available stylistic sets</p> <p><strong>Equivalent OpenType tag:</strong> 'ss01'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss02'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss03'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss04'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss05'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss06'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss07'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss08'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss09'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss10'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss11'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss12'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss13'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss14'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss15'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss16'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss17'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss18'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss19'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss20'</p> </dd> + + + <dd> <p> May replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement.</p> <p><strong>Equivalent OpenType tag:</strong> 'subs'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles).</p> <p><strong>Equivalent OpenType tag:</strong> 'sups'</p> </dd> + + + <dd> <p> Replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character.</p> <p><strong>Equivalent OpenType tag:</strong> 'swsh'</p> </dd> + + + <dd> <p> Replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes.</p> <p><strong>Equivalent OpenType tag:</strong> 'titl'</p> </dd> + + + <dd> <p> Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts).</p> <p><strong>Equivalent OpenType tag:</strong> 'tnam'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'tnum'</p> </dd> + + + <dd> <p> Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'trad'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'twid'</p> </dd> + + + <dd> <p> Maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. +</p> <p><strong>Equivalent OpenType tag:</strong> 'unic'</p> </dd> + + + <dd> <p>Allows the user to change from the default 0 to a slashed form. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. </p> <p><strong>Equivalent OpenType tag:</strong> 'zero'</p> </dd> + + + + + <p>Indicates additional shaping requirements for text.</p> + + + <dd> <p>Indicates that there is no additional shaping requirements for text. Text is shaped with the writing system default behavior.</p> </dd> + + + <dd> <p>Indicates that text should leave no visible control or format control characters.</p> </dd> + + + + + <p> Indicates the condition at the edges of inline object or text used to determine line-breaking behavior.</p> + + + <dd> <p> Indicates whether a break is allowed by determining the condition of the neighboring text span or inline object.</p> </dd> + + + <dd> <p> Indicates that a line break is allowed, unless overruled by the condition of the neighboring text span or inline object, either prohibited by a "may not break" condition or forced by a "must break" condition. </p> </dd> + + + <dd> <p> Indicates that there should be no line break, unless overruled by a "must break" condition from the neighboring text span or inline object. </p> </dd> + + + <dd> <p> Indicates that the line break must happen, regardless of the condition of the adjacent text span or inline object. </p> </dd> + + + + + <p>Specifies how to apply number substitution on digits and related punctuation.</p> + + + <dd> <p>Specifies that the substitution method should be determined based on the {{LOCALE_IDIGITSUBSTITUTION}} value of the specified text culture.</p> </dd> + + + <dd> <p>If the culture is Arabic or Persian, specifies that the number shapes depend on the context. Either traditional or nominal number shapes are used, depending on the nearest preceding strong character or (if there is none) the reading direction of the paragraph.</p> </dd> + + + <dd> <p>Specifies that code points 0x30-0x39 are always rendered as nominal numeral shapes (ones of the European number), that is, no substitution is performed.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the national number shapes as specified by the {{LOCALE_SNATIVEDIGITS}} value of the specified text culture.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the traditional shapes for the specified culture. For most cultures, this is the same as NativeNational. However, NativeNational results in Latin numbers for some Arabic cultures, whereasDWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL results in arabic numbers for all Arabic cultures.</p> </dd> + + + + + <p>Identifies a type of alpha texture.</p> + <p>An alpha texture is a bitmap of alpha values, each representing opacity of a pixel or subpixel.</p> + + + <dd> <p>Specifies an alpha texture for aliased text rendering (that is, each pixel is either fully opaque or fully transparent), with one byte per pixel.</p> </dd> + + + <dd> <p>Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and one byte per pixel in the vertical dimension.</p> </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + + + <dd> <p>The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.</p> </dd> + + + <dd> <p>The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of <strong>ascent</strong>, <strong>descent</strong>, and <strong>lineGap</strong>. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.</p> </dd> + + + <dd> <p>The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.</p> </dd> + + + <dd> <p>The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.</p> </dd> + + + <dd> <p>The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.</p> </dd> + + + <dd> <p>The suggested underline thickness value of the font face in font design units.</p> </dd> + + + <dd> <p>The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.</p> </dd> + + + <dd> <p>The suggested strikethrough thickness value of the font face in font design units.</p> </dd> + + + + + <p>Specifies the metrics of an individual glyph. The units depend on how the metrics are obtained.</p> + + + <dd> <p>Specifies the X offset from the glyph origin to the left edge of the black box. The glyph origin is the current horizontal writing position. A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').</p> </dd> + + + <dd> <p>Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.</p> </dd> + + + <dd> <p>Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally. The value is negative when the right edge of the black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the vertical offset from the vertical origin to the top of the black box. Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.</p> </dd> + + + <dd> <p>Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically. Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different. Its Y coordinate is specified by <strong>verticalOriginY</strong> value, and its X coordinate is half the <strong>advanceWidth</strong> to the right of the horizontal origin.</p> </dd> + + + <dd> <p>Specifies the vertical distance from the bottom edge of the black box to the advance height. This is positive when the bottom edge of the black box is within the layout box, or negative when the bottom edge of black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system. The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing and the top (that is, yMax) of the glyph's bounding box.</p> </dd> + + + + + <p>The optional adjustment to a glyph's position.</p> + <p>An glyph offset changes the position of a glyph without affecting the pen position. Offsets are in logical, pre-transform units.</p> + + + <dd> <p>The offset in the advance direction of the run. A positive advance offset moves the glyph to the right (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.</p> </dd> + + + <dd> <p>The offset in the ascent direction, that is, the direction ascenders point. A positive ascender offset moves the glyph up (in pre-transform coordinates). A negative ascender offset moves the glyph down.</p> </dd> + + + + + <p>The <strong>{{DWRITE_MATRIX}}</strong> structure specifies the graphics transform to be applied to rendered glyphs.</p> + + + <dd> <p>A value indicating the horizontal scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical shear / sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shear / negative sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shift (always orthogonal regardless of rotation).</p> </dd> + + + <dd> <p>A value indicating the vertical shift (always orthogonal regardless of rotation.)</p> </dd> + + + + + <p>Specifies a range of text positions where format is applied in the text represented by an <strong>{{IDWriteTextLayout}}</strong> object.</p> + + + + <p>Specifies properties used to identify and execute typographic features in the current font face.</p> + <p>A non-zero value generally enables the feature execution, while the zero value disables it. A feature requiring a selector uses this value to indicate the selector index.</p><p>The OpenType standard provides access to typographic features available in the font by means of a feature tag with the associated parameters. The OpenType feature tag is a 4-byte identifier of the registered name of a feature. For example, the 'kern' feature name tag is used to identify the 'Kerning' feature in OpenType font. Similarly, the OpenType feature tag for 'Standard Ligatures' and 'Fractions' is 'liga' and 'frac' respectively. Since a single run can be associated with more than one typographic features, the Text String {{API}} accepts typographic settings for a run as a list of features and are executed in the order they are specified.</p><p>The value of the tag member represents the OpenType name tag of the feature, while the param value represents additional parameter for the execution of the feature referred by the tag member. Both <strong>nameTag</strong> and <strong>parameter</strong> are stored as little endian, the same convention followed by {{GDI}}. Most features treat the Param value as a binary value that indicates whether to turn the execution of the feature on or off, with it being off by default in the majority of cases. Some features, however, treat this value as an integral value representing the integer index to the list of alternate results it may produce during the execution; for instance, the feature 'Stylistic Alternates' or 'salt' uses the <strong>parameter</strong> value as an index to the list of alternate substituting glyphs it could produce for a specified glyph. </p> + + + <dd> <p>The feature OpenType name identifier.</p> </dd> + + + <dd> <p>The execution parameter of the feature.</p> </dd> + + + + + <p>Contains a set of typographic features to be applied during text shaping.</p> + + + <dd> <p>A reference to a structure that specifies properties used to identify and execute typographic features in the font.</p> </dd> + + + <dd> <p>A value that indicates the number of features being applied to a font face.</p> </dd> + + + + + <p>Specifies the trimming option for text overflowing the layout box. </p> + + + <dd> <p>A value that specifies the text granularity used to trim text overflowing the layout box.</p> </dd> + + + <dd> <p>A character code used as the delimiter that signals the beginning of the portion of text to be preserved. Text starting from the Nth occurence of the delimiter (where N equals delimiterCount) counting backwards from the end of the text block will be preserved. For example, given the text is a path like c:\A\B\C\D\file.txt and delimiter equal to '\' and delimiterCount equal to 1, the file.txt portion of the text would be preserved. Specifying a delimiterCount of 2 would preserve D\file.txt. </p> </dd> + + + <dd> <p>The delimiter count, counting from the end of the text, to preserve text from.</p> </dd> + + + + + <p>Stores the association of text and its writing system script, as well as some display attributes.</p> + + + <dd> <p>The zero-based index representation of writing system script.</p> </dd> + + + <dd> <p>A value that indicates additional shaping requirement of text.</p> </dd> + + + + + <p>Line breakpoint characteristics of a character.</p> + + + <dd> <p>Indicates a breaking condition before the character.</p> </dd> + + + <dd> <p>Indicates a breaking condition after the character.</p> </dd> + + + <dd> <p>Indicates that the character is some form of whitespace, which may be meaningful for justification.</p> </dd> + + + <dd> <p>Indicates that the character is a soft hyphen, often used to indicate hyphenation points inside words.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph is shaped alone.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph has justification applied.</p> </dd> + + + <dd> <p>Indicates that the glyph is the start of a cluster.</p> </dd> + + + <dd> <p>Indicates that the glyph is a diacritic mark.</p> </dd> + + + <dd> <p>Indicates that the glyph is a word boundary with no visible space.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs. All coordinates are in device independent pixels ({{DIPs}}). </p> + + + <dd> <p>The physical font face object to draw with.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIPs}} (equals 1/96 inch), not points.</p> </dd> + + + <dd> <p>The number of glyphs in the glyph run.</p> </dd> + + + <dd> <p>A reference to an array of indices to render for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph advance widths for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph offsets for the glyph run.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying <strong>isSideways</strong> = true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The implicit resolved bidi level of the run. Odd levels indicate right-to-left languages like Hebrew and Arabic, while even levels indicate left-to-right languages like English and Japanese (when written horizontally). For right-to-left languages, the text origin is on the right, and text should be drawn to the left.</p> </dd> + + + + + <p>Contains additional properties related to those in <strong>{{DWRITE_GLYPH_RUN}}</strong>.</p> + + + + <p>Contains information about the width, thickness, offset, run height, reading direction, and flow direction of an underline. </p> + <p>All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the underline, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the underline, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the underline from the baseline. A positive offset represents a position below the baseline (away from the text) and a negative offset is above (toward the text).</p> </dd> + + + <dd> <p>A value that indicates the height of the tallest run where the underline is applied.</p> </dd> + + + <dd> <p>A value that indicates the reading direction of the text associated with the underline. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>A value that indicates the flow direction of the text associated with the underline. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters which contains the locale of the text that the underline is being drawn under. For example, in vertical text, the underline belongs on the left for Chinese but on the right for Japanese. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information regarding the size and placement of strikethroughs. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the strikethrough, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the strikethrough, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the strikethrough from the baseline. A positive offset represents a position below the baseline and a negative offset is above. Typically, the offset will be negative.</p> </dd> + + + <dd> <p>Reading direction of the text associated with the strikethrough. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>Flow direction of the text associated with the strikethrough. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters containing the locale of the text that is the strikethrough is being drawn over. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + + + <p>Contains information about a glyph cluster.</p> + + + <dd> <p>The total advance width of all glyphs in the cluster.</p> </dd> + + + <dd> <p>The number of text positions in the cluster.</p> </dd> + + + <dd> <p>Indicates whether a line can be broken right after the cluster.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a whitespace character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a newline character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a soft hyphen character.</p> </dd> + + + <dd> <p>Indicates whether the cluster is read from right to left.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains properties describing the geometric measurement of an +application-defined inline object.</p> + + + <dd> <p>The width of the inline object.</p> </dd> + + + <dd> <p>The height of the inline object.</p> </dd> + + + <dd> <p>The distance from the top of the object to the point where it is lined up with the adjacent text. If the baseline is at the bottom, then <strong>baseline</strong> simply equals <strong>height</strong>.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the object is to be placed upright or alongside the text baseline for vertical text.</p> </dd> + + + + + <p>Indicates how much any visible {{DIPs}} (device independent pixels) overshoot each side of the layout or inline objects.</p><p>Positive overhangs indicate that the visible area extends outside the layout box or inline object, while negative values mean there is whitespace inside. The returned values are unaffected by rendering transforms or pixel snapping. Additionally, they may not exactly match the final target's pixel bounds after applying grid fitting and hinting.</p> + + + <dd> <p>The distance from the left-most visible {{DIP}} to its left-alignment edge.</p> </dd> + + + <dd> <p>The distance from the top-most visible {{DIP}} to its top alignment edge.</p> </dd> + + + <dd> <p>The distance from the right-most visible {{DIP}} to its right-alignment edge.</p> </dd> + + + <dd> <p>The distance from the bottom-most visible {{DIP}} to its lower-alignment edge.</p> </dd> + + + + + <p>Describes the region obtained by a hit test.</p> + + + <dd> <p>The first text position within the hit region. </p> </dd> + + + <dd> <p>The number of text positions within the hit region. </p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The width of the hit region.</p> </dd> + + + <dd> <p>The height of the hit region.</p> </dd> + + + <dd> <p>The <strong>{{BIDI}} level</strong> of the text positions within the hit region.</p> </dd> + + + <dd> <p>true if the hit region contains text; otherwise, false.</p> </dd> + + + <dd> <p>true if the text range is trimmed; otherwise, false.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Releases a fragment from a file. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the client-defined context of a font fragment returned from <strong>ReadFileFragment</strong>.</p> </dd> + + + + + <p> Obtains the total size of a file. </p> + <p> Implementing <strong>GetFileSize</strong>() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the total size of the file.</p> </dd> + + + + + <p> Obtains the last modified time of the file. </p> + <p>The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 ({{UTC}}).</p> </dd> + + + + + <p> Handles loading font file resources of a particular type from a font file reference key into a font file stream object. </p> + <p>The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file stream object that encapsulates an open file resource. </p> + <p>The resource is closed when the last reference to <em>fontFileStream</em> is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by <em> fontFileReferenceKeySize</em>.</p> </dd> + + + <dd> <p>The size of font file reference key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFontFileStream}}</strong> object.</p> </dd> + + + + + <p>A built-in implementation of the <strong>{{IDWriteFontFileLoader}}</strong> interface, that operates on local font files +and exposes local font file information from the font file reference key. Font file references created using <strong>CreateFontFileReference</strong> use this font file loader.</p> + + + + <p>Obtains the length of the absolute file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>Size of font file reference key in bytes.</p> </dd> + + + <dd> <p>Length of the file path string, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + + + <p>Obtains the absolute font file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The character array that receives the local file path.</p> </dd> + + + <dd> <p>The length of the file path character array.</p> </dd> + + + + + <p>Obtains the last write time of the file from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The time of the last font file modification.</p> </dd> + + + + + <p> Represents a font file. Applications such as font managers or font viewers can call <strong>{{IDWriteFontFile::Analyze}}</strong> to find out if a particular file is a font file, and whether it is a font type that is supported by the font system.</p> + + + + <p> Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font file reference key. Note that the reference value is only valid until the font file object it is obtained from is released. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font file reference key in bytes. This parameter is passed uninitialized.</p> </dd> + + + + + <p> Obtains the file loader associated with a font file object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the font file loader associated with the font file object.</p> </dd> + + + + + <p> Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system. </p> + <strong>Important</strong>??Certain font file types are recognized, but not supported by the font system. For example, the font system will recognize a file as a Type 1 font file but will not be able to construct a font face object from it. In such situations, <strong>Analyze</strong> will set <em>isSupportedFontType</em> output parameter to <strong>{{FALSE}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the font type is supported by the font system; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font file. Note that even if <em> isSupportedFontType</em> is <strong>{{FALSE}}</strong>, the <em>fontFileType</em> value may be different from <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font face. If <em>fontFileType</em> is not equal to <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>, then that can be constructed from the font file. </p> </dd> + + + <dd> <p>When this method returns, contains the number of font faces contained in the font file.</p> </dd> + + + + + <p> Represents text rendering settings such as ClearType level, enhanced contrast, and gamma correction for glyph rasterization and filtering.</p><p>An application typically obtains a rendering parameters object by calling the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p> + + + + <p>Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + <p>The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.</p> + <p>Returns the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + + + + <p>Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.</p> + <p>Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.</p> + <p>Returns the amount of contrast enhancement. Valid values are greater than or equal to zero.</p> + + + + <p>Gets the ClearType level of the rendering parameters object. </p> + <p>The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)</p> + <p>The ClearType level of the rendering parameters object.</p> + + + + <p>Gets the pixel geometry of the rendering parameters object.</p> + <p> A value that indicates the type of pixel geometry used in the rendering parameters object.</p> + + + + <p>Gets the rendering mode of the rendering parameters object.</p> + <p>By default, the rendering mode is initialized to {{DWRITE_RENDERING_MODE_DEFAULT}}, which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the <strong>{{IDWriteFontFace::GetRecommendedRenderingMode}}</strong> method.</p> + <p>A value that indicates the rendering mode of the rendering parameters object.</p> + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p> Obtains the file format type of a font face. </p> + <p>A value that indicates the type of format for the font face (such as Type 1, TrueType, vector, or bitmap).</p> + + + + <p> Obtains the font files representing a font face. </p> + <p>The <strong>{{IDWriteFontFace::GetFiles}}</strong> method should be called twice. The first time you call <strong>GetFiles</strong><em>fontFiles</em> should be <strong>{{NULL}}</strong>. When the method returns, <em>numberOfFiles</em> receives the number of font files that represent the font face.</p><p>Then, call the method a second time, passing the <em>numberOfFiles</em> value that was output the first call, and a non-null buffer of the correct size to store the <strong>{{IDWriteFontFile}}</strong> references.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <em>fontFiles</em> is <strong>{{NULL}}</strong>, receives the number of files representing the font face. Otherwise, the number of font files being requested should be passed. See the Remarks section below for more information.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a user-provided array that stores references to font files representing the font face. This parameter can be <strong>{{NULL}}</strong> if the user wants only the number of files representing the font face. This {{API}} increments reference count of the font file references returned according to {{COM}} conventions, and the client should release them when finished.</p> </dd> + + + + + <p> Obtains the index of a font face in the context of its font files. </p> + <p>The zero-based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value is zero.</p> + + + + <p> Obtains the algorithmic style simulation flags of a font face. </p> + <p>Font face simulation flags for algorithmic means of making text bold or italic.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p>Returns <strong>{{TRUE}}</strong> if the font is a symbol font, otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, a?<strong>{{DWRITE_FONT_METRICS}}</strong> structure that holds metrics (such as ascent, descent, or cap height) for the current font face element. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Obtains the number of glyphs in the font face. </p> + <p>The number of glyphs in the font face.</p> + + + + <p> Obtains ideal (resolution-independent) glyph metrics in font design units. </p> + <p>Design glyph metrics are used for glyph positioning.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains an array of {{DWRITE_GLYPH_METRICS}} structures. <em>glyphMetrics</em> must be initialized with an empty buffer that contains at least as many elements as <em>glyphCount</em>. The metrics returned by this function are in font design units.</p> </dd> + + + <dd> <p>Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation</p> </dd> + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p> Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the <strong>{{IDWriteFontFileStream}}</strong> interface implemented by the font file loader. </p> + <p> The context for the same tag may be different for each call, so each one must be held and released separately. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases the table obtained earlier from <strong>TryGetFontTable</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Computes the outline of a run of glyphs by calling back to the outline sink interface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of glyph indices. The glyphs are in logical order and the advance direction depends on the <em>isRightToLeft</em> parameter. The array must be allocated and be able to contain the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph advances in {{DIPs}}. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. <em>glyphAdvances</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. <em>glyphOffsets</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of glyphs in the run.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the ascender of the glyph runs alongside the baseline. If <strong>{{FALSE}}</strong>, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have <em>isSideways</em> set to <strong>{{FALSE}}</strong>.</p> <p>A client can render a vertical run by setting <em>isSideways</em> to <strong>{{TRUE}}</strong> and rotating the resulting geometry 90 degrees to the right using a transform. The <em>isSideways</em> and <em>isRightToLeft</em> parameters cannot both be true.</p> </dd> + + + <dd> <p>The visual order of the glyphs. If this parameter is <strong>{{FALSE}}</strong>, then glyph advances are from left to right. If <strong>{{TRUE}}</strong>, the advance direction is right to left. By default, the advance direction is left to right.</p> </dd> + + + <dd> <p>A reference to the interface that is called back to perform outline drawing operations.</p> </dd> + + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>A reference to an object that contains rendering settings such as gamma level, enhanced contrast, and ClearType level. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRIC}}</strong>S structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Obtains glyph metrics in font design units with the return values compatible with what {{GDI}} would produce.</p> + <p>Standard <strong>{{HRESULT}}</strong> error code. If any of the input glyph indices are outside of the valid glyph index range for the current font face, <strong>{{E_INVALIDARG}}</strong> will be returned.</p> + + + <dd> <p>The ogical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>When set to <strong>{{FALSE}}</strong>, the metrics are the same as the metrics of {{GDI}} aliased text. When set to <strong>{{TRUE}}</strong>, the metrics are the same as the metrics of text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>.</p> </dd> + + + <dd> <p>An array of glyph indices for which to compute the metrics.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_GLYPH_METRICS}}</strong> structures filled by this function. The metrics are in font design units.</p> </dd> + + + <dd> <p>A {{BOOL}} value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation.</p> </dd> + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Gets an object which represents the set of installed fonts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the system font collection object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + <dd> <p>If this parameter is nonzero, the function performs an immediate check for changes to the set of installed fonts. If this parameter is <strong>{{FALSE}}</strong>, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify <strong>{{TRUE}}</strong> if it has itself just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p> Creates a font collection using a custom font collection loader. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined font collection loader, which must have been previously registered using <strong>RegisterFontCollectionLoader</strong>.</p> </dd> + + + <dd> <p>The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of the collection key.</p> </dd> + + + <dd> <p>Contains an address of a reference to the system font collection object if the method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p>Registers a custom font collection loader with the factory object. </p> + <p>This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontCollectionLoader}}</strong> object to be registered.</p> </dd> + + + + + <p> Unregisters a custom font collection loader that was previously registered using <strong>RegisterFontCollectionLoader</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a font file reference object from a local font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided <em>filePath</em> doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided <em>lastWriteTime</em> doesn't match the file on the disk.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font file reference object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a reference to an application-specific font file resource. </p> + <p> This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. <em>fontFileReferenceKey</em> has to be unique only in the scope of the <em>fontFileLoader</em> used in this call. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font file reference key that uniquely identifies the font file resource during the lifetime of <em>fontFileLoader</em>.</p> </dd> + + + <dd> <p>The size of the font file reference key in bytes.</p> </dd> + + + <dd> <p>The font file loader that will be used by the font system to load data from the file identified by <em>fontFileReferenceKey</em>.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font file object when this method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that represents a font face. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the type of file format of the font face.</p> </dd> + + + <dd> <p>The number of font files, in element count, required to represent the font face.</p> </dd> + + + <dd> <p>A font file object representing the font face. Because <strong>{{IDWriteFontFace}}</strong> maintains its own references to the input font file objects, you may release them after this call.</p> </dd> + + + <dd> <p>The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the How to Add Support for Multiple Monitors topic.</p> + <p>Standard {{HRESULT}} error code.</p> + + + + <p> Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle for the specified monitor.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the rendering parameters object created by this method.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p> Registers a font file loader with DirectWrite. </p> + <p> This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontFileLoader}}</strong> object for a particular file resource type.</p> </dd> + + + + + <p> Unregisters a font file loader that was previously registered with the DirectWrite font system using <strong>RegisterFontFileLoader</strong>. </p> + <p> This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a text format object used for text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the name of the font family</p> </dd> + + + <dd> <p>A reference to a font collection object. When this is <strong>{{NULL}}</strong>, indicates the system font collection.</p> </dd> + + + <dd> <p>A value that indicates the font weight for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font style for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font stretch for the text object created by this method.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIP}} ("device-independent pixel") units. A {{DIP}} equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of characters that contains the locale name.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created text format object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a typography object for use in a text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a newly created typography object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that is used for interoperability with {{GDI}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to a {{GDI}} interop object if successful, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The number of characters in the string.</p> </dd> + + + <dd> <p>A reference to an object that indicates the format to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the resultant text layout object.</p> </dd> + + + + + <p> Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. </p> + <p>The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired <strong>CreateTextLayout</strong> should be used instead.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The length of the string, in character count.</p> </dd> + + + <dd> <p>The text formatting object to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} device <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} device <em>pixelsPerDip</em> is 1.25 (120/96).</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per {{DIP}}.</p> </dd> + + + <dd> <p> Instructs the text layout to use the same metrics as {{GDI}} bi-level text when set to <strong>{{FALSE}}</strong>. When set to <strong>{{TRUE}}</strong>, instructs the text layout to use the same metrics as text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>. </p> </dd> + + + <dd> <p>When this method returns, contains an address to the reference of the resultant text layout object.</p> </dd> + + + + + <p> Creates an inline object for trimming, using an ellipsis as the omission sign. </p> + <p>The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing <strong>{{IDWriteInlineObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A text format object, created with <strong>CreateTextFormat</strong>, used for text layout.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the omission (that is, ellipsis trimming) sign created by this method.</p> </dd> + + + + + <p> Returns an interface for performing text analysis. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created text analyzer object.</p> </dd> + + + + + <p> Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use {{NLS}} defaults for the given culture instead). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies how to apply number substitution on digits and related punctuation.</p> </dd> + + + <dd> <p>The name of the locale to be used in the <em>numberSubstitution</em> object.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether to ignore user overrides.</p> </dd> + + + <dd> <p>When this method returns, contains an address to a reference to the number substitution object created by this method.</p> </dd> + + + + + <p>Specifies the mode used by a <strong>WriteBufferImmediate</strong> operation.</p> + + + <dd> <p>The write operation behaves the same as normal copy-write operations.</p> </dd> + + + <dd> <p>The write operation is guaranteed to occur after all preceding commands in the command stream have started, including previous <strong>WriteBufferImmediate</strong> operations.</p> </dd> + + + <dd> <p>The write operation is deferred until all previous commands in the command stream have completed through the {{GPU}} pipeline, including previous <strong>WriteBufferImmediate</strong> operations. Write operations that specify <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT}}</strong> don't block subsequent operations from starting. If there are no previous operations in the command stream, then the write operation behaves as if <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN}}</strong> was specified.</p> </dd> + + + + + <p> Creates a glyph run analysis object, which encapsulates information used to render a glyph run. </p> + <p>The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the properties of the glyph run (font face, advances, and so on).</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1.25.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the <em>emSize</em> and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline).</p> </dd> + + + <dd> <p>Specifies the measuring mode to use with glyphs.</p> </dd> + + + <dd> <p>The horizontal position (X-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position (Y-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created glyph run analysis object.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Gets a reference to the current font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, the address of a reference to the newly created <strong>{{IDWriteFontFile}}</strong> object.</p> </dd> + + + + + <p> Used to construct a collection of fonts given a particular type of key. </p> + <p>The font collection loader interface is recommended to be implemented by a singleton object. Note that font collection loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file enumerator object that encapsulates a collection of font files. The font system calls back to this interface to create a font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IDWriteFactory}}</strong> object that was used to create the current font collection.</p> </dd> + + + <dd> <p>A font collection key that uniquely identifies the collection of font files within the scope of the font collection loader being used. The buffer allocated for this key must be at least the size, in bytes, specified by <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size of the font collection key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font file enumerator.</p> </dd> + + + + + <p> Represents a collection of strings indexed by locale name.</p> + <p>The set of strings represented by an <strong>{{IDWriteLocalizedStrings}}</strong> are indexed by a zero based <em>{{UINT32}}</em> number that maps to a locale. The numeric index for a specific locale is retreived by using the <strong>FindLocaleName</strong> method.</p><p>A common use for the <strong>{{IDWriteLocalizedStrings}}</strong> interface is to hold a list of localized font family names created by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method. The following example shows how to get the family name for the "en-us" locale.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + + + + <p> Gets the number of language/string pairs. </p> + <p>The number of language/string pairs.</p> + + + + <p> Gets the zero-based index of the locale name/string pair with the specified locale name. </p> + <p>Note that if the locale name does not exist, the return value is a success and the <em>exists</em> parameter is <strong>{{FALSE}}</strong>. If you are getting the font family name for a font and the specified locale name does not exist, one option is to set the index to 0 as shown below. There is always at least one locale for a font family.</p><pre>{{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; +</pre> + <p>If the specified locale name does not exist, the return value is <strong>{{S_OK}}</strong>, but <em>index</em> is <strong>{{UINT_MAX}}</strong> and <em>exists</em> is <strong>{{FALSE}}</strong>. +</p> + + + <dd> <p>A null-terminated array of characters containing the locale name to look for.</p> </dd> + + + <dd> <p>The zero-based index of the locale name/string pair. This method initializes <em>index</em> to <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the locale name exists; otherwise, <strong>{{FALSE}}</strong>. This method initializes <em>exists</em> to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the locale name with the specified index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the length in characters of the locale name, not including the null terminator.</p> </dd> + + + + + <p> Copies the locale name with the specified index to the specified array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains a character array, which is null-terminated, that receives the locale name from the language/string pair. The buffer allocated for this array must be at least the size of <em>size</em>, in element count.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the string with the specified index. </p> + <p>Use <strong>GetStringLength</strong> to get the string length before calling the <strong>{{IDWriteLocalizedStrings::GetString}}</strong> method, as shown in the following code.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A zero-based index of the language/string pair.</p> </dd> + + + <dd> <p>The length in characters of the string, not including the null terminator, from the language/string pair.</p> </dd> + + + + + <p> Copies the string with the specified index to the specified array. </p> + <p>The string returned must be allocated by the caller. You can get the size of the string by using the <strong>GetStringLength</strong> method prior to calling <strong>GetString</strong>, as shown in the following example.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the language/string pair to be examined.</p> </dd> + + + <dd> <p>The null terminated array of characters that receives the string from the language/string pair. The buffer allocated for this array should be at least the size of <em>size</em>. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + + + <p>Represents a family of related fonts.</p> + <p>A font family is a set of fonts that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include style, such as italic, and weight, such as bold. The following illustration shows examples of fonts that are members of the "Times New Roman" font family.</p><p>An <strong>{{IDWriteFontFamily}}</strong> object can be retrieved from a font collection using the <strong>{{IDWriteFontCollection::GetFontFamily}}</strong> method shown in the following example. <strong>GetFontFamily</strong> takes a <strong>{{UINT32}}</strong> index and returns the font family for the font at that index.</p><pre>{{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); +} +</pre><p>The font family name is used to specify the font family for text layout and text format objects. You can get a list of localized font family names from an <strong>{{IDWriteFontFamily}}</strong> object in the form of an <strong>{{IDWriteLocalizedStrings}}</strong> object by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method, as shown in the following code.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} +</pre> + + + + <p> Creates a localized strings object that contains the family names for the font family, indexed by locale name. </p> + <p> The following code example shows how to get the font family name from a <strong>{{IDWriteFontFamily}}</strong> object.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The address of a reference to the newly created <strong>{{IDWriteLocalizedStrings}}</strong> object.</p> </dd> + + + + + <p> Gets the font that best matches the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Gets a list of fonts in the font family ranked in order of how well they match the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>An address of a reference to the newly created <strong>{{IDWriteFontList}}</strong> object.</p> </dd> + + + + + <p> Represents a physical font in a font collection. This interface is used to create font faces from physical fonts, or to retrieve information such as font face metrics or face names from existing font faces.</p> + + + + <p> Gets the font family to which the specified font belongs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font family object to which the specified font belongs.</p> </dd> + + + + + <p> Gets the weight, or stroke thickness, of the specified font. </p> + <p>A value that indicates the weight for the specified font.</p> + + + + <p> Gets the stretch, or width, of the specified font. </p> + <p>A value that indicates the type of stretch, or width, applied to the specified font.</p> + + + + <p> Gets the style, or slope, of the specified font. </p> + <p>A value that indicates the type of style, or slope, of the specified font.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p><strong>{{TRUE}}</strong> if the font is a symbol font; otherwise, <strong>{{FALSE}}</strong>.</p> + + + + <p> Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address to a reference to the newly created localized strings object.</p> </dd> + + + + + <p> Gets a localized strings collection containing the specified informational strings, indexed by locale name. </p> + <p> If the font does not contain the string specified by <em>informationalStringID</em>, the return value is <strong>{{S_OK}}</strong> but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that identifies the informational string to get. For example, <strong>{{DWRITE_INFORMATIONAL_STRING_DESCRIPTION}}</strong> specifies a string that contains a description of the font. </p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created localized strings object.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a value that indicates what simulations are applied to the specified font. </p> + <p> A value that indicates one or more of the types of simulations (none, bold, or oblique) applied to the specified font.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a structure that has font metrics for the current font face. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Determines whether the font supports a specified character. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value for the method to inspect.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font supports the specified character; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Creates a font face object for the font. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + <p>The <strong>{{IDWriteFactory::GetSystemFontCollection}}</strong> method will give you an <strong>{{IDWriteFontCollection}}</strong> object, which encapsulates the set of fonts installed on the system, as shown in the following code example.</p><pre>{{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. +if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); +} +</pre><p> <strong>{{IDWriteTextFormat}}</strong> and <strong>{{IDWriteTextLayout}}</strong> both have a <strong>GetFontCollection</strong> method that returns the font collection being used by the object. These interfaces use the system font collection by default, but can use a custom font collection instead.</p><p>To determine what fonts are available on the system, get a reference to the system font collection. You can then use the <strong>{{IDWriteFontCollection::GetFontFamilyCount}}</strong> method to determine the number of fonts and loop through the list. The following example enumerates the fonts in the system font collection, and prints the font family names to the console.</p><pre> #include &lt;dwrite.h&gt; +#include &lt;string.h&gt; +#include &lt;stdio.h&gt; +#include &lt;new&gt; // SafeRelease inline function. +template &lt;class T&gt; inline void SafeRelease(T **ppT) +{ if (*ppT) { (*ppT)-&gt;Release(); *ppT = {{NULL}}; } +} void wmain() +{ {{IDWriteFactory}}* pDWriteFactory = {{NULL}}; {{HRESULT}} hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory) ); {{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. if ({{SUCCEEDED}}(hr)) { hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); } {{UINT32}} familyCount = 0; // Get the number of font families in the collection. if ({{SUCCEEDED}}(hr)) { familyCount = pFontCollection-&gt;GetFontFamilyCount(); } for ({{UINT32}} i = 0; i &lt; familyCount; ++i) { {{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. if ({{SUCCEEDED}}(hr)) { hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); } {{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. if ({{SUCCEEDED}}(hr)) { hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); } {{UINT32}} index = 0; {{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } } // If the specified locale doesn't exist, select the first on the list. if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); } // Allocate a string big enough to hold the name. wchar_t* name = new (std::nothrow) wchar_t[length+1]; if (name == {{NULL}}) { hr = {{E_OUTOFMEMORY}}; } // Get the family name. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetString(index, name, length+1); } if ({{SUCCEEDED}}(hr)) { // Print out the family name. wprintf(L"%s\n", name); } SafeRelease(&amp;pFontFamily); SafeRelease(&amp;pFamilyNames); delete [] name; } SafeRelease(&amp;pFontCollection); SafeRelease(&amp;pDWriteFactory); +} </pre> + + + + <p> Gets the number of font families in the collection. </p> + <p>The number of font families in the collection.</p> + + + + <p> Creates a font family object given a zero-based font family index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font family.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font family object.</p> </dd> + + + + + <p> Finds the font family with the specified family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters, which is null-terminated, containing the name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.</p> </dd> + + + <dd> <p>When this method returns, contains the zero-based index of the matching font family if the family name was found; otherwise, <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the family name exists; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong to the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font face object that specifies the physical font.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets the font collection that contains the fonts in the font list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the current <strong>{{IDWriteFontCollection}}</strong> object.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets a font given its zero-based index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Represents a font typography setting.</p> + + + + <p> Adds an OpenType font feature. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the OpenType name identifier and the execution parameter for the font feature being added.</p> </dd> + + + + + <p> Gets the number of OpenType font features for the current font. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>The number of font features for the current text format.</p> + + + + <p> Gets the font feature at the specified index. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the font feature to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains the font feature which is at the specified index.</p> </dd> + + + + + <p> Wraps an application-defined inline graphic, allowing {{DWrite}} to query metrics as if the graphic were a glyph inline with the text.</p> + + + + <p> The application implemented rendering callback (<strong>{{IDWriteTextRenderer::DrawInlineObject}}</strong>) can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the measurement of the inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the visible extents (in {{DIPs}}) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes.</p><p>The overhangs should be returned relative to the reported size of the object (see <strong>{{DWRITE_INLINE_OBJECT_METRICS}}</strong>), and should not be baseline adjusted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Layout uses this to determine the line-breaking behavior of the inline object among the text. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it.</p> </dd> + + + + + <p> The <strong>{{IDWriteTextFormat}}</strong> interface describes the font and paragraph properties used to format text, and it describes locale information. </p> + <p> To get a reference to the <strong>{{IDWriteTextFormat}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextFormat}}</strong> method as shown in the following code.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory_-&gt;CreateTextFormat( L"Gabriola", {{NULL}}, {{DWRITE_FONT_WEIGHT_REGULAR}}, {{DWRITE_FONT_STYLE_NORMAL}}, {{DWRITE_FONT_STRETCH_NORMAL}}, 72.0f, L"en-us", &amp;pTextFormat_ ); +} </pre><p>When creating an <strong>{{IDWriteTextFormat}}</strong> object using the <strong>CreateTextFormat</strong> function, the application specifies the font family, font collection, font weight, font size, and locale name for the text format.</p><p>These properties cannot be changed after the <strong>{{IDWriteTextFormat}}</strong> object is created. To change these properties, a new <strong>{{IDWriteTextFormat}}</strong> object must be created with the desired properties.</p><p> The <strong>{{IDWriteTextFormat}}</strong> interface is used to draw text with a single format</p><p> To draw text with multiple formats, or to use a custom text renderer, use the <strong>{{IDWriteTextLayout}}</strong> interface. <strong>{{IDWriteTextLayout}}</strong> enables the application to change the format for ranges of text within the string. The <strong>{{IDWriteFactory::CreateTextLayout}}</strong> takes an <strong>{{IDWriteTextFormat}}</strong> object as a parameter and initially applies the format information to the entire string. </p><p> This object may not be thread-safe, and it may carry the state of text format change. </p> + + + + <p>Sets the alignment of text in a paragraph, relative to the leading and trailing edge of a layout box for a <strong>{{IDWriteTextFormat}}</strong> interface.</p> + <p> The text can be aligned to the leading or trailing edge of the layout box, or it can be centered. The following illustration shows text with the alignment set to <strong>{{DWRITE_TEXT_ALIGNMENT_LEADING}}</strong>, <strong>{{DWRITE_TEXT_ALIGNMENT_CENTER}}</strong>, and <strong>{{DWRITE_TEXT_ALIGNMENT_TRAILING}}</strong>, respectively. </p><p></p><strong>Note</strong>??The alignment is dependent on reading direction, the above is for left-to-right reading direction. For right-to-left reading direction it would be the opposite.?<p>See <strong>{{DWRITE_TEXT_ALIGNMENT}}</strong> for more information. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The textAlignment argument is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> Sets the alignment option of a paragraph relative to the layout box's top and bottom edge. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph alignment option being set for a paragraph; see <strong>{{DWRITE_PARAGRAPH_ALIGNMENT}}</strong> for more information.</p> </dd> + + + + + <p> Sets the word wrapping option. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The word wrapping option being set for a paragraph; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> </dd> + + + + + <p> Sets the paragraph reading direction. </p> + <p> The reading direction and flow direction must always be set 90 degrees orthogonal to each other, or else you will get the error {{DWRITE_E_FLOWDIRECTIONCONFLICTS}} when you use layout functions like Draw or GetMetrics. So if you set a vertical reading direction (for example, to {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}), then you must also use SetFlowDirection to set the flow direction appropriately (for example, to {{DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The text reading direction (for example, <strong>{{DWRITE_READING_DIRECTION_RIGHT_TO_LEFT}}</strong> for languages, such as Arabic, that read from right to left) for a paragraph. </p> </dd> + + + + + <p> Sets the paragraph flow direction. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph flow direction; see <strong>{{DWRITE_FLOW_DIRECTION}}</strong> for more information.</p> </dd> + + + + + <p> Sets a fixed distance between two adjacent tab stops. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The fixed distance between two adjacent tab stops.</p> </dd> + + + + + <p> Sets trimming options for text overflowing the layout width. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Text trimming options.</p> </dd> + + + <dd> <p>Application-defined omission sign. This parameter may be <strong>{{NULL}}</strong>. See <strong>{{IDWriteInlineObject}}</strong> for more information.</p> </dd> + + + + + <p> Sets the line spacing. </p> + <p> For the default method, spacing depends solely on the content. For uniform spacing, the specified line height overrides the content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies how line height is being determined; see <strong>{{DWRITE_LINE_SPACING_METHOD}}</strong> for more information.</p> </dd> + + + <dd> <p>The line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>The distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the alignment option of text relative to the layout box's leading and trailing edge. </p> + <p>Returns the text alignment option of the current paragraph.</p> + + + + <p> Gets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box. </p> + <p>A value that indicates the current paragraph alignment option.</p> + + + + <p> Gets the word wrapping option. </p> + <p>Returns the word wrapping option; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> + + + + <p> Gets the current reading direction for text in a paragraph. </p> + <p>A value that indicates the current reading direction for text in a paragraph.</p> + + + + <p> Gets the direction that text lines flow. </p> + <p>The direction that text lines flow within their parent container. For example, <strong>{{DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM}}</strong> indicates that text lines are placed from top to bottom.</p> + + + + <p> Gets the incremental tab stop position. </p> + <p>The incremental tab stop value.</p> + + + + <p> Gets the trimming options for text that overflows the layout box. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, it contains a reference to a <strong>{{DWRITE_TRIMMING}}</strong> structure that holds the text trimming options for the overflowing text.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a trimming omission sign. This parameter may be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates how line height is determined.</p> </dd> + + + <dd> <p>When this method returns, contains the line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>When this method returns, contains the distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the current font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font collection being used for the current text.</p> </dd> + + + + + <p> Gets the length of the font family name. </p> + <p>The size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the font family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a character array, which is null-terminated, that receives the current font family name. The buffer allocated for this array should be at least the size, in elements, of <em>nameSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>fontFamilyName</em> character array, in character count, including the terminated <strong>{{NULL}}</strong> character. To find the size of <em>fontFamilyName</em>, use <strong>GetFontFamilyNameLength</strong>.</p> </dd> + + + + + <p> Gets the font weight of the text. </p> + <p>A value that indicates the type of weight (such as normal, bold, or black). </p> + + + + <p> Gets the font style of the text.</p> + <p>A value which indicates the type of font style (such as slope or incline).</p> + + + + <p> Gets the font stretch of the text. </p> + <p>A value which indicates the type of font stretch (such as normal or condensed).</p> + + + + <p> Gets the font size in {{DIP}} unites. </p> + <p>The current font size in {{DIP}} units.</p> + + + + <p> Gets the length of the locale name. </p> + <p>The size of the character array in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a character array that receives the current locale name.</p> </dd> + + + <dd> <p>The size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character. Use <strong>GetLocaleNameLength</strong> to get the size of the locale name character array.</p> </dd> + + + + + <p>Holds the appropriate digits and numeric punctuation for a specified locale.</p> + + + + <p>Implemented by the text analyzer's client to provide text to the analyzer. It allows the separation between the logical view of text as a continuous stream of characters identifiable by unique text positions, and the actual memory layout of potentially discrete blocks of text in the client's backing store. </p> + <p>If any of these callbacks returns an error, then the analysis functions will stop prematurely and return a callback error. Note that rather than return {{E_NOTIMPL}}, an application should stub the method and return a constant/null and {{S_OK}}.</p> + + + + <p>Gets a block of text starting at the specified text position. </p> + <p>Returning <strong>{{NULL}}</strong> indicates the end of text, which is the position after the last character. This function is called iteratively for each consecutive block, tying together several fragmented blocks in the backing store into a virtual contiguous string.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The first position of the piece to obtain. All positions are in <strong>{{UTF16}}</strong> code units, not whole characters, which matters when supplementary characters are used.</p> </dd> + + + <dd> <p>When this method returns, contains an address of the block of text as an array of characters to be retrieved from the text analysis.</p> </dd> + + + <dd> <p>When this method returns, contains the number of <strong>{{UTF16}}</strong> units of the retrieved chunk. The returned length is not the length of the block, but the length remaining in the block, from the specified position until its end. For example, querying for a position that is 75 positions into a 100-position block would return 25.</p> </dd> + + + + + <p>Gets a block of text immediately preceding the specified position.</p> + <p>{{NULL}} indicates no chunk available at the specified position, either because <em>textPosition</em> equals 0, <em>textPosition</em> is greater than the entire text content length, or the queried position is not mapped into the application's backing store.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position immediately after the last position of the block of text to obtain.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the block of text, as an array of characters from the specified range. The text range will be from <em>textPosition</em> to the front of the block.</p> </dd> + + + <dd> <p>Number of {{UTF16}} units of the retrieved block. The length returned is from the specified position to the front of the block.</p> </dd> + + + + + <p>Gets the paragraph reading direction.</p> + <p>The reading direction of the current paragraph.</p> + + + + <p>Gets the locale name on the range affected by the text analysis.</p> + <p>The <em>localeName</em> reference must remain valid until the next call or until the analysis returns.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position to examine.</p> </dd> + + + <dd> <p>Contains the length of the text being affected by the text analysis up to the next differing locale.</p> </dd> + + + <dd> <p>Contains an address of a reference to an array of characters which receives the locale name from the text affected by the text analysis. The array of characters is null-terminated.</p> </dd> + + + + + <p>Gets the number substitution from the text range affected by the text analysis.</p> + <p>Any implementation should return the number substitution with an incremented reference count, and the analysis will release when finished with it (either before the next call or before it returns). However, the sink callback may hold onto it after that.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>Contains the length of the text, in characters, remaining in the text range up to the next differing number substitution.</p> </dd> + + + <dd> <p>Contains an address of a reference to an object, which was created with <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong>, that holds the appropriate digits and numeric punctuation for a given locale.</p> </dd> + + + + + <p>This interface is implemented by the text analyzer's client to receive the output of a given text analysis. </p> + <p>The text analyzer disregards any current state of the analysis sink, therefore, a Set method call on a range overwrites the previously set analysis result of the same range.</p> + + + + <p>Reports script analysis for the specified text range.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains a zero-based index representation of a writing system script and a value indicating whether additional shaping of text is required.</p> </dd> + + + + + <p>Sets line-break opportunities for each character, starting from the specified position.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting text position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains breaking conditions set for each character from the starting position to the end of the specified range.</p> </dd> + + + + + <p>Sets a bidirectional level on the range, which is called once per run change (either explicit or resolved implicit).</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>The explicit level from the paragraph reading direction and any embedded control codes {{RLE}}/{{RLO}}/{{LRE}}/{{LRO}}/{{PDF}}, which is determined before any additional rules.</p> </dd> + + + <dd> <p>The final implicit level considering the explicit level and characters' natural directionality, after all Bidi rules have been applied.</p> </dd> + + + + + <p>Sets the number substitution on the text range affected by the text analysis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>An object that holds the appropriate digits and numeric punctuation for a given locale. Use <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong> to create this object.</p> </dd> + + + + + <p> Analyzes various text properties for complex script processing such as bidirectional (bidi) support for languages like Arabic, determination of line break opportunities, glyph placement, and number substitution.</p> + + + + <p> Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script {{ID}} to the sink callback <strong>SetScript</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback <strong>SetBidiLevel</strong>. </p> + <p> While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback <strong>SetNumberSubstitution</strong>. </p> + <p> Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback <strong>SetLineBreakpoints</strong>. </p> + <p> Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Parses the input text string and maps it to the set of glyphs and associated glyph data according to the font and the writing system's rendering rules. </p> + <p> Note that the mapping from characters to glyphs is, in general, many-to-many. The recommended estimate for the per-glyph output buffers is (3 * <em>textLength</em> / 2 + 16). This is not guaranteed to be sufficient. The value of the <em>actualGlyphCount</em> parameter is only valid if the call succeeds. In the event that <em>maxGlyphCount</em> is not big enough, <strong>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</strong> will be returned. The application should allocate a larger buffer and try again. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters to convert to glyphs.</p> </dd> + + + <dd> <p>The length of <em>textString</em>.</p> </dd> + + + <dd> <p>The font face that is the source of the output glyphs.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> if the text is intended to be drawn vertically.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> for right-to-left text.</p> </dd> + + + <dd> <p>A reference to a Script analysis result from an <strong>AnalyzeScript</strong> call.</p> </dd> + + + <dd> <p>The locale to use when selecting glyphs. For example the same character may map to different glyphs for ja-jp versus zh-chs. If this is <strong>{{NULL}}</strong>, then the default mapping based on the script is used.</p> </dd> + + + <dd> <p>A reference to an optional number substitution which selects the appropriate glyphs for digits and related numeric characters, depending on the results obtained from <strong>AnalyzeNumberSubstitution</strong>. Passing <strong>{{NULL}}</strong> indicates that no substitution is needed and that the digits should receive nominal glyphs.</p> </dd> + + + <dd> <p>An array of references to the sets of typographic features to use in each feature range.</p> </dd> + + + <dd> <p>The length of each feature range, in characters. The sum of all lengths should be equal to <em>textLength</em>.</p> </dd> + + + <dd> <p>The number of feature ranges.</p> </dd> + + + <dd> <p>The maximum number of glyphs that can be returned.</p> </dd> + + + <dd> <p>When this method returns, contains the mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contains shaping properties for each character.</p> </dd> + + + <dd> <p>The output glyph indices.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contain shaping properties for each output glyph.</p> </dd> + + + <dd> <p>When this method returns, contains the actual number of glyphs returned if the call succeeds.</p> </dd> + + + + + <p> Places glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Place glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines the pixel snapping properties such as pixels per {{DIP}}(device-independent pixel) and the current transform matrix of a text renderer.</p> + + + + <p> Determines whether pixel snapping is disabled. The recommended default is <strong>{{FALSE}}</strong>, unless doing animation that requires subpixel vertical placement. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if pixel snapping is disabled; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a transform that maps abstract coordinates to {{DIPs}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a structure which has transform information for pixel snapping.</p> </dd> + + + + + <p> Gets the number of physical pixels per {{DIP}}. </p> + <p> Because a {{DIP}} (device-independent pixel) is 1/96 inch, the <em>pixelsPerDip</em> value is the number of logical pixels per inch divided by 96.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of physical pixels per {{DIP}}.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p> Sets the layout maximum width.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum width of the layout box.</p> </dd> + + + + + <p> Sets the layout maximum height. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum height of the layout box. </p> </dd> + + + + + <p> Sets the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to set.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets null-terminated font family name for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font family name that applies to the entire text string within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the font weight for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. </p> + <p>The font weight can be set to one of the predefined font weight values provided in the <strong>{{DWRITE_FONT_WEIGHT}}</strong> enumeration or an integer from 1 to 999. Values outside this range will cause the method to fail with an <strong>{{E_INVALIDARG}}</strong> return value.</p><p>The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font style for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure.</p> + <p>The font style can be set to Normal, Italic or Oblique. The following illustration shows three styles for the Palatino font. For more information, see <strong>{{DWRITE_FONT_STYLE}}</strong>.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font stretch for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value which indicates the type of font stretch for text within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Sets the font size in {{DIP}} units for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font size in {{DIP}} units to be set for text in the range specified by <em>textRange</em>. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p>Sets strikethrough for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean flag that indicates whether strikethrough takes place in the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the application-defined drawing effect. </p> + <p>An <strong>{{ID2D1Brush}}</strong>, such as a color or gradient brush, can be set as a drawing effect if you are using the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> to draw text and that brush will be used to draw the specified range of text.</p><p> This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering.</p> </dd> + + + <dd> <p>The text range to which this change applies.</p> </dd> + + + + + <p> Sets the inline object. </p> + <p>The application may call this function to specify the set of properties describing an application-defined inline object for specific range.</p><p> This inline object applies to the specified range and will be passed back to the application by way of the <strong>DrawInlineObject</strong> callback when the range is drawn. Any text in that range will be suppressed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined inline object. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets font typography features for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to font typography settings. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the locale name for text within a specified text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated locale name string.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Gets the layout maximum width. </p> + <p>Returns the layout maximum width.</p> + + + + <p> Gets the layout maximum height. </p> + <p>The layout maximum height.</p> + + + + <p> Gets the font collection associated with the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Contains an address of a reference to the current font collection.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the length of the font family name at the current position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the character array containing the font family name, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family.</p> </dd> + + + + + <p> Copies the font family name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to examine.</p> </dd> + + + <dd> <p>When this method returns, contains an array of characters that receives the current font family name. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The size of the character array in character count including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family name.</p> </dd> + + + + + <p> Gets the font weight of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font weight being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font weight.</p> </dd> + + + + + <p> Gets the font style (also known as slope) of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font style (also known as slope or incline) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font style.</p> </dd> + + + + + <p> Gets the font stretch of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font stretch (also known as width) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font stretch.</p> </dd> + + + + + <p> Gets the font em height of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font in ems of the text at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font size.</p> </dd> + + + + + <p> Gets the underline presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether underline is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the strikethrough presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether strikethrough is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to strikethrough.</p> </dd> + + + + + <p> Gets the application-defined drawing effect at the specified text position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text whose drawing effect is to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect.</p> </dd> + + + + + <p> Gets the inline object at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The specified text position.</p> </dd> + + + <dd> <p>Contains the application-defined inline object.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the inline object.</p> </dd> + + + + + <p> Gets the typography setting of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current typography setting.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the typography.</p> </dd> + + + + + <p> Gets the length of the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Gets the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the character array receiving the current locale name.</p> </dd> + + + <dd> <p>Size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Draws text using the specified client drawing context.</p> + <p>To draw text with this method, a <em>textLayout</em> object needs to be created by the application using <strong>{{IDWriteFactory::CreateTextLayout}}</strong>. </p><p>After the <em>textLayout</em> object is obtained, the application calls the <strong>{{IDWriteTextLayout::Draw}}</strong> method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the <em>textRenderer</em> argument; there, the corresponding <strong>DrawGlyphRun</strong> {{API}} is called. </p><p>If you set a vertical text reading direction on {{IDWriteTextLayout}} via SetReadingDirection with {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}} (or bottom to top), then you must pass an interface that implements {{IDWriteTextRenderer1}}. Otherwise you get the error {{DWRITE_E_TEXTRENDERERINCOMPATIBLE}} because the original {{IDWriteTextRenderer}} interface only supported horizontal text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined drawing context. </p> </dd> + + + <dd> <p>Pointer to the set of callback functions used to draw parts of a text string.</p> </dd> + + + <dd> <p>The x-coordinate of the layout's left side.</p> </dd> + + + <dd> <p>The y-coordinate of the layout's top side.</p> </dd> + + + + + <p> Retrieves the information about each individual text line of the text string. </p> + <p> If <em>maxLineCount</em> is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>*actualLineCount</em> is set to the number of lines needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to an array of structures containing various calculated length values of individual text lines.</p> </dd> + + + <dd> <p>The maximum size of the <em>lineMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>lineMetrics</em> array that is needed.</p> </dd> + + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Returns the overhangs (in {{DIPs}}) of the layout and all objects contained in it, including text glyphs and inline objects.</p> + <p>Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Overshoots of visible extents (in {{DIPs}}) outside the layout.</p> </dd> + + + + + <p> Retrieves logical properties and measurements of each glyph cluster. </p> + <p> If <em>maxClusterCount</em> is not large enough, then {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>actualClusterCount</em> is set to the number of clusters needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains metrics, such as line-break or total advance width, for a glyph cluster.</p> </dd> + + + <dd> <p>The maximum size of the <em>clusterMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>clusterMetrics</em> array that is needed.</p> </dd> + + + + + <p>Determines the minimum possible width the layout can be set to without emergency breaking between the characters of whole words occurring.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Minimum width.</p> </dd> + + + + + <p> The application calls this function passing in a specific pixel location relative to the top-left location of the layout box and obtains the information about the correspondent hit-test metrics of the text string where the hit-test has occurred. When the specified pixel location is outside the text string, the function sets the output value <em>*isInside</em> to <strong>{{FALSE}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The pixel location X to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>The pixel location Y to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is at the leading or the trailing side of the character. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this value is set according to the output <em>hitTestMetrics-&gt;textPosition</em> value to represent the edge closest to the hit-test location.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is inside the text string. When <strong>{{FALSE}}</strong>, the position nearest the text's edge is returned.</p> </dd> + + + <dd> <p>The output geometry fully enclosing the hit-test location. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this structure represents the geometry enclosing the edge closest to the hit-test location.</p> </dd> + + + + + <p> The application calls this function to get the pixel location relative to the top-left of the layout box given the text position and the logical side of the position. This function is normally used as part of caret positioning of text where the caret is drawn at the location corresponding to the current text editing position. It may also be used as a way to programmatically obtain the geometry of a particular text position in {{UI}} automation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position used to get the pixel location.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the pixel location is of the leading or the trailing side of the specified text position.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location X, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location Y, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output geometry fully enclosing the specified text position.</p> </dd> + + + + + <p> The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. One of the main usages is to implement highlight selection of the text string. The function returns {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. The application is responsible for allocating a new buffer of greater size and calling the function again. A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function <strong>{{IDWriteTextLayout}}</strong>::GetLineLengths), and the maxBidiReorderingDepth value from the <strong>{{DWRITE_TEXT_METRICS}}</strong> structure of the output argument *textMetrics (from the function <strong>{{IDWriteFactory}}</strong>::<strong>CreateTextLayout</strong>). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.</p> + <p>You create an <strong>{{IDWriteBitmapRenderTarget}}</strong> by using the <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> method, as shown in the following code.</p><pre>if ({{SUCCEEDED}}(hr)) +{ hr = g_pGdiInterop-&gt;CreateBitmapRenderTarget(hdc, r.right, r.bottom, &amp;g_pBitmapRenderTarget); +} +</pre><p> <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> takes a handle to a {{DC}} and the desired width and height. In the above example, the width and height given are the size of the window rect.</p> + + + + <p> Draws a run of glyphs to a bitmap target at the specified position.</p> + <p>You can use the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the <strong>{{IDWriteTextRenderer::DrawGlyphRun}}</strong> callback method as shown in the following code.</p><pre>{{STDMETHODIMP}} GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, {{FLOAT}} baselineOriginX, {{FLOAT}} baselineOriginY, {{DWRITE_MEASURING_MODE}} measuringMode, __in {{DWRITE_GLYPH_RUN}} const* glyphRun, __in {{DWRITE_GLYPH_RUN_DESCRIPTION}} const* glyphRunDescription, {{IUnknown}}* clientDrawingEffect ) +{ {{HRESULT}} hr = {{S_OK}}; // Pass on the drawing call to the render target to do the real work. {{RECT}} dirtyRect = {0}; hr = pRenderTarget_-&gt;DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, {{RGB}}(0,200,255), &amp;dirtyRect ); return hr; +} +</pre><p>The <em>baselineOriginX</em>, <em>baslineOriginY</em>, <em>measuringMethod</em>, and <em>glyphRun</em> parameters are provided (as arguments) when the callback method is invoked. The <em>renderingParams</em>, <em>textColor</em> and <em>blackBoxRect</em> are not.</p><p>Default rendering params can be retrieved by using the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The horizontal position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The vertical position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p> The structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p> The object that controls rendering behavior.</p> </dd> + + + <dd> <p> The foreground color of the text.</p> </dd> + + + <dd> <p> The optional rectangle that receives the bounding box (in pixels not {{DIPs}}) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.</p> </dd> + + + + + <p> Gets a handle to the memory device context. </p> + <p> An application can use the device context to draw using {{GDI}} functions. An application can obtain the bitmap handle ({{HBITMAP}}) by calling <strong>GetCurrentObject</strong>. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call <strong>GetObject</strong> to fill in a <strong>{{DIBSECTION}}</strong> structure. The bitmap is always a 32-bit top-down {{DIB}}. </p><p>Note that this method takes no parameters and returns an {{HDC}} variable, not an {{HRESULT}}.</p><pre>memoryHdc = g_pBitmapRenderTarget-&gt;GetMemoryDC(); +</pre><p>The {{HDC}} returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.</p> + <p>Returns a device context handle to the memory device context.</p> + + + + <p> Gets the number of bitmap pixels per {{DIP}}. </p> + <p>A {{DIP}} (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.</p> + <p>The number of bitmap pixels per {{DIP}}.</p> + + + + <p> Sets the number of bitmap pixels per {{DIP}} (device-independent pixel). A {{DIP}} is 1/96 inch, so this value is the number if pixels per inch divided by 96. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the number of pixels per {{DIP}}.</p> </dd> + + + + + <p> Gets the transform that maps abstract coordinates to {{DIPs}}. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a transform matrix.</p> </dd> + + + + + <p> Sets the transform that maps abstract coordinate to {{DIPs}} (device-independent pixel). This does not affect the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the new transform. This parameter can be <strong>{{NULL}}</strong>, in which case the identity transform is implied.</p> </dd> + + + + + <p> Gets the dimensions of the target bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the width and height of the bitmap in pixels.</p> </dd> + + + + + <p> Resizes the bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new bitmap width, in pixels.</p> </dd> + + + <dd> <p>The new bitmap height, in pixels.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p> Creates a font object that matches the properties specified by the <strong>{{LOGFONT}}</strong> structure. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created <strong>{{IDWriteFont}}</strong> object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Initializes a <strong>{{LOGFONT}}</strong> structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a <strong>{{LOGFONT}}</strong> by using <strong>ConvertFontToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a <strong>{{LOGFONT}}</strong> as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFont}}</strong> object to be converted into a {{GDI}}-compatible <strong>{{LOGFONT}}</strong> structure.</p> </dd> + + + <dd> <p>When this method returns, contains a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the specified font object is part of the system font collection; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Initializes a {{LOGFONT}} structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a {{LOGFONT}} by using <strong>ConvertFontFaceToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a {{LOGFONT}} as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFontFace}}</strong> object to be converted into a {{GDI}}-compatible {{LOGFONT}} structure.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + + + <p> Creates an <strong>{{IDWriteFontFace}}</strong> object that corresponds to the currently selected <strong>{{HFONT}}</strong> of the specified <strong>{{HDC}}</strong>. </p> + <p>This function is intended for scenarios in which an application wants to use {{GDI}} and Uniscribe 1.x for text layout and shaping, but DirectWrite for final rendering. This function assumes the client is performing text output using glyph indexes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to a device context into which a font has been selected. It is assumed that the client has already performed font mapping and that the font selected into the device context is the actual font to be used for rendering glyphs.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure. The font face returned is guaranteed to reference the same physical typeface that would be used for drawing glyphs (but not necessarily characters) using ExtTextOut.</p> </dd> + + + + + <p> Creates an object that encapsulates a bitmap and memory {{DC}} (device context) which can be used for rendering glyphs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the optional device context used to create a compatible memory {{DC}} (device context).</p> </dd> + + + <dd> <p>The width of the bitmap render target.</p> </dd> + + + <dd> <p>The height of the bitmap render target.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created <strong>{{IDWriteBitmapRenderTarget}}</strong> object.</p> </dd> + + + + + <p> Contains low-level information used to render a glyph run.</p> + <p>The alpha texture can be a bi-level alpha texture or a ClearType alpha texture. </p><p>A bi-level alpha texture contains one byte per pixel, therefore the size of the buffer for a bi-level texture will be the area of the texture bounds, in bytes. Each byte in a bi-level alpha texture created by <strong>CreateAlphaTexture</strong> is either set to {{DWRITE_ALPHA_MAX}} (that is, 255) or zero.</p><p>A ClearType alpha texture contains three bytes per pixel, therefore the size of the buffer for a ClearType alpha texture is three times the area of the texture bounds, in bytes.</p> + + + + <p> Gets the bounding rectangle of the physical pixels affected by the glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of texture requested. If a bi-level texture is requested, the bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only antialiased glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains the bounding rectangle of the physical pixels affected by the glyph run, or an empty rectangle if there are no glyphs of the specified texture type.</p> </dd> + + + + + <p> Creates an alpha texture of the specified type for glyphs within a specified bounding rectangle. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the type of texture requested. This can be <strong>{{DWRITE_TEXTURE_BILEVEL_1x1}}</strong> or <strong>{{DWRITE_TEXTURE_CLEARTYPE_3x1}}</strong>. If a bi-level texture is requested, the texture contains only bi-level glyphs. Otherwise, the texture contains only antialiased glyphs.</p> </dd> + + + <dd> <p>The bounding rectangle of the texture, which can be different than the bounding rectangle returned by <strong>GetAlphaTextureBounds</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the array of alpha values from the texture. The buffer allocated for this array must be at least the size of <em>bufferSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>alphaValues</em> array, in bytes. The minimum size depends on the dimensions of the rectangle and the type of texture requested.</p> </dd> + + + + + <p> Gets alpha blending properties required for ClearType blending. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An object that specifies the ClearType level and enhanced contrast, gamma, pixel geometry, and rendering mode. In most cases, the values returned by the output parameters of this method are based on the properties of this object, unless a {{GDI}}-compatible rendering mode was specified.</p> </dd> + + + <dd> <p>When this method returns, contains the gamma value to use for gamma correction.</p> </dd> + + + <dd> <p>When this method returns, contains the enhanced contrast value to be used for blending.</p> </dd> + + + <dd> <p>When this method returns, contains the ClearType level used in the alpha blending.</p> </dd> + + + + + <p>Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.</p> + <p>This function creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects. DirectWrite factory contains internal state data such as font loader registration and cached font data. In most cases it is recommended you use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state data, and thereby reduce memory usage. However, there are cases when it is desirable to reduce the impact of a component, such as a plug-in from an untrusted source, on the rest of the process, by sandboxing and isolating it from the rest of the process components. In such cases, it is recommended you use an isolated factory for the sandboxed component.</p><p>The following example shows how to create a shared DirectWrite factory.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the factory object will be shared or isolated.</p> </dd> + + + <dd> <p>A {{GUID}} value that identifies the DirectWrite factory interface, such as __uuidof(<strong>{{IDWriteFactory}}</strong>).</p> </dd> + + + <dd> <p>An address of a reference to the newly created DirectWrite factory object.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FAMILY}}</strong> enumeration contains values that specify the kind of typeface classification.</p> + + + <dd> <p>Any typeface classification.</p> </dd> + + + <dd> <p>No fit typeface classification.</p> </dd> + + + <dd> <p>Text display typeface classification.</p> </dd> + + + <dd> <p>Script (or hand written) typeface classification.</p> </dd> + + + <dd> <p>Decorative typeface classification.</p> </dd> + + + <dd> <p>Symbol typeface classification.</p> </dd> + + + <dd> <p>Pictorial (or symbol) typeface classification.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SERIF_STYLE}}</strong> enumeration contains values that specify the appearance of the serif text.</p> + + + <dd> <p>Any appearance of the serif text.</p> </dd> + + + <dd> <p>No fit appearance of the serif text.</p> </dd> + + + <dd> <p>Cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square appearance of the serif text.</p> </dd> + + + <dd> <p>Thin appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + <dd> <p>Exaggerated appearance of the serif text.</p> </dd> + + + <dd> <p>Triangle appearance of the serif text.</p> </dd> + + + <dd> <p>Normal sans appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse sans appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Flared appearance of the serif text.</p> </dd> + + + <dd> <p>Rounded appearance of the serif text.</p> </dd> + + + <dd> <p>Script appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> enumeration contains values that specify the weight of characters.</p> + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> values roughly correspond to the <strong>{{DWRITE_FONT_WEIGHT}}</strong> values by using (panose_weight - 2) * 100 = font_weight.</p> + + + <dd> <p>Any weight.</p> </dd> + + + <dd> <p>No fit weight.</p> </dd> + + + <dd> <p>Very light weight.</p> </dd> + + + <dd> <p>Light weight.</p> </dd> + + + <dd> <p>Thin weight.</p> </dd> + + + <dd> <p>Book weight.</p> </dd> + + + <dd> <p>Medium weight.</p> </dd> + + + <dd> <p>Demi weight.</p> </dd> + + + <dd> <p>Bold weight.</p> </dd> + + + <dd> <p>Heavy weight.</p> </dd> + + + <dd> <p>Black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_PROPORTION}}</strong> enumeration contains values that specify the proportion of the glyph shape by considering additional detail to standard characters.</p> + + + <dd> <p>Any proportion for the text.</p> </dd> + + + <dd> <p>No fit proportion for the text.</p> </dd> + + + <dd> <p>Old style proportion for the text.</p> </dd> + + + <dd> <p>Modern proportion for the text.</p> </dd> + + + <dd> <p>Extra width proportion for the text.</p> </dd> + + + <dd> <p>Expanded proportion for the text.</p> </dd> + + + <dd> <p>Condensed proportion for the text.</p> </dd> + + + <dd> <p>Very expanded proportion for the text.</p> </dd> + + + <dd> <p>Very condensed proportion for the text.</p> </dd> + + + <dd> <p>Monospaced proportion for the text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CONTRAST}}</strong> enumeration contains values that specify the ratio between thickest and thinnest point of the stroke for a letter such as uppercase 'O'.</p> + + + <dd> <p>Any contrast.</p> </dd> + + + <dd> <p>No fit contrast.</p> </dd> + + + <dd> <p>No contrast.</p> </dd> + + + <dd> <p>Very low contrast.</p> </dd> + + + <dd> <p>Low contrast.</p> </dd> + + + <dd> <p>Medium low contrast.</p> </dd> + + + <dd> <p>Medium contrast.</p> </dd> + + + <dd> <p>Medium high contrast.</p> </dd> + + + <dd> <p>High contrast.</p> </dd> + + + <dd> <p>Very high contrast.</p> </dd> + + + <dd> <p>Horizontal low contrast.</p> </dd> + + + <dd> <p>Horizontal medium contrast.</p> </dd> + + + <dd> <p>Horizontal high contrast.</p> </dd> + + + <dd> <p>Broken contrast.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_STROKE_VARIATION}}</strong> enumeration contains values that specify the relationship between thin and thick stems of text characters.</p> + + + <dd> <p>Any stroke variation for text characters.</p> </dd> + + + <dd> <p>No fit stroke variation for text characters.</p> </dd> + + + <dd> <p>No stroke variation for text characters.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual diagonal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual transitional.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant horizontal.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ARM_STYLE}}</strong> enumeration contains values that specify the style of termination of stems and rounded letterforms for text.</p> + + + <dd> <p>Any arm style.</p> </dd> + + + <dd> <p>No fit arm style.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight wedge.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is straight single serif.</p> </dd> + + + <dd> <p>The arm style is straight double serif.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LETTERFORM}}</strong> enumeration contains values that specify the roundness of letterform for text.</p> + + + <dd> <p>Any letterform.</p> </dd> + + + <dd> <p>No fit letterform.</p> </dd> + + + <dd> <p>Normal contact letterform.</p> </dd> + + + <dd> <p>Normal weighted letterform.</p> </dd> + + + <dd> <p>Normal boxed letterform.</p> </dd> + + + <dd> <p>Normal flattened letterform.</p> </dd> + + + <dd> <p>Normal rounded letterform.</p> </dd> + + + <dd> <p>Normal off-center letterform.</p> </dd> + + + <dd> <p>Normal square letterform.</p> </dd> + + + <dd> <p>Oblique contact letterform.</p> </dd> + + + <dd> <p>Oblique weighted letterform.</p> </dd> + + + <dd> <p>Oblique boxed letterform.</p> </dd> + + + <dd> <p>Oblique flattened letterform.</p> </dd> + + + <dd> <p>Oblique rounded letterform.</p> </dd> + + + <dd> <p>Oblique off-center letterform.</p> </dd> + + + <dd> <p>Oblique square letterform.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_MIDLINE}}</strong> enumeration contains values that specify info about the placement of midline across uppercase characters and the treatment of diagonal stem apexes.</p> + + + <dd> <p>Any midline.</p> </dd> + + + <dd> <p>No fit midline.</p> </dd> + + + <dd> <p>Standard trimmed midline.</p> </dd> + + + <dd> <p>Standard pointed midline.</p> </dd> + + + <dd> <p>Standard serifed midline.</p> </dd> + + + <dd> <p>High trimmed midline.</p> </dd> + + + <dd> <p>High pointed midline.</p> </dd> + + + <dd> <p>High serifed midline.</p> </dd> + + + <dd> <p>Constant trimmed midline.</p> </dd> + + + <dd> <p>Constant pointed midline.</p> </dd> + + + <dd> <p>Constant serifed midline.</p> </dd> + + + <dd> <p>Low trimmed midline.</p> </dd> + + + <dd> <p>Low pointed midline.</p> </dd> + + + <dd> <p>Low serifed midline.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XHEIGHT}}</strong> enumeration contains values that specify info about the relative size of lowercase letters and the treatment of diacritic marks (xheight).</p> + + + <dd> <p>Any xheight.</p> </dd> + + + <dd> <p>No fit xheight.</p> </dd> + + + <dd> <p>Constant small xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Constant large xheight.</p> </dd> + + + <dd> <p>Ducking small xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + <dd> <p>Ducking large xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_TOOL_KIND}}</strong> enumeration contains values that specify the kind of tool that is used to create character forms.</p> + + + <dd> <p>Any kind of tool.</p> </dd> + + + <dd> <p>No fit for the kind of tool.</p> </dd> + + + <dd> <p>Flat {{NIB}} tool.</p> </dd> + + + <dd> <p>Pressure point tool.</p> </dd> + + + <dd> <p>Engraved tool.</p> </dd> + + + <dd> <p>Ball tool.</p> </dd> + + + <dd> <p>Brush tool.</p> </dd> + + + <dd> <p>Rough tool.</p> </dd> + + + <dd> <p>Felt-pen-brush-tip tool.</p> </dd> + + + <dd> <p>Wild-brush tool.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SPACING}}</strong> enumeration contains values that specify character spacing (monospace versus proportional).</p> + + + <dd> <p>Any spacing.</p> </dd> + + + <dd> <p>No fit for spacing.</p> </dd> + + + <dd> <p>Spacing is proportional.</p> </dd> + + + <dd> <p>Spacing is monospace.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT_RATIO}}</strong> enumeration contains values that specify info about the ratio between width and height of the character face.</p> + + + <dd> <p>Any aspect ratio.</p> </dd> + + + <dd> <p>No fit for aspect ratio.</p> </dd> + + + <dd> <p>Very condensed aspect ratio.</p> </dd> + + + <dd> <p>Condensed aspect ratio.</p> </dd> + + + <dd> <p>Normal aspect ratio.</p> </dd> + + + <dd> <p>Expanded aspect ratio.</p> </dd> + + + <dd> <p>Very expanded aspect ratio.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_TOPOLOGY}}</strong> enumeration contains values that specify the topology of letterforms.</p> + + + <dd> <p>Any script topology.</p> </dd> + + + <dd> <p>No fit for script topology.</p> </dd> + + + <dd> <p>Script topology is roman disconnected.</p> </dd> + + + <dd> <p>Script topology is roman trailing.</p> </dd> + + + <dd> <p>Script topology is roman connected.</p> </dd> + + + <dd> <p>Script topology is cursive disconnected.</p> </dd> + + + <dd> <p>Script topology is cursive trailing.</p> </dd> + + + <dd> <p>Script topology is cursive connected.</p> </dd> + + + <dd> <p>Script topology is black-letter disconnected.</p> </dd> + + + <dd> <p>Script topology is black-letter trailing.</p> </dd> + + + <dd> <p>Script topology is black-letter connected.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_FORM}}</strong> enumeration contains values that specify the general look of the character face, with consideration of its slope and tails.</p> + + + <dd> <p>Any script form.</p> </dd> + + + <dd> <p>No fit for script form.</p> </dd> + + + <dd> <p>Script form is upright with no wrapping.</p> </dd> + + + <dd> <p>Script form is upright with some wrapping.</p> </dd> + + + <dd> <p>Script form is upright with more wrapping.</p> </dd> + + + <dd> <p>Script form is upright with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with no wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with some wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with more wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with no wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with some wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with more wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with extreme wrapping.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FINIALS}}</strong> enumeration contains values that specify how character ends and miniscule ascenders are treated.</p> + + + <dd> <p>Any finials.</p> </dd> + + + <dd> <p>No fit for finials.</p> </dd> + + + <dd> <p>No loops.</p> </dd> + + + <dd> <p>No closed loops.</p> </dd> + + + <dd> <p>No open loops.</p> </dd> + + + <dd> <p>Sharp with no loops.</p> </dd> + + + <dd> <p>Sharp with closed loops.</p> </dd> + + + <dd> <p>Sharp with open loops.</p> </dd> + + + <dd> <p>Tapered with no loops.</p> </dd> + + + <dd> <p>Tapered with closed loops.</p> </dd> + + + <dd> <p>Tapered with open loops.</p> </dd> + + + <dd> <p>Round with no loops.</p> </dd> + + + <dd> <p>Round with closed loops.</p> </dd> + + + <dd> <p>Round with open loops.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XASCENT}}</strong> enumeration contains values that specify the relative size of the lowercase letters.</p> + + + <dd> <p>Any xascent.</p> </dd> + + + <dd> <p>No fit for xascent.</p> </dd> + + + <dd> <p>Very low xascent.</p> </dd> + + + <dd> <p>Low xascent.</p> </dd> + + + <dd> <p>Medium xascent.</p> </dd> + + + <dd> <p>High xascent.</p> </dd> + + + <dd> <p>Very high xascent.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_CLASS}}</strong> enumeration contains values that specify the general look of the character face.</p> + + + <dd> <p>Any class of decorative typeface.</p> </dd> + + + <dd> <p>No fit for decorative typeface.</p> </dd> + + + <dd> <p>Derivative decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard topology decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard elements decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard aspect decorative typeface.</p> </dd> + + + <dd> <p>Initials decorative typeface.</p> </dd> + + + <dd> <p>Cartoon decorative typeface.</p> </dd> + + + <dd> <p>Picture stems decorative typeface.</p> </dd> + + + <dd> <p>Ornamented decorative typeface.</p> </dd> + + + <dd> <p>Text and background decorative typeface.</p> </dd> + + + <dd> <p>Collage decorative typeface.</p> </dd> + + + <dd> <p>Montage decorative typeface.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT}}</strong> enumeration contains values that specify the ratio between the width and height of the character face.</p> + + + <dd> <p>Any aspect.</p> </dd> + + + <dd> <p>No fit for aspect.</p> </dd> + + + <dd> <p>Super condensed aspect.</p> </dd> + + + <dd> <p>Very condensed aspect.</p> </dd> + + + <dd> <p>Condensed aspect.</p> </dd> + + + <dd> <p>Normal aspect.</p> </dd> + + + <dd> <p>Extended aspect.</p> </dd> + + + <dd> <p>Very extended aspect.</p> </dd> + + + <dd> <p>Super extended aspect.</p> </dd> + + + <dd> <p>Monospace aspect.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FILL}}</strong> enumeration contains values that specify the type of fill and line treatment.</p> + + + <dd> <p>Any fill.</p> </dd> + + + <dd> <p>No fit for fill.</p> </dd> + + + <dd> <p>The fill is the standard solid fill.</p> </dd> + + + <dd> <p>No fill.</p> </dd> + + + <dd> <p>The fill is patterned fill.</p> </dd> + + + <dd> <p>The fill is complex fill.</p> </dd> + + + <dd> <p>The fill is shaped fill.</p> </dd> + + + <dd> <p>The fill is drawn distressed.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LINING}}</strong> enumeration contains values that specify the handling of the outline for the decorative typeface.</p> + + + <dd> <p>Any lining.</p> </dd> + + + <dd> <p>No fit for lining.</p> </dd> + + + <dd> <p>No lining.</p> </dd> + + + <dd> <p>The lining is inline.</p> </dd> + + + <dd> <p>The lining is outline.</p> </dd> + + + <dd> <p>The lining is engraved.</p> </dd> + + + <dd> <p>The lining is shadowed.</p> </dd> + + + <dd> <p>The lining is relief.</p> </dd> + + + <dd> <p>The lining is backdrop.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_TOPOLOGY}}</strong> enumeration contains values that specify the overall shape characteristics of the font.</p> + + + <dd> <p>Any decorative topology.</p> </dd> + + + <dd> <p>No fit for decorative topology.</p> </dd> + + + <dd> <p>Standard decorative topology.</p> </dd> + + + <dd> <p>Square decorative topology.</p> </dd> + + + <dd> <p>Multiple segment decorative topology.</p> </dd> + + + <dd> <p>Art deco decorative topology.</p> </dd> + + + <dd> <p>Uneven weighting decorative topology.</p> </dd> + + + <dd> <p>Diverse arms decorative topology.</p> </dd> + + + <dd> <p>Diverse forms decorative topology.</p> </dd> + + + <dd> <p>Lombardic forms decorative topology.</p> </dd> + + + <dd> <p>Upper case in lower case decorative topology.</p> </dd> + + + <dd> <p>The decorative topology is implied.</p> </dd> + + + <dd> <p>Horseshoe E and A decorative topology.</p> </dd> + + + <dd> <p>Cursive decorative topology.</p> </dd> + + + <dd> <p>Blackletter decorative topology.</p> </dd> + + + <dd> <p>Swash variance decorative topology.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CHARACTER_RANGES}}</strong> enumeration contains values that specify the type of characters available in the font.</p> + + + <dd> <p>Any range.</p> </dd> + + + <dd> <p>No fit for range.</p> </dd> + + + <dd> <p>The range includes extended collection.</p> </dd> + + + <dd> <p>The range includes literals.</p> </dd> + + + <dd> <p>The range doesn't include lower case.</p> </dd> + + + <dd> <p>The range includes small capitals.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_KIND}}</strong> enumeration contains values that specify the kind of symbol set.</p> + + + <dd> <p>Any kind of symbol set.</p> </dd> + + + <dd> <p>No fit for the kind of symbol set.</p> </dd> + + + <dd> <p>The kind of symbol set is montages.</p> </dd> + + + <dd> <p>The kind of symbol set is pictures.</p> </dd> + + + <dd> <p>The kind of symbol set is shapes.</p> </dd> + + + <dd> <p>The kind of symbol set is scientific symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is music symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is expert symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is patterns.</p> </dd> + + + <dd> <p>The kind of symbol set is boarders.</p> </dd> + + + <dd> <p>The kind of symbol set is icons.</p> </dd> + + + <dd> <p>The kind of symbol set is logos.</p> </dd> + + + <dd> <p>The kind of symbol set is industry specific.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_ASPECT_RATIO}}</strong> enumeration contains values that specify the aspect ratio of symbolic characters.</p> + + + <dd> <p>Any aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No fit for aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No width aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Exceptionally wide symbolic characters.</p> </dd> + + + <dd> <p>Super wide symbolic characters.</p> </dd> + + + <dd> <p>Very wide symbolic characters.</p> </dd> + + + <dd> <p>Wide symbolic characters.</p> </dd> + + + <dd> <p>Normal aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Narrow symbolic characters.</p> </dd> + + + <dd> <p>Very narrow symbolic characters.</p> </dd> + + + + + <p>The <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong> enumeration contains values that specify the policy used by the <strong>{{IDWriteFontFace1::GetRecommendedRenderingMode}}</strong> method to determine whether to render glyphs in outline mode.</p> + <p>Glyphs are rendered in outline mode by default at large sizes for performance reasons, but how large (that is, the outline threshold) depends on the quality of outline rendering. If the graphics system renders anti-aliased outlines, a relatively low threshold is used. But if the graphics system renders aliased outlines, a much higher threshold is used.</p> + + + + <p>The <strong>{{DWRITE_BASELINE}}</strong> enumeration contains values that specify the baseline for text alignment.</p> + + + <dd> <p>The Roman baseline for horizontal; the Central baseline for vertical.</p> </dd> + + + <dd> <p>The baseline that is used by alphabetic scripts such as Latin, Greek, and Cyrillic.</p> </dd> + + + <dd> <p>Central baseline, which is generally used for vertical text.</p> </dd> + + + <dd> <p>Mathematical baseline, which math characters are centered on.</p> </dd> + + + <dd> <p>Hanging baseline, which is used in scripts like Devanagari.</p> </dd> + + + <dd> <p>Ideographic bottom baseline for {{CJK}}, left in vertical.</p> </dd> + + + <dd> <p>Ideographic top baseline for {{CJK}}, right in vertical.</p> </dd> + + + <dd> <p>The bottom-most extent in horizontal, left-most in vertical.</p> </dd> + + + <dd> <p>The top-most extent in horizontal, right-most in vertical.</p> </dd> + + + + + <p>The <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong> enumeration contains values that specify the desired kind of glyph orientation for the text.</p> + <p>The client specifies a <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value to the analyzer as the desired orientation.</p><strong>Note</strong>??This is the client preference, and the constraints of the script determine the final presentation.? + + + <dd> <p>The default glyph orientation. In vertical layout, naturally horizontal scripts (Latin, Thai, Arabic, Devanagari) rotate 90 degrees clockwise, while ideographic scripts (Chinese, Japanese, Korean) remain upright, 0 degrees.</p> </dd> + + + <dd> <p>Stacked glyph orientation. Ideographic scripts and scripts that permit stacking (Latin, Hebrew) are stacked in vertical reading layout. Connected scripts (Arabic, Syriac, 'Phags-pa, Ogham), which would otherwise look broken if glyphs were kept at 0 degrees, remain connected and rotate.</p> </dd> + + + + + <p>The <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> enumeration contains values that specify how the glyph is oriented to the x-axis.</p> + <p>The text analyzer outputs <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> values. The value that it outputs depends on the desired orientation, bidi level, and character properties.</p> + + + <dd> <p>Glyph orientation is upright.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>Glyph orientation is upside-down.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>The <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong> enumeration contains values that specify the type of antialiasing to use for text when the rendering mode calls for antialiasing.</p> + + + <dd> <p>ClearType antialiasing computes coverage independently for the red, green, and blue color elements of each pixel. This allows for more detail than conventional antialiasing. However, because there is no one alpha value for each pixel, ClearType is not suitable for rendering text onto a transparent intermediate bitmap.</p> </dd> + + + <dd> <p>Grayscale antialiasing computes one coverage value for each pixel. Because the alpha value of each pixel is well-defined, text can be rendered onto a transparent bitmap, which can then be composited with other content.</p> <strong>Note</strong>??Grayscale rendering with <strong>{{IDWriteBitmapRenderTarget1}}</strong> uses premultiplied alpha. ? </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS1}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + <p><strong>{{DWRITE_FONT_METRICS1}}</strong> inherits from <strong>{{DWRITE_FONT_METRICS}}</strong>:</p><code> struct {{DWRITE_FONT_METRICS1}} : public {{DWRITE_FONT_METRICS}} +{ +... +};</code> + + + <dd> <p>Left edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Top edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Right edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Bottom edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Horizontal position of the subscript relative to the baseline origin. This is typically negative (to the left) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the subscript relative to the baseline. This is typically negative.</p> </dd> + + + <dd> <p>Horizontal size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Vertical size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Horizontal position of the superscript relative to the baseline origin. This is typically positive (to the right) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the superscript relative to the baseline. This is typically positive.</p> </dd> + + + <dd> <p>Horizontal size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>Vertical size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>A Boolean value that indicates that the ascent, descent, and lineGap are based on newer 'typographic' values in the font, rather than legacy values.</p> </dd> + + + + + <p>The <strong>{{DWRITE_CARET_METRICS}}</strong> structure specifies the metrics for caret placement in a font.</p> + + + <dd> <p>Vertical rise of the caret in font design units. Rise / Run yields the caret angle. Rise = 1 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal run of the caret in font design units. Rise / Run yields the caret angle. Run = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal offset of the caret, in font design units, along the baseline for good appearance. Offset = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + + + + + + + + + + + + + + + <p>The <strong>{{DWRITE_PANOSE}}</strong> union describes typeface classification values that you use with <strong>{{IDWriteFont1::GetPanose}}</strong> to select and match the font.</p> + <strong>Note</strong>??The <strong>familyKind</strong> member (index 0) is the only stable entry in the 10-byte array because all the entries that follow can change dynamically depending on the context of the first member.? + + + + <p>The <strong>{{DWRITE_UNICODE_RANGE}}</strong> structure specifies the range of Unicode code points.</p> + + + <dd> <p>The first code point in the Unicode range.</p> </dd> + + + <dd> <p>The last code point in the Unicode range.</p> </dd> + + + + + <p>The <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure specifies script properties for caret navigation and justification.</p> + + + <dd> <p>The standardized four character code for the given script. </p> <strong>Note</strong>??These only include the general Unicode scripts, not any additional {{ISO}} 15924 scripts for bibliographic distinction. ? </dd> + + + <dd> <p>The standardized numeric code, ranging 0-999.</p> </dd> + + + <dd> <p>Number of characters to estimate look-ahead for complex scripts. Latin and all Kana are generally 1. Indic scripts are up to 15, and most others are 8.</p> <strong>Note</strong>??Combining marks and variation selectors can produce clusters that are longer than these look-aheads, so this estimate is considered typical language use. Diacritics must be tested explicitly separately. ? </dd> + + + <dd> <p>Appropriate character to elongate the given script for justification. For example:</p> <ul> <li>Arabic - U+0640 Tatweel</li> <li>Ogham - U+1680 Ogham Space Mark</li> </ul> </dd> + + + <dd> <p>Restrict the caret to whole clusters, like Thai and Devanagari. Scripts such as Arabic by default allow navigation between clusters. Others like Thai always navigate across whole clusters.</p> </dd> + + + <dd> <p>The language uses dividers between words, such as spaces between Latin or the Ethiopic wordspace. Examples include Latin, Greek, Devanagari, and Ethiopic. Chinese, Korean, and Thai are excluded.</p> </dd> + + + <dd> <p>The characters are discrete units from each other. This includes both block scripts and clustered scripts. Examples include Latin, Greek, Cyrillic, Hebrew, Chinese, and Thai.</p> </dd> + + + <dd> <p>The language is a block script, expanding between characters. Examples include Chinese, Japanese, Korean, and Bopomofo.</p> </dd> + + + <dd> <p>The language is justified within glyph clusters, not just between glyph clusters, such as the character sequence of Thai Lu and Sara Am (U+{{E026}}, U+{{E033}}), which form a single cluster but still expand between them. Examples include Thai, Lao, and Khmer.</p> </dd> + + + <dd> <p>The script's clusters are connected to each other (such as the baseline-linked Devanagari), and no separation is added between characters.</p> <strong>Note</strong>??Cursively linked scripts like Arabic are also connected (but not all connected scripts are cursive). ? <p>Examples include Devanagari, Arabic, Syriac, Bengala, Gurmukhi, and Ogham. Latin, Chinese, and Thaana are excluded.</p> </dd> + + + <dd> <p>The script is naturally cursive (Arabic and Syriac), meaning it uses other justification methods like kashida extension rather than inter-character spacing.</p> <strong>Note</strong>?? Although other scripts like Latin and Japanese might actually support handwritten cursive forms, they are not considered cursive scripts. ? <p>Examples include Arabic, Syriac, and Mongolian. Thaana, Devanagari, Latin, and Chinese are excluded.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure specifies justification info per glyph.</p> + + + <dd> <p>Minimum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, typically being zero except for kashida.</p> </dd> + + + <dd> <p>Maximum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, being zero for fixed-size characters and connected scripts, and non-zero for discrete scripts, and non-zero for cursive scripts at expansion points.</p> </dd> + + + <dd> <p>Maximum amount of compression to apply to the side of the glyph. This might vary from zero up to the glyph cluster size.</p> </dd> + + + <dd> <p>Priority of this expansion point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Priority of this compression point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Allow this expansion point to use up any remaining slack space even after all expansion priorities have been used up.</p> </dd> + + + <dd> <p>Allow this compression point to use up any remaining space even after all compression priorities have been used up.</p> </dd> + + + <dd> <p>Apply expansion and compression to the leading edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Apply expansion and compression to the trailing edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The interface you implement to provide needed information to the text analyzer, like the text and associated text properties.</p><p> </p><strong>Note</strong>?? If any of these callbacks return an error, the analysis functions will stop prematurely and return a callback error.? + + + + <p>Used by the text analyzer to obtain the desired glyph orientation and resolved bidi level.</p> + <p>The text analyzer calls back to this to get the desired glyph orientation and resolved bidi level, which it uses along with the script properties of the text to determine the actual orientation of each character, which it reports back to the client via the sink SetGlyphOrientation method.</p> + <p>Returning an error will abort the analysis.</p> + + + <dd> <p>The text position.</p> </dd> + + + <dd> <p>A reference to the text length.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value that specifies the desired kind of glyph orientation for the text.</p> </dd> + + + <dd> <p>A reference to the resolved bidi level.</p> </dd> + + + + + <p> The interface you implement to receive the output of the text analyzers.</p> + + + + <p>The text analyzer calls back to this to report the actual orientation of each character for shaping and drawing.</p> + <p>Returns a successful code or an error code to abort analysis.</p> + + + <dd> <p>The starting position to report from.</p> </dd> + + + <dd> <p>Number of {{UTF}}-16 units of the reported range.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle of the glyphs within the text range (pass to <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to get the world relative transform).</p> </dd> + + + <dd> <p>The adjusted bidi level to be used by the client layout for reordering runs. This will differ from the resolved bidi level retrieved from the source for cases such as Arabic stacked top-to-bottom, where the glyphs are still shaped as {{RTL}}, but the runs are {{TTB}} along with any {{CJK}} or Latin.</p> </dd> + + + <dd> <p>Whether the glyphs are rotated on their side, which is the default case for {{CJK}} and the case stacked Latin</p> </dd> + + + <dd> <p>Whether the script should be shaped as right-to-left. For Arabic stacked top-to-bottom, even when the adjusted bidi level is coerced to an even level, this will still be true.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the amount of contrast enhancement to use for grayscale antialiasing.</p> + <p>The contrast enhancement value. Valid values are greater than or equal to zero.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Gets a font collection representing the set of {{EUDC}} (end-user defined characters) fonts.</p> + <p>Note that if no {{EUDC}} is set on the system, the returned collection will be empty, meaning it will return success but GetFontFamilyCount will be zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to fill.</p> </dd> + + + <dd> <p>Whether to check for updates.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace1}}</strong> interface.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that holds metrics for the current font face element. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRICS1}}</strong> structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Gets caret metrics for the font in design units.</p> + <p>Caret metrics are used by text editors for drawing the correct caret placement and slant.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_CARET_METRICS}}</strong> structure that is filled.</p> </dd> + + + + + <p>Retrieves a list of character ranges supported by a font.</p> + <p>A list of character ranges supported by the font is useful for scenarios like character picking, glyph display, and efficient font selection lookup. This is similar to {{GDI}}'s <strong>GetFontUnicodeRanges</strong>, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.</p> + <p>Returns {{TRUE}} if the font is monospaced, otherwise it returns {{FALSE}}.</p> + + + + <p>Retrieves the advances in design units for a sequences of glyphs.</p> + <p> This is equivalent to calling GetGlyphMetrics and using only the advance width and height.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve advances for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances for.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advance height rather than horizontal advance widths.</p> </dd> + + + + + <p>Returns the pixel-aligned advances for a sequences of glyphs.</p> + <p>This is equivalent to calling <strong>GetGdiCompatibleGlyphMetrics</strong> and using only the advance width and height. </p><p>Like <strong>GetGdiCompatibleGlyphMetrics</strong>, these are in design units, meaning they must be scaled down by {{DWRITE_FONT_METRICS::designUnitsPerEm}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96 this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.</p> </dd> + + + <dd> <p>When {{FALSE}}, the metrics are the same as {{GDI}} aliased text ({{DWRITE_MEASURING_MODE_GDI_CLASSIC}}). When {{TRUE}}, the metrics are the same as those measured by {{GDI}} using a font using {{CLEARTYPE_NATURAL_QUALITY}} ({{DWRITE_MEASURING_MODE_GDI_NATURAL}}).</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advances rather than horizontal advances.</p> </dd> + + + <dd> <p>Total glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + + + <p>Retrieves the kerning pair adjustments from the font's kern table.</p> + <p><strong>GetKerningPairAdjustments</strong> isn't a direct replacement for {{GDI}}'s character based <strong>GetKerningPairs</strong>, but it serves the same role, without the client needing to cache them locally. <strong>GetKerningPairAdjustments</strong> also uses glyph id's directly rather than {{UCS}}-2 characters (how the kern table actually stores them), which avoids glyph collapse and ambiguity, such as the dash and hyphen, or space and non-breaking space. </p><p>Newer fonts may have only {{GPOS}} kerning instead of the legacy pair-table kerning. Such fonts, like Gabriola, will only return 0's for adjustments. <strong>GetKerningPairAdjustments</strong> doesn't virtualize and flatten these {{GPOS}} entries into kerning pairs.</p><p>You can realize a performance benefit by calling <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> to determine whether you need to call <strong>GetKerningPairAdjustments</strong>. If you previously called <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> and it returned {{FALSE}}, you can avoid calling <strong>GetKerningPairAdjustments</strong> because the font has no kerning pair-table entries. That is, in this situation, a call to <strong>GetKerningPairAdjustments</strong> would be a no-op.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve adjustments for.</p> </dd> + + + <dd> <p>The advances, returned in font design units, for each glyph. The last glyph adjustment is zero.</p> </dd> + + + + + <p>Determines whether the font supports pair-kerning.</p> + <p>If the font doesn't support pair table kerning, you don't need to call <strong>{{IDWriteFontFace1::GetKerningPairAdjustments}}</strong> because it would retrieve all zeroes.</p> + <p>Returns {{TRUE}} if the font supports kerning pairs, otherwise {{FALSE}}.</p> + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>This method should be used to determine the actual rendering mode in cases where the rendering mode of the rendering params object is {{DWRITE_RENDERING_MODE_DEFAULT}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a horizontal position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a vertical position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Specifies the world transform.</p> </dd> + + + <dd> <p>Whether the glyphs in the run are sideways or not.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Retrieves the vertical forms of the nominal glyphs retrieved from GetGlyphIndices.</p> + <p> The retrieval uses the font's 'vert' table. This is used in {{CJK}} vertical layout so the correct characters are shown.</p><p>Call <strong>GetGlyphIndices</strong> to get the nominal glyph indices, followed by calling this to remap the to the substituted forms, when the run is sideways, and the font has vertical glyph variants. See <strong>HasVerticalGlyphVariants</strong> for more info. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve.</p> </dd> + + + <dd> <p>Original glyph indices from cmap.</p> </dd> + + + <dd> <p>The vertical form of glyph indices.</p> </dd> + + + + + <p>Determines whether the font has any vertical glyph variants.</p> + <p>For OpenType fonts, <strong>HasVerticalGlyphVariants</strong> returns {{TRUE}} if the font contains a "vert" feature. </p><p> <strong>{{IDWriteFontFace1::GetVerticalGlyphVariants}}</strong> retrieves the vertical forms of the nominal glyphs that are retrieved from <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong>. </p> + <p>Returns {{TRUE}} if the font contains vertical glyph variants, otherwise {{FALSE}}.</p> + + + + <p>Represents a physical font in a font collection.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that has font metrics for the current font face. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font and is used for font selection and matching.</p> + <p>If the font has no {{PANOSE}} values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_PANOSE}}</strong> structure to fill in.</p> </dd> + + + + + <p>Retrieves the list of character ranges supported by a font.</p> + <p>The list of character ranges supported by a font, is useful for scenarios like character picking, glyph display, and efficient font selection lookup. GetUnicodeRanges is similar to {{GDI}}'s GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).</p> + <p>Returns true if the font is monospaced, else it returns false.</p> + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Applies spacing between characters, properly adjusting glyph clusters and diacritics.</p> + <p>The input and output advances/offsets are allowed to alias the same array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The length of the clustermap and original text.</p> </dd> + + + <dd> <p>The number of glyphs.</p> </dd> + + + <dd> <p>Mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>The advance width of each glyph.</p> </dd> + + + <dd> <p>The offset of the origin of each glyph.</p> </dd> + + + <dd> <p>Properties of each glyph, from GetGlyphs.</p> </dd> + + + <dd> <p>The new advance width of each glyph.</p> </dd> + + + <dd> <p>The new offset of the origin of each glyph.</p> </dd> + + + + + <p>Retrieves the given baseline from the font.</p> + <p>If the baseline does not exist in the font, it is not considered an error, but the function will return exists = false. You may then use heuristics to calculate the missing base, or, if the flag simulationAllowed is true, the function will compute a reasonable approximation for you.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_BASELINE}}</strong>-typed value that specifies the baseline of interest.</p> </dd> + + + <dd> <p>Whether the baseline is vertical or horizontal.</p> </dd> + + + <dd> <p>Simulate the baseline if it is missing in the font.</p> </dd> + + + <dd> <p>Script analysis result from AnalyzeScript.</p> <strong>Note</strong>??You can pass an empty script analysis structure, like this <code>{{DWRITE_SCRIPT_ANALYSIS}} scriptAnalysis = {};</code>, and this method will return the default baseline. ? </dd> + + + <dd> <p>The language of the run.</p> </dd> + + + <dd> <p>The baseline coordinate value in design units.</p> </dd> + + + <dd> <p>Whether the returned baseline exists in the font.</p> </dd> + + + + + <p>Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink callback <strong>SetGlyphOrientation</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p> + <p>The translation component of the transform returned is zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle that was reported into <strong>{{IDWriteTextAnalysisSink1::SetGlyphOrientation}}</strong>.</p> </dd> + + + <dd> <p>Whether the run's glyphs are sideways or not.</p> </dd> + + + <dd> <p>Returned transform.</p> </dd> + + + + + <p>Retrieves the properties for a given script.</p> + <p>Returns properties for the given script. If the script is invalid, it returns generic properties for the unknown script and {{E_INVALIDARG}}.</p> + + + <dd> <p>The script for a run of text returned from <strong>{{IDWriteTextAnalyzer::AnalyzeScript}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure that describes info for the script.</p> </dd> + + + + + <p>Determines the complexity of text, and whether you need to call <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> for full script shaping. </p> + <p>Text is not simple if the characters are part of a script that has complex shaping requirements, require bidi analysis, combine with other characters, reside in the supplementary planes, or have glyphs that participate in standard OpenType features. The length returned will not split combining marks from their base characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves justification opportunity information for each of the glyphs given the text and shaping glyph properties.</p> + <p>This function is called per-run, after shaping is done via the <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> method. </p><strong>Note</strong>??this function only supports natural metrics (<strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face that was used for shaping. This is mainly important for returning correct results of the kashida width. </p> <p>May be {{NULL}}. </p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Characters used to produce the glyphs.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Glyph properties produced from shaping.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that receives info for the allowed justification expansion/compression for each glyph.</p> </dd> + + + + + <p>Justifies an array of glyph advances to fit the line width.</p> + <p>You call <strong>JustifyGlyphAdvances</strong> after you call <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong> to collect all the opportunities, and <strong>JustifyGlyphAdvances</strong> spans across the entire line. The input and output arrays are allowed to alias each other, permitting in-place update.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The line width.</p> </dd> + + + <dd> <p>The glyph count.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that contains info for the allowed justification expansion/compression for each glyph. Get this info from <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong>. </p> </dd> + + + <dd> <p>An array of glyph advances.</p> </dd> + + + <dd> <p>An array of glyph offsets.</p> </dd> + + + <dd> <p>The returned array of justified glyph advances.</p> </dd> + + + <dd> <p>The returned array of justified glyph offsets.</p> </dd> + + + + + <p>Fills in new glyphs for complex scripts where justification increased the advances of glyphs, such as Arabic with kashida.</p> + <p>You call <strong>GetJustifiedGlyphs</strong> after the line has been justified, and it is per-run. </p><p>You should call <strong>GetJustifiedGlyphs</strong> if <strong>{{IDWriteTextAnalyzer1::GetScriptProperties}}</strong> returns a non-null <strong>{{DWRITE_SCRIPT_PROPERTIES}}.justificationCharacter</strong> for that script.</p><p> Use <strong>GetJustifiedGlyphs</strong> mainly for cursive scripts like Arabic. If <em>maxGlyphCount</em> is not large enough, <strong>GetJustifiedGlyphs</strong> returns the error {{E_NOT_SUFFICIENT_BUFFER}} and fills the variable to which <em>actualGlyphCount</em> points with the needed glyph count.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face used for shaping.</p> <p>May be {{NULL}}.</p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Maximum number of output glyphs allocated by caller.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Original glyphs produced from shaping.</p> </dd> + + + <dd> <p>Original glyph advances produced from shaping.</p> </dd> + + + <dd> <p>Justified glyph advances from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Justified glyph offsets from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Properties of each glyph, from <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong>. </p> </dd> + + + <dd> <p>The new glyph count written to the modified arrays, or the needed glyph count if the size is not large enough.</p> </dd> + + + <dd> <p>Updated clustermap.</p> </dd> + + + <dd> <p>Updated glyphs with new glyphs inserted where needed.</p> </dd> + + + <dd> <p>Updated glyph advances.</p> </dd> + + + <dd> <p>Updated glyph offsets.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p>Enables or disables pair-kerning on a given text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The text range to which the change applies.</p> </dd> + + + + + <p>Gets whether or not pair-kerning is enabled at given position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Sets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Gets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Encapsulates a 32-bit device independent bitmap and device context, which you can use for rendering glyphs.</p> + + + + <p>Gets the current text antialiasing mode of the bitmap render target.</p> + <p>Returns a <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> + + + + <p>Sets the current text antialiasing mode of the bitmap render target.</p> + <p>The antialiasing mode of a newly-created bitmap render target defaults to <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE}}</strong>. An app can change the antialiasing mode by calling <strong>SetTextAntialiasMode</strong>. For example, an app might specify <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE}}</strong> for grayscale antialiasing when it renders text onto a transparent bitmap.</p> + <p>Returns {{S_OK}} if successful, or {{E_INVALIDARG}} if the argument is not valid.</p> + + + <dd> <p>A <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> </dd> + + + + + <p>The optical margin alignment mode.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS}}</strong>, then the alignment uses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + + + <dd> <p>Align to the default origin and side-bearings of the glyph.</p> </dd> + + + <dd> <p>Align to the ink of the glyphs, such that the black box abuts the margins.</p> </dd> + + + + + <p>Specifies whether to enable grid-fitting of glyph outlines (also known as hinting).</p> + + + <dd> <p>Choose grid fitting based on the font's table information.</p> </dd> + + + <dd> <p>Always disable grid fitting, using the ideal glyph outlines.</p> </dd> + + + <dd> <p>Enable grid fitting, adjusting glyph outlines for device pixel display.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs with glyph color information. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>Glyph run to draw for this layer.</p> </dd> + + + <dd> <p>Pointer to the glyph run description for this layer. This may be <strong>{{NULL}}</strong>. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.</p> </dd> + + + <dd> <p>X coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Y coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Color value of the run; if all members are zero, the run should be drawn using the current brush.</p> </dd> + + + <dd> <p>Zero-based index into the font?s color palette; if this is <strong>0xFFFF</strong>, the run should be drawn using the current brush.</p> </dd> + + + + + <p>Allows you to access fallback fonts from the font list.</p><p>The <strong>{{IDWriteFontFallback}}</strong> interface defines a fallback sequence to map character ranges to fonts, which is either created via <strong>{{IDWriteFontFallbackBuilder}}</strong> or retrieved from <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> + + + + <p>Determines an appropriate font to use to render the beginning range of text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text source implementation holds the text and locale.</p> </dd> + + + <dd> <p>Starting position to analyze.</p> </dd> + + + <dd> <p>Length of the text to analyze.</p> </dd> + + + <dd> <p>Default font collection to use.</p> </dd> + + + <dd> <p>Family name of the base font. If you pass null, no matching will be done against the family.</p> </dd> + + + <dd> <p>The desired weight.</p> </dd> + + + <dd> <p>The desired style.</p> </dd> + + + <dd> <p>The desired stretch.</p> </dd> + + + <dd> <p>Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.</p> </dd> + + + <dd> <p>The font that should be used to render the first <em>mappedLength</em> characters of the text. If it returns {{NULL}}, that means that no font can render the text, and <em>mappedLength</em> is the number of characters to skip (rendered with a missing glyph). +</p> </dd> + + + <dd> <p>Scale factor to multiply the em size of the returned font by.</p> </dd> + + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines. </p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. This interface has all the same methods as <strong>{{IDWriteTextFormat}}</strong> and adds the ability for you to apply an explicit orientation.</p> + + + + <p>Sets the orientation of a text format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The orientation to apply to the text format.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>The preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Sets the wrapping mode of the last line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If set to {{FALSE}}, the last line is not wrapped. If set to {{TRUE}}, the last line is wrapped.</p> <p>The last line is wrapped by default.</p> </dd> + + + + + <p>Gets the wrapping mode of the last line.</p> + <p>Returns {{FALSE}} if the last line is not wrapped; {{TRUE}} if the last line is wrapped.</p> + + + + <p>Sets the optical margin alignment for the text format.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_USING_SIDE_BEARINGS}}</strong>, then the alignment Suses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The optical alignment to set.</p> </dd> + + + + + <p>Gets the optical margin alignment for the text format.</p> + <p>The optical alignment.</p> + + + + <p> Applies the custom font fallback onto the layout. If none is set, it uses the default system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font fallback to apply to the layout.</p> </dd> + + + + + <p>Gets the current fallback. If none was ever set since creating the layout, it will be nullptr.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the the current font fallback object.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Set the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Preferred glyph orientation.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Set whether or not the last word on the last line is wrapped. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Line wrapping option.</p> </dd> + + + + + <p>Get whether or not the last word on the last line is wrapped.</p> + + + + <p>Set how the glyphs align to the edges the margin. Default behavior is to align glyphs using their default glyphs metrics, which include side bearings. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Optical alignment option.</p> </dd> + + + + + <p>Get how the glyphs align to the edges the margin. </p> + + + + <p>Apply a custom font fallback onto layout. If none is specified, the layout uses the system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Custom font fallback created from <strong>{{IDWriteFontFallbackBuilder::CreateFontFallback}}</strong> or <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> </dd> + + + + + <p>Get the current font fallback object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current font fallback object.</p> </dd> + + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p><p>Extends <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to pass valid values for the baseline origin rather than zeroes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a complete list of OpenType features available for a script or font. If a feature is partially supported, then this method indicates that it is supported. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to get features from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The maximum number of tags to return.</p> </dd> + + + <dd> <p>The actual number of tags returned.</p> </dd> + + + <dd> <p>An array of OpenType font feature tags.</p> </dd> + + + + + <p>Checks if a typographic feature is available for a glyph or a set of glyphs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read glyph information from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The font feature tag to check.</p> </dd> + + + <dd> <p>The number of glyphs to check.</p> </dd> + + + <dd> <p>An array of glyph indices to check.</p> </dd> + + + <dd> <p>An array of integers that indicate whether or not the font feature applies to each glyph specified.</p> </dd> + + + + + <p>Allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + + + + <p>Appends a single mapping to the list. Call this once for each additional mapping.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Unicode ranges that apply to this mapping.</p> </dd> + + + <dd> <p>Number of Unicode ranges.</p> </dd> + + + <dd> <p>List of target family name strings.</p> </dd> + + + <dd> <p>Number of target family names.</p> </dd> + + + <dd> <p>Optional explicit font collection for this mapping.</p> </dd> + + + <dd> <p>Locale of the context.</p> </dd> + + + <dd> <p>Base family name to match against, if applicable.</p> </dd> + + + <dd> <p>Scale factor to multiply the result target font by.</p> </dd> + + + + + <p>Add all the mappings from an existing font fallback object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An existing font fallback object.</p> </dd> + + + + + <p>Creates the finalized fallback object from the mappings added.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the created fallback list.</p> </dd> + + + + + <p>Represents a physical font in a font collection.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Enables determining if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has color information ({{COLR}} and {{CPAL}} tables); otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace2}}</strong> interface.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Allows you to determine if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if a color rendering path is potentially necessary.</p> + + + + <p>Gets the number of color palettes defined by the font. </p> + <p>The return value is zero if the font has no color information. Color fonts are required to define at least one palette, with palette index zero reserved as the default palette.</p> + + + + <p>Get the number of entries in each color palette.</p> + <p>The number of entries in each color palette. All color palettes in a font have the same number of palette entries. The return value is zero if the font has no color information. +</p> + + + + <p>Gets color values from the font's color palette.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{E_INVALIDARG}}</dt> </dl> </td><td> <p>The sum of <em>firstEntryIndex</em> and <em>entryCount</em> is greater than the actual number of palette entries that's returned by the <strong>GetPaletteEntryCount</strong> method. +</p> </td></tr> <tr><td> <dl> <dt>{{DWRITE_E_NOCOLOR}}</dt> </dl> </td><td> <p>The font doesn't have a palette with the specified palette index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the color palette. If the font does not have a palette with the specified index, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong>.</p> </dd> + + + <dd> <p>Zero-based index of the first palette entry to read.</p> </dd> + + + <dd> <p>Number of palette entries to read.</p> </dd> + + + <dd> <p>Array that receives the color values.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>This interface allows the application to enumerate through the color glyph runs. The enumerator enumerates the layers in a back to front order for appropriate layering.</p> + + + + <p>Move to the next glyph run in the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if there is a next glyph run.</p> </dd> + + + + + <p>Returns the current glyph run of the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the current glyph run.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the grid fitting mode.</p> + <p>Returns a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the grid fitting mode.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Creates a font fallback object from the system font fallback list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback object.</p> </dd> + + + + + <p>Creates a font fallback builder object.</p><p>A font fall back builder allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback builder object.</p> </dd> + + + + + <p>This method is called on a glyph run to translate it in to multiple color glyph runs.</p> + <p> If the code calls this method with a glyph run that contains no color information, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls <strong>DrawGlyphRun</strong> with each of the returned glyph runs and foreground colors. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>The vertical baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>Original glyph run containing monochrome glyph {{IDs}}.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Measuring mode used to compute glyph positions if the run contains color glyphs.</p> </dd> + + + <dd> <p> World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, and identity transform is assumed. </p> </dd> + + + <dd> <p> Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>. </p> </dd> + + + <dd> <p> If the original glyph run contains color glyphs, this parameter receives a reference to an <strong>{{IDWriteColorGlyphRunEnumerator}}</strong> interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> and the output reference is <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p>The geometry of a device pixel.</p> </dd> + + + <dd> <p>Method of rendering glyphs. In most cases, this should be {{DWRITE_RENDERING_MODE_DEFAULT}} to automatically use an appropriate mode.</p> </dd> + + + <dd> <p>How to grid fit glyph outlines. In most cases, this should be {{DWRITE_GRID_FIT_DEFAULT}} to automatically choose an appropriate mode.</p> </dd> + + + <dd> <p>Holds the newly created rendering parameters object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates a glyph run analysis object, which encapsulates information used to render a glyph run.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure specifying the properties of the glyph run.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the emSize and pixelsPerDip.</p> </dd> + + + <dd> <p>Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default and not outline).</p> </dd> + + + <dd> <p>Specifies the method to measure glyphs.</p> </dd> + + + <dd> <p>How to grid-fit glyph outlines. This must be non-default.</p> </dd> + + + <dd> <p>Specifies the antialias mode.</p> </dd> + + + <dd> <p>Horizontal position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Receives a reference to the newly created object.</p> </dd> + + + + + <p>Identifies a string in a font.</p> + + + <dd> <p>Unspecified font property identifier.</p> </dd> + + + <dd> <p>Family name for the weight-width-slope model.</p> </dd> + + + <dd> <p>Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Face name of the font, for example Regular or Bold.</p> </dd> + + + <dd> <p>The full name of the font, for example "Arial Bold", from name id 4 in the name table.</p> </dd> + + + <dd> <p>{{GDI}}-compatible family name. Because {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names, for example "Arial", "Arial Narrow", "Arial Black".</p> </dd> + + + <dd> <p>The postscript name of the font, for example "GillSans-Bold", from name id 6 in the name table.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font was primarily designed to support.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font declares it is able to support.</p> </dd> + + + <dd> <p>Semantic tag to describe the font, for example Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic.</p> </dd> + + + <dd> <p>Weight of the font represented as a decimal string in the range 1-999.</p> </dd> + + + <dd> <p>Stretch of the font represented as a decimal string in the range 1-9.</p> </dd> + + + <dd> <p>Style of the font represented as a decimal string in the range 0-2.</p> </dd> + + + <dd> <p>Total number of properties.</p> </dd> + + + + + <p>Specifies the location of a resource.</p> + + + <dd> <p>The resource is remote, and information about it is unknown, including the file size and date. If you attempt to create a font or file stream, the creation will fail until locality becomes at least partial. </p> </dd> + + + <dd> <p>The resource is partially local, which means you can query the size and date of the file stream. With this type, you also might be able to create a font face and retrieve the particular glyphs for metrics and drawing, but not all the glyphs will be present.</p> </dd> + + + <dd> <p>The resource is completely local, and all font functions can be called without concern of missing data or errors related to network connectivity.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics</p> + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Font property used for filtering font sets and building a font set with explicit properties.</p> + + + <dd> <p>Specifies the requested font property, such as {{DWRITE_FONT_PROPERTY_ID_FAMILY_NAME}}.</p> </dd> + + + <dd> <p>Specifies the value, such as "Segoe {{UI}}".</p> </dd> + + + <dd> <p>Specifies the locale to use, such as "en-{{US}}". Simply leave this empty when used with the font set filtering functions, as they will find a match regardless of language. For passing to AddFontFaceReference, the localeName specifies the language of the property value.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + <dd> <p>White space before the content of the line. This is included in the line height and baseline distances. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space above the content.</p> </dd> + + + <dd> <p>White space after the content of the line. This is included in the height of the line. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space below the content.</p> </dd> + + + + + <p></p> + + + <dd> <p>Method used to determine line spacing.</p> </dd> + + + <dd> <p>Spacing between lines. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>Line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} between lines</li> <li>proportional line spacing: a scaling factor to be applied to the computed line height; for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Distance from top of line to baseline. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>default line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} from the top of the line to the baseline</li> <li>proportional line spacing: a scaling factor applied to the computed baseline; for each line, the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining leading is distributed after the line. It is ignored for the default and uniform line spacing methods. The leading that is available to distribute before or after the line depends on the values of the height and baseline parameters.</p> </dd> + + + <dd> <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics.</p> </dd> + + + + + <p>Represents a color glyph run. The {{IDWriteFactory4::TranslateColorGlyphRun}} method returns an ordered collection of color glyph runs of varying types depending on what the font supports.</p> + + + <dd> <p>Type of glyph image format for this color run. Exactly one type will be set since TranslateColorGlyphRun has already broken down the run into separate parts.</p> </dd> + + + <dd> <p>Measuring mode to use for this glyph run.</p> </dd> + + + + + <p>Data for a single glyph from GetGlyphImageData.</p> + + + <dd> <p>Pointer to the glyph data.</p> </dd> + + + <dd> <p>Size of glyph data in bytes.</p> </dd> + + + <dd> <p>Unique identifier for the glyph data. Clients may use this to cache a parsed/decompressed version and tell whether a repeated call to the same font returns the same data.</p> </dd> + + + <dd> <p>Pixels per em of the returned data. For non-scalable raster data ({{PNG}}/{{TIFF}}/{{JPG}}), this can be larger or smaller than requested from GetGlyphImageData when there isn't an exact match. For scaling intermediate sizes, use: desired pixels per em * font em size / actual pixels per em.</p> </dd> + + + <dd> <p>Size of image when the format is pixel data.</p> </dd> + + + <dd> <p>Left origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Right origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Top origin along the vertical central baseline.</p> </dd> + + + <dd> <p>Bottom origin along vertical central baseline.</p> </dd> + + + + + + + + <p>Represents a reference to a font face. A uniquely identifying reference to a font, from which you can create a font face to query font metrics and use for rendering. A font face reference consists of a font file, font face index, and font face simulation. The file data may or may not be physically present on the local machine yet. </p> + + + + <p>Creates a font face from the reference for use with layout, shaping, or rendering.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + <p>Creates a font face with alternate font simulations, for example, to explicitly simulate a bold font face out of a regular variant.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + + + + <p>Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero. </p> + <p> the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.</p> + + + + <p>Obtains the algorithmic style simulation flags of a font face.</p> + <p>Returns the algorithmic style simulation flags of a font face.</p> + + + + <p>Obtains the font file representing a font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.</p> + <p>the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal <strong>GetFileSize</strong>.</p> + + + + <p>Get the total size of the font face in bytes. </p> + <p>Returns the total size of the font face in bytes. If the locality is remote, this value is unknown and will be zero.</p> + + + + <p>Get the last modified date.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the last modified date. The time may be zero if the font file loader does not expose file time.</p> </dd> + + + + + <p>Get the locality of this font face reference.</p> + <p>You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with {{DWRITE_E_REMOTEFONT}}. This function may change between calls depending on background downloads and whether cached data expires.</p> + <p>Returns the locality of this font face reference.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p> Downloading a character involves downloading every glyph it depends on directly or indirectly, via font tables (cmap, {{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>Downloading a glyph involves downloading any other glyphs it depends on from the font tables ({{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a font in a font collection.</p> + + + + <p>Used with the EnqueuMakeResident function to choose how residency operations proceed when the memory budget is exceeded.</p> + <p></p> + + + <dd> <p>Specifies the default residency policy, which allows residency operations to succeed regardless of the application's current memory budget. EnqueueMakeResident returns {{E_OUTOFMEMORY}} only when there is no memory available.</p> </dd> + + + <dd> <p>Specifies that the EnqueueMakeResident function should return {{E_OUTOFMEMORY}} when the residency operation would exceed the application's current memory budget.</p> </dd> + + + + + <p>Creates a font face object for the font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFace3}}</strong> interface for the newly created font face object.</p> </dd> + + + + + <p>Compares two instances of font references for equality.</p> + <p>Returns whether the two instances of font references are equal. Returns <strong>{{TRUE}}</strong> if the two instances are equal; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{IDWriteFont}}</strong> interface for the other font instance to compare to this font instance.</p> </dd> + + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + + + + <p>Gets the current locality of the font.</p> + <p>For fully local files, the result will always be {{DWRITE_LOCALITY_LOCAL}}. A downloadable file may be any of the states, and this function may change between calls.</p> + <p>Returns the current locality of the font.</p> + + + + <p>Represents an absolute reference to a font face.</p> + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font, used for font selection and matching.</p> + <p>This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{DWRITE_PANOSE}}</strong> structure that receives the {{PANOSE}} values from the font.</p> </dd> + + + + + <p>Gets the weight of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_WEIGHT}}</strong>-typed value that specifies the density of a typeface, in terms of the lightness or heaviness of the strokes. </p> + + + + <p>Gets the stretch (also known as width) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STRETCH}}</strong>-typed value that specifies the degree to which a font has been stretched compared to a font's normal aspect ratio. </p> + + + + <p>Gets the style (also known as slope) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STYLE}}</strong>-typed value that specifies the style of the font. </p> + + + + <p>Creates a localized strings object that contains the family names for the font family, indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Gets a localized strings collection that contains the specified informational strings, indexed by locale name.</p> + <p>If the font doesn't contain the specified string, the return value is {{S_OK}}, but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>A <strong>{{DWRITE_INFORMATIONAL_STRING_ID}}</strong>-typed value that identifies the strings to get.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + <dd> <p>A reference to a variable that receives whether the font contains the specified string {{ID}}. <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Determines whether the font supports the specified character.</p> + <p>Returns whether the font supports the specified character. Returns <strong>{{TRUE}}</strong> if the font has the specified character; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>Determines whether the character is locally downloaded from the font.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has the specified character locally available, <strong>{{FALSE}}</strong> if not or if the font does not support that character. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines whether the glyph is locally downloaded from the font.</p> + <p>Returns {{TRUE}} if the font has the specified glyph locally available.</p> + + + <dd> <p>Glyph identifier.</p> </dd> + + + + + <p>Determines whether the specified characters are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of characters.</p> </dd> + + + <dd> <p>The number of elements in the character array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified characters are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified characters are local, {{FALSE}} if any of the specified characters are remote.</p> </dd> + + + + + <p>Determines whether the specified glyphs are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of glyph indices.</p> </dd> + + + <dd> <p>The number of elements in the glyph index array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified glyphs are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified glyphs are local, {{FALSE}} if any of the specified glyphs are remote.</p> </dd> + + + + + <p></p> + + + + <p>Get the number of total fonts in the set.</p> + <p>Returns the number of total fonts in the set.</p> + + + + <p>Gets a reference to the font at the specified index, which may be local or remote.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font.</p> </dd> + + + <dd> <p>Receives a reference the font face reference object, or nullptr on failure.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases). </p> </dd> + + + <dd> <p>Receives a reference to the newly created strings list.</p> </dd> + + + + + <p>Returns how many times a given property value occurs in the set.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>Receives how many times the property occurs.</p> </dd> + + + + + <p>Returns a subset of fonts filtered by the given properties.</p> + <p>If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>List of properties to filter using.</p> </dd> + + + <dd> <p>The number of properties to filter.</p> </dd> + + + <dd> <p>The subset of fonts that match the properties, or nullptr on failure.</p> </dd> + + + + + <p>Contains methods for building a font set.</p> + + + + <p>Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reference to the font.</p> </dd> + + + <dd> <p>List of properties to associate with the reference.</p> </dd> + + + <dd> <p>The number of properties defined.</p> </dd> + + + + + <p>Appends an existing font set to the one being built, allowing one to aggregate two sets or to essentially extend an existing one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font set to append font face references from.</p> </dd> + + + + + <p>Creates a font set from all the font face references added so far with AddFontFaceReference.</p> + <p>Creating a font set takes less time if the references were added with metadata rather than needing to extract the metadata from the font file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the newly created font set object, or nullptr in case of failure.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + + + + <p>Gets the underlying font set used by this collection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the font set used by the collection.</p> </dd> + + + + + + + + <p>Represents a family of related fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Represents a collection of strings indexed by number. An {{IDWriteStringList}} is identical to {{IDWriteLocalizedStrings}} except for the semantics, where localized strings are indexed on language (each language has one string property) whereas {{IDWriteStringList}} may contain multiple strings of the same language, such as a string list of family names from a font set. You can QueryInterface from an {{IDWriteLocalizedStrings}} to an {{IDWriteStringList}}. </p> + + + + <p>Gets the number of strings in the string list.</p> + <p>Returns the number of strings in the string list.</p> + + + + <p>Gets the length in characters (not including the null terminator) of the locale name with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Receives the length in characters, not including the null terminator.</p> </dd> + + + + + <p>Copies the locale name with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Character array that receives the locale name.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p>Gets the length in characters (not including the null terminator) of the string with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Receives the length in characters of the string, not including the null terminator.</p> </dd> + + + + + <p>Copies the string with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Character array that receives the string.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p></p> + + + + <p>Registers a client-defined listener object that receives download notifications. All registered listener's DownloadCompleted will be called after <strong>BeginDownload</strong> completes. </p> + <p>An <strong>{{IDWriteFontDownloadListener}}</strong> can also be passed to <strong>BeginDownload</strong> using the context parameter, rather than globally registered to the queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Unregisters a notification handler that was previously registered using <strong>AddListener</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling <strong>BeginDownload</strong> clears the queue.</p> + <p>{{TRUE}} if the queue is empty, {{FALSE}} if there are requests pending for <strong>BeginDownload</strong>.</p> + + + + <p>Begins an asynchronous download operation. The download operation executes in the background until it completes or is cancelled by a <strong>CancelDownload</strong> call.</p> + <p>BeginDownload removes all download requests from the queue, transferring them to a background download operation. If any previous downloads are still ongoing when BeginDownload is called again, the new download does not complete until the previous downloads have finished. If the queue is empty and no active downloads are pending, the <strong>DownloadCompleted</strong> callback is called immediately with {{DWRITE_DOWNLOAD_RESULT_NONE}}.</p> + <p> Returns {{S_OK}} if a download was successfully begun, {{S_FALSE}} if the queue was empty, or a standard {{HRESULT}} error code.</p> + + + + <p> Removes all download requests from the queue and cancels any active download operations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.</p> + <p>The current generation number of the download queue.</p> + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the rendering mode.</p> + <p>Returns a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the rendering mode.</p> + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Creates a glyph-run-analysis object that encapsulates info that DirectWrite uses to render a glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p> The amount of contrast enhancement, zero or greater. </p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p> A <strong>{{DWRITE_PIXEL_GEOMETRY}}</strong>-typed value that specifies the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value that specifies the method (for example, ClearType natural quality) for rendering glyphs. In most cases, specify <strong>{{DWRITE_RENDERING_MODE1_DEFAULT}}</strong> to automatically use an appropriate mode. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value that specifies how to grid-fit glyph outlines. In most cases, specify <strong>{{DWRITE_GRID_FIT_DEFAULT}}</strong> to automatically choose an appropriate mode. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to a <strong>{{IDWriteRenderingParams3}}</strong> interface for the newly created rendering parameters object, or <strong>{{NULL}}</strong> in case of failure. </p> </dd> + + + + + <p>Creates a reference to a font given a full path. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>Last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.</p> </dd> + + + <dd> <p>The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Contains newly created font face reference object, or nullptr in case of failure.</p> </dd> + + + + + <p>Retrieves the list of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates an empty font set builder to add font face references and create a custom font set. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set builder object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Create a weight/width/slope tree from a set of fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of fonts to use to build the collection.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Retrieves a weight/width/slope tree of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates whether to include cloud fonts or only locally installed fonts.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + <dd> <p>If this parameter is {{TRUE}}, the function performs an immediate check for changes to the set of system fonts. If this parameter is {{FALSE}}, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify {{TRUE}} if it has just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p>Gets the font download queue associated with this factory object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the font download queue interface.</p> </dd> + + + + + <p>Represents a list of fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p> Application-defined callback interface that receives notifications from the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong> interface). Callbacks will occur on the downloading thread, and objects must be prepared to handle calls on their methods from other threads at any time.</p> + + + + <p>The DownloadCompleted method is called back on an arbitrary thread when a download operation ends. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the download queue interface on which the BeginDownload method was called.</p> </dd> + + + <dd> <p>Optional context object that was passed to BeginDownload. AddRef is called on the context object by BeginDownload and Release is called after the DownloadCompleted method returns.</p> </dd> + + + <dd> <p>Result of the download operation.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p>Creates a font object that matches the properties specified by the {{LOGFONT}} structure.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font collection to search. If {{NULL}}, the local system font collection is used.</p> </dd> + + + <dd> <p>Receives a newly created font object if successful, or {{NULL}} in case of error.</p> </dd> + + + + + <p>Reads the font signature from the given font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face to read font signature from.</p> </dd> + + + <dd> <p>Font signature from the {{OS}}/2 table, ulUnicodeRange and ulCodePageRange.</p> </dd> + + + + + <p>Gets a list of matching fonts based on the specified {{LOGFONT}} values. Only fonts of that family name will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font set to search.</p> </dd> + + + <dd> <p>&gt;Receives the filtered font set if successful.</p> </dd> + + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. </p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure describing how the space between lines is managed for the paragraph.</p> </dd> + + + + + <p></p> + + + + <p>Invalidates the layout, forcing layout to remeasure before calling the metrics or drawing functions. This is useful if the locality of a font changes, and layout should be redrawn, or if the size of a client implemented {{IDWriteInlineObject}} changes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets line spacing information.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Retrieves properties of each line.</p> + <p> If maxLineCount is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and actualLineCount is set to the number of lines needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array to fill with line information.</p> </dd> + + + <dd> <p>The maximum size of the lineMetrics array.</p> </dd> + + + <dd> <p>The actual size of the lineMetrics array that is needed.</p> </dd> + + + + + <p>Enumerator for an ordered collection of color glyph runs.</p> + + + + <p>Gets the current color glyph run.</p> + <p>Standard {{HRESULT}} error code. An error is returned if there is no current glyph run, i.e., if MoveNext has not yet been called or if the end of the sequence has been reached.</p> + + + <dd> <p>Receives a reference to the color glyph run. The reference remains valid until the next call to MoveNext or until the interface is released.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. It contains font face type, appropriate file references and face identification data. Various font data such as metrics, names and glyph outlines are obtained from {{IDWriteFontFace}}.</p> + + + + <p>Gets the available image formats of a specific glyph and ppem. </p> + <p>Glyphs often have at least TrueType or {{CFF}} outlines, but they may also have {{SVG}} outlines, or they may have only bitmaps with no TrueType/{{CFF}} outlines. Some image formats, notably the {{PNG}}/{{JPEG}} ones, are size specific and will return no match when there isn't an entry in that size range.</p><p>Glyph ids beyond the glyph count return {{DWRITE_GLYPH_IMAGE_FORMATS_NONE}}.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph.</p> </dd> + + + <dd> </dd> + + + <dd> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + + + <p>Gets a reference to the glyph data based on the desired image format.</p> + <p> The glyphDataContext must be released via <strong>ReleaseGlyphImageData</strong> when done if the data is not empty, similar to <strong>{{IDWriteFontFileStream::ReadFileFragment}}</strong> and <strong>{{IDWriteFontFileStream::ReleaseFileFragment}}</strong>. The data reference is valid so long as the <strong>{{IDWriteFontFace}}</strong> exists and <strong>ReleaseGlyphImageData</strong> has not been called. </p><p> The <strong>{{DWRITE_GLYPH_IMAGE_DATA::uniqueDataId}}</strong> is valuable for caching purposes so that if the same resource is returned more than once, an existing resource can be quickly retrieved rather than needing to reparse or decompress the data. </p><p> The function only returns {{SVG}} or raster data - requesting TrueType/{{CFF}}/{{COLR}} data returns {{DWRITE_E_INVALIDARG}}. Those must be drawn via DrawGlyphRun or queried using GetGlyphOutline instead. Exactly one format may be requested or else the function returns {{DWRITE_E_INVALIDARG}}. If the glyph does not have that format, the call is not an error, but the function returns empty data. </p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph to retrieve image data for.</p> </dd> + + + <dd> <p>Requested pixels per em.</p> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + <dd> <p>On return contains data for a glyph.</p> </dd> + + + <dd> </dd> + + + + + <p>Releases the table data obtained from ReadGlyphData.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Opaque context from ReadGlyphData.</p> </dd> + + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Translates a glyph run to a sequence of color glyph runs, which can be rendered to produce a color representation of the original "base" run.</p> + <p>Calling <strong>{{IDWriteFactory2::TranslateColorGlyphRun}}</strong> is equivalent to calling <strong>{{IDWriteFactory4::TranslateColorGlyph}}</strong> run with the following formats specified: {{DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE}}|{{DWRITE_GLYPH_IMAGE_FORMATS_CFF}}|{{DWRITE_GLYPH_IMAGE_FORMATS_COLR}}.</p> + <p>Returns {{DWRITE_E_NOCOLOR}} if the font has no color information, the glyph run does not contain any color glyphs, or the specified color palette index is out of range. In this case, the client should render the original glyph run. Otherwise, returns a standard {{HRESULT}} error code.</p> + + + <dd> <p>Horizontal and vertical origin of the base glyph run in pre-transform coordinates.</p> </dd> + + + <dd> <p>Pointer to the original "base" glyph run.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Which data formats the runs should be split into.</p> </dd> + + + <dd> <p>Measuring mode, needed to compute the origins of each glyph.</p> </dd> + + + <dd> <p>Matrix converting from the client's coordinate space to device coordinates (pixels), i.e., the world transform multiplied by any {{DPI}} scaling.</p> </dd> + + + <dd> <p>Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>.</p> </dd> + + + <dd> <p>If the function succeeds, receives a reference to an enumerator object that can be used to obtain the color glyph runs. If the base run has no color glyphs, then the output reference is {{NULL}} and the method returns {{DWRITE_E_NOCOLOR}}.</p> </dd> + + + + + <p>Converts glyph run placements to glyph origins.</p> + <p>The transform and {{DPI}} have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p>The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p>The position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p>World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is {{NULL}}, and identity transform is assumed. </p> </dd> + + + <dd> <p>On return contains the glyph origins for the glyphrun.</p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p>Used to indicate the level of support that the adapter provides for optional features of Direct3D 12.</p> + <p></p> + + + <dd> <p> Indicates whether timestamp queries are supported on copy queues. </p> </dd> + + + <dd> <p> Indicates whether casting from one fully typed format to another, compatible, format is supported. </p> </dd> + + + <dd> <p> Indicates the kinds of command lists that support the ability to write an immediate value directly from the command stream into a specified buffer. </p> </dd> + + + <dd> <p> Indicates the level of support the adapter has for view instancing. </p> </dd> + + + <dd> <p> Indicates whether barycentrics are supported. </p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + <p> Indicates the measuring method used for text layout.</p> + + + <dd> <p> Specifies that text is measured using glyph ideal metrics whose values are independent to the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using glyph display-compatible metrics whose values tuned for the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using the same glyph display metrics as text measured by {{GDI}} using a font created with {{CLEARTYPE_NATURAL_QUALITY}}.</p> </dd> + + + + + <p>Specifies which formats are supported in the font, either at a font-wide level or per glyph.</p> + + + <dd> <p>Indicates no data is available for this glyph.</p> </dd> + + + <dd> <p>The glyph has TrueType outlines.</p> </dd> + + + <dd> <p>The glyph has {{CFF}} outlines.</p> </dd> + + + <dd> <p>The glyph has multilayered {{COLR}} data.</p> </dd> + + + <dd> <p>The glyph has {{SVG}} outlines as standard {{XML}}. Fonts may store the content gzip'd rather than plain text, indicated by the first two bytes as gzip header {0x1F 0x8B}.</p> </dd> + + + <dd> <p>The glyph has {{PNG}} image data, with standard {{PNG}} {{IHDR}}.</p> </dd> + + + <dd> <p>The glyph has {{JPEG}} image data, with standard {{JIFF}} {{SOI}} header.</p> </dd> + + + <dd> <p>The glyph has {{TIFF}} image data.</p> </dd> + + + <dd> <p>The glyph has raw 32-bit premultiplied {{BGRA}} data.</p> </dd> + + + + + <p>Specifies how the alpha value of a bitmap or render target should be treated.</p> + <p>The <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration is used with the <strong>{{D2D1_PIXEL_FORMAT}}</strong> enumeration to specify the alpha mode of a render target or bitmap. Different render targets and bitmaps support different alpha modes. For a list, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>The alpha value might not be meaningful.</p> </dd> + + + <dd> <p>The alpha value has been premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color. </p> </dd> + + + <dd> <p>The alpha value is ignored.</p> </dd> + + + + + <p> Contains the data format and alpha mode for a bitmap or render target. </p> + <p>For more information about the pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>A value that specifies the size and arrangement of channels in each pixel.</p> </dd> + + + <dd> <p>A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unkown. </p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as an unsigned 32-bit integer value, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate value of the point. </p> </dd> + + + <dd> <p>The y-coordinate value of the point.</p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as floating-point values, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate of the point. +</p> </dd> + + + <dd> <p>The y-coordinate of the point. +</p> </dd> + + + + + <p>A 2D vector that consists of two single-precision floating-point values (x, y). </p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A 4D vector that consists of four single-precision floating-point values (x, y, z, w).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + <dd> <p>The w value of the vector.</p> </dd> + + + + + <p>Represents a rectangle defined by the coordinates of the upper-left corner (left, top) and the coordinates of the lower-right corner (right, bottom). </p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p> Represents a rectangle defined by the upper-left corner pair of coordinates (left,top) and the lower-right corner pair of coordinates (right, bottom). These coordinates are expressed as a 32-bit integer values.</p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p>Stores an ordered pair of floating-point values, typically the width and height of a rectangle. </p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Stores an ordered pair of integers, typically the width and height of a rectangle.</p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Represents a 3-by-2 matrix.</p> + + + <dd> <p> The value in the first row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the first row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and second column of the matrix.</p> </dd> + + + + + <p>Describes a 4-by-3 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X3_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X3_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X3_F}} {{D2D1_MATRIX_4X3_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-3 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 4-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X4_F}} {{D2D1_MATRIX_4X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-4 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 5-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_5X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_5X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_5X4_F}} {{D2D1_MATRIX_5X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fifth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 5-by-4 floating point array that describes the matrix.</p> </dd> + + + + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether an opacity mask contains graphics or text. Direct2D uses this information to determine which gamma space to use when blending the opacity mask.</p> + + + <dd> <p>The opacity mask contains graphics. The opacity mask is blended in the gamma 2.2 color space.</p> </dd> + + + <dd> <p>The opacity mask contains non-{{GDI}} text. The gamma space used for blending is obtained from the render target's text rendering parameters. (<strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong>).</p> </dd> + + + <dd> <p>The opacity mask contains text rendered using the {{GDI}}-compatible rendering mode. The opacity mask is blended using the gamma for {{GDI}} rendering.</p> </dd> + + + + + <p>Specifies how a brush paints areas outside of its normal content area.</p> + <p>For an <strong>{{ID2D1BitmapBrush}}</strong>, the brush's content is the brush's bitmap. For an <strong>{{ID2D1LinearGradientBrush}}</strong>, the brush's content area is the gradient axis. For an <strong>{{ID2D1RadialGradientBrush}}</strong>, the brush's content is the area within the gradient ellipse. </p> + + + <dd> <p>Repeat the edge pixels of the brush's content for all regions outside the normal content area.</p> </dd> + + + <dd> <p>Repeat the brush's content.</p> </dd> + + + <dd> <p> The same as {{D2D1_EXTEND_MODE_WRAP}}, except that alternate tiles of the brush's content are flipped. (The brush's normal content is drawn untransformed.)</p> </dd> + + + + + <p>Specifies how the edges of nontext primitives are rendered.</p> + + + <dd> <p>Edges are antialiased using the Direct2D per-primitive method of high-quality antialiasing.</p> </dd> + + + <dd> <p>Objects are aliased in most cases. Objects are antialiased only when they are drawn to a render target created by the <strong>CreateDxgiSurfaceRenderTarget</strong> method and Direct3D multisampling has been enabled on the backing DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> </dd> + + + + + <p>Describes the antialiasing mode used for drawing text. </p> + <p>This enumeration is used with the <strong>SetTextAntialiasMode</strong> of an <strong>{{ID2D1RenderTarget}}</strong> to specify how text and glyphs are antialiased.</p><p> By default, Direct2D renders text in ClearType mode. Factors that can downgrade the default quality to grayscale or aliased:</p><ul> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_ALIASED}} </strong>, then the default text antialiasing mode is aliased. To change the DirectWrite rendering mode of an <strong>{{ID2D1RenderTarget}}</strong>, use the <strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong> method. </li> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_OUTLINE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If the render target has an alpha channel and is not set to <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If <strong>{{ID2D1RenderTarget::PushLayer}}</strong> is called without <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> (and the corresponding <strong>PopLayer</strong> has not been called yet), then the default text antialiasing mode is grayscale.</li> </ul> + + + <dd> <p>Use the system default. See Remarks.</p> </dd> + + + <dd> <p>Use ClearType antialiasing.</p> </dd> + + + <dd> <p>Use grayscale antialiasing.</p> </dd> + + + <dd> <p>Do not use antialiasing.</p> </dd> + + + + + <p>Specifies the algorithm that is used when images are scaled or rotated.</p><strong>Note</strong>??Starting in Windows?8, more interpolations modes are available. See <strong>{{D2D1_INTERPOLATION_MODE}}</strong> for more info.? + <p> To stretch an image, each pixel in the original image must be mapped to a group of pixels in the larger image. To shrink an image, groups of pixels in the original image must be mapped to single pixels in the smaller image. The effectiveness of the algorithms that perform these mappings determines the quality of a scaled image. Algorithms that produce higher-quality scaled images tend to require more processing time. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} </strong>provides faster but lower-quality interpolation, while <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> provides higher-quality interpolation. </p> + + + + <p>Specifies whether text snapping is suppressed or clipping to the layout rectangle is enabled. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>Text is not vertically snapped to pixel boundaries. This setting is recommended for text that is being animated. </p> </dd> + + + <dd> <p>Text is clipped to the layout rectangle.</p> </dd> + + + <dd> <p>Text is vertically snapped to pixel boundaries and is not clipped to the layout rectangle. </p> </dd> + + + <dd> <p>In Windows?8.1 and later, text is rendered using color versions of glyphs, if defined by the font.</p> </dd> + + + <dd> <p>Bitmap origins of color glyph bitmaps are not snapped.</p> </dd> + + + + + <p>Specifies whether an arc should be greater than 180 degrees.</p> + + + <dd> <p> An arc's sweep should be 180 degrees or less.</p> </dd> + + + <dd> <p> An arc's sweep should be 180 degrees or greater.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes the sequence of dashes and gaps in a stroke. </p> + <p>The following illustration shows several available dash styles. </p> + + + <dd> <p>A solid line with no breaks.</p> </dd> + + + <dd> <p>A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH}}</strong> is {2, 2}.</p> </dd> + + + <dd> <p>A dot followed by a longer gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DOT}}</strong> is {0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT}}</strong> is {2, 2, 0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT_DOT}}</strong> is {2, 2, 0, 2, 0, 2}.</p> </dd> + + + <dd> <p>The dash pattern is specified by an array of floating-point values.</p> </dd> + + + + + <p>Describes the shape that joins two lines or segments. </p> + <p> A miter limit affects how sharp miter joins are allowed to be. If the line join style is <strong>{{D2D1_LINE_JOIN_MITER_OR_BEVEL}}</strong>, then the join will be mitered with regular angular vertices if it doesn't extend beyond the miter limit; otherwise, the line join will be beveled.</p><p>The following illustration shows different line join settings for the same stroked path geometry. </p><p></p> + + + <dd> <p>Regular angular vertices. </p> </dd> + + + <dd> <p>Beveled vertices. </p> </dd> + + + <dd> <p>Rounded vertices. </p> </dd> + + + <dd> <p>Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices. </p> </dd> + + + + + <p>Specifies the different methods by which two geometries can be combined.</p> + <p>The following illustration shows the different geometry combine modes. +</p> + + + <dd> <p>The two regions are combined by taking the union of both. Given two geometries, <em>A</em> and <em>B</em>, the resulting geometry is geometry <em>A</em> + geometry <em>B</em>.</p> </dd> + + + <dd> <p>The two regions are combined by taking their intersection. The new area consists of the overlapping region between the two geometries. </p> </dd> + + + <dd> <p>The two regions are combined by taking the area that exists in the first region but not the second and the area that exists in the second region but not the first. Given two geometries, <em>A</em> and <em>B</em>, the new region consists of (<em>A</em>-<em>B</em>) + (<em>B</em>-<em>A</em>). </p> </dd> + + + <dd> <p>The second region is excluded from the first. Given two geometries, <em>A</em> and <em>B</em>, the area of geometry <em>B</em> is removed from the area of geometry <em>A</em>, producing a region that is <em>A</em>-<em>B</em>.</p> </dd> + + + + + <p>Describes how one geometry object is spatially related to another geometry object. </p> + + + <dd> <p>The relationship between the two geometries cannot be determined. This value is never returned by any {{D2D}} method. </p> </dd> + + + <dd> <p>The two geometries do not intersect at all.</p> </dd> + + + <dd> <p>The instance geometry is entirely contained by the passed-in geometry.</p> </dd> + + + <dd> <p>The instance geometry entirely contains the passed-in geometry.</p> </dd> + + + <dd> <p>The two geometries overlap but neither completely contains the other. </p> </dd> + + + + + <p>Specifies how a geometry is simplified to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is filled or hollow. </p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is open or closed. </p> + + + + <p>Indicates whether a segment should be stroked and whether the join between this segment and the previous one should be smooth. This enumeration allows a bitwise combination of its member values. </p> + + + <dd> <p>The segment is joined as specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface, and it is stroked. </p> </dd> + + + <dd> <p>The segment is not stroked.</p> </dd> + + + <dd> <p>The segment is always joined with the one preceding it using a round line join, regardless of which <strong>{{D2D1_LINE_JOIN}}</strong>enumeration is specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface. If this segment is the first segment and the figure is closed, a round line join is used to connect the closing segment with the first segment. If the figure is not closed, this setting has no effect on the first segment of the figure. If <strong>{{ID2D1SimplifiedGeometrySink::SetSegmentFlags}}</strong> is called just before <strong>{{ID2D1SimplifiedGeometrySink::EndFigure}}</strong>, the join between the closing segment and the last explicitly specified segment is affected.</p> </dd> + + + + + <p>Defines the direction that an elliptical arc is drawn. </p> + + + <dd> <p> Arcs are drawn in a counterclockwise (negative-angle) direction. </p> </dd> + + + <dd> <p> Arcs are drawn in a clockwise (positive-angle) direction. </p> </dd> + + + + + <p>Specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry. </p> + <p>Use the <strong>{{D2D1_FILL_MODE}}</strong> enumeration when creating an <strong>{{ID2D1GeometryGroup}}</strong> with the <strong>CreateGeometryGroup</strong> method, or when modifying the fill mode of an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> with the <strong>{{ID2D1SimplifiedGeometrySink::SetFillMode}}</strong> method.</p><p>Direct2D fills the interior of a path by using one of the two fill modes specified by this enumeration: <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) or <strong>{{D2D1_FILL_MODE_WINDING}}</strong> (winding). Because the modes determine how to fill the interior of a closed shape, all shapes are treated as closed when they are filled. If there is a gap in a segment in a shape, draw an imaginary line to close it. </p><p> To see the difference between the winding and alternate fill modes, assume that you have four circles with the same center and a different radius, as shown in the following illustration. The first one has the radius of 25, the second 50, the third 75, and the fourth 100.</p><p>The following illustration shows the shape filled by using the alternate fill mode. Notice that the center and third ring are not filled. This is because a ray drawn from any point in either of those two rings passes through an even number of segments. </p><p>The following illustration explains this process. </p><p>The following illustration shows how the same shape is filled when the winding fill mode is specified. </p><p>Notice that all the rings are filled. This is because all the segments run in the same direction, so a ray drawn from any point will cross one or more segments, and the sum of the crossings will not equal zero. </p><p>The following illustration explains this process. The red arrows represent the direction in which the segments are drawn and the black arrow represents an arbitrary ray that runs from a point in the innermost ring. Starting with a value of zero, for each segment that the ray crosses, a value of one is added for every clockwise intersection. All points lie in the fill region in this illustration, because the count does not equal zero. </p> + + + <dd> <p>Determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region. </p> </dd> + + + <dd> <p>Determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path. </p> </dd> + + + + + <p>Specifies options that can be applied when a layer resource is applied to create a layer. </p><strong>Note</strong>??Starting in Windows?8, the <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> option is no longer supported. See <strong>{{D2D1_LAYER_OPTIONS1}}</strong> for Windows?8 layer options.? + <p>ClearType antialiasing must use the current contents of the render target to blend properly. When a pushed layer requests initializing for ClearType, Direct2D copies the current contents of the render target into the layer so that ClearType antialiasing can be performed. Rendering ClearType text into a transparent layer does not produce the desired results.</p><p>A small performance hit from re-copying content occurs when <strong>{{ID2D1RenderTarget::Clear}}</strong> is called.</p> + + + + <p>Describes whether a window is occluded. </p> + <p>If the window was occluded the last time <strong>EndDraw</strong> was called, the next time the render target calls <strong>CheckWindowState</strong>, it returns <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to check the current window state, call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This will ensure that your next call to <strong>CheckWindowState</strong> state returns the actual window state.</p> + + + <dd> <p>The window is not occluded.</p> </dd> + + + <dd> <p>The window is occluded.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes the minimum DirectX support required for hardware rendering by a render target.</p> + + + <dd> <p>Direct2D determines whether the video card provides adequate hardware rendering support.</p> </dd> + + + <dd> <p>The video card must support DirectX 9.</p> </dd> + + + <dd> <p>The video card must support DirectX 10. </p> </dd> + + + + + <p> Describes how a render target is remoted and whether it should be {{GDI}}-compatible. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target attempts to use Direct3D command-stream remoting and uses bitmap remoting if stream remoting fails. The render target is not {{GDI}}-compatible.</p> </dd> + + + <dd> <p>The render target renders content locally and sends it to the terminal services client as a bitmap. </p> </dd> + + + <dd> <p>The render target can be used efficiently with {{GDI}}.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Specifies additional features supportable by a compatible render target when it is created. This enumeration allows a bitwise combination of its member values.</p> + <p>Use this enumeration when creating a compatible render target with the <strong>CreateCompatibleRenderTarget</strong> method. For more information about compatible render targets, see the Render Targets Overview. </p><p>The <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> option may only be requested if the parent render target was created with <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> (for most render targets) or <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> (for render targets created by the <strong>CreateCompatibleRenderTarget</strong> method).</p> + + + <dd> <p>The render target supports no additional features.</p> </dd> + + + <dd> <p>The render target supports interoperability with the Windows Graphics Device Interface ({{GDI}}). </p> </dd> + + + + + <p> Specifies how a device context is initialized for {{GDI}} rendering when it is retrieved from the render target.</p> + <p>Use this enumeration with the <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> method to specify how the device context is initialized for {{GDI}} rendering.</p> + + + <dd> <p>The current contents of the render target are copied to the device context when it is initialized. </p> </dd> + + + <dd> <p>The device context is cleared to transparent black when it is initialized.</p> </dd> + + + + + <p>Indicates the type of information provided by the Direct2D Debug Layer. </p> + <p>To receive debugging messages, you must install the Direct2D Debug Layer.</p> + + + + <p>Specifies whether Direct2D provides synchronization for an <strong>{{ID2D1Factory}}</strong> and the resources it creates, so that they may be safely accessed from multiple threads. </p> + <p>When you create a factory, you can specify whether it is multithreaded or singlethreaded. A singlethreaded factory provides no serialization against any other single threaded instance within Direct2D, so this mechanism provides a very large degree of scaling on the {{CPU}}.</p><p>You can also create a multithreaded factory instance. In this case, the factory and all derived objects can be used from any thread, and each render target can be rendered to independently. Direct2D serializes calls to these objects, so a single multithreaded Direct2D instance won't scale as well on the {{CPU}} as many single threaded instances. However, the resources can be shared within the multithreaded instance.</p><p>Note the qualifier "On the {{CPU}}": {{GPUs}} generally take advantage of fine-grained parallelism more so than {{CPUs}}. For example, multithreaded calls from the {{CPU}} might still end up being serialized when being sent to the {{GPU}}; however, a whole bank of pixel and vertex shaders will run in parallel to perform the rendering.</p> + + + + <p>Describes the pixel format and dpi of a bitmap.</p> + + + <dd> <p>The bitmap's pixel format and alpha mode.</p> </dd> + + + <dd> <p>The horizontal dpi of the bitmap.</p> </dd> + + + <dd> <p>The vertical dpi of the bitmap.</p> </dd> + + + + + <p> Contains the position and color of a gradient stop. </p> + <p>Gradient stops can be specified in any order if they are at different positions. Two stops may share a position. In this case, the first stop specified is treated as the "low" stop (nearer 0.0f) and subsequent stops are treated as "higher" (nearer 1.0f). This behavior is useful if a caller wants an instant transition in the middle of a stop.</p><p>Typically, there are at least two points in a collection, although creation with only one stop is permitted. For example, one point is at position 0.0f, another point is at position 1.0f, and additional points are distributed in the [0, 1] range. Where the gradient progression is beyond the range of [0, 1], the stops are stored, but may affect the gradient. </p><p>When drawn, the [0, 1] range of positions is mapped to the brush, in a brush-dependent way. For details, see <strong>{{ID2D1LinearGradientBrush}}</strong> and <strong>{{ID2D1RadialGradientBrush}}</strong>. </p><p>Gradient stops with a position outside the [0, 1] range cannot be seen explicitly, but they can still affect the colors produced in the [0, 1] range. For example, a two-stop gradient {{0.0f, Black}, {2.0f, White}} is indistinguishable visually from {{0.0f, Black}, {1.0f, Mid-level gray}}. Also, the colors are clamped before interpolation.</p> + + + <dd> <p>A value that indicates the relative position of the gradient stop in the brush. This value must be in the [0.0f, 1.0f] range if the gradient stop is to be seen explicitly. </p> </dd> + + + <dd> <p>The color of the gradient stop.</p> </dd> + + + + + <p> Describes the opacity and transformation of a brush.</p> + <p>This structure is used when creating a brush. For convenience, Direct2D provides the <strong>{{D2D1::BrushProperties}}</strong> function for creating <strong>{{D2D1_BRUSH_PROPERTIES}}</strong> structures.</p><p>After creating a brush, you can change its opacity or transform by calling the <strong>SetOpacity</strong> or <strong>SetTransform</strong> methods.</p> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the degree of opacity of the brush.</p> </dd> + + + <dd> <p>The transformation that is applied to the brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p> Contains the starting point and endpoint of the gradient axis for an <strong>{{ID2D1LinearGradientBrush}}</strong>. </p> + <p>Use this method when creating new <strong>{{ID2D1LinearGradientBrush}}</strong> objects with the <strong>CreateLinearGradientBrush</strong> method. For convenience, Direct2D provides the <strong>{{D2D1::LinearGradientBrushProperties}}</strong> helper function for creating new <strong>{{D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES}}</strong> structures.</p><p>The following illustration shows how a linear gradient changes as you change its start and end points. For the first gradient, the start point is set to (0,0) and the end point to (150, 50); this creates a diagonal gradient that starts at the upper-left corner and extends to the lower-right corner of the area being painted. When you set the start point to (0, 25) and the end point to (150, 25), a horizontal gradient is created. Similarly, setting the start point to (75, 0) and the end point to (75, 50) creates a vertical gradient. Setting the start point to (0, 50) and the end point to (150, 0) creates a diagonal gradient that starts at the lower-left corner and extends to the upper-right corner of the area being painted.</p><p></p> + + + + <p> Contains the gradient origin offset and the size and position of the gradient ellipse for an <strong>{{ID2D1RadialGradientBrush}}</strong>. </p> + <p>Different values for <em>center</em>, <em>gradientOriginOffset</em>, <em>radiusX</em> and/or <em>radiusY</em> produce different gradients. The following illustration shows several radial gradients that have different gradient origin offsets, creating the appearance of the light illuminating the circles from different angles.</p><p></p><p>For convenience, Direct2D provides the <strong>{{D2D1::RadialGradientBrushProperties}}</strong> function for creating new <strong>{{D2D1_RADIAL_GRADIENT_BRUSH}}</strong> structures.</p> + + + + <p>Represents a cubic bezier segment drawn between two points.</p> + <p> A cubic Bezier curve is defined by four points: a start point, an end point (<em>point3</em>), and two control points (<em>point1</em> and <em>point2</em>). A Bezier segment does not contain a property for the starting point of the curve; it defines only the end point. The beginning point of the curve is the current point of the path to which the Bezier curve is added.</p><p> The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line toward themselves and producing a curve. The first control point, <em>point1</em>, affects the beginning portion of the curve; the second control point, <em>point2</em>, affects the ending portion of the curve. </p><strong>Note</strong>??The curve doesn't necessarily pass through either of the control points; each control point moves its portion of the line toward itself, but not through itself.? + + + <dd> <p>The first control point for the Bezier segment.</p> </dd> + + + <dd> <p>The second control point for the Bezier segment.</p> </dd> + + + <dd> <p>The end point for the Bezier segment.</p> </dd> + + + + + <p>Contains the three vertices that describe a triangle.</p> + + + <dd> <p>The first vertex of a triangle.</p> </dd> + + + <dd> <p>The second vertex of a triangle.</p> </dd> + + + <dd> <p>The third vertex of a triangle.</p> </dd> + + + + + <p>Describes an elliptical arc between two points.</p> + + + <dd> <p>The end point of the arc.</p> </dd> + + + <dd> <p>The x-radius and y-radius of the arc.</p> </dd> + + + <dd> <p>A value that specifies how many degrees in the clockwise direction the ellipse is rotated relative to the current coordinate system.</p> </dd> + + + <dd> <p>A value that specifies whether the arc sweep is clockwise or counterclockwise.</p> </dd> + + + <dd> <p>A value that specifies whether the given arc is larger than 180 degrees.</p> </dd> + + + + + <p> Contains the control point and end point for a quadratic Bezier segment.</p> + + + <dd> <p>The control point of the quadratic Bezier segment.</p> </dd> + + + <dd> <p>The end point of the quadratic Bezier segment.</p> </dd> + + + + + <p> Contains the center point, x-radius, and y-radius of an ellipse.</p> + + + <dd> <p>The center point of the ellipse.</p> </dd> + + + <dd> <p>The X-radius of the ellipse.</p> </dd> + + + <dd> <p>The Y-radius of the ellipse.</p> </dd> + + + + + <p> Contains the dimensions and corner radii of a rounded rectangle.</p> + <p>Each corner of the rectangle specified by the <em>rect</em> is replaced with a quarter ellipse, with a radius in each direction specified by <em>radiusX</em> and <em>radiusY</em>.</p><p> If the <em>radiusX</em> is greater than or equal to half the width of the rectangle, and the <em>radiusY</em> is greater than or equal to one-half the height, the rounded rectangle is an ellipse with the same width and height of the <em>rect</em>. </p><p>Even when both <em>radiuX</em> and <em>radiusY</em> are zero, the rounded rectangle is different from a rectangle., When stroked, the corners of the rounded rectangle are roundly joined, not mitered (square). </p> + + + <dd> <p>The coordinates of the rectangle.</p> </dd> + + + <dd> <p>The x-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + <dd> <p>The y-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + + + <p> Describes the stroke that outlines a shape. </p> + <p>The following illustration shows different <em>dashOffset</em> values for the same custom dash style.</p><p></p> + + + <dd> <p>The cap applied to the start of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The cap applied to the end of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The shape at either end of each dash segment.</p> </dd> + + + <dd> <p>A value that describes how segments are joined. This value is ignored for a vertex if the segment flags specify that the segment should have a smooth join. </p> </dd> + + + <dd> <p>The limit of the thickness of the join on a mitered corner. This value is always treated as though it is greater than or equal to 1.0f. </p> </dd> + + + <dd> <p>A value that specifies whether the stroke has a dash pattern and, if so, the dash style. </p> </dd> + + + <dd> <p>A value that specifies an offset in the dash sequence. A positive dash offset value shifts the dash pattern, in units of stroke width, toward the start of the stroked geometry. A negative dash offset value shifts the dash pattern, in units of stroke width, toward the end of the stroked geometry.</p> </dd> + + + + + <p> Contains the content bounds, mask information, opacity settings, and other options for a layer resource. </p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p> A value that specifies whether the layer intends to render text with ClearType antialiasing.</p> </dd> + + + + + <p> Contains rendering options (hardware or software), pixel format, {{DPI}} information, remoting options, and Direct3D support requirements for a render target. </p> + <p>Use this structure when creating a render target, or use it with the <strong>{{ID2D1RenderTarget::IsSupported}}</strong> method to check the properties supported by an existing render target.</p><p>As a convenience, Direct2D provides the <strong>{{D2D1::RenderTargetProperties}}</strong> helper function for creating <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structures. An easy way to create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that works for most render targets is to call the function without specifying any parameters. Doing so creates a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that has its fields set to default values. For more information, see <strong>{{D2D1::RenderTargetProperties}}</strong>.</p><p>Not all render targets support hardware rendering. For a list, see the Render Targets Overview.</p> + + + <dd> <p>A value that specifies whether the render target should force hardware or software rendering. A value of <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong> specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that {{WIC}} bitmap render targets do not support hardware rendering.</p> </dd> + + + <dd> <p>The pixel format and alpha mode of the render target. You can use the <strong>{{D2D1::PixelFormat}}</strong> function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>The horizontal {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>The vertical {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>A value that specifies how the render target is remoted and whether it should be {{GDI}}-compatible. Set to <strong>{{D2D1_RENDER_TARGET_USAGE_NONE}}</strong> to create a render target that is not compatible with {{GDI}} and uses Direct3D command-stream remoting if it is available. </p> </dd> + + + <dd> <p>A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the <strong>type </strong> member is set to <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong>; if <strong>type </strong> is set to to <strong>{{D2D1_RENDER_TARGET_TYPE_HARDWARE}}</strong>, render target creation fails. A value of <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating <strong>{{ID2D1HwndRenderTarget}}</strong> and <strong>{{ID2D1DCRenderTarget}}</strong> objects.</p> </dd> + + + + + <p> Contains the {{HWND}}, pixel size, and presentation options for an <strong>{{ID2D1HwndRenderTarget}}</strong>.</p> + <p>Use this structure when you call the <strong>CreateHwndRenderTarget</strong> method to create a new <strong>{{ID2D1HwndRenderTarget}}</strong>.</p><p>For convenience, Direct2D provides the <strong>{{D2D1::HwndRenderTargetProperties}}</strong> function for creating new <strong>{{D2D1_HWND_RENDER_TARGET_PROPERTIES}}</strong> structures.</p> + + + + <p>Describes the drawing state of a render target. </p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Contains the debugging level of an <strong>{{ID2D1Factory}}</strong> object. </p> + <p>To enable debugging, you must install the Direct2D Debug Layer.</p> + + + + <p> Describes a geometric path that does not contain quadratic bezier curves or arcs. </p> + <p>A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the <strong>BeginFigure</strong> method and specify the figure's start point, then use <strong>AddLines</strong> and <strong>AddBeziers</strong> to add line and Bezier segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p><p>To create geometry paths that can contain arcs and quadratic Bezier curves, use an <strong>{{ID2D1GeometrySink}}</strong>.</p> + + + + <p>Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. </p> + <p>The fill mode defaults to {{D2D1_FILL_MODE_ALTERNATE}}. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Not doing will put the geometry sink in an error state. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The method used to determine whether a given point is part of the geometry.</p> </dd> + + + + + <p>Specifies stroke and join options to be applied to new segments added to the geometry sink. </p> + <p>After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Stroke and join options to be applied to new segments added to the geometry sink.</p> </dd> + + + + + <p>Starts a new figure at the specified point. </p> + <p>If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point at which to begin the new figure.</p> </dd> + + + <dd> <p>Whether the new figure should be hollow or filled.</p> </dd> + + + + + <p> Creates a sequence of lines using the specified points and adds them to the geometry sink.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. </p> </dd> + + + <dd> <p>The number of points in the <em>points</em> array.</p> </dd> + + + + + <p>Creates a sequence of cubic Bezier curves and adds them to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.</p> </dd> + + + <dd> <p>The number of Bezier segments in the <em>beziers</em> array.</p> </dd> + + + + + <p> Ends the current figure; optionally, closes it.</p> + <p>Calling this method without a matching call to <strong>BeginFigure</strong> places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the <strong>Close</strong> method is called.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by <strong>BeginFigure</strong>.</p> </dd> + + + + + <p>Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. </p> + <p>Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one <strong>EndFigure</strong> call for each call to <strong>BeginFigure</strong>.</p><p>After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Forces the factory to refresh any system defaults that it might have changed since factory creation.</p> + <p>You should call this method before calling the <strong>GetDesktopDpi</strong> method, to ensure that the system {{DPI}} is current.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the current desktop dots per inch ({{DPI}}). To refresh this value, call <strong>ReloadSystemMetrics</strong>.</p> + <p>Use this method to obtain the system {{DPI}} when setting physical pixel values, such as when you specify the size of a window.</p> + <p>This method does not return a value.</p> + + + + <p> Creates an <strong>{{ID2D1RectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1RoundedRectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1EllipseGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1GeometryGroup}}</strong>, which is an object that holds other geometries.</p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a <strong>{{ID2D1GeometryGroup}}</strong> object, call the <strong>CreateGeometryGroup</strong> method on the <strong>{{ID2D1Factory}}</strong> object, passing in the <em>fillMode</em> with possible values of <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) and <strong>{{D2D1_FILL_MODE_WINDING}}</strong>, an array of geometry objects to add to the geometry group, and the number of elements in this array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Transforms the specified geometry and stores the result as an <strong>{{ID2D1TransformedGeometry}}</strong> object. </p> + <p>Like other resources, a transformed geometry inherits the resource space and threading policy of the factory that created it. This object is immutable.</p><p>When stroking a transformed geometry with the <strong>DrawGeometry</strong> method, the stroke width is not affected by the transform applied to the geometry. The stroke width is only affected by the world transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an empty <strong>{{ID2D1PathGeometry}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1StrokeStyle}}</strong> that describes start cap, dash pattern, and other features of a stroke.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1DrawingStateBlock}}</strong> that can be used with the <strong>SaveDrawingState</strong> and <strong>RestoreDrawingState</strong> methods of a render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that renders to a Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>You must use <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> for the <strong>minLevel</strong> member of the <em>renderTargetProperties</em> parameter with this method.</p><p>Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p><ul> <li></li> </ul> <p><strong>Note</strong>?? This method isn't supported on Windows Phone and will fail when called on a device with error code 0x8899000b (?There is no hardware rendering device available for this operation?). Because the Windows Phone Emulator supports {{WARP}} rendering, this method will fail when called on the emulator with a different error code, 0x88982f80 (wincodec_err_unsupportedpixelformat).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap that receives the rendering output of the render target.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method. </p> </dd> + + + + + <p>Creates an <strong>{{ID2D1HwndRenderTarget}}</strong>, a render target that renders to a window.</p> + <p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that draws to a DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> + <p>To write to a Direct3D surface, you obtain an {{IDXGISurface}} and pass it to the <strong>CreateDxgiSurfaceRenderTarget</strong> method to create a {{DXGI}} surface render target; you can then use the {{DXGI}} surface render target to draw 2-D content to the {{DXGI}} surface. </p><p>A {{DXGI}} surface render target is a type of <strong>{{ID2D1RenderTarget}}</strong>. Like other Direct2D render targets, you can use it to create resources and issue drawing commands. </p><p>The {{DXGI}} surface render target and the {{DXGI}} surface must use the same {{DXGI}} format. If you specify the {{DXGI_FORMAT_UNKOWN}} format when you create the render target, it will automatically use the surface's format.</p><p>The {{DXGI}} surface render target does not perform {{DXGI}} surface synchronization. </p><p>For more information about creating and using {{DXGI}} surface render targets, see the Direct2D and Direct3D Interoperability Overview.</p><p>To work with Direct2D, the Direct3D device that provides the {{IDXGISurface}} must be created with the <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag.</p><p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{IDXGISurface}} to which the render target will draw.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method.</p> </dd> + + + + + <p>Creates a render target that draws to a Windows Graphics Device Interface ({{GDI}}) device context.</p> + <p>Before you can render with a {{DC}} render target, you must use the render target's <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. Do this for each different {{DC}} and whenever there is a change in the size of the area you want to draw to.</p><p>To enable the {{DC}} render target to work with {{GDI}}, set the render target's {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>.</p><p>Your application should create render targets once and hold on to them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. To enable the device context ({{DC}}) render target to work with {{GDI}}, set the {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and the alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>. For more information about pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, <em>dcRenderTarget</em> contains the address of the reference to the <strong>{{ID2D1DCRenderTarget}}</strong> created by the method.</p> </dd> + + + + + <p>Represents an object that can receive drawing commands. Interfaces that inherit from <strong>{{ID2D1RenderTarget}}</strong> render the drawing commands they receive in different ways. </p> + <p>Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p> + + + + <p>Creates a Direct2D bitmap from a reference to in-memory source data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The dimension of the bitmap to create in pixels.</p> </dd> + + + <dd> <p>A reference to the memory location of the image data, or <strong>{{NULL}}</strong> to create an uninitialized bitmap.</p> </dd> + + + <dd> <p>The byte count of each scanline, which is equal to (the image width in pixels ? the number of bytes per pixel) + memory padding. If <em>srcData</em> is <strong>{{NULL}}</strong>, this value is ignored. (Note that pitch is also sometimes called <em>stride</em>.)</p> </dd> + + + <dd> <p>The pixel format and dots per inch ({{DPI}}) of the bitmap to create.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a reference to the new bitmap. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> by copying the specified Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>Before Direct2D can load a {{WIC}} bitmap, that bitmap must be converted to a supported pixel format and alpha mode. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> whose data is shared with another resource.</p> + <p>The <strong>CreateSharedBitmap</strong> method is useful for efficiently reusing bitmap data and can also be used to provide interoperability with Direct3D. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1BitmapBrush}}</strong> from the specified bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new <strong>{{ID2D1SolidColorBrush}}</strong> that has the specified color and a base opacity of 1.0f. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1GradientStopCollection}}</strong> from the specified gradient stops that uses the <strong>{{D2D1_GAMMA_2_2}}</strong> color interpolation gamma and the clamp extend mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1LinearGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1RadialGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a new bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target and has the same size, {{DPI}}, and pixel format (but not alpha mode) as the current render target. </p> + <p>The bitmap render target created by this method is not compatible with {{GDI}} and has an alpha mode of <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to a new bitmap render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. </p> + <p>Regardless of whether a size is initially specified, the layer automatically resizes as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when <strong>PushLayer</strong> is called.</p> </dd> + + + <dd> <p>When the method returns, contains a reference to a reference to the new layer. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Create a mesh that uses triangles to describe a shape.</p> + <p>To populate a mesh, use its <strong>Open</strong> method to obtain an <strong>{{ID2D1TessellationSink}}</strong>. To draw the mesh, use the render target's <strong>FillMesh</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the new mesh.</p> </dd> + + + + + <p>Draws a line between the specified points using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawLine</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The start point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The end point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the line's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid line.</p> </dd> + + + + + <p>Draws the outline of a rectangle that has the specified dimensions and stroke style. </p> + <p>When this method fails, it does not return an error code. To determine whether a drawing method (such as <strong>DrawRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimension of the rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's interior.</p> </dd> + + + + + <p> Draws the outline of the specified rounded rectangle using the specified stroke style.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rounded rectangle's outline. </p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of the rounded rectangle's stroke, or <strong>{{NULL}}</strong> to paint a solid stroke. The default value is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Paints the interior of the specified rounded rectangle.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the rounded rectangle.</p> </dd> + + + + + <p>Draws the outline of the specified ellipse using the specified stroke style. </p> + <p>The <strong>DrawEllipse</strong> method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius of the ellipse to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the ellipse's outline.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the ellipse's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified ellipse. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius, in device-independent pixels, of the ellipse to paint.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the ellipse.</p> </dd> + + + + + <p>Draws the outline of the specified geometry using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to draw.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the geometry's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified geometry. </p> + <p>If the <em>opacityBrush</em> parameter is not <strong>{{NULL}}</strong>, the alpha value of each pixel of the mapped <em>opacityBrush</em> is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by <em>brush</em>. +</p><p>When this method fails, it does not return an error code. To determine whether a drawing operation (such as <strong>FillGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to paint.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's interior.</p> </dd> + + + <dd> <p>The opacity mask to apply to the geometry, or <strong>{{NULL}}</strong> for no opacity mask. If an opacity mask (the <em>opacityBrush</em> parameter) is specified, <em>brush</em> must be an <strong>{{ID2D1BitmapBrush}}</strong> that has its x- and y-extend modes set to <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong>. For more information, see the Remarks section. </p> </dd> + + + + + <p> Paints the interior of the specified mesh.</p> + <p>The current antialias mode of the render target must be <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> when <strong>FillMesh</strong> is called. To change the render target's antialias mode, use the <strong>SetAntialiasMode</strong> method.</p><p><strong>FillMesh</strong> does not expect a particular winding order for the triangles in the <strong>{{ID2D1Mesh}}</strong>; both clockwise and counter-clockwise will work. </p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillMesh</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The mesh to paint.</p> </dd> + + + <dd> <p>The brush used to paint the mesh.</p> </dd> + + + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + <p>For this method to work properly, the render target must be using the <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> antialiasing mode. You can set the antialiasing mode by calling the <strong>{{ID2D1RenderTarget::SetAntialiasMode}}</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillOpacityMask</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + + + + <p>Draws the specified bitmap after scaling it to the size of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawBitmap</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to render.</p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn. If the rectangle is not well-ordered, nothing is drawn, but the render target does not enter an error state.</p> </dd> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the opacity value to be applied to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. Default is 1.0f.</p> </dd> + + + <dd> <p>The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong>. </p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to draw; <strong>{{NULL}}</strong> to draw the entire bitmap.</p> </dd> + + + + + <p>Draws the specified text using the format information provided by an <strong>{{IDWriteTextFormat}}</strong> object.</p> + <p>To create an <strong>{{IDWriteTextFormat}}</strong> object, create an <strong>{{IDWriteFactory}}</strong> and call its <strong>CreateTextFormat</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawText</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the formatted text described by the specified <strong>{{IDWriteTextLayout}}</strong> object.</p> + <p>When drawing the same text repeatedly, using the <strong>DrawTextLayout</strong> method is more efficient than using the <strong>DrawText</strong> method because the text doesn't need to be formatted and the layout processed with each call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawTextLayout</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the specified glyphs. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGlyphRun</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin, in device-independent pixels, of the glyphs' baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. </p> </dd> + + + + + Applies the specified transform to the render target, replacing the existing transformation. All subsequent drawing operations occur in the transformed space. + + + + <p>Gets the current transform of the render target. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this returns, contains the current transform of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Sets the antialiasing mode of the render target. The antialiasing mode applies to all subsequent drawing operations, excluding text and glyph drawing operations. </p> + <p>To specify the antialiasing mode for text and glyph operations, use the <strong>SetTextAntialiasMode</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode for future drawing operations. </p> </dd> + + + + + <p> Retrieves the current antialiasing mode for nontext drawing operations.</p> + <p>The current antialiasing mode for nontext drawing operations. </p> + + + + <p>Specifies the antialiasing mode to use for subsequent text and glyph drawing operations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode to use for subsequent text and glyph drawing operations.</p> </dd> + + + + + <p>Gets the current antialiasing mode for text and glyph drawing operations. </p> + <p>The current antialiasing mode for text and glyph drawing operations. </p> + + + + <p>Specifies text rendering options to be applied to all subsequent text and glyph drawing operations. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text rendering options to be applied to all subsequent text and glyph drawing operations; <strong>{{NULL}}</strong> to clear current text rendering options. </p> </dd> + + + + + <p>Retrieves the render target's current text rendering options. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, <em>textRenderingParams</em>contains the address of a reference to the render target's current text rendering options. </p> </dd> + + + + + <p>Specifies a label for subsequent drawing operations. </p> + <p>The labels specified by this method are printed by debug error messages. If no tag is set, the default value for each tag is 0.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Gets the label for subsequent drawing operations. </p> + <p>If the same address is passed for both parameters, both parameters receive the value of the second tag. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter. </p> </dd> + + + <dd> <p>When this method returns, contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter.</p> </dd> + + + + + <p>Adds the specified layer to the render target so that it receives all subsequent drawing operations until <strong>PopLayer</strong> is called. </p> + <p>The <strong>PushLayer</strong> method allows a caller to begin redirecting rendering to a layer. All rendering operations are valid in a layer. The location of the layer is affected by the world transform set on the render target. </p><p>Each <strong>PushLayer</strong> must have a matching <strong>PopLayer</strong> call. If there are more <strong>PopLayer</strong> calls than <strong>PushLayer</strong> calls, the render target is placed into an error state. If <strong>Flush</strong> is called before all outstanding layers are popped, the render target is placed into an error state, and an error is returned. The error state can be cleared by a call to <strong>EndDraw</strong>.</p><p>A particular <strong>{{ID2D1Layer}}</strong> resource can be active only at one time. In other words, you cannot call a <strong>PushLayer</strong> method, and then immediately follow with another <strong>PushLayer</strong> method with the same layer resource. Instead, you must call the second <strong>PushLayer</strong> method with different layer resources. +</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Stops redirecting drawing operations to the layer that is specified by the last <strong>PushLayer</strong> call. </p> + <p>A <strong>PopLayer</strong> must match a previous <strong>PushLayer</strong> call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Executes all pending drawing commands. </p> + <p>This command does not flush the Direct3D device context that is associated with the render target.</p><p>Calling this method resets the error state of the render target.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0).</p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Saves the current drawing state to the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the render target's drawing state to that of the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Specifies a rectangle to which all subsequent drawing operations are clipped. </p> + <p>The <em>clipRect</em> is transformed by the current world transform set on the render target. After the transform is applied to the <em>clipRect</em> that is passed in, the axis-aligned bounding box for the <em>clipRect</em> is computed. For efficiency, the contents are clipped to this axis-aligned bounding box and not to the original <em>clipRect</em> that is passed in. </p><p>The following diagrams show how a rotation transform is applied to the render target, the resulting <em>clipRect</em>, and a calculated axis-aligned bounding box.</p><ol> <li> <p>Assume the rectangle in the following illustration is a render target that is aligned to the screen pixels.</p> <p></p> </li> <li> <p>Apply a rotation transform to the render target. In the following illustration, the black rectangle represents the original render target and the red dashed rectangle represents the transformed render target.</p> <p></p> </li> <li> <p>After calling <strong>PushAxisAlignedClip</strong>, the rotation transform is applied to the <em>clipRect</em>. In the following illustration, the blue rectangle represents the transformed <em>clipRect</em>.</p> <p></p> </li> <li> <p>The axis-aligned bounding box is calculated. The green dashed rectangle represents the bounding box in the following illustration. All contents are clipped to this axis-aligned bounding box.</p> <p></p> </li> </ol><strong>Note</strong>??If rendering operations fail or if <strong>PopAxisAlignedClip</strong> is not called, clip rects may cause some artifacts on the render target. <strong>PopAxisAlignedClip</strong> can be considered a drawing operation that is designed to fix the borders of a clipping region. Without this call, the borders of a clipped area may be not antialiased or otherwise corrected.?<p>The <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> must match. Otherwise, the error state is set. For the render target to continue receiving new commands, you can call <strong>Flush</strong> to clear the error. </p><p>A <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> pair can occur around or within a PushLayer and PopLayer, but cannot overlap. For example, the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> is valid, but the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> is invalid.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The size and position of the clipping area, in device-independent pixels.</p> </dd> + + + <dd> <p>The antialiasing mode that is used to draw the edges of clip rects that have subpixel boundaries, and to blend the clip with the scene contents. The blending is performed once when the <strong>PopAxisAlignedClip</strong> method is called, and does not apply to each primitive within the layer. </p> </dd> + + + + + <p>Removes the last axis-aligned clip from the render target. After this method is called, the clip is no longer applied to subsequent drawing operations. </p> + <p>A <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> pair can occur around or within a <strong>PushLayer</strong>/<strong>PopLayer</strong> pair, but may not overlap. For example, a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> sequence is valid, but a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> sequence is not. </p><p><strong>PopAxisAlignedClip</strong> must be called once for every call to <strong>PushAxisAlignedClip</strong>.</p><p>For an example, see How to Clip with an Axis-Aligned Clip Rectangle.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>Direct2D interprets the <em>clearColor</em> as straight alpha (not premultiplied). If the render target's alpha mode is <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, the alpha channel of <em>clearColor</em> is ignored and replaced with 1.0f (fully opaque).</p><p>If the render target has an active clip (specified by <strong>PushAxisAlignedClip</strong>), the clear command is applied only to the area within the clip region.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The color to which the drawing area is cleared, or <strong>{{NULL}}</strong> for transparent black.</p> </dd> + + + + + <p>Initiates drawing on this render target. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p>BeginDraw and EndDraw are used to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an {{HRESULT}} indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing {{HRESULT}}. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate {{HRESULT}} and error information when <strong>EndDraw</strong> is called. +</p> + <p>This method does not return a value.</p> + + + + <p>Ends drawing operations on the render target and indicates the current error state and associated tags. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p> <strong>BeginDraw</strong> and <strong>EndDraw</strong> are use to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The <strong>BeginDraw</strong> method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an <strong>{{HRESULT}}</strong> indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing <strong>{{HRESULT}}</strong>. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate <strong>{{HRESULT}}</strong> and error information when <strong>EndDraw</strong> is called. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. </p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the pixel format and alpha mode of the render target. </p> + <p>The pixel format and alpha mode of the render target.</p> + + + + <p>Sets the dots per inch ({{DPI}}) of the render target. </p> + <p>This method specifies the mapping from pixel space to device-independent space for the render target. If both <em>dpiX</em> and <em>dpiY</em> are 0, the factory-read system {{DPI}} is chosen. If one parameter is zero and the other unspecified, the {{DPI}} is not changed.</p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A value greater than or equal to zero that specifies the horizontal {{DPI}} of the render target.</p> </dd> + + + <dd> <p>A value greater than or equal to zero that specifies the vertical {{DPI}} of the render target.</p> </dd> + + + + + <p>Return the render target's dots per inch ({{DPI}}).</p> + <p>This method indicates the mapping from pixel space to device-independent space for the render target. </p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the horizontal {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the vertical {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Returns the size of the render target in device-independent pixels.</p> + <p>The current size of the render target in device-independent pixels.</p> + + + + <p>Returns the size of the render target in device pixels.</p> + <p>The size of the render target in device pixels.</p> + + + + <p>Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.</p> + <p>This method returns the maximum texture size of the Direct3D device.</p><strong>Note</strong>??The software renderer and {{WARP}} devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? + <p> The maximum size, in pixels, of any one bitmap dimension supported by the render target.</p> + + + + <p>Indicates whether the render target supports the specified properties.</p> + <p>This method does not evaluate the {{DPI}} settings specified by the <em>renderTargetProperties</em> parameter.</p> + <p><strong>{{TRUE}}</strong> if the specified render target properties are supported by this render target; otherwise, <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The render target properties to test.</p> </dd> + + + + + <p>Renders to an intermediate texture created by the <strong>CreateCompatibleRenderTarget</strong> method. </p> + <p>An <strong>{{ID2D1BitmapRenderTarget}}</strong> writes to an intermediate texture. It's useful for creating patterns for use with an <strong>{{ID2D1BitmapBrush}}</strong> or caching drawing data that will be used repeatedly. </p><p>To write directly to a {{WIC}} bitmap instead, use the <strong>{{ID2D1Factory::CreateWicBitmapRenderTarget}}</strong> method. This method returns an <strong>{{ID2D1RenderTarget}}</strong> that writes to the specified {{WIC}} bitmap. </p> + + + + <p>Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations. </p> + <p>The {{DPI}} for the <strong>{{ID2D1Bitmap}}</strong> obtained from <strong>GetBitmap</strong> will be the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> when the render target was created. Changing the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> by calling <strong>SetDpi</strong> doesn't affect the {{DPI}} of the bitmap, even if <strong>SetDpi</strong> is called before <strong>GetBitmap</strong>. Using <strong>SetDpi</strong> to change the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> does affect how contents are rendered into the bitmap: it just doesn't affect the {{DPI}} of the bitmap retrieved by <strong>GetBitmap</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the bitmap for this render target. This bitmap can be used for drawing operations. </p> </dd> + + + + + <p>Populates an <strong>{{ID2D1Mesh}}</strong> object with triangles. </p> + + + + <p>Copies the specified triangles to the sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of <strong>{{D2D1_TRIANGLE}}</strong> structures that describe the triangles to add to the sink.</p> </dd> + + + <dd> <p>The number of triangles to copy from the <em>triangles</em> array.</p> </dd> + + + + + <p> Closes the sink and returns its error status.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a geometry resource and defines a set of helper methods for manipulating and measuring geometric shapes. Interfaces that inherit from <strong>{{ID2D1Geometry}}</strong> define specific shapes.</p> + <p>There are several types of Direct2D geometry objects: a simple geometry (<strong>{{ID2D1RectangleGeometry}}</strong>, <strong>{{ID2D1RoundedRectangleGeometry}}</strong>, or <strong>{{ID2D1EllipseGeometry}}</strong>), a path geometry (<strong>{{ID2D1PathGeometry}}</strong>), or a composite geometry (<strong>{{ID2D1GeometryGroup}}</strong> and <strong>{{ID2D1TransformedGeometry}}</strong>).</p><p> Direct2D geometries enable you to describe two-dimensional figures and also offer many uses, such as defining hit-test regions, clip regions, and even animation paths.</p><p>Direct2D geometries are immutable and device-independent resources created by <strong>{{ID2D1Factory}}</strong>. In general, you should create geometries once and retain them for the life of the application, or until they need to be modified. For more information about device-independent and device-dependent resources, see the Resources Overview.</p> + + + + Retrieves the bounds of the geometry. + + + + <p>Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The amount by which to widen the geometry by stroking its outline.</p> </dd> + + + <dd> <p>The style of the stroke that widens the geometry. +</p> </dd> + + + <dd> <p>A transform to apply to the geometry after the geometry is transformed and after the geometry has been stroked.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test for containment. +</p> </dd> + + + <dd> <p>The thickness of the stroke to apply. +</p> </dd> + + + <dd> <p>The style of stroke to apply.</p> </dd> + + + <dd> <p>The transform to apply to the stroked geometry. +</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. +</p> </dd> + + + + + <p>Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test. +</p> </dd> + + + <dd> <p>The transform to apply to the geometry prior to testing for containment, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a <strong>{{BOOL}}</strong> value that is <strong>{{TRUE}}</strong> if the area filled by the geometry contains <em>point</em>; otherwise, <strong>{{FALSE}}</strong>. +You must allocate storage for this parameter.</p> </dd> + + + + + <p>Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance.</p> + <p>When interpreting the returned <em>relation</em> value, it is important to remember that the member <strong>{{D2D1_GEOMETRY_RELATION_IS_CONTAINED}}</strong> of the <strong>{{D2D1_GEOMETRY_RELATION}}</strong> enumeration type means that this geometry is contained inside <em>inputGeometry</em>, not that this geometry contains <em>inputGeometry</em>. </p><p>For more information about how to interpret other possible return values, see <strong>{{D2D1_GEOMETRY_RELATION}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The geometry to test. </p> </dd> + + + <dd> <p>The transform to apply to <em>inputGeometry</em>, or <strong>{{NULL}}</strong>. +</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a value that describes how this geometry is related to <em>inputGeometry</em>. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry.</p> </dd> + + + <dd> <p>The <strong>{{ID2D1TessellationSink}}</strong> to which the tessellated is appended.</p> </dd> + + + + + <p>Combines this geometry with the specified geometry and stores the result in an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the outline of the geometry and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry before computing its area.</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter.</p> </dd> + + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + + + <p>Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry.</p> </dd> + + + <dd> <p>The transform to apply to the geometry before calculating the specified point and tangent.</p> </dd> + + + <dd> <p>The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Widens the geometry by the specified stroke and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines an object that paints an area. Interfaces that derive from <strong>{{ID2D1Brush}}</strong> describe how the area is painted. </p> + <p>An <strong>{{ID2D1BitmapBrush}}</strong> is a device-dependent resource: your application should create bitmap brushes after it initializes the render target with which the bitmap brush will be used, and recreate the bitmap brush whenever the render target needs recreated. (For more information about resources, see Resources Overview.)</p><p>Brush space in Direct2D is specified differently than in {{XPS}} and Windows Presentation Foundation ({{WPF}}). In Direct2D, brush space is not relative to the object being drawn, but rather is the current coordinate system of the render target, transformed by the brush transform, if present. To paint an object as it would be painted by a {{WPF}} brush, you must translate the brush space origin to the upper-left corner of the object's bounding box, and then scale the brush space so that the base tile fills the bounding box of the object.</p><p>For more information about brushes, see the Brushes Overview. </p> + + + + <p>Sets the degree of opacity of this brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> </dd> + + + + + <p> Sets the transformation applied to the brush.</p> + <p>When you paint with a brush, it paints in the coordinate space of the render target. Brushes do not automatically position themselves to align with the object being painted; by default, they begin painting at the origin (0, 0) of the render target. </p><p>You can "move" the gradient defined by an <strong>{{ID2D1LinearGradientBrush}}</strong> to a target area by setting its start point and end point. Likewise, you can move the gradient defined by an <strong>{{ID2D1RadialGradientBrush}}</strong> by changing its center and radii. </p><p>To align the content of an <strong>{{ID2D1BitmapBrush}}</strong> to the area being painted, you can use the <strong>SetTransform</strong> method to translate the bitmap to the desired location. This transform only affects the brush; it does not affect any other content drawn by the render target. </p><p>The following illustrations show the effect of using an <strong>{{ID2D1BitmapBrush}}</strong> to fill a rectangle located at (100, 100). The illustration on the left illustration shows the result of filling the rectangle without transforming the brush: the bitmap is drawn at the render target's origin. As a result, only a portion of the bitmap appears in the rectangle.</p><p>The illustration on the right shows the result of transforming the <strong>{{ID2D1BitmapBrush}}</strong> so that its content is shifted 50 pixels to the right and 50 pixels down. The bitmap now fills the rectangle.</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>The transformation to apply to this brush.</p> </dd> + + + + + <p>Gets the degree of opacity of this brush. </p> + <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> + + + + <p>Gets the transform applied to this brush. </p> + <p>When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform applied to this brush.</p> </dd> + + + + + <p>Represents a Direct2D drawing resource.</p> + + + + <p>Retrieves the factory associated with this resource.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the factory that created this resource. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + <p>An <strong>{{ID2D1Image}}</strong> is abstract. Concrete instances can be created through <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> and <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p><p> Images are evaluated lazily. If the type of image passed in is concrete, then the image can be directly sampled from. Other images can act only as a source of pixels and can produce content only as a result of calling <strong>{{ID2D1DeviceContext::DrawImage}}</strong>.</p> + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + <p>Returns the size, in device-independent pixels ({{DIPs}}), of the bitmap.</p> + <p>A {{DIP}} is 1/96?of an inch. To retrieve the size in device pixels, use the <strong>{{ID2D1Bitmap::GetPixelSize}}</strong> method.</p> + <p>The size, in {{DIPs}}, of the bitmap.</p> + + + + <p>Returns the size, in device-dependent units (pixels), of the bitmap.</p> + <p>The size, in pixels, of the bitmap.</p> + + + + <p>Retrieves the pixel format and alpha mode of the bitmap.</p> + <p>The pixel format and alpha mode of the bitmap.</p> + + + + <p>Return the dots per inch ({{DPI}}) of the bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The horizontal {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The vertical {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Copies the specified region from the specified bitmap into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>.</p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The bitmap to copy from.</p> </dd> + + + <dd> <p>The area of <em>bitmap</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from the specified render target into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>All clips and layers must be popped off of the render target before calling this method. The method returns <strong>{{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}}</strong> if any clips or layers are currently applied to the render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The render target that contains the region to copy.</p> </dd> + + + <dd> <p>The area of <em>renderTarget</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from memory into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. </p><p>If this method is passed invalid input (such as an invalid destination rectangle), can produce unpredictable results, such as a distorted image or device failure.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The data to copy.</p> </dd> + + + <dd> <p>The stride, or pitch, of the source bitmap stored in <em>srcData</em>. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding.</p> </dd> + + + + + <p>Represents an collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes.</p> + + + + + <p>Retrieves the number of gradient stops in the collection.</p> + <p>The number of gradient stops in the collection.</p> + + + + <p>Copies the gradient stops from the collection into an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> + <p>Gradient stops are copied in order of position, starting with the gradient stop with the smallest position value and progressing to the gradient stop with the largest position value.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates the gamma space in which the gradient stops are interpolated. </p> + <p>The gamma space in which the gradient stops are interpolated. </p> + + + + <p>Indicates the behavior of the gradient outside the normalized gradient range. </p> + <p>The behavior of the gradient outside the [0,1] normalized gradient range.</p> + + + + <p>Paints an area with a bitmap.</p> + <p> A bitmap brush is used to fill a geometry with a bitmap. Like all brushes, it defines an infinite plane of content. Because bitmaps are finite, the brush relies on an "extend mode" to determine how the plane is filled horizontally and vertically.</p> + + + + <p>Specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> </dd> + + + + + <p>Specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> </dd> + + + + + <p>Specifies the interpolation mode used when the brush bitmap is scaled or rotated.</p> + <p>This method sets the interpolation mode for a bitmap, which is an enum value that is specified in the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. {{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} represents nearest neighbor filtering. It looks up the nearest bitmap pixel to the current rendering pixel and chooses its exact color. {{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}} represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, bilinear interpolation positions the bitmap more precisely to the application requests, but blurs the bitmap in the process. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The interpolation mode used when the brush bitmap is scaled or rotated.</p> </dd> + + + + + <p>Specifies the bitmap source that this brush uses to paint. </p> + <p>This method specifies the bitmap source that this brush uses to paint. The bitmap is not resized or rescaled automatically to fit the geometry that it fills. The bitmap stays at its native size. To resize or translate the bitmap, use the <strong>SetTransform</strong> method to apply a transform to the brush. </p><p>The native size of a bitmap is the width and height in bitmap pixels, divided by the bitmap {{DPI}}. This native size forms the base tile of the brush. To tile a subregion of the bitmap, you must generate a new bitmap containing this subregion and use <strong>SetBitmap</strong> to apply it to the brush. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap source used by the brush.</p> </dd> + + + + + <p> Gets the method by which the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.</p> + + + + <p> Gets the method by which the brush vertically tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + + + + <p>Gets the interpolation method used when the brush bitmap is scaled or rotated. </p> + <p>This method gets the interpolation mode of a bitmap, which is specified by the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}}</strong> represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process. </p> + <p>The interpolation method used when the brush bitmap is scaled or rotated.</p> + + + + <p> Gets the bitmap source that this brush uses to paint.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address to a reference to the bitmap with which this brush paints.</p> </dd> + + + + + <p>Paints an area with a solid color. </p> + + + + + <p>Specifies the color of this solid color brush. </p> + <p>To help create colors, Direct2D provides the <strong>ColorF</strong> class. It offers several helper methods for creating colors and provides a set or predefined colors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The color of this solid color brush.</p> </dd> + + + + + <p> Retrieves the color of the solid color brush.</p> + <p>The color of this solid color brush.</p> + + + + <p>Paints an area with a linear gradient. </p> + <p>An <strong>{{ID2D1LinearGradientBrush}}</strong> paints an area with a linear gradient along a line between the brush start point and end point. The gradient, defined by the brush <strong>{{ID2D1GradientStopCollection}}</strong>, is extruded perpendicular to this line, and then transformed by a brush transform (if specified). </p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush start point and end point are also transformed. </p><p>It is possible to specify a gradient axis that does not completely fill the area that is being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong>, specified by the <strong>{{ID2D1GradientStopCollection}}</strong>, determines how the remaining area is painted. +</p> + + + + <p>Sets the starting coordinates of the linear gradient in the brush's coordinate space. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Sets the ending coordinates of the linear gradient in the brush's coordinate space.</p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the starting coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p>Retrieves the ending coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p> Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this linear gradient brush.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p> Paints an area with a radial gradient.</p> + <p>The <strong>{{ID2D1RadialGradientBrush}}</strong> is similar to the <strong>{{ID2D1LinearGradientBrush}}</strong> in that they both map a collection of gradient stops to a gradient. However, the linear gradient has a start and an end point to define the gradient vector, while the radial gradient uses an ellipse and a gradient origin to define its gradient behavior. To define the position and size of the ellipse, use the <strong>SetCenter</strong>, <strong>SetRadiusX</strong>, and <strong>SetRadiusY</strong> methods to specify the center, x-radius, and y-radius of the ellipse. The gradient origin is the center of the ellipse, unless a gradient offset is specified by using the <strong>SetGradientOriginOffset</strong> method.</p><p>The brush maps the gradient stop position 0.0f of the gradient origin, and the position 1.0f is mapped to the ellipse boundary. When the gradient origin is within the ellipse, the contents of the ellipse enclose the entire [0, 1] range of the brush gradient stops. If the gradient origin is outside the bounds of the ellipse, the brush still works, but its gradient is not well-defined.</p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps just one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush ellipse and gradient origin are also transformed.</p><p>It is possible to specify an ellipse that does not completely fill area being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong> and setting (specified by the brush <strong>{{ID2D1GradientStopCollection}}</strong>) determines how the remaining area is painted. +</p> + + + + <p>Specifies the center of the gradient ellipse in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The center of the gradient ellipse, in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the offset of the gradient origin relative to the gradient ellipse's center.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The offset of the gradient origin from the center of the gradient ellipse.</p> </dd> + + + + + <p> Specifies the x-radius of the gradient ellipse, in the brush's coordinate space.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The x-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the y-radius of the gradient ellipse, in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The y-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the center of the gradient ellipse. </p> + <p>The center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the offset of the gradient origin relative to the gradient ellipse's center. </p> + <p>The offset of the gradient origin from the center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the x-radius of the gradient ellipse. </p> + <p>The x-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the y-radius of the gradient ellipse. </p> + <p>The y-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this radial gradient brush object.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and additional information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + + + + + <p> Retrieves the type of shape used at the beginning of a stroke. </p> + <p>The type of shape used at the beginning of a stroke.</p> + + + + <p>Retrieves the type of shape used at the end of a stroke. </p> + <p>The type of shape used at the end of a stroke.</p> + + + + <p>Gets a value that specifies how the ends of each dash are drawn. </p> + <p>A value that specifies how the ends of each dash are drawn.</p> + + + + <p>Retrieves the limit on the ratio of the miter length to half the stroke's thickness. </p> + <p>A positive number greater than or equal to 1.0f that describes the limit on the ratio of the miter length to half the stroke's thickness.</p> + + + + <p>Retrieves the type of joint used at the vertices of a shape's outline. </p> + <p>A value that specifies the type of joint used at the vertices of a shape's outline.</p> + + + + <p>Retrieves a value that specifies how far in the dash sequence the stroke will start. </p> + <p>A value that specifies how far in the dash sequence the stroke will start. </p> + + + + <p>Gets a value that describes the stroke's dash pattern. </p> + <p>If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the <strong>GetDashes</strong> method.</p> + <p>A value that describes the predefined dash pattern used, or <strong>{{D2D1_DASH_STYLE_CUSTOM}}</strong> if a custom dash style is used.</p> + + + + <p>Retrieves the number of entries in the dashes array. </p> + <p>The number of entries in the dashes array if the stroke is dashed; otherwise, 0.</p> + + + + <p>Copies the dash pattern to the specified array. </p> + <p>The dashes are specified in units that are a multiple of the stroke width, with subsequent members of the array indicating the dashes and gaps between dashes: the first entry indicates a filled dash, the second a gap, and so on. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array that will receive the dash pattern. The array must be able to contain at least as many elements as specified by <em>dashesCount</em>. You must allocate storage for this array.</p> </dd> + + + <dd> <p>The number of dashes to copy. If this value is less than the number of dashes in the stroke style's dashes array, the returned dashes are truncated to <em>dashesCount</em>. If this value is greater than the number of dashes in the stroke style's dashes array, the extra dashes are set to 0.0f. To obtain the actual number of dashes in the stroke style's dashes array, use the <strong>GetDashesCount</strong> method. </p> </dd> + + + + + <p>Describes a two-dimensional rectangle. </p> + + + + + <p> Retrieves the rectangle that describes the rectangle geometry's dimensions.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Contains a reference to a rectangle that describes the rectangle geometry's dimensions when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Describes a rounded rectangle. </p> + + + + + <p>Retrieves a rounded rectangle that describes this rounded rectangle geometry. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference that receives a rounded rectangle that describes this rounded rectangle geometry. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Represents an ellipse. </p> + + + + + <p>Gets the <strong>{{D2D1_ELLIPSE}}</strong> structure that describes this ellipse geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Represents a composite geometry, composed of other <strong>{{ID2D1Geometry}}</strong> objects. </p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. </p> + + + + <p>Indicates how the intersecting areas of the geometries contained in this geometry group are combined.</p> + <p> A value that indicates how the intersecting areas of the geometries contained in this geometry group are combined. </p> + + + + <p>Indicates the number of geometry objects in the geometry group. </p> + <p>The number of geometries in the <strong>{{ID2D1GeometryGroup}}</strong>.</p> + + + + <p>Retrieves the geometries in the geometry group. </p> + <p>The returned geometries are referenced and counted, and the caller must release them.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an array of geometries to be filled by this method. The length of the array is specified by the <em>geometryCount</em> parameter. If the array is <strong>{{NULL}}</strong>, then this method performs no operation. You must allocate the memory for this array.</p> </dd> + + + <dd> <p>A value indicating the number of geometries to return in the <em>geometries</em> array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to <strong>{{NULL}}</strong>. To obtain the number of geometries currently in the geometry group, use the <strong>GetSourceGeometryCount</strong> method.</p> </dd> + + + + + <p>Represents a geometry that has been transformed. </p> + <p>Using an <strong>{{ID2D1TransformedGeometry}}</strong> rather than transforming a geometry by using a render target's transform enables you to transform a geometry without transforming its stroke.</p> + + + + <p>Retrieves the source geometry of this transformed geometry object. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the source geometry for this transformed geometry object. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the matrix used to transform the <strong>{{ID2D1TransformedGeometry}}</strong> object's source geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Creates a line segment between the current point and the specified end point and adds it to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The end point of the line to draw.</p> </dd> + + + + + Creates a cubic Bezier curve between the current point and the specified end point and adds it to the geometry sink. + + + + <p>Creates a quadratic Bezier curve between the current point and the specified end point.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A structure that describes the control point and the end point of the quadratic Bezier curve to add.</p> </dd> + + + + + <p>Adds a sequence of quadratic Bezier segments as an array in a single call.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of a sequence of quadratic Bezier segments.</p> </dd> + + + <dd> <p>A value indicating the number of quadratic Bezier segments in <em>beziers</em>. </p> </dd> + + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Represents a complex shape that may be composed of arcs, curves, and lines. </p> + <p>An <strong>{{ID2D1PathGeometry}}</strong> object enables you to describe a geometric path. To describe an <strong>{{ID2D1PathGeometry}}</strong> object's path, use the object's <strong>Open</strong> method to retrieve an <strong>{{ID2D1GeometrySink}}</strong>. Use the sink to populate the path geometry with figures and segments. </p> + + + + <p>Retrieves the geometry sink that is used to populate the path geometry with figures and segments. </p> + <p>Because path geometries are immutable and can only be populated once, it is an error to call <strong>Open</strong> on a path geometry more than once.</p><p>Note that the fill mode defaults to <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong>. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Failure to do so will put the geometry sink in an error state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, <em>geometrySink</em> contains the address of a reference to the geometry sink that is used to populate the path geometry with figures and segments. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Copies the contents of the path geometry to the specified <strong>{{ID2D1GeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the number of segments in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of segments in the path geometry when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Retrieves the number of figures in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of figures in the path geometry when this method returns. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Represents a set of vertices that form a list of triangles. </p> + + + + + <p>Opens the mesh for population.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to an <strong>{{ID2D1TessellationSink}}</strong> that is used to populate the mesh. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents the backing store required to render a layer. </p> + <p>To create a layer, call the <strong>CreateLayer</strong> method of the render target where the layer will be used. To draw to a layer, push the layer to the render target stack by calling the <strong>PushLayer</strong> method. After you have finished drawing to the layer, call the <strong>PopLayer</strong> method.</p><p>Between <strong>PushLayer</strong> and <strong>PopLayer</strong> calls, the layer is in use and cannot be used by another render target. </p><p>If the size of the layer is not specified, the corresponding <strong>PushLayer</strong> call determines the minimum layer size, based on the layer content bounds and the geometric mask. The layer resource can be larger than the size required by <strong>PushLayer</strong> without any rendering artifacts.</p><p>If the size of a layer is specified, or if the layer has been used and the required backing store size as calculated during <strong>PushLayer</strong> is larger than the layer, then the layer resource is expanded on each axis monotonically to ensure that it is large enough. The layer resource never shrinks in size.</p> + + + + <p>Gets the size of the layer in device-independent pixels. </p> + <p>The size of the layer in device-independent pixels.</p> + + + + <p>Represents the drawing state of a render target: the antialiasing mode, transform, tags, and text-rendering options. </p> + + + + + <p>Retrieves the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, and tags portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Specifies the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode, transform, and tags portion of the drawing state.</p> </dd> + + + + + <p>Specifies the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text-rendering configuration of the drawing state, or {{NULL}} to use default settings.</p> </dd> + + + + + <p>Retrieves the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an <strong>{{IDWriteRenderingParams}}</strong> object that describes the text-rendering configuration of the drawing state.</p> </dd> + + + + + <p>Renders drawing instructions to a window.</p> + <p>As is the case with other render targets, you must call <strong>BeginDraw</strong> before issuing drawing commands. After you've finished drawing, call <strong>EndDraw</strong> to indicate that drawing is finished and to release access to the buffer backing the render target. For <strong>{{ID2D1HwndRenderTarget}}</strong>, the only side effect of <strong>BeginDraw</strong> is changing the state of the render target to allow drawing commands to be issued. <strong>EndDraw</strong> flushes any batched drawing commands. If no errors have occurred, then it also presents the buffer, causing it to appear on the associated window. Finally, <strong>EndDraw</strong> returns the {{HRESULT}} of the first error that occurred in drawing or presenting, as well as the tag state at the time the error occurred.</p><p><strong>{{ID2D1HwndRenderTarget}}</strong> objects are double buffered, so drawing commands issued do not appear immediately, but rather are performed on an offscreen surface. When <strong>EndDraw</strong> is called, if there have been no rendering errors, the offscreen buffer is presented. If there have been rendering errors in the batch flushed by <strong>EndDraw</strong>, then the buffer is not presented, and the application must call <strong>BeginDraw</strong> and re-draw the frame. <strong>Flush</strong> can be used to check for errors before calling <strong>EndDraw</strong> if an application wants the frame to be presented regardless of errors. </p><p>A hardware render target's back-buffer is the size specified by <strong>GetPixelSize</strong>. If <strong>EndDraw</strong> presents the buffer, this bitmap is stretched to cover the surface where it is presented: the entire client area of the window. This stretch is performed using bilinear filtering if the render target is rendering in hardware and using nearest-neighbor filtering if the rendering target is using software. (Typically, an application will call <strong>Resize</strong> to ensure the pixel size of the render target and the pixel size of the destination match, and no scaling is necessary, though this is not a requirement.) </p><p>In the case where a window straddles adapters, Direct2D ensures that the portion of the off-screen render target is copied from the adapter where rendering is occurring to the adapter that needs to display the contents. If the adapter a render target is on has been removed or the driver upgraded while the application is running, this is returned as an error in the <strong>EndDraw</strong> call. In this case, the application should create a new render target and resources as necessary. +</p> + + + + <p>Indicates whether the {{HWND}} associated with this render target is occluded. </p> + <strong>Note</strong>??If the window was occluded the last time that <strong>EndDraw</strong> was called, the next time that the render target calls <strong>CheckWindowState</strong>, it will return <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to determine the current window state, you should call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This call will ensure that your next call to <strong>CheckWindowState</strong> state will return the actual window state.? + <p>A value that indicates whether the {{HWND}} associated with this render target is occluded.</p> + + + + Changes the size of the render target to the specified pixel size. + <p>After this method is called, the contents of the render target's back-buffer are not defined, even if the <strong>{{D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS}}</strong> option was specified when the render target was created.</p> + + + + <p> Returns the {{HWND}} associated with this render target.</p> + <p>The {{HWND}} associated with this render target.</p> + + + + <p>Provides access to an device context that can accept {{GDI}} drawing commands. </p> + <p>You don't create an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> object directly; instead, you use the <strong>QueryInterface</strong> method of an existing render target instance to provide an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> version of that render target. </p><p>Not all render targets support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface. The render target must be {{GDI}}-compatible (the <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> flag was specified when creating the render target), use the {{DXGI_FORMAT_B8G8R8A8_UNORM}} pixel format, and use the <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong> alpha mode.</p><p>Note that the <strong>QueryInterface</strong> method always succeeds; if the render target doesn't support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, calling <strong>GetDC</strong> will fail. (For render targets created through the <strong>CreateCompatibleRenderTarget</strong> method, the render target that created it must have these settings.) </p><p>To test whether a given render target supports the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}} </strong>that specifies {{GDI}} compatibility and the appropriate pixel format, then call the render target's <strong>IsSupported</strong> method to see whether the render target is {{GDI}}-compatible. </p> + + + + <p>Retrieves the device context associated with this render target. </p> + <p>Calling this method flushes the render target.</p><p>This command can be called only after <strong>BeginDraw</strong> and before <strong>EndDraw</strong>. </p><strong>Note</strong>??In Windows?7 and earlier, you should not call <strong>GetDC</strong> between <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> commands or between <strong>PushLayer</strong>/<strong>PopLayer</strong>. However, this restriction does not apply to Windows?8 and later.?<p> <strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the device context should be cleared.</p> </dd> + + + <dd> <p>When this method returns, contains the device context associated with this render target. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Indicates that drawing with the device context retrieved using the <strong>GetDC</strong> method is finished. </p> + <p><strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Issues drawing commands to a {{GDI}} device context. </p> + + + + + <p> Binds the render target to the device context to which it issues drawing commands.</p> + <p>Before you can render with the {{DC}} render target, you must use its <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. You do this each time you use a different {{DC}}, or the size of the area you want to draw to changes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The device context to which the render target issues drawing commands.</p> </dd> + + + <dd> <p>The dimensions of the handle to a device context ({{HDC}}) to which the render target is bound. </p> </dd> + + + + + <p>Creates a factory object that can be used to create Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface provides the starting point for Direct2D. In general, objects created from a single instance of a factory object can be used with other resources created from that instance, but not with resources created by other factory instances. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The threading model of the factory and the resources it creates.</p> </dd> + + + <dd> <p>A reference to the {{IID}} of <strong>{{ID2D1Factory}}</strong> that is obtained by using __uuidof({{ID2D1Factory}}).</p> </dd> + + + <dd> <p>The level of detail provided to the debugging layer.</p> </dd> + + + <dd> <p>When this method returns, contains the address to a reference to the new factory.</p> </dd> + + + + + <p>Creates a rotation transformation that rotates by the specified angle about the specified point.</p> + <p>Rotation occurs in the plane of the 2-D surface.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The clockwise rotation angle, in degrees. </p> </dd> + + + <dd> <p>The point about which to rotate.</p> </dd> + + + <dd> <p>When this method returns, contains the new rotation transformation. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a skew transformation that has the specified x-axis angle, y-axis angle, and center point. </p> + <p>This function does not return a value.</p> + + + <dd> <p>The x-axis skew angle, which is measured in degrees counterclockwise from the y-axis.</p> </dd> + + + <dd> <p>The y-axis skew angle, which is measured in degrees counterclockwise from the x-axis.</p> </dd> + + + <dd> <p>The center point of the skew operation.</p> </dd> + + + <dd> <p>When this method returns, contains the rotation transformation. You must allocate storate for this parameter.</p> </dd> + + + + + <p>Indicates whether the specified matrix is invertible.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to test.</p> </dd> + + + + + <p>Tries to invert the specified matrix.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to invert.</p> </dd> + + + + + <p>Specifies the color context types.</p> + + + <dd> <p>An uninitialized color context.</p> </dd> + + + <dd> <p>A color context that is a full {{ICC}} color profile.</p> </dd> + + + <dd> <p>A color context that is one of a number of set color spaces (sRGB, AdobeRGB) that are defined in the {{EXIF}} specification.</p> </dd> + + + + + <p>Specifies the desired cache usage.</p> + <p>The <strong>CreateBitmap</strong> of the <strong>{{IWICImagingFactory}}</strong> interface does not support {{WICBitmapNoCache}} when the <em>pixelFormat</em> is a native pixel format provided by Windows Imaging Component ({{WIC}}).</p> + + + <dd> <p>Do not cache the bitmap.</p> </dd> + + + <dd> <p>Cache the bitmap when needed.</p> </dd> + + + <dd> <p>Cache the bitmap at initialization.</p> </dd> + + + + + <p>Specifies decode options.</p> + + + <dd> <p>Cache metadata when needed.</p> </dd> + + + <dd> <p>Cache metadata when decoder is loaded.</p> </dd> + + + + + <p>Specifies the cache options available for an encoder.</p> + + + <dd> <p>The encoder is cached in memory. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is cached to a temporary file. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is not cached.</p> </dd> + + + + + <p>Specifies the type of Windows Imaging Component ({{WIC}}) component.</p> + + + <dd> <p>A {{WIC}} decoder.</p> </dd> + + + <dd> <p>A {{WIC}} encoder.</p> </dd> + + + <dd> <p>A {{WIC}} pixel converter.</p> </dd> + + + <dd> <p>A {{WIC}} metadata reader.</p> </dd> + + + <dd> <p>A {{WIC}} metadata writer.</p> </dd> + + + <dd> <p>A {{WIC}} pixel format.</p> </dd> + + + <dd> <p>All {{WIC}} components.</p> </dd> + + + + + <p>Specifies component enumeration options.</p> + + + <dd> <p>Enumerate any components that are not disabled. Because this value is 0x0, it is always included with the other options.</p> </dd> + + + <dd> <p>Force a read of the registry before enumerating components.</p> </dd> + + + <dd> <p>Include disabled components in the enumeration. The set of disabled components is disjoint with the set of default enumerated components</p> </dd> + + + <dd> <p>Include unsigned components in the enumeration. This option has no effect.</p> </dd> + + + <dd> <p>At the end of component enumeration, filter out any components that are not Windows provided.</p> </dd> + + + + + <p>Specifies the sampling or filtering mode to use when scaling an image.</p> + + + <dd> <p>A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation. </p> <p>The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.</p> </dd> + + + <dd> <p>A bilinear interpolation algorithm. </p> <p>The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid.</p> </dd> + + + <dd> <p>A bicubic interpolation algorithm. </p> <p>Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid. </p> </dd> + + + <dd> <p>A Fant resampling algorithm. </p> <p>Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel.</p> </dd> + + + <dd> <p>A high quality bicubic interpolation algorithm. Destination pixel values are computed using a much denser sampling kernel than regular cubic. The kernel is resized in response to the scale factor, making it suitable for downscaling by factors greater than 2.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? </dd> + + + + + <p>Specifies the type of palette used for an indexed image format.</p> + + + <dd> <p>An arbitrary custom palette provided by caller.</p> </dd> + + + <dd> <p>An optimal palette generated using a median-cut algorithm. Derived from the colors in an image.</p> </dd> + + + <dd> <p>A black and white palette.</p> </dd> + + + <dd> <p>A palette that has its 8-color on-off primaries and the 16 system colors added. With duplicates removed, 16 colors are available.</p> </dd> + + + <dd> <p>A palette that has 3 intensity levels of each primary: 27-color on-off primaries and the 16 system colors added. With duplicates removed, 35 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 intensity levels of each primary: 64-color on-off primaries and the 16 system colors added. With duplicates removed, 72 colors are available.</p> </dd> + + + <dd> <p>A palette that has 5 intensity levels of each primary: 125-color on-off primaries and the 16 system colors added. With duplicates removed, 133 colors are available.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteFixedHalftoneWeb}}</strong>.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteTypeFixedHalftone216}}</strong>.</p> </dd> + + + <dd> <p>A palette that has its 252-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has its 256-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 16 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 256 shades of gray.</p> </dd> + + + + + <p>Specifies the type of {{dither}} algorithm to apply when converting between image formats.</p> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A 4x4 ordered dither algorithm. </p> </dd> + + + <dd> <p>An 8x8 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 16x16 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 spiral dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An error diffusion algorithm.</p> </dd> + + + + + <p>Specifies the desired alpha channel usage.</p> + + + <dd> <p>Use alpha channel.</p> </dd> + + + <dd> <p>Use a pre-multiplied alpha channel.</p> </dd> + + + <dd> <p>Ignore alpha channel.</p> </dd> + + + <dd> <p>Sentinel value.</p> </dd> + + + + + <p>Specifies the flip and rotation transforms.</p> + + + <dd> <p>A rotation of 0 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 90 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 180 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 270 degrees.</p> </dd> + + + <dd> <p>A horizontal flip. Pixels are flipped around the vertical y-axis.</p> </dd> + + + <dd> <p>A vertical flip. Pixels are flipped around the horizontal x-axis.</p> </dd> + + + + + <p>Specifies access to an <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Specifies the capabilities of the decoder.</p> + + + <dd> <p>Decoder recognizes the image was encoded with an encoder produced by the same vendor. </p> <p></p> </dd> + + + <dd> <p>Decoder can decode all the images within an image container.</p> </dd> + + + <dd> <p>Decoder can decode some of the images within an image container.</p> </dd> + + + <dd> <p>Decoder can enumerate the metadata blocks within a container format.</p> </dd> + + + <dd> <p>Decoder can find and decode a thumbnail.</p> </dd> + + + + + <p>Specifies the progress operations to receive notifications for.</p> + + + <dd> <p>Receive copy pixel operation.</p> </dd> + + + <dd> <p>Receive write pixel operation.</p> </dd> + + + <dd> <p>Receive all progress operations available.</p> </dd> + + + + + <p>Specifies when the progress notification callback should be called.</p> + + + <dd> <p>The callback should be called when codec operations begin.</p> </dd> + + + <dd> <p>The callback should be called when codec operations end.</p> </dd> + + + <dd> <p>The callback should be called frequently to report status.</p> </dd> + + + <dd> <p>The callback should be called on all available progress notifications.</p> </dd> + + + + + <p>Specifies the component signing status.</p> + + + <dd> <p>A signed component.</p> </dd> + + + <dd> <p>An unsigned component</p> </dd> + + + <dd> <p>A component is safe. </p> <p>Components that do not have a binary component to sign, such as a pixel format, should return this value.</p> </dd> + + + <dd> <p>A component has been disabled.</p> </dd> + + + + + <p>Specifies the logical screen descriptor properties for Graphics Interchange Format ({{GIF}}) metadata.</p> + + + <dd> <p> [{{VT_UI1}} | {{VT_VECTOR}}] Indicates the signature property.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the width in pixels. </p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the height in pixels. </p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the global color table flag. <strong>{{TRUE}}</strong> if a global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the color resolution in bits per pixel.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the table is sorted; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the index within the color table to use for the background (pixels not defined in the image).</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the factor used to compute an approximation of the aspect ratio.</p> </dd> + + + + + <p>Specifies the image descriptor metadata properties for Graphics Interchange Format ({{GIF}}) frames.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the X offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the Y offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates width of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates height of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the local color table flag. <strong>{{TRUE}}</strong> if global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the interlace flag. <strong>{{TRUE}}</strong> if image is interlaced; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the color table is sorted from most frequently to least frequently used color; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + + + <p>Specifies the graphic control extension metadata properties that define the transitions between each frame animation for Graphics Interchange Format ({{GIF}}) images.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the disposal requirements. 0 - no disposal, 1 - do not dispose, 2 - restore to background color, 3 - restore to previous.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the user input flag. <strong>{{TRUE}}</strong> if user input should advance to the next frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the transparency flag. <strong>{{TRUE}}</strong> if a transparent color in is in the color table for this frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates how long to display the next frame before advancing to the next frame, in units of 1/100th of a second.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates which color in the palette should be treated as transparent.</p> </dd> + + + + + <p>Specifies the application extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates a string that identifies the application.</p> </dd> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates data that is exposed by the application.</p> </dd> + + + + + <p>Specifies the comment extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} comment properties.</p> + + + <dd> <p>Indicates the metadata property is comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} luminance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a luminance table.</p> </dd> + + + + + <p>Specifies the {{JPEG}} chrominance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a chrominance table.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UNKNOWN}}] The {{IPTC}} block embedded in this 8BIM {{IPTC}} block.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIMResolutionInfo block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The horizontal resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the horizontal resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image width is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The vertical resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the vertical resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image height is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} digest metadata block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_BLOB}}] The embedded {{IPTC}} digest value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) gAMA chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the gamma value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) background (bKGD) chunk metadata properties.</p> + + + <dd> <p>Indicates the background color. There are three possible types, depending on the image's pixel format.</p> <p></p> <dl> <dt>{{VT_UI1}}</dt> <dd> <p>Specifies the index of the background color in an image with an indexed pixel format.</p> </dd> <dt>{{VT_UI2}}</dt> <dd> <p>Specifies the background color in a grayscale image.</p> </dd> <dt>{{VT_VECTOR}}|{{VT_UI2}}</dt> <dd> <p>Specifies the background color in an {{RGB}} image as three {{USHORT}} values: {0x<em>{{RRRR}}</em>, 0x<em>{{GGGG}}</em>, 0x<em>{{BBBB}}</em>}.</p> </dd> </dl> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iTXT chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the keywords in the iTXT metadata chunk.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates whether the text in the iTXT chunk is compressed. 1 if the text is compressed; otherwise, 0.</p> </dd> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the human language used by the translated keyword and the text.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates a translation of the keyword into the language indicated by the language tag.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates additional text in the iTXT metadata chunk.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) cHRM chunk metadata properties for {{CIE}} {{XYZ}} chromaticity.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue y value ratio.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) hIST chunk metadata properties.</p> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI2}}] Indicates the approximate usage frequency of each color in the color palette. </p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iCCP chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the International Color Consortium ({{ICC}}) profile name.</p> </dd> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI1}}] Indicates the embedded {{ICC}} profile.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) sRGB chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the rendering intent for an sRGB color space image. The rendering intents have the following meaning.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td>0</td><td>Perceptual</td></tr> <tr><td>1</td><td>Relative colorimetric</td></tr> <tr><td>2</td><td>Saturation</td></tr> <tr><td>3</td><td>Absolute colorimetric</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) tIME chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the year of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the month of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates day of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the hour of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the minute of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the second of the last modification.</p> </dd> + + + + + <p>Specifies the access level of a Windows Graphics Device Interface ({{GDI}}) section.</p> + + + <dd> <p>Indicates a read only access level.</p> </dd> + + + <dd> <p>Indicates a read/write access level.</p> </dd> + + + + + + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies additional options to an <strong>{{IWICPlanarBitmapSourceTransform}}</strong> implementation. </p> + + + + <p>Specifies the options for indexing a {{JPEG}} image. </p> + + + <dd> <p>Index generation is deferred until <strong>{{IWICBitmapSource::CopyPixels}}</strong> is called on the image.</p> </dd> + + + <dd> <p>Index generation is performed when the when the image is initially loaded.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies conversion matrix from Y'Cb'Cr' to R'G'B'. </p> + + + <dd> <p>Specifies the identity transfer matrix.</p> </dd> + + + <dd> <p>Specifies the {{BT601}} transfer matrix.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the memory layout of pixel data in a {{JPEG}} image scan. </p> + + + <dd> <p>The pixel data is stored in an interleaved memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a planar memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a progressive layout.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the Tagged Image File Format ({{TIFF}}) compression options.</p> + + + <dd> <p>Indicates a suitable compression algorithm based on the image and pixel format.</p> </dd> + + + <dd> <p>Indicates no compression.</p> </dd> + + + <dd> <p>Indicates a {{CCITT3}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{CCITT4}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{LZW}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates a {{RLE}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{ZIP}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates an {{LZWH}} differencing algorithm.</p> </dd> + + + + + <p>Specifies the {{JPEG}} {{YCrCB}} subsampling options. </p> + <p>The native {{JPEG}} encoder uses <strong>{{WICJpegYCrCbSubsampling420}}</strong>.</p> + + + <dd> <p>The default subsampling option. </p> </dd> + + + <dd> <p>Subsampling option that uses both horizontal and vertical decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses horizontal decimation .</p> </dd> + + + <dd> <p>Subsampling option that uses no decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses 2x vertical downsampling only. This option is only available in Windows?8.1 and later.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) filters available for compression optimization.</p> + + + <dd> <p>Indicates an unspecified {{PNG}} filter. This enables {{WIC}} to algorithmically choose the best filtering option for the image.</p> </dd> + + + <dd> <p>Indicates no {{PNG}} filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} sub filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} up filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} average filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} paeth filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} adaptive filter. This enables {{WIC}} to choose the best filtering mode on a per-scanline basis.</p> </dd> + + + + + <p>Specifies named white balances for raw images.</p> + + + <dd> <p>The default white balance.</p> </dd> + + + <dd> <p>A daylight white balance.</p> </dd> + + + <dd> <p>A cloudy white balance.</p> </dd> + + + <dd> <p>A shade white balance.</p> </dd> + + + <dd> <p>A tungsten white balance.</p> </dd> + + + <dd> <p>A fluorescent white balance.</p> </dd> + + + <dd> <p>Daylight white balance.</p> </dd> + + + <dd> <p>A flash white balance.</p> </dd> + + + <dd> <p>A custom white balance. This is typically used when using a picture (grey-card) as white balance.</p> </dd> + + + <dd> <p>An automatic balance.</p> </dd> + + + <dd> <p>An "as shot" white balance.</p> </dd> + + + + + <p>Specifies the capability support of a raw image.</p> + + + <dd> <p>The capability is not supported.</p> </dd> + + + <dd> <p>The capability supports only get operations.</p> </dd> + + + <dd> <p>The capability supports get and set operations.</p> </dd> + + + + + <p>Specifies the rotation capabilities of the codec.</p> + + + <dd> <p>Rotation is not supported.</p> </dd> + + + <dd> <p>Set operations for rotation is not supported.</p> </dd> + + + <dd> <p>90 degree rotations are supported.</p> </dd> + + + <dd> <p>All rotation angles are supported.</p> </dd> + + + + + <p>Specifies the parameter set used by a raw codec.</p> + + + <dd> <p>An as shot parameter set.</p> </dd> + + + <dd> <p>A user adjusted parameter set.</p> </dd> + + + <dd> <p>A codec adjusted parameter set.</p> </dd> + + + + + <p>Specifies the render intent of the next <strong>CopyPixels</strong> call. </p> + + + + <p>Specifies the dimension type of the data contained in {{DDS}} image.</p> + <p>Both <strong>{{WICDdsTexture2d}}</strong> and <strong>{{WICDdsTextureCube}}</strong> correspond to <strong>{{D3D11_RESOURCE_DIMENSION_TEXTURE2D}}</strong>. When using <strong>{{ID3D11Device::CreateTexture2D}}</strong>, they are distinguished by the flag <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> in the structure <strong>{{D3D11_TEXTURE2D_DESC}}</strong>.</p> + + + <dd> <p>{{DDS}} image contains a 1-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 2-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 3-dimensional texture . </p> </dd> + + + <dd> <p>The {{DDS}} image contains a cube texture represented as an array of 6 faces. </p> </dd> + + + + + <p>Specifies the the meaning of pixel color component values contained in the {{DDS}} image.</p> + + + <dd> <p>Alpha behavior is unspecified and must be determined by the reader.</p> </dd> + + + <dd> <p>The alpha data is straight.</p> </dd> + + + <dd> <p>The alpha data is premultiplied.</p> </dd> + + + <dd> <p>The alpha data is opaque ({{UNORM}} value of 1). This can be used by a compliant reader as a performance optimization. For example, blending operations can be converted to copies.</p> </dd> + + + <dd> <p>The alpha channel contains custom data that is not alpha.</p> </dd> + + + + + <p>Represents a rectangle for Windows Imaging Component ({{WIC}})?{{API}}.</p> + + + <dd> <p>The horizontal coordinate of the rectangle.</p> </dd> + + + <dd> <p>The vertical coordinate of the rectangle.</p> </dd> + + + <dd> <p>The width of the rectangle.</p> </dd> + + + <dd> <p>The height of the rectangle.</p> </dd> + + + + + <p>Contains members that identify a pattern within an image file which can be used to identify a particular format.</p> + + + <dd> <p>The offset the pattern is located in the file.</p> </dd> + + + <dd> <p>The pattern length.</p> </dd> + + + <dd> <p>The actual pattern.</p> </dd> + + + <dd> <p>The pattern mask.</p> </dd> + + + <dd> <p>The end of the stream.</p> </dd> + + + + + <p>This defines parameters that you can use to override the default parameters normally used when encoding an image. </p> + <p>If this parameter is not passed to the encoding {{API}}, the encoder uses these settings.</p><ul> <li>A pixel format of (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>).</li> <li>An x and y {{DPI}} of 96.</li> <li>The entire image bounds will be used for encoding.</li> </ul><strong>Note</strong>??The parameters as specified can't result in a scale. The encoder can use a larger portion of the input image based on the passed in {{DPI}} and the pixel width and height.? + + + <dd> <p>The pixel format to which the image is processed before it is written to the encoder.</p> </dd> + + + <dd> <p>The {{DPI}} in the x dimension.</p> </dd> + + + <dd> <p>The {{DPI}} in the y dimension.</p> </dd> + + + <dd> <p>The top corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The left corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The width in pixels of the part of the image to write.</p> </dd> + + + <dd> <p>The height in pixels of the part of the image to write.</p> </dd> + + + + + <p>Specifies the pixel format and size of a component plane.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Component width of the plane.</p> </dd> + + + <dd> <p>Component height of the plane.</p> </dd> + + + + + <p>Specifies the pixel format, buffer, stride and size of a component plane for a planar pixel format.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Pointer to the buffer that holds the plane?s pixel components.</p> </dd> + + + <dd> <p>The stride of the buffer ponted to by <em>pbData</em>. Stride indicates the total number of bytes to go from the beginning of one scanline to the beginning of the next scanline.</p> </dd> + + + <dd> <p>The total size of the buffer pointed to by <em>pbBuffer</em>.</p> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the frame header for an image by calling <strong>{{IWICJpegFrameDecode::GetFrameHeader}}</strong>.</p> + + + <dd> <p>The width of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The height of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The transfer matrix of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The scan type of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The number of components in the frame.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The sample factors. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_SAMPLE_FACTORS_ONE}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_420}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_422}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_440}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_444}}</li> </ul> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_ONE}}</li> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_THREE}} </li> </ul> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the scan header for an image by calling <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> + + + <dd> <p>The number of components in the scan.</p> </dd> + + + <dd> <p>The interval of reset markers within the scan.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_HUFFMAN_BASELINE_ONE}}</li> <li>{{WIC_JPEG_HUFFMAN_BASELINE_THREE}} </li> </ul> </dd> + + + <dd> <p>The start of the spectral selection.</p> </dd> + + + <dd> <p>The end of the spectral selection.</p> </dd> + + + <dd> <p>The successive approximation high.</p> </dd> + + + <dd> <p>The successive approximation low.</p> </dd> + + + + + <p>Defines raw codec capabilites.</p> + + + <dd> <p>Size of the <strong>{{WICRawCapabilitiesInfo}}</strong> structure.</p> </dd> + + + <dd> <p>The codec's major version.</p> </dd> + + + <dd> <p>The codec's minor version.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of exposure compensation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of contrast support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of {{RGB}} white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICNamedWhitePoint}}</strong> support.</p> </dd> + + + <dd> <p>The <strong>{{WICNamedWhitePoint}}</strong> mask.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of kelvin white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of gamma support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tint support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of saturation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of sharpness support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of noise reduction support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of destination color profile support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tone curve support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawRotationCapabilities}}</strong> of rotation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICRawRenderMode}}</strong> support.</p> </dd> + + + + + <p>Represents a raw image tone curve point.</p> + + + <dd> <p>The tone curve input.</p> </dd> + + + <dd> <p>The tone curve output.</p> </dd> + + + + + <p>Represents a raw image tone curve.</p> + + + <dd> <p>The number of tone curve points.</p> </dd> + + + <dd> <p>The array of tone curve points.</p> </dd> + + + + + <p>Specifies the {{DDS}} image dimension, <strong>{{DXGI_FORMAT}}</strong> and alpha mode of contained data.</p> + + + + <p>Specifies the <strong>{{DXGI_FORMAT}}</strong> and block information of a {{DDS}} format.</p> + + + + <p>Defines methods that add the concept of writeability and static in-memory representations of bitmaps to <strong>{{IWICBitmapSource}}</strong>. </p> + <p><strong>{{IWICBitmap}}</strong> inherits from <strong>{{IWICBitmapSource}}</strong> and therefore also inherits the <strong>CopyPixels</strong> method. When pixels need to be moved to a new memory location, <strong>CopyPixels</strong> is often the most efficient. </p><p> Because of to the internal memory representation implied by the <strong>{{IWICBitmap}}</strong>, in-place modification and processing using the <strong>Lock</strong> is more efficient than <strong>CopyPixels</strong>, usually reducing to a simple reference access directly into the memory owned by the bitmap rather than a as a copy. This is contrasted to procedural bitmaps which implement only <strong>CopyPixels</strong> because there is no internal memory representation and one would need to be created on demand to satisfy a call to <strong>Lock</strong>. </p> + + + + <p>Provides access to a rectangular area of the bitmap.</p> + <p>Locks are exclusive for writing but can be shared for reading. You cannot call <strong>CopyPixels</strong> while the <strong>{{IWICBitmap}}</strong> is locked for writing. Doing so will return an error, since locks are exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to be accessed.</p> </dd> + + + <dd> <p>The access mode you wish to obtain for the lock. This is a bitwise combination of <strong>{{WICBitmapLockFlags}}</strong> for read, write, or read and write access.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockRead}}</strong></dt> </dl> </td><td> <p>The read access lock.</p> </td></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockWrite}}</strong></dt> </dl> </td><td> <p>The write access lock.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference that receives the locked memory location.</p> </dd> + + + + + <p>Provides access for palette modifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + + + <p>Changes the physical resolution of the image.</p> + <p> This method has no effect on the actual pixels or samples stored in the bitmap. Instead the interpretation of the sampling rate is modified. This means that a 96 {{DPI}} image which is 96 pixels wide is one inch. If the physical resolution is modified to 48 {{DPI}}, then the bitmap is considered to be 2 inches wide but has the same number of pixels. If the resolution is less than <strong>{{REAL_EPSILON}}</strong> (1.192092896e-07F) the error code <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong> is returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution.</p> </dd> + + + <dd> <p>The vertical resolution.</p> </dd> + + + + + <p>Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.</p> + <p>This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and scalers. Components that implement this interface can be connected together in a graph to pull imaging data through.</p><p>This interface defines only the notion of readability or being able to produce pixels. Modifying or writing to a bitmap is considered to be a specialization specific to bitmaps which have storage and is defined in the descendant interface <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Retrieves the pixel width and height of the bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel width of the bitmap.</p> </dd> + + + <dd> <p>A reference that receives the pixel height of the bitmap</p> </dd> + + + + + <p>Retrieves the pixel format of the bitmap source.. </p> + <p> The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the pixel format {{GUID}} the bitmap is stored in. For a list of available pixel formats, see the Native Pixel Formats topic.</p> </dd> + + + + + <p>Specifies the viewport/stencil and render target associated with a view instance.</p> + <p>The values specified in a view instance location structure can be added to ViewportArrayIndex and RenderTargetArrayIndex values output by the shader prior to rasterization to compute the final effective index of the viewport and render target to send primitives to. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in a {{PSO}} to the same value to act as a uniform base value for all views.</p> + + + <dd> <p> The index of the viewport in the viewports array to be used by the view instance associated with this location. </p> </dd> + + + <dd> <p> The index of the render target in the render targets array to be used by the view instance associated with this location. </p> </dd> + + + + + <p>Retrieves the sampling rate between pixels and physical world measurements.</p> + <p> Some formats, such as {{GIF}} and {{ICO}}, do not have full {{DPI}} support. For {{GIF}}, this method calculates the {{DPI}} values from the aspect ratio, using a base {{DPI}} of (96.0, 96.0). The {{ICO}} format does not support {{DPI}} at all, and the method always returns (96.0,96.0) for {{ICO}} images. </p><p> Additionally, {{WIC}} itself does not transform images based on the {{DPI}} values in an image. It is up to the caller to transform an image based on the resolution returned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the x-axis dpi resolution.</p> </dd> + + + <dd> <p>A reference that receives the y-axis dpi resolution.</p> </dd> + + + + + <p>Retrieves the color table for indexed pixel formats.</p> + <p> If the <strong>{{IWICBitmapSource}}</strong> is an <strong>{{IWICBitmapFrameDecode}}</strong>, the function may return the image's global palette if a frame-level palette is not available. The global palette may also be retrieved using the <strong>CopyPalette</strong> method. </p> + <p>Returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_PALETTEUNAVAILABLE}}</strong></dt> </dl> </td><td> <p>The palette was unavailable.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The palette was successfully copied.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{IWICPalette}}</strong>. A palette can be created using the <strong>CreatePalette</strong> method.</p> </dd> + + + + + <p>Instructs the object to produce pixels.</p> + <p><strong>CopyPixels</strong> is one of the two main image processing routines (the other being <strong>Lock</strong>) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a {{JPEG}} stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface. </p><p> The caller can restrict the operation to a rectangle of interest ({{ROI}}) using the prc parameter. The {{ROI}} sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a <strong>{{NULL}}</strong> {{ROI}} implies that the whole bitmap should be returned. +</p><p> The caller controls the memory management and must provide an output buffer (<em>pbBuffer</em>) for the results of the copy along with the buffer's bounds (<em>cbBufferSize</em>). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method. </p><p> If the caller needs to perform numerous copies of an expensive <strong>{{IWICBitmapSource}}</strong> such as a {{JPEG}}, it is recommended to create an in-memory <strong>{{IWICBitmap}}</strong> first. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy. A <strong>{{NULL}}</strong> value specifies the entire bitmap.</p> </dd> + + + <dd> <p>The stride of the bitmap</p> </dd> + + + <dd> <p>The size of the buffer.</p> </dd> + + + <dd> <p>A reference to the buffer.</p> </dd> + + + + + <p>Exposes methods for accessing and building a color table, primarily for indexed pixel formats.</p> + <p>If the <strong>{{WICBitmapPaletteType}}</strong> is not <strong>{{WICBitmapPaletteCustom}}</strong>, then the colors are automatically generated based on the table above. If the user subsequently changes a color palette entry the {{WICBitmapPalette}} is set to Custom by that action.</p><p> <strong>InitializeFromBitmap</strong>'s <em>fAddTransparentColor</em> parameter will add a transparent color to the end of the color collection if its size if less than 256, otherwise index 255 will be replaced with the transparent color. If a pre-defined palette type is used, it will change to BitmapPaletteTypeCustom since it no longer matches the predefined palette.</p><p>The palette interface is an auxiliary imaging interface in that it does not directly concern bitmaps and pixels; rather it provides indexed color translation for indexed bitmaps. For an indexed pixel format with M bits per pixels: (The number of colors in the palette) greater than 2^M.</p><p>Traditionally the basic operation of the palette is to provide a translation from a byte (or smaller) index into a 32bpp color value. This is often accomplished by a 256 entry table of color values.</p> + + + + <p>Initializes the palette to one of the pre-defined palettes specified by <strong>{{WICBitmapPaletteType}}</strong> and optionally adds a transparent color.</p> + <p>If a transparent color is added to a palette, the palette is no longer predefined and is returned as <strong>{{WICBitmapPaletteTypeCustom}}</strong>. For palettes with less than 256 entries, the transparent entry is added to the end of the palette (that is, a 16-color palette becomes a 17-color palette). For palettes with 256 colors, the transparent palette entry will replace the last entry in the pre-defined palette. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>InitializeCustom</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes a palette using a computed optimized values based on the reference bitmap.</p> + <p> The resulting palette contains the specified number of colors which best represent the colors present in the bitmap. The algorithm operates on the opaque {{RGB}} color value of each pixel in the reference bitmap and hence ignores any alpha values. If a transparent color is required, set the fAddTransparentColor parameter to <strong>{{TRUE}}</strong> and one fewer optimized color will be computed, reducing the <em>colorCount</em>, and a fully transparent color entry will be added. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source bitmap.</p> </dd> + + + <dd> <p>The number of colors to initialize the palette with.</p> </dd> + + + <dd> <p>A value to indicate whether to add a transparent color.</p> </dd> + + + + + <p>Initialize the palette based on a given palette.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source palette.</p> </dd> + + + + + <p>Retrieves the <strong>{{WICBitmapPaletteType}}</strong> that describes the palette. </p> + <p><strong>{{WICBitmapPaletteCustom}}</strong> is used for palettes initialized from both <strong>InitializeCustom</strong> and <strong>InitializeFromBitmap</strong>. There is no distinction is made between optimized and custom palettes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetColorCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Fills out the supplied color array with the colors from the internal color table. The color array should be sized according to the return results from <strong>GetColorCount</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value that describes whether the palette is black and white.</p> + <p>A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is black and white. <strong>{{TRUE}}</strong> indicates that the palette is black and white; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value that describes whether a palette is grayscale.</p> + <p>A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is grayscale. <strong>{{TRUE}}</strong> indicates that the palette is grayscale; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Proxy function for the <strong>HasAlpha</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Determines if the source pixel format can be converted to the destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source pixel format.</p> </dd> + + + <dd> <p>The destionation pixel format.</p> </dd> + + + <dd> <p>A reference that receives a value indicating whether the source pixel format can be converted to the destination pixel format.</p> </dd> + + + + + <p>Allows a format converter to be initialized with a planar source. You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICFormatConverter}}</strong>.</p> + + + + <p>Initializes a format converter with a planar source, and specifies the interleaved output pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of <strong>{{IWICBitmapSource}}</strong> that represents image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Query if the format converter can convert from one format to another.</p> + <p>To specify an interleaved input pixel format, provide a length 1 array to <em>pSrcPixelFormats</em>.</p> + <p>If the conversion is not supported, this method returns {{S_OK}}, but *<em>pfCanConvert</em> is set to {{FALSE}}. </p><p>If this method fails, the out parameter <em>pfCanConvert</em> is invalid.</p> + + + <dd> <p>An array of {{WIC}} pixel formats that represents source image planes.</p> </dd> + + + <dd> <p>The number of source pixel formats specified by the <em>pSrcFormats</em> parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>True if the conversion is supported.</p> </dd> + + + + + <p>Represents a resized version of the input bitmap using a resampling or filtering algorithm.</p> + <p>Images can be scaled to larger sizes; however, even with sophisticated scaling algorithms, there is only so much information in the image and artifacts tend to worsen the more you scale up.</p><p> The scaler will reapply the resampling algorithm every time <strong>CopyPixels</strong> is called. If the scaled image is to be animated, the scaled image should be created once and cached in a new bitmap, after which the <strong>{{IWICBitmapScaler}}</strong> may be released. In this way the scaling algorithm - which may be computationally expensive relative to drawing - is performed only once and the result displayed many times. </p><p> The scaler is optimized to use the minimum amount of memory required to scale the image correctly. The scaler may be used to produce parts of the image incrementally (banding) by calling <strong>CopyPixels</strong> with different rectangles representing the output bands of the image. Resampling typically requires overlapping rectangles from the source image and thus may need to request the same pixels from the source bitmap multiple times. Requesting scanlines out-of-order from some image decoders can have a significant performance penalty. Because of this reason, the scaler is optimized to handle consecutive horizontal bands of scanlines (rectangle width equal to the bitmap width). In this case the accumulator from the previous vertically adjacent rectangle is re-used to avoid duplicate scanline requests from the source. This implies that banded output from the scaler may have better performance if the bands are requested sequentially. Of course if the scaler is simply used to produce a single rectangle output, this concern is eliminated because the scaler will internally request scanlines in the correct order. </p> + + + + <p>Initializes the bitmap scaler with the provided parameters.</p> + <p> <strong>{{IWICBitmapScaler}}</strong> can't be initialized multiple times. For example, when scaling every frame in a multi-frame image, a new <strong>{{IWICBitmapScaler}}</strong> must be created and initialized for each frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The destination width.</p> </dd> + + + <dd> <p>The desination height.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapInterpolationMode}}</strong> to use when scaling.</p> </dd> + + + + + <p>Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.</p> + + + + <p>Initializes the bitmap clipper with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>he input bitmap source.</p> </dd> + + + <dd> <p>The rectangle of the bitmap source to clip.</p> </dd> + + + + + <p>Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. Rotations are done before the flip.</p> + <p>{{IWICBitmapFipRotator}} requests data on a per-pixel basis, while {{WIC}} codecs provide data on a per-scanline basis. This causes the fliprotator object to exhibit n? behavior if there is no buffering. This occures because each pixel in the transformed image requires an entire scanline to be decoded in the file. It is recommended that you buffer the image using <strong>{{IWICBitmap}}</strong>, or flip/rotate the image using Direct2D.</p> + + + + <p>Initializes the bitmap flip rotator with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapTransformOptions}}</strong> to flip or rotate the image.</p> </dd> + + + + + <p>Exposes methods that support the <strong>Lock</strong> method.</p> + <p>The bitmap lock is simply an abstraction for a rectangular memory window into the bitmap. For the simplest case, a system memory bitmap, this is simply a reference to the top left corner of the rectangle and a stride value.</p><p>To release the exclusive lock set by <strong>Lock</strong> method and the associated <strong>{{IWICBitmapLock}}</strong> object, call {{IUnknown::Release}} on the <strong>{{IWICBitmapLock}}</strong> object.</p> + + + + <p>Retrieves the width and height, in pixels, of the locked rectangle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the width of the locked rectangle.</p> </dd> + + + <dd> <p>A reference that receives the height of the locked rectangle.</p> </dd> + + + + + <p>Provides access to the {{stride}} value for the memory.</p> + <p> Note the {{stride}} value is specific to the <strong>{{IWICBitmapLock}}</strong>, not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Gets the reference to the top left pixel in the locked rectangle.</p> + <p>The reference provided by this method should not be used outside of the lifetime of the lock itself.</p><p><strong>GetDataPointer</strong> is not available in multi-threaded apartment applications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the size of the buffer.</p> </dd> + + + <dd> <p>A reference that receives a reference to the top left pixel in the locked rectangle.</p> </dd> + + + + + <p>Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel format {{GUID}} of the locked area.</p> </dd> + + + + + <p>Exposes methods for color management.</p> + <p>A Color Context is an abstraction for a color profile. The profile can either be loaded from a file (like "sRGB Color Space Profile.icm"), read from a memory buffer, or can be defined by an {{EXIF}} color space. The system color profile directory can be obtained by calling <strong>GetColorDirectory</strong>.</p><p>Once a color context has been initialized, it cannot be re-initialized.</p> + + + + <p>Initializes the color context from the given file.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the file.</p> </dd> + + + + + <p>Initializes the color context from a memory block.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffer used to initialize the <strong>{{IWICColorContext}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + + + <p>Initializes the color context using an Exchangeable Image File ({{EXIF}}) color space.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The value of the {{EXIF}} color space.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the color context type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICColorContextType}}</strong> of the color context.</p> </dd> + + + + + <p>Retrieves the color context profile.</p> + <p>Only use this method if the context type is <strong>{{WICColorContextProfile}}</strong>. +</p><p>Calling this method with <em>pbBuffer</em> set to <strong>{{NULL}}</strong> will cause it to return the required buffer size in <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the color context profile.</p> </dd> + + + <dd> <p>A reference that receives the actual buffer size needed to retrieve the entire color context profile.</p> </dd> + + + + + <p>Retrieves the Exchangeable Image File ({{EXIF}}) color space color context.</p> + <p>This method should only be used when <strong>{{IWICColorContext::GetType}}</strong> indicates <strong>{{WICColorContextExifColorSpace}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the {{EXIF}} color space color context.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>3 through 65534</dt> </dl> </td><td> <p>Unused.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Exposes methods that transforms an <strong>{{IWICBitmapSource}}</strong> from one color context to another.</p> + <p>A <strong>{{IWICColorTransform}}</strong> is an imaging pipeline component that knows how to pull pixels obtained from a given <strong>{{IWICBitmapSource}}</strong> through a color transform. The color transform is defined by mapping colors from the source color context to the destination color context in a given output pixel format.</p><p>Once initialized, a color transform cannot be reinitialized. Because of this, a color transform cannot be used with multiple sources or varying parameters.</p> + + + + <p>Initializes an <strong>{{IWICColorTransform}}</strong> with a <strong>{{IWICBitmapSource}}</strong> and transforms it from one <strong>{{IWICColorContext}}</strong> to another. </p> + <p>The currently supported formats for the <em>pIContextSource</em> and <em>pixelFmtDest</em> parameters are: +</p><ul> <li>{{GUID_WICPixelFormat8bppGray}}</li> <li>{{GUID_WICPixelFormat16bppGray}}</li> <li>{{GUID_WICPixelFormat16bppBGR555}}</li> <li>{{GUID_WICPixelFormat16bppBGR565}}</li> <li>{{GUID_WICPixelFormat24bppBGR}}</li> <li>{{GUID_WICPixelFormat24bppRGB}}</li> <li>{{GUID_WICPixelFormat32bppBGR}}</li> <li>{{GUID_WICPixelFormat32bppBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPRGBA}} (Windows?8 and later)</li> <li>{{GUID_WICPixelFormat32bppRGBA}}</li> <li>{{GUID_WICPixelFormat32bppBGR101010}}</li> <li>{{GUID_WICPixelFormat32bppCMYK}}</li> <li>{{GUID_WICPixelFormat48bppBGR}}</li> <li>{{GUID_WICPixelFormat64bppBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPRGBA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppRGBA}} (Windows?8 and later)</li> </ul><p>In order to get correct behavior from a color transform, the input and output pixel formats must be compatible with the source and destination color profiles. For example, an sRGB destination color profile will produce incorrect results when used with a {{CMYK}} destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods used for in-place metadata editing. A fast metadata encoder enables you to add and remove metadata to an image without having to fully re-encode the image.</p> + <p> A decoder must be created using the <strong>{{WICDecodeOptions}}</strong> value <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> to perform in-place metadata updates. Using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option causes the decoder to release the file stream necessary to perform the metadata updates. </p><p> Not all metadata formats support fast metadata encoding. The native metadata handlers that support metadata are {{IFD}}, Exif, {{XMP}}, and {{GPS}}. </p><p> If a fast metadata encoder fails, the image will need to be fully re-encoded to add the metadata. </p> + + + + <p>Finalizes metadata changes to the image stream.</p> + <p>If the commit fails and returns <strong>{{WINCODEC_ERR_STREAMNOTAVAILABLE}}</strong>, ensure that the image decoder was loaded using the <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> option. A fast metadata encoder is not supported when the decoder is created using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option. </p><p>If the commit fails for any reason, you will need to re-encode the image to ensure the new metadata is added to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a Windows Imaging Component ({{WIC}}) stream for referencing imaging and metadata content.</p> + <p>Decoders and metadata handlers are expected to create sub streams of whatever stream they hold when handing off control for embedded metadata to another metadata handler. If the stream is not restricted then use {{MAXLONGLONG}} as the max size and offset 0.</p><p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + + + + <p>Initializes a stream from another stream. Access rights are inherited from the underlying stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initialize stream.</p> </dd> + + + + + <p>Initializes a stream from a particular file.</p> + <p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a shared file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The file used to initialize the stream.</p> </dd> + + + <dd> <p>The desired file access mode.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GENERIC_READ}}</strong></dt> </dl> </td><td> <p>Read access.</p> </td></tr> <tr><td><dl> <dt><strong>{{GENERIC_WRITE}}</strong></dt> </dl> </td><td> <p>Write access.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Initializes a stream to treat a block of memory as a stream. The stream cannot grow beyond the buffer size. </p> + <p>This method should be avoided whenever possible. The caller is responsible for ensuring the memory block is valid for the lifetime of the stream when using <strong>InitializeFromMemory</strong>. A workaround for this behavior is to create an <strong>{{IStream}}</strong> and use <strong>InitializeFromIStream</strong> to create the <strong>{{IWICStream}}</strong>.</p><p>If you require a growable memory stream, use <strong>CreateStreamOnHGlobal</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the buffer used to initialize the stream.</p> </dd> + + + <dd> <p>The size of buffer.</p> </dd> + + + + + <p>Initializes the stream as a substream of another stream.</p> + <p>The stream functions with its own stream position, independent of the underlying stream but restricted to a region. All seek positions are relative to the sub region. It is allowed, though not recommended, to have multiple writable sub streams overlapping the same range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the input stream.</p> </dd> + + + <dd> <p>The stream offset used to create the new stream.</p> </dd> + + + <dd> <p>The maximum size of the stream.</p> </dd> + + + + + <p>Exposes methods that provide enumeration services for individual metadata items.</p> + + + + <p>Advanced the current position in the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of items to be retrieved.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>An array of enumerated items.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>The number of items that were retrieved. This value is always less than or equal to the number of items requested.</p> </dd> + + + + + <p>Skips to given number of objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of objects to skip.</p> </dd> + + + + + <p>Resets the current position to the beginning of the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a copy of the current <strong>{{IWICEnumMetadataItem}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods for retrieving metadata blocks and items from a decoder or its image frames using a metadata query expression.</p> + <p>A metadata query reader uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>The benefit of the query reader is the ability to access a metadata item in a single step. +</p><p>The query reader also provides the way to traverse the whole set of metadata hierarchy with the help of the <strong>GetEnumerator</strong> method. +However, it is not recommended to use this method since <strong>{{IWICMetadataBlockReader}}</strong> and <strong>{{IWICMetadataReader}}</strong> provide a more convenient and cheaper way. +</p> + + + + <p>Gets the metadata query readers container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the cointainer format {{GUID}}.</p> </dd> + + + + + <p>Retrieves the current path relative to the root metadata block.</p> + <p>If you pass <strong>{{NULL}}</strong> to <em>wzNamespace</em>, <strong>GetLocation</strong> ignores <em>cchMaxLength</em> and returns the required buffer length to store the path in the variable that <em>pcchActualLength</em> points to. +</p><p>If the query reader is relative to the top of the metadata hierarchy, it will return a single-char string.</p><p>If the query reader is relative to a nested metadata block, this method will return the path to the current query reader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the <em>wzNamespace</em> buffer.</p> </dd> + + + <dd> <p>Pointer that receives the current namespace location.</p> </dd> + + + <dd> <p>The actual buffer length that was needed to retrieve the current namespace location.</p> </dd> + + + + + <p>Retrieves the metadata block or item identified by a metadata query expression. </p> + <p><strong>GetMetadataByName</strong> uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>If multiple blocks or items exist that are expressed by the same query expression, the first metadata block or item found will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The query expression to the requested metadata block or item.</p> </dd> + + + <dd> <p>When this method returns, contains the metadata block or item requested.</p> </dd> + + + + + <p>Gets an enumerator of all metadata items at the current relative location within the metadata hierarchy.</p> + <p>The retrieved enumerator only contains query strings for the metadata blocks and items in the current level of the hierarchy. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IEnumString}}</strong> interface for the enumerator that contains query strings that can be used in the current <strong>{{IWICMetadataQueryReader}}</strong>. +</p> </dd> + + + + + <p>Exposes methods for setting or removing metadata blocks and items to an encoder or its image frames using a metadata query expression.</p> + <p>A metadata query writer uses metadata query expressions to set or remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p> + + + + <p>Sets a metadata item to a specific location.</p> + <p><strong>SetMetadataByName</strong> uses metadata query expressions to remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p> If the value set is a nested metadata block then use variant type <code>{{VT_UNKNOWN}}</code> and <em>pvarValue</em> pointing to the <strong>{{IWICMetadataQueryWriter}}</strong> of the new metadata block. The ordering of metadata items is at the discretion of the query writer since relative locations are not specified. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the metadata item.</p> </dd> + + + <dd> <p>The metadata to set.</p> </dd> + + + + + <p>Proxy function for the <strong>RemoveMetadataByName</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.</p> + <p>There are a number of concrete implemenations of this interface representing each of the standard encoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native encoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpEncoder}}</td><td>0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82</td></tr> <tr><td>{{CLSID_WICPngEncoder}}</td><td>0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc</td></tr> <tr><td>{{CLSID_WICJpegEncoder}}</td><td>0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76</td></tr> <tr><td>{{CLSID_WICGifEncoder}}</td><td>0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd</td></tr> <tr><td>{{CLSID_WICTiffEncoder}}</td><td>0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8</td></tr> <tr><td>{{CLSID_WICWmpEncoder}}</td><td>0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2</td></tr> </table><p>?</p><p>Additionally this interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p> + + + + <p>Initializes the encoder with an {{IStream}} which tells the encoder where to encode the bits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the encoder's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the encoder's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapEncoderInfo}}</strong> for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICColorContext}}</strong> objects for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the global thumbnail for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to set as the global thumbnail.</p> </dd> + + + + + <p>Sets the global preview for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to use as the global preview.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapFrameEncode}}</strong> instance.</p> + <p>The parameter <em>ppIEncoderOptions</em> can be used to receive an {{IPropertyBag2}} that can then be used to specify encoder options. This is done by passing a reference to a <strong>{{NULL}}</strong> {{IPropertyBag2}} reference in <em>ppIEncoderOptions</em>. The returned {{IPropertyBag2}} is initialized with all encoder options that are available for the given format, at their default values. To specify non-default encoding behavior, set the needed encoder options on the {{IPropertyBag2}} and pass it to <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>.</p><strong>Note</strong>??Do not pass in a reference to an initialized {{IPropertyBag2}}. The reference will be overwritten, and the original {{IPropertyBag2}} will not be freed.?<p>Otherwise, you can pass <strong>{{NULL}}</strong> in <em>ppIEncoderOptions</em> if you do not intend to specify encoder options.</p><p>See Encoding Overview for an example of how to set encoder options.</p><p>For formats that support encoding multiple frames (for example, {{TIFF}}, {{JPEG}}-{{XR}}), you can work on only one frame at a time. This means that you must call <strong>{{IWICBitmapFrameEncode::Commit}}</strong> before you call <strong>CreateNewFrame</strong> again. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all changes for the image and closes the stream.</p> + <p>To finalize an image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p><p>After the encoder has been committed, it can't be re-initialized or reused with another stream. A new encoder interface must be created, for example, with <strong>{{IWICImagingFactory::CreateEncoder}}</strong>. +</p><p>For the encoder <strong>Commit</strong> to succeed, you must at a minimum call <strong>{{IWICBitmapEncoder::Initialize}}</strong> and either <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> or <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong>. +</p><p> <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> specifies all parameters needed to encode the image data. <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> requires that you also call <strong>{{IWICBitmapFrameEncode::SetSize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong> (if the pixel format is indexed). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents an encoder's individual image frames.</p> + + + + <p>Initializes the frame encoder using the given properties.</p> + <p>If you don't want any encoding options, pass <strong>{{NULL}}</strong> for <em>pIEncoderOptions</em>. Otherwise, pass the {{IPropertyBag2}} that was provided by <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> with updated values. +</p><p>For a complete list of encoding options supported by the Windows-provided codecs, see Native {{WIC}} Codecs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The set of properties to use for <strong>{{IWICBitmapFrameEncode}}</strong> initialization.</p> </dd> + + + + + <p>Sets the output image dimensions for the frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the output image.</p> </dd> + + + <dd> <p>The height of the output image.</p> </dd> + + + + + <p>Sets the physical resolution of the output image.</p> + <p>Windows Imaging Component ({{WIC}}) doesn't perform any special processing as a result of {{DPI}} resolution values. For example, data returned from <strong>{{IWICBitmapSource::CopyPixels}}</strong> isn't scaled by the {{DPI}}. The app must handle {{DPI}} resolution. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution value.</p> </dd> + + + <dd> <p>The vertical resolution value.</p> </dd> + + + + + <p>Requests that the encoder use the specified pixel format.</p> + <p>The encoder might not support the requested pixel format. If not, <strong>SetPixelFormat</strong> returns the closest match in the memory block that <em>pPixelFormat</em> points to. If the returned pixel format doesn't match the requested format, you must use an <strong>{{IWICFormatConverter}}</strong> object to convert the pixel data.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_WRONGSTATE}}</strong></dt> </dl> </td><td> <p>The <strong>{{IWICBitmapFrameEncode::Initialize}}</strong> method was not called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>On input, the requested pixel format {{GUID}}. On output, the closest pixel format {{GUID}} supported by the encoder; this may be different than the requested format. For a list of pixel format {{GUIDs}}, see Native Pixel Formats.</p> </dd> + + + + + <p>Proxy function for the <strong>SetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICPalette}}</strong> for indexed pixel formats.</p> + <p>This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.</p><p>If you already called <strong>{{IWICBitmapEncoder::SetPalette}}</strong> to set a global palette, this method overrides that palette for the current frame.</p><p>The palette must be specified before your first call to <strong>WritePixels</strong>/<strong>WriteSource</strong>. Doing so will cause <strong>WriteSource</strong> to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to <strong>WriteSource</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies scan-line data from a caller-supplied buffer to the <strong>{{IWICBitmapFrameEncode}}</strong> object. +</p> + <p>Successive <strong>WritePixels</strong> calls are assumed to be sequential scan-line access in the output image.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_CODECTOOMANYSCANLINES}}</strong></dt> </dl> </td><td> <p>The value of <em>lineCount</em> is larger than the number of scan lines in the image.</p> </td></tr> </table><p>?</p> + + + + <p>Encodes a bitmap source.</p> + <p>If <strong>SetSize</strong> is not called prior to calling <strong>WriteSource</strong>, the size given in <em>prc</em> is used if not <strong>{{NULL}}</strong>. Otherwise, the size of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used. </p><p>If <strong>SetPixelFormat</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used.</p><p>If <strong>SetResolution</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of <em>pIBitmapSource</em> is used.</p><p>If <strong>SetPalette</strong> is not called prior to calling <strong>WriteSource</strong>, the target pixel format is indexed, and the pixel format of <em>pIBitmapSource</em> matches the encoder frame's pixel format, then the <em>pIBitmapSource</em> pixel format is used.</p><p>When encoding a {{GIF}} image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor ({{ISV}}) {{GIF}} codec, <strong>WriteSource</strong> will use the global palette to encode the frame even when <em>pIBitmapSource</em> has a frame level palette.</p><p>Starting with Windows?Vista, repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>.</p><p>Starting with Windows?8.1, the source rect must be at least the dimensions set through <strong>SetSize</strong>. If the source rect width exceeds the <strong>SetSize</strong> width, extra pixels on the right side are ignored. If the source rect height exceeds the remaining unfilled height, extra scan lines on the bottom are ignored. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap source to encode.</p> </dd> + + + <dd> <p>The size rectangle of the bitmap source.</p> </dd> + + + + + <p>Commits the frame to the image.</p> + <p>After the frame <strong>Commit</strong> has been called, you can't use or reinitialize the <strong>{{IWICBitmapFrameEncode}}</strong> object and any objects created from it. +</p><p>To finalize the image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the metadata query writer for the encoder frame.</p> + <p>If you are setting metadata on the frame, you must do this before you use <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> or <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> to write any image pixels to the frame</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to metadata query writer for the encoder frame.</p> </dd> + + + + + <p>Allows planar component image pixels to be written to an encoder. When supported by the encoder, this allows an application to encode planar component image data without first converting to an interleaved pixel format.</p><p>You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICBitmapFrameEncode}}</strong> for the {{JPEG}} encoder. +</p> + <p>Encoding {{YCbCr}} data using <strong>{{IWICPlanarBitmapFrameEncode}}</strong> is similar but not identical to encoding interleaved data using {{IWICBitmapFrameEncode}}. The planar interface only exposes the ability to write planar frame image data, and you should continue to use the frame encode interface to set metadata or a thumbnail and to commit at the end of the operation. +</p> + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WritePixels</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>Line Count Restriction</th><th>Chroma Plane Width</th><th>Chroma Plane Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>Any</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>The number of lines to encode. See the Remarks section for {{WIC}} Jpeg specific line count restrictions.</p> </dd> + + + <dd> <p>Specifies the source buffers for each component plane encoded. </p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pPlanes</em> parameter.</p> </dd> + + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WriteSource</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. </p><p>If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>Specifies an array of <strong>{{IWICBitmapSource}}</strong> that represent image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The source rectangle of pixels to encode from the <strong>{{IWICBitmapSource}}</strong> planes. Null indicates the entire source. The source rect width must match the width set through <strong>SetSize</strong>. Repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>. </p> </dd> + + + + + <p>Encodes <strong>{{ID2D1Image}}</strong> interfaces to an <strong>{{IWICBitmapEncoder}}</strong>. The input images can be larger than the maximum device texture size.</p> + + + + <p>Encodes the image to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>.</p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the {{IWICBitmapFrameEncode}} before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the image as a thumbnail to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>. </p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the <strong>{{IWICBitmapFrameEncode}}</strong> before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the given image as the thumbnail to the given {{WIC}} bitmap encoder.</p> + <p>You must create the image that you pass in on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If you don't specify additional parameters in the variable that <em>pImageParameters</em> points to, the encoder uses a set of useful defaults. For info about these defaults, see <strong>{{WICImageParameters}}</strong>. </p><p>Before you call <strong>WriteThumbnail</strong>, you must set up the <strong>{{IWICBitmapEncoder}}</strong> interface for the encoder on which you want to set the thumbnail. </p><p>If <strong>WriteThumbnail</strong> fails, it might return {{E_OUTOFMEMORY}}, {{D2DERR_WRONG_RESOURCE_DOMAIN}}, or other error codes from the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Direct2D image that will be encoded.</p> </dd> + + + <dd> <p>The encoder on which the thumbnail is set.</p> </dd> + + + <dd> <p>Additional parameters to control encoding.</p> </dd> + + + + + <p>Exposes methods that represent a decoder.</p><p>The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette. </p> + <p>There are a number of concrete implemenations of this interface representing each of the standard decoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), icon ({{ICO}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native decoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpDecoder}}</td><td>0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78</td></tr> <tr><td>{{CLSID_WICPngDecoder}}</td><td>0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51</td></tr> <tr><td>{{CLSID_WICIcoDecoder}}</td><td>0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe</td></tr> <tr><td>{{CLSID_WICJpegDecoder}}</td><td>0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca</td></tr> <tr><td>{{CLSID_WICGifDecoder}}</td><td>0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe</td></tr> <tr><td>{{CLSID_WICTiffDecoder}}</td><td>0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b</td></tr> <tr><td>{{CLSID_WICWmpDecoder}}</td><td>0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d</td></tr> </table><p>?</p><p>This interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p><p>Codecs written as {{TIFF}} container formats that are not register will decode as a {{TIFF}} image. Client applications should check for a zero frame count to determine if the codec is valid.</p> + + + + <p>Retrieves the capabilities of the decoder based on the specified stream.</p> + <p>Custom decoder implementations should save the current position of the specified {{IStream}}, read whatever information is necessary in order to determine which capabilities it can provide for the supplied stream, and restore the stream position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to retrieve the decoder capabilities from.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDecoderCapabilities}}</strong> of the decoder.</p> </dd> + + + + + <p>Initializes the decoder with the provided stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to use for initialization.</p> <p>The stream contains the encoded pixels which are decoded each time the <strong>CopyPixels</strong> method on the <strong>{{IWICBitmapFrameDecode}}</strong> interface (see <strong>GetFrame</strong>) is invoked.</p> </dd> + + + <dd> <p>The <strong>{{WICDecodeOptions}}</strong> to use for initialization.</p> </dd> + + + + + <p>Retrieves the image's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the image's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapDecoderInfo}}</strong> for the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CopyPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a preview image, if supported.</p> + <p>Not all formats support previews. Only the native Microsoft?Windows Digital Photo ({{WDP}}) codec support previews.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the preview bitmap if supported.</p> </dd> + + + + + <p>Proxy function for the <strong>GetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the total number of frames in the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the total number of frames in the image.</p> </dd> + + + + + <p>Retrieves the specified frame of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The particular frame to retrieve.</p> </dd> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapFrameDecode}}</strong>.</p> </dd> + + + + + + + + + <p>Copies pixel data using the supplied input parameters.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle of pixels to copy.</p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p> The {{GUID}} of desired pixel format in which the pixels should be returned. </p> <p>This {{GUID}} must be a format obtained through an <strong>GetClosestPixelFormat</strong> call.</p> </dd> + + + <dd> <p> The desired rotation or flip to perform prior to the pixel copy. </p> <p>The transform must be an operation supported by an <strong>DoesSupportTransform</strong> call.</p> <p>If a <em>dstTransform</em> is specified, <em>nStride</em> is the <em>transformed stride</em> and is based on the <em>pguidDstFormat</em> pixel format, not the original source's pixel format.</p> </dd> + + + <dd> <p>The {{stride}} of the destination buffer.</p> </dd> + + + <dd> <p>The size of the destination buffer.</p> </dd> + + + <dd> <p>The output buffer.</p> </dd> + + + + + <p>Returns the closest dimensions the implementation can natively scale to given the desired dimensions.</p> + <p>The Windows provided codecs provide the following support for native scaling: +</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{PNG:}} No scaling support.</li> <li>{{JPEG:}} Native down-scaling by a factor of 8, 4, or 2.</li> <li>{{JPEG}}-{{XR:}} Native scaling of the original image by powers of 2. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired width. A reference that receives the closest supported width.</p> </dd> + + + <dd> <p>The desired height. A reference that receives the closest supported height.</p> </dd> + + + + + <p>Retrieves the closest pixel format to which the implementation of <strong>{{IWICBitmapSourceTransform}}</strong> can natively copy pixels, given a desired format.</p> + <p>The Windows provided codecs provide the following support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of <strong>{{IWICBitmapSourceTransform}}</strong>.</li> <li>{{JPEG}}, {{PNG}}, {{JPEG}}-{{XR:}} Trivial support (always returns the same value as <strong>{{IWICBitmapFrameDecode::GetPixelFormat}}</strong>).</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether a specific transform option is supported natively by the implementation of the <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p> + <p>The Windows provided codecs provide the following level of support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{JPEG}}, {{PNG:}} Trivial support ({{WICBitmapTransformRotate0}} only).</li> <li>{{JPEG}}-{{XR:}} Support for all transformation/rotations. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides access to planar Y?CbCr pixel formats where pixel components are stored in separate component planes. This interface also allows access to other codec optimizations for flip/rotate, scale, and format conversion to other Y?CbCr planar formats; this is similar to the pre-existing <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p><p>QueryInterface can be used to obtain this interface from the Windows provided implementations of <strong>{{IWICBitmapFrameDecode}}</strong> for the {{JPEG}} decoder, <strong>{{IWICBitmapScaler}}</strong>, <strong>{{IWICBitmapFlipRotator}}</strong>, and <strong>{{IWICColorTransform}}</strong>.</p> + + + + <p>Use this method to determine if a desired planar output is supported and allow the caller to choose an optimized code path if it is. Otherwise, callers should fall back to <strong>{{IWICBitmapSourceTransform}}</strong> or <strong>{{IWICBitmapSource}}</strong> and retrieve interleaved pixels.</p><p> The following transforms can be checked:</p><ul> <li> Determine if the flip/rotate option specified via <strong>{{WICBitmapTransformOptions}}</strong> is supported.</li> <li>Determine if the requested planar pixel format configuration is supported.</li> <li>Determine the closest dimensions the implementation can natively scale to given the desired dimensions. +</li> </ul><p>When a transform is supported, this method returns the description of the resulting planes in the <em>pPlaneDescriptions</em> parameter. +</p> + <p>Check the value of <em>pfIsSupported</em> to determine if the transform is supported via <strong>{{IWICPlanarBitmapSourceTransform::CopyPixels}}</strong>. If this method fails, the output parameters for width, height, and plane descriptions are zero initialized. +Other return values indicate failure. </p> + + + + <p>Copies pixels into the destination planes. Configured by the supplied input parameters. </p><p>If a <em>dstTransform</em>, scale, or format conversion is specified, <em>cbStride</em> is the transformed stride and is based on the destination pixel format of the <em>pDstPlanes</em> parameter, not the original source's pixel format.</p> + <p>{{WIC}} {{JPEG}} Decoder: +Depending on the configured chroma subsampling of the image, the source rectangle has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>llumaWidth</td><td>llumaHeight</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The <em>pDstPlanes</em> parameter supports the following pixel formats.</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the specified scale, flip/rotate, and planar format configuration is not supported this method fails with <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong>. You can check if a transform is supported by calling <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> + + + <dd> <p>The source rectangle of pixels to copy. </p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The desired rotation or flip to perform prior to the pixel copy. A rotate can be combined with a flip horizontal or a flip vertical, see <strong>{{WICBitmapTransformOptions}}</strong>.</p> </dd> + + + <dd> <p>Used to specify additional configuration options for the transform. See <strong>{{WICPlanarOptions}}</strong> for more detail.</p> <p>{{WIC}} {{JPEG}} Decoder: +<strong>{{WICPlanarOptionsPreserveSubsampling}}</strong> can be specified to retain the subsampling ratios when downscaling. By default, the {{JPEG}} decoder attempts to preserve quality by downscaling only the Y plane in some cases, changing the image to 4:4:4 chroma subsampling. +</p> </dd> + + + <dd> <p>Specifies the pixel format and output buffer for each component plane. The number of planes and pixel format of each plane must match values obtainable through <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pDstPlanes</em> parameter.</p> </dd> + + + + + <p>Defines methods for decoding individual image frames of an encoded file.</p> + + + + <p>Retrieves a metadata query reader for the frame.</p> + <p>For image formats with one frame ({{JPG}}, {{PNG}}, {{JPEG}}-{{XR}}), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame ({{GIF}}, {{TIFF}}), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of {{GIF}} a decoder-level metadata reader will be present. If the decoder doesn?t support metadata ({{BMP}}, {{ICO}}), this will return {{WINCODEC_ERR_UNSUPPORTEDOPERATION}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to the frame's metadata query reader.</p> </dd> + + + + + <p>Retrieves the <strong>{{IWICColorContext}}</strong> associated with the image frame.</p> + <p>If {{NULL}} is passed for <em>ppIColorContexts</em>, and 0 is passed for <em>cCount</em>, this method will return the total number of color contexts in the image in <em>pcActualCount</em>. </p><p>The <em>ppIColorContexts</em> array must be filled with valid data: each <strong>{{IWICColorContext}}*</strong> in the array must have been created using <strong>{{IWICImagingFactory::CreateColorContext}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a small preview of the frame, if supported by the codec.</p> + <p>Not all formats support thumbnails. Joint Photographic Experts Group ({{JPEG}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}) support thumbnails.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapSource}}</strong> of the thumbnail.</p> </dd> + + + + + <p>Exposes methods for obtaining information about and controlling progressive decoding.</p> + <p>Images can only be progressively decoded if they were progressively encoded. Progressive images automatically start at the highest (best quality) progressive level. The caller must manually set the decoder to a lower progressive level.</p><p>{{E_NOTIMPL}} is returned if the codec does not support progressive level decoding.</p> + + + + <p>Gets the number of levels of progressive decoding supported by the {{CODEC}}.</p> + <p>Users should not use this function to iterate through the progressive levels of a progressive {{JPEG}} image. {{JPEG}} progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive {{JPEG}} image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the number of levels supported by the {{CODEC}}.</p> </dd> + + + + + <p>Gets the decoder's current progressive level.</p> + <p>The level always defaults to the highest progressive level. In order to decode a lower progressive level, <strong>SetCurrentLevel</strong> must first be called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the current level specified.</p> </dd> + + + + + <p>Specifies the level to retrieve on the next call to <strong>CopyPixels</strong>.</p> + <p> A call does not have to request every level supported. If a caller requests level 1, without having previously requested level 0, the bits returned by the next call to <strong>CopyPixels</strong> will include both levels. </p><p> If the requested level is invalid, the error returned is {{WINCODEC_ERR_INVALIDPROGRESSIVELEVEL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p><strong>{{IWICProgressCallback}}</strong> interface is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + + + + <p><strong>Notify</strong> method is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + <p>Registers a progress notification callback function.</p> + <p>Applications can only register a single callback. Subsequent registration calls will replace the previously registered callback. To unregister a callback, pass in <strong>{{NULL}}</strong> or register a new callback function.</p><p> Progress is reported in an increasing order between 0.0 and 1.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationBegin}}</strong>, the callback is guaranteed to be called with progress 0.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationEnd}}</strong>, the callback is guaranteed to be called with progress 1.0. </p><p><strong>{{WICProgressNotificationFrequent}}</strong> increases the frequency in which the callback is called. If an operation is expected to take more than 30 seconds, <strong>{{WICProgressNotificationFrequent}}</strong> should be added to <em>dwProgressFlags</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A function reference to the application defined progress notification callback function. See <strong>ProgressNotificationCallback</strong> for the callback signature.</p> </dd> + + + <dd> <p>A reference to component data for the callback method.</p> </dd> + + + <dd> <p>The <strong>{{WICProgressOperation}}</strong> and <strong>{{WICProgressNotification}}</strong> flags to use for progress notification.</p> </dd> + + + + + <p>Exposes methods that provide component information.</p> + + + + <p>Retrieves the component's <strong>{{WICComponentType}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetCLSID</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the signing status of the component.</p> + <p>Signing is unused by {{WIC}}. Therefore, all components {{WICComponentSigned}}.</p><p>This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICComponentSigning}}</strong> status of the component.</p> </dd> + + + + + <p>Retrieves the name of component's author.</p> + <p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzAuthor</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the name of the component's author. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's authors name. The author name is optional; if an author name is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the vendor {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the component's vendor {{GUID}}.</p> </dd> + + + + + <p>Proxy function for the <strong>GetVersion</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the component's specification version.</p> + <p>All built-in components return "1.0.0.0", except for pixel formats, which do not have a spec version.</p><p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzSpecVersion</em> buffer.</p> </dd> + + + <dd> <p>When this method returns, contain a culture invarient string of the component's specification version. The version form is {{NN}}.{{NN}}.{{NN}}.{{NN}}.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's specification version. The specification version is optional; if a value is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the component's friendly name, which is a human-readable display name for the component.</p> + <p>If <em>cchFriendlyName</em> is 0 and <em>wzFriendlyName</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzFriendlyName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the friendly name of the component. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's friendly name.</p> </dd> + + + + + <p>Exposes methods that provide information about a pixel format converter.</p> + + + + <p>Retrieves a list of {{GUIDs}} that signify which pixel formats the converter supports.</p> + <p>The format converter does not necessarily guarantee symmetricality with respect to conversion; that is, a converter may be able to convert {{FROM}} a particular format without actually being able to convert {{TO}} a particular format. In order to test symmetricality, use <strong>CanConvert</strong>.</p><p>To determine the number of pixel formats a coverter can handle, set <em>cFormats</em> to <code>0</code> and <em>pPixelFormatGUIDs</em> to <code>{{NULL}}</code>. The converter will fill <em>pcActual</em> with the number of formats supported by that converter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pPixelFormatGUIDs</em> array.</p> </dd> + + + <dd> <p>Pointer to a {{GUID}} array that receives the pixel formats the converter supports.</p> </dd> + + + <dd> <p>The actual array size needed to retrieve all pixel formats supported by the converter.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICFormatConverter}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a particular codec.</p> + + + + <p>Proxy function for the <strong>GetContainerFormat</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the pixel formats the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the array size needed to retrieve all the supported pixel formats by calling it with <em>cFormats</em> set to <code>0</code> and <em>pguidPixelFormats</em> set to <code>{{NULL}}</code>. This call sets <em>pcActual</em> to the array size needed. Once the needed array size is determined, a second <strong>GetPixelFormats</strong> call with <em>pguidPixelFormats</em> set to an array of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pguidPixelFormats</em> array. Use <code>0</code> on first call to determine the needed array size.</p> </dd> + + + <dd> <p>Receives the supported pixel formats. Use <code>{{NULL}}</code> on first call to determine needed array size.</p> </dd> + + + <dd> <p>The array size needed to retrieve all supported pixel formats.</p> </dd> + + + + + <p>Retrieves the color manangement version number the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchColorManagementVersion</em> set to <code>0</code> and <em>wzColorManagementVersion</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetColorManagementVersion</strong> call with <em>cchColorManagementVersion</em> set to the buffer size and <em>wzColorManagementVersion</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the version buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the color management version number. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the full color management version number.</p> </dd> + + + + + <p>Retrieves the name of the device manufacture associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceManufacturer</em> set to <code>0</code> and <em>wzDeviceManufacturer</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceManufacturer</strong> call with <em>cchDeviceManufacturer</em> set to the buffer size and <em>wzDeviceManufacturer</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device manufacture's name. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the device manufacture's name. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the device manufacture's name.</p> </dd> + + + + + <p>Retrieves a comma delimited list of device models associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceModels</em> set to <code>0</code> and <em>wzDeviceModels</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceModels</strong> call with <em>cchDeviceModels</em> set to the buffer size and <em>wzDeviceModels</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device models buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of device model names associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all of the device model names.</p> </dd> + + + + + <p>Proxy function for the <strong>GetMimeTypes</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a comma delimited list of the file name extensions associated with the codec.</p> + <p>The default extension for an image encoder is the first item in the list of returned extensions.</p><p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchFileExtensions</em> set to <code>0</code> and <em>wzFileExtensions</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetFileExtensions</strong> call with <em>cchFileExtensions</em> set to the buffer size and <em>wzFileExtensions</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the file name extension buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of file name extensions associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all file name extensions associated with the codec. </p> </dd> + + + + + <p>Proxy function for the <strong>DoesSupportAnimation</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value indicating whether the codec supports chromakeys.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports chromakeys; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports lossless formats.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports lossless formats; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports multi frame images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports multi frame images; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the given mime type matches the mime type of the codec.</p> + <strong>Note</strong>??The Windows provided codecs do not implement this method and return {{E_NOTIMPL}}.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The codec does not implement this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The mime type to compare.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the mime types match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Exposes methods that provide information about an encoder.</p> + + + + <p>Creates a new <strong>{{IWICBitmapEncoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a decoder.</p> + + + + <p>Retrieves the file pattern signatures supported by the decoder.</p> + <p> To retrieve all pattern signatures, this method should first be called with <em>pPatterns</em> set to <code>{{NULL}}</code> to retrieve the actual buffer size needed through <em>pcbPatternsActual</em>. Once the needed buffer size is known, allocate a buffer of the needed size and call <strong>GetPatterns</strong> again with the allocated buffer. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array size of the <em>pPatterns</em> array.</p> </dd> + + + <dd> <p>Receives a list of <strong>{{WICBitmapPattern}}</strong> objects supported by the decoder.</p> </dd> + + + <dd> <p>Receives the number of patterns the decoder supports.</p> </dd> + + + <dd> <p>Receives the actual buffer size needed to retrieve all pattern signatures supported by the decoder. </p> </dd> + + + + + <p>Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to pattern match within.</p> </dd> + + + <dd> <p>A reference that receives <strong>{{TRUE}}</strong> if the patterns match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapDecoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a pixel format.</p> + + + + <p>Gets the pixel format {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the pixel format {{GUID}}.</p> </dd> + + + + + <p>Gets the pixel format's <strong>{{IWICColorContext}}</strong>.</p> + <p>The returned color context is the default color space for the pixel format. However, if an {{IWICBitmapSource}} specifies its own color context, the source's context should be preferred over the pixel format's default. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetBitsPerPixel</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetChannelCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the pixel format's channel mask.</p> + <p>If 0 and {{NULL}} are passed in for <em>cbMaskBuffer</em> and <em>pbMaskBuffer</em>, respectively, the required buffer size will be returned through <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index to the channel mask to retrieve.</p> </dd> + + + <dd> <p>The size of the <em>pbMaskBuffer</em> buffer.</p> </dd> + + + <dd> <p>Pointer to the mask buffer.</p> </dd> + + + <dd> <p>The actual buffer size needed to obtain the channel mask.</p> </dd> + + + + + <p>Extends <strong>{{IWICPixelFormatInfo}}</strong> by providing additional information about a pixel format.</p> + + + + <p>Returns whether the format supports transparent pixels.</p> + <p> An indexed pixel format will not return <strong>{{TRUE}}</strong> even though it may have some transparency support. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if the pixel format supports transparency; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the <strong>{{WICPixelFormatNumericRepresentation}}</strong> of the pixel format.</p> </dd> + + + + + <p>Exposes methods used to create components for the Windows Imaging Component ({{WIC}}) such as decoders, encoders and pixel format converters.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given {{IStream}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> based on the given file handle.</p> + <p>When a decoder is created using this method, the file handle must remain alive during the lifetime of the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateComponentInfo</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapEncoder}}</strong> class.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICPalette}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICFormatConverter}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of an <strong>{{IWICBitmapScaler}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapClipper</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapFlipRotator</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICStream}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorContext}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorTransform}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> object.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a <strong>{{IWICBitmap}}</strong> from a <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a specified rectangle of an <strong>{{IWICBitmapSource}}</strong>.</p> + <p>Providing a rectangle that is larger than the source will produce undefined results.</p><p>This method always creates a separate copy of the source image, similar to the cache option <strong>{{WICBitmapCacheOnLoad}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a memory block.</p> + <p>The size of the {{IWICBitmap}} to be created must be smaller than or equal to the size of the image in <em>pbBuffer</em>.</p><p>The {{stride}} of the destination bitmap will equal the <em>stride</em> of the source data, regardless of the width and height specified.</p><p>The <em>pixelFormat</em> parameter defines the pixel format for both the input data and the output bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a bitmap handle.</p> + <p>For a non-palletized bitmap, set {{NULL}} for the <em>hPalette</em> parameter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from an icon handle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an {{IEnumUnknown}} object of the specified component types.</p> + <p>Component types must be enumerated seperately. Combinations of component types and <strong>{{WICAllComponents}}</strong> are unsupported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p>The Windows provided codecs do not support fast metadata encoding at the decoder level, and only support fast metadata encoding at the frame level. To create a fast metadata encoder from a frame, see <strong>CreateFastMetadataEncoderFromFrameDecode</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given image frame.</p> + <p>For a list of support metadata formats for fast metadata encoding, see {{WIC}} Metadata Overview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{IWICBitmapFrameDecode}}</strong> to create the <strong>{{IWICFastMetadataEncoder}}</strong> from.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a new fast metadata encoder.</p> </dd> + + + + + <p>Proxy function for the <strong>CreateQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateQueryWriterFromReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>An extension of the {{WIC}} factory interface that includes the ability to create an <strong>{{IWICImageEncoder}}</strong>. This interface uses a Direct2D device and an input image to encode to a destination <strong>{{IWICBitmapEncoder}}</strong>.</p> + + + + <p>Creates a new image encoder object.</p> + <p>You must create images to pass to the image encoder on the same Direct2D device that you pass to this method. </p><p>You are responsible for setting up the bitmap encoder itself through the existing <strong>{{IWICBitmapEncoder}}</strong> {{APIs}}. The <strong>{{IWICBitmapEncoder}}</strong> or the {{IWICBitmapFrameEncode}} object is passed to each of the <strong>{{IWICImageEncoder}}</strong> methods: <strong>WriteThumbnail</strong>, <strong>WriteFrame</strong>, and <strong>WriteFrameThumbnail</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{ID2D1Device}}</strong> object on which the corresponding image encoder is created.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IWICImageEncoder}}</strong> interface for the encoder object that you can use to encode Direct2D images.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + + + + + <p>Retrieves information about which capabilities are supported for a raw image.</p> + <p>It is recommended that a codec report that a capability is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives <strong>{{WICRawCapabilitiesInfo}}</strong> that provides the capabilities supported by the raw image.</p> </dd> + + + + + <p>Sets the desired <strong>{{WICRawParameterSet}}</strong> option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current set of parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the current set of parameters.</p> </dd> + + + + + <p>Sets the exposure compensation stop value.</p> + <p>It is recommended that a codec report that this method is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The exposure compensation value. The value range for exposure compensation is -5.0 through +5.0, which equates to 10 full stops.</p> </dd> + + + + + <p>Gets the exposure compensation stop value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the exposure compensation stop value. The default is the "as-shot" setting.</p> </dd> + + + + + <p>Sets the white point {{RGB}} values.</p> + <p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The red white point value.</p> </dd> + + + <dd> <p>The green white point value.</p> </dd> + + + <dd> <p>The blue white point value.</p> </dd> + + + + + <p>Gets the white point {{RGB}} values.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the red white point value.</p> </dd> + + + <dd> <p>A reference that receives the green white point value.</p> </dd> + + + <dd> <p>A reference that receives the blue white point value.</p> </dd> + + + + + <p>Sets the named white point of the raw file.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in the {{API}}.</p><p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Gets the named white point of the raw image.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in <strong>{{WICNamedWhitePoint}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Sets the white point Kelvin value.</p> + <p>Codec implementers should faithfully adjust the color temperature within the range supported natively by the raw image. For values outside the native support range, the codec implementer should provide a best effort representation of the image at that color temperature.</p><p>Codec implementers should return <strong>{{WINCODEC_ERR_VALUEOUTOFRANGE}}</strong> if the value is out of defined acceptable range.</p><p>Codec implementers must ensure proper interoperability with other white point setting methods such as <strong>SetWhitePointRGB</strong>. For example, if the caller sets the white point via <strong>SetNamedWhitePoint</strong> then the codec implementer may want to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wants to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The white point Kelvin value. Acceptable Kelvin values are 1,500 through 30,000.</p> </dd> + + + + + <p>Gets the white point Kelvin temperature of the raw image.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the white point Kelvin temperature of the raw image. The default is the "as-shot" setting value.</p> </dd> + + + + + <p>Gets the information about the current Kelvin range of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the minimum Kelvin temperature.</p> </dd> + + + <dd> <p>A reference that receives the maximum Kelvin temperature. </p> </dd> + + + <dd> <p>A reference that receives the Kelvin step value.</p> </dd> + + + + + <p>Sets the contrast value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Gets the contrast value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Sets the desired gamma value.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired gamma value.</p> </dd> + + + + + <p>Gets the current gamma setting of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current gamma setting.</p> </dd> + + + + + <p>Sets the sharpness value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Gets the sharpness value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Sets the saturation value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The saturation value of the raw image. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Gets the saturation value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the saturation value of the raw image. The default value is the "as-shot" setting. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Sets the tint value of the raw image.</p> + <p>The codec implementer must determine what the outer range values represent and must determine how to map the values to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Gets the tint value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Sets the noise reduction value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Gets the noise reduction value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents full highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Sets the destination color context.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The destination color context.</p> </dd> + + + + + <p>Sets the tone curve for the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> structure.</p> </dd> + + + <dd> <p>The desired tone curve.</p> </dd> + + + + + <p>Gets the tone curve of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the <strong>{{WICRawToneCurve}}</strong> of the raw image.</p> </dd> + + + <dd> <p>A reference that receives the size needed to obtain the tone curve structure.</p> </dd> + + + + + <p>Sets the desired rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired rotation angle.</p> </dd> + + + + + <p>Gets the current rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current rotation angle.</p> </dd> + + + + + <p>Sets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the notification callback method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the notification callback method.</p> </dd> + + + + + <p>Provides information and functionality specific to the {{DDS}} image format.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapDecoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsDecoder}}</strong>.</p> + + + + <p>Gets {{DDS}}-specific data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the structure where the information is returned.</p> </dd> + + + + + <p>Retrieves the specified frame of the {{DDS}} image.</p> + <p>A {{DDS}} file can contain multiple images that are organized into a three level hierarchy. First, {{DDS}} file may contain multiple textures in a texture array. Second, each texture can have multiple mip levels. Finally, the texture may be a 3D (volume) texture and have multiple slices, each of which is a 2D texture. See the {{DDS}} documentation for more information.</p><p>{{WIC}} maps this three level hierarchy into a linear array of <strong>{{IWICBitmapFrameDecode}}</strong>, accessible via <strong>{{IWICBitmapDecoder::GetFrame}}</strong>. However, determining which frame corresponds to a triad of <em>arrayIndex</em>, <em>mipLevel</em>, and <em>sliceIndex</em> value is not trivial because each mip level of a 3D texture has a different depth (number of slices). This method provides additional convenience over <strong>{{IWICBitmapDecoder::GetFrame}}</strong> for {{DDS}} images by calculating the correct frame given the three indices. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested index within the texture array.</p> </dd> + + + <dd> <p> The requested mip level.</p> </dd> + + + <dd> <p>The requested slice within the 3D texture. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{IWICBitmapFrameDecode}}</strong> object. +</p> </dd> + + + + + <p>Enables writing {{DDS}} format specific information to an encoder.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapEncoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsEncoder}}</strong>.</p> + + + + <p>Sets {{DDS}}-specific data.</p> + <p>You cannot call this method after you have started to write frame data, for example by calling <strong>{{IWICDdsEncoder::CreateNewFrame}}</strong>. </p><p>Setting {{DDS}} parameters using this method provides the {{DDS}} encoder with information about the expected number of frames and the dimensions and other parameters of each frame. The {{DDS}} encoder will fail if you do not set frame data that matches these expectations. For example, if you set <strong>{{WICDdsParameters::Width}}</strong> and <strong>Height</strong> to 32, and <strong>MipLevels</strong> to 6, the {{DDS}} encoder will expect 6 frames with the following dimensions:</p><ul> <li>32x32 pixels.</li> <li>16x16 pixels.</li> <li>8x8 pixels.</li> <li>4x4 pixels.</li> <li>2x2 pixels.</li> <li>1x1 pixels.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is described.</p> </dd> + + + + + <p>Gets {{DDS}}-specific data.</p> + <p>An application can call <strong>GetParameters</strong> to obtain the default {{DDS}} parameters, modify some or all of them, and then call <strong>SetParameters</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is returned.</p> </dd> + + + + + <p>Creates a new frame to encode.</p> + <p>This is equivalent to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, but returns additional information about the array index, mip level and slice of the newly created frame. In contrast to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, there is no <strong>{{IPropertyBag2}}</strong>* parameter because individual {{DDS}} frames do not have separate properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the newly created frame object.</p> </dd> + + + <dd> <p>Points to the location where the array index is returned.</p> </dd> + + + <dd> <p>Points to the location where the mip level index is returned.</p> </dd> + + + <dd> <p>Points to the location where the slice index is returned.</p> </dd> + + + + + <p>Provides access to a single frame of {{DDS}} image data in its native <strong>{{DXGI_FORMAT}}</strong> form, as well as information about the image data.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapFrameDecode}}</strong> using the {{DDS}} codec and QueryInterface for {{IID_IWICDdsFrameDecode}}.</p> + + + + <p>Gets the width and height, in blocks, of the {{DDS}} image.</p> + <p>For block compressed textures, the returned width and height values do not completely define the texture size because the image is padded to fit the closest whole block size. For example, three {{BC1}} textures with pixel dimensions of 1x1, 2x2 and 4x4 will all report <em>pWidthInBlocks</em> = 1 and <em>pHeightInBlocks</em> = 1. </p><p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method returns the texture size in pixels; for these formats the block size returned by <strong>{{IWICDdsFrameDecoder::GetFormatInfo}}</strong> is 1x1. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the {{DDS}} image in blocks.</p> </dd> + + + <dd> <p>The height of the {{DDS}} image in blocks.</p> </dd> + + + + + <p>Gets information about the format in which the {{DDS}} image is stored.</p> + <p>This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Information about the {{DDS}} format.</p> </dd> + + + + + <p>Requests pixel data as it is natively stored within the {{DDS}} file.</p> + <p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method behaves similarly to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. However, it does not perform any pixel format conversion, and instead produces the raw data from the {{DDS}} file.</p><p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method copies the block data directly into the provided buffer. In this case, the <em>prcBoundsInBlocks</em> parameter is defined in blocks, not pixels. To determine if this is the case, call <strong>GetFormatInfo</strong> and read the <strong>DxgiFormat</strong> member of the returned <strong>{{WICDdsFormatInfo}}</strong> structure. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy from the source. A {{NULL}} value specifies the entire texture.</p> <p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, all values of the rectangle are expressed in number of blocks, not pixels.</p> </dd> + + + <dd> <p>The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.</p> </dd> + + + <dd> <p>The size, in bytes, of the destination buffer.</p> </dd> + + + <dd> <p>A reference to the destination buffer.</p> </dd> + + + + + <p>Exposes methods for decoding {{JPEG}} images. Provides access to the Start Of Frame ({{SOF}}) header, Start of Scan ({{SOS}}) header, the Huffman and Quantization tables, and the compressed {{JPEG}} {{JPEG}} data. Also enables indexing for efficient random access. </p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameDecoder}}</strong> interface for the {{JPEG}} decoder.</p> + + + + <p>Retrieves a value indicating whether this decoder supports indexing for efficient random access.</p> + <p>Indexing is only supported for some {{JPEG}} types. Call this method</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>True if indexing is supported; otherwise, false.</p> </dd> + + + + + <p>Enables indexing of the {{JPEG}} for efficient random access.</p> + <p>This method enables efficient random-access to the image pixels at the expense of memory usage. The amount of memory required for indexing depends on the requested index granularity. Unless <strong>SetIndexing</strong> is called, it is much more efficient to access a {{JPEG}} by progressing through its pixels top-down during calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. +</p><p>This method will fail if indexing is unsupported on the file. <strong>{{IWICJpegFrameDecode::DoesSupportIndexing}}</strong> should be called to first determine whether indexing is supported. If this method is called multiple times, the final call changes the index granularity to the requested size. +</p><p>The provided interval size controls horizontal spacing of index entries. This value is internally rounded up according to the {{JPEG}}?s {{MCU}} (minimum coded unit) size, which is typically either 8 or 16 unscaled pixels. The vertical size of the index interval is always equal to one {{MCU}} size.</p><p> Indexes can be generated immediately, or during future calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong> to reduce redundant decompression work. </p> + <p>Returns {{S_OK}} upon successful completion.</p> + + + <dd> <p>A value specifying whether indexes should be generated immediately or deferred until a future call to <strong>{{IWICBitmapSource::CopyPixels}}</strong>.</p> </dd> + + + <dd> <p>The granularity of the indexing, in pixels.</p> </dd> + + + + + <p>Removes the indexing from a {{JPEG}} that has been indexed using <strong>{{IWICJpegFrameDecode::SetIndexing}}</strong>.</p> + <p>Returns {{S_OK}} upons successful completion.</p> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame ({{SOF}}) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves parameters from the Start Of Scan ({{SOS}}) marker for the scan with the specified index.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The index of the scan for which header data is retrieved.</p> </dd> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves a copy of the compressed {{JPEG}} scan directly from the {{WIC}} decoder frame's output stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The byte position in the scan data to begin copying. Use 0 on the first call. If the output buffer size is insufficient to store the entire scan, this offset allows you to resume copying from the end of the previous copy operation.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pbScanData</em> array.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>A reference that receives the size of the scan data actually copied into <em>pbScanData</em>. The size returned may be smaller that the size of <em>cbScanData</em>. This parameter may be {{NULL}}.</p> </dd> + + + + + + + + <p>Exposes methods for writing compressed {{JPEG}} scan data directly to the {{WIC}} encoder's output stream. Also provides access to the Huffman and quantization tables.</p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameEncoder}}</strong> interface for the {{JPEG}} encoder.</p><p>The {{WIC}} {{JPEG}} encoder supports a smaller subset of {{JPEG}} features than the decoder does.</p><ul> <li>The encoder is limited to a single scan. It does not support encoding images that are multi-scan, either for progressive encoding or planar component data.</li> <li>The encoder supports two quantization tables, two {{AC}} Huffman tables, and two {{DC}} Huffman tables. The luma tables are used for the Y channel and, in the case of {{YCCK}}, the black channel. The chroma tables are used for the CbCr channels. </li> <li>The encoder supports encoding gray, {{YCbCr}} ({{RGB}}), and {{YCCK}} ({{CMYK}}).</li> <li>The encoder supports 4 fixed compontent subsampling, 4:2:0, 4:2:2, 4:4:0, and 4:4:4. This subsamples chroma only.</li> <li>The encoder does not support restart markers.</li> </ul> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Writes scan data to a {{JPEG}} frame.</p> + <p><strong>WriteScan</strong> may be called multiple times. Each call appends the scan data specified to any previous scan data. Complete the scan by calling <strong>{{IWICBitmapFrameEncode::Commit}}</strong>. </p><p>Any calls to set encoder parameters or image metadata that will appear before the scan data in the resulting {{JPEG}} file must be completed before the first call to this method. This includes calls to <strong>{{IWICBitmapFrameEncode::SetColorContexts}}</strong> , <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, <strong>{{IWICBitmapFrameEncode::SetResolution}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetThumbnail}}</strong>. <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> is required as it has no default value for encoded image size. +</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The size of the data in the <em>pbScanData</em> parameter.</p> </dd> + + + <dd> <p>The scan data to write.</p> </dd> + + + + + + + + + + + + + + + + + <p>Obtains a <strong>{{IWICBitmapSource}}</strong> in the desired pixel format from a given <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If the <em>pISrc</em> bitmap is already in the desired format, <em>pISrc</em> is copied to the destination bitmap reference and a reference is added. If it is not in the desired format however, <strong>{{WICConvertBitmapSource}}</strong> will instantiate a <em>dstFormat</em> format converter and initialize it with <em>pISrc</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>The <strong>{{WICCreateBitmapFromSection}}</strong> function calls the <strong>{{WICCreateBitmapFromSectionEx}}</strong> function with the <em>desiredAccessLevel</em> parameter set to <strong>{{WICSectionAccessLevelRead}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains the short name associated with a given {{GUID}}.</p> + <p>Windows Imaging Component ({{WIC}}) short name mappings can be found within the following registry key: </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} to retrieve the short name for.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the short name associated with the {{GUID}}.</p> </dd> + + + <dd> <p>The actual size needed to retrieve the entire short name associated with the {{GUID}}.</p> </dd> + + + + + <p>Obtains the {{GUID}} associated with the given short name.</p> + <p>You can extend the short name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the short name.</p> </dd> + + + <dd> <p>A reference that receives the {{GUID}} associated with the given short name.</p> </dd> + + + + + <p>Obtains the name associated with a given schema.</p> + <p>You can extend the schema name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Schemas</strong> ????????????<strong>{{BB5ACC38}}-{{F216}}-4CEC-{{A6C5}}-5F6E739763A9</strong> ???????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The metadata format {{GUID}}.</p> </dd> + + + <dd> <p>The {{URI}} string of the schema for which the name is to be retrieved.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the schema's name.</p> <p>To obtain the required buffer size, call <strong>{{WICMapSchemaToName}}</strong> with <em>cchName</em> set to 0 and <em>wzName</em> set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the entire schema name.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Specifies how the Crop effect handles the crop rectangle falling on fractional pixel coordinates. </p> + + + + <p>Specifies the color channel the Displacement map effect extracts the intensity from and uses it to spatially displace the image in the X or Y direction.</p> + + + + <p> Speficies whether a flip and/or rotation operation should be performed by the Bitmap source effect </p> + + + + <p> Identifiers for properties of the Gaussian blur effect. </p> + + + + <p> The optimization mode for the Gaussian blur effect. </p> + + + + <p> Identifiers for properties of the Directional blur effect. </p> + + + + <p>Specifies the optimization mode for the Directional blur effect.</p> + + + + <p> Identifiers for properties of the Shadow effect. </p> + + + + <p>The level of performance optimization for the Shadow effect.</p> + + + + <p> Identifiers for properties of the Blend effect. </p> + + + + <p>The blend mode used for the Blend effect.</p> + + + + <p>Identifiers for properties of the Saturation effect.</p> + + + + <p>Identifiers for properties of the Hue rotate effect.</p> + + + + <p>Identifiers for the properties of the Color matrix effect.</p> + + + + <p>The alpha mode of the output of the Color matrix effect.</p> + + + + <p> Identifiers for properties of the Bitmap source effect. </p> + + + + <p>The interpolation mode used to scale the image in the Bitmap source effect. If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties. </p> + + + + <p>Specifies the alpha mode of the output of the Bitmap source effect.</p> + + + + <p> Identifiers for properties of the Composite effect. </p> + + + + <p> Identifiers for properties of the 3D transform effect. </p> + + + + <p> The interpolation mode the 3D transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for the properties of the 3D perspective transform effect. </p> + + + + <p> The interpolation mode the 3D perspective transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p>Identifiers for properties of the 2D affine transform effect.</p> + + + + <p>The interpolation mode to be used with the 2D affine transform effect to scale the image. There are 6 scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode uses more processing time than the nearest neighbor mode, but outputs a higher quality image.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the {{DPI}} compensation effect. </p> + + + + <p> The interpolation mode the {{DPI}} compensation effect uses to scale the image. </p> + + + + <p> Identifiers for properties of the Scale effect. </p> + + + + <p>The interpolation mode the Scale effect uses to scale the image. There are 6 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for properties of the Turbulence effect. </p> + + + + <p>The turbulence noise mode for the Turbulence effect. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function. </p> + + + + <p> Identifiers for properties of the Displacement map effect. </p> + + + + <p> Identifiers for the properties of the Color management effect. </p> + + + + <p> Indicates how the Color management effect should interpret alpha data that is contained in the input image. </p> + + + + <p>The quality level of the transform for the Color management effect. </p> + + + + <p>Specifies which {{ICC}} rendering intent the Color management effect should use.</p> + + + + <p> Identifiers for properties of the Histogram effect. </p> + + + + <p> Identifiers for properties of the Point-specular lighting effect. </p> + + + + <p>The interpolation mode the Point-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Spot-specular lighting effect. </p> + + + + <p>The interpolation mode the Spot-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Distant-specular lighting effect. </p> + + + + <p>The interpolation mode the Distant-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Point-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Point-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed</p> + + + + <p> Identifiers for properties of the Spot-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Spot-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for properties of the Distant-diffuse lighting effect.</p> + + + + <p>The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the Flood effect. </p> + + + + <p>Identifiers for properties of the Linear transfer effect.</p> + + + + <p> Identifiers for properties of the Gamma transfer effect. </p> + + + + <p> Identifiers for properties of the Table transfer effect. </p> + + + + <p>Identifiers for properties of the Discrete transfer effect.</p> + + + + <p>Identifiers for properties of the Convolve matrix effect.</p> + + + + <p>The interpolation mode the Convolve matrix effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for the properties of the Brightness effect.</p> + + + + <p> Identifiers for the properties of the Arithmetic composite effect. </p> + + + + <p>Identifiers for properties of the Crop effect.</p> + + + + <p>Identifiers for properties of the Border effect.</p> + + + + <p>The edge mode for the Border effect. </p> + + + + <p> Identifiers for properties of the Morphology effect. </p> + + + + <p> The mode for the Morphology effect. </p> + + + + <p> Identifiers for properties of the Tile effect. </p> + + + + <p> Identifiers for properties of the Atlas effect. </p> + + + + <p> Identifiers for properties of the Opacity metadata effect. </p> + + + + <p>Specifies the types of properties supported by the Direct2D property interface. </p> + + + + <dd> <p>An unknown property.</p> </dd> + + + <dd> <p>An arbitrary-length string.</p> </dd> + + + <dd> <p>A 32-bit integer value constrained to be either 0 or 1.</p> </dd> + + + <dd> <p>An unsigned 32-bit integer.</p> </dd> + + + <dd> <p>A signed 32-bit integer.</p> </dd> + + + <dd> <p>A 32-bit float.</p> </dd> + + + <dd> <p>Two 32-bit float values.</p> </dd> + + + <dd> <p> Three 32-bit float values.</p> </dd> + + + <dd> <p>Four 32-bit float values.</p> </dd> + + + <dd> <p>An arbitrary number of bytes.</p> </dd> + + + <dd> <p>A returned {{COM}} or nano-{{COM}} interface. </p> </dd> + + + <dd> <p>An enumeration. The value should be treated as a <strong>{{UINT32}}</strong> with a defined array of fields to specify the bindings to human-readable strings.</p> </dd> + + + <dd> <p>An enumeration. The value is the count of sub-properties in the array. The set of array elements will be contained in the sub-property.</p> </dd> + + + <dd> <p>A {{CLSID}}.</p> </dd> + + + <dd> <p>A 3x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x4 matrix of float values.</p> </dd> + + + <dd> <p>A 5x4 matrix of float values.</p> </dd> + + + <dd> <p>A nano-{{COM}} color context interface reference.</p> </dd> + + + + + <p>Specifies the indices of the system properties present on the <strong>{{ID2D1Properties}}</strong> interface for an <strong>{{ID2D1Effect}}</strong>.</p> + <p>Under normal circumstances the minimum and maximum number of inputs to the effect are the same. If the effect supports a variable number of inputs, the <strong>{{ID2D1Effect::SetNumberOfInputs}}</strong> method can be used to choose the number that the application will enable.</p> + + + + <p>Specifies the indices of the system sub-properties that may be present in any property.</p> + + + + <dd> <p>The name for the parent property.</p> </dd> + + + <dd> <p>A Boolean indicating whether the parent property is writeable.</p> </dd> + + + <dd> <p>The minimum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The maximum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The default value of the parent property.</p> </dd> + + + <dd> <p>An array of name/index pairs that indicate the possible values that can be set to the parent property.</p> </dd> + + + <dd> <p>An index sub-property used by the elements of the <strong>{{D2D1_SUBPROPERTY_FIELDS}}</strong> array.</p> </dd> + + + + + <p>Specifies how a bitmap can be used.</p> + <p><strong>{{D2D1_BITMAP_OPTIONS_NONE}}</strong> implies that none of the flags are set. This means that the bitmap can be used for drawing from, cannot be set as a target and cannot be read from by the {{CPU}}.</p><p><strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> means that the bitmap can be specified as a target in <strong>{{ID2D1DeviceContext::SetTarget}}</strong>. If you also specify the <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> flag the bitmap can be used a target but, it cannot be drawn from. Attempting to draw with a bitmap that has both flags set will result in the device context being put into an error state with <strong>{{D2DERR_BITMAP_CANNOT_DRAW}}</strong>. </p><p><strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> means that the bitmap can be mapped by using <strong>{{ID2D1Bitmap1::Map}}</strong>. This flag requires <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> and cannot be combined with any other flags. The bitmap must be updated with the <strong>CopyFromBitmap</strong> or <strong>CopyFromRenderTarget</strong> methods. </p><strong>Note</strong>??You should only use <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> is when the purpose of the bitmap is to be a target only or when the bitmap will be mapped .?<p><strong>{{D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE}}</strong> means that it is possible to get a {{DC}} associated with this bitmap. This must be used in conjunction with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>. The <strong>{{DXGI_FORMAT}}</strong> must be either <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>.</p> + + + <dd> <p>The bitmap is created with default properties.</p> </dd> + + + <dd> <p>The bitmap can be used as a device context target.</p> </dd> + + + <dd> <p>The bitmap cannot be used as an input. </p> </dd> + + + <dd> <p>The bitmap can be read from the {{CPU}}.</p> </dd> + + + <dd> <p>The bitmap works with <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong>.</p> <strong>Note</strong>??This flag is not available in Windows Store apps. ? </dd> + + + + + <p>Used to specify the blend mode for all of the Direct2D blending operations.</p> + <p>The figure here shows an example of each of the modes with images that have an opacity of 1.0 or 0.5. </p><p></p><p>There can be slightly different interpretations of these enumeration values depending on where the value is used.</p><ul> <li> <p>With a composite effect: +</p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong> with the inputs inverted.</li> <li> <p> As a parameter to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>: </p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is a no-op since the destination is already in the selected target.</li> </ul> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The destination is rendered over the source.</p> </dd> + + + <dd> <p>Performs a logical clip of the source pixels against the destination pixels.</p> </dd> + + + <dd> <p>The inverse of the <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong> operation.</p> </dd> + + + <dd> <p>This is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong>.</p> </dd> + + + <dd> <p>The is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_DESTINATION_IN}}</strong>.</p> </dd> + + + <dd> <p>Writes the source pixels over the destination where there are destination pixels.</p> </dd> + + + <dd> <p>The logical inverse of <strong>{{D2D1_COMPOSITE_MODE_SOURCE_ATOP}}</strong>.</p> </dd> + + + <dd> <p>The source is inverted with the destination.</p> </dd> + + + <dd> <p>The channel components are summed.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>Equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong>, but pixels outside of the source bounds are unchanged. +</p> </dd> + + + <dd> <p>Destination colors are inverted according to a source mask. +</p> </dd> + + + + + <p>Represents the bit depth of the imaging pipeline in Direct2D.</p> + <strong>Note</strong>?? Feature level 9 may or may not support precision types other than 8BPC.? + + + <dd> <p>The buffer precision is not specified.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer standard {{RGB}} data per channel.</p> </dd> + + + <dd> <p>Use 16-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 16-bit floats per channel.</p> </dd> + + + <dd> <p>Use 32-bit floats per channel.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits.</p> <p>Do not use this value.</p> </dd> + + + + + <p>Specifies how the memory to be mapped from the corresponding <strong>{{ID2D1Bitmap1}}</strong> should be treated.</p> + <p>The <strong>{{D2D1_MAP_OPTIONS_READ}}</strong> option can be used only if the bitmap was created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag.</p><p>These flags will be not be able to be used on bitmaps created by the <strong>{{ID2D1DeviceContext}}</strong>. However, the {{ID2D1SourceTransform}} will receive bitmaps for which these flags are valid.</p><p><strong>{{D2D1_MAP_OPTIONS_DISCARD}}</strong> can only be used with <strong>{{D2D1_MAP_OPTIONS_WRITE}}</strong>. Both of these options are only available through the effect author {{API}}, not through the Direct2D rendering {{API}}. +</p> + + + + <p>This is used to specify the quality of image scaling with <strong>{{ID2D1DeviceContext::DrawImage}}</strong> and with the 2D affine transform effect. </p> + + + + + <p>Specifies how units in Direct2D will be interpreted.</p> + <p>Setting the unit mode to <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong> is similar to setting the <strong>{{ID2D1DeviceContext}}</strong> dots per inch (dpi) to 96. However, Direct2D still checks the dpi to determine the threshold for enabling vertical antialiasing for text, and when the unit mode is restored, the dpi will be remembered.</p> + + + <dd> <p>Units will be interpreted as device-independent pixels (1/96").</p> </dd> + + + <dd> <p>Units will be interpreted as pixels.</p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>This specifies options that apply to the device context for its lifetime.</p> + + + + <dd> <p>The device context is created with default options.</p> </dd> + + + <dd> <p>Distribute rendering work across multiple threads. Refer to Improving the performance of Direct2D apps for additional notes on the use of this flag.</p> </dd> + + + + + <p>Defines how the world transform, dots per inch (dpi), and stroke width affect the shape of the pen used to stroke a primitive.</p> + <p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the stroke isn't affected by the world transform.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the application has the same behavior in Windows 7 and later.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}}</strong> the stroke is always 1 pixel wide.</p><p>Apart from the stroke, any value derived from the stroke width is not affected when the transformType is either fixed or hairline. This includes miters, line caps and so on.</p><p> It is important to distinguish between the geometry being stroked and the shape of the stroke pen. When {{D2D1_STROKE_TRANSFORM_TYPE_FIXED}} or {{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}} is specified, the geometry still respects the transform and dpi, but the pen that traces the geometry will not.</p><p>Here is an illustration of a stroke with dashing and a skew and stretch transform.</p><p>And here is an illustration of a fixed width stroke which does not get transformed.</p> + + + <dd> <p>The stroke respects the currently set world transform, the dpi, and the stroke width.</p> </dd> + + + <dd> <p>The stroke does not respect the world transform but it does respect the dpi and stroke width.</p> </dd> + + + <dd> <p>The stroke is forced to 1 pixel wide (in device space) and does not respect the world transform, the dpi, or the stroke width.</p> </dd> + + + + + <p>Used to specify the geometric blend mode for all Direct2D primitives. </p> + + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>The resulting pixel values use the minimum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + <dd> <p>The resulting pixel values are the sum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + + + <p>Specifies the threading mode used while simultaneously creating the device, factory, and device context. +</p> + + + <dd> <p>Resources may only be invoked serially. Device context state is not protected from multi-threaded access. </p> </dd> + + + <dd> <p>Resources may be invoked from multiple threads. Resources use interlocked reference counting and their state is protected. +</p> </dd> + + + + + <p>Defines how to interpolate between colors.</p> + + + <dd> <p>Colors are interpolated with straight alpha.</p> </dd> + + + <dd> <p>Colors are interpolated with premultiplied alpha.</p> </dd> + + + + + <p>Specifies how the layer contents should be prepared. +</p> + + + <dd> <p>Default layer behavior. A premultiplied layer target is pushed and its contents are cleared to transparent black. +</p> </dd> + + + <dd> <p> The layer is not cleared to transparent black.</p> </dd> + + + <dd> <p> The layer is always created as ignore alpha. All content rendered into the layer will be treated as opaque.</p> </dd> + + + + + <p>Defines when font resources should be subset during printing.</p> + + + <dd> <p>Uses a heuristic strategy to decide when to subset fonts. </p> <strong>Note</strong>??If the print driver has requested archive-optimized content, then Direct2D will subset fonts once, for the entire document. ? </dd> + + + <dd> <p>Subsets and embeds font resources in each page, then discards that font subset after the page is printed out. </p> </dd> + + + <dd> <p>Sends out the original font resources without subsetting along with the page that first uses the font, and re-uses the font resources for later pages without resending them. </p> </dd> + + + + + <p>This structure allows a <strong>{{ID2D1Bitmap1}}</strong> to be created with bitmap options and color context information available. +</p> + <p>If both <strong>dpiX</strong> and <strong>dpiY</strong> are 0, the dpi of the bitmap will be set to the desktop dpi if the device context is a windowed context, or 96 dpi for any other device context.</p> + + + + <p> Describes mapped memory from the <strong>{{ID2D1Bitmap1::Map}}</strong> {{API}}.</p> + <p>The mapped rectangle is used to map a rectangle into the caller's address space.</p> + + + + <p>Describes limitations to be applied to an imaging effect renderer.</p> + <p>The renderer can allocate tiles larger than the minimum tile allocation. The allocated tiles will be powers of two of the minimum size on each axis, except that the size on each axis will not exceed the guaranteed maximum texture size for the device feature level. </p><p>The <strong>minimumPixelRenderExtent</strong> is the size of the square tile below which the renderer will expand the tile allocation rather than attempting to subdivide the rendering tile any further. When this threshold is reached, the allocation tile size is expanded. This might occur repeatedly until rendering can either proceed or it is determined that the graph cannot be rendered.</p><p>The buffer precision is used for intermediate buffers if it is otherwise unspecified by the effects or the internal effect topology. The application can also use the <strong>Output.BufferPrecision</strong> method to specify the output precision for a particular effect. This takes precedence over the context precision. In addition, the effect might set a different precision internally if required. If the buffer type on the context is <strong>{{D2D1_BUFFER_PRECISION_UNKNOWN}}</strong> and otherwise not specified by the effect or transform, the precision of the output will be the maximum precision of the inputs to the transform. The buffer precision does not affect the number of channels used. </p> + + + <dd> <p>The buffer precision used by default if the buffer precision is not otherwise specified by the effect or the transform.</p> </dd> + + + <dd> <p>The tile allocation size to be used by the imaging effect renderer.</p> </dd> + + + + + <p>Describes features of an effect.</p> + <strong>Note</strong>??The caller should not rely heavily on the input rectangles returned by this structure. They can change due to subtle changes in effect implementations and due to optimization changes in the effect rendering system.? + + + <dd> <p>The effect whose input connection is being specified.</p> </dd> + + + <dd> <p>The input index of the effect that is being considered.</p> </dd> + + + <dd> <p>The amount of data that would be available on the input. This can be used to query this information when the data is not yet available. </p> </dd> + + + + + <p>Describes a point on a path geometry.</p> + + + + <dd> <p>The end point after walking the path.</p> </dd> + + + <dd> <p>A unit vector indicating the tangent point.</p> </dd> + + + <dd> <p>The index of the segment on which point resides. This index is global to the entire path, not just to a particular figure.</p> </dd> + + + <dd> <p>The index of the figure on which point resides.</p> </dd> + + + <dd> <p>The length of the section of the path stretching from the start of the path to the start of <strong>endSegment</strong>.</p> </dd> + + + + + <p>Describes image brush features.</p> + + + + <dd> <p>The source rectangle in the image space from which the image will be tiled or interpolated.</p> </dd> + + + <dd> <p>The extend mode in the image x-axis.</p> </dd> + + + <dd> <p>The extend mode in the image y-axis.</p> </dd> + + + <dd> <p>The interpolation mode to use when scaling the image brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p>Describes the stroke that outlines a shape.</p> + + + + <dd> <p>The cap to use at the start of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the end of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the start and end of each dash.</p> </dd> + + + <dd> <p>The line join to use.</p> </dd> + + + <dd> <p>The limit beyond which miters are either clamped or converted to bevels.</p> </dd> + + + <dd> <p>The type of dash to use.</p> </dd> + + + <dd> <p>The location of the first dash, relative to the start of the figure. </p> </dd> + + + <dd> <p>The rule that determines what render target properties affect the nib of the stroke.</p> </dd> + + + + + <p>Contains the content bounds, mask information, opacity settings, and other options for a layer resource.</p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p>Additional options for the layer creation.</p> </dd> + + + + + <p>Describes the drawing state of a device context.</p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>The blend mode for the device context to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>{{D2D1_UNIT_MODE}}</p> </dd> + + + + + <p>The creation properties for a <strong>{{ID2D1PrintControl}}</strong> object.</p> + + + + <p>Specifies the options with which the Direct2D device, factory, and device context are created. +</p> + <p>The root objects referred to here are the Direct2D device, Direct2D factory and the Direct2D device context. +</p> + + + + <p>Represents a color context that can be used with an <strong>{{ID2D1Bitmap1}}</strong> object.</p> + + + + <p>Gets the color space of the color context.</p> + <p>This method returns the color space of the contained {{ICC}} profile.</p> + + + + <p>Gets the size of the color profile associated with the bitmap. </p> + <p>This can be used to allocate a buffer to receive the color profile bytes associated with the context.</p> + <p>This method returns the size of the profile in bytes.</p> + + + + <p>Gets the color profile bytes for an <strong>{{ID2D1ColorContext}}</strong>. </p> + <p>If <em>profileSize</em> is insufficient to store the entire profile, <em>profile</em> is zero-initialized before this method fails.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_BUFFER}}</td><td>The supplied buffer was too small to accomodate the data.</td></tr> </table><p>?</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1PrintControl}}</strong> object that converts Direct2D primitives stored in <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + <strong>Note</strong>??This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation?factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_FAIL}}</td><td>Generic failure code.</td></tr> <tr><td>{{D2DERR_PRINT_FORMAT_NOT_SUPPORTED}}</td><td>The print format is not supported by the document target.</td></tr> </table><p>?</p> + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <strong>Note</strong>??Direct2D may exceed the maximum texture memory you set with this method for a single frame if necessary to render the frame.? + <p>This method does not return a value.</p> + + + <dd> <p>The new maximum texture memory in bytes.</p> </dd> + + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <p>The maximum amount of texture memory in bytes.</p> + + + + <p>Clears all of the rendering resources used by Direct2D. </p> + <p> If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Discards only resources that haven't been used for greater than the specified time in milliseconds. The default is 0 milliseconds.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Sets the given input image by index. </p> + <p>If the input index is out of range, the input image is ignored. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The index of the image to set.</p> </dd> + + + <dd> <p>The input image to set.</p> </dd> + + + <dd> <p>Whether to invalidate the graph at the location of the effect input</p> </dd> + + + + + <p>Allows the application to change the number of inputs to an effect.</p> + <p>Most effects do not support a variable number of inputs. Use <strong>{{ID2D1Properties::GetValue}}</strong> with the <strong>{{D2D1_PROPERTY_MIN_INPUTS}}</strong> and <strong>{{D2D1_PROPERTY_MAX_INPUTS}}</strong> values to determine the number of inputs supported by an effect.</p><p>If the input count is less than the minimum or more than the maximum supported inputs, the call will fail.</p><p>If the input count is unchanged, the call will succeed with <strong>{{S_OK}}</strong>. </p><p>Any inputs currently selected on the effect will be unaltered by this call unless the number of inputs is made smaller. If the number of inputs is made smaller, inputs beyond the selected range will be released.</p><p>If the method fails, the existing input and input count will remain unchanged.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the effect.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Gets the number of inputs to the effect. </p> + + <p>This method returns the number of inputs to the effect. </p> + + + + <p>Gets the output image from the effect. </p> + <p>The output image can be set as an input to another effect, or can be directly passed into the <strong>{{ID2D1DeviceContext}}</strong> in order to render the effect. </p><p>It is also possible to use <strong>QueryInterface</strong> to retrieve the same output image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the output image for the effect.</p> </dd> + + + + + <p>A developer implemented interface that allows a metafile to be replayed.</p> + + + + <p> This method is called once for each record stored in a metafile.</p> + <p>Return true if the record is successfully.</p> + + + <dd> <p>The type of the record.</p> </dd> + + + <dd> <p>The data for the record.</p> </dd> + + + <dd> <p>The byte size of the record data.</p> </dd> + + + + + <p>A Direct2D resource that wraps a {{WMF}}, {{EMF}}, or {{EMF}}+ metafile.</p> + + + + <p>This method streams the contents of the command to the given metafile sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The sink into which Direct2D will call back.</p> </dd> + + + + + <p> Gets the bounds of the metafile, in device-independent pixels ({{DIPs}}), as reported in the metafile?s header.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p> </p><p>The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as {{XPS}} when some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.</p> + <p>The <strong>{{ID2D1CommandSink}}</strong> can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The <strong>{{ID2D1CommandSink}}</strong> interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the <strong>{{ID2D1CommandList}}</strong> was created and will be passed in to the <strong>{{ID2D1CommandSink}}</strong> implementation. </p><p>Not all methods implemented by <strong>{{ID2D1DeviceContext}}</strong> are present.</p> + + + + <p>Notifies the implementation of the command sink that drawing is about to commence.</p> + <p> This method always returns <strong>{{S_OK}}</strong>. </p> + + + + <p>Indicates when <strong>{{ID2D1CommandSink}}</strong> processing has completed.</p> + <p>The <strong>{{HRESULT}}</strong> active at the end of the command list will be returned.</p><p> It allows the calling function or method to indicate a failure back to the stream implementation.</p> + <p>If the method/function succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the antialiasing mode that will be used to render any subsequent geometry.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode selected for the command list.</p> </dd> + + + + + <p>Sets the tags that correspond to the tags in the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The first tag to associate with the primitive.</p> </dd> + + + <dd> <p>The second tag to associate with the primitive.</p> </dd> + + + + + <p>Indicates the new default antialiasing mode for text.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode for the text.</p> </dd> + + + + + <p>Indicates more detailed text rendering parameters.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters to use for text rendering.</p> </dd> + + + + + <p>Sets a new transform.</p> + <p>The transform will be applied to the corresponding device context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The transform to be set.</p> </dd> + + + + + <p>Sets a new primitive blend mode.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>The unit mode changes the meaning of subsequent units from device-independent pixels ({{DIPs}}) to pixels or the other way. The command sink does not record a {{DPI}}, this is implied by the playback context or other playback interface such as <strong>{{ID2D1PrintControl}}</strong>.</p> + <p>The unit mode changes the interpretation of units from {{DIPs}} to pixels or vice versa.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>The clear color is restricted by the currently selected clip and layer bounds.</p><p>If no color is specified, the color should be interpreted by context. Examples include but are not limited to:</p><ul> <li>Transparent black for a premultiplied bitmap target.</li> <li>Opaque black for an ignore bitmap target.</li> <li>Containing no content (or white) for a printer page.</li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The color to which the command sink should be cleared.</p> </dd> + + + + + <p>Indicates the glyphs to be drawn.</p> + <p> <strong>DrawText</strong> and <strong>DrawTextLayout</strong> are broken down into glyph runs and rectangles by the time the command sink is processed. So, these methods aren't available on the command sink. Since the application may require additional callback processing when calling <strong>DrawTextLayout</strong>, this semantic can't be easily preserved in the command list.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The upper left corner of the baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Additional non-rendering information about the glyphs.</p> </dd> + + + <dd> <p>The brush used to fill the glyphs.</p> </dd> + + + <dd> <p>The measuring mode to apply to the glyphs.</p> </dd> + + + + + <p>Draws a line drawn between two points.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The start point of the line.</p> </dd> + + + <dd> <p>The end point of the line.</p> </dd> + + + <dd> <p>The brush used to fill the line.</p> </dd> + + + <dd> <p>The width of the stroke to fill the line.</p> </dd> + + + <dd> <p>The style of the stroke. If not specified, the stroke is solid.</p> </dd> + + + + + <p>Indicates the geometry to be drawn to the command sink.</p> + <p> <strong>Ellipses</strong> and <strong>rounded rectangles</strong> are converted to the corresponding ellipse and rounded rectangle geometries before calling into the <strong>DrawGeometry</strong> method. +</p> + <p>An {{HRESULT}}. </p> + + + <dd> <p>The geometry to be stroked.</p> </dd> + + + <dd> <p>The brush that will be used to fill the stroked geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a rectangle.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to be drawn to the command sink.</p> </dd> + + + <dd> <p>The brush used to stroke the geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The <em>destinationRectangle</em> parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If you specify {{NULL}}, then the destination rectangle is (left=0, top=0, right = width(<em>sourceRectangle</em>), bottom = height(<em>sourceRectangle</em>). </p><p>The <em>sourceRectangle</em> defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> clips this rectangle to the size of the source bitmap, so it's impossible to sample outside of the bitmap. If you specify {{NULL}}, then the source rectangle is taken to be the size of the source bitmap. </p><p>The <em>perspectiveTransform</em> is specified in addition to the transform on device context. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Draws the provided image to the command sink. </p> + <p>Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The image to be drawn to the command sink.</p> </dd> + + + <dd> <p>This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin.</p> </dd> + + + <dd> <p>The corresponding rectangle in the image space will be mapped to the provided origins when processing the image.</p> </dd> + + + <dd> <p>The interpolation mode to use to scale the image if necessary. +</p> </dd> + + + <dd> <p>If specified, the composite mode that will be applied to the limits of the currently selected clip.</p> </dd> + + + + + <p>Draw a metafile to the device context.</p> + <p>The <em>targetOffset</em> defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image is rendered to the corresponding destination. If you don't specify the offset, the destination origin will be (0, 0). The top, left corner of the image will be mapped to the target offset. This will not necessarily be the origin. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Indicates a mesh to be filled by the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The mesh object to be filled.</p> </dd> + + + <dd> <p>The brush with which to fill the mesh.</p> </dd> + + + + + <p>Fills an opacity mask on the command sink.</p> + <p>The opacity mask bitmap must be considered to be clamped on each axis.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The bitmap whose alpha channel will be sampled to define the opacity mask.</p> </dd> + + + <dd> <p>The brush with which to fill the mask.</p> </dd> + + + <dd> <p>The destination rectangle in which to fill the mask. If not specified, this is the origin.</p> </dd> + + + <dd> <p>The source rectangle within the opacity mask. If not specified, this is the entire mask.</p> </dd> + + + + + <p>Indicates to the command sink a geometry to be filled.</p> + <p>If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.</p><p>Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to <strong>FillGeometry</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The geometry that should be filled.</p> </dd> + + + <dd> <p>The primary brush used to fill the geometry.</p> </dd> + + + <dd> <p>A brush whose alpha channel is used to modify the opacity of the primary fill brush. </p> </dd> + + + + + <p>Indicates to the command sink a rectangle to be filled.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to fill.</p> </dd> + + + <dd> <p>The brush with which to fill the rectangle.</p> </dd> + + + + + <p>Pushes a clipping rectangle onto the clip and layer stack.</p> + <p>If the current world transform is not preserving the axis, <em>clipRectangle</em> is transformed and the bounds of the transformed rectangle are used instead.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle that defines the clip.</p> </dd> + + + <dd> <p>The antialias mode for the clip.</p> </dd> + + + + + <p>Pushes a layer onto the clip and layer stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters that define the layer.</p> </dd> + + + <dd> <p>The layer resource that receives subsequent drawing operations.</p> </dd> + + + + + <p>Removes an axis-aligned clip from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Removes a layer from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Represents a sequence of commands that can be recorded and played back.</p> + <p>The command list does not include static copies of resources with the recorded set of commands. All bitmaps, effects, and geometries are stored as references to the actual resource and all the brushes are stored by value. All the resource creation and destruction happens outside of the command list. The following table lists resources and how they are treated inside of a command list.</p><table> <tr><th>Resource</th><th>How it is treated by the command list</th></tr> <tr><td>Solid-color brush</td><td>Passed by value.</td></tr> <tr><td>Bitmap brush</td><td>The brush is passed by value but the bitmap that is used to create the brush is in fact referenced.</td></tr> <tr><td>Gradient brushes ? both linear and radial gradient</td><td>The brush is passed by value but the gradient stop collection itself is referenced. The gradient stop collection object is immutable. </td></tr> <tr><td>Bitmaps</td><td>Passed by reference.</td></tr> <tr><td>Drawing state block</td><td>The actual state on the device context is converted into set functions like set transform and is passed by value.</td></tr> <tr><td>Geometry</td><td>Immutable object passed by value.</td></tr> <tr><td>Stroke style</td><td>Immutable object passed by value.</td></tr> <tr><td>Mesh</td><td>Immutable object passed by value.</td></tr> </table><p>?</p> + + + + <p>Streams the contents of the command list to the specified command sink. </p> + <p>The command sink can be implemented by any caller of the {{API}}.</p><p>If the caller makes any design-time failure calls while a command list is selected as a target, the command list is placed in an error state. The stream call fails without making any calls to the passed in sink.</p><p>Sample use:</p><pre>Class MyCommandSink : public {{ID2D1CommandSink}} +{ +public: // All of the {{ID2D1CommandSink}} methods implemented here. +}; {{HRESULT}} +StreamToMyCommandSink( __in {{ID2D1CommandList}} *pCommandList ) +{ {{HRESULT}} hr = {{S_OK}}; MyCommandSink *pCommandSink = new MyCommandSink(); hr = pCommandSink ? {{S_OK}} : {{E_OUTOFMEMORY}}; if ({{SUCCEEDED}}(hr)) { // Receive the contents of the command sink streamed to the sink. hr = pCommandList-&gt;Stream(pCommandSink); } SafeRelease(&amp;pCommandSink); return hr; }</pre> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p><p>The return value indicates any failures the command sink implementation returns through its <strong>EndDraw</strong> method.</p> + + + <dd> <p>The sink into which the command list will be streamed.</p> </dd> + + + + + <p>Instructs the command list to stop accepting commands so that you can use it as an input to an effect or in a call to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>. You should call the method after it has been attached to an <strong>{{ID2D1DeviceContext}}</strong> and written to but before the command list is used.</p> + <p>This method returns {{D2DERR_WRONG_STATE}} if it has already been called on the command list. If an error occurred on the device context during population, the method returns that error. Otherwise, the method returns {{S_OK}}. </p><p>If the <strong>Close</strong> method returns an error, any future use of the command list results in the same error.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}} </td><td>Close has already been called on the command list.</td></tr> </table><p>?</p><p> </p><strong>Note</strong>??If the device context associated with the command list has an error, the command list returns the same error.? + + + + <p>Converts Direct2D primitives stored in an <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + + + + <p>Converts Direct2D primitives in the passed-in command list into a fixed page representation for use by the print subsystem. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + <dd> <p>The command list that contains the rendering operations.</p> </dd> + + + <dd> <p>The size of the page to add.</p> </dd> + + + <dd> <p>The print ticket stream.</p> </dd> + + + <dd> <p>Contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter.</p> </dd> + + + <dd> <p>Contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter. +</p> </dd> + + + + + <p>Passes all remaining resources to the print sub-system, then clean up and close the current print job. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + + <p>Represents a brush based on an <strong>{{ID2D1Image}}</strong>.</p> + + + + <p>Sets the image associated with the provided image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The image to be associated with the image brush.</p> </dd> + + + + + <p>Sets how the content inside the source rectangle in the image brush will be extended on the x-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the x-axis of the image.</p> </dd> + + + + + <p>Sets the extend mode on the y-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the y-axis of the image.</p> </dd> + + + + + <p>Sets the interpolation mode for the image brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>How the contents of the image will be interpolated to handle the brush transform.</p> </dd> + + + + + <p>Sets the source rectangle in the image brush.</p> + <p>The top left corner of the <em>sourceRectangle</em> parameter maps to the brush space origin. That is, if the brush and world transforms are both identity, the portion of the image in the top left corner of the source rectangle will be rendered at (0,0) in the render target.</p><p>The source rectangle will be expanded differently depending on whether the input image is based on pixels (a bitmap or effect) or by a command list. </p><ul> <li>If the input image is a bitmap or an effect, the rectangle will be expanded to encapsulate a full input pixel before being additionally down-scaled to ensure that the projected rectangle will be correct in the final scene-space.</li> <li>If the input image is a command list, the command list will be slightly expanded to encapsulate a full input pixel. +</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>The source rectangle that defines the portion of the image to tile.</p> </dd> + + + + + <p>Gets the image associated with the image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, contains the address of a reference to the image associated with this brush. </p> </dd> + + + + + <p>Gets the extend mode of the image brush on the x-axis.</p> + + <p>This method returns the x-extend mode.</p> + + + + <p>Gets the extend mode of the image brush on the y-axis of the image.</p> + + <p>This method returns the y-extend mode.</p> + + + + <p>Gets the interpolation mode of the image brush.</p> + <p>This method returns the interpolation mode.</p> + + + + <p>Gets the rectangle that will be used as the bounds of the image when drawn as an image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of the output source rectangle.</p> </dd> + + + + + <p>Paints an area with a bitmap. </p> + + + + <p>Sets the interpolation mode for the brush.</p> + <strong>Note</strong>??If <em>interpolationMode</em> is not a valid member of {{D2D1_INTERPOLATION_MODE}}, then this method silently ignores the call.? + + + <dd> <p>The mode to use.</p> </dd> + + + + + <p>Returns the current interpolation mode of the brush.</p> + <p>The current interpolation mode.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + <p>This interface adds functionality to <strong>{{ID2D1StrokeStyle}}</strong>.</p> + + + + <p>Gets the stroke transform type.</p> + <p>This method returns the stroke transform type.</p> + + + + <p>The <strong>{{ID2D1PathGeometry1}}</strong> interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>. In particular, it provides the path geometry-specific <strong>ComputePointAndSegmentAtLength</strong> method.</p> + <p>This interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>.</p> + + + + <p> Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One of the inputs was in an invalid range.</td></tr> </table><p>?</p> + + + <dd> <p>The distance to walk along the path.</p> </dd> + + + <dd> <p>The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.</p> </dd> + + + <dd> <p>The transform to apply to the path prior to walking.</p> </dd> + + + <dd> <p>The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a description of the point that can be found at the given location.</p> </dd> + + + + + <p>Represents a set of run-time bindable and discoverable properties that allow a data-driven application to modify the state of a Direct2D effect.</p> + <p>This interface supports access through either indices or property names. In addition to top-level properties, each property in an <strong>{{ID2D1Properties}}</strong> object may contain an <strong>{{ID2D1Properties}}</strong> object, which stores metadata describing the parent property. </p> + + + + <p>Gets the number of top-level properties. </p> + <p>This method returns the number of custom properties on the <strong>{{ID2D1Properties}}</strong> interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.</p> + <p>This method returns the number of custom (non-system) properties that can be accessed by the object.</p> + + + + Gets the property name that corresponds to the given index. + + + + <p>Gets the number of characters for the given property name. This is a template overload. See Remarks.</p> + <p>The value returned by this method can be used to ensure that the buffer size for <strong>GetPropertyName</strong> is appropriate. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetPropertyNameLength( U index ) {{CONST}}; + <p>This method returns the size in characters of the name corresponding to the given property index, or zero if the property index does not exist. </p> + + + <dd> <p>The index of the property name to retrieve.</p> </dd> + + + + + <p>Gets the <strong>{{D2D1_PROPERTY_TYPE}}</strong> of the selected property. </p> + <p>If the property does not exist, the method returns <strong>{{D2D1_PROPERTY_TYPE_UNKNOWN}}</strong>.</p> + <p>This method returns a <strong>{{D2D1_PROPERTY_TYPE}}</strong>-typed value for the type of the selected property.</p> + + + + <p>Gets the index corresponding to the given property name. </p> + <p> If the property does not exist, this method returns <strong>{{D2D1_INVALID_PROPERTY_INDEX}}</strong>. This reserved value will never map to a valid index and will cause <strong>{{NULL}}</strong> or sentinel values to be returned from other parts of the property interface.</p> + <p>The index of the corresponding property name.</p> + + + <dd> <p>The name of the property to retrieve.</p> </dd> + + + + + Sets the named property to the given value. + + + + <p>Sets the corresponding property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; {{HRESULT}} SetValue( U index, _In_ const T &amp;value ); + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INVALID_PROPERTY}}</td><td>The specified property does not exist.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> <tr><td>{{D3DERR_OUT_OF_VIDEO_MEMORY}}</td><td>Failed to allocate required video memory.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_FAIL}}</td><td>Unspecified failure.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the property to set.</p> </dd> + + + <dd> <p>The data to set.</p> </dd> + + + + + <p>Gets the property value by name. This is a template overload. See Remarks.</p> + <p>If <em>propertyName</em> does not exist, no information is retrieved.</p><p>Any error not in the standard set returned by a property implementation will be mapped into the standard error range.</p><p> </p>template&lt;typename T&gt; T GetValueByName( _In_ {{PCWSTR}} propertyName ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The property name to get.</p> </dd> + + + + + <p>Gets the value of the property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; T GetValue( U index ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The index of the property from which the value is to be obtained.</p> </dd> + + + + + <p>Gets the size of the property value in bytes, using the property index. This is a template overload. See Remarks.</p> + <p>This method returns zero if <em>index</em> does not exist. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetValueSize( U index ) {{CONST}}; + <p>This method returns size of the value in bytes, using the property index </p> + + + <dd> <p>The index of the property.</p> </dd> + + + + + <p>Gets the sub-properties of the provided property by index. This is a template overload. See Remarks. </p> + <p> If there are no sub-properties, <em>subProperties</em> will be <strong>{{NULL}}</strong>, and <strong>{{D2DERR_NO_SUBPROPERTIES}}</strong> will be returned. </p><p> </p>template&lt;typename U&gt; {{HRESULT}} GetSubProperties( U index, _Outptr_opt_ {{ID2D1Properties}} **subProperties ) {{CONST}}; + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_NO_SUBPROPERTIES}}</td><td>The specified property does not exist.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the sub-properties to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the sub-properties.</p> </dd> + + + + + <p> Represents a bitmap that can be used as a surface for an <strong>{{ID2D1DeviceContext}}</strong> or mapped into system memory, and can contain additional color context information.</p> + + + + + <p>Gets the color context information associated with the bitmap. </p> + <p>If the bitmap was created without specifying a color context, the returned context is <strong>{{NULL}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the color context interface associated with the bitmap.</p> </dd> + + + + + <p>Gets the options used in creating the bitmap.</p> + + <p>This method returns the options used.</p> + + + + <p>Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created. </p> + <p>The bitmap used must have been created from a {{DXGI}} surface render target, a derived render target, or a device context created from an <strong>{{ID2D1Device}}</strong>.</p><p>The returned surface can be used with Microsoft Direct3D or any other {{API}} that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through <strong>{{ID2D1Factory::CreateDxgiSurfaceRenderTarget}}</strong> or on a device context created on the same device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_BITMAP_BOUND_AS_TARGET}}</td><td>Cannot draw with a bitmap that is currently bound as the target bitmap.</td></tr> </table><p>?</p> + + + <dd> <p>The underlying {{DXGI}} surface for the bitmap.</p> </dd> + + + + + <p>Maps the given bitmap into memory.</p> + <strong>Note</strong>??You can't use bitmaps for some purposes while mapped. Particularly, the <strong>{{ID2D1Bitmap::CopyFromBitmap}}</strong> method doesn't work if either the source or destination bitmap is mapped.?<p>The bitmap must have been created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>The options used in mapping the bitmap into memory.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the rectangle that is mapped into memory.</p> </dd> + + + + + <p>Unmaps the bitmap from memory. </p> + <p>Any memory returned from the <strong>Map</strong> call is now invalid and may be reclaimed by the operating system or used for other purposes. </p><p>The bitmap must have been previously mapped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid.</td></tr> <tr><td>{{E_POINTER}}</td><td>Pointer is not valid.</td></tr> </table><p>?</p> + + + + <p>Represents a collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes. It provides get methods for all the new parameters added to the gradient stop collection.</p> + + + + + <p>Copies the gradient stops from the collection into memory.</p> + <p>If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong>, this method returns the same values specified in the creation method. If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, the stops returned here will first be transformed into the gamma space specified by the <em>colorInterpolationGamma</em> parameter. See the <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong> method for more info about color space and gamma space.</p><p>If <em>gradientStopsCount</em> is less than the number of gradient stops in the collection, the remaining gradient stops are omitted. If <em>gradientStopsCount</em> is larger than the number of gradient stops in the collection, the extra gradient stops are set to <strong>{{NULL}}</strong>. To obtain the number of gradient stops in the collection, use the <strong>GetGradientStopCount</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a one-dimensional array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> </dd> + + + <dd> <p>The number of gradient stops to copy. </p> </dd> + + + + + <p>Gets the color space of the input colors as well as the space in which gradient stops are interpolated.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns the color space related to the color interpolation gamma. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the color space after interpolation has occurred.</p> + <p>If you create using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns <strong>{{D2D1_COLOR_SPACE_SRGB}}</strong>. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the precision of the gradient buffer.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns {{D2D1_BUFFER_PRECISION_8BPC_UNORM}}. </p> + <p>The buffer precision of the gradient buffer.</p> + + + + <p>Retrieves the color interpolation mode that the gradient stop collection uses.</p> + <p>The color interpolation mode.</p> + + + + <p>Implementation of a drawing state block that adds the functionality of primitive blend in addition to already existing antialias mode, transform, tags and text rendering mode.</p><strong>Note</strong>??You can get an <strong>{{ID2D1DrawingStateBlock1}}</strong> using the <strong>{{ID2D1Factory::CreateDrawingStateBlock}}</strong> method or you can use the QueryInterface method on an <strong>{{ID2D1DrawingStateBlock}}</strong> object.? + + + + <p>Gets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Sets the <strong>{{D2D1_DRAWING_STATE_DESCRIPTION1}}</strong> associated with this drawing state block.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Creates a bitmap that can be used as a target surface, for reading back to the {{CPU}}, or as a source for the <strong>DrawBitmap</strong> and <strong>{{ID2D1BitmapBrush}}</strong> {{APIs}}. In addition, color context information can be passed to the bitmap.</p> + <p>The new bitmap can be used as a target for <strong>SetTarget</strong> if it is created with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a Direct2D bitmap by copying a {{WIC}} bitmap.</p> + <p>Starting with Windows?8.1, the <em>bitmapProperties</em> parameter is optional. When it is not specified, the created bitmap inherits the pixel format and alpha mode from <em>wicBitmapSource</em>. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.</p><p>When the <em>bitmapProperties</em> parameter is specified, the value in <em>bitmapProperties-&gt;pixelFormat</em> must either be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> or must match the {{WIC}} pixel format in <em>wicBitmapSource</em>.</p><p>When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong>, the newly created bitmap inherits the alpha mode from <em>wicBitmapSource</em>. When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>, <strong>{{D2D1_ALPHA_MODE_STRAIGHT}}</strong>, or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, this forces the newly created bitmap to use the specified alpha mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{WIC}} bitmap source to copy from.</p> </dd> + + + <dd> <p>A bitmap properties structure that specifies bitmap creation options.</p> </dd> + + + <dd> <p>The address of the newly created bitmap object.</p> </dd> + + + + + <p>Creates a color context.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap.</p><p>When <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>, <em>profile</em> and <em>profileSize</em> must be specified. Otherwise, these parameters should be set to <strong>{{NULL}}</strong> and zero respectively. When the space is {{D2D1_COLOR_SPACE_CUSTOM}}, the model field of the profile header is inspected to determine if this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space remains custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>Filename</em>.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p> Creates a bitmap from a {{DXGI}} surface that can be set as a target surface or have additional color context information specified.</p> + <p>If the bitmap properties are not specified, the following information is assumed: </p><ul> <li>The bitmap {{DPI}} is 96.</li> <li>The pixel format matches that of the surface.</li> <li>The returned bitmap will inherit the bind flags of the {{DXGI}} surface.<ul> <li>However, only the subset of flags meaningful to Direct2D will be inherited. For example, {{D3D10_USAGE_DYNAMIC}} is not compatible with any public Direct2D flags.</li> </ul> </li> <li>The color context is unknown.</li> <li>The alpha mode of the bitmap will be premultiplied (common case) or straight ({{A8}}). +</li> </ul><p>If the bitmap properties are specified, the bitmap properties will be used as follows:</p><ul> <li>The bitmap {{DPI}} will be specified by the bitmap properties.</li> <li>If both dpiX and dpiY are 0, the bitmap {{DPI}} will be 96.</li> <li>The pixel format must be compatible with the shader resource view or render target view of the surface.</li> <li>The bitmap options must be compatible with the bind flags of the {{DXGI}} surface. However, they may be a subset. This will influence what resource views are created by the bitmap.</li> <li>The color context information will be used from the bitmap properties, if specified.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface from which the bitmap can be created. </p> <strong>Note</strong>??The {{DXGI}} surface must have been created from the same Direct3D device that the Direct2D device context is associated with. + ? </dd> + + + <dd> <p>The bitmap properties specified in addition to the surface. </p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new bitmap object.</p> </dd> + + + + + <p>Creates an effect for the specified class {{ID}}. </p> + <p> If the created effect is a custom effect that is implemented in a {{DLL}}, this doesn't increment the reference count for that {{DLL}}. If the application deletes an effect while that effect is loaded, the resulting behavior is unpredictable. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}} </td><td>The effect requires capabilities not supported by the {{D2D}} device.</td></tr> </table><p>?</p> + + + <dd> <p>The class {{ID}} of the effect to create. See Built-in Effects for a list of effect {{IDs}}.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new effect.</p> </dd> + + + + + <p>Creates a gradient stop collection, enabling the gradient to contain color channels with values outside of [0,1] and also enabling rendering to a high-color render target with interpolation in sRGB space.</p> + <p>This method linearly interpolates between the color stops. An optional color space conversion is applied post-interpolation. Whether and how this gamma conversion is applied is determined by the pre- and post-interpolation. This method will fail if the device context does not support the requested buffer precision.</p><p>In order to get the desired result, you need to ensure that the inputs are specified in the correct color space. +</p><p>You must always specify colors in straight alpha, regardless of interpolation mode being premultiplied or straight. The interpolation mode only affects the interpolated values. Likewise, the stops returned by <strong>{{ID2D1GradientStopCollection::GetGradientStops}}</strong> will always have straight alpha. </p><p>If you specify <strong>{{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}}</strong>, then all stops are premultiplied before interpolation, and then un-premultiplied before color conversion. +</p><p>Starting with Windows?8, the interpolation behavior of this method has changed. </p><p>The table here shows the behavior in Windows?7 and earlier.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>1.0</td><td>Clamps the inputs and then converts from sRGB to scRGB.</td><td>Converts from scRGB to sRGB post-interpolation.</td><td>1.0</td></tr> <tr><td>2.2</td><td>Clamps the inputs.</td><td>No Operation</td><td>2.2</td></tr> </table><p>?</p><p>The table here shows the behavior in Windows?8 and later.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>sRGB to scRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>1.0</td></tr> <tr><td>scRGB to sRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>2.2</td></tr> <tr><td>sRGB to sRGB</td><td>No Operation</td><td>No Operation</td><td>2.2</td></tr> <tr><td>scRGB to scRGB</td><td>No Operation</td><td>No Operation</td><td>1.0</td></tr> </table><p>?</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>An array of color values and offsets.</p> </dd> + + + <dd> <p>The number of elements in the <em>gradientStops</em> array.</p> </dd> + + + <dd> <p>Specifies both the input color space and the space in which the color interpolation occurs.</p> </dd> + + + <dd> <p>The color space that colors will be converted to after interpolation occurs.</p> </dd> + + + <dd> <p>The precision of the texture used to hold interpolated values.</p> <strong>Note</strong>??This method will fail if the underlying Direct3D device does not support the requested buffer precision. Use <strong>{{ID2D1DeviceContext::IsBufferPrecisionSupported}}</strong> to determine what is supported. + ? </dd> + + + <dd> <p>Defines how colors outside of the range defined by the stop collection are determined.</p> </dd> + + + <dd> <p>Defines how colors are interpolated. {{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}} is the default, see Remarks for more info.</p> </dd> + + + <dd> <p>The new gradient stop collection.</p> </dd> + + + + + <p>Creates an image brush. The input image can be any type of image, including a bitmap, effect, or a command list. +</p> + <p>The image brush can be used to fill an arbitrary geometry, an opacity mask or text.</p><p>This sample illustrates drawing a rectangle with an image brush.</p><pre>{{HRESULT}} +CreatePatternBrush( __in {{ID2D1DeviceContext}} *pDeviceContext, __deref_out {{ID2D1ImageBrush}} **ppImageBrush ) +{ {{HRESULT}} hr = {{S_OK}}; {{ID2D1Image}} *pOldTarget = {{NULL}}; pDeviceContext-&gt;GetTarget(&amp;pOldTarget); {{ID2D1CommandList}} *pCommandList = {{NULL}}; hr = pDeviceContext-&gt;CreateCommandList(&amp;pCommandList); if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;SetTarget(pCommandList); hr = RenderPatternToCommandList(pDeviceContext); } pDeviceContext-&gt;SetTarget(pOldTarget); {{ID2D1ImageBrush}} *pImageBrush = {{NULL}}; if ({{SUCCEEDED}}(hr)) { hr = pDeviceContext-&gt;CreateImageBrush( pCommandList, {{D2D1::ImageBrushProperties}}( {{D2D1::RectF}}(198, 298, 370, 470), {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_INTERPOLATION_MODE_LINEAR}} ), &amp;pImageBrush ); } // Fill a rectangle with the image brush. if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;FillRectangle( {{D2D1::RectF}}(0, 0, 100, 100), pImageBrush); } SafeRelease(&amp;pImageBrush); SafeRelease(&amp;pCommandList); SafeRelease(&amp;pOldTarget); return hr; +}</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The image to be used as a source for the image brush.</p> </dd> + + + <dd> <p>The properties specific to an image brush.</p> </dd> + + + <dd> <p>Properties common to all brushes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the input rectangles.</p> </dd> + + + + + <p>Creates a bitmap brush, the input image is a Direct2D bitmap object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The bitmap to use as the brush.</p> </dd> + + + <dd> <p>A bitmap brush properties structure.</p> </dd> + + + <dd> <p>A brush properties structure.</p> </dd> + + + <dd> <p>The address of the newly created bitmap brush object.</p> </dd> + + + + + <p>Creates a <strong>{{ID2D1CommandList}}</strong> object.</p> + <p>A <strong>{{ID2D1CommandList}}</strong> can store Direct2D commands to be displayed later through <strong>{{ID2D1DeviceContext::DrawImage}}</strong> or through an image brush.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Indicates whether the format is supported by the device context. The formats supported are usually determined by the underlying hardware.</p> + <p>You can use supported formats in the <strong>{{D2D1_PIXEL_FORMAT}}</strong> structure to create bitmaps and render targets. Direct2D doesn't support all {{DXGI}} formats, even though they may have some level of Direct3D support by the hardware. +</p> + <p>Returns {{TRUE}} if the format is supported. Returns {{FALSE}} if the format is not supported.</p> + + + <dd> <p>The {{DXGI}} format to check.</p> </dd> + + + + + <p>Indicates whether the buffer precision is supported by the underlying Direct3D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Gets the bounds of an image without the world transform of the context applied.</p> + <p>The image bounds don't include multiplication by the world transform. They do reflect the current {{DPI}}, unit mode, and interpolation mode of the context. To get the bounds that include the world transform, use <strong>{{ID2D1DeviceContext::GetImageWorldBounds}}</strong>.</p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with a target offset of (0,0) and an identity world transform matrix. They do not reflect the current clip rectangle set on the device context or the extent of the context's current target image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}) and in local space.</p> </dd> + + + + + <p>Gets the bounds of an image with the world transform of the context applied.</p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. To get bounds which don't include the world transform, use <strong>{{ID2D1DeviceContext::GetImageLocalBounds}}</strong>. </p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with the same image and a target offset of (0,0). They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target image. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p> Gets the world-space bounds in {{DIPs}} of the glyph run using the device context {{DPI}}. </p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyph run to render.</p> </dd> + + + <dd> <p>The DirectWrite measuring mode that indicates how glyph metrics are used to measure text when it is formatted.</p> </dd> + + + <dd> <p>The bounds of the glyph run in {{DIPs}} and in world space.</p> </dd> + + + + + <p>Gets the device associated with a device context.</p> + <p>The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an <strong>{{ID2D1DeviceContext}}</strong> interface and then call <strong>GetDevice</strong>. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an <strong>{{ID2D1Device}}</strong> object.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a Direct2D device associated with this device context.</p> </dd> + + + + + <p>The bitmap or command list to which the Direct2D device context will now render.</p> + <p>The target can be changed at any time, including while the context is drawing.</p><p>The target can be either a bitmap created with the <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> flag, or it can be a command list. Other kinds of images cannot be set as a target. For example, you cannot set the output of an effect as target. If the target is not valid the context will enter the <strong>{{D2DERR_INVALID_TARGET}} </strong>error state.</p><p>You cannot use <strong>SetTarget</strong> to render to a bitmap/command list from multiple device contexts simultaneously. An image is considered ?being rendered to? if it has ever been set on a device context within a <strong>BeginDraw</strong>/<strong>EndDraw</strong> timespan. If an attempt is made to render to an image through multiple device contexts, all subsequent device contexts after the first will enter an error state. </p><p>Callers wishing to attach an image to a second device context should first call <strong>EndDraw</strong> on the first device context. +</p><p>Here is an example of the correct calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC1-&gt;SetTarget(pImage); +// ? +pDC1-&gt;EndDraw(); pDC2-&gt;BeginDraw(); +pDC2-&gt;SetTarget(pImage); +// ? +pDC2-&gt;EndDraw(); +</pre><p>Here is an example of the incorrect calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC2-&gt;BeginDraw(); pDC1-&gt;SetTarget(pImage); // ... pDC1-&gt;SetTarget({{NULL}}); pDC2-&gt;SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1. // ... pDC1-&gt;EndDraw(); // This EndDraw {{SUCCEEDs}}. +pDC2-&gt;EndDraw(); // This EndDraw {{FAILs}} </pre><strong>Note</strong>??Changing the target does not change the bitmap that an {{HWND}} render target presents from, nor does it change the bitmap that a {{DC}} render target blts to/from.?<p>This {{API}} makes it easy for an application to use a bitmap as a source (like in <strong>DrawBitmap</strong>) and as a destination at the same time. Attempting to use a bitmap as a source on the same device context to which it is bound as a target will put the device context into the {{D2DERR_BITMAP_BOUND_AS_TARGET}} error state.</p><p>It is acceptable to have a bitmap bound as a target bitmap on multiple render targets at once. Applications that do this must properly synchronize rendering with <strong>Flush</strong> or <strong>EndDraw</strong>.</p><p>You can change the target at any time, including while the context is drawing.</p><p>You can set the target to {{NULL}}, in which case drawing calls will put the device context into an error state with {{D2DERR_WRONG_STATE}}. Calling <strong>SetTarget</strong> with a {{NULL}} target does not restore the original target bitmap to the device context.</p><p>If the device context has an outstanding {{HDC}}, the context will enter the <strong>{{D2DERR_WRONG_STATE}}</strong> error state. The target will not be changed.</p><p>If the bitmap and the device context are not in the same resource domain, the context will enter <strong>\</strong> error state. The target will not be changed.</p><p> <strong>{{ID2D1RenderTarget::GetPixelSize}}</strong> returns the size of the current target bitmap (or 0, 0) if there is no bitmap bound). +<strong>{{ID2D1RenderTarget::GetSize}}</strong> returns the pixel size of the current bitmap scaled by the {{DPI}} of the render target. +<strong>SetTarget</strong> does not affect the {{DPI}} of the render target. +</p><p> <strong>{{ID2D1RenderTarget::GetPixelFormat}}</strong> returns the pixel format of the current target bitmap (or <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong> if there is none).</p><p> <strong>{{ID2D1Bitmap::CopyFromRenderTarget}}</strong> copies from the currently bound target bitmap.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the target currently associated with the device context.</p> + <p>If a target is not associated with the device context, <em>target</em> will contain <strong>{{NULL}}</strong> when the methods returns.</p><p>If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:</p><ul> <li> <strong>CreateHwndRenderTarget</strong> </li> <li> <strong>CreateDxgiSurfaceRenderTarget</strong> </li> <li> <strong>CreateWicBitmapRenderTarget</strong> </li> <li> <strong>CreateDCRenderTarget</strong> </li> <li> <strong>CreateCompatibleRenderTarget</strong> </li> </ul><p>It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for <strong>{{ID2D1RenderTarget}}</strong> methods.</p><p> <strong>CreateDxgiSurfaceRenderTarget</strong> will create a bitmap that is usable as a bitmap source if the {{DXGI}} surface is bindable as a shader resource view.</p><p> <strong>CreateCompatibleRenderTarget</strong> will always create bitmaps that are usable as a bitmap source.</p><p> <strong>{{ID2D1RenderTarget::BeginDraw}}</strong> will copy from the {{HDC}} to the original bitmap associated with it. <strong>{{ID2D1RenderTarget::EndDraw}}</strong> will copy from the original bitmap to the {{HDC}}. </p><p> <strong>{{IWICBitmap}}</strong> objects will be locked in the following circumstances:</p><ul> <li>BeginDraw has been called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>{{IWICBitmap}} objects will be unlocked in the following circumstances:</p><ul> <li>EndDraw is called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>Direct2D will only lock bitmaps that are not currently locked.</p><p>Calling <strong>QueryInterface</strong> for <strong>{{ID2D1GdiInteropRenderTarget}}</strong> will always succeed. <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the {{GDI_COMPATIBLE}} flag set.</p><p> <strong>{{ID2D1HwndRenderTarget::Resize}}</strong> will return <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if there are any outstanding references to the original target bitmap associated with the render target.</p><p>Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the target currently associated with the device context.</p> </dd> + + + + + <p>Sets the rendering controls for the given device context. </p> + <p> The rendering controls allow the application to tune the precision, performance, and resource usage of rendering operations.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The rendering controls to be applied.</p> </dd> + + + + + <p>Gets the rendering controls that have been applied to the context.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the rendering controls for this context.</p> </dd> + + + + + <p>Changes the primitive blend mode that is used for all rendering operations in the device context.</p> + <p>The primitive blend will apply to all of the primitive drawn on the context, unless this is overridden with the <em>compositeMode</em> parameter on the <strong>DrawImage</strong> {{API}}.</p><p> The primitive blend applies to the interior of any primitives drawn on the context. In the case of <strong>DrawImage</strong>, this will be implied by the image rectangle, offset and world transform.</p><p>If the primitive blend is anything other than <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong> then ClearType rendering will be turned off. If the application explicitly forces ClearType rendering in these modes, the drawing context will be placed in an error state. {{D2DERR_WRONG_STATE}} will be returned from either <strong>EndDraw</strong> or <strong>Flush</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The primitive blend to use.</p> </dd> + + + + + <p>Returns the currently set primitive blend used by the device context. </p> + + <p>The current primitive blend. The default value is <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong>.</p> + + + + <p>Specifies parameters used during view instancing configuration.</p> + <p>View instancing is declared in a {{PSO}} using this structure. The view instance count is set in the {{PSO}} to allow whole-pipeline optimization based on the number of views.</p><p>View instancing is disabled when it's not declared in the {{PSO}} or when ViewInstanceCount is set to 0. When disabled, rendering behaves as if view instancing is enabled and ViewInstanceCount is set to 1; shaders only see a value of 0 in {{SV_ViewID}} and just one view instance is produced. This allows shaders that are aware of view instancing to still be used in {{PSOs}} that disable it. Some adapters might support shader model 6.1 (which exposes {{SV_ViewID}}) but not view instancing; these adapters must still support shaders that input {{SV_ViewID}} in {{PSOs}} that declare ViewInstanceCount as 0 or 1.</p><p>The shader prior to rasterization can output {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values which don't have to depend on {{SV_ViewID}}. To compute the final effective index of the viewport and render target where primitives will be sent, these values, when present, are added to the ViewportArrayIndex and RenderTargetArrayIndex values of the view instance locations declared in the {{PSO}}. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in the {{PSO}} to a single value (such as 0) to act as a uniform base index to which the dynamically-selected {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values are added.</p> + + + <dd> <p> Specifies the number of views to be used, up to {{D3D12_MAX_VIEW_INSTANCE_COUNT}}. </p> </dd> + + + <dd> <p> The address of a memory location that contains <strong>ViewInstanceCount</strong> view instance location structures that specify the location of viewport/scissor and render target details of each view instance. </p> </dd> + + + <dd> <p> Configures view instancing with additional options. </p> </dd> + + + + + <p>Sets what units will be used to interpret values passed into the device context.</p><p></p> + <p> This method will affect all properties and parameters affected by <strong>SetDpi</strong> and <strong>GetDpi</strong>. This affects all coordinates, lengths, and other properties that are not explicitly defined as being in another unit. For example:</p><ul> <li><strong>SetUnitMode</strong> will affect a coordinate passed into <strong>{{ID2D1DeviceContext::DrawLine}}</strong>, and the scaling of a geometry passed into <strong>{{ID2D1DeviceContext::FillGeometry}}</strong>. </li> <li><strong>SetUnitMode</strong> will not affect the value returned by <strong>{{ID2D1Bitmap::GetPixelSize}}</strong>. </li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>An enumeration defining how passed-in units will be interpreted by the device context.</p> </dd> + + + + + <p>Gets the mode that is being used to interpret values by the device context.</p> + + <p>The unit mode.</p> + + + + <p>Draws a series of glyphs to the device context.</p> + <p>The <em>glyphRunDescription</em> is ignored when rendering, but can be useful for printing and serialization of rendering commands, such as to an {{XPS}} or {{SVG}} file. This extends <strong>{{ID2D1RenderTarget::DrawGlyphRun}}</strong>, which lacked the glyph run description.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Origin of first glyph in the series.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Supplementary glyph series information.</p> </dd> + + + <dd> <p>The brush that defines the text color.</p> </dd> + + + <dd> <p>The measuring mode of the glyph series, used to determine the advances and offsets. The default value is {{DWRITE_MEASURING_MODE_NATURAL}}.</p> </dd> + + + + + <p></p><p>A command list cannot reference effects which are part of effect graphs that consume the command list.</p> + + + + <p>Draw a metafile to the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If {{NULL}} is specified, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle)). </p><p>The <em>sourceRectangle</em> parameter defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> will clip this rectangle to the size of the source bitmap, thus making it impossible to sample outside of the bitmap. If {{NULL}} is specified, then the source rectangle is taken to be the size of the source bitmap. </p><p>If you specify <em>perspectiveTransform</em> it is applied to the rect in addition to the transform set on the render target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Push a layer onto the clip and layer stack of the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The parameters that defines the layer.</p> </dd> + + + <dd> <p>The layer resource to push on the device context that receives subsequent drawing operations. </p> <strong>Note</strong>??If a layer is not specified, Direct2D manages the layer resource automatically. ? </dd> + + + + + <p>This indicates that a portion of an effect's input is invalid. This method can be called many times.</p><p>You can use this method to propagate invalid rectangles through an effect graph. You can query Direct2D using the <strong>GetEffectInvalidRectangles</strong> method.</p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can also use this method to invalidate caches that have accumulated while rendering effects that have the <strong>{{D2D1_PROPERTY_CACHED}}</strong> property set to true.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Gets the number of invalid output rectangles that have accumulated on the effect. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to count the invalid rectangles on.</p> </dd> + + + <dd> <p>The returned rectangle count.</p> </dd> + + + + + <p>Gets the invalid rectangles that have accumulated since the last time the effect was drawn and <strong>EndDraw</strong> was then called on the device context.</p> + <p> </p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can use the <strong>InvalidateEffectInputRectangle</strong> method to specify invalidated rectangles for Direct2D to propagate through an effect graph.</p><p>If multiple invalid rectangles are requested, the rectangles that this method returns may overlap. When this is the case, the rectangle count might be lower than the count that <strong>GetEffectInvalidRectangleCount</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Returns the input rectangles that are required to be supplied by the caller to produce the given output rectangle. </p> + <p>The caller should be very careful not to place a reliance on the required input rectangles returned. Small changes for correctness to an effect's behavior can result in different rectangles being returned. In addition, different kinds of optimization applied inside the render can also influence the result. </p> + <p> A failure code, this will typically only be because an effect in the chain returned some error. </p> + + + <dd> <p>The image whose output is being rendered.</p> </dd> + + + <dd> <p>The portion of the output image whose inputs are being inspected.</p> </dd> + + + <dd> <p> A list of the inputs whos rectangles are being queried. </p> </dd> + + + <dd> <p>The input rectangles returned to the caller.</p> </dd> + + + <dd> <p>The number of inputs.</p> </dd> + + + + + <p>Fill using the alpha channel of the supplied opacity mask bitmap. The brush opacity will be modulated by the mask. The render target antialiasing mode must be set to aliased.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap that acts as the opacity mask</p> </dd> + + + <dd> <p>The brush to use for filling the primitive.</p> </dd> + + + <dd> <p>The destination rectangle to output to in the render target</p> </dd> + + + <dd> <p>The source rectangle from the opacity mask bitmap.</p> </dd> + + + + + <p> Creates Direct2D resources. </p> + <p> The <strong>{{ID2D1Factory1}}</strong> interface is used to create devices, register and unregister effects, and enumerate effects properties. Effects are registered and unregistered globally. The registration {{APIs}} are placed on this interface for convenience. </p> + + + + <p>Creates a <strong>{{ID2D1Device}}</strong> object.</p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a <strong>{{ID2D1StrokeStyle1}}</strong> object.</p> + <p>It is valid to specify a dash array only if {{D2D1_DASH_STYLE_CUSTOM}} is also specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Creates an <strong>{{ID2D1PathGeometry1}}</strong> object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Creates a new drawing state block, this can be used in subsequent SaveDrawingState and RestoreDrawingState operations on the render target. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The drawing state description structure.</p> </dd> + + + <dd> <p>The address of the newly created drawing state block.</p> </dd> + + + + + <p>Creates a new <strong>{{ID2D1GdiMetafile}}</strong> object that you can use to replay metafile content. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a stream.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p> <strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory, derived device, and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a string.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p><strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory and derived device and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Unregisters an effect within the factory instance that corresponds to the <em>classId</em> provided. </p> + <p>In order for the effect to be fully unloaded, you must call <strong>UnregisterEffect</strong> the same number of times that you have registered the effect.</p><p>The <strong>UnregisterEffect</strong> method unregisters only those effects that are registered on the same factory. It cannot be used to unregister a built-in effect.</p> + <p>{{D2DERR_EFFECT_IS_NOT_REGISTERED}} if the effect is not registered, {{S_OK}} otherwise.</p> + + + <dd> <p>The identifier of the effect to be unregistered.</p> </dd> + + + + + <p>Returns the class {{IDs}} of the currently registered effects and global effects on this factory.</p> + <p>The set of class {{IDs}} will be atomically returned by the {{API}}. The set will not be interrupted by other threads registering or unregistering effects.</p><p>If <em>effectsRegistered</em> is larger than <em>effectCount</em>, the supplied array will still be filled to capacity with the current set of registered effects. This method returns the {{CLSIDs}} for all global effects and all effects registered to this factory.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</td><td><em>effectsRegistered</em> is larger than <em>effectCount</em>.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains an array of effects. <strong>{{NULL}}</strong> if no effects are retrieved.</p> </dd> + + + <dd> <p>The capacity of the <em>effects</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects copied into <em>effects</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects currently registered in the system.</p> </dd> + + + + + <p>Retrieves the properties of an effect.</p> + <p>The returned effect properties will have all the mutable properties for the effect set to a default of <strong>{{NULL}}</strong>, or an empty value. </p><ul> <li>Value types will be zero-filled.</li> <li>Blob and string types will be zero-length.</li> <li>Array types will have length 1 and the element of the array will conform to the previous rules.</li> </ul><p>This method cannot be used to return the properties for any effect not visible to <strong>{{ID2D1DeviceContext::CreateEffect}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The requested effect could not be found.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The {{ID}} of the effect to retrieve properties from.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the property interface that can be used to query the metadata of the effect.</p> </dd> + + + + + <p> A locking mechanism from a Direct2D factory that Direct2D uses to control exclusive resource access in an app that is uses multiple threads. </p> + <p> You can get an <strong>{{ID2D1Multithread}}</strong> object by querying for it from an <strong>{{ID2D1Factory}}</strong> object. </p><p> You should use this lock while doing any operation on a Direct3D/{{DXGI}} surface. Direct2D will wait on any call until you leave the critical section. </p><strong>Note</strong>?? Normal rendering is guarded automatically by an internal Direct2D lock.? + + + + <p> Returns whether the Direct2D factory was created with the <strong>{{D2D1_FACTORY_TYPE_MULTI_THREADED}}</strong> flag. </p> + <p>Returns true if the Direct2D factory was created as multi-threaded, or false if it was created as single-threaded.</p> + + + + <p>Enters the Direct2D {{API}} critical section, if it exists. </p> + <p>This method does not return a value.</p> + + + + <p>Leaves the Direct2D {{API}} critical section, if it exists.</p> + <p>This method does not return a value.</p> + + + + <p>Creates a new Direct2D device associated with the provided {{DXGI}} device. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>If the creation properties are not specified, then <em>d2dDevice</em> will inherit its threading mode from <em>dxgiDevice</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} device the Direct2D device is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device.</p> </dd> + + + + + <p>Creates a new Direct2D device context associated with a {{DXGI}} surface. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>This function will also create a new <strong>{{ID2D1Device}}</strong> that can be retrieved through <strong>{{ID2D1DeviceContext::GetDevice}}</strong>.</p><p>The {{DXGI}} device will be specified implicitly through <em>dxgiSurface</em>.</p><p>If <em>creationProperties</em> are not specified, the Direct2D device will inherit its threading mode from the {{DXGI}} device implied by <em>dxgiSurface</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface the Direct2D device context is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device context.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device context.</p> </dd> + + + + + <p>Converts the given color from one colorspace to another.</p> + <p>The converted color.</p> + + + <dd> <p>The source color space.</p> </dd> + + + <dd> <p>The destination color space.</p> </dd> + + + <dd> <p>The source color.</p> </dd> + + + + + <p>Returns the sine and cosine of an angle.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The angle to calculate.</p> </dd> + + + <dd> <p>The sine of the angle.</p> </dd> + + + <dd> <p>The cosine of the angle.</p> </dd> + + + + + <p>Returns the tangent of an angle.</p> + <p>The tangent of the angle.</p> + + + <dd> <p>The angle to calculate the tangent for.</p> </dd> + + + + + <p>Returns the length of a 3 dimensional vector.</p> + <p>The length of the vector.</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + + <dd> <p>There were no changes.</p> </dd> + + + <dd> <p>The properties of the effect changed.</p> </dd> + + + <dd> <p>The context state changed.</p> </dd> + + + <dd> <p>The effect?s transform graph has changed. This happens only when an effect supports a variable input count.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + <dd> <p>The logical equivalent of having no flags set.</p> </dd> + + + <dd> <p>If this flag is set, the renderer assumes that the vertex shader will cover the entire region of interest with vertices and need not clear the destination render target. If this flag is not set, the renderer assumes that the vertices do not cover the entire region interest and must clear the render target to transparent black first.</p> </dd> + + + <dd> <p>The renderer will use a depth buffer when rendering custom vertices. The depth buffer will be used for calculating occlusion information. This can result in the renderer output being draw-order dependent if it contains transparency.</p> </dd> + + + <dd> <p>Indicates that custom vertices do not overlap each other.</p> </dd> + + + + + <p>Indicates whether the vertex buffer changes infrequently or frequently.</p> + <p>If a dynamic vertex buffer is created, Direct2D will not necessarily map the buffer directly to a Direct3D vertex buffer. Instead, a system memory copy can be copied to the rendering engine vertex buffer as the effects are rendered.</p> + + + <dd> <p>The created vertex buffer is updated infrequently.</p> </dd> + + + <dd> <p>The created vertex buffer is changed frequently.</p> </dd> + + + + + <p>Specifies the blend operation on two color sources.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND_OP}}</strong>.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Specifies how one of the color sources is to be derived and optionally specifies a preblend operation on the color source.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND}}</strong>.</p> + + + <dd> <p>The data source is black (0, 0, 0, 0). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is white (1, 1, 1, 1). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from the second input of the blend transform. There is not a preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from second input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from second input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the second input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data from the second input of the blend transform. The preblend operation clamps the data to 1 or less.</p> </dd> + + + <dd> <p>The data source is the blend factor. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is the blend factor. The preblend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + + + <p>Allows a caller to control the channel depth of a stage in the rendering pipeline.</p> + + + <dd> <p>The channel depth is the default. It is inherited from the inputs.</p> </dd> + + + <dd> <p>The channel depth is 1.</p> </dd> + + + <dd> <p>The channel depth is 4.</p> </dd> + + + + + <p>Represents filtering modes that a transform may select to use on input textures.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D11_FILTER}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + + + <p>Defines capabilities of the underlying Direct3D device which may be queried using <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + + <p>Defines a property binding to a pair of functions which get and set the corresponding property. </p> + <p>The <strong>propertyName</strong> is used to cross-correlate the property binding with the registration {{XML}}. The <strong>propertyName</strong> must be present in the {{XML}} call or the registration will fail. All properties must be bound.</p> + + + <dd> <p> The name of the property.</p> </dd> + + + <dd> <p> The function that will receive the data to set.</p> </dd> + + + <dd> <p>The function that will be asked to write the output data.</p> </dd> + + + + + <p>Defines a resource texture when the original resource texture is created.</p> + + + + <dd> <p>The extents of the resource table in each dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must be a number from 1 to 3.</p> </dd> + + + <dd> <p>The precision of the resource texture to create. </p> </dd> + + + <dd> <p>The number of channels in the resource texture.</p> </dd> + + + <dd> <p>The filtering mode to use on the texture.</p> </dd> + + + <dd> <p>Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>Defines the properties of a vertex buffer that are standard for all vertex shader definitions.</p> + <p>If <strong>usage</strong> is dynamic, the system might return a system memory buffer and copy these vertices into the rendering vertex buffer for each element.</p><p>If the initialization data is not specified, the buffer will be uninitialized.</p> + + + <dd> <p>The number of inputs to the vertex shader.</p> </dd> + + + <dd> <p>Indicates how frequently the vertex buffer is likely to be updated.</p> </dd> + + + <dd> <p>The initial contents of the vertex buffer.</p> </dd> + + + <dd> <p>The size of the vertex buffer, in bytes.</p> </dd> + + + + + <p>Defines a vertex shader and the input element description to define the input layout. The combination is used to allow a custom vertex effect to create a custom vertex shader and pass it a custom layout.</p> + <p>The vertex shader will be loaded by the <strong>CreateVertexBuffer</strong> call that accepts the vertex buffer properties.</p><p>This structure does not need to be specified if one of the standard vertex shaders is used.</p> + + + <dd> <p>The unique {{ID}} of the vertex shader.</p> </dd> + + + <dd> <p>An array of input assembler stage data types.</p> </dd> + + + <dd> <p>The number of input elements in the vertex shader.</p> </dd> + + + <dd> <p>The vertex stride.</p> </dd> + + + + + <p>Defines a range of vertices that are used when rendering less than the full contents of a vertex buffer.</p> + + + + <dd> <p>The first vertex in the range to process.</p> </dd> + + + <dd> <p>The number of vertices to use.</p> </dd> + + + + + <p>Defines a blend description to be used in a particular blend transform.</p> + <p>This description closely matches the <strong>{{D3D11_BLEND_DESC}}</strong> struct with some omissions and the addition of the blend factor in the description.</p> + + + <dd> <p>Specifies the first {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies the second {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies how to combine the {{RGB}} data sources.</p> </dd> + + + <dd> <p>Specifies the first alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies the second alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies how to combine the alpha data sources.</p> </dd> + + + <dd> <p>Parameters to the blend operations. The blend must use <strong>{{D2D1_BLEND_BLEND_FACTOR}}</strong> for this to be used.</p> </dd> + + + + + <p>Describes the options that transforms may set on input textures.</p> + + + + <dd> <p>The type of filter to apply to the input texture.</p> </dd> + + + <dd> <p>The mip level to retrieve from the upstream transform, if specified.</p> </dd> + + + + + <p>Describes the support for doubles in shaders.</p> + <p>Fill this structure by passing a {{D2D1_FEATURE_DOUBLES}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>{{TRUE}} is doubles are supported within the shaders.</p> </dd> + + + + + <p>Describes compute shader support, which is an option on {{D3D10}} feature level.</p> + <p>You can fill this structure by passing a {{D2D1_}} {{FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>Shader model 4 compute shaders are supported.</p> </dd> + + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + <p>This interface is passed to an effect implementation through the <strong>{{ID2D1EffectImpl::Initialize}}</strong> method. In order to prevent applications casually gaining access to this interface, and to separate reference counts between the public and private interfaces, it is not possible to call <strong>QueryInterface</strong> between the <strong>{{ID2D1DeviceContext}}</strong> and the <strong>{{ID2D1EffectContext}}</strong>.</p><p>Each call to <strong>{{ID2D1Effect::Initialize}}</strong> will be provided a different <strong>{{ID2D1EffectContext}}</strong> interface. This interface tracks resource allocations for the effect. When the effect is released, the corresponding allocations will also be released.</p> + + + + <p>Gets the unit mapping that an effect will use for properties that could be in either dots per inch (dpi) or pixels.</p> + <p> If the <strong>{{D2D1_UNIT_MODE}}</strong> is <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong>, both <em>dpiX</em> and <em>dpiY</em> will be set to 96.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The dpi on the x-axis.</p> </dd> + + + <dd> <p>The dpi on the y-axis.</p> </dd> + + + + + <p> Creates a Direct2D effect for the specified class {{ID}}. This is the same as <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> so custom effects can create other effects and wrap them in a transform. </p> + <p>The created effect does not reference count the {{DLL}} from which the effect was created. If the caller unregisters an effect while this effect is loaded, the resulting behavior is unpredictable.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> </table><p>?</p> + + + + <p>This indicates the maximum feature level from the provided list which is supported by the device. If none of the provided levels are supported, then this {{API}} fails with {{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}</td><td>None of the provided levels are supported.</td></tr> </table><p>?</p> + + + <dd> <p>The feature levels provided by the application.</p> </dd> + + + <dd> <p>The count of feature levels provided by the application</p> </dd> + + + <dd> <p>The maximum feature level from the <em>featureLevels</em> list which is supported by the {{D2D}} device. +</p> </dd> + + + + + <p>Wraps an effect graph into a single transform node and then inserted into a transform graph. This allows an effect to aggregate other effects. This will typically be done in order to allow the effect properties to be re-expressed with a different contract, or to allow different components to integrate each-other?s effects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to be wrapped in a transform node.</p> </dd> + + + <dd> <p>The returned transform node that encapsulates the effect graph.</p> </dd> + + + + + <p>This creates a blend transform that can be inserted into a transform graph. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the blend transform.</p> </dd> + + + <dd> <p>Describes the blend transform that is to be created.</p> </dd> + + + <dd> <p>The returned blend transform.</p> </dd> + + + + + <p>Creates a transform that extends its input infinitely in every direction based on the passed in extend mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The extend mode in the X-axis direction.</p> </dd> + + + <dd> <p>The extend mode in the Y-axis direction.</p> </dd> + + + <dd> <p>The returned transform.</p> </dd> + + + + + <p>Creates and returns an offset transform.</p> + <p>An offset transform is used to offset an input bitmap without having to insert a rendering pass. An offset transform is automatically inserted by an Affine transform if the transform evaluates to a pixel-aligned transform.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The offset amount.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to an offset transform object.</p> </dd> + + + + + <p>Creates and returns a bounds adjustment transform.</p> + <p>A support transform can be used for two different reasons.</p><ul> <li>To indicate that a region of its input image is already transparent black. This can increase efficiency for rendering bitmaps. <strong>Note</strong>??If the indicated region does {{NOT}} contain only transparent black pixels, then rendering results are undefined. ? </li> <li>To increase the size of the input image. The expanded area will be treated as transparent black +</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The initial output rectangle for the bounds adjustment transform.</p> </dd> + + + <dd> <p>The returned bounds adjustment transform.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>This tests to see if the given shader is loaded.</p> + <p>Whether the shader is loaded.</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + + + <p>Creates or finds the given resource texture, depending on whether a resource id is specified. It also optionally initializes the texture with the specified data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>An optional reference to the unique id that identifies the lookup table.</p> </dd> + + + <dd> <p>The properties used to create the resource texture.</p> </dd> + + + <dd> <p>The optional data to be loaded into the resource texture. +</p> </dd> + + + <dd> <p>An optional reference to the stride to advance through the resource texture, according to dimension.</p> </dd> + + + <dd> <p>The size, in bytes, of the data.</p> </dd> + + + <dd> <p>The returned texture that can be used as a resource in a Direct2D effect.</p> </dd> + + + + + <p>Finds the given resource texture if it has already been created with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested resource texture was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a vertex buffer or finds a standard vertex buffer and optionally initializes it with vertices. The returned buffer can be specified in the render info to specify both a vertex shader and or to pass custom vertices to the standard vertex shader used by Direct2D. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>This finds the given vertex buffer if it has already been created with <strong>{{ID2D1EffectContext::CreateVertexBuffer}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested vertex buffer was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a color context from a color space. </p><p>If the color space is Custom, the context is initialized from the <em>profile</em> and <em>profileSize</em> parameters.</p><p>If the color space is not Custom, the context is initialized with the profile bytes associated with the color space. The <em>profile</em> and <em>profileSize</em> parameters are ignored.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>filename</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>This indicates whether an optional capability is supported by the {{D3D}} device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The feature to query support for.</p> </dd> + + + <dd> <p>A structure indicating information about how or if the feature is supported.</p> </dd> + + + <dd> <p>The size of the <em>featureSupportData</em> parameter.</p> </dd> + + + + + <p> Indicates whether the buffer precision is supported by the underlying Direct2D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Describes a node in a transform topology.</p> + <p>Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.</p> + + + + <p>Gets the number of inputs to the transform node.</p> + + <p>This method returns the number of inputs to this transform node.</p> + + + + <p>Defines a mappable single-dimensional vertex buffer.</p> + + + + + <p>Maps the provided data into user memory.</p> + <p> If <em>data</em> is larger than <em>bufferSize</em>, this method fails. </p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains the address of a reference to the available buffer.</p> </dd> + + + <dd> <p>The desired size of the buffer.</p> </dd> + + + + + <p>Unmaps the vertex buffer.</p> + <p>After this method returns, the mapped memory from the vertex buffer is no longer accessible by the effect.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}}</td><td>The object was not in the correct state to process the method.</td></tr> </table><p>?</p> + + + + <p>Tracks a transform-created resource texture.</p> + + + + + <p>Updates the specific resource texture inside the specific range or box using the supplied data.</p> + <p>The number of dimensions in the update must match those of the created texture.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td> {{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The "left" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The "right" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The stride to advance through the input data, according to dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must match the number used to load the texture.</p> </dd> + + + <dd> <p>The data to be placed into the resource texture.</p> </dd> + + + <dd> <p>The size of the data buffer to be used to update the resource texture.</p> </dd> + + + + + <p>Describes the render information common to all of the various transform implementations.</p> + <p>This interface is used by a transform implementation to first describe and then indicate changes to the rendering pass that corresponds to the transform.</p> + + + + <p>Sets how a specific input to the transform should be handled by the renderer in terms of sampling.</p> + <p>The input description must be matched correctly by the effect shader code.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input that will have the input description applied.</p> </dd> + + + <dd> <p>The description of the input to be applied to the transform.</p> </dd> + + + + + <p>Allows a caller to control the output precision and channel-depth of the transform in which the render information is encapsulated.</p> + <p> If the output precision of the transform is not specified, then it will default to the precision specified on the Direct2D device context. The maximum of 16bpc <strong>{{UNORM}}</strong> and 16bpc <strong>{{FLOAT}}</strong> is 32bpc <strong>{{FLOAT}}</strong>.</p><p>The output channel depth will match the maximum of the input channel depths if the channel depth is <strong>{{D2D1_CHANNEL_DEPTH_DEFAULT}}</strong>.</p><p>There is no global output channel depth, this is always left to the control of the transforms. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of buffer that should be used as an output from this transform.</p> </dd> + + + <dd> <p>The number of channels that will be used on the output buffer. </p> </dd> + + + + + <p>Specifies that the output of the transform in which the render information is encapsulated is or is not cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output of the transform is cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides an estimated hint of shader execution cost to {{D2D}}.</p> + <p>The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this {{API}} is optional, but it may improve performance if you provide an accurate number. </p><strong>Note</strong>??Instructions that occur in a loop should be counted according to the number of loop iterations.? + <p>This method does not return a value.</p> + + + <dd> <p>An approximate instruction count of the associated shader.</p> </dd> + + + + + <p>This interface is used to describe a {{GPU}} rendering pass on a vertex or pixel shader. It is passed to <strong>{{ID2D1DrawTransform}}</strong>.</p> + + + + <p>Sets the constant buffer for this transform's pixel shader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the texture to be bound to the pixel shader.</p> </dd> + + + <dd> <p>The created resource texture.</p> </dd> + + + + + <p>Sets the constant buffer for this transform's vertex shader.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Set the shader instructions for this transform.</p> + <p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and will fail to Draw, it will place the context into an error state which can be retrieved through the <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call. </p><p>Specifying <em>pixelOptions</em> other than {{D2D1_PIXEL_OPTIONS_NONE}} can enable the renderer to perform certain optimizations such as combining various parts of the effect graph together. If this information does not accurately describe the shader, indeterminate rendering artifacts can result. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The resource id for the shader.</p> </dd> + + + <dd> <p>Additional information provided to the renderer to indicate the operations the pixel shader does.</p> </dd> + + + + + <p>Sets a vertex buffer, a corresponding vertex shader, and options to control how the vertices are to be handled by the Direct2D context.</p> + <p>The vertex shaders associated with the vertex buffer through the vertex shader {{GUID}} must have been loaded through the <strong>{{ID2D1EffectContext::LoadVertexShader}}</strong> method before this call is made.</p><p>If you pass the vertex option <strong>{{D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR}}</strong>, then the method fails unless the blend description is exactly this: </p><pre>{{D2D1_BLEND_DESCRIPTION}} blendDesc = { {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, { 1.0f, 1.0f, 1.0f, 1.0f } };</pre><p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p><p> If blendDescription is {{NULL}}, a foreground-over blend mode is used.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The vertex buffer, if this is cleared, the default vertex shader and mapping to the transform rectangles will be used.</p> </dd> + + + <dd> <p>Options that influence how the renderer will interact with the vertex shader.</p> </dd> + + + <dd> <p>How the vertices will be blended with the output texture.</p> </dd> + + + <dd> <p>The set of vertices to use from the buffer. +</p> </dd> + + + <dd> <p>The {{GUID}} of the vertex shader.</p> </dd> + + + + + <p>Enables specification of information for a compute-shader rendering pass.</p> + <p>The transform changes the state on this render information to specify the compute shader and its dependent resources.</p> + + + + <p>Establishes or changes the constant buffer data for this transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Sets the compute shader to the given shader resource. The resource must be loaded before this call is made.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{GUID}} of the shader.</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index to the given texture resource. The texture resource must already have been loaded with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> method. This call will fail if the specified index overlaps with any input. The input indices always precede the texture {{LUT}} indices. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>Represents a graph of transform nodes.</p> + <p>This interface allows a graph of transform nodes to be specified. This interface is passed to <strong>{{ID2D1EffectImpl::Initialize}}</strong> to allow an effect implementation to specify a graph of transforms or a single transform.</p> + + + + <p>Returns the number of inputs to the transform graph.</p> + <p>The number of inputs to this transform graph.</p> + + + + <p>Sets a single transform node as being equivalent to the whole graph.</p> + <p>This equivalent to calling <strong>{{ID2D1TransformGraph::Clear}}</strong>, adding a single node, connecting all of the node inputs to the effect inputs in order, and setting the transform not as the graph output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node to be set.</p> </dd> + + + + + <p>Adds the provided node to the transform graph.</p> + <p>This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way. +</p><p>A transform graph cannot be directly added to another transform graph. +Only interfaces derived from <strong>{{ID2D1TransformNode}}</strong> can be added to the transform graph. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be added to the transform graph.</p> </dd> + + + + + <p>Removes the provided node from the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p><p>Any connections to this node will be removed when the node is removed.</p><p>After the node is removed, it cannot be used by the interface until it has been added to the graph by <strong>AddNode</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be removed from the transform graph.</p> </dd> + + + + + <p>Sets the output node for the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be considered the output of the transform node.</p> </dd> + + + + + <p>Connects two nodes inside the transform graph.</p> + <p>Both nodes must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node from which the connection will be made.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Connects a transform node inside the graph to the corresponding effect input of the encapsulating effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The effect input to which the transform node will be bound.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Clears the transform nodes and all connections from the transform graph.</p> + <p>Used when enough changes to transfoms would make editing of the transform graph inefficient.</p> + <p>This method does not return a value.</p> + + + + <p>Uses the specified input as the effect output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input to the effect.</p> </dd> + + + + + <p>Represents the base interface for all of the transforms implemented by the transform author.</p> + <p>Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.</p> + + + + <p>Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle from which the inputs must be mapped.</p> </dd> + + + <dd> <p>The corresponding set of inputs. The inputs will directly correspond to the transform inputs.</p> </dd> + + + <dd> <p>The number of inputs specified. Direct2D guarantees that this is equal to the number of inputs specified on the transform.</p> </dd> + + + + + <p>Performs the inverse mapping to <strong>MapOutputRectToInputRects</strong>.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>Unlike the <strong>MapOutputRectToInputRects</strong> and <strong>MapInvalidRect</strong> functions, this method is explicitly called by the renderer at a determined place in its rendering algorithm. The transform implementation may change its state based on the input rectangles and use this information to control its rendering information. This method is always called before the <strong>MapInvalidRect</strong> and <strong>MapOutputRectToInputRects</strong> methods of the transform.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the input rectangles for this rendering pass into the transform.</p> + <p>The transform implementation must regard <strong>MapInvalidRect</strong> as purely functional. The transform implementation can base the mapped input rectangle on the transform implementation's current state as specified by the encapsulating effect properties. But the transform implementation can't change its own state in response to a call to <strong>MapInvalidRect</strong>. Direct2D can call this method at any time and in any sequence following a call to the <strong>MapInputRectsToOutputRect</strong> method. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the input rectangle.</p> </dd> + + + <dd> <p>The invalid input rectangle.</p> </dd> + + + <dd> <p>The output rectangle to which the input rectangle must be mapped.</p> </dd> + + + + + <p>A specialized implementation of the Shantzis calculations to a transform implemented on the {{GPU}}. These calculations are described in the paper A model for efficient and flexible image computing.</p><p>The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the <strong>SetDrawInfo</strong> method. </p> + + + + <p> Provides the {{GPU}} render info interface to the transform implementation.</p> + <p>The transform can maintain a reference to this interface for its lifetime. If any properties change on the transform, it can apply these changes to the corresponding <em>drawInfo</em> interface. </p><p>This is also used to determine that the corresponding nodes in the graph are dirty.</p> + <p>Any {{HRESULT}} value can be returned when implementing this method. A failure will be returned from the corresponding <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call.</p> + + + <dd> <p>The interface supplied back to the calling method to allow it to specify the {{GPU}} based transform pass.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Sets the render information used to specify the compute shader pass.</p> + <p>If this method fails, <strong>{{ID2D1TransformGraph::AddNode}}</strong> fails.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The render information object to set.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Supplies data to an analysis effect.</p> + <p> This interface can be implemented by either an <strong>{{ID2D1DrawTransform}}</strong> or an <strong>{{ID2D1ComputeTransform}}</strong>.</p> + + + + <p>Supplies the analysis data to an analysis transform.</p> + <p>The output of the transform will be copied to {{CPU}}-accessible memory by the imaging effects system before being passed to the implementation.</p><p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data that the transform will analyze.</p> </dd> + + + <dd> <p>The size of the analysis data.</p> </dd> + + + + + <p>Represents a {{CPU}}-based rasterization stage in the transform pipeline graph.</p> + <p><strong>{{ID2D1SourceTransform}}</strong> specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.</p> + + + + <p>Sets the render information for the transform.</p> + <p>Provides a render information interface to the source transform to allow it to specify state to the rendering system.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The interface supplied to the transform to allow specifying the {{CPU}} based transform pass.</p> </dd> + + + + + <p>Draws the transform to the graphics processing unit ({{GPU}})?based Direct2D pipeline.</p> + <p>The implementation of the rasterizer guarantees that adding the <em>renderRect</em> to the <em>targetOrigin</em> does not exceed the bounds of the bitmap.</p><p>When implementing this method you must update the bitmap in this way: </p><ol> <li>Call the <strong>{{ID2D1Bitmap::Map}}</strong> method with the {{D2D1_MAP_OPTIONS_DISCARD}} and {{D2D1_MAP_OPTIONS_WRITE}} +flags.</li> <li>Update the buffer this method returns.</li> <li>Call the <strong>{{ID2D1Bitmap::Unmap}}</strong> method.</li> </ol><p>If you set the buffer precision manually on the associated <strong>{{ID2D1RenderInfo}}</strong> object, it must handle different pixel formats in this method by calling <strong>{{ID2D1Bitmap::GetPixelFormat}}</strong>. If you set the buffer precision manually, then you can rely on that format always being the one you provided.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The target to which the transform should be written.</p> </dd> + + + <dd> <p>The area within the source from which the image should be drawn.</p> </dd> + + + <dd> <p>The origin within the target bitmap to which the source data should be drawn.</p> </dd> + + + + + <p>Represents the set of transforms implemented by the effect-rendering system, which provides fixed-functionality.</p> + + + + + <p>Sets the properties of the output buffer of the specified transform node.</p> + <p>You can use the <strong>{{ID2D1EffectContext::IsBufferPrecisionSupported}}</strong> method to see if buffer precision is supported.</p><p>The available channel depth and precision depend on the capabilities of the underlying Microsoft Direct3D device.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> </table><p>?</p> + + + <dd> <p>The number of bits and the type of the output buffer.</p> </dd> + + + <dd> <p>The number of channels in the output buffer (1 or 4).</p> </dd> + + + + + <p>Sets whether the output of the specified transform is cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output should be cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides methods to allow a blend operation to be inserted into a transform graph.</p><p>The image output of the blend transform is the same as rendering an image effect graph with these steps:</p><ul> <li>Copy the first input to the destination image.</li> <li>Render the next input on top using the blend description.</li> <li>Continue for each additional input.</li> </ul> + + + + + <p>Changes the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new blend description specified for the blend transform.</p> </dd> + + + + + <p>Gets the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the blend description specified for the blend transform.</p> </dd> + + + + + <p>Extends the input rectangle to infinity using the specified extend modes.</p> + + + + <p>Sets the extend mode in the x direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the x direction.</p> </dd> + + + + + <p>Sets the extend mode in the y direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the y direction.</p> </dd> + + + + + <p>Gets the extend mode in the x direction.</p> + + <p>This method returns the extend mode in the x direction.</p> + + + + <p>Gets the extend mode in the y direction.</p> + + <p>This method returns the extend mode in the y direction.</p> + + + + <p>Instructs the effect-rendering system to offset an input bitmap without inserting a rendering pass.</p> + <p>Because a rendering pass is not required, the interface derives from a transform node. This allows it to be inserted into a graph but does not allow an output buffer to be specified.</p> + + + + <p>Sets the offset in the current offset transform.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new offset to apply to the offset transform.</p> </dd> + + + + + <p>Gets the offset currently in the offset transform.</p> + + <p>The current transform offset.</p> + + + + <p>A support transform for effects to modify the output rectangle of the previous effect or bitmap. </p> + <p>The support transform can be used for two different reasons.</p><ul> <li> <p>To indicate that a region of its input image is already transparent black. The expanded area will be treated as transparent black.</p> <p>This can increase efficiency for rendering bitmaps.</p> </li> <li> <p>To increase the size of the input image.</p> </li> </ul><p>?</p><p>?</p> + + + + <p>This sets the output bounds for the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Returns the output rectangle of the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Allows a custom effect's interface and behavior to be specified by the effect author.</p> + <p>This interface is created by the effect author from a static factory registered through the <strong>{{ID2D1Factory::RegisterEffect}}</strong> method.</p> + + + + <p>The effect can use this method to do one time initialization tasks. If this method is not needed, the method can just return <strong>{{S_OK}}</strong>.</p> + <p>This moves resource creation cost to the <strong>CreateEffect</strong> call, rather than during rendering.</p><p>If the implementation fails this call, the corresponding <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> call also fails.</p><p>The following example shows an effect implementing an initialize method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An internal context interface that creates and returns effect author?centric types.</p> </dd> + + + <dd> <p>The effect can populate the transform graph with a topology and can update it later.</p> </dd> + + + + + <p>Prepares an effect for the rendering process.</p> + <p>This method is called by the renderer when the effect is within an effect graph that is drawn.</p><p> The method will be called:</p><ul> <li>If the effect has been initialized but has not previously been drawn.</li> <li>If an effect property has been set since the last draw call.</li> <li>If the context state has changed since the effect was last drawn.</li> </ul><p>The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.</p><p>Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the type of change the effect should expect.</p> </dd> + + + + + <p>The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. </p><p>The renderer calls this method when:</p><ul> <li>When the effect is first initialized.</li> <li>If the number of inputs to the effect changes.</li> </ul> + <p>An error that prevents the effect from being initialized if called as part of the CreateEffect call. If the effect fails a subsequent SetGraph call:</p><ul> <li>The error will be returned from the property method that caused the number of inputs to the effect to change. +</li> <li>The effect object will be placed into an error state, if subsequently used to render, the context will be placed into a temporary error state, that particular effect will fail to render and the failure will be returned on the next EndDraw or Flush call.</li> </ul> + + + <dd> <p>The graph to which the effect describes its transform topology through the SetDescription call.</p> </dd> + + + + + <p>The rendering priority affects the extent to which Direct2D will throttle its rendering workload.</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Retrieves the current rendering priority of the device.</p> + <p> The current rendering priority of the device.</p> + + + + <p>Sets the priority of Direct2D rendering operations performed on any device context associated with the device.</p> + <p>Calling this method affects the rendering priority of all device contexts associated with the device. This method can be called at any time, but is not guaranteed to take effect until the beginning of the next frame. The recommended usage is to call this method outside of <strong>BeginDraw</strong> and <strong>EndDraw</strong> blocks. Cycling this property frequently within drawing blocks will effectively reduce the benefits of any throttling that is applied.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The desired rendering priority for the device and associated contexts.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.</p> + + + + <p>Enables creation and drawing of geometry realization objects. </p> + + + + <p>Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The width of the stroke. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The stroke style (optional).</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Renders a given geometry realization to the target with the specified brush.</p> + <p> This method respects all currently set state (transform, {{DPI}}, unit mode, target image, clips, layers); however, artifacts such as faceting may appear when rendering the realizations with a large effective scale (either via the transform or the {{DPI}}). Callers should create their realizations with an appropriate flattening tolerance using either <strong>{{D2D1_DEFAULT_FLATTENING_TOLERANCE}}</strong> or <strong>ComputeFlatteningTolerance</strong> to compensate for this. </p><p>Additionally, callers should be aware of the safe render bounds when creating geometry realizations. If a geometry extends outside of [-524,287, 524,287] {{DIPs}} in either the X- or the Y- direction in its original (pre-transform) coordinate space, then it may be clipped to those bounds when it is realized. This clipping will be visible even if the realization is subsequently transformed to fit within the safe render bounds.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry realization to be rendered.</p> </dd> + + + <dd> <p>The brush to render the realization with.</p> </dd> + + + + + <p> Creates Direct2D resources. </p><p> This interface also enables the creation of <strong>{{ID2D1Device1}}</strong> objects. </p> + + + + <p>Creates an <strong>{{ID2D1Device1}}</strong> object. </p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device1}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink}}</strong> interface. It also enables access to the new primitive blend modes, {{MIN}} and {{ADD}}, through its <strong>SetPrimitiveBlend1</strong> method.</p> + + + + <p>Sets a new primitive blend mode. </p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>Computes the maximum factor by which a given transform can stretch any vector.</p> + <p>Formally, if M is the input matrix, this method will return the maximum value of |V * M| / |V| for all vectors V, where |.| denotes length. </p><strong>Note</strong>??Since this describes how M affects vectors (rather than points), the translation components (_31 and _32) of M are ignored.? + <p>The scale factor.</p> + + + <dd> <p>The input transform matrix.</p> </dd> + + + + + <p> Identifiers for properties of the {{YCbCr}} effect. </p> + + + + <p> Specifies the chroma subsampling of the input chroma image used by the {{YCbCr}} effect. </p> + + + + <p>Specifies the interpolation mode for the {{YCbCr}} effect.</p> + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + + + + + + + + + + <p> Specifies the appearance of the ink nib (pen tip) as part of an <strong>{{D2D1_INK_STYLE_PROPERTIES}}</strong> structure. </p> + + + + <p>Specifies the flip and rotation at which an image appears.</p> + + + <dd> <p>The orientation is unchanged.</p> </dd> + + + <dd> <p>The image is flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees.</p> </dd> + + + + + <p>Controls option flags for a new {{ID2D1ImageSource}} when it is created.</p> + <p> ? </p><p>{{D2D1_IMAGE_SOURCE_CREATION_OPTIONS_RELEASE_SOURCE}} causes the image source to not retain a reference to the source object used to create it. It can decrease the quality and efficiency of printing.</p> + + + <dd> <p>No options are used.</p> </dd> + + + <dd> <p>Indicates the image source should release its reference to the {{WIC}} bitmap source after it has initialized. By default, the image source retains a reference to the {{WIC}} bitmap source for the lifetime of the object to enable quality and speed optimizations for printing. This option disables that optimization. +</p> </dd> + + + <dd> <p>Indicates the image source should only populate subregions of the image cache on-demand. You can control this behavior using the <strong>EnsureCached</strong> and <strong>TrimCache</strong> methods. This options provides the ability to improve memory usage by only keeping needed portions of the image in memory. This option requires that the image source has a reference to the {{WIC}} bitmap source, and is incompatible with {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE}}.</p> </dd> + + + + + <p>Option flags controlling primary conversion performed by <strong>CreateImageSourceFromDxgi</strong>, if any.</p> + + + + <p>Option flags for transformed image sources.</p> + + + <dd> <p>No option flags.</p> </dd> + + + <dd> <p>Prevents the image source from being automatically scaled (by a ratio of the context {{DPI}} divided by 96) while drawn.</p> </dd> + + + + + <p>Specifies how to render gradient mesh edges.</p> + + + <dd> <p>Render this patch edge aliased. Use this value for the internal edges of your gradient mesh.</p> </dd> + + + <dd> <p>Render this patch edge antialiased. Use this value for the external (boundary) edges of your mesh.</p> </dd> + + + <dd> <p>Render this patch edge aliased and also slightly inflated. Use this for the internal edges of your gradient mesh when there could be t-junctions among patches. Inflating the internal edges mitigates seams that can appear along those junctions.</p> </dd> + + + + + <p>Specifies additional aspects of how a sprite batch is to be drawn, as part of a call to <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong>.</p> + + + + <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> + + + <dd> <p>Color bitmap glyph positions are snapped to the nearest pixel if the bitmap resolution matches that of the device context.</p> </dd> + + + <dd> <p>Color bitmap glyph positions are not snapped.</p> </dd> + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Properties of a transformed image source.</p> + + + <dd> <p>The orientation at which the image source is drawn.</p> </dd> + + + <dd> <p>The horizontal scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The vertical scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The interpolation mode used when the image source is drawn. This is ignored if the image source is drawn using the DrawImage method, or using an image brush.</p> </dd> + + + <dd> <p>Image sourc option flags.</p> </dd> + + + + + <p>Represents a point, radius pair that makes up part of a <strong>{{D2D1_INK_BEZIER_SEGMENT}}</strong>.</p> + + + + <p>Represents a Bezier segment to be used in the creation of an <strong>{{ID2D1Ink}}</strong> object. This structure differs from <strong>{{D2D1_BEZIER_SEGMENT}}</strong> in that it is composed of <strong>{{D2D1_INK_POINT}}</strong>s, which contain a radius in addition to x- and y-coordinates. </p> + + + + <p> Defines the general pen tip shape and the transform used in an <strong>{{ID2D1InkStyle}}</strong> object. </p> + + + + <p> Represents a tensor patch with 16 control points, 4 corner colors, and boundary flags. An {{ID2D1GradientMesh}} is made up of 1 or more gradient mesh patches. Use the <strong>GradientMeshPatch function</strong> or the <strong>GradientMeshPatchFromCoonsPatch function</strong> to create one. </p> + <p>The following image shows the numbering of control points on a tensor grid.</p> + + + + <p>Creates a color context from a simple color profile. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The simple color profile to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + <p> Represents a collection of style properties to be used by methods like <strong>{{ID2D1DeviceContext2::DrawInk}}</strong> when rendering ink. The ink style defines the nib (pen tip) shape and transform. </p> + + + + <p>Sets the transform to apply to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform to apply to this style?s nib shape. Note that the translation components of the transform matrix are ignored for the purposes of rendering.</p> </dd> + + + + + <p>Retrieves the transform to be applied to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the transform to be applied to this style's nib shape.</p> </dd> + + + + + <p>Sets the pre-transform nib shape for this style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The pre-transform nib shape to use in this style.</p> </dd> + + + + + <p>Retrieves the pre-transform nib shape for this style.</p> + <p>Returns the pre-transform nib shape for this style.</p> + + + + <p>Represents a single continuous stroke of variable-width ink, as defined by a series of Bezier segments and widths.</p> + + + + <p>Sets the starting point for this ink object. This determines where this ink object will start rendering.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The new starting point for this ink object.</p> </dd> + + + + + <p>Retrieves the starting point for this ink object.</p> + <p>The starting point for this ink object.</p> + + + + <p>Adds the given segments to the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of segments to be added to this ink object.</p> </dd> + + + <dd> <p>The number of segments to be added to this ink object.</p> </dd> + + + + + <p>Removes the given number of segments from the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of segments to be removed from the end of this ink object. Note that segmentsCount must be less or equal to the number of segments in the ink object.</p> </dd> + + + + + <p>Updates the specified segments in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to update.</p> </dd> + + + <dd> <p>A reference to the array of segment data to be used in the update.</p> </dd> + + + <dd> <p>The number of segments in this ink object that will be updated with new data. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Updates the last segment in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the segment data with which to overwrite this ink object's last segment. Note that if there are currently no segments in the ink object, SetSegmentsAtEnd will return an error.</p> </dd> + + + + + <p>Returns the number of segments in this ink object.</p> + <p>Returns the number of segments in this ink object.</p> + + + + <p>Retrieves the specified subset of segments stored in this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of retrieved segments.</p> </dd> + + + <dd> <p>The number of segments to retrieve. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Retrieves a geometric representation of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The world transform to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The flattening tolerance to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The geometry sink to which the geometry representation will be streamed.</p> </dd> + + + + + <p>Retrieve the bounds of the geometry, with an optional applied transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>The world transform to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of this ink object.</p> </dd> + + + + + <p>Represents a device-dependent representation of a gradient mesh composed of patches. Use the <strong>{{ID2D1DeviceContext2::CreateGradientMesh}} method</strong> to create an instance of {{ID2D1GradientMesh}}.</p> + + + + <p>Returns the number of patches that make up this gradient mesh.</p> + <p>Returns the number of patches that make up this gradient mesh.</p> + + + + <p>Returns a subset of the patches that make up this gradient mesh.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Index of the first patch to return.</p> </dd> + + + <dd> <p>A reference to the array to be filled with the patch data.</p> </dd> + + + <dd> <p>The number of patches to be returned.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p><strong>OfferResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully offered </li> <li><strong>{{E_INVALIDARG}}</strong> if a resource in the array or the priority is invalid </li> </ul> + + + + <p> Restores access to resources that were previously offered by calling <strong>OfferResources</strong>. </p> + <p> After you call <strong>OfferResources</strong> to offer one or more resources, +you must call <strong>TryReclaimResources</strong> before you can use those resources again. +You must check the value in the <strong>resourcesDiscarded</strong> to determine whether the resource?s content was discarded. +If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully reclaimed </li> <li><strong>{{E_INVALIDARG}}</strong> if the resources are invalid </li> </ul> + + + + <p>Produces 2D pixel data that has been sourced from {{WIC}}.</p> + <p> Create an an instance of {{ID2D1ImageSourceFromWic}} using <strong>{{ID2D1DeviceContext2::CreateImageSourceFromWic}}</strong>. </p> + + + + <p> Ensures that a specified region of the image source cache is populated. This method can be used to minimize glitches by performing expensive work to populate caches outside of a rendering loop. This method can also be used to speculatively load image data before it is needed by drawing routines. </p> + <p>This {{API}} loads image data into caches of image sources, if that data was not already cached. It does not trim pre-existing caches, if any. More areas within the cache can be populated than actually requested.</p><p> ? </p><p>The provided region must be constructed to include the scale with which the image source will subsequently be drawn. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, that should be populated in the cache. By default, this is the entire extent of the image.</p> </dd> + + + + + <p>This method trims the populated regions of the image source cache to just the specified rectangle.</p> + <p>The provided region must be constructed to include the scale at which the image source will be drawn at. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p> ? </p><p>This method will fail if on-demand caching was not requested when the image source was created.</p><p> ? </p><p>As with <strong>{{ID2D1Device::ClearResources}}</strong>, the caller can need to subsequently issue a {{D3D}} flush before memory usage is reduced.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, which should be preserved in the image source cache. Regions which are outside of the rectangle are evicted from the cache. By default, this is an empty rectangle, meaning that the entire image is evicted from the cache.</p> </dd> + + + + + <p>Retrieves the underlying bitmap image source from the Windows Imaging Component ({{WIC}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>On return contains the bitmap image source.</p> </dd> + + + + + <p>Represents an image source which shares resources with an original image source.</p> + + + + <p> Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p>A container for 3D lookup table data that can be passed to the LookupTable3D effect.</p><p>An {{ID2DLookupTable3D}} instance is created using <strong>{{ID2D1DeviceContext2::CreateLookupTable3D}}</strong> or {{ID2D1EffectContext1::CreateLookupTable3D}}.</p> + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Creates a new <strong>{{ID2D1Ink}}</strong> object that starts at the given point.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1InkStyle}}</strong> object, for use with ink rendering methods such as <strong>DrawInk</strong>.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1GradientMesh}}</strong> instance using the given array of patches.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates an image source object from a {{WIC}} bitmap source, while populating all pixel memory within the image source. The image is loaded and stored while using a minimal amount of memory.</p> + <p> This method creates an image source which can be used to draw the image. </p><p>This method supports images that exceed the maximum texture size. Large images are internally stored within a sparse tile cache. </p><p> This {{API}} supports the same set of pixel formats and alpha modes supported by <strong>CreateBitmapFromWicBitmap</strong>. If the {{GPU}} does not support a given pixel format, this method will return {{D2DERR_UNSUPPORTED_PIXEL_FORMAT}}. This method does not apply adjustments such as gamma or alpha premultiplication which affect the appearance of the image. </p><p>This method automatically selects an appropriate storage format to minimize {{GPU}} memory usage., such as using separate luminance and chrominance textures for {{JPEG}} images. </p><p>If the loadingOptions argument is {{NULL}}, {{D2D}} uses {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{WIC}} bitmap source to create the image source from.</p> </dd> + + + <dd> <p>Options for creating the image source. Default options are used if {{NULL}}.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + <p>Creates an image source from a set of {{DXGI}} surface(s). The {{YCbCr}} surface(s) are converted to {{RGBA}} automatically during subsequent drawing.</p> + <p> This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of {{DXGI}} formats and {{DXGI}} color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported: </p><table> <tr><th>Color Space Type</th><th>Surface Count(s)</th><th>Surface Format(s)</th></tr> <tr><td>{{DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709}}</td><td>1</td><td> Standard {{D2D}}-supported pixel formats: <ul> <li>{{DXGI_FORMAT_A8_UNORM}}</li> <li>{{DXGI_FORMAT_R8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8X8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>{{DXGI_FORMAT_R32G32B32A32_FLOAT}}</li> <li>{{DXGI_FORMAT_BC1_UNORM}}</li> <li>{{DXGI_FORMAT_BC2_UNORM}}</li> <li>{{DXGI_FORMAT_BC3_UNORM}}</li> </ul> </td></tr> <tr><td>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601}}</td><td>1, 2, 3</td><td> When Surface count is 1: <ul> <li>{{DXGI_FORMAT_AYUV}}</li> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> <li>{{DXGI_FORMAT_V408}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> <tr><td> {{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601}} <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020}}</p> </td><td>1,2,3</td><td> <p>When Surface count is 1: </p> <ul> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> </table><p>?</p><p>The {{GPU}} must also have sufficient support for a pixel format to be supported by {{D2D}}. To determine whether {{D2D}} supports a format, call IsDxgiFormatSupported.</p><p>This {{API}} converts {{YCbCr}} formats to sRGB using the provided color space type and options. {{RGBA}} data is assumed to be in the desired space, and {{D2D}} does not apply any conversion.</p><p> If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is {{NULL}}, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up). </p><p> If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another. </p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{DXGI}} surfaces to create the image source from.</p> </dd> + + + <dd> <p>The regions of the surfaces to create the image source from.</p> </dd> + + + <dd> <p>The number of surfaces provided; must be between one and three.</p> </dd> + + + <dd> <p>The color space of the input.</p> </dd> + + + <dd> <p>Options controlling color space conversions.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Returns the world bounds of a given gradient mesh.</p> + <p>The world bounds reflect the current {{DPI}}, unit mode, and world transform of the context. They indicate which pixels would be impacted by calling DrawGradientMesh with the given gradient mesh. +They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The gradient mesh whose world bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the gradient mesh, in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the device context using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the render target. If {{NULL}} is specified, the destination rectangle is {0, 0, w, h}, where w and h are the width and height of the metafile as reported by <strong>{{ID2D1GdiMetafile::GetBounds}}</strong>. </p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the metafile. If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>Creates an image source which shares resources with an original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The original image.</p> </dd> + + + <dd> <p>Properties for the source image.</p> </dd> + + + <dd> <p>Receives the new image source.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device1}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext2}}</strong> objects. </p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext2}}</strong> from a Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flush all device contexts that reference a given bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap, created on this device, for which all referencing device contexts will be flushed. </p> </dd> + + + + + <p>Returns the {{DXGI}} device associated with this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{DXGI}} device associated with this Direct2D device.</p> </dd> + + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device2}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device2}}</strong> object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink1}}</strong> interface. It also enables access to ink rendering and gradient mesh rendering.</p> + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the command sink using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the destination rectangle is the size of the target.</p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafile}} interface. It also enables accessing the metafile {{DPI}} and bounds.</p> + + + + <p>Gets the {{DPI}} reported by the metafile.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the horizontal {{DPI}} reported by the metafile.</p> </dd> + + + <dd> <p>Receives the vertical {{DPI}} reported by the metafile.</p> </dd> + + + + + <p>Gets the bounds of the metafile in source space in {{DIPs}}. This corresponds to the frame rect in an {{EMF}}/{{EMF}}+.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafileSink}} interface. It also enables access to metafile records.</p> + + + + <p>Provides access to metafile records, including their type, data, and flags.</p> + <p>For details on the {{EMF}} and {{EMF}}+ formats, please see Microsoft technical documents {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The type of metafile record being processed. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for a list of record types.</p> </dd> + + + <dd> <p>The data contained in this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record data layouts.</p> </dd> + + + <dd> <p>{{TThe}} size of the data pointed to by recordData. </p> </dd> + + + <dd> <p>The set of flags set for this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record flags.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Updates the properties of the specified sprites in this sprite batch. Providing a null value for any property will leave that property unmodified for that sprite. </p> + <p>Returns {{S_OK}} on success. Returns {{E_INVALIDARG}} if an invalid value was passed to the method. In this case, no sprites are modified by this call to SetSprites.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to update.</p> </dd> + + + <dd> <p>The number of sprites to update with new properties. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. </p> <p>Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the updated sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each updated sprite.</p> </dd> + + + + + <p>Retrieves the specified subset of sprites from this sprite batch. For the best performance, use nullptr for properties that you do not need to retrieve.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to retrieve.</p> </dd> + + + <dd> <p>The number of sprites to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the destination rectangles for the retrieved sprites.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the source rectangles for the retrieved sprites. </p> <p>The InfiniteRectU is returned for any sprites that were not assigned a source rectangle.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the colors to be applied to the retrieved sprites. </p> <p>The color {1.0f, 1.0f, 1.0f, 1.0f} is returned for any sprites that were not assigned a color.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the transforms to be applied to the retrieved sprites. </p> <p>The identity matrix is returned for any sprites that were not assigned a transform.</p> </dd> + + + + + <p>Retrieves the number of sprites in this sprite batch.</p> + <p>Returns the number of sprites in this sprite batch</p> + + + + <p>Removes all sprites from this sprite batch.</p> + <p>This method does not return a value.</p> + + + + <p>This interface performs all the same functions as the <strong>{{ID2D1DeviceContext2}}</strong> interface, plus it enables functionality for creating and drawing sprite batches.</p> + + + + <p>Creates a new, empty sprite batch. After creating a sprite batch, use <strong>{{ID2D1SpriteBatch::AddSprites}}</strong> to add sprites to it, then use <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong> to draw it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Renders all sprites in the given sprite batch to the device context using the specified drawing options.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device2}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext3}}</strong> objects.</p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext3}}</strong> from this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device3}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device3}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink2}}</strong> interface. It also enables access to sprite batch rendering.</p> + + + + <p>Renders part or all of the given sprite batch to the device context using the specified drawing options.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The index of the first sprite in the sprite batch to draw.</p> </dd> + + + <dd> <p>The number of sprites to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>This object supplies the values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> + + + + <p>Provides values to an {{SVG}} glyph for fill.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the area is painted. A null brush will cause the context-fill value to come from the <strong>defaultFillBrush</strong>. If the defaultFillBrush is also null, the context-fill value will be 'none'. To set the ?context-fill? value, this method uses the provided brush with its opacity set to 1. To set the ?context-fill-opacity? value, this method uses the opacity of the provided brush. </p> </dd> + + + + + <p>Returns the requested fill parameters.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + + + <p>Provides values to an {{SVG}} glyph for stroke properties. The brush with opacity set to 1 is used as the 'context-stroke'. The opacity of the brush is used as the 'context-stroke-opacity' value.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the stroke is painted. A null brush will cause the context-stroke value to be none.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dasharray' property. A null value will cause the stroke-dasharray to be set to 'none'.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p>Returns the number of dashes in the dash array.</p> + <p>Returns the number of dashes in the dash array.</p> + + + + <p>Returns the requested stroke parameters. Any parameters that are non-null will receive the value of the requested parameter. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the stroke is painted.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dasharray' property.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p> This interface performs all the same functions as the <strong>{{ID2D1DeviceContext3}}</strong> interface, plus it enables functionality for handling new types of color font glyphs. </p> + + + + <p>Creates an {{SVG}} glyph style object.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>On completion points to the created <strong>{{ID2D1SvgGlyphStyle}}</strong> object.</p> </dd> + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Draws a text layout object. If the layout is not subsequently changed, this can be more efficient than DrawText when drawing the same layout repeatedly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point, described in device-independent pixels, at which the upper-left corner of the text described by <em>textLayout</em> is drawn.</p> </dd> + + + <dd> <p>The formatted text to draw. Any drawing effects that do not inherit from <strong>{{ID2D1Resource}}</strong> are ignored. If there are drawing effects that inherit from <strong>{{ID2D1Resource}}</strong> that are not brushes, this method fails and the render target is put in an error state. </p> </dd> + + + <dd> <p>The brush used to paint the text.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font.</p> </dd> + + + <dd> <p> A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is <strong>{{D2D1_DRAW_TEXT_OPTIONS_NONE}}</strong>, which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. </p> </dd> + + + + + <p>Draws a color bitmap glyph run using one of the bitmap formats.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the format of the glyph image. Supported formats are {{DWRITE_GLYPH_IMAGE_FORMATS_PNG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_JPEG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_TIFF}}, or {{DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8}}. This method will result in an error if the color glyph run does not contain the requested format. </p> <p>Only one format can be specified at a time, combinations of flags are not valid input.</p> </dd> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Indicates the measuring method.</p> </dd> + + + <dd> <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> </dd> + + + + + <p>Draws a color glyph run that has the format of {{DWRITE_GLYPH_IMAGE_FORMATS_SVG}}.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>Values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Indicates the measuring method used for text layout.</p> </dd> + + + + + <p> Retrieves an image of the color bitmap glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The format for the glyph image. If there is no image data in the requested format for the requested glyph, this method will return an error. </p> </dd> + + + <dd> <p>The origin for the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the choice of which bitmap to use from the font. It also affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image. This input transform affects the choice of which bitmap to use from the font. It is also factored into the output glyphTransform.</p> </dd> + + + <dd> <p>Dots per inch along the x-axis.</p> </dd> + + + <dd> <p>Dots per inch along the y-axis.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion contains the retrieved glyph image.</p> </dd> + + + + + <p> Retrieves an image of the {{SVG}} glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Origin of the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph to retrieve.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image.</p> </dd> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion, contains the retrieved glyph image.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device3}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext4}}</strong> objects. </p> + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Sets the maximum capacity of the color glyph cache. </p> + <p>The color glyph cache is used to store color bitmap glyphs and {{SVG}} glyphs, enabling faster performance if the same glyphs are needed again. The capacity determines the amount of memory that {{D2D}} may use to store glyphs that the application does not already reference. If the application references a glyph using <strong>GetColorBitmapGlyphImage</strong> or <strong>GetSvgGlyphImage</strong>, after it has been evicted, this glyph does not count toward the cache capacity.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The maximum capacity of the color glyph cache.</p> </dd> + + + + + <p>Gets the maximum capacity of the color glyph cache.</p> + <p>Returns the maximum capacity of the color glyph cache in bytes.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device4}}</strong> objects.</p> + + + + <p> Creates an <strong>{{ID2D1Device4}}</strong> object. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink3}}</strong> interface. It also enables access to the new primitive blend mode, {{MAX}}, through the <strong>SetPrimitiveBlend2</strong> method.</p> + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Represents a color context to be used with the Color Management Effect.</p> + + + + + + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + + + + + + + <p>Creates a color context from a {{DXGI}} color space type. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The color space to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Returns the interior points for a gradient mesh patch based on the points defining a Coons patch.</p><strong>Note</strong>??<p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p>? + <p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p> + <p>This function does not return a value.</p> + + + + <p>Identifiers for properties of the Contrast effect.</p> + + + + <p>Indentifiers for properties of the {{RGB}} to Hue effect.</p> + + + + <p>Values for the <strong>{{D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE}}</strong> property of the {{RGB}} to Hue effect.</p> + + + + <p>Identifiers for properties of the Hue to {{RGB}} effect.</p> + + + + <p>Values for the <strong>{{D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE}}</strong> property of the Hue to {{RGB}} effect.</p> + + + + <p>Identifiers for properties of the Chroma-key effect.</p> + + + + <p>Identifiers for properties of the Emboss effect.</p> + + + + <p>Identifiers for properties of the Exposure effect.</p> + + + + <p>Identifiers for properties of the Posterize effect.</p> + + + + <p>Identifiers for properties of the Sepia effect.</p> + + + + <p>Identifiers for properties of the Sharpen effect.</p> + + + + <p>Identifiers for properties of the Straighten effect.</p> + + + + <p>Values for the <strong>{{D2D1_STRAIGHTEN_PROP_SCALE_MODE}}</strong> property of the Straighten effect.</p> + + + + <p>Identifiers for properties of the Temperature and Tint effect.</p> + + + + <p>Identifiers for properties of the Vignette effect.</p> + + + + <p>Identifiers for properties of the Edge Detection effect.</p> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_STRENGTH}} property is a float value modulating the response of the edge detection filter. A low strength value means that weaker edges will get filtered out, while a high value means stronger edges will get filtered out. The allowed range is 0.0 to 1.0. The default value is 0.5.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_BLUR_RADIUS}} property is a float value specifying the amount of blur to apply. Applying blur is used to remove high frequencies and reduce phantom edges. The allowed range is 0.0 to 10.0. The default value is 0.0 (no blur applied).</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_MODE}} property is a <strong>{{D2D1_EDGEDETECTION_MODE}}</strong> enumeration value which mode to use for edge detection. The default value is {{D2D1_EDGEDETECTION_MODE_SOBEL}}.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} property is a boolean value. Edge detection only applies to the {{RGB}} channels, the alpha channel is ignored for purposes of detecting edges. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is false, the output edges is fully opaque. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is true, the input opacity is preserved. The default value is false.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration value indicating the alpha mode of the input file. If the input is not opaque, this value is used to determine whether to unpremultiply the inputs. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information. The default value is {{D2D1_ALPHA_MODE_PREMULTIPLIED}}.</p> </dd> + + + + + <p>Values for the <strong>{{D2D1_EDGEDETECTION_PROP_MODE}}</strong> property of the Edge Detection effect.</p> + + + + <p>Identifiers for properties of the Highlights and Shadows effect.</p> + + + + <p>Values for the <strong>{{D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA}}</strong> property of the Highlights and Shadows effect.</p> + + + + <p>Identifiers for the properties of the 3D Lookup Table effect.</p> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_LUT}} property is a reference to an <strong>{{ID2D1LookupTable3D}}</strong> object. The default value is null.</p> </dd> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> value indicating the alpha mode of the input file. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information.</p> </dd> + + + + + <p>This effect adjusts the opacity of an image by multiplying the alpha channel of the input by the specified opacity value. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Opacity}}.</p> + + + + <p>This effect combines two images by adding weighted pixels from input images. It has two inputs, named Destination and Source.</p><p>The cross fade formula is <strong>output = weight * Destination + (1 - weight) * Source</strong>.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1CrossFade}}.</p> + + + + <p>This effect tints the source image by multiplying the source image by the specified color. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Tint}}.</p> + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Interface for all {{SVG}} elements.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + <p>Interface describing an {{SVG}} points value in a polyline or polygon element.</p> + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Used with <strong>{{ID3D11On12Device::CreateWrappedResource}}</strong> to override flags that would be inferred by the resource properties or heap properties, including bind flags, misc flags, and {{CPU}} access flags. </p> + <p> Use this structure with <strong>CreateWrappedResource</strong>. </p> + + + + <p>Handles the creation, wrapping and releasing of {{D3D11}} resources for Direct3D 11on12.</p> + + + + <p> This method creates {{D3D11}} resources for use with {{D3D}} 11on12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to an already-created {{D3D12}} resource or heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D11_RESOURCE_FLAGS}}</strong> structure that enables an application to override flags that would be inferred by the resource/heap properties. The {{D3D11_RESOURCE_FLAGS}} structure contains bind flags, misc flags, and {{CPU}} access flags. </p> </dd> + + + <dd> <p> The use of the resource on input, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The use of the resource on output, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the wrapped resource interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the wrapped resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a wrapped resource. </p> </dd> + + + <dd> <p> After the method returns, points to the newly created wrapped {{D3D11}} resource or heap. </p> </dd> + + + + + <p> Releases {{D3D11}} resources that were wrapped for {{D3D}} 11on12. </p> + <p> Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until <strong>{{ID3D11On12Device::AcquireWrappedResources}}</strong> is called. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Acquires {{D3D11}} resources for use with {{D3D}} 11on12. Indicates that rendering to the wrapped resources can begin again. </p> + <p> This method marks the resources as "acquired" in hazard tracking. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing {{D3D12}} device to use for {{D3D11}} interop. </p> + <p> The function signature {{PFN_D3D11ON12_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes that are documented for <strong>{{D3D11CreateDevice}}</strong>. See Direct3D 12 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> Specifies a pre-existing {{D3D12}} device to use for {{D3D11}} interop. May not be {{NULL}}. </p> </dd> + + + <dd> <p> One or more bitwise {{OR}}'ed flags from <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>. These are the same flags as those used by <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. Specifies which runtime layers to enable. <em>Flags</em> must be compatible with device flags, and its <em>NodeMask</em> must be a subset of the <em>NodeMask</em> provided to the present {{API}}. </p> </dd> + + + <dd> <p> An array of any of the following: </p> <ul> <li>{{D3D_FEATURE_LEVEL_12_1}}</li> <li>{{D3D_FEATURE_LEVEL_12_0}}</li> <li>{{D3D_FEATURE_LEVEL_11_1}}</li> <li>{{D3D_FEATURE_LEVEL_11_0}}</li> <li>{{D3D_FEATURE_LEVEL_10_1}}</li> <li>{{D3D_FEATURE_LEVEL_10_0}}</li> <li>{{D3D_FEATURE_LEVEL_9_3}}</li> <li>{{D3D_FEATURE_LEVEL_9_2}}</li> <li>{{D3D_FEATURE_LEVEL_9_1}}</li> </ul> <p> The first feature level which is less than or equal to the {{D3D12}} device's feature level will be used to perform {{D3D11}} validation. Creation will fail if no acceptable feature levels are provided. Providing {{NULL}} will default to the {{D3D12}} device's feature level. </p> </dd> + + + <dd> <p> The size of the feature levels array, in bytes. </p> </dd> + + + <dd> <p> An array of unique queues for {{D3D11On12}} to use. Valid queue types: 3D command queue. </p> </dd> + + + <dd> <p> The size of the command queue array, in bytes. </p> </dd> + + + <dd> <p> Which node of the {{D3D12}} device to use. Only 1 bit may be set. </p> </dd> + + + <dd> <p> Pointer to the returned <strong>{{ID3D11Device}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned <strong>{{ID3D11DeviceContext}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned feature level. May be {{NULL}}. </p> </dd> + + + + + <p>Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition.</p> + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once. </p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle (<strong>{{HWND}}</strong>).</p> + <p>A Microsoft DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns <strong>{{DCOMPOSITION_ERROR_ACCESS_DENIED}}</strong>. </p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context (<strong>{{HDC}}</strong>) returned by the <strong>GetDC</strong> function, or by calls to Microsoft DirectX <strong>Present</strong> methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The <em>topmost</em> parameter determines whether child windows clip the visual tree. </p><p> Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window's visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDComposition::VirtualSurfaceTrim}}</strong> method. </p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>This method enables an application to use a shared composition surface in a composition tree. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the <em>surface</em> reference in calls to the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. +</p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the <strong>{{DWMWA_CLOAK}}</strong> flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. For more information, see How to animate the bitmap of a layered child window and DirectComposition layered child window sample.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying <strong>{{WS_EX_LAYERED}}</strong> when creating the window with the <strong>CreateWindowEx</strong> function or by setting <strong>{{WS_EX_LAYERED}}</strong> via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of ?{{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Determines whether the DirectComposition device object is still valid.</p> + <p> If the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) device is lost, the DirectComposition device associated with the {{DXGI}} device is also lost. When it detects a lost device, DirectComposition sends the <strong>{{WM_PAINT}}</strong> message to all windows that are composing DirectComposition content using the lost device. An application should call <strong>CheckDeviceState</strong> in response to each <strong>{{WM_PAINT}}</strong> message to ensure that the DirectComposition device object is still valid. The application must take steps to recover content if the device object becomes invalid. Steps include creating new {{DXGI}} and DirectComposition devices, and recreating all content. (It?s not possible to create just a new {{DXGI}} device and associate it with the existing DirectComposition device.) The system ensures that the device object remains valid between <strong>{{WM_PAINT}}</strong> messages. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>{{TRUE}} if the DirectComposition device object is still valid; otherwise {{FALSE}}.</p> </dd> + + + + + <p>Represents a binding between a Microsoft DirectComposition visual tree and a destination on top of which the visual tree should be composed. </p> + + + + <p>Sets a visual object as the new root object of a visual tree.</p> + <p>A visual can be either the root of a single visual tree, or a child of another visual, but it cannot be both at the same time. This method fails if the <em>visual</em> parameter is already the root of another visual tree, or is a child of another visual.</p><p>If <em>visual</em> is {{NULL}}, the visual tree is empty. If there was a previous non-{{NULL}} root visual, that visual becomes available for use as the root of another visual tree, or as a child of another visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The visual object that is the new root of this visual tree. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a Microsoft DirectComposition visual. </p> + + + + <p>Changes the value of the OffsetX property of this visual. The OffsetX property specifies the new offset of the visual along the x-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetX property of a visual transforms the coordinate system of the entire visual subtree that is rooted at that visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetX property. In other words, the effect of setting the Transform property and the OffsetX property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetX value as <em>offsetX</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetX}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetX property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the x-axis, in pixels.</p> </dd> + + + + + <p>Changes the value of the OffsetY property of this visual. The OffsetY property specifies the new offset of the visual along the y-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetY property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetY property. In other words, the effect of setting the Transform property and the OffsetY property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetY value as <em>offsetY</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetY}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetY property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the y-axis, in pixels.</p> </dd> + + + + + Sets the Transform property of this visual. The Transform property specifies a 2D transform used to modify the coordinate system of this visual. The property can specify either a 3-by-2 transform matrix or a transform object. + + + + <p>Sets the TransformParent property of this visual. The TransformParent property establishes the coordinate system relative to which this visual is composed.</p> + <p>The coordinate system of a visual is modified by the OffsetX, OffsetY, and Transform properties. Normally, these properties define the coordinate system of a visual relative to its immediate parent. This method specifies the visual relative to which the coordinate system for this visual is based. The specified visual must be an ancestor of the current visual. If it is not an ancestor, the coordinate system is based on this visual's immediate parent, just as if the TransformParent property were set to {{NULL}}. Because visuals can be reparented, this property can take effect again if the specified visual becomes an ancestor of the target visual through a reparenting operation. </p><p>If the <em>visual</em> parameter is {{NULL}}, the coordinate system is always transformed relative to the visual's immediate parent. This is the default behavior if this method is not used. </p><p>This method fails if the <em>visual</em> parameter is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual that establishes the base coordinate system for this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the Effect property of this visual. The Effect property modifies how the subtree that is rooted at this visual is blended with the background, and can apply a 3D perspective transform to the visual. </p> + <p>This method creates an implicit off-screen surface to which the subtree that is rooted at this visual is composed. The surface is used as one of the inputs to the specified effect. The output of the effect is composed directly to the composition target. Some effects also use the composition target as another implicit input. This is typically the case for compositional or blend effects such as opacity, where the composition target is considered to be the "background." In that case, any visuals that are "behind" the current visual are included in the composition target when the current visual is rendered and are considered to be the "background" that this visual composes to. </p><p>If this visual is not the root of a visual tree and one of its ancestors also has an effect applied to it, the off-screen surface created by the closest ancestor is the composition target to which this visual's effect is composed. Otherwise, the composition target is the root composition target. As a consequence, the background for compositional and blend effects includes only the visuals up to the closest ancestor that itself has an effect. Conversely, any effects applied to visuals under the current visual use the newly created off-screen surface as the background, which may affect how those visuals ultimately compose on top of what the end user perceives as being "behind" those visuals. </p><p>If the <em>effect</em> parameter is {{NULL}}, no bitmap effect is applied to this visual. Any previous effects that were associated with this visual are removed. The off-screen surface is also removed and the visual subtree is composed directly to the parent composition target, which may also affect how compositional or blend effects under this visual are rendered. </p><p>This method fails if <em>effect</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to an effect object. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the BitmapInterpolationMode property, which specifies the mode for Microsoft DirectComposition to use when interpolating pixels from bitmaps that are not axis-aligned or drawn exactly at scale. </p> + <p>The interpolation mode affects how a bitmap is composed when it is transformed such that there is no one-to-one correspondence between pixels in the bitmap and pixels on the screen. </p><p>By default, a visual inherits the interpolation mode of the parent visual, which may inherit the interpolation mode of its parent visual, and so on. A visual uses the default interpolation mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If no visuals set the interpolation mode, the default for the entire visual tree is nearest neighbor interpolation, which offers the lowest visual quality but the highest performance. </p><p>If the <em>interpolationMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, this visual's bitmap is composed with the specified interpolation mode, and this mode becomes the new default mode for the children of this visual. That is, if the interpolation mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, the bitmaps of the child visuals are composed using the interpolation mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + + + <p>Sets the BorderMode property, which specifies how to compose the edges of bitmaps and clips associated with this visual, or with visuals in the subtree rooted at this visual.</p> + <p>The border mode affects how the edges of a bitmap are composed when the bitmap is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. It also affects how content is clipped at the corners of a clip that has rounded corners, and at the edge of a clip that is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. </p><p>By default, a visual inherits the border mode of its parent visual, which may inherit the border mode of its parent visual, and so on. A visual uses the default border mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>. If no visuals set the border mode, the default for the entire visual tree is aliased rendering, which offers the lowest visual quality but the highest performance. </p><p>If the <em>borderMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, this visual's bitmap and clip are composed with the specified border mode. In addition, this border mode becomes the new default for the children of the current visual. That is, if the border mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, the bitmaps and clips of the child visuals are composed using the border mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The border mode to use.</p> </dd> + + + + + Sets the Clip property of this visual to the specified rectangular region or clip object. The Clip property restricts the rendering of the visual subtree that is rooted at this visual to a rectangular region. + + + + <p>Sets the Content property of this visual to the specified bitmap or window wrapper.</p> + <p> The <em>content</em> parameter must point to one of the following:</p><ul> <li>An object that implements the <strong>{{IDCompositionSurface}}</strong> interface.</li> <li>An object that implements the <strong>{{IDXGISwapChain1}}</strong> interface.</li> <li>A wrapper object that is returned by the <strong>CreateSurfaceFromHandle</strong> or <strong>CreateSurfaceFromHwnd</strong> method. +</li> </ul><p>The new content replaces any content that was previously associated with the visual. If the <em>content</em> parameter is {{NULL}}, the visual has no associated content.</p><p>A visual can be associated with a bitmap object or a window wrapper. A bitmap is either a Microsoft DirectX swap chain or a Microsoft DirectComposition surface.</p><p>A window wrapper is created with the <strong>CreateSurfaceFromHwnd</strong> method and is a stand-in for the rasterization of another window, which must be a top-level window or a layered child window. A window wrapper is conceptually equivalent to a bitmap that is the size of the target window on which the contents of the window are drawn. The contents include the target window's child windows (layered or otherwise), and any DirectComposition content that is drawn in the child windows. </p><p>A DirectComposition surface wrapper is created with the <strong>CreateSurfaceFromHandle</strong> method and is a reference to a swap chain. An application might use a surface wrapper in a cross-process scenario where one process creates the swap chain and another process associates the bitmap with a visual.</p><p>The bitmap is always drawn at position (0,0) relative to the visual's coordinate system, although the coordinate system is directly affected by the OffsetX, OffsetY, and Transform properties, as well as indirectly by the transformations on ancestor visuals. The bitmap of a visual is always drawn behind the children of that visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The object that is the new content of this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Adds a new child visual to the children list of this visual.</p> + <p>Child visuals are arranged in an ordered list. The contents of a child visual are drawn in front of (or above) the contents of its parent visual, but behind (or below) the contents of its children.</p><p>The <em>referenceVisual</em> parameter must be an existing child of the parent visual, or it must be {{NULL}}. The <em>insertAbove</em> parameter indicates whether the new child should be rendered immediately above the reference visual in the Z order, or immediately below it.</p><p>If the <em>referenceVisual</em> parameter is {{NULL}}, the specified visual is rendered above or below all children of the parent visual, depending on the value of the <em>insertAbove</em> parameter. If <em>insertAbove</em> is {{TRUE}}, the new child visual is above no sibling, therefore it is rendered below all of its siblings. Conversely, if <em>insertAbove</em> is {{FALSE}}, the visual is below no sibling, therefore it is rendered above all of its siblings.</p><p>The visual specified by the <em>visual</em> parameter cannot be either a child of a single other visual, or the root of a visual tree that is associated with a composition target. If <em>visual</em> is already a child of another visual, <strong>AddVisual</strong> fails. The child visual must be removed from the children list of its previous parent before adding it to the children list of the new parent. If <em>visual</em> is the root of a visual tree, the visual must be dissociated from that visual tree before adding it to the children list of the new parent. To dissociate the visual from a visual tree, call the <strong>{{IDCompositionTarget::SetRoot}}</strong> method and specify either a different visual or {{NULL}} as the <em>visual</em> parameter.</p><p>A child visual need not have been created by the same <strong>{{IDCompositionDevice}}</strong> interface as its parent. When visuals from different devices are combined in the same visual tree, Microsoft DirectComposition composes the tree as it normally would, except that changes to a particular visual take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called on the device object that created the visual. The ability to combine visuals from different devices enables multiple threads to create and manipulate a single visual tree while maintaining independent devices that can be used to commit changes asynchronously</p><p>This method fails if <em>visual</em> or <em>referenceVisual</em> is an invalid reference, or if the visual referenced by the <em>referenceVisual</em> parameter is not a child of the parent visual. These interfaces cannot be custom implementations; only interfaces created by DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to add. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} to place the new child visual in front of the visual specified by the <em>referenceVisual</em> parameter, or {{FALSE}} to place it behind <em>referenceVisual</em>.</p> </dd> + + + <dd> <p>The existing child visual next to which the new visual should be added.</p> </dd> + + + + + <p>Removes a child visual from the children list of this visual.</p> + <p>The child visual is removed from the list of children. The order of the remaining child visuals is not changed.</p><p>This method fails if <em>visual</em> is not a child of the parent visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to remove from the children list. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Removes all visuals from the children list of this visual.</p> + <p>This method can be called even if this visual has no children. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the blending mode for this visual.</p> + <p>The composite mode determines how visual's bitmap is blended with the screen. By default, the visual is blended with "source over" semantics; that is, the colors are blended with per-pixel transparency.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The blending mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Represents a 2D transformation that can be used to modify the coordinate space of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform}}</strong> interface is an abstract interface that represents a 2D affine transformation. Transformations affect the entire visual subtree that is rooted at the visual that the transform is associated with. A transform object can be associated with multiple visuals. When a transform object is modified, all affected visuals are recomposed to reflect the change.</p><p>Transforms operate by modifying the coordinate system for all rendering operations on a visual. For example, ordinarily a bitmap that is associated with a visual draws at position (0,0) and extends the full width and height of the bitmap. If a translation transform is applied, the bitmap draws at a position that is offset by that transform. If a scale transform is applied, the extent covered by the bitmap is affected by the scale transform. More than one transform can be simultaneously applied to a visual by using the <strong>{{IDCompositionDevice::CreateTransformGroup}}</strong> interface.</p> + + + + <p>Represents a 3D transformation effect that can be used to modify the rasterization of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform3D}}</strong> interface is an abstract interface that represents a 3D perspective transformation effect. A 3D transform object can be associated with multiple visuals and multiple effect groups. When a 3D transform object is modified, all affected visuals are recomposed to reflect the change.</p> + + + + <p>Represents a 2D transformation that affects only the offset of a visual along the x-axis and y-axis.</p> + <p>A translation transform represents the following 3-by-2 matrix:</p><p></p><p>The effect is simply to offset the coordinate system by <em>x</em> and <em>y</em>.</p> + + + + <p>Changes the value of the OffsetX property of a 2D translation transform. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method perfoms an affine transformation, which moves every point by a fixed distance in the same direction. It is similar to shifting the origin of the coordinate space. </p><p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the OffsetX property was previously animated, this method removes the animation and sets the OffsetX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The distance to translate along the x-axis, in pixels.</p> </dd> + + + + + Changes or animates the value of the OffsetY property of a 2D translation transform. The OffsetY property specifies the translation along the y-axis. + + + + <p>Represents a 3D transformation that affects the offset of a visual along the x-axis, y-axis, and z-axis. </p> + <p>A 3D translation transform represents the following 4-by-4 matrix: </p><p></p><p> The effect is to offset the blending position of the visual's subtree by <em>x</em>, <em>y</em>, and <em>z</em>.</p> + + + + <p>Animates the value of the OffsetX property of a 3D translation transform effect. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetX property unless this method is called again. If the OffsetX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetY property of a 3D translation transform effect. The OffsetY property specifies the distance to translate along the y-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetY property unless this method is called again. If the OffsetY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetZ property of a 3D translation transform effect. The OffsetZ property specifies the distance to translate along the z-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetZ property unless this method is called again. If the OffsetZ property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetZ property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Animates the value of the ScaleX property of a 2D scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 2D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the ScaleZ property of a scale transform. The ScaleZ property specifies the scale factor along the z-axis. + + + + <p>Animates the value of the ScaleX property of a scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 3D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the ScaleZ property of a 3D scale transform. The ScaleZ property specifies the scale factor along the z-axis.</p> + <p>This method fails if the <em>scaleZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleZ property was previously animated, this method removes the animation and sets the ScaleZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the CenterX property of a 3D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterX property was previously animated, this method removes the animation and sets the CenterX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new x-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 3D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Changes the value of the CenterZ property of a 3D scale transform. The CenterZ property specifies the z-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Represents a 2D transformation that affects the rotation of a visual around the z-axis. The coordinate system is rotated around the specified center point. </p> + <p>A rotate transform represents the following 3-by-3 matrix:</p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise, and to apply the corresponding translation such that the center point does not move.</p> + + + + <p>Animates the value of the Angle property of a 2D rotation transform. The Angle property specifies the rotation angle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterY property of a 2D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a 3D transformation that affects the rotation of a visual along an arbitrary axis in 3D space. The coordinate system is rotated around the specified center point. </p> + <p>A 3D rotate transform represents the following 4-by-4 matrix:</p><p></p><p>where the <em>offsetX</em>, <em>offsetY</em>, and <em>offsetZ</em> values of the matrix are the following: </p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise around the specified axis, and to apply the corresponding translation such that the center point does not move.</p><p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p><p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p> + + + + <p>Animates the value of the Angle property of a 3D rotation transform. The Angle property specifies the rotation angle. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected 3D transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the AxisX property of a 3D rotation transform. The AxisX property specifies the x-coordinate for the axis vector of rotation. The default value is zero. + + + + <p>Changes the value of the AxisY property of a 3D rotation transform. The AxisY property specifies the y-coordinate for the axis vector of rotation. The default value is zero.</p> + <p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p><p>This method fails if the <em>axisY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AxisY property was previously animated, this method removes the animation and sets the AxisY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate for the axis vector of rotation. </p> </dd> + + + + + Changes or animates the value of the AxisZ property of a 3D rotation transform. The AxisZ property specifies the z-coordinate for the axis vector of rotation. The default value is 1.0. + + + + Changes or animates the value of the CenterX property of a 3D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed. The default value is zero. + + + + <p>Animates the value of the CenterY property of a 3D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterZ property of a 3D rotation transform. The CenterZ property specifies the z-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Animates the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the AngleX property unless this method is called again. If the AngleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that represents how the value of the AngleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method fails if the <em>angleX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleX property was previously animated, this method removes the animation and sets the AngleX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the x-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Changes the value of the AngleY property of a 2D skew transform. The AngleY property specifies the skew angle along the y-axis.</p> + <p>This method fails if the <em>angleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleY property was previously animated, this method removes the animation and sets the AngleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the y-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D skew transform. The CenterX property specifies the x-coordinate of the point about which the skew is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D skew transform. The CenterY property specifies the y-coordinate of the point about which the skew is performed.</p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + <p>Represents an arbitrary affine 2D transformation defined by a 3-by-2 matrix.</p><p></p> + + + + <p>Changes all values of the matrix of this 2D transform.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 2D transform.</p> </dd> + + + + + <p>Animates the value of one element of the matrix of this 2D transform.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the element unless this method is called again. If the element was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 2, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 1, inclusive.</p> </dd> + + + <dd> <p>An animation that represents how the value of the specified element changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents an arbitrary 3D transformation defined by a 4-by-4 matrix.</p><p></p> + <p>A 3D matrix transform represents the following 4-by-4 matrix:</p><p></p><p> The application can set any of the values in the first three columns. Note that the fourth column is padded to allow for matrix concatenation. </p> + + + + <p>Changes all values of the matrix of this 3D transformation effect.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 3D transformation effect.</p> </dd> + + + + + <p>Changes the value of one element of the matrix of this 3D transform.</p> + <p>This method fails if the <em>value</em> parameter is NaN, positive infinity, or negative infinity.</p><p>If the specified element was previously animated, this method removes the animation and sets the element to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The new value of the specified element.</p> </dd> + + + + + <p>Represents a bitmap effect that modifies the rasterization of a visual's subtree. </p> + <p><strong>{{IDCompositionEffect}}</strong> is an abstract interface that represents a bitmap effect. An effect applies to the entire visual subtree rooted at the visual that the effect is associated with. An effect object can be associated with multiple visuals. When an effect object is modified, all affected visuals are recomposed to reflect the change. </p><p>More than one effect can be simultaneously applied to a visual by using the <strong>{{IDCompositionEffectGroup}}</strong> interface.</p> + + + + <p>Represents a group of bitmap effects that are applied together to modify the rasterization of a visual's subtree. </p> + + + + <p>Changes the value of the Opacity property.</p> + <p>The opacity is interpreted as completely transparent for all values less than or equal to 0, and as completely opaque for all values greater than or equal to 1. All values between 0 and 1 represent partial opacity. </p><p>This method fails if the <em>opacity</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the Opacity property was previously animated, this method removes the animation and sets the Opacity property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new value of the Opacity property.</p> </dd> + + + + + <p>Sets the 3D transformation effect object that modifies the rasterization of the visuals that this effect group is applied to.</p> + <p>This method fails if <em>transform3D</em> is an invalid reference, or if the reference was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this effect group. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p><p>If the <em>transform3D</em> parameter is {{NULL}}, the effect group does not apply any perspective transformations to the visuals. Setting the transform to {{NULL}} is equivalent to setting the transform to an <strong>{{IDCompositionMatrixTransform3D}}</strong> object where the specified matrix is the identity matrix. However, an application should use a {{NULL}} transform whenever possible because it is slightly faster. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>Pointer to an <strong>{{IDCompositionTransform3D}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a clip object that is used to restrict the rendering of a visual subtree to a rectangular area. </p> + + + + <p>Represents a clip object that restricts the rendering of a visual subtree to the specified rectangular region. Optionally, the clip object may have rounded corners specified.</p> + + + + <p>Animates the value of the Left property of a clip rectangle. The Left property specifies the x-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Left property unless this method is called again. If the Left property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Left property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Top property of a clip rectangle. The Top property specifies the y-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Top property unless this method is called again. If the Top property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Top property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Right property of a clip rectangle. The Right property specifies the x-coordinate of the lower-right corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Right property unless this method is called again. If the Right property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Right property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the Bottom property of a clip object. The Bottom property specifies the y-coordinate of the lower-right corner of the clip rectangle. </p> + <p> This method fails if the <em>bottom</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the Bottom property was previously animated, this method removes the animation and sets the Bottom property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the Bottom property, in pixels. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusX property of this clip. The TopLeftRadiusX property specifies the x radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the x radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusY property of this clip. The TopLeftRadiusY property specifies the y radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the TopRightRadiusX property of this clip. The TopRightRadiusX property specifies the x radius of the ellipse that rounds the top-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the TopRightRadiusY property of this clip. The TopRightRadiusY property specifies the y radius of the ellipse that rounds the top-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + Changes or animates the value of the BottomLeftRadiusX property of this clip. The BottomLeftRadiusX property specifies the x radius of the ellipse that rounds the lower-left corner of the clip. + + + + <p>Changes the value of the BottomLeftRadiusY property of this clip. The BottomLeftRadiusY property specifies the y radius of the ellipse that rounds the lower-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the BottomRightRadiusX property of this clip. The BottomRightRadiusX property specifies the x radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the BottomRightRadiusY property of this clip. The BottomRightRadiusY property specifies the y radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Marks the end of drawing on this Microsoft DirectComposition surface object.</p> + <p>This method completes an update that was begun by a previous call to the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. After this method returns, the application can start another update on the same surface object or on a different one. </p><p>If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> before calling <strong>{{IDCompositionSurface::EndDraw}}</strong> for a surface with a pending update, that update is not processed by that Commit call. The update only takes effect on screen after the application calls <strong>{{IDCompositionSurface::EndDraw}}</strong> followed by the {{IDCompositionDevice2::Commit}} method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Suspends the drawing on this Microsoft DirectComposition surface object.</p> + <p>Because only one surface can be open for drawing at a time, calling <strong>SuspendDraw</strong> allows the user to call <strong>{{IDCompositionSurface::BeginDraw}}</strong> on a different surface. Drawing to this surface can be resumed by calling <strong>{{IDCompositionSurface::ResumeDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Resumes drawing on this Microsoft DirectComposition surface object.</p> + <p> This method allows the surface update to continue unless there are other surfaces that have active, unsuspended draws.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Scrolls a rectangular area of a Microsoft DirectComposition logical surface.</p> + <p>This method allows an application to blt/copy a sub-rectangle of a DirectComposition surface object. This avoids re-rendering content that is already available. </p><p>The <em>scrollRect</em> rectangle must be contained in the boundaries of the surface. If the <em>scrollRect</em> rectangle goes outside the bounds of the surface, this method fails. </p><p>The bits copied by the scroll operation (source) are defined by the intersection of the <em>scrollRect</em> and <em>clipRect</em> rectangles. </p><p>The bits shown on the screen (destination) are defined by the intersection of the offset source rectangle and <em>clipRect</em>. </p><p>Scroll operations can only be called before calling <strong>BeginDraw</strong> or after calling <strong>EndDraw</strong>. Suspended or resumed surfaces are not candidates for scrolling because they are still being updated. </p><p>The application is responsible for ensuring that the scrollable area for an <strong>{{IDCompositionVirtualSurface}}</strong> is limited to valid pixels. The behavior for invalid pixels in the <em>scrollRect</em> is undefined. </p><p>Virtual surface sub-rectangular areas that were discarded by a trim or a resize operation can't be scrolled even if the trim or resize is applied in the same batch. <strong>Trim</strong> and <strong>Resize</strong> are applied immediately. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The rectangular area of the surface to be scrolled, relative to the upper-left corner of the surface. If this parameter is {{NULL}}, the entire surface is scrolled.</p> </dd> + + + <dd> <p>The <em>clipRect</em> clips the destination (<em>scrollRect</em> after offset) of the scroll. +The only bitmap content that will be scrolled are those that remain inside the clip rectangle after the scroll is completed.</p> </dd> + + + <dd> <p>The amount of horizontal scrolling, in pixels. Use positive values to scroll right, and negative values to scroll left.</p> </dd> + + + <dd> <p>The amount of vertical scrolling, in pixels. Use positive values to scroll down, and negative values to scroll up.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Discards pixels that fall outside of the specified trim rectangles.</p> + <p>A virtual surface might not have enough storage for every pixel in the surface. An application instructs the composition engine to allocate memory for the surface by calling the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method, and to release memory for the surface by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method. The array of rectangles represents the regions of the virtual surface that should remain allocated after this method returns. Any pixels that are outside the specified set of rectangles are no longer used for texturing, and their memory may be reclaimed. </p><p>If the <em>count</em> parameter is zero, no pixels are kept, and all of the memory allocated for the virtual surface may be reclaimed. The <em>rectangles</em> parameter can be {{NULL}} only if the <em>count</em> parameter is zero. This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of rectangles to keep.</p> </dd> + + + <dd> <p>The number of rectangles in the <em>rectangles</em> array.</p> </dd> + + + + + <p>Represents a filter effect.</p><p>{{IDCompositionFilterEffect}} exposes a subset of Direct2D's image effects through Direction Composition for use in {{CSS}} filters in the browser platform.</p> + + + + <p>Sets the the input at an index to the specified filter effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the index the to apply the filter effect at.</p> </dd> + + + <dd> <p>The filter effect to apply. The following effects are available: </p> <ul> <li> <strong>{{IDCompositionAffineTransform2DEffect}}</strong> </li> <li> <strong>{{IDCompositionArithmeticCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionBlendEffect}}</strong> </li> <li> <strong>{{IDCompositionBrightnessEffect}}</strong> </li> <li> <strong>{{IDCompositionColorNatrixEffect}}</strong> </li> <li> <strong>{{IDCompositionCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionFloodEffect}}</strong> </li> <li> <strong>{{IDCompositionGaussianBlurEffect}}</strong> </li> <li> <strong>{{IDCompositionHueRotationEffect}}</strong> </li> <li> <strong>{{IDCompositionLinearTransferRffect}}</strong> </li> <li> <strong>{{IDCompositionSaturationRffect}}</strong> </li> <li> <strong>{{IDCompositionShadowEffect}}</strong> </li> <li> <strong>{{IDCompositionTableTransferEffect}}</strong> </li> <li> <strong>{{IDCompositionTurbulenceEffect}}</strong> </li> </ul> </dd> + + + <dd> <p>Flags to apply to the filter effect. </p> </dd> + + + + + <p></p> + + + + <p>Sets the amount of blur to be applied to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. A value of zero {{DIPs}} disables this effect entirely. </p> </dd> + + + + + <p>Sets the mode used to calculate the border of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode used to calculate the border of the image.</p> </dd> + + + + + <p>The brightness effect controls the brightness of the image.</p> + + + + <p>Sets the upper portion of the brightness transfer curve. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The upper portion of the brightness transfer curve. The white point adjusts the appearance of the brighter portions of the image. +This vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Specifies the lower portion of the brightness transfer curve for the brightness effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The lower portion of the brightness transfer curve. The black point adjusts the appearance of the darker portions of the image. The vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Sets the x value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the white point. This value must be between 0 and 1.</p> </dd> + + + + + <p>Sets the y value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the white point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the x value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the black point.</p> </dd> + + + + + <p>Sets the y value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the black point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p>Sets the matrix used by the effect to multiply the {{RGBA}} values of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The matrix used by the effect to multiply the {{RGBA}} values of the image. The matrix is column major and is applied as shown in the following equation: </p></dd> + + + + + <p>Sets an element of the color matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>An animation that represents how the element value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the alpha mode of the output for the color matrix effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The alpha mode of the output for the color matrix effect.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p> The shadow effect is used to generate a shadow from the alpha channel of an image. The shadow is more opaque for higher alpha values and more transparent for lower alpha values. You can set the amount of blur and the color of the shadow. </p> + + + + <p>Sets the amount of blur to be applied to the alpha channel of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the alpha channel of the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. </p> </dd> + + + + + <p>Sets color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The color of the shadow.</p> </dd> + + + + + <p>Sets the red value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the red value for the color of the shadow changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the green value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The green value for the color of the shadow.</p> </dd> + + + + + <p>Sets the blue value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blue value for the color of the shadow.</p> </dd> + + + + + <p>Sets the alpha value for the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the alpha value for the effect changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The hue rotate effect alters the hue of an image by applying a color matrix based on the rotation angle. </p> + + + + <p>Sets the angle to rotate the hue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the angle value changes over time. The effect calculates a color matrix based on the rotation angle (?) according to the following matrix equations: </p><p> This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> This effect is used to alter the saturation of an image. The saturation effect is a specialization of the?color matrix?effect. </p> + + + + <p>Sets the saturation of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the saturation of the image changes over time. This parameter must not be {{NULL}}. You can set the saturation to a value between 0 and 1. If you set it to 1 the output image is fully saturated. If you set it to 0 the output image is monochrome. The saturation value is unitless. The effect calculates a color matrix based on the saturation value (s in the equation here) using the following equation: </p></dd> + + + + + <p> The turbulence effect is used to generate a bitmap based on the Perlin noise function. The turbulence effect has no input image. </p> + + + + <p>Sets the coordinates where the turbulence output is generated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The coordinates where the turbulence output is generated. The algorithm used to generate the Perlin noise is position dependent, so a different offset results in a different output. This value is not bounded and the units are specified in {{DIPs}} </p> <strong>Note</strong>??Note The offset does not have the same effect as a translation because the noise function output is infinite and the function will wrap around the tile. ? </dd> + + + + + <p>Sets the base frequencies in the X and Y direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The base frequencies in the X and Y direction. This must be greater than 0. The units are specified in 1/{{DIPs}}. A value of 1 (1/{{DIPs}}) for the base frequency results in the Perlin noise completing an entire cycle between two pixels. The ease interpolation for these pixels results in completely random pixels, since there is no correlation between the pixels. A value of 0.1(1/{{DIPs}}) for the base frequency results in the Perlin noise function repeating every 10 {{DIPs}}. This results in correlation between pixels and the typical turbulence effect is visible. </p> </dd> + + + + + <p>Sets the size of the turbulence output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the turbulence output</p> </dd> + + + + + <p>Sets the number of octaves for the noise function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of octaves for the noise function. This value must be greater than 0.</p> </dd> + + + + + <p>Sets the seed for the pseudo random generator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The seed for the pseudo random generator. This value is unbounded.</p> </dd> + + + + + <p>Sets the turbulence noise mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The turbulence noise mode. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function.</p> </dd> + + + + + <p>Specifies whether stitching is on or off.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether stitching is on or off. The base frequency is adjusted so that the output bitmap can be stitched. This is useful if you want to tile multiple copies of the turbulence effect output. If this value is {{TRUE}}, the output bitmap can be tiled (using the tile effect) without the appearance of seams and the base frequency is adjusted so that output bitmap can be stitched. If this value is {{FALSE}}, the base frequency is not adjusted, so seams may appear between tiles if the bitmap is tiled. </p> </dd> + + + + + <p> The linear transfer effect is used to map the color intensities of an image using a linear function created from a list of values you provide for each channel. </p> + + + + <p>Sets the Y-intercept of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Y-intercept of the linear function for the red channel.</p> </dd> + + + + + <p>Sets the slope of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the red channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} the effect applies the RedLinearTransfer function to the red channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the green channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The slope of the linear function for the green channel.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenLinearTransfer function to the green channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the blue channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueLinearTransfer function to the blue channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the the Y-intercept of the linear function for the alpha channel. changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the alpha channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaLinearTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. </p> </dd> + + + + + <p>The table transfer effect is used to map the color intensities of an image using a transfer function created from interpolating a list of values you provide.</p> + + + + <p>Sets the list of values used to define the transfer function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the red channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the green channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the blue channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the alpha channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} it applies the RedTableTransfer function to the red channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenTableTransfer function to the green channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueTableTransfer function to the Blue channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaTableTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. The effect clamps the values before it premultiplies the alpha. </p> </dd> + + + + + <p>Sets a value in the red table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the green table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The value to set.</p> </dd> + + + + + <p>Sets a value in the blue table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the alpha table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The new value.</p> </dd> + + + + + <p> The composite effect is used to combine 2 or more images. This effect has 13 different composite modes. The composite effect accepts 2 or more inputs. When you specify 2 images, destination is the first input (index 0) and the source is the second input (index 1). If you specify more than 2 inputs, the images are composited starting with the first input and the second and so on. </p> + + + + <p>Sets the mode for the composite effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode for the composite effect.</p> </dd> + + + + + <p> The Blend Effect is used to combine 2 images. </p> + + + + <p>Sets the blend mode to use when the blend effect combines the two images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blend mode to use when the blend effect combines the two images.</p> </dd> + + + + + <p>The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images.</p> + + + + <p>Sets the coefficients for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The coefficients for the equation used to composite the two input images.</p> </dd> + + + + + <p>Specifies whether to clamp color values before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether to clamp the color values. A value of {{TRUE}} causes color values to be clamped between 0 and 1.</p> </dd> + + + + + <p>Sets the first coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the second coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the second coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the third coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the third coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the fourth coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the fourth coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images. </p> + + + + <p>Sets the interpolation mode of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the interpolation mode of the effect.</p> </dd> + + + + + <p>Sets the border mode to use with the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the border mode to use with the effect.</p> </dd> + + + + + <p>Sets the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the transform matrix for the effect to use.</p> </dd> + + + + + <p>Sets an element of the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>The new value of the element.</p> </dd> + + + + + <p>Sets the sharpness of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the sharpness value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice2::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once.</p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice2::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a fence. This interface extends <strong>{{ID3D12Fence}}</strong>, and supports the retrieval of the flags used to create the original fence. This new feature is useful primarily for opening shared fences.</p><strong>Note</strong> <strong>{{ID3D12Fence1}}</strong> was introduced in the Windows 10 Fall Creators Update, and is the latest version of the <strong>{{ID3D12Fence}}</strong> interface. Applications targeting Windows 10 Fall Creators Update and later should use <strong>{{ID3D12Fence1}}</strong> instead of earlier versions. + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created. </p> </dd> + + + <dd> <p>The height of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method.</p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, CenterZ, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p><p>To set the opacity and transform values, use the corresponding methods on the <strong>{{IDCompositionEffectGroup}}</strong> that was created.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of {{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables display of performance debugging counters.</p> + <p>Microsoft DirectComposition keeps a count of how many DirectComposition devices have performance counters enabled, for the entire desktop session. If the count is non-zero, the performance counters are displayed. Therefore, disabling the counters may not make them go away if another device is also requesting display of the counters.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function. +</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the surface reference in calls to the {{IDCompositionVisual::SetContent}} method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. </p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of those visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the {{DWMWA_CLOAK}} flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying {{WS_EX_LAYERED}} when creating the window with the <strong>CreateWindowEx</strong> function or by setting {{WS_EX_LAYERED}} via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the opacity mode for this visual.</p> + <p>The opacity mode affects how the Opacity property of an effect group object affects the composition of a visual sub-tree. DirectComposition supports two opacity modes: Layer and Multiply. In Layer mode, each visual sub-tree can be logically viewed as a bitmap that contains the opaque rasterization of that entire sub-tree, to which the opacity value is then applied. In this manner, overlapping opaque surfaces blend with the sub-tree?s background, but not with each other. In contrast, in Multiply mode the opacity is applied individually to each surface as it is composed, so surfaces blend with each other. Multiply mode is faster than Layer mode and always preferred if the visual tree contains entirely non-overlapping contents. However, Multiply mode may produce undesired visual results for overlapping elements. </p><p>By default, a visual inherits the opacity mode of its parent visual, which may inherit the opacity mode of its parent visual, and so on. A visual uses the {{DCOMPOSITION_OPACITY_MODE_LAYER}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_OPACITY_MODE_INHERIT}}. If no visuals set the opacity mode, the default for the entire visual tree is {{DCOMPOSITION_OPACITY_MODE_LAYER}}. </p><p>If the <em>opacityMode</em> parameter is anything other than {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, this visual's surfaces are composed with the specified opacity mode. In addition, this opacity mode becomes the new default for the children of the current visual. That is, if the opacity mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, the surfaces the child visuals are composed using the opacity mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The opacity mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Specifies whether or not surfaces that have 3D transformations applied to them should be displayed when facing away from the observer.</p> + <p>The back face visibility property affects how surfaces that have 3D transformations applied are rendered. </p><p>By default, a visual inherits the back face visibility property of its parent visual, which may inherit the back face visibility property of its parent visual, and so on. A visual uses the {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}. If no visuals set the back face visibility property, the default for the entire visual tree is {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}}. </p><p>If the <em>visibility</em> parameter is anything other than {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, this visual's surfaces are composed with the specified visibility mode. In addition, this visibility mode becomes the new default for the children of the current visual. That is, if the visibility mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, the surfaces the child visuals are composed using the visibility mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The back face visibility to use when composing surfaces in this visual?s sub-tree to the screen.</p> </dd> + + + + + <p>Represents a debug visual.</p> + + + + <p>Enables a visual heatmap that represents overdraw regions.</p> + <p>Heatmaps can be enabled by calling <strong>EnableHeatMap</strong>. The heatmaps are drawn on the source of the VisualDebug visual and child visuals. The heatmaps are represented in a specified color for all visual content. The heatmap color must have an transparency in order to see the overlaying overdraw regions. The colored surfaces are blended together to visually show all overdraw regions in a single view. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd></dd> + + + + + <p>Disables visual heatmaps.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables highlighting visuals when content is being redrawn.</p> + <p>Highlighting redraw regions can be enabled by calling <strong>EnableRedrawRegions</strong>. With this function, redrawn client areas are visually highlighted every frame the visual is updated. Redraw regions are drawn on the source of the VisualDebug and child visuals. Redraw is triggered when properties of a visual are updated. The updated visusal does not neccessarly need to visually change to trigger a redraw. The highlighting will cycle through Blue, Yellow, Pink and Green to provide an order of which content is being updated. The redraw regions are only visible while the window of the VisualDebug is being updated. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables visual redraw regions.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A newly created virtual surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> or <strong>{{IDCompositionVirtualSurface::Resize}}</strong> method.</p><p>Microsoft DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created virtual surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p> Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition. </p> + + + + <p>Creates an instance of <strong>{{IDCompositionGaussianBlurEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionBrightnessEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionColorMatrixEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionShadowEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionHueRotationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionSaturationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTurbulenceEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionLinearTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTableTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionCompositeEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionBlendEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionArithmeticCompositeEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionAffineTransform2DEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Changes the value of OffsetZ property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value.</p> </dd> + + + + + <p>Sets the value of the visual's opacity property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the opacity property.</p> </dd> + + + + + <p>Sets the Transform property of this visual to the specified 3D transform object.</p> + <p>Setting the Transform property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>If the Transform property previously specified a transform matrix, the newly specified transform object replaces the transform matrix.</p><p>A transformation specified by the Transform property is applied after the OffsetX and OffsetY properties. In other words, the effect of setting the Transform property and the OffsetX and OffsetY properties is the same as setting only the Transform property on a transform group where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has those same OffsetX and OffsetY values. However, you should use the <strong>{{IDCompositionVisual::SetOffsetX}}</strong> and <strong>SetOffsetY</strong> methods whenever possible because they are slightly faster. </p><p>This method fails if <em>transform</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p><p>If the <em>transform</em> parameter is {{NULL}}, the coordinate system of this visual is transformed only by its OffsetX and OffsetY properties. Setting the Transform property to {{NULL}} is equivalent to setting it to an <strong>{{IDCompositionMatrixTransform}}</strong> object where the specified matrix is the identity matrix. However, an application should set the Transform property to {{NULL}} whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The transform object that is used to modify the coordinate system of this visual. This parameter can point to an <strong>{{IDCompositionTransform}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the visual's Visible property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the visible property.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the <strong>{{IDCompositionDevice::Commit}}</strong> method.</p><p>The {{DXGI}} device specified by <em>dxgiDevice</em> is used to create all DirectComposition surface objects. In particular, the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method returns an interface reference to a {{DXGI}} surface that belongs to the device specified by the <em>dxgiDevice</em> parameter. </p><p>When creating the {{DXGI}} device, developers must specify the <strong>{{D3D11_CREATE_DEVICE}} {{BGRA_SUPPORT}}</strong> or <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag for Direct2D interoperability with Microsoft Direct3D resources.</p><p>The <em>iid</em> parameter must be <code>__uuidof({{IDCompositionDevice}})</code>, and the <em>dcompositionDevice</em> parameter receives a reference to an <strong>{{IDCompositionDevice}}</strong> interface. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The {{DXGI}} device to use to create DirectComposition surface objects.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. </p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the {{IDCompositionDevice2::Commit}} method. </p><p>The <em>renderingDevice</em> parameter may point to a {{DXGI}}, Direct3D, Direct2D device object, or it may be {{NULL}}. This parameter affects the behavior of the {{IDCompositionDevice2::CreateSurface}}, {{IDCompositionDevice2::CreateVirtualSurface}} and {{IDCompositionSurface::BeginDraw}} methods. </p><p>If the <em>renderingDevice</em> parameter is {{NULL}} then the returned DirectComposition device cannot directly create DirectComposition surface objects. In particular, {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods return {{E_INVALIDARG}}, regardless of the supplied parameters. However, such a DirectComposition device object can still be used to indirectly create surfaces if the application creates a surface factory object via the {{IDCompositionDevice2::CreateSurfaceFactory}} method. </p><p>If the <em>renderingDevice</em> parameter points to a {{DXGI}} device, that device is used to allocate all video memory needed by the {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods. Moreover, the {{IDCompositionSurface::BeginDraw}} method returns an interface reference to a {{DXGI}} surface that belongs to that same {{DXGI}} device. </p><p>If the <em>renderingDevice</em> parameter points to a Direct2D device object, DirectComposition extracts from it the underlying {{DXGI}} device object and uses it as if that {{DXGI}} device object had been passed in as the <em>renderingDevice</em> parameter. However, passing in a Direct2D object further causes {{IDCompositionSurface::BeginDraw}} to accept __uuidof({{ID2D1DeviceContext}}) for its <em>iid</em> parameter for any objects created with the {{IDCompositionDevice2::CreateSurface}} or {{IDCompositionDevice2::CreateVirtualSurface}} methods. In that case, the Direct2D device context object returned by {{IDCompositionSurface::BeginDraw}} will belong to the same Direct2D device passed as the <em>renderingDevice</em> parameter. </p><p>If the <em>iid</em> parameter is __uuidof({{IDCompositionDevice}}), then the dcompositionDevice parameter receives a reference to a Version 1 {{IDCompositionDevice}} interface, but the underlying object is a Version 2 desktop device object. The application can later obtain a reference to either the {{IDCompositionDevice2}} or {{IDCompositionDesktopDevice}} interfaces by calling the <strong>QueryInterface</strong> method on that device. Similarly, all DirectComposition objects created from such a device are Version 2 objects under the covers. For example, the {{IDCompositionDevice::CreateVisual}} method will return an {{IDCompositionVisual}} interface to the created visual, but the application can obtain a reference to the {{IDCompositionVisual2}} interface via the QueryInterface method. This behavior allows an application written to the DirectComposition {{V1}} {{API}} to incrementally adopt DirectComposition {{V2}} features by changing the device creation method from {{DCompositionCreateDevice}} to {{DCompositionCreateDevice2}}, while still requesting the {{IDCompositionDevice2}} interface. This allows the rest of the code to remain unchanged, while allowing the application to use QueryInterface in just the places where new functionality is needed. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new DirectComposition device object, which can be used to create other DirectComposition objects.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that can be bound to a +Microsoft DirectX swap chain or swap buffer and associated +with a visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The requested access to the composition surface object. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>0x0000L</dt> </dl> </td><td> <p>No access.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_READ}}</strong></dt> <dt>0x0001L</dt> </dl> </td><td> <p>Read access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_WRITE}}</strong></dt> <dt>0x0002L</dt> </dl> </td><td> <p>Write access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_ALL_ACCESS}}</strong></dt> <dt>0x0003L</dt> </dl> </td><td> <p>Read/write access. Always specify this flag except when duplicating a surface in another process, in which case set <em>desiredAccess</em> to 0.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains the security descriptor for the composition surface object, and specifies whether the handle of the composition surface object is inheritable when a child process is created. If this parameter is {{NULL}}, the composition surface object is created with default security attributes that grant read and write access to the current process, but do not enable child processes to inherit the handle.</p> </dd> + + + <dd> <p>The handle of the new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse wheel messages to the given {{HWND}}. This will fail if there is already an interaction attached to this visual. After calling this {{API}}, the device that owns the visual must be committed. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse button down and any subsequent move and up events to the given {{HWND}}. There is no move thresholding; when enabled, all events including and following the down are unconditionally redirected to the specified window. After calling this {{API}}, the device owning the visual must be committed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Represents a function for animating one or more properties of one or more Microsoft DirectComposition objects. Any object property that takes a scalar value can be animated.</p> + + + + <p>Resets the animation function so that it contains no segments.</p> + <p>This method returns the animation function to a clean state, as when the animation was first constructed. After this method is called, the next segment to be added becomes the first segment of the animation function. Because it is the first segment, it can have any non-negative beginning offset.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the absolute time at which the animation function starts.</p> + <p>By default, an animation function starts when the first frame of the animation takes effect. For example, if an application creates a simple animation function with a single primitive at offset zero, associates the animation with some property, and then calls the <strong>{{IDCompositionDevice::Commit}}</strong> method, the first frame that includes the commit samples the animation at offset zero for the first primitive. This implies that the actual default start time of all animations varies depending on the time between when the application creates the animation and calls <strong>Commit</strong>, to the time it takes the composition engine to pick up the committed changes. The application can use the <strong>SetAbsoluteBeginTime</strong> method to exercise finer control over the starting time of an animation. </p><p>This method does not control when animations take effect; it only affects how animations are sampled after they start. If the application specifies the exact time of the next frame as the absolute begin time, the result is the same as not calling this method at all. If the specified begin time is different from the time of the next frame, the result is one of following: </p><ul> <li>If the specified time is later than the next frame time, the animation start is delayed until the specified begin time.</li> <li>If the specified time is earlier than the next frame time, the beginning of the animation is dropped and sampling starts into the animation function. +</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The starting time for this animation.</p> </dd> + + + + + <p>Adds a cubic polynomial segment to the animation function.</p> + <p>A cubic segment transitions time along a cubic polynomial. For a given time input (t), the output value is given by the following equation. </p><p><em>x</em>(<em>t</em>) = <em>at</em>? + <em>bt</em>? + <em>ct</em> + <em>d</em></p><p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p><p>If all coefficients except <em>constantCoefficient</em> are zero, the value of this segment remains constant over time, and the animation does not cause a recomposition for the duration of the segment.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect.</p> </dd> + + + <dd> <p>The constant coefficient of the polynomial.</p> </dd> + + + <dd> <p>The linear coefficient of the polynomial.</p> </dd> + + + <dd> <p>The quadratic coefficient of the polynomial.</p> </dd> + + + <dd> <p>The cubic coefficient of the polynomial.</p> </dd> + + + + + <p>Adds a sinusoidal segment to the animation function.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity, or if the <em>beginOffset</em> parameter is negative. </p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect. </p> </dd> + + + <dd> <p>A constant that is added to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the time offset, in Hertz.</p> </dd> + + + <dd> <p>A constant that is added to the time offset, in degrees.</p> </dd> + + + + + <p>Adds a repeat segment that causes the specified portion of an animation function to be repeated.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>This animation segment remains in effect until the begin time of the next segment. If the animation function contains no more segments, this segment remains in effect indefinitely.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation to the point at which the repeat should begin.</p> </dd> + + + <dd> <p>The duration, in seconds, of a portion of the animation immediately preceding the begin time that is specified by <em>beginOffset</em>. This is the portion that will be repeated.</p> </dd> + + + + + <p>Adds an end segment that marks the end of an animation function. </p> + <p>When the specified offset is reached, the property or properties affected by this animation are set to the specified final value, and then the animation stops. If no end segment is added, the final segment of the animation function runs indefinitely. Calling this method is semantically identical to making the last segment of the animation function a cubic polynomial where the cubic, quadratic, and linear coefficients are all zeros, and the constant coefficient is the desired final value.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>endOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>After this method is called, all methods on this animation object fail except the <strong>{{IDCompositionAnimation::Reset}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when the function ends.</p> </dd> + + + <dd> <p>The final value of the animation.</p> </dd> + + + + + <p>Specifies the interpolation mode to be used when a bitmap is composed with any transform where the pixels in the bitmap don't line up exactly one-to-one with pixels on screen. </p> + <p>The default interpolation mode for a visual is <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If all visuals in a visual tree specify this mode, the default for all visuals is nearest neighbor sampling, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmaps are interpolated by using nearest-neighbor sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated by using linear sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated according to the mode established by the parent visual.</p> </dd> + + + + + <p>Specifies the border mode to use when composing a bitmap or applying a clip with any transform such that the edges of the bitmap or clip are not axis-aligned with integer coordinates. </p> + <p>The default border mode for any given visual is <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, which delegates the determination of the border mode to the parent visual. If all visuals in a visual tree specify this mode, the default for all visuals is aliased rendering, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmap and clip edges are antialiased.</p> </dd> + + + <dd> <p>Bitmap and clip edges are aliased. See Remarks.</p> </dd> + + + <dd> <p>Bitmap and clip edges are drawn according to the mode established by the parent visual.</p> </dd> + + + + + <p>The mode to use to blend the bitmap content of a visual with the render target.</p> + <p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The bitmap colors are inverted. </p> </dd> + + + <dd> <p>Bitmap colors subtract for color channels in the background. </p> </dd> + + + <dd> <p>Bitmaps are blended according to the mode established by the parent visual. </p> </dd> + + + + + <p>Specifies the backface visibility to be applied to a visual. </p> + + + <dd> <p>Surfaces in this visual's sub-tree are visible regardless of transformation.</p> </dd> + + + <dd> <p>Surfaces in this visual's sub-tree are only visible when facing the observer.</p> </dd> + + + <dd> <p>The back face visibility is the same as that of the target visual's parent visual.</p> </dd> + + + + + <p>Specifies how the effective opacity value of a visual is applied to that visual?s content and children.</p> + + + <dd> <p>The target visual defines a logical layer into which its entire sub-tree is composed with a starting effective opacity of 1.0. The original opacity value is then used to blend the layer onto the visual?s background.</p> </dd> + + + <dd> <p>The opacity value is multiplied with the effective opacity of the parent visual and the result is then individually applied to each piece of content in this visual?s sub-tree.</p> </dd> + + + <dd> <p>The opacity mode is the same as that of the target visual?s parent visual.</p> </dd> + + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Describes timing and composition statistics for a frame.</p> + <p>The <strong>{{IDCompositionDevice::GetFrameStatistics}}</strong> method fills this structure. An application can use the information in this structure to estimate the timestamp of the next few frames that will be started by the composition engine. Note that this is only an estimate because the composition engine may or may not compose the next frame, depending on whether any active animations or other work are pending for that frame. In addition, the composition engine may change frame rates according to the cost of composing individual frames.</p> + + + <dd> <p>The time stamp of the last batch of commands to be processed by the composition engine.</p> </dd> + + + <dd> <p>The rate at which the composition engine is producing frames, in frames per second.</p> </dd> + + + <dd> <p>The current time as computed by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>The units in which the <strong>lastFrameTime</strong> and <strong>currentTime</strong> members are specified, in Hertz.</p> </dd> + + + <dd> <p>The estimated time when the next frame will be displayed.</p> </dd> + + + + + <p>Defines the possible states of Direct Manipulation. The viewport can process input in any state unless otherwise noted.</p> + + + + <p>Defines how hit testing is handled by Direct Manipulation when using a dedicated hit-test thread registered through <strong>RegisterHitTestTarget</strong>.</p> + + + + <p>Defines the interaction configuration states available in Direct Manipulation.</p> + + + + <p>Defines the gestures that can be passed to <strong>SetManualGesture</strong>.</p> + <p>By default, Direct Manipulation always reassigns tap and press-and-hold gestures to the application. +</p><p>Use <strong>{{DIRECTMANIPULATION_GESTURE_PINCH_ZOOM}}</strong> to zoom instead of scale. +</p> + + + + <p> Defines the Direct Manipulation motion type.</p> + + + + <p>Defines the input behavior options for the viewport.</p> + <p><strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS}}</strong> is used in the <strong>SetViewportOptions</strong> method. These flags can be combined to set the input behavior for a viewport.</p> + + + <dd> <p>No special behaviors. This is the default value used to set or revert to default behavior.</p> </dd> + + + <dd> <p>At the end of an interaction, the viewport transitions to <strong>{{DIRECTMANIPULATION_READY}}</strong> and then immediately to <strong>{{DIRECTMANIPULATION_DISABLED}}</strong>. The viewport must be explicitly enabled through the <strong>Enable</strong> method before the next interaction can be processed.</p> </dd> + + + <dd> <p> <strong>Update</strong> must be called to redraw the content within the viewport. The content is not updated automatically during an input event.</p> </dd> + + + <dd> <p>All input from a contact associated with the viewport is passed to the {{UI}} thread for processing.</p> </dd> + + + <dd> <p>If set, all <strong>{{WM_POINTERDOWN}}</strong> messages are passed to the application for hit testing. Otherwise, Direct Manipulation will process the messages for hit testing against the existing list of running viewports, and the application will not see the input.</p> <p>Applies only when viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>.</p> </dd> + + + <dd> <p>Specifies that pixel snapping during a manipulation is disabled.</p> <p>Anti-aliasing can create irregular edge rendering. Artifacts, commonly seen as blurry, or semi-transparent, edges can occur when the location of an edge falls in the middle of a device pixel rather than between device pixels. </p> </dd> + + + + + <p>Modifies how the final inertia end position is calculated.</p> + <p>For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL}}</strong> snap points, the snap points are chosen based on the natural ending position of inertia as calculated by the touch interaction engine. For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE}}</strong> snap points, the selected snap point depends on where inertia started.</p> + + + <dd> <p>Content always stops at the snap point closest to where inertia would naturally stop along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at a snap point closest to where inertia would naturally stop along the direction of inertia, depending on how close the snap point is. </p> </dd> + + + <dd> <p>Content always stops at the snap point closest to the release point along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at the next snap point, if the motion starts far from it.</p> </dd> + + + + + <p>Defines the coordinate system for a collection of snap points.</p> + <p>If <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> and <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> are both specified, the snap points are interpreted as specified from the bottom and right boundaries of the content (the size of the content - the size of the viewport). This is intended for {{RTL}} reading scenarios where content is normally specified and rendered from right-to-left or bottom-to-top.</p> + + + <dd> <p>Default. </p> <p>Snap points are specified relative to the top and left boundaries of the content unless <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> is also specified, in which case they are relative to the bottom and right boundaries of the content. For zoom, the boundary is 1.0f.</p> </dd> + + + <dd> <p>Snap points are specified relative to the origin of the viewport.</p> </dd> + + + <dd> <p>Snap points are interpreted as specified in the negative direction of the origin. The origin is shifted to the bottom and right of the viewport or content. Cannot be set for zoom.</p> </dd> + + + + + <p>Defines the horizontal alignment options for content within a viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the left side of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the right side of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the horizontal alignment.</p> </dd> + + + + + <p>Defines the vertical alignment settings for content within the viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the top of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the bottom of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the vertical alignment.</p> </dd> + + + + + <p>Defines the threading behavior for <strong>SetInputMode</strong> or <strong>SetUpdateMode</strong>. The exact meaning of each constant depends on the method called.</p> + + + + <p>Defines the drag-and-drop interaction states for the viewport.</p> + <p>For each interaction, the status always starts at <strong>{{DIRECTMANIPULATION_DRAG_DROP_READY}}</strong> and ends at either <strong>{{DIRECTMANIPULATION_DRAG_DROP_CANCELLED}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_COMMITTED}}</strong>. There are no explicit callbacks for the transition from {{CANCELLED}}/{{COMMITTED}} to {{READY}}. +</p><p>The meaning of the {{CANCELLED}} and {{COMMITED}} values depend on the previous status.</p><ul> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_PRESELECT}}</strong>, they mean the same thing: the content goes back to the original location and no other actions should be taken.</li> <li>{{FOR}} <strong>{{DIRECTMANIPULATION_DRAG_DROP_SELECTING}}</strong>, {{COMMITED}} means apply the selection change; {{CANCELLED}} means avoid the selection change.</li> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_DRAGGING}}</strong>, {{COMMITED}} means perform the drop action; {{CANCELLED}} means cancel the drop action.</li> </ul> + + + <dd> <p>The viewport is at rest and ready for input.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is not selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is being dragged.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a revert.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a commit.</p> </dd> + + + + + <p>Defines behaviors for the drag-drop interaction.</p> + + + <dd> <p>Specifies that vertical movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that horizontal movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that the gesture is to be cross-slide only.</p> </dd> + + + <dd> <p>Specifies that the gesture is a drag initiated by cross-slide.</p> </dd> + + + <dd> <p>Specifies that the gesture a drag initiated by press-and-hold.</p> </dd> + + + + + <p>Defines gestures recognized by Direct Manipulation.</p> + + + + <p>Determines the type and direction of automatic scrolling animation to apply. </p> + + + <dd> <p>If content is scrolling, slowly stop along the direction of the motion.</p> </dd> + + + <dd> <p>Scroll towards the positive boundary of the content.</p> </dd> + + + <dd> <p>Scroll towards the origin of the content.</p> </dd> + + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Activates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated, by default. The manager does not receive or respond to input and callbacks until <strong>Activate</strong> is called for the window. </p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Deactivates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated by default. The manager does not receive or respond to input until <strong>Activate</strong> is called. The manipulation manager should be deactivated when the app does not receive or respond to input. For example, when the app is minimized.</p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Registers a dedicated thread for hit testing.</p> + <p>Hit testing is typically performed on the application {{UI}} thread. The application receives a <strong>{{WM_POINTERDOWN}}</strong> message on which hit-testing is performed. If a manipulation is required, <strong>SetContact</strong> is called on one or more viewports. An application can use the <strong>RegisterHitTestTarget</strong> method to delegate this hit-testing responsibility to a separate hit-testing thread. +</p><p>Once a dedicated hit-test target is successfully registered, <strong>{{WM_POINTERDOWN}}</strong> messages are processed on the hit-testing thread. If a manipulation, such as pan or zoom, is required, <strong>SetContact</strong> is called from this thread. +</p><p>If <strong>SetContact</strong> is not called from the hit-testing thread, <strong>{{WM_POINTERDOWN}}</strong> messages may be processed on the {{UI}} thread, depending on the <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong> specified during registration. +</p><p>If <strong>SetContact</strong> is not called by either the hit-test thread or the {{UI}} thread, Direct Manipulation ignores the input which is then handled on the {{UI}} thread. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of the main app window (typically created from the {{UI}} thread).</p> </dd> + + + <dd> <p>The handle of the window in which hit testing is registered (should be created from the hit testing thread). Pass in nullptr to unregister a previously registered hit-test target.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong>. Specifies whether the {{UI}} window or the hit testing window (or both) receives the hit testing <strong>{{WM_POINTERDOWN}}</strong> message , and in what order.</p> </dd> + + + + + <p>Passes keyboard and mouse messages to the manipulation manager on the app's {{UI}} thread.</p> + <p>Call this method for mouse and keyboard input.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input message to process.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if no further processing should be done with this message; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets a reference to an <strong>{{IDirectManipulationUpdateManager}}</strong> object that receives compositor updates. </p> + <p>For the compositor to respond to update events from Direct Manipulation, you must associate <strong>{{IDirectManipulationUpdateManager}}</strong> to an <strong>{{IDirectManipulationCompositor}}</strong> object during initialization. Use <strong>GetUpdateManager</strong> to obtain a reference to a <strong>{{IDirectManipulationUpdateManager}}</strong> object. Pass this reference to the compositor using the <strong>SetUpdateManager</strong> method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create a new <strong>{{IDirectManipulationViewport}}</strong> object.</p><p>The viewport manages the interaction state and mapping of input to output actions.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Extends the <strong>{{IDirectManipulationManager2}}</strong> interface that provides access to all the Direct Manipulation features and {{APIs}} available to the client application. </p><p>The <strong>{{IDirectManipulationManager3}}</strong> interface adds support for retrieving an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p><strong>Note</strong>??To obtain an <strong>{{IDirectManipulationManager3}}</strong> interface reference, <strong>QueryInterface</strong> on an existing <strong>{{IDirectManipulationManager}}</strong> interface reference.? + + + + <p>Retrieves an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Starts or resumes input processing by the viewport.</p> + <p>This method directs a viewport to attempt to respond to input.</p><p>Call this method if the <strong>{{AUTODISABLE}}</strong> option is set. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>, or <strong>{{S_FALSE}}</strong> if there is no work to do (for example, the viewport is already enabled). Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Stops input processing by the viewport.</p> + <p>When a viewport is disabled, it immediately stops all transforms and moves the content to the final location. </p><p>Call this method when you want to modify multiple attributes atomically. This method can be called at any time. </p><p>The viewport will not resume processing input until <strong>Enable</strong> is called. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies an association between a contact and the viewport.</p> + <p>Call this method when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p><p> <strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p><p>After initialization, Direct Manipulation is not aware of viewport z-order or parent-child relations between viewports. The order of <strong>SetContact</strong> calls defines the viewport tree. To establish the correct viewport hierarchy, <strong>SetContact</strong> should be called first on the child-most viewport, followed by the parent, grand-parent, and so on. +</p><p>Use <strong>{{GET_POINTERID_WPARAM}}</strong> to get the reference identifier from a reference message. The contact is removed automatically when <strong>{{WM_POINTERUP}}</strong> is received. +</p><p>If a contact is associated with one or more viewports using the <strong>SetContact</strong> method, Direct Manipulation will examine further input from that contact and attempt to identify an appropriate manipulation based on the configuration of the associated viewports. If a manipulation is recognized, the application will then receive a <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message for this contact. In this context, the <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message indicates that Direct Manipulation has captured the contact and the application will not receive input from this contact that is consumed for this manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes a contact that is associated with a viewport.</p> + <p>This method releases a contact from a specific Direct Manipulation viewport (equivalent to the user removing a touch point). </p><p>The viewport state is not affected unless the last remaining contact on the viewport is removed, in which case the viewport will transition to inertia, if supported. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes all contacts that are associated with the viewport. Inertia is started if the viewport supports inertia.</p> + <p>This is equivalent to calling <strong>ReleaseContact</strong> on every contact associated with the viewport. The outcome is equivalent to the user removing all touch points from the viewport. </p><p>If supported, inertia will be started after calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Gets the tag value of a viewport.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The out parameters are optional, so the method can return an {{ID}}, the viewport object, or both. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{IID}} to the interface.</p> </dd> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The identifier portion of the tag.</p> </dd> + + + + + <p>Sets a viewport tag.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The object parameter is optional, so that the method can set just an {{ID}}. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Retrieves the rectangle for the viewport relative to the origin of the viewport coordinate system specified by <strong>SetViewportRect</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the bounding rectangle for the viewport, relative to the origin of the viewport coordinate system.</p> + <p>The viewport rectangle specifies the region of content that is visible to the user. In conjunction with the primary content rectangle, the viewport rectangle is used to determine chaining behaviors.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle.</p> </dd> + + + + + <p>Moves the viewport to a specific area of the primary content and specifies whether to animate the transition.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The leftmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The topmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The rightmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The bottommost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>Specifies whether to animate the zoom behavior.</p> </dd> + + + + + <p>Specifies the transform from the viewport coordinate system to the window client coordinate system. </p> + <p>Call this function to specify the viewport position, scaling and orientation on the screen. Viewport position, scaling, orientation and size are uniquely determined by the viewport transform and the viewport rectangle. The application can specify the viewport transform using this method, and the viewport rectangle using <strong>SetViewportRect</strong>. +</p><p>The viewport rectangle (the rectangular area inside the content that is visible to the user) is specified in viewport coordinates. If the viewport rectangle top-left point is (0,0), the viewport rectangle is positioned exactly at the viewport coordinate system origin. Viewports offset from the viewport coordinate system origin can be specified in two ways:</p><ul> <li>Through the viewport rectangle top-left point</li> <li>Through the viewport transform translation component (_31, _32)</li> </ul><p>The viewport transform converts from the viewport coordinate system to the window client coordinate system. Direct Manipulation ignores the window {{RTL}} property, so the client area origin is always the top-left point. +The transforms are applied in the following order: +</p><ol> <li>Viewport rectangle offset</li> <li>Viewport transform (from viewport to client coordinate system)</li> <li>Client to screen mapping (from client to screen coordinate system) +</li> </ol> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Specifies a display transform for the viewport, and synchronizes the output transform with the new value of the display transform.</p> + <p>If the application performs special output processing of the content outside of the compositor (content not fully captured in the viewport transform), it should call this method to specify the display transform for the special processing. +</p><p>The display transform affects how manipulation updates are applied to the output transform. For example, if the display transform is set to scale 3x, panning will move the content 3x the original distance. +</p><p>When a display transform is changed using this method, the output transform will be synchronized to the new value of the display transform. +</p><p>This method cannot be called if the viewport status is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Gets the primary content of a viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. </p><p>Primary content is an element that gets transformed (e.g. moved, scaled, rotated) in response to a user interaction. Primary content is created at the same time as the viewport and cannot be added or removed.</p> + <p> This method gets the content of the viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds secondary content, such as a panning indicator, to a viewport.</p> + <p>Secondary content is created by calling <strong>CreateContent</strong>. Once added, the secondary content will move relative to the primary content in response to a manipulation. Its motion is determined by rules associated with each type of secondary content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the viewport.</p> </dd> + + + + + <p>Removes secondary content from a viewport.</p> + <p>Secondary content can be removed from the viewport at any time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content object to remove.</p> </dd> + + + + + <p>Sets how the viewport handles input and output.</p><p>Calling this method overrides all settings previously specified with <strong>SetUpdateMode</strong> or <strong>SetInputMode</strong>.</p> + <p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds an interaction configuration for the viewport.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p><p>You cannot add another drag and drop behavior after an existing one has already been added.</p><p>This method is designed to allow an application to switch pre-added configurations, as a configuration cannot be changed while a manipulation is occurring. Under most circumstances it is better to update the configuration using <strong>ActivateConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Removes an interaction configuration for the viewport.</p> + <p>This method removes a possible configuration that was added by using <strong>AddConfiguration</strong>. This method can be called only if the configuration is not active.</p><p>An interaction configuration specifies how the manipulation engine responds to input and which gestures are supported. Any number of configurations can be added to the viewport using <strong>AddConfiguration</strong>. Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets the configuration for input interaction.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specify the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets which gestures are ignored by Direct Manipulation. </p> + <p>Use this method to specify which gestures the application processes on the {{UI}} thread. If a gesture is recognized, it will be passed to the application for processing and ignored by Direct Manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the motion types supported in a viewport that can be chained to a parent viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> that specifies the motion types that are enabled for this viewport.</p> </dd> + + + + + <p>Adds a new event handler to listen for viewport events.</p> + <p>The event callback is fired from the thread that owns the specified window. Consecutive events of the same callback method may be coalesced. +</p><strong>Note</strong>??If the viewport has a drag-drop behavior attached, the event handler should implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of a window owned by the thread for the event callback.</p> </dd> + + + <dd> <p>The handler that is called when viewport status and update events occur. The specified object must implement the <strong>{{IDirectManipulationViewportEventHandler}}</strong> interface.</p> </dd> + + + <dd> <p>The handle that represents this event handler callback.</p> </dd> + + + + + <p>Removes an existing event handler from the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that was returned by a previous call to <strong>AddEventHandler</strong>.</p> </dd> + + + + + <p>Specifies if input is visible to the {{UI}} thread.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. </p><p> Direct Manipulation consumes all the input that drives the manipulation and the application receives {{WM_POINTERCAPTURECHANGED}} messages. +</p><p>In some situations an application may want to receive input that is driving a manipulation. Set {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}} in this case. The application will receive all input messages, even input used by Direct Manipulation to drive a manipulation. </p><strong>Note</strong>??The application will not receive {{WM_POINTERCAPTURECHANGED}} messages.?<p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Specifies whether a viewport updates content manually instead of during an input event.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. In this mode, visual updates are pushed to compositor driven by input. This is the expected mode of operation if the application is using system-provided implementation of <strong>{{IDirectManipulationCompositor}}</strong>. +</p><p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, it should switch viewport update mode to manual by setting {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}. When in manual mode, the compositor pulls visual updates whenever it calls <strong>Update</strong> on Direct Manipulation. +</p><p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Stops the manipulation and returns the viewport to a ready state. +</p> + <p>If a mandatory snap point has been configured, the content may animate to the nearest snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases all resources that are used by the viewport and prepares it for destruction from memory. +</p> + <p>Once <strong>Abandon</strong> has been called, do not make subsequent function calls on the viewport. If a function is called after <strong>Abandon</strong>, <strong>{{E_INVALID_STATE}}</strong> will be returned.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides management of behaviors on a viewport. A behavior affects the functionality of a particular part of the Direct Manipulation workflow. </p> + <p><strong>{{IDirectManipulationViewport2}}</strong> can be used in place of <strong>{{IDirectManipulationViewport}}</strong>. +</p><p>Behaviors are created using <strong>{{IDirectManipulationManager2}}</strong> and an appropriate class {{ID}}.</p><p>A behavior can be attached or removed at any time and takes effect immediately (even during an active manipulation or inertia animation).</p> + + + + <p>Adds a behavior to the viewport and returns a cookie to the caller.</p> + <p>A behavior takes effect immediately after <strong>AddBehavior</strong> is called. This must be considered when adding a behavior during an active manipulation or inertia phase.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. Attaching a behavior that is already attached to this viewport or another viewport results in a failure.</p> + + + <dd> <p>A behavior created using the <strong>CreateBehavior</strong> method.</p> </dd> + + + <dd> <p>A cookie is returned so the caller can remove this behavior later. This allows the caller to release any reference on the behavior and let Direct Manipulation maintain an appropriate lifetime, similar to event handlers. </p> </dd> + + + + + <p>Removes a behavior from the viewport that matches the given cookie.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If the behavior has already been removed or if the behavior is not attached to this viewport a failure is returned.</p> + + + <dd> <p>A valid cookie returned from the <strong>AddBehavior</strong> call on the same viewport.</p> </dd> + + + + + <p>Removes all behaviors added to the viewport.</p> + <p><strong>RemoveAllBehaviors</strong> only returns an error if the removal of a behavior from the viewport was unsuccessful. In the event that a specific behavior is not removed successfully, <strong>RemoveAllBehaviors</strong> removes all remaining behaviors.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines methods for handling status and update events for the viewport.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + <p>Client apps implement this handler to receive status and update events for viewports. Use <strong>AddEventHandler</strong> to set the handler for a viewport. Each viewport can have more than one handler.</p> + + + + <p>Called when the status of a viewport changes.</p> + <p>If you call <strong>GetStatus</strong> from within this handler, the status returned is not guaranteed to be the same as at the time of the call. This is because of the asynchronous nature of the notification.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport for which status has changed.</p> </dd> + + + <dd> <p>The new status of the viewport.</p> </dd> + + + <dd> <p>The previous status of the viewport.</p> </dd> + + + + + <p>Called after all content in the viewport has been updated.</p> + <p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>. <strong>OnContentUpdated</strong> is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that has been updated.</p> </dd> + + + + + <p>Called when content inside a viewport is updated. +</p> + <p>This method is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. For instance, when the position of the content is changed, you can use <strong>{{IDirectManipualtionContent::GetContentTransform}}</strong> to retrieve the new value.</p><p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that is updated.</p> </dd> + + + <dd> <p>The content in the viewport that has changed.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Retrieves the bounding rectangle of the content, relative to the bounding rectangle of the viewport (if defined).</p> + <p>If the bounding rectangle has not been set using <strong>SetContentRect</strong>, then <strong>{{UI_E_VALUE_NOT_SET}}</strong> is returned. However, the actual content rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Specifies the bounding rectangle of the content, relative to its viewport. +</p> + <p>The default bounding rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Retrieves the viewport that contains the content.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use.</p> </dd> + + + <dd> <p>The viewport object.</p> </dd> + + + + + <p> </p><p>Retrieves the tag object set on this content. </p> + <p><strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p><strong>GetTag</strong> queries the tag value for the specified interface and returns a reference to that interface.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to identify a motion. +The parameters are optional, so that the method can return both parts of the tag, the identifier portion, or the tag object. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use. The tag object typically implements this interface.</p> </dd> + + + <dd> <p>The tag object.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Specifies the tag object for the content. </p> + <p> <strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to store and retrieve an arbitrary object associated with the content.</p><p>The <em>object</em> parameter is optional, so that the method can set just the identifier portion. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Gets the final transform applied to the content.</p> + <p>This transform might contain the other custom curves applied during manipulation and inertia.</p><p>This transform contains both the content transform and the sync transform set with <strong>SyncContentTransform</strong>. +</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Modifies the content transform while maintaining the output transform.</p> + <p>This method will fail if the viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong>, <strong>{{DIRECTMANIPULATION_INERTIA}}</strong> or <strong>{{DIRECTMANIPULATION_SUSPENDED}}</strong>.</p><p>This method is useful when the application wants to apply transforms on top of the content transforms at the end of a manipulation, while preserving the visual output transform of the content.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p> Specifies snap points for the inertia end position at uniform intervals.</p> + <p>Snap point locations are in content coordinate units. </p><p>Specify snap points through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong>. </p><p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p><p>Snap points are not at boundaries by default. If you wish for content to stop at a boundary, a snap point must be set at the boundary.</p><p> Snap points set by <strong>SetSnapInterval</strong> can be cleared by calling <strong>SetSnapInterval</strong> with an interval of 0.0f.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>The interval between each snap point.</p> </dd> + + + <dd> <p>The offset from the coordinate specified in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + + + <p>Specifies the snap points for the inertia rest position.</p> + <p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If there is no change in the snap points, this method can return <strong>{{S_FALSE}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If invalid snap points are specified, existing snap points might be affected.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values. Only <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_X}}</strong>, <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_Y}}</strong>, or <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong> are allowed.</p> </dd> + + + <dd> <p>An array of snap points within the boundaries of the content to snap to. Should be specified in increasing order relative to the origin set in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + <dd> <p> The size of the array of snap points. Should be greater than 0.</p> </dd> + + + + + <p>Specifies the type of snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE}}</strong> enumeration values.</p> <p>If set to <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE}}</strong>, snap points specified through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong> are cleared.</p> </dd> + + + + + <p> Specifies the coordinate system for snap points or snap intervals. </p> + <p>The origin is relative to the content boundaries. If no boundary has been set (<strong>SetContentRect</strong> is never called) the default boundaries are (-{{FLT_MAX}}, {{FLT_MAX}}). </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. </p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong>. </p> <p>If <em>motion</em> is set to translation (<strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> or <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong>), all values of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> are valid. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, only <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> is valid (<em>origin</em> must be set to 0.0f).</p> </dd> + + + <dd> <p>The initial, or starting, snap point. All snap points are relative to this one. Only used when <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> is set. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, then <em>origin</em> must be set to 0.0f.</p> </dd> + + + + + <p>Specifies the minimum and maximum boundaries for zoom.</p> + <p>If the content is outside the new boundaries, and the viewport is {{ENABLED}} or {{READY}}, then the content is reset to be within the new boundaries. If inertia configuration is enabled, the reset operation uses an inertia animation. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The minimum zoom level allowed. Must be greater than or equal to 0.1f, which corresponds to 100% zoom.</p> </dd> + + + <dd> <p>The maximum zoom allowed. Must be greater than <em>zoomMinimum</em> and less than {{FLT_MAX}}.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Specifies the vertical alignment of the primary content in the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT}}</strong>.</p> <strong>Note</strong>??You cannot combine <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_TOP}}</strong>, <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER}}</strong>, or <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM}}</strong>. <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Gets the final transform, including inertia, of the primary content.</p> + <strong>Warning</strong>??Calling this method can cause a race condition if inertia has ended or been interrupted. This can also occur during the <strong>OnViewportStatusChanged</strong> callback.? + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transformed matrix that represents the inertia ending position.</p> </dd> + + + <dd> <p>The size of the matrix. </p> <p> This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the center point of the manipulation in content coordinates. If there is no manipulation in progress, retrieves the center point of the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The center on the horizontal axis.</p> </dd> + + + <dd> <p>The center on the vertical axis.</p> </dd> + + + + + <p>Defines methods to handle drag-drop behavior events.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when a status change happens in the viewport that the drag-and-drop behavior is attached to. </p> + <p>If a class is implementing <strong>{{IDirectManipulationViewportEventHandler}}</strong> it should also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong> if that viewport will use drag and drop. Direct Manipulation will query the <strong>{{IDirectManipulationViewportEventHandler}}</strong> instances to verify that they also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated viewport.</p> </dd> + + + <dd> <p>The current state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + <dd> <p>The previous state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Gets the status of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>This method returns the drag-drop status at the time of the call and not at the time when the return value is read.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>.</p> </dd> + + + + + <p>Defines methods to handle interactions when they are detected.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when an interaction is detected.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport on which the interaction was detected.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INTERACTION_TYPE}}</strong>.</p> </dd> + + + + + <p>Represents a time-keeping object that measures the latency of the composition infrastructure used by the application and provides this data to Direct Manipulation. +</p> + + + + <p>Retrieves the composition timing information from the compositor.</p> + <p>The system implementation of <strong>{{IDirectManipulationFrameInfoProvider}}</strong> uses DirectComposition. <strong>GetFrameStatistics</strong> is used to calculate the parameter values for <strong>GetNextFrameInfo</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current time, in milliseconds.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor begins constructing the next frame.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor finishes composing and drawing the next frame on the screen.</p> </dd> + + + + + <p> </p><p>Represents a compositor object that associates manipulated content with a drawing surface, such as <strong>canvas</strong> (Windows Store app using JavaScript) or <strong>Canvas</strong> (Windows Store app using C++, C#, or Visual Basic).</p> + <p>The content of a Direct Manipulation viewport must be manually updated during an input event for custom implementations of <strong>{{IDirectManipulationCompositor}}</strong>. Call <strong>Update</strong> to redraw the content within the viewport. </p><p>You specify manual mode on a viewport by calling either of these functions:</p><ul> <li> <strong>SetViewportOptions</strong>, with <strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE}}</strong> specified.</li> <li> <strong>SetUpdateMode</strong>, with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> specified.</li> </ul> + + + + <p>Associates content (owned by the caller) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. </p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. This can be primary content, obtained from the viewport by calling <strong>GetPrimaryContent</strong>, or secondary content, such as a panning indicator, created by calling <strong>CreateContent</strong>. +</p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Removes content from the compositor.</p> + <p>This method removes content added with <strong>AddContent</strong> and restores the original relationships between parent visuals and child visuals in the composition tree. In other words, <strong>RemoveContent</strong> undoes <strong>AddContent</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to remove from the composition tree.</p> </dd> + + + + + <p> </p><p> Sets the update manager used to send compositor updates to Direct Manipulation. </p> + <p>Retrieve <em>updateManager</em> by calling <strong>GetUpdateManager</strong>.</p><p>Call this method during Direct Manipulation initialization to connect the compositor to the <em>update manager</em>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all pending updates in the compositor to the system for rendering.</p> + <p>This method enables Direct Manipulation to flush any pending changes to its visuals before a system event, such as a process suspension.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p> </p><p>Defines methods for handling manipulation update events.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Notifies the compositor when to update inertia animation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Manages how compositor updates are sent to Direct Manipulation.</p><p>This interface enables the compositor to trigger an update on Direct Manipulation whenever there is a compositor update. The application should not call the methods of this interface directly. +</p> + + + + <p>Registers a callback that is triggered by a handle.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The event handle that triggers the callback.</p> </dd> + + + <dd> <p>The event handler to call when the event is fired.</p> </dd> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Deregisters a callback.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Updates Direct Manipulation at the current time.</p> + <p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, this implementation should call <strong>Update</strong> whenever there is a compositor update. Frame timing information can be provided to Direct Manipulation through the <strong>{{IDirectManipulationFrameInfoProvider}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents the auto-scroll animation behavior of content as it approaches the boundary of a given axis or axes.</p> + + + + <p>Performs the auto-scroll animation for the viewport this behavior is attached to. </p> + <p><strong>SetConfiguration</strong> takes effect immediately. If the content is not in inertia, and <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION_STOP}}</strong> is specified for <em>scrollMotion</em>, then this method returns {{S_FALSE}}. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> and <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong> from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. <strong>{{DIRECTMANIPULATION_MOTION_NONE}}</strong> cannot be specified.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION}}</strong>. </p> </dd> + + + + + <p>Represents a service for managing associations between a contact and a viewport.</p><p> <strong>SetContact</strong> is called when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p> + + + + <p>Specifies the amount of time to defer the execution of a call to <strong>SetContact</strong> for this <em>referenceId</em>.</p><p><strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel all scheduled calls to <strong>SetContact</strong> for this <em>referenceId</em>. </p> + <p>This function fails if the timeout specified in <strong>DeferContact</strong> has already been reached. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel the deferral set in <strong>DeferContact</strong> and process the scheduled <strong>SetContact</strong> call for this <em>referenceId</em>. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flags indicating the memory location of a resource.</p> + <p>This enum is used by <strong>QueryResourceResidency</strong>.</p> + + + <dd> <p>The resource is located in video memory.</p> </dd> + + + <dd> <p>At least some of the resource is located in {{CPU}} memory.</p> </dd> + + + <dd> <p>At least some of the resource has been paged out to the hard drive.</p> </dd> + + + + + <p> Options for handling pixels in a display surface after calling <strong>{{IDXGISwapChain1::Present1}}</strong>. </p> + <p> This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong>structures. </p><p> To use multisampling with <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling <strong>{{ID3D11Device::CreateTexture2D}}</strong> with a filled <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure (<strong>BindFlags</strong> member set to <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> and <strong>SampleDesc</strong> member with multisampling parameters). Next call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render-target view for the texture, and render your scene into the texture. Finally call <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve the multisampled texture into your non-multisampled swap chain. </p><p> The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager ({{DWM}}) for composition. In the bitblt model, which is used with the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> and <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> values, contents of the back buffer get copied into the redirection surface on each call to <strong>{{IDXGISwapChain1::Present1}}</strong>. In the flip model, which is used with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value, all back buffers are shared with the {{DWM}}. Therefore, the {{DWM}} can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics. </p><p> When you call <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip model swap chain (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>) with 0 specified in the <em>SyncInterval</em> parameter, <strong>{{IDXGISwapChain1::Present1}}</strong>'s behavior is the same as the behavior of Direct3D 9Ex's <strong>{{IDirect3DDevice9Ex::PresentEx}}</strong> with <strong>{{D3DSWAPEFFECT_FLIPEX}}</strong> and {{D3DPRESENT_FORCEIMMEDIATE}}. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames. </p><p> Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix {{GDI}} and DirectX presentation. In the flip model, the application must create the swap chain with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, and then must use <strong>GetDC</strong> on the back buffer explicitly. After the first successful call to <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip-model swap chain, {{GDI}} no longer works with the <strong>{{HWND}}</strong> that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like <strong>ScrollWindowEx</strong>. </p><p> For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas. </p> + + + + <p>Options for swap-chain behavior.</p> + <p>This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> structure and the <strong>{{IDXGISwapChain::ResizeTarget}}</strong> method.</p><p>This enumeration is also used by the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>You don't need to set <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> for swap chains that you create in full-screen mode with the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method because those swap chains already behave as if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. That is, presented content is not accessible by remote access or through the <strong>desktop duplication {{APIs}}</strong>.</p><p>Swap chains that you create with the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, and <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> methods are not protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is not set and are protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the <strong>desktop duplication {{APIs}}</strong>.</p><p>When you call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> to change the swap chain's back buffer, you can reset or change all <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> flags.</p> + + + <dd> <p>Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode. </p> </dd> + + + <dd> <p>Set this flag to enable an application to switch modes by calling <strong>{{IDXGISwapChain::ResizeTarget}}</strong>. When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.</p> </dd> + + + <dd> <p>Set this flag to enable an application to render using {{GDI}} on a swap chain or a surface. This will allow the application to call <strong>{{IDXGISurface1::GetDC}}</strong> on the 0th back buffer or a surface.</p> </dd> + + + <dd> <p>Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the <strong>desktop duplication {{APIs}}</strong>. </p> <p>This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and {{APIs}}.</p> <p>If you use this flag with windowed (<strong>{{HWND}}</strong> or <strong>{{IWindow}}</strong>) swap chains where another process created the <strong>{{HWND}}</strong>, the owner of the <strong>{{HWND}}</strong> must use the <strong>SetWindowDisplayAffinity</strong> function appropriately in order to allow calls to <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> to succeed. +</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> {{API}} instead of <strong>{{IDXGIDevice1::SetMaximumFrameLatency}}</strong>.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with <strong>CoreWindow</strong> swap chains, which are created with <strong>CreateSwapChainForCoreWindow</strong>. Apps should not create foreground swap chains if <strong>{{IDXGIOutput2::SupportsOverlays}}</strong> indicates that hardware support for overlays is not available.</p> <p>Note that <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> cannot be used to add or remove this flag.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for full-screen video. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for {{YUV}} video.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li>This flag can only be used with swap effect <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>.</li> </ul> <strong>Note</strong>??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection. ? <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling <strong>SetFullscreenState</strong>({{TRUE}}), but the recommended approach for Win32 developers is to use this tearing flag instead.</p> <p>To check for hardware support of this feature, refer to <strong>{{IDXGIFactory5::CheckFeatureSupport}}</strong>. For usage information refer to <strong>{{IDXGISwapChain::Present}}</strong> and the <strong>{{DXGI_PRESENT}}</strong> flags.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Describes timing and presentation statistics for a frame.</p> + <p>You initialize the <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure with the <strong>{{IDXGIOutput::GetFrameStatistics}}</strong> or <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> method.</p><p>You can only use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p><p>The values in the <strong>PresentCount</strong> and <strong>PresentRefreshCount</strong> members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the <strong>SyncRefreshCount</strong> and <strong>SyncQPCTime</strong> members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. +If the swap chain draws in windowed mode, these values are based on when the swap chain is created.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + + + <p>Describes a mapped rectangle that is used to access a surface.</p> + <p>The <strong>{{DXGI_MAPPED_RECT}}</strong> structure is initialized by the <strong>{{IDXGISurface::Map}}</strong> method.</p> + + + <dd> <p>A value that describes the width, in bytes, of the surface.</p> </dd> + + + <dd> <p>A reference to the image buffer of the surface.</p> </dd> + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p>Represents a handle to a shared resource.</p> + <p>To create a shared surface, pass a shared-resource handle into the <strong>{{IDXGIDevice::CreateSurface}}</strong> method.</p> + + + <dd> <p>A handle to a shared resource.</p> </dd> + + + + + <p>Describes a surface.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSurface</strong> methods.</p> + + + <dd> <p>A value describing the surface width.</p> </dd> + + + <dd> <p>A value describing the surface height.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_FORMAT}}</strong> enumerated type that describes the surface format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters for the surface.</p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSwapChain</strong> methods.</p><p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>If you create a swap chain with one buffer, specifying <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> does not cause the contents of the single buffer to be swapped with the front buffer.</p><p>For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.</p> + + + <dd> <p>A <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the backbuffer display mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_USAGE}}</strong> enumerated type that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you call <strong>{{IDXGIFactory::CreateSwapChain}}</strong> to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.</p> </dd> + + + <dd> <p>An <strong>{{HWND}}</strong> handle to the output window. This member must not be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the output is in windowed mode. <strong>{{TRUE}}</strong> if the output is in windowed mode; otherwise, <strong>{{FALSE}}</strong>. </p> <p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>; that is, do not set this member to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the <strong>BufferDesc</strong> member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. </p> <p>For more information about choosing windowed verses full screen, see <strong>{{IDXGIFactory::CreateSwapChain}}</strong>.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_EFFECT}}</strong> enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> enumerated type that describes options for swap-chain behavior.</p> </dd> + + + + + <p>Describes an adapter (or video card) using {{DXGI}} 1.1.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure provides a {{DXGI}} 1.1 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + + + <p> Don't use this structure; it is not supported and it will be removed from the header in a future release. </p> + + + <dd> <p> The primary coordinates, as an 8 by 2 array of {{FLOAT}} values. </p> </dd> + + + <dd> <p> The white points, as a 16 by 2 array of {{FLOAT}} values. </p> </dd> + + + + + <p> An <strong>{{IDXGIObject}}</strong> interface is a base interface for all {{DXGI}} objects; <strong>{{IDXGIObject}}</strong> supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object. </p> + <p><strong>{{IDXGIObject}}</strong> implements base-class functionality for the following interfaces: </p><ul> <li> <strong>{{IDXGIAdapter}}</strong> </li> <li> <strong>{{IDXGIDevice}}</strong> </li> <li> <strong>{{IDXGIFactory}}</strong> </li> <li> <strong>{{IDXGIOutput}}</strong> </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets application-defined data to the object and associates that data with a {{GUID}}.</p> + <p><strong>SetPrivateData</strong> makes a copy of the specified data and stores it with the object.</p><p>Private data that <strong>SetPrivateData</strong> stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through <strong>{{ID3D11Device::SetPrivateData}}</strong> or by a Direct3D?11 child device through <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>).</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the well-known private data {{GUID}} (<strong>{{WKPDID_D3DDebugObjectName}}</strong>) that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre><p>You can use <strong>{{WKPDID_D3DDebugObjectName}}</strong> to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks (<strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>) and with the event tracing for Windows events that we've added to Windows?8. +</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A {{GUID}} that identifies the data. Use this {{GUID}} in a call to <strong>GetPrivateData</strong> to get the data.</p> </dd> + + + <dd> <p>The size of the object's data.</p> </dd> + + + <dd> <p>A reference to the object's data.</p> </dd> + + + + + <p>Set an interface in the object's private data.</p> + <p>This {{API}} associates an interface reference with the object.</p><p>When the interface is set its reference count is incremented. When the data are overwritten (by calling {{SPD}} or {{SPDI}} with the same {{GUID}}) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the interface.</p> </dd> + + + <dd> <p>The interface to set.</p> </dd> + + + + + <p>Get a reference to the object's data.</p> + <p>If the data returned is a reference to an <strong>{{IUnknown}}</strong>, or one of its derivative classes, previously set by <strong>{{IDXGIObject::SetPrivateDataInterface}}</strong>, you must call <strong>::Release()</strong> on the reference before the reference is freed to decrement the reference count.</p><p>You can pass <strong>{{GUID_DeviceType}}</strong> in the <em>Name</em> parameter of <strong>GetPrivateData</strong> to retrieve the device type from the display adapter object (<strong>{{IDXGIAdapter}}</strong>, <strong>{{IDXGIAdapter1}}</strong>, <strong>{{IDXGIAdapter2}}</strong>). </p><p><strong>To get the type of device on which the display adapter was created</strong></p><ol> <li>Call <strong>{{IUnknown::QueryInterface}}</strong> on the <strong>{{ID3D11Device}}</strong> or <strong>{{ID3D10Device}}</strong> object to retrieve the <strong>{{IDXGIDevice}}</strong> object.</li> <li>Call <strong>GetParent</strong> on the <strong>{{IDXGIDevice}}</strong> object to retrieve the <strong>{{IDXGIAdapter}}</strong> object.</li> <li>Call <strong>GetPrivateData</strong> on the <strong>{{IDXGIAdapter}}</strong> object with <strong>{{GUID_DeviceType}}</strong> to retrieve the type of device on which the display adapter was created. <em>pData</em> will point to a value from the driver-type enumeration (for example, a value from <strong>{{D3D_DRIVER_TYPE}}</strong>).</li> </ol><p>On Windows?7 or earlier, this type is either a value from <strong>{{D3D10_DRIVER_TYPE}}</strong> or <strong>{{D3D_DRIVER_TYPE}}</strong> depending on which kind of device was created. On Windows?8, this type is always a value from <strong>{{D3D_DRIVER_TYPE}}</strong>. Don't use <strong>{{IDXGIObject::SetPrivateData}}</strong> with <strong>{{GUID_DeviceType}}</strong> because the behavior when doing so is undefined.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the data.</p> </dd> + + + <dd> <p>The size of the data.</p> </dd> + + + <dd> <p>Pointer to the data.</p> </dd> + + + + + <p>Gets the parent of the object.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>The {{ID}} of the requested interface.</p> </dd> + + + <dd> <p>The address of a reference to the parent object.</p> </dd> + + + + + <p>Inherited from objects that are tied to the device so that they can retrieve a reference to it.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Retrieves the device.</p> + <p>The type of interface that is returned can be any interface published by the device. For example, it could be an {{IDXGIDevice}} * called pDevice, and therefore the {{REFIID}} would be obtained by calling __uuidof(pDevice).</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}).</p> + + + <dd> <p>The reference id for the device.</p> </dd> + + + <dd> <p>The address of a reference to the device.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetSharedHandle</strong> anymore to retrieve the handle to a shared resource. Instead, use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> to get a handle for sharing. To use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong>, you must create the resource as shared and specify that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag). We also recommend that you create shared resources that use {{NT}} handles so you can use <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on on those shared resources.]</p><p>Gets the handle to a shared resource.</p> + <p><strong>GetSharedHandle</strong> returns a handle for the resource that you created as shared (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> with or without the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag). You can pass this handle to the <strong>{{ID3D11Device::OpenSharedResource}}</strong> method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an {{NT}} handle. Therefore, don't use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on.</p><p>The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.</p><p><strong>GetSharedHandle</strong> can also return handles for resources that were passed into <strong>{{ID3D11Device::OpenSharedResource}}</strong> to open those resources.</p><p><strong>GetSharedHandle</strong> fails if the resource to which it wants to get a handle is not shared.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Get the expected resource usage.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a usage flag (see {{DXGI_USAGE}}). For Direct3D 10, a surface can be used as a shader input or a render-target output.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get the eviction priority.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} to determine how to manage overcommitted memory.</p><p>Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the eviction priority, which determines when a resource can be evicted from memory. </p> <p>The following defined values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.</p> + <p>The <strong>{{IDXGIFactory1}}</strong> is required to create a resource capable of supporting the <strong>{{IDXGIKeyedMutex}}</strong> interface.</p><p>An <strong>{{IDXGIKeyedMutex}}</strong> should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag.</p><p>For information about creating a keyed mutex, see the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method.</p> + + + + <p>Using a key, acquires exclusive rendering access to a shared resource.</p> + <p>The <strong>AcquireSync</strong> method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>AcquireSync</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p><p>The <strong>AcquireSync</strong> method uses the key as follows, depending on the state of the surface:</p><ul> <li>On initial creation, the surface is unowned and any device can call the <strong>AcquireSync</strong> method to gain access. For an unowned device, only a key of 0 will succeed. Calling the <strong>AcquireSync</strong> method for any other key will stall the calling {{CPU}} thread.</li> <li>If the surface is owned by a device when you call the <strong>AcquireSync</strong> method, the {{CPU}} thread that called the <strong>AcquireSync</strong> method will stall until the owning device calls the <strong>ReleaseSync</strong> method using the same Key.</li> <li>If the surface is unowned when you call the <strong>AcquireSync</strong> method (for example, the last owning device has already called the <strong>ReleaseSync</strong> method), the <strong>AcquireSync</strong> method will succeed if you specify the same key that was specified when the <strong>ReleaseSync</strong> method was last called. Calling the <strong>AcquireSync</strong> method using any other key will cause a stall.</li> <li>When the owning device calls the <strong>ReleaseSync</strong> method with a particular key, and more than one device is waiting after calling the <strong>AcquireSync</strong> method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.</li> <li>A keyed mutex does not support recursive calls to the <strong>AcquireSync</strong> method.</li> </ul> + <p>Return {{S_OK}} if successful.</p><p>If the owning device attempted to create another keyed mutex on the same shared resource, <strong>AcquireSync</strong> returns {{E_FAIL}}.</p><p><strong>AcquireSync</strong> can also return the following <strong>{{DWORD}}</strong> constants. Therefore, you should explicitly check for these constants. If you only use the <strong>{{SUCCEEDED}}</strong> macro on the return value to determine if <strong>AcquireSync</strong> succeeded, you will not catch these constants.</p><ul> <li>{{WAIT_ABANDONED}} - The shared surface and keyed mutex are no longer in a consistent state. If <strong>AcquireSync</strong> returns this value, you should release and recreate both the keyed mutex and the shared surface.</li> <li>{{WAIT_TIMEOUT}} - The time-out interval elapsed before the specified key was released.</li> </ul> + + + <dd> <p>A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + <dd> <p>The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified <em>Key</em>. If this value is set to zero, the <strong>AcquireSync</strong> method will test to see if the keyed mutex has been released and returns immediately. If this value is set to {{INFINITE}}, the time-out interval will never elapse.</p> </dd> + + + + + <p>Using a key, releases exclusive rendering access to a shared resource.</p> + <p>The <strong>ReleaseSync</strong> method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>After you call the <strong>ReleaseSync</strong> method, the shared resource is unset from the rendering pipeline. </p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p> + <p>Returns {{S_OK}} if successful.</p><p>If the device attempted to release a keyed mutex that is not valid or owned by the device, <strong>ReleaseSync</strong> returns {{E_FAIL}}.</p> + + + <dd> <p>A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the <strong>ReleaseSync</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + + + <p>The <strong>{{IDXGISurface}}</strong> interface implements methods for image-data objects.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. </p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>.</p> + + + + <p>Get a description of the surface.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface description (see <strong>{{DXGI_SURFACE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>The <strong>{{IDXGISurface1}}</strong> interface extends the <strong>{{IDXGISurface}}</strong> by adding support for using Windows Graphics Device Interface ({{GDI}}) to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface1}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface1}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface1}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface1}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface1}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface1}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface1}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface1}}</strong>.</p> + + + + <p>Returns a device context ({{DC}}) that allows you to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface using Windows Graphics Device Interface ({{GDI}}).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>After you use the <strong>GetDC</strong> method to retrieve a {{DC}}, you can render to the {{DXGI}} surface by using {{GDI}}. The <strong>GetDC</strong> method readies the surface for {{GDI}} rendering and allows inter-operation between {{DXGI}} and {{GDI}} technologies. </p><p>Keep the following in mind when using this method:</p><ul> <li>You must create the surface by using the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag for a surface or by using the <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong> flag for swap chains, otherwise this method fails.</li> <li>You must release the device and call the <strong>{{IDXGISurface1::ReleaseDC}}</strong> method before you issue any new Direct3D commands.</li> <li>This method fails if an outstanding {{DC}} has already been created by this method.</li> <li>The format for the surface or swap chain must be <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</li> <li>On <strong>GetDC</strong>, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong> method on the device prior to Direct3D rendering after {{GDI}} rendering.</li> <li>Prior to resizing buffers you must release all outstanding {{DCs}}.</li> </ul><p> You can also call <strong>GetDC</strong> on the back buffer at index 0 of a swap chain by obtaining an <strong>{{IDXGISurface1}}</strong> from the swap chain. The following code illustrates the process.</p><pre> {{IDXGISwapChain}}* g_pSwapChain = {{NULL}}; +{{IDXGISurface1}}* g_pSurface1 = {{NULL}}; +... +//Setup the device and and swapchain +g_pSwapChain-&gt;GetBuffer(0, __uuidof({{IDXGISurface1}}), (void**) &amp;g_pSurface1); +g_pSurface1-&gt;GetDC( {{FALSE}}, &amp;g_hDC ); +... +//Draw on the {{DC}} using {{GDI}} +... +//When finish drawing release the {{DC}} +g_pSurface1-&gt;ReleaseDC( {{NULL}} ); </pre> + <p>Returns {{S_OK}} if successful; otherwise, an error code.</p> + + + <dd> <p>A Boolean value that specifies whether to preserve Direct3D contents in the {{GDI}} {{DC}}. <strong>{{TRUE}}</strong> directs the runtime not to preserve Direct3D contents in the {{GDI}} {{DC}}; that is, the runtime discards the Direct3D contents. <strong>{{FALSE}}</strong> guarantees that Direct3D contents are available in the {{GDI}} {{DC}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{HDC}}</strong> handle that represents the current device context for {{GDI}} rendering.</p> </dd> + + + + + <p>Releases the {{GDI}} device context ({{DC}}) that is associated with the current surface and allows you to use Direct3D to render.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>ReleaseDC</strong> method to release the {{DC}} and indicate that your application finished all {{GDI}} rendering to this surface. You must call the <strong>ReleaseDC</strong> method before you can use Direct3D to perform additional rendering.</p><p>Prior to resizing buffers you must release all outstanding {{DCs}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for {{GDI}} rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in <strong>{{NULL}}</strong>, <strong>ReleaseDC</strong> considers the whole surface as dirty. Otherwise, <strong>ReleaseDC</strong> uses the area specified by the {{RECT}} as a performance hint to indicate what areas have been manipulated by {{GDI}} rendering.</p> <p>You can pass a reference to an empty <strong>{{RECT}}</strong> structure (a rectangle with no position or area) if you didn't change any content.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerate adapter (video card) outputs.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>When the <strong>EnumOutputs</strong> method succeeds and fills the <em>ppOutput</em> parameter with the address of the reference to the output interface, <strong>EnumOutputs</strong> increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the <strong>Release</strong> method to decrement the reference count.</p><p><strong>EnumOutputs</strong> first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. <strong>EnumOutputs</strong> then returns other outputs.</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}). {{DXGI_ERROR_NOT_FOUND}} is returned if the index is greater than the number of outputs.</p><p>If the adapter came from a device created using {{D3D_DRIVER_TYPE_WARP}}, then the adapter has no outputs, so {{DXGI_ERROR_NOT_FOUND}} is returned. +</p> + + + <dd> <p>The index of the output.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIOutput}}</strong> interface at the position specified by the <em>Output</em> parameter.</p> </dd> + + + + + <p>Gets a {{DXGI}} 1.0 description of an adapter (or video card).</p> + <p>Graphics apps can use the {{DXGI}} {{API}} to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model ({{WDDM}}) drivers. The following are the critical steps involved.</p><ul> <li> Graphics driver model determination ? Because {{DXGI}} is only available on systems with {{WDDM}} drivers, the app must first confirm the driver model by using the following {{API}}. <pre> HasWDDMDriver() +{ {{LPDIRECT3DCREATE9EX}} pD3D9Create9Ex = {{NULL}}; {{HMODULE}} hD3D9 = {{NULL}}; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( {{NULL}} == hD3D9 ) { return false; } // /* Try to create {{IDirect3D9Ex}} interface (also known as a {{DX9L}} interface). This interface can only be created if the driver is a {{WDDM}} driver. */ // pD3D9Create9Ex = ({{LPDIRECT3DCREATE9EX}}) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != {{NULL}}; +} </pre> </li> <li> Retrieval of graphics memory values.? After the app determines the driver model to be {{WDDM}}, the app can use the Direct3D 10 or later {{API}} and {{DXGI}} to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that contains the amount of available graphics memory. <pre> {{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +{{IDXGIAdapter}} * pDXGIAdapter; +pDXGIDevice-&gt;GetAdapter(&amp;pDXGIAdapter); +{{DXGI_ADAPTER_DESC}} adapterDesc; +pDXGIAdapter-&gt;GetDesc(&amp;adapterDesc); </pre> </li> </ul> + <p>Returns {{S_OK}} if successful; otherwise returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p>Checks whether the system supports a device interface for a graphics component.</p> + <strong>Note</strong>??You can use <strong>CheckInterfaceSupport</strong> only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista {{SP1}} and later versions of the operating system. If you try to use <strong>CheckInterfaceSupport</strong> to check whether a Direct3D 11.x and later version interface is supported, <strong>CheckInterfaceSupport</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Therefore, do not use <strong>CheckInterfaceSupport</strong>. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the <strong>{{ID3D11Device::CreateBlendState}}</strong> method and it fails, the operating system does not support the <strong>{{ID3D11BlendState}}</strong> interface.? + <p>{{S_OK}} indicates that the interface is supported, otherwise {{DXGI_ERROR_UNSUPPORTED}} is returned (For more information, see {{DXGI_ERROR}}).</p> + + + <dd> <p>The {{GUID}} of the interface of the device version for which support is being checked. For example, __uuidof({{ID3D10Device}}).</p> </dd> + + + <dd> <p>The user mode driver version of <em>InterfaceName</em>. This is returned only if the interface is supported, otherwise this parameter will be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Get a description of the output.</p> + <p> On a high {{DPI}} desktop, <strong>GetDesc</strong> returns the visualized screen size unless the app is marked high {{DPI}} aware. For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> + <p>Returns a code that indicates success or failure. {{S_OK}} if successful, {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> is passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to the output description (see <strong>{{DXGI_OUTPUT_DESC}}</strong>).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>FindClosestMatchingMode</strong> anymore to find the display mode that most closely matches the requested display mode. Instead, use <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong>, which supports stereo display mode.]</p><p>Finds the display mode that most closely matches the requested display mode.</p> + <p><strong>FindClosestMatchingMode</strong> behaves similarly to the <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> except <strong>FindClosestMatchingMode</strong> considers only the mono display modes. <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> considers only stereo modes if you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure that <em>pModeToMatch</em> points to, and considers only mono modes if <strong>Stereo</strong> is not set.</p><p> <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> returns a matched display-mode set with only stereo modes or only mono modes. +<strong>FindClosestMatchingMode</strong> behaves as though you specified the input mode as mono.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Halt a thread until the next vertical blank occurs.</p> + <p>A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Takes ownership of an output.</p> + <p>When you are finished with the output, call <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>.</p><p><strong>TakeOwnership</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a device (such as an <strong>{{ID3D10Device}}</strong>).</p> </dd> + + + <dd> <p>Set to <strong>{{TRUE}}</strong> to enable other threads or applications to take ownership of the device; otherwise, set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Releases ownership of the output.</p> + <p>If you are not using a swap chain, get access to an output by calling <strong>{{IDXGIOutput::TakeOwnership}}</strong> and release it when you are finished by calling <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>. An application that uses a swap chain will typically not call either of these methods.</p> + <p>Returns nothing.</p> + + + + <p>Gets a description of the gamma-control capabilities.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a description of the gamma-control capabilities (see <strong>{{DXGI_GAMMA_CONTROL_CAPABILITIES}}</strong>).</p> </dd> + + + + + <p>Sets the gamma controls.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure that describes the gamma curve to set.</p> </dd> + + + + + <p>Gets the gamma control settings.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>An array of gamma control settings (see <strong>{{DXGI_GAMMA_CONTROL}}</strong>).</p> </dd> + + + + + <p>Changes the display mode.</p> + <p><strong>{{IDXGIOutput::SetDisplaySurface}}</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p><p>This method should only be called between <strong>{{IDXGIOutput::TakeOwnership}}</strong> and <strong>{{IDXGIOutput::ReleaseOwnership}}</strong> calls.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a surface (see <strong>{{IDXGISurface}}</strong>) used for rendering an image to the screen. The surface must have been created as a back buffer ({{DXGI_USAGE_BACKBUFFER}}).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplaySurfaceData</strong> anymore to retrieve the current display surface. Instead, use <strong>{{IDXGIOutput1::GetDisplaySurfaceData1}}</strong>, which supports stereo display mode.]</p><p>Gets a copy of the current display surface.</p> + <p><strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> can only be called when an output is in full-screen mode. If the method succeeds, {{DXGI}} fills the destination surface.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with {{CPU}}-write permission (see {{D3D10_CPU_ACCESS_WRITE}}). Other surfaces should be created with {{CPU}} read-write permission (see {{D3D10_CPU_ACCESS_READ_WRITE}}). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Gets statistics about recently rendered frames.</p> + <p>This {{API}} is similar to <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p><p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.? + <p>If this function succeeds, it returns {{S_OK}}. Otherwise, it might return {{DXGI_ERROR_INVALID_CALL}}.</p> + + + <dd> <p>A reference to frame statistics (see <strong>{{DXGI_FRAME_STATISTICS}}</strong>).</p> </dd> + + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + <p>Accesses one of the swap-chain's back buffers.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A zero-based buffer index. </p> <p>If the swap chain's swap effect is <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong>, this method can only access the first buffer; for this situation, set the index to zero.</p> <p>If the swap chain's swap effect is either <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the <strong>{{IDXGIResource::GetUsage}}</strong> method for such buffers, they have the <strong>{{DXGI_USAGE_READ_ONLY}}</strong> flag set.</p> </dd> + + + <dd> <p>The type of interface used to manipulate the buffer.</p> </dd> + + + <dd> <p>A reference to a back-buffer interface.</p> </dd> + + + + + <p>Sets the display state to windowed or full screen.</p> + <p>{{DXGI}} may change the display state of a swap chain in response to end user or system requests.</p><p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>SetFullscreenState</strong>; that is, do not set the <strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.</p> + <p>This methods returns: </p><ul> <li>{{S_OK}} if the action succeeded and the swap chain was placed in the requested state.</li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance: <ul> <li>The application is running over Terminal Server.</li> <li>The output window is occluded.</li> <li>The output window does not have keyboard focus.</li> <li>Another application is already in full-screen mode.</li> </ul> <p>When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.</p> </li> <li>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}} is returned if a fullscreen/windowed mode transition is occurring when this {{API}} is called.</li> <li>Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.</li> </ul> + + + <dd> <p>A Boolean value that specifies whether to set the display state to windowed or full screen. <strong>{{TRUE}}</strong> for full screen, and <strong>{{FALSE}}</strong> for windowed.</p> </dd> + + + <dd> <p>If you pass <strong>{{TRUE}}</strong> to the <em>Fullscreen</em> parameter to set the display state to full screen, you can optionally set this parameter to a reference to an <strong>{{IDXGIOutput}}</strong> interface for the output target that contains the swap chain. If you set this parameter to <strong>{{NULL}}</strong>, {{DXGI}} will choose the output based on the swap-chain's device and the output window's placement. If you pass <strong>{{FALSE}}</strong> to <em>Fullscreen</em>, you must set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Get the state associated with full-screen mode.</p> + <p>When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a boolean whose value is either: +</p> <ul> <li><strong>{{TRUE}}</strong> if the swap chain is in full-screen mode</li> <li><strong>{{FALSE}}</strong> if the swap chain is in windowed mode</li> </ul> </dd> + + + <dd> <p>A reference to the output target (see <strong>{{IDXGIOutput}}</strong>) when the mode is full screen; otherwise <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDesc</strong> anymore to get a description of the swap chain. Instead, use <strong>{{IDXGISwapChain1::GetDesc1}}</strong>.]</p><p>Get a description of the swap chain.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized. </p> + <p> You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for <strong>ResizeBuffers</strong> to succeed. </p><p> Direct references are held by the application after it calls <strong>AddRef</strong> on a resource. </p><p> Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on. </p><p> Before you call <strong>ResizeBuffers</strong>, ensure that the application releases all references (by calling the appropriate number of <strong>Release</strong> invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use <strong>{{ID3D11DeviceContext::ClearState}}</strong> to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling <strong>{{ID3D11DeviceContext::ClearState}}</strong>, then <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong>, then <strong>Release</strong> on the command list). After you call <strong>ResizeBuffers</strong>, you can re-query interfaces via <strong>{{IDXGISwapChain::GetBuffer}}</strong>. </p><p> For swap chains that you created with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, before you call <strong>ResizeBuffers</strong>, also call <strong>{{IDXGISurface1::ReleaseDC}}</strong> on the swap chain's back-buffer surface to ensure that you have no outstanding {{GDI}} device contexts ({{DCs}}) open. </p><p> We recommend that you call <strong>ResizeBuffers</strong> when a client window is resized (that is, when an application receives a {{WM_SIZE}} message). </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + + + <p>Resizes the output target.</p> + <p><strong>ResizeTarget</strong> resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call <strong>ResizeTarget</strong> to resize the target window (rather than a Microsoft Win32API such as <strong>SetWindowPos</strong>) without knowledge of the swap chain display mode.</p><p>If a Windows Store app calls <strong>ResizeTarget</strong>, it fails with {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}.</p><p>You cannot call <strong>ResizeTarget</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p><p>Apps must still call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> after they call <strong>ResizeTarget</strong> because only <strong>ResizeBuffers</strong> can change the back buffers. But, if those apps have implemented window resize processing to call <strong>ResizeBuffers</strong>, they don't need to explicitly call <strong>ResizeBuffers</strong> after they call <strong>ResizeTarget</strong> because the window resize processing will achieve what the app requires.</p> + <p>Returns a code that indicates success or failure. <strong>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}}</strong> is returned if a full-screen/windowed mode transition is occurring when this {{API}} is called. See {{DXGI_ERROR}} for additional {{DXGI}} error codes.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>ResizeTarget</strong> uses the existing format. We only recommend that you use <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> when the swap chain is in full-screen mode as this method is not thread safe.</p> </dd> + + + + + <p>Get the output (the display monitor) that contains the majority of the client area of the target window.</p> + <p>If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p><p>You cannot call <strong>GetContainingOutput</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the output interface (see <strong>{{IDXGIOutput}}</strong>).</p> </dd> + + + + + <p>Gets performance statistics about the last render frame.</p> + <p>You cannot use <strong>GetFrameStatistics</strong> for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.</p><p>You can only use <strong>GetFrameStatistics</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure for the frame statistics.</p> </dd> + + + + + <p>Gets the number of times that <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> has been called.</p> + <p>For info about presentation statistics for a frame, see <strong>{{DXGI_FRAME_STATISTICS}}</strong>.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p> An <strong>{{IDXGIFactory}}</strong> interface implements methods for generating {{DXGI}} objects (which handle full screen transitions). </p> + <p> Create a factory by calling <strong>CreateDXGIFactory</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice}} * pDXGIDevice = nullptr; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter = nullptr; +hr = pDXGIDevice-&gt;GetAdapter( &amp;pDXGIAdapter ); {{IDXGIFactory}} * pIDXGIFactory = nullptr; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory}}), (void **)&amp;pIDXGIFactory);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerates the adapters (video cards).</p> + <p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters</strong> next returns other adapters with outputs. <strong>EnumAdapters</strong> finally returns adapters without outputs. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Allows {{DXGI}} to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The combination of <em>WindowHandle</em> and <em>Flags</em> informs {{DXGI}} to stop monitoring window messages for the previously-associated window.</p><p>If the application switches to full-screen mode, {{DXGI}} will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.</p><p>Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a {{WM_SIZE}} message, the application should release any outstanding swap-chain back buffers, call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, {{DXGI}} will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to <strong>ResizeBuffers</strong> on {{WM_SIZE}} is always recommended, since {{WM_SIZE}} is always sent during a fullscreen transition.</p><p>While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but {{UI}} elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field {{WM_SIZING}}, then check against <strong>{{IDXGIOutput::FindClosestMatchingMode}}</strong>. If a matching mode is found, allow the resize. (The {{IDXGIOutput}} can be retrieved from <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)</p><p>Applications that want to handle mode changes or Alt+Enter themselves should call <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swap chain creation. The <em>WindowHandle</em> argument, if non-<strong>{{NULL}}</strong>, specifies that the application message queues will not be handled by the {{DXGI}} runtime for all swap chains of a particular target <strong>{{HWND}}</strong>. Calling <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swapchain creation ensures that {{DXGI}} will not interfere with application's handling of window mode changes or Alt+Enter.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is invalid, or {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>The handle of the window that is to be monitored. This parameter can be <strong>{{NULL}}</strong>; but only if the flags are also 0. </p> </dd> + + + <dd> <p>One or more of the following values: +</p> <ul> <li>{{DXGI_MWA_NO_WINDOW_CHANGES}} - Prevent {{DXGI}} from monitoring an applications message queue; this makes {{DXGI}} unable to respond to mode changes.</li> <li>{{DXGI_MWA_NO_ALT_ENTER}} - Prevent {{DXGI}} from responding to an alt-enter sequence.</li> <li>{{DXGI_MWA_NO_PRINT_SCREEN}} - Prevent {{DXGI}} from responding to a print-screen key.</li> </ul> </dd> + + + + + <p>Get the window through which the user controls the transition to and from full screen.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.? + <p>Returns a code that indicates success or failure. <strong>{{S_OK}}</strong> indicates success, {{DXGI_ERROR_INVALID_CALL}} indicates <em>pWindowHandle</em> was passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a window handle.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>CreateSwapChain</strong> anymore to create a swap chain. Instead, use <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, or <strong>CreateSwapChainForComposition</strong> depending on how you want to create the swap chain.]</p><p>Creates a swap chain.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and {{DXGI_STATUS_OCCLUDED}} will be returned.</p><p>If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.</p><p>Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:</p><ul> <li>Create a windowed swap chain and then set it full-screen using <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>.</li> <li>Save a reference to the swap chain immediately after creation, and use it to get the output window size during a {{WM_SIZE}} event. Then resize the swap chain buffers (with <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>) during the transition from windowed to full-screen.</li> </ul><p>If the swap chain is in full-screen mode, before you release it you must use <strong>SetFullscreenState</strong> to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of {{DXGI}} Overview.</p><p>After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to <strong>{{IDXGISwapChain::Present}}</strong>. To work around this issue, we recommend that you execute the following code right after you call <strong>CreateSwapChain</strong> to create a full-screen swap chain (<strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> set to <strong>{{FALSE}}</strong>). +</p><pre> // Detect if newly created full-screen swap chain isn't actually full screen. +{{IDXGIOutput}}* pTarget; {{BOOL}} bFullscreen; +if ({{SUCCEEDED}}(pSwapChain-&gt;GetFullscreenState(&amp;bFullscreen, &amp;pTarget))) +{ pTarget-&gt;Release(); +} +else bFullscreen = {{FALSE}}; +// If not full screen, enable full screen again. +if (!bFullscreen) +{ ShowWindow(hWnd, {{SW_MINIMIZE}}); ShowWindow(hWnd, {{SW_RESTORE}}); pSwapChain-&gt;SetFullscreenState({{TRUE}}, {{NULL}}); +} +</pre><p>You can specify <strong>{{DXGI_SWAP_EFFECT}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> values in the swap-chain description that <em>pDesc</em> points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 {{APIs}}.</p><p>However, to use stereo presentation and to change resize behavior for the flip model, applications must use the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>, {{DXGI_STATUS_OCCLUDED}} if you request full-screen mode and it is unavailable, or {{E_OUTOFMEMORY}}. Other error codes defined by the type of device passed in may also be returned.</p> + + + + <p>Create an adapter interface that represents a software adapter.</p> + <p>A software adapter is a {{DLL}} that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.</p><p>Calling this method will increment the module's reference count by one. The reference count can be decremented by calling <strong>FreeLibrary</strong>.</p><p>The typical calling scenario is to call <strong>LoadLibrary</strong>, pass the handle to <strong>CreateSoftwareAdapter</strong>, then immediately call <strong>FreeLibrary</strong> on the {{DLL}} and forget the {{DLL}}'s <strong>{{HMODULE}}</strong>. Since the software adapter calls <strong>FreeLibrary</strong> when it is destroyed, the lifetime of the {{DLL}} will now be owned by the adapter, and the application is free of any further consideration of its lifetime.</p> + <p>A return code indicating success or failure.</p> + + + <dd> <p>Handle to the software adapter's dll. {{HMODULE}} can be obtained with <strong>GetModuleHandle</strong> or <strong>LoadLibrary</strong>.</p> </dd> + + + <dd> <p>Address of a reference to an adapter (see <strong>{{IDXGIAdapter}}</strong>).</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Returns the adapter for the specified device.</p> + <p>If the <strong>GetAdapter</strong> method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the {{DXGI_ERROR}} that indicates failure. If the <em>pAdapter</em> parameter is <strong>{{NULL}}</strong> this method returns {{E_INVALIDARG}}.</p> + + + <dd> <p>The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Returns a surface. This method is used internally and you should not call it directly in your application.</p> + <p>The <strong>CreateSurface</strong> method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.</p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when it calls <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>. +</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SURFACE_DESC}}</strong> structure that describes the surface.</p> </dd> + + + <dd> <p>The number of surfaces to create.</p> </dd> + + + <dd> <p>A {{DXGI_USAGE}} flag that specifies how the surface is expected to be used.</p> </dd> + + + <dd> <p>An optional reference to a <strong>{{DXGI_SHARED_RESOURCE}}</strong> structure that contains shared resource information for opening views of such resources.</p> </dd> + + + <dd> <p>The address of an <strong>{{IDXGISurface}}</strong> interface reference to the first created surface.</p> </dd> + + + + + <p>Gets the residency status of an array of resources.</p> + <p>The information returned by the <em>pResidencyStatus</em> argument array describes the residency status at the time that the <strong>QueryResourceResidency</strong> method was called. </p><strong>Note</strong>??The residency status will constantly change.?<p>If you call the <strong>QueryResourceResidency</strong> method during a device removed state, the <em>pResidencyStatus</em> argument will return the <strong>{{DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY}}</strong> flag.</p><strong>Note</strong>??This method should not be called every frame as it incurs a non-trivial amount of overhead.? + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_DEVICE_REMOVED}}, {{E_INVALIDARG}}, or {{E_POINTER}} (see Common {{HRESULT}} Values and WinError.h for more information).</p> + + + <dd> <p>An array of <strong>{{IDXGIResource}}</strong> interfaces.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RESIDENCY}}</strong> flags. Each element describes the residency status for corresponding element in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array and <em>pResidencyStatus</em> argument array.</p> </dd> + + + + + <p>Sets the {{GPU}} thread priority.</p> + <p>The values for the <em>Priority</em> parameter function as follows:</p><ul> <li>Positive values increase the likelihood that the {{GPU}} scheduler will grant {{GPU}} execution cycles to the device when rendering.</li> <li>Negative values lessen the likelihood that the device will receive {{GPU}} execution cycles when devices compete for them.</li> <li>The device is guaranteed to receive some {{GPU}} execution cycles at all settings.</li> </ul><p>To use the <strong>SetGPUThreadPriority</strong> method, you should have a comprehensive understanding of {{GPU}} scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the <strong>SetGPUThreadPriority</strong> method can impede rendering speed and result in a poor user experience.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Priority</em> parameter is invalid.</p> + + + <dd> <p>A value that specifies the required {{GPU}} thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>Gets the {{GPU}} thread priority.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_POINTER}} if the <em>pPriority</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a variable that receives a value that indicates the current {{GPU}} thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>The <strong>{{IDXGIFactory1}}</strong> interface implements methods for generating {{DXGI}} objects.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>To create a factory, call the <strong>CreateDXGIFactory1</strong> function.</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong> or <strong>{{IDXGIDevice1}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory1}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory1}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Enumerates both adapters (video cards) with or without outputs.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory1}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters1</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters1</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters1</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters1</strong> next returns other adapters with outputs. <strong>EnumAdapters1</strong> finally returns adapters without outputs.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter1}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Informs an application of the possible need to re-enumerate adapters.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p> + <p><strong>{{FALSE}}</strong>, if a new adapter is becoming available or the current adapter is going away. <strong>{{TRUE}}</strong>, no adapter changes.</p><p><strong>IsCurrent</strong> returns <strong>{{FALSE}}</strong> to inform the calling application to re-enumerate adapters.</p> + + + + <p> The <strong>{{IDXGIAdapter1}}</strong> interface represents a display sub-system (including one or more {{GPU}}'s, {{DACs}} and video memory). </p> + <p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p>A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.</p><p> To enumerate the display sub-systems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Gets a {{DXGI}} 1.1 description of an adapter (or video card).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>GetDesc1</strong> method to get a {{DXGI}} 1.1 description of an adapter. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter}}</strong> method.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC1}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice1}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p>This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>) and the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> method if desired. </p><p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p> The <strong>{{IDXGIDevice1}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice1}}</strong> interface. To retrieve the <strong>{{IDXGIDevice1}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.</p> </dd> + + + + + <p>Gets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.0 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the fullscreen display mode.</p><p>If the <strong>CreateDXGIFactory</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory::Release}}</strong> method to release the interface.</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>?<p>The <strong>CreateDXGIFactory</strong> function does not exist for Windows Store apps. Instead, Windows Store apps use the <strong>CreateDXGIFactory1</strong> function.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory}}</strong> object.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.1 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} 1.1 factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the full-screen display mode. </p><p>If the <strong>CreateDXGIFactory1</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory1}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory1::Release}}</strong> method to release the interface.</p><p>This entry point is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory1</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory1}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory1}}</strong> object.</p> </dd> + + + + + <p> Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type. </p> + + + + <dd> <p>The format is not known.</p> </dd> + + + <dd> <p>A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8</p> </dd> + + + <dd> <p>A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A three-component, 96-bit typeless format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8</p> </dd> + + + <dd> <p>A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit signed-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8</p> </dd> + + + <dd> <p>A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit typeless format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit typeless format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit typeless format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format for alpha only.</p> </dd> + + + <dd> <p>A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{UYVY}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{YUY2}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V-&gt;{{R8}}, +U-&gt;{{G8}}, +Y-&gt;{{B8}}, +and A-&gt;{{A8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R10}}, +Y-&gt;{{G10}}, +V-&gt;{{B10}}, +and A-&gt;{{A2}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R16}}, +Y-&gt;{{G16}}, +V-&gt;{{B16}}, +and A-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_P010}} is no different than {{DXGI_FORMAT_P016}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit per channel planar {{YUV}} 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any {{RECT}} that are used for this format are multiples of 2. This format differs from {{DXGI_FORMAT_NV12}} in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the {{CPU}} to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-{{NV12}} 4:2:0 layout (for example, {{YV12}}, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than {{NV12}} can be used when the application does not need the data to be in a standard layout. </p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. </p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt;{{G8}}, +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt;{{A8}}.</p> <p>A unique valid view format for this video resource format is {{DXGI_FORMAT_R8G8_B8G8_UNORM}}. With this view format, the width of the view appears to be twice what the {{DXGI_FORMAT_R8G8B8A8_UNORM}} or {{DXGI_FORMAT_R8G8B8A8_UINT}} view would be when hardware reconstructs {{RGBA}} automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt; +{{G8}}[0], +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt; +{{G8}}[1].</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_Y210}} is no different than {{DXGI_FORMAT_Y216}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common planar {{YUV}} 4:1:1 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the {{UV}} plane, and the remainder is padding. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format that is used for palletized {{RGB}} data when the processor processes {{ISDB}}-T data and for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format with 8 bits of alpha that is used for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A video format; an 8-bit version of a hybrid planar 4:2:2 format.</p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4 rendering format. </p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4:4:4 rendering format. </p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Flags used with <strong>ReportLiveObjects</strong> to specify the amount of info to report about an object's lifetime. </p> + <p> Use this enumeration with <strong>{{IDXGIDebug::ReportLiveObjects}}</strong>. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Values that specify categories of debug messages.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. When you create an info queue filter, you can use these values to allow or deny any categories of messages to pass through the storage and retrieval filters.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Unknown category.</p> </dd> + + + <dd> <p>Miscellaneous category.</p> </dd> + + + <dd> <p>Initialization category.</p> </dd> + + + <dd> <p>Cleanup category.</p> </dd> + + + <dd> <p>Compilation category.</p> </dd> + + + <dd> <p>State creation category.</p> </dd> + + + <dd> <p>State setting category.</p> </dd> + + + <dd> <p>State getting category.</p> </dd> + + + <dd> <p>Resource manipulation category.</p> </dd> + + + <dd> <p>Execution category.</p> </dd> + + + <dd> <p>Shader category.</p> </dd> + + + + + <p>Values that specify debug message severity levels for an information queue.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. Also, use this enumeration with <strong>{{IDXGIInfoQueue::AddApplicationMessage}}</strong>. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Defines some type of corruption that has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> </dd> + + + + + <p>Describes a debug message in the information queue.</p> + <p> <strong>{{IDXGIInfoQueue::GetMessage}}</strong> returns a reference to this structure.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of the message string at <strong>pDescription</strong>, in bytes.</p> </dd> + + + + + <p>Describes the types of messages to allow or deny to pass through a filter.</p> + <p>This structure is a member of the <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure.</p><p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + + + <dd> <p>The number of message categories to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong> enumeration values that describe the message categories to allow or deny. The array must have at least <strong>NumCategories</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong> enumeration values that describe the message severity levels to allow or deny. The array must have at least <strong>NumSeverities</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>An array of integers that represent the message {{IDs}} to allow or deny. The array must have at least <strong>NumIDs</strong> number of elements.</p> </dd> + + + + + <p>Describes a debug message filter, which contains lists of message types to allow and deny.</p> + <p>Use with an <strong>{{IDXGIInfoQueue}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to allow.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to deny.</p> </dd> + + + + + <p>This interface controls the debug information queue, and can only be used if the debug layer is turned on.</p> + <p>This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function.</p><p>For more info about the debug layer, see Debug Layer.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the maximum number of messages that can be added to the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the limit on the number of messages.</p> </dd> + + + <dd> <p>The maximum number of messages that can be added to the queue. ?1 means no limit.</p> </dd> + + + + + <p>Clears all messages from the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that clears the messages.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p>Gets the number of messages that can pass through a retrieval filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that can pass through a retrieval filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages currently stored in the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages currently stored in the message queue.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{IDXGIInfoQueue::GetMessageCountLimit}}</strong> and <strong>{{IDXGIInfoQueue::SetMessageCountLimit}}</strong>, respectively. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that were discarded.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue reaches the maximum limit, new messages coming in push old messages out.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the maximum number of messages that can be added to the queue. ?1 means no limit.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that a storage filter allowed to pass through.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages allowed by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were denied passage through a storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages denied by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Adds storage filters to the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the storage filter at the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetStorageFilter</strong> outputs the size of the storage filter.</p> </dd> + + + + + <p>Removes a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty storage filter.</p> </dd> + + + + + <p>Pushes a deny-all storage filter onto the storage-filter stack.</p> + <p>A deny-all storage filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + + + <p>Pushes a copy of the storage filter that is currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the storage filter.</p> </dd> + + + + + <p>Pushes a storage filter onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the storage-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the storage-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds retrieval filters to the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the retrieval filter at the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetRetrievalFilter</strong> outputs the size of the retrieval filter.</p> </dd> + + + + + <p>Removes a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty retrieval filter.</p> </dd> + + + + + <p>Pushes a deny-all retrieval filter onto the retrieval-filter stack.</p> + <p>A deny-all retrieval filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the deny-all retrieval filter.</p> </dd> + + + + + <p>Pushes a copy of the retrieval filter that is currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the retrieval filter.</p> </dd> + + + + + <p>Pushes a retrieval filter onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the retrieval-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the retrieval-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds a debug message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Adds a user-defined message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Sets a message category to break on when a message with that category passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnCategory</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnSeverity</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnID</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the break on a message category is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this category of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + + + <p>Determines whether the break on a message severity level is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this severity of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + + + <p>Determines whether the break on a message identifier is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this break on a message identifier is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + + + <p>Turns the debug output on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to turn the debug output on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the debug output is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether the debug output is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + + + <p>This interface controls debug settings, and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function. </p><p> For more info about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Reports info about the lifetime of an object or objects.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the object or objects to get info about. Use one of the <strong>{{DXGI_DEBUG_ID}}</strong> {{GUIDs}}.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_DEBUG_RLO_FLAGS}}</strong>-typed value that specifies the amount of info to report.</p> </dd> + + + + + <p>Controls debug settings for Microsoft DirectX Graphics Infrastructure ({{DXGI}}). You can use the <strong>{{IDXGIDebug1}}</strong> interface in Windows Store apps. </p> + <p>Call the <strong>{{DXGIGetDebugInterface1}}</strong> function to obtain the <strong>{{IDXGIDebug1}}</strong> interface.</p><p>The <strong>{{IDXGIDebug1}}</strong> interface can be used only if the debug layer is turned on. For more info, see Debug Layer.</p> + + + + + + + + + + + + + <p>Retrieves a debugging interface.</p> + <p> <strong>{{IDXGIDebug}}</strong> and <strong>{{IDXGIInfoQueue}}</strong> are debugging interfaces.</p><p>To access <strong>{{DXGIGetDebugInterface}}</strong>, call the <strong>GetModuleHandle</strong> function to get Dxgidebug.dll and the <strong>GetProcAddress</strong> function to get the address of <strong>{{DXGIGetDebugInterface}}</strong>.</p><p><strong>Windows?8.1:??</strong>Starting in Windows?8.1, Windows Store apps call the <strong>{{DXGIGetDebugInterface1}}</strong> function to get an <strong>{{IDXGIDebug1}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Flags indicating the method the raster uses to create an image on a surface.</p> + <p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Scanline order is unspecified.</p> </dd> + + + <dd> <p>The image is created from the first scanline to the last without skipping any.</p> </dd> + + + <dd> <p>The image is created beginning with the upper field.</p> </dd> + + + <dd> <p>The image is created beginning with the lower field.</p> </dd> + + + + + <p>Flags indicating how an image is stretched to fit a given monitor's resolution.</p> + <p>Selecting the {{CENTERED}} or {{STRETCHED}} modes can result in a mode change even if you specify the native resolution of the display in the {{DXGI_MODE_DESC}}. If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via {{ALT}}+{{ENTER}} or <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>), you should use {{UNSPECIFIED}}.</p><p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Unspecified scaling.</p> </dd> + + + <dd> <p>Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an {{LED}} display).</p> </dd> + + + <dd> <p>Specifies stretched scaling.</p> </dd> + + + + + <p>Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.</p> + + + <dd> <p>Unspecified rotation.</p> </dd> + + + <dd> <p>Specifies no rotation.</p> </dd> + + + <dd> <p>Specifies 90 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 180 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 270 degrees of rotation.</p> </dd> + + + + + <p>Represents an {{RGB}} color.</p> + <p>This structure is a member of the <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure.</p> + + + <dd> <p>A value representing the color of the red component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the green component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the blue component. The range of this value is between 0 and 1.</p> </dd> + + + + + <p>Describes color values.</p> + <p>You can set the members of this structure to values outside the range of 0 through 1 to implement some unusual effects. Values greater than 1 produce strong lights that tend to wash out a scene. Negative values produce dark lights that actually remove light from a scene. </p> + + + <dd> <p>Floating-point value that specifies the red component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the red component, while a value of 1.0 indicates that red is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the green component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the green component, while a value of 1.0 indicates that green is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the blue component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the blue component, while a value of 1.0 indicates that blue is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the alpha component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates fully transparent, while a value of 1.0 indicates fully opaque.</p> </dd> + + + + + <p>Controls the settings of a gamma curve.</p> + <p>The <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure is used by the <strong>{{IDXGIOutput::SetGammaControl}}</strong> method.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with scalar values that are applied to rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with offset values that are applied to the rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RGB}}</strong> structures that control the points of a gamma curve.</p> </dd> + + + + + <p>Controls the gamma capabilities of an adapter.</p> + <p>To get a list of the capabilities for controlling gamma correction, call <strong>{{IDXGIOutput::GetGammaControlCapabilities}}</strong>.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>True if scaling and offset operations are supported during gamma correction; otherwise, false.</p> </dd> + + + <dd> <p>A value describing the maximum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the minimum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the number of control points in the array.</p> </dd> + + + <dd> <p>An array of values describing control points; the maximum length of control points is 1025.</p> </dd> + + + + + <p>Describes a display mode.</p> + <p>This structure is used by the <strong>GetDisplayModeList</strong> and <strong>FindClosestMatchingMode</strong> methods.</p><p>The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.</p><ul> <li> <p>Feature level &gt;= 9.1</p> <ul> <li> <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong> </li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong></li> <li> <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> (except 10.x on Windows?Vista)</li> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> (except 10.x on Windows?Vista)</li> </ul> </li> <li> <p>Feature level &gt;= 10.0</p> <ul> <li> <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong> </li> <li><strong>{{DXGI_FORMAT_R10G10B10A2_UNORM}}</strong></li> </ul> </li> <li> <p>Feature level &gt;= 11.0</p> <ul> <li><strong>{{DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM}}</strong></li> </ul> </li> </ul><p>You can pass one of these format values to <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to determine if it is a valid format for displaying on screen. If <strong>{{ID3D11Device::CheckFormatSupport}}</strong> returns <strong>{{D3D11_FORMAT_SUPPORT_DISPLAY}}</strong> in the bit field to which the <em>pFormatSupport</em> parameter points, the format is valid for displaying on screen.</p><p>Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>), you must set the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC}}</strong> to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>.</p><p>Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> render target view from a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> swap chain so they can use automatic color space conversion when they render the swap chain.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned width value.</p> </dd> + + + <dd> <p>A value describing the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned height value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure describing the refresh rate in hertz</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure describing the display format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type describing the scanline drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type describing the scaling mode.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{DC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{AC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} quantization table.</p> + + + <dd> <p>An array of bytes containing the elements of the quantization table.</p> </dd> + + + + + <p>Specifies color space types.</p> + <p>This enum is used within {{DXGI}} in the <strong>CheckColorSpaceSupport</strong>, <strong>SetColorSpace1</strong> and <strong>CheckOverlayColorSpaceSupport</strong> methods. It is also referenced in {{D3D11}} video methods such as <strong>{{ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1}}</strong>, and {{D2D}} methods such as <strong>{{ID2D1DeviceContext2::CreateImageSourceFromDxgi}}</strong>.</p><p>The following color parameters are defined:</p> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>1.0</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for {{ITU}}-R Recommendation {{BT}}.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> <tr><td>{{Transfer}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{JPG}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{MPEG2}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This definition is commonly used for H.264 and {{HEVC}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This definition may be used by {{HEVC}}, and is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <p>A custom color definition is used. </p> </dd> + + + + + <p>Represents a rational number.</p> + <p>This structure is a member of the <strong>{{DXGI_MODE_DESC}}</strong> structure.</p><p>The <strong>{{DXGI_RATIONAL}}</strong> structure operates under the following rules:</p><ul> <li>0/0 is legal and will be interpreted as 0/1.</li> <li>0/anything is interpreted as zero.</li> <li>If you are representing a whole number, the denominator should be 1.</li> </ul> + + + <dd> <p>An unsigned integer value representing the top of the rational number.</p> </dd> + + + <dd> <p>An unsigned integer value representing the bottom of the rational number.</p> </dd> + + + + + <p>Describes multi-sampling parameters for a resource.</p> + <p>This structure is a member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.</p><p>If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.</p><table> <tr><td> <p>Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:</p> <p>Direct3D 10.1 has defined two standard quality levels: <strong>{{D3D10_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D10_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D10_1}}.h.</p> <p>Direct3D 11 has defined two standard quality levels: <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D11}}.h.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of multisamples per pixel.</p> </dd> + + + <dd> <p>The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by <strong>{{ID3D10Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 10 or <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 11.</p> <p>For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.</p> </dd> + + + + + <p>Identifies the type of reference shape.</p> + + + <dd> <p>The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap ({{DIB}}) format {{AND}} mask that is followed by another 1 bpp {{DIB}} format {{XOR}} mask of the same size.</p> </dd> + + + <dd> <p>The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp {{ARGB}} {{DIB}} format.</p> </dd> + + + <dd> <p>The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp {{ARGB}} format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the {{RGB}} value should replace the screen pixel. When the mask value is 0xFF, an {{XOR}} operation is performed on the {{RGB}} value and the screen pixel; the result replaces the screen pixel.</p> </dd> + + + + + <p>Identifies the alpha value, transparency behavior, of a surface.</p> + <p>For more information about alpha mode, see <strong>{{D2D1_ALPHA_MODE}}</strong>.</p> + + + <dd> <p>Indicates that the transparency behavior is not specified.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.</p> </dd> + + + <dd> <p>Indicates to ignore the transparency behavior.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Identifies the importance of a resource?s content when you call the <strong>{{IDXGIDevice2::OfferResources}}</strong> method to offer the resource. </p> + <p>Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.</p> + + + + <p>Identifies resize behavior when the back-buffer size does not match the size of the target output.</p> + <p>The {{DXGI_SCALING_NONE}} value is supported only for flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value. You pass these values in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. </p><p>{{DXGI_SCALING_ASPECT_RATIO_STRETCH}} will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.</p><code>float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight &gt;= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast&lt;{{LONG}}&gt;(offsetX); rect.top = static_cast&lt;{{LONG}}&gt;(offsetY); rect.right = static_cast&lt;{{LONG}}&gt;(offsetX + scaledWidth); rect.bottom = static_cast&lt;{{LONG}}&gt;(offsetY + scaledHeight); rect.left = std::max&lt;{{LONG}}&gt;(0, rect.left); rect.top = std::max&lt;{{LONG}}&gt;(0, rect.top); rect.right = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputWidth), rect.right); rect.bottom = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputHeight), rect.bottom); +</code><p>Note that <em>outputWidth</em> and <em>outputHeight</em> are the pixel sizes of the presentation target size. In the case of <strong>CoreWindow</strong>, this requires converting the <em>logicalWidth</em> and <em>logicalHeight</em> values from {{DIPS}} to pixels using the window's {{DPI}} property.</p> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of {{DXGI}} when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the {{WS_EX_LAYOUTRTL}} style is associated with the <strong>{{HWND}}</strong> handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.</p> <p>This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to <strong>{{IDXGISwapChain1::SetBackgroundColor}}</strong>.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.</p> <p>This constant is supported on Windows Phone 8 and Windows 10. </p> <p>Note that with legacy Win32 window swapchains, this works the same as {{DXGI_SCALING_STRETCH}}. +</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current graphics rendering task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the <strong>GraphicsPreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p><p>The following figure shows granularity of graphics rendering tasks.</p> + + + <dd> <p>Indicates the preemption granularity as a {{DMA}} buffer.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics primitive. A primitive is a section in a {{DMA}} buffer and can be a group of triangles.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current compute task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the <strong>ComputePreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p> + + + <dd> <p>Indicates the preemption granularity as a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a dispatch (for example, a call to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method). A dispatch is a part of a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a compute instruction in a thread.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structure describes the movement of a rectangle.</p> + <p>This structure is used by <strong>GetFrameMoveRects</strong>.</p> + + + <dd> <p>The starting position of a rectangle.</p> </dd> + + + <dd> <p>The target region to which to move a rectangle.</p> </dd> + + + + + <p>The {{DXGI_OUTDUPL_DESC}} structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>This structure is used by <strong>GetDesc</strong>.</p> + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure describes the position of the hardware cursor.</p> + <p>The <strong>Position</strong> member is valid only if the <strong>Visible</strong> member?s value is set to <strong>{{TRUE}}</strong>.</p> + + + <dd> <p>The position of the hardware cursor relative to the top-left of the adapter output.</p> </dd> + + + <dd> <p>Specifies whether the hardware cursor is visible. <strong>{{TRUE}}</strong> if visible; otherwise, <strong>{{FALSE}}</strong>. If the hardware cursor is not visible, the calling application does not display the cursor in the client.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure describes information about the cursor shape.</p> + <p>An application draws the cursor shape with the top-left-hand corner drawn at the position that the <strong>Position</strong> member of the <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure specifies; the application does not use the hot spot to draw the cursor shape.</p><p>An application calls the <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to retrieve cursor shape information in a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure.</p> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_TYPE}}</strong>-typed value that specifies the type of cursor shape. </p> </dd> + + + <dd> <p>The width in pixels of the mouse cursor.</p> </dd> + + + <dd> <p>The height in scan lines of the mouse cursor.</p> </dd> + + + <dd> <p>The width in bytes of the mouse cursor.</p> </dd> + + + <dd> <p>The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure describes the current desktop image.</p> + <p>A non-zero <strong>LastMouseUpdateTime</strong> indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero <strong>LastMouseUpdateTime</strong>; however, the application must check the value of the <strong>PointerShapeBufferSize</strong> member to determine whether the shape was updated too.</p><p>If only the reference was updated (that is, the desktop image was not updated), the <strong>AccumulatedFrames</strong>, <strong>TotalMetadataBufferSize</strong>, and <strong>LastPresentTime</strong> members are set to zero.</p><p>An <strong>AccumulatedFrames</strong> value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the <strong>AccumulatedFrames</strong> value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.</p><p>A non-zero <strong>TotalMetadataBufferSize</strong> indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the <strong>{{IDXGIOutputDuplication::GetFrameDirtyRects}}</strong>, <strong>{{IDXGIOutputDuplication::GetFrameMoveRects}}</strong>, or <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to obtain information about each type of metadata.</p><strong>Note</strong>??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? + + + <dd> <p>The time stamp of the last update of the desktop image. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image.</p> </dd> + + + <dd> <p>The time stamp of the last update to the mouse. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the <strong>PointerShapeBufferSize</strong> member.</p> </dd> + + + <dd> <p>The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. <strong>{{TRUE}}</strong> if dirty regions were accumulated; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. <strong>{{TRUE}}</strong> if protected content was already blacked; otherwise, <strong>{{FALSE}}</strong>. The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure that describes the most recent mouse position if the <strong>LastMouseUpdateTime</strong> member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.</p> </dd> + + + <dd> <p>Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.</p> </dd> + + + <dd> <p>Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.</p> </dd> + + + + + <p>Describes a display mode and whether the display mode supports stereo.</p> + <p><strong>{{DXGI_MODE_DESC1}}</strong> is identical to <strong>{{DXGI_MODE_DESC}}</strong> except that <strong>{{DXGI_MODE_DESC1}}</strong> includes the <strong>Stereo</strong> member.</p><p>This structure is used by the <strong>GetDisplayModeList1</strong> and <strong>FindClosestMatchingMode1</strong> methods.</p> + + + <dd> <p>A value that describes the resolution width.</p> </dd> + + + <dd> <p>A value that describes the resolution height.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that describes the display format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong>-typed value that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCALING}}</strong>-typed value that describes the scaling mode.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, <strong>CreateSwapChainForComposition</strong>, <strong>CreateSwapChainForCompositionSurfaceHandle</strong>, and <strong>GetDesc1</strong> methods.</p><strong>Note</strong>??You cannot cast a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> to a <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and vice versa. An application must explicitly use the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the newer version of the swap-chain description structure.?<p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>For a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member), you must set the <strong>Format</strong> member to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>; you must set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that the <strong>SampleDesc</strong> member specifies to one and the <strong>Quality</strong> member of <strong>{{DXGI_SAMPLE_DESC}}</strong> to zero because multiple sample antialiasing ({{MSAA}}) is not supported; you must set the <strong>BufferCount</strong> member to from two to sixteen. For more info about flip-model swap chain, see {{DXGI}} Flip Model.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width value. You cannot specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A value that describes the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned height value. You cannot specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure that describes the display format.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_USAGE}}</strong>-typed value that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SCALING}}</strong>-typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SWAP_EFFECT}}</strong>-typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method because this method supports only flip presentation model.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_ALPHA_MODE}}</strong>-typed value that identifies the transparency behavior of the swap-chain back buffer.</p> </dd> + + + <dd> <p>A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior.</p> </dd> + + + + + <p>Describes full-screen mode for a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong> and <strong>GetFullscreenDesc</strong> methods.</p> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type that describes the scaling mode.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the swap chain is in windowed mode. <strong>{{TRUE}}</strong> if the swap chain is in windowed mode; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes information about present that helps the operating system optimize presentation.</p> + <p>This structure is used by the <strong>Present1</strong> method.</p><p>The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.</p><p>The following diagram and coordinates illustrate this example.</p><code> DirtyRectsCount = 2 +pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video +pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line +*pScrollRect = { 0, 0, 50, 70 } +*pScrollOffset = { 0, -10 } +</code><p>Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.</p><p>The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the <strong>pScrollRect</strong> member. +The arrow shows the scroll offset. The scroll offset is specified by the <strong>pScrollOffset</strong> member. +Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the <strong>DirtyRectsCount</strong> and <strong>pDirtyRects</strong> members.</p><p>The scroll rectangle and offset are not supported for the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.</p><p>The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see {{DXGI}} Flip Model.</p><p>For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.</p> + + + <dd> <p>The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.</p> </dd> + + + <dd> <p>A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to <strong>{{NULL}}</strong> if <strong>DirtyRectsCount</strong> is 0. An application must not update any pixel outside of the dirty rectangles.</p> </dd> + + + <dd> <p> A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.</p> <p>The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to <strong>{{NULL}}</strong> to indicate that no content is scrolled from the previous frame.</p> </dd> + + + <dd> <p>A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to <strong>{{NULL}}</strong> to indicate no offset.</p> </dd> + + + + + <p>Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure provides a {{DXGI}} 1.2 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_GRAPHICS_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_COMPUTE_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current compute task.</p> </dd> + + + + + <p> </p><p> The <strong>{{IDXGIDisplayControl}}</strong> interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable. </p><p> We recommend that you not use <strong>{{IDXGIDisplayControl}}</strong> to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the <strong>{{IDXGIFactory2::IsWindowedStereoEnabled}}</strong> method to determine whether to render in stereo; for your full-screen apps, call the <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong> method and then determine whether any of the returned display modes support rendering in stereo. </p> + <strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface is only used by the <strong>Display</strong> app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?<strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface does not exist for Windows Store apps.?<p> Call <strong>QueryInterface</strong> from a factory object (<strong>{{IDXGIFactory}}</strong>, <strong>{{IDXGIFactory1}}</strong> or <strong>{{IDXGIFactory2}}</strong>) to retrieve the <strong>{{IDXGIDisplayControl}}</strong> interface. The following code shows how. </p><pre>{{IDXGIDisplayControl}} * pDXGIDisplayControl; +hr = g_pDXGIFactory-&gt;QueryInterface(__uuidof({{IDXGIDisplayControl}}), (void **)&amp;pDXGIDisplayControl);</pre><p> The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls <strong>{{IDXGIDisplayControl::IsStereoEnabled}}</strong> to query for stereo configuration. Control applets can use the <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> method to register for notifications of all stereo configuration changes. </p><p><strong>Platform Update for Windows?7:??</strong> Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.</p> + <p>You pass a Boolean value to the <strong>{{IDXGIDisplayControl::SetStereoEnabled}}</strong> method to either enable or disable the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> + <p><strong>IsStereoEnabled</strong> returns {{TRUE}} when the operating system's stereoscopic 3D display behavior is enabled and {{FALSE}} when this behavior is disabled.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetStereoEnabled</strong> doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> </dd> + + + + + <p> The <strong>{{IDXGIOutputDuplication}}</strong> interface accesses and manipulates the duplicated desktop image. </p> + <p> A collaboration application can use <strong>{{IDXGIOutputDuplication}}</strong> to access the desktop image. <strong>{{IDXGIOutputDuplication}}</strong> is supported in Desktop Window Manager ({{DWM}}) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit {{GDI}} non-{{DWM}} desktop modes are not supported. </p><p> An application can use <strong>{{IDXGIOutputDuplication}}</strong> on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses <strong>{{IDXGIOutputDuplication}}</strong> to perform the following operations: </p><ol> <li>Acquire the next desktop image.</li> <li>Retrieve the information that describes the image.</li> <li> Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls <strong>{{IDXGISurface::Map}}</strong>. Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client. </li> <li>After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.</li> </ol><p>The following components of the operating system can generate the desktop image:</p><ul> <li> The {{DWM}} by composing the desktop image </li> <li>A full-screen DirectX or OpenGL application</li> <li>An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen</li> </ul><p> All current <strong>{{IDXGIOutputDuplication}}</strong> interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> interface. </p><p> Examples of situations in which <strong>{{IDXGIOutputDuplication}}</strong> becomes invalid are: </p><ul> <li>Desktop switch</li> <li>Mode change</li> <li> Switch from {{DWM}} on, {{DWM}} off, or other full-screen application </li> </ul><p> In these situations, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and must create a new <strong>{{IDXGIOutputDuplication}}</strong> interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the <strong>{{IDXGIOutput1::DuplicateOutput}}</strong> method fails. </p><p> While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data. </p><p> The desktop image is always in the <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> format. </p><p> The <strong>{{IDXGIOutputDuplication}}</strong> interface does not exist for Windows Store apps. </p> + + + + <p>Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.</p> + <p>After an application creates an <strong>{{IDXGIOutputDuplication}}</strong> interface, it calls <strong>GetDesc</strong> to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure that describes the duplicated output. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Indicates that the application is ready to process the next desktop image.</p> + <p>When <strong>AcquireNextFrame</strong> returns successfully, the calling application can access the desktop image that <strong>AcquireNextFrame</strong> returns in the variable at <em>ppDesktopResource</em>. +If the caller specifies a zero time-out interval in the <em>TimeoutInMilliseconds</em> parameter, <strong>AcquireNextFrame</strong> verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an <strong>{{INFINITE}}</strong> time-out interval in the <em>TimeoutInMilliseconds</em> parameter, the time-out interval never elapses.</p><strong>Note</strong>??You cannot cancel the wait that you specified in the <em>TimeoutInMilliseconds</em> parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-<strong>{{INFINITE}}</strong> time-out interval. After the time-out interval elapses, you can check for these other conditions and then call <strong>AcquireNextFrame</strong> again to wait for the next frame.?<p><strong>AcquireNextFrame</strong> acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that <strong>AcquireNextFrame</strong> acquires might have only the desktop image updated, only the reference shape or position updated, or both.</p> + <p><strong>AcquireNextFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully received the next desktop image.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_WAIT_TIMEOUT}} if the time-out interval elapsed before the next desktop frame was available.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>AcquireNextFrame</strong> without releasing the previous frame.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>AcquireNextFrame</strong> is incorrect; for example, if <em>pFrameInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.</p> <p>For more information about the time-out interval, see Remarks.</p> </dd> + + + <dd> <p>A reference to a memory location that receives the <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure that describes timing and presentation statistics for a frame.</p> </dd> + + + <dd> <p>A reference to a variable that receives the <strong>{{IDXGIResource}}</strong> interface of the surface that contains the desktop bitmap.</p> </dd> + + + + + <p>Gets information about dirty rectangles for the current desktop frame.</p> + <p><strong>GetFrameDirtyRects</strong> stores a size value in the variable at <em>pDirtyRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pDirtyRectsBuffer</em>:</p><ul> <li><strong>GetFrameDirtyRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameDirtyRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pDirtyRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>DirtyRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pDirtyRectsBufferSizeRequired</em> to determine the number of <strong>{{RECT}}</strong>s returned in the <em>pDirtyRectsBuffer</em> array.</p><p>The buffer contains the list of dirty <strong>{{RECT}}</strong>s for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move <strong>{{RECT}}</strong>s before it processes dirty <strong>{{RECT}}</strong>s.? + <p><strong>GetFrameDirtyRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about dirty rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameDirtyRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameDirtyRects</strong> is incorrect; for example, if <em>pDirtyRectsBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pDirtyRectsBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{RECT}}</strong> structures that identifies the dirty rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions in the buffer at <em>pDirtyRectsBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the moved rectangles for the current desktop frame.</p> + <p><strong>GetFrameMoveRects</strong> stores a size value in the variable at <em>pMoveRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pMoveRectBuffer</em>:</p><ul> <li><strong>GetFrameMoveRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameMoveRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pMoveRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>MoveRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pMoveRectsBufferSizeRequired</em> to determine the number of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures returned.</p><p>The buffer contains the list of move {{RECTs}} for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move {{RECTs}} before it processes dirty {{RECTs}}.? + <p><strong>GetFrameMoveRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about moved rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided is not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameMoveRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameMoveRects</strong> is incorrect; for example, if <em>pMoveRectBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pMoveRectBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures that identifies the moved rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions in the buffer at <em>pMoveRectBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the new reference shape for the current desktop frame.</p> + <p><strong>GetFramePointerShape</strong> stores a size value in the variable at <em>pPointerShapeBufferSizeRequired</em>. This value specifies the number of bytes that <em>pPointerShapeBufferSizeRequired</em> needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pPointerShapeBuffer</em>:</p><ul> <li><strong>GetFramePointerShape</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFramePointerShape</strong> supplies a bigger than necessary buffer. The size value returned at <em>pPointerShapeBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>PointerShapeBufferSize</em> parameter.</li> </ul><p>The <em>pPointerShapeInfo</em> parameter describes the new reference shape.</p> + <p><strong>GetFramePointerShape</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about the new reference shape.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFramePointerShape</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFramePointerShape</strong> is incorrect; for example, if <em>pPointerShapeInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pPointerShapeBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to a buffer to which <strong>GetFramePointerShape</strong> copies and returns pixel data for the new reference shape.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFramePointerShape</strong> needs to store the new reference shape pixel data in the buffer at <em>pPointerShapeBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure that receives the reference shape information.</p> </dd> + + + + + <p>Provides the {{CPU}} with efficient access to a desktop image if that desktop image is already in system memory.</p> + <p>You can successfully call <strong>MapDesktopSurface</strong> if the <strong>DesktopImageInSystemMemory</strong> member of the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure is set to <strong>{{TRUE}}</strong>. If <strong>DesktopImageInSystemMemory</strong> is <strong>{{FALSE}}</strong>, <strong>MapDesktopSurface</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Call <strong>{{IDXGIOutputDuplication::GetDesc}}</strong> to retrieve the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure.</p> + <p><strong>MapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the surface data.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already has an outstanding map on the desktop image. The application must call <strong>UnMapDesktopSurface</strong> before it calls <strong>MapDesktopSurface</strong> again. {{DXGI_ERROR_INVALID_CALL}} is also returned if the application did not own the desktop image when it called <strong>MapDesktopSurface</strong>.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the <strong>{{IDXGISurface::Map}}</strong> method.</li> <li>{{E_INVALIDARG}} if the <em>pLockedRect</em> parameter is incorrect; for example, if <em>pLockedRect</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_MAPPED_RECT}}</strong> structure that receives the surface data that the {{CPU}} needs to directly access the surface data. </p> </dd> + + + + + <p>Invalidates the reference to the desktop image that was retrieved by using <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</p> + <p><strong>UnMapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application did not map the desktop surface by calling <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Indicates that the application finished processing the frame.</p> + <p>The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.</p><p>For performance reasons, we recommend that you release the frame just before you call the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted {{GPU}} cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.</p> + <p><strong>ReleaseFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already released the frame.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>The <strong>{{IDXGISurface2}}</strong> interface extends the <strong>{{IDXGISurface1}}</strong> interface by adding support for subresource surfaces and getting a handle to a shared resource.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface2}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface2}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface2}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface2}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface2}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface2}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface2}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface2}}</strong>.</p><p>You can call the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method to create an <strong>{{IDXGISurface2}}</strong> interface that refers to one subresource of a stereo resource.</p> + + + + <p>Gets the parent resource and subresource index that support a subresource surface.</p> + <p>For subresource surface objects that the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method creates, <strong>GetResource</strong> simply returns the values that were used to create the subresource surface.</p><p>Current objects that implement <strong>{{IDXGISurface}}</strong> are either resources or views. <strong>GetResource</strong> for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{E_NOINTERFACE}} if the object does not implement the {{GUID}} that the <em>riid</em> parameter specifies.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the parent resource object for the subresource surface.</p> </dd> + + + <dd> <p>A reference to a variable that receives the index of the subresource surface.</p> </dd> + + + + + <p> An <strong>{{IDXGIResource1}}</strong> interface extends the <strong>{{IDXGIResource}}</strong> interface by adding support for creating a subresource surface object and for creating a handle to a shared resource. </p> + <p> To determine the type of memory a resource is currently located in, use <strong>{{IDXGIDevice::QueryResourceResidency}}</strong>. To share resources between processes, use <strong>{{ID3D11Device1::OpenSharedResource1}}</strong>. For information about how to share resources between multiple Windows graphics {{APIs}}, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics {{APIs}}. </p><p> You can retrieve the <strong>{{IDXGIResource1}}</strong> interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports <strong>{{ID3D10Resource}}</strong> or <strong>{{ID3D11Resource}}</strong> also supports <strong>{{IDXGIResource1}}</strong>. For example, the Direct3D 2D texture object that you create from <strong>{{ID3D11Device::CreateTexture2D}}</strong> supports <strong>{{IDXGIResource1}}</strong>. You can call <strong>QueryInterface</strong> on the 2D texture object (<strong>{{ID3D11Texture2D}}</strong>) to retrieve the <strong>{{IDXGIResource1}}</strong> interface. For example, to retrieve the <strong>{{IDXGIResource1}}</strong> interface from the 2D texture object, use the following code. </p><pre>{{IDXGIResource1}} * pDXGIResource; +hr = g_pd3dTexture2D-&gt;QueryInterface(__uuidof({{IDXGIResource1}}), (void **)&amp;pDXGIResource);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a subresource surface object.</p> + <p>Subresource surface objects implement the <strong>{{IDXGISurface2}}</strong> interface, which inherits from <strong>{{IDXGISurface1}}</strong> and indirectly <strong>{{IDXGISurface}}</strong>. Therefore, the {{GDI}}-interoperable methods of <strong>{{IDXGISurface1}}</strong> work if the original resource interface object was created with the {{GDI}}-interoperable flag (<strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong>).</p><p><strong>CreateSubresourceSurface</strong> creates a subresource surface that is based on the resource interface on which <strong>CreateSubresourceSurface</strong> is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.</p><p>You can use <strong>CreateSubresourceSurface</strong> to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if the index is out of range or if the subresource is not a valid surface.</li> <li>{{E_OUTOFMEMORY}} if insufficient memory is available to create the subresource surface object.</li> </ul><p>A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.</p> + + + <dd> <p>The index of the subresource surface object to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to a <strong>{{IDXGISurface2}}</strong> interface that represents the created subresource surface object at the position specified by the <em>index</em> parameter.</p> </dd> + + + + + <p>Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. </p> + <p><strong>CreateSharedHandle</strong> only returns the {{NT}} handle when you created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags). If you created the resource as shared and specified that it uses {{NT}} handles, you must use <strong>CreateSharedHandle</strong> to get a handle for sharing. In this situation, you can't use the <strong>{{IDXGIResource::GetSharedHandle}}</strong> method because it will fail.</p><p>You can pass the handle that <strong>CreateSharedHandle</strong> returns in a call to the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to give a device access to a shared resource that you created on a different device.</p><p>Because the handle that <strong>CreateSharedHandle</strong> returns is an {{NT}} handle, you can use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on. You can call <strong>CreateSharedHandle</strong> only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call <strong>DuplicateHandle</strong>. When you no longer need the shared resource handle, call <strong>CloseHandle</strong> to close the handle, in order to avoid memory leaks.</p><p>If you pass a name for the resource to <em>lpName</em> when you call <strong>CreateSharedHandle</strong> to share the resource, you can subsequently pass this name in a call to the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.</p><p>If you created the resource as shared and did not specify that it uses {{NT}} handles, you cannot use <strong>CreateSharedHandle</strong> to get a handle for sharing because <strong>CreateSharedHandle</strong> will fail.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid.</li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource.</li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSharedHandle</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.</p> <p>Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor.</p> <p>The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.</p> </dd> + + + <dd> <p>The requested access rights to the resource. In addition to the generic access rights, {{DXGI}} defines the following values:</p> <ul> <li><strong>{{DXGI_SHARED_RESOURCE_READ}}</strong> ( 0x80000000L ) - specifies read access to the resource.</li> <li><strong>{{DXGI_SHARED_RESOURCE_WRITE}}</strong> ( 1 ) - specifies write access to the resource.</li> </ul> <p>You can combine these values by using a bitwise {{OR}} operation.</p> </dd> + + + <dd> <p>The name of the resource to share. The name is limited to {{MAX_PATH}} characters. Name comparison is case sensitive. You will need the resource name if you call the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to access the shared resource by name. If you instead call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to access the shared resource by handle, set this parameter to <strong>{{NULL}}</strong>.</p> <p>If <em>lpName</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace.</p> <p>The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see +Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.</p> <p>The object can be created in a private namespace. For more information, see Object Namespaces.</p> </dd> + + + <dd> <p>A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice2}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes methods to block {{CPU}} processing until the {{GPU}} completes processing, and to offer resources to the operating system. </p> + <p> The <strong>{{IDXGIDevice2}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice2}}</strong> interface. To retrieve the <strong>{{IDXGIDevice2}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>{{IDXGIDevice2::ReclaimResource}}</strong> method to reclaim the resource. You cannot call <strong>OfferResources</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><strong>Note</strong>??The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.?<p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>OfferResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>OfferResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully offered</li> <li>{{E_INVALIDARG}} if a resource in the array or the priority is invalid</li> </ul> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice2::OfferResources}}</strong>.</p> + <p>After you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer one or more resources, you must call <strong>ReclaimResources</strong> before you can use those resources again. You must check the values in the array at <em>pDiscarded</em> to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.</p><p>To reclaim shared resources, call <strong>ReclaimResources</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources</strong> only while you hold the mutex.</p><p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>ReclaimResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully reclaimed</li> <li>{{E_INVALIDARG}} if the resources are invalid</li> </ul> + + + + <p>Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.</p> + <p><strong>EnqueueSetEvent</strong> calls the <strong>SetEvent</strong> function on the event object after all previously submitted rendering commands complete or the device is removed.</p><p>After an application calls <strong>EnqueueSetEvent</strong>, it can immediately call the <strong>WaitForSingleObject</strong> function to put itself to sleep until rendering commands complete.</p><p>You cannot use <strong>EnqueueSetEvent</strong> to determine work completion that is associated with presentation (<strong>{{IDXGISwapChain::Present}}</strong>); instead, we recommend that you use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values:</p><ul> <li><strong>{{E_OUTOFMEMORY}}</strong> if insufficient memory is available to complete the operation.</li> <li><strong>{{E_INVALIDARG}}</strong> if the parameter was validated and determined to be incorrect.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>EnqueueSetEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.</p> <p>The handle must have the {{EVENT_MODIFY_STATE}} access right. For more information about access rights, see Synchronization Object Security and Access Rights.</p> </dd> + + + + + <p>Provides presentation capabilities that are enhanced from <strong>{{IDXGISwapChain}}</strong>. These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p><p><strong>{{IDXGISwapChain1}}</strong> provides the <strong>IsTemporaryMonoSupported</strong> method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. +</p><strong>Note</strong>??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original (<strong>{{IDXGISwapChain}}</strong>) and new (<strong>{{IDXGISwapChain1}}</strong>) swap chain interfaces generally have the same behavior. For information about how <strong>{{IDXGISwapChain}}</strong> methods are translated into <strong>{{IDXGISwapChain1}}</strong> methods, see the descriptions of the <strong>{{IDXGISwapChain1}}</strong> methods.? + + + + <p>Gets a description of the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure that describes the swap chain.</p> </dd> + + + + + <p>Gets a description of a full-screen swap chain.</p> + <p>The semantics of <strong>GetFullscreenDesc</strong> are identical to that of the <strong>{{IDXGISwapchain::GetDesc}}</strong> method for <strong>{{HWND}}</strong>-based swap chains.</p> + <p><strong>GetFullscreenDesc</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the description of the full-screen swap chain.</li> <li> {{DXGI_ERROR_INVALID_CALL}} for non-<strong>{{HWND}}</strong> swap chains or if <em>pDesc</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structure that describes the full-screen swap chain.</p> </dd> + + + + + <p>Retrieves the underlying <strong>{{HWND}}</strong> for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain that is associated with an <strong>{{HWND}}</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p>If <em>pHwnd</em> receives <strong>{{NULL}}</strong> (that is, the swap chain is not <strong>{{HWND}}</strong>-based), <strong>GetHwnd</strong> returns {{DXGI_ERROR_INVALID_CALL}}.</p> + + + + <p>Retrieves the underlying <strong>CoreWindow</strong> object for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong> method to create a swap chain that is associated with an <strong>CoreWindow</strong> object.</p> + <p><strong>GetCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the underlying <strong>CoreWindow</strong> object.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>ppUnk</em> is <strong>{{NULL}}</strong>; that is, the swap chain is not associated with a <strong>CoreWindow</strong> object.</li> <li>Any <strong>{{HRESULT}}</strong> that a call to <strong>QueryInterface</strong> to query for an <strong>CoreWindow</strong> object might typically return.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Presents a frame on the display screen. </p> + <p>An app can use <strong>Present1</strong> to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager ({{DWM}}). The {{DWM}} can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to <strong>Present1</strong>, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p><p>For info about calling <strong>Present1</strong> when your app uses multiple threads, see Multithread Considerations and Multithreading and {{DXGI}}.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_REMOVED}} , {{DXGI_STATUS_OCCLUDED}}, {{DXGI_ERROR_INVALID_CALL}}, or {{E_OUTOFMEMORY}}. </p> + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks.</li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput1}}</strong>), <strong>Present1</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_PRESENT_PARAMETERS}}</strong> structure that describes updated rectangles and scroll information of the frame to present.</p> </dd> + + + + + <p>Determines whether a swap chain supports ?temporary mono.?</p> + <p>Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the <strong>{{IDXGISwapChain1::Present1}}</strong> method with the <strong>{{DXGI_PRESENT_STEREO_TEMPORARY_MONO}}</strong> flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.</p> + <p>Indicates whether to use the swap chain in temporary mono mode. <strong>{{TRUE}}</strong> indicates that you can use temporary-mono mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsTemporaryMonoSupported</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Gets the output (the display monitor) to which you can restrict the contents of a present operation.</p> + <p>If the method succeeds, the runtime fills the buffer at <em>ppRestrictToOutput</em> with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p> + <p>Returns {{S_OK}} if the restrict-to output was successfully retrieved; otherwise, returns {{E_INVALIDARG}} if the reference is invalid.</p> + + + <dd> <p> A reference to a buffer that receives a reference to the <strong>{{IDXGIOutput}}</strong> interface for the restrict-to output. An application passes this reference to <strong>{{IDXGIOutput}}</strong> in a call to the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain.</p> </dd> + + + + + <p>Changes the background color of the swap chain.</p> + <p>The background color affects only swap chains that you create with <strong>{{DXGI_SCALING_NONE}}</strong> in windowed mode. You pass this value in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.</p><p>When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The <strong>{{DXGI_PRESENT}}</strong> flags that you pass to <strong>{{IDXGISwapChain1::Present1}}</strong> can help achieve the effect that you require. For example, if you call <strong>SetBackgroundColor</strong> and then call <strong>{{IDXGISwapChain1::Present1}}</strong> with the <em>Flags</em> parameter set to <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong>, you change only the background color without changing the displayed contents of the swap chain.</p><p>When you call the <strong>{{IDXGISwapChain1::Present1}}</strong> method to display contents of the swap chain, <strong>{{IDXGISwapChain1::Present1}}</strong> uses the <strong>{{DXGI_ALPHA_MODE}}</strong> value that is specified in the <strong>AlphaMode</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to determine how to handle the <strong>a</strong> member of the <strong>{{DXGI_RGBA}}</strong> structure, the alpha value of the background color, that achieves window transparency. For example, if <strong>AlphaMode</strong> is <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong> ignores the a member of <strong>{{DXGI_RGBA}}</strong>.</p><strong>Note</strong>??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard {{RGB}} data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? + <p><strong>SetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the background color.</li> <li>{{E_INVALIDARG}} if the <em>pColor</em> parameter is incorrect, for example, <em>pColor</em> is {{NULL}} or any of the floating-point values of the members of <strong>{{DXGI_RGBA}}</strong> to which <em>pColor</em> points are outside the range from 0.0 through 1.0.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetBackgroundColor</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that specifies the background color to set.</p> </dd> + + + + + <p>Retrieves the background color of the swap chain.</p> + <strong>Note</strong>??The background color that <strong>GetBackgroundColor</strong> retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The default value of the background color is black with full opacity: 0,0,0,1.? + <p><strong>GetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the background color.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the <em>pColor</em> parameter is invalid, for example, <em>pColor</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that receives the background color of the swap chain.</p> </dd> + + + + + <p>Sets the rotation of the back buffers for the swap chain.</p> + <p>You can only use <strong>SetRotation</strong> to rotate the back buffers for flip-model swap chains that you present in windowed mode. </p><p><strong>SetRotation</strong> isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, <strong>SetRotation</strong> doesn't fail, but you must ensure that you specify no rotation (<strong>{{DXGI_MODE_ROTATION_IDENTITY}}</strong>) for the swap chain. Otherwise, when you call <strong>{{IDXGISwapChain1::Present1}}</strong> or <strong>{{IDXGISwapChain::Present}}</strong> to present a frame, the presentation fails.</p> + <p><strong>SetRotation</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the rotation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call <strong>SetRotation</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies how to set the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p>Gets the rotation of the back buffers for the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a variable that receives a <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p> The <strong>{{IDXGIFactory2}}</strong> interface includes methods to create a newer version swap chain with more features than <strong>{{IDXGISwapChain}}</strong> and to monitor stereoscopic 3D capabilities. </p> + <p>To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 factory interface, pass <strong>{{IDXGIFactory2}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object that either <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> returns. +</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, or <strong>{{IDXGIDevice2}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory2}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Determines whether to use stereo mode.</p> + <p>We recommend that windowed applications call <strong>IsWindowedStereoEnabled</strong> before they attempt to use stereo. <strong>IsWindowedStereoEnabled</strong> returns <strong>{{TRUE}}</strong> if both of the following items are true:</p><ul> <li>All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model ({{WDDM}}) for Windows?8 ({{WDDM}} 1.2). However, the adapter does not necessarily have to be able to scan out stereo.</li> <li>The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager ({{DWM}}) performs stereo composition on at least one adapter output.</li> </ul><p>The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.</p><p>The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.</p> + <p>Indicates whether to use stereo mode. <strong>{{TRUE}}</strong> indicates that you can use stereo mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsWindowedStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with an <strong>{{HWND}}</strong> handle to the output window for the swap chain.</p> + <strong>Note</strong>??Do not use this method in Windows Store apps. Instead, use <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>hWnd</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain at a time with an <strong>{{HWND}}</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForHwnd</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong><strong>{{DXGI_SCALING_NONE}}</strong> is not supported on Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed and causes <strong>CreateSwapChainForHwnd</strong> to return {{DXGI_ERROR_INVALID_CALL}} when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with the <strong>CoreWindow</strong> object for the output window for the swap chain.</p> + <strong>Note</strong>??Use this method in Windows Store apps rather than <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>pWindow</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain (per layer) at a time with a <strong>CoreWindow</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Identifies the adapter on which a shared resource object was created.</p> + <p>You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call <strong>GetSharedResourceAdapterLuid</strong> before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> or <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method.</p> + <p><strong>GetSharedResourceAdapterLuid</strong> returns: </p><ul> <li>{{S_OK}} if it identified the adapter.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if <em>hResource</em> is invalid.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetSharedResourceAdapterLuid</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to a shared resource object. The <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method returns this handle.</p> </dd> + + + <dd> <p>A reference to a variable that receives a locally unique identifier (<strong>{{LUID}}</strong>) value that identifies the adapter. <strong>{{LUID}}</strong> is defined in Dxgi.h. An <strong>{{LUID}}</strong> is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an <strong>{{LUID}}</strong> is guaranteed only until the operating system is restarted.</p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of stereo status.</p> + <p><strong>RegisterStereoStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when stereo status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in stereo status by using event signaling.</p> + <p><strong>RegisterStereoStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of stereo status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when stereo status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterStereoStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of occlusion status.</p> + <p>Apps choose the Windows message that Windows sends when occlusion status changes.</p> + <p><strong>RegisterOcclusionStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is not a valid window handle or not the window handle that the current process owns.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when occlusion status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in occlusion status by using event signaling.</p> + <p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the same event handle, <strong>RegisterOcclusionStatusEvent</strong> fails with {{DXGI_ERROR_INVALID_CALL}}.</p><p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the different event handles, <strong>RegisterOcclusionStatusEvent</strong> properly registers the events.</p> + <p><strong>RegisterOcclusionStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if the method successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>hEvent</em> is not a valid handle or not an event handle. </li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of occlusion status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle.</p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when occlusion status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterOcclusionStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterOcclusionStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Creates a swap chain that you can use to send Direct3D content into the DirectComposition {{API}} or the <strong>Windows.{{UI}}.Xaml</strong> framework to compose in a window.</p> + <p>You can use composition swap chains with either DirectComposition?s <strong>{{IDCompositionVisual}}</strong> interface or {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class. For DirectComposition, you can call the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For {{XAML}}, the <strong>SwapChainBackgroundPanel</strong> class exposes a classic {{COM}} interface <strong>{{ISwapChainBackgroundPanelNative}}</strong>. You can use the <strong>{{ISwapChainBackgroundPanelNative::SetSwapChain}}</strong> method to bind to the {{XAML}} {{UI}} graph. For info about how to use composition swap chains with {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class, see DirectX and {{XAML}} interop.</p><p>The <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>, <strong>{{IDXGISwapChain::ResizeTarget}}</strong>, <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>, <strong>{{IDXGISwapChain1::GetHwnd}}</strong>, and <strong>{{IDXGISwapChain::GetCoreWindow}}</strong> methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForComposition</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForComposition</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p> The <strong>{{IDXGIAdapter2}}</strong> interface represents a display subsystem, which includes one or more {{GPUs}}, {{DACs}}, and video memory. </p> + <p> A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p> + + + + <p>Gets a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current task.</p> + <p>Use the <strong>GetDesc2</strong> method to get a {{DXGI}} 1.2 description of an adapter. To get a {{DXGI}} 1.1 description, use the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p><p>The Windows Display Driver Model ({{WDDM}}) scheduler can preempt the {{GPU}}'s execution of application tasks. The granularity at which the {{GPU}} can be preempted from performing its current task in the {{WDDM}} 1.1 or earlier driver model is a direct memory access ({{DMA}}) buffer for graphics tasks or a compute packet for compute tasks. The {{GPU}} can switch between tasks only after it completes the currently executing unit of work, a {{DMA}} buffer or a compute packet. </p><p>A {{DMA}} buffer is the largest independent unit of graphics work that the {{WDDM}} scheduler can submit to the {{GPU}}. This buffer contains a set of {{GPU}} instructions that the {{WDDM}} driver and {{GPU}} use. A compute packet is the largest independent unit of compute work that the {{WDDM}} scheduler can submit to the {{GPU}}. A compute packet contains dispatches (for example, calls to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method), which contain thread groups. The {{WDDM}} 1.2 or later driver model allows the {{GPU}} to be preempted at finer granularity levels than a {{DMA}} buffer or compute packet. You can use the <strong>GetDesc2</strong> method to retrieve the granularity levels for graphics and compute tasks.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, earlier versions of <strong>GetDesc2</strong> (<strong>GetDesc</strong> and <strong>GetDesc1</strong>) return zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of the adapter description structure and ?Software Adapter? for the description string in the <strong>Description</strong> member. <strong>GetDesc2</strong> returns the actual feature level 9 hardware values in these members.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput1}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To determine the outputs that are available from the adapter, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To determine the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. You can then call <strong>QueryInterface</strong> from any <strong>{{IDXGIOutput}}</strong> object to obtain an <strong>{{IDXGIOutput1}}</strong> object.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>Finds the display mode that most closely matches the requested display mode.</p> + <p>Direct3D devices require {{UNORM}} formats.</p><p><strong>FindClosestMatchingMode1</strong> finds the closest matching available display mode to the mode that you specify in <em>pModeToMatch</em>.</p><p>If you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure to which <em>pModeToMatch</em> points to specify a stereo mode as input, <strong>FindClosestMatchingMode1</strong> considers only stereo modes. <strong>FindClosestMatchingMode1</strong> considers only mono modes if <strong>Stereo</strong> is not set.</p><p><strong>FindClosestMatchingMode1</strong> resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:</p><ol> <li><strong>ScanlineOrdering</strong></li> <li><strong>Scaling</strong></li> <li><strong>Format</strong></li> <li><strong>Resolution</strong></li> <li><strong>RefreshRate</strong></li> </ol><p>When <strong>FindClosestMatchingMode1</strong> determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when <strong>FindClosestMatchingMode1</strong> matches <strong>Resolution</strong>, it already filtered the display mode list by a certain <strong>ScanlineOrdering</strong>, <strong>Scaling</strong>, and <strong>Format</strong>, while it ignores <strong>RefreshRate</strong>. This ordering doesn't define the absolute ordering for every usage scenario of <strong>FindClosestMatchingMode1</strong>, because the application can choose some values initially, which effectively changes the order of resolving members.</p><p><strong>FindClosestMatchingMode1</strong> matches members of the display mode one at a time, generally in a specified order.</p><p>If a member is unspecified, <strong>FindClosestMatchingMode1</strong> gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, <strong>FindClosestMatchingMode1</strong> uses the default desktop output to find values. If an application uses a fully unspecified display mode, <strong>FindClosestMatchingMode1</strong> typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, <strong>FindClosestMatchingMode1</strong> resolves unspecified members later than specified members.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that describes the display mode to match. Members of <strong>{{DXGI_MODE_DESC1}}</strong> can be unspecified, which indicates no preference for that member. A value of 0 for <strong>Width</strong> or <strong>Height</strong> indicates that the value is unspecified. If either <strong>Width</strong> or <strong>Height</strong> is 0, both must be 0. A numerator and denominator of 0 in <strong>RefreshRate</strong> indicate it is unspecified. Other members of <strong>{{DXGI_MODE_DESC1}}</strong> have enumeration values that indicate that the member is unspecified. If <em>pConcernedDevice</em> is <strong>{{NULL}}</strong>, the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC1}}</strong> cannot be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that receives a description of the display mode that most closely matches the display mode described at <em>pModeToMatch</em>.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. If this parameter is <strong>{{NULL}}</strong>, <strong>FindClosestMatchingMode1</strong> returns only modes whose format matches that of <em>pModeToMatch</em>; otherwise, <strong>FindClosestMatchingMode1</strong> returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:</p> <ul> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.0 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.0 Hardware </li> <li> Hardware Support for Direct3D 10Level9 Formats </li> <li> Hardware Support for Direct3D 10.1 Formats </li> <li> Hardware Support for Direct3D 10 Formats </li> </ul> </dd> + + + + + <p>Copies the display surface (front buffer) to a user-provided resource.</p> + <p><strong>GetDisplaySurfaceData1</strong> is similar to <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> except <strong>GetDisplaySurfaceData1</strong> takes an <strong>{{IDXGIResource}}</strong> and <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> takes an <strong>{{IDXGISurface}}</strong>.</p><p><strong>GetDisplaySurfaceData1</strong> returns an error if the input resource is not a 2D texture (represented by the <strong>{{ID3D11Texture2D}}</strong> interface) with an array size (<strong>ArraySize</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure) that is equal to the swap chain buffers.</p><p>The original <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> and the updated <strong>GetDisplaySurfaceData1</strong> behave exactly the same. <strong>GetDisplaySurfaceData1</strong> was required because textures with an array size equal to 2 (<strong>ArraySize</strong> = 2) do not implement <strong>{{IDXGISurface}}</strong>.</p><p> You can call <strong>GetDisplaySurfaceData1</strong> only when an output is in full-screen mode. If <strong>GetDisplaySurfaceData1</strong> succeeds, it fills the destination resource.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with {{CPU}} write permission (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Other surfaces can be created with {{CPU}} read-write permission (<strong>{{D3D11_CPU_ACCESS_READ}}</strong> | <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). <strong>GetDisplaySurfaceData1</strong> modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). <strong>GetDisplaySurfaceData1</strong> performs the stretch and shrink with point sampling. </p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a resource interface that represents the resource to which <strong>GetDisplaySurfaceData1</strong> copies the display surface.</p> </dd> + + + + + <p>Creates a desktop duplication interface from the <strong>{{IDXGIOutput1}}</strong> interface that represents an adapter output.</p> + <p>If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.</p><p>For <strong>DuplicateOutput</strong> to succeed, you must create <em>pDevice</em> from <strong>{{IDXGIFactory1}}</strong> or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>.</p><p>If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.</p><p>By default, only four processes can use a <strong>{{IDXGIOutputDuplication}}</strong> interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop. </p><p>For improved performance, consider using <strong>DuplicateOutput1</strong>.</p> + <p><strong>DuplicateOutput</strong> returns: </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported. If <strong>DuplicateOutput</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput</strong> again after such a notification occurs. For more information, refer to <strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong> and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>DuplicateOutput</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Provides the implementation of a shared fixed-size surface for Direct2D drawing.</p><strong>Note</strong>??If the surface is larger than the screen size, use <strong>{{IVirtualSurfaceImageSourceNative}}</strong> instead.? + <p>This interface provides the native implementation of the <strong>SurfaceImageSource</strong> Windows runtime type. To obtain a reference to <strong>{{ISurfaceImageSourceNative}}</strong>, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNative}}&gt; m_sisNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisNative) </pre> + + + + <p>Sets the {{DXGI}} device, created with {{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}, that will draw the surface. This method must be called from the {{UI}} thread.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface.</p> </dd> + + + + + <p>Opens the supplied {{DXGI}} surface for drawing.</p> + <p>If the app window that contains the <strong>SurfaceImageSource</strong> isn't active, like when it's suspended, calling the <strong>BeginDraw</strong> method returns an error.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface that will be drawn into.</p> </dd> + + + <dd> <p>Receives a reference to the surface for drawing. </p> </dd> + + + <dd> <p>Receives the point (x,y) offset of the surface that will be drawn into.</p> </dd> + + + + + <p>Closes the surface draw operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides an interface for the implementation of drawing behaviors when a <strong>VirtualSurfaceImageSource</strong> requests an update. </p> + <p>This interface is implemented by the developer to provide specific drawing behaviors for updates to a <strong>VirtualSurfaceImageSource</strong>. Classes that implement this interface are provided to the <strong>{{IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded}}</strong>, which calls the <strong>UpdatesNeeded</strong> method implementation whenever an update is requested.</p> + + + + <p>Invalidates a specific region of the shared surface for drawing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface to invalidate.</p> </dd> + + + + + <p>Gets the total number of regions of the surface that must be updated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of regions to update.</p> </dd> + + + + + <p>Gets the set of regions that must be updated on the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of regions that must be updated. You obtain this by calling <strong>GetUpdateRectCount</strong>.</p> </dd> + + + <dd> <p>Receives a list of regions that must be updated.</p> </dd> + + + + + <p>Gets the boundaries of the visible region of the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a rectangle that specifies the visible region of the shared surface.</p> </dd> + + + + + <p>Registers for the callback that will perform the drawing when an update to the shared surface is requested.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an implementation of <strong>{{IVirtualSurfaceUpdatesCallbackNative}}</strong>.</p> </dd> + + + + + <p>Resizes the surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated width of the surface.</p> </dd> + + + <dd> <p>The updated height of the surface.</p> </dd> + + + + + + + + <p>Sets the DirectX swap chain for <strong>SwapChainBackgroundPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables performing bulk operations across all <strong>SurfaceImageSource</strong> objects created in the same process.</p> + + + + <p>Flushes all current {{GPU}} work for all <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects associated with the given device.</p> + <p>The <strong>FlushAllSurfacesWithDevice</strong> method flushes current {{GPU}} work for all <strong>SurfaceImageSource</strong> objects that were created with <em>device</em>. This {{GPU}} work includes Direct2D rendering work and internal {{GPU}} work done by the framework associated with rendering. This is useful if an application has created multiple <strong>SurfaceImageSource</strong> objects and needs to flush the {{GPU}} work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the {{UI}} thread to improve performance.</p><p>You can call the <strong>FlushAllSurfacesWithDevice</strong> method from a non-{{UI}} thread. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides the implementation of a shared Microsoft DirectX surface which is displayed in a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides the native implementation of the <strong>SurfaceImageSource</strong> class. To get a reference to the <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call the <strong>QueryInterface</strong> method.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNativeWithD2D}}&gt; m_sisD2DNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisD2DNative) </pre><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time. </p><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface enables drawing to a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> from one or more background threads, which allows high-performance DirectX rendering off the {{UI}} thread.</p><p>Only call the <strong>SetDevice</strong>, <strong>BeginDraw</strong>, and <strong>EndDraw</strong> methods on <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, not on the <strong>{{ISurfaceImageSourceNative}}</strong> or <strong>{{IVirtualSurfaceImageSourceNative}}</strong> interfaces. </p><p>In order to support batching updates to multiple surfaces to improve performance, you can pass an <strong>{{ID2D1Device}}</strong> to the <strong>SetDevice</strong> method, instead of an <strong>{{ID3D11Device}}</strong>. The <strong>BeginDraw</strong> method can then optionally return a shared <strong>{{ID2D1DeviceContext}}</strong>, which the app uses to draw all content for that update.</p><p>To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support. </p><p>You can call the <strong>BeginDraw</strong>, <strong>SuspendDraw</strong>, and <strong>ResumeDraw</strong> methods from any background thread to enable high-performance multithreaded drawing.</p><p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the DirectX content with the current {{XAML}} {{UI}} thread frame. You can call <strong>BeginDraw</strong> on a background thread, call <strong>SuspendDraw</strong> when you're done drawing on the background thread, and call <strong>EndDraw</strong> on the {{UI}} thread.</p><p>Use <strong>SuspendDraw</strong> and <strong>ResumeDraw</strong> to suspend and resume drawing on any background or {{UI}} thread. </p><p>Handle the <strong>SurfaceContentsLost</strong> event to determine when you need to recreate content which may be lost if the system resets the {{GPU}}.</p> + + + + <p>Sets the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) or Direct2D device, created with <strong>{{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}</strong>, that will draw the surface.</p> + <p>This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface. You can pass an <strong>{{ID2D1Device}}</strong> to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread. </p> </dd> + + + + + <p>Initiates an update to the associated <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Closes the surface draw operation.</p> + <p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the Microsoft DirectX content with the current {{XAML}} {{UI}} thread frame. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Suspends the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Resume the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative}}&gt; m_swapChainNative; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative}}), (void **)&amp;m_swapChainNative); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative2}}&gt; m_swapChainNative2; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative2}}), (void **)&amp;m_swapChainNative2); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong> using a handle to the swap chain.</p> + <p>SetSwapChain({{HANDLE}} swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.</p><p>{{XAML}} supports setting a {{DXGI}} swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the <strong>{{ISwapChainPanelNative}}</strong> interface from a SwapChainPanel instance and calling <strong>SetSwapChain({{IDXGISwapChain}} *swapChain)</strong>. </p><p>This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a {{XAML}} SwapChainPanel in the foreground app.</p><pre> &lt;!-- {{XAML}} markup --&gt; +&lt;Page&gt; &lt;SwapChainPanel x:Name=?captureStreamDisplayPanel? /&gt; +&lt;/Page&gt; // Definitions +ComPtr&lt;{{IDXGISwapChain1}}&gt; m_swapChain; +{{HANDLE}} m_swapChainHandle; +ComPtr&lt;{{ID3D11Device}}&gt; m_d3dDevice; +ComPtr&lt;{{IDXGIAdapter}}&gt; dxgiAdapter; +ComPtr&lt;{{IDXGIFactory2}}&gt; dxgiFactory; +ComPtr&lt;{{IDXGIFactoryMedia}}&gt; dxgiFactoryMedia; +ComPtr&lt;{{IDXGIDevice}}&gt; dxgiDevice; +{{DXGI_SWAP_CHAIN_DESC1}} swapChainDesc = {0}; // Get {{DXGI}} factory (assume standard boilerplate has created {{D3D11Device}}) +m_d3dDevice.As(&amp;dxgiDevice); +dxgiDevice-&gt;GetAdapter(&amp;dxgiAdapter); +dxgiAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), &amp;dxgiFactory); // Create swap chain and get handle +{{DCompositionCreateSurfaceHandle}}({{GENERIC_ALL}}, nullptr, &amp;m_swapChainHandle); +dxgiFactory.As(&amp;dxgiFactoryMedia); +dxgiFactoryMedia-&gt;CreateSwapChainForCompositionSurfaceHandle( m_d3dDevice.Get(), m_swapChainHandle, &amp;swapChainDesc, nullptr, &amp;m_swapChain +); // Set swap chain to display in a SwapChainPanel +ComPtr&lt;{{ISwapChainPanelNative2}}&gt; panelNative; +reinterpret_cast&lt;{{IUnknown}}*&gt;(captureStreamDisplayPanel)-&gt;QueryInterface({{IID_PPV_ARGS}}(&amp;panelNative))); +panelNative-&gt;SetSwapChainHandle(m_swapChainHandle); </pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Options for swap-chain color space.</p> + <p>This enum is used by <strong>SetColorSpace</strong>.</p> + + + <dd> <p>Specifies nominal range {{YCbCr}}, which isn't an absolute color space, but a way of encoding {{RGB}} info.</p> </dd> + + + <dd> <p>Specifies {{BT}}.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.</p> </dd> + + + <dd> <p>Specifies xvYCC or extended-gamut {{YCC}} (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.</p> </dd> + + + + + <p> Indicates options for presenting frames to the swap chain. </p> + <p>This enum is used by the <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure.</p> + + + <dd> <p> Specifies that the presentation mode is a composition surface, meaning that the conversion from {{YUV}} to {{RGB}} is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform {{YUV}} to {{RGB}} conversion itself, reducing the frequency of {{YUV}} to {{RGB}} conversion to once per video frame. </p> </dd> + + + <dd> <p> Specifies that the presentation mode is an overlay surface, meaning that the {{YUV}} to {{RGB}} conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See <strong>{{IDXGIDecodeSwapChain}}</strong>. </p> </dd> + + + <dd> <p> No presentation is specified. </p> </dd> + + + <dd> <p>An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:</p> <ul> <li>Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. +</li> <li>Stop using hardware protection if possible.</li> </ul> <p>Note that simply re-creating the swap chain or the device will usually have no impact as the {{DWM}} will continue to run out of memory and will return the same failure. </p> </dd> + + + + + <p>Specifies overlay support to check for in a call to <strong>{{IDXGIOutput3::CheckOverlaySupport}}</strong>.</p> + + + + <p>Represents a 3x2 matrix. Used with <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> to indicate the scaling and translation transform for <strong>SwapChainPanel</strong> swap chains.</p> + + + + <p>Used with <strong>{{IDXGIFactoryMedia}}</strong>::<strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> to describe a decode swap chain.</p> + + + + <p>Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.</p> + <p>This structure is used with the <strong>GetFrameStatisticsMedia</strong> method.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + <dd> <p>A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See <strong>{{DXGI_FRAME_PRESENTATION_MODE}}</strong>.</p> </dd> + + + <dd> <p>If the system approves an app's custom present duration request, this field is set to the approved custom present duration.</p> <p>If the app's custom present duration request is not approved, this field is set to zero.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice3}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes a method to trim graphics memory usage by the {{DXGI}} device. </p> + <p> The <strong>{{IDXGIDevice3}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice3}}</strong> interface. To retrieve the <strong>{{IDXGIDevice3}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice3}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice3}}), (void **)&amp;pDXGIDevice);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Trims the graphics memory allocated by the <strong>{{IDXGIDevice3}}</strong> {{DXGI}} device on the app's behalf.</p><p>For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for {{PLM}} and in general lead to increased memory usage by the overall system.</p><p>Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including <strong>CoreWindow</strong> and {{XAML}} interop) must call <strong>Trim</strong> in response to the {{PLM}} suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.</p><p>Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the <strong>Trim</strong> call, therefore apps should only call <strong>Trim</strong> when going idle for a period of time (in response to {{PLM}} suspend, for example).</p><p>Apps should ensure that they call <strong>Trim</strong> as one of the last {{D3D}} operations done before going idle. Direct3D will normally defer the destruction of {{D3D}} objects. Calling <strong>Trim</strong>, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling <strong>Trim</strong> will cause the object to be destroyed and memory to be deallocated before the app suspends.</p><p>Similar to <strong>{{ID3D11DeviceContext::Flush}}</strong>, apps should call <strong>{{ID3D11DeviceContext::ClearState}}</strong> before calling <strong>Trim</strong>. <strong>ClearState</strong> clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.</p><p>It is also prudent to release references on middleware before calling <strong>Trim</strong>, as that middleware may also need to release references +to Direct3D objects.</p> + <p>This method does not return a value.</p> + + + + <p>Extends <strong>{{IDXGISwapChain1}}</strong> with methods to support swap back buffer scaling and lower-latency swap chains.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + + + + <p>Sets the source region to be used for the swap chain.</p><p>Use <strong>SetSourceSize</strong> to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> method. Prior to Windows?8.1, calling <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].</p> + <p>This method can return:</p><ul> <li>{{E_INVALIDARG}} if one or more parameters exceed the size of the back buffer.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the source region used for the swap chain.</p><p>Use <strong>GetSourceSize</strong> to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use <strong>SetSourceSize</strong> to set this portion of the swap chain. </p> + <p> This method can return error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + + <p>Sets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>This method is only valid for use on swap chains created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>. Otherwise, the result will be {{DXGI_ERROR_INVALID_CALL}}.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.</p> </dd> + + + + + <p>Gets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.</p> </dd> + + + + + <p>Returns a waitable handle that signals when the {{DXGI}} adapter has finished presenting a new frame.</p><p>Windows?8.1 introduces new {{APIs}} that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the {{DXGI}} swap chain with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong> flag set, then call <strong>GetFrameLatencyWaitableObject</strong> to retrieve the waitable handle. Use the waitable handle with <strong>WaitForSingleObjectEx</strong> to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.</p> + <p>A handle to the waitable object, or {{NULL}} if the swap chain was not created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>.</p> + + + + <p>Sets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>SetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{E_INVALIDARG}} if the <em>pMatrix</em> parameter is incorrect, for example, <em>pMatrix</em> is {{NULL}} or the matrix represented by <strong>{{DXGI_MATRIX_3X2_F}}</strong> includes components other than scale and translation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>GetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Queries an adapter output for multiplane overlay support. If this {{API}} returns ?{{TRUE}}?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this {{API}} returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER}}</strong> flag).</p> + <p>See <strong>CreateSwapChainForCoreWindow</strong> for info on creating a foreground swap chain.</p> + <p>{{TRUE}} if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns {{FALSE}}.</p> + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p>Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) object was created.</p> + <p>The <strong>GetCreationFlags</strong> method returns flags that were passed to the <strong>CreateDXGIFactory2</strong> function, or were implicitly constructed by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, <strong>{{D3D11CreateDevice}}</strong>, or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + <p>The creation flags.</p> + + + + <p> Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface. </p> + <p> Decode swap chains are intended for use primarily with {{YUV}} surface formats. When using decode buffers created with an {{RGB}} surface format, the <em>TargetRect</em> and <em>DestSize</em> must be set equal to the buffer dimensions. <em>SourceRect</em> cannot exceed the buffer dimensions. </p><p> In clone mode, the decode swap chain is only guaranteed to be shown on the primary output. </p><p> Decode swap chains cannot be used with dirty rects. </p> + + + + <p>Presents a frame on the output adapter. The frame is a subresource of the <strong>{{IDXGIResource}}</strong> object that was used to create the decode swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the following error codes:</p><ul> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_STATUS_OCCLUDED}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li><strong>{{E_OUTOFMEMORY}}</strong></li> </ul> + + + + <p>Sets the rectangle that defines the source region for the video processing blit operation.</p><p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the source region to set for the swap chain.</p> </dd> + + + + + <p>Sets the rectangle that defines the target region for the video processing blit operation.</p><p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the target region to set for the swap chain.</p> </dd> + + + + + <p>Sets the size of the destination surface to use for the video processing blit operation.</p><p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>The width of the destination size, in pixels.</p> </dd> + + + <dd> <p>The height of the destination size, in pixels.</p> </dd> + + + + + <p>Gets the source region that is used for the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source region for the swap chain.</p> </dd> + + + + + <p>Gets the rectangle that defines the target region for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the target region for the swap chain.</p> </dd> + + + + + <p>Gets the size of the destination surface to use for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a variable that receives the width in pixels.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height in pixels.</p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space to set for the swap chain.</p> </dd> + + + + + <p>Gets the color space used by the swap chain.</p> + <p>A combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space for the swap chain.</p> + + + + <p> Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video. </p> + <p> To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) media factory interface, pass <strong>{{IDXGIFactoryMedia}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object returned by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, or <strong>CreateDXGIFactory2</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, <strong>{{IDXGIDevice2}}</strong>, or <strong>{{IDXGIDevice3}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactoryMedia}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactoryMedia}}), (void **)&amp;pIDXGIFactory);</pre> + + + + <p>Creates a {{YUV}} swap chain for an existing DirectComposition surface handle.</p> + <p><strong>CreateSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul> + + + + <p> Creates a {{YUV}} swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an <strong>{{IDXGIResource}}</strong> buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the <strong>{{IDXGIResource}}</strong>. </p> + <p>The <strong>{{IDXGIResource}}</strong> provided via the <em>pYuvDecodeBuffers</em> parameter must point to at least one subresource, and all subresources must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag.</p> + <p><strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>. </li> <li> Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>. </li> </ul> + + + + <p>This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.</p><p> For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel. </p> + <p> Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the {{DXGI}} output adapter is attached to an external display then <strong>CheckPresentDurationSupport</strong> will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes. </p><p> Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds. </p> + + + + <p>Queries the system for a <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure that indicates whether a custom refresh rate is currently approved by the system.</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + + <p>Requests a custom presentation duration (custom refresh rate).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>The custom presentation duration, specified in hundreds of nanoseconds.</p> </dd> + + + + + <p>Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.</p> + <p>If the {{DXGI}} output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.</p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput3}}</strong> interface exposes a method to check for overlay support.</p> + + + + <p>Checks for overlay support.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlaySupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay support. </p> </dd> + + + + + <p>Creates a {{DXGI}} 1.3 factory that you can use to generate other {{DXGI}} objects.</p><p>In Windows?8, any {{DXGI}} factory created while {{DXGIDebug}}.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that {{DXGIDebug}}.dll be loaded instead. Use <strong>CreateDXGIFactory2</strong> and specify the {{DXGI_CREATE_FACTORY_DEBUG}} flag to request {{DXGIDebug}}.dll; the {{DLL}} will be loaded if it is present on the system.</p> + <p>This function accepts a flag indicating whether {{DXGIDebug}}.dll is loaded. The function otherwise behaves identically to <strong>CreateDXGIFactory1</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>Valid values include the <strong>{{DXGI_CREATE_FACTORY_DEBUG}} (0x01)</strong> flag, and zero.</p> <strong>Note</strong>??This flag will be set by the {{D3D}} runtime if:<ul> <li>The system creates an implicit factory during device creation.</li> <li>The {{D3D11_CREATE_DEVICE_DEBUG}} flag is specified during device creation, for example using <strong>{{D3D11CreateDevice}}</strong> (or the swapchain method, or the Direct3D 10 equivalents).</li> </ul> ? </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory2}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory2}}</strong> object.</p> </dd> + + + + + <p>Retrieves an interface that Windows Store apps use for debugging the Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>The <strong>{{DXGIGetDebugInterface1}}</strong> function returns <strong>{{E_NOINTERFACE}}</strong> on systems without the Windows Software Development Kit ({{SDK}}) installed, because it's a development-time aid.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Not used.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type, which can be the identifier for the <strong>{{IDXGIDebug}}</strong>, <strong>{{IDXGIDebug1}}</strong>, or <strong>{{IDXGIInfoQueue}}</strong> interfaces.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Specifies color space support for the swap chain.</p> + + + <dd> <p>Color space support is present.</p> </dd> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies support for overlay color space.</p> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies the memory segment group to use.</p> + <p>This enum is used by <strong>QueryVideoMemoryInfo</strong> and <strong>SetVideoMemoryReservation</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p> The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the {{GPU}}. Applications should target the local segment group as the target size for their working set.</p> </dd> + + + <dd> <p>The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.</p> </dd> + + + + + <p>Describes the current video memory budgeting parameters.</p> + <p>Use this structure with <strong>QueryVideoMemoryInfo</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p>Specifies the {{OS}}-provided video memory budget, in bytes, that the application should target. If <em>CurrentUsage</em> is greater than <em>Budget</em>, the application may incur stuttering or performance penalties due to background activity by the {{OS}} to provide other applications with a fair usage of video memory.</p> </dd> + + + <dd> <p> Specifies the application?s current video memory usage, in bytes.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call <strong>{{IDXGIAdapter3::SetVideoMemoryReservation}}</strong>.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that is reserved by the application. The {{OS}} uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement. </p> </dd> + + + + + <p>Extends <strong>{{IDXGISwapChain2}}</strong> with methods to support getting the index of the swap chain's current back buffer and support for color space.</p> + + + + <p>Gets the index of the swap chain's current back buffer.</p> + <p>Returns the index of the current back buffer.</p> + + + + <p>Checks the swap chain's support for color space.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check support for.</p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for color space support. </p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies the color space to set.</p> </dd> + + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a {{D3D12}} command queue as an input device. This should be called when the application window is resized. </p> + <p> This method is only valid to call when the swapchain was created using a {{D3D12}} command queue (<strong>{{ID3D12CommandQueue}}</strong>) as an input device. </p><p> When a swapchain is created on a multi-{{GPU}} adapter, the backbuffers are all created on node 1 and only a single command queue is supported. <strong>ResizeBuffers1</strong> enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering ({{AFR}}) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters. </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p><p> Also see the Remarks section in <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, all of which is relevant to <strong>ResizeBuffers1</strong>. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + <dd> <p> An array of {{UINTs}}, of total size <em>BufferCount</em>, where the value indicates which node the back buffer should be created on. Buffers created using <strong>ResizeBuffers1</strong> with a non-null <em>pCreationNodeMask</em> array are visible to all nodes. </p> </dd> + + + <dd> <p> An array of command queues (<strong>{{ID3D12CommandQueue}}</strong> instances), of total size <em>BufferCount</em>. Each queue provided must match the corresponding creation node mask specified in the <em>pCreationNodeMask</em> array. When <strong>Present()</strong> is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation. </p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput4}}</strong> interface exposes a method to check for overlay color space support.</p> + + + + <p>Checks for overlay color space support.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check overlay support for.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlayColorSpaceSupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay color space support. </p> </dd> + + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p> Outputs the <strong>{{IDXGIAdapter}}</strong> for the specified {{LUID}}. </p> + <p> For Direct3D 12, it's no longer possible to backtrack from a device to the <strong>{{IDXGIAdapter}}</strong> that was used to create it. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> enables an app to retrieve information about the adapter where a {{D3D12}} device was created. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> is designed to be paired with <strong>{{ID3D12Device::GetAdapterLuid}}</strong>. For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + + <p> Provides an adapter which can be provided to {{D3D12CreateDevice}} to use the {{WARP}} renderer. </p> + <p> For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory4}}</strong> object referenced by the <em>ppvAdapter</em> parameter. </p> </dd> + + + <dd> <p> The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be {{NULL}}. </p> </dd> + + + + + <p>This interface adds some memory residency methods, for budgeting and reserving physical memory.</p> + <p>For more details, refer to the Residency section of the {{D3D12}} documentation.</p> + + + + <p>Registers to receive notification of hardware content protection teardown events.</p> + <p>Call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong>() to check for the presence of the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN}}</strong> capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call <strong>{{ID3D11VideoContext1::CheckCryptoSessionStatus}}</strong> to determine the impact of the hardware teardown for a specific <strong>{{ID3D11CryptoSession}}</strong> interface. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the event object that the operating system sets when hardware content protection teardown occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters an event to stop it from receiving notification of hardware content protection teardown events.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p> This method informs the process of the current budget and process usage. </p> + <p> Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is queried. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Fills in a {{DXGI_QUERY_VIDEO_MEMORY_INFO}} structure with the current values. </p> </dd> + + + + + <p> This method sends the minimum required physical memory for an application, to the {{OS}}. </p> + <p> Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the {{OS}} quickly minimize the impact of large memory pressure situations. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is being set. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that sets the minimum required physical memory, in bytes. </p> </dd> + + + + + <p>This method establishes a correlation between a {{CPU}} synchronization object and the budget change event.</p> + <p>Instead of calling <strong>QueryVideoMemoryInfo</strong> regularly, applications can use {{CPU}} synchronization objects to efficiently wake threads when budget changes occur. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies a {{HANDLE}} for the event.</p> </dd> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>This method stops notifying a {{CPU}} synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.</p> + <p>An application may switch back to polling for the information regularly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + + + + <p>Specifies the header metadata type.</p> + <p>This enum is used by the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>Indicates there is no header metadata.</p> </dd> + + + <dd> <p>Indicates the header metadata is held by a <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p>Specifies flags for the <strong>OfferResources1</strong> method.</p> + + + + <p>Specifies result flags for the <strong>ReclaimResources1</strong> method.</p> + + + + <p>Specifies a range of hardware features, to be used when checking for feature support.</p> + <p>This enum is used by the <strong>CheckFeatureSupport</strong> method.</p> + + + <dd> <p>The display supports tearing, a requirement of variable refresh rate displays.</p> </dd> + + + + + <p>Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.</p> + <p>The X and Y coordinates of the parameters mean the xy chromacity coordinate in the {{CIE1931}} color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.</p><p>This structure is used in conjunction with the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000. </p> </dd> + + + <dd> <p>The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.</p> </dd> + + + <dd> <p>The maximum nit value (in units of 0.00001 nit) used anywhere in the content. </p> </dd> + + + <dd> <p>The per-frame average of the maximum nit values (in units of 0.00001 nit).</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the <strong>{{IDXGIOutputDuplication}}</strong> object.</p> + <p>This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original <strong>DuplicateOutput</strong> function always converts the fullscreen surface to a 32-bit {{BGRA}} format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit {{BGRA}} incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using <strong>DuplicateOutput1</strong> also allows receiving the full gamut of colors in cases where a high-color format (such as {{R10G10B10A2}}) is being presented. </p><p>The <em>pSupportedFormats</em> array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the <em>pSupportedFormats</em> array, {{DXGI}} will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong>. The list of supported formats should always contain {{DXGI_FORMAT_B8G8R8A8_UNORM}}, as this is the most common format for the desktop. +</p> + <p> </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput1</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li> <p>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported.</p> <p>If <strong>DuplicateOutput1</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput1</strong> again after such a notification occurs. For more information, see the desktop switch (<strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong>) and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </p> </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput1</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + <p>This method sets High Dynamic Range ({{HDR}}) and Wide Color Gamut ({{WCG}}) header metadata.</p> + <p>This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_HDR_METADATA_TYPE}}</strong> enum.</p> </dd> + + + <dd> <p>Specifies the size of <em>pMetaData</em>, in bytes.</p> </dd> + + + <dd> <p>Specifies a void reference that references the metadata, if it exists. Refer to the <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.</p> + <p><strong>OfferResources1</strong> (an extension of the original <strong>{{IDXGIDevice2::OfferResources}}</strong> {{API}}) enables {{D3D}} based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. +A de-committed allocation cannot be reused, so opting in to the new {{DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT}} flag means the new reclaim results must be properly handled. Refer to the flag descriptions in <strong>{{DXGI_RECLAIM_RESOURCE_RESULTS}}</strong> and the Example below.</p><p><strong>OfferResources1</strong> and <strong>ReclaimResources1</strong> may <em>not</em> be used interchangeably with <strong>OfferResources</strong> and <strong>ReclaimResources</strong>. +</p><p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources1</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources1</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>ReclaimResources1</strong> method to reclaim the resource. You cannot call <strong>OfferResources1</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources1</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources1</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><p>The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources1</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if a resource in the array, or the priority, is invalid.</p> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + <dd> <p>Specifies the <strong>{{DXGI_OFFER_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice4::OfferResources1}}</strong>.</p> + <p>After you call <strong>OfferResources1</strong> to offer one or more resources, you must call <strong>ReclaimResources1</strong> before you can use those resources again.</p><p>To reclaim shared resources, call <strong>ReclaimResources1</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources1</strong> only while you hold the mutex.</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the resources are invalid.</p> + + + + <p>This interface enables a single method to support variable refresh rate displays.</p> + + + + <p>Used to check for hardware feature support.</p> + <p>Refer to the description of <strong>{{DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of <strong>{{DXGI_FEATURE}}</strong> to query support for.</p> </dd> + + + <dd> <p>Specifies a reference to a buffer that will be filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size, in bytes, of <em>pFeatureSupportData</em>.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + + + + + + + <p> </p><p>Specifies the aspect-ratio mode.</p> + + + <dd> <p>Do not maintain the aspect ratio of the video. Stretch the video to fit the output rectangle.</p> </dd> + + + <dd> <p>Preserve the aspect ratio of the video by letterboxing or within the output rectangle.</p> </dd> + + + <dd> <strong>Note</strong>??Currently the {{EVR}} ignores this flag. ? <p>Correct the aspect ratio if the physical size of the display device does not match the display resolution. For example, if the native resolution of the monitor is 1600 by 1200 (4:3) but the display resolution is 1280 by 1024 (5:4), the monitor will display non-square pixels.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePicture}}</strong> flag.</p> </dd> + + + <dd> <p>Apply a non-linear horizontal stretch if the aspect ratio of the destination rectangle does not match the aspect ratio of the source rectangle.</p> <p>The non-linear stretch algorithm preserves the aspect ratio in the middle of the picture and stretches (or shrinks) the image progressively more toward the left and right. This mode is useful when viewing 4:3 content full-screen on a 16:9 display, instead of pillar-boxing. Non-linear vertical stretch is not supported, because the visual results are generally poor.</p> <p>This mode may cause performance degradation.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePixel}}</strong> and <strong>{{MFVideoARMode_PreservePicture}}</strong> flags.</p> </dd> + + + <dd> <p>Bitmask to validate flag values. This value is not a valid flag.</p> </dd> + + + + + <p> </p><p>Contains flags that define how the enhanced video renderer ({{EVR}}) displays the video.</p> + <p>To set these flags, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.</p><p>The flags named "{{MFVideoRenderPrefs_Allow}}..." cause the {{EVR}} to use lower-quality settings only when requested by the quality manager. (For more information, see <strong>{{IMFQualityAdvise}}</strong>.) The flags named "{{MFVideoRenderPrefs_Force}}..." cause the video mixer to use lower-quality settings regardless of the quality manager. </p> + + + <dd> <p> If this flag is set, the {{EVR}} does not draw the border color. By default, the {{EVR}} draws a border on areas of the destination rectangle that have no video. See <strong>{{IMFVideoDisplayControl::SetBorderColor}}</strong>. </p> </dd> + + + <dd> <p> If this flag is set, the {{EVR}} does not clip the video when the video window straddles two monitors. By default, if the video window straddles two monitors, the {{EVR}} clips the video to the monitor that contains the largest area of video. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to batch Direct3D <strong>Present</strong> calls. This optimization enables the system to enter to idle states more frequently, which can reduce power consumption. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to batch Direct3D <strong>Present</strong> calls.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. The {{EVR}} will then scale the result to the correct output size. The effective resolution will be lower if this setting is applied.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Prevent the {{EVR}} from repainting the video window after a stop command. By default, the {{EVR}} repaints the video window black after a stop command.</p> </dd> + + + <dd> <p> Bitmask to validate flag values. This value is not a valid flag. </p> </dd> + + + + + <p>Defines messages for an enhanced video renderer ({{EVR}}) presenter. This enumeration is used with the <strong>{{IMFVideoPresenter::ProcessMessage}}</strong> method.</p> + + + + <p>Contains flags that are used to configure how the enhanced video renderer ({{EVR}}) performs deinterlacing.</p> + <p>To set these flags, call the <strong>{{IMFVideoMixerControl2::SetMixingPrefs}}</strong> method.</p><p>These flags control some trade-offs between video quality and rendering speed. The constants named "{{MFVideoMixPrefs_Allow}}..." enable lower-quality settings, but only when the quality manager requests a drop in quality. The constants named "{{MFVideoMixPrefs_Force}}..." force the {{EVR}} to use lower-quality settings regardless of what the quality manager requests. (For more information about the quality manager, see <strong>{{IMFQualityAdvise}}</strong>.)</p><p>Currently two lower-quality modes are supported, as described in the following table. Either is preferable to dropping an entire frame.</p><p></p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td> <p>Half interface</p> </td><td> <p>The {{EVR}}'s video mixer skips the second field (relative to temporal order) of each interlaced frame. The video mixer still deinterlaces the first field, and this operation typically interpolates data from the second field. The overall frame rate is unaffected.</p> </td></tr> <tr><td> <p>Bob deinterlacing</p> </td><td> <p>The video mixer uses bob deinterlacing, even if the driver supports a higher-quality deinterlacing algorithm.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Force the {{EVR}} to skip the second field (in temporal order) of every interlaced frame. </p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to skip the second field (in temporal order) of every interlaced frame.</p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to use bob deinterlacing, even if the driver supports a higher-quality deinterlacing mode.</p> </dd> + + + <dd> <p>Force the {{EVR}} to use bob deinterlacing, even if the driver supports a higher-quality mode.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag. +</p> </dd> + + + + + <p>Contains flags that are used to configure the Microsoft DirectShow enhanced video renderer ({{EVR}}) filter.</p> + + + <dd> <p>Enables dynamic adjustments to video quality during playback.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag.</p> </dd> + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p> </p><p>Defines a normalized rectangle, which is used to specify sub-rectangles in a video rectangle. When a rectangle N is <em>normalized</em> relative to some other rectangle R, it means the following:</p><ul> <li> <p>The coordinate (0.0, 0.0) on N is mapped to the upper-left corner of R.</p> </li> <li> <p>The coordinate (1.0, 1.0) on N is mapped to the lower-right corner of R.</p> </li> </ul><p>Any coordinates of N that fall outside the range [0...1] are mapped to positions outside the rectangle R. A normalized rectangle can be used to specify a region within a video rectangle without knowing the resolution or even the aspect ratio of the video. For example, the upper-left quadrant is defined as {0.0, 0.0, 0.5, 0.5}.</p> + + + <dd> <p>X-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>X-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + + + <p>Maps a position on an input video stream to the corresponding position on an output video stream.</p><p>To obtain a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the renderer with the service {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}.</p> + + + + <p>Maps output image coordinates to input image coordinates. This method provides the reverse transformation for components that map coordinates on the input image to different coordinates on the output image. </p> + <p>In the following diagram, R(dest) is the destination rectangle for the video. You can obtain this rectangle by calling <strong>{{IMFVideoDisplayControl::GetVideoPosition}}</strong>. The rectangle {{R1}} is a substream within the video. The point P has pixel coordinates (x,y) relative to R(dest).</p><p></p><p>The position of P relative to R(dest) in <em>normalized</em> coordinates is calculated as follows:</p><code>float xn = float(x + 0.5) / widthDest; +float xy = float(y + 0.5) / heightDest; +</code><p>where <em>widthDest</em> and <em>heightDest</em> are the width and height of R(dest) in pixels.</p><p>To calculate the position of P relative to {{R1}}, call <strong>MapOutputCoordinateToInputStream</strong> as follows:</p><code>float x1 = 0, y1 = 0; +hr = pMap-&gt;MapOutputCoordinateToInputStream(xn, yn, 0, dwInputStreamIndex, &amp;x1, &amp;y1);</code><p>The values returned in <em>x1</em> and <em>y1</em> are normalized to the range [0...1]. To convert back to pixel coordinates, scale these values by the size of {{R1:}}</p><code>int scaledx = int(floor(x1 * widthR1)); +int scaledy = int(floor(xy * heightR1));</code><p>Note that <em>x1</em> and <em>y1</em> might fall outside the range [0...1] if P lies outside of {{R1}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> X-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Y-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Output stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Input stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Receives the mapped x-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Receives the mapped y-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + + + <p>Returns the device identifier supported by a video renderer component. This interface is implemented by mixers and presenters for the enhanced video renderer ({{EVR}}). If you replace either of these components, the mixer and presenter must report the same device identifier.</p> + + + + <p> </p><p>Returns the identifier of the video device supported by an {{EVR}} mixer or presenter.</p> + <p>If a mixer or presenter uses Direct3D 9, it must return the value {{IID_IDirect3DDevice9}} in <em>pDeviceID</em>. The {{EVR}}'s default mixer and presenter both return this value. If you write a custom mixer or presenter, it can return some other value. However, the mixer and presenter must use matching device identifiers.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device identifier. Generally, the value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) displays video.</p><p>The {{EVR}} presenter implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li>The {{EVR}} media sink. </li> <li>The DirectShow {{EVR}} filter. </li> <li>The {{EVR}} presenter. </li> </ul><p>If you implement a custom presenter for the {{EVR}}, the presenter can optionally expose this interface as a service.</p> + + + + <p> Gets the size and aspect ratio of the video, prior to any stretching by the video renderer. </p> + <p>If no media types have been set on any video streams, the method succeeds but all parameters are set to zero.</p><p>You can set <em>pszVideo</em> or <em>pszARVideo</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one of the parameters must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the native video rectangle. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the aspect ratio of the video. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the range of sizes that the enhanced video renderer ({{EVR}}) can display without significantly degrading performance or image quality. </p> + <p>You can set <em>pszMin</em> or <em>pszMax</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the maximum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the source and destination rectangles for the video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>One or more required parameters are <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the source rectangle.</p> </dd> + + + <dd> <p>Receives the current destination rectangle.</p> </dd> + + + + + <p> </p><p>Specifies how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> Queries how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the clipping window for the video. </p> + <p>There is no default clipping window. The application must set the clipping window.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a handle to the window where the enhanced video renderer ({{EVR}}) will draw the video.</p> </dd> + + + + + <p> </p><p>Repaints the current video frame. Call this method whenever the application receives a {{WM_PAINT}} message.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} cannot repaint the frame at this time. This error can occur while the {{EVR}} is switching between full-screen and windowed mode. The caller can safely ignore this error.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> Gets a copy of the current image being displayed by the video renderer. </p> + <p>This method can be called at any time. However, calling the method too frequently degrades the video playback performance.</p><p>This method retrieves a copy of the final composited image, which includes any substreams, alpha-blended bitmap, aspect ratio correction, background color, and so forth.</p><p>In windowed mode, the bitmap is the size of the destination rectangle specified in <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. In full-screen mode, the bitmap is the size of the display.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LICENSE_INCORRECT_RIGHTS}}</strong></dt> </dl> </td><td> <p>The content is protected and the license does not permit capturing the image.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{BITMAPINFOHEADER}}</strong> structure that receives a description of the bitmap. Set the <strong>biSize</strong> member of the structure to <code>sizeof({{BITMAPINFOHEADER}})</code> before calling the method.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains a packed Windows device-independent bitmap ({{DIB}}). The caller must free the memory for the bitmap by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the buffer returned in <em>pDib</em>, in bytes.</p> </dd> + + + <dd> <p>Receives the time stamp of the captured image.</p> </dd> + + + + + <p> </p><p>Sets the border color for the video.</p> + <p>By default, if the video window straddles two monitors, the enhanced video renderer ({{EVR}}) clips the video to one monitor and draws the border color on the remaining portion of the window. (To change the clipping behavior, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.)</p><p>The border color is not used for letterboxing. To change the letterbox color, call <strong>{{IMFVideoProcessor::SetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the border color as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> Gets the border color for the video. </p> + <p>The border color is used for areas where the enhanced video renderer ({{EVR}}) does not draw any video.</p><p>The border color is not used for letterboxing. To get the letterbox color, call <strong>{{IMFVideoProcessor::GetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the border color, as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> </p><p>Sets various preferences related to video rendering.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p> Gets various video rendering settings. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. ]</p><p> Sets or unsets full-screen rendering mode.</p><p>To implement full-screen playback, an application should simply resize the video window to cover the entire area of the monitor. Also set the window to be a topmost window, so that the application receives all mouse-click messages. For more information about topmost windows, see the documentation for the <strong>SetWindowPos</strong> function.</p> + <p> The default {{EVR}} presenter implements full-screen mode using Direct3D exclusive mode. </p><p> If you use this method to switch to full-screen mode, set the application window to be a topmost window and resize the window to cover the entire monitor. This ensures that the application window receives all mouse-click messages. Also set the keyboard focus to the application window. When you switch out of full-screen mode, restore the window's original size and position. </p><p> By default, the cursor is still visible in full-screen mode. To hide the cursor, call <strong>ShowCursor</strong>. </p><p>The transition to and from full-screen mode occurs asynchronously. To get the current mode, call <strong>{{IMFVideoDisplayControl::GetFullscreen}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Queries whether the enhanced video renderer ({{EVR}}) is currently in full-screen mode. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} is currently switching between full-screen and windowed mode.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the {{EVR}} is in full-screen mode. If <strong>{{FALSE}}</strong>, the {{EVR}} will display the video inside the application-provided clipping window.</p> </dd> + + + + + <p>Represents a video presenter. A <em>video presenter</em> is an object that receives video frames, typically from a video mixer, and presents them in some way, typically by rendering them to the display. The enhanced video renderer ({{EVR}}) provides a default video presenter, and applications can implement custom presenters.</p><p>The video presenter receives video frames as soon as they are available from upstream. The video presenter is responsible for presenting frames at the correct time and for synchronizing with the presentation clock.</p> + + + + <p> </p><p>Sends a message to the video presenter. Messages are used to signal the presenter that it must perform some action, or that some event has occurred.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the message as a member of the <strong>{{MFVP_MESSAGE_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Message parameter. The meaning of this parameter depends on the message type.</p> </dd> + + + + + <p> </p><p>Retrieves the presenter's media type.</p> + <p>This method returns the media type that the presenter sets for the mixer's output type. It describes the format of the composited image.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media type is not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables the presenter for the enhanced video renderer ({{EVR}}) to request a specific frame from the video mixer.</p><p>The sample objects created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function implement this interface. To retrieve a reference to this interface, call <strong>QueryInterface</strong> on the sample.</p> + + + + <p> </p><p>Called by the mixer to get the time and duration of the sample requested by the presenter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No time stamp was set for this sample. See <strong>{{IMFDesiredSample::Clear}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the desired sample time that should be mixed.</p> </dd> + + + <dd> <p>Receives the sample duration that should be mixed.</p> </dd> + + + + + <p> </p><p>Called by the presenter to set the time and duration of the sample that it requests from the mixer.</p> + <p>This value should be set prior to passing the buffer to the mixer for a Mix operation. The mixer sets the actual start and duration times on the sample before sending it back.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The time of the requested sample.</p> </dd> + + + <dd> <p>The duration of the requested sample.</p> </dd> + + + + + <p> </p><p>Clears the time stamps previously set by a call to <strong>{{IMFDesiredSample::SetDesiredSampleTimeAndDuration}}</strong>.</p> + <p>After this method is called, the <strong>{{IMFDesiredSample::GetDesiredSampleTimeAndDuration}}</strong> method returns {{MF_E_NOT_AVAILABLE}}.</p><p>This method also clears the time stamp and duration and removes all attributes from the sample.</p> + <p>This method does not return a value.</p> + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) mixes video substreams. Applications can use this interface to control video mixing during playback.</p><p>The {{EVR}} mixer implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier {{GUID}} is {{MR_VIDEO_MIXER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li> The {{EVR}} media sink. </li> <li> The DirectShow {{EVR}} filter. </li> <li> The {{EVR}} mixer. </li> </ul><p>If you implement a custom mixer for the {{EVR}}, the mixer can optionally expose this interface as a service.</p> + + + + <p> </p><p>Sets the z-order of a video stream.</p> + <p>The {{EVR}} draws the video streams in the order of their z-order values, starting with zero. The reference stream must be first in the z-order, and the remaining streams can be in any order.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value of <em>dwZ</em> is larger than the maximum z-order value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid z-order for this stream. For the reference stream, <em>dwZ</em> must be zero. For all other streams, <em>dwZ</em> must be greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Z-order value. The z-order of the reference stream must be zero. The maximum z-order value is the number of streams minus one.</p> </dd> + + + + + <p> </p><p>Retrieves the z-order of a video stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Receives the z-order value.</p> </dd> + + + + + <p> Sets the position of a video stream within the composition rectangle. </p> + <p> The mixer draws each video stream inside a bounding rectangle that is specified relative to the final video image. This bounding rectangle is given in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. </p><p> The coordinates of the bounding rectangle must fall within the range [0.0, 1.0]. Also, the X and Y coordinates of the upper-left corner cannot exceed the X and Y coordinates of the lower-right corner. In other words, the bounding rectangle must fit entirely within the composition rectangle and cannot be flipped vertically or horizontally. </p><p>The following diagram shows how the {{EVR}} mixes substreams.</p><p>The output rectangle for the stream is specified by calling <strong>SetStreamOutputRect</strong>. The source rectangle is specified by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. The mixer applies the output rectangle first, when it mixes the streams into a single bounding rectangle. This bounding rectangle is called <em>composition space</em>. Then the presenter applies the source rectangle to the composited image.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The coordinates of the bounding rectangle given in <em>pnrcOutput</em> are not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that defines the bounding rectangle for the video stream.</p> </dd> + + + + + <p> </p><p>Retrieves the position of a video stream within the composition rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the bounding rectangle, in normalized coordinates.</p> </dd> + + + + + <p>Controls preferences for video deinterlacing.</p><p> The default video mixer for the Enhanced Video Renderer ({{EVR}}) implements this interface.</p><p>To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> on any of the following objects, using the <strong>{{MR_VIDEO_MIXER_SERVICE}}</strong> service identifier:</p><ul> <li>The Media Session, if the topology contains an instance of the {{EVR}}.</li> <li>The {{EVR}} media sink.</li> <li>The DirectShow {{EVR}} filter.</li> <li>The {{EVR}} mixer.</li> </ul> + + + + <p>Sets the preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration. </p> </dd> + + + + + <p>Gets the current preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>Sets a new mixer or presenter for the Enhanced Video Renderer ({{EVR}}).</p><p>Both the {{EVR}} media sink and the DirectShow {{EVR}} filter implement this interface. To get a reference to the interface, call <strong>QueryInterface</strong> on the media sink or the filter. Do not use <strong>{{IMFGetService}}</strong> to get a reference to this interface.</p> + <p>The {{EVR}} activation object returned by the <strong>{{MFCreateVideoRendererActivate}}</strong> function does not expose this interface. Instead, the activation object supports attributes that specify a custom mixer or presenter. For more information, see Enhanced Video Renderer Attributes.</p> + + + + <p> </p><p>Sets a new mixer or presenter for the enhanced video renderer ({{EVR}}).</p> + <p>Call this method directly after creating the {{EVR}}, before you do any of the following:</p><ul> <li> <p>Call <strong>{{IMFGetService::GetService}}</strong> on the {{EVR}}.</p> </li> <li> <p>Call <strong>{{IEVRFilterConfig::SetNumberOfStreams}}</strong> on the {{EVR}}.</p> </li> <li> <p>Connect any pins on the {{EVR}} filter, or set any media types on {{EVR}} media sink.</p> </li> </ul><p>The {{EVR}} filter returns {{VFW_E_WRONG_STATE}} if any of the filter's pins are connected. The {{EVR}} media sink returns {{MF_E_INVALIDREQUEST}} if a media type is set on any of the streams, or the presentation clock is running or paused.</p><p>The device identifiers for the mixer and the presenter must match. The <strong>{{IMFVideoDeviceID::GetDeviceID}}</strong> method returns the device identifier. If they do not match, the method returns {{E_INVALIDARG}}.</p><p>If the video renderer is in the protected media path ({{PMP}}), the mixer and presenter objects must be certified safe components and pass any trust authority verification that is being enforced. Otherwise, this method will fail.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Either the mixer or the presenter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The mixer and presenter cannot be replaced in the current state. ({{EVR}} media sink.)</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>One or more input pins are connected. (DirectShow {{EVR}} filter.)</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTransform}}</strong> interface of the mixer to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default mixer.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFVideoPresenter}}</strong> interface of the presenter to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default presenter.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p> </p><p>Sets the number of input pins on the {{EVR}} filter.</p> + <p>After this method has been called, it cannot be called a second time on the same instance of the {{EVR}} filter. Also, the method fails if any input pins are connected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid number of streams. The minimum is one, and the maximum is 16.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>This method has already been called, or at least one pin is already connected.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the total number of input pins on the {{EVR}} filter. This value includes the input pin for the reference stream, which is created by default. For example, to mix one substream plus the reference stream, set this parameter to 2.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Configures the DirectShow <strong>Enhanced Video Renderer</strong> ({{EVR}}) filter. To get a reference to this interface, call <strong>QueryInterface</strong> on the {{EVR}} filter.</p> + + + + <p>Sets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> ({{EVR}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + + <p>Gets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables a custom video mixer or video presenter to get interface references from the Enhanced Video Renderer ({{EVR}}). The mixer can also use this interface to get interface references from the presenter, and the presenter can use it to get interface references from the mixer.</p><p>To use this interface, implement the <strong>{{IMFTopologyServiceLookupClient}}</strong> interface on your custom mixer or presenter. The {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> with a reference to the {{EVR}}'s <strong>{{IMFTopologyServiceLookup}}</strong> interface.</p> + + + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p>Initializes a video mixer or presenter. This interface is implemented by mixers and presenters, and enables them to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>When the {{EVR}} loads the video mixer and the video presenter, the {{EVR}} queries the object for this interface and calls <strong>InitServicePointers</strong>. Inside the <strong>InitServicePointers</strong> method, the object can query the {{EVR}} for interface references.</p> + + + + <p> </p><p>Signals the mixer or presenter to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>The <strong>{{IMFTopologyServiceLookup}}</strong> reference is guaranteed to be valid only during the call to <strong>InitServicePointers</strong>. The mixer or presenter should not store a reference to this interface after the method returns.</p><p>When the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong>, the mixer or presenter should release any references it obtained from the {{EVR}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyServiceLookup}}</strong> interface. To query the {{EVR}} for an interface, call <strong>{{IMFTopologyServiceLookup::LookupService}}</strong>.</p> </dd> + + + + + <p> </p><p>Signals the object to release the interface references obtained from the enhanced video renderer ({{EVR}}).</p> + <p>After this method is called, any interface references obtained during the previous call to <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> are no longer valid. The object must release them.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Queries whether the plug-in has any transient vulnerabilities at this time. </p> + <p>This method provides a way for the plug-in to report temporary conditions that would cause the input trust authority ({{ITA}}) to distrust the plug-in. For example, if an {{EVR}} presenter is in windowed mode, it is vulnerable to {{GDI}} screen captures.</p><p>To disable screen capture in Direct3D, the plug-in must do the following:</p><ul> <li> <p>Create the Direct3D device in full-screen exlusive mode.</p> </li> <li> <p>Specify the {{D3DCREATE_DISABLE_PRINTSCREEN}} flag when you create the device. For more information, see <strong>{{IDirect3D9::CreateDevice}}</strong> in the DirectX documentation.</p> </li> </ul><p>In addition, the graphics adapter must support the Windows Vista Display Driver Model ({{WDDM}}) and the Direct3D extensions for Windows Vista (sometimes called {{D3D9Ex}} or {{D3D9L}}).</p><p>If these conditions are met, the presenter can return <strong>{{TRUE}}</strong> in the <em>pYes</em> parameter. Otherwise, it should return <strong>{{FALSE}}</strong>.</p><p>The {{EVR}} calls this method whenever the device changes. If the plug-in returns <strong>{{FALSE}}</strong>, the {{EVR}} treats this condition as if the plug-in had a new output connector of unknown type. The policy object can then allow or block playback, depending on the {{ITA}}'s policy.</p><p>This method should be used only to report transient conditions. A plug-in that is never in a trusted state should not implement the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface at all.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in has no transient vulnerabilities at the moment and can receive protected content. If <strong>{{FALSE}}</strong>, the plug-in has a transient vulnerability. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (untrusted).</p> </dd> + + + + + <p> Queries whether the plug-in can limit the effective video resolution. </p> + <p>Constriction is a protection mechanism that limits the effective resolution of the video frame to a specified maximum number of pixels.</p><p>Video constriction can be implemented by either the mixer or the presenter.</p><p>If the method returns <strong>{{TRUE}}</strong>, the {{EVR}} might call <strong>{{IEVRTrustedVideoPlugin::SetConstriction}}</strong> at any time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in can limit the effective video resolution. Otherwise, the plug-in cannot limit the video resolution. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (not supported).</p> </dd> + + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Enables or disables the ability of the plug-in to export the video image. </p> + <p>An {{EVR}} plug-in might expose a way for the application to get a copy of the video frames. For example, the standard {{EVR}} presenter implements <strong>{{IMFVideoDisplayControl::GetCurrentImage}}</strong>.</p><p>If the plug-in supports image exporting, this method enables or disables it. Before this method has been called for the first time, the {{EVR}} assumes that the mechanism is enabled.</p><p>If the plug-in does not support image exporting, this method should return {{S_OK}} and ignore the value of <em>bDisable</em>. If the method fails, the {{EVR}} treats it as a failure to enforce the policy, which will probably cause playback to stop.</p><p>While image exporting is disabled, any associated export method, such as <strong>GetCurrentImage</strong>, should return {{MF_E_LICENSE_INCORRECT_RIGHTS}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Boolean value. Specify <strong>{{TRUE}}</strong> to disable image exporting, or <strong>{{FALSE}}</strong> to enable it.</p> </dd> + + + + + <p> </p><p>Creates the default video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of this object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer and video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the video mixer. If the mixer is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the owner of the video presenter. If the presenter is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video mixer. The caller must release the interface.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an instance of the enhanced video renderer ({{EVR}}) media sink.</p> + <p>This function creates the Media Foundation version of the {{EVR}}. To create the DirectShow {{EVR}} filter, call <strong>CoCreateInstance</strong> with the class identifier {{CLSID_EnhancedVideoRenderer}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the {{EVR}}.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates a media sample that manages a Direct3D surface. </p> + <p>The media sample created by this function exposes the following interfaces in addition to <strong>{{IMFSample}}</strong>:</p><ul> <li> <strong>{{IMFDesiredSample}}</strong> </li> <li> <strong>{{IMFTrackedSample}}</strong> </li> </ul><p>If <em>pUnkSurface</em> is non-<strong>{{NULL}}</strong>, the sample contains a single media buffer, which holds a reference to the Direct3D surface. To get the Direct3D surface from the media buffer, call <strong>{{IMFGetService::GetService}}</strong> on the buffer, using the service identifier {{MR_BUFFER_SERVICE}}. The media buffer does not implement <strong>{{IMF2DBuffer}}</strong>, nor does it implement the <strong>{{IMFMediaBuffer::Lock}}</strong> and <strong>Unlock</strong> methods.</p><p>Alternatively, you can set <em>pUnkSurface</em> to <strong>{{NULL}}</strong>, and later add a DirectX surface buffer to the sample by calling <strong>{{IMFSample::AddBuffer}}</strong>. To create a DirectX surface buffer, call <strong>{{MFCreateDXSurfaceBuffer}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the Direct3D surface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the sample's <strong>{{IMFSample}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an object that allocates video samples.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Contains encoding statistics from the Digital Living Network Alliance ({{DLNA}}) media sink.</p><p>This structure is used with the {{MF_MP2DLNA_STATISTICS}} attribute.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink. </p><p>The {{DLNA}} media sink exposes this interface. To get a reference to this interface, call <strong>CoCreateInstance</strong>. The {{CLSID}} is <strong>{{CLSID_MPEG2DLNASink}}</strong>.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></strong></dt> </dl> </td><td> <p>The method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream. The {{DLNA}} media sink writes data to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the {{DLNA}} media sink accepts {{PAL}} video formats. Otherwise, it accepts {{NTSC}} video formats.</p> </dd> + + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies options for the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_CREATION_OPTIONS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies the current playback state.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags that describe a media item.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_MEDIAITEM_CHARACTERISTICS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags for the <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> structure.</p><p>Some of these flags, marked [out], convey information back to the {{MFPlay}} player object. The application should set or clear these flags as appropriate, before returning from the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Defines event types for the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + <p>For each event type, the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback receives a reference to a data structure. The first part of the data structure is always an <strong>{{MFP_EVENT_HEADER}}</strong> structure. The following table lists the data structure for each event type.</p><p>In your implementation of <strong>OnMediaPlayerEvent</strong>, you must cast the <em>pEventHeader</em> parameter to the correct structure type. A set of macros is defined for this purpose. These macros check the value of the event type and return <strong>{{NULL}}</strong> if there is a mismatch; otherwise they return a reference to the correct structure type.</p><table> <tr><td><strong>Event type</strong></td><td> <p><strong>Event structure</strong></p> <p><strong>Pointer cast macro</strong></p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAY}}</td><td> <p> <strong>{{MFP_PLAY_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAY_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PAUSE}}</td><td> <p> <strong>{{MFP_PAUSE_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PAUSE_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_STOP}}</td><td> <p> <strong>{{MFP_STOP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_STOP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_POSITION_SET}}</td><td> <p> <strong>{{MFP_POSITION_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_RATE_SET}}</td><td> <p> <strong>{{MFP_RATE_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CREATED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</td><td> <p> <strong>{{MFP_MEDIAITEM_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_FRAME_STEP}}</td><td> <p> <strong>{{MFP_FRAME_STEP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CLEARED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MF}}</td><td> <p> <strong>{{MFP_MF_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MF_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ERROR}}</td><td> <p> <strong>{{MFP_ERROR_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ERROR_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</td><td> <p> <strong>{{MFP_PLAYBACK_ENDED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</td><td> <p> <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains information that is common to every type of {{MFPlay}} event.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAY}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Play}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAY_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Pause}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PAUSE_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_STOP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Stop}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_STOP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetPosition}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the {{MFP_EVENT_TYPE_RATE_SET}} event. This event is sent when the <strong>{{IMFPMediaPlayer::SetRate}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> macro for this purpose.</p><p>Media items are created asynchronously. If multiple items are created, the operations can complete in any order, not necessarily in the same order as the method calls. You can use the <strong>dwUserData</strong> member to identify the items, if you have simultaneous requests pending. </p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> macro for this purpose.</p><p>If one or more streams could not be connected to a media sink, the event property store contains the {{MFP_PKEY_StreamRenderingResults}} property. The value of the property is an array of <strong>{{HRESULT}}</strong> values, indicating which streams were connected successfully. The event property store can be accessed through the <strong>header.pPropertyStore</strong> member.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::FrameStep}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::ClearMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MF}}</strong> event. The {{MFPlay}} player object uses this event to forward certain events from the Media Foundation pipeline to the application.</p> + <p> To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MF_EVENT}}</strong> macro for this purpose.</p><p>If <strong>{{MFEventType}}</strong> is {{MEStreamSinkFormatChanged}}, the following property may be stored in the event property store, which can be accessed through the <strong>header.pPropertyStore</strong> member.</p><table> <tr><th>Property</th><th>Description</th></tr> <tr><td> {{MFP_PKEY_StreamIndex}} </td><td>The index of the stream whose format changed. </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event. This event is sent if an error occurs during playback. </p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_ERROR_EVENT}}</strong> macro for this purpose.</p><p>This event is not used to signal the failure of an asynchronous <strong>{{IMFPMediaPlayer}}</strong> method. If an asynchronous method fails, the error is reported in the standard event listed for that method. The <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event is used for errors that happen outside the context of an asynchronous method call.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</strong> event. This event is sent when the current media item finishes playing.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</strong> event. This event is sent if the application plays a media file from a server that requires authentication. The application can respond by providing the user credentials.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method. You can use the <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> macro for this purpose.</p><p>If the <strong>flags</strong> member contains the <strong>{{MFP_CREDENTIAL_PROMPT}}</strong> flag, the application should do the following:</p><ol> <li>Prompt the user to enter a user name and password.</li> <li>Store the user name in the credentials object by calling <strong>{{IMFNetCredential::SetUser}}</strong> on the <strong>pCredential</strong> reference.</li> <li>Store the password by calling <strong>{{IMFNetCredential::SetPassword}}</strong> on the <strong>pCredential</strong> reference.</li> </ol><p>To cancel authentication, set <strong>fProceedWithAuthentication</strong> equal to <strong>{{FALSE}}</strong>.</p><p>By default, {{MFPlay}} uses the network source's implementation of <strong>{{IMFNetCredentialManager}}</strong> to manage credentials. An application can provide its own implementation of this interface as follows:</p><ol> <li>Call <strong>QueryInterface</strong> on the <strong>{{IMFPMediaPlayer}}</strong> reference to get the <strong>{{IPropertyStore}}</strong> interface.</li> <li>Call <strong>{{IPropertyStore::SetValue}}</strong> to set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property.</li> </ol> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Contains methods to play media files.</p><p>The {{MFPlay}} player object exposes this interface. To get a reference to this interface, call <strong>{{MFPCreateMediaPlayer}}</strong>.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Starts playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PLAY}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Pauses playback. While playback is paused, the most recent video frame is displayed, and audio is silent.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stops playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_STOP}}</strong>.</p><p>The current media item is still valid. After playback stops, the playback position resets to the beginning of the current media item. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Steps forward one video frame.</p> + <p> This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong>.</p><p>The player object does not support frame stepping during reverse playback (that is, while the playback rate is negative).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Cannot frame step. Reasons for this error code include:</p> <ul> <li>There is no media item queued for playback.</li> <li>The current media item does not contain video.</li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The media source does not support frame stepping, or the current playback rate is negative.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback position.</p> + <p>If you call this method while playback is stopped, the new position takes effect after playback resumes.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong>.</p><p>If playback was started before <strong>SetPosition</strong> is called, playback resumes at the new position. If playback was paused, the video is refreshed to display the current frame at the new position. </p><p>If you make two consecutive calls to <strong>SetPosition</strong> with <em>guidPositionType</em> equal to <strong>{{MFP_POSITIONTYPE_100NS}}</strong>, and the second call is made before the first call has completed, the second call supersedes the first. The status code for the superseded call is set to <strong>{{S_FALSE}}</strong> in the event data for that call. This behavior prevents excessive latency from repeated calls to <strong>SetPosition</strong>, as each call may force the media source to perform a relatively lengthy seek operation. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}( {{ERROR_SEEK}} )</strong></strong></dt> </dl> </td><td> <p>The value of <em>pvPositionValue</em> is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback position.</p> + <p>The playback position is calculated relative to the start time of the media item, which can be specified by calling <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>. For example, if you set the start time to 20 seconds and the source duration is 60 seconds, the range of values returned by <strong>GetPosition</strong> is 0?40 seconds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the playback duration of the current media item.</p> + <p>This method calculates the playback duration, taking into account the start and stop times for the media item. To set the start and stop times, call <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong> on the media item. To get the actual duration of the underlying media file, regardless of start and stop times, call <strong>{{IMFPMediaItem::GetDuration}}</strong>.</p><p>For example, suppose that you load a 30-second audio file and set the start time equal to 2 seconds and stop time equal to 10 seconds. The <strong>{{IMFPMediaItem::GetDuration}}</strong> method will return 30 seconds, but the <strong>{{IMFPMediaPlayer::GetDuration}}</strong> method will return 8 seconds.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The media source does not have a duration. This error can occur with a live source, such as a video camera.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback rate.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong>.</p><p>The method sets the nearest supported rate, which will depend on the underlying media source. For example, if <em>flRate</em> is 50 and the source's maximum rate is 8? normal rate, the method will set the rate to 8.0. The actual rate is indicated in the event data for the <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong> event.</p><p>To find the range of supported rates, call <strong>{{IMFPMediaPlayer::GetSupportedRates}}</strong>.</p><p>This method does not support playback rates of zero, although Media Foundation defines a meaning for zero rates in some other contexts.</p><p>The new rate applies only to the current media item. Setting a new media item resets the playback rate to 1.0.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flRate</em> parameter is zero.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback rate.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of supported playback rates.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 indicates normal playback speed, 0.5 indicates half speed, and 2.0 indicates twice speed. Positive values indicate forward playback, and negative values indicate reverse playback. +</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not support playback in the requested direction (either forward or reverse).</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback state of the {{MFPlay}} player object.</p> + <p>This method can be called after the player object has been shut down.</p><p>Many of the <strong>{{IMFPMediaPlayer}}</strong> methods complete asynchronously. While an asynchronous operation is pending, the current state is not updated until the operation completes. When the operation completes, the application receives an event callback, and the new state is given in the <strong>{{MFP_EVENT_HEADER}}</strong> structure that is passed to the callback.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from a {{URL}}.</p> + <p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromURL</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromURL</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromURL</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p><p>Currently, this method returns <strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong> if the {{URL}} specifies any of the following protocols: rtsp*, mms*, or mcast. If you want to use the Media Foundation network source with {{MFPlay}}, first use the Source Resolver to create the source, and then call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></strong></dt> </dl> </td><td> <p>Unsupported protocol. </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from an object.</p> + <p>The <em>pIUnknownObj</em> parameter must specify one of the following:</p><ul> <li>A reference to a media source. Media sources expose the <strong>{{IMFMediaSource}}</strong> interface. It is the caller's responsibility to call <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source.</li> <li>A reference to a byte stream. Byte streams expose the <strong>{{IMFByteStream}}</strong> interface. Internally, the method calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </li> </ul><p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromObject</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromObject</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromObject</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queues a media item for playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong>.</p><p>To create a media item, call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong>. A media item must be used with the same {{MFPlay}} player object that created that item. If the media item was created by a different instance of the player object, <strong>SetMediaItem</strong> returns <strong>{{E_INVALIDARG}}</strong>. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The media item contains protected content. {{MFPlay}} currently does not support protected content.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_AUDIO_PLAYBACK_DEVICE}}</strong></strong></dt> </dl> </td><td> <p>No audio playback device was found. This error can occur if the media source contains audio, but no audio playback devices are available on the system.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Clears the current media item.</p><strong>Note</strong>??This method is currently not implemented.? + <p>This method stops playback and releases the player object's references to the current media item.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the current media item.</p> + <p>The <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method is asynchronous. Therefore, while <strong>SetMediaItem</strong> is pending, <strong>GetMediaItem</strong> will not return the media item that was just set. Instead, the application should implement <strong>{{IMFPMediaPlayerCallback}}</strong> interface and handle the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see Receiving Events From the Player.</p><p>The previous remark also applies to setting the media item in the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_FAIL}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio volume.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio volume.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p>This method does not change the master volume level for the player's audio session. Instead, it adjusts the per-channel volume levels for audio stream(s) that belong to the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>The <em>flVolume</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio balance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio balance.</p> + <p>If you call this method before playback starts, the setting is applied when playback starts.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flBalance</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the audio is muted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Mutes or unmutes the audio.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p> This method does not mute the entire audio session to which the player belongs. It mutes only the streams from the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the size and aspect ratio of the video. These values are computed before any scaling is done to fit the video into the destination window.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of video sizes that can be displayed without significantly degrading performance or image quality.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>. Sizes are given in pixels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the video source rectangle.</p><p>{{MFPlay}} clips the video to this rectangle and stretches the rectangle to fill the video window.</p> + <p>{{MFPlay}} stretches the source rectangle to fill the entire video window. By default, {{MFPlay}} maintains the source's correct aspect ratio, letterboxing if needed. The letterbox color is controlled by the <strong>{{IMFPMediaPlayer::SetBorderColor}}</strong> method.</p><p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p> To set the video position before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the video source rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies whether the aspect ratio of the video is preserved during playback.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the aspect-ratio mode before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current aspect-ratio correction mode. This mode controls whether the aspect ratio of the video is preserved during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the window where the video is displayed.</p> + <p>The video window is specified when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Updates the video frame.</p> + <p>Call this method when your application's video playback window receives either a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message. This method performs two functions: </p><ul> <li>Ensures that the video frame is repainted while playback is paused or stopped. </li> <li>Adjusts the displayed video to match the current size of the video window.</li> </ul><strong>Important</strong>??Call the {{GDI}} <strong>BeginPaint</strong> function before calling <strong>UpdateVideo</strong>.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the color for the video border. The border color is used to letterbox the video.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the border color before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>M<strong>{{F_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current color of the video border. The border color is used to letterbox the video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Applies an audio or video effect to playback.</p> + <p>The object specified in the <em>pEffect</em> parameter can implement either a video effect or an audio effect. The effect is applied to any media items set after the method is called. It is not applied to the current media item. </p><p>For each media item, the effect is applied to the first selected stream of the matching type (audio or video). If a media item has two selected streams of the same type, the second stream does not receive the effect. The effect is ignored if the media item does not contain a stream that matches the effect type. For example, if you set a video effect and play a file that contains just audio, the video effect is ignored, although no error is raised.</p><p>The effect is applied to all subsequent media items, until the application removes the effect. To remove an effect, call <strong>{{IMFPMediaPlayer::RemoveEffect}}</strong> or <strong>{{IMFPMediaPlayer::RemoveAllEffects}}</strong>.</p><p>If you set multiple effects of the same type (audio or video), they are applied in the same order in which you call <strong>InsertEffect</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDINDEX}}</strong></strong></dt> </dl> </td><td> <p>This effect was already added.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes an effect that was added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effect is not removed from the current media item.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The effect was not found.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes all effects that were added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effects are not removed from the current media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Shuts down the {{MFPlay}} player object and releases any resources the object is using.</p> + <p>After this method is called, most <strong>{{IMFPMediaPlayer}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>. Also, any media items created from this instance of the player object are invalidated and most <strong>{{IMFPMediaItem}}</strong> methods also return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>The player object automatically shuts itself down when its reference count reaches zero. You can use the <strong>Shutdown</strong> method to shut down the player before all of the references have been released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Note</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Represents a media item. A <em>media item</em> is an abstraction for a source of media data, such as a video file. Use this interface to get information about the source, or to change certain playback settings, such as the start and stop times. To get a reference to this interface, call one of the following methods:</p><ul> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> </li> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> </li> </ul> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the {{MFPlay}} player object that created the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the {{URL}} that was used to create the media item.</p> + <p>This method applies when the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> to create a media item. If the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create a media item, the <strong>GetURL</strong> method for that media item returns <strong>{{MF_E_NOTFOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>No {{URL}} is associated with this media item.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the object that was used to create the media item.</p> + <p>The object reference is set if the application uses <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create the media item. Otherwise, <strong>GetObject</strong> returns {{MF_E_NOTFOUND}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>The media item was created from a {{URL}}, not from an object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the application-defined value stored in the media item.</p> + <p>You can assign this value when you first create the media item, by specifying it in the <em>dwUserData</em> parameter of the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method. To update the value, call <strong>{{IMFPMediaItem::SetUserData}}</strong>.</p><p>This method can be called after the player object is shut down.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stores an application-defined value in the media item.</p> + <p>This method can be called after the player object is shut down.</p> + <p>This method can return one of these values.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the start and stop times for the media item.</p> + <p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters receive the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFP_POSITIONTYPE_100NS}}</td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): {{VT_I8}}</li> <li>Variant member: <strong>hVal</strong></li> </ul> </td></tr> </table><p>?</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the start and stop time for the media item.</p> + <p>By default, a media item plays from the beginning to the end of the file. This method adjusts the start time and/or the stop time:</p><ul> <li>To set the start time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStartPositionType</em> and <em>pvStartValue</em>.</li> <li>To set the stop time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStopPositionType</em> and <em>pvStopValue</em>.</li> </ul><p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters give the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{MFP_POSITIONTYPE_100NS}}</strong></td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): <strong>{{VT_I8}}</strong></li> <li>Variant member: <strong>hVal</strong></li> </ul> <p>To clear a previously set time, use an empty <strong>{{PROPVARIANT}}</strong> (<strong>{{VT_EMPTY}}</strong>).</p> </td></tr> </table><p>?</p><p>The adjusted start and stop times are used the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>Invalid start or stop time. Any of the following can cause this error:</p> <ul> <li>Time less than zero.</li> <li>Time greater than the total duration of the media item.</li> <li>Stop time less than start time.</li> </ul> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains a video stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains an audio stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains protected content.</p><strong>Note</strong>??Currently <strong>{{IMFPMediaPlayer}}</strong> does not support playing protected content.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the duration of the media item.</p> + <p>The method returns the total duration of the content, regardless of any values set through <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the number of streams (audio, video, and other) in the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether a stream is selected to play.</p> + <p> To select or deselect a stream, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Selects or deselects a stream.</p> + <p>You can use this method to change which streams are selected. The change goes into effect the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again with this media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a stream attribute.</p> + <p>Stream attributes describe an individual stream (audio, video, or other) within the presentation. To get an attribute that applies to the entire presentation, call <strong>{{IMFPMediaItem::GetPresentationAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a presentation attribute.</p> + <p>Presentation attributes describe the presentation as a whole. To get an attribute that applies to an individual stream within the presentation, call <strong>{{IMFPMediaItem::GetStreamAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets various flags that describe the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Sets a media sink for the media item. A <em>media sink</em> is an object that consumes the data from one or more streams. </p> + <p>By default, the {{MFPlay}} player object renders audio streams to the Streaming Audio Renderer ({{SAR}}) and video streams to the Enhanced Video Renderer ({{EVR}}). You can use the <strong>SetStreamSink</strong> method to provide a different media sink for an audio or video stream; or to support other stream types besides audio and video. You can also use it to configure the {{SAR}} or {{EVR}} before they are used.</p><p>Call this method before calling <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>. Calling this method after <strong>SetMediaItem</strong> has no effect, unless you stop playback and call <strong>SetMediaItem</strong> again.</p><p>To reset the media item to use the default media sink, set <em>pMediaSink</em> to <strong>{{NULL}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a property store that contains metadata for the source, such as author or title.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Callback interface for the <strong>{{IMFPMediaPlayer}}</strong> interface.</p><p>To set the callback, pass an <strong>{{IMFPMediaPlayerCallback}}</strong> reference to the <strong>{{MFPCreateMediaPlayer}}</strong> function in the <em>pCallback</em> parameter. The application implements the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Called by the {{MFPlay}} player object to notify the application of a playback event.</p> + <p> The specific type of playback event is given in the <strong>eEventType</strong> member of the <strong>{{MFP_EVENT_HEADER}}</strong> structure. This structure contains information that is common to all of the event types. Some event types use extended structures. A set of macros is defined for casting the <em>pEventHeader</em> reference to the correct structure type. For more information, see <strong>{{MFP_EVENT_TYPE}}</strong>. </p><p>It is safe to call <strong>{{IMFPMediaPlayer}}</strong> and <strong>{{IMFPMediaItem}}</strong> methods inside the <strong>OnMediaPlayer</strong> method. {{MFPlay}} is guaranteed not to reenter the <strong>OnMediaPlayer</strong> method. That is, calls to <strong>OnMediaPlayer</strong> are serialized, and the method will not be invoked again from inside <strong>OnMediaPlayer</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a new instance of the {{MFPlay}} player object.</p> + <p>Before calling this function, call <strong>CoIntialize(Ex)</strong> from the same thread to initialize the {{COM}} library.</p><p>Internally, <strong>{{MFPCreateMediaPlayer}}</strong> calls <strong>{{MFStartup}}</strong> to initialize the Microsoft Media Foundation platform. When the player object is destroyed, it calls <strong>{{MFShutdown}}</strong> to shut down the platform. It is not necessary for an application to call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> when using {{MFPlay}}.</p><strong>Note</strong>??If you use other Media Foundation {{APIs}} outside the life time of the player object, then your application should call <strong>{{MFStartup}}</strong> and <strong>{{MFShutdown}}</strong>.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines the {{ASF}} splitter options.</p> + + + <dd> <p>The splitter delivers samples for the {{ASF}} content in reverse order to accommodate reverse playback.</p> </dd> + + + <dd> <p>The splitter delivers samples for streams that are protected with Windows Media Digital Rights Management.</p> </dd> + + + + + <p> </p><p>Defines status conditions for the <strong>{{IMFASFSplitter::GetNextSample}}</strong> method.</p> + + + + <p> </p><p>Defines the {{ASF}} multiplexer options.</p> + + + <dd> <p>The multiplexer automatically adjusts the bit rate of the {{ASF}} content in response to the characteristics of the streams being multiplexed.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} indexer options.</p> + + + <dd> <p>The indexer creates a new index object.</p> </dd> + + + <dd> <p>The indexer returns values for reverse playback.</p> </dd> + + + <dd> <p>The indexer creates an index object for a live {{ASF}} stream.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} stream selector options.</p> + + + <dd> <p>The stream selector will not set thinning. Thinning is the process of removing samples from a stream to reduce the bit rate.</p> </dd> + + + <dd> <p>The stream selector will use the average bit rate of streams when selecting streams.</p> </dd> + + + + + <p> </p><p>Defines the selection options for an {{ASF}} stream.</p> + + + <dd> <p>No samples from the stream are delivered.</p> </dd> + + + <dd> <p>Only samples from the stream that are clean points are delivered.</p> </dd> + + + <dd> <p>All samples from the stream are delivered.</p> </dd> + + + + + <p> </p><p>Specifies how the {{ASF}} file sink should apply Windows Media {{DRM}}.</p> + + + <dd> <p>Undefined action.</p> </dd> + + + <dd> <p>Encode the content using Windows Media {{DRM}}. Use this flag if the source content does not have {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcode the content using Windows Media {{DRM}}. Use this flag if the source content has Windows Media {{DRM}} protection and you want to change the encoding parameters but not the {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcrypt the content. Use this flag if the source content has {{DRM}} protection and you want to change the {{DRM}} protection; for example, if you want to convert from Windows Media {{DRM}} version 1 to Windows Media {{DRM}} version 7 or later.</p> </dd> + + + <dd> <p>Reserved. Do not use.</p> </dd> + + + + + <p> </p><p>Contains statistics about the progress of the {{ASF}} multiplexer.</p> + <p>Use <strong>{{IMFASFMultiplexer::GetStatistics}}</strong> to retrieve this structure.</p> + + + <dd> <p>Number of frames written by the {{ASF}} multiplexer.</p> </dd> + + + <dd> <p>Number of frames dropped by the {{ASF}} multiplexer.</p> </dd> + + + + + <p> Specifies an index for the {{ASF}} indexer object. </p> + <p> The index object of an {{ASF}} file can contain a number of distinct indexes. Each index is identified by the type of index and the stream number. No {{ASF}} index object can contain more than one index for a particular combination of stream number and index type.</p> + + + <dd> <p> The type of index. Currently this value must be {{GUID_NULL}}, which specifies time-based indexing. </p> </dd> + + + <dd> <p> The stream number to which this structure applies. </p> </dd> + + + + + <p> </p><p>Describes the indexing configuration for a stream and type of index.</p> + + + <dd> <p> <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and the type of index.</p> </dd> + + + <dd> <p>Number of bytes used for each index entry. If the value is {{MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC}}, the index entries have variable size.</p> </dd> + + + <dd> <p>Optional text description of the index.</p> </dd> + + + <dd> <p>Indexing interval. The units of this value depend on the index type. A value of {{MFASFINDEXER_NO_FIXED_INTERVAL}} indicates that there is no fixed indexing interval.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> Retrieves the size of the header section of an Advanced Systems Format ({{ASF}}) file. </p> + <p>The header of an {{ASF}} file or stream can be passed to the <strong>{{IMFASFContentInfo::ParseHeader}}</strong> method to populate the ContentInfo object with the header information.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The buffer does not contain valid {{ASF}} data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer does not contain enough valid data. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing the beginning of {{ASF}} content. The size of the valid data in the buffer must be at least {{MFASF_MIN_HEADER_BYTES}} in bytes.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the header section of the content. The value includes the size of the {{ASF}} Header Object plus the size of the header section of the Data Object. Therefore, the resulting value is the offset to the start of the data packets in the {{ASF}} Data Object.</p> </dd> + + + + + <p> </p><p>Parses the information in an {{ASF}} header and uses that information to set values in the ContentInfo object. You can pass the entire header in a single buffer or send it in several pieces.</p> + <p>If you pass the header in pieces, the ContentInfo object will keep references to the buffer objects until the entire header is parsed. Therefore, do not write over the buffers passed into this method.</p><p>The start of the Header object has the following layout in memory:</p><table> <tr><th>Field Name</th><th>Size in bytes</th></tr> <tr><td>Object {{ID}}</td><td>16</td></tr> <tr><td>Object Size</td><td>8</td></tr> <tr><td>Number of Header Objects</td><td>4</td></tr> <tr><td>Reserved1</td><td>1</td></tr> <tr><td>Reserved2</td><td>1</td></tr> </table><p>?</p><p>The first call to <strong>ParseHeader</strong> reads everything up to and including Rerserved2, so it requires a minimum of 30 bytes. (Note that the <strong>{{IMFASFContentInfo::GetHeaderSize}}</strong> method reads only the Object {{ID}} and Object Size fields, so that method requires a minimum of 24 bytes.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The header is completely parsed and validated.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The input buffer does not contain valid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The input buffer is to small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_ASF_PARSEINPROGRESS}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the header passed was incomplete. This is the successful return code for all calls but the last one when passing the header in pieces.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing some or all of the header. The buffer must contain at least 30 bytes, which is the size of the Header Object, not including the objects contained in the Header Object (that is, everything up to and including the Reserved2 field in the Header Object).</p> </dd> + + + <dd> <p>Offset, in bytes, of the first byte in the buffer relative to the beginning of the header.</p> </dd> + + + + + <p> </p><p>Encodes the data in the <strong>{{MFASFContentInfo}}</strong> object into a binary Advanced Systems Format ({{ASF}}) header.</p> + <p>The size received in the <em>pcbHeader</em> parameter includes the padding size. The content information shrinks or expands the padding data depending on the size of the {{ASF}} Header Objects.</p><p>During this call, the stream properties are set based on the encoding properties of the profile. These properties are available through the <strong>{{IMFMetadata}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Objects do not exist for the media that the ContentInfo object holds reference to. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Object size exceeds 10 {{MB}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer passed in <em>pIHeader</em> is not large enough to hold the {{ASF}} Header Object information. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the buffer object that will receive the encoded header. Set to <strong>{{NULL}}</strong> to retrieve the size of the header. </p> </dd> + + + <dd> <p> Size of the encoded {{ASF}} header in bytes. If <em>pIHeader</em> is <strong>{{NULL}}</strong>, this value is set to the buffer size required to hold the encoded header. </p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) profile that describes the {{ASF}} content.</p> + <p>The profile is set by calling either <strong>{{IMFASFContentInfo::SetProfile}}</strong> or <strong>{{IMFASFContentInfo::ParseHeader}}</strong>.</p><p>The {{ASF}} profile object returned by this method does not include any of the <strong>{{MF_PD_ASF_xxx}}</strong> attributes (see Presentation Descriptor Attributes). To get these attributes, do the following:</p><ol> <li> <p>Call <strong>{{IMFASFContentInfo::GeneratePresentationDescriptor}}</strong> to get the {{ASF}} presentation descriptor. You can query the presentation descriptor for the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> <li> <p>(Optional.) Call <strong>{{MFCreateASFProfileFromPresentationDescriptor}}</strong> to convert the presentation descriptor into an {{ASF}} profile. The profile object created by this function contains the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> </ol><p>An {{ASF}} profile is a template for file encoding, and is intended mainly for creating {{ASF}} content. If you are reading an existing {{ASF}} file, it is recommended that you use the presentation descriptor to get information about the file. One exception is that the profile contains the mutual exclusion and stream prioritization objects, which are not exposed directly from the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an <strong>{{IMFASFProfile}}</strong> interface reference. The caller must release the interface. If the object does not have an {{ASF}} profile, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor for {{ASF}} content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a property store that can be used to set encoding properties.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number to configure. Set to zero to configure file-level encoding properties.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves a stream from the profile by stream index, and/or retrieves the stream number for a stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the stream to retrieve. Stream indexes are sequential and zero-based. You can get the number of streams that are in the profile by calling the <strong>{{IMFASFProfile::GetStreamCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives the stream number of the requested stream. Stream numbers are one-based and are not necessarily sequential. This parameter can be set to <strong>{{NULL}}</strong> if the stream number is not required.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong> if you want to retrieve the stream number without accessing the stream configuration.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) stream configuration object for a stream in the profile. This method references the stream by stream number instead of stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain the interface reference.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a stream to the profile or reconfigures an existing stream.</p> + <p>If the stream number in the {{ASF}} stream configuration object is already included in the profile, the information in the new object replaces the old one. If the profile does not contain a stream for the stream number, the {{ASF}} stream configuration object is added as a new stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFStreamConfig}}</strong> interface of a configured {{ASF}} stream configuration object.</p> </dd> + + + + + <p> </p><p>Removes a stream from the Advanced Systems Format ({{ASF}}) profile object.</p> + <p>After a stream is removed, the {{ASF}} profile object reassigns stream indexes so that the index values are sequential starting from zero. Any previously stored stream index numbers are no longer valid after deleting a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to remove.</p> </dd> + + + + + <p> </p><p>Creates an Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The {{ASF}} stream configuration object created by this method is not included in the profile. To include the stream, you must first configure the stream configuration and then call <strong>{{IMFASFProfile::SetStream}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>ppIStream</em> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>stream configuration object could not be created due to insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of Advanced Systems Format ({{ASF}}) mutual exclusion objects that are associated with the profile.</p> + <p>Multiple mutual exclusion objects may be required for streams that are mutually exclusive in more than one way. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of mutual exclusion objects.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>This method does not create a copy of the mutual exclusion object. The returned reference refers to the mutual exclusion contained in the profile object. You must not make any changes to the mutual exclusion object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the mutual exclusion object in the profile, you must first clone the mutual exclusion object by calling <strong>{{IMFASFMutualExclusion::Clone}}</strong>. Make whatever changes are required to the clone of the object, remove the old mutual exclusion object from the profile by calling the <strong>{{IMFASFProfile::RemoveMutualExclusion}}</strong> method, and then add the updated object by calling the <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the mutual exclusion object in the profile.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the {{ASF}} mutual exclusion object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a configured Advanced Systems Format ({{ASF}}) mutual exclusion object to the profile.</p> + <p>You can create a mutual exclusion object by calling the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFMutualExclusion}}</strong> interface of a configured {{ASF}} mutual exclusion object.</p> </dd> + + + + + <p> </p><p>Removes an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>When a mutual exclusion object is removed from the profile, the {{ASF}} profile object reassigns the mutual exclusion indexes so that they are sequential starting with zero. Any previously stored indexes are no longer valid after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the mutual exclusion object to remove from the profile.</p> </dd> + + + + + <p> </p><p>Creates a new Advanced Systems Format ({{ASF}}) mutual exclusion object. Mutual exclusion objects can be added to a profile by calling the <strong>AddMutualExclusion</strong> method.</p> + <p>The {{ASF}} mutual exclusion object created by this method is not associated with the profile. Call <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> after configuring the object to make this association.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved.</p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <strong>Note</strong>??This method is not implemented.? + <p> Returns <strong>{{E_NOTIMPL}}</strong>. </p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format profile object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p>Gets the major media type of the stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the major media type for the stream. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> </p><p>Retrieves the stream number of the stream.</p> + <p>The method returns the stream number.</p> + + + + <p> </p><p>Assigns a stream number to the stream.</p> + <p>Stream numbers start from 1 and do not need to be sequential.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number to assign to the stream.</p> </dd> + + + + + <p> </p><p>Retrieves the media type of the stream.</p> + <p>To reduce unnecessary copying, the method returns a reference to the media type that is stored internally by the object. Do not modify the returned media type, as the results are not defined.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type object associated with the stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the media type for the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>Some validation of the media type is performed by this method. However, a media type can be successfully set, but cause an error when the stream is added to the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type object.</p> </dd> + + + + + <p> </p><p>Retrieves the number of payload extensions that are configured for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of payload extensions.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p> </p><p>Configures a payload extension for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>A reference to a buffer that contains information about this extension system. This information is the same for all samples and is stored in the content header (not with each sample). This parameter can be <strong>{{NULL}}</strong> if <em>cbExtensionSystemInfo</em> is 0.</p> </dd> + + + <dd> <p>Amount of data, in bytes, that describes this extension system. If this value is 0, then <em>pbExtensionSystemInfo</em> can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Removes all payload extensions that are configured for the stream.</p> + <p>None.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates a copy of the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p>Configures an Advanced Systems Format ({{ASF}}) mutual exclusion object, which manages information about a group of streams in an {{ASF}} profile that are mutually exclusive. When streams or groups of streams are mutually exclusive, only one of them is read at a time, they are not read concurrently.</p><p>A common example of mutual exclusion is a set of streams that each include the same content encoded at a different bit rate. The stream that is used is determined by the available bandwidth to the reader.</p><p>An <strong>{{IMFASFMutualExclusion}}</strong> interface exists for every {{ASF}} mutual exclusion object. A reference to this interface is obtained when you create the object using the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>An {{ASF}} profile object can support multiple mutual exclusions. Each must be configured using a separate {{ASF}} mutual exclusion object.</p> + + + + <p> </p><p>Retrieves the type of mutual exclusion represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams of several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A variable that receives the type identifier. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Sets the type of mutual exclusion that is represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams in several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The type of mutual exclusion that is represented by the {{ASF}} mutual exclusion object. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Retrieves the number of records in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of streams in every other record.</p><p>Use this method in conjunction with <strong>{{IMFASFMutualExclusion::GetStreamsForRecord}}</strong> to retrieve the streams that are included in each record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the count of records.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers contained in a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of the record for which to retrieve the stream numbers.</p> </dd> + + + <dd> <p>An array that receives the stream numbers. Set to <strong>{{NULL}}</strong> to get the number of elements required, which is indicated by the value of <em>pcStreams</em> on return. If this parameter is not <strong>{{NULL}}</strong>, the method will copy as many stream numbers to the array as there are elements indicated by the value of <em>pcStreams</em>.</p> </dd> + + + <dd> <p>On input, the number of elements in the array referenced by <em>pwStreamNumArray</em>. On output, the method sets this value to the count of stream numbers in the record. You can call <strong>GetStreamsForRecord</strong> with <em>pwStreamNumArray</em> set to <strong>{{NULL}}</strong> to retrieve the number of elements required to hold all of the stream numbers.</p> </dd> + + + + + <p> </p><p>Adds a stream number to a record in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of all streams in every other record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The specified stream number is already associated with the record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number to which the stream is added. A record number is set by the <strong>{{IMFASFMutualExclusion::AddRecord}}</strong> method.</p> </dd> + + + <dd> <p>The stream number to add to the record.</p> </dd> + + + + + <p> </p><p>Removes a stream number from a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The stream number is not listed for the specified record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number from which to remove the stream number.</p> </dd> + + + <dd> <p>The stream number to remove from the record.</p> </dd> + + + + + <p> </p><p>Removes a record from the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>When a record is removed, the {{ASF}} mutual exclusion object indexes the remaining records so that they are sequential starting with zero. You should enumerate the records to ensure that you have the correct index for each record. If the record removed is the one with the highest index, removing it has no effect on the other indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the record to remove.</p> </dd> + + + + + <p> </p><p>Adds a record to the mutual exclusion object. A record specifies streams that are mutually exclusive with the streams in all other records.</p> + <p>A record can include one or more stream numbers. All of the streams in a record are mutually exclusive with all the streams in all other records in the {{ASF}} mutual exclusion object.</p><p>You can use records to create complex mutual exclusion scenarios by using multiple {{ASF}} mutual exclusion objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the index assigned to the new record. Record indexes are zero-based and sequential.</p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format mutual exclusion object.</p> + <p>The cloned object is a new object, completely independent of the object from which it was cloned.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the number of entries in the stream priority list.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the stream priority list.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the stream number of a stream in the stream priority list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument or the <em>dwStreamIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the entry to retrieve from the stream priority list. To get the number of entries in the priority list, call <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the stream number of the stream priority entry.</p> </dd> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Removes a stream from the stream priority list.</p> + <p>When a stream is removed from the stream priority list, the index values of all streams that follow it in the list are decremented.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the entry in the stream priority list to remove. Values range from zero, to one less than the stream count retrieved by calling <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Creates a copy of the {{ASF}} stream prioritization object.</p> + <p>The new object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamPrioritization}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and configures it to parse data from an {{ASF}} data section.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIContentInfo</em> parameter is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of a ContentInfo object that describes the data to be parsed.</p> </dd> + + + + + <p> </p><p>Sets option flags on the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>This method can only be called after the splitter is initialized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The splitter is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter does not contain a valid flag.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{MFASF_SPLITTER_REVERSE}} flag is set, but the content cannot be parsed in reverse.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise combination of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the streams to be parsed by the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>Calling this method supersedes any previous stream selections; only the streams specified in the <em>pwStreamNumbers</em> array will be selected.</p><p>By default, no streams are selected by the splitter.</p><p>You can obtain a list of the currently selected streams by calling the <strong>{{IMFASFSplitter::GetSelectedStreams}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwStreamNumbers</em> is <strong>{{NULL}}</strong> and <em>wNumStreams</em> contains a value greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number was passed in the array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of variables containing the list of stream numbers to select.</p> </dd> + + + <dd> <p>The number of valid elements in the stream number array.</p> </dd> + + + + + <p> Gets a list of currently selected streams. </p> + <p>To get the number of selected streams, set <em>pwStreamNumbers</em> to <strong>{{NULL}}</strong>. The method will return <strong>{{MF_E_BUFFERTOSMALL}}</strong> but will also set the value of <code>*pwNumStreams</code> equal to the number of selected streams. Then allocate an array of that size and call the method again, passing the array in the <em>pwStreamNumbers</em> parameter.</p><p>The following code shows these steps:</p><pre>{{HRESULT}} DisplaySelectedStreams({{IMFASFSplitter}} *pSplitter) +{ {{WORD}} count = 0; {{HRESULT}} hr = pSplitter-&gt;GetSelectedStreams({{NULL}}, &amp;count); if (hr == {{MF_E_BUFFERTOOSMALL}}) { {{WORD}} *pStreamIds = new (std::nothrow) {{WORD}}[count]; if (pStreamIds) { hr = pSplitter-&gt;GetSelectedStreams(pStreamIds, &amp;count); if ({{SUCCEEDED}}(hr)) { for ({{WORD}} i = 0; i &lt; count; i++) { printf("Selected stream {{ID:}} %d\n", pStreamIds[i]); } } delete [] pStreamIds; } else { hr = {{E_OUTOFMEMORY}}; } } return hr; +} +</pre><p>Alternatively, you can allocate an array that is equal to the total number of streams and pass that to <em>pwStreamNumbers</em>.</p><p>Before calling this method, initialize <code>*pwNumStreams</code> to the number of elements in <em>pwStreamNumbers</em>. If <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>, set <code>*pwNumStreams</code> to zero.</p><p> By default, no streams are selected by the splitter. Select streams by calling the <strong>{{IMFASFSplitter::SelectStreams}}</strong> method. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The <em>pwStreamNumbers</em> array is smaller than the number of selected streams. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The address of an array of <strong>{{WORDs}}</strong>. This array receives the stream numbers of the selected streams. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, points to a variable that contains the number of elements in the <em>pwStreamNumbers</em> array. Set the variable to zero if <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>. </p> <p>On output, receives the number of elements that were copied into <em>pwStreamNumbers</em>. Each element is the identifier of a selected stream.</p> </dd> + + + + + <p> </p><p>Sends packetized Advanced Systems Format ({{ASF}}) data to the {{ASF}} splitter for processing.</p> + <p>After using this method to parse data, you must call <strong>{{IMFASFSplitter::GetNextSample}}</strong> to retrieve parsed media samples.</p><p>If your {{ASF}} data contains variable-sized packets, you must set the <strong>{{MFASFSPLITTER_PACKET_BOUNDARY}}</strong> attribute on the buffers to indicate the sample boundaries, and the buffers cannot span multiple packets.</p><p>If the method returns {{ME_E_NOTACCEPTING}}, call <strong>GetNextSample</strong> to get the output samples, or call <strong>{{IMFASFSplitter::Flush}}</strong> to clear the splitter.</p><p>The splitter might hold a reference count on the input buffer. Therefore, do not write over the valid data in the buffer after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIBuffer</em> parameter is <strong>{{NULL}}</strong>.</p> <p>The specified offset value in <em>cbBufferOffset</em> is greater than the length of the buffer.</p> <p>The total value of <em>cbBufferOffset</em> and <em>cbLength</em> is greater than the length of the buffer.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFASFSplitter::Initialize}}</strong> method was not called or the call failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The splitter cannot process more input at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing data to be parsed.</p> </dd> + + + <dd> <p>The offset into the data buffer where the splitter should begin parsing. This value is typically set to 0.</p> </dd> + + + <dd> <p>The length, in bytes, of the data to parse. This value is measured from the offset specified by <em>cbBufferOffset</em>. Set to 0 to process to the end of the buffer.</p> </dd> + + + + + <p> </p><p>Retrieves a sample from the Advanced Systems Format ({{ASF}}) splitter after the data has been parsed.</p> + <p>Before calling this method, call <strong>{{IMFASFSplitter::ParseData}}</strong> to give input data to the splitter. If the input does not contain enough data for a complete sample, the <strong>GetNextSample</strong> method succeeds but returns <strong>{{NULL}}</strong> in the <em>ppISample</em> parameter.</p><p>The {{ASF}} splitter skips samples for unselected streams. To select streams, call <strong>{{IMFASFSplitter::SelectStreams}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The {{ASF}} data in the buffer is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_MISSINGDATA}}</strong></dt> </dl> </td><td> <p>There is a gap in the {{ASF}} data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong></dt> </dl> </td><td> <p>More samples are ready to be retrieved. Call <strong>GetNextSample</strong> in a loop until the <em>pdwStatusFlags</em> parameter receives the value zero.</p> </td></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>No additional samples are ready. Call <strong>{{IMFASFSplitter::ParseData}}</strong> to give more input data to the splitter.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If the method returns a sample in the <em>ppISample</em> parameter, this parameter receives the number of the stream to which the sample belongs.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the parsed sample. The caller must release the interface. If no samples are ready, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and releases all pending samples.</p> + <p>Any samples waiting to be retrieved when <strong>Flush</strong> is called are lost.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the send time of the last sample received.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwLastSendTime</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the send time of the last sample received.</p> </dd> + + + + + <p>Provides methods to create Advanced Systems Format ({{ASF}}) data packets. The methods of this interface process input samples into the packets that make up an {{ASF}} data section. The {{ASF}} multiplexer exposes this interface. To create the {{ASF}} multiplexer, call <strong>{{MFCreateASFMultiplexer}}</strong>.</p> + + + + <p> </p><p>Initializes the multiplexer with the data from an {{ASF}} ContentInfo object.</p> + <p>This call must be made once at the beginning of encoding, with <em>pIContentInfo</em> pointing to the {{ASF}} ContentInfo object that describes the content to be encoded. This enables the {{ASF}} multiplexer to see, among other things, which streams will be present in the encoding session. This call typically does not affect the data in the {{ASF}} ContentInfo object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the <strong>{{MFASFContentInfo}}</strong> object that contains the header information of the new {{ASF}} file. The multiplexer will generate data packets for this file.</p> </dd> + + + + + <p> </p><p>Sets multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. These flags specify which multiplexer options to use. For more information, see "Multiplexer Initialization and Leaky Bucket Settings" in Creating the Multiplexer Object.</p> </dd> + + + + + <p> </p><p>Retrieves flags indicating the configured multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more values from the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. To set these flags, call <strong>{{IMFASFMultiplexer::SetFlags}}</strong>.</p> </dd> + + + + + <p> Delivers input samples to the multiplexer. </p> + <p> The application passes samples to <strong>ProcessSample</strong>, and the {{ASF}} multiplexer queues them internally until they are ready to be placed into {{ASF}} packets. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the {{ASF}} data packet. </p><p>After each call to <strong>ProcessSample</strong>, call <strong>GetNextPacket</strong> in a loop to get all of the available data packets. For a code example, see Generating New {{ASF}} Data Packets.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> There are too many packets waiting to be retrieved from the multiplexer. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the packets.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BANDWIDTH_OVERRUN}}</strong></dt> </dl> </td><td> <p> The sample that was processed violates the bandwidth limitations specified for the stream in the {{ASF}} ContentInfo object. When this error is generated, the sample is dropped. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The value passed in <em>wStreamNumber</em> is invalid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LATE_SAMPLE}}</strong></dt> </dl> </td><td> <p> The presentation time of the input media sample is earlier than the send time. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number of the stream to which the sample belongs. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The input sample contains the media data to be converted to {{ASF}} data packets. When possible, the time stamp of this sample should be accurate. </p> </dd> + + + <dd> <p> The adjustment to apply to the time stamp of the sample. This parameter is used if the caller wants to shift the sample time on <em>pISample</em>. This value should be positive if the time stamp should be pushed ahead and negative if the time stamp should be pushed back. This time stamp is added to sample time on <em>pISample</em>, and the resulting time is used by the multiplexer instead of the original sample time. If no adjustment is needed, set this value to 0. </p> </dd> + + + + + <p> </p><p>Retrieves the next output {{ASF}} packet from the multiplexer.</p> + <p> The client needs to call this method, ideally after every call to <strong>{{IMFASFMultiplexer::ProcessSample}}</strong>, to get the output {{ASF}} packets. Call this method in a loop as long as the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag is received. </p><p>If no packets are ready, the method returns <strong>{{S_OK}}</strong> but does not return a sample in <em>ppIPacket</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives zero or more status flags. If more than one packet is waiting, the method sets the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFSample}}</strong> interface of the first output sample of the data packet. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Signals the multiplexer to process all queued output media samples. Call this method after passing the last sample to the multiplexer.</p> + <p>You must call <strong>Flush</strong> after the last sample has been passed into the {{ASF}} multiplexer and before you call <strong>{{IMFASFMultiplexer::End}}</strong>. This causes all output media samples in progress to be completed. After calling <strong>Flush</strong>, call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> in a loop until all the pending media samples have been packetized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Collects data from the multiplexer and updates the {{ASF}} ContentInfo object to include that information in the {{ASF}} Header Object.</p> + <p>For non-live encoding scenarios (such as encoding to a file), the user should call <strong>End</strong> to update the specified ContentInfo object, adding data that the multiplexer has collected during the packet generation process. The user should then call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and write the output header at the beginning of the {{ASF}} file (overwriting the header obtained at the beginning of the encoding session). For more information, see Writing an {{ASF}} Header Object for a New File.</p><p>During live encoding, it is usually not possible to rewrite the header, so this call is not required for live encoding. (The header in those cases will simply lack some of the information that was not available until the end of the encoding session.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_FLUSH_NEEDED}}</strong></dt> </dl> </td><td> <p>There are pending output media samples waiting in the multiplexer. Call <strong>{{IMFASFMultiplexer::Flush}}</strong> to force the media samples to be packetized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object. This must be the same object that was used to initialize the multiplexer. The ContentInfo object represents the {{ASF}} Header Object of the file for which the multiplexer generated data packets.</p> </dd> + + + + + <p> </p><p>Retrieves multiplexer statistics.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain statistics.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ASF_MUX_STATISTICS}}</strong> structure that receives the statistics.</p> </dd> + + + + + <p> </p><p>Sets the maximum time by which samples from various streams can be out of synchronization. The multiplexer will not accept a sample with a time stamp that is out of synchronization with the latest samples from any other stream by an amount that exceeds the synchronization tolerance.</p> + <p>The synchronization tolerance is the maximum difference in presentation times at any given point between samples of different streams that the {{ASF}} multiplexer can accommodate. That is, if the synchronization tolerance is 3 seconds, no stream can be more than 3 seconds behind any other stream in the time stamps passed to the multiplexer. The multiplexer determines a default synchronization tolerance to use, but this method overrides it (usually to increase it). More tolerance means the potential for greater latency in the multiplexer. If the time stamps are synchronized among the streams, actual latency will be much lower than <em>msSyncTolerance</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Synchronization tolerance in milliseconds.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets indexer options.</p> + <p><strong>{{IMFASFIndexer::SetFlags}}</strong> must be called before <strong>{{IMFASFIndexer::Initialize}}</strong>. Attempting to call <strong>SetFlags</strong> after <strong>Initialize</strong> will return {{MF_E_INVALIDREQUEST}} as a result.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The indexer object was initialized before setting flags for it. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration specifying the indexer options to use.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes the indexer object. This method reads information in a ContentInfo object about the configuration of the content and the properties of the existing index, if present. Use this method before using the indexer for either writing or reading an index. You must make this call before using any of the other methods of the <strong>{{IMFASFIndexer}}</strong> interface.</p> + <p>The indexer needs to examine the data in the ContentInfo object to properly write or read the index for the content. The indexer will not make changes to the content information and will not hold any references to the <strong>{{IMFASFContentInfo}}</strong> interface.</p><p>In the {{ASF}} header, the maximum data-packet size must equal the minimum data-packet size. Otherwise, the method returns <strong>{{MF_E_UNEXPECTED}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>Invalid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>Unexpected error.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the offset of the index object from the start of the content.</p> + <p>The index continues from the offset retrieved by this method to the end of the file.</p><p>You must call <strong>{{IMFASFIndexer::Initialize}}</strong> to set up the indexer before calling this method.</p><p>If the index is retrieved by using more than one call to <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong>, the position of individual index portions is equal to the index offset plus the offset of the portion within the index.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pIContentInfo</em> is <strong>{{NULL}}</strong> or <em>pcbIndexOffset</em> is <strong>{{NULL}}</strong></p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + <dd> <p>Receives the offset of the index relative to the beginning of the content described by the ContentInfo object. This is the position relative to the beginning of the {{ASF}} file.</p> </dd> + + + + + <p> </p><p>Adds byte streams to be indexed.</p> + <p>For a reading scenario, only one byte stream should be used by the indexer object. For an index generating scenario, it depends how many index objects are needed to be generated. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer object has already been initialized and it has packets which have been indexed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of <strong>{{IMFByteStream}}</strong> interface references. To get the byte stream, call <strong>{{MFCreateASFIndexerByteStream}}</strong>.</p> </dd> + + + <dd> <p>The number of references in the <em>ppIByteStreams</em> array.</p> </dd> + + + + + <p> </p><p>Retrieves the number of byte streams that are in use by the indexer object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pcByteStreams</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of byte streams that are in use by the indexer object.</p> </dd> + + + + + <p> </p><p>Retrieves the index settings for a specified stream and index type.</p> + <p>To read an existing {{ASF}} index, call <strong>{{IMFASFIndexer::SetIndexByteStreams}}</strong> before calling this method.</p><p>If an index exists for the stream and the value passed into <em>pcbIndexDescriptor</em> is smaller than the required size of the <em>pbIndexDescriptor</em> buffer, the method returns {{MF_E_BUFFERTOOSMALL}}. The required buffer size is returned in the <em>pcbIndexDescriptor</em> parameter.</p><p>If there is no index for the specified stream, the method returns <strong>{{FALSE}}</strong> in the <em>pfIsIndexed</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer size specified in <em>pcbIndexDescriptor</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that contains the stream number and index type for which to get the status.</p> </dd> + + + <dd> <p>A variable that retrieves a Boolean value specifying whether the index described by <em>pIndexIdentifier</em> has been created.</p> </dd> + + + <dd> <p>A buffer that receives the index descriptor. The index descriptor consists of an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>On input, specifies the size, in bytes, of the buffer that <em>pbIndexDescriptor</em> points to. The value can be zero if <em>pbIndexDescriptor</em> is <strong>{{NULL}}</strong>. On output, receives the size of the index descriptor, in bytes.</p> </dd> + + + + + <p> </p><p>Configures the index for a stream.</p> + <p>You must make all calls to <strong>SetIndexStatus</strong> before making any calls to <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong>.</p><p>The indexer object is configured to create temporal indexes for each stream by default. Call this method only if you want to override the default settings.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>At attempt was made to change the index status in a seek-only scenario. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index descriptor to set. The index descriptor is an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>The size, in bytes, of the index descriptor.</p> </dd> + + + <dd> <p>A Boolean value. Set to <strong>{{TRUE}}</strong> to have the indexer create an index of the type specified for the stream specified in the index descriptor.</p> </dd> + + + + + <p> Given a desired seek time, gets the offset from which the client should start reading data. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The requested seek time is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_INDEX}}</strong></dt> </dl> </td><td> <p> No index exists of the specified type for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The value of the index entry for which to get the position. The format of this value varies depending on the type of index, which is specified in the index identifier. For time-based indexing, the variant type is <strong>{{VT_I8}}</strong> and the value is the desired seek time, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and index type. </p> </dd> + + + <dd> <p> Receives the offset within the data segment of the {{ASF}} Data Object. The offset is in bytes, and is relative to the start of packet 0. The offset gives the starting location from which the client should begin reading from the stream. This location might not correspond exactly to the requested seek time. </p> <p> For reverse playback, if no key frame exists after the desired seek position, this parameter receives the value <strong>{{MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT}}</strong>. In that case, the seek position should be 1 byte pass the end of the data segment. </p> </dd> + + + <dd> <p> Receives the approximate time stamp of the data that is located at the offset returned in the <em>pcbOffsetWithinData</em> parameter. The accuracy of this value is equal to the indexing interval of the {{ASF}} index, typically about 1 second. </p> <ul> <li> If the index type specified in <em>pIndexIdentifier</em> is <strong>{{GUID_NULL}}</strong> (time indexing), this parameter can be <strong>{{NULL}}</strong>. </li> <li> For all other index types, this parameter must be <strong>{{NULL}}</strong>. </li> </ul> <p> If the approximate time stamp cannot be determined, this parameter receives the value <strong>{{MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN}}</strong>. </p> </dd> + + + <dd> <p> Receives the payload number of the payload that contains the information for the specified stream. Packets can contain multiple payloads, each containing data for a different stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Accepts an {{ASF}} packet for the file and creates index entries for them.</p> + <p>The {{ASF}} indexer creates indexes for a file internally. You can get the completed index for all data packets sent to the indexer by committing the index with <strong>{{IMFASFIndexer::CommitIndex}}</strong> and then calling <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the index entries into a media buffer. To determine the size of the index so you can allocate a buffer large enough to hold the index, call <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>.</p><p> When this method creates index entries, they are immediately available for use by <strong>{{IMFASFIndexer::GetSeekPositionForValue}}</strong>. </p><p> The media sample specified in <em>pIASFPacketSample</em> must hold a buffer that contains a single {{ASF}} packet. Get the sample from the {{ASF}} multiplexer by calling the <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> method. </p><p>You cannot use this method while reading an index, only when writing an index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The argument passed in is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of a media sample that contains the {{ASF}} packet. </p> </dd> + + + + + <p> </p><p>Adds information about a new index to the ContentInfo object associated with {{ASF}} content. You must call this method before copying the index to the content so that the index will be readable by the indexer later.</p> + <p>For the index to function properly, you must call this method after all {{ASF}} packets in the file have been passed to the indexer by using the <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong> method. After you call this method, you must retrieve the indexes by calling <strong>GetCompletedIndex</strong> and write them to the appropriate location in the file. Finally, you must generate a new {{ASF}} header by calling the <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> method of the {{ASF}} ContentInfo object.</p><p> An application must use the <strong>CommitIndex</strong> method only when writing a new index otherwise <strong>CommitIndex</strong> may return {{MF_E_INVALIDREQUEST}} as a result. For example, {{MF_E_INVALIDREQUEST}} is returned if the application has flags other than {{MFASF_INDEXER_WRITE_NEW_INDEX}} set on the indexer object. <strong>CommitIndex</strong> can also return {{MFASF_INDEXER_WRITE_NEW_INDEX}} if the index entries have already been committed through an earlier <strong>CommitIndex</strong> call.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The caller made an invalid request. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + + + <p> </p><p>Retrieves the size, in bytes, of the buffer required to store the completed index.</p> + <p>Use this method to get the size of the index and then allocate a buffer big enough to hold it. </p><p>The index must be committed with a call to<strong>{{IMFASFIndexer::CommitIndex}}</strong> before calling <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>. If the index is not committed before <strong>GetIndexWriteSpace</strong> is called, then {{MF_E_INDEX_NOT_COMMITTED}} will be returned as a result. </p><p>Call <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the completed index into a media buffer.</p><p>You cannot use this method in a reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index has not been committed. For more information; see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the index, in bytes</p> </dd> + + + + + <p> </p><p>Retrieves the completed index from the {{ASF}} indexer object.</p> + <p>This method uses as much of the buffer as possible, and updates the length of the buffer appropriately.</p><p>If <em>pIIndexBuffer</em> is large enough to contain the entire buffer, <em>cbOffsetWithinIndex</em> should be 0, and the call needs to be made only once. Otherwise, there should be no gaps between successive buffers.</p><p>The user must write this data to the content at <em>cbOffsetFromIndexStart</em> bytes after the end of the {{ASF}} data object. You can call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong> to determine the start position of the {{ASF}} index.</p><p>This call will not succeed unless <strong>{{IMFASFIndexer::CommitIndex}}</strong> has been called. After calling <strong>GetCompletedIndex</strong>, the caller must call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and overwrite the existing {{ASF}} header with the new header; otherwise, the {{ASF}} header will not match the content, and the file is not guaranteed to play correctly.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index was not committed before attempting to get the completed index. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a media buffer that receives the index data.</p> </dd> + + + <dd> <p>The offset of the data to be retrieved, in bytes from the start of the index data. Set to 0 for the first call. If subsequent calls are needed (the buffer is not large enough to hold the entire index), set to the byte following the last one retrieved.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams that are in the Advanced Systems Format ({{ASF}}) content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the content.</p> </dd> + + + + + <p> </p><p>Retrieves the number of outputs for the Advanced Systems Format ({{ASF}}) content.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of outputs.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve the stream count.</p> </dd> + + + <dd> <p>Receives the number of streams associated with the output.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers for all of the streams that are associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve stream numbers.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers associated with the output. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetOutputStreamCount}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the output number associated with a stream.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to retrieve an output number.</p> </dd> + + + <dd> <p>Receives the output number.</p> </dd> + + + + + <p> </p><p>Retrieves the manual output override selection that is set for a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number for which to retrieve the output override selection.</p> </dd> + + + <dd> <p>Receives the output override selection. The value is a member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the selection status of an output, overriding other selection criteria.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to set selection.</p> </dd> + + + <dd> <p>Member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration specifying the level of selection for the output.</p> </dd> + + + + + <p> </p><p>Retrieves the number of mutual exclusion objects associated with an output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve the count of mutually exclusive relationships.</p> </dd> + + + <dd> <p>Receives the number of mutual exclusions.</p> </dd> + + + + + <p> </p><p>Retrieves a mutual exclusion object for an output.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve a mutual exclusion object.</p> </dd> + + + <dd> <p>Mutual exclusion number. This is an index of mutually exclusive relationships associated with the output. Set to a number between 0, and 1 less than the number of mutual exclusion objects retrieved by calling <strong>{{IMFASFStreamSelector::GetOutputMutexCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the mutual exclusion object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a mutual exclusion record to use for a mutual exclusion object associated with an output.</p> + <p>An output is a stream in an Advanced Systems Format ({{ASF}}) data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p><p>An {{ASF}} file can contain multiple mutually exclusive relationships, such as a file with both language based and bit-rate based mutual exclusion. If an output is involved in multiple mutually exclusive relationships, a record from each must be selected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to set a stream.</p> </dd> + + + <dd> <p>Index of the mutual exclusion for which to select.</p> </dd> + + + <dd> <p>Record of the specified mutual exclusion to select.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers that apply to a bandwidth step. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for {{MBR}} content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bandwidth step number for which to retrieve information. Set this value to a number between 0, and 1 less than the number of bandwidth steps returned by <strong>{{IMFASFStreamSelector::GetBandwidthStepCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the bit rate associated with the bandwidth step.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + <dd> <p>Address of an array that receives the selection status of each stream, as an <strong>{{ASF_SELECTION_STATUS}}</strong> value. The members of this array correspond to the members of the <em>rgwStreamNumbers</em> array by index. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + + + <p> </p><p>Retrieves the index of a bandwidth step that is appropriate for a specified bit rate. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>In a streaming multiple bit rate ({{MBR}}) scenario, call this method with the current data rate of the network connection to determine the correct step to use. You can also call this method periodically throughout streaming to ensure that the best step is used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The bit rate to find a bandwidth step for.</p> </dd> + + + <dd> <p>Receives the step number. Use this number to retrieve information about the step by calling <strong>{{IMFASFStreamSelector::GetBandwidthStep}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets options for the stream selector.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_STREAMSELECTOR_FLAGS}}</strong> enumeration specifying the options to use.</p> </dd> + + + + + <p>Configures Windows Media Digital Rights Management ({{DRM}}) for Network Devices on a network sink.</p><p> The Advanced Systems Format ({{ASF}}) streaming media sink exposes this interface. To get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface, perform the following tasks.</p><ol> <li>Get the activation object for the {{ASF}} streaming media sink by calling <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>.</li> <li>Create the media sink by calling the activation object <strong>ActivateObject</strong> method.</li> <li>Get an <strong>{{IMFDRMNetHelper}}</strong> reference by calling <strong>QueryInterface</strong> on the media sink.</li> </ol><p>For more information, see Remarks.</p> + <p>To stream protected content over a network, the <em>{{ASF}} streaming media sink</em> provides an output trust authority ({{OTA}}) that supports Windows Media {{DRM}} for Network Devices and implements the <strong>{{IMFDRMNetHelper}}</strong> interface. For this {{OTA}}, encryption occurs on each frame before multiplexing. The license request and response process takes place in the media sink.</p><p>The application gets a reference to <strong>{{IMFDRMNetHelper}}</strong> and uses the methods to handle the license request and response. The application is also responsible for sending the license to the client.</p><p>To stream the content, the application does the following:</p><ol> <li>Provide the {{HTTP}} byte stream to which the media sink writes the streamed content. <p>To stream {{DRM}}-protected content over a network from a server to a client, an application must use the Microsoft Media Foundation Protected Media Path ({{PMP}}). The media sink and the application-provided {{HTTP}} byte stream exist in mfpmp.exe. Therefore, the byte stream must expose the <strong>{{IMFActivate}}</strong> interface so that it can be created out-of-process.</p><strong>Note</strong>??This might affect how the code is packaged. The {{DLL}} that contains the {{HTTP}} byte stream and other dependent {{DLLs}} must be signed for the Protected Environment ({{PE}}-signed). ? </li> <li>Set the <strong>{{MFPKEY_ASFMEDIASINK_DRMACTION}}</strong> property to <strong>{{MFSINK_WMDRMACTION_TRANSCRYPT}}</strong>. The media sink's property store is available to the application through the {{ASF}} ContentInfo. To get the property store, call <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>.</li> <li>Get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface by querying the media sink.</li> <li>To make a license request, call <strong>{{IMFDRMNetHelper::ProcessLicenseRequest}}</strong>. This method calls into the {{OTA}} implementation and retrieves the license.<p>When the clock starts for the first time or restarts , the encrypter that is used for encrypting samples is retrieved, and the license response is cached.</p> </li> <li>To get the cached license response, call <strong>{{IMFDRMNetHelper::GetChainedLicenseResponse}}</strong>.</li> </ol> + + + + <p>Gets the license response for the specified request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. +</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte array that contains the license request.</p> </dd> + + + <dd> <p>Size, in bytes, of the license request.</p> </dd> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + <dd> <p>Receives the key identifier. The caller must release the string by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Not implemented in this release.</p> + <p>The method returns <strong>{{E_NOTIMPL}}</strong>.</p> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Header Object object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an {{ASF}} profile object from a presentation descriptor.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor that contains the profile information.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor from an {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface of the {{ASF}} profile object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Splitter.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} Multiplexer.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMultiplexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Indexer object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFIndexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a byte stream to access the index in an {{ASF}} stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table:</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The call succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The offset specified in <em>cbIndexStartOffset</em> is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream that contains the {{ASF}} stream.</p> </dd> + + + <dd> <p>Byte offset of the index within the {{ASF}} stream. To get this value, call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. Use this interface to read from the index or write to the index. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} stream selector.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamSelector}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream that will be used to write the {{ASF}} stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an activation object that can be used to create the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string that contains the output file name.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFASFContentInfo}}</strong> interface of an initialized {{ASF}} Header Object object. Use this interface to configure the {{ASF}} media sink.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Video ({{WMV}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Audio ({{WMA}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. </p> + <p>To create the {{ASF}} streaming sink in another process, call <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>. </p><p>An application can get a reference to the {{ASF}} ContentInfo Object by calling <strong>{{IUnknown::QueryInterface}}</strong> on the media sink object received in the <em>ppIMediaSink</em> parameter. The ContentInfo object is used to set the encoder configuration settings, provide stream properties supplied by an {{ASF}} profile, and add metadata information. These configuration settings populate the various {{ASF}} header objects of the encoded {{ASF}} file. For more information, see +Setting Properties in the ContentInfo Object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a byte stream object in which the {{ASF}} media sink writes the streamed content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{ASF}} streaming-media sink object. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> on the received reference. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. The activation object can be used to create the {{ASF}} streaming sink in another process.</p> + <p>Starting in Windows?7, Media Foundation provides an {{ASF}} streaming sink that writes the content in a live streaming scenario. This function should be used in secure transcode scenarios where this media sink needs to be created and configured in the remote +process. Like the {{ASF}} file sink, the new media sink performs {{ASF}} related tasks such as writing the {{ASF}} header, generating data packets (muxing). The content is written to a caller-implemented byte stream such as an {{HTTP}} byte stream. +The caller must also provide an activation object that media sink can use to create the byte stream remotely. </p><p>In addition, it performs transcryption for streaming protected content. It hosts the Windows Media Digital Rights Management ({{DRM}}) for Network Devices Output Trust Authority ({{OTA}}) that handles the license request and response. For more information, see <strong>{{IMFDRMNetHelper}}</strong> interface.</p><p>The new media sink does not perform any time adjustments. If the clock seeks, the timestamps are not changed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream object. The byte stream exposes the <strong>{{IMFByteStream}}</strong> interface. The {{ASF}} streaming sink will write data to this byte stream.</p> </dd> + + + <dd> <p>A reference to an {{ASF}} ContentInfo Object that contains the properties that describe the {{ASF}} content. These settings can contain stream settings, encoding properties, and metadata. For more information about these properties, see Setting Properties in the ContentInfo Object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface of the activation object that is used to create the {{ASF}} streaming-media sink. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> by using the received reference. The <strong>ActivateObject</strong> method also calls <strong>{{IMFActivate::Activate}}</strong> on the byte stream activate object specified by <em>pByteStreamActivate</em>, to create it so that the media sink can write streamed content in the byte stream. The caller must release the <strong>{{IMFActivate}}</strong> interface reference of the media sink activation object received in <em>ppIActivate</em>.</p> </dd> + + + + + <p>Specifies the type of work queue for the <strong>{{MFAllocateWorkQueueEx}}</strong> function to create.</p> + + + + <p> Specifies the status of a topology during playback. </p> + <p> This enumeration is used with the {{MESessionTopologyStatus}} event. The {{MESessionTopologyStatus}} event always has an <strong>{{MF_EVENT_TOPOLOGY_STATUS}}</strong> attribute whose value is a member of this enumeration. </p><p> For a single topology, the Media Session sends these status flags in numerical order, starting with <strong>{{MF_TOPOSTATUS_READY}}</strong>. However, there is no guarantee about the ordering of the events across two different topologies. For example, you might get <strong>{{MF_TOPOSTATUS_READY}}</strong> for a topology before you get <strong>{{MF_TOPOSTATUS_ENDED}}</strong> for the previous topology. </p> + + + <dd> <p> This value is not used. </p> </dd> + + + <dd> <p> The topology is ready to start. After this status flag is received, you can use the Media Session's <strong>{{IMFGetService::GetService}}</strong> method to query the topology for services, such as rate control. </p> </dd> + + + <dd> <p> The Media Session has started to read data from the media sources in the topology. </p> </dd> + + + <dd> <p>The Media Session modified the topology, because the format of a stream changed.</p> </dd> + + + <dd> <p> The media sinks have switched from the previous topology to this topology. This status value is not sent for the first topology that is played. For the first topology, the {{MESessionStarted}} event indicates that the media sinks have started receiving data. </p> </dd> + + + <dd> <p> Playback of this topology is complete. The Media Session might still use the topology internally. The Media Session does not completely release the topology until it sends the next <strong>{{MF_TOPOSTATUS_STARTED_SOURCE}}</strong> status event or the {{MESessionEnded}} event. </p> </dd> + + + + + <p>Contains flags for registering and enumeration Media Foundation transforms ({{MFTs}}).</p><p>These flags are used in the following functions:</p><ul> <li> <strong>{{MFTEnumEx}}</strong>: These flags control which Media Foundation transforms ({{MFTs}}) are enumerated, as well as the enumeration order.</li> <li> <strong>{{MFTRegister}}</strong>: A subset of these flags are used when registering an {{MFT}}.</li> </ul> + <p>For registration, these flags describe the {{MFT}} that is being registered. Some flags do not apply in that context. For enumeration, these flags control which {{MFTs}} are selected in the enumeration. For more details about the precise meaning of these flags, see the reference topics for <strong>{{MFTRegister}}</strong> and <strong>{{MFTEnumEx}}</strong> </p><p>For registration, the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>, <strong>{{MFT_ENUM_FLAG_ASYNCMFT}}</strong>, and <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flags are mutually exclusive. For enumeration, these three flags can be combined.</p> + + + + <p>Describes the type of data provided by a frame source.</p> + <p>The values of this enumeration are used with the {{MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPES}} attribute.</p> + + + <dd> <p>The frame source provides color data.</p> </dd> + + + <dd> <p>The frame source provides infrared data.</p> </dd> + + + <dd> <p>The frame source provides depth data.</p> </dd> + + + <dd> <p>The frame source provides custom data.</p> </dd> + + + + + <p>Specifies how 3D video frames are stored in memory.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_3D_FORMAT}} attribute.</p> + + + <dd> <p>The base view is stored in a single buffer. The other view is discarded.</p> </dd> + + + <dd> <p>Each media sample contains multiple buffers, one for each view.</p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed side-by-side into a single frame. </p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed top-and-bottom into a single frame. </p> </dd> + + + + + <p>Specifies how a 3D video frame is stored in a media sample.</p> + <p>This enumeration is used with the {{MFSampleExtension_3DVideo_SampleFormat}} attribute.</p><p>The exact layout of the views in memory is specified by the following media type attributes:</p><ul> <li> {{MF_MT_VIDEO_3D_FORMAT}} </li> <li> {{MF_MT_VIDEO_3D_FIRST_IS_LEFT}} </li> <li> {{MF_MT_VIDEO_3D_LEFT_IS_BASE}} </li> <li> {{MF_MT_VIDEO_3D_NUM_VIEWS}} </li> </ul> + + + <dd> <p>Each view is stored in a separate buffer. The sample contains one buffer per view.</p> </dd> + + + <dd> <p>All of the views are stored in the same buffer. The sample contains a single buffer. </p> </dd> + + + + + <p>Describes the rotation of the video image in the counter-clockwise direction.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_ROTATION}} attribute.</p> + + + <dd> <p>The image is not rotated.</p> </dd> + + + <dd> <p>The image is rotated 90 degrees counter-clockwise.</p> </dd> + + + <dd> <p>The image is rotated 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated 270 degrees counter-clockwise.</p> </dd> + + + + + + + + <p>Specifies the type of copy protection required for a video stream. </p> + <p>Use these flags with the <strong>{{MF_MT_DRM_FLAGS}}</strong> attribute.</p> + + + <dd> <p>No copy protection is required. </p> </dd> + + + <dd> <p>Analog copy protection should be applied. </p> </dd> + + + <dd> <p>Digital copy protection should be applied. </p> </dd> + + + + + <p> </p><p>Specifies whether to pad a video image so that it fits within a specified aspect ratio.</p> + <p>Use these flags with the <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> attribute.</p> + + + <dd> <p>Do not pad the image.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 4?3 area.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 16?9 area.</p> </dd> + + + + + <p> </p><p>Describes the intended aspect ratio for a video stream.</p> + <p>Use these flags with the <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> attribute.</p> + + + <dd> <p>The aspect ratio is unknown.</p> </dd> + + + <dd> <p>The source is 16?9 content encoded within a 4?3 area.</p> </dd> + + + <dd> <p>The source is 2.35:1 content encoded within a 16?9 or 4?3 area.</p> </dd> + + + + + <p> </p><p>Contains flags that specify how to convert an audio media type.</p> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEX}}</strong> structure if possible, or a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure otherwise.</p> </dd> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> </dd> + + + + + + + + <p>Provides information on a screen-to-screen move and a dirty rectangle copy operation.</p> + + + <dd> <p>A <strong>{{POINT}}</strong> structure that describes the source (<em>x, y</em>) point where the source rectangle is copied from.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure that contains the destination rectangle where the dirty rectangle is copied to.</p> </dd> + + + + + + + + + + + <p>Defines a regions of interest. </p> + + + <dd> <p>The bounds of the region.</p> </dd> + + + <dd> <p>Specifies the quantization parameter delta for the specified region from the rest of the frame.</p> </dd> + + + + + <p>The <strong>FaceRectInfoBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceRectInfo</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceRectInfo</strong> structures in the blob.</p> </dd> + + + + + <p>The <strong>FaceRectInfo</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute contains the face rectangle info detected by the driver. By default driver\{{MFT0}} should provide the face information on preview stream. If the driver advertises the capability on other streams, driver\{{MFT}} must provide the face info on the corresponding streams if the application enables face detection on those streams. When video stabilization is enabled on the driver, the face information should be provided post-video stabilization. The dominate face must be the first <strong>FaceRectInfo</strong> in the blob.</p><p>The <strong>FaceRectInfoBlobHeader</strong> and <strong>FaceRectInfo</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute. The metadata item structure for face {{ROIs}} (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face {{ROIs}} metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Relative coordinates on the frame that face detection is running ({{Q31}} format).</p> </dd> + + + <dd> <p>Confidence level of the region being a face (0 - 100).</p> </dd> + + + + + <p>The <strong>FaceCharacterizationBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceCharacterization</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceCharacterization</strong> structures in the blob. Must match the number of <strong>FaceRectInfo</strong> structures in <strong>FaceRectInfoBlobHeader</strong>.</p> </dd> + + + + + <p>The <strong>FaceCharacterization</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute contains the blink and facial expression state for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that does not support blink or facial expression detection, this attribute should be omitted.</p><p>The facial expressions that can be detected are defined as follows:</p><pre>#define {{MF_METADATAFACIALEXPRESSION_SMILE}} 0x00000001</pre><p>The <strong>FaceCharacterizationBlobHeader</strong> and <strong>FaceCharacterization</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute. The metadata item structure for the face characterizations (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face characterizations metadata payload) is up to driver and must be 8-byte aligned. </p> + + + <dd> <p>0 indicates no blink for the left eye, 100 indicates definite blink for the left eye (0 - 100).</p> </dd> + + + <dd> <p>0 indicates no blink for the right eye, 100 indicates definite blink for the right eye (0 - 100).</p> </dd> + + + <dd> <p>A defined facial expression value.</p> </dd> + + + <dd> <p>0 indicates no such facial expression as identified, 100 indicates definite such facial expression as defined (0 - 100).</p> </dd> + + + + + <p>This structure contains blob information for the {{EV}} compensation feedback for the photo captured.</p> + + + <dd> <p>A {{KSCAMERA_EXTENDEDPROP_EVCOMP_XXX}} step flag.</p> </dd> + + + <dd> <p>The {{EV}} compensation value in units of the step specified.</p> </dd> + + + + + <p>The CapturedMetadataISOGains structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong>.</p> + <p>The <strong>CapturedMetadataISOGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong> attribute. The metadata item structure for {{ISO}} gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + {{ISO}} gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>This structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. </p> + <p>The <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute contains the white balance gains applied to R, G, B by the sensor or {{ISP}} when the preview frame was captured. This is a unitless.</p><p>The <strong>CapturedMetadataWhiteBalanceGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. The metadata item structure for white balance gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + white balance gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>The <strong>R</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>G</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>B</strong> value of the blob.</p> </dd> + + + + + <p>The <strong>MetadataTimeStamps</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute contains the time stamp information for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that cannot provide the time stamp for face {{ROIs}}, this attribute should be omitted.</p><p>For the <strong>Flags</strong> field, the following bit flags indicate which time stamp is valid:</p><pre>#define {{MF_METADATATIMESTAMPS_DEVICE}} 0x00000001 +#define {{MF_METADATATIMESTAMPS_PRESENTATION}} 0x00000002</pre><p>{{MFT0}} must set <strong>Flags</strong> to <strong>{{MF_METADATATIEMSTAMPS_DEVICE}}</strong> and the appropriate {{QPC}} time for <strong>Device</strong>, if the driver provides the timestamp metadata for the face {{ROIs}}.</p><p>The <strong>MetadataTimeStamps</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute. The metadata item structure for timestamp (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + timestamp metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Bitwise {{OR}} of the <strong>{{MF_METADATATIMESTAMPS_}}*</strong> flags.</p> </dd> + + + <dd> <p>{{QPC}} time for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + <dd> <p>{{PTS}} for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + + + <p>The <strong>HistogramGrid</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + + + <dd> <p>Width of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Height of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Absolute coordinates of the region on the sensor output that the histogram is collected for.</p> </dd> + + + + + <p>The <strong>HistogramBlobHeader</strong> structure describes the blob size and the number of histograms in the blob for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute.</p> + + + <dd> <p>Size of the entire histogram blob in bytes.</p> </dd> + + + <dd> <p>Number of histograms in the blob. Each histogram is identified by a <strong>HistogramHeader</strong>.</p> </dd> + + + + + <p>The <strong>HistogramHeader</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute contains a histogram when a preview frame is captured.</p><p>For the <strong>ChannelMasks</strong> field, the following bitmasks indicate the available channels in the histogram:</p><pre>#define {{MF_HISTOGRAM_CHANNEL_Y}} 0x00000001 +#define {{MF_HISTOGRAM_CHANNEL_R}} 0x00000002 +#define {{MF_HISTOGRAM_CHANNEL_G}} 0x00000004 +#define {{MF_HISTOGRAM_CHANNEL_B}} 0x00000008 +#define {{MF_HISTOGRAM_CHANNEL_Cb}} 0x00000010 +#define {{MF_HISTOGRAM_CHANNEL_Cr}} 0x00000020</pre><p>Each blob can contain multiple histograms collected from different regions or different color spaces of the same frame. Each histogram in the blob is identified by its own <strong>HistogramHeader</strong>. Each histogram has its own region and sensor output size associated. For full frame histogram, the region will match the sensor output size specified in <strong>HistogramGrid</strong>.</p><p>Histogram data for all available channels are grouped under one histogram. Histogram data for each channel is identified by a <strong>HistogramDataHeader</strong> immediate above the data. <strong>ChannelMasks</strong> indicate how many and what channels are having the histogram data, which is the bitwise {{OR}} of the supported <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks as defined above. <strong>ChannelMask</strong> indicates what channel the data is for, which is identified by any one of the <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks.</p><p>Histogram data is an array of <strong>{{ULONG}}</strong> with each entry representing the number of pixels falling under a set of tonal values as categorized by the bin. The data in the array should start from bin 0 to bin N-1, where N is the number of bins in the histogram, for example, <strong>HistogramBlobHeader.Bins</strong>.</p><p>For Windows?10, if <strong>{{KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM}}</strong> is supported, at minimum a full frame histogram with Y channel must be provided which should be the first histogram in the histogram blob. +Note that <strong>HistogramBlobHeader</strong>, <strong>HistogramHeader</strong>, <strong>HistogramDataHeader</strong> and Histogram data only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. The metadata item structure for the histogram (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + all histogram metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Size of this header + (<strong>HistogramDataHeader</strong> + histogram data following) * number of channels available.</p> </dd> + + + <dd> <p>Number of bins in the histogram.</p> </dd> + + + <dd> <p>Color space that the histogram is collected from</p> </dd> + + + <dd> <p>Masks of the color channels that the histogram is collected for.</p> </dd> + + + <dd> <p>Grid that the histogram is collected from.</p> </dd> + + + + + <p>The <strong>HistogramDataHeader</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. </p> + + + <dd> <p>Size in bytes of this header + all following histogram data.</p> </dd> + + + <dd> <p>Mask of the color channel for the histogram data.</p> </dd> + + + <dd> <p>1 if linear, 0 if nonlinear.</p> </dd> + + + + + <p> </p><p>Contains coefficients used to transform multichannel audio into a smaller number of audio channels. This process is called <em>fold-down</em>.</p> + <p>To specify this information in the media type, set the <strong>{{MF_MT_AUDIO_FOLDDOWN_MATRIX}}</strong> attribute.</p><p>The {{ASF}} media source supports fold-down from six channels (5.1 audio) to two channels (stereo). It gets the information from the g_wszFold6To2Channels3 attribute in the {{ASF}} header. This attribute is documented in the Windows Media Format {{SDK}} documentation.</p> + + + <dd> <p>Size of the structure, in bytes.</p> </dd> + + + <dd> <p>Number of source channels.</p> </dd> + + + <dd> <p>Number of destination channels.</p> </dd> + + + <dd> <p>Specifies the assignment of audio channels to speaker positions in the transformed audio. This member is a bitwise <strong>{{OR}}</strong> of flags that define the speaker positions. For a list of valid flags, see <strong>{{MF_MT_AUDIO_CHANNEL_MASK}}</strong> attribute.</p> </dd> + + + <dd> <p>Array that contains the fold-down coefficients. The number of coefficients is <strong>cSrcChannels</strong>?<strong>cDstChannels</strong>. If the number of coefficients is less than the size of the array, the remaining elements in the array are ignored. For more information about how the coefficients are applied, see Windows Media Audio Professional Codec Features.</p> </dd> + + + + + <p> </p><p>Defines custom color primaries for a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This structure is used with the <strong>{{MF_MT_CUSTOM_VIDEO_PRIMARIES}}</strong> attribute.</p> + + + <dd> <p>Red x-coordinate.</p> </dd> + + + <dd> <p>Red y-coordinate.</p> </dd> + + + <dd> <p>Green x-coordinate.</p> </dd> + + + <dd> <p>Green y-coordinate.</p> </dd> + + + <dd> <p>Blue x-coordinate.</p> </dd> + + + <dd> <p>Blue y-coordinate.</p> </dd> + + + <dd> <p>White point x-coordinate.</p> </dd> + + + <dd> <p>White point y-coordinate.</p> </dd> + + + + + <p>Contains format data for a binary stream in an Advanced Streaming Format ({{ASF}}) file.</p> + <p>This structure is used with the {{MF_MT_ARBITRARY_HEADER}} media type attribute.</p><p>This structure corresponds to the first 60 bytes of the Type-Specific Data field of the Stream Properties Object, in files where the stream type is {{ASF_Binary_Media}}. For more information, see the {{ASF}} specification.</p><p>The Format Data field of the Type-Specific Data field is contained in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type.</p> + + + <dd> <p>Major media type. This value is the {{GUID}} stored in the Major Media Type field of the Type-Specific Data field of the {{ASF}} file. It might not match the major type {{GUID}} from the Media Foundation media type. </p> </dd> + + + <dd> <p>Media subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples have a fixed size in bytes. Otherwise, samples have variable size.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the data in this stream uses temporal compression. Otherwise, samples are independent of each other.</p> </dd> + + + <dd> <p>If <strong>bFixedSizeSamples</strong> is <strong>{{TRUE}}</strong>, this member specifies the sample size in bytes. Otherwise, the value is ignored and should be 0.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This {{GUID}} identifies the structure of the additional format data, which is stored in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type. If no additional format data is present, <strong>formattype</strong> equals {{GUID_NULL}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with two components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with three components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A four dimensional vector, used to represent a rotation.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + <dd> <p>W component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A transform describing the location of a camera relative to other cameras or an established external reference.</p> + <p>The <strong>Position</strong> value should be expressed in real-world coordinates in units of meters. The coordinate system of both position and orientation should be right-handed Cartesian as shown in the following diagram. </p><strong>Important</strong>??<p>The position and orientation are expressed as transforms toward the reference frame or origin. For example, a <strong>Position</strong> value of {-5, 0, 0} means that the origin is 5 meters to the left of the sensor, and therefore the sensor is 5 meters to the right of the origin. A sensor that is positioned 2 meters above the origin should specify a <strong>Position</strong> of {0, -2, 0} because that is the translation from the sensor to the origin.</p> <p>If the sensor is aligned with the origin, the rotation is the identity quaternion and the forward vector is along the -Z axis {0, 0, -1}. If the sensor is rotated +30 degrees around the Y axis from the origin, then the <strong>Orientation</strong> value should be a rotation of -30 degrees around the Y axis, because it represents the rotation from the sensor to the origin.</p>? + + + <dd> <p>A reference {{GUID}} identifying the calibration process for the data, allowing different consumers to identify calibration data from the same process.</p> </dd> + + + <dd> <p>The transform position.</p> </dd> + + + <dd> <p>The transform rotation.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes the location of a camera relative to other cameras or an established external reference. </p> + + + <dd> <p>The number of transforms in the <em>CalibratedTransforms</em> array.</p> </dd> + + + <dd> <p>The array of transforms in the extrinsic data.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera model. </p> + <p>For square pixels, the X and Y fields of the <strong>FocalLength</strong> should be the same.</p><p>The <strong>PrincipalPoint</strong> field is expressed in pixels, not in normalized coordinates. The origin [0,0] is the bottom, left corner of the image.</p> + + + <dd> <p>The focal length of the camera.</p> </dd> + + + <dd> <p>The principal point of the camera.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a polynomial lens distortion model.</p> + + + <dd> <p>The first radial distortion coefficient.</p> </dd> + + + <dd> <p>The second radial distortion coefficient.</p> </dd> + + + <dd> <p>The third radial distortion coefficient.</p> </dd> + + + <dd> <p>The first tangential distortion coefficient.</p> </dd> + + + <dd> <p>The second tangential distortion coefficient.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera intrinsic model for a specified resolution.</p> + + + <dd> <p>The width for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p>The height for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p> The pinhole camera model.</p> </dd> + + + <dd> <p> The lens distortion model.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Contains zero or 1 pinhole camera intrinsic models that describe how to project a 3D point in physical world onto the 2D image frame of a camera.</p> + + + <dd> <p>The number of camera intrinsic models in the <em>IntrinsicModels</em> array.</p> </dd> + + + <dd> <p>The array of camera intrinsic models in the intrinsic data.</p> </dd> + + + + + <p> Contains data that is needed to implement the <strong>{{IMFAsyncResult}}</strong> interface. </p> + <p> Any custom implementation of the <strong>{{IMFAsyncResult}}</strong> interface must inherit this structure. For more information, see Custom Asynchronous Result Objects. </p> + + + + <p>Initializes Microsoft Media Foundation.</p> + <p> An application must call this function before using Media Foundation. Before your application quits, call <strong>{{MFShutdown}}</strong> once for every previous call to <strong>{{MFStartup}}</strong>. </p><p> Do not call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> from work queue threads. For more information about work queues, see Work Queues. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BAD_STARTUP_VERSION}}</strong></dt> </dl> </td><td> <p> The <em>Version</em> parameter requires a newer version of Media Foundation than the version that is running.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DISABLED_IN_SAFEMODE}}</strong></dt> </dl> </td><td> <p> The Media Foundation platform is disabled because the system was started in "Safe Mode" (fail-safe boot). </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Media Foundation is not implemented on the system. This error can occur if the media components are not present (See {{KB2703761}} for more info). </p> </td></tr> </table><p>?</p> + + + <dd> <p>Version number. Use the value <strong>{{MF_VERSION}}</strong>, defined in mfapi.h.</p> </dd> + + + <dd> <p>This parameter is optional when using C++ but required in C. The value must be one of the following flags: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>{{MFSTARTUP_NOSOCKET}}</dt> </dl> </td><td> <p> Do not initialize the sockets library. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_LITE}}</dt> </dl> </td><td> <p> Equivalent to {{MFSTARTUP_NOSOCKET}}. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_FULL}}</dt> </dl> </td><td> <p> Initialize the entire Media Foundation platform. This is the default value when <em>dwFlags</em> is not specified. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Shuts down the Microsoft Media Foundation platform. Call this function once for every call to <strong>{{MFStartup}}</strong>. Do not call this function from work queue threads.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Blocks the <strong>{{MFShutdown}}</strong> function.</p> + <p>This function prevents work queue threads from being shut down when <strong>{{MFShutdown}}</strong> is called. Use this function to ensure that asynchronous operations complete gracefully before the platform shuts down.</p><p>This function holds a lock on the Media Foundation platform. To unlock the platform, call <strong>{{MFUnlockPlatform}}</strong>. The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>The <strong>{{MFShutdown}}</strong> function blocks until the platform is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.) To avoid memory leaks, the application should unlock the platform before the wait period ends. For example, cancel any asynchronous operations that are waiting to complete and are holding a lock on the platform.</p><p>The default implementation of the <strong>{{IMFAsyncResult}}</strong> interface automatically locks the Media Foundation platform when the result object is created. Releasing the interface unlocks the platform. Therefore, in most cases your application does not need to lock the platform directly. For more information, see Work Queues.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the Media Foundation platform after it was locked by a call to the <strong>{{MFLockPlatform}}</strong> function.</p> + <p>The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Puts an asynchronous operation on a work queue.</p> + <p> This function creates an asynchronous result object and puts the result object on the work queue. The work queue calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em>. </p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or {{MFAllocateWorkQueueEx}}. </p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue. </p> + <p> To invoke the work-item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>. </p> </dd> + + + + + <p>Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p> To invoke the work item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p>Queues a work item that waits for an event to be signaled.</p> + <p>This function enables a component to wait for an event without blocking the current thread. </p><p>The function puts a work item on the specified work queue. This work item waits for the event given in <em>hEvent</em> to be signaled. When the event is signaled, the work item invokes a callback. (The callback is contained in the result object given in <em>pResult</em>. For more information, see <strong>{{MFCreateAsyncResult}}</strong>).</p><p>The work item is dispatched on a work queue by the <strong>{{IMFAsyncCallback::GetParameters}}</strong> method of the callback. The work queue can be any of the following:</p><ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>).</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>).</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul><p>Do not use any of the following work queues: <strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_RT}}</strong>, or <strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to an event object. To create an event object, call <strong>CreateEvent</strong> or <strong>CreateEventEx</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the wait. To cancel the wait, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Creates a work queue that is guaranteed to serialize work items. The serial work queue wraps an existing multithreaded work queue. The serial work queue enforces a first-in, first-out ({{FIFO}}) execution order.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>Multithreaded queues use a thread pool, which can reduce the total number of threads in the pipeline. However, they do not serialize work items. A serial work queue enables the application to get the benefits of the thread pool, without needing to perform manual serialization of its own work items.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of an existing work queue. This must be either a multithreaded queue or another serial work queue. Any of the following can be used:</p> <ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>)</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>)</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul> </dd> + + + <dd> <p>Receives an identifier for the new serial work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>When the timer interval elapses, the timer calls <strong>{{MFInvokeCallback}}</strong> with the <em>pResult</em> reference to invoke the asynchronous callback. The callback is specified when you create the result object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>This function creates an asynchronous result object. When the timer interval elapses, the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> Attempts to cancel an asynchronous operation that was scheduled with <strong>{{MFScheduleWorkItem}}</strong> or <strong>{{MFScheduleWorkItemEx}}</strong>.</p> + <p>Because work items are asynchronous, the work-item callback might still be invoked after <strong>{{MFCancelWorkItem}}</strong> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves the timer interval for the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets a callback function to be called at a fixed interval.</p> + <p>To get the timer interval for the periodic callback, call <strong>{{MFGetTimerPeriodicity}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the callback function, of type <strong>{{MFPERIODICCALLBACK}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a caller-provided object that implements <strong>{{IUnknown}}</strong>, or <strong>{{NULL}}</strong>. This parameter is passed to the callback function.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the callback. To cancel the callback, call <strong>{{MFRemovePeriodicCallback}}</strong> and pass this key as the <em>dwKey</em> parameter.</p> </dd> + + + + + <p> </p><p>Cancels a callback function that was set by the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The callback is dispatched on another thread, and this function does not attempt to synchronize with the callback thread. Therefore, it is possible for the callback to be invoked after this function returns.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new work queue. This function extends the capabilities of the <strong>{{MFAllocateWorkQueue}}</strong> function by making it possible to create a work queue that has a message loop.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>The <strong>{{MFAllocateWorkQueue}}</strong> function is equivalent to calling <strong>{{MFAllocateWorkQueueEx}}</strong> with the value {{MF_STANDARD_WORKQUEUE}} for the <em>WorkQueueType</em> parameter.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The application exceeded the maximum number of work queues.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p> Creates a new work queue.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an identifier for the work queue.</p> </dd> + + + + + <p> Locks a work queue.</p> + <p>This function prevents the <strong>{{MFShutdown}}</strong> function from shutting down the work queue. Use this function to ensure that asynchronous operations on the work queue complete gracefully before the platform shuts down. The <strong>{{MFShutdown}}</strong> function blocks until the work queue is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.)</p><p>Call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue. Each call to <strong>{{MFLockWorkQueue}}</strong> must be matched by a corresponding call to <strong>{{MFUnlockWorkQueue}}</strong>.</p><p> </p><strong>Note</strong>??The <strong>{{MFAllocateWorkQueue}}</strong> function implicitly locks the work queue that it creates.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier for the work queue. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. </p> </dd> + + + + + <p> </p><p>Unlocks a work queue.</p> + <p>The application must call <strong>{{MFUnlockWorkQueue}}</strong> once for every call to <strong>{{MFAllocateWorkQueue}}</strong> and then once for every call to <strong>{{MFLockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue to be unlocked. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task.For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function extends the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function by adding the <em>lPriority</em> parameter.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request. </p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task. For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>The base relative priority for the work-queue threads. For more information, see <strong>AvSetMmThreadPriority</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function unregisters a work queue that was associated with an {{MMCSS}} class through the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndUnregisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class currently associated with this work queue.</p> + <p>If the work queue is not associated with an {{MMCSS}} task, the function retrieves an empty string.</p><p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the task name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier currently associated with this work queue.</p> + <p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Registers the standard Microsoft Media Foundation platform work queues with the Multimedia Class Scheduler Service ({{MMCSS}}). +</p> + <p>To unregister the platform work queues from the {{MMCSS}} class, call <strong>{{MFUnregisterPlatformFromMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}}, or use the value zero to create a new task group. On output, receives the actual task group {{ID}}.</p> </dd> + + + <dd> <p>The base priority of the work-queue threads. </p> </dd> + + + + + <p>Unregisters the Microsoft Media Foundation platform work queues from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains and locks a shared work queue.</p> + <p>A <em>multithreaded work queue</em> uses a thread pool to dispatch work items. Whenever a thread becomes available, it dequeues the next work item from the queue. Work items are dequeued in first-in-first-out order, but work items are not serialized. In other words, the work queue does not wait for a work item to complete before it starts the next work item. </p><p>Within a single process, the Microsoft Media Foundation platform creates up to one multithreaded queue for each Multimedia Class Scheduler Service ({{MMCSS}}) task. The <strong>{{MFLockSharedWorkQueue}}</strong> function checks whether a matching work queue already exists. If not, the function creates a new work queue and registers the work queue with {{MMCSS}}. The function returns the {{MMCSS}} task identifier (<em>pdwTaskId</em>) and the work queue identifier (<em>pID</em>). To queue a work item, pass the work queue identifier to any of the following functions: </p><ul> <li> <strong>{{MFPutWorkItem}}</strong> </li> <li> <strong>{{MFPutWorkItem2}}</strong> </li> <li> <strong>{{MFPutWorkItemEx}}</strong> </li> <li> <strong>{{MFPutWorkItemEx2}}</strong> </li> </ul><p>The <strong>{{MFLockSharedWorkQueue}}</strong> function also locks the queue. Before the process exits, call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue.</p><p>If the regular priority queue is being used (<em>wszClass</em>=""), then {{NULL}} must be passed in to <em>pdwTaskId</em> and the value 0 must be passed into <em>BasePriority</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The base priority of the work-queue threads. If the regular-priority queue is being used (<em>wszClass</em>=""), then the value 0 must be passed in.</p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}} , or use the value zero to create a new task group. If the regular priority queue is being used (<em>wszClass</em>=""), then <strong>{{NULL}}</strong> must be passed in. On output, receives the actual task group {{ID}}. </p> </dd> + + + <dd> <p>Receives an identifier for the new work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p>Gets the relative thread priority of a work queue.</p> + <p>This function returns the relative thread priority set by the <strong>{{MFBeginRegisterWorkQueueWithMMCSSEx}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Receives the relative thread priority.</p> </dd> + + + + + <p> </p><p>Creates an asynchronous result object. Use this function if you are implementing an asynchronous method.</p> + <p>To invoke the callback specified in <em>pCallback</em>, call the <strong>{{MFInvokeCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object stored in the asynchronous result. This reference is returned by the <strong>{{IMFAsyncResult::GetObject}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is implemented by the caller of the asynchronous method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object. This value is provided by the caller of the asynchronous method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAsyncResult}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Invokes a callback method to complete an asynchronous operation. </p> + <p> If you are implementing an asynchronous method, use this function to invoke the caller's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>The callback is invoked from a Media Foundation work queue. For more information, see Writing an Asynchronous Method.</p><p>The <strong>{{MFShutdown}}</strong> function shuts down the work queue threads, so the callback is not guaranteed to be invoked after <strong>{{MFShutdown}}</strong> is called.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The <strong>{{MFShutdown}}</strong> function was called to shut down the Media Foundation platform.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. To create this object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p> Creates a byte stream from a file. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to a null-terminated string that contains the file name. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> Creates a byte stream that is backed by a temporary local file. </p> + <p> This function creates a file in the system temporary folder, and then returns a byte stream object for that file. The full path name of the file is storted in the <strong>{{MF_BYTESTREAM_ORIGIN_NAME}}</strong> attribute. The file is created with the <strong>{{FILE_FLAG_DELETE_ON_CLOSE}}</strong> flag, and is deleted after the byte stream is released.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a byte stream from a file.</p> + <p>When the request is completed, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. The callback object should then call the <strong>{{MFEndCreateFile}}</strong> function to get a reference to the byte stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a null-terminated string containing the file name.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{MFCancelCreateFile}}</strong> function. The caller must release the interface. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a byte stream from a file.</p> + <p>Call this function when the <strong>{{MFBeginCreateFile}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels an asynchronous request to create a byte stream from a file.</p> + <p>You can use this function to cancel a previous call to <strong>{{MFBeginCreateFile}}</strong>. Because that function is asynchronous, however, it might complete before the operation can be canceled. Therefore, your callback might still be invoked after you call this function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the cancellation object. This reference is received in the <em>ppCancelCookie</em> parameter of the <strong>{{MFBeginCreateFile}}</strong> function.</p> </dd> + + + + + <p> </p><p>Allocates system memory and creates a media buffer to manage it.</p> + <p>The function allocates a buffer with a 1-byte memory alignment. To allocate a buffer that is aligned to a larger memory boundary, call <strong>{{MFCreateAlignedMemoryBuffer}}</strong>.</p><p>When the media buffer object is destroyed, it releases the allocated memory.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer that wraps an existing media buffer. The new media buffer points to the same memory as the original media buffer, or to an offset from the start of the memory.</p> + <p>The maximum size of the wrapper buffer is limited to the size of the valid data in the original buffer. This might be less than the allocated size of the original buffer. To set the size of the valid data, call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The requested offset or the requested length is not valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the original media buffer. </p> </dd> + + + <dd> <p>The start of the new buffer, as an offset in bytes from the start of the original buffer. </p> </dd> + + + <dd> <p>The size of the new buffer. The value of <em>cbOffset</em> + <em>dwLength</em> must be less than or equal to the size of valid data the original buffer. (The size of the valid data is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.) </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Converts a Media Foundation media buffer into a buffer that is compatible with DirectX Media Objects ({{DMOs}}).</p> + <p>The {{DMO}} buffer created by this function also exposes the <strong>{{IMFSample}}</strong> interface. If <em>pIMFSample</em> is <strong>{{NULL}}</strong>, all of the <strong>{{IMFSample}}</strong> methods return {{MF_E_NOT_INITIALIZED}}. Otherwise, they call through to the <em>pIMFSample</em> reference.</p><p>If the Media Foundation buffer specified by <em>pIMFMediaBuffer</em> exposes the <strong>{{IMF2DBuffer}}</strong> interface, the {{DMO}} buffer also exposes <strong>{{IMF2DBuffer}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. The <em>pIMFMediaBuffer</em> parameter must not be <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the sample that contains the Media Foundation buffer. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Offset in bytes from the start of the Media Foundation buffer. This offset defines where the {{DMO}} buffer starts. If this parameter is zero, the {{DMO}} buffer starts at the beginning of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMediaBuffer}}</strong> interface. This interface is documented in the DirectShow {{SDK}} documentation. The caller must release the interface.</p> </dd> + + + + + <p>Converts a Microsoft Direct3D?9 format identifier to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier.</p> + <p>Returns a <strong>{{DXGI_FORMAT}}</strong> value.</p> + + + <dd> <p>The <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code to convert.</p> </dd> + + + + + <p>Converts a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier to a Microsoft Direct3D?9 format identifier.</p> + <p>Returns a <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code.</p> + + + <dd> <p>The <strong>{{DXGI_FORMAT}}</strong> value to convert.</p> </dd> + + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Unlocks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>Call this function after a successful call to the <strong>{{MFLockDXGIDeviceManager}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a media buffer object that manages a Direct3D 9 surface. </p> + <p>This function creates a media buffer object that holds a reference to the Direct3D surface specified in <em>punkSurface</em>. Locking the buffer gives the caller access to the surface memory. When the buffer object is destroyed, it releases the surface. For more information about media buffers, see Media Buffers.</p><strong>Note</strong>??This function does not allocate the Direct3D surface itself.?<p> The buffer object created by this function also exposes the <strong>{{IMF2DBuffer}}</strong> interface. For more information, see DirectX Surface Buffer. </p><p>This function does not support {{DXGI}} surfaces.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifies the type of Direct3D 9 surface. Currently this value must be <strong>{{IID_IDirect3DSurface9}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the DirectX surface. </p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + + + + <p>Creates a media buffer object that manages a Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Set this parameter to <code>__uuidof({{IWICBitmap}})</code>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the bitmap surface. The bitmap surface must be a {{WIC}} bitmap that exposes the <strong>{{IWICBitmap}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer to manage a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>The returned buffer object supports the following interfaces:</p><ul> <li> <strong>{{IMF2DBuffer}}</strong> </li> <li> <strong>{{IMF2DBuffer2}}</strong> </li> <li> <strong>{{IMFDXGIBuffer}}</strong> </li> <li> <strong>{{IMFMediaBuffer}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Identifies the type of {{DXGI}} surface. This value must be <strong>{{IID_ID3D11Texture2D}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} surface. </p> </dd> + + + <dd> <p>The zero-based index of a subresource of the surface. The media buffer object is associated with this subresource.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with Direct3D. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + <p>Creates an object that allocates video samples that are compatible with Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>This function creates an allocator for {{DXGI}} video surfaces. The buffers created by this allocator expose the <strong>{{IMFDXGIBuffer}}</strong> interface. To create an allocator for Microsoft Direct3D?9 video surfaces, call <strong>{{MFCreateVideoSampleAllocator}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorEx}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorEx}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Microsoft Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Allocates system memory with a specified byte alignment and creates a media buffer to manage the memory. </p> + <p> When the media buffer object is destroyed, it releases the allocated memory. </p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p> Specifies the memory alignment for the buffer. Use one of the following constants. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_1_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000000</dt> </dl> </td><td> <p> Align to 1 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_2_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> Align to 2 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_4_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000003</dt> </dl> </td><td> <p> Align to 4 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_8_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000007</dt> </dl> </td><td> <p> Align to 8 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_16_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000000F</dt> </dl> </td><td> <p> Align to 16 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_32_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000001F</dt> </dl> </td><td> <p> Align to 32 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_64_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000003F</dt> </dl> </td><td> <p> Align to 64 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_128_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000007F</dt> </dl> </td><td> <p> Align to 128 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_256_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000000FF</dt> </dl> </td><td> <p> Align to 256 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_512_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000001FF</dt> </dl> </td><td> <p> Align to 512 bytes. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a media event object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The event type. See <strong>{{IMFMediaEvent::GetType}}</strong>. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. See <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. If the event type does not have an extended type, use the value {{GUID_NULL}}.</p> </dd> + + + <dd> <p>The event status. See <strong>{{IMFMediaEvent::GetStatus}}</strong> </p> </dd> + + + <dd> <p>The value associated with the event, if any. See <strong>{{IMFMediaEvent::GetValue}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an event queue.</p> + <p>This function creates a helper object that you can use to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEventQueue}}</strong> interface of the event queue. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty media sample.</p> + <p>Initially the sample does not contain any media buffers.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the media sample. The caller must release the interface.</p> </dd> + + + + + <p> Creates an empty attribute store. </p> + <p>Attributes are used throughout Microsoft Media Foundation to configure objects, describe media formats, query object properties, and other purposes. For more information, see Attributes in Media Foundation.</p><p>For a complete list of all the defined attribute {{GUIDs}} in Media Foundation, see Media Foundation Attributes.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + <dd> <p>The initial number of elements allocated for the attribute store. The attribute store grows as needed. </p> </dd> + + + + + <p> </p><p>Initializes the contents of an attribute store from a byte array.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p><p>This function deletes any attributes that were previously stored in <em>pAttributes</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The buffer is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to the array that contains the initialization data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves the size of the buffer needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>Use this function to find the size of the array that is needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Converts the contents of an attribute store to a byte array.</p> + <p>The function skips any attributes with <strong>{{IUnknown}}</strong> reference values ({{MF_ATTRIBUTE_IUNKNOWN}}); they are not stored in the array.</p><p>To convert the byte array back into an attribute store, call <strong>{{MFInitAttributesFromBlob}}</strong>.</p><p>To write an attribute store to a stream, call the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer given in <em>pBuf</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to an array that receives the attribute data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes. To get the required size of the buffer, call <strong>{{MFGetAttributesAsBlobSize}}</strong>.</p> </dd> + + + + + <p> Adds information about a Media Foundation transform ({{MFT}}) to the registry. </p><p>Applications can enumerate the {{MFT}} by calling the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> function.</p> + <p> The registry entries created by this function are read by the following functions: </p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFTEnum}}</strong> </td><td>Enumerates {{MFTs}} by media type and category.</td></tr> <tr><td> <strong>{{MFTEnumEx}}</strong> </td><td>Extended version of <strong>{{MFTEnum}}</strong>.</td></tr> <tr><td> <strong>{{MFTGetInfo}}</strong> </td><td>Looks up an {{MFT}} by {{CLSID}} and retrieves the registry information.</td></tr> </table><p>?</p><p>This function does not register the {{CLSID}} of the {{MFT}} for the <strong>CoCreateInstance</strong> or <strong>CoGetClassObject</strong> functions. </p><p> To remove the entries from the registry, call <strong>{{MFTUnregister}}</strong>. If you remove an {{MFT}} from the system, you should always call <strong>{{MFTUnregister}}</strong>.</p><p> The formats given in the <em>pInputTypes</em> and <em>pOutputTypes</em> parameters are intended to help applications search for {{MFTs}} by format. Applications can use the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> functions to enumerate {{MFTs}} that match a particular set of formats.</p><p>It is recommended to specify at least one input type in <em>pInputTypes</em> and one output type in the <em>pOutputTypes</em> parameter. Otherwise, the {{MFT}} might be skipped in the enumeration.</p><p>On 64-bit Windows, the 32-bit version of this function registers the {{MFT}} in the 32-bit node of the registry. For more information, see 32-bit and 64-bit Application Data in the Registry.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Unregisters a Media Foundation transform ({{MFT}}). </p> + <p> This function removes the registry entries created by the <strong>{{MFTRegister}}</strong> function.</p><p>It is safe to call <strong>{{MFTUnregister}}</strong> twice with the same {{CLSID}}. If the {{CLSID}} is not found in the registry, the function succeeds and does nothing.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>The <em>pClassFactory</em> parameter specifies a class factory object that creates the {{MFT}}. The class factory's <strong>{{IClassFactory::CreateInstance}}</strong> method must return an object that supports the <strong>{{IMFTransform}}</strong> interface.</p><strong>Note</strong>??The <strong>{{MFTEnumEx}}</strong> function retrieves a list of <strong>{{IMFActivate}}</strong> references. However, the class factory does not need to support the <strong>{{IMFActivate}}</strong> interface. Instead, the <strong>{{MFTEnumEx}}</strong> function provides an implementation of <strong>{{IMFActivate}}</strong> that wraps the class factory.?<p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocal}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. The class factory creates the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters one or more Media Foundation transforms ({{MFTs}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocal}}</strong> function.</p><p>If the <em>pClassFactory</em> parameter is <strong>{{NULL}}</strong>, all local {{MFTs}} in the process are unregistered. Otherwise, the function unregisters the {{MFT}} associated with the class factory specified by the <em>pClassFactory</em> parameter. In that case, the <em>pClassFactory</em> parameter should equal a reference value that was previously passed to the <strong>{{MFTRegisterLocal}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>pClassFactory</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocalByCLSID}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters a Media Foundation transform ({{MFT}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>clsidMFT</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + + + <p> Enumerates Media Foundation transforms ({{MFTs}}) in the registry. </p><p>Starting in Windows?7, applications should use the <strong>{{MFTEnumEx}}</strong> function instead.</p> + <p> This function returns a list of all the {{MFTs}} in the specified category that match the search criteria given by the <em>pInputType</em>, <em>pOutputType</em>, and <em>pAttributes</em> parameters. Any of those parameters can be <strong>{{NULL}}</strong>. </p><p> If no {{MFTs}} match the criteria, the method succeeds but returns the value zero in <em>pcMFTs</em>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnum}}</strong> function.</p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnumEx}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnumEx}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnumEx}}</strong> function to allow external applications and internal components to discover the hardware {{MFTs}} that correspond to a specific video adapter. </p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnum2}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnum2}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets information from the registry about a Media Foundation transform ({{MFT}}). </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + <dd> <p> Receives a reference to a wide-character string containing the friendly name of the {{MFT}}. The caller must free the string by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an input format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppInputTypes</em> array. If <em>ppInputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an output format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppOutputType</em> array. If <em>ppOutputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The caller must release the interface. The attribute store might contain attributes that are stored in the registry for the specified {{MFT}}. (For more information, see <strong>{{MFTRegister}}</strong>.) If no attributes are stored in the registry for this {{MFT}}, the attribute store is empty. </p> <p>This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets a reference to the Microsoft Media Foundation plug-in manager.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPluginControl}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the merit value of a hardware codec.</p> + <p> The function fails if the {{MFT}} does not represent a hardware device with a valid Output Protection Manager ({{OPM}}) certificate. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the Media Foundation transform ({{MFT}}) that represents the codec.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>verifier</em> array.</p> </dd> + + + <dd> <p>The address of a buffer that contains one of the following:</p> <ul> <li>The class identifier ({{CLSID}}) of the {{MFT}}.</li> <li>A null-terminated wide-character string that contains the symbol link for the underlying hardware device. Include the size of the terminating null in the value of <em>cbVerifier</em>.</li> </ul> </dd> + + + <dd> <p>Receives the merit value.</p> </dd> + + + + + <p>Registers a scheme handler in the caller's process.</p> + <p>Scheme handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local scheme handlers take precedence over scheme handlers that are registered in the registry. Local scheme handlers are not visible to other processes.</p><p>Use this function if you want to register a custom scheme handler for your application, but do not want the handler available to other applications.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the scheme. The scheme includes the trailing ':' character; for example, "http:".</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a scheme handler object. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + <p>Registers a byte-stream handler in the caller's process.</p> + <p>Byte-stream handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local byte-stream handlers take precedence over byte-stream handlers that are registered in the registry. Local byte-stream handlers are not visible to other processes.</p><p>Use this function if you want to register a custom byte-stream handler for your application, but do not want the handler available to other applications.</p><p>Either <em>szFileExtension</em> or <em>szMimeType</em> can be <strong>{{NULL}}</strong>; at least one must be non-<strong>{{NULL}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the file name extension for this handler.</p> </dd> + + + <dd> <p>A string that contains the {{MIME}} type for this handler.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream handler. The byte-stream handler exposes the <strong>{{IMFByteStreamHandler}}</strong> interface.</p> </dd> + + + + + <p>Creates a wrapper for a byte stream.</p> + <p>The <strong>{{IMFByteStream}}</strong> methods on the wrapper call directly through to the original byte stream, except for the <strong>{{IMFByteStream::Close}}</strong> method. Calling <strong>Close</strong> on the wrapper closes the wrapper object, but leaves the original byte stream open.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the original byte stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the wrapper. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object for a Windows Runtime class.</p> + <p>To create the Windows Runtime object, call <strong>{{IMFActivate::ActivateObject}}</strong> or <strong>{{IClassFactory::CreateInstance}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier that is associated with the activatable runtime class.</p> </dd> + + + <dd> <p>A reference to an optional <strong>{{IPropertySet}}</strong> object, which is used to configure the Windows Runtime class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. The activation object created by this function supports the following interfaces:</p> <ul> <li> <strong>{{IClassFactory}}</strong> </li> <li> <strong>{{IMFActivate}}</strong> </li> <li> <strong>{{IPersistStream}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + <p> Validates the size of a buffer for a video format block. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is large enough. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is too small, or the format block is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_FORMAT}}</strong></dt> </dl> </td><td> <p> This function does not support the specified format type. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies the type of format block. It must be one of the following values:</p> <dl><dt><strong>{{FORMAT_DvInfo}}</strong></dt><dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt><dt><strong>{{FORMAT_MPEG2Video}}</strong></dt><dt><strong>{{FORMAT_MPEGStreams}}</strong></dt><dt><strong>{{FORMAT_MPEGVideo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo2}}</strong></dt><dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </dd> + + + <dd> <p> Pointer to a buffer that contains the format block. </p> </dd> + + + <dd> <p> Size of the <em>pBlock</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Creates an empty media type.</p> + <p> The media type is created without any attributes. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates an <strong>{{MFVIDEOFORMAT}}</strong> structure from a video media type.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Converts a Media Foundation audio media type to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p>If the <strong>wFormatTag</strong> member of the returned structure is <strong>{{WAVE_FORMAT_EXTENSIBLE}}</strong>, you can cast the reference to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{WAVEFORMATEX}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <strong>{{WAVEFORMATEX}}</strong> structure.</p> </dd> + + + <dd> <p>Contains a flag from the <strong>{{MFWaveFormatExConvertFlags}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER2}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER2}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG1VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG1VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG2VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG2VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the image size for a video format. Given a <strong>{{BITMAPINFOHEADER}}</strong> structure, this function calculates the correct value of the <strong>biSizeImage</strong> member. </p> + <p> Before calling this function, you must set at least the following members of the <strong>{{BITMAPINFOHEADER}}</strong> structure:</p><ul> <li><strong>biCompression</strong></li> <li><strong>biBitCount</strong></li> <li><strong>biWidth</strong></li> <li><strong>biHeight</strong></li> </ul><p>Also, if <strong>biCompression</strong> is <strong>{{BI_BITFIELDS}}</strong>, the <strong>{{BITMAPINFOHEADER}}</strong> structure must be followed by an array of color masks. </p><p> This function fails if the <strong>{{BITMAPINFOHEADER}}</strong> structure describes a format that is not a video format. For example, it fails if <strong>biCompresson</strong> is <strong>{{BI_JPEG}}</strong> or <strong>{{BI_PNG}}</strong> .</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{BITMAPINFOHEADER}}</strong> structure is not valid, or the value of <em>cbBufSize</em> is too small. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p>The function returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Media subtype for the video format. For a list of subtypes, see Media Type {{GUIDs}}.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of each frame, in bytes. If the format is compressed or is not recognized, the value is zero.</p> </dd> + + + + + <p> Converts a video frame rate into a frame duration.</p> + <p>This function is useful for calculating time stamps on a sample, given the frame rate.</p><p>Also, average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p> For certain common frame rates, the function gets the frame duration from a look-up table:</p><table> <tr><th>Frames per second (floating point)</th><th>Frames per second (fractional)</th><th>Average time per frame</th></tr> <tr><td>59.94</td><td>60000/1001</td><td>166833</td></tr> <tr><td>29.97</td><td>30000/1001</td><td>333667</td></tr> <tr><td>23.976</td><td>24000/1001</td><td>417188</td></tr> <tr><td>60</td><td>60/1</td><td>166667</td></tr> <tr><td>30</td><td>30/1</td><td>333333</td></tr> <tr><td>50</td><td>50/1</td><td>200000</td></tr> <tr><td>25</td><td>25/1</td><td>400000</td></tr> <tr><td>24</td><td>24/1</td><td>416667</td></tr> </table><p>?</p><p> Most video content uses one of the frame rates listed here. For other frame rates, the function calculates the duration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The numerator of the frame rate. </p> </dd> + + + <dd> <p> The denominator of the frame rate. </p> </dd> + + + <dd> <p> Receives the average duration of a video frame, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Calculates the frame rate, in frames per second, from the average duration of a video frame.</p> + <p>Average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p>This function uses a look-up table for certain common durations. The table is listed in the Remarks section for the <strong>{{MFFrameRateToAverageTimePerFrame}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The average duration of a video frame, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the numerator of the frame rate.</p> </dd> + + + <dd> <p>Receives the denominator of the frame rate.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Initializes a media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Initializes a media type from a <strong>{{WAVEFORMATEX}}</strong> structure. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{WAVEFORMATEX}}</strong> structure, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + + + <p> </p><p>Initializes a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</li> <li><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The media type is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The function allocates memory for the format block. The caller must release the format block by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Creates a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>. The function also allocates memory for the format block, which the caller must release by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Compares a full media type to a partial media type.</p> + <p>A pipeline component can return a partial media type to describe a range of possible formats the component might accept. A partial media type has at least a major type {{GUID}}, but might be missing some of the other attributes that are needed to fully describe the type. The missing attributes represent "don't care" values for the partial type. For example, a partial video type might be missing the attributes for the width and height of the video.</p><p>This function returns <strong>{{TRUE}}</strong> if the following conditions are both true:</p><ul> <li> The partial media type contains a major type {{GUID}}. </li> <li> All of the attributes in the partial type exist in the full type and are set to the same value. </li> </ul><p> Otherwise, the function returns <strong>{{FALSE}}</strong>. </p> + <p>If the full media type is compatible with the partial media type, the function returns <strong>{{TRUE}}</strong>. Otherwise, the function returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the full media type.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the partial media type.</p> </dd> + + + + + <p> Creates a media type that wraps another media type. </p> + <p> The original media type (<em>pOrig</em>) is stored in the new media type under the <strong>{{MF_MT_WRAPPED_TYPE}}</strong> attribute. To extract the original media type, call <strong>{{MFUnwrapMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type to wrap in a new media type. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the major type for the new media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the subtype for the new media type. For possible values, see:</p> <ul> <li> <strong>Audio Subtypes</strong> </li> <li> Video Subtypes </li> </ul> <p>Applications can define custom subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the new media type that wraps the original media type. The caller must release the interface. </p> </dd> + + + + + <p> Retrieves a media type that was wrapped in another media type by the <strong>{{MFWrapMediaType}}</strong> function. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates a video media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure. </p> + <p> Instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure to initialize a video media type, you can call <strong>{{MFCreateMediaType}}</strong> and set the media type attributes directly. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a partial video media type with a specified subtype. </p> + <p> This function creates a media type and sets the major type equal to <strong>{{MFMediaType_Video}}</strong> and the subtype equal to the value specified in <em>pAMSubtype</em>. </p><p>You can get the same result with the following steps:</p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. </li> <li> Set the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute to <strong>{{MFMediaType_Video}}</strong>. </li> <li> Set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute to the subtype. </li> </ol><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a {{GUID}} that specifies the subtype. See Video Subtype {{GUIDs}}. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether a {{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value is a {{YUV}} format.</p> + <p>This function checks whether <em>Format</em> specifies a {{YUV}} format. Not every {{YUV}} format is recognized by this function. However, if a {{YUV}} format is not recognized by this function, it is probably not supported for video rendering or DirectX video acceleration ({{DXVA}}).</p> + <p>The function returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The value specifies a {{YUV}} format.</p> </td></tr> <tr><td> <dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The value does not specify a recognized {{YUV}} format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value.</p> </dd> + + + + + <p> This function is not implemented.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns <strong>{{E_FAIL}}</strong>.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Calculates the minimum surface stride for a video format. </p> + <p> This function calculates the minimum stride needed to hold the image in memory. Use this function if you are allocating buffers in system memory. Surfaces allocated in video memory might require a larger stride, depending on the graphics card. </p><p> If you are working with a DirectX surface buffer, use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to find the surface stride. </p><p> For planar {{YUV}} formats, this function returns the stride for the Y plane. Depending on the format, the chroma planes might have a different stride. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the minimum surface stride, in pixels.</p> </dd> + + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p> This function is equivalent to the <strong>{{MFCalculateImageSize}}</strong> function. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll.? + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of one frame, in bytes. If the format is compressed or is not recognized, this value is zero.</p> </dd> + + + + + <p>Creates a video media type from a <strong>{{BITMAPINFOHEADER}}</strong> structure.</p> + <p>If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates a Media Foundation media type from another format representation.</p> + <p>If the original format is a DirectShow audio media type, and the format type is not recognized, the function sets the following attributes on the converted media type.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_MT_AM_FORMAT_TYPE}}</strong> </td><td>Contains the format type {{GUID}}.</td></tr> <tr><td> <strong>{{MF_MT_USER_DATA}}</strong> </td><td>Contains the format block.</td></tr> </table><p>?</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p>The {{GUID}} specified in <em>guidRepresentation</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies which format representation to convert. The following value is defined.</p> <table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td>{{AM_MEDIA_TYPE_REPRESENTATION}}</td><td>Convert a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the format representation to convert. The layout of the buffer depends on the value of <em>guidRepresentation</em>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future.]</p><p>Creates an audio media type from a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p> The <strong>{{IMFAudioMediaType}}</strong> interface is deprecrated, so applications should avoid using this function. To create a media type from a <strong>{{WAVEFORMATEX}}</strong> structure, do the following: </p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. The returned media type object is initially empty. </li> <li> Call <strong>{{MFInitMediaTypeFromWaveFormatEx}}</strong> to populate the media type from the <strong>{{WAVEFORMATEX}}</strong> structure. </li> </ol><p> Alternatively, you can call <strong>{{MFCreateMediaType}}</strong> and then set the media type attributes directly. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAudioMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Returns the {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value for an uncompressed video format.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns a {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value that identifies the video format. If the video format is compressed or not recognized, the return value is {{D3DFMT_UNKNOWN}}.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for a standard video format such as {{DVD}}, analog television, or {{ATSC}} digital television.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for an uncompressed {{RGB}} video format.</p> + <p> This function fills in some reasonable default values for the specified {{RGB}} format. </p><p> Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. See Media Type Attributes. </p><p> In general, you should avoid calling this function. If you know all of the format details, you can fill in the <strong>{{MFVIDEOFORMAT}}</strong> structure without this function. If you do not know all of the format details, attributes are preferable to using the <strong>{{MFVIDEOFORMAT}}</strong> structure. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Converts the extended color information from an <strong>{{MFVIDEOFORMAT}}</strong> to the equivalent DirectX Video Acceleration ({{DXVA}}) color information. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Sets the extended color information in a <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>This function sets the following fields in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><ul> <li><strong>videoInfo.{{MFNominalRange}}</strong></li> <li><strong>videoInfo.{{MFVideoLighting}}</strong></li> <li><strong>videoInfo.{{MFVideoPrimaries}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferFunction}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferMatrix}}</strong></li> <li><strong>videoInfo.SourceChromaSubsampling</strong></li> </ul><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Copies an image or image plane from one buffer to another. </p> + <p> This function copies a single plane of the image. For planar {{YUV}} formats, you must call the function once for each plane. In this case, <em>pDest</em> and <em>pSrc</em> must point to the start of each plane. </p><p> This function is optimized if the {{MMX}}, {{SSE}}, or {{SSE2}} instruction sets are available on the processor. The function performs a non-temporal store (the data is written to memory directly without polluting the cache). </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the start of the first row of pixels in the destination buffer. </p> </dd> + + + <dd> <p> Stride of the destination buffer, in bytes. </p> </dd> + + + <dd> <p> Pointer to the start of the first row of pixels in the source image. </p> </dd> + + + <dd> <p> Stride of the source image, in bytes. </p> </dd> + + + <dd> <p> Width of the image, in bytes. </p> </dd> + + + <dd> <p> Number of rows of pixels to copy. </p> </dd> + + + + + <p> Converts an array of 16-bit floating-point numbers into an array of 32-bit floating-point numbers. </p> + <p> The function converts <em>dwCount</em> values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Number of elements in the <em>pSrc</em> array to convert. </p> </dd> + + + + + <p> Converts an array of 32-bit floating-point numbers into an array of 16-bit floating-point numbers. </p> + <p> The function converts the values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Number of elements in the <em>pSrc</em> array to convert.</p> </dd> + + + + + <p>Creates a system-memory buffer object to hold 2D image data.</p> + <p>The returned buffer object also exposes the <strong>{{IMF2DBuffer2}}</strong> interface.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Unrecognized video format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Width of the image, in pixels. </p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>A <strong>{{FOURCC}}</strong> code or {{D3DFORMAT}} value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}},</strong> the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p>Allocates a system-memory buffer that is optimal for a specified media type.</p> + <p>For video formats, if the format is recognized, the function creates a 2-D buffer that implements the <strong>{{IMF2DBuffer2}}</strong> interface. Otherwise it creates a linear buffer. To get the <strong>{{IMF2DBuffer2}}</strong> interface, call <strong>QueryInterface</strong> on the reference returned in <em>ppBuffer</em>. If the <strong>QueryInterface</strong> method fails, use the <strong>{{IMFMediaBuffer}}</strong> interface to access the buffer memory.</p><p>For audio formats, the function allocates a buffer that is large enough to contain <em>llDuration</em> audio samples, or <em>dwMinLength</em>, whichever is larger.</p><p>This function always allocates system memory. For Direct3D surfaces, use the <strong>{{MFCreateDXGISurfaceBuffer}}</strong> or <strong>{{MFCreateDXSurfaceBuffer}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>The sample duration. This value is required for audio formats.</p> </dd> + + + <dd> <p>The minimum size of the buffer, in bytes. The actual buffer size might be larger. Specify zero to allocate the default buffer size for the media type.</p> </dd> + + + <dd> <p>The minimum memory alignment for the buffer. Specify zero to use the default memory alignment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty collection object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the collection object's <strong>{{IMFCollection}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Allocates a block of memory.</p> + <p>In the current version of Media Foundation, this function is equivalent to calling the <strong>HeapAlloc</strong> function and specifying the heap of the calling process.</p><p>To free the allocated memory, call <strong>{{MFHeapFree}}</strong>.</p> + <p>If the function succeeds, it returns a reference to the allocated memory block. If the function fails, it returns <strong>{{NULL}}</strong>.</p> + + + <dd> <p>Number of bytes to allocate.</p> </dd> + + + <dd> <p>Zero or more flags. For a list of valid flags, see <strong>HeapAlloc</strong> in the Windows {{SDK}} documentation.</p> </dd> + + + <dd> <p> Reserved. Set to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Set to zero. </p> </dd> + + + <dd> <p> Reserved. Set to <strong>eAllocationTypeIgnore</strong>. </p> </dd> + + + + + <p> </p><p>Frees a block of memory that was allocated by calling the <strong>{{MFHeapAlloc}}</strong> function.</p> + <p>This function does not return a value.</p> + + + + <p>Calculates ((a * b) + d) / c, where each term is a 64-bit signed value.</p> + <strong>Note</strong>??A previous version of this topic described the parameters incorrectly. The divisor is <em>c</em> and the rounding factor is <em>d</em>.? + <p>Returns the result of the calculation. If numeric overflow occurs, the function returns _I64_MAX (positive overflow) or {{LLONG_MIN}} (negative overflow). If Mfplat.dll cannot be loaded, the function returns _I64_MAX.</p> + + + <dd> <p>A multiplier.</p> </dd> + + + <dd> <p>Another multiplier.</p> </dd> + + + <dd> <p>The divisor.</p> </dd> + + + <dd> <p>The rounding factor.</p> </dd> + + + + + <p>Gets the class identifier for a content protection system.</p> + <p>The class identifier can be used to create the input trust authority ({{ITA}}) for the content protection system. Call <strong>CoCreateInstance</strong> or <strong>{{IMFPMPHost::CreateObjectByCLSID}}</strong> to get an <strong>{{IMFTrustedInput}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} that identifies the content protection system.</p> </dd> + + + <dd> <p>Receives the class identifier to the content protection system.</p> </dd> + + + + + <p> </p><p>Defines the behavior of the <strong>{{IMFMediaSession::SetTopology}}</strong> method.</p> + <p> These flags are optional, and are not mutually exclusive. If no flags are set, the Media Session resolves the topology and then adds it to the queue of pending presentations. </p> + + + + <p> Defines flags for the <strong>{{IMFMediaSession::GetFullTopology}}</strong> method. </p> + + + + <p> Contains flags that define the behavior of the <strong>{{MFCreatePMPMediaSession}}</strong> function. </p> + + + + <p> </p><p>Defines the object types that are created by the source resolver.</p> + + + <dd> <p>Media source. You can query the object for the <strong>{{IMFMediaSource}}</strong> interface.</p> </dd> + + + <dd> <p>Byte stream. You can query the object for the <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>Invalid type.</p> </dd> + + + + + + + + <p>Specifies how the topology loader connects a topology node. This enumeration is used with the <strong>{{MF_TOPONODE_CONNECT_METHOD}}</strong> attribute. </p> + + + + <p> </p><p>Defines status flags for the <strong>{{MF_TOPOLOGY_RESOLUTION_STATUS}}</strong> attribute.</p> + + + + <p>Defines the characteristics of a media source. These flags are retrieved by the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method.</p> + <p>To skip forward or backward in a playlist, call <strong>{{IMFMediaSource::Start}}</strong> or <strong>{{IMFMediaSession::Start}}</strong> with the <strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong> time-format {{GUID}}. This capability applies only when the <strong>{{MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS}}</strong> flag is present.</p> + + + + + + + <p>Defines stream marker information for the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. The <strong>PlaceMarker</strong> method places a marker on the stream between samples. The <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration defines the marker type and the type of information associated with the marker.</p> + <p>If the Streaming Audio Renderer receives an <strong>{{MFSTREAMSINK_MARKER_TICK}}</strong> marker, it inserts silence to cover the gap in the data. </p> + + + + <p>Specifies how to rotate a video image.</p> + + + <dd> <p>Do not rotate the image.</p> </dd> + + + <dd> <p>Rotate the image to the correct viewing orientation.</p> </dd> + + + + + <p>Specifies how to flip a video image.</p> + + + <dd> <p>Do not flip the image.</p> </dd> + + + <dd> <p>Flip the image horizontally.</p> </dd> + + + <dd> <p>Flip the image vertically.</p> </dd> + + + + + <p>Specifies whether the topology loader enables Microsoft DirectX Video Acceleration ({{DXVA}}) in the topology.</p> + <p>This enumeration is used with the {{MF_TOPOLOGY_DXVA_MODE}} topology attribute.</p><p>If an {{MFT}} supports {{DXVA}}, the {{MFT}} must return <strong>{{TRUE}}</strong> for the <strong>{{MF_SA_D3D_AWARE}}</strong> attribute. To enable {{DXVA}}, the topology loader calls <strong>{{IMFTransform::ProcessMessage}}</strong> on the {{MFT}}, passing the {{MFT}} a reference to the <strong>{{IDirect3DDeviceManager9}}</strong> interface. The topology loader gets the <strong>{{IDirect3DDeviceManager9}}</strong> reference from the media sink for the video stream. Typically the enhanced video renderer ({{EVR}}) is the media sink.</p><p>Previous versions of Microsoft Media Foundation supported {{DXVA}} only for decoders.</p> + + + <dd> <p>The topology loader enables {{DXVA}} +on the decoder if possible, and drops optional Media Foundation transforms ({{MFTs}}) that do not support {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader disables all video acceleration. This setting forces software processing, even when the decoder supports {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader enables {{DXVA}} on every {{MFT}} that supports it.</p> </dd> + + + + + <p>Specifies whether the topology loader will insert hardware-based Media Foundation transforms ({{MFTs}}) into the topology.</p> + <p> This enumeration is used with the {{MF_TOPOLOGY_HARDWARE_MODE}} topology attribute. </p> + + + <dd> <p>Use only software {{MFTs}}. Do not use hardware-based {{MFTs}}. This mode is the default, for backward compatibility with existing applications.</p> </dd> + + + <dd> <p>Use hardware-based {{MFTs}} when possible, and software {{MFTs}} otherwise. This mode is the recommended one.</p> </dd> + + + <dd> <p>If hardware-based {{MFTs}} are available, the topoloader will insert them. If not, the connection will fail.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p> </p><p>Defines the type of a topology node.</p> + + + <dd> <p>Output node. Represents a media sink in the topology.</p> </dd> + + + <dd> <p>Source node. Represents a media stream in the topology.</p> </dd> + + + <dd> <p>Transform node. Represents a Media Foundation Transform ({{MFT}}) in the topology.</p> </dd> + + + <dd> <p>Tee node. A tee node does not hold a reference to an object. Instead, it represents a fork in the stream. A tee node has one input and multiple outputs, and samples from the upstream node are delivered to all of the downstream nodes.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> </p><p>Defines when a transform in a topology is flushed.</p> + + + <dd> <p>The transform is flushed whenever the stream changes, including seeks and new segments.</p> </dd> + + + <dd> <p>The transform is flushed when seeking is performed on the stream.</p> </dd> + + + <dd> <p>The transform is never flushed during streaming. It is flushed only when the object is released.</p> </dd> + + + + + <p> </p><p>Defines at what times a transform in a topology is drained.</p> + + + <dd> <p>The transform is drained when the end of a stream is reached. It is not drained when markout is reached at the end of a segment.</p> </dd> + + + <dd> <p>The transform is drained whenever a topology ends.</p> </dd> + + + <dd> <p>The transform is never drained.</p> </dd> + + + + + <p>Contains flags that describe the characteristics of a clock. These flags are returned by the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method.</p> + + + + <p> </p><p>Defines the state of a clock.</p> + + + <dd> <p>The clock is invalid. A clock might be invalid for several reasons. Some clocks return this state before the first start. This state can also occur if the underlying device is lost.</p> </dd> + + + <dd> <p>The clock is running. While the clock is running, the time advances at the clock's frequency and current rate.</p> </dd> + + + <dd> <p>The clock is stopped. While stopped, the clock reports a time of 0.</p> </dd> + + + <dd> <p>The clock is paused. While paused, the clock reports the time it was paused.</p> </dd> + + + + + <p> </p><p>Defines properties of a clock.</p> + + + <dd> <p>Jitter values are always negative. In other words, the time returned by <strong>{{IMFClock::GetCorrelatedTime}}</strong> might jitter behind the actual clock time, but will never jitter ahead of the actual time. If this flag is not present, the clock might jitter in either direction.</p> </dd> + + + + + <p> </p><p>Contains flags for the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + + + + + + + + + + <p> Describes the current status of a call to the <strong>{{IMFShutdown::Shutdown}}</strong> method.</p> + + + + <p> </p><p>Indicates whether the {{URL}} is from a trusted source.</p> + + + <dd> <p>The validity of the {{URL}} cannot be guaranteed because it is not signed. The application should warn the user.</p> </dd> + + + <dd> <p>The {{URL}} is the original one provided with the content.</p> </dd> + + + <dd> <p>The {{URL}} was originally signed and has been tampered with. The file should be considered corrupted, and the application should not navigate to the {{URL}} without issuing a strong warning the user.</p> </dd> + + + + + <p> </p><p>Specifies the direction of playback (forward or reverse).</p> + + + <dd> <p>Forward playback.</p> </dd> + + + <dd> <p>Reverse playback.</p> </dd> + + + + + <p> </p><p>Specifies how aggressively a pipeline component should drop samples.</p> + <p>In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode. The specific algorithm used depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels.</p><p>For example, suppose an encoded video stream has three B-frames between each pair of P-frames. A decoder might implement the following drop modes:</p><ul> <li> <p>Mode 1: Drop one out of every three B frames.</p> </li> <li> <p>Mode 2: Drop one out of every two B frames.</p> </li> <li> <p>Mode 3: Drop all delta frames.</p> </li> <li> <p>Modes 4 and 5: Unsupported.</p> </li> </ul><p>The enhanced video renderer ({{EVR}}) can drop video frames before sending them to the {{EVR}} mixer.</p> + + + <dd> <p>Normal processing of samples. Drop mode is disabled.</p> </dd> + + + <dd> <p>First drop mode (least aggressive).</p> </dd> + + + <dd> <p>Second drop mode.</p> </dd> + + + <dd> <p>Third drop mode.</p> </dd> + + + <dd> <p>Fourth drop mode.</p> </dd> + + + <dd> <p>Fifth drop mode (most aggressive, if it is supported; see Remarks).</p> </dd> + + + <dd> <p>Maximum number of drop modes. This value is not a valid flag.</p> </dd> + + + + + <p>Specifies the quality level for a pipeline component. The quality level determines how the component consumes or produces samples.</p> + <p> Each successive quality level decreases the amount of processing that is needed, while also reducing the resulting quality of the audio or video. The specific algorithm used to reduce quality depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels. Also, the same quality level might not be comparable between two different components. </p><p> Video decoders can often reduce quality by leaving out certain post-processing steps. The enhanced video renderer ({{EVR}}) can sometimes reduce quality by switching to a different deinterlacing mode. </p> + + + <dd> <p> Normal quality. </p> </dd> + + + <dd> <p> One level below normal quality. </p> </dd> + + + <dd> <p> Two levels below normal quality. </p> </dd> + + + <dd> <p> Three levels below normal quality. </p> </dd> + + + <dd> <p> Four levels below normal quality. </p> </dd> + + + <dd> <p> Five levels below normal quality. </p> </dd> + + + <dd> <p> Maximum number of quality levels. This value is not a valid flag. </p> </dd> + + + + + <p>Contains flags for the <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method.</p> + <p>If the decoder sets the <strong>{{MF_QUALITY_CANNOT_KEEP_UP}}</strong> flag, the quality manager tries to reduce latency through the media source and the media sink. For example, it might request the Enhanced Video Renderer ({{EVR}}) to drop frames. During this period, the quality manager stops calling the decoder's <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method, until samples are no longer arriving late at the sink. At that point, the quality manager resumes calling <strong>NotifyQualityEvent</strong> on the decoder.</p> + + + + <p> </p><p>Contains flags for adding a topology to the sequencer source, or updating a topology already in the queue.</p> + + + <dd> <p>This topology is the last topology in the sequence.</p> </dd> + + + + + <p> Specifies how the credential manager should obtain user credentials. </p> + <p>The application implements the credential manager, which must expose the <strong>{{IMFNetCredentialManager}}</strong> interface. If the <strong>{{REQUIRE_PROMPT}}</strong> flag is set, the credential manager should prompt the user for his or her name and password.</p><p>The credential cache object sets the <strong>{{REQUIRE_PROMPT}}</strong> flag if the cache does not yet contain valid credentials. It also sets this flag if the credentials will be sent as plain text, unless the credential manager previously set the <strong>{{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}}</strong> option. (See <strong>{{IMFNetCredentialCache::SetUserOptions}}</strong>.)</p> + + + <dd> <p> The credential manager should prompt the user to provide the credentials. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>The credentials are saved to persistent storage. This flag acts as a hint for the application's {{UI}}. If the application prompts the user for credentials, the {{UI}} can indicate that the credentials have already been saved.</p> </dd> + + + + + <p> </p><p>Describes options for the caching network credentials.</p> + + + <dd> <p>Allow the credential cache object to save credentials in persistant storage.</p> </dd> + + + <dd> <p>Do not allow the credential cache object to cache the credentials in memory. This flag cannot be combined with the {{MFNET_CREDENTIAL_SAVE}} flag.</p> </dd> + + + <dd> <p>The user allows credentials to be sent over the network in clear text.</p> <p> By default, <strong>{{IMFNetCredentialCache::GetCredential}}</strong> always returns the {{REQUIRE_PROMPT}} flag when the authentication flags include {{MFNET_AUTHENTICATION_CLEAR_TEXT}}, even if cached credentials are available. If you set the {{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}} option, the <strong>GetCredential</strong> method will not return {{REQUIRE_PROMPT}} for clear text, if cached credentials are available.</p> <p>Do not set this flag without notifying the user that credentials might be sent in clear text.</p> </dd> + + + + + <p> </p><p>Specifies how the user's credentials will be used.</p> + + + <dd> <p>The credentials will be used to authenticate with a proxy.</p> </dd> + + + <dd> <p>The credentials will be sent over the network unencrypted.</p> </dd> + + + <dd> <p>The credentials must be from a user who is currently logged on.</p> </dd> + + + + + <p> Indicates the type of control protocol that is used in streaming or downloading. </p> + + + <dd> <p> The protocol type has not yet been determined. </p> </dd> + + + <dd> <p> The protocol type is {{HTTP}}. This includes {{HTTPv9}}, {{WMSP}}, and {{HTTP}} download. </p> </dd> + + + <dd> <p> The protocol type is Real Time Streaming Protocol ({{RTSP}}). </p> </dd> + + + <dd> <p> The content is read from a file. The file might be local or on a remote share. </p> </dd> + + + <dd> <p>The protocol type is multicast.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p> </p><p>Describes the type of transport used in streaming or downloading data ({{TCP}} or {{UDP}}).</p> + + + <dd> <p>The data transport type is {{UDP}}.</p> </dd> + + + <dd> <p>The data transport type is {{TCP}}.</p> </dd> + + + + + <p> </p><p>Defines the status of the cache for a media file or entry.</p> + + + <dd> <p>The cache for a file or entry does not exist.</p> </dd> + + + <dd> <p>The cache for a file or entry is growing.</p> </dd> + + + <dd> <p>The cache for a file or entry is completed.</p> </dd> + + + + + <p>Defines statistics collected by the network source. The values in this enumeration define property identifiers ({{PIDs}}) for the <strong>{{MFNETSOURCE_STATISTICS}}</strong> property.</p><p>To retrieve statistics from the network source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MFNETSOURCE_STATISTICS_SERVICE}}</strong> and the interface identifier {{IID_IPropertyStore}}. The retrieved reference is an <strong>{{IPropertyStore}}</strong> reference. To get the value of a network statistic, construct a <strong>{{PROPERTYKEY}}</strong> with <strong>fmtid</strong> equal to <strong>{{MFNETSOURCE_STATISTICS}}</strong> and <strong>pid</strong> equal to a value from this enumeration. Then call <strong>{{IPropertyStore::GetValue}}</strong> with the property key to retrieve the value of the statistic as a <strong>{{PROPVARIANT}}</strong>. </p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Specifies how the default proxy locator will specify the connection settings to a proxy server. The application must set these values in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> + + + + <p> </p><p>Defines actions that can be performed on a stream.</p> + + + <dd> <p>No action.</p> </dd> + + + <dd> <p>Play the stream.</p> </dd> + + + <dd> <p>Copy the stream.</p> </dd> + + + <dd> <p>Export the stream to another format.</p> </dd> + + + <dd> <p>Extract the data from the stream and pass it to the application. For example, acoustic echo cancellation requires this action.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Last member of the enumeration.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_CGMSA}}</strong>.</p> + <p>These flags are equivalent to the {{OPM_CGMSA_Protection_Level}} enumeration constants used in the Output Protection Protocol ({{OPM}}). </p> + + + <dd> <p>{{CGMS}}-A is disabled.</p> </dd> + + + <dd> <p>The protection level is Copy Freely.</p> </dd> + + + <dd> <p>The protection level is Copy No More.</p> </dd> + + + <dd> <p>The protection level is Copy One Generation.</p> </dd> + + + <dd> <p>The protection level is Copy Never.</p> </dd> + + + <dd> <p>Redistribution control (also called the broadcast flag) is required. This flag can be combined with the other flags.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_ACP}}</strong>.</p> + + + <dd> <p>Specifies {{ACP}} is disabled.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level one.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level two.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level three.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Specifies values for audio constriction.</p> + <p>Values defined by the <strong>{{MFAudioConstriction}}</strong> enumeration matches the <strong>{{EAudioConstriction}}</strong> enumeration defined <strong>audioenginebaseapo.h</strong>.</p> + + + <dd> <p>Audio is not constricted. </p> </dd> + + + <dd> <p>Audio is down sampled to 48 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 44 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 14hKz/16-bit.</p> </dd> + + + <dd> <p>Audio is muted.</p> </dd> + + + + + <p> </p><p>Defines the version number for sample protection.</p> + + + <dd> <p>No sample protection.</p> </dd> + + + <dd> <p>Version 1.</p> </dd> + + + <dd> <p>Version 2.</p> </dd> + + + <dd> <p>Version 3.</p> </dd> + + + + + <p>Defines flags for the {{MF_TRANSCODE_TOPOLOGYMODE}} attribute.</p> + + + + <p>Defines the profile flags that are set in the {{MF_TRANSCODE_ADJUST_PROFILE}} attribute.</p><p>These flags are checked by <strong>{{MFCreateTranscodeTopology}}</strong> during topology building. Based on these flags, <strong>{{MFCreateTranscodeTopology}}</strong> adjusts the transcode profile by modifying the configuration settings for the streams according to the input requirements of the encoder used in the topology. </p><p>For more information about the stream settings that an application can specify, see Using the Transcode {{API}}.</p> + <p>If the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag is specified, the following changes are made for the video stream:</p><ul> <li>If the frame rate of the media source specified in the <em>pSrc</em> parameter of <strong>{{MFCreateTranscodeTopology}}</strong> and the frame rate specified by the application in the <strong>{{MF_MT_FRAME_RATE}}</strong> attribute differ by less than 1/1000, the profile uses the media source frame rate. This is because the pipeline considers the difference to be negligible.</li> <li>If the application does not specify an interlaced mode by setting the <strong>{{MF_MT_INTERLACE_MODE}}</strong> attribute, the profile is changed to use progressive frames.</li> </ul><p>The <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag must be accompanied with the required audio and video stream attributes provided by the application. For the audio stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_AUDIO_NUM_CHANNELS}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_SAMPLES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BLOCK_ALIGNMENT}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_AVG_BYTES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BITS_PER_SAMPLE}}</strong> </li> </ul><p> For the video stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_FRAME_RATE}}</strong> </li> <li> <strong>{{MF_MT_FRAME_SIZE}}</strong> </li> <li> <strong>{{MF_MT_AVG_BITRATE}}</strong> </li> <li> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </li> </ul><p> If these attributes are not set, <strong>{{MFCreateTranscodeTopology}}</strong> creates the topology but Media Session fails to generate the encoded file. The failure code depends on the {{MFT}} node in the topology. For example, if the application does not set the frame size, the {{WMV}} encoder fails to encode the content and application gets the {{MF_E_INVALIDMEDIATYPE}} error code through the Media Session. </p><p>Use the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag when you want to transcode the file by using the input stream attributes. The input source stream attributes are copied to the output media type before the {{MFT}} node is inserted in the topology. If you set additional stream attributes, this flag does not overwrite the set values. Only the missing attributes are filled with the input source's attribute values. This flag is useful in remux scenario where you want to generate the output file in the same format as the input source. If you want to perform format conversion, make sure you set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute for the stream to specify the encoder that topology builder must use. The transform node is added in the topology unless {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} is set. In this case, and the content is not encoded. Instead, if permitted by the container, the content is embedded in the specified container. </p><p>For example, assume that your input source is an {{MP3}} file. You set the container to be <strong>{{MFTranscodeContainerType_ASF}}</strong>, you do not set any stream attributes, and you set the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag. In this case, the generated output file is an {{ASF}} file (.wma) containing {{MP3}} media data. Note that if you use this flag, certain input stream attributes and the container type might not be compatible. </p> + + + + <p>Defines algorithms for the video processor which is use by {{MF_VIDEO_PROCESSOR_ALGORITHM}}.</p> + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies whether a stream associated with an <strong>{{IMFSensorDevice}}</strong> is an input or an output stream.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Defines the properties of a clock. </p> + + + <dd> <p> The interval at which the clock correlates its clock time with the system time, in 100-nanosecond units. If the value is zero, the correlation is made whenever the <strong>{{IMFClock::GetCorrelatedTime}}</strong> method is called. </p> </dd> + + + <dd> <p> The unique identifier of the underlying device that provides the time. If two clocks have the same unique identifier, they are based on the same device. If the underlying device is not shared between two clocks, the value can be <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> A bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFCLOCK_RELATIONAL_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> The clock frequency in Hz. A value of <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong> means that the clock has a frequency of 10 {{MHz}} (100-nanosecond ticks), which is the standard <strong>{{MFTIME}}</strong> time unit in Media Foundation. If the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the value of this field must be <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong>. </p> </dd> + + + <dd> <p> The amount of inaccuracy that may be present on the clock, in parts per billion (ppb). For example, an inaccuracy of 50 ppb means the clock might drift up to 50 seconds per billion seconds of real time. If the tolerance is not known, the value is <strong>{{MFCLOCK_TOLERANCE_UNKNOWN}}</strong>. This constant is equal to 50 parts per million (ppm). </p> </dd> + + + <dd> <p> The amount of jitter that may be present, in 100-nanosecond units. Jitter is the variation in the frequency due to sampling the underlying clock. Jitter does not include inaccuracies caused by drift, which is reflected in the value of <strong>dwClockTolerance</strong>. </p> <p> For clocks based on a single device, the minimum jitter is the length of the tick period (the inverse of the frequency). For example, if the frequency is 10 Hz, the jitter is 0.1 second, which is 1,000,000 in <strong>{{MFTIME}}</strong> units. This value reflects the fact that the clock might be sampled just before the next tick, resulting in a clock time that is one period less than the actual time. If the frequency is greater than 10 {{MHz}}, the jitter should be set to 1 (the minimum value). </p> <p> If a clock's underlying hardware device does not directly time stamp the incoming data, the jitter also includes the time required to dispatch the driver's interrupt service routine ({{ISR}}). In that case, the expected jitter should include the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_ISR}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the device driver's {{ISR}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_DPC}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the deferred procedure call ({{DPC}}) processing. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_PASSIVE}}</strong></dt> </dl> </td><td> <p> Jitter due to dropping to normal thread execution before time stamping. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Contains information about a revoked component.</p> + + + <dd> <p>Specifies the reason for the revocation. The following values are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_BOOT_DRIVER_VERIFICATION_FAILED}}</strong></dt> </dl> </td><td> <p>A boot driver could not be verified.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>A certificate in a trusted component's certificate chain was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_HS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The high-security certificate for authenticating the protected environment ({{PE}}) was revoked.</p> <p>The high-security certificate is typically used by {{ITAs}} that handle high-definition content and next-generation formats such as {{HD}}-{{DVD}}.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_EKU}}</strong></dt> </dl> </td><td> <p>A certificate's extended key usage ({{EKU}}) object is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_ROOT}}</strong></dt> </dl> </td><td> <p>The root certificate is not valid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_LS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The low-security certificate for authenticating the {{PE}} was revoked.</p> <p>The low-security certificate is typically used by {{ITAs}} that handle standard-definition content and current-generation formats.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_REVOKED}}</strong></dt> </dl> </td><td> <p>A trusted component was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_ABSENT}}</strong></dt> </dl> </td><td> <p>The {{GRL}} was not found.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_LOAD_FAILED}}</strong></dt> </dl> </td><td> <p>Could not load the global revocation list ({{GRL}}).</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_INVALID_GRL_SIGNATURE}}</strong></dt> </dl> </td><td> <p>The {{GRL}} signature is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MINCRYPT_FAILURE}}</strong></dt> </dl> </td><td> <p>A certificate chain was not well-formed, or a boot driver is unsigned or is signed with an untrusted certificate.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TEST_SIGNED_COMPONENT_LOADING}}</strong></dt> </dl> </td><td> <p>A component was signed by a test certificate.</p> </td></tr> </table> <p>?</p> <p>In addition, one of the following flags might be present, indicating the type of component that failed to load.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_USER_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>User-mode component.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_KERNEL_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>Kernel-mode component.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains a hash of the file header.</p> </dd> + + + <dd> <p>Contains a hash of the public key in the component's certificate.</p> </dd> + + + <dd> <p>File name of the revoked component.</p> </dd> + + + + + <p> </p><p>Contains information about one or more revoked components.</p> + + + <dd> <p>Revocation information version.</p> </dd> + + + <dd> <p>Number of elements in the <strong>pRRComponents</strong> array.</p> </dd> + + + <dd> <p>Array of <strong>{{MFRR_COMPONENT_HASH_INFO}}</strong> structures.</p> </dd> + + + + + <p> </p><p>Contains an image that is stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Picture</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Picture</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains a picture related to the content, such as album art.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMPicture for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li><strong>{{ASF_FLAT_PICTURE}}</strong> structure. </li> <li> Null-terminated wide-character string that contains the {{MIME}} type. </li> <li> Null-terminated wide-character string that contains a description. </li> <li> <p>Image data.</p> </li> </ul><p>This format differs from the <strong>{{WM_PICTURE}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_PICTURE}}</strong> structure contains internal references to two strings and the image data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_PICTURE}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + + <p> </p><p>Contains synchronized lyrics stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Lyrics_Synchronised</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Lyrics_Synchronised</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains lyrics synchronized to times in the source file.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMLyrics_Synchronised for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li> <p><strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure.</p> </li> <li> <p>Null-terminated wide-character string that contains a description.</p> </li> <li> <p>Lyric data. The format of the lyric data is described in the Windows Media Format {{SDK}} documentation.</p> </li> </ul><p>This format differs from the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure contains internal references to two strings and the lyric data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + <dd> <p>Specifies the format of time stamps in the lyrics. This member is equivalent to the <strong>bTimeStampFormat</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure is documented in the Windows Media Format {{SDK}}.</p> </dd> + + + <dd> <p>Specifies the type of synchronized strings that are in the lyric data. This member is equivalent to the <strong>bContentType</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure.</p> </dd> + + + <dd> <p>Size, in bytes, of the lyric data.</p> </dd> + + + + + <p>Specifies a new attribute value for a topology node.</p> + <p> Due to an error in the structure declaration, the <strong>u64</strong> member is declared as a 32-bit integer, not a 64-bit integer. Therefore, any 64-bit value passed to the <strong>{{IMFTopologyNodeAttributeEditor::UpdateNodeAttributes}}</strong> method is truncated to 32 bits. </p> + + + <dd> <p> The identifier of the topology node to update. To get the identifier of a topology node, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> {{GUID}} that specifies the attribute to update. </p> </dd> + + + <dd> <p> Attribute type, specified as a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT32}}</strong>. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT64}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> Attribute value (floating point). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>. </p> </dd> + + + + + <p> </p><p>Specifies the buffering requirements of a file.</p> + <p>This structure describes the buffering requirements for content encoded at the bit rate specified in the <strong>dwBitrate</strong>. The <strong>msBufferWindow</strong> member indicates how much data should be buffered before starting playback. The size of the buffer in bytes is <strong>msBufferWinow</strong>?<strong>dwBitrate</strong> / 8000.</p> + + + <dd> <p>Bit rate, in bits per second.</p> </dd> + + + <dd> <p>Size of the buffer window, in milliseconds.</p> </dd> + + + + + <p> </p><p>Specifies the buffering parameters for a network byte stream.</p> + + + <dd> <p>Size of the file, in bytes. If the total size is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Size of the playable media data in the file, excluding any trailing data that is not useful for playback. If this value is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MF_LEAKY_BUCKET_PAIR}}</strong> structures. Each member of the array gives the buffer window for a particular bit rate.</p> </dd> + + + <dd> <p>The number of elements in the <strong>prgBuckets</strong> array.</p> </dd> + + + <dd> <p>Amount of data to buffer from the network, in 100-nanosecond units. This value is in addition to the buffer windows defined in the <strong>prgBuckets</strong> member.</p> </dd> + + + <dd> <p>Amount of additional data to buffer when seeking, in 100-nanosecond units. This value reflects the fact that downloading must start from the previous key frame before the seek point. If the value is unknown, set this member to zero.</p> </dd> + + + <dd> <p>The playback duration of the file, in 100-nanosecond units. If the duration is unknown, set this member to zero.</p> </dd> + + + <dd> <p>Playback rate.</p> </dd> + + + + + <p>Specifies a range of bytes.</p> + + + <dd> <p>The offset, in bytes, of the start of the range.</p> </dd> + + + <dd> <p>The offset, in bytes, of the end of the range.</p> </dd> + + + + + <p> </p><p>Contains the authentication information for the credential manager.</p> + + + <dd> <p>The response code of the authentication challenge. For example, {{NS_E_PROXY_ACCESSDENIED}}.</p> </dd> + + + <dd> <p>Set this flag to <strong>{{TRUE}}</strong> if the currently logged on user's credentials should be used as the default credentials.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the authentication package will send unencrypted credentials over the network. Otherwise, the authentication package encrypts the credentials.</p> </dd> + + + <dd> <p>The original {{URL}} that requires authentication.</p> </dd> + + + <dd> <p>The name of the site or proxy that requires authentication.</p> </dd> + + + <dd> <p>The name of the realm for this authentication.</p> </dd> + + + <dd> <p>The name of the authentication package. For example, "Digest" or "{{MBS_BASIC}}".</p> </dd> + + + <dd> <p>The number of times that the credential manager should retry after authentication fails.</p> </dd> + + + + + <p> </p><p>Describes an action requested by an output trust authority ({{OTA}}). The request is sent to an input trust authority ({{ITA}}).</p> + + + <dd> <p>Specifies the action as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains a ticket object, provided by the {{OTA}}.</p> </dd> + + + <dd> <p>Size of the ticket object, in bytes.</p> </dd> + + + + + <p> </p><p>Contains parameters for the <strong>{{IMFInputTrustAuthority::BindAccess}}</strong> or <strong>{{IMFInputTrustAuthority::UpdateAccess}}</strong> method.</p> + + + + <p>Contains information about the audio and video streams for the transcode sink activation object.</p><p>To get the information stored in this structure, call <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong>.</p> + <p>The <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong> method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-<strong>{{NULL}}</strong> after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> + + + + <p>Contains parameters for the <strong>{{IMFLocalMFTRegistration::RegisterMFTs}}</strong> method.</p> + + + + <p>Contains information about the data that you want to provide as input to a protection system function.</p> + + + <dd> <p>The identifier of the function that you need to run. This value is defined by the implementation of the protection system. </p> </dd> + + + <dd> <p>The size of the private data that the implementation of the security processor implementation reserved. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The size of the data provided as input to the protection system function that you want to run. </p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The data to provide as input to the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for use by the independent hardware vendor ({{IHV}}). Bytes <strong>PrivateDataByteCount</strong> through <strong>{{HWProtectionDataByteCount}}</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the input data for the protection system function. </p> <p>The protection system specification defines the format and size of the {{DRM}} function.</p> </dd> + + + + + <p>Contains information about the data you received as output from a protection system function.</p> + + + <dd> <p>The size of the private data that the implementation of the security processor reserves, in bytes. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The maximum size of data that the independent hardware vendor ({{IHV}}) can return in the output buffer, in bytes.</p> </dd> + + + <dd> <p>The size of the data that the {{IHV}} wrote to the output buffer, in bytes.</p> </dd> + + + <dd> <p>The result of the protection system function.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data. </p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent running the protection system function. +</p> </dd> + + + <dd> <p>The output of the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for {{IHV}} use. Bytes <strong>PrivateDataByteCount</strong> through <strong>MaxHWProtectionDataByteCount</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the region of the array into which the driver should return the output data from the protection system function.</p> <p>The protection system specification defines the format and size of the function.</p> </dd> + + + + + <p>Advises the secure processor of the Multimedia Class Scheduler service ({{MMCSS}}) parameters so that real-time tasks can be scheduled at the expected priority.</p> + + + <dd> <p>The identifier for the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread that runs the {{MMCSS}} task.</p> </dd> + + + + + + + + + + + <p>Provides playback controls for protected and unprotected content. The Media Session and the protected media path ({{PMP}}) session objects expose this interface. This interface is the primary interface that applications use to control the Media Foundation pipeline.</p><p>To obtain a reference to this interface, call <strong>{{MFCreateMediaSession}}</strong> or <strong>{{MFCreatePMPMediaSession}}</strong>.</p> + + + + <p> Sets a topology on the Media Session. </p> + <p> If <em>pTopology</em> is a full topology, set the <strong>{{MFSESSION_SETTOPOLOGY_NORESOLUTION}}</strong> flag in the <em>dwSetTopologyFlags</em> parameter. Otherwise, the topology is assumed to be a partial topology. The Media Session uses the topology loader to resolve a partial topology into a full topology.</p><p>If the Media Session is currently paused or stopped, the <strong>SetTopology</strong> method does not take effect until the next call to <strong>{{IMFMediaSession::Start}}</strong>.</p><p>If the Media Session is currently running, or on the next call to <strong>Start</strong>, the <strong>SetTopology</strong> method does the following:</p><ul> <li>If the <strong>{{MFSESSION_SETTOPOLOGY_IMMEDIATE}}</strong> flag is set in <em>dwSetTopologyFlags</em>, the Media Session ends the current presentation immediately, clears all pending topologies, and uses <em>pTopology</em> to start a new presentation.</li> <li>Otherwise, the Media Session queues <em>pTopology</em> and starts the new presentation when the current presentation has completed. If there is no current presentation, the new presentation starts immediately.</li> <li>Starting in Windows?7, you can also specify the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag to clear the current topology but leave any other pending topologies on the queue.</li> </ul><p> This method is asynchronous. If the method returns {{S_OK}}, the Media Session sends an {{MESessionTopologySet}} event when the operation completes. If the Media Session is currently paused to stopped, the Media Session does not send the {{MESessionTopologySet}} event until the next call to <strong>{{IMFMediaSession::Start}}</strong> </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_INVALID_TIME_ATTRIBUTES}}</strong></dt> </dl> </td><td> <p>The topology has invalid values for one or more of the following attributes:</p> <ul> <li> <strong>{{MF_TOPONODE_MEDIASTART}}</strong> </li> <li> <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTART}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTOP}}</strong> </li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_DEBUGGING_NOT_ALLOWED}}</strong></dt> </dl> </td><td> <p> Protected content cannot be played while debugging. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_SETTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to the topology object's <strong>{{IMFTopology}}</strong> interface. </p> </dd> + + + + + <p> </p><p>Clears all of the presentations that are queued for playback in the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionTopologiesCleared}} event.</p><p>This method does not clear the current topology; it only removes topologies that are placed in the queue, waiting for playback. To remove the current topology, call <strong>{{IMFMediaSession::SetTopology}}</strong> with the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Starts the Media Session. </p> + <p>When this method is called, the Media Session starts the presentation clock and begins to process media samples.</p><p>This method is asynchronous. When the method completes, the Media Session sends an {{MESessionStarted}} event.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that specifies the time format for the <em>pvarStartPosition</em> parameter. This parameter can be <strong>{{NULL}}</strong>. The value <strong>{{NULL}}</strong> is equivalent to passing in <strong>{{GUID_NULL}}</strong>.</p> <p>The following time format {{GUIDs}} are defined:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>Presentation time. The <em>pvarStartPosition</em> parameter must have one of the following <strong>{{PROPVARIANT}}</strong> types.</p> <ul> <li><strong>{{VT_I8}}</strong>: The <em>pvarStartPosition</em> parameter contains the starting position in 100-nanosecond units, relative to the start of the presentation.</li> <li><strong>{{VT_EMPTY}}</strong>: Playback starts from the current position.</li> </ul> <p>All media sources support this time format.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong></dt> </dl> </td><td> <p>Segment offset. This time format is supported by the Sequencer Source. The starting time is an offset within a segment.</p> <p>Call the <strong>{{MFCreateSequencerSegmentOffset}}</strong> function to create the <strong>{{PROPVARIANT}}</strong> value for the +<em>pvarStartPosition</em> parameter.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong></dt> </dl> </td><td> <strong>Note</strong>??Requires Windows?7 or later. ? <p>Skip to a playlist entry. The <em>pvarStartPosition</em> parameter specifies the index of the playlist entry, relative to the current entry. For example, the value 2 skips forward two entries. To skip backward, pass a negative value. The <strong>{{PROPVARIANT}}</strong> type is <strong>{{VT_I4}}</strong>.</p> <p>If a media source supports this time format, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns one or both of the following flags:</p> <ul> <li><strong>{{MFMEDIASOURCE_CAN_SKIPFORWARD}}</strong></li> <li><strong>{{MFMEDIASOURCE_CAN_SKIPBACKWARD}}</strong></li> </ul> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that specifies the starting position for playback. The meaning and data type of this parameter are indicated by the <em>pguidTimeFormat</em> parameter. </p> </dd> + + + + + <p> </p><p>Pauses the Media Session.</p> + <p>This method pauses the presentation clock.</p><p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionPaused}} event.</p><p>This method fails if the Media Session is stopped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SESSION_PAUSEWHILESTOPPED}}</strong></dt> </dl> </td><td> <p>The Media Session cannot pause while stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Stops the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionStopped}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Closes the Media Session and releases all of the resources it is using.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionClosed}} event.</p><p>After the <strong>Close</strong> method is called, the only valid methods on the Media Session are the following:</p><ul> <li> <p> <strong>{{IMFMediaSession::GetClock}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetFullTopology}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetSessionCapabilities}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::Shutdown}}</strong> </p> </li> </ul><p>All other methods return {{MF_E_INVALIDREQUEST}}, or else queue an event with that error code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the Media Session and releases all the resources used by the Media Session.</p> + <p>Call this method when you are done using the Media Session, before the final call to <strong>{{IUnknown::Release}}</strong>. Otherwise, your application will leak memory.</p><p>After this method is called, other <strong>{{IMFMediaSession}}</strong> methods return {{MF_E_SHUTDOWN}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the Media Session's presentation clock.</p> + <p>The application can query the returned <strong>{{IMFClock}}</strong> reference for the <strong>{{IMFPresentationClock}}</strong> interface. However, the application should not use this interface to control the state of the presentation clock. Instead, the application should always call the transport control methods on the Media Session's <strong>{{IMFMediaSession}}</strong> interface, such as <strong>Start</strong>, <strong>Stop</strong>, and <strong>Pause</strong>.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The Media Session does not have a presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the capabilities of the Media Session, based on the current presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_PAUSE}}</strong></dt> </dl> </td><td> <p>The Media Session can be paused.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_FORWARD}}</strong></dt> </dl> </td><td> <p>The Media Session supports forward playback at rates faster than 1.0.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_REVERSE}}</strong></dt> </dl> </td><td> <p>The Media Session supports reverse playback.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_SEEK}}</strong></dt> </dl> </td><td> <p>The Media Session can be seeked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_START}}</strong></dt> </dl> </td><td> <p>The Media Session can be started.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> Gets a topology from the Media Session.</p><p>This method can get the current topology or a queued topology.</p> + <p> If the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag is specified in the <em>dwGetFullTopologyFlags</em> parameter, the method returns the topology for the current presentation. Otherwise, the method searches all of the queued topologies for one that matches the identifier given in the <em>TopoId</em> parameter. </p><p> This method can be used to retrieve the topology for the current presentation or any pending presentations. It cannot be used to retrieve a topology that has already ended. </p><p> The topology returned in <em>ppFullTopo</em> is a full topology, not a partial topology. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_GETFULLTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The identifier of the topology. This parameter is ignored if the <em>dwGetFullTopologyFlags</em> parameter contains the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag. To get the identifier of a topology, call <strong>{{IMFTopology::GetTopologyID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology. The caller must release the interface. </p> </dd> + + + + + <p>Creates a media source from a {{URL}} or a byte stream. The Source Resolver implements this interface. To create the source resolver, call <strong>{{MFCreateSourceResolver}}</strong> function.</p> + + + + <p> Creates a media source or a byte stream from a {{URL}}. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain either the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag, but should not contain both.</p><p>It is recommended that you do not set <strong>{{MF_RESOLUTION_WRITE}}</strong> on the input argument <em>dwFlags</em> unless it is necessary for your scenario. For most use-cases, media sources do not need to be created with write capability. Creating a media source with write capability may have a lower probability of success than creating a media source without write capability. This is because there can be stricter checks on the content represented by the {{URL}} when creating a media source with write capability.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><strong>Note</strong>??This method cannot be called remotely.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p> The {{URL}} scheme is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Null-terminated string that contains the {{URL}} to resolve. </p> </dd> + + + <dd> <p> Bitwise {{OR}} of one or more flags. See <strong>Source Resolver Flags</strong>. See remarks below.</p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Creates a media source from a byte stream. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values (both if possible):</p><ul> <li> Specify the {{URL}} in the <em>pwszURL</em> parameter. </li> <li> Specify the {{MIME}} type by setting the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. (This attribute might be set already when you create the byte stream, depending on how the byte stream was created.) </li> </ul><strong>Note</strong>??This method cannot be called remotely.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> This byte stream is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p> Null-terminated string that contains the {{URL}} of the byte stream. The {{URL}} is optional and can be <strong>{{NULL}}</strong>. See Remarks for more information. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source or a byte stream from a {{URL}}.</p> + <p>The <em>dwFlags</em> parameter must contain either the {{MF_RESOLUTION_MEDIASOURCE}} flag or the {{MF_RESOLUTION_BYTESTREAM}} flag, but should not contain both.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromURL}}</strong> to get a reference to the object that was created.</p><p>The usage of the <em>pProps</em> parameter depends on the implementation of the media source. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p>The {{URL}} scheme is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated string that contains the {{URL}} to resolve.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Completes an asynchronous request to create an object from a {{URL}}. </p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p> The operation was canceled. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromByteStream}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p>The byte stream is not supported.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream does not support seeking.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p>A null-terminated string that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of one or more flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A oointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source from a byte stream.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The application canceled the operation.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Cancels an asynchronous request to create an object. </p> + <p> You can use this method to cancel a previous call to <strong>BeginCreateObjectFromByteStream</strong> or <strong>BeginCreateObjectFromURL</strong>. Because these methods are asynchronous, however, they might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method. </p><strong>Note</strong>??This method cannot be called remotely.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSourceResolver::BeginCreateObjectFromByteStream}}</strong> or <strong>{{IMFSourceResolver::BeginCreateObjectFromURL}}</strong> method. </p> </dd> + + + + + <p>Implemented by media source objects.</p><p>Media sources are objects that generate media data. For example, the data might come from a video file, a network stream, or a hardware device, such as a camera. Each media source contains one or more streams, and each stream delivers data of one type, such as audio or video.</p> + <p>In Windows?8, this interface is extended with <strong>{{IMFMediaSourceEx}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the media source.</p> + <p>The characteristics of a media source can change at any time. If this happens, the source sends an {{MESourceCharacteristicsChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves a copy of the media source's presentation descriptor. Applications use the presentation descriptor to select streams and to get information about the source content.</p> + <p>The presentation descriptor contains the media source's default settings for the presentation. The application can change these settings by selecting or deselecting streams, or by changing the media type on a stream. Do not modify the presentation descriptor unless the source is stopped. The changes take affect when the source's <strong>{{IMFMediaSource::Start}}</strong> method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation descriptor's <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Starts, seeks, or restarts the media source by specifying where to start playback.</p> + <p>This method is asynchronous. If the operation succeeds, the media source sends the following events:</p><ul> <li> For each new stream, the source sends an {{MENewStream}} event. This event is sent for the first <strong>Start</strong> call in which the stream appears. The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> For each <em>updated</em> stream, the source sends an {{MEUpdatedStream}} event. A stream is updated if the stream already existed when <strong>Start</strong> was called (for example, if the application seeks during playback). The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> If the previous state was stopped, the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused and the starting position is the current position (<strong>{{VT_EMPTY}}</strong>), the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused, and a new starting position is specified, the source sends an {{MESourceSeeked}} event. </li> <li> If the source sends an {{MESourceStarted}} event, each media stream sends an {{MEStreamStarted}} event. If the source sends an {{MESourceSeeked}} event, each stream sends an {{MEStreamSeeked}} event. </li> </ul><p> If the start operation fails asynchronously (after the method returns <strong>{{S_OK}}</strong>), the media source sends an {{MESourceStarted}} event that contains a failure code, without sending any of the other events listed here. If the method fails synchronously (returns an error code), no events are raised. </p><p> A call to <strong>Start</strong> results in a <em>seek</em> if the previous state was started or paused, and the new starting position is not <strong>{{VT_EMPTY}}</strong>. Not every media source can seek. If a media source can seek, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the <strong>{{MFMEDIASOURCE_CAN_SEEK}}</strong> flag. </p><p> Events from the media source are not synchronized with events from the media streams. If you seek a media source, therefore, you can still receive samples from the earlier position after getting the {{MESourceSeeked}} event. If you need to synchronize the operations, wait for the stream event, {{MEStreamSeeked}}, which marks the exact point in the stream where the seek occurs. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The start position is past the end of the presentation ({{ASF}} media source). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_HW_MFT_FAILED_START_STREAMING}}</strong></dt> </dl> </td><td> <p>A hardware device was unable to start streaming. This error code can be returned by a media source that represents a hardware device, such as a camera. For example, if the camera is already being used by another application, the method might return this error code.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The start request is not valid. For example, the start position is past the end of the presentation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The media source's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p> The media source does not support the time format specified in <em>pguidTimeFormat</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get the presentation descriptor, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. You can modify the presentation descriptor before calling <strong>Start</strong>, to select or deselect streams or change the media types. </p> </dd> + + + <dd> <p> Pointer to a {{GUID}} that specifies the time format. The time format defines the units for the <em>pvarStartPosition</em> parameter. If the value <em></em> is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. This parameter can be <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, it is equalivent to <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> Specifies where to start playback. The units of this parameter are indicated by the time format given in <em>pguidTimeFormat</em>. If the time format is <strong>{{GUID_NULL}}</strong>, the variant type must be <strong>{{VT_I8}}</strong> or <strong>{{VT_EMPTY}}</strong>. Use <strong>{{VT_I8}}</strong> to specify a new starting position, in 100-nanosecond units. Use <strong>{{VT_EMPTY}}</strong> to start from the current position. Other time formats might use other <strong>{{PROPVARIANT}}</strong> types. </p> </dd> + + + + + <p> </p><p>Stops all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourceStopped}} event, and every active stream sends an {{MEStreamStopped}} event. If the method returns a failure code, no events are raised.</p><p>When a media source is stopped, its current position reverts to zero. After that, if the <strong>Start</strong> method is called with {{VT_EMPTY}} for the starting position, playback starts from the beginning of the presentation.</p><p>While the source is stopped, no streams produce data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourcePaused}} event, and every active stream sends an {{MEStreamPaused}} event. If the method returns a failure code, no events are raised.</p><p>The media source must be in the started state. The method fails if the media source is paused or stopped.</p><p>While the source is paused, calls to <strong>{{IMFMediaStream::RequestSample}}</strong> succeed, but the streams will not deliver any samples until after the source is started again. Note that the source's event queue is not serialized with the stream event queues, so the client might receive some samples after the {{MESourcePaused}} event, due to multi-threading issues. But the client will not receive any samples from a stream after the {{MEStreamPaused}} event.</p><p>Not every media source can pause. If a media source can pause, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the {{MFMEDIASOURCE_CAN_PAUSE}} flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>Invalid state transition. The media source must be in the started state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the media source and releases the resources it is using.</p> + <p>If the application creates the media source, either directly or through the source resolver, the application is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks.</p><p>After this method is called, methods on the media source and all of its media streams return {{MF_E_SHUTDOWN}} (except for <strong>{{IUnknown}}</strong> methods).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFMediaSource}}</strong> interface to provide additional capabilities for a media source.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media source. </p> + <p>Implementations of this interface can return <strong>{{E_NOTIMPL}}</strong> for any methods that are not required by the media source.</p> + + + + <p>Gets an attribute store for the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the entire source. For stream-level attributes, use the <strong>{{IMFMediaSourceEx::GetStreamAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute store for a stream on the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the specified stream. For attributes that apply to the entire source, use the <strong>{{IMFMediaSourceEx::GetSourceAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support stream-level attributes.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. To get the identifier, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong> on the stream descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets a reference to the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager on the media source.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} Manager. The media source should query this reference for the <strong>{{IMFDXGIDeviceManager}}</strong> interface.</p> </dd> + + + + + <p> Creates a media source or a byte stream from a {{URL}}. </p> + <p>Applications do not use this interface. This interface is exposed by scheme handlers, which are used by the source resolver. A scheme handler is designed to parse one type of {{URL}} scheme. When the scheme handler is given a {{URL}}, it parses the resource that is located at that {{URL}} and creates either a media source or a byte stream.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called by the media pipeline to provide the app with an instance of <strong>{{IMFPresentationClock}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Represents one stream in a media source. </p> + <p>Streams are created when a media source is started. For each stream, the media source sends an {{MENewStream}} event with a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface.</p> + + + + <p> </p><p>Retrieves a reference to the media source that created this media stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a stream descriptor for this media stream.</p> + <p>Do not modify the stream descriptor. To change the presentation, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> and modify the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Requests a sample from the media source. </p> + <p>If <em>pToken</em> is not <strong>{{NULL}}</strong>, the media stream calls <strong>AddRef</strong> on <em>pToken</em> and places the token in a first-in, first-out queue.</p><p>When the next sample is available, the media stream stream does the following:</p><ol> <li> Pulls the first token from the queue. </li> <li> Sets the <strong>{{MFSampleExtension_Token}}</strong> attribute on the media sample. The attribute data is a reference to the token object. </li> <li> Sends an {{MEMediaSample}} event. The event data is a reference to the media sample's <strong>{{IMFSample}}</strong> interface. </li> <li> Calls <strong>Release</strong> on the token. </li> </ol><p>If the media stream cannot fulfill the caller's request for a sample, it simply releases the token object and skips steps 2 and 3.</p><p>The caller should monitor the reference count on the request token. If the media stream sends an {{MEMediaSample}} event, get the <strong>{{MFSampleExtension_Token}}</strong> attribute from the sample and match the attribute value against the token. If the token's reference count falls to zero and you did not receive an {{MEMediaSample}} event, it means that the request was dropped.</p><p>Because the Media Foundation pipeline is multithreaded, the source's <strong>RequestSample</strong> method might get called after the source has stopped. If the media source is stopped, the method should return <strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong>. The pipeline does not treat this return code as an error condition. If the source returns any other error code, the pipeline treats it as fatal error and halts the session.</p><strong>Note</strong>??Earlier versions of the documentation listed the wrong error code for this case.?<p>If the media source is paused, the method succeeds, but the stream does not deliver the sample until the source is started again.</p><p>If a media source enounters an error asynchronously while processing data, it should signal the error in one of the following ways (but not both):</p><ul> <li>Return an error code from the next <strong>RequestSample</strong> call.</li> <li>Send an {{MEError}} event.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_END_OF_STREAM}}</strong></dt> </dl> </td><td> <p> The end of the stream was reached. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong></dt> </dl> </td><td> <p> The media source is stopped.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The source's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface to an object that is used as a token for the request. The caller must implement this object. This parameter can be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Implemented by media sink objects. This interface is the base interface for all Media Foundation media sinks. Stream sinks handle the actual processing of data on each stream.</p> + + + + <p> </p><p>Gets the characteristics of the media sink.</p> + <p> The characteristics of a media sink are fixed throughout the life time of the sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_FIXED_STREAMS}}</strong></strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The media sink has a fixed number of streams. It does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> and <strong>{{IMFMediaSink::RemoveStreamSink}}</strong> methods. This flag is a hint to the application. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CANNOT_MATCH_CLOCK}}</strong></strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The media sink cannot match rates with an external clock.</p> <p>For best results, this media sink should be used as the time source for the presentation clock. If any other time source is used, the media sink cannot match rates with the clock, with poor results (for example, glitching).</p> <p>This flag should be used sparingly, because it limits how the pipeline can be configured.</p> <p>For more information about the presentation clock, see Presentation Clock.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_RATELESS}}</strong></strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The media sink is rateless. It consumes samples as quickly as possible, and does not synchronize itself to a presentation clock.</p> <p>Most archiving sinks are rateless.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CLOCK_REQUIRED}}</strong></strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The media sink requires a presentation clock. The presentation clock is set by calling the media sink's <strong>{{IMFMediaSink::SetPresentationClock}}</strong> method.</p> <p>This flag is obsolete, because all media sinks must support the <strong>SetPresentationClock</strong> method, even if the media sink ignores the clock (as in a rateless media sink).</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CAN_PREROLL}}</strong></strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p> The media sink can accept preroll samples before the presentation clock starts. The media sink exposes the <strong>{{IMFMediaSinkPreroll}}</strong> interface. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE}}</strong></strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>The first stream sink (index 0) is a reference stream. The reference stream must have a media type before the media types can be set on the other stream sinks.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Adds a new stream sink to the media sink.</p> + <p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>If <em>pMediaType</em> is <strong>{{NULL}}</strong>, use the <strong>{{IMFMediaTypeHandler}}</strong> interface to set the media type. Call <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong> to get a reference to the interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The specified stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_EXISTS}}</strong></dt> </dl> </td><td> <p>There is already a stream sink with the same stream identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. New stream sinks cannot be added.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the new stream. The value is arbitrary but must be unique.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface, specifying the media type for the stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the new stream sink's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Removes a stream sink from the media sink.</p> + <p>After this method is called, the corresponding stream sink object is no longer valid. The <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong> and <strong>{{IMFMediaSink::GetStreamSinkById}}</strong> methods will no longer return that stream sink. You can re-use the stream identifier if you add another stream (by calling <strong>AddStreamSink</strong>).</p><p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>In some cases, the media sink supports this method but does not allow every stream sink to be removed. (For example, it might not allow stream 0 to be removed.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>This particular stream sink cannot be removed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream number is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. Stream sinks cannot be removed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream to remove. The stream identifier is defined when you call <strong>{{IMFMediaSink::AddStreamSink}}</strong> to add the stream sink.</p> </dd> + + + + + <p> </p><p>Gets the number of stream sinks on this media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of stream sinks.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by index.</p> + <p>Enumerating stream sinks is not a thread-safe operation, because stream sinks can be added or removed between calls to this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaSink::GetStreamSinkCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by stream identifier.</p> + <p>If you add a stream sink by calling the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method, the stream identifier is specified in the <em>dwStreamSinkIdentifier</em> parameter of that method. If the media sink has a fixed set of streams, the media sink assigns the stream identifiers.</p><p>To enumerate the streams by index number instead of stream identifier, call <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream identifier of the stream sink.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the presentation clock on the media sink.</p> + <p>During streaming, the media sink attempts to match rates with the presentation clock. Ideally, the media sink presents samples at the correct time according to the presentation clock and does not fall behind. Rateless media sinks are an exception to this rule, as they consume samples as quickly as possible and ignore the clock. If the sink is rateless, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_RATELESS}} flag.</p><p>The presentation clock must have a time source. Before calling this method, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> on the presentation clock to set the presentation time source. Some media sinks provide time sources; therefore, the media sink might be the time source for its own presentation clock. Regardless of what object provides the time source, however, the media sink must attempt to match rates with the clock specified in <em>pPresentationClock</em>. If a media sink cannot match rates with an external time source, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method retrieves the {{MEDIASINK_CANNOT_MATCH_CLOCK}} flag. In this case, <strong>SetPresentationClock</strong> will still succeed, but the results will not be optimal. The sink might not render samples quickly enough to match rates with the presentation clock.</p><p>If <em>pPresentationClock</em> is non-<strong>{{NULL}}</strong>, the media sink must register for clock state notifications, by calling <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock. If the method is called again with a new presentation clock, or if <em>pPresentationClock</em> is <strong>{{NULL}}</strong>, the media sink must call <strong>{{IMFPresentationClock::RemoveClockStateSink}}</strong> to deregister itself from the previous clock.</p><p>All media sinks must support this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>The presentation clock does not have a time source. Call <strong>SetTimeSource</strong> on the presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock, or <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, the media sink stops listening to the presentaton clock that was previously set, if any.</p> </dd> + + + + + <p> </p><p>Gets the presentation clock that was set on the media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>No clock has been set. To set the presentation clock, call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Shuts down the media sink and releases the resources it is using.</p> + <p>If the application creates the media sink, it is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks. In most applications, however, the application creates an activation object for the media sink, and the Media Session uses that object to create the media sink. In that case, the Media Session ? not the application ? shuts down the media sink. (For more information, see Activation Objects.)</p><p>After this method returns, all methods on the media sink return {{MF_E_SHUTDOWN}}, except for <strong>{{IUnknown}}</strong> methods and <strong>{{IMFMediaEventGenerator}}</strong> methods. The sink will not raise any events after this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a stream on a media sink object.</p> + + + + <p> </p><p>Retrieves the media sink that owns this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the stream identifier for this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the stream identifier. If this stream sink was added by calling <strong>{{IMFMediaSink::AddStreamSink}}</strong>, the stream identifier is in the <em>dwStreamSinkIdentifier</em> parameter of that method. Otherwise, the media sink defines the identifier.</p> </dd> + + + + + + + + <p> </p><p>Delivers a sample to the stream. The media sink processes the sample.</p> + <p>Call this method when the stream sink sends an {{MEStreamSinkRequestSample}} event.</p><p>This method can return {{MF_E_INVALID_TIMESTAMP}} for various reasons, depending on the implementation of the media sink:</p><ul> <li> <p>Negative time stamps.</p> </li> <li> <p>Time stamps that jump backward (within the same stream).</p> </li> <li> <p>The time stamps for one stream have drifted too far from the time stamps on another stream within the same media sink (for example, an archive sink that multiplexes the streams).</p> </li> </ul><p>Not every media sink returns an error code in these situations.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>The media sink is in the wrong state to receive a sample. For example, preroll is complete but the presenation clock has not started yet.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample has an invalid time stamp. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The media sink is paused or stopped and cannot process the sample.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>The presentation clock was not set. Call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a time stamp.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of a sample that contains valid data for the stream.</p> </dd> + + + + + <p> </p><p>Places a marker in the stream. </p> + <p>This method causes the stream sink to send an {{MEStreamSinkMarker}} event after the stream sink consumes all of the samples that were delivered up to this point (before the call to <strong>PlaceMarker</strong>).</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></strong></dt> </dl> </td><td> <p> This stream was removed from the media sink and is no longer valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the marker type, as a member of the <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that contains additional information related to the marker. The meaning of this value depends on the marker type. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that is attached to the {{MEStreamSinkMarker}} event. Call <strong>{{IMFMediaEvent::GetValue}}</strong> to get this value from the event. The caller can use this information for any purpose. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Causes the stream sink to drop any samples that it has received and has not rendered yet.</p> + <p>If any samples are still queued from previous calls to the <strong>{{IMFStreamSink::ProcessSample}}</strong> method, the media sink immediately discards them, without processing them. This can cause a glitch in the rendered output. The running state of the sink (running, paused, or stopped) does not change.</p><p>Any pending marker events from the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method are dispatched immediately, with the status code {{E_ABORT}}.</p><p>This method is synchronous. It does not return until the sink has discarded all pending samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized yet. You might need to set a media type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + + <p>Allocates video samples for a video media sink.</p><p>The stream sinks on the enhanced video renderer ({{EVR}}) expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier {{MR_VIDEO_ACCELERATION_SERVICE}}. Custom media sinks can also implement this interface. The Media Session uses this interface to allocate samples for the {{EVR}}, unless the upstream decoder supports DirectX Video Acceleration ({{DXVA}}).</p> + + + + <p> </p><p>Specifies the Direct3D device manager for the video media sink to use.</p> + <p>The media sink uses the Direct3D device manager to obtain a reference to the Direct3D device, which it uses to allocate Direct3D surfaces. The device manager enables multiple objects in the pipeline (such as a video renderer and a video decoder) to share the same Direct3D device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of the Direct3D device manager. The media sink queries this reference for the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Releases all of the video samples that have been allocated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Specifies the number of samples to allocate and the media type for the samples. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Invalid media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of samples to allocate. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Gets a video sample from the allocator. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The allocator was not initialized. Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocator}}</strong> or <strong>InitializeSampleAllocatorEx::InitializeSampleAllocatorEx</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SAMPLEALLOCATOR_EMPTY}}</strong></dt> </dl> </td><td> <p> No samples are available. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released and then returned to the pool of available samples, the allocator invokes the <strong>NotifyRelease</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when allocator samples are released for pruning by the allocator, or when the allocator is removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample to be pruned.</p> </dd> + + + + + <p>Enables an application to track video samples allocated by the enhanced video renderer ({{EVR}}).</p><p>The stream sinks on the {{EVR}} expose this interface as a service. To get a reference to the interface, call the <strong>{{IMFGetService::GetService}}</strong> method, using the <strong>{{MR_VIDEO_ACCELERATION_SERVICE}}</strong> service identifier.</p> + + + + <p>Sets the callback object that receives notification whenever a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released, it returns to the pool of available samples. When this happens, the allocator invokes the <strong>{{IMFVideoSampleAllocatorNotify::NotifyRelease}}</strong> callback.</p><p>The allocator holds at most one callback reference. Calling this method again replaces the previous callback reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFVideoSampleAllocatorNotify}}</strong> interface that receives notification, or <strong>{{NULL}}</strong> to remove the callback.</p> </dd> + + + + + <p>Gets the number of video samples that are currently available for use.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. The <strong>AllocateSample</strong> method removes a sample from the sample pool and returns it to the caller. When a sample is released, it returns to the pool. The <strong>GetFreeSampleCount</strong> method returns the count of samples that remain in the sample pool.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of available samples.</p> </dd> + + + + + <p>Allocates video samples that contain Microsoft Direct3D?11 texture surfaces.</p> + <p>You can use this interface to allocateDirect3D?11 video samples, rather than allocate the texture surfaces and media samples directly. To get a reference to this interface, call the <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> function. </p><p>To allocate video samples, perform the following steps:</p><ol> <li>Obtain a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. For a Media Foundation transform ({{MFT}}), this step occurs during the <strong>{{MFT_MESSAGE_SET_D3D_MANAGER}}</strong> event.</li> <li>Call <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> to create the allocator object and get a reference to the <strong>{{IMFVideoSampleAllocatorEx}}</strong> interface.</li> <li>Call <strong>{{IMFVideoSampleAllocator::SetDirectXManager}}</strong> on the allocator to set the <strong>{{IMFDXGIDeviceManager}}</strong> reference on the allocator.</li> <li>Call <strong>{{MFCreateAttributes}}</strong> to get a reference to the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Set the {{MF_SA_D3D11_USAGE}} and {{MF_SA_D3D11_BINDFLAGS}} attributes.</li> <li>Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocatorEx}}</strong>.</li> </ol> + + + + <p>Initializes the video sample allocator object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initial number of samples to allocate. </p> </dd> + + + <dd> <p>The maximum number of samples to allocate.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this interface to configure the allocator. Currently, the following configuration attributes are defined:</p> <ul> <li> {{MF_SA_BUFFERS_PER_SAMPLE}} </li> <li> {{MF_SA_D3D11_BINDFLAGS}} </li> <li> {{MF_SA_D3D11_USAGE}} </li> <li> {{MF_SA_D3D11_SHARED}} </li> <li> {{MF_SA_D3D11_SHARED_WITHOUT_MUTEX}} </li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Provides functionality for getting the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + + + + <p>Gets the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>Sets the border color.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color as an {{ARGB}} (alpha, red, green, blue) value.</p> </dd> + + + + + <p>Sets the source rectangle. The source rectangle is the portion of the input frame that is blitted to the destination surface.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle.</p> </dd> + + + + + <p>Sets the destination rectangle. The destination rectangle is the portion of the output surface where the source rectangle is blitted.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + + + <p>Specifies whether to flip the video image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_VIDEO_PROCESSOR_MIRROR}}</strong> value that specifies whether to flip the video image, either horizontally or vertically.</p> </dd> + + + + + <p>Specifies whether to rotate the video to the correct orientation.</p> + <p>The original orientation of the video is specified by the {{MF_MT_VIDEO_ROTATION}} attribute of the input media type.</p><p> If <em>eRotation</em> is <strong>{{ROTATION_NONE}}</strong>, the video processor does not correct the orientation of the output video. If the original video is rotated, and <em>eRotation</em> is <strong>{{ROTATION_NORMAL}}</strong>, the video processor corrects the orientation, so that the ouput video is not rotated. The video processor letterboxes the output as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{MF_VIDEO_PROCESSOR_ROTATION}}</strong> value that specifies whether to rotate the image.</p> </dd> + + + + + <p>Specifies the amount of downsampling to perform on the output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sampling size. To disable constriction, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Overrides the rotation operation that is performed in the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Rotation value in degrees. Typically, you can only use values from the <strong>{{MFVideoRotationFormat}}</strong> enumeration.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables effects that were implemented with <strong>{{IDirectXVideoProcessor::VideoProcessorBlt}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Returns the list of supported effects in the currently configured video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the list of suppported effect capabilities.</p> </dd> + + + + + <p>Represents a topology. A <em>topology</em> describes a collection of media sources, sinks, and transforms that are connected in a certain order. These objects are represented within the topology by <em>topology nodes</em>, which expose the <strong>{{IMFTopologyNode}}</strong> interface. A topology describes the path of multimedia data through these nodes.</p><p>To create a topology, call <strong>{{MFCreateTopology}}</strong>.</p> + + + + <p> Gets the identifier of the topology.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the identifier, as a <strong>{{TOPOID}}</strong> value. </p> </dd> + + + + + <p> </p><p>Adds a node to the topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pNode</em> is invalid, possibly because the node already exists in the topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a node from the topology.</p> + <p>This method does not destroy the node, so the <strong>{{IMFTopologyNode}}</strong> reference is still valid after the method returns.</p><p>The method breaks any connections between the specified node and other nodes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified node is not a member of this topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> Gets the number of nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of nodes. </p> </dd> + + + + + <p> Gets a node in the topology, specified by index. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The index is less than zero. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p> No node can be found at the index <em>wIndex</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The zero-based index of the node. To get the number of nodes in the topology, call <strong>{{IMFTopology::GetNodeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the reference. </p> </dd> + + + + + <p> </p><p>Removes all nodes from the topology.</p> + <p>You do not need to clear a topology before disposing of it. The <strong>Clear</strong> method is called automatically when the topology is destroyed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Converts this topology into a copy of another topology. </p> + <p>This method does the following:</p><ul> <li> Removes all of the nodes from this topology. </li> <li> Clones the nodes from <em>pTopology</em> and adds them to this topology. The cloned nodes have the same node identifiers as the nodes from <em>pTopology</em>. </li> <li> Connects the cloned nodes to match the connections in <em>pTopology</em>. </li> <li> Copies the attributes from <em>pTopology</em> to this topology. </li> <li> Copies the topology identifier from <em>pTopology</em> to this topology.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the topology to clone. </p> </dd> + + + + + <p>Gets a node in the topology, specified by node identifier.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The topology does not contain a node with this identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of the node to retrieve. To get a node's identifier, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the source nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the source nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty.</p> </dd> + + + + + <p> Gets the output nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the output nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty. </p> </dd> + + + + + <p>Represents a node in a topology. The following node types are supported:</p><ul> <li> Output node. Represents a media sink. </li> <li> Source node. Represents a media stream. </li> <li> Transform node. Represents a Media Foundation Transform ({{MFT}}). </li> <li> Tee node. Delivers a media stream to two or more nodes. </li> </ul><p>To create a new node, call the <strong>{{MFCreateTopologyNode}}</strong> function.</p> + + + + <p> </p><p>Sets the object associated with this node.</p> + <p>All node types support this method, but the object reference is not used by every node type.</p><table> <tr><th>Node type</th><th>Object reference</th></tr> <tr><td>Source node.</td><td>Not used.</td></tr> <tr><td>Transform node.</td><td> <strong>{{IMFTransform}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Output node</td><td> <strong>{{IMFStreamSink}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Tee node.</td><td>Not used.</td></tr> </table><p>?</p><p>If the object supports <strong>{{IPersist}}</strong>, <strong>{{IPersistStorage}}</strong>, or <strong>{{IPersistPropertyBag}}</strong>, the method gets the object's {{CLSID}} and sets the <strong>{{MF_TOPONODE_TRANSFORM_OBJECTID}}</strong> attribute on the node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the object's <strong>{{IUnknown}}</strong> interface. Use the value <strong>{{NULL}}</strong> to clear an object that was previous set.</p> </dd> + + + + + <p> Gets the object associated with this node. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> There is no object associated with this node. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the node type.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the node type, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> Retrieves the identifier of the node.</p> + <p> When a node is first created, it is assigned an identifier. Node identifiers are unique within a topology, but can be reused across several topologies. The topology loader uses the identifier to look up nodes in the previous topology, so that it can reuse objects from the previous topology. </p><p> To find a node in a topology by its identifier, call <strong>{{IMFTopology::GetNodeByID}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the identifier.</p> </dd> + + + + + <p> Sets the identifier for the node.</p> + <p> When a node is first created, it is assigned an identifier. Typically there is no reason for an application to override the identifier. Within a topology, each node identifier should be unique. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{TOPOID}}</strong> has already been set for this object. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the node. </p> </dd> + + + + + <p> </p><p>Retrieves the number of input streams that currently exist on this node.</p> + <p>The input streams may or may not be connected to output streams on other nodes. To get the node that is connected to a specified input stream, call <strong>{{IMFTopologyNode::GetInput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetInputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of input streams.</p> </dd> + + + + + <p> </p><p>Retrieves the number of output streams that currently exist on this node.</p> + <p>The output streams may or may not be connected to input streams on other nodes. To get the node that is connected to a specific output stream on this node, call <strong>{{IMFTopologyNode::GetOutput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetOutputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of output streams.</p> </dd> + + + + + <p> </p><p>Connects an output stream from this node to the input stream of another node.</p> + <p>Node connections represent data flow from one node to the next. The streams are logical, and are specified by index.</p><p>If the node is already connected at the specified output, the method breaks the existing connection. If <em>dwOutputIndex</em> or <em>dwInputIndexOnDownstreamNode</em> specify streams that do not exist yet, the method adds as many streams as needed.</p><p>This method checks for certain invalid conditions:</p><ul> <li> <p>An output node cannot have any output connections. If you call this method on an output node, the method returns {{E_FAIL}}.</p> </li> <li> <p>A node cannot be connected to itself. If <em>pDownstreamNode</em> specifies the same node as the method call, the method returns {{E_INVALIDARG}}.</p> </li> </ul><p>However, if the method succeeds, it does not guarantee that the node connection is valid. It is possible to create a partial topology that the topology loader cannot resolve. If so, the <strong>{{IMFTopoLoader::Load}}</strong> method will fail.</p><p>To break an existing node connection, call <strong>{{IMFTopologyNode::DisconnectOutput}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The method failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid parameter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream on this node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the node to connect to.</p> </dd> + + + <dd> <p>Zero-based index of the input stream on the other node.</p> </dd> + + + + + <p> </p><p>Disconnects an output stream on this node.</p> + <p>If the specified output stream is connected to another node, this method breaks the connection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwOutputIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified output stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream to disconnect.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified input stream on this node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified input stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the output stream that is connected to this node's input stream.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified output stream on this node.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified output stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the input stream that is connected to this node's output stream.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an output stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no output stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an output stream on this node.</p> + <p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}.</p><p>The preferred output type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred output type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred output type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an input stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no input stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an input stream on this node.</p> + <p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p><p>The preferred input type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred input type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred input type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> Copies the data from another topology node into this node.</p> + <p> The two nodes must have the same node type. To get the node type, call <strong>{{IMFTopologyNode::GetNodeType}}</strong>. </p><p> This method copies the object reference, preferred types, and attributes from <em>pNode</em> to this node. It also copies the <strong>{{TOPOID}}</strong> that uniquely identifies each node in a topology. It does not duplicate any of the connections from <em>pNode</em> to other nodes. </p><p> The purpose of this method is to copy nodes from one topology to another. Do not use duplicate nodes within the same topology. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The node types do not match. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node to copy. </p> </dd> + + + + + <p> Queries an object for a specified service interface. </p> + <p>A service is an interface that is exposed by one object but might be implemented by another object. The <strong>GetService</strong> method is equivalent to <strong>QueryInterface</strong>, with the following difference: when <strong>QueryInterface</strong> retrieves a reference to an interface, it is guaranteed that you can query the returned interface and get back the original interface. The <strong>GetService</strong> method does not make this guarantee, because the retrieved interface might be implemented by a separate object.</p><p>The <strong>{{MFGetService}}</strong> function is a helper function that queries an object for <strong>{{IMFGetService}}</strong> and calls the <strong>GetService</strong> method.</p> + + + + <p> </p><p>Retrieves a service interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the service.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The service identifier ({{SID}}) of the service. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives the interface reference. The caller must release the interface.</p> </dd> + + + + + <p>Provides timing information from a clock in Microsoft Media Foundation.</p><p>Clocks and some media sinks expose this interface through <strong>QueryInterface</strong>.</p> + <p>The <strong>{{IMFClock}}</strong> interface applies to any kind of clock. The presentation clock exposes the <strong>{{IMFPresentationClock}}</strong> interface in addition to <strong>{{IMFClock}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of values from the <strong>{{MFCLOCK_CHARACTERISTICS_FLAGS}}</strong> enumeration indicating the characteristics of the clock.</p> </dd> + + + + + <p> Retrieves the last clock time that was correlated with system time. </p> + <p>At some fixed interval, a clock correlates its internal clock ticks with the system time. (The system time is the time returned by the high-resolution performance counter.) This method returns:</p><ul> <li> The most recent clock time that was correlated with system time. </li> <li> The system time when the correlation was performed. </li> </ul><p> The clock time is returned in the <em>pllClockTime</em> parameter and is expressed in units of the clock's frequency. If the clock's <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the clock's frequency is 10 {{MHz}} (each clock tick is 100 nanoseconds). Otherwise, you can get the clock's frequency by calling <strong>{{IMFClock::GetProperties}}</strong>. The frequency is given in the <strong>qwClockFrequency</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure returned by that method. </p><p> The system time is returned in the <em>phnsSystemTime</em> parameter, and is always expressed in 100-nanosecond units. </p><p> To find out how often the clock correlates its clock time with the system time, call <strong>GetProperties</strong>. The correlation interval is given in the <strong>qwCorrelationRate</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure. If <strong>qwCorrelationRate</strong> is zero, it means the clock performs the correlation whenever <strong>GetCorrelatedTime</strong> is called. Otherwise, you can calculate the current clock time by extrapolating from the last correlated time. </p><p> Some clocks support rate changes through the <strong>{{IMFRateControl}}</strong> interface. If so, the clock time advances at a speed of frequency ? current rate. If a clock does not expose the <strong>{{IMFRateControl}}</strong> interface, the rate is always 1.0. </p><p>For the presentation clock, the clock time is the presentation time, and is always relative to the starting time specified in <strong>{{IMFPresentationClock::Start}}</strong>. You can also get the presentation time by calling <strong>{{IMFPresentationClock::GetTime}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a time source. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Reserved, must be zero. </p> </dd> + + + <dd> <p> Receives the last known clock time, in units of the clock's frequency. </p> </dd> + + + <dd> <p> Receives the system time that corresponds to the clock time returned in <em>pllClockTime</em>, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Retrieves the clock's continuity key. (Not supported.)</p> + <p>Continuity keys are currently not supported in Media Foundation. Clocks must return the value zero in the <em>pdwContinuityKey</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the continuity key.</p> </dd> + + + + + <p> </p><p>Retrieves the current state of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Receives the clock state, as a member of the <strong>{{MFCLOCK_STATE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the properties of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFCLOCK_PROPERTIES}}</strong> structure that receives the properties.</p> </dd> + + + + + <p>Represents a presentation clock, which is used to schedule when samples are rendered and to synchronize multiple streams.</p> + <p>To create a new instance of the presentation clock, call the {{MFCreatePresentationClock}} function. The presentation clock must have a time source, which is an object that provides the clock times. For example, the audio renderer is a time source that uses the sound card to drive the clock. Time sources expose the {{IMFPresentationTimeSource}} interface. To set the time source, call <strong>SetTimeSource</strong>. The presentation clock does not begin running until the <strong>Start</strong> method is called.</p><p>To get the presentation clock from the Media Session, call {{IMFMediaSession::GetClock}}.</p> + + + + <p> </p><p>Sets the time source for the presentation clock. The time source is the object that drives the clock by providing the current time.</p> + <p>The presentation clock cannot start until it has a time source.</p><p>The time source is automatically registered to receive state change notifications from the clock, through the time source's {{IMFClockStateSink}} interface, which all time sources must implement.</p><p>This time source have a frequency of 10 {{MHz}}. See {{IMFClock::GetClockCharacteristics}}. If not, the method returns {{MF_E_CLOCK_NOT_SIMPLE}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NOT_SIMPLE}}</strong></dt> </dl> </td><td> <p>The time source does not have a frequency of 10 {{MHz}}.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The time source has not been initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the {{IMFPresentationTimeSource}} interface of the time source.</p> </dd> + + + + + <p> </p><p>Retrieves the clock's presentation time source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the time source's {{IMFPresentationTimeSource}} interface. The caller must release the interface.</p> </dd> + + + + + <p> Retrieves the latest clock time. </p> + <p>This method does not attempt to smooth out jitter or otherwise account for any inaccuracies in the clock time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a presentation time source. Call <strong>{{IMFPresentationClock::SetTimeSource}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives the latest clock time, in 100-nanosecond units. The time is relative to when the clock was last started. </p> </dd> + + + + + <p> </p><p>Registers an object to be notified whenever the clock starts, stops, or pauses, or changes rate.</p> + <p>Before releasing the object, call {{IMFPresentationClock::RemoveClockStateSink}} to unregister the object for state-change notifications.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Unregisters an object that is receiving state-change notifications from the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Starts the presentation clock.</p> + <p>This method is valid in all states (stopped, paused, or running).</p><p>If the clock is paused and restarted from the same position (<em>llClockStartOffset</em> is {{PRESENTATION_CURRENT_POSITION}}), the presentation clock sends an {{IMFClockStateSink::OnClockRestart}} notification. Otherwise, the clock sends an {{IMFClockStateSink::OnClockStart}} notification.</p><p>The presentation clock initiates the state change by calling <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> methods. These calls are made asynchronously.</p><p>If the clock is already running, calling <strong>Start</strong> again has the effect of seeking the clock to the new <em>StartOffset</em> position.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Initial starting time, in 100-nanosecond units. At the time the <strong>Start</strong> method is called, the clock's {{IMFPresentationClock::GetTime}} method returns this value, and the clock time increments from there. If the value is {{PRESENTATION_CURRENT_POSITION}}, the clock starts from its current position. Use this value if the clock is paused and you want to restart it from the same position.</p> </dd> + + + + + <p> </p><p>Stops the presentation clock. While the clock is stopped, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} method returns zero.</p> + <p>This method is valid when the clock is running or paused.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockStop}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStop</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses the presentation clock. While the clock is paused, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} returns the time at which the clock was paused.</p> + <p>This method is valid when the clock is running. It is not valid when the clock is paused or stopped.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockPause}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockPause</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already paused.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The clock is stopped. This request is not valid when the clock is stopped.</p> </td></tr> </table><p>?</p> + + + + <p> Provides the clock times for the presentation clock. </p> + <p>This interface is implemented by presentation time sources. A presentation time source is an object that provides the clock time for the presentation clock. For example, the audio renderer is a presentation time source. The rate at which the audio renderer consumes audio samples determines the clock time. If the audio format is 44100 samples per second, the audio renderer will report that one second has passed for every 44100 audio samples it plays. In this case, the timing is provided by the sound card.</p><p>To set the presentation time source on the presentation clock, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> with a reference to the time source's <strong>{{IMFPresentationTimeSource}}</strong> interface.</p><p>A presentation time source must also implement the <strong>{{IMFClockStateSink}}</strong> interface. The presentaton clock uses this interface to notify the time source when the clock state changes.</p><p>Media Foundation provides a presentation time source that is based on the system clock. To create this object, call the <strong>{{MFCreateSystemTimeSource}}</strong> function.</p> + + + + <p> </p><p>Retrieves the underlying clock that the presentation time source uses to generate its clock times.</p> + <p>A presentation time source must support stopping, starting, pausing, and rate changes. However, in many cases the time source derives its clock times from a hardware clock or other device. The underlying clock is always running, and might not support rate changes.</p><p>Optionally, a time source can expose the underlying clock by implementing this method. The underlying clock is always running, even when the presentation time source is paused or stopped. (Therefore, the underlying clock returns the {{MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING}} flag in the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method).</p><p>The underlying clock is useful if you want to make decisions based on the clock times while the presentation clock is stopped or paused.</p><p>If the time source does not expose an underlying clock, the method returns {{MF_E_NO_CLOCK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>This time source does not expose an underlying clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + <p> Called when the presentation clock starts. </p> + <p>This method is called whe the presentation clock's <strong>{{IMFPresentationClock::Start}}</strong> method is called, with the following exception: If the clock is paused and <strong>Start</strong> is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, <strong>{{IMFClockStateSink::OnClockRestart}}</strong> is called instead of <strong>OnClockStart</strong>.</p><p>The clock notifies the presentation time source by calling the time source's <strong>OnClockStart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockStart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockStart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p><p>The value given in <em>llClockStartOffset</em> is the presentation time when the clock starts, so it is relative to the start of the presentation. Media sinks should not render any data with a presentation time earlier than <em>llClockStartOffSet</em>. If a sample straddles the offset?that is, if the offset falls between the sample's start and stop times?the sink should either trim the sample so that only data after <em>llClockStartOffset</em> is rendered, or else simply drop the sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock started, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new starting time for the clock, in 100-nanosecond units. This parameter can also equal <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, indicating the clock has started or restarted from its current position. </p> </dd> + + + + + <p> Called when the presentation clock stops. </p> + <p> When the presentation clock's <strong>{{IMFPresentationClock::Stop}}</strong> method is called, the clock notifies the presentation time source by calling the presentation time source's <strong>OnClockStop</strong> method. This call occurs synchronously within the <strong>Stop</strong> method. If the time source returns an error from <strong>OnClockStop</strong>, the presentation clock's <strong>Stop</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockStop</strong> method is called asynchronously, after the state change is completed. </p><p>If an object is already stopped, it should return <strong>{{S_OK}}</strong> from <strong>OnClockStop</strong>. It should not return an error code. </p><strong>Note</strong>??Although the header file mferror.h defines an error code named <strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong>, it should not be returned in this situation.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong></dt> </dl> </td><td> <p>Deprecated. Do not use this error code.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The system time when the clock stopped, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock pauses. </p> + <p>When the presentation clock's <strong>{{IMFPresentationClock::Pause}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockPause</strong> method. This call occurs synchronously within the <strong>Pause</strong> method. If the time source returns an error from <strong>OnClockPause</strong>, the presentation clock's <strong>Pause</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockPause</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock was paused, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock restarts from the same position while paused. </p> + <p> This method is called if the presentation clock is paused and the <strong>{{IMFPresentationClock::Start}}</strong> method is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>. </p><p> The clock notifies the presentation time source by calling the time source's <strong>OnClockRestart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockRestart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockRestart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock restarted, in 100-nanosecond units. </p> </dd> + + + + + <p>Called when the rate changes on the presentation clock. </p> + <p> When the presentation clock's <strong>{{IMFRateControl::SetRate}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockSetRate</strong> method. This call occurs synchronously within the <strong>SetRate</strong> method. If the time source returns an error from <strong>OnClockSetRate</strong>, the presentation clock's <strong>SetRate</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockSetRate</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the rate was set, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new rate, as a multiplier of the normal playback rate. </p> </dd> + + + + + <p> Describes the details of a presentation. A <em>presentation</em> is a set of related media streams that share a common presentation time. </p> + <p>Presentation descriptors are used to configure media sources and some media sinks. To get the presentation descriptor from a media source, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. To create a new presentation descriptor, call <strong>{{MFCreatePresentationDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the number of stream descriptors in the presentation. Each stream descriptor contains information about one stream in the media source. To retrieve a stream descriptor, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves a stream descriptor for a stream in the presentation. The stream descriptor contains information about the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the stream. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the stream is currently selected, or <strong>{{FALSE}}</strong> if the stream is currently deselected. If a stream is selected, the media source generates data for that stream when <strong>{{IMFMediaSource::Start}}</strong> is called. The media source will not generated data for deselected streams. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>.To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream descriptor's <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a stream in the presentation.</p> + <p> If a stream is selected, the media source will generate data for that stream. The media source will not generated data for deselected streams. To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number to select, indexed from zero. To find the number of streams in the presentation, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong>.</p> </dd> + + + + + <p> </p><p>Deselects a stream in the presentation.</p> + <p> If a stream is deselected, no data is generated for that stream. To select the stream again, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number to deselect, indexed from zero. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method. </p> </dd> + + + + + <p> </p><p>Creates a copy of this presentation descriptor.</p> + <p> This method performs a shallow copy of the presentation descriptor. The stream descriptors are not cloned. Therefore, use caution when modifying the presentation presentation descriptor or its stream descriptors. </p><p> If the original presentation descriptor is from a media source, do not modify the presentation descriptor unless the source is stopped. If you use the presentation descriptor to configure a media sink, do not modify the presentation descriptor after the sink is configured. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the new presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Gets information about one stream in a media source. </p> + <p>A presentation descriptor contains one or more stream descriptors. To get the stream descriptors from a presentation descriptor, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. To create a new stream descriptor, call <strong>{{MFCreateStreamDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an identifier for the stream.</p> + <p>The stream identifier uniquely identifies a stream within a presentation. It does not change throughout the lifetime of the stream. For example, if the presentation changes while the source is running, the index number of the stream may change, but the stream identifier does not.</p><p>In general, stream identifiers do not have a specific meaning, other than to identify the stream. Some media sources may assign stream identifiers based on meaningful values, such as packet identifiers, but this depends on the implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the stream identifier.</p> </dd> + + + + + <p> </p><p>Retrieves a media type handler for the stream. The media type handler can be used to enumerate supported media types for the stream, get the current media type, and set the media type.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Gets and sets media types on an object, such as a media source or media sink. </p> + <p>This interface is exposed by <em>media-type handlers</em>.</p><ul> <li> For media sources, get the media-type handler from the stream descriptor by calling <strong>{{IMFStreamDescriptor::GetMediaTypeHandler}}</strong>.</li> <li>For media sinks, get the media-type handler by calling <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong>.</li> </ul><p>If you are implementing a custom media source or media sink, you can create a simple media-type handler by calling <strong>{{MFCreateSimpleTypeHandler}}</strong>, or you can provide your own implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Queries whether the object supports a specified media type.</p> + <p> If the object supports the media type given in <em>pMediaType</em>, the method returns <strong>{{S_OK}}</strong>. For a media source, it means the source can generate data that conforms to that media type. For a media sink, it means the sink can receive data that conforms to that media type. If the object does not support the media type, the method fails. </p><p> The <em>ppMediaType</em> parameter is optional. If the method fails, the object might use <em>ppMediaType</em> to return a media type that the object does support, and which closely matches the one given in <em>pMediaType</em>. The method is not guaranteed to return a media type in <em>ppMediaType</em>. If no type is returned, this parameter receives a <strong>{{NULL}}</strong> reference. If the method succeeds, this parameter receives a <strong>{{NULL}}</strong> reference. If the caller sets <em>ppMediaType</em> to <strong>{{NULL}}</strong>, this parameter is ignored. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with {{SP2}} and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The object does not support this media type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to check. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the closest matching media type, or receives the value <strong>{{NULL}}</strong>. If non-<strong>{{NULL}}</strong>, the caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> </p><p>Retrieves the number of media types in the object's list of supported media types.</p> + <p> To get the supported media types, call <strong>{{IMFMediaTypeHandler::GetMediaTypeByIndex}}</strong>. </p><p> For a media source, the media type handler for each stream must contain at least one supported media type. For media sinks, the media type handler for each stream might contain zero media types. In that case, the application must provide the media type. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of media types in the list.</p> </dd> + + + + + <p> </p><p>Retrieves a media type from the object's list of supported media types.</p> + <p>Media types are returned in the approximate order of preference. The list of supported types is not guaranteed to be complete. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwIndex</em> parameter is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Zero-based index of the media type to retrieve. To get the number of media types in the list, call <strong>{{IMFMediaTypeHandler::GetMediaTypeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Sets the object's media type.</p> + <p>For media sources, setting the media type means the source will generate data that conforms to that media type. For media sinks, setting the media type means the sink can receive data that conforms to that media type.</p><p>Any implementation of this method should check whether <em>pMediaType</em> differs from the object's current media type. If the types are identical, the method should return {{S_OK}} but avoid releasing and recreating resources unnecessarily. If the types are not identical, the method should validate the new type.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> Invalid request. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the new media type.</p> </dd> + + + + + <p> </p><p>Retrieves the current media type of the object.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p> No media type is set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the major media type of the object. </p> + <p>The major type identifies what kind of data is in the stream, such as audio or video. To get the specific details of the format, call <strong>{{IMFMediaTypeHandler::GetCurrentMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a {{GUID}} that identifies the major type. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p>Provides a timer that invokes a callback at a specified time.</p> + <p>The presentation clock exposes this interface. To get a reference to the interface, call <strong>QueryInterface</strong>.</p> + + + + <p> </p><p>Sets a timer that invokes a callback at the specified time.</p> + <p>If the clock is stopped, the method returns {{MF_S_CLOCK_STOPPED}}. The callback will not be invoked until the clock is started.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The clock was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_CLOCK_STOPPED}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the clock is stopped.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFTIMER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The time at which the timer should fire, in units of the clock's frequency. The time is either absolute or relative to the current time, depending on the value of <em>dwFlags</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. The callback's <strong>Invoke</strong> method is called at the time specified in the <em>llClockTime</em> parameter.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of a cancellation object. The caller must release the interface. To cancel the timer, pass this reference to the <strong>{{IMFTimer::CancelTimer}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Cancels a timer that was set using the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + <p>Because the timer is dispatched asynchronously, the application's timer callback might get invoked even if this method succeeds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Exposed by some Media Foundation objects that must be explicitly shut down. </p> + <p>The following types of object expose <strong>{{IMFShutdown}}</strong>:</p><ul> <li> Content enablers (<strong>{{IMFContentEnabler}}</strong> interface) </li> <li> Input trust authorities (<strong>{{IMFInputTrustAuthority}}</strong> interface) </li> <li> Presentation clocks (<strong>{{IMFPresentationClock}}</strong> interface) </li> <li> Asynchronous {{MFTs}} </li> </ul><p> Any component that creates one of these objects is responsible for calling <strong>Shutdown</strong> on the object before releasing the object. Typically, applications do not create any of these objects directly, so it is not usually necessary to use this interface in an application. </p><p> To obtain a reference to this interface, call <strong>QueryInterface</strong> on the object. </p><p> If you are implementing a custom object, your object can expose this interface, but only if you can guarantee that your application will call <strong>Shutdown</strong>. </p><p>Media sources, media sinks, and <em>synchronous</em> {{MFTs}} should not implement this interface, because the Media Foundation pipeline will not call <strong>Shutdown</strong> on these objects. Asynchronous {{MFTs}} must implement this interface.</p><p> This interface is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p><p> Some Media Foundation interfaces define a <strong>Shutdown</strong> method, which serves the same purpose as <strong>{{IMFShutdown::Shutdown}}</strong> but is not directly related to it. </p> + + + + <p> Shuts down a Media Foundation object and releases all resources associated with the object. </p> + <p>The <strong>{{MFShutdownObject}}</strong> helper function is equivalent to calling this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Queries the status of an earlier call to the <strong>{{IMFShutdown::Shutdown}}</strong> method. </p> + <p>Until <strong>Shutdown</strong> is called, the <strong>GetShutdownStatus</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>If an object's <strong>Shutdown</strong> method is asynchronous, <em>pStatus</em> might receive the value <strong>{{MFSHUTDOWN_INITIATED}}</strong>. When the object is completely shut down, <em>pStatus</em> receives the value <strong>{{MFSHUTDOWN_COMPLETED}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The <strong>Shutdown</strong> method has not been called on this object. </p> </td></tr> </table><p>?</p> + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p>Enables playback of protected content by providing the application with a reference to a content enabler object.</p><p>Applications that play protected content should implement this interface.</p> + <p>A <em>content enabler</em> is an object that performs some action that is required to play a piece of protected content. For example, the action might be obtaining a {{DRM}} license. Content enablers expose the <strong>{{IMFContentEnabler}}</strong> interface, which defines a generic mechanism for content enabler. Content enablers are created inside the protected media path ({{PMP}}) process. However, they must be invoked from the application process. Therefore, the <strong>{{IMFContentProtectionManager}}</strong> interface provides a way for the {{PMP}} Media Session to notify the application.</p><p>To use this interface, do the following:</p><ol> <li> <p>Implement the interface in your application.</p> </li> <li> <p>Create an attribute store by calling <strong>{{MFCreateAttributes}}</strong>.</p> </li> <li> <p>Set the <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> attribute on the attribute store. The attribute value is a reference to your <strong>{{IMFContentProtectionManager}}</strong> implementation.</p> </li> <li> <p>Call <strong>{{MFCreatePMPMediaSession}}</strong> and pass the attribute store in the <em>pConfiguration</em> parameter.</p> </li> </ol><p>If the content requires a content enabler, the application's <strong>BeginEnableContent</strong> method is called. Usually this method called during the <strong>{{IMFMediaSession::SetTopology}}</strong> operation, before the Media Session raises the {{MESessionTopologySet}} event. The application might receive multiple <strong>BeginEnableContent</strong> calls for a single piece of content. The {{MESessionTopologySet}} event signals that the content-enabling process is complete for the current topology. The <strong>BeginEnableContent</strong> method can also be called outside of the <strong>SetTopology</strong> operation, but less commonly.</p><p>Many content enablers send machine-specific data to the network, which can have privacy implications. One of the purposes of the <strong>{{IMFContentProtectionManager}}</strong> interface is to give applications an opportunity to display information to the user and enable to user to opt in or out of the process.</p> + + + + <p>Begins an asynchronous request to perform a content enabling action.</p><p>This method requests the application to perform a specific step needed to acquire rights to the content, using a content enabler object.</p> + <p>Do not block within this callback method. Instead, perform the content enabling action asynchronously on another thread. When the operation is finished, notify the protected media path ({{PMP}}) through the <em>pCallback</em> parameter.</p><p>If you return a success code from this method, you must call <strong>Invoke</strong> on the callback. Conversely, if you return an error code from this method, you must not call <strong>Invoke</strong>. If the operation fails after the method returns a success code, use status code on the <strong>{{IMFAsyncResult}}</strong> object to report the error.</p><p>After the callback is invoked, the {{PMP}} will call the application's <strong>{{IMFContentProtectionManager::EndEnableContent}}</strong> method to complete the asynchronous call.</p><p>This method is not necessarily called every time the application plays protected content. Generally, the method will not be called if the user has a valid, up-to-date license for the content. Internally, the input trust authority ({{ITA}}) determines whether <strong>BeginEnableContent</strong> is called, based on the content provider's {{DRM}} policy. For more information, see Protected Media Path.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFActivate}}</strong> interface of a content enabler object. To create the content enabler, call <strong>{{IMFActivate::ActivateObject}}</strong> and request the <strong>{{IMFContentEnabler}}</strong> interface. The application should use the methods in <strong>{{IMFContentEnabler}}</strong> to complete the content enabling action. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFTopology}}</strong> interface of the pending topology. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. When the operation is complete, the application should call <strong>{{IMFAsyncCallback::Invoke}}</strong> on the callback. </p> </dd> + + + <dd> <p> Reserved. Currently this parameter is always <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Ends an asynchronous request to perform a content enabling action. This method is called by the protected media path ({{PMP}}) to complete an asynchronous call to <strong>{{IMFContentProtectionManager::BeginEnableContent}}</strong>.</p> + <p>When the <strong>BeginEnableContent</strong> method completes asynchronously, the application notifies the {{PMP}} by invoking the asynchronous callback. The {{PMP}} calls <strong>EndEnableContent</strong> on the application to get the result code. This method is called on the application's thread from inside the callback method. Therefore, it must not block the thread that invoked the callback.</p><p>The application must return the success or failure code of the asynchronous processing that followed the call to <strong>BeginEnableContent</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implements one step that must be performed for the user to access media content. For example, the steps might be individualization followed by license acquisition. Each of these steps would be encapsulated by a content enabler object that exposes the <strong>{{IMFContentEnabler}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the type of operation that this content enabler performs.</p> + <p>The following {{GUIDs}} are defined for the <em>pType</em> parameter.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFENABLETYPE_MF_RebootRequired}}</td><td>The user must reboot his or her computer.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateRevocationInformation}}</td><td>Update revocation information.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateUntrustedComponent}}</td><td>Update untrusted components.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV1_LicenseAcquisition}}</td><td>License acquisition for Windows Media Digital Rights Management ({{DRM}}) version 1.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_Individualization}}</td><td>Individualization.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_LicenseAcquisition}}</td><td>License acquisition for Windows Media {{DRM}} version 7 or later.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the type of operation. An application can tailor its user interface ({{UI}}) strings for known operation types. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves a {{URL}} for performing a manual content enabling action.</p> + <p>If the enabling action can be performed by navigating to a {{URL}}, this method returns the {{URL}}. If no such {{URL}} exists, the method returns a failure code.</p><p>The purpose of the {{URL}} depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of {{URL}}</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{URL}} to obtain the license. Call <strong>{{IMFContentEnabler::GetEnableData}}</strong> and submit the data to the {{URL}} as an {{HTTP}} {{POST}} request. To receive notification when the license is acquired, call <strong>{{IMFContentEnabler::MonitorEnable}}</strong>.</td></tr> <tr><td>Revocation</td><td>{{URL}} to a webpage where the user can download and install an updated component.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No {{URL}} is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the {{URL}}. The caller must release the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the number of characters returned in <em>ppwszURL</em>, including the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_URL_TRUST_STATUS}}</strong> enumeration indicating whether the {{URL}} is trusted.</p> </dd> + + + + + <p> </p><p>Retrieves the data for a manual content enabling action.</p> + <p>The purpose of the data depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of data</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{HTTP}} {{POST}} data.</td></tr> <tr><td>Revocation</td><td> <strong>{{MFRR_COMPONENTS}}</strong> structure.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the data. The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer.</p> </dd> + + + + + <p> </p><p>Queries whether the content enabler can perform all of its actions automatically.</p> + <p>If this method returns <strong>{{TRUE}}</strong> in the <em>pfAutomatic</em> parameter, call the <strong>{{IMFContentEnabler::AutomaticEnable}}</strong> method to perform the enabling action.</p><p>If this method returns <strong>{{FALSE}}</strong> in the <em>pfAutomatic</em> parameter, the application must use manual enabling. To do so, call <strong>{{IMFContentEnabler::GetEnableURL}}</strong> and <strong>{{IMFContentEnabler::GetEnableData}}</strong> to get the {{URL}} and data needed for manual enabling.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the content enabler can perform the enabing action automatically.</p> </dd> + + + + + <p> </p><p>Performs a content enabling action without any user interaction.</p> + <p>This method is asynchronous. When the operation is complete, the content enabler sends an {{MEEnablerCompleted}} event. While the operation is in progress, the content enabler might send {{MEEnablerProgress}} events.</p><p>To find out whether the content enabler supports this method, call <strong>{{IMFContentEnabler::IsAutomaticSupported}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Requests notification when the enabling action is completed.</p> + <p>If you use a manual enabling action, call this method to be notified when the operation completes. If this method returns {{S_OK}}, the content enabler will send an {{MEEnablerCompleted}} event when the operation is completed. If the application cancels the operatation before completing it, call <strong>{{IMFContentEnabler::Cancel}}</strong>.</p><p>You do not have to call <strong>MonitorEnable</strong> when you use automatic enabling by calling <strong>{{IMFContentEnabler::AutomaticEnable}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded and no action was required.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels a pending content enabling action.</p> + <p>The content enabler sends an {{MEEnablerCompleted}} event with a status code of {{E_CANCEL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Manages metadata for an object. Metadata is information that describes a media file, stream, or other content. Metadata consists of individual properties, where each property contains a descriptive name and a value. A property may be associated with a particular language.</p><p>To get this interface from a media source, use the <strong>{{IMFMetadataProvider}}</strong> interface.</p> + + + + <p> Sets the language for setting and retrieving metadata. </p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages".</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing an {{RFC}} 1766-compliant language tag.</p> </dd> + + + + + <p> Gets the current language setting.</p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages."</p><p>The <strong>{{IMFMetadata::SetLanguage}}</strong> and <strong>{{IMFMetadata::GetProperty}}</strong> methods set and get metadata for the current language setting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The metadata provider does not support multiple languages.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> No language was set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to a null-terminated string containing an {{RFC}} 1766-compliant language tag. The caller must release the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p> Gets a list of the languages in which metadata is available.</p> + <p> For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages". </p><p> To set the current language, call <strong>{{IMFMetadata::SetLanguage}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a <strong>{{PROPVARIANT}}</strong> that receives the list of languages. The list is returned as an array of null-terminated wide-character strings. Each string in the array is an {{RFC}} 1766-compliant language tag. </p> <p>The returned <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The list might be empty, if no language tags are present. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Sets the value of a metadata property. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the value of the property. For multivalued properties, use a <strong>{{PROPVARIANT}}</strong> with a {{VT_VECTOR}} type.</p> </dd> + + + + + <p> Gets the value of a metadata property.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The requested property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to a null-terminated string that containings the name of the property. To get the list of property names, call <strong>{{IMFMetadata::GetAllPropertyNames}}</strong>.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value of the property. The <strong>{{PROPVARIANT}}</strong> type depends on the property. For multivalued properties, the <strong>{{PROPVARIANT}}</strong> is a <strong>{{VT_VECTOR}}</strong> type. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Deletes a metadata property.</p> + <p>For a media source, deleting a property from the metadata collection does not change the original content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + + + <p> Gets a list of all the metadata property names on this object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. If no properties are available, the <strong>{{PROPVARIANT}}</strong> type is {{VT_EMPTY}}. Otherwise, the <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Gets metadata from a media source or other object.</p><p>If a media source supports this interface, it must expose the interface as a service. To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_METADATA_PROVIDER_SERVICE}}</strong>. Other types of object can expose this interface through <strong>QueryInterface</strong>.</p><p>Use this interface to get a reference to the <strong>{{IMFMetadata}}</strong> interface.</p> + + + + <p> Gets a collection of metadata, either for an entire presentation, or for one stream in the presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No metadata is available for the requested stream or presentation.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. </p> </dd> + + + <dd> <p> If this parameter is zero, the method retrieves metadata that applies to the entire presentation. Otherwise, this <em></em> parameter specifies a stream identifier, and the method retrieves metadata for that stream. To get the stream identifier for a stream, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMetadata}}</strong> interface. Use this interface to access the metadata. The caller must release the interface.</p> </dd> + + + + + <p>Queries the range of playback rates that are supported, including reverse playback.</p><p>To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}.</p> + <p>Applications can use this interface to discover the fastest and slowest playback rates that are possible, and to query whether a given playback rate is supported. Applications obtain this interface from the Media Session. Internally, the Media Session queries the objects in the pipeline. For more information, see How to Determine Supported Rates.</p><p>To get the current playback rate and to change the playback rate, use the <strong>{{IMFRateControl}}</strong> interface.</p><p>Playback rates are expressed as a ratio the normal playback rate. Reverse playback is expressed as a negative rate. Playback is either <em>thinned</em> or <em>non-thinned</em>. In thinned playback, some of the source data is skipped (typically delta frames). In non-thinned playback, all of the source data is rendered.</p><p>You might need to implement this interface if you are writing a pipeline object (media source, transform, or media sink). For more information, see Implementing Rate Control.</p> + + + + <p> </p><p>Retrieves the slowest playback rate supported by the object.</p> + <p>The value returned in <em>plfRate</em> represents a lower bound. Playback at this rate is not guaranteed. Call <strong>{{IMFRateSupport::IsRateSupported}}</strong> to check whether the boundary rate is supported. For example, a component that supports arbitrarily slow rates will return zero in <em>pflRate</em>, and applications should call <strong>IsRateSupported</strong> separately to determine whether the component supports rate 0.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the slowest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the slowest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the slowest thinned playback rate. Otherwise, the method retrieves the slowest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the slowest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Gets the fastest playback rate supported by the object.</p> + <p>For some formats (such as {{ASF}}), thinning means dropping all frames that are not I-frames. If a component produces stream data, such as a media source or a demultiplexer, it should pay attention to the <em>fThin</em> parameter and return {{MF_E_THINNING_UNSUPPORTED}} if it cannot thin the stream.</p><p>If the component processes or receives a stream (most transforms or media sinks), it may ignore this parameter if it does not care whether the stream is thinned. In the Media Session's implementation of rate support, if the transforms do not explicitly support reverse playback, the Media Session will attempt to playback in reverse with thinning but not without thinning. Therefore, most applications will set <em>fThin</em> to <strong>{{TRUE}}</strong> when using the Media Session for reverse playback.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the fastest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the fastest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the fastest thinned playback rate. Otherwise, the method retrieves the fastest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the fastest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Queries whether the object supports a specified playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The object supports the specified rate.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified rate.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method queries whether the object supports the playback rate with thinning. Otherwise, the method queries whether the object supports the playback rate without thinning. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>The playback rate to query.</p> </dd> + + + <dd> <p>If the object does not support the playback rate given in <em>flRate</em>, this parameter receives the closest supported playback rate. If the method returns {{S_OK}}, this parameter receives the value given in <em>flRate</em>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets or sets the playback rate. </p> + <p>Objects can expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}. The Media Session supports this interface. Media sources and transforms support this interface if they support rate changes. Media sinks do not need to support this interface. Media sinks are notified of rate changes through the <strong>{{IMFClockStateSink::OnClockSetRate}}</strong> method.</p><p>For more information, see About Rate Control.</p><p>To discover the playback rates that an object supports, use the <strong>{{IMFRateSupport}}</strong> interface</p> + + + + <p> Sets the playback rate. </p> + <p>The Media Session prevents some transitions between rate boundaries, depending on the current playback state:</p><table> <tr><th>Playback State</th><th>Forward/Reverse</th><th>Forward/Zero</th><th>Reverse/Zero</th></tr> <tr><td>Running</td><td>No</td><td>No</td><td>No</td></tr> <tr><td>Paused</td><td>No</td><td>Yes</td><td>No</td></tr> <tr><td>Stopped</td><td>Yes</td><td>Yes</td><td>Yes</td></tr> </table><p>?</p><p>If the transition is not supported, the method returns <strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong>.</p><p>When a media source completes a call to <strong>SetRate</strong>, it sends the {{MESourceRateChanged}} event. Other pipeline components do not send this event.</p><p>If a media source switches between thinned and non-thinned playback, the streams send an {{MEStreamThinMode}} event to indicate the transition. Events from the media source are not synchronized with events from the media streams. After you receive the {{MESourceRateChanged}} event, you can still receive samples that were queued before the stream switched to thinned or non-thinned mode. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p><p>When the Media Session completes a call to <strong>SetRate</strong>, it sends the {{MESessionRateChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support reverse playback. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support thinning. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p> The object does not support the requested playback rate. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong></dt> </dl> </td><td> <p> The object cannot change to the new rate while in the running state. </p> </td></tr> </table><p>?</p> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the media streams are thinned. Otherwise, the stream is not thinned. For media sources and demultiplexers, the object must thin the streams when this parameter is <strong>{{TRUE}}</strong>. For downstream transforms, such as decoders and multiplexers, this parameter is informative; it notifies the object that the input streams are thinned. For information, see About Rate Control. </p> </dd> + + + <dd> <p> The requested playback rate. Postive values indicate forward playback, negative values indicate reverse playback, and zero indicates scrubbing (the source delivers a single frame). </p> </dd> + + + + + + + + <p> </p><p>Gets the current playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the stream is currently being thinned. If the object does not support thinning, this parameter always receives the value <strong>{{FALSE}}</strong>. This parameter can be <strong>{{NULL}}</strong>. For more information, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the current playback rate.</p> </dd> + + + + + <p>Converts between Society of Motion Picture and Television Engineers ({{SMPTE}}) time codes and 100-nanosecond time units.</p> + <p>If an object supports this interface, it must expose the interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_TIMECODE_SERVICE}}</strong>.</p><p>The Advanced Streaming Format ({{ASF}}) media source exposes this interface.</p> + + + + <p>Starts an asynchronous call to convert Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertTimecodeToHNS}}</strong> to complete the asynchronous request.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>void CreateTimeCode( {{DWORD}} dwFrames, {{DWORD}} dwSeconds, {{DWORD}} dwMinutes, {{DWORD}} dwHours, {{DWORD}} dwRange, {{PROPVARIANT}} *pvar ) +{ {{ULONGLONG}} ullTimecode = (({{ULONGLONG}})dwRange) &lt;&lt; 32; ullTimecode += dwFrames % 10; ullTimecode += (( ({{ULONGLONG}})dwFrames ) / 10) &lt;&lt; 4; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) % 10) &lt;&lt; 8; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) / 10) &lt;&lt; 12; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) % 10) &lt;&lt; 16; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) / 10) &lt;&lt; 20; ullTimecode += (( ({{ULONGLONG}})dwHours ) % 10) &lt;&lt; 24; ullTimecode += (( ({{ULONGLONG}})dwHours ) / 10) &lt;&lt; 28; pvar-&gt;vt = {{VT_I8}}; pvar-&gt;hVal.QuadPart = ({{LONGLONG}})ullTimecode; +} +</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pPropVarTimecode</em> is not <strong>{{VT_I8}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Time in {{SMPTE}} time code to convert. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to <strong>{{VT_I8}}</strong>. The <strong>hVal.QuadPart</strong> member contains the time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>{{PPointer}} to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertTimecodeToHNS}}</strong> method completes asynchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives the converted time.</p> </dd> + + + + + <p>Starts an asynchronous call to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertHNSToTimecode}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The time to convert, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertHNSToTimecode}}</strong> method completes asynchronously.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>{{HRESULT}} ParseTimeCode( const {{PROPVARIANT}}&amp; var, {{DWORD}} *pdwRange, {{DWORD}} *pdwFrames, {{DWORD}} *pdwSeconds, {{DWORD}} *pdwMinutes, {{DWORD}} *pdwHours ) +{ if (var.vt != {{VT_I8}}) { return {{E_INVALIDARG}}; } {{ULONGLONG}} ullTimeCode = ({{ULONGLONG}})var.hVal.QuadPart; {{DWORD}} dwTimecode = ({{DWORD}})(ullTimeCode &amp; 0xFFFFFFFF); *pdwRange = ({{DWORD}})(ullTimeCode &gt;&gt; 32); *pdwFrames = dwTimecode &amp; 0x0000000F; *pdwFrames += (( dwTimecode &amp; 0x000000F0) &gt;&gt; 4 ) * 10; *pdwSeconds = ( dwTimecode &amp; 0x00000F00) &gt;&gt; 8; *pdwSeconds += (( dwTimecode &amp; 0x0000F000) &gt;&gt; 12 ) * 10; *pdwMinutes = ( dwTimecode &amp; 0x000F0000) &gt;&gt; 16; *pdwMinutes += (( dwTimecode &amp; 0x00F00000) &gt;&gt; 20 ) * 10; *pdwHours = ( dwTimecode &amp; 0x0F000000) &gt;&gt; 24; *pdwHours += (( dwTimecode &amp; 0xF0000000) &gt;&gt; 28 ) * 10; return {{S_OK}}; +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the converted time. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to {{VT_I8}}. The <strong>hVal.QuadPart</strong> member contains the converted time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>Controls the master volume level of the audio session associated with the streaming audio renderer ({{SAR}}) and the audio capture source.</p><p>The {{SAR}} and the audio capture source expose this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. For the {{SAR}}, use the service identifier {{MR_POLICY_VOLUME_SERVICE}}. For the audio capture source, use the service identifier {{MR_CAPTURE_POLICY_VOLUME_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or the audio capture source, or call it on the Media Session.</p> + <p>To control the volume levels of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface. The <strong>{{IMFAudioStreamVolume}}</strong> interface is supported by the {{SAR}} only.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> <p>The master volume level of the audio session.</p> </li> <li> <p>The volume level of the channel.</p> </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuaton for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels. To change the volume level of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p> Attenuation (dB) = 20 * log10(<em>Level</em>) </p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Sets the master volume level.</p> + <p>Events outside of the application can change the master volume level. For example, the user can change the volume from the system volume-control program (SndVol). If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Retrieves the master volume level.</p> + <p>If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Mutes or unmutes the audio.</p> + <p>This method does not change the volume level returned by the <strong>{{IMFSimpleAudioVolume::GetMasterVolume}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio.</p> </dd> + + + + + <p> </p><p>Queries whether the audio is muted.</p> + <p>Calling <strong>{{IMFSimpleAudioVolume::SetMasterVolume}}</strong> to set the volume does not change whether the audio is muted.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the audio is muted; otherwise, the audio is not muted.</p> </dd> + + + + + <p>Controls the volume levels of individual audio channels.</p><p>The streaming audio renderer ({{SAR}}) exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MR_STREAM_VOLUME_SERVICE}}</strong>. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + <p>If your application does not require channel-level volume control, you can use the <strong>{{IMFSimpleAudioVolume}}</strong> interface to control the master volume level of the audio session.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> The master volume level of the audio session. </li> <li> The volume level of the channel. </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuation for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p>Attenuation (dB) = 20 * log10(<em>Level</em>)</p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Retrieves the number of channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of channels in the audio stream.</p> </dd> + + + + + <p> </p><p>Sets the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the volume level for the channel.</p> </dd> + + + + + <p> </p><p>Sets the individual volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The array specifies the volume levels for all of the channels. Before calling the method, set each element of the array to the desired volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The method fills the array with the volume level for each channel in the stream.</p> </dd> + + + + + <p>Configures the audio session that is associated with the streaming audio renderer ({{SAR}}). Use this interface to change how the audio session appears in the Windows volume control.</p><p>The {{SAR}} exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MR_AUDIO_POLICY_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + + + + <p> </p><p>Assigns the audio session to a group of sessions.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{GUID}}</strong> that identifies the session group. Groups are application-defined. To create a new session group, assign a new {{GUID}}.</p> </dd> + + + + + <p> </p><p>Retrieves the group of sessions to which this audio session belongs.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the session group.</p> </dd> + + + + + <p> </p><p>Sets the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string that contains the display name.</p> </dd> + + + + + <p> </p><p>Retrieves the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the display name string. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Sets the icon resource for the audio session. The Windows volume control displays this icon. </p> + <p>The icon path has the format "path,index" or "path,-id", where <em>path</em> is the fully qualified path to a {{DLL}}, executable file, or icon file; <em>index</em> is the zero-based index of the icon within the file; and <em>id</em> is a resource identifier. Note that resource identifiers are preceded by a minus sign (-) to distinguish them from indexes. The path can contain environment variables, such as "%windir%". For more information, see <strong>{{IAudioSessionControl::SetIconPath}}</strong> in the Windows {{SDK}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A wide-character string that specifies the icon. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the icon resource for the audio session. The Windows volume control displays this icon.</p> + <p>If the application did not set an icon path, the method returns an empty string ("").</p><p>For more information, see <strong>{{IAudioSessionControl::GetIconPath}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a wide-character string that specifies a shell resource. The format of the string is described in the topic <strong>{{IMFAudioPolicy::SetIconPath}}</strong>. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Callback interface to get media data from the sample-grabber sink. </p> + <p>The sample-grabber sink enables an application to get data from the Media Foundation pipeline without implementing a custom media sink. To use the sample-grabber sink, the application must perform the following steps:</p><ol> <li> <p>Implement the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> </li> <li> <p>Call <strong>{{MFCreateSampleGrabberSinkActivate}}</strong>, passing in the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface reference. This function returns an <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Create a topology that includes an output node with the sink's <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Pass this topology to the Media Session.</p> </li> </ol><p>During playback, the sample-grabber sink calls methods on the application's callback.</p><p>You cannot use the sample-grabber sink to get protected content.</p> + + + + <p> </p><p>Called when the presentation clock is set on the sample-grabber sink.</p> + <p>This method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p> A reference to a buffer that contains the sample data. </p> </dd> + + + <dd> <p> Size of the <em>pSampleBuffer</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink is shut down.</p> + <p>This method is called when the sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method is called.</p><p>The <strong>OnShutdown</strong> method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> + <p>This callback interface is used with the sample-grabber sink. It extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface by adding the <strong>OnProcessSampleEx</strong> method, which supersedes the <strong>{{IMFSampleGrabberSinkCallback::OnProcessSample}}</strong> method.</p><p> The <strong>OnProcessSampleEx</strong> method adds a parameter that contains the attributes for the media sample. You can use the attributes to get information about the sample, such as field dominance and telecine flags. </p><p>To use this interface, do the following: </p><ol> <li>Implement a callback object that exposes the interface.</li> <li>Create the sample-grabber sink by calling the <strong>{{MFCreateSampleGrabberSinkActivate}}</strong> function. Pass the callback reference in the <em>pIMFSampleGrabberSinkCallback</em> parameter.</li> <li>The sample-grabber sink will call <strong>QueryInterface</strong> on the callback object.</li> <li>If the callback object exposes the <strong>{{IMFSampleGrabberSinkCallback2}}</strong> interface, the sample-grabber sink will use the <strong>OnProcessSampleEx</strong> callback method. Otherwise, the sample-grabber sink will use the older <strong>OnProcessSample</strong> callback method.</li> </ol> + + + + <p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type {{GUID}} that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>Sample flags. The sample-grabber sink gets the value of this parameter by calling the <strong>{{IMFSample::GetSampleFlags}}</strong> method of the media sample.</p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong></p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the sample data.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pSampleBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. Use this interface to get the attributes for this sample (if any). For a list of sample attributes, see Sample Attributes.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Registers the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Each source node in the topology defines one branch of the topology. The branch includes every topology node that receives data from that node. An application can assign each branch of a topology its own work queue and then associate those work queues with {{MMCSS}} tasks. </p><p>To use this method, perform the following steps.</p><ol> <li>Create the topology.</li> <li>Set the following attributes on the source nodes in the topology.<ul> <li> <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong>. Specifies an identifier for the work queue. The Media Session will allocate a new work queue.</li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_CLASS}}</strong>. Specifies the {{MMCSS}} class. </li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_TASKID}}</strong>. Specifies the {{MMCSS}} task identifier (optional). If this attribute is not set, {{MMCSS}} assigns a new task identifier. </li> </ul> </li> <li>Queue the topology by calling <strong>{{IMFMediaSession::SetTopology}}</strong>.</li> <li>Wait for the {{MESessionTopologyStatus}} event with the <strong>{{MF_TOPOSTATUS_READY}}</strong> status.</li> <li>Call <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong>. This method registers all of the topology work queues with {{MMCSS}}.</li> </ol><p>The <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong> method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. Within the callback method, call <strong>{{IMFWorkQueueServices::EndRegisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request. After this operation completes, the Media Session automatically registers the work queues for every new topology that is queued on the Media Session. The application does not need to call the method again for new topologies.</p><p>To unregister the topology work queues from {{MMCSS}}, call <strong>{{IMFWorkQueueServices::BeginUnregisterTopologyWorkQueuesWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unregisters the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>There is no work queue with the specified identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p> Associates a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task. </p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndRegisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The platform work queue to register with {{MMCSS}}. See Work Queue Identifiers. To register all of the standard work queues to the same {{MMCSS}} task, set this parameter to <strong>{{MFASYNC_CALLBACK_QUEUE_ALL}}</strong>.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task to be performed. </p> </dd> + + + <dd> <p> The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to register with {{MMCSS}}. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the pwszClass buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Extends the <strong>{{IMFWorkQueueServices}}</strong> interface.</p> + <p>This interface allows applications to control +both platform and topology work queues.</p><p>The <strong>{{IMFWorkQueueServices}}</strong> can be obtained from the session by querying for the <strong>{{MF_WORKQUEUE_SERVICES}}</strong> service.</p> + + + + <p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) string associated with the given topology work queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of the topology work queue. </p> </dd> + + + <dd> <p>Pointer to the buffer the work queue's {{MMCSS}} task id will be copied to.</p> </dd> + + + + + <p>Registers a platform work queue with Multimedia Class Scheduler Service ({{MMCSS}}) using the specified class and task id.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of one of the standard platform work queues.</p> </dd> + + + <dd> <p>The {{MMCSS}} class which the work queue should be registered with.</p> </dd> + + + <dd> <p> The task id which the work queue should be registered with. If <em>dwTaskId</em> is 0, a new {{MMCSS}} bucket will be created.</p> </dd> + + + <dd> <p>The priority.</p> </dd> + + + <dd> <p>Standard callback used for async operations in Media Foundation.</p> </dd> + + + <dd> <p>Standard state used for async operations in Media Foundation.</p> </dd> + + + + + <p>Gets the priority of the Multimedia Class Scheduler Service ({{MMCSS}}) priority associated with the specified platform work queue.</p> + <p>Pointer to a buffer allocated by the caller that the work queue's {{MMCSS}} task id will be copied to.</p> + + + <dd> <p>Topology work queue id for which the info will be returned.</p> </dd> + + + <dd></dd> + + + + + <p> Adjusts playback quality. This interface is exposed by the quality manager. </p> + <p>Media Foundation provides a default quality manager that is tuned for playback. Applications can provide a custom quality manager to the Media Session by setting the <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> attribute when creating the Media Session.</p> + + + + <p> </p><p>Called when the Media Session is about to start playing a new topology.</p> + <p>In a typical quality manager this method does the following:</p><ol> <li> <p>Enumerates the nodes in the topology.</p> </li> <li> <p>Calls <strong>{{IMFTopologyNode::GetObject}}</strong> to get the node's underlying object.</p> </li> <li> <p>Queries for the <strong>{{IMFQualityAdvise}}</strong> interface.</p> </li> </ol><p>The quality manager can then use the <strong>{{IMFQualityAdvise}}</strong> references to adjust audio-video quality as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the new topology. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the previous topology.</p> </dd> + + + + + <p> </p><p>Called when the Media Session selects a presentation clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the presentation clock.</p> </dd> + + + + + <p> </p><p>Called when the media processor is about to deliver an input sample to a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the input stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample.</p> </dd> + + + + + <p> </p><p>Called after the media processor gets an output sample from a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the output stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the output sample.</p> </dd> + + + + + <p> </p><p>Called when a pipeline component sends an {{MEQualityNotify}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Called when the Media Session is shutting down.</p> + <p>The quality manager should release all references to the Media Session when this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the quality manager to adjust the audio or video quality of a component in the pipeline.</p><p>This interface is exposed by pipeline components that can adjust their quality. Typically it is exposed by decoders and stream sinks. For example, the enhanced video renderer ({{EVR}}) implements this interface. However, media sources can also implement this interface.</p><p>To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_QUALITY_SERVICES}}. For all other pipeline objects (transforms and media sinks), call <strong>QueryInterface</strong>.</p> + <p>The quality manager typically obtains this interface when the quality manager's <strong>{{IMFQualityManager::NotifyTopology}}</strong> method is called.</p> + + + + <p> </p><p>Sets the drop mode. In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode.</p> + <p>If this method is called on a media source, the media source might switch between thinned and non-thinned output. If that occurs, the affected streams will send an {{MEStreamThinMode}} event to indicate the transition. The operation is asynchronous; after <strong>SetDropMode</strong> returns, you might receive samples that were queued before the transition. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_DROP_MODES}}</strong></dt> </dl> </td><td> <p>The component does not support the specified mode or any higher modes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the quality level. The quality level determines how the component consumes or produces samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_QUALITY_LEVELS}}</strong></dt> </dl> </td><td> <p>The component does not support the specified quality level or any levels below it.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current drop mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current quality level.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Drops samples over a specified interval of time.</p> + <p>Ideally the quality manager can prevent a renderer from falling behind. But if this does occur, then simply lowering quality does not guarantee the renderer will ever catch up. As a result, audio and video might fall out of sync. To correct this problem, the quality manager can call <strong>DropTime</strong> to request that the renderer drop samples quickly over a specified time interval. After that period, the renderer stops dropping samples.</p><p>This method is primarily intended for the video renderer. Dropped audio samples cause audio glitching, which is not desirable.</p><p>If a component does not support this method, it should return {{MF_E_DROPTIME_NOT_SUPPORTED}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DROPTIME_NOT_SUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Amount of time to drop, in 100-nanosecond units. This value is always absolute. If the method is called multiple times, do not add the times from previous calls.</p> </dd> + + + + + <p>Enables a pipeline object to adjust its own audio or video quality, in response to quality messages.</p> + <p>This interface enables a pipeline object to respond to quality messages from the media sink. Currently, it is supported only for video decoders.</p><p>If a video decoder exposes <strong>{{IMFQualityAdvise}}</strong> but not <strong>{{IMFQualityAdvise2}}</strong>, the quality manager controls quality adjustments for the decoder. In this case, the quality manager responds to {{MEQualityNotify}} events from the Enhanced Video Renderer ({{EVR}}) by calling <strong>{{IMFQualityAdvise}}</strong> methods on the decoder.</p><p>If the decoder exposes <strong>{{IMFQualityAdvise2}}</strong>, the quality manager forwards the {{MEQualityNotify}} events to the decoder and does not adjust the decoder's quality settings. The decoder should respond to these events by adjusting its own quality settings internally.</p><p>The preceding remarks apply to the default implementation of the quality manager; custom quality managers can implement other behaviors.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Forwards an {{MEQualityNotify}} event from the media sink.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries an object for the number of <em>quality modes</em> it supports. Quality modes are used to adjust the trade-off between quality and speed when rendering audio or video.</p><p>The default presenter for the <em>enhanced video renderer</em> ({{EVR}}) implements this interface. The {{EVR}} uses the interface to respond to quality messages from the quality manager.</p> + + + + <p>Gets the maximum <em>drop mode</em>. A higher drop mode means that the object will, if needed, drop samples more aggressively to match the presentation clock.</p> + <p>To get the current drop mode, call the <strong>{{IMFQualityAdvise::GetDropMode}}</strong> method. To set the drop mode, call the <strong>{{IMFQualityAdvise::SetDropMode}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the maximum drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the minimum quality level that is supported by the component.</p> + <p>To get the current quality level, call the <strong>{{IMFQualityAdvise::GetQualityLevel}}</strong> method. To set the quality level, call the <strong>{{IMFQualityAdvise::SetQualityLevel}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the minimum quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}).</p><p>Any pipeline object that creates worker threads should implement this interface.</p> + <p>Media Foundation provides a mechanism for applications to associate branches in the topology with {{MMCSS}} tasks. A topology branch is defined by a source node in the topology and all of the nodes downstream from it. An application registers a topology branch with {{MMCSS}} by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node and then calling <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong>.</p><p>When the application registers a topology branch with {{MMCSS}}, the Media Session queries every pipeline object in that branch for the <strong>{{IMFRealTimeClient}}</strong> interface. If the object exposes the interface, the Media Session calls <strong>RegisterThreads</strong>.</p><p>When the application unregisters the topology branch, the Media Session calls <strong>UnregisterThreads</strong>.</p><p>If a pipeline object creates its own worker threads but does not implement this interface, it can cause priority inversions in the Media Foundation pipeline, because high-priority processing threads might be blocked while waiting for the component to process data on a thread with lower priority.</p><p>Pipeline objects that do not create worker threads do not need to implement this interface.</p><p>In Windows?8, this interface is extended with <strong>{{IMFRealTimeClientEx}}</strong>.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p> The object's worker threads should register themselves with {{MMCSS}} by calling <strong>AvSetMmThreadCharacteristics</strong>, using the task name and identifier specified in this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{MMCSS}} task identifier. </p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + + + <p> Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>The object's worker threads should unregister themselves from {{MMCSS}} by calling <strong>AvRevertMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue for the topology branch that contains this object.</p> + <p> An application can register a branch of the topology to use a private work queue. The Media Session notifies any pipeline object that supports <strong>{{IMFRealTimeClient}}</strong> by calling <strong>SetWorkQueue</strong> with the application's work queue identifier. </p><p>When the application unregisters the topology branch, the Media Session calls <strong>SetWorkQueue</strong> again with the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue, or the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. See Remarks. </p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}). </p><p>This interface is a replacement for the <strong>{{IMFRealTimeClient}}</strong> interface.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>If the object does not create worker threads, the method should simply return {{S_OK}} and take no further action. </p><p>Otherwise, if the value of <code>*pdwTaskIndex</code> is zero on input, the object should perform the following steps:</p><ol> <li>A single worker thread calls <strong>AvSetMmThreadCharacteristics</strong> to create a new {{MMCSS}} task identifier. Store this value.</li> <li>Any additional worker threads call <strong>AvSetMmThreadCharacteristics</strong> using the new task identifier.</li> <li>Return the new task identifier to the caller, by setting <code>*pdwTaskIndex</code> equal to the task identifier.</li> </ol><p>If the value of <code>*pdwTaskIndex</code> is nonzero on input, the parameter contains an existing {{MMCSS}} task identifer. In that case, all worker threads of the object should register themselves for that task by calling <strong>AvSetMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MMCSS}} task identifier. If the value is zero on input, the object should create a new {{MCCSS}} task group. See Remarks.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread.</p> </dd> + + + + + <p>Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue that this object should use for asynchronous work items. </p> + <p>The object should use the values of <em>dwMultithreadedWorkQueueId</em> and <em>lWorkItemBasePriority</em> when it queues new work items. Use the <strong>{{MFPutWorkItem2}}</strong> or <strong>{{MFPutWorkItemEx2}}</strong> function to queue the work item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The work queue identifier.</p> </dd> + + + <dd> <p>The base priority for work items.</p> </dd> + + + + + <p>Implemented by the Sequencer Source. The sequencer source enables an application to create a sequence of topologies. To create the sequencer source, call <strong>{{MFCreateSequencerSource}}</strong>. For step-by-step instructions about how to create a playlist, see How to Create a Playlist.</p> + + + + <p> </p><p>Adds a topology to the end of the queue.</p> + <p>The sequencer plays topologies in the order they are queued. You can queue as many topologies as you want to preroll.</p><p>The application must indicate to the sequencer when it has queued the last topology on the Media Session. To specify the last topology, set the SequencerTopologyFlags_Last flag in the <em>dwFlags</em> parameter when you append the topology. The sequencer uses this information to end playback with the pipeline. Otherwise, the sequencer waits indefinitely for a new topology to be queued.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The source topology node is missing one of the following attributes:</p> <ul> <li> <p> <strong>{{MF_TOPONODE_STREAM_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_PRESENTATION_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_SOURCE}}</strong> </p> </li> </ul> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology. This reference cannot be <strong>{{NULL}}</strong>. If an application passes <strong>{{NULL}}</strong>, the call fails with an {{E_INVALIDARG}} error code.</p> </dd> + + + <dd> <p>A combination of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier for this topology.</p> </dd> + + + + + <p> </p><p>Deletes a topology from the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The sequencer element identifier of the topology to delete.</p> </dd> + + + + + <p> </p><p>Maps a presentation descriptor to its associated sequencer element identifier and the topology it represents.</p> + <p>The topology returned in <em>ppTopology</em> is the original topology that the application specified in <strong>AppendTopology</strong>. The source nodes in this topology contain references to the native sources. Do not queue this topology on the Media Session. Instead, call <strong>{{IMFMediaSourceTopologyProvider::GetMediaSourceTopology}}</strong> to get the sequencer source's modified topology. The source nodes in the modified topology contain references to the sequencer source, rather than the native sources.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The presentation descriptor is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_SEQUENCER_CONTEXT_CANCELED}}</strong></dt> </dl> </td><td> <p>This segment was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier. This value is assigned by the sequencer source when the application calls <strong>{{IMFSequencerSource::AppendTopology}}</strong>. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the original topology that the application added to the sequencer source. The caller must release the interface. This parameter can receive the value <strong>{{NULL}}</strong> if the sequencer source has switched to the next presentation. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Updates a topology in the queue.</p> + <p>This method is asynchronous. When the operation is completed, the sequencer source sends an {{MESequencerSourceTopologyUpdated}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The sequencer source has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the updated topology object.</p> </dd> + + + + + <p> </p><p>Updates the flags for a topology in the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + + + <p>Enables an application to get a topology from the sequencer source. This interface is exposed by the sequencer source object.</p> + + + + <p> </p><p>Returns a topology for a media source that builds an internal topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. For example, a <strong>{{NULL}}</strong> input parameter, or the presentation descriptor is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get this reference, either call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> on the media source, or get the reference from the {{MENewPresentation}} event.</p> </dd> + + + <dd> <p>Receives a reference to the topology's <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p>Updates the attributes of one or more nodes in the Media Session's current topology.</p><p>The Media Session exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE}}.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute.</p> + + + + <p> </p><p>Updates the attributes of one or more nodes in the current topology.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute. The method ignores any other attributes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The number of elements in the <em>pUpdates</em> array.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MFTOPONODE_ATTRIBUTE_UPDATE}}</strong> structures. Each element of the array updates one attribute on a node.</p> </dd> + + + + + <p> Controls how a byte stream buffers data from a network. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + <p> If a byte stream implements this interface, a media source can use it to control how the byte stream buffers data. This interface is designed for byte streams that read data from a network. </p><p> A byte stream that implements this interface should also implement the <strong>{{IMFMediaEventGenerator}}</strong> interface. When the byte stream starts buffering, it sends an {{MEBufferingStarted}} event. When it stops buffering, it sends an {{MEBufferingStopped}} event. </p><p> The byte stream must send a matching {{MEBufferingStopped}} event for every {{MEBufferingStarted}} event. The byte stream must not send {{MEBufferingStarted}} events unless the media source has enabled buffering by calling <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>. </p><p> After the byte stream sends an {{MEBufferingStarted}} event, it should send {{MEBufferingStopped}} if any of the following occur: </p><ul> <li> The byte stream finishes buffering data. </li> <li> The byte stream reaches the end of the stream. </li> <li> The media source calls <strong>EnableBuffering</strong> with the value <strong>{{FALSE}}</strong>. </li> <li> The media source calls <strong>StopBuffering</strong>. </li> </ul><p> The byte stream should not send any more buffering events after it reaches the end of the file. </p><p> If buffering is disabled, the byte stream does not send any buffering events. Internally, however, it might still buffer data while it waits for I/O requests to complete. Therefore, <strong>{{IMFByteStream}}</strong> methods might take an indefinite length of time to complete. </p><p> If the byte stream is buffering data internally and the media source calls <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>, the byte stream can send {{MEBufferingStarted}} immediately. </p><p> After the presentation has started, the media source should forward and {{MEBufferingStarted}} and {{MEBufferingStopped}} events that it receives while started. The Media Session will pause the presentation clock while buffering is progress and restart the presentation clock when buffering completes. The media source should only forward these events while the presentation is playing. The purpose of sending these events to the Media Session is to pause the presentation time while the source buffers data. </p> + + + + <p> </p><p>Sets the buffering parameters.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFBYTESTREAM_BUFFERING_PARAMS}}</strong> structure that contains the buffering parameters. The byte stream uses this information to calculate how much data to buffer from the network.</p> </dd> + + + + + <p> </p><p>Enables or disables buffering.</p> + <p>Before calling this method, call <strong>{{IMFByteStreamBuffering::SetBufferingParams}}</strong> to set the buffering parameters on the byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether the byte stream buffers data. If <strong>{{TRUE}}</strong>, buffering is enabled. If <strong>{{FALSE}}</strong>, buffering is disabled.</p> </dd> + + + + + <p> </p><p>Stops any buffering that is in progress.</p> + <p>If the byte stream is currently buffering data, it stops and sends an {{MEBufferingStopped}} event. If the byte stream is not currently buffering, this method has no effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The byte stream successfully stopped buffering.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No buffering was in progress.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how a network byte stream transfers data to a local cache. Optionally, this interface is exposed by byte streams that read data from a network, for example, through {{HTTP}}. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Stops the background transfer of data to the local cache.</p> + <p>The byte stream resumes transferring data to the cache if the application does one of the following:</p><ul> <li>Reads data from the byte stream.</li> <li>Calls the byte stream's <strong>{{IMFByteStreamBuffering::EnableBuffering}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks a byte stream by time position.</p> + <p>A byte stream can implement this interface if it supports time-based seeking. For example, a byte stream that reads data from a server might implement the interface. Typically, a local file-based byte stream would not implement it.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Queries whether the byte stream supports time-based seeking.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the byte stream supports time-based seeking, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Seeks to a new position in the byte stream.</p> + <p>If the byte stream reads from a server, it might cache the seek request until the next read request. Therefore, the byte stream might not send a request to the server immediately.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new position, in 100-nanosecond units.</p> </dd> + + + + + <p>Gets the result of a time-based seek.</p> + <p>This method returns the server response from a previous time-based seek. </p><strong>Note</strong>??This method normally cannot be invoked until some data is read from the byte stream, because the <strong>{{IMFByteStreamTimeSeek::TimeSeek}}</strong> method does not send a server request immediately.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The byte stream does not support time-based seeking, or no data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the new position after the seek, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the stop time, in 100-nanosecond units. If the stop time is unknown, the value is zero.</p> </dd> + + + <dd> <p>Receives the total duration of the file, in 100-nanosecond units. If the duration is unknown, the value is ?1.</p> </dd> + + + + + <p>Controls how a network byte stream transfers data to a local cache. This interface extends the <strong>{{IMFByteStreamCacheControl}}</strong> interface.</p> + <p>Byte streams object in Microsoft Media Foundation can optionally implement this interface. To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object. </p> + + + + <p>Gets the ranges of bytes that are currently stored in the cache.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of ranges returned in the <em>ppRanges</em> array.</p> </dd> + + + <dd> <p>Receives an array of <strong>{{MF_BYTE_STREAM_CACHE_RANGE}}</strong> structures. Each structure specifies a range of bytes stored in the cache. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Limits the cache size.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The maximum number of bytes to store in the cache, or <strong>{{ULONGLONG_MAX}} </strong> for no limit. The default value is no limit.</p> </dd> + + + + + <p>Queries whether background transfer is active.</p> + <p>Background transfer might stop because the cache limit was reached (see <strong>{{IMFByteStreamCacheControl2::SetCacheLimit}}</strong>) or because the <strong>{{IMFByteStreamCacheControl::StopBackgroundTransfer}}</strong> method was called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if background transfer is currently active, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Sets the user name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the user name. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the user name is encrypted. Otherwise, the user name is not encrypted.</p> </dd> + + + + + <p> </p><p>Sets the password.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the password. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the password is encrypted. Otherwise, the password is not encrypted.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Retrieves the password.</p> + <p>If the password is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the password. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Queries whether logged-on credentials should be used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If logged-on credentials should be used, the value is <strong>{{TRUE}}</strong>. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Implemented by applications to provide user credentials for a network source.</p><p>To use this interface, implement it in your application. Then create a property store object and set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property. The value of the property is a reference to your application's <strong>{{IMFNetCredentialManager}}</strong> interface. Then pass the property store to one of the source resolver's creation functions, such as <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong>, in the <em>pProps</em> parameter.</p><p>Media Foundation does not provide a default implementation of this interface. Applications that support authentication must implement this interface.</p> + + + + <p> </p><p>Begins an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFNetCredentialManagerGetParam}}</strong> structure.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{IMFAsyncResult}}</strong> interface that contains the asynchronous result.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface, which is used to retrieve the credentials. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Specifies whether the user's credentials succeeded in the authentication challenge. The network source calls this method to informs the application whether the user's credentials were authenticated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p>Boolean value. The value is <strong>{{TRUE}}</strong> if the credentials succeeded in the authentication challenge. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets credentials from the credential cache.</p><p>This interface is implemented by the credential cache object. Applications that implement the <strong>{{IMFNetCredentialManager}}</strong> interface can use this object to store the user's credentials. To create the credential cache object, call <strong>{{MFCreateCredentialCache}}</strong>.</p> + + + + <p> </p><p>Retrieves the credential object for the specified {{URL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string containing the {{URL}} for which the credential is needed.</p> </dd> + + + <dd> <p>A null-terminated wide-character string containing the realm for the authentication.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetAuthenticationFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialRequirements}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Reports whether the credential object provided successfully passed the authentication challenge.</p> + <p>This method is called by the network source into the credential manager.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the credential object succeeded in the authentication challenge; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Specifies how user credentials are stored.</p> + <p>If no flags are specified, the credentials are cached in memory. This method can be implemented by the credential manager and called by the network source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface. Obtain this reference by calling <strong>{{IMFNetCredentialCache::GetCredential}}</strong>.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialOptions}}</strong> enumeration.</p> </dd> + + + + + <p>Implemented by a client and called by Microsoft Media Foundation to get the client Secure Sockets Layer ({{SSL}}) certificate requested by the server. </p><p>In most {{HTTPS}} connections the server provides a certificate so that the client can ensure the identity of the server. However, in certain cases the server might wants to verify the identity of the client by requesting the client to send a certificate. For this scenario, a client application must provide a mechanism for Media Foundation to retrieve the client side certificate while opening an {{HTTPS}} {{URL}} with the source resolver or the scheme handler. The application must implement <strong>{{IMFSSLCertificateManager}}</strong>, set the <strong>{{IUnknown}}</strong> reference of the implemented object in the {{MFNETSOURCE_SSLCERTIFICATE_MANAGER}} property, and pass the property store to the source resolver. While opening the {{URL}}, Media Foundation calls the <strong>{{IMFSSLCertificateManager}}</strong> methods to get the certificate information. If the application needs to connect to {{HTTPS}} {{URL}} that requires a client-side certificate, or the application wants customized control over the type of server certificates to accept, then they can implement this interface. This interface can also be used by the application to validate the server {{SSL}} certificate.</p><p>If the <strong>{{IUnknown}}</strong> reference is not provided by the application and the {{HTTPS}} {{URL}} does not require the client to provide a certificate, +Media Foundation uses the default implementation to open the {{URL}}. +</p> + + + + <p>Gets the client {{SSL}} certificate synchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>Pointer to the buffer that stores the certificate. +This caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that receives the number of bytes required to hold the certificate data in the buffer pointed by <em>*ppbData</em>.</p> </dd> + + + + + <p>Starts an asynchronous call to get the client {{SSL}} certificate.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSSLCertificateManager::EndGetClientCertificate}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to get the client {{SSL}} certificate. </p> + <p>Call this method after the <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the buffer that stores the certificate. +The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer, in bytes.</p> </dd> + + + + + <p>Indicates whether the server {{SSL}} certificate must be verified by the caller, Media Foundation, or the <strong>{{IMFSSLCertificateManager}}</strong> implementation class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a string that contains the {{URL}} that is sent to the server.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if <strong>{{IMFSSLCertificateManager::OnServerCertificate}}</strong> is used to verify the server certificate. +Set to <strong>{{FALSE}}</strong> if Media Foundation verifies the server certificate by using the certificates in the Windows certificate store. +</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if the {{SSL}} certificate for the client is available for immediate retrieval. Media Foundation calls <strong>{{IMFSSLCertificateManager::GetClientCertificate}}</strong> to obtain the client certificate synchronously. If the value is set to <strong>{{FALSE}}</strong>, Media Foundation obtains the client {{SSL}} certificate with an asynchronous call to <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong>.</p> </dd> + + + + + <p>Called by Media Foundation when the server {{SSL}} certificate has been received; indicates whether the server certificate is accepted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} used to send the request to the server, and for which a server-side {{SSL}} certificate has been received.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the server {{SSL}} certificate.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that indicates the size of <em>pbData</em> in bytes.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> variable that indicates whether the certificate is accepted.</p> </dd> + + + + + <p>Notifies the application when a byte stream requests a {{URL}}, and enables the application to block {{URL}} redirection.</p> + <p>To set the callback interface:</p><ol> <li>Query the byte stream object for the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Call <strong>{{IMFAttributes::SetUnknown}}</strong> to set the {{MFNETSOURCE_RESOURCE_FILTER}} attribute.</li> </ol> + + + + <p>Called when the byte stream redirects to a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} to which the connection has been redirected.</p> </dd> + + + <dd> <p>To cancel the redirection, set this parameter to <strong>{{VARIANT_TRUE}}</strong>. To allow the redirection, set this parameter to <strong>{{VARIANT_FALSE}}</strong>.</p> </dd> + + + + + <p>Called when the byte stream requests a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} that the byte stream is requesting.</p> </dd> + + + + + <p>Callback interface to receive notifications from a network source on the progress of an asynchronous open operation.</p> + + + + <p> </p><p>Called by the network source when the open operation begins or ends.</p> + <p>The networks source calls this method with the following event types.</p><ul> <li> <p> {{MEConnectStart}} </p> </li> <li> <p> {{MEConnectEnd}} </p> </li> </ul><p>For more information, see How to Get Events from the Network Source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface.</p> </dd> + + + + + <p>Determines the proxy to use when connecting to a server. The network source uses this interface.</p><p>Applications can create the proxy locator configured by the application by implementing the <strong>{{IMFNetProxyLocatorFactory}}</strong> interface and setting the <strong>{{MFNETSOURCE_PROXYLOCATORFACTORY}}</strong> property on the source resolver. Otherwise, the network source uses the default Media Foundation implementation.</p><p>To create the default proxy locator, call <strong>{{MFCreateProxyLocator}}</strong>.</p> + + + + <p> </p><p>Initializes the proxy locator object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string containing the hostname of the destination server.</p> </dd> + + + <dd> <p>Null-terminated wide-character string containing the destination {{URL}}.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Determines the next proxy to use.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>There are no more proxy objects.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Keeps a record of the success or failure of using the current proxy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p><strong>{{HRESULT}}</strong> specifying the result of using the current proxy for connection.</p> </dd> + + + + + <p> </p><p>Retrieves the current proxy information including hostname and port.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pszStr</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives a null-terminated string containing the proxy hostname and port. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the number of elements in the <em>pszStr</em> array. On output, receives the required size of the buffer.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the default proxy locator.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the new proxy locator object's <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Persists media data from a source byte stream to an application-provided byte stream.</p><p>The byte stream used for {{HTTP}} download implements this interface. To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the byte stream, with the service identifier {{MFNET_SAVEJOB_SERVICE}}.</p> + + + + <p> </p><p>Begins saving a Windows Media file to the application's byte stream.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSaveJob::EndSave}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of the application's byte stream. The data from the source byte stream is written to this byte stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the percentage of content saved to the provided byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the percentage of completion.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves a supported protocol by index</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value passed in the <em>nProtocolIndex</em> parameter was greater than the total number of supported protocols, returned by <strong>GetNumberOfSupportedProtocols</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the protocol to retrieve. To get the number of supported protocols, call <strong>{{IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols}}</strong>.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MFNETSOURCE_PROTOCOL_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Not implemented in this release.</p> + <p>This method returns {{S_OK}}.</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request to create an object from a {{URL}}.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the Invoke method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create an object from a {{URL}}.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p><p>The operation cannot be canceled if <strong>BeginCreateObject</strong> returns <strong>{{NULL}}</strong> in the <em>ppIUnknownCancelCookie</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSchemeHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> Creates a media source from a byte stream. </p> + <p>Applications do not use this interface directly. This interface is exposed by byte-stream handlers, which are used by the source resolver. When the byte-stream handler is given a byte stream, it parses the stream and creates a media source. Byte-stream handlers are registered by file name extension or {{MIME}} type.</p> + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the {{MF_RESOLUTION_MEDIASOURCE}} flag and should not contain the {{MF_RESOLUTION_BYTESTREAM}} flag.</p><p>The byte-stream handler is responsible for parsing the stream and validating the contents. If the stream is not valid or the byte stream handler cannot parse the stream, the handler should return a failure code. The byte stream is not guaranteed to match the type of stream that the byte handler is designed to parse.</p><p>If the <em>pwszURL</em> parameter is not <strong>{{NULL}}</strong>, the byte-stream handler might use the {{URL}} during the resolution process. (For example, it might use the file name extension, if present.) Also, the byte stream might contain the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute, specifying the {{MIME}} type.</p><p>When the operation completes, the byte-stream handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFByteStreamHandler::EndCreateObject}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>String that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of zero or more flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The byte-stream handler can use this property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled. See <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create a media source.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFByteStreamHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the maximum number of bytes needed to create the media source or determine that the byte stream handler cannot parse this stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the maximum number of bytes that are required.</p> </dd> + + + + + <p> Implemented by components that provide input trust authorities ({{ITAs}}). This interface is used to get the {{ITA}} for each of the component's streams. </p> + + + + <p> </p><p>Retrieves the input trust authority ({{ITA}}) for a specified stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The {{ITA}} does not expose the requested interface.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream identifier for which the {{ITA}} is being requested.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. Currently the only supported value is {{IID_IMFInputTrustAuthority}}.</p> </dd> + + + <dd> <p>Receives a reference to the {{ITA}}'s <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables other components in the protected media path ({{PMP}}) to use the input protection system provided by an input trust authorities ({{ITA}}). An {{ITA}} is a component that implements an input protection system for media content. {{ITAs}} expose the <strong>{{IMFInputTrustAuthority}}</strong> interface.</p><p>An {{ITA}} translates policy from the content's native format into a common format that is used by other {{PMP}} components. It also provides a decrypter, if one is needed to decrypt the stream.</p><p>The topology contains one {{ITA}} instance for every protected stream in the media source. The {{ITA}} is obtained from the media source by calling <strong>{{IMFTrustedInput::GetInputTrustAuthority}}</strong>.</p> + + + + <p> </p><p>Retrieves a decrypter transform.</p> + <p>The decrypter should be created in a disabled state, where any calls to <strong>{{IMFTransform::ProcessOutput}}</strong> automatically fail. After the input trust authority ({{ITA}}) has verified that it is running inside the protected media path ({{PMP}}), the {{ITA}} should enable the decrypter.</p><p>An {{ITA}} is not required to provide a decrypter. If the source content is not encrypted, the method should return {{MF_E_NOT_PROTECTED}}. The {{PMP}} will then proceed without using a decrypter for that stream.</p><p>The {{ITA}} must create a new instance of its decrypter for each call to <strong>GetDecrypter</strong>. Do not return multiple references to the same decrypter. They must be separate instances because the Media Session might place them in two different branches of the topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The decrypter does not support the requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_PROTECTED}}</strong></dt> </dl> </td><td> <p>This input trust authority ({{ITA}}) does not provide a decrypter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface being requested. Currently this value must be {{IID_IMFTransform}}, which requests the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Requests permission to perform a specified action on the stream.</p> + <p>This method verifies whether the user has permission to perform a specified action on the stream. The {{ITA}} does any work needed to verify the user's right to perform the action, such as checking licenses.</p><p>To verify the user's rights, the {{ITA}} might need to perform additional steps that require interaction with the user or consent from the user. For example, it might need to acquire a new license or individualize a {{DRM}} component. In that case, the {{ITA}} creates an activation object for a content enabler and returns the activation object's <strong>{{IMFActivate}}</strong> interface in the <em>ppContentEnablerActivate</em> parameter. The activation object is responsible for creating a content enabler that exposes the <strong>{{IMFContentEnabler}}</strong> interface. The content enabler is used as follows:</p><ol> <li> <p>The Media Session returns the <strong>{{IMFActivate}}</strong> reference to the application.</p> </li> <li> <p>The application calls <strong>{{IMFActivate::ActivateObject}}</strong> to activate the content enabler.</p> </li> <li> <p>The application calls <strong>{{IMFContentEnabler}}</strong> methods to perform whatever actions are needed, such as individualization or obtaining a license. The content enabler object must encapsulate this functionality through the <strong>{{IMFContentEnabler}}</strong> interface.</p> </li> <li> <p>The Media Session calls <strong>RequestAccess</strong> again.</p> </li> </ol><p>The return value signals whether the user has permission to perform the action:</p><ul> <li> <p>If the user already has permission to perform the action, the method returns {{S_OK}} and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the user does not have permission, the method returns a failure code and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the {{ITA}} must perform additional steps that require interaction with the user, the method returns a failure code and returns the content enabler's <strong>{{IMFActivate}}</strong> reference in <em>ppContentEnablerActivate</em>.</p> </li> </ul><p>The Media Session will not allow the action unless this method returns {{S_OK}}. However, a return value of {{S_OK}} does not guarantee that the action will be performed, because some other failure might occur after this method is called. When the action is definitely about to happen, the Media Session calls <strong>{{IMFInputTrustAuthority::BindAccess}}</strong>.</p><p>A stream can go to multiple outputs, so this method might be called multiple times with different actions, once for every output.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The user has permission to perform this action.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_NEEDS_INDIVIDUALIZATION}}</strong></dt> </dl> </td><td> <p>The user must individualize the application.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_LICENSE_REQUIRED}}</strong></dt> </dl> </td><td> <p>The user must obtain a license.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested action, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the value <strong>{{NULL}}</strong> or a reference to the <strong>{{IMFActivate}}</strong> interface. The <strong>{{IMFActivate}}</strong> interface is used to create a content enabler object. The caller must release the interface. For more information, see Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the policy that defines which output protection systems are allowed for this stream, and the configuration data for each protection system.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The action that will be performed on this stream, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFOutputPolicy}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) that a requested action is about to be performed.</p> + <p>Before calling this method, the Media Session calls <strong>{{IMFInputTrustAuthority::RequestAccess}}</strong> to request an action. The <strong>BindAccess</strong> method notifies the {{ITA}} that the action is definitely about to occur, so that the {{ITA}} can update its internal state as needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>BindAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) when the number of output trust authorities ({{OTAs}}) that will perform a specified action has changed.</p> + <p>The {{ITA}} can update its internal state if needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>UpdateAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Resets the input trust authority ({{ITA}}) to its initial state.</p> + <p>When this method is called, the {{ITA}} should disable any decrypter that was returned in the <strong>{{IMFInputTrustAuthority::GetDecrypter}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implemented by components that provide output trust authorities ({{OTAs}}). Any Media Foundation transform ({{MFT}}) or media sink that is designed to work within the protected media path ({{PMP}}) and also sends protected content outside the Media Foundation pipeline must implement this interface.</p><p>The policy engine uses this interface to negotiate what type of content protection should be applied to the content. Applications do not use this interface directly.</p> + <p>If an {{MFT}} supports <strong>{{IMFTrustedOutput}}</strong>, it must expose the interface through <strong>QueryInterface</strong>. The interface applies to all of the input streams on the {{MFT}}. (There is no mechanism to return a separate <strong>{{IMFTrustedOutput}}</strong> reference for each stream.) The {{MFT}} must apply the output policies to all of its input streams. If the {{MFT}} sends different streams to separate connectors, it must report all of the connector attributes.</p> + + + + <p> Gets the number of output trust authorities ({{OTAs}}) provided by this trusted output. Each {{OTA}} reports a single action.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{OTAs}}. </p> </dd> + + + + + <p> Gets an output trust authority ({{OTA}}), specified by index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the {{OTA}} to retrieve. To get the number of {{OTAs}} provided by this object, call <strong>{{IMFTrustedOutput::GetOutputTrustAuthorityCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFOutputTrustAuthority}}</strong> interface of the {{OTA}}. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether this output is a policy sink, meaning it handles the rights and restrictions required by the input trust authority ({{ITA}}).</p> + <p>A trusted output is generally considered to be a policy sink if it does not pass the media content that it receives anywhere else; or, if it does pass the media content elsewhere, either it protects the content using some proprietary method such as encryption, or it sufficiently devalues the content so as not to require protection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, this object is a policy sink. If <strong>{{FALSE}}</strong>, the policy must be enforced further downstream.</p> </dd> + + + + + <p>Encapsulates the functionality of one or more output protection systems that a trusted output supports. This interface is exposed by output trust authority ({{OTA}}) objects. Each {{OTA}} represents a single action that the trusted output can perform, such as play, copy, or transcode. An {{OTA}} can represent more than one physical output if each output performs the same action.</p> + + + + <p> </p><p>Retrieves the action that is performed by this output trust authority ({{OTA}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the {{MFPOLICYMANAGER_ACTION}} enumeration.</p> </dd> + + + + + <p> Sets one or more policy objects on the output trust authority ({{OTA}}). </p> + <p>If the method returns <strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong>, the {{OTA}} sends an {{MEPolicySet}} event when it enforces the policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong></dt> </dl> </td><td> <p> The policy was negotiated successfully, but the {{OTA}} will enforce it asynchronously. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_POLICY_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The {{OTA}} does not support the requirements of this policy. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The address of an array of <strong>{{IMFOutputPolicy}}</strong> references. </p> </dd> + + + <dd> <p> The number of elements in the <em>ppPolicy</em> array. </p> </dd> + + + <dd> <p> Receives either a reference to a buffer allocated by the {{OTA}}, or the value <strong>{{NULL}}</strong>. If this parameter receives a non-<strong>{{NULL}}</strong> value, the caller must release the buffer by calling <strong>CoTaskMemFree</strong>. </p> <strong>Note</strong>??Currently this parameter is reserved. An {{OTA}} should set the reference to <strong>{{NULL}}</strong>. ? </dd> + + + <dd> <p> Receives the size of the <em>ppbTicket</em> buffer, in bytes. If <em>ppbTicket</em> receives the value <strong>{{NULL}}</strong>, <em>pcbTicket</em> receives the value zero.</p> </dd> + + + + + <p>Encapsulates a usage policy from an input trust authority ({{ITA}}). Output trust authorities ({{OTAs}}) use this interface to query which protection systems they are required to enforce by the {{ITA}}.</p> + + + + <p> Retrieves a list of the output protection systems that the output trust authority ({{OTA}}) must enforce, along with configuration data for each protection system. </p> + <p>The video {{OTA}} returns the <strong>{{MFCONNECTOR_UNKNOWN}}</strong> connector type unless the Direct3D device is in full-screen mode. (Direct3D windowed mode is not generally a secure video mode.) You can override this behavior by implementing a custom {{EVR}} presenter that implements the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Describes the output that is represented by the {{OTA}} calling this method. This value is a bitwise {{OR}} of zero or more of the following flags. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUS}}</strong></dt> </dl> </td><td> <p> Hardware bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_COMPRESSED}}</strong></dt> </dl> </td><td> <p> The output sends compressed data. If this flag is absent, the output sends uncompressed data. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUSIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_DIGITAL}}</strong></dt> </dl> </td><td> <p> The output sends a digital signal. If this flag is absent, the output sends an analog signal. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_NONSTANDARDIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_SOFTWARE}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_VIDEO}}</strong></dt> </dl> </td><td> <p> The output sends video data. If this flag is absent, the output sends audio data. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Indicates a specific family of output connectors that is represented by the {{OTA}} calling this method. Possible values include the following. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_AGP}}</strong></dt> </dl> </td><td> <p> {{AGP}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPONENT}}</strong></dt> </dl> </td><td> <p> Component video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPOSITE}}</strong></dt> </dl> </td><td> <p> Composite video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_D_JPN}}</strong></dt> </dl> </td><td> <p> Japanese D connector. (Connector conforming to the {{EIAJ}} {{RC}}-5237 standard.) </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DVI}}</strong></dt> </dl> </td><td> <p> Digital video interface ({{DVI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_HDMI}}</strong></dt> </dl> </td><td> <p> High-definition multimedia interface ({{HDMI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_LVDS}}</strong></dt> </dl> </td><td> <p> Low voltage differential signaling ({{LVDS}}) connector.</p> <p>A connector using the {{LVDS}} interface to connect internally to a display device. The connection between the graphics adapter and the display device is permanent and not accessible to the user. Applications should not enable High-Bandwidth Digital Content Protection ({{HDCP}}) for this connector.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI}}</strong></dt> </dl> </td><td> <p> {{PCI}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI_Express}}</strong></dt> </dl> </td><td> <p> {{PCI}} Express bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCIX}}</strong></dt> </dl> </td><td> <p> {{PCI}}-X bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SDI}}</strong></dt> </dl> </td><td> <p> Audio data sent over a connector via S/{{PDIF}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SPDIF}}</strong></dt> </dl> </td><td> <p> Serial digital interface connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SVIDEO}}</strong></dt> </dl> </td><td> <p> S-Video connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded Unified Display Interface ({{UDI}}). </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External {{UDI}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UNKNOWN}}</strong></dt> </dl> </td><td> <p> Unknown connector type. See Remarks. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_VGA}}</strong></dt> </dl> </td><td> <p> {{VGA}} connector. </p> </td></tr> <tr><td><dl> <dt><strong> {{MFCONNECTOR_MIRACAST}}</strong></dt> </dl> </td><td> <p>Miracast wireless connector. </p> <p>Supported in Windows?8.1 and later.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to an array of {{GUID}} values that specify which output protection systems are supported by the {{OTA}} that is calling this method. </p> </dd> + + + <dd> <p> Number of elements in the <em>rgGuidProtectionSchemasSupported</em> array. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object. The caller must release the interface. Each object in the collection is an <strong>{{IMFOutputSchema}}</strong> reference. Each <strong>{{IMFOutputSchema}}</strong> reference defines an output protection system that the {{OTA}} must enforce. </p> </dd> + + + + + <p> </p><p>Retrieives a {{GUID}} identifying the input trust authority ({{ITA}}) that created this output policy object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> </p><p>Retrieves the minimum version of the global revocation list ({{GRL}}) that must be enforced by the protected environment for this policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum {{GRL}} version.</p> </dd> + + + + + <p>Encapsulates information about an output protection system and its corresponding configuration data.</p> + <p>If the configuration information for the output protection system does not require more than a <strong>{{DWORD}}</strong> of space, the configuration information is retrieved in the <strong>GetConfigurationData</strong> method. If more than a <strong>{{DWORD}}</strong> of configuration information is needed, it is stored using the <strong>{{IMFAttributes}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the output protection system that is represented by this object. Output protection systems are identified by {{GUID}} value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the {{GUID}} that identifies the output protection system.</p> </dd> + + + + + <p> </p><p>Returns configuration data for the output protection system. The configuration data is used to enable or disable the protection system, and to set the protection levels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the configuration data. The meaning of this data depends on the output protection system.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} identifying the input trust authority ({{ITA}}) that generated this output schema object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> Establishes a one-way secure channel between two objects. </p> + + + + <p> </p><p>Retrieves the client's certificate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer allocated by the object. The buffer contains the client's certificate. The caller must release the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Passes the encrypted session key to the client.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the encrypted session key. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbEncryptedSessionKey</em> buffer, in bytes.</p> </dd> + + + + + <p> Provides encryption for media data inside the protected media path ({{PMP}}). </p> + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on input.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the sample protection certificate.</p> + <p>For certain version numbers of sample protection, the downstream component must provide a certificate. Components that do not support these version numbers can return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme for which to receive a certificate. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Receives a reference to a buffer containing the certificate. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves initialization information for sample protection from the upstream component.</p> + <p>This method must be implemented by the upstream component. The method fails if the component does not support the requested sample protection version. Downstream components do not implement this method and should return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the output stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a certificate provided by the downstream component.</p> </dd> + + + <dd> <p>Size of the certificate, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains the initialization information for downstream component. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes sample protection on the downstream component.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the input stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the initialization data provided by the upstream component. To retrieve this buffer, call <strong>{{IMFSampleProtection::InitOutputProtection}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p>Enables a media sink to receive samples before the presentation clock is started.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>Media sinks can implement this interface to support seamless playback and transitions. If a media sink exposes this interface, it can receive samples before the presentation clock starts. It can then pre-process the samples, so that rendering can begin immediately when the clock starts. Prerolling helps to avoid glitches during playback.</p><p>If a media sink supports preroll, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method should return the {{MEDIASINK_CAN_PREROLL}} flag.</p> + + + + <p> Notifies the media sink that the presentation clock is about to start. </p> + <p> After this method is called, the media sink sends any number of {{MEStreamSinkRequestSample}} events to request samples, until is has enough preroll data. When it has enough preroll data, the media sink sends an {{MEStreamSinkPrerolled}} event. This event signals that the client can start the presentation clock. </p><p> During preroll, the media sink can prepare the samples that it receives, so that they are ready to be rendered. It does not actually render any samples until the clock starts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The upcoming start time for the presentation clock, in 100-nanosecond units. This time is the same value that will be given to the <strong>{{IMFPresentationClock::Start}}</strong> method when the presentation clock is started. </p> </dd> + + + + + <p>Optionally supported by media sinks to perform required tasks before shutdown. This interface is typically exposed by archive sinks?that is, media sinks that write to a file. It is used to perform tasks such as flushing data to disk or updating a file header.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>If a media sink exposes this interface, the Media Session will call <strong>BeginFinalize</strong> on the sink before the session closes.</p> + + + + <p> </p><p>Notifies the media sink to asynchronously take any steps it needs to finish its tasks.</p> + <p>Many archive media sinks have steps they need to do at the end of archiving to complete their file operations, such as updating the header (for some formats) or flushing all pending writes to disk. In some cases, this may include expensive operations such as indexing the content. <strong>BeginFinalize</strong> is an asynchronous way to initiate final tasks.</p><p>When the finalize operation is complete, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFFinalizableMediaSink::EndFinalize}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of an asynchronous object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous finalize operation.</p> + <p>Call this method after the <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p>Passes configuration information to the media sinks that are used for streaming the content. Optionally, this interface is supported by media sinks. The built-in {{ASF}} streaming media sink and the {{MP3}} media sink implement this interface.</p> + + + + <p>Called by the streaming media client before the Media Session starts streaming to specify the byte offset or the time offset.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A Boolean value that specifies whether <em>qwSeekOffset</em> gives a byte offset of a time offset.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies a byte offset.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies the time position in 100-nanosecond units.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A byte offset or a time offset, depending on the value passed in <em>fSeekOffsetIsByteOffset</em>. Time offsets are specified in 100-nanosecond units. +</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the object that is hosting this proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface reference to and from a stream.</p><p>Stream objects that support <strong>{{IStream}}</strong> can expose this interface to provide custom marshaling for interface references.</p> + + + + <p> </p><p>Stores the data needed to marshal an interface across a process boundary.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface from data stored in the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHost::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHost::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an object in the protect media path ({{PMP}}) process, from a {{CLSID}}. </p> + <p> You can use the <em>pStream</em> parameter to initialize the object after it is created. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the object to create. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. If this parameter is not <strong>{{NULL}}</strong>, the {{PMP}} host queries the created object for the <strong>{{IPersistStream}}</strong> interface and calls <strong>{{IPersistStream::Load}}</strong>, passing in the <em>pStream</em> reference. </p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> Enables a media source to receive a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>If a media source exposes this interface, the Protected Media Path ({{PMP}}) Media Session calls <strong>SetPMPHost</strong> with a reference to the <strong>{{IMFPMPHost}}</strong> interface. The media source can use the <strong>{{IMFPMPHost}}</strong> interface to create objects in the {{PMP}} process.</p> + + + + <p> Provides a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>The <strong>{{IMFPMPHost}}</strong> reference is apartment threaded. The media source must add the reference to the global interface table ({{GIT}}) before using it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Enables two instances of the Media Session to share the same protected media path ({{PMP}}) process. </p> + <p>If your application creates more than one instance of the Media Session, you can use this interface to share the same {{PMP}} process among several instances. This can be more efficient than re-creating the {{PMP}} process each time.</p><p>Use this interface as follows:</p><ol> <li> Create the first instance of the {{PMP}} Media Session by calling <strong>{{MFCreatePMPMediaSession}}</strong>. </li> <li> Retrieve an <strong>{{IMFPMPServer}}</strong> reference from the first Media Session by calling <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_PMP_SERVER_CONTEXT}}</strong>. </li> <li> Create the second instance of the {{PMP}} Media Session. Set the {{MF_SESSION_SERVER_CONTEXT}} attribute on the <em>pConfiguration</em> parameter of the <strong>{{MFCreatePMPMediaSession}}</strong> function. The attribute value is the <strong>{{IMFPMPServer}}</strong> reference retrieved in step 2. </li> </ol> + + + + <p> </p><p>Blocks the protected media path ({{PMP}}) process from ending.</p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to {{IMFPMPServer::UnlockProcess}}, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to {{IMFPMPServer::LockProcess}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an object in the protected media path ({{PMP}}) process.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{CLSID}} of the object to create.</p> </dd> + + + <dd> <p>Interface identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Modifies a topology for use in a Terminal Services environment. </p> + <p>To use this interface, do the following:</p><ol> <li> Call <strong>GetSystemMetrics</strong> with the <strong>{{SM_REMOTESESSION}}</strong> flag. The function returns <strong>{{TRUE}}</strong> if the calling process is associated with a Terminal Services client session. </li> <li> If <strong>GetSystemMetrics</strong> returns <strong>{{TRUE}}</strong>, call <strong>{{MFCreateRemoteDesktopPlugin}}</strong>. This function returns a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface. </li> <li> Call <strong>UpdateTopology</strong> with a reference to the topology. </li> </ol><p>The application must call <strong>UpdateTopology</strong> before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + + + + <p> </p><p>Modifies a topology for use in a Terminal Services environment.</p> + <p>If the application is running in a Terminal Services client session, call this method before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology.</p> </dd> + + + + + <p> Sets and retrieves Synchronized Accessible Media Interchange ({{SAMI}}) styles on the {{SAMI}} Media Source. </p> + <p> To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_SAMI_SERVICE}}</strong>. Call <strong>GetService</strong> either directly on the {{SAMI}} media source, or on the Media Session (if you are using the {{SAMI}} source with the Media Session).</p> + + + + <p> Gets the number of styles defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{SAMI}} styles in the file. </p> </dd> + + + + + <p> Gets a list of the style names defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. The <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must clear the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> Sets the current style on the {{SAMI}} media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the style. To clear the current style, pass an empty string (""). To get the list of style names, call <strong>{{IMFSAMIStyle::GetStyles}}</strong>.</p> </dd> + + + + + <p> Gets the current style from the {{SAMI}} media source. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to a null-terminated string that contains the name of the style. If no style is currently set, the method returns an empty string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p>Implemented by the transcode profile object.</p><p>The transcode profile stores configuration settings that the topology builder uses to generate the transcode topology for the output file. These configuration settings are specified by the caller and include audio and video stream properties, encoder settings, and container settings that are specified by the caller.</p><p>To create the transcode profile object, call <strong>{{MFCreateTranscodeProfile}}</strong>. The configured transcode profile is passed to <strong>{{MFCreateTranscodeTopology}}</strong>, which creates the transcode topology with the appropriate settings. </p> + + + + <p>Sets audio stream configuration settings in the transcode profile.</p><p>To get a list of compatible audio media types supported by the Media Foundation transform ({{MFT}}) encoder , call <strong>{{MFTranscodeGetAudioOutputAvailableTypes}}</strong>. You can get the attributes that are set on the required media type and set them on the transcode profile. To set the audio attributes properly, create a new attribute store and copy the attribute store from the required media media type by calling <strong>{{IMFAttributes::CopyAllItems}}</strong>. This makes sure that the caller does not hold the references to the media type retrieved from the encoder. For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio stream settings that are currently set in the transcode profile. </p> + <p>If there are no audio attributes set in the transcode profile, the call to <strong>GetAudioAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following topics describe the audio attributes:</p><ul> <li> Audio Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current audio stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets video stream configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the video stream settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the <strong>GetVideoAttributes</strong> method succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following list shows the video attributes:</p><ul> <li> Video Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> <li> {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current video stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets container configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the container settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the call to <strong>GetContainerAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p> To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute. The following list shows the container attributes:</p><ul> <li> {{MF_TRANSCODE_CONTAINERTYPE}} </li> <li> {{MF_TRANSCODE_SKIP_METADATA_TRANSFER}} </li> <li> {{MF_TRANSCODE_TOPOLOGYMODE}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current container type for the output file. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets an output byte stream for the transcode media sink.</p> + <p>Call this method to provide a writeable byte stream that will receive the transcoded data.</p><p>Alternatively, you can provide the name of an output file, by calling <strong>{{IMFTranscodeSinkInfoProvider::SetOutputFile}}</strong>. These two methods are mutually exclusive.</p><p>The <em>pByteStreamActivate</em> parameter must specify an activation object that creates a writeable byte stream. Internally, the transcode media sink calls <strong>{{IMFActivate::ActivateObject}}</strong> to create the byte stream, as follows:</p><code>{{IMFByteStream}} *pByteStream = {{NULL}}; {{HRESULT}} hr = pByteStreamActivate-&gt;ActivateObject({{IID_IMFByteStream}}, (void**)&amp;pByteStream);</code><p>Currently, Microsoft Media Foundation does not provide any byte-stream activation objects. To use this method, an application must provide a custom implementation of <strong>{{IMFActivate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of a byte-stream activation object. </p> </dd> + + + + + <p>Sets the transcoding profile on the transcode sink activation object.</p> + <p>Before calling this method, initialize the profile object as follows:</p><ul> <li>Set the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to specify the container type of the output file.</li> <li>If the output file will have a video stream, set video attributes by calling the <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> method.</li> <li>If the output file will have an audio stream, set audio attributes by calling the <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface. To get a reference to this interface, call <strong>{{MFCreateTranscodeProfile}}</strong>.</p> </dd> + + + + + <p> Gets the media types for the audio and video streams specified in the transcode profile.</p> + <p>Before calling this method, call <strong>{{IMFTranscodeSinkInfoProvider::SetProfile}}</strong> to set the transcode profile. The <strong>GetSinkInfo</strong> method uses the profile to create media types for the audio and video streams. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MF_TRANSCODE_SINK_INFO}}</strong> structure.</p> <p>If the method succeeds, the method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-{{NULL}} after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> </dd> + + + + + <p>Enables an application to use a Media Foundation transform ({{MFT}}) that has restrictions on its use.</p> + <p>If you register an {{MFT}} that requires unlocking, include the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag when you call the <strong>{{MFTRegister}}</strong> function.</p> + + + + <p>Unlocks a Media Foundation transform ({{MFT}}) so that the application can use it.</p> + <p>This method authenticates the caller, using a private communication channel between the {{MFT}} and the object that implements the <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface. The details of the communication depend entirely on the implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{MFT}}.</p> </dd> + + + + + <p>Registers Media Foundation transforms ({{MFTs}}) in the caller's process.</p><p>The Media Session exposes this interface as a service. To obtain a reference to this interface, call the <strong>{{IMFGetService::GetService}}</strong> method on the Media Session with the service identifier <strong>{{MF_LOCAL_MFT_REGISTRATION_SERVICE}}</strong>.</p> + <p>This interface requires the Media Session. If you are not using the Media Session for playback, call one of the following functions instead:</p><ul> <li> <strong>{{MFTRegisterLocal}}</strong> </li> <li> <strong>{{MFTRegisterLocalByCLSID}}</strong> </li> </ul> + + + + <p>Registers one or more Media Foundation transforms ({{MFTs}}) in the caller's process.</p> + <p>This method is similar to the <strong>{{MFTRegisterLocalByCLSID}}</strong> function. It registers one or more {{MFTs}} in the caller's process. These {{MFTs}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag.</p><p>Unlike <strong>{{MFTRegisterLocalByCLSID}}</strong>, however, this method also makes the {{MFT}} available in the Protected Media Path ({{PMP}}) process, and is therefore useful if you are using the Media Session inside the {{PMP}}. For more information, see the following topics:</p><ul> <li> <strong>{{MFCreatePMPMediaSession}}</strong> </li> <li> Protected Media Path </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTRATION_INFO}}</strong> structures.</p> </dd> + + + <dd> <p>The number of elements in the <em>pMFTs</em> array.</p> </dd> + + + + + + + + + + + + + + + + + <p>Allows a media source to create a Windows Runtime object in the Protected Media Path ({{PMP}}) process. </p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHostApp::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHostApp::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a Windows Runtime object in the protected media path ({{PMP}}) process. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Id of object to create.</p> </dd> + + + <dd> <p>Data to be passed to the object by way of a <strong>{{IPersistStream}}</strong>.</p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the created object. </p> </dd> + + + + + <p>Provides a mechanism for a media source to implement content protection functionality in a Windows Store apps.</p> + <p><strong>When to implement:</strong> A media source implements <strong>{{IMFPMPClientApp}}</strong> in order to implement content protection functionality for Windows Store apps. </p> + + + + <p>Sets a reference to the <strong>{{IMFPMPHostApp}}</strong> interface allowing a media source to create objects in the {{PMP}} process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a request for a sample from a MediaStreamSource. </p> + <p><strong>{{MFMediaStreamSourceSampleRequest}}</strong> is implemented by the <strong>Windows.Media.Core.MediaStreamSourceSampleRequest</strong> runtime class.</p> + + + + <p>Sets the sample for the media stream source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample for the media stream source.</p> </dd> + + + + + <p>Tracks the reference counts on a video media sample. Video samples created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function expose this interface.</p> + <p>Use this interface to determine whether it is safe to delete or re-use the buffer contained in a sample. One object assigns itself as the owner of the video sample by calling <strong>SetAllocator</strong>. When all objects release their reference counts on the sample, the owner's callback method is invoked.</p> + + + + <p> </p><p>Sets the owner for the sample.</p> + <p>When this method is called, the sample holds an additional reference count on itself. When every other object releases its reference counts on the sample, the sample invokes the <em>pSampleAllocator</em> callback method. To get a reference to the sample, call <strong>{{IMFAsyncResult::GetObject}}</strong> on the asynchronous result object given to the callback's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>After the callback is invoked, the sample clears the callback. To reinstate the callback, you must call <strong>SetAllocator</strong> again.</p><p>It is safe to pass in the sample's <strong>{{IMFSample}}</strong> interface reference as the state object (<em>pUnkState</em>) for the callback. If <em>pUnkState</em> points to the sample, the <strong>SetAllocator</strong> method accounts for the additional reference count on <em>pUnkState</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The owner was already set. This method cannot be called twice on the sample.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to perform a handshake with the protected environment. This is needed because the <strong>CreateFile</strong> and <strong>DeviceIoControl</strong> {{APIs}} are not available to Windows Store apps.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create and use an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object.</p> + + + + <p>Allows content protection systems to access the protected environment.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object and use the <strong>Call</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The length in bytes of the input data.</p> </dd> + + + <dd> <p>A reference to the input data.</p> </dd> + + + <dd> <p>The length in bytes of the output data.</p> </dd> + + + <dd> <p>A reference to the output data.</p> </dd> + + + + + <p>Gets the Global Revocation List ({{GLR}}).</p> + <p>Allows reading of the system Global Revocation List ({{GRL}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the data returned in <strong>output</strong>.</p> </dd> + + + <dd> <p>Receives the contents of the global revocation list file.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to get the procedure address of a function in the signed library. This method provides the same functionality as <strong>GetProcAddress</strong> which is not available to Windows Store apps.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create and use an <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + + <p>Gets the procedure address of the specified function in the signed library.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create an <strong>{{IMFSignedLibrary}}</strong> object and call the <strong>GetProcedureAddress</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The entry point name in the {{DLL}} that specifies the function.</p> </dd> + + + <dd> <p>Receives the address of the entry point.</p> </dd> + + + + + <p>Provides a method that retireves system id data.</p> + + + + <p>Retrieves system id data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The size in bytes of the returned data.</p> </dd> + + + <dd> <p>Receives the returned data. The caller must free this buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Sets up the <strong>{{IMFSystemId}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Calls into the implementation of the protection system in the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the function that you want to run. This identifier is defined by the implementation of the protection system.</p> </dd> + + + <dd> <p>The number of bytes of in the buffer that <em>InputBuffer</em> specifies, including private data.</p> </dd> + + + <dd> <p>A reference to the data that you want to provide as input.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the length in bytes of the data that the function wrote to the buffer that <em>OutputBuffer</em> specifies, including the private data. </p> </dd> + + + <dd> <p>Pointer to the buffer where you want the function to write its output.</p> </dd> + + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Allows a decryptor to manage hardware keys and decrypt hardware samples.</p> + + + + <p> Allows the display driver to return {{IHV}}-specific information used when initializing a new hardware key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of bytes in the buffer that <em>InputPrivateData</em> specifies.</p> </dd> + + + <dd> <p>The contents of this parameter are defined by the implementation of the protection system that runs in the security processor. The contents may contain data about license or stream properties.</p> </dd> + + + <dd> <p>The return data is also defined by the implementation of the protection system implementation that runs in the security processor. The contents may contain data associated with the underlying hardware key.</p> </dd> + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + + + + + + + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p></p> + + + + <p></p> + + + + <p></p> + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + <p>Called by the media pipeline to get information about a transform provided by the sensor transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the transform for which information is being requested. In the current release, this value will always be 0.</p> </dd> + + + <dd> <p>Gets the identifier for the transform.</p> </dd> + + + <dd> <p>The attribute store to be populated.</p> </dd> + + + <dd> <p>A collection of <strong>{{IMFSensorStream}}</strong> objects.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the Media Session in the application's process.</p> + <p> If your application does not play protected content, you can use this function to create the Media Session in the application's process. To use the Media Session for protected content, you must call <strong>{{MFCreatePMPMediaSession}}</strong>. </p><p> You can use the <em>pConfiguration</em> parameter to specify any of the following attributes: </p><ul> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> <li> {{MF_LOW_LATENCY}} </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> Creates an instance of the Media Session inside a Protected Media Path ({{PMP}}) process. </p> + <p>You can use the <em>pConfiguration</em> parameter to set any of the following attributes:</p><ul> <li> <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_REMOTE_SOURCE_MODE}}</strong> </li> <li> <strong>{{MF_SESSION_SERVER_CONTEXT}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> </ul><p>If this function cannot create the {{PMP}} Media Session because a trusted binary was revoked, the <em>ppEnablerActivate</em> parameter receives an <strong>{{IMFActivate}}</strong> interface reference. The application can use this reference to create a content enabler object, which can then be used to download an updated binary:</p><ol> <li> Call <strong>{{IMFActivate::ActivateObject}}</strong> with the interface identifier {{IID_IMFContentEnabler}} to get an <strong>{{IMFContentEnabler}}</strong> interface reference. </li> <li> Use that interface to download the updated binary. </li> <li> Call <strong>{{MFCreatePMPMediaSession}}</strong> again. </li> </ol><p>If the function successfully creates the {{PMP}} Media Session, the <em>ppEnablerActivate</em> parameter receives the value <strong>{{NULL}}</strong>.</p><p>Do not make calls to the {{PMP}} Media Session from a thread that is processing a window message sent from another thread. To test whether the current thread falls into this category, call <strong>InSendMessage</strong>.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Creates the source resolver, which is used to create a media source from a {{URL}} or byte stream. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from mf.dll. Starting in Windows?7, this function is exported from mfplat.dll, and mf.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the source resolver's <strong>{{IMFSourceResolver}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create property stores.]</p><p> Creates an empty property store object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the {{URL}} schemes that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{URL}} schemes. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves the {{MIME}} types that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{MIME}} types. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates a topology object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology object. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> Creates a topology node.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The type of node to create, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the media type for a stream associated with a topology node.</p> + <p>This function gets the actual media type from the object that is associated with the topology node. The <em>pNode</em> parameter should specify a node that belongs to a fully resolved topology. If the node belongs to a partial topology, the function will probably fail. </p><p>Tee nodes do not have an associated object to query. For tee nodes, the function gets the node's input type, if available. Otherwise, if no input type is available, the function gets the media type of the node's primary output stream. The primary output stream is identified by the <strong>{{MF_TOPONODE_PRIMARYOUTPUT}}</strong> attribute.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + <dd> <p>The identifier of the stream to query. This parameter is interpreted as follows:</p> <ul> <li>Transform nodes: The value is the zero-based index of the input or output stream.</li> <li>All other node types: The value must be zero.</li> </ul> </dd> + + + <dd> <p><strong>If {{TRUE}}</strong>, the function gets an output type<strong>. If {{FALSE}}</strong>, the function gets an input type. This parameter is interpreted as follows:</p> <ul> <li>Output nodes: The value must be <strong>{{TRUE}}</strong>.</li> <li>Source nodes: The value must be <strong>{{FALSE}}</strong>.</li> <li>Tee nodes: The value is ignored.</li> <li>Transform nodes: If the value is <strong>{{TRUE}}</strong>, the <em>dwStreamIndex</em> parameter is the index for an output stream. Otherwise, <em>dwStreamIndex</em> is the index for an input stream.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries an object for a specified service interface.</p><p>This function is a helper function that wraps the <strong>{{IMFGetService::GetService}}</strong> method. The function queries the object for the <strong>{{IMFGetService}}</strong> interface and, if successful, calls <strong>GetService</strong> on the object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p> The service requested cannot be found in the object represented by <em>punkObject</em>. </p> </td></tr> </table><p>?</p> + + + + <p> Returns the system time. </p> + <p> Returns the system time, in 100-nanosecond units. </p> + + + + <p>Creates the presentation clock. The presentation clock is used to schedule the time at which samples are rendered and to synchronize multiple streams. +</p> + <p>The caller must shut down the presentation clock by calling <strong>{{IMFShutdown::Shutdown}}</strong> on the clock.</p><p>Typically applications do not create the presentation clock. The Media Session automatically creates the presentation clock. To get a reference to the presentation clock from the Media Session, call <strong>{{IMFMediaSession::GetClock}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a presentation time source that is based on the system time.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IMFPresentationTimeSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor.</p> + <p> If you are writing a custom media source, you can use this function to create the source presentation descriptor. The presentation descriptor is created with no streams selected. Generally, a media source should select at least one stream by default. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of elements in the <em>apStreamDescriptors</em> array.</p> </dd> + + + <dd> <p>Array of <strong>{{IMFStreamDescriptor}}</strong> interface references. Each reference represents a stream descriptor for one stream in the presentation.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Queries whether a media presentation requires the Protected Media Path ({{PMP}}).</p> + <p>If this function returns <strong>{{S_OK}}</strong>, it means the {{PMP}} is required for this presentation. Call <strong>{{MFCreatePMPMediaSession}}</strong> to create the {{PMP}} session object.</p><p>If the function returns <strong>{{S_FALSE}}</strong>, you can use the unprotected pipeline. Call <strong>{{MFCreateMediaSession}}</strong> to create the regular Media Session object.</p><p>Internally, this function checks whether any of the stream descriptors in the presentation have the <strong>{{MF_SD_PROTECTED}}</strong> attribute with the value <strong>{{TRUE}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>This presentation requires a protected environment.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{S_FALSE}}</strong></strong></dt> </dl> </td><td> <p>This presentation does not require a protected environment.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of a presentation descriptor. The presentation descriptor is created by the media source, and describes the presentation.</p> </dd> + + + + + <p> </p><p>Serializes a presentation descriptor to a byte array.</p> + <p>To deserialize the presentation descriptor, pass the byte array to the <strong>{{MFDeserializePresentationDescriptor}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor to serialize.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to an array of bytes containing the serialized presentation descriptor. The caller must free the memory for the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> </p><p>Deserializes a presentation descriptor from a byte array.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the <em>pbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Pointer to an array of bytes that contains the serialized presentation descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Creates a stream descriptor. </p> + <p> If you are writing a custom media source, you can use this function to create stream descriptors for the source. This function automatically creates the stream descriptor media type handler and initializes it with the list of types given in <em>apMediaTypes</em>. The function does not set the current media type on the handler, however. To set the type, call <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Stream identifier. </p> </dd> + + + <dd> <p> Number of elements in the <em>apMediaTypes</em> array. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{IMFMediaType}}</strong> interface references. These references are used to initialize the media type handler for the stream descriptor. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface of the new stream descriptor. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates a media-type handler that supports a single media type at a time.</p> + <p>The media-type handler created by this function supports one media type at a time. Set the media type by calling <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. After the type is set, <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong> always checks against that type.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface of the media-type handler. The caller must release the interface.</p> </dd> + + + + + <p>Shuts down a Media Foundation object and releases all resources associated with the object.</p><p>This function is a helper function that wraps the <strong>{{IMFShutdown::Shutdown}}</strong> method. The function queries the object for the <strong>{{IMFShutdown}}</strong> interface and, if successful, calls <strong>Shutdown</strong> on the object.</p> + <p>This function is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Creates the Streaming Audio Renderer. </p> + <p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFAttributes}}</strong> interface specified in the <em>pAudioAttributes</em> parameter.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the Streaming Audio Renderer.</p> + <p>To create the audio renderer, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference.</p><strong>Note</strong>??To avoid a memory leak, call <strong>{{IMFActivate::ShutdownObject}}</strong> before releasing the final reference to the audio renderer or the audio renderer activate object.?<p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the enhanced video renderer ({{EVR}}) media sink.</p> + <p>To create the {{EVR}}, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><p>To configure the {{EVR}}, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE}}</strong> </td><td>Activation object for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID}}</strong> </td><td>{{CLSID}} for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS}}</strong> </td><td>Flags for creating a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE}}</strong> </td><td>Activation object for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID}}</strong> </td><td>{{CLSID}} for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS}}</strong> </td><td>Flags for creating a custom presenter.</td></tr> </table><p>?</p><p>When <strong>{{IMFActivate::ActivateObject}}</strong> is called, the activation objects sets the video window on the {{EVR}} by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. Passing <strong>{{NULL}}</strong> for the <em>hwndVideo</em> parameter is not an error, but no video will render unless the {{EVR}} has a valid video window.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Handle to the window where the video will be displayed.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the {{EVR}}. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring {{MP4}} files.</p> + <p>The {{MP4}} media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author 3GP files, use the <strong>{{MFCreate3GPMediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring 3GP files.</p> + <p>The 3GP media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author {{MP4}} files, use the <strong>{{MFCreateMPEG4MediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the 3GP file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the 3GP media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the {{MP3}} media sink.</p> + <p> The {{MP3}} media sink takes compressed {{MP3}} +audio samples as input, and writes an {{MP3}} file with {{ID3}} headers as output. The {{MP3}} media sink does not perform {{MP3}} audio encoding. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP3}} file to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{MP3}} media sink.. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the {{AC}}-3 media sink.</p> + <p>The {{AC}}-3 media sink takes compressed {{AC}}-3 audio as input and writes the audio to the byte stream without modification. The primary use for this media sink is to stream {{AC}}-3 audio over a network. The media sink does not perform {{AC}}-3 audio encoding.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{AC}}-3 file to this byte stream. The byte stream must be writable. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{AC}}-3 audio stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_Dolby_AC3}}</strong> or <strong>{{MFAudioFormat_Dolby_DDPlus}}</strong></td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the audio data transport stream ({{ADTS}}) media sink.</p> + <p>The {{ADTS}} media sink converts Advanced Audio Coding ({{AAC}}) audio packets into an {{ADTS}} stream. The primary use for this media sink is to stream {{ADTS}} over a network. The output is not an audio file, but a stream of audio frames with {{ADTS}} headers.</p><p>The media sink can accept raw {{AAC}} frames ({{MF_MT_AAC_PAYLOAD_TYPE}} = 0) or {{ADTS}} packets ({{MF_MT_AAC_PAYLOAD_TYPE}} = 1). If the input is raw {{AAC}}, the media sink inserts an {{ADTS}} header at the start of each audio frame. If the input is {{ADTS}} packets, the media sink passes the packets through to the byte stream, without modification.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{ADTS}} stream to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{ADTS}} stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_AAC}}</strong></td></tr> <tr><td> {{MF_MT_AAC_PAYLOAD_TYPE}} </td><td>0 (raw {{AAC}}) or 1 ({{ADTS}})</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a generic media sink that wraps a multiplexer Microsoft Media Foundation transform ({{MFT}}).</p> + <p>This function attempts to find a multiplexer {{MFT}} that supports an output type with the following definition:</p><ul> <li>Major type: <strong>{{MFMediaType_Stream}}</strong></li> <li>Subtype: <em>guidOutputSubType</em></li> <li>Additional format attributes (optional)</li> </ul><p>To provide a list of additional format attributes:</p><ol> <li>Call <strong>{{MFCreateAttributes}}</strong> to get an <strong>{{IMFAttributes}}</strong> reference.</li> <li>Use the <strong>{{IMFAttributes}}</strong> interface to set the attributes. (See Media Type Attributes.)</li> <li>Pass the <strong>{{IMFAttributes}}</strong> reference in the <em>pOutputAttributes</em> parameter.</li> </ol><p>The multiplexer {{MFT}} must be registered in the <strong>{{MFT_CATEGORY_MULTIPLEXER}}</strong> category.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The subtype {{GUID}} of the output type for the {{MFT}}.</p> </dd> + + + <dd> <p>A list of format attributes for the {{MFT}} output type. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The output from the {{MFT}} is written to this byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring fragmented {{MP4}} files.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an Audio-Video Interleaved ({{AVI}}) Sink.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the byte stream that will be used to write the {{AVI}} file.</p> </dd> + + + <dd> <p>Pointer to the media type of the video input stream</p> </dd> + + + <dd> <p>Pointer to the media type of the audio input stream</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> Interface. The caller must release this interface.</p> </dd> + + + + + <p> Creates an {{WAVE}} archive sink. The {{WAVE}} archive sink takes +audio and writes it to an .wav file. +</p> + + + <dd> <p> Pointer to the byte stream that will be used to write the .wav file.</p> </dd> + + + <dd> <p>Pointer to the audio media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release this interface.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the topology loader.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopoLoader}}</strong> interface of the topology loader. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates an activation object for the sample grabber media sink.</p> + <p>To create the sample grabber sink, call <strong>{{IMFActivate::ActivateObject}}</strong> on the reference received in the <em>ppIActivate</em> parameter.</p><p>Before calling <strong>ActivateObject</strong>, you can configure the sample grabber by setting any of the following attributes on the <em>ppIActivate</em> reference:</p><ul> <li> {{MF_SAMPLEGRABBERSINK_IGNORE_CLOCK}} </li> <li> <strong>{{MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, defining the media type for the sample grabber's input stream. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to complete the creation of the sample grabber. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates the default implementation of the quality manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the quality manager's <strong>{{IMFQualityManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the sequencer source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved. Must be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSequencerSource}}</strong> interface of the sequencer source. The caller must release the interface.</p> </dd> + + + + + <p> Creates a <strong>{{PROPVARIANT}}</strong> that can be used to seek within a sequencer source presentation. </p> + <p> The <strong>{{PROPVARIANT}}</strong> returned in <em>pvarSegmentOffset</em> can be used for the <em>pvarStartPosition</em> parameter in the <strong>{{IMFMediaSession::Start}}</strong> method. Use the time format <strong>{{GUID}} {{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Sequencer element identifier. This value specifies the segment in which to begin playback. The element identifier is returned in the <strong>{{IMFSequencerSource::AppendTopology}}</strong> method. </p> </dd> + + + <dd> <p> Starting position within the segment, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong>. The method fills in the <strong>{{PROPVARIANT}}</strong> with the information needed for performing a seek operation. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Creates a media source that aggregates a collection of media sources. </p> + <p>The aggregated media source is useful for combining streams from separate media sources. For example, you can use it to combine a video capture source and an audio capture source. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <em>pSourceCollection</em> collection does not contain any elements.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCollection}}</strong> interface of the collection object that contains a list of media sources. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the aggregated media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a credential cache object. An application can use this object to implement a custom credential manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredentialCache}}</strong> interface of the new credential cache object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a default proxy locator.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The name of the protocol.</p> <strong>Note</strong>??In this release of Media Foundation, the default proxy locator does not support {{RTSP}}. ? </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains the proxy configuration in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the scheme handler for the network source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the protected media path ({{PMP}}) server object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MFPMPSESSION_CREATION_FLAGS}}</strong> enumeration that specifies how to create the {{PMP}} session.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPMPServer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the remote desktop plug-in object. Use this object if the application is running in a Terminal Services client session.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p>Remote desktop connections are not allowed by the current session policy.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface of the plug-in object. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create named property stores.]</p><p>Creates an empty property store to hold name/value pairs.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{INamedPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sample copier transform.</p> + <p>The sample copier is a Media Foundation transform ({{MFT}}) that copies data from input samples to output samples without modifying the data. The following data is copied from the sample:</p><ul> <li>All Sample Attributes.</li> <li>The time stamp and duration.</li> <li>Sample flags (see <strong>{{IMFSample::SetSampleFlags}}</strong>).</li> <li>The data in the media buffers. If the input sample contains multiple buffers, the data is copied into a single buffer on the output sample.</li> </ul><p>This {{MFT}} is useful in the following situation:</p><ul> <li>One pipeline object, such as a media source, allocates media samples for output.</li> <li>Another pipeline object, such as a media sink, allocates its own media samples for input. For example, the object might require buffers allocated from a special memory pool, such as video memory.</li> </ul><p>The following diagram shows this situation with a media source and a media sink.</p><p></p><p>In order for the media sink to receive data from the media source, the data must be copied into the media samples owned by the media sink. The sample copier can be used for this purpose.</p><p>A specific example of such a media sink is the Enhanced Video Renderer ({{EVR}}). The {{EVR}} allocates samples that contain Direct3D surface buffers, so it cannot receive video samples directly from a media source. Starting in Windows?7, the topology loader automatically handles this case by inserting the sample copier between the media source and the {{EVR}}.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an empty transcode profile object.</p><p>The transcode profile stores configuration settings for the output file. These configuration settings are specified by the caller, and include audio and video stream properties, encoder settings, and container settings. To set these properties, the caller must call the appropriate <strong>{{IMFTranscodeProfile}}</strong> methods.</p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function. The underlying topology builder uses these settings to build the transcode topology.</p> + <p>The <strong>{{MFCreateTranscodeProfile}}</strong> function creates an empty transcode profile. You must configure the transcode profile setting attributes that define the media types and the container properties. Use the following methods to configure the profile:</p><ul> <li> <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetContainerAttributes}}</strong> </li> </ul><p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a partial transcode topology.</p><p>The underlying topology builder creates a partial topology by connecting the required pipeline objects: +source, encoder, and sink. The encoder and the sink are configured according to the settings specified by the caller in the transcode profile. </p><p>To create the transcode profile object, call the <strong>{{MFCreateTranscodeProfile}}</strong> function and set the required attributes by calling the appropriate the <strong>{{IMFTranscodeProfile}}</strong> methods. </p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function, which creates the transcode topology with the appropriate settings. The caller can then set this topology on the Media Session and start the session to begin the encoding process. When the Media Session ends, the transcoded file is generated.</p> + <p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded, and <em>ppTranscodeTopo</em> receives a reference to the transcode topology.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwszOutputFilePath</em> contains invalid characters.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED}}</strong></dt> </dl> </td><td> <p>No streams are selected in the media source.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_CONTAINERTYPE}}</strong></dt> </dl> </td><td> <p>The profile does not contain the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>For one or more streams, cannot find an encoder that accepts the media type given in the profile.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS}}</strong></dt> </dl> </td><td> <p>The profile does not specify a media type for any of the selected streams on the media source.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a topology for transcoding to a byte stream.</p> + <p>This function creates a partial topology that contains the media source, the encoder, and the media sink. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source. The media source provides that source content for transcoding.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The transcoded output will be written to this byte stream.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface of a transcoding profile. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a list of output formats from an audio encoder.</p> + <p>This function assumes the encoder will be used in its default encoding mode, which is typically constant bit-rate ({{CBR}}) encoding. Therefore, the types returned by the function might not work with other modes, such as variable bit-rate ({{VBR}}) encoding.</p><p>Internally, this function works by calling <strong>{{MFTEnumEx}}</strong> to find a matching encoder, and then calling <strong>{{IMFTransform::GetOutputAvailableType}}</strong> to get the encoder's output types.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>Failed to find an encoder that matches the specified configuration settings.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the subtype of the output media. The encoder uses this value as a filter when it is enumerating the available output types. For information about the audio subtypes, see <strong>Audio Subtype {{GUIDs}}</strong>. </p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The attribute store specifies the encoder configuration settings. This parameter can be <strong>{{NULL}}</strong>. The attribute store can hold any of the following attributes.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFT_FIELDOFUSE_UNLOCK_Attribute}}</strong></dt> </dl> </td><td> <p>Set this attribute to unlock an encoder that has field-of-use descriptions.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_ENCODINGPROFILE}}</strong></dt> </dl> </td><td> <p>Specifies a device conformance profile for a Windows Media encoder.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_QUALITYVSSPEED}}</strong></dt> </dl> </td><td> <p>Sets the tradeoff between encoding quality and encoding speed.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object that contains a list of preferred audio media types. The collection contains <strong>{{IMFMediaType}}</strong> references. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates the transcode sink activation object.</p><p>The transcode sink activation object can be used to create any of the following file sinks:</p><ul> <li>3GP file sink</li> <li>{{MP3}} file sink</li> <li>{{MP4}} file sink</li> </ul><p>The transcode sink activation object exposes the <strong>{{IMFTranscodeSinkInfoProvider}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IMFTrackedSample}}</strong> object that tracks the reference counts on a video media sample.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IStream}}</strong> reference.</p> + <p>This function enables applications to pass an <strong>{{IStream}}</strong> object to a Media Foundation {{API}} that takes an <strong>{{IMFByteStream}}</strong> reference.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value.</p> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Returns an <strong>{{IStream}}</strong> reference that wraps a Microsoft Media Foundation byte stream.</p> + <p>This function enables an application to pass a Media Foundation byte stream to an {{API}} that takes an <strong>{{IStream}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IRandomAccessStream}}</strong> object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IRandomAccessStream}}</strong> object that wraps a Microsoft Media Foundation byte stream.</p> + <p>The returned byte stream object exposes the <strong>{{IMFGetService}}</strong> interface. To get the original <strong>{{IMFByteStream}}</strong> reference, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier <strong>{{MF_WRAPPED_OBJECT}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Create an <strong>{{IMFMediaType}}</strong> from properties.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates properties from a <strong>{{IMFMediaType}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enumerates a list of audio or video capture devices.</p> + <p>Each returned <strong>{{IMFActivate}}</strong> reference represents a capture device, and can be used to create a media source for that device. You can also use the <strong>{{IMFActivate}}</strong> reference to query for attributes that describe the device. The following attributes might be set:</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME}} </td><td>The display name of the device.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE}} </td><td>The major type and subtype {{GUIDs}} that describe the device's output format.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} </td><td>The type of capture device (audio or video).</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </td><td>The audio endpoint {{ID}} string. (Audio devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}} </td><td>The device category. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE}} </td><td> Whether a device is a hardware or software device. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </td><td>The symbolic link for the device driver. (Video devices only.)</td></tr> </table><p>?</p><p>To create a media source from an <strong>{{IMFActivate}}</strong> reference, call the <strong>{{IMFActivate::ActivateObject}}</strong> method.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an attribute store that contains search criteria. To create the attribute store, call <strong>{{MFCreateAttributes}}</strong>. Set one or more of the following attributes on the attribute store:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}}</strong></dt> </dl> </td><td> <p>Specifies whether to enumerate audio or video devices. (Required.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}}</strong></dt> </dl> </td><td> <p>For audio capture devices, specifies the device role. (Optional.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}}</strong></dt> </dl> </td><td> <p>For video capture devices, specifies the device category. (Optional.)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives an array of <strong>{{IMFActivate}}</strong> interface references. Each reference represents an activation object for a media source. The function allocates the memory for the array. The caller must release the references in the array and call <strong>CoTaskMemFree</strong> to free the memory for the array.</p> </dd> + + + <dd> <p>Receives the number of elements in the <em>pppSourceActivate</em> array. If no capture devices match the search criteria, this parameter receives the value 0.</p> </dd> + + + + + <p>Creates a media source for a hardware capture device.</p> + <strong>Important</strong>??When the capture device is no longer needed, you must shut down the device by calling <strong>Shutdown</strong> on the <strong>{{IMFMediaSource}}</strong> object you obtained by calling <strong>{{MFCreateDeviceSource}}</strong>. Failure to call <strong>Shutdown</strong> can result in memory links because the system may keep a reference to <strong>{{IMFMediaSource}}</strong> resources until <strong>Shutdown</strong> is called.?<p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IMFMediaSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object that represents a hardware capture device.</p> + <p>This function creates an activation object that can be used to create a media source for a hardware device. To create the media source itself, call <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object that allows content protection systems to perform a handshake with the protected environment.</p> + + + + <p>Loads a dynamic link library that is signed for the protected environment.</p> + <p>A singlemodule load count is maintained on the dynamic link library (as it is with <strong>LoadLibrary</strong>). This load count is freed when the final release is called on the <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + <dd> <p>The name of the dynamic link library to load. This dynamic link library must be signed for the protected environment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSignedLibrary}}</strong> interface for the library.</p> </dd> + + + + + <p>Returns an <strong>{{IMFSystemId}}</strong> object for retrieving system id data.</p> + + + + <p>Gets the local system {{ID}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p> + + + <dd> <p>Application-specific verifier value.</p> </dd> + + + <dd> <p>Length in bytes of verifier.</p> </dd> + + + <dd> <p>Returned {{ID}} string. This value must be freed by the caller by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentProtectionDevice}}</strong> interface for the specified media protection system.</p> + + + + <p>Checks whether a hardware security processor is supported for the specified media protection system.</p> + + + <dd> <p>The identifier of the protection system that you want to check.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the hardware security processor is supported for the specified protection system; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentDecryptorContext}}</strong> interface for the specified media protection system. </p> + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Creates an instance of the <strong>{{IMFSensorStream}}</strong> interface.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{IMFSensorGroup}}</strong> is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{LPCWSTR}}</strong> is null.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Used to determinine whether the adapter supports creating heaps from existing system memory. Such heaps are not intended for general use, but are exceptionally useful for diagnostic purposes because they are guaranteed to persist even after the adapter faults or experiences a device-removal event. Persistence is not guaranteed for heaps returned by CreateHeap or CreateCommittedResource, even when the heap resides in system memory.</p> + <p>For a variety of performance and compatibility reasons, applications should not make use of this feature except for diagnostic purposes. In particular, heaps created using this feature only support system-memory heaps with cross-adapter properties, which precludes many optimization opportunities that typical application scenarios could otherwise take advantage of.</p> + + + <dd> <p>True if the adapter can create a heap from existing system memory. Otherwise, false.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains flags that indicate the status of the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + <p>Contains flags for the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + + + + + + + + + + <p>Contains statistics about the performance of the sink writer.</p> + + + <dd> <p>The size of the structure, in bytes.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the sink writer. The sink writer updates this value each time the application calls <strong>{{IMFSinkWriter::WriteSample}}</strong>.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample to be encoded. The sink writer updates this value whenever it calls <strong>{{IMFTransform::ProcessOutput}}</strong> on the encoder.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the media sink. The sink writer updates this value whenever it calls <strong>{{IMFStreamSink::ProcessSample}}</strong> on the media sink.</p> </dd> + + + <dd> <p>The time stamp of the most recent stream tick. The sink writer updates this value whenever the application calls <strong>{{IMFSinkWriter::SendStreamTick}}</strong>.</p> </dd> + + + <dd> <p>The system time of the most recent sample request from the media sink. The sink writer updates this value whenever it receives an {{MEStreamSinkRequestSample}} event from the media sink. The value is the current system time.</p> </dd> + + + <dd> <p>The number of samples received.</p> </dd> + + + <dd> <p>The number of samples encoded.</p> </dd> + + + <dd> <p>The number of samples given to the media sink.</p> </dd> + + + <dd> <p>The number of stream ticks received.</p> </dd> + + + <dd> <p>The amount of data, in bytes, currently waiting to be processed. </p> </dd> + + + <dd> <p>The total amount of data, in bytes, that has been sent to the media sink.</p> </dd> + + + <dd> <p>The number of pending sample requests.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink.</p> </dd> + + + + + <p>Creates an instance of either the sink writer or the source reader.</p> + <p>To get a reference to this interface, call the <strong>CoCreateInstance</strong> function. The {{CLSID}} is <strong>{{CLSID_MFReadWriteClassFactory}}</strong>. Call the <strong>{{MFStartup}}</strong> function before using the interface.</p><p>As an alternative to using this interface, you can call any of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Internally, these functions use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Creates an instance of the sink writer or source reader, given a {{URL}}.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A null-terminated string that contains a {{URL}}. If <em>clsid</em> is {{CLSID_}}<strong>{{MFSinkWriter}}</strong>, the {{URL}} specifies the name of the output file. The sink writer creates a new file with this name. If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, the {{URL}} specifies the input file for the source reader.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sink writer or source reader, given an <strong>{{IUnknown}}</strong> reference. </p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object that is used to initialize the source reader or sink writer. The method queries this reference for one of the following interfaces.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IMFByteStream}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a byte stream. </p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>, the sink writer writes data to this byte stream.</p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, this byte stream provides the source data for the source reader.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSink}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media sink. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSource}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media source. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Implemented by the Microsoft Media Foundation source reader object.</p> + <p>To create the source reader, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSourceReaderEx}}</strong>.</p> + + + + <p>Queries whether a stream is selected.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the stream is selected and will generate data. Receives <strong>{{FALSE}}</strong> if the stream is not selected and will not generate data.</p> </dd> + + + + + <p>Selects or deselects one or more streams.</p> + <p>There are two common uses for this method:</p><ul> <li>To change the default stream selection. Some media files contain multiple streams of the same type. For example, a file might include audio streams for multiple languages. You can use this method to change which of the streams is selected. To get information about each stream, call <strong>{{IMFSourceReader::GetPresentationAttribute}}</strong> or <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If you will not need data from one of the streams, it is a good idea to deselect that stream. If the stream is selected, the media source might hold onto a queue of unread data, and the queue might grow indefinitely, consuming memory. </li> </ul><p>For an example of deselecting a stream, see Tutorial: Decoding Audio.</p><p>If a stream is deselected, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong> for that stream. Other <strong>{{IMFSourceReader}}</strong> methods are valid for deselected streams.</p><p>Stream selection does not affect how the source reader loads or unloads decoders in memory. In particular, deselecting a stream does not force the source reader to unload the decoder for that stream.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to select streams or <strong>{{FALSE}}</strong> to deselect streams. If a stream is deselected, it will not generate data.</p> </dd> + + + + + <p>Gets a format that is supported natively by the media source.</p> + <p>This method queries the underlying media source for its native output format. Potentially, each source stream can produce more than one output format. Use the <em>dwMediaTypeIndex</em> parameter to loop through the available formats. Generally, file sources offer just one format per stream, but capture devices might offer several formats.</p><p> The method returns a copy of the media type, so it is safe to modify the object received in the <em> ppMediaType</em> parameter.</p><p>To set the output type for a stream, call the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_MORE_TYPES}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the current media type for a stream.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets the media type for a stream.</p><p>This media type defines that format that the Source Reader produces as output. It can differ from the native format provided by the media source. See Remarks for more information.</p> + <p>For each stream, you can set the media type to any of the following:</p><ul> <li>One of the native types offered by the media source. To enumerate the native types, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If the native media type is compressed, you can specify a corresponding uncompressed format. The Source Reader will search for a decoder that can decode from the native format to the specified uncompressed format.</li> </ul><p>Audio resampling support was added to the source reader with Windows?8. In versions of Windows prior to Windows?8, the source reader does not support audio resampling. If you need to resample the audio in versions of Windows earlier than Windows?8, you can use the <strong>Audio Resampler {{DSP}}</strong>.</p><p>If you set the {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attribute to <strong>{{TRUE}}</strong> when you create the Source Reader, the Source Reader will convert {{YUV}} video to {{RGB}}-32. This conversion is not optimized for real-time video playback.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>At least one decoder was found for the native stream type, but the type specified by <em>pMediaType</em> was rejected.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find a decoder for the native stream type.</p> </td></tr> </table><p>?</p> + + + + <p>Seeks to a new position in the media source.</p> + <p>The <strong>SetCurrentPosition</strong> method does not guarantee exact seeking. The accuracy of the seek depends on the media content. If the media content contains a video stream, the <strong>SetCurrentPosition</strong> method typically seeks to the nearest key frame before the desired position. The distance between key frames depends on several factors, including the encoder implementation, the video content, and the particular encoding settings used to encode the content. The distance between key frame can vary within a single video file (for example, depending on scene complexity).</p><p>After seeking, the application should call <strong>{{IMFSourceReader::ReadSample}}</strong> and advance to the desired position. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that specifies the <em>time format</em>. The time format defines the units for the <em>varPosition</em> parameter. The following value is defined for all media sources:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>100-nanosecond units.</p> </td></tr> </table> <p>?</p> <p>Some media sources might support additional values. </p> </dd> + + + <dd> <p>The position from which playback will be started. The units are specified by the <em>guidTimeFormat</em> parameter. If the <em>guidTimeFormat</em> parameter is <strong>{{GUID_NULL}}</strong>, set the variant type to <strong>{{VT_I8}}</strong>.</p> </dd> + + + + + <p>Reads the next sample from the media source.</p> + <p>If the requested stream is not selected, the return code is <strong>{{MF_E_INVALIDREQUEST}}</strong>. See <strong>{{IMFSourceReader::SetStreamSelection}}</strong>.</p><p> This method can complete synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOTACCEPTING}}</strong></strong></dt> </dl> </td><td> <p>A flush operation is pending. See <strong>{{IMFSourceReader::Flush}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to pull data from. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ANY_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>Get the next available sample, regardless of which stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_CONTROL_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the time stamp of the sample, or the time of the stream event indicated in <em>pdwStreamFlags</em>. The time is given in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface or the value <strong>{{NULL}}</strong> (see Remarks). If this parameter receives a non-<strong>{{NULL}}</strong> reference, the caller must release the interface.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>The <strong>Flush</strong> method discards all queued samples and cancels all pending sample requests.</p><p>This method can complete either synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about the setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p><p>In synchronous mode, the method blocks until the operation is complete.</p><p>In asynchronous mode, the application's <strong>{{IMFSourceReaderCallback::OnFlush}}</strong> method is called when the flush operation completes. While a flush operation is pending, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_NOTACCEPTING}}</strong>.</p><strong>Note</strong>??In Windows?7, there was a bug in the implementation of this method, which causes <strong>OnFlush</strong> to be called before the flush operation completes. A hotfix is available that fixes this bug. For more information, see http://support.microsoft.com/kb/979567.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to flush. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Queries the underlying media source or decoder for an interface.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. If the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, the method queries the media source. Otherwise, it queries the decoder that is associated with the specified stream. The following values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A service identifier {{GUID}}. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls the <strong>{{IMFGetService::GetService}}</strong> method. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute from the underlying media source.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A {{GUID}} that identifies the attribute to retrieve. If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, <em>guidAttribute</em> can specify one of the following:</p> <ul> <li>A presentation descriptor attribute. For a list of values, see Presentation Descriptor Attributes.</li> <li> {{MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS}}. Use this value to get characteristics flags from the media source.</li> </ul> <p>Otherwise, if the <em>dwStreamIndex</em> parameter specifies a stream, <em>guidAttribute</em> specifies a stream descriptor attribute. For a list of values, see Stream Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value of the attribute. Call the <strong>PropVariantClear</strong> function to free the <strong>{{PROPVARIANT}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IMFSourceReader}}</strong> interface.</p><p>The Source Reader implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Source Reader.</p> + + + + <p>Sets the native media type for a stream on the media source.</p> + <p>This method sets the output type that is produced by the media source. Unlike the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method, this method does not insert any decoders, video processors, or other transforms. The media source must support the specified media type natively. To get a list of supported types from the media source, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>This method can trigger a change in the output format for the stream. If so, the <strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong> flag is returned in the <em>pdwStreamFlags</em> parameter. The method might also cause the Source Reader to remove any effects that were added by the <strong>{{IMFSourceReaderEx::AddTransformForStream}}</strong> method. If this occurs, the <strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong> flag is returned in <em>pdwStreamFlags</em>. </p><p>This method is useful with audio and video capture devices, because a device might support several output formats. This method enables the application to choose the device format before decoders and other transforms are added.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd></dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong></dt> </dl> </td><td> <p>All effects were removed from the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong></dt> </dl> </td><td> <p>The current output type changed.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Adds a transform, such as an audio or video effect, to a stream.</p> + <p>This method attempts to add the transform at the end of the current processing chain. </p><p>To use this method, make the following sequence of calls:</p><ol> <li>Call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> to set the output type that you want for the stream. In this step, you can specify a media type that contains only the major type and subtype {{GUIDs}}. For example, to get 32-bit {{RGB}} output, set a major type of <strong>{{MFMediaType_Video}}</strong> and a subtype of <strong>{{MFVideoFormat_RGB32}}</strong>. (For more information, see Media Type {{GUIDs}}.)</li> <li>Call <strong>AddTransformForStream</strong>. If the Source Reader successfully connects the transform, it sets the output type on the transform.</li> <li>Call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong> to get the output type from the transform. This method returns a media type with a complete format description.</li> <li>Optionally, if you want to modify the output type, call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> again to set a complete media type on the transform.</li> </ol><p>The <strong>AddTransformForStream</strong> method will not insert a decoder into the processing chain. If the native stream format is encoded, and the transform requires an uncompressed format, call <strong>SetCurrentMediaType</strong> to set the uncompressed format (step 1 in the previous list). However, the method will insert a video processor to convert between {{RGB}} and {{YUV}} formats, if required.</p><p>The method fails if the source reader was configured with the {{MF_READWRITE_DISABLE_CONVERTERS}} or {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attributes. </p><p>In asynchronous mode, the method also fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>You can add a transform at any time during streaming. However, the method does not flush or drain the pipeline before inserting the transform. Therefore, if data is already in the pipeline, the next sample is not guaranteed to have the transform applied.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The transform does not support the current stream format, and no conversion was possible. See Remarks for more information.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to configure. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following:</p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes all of the Media Foundation transforms ({{MFTs}}) for a specified stream, with the exception of the decoder.</p> + <p>Calling this method can reset the current output type for the stream. To get the new output type, call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream for which to remove the {{MFTs}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>You can use this method to configure an {{MFT}} after it is inserted into the processing chain. Do not use the reference returned in <em>ppTransform</em> to set media types on the {{MFT}} or to process data. In particular, calling any of the following <strong>{{IMFTransform}}</strong> methods could have unexpected results.</p><ul> <li> <strong>AddInputStreams</strong> </li> <li> <strong>DeleteInputStream</strong> </li> <li> <strong>ProcessEvent</strong> </li> <li> <strong>ProcessInput</strong> </li> <li> <strong>ProcessMessage</strong> </li> <li> <strong>ProcessOutput</strong> </li> <li> <strong>SetInputType</strong> </li> <li> <strong>SetOutputType</strong> </li> </ul><p>If a decoder is present, it appears at index position zero.</p><p>To avoid losing any data, you should drain the source reader before calling this method. For more information, see Draining the Data Pipeline.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>dwTransformIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query for the {{MFT}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation source reader.</p> + <p>Use the {{MF_SOURCE_READER_ASYNC_CALLBACK}} attribute to set the callback reference when you first create the source reader object.</p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>If you do not specify a callback reference, the source reader operates synchronously.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::ReadSample}}</strong> method completes.</p> + <p>The <em>pSample</em> parameter might be <strong>{{NULL}}</strong>. For example, when the source reader reaches the end of a stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_ENDOFSTREAM}}</strong> flag, and <em>pSample</em> is <strong>{{NULL}}</strong>. </p><p>If there is a gap in the stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_STREAMTICK}}</strong> flag, <em>pSample</em> is <strong>{{NULL}}</strong>, and <em>llTimestamp</em> indicates the time when the gap occurred. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::Flush}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the source reader receives certain events from the media source.</p> + <p>In the current implementation, the source reader uses this method to forward the following events to the application:</p><ul> <li> {{MEBufferingStarted}} </li> <li> {{MEBufferingStopped}} </li> <li> {{MEConnectEnd}} </li> <li> {{MEConnectStart}} </li> <li> {{MEExtendedType}} </li> <li> {{MESourceCharacteristicsChanged}} </li> <li> {{MESourceMetadataChanged}} </li> </ul><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + <dd> <p>For stream events, the value is the zero-based index of the stream that sent the event. For source events, the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface of the event.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSourceReaderCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSourceReader}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSourceReader}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + <p>Adds a stream to the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. This media type specifies the format of the samples that will be written to the file. It does not need to match the input format. To set the input format, call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong>.</p> </dd> + + + <dd> <p>Receives the zero-based index of the new stream.</p> </dd> + + + + + <p>Sets the input format for a stream on the sink writer.</p> + <p>The input format does not have to match the target format that is written to the media sink. If the formats do not match, the method attempts to load an encoder that can encode from the input format to the target format.</p><p>After streaming begins?that is, after the first call to <strong>{{IMFSinkWriter::WriteSample}}</strong>?you can call this method at any time to change the input format. However, the underlying encoder and media sink must support dynamic format changes.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>The underlying media sink does not support the format, no conversion is possible, or a dynamic format change is not possible.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find an encoder for the encoded format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream. The index is received by the <em>pdwStreamIndex</em> parameter of the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. The media type specifies the input format.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. Use the attribute store to configure the encoder. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Initializes the sink writer for writing.</p> + <p>Call this method after you configure the input streams and before you send any data to the sink writer. </p><p>You must call <strong>BeginWriting</strong> before calling any of the following methods:</p><ul> <li> <strong>{{IMFSinkWriter::Finalize}}</strong> </li> <li> <strong>{{IMFSinkWriter::Flush}}</strong> </li> <li> <strong>{{IMFSinkWriter::NotifyEndOfSegment}}</strong> </li> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>The underlying media sink must have at least one input stream. Otherwise, <strong>BeginWriting</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. To add input streams, call the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p><p>If <strong>BeginWriting</strong> succeeds, any further calls to <strong>BeginWriting</strong> return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + + <p>Delivers a sample to the sink writer.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>By default, the sink writer limits the rate of incoming data by blocking the calling thread inside the <strong>WriteSample</strong> method. This prevents the application from delivering samples too quickly. To disable this behavior, set the {{MF_SINK_WRITER_DISABLE_THROTTLING}} attribute when you create the sink writer.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream for this sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + + + <p>Indicates a gap in an input stream.</p> + <p>For video, call this method once for each missing frame. For audio, call this method at least once per second during a gap in the audio. Set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute on the first media sample after the gap.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>The position in the stream where the gap in the data occurs. The value is given in 100-nanosecond units, relative to the start of the stream.</p> </dd> + + + + + <p>Places a marker in the specified stream.</p> + <p>To use this method, you must provide an asynchronous callback when you create the sink writer. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}.</p><p>Markers provide a way to be notified when the media sink consumes all of the samples in a stream up to a certain point. The media sink does not process the marker until it has processed all of the samples that came before the marker. When the media sink processes the marker, the sink writer calls the application's <strong>OnMarker</strong> method. When the callback is invoked, you know that the sink has consumed all of the previous samples for that stream.</p><p>For example, to change the format midstream, call <strong>PlaceMarker</strong> at the point where the format changes. When <strong>OnMarker</strong> is called, it is safe to call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong> to change the input type (assuming that the media sink supports dynamic format changes).</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p> </p><strong>Note</strong>??The <em>pvContext</em> parameter of the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method is not passed to the <em>pvarContextValue</em> parameter of the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. These two parameters are not directly related.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Pointer to an application-defined value. The value of this parameter is returned to the caller in the <em>pvContext</em> parameter of the caller's <strong>{{IMFSinkWriterCallback::OnMarker}}</strong> callback method. The application is responsible for any memory allocation associated with this data. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Notifies the media sink that a stream has reached the end of a segment.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink for the specified streams. For more information, see <strong>{{IMFStreamSink::PlaceMarker}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to signal that all streams have reached the end of a segment.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>For each stream that is flushed, the sink writer drops all pending samples, flushes the encoder, and sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to flush, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to flush all of the streams.</p> </dd> + + + + + <p>Completes all writing operations on the sink writer.</p> + <p>Call this method after you send all of the input samples to the sink writer. The method performs any operations needed to create the final output from the media sink.</p><p>If you provide a callback interface when you create the sink writer, this method completes asynchronously. When the operation completes, the <strong>{{IMFSinkWriterCallback::OnFinalize}}</strong> method of your callback is called. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}. Otherwise, if you do not provide a callback, the <strong>Finalize</strong> method blocks until the operation completes.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> to place end-of-segment markers for each stream on the media sink. It also calls <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> and <strong>EndFinalize</strong> if the media sink supports the <strong>{{IMFFinalizableMediaSink}}</strong> interface.</p><p>After this method is called, the following methods will fail:</p><ul> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>If you do not call <strong>Finalize</strong>, the output from the media sink might be incomplete or invalid. For example, required file headers might be missing from the output file.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries the underlying media sink or encoder for an interface.</p> + <p>If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong>, the method attempts to get the interface from the media sink. Otherwise, it attempts to get the interface from the encoder for the stream at the specified index. If that fails, or if no encoder is present, the method attempts to get the interface from the stream on the media sink.</p><p> If the input and output types of the sink are identical and compressed, it's possible that no encoding is required and the video encoder will not be instantiated. In that case, <strong>GetServiceForStream</strong> will return {{MF_E_UNSUPPORTED_SERVICE}}. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A service identifier {{GUID}}, or <strong>{{GUID_NULL}}</strong>. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls <strong>{{IMFGetService::GetService}}</strong>. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets statistics about the performance of the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}} </strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MF_SINK_WRITER_STATISTICS}}</strong> structure. Before calling the method, set the <strong>cb</strong> member to the size of the structure in bytes. The method fills the structure with statistics from the sink writer.</p> </dd> + + + + + <p>Extends the <strong>{{IMFSinkWriter}}</strong> interface.</p><p>The Sink Writer implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Sink Writer.</p> + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream.</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a reference to a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Provides additional functionality on the sink writer for dynamically changing the media type and encoder configuration. </p> + <p>The Sink Writer implements this interface in Windows?8.1. To get a reference to this interface, call <strong>QueryInterface</strong> on the <strong>{{IMFSinkWriter}}</strong>.</p> + + + + <p>Dynamically changes the target media type that Sink Writer is encoding to. </p> + <p>The new media type must be supported by the media sink being used and by the encoder {{MFTs}} installed on the system. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>The new media format to encode to.</p> </dd> + + + <dd> <p>The new set of encoding parameters to configure the encoder with. If not specified, previously provided parameters will be used. +</p> </dd> + + + + + <p>Dynamically updates the encoder configuration with a collection of new encoder settings.</p> + <p>The encoder will be configured with these settings after all previously queued input media samples have been sent to it through <strong>{{IMFTransform::ProcessInput}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>A set of encoding parameters to configure the encoder with. </p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation sink writer. </p> + <p>Set the callback reference by setting the {{MF_SINK_WRITER_ASYNC_CALLBACK}} attribute when you first create the sink writer. </p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::Finalize}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSinkWriterCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSinkWriter}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSinkWriter}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Creates the source reader from a {{URL}}.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong> method to create a media source from the {{URL}}. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of a media file to open.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This byte stream will provide the source data for the source reader.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a media source.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>By default, when the application releases the source reader, the source reader shuts down the media source by calling <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source. At that point, the application can no longer use the media source.</p><p>To change this default behavior, set the {{MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN}} attribute in the <em>pAttributes</em> parameter. If this attribute is <strong>{{TRUE}}</strong>, the application is responsible for shutting down the media source.</p><p>When using the Source Reader, do not call any of the following methods on the media source:</p><ul> <li> <strong>{{IMFMediaSource::Pause}}</strong> </li> <li> <strong>{{IMFMediaSource::Start}}</strong> </li> <li> <strong>{{IMFMediaSource::Stop}}</strong> </li> <li>All <strong>{{IMFMediaEventGenerator}}</strong> methods</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The source contains protected content.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a {{URL}} or byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>The first three parameters to this function can be <strong>{{NULL}}</strong>; however, only certain combinations are valid:</p><p> </p><table> <tr><th>Description</th><th><em>pwszOutputURL</em></th><th><em>pByteStream</em></th><th><em>pAttributes</em></th></tr> <tr><td>Specify a byte stream, with no {{URL}}.</td><td><strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Required (must not be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify a {{URL}}, with no byte stream.</td><td>not <strong>{{NULL}}</strong></td><td><strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify both a {{URL}} and a byte stream.</td><td>non-<strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> </table><p>?</p><p>The <em>pAttributes</em> parameter is required in the first case and optional in the others.</p><ul> <li>Case 1: Specify a byte stream without a {{URL}}. The <em>pAttributes</em> parameter must point to an attribute store that contains the {{MF_TRANSCODE_CONTAINERTYPE}} attribute. The sink writer uses the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to determine the type of file container to write, such as {{ASF}} or {{MP4}}.</li> <li>Case 2: Specify a {{URL}} without a byte stream. The sink writer creates a new file named <em>pwszOutputURL</em>. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, if the {{MF_TRANSCODE_CONTAINERTYPE}} attribute is absent or <em>pAttributes</em> is <strong>{{NULL}}</strong>, the sink writer uses the file name extension to select the container type; for example, ".asf" for an {{ASF}} file.</li> <li>Case 3: Specify both a {{URL}} and a byte stream. The sink writer writes to the byte stream. The {{URL}} provided in <em>pwszOutputURL</em> is informational only; the sink writer does not create a new file. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, the sink writer uses the file name extension to select the container type. The {{MF_TRANSCODE_CONTAINERTYPE}} attribute overrides the {{URL}} file name extension in this case.</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified {{URL}} was not found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If this parameter is a valid reference, the sink writer writes to the provided byte stream. (The byte stream must be writable.) Otherwise, if <em>pByteStream</em> is <strong>{{NULL}}</strong>, the sink writer creates a new file named <em>pwszOutputURL</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a media sink.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>When you are done using the media sink, call the media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method. (The sink writer does not shut down the media sink.) Release the sink writer before calling <strong>Shutdown</strong> on the media sink.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaSink}}</strong> interface of a media sink. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Defines the data type for a key/value pair.</p> + + + <dd> <p>Unsigned 32-bit integer.</p> </dd> + + + <dd> <p>Unsigned 64-bit integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p><strong>{{GUID}}</strong> value.</p> </dd> + + + <dd> <p>{{NULL}}-terminated wide-character string.</p> </dd> + + + <dd> <p>Byte array.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference.</p> </dd> + + + + + <p> </p><p>Specifies how to compare the attributes on two objects.</p> + + + <dd> <p>Check whether all the attributes in <em>pThis</em> exist in <em>pTheirs</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether all the attributes in <em>pTheirs</em> exist in <em>pThis</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether both objects have identical attributes with the same data.</p> </dd> + + + <dd> <p>Check whether the attributes that exist in both objects have the same data.</p> </dd> + + + <dd> <p>Find the object with the fewest number of attributes, and check if those attributes exist in the other object and have the same data.</p> </dd> + + + + + <p> </p><p>Defines flags for serializing and deserializing attribute stores.</p> + + + <dd> <p>If this flag is set, <strong>{{IUnknown}}</strong> references in the attribute store are marshaled to and from the stream. If this flag is absent, <strong>{{IUnknown}}</strong> references in the attribute store are not marshaled or serialized.</p> </dd> + + + + + <p>Contains flags for the <strong>{{IMF2DBuffer2::Lock2DSize}}</strong> method.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Specifies the conversion function from linear {{RGB}} to non-linear {{RGB}} (R'G'B'). </p> + <p> These flags are used with the <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferFunction}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown. Treat as {{MFVideoTransFunc_709}}. </p> </dd> + + + <dd> <p> Linear {{RGB}} (gamma = 1.0). </p> </dd> + + + <dd> <p> True 1.8 gamma, L' = L^1/1.8. </p> </dd> + + + <dd> <p> True 2.0 gamma, L' = L^1/2.0. </p> </dd> + + + <dd> <p> True 2.2 gamma, L' = L^1/2.2. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709 transfer function. Gamma 2.2 curve with a linear segment in the lower range. This transfer function is used in {{BT}}.709, {{BT}}.601, {{SMPTE}} 296M, {{SMPTE}} 170M, {{BT}}.470, and {{SPMTE}} 274M. In addition {{BT}}-1361 uses this function within the range [0...1]. </p> </dd> + + + <dd> <p> {{SPMTE}} 240M transfer function. Gamma 2.2 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> sRGB transfer function. Gamma 2.4 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> True 2.8 gamma. L' = L^1/2.8. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System B, G ({{PAL}}). </p> </dd> + + + <dd> <p>Logarithmic transfer (100:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Logarithmic transfer (316.22777:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Symmetric {{ITU}}-R {{BT}}.709.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p>Specifies the color primaries of a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoPrimaries}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p> The color primaries are unknown. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709. Also used for sRGB and scRGB. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System B,G ({{NTSC}}). </p> </dd> + + + <dd> <p> {{SMPTE}} 170M. </p> </dd> + + + <dd> <p> {{SMPTE}} 240M. </p> </dd> + + + <dd> <p> {{EBU}} 3213. </p> </dd> + + + <dd> <p> {{SMPTE}} C ({{SMPTE}} {{RP}} 145). </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> </p><p>Describes the optimal lighting for viewing a particular set of video content.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> attribute.</p> + + + <dd> <p>The optimal lighting is unknown.</p> </dd> + + + <dd> <p>Bright lighting; for example, outdoors.</p> </dd> + + + <dd> <p>Medium brightness; for example, normal office lighting.</p> </dd> + + + <dd> <p>Dim; for example, a living room with a television and additional low lighting.</p> </dd> + + + <dd> <p>Dark; for example, a movie theater.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Describes the conversion matrices between Y'PbPr (component video) and studio R'G'B'.</p> + <p>This enumeration is used with the <strong>{{MF_MT_YUV_MATRIX}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferMatrix}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown transfer matrix. Treat as {{MFVideoTransferMatrix_BT709}}.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.709 transfer matrix.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.601 transfer matrix. Also used for {{SMPTE}} 170 and {{ITU}}-R {{BT}}.470-2 System B,G.</p> </dd> + + + <dd> <p>{{SMPTE}} 240M transfer matrix.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Contains flags that define the chroma encoding scheme for Y'Cb'Cr' data.</p> + <p>These flags are used with the <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoChromaSubSampling}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown encoding scheme.</p> </dd> + + + <dd> <p>Chroma should be reconstructed as if the underlying video was progressive content, rather than skipping fields or applying chroma filtering to minimize artifacts from reconstructing 4:2:0 interlaced chroma.</p> </dd> + + + <dd> <p>Chroma samples are aligned horizontally with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel to the right of the corresponding luma sample.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel down from the corresponding luma sample.</p> </dd> + + + <dd> <p>The U and V planes are aligned vertically. If this flag is not set, the chroma planes are assumed to be out of phase by 1/2 chroma sample, alternating between a line of U followed by a line of V.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-2 video. Chroma samples are aligned horizontally with the luma samples, but are not aligned vertically. The U and V planes are aligned vertically.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-1 video.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{PAL}} {{DV}} video.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically and horizontally with the luma samples. {{YUV}} formats such as 4:4:4, 4:2:2, and 4:1:1 are always cosited in both directions and should use this flag.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p>Specifies whether color data includes headroom and toeroom. Headroom allows for values beyond 1.0 white ("whiter than white"), and toeroom allows for values below reference 0.0 black ("blacker than black"). </p> + <p> This enumeration is used with the <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_NominalRange}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown nominal range. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_0_255}}. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_16_235}}. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [0...255] for 8-bit samples or [0...1023] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [16...235] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0..1] maps to [48...208] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p>The normalized range [0..1] maps to [64...127] for 8-bit samples or [256...508] for 10-bit samples. This range is used in the xRGB color space.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Contains flags that describe a video stream.</p><p>These flags are used in the <strong>{{MFVideoInfo}}</strong> structure, which is part of the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. The following table lists the attributes that correspond to the flags defined in this enumeration.</p><table> <tr><th>Flags</th><th>Media Type Attribute</th></tr> <tr><td> <p>{{MFVideoFlag_PAD_TO_None}}</p> <p>{{MFVideoFlag_PAD_TO_4x3}}</p> <p>{{MFVideoFlag_PAD_TO_16x9}}</p> </td><td> <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint235_1}}</p> </td><td> <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_AnalogProtected}}</p> <p>{{MFVideoFlag_DigitallyProtected}}</p> </td><td> <strong>{{MF_MT_DRM_FLAGS}}</strong> </td></tr> <tr><td>{{MFVideoFlag_PanScanEnabled}}</td><td> <strong>{{MF_MT_PAN_SCAN_ENABLED}}</strong> </td></tr> <tr><td>{{MFVideoFlag_BottomUpLinearRep}}</td><td>Use the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute to specify a negative stride.</td></tr> </table><p>?</p><p>The following flags were defined to describe per-sample interlacing information, but are obsolete:</p><ul> <li> {{MFVideoFlag_ProgressiveContent}} </li> <li> {{MFVideoFlag_FieldRepeatCountMask}} </li> <li> {{MFVideoFlag_FieldRepeatCountShift}} </li> <li> {{MFVideoFlag_ProgressiveSeqReset}} </li> <li> {{MFVideoFlag_LowerFieldFirst}} </li> </ul><p>Instead, components should use sample attributes to describe per-sample interlacing information, as described in the topic Video Interlacing.</p> + + + + <p> </p><p>Contains values that specify common video formats.</p> + + + <dd> <p>Reserved; do not use.</p> </dd> + + + <dd> <p>{{NTSC}} television (720 x 480i).</p> </dd> + + + <dd> <p>{{PAL}} television (720 x 576i).</p> </dd> + + + <dd> <p>{{DVD}}, {{NTSC}} standard (720 x 480).</p> </dd> + + + <dd> <p>{{DVD}}, {{PAL}} standard (720 x 576).</p> </dd> + + + <dd> <p>{{DV}} video, {{PAL}} standard.</p> </dd> + + + <dd> <p>{{DV}} video, {{NTSC}} standard.</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{SD}} (480i).</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} interlaced (1080i)</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} progressive (720p)</p> </dd> + + + + + + + + <p> </p><p>Specifies the origin for a seek request.</p> + + + <dd> <p>The seek position is specified relative to the start of the stream.</p> </dd> + + + <dd> <p>The seek position is specified relative to the current read/write position in the stream.</p> </dd> + + + + + <p> </p><p>Specifies the requested access mode for opening a file.</p> + + + <dd> <p>Read mode.</p> </dd> + + + <dd> <p>Write mode.</p> </dd> + + + <dd> <p>Read and write mode.</p> </dd> + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p> Specifies the behavior when opening a file. </p> + + + <dd> <p> Use the default behavior. </p> </dd> + + + <dd> <p> Open the file with no system caching. </p> </dd> + + + <dd> <p>Subsequent open operations can have write access to the file. </p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Specifies the object type for the <strong>{{IMFPluginControl}}</strong> interface.</p> + + + + <p>Defines policy settings for the <strong>{{IMFPluginControl2::SetPolicy}}</strong> method.</p> + + + + + + + <p>Contains media type information for registering a Media Foundation transform ({{MFT}}). </p> + + + <dd> <p>The major media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>The media subtype. For a list of possible values, see the following topics:</p> <ul> <li> Audio Subtype {{GUIDs}} </li> <li> Video Subtype {{GUIDs}} </li> </ul> </dd> + + + + + <p> </p><p>Represents a ratio.</p> + + + <dd> <p>Numerator of the ratio.</p> </dd> + + + <dd> <p>Denominator of the ratio.</p> </dd> + + + + + <p> Specifies an offset as a fixed-point real number. </p> + <p> The value of the number is <strong>value</strong> + (<strong>fract</strong> / 65536.0f).</p> + + + <dd> <p> The fractional part of the number. </p> </dd> + + + <dd> <p> The integer part of the number. </p> </dd> + + + + + <p> Specifies a rectangular area within a video frame. </p> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the x-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the y-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> A <strong>{{SIZE}}</strong> structure that contains the width and height of the rectangle. </p> </dd> + + + + + <p> </p><p>Contains video format information that applies to both compressed and uncompressed formats.</p><p>This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVideoInfo}}</strong> structure. The following table lists the attributes that correspond to the members of this structure.</p><table> <tr><th>Structure Member</th><th>Media Type Attribute</th></tr> <tr><td><strong>dwWidth</strong>, <strong>dwHeight</strong></td><td> <strong>{{MF_MT_FRAME_SIZE}}</strong> </td></tr> <tr><td><strong>PixelAspectRatio</strong></td><td> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </td></tr> <tr><td><strong>SourceChromaSubsampling</strong></td><td> <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> </td></tr> <tr><td><strong>InterlaceMode</strong></td><td> <strong>{{MF_MT_INTERLACE_MODE}}</strong> </td></tr> <tr><td><strong>TransferFunction</strong></td><td> <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> </td></tr> <tr><td><strong>ColorPrimaries</strong></td><td> <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> </td></tr> <tr><td><strong>TransferMatrix</strong></td><td> <strong>{{MF_MT_YUV_MATRIX}}</strong> </td></tr> <tr><td><strong>SourceLighting</strong></td><td> <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> </td></tr> <tr><td><strong>FramesPerSecond</strong></td><td> <strong>{{MF_MT_FRAME_RATE}}</strong> </td></tr> <tr><td><strong>NominalRange</strong></td><td> <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> </td></tr> <tr><td><strong>GeometricAperture</strong></td><td> <strong>{{MF_MT_GEOMETRIC_APERTURE}}</strong> </td></tr> <tr><td><strong>MinimumDisplayAperture</strong></td><td> <strong>{{MF_MT_MINIMUM_DISPLAY_APERTURE}}</strong> </td></tr> <tr><td><strong>PanScanAperture</strong></td><td> <strong>{{MF_MT_PAN_SCAN_APERTURE}}</strong> </td></tr> <tr><td><strong>VideoFlags</strong></td><td>See <strong>{{MFVideoFlags}}</strong>.</td></tr> </table><p>?</p> + + + + <p> </p><p>Describes a 4:4:4:4 Y'Cb'Cr' sample.</p> + + + <dd> <p>Cr (chroma difference) value.</p> </dd> + + + <dd> <p>Cb (chroma difference) value.</p> </dd> + + + <dd> <p>Y (luma) value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p> </p><p>Describes an {{ARGB}} color value.</p> + + + <dd> <p>Blue value.</p> </dd> + + + <dd> <p>Green value.</p> </dd> + + + <dd> <p>Red value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p>Contains one palette entry in a color table.</p> + <p>This union can be used to represent both {{RGB}} palettes and Y'Cb'Cr' palettes. The video format that defines the palette determines which union member should be used.</p> + + + <dd> <p> <strong>{{MFARGB}}</strong> structure that contains an {{RGB}} color.</p> </dd> + + + <dd> <p> <strong>{{MFAYUVSample}}</strong> structure that contains a Y'Cb'Cr' color.</p> </dd> + + + + + <p> </p><p>Contains information about an uncompressed video format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + + + + <p> </p><p>Contains information about a video compression format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>For uncompressed video formats, set the structure members to zero.</p> + + + + <p> </p><p>Describes a video format.</p> + <p>Applications should avoid using this structure. Instead, it is recommended that applications use attributes to describe the video format. For a list of media type attributes, see Media Type Attributes. With attributes, you can set just the format information that you know, which is easier (and more likely to be accurate) than trying to fill in complete format information for the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><p>To initialize a media type object from an <strong>{{MFVIDEOFORMAT}}</strong> structure, call <strong>{{MFInitMediaTypeFromMFVideoFormat}}</strong>.</p><p>You can use the <strong>{{MFVIDEOFORMAT}}</strong> structure as the format block for a DirectShow media type. Set the format {{GUID}} to {{FORMAT_MFVideoFormat}}.</p> + + + <dd> <p>Size of the structure, in bytes. This value includes the size of the palette entries that may appear after the <strong>surfaceInfo</strong> member.</p> </dd> + + + <dd> <p> <strong>{{MFVideoInfo}}</strong> structure. This structure contains information that applies to both compressed and uncompressed formats.</p> </dd> + + + <dd> <p>Video subtype. See Video Subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> <strong>{{MFVideoCompressedInfo}}</strong> structure. This structure contains information that applies only to compressed formats.</p> </dd> + + + <dd> <p> <strong>{{MFVideoSurfaceInfo}}</strong> structure. This structure contains information that applies only to uncompressed formats.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies which value to retrieve. </p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value, if the value is found. Call <strong>PropVariantClear</strong> to free the memory allocated by this method. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the method searches for the key and returns {{S_OK}} if the key is found, but does not copy the value.</p> </dd> + + + + + <p> </p><p>Retrieves the data type of the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key is not stored in this object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Queries whether a stored attribute value equals to a specified <strong>{{PROPVARIANT}}</strong>.</p> + <p>The method sets <em>pbResult</em> to <strong>{{FALSE}}</strong> for any of the following reasons:</p><ul> <li> <p>No attribute is found whose key matches the one given in <em>guidKey</em>.</p> </li> <li> <p>The attribute's <strong>{{PROPVARIANT}}</strong> type does not match the type given in <em>Value</em>.</p> </li> <li> <p>The attribute value does not match the value given in <em>Value</em>.</p> </li> <li> <p>The method fails.</p> </li> </ul><p>Otherwise, the method sets <em>pbResult</em> to <strong>{{TRUE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p><strong>{{PROPVARIANT}}</strong> that contains the value to compare.</p> </dd> + + + <dd> <p>Receives a Boolean value indicating whether the attribute matches the value given in <em>Value</em>. See Remarks. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Compares the attributes on this object with the attributes on another object.</p> + <p>If <em>pThis</em> is the object whose <strong>Compare</strong> method is called, and <em>pTheirs</em> is the object passed in as the <em>pTheirs</em> parameter, the following comparisons are defined by <em>MatchType</em>.</p><table> <tr><th>Match type</th><th>Returns <strong>{{TRUE}}</strong> if and only if</th></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_OUR_ITEMS}}</strong></td><td>For every attribute in <em>pThis</em>, an attribute with the same key and value exists in <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_THEIR_ITEMS}}</strong></td><td>For every attribute in <em>pTheirs</em>, an attribute with the same key and value exists in <em>pThis</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_ALL_ITEMS}}</strong></td><td>The key/value pairs are identical in both objects.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_INTERSECTION}}</strong></td><td>Take the intersection of the keys in <em>pThis</em> and the keys in <em>pTheirs</em>. The values associated with those keys are identical in both <em>pThis</em> and <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_SMALLER}}</strong></td><td>Take the object with the smallest number of attributes. For every attribute in that object, an attribute with the same key and value exists in the other object.</td></tr> </table><p>?</p><p>The <em>pTheirs</em> and <em>pbResult</em> parameters must not be <strong>{{NULL}}</strong>. If either parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the object to compare with this object.</p> </dd> + + + <dd> <p>Member of the <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong> enumeration, specifying the type of comparison to make.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the two sets of attributes match in the way specified by the <em>MatchType</em> parameter. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT32}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>{{UINT32}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT32}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT32}}</strong> value. If the key is found and the data type is <strong>{{UINT32}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT64}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a <strong>{{UINT64}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT64}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT64}}</strong> value. If the key is found and the data type is <strong>{{UINT64}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>double</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>double</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>double</strong> value. If the key is found and the data type is <strong>double</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_GUID}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} value. If the key is found and the data type is {{GUID}}, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves the length of a string value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives the number of characters in the string, not including the terminating <strong>{{NULL}}</strong> character. To get the string value, call <strong>{{IMFAttributes::GetString}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a wide-character string associated with a key.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedString}}</strong> method, which allocates the buffer to hold the string.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The length of the string is too large to fit in a <strong>{{UINT32}}</strong> value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to hold the string.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a wide-character array allocated by the caller. The array must be large enough to hold the string, including the terminating <strong>{{NULL}}</strong> character. If the key is found and the value is a string type, the method copies the string into this buffer. To find the length of the string, call <strong>{{IMFAttributes::GetStringLength}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pwszValue</em> array, in characters. This value includes the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets a wide-character string associated with a key. This method allocates the memory for the string. </p> + <p>To copy a string value into a caller-allocated buffer, use the <strong>{{IMFAttributes::GetString}}</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><strong>Note</strong>??An earlier version of the documentation incorrectly stated that the <em>pcchLength</em> parameter can be <strong>{{NULL}}</strong>. Setting this parameter to <strong>{{NULL}}</strong> might succeed in some cases, but is not guaranteed. The caller must pass a non-<strong>{{NULL}}</strong> reference for this parameter.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a string. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>. </p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives a copy of the string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + <dd> <p> Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter must not be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves the length of a byte array associated with a key.</p> + <p>To get the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a byte array, this parameter receives the size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves a byte array associated with a key. This method copies the array into a caller-allocated buffer.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedBlob}}</strong> method, which allocates the buffer to hold the byte array.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></strong></dt> </dl> </td><td> <p>The buffer is not large enough to the array.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDTYPE}}</strong></strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer allocated by the caller. If the key is found and the value is a byte array, the method copies the array into this buffer. To find the required size of the buffer, call <strong>{{IMFAttributes::GetBlobSize}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pBuf</em> buffer, in bytes.</p> </dd> + + + <dd> <p>Receives the size of the byte array. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an interface reference associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The attribute value is an <strong>{{IUnknown}}</strong> reference but does not support requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_IUNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds an attribute value with a specified key. </p> + <p> This method checks whether the <strong>{{PROPVARIANT}}</strong> type is one of the attribute types defined in <strong>{{MF_ATTRIBUTE_TYPE}}</strong>, and fails if an unsupported type is used. However, this method does not check whether the <strong>{{PROPVARIANT}}</strong> is the correct type for the specified attribute {{GUID}}. (There is no programmatic way to associate attribute {{GUIDs}} with property types.) For a list of Media Foundation attributes and their data types, see Media Foundation Attributes. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p> Insufficient memory. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> Invalid attribute type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value. </p> </dd> + + + <dd> <p> A <strong>{{PROPVARIANT}}</strong> that contains the attribute value. The method copies the value. The <strong>{{PROPVARIANT}}</strong> type must be one of the types listed in the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + + + <p> </p><p>Removes a key/value pair from the object's attribute list.</p> + <p>If the specified key does not exist, the method returns <strong>{{S_OK}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to delete.</p> </dd> + + + + + <p> </p><p>Removes all key/value pairs from the object's attribute list.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Associates a <strong>{{UINT32}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT32}}</strong> value, call <strong>{{IMFAttributes::GetUINT32}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>{{UINT64}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT64}}</strong> value, call <strong>{{IMFAttributes::GetUINT64}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>double</strong> value with a key.</p> + <p>To retrieve the double value, call <strong>{{IMFAttributes::GetDouble}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a {{GUID}} value with a key.</p> + <p>To retrieve the {{GUID}} value, call <strong>{{IMFAttributes::GetGUID}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a wide-character string with a key.</p> + <p>To retrieve the string, call <strong>{{IMFAttributes::GetString}}</strong> or <strong>{{IMFAttributes::GetAllocatedString}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Null-terminated wide-character string to associate with this key. The method stores a copy of the string.</p> </dd> + + + + + <p> </p><p>Associates a byte array with a key.</p> + <p>To retrieve the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong> or <strong>{{IMFAttributes::GetAllocatedBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Pointer to a byte array to associate with this key. The method stores a copy of the array.</p> </dd> + + + <dd> <p>Size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Associates an <strong>{{IUnknown}}</strong> reference with a key.</p> + <p>To retrieve the <strong>{{IUnknown}}</strong> reference, call <strong>{{IMFAttributes::GetUnknown}}</strong>.</p><p>It is not an error to call <strong>SetUnknown</strong> with <em>pUnknown</em> equal to <strong>{{NULL}}</strong>. However, <strong>GetUnknown</strong> will return <strong>{{MF_E_INVALIDTYPE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference to be associated with this key.</p> </dd> + + + + + <p> </p><p>Locks the attribute store so that no other thread can access it. If the attribute store is already locked by another thread, this method blocks until the other thread unlocks the object. After calling this method, call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the object.</p> + <p>This method can cause a deadlock if a thread that calls <strong>LockStore</strong> waits on a thread that calls any other <strong>{{IMFAttributes}}</strong> methods on the same object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the attribute store after a call to the <strong>{{IMFAttributes::LockStore}}</strong> method. While the object is unlocked, multiple threads can access the object's attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the number of attributes that are set on this object.</p> + <p>To enumerate all of the attributes, call <strong>{{IMFAttributes::GetItemByIndex}}</strong> for each index value.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of attributes. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Retrieves an attribute at the specified index.</p> + <p>To enumerate all of an object's attributes in a thread-safe way, do the following:</p><ol> <li> <p>Call <strong>{{IMFAttributes::LockStore}}</strong> to prevent another thread from adding or deleting attributes.</p> </li> <li> <p>Call <strong>{{IMFAttributes::GetCount}}</strong> to find the number of attributes.</p> </li> <li> <p>Call <strong>GetItemByIndex</strong> to get each attribute by index.</p> </li> <li> <p>Call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the attribute store.</p> </li> </ol><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the attribute to retrieve. To get the number of attributes, call <strong>{{IMFAttributes::GetCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{GUID}} that identifies this attribute.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value. This parameter can be <strong>{{NULL}}</strong>. If it is not <strong>{{NULL}}</strong>, the method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the attribute value. Call <strong>PropVariantClear</strong> to free the memory allocated by this method.</p> </dd> + + + + + <p> Copies all of the attributes from this object into another attribute store. </p> + <p> This method deletes all of the attributes originally stored in <em>pDest</em>. </p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong> on an <strong>{{IMFSample}}</strong>, which inherits this method, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store that receives the copy. </p> </dd> + + + + + <p>Represents a block of memory that contains media data. Use this interface to access the data in the buffer.</p> + <p>If the buffer contains 2-D image data (such as an uncompressed video frame), you should query the buffer for the <strong>{{IMF2DBuffer}}</strong> interface. The methods on <strong>{{IMF2DBuffer}}</strong> are optimized for 2-D data.</p><p>To get a buffer from a media sample, call one of the following <strong>{{IMFSample}}</strong> methods:</p><ul> <li> <p> <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> </p> </li> <li> <p> <strong>{{IMFSample::GetBufferByIndex}}</strong> </p> </li> </ul><p>To create a new buffer object, use one of the following functions.</p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFCreateMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory.</td></tr> <tr><td> <strong>{{MFCreateMediaBufferWrapper}}</strong> </td><td>Creates a media buffer that wraps an existing media buffer.</td></tr> <tr><td> <strong>{{MFCreateDXSurfaceBuffer}}</strong> </td><td>Creates a buffer that manages a DirectX surface.</td></tr> <tr><td> <strong>{{MFCreateAlignedMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory with a specified alignment.</td></tr> </table><p>?</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Gives the caller access to the memory in the buffer, for reading or writing</p> + <p>This method gives the caller access to the entire buffer, up to the maximum size returned in the <em>pcbMaxLength</em> parameter. The value returned in <em>pcbCurrentLength</em> is the size of any valid data already in the buffer, which might be less than the total buffer size.</p><p>The reference returned in <em>ppbBuffer</em> is guaranteed to be valid, and can safely be accessed across the entire buffer for as long as the lock is held. When you are done accessing the buffer, call <strong>{{IMFMediaBuffer::Unlock}}</strong> to unlock the buffer. You must call <strong>Unlock</strong> once for each call to <strong>Lock</strong>. After you unlock the buffer, the reference returned in <em>ppbBuffer</em> is no longer valid, and should not be used. Generally, it is best to call <strong>Lock</strong> only when you need to access the buffer memory, and not earlier.</p><p>Locking the buffer does not prevent other threads from calling <strong>Lock</strong>, so you should not rely on this method to synchronize threads.</p><p>This method does not allocate any memory, or transfer ownership of the memory to the caller. Do not release or free the memory; the media buffer will free the memory when the media buffer is destroyed.</p><p>If you modify the contents of the buffer, update the current length by calling <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>If the buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, you should use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to lock the buffer. For 2-D buffers, the <strong>Lock2D</strong> method is more efficient than the <strong>Lock</strong> method. If the buffer is locked using <strong>Lock2D</strong>, the Lock method might return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when locking the surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the start of the buffer.</p> </dd> + + + <dd> <p>Receives the maximum amount of data that can be written to the buffer. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + <dd> <p>Receives the length of the valid data in the buffer, in bytes. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for every call to <strong>{{IMFMediaBuffer::Lock}}</strong>.</p> + <p>It is an error to call <strong>Unlock</strong> if you did not call <strong>Lock</strong> previously.</p><p>After calling this method, do not use the reference returned by the <strong>Lock</strong> method. It is no longer guaranteed to be valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when unlocking the surface.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the length of the valid data in the buffer.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the length of the valid data, in bytes. If the buffer does not contain any valid data, the value is zero.</p> </dd> + + + + + <p> </p><p>Sets the length of the valid data in the buffer.</p> + <p>Call this method if you write data into the buffer.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified length is greater than the maximum size of the buffer.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Length of the valid data, in bytes. This value cannot be greater than the allocated size of the buffer, which is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the allocated size of the buffer.</p> + <p>The buffer might or might not contain any valid data, and if there is valid data in the buffer, it might be smaller than the buffer's allocated size. To get the length of the valid data, call <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the allocated size of the buffer, in bytes.</p> </dd> + + + + + <p>Represents a media sample, which is a container object for media data. For video, a sample typically contains one video frame. For audio data, a sample typically contains multiple audio samples, rather than a single sample of audio.</p><p>A media sample contains zero or more buffers. Each buffer manages a block of memory, and is represented by the <strong>{{IMFMediaBuffer}}</strong> interface. A sample can have multiple buffers. The buffers are kept in an ordered list and accessed by index value. It is also valid to have an empty sample with no buffers.</p> + <p>To create a new media sample, call <strong>{{MFCreateSample}}</strong>.</p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong>, inherited from the <strong>{{IMFAttributes}}</strong> interface, on an <strong>{{IMFSample}}</strong>, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To get attibutes from a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To set attibutes on a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the presentation time of the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a presentation time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the presentation time of the sample.</p> + <p>Some pipeline components require samples that have time stamps. Generally the component that generates the data for the sample also sets the time stamp. The Media Session might modify the time stamps.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the duration of the sample.</p> + <p>If the sample contains more than one buffer, the duration includes the data from all of the buffers.</p><p>If the retrieved duration is zero, or if the method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>, the duration is unknown. In that case, it might be possible to calculate the duration from the media type?for example, by using the video frame rate or the audio sampling rate.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The sample does not have a specified duration.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the duration, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the duration of the sample.</p> + <p>This method succeeds if the duration is negative, although negative durations are probably not valid for most types of data. It is the responsibility of the object that consumes the sample to validate the duration.</p><p>The duration can also be zero. This might be valid for some types of data. For example, the sample might contain stream metadata with no buffers.</p><p>Until this method is called, the <strong>{{IMFSample::GetSampleDuration}}</strong> method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Duration of the sample, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the number of buffers in the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of buffers in the sample. A sample might contain zero buffers.</p> </dd> + + + + + <p> Gets a buffer from the sample, by index.</p><p> </p><strong>Note</strong>??In most cases, it is safer to use the <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> method. If the sample contains more than one buffer, the <strong>ConvertToContiguousBuffer</strong> method replaces them with a single buffer, copies the original data into that buffer, and returns the new buffer to the caller. The copy operation occurs at most once. On subsequent calls, no data is copied.? + <p>A sample might contain more than one buffer. Use the <strong>GetBufferByIndex</strong> method to enumerate the individual buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument, or the index is out of range. </p> </td></tr> </table><p>?</p> + + + + <p> Converts a sample with multiple buffers into a sample with a single buffer. </p> + <p>If the sample contains more than one buffer, this method copies the data from the original buffers into a new buffer, and replaces the original buffer list with the new buffer. The new buffer is returned in the <em>ppBuffer</em> parameter.</p><p> If the sample contains a single buffer, this method returns a reference to the original buffer. In typical use, most samples do not contain multiple buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The sample does not contain any buffers.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds a buffer to the end of the list of buffers in the sample. </p> + <p>For uncompressed video data, each buffer should contain a single video frame, and samples should not contain multiple frames. In general, storing multiple buffers in a sample is discouraged.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the buffer's <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a buffer at a specified index from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the buffer. To find the number of buffers in the sample, call <strong>{{IMFSample::GetBufferCount}}</strong>. Buffers are indexed from zero.</p> </dd> + + + + + <p> </p><p>Removes all of the buffers from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the total length of the valid data in all of the buffers in the sample. The length is calculated as the sum of the values retrieved by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Copies the sample data to a buffer. This method concatenates the valid data from all of the buffers of the sample, in order.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to contain the data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the destination buffer. The buffer must be large enough to hold the valid data in the sample. To get the size of the data in the sample, call <strong>{{IMFSample::GetTotalLength}}</strong>.</p> </dd> + + + + + <p> Represents a buffer that contains a two-dimensional surface, such as a video frame. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media buffer.</p><p>To use a 2-D buffer, it is important to know the <em>stride</em>, which is the number of bytes needed to go from one row of pixels to the next. The stride may be larger than the image width, because the surface may contain padding bytes after each row of pixels. Stride can also be negative, if the pixels are oriented bottom-up in memory. For more information, see Image Stride.</p><p>Every video format defines a <em>contiguous</em> or <em>packed</em> representation. This representation is compatible with the standard layout of a DirectX surface in system memory, with no additional padding. For {{RGB}} video, the contiguous representation has a pitch equal to the image width in bytes, rounded up to the nearest <strong>{{DWORD}}</strong> boundary. For {{YUV}} video, the layout of the contiguous representation depends on the {{YUV}} format. For planar {{YUV}} formats, the Y plane might have a different pitch than the U and V planes.</p><p>If a media buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, the underlying buffer is not guaranteed to have a contiguous representation, because there might be additional padding bytes after each row of pixels. When a buffer is non-contiguous, the <strong>Lock</strong> and <strong>Lock2D</strong> methods have different behaviors:</p><ul> <li> The <strong>Lock2D</strong> method returns a reference to the underlying buffer. The buffer might not be contiguous. </li> <li> The <strong>Lock</strong> method returns a buffer that is guaranteed to be contiguous. If the underlying buffer is not contiguous, the method copies the data into a new buffer, and the <strong>Unlock</strong> method copies it back into the original buffer. </li> </ul><p>Call the <strong>Lock2D</strong> method to access the 2-D buffer in its native format. The native format might not be contiguous. The buffer's <strong>{{IMFMediaBuffer::Lock}}</strong> method returns a contiguous representation of the buffer. However, this might require an internal copy from the native format. For 2-D buffers, therefore, you should use the <strong>Lock2D</strong> method and avoid the <strong>Lock</strong> method. Because the <strong>Lock</strong> method might cause up to two buffer copies, the <strong>Lock2D</strong> method is generally more efficient and should be used when possible. To find out if the underlying buffer is contiguous, call <strong>{{IMF2DBuffer::IsContiguousFormat}}</strong>.</p><p>For uncompressed images, the amount of valid data in the buffer is determined by the width, height, and pixel layout of the image. For this reason, if you call <strong>Lock2D</strong> to access the buffer, do not rely on the values returned by <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> or <strong>{{IMFMediaBuffer::GetMaxLength}}</strong>. Similarly, if you modify the data in the buffer, you do not have to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> to update the size. Generally, you should avoid mixing calls to <strong>{{IMF2DBuffer}}</strong> and <strong>{{IMFMediaBuffer}}</strong> methods on the same media buffer.</p> + + + + <p> </p><p>Gives the caller access to the memory in the buffer.</p> + <p>If <em>p</em> is a reference to the first byte in a row of pixels, <em>p</em> + (*<em>plPitch</em>) points to the first byte in the next row of pixels. A buffer might contain padding after each row of pixels, so the stride might be wider than the width of the image in bytes. Do not access the memory that is reserved for padding bytes, because it might not be read-accessible or write-accessible. For more information, see Image Stride.</p><p>The reference returned in <em>pbScanline0</em> remains valid as long as the caller holds the lock. When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2D</strong>. After you unlock the buffer, the reference returned in <em>pbScanline0</em> is no longer valid and should not be used. Generally, it is best to call <strong>Lock2D</strong> only when you need to access the buffer memory, and not earlier.</p><p>The values returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> and <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> methods do not apply to the buffer that is returned by the <strong>Lock2D</strong> method. For the same reason, you do not need to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> after manipulating the data in the buffer returned by the <strong>Lock2D</strong> method.</p><p>The <strong>{{IMFMediaBuffer::Lock}}</strong> method fails while the <strong>Lock2D</strong> lock is held, and vice-versa. Applications should use only one of these methods at a time.</p><p>When the underlying buffer is a Direct3D surface, the method fails if the surface is not lockable.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>Cannot lock the Direct3D surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory.</p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for each call to <strong>{{IMF2DBuffer::Lock2D}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves a reference to the buffer memory and the surface stride.</p> + <p>Before calling this method, you must lock the buffer by calling <strong>{{IMF2DBuffer::Lock2D}}</strong>. The reference returned in <em>plPitch</em> is valid only while the buffer remains locked.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_INVALID_FUNCTION}}</strong></dt> </dl> </td><td> <p>You must lock the buffer before calling this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image.</p> </dd> + + + <dd> <p>Receives the stride, in bytes. For more information, see Image Stride.</p> </dd> + + + + + <p> </p><p>Queries whether the buffer is contiguous in its native format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface. For non-contiguous buffers, the <strong>{{IMFMediaBuffer::Lock}}</strong> method must perform an internal copy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the buffer is contiguous, and <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bytes needed to store the contents of the buffer in contiguous format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bytes needed to store the contents of the buffer in contiguous format.</p> </dd> + + + + + <p> </p><p>Copies this buffer into the caller's buffer, converting the data to contiguous format.</p> + <p>If the original buffer is not contiguous, this method converts the contents into contiguous format during the copy. For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid size specified in <em>pbDestBuffer</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the destination buffer where the data will be copied. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the destination buffer, in bytes. To get the required size, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p> </p><p>Copies data to this buffer from a buffer that has a contiguous format.</p> + <p>This method copies the contents of the source buffer into the buffer that is managed by this <strong>{{IMF2DBuffer}}</strong> object. The source buffer must be in contiguous format. While copying, the method converts the contents into the destination buffer's native format, correcting for the buffer's pitch if necessary.</p><p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in the <strong>{{IMF2DBuffer}}</strong> interface topic.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the source buffer. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the source buffer, in bytes. To get the maximum size of the buffer, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p>Represents a buffer that contains a two-dimensional surface, such as a video frame.</p> + <p>This interface extends the <strong>{{IMF2DBuffer}}</strong> interface and adds a safer version of the <strong>{{IMF2DBuffer::Lock2D}}</strong> method.</p> + + + + <p>Gives the caller access to the memory in the buffer.</p> + <p>When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2DSize</strong>.</p><p>This method is equivalent to the <strong>{{IMF2DBuffer::Lock2D}}</strong> method. However, <strong>Lock2DSize</strong> is preferred because it enables the caller to validate memory references, and because it supports read-only locks. A buffer is not guaranteed to support the <strong>{{IMF2DBuffer2}}</strong> interface. To access a buffer, you should try the following methods in the order listed:</p><ol> <li><strong>{{IMF2DBuffer2::Lock2DSize}}</strong></li> <li> <strong>{{IMF2DBuffer::Lock2D}}</strong> </li> <li> <strong>{{IMFMediaBuffer::Lock}}</strong> </li> </ol><p>The <em>ppbBufferStart</em> and <em>pcbBufferLength</em> parameters receive the bounds of the buffer memory. Use these values to guard against buffer overruns. Use the values of <em>ppbScanline0</em> and <em>plPitch</em> to access the image data. If the image is bottom-up in memory, <em>ppbScanline0</em> will point to the last scan line in memory and <em>plPitch</em> will be negative. For more information, see Image Stride.</p><p>The <em>lockFlags</em> parameter specifies whether the buffer is locked for read-only access, write-only access, or read/write access. </p><ul> <li>If the buffer is already locked for read-only access, it cannot be locked for write access.</li> <li>If the buffer is already locked for write-only access, it cannot be locked for read access.</li> <li>If the buffer is already locked for read/write acess, it can be locked for read or write acess.</li> </ul><p>When possible, use a read-only or write-only lock, and avoid locking the buffer for read/write access. If the buffer represents a DirectX Graphics Infrastructure ({{DXGI}}) surface, a read/write lock can cause an extra copy between {{CPU}} memory and {{GPU}} memory.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. The buffer might already be locked with an incompatible locking flag. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>There is insufficient memory to complete the operation. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MF2DBuffer_LockFlags}}</strong> enumeration that specifies whether to lock the buffer for reading, writing, or both.</p> </dd> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory. </p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory. </p> </dd> + + + <dd> <p>Receives a reference to the start of the accessible buffer in memory.</p> </dd> + + + <dd> <p>Receives the length of the buffer, in bytes.</p> </dd> + + + + + <p>Copies the buffer to another 2D buffer object.</p> + <p>The destination buffer must be at least as large as the source buffer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMF2DBuffer2}}</strong> interface of the destination buffer.</p> </dd> + + + + + <p>Represents a buffer that contains a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>To create a {{DXGI}} media buffer, first create the {{DXGI}} surface. Then call <strong>{{MFCreateDXGISurfaceBuffer}}</strong>. </p> + + + + <p>Queries the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface for an interface.</p> + <p>You can use this method to get a reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface. If the buffer is locked, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the index of the subresource that is associated with this media buffer.</p> + <p>The subresource index is specified when you create the media buffer object. See <strong>{{MFCreateDXGISurfaceBuffer}}</strong>.</p><p>For more information about texture subresources, see <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the zero-based index of the subresource.</p> </dd> + + + + + <p>Gets an <strong>{{IUnknown}}</strong> reference that was previously stored in the media buffer object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> </table><p>?</p> + + + + <p>Stores an arbitrary <strong>{{IUnknown}}</strong> reference in the media buffer object.</p> + <p>To retrieve the reference from the object, call <strong>{{IMFDXGIBuffer::GetUnknown}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_OBJECT_ALREADY_EXISTS}}</strong></dt> </dl> </td><td> <p>An item already exists with this key.</p> </td></tr> </table><p>?</p> + + + + <p> Represents a description of a media format. </p> + <p> To create a new media type, call <strong>{{MFCreateMediaType}}</strong>. </p><p> All of the information in a media type is stored as attributes. To clone a media type, call <strong>{{IMFAttributes::CopyAllItems}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>Gets the major type of the format. </p> + <p> This method is equivalent to getting the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute from the media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The major type is not set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the major type <strong>{{GUID}}</strong>. The major type describes the broad category of the format, such as audio or video. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> Queries whether the media type is a temporally compressed format. Temporal compression uses information from previously decoded samples when decompressing the current sample.</p> + <p> This method returns <strong>{{FALSE}}</strong> in <em>pfCompressed</em> if the media type's <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{TRUE}}</strong>. If the <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{FALSE}}</strong> or not set, the method returns <strong>{{TRUE}}</strong>. </p><p> If the method returns <strong>{{TRUE}}</strong> in <em>pfCompressed</em>, it is a hint that the format has temporal compression applied to it. If the method returns <strong>{{FALSE}}</strong>, the format does not use temporal compression, although it might use intra-frame compression. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the format uses temporal compression, or <strong>{{FALSE}}</strong> if the format does not use temporal compression.</p> </dd> + + + + + <p> Compares two media types and determines whether they are identical. If they are not identical, the method indicates how the two formats differ. </p> + <p> Both of the media types must have a major type, or the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p> If the method succeeds and all of the comparison flags are set in <em>pdwFlags</em>, the return value is <strong>{{S_OK}}</strong>. If the method succeeds but one or more comparison flags are not set, the method returns <strong>{{S_FALSE}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p> The types are not equal. Examine the <em>pdwFlags</em> parameter to determine how the types differ. </p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The types are equal. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> One or both media types are invalid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to compare.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags, indicating the degree of similarity between the two media types. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_MAJOR_TYPES}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>The major types are the same. The major type is specified by the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_TYPES}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The subtypes are the same, or neither media type has a subtype. The subtype is specified by the <strong>{{MF_MT_SUBTYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_DATA}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The attributes in one of the media types are a subset of the attributes in the other, and the values of these attributes match, excluding the value of the <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes.</p> <p>Specifically, the method takes the media type with the smaller number of attributes and checks whether each attribute from that type is present in the other media type and has the same value (not including <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}}). </p> <p>To perform other comparisons, use the <strong>{{IMFAttributes::Compare}}</strong> method. For example, the <strong>Compare</strong> method can test for identical attributes, or test the intersection of the two attribute sets. For more information, see <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The user data is identical, or neither media type contains user data. User data is specified by the <strong>{{MF_MT_USER_DATA}}</strong> attribute.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p>[<strong>{{IMFAudioMediaType}}</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Represents a description of an audio format.</p> + <p><strong>Windows Server?2008 and Windows?Vista:??</strong>If the major type of a media type is <strong>{{MFMediaType_Audio}}</strong>, you can query the media type object for the <strong>{{IMFAudioMediaType}}</strong> interface.</p><p> To convert an audio media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>[<strong>GetAudioFormat</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> + <p>If you need to convert the media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p> There are no guarantees about how long the returned reference is valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> This method returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.]</p><p> Retrieves an alternative representation of the media type.</p> + <p>This method is equivalent to <strong>{{IMFMediaType::GetRepresentation}}</strong> but includes the <em>lStride</em> parameter.</p><p>Instead of calling this method, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Provides information about the result of an asynchronous operation. </p> + <p>Use this interface to complete an asynchronous operation. You get a reference to this interface when your callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. To complete the operation, pass the <strong>{{IMFAsyncResult}}</strong> reference to the <strong>End...</strong> method that corresponds to the <strong>Begin...</strong> method that starts the operation. For example, if the asynchronous method is named <strong>BeginRead</strong>, call the <strong>EndRead</strong> method. For more information, see Calling Asynchronous Methods.</p><p>If you are implementing an asynchronous method, call <strong>{{MFCreateAsyncResult}}</strong> to create an instance of this object. For more information, see Writing an Asynchronous Method.</p><p>Any custom implementation of this interface must inherit the <strong>{{MFASYNCRESULT}}</strong> structure.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method.</p> + <p>The caller of the asynchronous method specifies the state object, and can use it for any caller-defined purpose. The state object can be <strong>{{NULL}}</strong>. If the state object is <strong>{{NULL}}</strong>, <strong>GetState</strong> returns <strong>{{E_POINTER}}</strong>.</p><p>If you are implementing an asynchronous method, set the state object on the through the <em>punkState</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no state object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the state object's <strong>{{IUnknown}}</strong> interface. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the status of the asynchronous operation.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation completed successfully.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets the status of the asynchronous operation.</p> + <p>If you implement an asynchronous method, call <strong>SetStatus</strong> to set the status code for the operation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The status of the asynchronous operation.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method, without incrementing the object's reference count.</p> + <p>This method cannot be called remotely.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>Returns a reference to the state object's <strong>{{IUnknown}}</strong> interface, or <strong>{{NULL}}</strong> if no object was set. This reference does not have an outstanding reference count. If you store this reference, you must call <strong>AddRef</strong> on the reference.</p> + + + + <p>Callback interface to notify the application when an asynchronous method completes. </p> + <p> For more information about asynchronous methods in Microsoft Media Foundation, see Asynchronous Callback Methods. </p><p>This interface is also used to perform a work item in a Media Foundation work-queue. For more information, see Work Queues. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + <p> </p><p>Called when an asynchronous operation is completed.</p> + <p>Within your implementation of <strong>Invoke</strong>, call the corresponding <strong>End...</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass this reference to the asynchronous <strong>End...</strong> method to complete the asynchronous call.</p> </dd> + + + + + <p>Provides logging information about the parent object the async callback is associated with.</p> + <p><strong>{{IMFAsyncCallbackLogging}}</strong> is primarily used for async callbacks to return an {{ID}} of the parent object that they are associated with.</p> + + + + <p>Gets the reference to the parent object the async callback is associated with. </p> + <p>void reference to the object.</p> + + + + <p>Gets the tag of the parent object the async callback is associated object.</p> + <p>The tag of the object.</p> + + + + <p>Represents an event generated by a Media Foundation object. Use this interface to get information about the event.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> or <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> on the event generator.</p> + <p>If you are implementing an object that generates events, call the <strong>{{MFCreateMediaEvent}}</strong> function to create a new event object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the event type. The event type indicates what happened to trigger the event. It also defines the meaning of the event value.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event type. For a list of event types, see Media Foundation Events.</p> </dd> + + + + + <p> </p><p>Retrieves the extended type of the event.</p> + <p>To define a custom event, create a new extended-type {{GUID}} and send an {{MEExtendedType}} event with that {{GUID}}.</p><p>Some standard Media Foundation events also use the extended type to differentiate between types of event data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a <strong>{{GUID}}</strong> that identifies the extended type.</p> </dd> + + + + + <p> </p><p>Retrieves an <strong>{{HRESULT}}</strong> that specifies the event status.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event status. If the operation that generated the event was successful, the value is a success code. A failure code means that an error condition triggered the event.</p> </dd> + + + + + <p> </p><p>Retrieves the value associated with the event, if any. The value is retrieved as a <strong>{{PROPVARIANT}}</strong> structure. The actual data type and the meaning of the value depend on the event.</p> + <p>Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong> structure. After the method returns, call <strong>PropVariantClear</strong> to free the memory that was allocated for the <strong>{{PROPVARIANT}}</strong> data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> structure. The method fills this structure with the data.</p> </dd> + + + + + <p> Retrieves events from any Media Foundation object that generates events. </p> + <p>An object that supports this interface maintains a queue of events. The client of the object can retrieve the events either synchronously or asynchronously. The synchronous method is <strong>GetEvent</strong>. The asynchronous methods are <strong>BeginGetEvent</strong> and <strong>EndGetEvent</strong>.</p> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p> + <p>This method executes synchronously.</p><p>If the queue already contains an event, the method returns {{S_OK}} immediately. If the queue does not contain an event, the behavior depends on the value of <em>dwFlags</em>:</p><ul> <li> <p>If <em>dwFlags</em> is 0, the method blocks indefinitely until a new event is queued, or until the event generator is shut down.</p> </li> <li> <p>If <em>dwFlags</em> is {{MF_EVENT_FLAG_NO_WAIT}}, the method fails immediately with the return code {{MF_E_NO_EVENTS_AVAILABLE}}.</p> </li> </ul><p>This method returns {{MF_E_MULTIPLE_SUBSCRIBERS}} if you previously called <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> and have not yet called <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_EVENTS_AVAILABLE}}</strong></dt> </dl> </td><td> <p>There are no events in the queue.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>0</strong></dt> </dl> </td><td> <p>The method blocks until the event generator queues an event.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_EVENT_FLAG_NO_WAIT}}</strong></dt> </dl> </td><td> <p>The method returns immediately.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p> + <p>When a new event is available, the event generator calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong> to get a reference to the <strong>{{IMFMediaEvent}}</strong> interface, and use that interface to examine the event.</p><p>Do not call <strong>BeginGetEvent</strong> a second time before calling <strong>EndGetEvent</strong>. While the first call is still pending, additional calls to the same object will fail. Also, the <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> method fails if an asynchronous request is still pending.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and a different state object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request with a different callback reference.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and state object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The client must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. For example code, see <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Puts a new event in the object's queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the event value. This parameter can be <strong>{{NULL}}</strong>. This value is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Used by the Microsoft Media Foundation proxy/stub {{DLL}} to marshal certain asynchronous method calls across process boundaries.</p><p>Applications do not use or implement this interface.</p> + + + + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> Retrieves the characteristics of the byte stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_READABLE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The byte stream can be read. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_WRITABLE}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p> The byte stream can be written to. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_SEEKABLE}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p> The byte stream can be seeked. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_REMOTE}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p> The byte stream is from a remote source, such as a network. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_DIRECTORY}}</strong></dt> <dt>0x00000080</dt> </dl> </td><td> <p> The byte stream represents a file directory. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p> Seeking within this stream might be slow. For example, the byte stream might download from a network.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>The byte stream is currently downloading data to a local cache. Read operations on the byte stream might take longer until the data is completely downloaded.</p> <p>This flag is cleared after all of the data has been downloaded.</p> <p>If the <strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong> flag is also set, it means the byte stream must download the entire file sequentially. Otherwise, the byte stream can respond to seek requests by restarting the download from a new point in the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SHARE_WRITE}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>Another thread or process can open this byte stream for writing. If this flag is present, the length of the +byte stream could change while it is being read. </p> <p>This flag can affect the behavior of byte-stream handlers. For more information, see {{MF_BYTESTREAMHANDLER_ACCEPTS_SHARE_WRITE}}.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_DOES_NOT_USE_NETWORK}}</strong></dt> <dt>0x00000800</dt> </dl> </td><td> <p>The byte stream is not currently +using the network to receive the content. Networking hardware +may enter a power saving state when this bit is set.</p> <strong>Note</strong>??Requires Windows?8 or later. ? </td></tr> </table> <p>?</p> </dd> + + + + + <p> Retrieves the length of the stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the length of the stream, in bytes. If the length is unknown, this value is -1. </p> </dd> + + + + + <p> </p><p>Sets the length of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Length of the stream in bytes. </p> </dd> + + + + + <p> Retrieves the current read or write position in the stream. </p> + <p> The methods that update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>SetCurrentPosition</strong>, and <strong>Seek</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the current position, in bytes. </p> </dd> + + + + + <p> </p><p>Sets the current read or write position.</p> + <p> If the new position is larger than the length of the stream, the method returns {{E_INVALIDARG}}. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by setting the current position to the value passed in to the <em>qwPosition</em> parameter. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>Seek</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> </table><p>?</p> + + + <dd> <p>New position in the stream, as a byte offset from the start of the stream.</p> </dd> + + + + + <p> </p><p>Queries whether the current position has reached the end of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the value <strong>{{TRUE}}</strong> if the end of the stream has been reached, or <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <p> Reads data from the stream. </p> + <p> This method reads at most <em>cb</em> bytes from the current position in the stream and copies them into the buffer provided by the caller. The number of bytes that were read is returned in the <em>pcbRead</em> parameter. The method does not return an error code on reaching the end of the file, so the application should check the value in <em>pcbRead</em> after the method returns. </p><p> This method is synchronous. It blocks until the read operation completes. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are copied into the buffer. This parameter cannot be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Begins an asynchronous read operation from the stream. </p> + <p> When all of the data has been read into the buffer, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndRead}}</strong> to complete the asynchronous request. </p><p> Do not read from, write to, free, or reallocate the buffer while an asynchronous read is pending. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Completes an asynchronous read operation. </p> + <p> Call this method after the <strong>{{IMFByteStream::BeginRead}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p> Receives the number of bytes that were read. </p> </dd> + + + + + <p> </p><p>Writes data to the stream.</p> + <p> This method writes the contents of the <em>pb</em> buffer to the stream, starting at the current stream position. The number of bytes that were written is returned in the <em>pcbWritten</em> parameter. </p><p> This method is synchronous. It blocks until the write operation completes. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position offset. </p><p> Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that contains the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are written. </p> </dd> + + + + + <p> Begins an asynchronous write operation to the stream. </p> + <p> When all of the data has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndWrite}}</strong> to complete the asynchronous request. </p><p> Do not reallocate, free, or write to the buffer while an asynchronous write is still pending. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer containing the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous write operation.</p> + <p> Call this method when the <strong>{{IMFByteStream::BeginWrite}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p> Receives the number of bytes that were written. </p> </dd> + + + + + <p> </p><p>Moves the current position in the stream by a specified offset.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the <em>qwSeekOffset</em> to the seek <em>SeekOrigin</em> position. This should be the same value passed back in the <em>pqwCurrentPosition</em> parameter. +Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>SetCurrentPosition</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the origin of the seek as a member of the <strong>{{MFBYTESTREAM_SEEK_ORIGIN}}</strong> enumeration. The offset is calculated relative to this position. </p> </dd> + + + <dd> <p> Specifies the new position, as a byte offset from the seek origin. </p> </dd> + + + <dd> <p> Specifies zero or more flags. The following flags are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO}}</strong></dt> </dl> </td><td> <p> All pending I/O requests are canceled after the seek request completes successfully. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the new position after the seek. </p> </dd> + + + + + <p> Clears any internal buffers used by the stream. If you are writing to the stream, the buffered data is written to the underlying file or device. </p> + <p> If the byte stream is read-only, this method has no effect.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Closes the stream and releases any resources associated with the stream, such as sockets or file handles. This method also cancels any pending asynchronous I/O requests. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to write a media sample to the stream.</p> + <p>Call this method when the <strong>{{IMFSampleOutputStream::BeginWriteSample}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + + + + + + Defines size, enumerators, and synchronization methods for all nongeneric collections. <p></p>Namespace: System.CollectionsAssembly: mscorlib (in mscorlib.dll)&lt;ComVisibleAttribute(True)&gt; _ +Public Interface {{ICollection}} Inherits {{IEnumerableDim}} instance As {{ICollection}} +[ComVisibleAttribute(true)] +public interface {{ICollection}} : {{IEnumerable}}[ComVisibleAttribute(true)] +public interface class {{ICollection}} : {{IEnumerable}}/** @attribute ComVisibleAttribute(true) */ +public interface {{ICollection}} extends {{IEnumerableComVisibleAttribute}}(true) +public interface {{ICollection}} extends {{IEnumerableNot}} applicable. <p>The {{ICollection}} interface is the base interface for classes in the System.Collections namespace.</p> <p>The {{ICollection}} interface extends {{IEnumerable}}; {{IDictionary}} and {{IList}} are more specialized interfaces that extend {{ICollection}}. An {{IDictionary}} implementation is a collection of key/value pairs, like the Hashtable class. An {{IList}} implementation is a collection of values and its members can be accessed by index, like the ArrayList class.</p> <p>Some collections that limit access to their elements, such as the Queue class and the Stack class, directly implement the {{ICollection}} interface.</p> <p>If neither the {{IDictionary}} interface nor the {{IList}} interface meet the requirements of the required collection, derive the new collection class from the {{ICollection}} interface instead for more flexibility.</p> <p>For the generic version of this interface, see System.Collections.Generic.{{ICollection}}.</p> <p>Windows 98, Windows Server 2000 {{SP4}}, Windows {{CE}}, Windows Millennium Edition, Windows Mobile for Pocket {{PC}}, Windows Mobile for Smartphone, Windows Server 2003, Windows {{XP}} Media Center Edition, Windows {{XP}} Professional x64 Edition, Windows {{XP}} {{SP2}}, Windows {{XP}} Starter Edition</p><p></p><p></p> The Microsoft .{{NET}} Framework 3.0 is supported on Windows Vista, Microsoft Windows {{XP}} {{SP2}}, and Windows Server 2003 {{SP1}}. .{{NET}} FrameworkSupported in: 3.0, 2.0, 1.1, 1.0.{{NET}} Compact FrameworkSupported in: 2.0, 1.0XNA FrameworkSupported in: 1.0ReferenceICollection MembersSystem.Collections NamespaceIDictionaryIListSystem.Collections.Generic.{{ICollection}} + + + + <p> </p><p>Retrieves the number of objects in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of objects in the collection.</p> </dd> + + + + + <p> </p><p>Retrieves an object in the collection.</p> + <p> This method does not remove the object from the collection. To remove an object, call <strong>{{IMFCollection::RemoveElement}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the object to retrieve. Objects are indexed in the order in which they were added to the collection. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. The retrieved reference value might be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Adds an object to the collection.</p> + <p>If <em>pUnkElement</em> is <strong>{{NULL}}</strong>, a <strong>{{NULL}}</strong> reference is added to the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes an object from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the object to remove. Objects are indexed in the order in which they were added to the collection.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface. This parameter cannot be <strong>{{NULL}}</strong>, but the retrieved reference value might be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Adds an object at the specified index in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index where the object will be added to the collection.</p> </dd> + + + <dd> <p>The object to insert.</p> </dd> + + + + + <p> </p><p>Removes all items from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Provides an event queue for applications that need to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This interface is exposed by a helper object that implements an event queue. If you are writing a component that implements the <strong>{{IMFMediaEventGenerator}}</strong> interface, you can use this object in your implementation. The event queue object is thread safe and provides methods to queue events and to pull them from the queue either synchronously or asynchronously. To create the event queue object, call <strong>{{MFCreateEventQueue}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::GetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Puts an event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains attributes. To create the event object, call <strong>{{MFCreateMediaEvent}}</strong>. Add attributes to the event by using methods from the <strong>{{IMFAttributes}}</strong> interface. (The <strong>{{IMFMediaEvent}}</strong> interface inherits <strong>{{IMFAttributes}}</strong>.)</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of the event to be put in the queue.</p> </dd> + + + + + <p> </p><p>Creates an event, sets a <strong>{{PROPVARIANT}}</strong> as the event data, and puts the event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::QueueEvent}}</strong>. Pass the parameters from that method directly to this method.</p><p>You can also call this method when your component needs to raise an event that does not contain attributes. If the event data is an <strong>{{IUnknown}}</strong> reference, you can use <strong>{{IMFMediaEventQueue::QueueEventParamUnk}}</strong>. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an event, sets an <strong>{{IUnknown}}</strong> reference as the event data, and puts the event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains an <strong>{{IUnknown}}</strong> reference value and no attributes. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type of the event to be added to the queue. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type of the event. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface. The method sets this reference as the event value. The reference is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Shuts down the event queue.</p> + <p>Call this method when your component shuts down. After this method is called, all <strong>{{IMFMediaEventQueue}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>This method removes all of the events from the queue.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the application to defer the creation of an object. This interface is exposed by activation objects.</p> + <p>Typically, the application calls some function that returns an <strong>{{IMFActivate}}</strong> reference and then passes that reference to another component. The other component calls <strong>ActivateObject</strong> at a later time to create the object. In the protected media path ({{PMP}}), the <strong>{{IMFActivate}}</strong> reference might be marshaled to the protected process, so that the object can be created in that process.</p> + + + + <p> Creates the object associated with this activation object. </p> + <p>Some Microsoft Media Foundation objects must be shut down before being released. If so, the caller is responsible for shutting down the object that is returned in <em>ppv</em>. To shut down the object, do one of the following:</p><ul> <li>Call <strong>{{IMFActivate::ShutdownObject}}</strong> on the activation object, or</li> <li>Call the object-specific shutdown method. This method will depend on the type of object. Possibilities include:<ul> <li>Media sources: Call <strong>{{IMFMediaSource::Shutdown}}</strong>.</li> <li>Media sinks: Call <strong>{{IMFMediaSink::Shutdown}}</strong>.</li> <li>Any object that supports the <strong>{{IMFShutdown}}</strong> interface: Call <strong>{{IMFShutdown::Shutdown}}</strong>.</li> </ul> </li> </ul><p>The <strong>{{IMFActivate::ShutdownObject}}</strong> method is generic to all object types. If the object does not require a shutdown method, <strong>ShutdownObject</strong> succeeds and has no effect. If you do not know the specific shutdown method for the object (or do not know the object type), call <strong>{{IMFActivate::ShutdownObject}}</strong>.</p><p> After the first call to <strong>ActivateObject</strong>, subsequent calls return a reference to the same instance, until the client calls either <strong>ShutdownObject</strong> or <strong>{{IMFActivate::DetachObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Interface identifier ({{IID}}) of the requested interface. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Shuts down the created object.</p> + <p>If you create an object by calling <strong>{{IMFActivate::ActivateObject}}</strong>, call <strong>ShutdownObject</strong> when you are done using the object.</p><p>The component that calls <strong>ActivateObject</strong>?not the component that creates the activation object?is responsible for calling <strong>ShutdownObject</strong>. For example, in a typical playback application, the application creates activation objects for the media sinks, but the Media Session calls <strong>ActivateObject</strong>. Therefore the Media Session, not the application, calls <strong>ShutdownObject</strong>.</p><p>After <strong>ShutdownObject</strong> is called, the activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Detaches the created object from the activation object.</p> + <p>The activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p><p>The <strong>DetachObject</strong> method does not shut down the created object. If the <strong>DetachObject</strong> method succeeds, the client must shut down the created object. This rule applies only to objects that have a shutdown method or that support the <strong>{{IMFShutdown}}</strong> interface. See the remarks for <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>Implementation of this method is optional. If the activation object does not support this method, the method returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong>.</p> + <p>Media Foundation provides a set of built-in media sources and decoders. Applications can enumerate them as follows: </p><ul> <li>Media sources are enumerated through the Source Resolver.</li> <li>Transforms, such as decoders, are enumerated through the <strong>{{MFTEnum}}</strong> and <strong>{{MFTEnumEx}}</strong> functions.</li> </ul><p>Applications might also enumerate these objects indirectly. For example, if an application uses the topology loader to resolve a partial topology, the topology loader calls <strong>{{MFTEnumEx}}</strong> to find the required decoders.</p><p>Third parties can implement their own custom media sources and decoders, and register them for enumeration so that other applications can use them.</p><p>To control the enumeration order, Media Foundation maintains two process-wide lists of {{CLSIDs:}} a preferred list and a blocked list. An object whose {{CLSID}} appears in the preferred list appears first in the enumeration order. An object whose {{CLSID}} appears on the blocked list is not enumerated.</p><p>The lists are initially populated from the registry. Applications can use the <strong>{{IMFPluginControl}}</strong> interface to modify the lists for the current process.</p><p>The preferred list contains a set of key/value pairs, where the keys are strings and the values are {{CLSIDs}}. These key/value pairs are defined as follows:</p><ul> <li>For media sources, the key name is a file name extension, protocol scheme, or {{MIME}} type. The value is the {{CLSID}} of a scheme handler or byte-stream handler for that media source.</li> <li>For decoders, the key name is a media subtype {{GUID}} in canonical string form. (For more information about media subtypes, see Media Types.) The value is the {{CLSID}} of the Media Foundation transform ({{MFT}}) that implements the decoder. </li> </ul><p>The following examples show the various types of key:</p><ul> <li>File extension: ".wmv"</li> <li>Scheme: "http:"</li> <li>{{MIME}} type: "video/mp4"</li> <li>Media subtype: "{47504A4D-0000-0010-8000-00AA00389B71}"</li> </ul><p>To search the preferred list by key name, call the <strong>{{IMFPluginControl::GetPreferredClsid}}</strong> method. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetPreferredClsidByIndex}}</strong> method in a loop.</p><p>The blocked list contains a list of {{CLSIDs}}. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetDisabledByIndex}}</strong> method in a loop. To check whether a specific {{CLSID}} appears on the list, call the <strong>{{IMFPluginControl::IsDisabled}}</strong> method.</p> + + + + <p>Searches the preferred list for a class identifier ({{CLSID}}) that matches a specified key name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>No {{CLSID}} matching this key was found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name to match. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{CLSID}} from the preferred list.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the preferred list, specified by index value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the key name associated with the {{CLSID}}. The caller must free the memory for the returned string by calling the <strong>CoTaskMemFree</strong> function. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the preferred list or removes a {{CLSID}} from the list.</p> + <p>The preferred list is global to the caller's process. Calling this method does not affect the list in other process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name for the {{CLSID}}. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>The {{CLSID}} to add to the list. If this parameter is <strong>{{NULL}}</strong>, the key/value entry specified by the <em>selector</em> parameter is removed from the list. </p> </dd> + + + + + <p>Queries whether a class identifier ({{CLSID}}) appears in the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} appears in the blocked list.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} is not in the blocked list.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object for the query.</p> </dd> + + + <dd> <p>The {{CLSID}} to search for.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the blocked list, or removes a {{CLSID}} from the list.</p> + <p> The blocked list is global to the caller's process. Calling this method does not affect the list in other processes. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The {{CLSID}} to add or remove.</p> </dd> + + + <dd> <p>Specifies whether to add or remove the {{CSLID}}. If the value is <strong>{{TRUE}}</strong>, the method adds the {{CLSID}} to the blocked list. Otherwise, the method removes it from the list.</p> </dd> + + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>This interface extends the <strong>{{IMFPluginControl}}</strong> interface.</p> + <p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong> and query the returned reference for <strong>{{IMFPluginControl2}}</strong>.</p> + + + + <p>Sets the policy for which media sources and transforms are enumerated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value from the <strong>{{MF_PLUGIN_CONTROL_POLICY}}</strong> enumeration that specifies the policy.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Queries the Microsoft Direct3D device for an interface.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>For more info see, Supporting Direct3D 11 Video Decoding in Media Foundation.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>If a <strong>{{ID3D11VideoDevice}}</strong> is specified and the {{D3D}} device created is using the reference rasterizer or {{WARP}}. Or it is a hardware device and you are using the Microsoft Basic Display Adapter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device supports the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong>. To get a reference to the Direct3D11 device, use <strong>{{IID_ID3D11Device}}</strong> as the <em>riid</em>.</li> <li> <strong>{{ID3D11VideoDevice}}</strong>. To get a reference to the Direct3D11 video device, use <strong>{{IID_ID3D11VideoDevice}}</strong> as the <em>riid</em>.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gives the caller exclusive access to the Microsoft Direct3D device.</p> + <p>When you are done using the Direct3D device, call <strong>{{IMFDXGIDeviceManager::UnlockDevice}}</strong> to unlock the device.</p><p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>If <em>fBlock</em> is <strong>{{TRUE}}</strong>, this method can potentially deadlock. For example, it will deadlock if a thread calls <strong>LockDevice</strong> and then waits on another thread that calls <strong>LockDevice</strong>. It will also deadlock if a thread calls <strong>LockDevice</strong> twice without calling <strong>UnlockDevice</strong> in between. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_VIDEO_DEVICE_LOCKED}}</strong></dt> </dl> </td><td> <p>The device is locked and <em>fBlock</em> is <strong>{{FALSE}}</strong>. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device will support the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong> </li> <li> <strong>{{ID3D11VideoContext}}</strong> </li> <li> <strong>{{ID3D11VideoDevice}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Specifies whether to wait for the device lock. If the device is already locked and this parameter is <strong>{{TRUE}}</strong>, the method blocks until the device is unlocked. Otherwise, if the device is locked and this parameter is <strong>{{FALSE}}</strong>, the method returns immediately with the error code <strong>{{DXVA2_E_VIDEO_DEVICE_LOCKED}}</strong>.</p> </dd> + + + + + <p>Gets a handle to the Microsoft Direct3D device. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device handle.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Tests whether a Microsoft Direct3D device handle is valid.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + + + <p>Unlocks the Microsoft Direct3D device.</p> + <p> Call this method to release the device after calling <strong>{{IMFDXGIDeviceManager::LockDevice}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the <strong>{{IMFAttributes}}</strong> for the substream with the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The stream specified substream index is invalid. Call <strong>GetStreamCount</strong> to get the number of substreams managed by the multiplexed media source.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + + + + + + + + + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + <p>Specifies the immediate value and destination address written using <strong>{{ID3D12CommandList2::WriteBufferImmediate}}</strong>.</p> + <p></p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + + + + + + + <p> </p><p>Writes the contents of an attribute store to a stream.</p> + <p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function serializes <strong>{{IUnknown}}</strong> references in the attribute store, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::SaveReference}}</strong> to serialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoMarshalInterface</strong> to serialize a proxy for the object.</p> </li> </ul><p>If <em>dwOptions</em> does not include the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function skips <strong>{{IUnknown}}</strong> references in the attribute store.</p><p>To load the attributes from the stream, call <strong>{{MFDeserializeAttributesFromStream}}</strong>.</p><p>The main purpose of this function is to marshal attributes across process boundaries.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream where the attributes are saved.</p> </dd> + + + + + <p> </p><p>Loads attributes from a stream into an attribute store.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p><p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function deserializes <strong>{{IUnknown}}</strong> references from the stream, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::LoadReference}}</strong> to deserialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoUnmarshalInterface</strong> to deserialize a proxy for the object.</p> </li> </ul><p>This function deletes any attributes that were previously stored in <em>pAttr</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream from which to read the attributes.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Defines flags for the <strong>{{IMFTransform::ProcessInput}}</strong> method. Currently no flags are defined.</p> + + + + <p> Defines flags for the <strong>{{IMFTransform::ProcessOutput}}</strong> method. </p> + <p>The values in this enumeration are not bit flags, so they should not be combined with a bitwise <strong>{{OR}}</strong>. Also, the caller should test for these flags with the equality operator, not a bitwise <strong>{{AND}}</strong>:</p><code>// Correct. +if (Buffer.dwStatus == {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) +{ ... +} // Incorrect. +if ((Buffer.dwStatus &amp; {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) != 0) +{ ... +} +</code> + + + + <p> </p><p>Indicates the status of an input stream on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>The input stream can receive more data at this time. To deliver more input data, call <strong>{{IMFTransform::ProcessInput}}</strong>.</p> </dd> + + + + + <p> </p><p>Indicates whether a Media Foundation transform ({{MFT}}) can produce output data.</p> + + + <dd> <p>There is a sample available for at least one output stream. To retrieve the available output samples, call <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Describes an input stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the transform, the only flags guaranteed to be accurate are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags. For all other flags, the client should first set the media type on every non-optional stream.</p><p>In the default processing model, an {{MFT}} holds a reference count on the sample that it receives in <strong>ProcessInput</strong>. It does not process the sample immediately inside <strong>ProcessInput</strong>. When <strong>ProcessOutput</strong> is called, the {{MFT}} produces output data and then discards the input sample. The following variations on this model are defined:</p><ul> <li> <p>If an {{MFT}} never holds onto input samples between <strong>ProcessInput</strong> and <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}.</p> </li> <li> <p>If an {{MFT}} holds some input samples beyond the next call to <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_HOLDS_BUFFERS}}.</p> </li> </ul> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of input data must contain complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each media sample that the client provides as input must contain exactly one unit of data, as defined for the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that processes uncompressed audio should not set this flag. The {{MFT}} should accept buffers that contain more than a single audio frame, for efficiency.</p> </dd> + + + <dd> <p> All input samples must be the same size. The size is given in the <strong>cbSize</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The {{MFT}} must provide this value. During processing, the {{MFT}} should verify the size of input samples, and may drop samples with incorrect size.</p> </dd> + + + <dd> <p>The {{MFT}} might hold one or more input samples after <strong>{{IMFTransform::ProcessOutput}}</strong> is called. If this flag is present, the <strong>hnsMaxLatency</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure gives the maximum latency, and the <strong>cbMaxLookahead</strong> member gives the maximum number of bytes of lookahead.</p> </dd> + + + <dd> <p>The {{MFT}} does not hold input samples after the <strong>{{IMFTransform::ProcessInput}}</strong> method returns. It releases the sample before the <strong>ProcessInput</strong> method returns.</p> <p>If this flag is absent, the {{MFT}} might hold a reference count on the samples that are passed to the <strong>ProcessInput</strong> method. The client must not re-use or delete the buffer memory until the {{MFT}} releases the sample's <strong>{{IMFSample}}</strong> reference.</p> <p>If this flag is absent, it does not guarantee that the {{MFT}} holds a reference count on the input samples. It is valid for an {{MFT}} to release input samples in <strong>ProcessInput</strong> even if the {{MFT}} does not set this flag. However, setting this flag might enable to client to optimize how it re-uses buffers.</p> <p>An {{MFT}} should not set this flag if it ever holds onto an input sample after returning from <strong>ProcessInput</strong>.</p> </dd> + + + <dd> <p>This input stream can be removed by calling <strong>{{IMFTransform::DeleteInputStream}}</strong>.</p> </dd> + + + <dd> <p>This input stream is optional. The transform can produce output without receiving input from this stream. The caller can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. It is possible for every input stream on a transform to be optional, but at least one input must be selected in order to produce output.</p> </dd> + + + <dd> <p>The {{MFT}} can perform in-place processing. In this mode, the {{MFT}} directly modifies the input buffer. When the client calls <strong>ProcessOutput</strong>, the same sample that was delivered to this stream is returned in the output stream that has a matching stream identifier. This flag implies that the {{MFT}} holds onto the input buffer, so this flag cannot combined with the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}} flag.</p> <p>If this flag is present, the {{MFT}} must set the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag for the output stream that corresponds to this input stream. (See <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>).</p> </dd> + + + + + <p> </p><p>Describes an output stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the {{MFT}}, the only flag guaranteed to be accurate is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag. For all other flags, the client should first set the media type on every non-optional stream.</p><p>The {{MFT_OUTPUT_STREAM_DISCARDABLE}} and {{MFT_OUTPUT_STREAM_LAZY_READ}} flags define different behaviors for how the {{MFT}} can discard output data.</p><ul> <li> <p>{{MFT_OUTPUT_STREAM_DISCARDABLE:}} The {{MFT}} discards output data only if the client calls <strong>ProcessOutput</strong> with the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag. The {{MFT}} never discards data when the client calls <strong>ProcessInput</strong>.</p> </li> <li> <p>{{MFT_OUTPUT_STREAM_LAZY_READ:}} If the client continues to call <strong>ProcessInput</strong> without collecting the output from this stream, the {{MFT}} eventually discards the output. If all output streams have the {{MFT_OUTPUT_STREAM_LAZY_READ}} flag, the {{MFT}} never refuses more input data.</p> </li> </ul><p>If neither of these flags is set, the {{MFT}} never discards output data.</p> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of output data from the {{MFT}} contains complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each output sample contains exactly one unit of data, as defined for the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that outputs uncompressed audio should not set this flag. For efficiency, it should output more than one audio frame at a time.</p> </dd> + + + <dd> <p>All output samples are the same size.</p> </dd> + + + <dd> <p>The {{MFT}} can discard the output data from this output stream, if requested by the client. To discard the output, set the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> </dd> + + + <dd> <p>This output stream is optional. The client can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. When an optional stream is deselected, it does not produce any output data.</p> </dd> + + + <dd> <p>The {{MFT}} provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. The {{MFT}} cannot use output samples provided by the client for this stream.</p> <p>If this flag is not set, the {{MFT}} must set <strong>cbSize</strong> to a nonzero value in the <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure, so that the client can allocate the correct buffer size. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </dd> + + + <dd> <p>The {{MFT}} can either provide output samples for this stream or it can use samples that the client allocates. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> <p>If the {{MFT}} does not set this flag or the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag, the client must allocate the samples for this output stream. The {{MFT}} will not provide its own samples.</p> </dd> + + + <dd> <p>The {{MFT}} does not require the client to process the output for this stream. If the client continues to send input data without getting the output from this stream, the {{MFT}} simply discards the previous input.</p> </dd> + + + <dd> <p>The {{MFT}} might remove this output stream during streaming. This flag typically applies to demultiplexers, where the input data contains multiple streams that can start and stop during streaming. For more information, see <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Defines flags for the setting or testing the media type on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Test the proposed media type, but do not set it.</p> </dd> + + + + + <p> </p><p>Defines flags for processing output samples in a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Do not produce output for streams in which the <strong>pSample</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure is <strong>{{NULL}}</strong>. This flag is not valid unless the {{MFT}} has marked the output stream with the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> </dd> + + + <dd> <p>Regenerates the last output sample.</p> <p><strong>Note</strong> Requires Windows?8.</p> </dd> + + + + + <p> </p><p>Indicates the status of a call to <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> + <p>If the {{MFT}} sets this flag, the <strong>ProcessOutput</strong> method returns {{MF_E_TRANSFORM_STREAM_CHANGE}} and no output data is produced. The client should respond as follows:</p><ol> <li> <p>Call <strong>{{IMFTransform::GetStreamCount}}</strong> to get the new number of streams.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetStreamIDs}}</strong> to get the new stream identifiers.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetOutputAvailableType}}</strong> and <strong>{{IMFTransform::SetOutputType}}</strong> to set the media types on the new streams.</p> </li> </ol><p>Until these steps are completed, all further calls to <strong>ProcessOutput</strong> return {{MF_E_TRANSFORM_STREAM_CHANGE}}.</p> + + + + <p> </p><p>Not supported.</p><strong>Note</strong>??Earlier versions of this documentation described the <strong>_MFT_DRAIN_TYPE</strong> enumeration incorrectly. The enumeration is not supported. For more information, see <strong>{{MFT_MESSAGE_TYPE}}</strong>.? + + + + <p>Defines messages for a Media Foundation transform ({{MFT}}). To send a message to an {{MFT}}, call <strong>{{IMFTransform::ProcessMessage}}</strong>.</p> + <p>Some messages require specific actions from the {{MFT}}. These events have "{{MESSAGE}}" in the message name. Other messages are informational; they notify the {{MFT}} of some action by the client, and do not require any particular response from the {{MFT}}. These messages have "{{NOTIFY}}" in the messages name. Except where noted, an {{MFT}} should not rely on the client sending notification messages.</p> + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + <p>Specifies how to output a 3D stereoscopic video stream.</p> + <p>This enumeration is used with the {{MF_ENABLE_3DVIDEO_OUTPUT}} attribute.</p> + + + <dd> <p>Output the base view only. Discard the other view.</p> </dd> + + + <dd> <p>Output a stereo view (two buffers).</p> </dd> + + + + + + + + + + + <p> </p><p>Contains information about an input stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetInputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags in the <strong>dwFlags</strong> member.</p><ul> <li> <p>The {{MFT_INPUT_STREAM_REMOVABLE}} flag indicates that the stream can be deleted.</p> </li> <li> <p>The {{MFT_INPUT_STREAM_OPTIONAL}} flag indicates that the stream is optional and does not require a media type.</p> </li> </ul><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetInputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag in the <strong>dwFlags</strong> member. This flag indicates that the stream is optional and does not require a media type.</p><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetOutputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output buffer for a Media Foundation transform. This structure is used in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> + <p>You must provide an <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure for each selected output stream.</p><p>{{MFTs}} can support two different allocation models for output samples:</p><ul> <li> The {{MFT}} allocates the output sample. </li> <li> The client allocates the output sample. </li> </ul><p>To find which model the {{MFT}} supports for a given output stream, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> and check the value of <strong>dwFlags</strong>.</p><table> <tr><th>Flag</th><th>Allocation Model</th></tr> <tr><td>{{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}}</td><td>The {{MFT}} allocates the output samples for the stream. Set <strong>pSample</strong> to <strong>{{NULL}}</strong> for this stream.</td></tr> <tr><td>{{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}}</td><td>The {{MFT}} supports both allocation models.</td></tr> <tr><td>Neither (default)</td><td>The client must allocate the output samples for the stream.</td></tr> </table><p>?</p><p>The behavior of <strong>ProcessOutput</strong> depends on the initial value of <strong>pSample</strong> and the value of the <em>dwFlags</em> parameter in the <strong>ProcessOutput</strong> method.</p><ul> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> contains the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag, the {{MFT}} discards the output data.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. (To get the flags for the output stream, call the <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> method.)</p> </li> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> does not contain the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}}, the {{MFT}} provides a sample for the output data. The {{MFT}} sets <strong>pSample</strong> to point to the sample that it provides. The {{MFT}} can either allocate a new sample or re-use an input sample.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </li> <li> <p>If <strong>pSample</strong> is non-<strong>{{NULL}}</strong>, the {{MFT}} uses the sample provided by the caller.</p> <p>Restriction: This output stream must not have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> </li> </ul><p>Any other combinations are invalid and cause <strong>ProcessOutput</strong> to return {{E_INVALIDARG}}.</p><p>Each call to <strong>ProcessOutput</strong> can produce zero or more events and up to one sample per output stream.</p> + + + + <p>Not for application use.</p> + <p>This structure is used internally by the Microsoft Media Foundation {{AVStream}} proxy.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + + + + + + + <p>Implemented by all Media Foundation Transforms ({{MFTs}}).</p> + + + + <p> Gets the minimum and maximum number of input and output streams for this Media Foundation transform ({{MFT}}). </p> + <p> If the {{MFT}} has a fixed number of streams, the minimum and maximum values are the same. </p><p> It is not recommended to create an {{MFT}} that supports zero inputs or zero outputs. An {{MFT}} with no inputs or no outputs may not be compatible with the rest of the Media Foundation pipeline. You should create a Media Foundation sink or source for this purpose instead. </p><p> When an {{MFT}} is first created, it is not guaranteed to have the minimum number of streams. To find the actual number of streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamLimits}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the minimum number of input streams. </p> </dd> + + + <dd> <p> Receives the maximum number of input streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + <dd> <p> Receives the minimum number of output streams. </p> </dd> + + + <dd> <p> Receives the maximum number of output streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + + + <p> Gets the current number of input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> The number of streams includes unselected streams?that is, streams with no media type or a <strong>{{NULL}}</strong> media type.</p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamCount}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of input streams. </p> </dd> + + + <dd> <p> Receives the number of output streams. </p> </dd> + + + + + <p> Gets the stream identifiers for the input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> Stream identifiers are necessary because some {{MFTs}} can add or remove streams, so the index of a stream may not be unique. Therefore, <strong>{{IMFTransform}}</strong> methods that operate on streams take stream identifiers. </p><p>This method can return <strong>{{E_NOTIMPL}}</strong> if both of the following conditions are true:</p><ul> <li> The transform has a fixed number of streams. </li> <li> The streams are numbered consecutively from 0 to n ? 1, where n is the number of input streams or output streams. In other words, the first input stream is 0, the second is 1, and so on; and the first output stream is 0, the second is 1, and so on. </li> </ul><p>This method must be implemented if any of the following conditions is true:</p><ul> <li> The {{MFT}} can add or remove output streams. </li> <li> The {{MFT}} allows the client to add or remove input streams. </li> <li> The stream identifiers are not consecutive. </li> </ul><p> All input stream identifiers must be unique within an {{MFT}}, and all output stream identifiers must be unique. However, an input stream and an output stream can share the same identifier. </p><p> If the client adds an input stream, the client assigns the identifier, so the {{MFT}} must allow arbitrary identifiers, as long as they are unique. If the {{MFT}} creates an output stream, the {{MFT}} assigns the identifier. </p><p> By convention, if an {{MFT}} has exactly one fixed input stream and one fixed output stream, it should assign the identifier 0 to both streams. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamIDs}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. See Remarks. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> One or both of the arrays is too small. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of elements in the <em>pdwInputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the input stream identifiers. The array size must be at least equal to the number of input streams. To get the number of input streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p> <p>If the caller passes an array that is larger than the number of input streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + <dd> <p> Number of elements in the <em>pdwOutputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the output stream identifiers. The array size must be at least equal to the number of output streams. To get the number of output streams, call <strong>GetStreamCount</strong>. </p> <p>If the caller passes an array that is larger than the number of output streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + + + <p> Gets the buffer requirements and other information for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the input stream. </p> </dd> + + + + + <p> Gets the buffer requirements and other information for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the output stream. </p> </dd> + + + + + <p> Gets the global attribute store for this Media Foundation transform ({{MFT}}). </p> + <p> Use the <strong>{{IMFAttributes}}</strong> reference retrieved by this method to get or set attributes that apply to the entire {{MFT}}. To get the attribute store for an input stream, call <strong>{{IMFTransform::GetInputStreamAttributes}}</strong>. To get the attribute store for an output stream, call <strong>{{IMFTransform::GetOutputStreamAttributes}}</strong>. </p><p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. Exception: Hardware-based {{MFTs}} must implement this method. See Hardware {{MFTs}}.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support attributes. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support input stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support output stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Removes an input stream from this Media Foundation transform ({{MFT}}). </p> + <p> If the transform has a fixed number of input streams, the method returns <strong>{{E_NOTIMPL}}</strong>. </p><p> An {{MFT}} might support this method but not allow certain input streams to be removed. If an input stream can be removed, the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method returns the <strong>{{MFT_INPUT_STREAM_REMOVABLE}}</strong> flag for that stream. Otherwise, the stream cannot be removed, and the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. The method also fails if the {{MFT}} currently has the minimum number of input streams that it requires. To find the minimum number of streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If the transform still has unprocessed input for that stream, the method might succeed or it might return <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>. If the method succeeds, the {{MFT}} will continue to process the remaining input after the stream is removed. If the method returns <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>, you must clear the input buffers before removing the stream. To clear the input buffers, either call <strong>{{IMFTransform::ProcessOutput}}</strong> or else call <strong>{{IMFTransform::ProcessMessage}}</strong> with the <strong>{{MFT_MESSAGE_COMMAND_FLUSH}}</strong> to flush the {{MFT}}. Then call the <strong>DeleteInputStream</strong> again. An {{MFT}} should never discard input buffers when <strong>DeleteInputStream</strong> is called. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTDeleteInputStream}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The transform has a fixed number of input streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The stream is not removable, or the transform currently has the minimum number of input streams it can support. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong></dt> </dl> </td><td> <p> The transform has unprocessed input buffers for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifier of the input stream to remove. </p> </dd> + + + + + <p> Adds one or more new input streams to this Media Foundation transform ({{MFT}}). </p> + <p> If the new streams exceed the maximum number of input streams for this transform, the method returns <strong>{{E_INVALIDARG}}.</strong> To find the maximum number of input streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If any of the new stream identifiers conflicts with an existing input stream, the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTAddInputStreams}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} has a fixed number of input streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of streams to add. </p> </dd> + + + <dd> <p> Array of stream identifiers. The new stream identifiers must not match any existing input streams. </p> </dd> + + + + + <p> Gets an available media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each input stream and orders them by preference. This method enumerates the available media types for an input stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream might change the available types for another stream, or change the preference order. However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetInputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of input types until one or more output types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p><p>For encoders, after the output type is set, <strong>GetInputAvailableType</strong> must return a list of input types that are compatible with the current output type. This means that all types returned by <strong>GetInputAvailableType</strong> after the output type is set must be valid types for <strong>SetInputType</strong>.</p><p>Encoders should reject input types if the attributes of the input media type and output media type do not match, such as resolution setting with {{MF_MT_FRAME_SIZE}}, nominal range setting with {{MF_MT_VIDEO_NOMINAL_RANGE}}, or frame rate setting with {{MF_MT_FRAME_SIZE}}</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. </p> </dd> + + + + + <p> Gets an available media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each output stream and orders them by preference. This method enumerates the available media types for an output stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns {{MF_}}<strong>{{E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream can change the available types for another stream (or change the preference order). However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of output types until one or more input types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function. </p><p> This method can return a <em>partial</em> media type. A partial media type contains an incomplete description of a format, and is used to provide a hint to the caller. For example, a partial type might include just the major type and subtype {{GUIDs}}. However, after the client sets the input types on the {{MFT}}, the {{MFT}} should generally return at least one complete output type, which can be used without further modification. For more information, see Complete and Partial Media Types.</p><p>Some {{MFTs}} cannot provide an accurate list of output types until the {{MFT}} receives the first input sample. For example, the {{MFT}} might need to read the first packet header to deduce the format. An {{MFT}} should handle this situation as follows:</p><ol> <li> Before the {{MFT}} receives any input, it offers a list of one or more output types that it could possibly produce. For example, an {{MPEG}}-2 decoder might return a media type that describes the {{MPEG}}-2 main profile/main level. </li> <li> The client selects one of these types (generally the first) and sets it on the output stream. </li> <li> The client delivers the first input sample by calling <strong>{{IMFTransform::ProcessInput}}</strong>. </li> <li> If the output type does not conform to the input data, the transform signals a format change in the <strong>ProcessOutput</strong> method. For more information about format changes, see <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> The calls <strong>GetOutputAvailableType</strong> again. At this point, the method should return an updated list of types that reflects the input data. </li> <li> The client selects a new output type from this list and calls <strong>SetOutputType</strong>. </li> </ol><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more output types before setting the input type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetInputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more input types before setting the output type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p>If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The transform cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Gets the current media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified input stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetInputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The input media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the current media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified output stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The output media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Queries whether an input stream on this Media Foundation transform ({{MFT}}) can accept more data. </p> + <p> If the method returns the <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong> flag, you can deliver an input sample to the specified stream by calling <strong>{{IMFTransform::ProcessInput}}</strong>. If the method succeeds but does not return any flags in the <em>pdwFlags</em> parameter, it means the input stream already has as much data as it can accept. </p><p> Use this method to test whether the input stream is ready to accept more data, without incurring the overhead of allocating a new sample and calling <strong>ProcessInput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output (or both). </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a member of the <strong>_MFT_INPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong>, the stream specified in <em>dwInputStreamID</em> can accept more input data. </p> </dd> + + + + + <p> Queries whether the Media Foundation transform ({{MFT}}) is ready to produce output data. </p> + <p> If the method returns the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag, it means you can generate one or more output samples by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> {{MFTs}} are not required to implement this method. If the method returns <strong>{{E_NOTIMPL}}</strong>, you must call <strong>ProcessOutput</strong> to determine whether the transform has output data. </p><p> If the {{MFT}} has more than one output stream, but it does not produce samples at the same time for each stream, it can set the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag when just one stream is ready. However, if the {{MFT}} normally produces samples at the same time for each output stream, it should not set this flag until all streams are ready. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a member of the <strong>_MFT_OUTPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong>, the {{MFT}} can produce an output sample. </p> </dd> + + + + + <p> Sets the range of time stamps the client needs for output. </p> + <p> This method can be used to optimize preroll, especially in formats that have gaps between time stamps, or formats where the data must start on a sync point, such as {{MPEG}}-2. Calling this method is optional, and implementation of this method by an {{MFT}} is optional. If the {{MFT}} does not implement the method, the return value is <strong>{{E_NOTIMPL}}</strong>.</p><p> If an {{MFT}} implements this method, it must limit its output data to the range of times specified by <em>hnsLowerBound</em> and <em>hnsUpperBound</em>. The {{MFT}} discards any input data that is not needed to produce output within this range. If the sample boundaries do not exactly match the range, the {{MFT}} should split the output samples, if possible. Otherwise, the output samples can overlap the range. </p><p> For example, suppose the output range is 100 to 150 milliseconds (ms), and the output format is video with each frame lasting 33 ms. A sample with a time stamp of 67 ms overlaps the range (67 + 33 = 100) and is produced as output. A sample with a time stamp of 66 ms is discarded (66 + 33 = 99). Similarly, a sample with a time stamp of 150 ms is produced as output, but a sample with a time stamp of 151 is discarded.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputBounds}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the earliest time stamp. The Media Foundation transform ({{MFT}}) will accept input until it can produce an output sample that begins at this time; or until it can produce a sample that ends at this time or later. If there is no lower bound, use the value <strong>{{MFT_OUTPUT_BOUND_LOWER_UNBOUNDED}}</strong>. </p> </dd> + + + <dd> <p> Specifies the latest time stamp. The {{MFT}} will not produce an output sample with time stamps later than this time. If there is no upper bound, use the value <strong>{{MFT_OUTPUT_BOUND_UPPER_UNBOUNDED}}</strong>. </p> </dd> + + + + + <p> Sends an event to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> An {{MFT}} can handle sending the event downstream, or it can let the pipeline do this, as indicated by the return value: </p><ul> <li><strong>{{E_NOTIMPL}}</strong>: The {{MFT}} ignores all events, and the pipeline should send all events downstream. After the pipeline receives this return value, it might not call <strong>ProcessEvent</strong> again. </li> <li><strong>{{S_OK}}</strong>: The {{MFT}} has examined this event, but the pipeline should send the event downstream. Internally, the {{MFT}} might respond to the event in some way, or it might ignore the event. </li> <li><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong>: The pipeline should not propagate this event downstream. Either the {{MFT}} will send the event downstream, or else the {{MFT}} will consume the event and not send it downstream. The {{MFT}} should only consume the event if the event should stop at this {{MFT}} and not travel any further downstream. But in most cases, the event should travel downstream. </li> </ul><p> To send the event downstream, the {{MFT}} adds the event to the collection object that is provided by the client in the <strong>pEvents</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure, when the client calls <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> Events must be serialized with the samples that come before and after them. Attach the event to the output sample that follows the event. (The pipeline will process the event first, and then the sample.) If an {{MFT}} holds back one or more samples between calls to <strong>{{IMFTransform::ProcessInput}}</strong> and <strong>ProcessOutput</strong>, the {{MFT}} should handle sending all events downstream, because in this situation the pipeline cannot correlate input samples with output samples. </p><p> If an {{MFT}} does not hold back samples and does not need to examine any events, it can return <strong>{{E_NOTIMPL}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessEvent}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong></dt> </dl> </td><td> <p> The pipeline should not propagate the event. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of an event object. </p> </dd> + + + + + <p> Sends a message to the Media Foundation transform ({{MFT}}). </p> + <p> Before calling this method, set the media types on all input and output streams. </p><p> The {{MFT}} might ignore certain message types. If so, the method returns <strong>{{S_OK}}</strong>. An error code indicates that the transform handles this message type but was unable to process the message in this instance. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessMessage}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. Applies to the <strong>{{MFT_MESSAGE_NOTIFY_END_OF_STREAM}}</strong> message. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The message to send, specified as a member of the <strong>{{MFT_MESSAGE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Message parameter. The meaning of this parameter depends on the message type. </p> </dd> + + + + + <p> Delivers data to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> In most cases, if the method succeeds, the {{MFT}} stores the sample and holds a reference count on the <strong>{{IMFSample}}</strong> reference. Do not re-use the sample until the {{MFT}} releases the sample. Instead of storing the sample, however, an {{MFT}} might copy the sample data into a new buffer. In that case, the {{MFT}} should set the <strong>{{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}</strong> flag in the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method. </p><p> If the {{MFT}} already has enough input data to produce an output sample, it does not accept new input data, and <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. At that point, the client should clear the pending input data by doing one of the following: </p><ul> <li> Generate new output by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> Flush the input data by calling <strong>{{IMFTransform::ProcessMessage}}</strong> with the {{MFT_}}<strong>{{MESSAGE_COMMAND_FLUSH}}</strong> message. </li> </ul><p> An exception to this rule is the <strong>{{MFT_OUTPUT_STREAM_LAZY_READ}}</strong> flag. When this flag is present, the transform will discard stored samples if you give it more input. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. A transform should never queue any more input data than is required to produce the correct output. </p><p> An {{MFT}} can process the input data in the <strong>ProcessInput</strong> method. However, most {{MFTs}} wait until the client calls <strong>ProcessOutput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. It should never be in both states or neither state. An {{MFT}} should only accept as much input as it needs to generate at least one output sample, at which point <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. When <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>, the client can assume that the {{MFT}} is ready to produce output. </p><p> If an {{MFT}} encounters a non-fatal error in the input data, it can simply drop the data and attempt to recover when it gets the more input data. To request more input data, the {{MFT}} returns <strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong> from the <strong>{{IMFTransform::ProcessOutput}}</strong> method. If the {{MFT}} drops any data, it should set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute attribute on the next output sample, to notify the caller that there is a gap in the data stream. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessInput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The input sample requires a valid sample duration. To set the duration, call <strong>{{IMFSample::SetSampleDuration}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid durations. Some {{MFTs}} do not require sample durations.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The input sample requires a time stamp. To set the time stamp, call <strong>{{IMFSample::SetSampleTime}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid time stamps. Some {{MFTs}} do not require time stamps.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> The transform cannot process more input at this time. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The media type is not supported for DirectX Video Acceleration ({{DXVA}}). A {{DXVA}}-enabled decoder might return this error code. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessInput}}</strong>, unlike the <strong>{{IMediaObject::ProcessInput}}</strong> method.? + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The sample must contain at least one media buffer that contains valid input data. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + + + <p> Generates output from the current input data. </p> + <p> The size of the <em>pOutputSamples</em> array must be equal to or greater than the number of <em>selected</em> output streams. The number of selected output streams equals the total number of output streams minus the number of <em>deselected</em> streams. A stream is deselected if it has the <strong>{{MFT_OUTPUT_STREAM_OPTIONAL}}</strong> flag and the caller does not set a media type (or sets the media type to <strong>{{NULL}}</strong>). For more information, see <strong>_MFT_OUTPUT_STREAM_INFO_FLAGS</strong> enumeration. </p><p>This method generates output samples and can also generate events. If the method succeeds, at least one of the following conditions is true:</p><ul> <li> One or more samples in the <em>pOutputSamples</em> array contains output data. </li> <li> One or more members of the <em>pOutputSamples</em> array contains a non-empty collection of events. </li> </ul><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including Mftransform.h, this method is renamed <strong>{{MFTProcessOutput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The <strong>ProcessOutput</strong> method was called on an asynchronous {{MFT}} that was not expecting this method call.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier in the <strong>dwStreamID</strong> member of one or more <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong></dt> </dl> </td><td> <p> The transform cannot produce output data until it receives more input data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_STREAM_CHANGE}}</strong></dt> </dl> </td><td> <p> The format has changed on an output stream, or there is a new preferred format, or there is a new output stream. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the media type on one or more streams of the {{MFT}}. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessOutput}}</strong>, unlike the <strong>{{IMediaObject::ProcessOutput}}</strong> method.? + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_FLAGS</strong> enumeration. </p> </dd> + + + <dd> <p> Number of elements in the <em>pOutputSamples</em> array. The value must be at least 1. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures, allocated by the caller. The {{MFT}} uses this array to return output data to the caller. </p> </dd> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_STATUS</strong> enumeration. </p> </dd> + + + + + <p> </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>The <strong>SetInputStreamState</strong> method sets the Device {{MFT}} input stream state and media type.</p> + <p>This interface function helps to transition the input stream to a specified state with a specified media type set on the input stream. This will be used by device transform manager ({{DTM}}) when the Device {{MFT}} requests a specific input stream?s state and media type to be changed. Device {{MFT}} would need to request such a change when one of the Device {{MFT}}'s output changes.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, if Output 2?s media type changes to 1080p, Device {{MFT}} has to change Input 1's media type to 1080p. To achieve this, Device {{MFT}} should request {{DTM}} to call this method using the {{METransformInputStreamStateChanged}} message. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Initialization succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>When <strong>{{S_OK}}</strong> is returned, perform the state change operation. Otherwise, this contains an error that occurred while setting the media type on the devproxy output pin. In this case, propagate the error appropriately.</p> </dd> + + + + + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + + + + + + + + + + + + + <p>Creates a generic activation object for Media Foundation transforms ({{MFTs}}).</p> + <p>Most applications will not use this function; it is used internally by the <strong>{{MFTEnumEx}}</strong> function. </p><p>An <em>activation object</em> is a helper object that creates another object, somewhat similar to a class factory. The <strong>{{MFCreateTransformActivate}}</strong> function creates an activation object for {{MFTs}}. Before this activation object can create an {{MFT}}, the caller must initialize the activation object by setting one or more attributes on it.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MFT_TRANSFORM_CLSID_Attribute}} </td><td>Required. Contains the {{CLSID}} of the {{MFT}}. The activation object creates the {{MFT}} by passing this {{CLSID}} to the <strong>CoCreateInstance</strong> function.</td></tr> <tr><td> {{MF_TRANSFORM_CATEGORY_Attribute}} </td><td>Optional. Specifies the category of the {{MFT}}.</td></tr> <tr><td> {{MF_TRANSFORM_FLAGS_Attribute}} </td><td>Contains various flags that describe the {{MFT}}. For hardware-based {{MFTs}}, set the <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flag. Otherwise, this attribute is optional.</td></tr> <tr><td> {{MFT_CODEC_MERIT_Attribute}} </td><td> <p>Optional. Contains the merit value of a hardware codec.</p> <p>If this attribute is set and its value is greater than zero, the activation object calls <strong>{{MFGetMFTMerit}}</strong> to get the trusted merit value for the {{MFT}}. If the trusted merit is less than the value of this attribute, the activation object's <strong>{{IMFActivate::ActivateObject}}</strong> method fails and returns <strong>{{MF_E_INVALID_CODEC_MERIT}}</strong>.</p> </td></tr> <tr><td> {{MFT_ENUM_HARDWARE_URL_Attribute}} </td><td>Required for hardware-based {{MFTs}}. Specifies the symbolic link for the hardware device. The device proxy uses this value to configure the {{MFT}}.</td></tr> <tr><td> {{MFT_FIELDOFUSE_UNLOCK_Attribute}} </td><td> <p>Optional. Contains an <strong>{{IMFFieldOfUseMFTUnlock}}</strong> reference, which can be used to unlock the {{MFT}}. The <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface is used with {{MFTs}} that have usage restrictions.</p> <p>If this attribute is set and the {{MF_TRANSFORM_FLAGS_Attribute}} attribute contains the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag, the activation object calls <strong>{{IMFFieldOfUseMFTUnlock::Unlock}}</strong> when it creates the {{MFT}}. An application can also set the {{MFT_FIELDOFUSE_UNLOCK_Attribute}} attribute without setting the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag. In that case, the application must call <strong>Unlock</strong>.</p> </td></tr> <tr><td> {{MFT_PREFERRED_ENCODER_PROFILE}} </td><td> <p>Optional. Contains the encoding profile for an encoder. The value of this attribute is an <strong>{{IMFAttributes}}</strong> reference.</p> <p>If this attribute is set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object uses the encoding profile to configure the {{MFT}}. The {{MFT}} must expose either <strong>{{ICodecAPI}}</strong> or <strong>{{IPropertyStore}}</strong> for this purpose.</p> </td></tr> <tr><td> {{MFT_PREFERRED_OUTPUTTYPE_Attribute}} </td><td> <p>Optional. Specifies the preferred output format for an encoder.</p> <p>If this attribute set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object sets this media type on the {{MFT}}.</p> </td></tr> </table><p>?</p><p>For more information about activation objects, see Activation Objects. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</code> enumeration defines flags that describe an input buffer.</p> + + + <dd> <p>The beginning of the data is a synchronization point.</p> </dd> + + + <dd> <p>The buffer's time stamp is valid.</p> <p>The buffer's indicated time length is valid.</p> </dd> + + + <dd> <p>The buffer's indicated time length is valid.</p> </dd> + + + + + + + + <p>Media Foundation transforms ({{MFTs}}) are an evolution of the transform model first introduced with DirectX Media Objects ({{DMOs}}). This topic summarizes the main ways in which {{MFTs}} differ from {{DMOs}}. Read this topic if you are already familiar with the {{DMO}} interfaces, or if you want to convert an existing {{DMO}} into an {{MFT}}.</p><p>This topic contains the following sections:</p><p> </p><ul> <li>{{Number}}</li> <li>{{Format}}</li> <li>{{Streaming}}<ul> <li>{{Allocating}}</li> <li>{{Processing}}</li> <li>{{Flushing}}</li> <li>{{Stream}}</li> </ul> </li> <li>{{Miscellaneous}}</li> <li>{{Flags}}<ul> <li>{{ProcessInput}}</li> <li>{{ProcessOutput}}</li> <li>{{GetInputStatus}}</li> <li>{{GetOutputStatus}}</li> <li>{{GetInputStreamInfo}}</li> <li>{{GetOutputStreamInfo}}</li> <li>{{SetInputType/SetOutputType}}</li> </ul> </li> <li>{{Error}}</li> <li>{{Creating}}</li> <li>{{Related}}</li> </ul> + + + + <p> </p><p>The <code>{{DMO_INPUT_STREAM_INFO_FLAGS}}</code> enumeration defines flags that describe an input stream.</p> + + + <dd> <p>The stream requires whole samples. Samples must not span multiple buffers, and buffers must not contain partial samples.</p> </dd> + + + <dd> <p>Each buffer must contain exactly one sample.</p> </dd> + + + <dd> <p>All the samples in this stream must be the same size.</p> </dd> + + + <dd> <p>The {{DMO}} performs lookahead on the incoming data, and may hold multiple input buffers for this stream.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{DMO_SET_TYPE_FLAGS}}</code> enumeration defines flags for setting the media type on a stream.</p> + <p>The {{DMO_SET_TYPEF_TEST_ONLY}} and {{DMO_SET_TYPEF_CLEAR}} flags are mutually exclusive. Do not set both flags.</p> + + + <dd> <p>Test the media type but do not set it.</p> </dd> + + + <dd> <p>Clear the media type that was set for the stream.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_PROCESS_OUTPUT_FLAGS}}</code> enumeration defines flags that specify output processing requests.</p> + + + <dd> <p>Discard the output when the reference to the output buffer is <strong>{{NULL}}</strong>.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <strong>{{DMO_MEDIA_TYPE}}</strong> structure describes the format of the data used by a stream in a Microsoft DirectX Media Object ({{DMO}}).</p> + <p>This structure is identical to the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The <strong>bFixedSizeSamples</strong>, <strong>bTemporalCompression</strong>, and <strong>lSampleSize</strong> members are for compatibility with DirectShow. Other {{DMO}} clients are not required to use them.</p> + + + <dd> <p>Major type {{GUID}} of the stream.</p> </dd> + + + <dd> <p>Subtype {{GUID}} of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are of a fixed size. This field is informational only. For audio, it is generally set to <strong>{{TRUE}}</strong>. For video, it is usually <strong>{{TRUE}}</strong> for uncompressed video and <strong>{{FALSE}}</strong> for compressed video.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are compressed using temporal (interframe) compression. (A value of <strong>{{TRUE}}</strong> indicates that not all frames are key frames.) This field is informational only.</p> </dd> + + + <dd> <p>Size of the sample in bytes. For compressed data, the value can be zero.</p> </dd> + + + <dd> <p>{{GUID}} specifying the format type. The <strong>pbFormat</strong> member points to the corresponding format structure. Format types include the following.</p> <table> <tr><th>Format type</th><th>Format structure</th></tr> <tr><td><dl> <dt><strong>{{FORMAT_DvInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{DVINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEG2Video}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG2VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEGVideo}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG1VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_None}}</strong></dt> </dl> </td><td> <p>None.</p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER2}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </td><td> <p> <strong>{{WAVEFORMATEX}}</strong> </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Not used. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the format block of the media type.</p> </dd> + + + <dd> <p>Pointer to the format structure. The structure type is specified by the <strong>formattype</strong> member. The format structure must be present, unless <strong>formattype</strong> is {{GUID_NULL}} or {{FORMAT_None}}.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{IMediaBuffer}}</code> interface provides methods for manipulating a data buffer. Buffers passed to the <strong>{{IMediaObject::ProcessInput}}</strong> and <strong>ProcessOutput</strong> methods must implement this interface.</p> + + + + + + + + + + + + + <p> </p><p>The <code>{{IMediaObject}}</code> interface provides methods for manipulating a Microsoft DirectX Media Object ({{DMO}}).</p> + + + + + + + + + + <p> </p><p>The <code>GetOutputStreamInfo</code> method retrieves information about an output stream; for example, whether the stream is discardable, and whether it uses a fixed sample size. This information never changes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a bitwise combination of zero or more <strong>{{DMO_OUTPUT_STREAM_INFO_FLAGS}}</strong> flags.</p> </dd> + + + + + <p> </p><p>The <code>GetInputType</code> method retrieves a preferred media type for a specified input stream.</p> + <p>Call this method to enumerate an input stream's preferred media types. The {{DMO}} assigns each media type an index value in order of preference. The most preferred type has an index of zero. To enumerate all the types, make successive calls while incrementing the type index until the method returns {{DMO_E_NO_MORE_ITEMS}}. The {{DMO}} is not guaranteed to enumerate every media type that it supports.</p><p>The format block in the returned type might be <strong>{{NULL}}</strong>. If so, the format type is {{GUID_NULL}}. Check the format type before dereferencing the format block.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block. (This function is also safe to call when the format block is <strong>{{NULL}}</strong>.)</p><p>To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method. Setting the media type on one stream can change another stream's preferred types. In fact, a stream might not have a preferred type until the type is set on another stream. For example, a decoder might not have a preferred output type until the input type is set. However, the {{DMO}} is not required to update its preferred types dynamically in this fashion. Thus, the types returned by this method are not guaranteed to be valid; they might fail when used in the <strong>SetInputType</strong> method.</p><p>To test whether a particular media type is acceptable, call <strong>SetInputType</strong> with the {{DMO_SET_TYPEF_TEST_ONLY}} flag.</p><p>To test whether the <em>dwTypeIndex</em> parameter is in range, set <em>pmt</em> to <strong>{{NULL}}</strong>. The method returns {{S_OK}} if the index is in range, or {{DMO_E_NO_MORE_ITEMS}} if the index is out of range.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NO_MORE_ITEMS}}</strong></dt> </dl> </td><td> <p>Type index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Zero-based index on the set of acceptable media types.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller, or <strong>{{NULL}}</strong>. If this parameter is non-<strong>{{NULL}}</strong>, the method fills the structure with the media type. You can use the value <strong>{{NULL}}</strong> to test whether the type index is in range, by checking the return code.</p> </dd> + + + + + + + + <p> </p><p>The <code>SetInputType</code> method sets the media type on an input stream, or tests whether a media type is acceptable.</p> + <p>Call this method to test, set, or clear the media type on an input stream:</p><ul> <li>To test the media type without setting it, use the {{DMO_SET_TYPEF_TEST_ONLY}} flag. If the media type is not acceptable, the method returns {{S_FALSE}}.</li> <li>To set the media type, set <em>dwFlags</em> to zero. If the media type is not acceptable, the method returns {{DMO_E_TYPE_NOT_ACCEPTED}}.</li> <li>To clear the current media type (if any), use the {{DMO_SET_TYPEF_CLEAR}} flag and set <em>pmt</em> to <strong>{{NULL}}</strong>. When the method returns, the stream no longer has a media type. The {{DMO}} cannot process samples until the application sets a new media type.</li> </ul><p>The media types that are currently set on other streams can affect whether the media type is acceptable.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_ACCEPTED}}</strong></dt> </dl> </td><td> <p>Media type was not accepted</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Media type is not acceptable</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Media type was set successfully, or is acceptable</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure that specifies the media type.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_SET_TYPE_FLAGS}}</strong> enumeration.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputCurrentType</code> method retrieves the media type that was set for an input stream, if any.</p> + <p>The caller must set the media type for the stream before calling this method. To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller. The method fills the structure with the media type.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputSizeInfo</code> method retrieves the buffer requirements for a specified input stream.</p> + <p>The buffer requirements may depend on the media types of the various streams. Before calling this method, set the media type of each stream by calling the <strong>{{IMediaObject::SetInputType}}</strong> and <strong>{{IMediaObject::SetOutputType}}</strong> methods. If the media types have not been set, this method might return an error.</p><p>If the {{DMO}} performs lookahead on the input stream, it returns the {{DMO_INPUT_STREAMF_HOLDS_BUFFERS}} flag in the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method. During processing, the {{DMO}} holds up to the number of bytes indicated by the <em>pcbMaxLookahead</em> parameter. The application must allocate enough buffers for the {{DMO}} to hold this much data.</p><p>A buffer is <em>aligned</em> if the buffer's start address is a multiple of <em>*pcbAlignment</em>. The alignment must be a power of two. Depending on the microprocessor, reads and writes to an aligned buffer might be faster than to an unaligned buffer. Also, some microprocessors do not support unaligned reads and writes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the minimum size of an input buffer for this stream, in bytes.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the maximum amount of data that the {{DMO}} will hold for lookahead, in bytes. If the {{DMO}} does not perform lookahead on the stream, the value is zero.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required buffer alignment, in bytes. If the input stream has no alignment requirement, the value is 1.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>Flush</code> method flushes all internally buffered data.</p> + <p>The {{DMO}} performs the following actions when this method is called:</p><ul> <li>Releases any <strong>{{IMediaBuffer}}</strong> references it holds.</li> <li>Discards any values that specify the time stamp or sample length for a media buffer.</li> <li>Reinitializes any internal states that depend on the contents of a media sample.</li> </ul><p>Media types, maximum latency, and locked state do not change.</p><p>When the method returns, every input stream accepts data. Output streams cannot produce any data until the application calls the <strong>{{IMediaObject::ProcessInput}}</strong> method on at least one input stream.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + + <p> </p><p>The <code>Discontinuity</code> method signals a discontinuity on the specified input stream.</p> + <p>A discontinuity represents a break in the input. A discontinuity might occur because no more data is expected, the format is changing, or there is a gap in the data. After a discontinuity, the {{DMO}} does not accept further input on that stream until all pending data has been processed. The application should call the <strong>{{IMediaObject::ProcessOutput}}</strong> method until none of the streams returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag.</p><p>This method might fail if it is called before the client sets the input and output types on the {{DMO}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The {{DMO}} is not accepting input.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The input and output types have not been set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>ProcessInput</code> method delivers a buffer to the specified input stream.</p> + <p>The input buffer specified in the <em>pBuffer</em> parameter is read-only. The {{DMO}} will not modify the data in this buffer. All write operations occur on the output buffers, which are given in a separate call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>If the {{DMO}} does not process all the data in the buffer, it keeps a reference count on the buffer. It releases the buffer once it has generated all the output, unless it needs to perform lookahead on the data. (To determine whether a {{DMO}} performs lookahead, call the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method.)</p><p>If this method returns {{DMO_E_NOTACCEPTING}}, call <strong>ProcessOutput</strong> until the input stream can accept more data. To determine whether the stream can accept more data, call the <strong>{{IMediaObject::GetInputStatus}}</strong> method.</p><p>If the method returns {{S_FALSE}}, no output was generated from this input and the application does not need to call <strong>ProcessOutput</strong>. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>Data cannot be accepted.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output to process.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to the buffer's <strong>{{IMediaBuffer}}</strong> interface.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Time stamp that specifies the start time of the data in the buffer. If the buffer has a valid time stamp, set the {{DMO_INPUT_DATA_BUFFERF_TIME}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + <dd> <p>Reference time specifying the duration of the data in the buffer. If this value is valid, set the {{DMO_INPUT_DATA_BUFFERF_TIMELENGTH}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + + + <p> </p><p>The <code>ProcessOutput</code> method generates output from the current input data.</p> + <p>The <em>pOutputBuffers</em> parameter points to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures. The application must allocate one structure for each output stream. To determine the number of output streams, call the <strong>{{IMediaObject::GetStreamCount}}</strong> method. Set the <em>cOutputBufferCount</em> parameter to this number.</p><p>Each <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure contains a reference to a buffer's <strong>{{IMediaBuffer}}</strong> interface. The application allocates these buffers. The other members of the structure are status fields. The {{DMO}} sets these fields if the method succeeds. If the method fails, their values are undefined.</p><p>When the application calls <code>ProcessOutput</code>, the {{DMO}} processes as much input data as possible. It writes the output data to the output buffers, starting from the end of the data in each buffer. (To find the end of the data, call the <strong>{{IMediaBuffer::GetBufferAndLength}}</strong> method.) The {{DMO}} never holds a reference count on an output buffer.</p><p>If the {{DMO}} fills an entire output buffer and still has input data to process, the {{DMO}} returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag in the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure. The application should check for this flag by testing the <strong>dwStatus</strong> member of each structure.</p><p>If the method returns {{S_FALSE}}, no output was generated. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p><p><strong>Discarding data:</strong></p><p>You can discard data from a stream by setting the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <em>dwFlags</em> parameter. For each stream that you want to discard, set the <strong>pBuffer</strong> member of the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure to <strong>{{NULL}}</strong>.</p><p>For each stream in which <strong>pBuffer</strong> is <strong>{{NULL}}</strong>:</p><ul> <li>If the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag is set, and the stream is discardable or optional, the {{DMO}} discards the data.</li> <li>If the flag is set but the stream is neither discardable nor optional, the {{DMO}} discards the data if possible. It is not guaranteed to discard the data.</li> <li>If the flag is not set, the {{DMO}} does not produce output data for that stream, but does not discard the data.</li> </ul><p>To check whether a stream is discardable or optional, call the <strong>{{IMediaObject::GetOutputStreamInfo}}</strong> method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output was generated</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_PROCESS_OUTPUT_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Number of output buffers.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures containing the output buffers. Specify the size of the array in the <em>cOutputBufferCount</em> parameter.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a reserved value (zero). The application should ignore this value.</p> </dd> + + + + + <p> </p><p>The <code>Lock</code> method acquires or releases a lock on the {{DMO}}. Call this method to keep the {{DMO}} serialized when performing multiple operations.</p> + <p>This method prevents other threads from calling methods on the {{DMO}}. If another thread calls a method on the {{DMO}}, the thread blocks until the lock is released.</p><p>If you are using the Active Template Library ({{ATL}}) to implement a {{DMO}}, the name of the Lock method conflicts with the <strong>{{CComObjectRootEx::Lock}}</strong> method. To work around this problem, define the preprocessor symbol {{FIX_LOCK_NAME}} before including the header file Dmo.h:</p><pre> #define {{FIX_LOCK_NAME}} +#include &lt;dmo.h&gt; +</pre><p>This directive causes the preprocessor to rename the <strong>{{IMediaObject}}</strong> method to <em>{{DMOLock}}</em>. In your {{DMO}}, implement the method as <em>{{DMOLock}}</em>. In your implementation, call the {{ATL}} <strong>Lock</strong> or <strong>Unlock</strong> method, depending on the value of <em>bLock</em>. Applications can still invoke the method using the name <em>Lock</em> because the vtable order does not change.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Value that specifies whether to acquire or release the lock. If the value is non-zero, a lock is acquired. If the value is zero, the lock is released.</p> </dd> + + + + + + + + <p> </p><p>The <code>Next</code> method retrieves a specified number of items in the enumeration sequence.</p> + <p>If the method succeeds, the arrays given by the <em>pCLSID</em> and <em>Names</em> parameters are filled with {{CLSIDs}} and wide-character strings. The value of *<em>pcItemsFetched</em> specifies the number of items returned in these arrays.</p><p>The method returns {{S_OK}} if it retrieves the requested number of items (in other words, if *<em>pcItemsFetched</em> equals <em>cItemsToFetch</em>). Otherwise, it returns {{S_FALSE}} or an error code.</p><p>The caller must free the memory allocated for each string returned in the <em>Names</em> parameter, using the <strong>CoTaskMemFree</strong> function.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Retrieved fewer items than requested.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Retrieved the requested number of items.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of items to retrieve.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the {{CLSIDs}} of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the friendly names of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the actual number of items retrieved. Can be <strong>{{NULL}}</strong> if <em>cItemsToFetch</em> equals 1.</p> </dd> + + + + + + + + <p> </p><p>The <code>Reset</code> method resets the enumeration sequence to the beginning.</p> + <p>Returns {{S_OK}}.</p> + + + + + + + + + + + + + <p> </p><p>The <code>Clone</code> method creates a copy of the {{DMO}} in its current state.</p> + <p>If the method succeeds, the <strong>{{IMediaObjectInPlace}}</strong> interface that it returns has an outstanding reference count. Be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Address of a reference to receive the new {{DMO}}'s <strong>{{IMediaObjectInPlace}}</strong> interface.</p> </dd> + + + + + <p> </p><p>The <code>GetLatency</code> method retrieves the latency introduced by this {{DMO}}.</p> + <p>This method returns the average time required to process each buffer. This value usually depends on factors in the run-time environment, such as the processor speed and the {{CPU}} load. One possible way to implement this method is for the {{DMO}} to keep a running average based on historical data.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Pointer to a variable that receives the latency, in 100-nanosecond units.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>The <code>GetCurrentOperationMode</code> method retrieves the optimization features in effect.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the current features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>The <code>GetCurrentSampleRequirements</code> method retrieves the optimization features required to process the next sample, given the features already agreed to by the application.</p> + <p>After an application calls the <strong>{{IDMOVideoOutputOptimizations::SetOperationMode}}</strong> method, it must provide all the features it has agreed to. However, the {{DMO}} might not require every feature on every sample. This method enables the {{DMO}} to waive an agreed-upon feature for one sample.</p><p>Before processing a sample, the application can call this method. If the {{DMO}} does not require a given feature in order to process the next sample, it omits the corresponding flag from the <em>pdwRequestedFeatures</em> parameter. For the next sample only, the application can ignore the feature. The results of this method are valid only for the next call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>The {{DMO}} will return only the flags that were agreed to in the <strong>SetOperationMode</strong> method. In other words, you cannot dynamically enable new features with this method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Defines error status codes for the Media Engine.</p> + <p>The values greater than zero correspond to error codes defined for the <strong>MediaError</strong> object in {{HTML5}}.</p> + + + <dd> <p>No error.</p> </dd> + + + <dd> <p>The process of fetching the media resource was stopped at the user's request. </p> </dd> + + + <dd> <p>A network error occurred while fetching the media resource. </p> </dd> + + + <dd> <p>An error occurred while decoding the media resource. </p> </dd> + + + <dd> <p>The media resource is not supported. </p> </dd> + + + <dd> <p>An error occurred while encrypting the media resource.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines event codes for the Media Engine. </p> + <p>The application receives Media Engine events through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. The <strong>EventNotify</strong> method includes two event parameters, <em>param1</em> and <em>param2</em>. The meaning of the parameters depends on the event code. If the event description does not list any parameters, ignore the values of <em>param1</em> and <em>param2</em>.</p><p>Values below 1000 correspond to events defined in {{HTML}} 5 for media elements.</p> + + + <dd> <p>The Media Engine has started to load the source. See <strong>{{IMFMediaEngine::Load}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine is loading the source.</p> </dd> + + + <dd> <p>The Media Engine has suspended a load operation.</p> </dd> + + + <dd> <p>The Media Engine cancelled a load operation that was in progress. </p> </dd> + + + <dd> <p>An error occurred.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A member of the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</td></tr> <tr><td><em>param2</em></td><td>An <strong>{{HRESULT}}</strong> error code, or zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine has switched to the <strong>{{MF_MEDIA_ENGINE_NETWORK_EMPTY}}</strong> state. This can occur when the <strong>{{IMFMediaEngine::Load}}</strong> method is called, or if an error occurs during the <strong>Load</strong> method. See <strong>{{IMFMediaEngine::GetNetworkState}}</strong>.</p> </dd> + + + <dd> <p>The <strong>Load</strong> algorithm is stalled, waiting for data.</p> </dd> + + + <dd> <p>The Media Engine is switching to the playing state. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>The media engine has paused. See <strong>{{IMFMediaEngine::Pause}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough source data to determine the duration and dimensions of the source.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough data to render some content (for example, a video frame).</p> </dd> + + + <dd> <p>Playback has stopped because the next frame is not available.</p> </dd> + + + <dd> <p>Playback has started. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>Playback can start, but the Media Engine might need to stop to buffer more data.</p> </dd> + + + <dd> <p>The Media Engine can probably play through to the end of the resource, without stopping to buffer data.</p> </dd> + + + <dd> <p>The Media Engine has started seeking to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has seeked to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The playback position has changed. See <strong>{{IMFMediaEngine::GetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>Playback has reached the end of the source. This event is not sent if the <strong>GetLoop</strong>is <strong>{{TRUE}}</strong>.</p> </dd> + + + <dd> <p>The playback rate has changed. See <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> </dd> + + + <dd> <p>The duration of the media source has changed. See <strong>{{IMFMediaEngine::GetDuration}}</strong>.</p> </dd> + + + <dd> <p>The audio volume changed. See <strong>{{IMFMediaEngine::SetVolume}}</strong>.</p> </dd> + + + <dd> <p>The output format of the media source has changed.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>Zero if the video format changed, 1 if the audio format changed.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine flushed any pending events from its queue.</p> </dd> + + + <dd> <p>The playback position reached a timeline marker. See <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong>.</p> </dd> + + + <dd> <p>The audio balance changed. See <strong>{{IMFMediaEngineEx::SetBalance}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has finished downloading the source data.</p> </dd> + + + <dd> <p>The media source has started to buffer data.</p> </dd> + + + <dd> <p>The media source has stopped buffering data.</p> </dd> + + + <dd> <p>The <strong>{{IMFMediaEngineEx::FrameStep}}</strong> method completed.</p> </dd> + + + <dd> <p>The Media Engine's <strong>Load</strong> algorithm is waiting to start.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A handle to a waitable event, of type <strong>{{HANDLE}}</strong>.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> <p>If Media Engine is created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong> flag, the Media Engine sends the <strong>{{MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE}}</strong> event at the start of the <strong>Load</strong> algorithm. The <em>param1</em> parameter is a handle to a waitable event. The <strong>Load</strong> thread waits for the application to signal the event by calling <strong>SetEvent</strong>.</p> <p>If the Media Engine is not created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong>, it does not send this event, and the <strong>Load</strong> thread does not wait to be signalled.</p> </dd> + + + <dd> <p>The first frame of the media source is ready to render.</p> </dd> + + + <dd> <p>Raised when a new track is added or removed.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when there is new information about the Output Protection Manager ({{OPM}}). </p> <p>This event will be raised when an {{OPM}} failure occurs, but {{ITA}} allows fallback without the {{OPM}}. In this case, constriction can be applied. </p> <p>This event will not be raised when there is an {{OPM}} failure and the fallback also fails. For example, if {{ITA}} blocks playback entirely when {{OPM}} cannot be established.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when one of the component streams of a media stream fails. This event is only raised if the media stream contains other component streams that did not fail.</p> </dd> + + + + + <p>Defines network status codes for the Media Engine.</p> + + + <dd> <p>The initial state.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, and has selected a media resource, but is not using the network.</p> </dd> + + + <dd> <p>The Media Engine is loading a media resource.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, but has not selected a media resource.</p> </dd> + + + + + <p>Defines ready-state values for the Media Engine.</p> + <p>These values correspond to constants defined for the <strong>{{HTMLMediaElement}}.readyState</strong> attribute in {{HTML5}}.</p> + + + <dd> <p>No data is available.</p> </dd> + + + <dd> <p>Some metadata is available, including the duration and, for video files, the video dimensions. No media data is available.</p> </dd> + + + <dd> <p>There is media data for the current playback position, but not enough data for playback or seeking.</p> </dd> + + + <dd> <p>There is enough media data to enable some playback or seeking. The amount of data might be a little as the next video frame.</p> </dd> + + + <dd> <p>There is enough data to play the resource, based on the current rate at which the resource is being fetched. </p> </dd> + + + + + <p>Specifies the likelihood that the Media Engine can play a specified type of media resource.</p> + + + <dd> <p>The Media Engine cannot play the resource.</p> </dd> + + + <dd> <p>The Media Engine might be able to play the resource.</p> </dd> + + + <dd> <p>The Media Engine can probably play the resource.</p> </dd> + + + + + <p>Defines preload hints for the Media Engine. These values correspond to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + + + <dd> <p>The <strong>preload</strong> attribute is missing. </p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is an empty string. This value is equivalent to <strong>{{MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC}}</strong>.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "none". This value is a hint to the user agent not to preload the resource.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "metadata". This value is a hint to the user agent to fetch the resource metadata.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "auto". This value is a hint to the user agent to preload the entire resource.</p> </dd> + + + + + <p>Specifies the layout for a packed 3D video frame.</p> + + + <dd> <p>None.</p> </dd> + + + <dd> <p>The views are packed side-by-side in a single frame.</p> </dd> + + + <dd> <p>The views are packed top-to-bottom in a single frame.</p> </dd> + + + + + <p>Identifies statistics that the Media Engine tracks during playback. To get a playback statistic from the Media Engine, call <strong>{{IMFMediaEngineEx::GetStatistics}}</strong>.</p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Defines values for the media engine seek mode.</p> + <p>This enumeration is used with the <strong>MediaEngineEx::SetCurrentTimeEx</strong>.</p> + + + <dd> <p>Specifies normal seek.</p> </dd> + + + <dd> <p>Specifies an approximate seek. </p> </dd> + + + + + <p>Specifies media engine extension types.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies the content protection requirements for a video frame.</p> + + + <dd> <p>The video frame should be protected.</p> </dd> + + + <dd> <p>Direct3D surface protection must be applied to any surface that contains the frame.</p> </dd> + + + <dd> <p>Direct3D anti-screen-scrape protection must be applied to any surface that contains the frame.</p> </dd> + + + + + + + + + + + + + + <p>Defines the different ready states of the Media Source Extension.</p> + + + <dd> <p>The media source is closed.</p> </dd> + + + <dd> <p>The media source is open.</p> </dd> + + + <dd> <p>The media source is ended.</p> </dd> + + + + + <p>Defines the different error states of the Media Source Extension.</p> + + + <dd> <p>Specifies no error.</p> </dd> + + + <dd> <p>Specifies an error with the network.</p> </dd> + + + <dd> <p>Specifies an error with decoding.</p> </dd> + + + <dd> <p>Specifies an unknown error.</p> </dd> + + + + + <p>Defines media key error codes for the media engine.</p> + <p><strong>{{MF_MEDIA_ENGINE_KEYERR}}</strong> is used with the <em>code</em> parameter of <strong>{{IMFMediaKeySessionNotify::KeyError}}</strong> and the <em>code</em> value returned from <strong>{{IMFMediaKeySession::GetError}}</strong>.</p> + + + <dd> <p>Unknown error occurred.</p> </dd> + + + <dd> <p>An error with the client occurred.</p> </dd> + + + <dd> <p>An error with the service occurred.</p> </dd> + + + <dd> <p>An error with the output occurred.</p> </dd> + + + <dd> <p>An error occurred related to a hardware change.</p> </dd> + + + <dd> <p>An error with the domain occurred.</p> </dd> + + + + + + + + <p>Defines the status of the Output Protection Manager ({{OPM}}).</p> + + + + <p>Contains flags for the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Contains flags that specify whether the Media Engine will play protected content, and whether the Media Engine will use the Protected Media Path ({{PMP}}).</p> + <p>These flags are used with the {{MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS}} attribute.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind of timed text track.</p> + + + <dd> <p>The kind of timed text track is unknown.</p> </dd> + + + <dd> <p>The kind of timed text track is subtitles.</p> </dd> + + + <dd> <p>The kind of timed text track is closed captions.</p> </dd> + + + <dd> <p>The kind of timed text track is metadata.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the units in which the timed text is measured.</p> + + + <dd> <p>The timed text is measured in pixels.</p> </dd> + + + <dd> <p>The timed text is measured as a percentage.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the font style of the timed text.</p> + + + <dd> <p>The font style is normal, sometimes referred to as roman.</p> </dd> + + + <dd> <p>The font style is oblique.</p> </dd> + + + <dd> <p>The font style is italic.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned in its parent block element. </p> + + + <dd> <p>Text is aligned at the start of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned at the end of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned in the center of its parent block element.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned with the display. </p> + + + <dd> <p>Text is aligned before an element.</p> </dd> + + + <dd> <p>Text is aligned after an element.</p> </dd> + + + <dd> <p>Text is aligned in the center between elements.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is decorated (underlined and so on). </p> + + + <dd> <p>Text isn't decorated.</p> </dd> + + + <dd> <p>Text is underlined.</p> </dd> + + + <dd> <p>Text has a line through it.</p> </dd> + + + <dd> <p>Text has a line over it.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the sequence in which text is written on its parent element.</p> + + + <dd> <p>Text is written from left to right and top to bottom.</p> </dd> + + + <dd> <p>Text is written from right to left and top to bottom.</p> </dd> + + + <dd> <p>Text is written from top to bottom and right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom and left to right.</p> </dd> + + + <dd> <p>Text is written from left to right.</p> </dd> + + + <dd> <p>Text is written from right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text appears when the parent element is scrolled.</p> + + + <dd> <p>Text pops on when the parent element is scrolled.</p> </dd> + + + <dd> <p>Text rolls up when the parent element is scrolled.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind error that occurred with a timed text track.</p> + <p>This enumeration is used to return error information from the <strong>{{IMFTimedTextTrack::GetErrorCode}}</strong> method.</p> + + + <dd> <p>No error occurred.</p> </dd> + + + <dd> <p>A fatal error occurred.</p> </dd> + + + <dd> <p>An error occurred with the data format of the timed text track.</p> </dd> + + + <dd> <p>A network error occurred when trying to load the timed text track.</p> </dd> + + + <dd> <p>An internal error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of a timed text cue event.</p> + + + <dd> <p>The cue has become active.</p> </dd> + + + <dd> <p>The cue has become inactive.</p> </dd> + + + <dd> <p>All cues have been deactivated.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Identifies the kind of media stream that failed.</p> + + + <dd> <p>The stream type is unknown.</p> </dd> + + + <dd> <p>The stream is an audio stream.</p> </dd> + + + <dd> <p>The stream is a video stream.</p> </dd> + + + + + + + + <p>Provides the current error status for the Media Engine.</p> + <p>The <strong>{{IMFMediaError}}</strong> interface corresponds to the <strong>MediaError</strong> object in {{HTML5}}.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEngine::GetError}}</strong>.</p> + + + + <p>Gets the error code.</p> + <p>Returns a value from the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</p> + + + + <p>Gets the extended error code.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> + + + + <p>Sets the error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, specified as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets the extended error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> </dd> + + + + + <p>Represents a list of time ranges, where each range is defined by a start and end time.</p> + <p>The <strong>{{IMFMediaTimeRange}}</strong> interface corresponds to the <strong>TimeRanges</strong> interface in {{HTML5}}.</p><p>Several <strong>{{IMFMediaEngine}}</strong> methods return <strong>{{IMFMediaTimeRange}}</strong> references.</p> + + + + <p>Gets the number of time ranges contained in the object.</p> + <p>This method corresponds to the <strong>TimeRanges.length</strong> attribute in {{HTML5}}.</p> + <p>Returns the number of time ranges.</p> + + + + <p>Gets the start time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.start</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the start time, in seconds.</p> </dd> + + + + + <p>Gets the end time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.end</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the end time, in seconds.</p> </dd> + + + + + <p>Queries whether a specified time falls within any of the time ranges.</p> + <p>This method returns <strong>{{TRUE}}</strong> if the following condition holds for any time range in the list:</p><dl> <dd>(<em>start</em> &lt;= <em>time</em>) &amp;&amp; (<em>time</em> &lt;= <em>end</em>)</dd> </dl> + <p>Returns <strong>{{TRUE}}</strong> if any time range contained in this object spans the value of the <em>time</em> parameter. Otherwise, returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The time, in seconds.</p> </dd> + + + + + <p>Adds a new range to the list of time ranges.</p> + <p>If the new range intersects a range already in the list, the two ranges are combined. Otherwise, the new range is added to the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The start time, in seconds.</p> </dd> + + + <dd> <p>The end time, in seconds.</p> </dd> + + + + + <p>Clears the list of time ranges.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Callback interface for the <strong>{{IMFMediaEngine}}</strong> interface. </p> + <p>To set the callback reference on the Media Engine, set the {{MF_MEDIA_ENGINE_CALLBACK}} attribute in the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Notifies the application when a playback event occurs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_EVENT}}</strong> enumeration that specifies the event.</p> </dd> + + + <dd> <p>The first event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + <dd> <p>The second event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + + + <p>Provides the Media Engine with a list of media resources.</p> + <p>The <strong>{{IMFMediaEngineSrcElements}}</strong> interface represents an ordered list of media resources.</p><p>This interface enables the application to provide the same audio/video content in several different encoding formats, such as H.264 and Windows Media Video. If a particular codec is not present on the user's computer, the Media Engine will try the next {{URL}} in the list. To use this interface, do the following:</p><ol> <li>Create an implementation of this interface.</li> <li>Initialize your implementation with a list of {{URLs}}. Optionally, provide {{MIME}} types and media query strings for each {{URL}}.</li> <li>Call the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method.</li> </ol> + + + + <p>Gets the number of source elements in the list.</p> + <p>Returns the number of source elements.</p> + + + + <p>Gets the {{URL}} of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the source element. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{URL}} is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the {{MIME}} type of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{MIME}} type. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{MIME}} type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the intended media type of an element in the list.</p> + <p>The string returned in <em>pMedia</em> should be a media-query string that conforms to the {{W3C}} <em>Media Queries</em> specification.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains a media-query string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no media type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Adds a source element to the end of the list.</p> + <p>Any of the parameters to this method can be <strong>{{NULL}}</strong>.</p><p>This method allocates copies of the <strong>{{BSTR}}</strong>s that are passed in.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A media-query string that specifies the intended media type, or <strong>{{NULL}}</strong>. If specified, the string should conform to the {{W3C}} <em>Media Queries</em> specification.</p> </dd> + + + + + <p>Removes all of the source elements from the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables an application to play audio or video files.</p> + <p>The Media Engine implements this interface. To create an instance of the Media Engine, call <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong>.</p><p>This interface is extended with <strong>{{IMFMediaEngineEx}}</strong>.</p> + + + + <p>Gets the most recent error status.</p> + <p>This method returns the last error status, if any, that resulted from loading the media source. If there has not been an error, <em>ppError</em> receives the value <strong>{{NULL}}</strong>.</p><p>This method corresponds to the <strong>error</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives either a reference to the <strong>{{IMFMediaError}}</strong> interface, or the value <strong>{{NULL}}</strong>. If the value is <strong>non-{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Sets the current error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets a list of media sources.</p> + <p>This method corresponds to adding a list of <strong>source</strong> elements to a media element in {{HTML5}}. </p><p>The Media Engine tries to load each item in the <em>pSrcElements</em> list, until it finds one that loads successfully. After this method is called, the application can use the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to update the list at any time. To reload the list, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load a {{URL}}, it sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>If the application also calls <strong>{{IMFMediaEngine::SetSource}}</strong>, the {{URL}} passed to <strong>SetSource</strong> takes precedence over the list given to <strong>SetSourceElements</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEngineSrcElements}}</strong> interface. The caller must implement this interface. </p> </dd> + + + + + <p>Sets the {{URL}} of a media resource.</p> + <p>This method corresponds to setting the <strong>src</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The {{URL}} specified by this method takes precedence over media resources specified in the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method. To load the {{URL}}, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method asynchronously loads the {{URL}}. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the {{URL}}, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + + + <p>Gets the {{URL}} of the current media resource, or an empty string if no media resource is present.</p> + <p>This method corresponds to the <strong>currentSrc</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>Initially, the current media resource is empty. It is updated when the Media Engine performs the resource selection algorithm.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the current media resource. If there is no media resource, <em>ppUrl</em> receives an empty string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Gets the current network state of the media engine.</p> + <p>This method corresponds to the <strong>networkState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_NETWORK}}</strong> enumeration value.</p> + + + + <p>Gets the preload flag.</p> + <p>This method corresponds to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> enumeration value.</p> + + + + <p>Sets the preload flag.</p> + <p>This method corresponds to setting the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> value equal to the preload flag.</p> </dd> + + + + + <p>Queries how much resource data the media engine has buffered.</p> + <p>This method corresponds to the <strong>buffered</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The returned <strong>{{IMFMediaTimeRange}}</strong> interface represents a list of time ranges. The time ranges indicate which portions of the media resource have been downloaded. The time range list can be empty.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Loads the current media source.</p> + <p>The main purpose of this method is to reload a list of source elements after updating the list. For more information, see <strong>SetSourceElements</strong>. Otherwise, calling this method is generally not required. To load a new media source, call <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>.</p><p>The <strong>Load</strong> method explictly invokes the Media Engine's media resource loading algorithm. Before calling this method, you must set the media resource by calling <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>. </p><p>This method completes asynchronously. When the <strong>Load</strong> operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the file, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>This method corresponds to the <strong>load</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries how likely it is that the Media Engine can play a specified type of media resource.</p> + <p>This method corresponds to the <strong>canPlayType</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The <strong>canPlayType</strong> attribute defines the following values.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>"" (empty string)</td><td>The user-agent cannot play the resource, or the resource type is "application/octet-stream".</td></tr> <tr><td>"probably"</td><td>The user-agent probably can play the resource.</td></tr> <tr><td>"maybe"</td><td>Neither of the previous values applies.</td></tr> </table><p>?</p><p>The value "probably" is used because a {{MIME}} type for a media resource is generally not a complete description of the resource. For example, "video/mp4" specifies an {{MP4}} file with video, but does not describe the codec. Even with the optional codecs parameter, the {{MIME}} type omits some information, such as the actual coded bit rate. Therefore, it is usually impossible to be certain that playback is possible until the actual media resource is opened.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives an <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration value.</p> </dd> + + + + + <p>Gets the ready state, which indicates whether the current media resource can be rendered.</p> + <p>This method corresponds to the <strong>readyState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_READY}}</strong> enumeration value.</p> + + + + <p>Queries whether the Media Engine is currently seeking to a new playback position.</p> + <p>This method corresponds to the <strong>seeking</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine is seeking, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the current playback position.</p> + <p>This method corresponds to the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback position, in seconds.</p> + + + + <p>Seeks to a new playback position.</p> + <p>This method corresponds to setting the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the seek operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKING}}</strong> event. When the seek operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKED}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new playback position, in seconds.</p> </dd> + + + + + <p>Gets the initial playback position.</p> + <p>This method corresponds to the <strong>initialTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns the initial playback position, in seconds.</p> + + + + <p>Gets the duration of the media resource.</p> + <p>This method corresponds to the <strong>duration</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If the duration changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE}}</strong> event. See <strong>{{IMFMediaEngineNotify::EventNotify}}</strong>.</p> + <p>Returns the duration, in seconds. If no media data is available, the method returns not-a-number (NaN). If the duration is unbounded, the method returns an infinite value.</p> + + + + <p>Queries whether playback is currently paused.</p> + <p>This method corresponds to the <strong>paused</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if playback is paused, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the default playback rate.</p> + <p>This method corresponds to getting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p><p>The default playback rate is used for the next call to the <strong>{{IMFMediaEngine::Play}}</strong> method. To change the current playback rate, call <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> + <p>Returns the default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the default playback rate.</p> + <p>This method corresponds to setting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the current playback rate.</p> + <p>This method corresponds to getting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the current playback rate.</p> + <p>This method corresponds to setting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the time ranges that have been rendered.</p> + <p>This method corresponds to the <strong>played</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the time ranges to which the Media Engine can currently seek.</p> + <p>This method corresponds to the <strong>seekable</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>To find out whether the media source supports seeking, call <strong>{{IMFMediaEngineEx::GetResourceCharacteristics}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries whether playback has ended.</p> + <p>This method corresponds to the <strong>ended</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the direction of playback is forward and playback has reached the end of the media resource. Returns <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Queries whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If this method returns <strong>{{TRUE}}</strong>, playback begins automatically after the <strong>{{IMFMediaEngine::Load}}</strong> method completes. Otherwise, playback begins when the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine automatically begins playback, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to setting the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine automatically begins playback after it loads a media source. Otherwise, playback does not begin until the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + + + <p>Queries whether the Media Engine will loop playback.</p> + <p>This method corresponds to getting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If looping is enabled, the Media Engine seeks to the start of the content when playback reaches the end.</p> + <p>Returns <strong>{{TRUE}}</strong> if looping is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine loops playback.</p> + <p>If <em>Loop</em> is <strong>{{TRUE}}</strong>, playback loops back to the beginning when it reaches the end of the source.</p><p>This method corresponds to setting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to enable looping, or <strong>{{FALSE}}</strong> to disable looping.</p> </dd> + + + + + <p>Starts playback.</p> + <p>This method corresponds to the <strong>play</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAY}}</strong> event. When playback is under way, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAYING}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Pauses playback.</p> + <p>This method corresponds to the <strong>pause</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the transition to paused is complete, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PAUSE}} </strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the audio is muted. </p> + <p>Returns <strong>{{TRUE}}</strong> if the audio is muted, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Mutes or unmutes the audio. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio. </p> </dd> + + + + + <p>Gets the audio volume level.</p> + <p>Returns the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> + + + + <p>Sets the audio volume level.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). </p> </dd> + + + + + + + + <p>Queries whether the current media resource contains a video stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains a video stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain a video stream.</p> + + + + <p>Queries whether the current media resource contains an audio stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains an audio stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain an audio stream.</p> + + + + <p>Gets the size of the video frame, adjusted for aspect ratio.</p> + <p>This method adjusts for the correct picture aspect ratio. +For example, if the encoded frame is 720 ? 420 and the picture aspect ratio is 4:3, the method will return a size equal to 640 ? 480 pixels.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the width in pixels.</p> </dd> + + + <dd> <p>Receives the height in pixels.</p> </dd> + + + + + <p>Gets the picture aspect ratio of the video stream.</p> + <p>The Media Engine automatically converts the pixel aspect ratio to 1:1 (square pixels).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the x component of the aspect ratio.</p> </dd> + + + <dd> <p>Receives the y component of the aspect ratio.</p> </dd> + + + + + <p>Shuts down the Media Engine and releases the resources it is using. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies the current video frame to a {{DXGI}} surface or {{WIC}} bitmap.</p> + <p>In frame-server mode, call this method to blit the video frame to a {{DXGI}} or {{WIC}} surface. The application can call this method at any time after the Media Engine loads a video resource. Typically, however, the application calls <strong>{{IMFMediaEngine::OnVideoStreamTick}}</strong> first, to determine whether a new frame is available. If <strong>OnVideoStreamTick</strong> returns <strong>{{S_OK}}</strong>, the application then calls <strong>TransferVideoFrame</strong>.</p><p>The Media Engine scales and letterboxes the video to fit the destination rectangle. It fills the letterbox area with the border color.</p><p>For protected content, call the <strong>{{IMFMediaEngineProtectedContent::TransferVideoFrame}}</strong> method instead of this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface. </p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Queries the Media Engine to find out whether a new video frame is ready.</p> + <p>In frame-server mode, the application should call this method whenever a vertical blank occurs in the display device. If the method returns <strong>{{S_OK}}</strong>, call <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> to blit the frame to the render target. If the method returns <strong>{{S_FALSE}}</strong>, wait for the next vertical blank and call the method again.</p><p>Do not call this method in rendering mode or audio-only mode. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the Media Engine does not have a new frame.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>A new video frame is ready for display.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If a new frame is ready, receives the presentation time of the frame.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngine}}</strong> interface.</p> + <p>The <strong>{{IMFMediaEngine}}</strong> interface contains methods that map to the {{HTML5}} media elements. The <strong>{{IMFMediaEngineEx}}</strong> provides additional functionality that does not correspond directly to {{HTML5}}.</p> + + + + <p>Opens a media resource from a byte stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream.</p> </dd> + + + <dd> <p>The {{URL}} of the byte stream.</p> </dd> + + + + + <p>Gets a playback statistic from the Media Engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_STATISTIC}}</strong> enumeration that identifies the statistic to get.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the statistic. The data type and meaning of this value depends on the value of <em>StatisticID</em>. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Updates the source rectangle, destination rectangle, and border color for the video.</p> + <p>In rendering mode, call this method to reposition the video, update the border color, or repaint the video frame. If all of the parameters are <strong>{{NULL}}</strong>, the method repaints the most recent video frame.</p><p>In frame-server mode, this method has no effect.</p><p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. The source rectangle defines the area of the video frame that is displayed. If this parameter is <strong>{{NULL}}</strong>, the entire video frame is displayed.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. The destination rectangle defines the area of the window or DirectComposition visual where the video is drawn.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Gets the audio balance. </p> + <p>Returns the balance. The value can be any number in the following range (inclusive). </p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table><p>?</p><p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> + + + + <p>Sets the audio balance.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_BALANCECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The audio balance. The value can be any number in the following range (inclusive). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table> <p>?</p> <p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> </dd> + + + + + <p>Queries whether the Media Engine can play at a specified playback rate.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 is normal playback speed, 0.5 is half speed, and 2.0 is 2? speed. Positive values mean forward playback, and negative values mean reverse playback.</p><p>The results of this method can vary depending on the media resource that is currently loaded. Some media formats might support faster playback rates than others. Also, some formats might not support reverse play.</p> + <p>Returns <strong>{{TRUE}}</strong> if the playback rate is supported, or <strong>{{FALSE}}</strong> otherwise.</p> + + + <dd> <p>The requested playback rate.</p> </dd> + + + + + <p>Steps forward or backward one frame.</p> + <p>The frame-step direction is independent of the current playback direction.</p><p>This method completes asynchronously. When the operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED}}</strong> event and enters the paused state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to step forward or <strong>{{FALSE}}</strong> to step backward.</p> </dd> + + + + + <p>Gets various flags that describe the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}} enumeration</strong>.</p> </dd> + + + + + <p>Gets a presentation attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The attribute to query. For a list of presentation attributes, see Presentation Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Gets the number of streams in the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Gets a stream-level attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>The attribute to query. Possible values are listed in the following topics: +</p> <ul> <li> Stream Descriptor Attributes </li> <li> Media Type Attributes </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. Call <strong>PropVariantClear</strong> to free the memory allocated by the method. </p> </dd> + + + + + <p>Queries whether a stream is selected to play.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Selects or deselects a stream for playback. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to select or deselect the stream.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Applies the stream selections from previous calls to <strong>SetStreamSelection</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains protected content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the media resource contains protected content, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Inserts a video effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of video effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the video effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the video effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Inserts an audio effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of audio effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the audio effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the audio effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Removes all audio and video effects.</p> + <p> Call this method to remove all of the effects that were added with the <strong>InsertAudioEffect</strong> and <strong>InsertVideoEffect</strong> methods. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies a presentation time when the Media Engine will send a marker event.</p> + <p>When playback reaches the time specified by <em>timeToFire</em>, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER}}</strong> event through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. Calling this method cancels any previous marker that is still pending. </p><p>If the application seeks past the marker point, the Media Engine cancels the marker and does not send the event.</p><p>During forward playback, set <em>timeToFire</em> to a value greater than the current playback position. During reverse playback, set <em>timeToFire</em> to a value less than the playback position.</p><p>To cancel a marker, call <strong>{{IMFMediaEngineEx::CancelTimelineMarkerTimer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The presentation time for the marker event, in seconds.</p> </dd> + + + + + <p>Gets the time of the next timeline marker, if any.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the marker time, in seconds. If no marker is set, this parameter receives the value <strong>NaN</strong>.</p> </dd> + + + + + <p>Cancels the next pending timeline marker.</p> + <p>Call this method to cancel the <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains stereoscopic 3D video.</p> + <p>Returns <strong>{{TRUE}}</strong> if the media resource contains 3D video, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>For stereoscopic 3D video, gets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, sets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration that specifies the layout. The two views can be arranged side-by-side, or top-to-bottom.</p> </dd> + + + + + <p>For stereoscopic 3D video, queries how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, specifies how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration that specifies the 3D video rendering mode.</p> </dd> + + + + + <p>Enables or disables windowless swap-chain mode.</p> + <p>In windowless swap-chain mode, the Media Engine creates a windowless swap chain and presents video frames to the swap chain. To render the video, call <strong>{{IMFMediaEngineEx::GetVideoSwapchainHandle}}</strong> to get a handle to the swap chain, and then associate the handle with a Microsoft DirectComposition visual. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, windowless swap-chain mode is enabled. </p> </dd> + + + + + <p>Gets a handle to the windowless swap chain.</p> + <p>To enable windowless swap-chain mode, call <strong>{{IMFMediaEngineEx::EnableWindowlessSwapchainMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the swap chain.</p> </dd> + + + + + <p>Enables or disables mirroring of the video.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video is mirrored horizontally. Otherwise, the video is displayed normally.</p> </dd> + + + + + <p>Gets the audio stream category used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio stream category for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio device endpoint role used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio device endpoint used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks to a new playback position using the specified <strong>{{MF_MEDIA_ENGINE_SEEK_MODE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables or disables the time update timer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the update timer is enabled. Otherwise, the timer is disabled.</p> </dd> + + + + + <p>Enables an application to load media resources in the Media Engine.</p> + <p>To use this interface, set the {{MF_MEDIA_ENGINE_EXTENSION}} attribute when you call the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Queries whether the object can load a specified type of media resource.</p> + <p>Implement this method if your Media Engine extension supports one or more {{MIME}} types.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine is set to audio-only mode. Otherwise, the Media Engine is set to audio-video mode.</p> </dd> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration.</p> </dd> + + + + + <p>Begins an asynchronous request to create either a byte stream or a media source.</p> + <p>This method requests the object to create either a byte stream or a media source, depending on the value of the <em>type</em> parameter:</p><ul> <li>If <em>type</em> is <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, the method creates a byte stream for the {{URL}} that is specified in <em>bstrURL</em>. In this case, the <em>pByteStream</em> parameter is <strong>{{NULL}}</strong>. </li> <li>If <em>type</em> is <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, the method creates a media source, using the byte stream that is specified in the <em>pByteStream</em> parameter. Note that <em>pByteStream</em> can also be <strong>{{NULL}}</strong> in this case.</li> </ul><p>The method is performed asynchronously. The Media Engine calls the <strong>{{IMFMediaEngineExtension::EndCreateObject}}</strong> method to complete the operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface.</p> <p>If the <em>type</em> parameter equals <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, this parameter is <strong>{{NULL}}</strong>. </p> <p>If <em>type</em> equals <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, this parameter either contains a reference to a byte stream or is <strong>{{NULL}}</strong>. See Remarks for more information.</p> </dd> + + + <dd> <p>A member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration that specifies which type of object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Create a byte stream. The byte stream must support the <strong>{{IMFByteStream}}</strong> interface.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_MEDIASOURCE}}</strong></dt> </dl> </td><td> <p>Create a media source. The media source must support the <strong>{{IMFMediaSource}}</strong> interface.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface. This reference can be used to cancel the asynchronous operation, by passing the reference to the <strong>{{IMFMediaEngineExtension::CancelObjectCreation}}</strong> method. </p> <p>The caller must release the interface. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is used to signal the completion of the asynchronous operation.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object impemented by the caller. You can use this object to hold state information for the callback. The object is returned to the caller when the callback is invoked. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Cancels the current request to create an object.</p> + <p>This method attempts to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might complete before the operation can be canceled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The reference that was returned in the the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method. </p> </dd> + + + + + <p>Completes an asynchronous request to create a byte stream or media source.</p> + <p>The Media Engine calls this method to complete the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the byte stream or media source. The caller must release the interface</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Enables the Media Engine to access protected content while in frame-server mode.</p> + <p>In frame-server mode, this method enables the Media Engine to share protected content with the Direct3D?11 device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the Direct3D?11 device content. The Media Engine queries this reference for the <strong>{{ID3D11VideoContext}}</strong> interface. </p> </dd> + + + + + <p>Gets the content protections that must be applied in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Specifies the window that should receive output link protections.</p> + <p>In frame-server mode, call this method to specify the destination window for protected video content. The Media Engine uses this window to set link protections, using the Output Protection Manager ({{OPM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window.</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Sets the content protection manager ({{CPM}}).</p> + <p>The Media Engine uses the {{CPM}} to handle events related to protected content, such as license acquisition.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFContentProtectionManager}}</strong> interface, implemented by the caller.</p> </dd> + + + + + <p>Sets the application's certificate.</p> + <p>Call this method to access protected video content in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a buffer that contains the certificate in X.509 format, followed by the application identifier signed with a {{SHA}}-256 signature using the private key from the certificate.</p> </dd> + + + <dd> <p>The size of the <em>pbBlob</em> buffer, in bytes.</p> </dd> + + + + + <p><em>Media sources</em> are objects that generate media data in the Media Foundation pipeline. This section describes the media source {{APIs}} in detail. Read this section if you are implementing a custom media source, or using a media source outside of the Media Foundation pipeline.</p><p>If your application uses the control layer, it needs to use only a limited subset of the media source {{APIs}}. For information, see the topic Using Media Sources with the Media Session.</p><p> </p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables playback of web audio.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating if the connecting to Web audio should delay the page's load event.</p> + <p>True if connection to Web audio should delay the page's load event; otherwise, false.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Connects web audio to Media Engine using the specified sample rate.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Disconnects web audio from the Media Engine </p> + <p>Returns {{S_OK}} on successful completion.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Used to indicate that the media source has opened.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has ended.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has closed.</p> + <p>This method does not return a value.</p> + + + + <p>Enables <strong>{{IMFSourceBufferList}}</strong> object to notify its clients of important state changes.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been added.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been removed.</p> + <p>This method does not return a value.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFSourceBuffer}}</strong>.</p> + + + + <p>Used to indicate that the source buffer has started updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has been aborted.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that an error has occurred with the source buffer.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + + + <p>Used to indicate that the source buffer is updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has finished updating.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a buffer which contains media data for a <strong>{{IMFMediaSourceExtension}}</strong>. </p> + <p><strong>{{IMFSourceBuffer}}</strong> is used in conjunction with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Gets a value that indicates if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong> is in process.</p> + <p><strong>true</strong> if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong>; otherwise, <strong>false</strong>.</p> + + + + <p>Gets the buffered time range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffered time range.</p> </dd> + + + + + <p>Gets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>The timestamp offset.</p> + + + + <p>Sets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the timestamp for the start of the append window.</p> + <p>The timestamp for the start of the append window.</p> + + + + <p>Sets the timestamp for the start of the append window.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The timestamp for the start of the append window.</p> </dd> + + + + + <p>Gets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + + <p>Sets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + <dd></dd> + + + + + <p>Appends the specified media segment to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Appends the media segment from the specified byte stream to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Aborts the processing of the current media segment. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the media segments defined by the specified time range from the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Represents a collection of <strong>{{IMFSourceBuffer}}</strong> objects.</p> + + + + <p>Gets the number of <strong>{{IMFSourceBuffer}}</strong> objects in the list.</p> + <p>The number of source buffers in the list.</p> + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the list.</p> + <p>The source buffer.</p> + + + + <p>Provides functionality for the Media Source Extension ({{MSE}}).</p> + <p> Media Source Extensions ({{MSE}}) is a World Wide Web Consortium ({{W3C}}) standard that extends the {{HTML5}} media elements to enable dynamically changing the media stream without the use of plug-ins. The <strong>{{IMFMediaSourceExtension}}</strong> interface and the related Microsoft Win32 {{API}} implement {{MSE}} and are expected to only be called by web browsers implementing {{MSE}}. </p><p>The {{MSE}} media source keeps track of the ready state of the of the source as well as a list of <strong>{{IMFSourceBuffer}}</strong> objects which provide media data for the source.</p> + + + + <p>Gets the collection of source buffers associated with this media source.</p> + <p>The collection of source buffers.</p> + + + + <p>Gets the source buffers that are actively supplying media data to the media source.</p> + <p>The list of active source buffers.</p> + + + + <p>Gets the ready state of the media source.</p> + <p>The ready state of the media source.</p> + + + + <p>Gets the duration of the media source in 100-nanosecond units.</p> + <p>The duration of the media source in 100-nanosecond units. </p> + + + + <p>Sets the duration of the media source in 100-nanosecond units.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The duration of the media source in 100-nanosecond units.</p> </dd> + + + + + <p>Adds a <strong>{{IMFSourceBuffer}}</strong> to the collection of buffers associated with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the specified source buffer from the collection of source buffers managed by the <strong>{{IMFMediaSourceExtension}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Indicate that the end of the media stream has been reached. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Used to pass error information.</p> </dd> + + + + + <p>Gets a value that indicates if the specified {{MIME}} type is supported by the media source.</p> + <p><strong>true</strong> if the media type is supported; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The media type to check support for.</p> </dd> + + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the collection of buffers.</p> + <p>The source buffer.</p> + + + + <p>Implemented by the media engine to add encrypted media extensions methods.</p> + + + + <p>Gets the media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> </dd> + + + + + <p>Sets the media keys object to use with the media engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to provide additional capabilities.</p> + + + + <p>Provides an enhanced version of <strong>{{IMFMediaEngineSrcElements::AddElement}}</strong> to add the key system intended to be used with content to an element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the key system for the given source element index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source element index.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element.</p> </dd> + + + + + <p>Represents a callback to the media engine to notify key request data.</p> + + + + <p>Notifies the application that a key or keys are needed along with any initialization data.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The initialization data.</p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + + + <p>Represents a media keys used for decrypting media data using a Digital Rights Management ({{DRM}}) key system. </p> + + + + <p>Creates a media key session object using the specified initialization data and custom data. +. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type of the media container used for the content.</p> </dd> + + + <dd> <p>The initialization data for the key system. </p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + <dd> <p>Custom data sent to the key system.</p> </dd> + + + <dd> <p>The count in bytes of <em>cbCustomData</em>.</p> </dd> + + + <dd> <p>notify</p> </dd> + + + <dd> <p>The media key session.</p> </dd> + + + + + <p>Gets the key system string the <strong>{{IMFMediaKeys}}</strong> object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p></p> + <p><strong>Shutdown</strong> should be called by the application before final release. The Content Decryption Module ({{CDM}}) reference and any other resources is released at this point. However, related sessions are not freed or closed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the suspend notify interface of the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The suspend notify interface of the Content Decryption Module ({{CDM}}).</p> </dd> + + + + + <p>Represents a session with the Digital Rights Management ({{DRM}}) key system.</p> + + + + <p>Gets the error state associated with the media key session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code.</p> </dd> + + + <dd> <p>Platform specific error information.</p> </dd> + + + + + <p>Gets the name of the key system name the media keys object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the key system.</p> </dd> + + + + + <p>Gets a unique session id created for this session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key session id.</p> </dd> + + + + + <p>Passes in a key value with any associated data required by the Content Decryption Module for the given key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd></dd> + + + <dd> <p>The count in bytes of <em>key</em>.</p> </dd> + + + + + <p>Closes the media key session and must be called before the key session is released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides a mechanism for notifying the app about information regarding the media key session. </p> + + + + <p>Passes information to the application so it can initiate a key acquisition.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The {{URL}} to send the message to.</p> </dd> + + + <dd> <p>The message to send to the application.</p> </dd> + + + <dd> <p>The length in bytes of <em>message</em>.</p> </dd> + + + + + <p>Notifies the application that the key has been added. </p> + <p><strong>KeyAdded</strong> can also be called if the keys requested for the session have already been acquired.</p> + <p>This method does not return a value.</p> + + + + <p>Notifies the application that an error occurred while processing the key.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Used to enable the client to notify the Content Decryption Module ({{CDM}}) when global resources should be brought into a consistent state prior to suspending. +</p> + + + + <p>Indicates that the suspend process is starting and resources should be brought into a consistent state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The actual suspend is about to occur and no more calls will be made into the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Provides methods for getting information about the Output Protection Manager ({{OPM}}).</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the Media Engine.</p><p>The <strong>{{MF_MEDIA_ENGINE_EVENT_OPMINFO}}</strong> <strong>{{IMFMediaEvent}}</strong> event is raised when there is a change in the {{OPM}} status.</p> + + + + <p>Gets status information about the Output Protection Manager ({{OPM}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{INVALIDARG}}</strong></dt> </dl> </td><td> <p>If any of the parameters are <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a time range object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media error object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaError}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p> Checks if <em>keySystem</em> is a supported key system and creates the related Content Decryption Module ({{CDM}}). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys system.</p> </dd> + + + <dd> <p>Points to a location to store Content Decryption Module ({{CDM}}) data which might be locked by multiple process and so might be incompatible with store app suspension.</p> </dd> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of the <strong>{{IMFMediaKeys}}</strong> object.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key system.</p> </dd> + + + <dd> <p>Points to the default file location for the store Content Decryption Module ({{CDM}}) data.</p> </dd> + + + <dd> <p>Points to a the inprivate location for the store Content Decryption Module ({{CDM}}) data. Specifying this path allows the {{CDM}} to comply with the application?s privacy policy by putting personal information in the file location indicated by this path.</p> </dd> + + + <dd> <p>Receives the media keys.</p> </dd> + + + + + + + + + + + <p>Enables the media source to be transferred between the media engine and the sharing engine for Play To.</p> + + + + <p>Specifies wether or not the source should be transferred.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>true</strong> if the source should be transferred; otherwise, <strong>false</strong>.</p> </dd> + + + + + <p>Detaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the byte stream.</p> </dd> + + + <dd> <p>Receives the media source.</p> </dd> + + + <dd> <p>Receives the media source extension.</p> </dd> + + + + + <p>Attaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the byte stream. </p> </dd> + + + <dd> <p>Specifies the media source.</p> </dd> + + + <dd> <p>Specifies the media source extension.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A timed-text object represents a component of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Registers a timed-text notify object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTimedTextNotify}}</strong> interface for the timed-text notify object to register.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Selects or deselects a track of text in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to select. </p> </dd> + + + <dd> <p>Specifies whether to select or deselect a track of text. Specify <strong>{{TRUE}}</strong> to select the track or <strong>{{FALSE}}</strong> to deselect the track. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface for the data source to add.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source from the specified {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the timed-text data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Removes the timed-text track with the specified identifier.</p> + <p>Get the identifier for a track by calling <strong>GetId</strong>. </p><p>When a track is removed, all buffered data from the track is also removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to remove.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Retrieves a list of all timed-text tracks registered with the <strong>{{IMFTimedText}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of active timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of active timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of all the timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of all of the timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of the timed-metadata tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of the timed-metadata tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables inband mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether inband mode is enabled.</p> + <p>Returns whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Interface that defines callbacks for Microsoft Media Foundation Timed Text notifications.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is added</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was added. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is removed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was removed. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a track is selected or deselected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was selected or deselected. </p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the track was selected. <strong>{{FALSE}}</strong> if the track was deselected. </p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an error occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An {{MF_TIMED_TEXT_ERROR_CODE}} representing the last error.</p> </dd> + + + <dd> <p>The extended error code for the last error.</p> </dd> + + + <dd> <p>The identifier of the track on which the error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a cue event occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value specifying the type of event that has occured.</p> </dd> + + + <dd> <p>The current time when the cue event occurred.</p> </dd> + + + <dd> <p>The <strong>{{IMFTimedTextCue}}</strong> object representing the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Resets the timed-text-notify object.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a track of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the track of timed text.</p> + <p>Returns the identifier of the track. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the label of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the label of a timed-text track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the language of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the language of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text track.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is inband.</p> + <p>Returns whether the timed-text track is inband. If <strong>{{TRUE}}</strong>, the timed-text track is inband; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the in-band metadata of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the in-band metadata of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is active.</p> + <p>Returns whether the timed-text track is active. If <strong>{{TRUE}}</strong>, the timed-text track is active; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating the error type of the latest error associated with the track.</p> + <p>A value indicating the error type of the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extended error code for the latest error associated with the track.</p> + <p>If the most recent error was associated with a track, this value will be the same <strong>{{HRESULT}}</strong> as returned by the <strong>{{IMFTimedTextNotify::Error}}</strong> method.</p> + <p>The extended error code for the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a {{GUID}} that identifies the track's underlying data format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A {{GUID}} that identifies the track's underlying data format.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a list of timed-text tracks.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the length, in tracks, of the timed-text-track list.</p> + <p>Returns the length, in tracks, of the timed-text-track list.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the index of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the identifier of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of a timed-text cue.</p> + <p>The identifier is retrieved by this method is dynamically generated by the system and is guaranteed to uniquely identify a cue within a single timed-text track. It is not guaranteed to be unique across tracks. If a cue already has an identifier that is provided in the text-track data format, this {{ID}} can be retrieved by calling <strong>GetOriginalId</strong>.</p> + <p>The identifier of a timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the cue identifier that is provided in the text-track data format, if available.</p> + <p>This method retrieves an identifier for the cue that is included in the source data, if one was specified. The system dynamically generates identifiers for cues that are guaranteed to be unique within a single time-text track. To obtain this system-generated {{ID}}, call <strong>GetId</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The cue identifier that is provided in the text-track data format.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text cue.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the start time of the cue in the track.</p> + <p>Returns the start time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the duration time of the cue in the track.</p> + <p>Returns the duration time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the timed-text cue.</p> + <p>Returns the identifier of the timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the display region of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextRegion}}</strong> interface for the timed-text region. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Specifies the supported protection schemes for encrypted samples.</p> + <p>The encryption scheme for a sample is specified using the {{MFSampleExtension_Encryption_ProtectionScheme}} attribute.</p> + + + <dd> <p>No encryption scheme.</p> </dd> + + + <dd> <p>The encryption scheme is {{AES}} counter mode ({{CTR}}).</p> </dd> + + + <dd> <p>The encryption scheme is Cipher Block Chaining ({{CBC}}).</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the style of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of lines of text in the timed-text cue.</p> + <p>Returns the number of lines of text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a line of text in the cue from the index of the line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the line of text in the cue to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextFormattedText}}</strong> interface for the line of text in the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a block of formatted timed-text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the text.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of subformats in the formatted timed-text object.</p> + <p>Returns the number of subformats. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a subformat in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the subformat in the formatted timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the first character of the subformat. </p> </dd> + + + <dd> <p>A reference to a variable that receives the length, in characters, of the subformat. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the subformat's timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text style is external.</p> + <p>Returns whether the timed-text style is external. If <strong>{{TRUE}}</strong>, the timed-text style is external; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font family of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the font family of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font size of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the font size of the timed-text style.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text style is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text always shows the background.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text always shows the background. The variable specifies <strong>{{TRUE}}</strong> if the background is always shown; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font style of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_FONT_STYLE}}</strong>-typed value that specifies the font style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text is bold.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text is bold. The variable specifies <strong>{{TRUE}}</strong> if the style is bold; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the right to left writing mode of the timed-text style is enabled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the right to left writing mode is enabled. The variable specifies <strong>{{TRUE}}</strong> if the right to left writing mode is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text alignment of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_ALIGNMENT}}</strong>-typed value that specifies the text alignment.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets how text is decorated for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{MF_TIMED_TEXT_DECORATION}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies how text is decorated.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text outline for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + <dd> <p>A reference to a variable that receives the thickness.</p> </dd> + + + <dd> <p>A reference to a variable that receives the blur radius.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the display region of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the position of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the X-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives the Y-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extent of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the width of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the writing mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_WRITING_MODE}}</strong>-typed value that specifies the writing mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the display alignment of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_DISPLAY_ALIGNMENT}}</strong>-typed value that specifies the display alignment of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the height of each line of text in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the height of each line of text in the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether a clip of text overflowed the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether a clip of text overflowed the region. The variable specifies <strong>{{TRUE}}</strong> if the clip overflowed; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the padding that surrounds the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the padding before the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the padding after the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the word wrap feature is enabled in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the word wrap feature is enabled in the region. The variable specifies <strong>{{TRUE}}</strong> if word wrap is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the Z-index (depth) of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the Z-index (depth) of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the scroll mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_SCROLL_MODE}}</strong>-typed value that specifies the scroll mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the data content of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the data content of the timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the length in bytes of the data content.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Specifies a type of capture device.</p> + + + <dd> <p>An audio capture device, such as a microphone.</p> </dd> + + + <dd> <p>A video capture device, such as a webcam.</p> </dd> + + + + + <p>Specifies a type of capture sink.</p> + + + <dd> <p>A recording sink, for capturing audio and video to a file.</p> </dd> + + + <dd> <p>A preview sink, for previewing live audio or video.</p> </dd> + + + <dd> <p>A photo sink, for capturing still images.</p> </dd> + + + + + + + + <p>Defines the values for the source stream category.</p> + + + <dd> <p>Specifies a video preview stream.</p> </dd> + + + <dd> <p>Specifies a video capture stream.</p> </dd> + + + <dd> <p>Specifies an independent photo stream.</p> </dd> + + + <dd> <p>Specifies a dependent photo stream.</p> </dd> + + + <dd> <p>Specifies an audio stream.</p> </dd> + + + <dd> <p>Specifies an unsupported stream.</p> </dd> + + + + + <p>Callback interface for receiving events from the capture engine.</p> + <p>To set the callback interface on the capture engine, call the <strong>{{IMFCaptureEngine::Initialize}}</strong> method.</p> + + + + <p>Called by the capture engine to notify the application of a capture event.</p> + <p>To get the type of event, call <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. This method returns one of the following {{GUIDs}}.</p><table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ALL_EFFECTS_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveAllEffects}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_BLOCKED}}</strong></td><td>Video capture has been blocked by the driver.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_UNBLOCKED}}</strong></td><td>Video capture has been restored by the driver after having been blocked.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_ADDED}}</strong></td><td>The <strong>{{IMFCaptureSource::AddEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ERROR}}</strong></td><td>An error occurred during capture.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong></td><td>The <strong>{{IMFCaptureEngine::Initialize}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong></td><td>The <strong>{{IMFCaptureEngine::TakePhoto}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SINK_PREPARED}}</strong></td><td>The <strong>{{IMFCaptureSink::Prepare}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SOURCE_CURRENT_DEVICE_MEDIA_TYPE_SET}}</strong></td><td>The <strong>{{IMFCaptureSource::SetCurrentDeviceMediaType}}</strong> method completed.</td></tr> </table><p>?</p><p>This method may be called from a worker thread. The implementation should be thread-safe.</p><p>To get the status code for the event, call <strong>{{IMFMediaEvent::GetStatus}}</strong>. If the status code is an error code, it indicates that the requested operation failed.</p><p>In addition, the event object specified by <em>pEvent</em> might contain any of the following attributes.</p><ul> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> </ul><p>To get event attributes, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaEvent}}</strong> inherits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface. Use this interface to get information about the event, as described in Remarks.</p> </dd> + + + + + <p>Callback interface to receive data from the capture engine.</p> + <p>To set the callback interface, call one of the following methods.</p><ul> <li> <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong> </li> </ul> + + + + <p>Called when the capture sink receives a sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface. Use this interface to get the time stamp, duration, and stream data. For more information, see Media Samples. This parameter can be <strong>{{NULL}}</strong>, so make sure to check for a <strong>{{NULL}}</strong> value before you dereference the reference.</p> </dd> + + + + + <p>Controls a capture sink, which is an object that receives one or more streams from a capture device.</p> + <p>The capture engine creates the following capture sinks.</p><ul> <li>Photo sink. Encodes still image files.</li> <li>Preview sink. Previews live audio or video.</li> <li>Recording sink. Creates compressed audio/video files or compressed audio/video streams.</li> </ul><p>To get a reference to a capture sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. Each capture sink implements an interface that derives from <strong>{{IMFCaptureSink}}</strong>. Call <strong>QueryInterface</strong> to get a reference to the derived interface.</p><table> <tr><th>Sink</th><th>Interface</th></tr> <tr><td>Photo sink</td><td> <strong>{{IMFCapturePhotoSink}}</strong> </td></tr> <tr><td>Preview sink</td><td> <strong>{{IMFCapturePreviewSink}}</strong> </td></tr> <tr><td>Recording sink</td><td> <strong>{{IMFCaptureRecordSink}}</strong> </td></tr> </table><p>?</p><p>Applications cannot directly create the capture sinks.</p><p>If an image stream native media type is set to {{JPEG}}, the photo sink should be configured with a format identical to native source format. {{JPEG}} native type is passthrough only.</p><p>If an image stream native type is set to {{JPEG}}, to add an effect, change the native type on the image stream to an uncompressed video media type (such as {{NV12}} or {{RGB32}}) and then add the effect.</p><p>If the native type is H.264 for the record stream, the record sink should be configured with the same media type. H.264 native type is passthrough only and cannot be decoded.</p><p>Record streams that expose H.264 do not expose any other type. H.264 record streams cannot be used in conjunction with effects. To add effects, instead connect the preview stream to the recordsink using <strong>AddStream</strong>.</p> + + + + <p>Gets the output format for a stream on this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSinkStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to query. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the reference.</p> </dd> + + + + + <p>Queries the underlying Sink Writer object for an interface.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + + <p>Connects a stream from the capture source to this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The format specified in <em>pMediaType</em> is not valid for this capture sink.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid, or the specified source stream was already connected to this sink.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The source stream to connect. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An <strong>{{IMFMediaType}}</strong> reference that specifies the desired format of the output stream. The details of the format will depend on the capture sink.</p> <ul> <li>Photo sink: A still image format compatible with Windows Imaging Component ({{WIC}}).</li> <li>Preview sink: An uncompressed audio or video format.</li> <li>Record sink: The audio or video format that will be written to the output file.</li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. For compressed streams, you can use this parameter to configure the encoder. This parameter can also be <strong>{{NULL}}</strong>. For the preview sink, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the index of the new stream on the capture sink. Note that this index will not necessarily match the value of <em>dwSourceStreamIndex</em>. </p> </dd> + + + + + <p>Prepares the capture sink by loading any required pipeline components, such as encoders, video processors, and media sinks.</p> + <p>Calling this method is optional. This method gives the application an opportunity to configure the pipeline components before they are used. The method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_SINK_PREPARED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. After this event is received, call <strong>{{IMFCaptureSink::GetService}}</strong> to configure individual components.</p><p>Before calling this method, configure the capture sink by adding at least one stream. To add a stream, call <strong>{{IMFCaptureSink::AddStream}}</strong>.</p><p>The <strong>Prepare</strong> method fails if the capture sink is currently in use. For example, calling <strong>Prepare</strong> on the preview sink fails if the capture engine is currently previewing.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + + <p>Removes all streams from the capture sink.</p> + <p>You can use this method to reconfigure the sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Controls the recording sink. The recording sink creates compressed audio/video files or compressed audio/video streams.</p> + <p>The recording sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported. (However, if a callback is used, you can provide a separate callback for each stream.)</p><p>If the destination is a byte stream or an output file, the application specifies a container type, such as {{MP4}} or {{ASF}}. The capture engine then multiplexes the audio and video to produce the format defined by the container type. If the destination is a callback interface, however, the capture engine does not multiplex or otherwise interleave the samples. The callback option gives you the most control over the recorded output, but requires more work by the application.</p><p>To start the recording, call <strong>{{IMFCaptureEngine::StartRecord}}</strong>.</p> + + + + <p>Specifies a byte stream that will receive the data for the recording.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the file container type. Possible values are documented in the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </dd> + + + + + <p>Specifies the name of the output file for the recording.</p> + <p>The capture engine uses the file name extension to select the container type for the output file. For example, if the file name extension is ."mp4", the capture engine creates an {{MP4}} file.</p><p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the recording data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Sets a custom media sink for recording.</p> + <p>This method overrides the default selection of the media sink for recording.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Gets the rotation that is currently being applied to the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Controls the preview sink. The preview sink enables the application to preview audio and video from the camera.</p> + <p>To start preview, call <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + + + + <p>Specifies a window for preview.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window. The preview sink draws the video frames inside this window.</p> </dd> + + + + + <p>Specifies a Microsoft DirectComposition visual for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a DirectComposition visual that implements the <strong>{{IDCompositionVisual}}</strong> interface.</p> </dd> + + + + + <p>Updates the video frame. Call this method when the preview window receives a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets a callback to receive the preview data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetRenderHandle}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled. If <strong>{{FALSE}}</strong>, mirror is disabled.</p> </dd> + + + + + <p>Gets the rotation of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Sets a custom media sink for preview.</p> + <p>This method overrides the default selection of the media sink for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Controls the photo sink. The photo sink captures still images from the video stream.</p> + <p>The photo sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported.</p><p>To capture an image, call <strong>{{IMFCaptureEngine::TakePhoto}}</strong>.</p> + + + + <p>Specifies the name of the output file for the still image.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the still-image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Specifies a byte stream that will receive the still image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + + + <p>Controls the capture source object. The capture source manages the audio and video capture devices.</p> + <p>To get a reference to the capture source, call <strong>{{IMFCaptureEngine::GetSource}}</strong>.</p> + + + + <p>Gets the current capture device's <strong>{{IMFMediaSource}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the current capture device's <strong>{{IMFActivate}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to the underlying Source Reader object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture source was not initialized. Possibly there is no capture device on the system.</p> </td></tr> </table><p>?</p> + + + + <p>Adds an effect to a capture stream.</p> + <p>The effect must be implemented as a Media Foundation Transform ({{MFT}}). The <em>pUnknown</em> parameter can point to an instance of the {{MFT}}, or to an activation object for the {{MFT}}. For more information, see Activation Objects.</p><p>The effect is applied to the stream before the data reaches the capture sinks. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>No compatible media type could be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following: </p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes an effect from a capture stream.</p> + <p>This method removes an effect that was previously added using the <strong>{{IMFCaptureSource::AddEffect}}</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. Possibly the specified effect could not be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the effect object. </p> </dd> + + + + + <p>Removes all effects from a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a format that is supported by one of the capture streams.</p> + <p>To enumerate all of the available formats on a stream, call this method in a loop while incrementing <em>dwMediaTypeIndex</em>, until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>.</p><p>Some cameras might support a range of frame rates. The minimum and maximum frame rates are stored in the {{MF_MT_FRAME_RATE_RANGE_MIN}} and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes on the media type.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Sets the output format for a capture stream.</p> + <p>This method sets the native output type on the capture device. The device must support the specified format. To get the list of available formats, call <strong>{{IMFCaptureSource::GetAvailableDeviceMediaType}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface.</p> </dd> + + + + + <p>Gets the current media type for a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the number of device streams.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of device streams.</p> </dd> + + + + + <p>Gets the stream category for the specified source stream index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the source stream.</p> </dd> + + + <dd> <p>Receives the {{MF_CAPTURE_ENGINE_STREAM_CATEGORY}} of the specified source stream.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The device stream does not have mirroring capability.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The source is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled; if <strong>{{FALSE}}</strong>, mirroring is disabled.</p> </dd> + + + + + <p>Gets the actual device stream index translated from a friendly stream name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The friendly name. Can be one of the following:</p> <ul> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_RECORD}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_PREVIEW}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_INDEPENDENT_PHOTO_STREAM}}</li> </ul> </dd> + + + <dd> <p>Receives the value of the stream index that corresponds to the friendly name.</p> </dd> + + + + + <p>Controls one or more capture devices. The capture engine implements this interface. To get a reference to this interface, call either <strong>{{MFCreateCaptureEngine}}</strong> or <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + <p><strong>{{IMFCaptureEngine}}</strong> only supports one pass {{CBR}} encoding.</p> + + + + <p>Initializes the capture engine.</p> + <p>You must call this method once before using the capture engine. Calling the method a second time returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The <strong>Initialize</strong> method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CAPTURE_DEVICES_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No capture devices are available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnEventCallback}}</strong> interface. The caller must implement this interface. The capture engine uses this interface to send asynchronous events to the caller.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. </p> <p>You can use this parameter to configure the capture engine. Call <strong>{{MFCreateAttributes}}</strong> to create an attribute store, and then set any of the following attributes.</p> <ul> <li> {{MF_CAPTURE_ENGINE_D3D_MANAGER}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_DXVA}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_HARDWARE_TRANSFORMS}} </li> <li> {{MF_CAPTURE_ENGINE_ENCODER_MFT_FIELDOFUSE_UNLOCK_Attribute}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> <li> {{MF_CAPTURE_ENGINE_MEDIASOURCE_CONFIG}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} </li> <li> {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} </li> </ul> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies an audio-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use an audio device, and the <em>pAudioSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pAudioSource</em> is <strong>{{NULL}}</strong>, the capture engine selects the microphone that is built into the video camera specified by <em>pVideoSource</em>. If the video camera does not have a microphone, the capture engine enumerates the audio-capture devices on the system and selects the first one.</p> <p>To override the default audio device, set <em>pAudioSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Audio/Video Capture in Media Foundation.</p> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies a video-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use a video device, and the <em>pVideoSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pVideoSource</em> is <strong>{{NULL}}</strong>, the capture engine enumerates the video-capture devices on the system and selects the first one.</p> <p>To override the default video device, set <em>pVideoSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Enumerating Video Capture Devices.</p> </dd> + + + + + <p>Starts preview.</p> + <p>Before calling this method, configure the preview sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the preview sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>After the preview sink is configured, you can stop and start preview by calling <strong>{{IMFCaptureEngine::StopPreview}}</strong> and <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The preview sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops preview.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture engine is not currently previewing.</p> </td></tr> </table><p>?</p> + + + + <p>Starts recording audio and/or video to a file.</p> + <p>Before calling this method, configure the recording sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the recording sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>To stop recording, call <strong>{{IMFCaptureEngine::StopRecord}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The recording sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops recording.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean value that specifies whether to finalize the output file. To create a valid output file, specify <strong>{{TRUE}}</strong>. Specify <strong>{{FALSE}}</strong> only if you want to interrupt the recording and discard the output file. If the value is <strong>{{FALSE}}</strong>, the operation completes more quickly, but the file will not be playable. </p> </dd> + + + <dd> <p>A Boolean value that specifies if the unprocessed samples waiting to be encoded should be flushed.</p> </dd> + + + + + <p>Captures a still image from the video stream.</p> + <p>Before calling this method, configure the photo sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the photo sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to one of the capture sink objects. You can use the capture sinks to configure preview, recording, or still-image capture.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{MF_CAPTURE_ENGINE_SINK_TYPE}}</strong> value that specifies the capture sink to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a reference to the capture source object. Use the capture source to configure the capture devices.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the capture engine.</p> + <p>To get a reference to this interface, call the CoCreateInstance function and specify the {{CLSID}} equal to <strong>{{CLSID_MFCaptureEngineClassFactory}}</strong>. </p><p>Calling the <strong>{{MFCreateCaptureEngine}}</strong> function is equivalent to calling <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + + + + <p>Creates an instance of the capture engine.</p> + <p>Before calling this method, call the <strong>{{MFStartup}}</strong> function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create. Currently, this parameter must equal <strong>{{CLSID_MFCaptureEngine}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface. The capture engine supports the <strong>{{IMFCaptureEngine}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Extensions for the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> callback interface that is used to receive data from the capture engine.</p> + + + + <p>Called by the capture sink when the format of the sample is changed.</p> + <p>The return value is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new media type.</p> </dd> + + + + + <p>Extends the <strong>{{IMFCaptureSink}}</strong> interface to provide functionality for dynamically setting the output media type of the record sink or preview sink.</p> + + + + <p>Dynamically sets the output media type of the record sink or preview sink.</p> + <p>This is an asynchronous call. Listen to the {{MF_CAPTURE_ENGINE_OUTPUT_MEDIA_TYPE_SET}} event +to be notified when the output media type has been set.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_MEDIATYPE}}</strong></dt> </dl> </td><td> <p>The sink does not support the media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream index to change the output media type on.</p> </dd> + + + <dd> <p>The new output media type.</p> </dd> + + + <dd> <p>The new encoder attributes. This can be <strong>null</strong>.</p> </dd> + + + + + <p>Contains the header information that is part of the raw input data. </p> + <p>To get more information on the device, use <strong>hDevice</strong> in a call to <strong>GetRawInputDeviceInfo</strong>.</p> + + + <dd> <p>The type of raw input. It can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Raw input comes from some device that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Raw input comes from the keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Raw input comes from the mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The size, in bytes, of the entire input packet of data. This includes <strong>{{RAWINPUT}}</strong> plus possible extra input reports in the <strong>{{RAWHID}}</strong> variable length array. </p> </dd> + + + <dd> <p>A handle to the device generating the raw input data. </p> </dd> + + + <dd> <p>The value passed in the <em>wParam</em> parameter of the <strong>{{WM_INPUT}}</strong> message. </p> </dd> + + + + + <p>Contains information about the state of the keyboard. </p> + + + <dd> <p>The scan code from the key depression. The scan code for keyboard overrun is <strong>{{KEYBOARD_OVERRUN_MAKE_CODE}}</strong>. </p> </dd> + + + <dd> <p>Flags for scan code information. It can be one or more of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RI_KEY_BREAK}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The key is up.</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E0}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The scan code has the {{E0}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E1}}</strong></dt> <dt>4</dt> </dl> </td><td> <p>The scan code has the {{E1}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_MAKE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The key is down.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Reserved; must be zero. </p> </dd> + + + <dd> <p>Windows message compatible virtual-key code. For more information, see Virtual Key Codes. </p> </dd> + + + <dd> <p>The corresponding window message, for example <strong>{{WM_KEYDOWN}}</strong>, <strong>{{WM_SYSKEYDOWN}}</strong>, and so forth. </p> </dd> + + + <dd> <p>The device-specific additional information for the event. </p> </dd> + + + + + <p>Describes the format of the raw input from a Human Interface Device ({{HID}}). </p> + <p>Each <strong>{{WM_INPUT}}</strong> can indicate several inputs, but all of the inputs come from the same {{HID}}. The size of the <strong>bRawData</strong> array is <strong>dwSizeHid</strong> * <strong>dwCount</strong>.</p> + + + <dd> <p>The size, in bytes, of each {{HID}} input in <strong>bRawData</strong>. </p> </dd> + + + <dd> <p>The number of {{HID}} inputs in <strong>bRawData</strong>.</p> </dd> + + + <dd> <p>The raw input data, as an array of bytes. </p> </dd> + + + + + + + + <p>This section describes how the system provides raw input to your application and how an application receives and processes that input. Raw input is sometimes referred to as generic input. </p> + + + + <p>Defines the raw input data coming from the specified mouse.</p> + <p>For the mouse, the Usage Page is 1 and the Usage is 2.</p> + + + <dd> <p>The identifier of the mouse device.</p> </dd> + + + <dd> <p>The number of buttons for the mouse.</p> </dd> + + + <dd> <p>The number of data points per second. This information may not be applicable for every mouse device.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the mouse has a wheel for horizontal scrolling; otherwise, <strong>{{FALSE}}</strong>. </p> <p><strong>Windows?{{XP:}}??</strong>This member is only supported starting with Windows?Vista.</p> </dd> + + + + + <p>Defines the raw input data coming from the specified keyboard. </p> + <p>For the keyboard, the Usage Page is 1 and the Usage is 6. </p> + + + <dd> <p>The type of the keyboard. </p> </dd> + + + <dd> <p>The subtype of the keyboard. </p> </dd> + + + <dd> <p>The scan code mode. </p> </dd> + + + <dd> <p>The number of function keys on the keyboard.</p> </dd> + + + <dd> <p>The number of {{LED}} indicators on the keyboard.</p> </dd> + + + <dd> <p>The total number of keys on the keyboard. </p> </dd> + + + + + <p>Defines the raw input data coming from the specified Human Interface Device ({{HID}}). </p> + + + <dd> <p>The vendor identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The product identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The version number for the {{HID}}. </p> </dd> + + + <dd> <p>The top-level collection Usage Page for the device. </p> </dd> + + + <dd> <p>The top-level collection Usage for the device. </p> </dd> + + + + + <p>Defines the raw input data coming from any device. </p> + + + <dd> <p>The size, in bytes, of the <strong>{{RID_DEVICE_INFO}}</strong> structure. </p> </dd> + + + <dd> <p>The type of raw input data. This member can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Data comes from an {{HID}} that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Data comes from a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Data comes from a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEMOUSE}}</strong>, this is the <strong>{{RID_DEVICE_INFO_MOUSE}}</strong> structure that defines the mouse. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEKEYBOARD}}</strong>, this is the <strong>{{RID_DEVICE_INFO_KEYBOARD}}</strong> structure that defines the keyboard. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEHID}}</strong>, this is the <strong>{{RID_DEVICE_INFO_HID}}</strong> structure that defines the {{HID}} device. </p> </dd> + + + + + <p>Defines information for the raw input devices. </p> + <p>If <strong>{{RIDEV_NOLEGACY}}</strong> is set for a mouse or a keyboard, the system does not generate any legacy message for that device for the application. For example, if the mouse {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_LBUTTONDOWN}}</strong> and related legacy mouse messages are not generated. Likewise, if the keyboard {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_KEYDOWN}}</strong> and related legacy keyboard messages are not generated.</p><p>If <strong>{{RIDEV_REMOVE}}</strong> is set and the <strong>hwndTarget</strong> member is not set to <strong>{{NULL}}</strong>, then parameter validation will fail.</p> + + + <dd> <p>Top level collection Usage page for the raw input device. </p> </dd> + + + <dd> <p>Top level collection Usage for the raw input device. </p> </dd> + + + <dd> <p>Mode flag that specifies how to interpret the information provided by <strong>usUsagePage</strong> and <strong>usUsage</strong>. It can be zero (the default) or one of the following values. By default, the operating system sends raw input from devices with the specified top level collection ({{TLC}}) to the registered application as long as it has the window focus. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDEV_APPKEYS}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>If set, the application command keys are handled. <strong>{{RIDEV_APPKEYS}}</strong> can be specified only if <strong>{{RIDEV_NOLEGACY}}</strong> is specified for a keyboard device.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_CAPTUREMOUSE}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the mouse button click does not activate the other window.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_DEVNOTIFY}}</strong></dt> <dt>0x00002000</dt> </dl> </td><td> <p>If set, this enables the caller to receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for device arrival and device removal.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXCLUDE}}</strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p>If set, this specifies the top level collections to exclude when reading a complete usage page. This flag only affects a {{TLC}} whose usage page is already specified with <strong>{{RIDEV_PAGEONLY}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXINPUTSINK}}</strong></dt> <dt>0x00001000</dt> </dl> </td><td> <p>If set, this enables the caller to receive input in the background only if the foreground application does not process it. In other words, if the foreground application is not registered for raw input, then the background application that is registered will receive the input.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_INPUTSINK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p>If set, this enables the caller to receive the input even when the caller is not in the foreground. Note that <strong>hwndTarget</strong> must be specified.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOHOTKEYS}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the application-defined keyboard device hotkeys are not handled. However, the system hotkeys; for example, {{ALT}}+{{TAB}} and {{CTRL}}+{{ALT}}+{{DEL}}, are still handled. By default, all keyboard hotkeys are handled. <strong>{{RIDEV_NOHOTKEYS}}</strong> can be specified even if <strong>{{RIDEV_NOLEGACY}}</strong> is not specified and <strong>hwndTarget</strong> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOLEGACY}}</strong></dt> <dt>0x00000030</dt> </dl> </td><td> <p>If set, this prevents any devices specified by <strong>usUsagePage</strong> or <strong>usUsage</strong> from generating legacy messages. This is only for the mouse and keyboard. See Remarks.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_PAGEONLY}}</strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>If set, this specifies all devices whose top level collection is from the specified <strong>usUsagePage</strong>. Note that <strong>usUsage</strong> must be zero. To exclude a particular top level collection, use <strong>{{RIDEV_EXCLUDE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_REMOVE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>If set, this removes the top level collection from the inclusion list. This tells the operating system to stop reading from a device which matches the top level collection.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A handle to the target window. If <strong>{{NULL}}</strong> it follows the keyboard focus.</p> </dd> + + + + + <p>Contains information about a raw input device.</p> + + + <dd> <p>A handle to the raw input device. </p> </dd> + + + <dd> <p>The type of device. This can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The device is an {{HID}} that is not a keyboard and not a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The device is a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The device is a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the raw input from the specified device.</p> + <p><strong>GetRawInputData</strong> gets the raw input one <strong>{{RAWINPUT}}</strong> structure at a time. In contrast, <strong>GetRawInputBuffer</strong> gets an array of <strong>{{RAWINPUT}}</strong> structures.</p> + <p>If <em>pData</em> is <strong>{{NULL}}</strong> and the function is successful, the return value is 0. If <em>pData</em> is not <strong>{{NULL}}</strong> and the function is successful, the return value is the number of bytes copied into pData.</p><p>If there is an error, the return value is (<strong>{{UINT}}</strong>)-1.</p> + + + <dd> <p>A handle to the <strong>{{RAWINPUT}}</strong> structure. This comes from the <em>lParam</em> in <strong>{{WM_INPUT}}</strong>. </p> </dd> + + + <dd> <p>The command flag. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RID_HEADER}}</strong></dt> <dt>0x10000005</dt> </dl> </td><td> <p>Get the header information from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RID_INPUT}}</strong></dt> <dt>0x10000003</dt> </dl> </td><td> <p>Get the raw data from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the data that comes from the <strong>{{RAWINPUT}}</strong> structure. This depends on the value of <em>uiCommand</em>. If <em>pData</em> is <strong>{{NULL}}</strong>, the required size of the buffer is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Retrieves information about the raw input device.</p> + <p>If successful, this function returns a non-negative number indicating the number of bytes copied to <em>pData</em>. </p><p>If <em>pData</em> is not large enough for the data, the function returns -1. If <em>pData</em> is <strong>{{NULL}}</strong>, the function returns a value of zero. In both of these cases, <em>pcbSize</em> is set to the minimum size required for the <em>pData</em> buffer.</p><p>Call <strong>GetLastError</strong> to identify any other errors.</p> + + + <dd> <p>A handle to the raw input device. This comes from the <strong>hDevice</strong> member of <strong>{{RAWINPUTHEADER}}</strong> or from <strong>GetRawInputDeviceList</strong>. </p> </dd> + + + <dd> <p>Specifies what data will be returned in <em>pData</em>. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICENAME}}</strong></dt> <dt>0x20000007</dt> </dl> </td><td> <p><em>pData</em> points to a string that contains the device name. </p> <p>For this <em>uiCommand</em> only, the value in <em>pcbSize</em> is the character count (not the byte count).</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICEINFO}}</strong></dt> <dt>0x2000000b</dt> </dl> </td><td> <p><em>pData</em> points to an <strong>{{RID_DEVICE_INFO}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_PREPARSEDDATA}}</strong></dt> <dt>0x20000005</dt> </dl> </td><td> <p><em>pData</em> points to the previously parsed data.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a buffer that contains the information specified by <em>uiCommand</em>. If <em>uiCommand</em> is <strong>{{RIDI_DEVICEINFO}}</strong>, set the <strong>cbSize</strong> member of <strong>{{RID_DEVICE_INFO}}</strong> to <code>sizeof({{RID_DEVICE_INFO}})</code> before calling <strong>GetRawInputDeviceInfo</strong>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + + + <p>Performs a buffered read of the raw input data.</p> + <p>Using <strong>GetRawInputBuffer</strong>, the raw input data is buffered in the array of <strong>{{RAWINPUT}}</strong> structures. For an unbuffered read, use the <strong>GetMessage</strong> function to read in the raw input data. </p><p>The <strong>{{NEXTRAWINPUTBLOCK}}</strong> macro allows an application to traverse an array of <strong>{{RAWINPUT}}</strong> structures.</p><strong>Note</strong>??To get the correct size of the raw input buffer, do not use *<em>pcbSize</em>, use *<em>pcbSize</em> * 8 instead. To ensure <strong>GetRawInputBuffer</strong> behaves properly on {{WOW64}}, you must align the <strong>{{RAWINPUT}}</strong> structure by 8 bytes. The following code shows how to align <strong>{{RAWINPUT}}</strong> for {{WOW64}}. <pre>[StructLayout(LayoutKind.Explicit)] +internal struct {{RAWINPUT}} +{ [FieldOffset(0)] public {{RAWINPUTHEADER}} header; [FieldOffset(16+8)] public {{RAWMOUSE}} mouse; [FieldOffset(16+8)] public {{RAWKEYBOARD}} keyboard; [FieldOffset(16+8)] public {{RAWHID}} hid; +} +</pre>? + <p>If <em>pData</em> is {{NULL}} and the function is successful, the return value is zero. If <em>pData</em> is not {{NULL}} and the function is successful, the return value is the number of <strong>{{RAWINPUT}}</strong> structures written to <em>pData</em>.</p><p>If an error occurs, the return value is (<strong>{{UINT}}</strong>)-1. Call <strong>GetLastError</strong> for the error code.</p> + + + <dd> <p>A reference to a buffer of <strong>{{RAWINPUT}}</strong> structures that contain the raw input data. If <strong>{{NULL}}</strong>, the minimum required buffer, in bytes, is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUT}}</strong> structure. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Registers the devices that supply the raw input data.</p> + <p>To receive <strong>{{WM_INPUT}}</strong> messages, an application must first register the raw input devices using <strong>RegisterRawInputDevices</strong>. By default, an application does not receive raw input.</p><p>To receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> messages, an application must specify the {{RIDEV_DEVNOTIFY}} flag for each device class that is specified by the usUsagePage and usUsage fields of the <strong>{{RAWINPUTDEVICE}}</strong> structure . By default, an application does not receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for raw input device arrival and removal.</p><p>If a <strong>{{RAWINPUTDEVICE}}</strong> structure has the {{RIDEV_REMOVE}} flag set and the hwndTarget parameter is not set to {{NULL}}, then parameter validation will fail. </p> + <p><strong>{{TRUE}}</strong> if the function succeeds; otherwise, <strong>{{FALSE}}</strong>. If the function fails, call <strong>GetLastError</strong> for more information.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures that represent the devices that supply the raw input.</p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures pointed to by <em>pRawInputDevices</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the information about the raw input devices for the current application.</p> + <p>To receive raw input from a device, an application must register it by using <strong>RegisterRawInputDevices</strong>. </p> + <p>If successful, the function returns a non-negative number that is the number of <strong>{{RAWINPUTDEVICE}}</strong> structures written to the buffer. </p><p>If the <em>pRawInputDevices</em> buffer is too small or <strong>{{NULL}}</strong>, the function sets the last error as <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>, returns -1, and sets <em>puiNumDevices</em> to the required number of devices. If the function fails for any other reason, it returns -1. For more details, call <strong>GetLastError</strong>. </p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures for the application. </p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures in *<em>pRawInputDevices</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure. </p> </dd> + + + + + <p>Enumerates the raw input devices attached to the system. </p> + <p>The devices returned from this function are the mouse, the keyboard, and other Human Interface Device ({{HID}}) devices.</p><p>To get more detailed information about the attached devices, call <strong>GetRawInputDeviceInfo</strong> using the hDevice from <strong>{{RAWINPUTDEVICELIST}}</strong>. </p> + <p>If the function is successful, the return value is the number of devices stored in the buffer pointed to by <em>pRawInputDeviceList</em>.</p><p>On any other error, the function returns (<strong>{{UINT}}</strong>) -1 and <strong>GetLastError</strong> returns the error indication.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICELIST}}</strong> structures for the devices attached to the system. If <strong>{{NULL}}</strong>, the number of devices are returned in *<em>puiNumDevices</em>. </p> </dd> + + + <dd> <p>If <em>pRawInputDeviceList</em> is <strong>{{NULL}}</strong>, the function populates this variable with the number of devices attached to the system; otherwise, this variable specifies the number of <strong>{{RAWINPUTDEVICELIST}}</strong> structures that can be contained in the buffer to which <em>pRawInputDeviceList</em> points. If this value is less than the number of devices attached to the system, the function returns the actual number of devices in this variable and fails with <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>.</p> </dd> + + + <dd> <p>The size of a <strong>{{RAWINPUTDEVICELIST}}</strong> structure, in bytes.</p> </dd> + + + + + <p>Indicates the filter type.</p> + <strong>Note</strong>??Note that the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>LowPassOnePoleFilter</strong> or the <strong>HighPassOnePoleFilter</strong>.? + + + <dd> <p>Attenuates (reduces) frequencies above the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies outside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies inside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies above the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>Defines a destination voice that is the target of a send from another voice and specifies whether a filter should be used.</p> + + + + <dd> <p>Indicates whether a filter should be used on data sent to the voice pointed to by <strong>pOutputVoice</strong>. Flags can be 0 or {{XAUDIO2_SEND_USEFILTER}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{IXAudio2Voice}}</strong> that will be the target of the send. The <strong>pOutputVoice</strong> member cannot be {{NULL}}.</p> </dd> + + + + + <p>Defines a set of voices to receive data from a single output voice.</p> + <p>If <strong>pSends</strong> is not {{NULL}} all of its elements must be non-{{NULL}}. To send output to the default mastering voice call <strong>{{IXAudio2Voice::SetOutputVoices}}</strong> with the pSendList argument set to {{NULL}}. </p><p>Setting <strong>SendCount</strong> to 0 is useful for certain effects such as volume meters or file writers that don't generate any audio output to pass on to another voice. </p><p>If needed, a voice will perform a single sample rate conversion, from the voice's input sample rate to the input sample rate of the voice's output voices. Because only one sample rate conversion will be performed, all the voice's output voices must have the same input sample rate. If the input sample rates of the voice and its output voices are the same, no sample rate conversion is performed. +</p> + + + <dd> <p>Number of voices to receive the output of the voice. An <strong>OutputCount</strong> value of 0 indicates the voice should not send output to any voices.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_SEND_DESCRIPTOR}}</strong> structures describing destination voices and the filters that should be used when sending to the voices. This array should contain <strong>SendCount</strong> elements. If <strong>SendCount</strong> is 0 <strong>pSends</strong> should be {{NULL}}. Note that <strong>pSends</strong> cannot contain the same voice more than once.</p> </dd> + + + + + <p>Contains information about an {{XAPO}} for use in an effect chain.</p> + <p>{{XAPO}} instances are passed to {{XAudio2}} as <strong>{{IUnknown}}</strong> interfaces and {{XAudio2}} uses <strong>{{IXAPO::QueryInterface}}</strong> to acquire an <strong>{{IXAPO}}</strong> interface and to detect whether the {{XAPO}} implements the <strong>{{IXAPOParameters}}</strong> interface. </p><p>For additional information on using {{XAPOs}} with {{XAudio2}} see How to: Create an Effect Chain and How to: Use an {{XAPO}} in {{XAudio2}}.</p> + + + + <p>Defines an effect chain.</p> + + + + <dd> <p>Number of effects in the effect chain for the voice.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structures containing references to {{XAPO}} instances.</p> </dd> + + + + + <p>Defines filter parameters for a source voice.</p> + <p>Setting {{XAUDIO2_FILTER_PARAMETERS}} with the following values is acoustically equivalent to the filter being fully bypassed.</p><pre>{{XAUDIO2_FILTER_PARAMETERS}} FilterParams; +FilterParams.Frequency = 1.0f; +FilterParams.OneOverQ = 1.0f; +FilterParams.Type = LowPassFilter; +</pre><p>The following formulas show the relationship between the members of {{XAUDIO2_FILTER_PARAMETERS}} and the per-voice filter.</p><pre>Yl( n ) = {{F1}} yb( n ) + yl( n - 1 ) +Yb( n ) = {{F1}} yh( n ) + yb( n - 1 ) +Yh( n ) = x( n ) - yl( n ) - OneOverQ(yb( n - 1 ) +Yn( n ) = Yl(n) + Yh(n) </pre><p>Where:</p><pre>Yl = lowpass output +Yb = bandpass output +Yh = highpass output +Yn = notch output +{{F1}} = {{XAUDIO2_FILTER_PARAMETERS}}.Frequency +OneOverQ = {{XAUDIO2_FILTER_PARAMETERS}}.OneOverQ</pre> + + + <dd> <p>The <strong>{{XAUDIO2_FILTER_TYPE}}</strong>.</p> </dd> + + + <dd> <p>Filter radian frequency calculated as (2 * sin(pi * (desired filter cutoff frequency) / sampleRate)). The frequency must be greater than or equal to 0 and less than or equal to {{XAUDIO2_MAX_FILTER_FREQUENCY}}. The maximum frequency allowable is equal to the source sound's sample rate divided by six which corresponds to the maximum filter radian frequency of 1. For example, if a sound's sample rate is 48000 and the desired cutoff frequency is the maximum allowable value for that sample rate, 8000, the value for <strong>Frequency</strong> will be 1. +If {{XAUDIO2_HELPER_FUNCTIONS}} is defined, {{XAudio2}}.h will include the <strong>{{XAudio2RadiansToCutoffFrequency}}</strong> and <strong>{{XAudio2CutoffFrequencyToRadians}}</strong> helper functions for converting between hertz and radian frequencies. Defining {{XAUDIO2_HELPER_FUNCTIONS}} will also include <strong>{{XAudio2CutoffFrequencyToOnePoleCoefficient}}</strong> for converting between hertz and a one-pole coefficient suitable for use with the LowPassOnePoleFilter and HighPassOnePoleFilter. </p> </dd> + + + <dd> <p>Reciprocal of Q factor. Controls how quickly frequencies beyond Frequency are dampened. Larger values result in quicker dampening while smaller values cause dampening to occur more gradually. Must be greater than 0 and less than or equal to {{XAUDIO2_MAX_FILTER_ONEOVERQ}}.</p> </dd> + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + <p>Used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> when submitting xWMA data.</p> + <p>When streaming an xWMA file a few packets at a time, {{XAUDIO2_END_OF_STREAM}} should be specified on the last packet. Alternatively, the application may call <strong>{{IXAudio2SourceVoice::Discontinuity}}</strong> after submitting the last packet. </p><p>In addition, when streaming an xWMA file a few packets at a time, the application should subtract <strong>pDecodedPacketCumulativeBytes</strong>[<strong>PacketCount</strong>-1] of the previous packet from all the entries of the currently submitted packet. </p><p>The members of <strong>{{XAUDIO2_BUFFER_WMA}}</strong> correspond to values contained in the 'dpds' {{RIFF}} chunk of the xWMA file being played. <strong>PacketCount</strong> will correspond to the size in {{UINT32s}} of the chunk. <strong>pDecodedPacketCumulativeBytes</strong> will correspond to a {{UINT32}} buffer containing the contents of the chunk. The contents of the buffer will need to be byte swapped when loading the buffer on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped and destroyed. </p><p>{{XAUDIO}} 2.8 in Windows 8.x does not support xWMA decoding. Use Windows Media Foundation {{APIs}} to perform the decoding from {{WMA}} to {{PCM}} instead. This functionality is available in the DirectX {{SDK}} versions of {{XAUDIO}} and in {{XAUDIO}} 2.9 in Windows?10.</p> + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Contains performance information.</p> + <p>{{CPU}} cycles are recorded using . Use to convert these values.</p> + + + <dd> <p>{{CPU}} cycles spent on audio processing since the last call to the <strong>{{IXAudio2::StartEngine}}</strong> or <strong>{{IXAudio2::GetPerformanceData}}</strong> function.</p> </dd> + + + <dd> <p>Total {{CPU}} cycles elapsed since the last call. </p> <strong>Note</strong>??This only counts cycles on the {{CPU}} on which {{XAudio2}} is running. ? </dd> + + + <dd> <p>Fewest {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Most {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Total memory currently in use.</p> </dd> + + + <dd> <p>Minimum delay that occurs between the time a sample is read from a source buffer and the time it reaches the speakers. </p> <table> <tr><th>Windows</th></tr> <tr><td>The delay reported is a variable value equal to the rough distance between the last sample submitted to the driver by {{XAudio2}} and the sample currently playing. The following factors can affect the delay: playing multichannel audio on a hardware-accelerated device; the type of audio device (WavePci, WaveCyclic, or WaveRT); and, to a lesser extent, audio hardware implementation. +</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>The delay reported is a fixed value, which is normally 1,024 samples (21.333 ms at 48 kHz). If <strong>{{XOverrideSpeakerConfig}}</strong> has been called using the <strong>{{XAUDIOSPEAKERCONFIG_LOW_LATENCY}}</strong> flag, the delay reported is 512 samples (10.667 ms at 48 kHz). +</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Total audio dropouts since the engine started.</p> </dd> + + + <dd> <p>Number of source voices currently playing. </p> </dd> + + + <dd> <p>Total number of source voices currently in existence. </p> </dd> + + + <dd> <p>Number of submix voices currently playing.</p> </dd> + + + <dd> <p>Number of resampler xAPOs currently active.</p> </dd> + + + <dd> <p>Number of matrix mix xAPOs currently active.</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>Number of source voices decoding {{XMA}} data.</td></tr> </table> <p>?</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>A voice can use more than one {{XMA}} stream.</td></tr> </table> <p>?</p> </dd> + + + + + <p>Contains the new global debug configuration for {{XAudio2}}. Used with the <strong>SetDebugConfiguration</strong> function.</p> + <p>Debugging messages can be completely turned off by initializing <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> to all zeroes.</p><strong>Note</strong>??For this version of {{XAudio2}}, only the <strong>{{XAUDIO2_LOG_ERRORS}}</strong> value is supported on <strong>TraceMask</strong> or <strong>BreakMask</strong>. All other members and values are ignored.? + + + + <p>{{IXAudio2}} is the interface for the {{XAudio2}} object that manages all audio engine states, the audio processing thread, the voice graph, and so forth. </p><p>This is the only {{XAudio2}} interface that is derived from the {{COM}} <strong>{{IUnknown}}</strong> interface. It controls the lifetime of the {{XAudio2}} object using two methods derived from <strong>{{IUnknown}}</strong>: <strong>{{IXAudio2::AddRef}}</strong> and <strong>{{IXAudio2::Release}}</strong>. No other {{XAudio2}} objects are reference-counted; their lifetimes are explicitly controlled using <em>create</em> and <em>destroy</em> calls, and are bounded by the lifetime of the {{XAudio2}} object that owns them.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} included three member functions that are not present in the Windows 8 version: <strong>GetDeviceCount</strong>, <strong>GetDeviceDetails</strong>, and <strong>Initialize</strong>. These enumeration methods are no longer provided and standard Windows Audio {{APIs}} should be used for device enumeration instead.</p> + + + + <p>Adds an <strong>{{IXAudio2EngineCallback}}</strong> reference to the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>This method can be called multiple times, allowing different components or layers of the same application to manage their own engine callback implementations separately. </p><p>It is invalid to call <strong>RegisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>RegisterForCallbacks</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + + <p>Removes an <strong>{{IXAudio2EngineCallback}}</strong> reference from the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>It is invalid to call <strong>UnregisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). </p> + <p>This method does not return a value.</p> + + + + <p>Creates and configures a source voice.</p> + <p>Source voices read audio data from the client. They process the data and send it to the {{XAudio2}} processing graph. </p><p>A source voice includes a variable-rate sample rate conversion, to convert data from the source format sample rate to the output rate required for the voice send list. If you use a {{NULL}} send list, the target sample rate will be the mastering voice's input sample rate. If you provide a single voice in pSendList, that voice's input sample rate is the target rate. If you provide multiple voices in the pSendList, all the source voice's output voices must be running at the same input sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destory a mastering voice if any source or submix voices still exist. </p><p>Source voices are always processed before any submix or mastering voices. This means that you do not need a ProcessingStage parameter to control the processing order. </p><p>When first created, source voices are in the stopped state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSourceVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSourceVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSourceVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSourceVoice</strong> is called. +</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}}-specific error codes.</p> + + + <dd> <p>If successful, returns a reference to the new <strong>{{IXAudio2SourceVoice}}</strong> object.</p> </dd> + + + <dd> <p>Pointer to a one of the structures in the table below. This structure contains the expected format for all audio buffers submitted to the source voice. +{{XAudio2}} supports {{PCM}} and {{ADPCM}} voice types. </p> <table> <tr><th>Format tag</th><th>Wave format structure</th><th>Size (in bytes)</th></tr> <tr><td>{{WAVE_FORMAT_PCM}} (0x0001) </td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>16</td></tr> <tr><td>-or-</td><td> <strong>{{WAVEFORMATEX}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_IEEE_FLOAT}} (0x0003) [32-bit]</td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_ADPCM}} (0x0002) [{{MS}}-{{ADPCM}}]</td><td> <strong>{{ADPCMWAVEFORMAT}}</strong> </td><td>50</td></tr> <tr><td>{{WAVE_FORMAT_EXTENSIBLE}} (0xFFFE)</td><td> <strong>{{WAVEFORMATEXTENSIBLE}}</strong> </td><td>40</td></tr> </table> <p>?</p> <p>{{XAudio2}} supports the following {{PCM}} formats. +</p> <ul> <li>8-bit (unsigned) integer {{PCM}} </li> <li>16-bit integer {{PCM}} (optimal format for {{XAudio2}}) </li> <li>20-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>24-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>32-bit integer {{PCM}} </li> <li>32-bit float {{PCM}} (preferred format after 16-bit integer) +</li> </ul> <p>The number of channels in a source voice must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. The sample rate of a source voice must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}.</p> <strong>Note</strong>??{{PCM}} data formats such as <strong>{{PCMWAVEFORMAT}}</strong> and <strong>{{ADPCMWAVEFORMAT}}</strong> that require more information than provided by <strong>{{WAVEFORMATEX}}</strong> have a <strong>{{WAVEFORMATEX}}</strong> structure as the first member in their format structures. When you create a source voice with one of those formats, cast the format's structure as a <strong>{{WAVEFORMATEX}}</strong> structure and use it as the value for <em>pSourceFormat</em>. ? </dd> + + + <dd> <p>Flags that specify the behavior of the source voice. A flag can be 0 or a combination of one or more of the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_NOPITCH}}</td><td>No pitch control is available on the voice.?</td></tr> <tr><td>{{XAUDIO2_VOICE_NOSRC}}</td><td>No sample rate conversion is available on the voice. The voice's outputs must have the same sample rate.<strong>Note</strong>??The {{XAUDIO2_VOICE_NOSRC}} flag causes the voice to behave as though the {{XAUDIO2_VOICE_NOPITCH}} flag also is specified. ? </td></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.?</td></tr> </table> <p>?</p> <strong>Note</strong>??The {{XAUDIO2_VOICE_MUSIC}} flag is not supported on Windows. ? </dd> + + + <dd> <p>Highest allowable frequency ratio that can be set on this voice. The value for this argument must be between {{XAUDIO2_MIN_FREQ_RATIO}} and {{XAUDIO2_MAX_FREQ_RATIO}}. Subsequent calls to <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> are clamped between {{XAUDIO2_MIN_FREQ_RATIO}} and <strong>MaxFrequencyRatio</strong>. +The maximum value for this argument is defined as {{XAUDIO2_MAX_FREQ_RATIO}}, which allows pitch to be raised by up to 10 octaves. </p> <p>If <em>MaxFrequencyRatio</em> is less than 1.0, the voice will use that ratio immediately after being created (rather than the default of 1.0). </p> <p> </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For {{XMA}} voices, there is one more restriction on the <em>MaxFrequencyRatio</em> argument and the voice's sample rate. The product of these two numbers cannot exceed {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO}} for one-channel voices or {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL}} for voices with any other number of channels. If the value specified for <em>MaxFrequencyRatio</em> is too high for the specified format, the call to <strong>CreateSourceVoice</strong> fails and produces a debug message. +</td></tr> </table> <p>?</p> <strong>Note</strong>??You can use the lowest possible <em>MaxFrequencyRatio</em> value to reduce {{XAudio2}}'s memory usage. ? </dd> + + + <dd> <p>Pointer to a client-provided callback interface, <strong>{{IXAudio2VoiceCallback}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the source voice. If pSendList is {{NULL}}, the send list defaults to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the source voice.</p> </dd> + + + + + <p>Creates and configures a submix voice.</p> + <p>Submix voices receive the output of one or more source or submix voices. They process the output, and then send it to another submix voice or to a mastering voice. </p><p>A submix voice performs a sample rate conversion from the input sample rate to the input rate of its output voices in <em>pSendList</em>. If you specify multiple voice sends, they must all have the input same sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destroy a mastering voice if any source or submix voices still exist. </p><p>When first created, submix voices are in the started state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means that memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSubmixVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSubmixVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the <em>pEffectChain</em> argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSubmixVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSubmixVoice</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>On success, returns a reference to the new <strong>{{IXAudio2SubmixVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels in the input audio data of the submix voice. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. +</p> </dd> + + + <dd> <p>Sample rate of the input audio data of submix voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. <em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> </dd> + + + <dd> <p>Flags that specify the behavior of the submix voice. It can be 0 or the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An arbitrary number that specifies when this voice is processed with respect to other submix voices, if the {{XAudio2}} engine is running other submix voices. The voice is processed after all other voices that include a smaller <em>ProcessingStage</em> value and before all other voices that include a larger <em>ProcessingStage</em> value. Voices that include the same <em>ProcessingStage</em> value are processed in any order. A submix voice cannot send to another submix voice with a lower or equal <em>ProcessingStage</em> value. This prevents audio being lost due to a submix cycle. +</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the submix voice. If <em>pSendList</em> is {{NULL}}, the send list will default to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the submix voice. </p> </dd> + + + + + <p>Creates and configures a mastering voice.</p> + <p>Mastering voices receive the output of one or more source or submix voices. They process the data, and send it to the audio output device. </p><p>Typically, you should create a mastering voice with an input sample rate that will be used by the majority of the title's audio content. The mastering voice performs a sample rate conversion from this input sample rate to the actual device output rate. </p><p>You cannot create a source or submix voices until a mastering voice exists. You cannot destroy a mastering voice if any source or submix voices still exist. </p><p>Mastering voices are always processed after all source and submix voices. This means that you need not specify a <em>ProcessingStage</em> parameter to control the processing order. </p><p>{{XAudio2}} only allows one mastering voice to exist at once. If you attempt to create more than one voice, {{XAUDIO2_E_INVALID_CALL}} is returned. If an additional mastering voice is needed, for example for an output device with a different audio category set, you will need to create an additional {{XAudio2}} instance. </p><p>When first created, mastering voices are in the started state. </p><p>It is invalid to call <strong>CreateMasteringVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateMasteringVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateMasteringVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateMasteringVoice</strong> is called. </p><p>Note that the DirectX {{SDK}} {{XAUDIO2}} version of <strong>CreateMasteringVoice</strong> took a DeviceIndex argument instead of a szDeviceId and a StreamCategory argument. This reflects the changes needed for the standard Windows device enumeration model.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. Returns {{ERROR_NOT_FOUND}} if no default audio device exists and {{NULL}} is passed in as the szDeviceId parameter. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p> If successful, returns a reference to the new <strong>{{IXAudio2MasteringVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels the mastering voice expects in its input audio. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. </p> <p>You can set <em>InputChannels</em> to {{XAUDIO2_DEFAULT_CHANNELS}}, which causes {{XAudio2}} to try to detect the system speaker configuration setup. </p> </dd> + + + <dd> <p>Sample rate of the input audio data of the mastering voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. +<em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> <p>You can set <em>InputSampleRate</em> to {{XAUDIO2_DEFAULT_SAMPLERATE}}, with the default being determined by the current platform. </p> <p>Windows {{XP}} defaults to 44100. </p> <p>Windows Vista and Windows 7 default to the setting specified in the Sound Control Panel. The default for this setting is 44100 (or 48000 if required by the driver). Flags +</p> </dd> + + + <dd> <p> Flags that specify the behavior of the mastering voice. Must be 0.</p> </dd> + + + <dd> <p>Identifier of the device to receive the output audio. Specifying the default value of {{NULL}} causes {{XAudio2}} to select the global default audio device.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes an effect chain to use in the mastering voice, or {{NULL}} to use no effects.</p> </dd> + + + <dd> <p>The audio stream category to use for this mastering voice.</p> </dd> + + + + + <p>Starts the audio processing thread.</p> + <p>After <strong>StartEngine</strong> is called, all started voices begin to consume audio. All enabled effects start running, and the resulting audio is sent to any connected output devices. When {{XAudio2}} is first initialized, the engine is already in the started state. </p><p>It is invalid to call <strong>StartEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>StartEngine</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Stops the audio processing thread.</p> + <p>When <strong>StopEngine</strong> is called, all output is stopped immediately. However, the audio graph is left untouched, preserving effect parameters, effect histories (for example, the data stored by a reverb effect in order to emit echoes of a previous sound), voice states, pending source buffers, cursor positions, and so forth. When the engine is restarted, the resulting audio output will be identical?apart from a period of silence?to the output that would have been produced if the engine had never been stopped. </p><p>It is invalid to call <strong>StopEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Atomically applies a set of operations that are tagged with a given identifier.</p> + <p><strong>CommitChanges</strong> does nothing if no operations are tagged with the given identifier. </p><p>See the {{XAudio2}} Operation Sets overview about working with <strong>CommitChanges</strong> and {{XAudio2}} interface methods that may be deferred. +</p> + <p>Returns {{S_OK}} if successful; returns an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Identifier of the set of operations to be applied. To commit all pending operations, pass <strong>{{XAUDIO2_COMMIT_ALL}}</strong>. </p> </dd> + + + + + <p>Returns current resource usage details, such as available memory or {{CPU}} usage.</p> + <p>For specific information on the statistics returned by <strong>GetPerformanceData</strong>, see the <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure reference. </p> + <p>This method does not return a value.</p> + + + <dd> <p>On success, reference to an <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure that is returned. +</p> </dd> + + + + + <p>Changes global debug logging options for {{XAudio2}}.</p> + <p>SetDebugConfiguration sets the debug configuration for the given instance of {{XAudio2}} engine. See <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> Structure for supported debug options. By default, {{XAudio2}} does not log debug output or break on errors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> structure that contains the new debug configuration.</p> </dd> + + + <dd> <p>This parameter is reserved and must be {{NULL}}.</p> </dd> + + + + + <p><strong>{{IXAudio2Voice}}</strong> represents the base interface from which <strong>{{IXAudio2SourceVoice}}</strong>, <strong>{{IXAudio2SubmixVoice}}</strong> and <strong>{{IXAudio2MasteringVoice}}</strong> are derived. The methods listed below are common to all voice subclasses.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Returns information about the creation flags, input channels, and sample rate of a voice.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{XAUDIO2_VOICE_DETAILS}}</strong> structure containing information about the voice.</p> </dd> + + + + + <p>Designates a new set of submix or mastering voices to receive the output of the voice.</p> + <p>This method is only valid for source and submix voices. Mastering voices can not send audio to another voice. </p><p>After calling <strong>SetOutputVoices</strong> a voice's current send levels will be replaced by a default send matrix. The <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> method must be called to set a custom matrix for the new sendlist. </p><p>It is invalid to call <strong>SetOutputVoices</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>SetOutputVoices</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}.</p><strong>Note</strong>??Calling <strong>SetOutputVoices</strong> invalidates any send matrices previously set with <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>Array of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structure references to destination voices. If <em>pSendList</em> is {{NULL}}, the voice will send its output to the current mastering voice. To set the voice to not send its output anywhere set the <strong>OutputCount</strong> member of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> to 0. All of the voices in a send list must have the same input sample rate, see {{XAudio2}} Sample Rate Conversions for additional information.</p> </dd> + + + + + <p>Replaces the effect chain of the voice.</p> + <p>The number of output channels allowed for a voice's effect chain is locked at creation of the voice. If you create the voice with an effect chain, any new effect chain passed to <strong>SetEffectChain</strong> must have the same number of input and output channels as the original effect chain. If you create the voice without an effect chain, the number of output channels allowed for the effect chain will default to the number of input channels for the voice. If any part of effect chain creation fails, none of it is applied. </p><p>After you attach an effect to an {{XAudio2}} voice, {{XAudio2}} takes control of the effect, and the client should not make any further calls to it. The simplest way to ensure this is to release all references to the effect. </p><p>It is invalid to call <strong>SetEffectChain</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>SetEffectChain</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>SetEffectChain</strong> successfully completes, and may be deleted immediately after <strong>SetEffectChain</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes the new effect chain to use. If {{NULL}} is passed, the current effect chain is removed.</p> <strong>Note</strong>??If <em>pEffectChain</em> is non-{{NULL}}, the <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that it points to must specify at least one effect. ? </dd> + + + + + <p>Enables the effect at a given position in the effect chain of the voice.</p> + <p>Be careful when you enable an effect while the voice that hosts it is running. Such an action can result in a problem if the effect significantly changes the audio's pitch or volume. </p><p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p><strong>EnableEffect</strong> takes effect immediately when you call it from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Disables the effect at a given position in the effect chain of the voice.</p> + <p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p>Disabling an effect immediately removes it from the processing graph. Any pending audio in the effect?such as a reverb tail?is not played. Be careful disabling an effect while the voice that hosts it is running. This can result in an audible artifact if the effect significantly changes the audio's pitch or volume. </p><p><strong>DisableEffect</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of valid error codes.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Returns the running state of the effect at a specified position in the effect chain of the voice.</p> + <p><strong>GetEffectState</strong> always returns the effect's actual current state. However, this may not be the state set by the most recent <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call: the actual state is only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if EnableEffect/DisableEffect was called with a deferred operation {{ID}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Returns {{TRUE}} If the effect is enabled. If the effect is disabled, returns {{FALSE}}.</p> </dd> + + + + + <p>Sets parameters for a given effect in the voice's effect chain.</p> + <p>The specific effect being used determines the valid size and format of the <em>pParameters</em> buffer. The call will fail if <em>pParameters</em> is invalid or if <em>ParametersByteSize</em> is not exactly the size that the effect expects. The client must take care to direct the <strong>SetEffectParameters</strong> call to the right effect. If this call is directed to a different effect that happens to accept the same parameter block size, the parameters will be interpreted differently. This may lead to unexpected results. </p><p>The memory pointed to by <em>pParameters</em> must <em>not</em> be freed immediately, because {{XAudio2}} will need to refer to it later when the parameters actually are applied to the effect. This happens during the next audio processing pass if the <em>OperationSet</em> argument is <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. Otherwise, the parameters are applied to the effect later, during the first processing pass after the <strong>{{IXAudio2::CommitChanges}}</strong> function is called with the same <em>OperationSet</em> argument. </p><p><strong>SetEffectParameters</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetEffectParameters}}</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. The actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface. +</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p> Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p> Size of the <strong>pParameters</strong> array in bytes.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the current effect-specific parameters of a given effect in the voice's effect chain.</p> + <p><strong>GetEffectParameters</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}). </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface.</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p>Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p>Size, in bytes, of the pParameters array.</p> </dd> + + + + + <p>Sets the voice's filter parameters.</p> + <p><strong>SetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p>This method is usable only on source and submix voices and has no effect on mastering voices.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetFilterParameters}}</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the voice's filter parameters.</p> + <p><strong>GetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p><strong>GetFilterParameters</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}). </p><strong>Note</strong>??<strong>GetFilterParameters</strong> is usable only on source and submix voices and has no effect on mastering voices.? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + + + <p>Sets the filter parameters on one of this voice's sends.</p> + <p><strong>SetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on a mastering voice's sends. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be set.</p> </dd> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the filter parameters from one of this voice's sends.</p> + <p><strong>GetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on mastering voices? sends. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be read.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Writes a number of 32-bit immediate values to the specified buffer locations directly from the command stream.</p> + <p><strong>WriteBufferImmediate</strong> performs <em>Count</em> number of 32-bit writes: one for each value and destination specified in <em>pParams</em>.</p><p>The receiving buffer (resource) must be in the <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong> state to be a valid destination for <strong>WriteBufferImmediate</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures that are pointed to by <em>pParams</em> and <em>pModes</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures equal to <em>Count</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE}}</strong> structures equal to <em>Count</em>. The default value is <strong>null</strong>; passing <strong>null</strong> causes the system to write all immediate values using <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT}}</strong>.</p> </dd> + + + + + <p>Sets the volume levels for the voice, per channel.</p> + <p><strong>SetChannelVolumes</strong> controls a voice's per-channel output levels and is applied just after the voice's final {{SRC}} and before its sends. </p><p>This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetChannelVolumes}}</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Number of channels in the voice.</p> </dd> + + + <dd> <p>Array containing the new volumes of each channel in the voice. The array must have <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the volume levels for the voice, per channel.</p> + <p>These settings are applied after the effect chain is applied. This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain, 0 means silence, and negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>GetChannelVolumes</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Confirms the channel count of the voice.</p> </dd> + + + <dd> <p>Returns the current volume level of each channel in the voice. The array must have at least <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Sets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method is valid only for source and submix voices, because mastering voices write directly to the device with no matrix mixing. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>The {{X3DAudio}} function <strong>{{X3DAudioCalculate}}</strong> can produce an output matrix for use with <strong>SetOutputMatrix</strong> based on a sound's position and a listener's position.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputMatrix}}</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Pointer to a destination <strong>{{IXAudio2Voice}}</strong> for which to set volume levels.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>SetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> ? <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel <em>S</em> to destination channel <em>D</em> is specified in the form <em>pLevelMatrix</em>[<em>SourceChannels</em> ? <em>D</em> + <em>S</em>]. +</p> <p>For example, when rendering two-channel stereo input into 5.1 output that is weighted toward the front channels?but is absent from the center and low-frequency channels?the matrix might have the values shown in the following table. </p> <table> <tr><th>Output</th><th>Left Input [Array Index]</th><th>Right Input [Array Index]</th></tr> <tr><td>Left</td><td>1.0 [0]</td><td>0.0 [1]</td></tr> <tr><td>Right</td><td>0.0 [2]</td><td>1.0 [3]</td></tr> <tr><td>Front Center</td><td>0.0 [4]</td><td>0.0 [5]</td></tr> <tr><td>{{LFE}}</td><td>0.0 [6]</td><td>0.0 [7]</td></tr> <tr><td>Rear Left</td><td>0.8 [8]</td><td>0.0 [9]</td></tr> <tr><td>Rear Right</td><td>0.0 [10]</td><td>0.8 [11]</td></tr> </table> <p>?</p> <strong>Note</strong>??The left and right input are fully mapped to the output left and right channels; 80 percent of the left and right input is mapped to the rear left and right channels. ? <p>See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method applies only to source and submix voices, because mastering voices write directly to the device with no matrix mixing. Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume level of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>See <strong>{{WAVEFORMATEXTENSIBLE}}</strong> for information on standard channel ordering. </p><strong>Note</strong>??<strong>GetOutputMatrix</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer specifying the destination <strong>{{IXAudio2Voice}}</strong> to retrieve the output matrix for.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>GetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> * <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel S to destination channel D is returned in the form <em>pLevelMatrix</em>[<em>DestinationChannels</em> ? S + D]. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Destroys the voice. If necessary, stops the voice and removes it from the {{XAudio2}} graph.</p> + <p>If any other voice is currently sending audio to this voice, the method fails. </p><p><strong>DestroyVoice</strong> waits for the audio processing thread to be idle, so it can take a little while (typically no more than a couple of milliseconds). This is necessary to guarantee that the voice will no longer make any callbacks or read any audio data, so the application can safely free up these resources as soon as the call returns. </p><p>To avoid title thread interruptions from a blocking <strong>DestroyVoice</strong> call, the application can destroy voices on a separate non-critical thread, or the application can use voice pooling strategies to reuse voices rather than destroying them. Note that voices can only be reused with audio that has the same data format and the same number of channels the voice was created with. A voice can play audio data with different sample rates than that of the voice by calling <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> with an appropriate ratio parameter. </p><p>It is invalid to call <strong>DestroyVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Use a source voice to submit audio data to the {{XAudio2}} processing pipeline.You must send voice data to a mastering voice to be heard, either directly or through intermediate submix voices. +</p> + + + + + <p>Starts consumption and processing of audio by the voice. Delivers the result to any connected submix or mastering voices, or to the output device.</p> + <p>If the {{XAudio2}} engine is stopped, the voice stops running. However, it remains in the started state, so that it starts running again as soon as the engine starts. </p><p>When first created, source voices are in the stopped state. Submix and mastering voices are in the started state. </p><p>After <strong>Start</strong> is called it has no further effect if called again before <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called. In addition multiple calls to <strong>Start</strong> without matching calls to <strong>{{IXAudio2SourceVoice::Stop}}</strong> will result in warning messages in debug builds.</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Flags that control how the voice is started. Must be 0.</p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Stops consumption of audio by the current voice.</p> + <p>All source buffers that are queued on the voice and the current cursor position are preserved. This allows the voice to continue from where it left off, when it is restarted. The <strong>{{IXAudio2SourceVoice::FlushSourceBuffers}}</strong> method can be used to flush queued source buffers. </p><p>By default, any pending output from voice effects?for example, reverb tails?is not played. Instead, the voice is immediately rendered silent. The {{XAUDIO2_PLAY_TAILS}} flag can be used to continue emitting effect output after the voice stops running. </p><p>A voice stopped with the {{XAUDIO2_PLAY_TAILS}} flag stops consuming source buffers, but continues to process its effects and send audio to its destination voices. A voice in this state can later be stopped completely by calling <strong>Stop</strong> again with the Flags argument set to 0. This enables stopping a voice with {{XAUDIO2_PLAY_TAILS}}, waiting sufficient time for any audio being produced by its effects to finish, and then fully stopping the voice by calling <strong>Stop</strong> again without {{XAUDIO2_PLAY_TAILS}}. This technique allows voices with effects to be stopped gracefully while ensuring idle voices will not continue to be processed after they have finished producing audio. </p><p><strong>Stop</strong> is always asynchronous, even if called within a callback. </p><strong>Note</strong>??{{XAudio2}} never calls any voice callbacks for a voice if the voice is stopped (even if it was stopped with {{XAUDIO2_PLAY_TAILS}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Flags that control how the voice is stopped. Can be 0 or the following: +</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_PLAY_TAILS}}</td><td>Continue emitting effect output after the voice is stopped.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Adds a new audio buffer to the voice queue.</p> + <p>The voice processes and plays back the buffers in its queue in the order that they were submitted. </p><p>The <strong>{{XAUDIO2_BUFFER}}</strong> structure includes details about the audio buffer's location and size, the part of the buffer that should actually be played, the loop region (if any) and loop count, the context reference to be used in any callbacks relating to this buffer, and an optional {{XAUDIO2_END_OF_STREAM}} flag that indicates that it is the last buffer of a contiguous sound. </p><p>If the voice is started and has no buffers queued, the new buffer will start playing immediately. If the voice is stopped, the buffer is added to the voice's queue and will be played when the voice starts. </p><p>If only part of the given buffer should be played, the <strong>PlayBegin</strong> and <strong>PlayLength</strong> fields in the <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the region to be played. A <strong>PlayLength</strong> value of 0 means to play the entire buffer (and in this case <strong>PlayBegin</strong> must be 0 as well). </p><p>If all or part of the buffer should be played in a continuous loop, the <strong>LoopBegin</strong>, <strong>LoopLength</strong> and <strong>LoopCount</strong> fields in <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the characteristics of the loop region. A <strong>LoopBegin</strong> value of {{XAUDIO2_NO_LOOP_REGION}} means that no looping should be performed, and in this case <strong>LoopLength</strong> and <strong>LoopCount</strong> must be given as 0. If a loop region is specified, it must be non-empty (<strong>LoopLength</strong> &gt; 0), and the loop count must be between 1 and {{XAUDIO2_MAX_LOOP_COUNT}} inclusive (or {{XAUDIO2_LOOP_INFINITE}} to specify an endless loop which will only end when <strong>{{IXAudio2SourceVoice::ExitLoop}}</strong> is called). A loop count of <em>N</em> means to skip backwards N times, i.e. to play the loop region <em>N</em>+1 times. </p><p>If an explicit play region is specified, it must begin and end within the given audio buffer (or, in the compressed case, within the set of samples that the buffer will decode to). In addition, the loop region cannot end past the end of the play region. </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For certain audio formats, there may be additional restrictions on the valid endpoints of any play or loop regions; e.g. for {{XMA}} buffers, the regions can only begin or end at 128-sample boundaries in the decoded audio. +</td></tr> </table><p>?</p><p>The <em>pBuffer</em> reference can be reused or freed immediately after calling this method, but the actual audio data referenced by <em>pBuffer</em> must remain valid until the buffer has been fully consumed by {{XAudio2}} (which is indicated by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback). </p><p>Up to {{XAUDIO2_MAX_QUEUED_BUFFERS}} buffers can be queued on a voice at any one time. </p><p><strong>SubmitSourceBuffer</strong> takes effect immediately when called from an {{XAudio2}} callback with an OperationSet of {{XAUDIO2_COMMIT_NOW}}. +</p><table> <tr><th>Xbox 360</th></tr> <tr><td>This method can be called from an Xbox system thread (most other {{XAudio2}} methods cannot). However, a maximum of two source buffers can be submitted from a system thread at a time.</td></tr> </table><p>?</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_BUFFER}}</strong> structure to queue. +</p> </dd> + + + <dd> <p>Pointer to an additional <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure used when submitting {{WMA}} data. </p> </dd> + + + + + <p>Removes all pending audio buffers from the voice queue.</p> + <p>If the voice is started, the buffer that is currently playing is not removed from the queue. </p><p><strong>FlushSourceBuffers</strong> can be called regardless of whether the voice is currently started or stopped. </p><p>For every buffer removed, an <strong>OnBufferEnd</strong> callback will be made, but none of the other per-buffer callbacks (<strong>OnBufferStart</strong>, <strong>OnStreamEnd</strong> or <strong>OnLoopEnd</strong>) will be made. </p><p><strong>FlushSourceBuffers</strong> does not change a the voice's running state, so if the voice was playing a buffer prior to the call, it will continue to do so, and will deliver all the callbacks for the buffer normally. This means that the <strong>OnBufferEnd</strong> callback for this buffer will take place after the <strong>OnBufferEnd</strong> callbacks for the buffers that were removed. Thus, an {{XAudio2}} client that calls <strong>FlushSourceBuffers</strong> cannot expect to receive <strong>OnBufferEnd</strong> callbacks in the order in which the buffers were submitted. </p><p>No warnings for starvation of the buffer queue will be emitted when the currently playing buffer completes; it is assumed that the client has intentionally removed the buffers that followed it. However, there may be an audio pop if this buffer does not end at a zero crossing. If the application must ensure that the flush operation takes place while a specific buffer is playing?perhaps because the buffer ends with a zero crossing?it must call <strong>FlushSourceBuffers</strong> from a callback, so that it executes synchronously. </p><p>Calling <strong>FlushSourceBuffers</strong> after a voice is stopped and then submitting new data to the voice resets all of the voice's internal counters. </p><p>A voice's state is not considered reset after calling <strong>FlushSourceBuffers</strong> until the <strong>OnBufferEnd</strong> callback occurs (if a buffer was previously submitted) or <strong>{{IXAudio2SourceVoice::GetState}}</strong> returns with <strong>{{XAUDIO2_VOICE_STATE}}</strong>. <strong>BuffersQueued</strong> == 0. For example, if you stop a voice and call <strong>FlushSourceBuffers</strong>, it's still not legal to immediately call <strong>{{IXAudio2SourceVoice::SetSourceSampleRate}}</strong> (which requires the voice to not have any buffers currently queued), until either of the previously mentioned conditions are met. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Notifies an {{XAudio2}} voice that no more buffers are coming after the last one that is currently in its queue.</p> + <p><strong>Discontinuity</strong> suppresses the warnings that normally occur in the debug build of {{XAudio2}} when a voice runs out of audio buffers to play. It is preferable to mark the final buffer of a stream by tagging it with the {{XAUDIO2_END_OF_STREAM}} flag, but in some cases the client may not know that a buffer is the end of a stream until after the buffer has been submitted. </p><p>Because calling <strong>Discontinuity</strong> is equivalent to applying the {{XAUDIO2_END_OF_STREAM}} flag retroactively to the last buffer submitted, an <strong>OnStreamEnd</strong> callback will be made when this buffer completes. +</p><strong>Note</strong>??{{XAudio2}} may consume its entire buffer queue and emit a warning before the <strong>Discontinuity</strong> call takes effect, so <strong>Discontinuity</strong> is not guaranteed to suppress the warnings.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Stops looping the voice when it reaches the end of the current loop region. </p> + <p>If the cursor for the voice is not in a loop region, <strong>ExitLoop</strong> does nothing. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Sets the frequency adjustment ratio of the voice.</p> + <p>Frequency adjustment is expressed as <em>source frequency</em> / <em>target frequency</em>. Changing the frequency ratio changes the rate audio is played on the voice. A ratio greater than 1.0 will cause the audio to play faster and a ratio less than 1.0 will cause the audio to play slower. Additionally, the frequency ratio affects the pitch of audio on the voice. As an example, a value of 1.0 has no effect on the audio, whereas a value of 2.0 raises pitch by one octave and 0.5 lowers it by one octave. </p><p>If <strong>SetFrequencyRatio</strong> is called specifying a Ratio value outside the valid range, the method will set the frequency ratio to the nearest valid value. A warning also will be generated for debug builds. </p><strong>Note</strong>??<strong>{{IXAudio2SourceVoice::GetFrequencyRatio}}</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Frequency adjustment ratio. This value must be between {{XAUDIO2_MIN_FREQ_RATIO}} and the <em>MaxFrequencyRatio</em> parameter specified when the voice was created (see <strong>{{IXAudio2::CreateSourceVoice}}</strong>). {{XAUDIO2_MIN_FREQ_RATIO}} currently is 0.0005, which allows pitch to be lowered by up to 11 octaves.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. +</p> </dd> + + + + + <p>Returns the frequency adjustment ratio of the voice.</p> + <p><strong>GetFrequencyRatio</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}). </p><p>For information on frequency ratios, see <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Returns the current frequency adjustment ratio if successful.</p> </dd> + + + + + <p>Reconfigures the voice to consume source data at a different sample rate than the rate specified when the voice was created.</p> + <p>The <strong>SetSourceSampleRate</strong> method supports reuse of {{XAudio2}} voices by allowing a voice to play sounds with a variety of sample rates. To use <strong>SetSourceSampleRate</strong> the voice must have been created without the {{XAUDIO2_VOICE_NOPITCH}} or {{XAUDIO2_VOICE_NOSRC}} flags and must not have any buffers currently queued. </p><p>The typical use of <strong>SetSourceSampleRate</strong> is to support voice pooling. For example to support voice pooling an application would precreate all the voices it expects to use. Whenever a new sound will be played the application chooses an inactive voice or ,if all voices are busy, picks the least important voice and calls <strong>SetSourceSampleRate</strong> on the voice with the new sound's sample rate. After <strong>SetSourceSampleRate</strong> has been called on the voice, the application can immediately start submitting and playing buffers with the new sample rate. This allows the application to avoid the overhead of creating and destroying voices frequently during gameplay. +</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>The new sample rate the voice should process submitted data at. Valid sample rates are 1kHz to 200kHz. </p> </dd> + + + + + <p>A submix voice is used primarily for performance improvements and effects processing. </p> + <p>Data buffers cannot be submitted directly to submix voices and will not be audible unless submitted to a mastering voice. A submix voice can be used to ensure that a particular set of voice data is converted to the same format and/or to have a particular effect chain processed on the collective result. +</p><p>{{IXAudio2SubmixVoice}} inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to submix voices. The interface type exists solely because some of the base class methods are implemented differently for submix voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + <p>A mastering voice is used to represent the audio output device.</p><p>Data buffers cannot be submitted directly to mastering voices, but data submitted to other types of voices must be directed to a mastering voice to be heard. +</p><p><strong>{{IXAudio2MasteringVoice}}</strong> inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to mastering voices. The interface type exists solely because some of the base class methods are implemented differently for mastering voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + + <p>Returns the channel mask for this voice.</p> + <p>The <em>pChannelMask</em> argument is a bit-mask of the various channels in the speaker geometry reported by the audio system. This information is needed for the <strong>{{X3DAudioInitialize}}</strong> <em>SpeakerChannelMask</em> parameter. </p><p>The {{X3DAUDIO}}.H header declares a number of <strong>{{SPEAKER_}}</strong> positional defines to decode these channels masks. </p><p>Examples include: </p><pre>{{SPEAKER_STEREO}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) {{SPEAKER_5POINT1}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) // | {{SPEAKER_FRONT_CENTER}} (0x4) // | {{SPEAKER_LOW_FREQUENCY}} (0x8) // | {{SPEAKER_BACK_LEFT}} (0x10) | {{SPEAKER_BACK_RIGHT}} (0x20)</pre><strong>Note</strong>??For the DirectX {{SDK}} versions of {{XAUDIO}}, the channel mask for the output device was obtained via the <strong>{{IXAudio2::GetDeviceDetails}}</strong> method, which doesn't exist in Windows?8 and later.? + <p>This method does not return a value.</p> + + + <dd> <p> Returns the channel mask for this voice. This corresponds to the <strong>dwChannelMask</strong> member of the <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure. +</p> </dd> + + + + + <p>The {{IXAudio2EngineCallback}} interface contains methods that notify the client when certain events happen in the <strong>{{IXAudio2}}</strong> engine.</p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods via an interface reference provided by the client, using the <strong>{{XAudio2Create}}</strong> method. Methods in this interface return <strong>void</strong>, rather than an {{HRESULT}}. +</p><p>See {{XAudio2}} Callbacks for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called by {{XAudio2}} just before an audio processing pass begins.</p> + + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} just after an audio processing pass ends.</p> + <p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + + <p>Called if a critical system error occurs that requires {{XAudio2}} to be closed down and restarted.</p> + <p>If you provide the {{ID}} of a specific device in the <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong> or use the {{XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT}} flag, then a critical error will occur and <strong>OnCriticalError</strong> is raised if the underlying {{WASAPI}} rendering device becomes unavailable. This can occur when a headset or speaker is unplugged or when a {{USB}} audio device is removed, for example. Once a critical error has occurred, audio processing stops and all further calls to {{XAudio2}} fail. The only way to recover in this situation is to release the {{XAudio2}} instance and create a new one. </p><p></p><p>If you specified {{NULL}} or <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong>, then the system uses a Virtual Audio Client to represent the audio endpoint. In this case, if the underlying {{WASAPI}} rendering device becomes unavailable, the system automatically selects a new audio rendering device for rendering, audio processing continues, and <strong>OnCriticalError</strong> is not raised.</p><p>On the mobile device family, a Virtual Audio Client is always used and <strong>OnCriticalError</strong> is never raised, regardless of the values you provide to <strong>CreateMasteringVoice</strong>.</p><p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Error code returned by {{XAudio2}}.</p> </dd> + + + + + <p>The <strong>{{IXAudio2VoiceCallback}}</strong> interface contains methods that notify the client when certain events happen in a given <strong>{{IXAudio2SourceVoice}}</strong>. </p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods through an interface reference provided by the client in the <strong>{{IXAudio2::CreateSourceVoice}}</strong> method. Methods in this interface return void, rather than an {{HRESULT}}. +</p><p>See the {{XAudio2}} Callbacks topic for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called during each processing pass for each voice, just before {{XAudio2}} reads data from the voice's buffer queue.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of bytes that must be submitted immediately to avoid starvation. This allows the implementation of just-in-time streaming scenarios; the client can keep the absolute minimum data queued on the voice at all times, and pass it fresh data just before the data is required. This model provides the lowest possible latency attainable with {{XAudio2}}. For xWMA and {{XMA}} data <em>BytesRequired</em> will always be zero, since the concept of a frame of xWMA or {{XMA}} data is meaningless. </p> <strong>Note</strong>??In a situation where there is always plenty of data available on the source voice, <em>BytesRequired</em> should always report zero, because it doesn't need any samples immediately to avoid glitching. ? </dd> + + + + + <p>Called just after the processing pass for the voice ends.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice has just finished playing a contiguous audio stream.</p> + <p><strong>OnStreamEnd</strong> is triggered when {{XAudio2}} processes an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set. See the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> method for more information. </p><p>The <strong>OnStreamEnd</strong> callback indicates that {{XAudio2}} has finished consuming the last buffer submitted to the voice. With {{PCM}} data, all audio is guaranteed to have been played and the voice can be stopped or destroyed safely. </p><p>The <strong>OnStreamEnd</strong> callback only indicates that an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set has been processed. The callback is strictly informational and does not change the state of the source voice that triggered it. A voice stays in the start state until <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called and will continue to play submitted source buffers and to trigger additional callbacks. </p><p><strong>OnStreamEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice is about to start processing a new audio buffer.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferStart</strong> is guaranteed to be called just before the first byte of the current buffer is consumed. It is appropriate to use this callback for changes to the voice state such as the following. </p><ul> <li>Submitting a new buffer to the voice </li> <li>Adjusting the volume, pitch, and effect parameters of the voice </li> <li>Enabling or disabling an effect in the voice's effect chain</li> </ul>All the actions listed above are synchronous when performed in an {{XAudio2}} callback, so the changes will take effect immediately, affecting the buffer that is about to start.<p>It is also safe to use this callback to write audio data to the buffer directly, which can be useful for low-latency streaming scenarios. However, as with all {{XAudio2}} callbacks, no work should be done that uses a significant amount of processor time or could block execution, including synchronous disk or network reads. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the pContext member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice finishes processing a buffer. </p> + <p>After an <strong>OnBufferEnd</strong> callback the audio memory for the buffer associated with <em>pBufferContext</em> can safely be released. </p><p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext </strong>member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed and before the first byte of the next buffer is consumed. This callback can be used to overwrite or release the audio data referenced by the completed buffer, and to update other state associated with the voice as appropriate. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Context reference assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice reaches the end position of a loop.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnLoopEnd</strong> is not sample-accurate; that is, actions in the callback do not occur at the exact moment that a given sample is being processed. It is only guaranteed to be called shortly after the last sample in the loop has been processed. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted. </p> </dd> + + + + + <p>Called when a critical error occurs during voice processing.</p> + <p><strong>OnVoiceError</strong> is called in the event of an error during voice processing, such as a hardware {{XMA}} decoder error on the Xbox 360. The arguments report which buffer was being processed at the time of the error, and its {{HRESULT}} code. If the error is not recoverable by destroying and re-creating the voice, the <strong>OnCriticalError</strong> engine callback will be called as well. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + <dd> <p> The {{HRESULT}} code of the error encountered.</p> </dd> + + + + + <p>Creates a new <strong>{{XAudio2}}</strong> object and returns a reference to its <strong>{{IXAudio2}}</strong> interface.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} supported a flag <strong>{{XAUDIO2_DEBUG_ENGINE}}</strong> to select between the release and 'checked' version. This flag is not supported or defined in the Windows 8 version of {{XAUDIO2}}. </p><strong>Note</strong>??No versions of the DirectX {{SDK}} contain the xaudio2.lib import library. DirectX {{SDK}} versions use {{COM}} to create a new <strong>{{XAudio2}}</strong> object.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Describes parameters for use with the volume meter {{APO}}.</p> + <p>This structure is used with the <strong>{{XAudio2}} {{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p><em>pPeakLevels</em> and <em>pRMSLevels</em> are not returned by <strong>{{IXAudio2Voice::GetEffectParameters}}</strong>, the arrays are only filled out if they are present. If <em>pPeakLevels</em> and <em>pRMSLevels</em> are used they must be allocated by the application. The application is responsible for freeing the arrays when they are no longer needed. </p><p><em>ChannelCount</em> must be set by the application to match the number of channels in the voice the effect is applied to.</p> + + + <dd> <p>Array that will be filled with the maximum absolute level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pPeakLevels</em> may be {{NULL}} if <em>pRMSLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Array that will be filled with root mean square level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pRMSLevels</em> may be {{NULL}} if <em>pPeakLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Number of channels being processed.</p> </dd> + + + + + <p>Describes parameters for use in the reverb {{APO}}.</p> + <p>All parameters related to sampling rate or time are relative to a 48kHz voice and must be scaled for use with other sampling rates. For example, setting <em>ReflectionsDelay</em> to 300ms gives a true 300ms delay when the reverb is hosted in a 48kHz voice, but becomes a 150ms delay when hosted in a 24kHz voice. </p> + + + <dd> <p>Percentage of the output that will be reverb. Allowable values are from 0 to 100.</p> </dd> + + + <dd> <p>The delay time of the first reflection relative to the direct path. Permitted range is from 0 to 300 milliseconds. </p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay of reverb relative to the first reflection. Permitted range is from 0 to 85 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left rear output and right rear output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left side output and right side output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Position of the left input within the simulated space relative to the listener. With <em>PositionLeft</em> set to the minimum value, the left input is placed close to the listener. In this position, early reflections are dominant, and the reverb decay is set back in the sound field and reduced in amplitude. With <em>PositionLeft</em> set to the maximum value, the left input is placed at a maximum distance from the listener within the simulated room. <em>PositionLeft</em> does not affect the reverb decay time (liveness of the room), only the apparent position of the source relative to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Same as <em>PositionLeft</em>, but affecting only the right input. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??PositionRight is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??<em>PositionMatrixRight</em> is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). </p> </dd> + + + <dd> <p>Controls the character of the individual wall reverberations. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). +</p> </dd> + + + <dd> <p>Adjusts the decay time of low frequencies relative to the decay time at 1 kHz. The values correspond to dB of gain as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td><td>+1</td><td>+2</td><td>+3</td><td>+4</td></tr> </table> <p>?</p> <strong>Note</strong>??A <em>LowEQGain</em> value of 8 results in the decay time of low frequencies being equal to the decay time at 1 kHz. ? <p> Permitted range is from 0 to 12 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter that is controlled by the <em>LowEQGain</em> parameter. The values correspond to frequency in Hz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr> <tr><th>Frequency (Hz)</th><td>50</td><td>100</td><td>150</td><td>200</td><td>250</td><td>300</td><td>350</td><td>400</td><td>450</td><td>500</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 9 (no units). </p> </dd> + + + <dd> <p>Adjusts the decay time of high frequencies relative to the decay time at 1 kHz. When set to zero, high frequencies decay at the same rate as 1 kHz. When set to maximum value, high frequencies decay at a much faster rate than 1 kHz. </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 8 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the high pass filter that is controlled by the <em>HighEQGain</em> parameter. The values correspond to frequency in kHz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr> <tr><th>Frequency (kHz)</th><td>1</td><td>1.5</td><td>2</td><td>2.5</td><td>3</td><td>3.5</td><td>4</td><td>4.5</td><td>5</td><td>5.5</td><td>6</td><td>6.5</td><td>7</td><td>7.5</td><td>8</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 14 (no units).</p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter for the room effect. Permitted range is from 20 to 20,000 Hz.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Sets the pass band intensity level of the low-pass filter for both the early reflections and the late field reverberation. Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Sets the intensity of the low-pass filter for both the early reflections and the late field reverberation at the corner frequency (<em>RoomFilterFreq</em>). Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the early reflections. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the reverberations. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Reverberation decay time at 1 kHz. This is the time that a full scale input signal decays by 60 dB. Permitted range is from 0.1 to infinity seconds.</p> </dd> + + + <dd> <p>Controls the modal density in the late field reverberation. For colorless spaces, <em>Density</em> should be set to the maximum value (100). As Density is decreased, the sound becomes hollow (comb filtered). This is an effect that can be useful if you are trying to model a silo. Permitted range as a percentage is from 0 to 100.</p> </dd> + + + <dd> <p>The apparent size of the acoustic space. Permitted range is from 1 to 100 feet.</p> </dd> + + + <dd> <p>If set to {{TRUE}}, disables late field reflection calculations. Disabling late field reflection calculations results in a significant {{CPU}} time savings.</p> <strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this member. ? </dd> + + + + + <p>Describes {{I3DL2}} (Interactive 3D Audio Rendering Guidelines Level 2.0) parameters for use in the <strong>ReverbConvertI3DL2ToNative</strong> function.</p> + <p>There are many preset values defined for the <strong>{{XAUDIO2FX_REVERB_I3DL2_PARAMETERS}}</strong> structure. For more information, see <strong>{{XAUDIO2FX_I3DL2_PRESET}}</strong>. </p> + + + + <p>Creates a new volume meter audio processing object ({{APO}}) and returns a reference to it.</p> + <p>For information on creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview.</p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateVolumeMeter}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateVolumeMeter}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateVolumeMeter}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pVolumeMeterAPO; +{{XAudio2CreateVolumeMeter}}(&amp;pVolumeMeterAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioVolumeMeter</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("4FC3B166-972A-40CF-{{BC37}}-7DB03DB2FBA3")) AudioVolumeMeter; +</code><p><strong>{{XAudio2CreateVolumeMeter}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The volume meter uses the <strong>{{XAUDIO2FX_VOLUMEMETER_LEVELS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method when the {{XAPO}} is bound to the audio graph.</p><strong>Note</strong>??<strong>{{XAudio2CreateVolumeMeter}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioVolumeMeter</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioVolumeMeter(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateVolumeMeter}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioVolumeMeter(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the created volume meter {{APO}}.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Creates a new reverb audio processing object ({{APO}}), and returns a reference to it.</p> + <p><strong>{{XAudio2CreateReverb}}</strong> creates an effect performing Princeton Digital Reverb. The {{XAPO}} effect library ({{XAPOFX}}) includes an alternate reverb effect. Use <strong>CreateFX</strong> to create this alternate effect. </p><p>The reverb {{APO}} supports has the following restrictions: </p><ul> <li>Input audio data must be {{FLOAT32}}. </li> <li>Framerate must be within {{XAUDIO2FX_REVERB_MIN_FRAMERATE}} (20,000 Hz) and {{XAUDIO2FX_REVERB_MAX_FRAMERATE}} (48,000 Hz). </li> <li>The input and output channels must be one of the following combinations.<ul> <li>Mono input and mono output </li> <li>Mono input and 5.1 output </li> <li>Stereo input and stereo output </li> <li>Stereo input and 5.1 output</li> </ul> </li> </ul>The reverb {{APO}} maintains internal state information between processing samples. You can only use an instance of the {{APO}} with one source of audio data at a time. Multiple voices that require reverb effects would each need to create a separate reverb effect with<strong>{{XAudio2CreateReverb}}</strong>.<p>For information about creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview. </p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateReverb}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateReverb}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateReverb}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pReverbAPO; +{{XAudio2CreateReverb}}(&amp;pReverbAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioReverb</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("{{C2633B16}}-471B-4498-{{B8C5}}-4F0959E2EC09")) AudioReverb; +</code><p><strong>{{XAudio2CreateReverb}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The reverb uses the <strong>{{XAUDIO2FX_REVERB_PARAMETERS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. </p><strong>Note</strong>??<strong>{{XAudio2CreateReverb}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioReverb</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioReverb(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateReverb}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioReverb(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a reference to the reverb {{APO}} that is created.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Defines a {{DSP}} setting at a given normalized distance.</p> + + + + <dd> <p>Normalized distance. This must be within 0.0f to 1.0f.</p> </dd> + + + <dd> <p>{{DSP}} control setting.</p> </dd> + + + + + <p>Defines an explicit piecewise curve made up of linear segments, directly defining {{DSP}} behavior with respect to normalized distance.</p> + + + + <dd> <p> <strong>{{X3DAUDIO_DISTANCE_CURVE_POINT}}</strong> array. The array must have no duplicates and be sorted in ascending order with respect to distance.</p> </dd> + + + <dd> <p>Number of distance curve points. There must be two or more points since all curves must have at least two endpoints defining values at 0.0f and 1.0f normalized distance, respectively.</p> </dd> + + + + + <p>Specifies directionality for a single-channel non-{{LFE}} emitter by scaling {{DSP}} behavior with respect to the emitter's orientation.</p> + <p>For a detailed explanation of sound cones see Sound Cones.</p> + + + <dd> <p>Inner cone angle in radians. This value must be within 0.0f to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Outer cone angle in radians. This value must be within <em>InnerAngle</em> to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Volume scaler on/within inner cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Volume scaler on/beyond outer cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on/within inner cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on or beyond outer cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on or within inner cone. This must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on/beyond outer cone. This must be within 0.0f to 2.0f. +</p> </dd> + + + + + <p>Defines a point of 3D audio reception.</p> + <p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>The parameter type <strong>{{X3DAUDIO_VECTOR}}</strong> is typed to DirectX::XMFLOAT3, to provide x, y and z floating-point values. </p><p>A listener's front and top vectors must be orthonormal. To be considered orthonormal, a pair of vectors must have a magnitude of 1 +- 1x10-5 and a dot product of 0 +- 1x10-5. </p> + + + <dd> <p>Orientation of front direction. When <strong>pCone</strong> is {{NULL}} <strong>OrientFront</strong> is used only for matrix and delay calculations. When <strong>pCone</strong> is not {{NULL}} <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. This value must be orthonormal with <strong>OrientTop</strong> when used.</p> </dd> + + + <dd> <p>Orientation of top direction, used only for matrix and delay calculations. This value must be orthonormal with <strong>OrientFront</strong> when used.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units per second, used only for doppler calculations. This value does not affect <strong>Position</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_CONE}}</strong> structure for this listener. Providing a listener cone will specify that additional calculations are performed when determining the volume and filter {{DSP}} parameters for individual sound sources. A {{NULL}} <strong>pCone</strong> value specifies an omnidirectional sound and no cone processing is applied. <strong>pCone</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + + + <p>Defines a single-point or multiple-point 3D audio source that is used with an arbitrary number of sound channels.</p> + <p><strong>{{X3DAUDIO_EMITTER}}</strong> only supports a cone in a single-point emitter. Multi-point emitters are a convenient and efficient way to manage a related group of sound sources. Many properties are shared among all channel points, such as Doppler?the same Doppler shift is applied to all channels in the emitter. Thus, the Doppler value need only be calculated once, not per-point as would be needed with multiple separate single-point emitters. Because <strong>{{X3DAUDIO_EMITTER}}</strong> only has one orientation vector, a multi-point emitter cone would be of limited usefulness, forcing all channels to behave as if they were facing the same direction. If multiple independent cones are needed, multiple single-point emitters should be used, each with its own orientation. </p><p>The parameter type {{X3DAUDIO_VECTOR}} is typed to DirectX::XMFLOAT3, to provide x , y , and z floating-point values. </p><p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>For user-defined distance curves, the distance field of the first point must be 0.0f and the distance field of the last point must be 1.0f. </p><p>If an emitter moves beyond a distance of (<strong>CurveDistanceScaler</strong> ? 1.0f), the last point on the curve is used to compute the volume output level. The last point is determined by the following: +</p><pre>{{X3DAUDIO_DISTANCE_CURVE}}.pPoints[PointCount-1].{{DSPSetting}})</pre> + + + <dd> <p>Pointer to a sound cone. Used only with single-channel emitters for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. {{NULL}} specifies the emitter is omnidirectional.</p> </dd> + + + <dd> <p>Orientation of the front direction. This value must be orthonormal with <strong>OrientTop</strong>. <strong>OrientFront</strong> must be normalized when used. For single-channel emitters without cones <strong>OrientFront</strong> is only used for emitter angle calculations. For multi channel emitters or single-channel with cones <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Orientation of the top direction. This value must be orthonormal with <strong>OrientFront</strong>. <strong>OrientTop</strong> is only used with multi-channel emitters for matrix calculations.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units/second. This value is used only for doppler calculations. It does not affect <strong>Position</strong>. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius calculations. If <strong>InnerRadius</strong> is 0, then no inner radius is used, but <strong>InnerRadiusAngle</strong> may still be used. This value must be between 0.0f and {{MAX_FLT}}. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius angle calculations. This value must be between 0.0f and {{X3DAUDIO_PI}}/4.0. </p> </dd> + + + <dd> <p>Number of emitters defined by the <strong>{{X3DAUDIO_EMITTER}}</strong> structure. Must be greater than 0. </p> </dd> + + + <dd> <p>Distance from <strong>Position</strong> that channels will be placed if <strong>ChannelCount</strong> is greater than 1. <strong>ChannelRadius</strong> is only used with multi-channel emitters for matrix calculations. Must be greater than or equal to 0.0f.</p> </dd> + + + <dd> <p>Table of channel positions, expressed as an azimuth in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector. An azimuth of {{X3DAUDIO_2PI}} specifies a channel is a low-frequency effects ({{LFE}}) channel. {{LFE}} channels are positioned at the emitter base and are calculated with respect to <strong>pLFECurve</strong> only, never <strong>pVolumeCurve</strong>. <strong>pChannelAzimuths</strong> must have at least <strong>ChannelCount</strong> elements, but can be <strong>{{NULL}}</strong> if <strong>ChannelCount</strong> = 1. The table values must be within 0.0f to {{X3DAUDIO_2PI}}. <strong>pChannelAzimuths</strong> is used with multi-channel emitters for matrix calculations. </p> </dd> + + + <dd> <p>Volume-level distance curve, which is used only for matrix calculations. {{NULL}} specifies a specialized default curve that conforms to the inverse square law, such that when distance is between 0.0f and <strong>CurveDistanceScaler</strong> ? 1.0f, no attenuation is applied. +When distance is greater than <strong>CurveDistanceScaler</strong> ? 1.0f, the amplification factor is (<strong>CurveDistanceScaler</strong> ? 1.0f)/distance. At a distance of <strong>CurveDistanceScaler</strong> ? 2.0f, the sound will be at half volume or -6 dB, at a distance of <strong>CurveDistanceScaler</strong> ? 4.0f, the sound will be at one quarter volume or -12 dB, and so on. <strong>pVolumeCurve</strong> and pLFECurve are independent of each other. <strong>pVolumeCurve</strong> does not affect <strong>{{LFE}} channel</strong> volume. </p> </dd> + + + <dd> <p>{{LFE}} roll-off distance curve, or {{NULL}} to use default curve: [0.0f, <strong>CurveDistanceScaler</strong> ?1.0f], [<strong>CurveDistanceScaler</strong> ?1.0f, 0.0f]. A {{NULL}} value for <strong>pLFECurve</strong> specifies a default curve that conforms to the inverse square law with distances &lt;= <strong>CurveDistanceScaler</strong> clamped to no attenuation. +<strong>pVolumeCurve</strong> and <strong>pLFECurve</strong> are independent of each other. <strong>pLFECurve</strong> does not affect non {{LFE}} channel volume. </p> </dd> + + + <dd> <p>Low-pass filter ({{LPF}}) direct-path coefficient distance curve, or {{NULL}} to use the default curve: [0.0f, 1.0f], [1.0f, 0.75f]. <strong>pLPFDirectCurve</strong> is only used for {{LPF}} direct-path calculations. +</p> </dd> + + + <dd> <p>{{LPF}} reverb-path coefficient distance curve, or {{NULL}} to use default curve: [0.0f, 0.75f], [1.0f, 0.75f]. <strong>pLPFReverbCurve</strong> is only used for {{LPF}} reverb path calculations.</p> </dd> + + + <dd> <p>Reverb send level distance curve, or {{NULL}} to use default curve: [0.0f, 1.0f], [1.0f, 0.0f]. </p> </dd> + + + <dd> <p>Curve distance scaler that is used to scale normalized distance curves to user-defined world units, and/or to exaggerate their effect. This does not affect any other calculations. The value must be within the range {{FLT_MIN}} to {{FLT_MAX}}. <strong>CurveDistanceScaler</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Doppler shift scaler that is used to exaggerate Doppler shift effect. <strong>DopplerScaler</strong> is only used for Doppler calculations and does not affect any other calculations. The value must be within the range 0.0f to {{FLT_MAX}}.</p> </dd> + + + + + <p>Receives the results from a call to <strong>{{X3DAudioCalculate}}</strong>.</p> + <p>The following members must be initialized before passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function: </p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes</strong></li> <li><strong>SrcChannelCount </strong></li> <li><strong>DstChannelCount</strong></li> </ul><p>The following members are returned by passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function:</p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes </strong></li> <li><strong>{{LPFDirectCoefficient}} </strong></li> <li><strong>{{LPFReverbCoefficient}}</strong></li> <li><strong>ReverbLevel </strong></li> <li><strong>DopplerFactor </strong></li> <li><strong>EmitterToListenerAngle</strong></li> <li><strong>EmitterToListenerDistance </strong></li> <li><strong>EmitterVelocityComponent </strong></li> <li><strong>ListenerVelocityComponent</strong></li> </ul><strong>Note</strong>??For <strong>pMatrixCoefficients</strong> and <strong>pDelayTimes</strong>, <strong>{{X3DAudioCalculate}}</strong> does not allocate additional memory. <strong>{{X3DAudioCalculate}}</strong> merely modifies the values at the memory locations allocated for these references.? + + + + <p>Sets all global 3D audio constants.</p> + <p><strong>{{X3DAUDIO_HANDLE}}</strong> is an opaque data structure. Because the operating system doesn't allocate any additional storage for the 3D audio instance handle, you don't need to free or close it.</p> + <p>This function does not return a value.</p> + + + <dd> <p>Assignment of channels to speaker positions. This value must not be zero. The only permissible value on Xbox 360 is {{SPEAKER_XBOX}}.</p> </dd> + + + <dd> <p>Speed of sound, in user-defined world units per second. Use this value only for doppler calculations. It must be greater than or equal to {{FLT_MIN}}.</p> </dd> + + + <dd> <p>3D audio instance handle. Use this handle when you call <strong>{{X3DAudioCalculate}}</strong>.</p> </dd> + + + + + <p>Calculates {{DSP}} settings with respect to 3D parameters.</p> + <p>You typically call <strong>{{X3DAudioCalculate}}</strong> once for each pair of emitting objects and listeners in the scene. After each call, to apply the 3D effects, the app manually applies the calculation results at <em>pDSPSettings</em> to the {{XAUDIO2}} graph. For more info, see How to: Integrate {{X3DAudio}} with {{XAudio2}}.</p><strong>Important</strong>?? The listener and emitter values must be valid. Floating-point specials (NaN, {{QNaN}}, +{{INF}}, -{{INF}}) can cause the entire audio output to go silent if introduced into a running audio graph.? + <p>This function does not return a value.</p> + + + <dd> <p>3D audio instance handle. Call <strong>{{X3DAudioInitialize}}</strong> to get this handle.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_LISTENER}}</strong> representing the point of reception.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_EMITTER}}</strong> representing the sound source.</p> </dd> + + + <dd> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{X3DAUDIO_CALCULATE_MATRIX}}</td><td>Enables matrix coefficient table calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DELAY}}</td><td>Enables delay time array calculation (stereo only).?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_DIRECT}}</td><td>Enables low pass filter ({{LPF}}) direct-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_REVERB}}</td><td>Enables {{LPF}} reverb-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REVERB}}</td><td>Enables reverb send level calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DOPPLER}}</td><td>Enables Doppler shift factor calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_EMITTER_ANGLE}}</td><td>Enables emitter-to-listener interior angle calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_ZEROCENTER}}</td><td>Fills the center channel with silence. This flag allows you to keep a 6-channel matrix so you do not have to remap the channels, but the center channel will be silent. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REDIRECT_TO_LFE}}</td><td> Applies an equal mix of all source channels to a low frequency effect ({{LFE}}) destination channel. It only applies to matrix calculations with a source that does not have an {{LFE}} channel and a destination that does have an {{LFE}} channel. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_DSP_SETTINGS}}</strong> structure that receives the calculation results.</p> </dd> + + + + + <p>Describes the contents of a stream buffer. </p> + <p>This metadata can be used to implement optimizations that require knowledge of a stream buffer's contents. For example, {{XAPOs}} that always produce silent output from silent input can check the flag on the input stream buffer to determine if any signal processing is necessary. If silent, the {{XAPO}} can simply set the flag on the output stream buffer to silent and return, thus averting the work of processing silent data. </p><p>Likewise, {{XAPOs}} that receive valid input data, but generate silence (for any reason), may set the output stream buffer's flag accordingly, rather than writing silent samples to the buffer. </p><p>These flags represent what should be assumed is in the respective buffer. The flags may not reflect what is actually stored in memory. For example, the {{XAPO_BUFFER_SILENT}} indicates that silent data should be assumed, however the respective memory may be uninitialized </p> + + + <dd> <p>Stream buffer contains only silent samples.</p> </dd> + + + <dd> <p>Stream buffer contains audio data to be processed.</p> </dd> + + + + + <p>Describes general characteristics of an {{XAPO}}. Used with <strong>{{IXAPO::GetRegistrationProperties}}</strong>, <strong>{{CXAPOParametersBase::CXAPOParametersBase}}</strong>, and <strong>{{CXAPOBase::CXAPOBase}}</strong>. </p> + + + + + <p>Defines stream buffer parameters that remain constant while an {{XAPO}} is locked. Used with the <strong>{{IXAPO::LockForProcess}}</strong> method.</p> + <p>The byte size of the respective stream buffer must be at least <em>MaxFrameCount</em> ? (<em>pFormat</em>-&gt;nBlockAlign) bytes. </p> + + + + <p>Defines stream buffer parameters that may change from one call to the next. Used with the <strong>Process</strong> method.</p> + <p>Although the format and maximum size values of a particular stream buffer are constant, as defined by the <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong> structure, the actual memory address of the stream buffer is permitted to change. For constant-bit-rate ({{CBR}}) {{XAPOs}}, ValidFrameCount is constant and is always equal to the corresponding <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong>.MaxFrameCount for this buffer. </p><strong>Note</strong>??Only constant-bit-rate {{XAPOs}} are currently supported.? + + + + <p>The interface for an Audio Processing Object which be used in an {{XAudio2}} effect chain.</p> + + + + + <p>Returns the registration properties of an {{XAPO}}. </p> + + <p>Returns {{S_OK}} if successful; returns an error code otherwise.</p> + + + <dd> <p> Receives a reference to a <strong>{{XAPO_REGISTRATION_PROPERTIES}}</strong> structure containing the registration properties the {{XAPO}} was created with; use <strong>{{XAPOFree}}</strong> to free the structure. </p> </dd> + + + + + <p>Queries if a specific input format is supported for a given output format.</p> + <p>The <strong>{{IXAPO::IsOutputFormatSupported}}</strong> and <strong>IsInputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsInputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods. </p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p> Output format. +</p> </dd> + + + <dd> <p> Input format to check for being supported.</p> </dd> + + + <dd> <p> If not {{NULL}}, and the input format is not supported for the given output format, <em>ppSupportedInputFormat</em> returns a reference to the closest input format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Queries if a specific output format is supported for a given input format.</p> + <p>The <strong>{{IXAPO::IsInputFormatSupported}}</strong> and <strong>IsOutputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsOutputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods.</p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p>Input format. </p> </dd> + + + <dd> <p>Output format to check for being supported.</p> </dd> + + + <dd> <p>If not {{NULL}} and the output format is not supported for the given input format, <em>ppSupportedOutputFormat</em> returns a reference to the closest output format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Performs any effect-specific initialization.</p> + <p>The contents of <em>pData</em> are defined by a given {{XAPO}}. Immutable parameters (constant for the lifetime of the {{XAPO}}) should be set in this method. Once initialized, an {{XAPO}} cannot be initialized again. An {{XAPO}} should be initialized before passing it to {{XAudio2}} as part of an effect chain. </p><strong>Note</strong>??{{XAudio2}} does not call this method, it should be called by the client before passing the {{XAPO}} to {{XAudio2}}.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + <dd> <p> Effect-specific initialization parameters, may be {{NULL}} if <em>DataByteSize</em> is 0.</p> </dd> + + + <dd> <p> Size of <em>pData</em> in bytes, may be 0 if <em>pData</em> is {{NULL}}.</p> </dd> + + + + + <p>Resets variables dependent on frame history.</p> + <p>Constant and locked parameters such as the input and output formats remain unchanged. Variables set by <strong>{{IXAPOParameters::SetParameters}}</strong> remain unchanged. </p><p>For example, an effect with delay should zero out its delay line during this method, but should not reallocate anything as the {{XAPO}} remains locked with a constant input and output configuration. </p><p>{{XAudio2}} only calls this method if the {{XAPO}} is locked. </p><p>This method is called from the realtime thread and should not block. +</p> + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} to lock the input and output configurations of an {{XAPO}} allowing it to do any final initialization before <strong>Process</strong> is called on the realtime thread.</p> + <p>Once locked, the input and output configuration and any other locked parameters remain constant until <strong>UnLockForProcess</strong> is called. After an {{XAPO}} is locked, further calls to <strong>LockForProcess</strong> have no effect until the <strong>UnLockForProcess</strong> function is called. </p><p>An {{XAPO}} indicates what specific formats it supports through its implementation of the <strong>IsInputFormatSupported</strong> and <strong>IsOutputFormatSupported</strong> methods. An {{XAPO}} should assert the input and output configurations are supported and that any required effect-specific initialization is complete. The <strong>IsInputFormatSupported</strong>, <strong>IsOutputFormatSupported</strong>, and <strong>Initialize</strong> methods should be used as necessary before calling this method. </p><p>Because <strong>Process</strong> is a nonblocking method, all internal memory buffers required for <strong>Process</strong> should be allocated in <strong>LockForProcess</strong>. </p><p> <strong>Process</strong> is never called before <strong>LockForProcess</strong> returns successfully. </p><p><strong>LockForProcess</strong> is called directly by {{XAudio2}} and should not be called by the client code. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Deallocates variables that were allocated with the <strong>LockForProcess</strong> method.</p> + <p>Unlocking an {{XAPO}} instance allows it to be reused with different input and output formats.</p> + <p>This method does not return a value.</p> + + + + <p>Runs the {{XAPO}}'s digital signal processing ({{DSP}}) code on the given input and output buffers.</p> + <p>Implementations of this function should not block, as the function is called from the realtime audio processing thread. </p><p>All code that could cause a delay, such as format validation and memory allocation, should be put in the <strong>{{IXAPO::LockForProcess}}</strong> method, which is not called from the realtime audio processing thread. </p><p>For in-place processing, the <em>pInputProcessParameters</em> parameter will not necessarily be the same as <em>pOutputProcessParameters</em>. Rather, their <em>pBuffer</em> members will point to the same memory. </p><p>Multiple input and output buffers may be used with in-place {{XAPOs}}, though the input buffer count must equal the output buffer count. For in-place processing when multiple input and output buffers are used, the {{XAPO}} may assume the number of input buffers equals the number of output buffers. </p><p>In addition to writing to the output buffer, as appropriate, an {{XAPO}} is responsible for setting the output stream's buffer flags and valid frame count. </p><p>When <em>IsEnabled</em> is {{FALSE}}, the {{XAPO}} should not apply its normal processing to the given input/output buffers during. It should instead pass data from input to output with as little modification possible. Effects that perform format conversion should continue to do so. Effects must ensure transitions between normal and thru processing do not introduce discontinuities into the signal. </p><p>When writing a <strong>Process</strong> method, it is important to note {{XAudio2}} audio data is interleaved, which means data from each channel is adjacent for a particular sample number. For example, if there was a 4-channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, and so on. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of elements in pInputProcessParameters. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p> Input array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. </p> </dd> + + + <dd> <p>Number of elements in <em>pOutputProcessParameters</em>. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p>Output array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. On input, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the number of frames that the {{XAPO}} should write to the output buffer. On output, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the actual number of frames written.</p> </dd> + + + <dd> <p> {{TRUE}} to process normally; {{FALSE}} to process thru. See Remarks for additional information.</p> </dd> + + + + + <p>Returns the number of input frames required to generate the given number of output frames.</p> + <p>{{XAudio2}} calls this method to determine what size input buffer an {{XAPO}} requires to generate the given number of output frames. This method only needs to be called once while an {{XAPO}} is locked. <strong>CalcInputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of input frames required.</p> + + + <dd> <p> The number of output frames desired. +</p> </dd> + + + + + <p>Returns the number of output frames that will be generated from a given number of input frames.</p> + <p>{{XAudio2}} calls this method to determine how large of an output buffer an {{XAPO}} will require for a certain number of input frames. <strong>CalcOutputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of output frames that will be produced. </p> + + + <dd> <p> The number of input frames. +</p> </dd> + + + + + <p>An optional interface that allows an {{XAPO}} to use effect-specific parameters.</p> + + + + + <p>Sets effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::SetParameters}}</strong> function. The data passed to <strong>SetParameters</strong> can be used to set the state of the {{XAPO}} and control the behavior of the <strong>{{IXAPO::Process}}</strong> function. </p><p><strong>SetParameters</strong> can only be called on the real-time audio processing thread; no synchronization between <strong>SetParameters</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. However, the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> method may be called from any thread as it adds in the required synchronization to deliver a copy (asynchronously) of the parameters to <strong>SetParameters</strong> on the real-time thread; no synchronization between <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Gets the current values for any effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::GetParameters}}</strong> function. The data returned in <em>pParameters</em> can be used to provide information about the current state of the {{XAPO}}. </p><p>Unlike SetParameters, {{XAudio2}} does not call this method on the realtime audio processing thread. Thus, the {{XAPO}} must protect variables shared with <strong>{{IXAPOParameters::SetParameters}}</strong> or <strong>{{IXAPO::Process}}</strong> using appropriate synchronization. The <strong>{{CXAPOParametersBase}}</strong> class is an implementation of <strong>{{IXAPOParameters}}</strong> and its implementation of <strong>GetParameters</strong> efficiently handles this synchronization for the user. </p><p>{{XAudio2}} calls this method from the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p>This method may block and should never be called from the realtime audio processing thread instead get the current parameters from <strong>{{CXAPOParametersBase::BeginProcess}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives an effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Parameters for use with the {{FXEQ}} {{XAPO}}.</p> + <p>Each band ranges from <strong>FrequencyCenterN</strong> - (<strong>BandwidthN</strong> / 2) to <strong>FrequencyCenterN</strong> + (<strong>BandwidthN</strong> / 2). </p> + + + <dd> <p>Center frequency in Hz for band 0. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 0. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 0. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 1. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 1. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}}</p> </dd> + + + <dd> <p>Width of band 1. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + <dd> <p>Center frequency in Hz for band 2. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 2. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 2. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 3. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 3. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 3. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + + + <p>Parameters for use with the {{FXMasteringLimiter}} {{XAPO}}.</p> + + + + + <p>Parameters for use with the {{FXReverb}} {{XAPO}}.</p> + + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface.Value must be between {{FXREVERB_MIN_DIFFUSION}} and {{FXREVERB_MAX_DIFFUSION}}.</p> </dd> + + + <dd> <p>Size of the room. Value must be between {{FXREVERB_MIN_ROOMSIZE}} and {{FXREVERB_MAX_ROOMSIZE}}. Note that physical meaning of RoomSize is subjective and not tied to any particular units. A smaller value will result in reflections reaching the listener more quickly while reflections will take longer with larger values for RoomSize.</p> </dd> + + + + + <p>Initialization parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Use of this structure is optional. The default <strong>MaxDelay</strong> is <strong>{{FXECHO_DEFAULT_DELAY}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this functionality.? + + + + <p>Parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Echo only supports {{FLOAT32}} audio formats.</p> + + + + <p>Creates an instance of the requested {{XAPOFX}} effect.</p> + <p>The created {{XAPO}} will have a reference count of 1. Client code must call <strong>{{IUnknown::Release}}</strong> after passing the {{XAPO}} to {{XAudio2}} to allow {{XAudio2}} to dispose of the {{XAPO}} when it is no longer needed. Use <strong> {{IXAudio2::CreateSourceVoice}}</strong> or <strong>{{IXAudio2Voice::SetEffectChain}}</strong> to pass an {{XAPO}} to {{XAudio2}}. </p><strong>Note</strong>??The DirectX {{SDK}} version of this function doesn't have the <em>pInitData</em> or <em>InitDataByteSize</em> parameters as it only takes the first 2 parameters. To set initial parameters for the {{XAPOFX}} effect that is created with the DirectX {{SDK}} version of this function, you must bind that effect to a voice and use <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. +For info about how to do this, see How to: Use {{XAPOFX}} in {{XAudio2}}.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the current state of the Xbox 360 Controller.</p> + <p>This structure is used by the <strong>{{XINPUT_STATE}}</strong> structure when polling for changes in the state of the controller. </p><p>The specific mapping of button to game function varies depending on the game type. </p><p>The constant {{XINPUT_GAMEPAD_TRIGGER_THRESHOLD}} may be used as the value which <em>bLeftTrigger</em> and <em>bRightTrigger</em> must be greater than to register as pressed. This is optional, but often desirable. Xbox 360 Controller buttons do not manifest crosstalk. +</p> + + + <dd> <p>Bitmask of the device digital buttons, as follows. A set bit indicates that the corresponding button is pressed. </p> <table> <tr><th>Device button</th><th>Bitmask</th></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_UP}}</td><td> 0x0001</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_DOWN}}</td><td> 0x0002</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_LEFT}}</td><td> 0x0004</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_RIGHT}}</td><td> 0x0008</td></tr> <tr><td>{{XINPUT_GAMEPAD_START}}</td><td> 0x0010</td></tr> <tr><td>{{XINPUT_GAMEPAD_BACK}}</td><td> 0x0020</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_THUMB}}</td><td> 0x0040</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_THUMB}}</td><td> 0x0080</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_SHOULDER}}</td><td> 0x0100</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_SHOULDER}}</td><td> 0x0200</td></tr> <tr><td>{{XINPUT_GAMEPAD_A}}</td><td> 0x1000</td></tr> <tr><td>{{XINPUT_GAMEPAD_B}}</td><td> 0x2000</td></tr> <tr><td>{{XINPUT_GAMEPAD_X}}</td><td> 0x4000</td></tr> <tr><td>{{XINPUT_GAMEPAD_Y}}</td><td> 0x8000</td></tr> </table> <p>?</p> <p>Bits that are set but not defined above are reserved, and their state is undefined. </p> </dd> + + + <dd> <p>The current value of the left trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>The current value of the right trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>Left thumbstick x-axis value. Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick. A value of 0 is centered. Negative values signify down or to the left. Positive values signify up or to the right. The constants {{XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE}} or {{XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE}} can be used as a positive and negative value to filter a thumbstick input. +</p> </dd> + + + <dd> <p>Left thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick x-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + + + <p>Represents the state of a controller.</p> + <p>The <em>dwPacketNumber</em> member is incremented only if the status of the controller has changed since the controller was last polled. </p> + + + <dd> <p>State packet number. The packet number indicates whether there have been any changes in the state of the controller. If the <em>dwPacketNumber</em> member is the same in sequentially returned <strong>{{XINPUT_STATE}}</strong> structures, the controller state has not changed.</p> </dd> + + + <dd> <p> <strong>{{XINPUT_GAMEPAD}}</strong> structure containing the current state of an Xbox 360 Controller.</p> </dd> + + + + + <p>Specifies motor speed levels for the vibration function of a controller.</p> + <p>The left motor is the low-frequency rumble motor. The right motor is the high-frequency rumble motor. The two motors are not the same, and they create different vibration effects.</p> + + + <dd> <p>Speed of the left motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + <dd> <p>Speed of the right motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies keystroke data returned by <strong>{{XInputGetKeystroke}}</strong>.</p> + <p>Future devices may return {{HID}} codes and virtual key values that are not supported on current devices, and are currently undefined. Applications should ignore these unexpected values. </p><p>A <em>virtual-key</em> code is a byte value that represents a particular physical key on the keyboard, not the character or characters (possibly none) that the key can be mapped to based on keyboard state. The keyboard state at the time a virtual key is pressed modifies the character reported. For example, {{VK_4}} might represent a "4" or a "$", depending on the state of the {{SHIFT}} key. </p><p>A reported keyboard event includes the virtual key that caused the event, whether the key was pressed or released (or is repeating), and the state of the keyboard at the time of the event. The keyboard state includes information about whether any {{CTRL}}, {{ALT}}, or {{SHIFT}} keys are down. </p><p>If the keyboard event represents an Unicode character (for example, pressing the "A" key), the <em>Unicode</em> member will contain that character. Otherwise, <em>Unicode</em> will contain the value zero. </p><p>The valid virtual-key ({{VK_xxx}}) codes are defined in {{XInput}}.h. In addition to codes that indicate key presses, the following codes indicate controller input. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{VK_PAD_A}}</td><td><strong>A</strong> button?</td></tr> <tr><td>{{VK_PAD_B}}</td><td><strong>B</strong> button?</td></tr> <tr><td>{{VK_PAD_X}}</td><td><strong>X</strong> button?</td></tr> <tr><td>{{VK_PAD_Y}}</td><td><strong>Y</strong> button?</td></tr> <tr><td>{{VK_PAD_RSHOULDER}}</td><td>Right shoulder button?</td></tr> <tr><td>{{VK_PAD_LSHOULDER}}</td><td>Left shoulder button?</td></tr> <tr><td>{{VK_PAD_LTRIGGER}}</td><td>Left trigger?</td></tr> <tr><td>{{VK_PAD_RTRIGGER}}</td><td>Right trigger?</td></tr> <tr><td>{{VK_PAD_DPAD_UP}}</td><td>Directional pad up?</td></tr> <tr><td>{{VK_PAD_DPAD_DOWN}}</td><td>Directional pad down?</td></tr> <tr><td>{{VK_PAD_DPAD_LEFT}}</td><td>Directional pad left?</td></tr> <tr><td>{{VK_PAD_DPAD_RIGHT}}</td><td>Directional pad right?</td></tr> <tr><td>{{VK_PAD_START}}</td><td><strong>{{START}}</strong> button?</td></tr> <tr><td>{{VK_PAD_BACK}}</td><td><strong>{{BACK}}</strong> button?</td></tr> <tr><td>{{VK_PAD_LTHUMB_PRESS}}</td><td>Left thumbstick click?</td></tr> <tr><td>{{VK_PAD_RTHUMB_PRESS}}</td><td>Right thumbstick click?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UP}}</td><td>Left thumbstick up?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWN}}</td><td>Left thumbstick down?</td></tr> <tr><td>{{VK_PAD_LTHUMB_RIGHT}}</td><td>Left thumbstick right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_LEFT}}</td><td>Left thumbstick left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPLEFT}}</td><td>Left thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPRIGHT}}</td><td>Left thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNRIGHT}}</td><td>Left thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNLEFT}}</td><td>Left thumbstick down and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UP}}</td><td>Right thumbstick up?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWN}}</td><td>Right thumbstick down?</td></tr> <tr><td>{{VK_PAD_RTHUMB_RIGHT}}</td><td>Right thumbstick right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_LEFT}}</td><td>Right thumbstick left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPLEFT}}</td><td>Right thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPRIGHT}}</td><td>Right thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNRIGHT}}</td><td>Right thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNLEFT}}</td><td>Right thumbstick down and left?</td></tr> </table><p>?</p> + + + + <p>Retrieves the current state of the specified controller.</p> + <p>When <strong>{{XInputGetState}}</strong> is used to retrieve controller data, the left and right triggers are each reported separately. For legacy reasons, when DirectInput retrieves controller data, the two triggers share the same axis. The legacy behavior is noticeable in the current Game Device Control Panel, which uses DirectInput for controller state.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_STATE}}</strong> structure that receives the current state of the controller.</p> </dd> + + + + + <p>Sends data to a connected controller. This function is used to activate the vibration function of a controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>.</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_VIBRATION}}</strong> structure containing the vibration information to send to the controller.</p> </dd> + + + + + <p>Retrieves the capabilities and features of a connected controller.</p> + <strong>Note</strong>??The legacy {{XINPUT}} 9.1.0 version (included in Windows?Vista and later) always returned a fixed set of capabilities regardless of attached device.? + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value in the range 0?3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers. </p> </dd> + + + <dd> <p>Input flags that identify the controller type. If this value is 0, then the capabilities of all controllers connected to the system are returned. Currently, only one value is supported:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{XINPUT_FLAG_GAMEPAD}}</strong></td><td>Limit query to devices of Xbox 360 Controller type.</td></tr> </table> <p>?</p> <p>Any value of <em>dwflags</em> other than the above or 0 is illegal and will result in an error break when debugging.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_CAPABILITIES}}</strong> structure that receives the controller capabilities.</p> </dd> + + + + + <p>Sets the reporting state of {{XInput}}.</p> + <p>This function is meant to be called when an application gains or loses focus (such as via <strong>{{WM_ACTIVATEAPP}}</strong>). Using this function, you will not have to change the {{XInput}} query loop in your application as neutral data will always be reported if {{XInput}} is disabled. +</p><p>In a controller that supports vibration effects:</p><ul> <li>Passing <strong>{{FALSE}}</strong> will stop any vibration effects currently playing. In this state, calls to <strong>{{XInputSetState}}</strong> will be registered, but not passed to the device.</li> <li>Passing <strong>{{TRUE}}</strong> will pass the last vibration request (even if it is 0) sent to <strong>{{XInputSetState}}</strong> to the device.</li> </ul> + <p>This function does not return a value.</p> + + + <dd> <p>If enable is <strong>{{FALSE}}</strong>, {{XInput}} will only send neutral data in response to <strong>{{XInputGetState}}</strong> (all buttons up, axes centered, and triggers at 0). <strong>{{XInputSetState}}</strong> calls will be registered but not sent to the device. Sending any value other than <strong>{{FALSE}} </strong>will restore reading and writing functionality to normal.</p> </dd> + + + + + <p>Retrieves the sound rendering and sound capture audio device {{IDs}} that are associated with the headset connected to the specified controller.</p> + <p>Callers must allocate the memory for the buffers passed to <strong>{{XInputGetAudioDeviceIds}}</strong>. The resulting strings can be of arbitrary length.</p> + <p>If the function successfully retrieves the device {{IDs}} for render and capture, the return code is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If there is no headset connected to the controller, the function will also retrieve <strong>{{ERROR_SUCCESS}}</strong> with <strong>{{NULL}}</strong> as the values for <em>pRenderDeviceId</em> and <em>pCaptureDeviceId</em>. +</p><p>If the controller port device is not physically connected, the function will return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, it will return a valid Win32 error code. +</p> + + + <dd> <p> Index of the gamer associated with the device.</p> </dd> + + + <dd> <p> Windows Core Audio device {{ID}} string for render (speakers).</p> </dd> + + + <dd> <p> Size, in wide-chars, of the render device {{ID}} string buffer.</p> </dd> + + + <dd> <p>Windows Core Audio device {{ID}} string for capture (microphone).</p> </dd> + + + <dd> <p>Size, in wide-chars, of capture device {{ID}} string buffer.</p> </dd> + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + <p>A multithread interface accesses multithread settings and can only be used if the thread-safe layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D10Device}} Interface</strong> using {{IUnknown::QueryInterface}}.</p> + + + + <p>Enter a device's critical section.</p> + <p>Entering a device's critical section prevents other threads from simultaneously calling that device's methods (if <strong>multithread protection</strong> is set to true), calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>{{ID3D10Multithread::Leave}}</strong> is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>{{ID3D10Multithread::Enter}}</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Turn multithreading on or off.</p> + <p>True if multithreading was turned on prior to calling this method, false otherwise.</p> + + + <dd> <p>True to turn multithreading on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithreading is turned on or not.</p> + <p>Whether or not multithreading is turned on. True means on, false means off.</p> + + + + <p> The +<strong>{{LOCKTYPE}}</strong> enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the +<strong>{{ILockBytes::LockRegion}}</strong> and +<strong>{{IStream::LockRegion}}</strong> methods.</p> + + + + <p> The +<strong>{{STATSTG}}</strong> structure contains statistical data about an open storage, stream, or byte-array object. This structure is used in the +<strong>{{IEnumSTATSTG}}</strong>, +<strong>{{ILockBytes}}</strong>, +<strong>{{IStorage}}</strong>, and +<strong>{{IStream}}</strong> interfaces.</p> + + + + <p> The +<strong>{{ISequentialStream}}</strong> interface supports simplified sequential access to stream objects. The +<strong>{{IStream}}</strong> interface inherits its +<strong>Read</strong> and +<strong>Write</strong> methods from +<strong>{{ISequentialStream}}</strong>.</p> + + + + <p>Reads a specified number of bytes from the stream object into memory starting at the current read/write location within the stream.</p> + + + <dd><p>[in] +Points to the buffer into which the stream is read. If an error occurs, this value is {{NULL}}.</p></dd> + + + <dd><p>[in] +Specifies the number of bytes of data to attempt to read from the stream object.</p></dd> + + + <dd><p>[out] +Pointer to a location where this method writes the actual number of bytes read from the stream object. You can set this reference to {{NULL}} to indicate that you are not interested in this value. In this case, this method does not provide the actual number of bytes read.</p></dd> + + + + + <p>Writes a specified number of bytes into the stream object starting at the current read/write location within the stream.</p> + + + <dd><p>[in] Points to the buffer into which the stream should be written.</p></dd> + + + <dd><p>[in] The number of bytes of data to attempt to write into the stream.</p></dd> + + + <dd><p>[out] Pointer to a location where this method writes the actual number of bytes written to the stream object. The caller can set this reference to {{NULL}}, in which case this method does not provide the actual number of bytes written.</p></dd> + + + + + <p> The +<strong>{{IStream}}</strong> interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.</p><p>The +<strong>{{IStream}}</strong> interface defines methods similar to the {{MS}}-{{DOS}} {{FAT}} file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a {{DOS}} file and a stream object is that in the latter case, streams are opened using an +<strong>{{IStream}}</strong> interface reference rather than a file handle.</p><p>The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.</p><p>Streams can remain open for long periods of time without consuming file-system resources. The <strong>{{IUnknown::Release}}</strong> method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.</p><p>Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous +<strong>{{IMoniker::BindToStorage}}</strong> operation and for receiving asynchronous notifications. See +{{URL}} Monikers for more information. The following table compares the behavior of asynchronous +<strong>{{ISequentialStream::Read}}</strong> and +<strong>{{IStream::Seek}}</strong> calls returned in <strong>{{IBindStatusCallback::OnDataAvailable}}</strong> in these two download models:</p> + + + + <p> The <strong>Seek</strong> method changes the seek reference to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek reference.</p> + <p><strong>{{IStream::Seek}}</strong> changes the seek reference so that subsequent read and write operations can be performed at a different location in the stream object. It is an error to seek before the beginning of the stream. It is not, however, an error to seek past the end of the stream. Seeking past the end of the stream is useful for subsequent write operations, as the stream byte range will be extended to the new seek position immediately before the write is complete.</p><p>You can also use this method to obtain the current value of the seek reference by calling this method with the <em>dwOrigin</em> parameter set to <strong>{{STREAM_SEEK_CUR}}</strong> and the <em>dlibMove</em> parameter set to 0 so that the seek reference is not changed. The current seek reference is returned in the <em>plibNewPosition</em> parameter.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The seek reference was successfully adjusted.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>Indicates that the [out] parameter <em>plibNewPosition</em> points to invalid memory, because <em>plibNewPosition</em> is not read.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The <em>dwOrigin</em> parameter contains an invalid value, or the <em>dlibMove</em> parameter contains a bad offset value. For example, the result of the seek reference is a negative offset value.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>The displacement to be added to the location indicated by the <em>dwOrigin</em> parameter. If <em>dwOrigin</em> is <strong>{{STREAM_SEEK_SET}}</strong>, this is interpreted as an unsigned value rather than a signed value.</p> </dd> + + + <dd> <p>The origin for the displacement specified in <em>dlibMove</em>. The origin can be the beginning of the file (<strong>{{STREAM_SEEK_SET}}</strong>), the current seek reference (<strong>{{STREAM_SEEK_CUR}}</strong>), or the end of the file (<strong>{{STREAM_SEEK_END}}</strong>). For more information about values, see the <strong>{{STREAM_SEEK}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the value of the new seek reference from the beginning of the stream. </p> <p>You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the new seek reference.</p> </dd> + + + + + <p>The <strong>SetSize</strong> method changes the size of the stream object.</p> + <p><strong>{{IStream::SetSize}}</strong> changes the size of the stream object. Call this method to preallocate space for the stream. If the <em>libNewSize</em> parameter is larger than the current stream size, the stream is extended to the indicated size by filling the intervening space with bytes of undefined value. This operation is similar to the +<strong>{{ISequentialStream::Write}}</strong> method if the seek reference is past the current end of the stream.</p><p>If the <em>libNewSize</em> parameter is smaller than the current stream, the stream is truncated to the indicated size.</p><p>The seek reference is not affected by the change in stream size.</p><p>Calling <strong>{{IStream::SetSize}}</strong> can be an effective way to obtain a large chunk of contiguous space.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The size of the stream object was successfully changed.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream size is not changed because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The value of the <em>libNewSize</em> parameter is not supported by the implementation. Not all streams support greater than 2?? bytes. If a stream does not support more than 2?? bytes, the high <strong>{{DWORD}}</strong> data type of <em>libNewSize</em> must be zero. If it is nonzero, the implementation may return {{STG_E_INVALIDFUNCTION}}. In general, {{COM}}-based implementations of the <strong>{{IStream}}</strong> interface do not support streams larger than 2?? bytes.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Specifies the new size, in bytes, of the stream.</p> </dd> + + + + + <p>The <strong>CopyTo</strong> method copies a specified number of bytes from the current seek reference in the stream to the current seek reference in another stream.</p> + <p>The <strong>CopyTo</strong> method copies the specified bytes from one stream to another. It can also be used to copy a stream to itself. The seek reference in each stream instance is adjusted for the number of bytes read or written. This method is equivalent to reading <em>cb</em> bytes into memory using +<strong>{{ISequentialStream::Read}}</strong> and then immediately writing them to the destination stream using +<strong>{{ISequentialStream::Write}}</strong>, although <strong>{{IStream::CopyTo}}</strong> will be more efficient.</p><p>The destination stream can be a clone of the source stream created by calling the +<strong>{{IStream::Clone}}</strong> method.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns an error, you cannot assume that the seek references are valid for either the source or destination. Additionally, the values of <em>pcbRead</em> and <em>pcbWritten</em> are not meaningful even though they are returned.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns successfully, the actual number of bytes read and written are the same.</p><p>To copy the remainder of the source from the current seek reference, specify the maximum large integer value for the <em>cb</em> parameter. If the seek reference is the beginning of the stream, this operation copies the entire stream.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream object was successfully copied.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the data to be copied is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The value of one of the reference parameters is invalid.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream is not copied because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>A reference to the destination stream. The stream pointed to by <em>pstm</em> can be a new stream or a clone of the source stream.</p> </dd> + + + <dd> <p>The number of bytes to copy from the source stream.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes read from the source. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes read.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes written to the destination. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes written.</p> </dd> + + + + + <p>The <strong>Commit</strong> method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, <strong>{{IStream::Commit}}</strong> has no effect other than flushing all memory buffers to the next-level storage object. The {{COM}} compound file implementation of streams does not support opening streams in transacted mode.</p> + <p>The <strong>Commit</strong> method ensures that changes to a stream object opened in transacted mode are reflected in the parent storage. Changes that have been made to the stream since it was opened or last committed are reflected to the parent storage object. If the parent is opened in transacted mode, the parent may revert at a later time, rolling back the changes to this stream object. The compound file implementation does not support the opening of streams in transacted mode, so this method has very little effect other than to flush memory buffers. For more information, see +{{IStream}} - Compound File Implementation.</p><p>If the stream is open in direct mode, this method ensures that any memory buffers have been flushed out to the underlying storage object. This is much like a flush in traditional file systems.</p><p>The <strong>{{IStream::Commit}}</strong> method is useful on a direct mode stream when the implementation of the +<strong>{{IStream}}</strong> interface is a wrapper for underlying file system {{APIs}}. In this case, <strong>{{IStream::Commit}}</strong> would be connected to the file system's flush call.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>Changes to the stream object were successfully committed to the parent level.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The commit operation failed due to lack of space on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Controls how the changes for the stream object are committed. See the +<strong>{{STGC}}</strong> enumeration for a definition of these values.</p> </dd> + + + + + <p>The <strong>Revert</strong> method discards all changes that have been made to a transacted stream since the last +<strong>{{IStream::Commit}}</strong> call. On streams open in direct mode and streams using the {{COM}} compound file implementation of <strong>{{IStream::Revert}}</strong>, this method has no effect.</p> + <p>The <strong>Revert</strong> method discards changes made to a transacted stream since the last commit operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully reverted to its previous version.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> </dl> + + + + + + + + + + <p> The <strong>Stat</strong> method retrieves the +<strong>{{STATSTG}}</strong> structure for this stream.</p> + <p><strong>{{IStream::Stat}}</strong> retrieves a reference to the +<strong>{{STATSTG}}</strong> structure that contains information about this open stream. When this stream is within a structured storage and +<strong>{{IStorage::EnumElements}}</strong> is called, it creates an enumerator object with the +<strong>{{IEnumSTATSTG}}</strong> interface on it, which can be called to enumerate the storages and streams through the +<strong>{{STATSTG}}</strong> structures associated with each of them.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was successfully returned at the specified location.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_ACCESSDENIED}}</strong></dt> <dd> <p>The caller does not have enough permissions for accessing statistics for this storage object.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was not returned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDFLAG}}</strong></dt> <dd> <p>The value for the <em>grfStateFlag</em> parameter is not valid.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>pStatStg</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + + <p> The <strong>Clone</strong> method creates a new stream object with its own seek reference that references the same bytes as the original stream.</p> + <p>The <strong>Clone</strong> method creates a new stream object for accessing the same bytes but using a separate seek reference. The new stream object sees the same data as the source-stream object. Changes written to one object are immediately visible in the other. Range locking is shared between the stream objects.</p><p>The initial setting of the seek reference in the cloned stream instance is the same as the current setting of the seek reference in the original stream at the time of the clone operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully cloned.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The stream was not cloned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>ppStm</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>When successful, reference to the location of an +<strong>{{IStream}}</strong> reference to the new stream object. If an error occurs, this parameter is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> The +<strong>{{STGC}}</strong> enumeration constants specify the conditions for performing the commit operation in the +<strong>{{IStorage::Commit}}</strong> and +<strong>{{IStream::Commit}}</strong> methods.</p> + <p>You can specify <strong>{{STGC_DEFAULT}}</strong> or some combination of <strong>{{STGC_OVERWRITE}}</strong>, <strong>{{STGC_ONLYIFCURRENT}}</strong>, and <strong>{{STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE}}</strong> for normal commit operations. You can specify <strong>{{STGC_CONSOLIDATE}}</strong> with any other {{STGC}} flags.</p><p>Typically, use <strong>{{STGC_ONLYIFCURRENT}}</strong> to protect the storage object in cases where more than one user can edit the object simultaneously.</p> + + + + <p> The +<strong>{{STATFLAG}}</strong> enumeration values indicate whether the method should try to return a name in the <strong>pwcsName</strong> member of the +<strong>{{STATSTG}}</strong> structure. The values are used in the +<strong>{{ILockBytes::Stat}}</strong>, +<strong>{{IStorage::Stat}}</strong>, and +<strong>{{IStream::Stat}}</strong> methods to save memory when the <strong>pwcsName</strong> member is not required.</p> + + + + <p> </p><p>The <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration defines constants that indicate whether an audio stream will run in shared mode or in exclusive mode.</p> + <p>The <strong>{{IAudioClient::Initialize}}</strong> and <strong>{{IAudioClient::IsFormatSupported}}</strong> methods use the constants defined in the <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration.</p><p>In shared mode, the client can share the audio endpoint device with clients that run in other user-mode processes. The audio engine always supports formats for client streams that match the engine's mix format. In addition, the audio engine might support another format if the Windows audio service can insert system effects into the client stream to convert the client format to the mix format.</p><p>In exclusive mode, the Windows audio service attempts to establish a connection in which the client has exclusive access to the audio endpoint device. In this mode, the audio engine inserts no system effects into the local stream to aid in the creation of the connection point. Either the audio device can handle the specified format directly or the method fails.</p><p>For more information about shared-mode and exclusive-mode streams, see User-Mode Audio Components.</p> + + + <dd> <p>The audio stream will run in shared mode. For more information, see Remarks.</p> </dd> + + + <dd> <p>The audio stream will run in exclusive mode. For more information, see Remarks.</p> </dd> + + + + + <p>Specifies the category of an audio stream.</p> + <p>Note that only a subset of the audio stream categories are valid for certain stream types.</p><table> <tr><th>Stream type</th><th>Valid categories</th></tr> <tr><td>Render stream</td><td>All categories are valid.</td></tr> <tr><td>Capture stream</td><td>AudioCategory_Communications, AudioCategory_Speech, AudioCategory_Other</td></tr> <tr><td>Loopback stream</td><td>AudioCategory_Other</td></tr> </table><p>?</p><p>Games should categorize their music streams as <strong>AudioCategory_GameMedia</strong> so that game music mutes automatically if another application plays music in the background. Music or video applications should categorize their streams as <strong>AudioCategory_Media</strong> or <strong>AudioCategory_Movie</strong> so they will take priority over <strong>AudioCategory_GameMedia</strong> streams.</p><p>The values <strong>AudioCategory_ForegroundOnlyMedia</strong> and <strong>AudioCategory_BackgroundCapableMedia</strong> are deprecated. For Windows Store apps, these values will continue to function the same when running on Windows?10 as they did on Windows?8.1. Attempting to use these values in a Universal Windows Platform ({{UWP}}) app, will result in compilation errors and an exception at runtime. Using these values in a Windows desktop application built with the Windows?10 {{SDK}} the will result in a compilation error.</p> + + + <dd> <p>Other audio stream.</p> </dd> + + + <dd> <p>Media that will only stream when the app is in the foreground. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Media that can be streamed when the app is in the background. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Real-time communications, such as {{VOIP}} or chat.</p> </dd> + + + <dd> <p>Alert sounds.</p> </dd> + + + <dd> <p>Sound effects.</p> </dd> + + + <dd> <p>Game sound effects.</p> </dd> + + + <dd> <p>Background audio for games.</p> </dd> + + + <dd> <p>Game chat audio. Similar to <strong>AudioCategory_Communications</strong> except that <strong>AudioCategory_GameChat</strong> will not attenuate other streams.</p> </dd> + + + <dd> <p>Speech.</p> </dd> + + + <dd> <p>Stream that includes audio with dialog.</p> </dd> + + + <dd> <p>Stream that includes audio without dialog.</p> </dd> + + + + + <p> </p><p>The <strong>AudioSessionState</strong> enumeration defines constants that indicate the current state of an audio session.</p> + <p>When a client opens a session by assigning the first stream to the session (by calling the <strong>{{IAudioClient::Initialize}}</strong> method), the initial session state is inactive. The session state changes from inactive to active when a stream in the session begins running (because the client has called the <strong>{{IAudioClient::Start}}</strong> method). The session changes from active to inactive when the client stops the last running stream in the session (by calling the <strong>{{IAudioClient::Stop}}</strong> method). The session state changes to expired when the client destroys the last stream in the session by releasing all references to the stream object.</p><p>The system volume-control program, Sndvol, displays volume controls for both active and inactive sessions. Sndvol stops displaying the volume control for a session when the session state changes to expired. For more information about Sndvol, see Audio Sessions.</p><p>The <strong>{{IAudioSessionControl::GetState}}</strong> and <strong>{{IAudioSessionEvents::OnStateChanged}}</strong> methods use the constants defined in the <strong>AudioSessionState</strong> enumeration.</p><p>For more information about session states, see Audio Sessions.</p> + + + <dd> <p>The audio session is inactive. (It contains at least one stream, but none of the streams in the session is currently running.)</p> </dd> + + + <dd> <p>The audio session is active. (At least one of the streams in the session is running.)</p> </dd> + + + <dd> <p>The audio session has expired. (It contains no streams.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + + + + + + + + + + <p>Status codes that can be returned by {{DXGI}} functions.</p><p></p> + <p>The <strong>{{HRESULT}}</strong> value for each <strong>{{DXGI_STATUS}}</strong> value is determined from this macro that is defined in {{DXGItype}}.h:</p><pre> #define _FACDXGI 0x87a +#define {{MAKE_DXGI_STATUS}}(code) {{MAKE_HRESULT}}(0, _FACDXGI, code) +</pre><p>For example, <strong>{{DXGI_STATUS_OCCLUDED}}</strong> is defined as <strong>0x087A0001</strong>:</p><pre> #define {{DXGI_STATUS_OCCLUDED}} {{MAKE_DXGI_STATUS}}(1) +</pre> + + + + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>{{XAudio2}} constants that specify default parameters, maximum values, and flags.</p><p> </p><p><strong>{{XAudio2}} boundary values</strong></p> + + + + + + + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + + + + + + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>A table of controller subtypes available in {{XInput}}.</p> + + + + + + + + + + + + + + + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + + + + + + + + + + + + + + + + <p>Represents a virtual adapter. This interface extends <strong>Id3d12device2</strong> to support the creation of special-purpose diagnostic heaps in system memory that persist even in the event of a {{GPU}}-fault or device-removed scenario.</p><strong>Note</strong> This interface, introduced in the Windows 10 Fall Creators Update, is the latest version of the <strong>{{ID3D12Device}}</strong> interface. Applications targeting the Windows 10 Fall Creators Update and later should use this interface instead of earlier versions. + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device.</p> + + + + <p>Specifies the type of unit contained in an <strong>{{IMFSample}}</strong> in a {{MFSampleExtension_ForwardedDecodeUnits}} collection.</p> + + + + + + + + <p>Gets the {{ID}} of the process with which the activity is associated.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pPID</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Part of a contract between {{D3D11On12}} diagnostic layers and graphics diagnostics tools. This interface facilitates diagnostics tools to capture information at a lower level than the {{DXGI}} swapchain.</p> + + + + + + + + + + <p>Represents the activity of a process associated with a sensor.</p> + + + + <p>Gets an <strong>{{IMFSensorProcessActivity}}</strong> object representing the current process activity of a sensor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppProcessActivity</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Gets the streaming mode of the sensor process.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pMode</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Gets the count of <strong>{{IMFSensorActivityReport}}</strong> objects that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified device name.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>symbolicName</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The system is out of memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No sensor with the specified symbolic name was found.</p> </td></tr> </table><p> </p> + + + + <p>Represents an activity report for a sensor.</p> + + + + <p>Gets the symbolic link for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor symbolic link is written.</p> </dd> + + + <dd> <p>The character count of the <em>SymbolicLink</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>SymbolicLink</em> string.</p> </dd> + + + + + <p>Interface implemented by the client to receive callbacks when sensor activity reports are available.</p> + <p>Register the callback by passing an implementation of this interface into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Gets a value indicating whether the sensor is currently streaming.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pfStreaming</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a value indicating whether the sensor is currently streaming.</p> </dd> + + + + + <p>Raised by the media pipeline when a new <strong>{{IMFSensorActivitiesReport}}</strong> is available.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the count of <strong>{{IMFSensorProcessActivity}}</strong> objects, representing the current activity of a process associated with the sensor, that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pulCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Provides methods for controlling a sensor activity monitor.</p> + <p>Get an instance of this class by calling <strong>{{MFCreateSensorActivityMonitor}}</strong>. Sensor activity reports are delivered through the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface passed into this method.</p> + + + + <p>Stops the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p> </p> + + + + <p>Gets the time associated with the sensor activity report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pft</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the time associated with the sensor activity report.</p> </dd> + + + + + + + + <p>Gets the friendly name for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor friendly name is written.</p> </dd> + + + <dd> <p>The character count of the <em>FriendlyName</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>FriendlyName</em> string.</p> </dd> + + + + + + + + <p>Provides access to <strong>{{IMFSensorActivityReport}}</strong> objects that describe the current activity of a sensor.</p> + <p>Register to receive sensor activities reports by implementing the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface and passing the implementation into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> </table><p> </p> + + + + <p>Starts the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The sensor activity monitor has already been started.</p> </td></tr> </table><p> </p> + + + + <p>Initializes a new instance of the <strong>{{IMFSensorActivityMonitor}}</strong> interface.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppActivityMonitor</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + + + + + + + + + + + + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows 8. + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows {{XP}} with Service Pack 2 ({{SP2}}) and later.</li> <li>Windows {{XP}} Media Center Edition 2005 with {{KB900325}} (Windows {{XP}} Media Center Edition 2005) and {{KB925766}} (October 2006 Update Rollup for Windows {{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Increments the reference count for an interface on an object. This method should be called for every new copy of a reference to an interface on an object.</p> + <p>Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use <strong>AddRef</strong> to stabilize a copy of an interface reference. It can also be called when the life of a cloned reference must extend beyond the lifetime of the original reference. The cloned reference must be released by calling <strong>{{IUnknown::Release}}</strong>.</p><p>The internal reference counter that <strong>AddRef</strong> maintains should be a 32-bit unsigned integer.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Retrieves references to the supported interfaces on an object.</p><p>This method calls <strong>{{IUnknown::AddRef}}</strong> on the reference it returns.</p> + <p>For any one object, a specific query for the <strong>{{IUnknown}}</strong> interface on any of the object's interfaces must always return the same reference value. This enables a client to determine whether two references point to the same component by calling <strong>QueryInterface</strong> with {{IID_IUnknown}} and comparing the results. It is specifically not the case that queries for interfaces other than {{IUnknown}} (even the same interface through the same reference) must return the same reference value.</p><p>There are four requirements for implementations of <strong>QueryInterface</strong> (In these cases, "must succeed" means "must succeed barring catastrophic failure."):</p><ul> <li> <p>The set of interfaces accessible on an object through <strong>QueryInterface</strong> must be static, not dynamic. This means that if a call to <strong>QueryInterface</strong> for a reference to a specified interface succeeds the first time, it must succeed again, and if it fails the first time, it must fail on all subsequent queries.</p> </li> <li> <p>It must be reflexive — if a client holds a reference to an interface on an object, and queries for that interface, the call must succeed.</p> </li> <li> <p>It must be symmetric — if a client holding a reference to one interface queries successfully for another, a query through the obtained reference for the first interface must succeed.</p> </li> <li> <p>It must be transitive — if a client holding a reference to one interface queries successfully for a second, and through that reference queries successfully for a third interface, a query for the first interface through the reference for the third interface must succeed.</p> </li> </ul> + <p>This method returns {{S_OK}} if the interface is supported, and {{E_NOINTERFACE}} otherwise. If <em>ppvObject</em> is <strong>{{NULL}}</strong>, this method returns {{E_POINTER}}.</p> + + + + <p>Decrements the reference count for an interface on an object.</p> + <p>When the reference count on an object reaches zero, <strong>Release</strong> must cause the interface reference to free itself. When the released reference is the only existing reference to an object (whether the object supports single or multiple interfaces), the implementation must free the object.</p><p>Note that aggregation of objects restricts the ability to recover interface references.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Enables clients to get references to other interfaces on a given object through the <strong>QueryInterface</strong> method, and manage the existence of the object through the <strong>AddRef</strong> and <strong>Release</strong> methods. All other {{COM}} interfaces are inherited, directly or indirectly, from <strong>{{IUnknown}}</strong>. Therefore, the three methods in <strong>{{IUnknown}}</strong> are the first entries in the {{VTable}} for every interface. +</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Describes a sensor profile {{ID}}.</p> + + + <dd> <p>A <strong>Sensor Profile {{GUID}}</strong> that describes the type of sensor profile. </p> </dd> + + + <dd> <p>The index of the sensor profile.</p> </dd> + + + <dd> <p>Not currently used.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/DocumentationCache/netstandard1.1/DocumentationCache.xml b/Source/DocumentationCache/netstandard1.1/DocumentationCache.xml new file mode 100644 index 000000000..dab56a9b6 --- /dev/null +++ b/Source/DocumentationCache/netstandard1.1/DocumentationCache.xml @@ -0,0 +1,76750 @@ + + + + + <p>Type of data contained in an input slot.</p> + <p>Use these values to specify the type of data for a particular input element (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>) of an input-layout object.</p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Determines the fill mode to use when rendering triangles.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Indicates triangles facing a particular direction are not drawn.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p>This enumeration is used in <strong>{{ID3D11Resource::GetType}}</strong>. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>This enumeration is used in <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> to create a depth-stencil view.</p> + + + <dd> <p><em>{{D3D11_DSV_DIMENSION_UNKNOWN}}</em> is not a valid value for <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + + + <p>These flags identify the type of resource that will be viewed as a render target.</p> + <p>This enumeration is used in <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> to create a render-target view.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Unordered-access view options.</p> + <p> This enumeration is used by a unordered access-view description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>). </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the {{CPU}} and/or the graphics processing unit ({{GPU}}).</p> + <p>An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>, and <strong>{{D3D11_BUFFER_DESC}}</strong>.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10/11:</p> <p>In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using {{D3DPOOL}}). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.</p> <p>In Direct3D 10/11, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A resource that requires read and write access by the {{GPU}}. This is likely to be the most common usage choice.</p> </dd> + + + <dd> <p>A resource that can only be read by the {{GPU}}. It cannot be written by the {{GPU}}, and cannot be accessed at all by the {{CPU}}. This type of resource must be initialized when it is created, since it cannot be changed after creation.</p> </dd> + + + <dd> <p>A resource that is accessible by both the {{GPU}} (read only) and the {{CPU}} (write only). A dynamic resource is a good choice for a resource that will be updated by the {{CPU}} at least once per frame. To update a dynamic resource, use a <strong>Map</strong> method.</p> <p>For info about how to use dynamic resources, see How to: Use dynamic resources. </p> </dd> + + + <dd> <p>A resource that supports data transfer (copy) from the {{GPU}} to the {{CPU}}.</p> </dd> + + + + + <p>Identifies how to bind a resource to the pipeline.</p> + <p>In general, binding flags can be combined using a logical {{OR}} (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.</p><p>This enumeration is used by a:</p><ul> <li> <strong>Buffer description</strong> when creating a buffer.</li> <li>Texture description when creating a texture (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong> or <strong>{{D3D11_TEXTURE2D_DESC}}</strong> or <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</li> </ul><p>A shader-resource buffer is {{NOT}} a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the {{D3D11_BIND_SHADER_RESOURCE}} flag and is bound to the pipeline using one of these {{APIs:}} <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>, or <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>. Furthermore, a shader-resource buffer cannot use the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p><strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.? + + + <dd> <p>Bind a buffer as a vertex buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as an index buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as a constant buffer to a shader stage; this flag may {{NOT}} be combined with any other bind flag.</p> </dd> + + + <dd> <p>Bind a buffer or texture to a shader stage; this flag cannot be used with the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + <dd> <p>Bind an output buffer for the stream-output stage.</p> </dd> + + + <dd> <p>Bind a texture as a render target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind a texture as a depth-stencil target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind an unordered access resource.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive output from the decoder {{API}}. The common way to create resources for a decoder output is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive input from the video encoder {{API}}. The common way to create resources for a video encoder is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>Specifies the types of {{CPU}} access allowed for a resource.</p> + <p>This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p>Applications may combine one or more of these flags with a logical {{OR}}. When possible, create resources with no {{CPU}} access flags, as this enables better resource optimization.</p><p>The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags.</p> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + + + <p>Identifies options for resources.</p> + <p> This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p> These flags can be combined by bitwise {{OR}}. </p><p> The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags. </p> + + + <dd> <p> Enables {{MIP}} map generation by using <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> on a texture resource. The resource must be created with the <strong>bind flags</strong> that specify that the resource is a render target and a shader resource. </p> </dd> + + + <dd> <p> Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? <strong>Note</strong>?? Starting with Windows?8, we recommend that you enable resource data sharing between two or more Direct3D devices by using a combination of the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags instead. ? </dd> + + + <dd> <p> Sets a resource to be a cube texture created from a Texture2DArray that contains 6 textures. </p> </dd> + + + <dd> <p>Enables instancing of {{GPU}}-generated content.</p> </dd> + + + <dd> <p> Enables a resource as a byte address buffer. </p> </dd> + + + <dd> <p> Enables a resource as a structured buffer. </p> </dd> + + + <dd> <p> Enables a resource with {{MIP}} map clamping for use with <strong>{{ID3D11DeviceContext::SetResourceMinLOD}}</strong>. </p> </dd> + + + <dd> <p>Enables the resource to be synchronized by using the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}}. The following Direct3D?11 resource creation {{APIs}}, that take <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> parameters, have been extended to support the new flag.</p> <ul> <li> <strong>{{ID3D11Device::CreateTexture1D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture2D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture3D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateBuffer}}</strong> </li> </ul> <p>If you call any of these methods with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag set, the interface returned will support the <strong>{{IDXGIKeyedMutex}}</strong> interface. You can retrieve a reference to the <strong>{{IDXGIKeyedMutex}}</strong> interface from the resource by using <strong>{{IUnknown::QueryInterface}}</strong>. The <strong>{{IDXGIKeyedMutex}}</strong> interface implements the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}} to synchronize access to the surface. The device that creates the surface, and any other device that opens the surface by using <strong>OpenSharedResource</strong>, must call <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> before they issue any rendering commands to the surface. When those devices finish rendering, they must call <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong>. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? </dd> + + + <dd> <p> Enables a resource compatible with {{GDI}}. You must set the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag on surfaces that you use with {{GDI}}. Setting the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag allows {{GDI}} rendering on the surface via <strong>{{IDXGISurface1::GetDC}}</strong>. </p> <p>Consider the following programming tips for using {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} when you create a texture or use that texture in a swap chain:</p> <ul> <li>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li> You must bind the texture as a render target for the output-merger stage. For example, set the {{D3D11_BIND_RENDER_TARGET}} flag in the <strong>BindFlags</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure. </li> <li> You must set the maximum number of {{MIP}} map levels to 1. For example, set the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to 1. </li> <li> You must specify that the texture requires read and write access by the {{GPU}}. For example, set the <strong>Usage</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to {{D3D11_USAGE_DEFAULT}}. </li> <li> <p>You must set the texture format to one of the following types. </p> <ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_TYPELESS}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> </ul> For example, set the <strong>Format</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to one of these types. </li> <li> You cannot use {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} with multisampling. Therefore, set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure to 1. Then, set the <strong>SampleDesc</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to this <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </li> </ul> </dd> + + + <dd> <p>Set this flag to enable the use of {{NT}} {{HANDLE}} values when you create a shared resource. By enabling this flag, you deprecate the use of existing {{HANDLE}} values.</p> <p> When you use this flag, you must combine it with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag by using a bitwise {{OR}} operation. The resulting value specifies a new shared resource type that directs the runtime to use {{NT}} {{HANDLE}} values for the shared resource. The runtime then must confirm that the shared resource works on all hardware at the specified feature level. </p> <p>Without this flag set, the runtime does not strictly validate shared resource parameters (that is, formats, flags, usage, and so on). When the runtime does not validate shared resource parameters, behavior of much of the Direct3D {{API}} might be undefined and might vary from driver to driver. </p> <p><strong>Direct3D 11 and earlier:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource might contain protected content; therefore, the operating system should use the resource only when the driver and hardware support content protection. If the driver and hardware do not support content protection and you try to create a resource with this flag, the resource creation fails.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the operating system restricts access to the shared surface. You can use this flag together with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the driver restricts access to the shared surface. You can use this flag in conjunction with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is guarded. Such a resource is returned by the <strong>{{IDCompositionSurface::BeginDraw}}</strong> (DirectComposition) and <strong>{{ISurfaceImageSourceNative::BeginDraw}}</strong> (Windows Runtime) {{APIs}}. For these {{APIs}}, you provide a region of interest ({{ROI}}) on a surface to update. This surface isn't compatible with multiple render targets ({{MRT}}).</p> <p>A guarded resource automatically restricts all writes to the region that is related to one of the preceding {{APIs}}. Additionally, the resource enforces access to the {{ROI}} with these restrictions:</p> <ul> <li> Copy operations from the resource by using <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> are restricted to only copy from the {{ROI}}. </li> <li>When a guarded resource is set as a render target, it must be the only target.</li> </ul> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tile pool.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tiled resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource should be created such that it will be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li> This flag cannot be used with the following <strong>{{D3D11_USAGE}}</strong> values:<ul> <li><strong>{{D3D11_USAGE_DYNAMIC}}</strong></li> <li><strong>{{D3D11_USAGE_STAGING}}</strong></li> </ul> </li> <li> This flag cannot be used with the following <strong>{{D3D11_BIND_FLAG}}</strong> values.<ul> <li><strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong></li> <li><strong>{{D3D11_BIND_INDEX_BUFFER}}</strong></li> </ul> </li> <li>No {{CPU}} access flags can be specified.</li> </ul> <strong>Note</strong>??<p>Creating a texture using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection.</p> ? <p><strong>Note</strong>?? This enumeration value is supported starting with Windows?10. </p> </dd> + + + + + <p>Identifies a resource to be accessed for reading and writing by the {{CPU}}. Applications may combine one or more of these flags.</p> + <p>This enumeration is used in <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>These remarks are divided into the following topics:</p><p> </p><ul> <li>{{Meaning}}</li> <li>{{Common}}</li> </ul> + + + <dd> <p>Resource is mapped for reading. The resource must have been created with read access (see <strong>{{D3D11_CPU_ACCESS_READ}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for reading and writing. The resource must have been created with read and write access (see <strong>{{D3D11_CPU_ACCESS_READ}} and {{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access and dynamic usage (See <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong> and <strong>{{D3D11_USAGE_DYNAMIC}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Cannot be used on a resource created with the <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + + + <p>Specifies how the {{CPU}} should respond when an application calls the <strong>{{ID3D11DeviceContext::Map}}</strong> method on a resource that is being used by the {{GPU}}.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>{{D3D11_MAP_FLAG_DO_NOT_WAIT}} cannot be used with <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong> or <strong>{{D3D11_MAP_WRITE_NOOVERWRITE}}</strong>.</p> + + + + <p>Option(s) for raising an error to a non-continuable exception.</p> + <p>These flags are used by <strong>{{ID3D11Device::GetExceptionMode}}</strong> and <strong>{{ID3D11Device::SetExceptionMode}}</strong>. Use 0 to indicate no flags; multiple flags can be logically {{OR}}'ed together.</p> + + + <dd> <p>Raise an internal driver error to a non-continuable exception.</p> </dd> + + + + + <p> Specifies the parts of the depth stencil to clear. </p> + <p> These flags are used when calling <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong>; the flags can be combined with a bitwise {{OR}}. </p> + + + <dd> <p>Clear the depth buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + <dd> <p>Clear the stencil buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + + + <p>Comparison options.</p> + <p>A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for a depth-stencil buffer (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>), depth-stencil operations (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>), or sampler state (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identify the portion of a depth-stencil buffer for writing depth data.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>The stencil operations that can be performed during depth-stencil testing.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Blend factors, which modulate values for the pixel shader and render target.</p> + <p>Blend operations are specified in a <strong>blend description</strong>.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>{{RGB}} or alpha blending operation.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>blend description</strong>. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identify which components of each pixel of a render target are writable during blending.</p> + <p>These flags can be combined with a bitwise {{OR}}.</p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>The different faces of a cube texture.</p> + + + <dd> <p>Positive X face.</p> </dd> + + + <dd> <p>Negative X face.</p> </dd> + + + <dd> <p>Positive Y face.</p> </dd> + + + <dd> <p>Negative Y face.</p> </dd> + + + <dd> <p>Positive Z face.</p> </dd> + + + <dd> <p>Negative Z face.</p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p>This enumeration is used by <strong>{{D3D11_BUFFEREX_SRV}}</strong> </p> + + + <dd> <p>View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Depth-stencil view options.</p> + <p>This enumeration is used by <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>.</p><p>Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have a read/write conflicts between separate views.</p> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + + + <dd> <p>Resource contains raw, unstructured data. Requires the {{UAV}} format to be {{DXGI_FORMAT_R32_TYPELESS}}. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>Allow data to be appended to the end of the buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> flag must also be used for any view that will be used as a AppendStructuredBuffer or a ConsumeStructuredBuffer. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + <dd> <p>Adds a counter to the unordered-access-view buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> can only be used on a {{UAV}} that is a {{RWStructuredBuffer}} and it enables the functionality needed for the <strong>IncrementCounter</strong> and <strong>DecrementCounter</strong> methods in {{HLSL}}. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + + + <p>Filtering options during texture sampling.</p> + <strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>{{HLSL}} texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td>sample</td><td>samplecmp or samplecmplevelzero</td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following {{DXGI}} formats: {{R32_FLOAT_X8X24_TYPELESS}}, {{R32_FLOAT}}, {{R24_UNORM_X8_TYPELESS}}, {{R16_UNORM}}.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Types of magnification or minification sampler filters.</p> + + + <dd> <p>Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture. </p> </dd> + + + <dd> <p>Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p> Specifies the type of sampler filter reduction. </p> + <p> This enum is used by the <strong>{{D3D11_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates standard (default) filter reduction. </p> </dd> + + + <dd> <p> Indicates a comparison filter reduction. </p> </dd> + + + <dd> <p> Indicates minimum filter reduction. </p> </dd> + + + <dd> <p> Indicates maximum filter reduction. </p> </dd> + + + + + <p>Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.</p> + + + <dd> <p>Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times.</p> </dd> + + + <dd> <p>Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.</p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D11_SAMPLER_DESC}}</strong> or {{HLSL}} code.</p> </dd> + + + <dd> <p>Similar to {{D3D11_TEXTURE_ADDRESS_MIRROR}} and {{D3D11_TEXTURE_ADDRESS_CLAMP}}. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.</p> </dd> + + + + + <p>Which resources are supported for a given format and given device (see <strong>{{ID3D11Device::CheckFormatSupport}}</strong> and <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>).</p> + + + + <p> Unordered resource support options for a compute shader resource (see <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>). </p> + + + + <p>Optional flags that control the behavior of <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + + + + <p>Query types.</p> + <p> Create a query with <strong>{{ID3D11Device::CreateQuery}}</strong>. </p> + + + <dd> <p> Determines whether or not the {{GPU}} is finished processing commands. When the {{GPU}} is finished processing commands <strong>{{ID3D11DeviceContext::GetData}}</strong> will return {{S_OK}}, and pData will point to a {{BOOL}} with a value of <strong>{{TRUE}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Get the number of samples that passed the depth and stencil tests in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. If a depth or stencil test is disabled, then each of those tests will be counted as a pass. </p> </dd> + + + <dd> <p> Get a timestamp value where <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. This kind of query is only useful if two timestamp queries are done in the middle of a {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Determines whether or not a {{D3D11_QUERY_TIMESTAMP}} is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. This type of query should only be invoked once per frame or less. </p> </dd> + + + <dd> <p> Get pipeline statistics, such as the number of pixel shader invocations in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong>. </p> </dd> + + + <dd> <p> Similar to {{D3D11_QUERY_OCCLUSION}}, except <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} indicating whether or not any samples passed the depth and stencil tests - <strong>{{TRUE}}</strong> meaning at least one passed, <strong>{{FALSE}}</strong> meaning none passed. </p> </dd> + + + <dd> <p> Get streaming output statistics, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not any of the streaming output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 0, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 0 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 1, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 1 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 2, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 2 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 3, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 3 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + + + <p>Flags that describe miscellaneous query behavior.</p> + <p>This flag is part of a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> + + + <dd> <p>Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via <strong>{{ID3D11DeviceContext::GetData}}</strong> when using this flag.</p> </dd> + + + + + <p>Options for performance counters.</p> + <p>Independent hardware vendors may define their own set of performance counters for their devices, by giving the enumeration value a number that is greater than the value for {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}.</p><p>This enumeration is used by <strong>{{D3D11_COUNTER_DESC}}</strong> and <strong>{{D3D11_COUNTER_INFO}}</strong>.</p> + + + <dd> <p>Define a performance counter that is dependent on the hardware device.</p> </dd> + + + + + <p>Data type of a performance counter.</p> + <p>These flags are an output parameter in <strong>{{ID3D11Device::CheckCounter}}</strong>.</p> + + + <dd> <p>32-bit floating point.</p> </dd> + + + <dd> <p>16-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>64-bit unsigned integer.</p> </dd> + + + + + <p>Specifies a multi-sample pattern type.</p> + <p>An app calls <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> to get the number of quality levels available during multisampling. A 0 quality level means the hardware does not support multisampling for the particular format. If the number of quality levels is greater than 0 and the hardware supports the fixed sample patterns for the sample count, the app can request the fixed patterns by specifying quality level as either <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> or <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong>. The app can call <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to check for support of the standard fixed patterns. If the hardware only supports the fixed patterns but no additional vendor-specific patterns, the runtime can report the number of quality levels as 1, and the hardware can pretend 0 quality level behaves the same as quality level equal to {{D3D11_STANDARD_MULTISAMPLE_PATTERN}}.</p><p>The runtime defines the following standard sample patterns for 1(trivial), 2, 4, 8, and 16 sample counts. Hardware must support 1, 4, and 8 sample counts. Hardware vendors can expose more sample counts beyond these. However, if vendors support 2, 4(required), 8(required), or 16, they must also support the corresponding standard pattern or center pattern for each of those sample counts.</p><p></p><p></p><p></p> + + + <dd> <p>Pre-defined multi-sample patterns required for Direct3D?11 and Direct3D?10.1 hardware.</p> </dd> + + + <dd> <p>Pattern where all of the samples are located at the pixel center.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Direct3D 11 feature options.</p> + <p> This enumeration is used when querying a driver about support for these features by calling <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. Each value in this enumeration has a corresponding data structure that is required to be passed to the <em>pFeatureSupportData</em> parameter of <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. </p> + + + <dd> <p> The driver supports multithreading. To see an example of testing a driver for multithread support, see How To: Check for Driver Support. Refer to <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong>.</p> </dd> + + + <dd> <p>Supports the use of the double-precision shaders in {{HLSL}}. Refer to <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT2}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT2}}</strong>.</p> </dd> + + + <dd> <p>Supports compute shaders and raw and structured buffers. Refer to <strong>{{D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}}</strong>.</p> </dd> + + + <dd> <p>Supports Direct3D 11.1 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports specific adapter architecture. Refer to <strong>{{D3D11_FEATURE_DATA_ARCHITECTURE_INFO}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports minimum precision of shaders. For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision. Refer to <strong>{{D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 shadowing feature. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 instancing options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 marker options. Refer to <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options, which includes the Direct3D?9 shadowing feature and instancing support. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D 11.3 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.3.</p> </dd> + + + <dd> <p> Supports Direct3D 11.4 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + <dd> <p> Supports {{GPU}} virtual addresses. Refer to <strong>{{D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports a single boolean for {{NV12}} shared textures. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS4}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Values that specify minimum precision levels at shader stages.</p> + + + <dd> <p>Minimum precision level is 10-bit.</p> </dd> + + + <dd> <p>Minimum precision level is 16-bit.</p> </dd> + + + + + <p>Indicates the tier level at which tiled resources are supported.</p> + + + <dd> <p>Tiled resources are not supported.</p> </dd> + + + <dd> <p> Tier_1 tiled resources are supported.</p> <p> The device supports calls to <strong>CreateTexture2D</strong> and so on with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. </p> <p> The device supports calls to <strong>CreateBuffer</strong> with the <strong>{{D3D11_RESOURCE_MISC_TILE_POOL}}</strong> flag. </p> <p> If you access tiles (read or write) that are <strong>{{NULL}}</strong>-mapped, you get undefined behavior, which includes device-removed. Apps can map all tiles to a single "default" tile to avoid this condition. </p> </dd> + + + <dd> <p> Tier_2 tiled resources are supported. </p> <p> Superset of Tier_1 functionality, which includes this additional support: </p> <ul> <li> On Tier_1, if the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. On Tier_2, this guarantee is expanded to include mipmap levels whose size is at least one standard tile shape. For more info, see <strong>{{D3D11_PACKED_MIP_DESC}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> </dd> + + + <dd> <p> Tier_3 tiled resources are supported. </p> <p> Superset of Tier_2 functionality, Tier 3 is essentially Tier 2 but with the additional support of Texture3D for Tiled Resources.</p> </dd> + + + + + <p>Specifies if the hardware and driver support conservative rasterization and at what tier level.</p> + + + <dd> <p>Conservative rasterization isn't supported.</p> </dd> + + + <dd> <p>Tier_1 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_2 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_3 conservative rasterization is supported.</p> </dd> + + + + + <p>Describes the level of support for shader caching in the current graphics driver.</p> + <p>This enum is used by the <strong>{{D3D_FEATURE_DATA_SHADER_CACHE}}</strong> structure.</p> + + + <dd> <p>Indicates that the driver does not support shader caching.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders in memory during the current run of the application.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders on disk to accelerate future runs of the application.</p> </dd> + + + + + <p>Specifies a type of compressed buffer for decoding.</p> + + + <dd> <p>Picture decoding parameter buffer. +</p> </dd> + + + <dd> <p>Macroblock control command buffer. +</p> </dd> + + + <dd> <p>Residual difference block data buffer. +</p> </dd> + + + <dd> <p>Deblocking filter control command buffer. +</p> </dd> + + + <dd> <p>Inverse quantization matrix buffer. +</p> </dd> + + + <dd> <p>Slice-control buffer. +</p> </dd> + + + <dd> <p>Bitstream data buffer. +</p> </dd> + + + <dd> <p>Motion vector buffer. +</p> </dd> + + + <dd> <p>Film grain synthesis data buffer. +</p> </dd> + + + + + <p>Specifies how a video format can be used for video processing.</p> + + + <dd> <p>The format can be used as the input to the video processor.</p> </dd> + + + <dd> <p>The format can be used as the output from the video processor.</p> </dd> + + + + + <p>Defines video processing capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor can blend video content in linear color space. Most video content is gamma corrected, resulting in nonlinear values. This capability flag means that the video processor converts colors to linear space before blending, which produces better results.</p> </dd> + + + <dd> <p>The video processor supports the xvYCC color space for {{YCbCr}} data. </p> </dd> + + + <dd> <p>The video processor can perform range conversion when the input and output are both {{RGB}} but use different color ranges (0-255 or 16-235, for 8-bit {{RGB}}). </p> </dd> + + + <dd> <p>The video processor can apply a matrix conversion to {{YCbCr}} values when the input and output are both {{YCbCr}}. For example, the driver can convert colors from {{BT}}.601 to {{BT}}.709. </p> </dd> + + + <dd> <p>The video processor supports {{YUV}} nominal range . </p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines features that a Microsoft Direct3D?11 video processor can support. </p> + + + <dd> <p>The video processor can set alpha values on the output pixels. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> </dd> + + + <dd> <p>The video processor can downsample the video output. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong>.</p> </dd> + + + <dd> <p>The video processor can perform luma keying. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamLumaKey}}</strong>.</p> </dd> + + + <dd> <p>The video processor can apply alpha values from color palette entries. </p> </dd> + + + <dd> <p>The driver does not support full video processing capabilities. If this capability flag is set, the video processor has the following limitations:</p> <ul> <li>A maximum of two streams are supported:<ul> <li>The first stream must be either {{NV12}} or {{YUY2}}.</li> <li>The second stream must be {{AYUV}}, {{AI44}}, or {{IA44}}.</li> </ul> </li> <li>Image adjustment (proc amp) controls are applied to the entire video processing blit, rather than per stream.</li> <li>Support for per-stream planar alpha is not reliable. (Per-pixel alpha is supported, however.)</li> </ul> </dd> + + + <dd> <p>The video processor can support 3D stereo video. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong>.</p> <p>All drivers setting this caps must support the following stereo formats: <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL}}</strong>, <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL}}</strong>, and <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>.</p> </dd> + + + <dd> <p>The driver can rotate the input data either 90, 180, or 270 degrees clockwise as part of the video processing operation.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamAlpha</strong> call.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamPixelAspectRatio</strong> call.</p> </dd> + + + + + <p>Defines image filter capabilities for a Microsoft Direct3D?11 video processor.</p> + <p>These capability flags indicate support for the image filters defined by the <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> enumeration. To apply a particular filter, call the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamFilter}}</strong> method.</p> + + + <dd> <p>The video processor can adjust the brightness level. </p> </dd> + + + <dd> <p>The video processor can adjust the contrast level. </p> </dd> + + + <dd> <p>The video processor can adjust hue. </p> </dd> + + + <dd> <p>The video processor can adjust the saturation level. </p> </dd> + + + <dd> <p>The video processor can perform noise reduction. </p> </dd> + + + <dd> <p>The video processor can perform edge enhancement. </p> </dd> + + + <dd> <p>The video processor can perform anamorphic scaling. Anamorphic scaling can be used to stretch 4:3 content to a widescreen 16:9 aspect ratio. </p> </dd> + + + <dd> <p>For stereo 3D video, the video processor can adjust the offset between the left and right views, allowing the user to reduce potential eye strain.</p> </dd> + + + + + <p>Defines capabilities related to input formats for a Microsoft Direct3D?11 video processor.</p> + <p>These flags define video processing capabilities that usually are not needed, and that video devices are therefore not required to support.</p><p> The first three flags relate to {{RGB}} support for functions that are normally applied to {{YCbCr}} video: deinterlacing, color adjustment, and luma keying. A device that supports these functions for {{YCbCr}} is not required to support them for {{RGB}} input. Supporting {{RGB}} input for these functions is an additional capability, reflected by these constants. Note that the driver might convert the input to another color space, perform the indicated function, and then convert the result back to {{RGB}}. </p><p>Similarly, a device that supports deinterlacing is not required to support deinterlacing of palettized formats. This capability is indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED}}</strong> flag.</p> + + + <dd> <p>The video processor can deinterlace an input stream that contains interlaced {{RGB}} video. </p> </dd> + + + <dd> <p>The video processor can perform color adjustment on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can perform luma keying on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can deinterlace input streams with palettized color formats.</p> </dd> + + + + + <p>Specifies the automatic image processing capabilities of the video processor.</p> + + + <dd> <p>Denoise.</p> </dd> + + + <dd> <p>Deringing.</p> </dd> + + + <dd> <p>Edge enhancement.</p> </dd> + + + <dd> <p>Color correction.</p> </dd> + + + <dd> <p>Flesh-tone mapping.</p> </dd> + + + <dd> <p>Image stabilization.</p> </dd> + + + <dd> <p>Enhanced image resolution.</p> </dd> + + + <dd> <p>Anamorphic scaling.</p> </dd> + + + + + <p>Defines stereo 3D capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD}}</strong> format.</p> </dd> + + + <dd> <p>The video processor can flip one or both views. For more information, see <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong>.</p> </dd> + + + + + <p>Specifies video processing capabilities that relate to deinterlacing, inverse telecine ({{IVTC}}), and frame-rate conversion.</p> + + + <dd> <p>The video processor can perform blend deinterlacing. </p> <p>In blend deinterlacing, the two fields from an interlaced frame are blended into a single progressive frame. A video processor uses blend deinterlacing when it deinterlaces at half rate, as when converting 60i to 30p. Blend deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform bob deinterlacing.</p> <p>In bob deinterlacing, missing field lines are interpolated from the lines above and below. Bob deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform adaptive deinterlacing.</p> <p>Adaptive deinterlacing uses spatial or temporal interpolation, and switches between the two on a field-by-field basis, depending on the amount of motion. If the video processor does not receive enough reference frames to perform adaptive deinterlacing, it falls back to bob deinterlacing.</p> </dd> + + + <dd> <p>The video processor can perform motion-compensated deinterlacing. </p> <p>Motion-compensated deinterlacing uses motion vectors to recreate missing lines. If the video processor does not receive enough reference frames to perform motion-compensated deinterlacing, it falls back to bob deinterlacing. </p> </dd> + + + <dd> <p>The video processor can perform inverse telecine ({{IVTC}}). </p> <p>If the video processor supports this capability, the <strong>{{ITelecineCaps}}</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure specifies which {{IVTC}} modes are supported. </p> </dd> + + + <dd> <p>The video processor can convert the frame rate by interpolating frames. </p> </dd> + + + + + <p>Specifies the inverse telecine ({{IVTC}}) capabilities of a video processor. </p> + + + <dd> <p>The video processor can reverse 3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:3:3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 3:2:3:2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 5:5 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 6:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 8:7 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse other telecine modes not listed here.</p> </dd> + + + + + <p>Contains flags that describe content-protection capabilities.</p> + + + <dd> <p>The content protection is implemented in software by the driver.</p> </dd> + + + <dd> <p>The content protection is implemented in hardware by the {{GPU}}. +</p> </dd> + + + <dd> <p>Content protection is always applied to a protected surface, regardless of whether the application explicitly enables protection.</p> </dd> + + + <dd> <p>The driver can use partially encrypted buffers. If this capability is not present, the entire buffer must be either encrypted or clear.</p> </dd> + + + <dd> <p>The driver can encrypt data using a separate content key that is encrypted using the session key.</p> </dd> + + + <dd> <p>The driver can refresh the session key without renegotiating the key.</p> </dd> + + + <dd> <p>The driver can read back encrypted data from a protected surface. For more information, see <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong>.</p> </dd> + + + <dd> <p>The driver requires a separate key to read encrypted data from a protected surface.</p> </dd> + + + <dd> <p>If the encryption type is <strong>{{D3DCRYPTOTYPE_AES128_CTR}}</strong>, the application must use a sequential count in the <strong>{{D3D11_AES_CTR_IV}}</strong> structure.</p> </dd> + + + <dd> <p>The driver supports encrypted slice data, but does not support any other encrypted data in the compressed buffer. The caller should not encrypt any data within the buffer other than the slice data.</p> <strong>Note</strong>??The driver should only report this flag for the specific profiles that have this limitation. ? </dd> + + + <dd> <p>The driver can copy encrypted data from one resource to another, decrypting the data as part of the process.</p> </dd> + + + <dd> <p>The hardware supports the protection of specific resources. This means that:</p> <ul> <li>The contents of a protected allocation can never be read by the {{CPU}}.</li> <li>The hardware can ensure a protected resource cannot be copied to an unprotected resource.</li> </ul> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Physical pages of a protected resource can be evicted and potentially paged to disk in low memory conditions without losing the contents of the resource when paged back in. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The hardware supports an automatic teardown mechanism that could trigger hardware keys or protected content to become lost in some conditions. The application can register to be notified when these events occur.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The secure environment is tightly coupled with the {{GPU}} and an <strong>{{ID3D11CryptoSession}}</strong> should be used for communication between the user mode {{DRM}} component and the secure execution environment.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + + + <p>Identifies a video processor filter.</p> + + + <dd> <p>Brightness filter.</p> </dd> + + + <dd> <p>Contrast filter.</p> </dd> + + + <dd> <p>Hue filter.</p> </dd> + + + <dd> <p>Saturation filter.</p> </dd> + + + <dd> <p>Noise reduction filter.</p> </dd> + + + <dd> <p>Edge enhancement filter.</p> </dd> + + + <dd> <p>Anamorphic scaling filter.</p> </dd> + + + <dd> <p>Stereo adjustment filter. When stereo 3D video is enabled, this filter adjusts the offset between the left and right views, allowing the user to reduce potential eye strain. </p> <p>The filter value indicates the amount by which the left and right views are adjusted. A positive value shifts the images away from each other: the left image toward the left, and the right image toward the right. A negative value shifts the images in the opposite directions, closer to each other.</p> </dd> + + + + + <p>Describes how a video stream is interlaced.</p> + + + <dd> <p>Frames are progressive.</p> </dd> + + + <dd> <p>Frames are interlaced. The top field of each frame is displayed first. </p> </dd> + + + <dd> <p>Frame are interlaced. The bottom field of each frame is displayed first.</p> </dd> + + + + + <p>Specifies the intended use for a video processor.</p> + + + <dd> <p>Normal video playback. The graphics driver should expose a set of capabilities that are appropriate for real-time video playback. </p> </dd> + + + <dd> <p>Optimal speed. The graphics driver should expose a minimal set of capabilities that are optimized for performance. </p> <p>Use this setting if you want better performance and can accept some reduction in video quality. For example, you might use this setting in power-saving mode or to play video thumbnails. </p> </dd> + + + <dd> <p>Optimal quality. The grahics driver should expose its maximum set of capabilities.</p> <p>Specify this setting to get the best video quality possible. It is appropriate for tasks such as video editing, when quality is more important than speed. It is not appropriate for real-time playback. </p> </dd> + + + + + <p>Specifies values for the luminance range of {{YUV}} data.</p> + + + <dd> <p>Driver defaults are used, which should be Studio luminance range [16-235],</p> </dd> + + + <dd> <p>Studio luminance range [16-235]</p> </dd> + + + <dd> <p>Full luminance range [0-255]</p> </dd> + + + + + <p>Specifies the alpha fill mode for video processing.</p> + + + <dd> <p>Alpha values inside the target rectangle are set to opaque. </p> </dd> + + + <dd> <p>Alpha values inside the target rectangle are set to the alpha value specified in the background color. To set the background color, call the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor}}</strong> method.</p> </dd> + + + <dd> <p>Existing alpha values remain unchanged in the output surface.</p> </dd> + + + <dd> <p>Alpha values are taken from an input stream, scaled, and copied to the corresponding destination rectangle for that stream. The input stream is specified in the <em>StreamIndex</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong> method. </p> <p>If the input stream does not have alpha data, the video processor sets the alpha values in the target rectangle to opaque. If the input stream is disabled or the source rectangle is empty, the alpha values in the target rectangle are not modified.</p> </dd> + + + + + <p>Specifies the rate at which the video processor produces output frames from an input stream.</p> + + + <dd> <p>The output is the normal frame rate. </p> </dd> + + + <dd> <p>The output is half the frame rate. </p> </dd> + + + <dd> <p>The output is a custom frame rate.</p> </dd> + + + + + <p>Specifies the layout in memory of a stereo 3D video frame.</p> + <p>This enumeration designates the two stereo views as "frame 0" and "frame 1". The <em>LeftViewFrame0</em> parameter of the <strong>VideoProcessorSetStreamStereoFormat</strong> method specifies which view is the left view, and which is the right view.</p><p>For packed formats, if the source rectangle clips part of the surface, the driver interprets the rectangle in logical coordinates relative to the stereo view, rather than absolute pixel coordinates. The result is that frame 0 and frame 1 are clipped proportionately.</p><p>To query whether the device supports stereo 3D video, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check for the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> flag in the <strong>FeatureCaps</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. If this capability flag is present, it means that the driver supports all of the stereo formats that are not listed as optional. To find out which optional formats are supported, call <strong>GetVideoProcessorCaps</strong> and check the <strong>StereoCaps</strong> member of the structure.</p> + + + <dd> <p>The sample does not contain stereo data. If the stereo format is not specified, this value is the default.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed side-by-side, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed top-to-bottom, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are placed in separate resources or in separate texture array elements within the same resource.</p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>The sample contains non-stereo data. However, the driver should create a left/right output of this sample using a specified offset. The offset is specified in the <em>MonoOffset</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong> method. </p> <p>This format is primarily intended for subtitles and other subpicture data, where the entire sample is presented on the same plane.</p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved rows, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved columns, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed in a checkerboard format, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + + + <p>For stereo 3D video, specifies whether the data in frame 0 or frame 1 is flipped, either horizontally or vertically. </p> + + + <dd> <p>Neither frame is flipped.</p> </dd> + + + <dd> <p>The data in frame 0 is flipped.</p> </dd> + + + <dd> <p>The data in frame 1 is flipped.</p> </dd> + + + + + <p>Specifies the video rotation states.</p> + + + <dd> <p>The video is not rotated.</p> </dd> + + + <dd> <p>The video is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 180 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>Specifies the type of Microsoft Direct3D authenticated channel. </p> + + + <dd> <p>Direct3D?11 channel. This channel provides communication with the Direct3D runtime. </p> </dd> + + + <dd> <p>Software driver channel. This channel provides communication with a driver that implements content protection mechanisms in software.</p> </dd> + + + <dd> <p>Hardware driver channel. This channel provides communication with a driver that implements content protection mechanisms in the {{GPU}} hardware. </p> </dd> + + + + + <p>Specifies the type of process that is identified in the <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT}}</strong> structure.</p> + + + + <p>Specifies the type of I/O bus that is used by the graphics adapter.</p> + + + <dd> <p>Indicates a type of bus other than the types listed here. +</p> </dd> + + + <dd> <p>{{PCI}} bus. +</p> </dd> + + + <dd> <p>{{PCI}}-X bus. +</p> </dd> + + + <dd> <p>{{PCI}} Express bus. +</p> </dd> + + + <dd> <p>Accelerated Graphics Port ({{AGP}}) bus. +</p> </dd> + + + <dd> <p>The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +</p> </dd> + + + <dd> <p>One of the <strong>{{D3D11_BUS_IMPL_MODIFIER_Xxx}}</strong> flags is set. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video decoding output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor input view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + + + <p>Describes parameters that are used to create a device.</p> + <p>Device creation flags are used by <strong>{{D3D11CreateDevice}}</strong> and <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p><p>An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple {{CPU}} cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use <strong>{{D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS}}</strong> to request that the runtime and video driver not create any additional threads that might interfere with the application.</p> + + + <dd> <p>Use this flag if your application will only call methods of Direct3D?11 interfaces from a single thread. By default, the <strong>{{ID3D11Device}}</strong> object is thread-safe. By using this flag, you can increase performance. However, if you use this flag and your application calls methods of Direct3D?11 interfaces from multiple threads, undefined behavior might result.</p> </dd> + + + <dd> <p>Creates a device that supports the debug layer. </p> <p>To use this flag, you must have {{D3D11}}*{{SDKLayers}}.dll installed; otherwise, device creation fails. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> </dd> + + + <dd> <strong>Note</strong>??This flag is not supported in Direct3D?11. ? </dd> + + + <dd> <p>Prevents multiple threads from being created. When this flag is used with a Windows Advanced Rasterization Platform ({{WARP}}) device, no additional threads will be created by {{WARP}} and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.</p> </dd> + + + <dd> <p>Creates a device that supports {{BGRA}} formats (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> and <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>). All 10level9 and higher hardware with {{WDDM}} 1.1+ drivers support {{BGRA}} formats. </p> <strong>Note</strong>??Required for Direct2D interoperability with Direct3D resources. ? </dd> + + + <dd> <p>Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver. </p> <p>To use this flag, you must have {{D3D11_1SDKLayers}}.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> <p>If you use this flag and the current driver does not support shader debugging, device creation fails. Shader debugging requires a driver that is implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2).</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX {{SDK}}. We shipped the last version of the DirectX {{SDK}} in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.</p> <strong>Note</strong>??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app. ? <p><strong>Windows?8.1:??</strong>This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app; instead use <strong>{{ID3D11DeviceContext2::IsAnnotationEnabled}}</strong>. This flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app. </p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Use this flag if the device will produce {{GPU}} workloads that take more than two seconds to complete, and you want the operating system to allow them to successfully finish. If this flag is not set, the operating system performs timeout detection and recovery when it detects a {{GPU}} packet that took more than two seconds to execute. If this flag is set, the operating system allows such a long running packet to execute without resetting the {{GPU}}. We recommend not to set this flag if your device needs to be highly responsive so that the operating system can detect and recover from {{GPU}} timeouts. We recommend to set this flag if your device needs to perform time consuming background tasks such as compute, image recognition, and video encoding to allow such tasks to successfully finish.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Forces the creation of the Direct3D device to fail if the display driver is not implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2). When the display driver is not implemented to {{WDDM}} 1.2, only a Direct3D device that is created with feature level 9.1, 9.2, or 9.3 supports video; therefore, if this flag is set, the runtime creates the Direct3D device only for feature level 9.1, 9.2, or 9.3. We recommend not to specify this flag for applications that want to favor Direct3D capability over video. If feature level 10 and higher is available, the runtime will use that feature level regardless of video support.</p> <p>If this flag is set, device creation on the Basic Render Device ({{BRD}}) will succeed regardless of the {{BRD}}'s missing support for video decode. This is because the Media Foundation video stack operates in software mode on {{BRD}}. In this situation, if you force the video stack to create the Direct3D device twice (create the device once with this flag, next discover {{BRD}}, then again create the device without the flag), you actually degrade performance.</p> <p>If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_NULL}}</strong>, <strong>{{D3D_DRIVER_TYPE_REFERENCE}}</strong>, or <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong>, device creation fails at any feature level because none of the associated drivers provide video capability. If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_WARP}}</strong>, device creation succeeds to allow software fallback for video.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>A description of a single element for the input-assembler stage.</p> + <p>An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling <strong>{{ID3D11Device::CreateInputLayout}}</strong>. For an example, see the "Create the Input-Layout Object" subtopic under the Getting Started with the Input-Assembler Stage topic.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name </p> <pre>matrix</pre> <p>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler (see input slot). Valid values are between 0 and 15, defined in {{D3D11}}.h.</p> </dd> + + + <dd> <p>Optional. Offset (in bytes) between each element. Use {{D3D11_APPEND_ALIGNED_ELEMENT}} for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>Identifies the input data class for a single input slot (see <strong>{{D3D11_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to {{D3D11_INPUT_PER_VERTEX_DATA}}).</p> </dd> + + + + + <p>Description of a vertex element in a vertex buffer in an output slot.</p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline (see <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>). The valid range for <em>OutputSlot</em> is 0 to 3.</p> </dd> + + + + + <p>Defines the dimensions of a viewport.</p> + <p>In all cases, <strong>Width</strong> and <strong>Height</strong> must be &gt;= 0 and <strong>TopLeftX</strong> + <strong>Width</strong> and <strong>TopLeftY</strong> + <strong>Height</strong> must be &lt;= {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p><table> <tr><td> <p>Viewport Sizes and Feature Level Support Differences between Direct3D 11 and Direct3D 10:</p> <p>The range for the minimum and maximum viewport size is dependent on the feature level defined by <strong>{{D3D_FEATURE_LEVEL}}</strong>.</p> <ul> <li>Direct3D 11 supports fractional viewports; the parameter types are floating-point numbers. The feature level, {{D3D_FEATURE_LEVEL_11_0}}, supports ({{D3D11_VIEWPORT_BOUNDS_MIN}}, {{D3D11_VIEWPORT_BOUNDS_MAX}}) values between (-32768, 32,767).</li> <li>Direct3D 10 does not support fractional viewports. The feature levels, {{D3D_FEATURE_LEVEL_10_1}} (or below), supports ({{D3D10_VIEWPORT_BOUNDS_MIN}}, {{D3D10_VIEWPORT_BOUNDS_MAX}}) values between (-16384, 16383).</li> </ul> </td></tr> </table><p>?</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + + + <dd> <p>X position of the left hand side of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Y position of the top of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p> Arguments for draw instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong>. </p> + + + <dd> <p> The number of vertices to draw. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Arguments for draw indexed instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong>. </p> + + + <dd> <p> The number of indices read from the index buffer for each instance. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The location of the first index read by the {{GPU}} from the index buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading a vertex from the vertex buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p>Defines a 3D box.</p> + <p>The following diagram shows a 3D box, where the origin is the left, front, top corner.</p><p></p><p>The values for <strong>right</strong>, <strong>bottom</strong>, and <strong>back</strong> are each one pixel past the end of the pixels that are included in the box region. That is, the values for <strong>left</strong>, <strong>top</strong>, and <strong>front</strong> are included in the box region while the values for right, bottom, and back are excluded from the box region. For example, for a box that is one pixel wide, (right - left) == 1; the box region includes the left pixel but not the right pixel.</p><p>Coordinates of a box are in bytes for buffers and in texels for textures.</p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box.</p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <p> Describes the blend state that you use in a call to <strong>{{ID3D11Device::CreateBlendState}}</strong> to create a blend-state object. </p> + <p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><strong>Note</strong>??<strong>{{D3D11_BLEND_DESC}}</strong> is identical to <strong>{{D3D10_BLEND_DESC1}}</strong>.?<p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p> + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering (see <strong>{{D3D11_FILL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Indicates triangles facing the specified direction are not drawn (see <strong>{{D3D11_CULL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Determines if a triangle is front- or back-facing. If this parameter is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + + + <p>Specifies data for initializing a subresource.</p> + <p>This structure is used in calls to create buffers (<strong>{{ID3D11Device::CreateBuffer}}</strong>) and textures (<strong>{{ID3D11Device::CreateTexture1D}}</strong>, <strong>{{ID3D11Device::CreateTexture2D}}</strong>, and <strong>{{ID3D11Device::CreateTexture3D}}</strong>). If the resource you create does not require a system-memory pitch or a system-memory-slice pitch, you can use those members to pass size information, which might help you when you debug a problem with creating a resource.</p><p>A subresource is a single mipmap-level surface. You can pass an array of subresources to one of the preceding methods to create the resource. A subresource can be 1D, 2D, or 3D. How you set the members of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> depend on whether the subresource is 1D, 2D, or 3D.</p><p></p><dl> <dt>1D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the length of the 1D surface in bytes. <strong>pSysMem</strong> points to the start of the 1D surface. You don't need to set <strong>SysMemSlicePitch</strong>. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + (x * BytesPerPixel)</pre> </dd> <dt>2D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the size of the entire 2D surface in bytes. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> <dt>3D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the distance between any two adjacent 2D slices of the 3D surface. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemSlicePitch*d + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> </dl><p>The x, y, and d values are 0-based indices and <strong>BytesPerPixel</strong> depends on the pixel format. For mipmapped 3D surfaces, the number of depth slices in each level is half the number of the previous level (minimum 1) and rounded down if dividing by two results in a non-whole number.</p><strong>Note</strong>??An application must not rely on <strong>SysMemPitch</strong> being exactly equal to the number of texels in a line times the size of a texel. In some cases, <strong>SysMemPitch</strong> will include padding to skip past additional data in a line. This could be padding for alignment or the texture could be a subsection of a larger texture. For example, the <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure could represent a 32 by 32 subsection of a 128 by 128 texture. The value for <strong>SysMemSlicePitch</strong> will reflect any padding included in <strong>SysMemPitch</strong>.? + + + <dd> <p>Pointer to the initialization data.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one line of a texture to the next line. System-memory pitch is used only for 2D and 3D texture data as it is has no meaning for the other resource types. Specify the distance from the first pixel of one 2D slice of a 3D texture to the first pixel of the next 2D slice in that texture in the <strong>SysMemSlicePitch</strong> member.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one depth level to the next. System-memory-slice pitch is only used for 3D texture data as it has no meaning for the other resource types.</p> </dd> + + + + + <p>Provides access to subresource data.</p> + <p>This structure is used in a call to <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>The values in these members tell you how much data you can view:</p><ul> <li><strong>pData</strong> points to row 0 and depth slice 0.</li> <li><strong>RowPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from row to row, where each row contains multiple pixels.</li> <li><strong>DepthPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from depth slice to depth slice, where each depth slice contains multiple rows.</li> </ul><p>When <strong>RowPitch</strong> and <strong>DepthPitch</strong> are not appropriate for the resource type, the runtime might set their values to 0. So, don't use these values for anything other than iterating over rows and depth. Here are some examples:</p><ul> <li>For <strong>Buffer</strong> and <strong>Texture1D</strong>, the runtime assigns values that aren't 0 to <strong>RowPitch</strong> and <strong>DepthPitch</strong>. For example, if a <strong>Buffer</strong> contains 8 bytes, the runtime assigns values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are greater than or equal to 8.</li> <li>For <strong>Texture2D</strong>, the runtime still assigns a value that isn't 0 to <strong>DepthPitch</strong>, assuming that the field isn't used.</li> </ul><strong>Note</strong>?? The runtime might assign values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are larger than anticipated because there might be padding between rows and depth.? + + + <dd> <p>Pointer to the data. When <strong>{{ID3D11DeviceContext::Map}}</strong> provides the reference, the runtime ensures that the reference has a specific alignment, depending on the following feature levels:</p> <ul> <li>For <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong> and higher, the reference is aligned to 16 bytes.</li> <li>For lower than <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>, the reference is aligned to 4 bytes.</li> </ul> </dd> + + + <dd> <p>The row pitch, or width, or physical size (in bytes) of the data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size (in bytes)of the data.</p> </dd> + + + + + <p>Describes a buffer resource.</p> + <p>This structure is used by <strong>{{ID3D11Device::CreateBuffer}}</strong> to create buffer resources.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_BUFFER_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a buffer description.</p><p>If the bind flag is <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>, you must set the <strong>ByteWidth</strong> value in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>.</p> + + + <dd> <p>Size of the buffer in bytes.</p> </dd> + + + <dd> <p>Identify how the buffer is expected to be read from and written to. Frequency of update is a key factor. The most common value is typically {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Identify how the buffer will be bound to the pipeline. Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>{{CPU}} access flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) or 0 if no {{CPU}} access is necessary. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) or 0 if unused. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer. For more info about structured buffers, see Structured Buffer.</p> <p>The size value in <strong>StructureByteStride</strong> must match the size of the format that you use for views of the buffer. For example, if you use a shader resource view ({{SRV}}) to read a buffer in a pixel shader, the {{SRV}} format size must match the size value in <strong>StructureByteStride</strong>.</p> </dd> + + + + + <p>Describes a 1D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture1D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE1D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE1D_U_DIMENSION}} (8192) when you create your 1D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE1D_U_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the array. The range is from 1 to {{D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}. For a 1D texture, the allowable values are: {{D3D11_BIND_SHADER_RESOURCE}}, {{D3D11_BIND_RENDER_TARGET}} and {{D3D11_BIND_DEPTH_STENCIL}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture3D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a shader-resource view.</p> + <p> The <strong>{{D3D11_BUFFER_SRV}}</strong> structure is a member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure, which represents a shader-resource view description. You can create a shader-resource view by calling the <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> method. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the shader-resource-view description. </p> </dd> + + + + + <p>Describes the elements in a raw buffer resource to use in a shader-resource view.</p> + <p>This structure is used by <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a raw view of a buffer.</p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV_FLAG}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a multisampled 2D texture to use in a shader-resource view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> specifying the viewing format. See remarks.</p> </dd> + + + <dd> <p>The resource type of the view. See <strong>{{D3D11_SRV_DIMENSION}}</strong>. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>View the resource as a buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFER_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D texture using information from a shader-resource view (see <strong>{{D3D11_TEX1D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture using information from a shader-resource view (see <strong>{{D3D11_TEX2D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled texture using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D texture using information from a shader-resource view (see <strong>{{D3D11_TEX3D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube texture using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube-texture array using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a raw buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFEREX_SRV}}</strong>). For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a render-target view.</p> + <p> A render-target view is a member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>). Create a render-target view by calling <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the render-target-view description. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture to use in a render-target view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a an array of multisampled 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a render-target view.</p> + <p>This structure is one member of a render target view. See <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render target.</p><p>A render-target-view cannot use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_RTV_DIMENSION}}</strong>), which specifies how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a single subresource because a multisampled 2D texture only contains one subresource (see <strong>{{D3D11_TEX2DMS_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a multisampled 2D texture array that can be accessed (see <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_RTV}}</strong>).</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array 2D textures that are accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.</p> + <p>Because a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.</p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures for a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources of a texture that are accessible from a depth-stencil view.</p> + <p>These are valid formats for a depth-stencil view:</p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p>A depth-stencil view cannot use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, then the format of the parent resource is used.</p><p>A depth-stencil-view description is needed when calling <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p> + + + <dd> <p>Resource data format (see <strong>{{DXGI_FORMAT}}</strong>). See remarks for allowable formats.</p> </dd> + + + <dd> <p>Type of resource (see <strong>{{D3D11_DSV_DIMENSION}}</strong>). Specifies how a depth-stencil resource will be accessed; the value is stored in the union in this structure.</p> </dd> + + + <dd> <p>A value that describes whether the texture is read only. Pass 0 to specify that it is not read only; otherwise, pass one of the members of the <strong>{{D3D11_DSV_FLAG}}</strong> enumerated type.</p> </dd> + + + <dd> <p>Specifies a 1D texture subresource (see <strong>{{D3D11_TEX1D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 1D texture subresources (see <strong>{{D3D11_TEX1D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a 2D texture subresource (see <strong>{{D3D11_TEX2D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 2D texture subresources (see <strong>{{D3D11_TEX2D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a multisampled 2D texture (see <strong>{{D3D11_TEX2DMS_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of multisampled 2D textures (see <strong>{{D3D11_TEX2DMS_ARRAY_DSV}}</strong>).</p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>View options for the resource (see <strong>{{D3D11_BUFFER_UAV_FLAG}}</strong>).</p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_UAV_DIMENSION}}</strong>), which specifies how the resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_UAV}}</strong>).</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>These are the default values for sampler state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MinLOD</td><td>-3.402823466e+38F (-{{FLT_MAX}})</td></tr> <tr><td>MaxLOD</td><td>3.402823466e+38F ({{FLT_MAX}})</td></tr> <tr><td>MipMapLODBias</td><td>0.0f</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor</td><td>float4(1.0f,1.0f,1.0f,1.0f)</td></tr> <tr><td>Texture</td><td>N/A</td></tr> </table><p>?</p> + + + <dd> <p> Filtering method to use when sampling a texture (see <strong>{{D3D11_FILTER}}</strong>). </p> </dd> + + + <dd> <p> Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see <strong>{{D3D11_TEXTURE_ADDRESS_MODE}}</strong>). </p> </dd> + + + <dd> <p>Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.</p> </dd> + + + <dd> <p>Clamping value used if {{D3D11_FILTER_ANISOTROPIC}} or {{D3D11_FILTER_COMPARISON_ANISOTROPIC}} is specified in Filter. Valid values are between 1 and 16.</p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p>Border color to use if {{D3D11_TEXTURE_ADDRESS_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.</p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p>Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D11_FLOAT32_MAX}}.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>Type of query (see <strong>{{D3D11_QUERY}}</strong>).</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>).</p> </dd> + + + + + <p>Query information about the reliability of a timestamp query.</p> + <p>For a list of query types see <strong>{{D3D11_QUERY}}</strong>.</p> + + + <dd> <p>How frequently the {{GPU}} counter increments in Hz.</p> </dd> + + + <dd> <p>If this is <strong>{{TRUE}}</strong>, something occurred in between the query's <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the {{AC}} cord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by <strong>{{ID3D11DeviceContext::GetData}}</strong> for a timestamp query is only reliable if <strong>Disjoint</strong> is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Query information about the amount of data streamed out to the stream-output buffers in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Describes a counter.</p> + <p>This structure is used by <strong>{{ID3D11Counter::GetDesc}}</strong>, <strong>{{ID3D11Device::CheckCounter}}</strong> and <strong>{{ID3D11Device::CreateCounter}}</strong>.</p> + + + <dd> <p>Type of counter (see <strong>{{D3D11_COUNTER}}</strong>).</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Information about the video card's performance counter capabilities.</p> + <p>This structure is returned by <strong>{{ID3D11Device::CheckCounterInfo}}</strong>.</p> + + + <dd> <p>Largest device-dependent counter {{ID}} that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}. See <strong>{{D3D11_COUNTER}}</strong>.</p> </dd> + + + <dd> <p>Number of counters that can be simultaneously supported.</p> </dd> + + + <dd> <p>Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the {{VERTEX_PROCESSING}}, {{GEOMETRY_PROCESSING}}, {{PIXEL_PROCESSING}}, and {{OTHER_GPU_PROCESSING}} counters. </p> </dd> + + + + + <p>Describes an {{HLSL}} class instance.</p> + <p>The {{D3D11_CLASS_INSTANCE_DESC}} structure is returned by the <strong>{{ID3D11ClassInstance::GetDesc}}</strong> method.</p><p>The members of this structure except <strong>InstanceIndex</strong> are valid (non default values) if they describe a class instance aquired using <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The <strong>InstanceIndex</strong> member is only valid when the class instance is aquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>.</p> + + + <dd> <p>The instance {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The instance index of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The type {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>Describes the constant buffer associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base constant buffer offset associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base texture associated with an {{HLSL}} class; the default value is 127.</p> </dd> + + + <dd> <p>The base sampler associated with an {{HLSL}} class; the default value is 15.</p> </dd> + + + <dd> <p>True if the class was created; the default value is false.</p> </dd> + + + + + <p>Describes the multi-threading features that are supported by the current graphics driver.</p> + <p>Use the {{D3D11_FEATURE_DATA_THREADING}} structure with the <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> method to determine multi-threading support.</p> + + + <dd> <p><strong>{{TRUE}}</strong> means resources can be created concurrently on multiple threads while drawing; <strong>{{FALSE}}</strong> means that the presence of coarse synchronization will prevent concurrency.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> means command lists are supported by the current driver; <strong>{{FALSE}}</strong> means that the {{API}} will emulate deferred contexts and command lists with software.</p> </dd> + + + + + <p>Describes double data type support in the current graphics driver.</p> + <p>If the runtime sets <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>, the hardware and driver support the following Shader Model 5 instructions:</p><ul> <li> dadd </li> <li> dmax </li> <li> dmin </li> <li> dmul </li> <li> deq </li> <li> dge </li> <li> dlt </li> <li> dne </li> <li> dmov </li> <li> dmovc </li> <li> dtof </li> <li> ftod </li> </ul><strong>Note</strong>??If <strong>DoublePrecisionFloatShaderOps</strong> is <strong>{{TRUE}}</strong>, the hardware and driver do not necessarily support double-precision division.? + + + <dd> <p>Specifies whether double types are allowed. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong> in order for you to use any {{HLSL}} shader that is compiled with a double type.</p> </dd> + + + + + <p>Describes which resources are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> flags indicating which resources are supported.</p> </dd> + + + + + <p>Describes which unordered resource options are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT2}}</strong> flags indicating which unordered resource options are supported.</p> </dd> + + + + + <p>Describes compute shader and raw and structured buffer support in the current graphics driver.</p> + <p>Direct3D 11 devices ({{D3D_FEATURE_LEVEL_11_0}}) are required to support Compute Shader model 5.0. Direct3D 10.x devices ({{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_10_1}}) can optionally support Compute Shader model 4.0 or 4.1.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if compute shaders and raw and structured buffers are supported; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 11.1 feature options in the current graphics driver.</p> + <p>If a Microsoft Direct3D device supports feature level 11.1 (<strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>), when you call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>, <strong>CheckFeatureSupport</strong> returns a reference to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> with all member set to <strong>{{TRUE}}</strong> except the <strong>{{SAD4ShaderInstructions}}</strong> and <strong>ExtendedDoublesShaderInstructions</strong> members, which are optionally supported by the hardware and driver and therefore can be <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p><p>Feature level 11.1 provides the following additional features:</p><ul> <li>{{UAVs}} at every shader stage with 64 {{UAV}} bind slots instead of 8.</li> <li>Target-independent rasterization, which enables you to set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, 8, or 16 and to render to {{RTVs}} with a single sample.</li> <li>{{UAV}}-only rendering with the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> set to up to 16 (only up to 8 for feature level 11).</li> </ul><p>The runtime always sets the following groupings of members identically. That is, all the values in a grouping are <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> together:</p><ul> <li><strong>DiscardAPIsSeenByDriver</strong> and <strong>FlagsForUpdateAndCopySeenByDriver</strong></li> <li><strong>ClearView</strong>, <strong>CopyWithOverlap</strong>, <strong>ConstantBufferPartialUpdate</strong>, <strong>ConstantBufferOffsetting</strong>, and <strong>MapNoOverwriteOnDynamicConstantBuffer</strong></li> <li><strong>MapNoOverwriteOnDynamicBufferSRV</strong> and <strong>MultisampleRTVWithForcedSampleCountOne</strong></li> </ul> + + + <dd> <p>Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1.</p> </dd> + + + <dd> <p>Specifies whether the driver can render with no render target views ({{RTVs}}) or depth stencil views ({{DSVs}}), and only unordered access views ({{UAVs}}) bound. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver can render with no {{RTVs}} or {{DSVs}} and only {{UAVs}} bound and <strong>{{FALSE}}</strong> otherwise. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, or 8 when you render with no {{RTVs}} or {{DSV}} and only {{UAVs}} bound. For feature level 11.1, this member is always <strong>{{TRUE}}</strong> and you can also set <strong>ForcedSampleCount</strong> to 16 in addition to 1, 4, or 8. The default value of <strong>ForcedSampleCount</strong> is 0, which means the same as if the value is set to 1. You can always set <strong>ForcedSampleCount</strong> to 0 or 1 for {{UAV}}-only rendering independently of how this member is set.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::DiscardView}}</strong> and <strong>{{ID3D11DeviceContext1::DiscardResource}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports these methods and <strong>{{FALSE}}</strong> otherwise. How this member is set does not indicate whether the driver actually uses these methods; that is, the driver might ignore these methods if they are not useful to the hardware. If <strong>{{FALSE}}</strong>, the runtime does not expose these methods to the driver because the driver does not support them. You can monitor this member during development to rule out legacy drivers on hardware where these methods might have otherwise been beneficial. You are not required to write separate code paths based on whether this member is <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>; you can call these methods whenever applicable.</p> </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for copy and update that are exposed by the <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports new semantics for copy and update. The runtime sets this member to <strong>{{FALSE}}</strong> only for legacy drivers. The runtime handles this member similarly to the <strong>DiscardAPIsSeenByDriver</strong> member.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> with overlapping source and destination rectangles. The runtime sets this member to <strong>{{TRUE}}</strong> if you can call <strong>CopySubresourceRegion1</strong> with overlapping source and destination rectangles and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because drivers already support the option for these feature levels. ? </dd> + + + <dd> <p>Specifies whether the driver supports partial updates of constant buffers. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports partial updates of constant buffers and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for setting offsets in constant buffers for a shader. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports allowing you to specify offsets when you call new methods like the <strong>{{ID3D11DeviceContext1::VSSetConstantBuffers1}}</strong> method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic constant buffer (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic buffer {{SRV}} (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation.</p> </dd> + + + <dd> <p>Specifies whether the driver supports multisample rendering when you render with {{RTVs}} bound. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1 with a multisample {{RTV}} bound. The driver can support this option on feature level 10 and higher. If <strong>{{FALSE}}</strong>, the rasterizer-state creation will fail because the driver is legacy or the feature level is too low.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>msad4</strong> intrinsic function in shaders. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support calls to <strong>msad4</strong> intrinsic functions in shaders. If <strong>{{FALSE}}</strong>, the driver is legacy or the hardware does not support the option; the runtime will fail shader creation for shaders that use <strong>msad4</strong>.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>fma</strong> intrinsic function and other extended doubles instructions (<strong>{{DDIV}}</strong> and <strong>{{DRCP}}</strong>) in shaders. The <strong>fma</strong> intrinsic function emits an extended doubles <strong>{{DFMA}}</strong> instruction. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended doubles instructions in shaders (shader model 5 and higher). Support of this option implies support of basic double-precision shader instructions as well. You can use the <strong>{{D3D11_FEATURE_DOUBLES}}</strong> value to query for support of double-precision shaders. If <strong>{{FALSE}}</strong>, the hardware and driver do not support the option; the runtime will fail shader creation for shaders that use extended doubles instructions.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support sharing a greater variety of Texture2D resource types and formats. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended Texture2D resource sharing.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes information about Direct3D 11.1 adapter architecture.</p> + + + <dd> <p>Specifies whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain {{API}} usage patterns that are fine for TileBasedDefferredRenderers ({{TBDRs}}) can perform worse on non-{{TBDRs}} and vice versa. Applications that are careful about rendering can be friendly to both {{TBDR}} and non-{{TBDR}} architectures. <strong>{{TRUE}}</strong> if the rendering device batches rendering commands and <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more information about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. For more information about this feature, see feature level.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D?9 shadow support in the current graphics driver. </p> + <p>Shadows are an important element in realistic 3D scenes. You can use the shadow buffer technique to render shadows. The basic principle of the technique is to use a depth buffer to store the scene depth info from the perspective of the light source, and then compare each point rendered in the scene with that buffer to determine if it is in shadow.</p><p>To render objects into the scene with shadows on them, you create <strong>sampler state objects</strong> with comparison filtering set and the comparison mode (ComparisonFunc) to LessEqual. You can also set BorderColor addressing on this depth sampler, even though BorderColor isn't typically allowed on feature levels 9.1 and 9.2. By using the border color and picking 0.0 or 1.0 as the border color value, you can control whether the regions off the edge of the shadow map appear to be always in shadow or never in shadow respectively. +You can control the shadow filter quality by the Mag and Min filter settings in the comparison sampler. Point sampling will produce shadows with non-anti-aliased edges. Linear filter sampler settings will result in higher quality shadow edges, but might affect performance on some power-optimized devices.</p><strong>Note</strong>??If you use a separate setting for Mag versus Min filter options, you produce an undefined result. Anisotropic filtering is not supported. The Mip filter choice is not relevant because feature level 9.x does not allow mipmapped depth buffers.?<strong>Note</strong>??On feature level 9.x, you can't compile a shader with the <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> intrinsic functions by using older versions of the compiler. For example, you can't use the fxc.exe compiler that ships with the DirectX {{SDK}} or use the <strong>{{D3DCompile}}**</strong> functions (like <strong>{{D3DCompileFromFile}}</strong>) that are implemented in {{D3DCompiler_43}}.dll and earlier. These intrinsic functions on feature level 9.x are only supported in the fxc.exe compiler that ships with the Windows?8 {{SDK}} and later and with the <strong>{{D3DCompile}}**</strong> functions that are implemented in {{D3DCompiler_44}}.dll and later. +But these intrinsic functions are present in shader models for feature levels higher than 9.x.? + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes precision support options for shaders in the current graphics driver.</p> + <p>For hardware at Direct3D 10 and higher feature levels, the runtime sets both members identically. For hardware at Direct3D 9.3 and lower feature levels, the runtime can set a lower precision support in the <strong>PixelShaderMinPrecision</strong> member than the <strong>AllOtherShaderStagesMinPrecision</strong> member; for 9.3 and lower, all other shader stages represent only the vertex shader.</p><p>For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for the pixel shader. A value of zero indicates that the driver supports only full 32-bit precision for the pixel shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for all other shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all other shader stages.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 11.2 feature options in the current graphics driver.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D11_OPTIONS1}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The members of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> will be set appropriately based on the system's graphics hardware and graphics driver. </p> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D11_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support the filtering options (<strong>{{D3D11_FILTER}}</strong>) of comparing the result to the minimum or maximum value during texture sampling. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support these filtering options. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver also support the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method on depth formats. For info about valid depth formats, see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies support for creating <strong>{{ID3D11Buffer}}</strong> resources that can be passed to the <strong>{{ID3D11DeviceContext::Map}}</strong> and <strong>{{ID3D11DeviceContext::Unmap}}</strong> methods. This means that the <strong>{{CPUAccessFlags}}</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure may be set with the desired <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong> elements when the <strong>Usage</strong> member of <strong>{{D3D11_BUFFER_DESC}}</strong> is set to <strong>{{D3D11_USAGE_DEFAULT}}</strong>. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware is capable of at least <strong>{{D3D_FEATURE_LEVEL_11_0}}</strong> and the graphics device driver supports mappable default buffers. </p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether simple instancing is supported.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>SimpleInstancingSupported</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>. </p><p> Simple instancing means that instancing is supported with the caveat that the <strong>InstanceDataStepRate</strong> member of the <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> structure must be equal to 1. This does not change the full instancing support provided by hardware at feature level 9.3 and above, and is meant to expose the instancing support that may be available on feature level 9.2 and 9.1 hardware. </p> + + + <dd> <p> Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether a {{GPU}} profiling technique is supported.</p> + <p>If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_MARKER_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>Profile</strong> member of <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Specifies whether the hardware and driver support a {{GPU}} profiling technique that can be used with development tools. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support data marking.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + <p>You can use the <strong>{{D3D11_FEATURE_D3D9_OPTIONS1}}</strong> enumeration value with <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> to query a driver about support for Direct3D 9 feature options rather than making multiple calls to <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> by using <strong>{{D3D11_FEATURE_D3D9_OPTIONS}}</strong>, <strong>{{D3D11_FEATURE_D3D9_SHADOW_SUPPORT}}</strong>, and <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>, which provide identical info about supported Direct3D 9 feature options.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more info about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. </p> </dd> + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support setting a single face of a <strong>TextureCube</strong> as a render target while the depth stencil surface that is bound alongside can be a <strong>Texture2D</strong> (as opposed to <strong>TextureCube</strong>). The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support this feature; otherwise <strong>{{FALSE}}</strong>.</p> <p>If the hardware and driver don't support this feature, the app must match the render target surface type with the depth stencil surface type. Because hardware at Direct3D 9.3 and lower feature levels doesn't allow <strong>TextureCube</strong> depth surfaces, the only way to render a scene into a <strong>TextureCube</strong> while having depth buffering enabled is to render each <strong>TextureCube</strong> face separately to a <strong>Texture2D</strong> render target first (because that can be matched with a <strong>Texture2D</strong> depth), and then copy the results into the <strong>TextureCube</strong>. If the hardware and driver support this feature, the app can just render to the <strong>TextureCube</strong> faces directly while getting depth buffering out of a <strong>Texture2D</strong> depth buffer.</p> <p>You only need to query this feature from hardware at Direct3D 9.3 and lower feature levels because hardware at Direct3D 10.0 and higher feature levels allow <strong>TextureCube</strong> depth surfaces.</p> </dd> + + + + + + + + <p>Describes Direct3D 11.3 feature options in the current graphics driver.</p> + + + <dd> <p> Whether to use the {{VP}} and {{RT}} array index from any shader feeding the rasterizer. </p> </dd> + + + + + <p> Describes feature data {{GPU}} virtual address support, including maximum address bits per resource and per process. </p> + <p> See <strong>{{D3D11_FEATURE}}</strong>. </p> + + + <dd> <p> The maximum {{GPU}} virtual address bits per resource. </p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process. </p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + + + + <p>Describes a video stream for a Microsoft Direct3D?11 video decoder or video processor. </p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The width of the video frame, in pixels. </p> </dd> + + + <dd> <p>The height of the video frame, in pixels. </p> </dd> + + + <dd> <p>The output surface format, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + + + <p>Describes the configuration of a Microsoft Direct3D?11 decoder device for DirectX Video Acceleration ({{DXVA}}). </p> + + + <dd> <p>If the bitstream data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 0, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the macroblock control data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the residual difference decoding data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>Indicates whether the host-decoder sends raw bit-stream data. If the value is 1, the data for the pictures will be sent in bit-stream buffers as raw bit-stream content. If the value is 0, picture data will be sent using macroblock control command buffers. If either <strong>ConfigResidDiffHost</strong> or <strong>ConfigResidDiffAccelerator</strong> is 1, the value must be 0. </p> </dd> + + + <dd> <p>Specifies whether macroblock control commands are in raster scan order or in arbitrary order. If the value is 1, the macroblock control commands within each macroblock control command buffer are in raster-scan order. If the value is 0, the order is arbitrary. For some types of bit streams, forcing raster order either greatly increases the number of required macroblock control buffers that must be processed, or requires host reordering of the control information. Therefore, supporting arbitrary order can be more efficient. </p> </dd> + + + <dd> <p>Contains the host residual difference configuration. If the value is 1, some residual difference decoding data may be sent as blocks in the spatial domain from the host. If the value is 0, spatial domain data will not be sent. </p> </dd> + + + <dd> <p>Indicates the word size used to represent residual difference spatial-domain blocks for predicted (non-intra) pictures when using host-based residual difference decoding. </p> <p>If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 1, the host will send residual difference spatial-domain blocks for non-intra macroblocks using 8-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 0, the host will send residual difference spatial-domain blocks of data for non-intra macroblocks using 16-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial domain blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial domain blocks for intra macroblocks are sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 0, <strong>ConfigSpatialResid8</strong> must be 0. </p> <p> For intra pictures, spatial-domain blocks must be sent using 8-bit samples if bits-per-pixel ({{BPP}}) is 8, and using 16-bit samples if {{BPP}} &gt; 8. If <strong>ConfigIntraResidUnsigned</strong> is 0, these samples are sent as signed integer values relative to a constant reference value of 2^({{BPP}}?1), and if <strong>ConfigIntraResidUnsigned</strong> is 1, these samples are sent as unsigned integer values relative to a constant reference value of 0. </p> </dd> + + + <dd> <p> If the value is 1, 8-bit difference overflow blocks are subtracted rather than added. The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 1. </p> <p> The ability to subtract differences rather than add them enables 8-bit difference decoding to be fully compliant with the full ?255 range of values required in video decoder specifications, because +255 cannot be represented as the addition of two signed 8-bit numbers, but any number in the range ?255 can be represented as the difference between two signed 8-bit numbers (+255 = +127 minus ?128).</p> </dd> + + + <dd> <p> If the value is 1, spatial-domain blocks for intra macroblocks must be clipped to an 8-bit range on the host and spatial-domain blocks for non-intra macroblocks must be clipped to a 9-bit range on the host. If the value is 0, no such clipping is necessary by the host. </p> <p> The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 0 and <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, any spatial-domain residual difference data must be sent in a chrominance-interleaved form matching the {{YUV}} format chrominance interleaving pattern. The value must be 0 unless <strong>ConfigResidDiffHost</strong> is 1 and the {{YUV}} format is {{NV12}} or {{NV21}}. </p> </dd> + + + <dd> <p> Indicates the method of representation of spatial-domain blocks of residual difference data for intra blocks when using host-based difference decoding. </p> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1), regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks must be sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0, regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> The value of the member must be 0 unless <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, transform-domain blocks of coefficient data may be sent from the host for accelerator-based {{IDCT}}. If the value is 0, accelerator-based {{IDCT}} will not be used. If both <strong>ConfigResidDiffHost</strong> and <strong>ConfigResidDiffAccelerator</strong> are 1, this indicates that some residual difference decoding will be done on the host and some on the accelerator, as indicated by macroblock-level control commands. </p> <p> The value must be 0 if <strong>ConfigBitstreamRaw</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the inverse scan for transform-domain block processing will be performed on the host, and absolute indices will be sent instead for any transform coefficients. If the value is 0, the inverse scan will be performed on the accelerator. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>Config4GroupedCoefs</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the {{IDCT}} specified in Annex W of {{ITU}}-T Recommendation H.263 is used. If the value is 0, any compliant {{IDCT}} can be used for off-host {{IDCT}}. </p> <p> The H.263 annex does not comply with the {{IDCT}} requirements of {{MPEG}}-2 corrigendum 2, so the value must not be 1 for use with {{MPEG}}-2 video. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0, indicating purely host-based residual difference decoding. </p> </dd> + + + <dd> <p> If the value is 1, transform coefficients for off-host {{IDCT}} will be sent using the <strong>{{DXVA_TCoef4Group}}</strong> structure. If the value is 0, the <strong>{{DXVA_TCoefSingle}}</strong> structure is used. The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>ConfigHostInverseScan</strong> is 1. </p> </dd> + + + <dd> <p> Specifies how many frames the decoder device processes at any one time. </p> </dd> + + + <dd> <p> Contains decoder-specific configuration information. </p> </dd> + + + + + <p>Contains an initialization vector ({{IV}}) for 128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher encryption. </p> + + + <dd> <p>The {{IV}}, in big-endian format.</p> </dd> + + + <dd> <p>The block count, in big-endian format.</p> </dd> + + + + + <p>Specifies which bytes in a video surface are encrypted. </p> + + + <dd> <p>The number of bytes that are encrypted at the start of the buffer. </p> </dd> + + + <dd> <p>The number of bytes that are skipped after the first <strong>NumEncryptedBytesAtBeginning</strong> bytes, and then after each block of <strong>NumBytesInEncryptPattern</strong> bytes. Skipped bytes are not encrypted. </p> </dd> + + + <dd> <p>The number of bytes that are encrypted after each block of skipped bytes.</p> </dd> + + + + + <p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. +</p> </dd> + + + <dd> <p>The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +</p> </dd> + + + <dd> <p>The number of macroblocks of data in the buffer. This count includes skipped macroblocks. </p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <strong>pIV</strong> parameter. If <strong>pIV</strong> is <strong>{{NULL}}</strong>, set this member to zero.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video surfaces are partially encrypted.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure that specifies which bytes of the surface are encrypted.</p> </dd> + + + + + <p>Contains driver-specific data for the <strong>{{ID3D11VideoContext::DecoderExtension}}</strong> method.</p> + <p>The exact meaning of each structure member depends on the value of <strong>Function</strong>.</p> + + + + <p>Describes the capabilities of a Microsoft Direct3D?11 video processor.</p> + <p>The video processor stores state information for each input stream. These states persist between blits. With each blit, the application selects which streams to enable or disable. Disabling a stream does not affect the state information for that stream.</p><p>The <strong>MaxStreamStates</strong> member gives the maximum number of stream states that can be saved. The <strong>MaxInputStreams</strong> member gives the maximum number of streams that can be enabled during a blit. These two values can differ. </p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSPR_FILTER_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of frame-rate conversion capabilities. To enumerate the frame-rate conversion capabilities, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method.</p> </dd> + + + <dd> <p>The maximum number of input streams that can be enabled at the same time. </p> </dd> + + + <dd> <p>The maximum number of input streams for which the device can store state data.</p> </dd> + + + + + <p>Defines a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + + + <dd> <p>The number of past reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>The number of future reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The number of custom frame rates that the driver supports. To get the list of custom frame rates, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong> method.</p> </dd> + + + + + <p>Describes the content-protection capabilities of a graphics driver.</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_CONTENT_PROTECTION_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of cryptographic key-exchange types that are supported by the driver. To get the list of key-exchange types, call the <strong>{{ID3D11VideoDevice::CheckCryptoKeyExchange}}</strong> method.</p> </dd> + + + <dd> <p>The encyrption block size, in bytes. The size of data to be encrypted must be a multiple of this value. </p> </dd> + + + <dd> <p>The total amount of memory, in bytes, that can be used to hold protected surfaces.</p> </dd> + + + + + <p>Specifies a custom rate for frame-rate conversion or inverse telecine ({{IVTC}}). </p> + <p>The <strong>CustomRate</strong> member gives the rate conversion factor, while the remaining members define the pattern of input and output samples.</p> + + + <dd> <p>The ratio of the output frame rate to the input frame rate, expressed as a <strong>{{DXGI_RATIONAL}}</strong> structure that holds a rational number. </p> </dd> + + + <dd> <p>The number of output frames that will be generated for every <em>N</em> input samples, where <em>N</em> = <strong>InputFramesOrFields</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the input stream must be interlaced. Otherwise, the input stream must be progressive. </p> </dd> + + + <dd> <p>The number of input fields or frames for every <em>N</em> output frames that will be generated, where <em>N</em> = <strong>OutputFrames</strong>. </p> </dd> + + + + + <p>Defines the range of supported values for an image filter. </p> + <p>The multiplier enables the filter range to have a fractional step value.</p><p>For example, a hue filter might have an actual range of [?180.0 ... +180.0] with a step size of 0.25. The device would report the following range and multiplier:</p><ul> <li>Minimum: ?720</li> <li>Maximum: +720</li> <li>Multiplier: 0.25</li> </ul><p>In this case, a filter value of 2 would be interpreted by the device as 0.50 (or 2 ? 0.25).</p><p>The device should use a multiplier that can be represented exactly as a base-2 fraction.</p> + + + <dd> <p>The minimum value of the filter. </p> </dd> + + + <dd> <p>The maximum value of the filter. </p> </dd> + + + <dd> <p>The default value of the filter. </p> </dd> + + + <dd> <p>A multiplier. Use the following formula to translate the filter setting into the actual filter value: <em>Actual Value</em> = <em>Set Value</em>???<em>Multiplier</em>.</p> </dd> + + + + + <p>Describes a video stream for a video processor.</p> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> enumeration that describes how the video stream is interlaced.</p> </dd> + + + <dd> <p>The frame rate of the input video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the input frames, in pixels.</p> </dd> + + + <dd> <p>The height of the input frames, in pixels.</p> </dd> + + + <dd> <p>The frame rate of the output video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the output frames, in pixels. </p> </dd> + + + <dd> <p>The height of the output frames, in pixels.</p> </dd> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_USAGE}}</strong> enumeration that describes how the video processor will be used. The value indicates the desired trade-off between speed and video quality. The driver uses this flag as a hint when it creates the video processor.</p> </dd> + + + + + <p>Specifies an {{RGB}} color value. </p> + <p>The {{RGB}} values have a nominal range of [0...1]. For an {{RGB}} format with <em>n</em> bits per channel, the value of each color component is calculated as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>For example, for {{RGB}}-32 (8 bits per channel), <code>val = {{BYTE}}(f * 255.0)</code>.</p> + + + <dd> <p>The red value.</p> </dd> + + + <dd> <p>The green value.</p> </dd> + + + <dd> <p>The blue value.</p> </dd> + + + <dd> <p>The alpha value. Values range from 0 (transparent) to 1 (opaque). +</p> </dd> + + + + + + + + <p>Defines a color value for Microsoft Direct3D?11 video.</p> + <p>The anonymous union can represent both {{RGB}} and {{YCbCr}} colors. The interpretation of the union depends on the context. </p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_YCbCrA}}</strong> structure that contains a {{YCbCr}} color value. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_RGBA}}</strong> structure that contains an {{RGB}} color value. </p> </dd> + + + + + <p>Specifies the color space for video processing.</p> + <p>The <strong>{{RGB_Range}}</strong> member applies to {{RGB}} output, while the <strong>{{YCbCr_Matrix}}</strong> and <strong>{{YCbCr_xvYCC}}</strong> members apply to {{YCbCr}} output. If the driver performs color-space conversion on the background color, it uses the values that apply to both color spaces. </p><p>If the driver supports extended {{YCbCr}} (xvYCC), it returns the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC}}</strong> capabilities flag in the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. Otherwise, the driver ignores the value of <strong>{{YCbCr_xvYCC}}</strong> and treats all {{YCbCr}} output as conventional {{YCbCr}}. </p><p>If extended {{YCbCr}} is supported, it can be used with either transfer matrix. Extended {{YCbCr}} does not change the black point or white point?the black point is still 16 and the white point is still 235. However, extended {{YCbCr}} explicitly allows blacker-than-black values in the range 1?15, and whiter-than-white values in the range 236?254. When extended {{YCbCr}} is used, the driver should not clip the luma values to the nominal 16?235 range.</p> + + + <dd> <p>Specifies whether the output is intended for playback or video processing (such as editing or authoring). The device can optimize the processing based on the type. The default state value is 0 (playback). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Playback</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Video processing</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{RGB}} color range. The default state value is 0 (full range). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Full range (0-255)</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Limited range (16-235)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{YCbCr}} transfer matrix. The default state value is 0 ({{BT}}.601). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.601</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.709</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies whether the output uses conventional {{YCbCr}} or extended {{YCbCr}} (xvYCC). The default state value is zero (conventional {{YCbCr}}). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Conventional {{YCbCr}}</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Extended {{YCbCr}} (xvYCC)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE}}</strong>. </p> <p>Introduced in Windows?8.1.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + + + <p>Contains stream-level data for the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method. </p> + <p>If the stereo 3D format is <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>, the <strong>ppPastSurfaces</strong>, <strong>pInputSurface</strong>, and <strong>ppFutureSurfaces</strong> members contain the left view.</p> + + + + <p>Contains a Message Authentication Code ({{MAC}}). </p> + + + <dd> <p>A byte array that contains the cryptographic {{MAC}} value of the message.</p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method. </p> + + + + <p>Contains a response from the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method.</p> + + + + + + + <p>Specifies the protection level for video content.</p> + + + <dd> <dl> <dt><strong>ProtectionEnabled</strong></dt> <dd> <p>If 1, video content protection is enabled. </p> </dd> <dt><strong>OverlayOrFullscreenRequired</strong></dt> <dd> <p>If 1, the application requires video to be displayed using either a hardware overlay or full-screen exclusive mode.</p> </dd> <dt><strong>Reserved </strong></dt> <dd> <p>Reserved. Set all bits to zero. </p> </dd> </dl> </dd> + + + <dd> <p>Use this member to access all of the bits in the union. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_PROTECTION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> value that specifies the channel type. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A handle to the device. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session that is associated with the decoder device.</p> </dd> + + + <dd> <p>A handle to the Direct3D device that is associated with the decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of processes that are allowed to open shared resources that have restricted access. A process cannot open such a resource unless the process has been granted access. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the process. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + <p>The Desktop Window Manager ({{DWM}}) process is identified by setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Other processes are identified by setting the process handle in <strong>ProcessHandle</strong> and setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the process in the list of processes.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessIdentifier</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member contains a valid handle to a process. Otherwise, this member is ignored.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of protected, shared resources that can be opened by any process without restrictions.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The number of output {{IDs}} associated with the specified device and cryptographic session.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + <dd> <p>An output {{ID}} that is associated with the specified device and cryptographic session.</p> </dd> + + + + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of encryption {{GUIDs}}. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies a supported encryption type.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE}} </strong>query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the current encryption type. </p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains the response from the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>The initial sequence number for queries.</p> </dd> + + + <dd> <p>The initial sequence number for commands.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_PROTECTION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A handle to the decoder device. Get this from <strong>{{ID3D11VideoDecoder::GetDriverHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the cryptographic session. Get this from <strong>{{ID3D11CryptoSession::GetCryptoSessionHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the Direct3D device. Get this from <strong>{{D3D11VideoContext::QueryAuthenticatedChannel}}</strong> using <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong>. +</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process. To specify the Desktop Window Manager ({{DWM}}) process, set this member to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Otherwise, set this member to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong> and set the <strong>ProcessHandle</strong> member to a valid handle.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessType</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member specifies a handle to a process. Otherwise, the value is ignored.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the specified process has access to restricted shared resources.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the type of encryption to apply.</p> </dd> + + + + + <p>Identifies the texture resource for a video decoder output view.</p> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video decoder output view.</p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VDOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VDOV}}</strong> structure that identifies the texture resource for the output view.</p> </dd> + + + + + <p>Identifies the texture resource for a video processor input view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video processor input view.</p> + + + <dd> <p>The surface format. If zero, the driver uses the {{DXGI}} format that was used to create the resource. If you are using feature level 9, the value must be zero.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPIV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPIV}}</strong> structure that identifies the texture resource.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The index of the first texture to use.</p> </dd> + + + <dd> <p>The number of textures in the array.</p> </dd> + + + + + <p>Describes a video processor output view.</p> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPOV}}</strong> structure that identifies the texture resource for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2D}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_VPOV}}</strong> structure that identifies the texture array for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2DARRAY}}</strong>.</p> </dd> + + + + + <p>A device-child interface accesses data used by a device.</p> + <p>There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Get a reference to the device that created this interface.</p> + <p>Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a device (see <strong>{{ID3D11Device}}</strong>).</p> </dd> + + + + + <p>Get application-defined data from a device child.</p> + <p> The data stored in the device child is set by calling <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device child if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p>Set application-defined data to a device child and associate that data with an application-defined guid.</p> + <p>The data stored in the device child with this method can be retrieved with <strong>{{ID3D11DeviceChild::GetPrivateData}}</strong>.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device child. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>When this method is called ::addref() will be called on the {{IUnknown}}-derived interface, and when the device child is detroyed ::release() will be called on the {{IUnknown}}-derived interface.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>The depth-stencil-state interface holds a description for depth-stencil state that you can bind to the output-merger stage.</p> + <p>To create a depth-stencil-state object, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>. To bind the depth-stencil-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> + + + + <p>Gets the description for depth-stencil state that you used to create the depth-stencil-state object.</p> + <p>You use the description for depth-stencil state in a call to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> structure that receives a description of the depth-stencil state.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device::CreateBlendState}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device::CreateBlendState}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC}}</strong> structure that receives a description of the blend state.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device::CreateRasterizerState}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RASTERIZER_DESC}}</strong> structure that receives a description of the rasterizer state.</p> </dd> + + + + + <p>A resource interface provides common actions on all resources.</p> + <p>You don't directly create a resource interface; instead, you create buffers and textures that inherit from a resource interface. For more info, see How to: Create a Vertex Buffer, How to: Create an Index Buffer, How to: Create a Constant Buffer, and How to: Create a Texture.</p> + + + + <p>Get the type of the resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Pointer to the resource type (see <strong>{{D3D11_RESOURCE_DIMENSION}}</strong>). </p> </dd> + + + + + <p>Set the eviction priority of a resource.</p> + <p>Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.</p><p>A resource that is set to the maximum priority, {{DXGI_RESOURCE_PRIORITY_MAXIMUM}}, is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model ({{WDDM}}) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.</p><p>Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement. </p> + <p>Returns nothing.</p> + + + <dd> <p>Eviction priority for the resource, which is one of the following values:</p> <ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> </dd> + + + + + <p>Get the eviction priority of a resource.</p> + + <p>One of the following values, which specifies the eviction priority for the resource:</p><ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> + + + + <p>A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.</p> + <p>There are three types of buffers: vertex, index, or a shader-constant buffer. Create a buffer resource by calling <strong>{{ID3D11Device::CreateBuffer}}</strong>.</p><p>A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to <strong>{{ID3D11DeviceContext::IASetVertexBuffers}}</strong> and <strong>{{ID3D11DeviceContext::IASetIndexBuffer}}</strong>, to the stream-output stage by a call to <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>, and to a shader stage by calling the appropriate shader method (such as <strong>{{ID3D11DeviceContext::VSSetConstantBuffers}}</strong> for example).</p><p>Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously.</p> + + + + <p>Get the properties of a buffer resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_BUFFER_DESC}}</strong>) filled in by the method.</p> </dd> + + + + + <p>A 1D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty 1D texture, call <strong>{{ID3D11Device::CreateTexture1D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 1D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong>).</p> </dd> + + + + + <p>A 2D texture interface manages texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device::CreateTexture2D}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE2D_DESC}}</strong>).</p> </dd> + + + + + <p>A 3D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device::CreateTexture3D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</p> </dd> + + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>A view interface is the base interface for all views. There are four types of views; a depth-stencil view, a render-target view, a shader-resource view, and an unordered-access view.</p><ul> <li>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>.</li> <li>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</li> <li>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</li> <li>To create an unordered-access view, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</li> </ul><p>All resources must be bound to the pipeline before they can be accessed.</p><ul> <li>To bind a render-target view or a depth-stencil view, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</li> <li>To bind a shader resource, call <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>.</li> </ul> + + + + <p>Get the resource that is accessed through this view.</p> + <p>This function increments the reference count of the resource by one, so it is necessary to call <strong>Release</strong> on the returned reference when the application is done with it. Destroying (or losing) the returned reference before <strong>Release</strong> is called will result in a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to the resource that is accessed through this view. (See <strong>{{ID3D11Resource}}</strong>.)</p> </dd> + + + + + <p>A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Get the shader resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure to be filled with data about the shader resource view.</p> </dd> + + + + + <p>A render-target-view interface identifies the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.</p> + + + + <p>Get the properties of a render target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the description of a render target view (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Get a description of the resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.)</p> </dd> + + + + + <p>A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.</p> + <p>The vertex-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a vertex shader interface, call <strong>{{ID3D11Device::CreateVertexShader}}</strong>. Before using a vertex shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A hull-shader interface manages an executable program (a hull shader) that controls the hull-shader stage.</p> + <p>The hull-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a hull-shader interface, call <strong>{{ID3D11Device::CreateHullShader}}</strong>. Before using a hull shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::HSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A domain-shader interface manages an executable program (a domain shader) that controls the domain-shader stage.</p> + <p>The domain-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a domain-shader interface, call <strong>{{ID3D11Device::CreateDomainShader}}</strong>. Before using a domain shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::DSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.</p> + <p>The geometry-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a geometry shader interface, call either <strong>{{ID3D11Device::CreateGeometryShader}}</strong> or <strong>{{ID3D11Device::CreateGeometryShaderWithStreamOutput}}</strong>. Before using a geometry shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.</p> + <p>The pixel-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders in are implemented from a common set of features referred to as the common-shader core..</p><p>To create a pixel shader interface, call <strong>{{ID3D11Device::CreatePixelShader}}</strong>. Before using a pixel shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A compute-shader interface manages an executable program (a compute shader) that controls the compute-shader stage.</p> + <p>The compute-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a compute-shader interface, call <strong>{{ID3D11Device::CreateComputeShader}}</strong>. Before using a compute shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::CSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>An input-layout interface holds a definition of how to feed vertex data that is laid out in memory into the input-assembler stage of the graphics pipeline.</p> + <p>To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>. To bind the input-layout object to the input-assembler stage, call <strong>{{ID3D11DeviceContext::IASetInputLayout}}</strong>.</p> + + + + <p>The sampler-state interface holds a description for sampler state that you can bind to any shader stage of the pipeline for reference by texture sample operations.</p> + <p>To create a sampler-state object, call <strong>{{ID3D11Device::CreateSamplerState}}</strong>.</p><p>To bind a sampler-state object to any pipeline shader stage, call the following methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::VSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::HSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::PSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CSSetSamplers}}</strong> </li> </ul><p>You can bind the same sampler-state object to multiple shader stages simultaneously.</p> + + + + <p>Gets the description for sampler state that you used to create the sampler-state object.</p> + <p>You use the description for sampler state in a call to the <strong>{{ID3D11Device::CreateSamplerState}}</strong> method to create the sampler-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SAMPLER_DESC}}</strong> structure that receives a description of the sampler state.</p> </dd> + + + + + <p>This interface encapsulates methods for retrieving data from the {{GPU}} asynchronously.</p> + <p>There are three types of asynchronous interfaces, all of which inherit this interface:</p><ul> <li> <strong>{{ID3D11Query}}</strong> - Queries information from the {{GPU}}.</li> <li> <strong>{{ID3D11Predicate}}</strong> - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.</li> <li> <strong>{{ID3D11Counter}}</strong> - Measures {{GPU}} performance.</li> </ul> + + + + <p>Get the size of the data (in bytes) that is output when calling <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + <p>Size of the data (in bytes) that is output when calling GetData.</p> + + + + <p>A query interface queries information from the {{GPU}}.</p> + <p>A query can be created with <strong>{{ID3D11Device::CreateQuery}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>A query is typically executed as shown in the following code:</p><pre> {{D3D11_QUERY_DESC}} queryDesc; +... // Fill out queryDesc structure +{{ID3D11Query}} * pQuery; +pDevice-&gt;CreateQuery(&amp;queryDesc, &amp;pQuery); +pDeviceContext-&gt;Begin(pQuery); ... // Issue graphics commands pDeviceContext-&gt;End(pQuery); +{{UINT64}} queryData; // This data type is different depending on the query type while( {{S_OK}} != pDeviceContext-&gt;GetData(pQuery, &amp;queryData, sizeof({{UINT64}}), 0) ) +{ +} +</pre><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Get a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + + + <p>A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.</p> + <p>To create a predicate object, call <strong>{{ID3D11Device::CreatePredicate}}</strong>. To set the predicate object, call <strong>{{ID3D11DeviceContext::SetPredication}}</strong>.</p><p>There are two types of predicates: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.</p> + + + + <p>This interface encapsulates methods for measuring {{GPU}} performance.</p> + <p>A counter can be created with <strong>{{ID3D11Device::CreateCounter}}</strong>.</p><p>This is a derived class of <strong>{{ID3D11Asynchronous}}</strong>.</p><p>Counter data is gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.</p><p>Counters are best suited for profiling.</p><p>For a list of the types of performance counters, see <strong>{{D3D11_COUNTER}}</strong>.</p> + + + + <p>Get a counter description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} class.</p> + <p>This interface is created by calling <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The interface is used when binding shader resources to the pipeline using {{APIs}} such as <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p> + + + + <p> Gets the <strong>{{ID3D11ClassLinkage}}</strong> object associated with the current {{HLSL}} class. </p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Gets a description of the current {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p> An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated. </p><ul> <li> A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name <strong>DefaultShader</strong> would work in any shader that contained a type <strong>DefaultShader</strong> even though several shaders could describe a different type. </li> <li> A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in. </li> </ul><p> An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_CLASS_INSTANCE_DESC}}</strong> structure that describes the current {{HLSL}} class. </p> </dd> + + + + + <p>Gets the instance name of the current {{HLSL}} class.</p> + <p>GetInstanceName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The instance name of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pInstanceName</em> parameter. </p> </dd> + + + + + <p>Gets the type of the current {{HLSL}} class.</p> + <p>GetTypeName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Type of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pTypeName</em> parameter. </p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} dynamic linkage.</p> + <p>A class linkage object can hold up to 64K gotten instances. A gotten instance is a handle that references a variable name in any shader that is created with that linkage object. When you create a shader with a class linkage object, the runtime gathers these instances and stores them in the class linkage object. For more information about how a class linkage object is used, see Storing Variables and Types for Shaders to Share.</p><p>An <strong>{{ID3D11ClassLinkage}}</strong> object is created using the <strong>{{ID3D11Device::CreateClassLinkage}}</strong> method.</p> + + + + <p>Gets the class-instance object that represents the specified {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p> A class instance must have at least 1 data member in order to be available for the runtime to use with <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. Any instance with no members will be optimized out of a compiled shader blob as a zero-sized object. If you have a class with no data members, use <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong> instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>The name of a class for which to get the class instance.</p> </dd> + + + <dd> <p>The index of the class instance.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>Initializes a class-instance object that represents an {{HLSL}} class instance.</p> + <p>Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in.</p><p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>The type name of a class to initialize.</p> </dd> + + + <dd> <p>Identifies the constant buffer that contains the class data.</p> </dd> + + + <dd> <p>The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset.</p> </dd> + + + <dd> <p>The texture slot for the first texture; there may be multiple textures following the offset.</p> </dd> + + + <dd> <p>The sampler slot for the first sampler; there may be multiple samplers following the offset.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>The <strong>{{ID3D11CommandList}}</strong> interface encapsulates a list of graphics commands for play back.</p> + <p>There is no explicit creation method, simply declare an <strong>{{ID3D11CommandList}}</strong> interface, then call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> to record commands or <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong> to play back commands.</p> + + + + <p>Gets the initialization flags associated with the deferred context that created the command list.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + <p>The context flag is reserved for future use and is always 0.</p> + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p> + + + + <p>Sets the constant buffers used by the vertex shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{VSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets a pixel shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p> Set ppClassInstances to <strong>{{NULL}}</strong> if no interfaces are used in the shader. If it is not <strong>{{NULL}}</strong>, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the pixel shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MipLODBias</td><td>0</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor[0]</td><td>1.0f</td></tr> <tr><td>BorderColor[1]</td><td>1.0f</td></tr> <tr><td>BorderColor[2]</td><td>1.0f</td></tr> <tr><td>BorderColor[3]</td><td>1.0f</td></tr> <tr><td>MinLOD</td><td>-{{FLT_MAX}}</td></tr> <tr><td>MaxLOD</td><td>{{FLT_MAX}}</td></tr> </table><p>?</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Set a vertex shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Draw indexed, non-instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>If the sum of both indices is negative, the result of the function call is undefined.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, non-instanced primitives.</p> + <p><strong>Draw</strong> submits work to the rendering pipeline.</p><p>The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline.</p><p>Even without any vertex buffer bound to the pipeline, you can generate your own vertex data in your vertex shader by using the <strong>{{SV_VertexID}}</strong> system-value semantic to determine the current vertex that the runtime is processing.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Index of the first vertex, which is usually an offset in a vertex buffer.</p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Invalidate the reference to a resource and reenable the {{GPU}}'s access to that resource.</p> + <p> For info about how to use <strong>Unmap</strong>, see How to: Use dynamic resources. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{ID3D11Resource}}</strong> interface. </p> </dd> + + + <dd> <p>A subresource to be unmapped.</p> </dd> + + + + + <p> Sets the constant buffers used by the pixel shader pipeline stage. </p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an input-layout object to the input-assembler stage.</p> + <p>Input-layout objects describe how vertex buffer data is streamed into the {{IA}} pipeline stage. To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p> Bind an array of vertex buffers to the input-assembler stage. </p> + <p> For info about creating vertex buffers, see How to: Create a Vertex Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (that is, bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer can't be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an index buffer to the input-assembler stage.</p> + <p> For information about creating index buffers, see How to: Create an Index Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p> The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. </p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> object, that contains indices. The index buffer must have been created with the <strong>{{D3D11_BIND_INDEX_BUFFER}}</strong> flag. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers. </p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer to the first index to use.</p> </dd> + + + + + <p>Draw indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors.</p><p>The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}).</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>Index of the first vertex.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Sets the constant buffers used by the geometry shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>You can't use the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface to get information about what is currently bound to the pipeline in the device context. But you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> to get information from a compiled shader. For example, you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> and <strong>{{ID3D11ShaderReflectionVariable}}</strong> to determine the slot in which a geometry shader expects a constant buffer. You can then pass this slot number to <strong>{{GSSetConstantBuffers}}</strong> to set the constant buffer. You can call the <strong>{{D3D11Reflect}}</strong> function to retrieve the address of a reference to the <strong>{{ID3D11ShaderReflection}}</strong> interface and then call <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong> to get a reference to <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{GSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Set a geometry shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p>Bind an array of shader resources to the vertex-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the vertex shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Mark the beginning of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::End}}</strong> to mark the ending of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Mark the end of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::Begin}}</strong> to mark the beginning of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Get data from the graphics processing unit ({{GPU}}) asynchronously.</p> + <p>Queries in a deferred context are limited to predicated drawing. That is, you cannot call <strong>{{ID3D11DeviceContext::GetData}}</strong> on a deferred context to get data about a query; you can only call <strong>GetData</strong> on the immediate context to get data about a query. For predicated drawing, the results of a predication-type query are used by the {{GPU}} and not returned to an application. For more information about predication and predicated drawing, see <strong>{{D3D11DeviceContext::SetPredication}}</strong>.</p><p><strong>GetData</strong> retrieves the data that the runtime collected between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. Certain queries only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> in which case the data returned by <strong>GetData</strong> is accurate up to the last call to <strong>{{ID3D11DeviceContext::End}}</strong>. For information about the queries that only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> and about the type of data that <strong>GetData</strong> retrieves for each query, see <strong>{{D3D11_QUERY}}</strong>.</p><p>If <em>DataSize</em> is 0, <strong>GetData</strong> is only used to check status.</p><p>An application gathers counter data by calling <strong>{{ID3D11DeviceContext::Begin}}</strong>, issuing some graphics commands, calling <strong>{{ID3D11DeviceContext::End}}</strong>, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the <strong>Begin</strong> and <strong>End</strong> calls. For information about performance counter types, see <strong>{{D3D11_COUNTER}}</strong>. </p> + <p>This method returns one of the Direct3D 11 Return Codes. A return value of {{S_OK}} indicates that the data at <em>pData</em> is available for the calling application to access. A return value of {{S_FALSE}} indicates that the data is not yet available. If the data is not yet available, the application must call <strong>GetData</strong> until the data is available.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface for the object about which <strong>GetData</strong> retrieves data.</p> </dd> + + + <dd> <p>Address of memory that will receive the data. If <strong>{{NULL}}</strong>, <strong>GetData</strong> will be used only to check status. The type of data output depends on the type of asynchronous interface.</p> </dd> + + + <dd> <p>Size of the data to retrieve or 0. Must be 0 when <em>pData</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Optional flags. Can be 0 or any combination of the flags enumerated by <strong>{{D3D11_ASYNC_GETDATA_FLAG}}</strong>.</p> </dd> + + + + + <p>Set a rendering predicate.</p> + <p>The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> are invalid.</p><p>Use this method to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting predicate data of the predicate is equal to the <em>PredicateValue</em>. However, some predicates are only hints, so they may not actually prevent operations from being performed. </p><p>The primary usefulness of predication is to allow an application to issue rendering and resource manipulation commands without taking the performance hit of spinning, waiting for <strong>{{ID3D11DeviceContext::GetData}}</strong> to return. So, predication can occur while <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. Another way to think of it: an application can also use predication as a fallback, if it is possible that <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. If <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_OK}}</strong>, the application can skip calling the rendering and resource manipulation commands manually with it's own application logic.</p><p>Rendering and resource manipulation commands for Direct3D?11 include these Draw, Dispatch, Copy, Update, Clear, Generate, and Resolve operations.</p><ul> <li> <strong>Draw</strong> </li> <li> <strong>DrawAuto</strong> </li> <li> <strong>DrawIndexed</strong> </li> <li> <strong>DrawIndexedInstanced</strong> </li> <li> <strong>DrawIndexedInstancedIndirect</strong> </li> <li> <strong>DrawInstanced</strong> </li> <li> <strong>DrawInstancedIndirect</strong> </li> <li> <strong>Dispatch</strong> </li> <li> <strong>DispatchIndirect</strong> </li> <li> <strong>CopyResource</strong> </li> <li> <strong>CopyStructureCount</strong> </li> <li> <strong>CopySubresourceRegion</strong> </li> <li> <strong>CopySubresourceRegion1</strong> </li> <li> <strong>CopyTiles</strong> </li> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateSubresource</strong> </li> <li> <strong>UpdateSubresource1</strong> </li> <li> <strong>UpdateTiles</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> <li> <strong>ClearRenderTargetView</strong> </li> <li> <strong>ClearUnorderedAccessViewFloat</strong> </li> <li> <strong>ClearUnorderedAccessViewUint</strong> </li> <li> <strong>ClearView</strong> </li> <li> <strong>ClearDepthStencilView</strong> </li> <li> <strong>GenerateMips</strong> </li> <li> <strong>ResolveSubresource</strong> </li> </ul><p>You can set a rendering predicate on an immediate or a deferred context. For info about immediate and deferred contexts, see Immediate and Deferred Rendering. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Predicate}}</strong> interface that represents the rendering predicate. A <strong>{{NULL}}</strong> value indicates "no" predication; in this case, the value of <em>PredicateValue</em> is irrelevant but will be preserved for <strong>{{ID3D11DeviceContext::GetPredication}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, rendering will be affected by when the predicate's conditions are met. If <strong>{{FALSE}}</strong>, rendering will be affected when the conditions are not met.</p> </dd> + + + + + <p>Bind an array of shader resources to the geometry shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the geometry shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.</p> + <p>The maximum number of active render targets a device can have active at any given time is set by a #define in {{D3D11}}.h called <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to <strong>{{NULL}}</strong>.</p><p>If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to <strong>{{NULL}}</strong>, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>If the render-target views were created from an array resource type, all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.</p><p>The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.</p><p>Any combination of the eight slots for render targets can have a render target set or not set.</p><p>The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.</p> + <p>Returns nothing.</p> + + + + <p>Binds resources to the output-merger stage.</p> + <p> For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that {{UAVs}} must be given an offset so that they are placed in the slots after the render target views that are being bound. </p><strong>Note</strong>??{{RTVs}}, {{DSV}}, and {{UAVs}} cannot be set independently; they all need to be set at the same time.?<p>Two {{RTVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>Two {{UAVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>An {{RTV}} conflicts with a {{UAV}} if they share a subresource or share a bind point.</p><p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> operates properly in the following situations: </p><ol> <li> <p><em>NumRTVs</em> != {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} and <em>NumUAVs</em> != {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li><em>{{UAVStartSlot}}</em> &gt;= <em>NumRTVs</em></li> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in the set of all <em>ppRenderTargetViews</em> and <em>ppUnorderedAccessViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> performs the following tasks: </p> <ul> <li>Unbinds all currently bound conflicting resources (stream-output target resources ({{SOTargets}}), compute shader ({{CS}}) {{UAVs}}, shader-resource views ({{SRVs}})).</li> <li> Binds <em>ppRenderTargetViews</em>, <em>ppDepthStencilView</em>, and <em>ppUnorderedAccessViews</em>. </li> </ul> </li> <li> <p><em>NumRTVs</em> == {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{UAVs}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppUnorderedAccessViews</em>. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{RTVs}} in slots &gt;= <em>{{UAVStartSlot}}</em></li> <li> All {{RTVs}} that conflict with any {{UAVs}} in <em>ppUnorderedAccessViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppUnorderedAccessViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppUnorderedAccessViews</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>ppDepthStencilView</em>, and the current depth-stencil view remains bound. </p> </li> <li> <p><em>NumUAVs</em> == {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{RTVs}} and {{DSV}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppRenderTargetViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{UAVs}} in slots &lt; <em>NumRTVs</em></li> <li> All {{UAVs}} that conflict with any {{RTVs}} in <em>ppRenderTargetViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppRenderTargetViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppRenderTargetViews</em> and <em>ppDepthStencilView</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>{{UAVStartSlot}}</em>. </p> </li> </ol><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of render targets to bind (ranges between 0 and <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>). If this parameter is nonzero, the number of entries in the array to which <em>ppRenderTargetViews</em> points must equal the number in this parameter. If you set <em>NumRTVs</em> to {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} (0xffffffff), this method does not modify the currently bound render-target views ({{RTVs}}) and also does not modify depth-stencil view ({{DSV}}). </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s that represent the render targets to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumRTVs</em> is 0, no render targets are bound. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong> that represents the depth-stencil view to bind to the device. If this parameter is <strong>{{NULL}}</strong>, the depth-stencil state is not bound. </p> </dd> + + + <dd> <p>Index into a zero-based array to begin setting unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1).</p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1. {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64. </p> <p> For pixel shaders, <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views being bound. </p> </dd> + + + <dd> <p> Number of unordered-access views ({{UAVs}}) in <em>ppUnorderedAccessViews</em>. If you set <em>NumUAVs</em> to {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} (0xffffffff), this method does not modify the currently bound unordered-access views. </p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s that represent the unordered-access views to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumUAVs</em> is 0, no unordered-access views are bound. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is relevant only for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Sets the depth-stencil state of the output-merger stage.</p> + <p>To create a depth-stencil state interface, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to bind to the device. Set this to <strong>{{NULL}}</strong> to use the default state listed in <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>.</p> </dd> + + + <dd> <p>Reference value to perform against when doing a depth-stencil test. See remarks.</p> </dd> + + + + + <p>Set the target output buffers for the stream-output stage of the pipeline.</p> + <p>An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.</p><p> Calling this method using a buffer that is currently bound for writing will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> The array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to bind to the device. The buffers must have been created with the <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong> flag. </p> </dd> + + + <dd> <p> Array of offsets to the output buffers from <em>ppSOTargets</em>, one offset for each buffer. The offset values must be in bytes. </p> </dd> + + + + + <p>Draw geometry of an unknown size.</p> + <p>A draw {{API}} submits work to the rendering pipeline. This {{API}} submits work of an unknown size that was processed by the input assembler, vertex shader, and stream-output stages; the work may or may not have gone through the geometry-shader stage.</p><p>After data has been streamed out to stream-output stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the {{SO}} stage buffers is maintained internally when the data is streamed out. This means that the {{CPU}} does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the {{SO}} stage buffers so that the layouts are available when the buffers are again bound to the input assembler.</p><p>The following diagram shows the DrawAuto process.</p><p></p><p>Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.</p><p>DrawAuto only works when drawing with one input buffer bound as an input to the {{IA}} stage at slot 0. Applications must create the {{SO}} buffer resource with both binding flags, <strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong> and <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong>.</p><p>This {{API}} does not support indexing or instancing.</p><p>If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using <strong>{{D3D11_QUERY_SO_STATISTICS}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Draw indexed, instanced, {{GPU}}-generated primitives.</p> + <p> When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives. </p> </dd> + + + <dd> <p> Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives. </p> </dd> + + + + + <p>Draw instanced, {{GPU}}-generated primitives.</p> + <p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives.</p> </dd> + + + <dd> <p>Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives.</p> </dd> + + + + + <p>Execute a command list from a thread group.</p> + <p>You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z).</p><p>In the following illustration, assume a thread group with 50 threads where the size of the group is given by (5,5,2). A single thread is identified from a thread group with 50 threads in it, using the vector (4,1,1).</p><p></p><p>The following illustration shows the relationship between the parameters passed to <strong>{{ID3D11DeviceContext::Dispatch}}</strong>, Dispatch(5,3,2), the values specified in the numthreads attribute, numthreads(10,8,3), and values that will passed to the compute shader for the thread-related system values +({{SV_GroupIndex}},{{SV_DispatchThreadID}},{{SV_GroupThreadID}},{{SV_GroupID}}).</p><p></p> + <p>Returns nothing.</p> + + + <dd> <p>The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1.</p> </dd> + + + + + <p>Execute a command list over one or more thread groups.</p> + <p>You call the <strong>DispatchIndirect</strong> method to execute commands in a compute shader.</p><p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which must be loaded with data that matches the argument list for <strong>{{ID3D11DeviceContext::Dispatch}}</strong>.</p> </dd> + + + <dd> <p>A byte-aligned offset between the start of the buffer and the arguments.</p> </dd> + + + + + <p>Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline.</p> + <p>To create a rasterizer state interface, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + + <p>Bind an array of viewports to the rasterizer stage of the pipeline.</p> + <p>All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.</p><p>Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p>Returns nothing.</p> + + + <dd> <p>Number of viewports to bind.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_VIEWPORT}}</strong> structures to bind to the device. See the structure page for details about how the viewport size is dependent on the device feature level which has changed between Direct3D 11 and Direct3D 10.</p> </dd> + + + + + <p>Bind an array of scissor rectangles to the rasterizer stage.</p> + <p>All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.</p><p> The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>). </p><p>Which scissor rectangle to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the {{SV_ViewportArrayIndex}} semantic then Direct3D will use the first scissor rectangle in the array.</p><p> Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong>). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of scissor rectangles to bind.</p> </dd> + + + <dd> <p> An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). </p> </dd> + + + + + <p>Copy a region from a source resource to a destination resource.</p> + <p>The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopySubresourceRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopySubresourceRegion</strong> call. Invalid parameters to <strong>CopySubresourceRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device.</p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. <strong>{{D3D11CalcSubresource}}</strong> is a helper function for calculating subresource indexes.</p><p><strong>CopySubresourceRegion</strong> performs the copy on the {{GPU}} (similar to a memcpy by the {{CPU}}). As a consequence, the source and destination resources:</p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must be the same type.</li> <li>Must have compatible {{DXGI}} formats (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopySubresourceRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>May not be currently mapped.</li> </ul><p><strong>CopySubresourceRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopySubresourceRegion</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p> If your app needs to copy an entire resource, we recommend to use <strong>{{ID3D11DeviceContext::CopyResource}}</strong> instead. </p><p><strong>CopySubresourceRegion</strong> is an asynchronous call, which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. For more information about pipeline stalls, see performance considerations.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> or <strong>CopySubresourceRegion</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> You can't use <strong>CopySubresourceRegion</strong> to copy mipmapped volume textures.?<strong>Note</strong>??<strong>Applies only to feature levels 9_x</strong> Subresources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopySubresourceRegion</strong>.?<strong>Note</strong>??If you use <strong>CopySubresourceRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box (see <strong>{{D3D11_BOX}}</strong>) that defines the source subresource that can be copied. If <strong>{{NULL}}</strong>, the entire source subresource is copied. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion</strong> doesn't perform a copy operation.</p> </dd> + + + + + <p>Copy the entire contents of the source resource to the destination resource using the {{GPU}}. </p> + <p>This method is unusual in that it causes the {{GPU}} to perform the copy operation (similar to a memcpy by the {{CPU}}). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:</p><ul> <li>Must be different resources.</li> <li>Must be the same type.</li> <li>Must have identical dimensions (including width, height, depth, and size as appropriate).</li> <li>Must have compatible {{DXGI}} formats, which means the formats must be identical or at least from the same type group. For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyResource</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>Can't be currently mapped.</li> </ul><p><strong>CopyResource</strong> only supports copy; it doesn't support any stretch, color key, or blend. <strong>CopyResource</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p>You can't use an <strong>Immutable</strong> resource as a destination. You can use a <strong>depth-stencil</strong> resource as either a source or a destination provided that the feature level is {{D3D_FEATURE_LEVEL_10_1}} or greater. For feature levels 9_x, resources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopyResource</strong>. Resources created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled, the call to <strong>{{ID3D11DeviceContext::CopyResource}}</strong> fails. Use <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve a multisampled resource to a resource that is not multisampled.</p><p>The method is an asynchronous call, which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. For more info, see performance considerations.</p><p>We recommend to use <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> instead if you only need to copy a portion of the data in a resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the destination resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the source resource.</p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>For a shader-constant buffer; set <em>pDstBox</em> to <strong>{{NULL}}</strong>. It is not possible to use this method to partially update a shader-constant buffer.</p><p>A resource cannot be used as a destination if:</p><ul> <li>the resource is created with <strong>immutable</strong> or <strong>dynamic</strong> usage.</li> <li>the resource is created as a depth-stencil resource.</li> <li>the resource is created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>).</li> </ul><p>When <strong>UpdateSubresource</strong> returns, the application is free to change or even free the data pointed to by <em>pSrcData</em> because the method has already copied/snapped away the original contents.</p><p>The performance of <strong>UpdateSubresource</strong> depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a <strong>Draw</strong> call and later calls <strong>UpdateSubresource</strong> on the same vertex buffer before the <strong>Draw</strong> call is actually executed by the {{GPU}}.</p><ul> <li>When there is contention for the resource, <strong>UpdateSubresource</strong> will perform 2 copies of the source data. First, the data is copied by the {{CPU}} to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the {{GPU}} to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by {{GPU}} when the command buffer is flushed.</li> <li>When there is no resource contention, the behavior of <strong>UpdateSubresource</strong> is dependent on which is faster (from the {{CPU}}'s perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the {{CPU}} copy the data to the final resource location. This is dependent on the architecture of the underlying system.</li> </ul><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<p>To better understand the source row pitch and source depth pitch parameters, the following illustration shows a 3D volume texture.</p><p></p><p>Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is {{DXGI_FORMAT_R32G32B32A32_FLOAT}}, the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.</p><p>To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:</p><ul> <li>Source Row Pitch = [size of one element in bytes] * [number of elements in one row]</li> <li>Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]</li> </ul><p>In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:</p><ul> <li>Source Row Pitch = 16 * 2 = 32</li> <li>Source Depth Pitch = 16 * 2 * 3 = 96</li> </ul><p>The following illustration shows the resource as it is laid out in memory.</p><p></p><p>For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by <em>pData</em> to [(120,100)..(200,220)] in the destination texture. Also assume that <em>rowPitch</em> has been initialized with the proper value (as explained above). <strong>front</strong> and <strong>back</strong> are set to 0 and 1 respectively, because by having <strong>front</strong> equal to <strong>back</strong>, the box is technically empty.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 100; +destRegion.bottom = 220; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 0; +destRegion.bottom = 1; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>For info about various resource types and how <strong>UpdateSubresource</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D11_BOX}}</strong>).</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + + + <p>Copies data from a buffer holding variable length data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to <strong>{{ID3D11Buffer}}</strong>. This can be any buffer resource that other copy commands, such as <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>, are able to write to.</p> </dd> + + + <dd> <p>Offset from the start of <em>pDstBuffer</em> to write 32-bit {{UINT}} structure (vertex) count from <em>pSrcView</em>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> of a Structured Buffer resource created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created. These types of resources have hidden counters tracking "how many" records have been written.</p> </dd> + + + + + <p>Set all the elements in a render target to one value.</p> + <p>Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p><p>When using <strong>{{D3D_FEATURE_LEVEL_9_x}}</strong>, <strong>ClearRenderTargetView</strong> only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the render target.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to fill the render target with.</p> </dd> + + + + + <p>Clears an unordered access resource with bit-precise values.</p> + <p>This {{API}} copies the lower ni bits from each array element i to the corresponding channel, where ni is the number of bits in the ith channel of the resource format (for example, {{R8G8B8_FLOAT}} has 8 bits for the first 3 channels). This works on any {{UAV}} with no format conversion. For a raw or structured buffer view, only the first array element value is used.</p> + <p>Returns nothing.</p> + + + + <p>Clears an unordered access resource with a float value.</p> + <p>This {{API}} works on {{FLOAT}}, {{UNORM}}, and {{SNORM}} unordered access views ({{UAVs}}), with format conversion from {{FLOAT}} to *{{NORM}} where appropriate. On other {{UAVs}}, the operation is invalid and the call will not reach the driver.</p> + <p>Returns nothing.</p> + + + + <p>Clears the depth-stencil resource.</p> + <table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the depth stencil to be cleared.</p> </dd> + + + <dd> <p>Identify the type of data to clear (see <strong>{{D3D11_CLEAR_FLAG}}</strong>).</p> </dd> + + + <dd> <p>Clear the depth buffer with this value. This value will be clamped between 0 and 1.</p> </dd> + + + <dd> <p>Clear the stencil buffer with this value.</p> </dd> + + + + + <p>Generates mipmaps for the given shader resource.</p> + <p>You can call <strong>GenerateMips</strong> on any shader-resource view to generate the lower mipmap levels for the shader resource. <strong>GenerateMips</strong> uses the largest mipmap level of the view to recursively generate the lower levels of the mip and stops with the smallest level that is specified by the view. If the base resource wasn't created with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong>, and <strong>{{D3D11_RESOURCE_MISC_GENERATE_MIPS}}</strong>, the call to <strong>GenerateMips</strong> has no effect.</p><p>Feature levels 9.1, 9.2, and 9.3 can't support automatic generation of mipmaps for 3D (volume) textures.</p><p>Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:</p><pre> {{DXGI_FORMAT_R8G8B8A8_UNORM}} +{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B5G6R5_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B8G8R8X8_UNORM}} +{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}} +</pre><p>Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:</p><pre> {{DXGI_FORMAT_R16G16B16A16_FLOAT}} +{{DXGI_FORMAT_R16G16B16A16_UNORM}} +{{DXGI_FORMAT_R16G16_FLOAT}} +{{DXGI_FORMAT_R16G16_UNORM}} +{{DXGI_FORMAT_R32_FLOAT}} +</pre><p>Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:</p><pre> {{DXGI_FORMAT_R32G32B32A32_FLOAT}} +{{DXGI_FORMAT_B4G4R4A4}} (optional) +</pre><p>Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:</p><pre> {{DXGI_FORMAT_R32G32B32_FLOAT}} (optional) +{{DXGI_FORMAT_R16G16B16A16_SNORM}} +{{DXGI_FORMAT_R32G32_FLOAT}} +{{DXGI_FORMAT_R10G10B10A2_UNORM}} +{{DXGI_FORMAT_R11G11B10_FLOAT}} +{{DXGI_FORMAT_R8G8B8A8_SNORM}} +{{DXGI_FORMAT_R16G16_SNORM}} +{{DXGI_FORMAT_R8G8_UNORM}} +{{DXGI_FORMAT_R8G8_SNORM}} +{{DXGI_FORMAT_R16_FLOAT}} +{{DXGI_FORMAT_R16_UNORM}} +{{DXGI_FORMAT_R16_SNORM}} +{{DXGI_FORMAT_R8_UNORM}} +{{DXGI_FORMAT_R8_SNORM}} +{{DXGI_FORMAT_A8_UNORM}} +{{DXGI_FORMAT_B5G5R5A1_UNORM}} (optional) +</pre><p>For all other unsupported formats, <strong>GenerateMips</strong> will silently fail.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11ShaderResourceView}}</strong> interface that represents the shader resource.</p> </dd> + + + + + <p>Sets the minimum level-of-detail ({{LOD}}) for a resource.</p> + <p>To use a resource with <strong>SetResourceMinLOD</strong>, you must set the <strong>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}}</strong> flag when you create that resource.</p><p>For Direct3D 10 and Direct3D 10.1, when sampling from a texture resource in a shader, the sampler can define a minimum {{LOD}} clamp to force sampling from less detailed mip levels. For Direct3D 11, this functionality is extended from the sampler to the entire resource. Therefore, the application can specify the highest-resolution mip level of a resource that is available for access. This restricts the set of mip levels that are required to be resident in {{GPU}} memory, thereby saving memory.</p><p>The set of mip levels resident per-resource in {{GPU}} memory can be specified by the user.</p><p>Minimum {{LOD}} affects all of the resident mip levels. Therefore, only the resident mip levels can be updated and read from.</p><p>All methods that access texture resources must adhere to minimum {{LOD}} clamps.</p><p>Empty-set accesses are handled as out-of-bounds cases.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> that represents the resource.</p> </dd> + + + <dd> <p>The level-of-detail, which ranges between 0 and the maximum number of mipmap levels of the resource. For example, the maximum number of mipmap levels of a 1D texture is specified in the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE1D_DESC}}</strong> structure.</p> </dd> + + + + + <p>Gets the minimum level-of-detail ({{LOD}}).</p> + <p>Returns the minimum {{LOD}}.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> which represents the resource.</p> </dd> + + + + + <p>Copy a multisampled resource into a non-multisampled resource.</p> + <p>This {{API}} is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.</p><p>The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this:</p><table> <tr><th>Scenario</th><th>Requirements</th></tr> <tr><td>Source and destination are prestructured and typed</td><td>Both the source and destination must have identical formats and that format must be specified in the Format parameter.</td></tr> <tr><td>One resource is prestructured and typed and the other is prestructured and typeless</td><td>The typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is {{DXGI_FORMAT_R32_FLOAT}} and the typeless resource is {{DXGI_FORMAT_R32_TYPELESS}}). The format of the typed resource must be specified in the Format parameter.</td></tr> <tr><td>Source and destination are prestructured and typeless</td><td>Both the source and desintation must have the same typeless format (i.e. both must have {{DXGI_FORMAT_R32_TYPELESS}}), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are {{DXGI_FORMAT_R32_TYPELESS}} then {{DXGI_FORMAT_R32_FLOAT}} could be specified in the Format parameter). <p>For example, given the {{DXGI_FORMAT_R16G16B16A16_TYPELESS}} format:</p> <ul> <li>The source (or dest) format could be {{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>The dest (or source) format could be {{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D11Resource}}</strong>.</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. Use <strong>{{D3D11CalcSubresource}}</strong> to calculate the index.</p> </dd> + + + <dd> <p>Source resource. Must be multisampled.</p> </dd> + + + <dd> <p>The source subresource of the source resource.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.</p> </dd> + + + + + <p>Queues commands from a command list onto a device.</p> + <p>Use this method to play back a command list that was recorded by a deferred context on any thread.</p><p> A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto the immediate context is required for the recorded commands to be executed on the graphics processing unit ({{GPU}}). A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto another deferred context can be used to merge recorded lists. But to run the commands from the merged deferred command list on the {{GPU}}, you need to execute them on the immediate context. </p><p> This method performs some runtime validation related to queries. Queries that are begun in a device context cannot be manipulated indirectly by executing a command list (that is, Begin or End was invoked against the same query by the deferred context which generated the command list). If such a condition occurs, the ExecuteCommandList method does not execute the command list. However, the state of the device context is still maintained, as would be expected (<strong>{{ID3D11DeviceContext::ClearState}}</strong> is performed, unless the application indicates to preserve the device context state). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11CommandList}}</strong> interface that encapsulates a command list. </p> </dd> + + + <dd> <p> A Boolean flag that determines whether the target context state is saved prior to and restored after the execution of a command list. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that no state shall be saved or restored, which causes the target context to return to its default state after the command list executes. Applications should typically use <strong>{{FALSE}}</strong> unless they will restore the state to be nearly equivalent to the state that the runtime would restore if <strong>{{TRUE}}</strong> were passed. When applications use <strong>{{FALSE}}</strong>, they can avoid unnecessary and inefficient state transitions. </p> </dd> + + + + + <p>Bind an array of shader resources to the hull-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set a hull shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a hull shader (see <strong>{{ID3D11HullShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the hull-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set the constant buffers used by the hull-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{HSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an array of shader resources to the domain-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set a domain shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the domain-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the domain-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{DSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the compute-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets an array of views for an unordered resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index of the first element in the zero-based array to begin setting (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1). {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64.</p> </dd> + + + <dd> <p> Number of views to set (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D11UnorderedAccessView}}</strong> references to be set by the method. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is only relevant for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set a compute shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a compute shader (see <strong>{{ID3D11ComputeShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the compute-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre>//Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the compute-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{CSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Get the constant buffers used by the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p> Get the pixel shader currently set on the device. </p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed, to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns nothing. </p> + + + <dd> <p> Address of a reference to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>) to be returned by the method. </p> </dd> + + + <dd> <p> Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). </p> </dd> + + + <dd> <p> The number of class-instance elements in the array. </p> </dd> + + + + + <p>Get an array of sampler states from the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the vertex shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get the constant buffers used by the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get a reference to the input-layout object that is bound to the input-assembler stage.</p> + <p>For information about creating an input-layout object, see Creating the Input-Layout Object.</p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p>Get the vertex buffers bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>The input slot of the first vertex buffer to get. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to {{D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT}} - 1) are available; the maximum number of input slots depends on the feature level.</p> </dd> + + + <dd> <p>The number of vertex buffers to get starting at the offset. The number of buffers (plus the starting slot) cannot exceed the total number of {{IA}}-stage input slots.</p> </dd> + + + <dd> <p>A reference to an array of vertex buffers returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Pointer to an array of stride values returned by the method; one stride value for each buffer in the vertex-buffer array. Each stride value is the size (in bytes) of the elements that are to be used from that vertex buffer.</p> </dd> + + + <dd> <p>Pointer to an array of offset values returned by the method; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.</p> </dd> + + + + + <p>Get a reference to the index buffer that is bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an index buffer returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Specifies format of the data in the index buffer (see <strong>{{DXGI_FORMAT}}</strong>). These formats provide the size and type of the data in the buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers.</p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer, to the first index to use.</p> </dd> + + + + + <p>Get the constant buffers used by the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the geometry shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the type of primitive, and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>).</p> </dd> + + + + + <p>Get the vertex shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler states from the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the rendering predicate state.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>). Value stored here will be <strong>{{NULL}}</strong> upon device creation.</p> </dd> + + + <dd> <p>Address of a boolean to fill with the predicate comparison value. <strong>{{FALSE}}</strong> upon device creation.</p> </dd> + + + + + <p>Get the geometry shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of render targets to retrieve.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s which represent render target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of a render target is not needed. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not needed.</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>The number of render-target views to retrieve.</p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s, which represent render-target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of render-target views is not required. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not required. </p> </dd> + + + <dd> <p> Index into a zero-based array to begin retrieving unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1). For pixel shaders <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views that are bound. </p> </dd> + + + <dd> <p> Number of unordered-access views to return in <em>ppUnorderedAccessViews</em>. This number ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s, which represent unordered-access views that are retrieved. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of unordered-access views is not required. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Gets the depth-stencil state of the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Address of a reference to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to be filled with information from the device. </p> </dd> + + + <dd> <p>Pointer to the stencil reference value used in the depth-stencil test.</p> </dd> + + + + + <p>Get the target output buffers for the stream-output stage of the pipeline.</p> + <p>A maximum of four output buffers can be retrieved.</p><p> The offsets to the output buffers pointed to in the returned <em>ppSOTargets</em> array may be assumed to be -1 (append), as defined for use in <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>. </p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of buffers to get.</p> </dd> + + + <dd> <p> An array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to be retrieved from the device. </p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Gets the array of viewports bound to the rasterizer stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a variable that, on input, specifies the number of viewports (ranges from 0 to <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong>) in the <em>pViewports</em> array; on output, the variable contains the actual number of viewports that are bound to the rasterizer stage. If <em>pViewports</em> is <strong>{{NULL}}</strong>, <strong>{{RSGetViewports}}</strong> fills the variable with the number of viewports currently bound.</p> <strong>Note</strong>?? In some versions of the Windows {{SDK}}, a debug device will raise an exception if the input value in the variable to which <em>pNumViewports</em> points is greater than <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong> even if <em>pViewports</em> is <strong>{{NULL}}</strong>. The regular runtime ignores the value in the variable to which <em>pNumViewports</em> points when <em>pViewports</em> is <strong>{{NULL}}</strong>. This behavior of a debug device might be corrected in a future release of the Windows {{SDK}}. ? </dd> + + + <dd> <p> An array of <strong>{{D3D11_VIEWPORT}}</strong> structures for the viewports that are bound to the rasterizer stage. If the number of viewports (in the variable to which <em>pNumViewports</em> points) is greater than the actual number of viewports currently bound, unused elements of the array contain 0. For info about how the viewport size depends on the device feature level, which has changed between Direct3D 11 and Direct3D 10, see <strong>{{D3D11_VIEWPORT}}</strong>. </p> </dd> + + + + + <p>Get the array of scissor rectangles bound to the rasterizer stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>The number of scissor rectangles (ranges between 0 and {{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}) bound; set <em>pRects</em> to <strong>{{NULL}}</strong> to use <em>pNumRects</em> to see how many rectangles would be returned.</p> </dd> + + + <dd> <p>An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). If NumRects is greater than the number of scissor rects currently bound, then unused members of the array will contain 0.</p> </dd> + + + + + <p>Get the hull-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the hull shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a hull shader (see <strong>{{ID3D11HullShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the constant buffers used by the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the domain-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the domain shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the compute-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Gets an array of views for an unordered resource.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index of the first element in the zero-based array to return (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of views to get (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>A reference to an array of interface references (see <strong>{{ID3D11UnorderedAccessView}}</strong>) to get.</p> </dd> + + + + + <p>Get the compute shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a Compute shader (see <strong>{{ID3D11ComputeShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Restore all default settings.</p> + <p>This method resets any device context to the default settings. This sets all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to <strong>{{NULL}}</strong>. The primitive topology is set to {{UNDEFINED}}.</p><p>For a scenario where you would like to clear a list of commands recorded so far, call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> and throw away the resulting <strong>{{ID3D11CommandList}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}).</p> + <p>Most applications don't need to call this method. If an application calls this method when not necessary, it incurs a performance penalty. Each call to <strong>Flush</strong> incurs a significant amount of overhead.</p><p>When Microsoft Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. <strong>Flush</strong> sends those commands to the {{GPU}} for processing. Typically, the Direct3D runtime sends these commands to the {{GPU}} automatically whenever the runtime determines that they need to be sent, such as when the command buffer is full or when an application maps a resource. <strong>Flush</strong> sends the commands manually.</p><p>We recommend that you use <strong>Flush</strong> when the {{CPU}} waits for an arbitrary amount of time (such as when you call the <strong>Sleep</strong> function).</p><p>Because <strong>Flush</strong> operates asynchronously, it can return either before or after the {{GPU}} finishes executing the queued graphics commands. However, the graphics commands eventually always complete. You can call the <strong>{{ID3D11Device::CreateQuery}}</strong> method with the <strong>{{D3D11_QUERY_EVENT}}</strong> value to create an event query; you can then use that event query in a call to the <strong>{{ID3D11DeviceContext::GetData}}</strong> method to determine when the {{GPU}} is finished processing the graphics commands. +</p><p>Microsoft Direct3D?11 defers the destruction of objects. Therefore, an application can't rely upon objects immediately being destroyed. By calling <strong>Flush</strong>, you destroy any objects whose destruction was deferred. If an application requires synchronous destruction of an object, we recommend that the application release all its references, call <strong>{{ID3D11DeviceContext::ClearState}}</strong>, and then call <strong>Flush</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the type of device context.</p> + <p>A member of <strong>{{D3D11_DEVICE_CONTEXT_TYPE}}</strong> that indicates the type of device context.</p> + + + + <p>Gets the initialization flags associated with the current deferred context.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + + + + <p>Create a command list and record graphics commands into it.</p> + <p> Create a command list from a deferred context and record commands into it by calling <strong>FinishCommandList</strong>. Play back a command list with an immediate context by calling <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p><p> Immediate context state is cleared before and after a command list is executed. A command list has no concept of inheritance. Each call to <strong>FinishCommandList</strong> will record only the state set since any previous call to <strong>FinishCommandList</strong>. </p><p> For example, the state of a device context is its render state or pipeline state. To retrieve device context state, an application can call <strong>{{ID3D11DeviceContext::GetData}}</strong> or <strong>{{ID3D11DeviceContext::GetPredication}}</strong>. </p><p> For more information about how to use <strong>FinishCommandList</strong>, see How to: Record a Command List. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns {{DXGI_ERROR_DEVICE_REMOVED}} if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.</li> <li> Returns {{DXGI_ERROR_INVALID_CALL}} if <strong>FinishCommandList</strong> cannot be called from the current context. See remarks. </li> <li>Returns {{E_OUTOFMEMORY}} if the application has exhausted available memory.</li> </ul> + + + <dd> <p> A Boolean flag that determines whether the runtime saves deferred context state before it executes <strong>FinishCommandList</strong> and restores it afterwards. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that the runtime will not save or restore any state. In this case, the deferred context will return to its default state after the call to <strong>FinishCommandList</strong> completes. For information about default state, see <strong>{{ID3D11DeviceContext::ClearState}}</strong>. Typically, use <strong>{{FALSE}}</strong> unless you restore the state to be nearly equivalent to the state that the runtime would restore if you passed <strong>{{TRUE}}</strong>. When you use <strong>{{FALSE}}</strong>, you can avoid unnecessary and inefficient state transitions. </p> <strong>Note</strong>?? This parameter does not affect the command list that the current call to <strong>FinishCommandList</strong> returns. However, this parameter affects the command list of the next call to <strong>FinishCommandList</strong> on the same deferred context. ? </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11CommandList}}</strong> interface reference is initialized with the recorded command list information. The resulting <strong>{{ID3D11CommandList}}</strong> object is immutable and can only be used with <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p> </dd> + + + + + <p>Represents a hardware-accelerated video decoder for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> + + + + <p>Gets the parameters that were used to create the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that receives a description of the video stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that receives the decoder configuration.</p> </dd> + + + + + <p>Gets a handle to the driver.</p> + <p>The driver handle can be used to configure content protection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the driver.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Queries whether the video processor supports a specified video format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The video format to query, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the capabilities of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure that receives the capabilities.</p> </dd> + + + + + <p>Returns a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + <p>The capabilities defined in the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure are interdependent. Therefore, the driver can support multiple, distinct groups of these capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the group to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the frame-rate conversion capabilities.</p> </dd> + + + + + <p>Gets a list of custom frame rates that a video processor supports.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the frame-rate capability group. To get the maxmum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}} </strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>The zero-based index of the custom rate to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> and check the <strong>CustomRateCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure.</p> <p>This index value is always relative to the capability group specified in the <em>TypeIndex</em> parameter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CUSTOM_RATE}}</strong> structure that receives the custom rate.</p> </dd> + + + + + <p>Gets the range of values for an image filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of image filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER_RANGE}}</strong> structure. The method fills the structure with the range of values for the specified filter.</p> </dd> + + + + + <p>Represents a video processor for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> + + + + <p>Gets the content description that was used to create the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the rate conversion capabilities of the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the rate conversion capabilities.</p> </dd> + + + + + <p>Provides a communication channel with the graphics driver or the Microsoft Direct3D runtime. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateAuthenticatedChannel}}</strong>.</p> + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes.</p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the authenticated channel.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the channel.</p> </dd> + + + + + <p>Represents a cryptographic session. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateCryptoSession}}</strong>.</p> + + + + <p>Gets the type of encryption that is supported by this session.</p> + <p>The application specifies the encryption type when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a {{GUID}} that specifies the encryption type. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets the decoding profile of the session.</p> + <p>The application specifies the profile when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. </p> </dd> + + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>To get the certificate, call <strong>{{ID3D11CryptoSession::GetCertificate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes. </p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the cryptographic session.</p> + <p>You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the session.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video decoding.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video decoder output view. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the input surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorInputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor input view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor output view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + <p>Gets a reference to a decoder buffer.</p> + <p>The graphics driver allocates the buffers that are used for decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call <strong>{{ID3D11VideoContext::ReleaseDecoderBuffer}}</strong> to unlock the surface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>The type of buffer to retrieve, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the size of the buffer, in bytes. </p> </dd> + + + <dd> <p>Receives a reference to the start of the memory buffer. </p> </dd> + + + + + <p>Releases a buffer that was obtained by calling the <strong>{{ID3D11VideoContext::GetDecoderBuffer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Starts a decoding operation to decode a video frame.</p> + <p>After this method is called, call <strong>{{ID3D11VideoContext::SubmitDecoderBuffers}}</strong> to perform decoding operations. When all decoding operations have been executed, call <strong>{{ID3D11VideoContext::DecoderEndFrame}}</strong>. </p><p>Each call to <strong>DecoderBeginFrame</strong> must have a matching call to <strong>DecoderEndFrame</strong>. In most cases you cannot nest <strong>DecoderBeginFrame</strong> calls, but some codecs, such as like {{VC}}-1, can have nested <strong>DecoderBeginFrame</strong> calls for special operations like post processing.</p><p>The following encryption scenarios are supported through the content key:</p><ul> <li>The decoder can choose to not encrypt every frame, for example it may only encrypt the I frames and not encrypt the P/B frames. In these scenario, the decoder will specify pContentKey = {{NULL}} and ContentKeySize = 0 for those frames that it does not encrypt.</li> <li>The decoder can choose to encrypt the compressed buffers using the session key. In this scenario, the decoder will specify a content key containing all zeros.</li> <li>The decoder can choose to encrypt the compressed buffers using a separate content key. In this scenario, the decoder will {{ECB}} encrypt the content key using the session key and pass the encrypted content key.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. <strong>{{D3DERR_WASSTILLDRAWING}}</strong> or <strong>{{E_PENDING}}</strong> is returned if the harware is busy, in which case the decoder should try to make the call again.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. This interface describes the resource that will receive the decoded frame. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> </dd> + + + <dd> <p>The size of the content key that is specified in <em>pContentKey</em>. If <em>pContentKey</em> is {{NULL}}, set <em>ContentKeySize</em> to zero.</p> </dd> + + + <dd> <p>An optional reference to a content key that was used to encrypt the frame data. If no content key was used, set this parameter to <strong>{{NULL}}</strong>. If the caller provides a content key, the caller must use the session key to encrypt the content key.</p> </dd> + + + + + <p>Signals the end of a decoding operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p><p>When using feature levels 9_x, all partially encrypted buffers must use the same EncryptedBlockInfo, and partial encryption cannot be turned off on a per frame basis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Performs an extended function for decoding. This method enables extensions to the basic decoder functionality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_EXTENSION}}</strong> structure that contains data for the function.</p> </dd> + + + + + <p>Sets the target rectangle for the video processor.</p> + <p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor writes to the entire destination surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to apply the target rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the target rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the background color for the video processor.</p> + <p>The video processor uses the background color to fill areas of the target rectangle that do not contain a video image. Areas outside the target rectangle are not affected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the color is specified as a {{YCbCr}} value. Otherwise, the color is specified as an {{RGB}} value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure that specifies the background color.</p> </dd> + + + + + <p>Sets the output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the alpha fill mode for data that the video processor writes to the render target.</p> + <p>To find out which fill modes the device supports, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. If the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL}}</strong> capability, the driver supports all of the fill modes. Otherwise, the <em>AlphaFillMode</em> parameter must be <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>. </p><p>The default fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The alpha fill mode, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>The zero-based index of an input stream. This parameter is used if <em>AlphaFillMode</em> is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>. Otherwise, the parameter is ignored.</p> </dd> + + + + + <p>Sets the amount of downsampling to perform on the output.</p> + <p>Downsampling is sometimes used to reduce the quality of premium content when other forms of content protection are not available. By default, downsampling is disabled.</p><p>If the <em>Enable</em> parameter is <strong>{{TRUE}}</strong>, the driver downsamples the composed image to the specified size, and then scales it back to the size of the target rectangle.</p><p>The width and height of <em>Size</em> must be greater than zero. If the size is larger than the target rectangle, downsampling does not occur.</p><p>To use this feature, the driver must support downsampling, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, downsampling is enabled. Otherwise, downsampling is disabled and the <strong>Size</strong> member is ignored. </p> </dd> + + + <dd> <p>The sampling size.</p> </dd> + + + + + <p>Specifies whether the video processor produces stereo video frames.</p> + <p>By default, the video processor produces mono video frames.</p><p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, stereo output is enabled. Otherwise, the video processor produces mono video frames.</p> </dd> + + + + + <p>Sets a driver-specific video processing state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the current target rectangle for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the target rectangle was explicitly set using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputTargetRect}}</strong> method. Receives the value {{FALSE}} if the target rectangle was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the target rectangle. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the current background color for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the background color is a {{YCbCr}} color, or <strong>{{FALSE}}</strong> if the background color is an {{RGB}} color.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure. The method fills in the structure with the background color.</p> </dd> + + + + + <p>Gets the current output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure. The method fills in the structure with the output color space.</p> </dd> + + + + + <p>Gets the current alpha fill mode for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the alpha fill mode, as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>If the alpha fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>, this parameter receives the zero-based index of an input stream. The input stream provides the alpha values for the alpha fill.</p> </dd> + + + + + <p>Gets the current level of downsampling that is performed by the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if downsampling was explicitly enabled using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong> method. Receives the value <strong>{{FALSE}}</strong> if the downsampling was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the downsampling size. Otherwise, this parameter is ignored.</p> </dd> + + + + + <p>Queries whether the video processor produces stereo video frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo output is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets private state data from the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Specifies whether an input stream on the video processor contains interlaced or progressive frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies the interlacing.</p> </dd> + + + + + <p>Sets the color space for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the rate at which the video processor produces output frames for an input stream.</p> + <p>The standard output rates are normal frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL}}</strong>) and half frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF}}</strong>). In addition, the driver might support custom rates for rate conversion or inverse telecine. To get the list of custom rates, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong>.</p><p>Depending on the output rate, the driver might need to convert the frame rate. If so, the value of <em>RepeatFrame</em> controls whether the driver creates interpolated frames or simply repeats input frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The output rate, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value.</p> </dd> + + + <dd> <p>Specifies how the driver performs frame-rate conversion, if required.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If <em>OutputRate</em> is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, this parameter specifies the exact output rate. Otherwise, this parameter is ignored and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the source rectangle for an input stream on the video processor.</p> + <p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor reads from the entire input surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the destination rectangle for an input stream on the video processor.</p> + <p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p><p>The default destination rectangle is an empty rectangle (0, 0, 0, 0). If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, no data is written from this stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the destination rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the planar alpha for an input stream on the video processor.</p> + <p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALHPA_STREAM}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p><p>Alpha blending is disabled by default. </p><p>For each pixel, the destination color value is computed as follows:</p><p><code>Cd = Cs * (As * Ap * Ae) + Cd * (1.0 - As * Ap * Ae)</code></p><p>where:</p><ul> <li><code>Cd</code> = The color value of the destination pixel</li> <li><code>Cs</code> = The color value of the source pixel</li> <li><code>As</code> = The per-pixel source alpha</li> <li><code>Ap</code> = The planar alpha value</li> <li><code>Ae</code> = The palette-entry alpha value, or 1.0 (see Note)</li> </ul><strong>Note</strong>??Palette-entry alpha values apply only to palettized color formats, and only when the device supports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability. Otherwise, this factor equals 1.0.?<p>The destination alpha value is computed according to the alpha fill mode. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether alpha blending is enabled.</p> </dd> + + + <dd> <p>The planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque). If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use the first 16 entries in the list. Formats with 8 bpp use the first 256 entries.</p><p>If a pixel has a palette index greater than the number of entries, the device treats the pixel as white with opaque alpha. For full-range {{RGB}}, this value is (255, 255, 255, 255); for {{YCbCr}} the value is (255, 235, 128, 128).</p><p>If the driver does not report the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability flag, every palette entry must have an alpha value of 0xFF (opaque). To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of elements in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to an array of palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation. The caller allocates the array.</p> </dd> + + + + + <p>Sets the pixel aspect ratio for an input stream on the video processor.</p> + <p>This function can only be called if the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO}}</strong> capability. If this capability is not set, this function will have no effect.</p><p>Pixel aspect ratios of the form 0/n and n/0 are not valid.</p><p>The default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain valid values. Otherwise, the pixel aspect ratios are unspecified.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the luma key for an input stream on the video processor.</p> + <p>To use this feature, the driver must support luma keying, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>. In addition, if the input format is {{RGB}}, the device must support the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY}}</strong> capability.</p><p>The values of <em>Lower</em> and <em>Upper</em> give the lower and upper bounds of the luma key, using a nominal range of [0...1]. Given a format with <em>n</em> bits per channel, these values are converted to luma values as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>Any pixel whose luma value falls within the upper and lower bounds (inclusive) is treated as transparent.</p><p>For example, if the pixel format uses 8-bit luma, the upper bound is calculated as follows:</p><p><code>{{BYTE}} Y = {{BYTE}}(max(min(1.0, Upper), 0.0) * 255.0)</code></p><p>Note that the value is clamped to the range [0...1] before multiplying by 255.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether luma keying is enabled.</p> </dd> + + + <dd> <p>The lower bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + <dd> <p>The upper bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Enables or disables stereo 3D video for an input stream on the video processor. In addition, this method specifies the layout of the video frames in memory.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether stereo 3D is enabled for this stream. If the value is <strong>{{FALSE}}</strong>, the remaining parameters of this method are ignored.</p> </dd> + + + <dd> <p>Specifies the layout of the two stereo views in memory, as a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the left view. Otherwise, frame 0 contains the right view. </p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> </ul> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the base view. Otherwise, frame 1 contains the base view.</p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> <li>When <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong> is used and the application wants to convert the stereo data to mono, it can either:<ul> <li>Specify the base view as a mono input.</li> <li>Specify both resources and allow the driver to do the conversion from the base view. In this case, <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurface</strong> is considered frame 0 and <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurfaceRight</strong> is considered frame 1.</li> </ul> </li> </ul> </dd> + + + <dd> <p>A flag from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> enumeration, specifying whether one of the views is flipped.</p> </dd> + + + <dd> <p>For <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format, this parameter specifies how to generate the left and right views: </p> <ul> <li>If <em>MonoOffset</em> is positive, the right view is shifted to the right by that many pixels, and the left view is shifted to the left by the same amount. </li> <li>If <em>MonoOffset</em> is negative, the right view is shifted to the left by that many pixels, and the left view is shifted to right by the same amount.</li> </ul> <p>If <em>Format</em> is not <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong>, this parameter must be zero.</p> </dd> + + + + + <p>Enables or disables automatic processing features on the video processor.</p> + <p>By default, the driver might perform certain processing tasks automatically during the video processor blit. This method enables the application to disable these extra video processing features. For example, if you provide your own pixel shader for the video processor, you might want to disable the driver's automatic processing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, automatic processing features are enabled. If <strong>{{FALSE}}</strong>, the driver disables any extra video processing that it might be performing.</p> </dd> + + + + + <p>Enables or disables an image filter for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> <p>To query which filters the driver supports, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to enable the filter.</p> </dd> + + + <dd> <p>The filter level. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored. </p> <p>To find the valid range of levels for a specified filter, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange}}</strong>.</p> </dd> + + + + + <p>Sets a driver-specific state on a video processing stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the format of an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies whether the stream contains interlaced or progressive frames.</p> </dd> + + + + + <p>Gets the color space for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> value that specifies the color space.</p> </dd> + + + + + <p>Gets the rate at which the video processor produces output frames for an input stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value that specifies the output rate.</p> </dd> + + + <dd> <p>Receives a Boolean value that specifies how the driver performs frame-rate conversion, if required. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If the output rate is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, the method fills in this structure with the exact output rate. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the source rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the source rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source rectangle.</p> </dd> + + + + + <p>Gets the destination rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the destination rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the destination rectangle.</p> </dd> + + + + + <p>Gets the planar alpha for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if planar alpha is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque).</p> </dd> + + + + + <p>Gets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use 16 palette entries. Formats with 8 bpp use 256 entries.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of entries in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to a <strong>{{UINT}}</strong> array allocated by the caller. The method fills the array with the palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation.</p> </dd> + + + + + <p>Gets the pixel aspect ratio for an input stream on the video processor. </p> + <p>When the method returns, if <em>*pEnabled</em> is <strong>{{TRUE}}</strong>, the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain the pixel aspect ratios. Otherwise, the default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the pixel aspect ratio is specified. Otherwise, receives the value <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the destination rectangle.</p> </dd> + + + + + <p>Gets the luma key for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if luma keying is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the lower bound for the luma key. The valid range is [0?1]. </p> </dd> + + + <dd> <p>Receives the upper bound for the luma key. The valid range is [0?1]. </p> </dd> + + + + + <p>Gets the stereo 3D format for an input stream on the video processor</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo 3D is enabled for this stream, or <strong>{{FALSE}}</strong> otherwise. If the value is <strong>{{FALSE}}</strong>, ignore the remaining parameters.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value that specifies the layout of the two stereo views in memory.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the left view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the right view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the base view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 1 contains the base view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> value. This value specifies whether one of the views is flipped. +</p> </dd> + + + <dd> <p>Receives the pixel offset used for <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format. This parameter is ignored for other stereo formats.</p> </dd> + + + + + <p>Queries whether automatic processing features of the video processor are enabled.</p> + <p>Automatic processing refers to additional image processing that drivers might have performed on the image data prior to the application receiving the data. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if automatic processing features are enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the image filter settings for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter to query, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value. </p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the image filter is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the filter level.</p> </dd> + + + + + <p>Gets a driver-specific state for a video processing stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Performs a video processing operation on one or more input samples and writes the result to a Direct3D surface.</p> + <p>The maximum value of <em>StreamCount</em> is given in the <strong>MaxStreamStates</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. The maximum number of streams that can be enabled at one time is given in the <strong>MaxInputStreams</strong> member of that structure. </p><p>If the output stereo mode is <strong>{{TRUE}}</strong>:</p><ul> <li>The output view must contain a texture array of two elements.</li> <li>At least one stereo stream must be specified.</li> <li>If multiple input streams are enabled, it is possible that one or more of the input streams may contain mono data.</li> </ul><p>Otherwise:</p><ul> <li>The output view must contain a single element.</li> <li>The stereo format cannot be <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}}</strong> .</li> </ul><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface for the output surface. The output of the video processing operation will be written to this surface.</p> </dd> + + + <dd> <p>The frame number of the output video frame, indexed from zero. </p> </dd> + + + <dd> <p>The number of input streams to process.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}</strong> structures that contain information about the input streams. The caller allocates the array and fills in each structure. The number of elements in the array is given in the <em>StreamCount</em> parameter. </p> </dd> + + + + + <p>Establishes the session key for a cryptographic session. </p> + <p>The key exchange mechanism depends on the type of cryptographic session.</p><p>For {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}), the software decoder generates the secret key, encrypts the secret key by using the public key with {{RSAES}}-{{OAEP}}, and places the cipher text in the <em>pData</em> parameter. The actual size of the buffer for {{RSAES}}-{{OAEP}} is 256 bytes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> byte array, in bytes. </p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. </p> </dd> + + + + + <p>Reads encrypted data from a protected surface. </p> + <p>Not all drivers support this method. To query the driver capabilities, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK}}</strong> flag in the <strong>Caps</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p><p>Some drivers might require a separate key to decrypt the data that is read back. To check for this requirement, call <strong>GetContentProtectionCaps</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY}}</strong> flag. If this flag is present, call <strong>{{ID3D11VideoContext::GetEncryptionBltKey}}</strong> to get the decryption key.</p><p>This method has the following limitations:</p><ul> <li>Reading back sub-rectangles is not supported.</li> <li>Reading back partially encrypted surfaces is not supported.</li> <li>The protected surface must be either an off-screen plain surface or a render target.</li> <li>The destination surface must be a {{D3D11_USAGE_STAGING}} resource.</li> <li>The protected surface cannot be multisampled.</li> <li>Stretching and colorspace conversion are not supported.</li> </ul><p> This function does not honor a {{D3D11}} predicate that may have been set.</p><p> If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the protected surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface that receives the encrypted data. +</p> </dd> + + + <dd> <p>A reference to a buffer that receives the initialization vector ({{IV}}). The caller allocates this buffer, but the driver generates the {{IV}}. </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. When the driver generates the first {{IV}}, it initializes the structure to a random number. For each subsequent {{IV}}, the driver simply increments the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. The application can validate that the same {{IV}} is never used more than once with the same key pair.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Writes encrypted data to a protected surface.</p> + <p>Not all hardware or drivers support this functionality for all cryptographic types. This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT}}</strong> cap is reported.</p><p>This method does not support writing to sub-rectangles of the surface.</p><p>If the hardware and driver support a content key:</p><ul> <li>The data is encrypted by the caller using the content key.</li> <li>The content key is encrypted by the caller using the session key.</li> <li>The encrypted content key is passed to the driver.</li> </ul><p> Otherwise, the data is encrypted by the caller using the session key and {{NULL}} is passed as the content key.</p><p>If the driver and hardware support partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted and which is not. If the entire buffer is encrypted, <em>pEncryptedBlockinfo</em> should be <strong>{{NULL}}</strong>.</p><p>The <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> allows the application to indicate which bytes in the buffer are encrypted. This is specified in bytes, so the application must ensure that the encrypted blocks match the {{GPU}}?s crypto block alignment.</p><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to the surface that contains the source data.</p> </dd> + + + <dd> <p>A reference to the protected surface where the encrypted data is written.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure, or <strong>{{NULL}}</strong>.</p> <p>If the driver supports partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted. If the entire surface is encrypted, set this parameter to <strong>{{NULL}}</strong>. </p> <p>To check whether the driver supports partially encrypted buffers, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION}} +</strong> capabilities flag. If the driver does not support partially encrypted buffers, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains a content encryption key, or <strong>{{NULL}}</strong>. To query whether the driver supports the use of content keys, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY}}</strong> capabilities flag. </p> <p>If the driver supports content keys, use the content key to encrypt the surface. Encrypt the content key using the session key, and place the resulting cipher text in <em>pContentKey</em>. If the driver does not support content keys, use the session key to encrypt the surface and set <em>pContentKey</em> to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the encrypted content key, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the initialization vector ({{IV}}). </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. The caller allocates the structure and generates the {{IV}}. When you generate the first {{IV}}, initialize the structure to a random number. For each subsequent {{IV}}, simply increment the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. This procedure enables the driver to validate that the same {{IV}} is never used more than once with the same key pair.</p> <p>For other encryption types, a different structure might be used, or the encryption might not use an {{IV}}.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Gets a random number that can be used to refresh the session key. </p> + <p>To generate a new session key, perform a bitwise <strong>{{XOR}}</strong> between the previous session key and the random number. The new session key does not take affect until the application calls <strong>{{ID3D11VideoContext::FinishSessionKeyRefresh}}</strong>.</p><p>To query whether the driver supports this method, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> capabilities flag.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pRandomNumber</em> array, in bytes. The size should match the size of the session key.</p> </dd> + + + <dd> <p>A reference to a byte array that receives a random number.</p> </dd> + + + + + <p>Switches to a new session key. </p> + <p>This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> cap is reported.</p><p>Before calling this method, call <strong>{{ID3D11VideoContext::StartSessionKeyRefresh}}</strong>. The <strong>StartSessionKeyRefresh</strong> method gets a random number from the driver, which is used to create a new session key. The new session key does not become active until the application calls <strong>FinishSessionKeyRefresh</strong>. After the application calls <strong>FinishSessionKeyRefresh</strong>, all protected surfaces are encrypted using the new session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + + + <p>Gets the cryptographic key to decrypt the data returned by the <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong> method.</p> + <p>This method applies only when the driver requires a separate content key for the <strong>EncryptionBlt</strong> method. For more information, see the Remarks for <strong>EncryptionBlt</strong>.</p><p>Each time this method is called, the driver generates a new key.</p><p>The <em>KeySize</em> should match the size of the session key.</p><p>The read back key is encrypted by the driver/hardware using the session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Establishes a session key for an authenticated channel. </p> + <p>This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> </dd> + + + <dd> <p>The size of the data in the <em>pData</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. The buffer must contain 256 bytes of data, encrypted using {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}). +</p> </dd> + + + + + <p>Sends a query to an authenticated channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure. The <strong>QueryType</strong> member of the structure specifies the query and defines the meaning of the rest of the array.</p> </dd> + + + <dd> <p>The size of the <em>pOutput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the result of the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure. The meaning of the rest of the array depends on the query.</p> </dd> + + + + + <p>Sends a configuration command to an authenticated channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the command. This buffer always starts with a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure. The <strong>ConfigureType</strong> member of the structure specifies the command and defines the meaning of the rest of the buffer.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_OUTPUT}}</strong> structure that receives the response to the command.</p> </dd> + + + + + <p>Sets the stream rotation for an input stream on the video processor.</p> + <p>This is an optional state and the application should only use it if <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION}}</strong> is reported in <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}.FeatureCaps</strong>.</p><p>The stream source rectangle will be specified in the pre-rotation coordinates (typically landscape) and the stream destination rectangle will be specified in the post-rotation coordinates (typically portrait). The application must update the stream destination rectangle correctly when using a rotation value other than 0? and 180?.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is to be rotated in a clockwise orientation. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream.</p> </dd> + + + + + <p>Gets the stream rotation for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is rotated. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream in a clockwise orientation.</p> </dd> + + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device}}</strong> interface reference.</p><p>If you query an <strong>{{ID3D11Device}}</strong> for <strong>{{ID3D11VideoDevice}}</strong> and the Direct3D?11 device created is using the reference rasterizer or {{WARP}}, or is a hardware device and you are using the Microsoft Basic Display Adapter, <strong>{{E_NOINTERFACE}}</strong> is returned.</p> + + + + <p>Creates a video decoder device for Microsoft Direct3D?11.</p> + <p>This method allocates the necessary decoder buffers. </p><p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream and the decoder profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that specifies the decoder configuration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a video processor device for Microsoft Direct3D?11.</p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>Specifies the frame-rate conversion capabilities for the video processor. The value is a zero-based index that corresponds to the <em>TypeIndex</em> parameter of the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a channel to communicate with the Microsoft Direct3D device or the graphics driver. The channel can be used to send commands and queries for content protection.</p> + <p>If the <em>ChannelType</em> parameter is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, the method creates a channel with the Direct3D device. This type of channel does not support authentication.</p><p>If <em>ChannelType</em> is <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE}}</strong> or <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE}}</strong>, the method creates an authenticated channel with the graphics driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of channel, as a member of the <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a cryptographic session to encrypt video content that is sent to the graphics driver. </p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the cryptographic session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to use. The following {{GUIDs}} are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of key exchange.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_KEY_EXCHANGE_RSAES_OAEP}}</strong></dt> </dl> </td><td> <p>The caller will create the session key, encrypt it with {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}) by using the driver's public key, and pass the session key to the driver.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11CryptoSession}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a resource view for a video decoder, describing the output sample for the decoding operation.</p> + <p>Set the <em>ppVDOVView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the decoder surface. The resource must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. The caller must release the interface. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the input sample for the video processing operation.</p> + <p>Set the <em>ppVPIView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>The surface format is given in the <strong>FourCC</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fails if the video processor does not support this format as an input sample. An app must specify 0 when using 9_1, 9_2, or 9_3 feature levels. </p><p>Resources used for video processor input views must use the following bind flag combinations:</p><ul> <li>Any combination of bind flags that includes <strong>{{D3D11_BIND_DECODER}}</strong>,<strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong>, <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, and <strong>{{D3D11_BIND_UNORDERED_ACCESS_VIEW}}</strong> can be used as for video processor input views (regardless of what other bind flags may be set).</li> <li>Bind flags = 0 is also allowed for a video processor input view.</li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the input surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorInputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the output sample for the video processing operation.</p> + <p>Set the <em>ppVPOView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>Resources used for video processor output views must use the following <strong>{{D3D11_BIND_FLAG}}</strong> combinations:</p><ul> <li> <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> indicates that it can be used for a video processor output view. The following bind flags are allowed to be set with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>:<ul> <li> <strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong> </li> <li> <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong> </li> </ul> </li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> <li>Some {{YUV}} formats can be supported as a video processor output view, but might not be supported as a 3D render target. {{D3D11}} will allow the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag for these formats, but <strong>CreateRenderTargetView</strong> will not be allowed for these formats.</li> </ul><p>If stereo output is enabled, the output view must have 2 array elements. Otherwise, it must only have a single array element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the output surface. The resource must be created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Enumerates the video processor capabilities of the driver.</p> + <p>To create the video processor device, pass the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> reference to the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that describes the video content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the number of profiles that are supported by the driver.</p> + <p>To enumerate the profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> + <p>Returns the number of profiles.</p> + + + + <p>Gets a profile that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the profile. To get the number of profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfileCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the profile.</p> </dd> + + + + + <p>Given aprofile, checks whether the driver supports a specified output format.</p> + <p>If the driver does not support the profile given in <em>pDecoderProfile</em>, the method returns <strong>{{E_INVALIDARG}}</strong>. If the driver supports the profile, but the {{DXGI}} format is not compatible with the profile, the method succeeds but returns the value <strong>{{FALSE}}</strong> in <em>pSupported</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that identifies the profile. To get the list of supported profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> value that specifies the output format. Typical values include <strong>{{DXGI_FORMAT_NV12}}</strong> and <strong>{{DXGI_FORMAT_420_OPAQUE}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the format is supported, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the number of decoder configurations that the driver supports for a specified video description.</p> + <p>To enumerate the decoder configurations, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfig}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>Receives the number of decoder configurations.</p> </dd> + + + + + <p>Gets a decoder configuration that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>The zero-based index of the decoder configuration. To get the number of configurations that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfigCount}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure. The method fills in the structure with the decoder configuration.</p> </dd> + + + + + <p>Queries the driver for its content protection capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> <p>If no encryption will be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> <p>The driver might disallow some combinations of encryption type and profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure. The method fills in this structure with the driver's content protection capabilities. </p> </dd> + + + + + <p>Gets a cryptographic key-exchange mechanism that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the key-exchange type. The driver reports the number of types in the <strong>KeyExchangeTypeCount</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the type of key exchange.</p> </dd> + + + + + <p>Sets private data on the video device and associates that data with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} associated with the data.</p> </dd> + + + <dd> <p>The size of the data, in bytes.</p> </dd> + + + <dd> <p>A reference to the data.</p> </dd> + + + + + <p>Sets a private <strong>{{IUnknown}}</strong> reference on the video device and associates that reference with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p> + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a buffer (vertex buffer, index buffer, or shader-constant buffer).</p> + <p> For example code, see How to: Create a Vertex Buffer, How to: Create an Index Buffer or How to: Create a Constant Buffer. </p><p> For a constant buffer (<strong>BindFlags</strong> of <strong>{{D3D11_BUFFER_DESC}}</strong> set to <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>), you must set the <strong>ByteWidth</strong> value of <strong>{{D3D11_BUFFER_DESC}}</strong> in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, provides the following new functionality for <strong>CreateBuffer</strong>: </p><p> You can create a constant buffer that is larger than the maximum constant buffer size that a shader can access (4096 32-bit*4-component constants ? 64KB). When you bind the constant buffer to the pipeline (for example, via <strong>{{PSSetConstantBuffers}}</strong> or <strong>{{PSSetConstantBuffers1}}</strong>), you can define a range of the buffer that the shader can access that fits within the 4096 constant limit. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. On existing drivers that are implemented to feature level 10 and higher, a call to <strong>CreateBuffer</strong> to request a constant buffer that is larger than 4096 fails. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the buffer. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure that describes the initialization data; use <strong>{{NULL}}</strong> to allocate space only (with the exception that it cannot be <strong>{{NULL}}</strong> if the usage flag is <strong>{{D3D11_USAGE_IMMUTABLE}}</strong>). </p> <p> If you don't pass anything to <em>pInitialData</em>, the initial content of the memory for the buffer is undefined. In this case, you need to write the buffer content some other way before the resource is read. </p> </dd> + + + <dd> <p> Address of a reference to the <strong>{{ID3D11Buffer}}</strong> interface for the buffer object created. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (<strong>{{S_FALSE}}</strong> indicates a pass). </p> </dd> + + + + + <p>Creates an array of 1D textures.</p> + <p><strong>CreateTexture1D</strong> creates a 1D texture resource, which can contain a number of 1D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 width texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x1</li> <li>pInitialData[1] = 16x1</li> <li>pInitialData[2] = 8x1</li> <li>pInitialData[3] = 4x1 +</li> <li>pInitialData[4] = 2x1 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create an array of 2D textures.</p> + <p><strong>CreateTexture2D</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or it may use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a single 3D texture.</p> + <p><strong>CreateTexture3D</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a shader-resource view for accessing data in a resource.</p> + <p> A resource is made up of one or more subresources; a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following {{API}} methods: <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong> and <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>. </p><p>Because a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.</p><strong>Note</strong>?? To successfully create a shader-resource view from a typeless buffer (for example, <strong>{{DXGI_FORMAT_R32G32B32A32_TYPELESS}}</strong>), you must set the <strong>{{D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS}}</strong> flag when you create the buffer.?<p> The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateShaderResourceView</strong> for the following new purpose. </p><p> You can create shader-resource views of video resources so that Direct3D shaders can process those shader-resource views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure for a created shader-resource view must match the type of video resource, {{D3D11_SRV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_SRV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to. </p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}} </strong> flag. </p> </dd> + + + <dd> <p> Pointer to a shader-resource view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with). </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11ShaderResourceView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation). </p> </dd> + + + + + <p>Creates a view for accessing an unordered access resource.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateUnorderedAccessView</strong> for the following new purpose. </p><p>You can create unordered-access views of video resources so that Direct3D shaders can process those unordered-access views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure for a created unordered-access view must match the type of video resource, {{D3D11_UAV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_UAV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateRenderTargetView</strong> for the following new purpose. </p><p>You can create render-target views of video resources so that Direct3D shaders can process those render-target views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> structure for a created render-target view must match the type of video resource, {{D3D11_RTV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_RTV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11RenderTargetView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create a depth-stencil view for accessing resource data.</p> + <p>A depth-stencil view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to the resource that will serve as the depth-stencil surface. This resource must have been created with the <strong>{{D3D11_BIND_DEPTH_STENCIL}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses mipmap level 0 of the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11DepthStencilView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create an input-layout object to describe the input-buffer data for the input-assembler stage.</p> + <p>After creating an input layout object, it must be bound to the input-assembler stage before calling a draw {{API}}.</p><p>Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.</p><p> If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes. </p> + + + <dd> <p> An array of the input-assembler stage input data types; each type is described by an element description (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>). </p> </dd> + + + <dd> <p>The number of input-data types in the array of input-elements.</p> </dd> + + + <dd> <p> A reference to the compiled shader. The compiled shader code contains a input signature which is validated against the array of elements. See remarks. </p> </dd> + + + <dd> <p>Size of the compiled shader.</p> </dd> + + + <dd> <p> A reference to the input-layout object created (see <strong>{{ID3D11InputLayout}}</strong>). To validate the other input parameters, set this reference to be <strong>{{NULL}}</strong> and verify that the method returns {{S_FALSE}}. </p> </dd> + + + + + <p>Create a vertex-shader object from a compiled shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateVertexShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a vertex shader, you can successfully pass the compiled vertex shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateVertexShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateVertexShader</strong> fails. <strong>CreateVertexShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled vertex shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11VertexShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return <strong>{{S_FALSE}}</strong> instead of <strong>{{S_OK}}</strong>.</p> </dd> + + + + + <p>Create a geometry shader.</p> + <p>After it is created, the shader can be set to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShader</strong> fails. <strong>CreateGeometryShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11GeometryShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Creates a geometry shader that can write to streaming output buffers.</p> + <p> For more info about using <strong>CreateGeometryShaderWithStreamOutput</strong>, see Create a Geometry-Shader Object with Stream Output. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShaderWithStreamOutput</strong>. </p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p> Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShaderWithStreamOutput</strong> succeeds. </p><p> If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShaderWithStreamOutput</strong> fails. <strong>CreateGeometryShaderWithStreamOutput</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports. </p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li> All atomics and immediate atomics (for example, atomic_and and imm_atomic_and) </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.</p> <p> To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the <strong>{{D3DGetOutputSignatureBlob}}</strong> compiler function. You can also pass a reference to the compiled shader for the prior stage (for example, the vertex-shader stage or domain-shader stage). This compiled shader provides the output signature for the data. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{D3D11_SO_DECLARATION_ENTRY}}</strong> array. Cannot be <strong>{{NULL}}</strong> if NumEntries &gt; 0. </p> </dd> + + + <dd> <p>The number of entries in the stream output declaration ( ranges from 0 to {{D3D11_SO_STREAM_COUNT}} * {{D3D11_SO_OUTPUT_COMPONENT_COUNT}} ).</p> </dd> + + + <dd> <p>An array of buffer strides; each stride is the size of an element for that buffer.</p> </dd> + + + <dd> <p> The number of strides (or buffers) in <em>pBufferStrides</em> (ranges from 0 to {{D3D11_SO_BUFFER_SLOT_COUNT}}). </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage (ranges from 0 to {{D3D11_SO_STREAM_COUNT}} - 1). Set to {{D3D11_SO_NO_RASTERIZED_STREAM}} if no stream is to be rasterized. </p> </dd> + + + <dd> <p> A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11GeometryShader}}</strong> interface, representing the geometry shader that was created. Set this to <strong>{{NULL}}</strong> to validate the other parameters; if validation passes, the method will return {{S_FALSE}} instead of {{S_OK}}. </p> </dd> + + + + + <p>Create a pixel shader.</p> + <p>After creating the pixel shader, you can set it to the device using <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled pixel shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11PixelShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Create a hull shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateHullShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a hull shader, you can successfully pass the compiled hull shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateHullShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateHullShader</strong> fails. <strong>CreateHullShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Create a domain shader .</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateDomainShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a domain shader, you can successfully pass the compiled domain shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateDomainShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateDomainShader</strong> fails. <strong>CreateDomainShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Create a compute shader.</p> + <p>For an example, see How To: Create a Compute Shader and {{HDRToneMappingCS11}} Sample.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates class linkage libraries to enable dynamic shader linkage.</p> + <p>The <strong>{{ID3D11ClassLinkage}}</strong> interface returned in <em>ppLinkage</em> is associated with a shader by passing it as a parameter to one of the <strong>{{ID3D11Device}}</strong> create shader methods such as <strong>{{ID3D11Device::CreatePixelShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a class-linkage interface reference (see <strong>{{ID3D11ClassLinkage}}</strong>).</p> </dd> + + + + + <p>Create a blend-state object that encapsules blend state for the output-merger stage.</p> + <p> An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> Pointer to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>). </p> </dd> + + + <dd> <p> Address of a reference to the blend-state object created (see <strong>{{ID3D11BlendState}}</strong>). </p> </dd> + + + + + <p>Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.</p> + <p>4096 unique depth-stencil state objects can be created on a device at a time.</p><p>If an application attempts to create a depth-stencil-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique depth-stencil state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a depth-stencil state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the depth-stencil state object created (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Create a rasterizer state object that tells the rasterizer stage how to behave.</p> + <p>4096 unique rasterizer state objects can be created on a device at a time.</p><p>If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a rasterizer state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the rasterizer state object created (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Create a sampler-state object that encapsulates sampling information for a texture.</p> + <p>4096 unique sampler state objects can be created on a device at a time.</p><p>If an application attempts to create a sampler-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique sampler state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a sampler state description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the sampler state object created (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates methods for querying information from the {{GPU}}.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the query object created (see <strong>{{ID3D11Query}}</strong>).</p> </dd> + + + + + <p>Creates a predicate.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a query description where the type of query must be a {{D3D11_QUERY_SO_OVERFLOW_PREDICATE}} or {{D3D11_QUERY_OCCLUSION_PREDICATE}} (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>).</p> </dd> + + + + + <p>Create a counter object for measuring {{GPU}} performance.</p> + <p>If this function succeeds, it will return {{S_OK}}. If it fails, possible return values are: {{S_FALSE}}, {{E_OUTOFMEMORY}}, {{DXGI_ERROR_UNSUPPORTED}}, {{DXGI_ERROR_NONEXCLUSIVE}}, or {{E_INVALIDARG}}.</p><p>{{DXGI_ERROR_UNSUPPORTED}} is returned whenever the application requests to create a well-known counter, but the current device does not support it.</p><p>{{DXGI_ERROR_NONEXCLUSIVE}} indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.</p><p>{{E_INVALIDARG}} is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a counter (see <strong>{{ID3D11Counter}}</strong>).</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. Using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After all scene items are recorded, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device}}</strong>, the <strong>CreateDeferredContext</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Get the support of a given format on the installed video device.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Format</em> parameter is <strong>{{NULL}}</strong>, or returns {{E_FAIL}} if the described format does not exist.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> enumeration that describes a format for which to check for support.</p> </dd> + + + <dd> <p>A bitfield of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> enumeration values describing how the specified format is supported on the installed device. The values are {{ORed}} together.</p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum number of quality levels is defined by {{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}} in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>Number of quality levels supported by the adapter. See remarks.</p> </dd> + + + + + <p>Get a counter's information.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to counter information (see <strong>{{D3D11_COUNTER_INFO}}</strong>).</p> </dd> + + + + + <p>Get the type, name, units of measure, and a description of an existing counter.</p> + <p> Length parameters can be <strong>{{NULL}}</strong>, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-<strong>{{NULL}}</strong> and the corresponding string is <strong>{{NULL}}</strong>, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating <strong>{{NULL}}</strong>) will be returned through the length parameter. When length and the corresponding parameter are both non-<strong>{{NULL}}</strong>, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating <strong>{{NULL}}</strong> character) is passed out through the length parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>). Specifies which counter information is to be retrieved about. </p> </dd> + + + <dd> <p> Pointer to the data type of a counter (see <strong>{{D3D11_COUNTER_TYPE}}</strong>). Specifies the data type of the counter being retrieved. </p> </dd> + + + <dd> <p>Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.</p> </dd> + + + <dd> <p> String to be filled with a brief name for the counter. May be <strong>{{NULL}}</strong> if the application is not interested in the name of the counter. </p> </dd> + + + <dd> <p> Length of the string returned to szName. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szUnits. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szDescription. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets information about the features that are supported by the current graphics driver.</p> + <p>To query for multi-threading support, pass the <strong>{{D3D11_FEATURE_THREADING}}</strong> value to the <em>Feature</em> parameter, pass the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>pFeatureSupportData</em> parameter, and pass the size of the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>FeatureSupportDataSize</em> parameter.</p><p>Calling CheckFeatureSupport with <em>Feature</em> set to {{D3D11_FEATURE_FORMAT_SUPPORT}} causes the method to return the same information that would be returned by <strong>{{ID3D11Device::CheckFormatSupport}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter.</p> + + + <dd> <p>A member of the <strong>{{D3D11_FEATURE}}</strong> enumerated type that describes which feature to query for support.</p> </dd> + + + <dd> <p>Upon completion of the method, the passed structure is filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size of the structure passed to the <em>pFeatureSupportData</em> parameter.</p> </dd> + + + + + <p>Get application-defined data from a device.</p> + <p>This method returns one of the codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved.</p> </dd> + + + <dd> <p>A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data.</p> </dd> + + + + + <p>Set data to a device and associate that data with a guid.</p> + <p>The data stored in the device with this method can be retrieved with <strong>{{ID3D11Device::GetPrivateData}}</strong>.</p><p>The data and guid set with this method will typically be application-defined.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>Gets the feature level of the hardware device.</p> + <p> Feature levels determine the capabilities of your device.</p> + <p>A member of the <strong>{{D3D_FEATURE_LEVEL}}</strong> enumerated type that describes the feature level of the hardware device.</p> + + + + <p>Get the flags used during the call to create the device with <strong>{{D3D11CreateDevice}}</strong>.</p> + <p>A bitfield containing the flags used to create the device. See <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>.</p> + + + + <p>Get the reason why the device was removed.</p> + <p>Possible return values include: </p><ul> <li>{{DXGI_ERROR_DEVICE_HUNG}}</li> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_ERROR_DEVICE_RESET}}</li> <li>{{DXGI_ERROR_DRIVER_INTERNAL_ERROR}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li>{{S_OK}}</li> </ul><p>For more detail on these return codes, see {{DXGI_ERROR}}.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p>The <strong>GetImmediateContext</strong> method returns an <strong>{{ID3D11DeviceContext}}</strong> object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>Set an exception-mode flag to elevate an error condition to a non-continuable exception. </p><p>Whenever an error occurs, a Direct3D device enters the {{DEVICEREMOVED}} state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>An exception-mode flag is used to elevate an error condition to a non-continuable exception. </p> + <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> + + + + <p>Creates a device that represents the display adapter.</p> + <p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Set <em>ppDevice</em> and <em>ppImmediateContext</em> to <strong>{{NULL}}</strong> to determine which feature level is supported by looking at <em>pFeatureLevel</em> without creating a device. </p><p> For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDevice}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><table> <tr><td> <p>Differences between Direct3D 10 and Direct3D 11:</p> <p> In Direct3D 10, the presence of <em>pAdapter</em> dictated which adapter to use and the <em>DriverType</em> could mismatch what the adapter was. </p> <p> In Direct3D 11, if you are trying to create a hardware or a software device, set <em>pAdapter</em> != <strong>{{NULL}}</strong> which constrains the other inputs to be: </p> <ul> <li><em>DriverType</em> must be {{D3D_DRIVER_TYPE_UNKNOWN}} </li> <li><em>Software</em> must be <strong>{{NULL}}</strong>. </li> </ul> <p> On the other hand, if <em>pAdapter</em> == <strong>{{NULL}}</strong>, the <em>DriverType</em> cannot be set to {{D3D_DRIVER_TYPE_UNKNOWN}}; it can be set to either: </p> <ul> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_SOFTWARE}}, <em>Software</em> cannot be <strong>{{NULL}}</strong>. </li> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_HARDWARE}}, the adapter used will be the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong> </li> </ul> </td></tr> </table><p>?</p><p> The function signature {{PFN_D3D11_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><p><strong>Windows Phone 8.1: </strong> This {{API}} is supported. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre>{ {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +};</pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned. </p> </dd> + + + <dd> <p> If successful, returns the first <strong>{{D3D_FEATURE_LEVEL}}</strong> from the <em>pFeatureLevels</em> array which succeeded. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <p>Creates a device that represents the display adapter and a swap chain used for rendering.</p> + <strong>Note</strong>?? If you call this method in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Also, see the remarks section in <strong>{{D3D11CreateDevice}}</strong> for details about input parameter dependencies. To create a device without creating a swap chain, use the <strong>{{D3D11CreateDevice}}</strong> function. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDeviceAndSwapChain}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><p> The function signature {{PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong> if you call it in a Session 0 process. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. The value should be non-<strong>{{NULL}}</strong> when <strong>{{D3D_DRIVER_TYPE}}</strong> is <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong> and <strong>{{NULL}}</strong> otherwise. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre> { {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> A reference to a swap chain description (see <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>) that contains initialization parameters for the swap chain. </p> </dd> + + + <dd> <p> Returns the address of a reference to the <strong>{{IDXGISwapChain}}</strong> object that represents the swap chain used for rendering. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned'. </p> </dd> + + + <dd> <p> Returns a reference to a <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the first element in an array of feature levels supported by the device. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies how to handle the existing contents of a resource during a copy or update operation of a region within that resource.</p> + + + <dd> <p>The existing contents of the resource cannot be overwritten.</p> </dd> + + + <dd> <p>The existing contents of the resource are undefined and can be discarded.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies logical operations to configure for a render target.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Describes flags that are used to create a device context state object (<strong>{{ID3DDeviceContextState}}</strong>) with the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method.</p> + + + + <p>Specifies capabilities of the video decoder.</p> + + + <dd> <p>Indicates that the graphics driver supports at least a subset of downsampling operations.</p> </dd> + + + <dd> <p>Indicates that the decoding hardware cannot support the decode operation in real-time. Decoding is still supported for transcoding scenarios. With this capability, it is possible that decoding can occur in real-time if downsampling is enabled. +</p> </dd> + + + <dd> <p>Indicates that the driver supports changing down sample parameters after the initial down sample parameters have been applied. For more information, see <strong>{{ID3D11VideoContext1::DecoderUpdateDownsampling}}</strong>.</p> </dd> + + + + + <p>Specifies flags that indicate the most efficient methods for performing video processing operations. </p> + + + <dd> <p>Multi-plane overlay hardware can perform the rotation operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the scaling operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the colorspace conversion operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>The video processor output data should be at least triple buffered for optimal performance.</p> </dd> + + + + + <p>Represents the status of an <strong>{{ID3D11CryptoSession}}</strong> interface.</p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC1}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>Enable (or disable) a logical operation.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p> Describes the blend state that you use in a call to <strong>{{ID3D11Device1::CreateBlendState1}}</strong> to create a blend-state object. </p> + <p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this <strong>{{D3D11_BLEND_DESC1}}</strong> to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>Indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a sub sample mapping block.</p> + <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> + + + <dd> <p>The number of clear (non-encrypted) bytes at the start of the block.</p> </dd> + + + <dd> <p>The number of encrypted bytes following the clear bytes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. </p> </dd> + + + <dd> <p>Size of the relevant data.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <em>pIV</em> parameter. If <em>pIV</em> is {{NULL}}, set this member to zero.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures, which indicates exactly which bytes in the decode buffer are encrypted and which are in the clear. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> </dd> + + + <dd> <p>The number of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures specified in the <em>pSubSampleMappingBlocks</em> parameter. If <em>pSubSampleMappingBlocks</em> is {{NULL}}, set this member to zero.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides data to the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> method.</p> + <p>This structure is passed in the <em>pContentKey</em> parameter of the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> function when <strong>{{D3D11_DECODER_ENCRYPTION_HW_CENC}}</strong> is specified in the <strong>guidConfigBitstreamEncryption</strong> member of the <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure when creating the video decoder interface.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides information about the input streams passed into the <strong>{{ID3DVideoContext1::VideoProcessorGetBehaviorHints}}</strong> method.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange input data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateInputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The size of the {{DRM}} command data.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbInput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbInput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbInput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange output data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateOutputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The maximum size of data that the driver can return in the output buffer. The last byte that it can write to is <strong>pbOuput</strong>[<strong>PrivateDataSize</strong> + <strong>MaxHWProtectionDataSize</strong> ? 1].</p> </dd> + + + <dd> <p>The size of the output data written by the driver.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent executing the content protection command.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbOutput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbOutput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbOutput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange data for hardware content protection.</p> + <p>A reference to this structure is passed in the <em>pData</em> parameter of <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method when the <strong>{{ID3D11CryptoSession}}</strong> is creating using the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong> key exchange type.</p> + + + <dd> <p>The function {{ID}} of the {{DRM}} command. The values and meanings of the function {{ID}} are defined by the {{DRM}} specification.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>The result of the hardware {{DRM}} command.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a video sample.</p> + + + <dd> <p>The width of the video sample.</p> </dd> + + + <dd> <p>The height of the video sample.</p> </dd> + + + <dd> <p>The format of the video sample.</p> </dd> + + + <dd> <p>The colorspace of the sample.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage. This blend-state interface supports logical operations as well as blending operations.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device1::CreateBlendState1}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device1::CreateBlendState1}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC1}}</strong> structure that receives a description of the blend state. This blend state can specify logical operations as well as blending operations.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong> {{D3D11_RASTERIZER_DESC1}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count.</p> </dd> + + + + + <p>The <strong>{{ID3DDeviceContextState}}</strong> interface represents a context state object, which holds state and behavior information about a Microsoft Direct3D device.</p> + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + <p>Copies a region from a source resource to a destination resource.</p> + <p>If the display driver supports overlapping, the source and destination subresources can be identical, and the source and destination regions can overlap each other. For existing display drivers that don?t support overlapping, the runtime drops calls with identical source and destination subresources, regardless of whether the regions overlap. To determine whether the display driver supports overlapping, check the <strong>CopyWithOverlap</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>. This overlapping support enables additional scroll functionality in a call to <strong>{{IDXGISwapChain::Present}}</strong>.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> or <strong>CopySubresourceRegion1</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper-left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource.</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box that defines the region of the source subresource that <strong>CopySubresourceRegion1</strong> can copy. If <strong>{{NULL}}</strong>, <strong>CopySubresourceRegion1</strong> copies the entire source subresource. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion1</strong> doesn't perform a copy operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the copy operation. If you specify zero for no copy option, <strong>CopySubresourceRegion1</strong> behaves like <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them. </p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>If you call <strong>UpdateSubresource1</strong> to update a constant buffer, pass any region, and the driver has not been implemented to Windows?8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant). When the runtime drops the call, the runtime doesn't call the corresponding device driver interface ({{DDI}}).</p><p>When you record a call to <strong>UpdateSubresource</strong> with an offset <em>pDstBox</em> in a software command list, the offset in <em>pDstBox</em> is incorrectly applied to <em>pSrcData</em> when you play back the command list. The new-for-Windows?8<strong>UpdateSubresource1</strong> fixes this issue. In a call to <strong>UpdateSubresource1</strong>, <em>pDstBox</em> does not affect <em>pSrcData</em>.</p><p>For info about various resource types and how <strong>UpdateSubresource1</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource1</strong> or <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing.</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>A zero-based index that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, <strong>UpdateSubresource1</strong> writes the data to the destination subresource with no offset. The dimensions of the source must fit the destination.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource1</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the update operation. If you specify zero for no update option, <strong>UpdateSubresource1</strong> behaves like <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them.</p> </dd> + + + + + <p>Discards a resource from the device context.</p> + <p><strong>DiscardResource</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource that <em>pResource</em> points to is no longer needed.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface for the resource to discard. The resource must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardResource</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Discards a resource view from the device context.</p> + <p><strong>DiscardView</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView</strong> allows you to discard a subset of a resource that is in a view (such as a single miplevel). More importantly, <strong>DiscardView</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Sets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{VSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{VSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{VSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the hull-shader stage of the pipeline uses.</p> + <p>The runtime drops the call to <strong>{{HSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{HSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If the <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{HSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + + <p>Sets the constant buffers that the domain-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{DSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{DSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{DSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{GSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{GSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{GSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p> Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer. </p> + <p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p><p> The runtime drops the call to <strong>{{PSSetConstantBuffers1}}</strong> if the numbers of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components. </p><p> The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range): </p><p> [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>] </p><p> That is, the window is the range is from (value in an element of <em>pFirstConstant</em>) to (value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>). </p><p> The runtime also drops the call to <strong>{{PSSetConstantBuffers1}}</strong> on existing drivers that do not support this offsetting. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. </p><p> From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>. </p><p> Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p> If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{PSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants. </p><p> If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>. </p> + <p> Returns nothing. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers being given to the device. </p> </dd> + + + <dd> <p> An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants. </p> </dd> + + + <dd> <p> An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the compute-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{CSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{CSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{CSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Gets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the hull-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + + <p>Gets the constant buffers that the domain-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the pixel shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the compute-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Activates the given context state object and changes the current device behavior to Direct3D?11, Direct3D?10.1, or Direct3D?10.</p> + <p><strong>SwapDeviceContextState</strong> changes device behavior. This device behavior depends on the emulated interface that you passed to the <em>EmulatedInterface</em> parameter of the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method when you created the context state object. </p><p><strong>SwapDeviceContextState</strong> is not supported on a deferred context.</p><p><strong>SwapDeviceContextState</strong> disables the incompatible device interfaces <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong>. When a context state object is active, the runtime disables certain methods on the device and context interfaces. A context state object that is created with <code>__uuidof({{ID3D11Device1}})</code> or <code>__uuidof({{ID3D11Device}})</code> turns off most of the Direct3D?10 device interfaces. A context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> turns off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. +For more information about this behavior, see <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>.</p><p><strong>SwapDeviceContextState</strong> activates the context state object specified by <em>pState</em>. This means that the device behaviors that are associated with the context state object's feature level and compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. In addition, any state that was saved when this context state object was last active is now reactivated, so that the previous state is replaced.</p><p><strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the most recently activated context state object. The object allows the caller to save and then later restore the previous device state. This behavior is useful in a plug-in architecture such as Direct2D that shares a Direct3D device with its plug-ins. A Direct2D interface can use context state objects to save and restore the application's state.</p><p>If the caller did not previously call the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method to create a previous context state object, <strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the default context state object. In either case, usage of <strong>SwapDeviceContextState</strong> is the same.</p><p>The feature level that is specified by the application, and that is chosen by the context state object from the acceptable list that the application supplies to <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>, controls the feature level of the immediate context whenever the context state object is active. Because the Direct3D?11 device is free-threaded, the device methods cannot query the current immediate context feature level. Instead, the device runs at a feature level that is the maximum of all previously created context state objects' feature levels. This means that the device's feature level can increase dynamically.</p><p>The feature level of the context state object controls the functionality available from the immediate context. However, to maintain the free-threaded contract of the Direct3D?11 device methods?the resource-creation methods in particular?the upper-bound feature level of all created context state objects controls the set of resources that the device creates.</p><p>Because the context state object interface is published by the immediate context, the interface requires the same threading model as the immediate context. Specifically, <strong>SwapDeviceContextState</strong> is single-threaded with respect to the other immediate context methods and with respect to the equivalent methods of <strong>{{ID3D10Device}}</strong>.</p><p>Crucially, because only one of the Direct3D?10 or Direct3D?11 ref-count behaviors can be available at a time, one of the Direct3D?10 and Direct3D?11 interfaces must break its ref-count contract. To avoid this situation, the activation of a context state object turns off the incompatible version interface. Also, if you call a method of an incompatible version interface, the call silently fails if the method has return type <strong>void</strong>, returns an <strong>{{HRESULT}}</strong> value of <strong>{{E_INVALIDARG}}</strong>, or sets any out parameter to <strong>{{NULL}}</strong>.</p><p>When you switch from Direct3D?11 mode to either Direct3D?10 mode or Direct3D?10.1 mode, the binding behavior of the device changes. Specifically, the final release of a resource induces unbind in Direct3D?10 mode or Direct3D?10.1 mode. During final release an application releases all of the resource's references, including indirect references such as the linkage from view to resource, and the linkage from context state object to any of the context state object's bound resources. Any bound resource to which the application has no reference is unbound and destroyed, in order to maintain the Direct3D?10 behavior.</p><p><strong>SwapDeviceContextState</strong> does not affect any state that <strong>{{ID3D11VideoContext}}</strong> sets. </p><p>Command lists that are generated by deferred contexts do not hold a reference to context state objects and are not affected by future updates to context state objects.</p><p>No asynchronous objects are affected by <strong>SwapDeviceContextState</strong>. For example, if a query is active before a call to <strong>SwapDeviceContextState</strong>, it is still active after the call.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the context state object that was previously created through the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method. If <strong>SwapDeviceContextState</strong> is called with <em>pState</em> set to <strong>{{NULL}}</strong>, the call has no effect.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the previously-activated context state object.</p> </dd> + + + + + <p>Sets all the elements in a resource view to one value.</p> + <p><strong>ClearView</strong> works only on render-target views ({{RTVs}}), depth/stencil views ({{DSVs}}) on depth-only resources (resources with no stencil component), unordered-access views ({{UAVs}}), or any video view of a <strong>Texture2D</strong> surface. The runtime drops invalid calls. Empty rectangles in the <em>pRect</em> array are a no-op. A rectangle is empty if the top value equals the bottom value or the left value equals the right value.</p><p><strong>ClearView</strong> doesn?t support 3D textures.</p><p><strong>ClearView</strong> applies the same color value to all array slices in a view; all rectangles in the <em>pRect</em> array correspond to each array slice. The <em>pRect</em> array of rectangles is a set of areas to clear on a single surface. If the view is an array, <strong>ClearView</strong> clears all the rectangles on each array slice individually.</p><p>When you apply rectangles to buffers, set the top value to 0 and the bottom value to 1 and set the left value and right value to describe the extent within the buffer. When the top value equals the bottom value or the left value equals the right value, the rectangle is empty and a no-op is achieved.</p><p>The driver converts and clamps color values to the destination format as appropriate per Direct3D conversion rules. For example, if the format of the view is <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>, the driver clamps inputs to 0.0f to 1.0f (+{{INF}} -&gt; 1.0f (0XFF)/NaN -&gt; 0.0f).</p><p>If the format is integer, such as <strong>{{DXGI_FORMAT_R8G8B8A8_UINT}}</strong>, the runtime interprets inputs as integral floats. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p><p>Here are the color mappings:</p><ul> <li>Color[0]: R (or Y for video)</li> <li>Color[1]: G (or U/Cb for video)</li> <li>Color[2]: B (or V/Cr for video)</li> <li>Color[3]: A</li> </ul><p>For video views with {{YUV}} or {{YCbBr}} formats, <strong>ClearView</strong> doesn't convert color values. In situations where the format name doesn?t indicate _UNORM, _UINT, and so on, <strong>ClearView</strong> assumes _UINT. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface that represents the resource view to clear.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to use to clear the resource view.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearView</strong> clears the entire surface.</p> </dd> + + + <dd> <p>Number of rectangles in the array that the <em>pRect</em> parameter specifies.</p> </dd> + + + + + <p>Discards the specified elements in a resource view from the device context.</p> + <p><strong>DiscardView1</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the specified elements in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView1</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView1</strong> allows you to discard elements of a subset of a resource that is in a view (such as elements of a single miplevel). More importantly, <strong>DiscardView1</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource. </p> + <p>Returns nothing</p> + + + <dd> <p> A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView1</strong>; if the debug layer is enabled, the runtime returns an error message. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to discard. If <strong>{{NULL}}</strong>, <strong>DiscardView1</strong> discards the entire view and behaves the same as <strong>DiscardView</strong>. </p> </dd> + + + <dd> <p> Number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the video functionality of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext1}}</strong> interface reference.</p> + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor any {{D3D11}} predicate that may have been set. <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC1}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Allows the driver to return {{IHV}} specific information used when initializing the new hardware key.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the {{ID3D11CryptoSession}} interface. To get this reference, call <strong>{{ID3D11VideoDevice1::CreateCryptoSession}}</strong>.</p> </dd> + + + <dd> <p>The size of the memory referenced by the <em>pPrivateInputData</em> parameter.</p> </dd> + + + <dd> <p>The private input data. The contents of this parameter is defined by the implementation of the secure execution environment. It may contain data about the license or about the stream properties.</p> </dd> + + + <dd> <p>A reference to the private output data. The return data is defined by the implementation of the secure execution environment. It may contain graphics-specific data to be associated with the underlying hardware key.</p> </dd> + + + + + <p>Checks the status of a crypto session.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>Specifies a <strong>{{ID3D11CryptoSession}}</strong> for which status is checked.</p> </dd> + + + <dd> <p>A {{D3D11_CRYPTO_SESSION_STATUS}} that is populated with the crypto session status upon completion.</p> </dd> + + + + + <p>Indicates that decoder downsampling will be used and that the driver should allocate the appropriate reference frames. </p> + <p>This function can only be called once for a specific <strong>{{ID3D11VideoDecoder}}</strong> interface. This method must be called prior to the first call to <strong>DecoderBeginFrame</strong>. To update the downsampling parameters, use <strong>DecoderUpdateDownsampling</strong>.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The color space information of the reference frame data.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>The number of reference frames to be used in the operation.</p> </dd> + + + + + <p>Updates the decoder downsampling parameters.</p> + <p>This method can only be called after decode downsampling is enabled by calling <strong>DecoderEnableDownsampling</strong>. This method is only supported if the <strong>{{D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC}}</strong> capability is reported.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + + + <p>Sets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Sets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> will be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that indicates the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Gets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> can be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Specifies whether the video processor input stream should be flipped vertically or horizontally.</p> + <p>When used in combination, transformations on the processor input stream should be applied in the following order:</p><ul> <li>Rotation</li> <li>Mirroring</li> <li>Source clipping</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>True if mirroring should be enabled; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Gets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Gets values that indicate whether the video processor input stream is being flipped vertically or horizontally.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether mirroring is enabled. True if mirroring is enabled; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped horizontally. True if the stream is being flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped vertically. True if the stream is being flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Returns driver hints that indicate which of the video processor operations are best performed using multi-plane overlay hardware rather than <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> + <p>This method computes the behavior hints using the current state of the video processor as set by the "SetOutput" and "SetStream" methods of <strong>{{ID3D11VideoContext}}</strong> and <strong>{{ID3D11VideoContext1}}</strong>. You must set the proper state before calling this method to ensure that the returned hints contain useful data.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device1}}</strong> interface reference.</p> + + + + <p>Retrieves optional sizes for private driver data. </p> + <p>When <em>pKeyExchangeType</em> is <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong>, the following behavior is expected in the <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method:</p><ul> <li>The <em>DataSize</em> parameter is set to the size of the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure.</li> <li><em>pData</em> points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure. <ul> <li>The <strong>pInputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure where:<ul> <li><strong>pbInput</strong>[0] ? <strong>pbInput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateInputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbInput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> <li>The <strong>pOutputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure where:<ul> <li><strong>pbOutput</strong>[0] ? <strong>pbOutput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateOutputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbOutput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> </ul> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Indicates the crypto type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the decoder profile for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the key exchange type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for input commands.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for output commands.</p> </dd> + + + + + <p>Retrieves capabilities and limitations of the video decoder.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The decode profile for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video width for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video height for which the capabilities are queried.</p> </dd> + + + <dd> <p>The frame rate of the video content. This information is used by the driver to determine whether the video can be decoded in real-time.</p> </dd> + + + <dd> <p>The bit rate of the video stream. A value of zero indicates that the bit rate can be ignored.</p> </dd> + + + <dd> <p>The type of cryptography used to encrypt the video stream. A value of {{NULL}} indicates that the video stream is not encrypted.</p> </dd> + + + <dd> <p>A reference to a bitwise {{OR}} combination of <strong>{{D3D11_VIDEO_DECODER_CAPS}}</strong> values specifying the decoder capabilities. </p> </dd> + + + + + <p>Indicates whether the video decoder supports downsampling with the specified input format, and whether real-time downsampling is supported.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>An object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>An object describing the resolution, format, and colorspace of the output frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if downsampling is supported with the specified input data. True if the driver supports the requested downsampling; otherwise, false.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if real-time decoding is supported with the specified input data. True if the driver supports the requested real-time decoding; otherwise, false. Note that the returned value is based on the current configuration of the video decoder and does not guarantee that real-time decoding will be supported for future downsampling operations.</p> </dd> + + + + + <p>Allows the driver to recommend optimal output downsample parameters from the input parameters.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_VIDEO_SAMPLE_DESC}}</strong> structure that the driver populates with the recommended output buffer parameters for a downsample operation. The driver will attempt to recommend parameters that can support real-time decoding. If it is unable to do so, the driver will recommend values that are as close to the real-time solution as possible.</p> </dd> + + + + + <p>Enumerates the video processor capabilities of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>. </p> + + + + <p>Indicates whether the driver supports the specified combination of format and colorspace conversions.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The format of the video processor input.</p> </dd> + + + <dd> <p>The colorspace of the video processor input.</p> </dd> + + + <dd> <p>The format of the video processor output.</p> </dd> + + + <dd> <p>The colorspace of the video processor output.</p> </dd> + + + <dd> <p>Pointer to a boolean that is set by the driver to indicate if the specified combination of format and colorspace conversions is supported. True if the conversion is supported; otherwise, false.</p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device1}}</strong> adds new methods to those in <strong>{{ID3D11Device}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p><strong>GetImmediateContext1</strong> returns an <strong>{{ID3D11DeviceContext1}}</strong> object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p><strong>GetImmediateContext1</strong> increments the reference count of the immediate context by one. So, call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized.</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device1}}</strong>, the <strong>CreateDeferredContext1</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the graphics adapter has been physically removed from the computer or a driver upgrade for the graphics adapter has occurred. If this error occurs, you should destroy and re-create the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext1</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext1</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Creates a blend-state object that encapsulates blend state for the output-merger stage and allows the configuration of logic operations.</p> + <p>The logical operations (those that enable bitwise logical operations between pixel shader output and render target contents, refer to <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> ) are only available on certain feature levels; call <strong>CheckFeatureSupport</strong> with {{D3D11_FEATURE_D3D11_OPTIONS}} set, to ensure support by checking the boolean field <em>OutputMergerLogicOp</em> of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p><p>An app can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>An app can create up to 4096 unique rasterizer state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p> Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior. </p> + <p> The <strong>{{REFIID}}</strong> value of the emulated interface is a {{GUID}} obtained by use of the <strong>__uuidof</strong> operator. For example, <code>__uuidof({{ID3D11Device}})</code> gets the {{GUID}} of the interface to a Microsoft Direct3D?11 device. </p><p> Call the <strong>{{ID3D11DeviceContext1::SwapDeviceContextState}}</strong> method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. </p><p> When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with <code>__uuidof({{ID3D11Device}})</code> will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> will cause the runtime to turn off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the <strong>{{ID3D10Device1}}</strong> emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition. </p><p> For example, suppose the tessellation stage is made active through the <strong>{{ID3D11DeviceContext}}</strong> interface when you create the device through <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via <strong>QueryInterface</strong>. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call <strong>SwapDeviceContextState</strong> to activate a Direct3D?10-compatible context state object. </p><p> The following table shows the methods that are active and inactive for each emulated interface.</p><table> <tr><th> Emulated interface </th><th>Active device or immediate context interfaces </th><th>Inactive device or immediate context interfaces</th></tr> <tr><td> <p> <strong>{{ID3D11Device}}</strong> or </p> <p> <strong>{{ID3D11Device1}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> + </p> <p> <strong>{{IDXGIDevice2}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <strong>{{ID3D10Device}}</strong> </td></tr> <tr><td> <p> <strong>{{ID3D10Device1}}</strong> or </p> <p> <strong>{{ID3D10Device}}</strong> </p> </td><td> <p> <strong>{{ID3D10Device}}</strong> </p> <p> <strong>{{ID3D10Device1}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{ID3D11DeviceContext}}</strong> (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.) </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>ClearDepthStencilView</strong> </p> </td><td> <p> <strong>ClearDepthStencilView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearRenderTargetView</strong> </p> </td><td> <p> <strong>ClearRenderTargetView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearState</strong> </p> </td><td> <p> <strong>ClearState</strong> </p> </td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewUint</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewFloat</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopyResource</strong> </p> </td><td> <p> <strong>CopyResource</strong> </p> </td></tr> <tr><td> <p> <strong>CopyStructureCount</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopySubresourceRegion</strong> </p> </td><td> <p> <strong>CopySubresourceRegion</strong> </p> </td></tr> <tr><td> <p> <strong>{{CSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Dispatch</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DispatchIndirect</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>CreateBlendState</strong> </p> </td></tr> <tr><td> <p> <strong>Draw</strong> </p> </td><td> <p> <strong>Draw</strong> </p> </td></tr> <tr><td> <p> <strong>DrawAuto</strong> </p> </td><td> <p> <strong>DrawAuto</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexed</strong> </p> </td><td> <p> <strong>DrawIndexed</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DrawInstanced</strong> </p> </td><td> <p> <strong>DrawInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ExecuteCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>FinishCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Flush</strong> </p> </td><td> <p> <strong>Flush</strong> </p> </td></tr> <tr><td> <p> <strong>GenerateMips</strong> </p> </td><td> <p> <strong>GenerateMips</strong> </p> </td></tr> <tr><td> <p> <strong>GetPredication</strong> </p> </td><td> <p> <strong>GetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>GetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetType</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShader}}</strong> </p> </td><td> <p> <strong>{{GSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShader}}</strong> </p> </td><td> <p> <strong>{{GSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{HSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IAGetVertexBuffers}}</strong> </td><td> <p> <strong>{{IAGetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetIndexBuffer}}</strong> </td><td> <p> <strong>{{IASetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetInputLayout}}</strong> </td><td> <p> <strong>{{IASetInputLayout}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetPrimitiveTopology}}</strong> </td><td> <p> <strong>{{IASetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetVertexBuffers}}</strong> </td><td> <p> <strong>{{IASetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShader}}</strong> </p> </td><td> <p> <strong>{{PSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShader}}</strong> </p> </td><td> <p> <strong>{{PSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>ResolveSubresource</strong> </p> </td><td> <p> <strong>ResolveSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetState}}</strong> </p> </td><td> <p> <strong>{{RSGetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetState}}</strong> </p> </td><td> <p> <strong>{{RSSetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>SetPredication</strong> </p> </td><td> <p> <strong>SetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>SetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>SetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>UpdateSubresource</strong> </p> </td><td> <p> <strong>UpdateSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShader}}</strong> </p> </td><td> <p> <strong>{{VSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShader}}</strong> </p> </td><td> <p> <strong>{{VSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>Begin</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>End</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetCreationFlags</strong> </p> </td></tr> <tr><td></td><td> <p> <strong>GetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>GetContextFlags</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetData</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Map</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Unmap</strong> </p> </td><td></td></tr> </table><p>?</p><p> The following table shows the <strong>{{ID3D10Device}}</strong> interface methods that the runtime does not disable because they are not immediate context methods.</p><table> <tr><th> Methods of <strong>{{ID3D10Device}}</strong> </th></tr> <tr><td> <p> <strong>CheckCounter</strong> </p> </td></tr> <tr><td> <p> <strong>CheckCounterInfo</strong> </p> </td></tr> <tr><td> <p> Create*, like <strong>CreateQuery</strong> </p> </td></tr> <tr><td> <p> <strong>GetDeviceRemovedReason</strong> </p> </td></tr> <tr><td> <p> <strong>GetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>OpenSharedResource</strong> </p> </td></tr> <tr><td> <p> <strong>SetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateDataInterface</strong> </p> </td></tr> </table><p>?</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A combination of <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG}}</strong> values that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how to create the context state object. The <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag is currently the only defined flag. If the original device was created with <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong>, you must create all context state objects from that device with the <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag. </p> <p></p> <p>If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections.</p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong> values. The array can contain elements from the following list and determines the order of feature levels for which creation is attempted. Unlike <strong>{{D3D11CreateDevice}}</strong>, you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong> because there is no default feature level array. </p> <pre>{ {{D3D_FEATURE_LEVEL_11_1}}, {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. Unlike <strong>{{D3D11CreateDevice}}</strong>, you must set <em>FeatureLevels</em> to greater than 0 because you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> The {{SDK}} version. You must set this parameter to <strong>{{D3D11_SDK_VERSION}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are obtained by using the <strong>__uuidof</strong> operator on the <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong> interfaces. See Remarks. </p> </dd> + + + <dd> <p> A reference to a variable that receives a <strong>{{D3D_FEATURE_LEVEL}}</strong> value from the <em>pFeatureLevels</em> array. This is the first array value with which <strong>CreateDeviceContextState</strong> succeeded in creating the context state object. If the call to <strong>CreateDeviceContextState</strong> fails, the variable pointed to by <em>pChosenFeatureLevel</em> is set to zero. </p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3DDeviceContextState}}</strong> object that represents the state of a Direct3D device. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag).</p> + <p>The behavior of <strong>OpenSharedResourceByName</strong> is similar to the behavior of the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method; each call to <strong>OpenSharedResourceByName</strong> to access a resource creates a new resource object. In other words, if you call <strong>OpenSharedResourceByName</strong> twice and pass the same resource name to <em>lpName</em>, you receive two resource objects with different <strong>{{IUnknown}}</strong> references.</p><p><strong>To share a resource between two devices</strong></p><ol> <li>Create the resource as shared and specify that it uses {{NT}} handles, by setting the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag.</li> <li>Obtain the {{REFIID}}, or {{GUID}}, of the interface to the resource by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D11Texture2D}}</strong>) retrieves the {{GUID}} of the interface to a 2D texture.</li> <li>Query the resource for the <strong>{{IDXGIResource1}}</strong> interface.</li> <li>Call the <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method to obtain the unique handle to the resource. In this <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> call, you must pass a name for the resource if you want to subsequently call <strong>OpenSharedResourceByName</strong> to access the resource by name. </li> </ol> + <p>This method returns one of the Direct3D 11 return codes. This method also returns {{E_ACCESSDENIED}} if the permissions to access the resource aren't valid.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>OpenSharedResourceByName</strong> fails with {{E_NOTIMPL}} because {{NTHANDLES}} are used. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface enables an application to describe conceptual sections and markers within the application's code flow. An appropriately enabled tool, such as Microsoft Visual Studio Ultimate?2012, can display these sections and markers visually along the tool's Microsoft Direct3D time line, while the tool debugs the application. These visual notes allow users of such a tool to navigate to parts of the time line that are of interest, or to understand what set of Direct3D calls are produced by certain sections of the application's code.</p> + <p>The methods of <strong>{{ID3DUserDefinedAnnotation}}</strong> have no effect when the calling application is not running under a Direct3D-specific profiling tool like Visual Studio Ultimate?2012. +</p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is published by Microsoft Direct3D?11 device contexts. Therefore, <strong>{{ID3DUserDefinedAnnotation}}</strong> has the same threading rules as the <strong>{{ID3D11DeviceContext}}</strong> interface, or any other context interface. For more information about Direct3D threading, see MultiThreading. +To retrieve the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface for the context, call the <strong>QueryInterface</strong> method for the context (for example, <strong>{{ID3D11DeviceContext::QueryInterface}}</strong>). In this call, you must pass the identifier of <strong>{{ID3DUserDefinedAnnotation}}</strong>. </p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is the Microsoft Direct3D?10 and later equivalent of the Direct3D 9 {{PIX}} functions ({{D3DPERF_}}* functions).</p><strong>Note</strong>??Setting the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag in your app replaces calling {{D3DPerf_SetOptions}}(1). But, to prevent Direct3D debugging tools from hooking your app, your app can also call <strong>{{ID3DUserDefinedAnnotation::GetStatus}}</strong> to determine whether it is running under a Direct3D debugging tool and then exit accordingly.?<p>You must call the <strong>BeginEvent</strong> and <strong>EndEvent</strong> methods in pairs; pairs of calls to these methods can nest within pairs of calls to these methods at a higher level in the application's call stack. In other words, a "Draw World" section can entirely contain another section named "Draw Trees," which can in turn entirely contain a section called "Draw Oaks." You can only associate an <strong>EndEvent</strong> method with the most recent <strong>BeginEvent</strong> method, that is, pairs cannot overlap. You cannot call an <strong>EndEvent</strong> for any <strong>BeginEvent</strong> that preceded the most recent <strong>BeginEvent</strong>. In fact, the runtime interprets the first <strong>EndEvent</strong> as ending the second <strong>BeginEvent</strong>.</p> + + + + <p>Marks the beginning of a section of event code.</p> + <p>You call the <strong>EndEvent</strong> method to mark the end of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>BeginEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to <strong>BeginEvent</strong> that have not yet been finalized by calls to the <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> method.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Marks the end of a section of event code.</p> + <p>You call the <strong>BeginEvent</strong> method to mark the beginning of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>EndEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> method that have not yet been finalized by calls to <strong>EndEvent</strong>.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + + <p>Marks a single point of execution in code.</p> + <p>A user can visualize the marker when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>SetMarker</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>This method returns no values.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the marker. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Determines whether the calling application is running under a Microsoft Direct3D profiling tool.</p> + <p>You can call <strong>GetStatus</strong> to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface. For example, the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> and <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.</p> + <p>The return value is nonzero if the calling application is running under a Direct3D profiling tool such as Visual Studio Ultimate?2012, and zero otherwise.</p> + + + + <p>Identifies how to perform a tile-mapping operation.</p> + + + <dd> <p>Indicates that no overwriting of tiles occurs in the tile-mapping operation.</p> </dd> + + + + + <p>Specifies a range of tile mappings to use with <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong>.</p> + + + + <p>Identifies how to check multisample quality levels.</p> + + + <dd> <p>Indicates to check the multisample quality levels of a tiled resource.</p> </dd> + + + + + <p>Identifies how to copy a tile.</p> + + + <dd> <p>Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the +specified buffer location, reading tiles sequentially, +to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), +to the specified buffer location, deswizzling to linear memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. +</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + + + <dd> <p>The x position of a tiled resource. Used for buffer and 1D, 2D, and 3D textures.</p> </dd> + + + <dd> <p>The y position of a tiled resource. Used for 2D and 3D textures.</p> </dd> + + + <dd> <p>The z position of a tiled resource. Used for 3D textures.</p> </dd> + + + <dd> <p>A subresource index value into mipmaps and arrays. Used for 1D, 2D, and 3D textures. </p> <p>For mipmaps that use nonstandard tiling, or are packed, or both use nonstandard tiling and are packed, any subresource value that indicates any of the packed mipmaps all refer to the same tile.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p>Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once.</p> <p>Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>bUseBox</strong>, you use a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p>When the region includes mipmaps that are packed with nonstandard tiling, <strong>bUseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0.</p> </dd> + + + <dd> <p>The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. </p> </dd> + + + <dd> <p>The height of the tiled region, in tiles. Used for 2D and 3D textures. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p>Each packed mipmap is individually reported as 0 for <strong>WidthInTiles</strong>, <strong>HeightInTiles</strong> and <strong>DepthInTiles</strong>. +</p><p>The total number of tiles in subresources is <strong>WidthInTiles</strong>*<strong>HeightInTiles</strong>*<strong>DepthInTiles</strong>. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> <p> <strong>GetResourceTiling</strong> sets <strong>StartTileIndexInOverallResource</strong> to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff) to indicate that the whole +<strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless, and the info to which the <em>pPackedMipDesc</em> parameter of <strong>GetResourceTiling</strong> points applies. For packed tiles, the description of the packed mipmaps comes from a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure instead. +</p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p>Texels are equivalent to pixels. For untyped buffer resources, a texel is just a byte. For multisample antialiasing ({{MSAA}}) surfaces, the numbers are still in terms of pixels/texels. +The values here are independent of the surface dimensions. Even if the surface is smaller than what would fit in a tile, the full tile dimensions are reported here. +</p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p>Describes the tile structure of a tiled resource with mipmaps. </p> + + + <dd> <p>Number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p>Number of packed mipmaps in the tiled resource. </p> <p>This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no +such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same +packing. +</p> <p>On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions +are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one +dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser +mipmaps for a given array slice are considered packed as well. +</p> </dd> + + + <dd> <p>Number of tiles for the packed mipmaps in the tiled resource. </p> <p>If there is no packing, this value is meaningless and is set to 0. +Otherwise, it is set to the number of tiles +that are needed to represent the set of packed mipmaps. +The pixel layout within the packed mipmaps is hardware specific. +If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. +For arrays, this value is only the count of packed mipmaps within +the subresources for each array slice.</p> </dd> + + + <dd> <p>Offset of the first packed tile for the resource +in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this +value is meaningless and is 0. Otherwise, it is the +offset of the first packed tile for the resource in the overall +range of tiles for the resource. A value of 0 for +<strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. +For array surfaces, this is the offset for the tiles that contain the packed +mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset +past the beginning of the tiles for each array slice. </p> <strong>Note</strong>??The +number of overall tiles, packed or not, for a given array slice is +simply the total number of tiles for the resource divided by the +resource's array size, so it is easy to locate the range of tiles for +any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies +which of those are packed. ? </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext2}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext1}}</strong>.</p> + + + + <p>Updates mappings of tile locations in tiled resources to memory locations in a tile pool.</p> + <p>In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of tile-pool tiles. </p><p>You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update:</p><ul> <li><strong>Tiled resource whose mappings are updated.</strong> This is a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Mappings start off all {{NULL}} when a resource is initially created.</li> <li><strong>Set of tile regions on the tiled resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <em>NumTiledResourceRegions</em> specifies how many regions there are, <em>pTiledResourceRegionStartCoordinates</em> and <em>pTiledResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumTiledResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pTiledResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pTiledResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire tiled resource, including all mipmaps, array slices, or both. <p>If <em>pTiledResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pTiledResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pTiledResourceRegionStartCoordinates</em> without having to send an array of <em>pTiledResourceRegionSizes</em> all set to 1.</p> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Tile pool that provides memory where tile mappings can go.</strong> A tiled resource can point to a single tile pool at a time. If a new tile pool is specified (for the first time or different from the last time a tile pool was specified), all existing tile mappings for the tiled resource are cleared and the new set of mappings in the current <strong>UpdateTileMappings</strong> call are applied for the new tile pool. If no tile pool is specified ({{NULL}}) or the same tile pool as a previous <strong>UpdateTileMappings</strong> call is provided, the <strong>UpdateTileMappings</strong> call just adds the new mappings to existing ones (overwriting on overlap). If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a tile pool because it is irrelevant. But if you specify a tile pool anyway, it takes the same behavior as previously described when providing a tile pool. </li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a tile pool (default), a count of tiles in the tiled resource to map to a single tile in a tile pool (sharing the tile), a count of tile mappings in the tiled resource to skip and leave as they are, or a count of tiles in the tile pool to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described tiled resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each tiled resource tile specified has a mapping specified.</p> <p><em>pRangeFlags</em>, <em>pTilePoolStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the tile pool; otherwise, for each range i, pRangeFlags[i] identifies how the mappings in that range of tiles work:</p> <ul> <li>If pRangeFlags[i] is 0, that range defines sequential tiles in the tile pool, with the number of tiles being pRangeTileCounts[i] and the starting location pTilePoolStartOffsets[i]. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_REUSE_SINGLE_TILE}}</strong>, pTilePoolStartOffsets[i] identifies the single tile in the tile pool to map to, and pRangeTileCounts[i] specifies how many tiles from the tile regions to map to that tile pool location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_NULL}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. pTilePoolStartOffsets[i] is ignored for {{NULL}} mappings. </li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_SKIP}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. pTilePoolStartOffsets[i] is ignored for {{SKIP}} mappings.</li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> means the caller promises that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. This allows the device to avoid having to flush previously submitted work in order to do the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources still being referenced by outstanding commands, undefined rendering behavior results, which includes the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to tile mapping data structure itself, which in hardware is a page table. The absence of this flag requires that tile mapping updates specified by this <strong>UpdateTileMappings</strong> call must be completed before any subsequent Direct3D command can proceed.</li> </ul><p>If tile mappings have changed on a tiled resource that the app will render via <strong>RenderTargetView</strong> or <strong>DepthStencilView</strong>, the app must clear, by using the fixed function <strong>Clear</strong> {{APIs}}, the tiles that have changed within the area being rendered (mapped or not). If an app doesn't clear in these situations, the app receives undefined values when it reads from the tiled resource. +</p><strong>Note</strong>??In Direct3D 11.2, hardware can now support <strong>ClearView</strong> on depth-only formats. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.?<p>If an app needs to preserve existing memory contents of areas in a tiled resource where mappings have changed, the app can first save the contents where tile mappings have changed, by copying them to a temporary surface, for example using <strong>CopyTiles</strong>, issuing the required <strong>Clear</strong>, and then copying the contents back. +</p><p>Suppose a tile is mapped into multiple tiled resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the tiled resources. Then, if the same tile is to be rendered via any other tiled resource, the tile must be cleared first as previously described. +</p><p>For more info about tiled resources, see Tiled resources.</p><p>Here are some examples of common <strong>UpdateTileMappings</strong> cases:</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags result in the call being dropped.<p>The debug layer will emit an error.</p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.<p>If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Apps can avoid this situation by only doing update calls that change existing mappings from tiled resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).</p> </li> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. </li> </ul> + + + <dd> <p>A reference to the tiled resource.</p> </dd> + + + <dd> <p>The number of tiled resource regions.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p>A reference to the tile pool.</p> </dd> + + + <dd> <p>The number of tile-pool ranges.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_RANGE_FLAG}}</strong> values that describe each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p>An array of offsets into the tile pool. These are 0-based tile offsets, counting in tiles (not bytes).</p> </dd> + + + <dd> <p>An array of tiles. </p> <p> An array of values that specify the number of tiles in each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source tiled resource to a destination tiled resource.</p> + <p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across tiled resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temp location and then from there written to the destination.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags or passing in non Tiled Resources result in the call being dropped. <p> The dest and the source regions must each entirely fit in their resource or behavior is undefined (debug layer will emit an error). </p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory. <p> If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Applications can avoid this situation by only doing update calls that change existing mappings from Tiled Resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping). </p> </li> </ul> + + + <dd> <p>A reference to the destination tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination tiled resource. </p> </dd> + + + <dd> <p>A reference to the source tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong>, which indicates that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. The device can then avoid having to flush previously submitted work to perform the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources that are still being referenced by outstanding commands, undefined rendering behavior results, including the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to the tile mapping data structure itself (which in hardware is a page table). The absence of the <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> value requires that tile mapping updates that <strong>CopyTileMappings</strong> specifies must be completed before any subsequent Direct3D command can proceed. </p> </dd> + + + + + <p>Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on <strong>Tier_1</strong> tiled resources, where reading and writing unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain. </p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> or <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance. </p><p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Updates tiles by copying from app memory to the tiled resource. </p> + <p><strong>UpdateTiles</strong> drops write operations to unmapped areas (except on <strong>Tier_1</strong> tiled resources, where writing to unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p>The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain.</p><p>The memory layout of the data on the source side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> or <strong>UpdateTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource to update.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region.</p> </dd> + + + <dd> <p>A reference to memory that contains the source tile data that <strong>UpdateTiles</strong> uses to update the tiled resource.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_COPY_NO_OVERWRITE}}</strong>. The other values aren't meaningful here, though +by definition the <strong>{{D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE}}</strong> value is basically what <strong>UpdateTiles</strong> does, but sources from app memory. +</p> </dd> + + + + + <p>Resizes a tile pool.</p> + <p><strong>ResizeTilePool</strong> increases or decreases the size of the tile pool depending on whether the app needs more or less working set for the tiled resources that are mapped into it. An app can allocate additional tile pools for new tiled resources, but if any single tiled resource needs more space than initially available in its tile pool, the app can increase the size of the resource's tile pool. A tiled resource can't have mappings into multiple tile pools simultaneously. </p><p>When you increase the size of a tile pool, additional tiles are added to the end of the tile pool via one or more new allocations by the driver; your app can't detect the breakdown into the new allocations. Existing memory in the tile pool is left untouched, and existing tiled resource mappings into that memory remain intact.</p><p>When you decrease the size of a tile pool, tiles are removed from the end (this is allowed even below the initial allocation size, down to 0). This means that new mappings can't be made past the new size. But, existing mappings past the end of the new size remain intact and useable. The memory is kept active as long as mappings to any part of the allocations that are being used for the tile pool memory remains. If after decreasing, some memory has been kept active because tile mappings are pointing to it and the tile pool is increased again (by any amount), the existing memory is reused first before any additional allocations occur to service the size of the increase. </p><p>To be able to save memory, an app has to not only decrease a tile pool but also remove and remap existing mappings past the end of the new smaller tile pool size.</p><p>The act of decreasing (and removing mappings) doesn't necessarily produce immediate memory savings. Freeing of memory depends on how granular the driver's underlying allocations for the tile pool are. When a decrease in the size of a tile pool happens to be enough to make a driver allocation unused, the driver can free the allocation. If a tile pool was increased and if you then decrease to previous sizes (and remove and remap tile mappings correspondingly), you will most likely yield memory savings. But, this scenario isn't guaranteed in the case that the sizes don't exactly align with the underlying allocation sizes chosen by the driver. </p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns <strong>{{E_INVALIDARG}}</strong> if the new tile pool size isn't a multiple of 64 {{KB}} or 0.</li> <li>Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.</li> <li>Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.</li> </ul><p>For <strong>{{E_INVALIDARG}}</strong> or <strong>{{E_OUTOFMEMORY}}</strong>, the existing tile pool remains unchanged, which includes existing mappings. </p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong> for the tile pool to resize.</p> </dd> + + + <dd> <p>The new size in bytes of the tile pool. The size must be a multiple of 64 {{KB}} or 0.</p> </dd> + + + + + <p>Specifies a data access ordering constraint between multiple tiled resources. For more info about this constraint, see Remarks.</p> + <p>Apps can use tiled resources to reuse tiles in different resources. But, a device and driver might not be able to determine whether some memory in a tile pool that was just rendered to is now being used for reading. +</p><p>For example, an app can render to some tiles in a tile pool with one tiled resource but then read from the same tiles by using a different tiled resource. These tiled-resource operations are different from using one resource and then just switching from writing with <strong>{{ID3D11RenderTargetView}}</strong> to reading with <strong>{{ID3D11ShaderResourceView}}</strong>. The runtime already tracks and handles these one resource operations using <strong>{{ID3D11RenderTargetView}}</strong> and <strong>{{ID3D11ShaderResourceView}}</strong>. +</p><p>When an app transitions from accessing (reading or writing) some location in a tile pool with one resource to accessing the same memory (read or write) via another tiled resource (with mappings to the same memory), the app must call <strong>TiledResourceBarrier</strong> after the first use of the resource and before the second. The parameters are the <em>pTiledResourceOrViewAccessBeforeBarrier</em> for accesses before the barrier (via rendering, copying), and the <em>pTiledResourceOrViewAccessAfterBarrier</em> for accesses after the barrier by using the same tile pool memory. If the resources are identical, the app doesn't need to call <strong>TiledResourceBarrier</strong> because this kind of hazard is already tracked and handled. +</p><p>The barrier call informs the driver that operations issued to the resource before the call must complete before any accesses that occur after the call via a different tiled resource that shares the same memory. +</p><p>Either or both of the parameters (before or after the barrier) can be <strong>{{NULL}}</strong>. <strong>{{NULL}}</strong> before the barrier means all tiled resource accesses before the barrier must complete before the resource specified after the barrier can be referenced by the graphics processing unit ({{GPU}}). <strong>{{NULL}}</strong> after the barrier means that any tiled resources accessed after the barrier can only be executed by the {{GPU}} after accesses to the tiled resources before the barrier are finished. Both <strong>{{NULL}}</strong> means all previous tiled resource accesses are complete before any subsequent tiled resource access can proceed. +</p><p>An app can pass a view reference, a resource, or <strong>{{NULL}}</strong> for each parameter. Views are allowed not only for convenience but also to allow the app to scope the barrier effect to a relevant portion of a resource. +</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must complete before the access operations on the object that <em>pTiledResourceOrViewAccessAfterBarrier</em> specifies.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must begin after the access operations on the object that <em>pTiledResourceOrViewAccessBeforeBarrier</em> specifies.</p> </dd> + + + + + <p> Allows apps to determine when either a capture or profiling request is enabled.</p> + <p>Returns <strong>{{TRUE}}</strong> if the capture tool is present and capturing or the app is being profiled such that <strong>SetMarkerInt</strong> or <strong>BeginEventInt</strong> will be logged to <strong>{{ETW}}</strong>. Otherwise, it returns <strong>{{FALSE}}</strong>. Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so. </p><p>If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.</p> + <p>Returns <strong>{{TRUE}}</strong> if capture or profiling is enabled and <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Allows applications to annotate graphics commands.</p> + <p><strong>SetMarkerInt</strong> allows applications to annotate graphics commands, in order to provide more context to what the {{GPU}} is executing. When {{ETW}} logging or a support tool is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the beginning of a range of graphics commands.</p> + <p><strong>BeginEventInt</strong> allows applications to annotate the beginning of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When <strong>{{ETW}}</strong> logging (or a supported tool) is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the end of a range of graphics commands.</p> + <p><strong>EndEvent</strong> allows applications to annotate the end of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When the appropriate <strong>{{ETW}}</strong> logging is not enabled, this method does nothing. When {{ETW}} logging is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines.</p> + <p>This method does not return a value.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device2}}</strong> adds new methods to those in <strong>{{ID3D11Device1}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists. </p> + <p>The <strong>GetImmediateContext2</strong> method returns an <strong>{{ID3D11DeviceContext2}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext2</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device, <strong>CreateDeferredContext2</strong> fails with <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>, and you can't create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext2</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext2</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p>Gets info about how a tiled resource is broken into tiles.</p> + <p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the tiled resource to get info about.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_TILE_SHAPE}}</strong> to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. </p> <p> If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> to zeros, except the <strong>StartTileIndexInOverallResource</strong> member, which <strong>GetResourceTiling</strong> sets to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff). The <strong>{{D3D11_PACKED_TILE}}</strong> constant indicates that the whole <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When you multisample a texture, the number of quality levels available for an adapter is dependent on the texture format that you use and the number of samples that you request. The maximum number of quality levels is defined by <strong>{{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}}</strong> in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format during multisampling. </p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. Currently, only <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE}}</strong> is supported. </p> </dd> + + + <dd> <p>A reference to a variable the receives the number of quality levels supported by the adapter. See Remarks.</p> </dd> + + + + + <p>Specifies the context in which a query occurs.</p> + <p> This enum is used by the following: </p><ul> <li> <strong>{{D3D11_QUERY_DESC1}}</strong> structure </li> <li> A {{CD3D11_QUERY_DESC1}} constructor.</li> <li> <strong>{{ID3D11DeviceContext3::Flush1}}</strong> method </li> </ul> + + + <dd> <p>The query can occur in all contexts.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D command queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D compute queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D copy queue.</p> </dd> + + + <dd> <p>The query occurs in the context of video.</p> </dd> + + + + + <p>Specifies texture layout options.</p> + <p>This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong> to ensure that each option is supported.</p><p>The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p>To demonstrate, consider the 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant.</p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000 +</code><p>To compute the swizzled address, the following code could be used (where the _pdep_u32 instruction is supported):</p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask); +</code> + + + <dd> <p>The texture layout is undefined, and is selected by the driver.</p> </dd> + + + <dd> <p>Data for the texture is stored in row major (sometimes called pitch-linear) order.</p> </dd> + + + <dd> <p>A default texture uses the standardized swizzle pattern.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting TextureLayout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}. </p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may only be used to create non-multisampled, textures with a single subresource (Planar {{YUV}} textures are supported). These textures may only be used as a source and destination of copy operations, and BindFlags must be zero. +</p> <p>{{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may only be used to create non-multisampled, non-depth-stencil textures. </p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting Layout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}.</p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may not be used with 3D textures. {{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may not be used with 3D textures that have mipmaps.</p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>A <strong>{{D3D11_FILL_MODE}}</strong>-typed value that determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_CULL_MODE}}</strong>-typed value that indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + <dd> <p>A <strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and (<strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1 ). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and ( <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView1::GetDesc1}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_SRV}}</strong> structure that views the resource as a buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_SRV1}}</strong> structure that views the resource as a 2D-texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_SRV1}}</strong> structure that views the resource as a 2D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV}}</strong> structure that views the resource as a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render-target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong> to create a render target.</p><p>A render-target-view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_RTV_DIMENSION}}</strong>-typed value that specifies the resource type and how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_RTV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_RTV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_UAV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_UAV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>A <strong>{{D3D11_QUERY}}</strong>-typed value that specifies the type of query.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies query behavior. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_CONTEXT_TYPE}}</strong>-typed value that specifies the context for the query.</p> </dd> + + + + + <p>A 2D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE2D_DESC1}}</strong> structure that receives the description of the 2D texture.</p> </dd> + + + + + <p>A 3D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE3D_DESC1}}</strong> structure that receives the description of the 3D texture.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count and conservative rasterization mode.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_RASTERIZER_DESC2}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count and conservative rasterization mode. </p> </dd> + + + + + <p>A shader-resource-view interface represents the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Gets the shader-resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that receives the description of the shader-resource view.</p> </dd> + + + + + <p>A render-target-view interface represents the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A render target is a resource that can be written by the output-merger stage at the end of a render pass. Each render target can also have a corresponding depth-stencil view.</p> + + + + <p>Gets the properties of a render-target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> structure that receives the description of the render-target view.</p> </dd> + + + + + <p>An unordered-access-view interface represents the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Gets a description of the resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC1}}</strong> structure that receives the description of the unordered-access resource.</p> </dd> + + + + + <p>Represents a query object for querying information from the graphics processing unit ({{GPU}}).</p> + <p>A query can be created with <strong>{{ID3D11Device3::CreateQuery1}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Gets a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that receives a description of the query.</p> </dd> + + + + + <p> The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext3}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext2}}</strong>. </p> + + + + <p> Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}), with a specified context type and an optional event handle to create an event query. </p> + <p><strong>Flush1</strong> has parameters. For more information, see <strong>{{ID3D11DeviceContext::Flush}}</strong>, which doesn't have parameters. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D11_CONTEXT_TYPE}}</strong> that specifies the context in which a query occurs, such as a 3D command queue, 3D compute queue, 3D copy queue, video, or image. </p> </dd> + + + <dd> <p> An optional event handle. When specified, this method creates an event query. </p> <p><strong>Flush1</strong> operates asynchronously, therefore it can return either before or after the {{GPU}} finishes executing the queued graphics commands, which will eventually complete. To create an event query, you can call <strong>{{ID3D11Device::CreateQuery}}</strong> with the value <strong>{{D3D11_QUERY_EVENT}}</strong> value. To determine when the {{GPU}} is finished processing the graphics commands, you can then use that event query in a call to <strong>{{ID3D11DeviceContext::GetData}}</strong>. </p> </dd> + + + + + <p> Sets the hardware protection state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies whether to enable hardware protection. </p> </dd> + + + + + <p> Gets whether hardware protection is enabled. </p> + <p> This method does not return a value. </p> + + + <dd> <p> After this method returns, points to a {{BOOL}} that indicates whether hardware protection is enabled. </p> </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + + + + + + + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11DeviceContext4}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11DeviceContext4}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + + + + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device3}}</strong> adds new methods to those in <strong>{{ID3D11Device2}}</strong>.</p> + + + + <p>Creates a 2D texture.</p> + <p><strong>CreateTexture2D1</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of subresources is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a 3D texture.</p> + <p><strong>CreateTexture3D1</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the shader-resource view. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}}</strong> flag.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that describes a shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11ShaderResourceView1}}</strong> interface for the created shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Creates a view for accessing an unordered access resource. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the unordered-access view. See Direct3D 11 Return Codes for other possible return values. </p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11RenderTargetView1}}</strong> interface for the created render-target view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p>Creates a query object for querying information from the graphics processing unit ({{GPU}}). </p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that represents a query description.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11Query1}}</strong> interface for the created query object. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Gets an immediate context, which can play back command lists. </p> + <p> The <strong>GetImmediateContext3</strong> method outputs an <strong>{{ID3D11DeviceContext3}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene. </p><p> The <strong>GetImmediateContext3</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext3</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext3</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p> Copies data into a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p> Copies data from a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [Bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When reading from sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offseting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p>Describes Direct3D 11.4 feature options in the current graphics driver.</p> + <p>Use this structure with the {{D3D11_FEATURE_D3D11_OPTIONS4}} member of <strong>{{D3D11_FEATURE}}</strong>. </p><p>Refer to the section on {{NV12}} in Direct3D 11.4 Features.</p> + + + <dd> <p>Specifies a {{BOOL}} that determines if {{NV12}} textures can be shared across processes and {{D3D}} devices.</p> </dd> + + + + + <p> The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device4}}</strong> adds new methods to those in <strong>{{ID3D11Device3}}</strong>, such as <strong>RegisterDeviceRemovedEvent</strong> and <strong>UnregisterDeviceRemoved</strong>. </p> + + + + <p> Registers the "device removed" event and indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism. </p> + <p>Indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism, rather than as an {{HRESULT}} from <strong>Present</strong>. The reason for device removal can be retrieved using <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> after being notified of the occurrence.</p><p> Applications register and un-register a Win32 event handle with a particular device. That event handle will be signaled when the device becomes removed. A poll into the device's <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> method indicates that the device is removed. </p><p> <strong>{{ISignalableNotifier}}</strong> or <strong>SetThreadpoolWait</strong> can be used by {{UWP}} apps. </p><p> When the graphics device is lost, the app or title will receive the graphics event, so that the app or title knows that its graphics device is no longer valid and it is safe for the app or title to re-create its DirectX devices. In response to this event, the app or title needs to re-create its rendering device and pass it into a SetRenderingDevice call on the composition graphics device objects. </p><p> After setting this new rendering device, the app or title needs to redraw content of all the pre-existing surfaces after the composition graphics device's <strong>OnRenderingDeviceReplaced</strong> event is fired. </p><p> This method supports Composition for device loss. </p><p> The event is not signaled when it is most ideal to re-create. So, instead, we recommend iterating through the adapter ordinals and creating the first ordinal that will succeed. </p><p> The application can register an event with the device. The application will be signaled when the device becomes removed. </p><p> If the device is already removed, calls to <strong>RegisterDeviceRemovedEvent</strong> will signal the event immediately. No device-removed error code will be returned from <strong>RegisterDeviceRemovedEvent</strong>. </p><p> Each "device removed" event is never signaled, or is signaled only once. These events are not signaled during device destruction. These events are unregistered during destruction. </p><p> The semantics of <strong>RegisterDeviceRemovedEvent</strong> are similar to <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong>. </p> + <p> See Direct3D 11 Return Codes. </p> + + + <dd> <p> The handle to the "device removed" event. </p> </dd> + + + <dd> <p> A reference to information about the "device removed" event, which can be used in <strong>UnregisterDeviceRemoved</strong> to unregister the event. </p> </dd> + + + + + <p> Unregisters the "device removed" event. </p> + <p> See <strong>RegisterDeviceRemovedEvent</strong>. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Information about the "device removed" event, retrieved during a successful <strong>RegisterDeviceRemovedEvent</strong> call. </p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11Device5}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11Device5}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device5}}</strong> adds new methods to those in <strong>{{ID3D11Device4}}</strong>.</p><strong>Note</strong>??This interface, introduced in the Windows 10 Creators Update, is the latest version of the <strong>{{ID3D11Device}}</strong> interface. Applications targetting Windows 10 Creators Update should use this interface instead of earlier versions.? + + + + <p>Provides threading protection for critical sections of a multi-threaded application.</p> + <p>This interface is obtained by querying it from an immediate device context created with the <strong>{{ID3D11DeviceContext}}</strong> (or later versions of this) interface using {{IUnknown::QueryInterface}}.</p><p>Unlike {{D3D10}}, there is no multithreaded layer in {{D3D11}}. By default, multithread protection is turned off. Use <strong>SetMultithreadProtected</strong> to turn it on, then <strong>Enter</strong> and <strong>Leave</strong> to encapsulate graphics commands that must be executed in a specific order.</p><p>By default in {{D3D11}}, applications can only use one thread with the immediate context at a time. But, applications can use this interface to change that restriction. The interface can turn on threading protection for the immediate context, which will increase the overhead of each immediate context call in order to share one context with multiple threads.</p> + + + + <p>Enter a device's critical section.</p> + <p>If <strong>SetMultithreadProtected</strong> is set to true, then entering a device's critical section prevents other threads from simultaneously calling that device's methods, calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>Leave</strong> is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>Enter</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Turns multithread protection on or off.</p> + <p>True if multithread protection was already turned on prior to calling this method, false otherwise. </p> + + + <dd> <p>Set to true to turn multithread protection on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithread protection is turned on or not.</p> + <p>Returns true if multithread protection is turned on, false otherwise. </p> + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + + + + + + + + + + + + + <p>Specifies the type of a command list.</p> + <p>This enum is used by the following methods:</p><ul> <li> <strong>CreateCommandAllocator</strong> </li> <li> <strong>CreateCommandQueue</strong> </li> <li> <strong>CreateCommandList</strong> </li> </ul> + + + <dd> <p>Specifies a command buffer that the {{GPU}} can execute. A direct command list doesn't inherit any {{GPU}} state. </p> </dd> + + + <dd> <p>Specifies a command buffer that can be executed only directly via a direct command list. A bundle command list inherits all {{GPU}} state (except for the currently set pipeline state object and primitive topology).</p> </dd> + + + <dd> <p>Specifies a command buffer for computing. </p> </dd> + + + <dd> <p>Specifies a command buffer for copying (drawing).</p> </dd> + + + + + <p>Specifies flags to be used when creating a command queue.</p> + <p> This enum is used by the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates a default command queue.</p> </dd> + + + <dd> <p>Indicates that the {{GPU}} timeout should be disabled for this command queue.</p> </dd> + + + + + <p>Defines priority levels for a command queue.</p> + <p> This enumeration is used by the <strong>Priority</strong> member of the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Normal priority.</p> </dd> + + + <dd> <p>High priority.</p> </dd> + + + + + <p>Specifies how the pipeline interprets geometry or hull shader input primitives.</p> + <p>This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader has not been initialized with an input primitive type.</p> </dd> + + + <dd> <p>Interpret the input primitive as a point.</p> </dd> + + + <dd> <p>Interpret the input primitive as a line. </p> </dd> + + + <dd> <p>Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p>Interpret the input primitive as a control point patch.</p> </dd> + + + + + <p>Identifies the type of data contained in an input slot.</p> + <p> Specify one of these values in the member of a <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structure to specify the type of data for the input element of a pipeline state object. </p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Specifies the fill mode to use when rendering triangles.</p> + <p> Fill mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Specifies triangles facing a particular direction are not drawn.</p> + <p> Cull mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Specifies comparison options.</p> + <p> A comparison option determines how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for </p><ul> <li> a depth-stencil buffer (<strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>) </li> <li> depth-stencil operations (<strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong>) </li> <li> sampler state (<strong>{{D3D12_SAMPLER_DESC}}</strong>) </li> </ul> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identifies the portion of a depth-stencil buffer for writing depth data.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> structure.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>Identifies the stencil operations that can be performed during depth-stencil testing.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Specifies blend factors, which modulate values for the pixel shader and render target.</p> + <p>Source and destination blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>Specifies {{RGB}} or alpha blending operations.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>{{D3D12_BLEND}}</strong> value controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>{{D3D12_BLEND_OP}}</strong> value controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identifies which components of each pixel of a render target are writable during blending.</p> + <p> This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. </p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>Specifies logical operations to configure for a render target.</p> + <p>This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + <p>This enum is used by the <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p> When using triangle strip primitive topology, vertex positions are interpreted as vertices of a continuous triangle ?strip?. There is a special index value that represents the desire to have a discontinuity in the strip, the cut index value. This enum lists the supported cut values. +</p> + <p> This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates that there is no cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFF should be used as the cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFFFFFF should be used as the cut value. </p> </dd> + + + + + <p> Flags to control pipeline state. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structures. </p> + + + <dd> <p> Indicates no flags. </p> </dd> + + + <dd> <p> Indicates that the pipeline state should be compiled with additional information to assist debugging. This can only be set on {{WARP}} devices. +</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + + + + <p> Describes minimum precision support options for shaders in the current graphics driver. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> The returned info just indicates that the graphics hardware can perform {{HLSL}} operations at a lower precision than the standard 32-bit float precision, but doesn?t guarantee that the graphics hardware will actually run at a lower precision. </p> + + + <dd> <p>The driver supports only full 32-bit precision for all shader stages.</p> </dd> + + + <dd> <p>The driver supports 10-bit precision.</p> </dd> + + + <dd> <p>The driver supports 16-bit precision.</p> </dd> + + + + + <p> Identifies the tier level at which tiled resources are supported. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> There are three discrete pieces of functionality bundled together for tiled resource functionality: </p><ul> <li> A tile-based texture layout option where nearby texel addresses contain nearby data coordinates. A tile of texels contains nearly the same amount of texels in each cardinal dimension of the resource. This layout is represented in {{D3D12}} by <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </li> <li> Reserve a region of virtual address space for a resource, where each page is initially {{NULL}}-mapped. In {{D3D12}}, this is operation is encapsulated within <strong>{{ID3D12Device::CreateReservedResource}}</strong>, which only works with textures that have the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. </li> <li> The ability to change page mappings and manipulate texture data on tile granularities. In {{D3D12}}, these operations are <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>, <strong>{{ID3D12CommandQueue::CopyTileMappings}}</strong>, and <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong>. </li> </ul><p> Three significant changes over {{D3D11}} are: </p><ul> <li> Tile pools are replaced by heaps. Heaps provide a superset of capabilities than {{D3D11}} tile pools do. </li> <li> Reserved resources may be mapped to pages from multiple heaps at the same time. The {{D3D11}} restriction that all non-{{NULL}} mapped pages must come from the same heap does not exist. </li> <li> Applications should be aware of {{GPU}} virtual address capabilities, which enable litmus tests for particular usage scenarios. See <strong>{{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>. </li> </ul> + + + <dd> <p> Indicates that textures cannot be created with the <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong> layout. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> cannot be used, not even for buffers. </p> </dd> + + + <dd> <p> Indicates that 2D textures can be created with the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. Limitations exist for certain resource formats and properties. For more details, see <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> can be used. </p> <p> {{GPU}} reads or writes to {{NULL}} mappings are undefined. Applications are encouraged to workaround this limitation by repeatedly mapping the same page to everywhere a {{NULL}} mapping would've been used. </p> <p> When the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier_1 functionality is supported, including this additional support: </p> <ul> <li> When the size of a texture mipmap level is at least one standard tile shape for its format, the mipmap level is guaranteed to be nonpacked. For more info, see <strong>{{D3D12_PACKED_MIP_INFO}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see Sample(S,float,int,float,uint). <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> <p> Adapters that support feature level 12_0 all support {{TIER_2}} or greater. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier 2 is supported, with the addition that 3D textures (Volume Tiled Resources) are supported. </p> </dd> + + + + + + + + <p>Identifies the tier level of conservative rasterization.</p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is not supported.</p> </dd> + + + <dd> <p>Tier 1 enforces a maximum 1/2 pixel uncertainty region and does not support post-snap degenerates. This is good for tiled rendering, a texture atlas, light map generation and sub-pixel shadow maps.</p> </dd> + + + <dd> <p> Tier 2 reduces the maximum uncertainty region to 1/256 and requires post-snap degenerates not be culled. This tier is helpful for {{CPU}}-based algorithm acceleration (such as voxelization).</p> </dd> + + + <dd> <p> Tier 3 maintains a maximum 1/256 uncertainty region and adds support for inner input coverage. Inner input coverage adds the new value <code>{{SV_InnerCoverage}}</code> to High Level Shading Language ({{HLSL}}). This is a 32-bit scalar integer that can be specified on input to a pixel shader, and represents the underestimated conservative rasterization information (that is, whether a pixel is guaranteed-to-be-fully covered). This tier is helpful for occlusion culling.</p> </dd> + + + + + <p>Specifies resources that are supported for a provided format.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No resources are supported.</p> </dd> + + + <dd> <p>Buffer resources supported.</p> </dd> + + + <dd> <p>Vertex buffers supported.</p> </dd> + + + <dd> <p>Index buffers supported.</p> </dd> + + + <dd> <p>Streaming output buffers supported.</p> </dd> + + + <dd> <p>1D texture resources supported.</p> </dd> + + + <dd> <p>2D texture resources supported.</p> </dd> + + + <dd> <p>3D texture resources supported.</p> </dd> + + + <dd> <p>Cube texture resources supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Load</strong> function for texture objects is supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Sample</strong> function for texture objects is supported.</p> <strong>Note</strong>??If the device supports the format as a resource (1D, 2D, 3D, or cube map) but doesn't support this option, the resource can still use the Sample method but must use only the point filtering sampler state to perform the sample. ? </dd> + + + <dd> <p>The {{HLSL}} <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> functions for texture objects are supported.</p> <strong>Note</strong>??Windows?8 and later might provide limited support for these functions on Direct3D feature levels 9_1, 9_2, and 9_3. For more info, see Implementing shadow buffers for Direct3D feature level 9. + ? </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Mipmaps are supported.</p> </dd> + + + <dd> <p>Render targets are supported.</p> </dd> + + + <dd> <p>Blend operations supported.</p> </dd> + + + <dd> <p>Depth stencils supported.</p> </dd> + + + <dd> <p>Multisample antialiasing ({{MSAA}}) resolve operations are supported. For more info, see <strong>{{ID3D12GraphicsCommandList::ResolveSubresource}}</strong>. </p> </dd> + + + <dd> <p>Format can be displayed on screen.</p> </dd> + + + <dd> <p>Format can't be cast to another format.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled render target.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled texture and read into a shader with the {{HLSL}} <strong>Load</strong> function.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather function. This value is available in DirectX 10.1 or higher.</p> </dd> + + + <dd> <p>Format supports casting when the resource is a back buffer.</p> </dd> + + + <dd> <p>Format can be used for an unordered access view.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather with comparison function.</p> </dd> + + + <dd> <p>Format can be used with the decoder output.</p> </dd> + + + <dd> <p>Format can be used with the video processor output.</p> </dd> + + + <dd> <p>Format can be used with the video processor input.</p> </dd> + + + <dd> <p>Format can be used with the video encoder.</p> </dd> + + + + + <p> Specifies which unordered resource options are supported for a provided format. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No unordered resource options are supported.</p> </dd> + + + <dd> <p>Format supports atomic add.</p> </dd> + + + <dd> <p>Format supports atomic bitwise operations.</p> </dd> + + + <dd> <p>Format supports atomic compare with store or exchange.</p> </dd> + + + <dd> <p>Format supports atomic exchange.</p> </dd> + + + <dd> <p>Format supports atomic min and max.</p> </dd> + + + <dd> <p>Format supports atomic unsigned min and max.</p> </dd> + + + <dd> <p>Format supports a typed load.</p> </dd> + + + <dd> <p>Format supports a typed store.</p> </dd> + + + <dd> <p>Format supports logic operations in blend state.</p> </dd> + + + <dd> <p> Format supports tiled resources. Refer to Volume Tiled Resources. </p> </dd> + + + <dd> <p> Format supports multi-plane overlays. </p> </dd> + + + + + <p> Specifies options for determining quality levels. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS}}</strong> structure. </p> + + + <dd> <p> No options are supported. </p> </dd> + + + <dd> <p> The number of quality levels can be determined for tiled resources. </p> </dd> + + + + + <p> Specifies the level of sharing across nodes of an adapter, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> + <p> This enum is used by the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p> If an adapter only has 1 node, then cross-node sharing doesn't apply, so the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure is set to {{D3D12_CROSS_NODE_SHARING_NOT_SUPPORTED}}. </p> </dd> + + + <dd> <p> Tier 1 Emulated. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED}} have Tier 1 support. However, drivers stage these copy operations through a driver-internal system memory allocation. This will cause these copy operations to consume time on the destination {{GPU}} as well as the source. </p> </dd> + + + <dd> <p> Tier 1. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1}} only support the following cross-node copy operations: </p> <ul> <li> <strong>{{ID3D12CommandList::CopyBufferRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyTextureRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyResource}}</strong> </li> </ul> <p> Additionally, the cross-node resource must be the destination of the copy operation. </p> </dd> + + + <dd> <p> Tier 2. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_2}} support all operations across nodes, except for the following: </p> <ul> <li> Render target views. </li> <li> Depth stencil views. </li> <li> {{UAV}} atomic operations. Similar to {{CPU}}/{{GPU}} interop, shaders may perform {{UAV}} atomic operations; however, no atomicity across adapters is guaranteed. </li> </ul> <p> Applications can retrieve the node where a resource/heap exists from the <strong>{{D3D12_HEAP_DESC}}</strong> structure. These values are retrievable for opened resources. The runtime performs the appropriate re-mapping in case the 2 devices are using different {{UMD}}-specified node re-mappings. </p> </dd> + + + + + <p> Specifies which resource heap tier the hardware and driver support. </p> + <p> This enum is used by the <strong>ResourceHeapTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> This enum specifies which resource heap tier the hardware and driver support. Lower tiers require more heap attribution than greater tiers. </p><p> Resources can be categorized into the following types: </p><ul> <li>Buffers</li> <li>Non-render target &amp; non-depth stencil textures</li> <li>Render target or depth stencil textures</li> </ul> + + + <dd> <p> Indicates that heaps can only support resources from a single resource category. For the list of resource categories, see Remarks. In tier 1, these resource categories are mutually exclusive and cannot be used with the same heap. The resource category must be declared when creating a heap, using the correct <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constant. Applications cannot create heaps with flags that allow all three categories. </p> </dd> + + + <dd> <p> Indicates that heaps can support resources from all three categories. For the list of resource categories, see Remarks. In tier 2, these resource categories can be mixed within the same heap. Applications may create heaps with flags that allow all three categories; but are not required to do so. Applications may be written to support tier 1 and seamlessly run on tier 2. </p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p>Specifies the version of root signature layout.</p> + <p> This enum is used by the following structures and methods.</p><ul> <li> <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> </li> <li> <strong>{{D3D12_FEATURE_DATA_ROOT_SIGNATURE}}</strong> </li> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>{{D3D12SerializeRootSignature}}</strong> </li> </ul> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version 1.1 of root signature layout. Refer to Root Signature Version 1.1.</p> </dd> + + + + + <p>Specifies a shader model.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_SHADER_MODEL}}</strong> structure.</p> + + + <dd> <p>Indicates shader model 5.1.</p> </dd> + + + <dd> <p>Indicates shader model 6.0.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies the type of heap. When resident, heaps reside in a particular physical memory pool with certain {{CPU}} cache properties. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> </li> <li> <strong>{{D3D12_HEAP_PROPERTIES}}</strong> </li> <li> <strong>GetCustomHeapProperties</strong> </li> </ul><p> The heap types fall into two categories: abstracted heap types, and custom heap types. </p><p> The following are abstracted heap types: </p><ul> <li>{{D3D12_HEAP_TYPE_DEFAULT}}</li> <li>{{D3D12_HEAP_TYPE_UPLOAD}}</li> <li>{{D3D12_HEAP_TYPE_READBACK}}</li> </ul><p> The following is a custom heap type: </p><ul> <li>{{D3D12_HEAP_TYPE_CUSTOM}}</li> </ul><p> The abstracted heap types (_DEFAULT, _UPLOAD, and _READBACK) are useful to simplify writing adapter-neutral applications, because such applications don't need to be aware of the adapter memory architecture. To use an abstracted heap type to simplify writing adapter-neutral applications, the application essentially treats the adapter as if it were a discrete or {{NUMA}} adapter. But, using the heap types enables efficient translation for {{UMA}} adapters. Adapter architecture neutral applications should assume there are two memory pools available, where the pool with the most {{GPU}} bandwidth cannot provide {{CPU}} access. The pool with the least {{GPU}} bandwidth can have {{CPU}} access; but must be either optimized for upload to {{GPU}} or readback from {{GPU}}. </p> + + + <dd> <p> Specifies the default heap. This heap type experiences the most bandwidth for the {{GPU}}, but cannot provide {{CPU}} access. The {{GPU}} can read and write to the memory from this pool, and resource transition barriers may be changed. The majority of heaps and resources are expected to be located here, and are typically populated through resources in upload heaps. </p> </dd> + + + <dd> <p> Specifies a heap used for uploading. This heap type has {{CPU}} access optimized for uploading to the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{CPU}}-write-once, {{GPU}}-read-once data; but {{GPU}}-read-once is stricter than necessary. {{GPU}}-read-once-or-from-cache is an acceptable use-case for the data; but such usages are hard to judge due to differing {{GPU}} cache designs and sizes. If in doubt, stick to the {{GPU}}-read-once definition or profile the difference on many {{GPUs}} between copying the data to a _DEFAULT heap vs. reading the data from an _UPLOAD heap. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ and cannot be changed away from this. The {{CPU}} address for such heaps is commonly not efficient for {{CPU}} reads. </p> <p> The following are typical usages for _UPLOAD heaps: </p> <ul> <li> Initializing resources in a _DEFAULT heap with data from the {{CPU}}. </li> <li> Uploading dynamic data in a constant buffer that is read, repeatedly, by each vertex or pixel. </li> </ul> <p> The following are likely not good usages for _UPLOAD heaps: </p> <ul> <li> Re-initializing the contents of a resource every frame. </li> <li> Uploading constant data which is only used every other Draw call, where each Draw uses a non-trivial amount of other data. </li> </ul> </dd> + + + <dd> <p> Specifies a heap used for reading back. This heap type has {{CPU}} access optimized for reading data back from the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{GPU}}-write-once, {{CPU}}-readable data. The {{CPU}} cache behavior is write-back, which is conducive for multiple sub-cache-line {{CPU}} reads. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_COPY_DEST, and cannot be changed away from this. </p> </dd> + + + <dd> <p> Specifies a custom heap. The application may specify the memory pool and {{CPU}} cache properties directly, which can be useful for {{UMA}} optimizations, multi-engine, multi-adapter, or other special cases. To do so, the application is expected to understand the adapter architecture to make the right choice. For more details, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE, <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>, and <strong>GetCustomHeapProperties</strong>. </p> </dd> + + + + + <p>Specifies the {{CPU}}-page properties for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p> + + + <dd> <p>The {{CPU}}-page property is unknown.</p> </dd> + + + <dd> <p> The {{CPU}} cannot access the heap, therefore no page properties are available. </p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-combined.</p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-back.</p> </dd> + + + + + <p>Specifies the memory pool for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p><p>When the adapter is {{UMA}}, {{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory. When</p><p> the adapter is not {{UMA:}} +{{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL}} refer to the same memory. +{{D3D12_MEMORY_POOL_L1}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory.</p> + + + <dd> <p> The memory pool is unknown. </p> </dd> + + + <dd> <p> The memory pool is {{L0}}. {{L0}} is the physical system memory pool. When the adapter is discrete/{{NUMA}}, this pool has greater bandwidth for the {{CPU}} and less bandwidth for the {{GPU}}. When the adapter is {{UMA}}, this pool is the only one which is valid. </p> </dd> + + + <dd> <p> The memory pool is {{L1}}. {{L1}} is typically known as the physical video memory pool. {{L1}} is only available when the adapter is discrete/{{NUMA}}, and has greater bandwidth for the {{GPU}} and cannot even be accessed by the {{CPU}}. When the adapter is {{UMA}}, this pool is not available. </p> </dd> + + + + + <p> Specifies heap options, such as whether the heap can contain textures, and whether resources are shared across adapters. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{ID3D12Device::CreateHeap}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> </ul><p> The following heap flags must be used with <strong>{{ID3D12Device::CreateHeap}}</strong>, but will be set automatically for implicit heaps created by <strong>{{ID3D12Device::CreateCommittedResource}}</strong>. </p><p> Adapters that only support <strong>heap tier 1</strong> must set two out of the three following flags. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_BUFFERS}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_BUFFER}} (which is a <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> enumeration constant). </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} together with either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. (The latter two items are <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants.) </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} and {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are absent. </td></tr> </table><p>?</p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The heap is shared. Refer to Shared Heaps.</p> </dd> + + + <dd> <p> The heap isn't allowed to contain buffers. </p> </dd> + + + <dd> <p> The heap is allowed to contain swap-chain surfaces. </p> </dd> + + + <dd> <p> The heap is allowed to share resources across adapters. Refer to Shared Heaps. </p> </dd> + + + <dd> <p> The heap is not allowed to store Render Target ({{RT}}) and/or Depth-Stencil ({{DS}}) textures. </p> </dd> + + + <dd> <p>The heap is not allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are present. Refer to <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> and <strong>{{D3D12_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>_</p> </dd> + + + <dd> <p> The heap is allowed to store all types of buffers and/or textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store buffers. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store non-{{RT}}, non-{{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store {{RT}} and/or {{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p> Specifies texture layout options. </p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p><p> This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> to ensure that each option is supported. </p><p> The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p> To demonstrate, consider the 2D 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant: </p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000</code><p> To compute the swizzled address, the following code could be used (where the <strong>_pdep_u32</strong> intrinsic instruction is supported): </p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask);</code> + + + <dd> <p> Indicates that the layout is unknown, and is likely adapter-dependent. During creation, the driver chooses the most efficient layout based on other resource properties, especially resource size and flags. Prefer this choice unless certain functionality is required from another texture layout. </p> <p> Zero-copy texture upload optimizations exist for {{UMA}} architectures; see <strong>{{ID3D12Resource::WriteToSubresource}}</strong>. </p> </dd> + + + <dd> <p> Indicates that data for the texture is stored in row-major order (sometimes called "pitch-linear order"). </p> <p> This texture layout locates consecutive texels of a row contiguously in memory, before the texels of the next row. Similarly, consecutive texels of a particular depth or array slice are contiguous in memory before the texels of the next depth or array slice. Padding may exist between rows and between depth or array slices to align collections of data. A stride is the distance in memory between rows, depth, or array slices; and it includes any padding. </p> <p> This texture layout enables sharing of the texture data between multiple adapters, when other layouts aren't available. </p> <p> Many restrictions apply, because this layout is generally not efficient for extensive usage: </p> <ul> <li> The locality of nearby texels is not rotationally invariant. </li> <li> Only the following texture properties are supported: <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE_2D. </li> <li> A single mip level. </li> <li> A single array slice. </li> <li> 64KB alignment. </li> <li> Non-{{MSAA}}. </li> <li> No <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL. </li> <li> The format cannot be a {{YUV}} format. </li> </ul> </li> <li> The texture must be created on a heap with <strong>{{D3D12_HEAP_FLAG}}</strong>_SHARED_CROSS_ADAPTER. </li> </ul> <p> Buffers are created with <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR, because row-major texture data can be located in them without creating a texture object. This is commonly used for uploading or reading back texture data, especially for discrete/{{NUMA}} adapters. However, <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR can also be used when marshaling texture data between {{GPUs}} or adapters. For examples of usage with <strong>{{ID3D12GraphicsCommandList::CopyTextureRegion}}</strong>, see some of the following topics: </p> <ul> <li> Default Texture Mapping and Standard Swizzle </li> <li> Predication </li> <li> Synchronization and Multi-Engine </li> <li> Uploading Texture Data </li> </ul> </dd> + + + <dd> <p> Indicates that the layout within 64KB tiles and tail mip packing is up to the driver. No standard swizzle pattern. </p> <p> This texture layout is arranged into contiguous 64KB regions, also known as tiles, containing near equilateral amount of consecutive number of texels along each dimension. Tiles are arranged in row-major order. While there is no padding between tiles, there are typically unused texels within the last tile in each dimension. The layout of texels within the tile is undefined. Each subresource immediately follows where the previous subresource end, and the subresource order follows the same sequence as subresource ordinals. However, tail mip packing is adapter-specific. For more details, see tiled resource tier and <strong>{{ID3D12Device::GetResourceTiling}}</strong>. </p> <p> This texture layout enables partially resident or sparse texture scenarios when used together with virtual memory page mapping functionality. This texture layout must be used together with <strong>{{ID3D12Device::CreateReservedResource}}</strong> to enable the usage of <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> <p> Some restrictions apply to textures with this layout: </p> <ul> <li> The adapter must support <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong> 1 or greater. </li> <li> 64KB alignment must be used. </li> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D is not supported, nor are all formats. </li> <li> The tiled resource tier indicates whether textures with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE3D is supported. </li> </ul> </dd> + + + <dd> <p> Indicates that a default texture uses the standardized swizzle pattern. </p> <p> This texture layout is arranged the same way that {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} is, except that the layout of texels within the tile is defined. Tail mip packing is adapter-specific. </p> <p> This texture layout enables optimizations when marshaling data between multiple adapters or between the {{CPU}} and {{GPU}}. The amount of copying can be reduced when multiple components understand the texture memory layout. This layout is generally more efficient for extensive usage than row-major layout, due to the rotationally invariant locality of neighboring texels. This layout can typically only be used with adapters that support standard swizzle, but exceptions exist for cross-adapter shared heaps. </p> <p> The restrictions for this layout are that the following aren't supported: </p> <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D </li> <li> Multi-sample anti-aliasing ({{MSAA}}) </li> <li> <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL </li> <li> Formats within the <strong>{{DXGI_FORMAT}}</strong>_R32G32B32_TYPELESS group </li> </ul> </dd> + + + + + <p> Specifies options for working with resources. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p>Allows a render target view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_RENDER_TARGET}}. Some adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth during common rendering. This characteristic may not be beneficial for textures that are never rendered to, nor is it available for textures compressed with {{BC}} formats. Applications should avoid setting this flag when rendering will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li> Either the texture format must support render target capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support render target capabilities at the current feature level.</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}. +</li> <li>Cannot be used with 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}, nor usage with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}.</li> </ul> </dd> + + + <dd> <p>Allows a depth stencil view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_DEPTH_WRITE}} and/or {{D3D12_RESOURCE_STATE_DEPTH_READ}}. Most adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth and maximize optimizations for early depth-test. Applications should avoid setting this flag when depth operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support depth stencil capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support depth stencil capabilities at the current feature level.</li> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}, 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}, {{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}, {{D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS}}, {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}}, {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}}, nor used with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}} or {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}. +</li> <li>Precludes usage of <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong>. +</li> <li>Precludes {{GPU}} copying of a subregion. <strong>CopyTextureRegion</strong> must copy a whole subresource to or from resources with this flag.</li> </ul> </dd> + + + <dd> <p>Allows an unordered access view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}. Some adapter architectures must resort to less efficient texture layouts in order to provide this functionality. If a texture is rarely used for unordered access, it may be worth having two textures around and copying between them. One texture would have this flag, while the other wouldn't. Applications should avoid setting this flag when unordered access operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support unordered access capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support unordered access capabilities at the current feature level. +</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}, nor when the feature level is less than 11.0. +</li> <li>Cannot be used with {{MSAA}} textures. </li> </ul> </dd> + + + <dd> <p>Disallows a shader resource view to be created for the resource, as well as disables the resource to transition into the state of {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}. Some adapter architectures experience increased bandwidth for depth stencil textures when shader resource views are precluded. If a texture is rarely used for shader resource, it may be worth having two textures around and copying between them. One texture would have this flag and the other wouldn't. Applications should set this flag when depth stencil textures will never be used from shader resource views. +</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. +</li> </ul> </dd> + + + <dd> <p>Allows the resource to be used for cross-adapter data, as well as the same features enabled by {{ALLOW_SIMULTANEOUS_ACCESS}}. Cross adapter resources commonly preclude techniques that reduce effective texture bandwidth during usage, and some adapter architectures may require different caching behavior. Applications should avoid setting this flag when the resource data will never be used with another adapter.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with heaps that have {{D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER}}.</li> <li>Cannot be used with heaps that have {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}.</li> </ul> </dd> + + + <dd> <p>Allows a resource to be simultaneously accessed by multiple different queues, devices or processes (for example, allows a resource to be used with <strong>ResourceBarrier</strong> transitions performed in more than one command list executing at the same time). </p> <p>Simultaneous access allows multiple readers and one writer, as long as the writer doesn't concurrently modify the texels that other readers are accessing. Some adapter architectures cannot leverage techniques to reduce effective texture bandwidth during usage. </p> <p>However, applications should avoid setting this flag when multiple readers are not required during frequent, non-overlapping writes to textures. Use of this flag can compromise resource fences to perform waits, and prevents any compression being used with a resource.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}; but buffers always have the properties represented by this flag. +</li> <li>Cannot be used with {{MSAA}} textures.</li> </ul> </dd> + + + + + <p> Specifies a range of tile mappings. </p> + <p> Use these flags with <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p> The tile range is <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Skip the tile range. </p> </dd> + + + <dd> <p> Reuse a single tile in the tile range. </p> </dd> + + + + + <p> Specifies how to perform a tile-mapping operation. </p> + <p> This enum is used by the following methods:</p><ul> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> </ul> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p>Unsupported, do not use. </p> </dd> + + + + + <p> Specifies how to copy a tile. </p> + <p> This enum is used by the <strong>CopyTiles</strong> method. </p> + + + <dd> <p> No tile-copy flags are specified. </p> </dd> + + + <dd> <p> Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the specified buffer location, reading tiles sequentially, to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), to the specified buffer location, deswizzling to linear memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. </p> </dd> + + + + + <p> Specifies the state of a resource regarding how the resource is being used. </p> + <p> This enum is used by the following methods: </p><ul> <li> <strong>CreateCommittedResource</strong> </li> <li> <strong>CreatePlacedResource</strong> </li> <li> <strong>CreateReservedResource</strong> </li> </ul> + + + <dd> <p>Applications should only transition to this state for accessing a resource across different graphics engine types.</p> <p>Specifically, a resource must be in the {{COMMON}} state before being used on a {{COPY}} queue (when previous used on {{DIRECT}}/{{COMPUTE}}), and before being used on {{DIRECT}}/{{COMPUTE}} (when previously used on {{COPY}}). This restriction does not exist when accessing data between {{DIRECT}} and {{COMPUTE}} queues.</p> <p>The {{COMMON}} state can be used for all usages on a Copy queue using the implicit state transitions. For more information, in Synchronization and Multi-Engine, find "common". </p> <p>Additionally, textures must be in the {{COMMON}} state for {{CPU}} access to be legal, assuming the texture was created in a {{CPU}}-visible heap in the first place.</p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as a vertex buffer or constant buffer. This is a read-only state. </p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as an index buffer. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as a render target. A subresource must be in this state when it is rendered to or when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong>. This is a write-only state. To read from a render target as a shader resource the resource must be in either {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}.</p> </dd> + + + <dd> <p> The resource is used for unordered access. A subresource must be in this state when it is accessed by the 3D pipeline via an unordered access view. A subresource must also be in this state when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewInt}}</strong> or <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong>. This is a read/write state. </p> </dd> + + + <dd> <p>{{DEPTH_WRITE}} is a state which is mutually exclusive with other states. It should be used for <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> when the flags (see <strong>{{D3D12_CLEAR_FLAGS}}</strong>) indicate a given subresource should be cleared (otherwise the subresource state doesn't matter), or when using it in a writable depth stencil view (see <strong>{{D3D12_DSV_FLAGS}}</strong>) when the {{PSO}} has depth write enabled (see <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>). +</p> </dd> + + + <dd> <p>{{DEPTH_READ}} is a state which can be combined with other states. It should be used when the subresource is in a read-only depth stencil view, or when the <em>DepthEnable</em> parameter of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> is false. It can be combined with other read states (for example, {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}), such that the resource can be used for the depth or stencil test, and accessed by a shader within the same draw call. Using it when depth will be written by a draw call or clear command is invalid.</p> </dd> + + + <dd> <p> The resource is used with a shader other than the pixel shader. A subresource must be in this state before being read by any stage (except for the pixel shader stage) via a shader resource view. You can still use the resource in a pixel shader with this flag as long as it also has the flag {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}} set. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with a pixel shader. A subresource must be in this state before being read by the pixel shader via a shader resource view. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with stream output. A subresource must be in this state when it is accessed by the 3D pipeline as a stream-out target. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as an indirect argument. Subresources must be in this state when they are used as the argument buffer passed to the indirect drawing method <strong>{{ID3D12GraphicsCommandList::ExecuteIndirect}}</strong>. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a copy operation. Subresources must be in this state when they are used as the destination of copy operation, or a blt operation. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as the source in a copy operation. Subresources must be in this state when they are used as the source of copy operation, or a blt operation. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a resolve operation. </p> </dd> + + + <dd> <p> The resource is used as the source in a resolve operation. </p> </dd> + + + <dd> <p>This is the required starting state for upload heaps. Applications should generally avoid this state when possible, and instead transition resources to only the actually-used states.</p> </dd> + + + <dd> <p> Synonymous with {{D3D12_RESOURCE_STATE_COMMON}}. </p> </dd> + + + <dd> <p> The resource is used for Predication. </p> </dd> + + + + + <p>Specifies a type of resource barrier (transition in resource use) description.</p> + <p>This enum is used in the <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong> structure. Use these values with the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method.</p> + + + <dd> <p>A transition barrier that indicates a transition of a set of subresources between different usages. The caller must specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p>An aliasing barrier that indicates a transition between usages of 2 different resources that have mappings into the same tile pool. The caller can specify both the before and the after resource. Note that one or both resources can be <strong>{{NULL}}</strong>, which indicates that any tiled resource could cause aliasing.</p> </dd> + + + <dd> <p>An unordered access view ({{UAV}}) barrier that indicates all {{UAV}} accesses (reads or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Flags for setting split resource barriers. </p> + <p>Split barriers allow a single transition to be split into begin and end halves (refer to Synchronization and Multi-Engine).</p><p> This enum is used by the <em>Flags</em> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p> + + + <dd> <p> No flags. </p> </dd> + + + <dd> <p> This starts a barrier transition in a new state, putting a resource in a temporary no-access condition. </p> </dd> + + + <dd> <p> This barrier completes a transition, setting a new state and restoring active access to a resource.</p> </dd> + + + + + <p>Specifies what type of texture copy is to take place.</p> + <p>This enum is used by the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure.</p> + + + <dd> <p>Indicates a subresource, identified by an index, is to be copied.</p> </dd> + + + <dd> <p>Indicates a place footprint, identified by a <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure, is to be copied.</p> </dd> + + + + + <p>Specifies a resolve operation.</p> + <p>This enum is used by the <strong>{{ID3D12GraphicsCommandList1::ResolveSubresourceRegion}}</strong> function.</p> + + + <dd> <p>Resolves compressed source samples to their uncompressed values. When using this operation, the source and destination resources must have the same sample count, unlike the min, max, and average operations that require the destination to have a sample count of 1.</p> </dd> + + + <dd> <p>Resolves the source samples to their minimum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their maximum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their average value. It can be used with any non-integer render target format, including the depth plane. It can't be used with integer render target formats, including the stencil plane.</p> </dd> + + + + + <p> Specifies how memory gets routed by a shader resource view ({{SRV}}). </p> + <p> This enum allows the {{SRV}} to select how memory gets routed to the four return components in a shader after a memory fetch. The options for each shader component [0..3] (corresponding to {{RGBA}}) are: component 0..3 from the {{SRV}} fetch result or force 0 or force 1. </p><p> The default 1:1 mapping can be indicated by specifying {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}}, otherwise an arbitrary mapping can be specified using the macro {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}. See below. </p><p>Note the following defines:</p><code>#define {{D3D12_SHADER_COMPONENT_MAPPING_MASK}} 0x7 +#define {{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}} 3 +#define {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}} (1&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*4)) +#define {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(Src0,Src1,Src2,Src3) ((((Src0)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})| \ (((Src1)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;{{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}})| \ (((Src2)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*2))| \ (((Src3)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*3))| \ {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}})) +#define {{D3D12_DECODE_SHADER_4_COMPONENT_MAPPING}}(ComponentToExtract,Mapping) (({{D3D12_SHADER_COMPONENT_MAPPING}})(Mapping &gt;&gt; ({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*ComponentToExtract) &amp; {{D3D12_SHADER_COMPONENT_MAPPING_MASK}})) +#define {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}} {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(0,1,2,3) +</code> + + + <dd> <p> Indicates return component 0 (red). </p> </dd> + + + <dd> <p> Indicates return component 1 (green). </p> </dd> + + + <dd> <p> Indicates return component 2 (blue). </p> </dd> + + + <dd> <p> Indicates return component 3 (alpha). </p> </dd> + + + <dd> <p> Indicates forcing the resulting value to 0. </p> </dd> + + + <dd> <p> Indicates forcing the resulting value 1. The value of forcing 1 is either 0x1 or 1.0f depending on the format type for that component in the source format. </p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p> This enumeration is used by <strong>{{D3D12_BUFFER_SRV}}</strong>. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies the type of resource that will be viewed as a shader resource.</p> + <p>These values are used by a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + + + <p>Specifies filtering options during texture sampling.</p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure.</p><strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>Microsoft High Level Shader Language ({{HLSL}}) texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><p>Also note the following defines:</p><code>#define {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ( 0x3 ) #define {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ( 7 ) #define {{D3D12_FILTER_TYPE_MASK}} ( 0x3 ) #define {{D3D12_MIN_FILTER_SHIFT}} ( 4 ) #define {{D3D12_MAG_FILTER_SHIFT}} ( 2 ) #define {{D3D12_MIP_FILTER_SHIFT}} ( 0 ) #define {{D3D12_ANISOTROPIC_FILTERING_BIT}} ( 0x40 ) #define {{D3D12_ENCODE_BASIC_FILTER}}( min, mag, mip, reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ ( ( ( min ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIN_FILTER_SHIFT}} ) | \ ( ( ( mag ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MAG_FILTER_SHIFT}} ) | \ ( ( ( mip ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIP_FILTER_SHIFT}} ) | \ ( ( ( reduction ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) &lt;&lt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) ) ) +#define {{D3D12_ENCODE_ANISOTROPIC_FILTER}}( reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ {{D3D12_ANISOTROPIC_FILTERING_BIT}} | \ {{D3D12_ENCODE_BASIC_FILTER}}( {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ reduction ) ) ) +#define {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIN_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MAG_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIP_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_REDUCTION_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_IS_COMPARISON_FILTER}}( {{D3D12Filter}} ) \ ( {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) == {{D3D12_FILTER_REDUCTION_TYPE_COMPARISON}} ) +#define {{D3D12_DECODE_IS_ANISOTROPIC_FILTER}}( {{D3D12Filter}} ) \ ( ( ( {{D3D12Filter}} ) &amp; {{D3D12_ANISOTROPIC_FILTERING_BIT}} ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) ) ) </code><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td> <strong>Sample</strong> </td><td> <strong>SampleCmp</strong> or <strong>SampleCmpLevelZero</strong> </td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following formats: <strong>{{DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R32_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_R24_UNORM_X8_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R16_UNORM}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Specifies the type of magnification or minification sampler filters. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>Point filtering is used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.</p> </dd> + + + <dd> <p>Bilinear interpolation filtering is used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p>Specifies the type of filter reduction. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>The filter type is standard.</p> </dd> + + + <dd> <p>The filter type is comparison.</p> </dd> + + + <dd> <p>The filter type is minimum.</p> </dd> + + + <dd> <p>The filter type is maximum.</p> </dd> + + + + + <p> Identifies a technique for resolving texture coordinates that are outside of the boundaries of a texture. </p> + <p> This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times. </p> </dd> + + + <dd> <p> Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D12_SAMPLER_DESC}}</strong> or {{HLSL}} code. </p> </dd> + + + <dd> <p> Similar to <strong>{{D3D12_TEXTURE_ADDRESS_MODE_MIRROR}}</strong> and <strong>{{D3D12_TEXTURE_ADDRESS_MODE_CLAMP}}</strong>. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. </p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + <p> This enum is used in the <strong>{{D3D12_BUFFER_UAV}}</strong> structure. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> Resource contains raw, unstructured data. Requires the {{UAV}} format to be <strong>{{DXGI_FORMAT_R32_TYPELESS}}</strong>. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies unordered-access view options.</p> + <p> Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure. </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies the type of resource to view as a render target.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Specifies depth-stencil view options.</p> + <p> Specify a combination of the values in this enumeration in the <strong>Flags</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure. The values are combined by using a bitwise {{OR}} operation. </p><p> Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have read/write conflicts between separate views. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p><strong>{{D3D12_DSV_DIMENSION_UNKNOWN}}</strong> is not a valid value for <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multi sampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multi sampling.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies fence options. </p> + <p> This enum is used by the <strong>{{ID3D12Device::CreateFence}}</strong> method. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The fence is shared. </p> </dd> + + + <dd> <p> The fence is shared with another {{GPU}} adapter. </p> </dd> + + + + + <p> Specifies a type of descriptor heap. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure, and the following methods:</p><ul> <li> <strong>CopyDescriptors</strong> </li> <li> <strong>CopyDescriptorsSimple</strong> </li> <li> <strong>GetDescriptorHandleIncrementSize</strong> </li> </ul> + + + <dd> <p> The descriptor heap for the combination of constant-buffer, shader-resource, and unordered-access views. </p> </dd> + + + <dd> <p> The descriptor heap for the sampler. </p> </dd> + + + <dd> <p> The descriptor heap for the render-target view. </p> </dd> + + + <dd> <p> The descriptor heap for the depth-stencil view. </p> </dd> + + + <dd> <p> The number of types of descriptor heaps. </p> </dd> + + + + + <p>Specifies options for a heap.</p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates default usage of a heap.</p> </dd> + + + <dd> <p>The flag {{D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE}} can optionally be set on a descriptor heap to indicate it is be bound on a command list for reference by shaders. Descriptor heaps created <em>without</em> this flag allow applications the option to stage descriptors in {{CPU}} memory before copying them to a shader visible descriptor heap, as a convenience. But it is also fine for applications to directly create descriptors into shader visible descriptor heaps with no requirement to stage anything on the {{CPU}}.</p> <p>This flag only applies to {{CBV}}, {{SRV}}, {{UAV}} and samplers. It does not apply to other descriptor heap types since shaders do not directly reference the other types. </p> </dd> + + + + + <p> Specifies a range so that, for example, if part of a descriptor table has 100 shader-resource views ({{SRVs}}) that range can be declared in one entry rather than 100. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structure. </p> + + + <dd> <p> Specifies a range of {{SRVs}}. </p> </dd> + + + <dd> <p> Specifies a range of unordered-access views ({{UAVs}}). </p> </dd> + + + <dd> <p> Specifies a range of constant-buffer views ({{CBVs}}). </p> </dd> + + + <dd> <p> Specifies a range of samplers. </p> </dd> + + + + + <p>Specifies the shaders that can access the contents of a given root signature slot.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure.</p><p>The compute queue always uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> because it has only one active stage. The 3D queue can choose values, but if it uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong>, all shader stages can access whatever is bound at the root signature slot.</p> + + + <dd> <p>Specifies that all shader stages can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the vertex shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the hull shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the domain shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the geometry shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the pixel shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + + + <p> Specifies the type of root signature slot. </p> + <p> This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure. </p> + + + <dd> <p> The slot is for a descriptor table. </p> </dd> + + + <dd> <p> The slot is for root constants. </p> </dd> + + + <dd> <p> The slot is for a constant-buffer view ({{CBV}}). </p> </dd> + + + <dd> <p> The slot is for a shader-resource view ({{SRV}}). </p> </dd> + + + <dd> <p> The slot is for a unordered-access view ({{UAV}}). </p> </dd> + + + + + <p> Specifies options for root signature layout. </p> + <p> This enum is used in the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p><p>The value in denying access to shader stages is a minor optimization on some hardware. If, for example, the <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> flag has been set to broadcast the root signature to all shader stages, then denying access can overrule this and save the hardware some work. Alternatively if the shader is so simple that no root signature resources are needed, then denying access could be used here too.</p> + + + <dd> <p> Indicates default behavior. </p> </dd> + + + <dd> <p> The app is opting in to using the Input Assembler (requiring an input layout that defines a set of vertex buffer bindings). Omitting this flag can result in one root argument space being saved on some hardware. Omit this flag if the Input Assembler is not required, though the optimization is minor. </p> </dd> + + + <dd> <p> Denies the vertex shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the hull shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the domain shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the geometry shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the pixel shader access to the root signature. </p> </dd> + + + <dd> <p> The root signature allows stream output. This flag can be specified for root signatures authored in {{HLSL}}, similar to how the other flags are specified. <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> will fail if the geometry shader contains stream output but the root signature does not have this flag set. Omit this flag if stream output is not required.</p> </dd> + + + + + <p> Specifies the border color for a static sampler. </p> + <p> This enum is used by the <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates black, with the alpha component as fully transparent. </p> </dd> + + + <dd> <p> Indicates black, with the alpha component as fully opaque. </p> </dd> + + + <dd> <p> Indicates white, with the alpha component as fully opaque. </p> </dd> + + + + + <p>Specifies the volatility of both descriptors and the data they reference in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structure.</p><p>To specify the volatility of just the data referenced by descriptors, refer to <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong>.</p> + + + <dd> <p>Default behavior. Descriptors are static, and default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>If this is the only flag set, then descriptors are volatile and default assumptions are made about data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> <p>If this flag is combined with {{DATA_VOLATILE}}, then both descriptors and data are volaille, which is equivalent to Root Signature Version 1.0.</p> <p>If this flag is combined with {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, then descriptors are volatile. This still doesn?t allow them to change during command list execution so it is valid to combine the additional declaration that data is static while set via root descriptor table during execution ? the underlying descriptors are effectively static for longer than the data is being promised to be static.</p> </dd> + + + <dd> <p>Descriptors are static and the data is volatile.</p> </dd> + + + <dd> <p>Descriptors are static and data is static while set at execute.</p> </dd> + + + <dd> <p>Both descriptors and data are static. This maximizes the potential for driver optimization.</p> </dd> + + + + + <p>Specifies the volatility of the data referenced by descriptors in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure.</p><p>To specify the volatility of both descriptors and data, refer to <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong>. </p> + + + <dd> <p>Default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>Data is volatile. Equivalent to Root Signature Version 1.0.</p> </dd> + + + <dd> <p>Data is static while set at execute.</p> </dd> + + + <dd> <p>Data is static. The best potential for driver optimization.</p> </dd> + + + + + <p>Specifies the type of query heap to create.</p> + <p>This enum is used by the <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure.</p> + + + <dd> <p>This returns a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates that the heap is for high-performance timing data. </p> </dd> + + + <dd> <p>Indicates the heap is to contain pipeline data. Refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Indicates the heap is to contain stream output data. Refer to <strong>{{D3D12_QUERY_DATA_SO_STATISTICS}}</strong>.</p> </dd> + + + + + <p>Specifies the type of query.</p> + <p>This enum is used by <strong>BeginQuery</strong>, <strong>EndQuery</strong> and <strong>ResolveQueryData.</strong> </p> + + + <dd> <p>Indicates the query is for depth/stencil occlusion counts.</p> </dd> + + + <dd> <p>Indicates the query is for a binary depth/stencil occlusion statistics. </p> <p>This new query type acts like {{D3D12_QUERY_TYPE_OCCLUSION}} except that it returns simply a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates the query is for high definition {{GPU}} and {{CPU}} timestamps.</p> </dd> + + + <dd> <p>Indicates the query type is for graphics pipeline statistics, refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Stream 0 output statistics. In Direct3D 12 there is no single stream output ({{SO}}) overflow query for all the output streams. Apps need to issue multiple single-stream queries, and then correlate the results. Stream output is the ability of the {{GPU}} to write vertices to a buffer. The stream output counters monitor progress.</p> </dd> + + + <dd> <p>Stream 1 output statistics.</p> </dd> + + + <dd> <p>Stream 2 output statistics.</p> </dd> + + + <dd> <p>Stream 3 output statistics.</p> </dd> + + + + + <p> Specifies the predication operation to apply. </p> + <p> This enum is used by <strong>SetPredication</strong>. </p><p> Predication is decoupled from queries. Predication can be set based on the value of 64-bits within a buffer. </p> + + + <dd> <p> Enables predication if all 64-bits are zero. </p> </dd> + + + <dd> <p> Enables predication if at least one of the 64-bits are not zero. </p> </dd> + + + + + <p> Specifies the type of the indirect parameter. </p> + <p> This enum is used by the <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates the type is a Draw call.</p> </dd> + + + <dd> <p>Indicates the type is a DrawIndexed call.</p> </dd> + + + <dd> <p>Indicates the type is a Dispatch call.</p> </dd> + + + <dd> <p>Indicates the type is a vertex buffer view.</p> </dd> + + + <dd> <p>Indicates the type is an index buffer view.</p> </dd> + + + <dd> <p>Indicates the type is a constant.</p> </dd> + + + <dd> <p>Indicates the type is a constant buffer view ({{CBV}}).</p> </dd> + + + <dd> <p>Indicates the type is a shader resource view ({{SRV}}).</p> </dd> + + + <dd> <p>Indicates the type is an unordered access view ({{UAV}}).</p> </dd> + + + + + <p>Specifies multiple wait flags for multiple fences.</p> + <p>This enum is used by the <strong>SetEventOnMultipleFenceCompletion</strong> method.</p> + + + <dd> <p>Indicates that none of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that any one of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that all the fences need to be waited on.</p> </dd> + + + + + <p>Specifies a residence priority.</p> + <p>This enum is used by the <strong>SetResidencyPriority</strong> method.</p> + + + <dd> <p>Indicates a minimum priority.</p> </dd> + + + <dd> <p>Indicates a low priority.</p> </dd> + + + <dd> <p>Indicates a normal, medium, priority.</p> </dd> + + + <dd> <p>Indicates a high priority, the default.</p> </dd> + + + <dd> <p>Indicates a maximum priority.</p> </dd> + + + + + <p>Describes a command queue.</p> + <p> This structure is passed into <strong>CreateCommandQueue</strong>. </p><p> This structure is returned by <strong>{{ID3D12CommandQueue::GetDesc}}</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>. </p> </dd> + + + <dd> <p> The priority for the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_PRIORITY}}</strong> enumeration constant to select normal or high priority. </p> </dd> + + + <dd> <p> Specifies any flags from the <strong>{{D3D12_COMMAND_QUEUE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the command queue applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Describes a single element for the input-assembler stage of the graphics pipeline.</p> + <p>This structure is a member of the <strong>{{D3D12_INPUT_LAYOUT_DESC}}</strong> structure. A pipeline state object contains a input-layout structure that defines one element being read from an input slot.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name <strong>matrix</strong>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the format of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. For more info, see Input Slots. Valid values are between 0 and 15. </p> </dd> + + + <dd> <p>Optional. Offset, in bytes, between each element. Use {{D3D12_APPEND_ALIGNED_ELEMENT}} (0xffffffff) for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>A value that identifies the input data class for a single input slot.</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to the {{D3D12_INPUT_PER_VERTEX_DATA}} member of <strong>{{D3D12_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + + + <p>Describes a vertex element in a vertex buffer in an output slot.</p> + <p>Specify an array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures in the <strong>pSODeclaration</strong> member of a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Use, for example, if you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>The component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline. The valid range for <strong>OutputSlot</strong> is 0 to 3.</p> </dd> + + + + + <p>Describes the dimensions of a viewport.</p> + <p>Pass an array of these structures to the <em>pViewports</em> parameter in a call to <strong>{{ID3D12GraphicsCommandList::RSSetViewports}}</strong> to set viewports for the display.</p> + + + <dd> <p>X position of the left hand side of the viewport. </p> </dd> + + + <dd> <p>Y position of the top of the viewport. </p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p>Describes a 3D box.</p> + <p> This structure is used by the methods <strong>WriteToSubresource</strong>, <strong>ReadFromSubresource</strong> and <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box, plus 1. This means that <code>right - left</code> equals the width of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box, plus 1. This means that <code>top - bottom</code> equals the height of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box, plus 1. This means that <code>front - back</code> equals the depth of the box.</p> </dd> + + + + + <p>Describes stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D12_STENCIL_OP}}</strong>-typed value. Each stencil operation can be set differently based on the outcome of the stencil test, which is referred to as <strong>StencilFunc</strong>, in the stencil test portion of depth-stencil testing.</p><p>Members of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> have this structure for their data type. </p> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies the function that compares stencil data against existing stencil data. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a depth-stencil-state structure that controls how depth-stencil testing is performed by the output-merger stage. </p><p>This table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D12_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D12_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D12_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D12_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D12_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p> Specifies whether to enable depth testing. Set this member to <strong>{{TRUE}}</strong> to enable depth testing. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_WRITE_MASK}}</strong>-typed value that identifies a portion of the depth-stencil buffer that can be modified by depth data. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies a function that compares depth data against existing depth data. </p> </dd> + + + <dd> <p> Specifies whether to enable stencil testing. Set this member to <strong>{{TRUE}}</strong> to enable stencil testing. </p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D12_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to enable (or disable) blending. Set to <strong>{{TRUE}}</strong> to enable blending.</p> </dd> + + + <dd> <p>Specifies whether to enable (or disable) a logical operation. Set to <strong>{{TRUE}}</strong> to enable a logical operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D12_COLOR_WRITE_ENABLE}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies a write mask.</p> </dd> + + + + + <p>Describes the blend state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a blend-state structure that controls blending by the output-merger stage. </p><p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this structure to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p><p> Note the helper structure, <strong>{{CD3DX12_BLEND_DESC}}</strong>. </p> + + + <dd> <p> Specifies whether to use alpha-to-coverage as a multisampling technique when setting a pixel to a render target. For more info about using alpha-to-coverage, see Alpha-To-Coverage. </p> </dd> + + + <dd> <p> Specifies whether to enable independent blending in simultaneous render targets. Set to <strong>{{TRUE}}</strong> to enable independent blending. If set to <strong>{{FALSE}}</strong>, only the <strong>RenderTarget</strong>[0] members are used; <strong>RenderTarget</strong>[1..7] are ignored. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures that describe the blend states for render targets; these correspond to the eight render targets that can be bound to the output-merger stage at one time. </p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> contains a rasterizer-state structure. </p><p> Rasterizer state defines the behavior of the rasterizer stage. </p><p> If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>{{D3D12_FILL_MODE_SOLID}}</td></tr> <tr><td><strong>CullMode</strong></td><td>{{D3D12_CULL_MODE_BACK}}</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p> + + + <dd> <p> A <strong>{{D3D12_FILL_MODE}}</strong>-typed value that specifies the fill mode to use when rendering. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CULL_MODE}}</strong>-typed value that specifies that triangles facing the specified direction are not drawn. </p> </dd> + + + <dd> <p> Determines if a triangle is front- or back-facing. If this member is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true. </p> </dd> + + + <dd> <p> Depth value added to a given pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Maximum depth bias of a pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Scalar on a given pixel's slope. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Specifies whether to enable clipping based on distance. </p> <p> The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). </p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p> When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. </p> </dd> + + + <dd> <p> Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off. </p> </dd> + + + + + <p>Describes shader data.</p> + <p> The <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> objects contain <strong>{{D3D12_SHADER_BYTECODE}}</strong> structures that describe various shader types. </p> + + + <dd> <p> A reference to a memory block that contains the shader data. </p> </dd> + + + <dd> <p> The size, in bytes, of the shader data that the <strong>pShaderBytecode</strong> member points to. </p> </dd> + + + + + <p>Describes a streaming output buffer.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p> An array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures. Can't be <strong>{{NULL}}</strong> if <strong>NumEntries</strong> &gt; 0. </p> </dd> + + + <dd> <p> The number of entries in the stream output declaration array that the <strong>pSODeclaration</strong> member points to. </p> </dd> + + + <dd> <p> An array of buffer strides; each stride is the size of an element for that buffer. </p> </dd> + + + <dd> <p> The number of strides (or buffers) that the <strong>pBufferStrides</strong> member points to. </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage. </p> </dd> + + + + + <p>Describes the input-buffer data for the input-assembler stage.</p> + <p> This structure is a member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p> An array of <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structures that describe the data types of the input-assembler stage. </p> </dd> + + + <dd> <p> The number of input-data types in the array of input elements that the <strong>pInputElementDescs</strong> member points to. </p> </dd> + + + + + <p>Stores a pipeline state.</p> + <p> This structure is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure, and the <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure.</p><p>This structure is intended to be filled with the data retrieved from <strong>{{ID3D12PipelineState::GetCachedBlob}}</strong>. This cached {{PSO}} contains data specific to the hardware, driver, and machine that it was retrieved from. Compilation using this data should be faster than compilation without. The rest of the data in the {{PSO}} needs to still be valid, and needs to match the cached {{PSO}}, otherwise {{E_INVALIDARG}} might be returned.</p><p>If the driver has been upgraded to a {{D3D12}} driver after the {{PSO}} was cached, you might see a {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} return code, or if you?re running on a different {{GPU}}, the {{D3D12_ERROR_ADAPTER_NOT_FOUND}} return code.</p> + + + <dd> <p> Specifies reference that references the memory location of the cache. </p> </dd> + + + <dd> <p> Specifies the size of the cache in bytes. </p> </dd> + + + + + + + + <p>Describes a compute pipeline state object.</p> + <p> This structure is used by <strong>CreateComputePipelineState</strong>. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_BYTECODE}}</strong> structure that describes the compute shader. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the compute pipeline state is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> A cached pipeline state object, as a <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong> structure. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_PIPELINE_STATE_FLAGS}}</strong> enumeration constant such as for "tool debug". </p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes Direct3D 12 feature options in the current graphics driver. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> Specifies whether <strong>double</strong> types are allowed for shader operations. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The supported operations are equivalent to Direct3D 11's <strong>ExtendedDoublesShaderInstructions</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure. </p> <p> To use any {{HLSL}} shader that is compiled with a <strong>double</strong> type, the runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1 and 12. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all shader stages. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support resource binding. The runtime sets this member to a <strong>{{D3D12_RESOURCE_BINDING_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Specifies whether pixel shader stencil ref is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether the loading of additional formats for typed unordered-access views ({{UAVs}}) is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether <em>Rasterizer Order Views</em> ({{ROVs}}) are supported. If <strong>{{TRUE}}</strong>, they're supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support conservative rasterization. The runtime sets this member to a <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Don't use this field; instead, use the <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> query (a structure with a <strong>MaxGPUVirtualAddressBitsPerResource</strong> member), which is more accurate. </p> </dd> + + + <dd> <p> {{TRUE}} if the hardware supports textures with the 64KB standard swizzle pattern. Support for this pattern enables zero-copy texture optimizations while providing near-equilateral locality for each dimension within the texture. For texture swizzle options and restrictions, see <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CROSS_NODE_SHARING_TIER}}</strong> enumeration constant that specifies the level of sharing across nodes of an adapter that has multiple nodes, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> </dd> + + + <dd> <p> {{FALSE}} means the device only supports copy operations to and from cross-adapter row-major textures. {{TRUE}} means the device supports shader resource views, unordered access views, and render target views of cross-adapter row-major textures. "Cross-adapter" means between multiple adapters (even from different {{IHVs}}). </p> </dd> + + + <dd> <p> Whether the viewport ({{VP}}) and Render Target ({{RT}}) array index from any shader feeding the rasterizer are supported without geometry shader emulation. Compare the <strong>{{VPAndRTArrayIndexFromAnyShaderFeedingRasterizer}}</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong> structure. In <strong>{{ID3D12ShaderReflection::GetRequiresFlags}}</strong>, see the #define {{D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER}}. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver require heap attribution related to resource type. The runtime sets this member to a <strong>{{D3D12_RESOURCE_HEAP_TIER}}</strong> enumeration constant. </p> </dd> + + + + + <p>Describes the level of support for {{HLSL}} 6.0 wave operations.</p> + <p>A "lane" is single thread of execution. The shader models before version 6.0 expose only one of these at the language level, leaving expansion to parallel {{SIMD}} processing entirely up to the implementation. A "wave" is set of lanes (threads) executed simultaneously in the processor. No explicit barriers are required to guarantee that they execute in parallel. Similar concepts include "warp" and "wavefront". +</p><p> This structure is used with the {{D3D12_FEATURE_D3D12_OPTIONS1}} member of <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p>True if the driver supports {{HLSL}} 6.0 wave operations.</p> </dd> + + + <dd> <p>Specifies the baseline number of lanes in the {{SIMD}} wave that this implementation can support. This term is sometimes known as "wavefront size" or "warp width". Currently apps should rely only on this minimum value for sizing workloads. +</p> </dd> + + + <dd> <p>Specifies the maximum number of lanes in the {{SIMD}} wave that this implementation can support. This capability is reserved for future expansion, and is not expected to be used by current applications. +</p> </dd> + + + <dd> <p>Specifies the total number of {{SIMD}} lanes on the hardware.</p> </dd> + + + <dd> <p>Indicates transitions are possible in and out of the {{CBV}}, and indirect argument states, on compute command lists. If <strong>CheckFeatureSupport</strong> succeeds this value will always be true. </p> </dd> + + + <dd> <p>Indicates that 64bit integer operations are supported.</p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Pass this structure to <strong>CheckFeatureSupport</strong> to check for root signature version support.</p> + + + + <p>Provide detail about the adapter architecture, helping applications better optimize for certain adapter properties.</p> + + + + <dd> <p> In multi-adapter operation, this indicates which physical adapter of the device is relevant. See Multi-Adapter. <strong>NodeIndex</strong> is filled out by the application before calling <strong>CheckFeatureSupport</strong>, as the application can retrieve details about the architecture of each adapter. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support a tile-based renderer. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support a tile-based renderer. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support {{UMA}}. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support cache-coherent {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support cache-coherent {{UMA}}. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + + + + <p>Contains the supported shader model.</p> + <p> Refer to the enumeration constant {{D3D12_FEATURE_SHADER_MODEL}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>Specifies one member of <strong>{{D3D_SHADER_MODEL}}</strong> that indicates the maximum supported shader model.</p> </dd> + + + + + <p> Describes which resources are supported by the current graphics driver for a given format. </p> + <p> Refer to the enum <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT1}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which resources are supported. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT2}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which unordered resource options are supported. </p> </dd> + + + + + <p> Describes the image quality levels for a given format and sample count. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of multi-samples per pixel to return info about. </p> </dd> + + + <dd> <p> Flags to control quality levels, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS}}</strong> enumeration constants. The resulting value specifies options for determining quality levels. </p> </dd> + + + <dd> <p> The number of quality levels. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p> Details the adapter's {{GPU}} virtual address space limitations, including maximum address bits per resource and per process. </p> + <p> See the enumeration constant {{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>The maximum {{GPU}} virtual address bits per resource.</p> <p>Some adapters have significantly less bits available per resource than per process, while other adapters have significantly greater bits available per resource than per process. The latter scenario tends to happen in less common scenarios, like when running a 32-bit process on certain {{UMA}} adapters. +When per resource capabilities are greater than per process, the greater per resource capabilities can only be leveraged by reserved resources or {{NULL}} mapped pages. +</p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process.</p> <p>When this value is nearly equal to the available residency budget, <strong>Evict</strong> will not be a feasible option to manage residency. See <strong>MakeResident</strong> for more details.</p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Describes parameters needed to allocate resources.</p> + <p> This structure is used by the <strong>GetResourceAllocationInfo</strong> method. </p> + + + <dd> <p>The size, in bytes, of the resource.</p> </dd> + + + <dd> <p>The alignment value for the resource; one of 4KB (4096), 64KB (65536) and 4MB (4194304) alignment.</p> </dd> + + + + + <p>Describes heap properties.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> <li> <strong>{{ID3D12Resource::GetHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::GetCustomHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> </ul><p> Valid combinations of struct member values: </p><ul> <li> When <strong>Type</strong> is <strong>{{D3D12_HEAP_TYPE}}</strong>_CUSTOM, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must not be ..._UNKNOWN. </li> <li> When <strong>Type</strong> is not {{D3D12_HEAP_TYPE_CUSTOM}}, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must be ..._UNKNOWN. </li> <li> When using {{D3D12_HEAP_TYPE_CUSTOM}} and <strong>{{D3D12_MEMORY_POOL}}</strong>_L1, on {{NUMA}} adapters, <strong>{{CPUPageProperty}}</strong> must be <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>_NOT_AVAILABLE. To differentiate {{NUMA}} from {{UMA}} adapters, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE and <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </li> </ul> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the type of heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>-typed value that specifies the {{CPU}}-page properties for the heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_MEMORY_POOL}}</strong>-typed value that specifies the memory pool for the heap. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the node where the resource should be created. Exactly one bit of this {{UINT}} must be set. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the set of nodes where the resource is visible. <em>VisibleNodeMask</em> must have the same bits set as <em>CreationNodeMask</em> has. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + + + <p>Describes a heap.</p> + <p> This structure is used by the <strong>CreateHeap</strong> method, and returned by the <strong>GetDesc</strong> method. </p> + + + <dd> <p> The size, in bytes, of the heap. To avoid wasting memory, applications should pass <em>SizeInBytes</em> values which are multiples of the effective <em>Alignment</em>; but non-aligned <em>SizeInBytes</em> is also supported, for convenience. To find out how large a heap must be to support textures with undefined layouts and adapter-specific sizes, call <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that describes the heap properties. </p> </dd> + + + <dd> <p> The alignment value for the heap. Valid values: </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td> 0 </td><td> An alias for 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 4MB. An application must decide whether the heap will contain multi-sample anti-aliasing ({{MSAA}}), in which case, the application must choose {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}}. </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise-{{OR}} operation. The resulting value identifies heap options. When creating heaps to support adapters with resource heap tier 1, an application must choose some flags. </p> </dd> + + + + + <p> Describes a resource, such as a texture. This structure is used extensively. </p> + <p> Use this structure with:</p><ul> <li> <strong>{{ID3D12Resource::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> <li> <strong>{{ID3D12Device::GetCopyableFootprints}}</strong> </li> <li> A number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</li> </ul><p>Two common resources are buffers and textures, which both use this structure, but with quite different uses of the fields.</p> + + + <dd> <p> One member of <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>, specifying the dimensions of the resource (for example, {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}), or whether it is a buffer (({{D3D12_RESOURCE_DIMENSION_BUFFER}}). </p> </dd> + + + <dd> <p> Specifies the alignment. </p> </dd> + + + <dd> <p> Specifies the width of the resource. </p> </dd> + + + <dd> <p> Specifies the height of the resource. </p> </dd> + + + <dd> <p> Specifies the depth of the resource, if it is 3D, or the array size if it is an array of 1D or 2D resources. </p> </dd> + + + <dd> <p> Specifies the number of {{MIP}} levels. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{DXGI_FORMAT}}</strong>. </p> </dd> + + + <dd> <p> Specifies a <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> Bitwise-{{OR}}'d flags, as <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants. </p> </dd> + + + + + <p>Specifies a depth and stencil value.</p> + <p>This structure is used in the <strong>{{D3D12_CLEAR_VALUE}}</strong> structure.</p> + + + <dd> <p>Specifies the depth value.</p> </dd> + + + <dd> <p>Specifies the stencil value.</p> </dd> + + + + + <p>Describes a value used to optimize clear operations for a particular resource.</p> + <p> This structure is optionally passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> </ul> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_FORMAT}}</strong> enum.</p> <p>The format of the commonly cleared color follows the same validation rules as a view/ descriptor creation. In general, the format of the clear color can be any format in the same typeless group that the resource format belongs to.</p> <p>This <em>Format</em> must match the format of the view used during the clear operation. It indicates whether the <em>Color</em> or the <em>DepthStencil</em> member is valid and how to convert the values for usage with the resource.</p> </dd> + + + <dd> <p>Specifies a 4-entry array of float values (each value in the range 0.0 to 1.0), determining the {{RGBA}} value. The order of {{RGBA}} matches the order used with <strong>ClearRenderTargetView</strong>.</p> </dd> + + + <dd> <p>Specifies one member of <strong>{{D3D12_DEPTH_STENCIL_VALUE}}</strong>. These values match the semantics of <em>Depth</em> and <em>Stencil</em> in <strong>ClearDepthStencilView</strong>.</p> </dd> + + + + + <p>Describes a memory range.</p> + <p><strong>End</strong> is one-past-the-end. When <strong>Begin</strong> equals <strong>End</strong>, the range is empty. The size of the range is (<strong>End</strong> - <strong>Begin</strong>). </p><p> This structure is used by the <strong>Map</strong> and <strong>Unmap</strong> methods. </p> + + + <dd> <p> The offset, in bytes, denoting the beginning of a memory range. </p> </dd> + + + <dd> <p> The offset, in bytes, denoting the end of a memory range. <strong>End</strong> is one-past-the-end. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a subresource memory range.</p> + <p> This structure is used by the <strong>AtomicCopyBufferUINT</strong> and <strong>AtomicCopyBufferUINT64</strong> methods. </p> + + + <dd> <p>The index of the subresource.</p> </dd> + + + <dd> <p>A memory range within the subresource.</p> </dd> + + + + + <p>Describes subresource data.</p> + + + <dd> <p>Offset, in bytes, between the start of the parent resource and this subresource.</p> </dd> + + + <dd> <p>The row pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The x-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The y-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The z-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The index of the subresource for the tiled resource.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p> Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p> If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. In this case, <strong>NumTiles</strong> should be equal to <strong>Width</strong> * <strong>Height</strong> * <strong>Depth</strong>.</p> <p> If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once. </p> <p> Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>UseBox</strong>, you use a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p> When the region includes mipmaps that are packed with nonstandard tiling, <strong>UseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0. </p> </dd> + + + <dd> <p> The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p> The height of the tiled region, in tiles. Used for 2D and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p> Describes the tile structure of a tiled resource with mipmaps. </p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p> The number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p> The number of packed mipmaps in the tiled resource. </p> <p> This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same packing. </p> <p> On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser mipmaps for a given array slice are considered packed as well. </p> </dd> + + + <dd> <p> The number of tiles for the packed mipmaps in the tiled resource. </p> <p> If there is no packing, this value is meaningless and is set to 0. Otherwise, it is set to the number of tiles that are needed to represent the set of packed mipmaps. The pixel layout within the packed mipmaps is hardware specific. If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. For arrays, this value is only the count of packed mipmaps within the subresources for each array slice. </p> </dd> + + + <dd> <p> The offset of the first packed tile for the resource in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this value is meaningless and is 0. Otherwise, it is the offset of the first packed tile for the resource in the overall range of tiles for the resource. A value of 0 for <strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. For array surfaces, this is the offset for the tiles that contain the packed mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset past the beginning of the tiles for each array slice. </p> <strong>Note</strong>?? The number of overall tiles, packed or not, for a given array slice is simply the total number of tiles for the resource divided by the resource's array size, so it is easy to locate the range of tiles for any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies which of those are packed. ? </dd> + + + + + <p> Describes the transition of subresources between different usages. </p> + <p> This struct is used by the <strong>Transition</strong> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> struct. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the resource used in the transition. </p> </dd> + + + <dd> <p> The index of the subresource for the transition. Use the <strong>{{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}</strong> flag ( 0xffffffff ) to transition all subresources in a resource at the same time. </p> </dd> + + + <dd> <p> The "before" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The "after" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + + + <p> Describes the transition between usages of two different resources that have mappings into the same heap. </p> + <p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> Both the before and the after resources can be specified or one or both resources can be <strong>{{NULL}}</strong>, which indicates that any placed or reserved resource could cause aliasing. </p><p>Refer to the usage models described in <strong>CreatePlacedResource</strong>.</p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the before resource used in the transition. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the after resource used in the transition. </p> </dd> + + + + + <p> Represents a resource in which all {{UAV}} accesses must complete before any future {{UAV}} accesses can begin. </p> + <p> This struct represents a resource in which all unordered access view ({{UAV}}) accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p><p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> You don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that only read a {{UAV}}. Additionally, you don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that write to the same {{UAV}} if you know that it's safe to execute the {{UAV}} accesses in any order. The resource can be <strong>{{NULL}}</strong>, which indicates that any {{UAV}} access could require the barrier. </p> + + + <dd> <p> The resource used in the transition, as a reference to <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + + + <p> Describes a resource barrier (transition in resource use). </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method. </p> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong>-typed value that specifies the type of resource barrier. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_RESOURCE_BARRIER_FLAGS}}</strong> enumeration constant such as for "begin only" or "end only". </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> structure that describes the transition of subresources between different usages. Members specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> structure that describes the transition between usages of two different resources that have mappings into the same heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> structure that describes a resource in which all {{UAV}} accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Describes the format, width, height, depth, and row-pitch of the subresource into the parent resource. </p> + <p> Use this structure in the <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p><p> The helper structure is <strong>{{CD3DX12_SUBRESOURCE_FOOTPRINT}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. </p> </dd> + + + <dd> <p> The width of the subresource. </p> </dd> + + + <dd> <p> The height of the subresource. </p> </dd> + + + <dd> <p> The depth of the subresource. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. This must be a multiple of {{D3D12_TEXTURE_DATA_PITCH_ALIGNMENT}} (256), and must be greater than or equal to the size of the data within a row. </p> </dd> + + + + + <p> Describes the footprint of a placed subresource, including the offset and the {{D3D12_SUBRESOURCE_FOOTPRINT}}. </p> + <p> This structure is used in the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure, and by <strong>{{ID3D12Device::GetCopyableFootprints}}</strong>. </p><p> All the data referenced by the footprint structure must fit within the bounds of the parent resource. If you use <strong>GetCopyableFootprints</strong> to fill out the structure, the <em>pTotalBytes</em> output field indicates the required size of the resource.</p><p> This structure is also used a number of helper functions (refer to Helper Structures and Functions for {{D3D12}}).</p><p> When copying textures, use this structure along with <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. </p> + + + <dd> <p> The offset of the subresource within the parent resource, in bytes. The offset between the start of the parent resource and this subresource. </p> </dd> + + + <dd> <p> The format, width, height, depth, and row-pitch of the subresource, as a <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p> </dd> + + + + + <p>Describes a portion of a texture for the purpose of texture copies. </p> + <p> Use this structure with <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p> Specifies the resource which will be used for the copy operation.</p>? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT}}, <strong>pResource</strong> must point to a buffer resource.? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX}}, <strong>pResource</strong> must point to a texture resource. </dd> + + + <dd> <p> Specifies which type of resource location this is: a subresource of a texture, or a description of a texture layout which can be applied to a buffer. This <strong>{{D3D12_TEXTURE_COPY_TYPE}}</strong> enum indicates which union member to use. </p> </dd> + + + <dd> <p> Specifies a texture layout, with offset, dimensions, and pitches, for the hardware to understand how to treat a section of a buffer resource as a multi-dimensional texture. To fill-in the correct data for a <strong>CopyTextureRegion</strong> call, see <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the subresource of an arrayed, mip-mapped, or planar texture should be used for the copy operation. </p> </dd> + + + + + <p>This section provides code for sample scenarios. Many of the walk-throughs provide details on what coding is required to be added to a basic sample, to avoid repeating the basic component code for each scenario.</p><p>For the most basic component, refer to the Creating a Basic Direct3D 12 Component section. The following walk-throughs describe more advanced scenarios.</p><p> </p> + + + + <p>Describes the elements in a buffer resource to use in a shader-resource view.</p> + <p> This structure is used by <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a view of a buffer. </p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV_FLAGS}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1. </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> -1 (where <strong>MipLevels</strong> is from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a multi sampled 2D texture to use in a shader-resource view.</p> + <p>This structure is a member of the <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure.</p><p>Since a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_SRV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p> A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. </p><p> When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you can't create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource. </p><p> Create a shader-resource-view description by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong>.</p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_COMPONENT_MAPPING}}</strong> enumeration constant, such as return component 0 (red) from memory, or force the resulting value to 0. This mapping enables the shader resource view ({{SRV}}) to choose how memory gets routed to the 4 return components in a shader after a memory fetch. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV}}</strong> structure that views the resource as a buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_SRV}}</strong> structure that views the resource as a 2D-texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_SRV}}</strong> structure that views the resource as a 2D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array. </p> </dd> + + + + + <p>Describes a constant buffer to view.</p> + <p>This structure is used by <strong>CreateConstantBufferView</strong>.</p> + + + <dd> <p> The {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + <dd> <p>The size in bytes of the constant buffer.</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>This structure is used by <strong>CreateSampler</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_FILTER}}</strong>-typed value that specifies the filtering method to use when sampling a texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a u texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a v texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a w texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if the runtime calculates that a texture should be sampled at mipmap level 3 and <strong>MipLODBias</strong> is 2, the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> or <strong>{{D3D12_FILTER_COMPARISON_ANISOTROPIC}}</strong> is specified in <strong>Filter</strong>. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that specifies a function that compares sampled data against existing sampled data. </p> </dd> + + + <dd> <p> Border color to use if <strong>{{D3D12_TEXTURE_ADDRESS_MODE_BORDER}}</strong> is specified for <strong>AddressU</strong>, <strong>AddressV</strong>, or <strong>AddressW</strong>. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to <strong>MinLOD</strong>. To have no upper limit on {{LOD}}, set this member to a large value. </p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a buffer. </p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> The counter offset, in bytes. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong>-typed value that specifies the view options for the resource. </p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources. </p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p> Describes an array of unordered-access 2D texture resources. </p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using an unordered-access view.</p> + <p>Pass an unordered-access-view description into <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type specifies how the resource will be accessed. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_UAV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the elements in a buffer resource to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a buffer.</p> + + + <dd> <p>Number of bytes between the beginning of the buffer and the first element to access.</p> </dd> + + + <dd> <p>The total number of elements in the view.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The index of the mipmap level to use.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture to use in a render-target view.</p> + <p>This structure is a member of the <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_RTV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p> Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p> Describes the subresources from an array of multi sampled 2D textures to use in a render-target view. </p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures. </p> + + + <dd> <p> The index of the first texture to use in an array of textures. </p> </dd> + + + <dd> <p> The number of textures to use. </p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using a render-target view.</p> + <p>Pass a render-target-view description into <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to create a render-target view.</p><p>A render-target view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_RTV_DIMENSION}}</strong>-typed value that specifies how the render-target resource will be accessed. This type specifies how the resource will be accessed. This member also determines which _RTV to use in the following union.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_RTV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 2D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures that are accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is a member of the <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is nothing to specify in <strong>{{D3D12_TEX2DMS_DSV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures for a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresources of a texture that are accessible from a depth-stencil view.</p> + <p> These are valid formats for a depth-stencil view: </p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p> A depth-stencil view can't use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, the format of the parent resource is used. </p><p> Pass a depth-stencil-view description into <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> to create a depth-stencil view. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. For allowable formats, see Remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DSV_DIMENSION}}</strong>-typed value that specifies how the depth-stencil resource will be accessed. This member also determines which _DSV to use in the following union. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DSV_FLAGS}}</strong> enumeration constants that are combined by using a bitwise {{OR}} operation. The resulting value specifies whether the texture is read only. Pass 0 to specify that it isn't read only; otherwise, pass one or more of the members of the <strong>{{D3D12_DSV_FLAGS}}</strong> enumerated type. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_DSV}}</strong> structure that specifies a 1D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_DSV}}</strong> structure that specifies an array of 1D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_DSV}}</strong> structure that specifies a 2D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_DSV}}</strong> structure that specifies an array of 2D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_DSV}}</strong> structure that specifies a multisampled 2D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_DSV}}</strong> structure that specifies an array of multisampled 2D textures. </p> </dd> + + + + + <p>Describes the descriptor heap.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDescriptorHeap}}</strong> </li> </ul> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the types of descriptors in the heap. </p> </dd> + + + <dd> <p> The number of descriptors in the heap. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DESCRIPTOR_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the heap. </p> </dd> + + + <dd> <p> For single-adapter operation, set this to zero. If there are multiple adapter nodes, set a bit to identify the node (one of the device's physical adapters) to which the descriptor heap applies. Each bit in the mask corresponds to a single node. Only one bit must be set. See Multi-Adapter. </p> </dd> + + + + + <p>Describes a descriptor range.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure. </p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.0 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes constants inline in the root signature that appear in shaders as one constant buffer. </p> + <p>Refer to Resource Binding in {{HLSL}} for more information on shader registers and spaces. </p><p><strong>{{D3D12_ROOT_CONSTANTS}}</strong> is the data type of the <strong>Constants</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_CONSTANTS}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS}} member of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p> The shader register. </p> </dd> + + + <dd> <p> The register space. </p> </dd> + + + <dd> <p> The number of constants that occupy a single shader slot (these constants appear like a single constant buffer). All constants occupy a single root signature bind slot. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.0 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes a static sampler. </p> + <p> Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> The filtering method to use when sampling a texture, as a <strong>{{D3D12_FILTER}}</strong> enumeration constant. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>u</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>v</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>w</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if {{D3D12_FILTER_ANISOTROPIC}} or {{D3D12_FILTER_COMPARISON_ANISOTROPIC}} is specified as the filter. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D12_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_STATIC_BORDER_COLOR}}</strong>, the border color to use if {{D3D12_TEXTURE_ADDRESS_MODE_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p> Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. </p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D12_FLOAT32_MAX}}. </p> </dd> + + + <dd> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> parameters correspond to the binding syntax of {{HLSL}}. For example, in {{HLSL:}} </p> <code>Texture2D&lt;float4&gt; a : register(t2, space3);</code> <p> This corresponds to a <em>ShaderRegister</em> of 2 (indicating the type is {{SRV}}), and <em>RegisterSpace</em> is 3. </p> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> pair is needed to establish correspondence between shader resources and runtime heap descriptors, using the root signature data structure. </p> </dd> + + + <dd> <p> See the description for <em>ShaderRegister</em>. Register space is optional; the default register space is 0. </p> </dd> + + + <dd> <p> Specifies the visibility of the sampler to the pipeline shaders, one member of <strong>{{D3D12_SHADER_VISIBILITY}}</strong>. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a descriptor range, with flags to determine their volatility.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure. </p><p>Refer to the helper structure <strong>{{CD3DX12_DESCRIPTOR_RANGE1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> that determine descriptor and data volatility.</p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.1 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR_TABLE1}}</strong>.</p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.1 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR1}}</strong>.</p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> that determine the volatility of descriptors and the data they reference.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> structure.</p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_PARAMETER1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p>Describes the layout of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER1}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong> that determine the data volatility.</p> </dd> + + + + + <p>Holds any version of a root signature description, and is designed to be used with serialization/deserialization functions.</p> + <p>Use this structure with the following methods.</p><ul> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>GetUnconvertedRootSignatureDesc</strong> </li> <li> <strong>{{D3D12SerializeVersionedRootSignature}}</strong> </li> </ul><p>Refer to the helper structure <strong>{{CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong>. </p> + + + <dd> <p>Specifies one member of {{D3D_ROOT_SIGNATURE_VERSION}} that determines the contents of the union.</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> (version 1.0).</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> (version 1.1).</p> </dd> + + + + + <p> Describes a {{CPU}} descriptor handle. </p> + <p> This structure is returned by the following methods: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart}}</strong> </li> </ul><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CopyDescriptors}}</strong> </li> <li> <strong>{{ID3D12Device::CopyDescriptorsSimple}}</strong> </li> <li> <strong>{{ID3D12Device::CreateConstantBufferView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateSampler}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::OMSetRenderTargets}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes a {{GPU}} descriptor handle. </p> + <p> This structure is returned by <strong>{{ID3D12DescriptorHeap::GetGPUDescriptorHandleForHeapStart}}</strong>. </p><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList:SetComputeRootDescriptorTable}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes details for the discard-resource operation. </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> method. </p><p> If rectangles are supplied in this structure, the resource must have 2D subresources with all specified subresources the same dimension. </p> + + + <dd> <p> The number of rectangles in the array that the <strong>pRects</strong> member specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource to discard. If <strong>{{NULL}}</strong>, <strong>DiscardResource</strong> discards the entire resource. </p> </dd> + + + <dd> <p> Index of the first subresource in the resource to discard. </p> </dd> + + + <dd> <p> The number of subresources in the resource to discard. </p> </dd> + + + + + <p> Describes the purpose of a query heap. A query heap contains an array of individual queries. </p> + <p> Use this structure with <strong>CreateQueryHeap</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the number of queries the heap should contain. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the query heap applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>BeginQuery</strong> and <strong>EndQuery</strong>.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + + <p>Describes query data for stream output.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + <dd> <p>Specifies the number of primitives written.</p> </dd> + + + <dd> <p>Specifies the total amount of storage needed by the primitives.</p> </dd> + + + + + + + + <p>Describes parameters for drawing instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawInstanced</strong>.</p> + + + <dd> <p>Specifies the number of vertices to draw, per instance.</p> </dd> + + + <dd> <p>Specifies the number of instances.</p> </dd> + + + <dd> <p>Specifies an index to the first vertex to start drawing from.</p> </dd> + + + <dd> <p>Specifies an index to the first instance to start drawing from.</p> </dd> + + + + + <p>Describes parameters for drawing indexed instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawIndexedInstanced</strong>. </p> + + + <dd> <p>The number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p> The number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Describes dispatch parameters, for use by the compute shader.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>Dispatch</strong>.</p><p> A compiled compute shader defines the set of instructions to execute per thread and the number of threads to run per group. The thread-group parameters indicate how many thread groups to execute. Each thread group contains the same number of threads, as defined by the compiled compute shader. The thread groups are organized in a three-dimensional grid. The total number of thread groups that the compiled compute shader executes is determined by the following calculation:</p><code>ThreadGroupCountX * ThreadGroupCountY * ThreadGroupCountZ</code><p>In particular, if any of the values in the thread-group parameters are 0, nothing will happen. +</p><p>The maximum size of any dimension is 65535.</p> + + + <dd> <p>The size, in thread groups, of the x-dimension of the thread-group grid. </p> </dd> + + + <dd> <p>The size, in thread groups, of the y-dimension of the thread-group grid.</p> </dd> + + + <dd> <p>The size, in thread groups, of the z-dimension of the thread-group grid. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Describes an indirect argument (an indirect parameter), for use with a command signature. </p> + <p> Use this structure with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> A single <strong>{{D3D12_INDIRECT_ARGUMENT_TYPE}}</strong> enumeration constant. </p> </dd> + + + <dd> <dl> <dt><strong>Slot</strong></dt> <dd> <p> Specifies the slot containing the vertex buffer address. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the constant. </p> </dd> <dt><strong>DestOffsetIn32BitValues</strong></dt> <dd> <p> The offset, in 32-bit values, to set the first constant of the group. Supports multi-value constants at a given root index. Root constant entries must be sorted from smallest to largest DestOffsetIn32BitValues. </p> </dd> <dt><strong>Num32BitValuesToSet</strong></dt> <dd> <p> The number of 32-bit constants that are set at the given root index. Supports multi-value constants at a given root index. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{CBV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{SRV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{UAV}}. </p> </dd> </dl> </dd> + + + + + <p> Describes the arguments (parameters) of a command signature. </p> + <p> Use this structure by <strong>CreateCommandSignature</strong>. </p> + + + <dd> <p> Specifies the size of each argument of a command signature, in bytes. </p> </dd> + + + <dd> <p> Specifies the number of arguments in the command signature. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structures, containing details of the arguments, including whether the argument is a vertex buffer, constant, constant buffer view, shader resource view, or unordered access view. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the command signature is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + + + <p> Describes subresource data. </p> + <p>This structure is used by a number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that contains the subresource data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The depth pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p> Describes the destination of a memory copy operation. </p> + <p>This structure is used by a number of helper methods, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that receives the copied data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The slice pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p>An interface from which <strong>{{ID3D12Device}}</strong> and <strong>{{ID3D12DeviceChild}}</strong> inherit from. It provides methods to associate private data and annotate object names.</p> + + + + <p>Gets application-defined data from a device object.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> that is associated with the data. </p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a memory block that receives the data from the device object if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p> Sets application-defined data to a device object and associates that data with an application-defined <strong>{{GUID}}</strong>. </p> + <p> Rather than using the Direct3D 11 debug object naming scheme of calling <strong>{{ID3D12Object::SetPrivateData}}</strong> using <strong>{{WKPDID_D3DDebugObjectName}}</strong> with an {{ASCII}} name, call <strong>{{ID3D12Object::SetName}}</strong> with a {{UNICODE}} name. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> to associate with the data. </p> </dd> + + + <dd> <p> The size in bytes of the data. </p> </dd> + + + <dd> <p> A reference to a memory block that contains the data to be stored with this device object. If <em>pData</em> is <strong>{{NULL}}</strong>, <em>DataSize</em> must also be 0, and any data that was previously associated with the <strong>{{GUID}}</strong> specified in <em>guid</em> will be destroyed. </p> </dd> + + + + + <p> Associates an <strong>{{IUnknown}}</strong>-derived interface with the device object and associates that interface with an application-defined <strong>{{GUID}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Associates a name with the device object. This name is for use in debug diagnostics and tools. </p> + <p> This method takes {{UNICODE}} names. The older Direct3D 11 debug object naming system through <strong>{{ID3D12Object::SetPrivateData}}</strong> with <strong>{{WKPDID_D3DDebugObjectName}}</strong> used {{ASCII}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the device object. </p> </dd> + + + + + <p>An interface from which other core interfaces inherit from, including <strong>{{ID3D12PipelineLibrary}}</strong>, <strong>{{ID3D12CommandList}}</strong>, <strong>{{ID3D12Pageable}}</strong>, and <strong>{{ID3D12RootSignature}}</strong>. It provides a method to get back to the device object it was created against.</p> + + + + <p>Gets a reference to the device that created this interface. </p> + <p> Any returned interfaces have their reference count incremented by one, so be sure to call ::release() on the returned references before they are freed or else you will have a memory leak. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the device interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the device can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Device}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a device. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12Device}}</strong> interface for the device. </p> </dd> + + + + + <p>The root signature defines what resources are bound to the graphics pipeline. A root signature is configured by the app and links command lists to the resources the shaders require. Currently, there is one graphics and one compute root signature per app.</p> + + + + <p>Contains a method to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> data structure, of a serialized root signature version 1.0. </p> + <p>This interface has been superceded by <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>.</p> + + + + <p> Gets the layout of the root signature. </p> + <p> This method returns a deserialized root signature in a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature. </p> + + + + <p>Contains methods to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, of any version of a serialized root signature. </p> + <p>This interface supercedes <strong>{{ID3D12RootSignatureDeserializer}}</strong>.</p> + + + + <p>Converts root signature description structures to a requested version.</p> + <p>This method allocates additional storage if needed for the converted root signature (memory owned by the deserializer interface). If conversion is done, the deserializer interface doesn?t free the original deserialized root signature memory ? all versions the interface has been asked to convert to are available until the deserializer is destroyed. </p><p>Converting a root signature from 1.1 to 1.0 will drop all <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> and <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> can be useful for generating compatible root signatures that need to run on old operating systems, though does lose optimization opportunities. For instance, multiple root signature versions can be serialized and stored with application assets, with the appropriate version used at runtime based on the operating system capabilities. </p><p>Converting a root signature from 1.0 to 1.1 just adds the appropriate flags to match 1.0 semantics.</p> + <p>This method returns an {{HRESULT}} success or error code. The method can fail with {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>Specifies the required <strong>{{D3D_ROOT_SIGNATURE_VERSION}}</strong>.</p> </dd> + + + <dd> <p>Contains the deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> </dd> + + + + + <p> Gets the layout of the root signature, without converting between root signature versions. </p> + <p>This method returns a deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature.</p> + + + + <p>An interface from which many other core interfaces inherit from. It indicates that the object type encapsulates some amount of {{GPU}}-accessible memory; but does not strongly indicate whether the application can manipulate the object's residency. </p> + <p>For more details, refer to Memory Management in Direct3D 12 and the <strong>MakeResident</strong> method reference. +</p> + + + + <p>A heap is an abstraction of contiguous memory allocation, used to manage physical memory. This heap can be used with <strong>{{ID3D12Resource}}</strong> objects to support placed resources or reserved resources.</p> + + + + <p>Gets the heap description.</p> + <p>Returns the <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap.</p> + + + + + + + + + + <p>Invalidates the {{CPU}} reference to the specified subresource in the resource. <strong>Unmap</strong> also flushes the {{CPU}} cache, when necessary, so that {{GPU}} reads to this address reflect any modifications made by the {{CPU}}. +</p> + <p>Refer to the extensive Remarks and Examples for the <strong>Map</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the index of the subresource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RANGE}}</strong> structure that describes the range of memory to unmap.</p> <p>This indicates the region the {{CPU}} might have modified, and the coordinates are subresource-relative. A null reference indicates the entire subresource might have been modified by the {{CPU}}. It is valid to specify the {{CPU}} didn't write any data by passing a range where <strong>End</strong> is less than or equal to <strong>Begin</strong>.</p> </dd> + + + + + <p>Gets the resource description.</p> + <p>A Direct3D 12 resource description structure.</p> + + + + <p> This method returns the {{GPU}} virtual address of a buffer resource. </p> + <p>This method is only useful for buffer resources, it will return zero for all texture resources.</p><p> For more information on the use of {{GPU}} virtual addresses, refer to Indirect Drawing. </p> + <p> This method returns the {{GPU}} virtual address. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd synonym of {{UINT64}}. </p> + + + + <p>Uses the {{CPU}} to copy data into a subresource, enabling the {{CPU}} to modify the contents of most textures with undefined layouts.</p> + <p>The resource should first be mapped using <strong>Map</strong>. Textures must be in the <strong>{{D3D12_RESOURCE_STATE_COMMON}}</strong> state for {{CPU}} access through <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> to be legal; but buffers do not.</p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p><p><strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> enable near zero-copy optimizations for {{UMA}} adapters, but can prohibitively impair the efficiency of discrete/ {{NUMA}} adapters as the texture data cannot reside in local video memory. Typical applications should stick to discrete-friendly upload techniques, unless they recognize the adapter architecture is {{UMA}}. For more details on uploading, refer to <strong>CopyTextureRegion</strong>, and for more details on {{UMA}}, refer to <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </p><p>On {{UMA}} systems, this routine can be used to minimize the cost of memory copying through the loop optimization known as loop tiling. By breaking up the upload into chucks that comfortably fit in the {{CPU}} cache, the effective bandwidth between the {{CPU}} and main memory more closely achieves theoretical maximums. +</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the index of the subresource. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data into. If {{NULL}}, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + <dd> <p> A reference to the source data in memory. </p> </dd> + + + <dd> <p>The distance from one row of source data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of source data to the next. </p> </dd> + + + + + <p> Uses the {{CPU}} to copy data from a subresource, enabling the {{CPU}} to read the contents of most textures with undefined layouts. </p> + <p> See the Remarks section for <strong>WriteToSubresource</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the destination data in memory. </p> </dd> + + + <dd> <p> The distance from one row of destination data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of destination data to the next. </p> </dd> + + + <dd> <p> Specifies the index of the subresource to read from. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data from. If {{NULL}}, the data is read from the destination subresource with no offset. The dimensions of the destination must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + + + <p> Retrieves the properties of the resource heap, for placed and committed resources. </p> + <p> This method only works on placed and committed resources, not on reserved resources. If the resource was created as reserved, {{E_INVALIDARG}} is returned. The pages could be mapped to none, one, or more heaps. </p><p> For more information, refer to Memory Management in Direct3D 12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. If the resource was created as reserved, {{E_INVALIDARG}} is returned. </p> + + + <dd> <p> Pointer to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure, that on successful completion of the method will contain the resource heap properties. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_HEAP_FLAGS}}</strong> variable, that on successful completion of the method will contain any miscellaneous heap flags. </p> </dd> + + + + + <p>Represents the allocations of storage for graphics processing unit ({{GPU}}) commands.</p> + <p>Use <strong>{{ID3D12Device::CreateCommandAllocator}}</strong> to create a command allocator object. </p><p>The command allocator object corresponds to the underlying allocations in which {{GPU}} commands are stored. The command allocator object applies to both direct command lists and bundles. You must use a command allocator object in a DirectX 12 app.</p> + + + + <p>Indicates to re-use the memory that is associated with the command allocator.</p> + <p>Apps call <strong>Reset</strong> to re-use the memory that is associated with a command allocator. From this call to <strong>Reset</strong>, the runtime and driver determine that the graphics processing unit ({{GPU}}) is no longer executing any command lists that have recorded commands with the command allocator.</p><p>Unlike <strong>{{ID3D12GraphicsCommandList::Reset}}</strong>, it is not recommended that you call <strong>Reset</strong> on the command allocator while a command list is still being executed. </p><p>The debug layer will issue a warning if it can't prove that there are no pending {{GPU}} references to command lists that have recorded commands in the allocator.</p><p>The debug layer will issue an error if <strong>Reset</strong> is called concurrently by multiple threads (on the same allocator object).</p> + <p>This method returns <strong>{{E_FAIL}}</strong> if there is an actively recording command list referencing the command allocator. The debug layer will also issue an error in this case. See Direct3D 12 Return Codes for other possible return values.</p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + + + + <p>Sets the fence to the specified value.</p> + <p>Use this method to set a fence value from the {{CPU}} side. Use <strong>{{ID3D12CommandQueue::Signal}}</strong> to set a fence from the {{GPU}} side.</p> + <p>This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>The value to set the fence to.</p> </dd> + + + + + <p>Represents the state of all currently set shaders as well as certain fixed function state objects.</p> + <p>Use <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> or <strong>{{ID3D12Device::CreateComputePipelineState}}</strong> to create a pipeline state object ({{PSO}}). </p><p>A pipeline state object corresponds to a significant portion of the state of the graphics processing unit ({{GPU}}). This state includes all currently set shaders and certain fixed function state objects. The only way to change states contained within the pipeline object is to change the currently bound pipeline object.</p> + + + + <p> Gets the cached blob representing the pipeline state. </p> + <p>Refer to the remarks for <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> After this method returns, points to the cached blob representing the pipeline state. </p> </dd> + + + + + <p>A descriptor heap is a collection of contiguous allocations of descriptors, one allocation for every descriptor. Descriptor heaps contain many object types that are not part of a Pipeline State Object ({{PSO}}), such as Shader Resource Views ({{SRVs}}), Unordered Access Views ({{UAVs}}), Constant Buffer Views ({{CBVs}}), and Samplers.</p> + + + + <p> Gets the descriptor heap description. </p> + <p> The description of the descriptor heap, as a <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + + <p>Gets the {{CPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{CPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Gets the {{GPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{GPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Manages a query heap. A query heap holds an array of queries, referenced by indexes.</p> + <p>For more information, refer to Queries.</p> + + + + <p> A command signature object enables apps to specify indirect drawing, including the buffer format, command type and resource bindings to be used.</p> + <p> To create a command signature, call <strong>{{ID3D12Device::CreateCommandSignature}}</strong>, as described in Indirect Drawing. </p> + + + + + + + <p> Gets the type of the command list, such as direct, bundle, compute, or copy. </p> + <p> This method returns the type of the command list, as a <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong> enumeration constant, such as direct, bundle, compute, or copy. </p> + + + + + + + <p> Indicates that recording to the command list has finished. </p> + <p> The runtime will validate that the command list has not previously been closed. If an error was encountered during recording, the error code is returned here. The runtime won't call the close device driver interface ({{DDI}}) in this case. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list has already been closed, or an invalid {{API}} was called during command list recording. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory during recording. </li> <li><strong>{{E_INVALIDARG}}</strong> if an invalid argument was passed to the command list {{API}} during recording. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + + <p> Resets a command list back to its initial state as if a new command list was just created. </p> + <p> By using <strong>Reset</strong>, you can re-use command list tracking structures without any allocations. Unlike <strong>{{ID3D12CommandAllocator::Reset}}</strong>, you can call <strong>Reset</strong> while the command list is still being executed. A typical pattern is to submit a command list and then immediately reset it to reuse the allocated memory for another command list. </p><p> You can use <strong>Reset</strong> for both direct command lists and bundles. </p><p> The command allocator that <strong>Reset</strong> takes as input can be associated with no more than one recording command list at a time. The allocator type, direct command list or bundle, must match the type of command list that is being created. </p><p> If a bundle doesn't specify a resource heap, it can't make changes to which descriptor tables are bound. Either way, bundles can't change the resource heap within the bundle. If a heap is specified for a bundle, the heap must match the calling 'parent' command list?s heap. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list was not in the "closed" state when the <strong>Reset</strong> call was made, or the per-device limit would have been exceeded. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory. </li> <li><strong>{{E_INVALIDARG}}</strong> if the allocator is currently being used with another command list in the "recording" state or if the specified allocator was created with the wrong type. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12CommandAllocator}}</strong> object that the device creates command lists from. </p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. This is optional and can be {{NULL}}. If {{NULL}}, the runtime sets a dummy initial pipeline state so that drivers don't have to deal with undefined state. The overhead for this is low, particularly for a command list, for which the overall cost of recording the command list likely dwarfs the cost of one initial state setting. So there is little cost in not setting the initial pipeline state parameter if it isn't convenient. </p> <p>For bundles on the other hand, it might make more sense to try to set the initial state parameter since bundles are likely smaller overall and can be reused frequently.</p> </dd> + + + + + <p>Resets the state of a direct command list back to the state it was in when the command list was created. </p> + <p> It is invalid to call <strong>ClearState</strong> on a bundle. If an app calls <strong>ClearState</strong> on a bundle, the call to <strong>Close</strong> will return <strong>{{E_FAIL}}</strong>. </p><p> When <strong>ClearState</strong> is called, all currently bound resources are unbound. The primitive topology is set to <strong>{{D3D_PRIMITIVE_TOPOLOGY_UNDEFINED}}</strong>. Viewports, scissor rectangles, stencil reference value, and the blend factor are set to empty values (all zeros). Predication is disabled. </p><p> The app-provided pipeline state object becomes bound as the currently set pipeline state object. </p> + <p> Returns nothing. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. </p> </dd> + + + + + <p> Draws non-indexed, instanced primitives. </p> + <p> A draw {{API}} submits work to the rendering pipeline. </p><p> Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. </p><p> The vertex data for an instanced draw call typically comes from a vertex buffer that is bound to the pipeline. But, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}). </p> + <p>Returns nothing</p> + + + <dd> <p> Number of vertices to draw. </p> </dd> + + + <dd> <p> Number of instances to draw. </p> </dd> + + + <dd> <p> Index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Draws indexed, instanced primitives. </p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Executes a command list from a thread group.</p> + <p> You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z). </p> + <p>Returns nothing.</p> + + + <dd> <p> The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1. </p> </dd> + + + + + <p> Copies a region of a buffer from one resource to another. </p> + <p> Consider using the <strong>CopyResource</strong> method when copying an entire resource, and use this method for copying regions of a resource. </p><p><strong>CopyBufferRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the destination <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the destination resource. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the source resource, to start the copy from. </p> </dd> + + + <dd> <p> Specifies the number of bytes to copy. </p> </dd> + + + + + <p> This method uses the {{GPU}} to copy texture data between two locations. Both the source and the destination may reference texture data located within either a buffer resource or a texture resource.</p> + <p> The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopyTextureRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopyTextureRegion</strong> call. Invalid parameters to <strong>CopyTextureRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device. </p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. </p><p><strong>CopyTextureRegion</strong> performs the copy on the {{GPU}} (similar to a <code>memcpy</code> by the {{CPU}}). As a consequence, the source and destination resources: </p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must have compatible <strong>{{DXGI_FORMAT}}</strong>s (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyTextureRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> </ul><p><strong>CopyTextureRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopyTextureRegion</strong> can reinterpret the resource data between a few format types. </p><p> If your app needs to copy an entire resource, we recommend to use <strong>CopyResource</strong> instead. </p><strong>Note</strong>?? If you use <strong>CopyTextureRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.?<p><strong>CopyTextureRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p>Specifies the destination <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. +</p> </dd> + + + <dd> <p> The x-coordinate of the upper left corner of the destination region. </p> </dd> + + + <dd> <p> The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero. </p> </dd> + + + <dd> <p> The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_SOURCE}} state.</p> </dd> + + + <dd> <p> Specifies an optional {{D3D12_BOX}} that sets the size of the source texture to copy. </p> </dd> + + + + + + + + <p> Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on Tier_1 tiled resources, where reading and writing unmapped areas is invalid - refer to <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation. </p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy {{APIs}} like <strong>CopyTextureRegion</strong>.</p><p><strong>CopyTiles</strong> does copy data in a slightly different pattern than the standard copy methods.</p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and de-swizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy {{APIs}}, like <strong>CopyTextureRegion</strong>, to copy small mipmaps individually.</p> + <p> This method does not return a value. </p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D12Resource}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_COPY_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Copy a multi-sampled resource into a non-multi-sampled resource.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> A zero-based index, that identifies the destination subresource. Use <strong>{{D3D12CalcSubresource}}</strong> to calculate the subresource index if the parent resource is complex. </p> </dd> + + + <dd> <p> Source resource. Must be multisampled. </p> </dd> + + + <dd> <p> The source subresource of the source resource. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. </p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p> Bind an array of viewports to the rasterizer stage of the pipeline. </p> + <p> All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled. </p><p> Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array. </p><strong>Note</strong>?? Even though you specify float values to the members of the <strong>{{D3D12_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p> This method does not return a value. </p> + + + <dd> <p> Number of viewports to bind. The range of valid values is (0, {{D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}). </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_VIEWPORT}}</strong> structures to bind to the device. </p> </dd> + + + + + + + + <p>Sets the blend factor that modulate values for a pixel shader, render target, or both.</p> + <p> If you created the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage uses the non-{{NULL}} array of blend factors. </p><p> If you didn't create the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors. </p><p> If you pass {{NULL}}, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }. </p><p> {{D3D11_BLEND_BLEND_FACTOR}} and {{D3D11_BLEND_INV_BLEND_FACTOR}} are <strong>{{D3D12_BLEND}}</strong> enumeration constants. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Array of blend factors, one for each {{RGBA}} component. </p> </dd> + + + + + <p>Sets the reference value for depth stencil tests.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Reference value to perform against when doing a depth-stencil test. </p> </dd> + + + + + <p> Sets all shaders and programs most of the fixed-function state of the graphics processing unit ({{GPU}}) pipeline. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Pointer to the <strong>{{ID3D12PipelineState}}</strong> containing the pipeline state data. </p> </dd> + + + + + <p> Notifies the driver that it needs to synchronize multiple accesses to resources. </p> + <p>There are three types of barrier descriptions:</p><ul> <li> <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> - Transition barriers indicate that a set of subresources transition between different usages. The caller must specify the <em>before</em> and <em>after</em> usages of the subresources. The {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}} flag is used to transition all subresources in a resource at the same time. </li> <li> <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> - Aliasing barriers indicate a transition between usages of two different resources which have mappings into the same heap. The application can specify both the before and the after resource. Note that one or both resources can be {{NULL}} (indicating that any tiled resource could cause aliasing). </li> <li> <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> - Unordered access view barriers indicate all {{UAV}} accesses (read or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. The specified resource may be {{NULL}}. It is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which only read a {{UAV}}. Additionally, it is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which write to the same {{UAV}} if the application knows that it is safe to execute the {{UAV}} accesses in any order. The resource can be {{NULL}} (indicating that any {{UAV}} access could require the barrier). </li> </ul><p> When <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> is passed an array of resource barrier descriptions, the {{API}} behaves as if it was called N times (1 for each array element), in the specified order. Transitions should be batched together into a single {{API}} call when possible, as a performance optimization.</p><p> For descriptions of the usage states a subresource can be in, see the <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration and the Using Resource Barriers to Synchronize Resource States in Direct3D 12 section. </p><p> All subresources in a resource must be in the {{RENDER_TARGET}} state, or {{DEPTH_WRITE}} state, for render targets/depth-stencil resources respectively, when <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> is called. </p><p> When a back buffer is presented, it must be in the {{D3D12_RESOURCE_STATE_PRESENT}} state. If <strong>{{IDXGISwapChain1::Present1}}</strong> is called on a resource which is not in the {{PRESENT}} state, a debug layer warning will be emitted. </p><p>The resource usage bits are group into two categories, read-only and read/write.</p><p> The following usage bits are read-only: </p><ul> <li>{{D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_INDEX_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}}</li> <li>{{D3D12_RESOURCE_STATE_COPY_SOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_READ}}</li> </ul><p>The following usage bits are read/write:</p><ul> <li>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</li> </ul><p>The following usage bits are write-only:</p><ul> <li>{{D3D12_RESOURCE_STATE_COPY_DEST}}</li> <li>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</li> <li>{{D3D12_RESOURCE_STATE_STREAM_OUT}}</li> </ul><p> At most one write bit can be set. If any write bit is set, then no read bit may be set. If no write bit is set, then any number of read bits may be set. </p><p> At any given time, a subresource is in exactly one state (determined by a set of flags). The application must ensure that the states are matched when making a sequence of <strong>ResourceBarrier</strong> calls. In other words, the before and after states in consecutive calls to <strong>ResourceBarrier</strong> must agree. </p><p>To transition all subresources within a resource, the application can set the subresource index to {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}, which implies that all subresources are changed.</p><p> For improved performance, applications should use split barriers (refer to Synchronization and Multi-Engine). Applications should also batch multiple transitions into a single call whenever possible. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of submitted barrier descriptions. </p> </dd> + + + <dd> <p> Pointer to an array of barrier descriptions. </p> </dd> + + + + + <p> Executes a bundle. </p> + <p> Bundles inherit all state from the parent command list on which <strong>ExecuteBundle</strong> is called, except the pipeline state object and primitive topology. All of the state that is set in a bundle will affect the state of the parent command list. Note that <strong>ExecuteBundle</strong> is not a predicated operation. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12GraphicsCommandList}}</strong> that determines the bundle to be executed. </p> </dd> + + + + + <p> Changes the currently bound descriptor heaps that are associated with a command list. </p> + <p><strong>SetDescriptorHeaps</strong> can be called on a bundle, but the bundle descriptor heaps must match the calling command list descriptor heap. For more information on bundle restrictions, refer to Creating and Recording Command Lists and Bundles.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Number of descriptor heaps to bind. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D12DescriptorHeap}}</strong> objects for the heaps to set on the command list. </p> </dd> + + + + + <p> Sets the layout of the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets the layout of the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets a descriptor table into the compute root signature.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a descriptor table into the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a constant in the compute root signature. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a constant in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a group of constants in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p>The slot number for binding.</p> </dd> + + + <dd> <p>The number of constants to set in the root signature.</p> </dd> + + + <dd> <p>The source data for the group of constants to set.</p> </dd> + + + <dd> <p>The offset, in 32-bit values, to set the first constant of the group in the root signature.</p> </dd> + + + + + <p> Sets a group of constants in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The number of constants to set in the root signature. </p> </dd> + + + <dd> <p> The source data for the group of constants to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the first constant of the group in the root signature. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> Specifies the {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the Buffer. Textures are not supported. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets the view for the index buffer. </p> + <p>Only one index buffer can be bound to the graphics pipeline at any one time.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The view specifies the index buffer's address, size, and <strong>{{DXGI_FORMAT}}</strong>, as a reference to a <strong>{{D3D12_INDEX_BUFFER_VIEW}}</strong> structure. </p> </dd> + + + + + <p>Sets a {{CPU}} descriptor handle for the vertex buffers.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting vertex buffers. </p> </dd> + + + <dd> <p> The number of views in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies the vertex buffer views in an array of <strong>{{D3D12_VERTEX_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets the stream output buffer views. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting stream output buffers. </p> </dd> + + + <dd> <p> The number of entries in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_STREAM_OUTPUT_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets {{CPU}} descriptor handles for the render targets and depth stencil. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of entries in the <em>pRenderTargetDescriptors</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structures that describe the {{CPU}} descriptor handles that represents the start of the heap of render target descriptors. </p> </dd> + + + <dd> <p><strong>True</strong> means the handle passed in is the reference to a contiguous range of <em>NumRenderTargetDescriptors</em> descriptors. This case is useful if the set of descriptors to bind already happens to be contiguous in memory (so all that?s needed is a handle to the first one). For example, if <em>NumRenderTargetDescriptors</em> is 3 then the memory layout is taken as follows:</p><p>In this case the driver dereferences the handle and then increments the memory being pointed to.</p> <p><strong>False</strong> means that the handle is the first of an array of <em>NumRenderTargetDescriptors</em> handles. The false case allows an application to bind a set of descriptors from different locations at once. Again assuming that <em>NumRenderTargetDescriptors</em> is 3, the memory layout is taken as follows:</p><p>In this case the driver dereferences three handles that are expected to be adjacent to each other in memory.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap that holds the depth stencil descriptor. </p> </dd> + + + + + <p>Clears the depth-stencil resource.</p> + <p><strong>ClearDepthStencilView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> Returns nothing. </p> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the depth stencil to be cleared. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_CLEAR_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The resulting value identifies the type of data to clear (depth buffer, stencil buffer, or both). </p> </dd> + + + <dd> <p> A value to clear the depth buffer with. This value will be clamped between 0 and 1. </p> </dd> + + + <dd> <p> A value to clear the stencil buffer with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearDepthStencilView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a render target to one value. </p> + <p><strong>ClearRenderTargetView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a {{D3D12_CPU_DESCRIPTOR_HANDLE}} structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to be cleared. </p> </dd> + + + <dd> <p> A 4-component array that represents the color to fill the render target with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearRenderTargetView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a unordered-access view to the specified integer values. </p> + + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D12_GPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewUint</strong> clears the entire resource view. </p> </dd> + + + + + <p>Sets all the elements in a unordered access view to the specified float values.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewFloat</strong> clears the entire resource view. </p> </dd> + + + + + <p>Discards a resource.</p> + <p>The semantics of <strong>DiscardResource</strong> change based on the command list type.</p><p> For <strong>{{D3D12_COMMAND_LIST_TYPE_DIRECT}}</strong>, the following two rules apply: +</p><ul> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</strong> resource barrier state.</li> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG}} _ALLOW_DEPTH_STENCIL</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</strong>. +</li> </ul><p>For <strong>{{D3D12_COMMAND_LIST_TYPE_COMPUTE}}</strong>, the following rule applies: +</p><ul> <li>The resource must have the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}</strong> flag, and <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</strong> resource barrier state.</li> </ul><p><strong>DiscardResource</strong> is not supported on command lists with either <strong>{{D3D12_COMMAND_LIST_TYPE_BUNDLE}}</strong> nor <strong>{{D3D12_COMMAND_LIST_TYPE_COPY}}</strong>.</p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface for the resource to discard. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_DISCARD_REGION}}</strong> structure that describes details for the discard-resource operation. </p> </dd> + + + + + <p>Starts a query running.</p> + <p> In Direct3D 12, the usage of queries is more restricted than Direct3D 11. The following scenarios are no longer supported: </p><ul> <li> A call to <strong>BeginQuery</strong> followed by another call to <strong>BeginQuery</strong> without an intervening call to <strong>EndQuery</strong>. </li> <li> A call to <strong>EndQuery</strong> followed by <strong>EndQuery</strong> without an intervening call to <strong>BeginQuery</strong>. </li> </ul><p> Given these restrictions, there are 3 states that a query can be in: </p><ul> <li>Inactive (this is the initial state of all queries)</li> <li>Querying</li> <li>Predicating</li> </ul><p><strong>BeginQuery</strong> transitions a query from the inactive state to the querying state. <strong>EndQuery</strong> transitions a query from the querying state to the inactive state. <strong>SetPredication</strong> transitions the previous set query from the predicating state to the inactive state and transitions the newly set query from the inactive state to the predicating state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query within the query heap. </p> </dd> + + + + + <p> Ends a running query. </p> + <p> Refer to the remarks for <strong>BeginQuery</strong>, and to Queries. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query in the query heap. </p> </dd> + + + + + <p> </p><p> Extracts data from a query. <strong>ResolveQueryData</strong> works with all heap types (default, upload, and readback).? </p> + <p><strong>ResolveQueryData</strong> performs a batched operation which writes query data into a destination buffer. Query data is written contiguously to the destination buffer, and the parameter. </p><p> Binary occlusion queries write 64-bits per query. The least significant bit is either 0 or 1. The rest of the bits are 0. </p><p>The core runtime will validate the following:</p><ul> <li><em>StartIndex</em> and <em>NumQueries</em> are within range. </li> <li><em>AlignedDestinationBufferOffset</em> is a multiple of 8 bytes. </li> <li><em>DestinationBuffer</em> is a buffer. </li> <li> The written data will not overflow the output buffer. </li> <li> The query type must be supported by the command list type. </li> <li> The query type must be supported by the query heap. </li> </ul><p> The debug layer will issue a warning if the destination buffer is not in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the queries to resolve. </p> </dd> + + + <dd> <p> Specifies the type of query, one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies an index of the first query to resolve. </p> </dd> + + + <dd> <p> Specifies the number of queries to resolve. </p> </dd> + + + <dd> <p> Specifies an <strong>{{ID3D12Resource}}</strong> destination buffer, which must be in the state <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong>. </p> </dd> + + + <dd> <p> Specifies an alignment offset into the destination buffer. Must be a multiple of 8 bytes. </p> </dd> + + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command list, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command list, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Apps perform indirect draws/dispatches using the <strong>ExecuteIndirect</strong> method. </p> + <p>The semantics of this {{API}} are defined with the following pseudo-code:</p><p>Non-{{NULL}} pCountBuffer:</p><code>// Read draw count out of count buffer +{{UINT}} CommandCount = pCountBuffer-&gt;ReadUINT32(CountBufferOffset); CommandCount = min(CommandCount, MaxCommandCount) // Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; CommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>{{NULL}} pCountBuffer:</p><code>// Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; MaxCommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>The debug layer will issue an error if either the count buffer or the argument buffer are not in the {{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}} state. The core runtime will validate:</p><ul> <li><em>CountBufferOffset</em> and <em>ArgumentBufferOffset</em> are 4-byte aligned </li> <li><em>pCountBuffer</em> and <em>pArgumentBuffer</em> are buffer resources (any heap type) </li> <li> The offset implied by <em>MaxCommandCount</em>, <em>ArgumentBufferOffset</em>, and the drawing program stride do not exceed the bounds of <em>pArgumentBuffer</em> (similarly for count buffer) </li> <li>The command list is a direct command list or a compute command list (not a copy or {{JPEG}} decode command list)</li> <li>The root signature of the command list matches the root signature of the command signature</li> </ul><p> The functionality of two {{APIs}} from earlier versions of Direct3D, <code>DrawInstancedIndirect</code> and <code>DrawIndexedInstancedIndirect</code>, are encompassed by <strong>ExecuteIndirect</strong>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a <strong>{{ID3D12CommandSignature}}</strong>. The data referenced by <em>pArgumentBuffer</em> will be interpreted depending on the contents of the command signature. Refer to Indirect Drawing for the {{APIs}} that are used to create a command signature. </p> </dd> + + + <dd> <p>There are two ways that command counts can be specified:</p> <ul> <li> If <em>pCountBuffer</em> is not {{NULL}}, then <em>MaxCommandCount</em> specifies the maximum number of operations which will be performed. The actual number of operations to be performed are defined by the minimum of this value, and a 32-bit unsigned integer contained in <em>pCountBuffer</em> (at the byte offset specified by <em>CountBufferOffset</em>). </li> <li> If <em>pCountBuffer</em> is {{NULL}}, the <em>MaxCommandCount</em> specifies the exact number of operations which will be performed. </li> </ul> </dd> + + + <dd> <p> Specifies one or more <strong>{{ID3D12Resource}}</strong> objects, containing the command arguments. </p> </dd> + + + <dd> <p> Specifies an offset into <em>pArgumentBuffer</em> to identify the first command argument. </p> </dd> + + + <dd> <p> Specifies a reference to a <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that is the offset into <em>pCountBuffer</em>, identifying the argument count. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + + + + <p>This method configures the sample positions used by subsequent draw, copy, resolve, and similar operations.</p> + <p>The operational semantics of sample positions are determined by the various draw, copy, resolve, and other operations that can occur.</p><p><strong>CommandList:</strong> In the absense of any prior calls to SetSamplePositions in a CommandList, samples assume the default position based on the Pipeline State Object ({{PSO}}). The default positions are determined either by the {{SAMPLE_DESC}} portion of the {{PSO}} if it is present, or by the standard sample positions if the {{RASTERIZER_DESC}} portion of the {{PSO}} has ForcedSampleCount set to a value greater than 0.</p><p>After SetSamplePosition has been called, subsequent draw calls must use a {{PSO}} that specifies a matching sample count either using the {{SAMPLE_DESC}} portion of the {{PSO}}, or ForcedSampleCount in the {{RASTERIZER_DESC}} portion of the {{PSO}}.</p><p>SetSamplePositions can only be called on a graphics CommandList. It can't be called in a bundle; bundles inherit sample position state from the calling CommandList and don't modify it.</p><p>Calling SetSamplePositions(0, 0, {{NULL}}) reverts the sample positions to their default values.</p><p><strong>Clear RenderTarget:</strong> Sample positions are ignored when clearing a render target.</p><p><strong>Clear DepthStencil:</strong> When clearing the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of future rendering to the cleared surface or region; the contents of any uncleared regions produced using different sample positions become undefined.</p><p>When clearing the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored.</p><p><strong>Draw to RenderTarget:</strong> When drawing to a render target the sample positions can be changed for each draw call, even when drawing to a region that overlaps previous draw calls. The current sample positions determine the operational semantics of each draw call and samples are taken from taken from the stored contents of the render target, even if the contents were produced using different sample positions.</p><p><strong>Draw using DepthStencil:</strong> When drawing to a depth-stencil surface (read or write) or any region of it, the sample positions must be set to match those used to clear the affected region previously. To use a different sample position, the target region must be cleared first. The pixels outside the clear region are unaffected.</p><p>Hardware may store the depth portion or a depth-stencil surface as plane equations, and evaluate them to produce depth values when the application issues a read. Only the rasterizer and output-merger are required to suport programmable sample positions of the depth portion of a depth-stencil surface. Any other read or write of the depth portion that has been rendered with sample positions set may ignore them and instead sample at the standard positions.</p><p><strong>Resolve RenderTarget:</strong> When resolving a render target or any region of it, the sample positions are ignored; these {{APIs}} operate only on stored color values.</p><p><strong>Resolve DepthStencil:</strong> When resolving the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of past rendering to the resolved surface or region. To use a different sample position, the target region must be cleared first.</p><p>When resolving the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored; stencil resolves operate only on stored stencil values.</p><p><strong>Copy RenderTarget:</strong> When copying from a render target, the sample positions are ignored regardless of whether it is a full or partial copy.</p><p><strong>Copy DepthStencil (Full Subresource):</strong> When copying a full subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface. To use a different sample position, the target region must be cleared first.</p><p>On some hardware properties of the source surface (such as stored plane equations for depth values) transfer to the destination. Therefore, if the destination surface is subsequently drawn to, the sample positions originally used to generate the source content need to be used with the destination surface. The {{API}} requires this on all hardware for consistency even if it may only apply to some.</p><p><strong>Copy DepthStencil (Partial Subresource):</strong> When copying a partial subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface, similarly to copying a full subresource. However, if the content of an affected destination subresources is only partially covered by the copy, the contents of the uncovered portion within those subresources becomes undefined unless all of it was generated using the same sample positions as the copy source. To use a different sample position, the target region must be cleared first.</p><p>When copying a partial subresource from the stencil portion of a depth-stencil surface, the sample postions are ignored. It doesn?t matter what sample positions were used to generate content for any other areas of the destination buffer not covered by the copy ? those contents remain valid.</p><p><strong>Shader SamplePos:</strong> The {{HLSL}} SamplePos intrinsic is not aware of programmable sample positions and results returned to shaders calling this on a surface rendered with programmable positions is undefined. Applications must pass coordinates into their shader manually if needed. Similarly evaluating attributes by sample index is undefined with programmable sample positions.</p><p><strong>Transitioning out of {{DEPTH_READ}} or {{DEPTH_WRITE}} state:</strong> If a subresource in {{DEPTH_READ}} or {{DEPTH_WRITE}} state is transitioned to any other state, including {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some hardware might need to decompress the surface. Therefore, the sample positions must be set on the command list to match those used to generate the content in the source surface. Furthermore, for any subsequent transitions of the surface while the same depth data remains in it, the sample positions must continue to match those set on the command list. To use a different sample position, the target region must be cleared first.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p><p><strong>Transitioning out of {{RENDER_TARGET}} state:</strong> If a subresource in {{RENDER_TARGET}} state is transitioned to anything other than {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some implementations may need to decompress the surface. This decompression is agnostic to sample positions.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of samples to take, per pixel. This value can be 1, 2, 4, 8, or 16, otherwise the SetSamplePosition call is dropped. The number of samples must match the sample count configured in the {{PSO}} at draw time, otherwise the behavior is undefined.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of pixels that sample patterns are being specified for. This value can be either 1 or 4, otherwise the SetSamplePosition call is dropped. A value of 1 configures a single sample pattern to be used for each pixel; a value of 4 configures separate sample patterns for each pixel in a 2x2 pixel grid which is repeated over the render-target or viewport space, aligned to even coordintes.</p> <p>Note that the maximum number of combined samples can't exceed 16, otherwise the call is dropped. If NumPixels is set to 4, NumSamplesPerPixel can specify no more than 4 samples.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_reads_(NumSamplesPerPixel*NumPixels)</code></p> <p>Specifies an array of {{D3D12_SAMPLE_POSITION}} elements. The size of the array is NumPixels * NumSamplesPerPixel. If NumPixels is set to 4, then the first group of sample positions corresponds to the upper-left pixel in the 2x2 grid of pixels; the next group of sample positions corresponds to the upper-right pixel, the next group to the lower-left pixel, and the final group to the lower-right pixel.</p> <p>If centroid interpolation is used during rendering, the order of positions for each pixel determines centroid-sampling prioritiy. That is, the first covered sample in the order specified is chosen as the centroid sample location.</p> </dd> + + + + + + + + <p> Updates mappings of tile locations in reserved resources to memory locations in a resource heap. </p> + <p>Use <strong>UpdateTileMappings</strong> to map the virtual pages of a reserved resource to the physical pages of a heap. The mapping does not have to be in order. The operation is similar to <strong>{{ID3D11DeviceContext2::UpdateTileMappings}}</strong> with the one key difference that {{D3D12}} allows a reserved resource to have tiles from multiple heaps.</p><p> In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of heap tiles. </p><p> You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update: </p><ul> <li><strong>Reserved resource whose mappings are updated.</strong> Mappings start off all {{NULL}} when a resource is initially created. </li> <li><strong>Set of tile regions on the reserved resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <ul> <li><em>NumResourceRegions</em> specifies how many regions there are.</li> <li><em>pResourceRegionStartCoordinates</em> and <em>pResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire reserved resource, including all mipmaps, array slices, or both. </li> <li> <p> If <em>pResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pResourceRegionStartCoordinates</em> without having to send an array of <em>pResourceRegionSizes</em> all set to 1. </p> </li> </ul> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Heap that provides memory where tile mappings can go.</strong> If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a heap.</li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a heap (default), a count of tiles in the reserved resource to map to a single tile in a heap (sharing the tile), a count of tile mappings in the reserved resource to skip and leave as they are, or a count of tiles in the heap to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described reserved resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each reserved resource tile specified has a mapping specified. </p> <p><em>pRangeFlags</em>, <em>pHeapRangeStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the heap; otherwise, for each range i,<em>pRangeFlags[i]</em> identifies how the mappings in that range of tiles work: </p> <ul> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NONE}}</strong>, that range defines sequential tiles in the heap, with the number of tiles being <em>pRangeTileCounts[i]</em> and the starting location <em>pHeapRangeStartOffsets[i]</em>. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE}}</strong>, <em>pHeapRangeStartOffsets[i]</em> identifies the single tile in the heap to map to, and <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to that heap location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NULL}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{NULL}} mappings. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_SKIP}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{SKIP}} mappings. </li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D12_TILE_MAPPING_FLAG_NO_HAZARD}}</strong>. Refer to the description of this flag in <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>.</li> </ul><p> Reserved resources must follow the same rules for tile aliasing, initialization, and data inheritance as placed resources. See <strong>CreatePlacedResource</strong> for more details.</p><p> Here are some examples of common <strong>UpdateTileMappings</strong> cases: </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to the reserved resource. </p> </dd> + + + <dd> <p> The number of reserved resource regions. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> A reference to the resource heap. </p> </dd> + + + <dd> <p> The number of tile ranges. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D12_TILE_RANGE_FLAGS}}</strong> values that describes each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> An array of offsets into the resource heap. These are 0-based tile offsets, counting in tiles (not bytes). </p> </dd> + + + <dd> <p> An array of tiles. An array of values that specify the number of tiles in each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source reserved resource to a destination reserved resource.</p> + <p>Use <strong>CopyTileMappings</strong> to copy the tile mappings from one reserved resource to another, either to duplicate a resource mapping, or to initialize a new mapping before modifying it using <strong>UpdateTileMappings</strong>.</p><p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across reserved resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temporary location and from there written to the destination. </p><p>The destination and the source regions must each entirely fit in their resource or behavior is undefined and the debug layer will emit an error.</p><p> For more info on tiled resources, refer to the "DirectX tiled resources" section within DirectX programming. </p> + <p>This method does not return a value. If an {{E_OUTOFMEMORY}} occurs, the device is removed.</p> + + + <dd> <p>A reference to the destination reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination reserved resource. </p> </dd> + + + <dd> <p>A reference to the source reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source reserved resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the reserved region. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>. </p> </dd> + + + + + <p>Submits an array of command lists for execution.</p> + <p> The driver is free to patch the submitted command lists. It is the calling application?s responsibility to ensure that the graphics processing unit ({{GPU}}) is not currently reading the any of the submitted command lists from a previous execution. </p><p> Applications are encouraged to batch together command list executions to reduce fixed costs associated with submitted commands to the {{GPU}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of command lists to be executed. </p> </dd> + + + <dd> <p> The array of <strong>{{ID3D12CommandList}}</strong> command lists to be executed. </p> </dd> + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command queue, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the start of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXBeginEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p>Waits until the specified fence reaches or exceeds the specified value.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Fence}}</strong> object. </p> </dd> + + + <dd> <p>The value that the command queue is waiting for the fence to reach or exceed. So when <strong>{{ID3D12Fence::GetCompletedValue}}</strong> is greater than or equal to <em>Value</em>, the wait is terminated.</p> </dd> + + + + + <p>This method is used to determine the rate at which the {{GPU}} timestamp counter increments.</p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The {{GPU}} timestamp counter frequency (in ticks/second).</p> </dd> + + + + + <p>This method samples the {{CPU}} and {{GPU}} timestamp counters at the same moment in time. </p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The value of the {{GPU}} timestamp counter.</p> </dd> + + + <dd> <p>The value of the {{CPU}} timestamp counter.</p> </dd> + + + + + <p> Gets the description of the command queue. </p> + <p> The description of the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + <p> Reports the number of physical adapters (nodes) that are associated with this device. </p> + <p> The number of physical adapters (nodes) that this device has. </p> + + + + <p>Creates a command queue.</p> + <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command queue can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandQueue}}) will get the <strong>{{GUID}}</strong> of the interface to a command queue. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command queue. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> Specifies a {{D3D12_COMMAND_QUEUE_DESC}} that describes the command queue. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the command queue interface. See remarks. An input parameter. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandQueue}}</strong> interface for the command queue. </p> </dd> + + + + + <p>Creates a command allocator object.</p> + <p> The device creates command lists from the command allocator. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command allocator. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>-typed value that specifies the type of command allocator to create. The type of command allocator can be the type that records either direct command lists or bundles. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command allocator interface (<strong>{{ID3D12CommandAllocator}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command allocator can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandAllocator}}) will get the <strong>{{GUID}}</strong> of the interface to a command allocator. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandAllocator}}</strong> interface for the command allocator. </p> </dd> + + + + + + + + <p>Creates a compute pipeline state object.</p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the pipeline state object. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure that describes compute pipeline state. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the pipeline state interface (<strong>{{ID3D12PipelineState}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the pipeline state can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12PipelineState}}) will get the <strong>{{GUID}}</strong> of the interface to a pipeline state. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12PipelineState}}</strong> interface for the pipeline state object. The pipeline state object is an immutable state object. It contains no methods. </p> </dd> + + + + + + + + <p> Gets information about the features that are supported by the current graphics driver.</p> + <p>Refer to Capability Querying.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns <strong>{{E_INVALIDARG}}</strong> if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter. </p> + + + <dd> <p> A <strong>{{D3D12_FEATURE}}</strong>-typed value that describes the feature to query for support. </p> </dd> + + + <dd> <p> The passed structure is filled with data that describes the feature support. To see the structure types, see the Remarks section in <strong>{{D3D12_FEATURE}} enumeration</strong>. </p> </dd> + + + <dd> <p> The size of the structure passed to the <em>pFeatureSupportData</em> parameter. </p> </dd> + + + + + + + + <p> Gets the size of the handle increment for the given type of descriptor heap. This value is typically used to increment a handle into a descriptor array by the correct amount.</p> + <p>The descriptor size returned by this method is used as one input to the helper structures <strong>{{CD3DX12_CPU_DESCRIPTOR_HANDLE}}</strong> and <strong>{{CD3DX12_GPU_DESCRIPTOR_HANDLE}}</strong>.</p> + <p> Returns the size of the handle increment for the given type of descriptor heap, including any necessary padding.</p> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to get the size of the handle increment for. </p> </dd> + + + + + + + + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the shader resource.</p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure that describes the shader-resource view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{SRVs}} target a full buffer and are typed (not raw or structured), and for textures {{SRVs}} target a full texture, all mips and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the shader-resource view. This handle can be created in a shader-visible or non-shader-visible descriptor heap.</p> </dd> + + + + + <p> Creates a view for unordered accessing. </p> + <p> Returns nothing. </p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the unordered access. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p> The <strong>{{ID3D12Resource}}</strong> for the counter (if any) associated with the {{UAV}}. </p> <p> If <em>pCounterResource</em> is not specified, the <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be 0. </p> <p> If <em>pCounterResource</em> is specified, then there is a counter associated with the {{UAV}}, and the runtime performs validation of the following requirements: </p> <ul> <li> The <strong>StructureByteStride</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be greater than 0. </li> <li> The format must be {{DXGI_FORMAT_UNKNOWN}}. </li> <li> The {{D3D12_BUFFER_UAV_FLAG_RAW}} flag (a <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong> enumeration constant) must not be set. </li> <li> Both of the resources (<em>pResource</em> and <em>pCounterResource</em>) must be buffers. </li> <li> The <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be a multiple of 4 bytes, and must be within the range of the counter resource. </li> <li><em>pResource</em> cannot be {{NULL}} </li> <li><em>pDesc</em> cannot be {{NULL}}. </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure that describes the unordered-access view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{UAVs}} target a full buffer and are typed, and for textures {{UAVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the unordered-access view. </p> </dd> + + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the render target. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure that describes the render-target view.</p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and {{RTVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the render-target view. </p> </dd> + + + + + + + + <p>Create a sampler object that encapsulates sampling information for a texture.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D12_SAMPLER_DESC}}</strong> structure that describes the sampler. </p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the sampler.</p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of destination descriptor ranges to copy to. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy to. </p> </dd> + + + <dd> <p> An array of destination descriptor range sizes to copy to. </p> </dd> + + + <dd> <p> The number of source descriptor ranges to copy from. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy from. </p> </dd> + + + <dd> <p> An array of source descriptor range sizes to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of descriptors to copy. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the destination descriptors to start to copy to. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the source descriptors to start to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Gets the size and alignment of memory required for a collection of resources on this adapter. </p> + <p> When using <strong>CreatePlacedResource</strong>, the application must use this method to understand the size and alignment characteristics of texture resources. The results of this method vary depending on the particular adapter, and must be treated as unique to this adapter and driver version. </p><p> Applications cannot use the output of <strong>GetResourceAllocationInfo</strong> to understand packed mip properties of textures. To understand packed mip properties of textures, applications must use <strong>GetResourceTiling</strong>. Texture resource sizes significantly differ from the information returned by <strong>GetResourceTiling</strong>, because some adapter architectures allocate extra memory for textures to reduce the effective bandwidth during common rendering scenarios. This even includes textures that have constraints on their texture layouts or have standardized texture layouts. That extra memory cannot be sparsely mapped or remapped by an application using <strong>CreateReservedResource</strong> and <strong>UpdateTileMappings</strong>, so it isn't reported in <strong>GetResourceTiling</strong>. </p><p> Applications can forgo using <strong>GetResourceAllocationInfo</strong> for buffer resources (<strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER). Buffers have the same size on all adapters, which is merely the smallest multiple of 64KB which is greater or equal to <strong>{{D3D12_RESOURCE_DESC}}</strong>::<strong>Width</strong>. </p><p> When multiple resource descriptions are passed in, the C++ algorithm for calculating a structure size and alignment are used. For example, a three-element array with two tiny 64KB-aligned resources and a tiny 4MB-aligned resource reports differing sizes based on the order of the array. If the 4MB aligned resource is in the middle, the resulting <strong>Size</strong> is 12MB. Otherwise, the resulting <strong>Size</strong> is 8MB. The <strong>Alignment</strong> returned would always be 4MB, as it is the superset of all alignments in the resource array. </p> + <p> Returns a <strong>{{D3D12_RESOURCE_ALLOCATION_INFO}}</strong> structure that provides info about video memory allocated for the specified array of resources. </p> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters). Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> The number of resource descriptors in the <em>pResourceDescs</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RESOURCE_DESC}}</strong> structures that described the resources to get info about. </p> </dd> + + + + + <p> Divulges the equivalent custom heap properties that are used for non-custom heap types, based on the adapter's architectural properties. </p> + <p> Returns a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the specified heap. The <strong>Type</strong> member of the returned {{D3D12_HEAP_PROPERTIES}} is always {{D3D12_HEAP_TYPE_CUSTOM}}. </p><p> When <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>::UMA is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L1}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{TRUE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p> + + + <dd> <p> For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter). Each bit in the mask corresponds to a single node. Only 1 bit must be set. See Multi-Adapter. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the heap to get properties for. {{D3D12_HEAP_TYPE_CUSTOM}} is not supported as a parameter value. </p> </dd> + + + + + <p> Creates both a resource and an implicit heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. </p> + <p> This method creates both a resource and a heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. The created heap is known as an implicit heap, because the heap object cannot be obtained by the application. The application must ensure the {{GPU}} will no longer read or write to this resource before releasing the final reference on the resource. </p><p> The implicit heap is made resident for {{GPU}} access before the method returns to the application. See Residency. </p><p> The resource {{GPU}} {{VA}} mapping cannot be changed. See <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong> and Volume Tiled Resources. </p><p> This method may be called by multiple threads concurrently. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. For other possible return values, see Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the resource's heap. </p> </dd> + + + <dd> <p> Heap options, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a <strong>{{D3D12_HEAP_TYPE}}</strong>_UPLOAD heap, <em>InitialResourceState</em> must be <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialResourceState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_RENDER_TARGET or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> <p> While riidResource is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to memory that receives the requested interface reference to the created resource object. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> is valid. </p> </dd> + + + + + <p> Creates a heap that can be used with placed resources and reserved resources. </p> + <p><strong>CreateHeap</strong> creates a heap that can be used with placed resources and reserved resources. Before releasing the final reference on the heap, the application must ensure that the {{GPU}} will no longer read or write to this heap. Placed resource objects will hold a reference on the heap they are created on, but reserved resources will not hold a reference for each mapping made to a heap. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the heap. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the heap interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the heap can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Heap}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a heap. <em>riid</em> is, most commonly, the {{GUID}} for <strong>{{ID3D12Heap}}</strong>, but it may be any {{GUID}} for any interface. If the resource object does not support the interface for the specified {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the heap. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p> Creates a resource that is placed in a specific heap. Placed resources are the lightest weight resource objects available, and are the fastest to create and destroy. </p> + <p><strong>CreatePlacedResource</strong> is similar to fully mapping a reserved resource to an offset within a heap; but the virtual address space associated with a heap may be reused as well. </p><p> Placed resources are lighter weight than committed resources to create and destroy, because no heap is created or destroyed during this operation. However, placed resources enable an even lighter weight technique to reuse memory than resource creation and destruction: reuse through aliasing and aliasing barriers. Multiple placed resources may simultaneously overlap each other on the same heap, but only a single overlapping resource can be used at a time. </p><p> There are two placed resource usage semantics, a simple model and an advanced model. The simple model is recommended, and is the most likely model for tool support, until the advanced model is proven to be required by the app. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Heap}}</strong> interface that represents the heap in which the resource is placed. </p> </dd> + + + <dd> <p> The offset, in bytes, to the resource. The <em>HeapOffset</em> must be a multiple of the resource's alignment, and <em>HeapOffset</em> plus the resource size must be smaller than or equal to the heap size. <strong>GetResourceAllocationInfo</strong> must be used to understand the sizes of texture resources. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a {{D3D12_HEAP_TYPE_UPLOAD}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_GENERIC_READ}}. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. </p> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. Although <strong>riid</strong> is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the resource. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> and other parameters are valid. </p> </dd> + + + + + + + + <p> Creates a shared handle to an heap, resource, or fence object. </p> + <p> Both heaps and committed resources can be shared. Sharing a committed resource shares the implicit heap along with the committed resource description, such that a compatible resource description can be mapped to the heap from another device. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following values: </p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid. </li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource. </li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li> Possibly other error codes that are described in the Direct3D 12 Return Codes topic. </li> </ul> + + + <dd> <p> A reference to the <strong>{{ID3D12DeviceChild}}</strong> interface that represents the heap, resource, or fence object to create for sharing. The following interfaces (derived from <strong>{{ID3D12DeviceChild}}</strong>) are supported: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + <dd> <p> A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a <strong>Boolean</strong> value that determines whether child processes can inherit the returned handle. </p> <p> Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor. </p> <p> The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights. </p> </dd> + + + <dd> <p>Currently the only value this parameter accepts is {{GENERIC_ALL}}.</p> </dd> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the shared heap. The name is limited to {{MAX_PATH}} characters. Name comparison is case-sensitive. </p> <p> If <em>Name</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace. </p> <p> The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users. </p> <p> The object can be created in a private namespace. For more information, see Object Namespaces. </p> </dd> + + + <dd> <p> A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource. </p> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using {{HANDLE}} and {{REFIID}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The handle that was output by the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12Heap}}) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using Name and Access. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The name that was optionally passed as the <em>Name</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The access level that was specified in the <em>Access</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the shared handle. </p> </dd> + + + + + <p>Makes objects resident for the device.</p> + <p><strong>MakeResident</strong> loads the data associated with a resource from disk, and re-allocates the memory from the resource's appropriate memory pool. This method should be called on the object which owns the physical memory. +</p><p>Use this method, and <strong>Evict</strong>, to manage {{GPU}} video memory, noting that this was done automatically in {{D3D11}}, but now has to be done by the app in {{D3D12}}.</p><p><strong>MakeResident</strong> and <strong>Evict</strong> can help applications manage the residency budget on many adapters. <strong>MakeResident</strong> explicitly pages-in data and, then, precludes page-out so the {{GPU}} can access the data. <strong>Evict</strong> enables page-out.</p><p>Some {{GPU}} architectures do not benefit from residency manipulation, due to the lack of sufficient {{GPU}} virtual address space. Use <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> and <strong>{{IDXGIAdapter3::QueryVideoMemoryInfo}}</strong> to recognize when the maximum {{GPU}} {{VA}} space per-process is too small or roughly the same size as the residency budget. For such architectures, the residency budget will always be constrained by the amount of {{GPU}} virtual address space. <strong>Evict</strong> will not free-up any residency budget on such systems. +</p><p>Applications must handle <strong>MakeResident</strong> failures, even if there appears to be enough residency budget available. Physical memory fragmentation and adapter architecture quirks can preclude the utilization of large contiguous ranges. Applications should free up more residency budget before trying again. +</p><p><strong>MakeResident</strong> is ref-counted, such that <strong>Evict</strong> must be called the same amount of times as <strong>MakeResident</strong> before <strong>Evict</strong> takes effect. Objects that support residency are made resident during creation, so a single <strong>Evict</strong> call will actually evict the object. </p><p>Applications must use fences to ensure the {{GPU}} doesn't use non-resident objects. <strong>MakeResident</strong> must return before the {{GPU}} executes a command list that references the object. <strong>Evict</strong> must be called after the {{GPU}} finishes executing a command list that references the object.</p><p>Evicted objects still consume the same {{GPU}} virtual address and same amount of {{GPU}} virtual address space. Therefore, resource descriptors and other {{GPU}} virtual address references are not invalidated after <strong>Evict</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to make resident for the device. </p> </dd> + + + <dd> <p>A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + <p>Enables the page-out of data, which precludes {{GPU}} access of that data.</p> + <p><strong>Evict</strong> persists the data associated with a resource to disk, and then removes the resource from the memory pool where it was located. This method should be called on the object which owns the physical memory: either a committed resource (which owns both virtual and physical memory assignments) or a heap - noting that reserved resources do not have physical memory, and placed resources are borrowing memory from a heap. +</p><p>Refer to the remarks for <strong>MakeResident</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to evict from the device. </p> </dd> + + + <dd> <p> A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + + + + <p>Gets the reason that the device was removed.</p> + <p>This method returns the reason that the device was removed.</p> + + + + <p> Gets a resource layout that can be copied. Helps the app fill-in <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> when suballocating space in upload heaps. </p> + <p> This routine assists the application in filling out <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structures, when suballocating space in upload heaps. The resulting structures are {{GPU}} adapter-agnostic, meaning that the values will not vary from one {{GPU}} adapter to the next. <strong>GetCopyableFootprints</strong> uses specified details about resource formats, texture layouts, and alignment requirements (from the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure) to fill out the subresource structures. Applications have access to all these details, so this method, or a variation of it, could be written as part of the app. </p> + <p> This method does not return a value. </p> + + + + <p> Creates a query heap. A query heap contains an array of queries. </p> + <p> Refer to Queries for more information. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the query heap in a <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies a {{REFIID}} that uniquely identifies the heap. </p> </dd> + + + <dd> <p> Specifies a reference to the heap, that will be returned on successful completion of the method. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p>A development-time aid for certain types of profiling and experimental prototyping.</p> + <p>This method is only useful during the development of applications. It enables developers to profile {{GPU}} usage of multiple algorithms without experiencing artifacts from dynamic frequency scaling.</p><p>Do not call this method in normal execution for a shipped application. This method only works while the machine is in developer mode. If developer mode is not enabled, then device removal will occur. Instead, call this method in response to an off-by-default, developer-facing switch. Calling it in response to command line parameters, config files, registry keys, and developer console commands are reasonable usage scenarios. </p><p>A stable power state typically fixes {{GPU}} clock rates at a slower setting that is significantly lower than that experienced by users under normal application load. This reduction in clock rate affects the entire system. Slow clock rates are required to ensure processors don?t exhaust power, current, and thermal limits. Normal usage scenarios commonly leverage a processors ability to dynamically over-clock. Any conclusions made by comparing two designs under a stable power state should be double-checked with supporting results from real usage scenarios.</p> + <p>This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>Specifies a {{BOOL}} that turns the stable power state on or off.</p> </dd> + + + + + <p> This method creates a command signature. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Describes the command signature to be created with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12RootSignature}}</strong> that the command signature applies to. </p> <p>The root signature is required if any of the commands in the signature will update bindings on the pipeline. If the only command present is a draw or dispatch, the root signature parameter can be set to {{NULL}}.</p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command signature interface (<strong>{{ID3D12CommandSignature}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command signature can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12CommandSignature}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a command signature. </p> </dd> + + + <dd> <p> Specifies a reference, that on successful completion of the method will point to the created command signature (<strong>{{ID3D12CommandSignature}}</strong>). </p> </dd> + + + + + <p> Gets info about how a tiled resource is broken into tiles. </p> + <p> To estimate the total resource size of textures needed when calculating heap sizes and calling <strong>CreatePlacedResource</strong>, use <strong>GetResourceAllocationInfo</strong> instead of <strong>GetResourceTiling</strong>. <strong>GetResourceTiling</strong> cannot be used for this. </p><p> For more information on tiled resources, refer to Volume Tiled Resources. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a tiled <strong>{{ID3D12Resource}}</strong> to get info about. </p> </dd> + + + <dd> <p> A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_PACKED_MIP_INFO}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of {{D3D12_TILE_SHAPE}} to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of {{D3D12_SUBRESOURCE_TILING}} to zeros, except the <em>StartTileIndexInOverallResource</em> member, which <strong>GetResourceTiling</strong> sets to {{D3D12_PACKED_TILE}} (0xffffffff). The {{D3D12_PACKED_TILE}} constant indicates that the whole <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p> Gets a locally unique identifier for the current device (adapter). </p> + <p> This method returns a unique identifier for the adapter that is specific to the adapter hardware. Applications can use this identifier to define robust mappings across various {{APIs}} (Direct3D 12, {{DXGI}}). </p><p> A locally unique identifier ({{LUID}}) is a 64-bit value that is guaranteed to be unique only on the system on which it was generated. The uniqueness of a locally unique identifier ({{LUID}}) is guaranteed only until the system is restarted. </p> + <p> The locally unique identifier for the adapter. </p> + + + + <p>Manages a pipeline library, in particular loading and retrieving individual {{PSOs}}.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + + + + <p>Adds the input {{PSO}} to an internal database with the corresponding name.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the name already exists, {{E_OUTOFMEMORY}} if unable to allocate storage in the library. +</p> + + + <dd> <p>Specifies a unique name for the library. Overwriting is not supported.</p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12PipelineState}}</strong> to add.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. </p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. The input desc is matched against the data in the current library database, and remembered in order to prevent duplication of {{PSO}} contents. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Returns the amount of memory required to serialize the current contents of the database. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns a {{SIZE_T}} object, containing the size required in bytes.</p> + + + + <p>Writes the contents of the library to the provided memory, to be provided back to the runtime at a later time. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the buffer provided isn?t big enough. +</p> + + + <dd> <p>Specifies a reference to the data. This memory must be readable and writeable up to the input size. This data can be saved and provided to <strong>CreatePipelineLibrary</strong> at a later time, including future instances of this or other processes. The data becomes invalidated if the runtime or driver is updated, and is not portable to other hardware or devices.</p> </dd> + + + <dd> <p>The size provided must be at least the size returned from <strong>GetSerializedSize</strong>. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter, and expands on the range of methods provided by <strong>{{ID3D12Device}}</strong>.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p> + + + + <p>Creates a cached pipeline library. By grouping {{PSOs}} that are expected to share data together into a library before serializing, there?s less overhead due to metadata, as well as opportunity to avoid redundant or duplicated data from being written to disk.</p> + <p>A pipeline library enables the following operations.</p><ul> <li>Adding Pipeline State Objects ({{PSOs}}) to an existing library object (refer to <strong>StorePipeline</strong>). </li> <li>Serializing a {{PSO}} library into a contiguous block of memory for disk storage (refer to <strong>Serialize</strong>).</li> <li>De-serializing a {{PSO}} library from persistent storage (this is handled by <strong>CreatePipelineLibrary</strong>).</li> <li>Retrieving individual {{PSOs}} from the library (refer to <strong>LoadComputePipeline</strong> and <strong>LoadGraphicsPipeline</strong>).</li> </ul><p>At no point in the lifecycle of a pipeline library is there duplication between {{PSOs}} with identical sub-components. +A recommended solution for managing the lifetime of the provided reference while only having to ref-count the returned interface is to leverage <strong>{{ID3D12Object::SetPrivateDataInterface}}</strong>, and use an object which implements <strong>{{IUnknown}}</strong>, and frees the memory when the ref-count reaches 0. +</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the blob is corrupted or unrecognized, {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} if the provided data came from an old driver or runtime, and {{D3D12_ERROR_ADAPTER_NOT_FOUND}} if the data came from different hardware.</p><p>If you pass nullptr for <em>ppPipelineLibrary</em> then the runtime will still perform the validation of the blob but avoid creating the actual library and returns {{S_FALSE}} if the library would have been created.</p><p>Also, the feature requires an updated driver, and attempting to use it on old drivers will return {{E_NOTIMPL}}.</p> + + + <dd> <p> If the input library blob is empty, the initial contents of the library is empty. If the input library blob is not empty, it is validated for integrity, parsed, and the reference is stored. The reference provided as input to this method must remain valid for the lifetime of the object returned. For efficiency reasons, the data is not copied. +</p> </dd> + + + <dd> <p>Specifies the length of <em>pLibraryBlob</em> in bytes.</p> </dd> + + + <dd> <p>Specifies a unique {{REFIID}} for the <strong>{{ID3D12PipelineLibrary}}</strong> object. +Typically set this and the following parameter with the macro <code>{{IID_PPV_ARGS}}(&amp;Library)</code>, where <em>Library</em> is the name of the object.</p> </dd> + + + <dd> <p>Returns a reference to the created library.</p> </dd> + + + + + <p>Specifies an event that should be fired when one or more of a collection of fences reach specific values.</p> + <p>To specify a single fence refer to the <strong>SetEventOnCompletion</strong> method.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the <strong>{{ID3D12Fence}}</strong> objects.</p> </dd> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the fence values required for the event is to be signaled.</p> </dd> + + + <dd> <p>Specifies the number of fences to be included.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_MULTIPLE_FENCE_WAIT_FLAGS}}</strong> that determines how to proceed.</p> </dd> + + + <dd> <p>A handle to the event object.</p> </dd> + + + + + <p> </p><p>This method sets residency priorities of a specified list of objects.</p> + <p>For more information, refer to Residency.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies the number of objects in the <em>ppObjects</em> and <em>pPriorities</em> arrays.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, containing references to <strong>{{ID3D12Pageable}}</strong> objects.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, of <strong>{{D3D12_RESIDENCY_PRIORITY}}</strong> values for the list of objects.</p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + <p> Deserializes a root signature so you can determine the layout definition (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). </p> + <p>This function has been superceded by <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong>.</p><p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12RootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12RootSignatureDeserializer::GetRootSignature}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). <strong>{{ID3D12RootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12RootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Serializes a root signature of any version that can be passed to <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p> + <p> If an application procedurally generates a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, it must pass a reference to this <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> in a call to <strong>{{D3D12SerializeVersionedRootSignature}}</strong> to make the serialized form. The application then passes the serialized form to which <em>ppBlob</em> points into <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p><p> If a shader has been authored with a root signature in it (when that capability is added), the compiled shader will contain a serialized root signature in it already. </p><p> The function signature {{PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function was released with the Windows 10 Anniversary Update (14393) and supersedes <strong>{{D3D12SerializeRootSignature}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Gets a debug interface. </p> + <p> The function signature {{PFN_D3D12_GET_DEBUG_INTERFACE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the debug interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the debug interface can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Debug}}</strong>) will get the <strong>{{GUID}}</strong> of the debug interface. </p> </dd> + + + <dd> <p> The debug interface, as a reference to reference to void. See <strong>{{ID3D12Debug}}</strong> and <strong>{{ID3D12DebugDevice}}</strong>. </p> </dd> + + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Specifies options for the amount of information to report about a live device object's lifetime. </p> + <p> This enumeration is used by <strong>{{ID3D12DebugDevice::ReportLiveDeviceObjects}}</strong>. </p> + + + <dd></dd> + + + <dd> <p>Obtain a summary about a live device object's lifetime. </p> </dd> + + + <dd> <p>Obtain detailed information about a live device object's lifetime. </p> </dd> + + + <dd> <p> Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the data type of the memory pointed to by the <em>pData</em> parameter of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + + <p>Flags for optional {{D3D12}} Debug Layer features.</p> + <p>This enum is used by <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + <dd> <p>The default. No optional Debug Layer features.</p> </dd> + + + <dd> <p>The Debug Layer is allowed to deliberately change functional behavior of an application in order to help identify potential errors. By default, the Debug Layer allows most invalid {{API}} usage to run the natural course.</p> </dd> + + + <dd> <p>Performs additional resource state validation of resources set in descriptors at the time <strong>{{ID3D12CommandQueue::ExecuteCommandLists}}</strong> is called. By design descriptors can be changed even after submitting command lists assuming proper synchronization. Conservative resource state tracking ignores this allowance and validates all resources used in descriptor tables when <strong>ExecuteCommandLists</strong> is called. The result may be false validation errors.</p> </dd> + + + <dd> <p>Disables validation of bundle commands by virtually injecting checks into the calling command list validation paths.</p> </dd> + + + <dd> <p>Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of shader patching used by {{GPU}}-Based Validation at either the device or command list level.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p> + + + <dd> <p>No shader patching is to be done. This will retain the original shader bytecode. Can lead to errors in some of the {{GPU}}-Based Validation state tracking as the unpatched shader may still change resource state (see Common state promotion) but the promotion will be untracked without patching the shader. This can improve performance but no validation will be performed and may also lead to misleading {{GPU}}-Based Validation errors. Use this mode very carefully. </p> </dd> + + + <dd> <p>Shaders can be patched with resource state tracking code but no validation. This may improve performance but no validation will be performed.</p> </dd> + + + <dd> <p>The default. Shaders are patched with validation code but erroneous instructions will still be executed. </p> </dd> + + + <dd> <p>Shaders are patched with validation code and erroneous instructions are skipped in execution. This can help avoid crashes or device removal.</p> </dd> + + + <dd> <p>Unused, simply the count of the number of modes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how {{GPU}}-Based Validation handles patched pipeline states during <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> and <strong>{{ID3D12Device::CreateComputePipelineState}}</strong>.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p><p>Generally speaking most application developers are likely to leave this parameter unchanged. However, if the overhead of deferring patched {{PSO}} creation is suspected to be too much of a performance problem, then developers should consider changing this setting.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Indicates the debug parameter type used by <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugCommandList1::GetDebugParameter}}</strong>.</p> + + + + <p> Specifies categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D12InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters. </p> + <p>This is part of the Information Queue feature, refer to the <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + + <p> Debug message severity levels for an information queue.</p> + <p> Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>AddApplicationMessage</strong> and <strong>AddMessage</strong>. </p> + + + <dd> <p> Indicates a corruption error. </p> </dd> + + + <dd> <p> Indicates an error. </p> </dd> + + + <dd> <p> Indicates a warning. </p> </dd> + + + <dd> <p> Indicates an information message. </p> </dd> + + + <dd> <p> Indicates a message other than corruption, error, warning or information. </p> </dd> + + + + + <p> Specifies debug message {{IDs}} for setting up an info-queue filter (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>); use these messages to allow or deny message categories to pass through the storage and retrieval filters. These {{IDs}} are used by methods such as <strong>{{ID3D12InfoQueue::GetMessage}}</strong> or <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. </p> + <p> This enum is used by <strong>AddMessage</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes settings used by {{GPU}}-Based Validation. </p> + <p>Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> to configure device-wide {{GPU}}-Based Validation settings. </p><p>Individual command lists can override the default shader patch mode using <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong>.</p> + + + <dd> <p>Specifies a {{UINT}} that limits the number of messages that can be stored in the {{GPU}}-Based Validation message log. The default value is 256. Since many identical errors can be produced in a single Draw/Dispatch call it may be useful to increase this number. Note this can become a memory burden if a large number of command lists are used as there is a committed message log per command list.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that {{GPU}}-Based Validation uses when injecting validation code into shaders, except when overridden by per-command-list {{GPU}}-Based Validation settings (see <strong>{{D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS}}</strong>). The default value is {{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION}}.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS}}</strong> that indicates how {{GPU}}-Based Validation handles patching pipeline states. The default value is {{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE}}.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes per-command-list settings used by {{GPU}}-Based Validation. </p> + <p> Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> to configure per-command-list {{GPU}}-Based Validation settings. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that overrides the default device-level shader patch mode (see <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong>). By default this value is initialized to the <em>DefaultShaderPatchMode</em> assigned to the device (see <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong>.</p> </dd> + + + + + <p> A debug message in the Information Queue.</p> + <p> This structure is returned from <strong>{{ID3D12InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D12InfoQueue}}</strong>). </p> + + + <dd> <p> The category of the message. See <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>. </p> </dd> + + + <dd> <p> The severity of the message. See <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>. </p> </dd> + + + <dd> <p> The {{ID}} of the message. See <strong>{{D3D12_MESSAGE_ID}}</strong>. </p> </dd> + + + <dd> <p> The message string. </p> </dd> + + + <dd> <p> The length of <em>pDescription</em>, in bytes. </p> </dd> + + + + + <p> Allow or deny certain types of messages to pass through a filter.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p>Number of message categories to allow or deny. </p> </dd> + + + <dd> <p> Array of message categories to allow or deny. Array must have at least <em>NumCategories</em> members (see <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>). </p> </dd> + + + <dd> <p> Number of message severity levels to allow or deny. </p> </dd> + + + <dd> <p> Array of message severity levels to allow or deny. Array must have at least <em>NumSeverities</em> members (see <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>). </p> </dd> + + + <dd> <p> Number of message {{IDs}} to allow or deny. </p> </dd> + + + <dd> <p> Array of message {{IDs}} to allow or deny. Array must have at least <em>NumIDs</em> members (see <strong>{{D3D12_MESSAGE_ID}}</strong>). </p> </dd> + + + + + <p> Debug message filter; contains a lists of message types to allow or deny.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p> Specifies types of messages that you want to allow. See <strong>{{D3D12_INFO_QUEUE_FILTER_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies types of messages that you want to deny. </p> </dd> + + + + + <p> A debug interface controls debug settings and validates pipeline state. It can only be used if the debug layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Enables the debug layer. </p> + <p>To enable the debug layers using this {{API}}, it must be called before the {{D3D12}} device is created. Calling this {{API}} after creating the {{D3D12}} device will cause the {{D3D12}} runtime to remove the device.</p> + <p> This method does not return a value. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds {{GPU}}-Based Validation and Dependent Command Queue Synchronization to the debug layer.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables the debug layer.</p> + <p>This method is identical to <strong>{{ID3D12Debug::EnableDebugLayer}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This method enables or disables {{GPU}}-Based Validation ({{GBV}}) before creating a device with the debug layer enabled. </p> + <p>{{GPU}}-Based Validation can only be enabled/disabled prior to creating a device. By default, {{GPU}}-Based Validation is disabled. To disable {{GPU}}-Based Validation after initially enabling it the device must be fully released and recreated. </p><p>For more information, see Using {{D3D12}} Debug Layer {{GPU}}-Based Validation.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable {{GPU}}-Based Validation, otherwise {{FALSE}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables dependent command queue synchronization when using a {{D3D12}} device with the debug layer enabled.</p> + <p>Dependent Command Queue Synchronization is a {{D3D12}} Debug Layer feature that gives the debug layer the ability to track resource states more accurately when enabled. Dependent Command Queue Synchronization is enabled by default. </p><p>When Dependent Command Queue Synchronization is enabled, the debug layer holds back actual submission of {{GPU}} work until all outstanding fence <strong>Wait</strong> conditions are met. This gives the debug layer the ability to make reasonable assumptions about {{GPU}} state (such as resource states) on the {{CPU}}-timeline when multiple command queues are potentially doing concurrent work.</p><p>With Dependent Command Queue Synchronization disabled, all resource states tracked by the debug layer are cleared each time <strong>{{ID3D12CommandQueue::Signal}}</strong> is called. This results in significantly less useful resource state validation.</p><p>Disabling Dependent Command Queue Synchronization may reduce some debug layer performance overhead when using multiple command queues. However, it is suggested to leave it enabled unless this overhead is problematic. Note that applications that use only a single command queue will see no performance changes with Dependent Command Queue Synchronization disabled.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable Dependent Command Queue Synchronization, otherwise {{FALSE}}.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies device-wide debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies the {{D3D12}} optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to get.</p> </dd> + + + <dd> <p>Debug parameter data to set.</p> </dd> + + + <dd> <p>Size in bytes of the data pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the amount of information to report on a device object's lifetime.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> </dd> + + + + + <p> This interface represents a graphics device for debugging. </p> + + + + <p> Set a bit field of flags that will turn debug features on and off. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> Feature-mask flags, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, that feature will be set to on; otherwise, the feature will be set to off. </p> </dd> + + + + + <p> Gets a bit field of flags that indicates which debug features are on or off. </p> + <p> Mask of feature-mask flags, as a bitwise {{OR}}'ed combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. </p> + + + + <p> Reports information about a device object's lifetime. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime. </p> </dd> + + + + + <p> Provides methods to monitor and debug a command queue. </p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method is very similar to <strong>{{ID3D12DebugCommandList::AssertResourceState}}</strong>, however there are methods on the command queue that work directly with resources that might need to be monitored (for example <strong>{{ID3D13CommandQueue::CopyTileMappings}}</strong>).</p> + <p> This method returns true if the resource or subresource is in the specified state, false otherwise. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p> The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p> Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This interface enables modification of additional command list debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Validates that the given state matches the state of the subresource, assuming the state of the given subresource is known during recording of a command list (e.g. the resource was transitioned earlier in the same command list recording). If the state is not yet known this method sets the known state for further validation later in the same command list recording.</p> + <p>Since execution of command lists occurs sometime after recording, the state of a resource often cannot be known during command list recording. <strong>AssertResourceState</strong> gives an application developer the ability to impose an assumed state on a resource or subresource at a fixed recording point in a command list.</p><p>Often the state of a resource or subresource can either be known due to a previous barrier or inferred-by-use (for example, was used in an earlier call to <strong>CopyBufferRegion</strong>) during command list recording. In such cases <strong>AssertResourceState</strong> can produce a debug message if the given state does not match the known or assumed state.</p><p>This {{API}} is for debug validation only and does not affect the actual runtime or {{GPU}} state of the resource.</p> + <p>This method returns <strong>true</strong> if the tracked state of the resource or subresource matches the specified state, <strong>false</strong> otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more <strong>{{D3D12_RESOURCE_STATES}}</strong> flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies optional Debug Layer settings of a command list.</p> + <p>Certain debug behaviors of {{D3D12}} Debug Layer can be modified by setting debug parameters. These can be used to toggle extra validation or expose experimental debug features.</p><p><strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> only impacts debug settings for the associated command list. For device-wide debug parameters see the <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> method.</p><p>Resetting a command list restores the debug parameters to the default values. This is because a command list reset is treated as equivalent to creating a new command list.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Pointer to debug parameter data to set. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Specifies the size in bytes of the debug parameter <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional Command List Debug Layer settings.</p> + <p> Returns {{S_OK}} if successful, otherwise {{E_INVALIDARG}}. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that determines which debug parameter data to copy to the memory pointed to by <em>pData</em>.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p> Provides methods to monitor and debug a command list.</p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method returns true if the resource or subresource is in the specified state, false otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p> Turns the debug features for a command list on or off.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. </p> </dd> + + + + + <p> Returns the debug feature flags that have been set on a command list. </p> + <p> A bit mask containing the set debug features. </p> + + + + <p> An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Set the maximum number of messages that can be added to the message queue. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Maximum number of messages that can be added to the message queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> </dd> + + + + + <p> Clear all messages from the message queue. </p> + <p> This method does not return a value. </p> + + + + <p> Get a message from the message queue. </p> + <p>This method does not remove any messages from the message queue. </p><p>This method gets messages from the message queue after an optional retrieval filter has been applied. </p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example: </p><code> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D12_MESSAGE}} * pMessage = ({{D3D12_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>GetNumStoredMessagesAllowedByRetrievalFilter</strong>). 0 is the message at the front of the message queue. </p> </dd> + + + <dd> <p> Returned message.</p> </dd> + + + <dd> <p>Size of <em>pMessage</em> in bytes. </p> </dd> + + + + + <p> Get the number of messages that were allowed to pass through a storage filter. </p> + <p> Number of messages allowed by a storage filter. </p> + + + + <p>Get the number of messages that were denied passage through a storage filter. </p> + <p> Number of messages denied by a storage filter. </p> + + + + <p> Get the number of messages currently stored in the message queue. </p> + <p> Number of messages currently stored in the message queue. </p> + + + + <p> Get the number of messages that are able to pass through a retrieval filter. </p> + <p>Number of messages allowed by a retrieval filter. </p> + + + + <p> Get the number of messages that were discarded due to the message count limit. </p> + <p>Get and set the message count limit with <strong>GetMessageCountLimit</strong> and <strong>SetMessageCountLimit</strong>, respectively. </p> + <p> Number of messages discarded. </p> + + + + <p> Get the maximum number of messages that can be added to the message queue. </p> + <p> Maximum number of messages that can be added to the queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> + + + + <p> Add storage filters to the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Array of storage filters.</p> </dd> + + + + + <p> Get the storage filter at the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Storage filter at the top of the storage-filter stack. </p> </dd> + + + <dd> <p> Size of the storage filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the storage filter will be output to this parameter. </p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty storage filter onto the storage-filter stack. </p> + <p>An empty storage filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a storage filter onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a storage filter.</p> </dd> + + + + + <p> Pop a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the storage-filter stack in bytes. </p> + <p> Size of the storage-filter stack in bytes. </p> + + + + <p> Add storage filters to the top of the retrieval-filter stack. </p> + <p>The following code example shows how to use this method: </p><code> {{D3D12_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D12_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D12_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D12_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D12_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); </code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Array of retrieval filters. </p> </dd> + + + + + <p> Get the retrieval filter at the top of the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Retrieval filter at the top of the retrieval-filter stack. </p> </dd> + + + <dd> <p> Size of the retrieval filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the retrieval filter will be output to this parameter. </p> </dd> + + + + + <p> Remove a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty retrieval filter onto the retrieval-filter stack. </p> + <p>An empty retrieval filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a retrieval filter onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a retrieval filter.</p> </dd> + + + + + <p> Pop a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the retrieval-filter stack in bytes. </p> + <p> Size of the retrieval-filter stack in bytes. </p> + + + + <p>Adds a debug message to the message queue and sends that message to debug output. </p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D12InfoQueue::AddApplicationMessage}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Category of a message. </p> </dd> + + + <dd> <p> Severity of a message. </p> </dd> + + + <dd> <p> Unique identifier of a message. </p> </dd> + + + <dd> <p> User-defined message. </p> </dd> + + + + + <p> Adds a user-defined message to the message queue and sends that message to debug output. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Severity of a message.</p> </dd> + + + <dd> <p> Specifies the message string. </p> </dd> + + + + + <p> Set a message category to break on when a message with that category passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A message severity level to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Get a message category to break on when a message with that category passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message severity level to break on.</p> </dd> + + + + + <p> Get a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + + + <p> Set a boolean that turns the debug output on or off. </p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Disable/Enable the debug output (true to disable or mute the output, false to enable the output). </p> </dd> + + + + + <p> Get a boolean that determines if debug output is on or off. </p> + <p> Whether the debug output is on or off (true for on, false for off). </p> + + + + <p>Options for the amount of information to report about a device object's lifetime.</p> + <p> This enumeration is used by <strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>. </p><p> Several inline functions exist to combine the options using operators, see the {{D3D11SDKLayers}}.h header file for details. </p> + + + <dd> <p> Specifies to obtain a summary about a device object's lifetime. </p> </dd> + + + <dd> <p> Specifies to obtain detailed information about a device object's lifetime. </p> </dd> + + + <dd> <p> Do not use this enumeration constant. It is for internal use only. </p> </dd> + + + + + <p>Indicates which resource types to track.</p> + <p>The <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> or <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> method tracks a specific type of resource.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No resource types are tracked.</p> </dd> + + + <dd> <p>Track device memory that is created with unordered access view ({{UAV}}) bind flags.</p> </dd> + + + <dd> <p>Track device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory.</p> </dd> + + + <dd> <p>Track all shaders that use group shared memory.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created with {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all memory on the device.</p> </dd> + + + + + <p>Options that specify how to perform shader debug tracking.</p> + <p> This enumeration is used by the following methods: </p><ul> <li> <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11RefTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> </li> </ul><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No debug tracking is performed.</p> </dd> + + + <dd> <p>Track the reading of uninitialized data.</p> </dd> + + + <dd> <p>Track read-after-write hazards.</p> </dd> + + + <dd> <p>Track write-after-read hazards.</p> </dd> + + + <dd> <p>Track write-after-write hazards.</p> </dd> + + + <dd> <p>Track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address.</p> </dd> + + + <dd> <p>Track read-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-read hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address across thread groups.</p> </dd> + + + <dd> <p>Track hazards that are specific to unordered access views ({{UAVs}}).</p> </dd> + + + <dd> <p>Track all hazards.</p> </dd> + + + <dd> <p>Track all hazards and track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p> All of the preceding tracking options are set except <strong>{{D3D11_SHADER_TRACKING_OPTION_IGNORE}}</strong>. </p> </dd> + + + + + <p>Categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D11InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D11InfoQueue::AddMessage}}</strong>. When creating an <strong>info queue filter</strong>, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.</p> + <p>This is part of the Information Queue feature. See <strong>{{ID3D11InfoQueue}} Interface</strong>.</p> + + + + <p>Debug message severity levels for an information queue.</p> + <p>Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + + + <dd> <p>Defines some type of corruption which has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + + + + <p>A debug message in the Information Queue.</p> + <p>This structure is returned from <strong>{{ID3D11InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D11InfoQueue}} Interface</strong>).</p> + + + <dd> <p>The category of the message. See <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>The severity of the message. See <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>.</p> </dd> + + + <dd> <p>The {{ID}} of the message. See <strong>{{D3D11_MESSAGE_ID}}</strong>.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of pDescription in bytes.</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by querying it from the <strong>{{ID3D11Device}}</strong> using <strong>{{IUnknown::QueryInterface}}</strong>. </p><p> For more information about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set a bit field of flags that will turn debug features on and off.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>Setting one of the following feature-mask flags will cause a rendering-operation method (listed below) to do some extra task when called. </p><table> <tr><td>{{D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP}} (0x2)</td><td>Application will wait for the {{GPU}} to finish processing the rendering operation before continuing.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP}} (0x1)</td><td>Runtime will additionally call <strong>{{ID3D11DeviceContext::Flush}}</strong>.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} (0x4)</td><td>Runtime will call <strong>{{IDXGISwapChain::Present}}</strong>. Presentation of render buffers will occur according to the settings established by prior calls to <strong>{{ID3D11Debug::SetSwapChain}}</strong> and <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</td></tr> </table><p>?</p><p>These feature-mask flags apply to the following rendering-operation methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::Draw}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexed}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawAuto}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopyResource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> </li> </ul><p>By setting one of the following feature-mask flags, you can control the behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods to aid in testing and debugging. </p><strong>Note</strong>??These flags are supported by the Direct3D 11.1 runtime, which is available starting with Windows?8.?<table> <tr><td>{{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}} (0x8)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is always discarded. Use this flag to test code paths that regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}}.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}} (0x10)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is never discarded. Use this flag to test code paths that do not need to regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}}.</td></tr> </table><p>?</p><p>The behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods depends on system-wide memory pressure. Therefore, the scenario where content is lost and must be regenerated is uncommon for most applications. The preceding new options in the Direct3D debug layer let you simulate that scenario consistently and test code paths.</p><p>The following flag is supported by the Direct3D 11.1 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} (0x40)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>When the debug layer is enabled, it performs certain actions to reveal application problems. By setting the {{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} feature-mask flag, you can enable the debug layer without getting the following default debugging behavior:</p><ul> <li>If an application calls <strong>{{ID3D11DeviceContext1::DiscardView}}</strong>, the runtime fills in the resource with a random color.</li> <li>If an application calls <strong>{{IDXGISwapChain1::Present1}}</strong> with partial presentation parameters, the runtime ignores the partial presentation information.</li> </ul><p>The following flag is supported by the Direct3D 11.2 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} (0x80)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>By default (that is, without {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} set), the debug layer validates the proper usage of all tile mappings for tiled resources for bound resources for every operation performed on the device context (for example, draw, copy, and so on). Depending on the size of the tiled resources used (if any), this validation can be processor intensive and slow. Apps might want to initially run with tiled resource tile mapping validation on; then, when they determine that the calling pattern is safe, they can disable the validation by setting {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}}.</p><p>If {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set when a tiled resource is created, the debug layer never performs the tracking of tile mapping for that resource for its entire lifetime. Alternatively, if {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set for any given device context method call (like draw or copy calls) involving tiled resources, the debug layer skips all tile mapping validation for the call.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. For descriptions of the feature-mask flags, see Remarks.</p> </dd> + + + + + <p>Get a bitfield of flags that indicates which debug features are on or off.</p> + <p>Mask of feature-mask flags bitwise {{ORed}} together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See <strong>{{ID3D11Debug::SetFeatureMask}}</strong> for a list of possible feature-mask flags.</p> + + + + <p>Set the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The application will only sleep if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is a set in the <strong>feature mask</strong>. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <p>Value is set with <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</p> + <p>Number of milliseconds to sleep after Present is called.</p> + + + + <p>Sets a swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The swap chain set by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <p>The swap chain retrieved by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Check to see if the draw pipeline state is valid.</p> + <p>Use validate prior to calling a draw method (for example, <strong>{{ID3D11DeviceContext::Draw}}</strong>); validation requires the debug layer.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong>, that represents a device context.</p> </dd> + + + + + <p>Report information about a device object's lifetime.</p> + <p><strong>ReportLiveDeviceObjects</strong> uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value from the <strong>{{D3D11_RLDO_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Verifies whether the dispatch pipeline state is valid.</p> + <p>Use this method before you call a dispatch method (for example, <strong>{{ID3D11DeviceContext::Dispatch}}</strong>). Validation requires the debug layer.</p> + <p>This method returns one of the return codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong> that represents a device context.</p> </dd> + + + + + <strong>Note</strong>?? The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <p>The tracing device interface sets shader tracking information, which enables accurate logging and playback of shader execution.</p> + <p>To get this interface, turn on the debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the reference rasterizer's default race-condition tracking options for the specified resource types.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on," otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets the reference rasterizer's race-condition tracking options for a specific shader.</p> + <strong>Note</strong>??After a call to <strong>SetShaderTrackingOptions</strong>, the tracking options that the <em>Options</em> parameter specifies are set for all calls by the shader that the <em>pShader</em> parameter specifies, until the next call to <strong>SetShaderTrackingOptions</strong>. If you set a flag that is specific to unordered access views ({{UAV}}) (for example, <strong>{{D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS}}</strong>) in the <em>Options</em> parameter for a compute shader, <strong>SetShaderTrackingOptions</strong> ignores it.?<strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.</p> + <p> To get this interface, turn on debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Maximum number of messages that can be added to the message queue. -1 means no limit.</p> </dd> + + + + + <p>Clear all messages from the message queue.</p> + <p>Returns nothing.</p> + + + + <p>Get a message from the message queue.</p> + <p>This method does not remove any messages from the message queue.</p><p>This method gets messages from the message queue after an optional retrieval filter has been applied.</p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D11_MESSAGE}} * pMessage = ({{D3D11_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</pre><p>For an overview see <strong>Information Queue Overview</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>{{ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter}}</strong>). 0 is the message at the front of the message queue.</p> </dd> + + + <dd> <p>Returned message (see <strong>{{D3D11_MESSAGE}}</strong>).</p> </dd> + + + <dd> <p>Size of pMessage in bytes, including the size of the message string that the pMessage points to.</p> </dd> + + + + + <p>Get the number of messages that were allowed to pass through a storage filter.</p> + <p>Number of messages allowed by a storage filter.</p> + + + + <p>Get the number of messages that were denied passage through a storage filter.</p> + <p>Number of messages denied by a storage filter.</p> + + + + <p>Get the number of messages currently stored in the message queue.</p> + <p>Number of messages currently stored in the message queue.</p> + + + + <p>Get the number of messages that are able to pass through a retrieval filter.</p> + <p>Number of messages allowed by a retrieval filter.</p> + + + + <p>Get the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{ID3D11InfoQueue::GetMessageCountLimit}}</strong> and <strong>{{ID3D11InfoQueue::SetMessageCountLimit}}</strong>, respectively.</p> + <p>Number of messages discarded.</p> + + + + <p>Get the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>Maximum number of messages that can be added to the queue. -1 means no limit.</p> + + + + <p>Add storage filters to the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of storage filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the storage filter at the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Storage filter at the top of the storage-filter stack.</p> </dd> + + + <dd> <p>Size of the storage filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the storage filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a storage filter onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a storage filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the storage-filter stack in bytes.</p> + <p>Size of the storage-filter stack in bytes.</p> + + + + <p>Add storage filters to the top of the retrieval-filter stack.</p> + <p>The following code example shows how to use <strong>{{ID3D11InfoQueue::AddRetrievalFilterEntries}}</strong>:</p><pre> {{D3D11_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D11_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D11_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D11_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D11_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of retrieval filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the retrieval filter at the top of the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Retrieval filter at the top of the retrieval-filter stack.</p> </dd> + + + <dd> <p>Size of the retrieval filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the retrieval filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a retrieval filter onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a retrieval filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the retrieval-filter stack in bytes.</p> + <p>Size of the retrieval-filter stack in bytes.</p> + + + + <p>Add a debug message to the message queue and send that message to debug output.</p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Category of a message (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Unique identifier of a message (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>User-defined message.</p> </dd> + + + + + <p>Add a user-defined message to the message queue and send that message to debug output.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Message string.</p> </dd> + + + + + <p>Set a message category to break on when a message with that category passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>, which represents a message severity level to break on.</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Get a message category to break on when a message with that category passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message severity level to break on (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + + + <p>Get a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Set a boolean that turns the debug output on or off.</p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.</p> + <p>Returns nothing.</p> + + + <dd> <p>Disable/Enable the debug output (<strong>{{TRUE}}</strong> to disable or mute the output, <strong>{{FALSE}}</strong> to enable the output).</p> </dd> + + + + + <p>Get a boolean that turns the debug output on or off.</p> + <p>Whether the debug output is on or off (true for on, false for off).</p> + + + + <p>Indicates the device state.</p> + <p>A state-block mask indicates the device states that a pass or a technique changes.</p> + + + <dd> <p>Boolean value indicating whether to save the vertex shader state. </p> </dd> + + + <dd> <p>Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of vertex-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the hull shader state. </p> </dd> + + + <dd> <p>Array of hull-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of hull-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of hull-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of hull-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the domain shader state. </p> </dd> + + + <dd> <p>Array of domain-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.</p> </dd> + + + <dd> <p>Array of domain-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of domain-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.</p> </dd> + + + <dd> <p>Array of domain-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the geometry shader state. </p> </dd> + + + <dd> <p>Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot. </p> </dd> + + + <dd> <p>Array of geometry-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader state.</p> </dd> + + + <dd> <p>Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of pixel-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader unordered access views.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader state.</p> </dd> + + + <dd> <p>Array of compute-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of compute-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of compute-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of compute-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader unordered access views.</p> </dd> + + + <dd> <p>Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the index buffer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the input layout state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the primitive topology state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the render targets states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the depth-stencil state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the blend state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the viewports states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the scissor rectangles states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the rasterizer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the stream-out buffers states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the predication state. </p> </dd> + + + + + <p>Describes an effect-variable type.</p> + <p>{{D3DX11_EFFECT_TYPE_DESC}} is used with <strong>{{ID3DX11EffectType::GetDesc}}</strong> </p> + + + <dd> <p>Name of the type, for example "float4" or "MyStruct".</p> </dd> + + + <dd> <p>The variable class (see <strong>{{D3D10_SHADER_VARIABLE_CLASS}}</strong>). </p> </dd> + + + <dd> <p>The variable type (see <strong>{{D3D10_SHADER_VARIABLE_TYPE}}</strong>).</p> </dd> + + + <dd> <p>Number of elements in this type (0 if not an array).</p> </dd> + + + <dd> <p>Number of members (0 if not a structure).</p> </dd> + + + <dd> <p>Number of rows in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of columns in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of bytes required to represent this data type, when tightly packed.</p> </dd> + + + <dd> <p>Number of bytes occupied by this data type, when laid out in a constant buffer.</p> </dd> + + + <dd> <p>Number of bytes to seek between elements, when laid out in a constant buffer.</p> </dd> + + + + + <p>Describes an effect variable.</p> + <p>{{D3DX11_EFFECT_VARIABLE_DESC}} is used with <strong>{{ID3DX11EffectVariable::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this variable, annotation, or structure member.</p> </dd> + + + <dd> <p>Semantic string of this variable or structure member ({{NULL}} for annotations or if not present).</p> </dd> + + + <dd> <p>Optional flags for effect variables.</p> </dd> + + + <dd> <p>Number of annotations on this variable (always 0 for annotations).</p> </dd> + + + <dd> <p>Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers).</p> </dd> + + + <dd> <p>Used if the variable has been explicitly bound using the register keyword. Check Flags for {{D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT}}.</p> </dd> + + + + + <p>Describes an effect shader.</p> + <p>{{D3DX11_EFFECT_SHADER_DESC}} is used with <strong>{{ID3DX11EffectShaderVariable::GetShaderDesc}}</strong>.</p> + + + <dd> <p>Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> is the shader is defined inline; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Shader bytecode.</p> </dd> + + + <dd> <p>The length of pBytecode. </p> </dd> + + + <dd> <p>Stream out declaration string (for geometry shader with {{SO}}).</p> </dd> + + + <dd> <p>Indicates which stream is rasterized. {{D3D11}} geometry shaders can output up to four streams of data, one of which can be rasterized.</p> </dd> + + + <dd> <p>Number of entries in the input signature.</p> </dd> + + + <dd> <p>Number of entries in the output signature.</p> </dd> + + + <dd> <p>Number of entries in the patch constant signature.</p> </dd> + + + + + <p>Describes an effect pass, which contains pipeline state.</p> + <p>{{D3DX11_PASS_DESC}} is used with <strong>{{ID3DX11EffectPass::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this pass (<strong>{{NULL}}</strong> if not anonymous).</p> </dd> + + + <dd> <p>Number of annotations on this pass.</p> </dd> + + + <dd> <p>Signature from the vertex shader or geometry shader (if there is no vertex shader) or <strong>{{NULL}}</strong> if neither exists.</p> </dd> + + + <dd> <p>Singature size in bytes.</p> </dd> + + + <dd> <p>The stencil-reference value used in the depth-stencil state.</p> </dd> + + + <dd> <p>The sample mask for the blend state.</p> </dd> + + + <dd> <p>The per-component blend factors ({{RGBA}}) for the blend state.</p> </dd> + + + + + <p>Describes an effect pass.</p> + <p>{{D3DX11_PASS_SHADER_DESC}} is used with <strong>{{ID3DX11EffectPass}}</strong> Get*ShaderDesc methods.</p><p>If this is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. It's name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, pShaderVariable != <strong>{{NULL}}</strong>, but pShaderVariable-&gt;IsValid() == <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The variable that this shader came from.</p> </dd> + + + <dd> <p>The element of pShaderVariable (if an array) or 0 if not applicable.</p> </dd> + + + + + <p>Describes an effect technique.</p> + <p>{{D3DX11_TECHNIQUE_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this technique ({{NULL}} if not anonymous).</p> </dd> + + + <dd> <p>Number of passes contained in the technique.</p> </dd> + + + <dd> <p>Number of annotations on this technique.</p> </dd> + + + + + <p>Describes an effect group.</p> + <p>{{D3DX11_GROUP_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this group (only <strong>{{NULL}}</strong> if global).</p> </dd> + + + <dd> <p>Number of techniques contained in group.</p> </dd> + + + <dd> <p>Number of annotations on this group.</p> </dd> + + + + + <p>Describes an effect.</p> + <p>{{D3DX11_EFFECT_DESC}} is used with <strong>{{ID3DX11Effect::GetDesc}}</strong>.</p> + + + <dd> <p>Number of constant buffers in this effect.</p> </dd> + + + <dd> <p>Number of global variables in this effect.</p> </dd> + + + <dd> <p>Number of global interfaces in this effect.</p> </dd> + + + <dd> <p>Number of techniques in this effect.</p> </dd> + + + <dd> <p>Number of groups in this effect.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Tests that the effect type is valid.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if it is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get an effect-type description.</p> + <p>The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-type description. See <strong>{{D3DX11_EFFECT_TYPE_DESC}}</strong>.</p> </dd> + + + + + <p>Get a member type by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an member type by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A member's name.</p> </dd> + + + + + <p>Get a member type by semantic.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A semantic.</p> </dd> + + + + + <p>Get the name of a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The name of the member.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectVariable}}</strong> interface is the base class for all effect variables.</p><p>The lifetime of an <strong>{{ID3DX11EffectVariable}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Compare the data type with the data stored.</p> + <p>This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get type information.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + + <p>Get a description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-variable description (see <strong>{{D3DX11_EFFECT_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The annotation name.</p> </dd> + + + + + <p>Get a structure member by index.</p> + <p>If the effect variable is an structure, use this method to look up a member by index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a structure member by name.</p> + <p>If the effect variable is an structure, use this method to look up a member by name.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a structure member by semantic.</p> + <p>If the effect variable is an structure, use this method to look up a member by attached semantic.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic.</p> </dd> + + + + + <p>Get an array element.</p> + <p>If the effect variable is an array, use this method to return one of the elements.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index; otherwise 0.</p> </dd> + + + + + <p>Get a constant buffer.</p> + <p>Effect variables are read-from or written-to a constant buffer.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a scalar variable.</p> + <p>AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a scalar variable. See <strong>{{ID3DX11EffectScalarVariable}}</strong>.</p> + + + + <p>Get a vector variable.</p> + <p>AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a vector variable. See <strong>{{ID3DX11EffectVectorVariable}}</strong>.</p> + + + + <p>Get a matrix variable.</p> + <p>AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a matrix variable. See <strong>{{ID3DX11EffectMatrixVariable}}</strong>.</p> + + + + <p>Get a string variable.</p> + <p>AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a string variable. See <strong>{{ID3DX11EffectStringVariable}}</strong>.</p> + + + + <p>Get a class-instance variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to class-instance variable. See <strong>{{ID3DX11EffectClassInstanceVariable}}</strong>.</p> + + + + <p>Get an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an interface variable. See <strong>{{ID3DX11EffectInterfaceVariable}}</strong>.</p> + + + + <p>Get a shader-resource variable.</p> + <p>AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader-resource variable. See <strong>{{ID3DX11EffectShaderResourceVariable}}</strong>.</p> + + + + <p>Get an unordered-access-view variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an unordered-access-view variable. See <strong>{{ID3DX11EffectUnorderedAccessViewVariable}}</strong>.</p> + + + + <p>Get a render-target-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a render-target-view variable. See <strong>{{ID3DX11EffectRenderTargetViewVariable}}</strong>.</p> + + + + <p>Get a depth-stencil-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil-view variable. See <strong>{{ID3DX11EffectDepthStencilViewVariable}}</strong>.</p> + + + + <p>Get a constant buffer.</p> + <p>AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a constant buffer. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a shader variable.</p> + <p>AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader variable. See <strong>{{ID3DX11EffectShaderVariable}}</strong>.</p> + + + + <p>Get a effect-blend variable.</p> + <p>AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an effect blend variable. See <strong>{{ID3DX11EffectBlendVariable}}</strong>.</p> + + + + <p>Get a depth-stencil variable.</p> + <p>AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil variable. See <strong>{{ID3DX11EffectDepthStencilVariable}}</strong>.</p> + + + + <p>Get a rasterizer variable.</p> + <p>AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a rasterizer variable. See <strong>{{ID3DX11EffectRasterizerVariable}}</strong>.</p> + + + + <p>Get a sampler variable.</p> + <p>AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a sampler variable. See <strong>{{ID3DX11EffectSamplerVariable}}</strong>.</p> + + + + <p>Set data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to set.</p> </dd> + + + + + <p>Get data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to get.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>A vector-variable interface accesses a four-component vector.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Set a floating-point matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in the matrix.</p> </dd> + + + + + <p>Get a matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in a matrix.</p> </dd> + + + + + <p>Set an array of floating-point matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first matrix.</p> </dd> + + + <dd> <p>The number of matrix elements to skip from the start of the array.</p> </dd> + + + <dd> <p>The number of elements to set.</p> </dd> + + + + + <p>Get an array of matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of the first matrix in an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix returned.</p> </dd> + + + <dd> <p>The number of matrices in the returned array.</p> </dd> + + + + + + + + + + + <p>Transpose and set a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a matrix.</p> </dd> + + + + + <p>Transpose and get a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a transposed matrix.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Transpose and get an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of an array of tranposed matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to get.</p> </dd> + + + <dd> <p>The number of matrices in the array to get.</p> </dd> + + + + + + + + + + + <p>A string-variable interface accesses a string variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get the string.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the string.</p> </dd> + + + + + <p>Get an array of strings.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first string in the array.</p> </dd> + + + <dd> <p>The offset (in number of strings) between the start of the array and the first string to get.</p> </dd> + + + <dd> <p>The number of strings in the returned array.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Accesses an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Sets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> interface.</p> </dd> + + + + + <p>Get a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> reference that will be set to the class instance.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Get a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Accesses an unordered access view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong>.</p> </dd> + + + + + <p>Get an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set on return.</p> </dd> + + + + + <p>Set an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{ID3D11UnorderedAccessView}}</strong> references.</p> </dd> + + + <dd> <p>Index of the first unordered-access-view.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Get an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set to the {{UAV}} array on return. </p> </dd> + + + <dd> <p>Index of the first interface.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Get a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Set an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to store the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>A depth-stencil-view-variable interface accesses a depth-stencil view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Get a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Set an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to set the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Set a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Reverts a previously set constant buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Set a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-resource-view interface for accessing a texture buffer.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface for accessing a texture buffer. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>A shader-variable interface accesses a shader variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to a shader description (see <strong>{{D3DX11_EFFECT_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11VertexShader}}</strong> reference that will be set to the vertex shader on return.</p> </dd> + + + + + <p>Get a geometry shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11GeometryShader}}</strong> reference that will be set to the geometry shader on return.</p> </dd> + + + + + <p>Get a pixel shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11PixelShader}}</strong> reference that will be set to the pixel shader on return.</p> </dd> + + + + + <p>Get a hull shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the shader.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11HullShader}}</strong> reference that will be set to the hull shader on return.</p> </dd> + + + + + <p>Get a domain shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the domain shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DomainShader}}</strong> reference that will be set to the domain shader on return.</p> </dd> + + + + + <p>Get a compute shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the compute shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11ComputeShader}}</strong> reference that will be set to the compute shader on return.</p> </dd> + + + + + <p>Get an input-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based shader-element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an output-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a patch constant signature description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index. </p> </dd> + + + <dd> <p>A zero-based element index. </p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>The blend-variable interface accesses blend state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a blend-state interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>).</p> </dd> + + + + + <p>Sets an effect's blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11BlendState}}</strong> interface containing the blend-state to set.</p> </dd> + + + + + <p>Reverts a previously set blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + + + <p>Get a reference to a blend-state variable.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-variable interface accesses depth-stencil state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a depth-stencil interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Sets the depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DepthStencilState}}</strong> interface containing the new depth stencil state.</p> </dd> + + + + + <p>Reverts a previously set depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + + + <p>Get a reference to a variable that contains depth-stencil state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a depth-stencil-state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a rasterizer interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a rasterizer interface (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Sets the rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11RasterizerState}}</strong> interface.</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains rasteriser state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a rasteriser-state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + + + <p>A sampler interface accesses sampler state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a sampler interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a sampler interface (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11SamplerState}}</strong> interface containing the sampler state.</p> </dd> + + + + + <p>Revert a previously set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a sampler description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectPass}}</strong> interface encapsulates state assignments within a technique.</p><p>The lifetime of an <strong>{{ID3DX11EffectPass}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique.</p><p>To get an effect-pass interface, call a method like <strong>{{ID3DX11EffectTechnique::GetPassByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a pass to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a pass description.</p> + <p>A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pass description (see <strong>{{D3DX11_PASS_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a vertex-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a geometry-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a geometry-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a pixel-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pixel-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get hull-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a hull-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a domain-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a domain-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a compute-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a compute-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Set the state contained in a pass to the device.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Unused.</p> </dd> + + + <dd> <p>The <strong>{{ID3D11DeviceContext}}</strong> to apply the pass to.</p> </dd> + + + + + <p>Generate a mask for allowing/preventing state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectTechnique}}</strong> interface is a collection of passes.</p><p>The lifetime of an <strong>{{ID3DX11EffectTechnique}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments.</p><p>To get an effect-technique interface, call a method such as <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a technique to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a technique description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a technique description (see <strong>{{D3DX11_TECHNIQUE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The zero-based index of the interface reference.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Name of the annotation.</p> </dd> + + + + + <p>Get a pass by index.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a pass by name.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>The name of the pass.</p> </dd> + + + + + <p>Compute a state-block mask to allow/prevent state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectGroup}}</strong> interface accesses an Effect group.</p><p>The lifetime of an <strong>{{ID3DX11EffectGroup}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>To get an <strong>{{ID3DX11EffectGroup}}</strong> interface, call a method like <strong>{{ID3DX11Effect::GetGroupByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Gets a group description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3DX11_GROUP_DESC}}</strong> structure.</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Pointer to an <strong>{{ID3DX11EffectVariable}}</strong> interface.</p> + + + <dd> <p>Index of the annotation.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Get a technique by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>, or <strong>{{NULL}}</strong> if the technique is not found.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>An <strong>{{ID3DX11Effect}}</strong> interface manages a set of state objects, resources, and shaders for implementing a rendering effect.</p> + <p>An effect is created by calling <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><p>The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.?<strong>Note</strong>??<p>If you call <strong>QueryInterface</strong> on an <strong>{{ID3DX11Effect}}</strong> object to retrieve the <strong>{{IUnknown}}</strong> interface, <strong>QueryInterface</strong> returns {{E_NOINTERFACE}}. To work around this issue, use the following code:</p> <pre> {{IUnknown}}* pIUnknown = ({{IUnknown}}*)pEffect; pIUnknown-&gt;AddRef(); +</pre>? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get the device that created the effect.</p> + <p>An effect is created for a specific device, by calling a function such as <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Device}}</strong>.</p> </dd> + + + + + <p>Get an effect description.</p> + <p>An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect description (see <strong>{{D3DX11_EFFECT_DESC}}</strong>).</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the constant buffer indicated by the Name. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a variable by index.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the index exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a variable by name.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> whether or not a variable is found. <strong>{{ID3DX11Effect::IsValid}}</strong> should be called to verify whether or not the name exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Returns an invalid variable if the specified name cannot be found.</p> + + + <dd> <p>The variable name.</p> </dd> + + + + + <p>Get a variable by semantic.</p> + <p>Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the semantic exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the effect variable indicated by the Semantic. See <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic name.</p> </dd> + + + + + <p>Gets an effect group by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Index of the effect group.</p> </dd> + + + + + <p>Gets an effect group by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Name of the effect group.</p> </dd> + + + + + <p>Get a technique by index.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. </p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>. If a technique with the appropriate name is not found an invalid technique is returned. <strong>{{ID3DX11EffectTechnique::IsValid}}</strong> should be called on the returned technique to determine whether it is valid.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>Gets a class linkage interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns a reference to an <strong>{{ID3D11ClassLinkage}}</strong> interface.</p> + + + + <p>Creates a copy of an effect interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Flags affecting the creation of the cloned effect. Can be 0 or one of the following values.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DX11_EFFECT_CLONE_FORCE_NONSINGLE}}</td><td>Ignore all "single" qualifiers on cbuffers. All cbuffers will have their own <strong>{{ID3D11Buffer}}</strong>s created in the cloned effect.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3DX11Effect}}</strong> reference that will be set to the copy of the effect.</p> </dd> + + + + + <p>Minimize the amount of memory required for an effect.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. {{API}} methods to read variables will no longer work once reflection data has been removed.</p><p>The following methods will fail after Optimize has been called on an effect.</p><ul> <li> <strong>{{ID3DX11Effect::GetConstantBufferByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetConstantBufferByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDesc}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDevice}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableBySemantic}}</strong> </li> </ul><strong>Note</strong>??References retrieved with these methods before calling <strong>{{ID3DX11Effect::Optimize}}</strong> are still valid after <strong>{{ID3DX11Effect::Optimize}}</strong> is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.?<strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Test an effect to see if the reflection metadata has been removed from memory.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. Of course, {{API}} methods to read variables will no longer work once reflection data has been removed.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the effect is optimized; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Creates an effect from a binary effect or file.</p> + <strong>Note</strong>??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The return value is one of the values listed in Direct3D 11 Return Codes.</p> + + + <dd> <p>Blob of compiled effect data.</p> </dd> + + + <dd> <p>Length of the data blob.</p> </dd> + + + <dd> <p>No effect flags exist. Set to zero.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{ID3D11Device}}</strong> on which to create Effect resources.</p> </dd> + + + <dd> <p>Address of the newly created <strong>{{ID3DX11Effect}}</strong> interface.</p> </dd> + + + + + <p> Defines results for animation updates.</p> + + + <dd> <p> No animation variables have changed.</p> </dd> + + + <dd> <p> One or more animation variables has changed.</p> </dd> + + + + + <p> Defines the activity status of an animation manager.</p> + + + <dd> <p> The animation manager is idle; no animations are currently playing.</p> </dd> + + + <dd> <p> The animation manager is busy; at least one animation is currently playing or scheduled.</p> </dd> + + + + + <p> Defines animation modes.</p> + + + <dd> <p> Animation is disabled.</p> </dd> + + + <dd> <p> The animation mode is managed by the system.</p> </dd> + + + <dd> <p> Animation is enabled.</p> </dd> + + + + + <p>Defines the pattern for a loop iteration.</p> + + + <dd> <p>The start of a loop begins with the first value (v1-&gt;v2, v1-&gt;v2, v1-&gt;v2, and so on).</p> </dd> + + + <dd> <p>The start of a loop alternates between values (v1-&gt;v2, v2-&gt;v1, v1-&gt;v2, and so on).</p> </dd> + + + + + <p> Defines the rounding modes to be used when the value of an animation variable is converted from a floating-point type to an integer type.</p> + + + <dd> <p> Round to the nearest integer.</p> </dd> + + + <dd> <p> Round down.</p> </dd> + + + <dd> <p> Round up.</p> </dd> + + + + + <p> Defines the status for a storyboard.</p> + <p>Unless <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, it returns only the following status values:</p><ul> <li>{{UI_ANIMATION_STORYBOARD_BUILDING}}</li> <li>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</li> <li>{{UI_ANIMATION_STORYBOARD_PLAYING}}</li> <li>{{UI_ANIMATION_STORYBOARD_READY}}</li> </ul><p>All status values can be passed to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p><p>The following diagram illustrates the transitions between these states.</p><p></p> + + + <dd> <p> The storyboard has never been scheduled.</p> </dd> + + + <dd> <p> The storyboard is scheduled to play.</p> </dd> + + + <dd> <p> The storyboard was canceled.</p> </dd> + + + <dd> <p> The storyboard is currently playing.</p> </dd> + + + <dd> <p> The storyboard was truncated.</p> </dd> + + + <dd> <p> The storyboard has finished playing.</p> </dd> + + + <dd> <p> The storyboard is built and ready for scheduling.</p> </dd> + + + <dd> <p> Scheduling the storyboard failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority.</p> </dd> + + + + + <p> Defines results for storyboard scheduling.</p> + <p> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> returns {{UI_ANIMATION_SCHEDULING_DEFERRED}} only if the application attempts to schedule a storyboard during a callback to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p> + + + <dd> <p> Scheduling failed for an unexpected reason.</p> </dd> + + + <dd> <p> Scheduling failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority. For more information, see <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>.</p> </dd> + + + <dd> <p> Scheduling failed because the storyboard is already scheduled.</p> </dd> + + + <dd> <p> Scheduling succeeded.</p> </dd> + + + <dd> <p> Scheduling is deferred and will be attempted when the current callback completes.</p> </dd> + + + + + <p> Defines potential effects on a storyboard if a priority comparison returns false.</p> + <p>This enumeration is used as the <em>priorityEffect</em> parameter of <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>, informing the client of the potential effect on the storyboard to be scheduled when the return value is false ({{S_FALSE}}). {{UI_ANIMATION_PRIORITY_EFFECT_FAILURE}} means that the attempt to schedule the storyboard might fail if the return value is false. {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}} means that the attempt to schedule the storyboard will succeed, but if the return value is false, the storyboard could play later than it would otherwise.</p><p> This enumeration can help an application decide how aggressive to be about reducing latency in the {{UI}}. For example, if the application returns true when the effect is {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}}, then other animations might get canceled or compressed even though doing so was not strictly necessary to play a new animation within the application-specified longest acceptable delay.</p> + + + <dd> <p> This storyboard might not be successfully scheduled.</p> </dd> + + + <dd> <p> The storyboard will be scheduled, but might start playing later.</p> </dd> + + + + + <p> Defines animation slope characteristics.</p> + + + <dd> <p> An increasing slope.</p> </dd> + + + <dd> <p> A decreasing slope.</p> </dd> + + + + + <p>Defines which aspects of an interpolator depend on a given input.</p> + <p>Multiple <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> values can be combined using a bitwise-{{OR}} operation.</p> + + + <dd> <p>No aspect depends on the input.</p> </dd> + + + <dd> <p>The intermediate values depend on the input.</p> </dd> + + + <dd> <p>The final value depends on the input.</p> </dd> + + + <dd> <p>The final velocity depends on the input.</p> </dd> + + + <dd> <p>The duration depends on the input.</p> </dd> + + + + + <p> Defines the behavior of a timer when the animation manager is idle.</p> + + + <dd> <p> The timer continues to generate timer events (is enabled) when the animation manager is idle.</p> </dd> + + + <dd> <p> The timer is suspended (disabled) when the animation manager is idle. </p> </dd> + + + + + <p> Defines activity status for a timer's client.</p> + + + <dd> <p> The client is idle.</p> </dd> + + + <dd> <p> The client is busy.</p> </dd> + + + + + + + + <p> Defines the animation manager, which provides a central interface for creating and managing animations.</p> + <p><strong>{{IUIAnimationManager}}</strong> defines a central control object for animations. A single instance of <strong>{{IUIAnimationManager}}</strong> is typically used to compose, schedule, and manage all animations for a client application.</p><p> <strong>{{IUIAnimationVariable}}</strong>, <strong>{{IUIAnimationTransition}}</strong>, and <strong>{{IUIAnimationStoryboard}}</strong> are the primary components for building animations. Use <strong>{{IUIAnimationManager}}</strong> to create and manage these components.</p> + + + + <p> Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the new animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p> Creates a new storyboard.</p> + <p>Storyboards can specify complex coordinated updates to many animation variables. These updates happen in sequence or in parallel, and they are guaranteed to remain synchronized within the storyboard. A storyboard is created, populated with transitions on animation variables, and then scheduled. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling <strong>FinishAllStoryboards</strong> ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changing statuses of storyboards as necessary and updating any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>This method is used to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks section for more information.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it has not started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable once the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when the scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the reminder of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable.</p> </dd> + + + + + <p> Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>The result can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable.</p> </dd> + + + + + <p> Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable as an integer.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the final value of the animation variable as an integer. This is the value after all currently scheduled animations have completed.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the previous value of the animation variable as an integer. This is the value of the animation variable before the most recent update.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the storyboard that is currently animating the animation variable.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The current storyboard, or <strong>{{NULL}}</strong> if no storyboard is currently animating the animation variable.</p> </dd> + + + + + <p> Sets the lower bound (floor) for the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The lower bound for the animation variable.</p> </dd> + + + + + <p> Sets an upper bound (ceiling) for the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The upper bound for the animation variable.</p> </dd> + + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Sets the tag for an animation variable.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for an animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The animation variable's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Specifies a variable change handler. This handler is notified of changes to the value of the animation variable.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableChangeHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Specifies an integer variable change handler. This handler is notified of changes to the integer value of the animation variable.</p> + <p>Passing {{NULL}} for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Winodws Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> An integer variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableIntegerChangeHandler}}</strong> interface or be {{NULL}}. See Remarks.</p> </dd> + + + + + <p> Defines a storyboard, which contains a group of transitions that are synchronized relative to one another.</p> + <p><strong>{{IUIAnimationStoryboard}}</strong> is a primary component for building animations, along with <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationTransition}}</strong>. </p> + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong> Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p> Creates a loop between two specified keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_END_KEYFRAME_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>It might not be possible to determine the end keyframe time when the start keyframe is reached.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_LOOPS_OVERLAP}}</strong></dt> </dl> </td><td> <p>Two repeated portions of a storyboard might overlap.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p> The keyframe at which the loop is to end. It must not be posssible for <em>endKeyframe</em> to occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p> The number of times the loop is to be repeated; this parameter must be 0 or a positive number. Use <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) to repeat the loop indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to attempt to add itself to the schedule of playing storyboards. The rules are as follows:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard begins playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of a keyframe loop iteration, the loop is terminated and the loop value is set to the starting loop value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler to be called whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Defines a transition, which determines how an animation variable changes over time.</p> + <p><strong>{{IUIAnimationTransition}}</strong> is one of the primary interfaces used to add animation to an application, along with the <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationStoryboard}}</strong> interfaces.</p><p> <strong>{{UIAnimationTransitionLibrary}}</strong> implements a library of standard transitions.</p> + + + + <p> Sets the initial value for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p> Sets the initial velocity for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Determines whether a transition's duration is currently known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p> Returns {{S_OK}} if the duration is known, {{S_FALSE}} if the duration is not known, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in schedule.</p> </td></tr> </table><p>?</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> method before calling this method. This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The requested value for the duration cannot be determined.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling status updates to an animation manager.</p> + + + + <p> Handles status changes to an animation manager.</p> + <p>A call made in this callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Defines a method for handling events related to animation variable updates.</p> + <p> <strong> OnValueChanged</strong> receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong>.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> method.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling animation variable update events.</p> + <p> <strong> OnIntegerValueChanged</strong> receives animation variable value updates as <strong>{{INT32}}</strong> values. To receive value updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + <p>The rounding mode for an animation variable is specified using the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines methods for handling status and update events for a storyboard.</p> + + + + <p> Handles events that occur when a storyboard's status changes.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::SetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard whose status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Handles events that occur when a storyboard is updated.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p> Defines a method for priority comparison that the animation manager uses to resolve scheduling conflicts.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p> + + + + <p> Determines whether a new storyboard has priority over a scheduled storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified in <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates an instantaneous transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The figure below shows the effect on an animation variable over time during an instantaneous transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The figure below shows the effect on an animation variable over time during a constant-duration transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The figure below shows the effect on an animation variable over time during a discrete transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear-speed transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal-velocity transition, with an amplitude determined by the initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-velocity transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave in seconds.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range transition, with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave, in seconds.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise with the deceleration ratio. If the initial velocity is nonzero, it is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The figures below show the effect on animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the above figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of the time spent accelerating to the duration.</p> </dd> + + + <dd> <p> The ratio of the time spent decelerating to the duration.</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The figure below shows such a reversal transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to a specified final value over the duration of the transition, ending at a specified velocity.</p><p>The figure below shows the effect on an animation variable over time during a cubic transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The figure below shows the effect on an animation variable over time during a parabolic-acceleration transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Defines methods for creating a custom interpolator.</p> + <p>Client applications can use the transitions provided in <strong>{{IUIAnimationTransitionLibrary}}</strong> or in a library provided by a third party; however, if you need custom behavior, you can create your own transitions by implementing the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements <strong>{{IUIAnimationTransition}}</strong> by calling the <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong> method and passing in the custom interpolator. After the interpolator is wrapped, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> interface.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return <strong>{{IUIAnimationTransition}}</strong> interfaces.</p> + + + + <p>Sets the initial value and velocity at the start of the transition.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator}}</strong> at different offsets. However, it can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + + + <p> Sets the duration of the transition.</p> + <p>Windows Animation calls this method only after calling the <strong>GetDependencies</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency will have a duration parameter in its associated creation method of <strong>{{IUIAnimationTransitionFactory}}</strong>. The interpolator should store its duration when first initialized and overwrite it when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + + + <p> Interpolates the value of an animation variable at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + + + <p> Interpolates the velocity, or rate of change, at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p> The interpolated velocity.</p> </dd> + + + + + <p> Gets the aspects of the interpolator that depend on the initial value or velocity passed to <strong>SetInitialValueAndVelocity</strong>, or that depend on the duration passed to <strong>SetDuration</strong>.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator (1) that accepts a final value as a parameter, (2) that always comes to a gradual stop at that final value, and (3) whose duration is determined by the difference between the final and initial values. The interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for <em>initialValueDependencies</em>. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> because this is set when the interpolator is created and is not affected by the initial value. Likewise it should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong> because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter what velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong> because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for creating transitions from custom interpolators.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that it can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong>.</p> + + + + <p> Creates a transition from a custom interpolator.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p> </dd> + + + <dd> <p> The new transition.</p> </dd> + + + + + <p> Defines an animation timer, which provides services for managing animation timing.</p> + <p>A timer helps to manage animation rendering by automatically indicating the passage of a small unit of time, called a tick. In turn, ticks can trigger animation rendering or other animation events. Each animation timer provides timing for a single animation manager.</p><p>The timing system is designed to provide the necessary timing services needed to support animations and does not require applications to play an explicit role in generating the ticks. The animation timer can be set up to automatically update the animation manager for each tick without application-side handling.</p><p>An application may not need to use a timer with Windows Animation, depending on the graphics platform it is using. For example, an application drawing with Direct2D or Direct3D can synchronize to monitor's refresh rate, yielding very smooth animation. However, such applications may still find the <strong>{{IUIAnimationTimer}}</strong> interface useful for its <strong>GetTime</strong> method, which returns an accurate system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + + + + <p> Specifies a timer update handler.</p> + <p> The timer update handler receives time updates (ticks) from the timer. The timer indicates an update by calling the <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> method on the specified handler.</p><p>Passing <strong>{{NULL}}</strong> for the <em>updateHandler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. If the update handler is already connected to a timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer update handler, or <strong>{{NULL}}</strong> (see Remarks). The specified object must implement the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> interface.</p> </dd> + + + <dd> <p> A member of <strong>{{UI_ANIMATION_IDLE_BEHAVIOR}}</strong> that specifies the behavior of the timer when it is idle.</p> </dd> + + + + + <p> Specifies a timer event handler.</p> + <p> Timing events include the <strong>OnPreUpdate</strong>, <strong>OnPostUpdate</strong>, and <strong>OnRenderingTooSlow</strong> methods of the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface.</p><p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer event handler. The specified object must implement the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Enables the animation timer.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Disables the animation timer.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Determines whether the timer is currently enabled.</p> + <p> Returns {{S_OK}} if the animation timer is enabled, {{S_FALSE}} if the animation timer is disabled, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the current time.</p> + <p> This method can be used in both the application-driven and timer-driven configurations to retrieve the system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See Windows Animation Error Codes for a list of error codes.</p> + + + <dd> <p> The current time, in <strong>{{UI_ANIMATION_SECONDS}}</strong>.</p> </dd> + + + + + <p> Sets the frame rate below which the timer notifies the application that rendering is too slow.</p> + <p> If the rendering frame rate for an animation falls below the specified frame rate, an <strong>{{IUIAnimationTimerEventHandler::OnRenderingTooSlow}}</strong> event is raised.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The minimum desirable frame rate, in frames per second.</p> </dd> + + + + + <p> Defines methods for handling timing update events.</p> + <p>The <strong>{{UIAnimationManager}}</strong> object implements this interface, so a client application can query the <strong>{{UIAnimationManager}}</strong> object for this interface and then pass the interface to <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>. It is not necessary to disconnect the <strong>{{UIAnimationManager}}</strong> and <strong>{{UIAnimationTimer}}</strong> objects; releasing them both is sufficient to clean up.</p> + + + + <p> Handles update events from the timer.</p> + <p>This method is used by the <strong>{{UIAnimationTimer}}</strong> object to update the state of the <strong>{{UIAnimationManager}}</strong> object. The <strong>{{UIAnimationTimer}}</strong> object calls <strong>{{UIAnimationTimerEventHandler::OnPostUpdate}}</strong> only when calls to this method return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current timer time, in seconds.</p> </dd> + + + <dd> <p> Receives a member of the <strong>{{UI_ANIMATION_UPDATE_RESULT}}</strong> enumeration, indicating whether any animation variables changed as a result of the update.</p> </dd> + + + + + <p> Specifies a handler for timer client status change events.</p> + <p>If the update handler is already connected to the timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}.</strong></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A handler for timer client events. The specified object must implement <strong>{{IUIAnimationTimerUpdateHandler}}</strong>. </p> </dd> + + + + + <p> Clears the handler for timer client status change events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling events related to changes in timer client status.</p> + + + + <p> Handles events that occur when the status of the timer's client changes.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new status of the timer's client.</p> </dd> + + + <dd> <p> The previous status of the timer's client.</p> </dd> + + + + + <p> Defines methods for handling timing events.</p> + <p> Use <strong> SetTimerEventHandler</strong> to specify the timing events handler for an instance of <strong>{{IUIAnimationTimer}}</strong>. </p> + + + + <p> Handles events that occur before an animation update begins.</p> + <p>For each tick, a timer calls the following sequence of methods:</p><ul> <li><strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong></li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong> </li> </ul><p><strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong> method. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur after an animation update is finished.</p> + <p>The <strong>{{UIAnimationTimer}}</strong> object calls this method only when calls to <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p><p>For each tick, a timer calls the following sequence of methods:</p><ul> <li> <strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li><strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong></li> </ul><p> <strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong>. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur when the rendering frame rate for an animation falls below a minimum desirable frame rate. </p> + <p> The minimum desirable frame rate is specified using the <strong>{{IUIAnimationTimer::SetFrameRateThreshold}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current frame rate, in frames per second.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p>Creates a new animation variable for each specified dimension.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create three animation variables for the X, Y, and Z coordinates of an object that can move freely within a a three-dimensional space.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) of initial values for the animation variable.</p> </dd> + + + <dd> <p>The number of dimensions that require animated values. This parameter specifies the number of values listed in <em>initialValue</em>.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p>Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p>Creates a new storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling the <strong>FinishAllStoryboards</strong> method ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed.</p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. </p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changes the status of all storyboards as necessary, and updates any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status of the animation manager.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>Use this method to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it hasn't started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable after the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info. </p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the rest of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager2::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or on any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines an animation variable, which represents a visual element that can be animated in multiple dimensions.</p> + + + + <p>Gets the number of dimensions that the animation variable is to be animated in.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the animation curve of the animation variable.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + + + <p>Gets the animation curve of the animation variable for the specified dimension.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + <dd> <p>The number of animation curves. +</p> </dd> + + + + + <p>Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + + + <p>Gets the final value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + + + <p>Gets the previous value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the integer value of the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the integer value of the animation variable for the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the final integer value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the final integer value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable in the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the active storyboard for the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The active storyboard, or {{NULL}} if the animation variable is not being animated.</p> </dd> + + + + + <p>Sets the lower bound (floor) for the value of the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The lower bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the lower bound (floor) value of each specified dimension for the animation variable. The value of each animation variable should not fall below its lower bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the lower bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require lower bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) for the value of the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The upper bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) value of each specified dimension for the animation variable. The value of each animation variable should not rise above its upper bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the upper bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require upper bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the rounding mode of the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The rounding mode.</p> </dd> + + + + + <p>Sets the tag of the animation variable. </p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>), and it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>The identifier portion of the tag. </p> </dd> + + + + + <p> Gets the tag of the animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional, so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p>Specifies a handler for changes to the value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The handler for changes to the value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the integer value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>Shutdown</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the integer value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the animation curve of the animation variable. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the animation curve of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationTransition}}</strong> interface that defines a transition. An <strong>{{IUIAnimationTransition2}}</strong> transition determines how an animation variable changes over time in a given dimension.</p> + + + + <p>Gets the number of dimensions in which the animation variable has a transition specified.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value of the transition.</p> + <p>Do not call this method after the transition has been added to a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p>Sets the initial value of the transition for each specified dimension in the animation variable.</p> + <p>The animation manager should not call this method after the transition has been added to a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial values for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition values. This parameter specifies the number of values listed in <em>value</em>.</p> </dd> + + + + + <p>Sets the initial velocity of the transition.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Sets the initial velocity of the transition for each specified dimension in the animation variable.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial velocities for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition velocities. This parameter specifies the number of values listed in <em>velocity</em>.</p> </dd> + + + + + <p>Determines whether the duration of a transition is known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>IsDurationKnown</strong> method before calling this method. </p><p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling updates to an <strong>animation manager</strong>.</p> + + + + <p> Handles status changes to an <strong>animation manager</strong>.</p> + <p>Calls made to other Windows Animation methods from <strong>{{IUIAnimationManager2::OnManagerStatusChanged}}</strong> fail and return <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + <p> The <strong> OnValueChanged</strong> method receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use the <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p> + + + + + + + <p> Handles events that occur when the value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>{{IUIAnimationVariableChangeHandler2::OnValueChanged}}</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable2::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new value of the animation variable.</p> </dd> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension in which the value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableIntegerChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + + + + <p> Handles events that occur when the integer value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>OnValueChanged</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, and 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>GetValue</strong> </li> <li> <strong>GetFinalValue</strong> </li> <li> <strong>GetPreviousValue</strong> </li> <li> <strong>GetIntegerValue</strong> </li> <li> <strong>GetFinalIntegerValue</strong> </li> <li> <strong>GetPreviousIntegerValue</strong> </li> <li> <strong>GetCurrentStoryboard</strong> </li> <li> <strong>GetVariableFromTag</strong> </li> <li> <strong>GetStoryboardFromTag</strong> </li> <li> <strong>GetTag</strong> </li> <li> <strong>GetTag</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The previous integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The dimension in which the integer value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation curve update events. </p> + + + + <p> Handles events that occur when the animation curve of an animation variable changes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The animation variable for which the animation curve has been updated.</p> </dd> + + + + + <p>Defines methods for handling storyboard events. </p> + + + + <p> Handles storyboard status change events.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager2::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::SetTag}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard for which the status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p>Handles storyboard update events.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager2::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p>Defines a method for handling storyboard loop iteration events.</p> + + + + <p>Handles loop iteration change events, which occur when a loop within a storyboard begins a new iteration.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard to which the loop belongs.</p> </dd> + + + <dd> <p>The loop {{ID}}.</p> </dd> + + + <dd> <p>The iteration count for the latest <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + <dd> <p>The iteration count for the previous <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + + + <p>Defines a method that resolves scheduling conflicts through priority comparison.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p> + + + + <p>Determines the relative priority between a scheduled storyboard and a new storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded, or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> </ul> + <p>Returns the following if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified by <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p>Defines a library of standard transitions for a specified dimension.</p> + <p>Windows Animation includes a library of common transitions that developers can apply to variables through a storyboard. The parameters for specifying a transition depend on the type of transition. For some transitions, the duration of the transition is an explicit parameter; for others, the duration is determined by other parameters, such as speed or acceleration when the transition begins. A transition's initial value or velocity can be overridden if a discontinuous jump is desired, and duration can be queried after the transition is added to a storyboard.</p><p>If an application requires an effect that cannot be specified using the transition library, developers can implement custom transitions. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from interpolators. An interpolator must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by the <strong>{{UIAnimationTransitionFactory2}}</strong> object.</p> + + + + <p> Creates an instantaneous scalar transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates an instantaneous vector transition for each specified dimension.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant scalar transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The following figure shows the change in value for an animation variable over time during a constant-duration transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete scalar transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a discrete vector transition for each specified dimension.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear scalar transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear vector transition in the specified dimension.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed scalar transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a linear-speed vector transition in the specified dimension.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal scalar transition where amplitude is determined by initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-velocity transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range scalar transition with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate scalar transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise for the deceleration ratio. If the value of initial velocity is nonzero, the value is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The following figures show the change in value for animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent accelerating (0 to 1).</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent decelerating (0 to 1).</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal scalar transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The folllowing figure shows such a reversal transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic scalar transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a cubic vector transition for each specified dimension.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final velocities (in units per second) of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em> and <em>finalVelocity</em>.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop scalar transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches the final value with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The following figure shows the change in value over time of an animation variable during a smooth-stop transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration scalar transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value, ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The following figure shows the change in value over time of an animation variable during a parabolic-acceleration transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity, in units/second, at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration, in units/second?, during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear scalar transition.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time for an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear vector transition for each specified dimension.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time of an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p>Defines a method that allows a custom interpolator to provide transition information, in the form of a cubic polynomial curve, to the animation manager.</p> + + + + <p>Adds a cubic polynomial segment that describes the shape of a transition curve to the animation function. </p> + <p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The cubic polynomial constant coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial linear coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial quadratic coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial cubic coefficient.</p> </dd> + + + + + <p>Adds a sinusoidal segment that describes the shape of a transition curve to the animation function. </p> + <p>Defined by the function Y(t) = bias + amplitude*sin(360*frequency*t + phase), where 'sin' is the sin of an angle specified in degrees (for example, sin(n + 360) == sin(n) for any real number 'n').</p><p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The bias constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The amplitude constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The frequency constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The phase constant in the sinusoidal function.</p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationInterpolator}}</strong> interface that defines methods for creating a custom interpolator. <strong>{{IUIAnimationInterpolator2}}</strong> supports interpolation in a given dimension. </p> + <p>Client applications can use the transitions provided in the <strong>{{IUIAnimationTransitionLibrary}}</strong> or<strong>{{IUIAnimationTransitionLibrary2}}</strong> interfaces, or in a library provided by a third party; however, custom transitions can be created by implementing the <strong>{{IUIAnimationInterpolator}}</strong> or <strong>{{IUIAnimationInterpolator2}}</strong> interfaces.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements the <strong>{{IUIAnimationTransition}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong>) or the <strong>{{IUIAnimationTransition2}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory2::CreateTransition}}</strong>) and passing in the custom interpolator. After the interpolator wrapper has been created, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> or <strong>{{IUIAnimationTransition2}}</strong> interfaces.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return an <strong>{{IUIAnimationTransition}}</strong> interface or an <strong>{{IUIAnimationTransition2}}</strong> interface.</p> + + + + <p>Gets the number of dimensions that require interpolation.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value and velocity of the transition for the given dimension.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator2}}</strong> at different offsets. However, <strong>SetInitialValueAndVelocity</strong> can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + <dd> <p>The dimension in which to set the initial value or velocity of the transition.</p> </dd> + + + + + <p>Used to determine which kinds of command lists are capable of supporting various operations. For example, whether a command list supports immediate writes. </p> + + + <dd> <p>Specifies that no command list supports the operation in question.</p> </dd> + + + <dd> <p>Specifies that direct command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that command list bundles can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that compute command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that copy command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-decode command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-processing command lists can support the operation is question.</p> </dd> + + + + + <p>Sets the duration of the transition in the given dimension.</p> + <p>Windows Animation calls this method only after calling the <strong>{{IUIAnimationInterpolator2::GetDependencies}}</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency has a duration parameter in the <strong>{{IUIAnimationTransitionFactory}}</strong> or <strong>{{IUIAnimationTransitionFactory2}}</strong> creation method that is associated with that interpolator. The interpolator should store its duration when first initialized and overwrite the duration when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator doesn't need to check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + <dd> <p>The dimension from which to retrieve the final value.</p> </dd> + + + + + <p>Interpolates the value of an animation variable at the specified offset and for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the value.</p> </dd> + + + + + <p>Interpolates the velocity, or rate of change, at the specified offset for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition. </p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero. +</p> </dd> + + + <dd> <p>The interpolated velocity.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the velocity.</p> </dd> + + + + + <p>Generates a primitive interpolation of the specified animation curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that defines the custom animation curve information.</p> </dd> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + + + <p>For the given dimension, <strong>GetDependencies</strong> retrieves the aspects of the interpolator that depend on the initial value or velocity that is passed to the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method or the duration that is passed to the <strong>{{IUIAnimationInterpolator2::SetDuration}}</strong> method.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator that:</p><ul> <li>Accepts a final value as a parameter.</li> <li>Always comes to a gradual stop at that final value.</li> <li>Has a duration determined by the difference between the final value and the initial value.</li> </ul><p>In this case the interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for the <em>initialValueDependencies</em> parameter. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong>, because this value is set when the interpolator is created and is not affected by the initial value. Likewise, the interpolator should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong>, because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return a correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, and then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter which velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong>, because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for creating transitions from custom interpolators.</p><p><strong>{{IUIAnimationTransitionFactory2}}</strong> supports the creation of transitions in a specified dimension.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that the application can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement either the <strong>{{IUIAnimationInterpolator}}</strong> interface or the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong> or by <strong>{{UIAnimationTransitionFactory2}}</strong>.</p> + + + + <p>Creates a transition from a custom interpolator for a given dimension.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface.</p> </dd> + + + <dd> <p>The new transition.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p>Creates a loop between two keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p>The keyframe at which the loop is to end. <em>endKeyframe</em> must not occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p>The number of times the loop is to be repeated; the last iteration of a loop can terminate fractionally between keyframes. A value of zero indicates that the specified portion of a storyboard will not be played. A value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) indicates that the loop will repeat indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + <dd> <p>The pattern for the loop iteration. </p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) specifies that the start of the loop must alternate between keyframes (k1-&gt;k2, k2-&gt;k1, k1-&gt;k2, and so on).</p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_NORMAL}}</strong> (0) specifies that the start of the loop must begin with the first keyframe (k1-&gt;k2, k1-&gt;k2, k1-&gt;k2, and so on).</p> <strong>Note</strong>??If <em>repeatMode</em> has a value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) and <em>cRepetition</em> has a value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1), the loop terminates on the end keyframe. + ? </dd> + + + <dd> <p>The handler for each loop iteration event. The default value is 0.</p> </dd> + + + <dd> <p>The loop {{ID}} to pass to <em>pIterationChangeHandler</em>. The default value is 0.</p> </dd> + + + <dd> <p>If true, specifies that <em>pIterationChangeHandler</em> will be incorporated into the estimate of the time interval until the next animation event that is returned by the <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> method. The default value is 0, or false.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher-priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager2::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p><p> Use <strong>{{IUIAnimationStoryboard2::SetSkipDuration}}</strong> to start a storyboard animation at a specified offset instead of delaying the start of a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p>Specifies an offset from the beginning of a storyboard at which to start animating.</p> + <p>Calls to <strong>SetSkipDuration</strong> fail if the storyboard has been scheduled.</p><p><strong>SetSkipDuration</strong> does not delay the start of a scheduled storyboard. See <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> for more info on how to set a delay for a scheduled storyboard.</p><p>This diagram shows a skip duration, or offset, for a storyboard. </p><p></p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset, or amount of time, to skip at the beginning of the storyboard.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of an alternating keyframe loop iteration, the loop is terminated with the loop value set to the ending loop value.</p><p> If this method is called at the end of a non-alternating keyframe loop iteration, where "loop wrapping" results in the loop value being set to the starting value of the next iteration, the loop is executed once more in order for the loop value to be set to the ending loop value.</p><p>For alternating keyframe loops, each iteration has a starting value that is equivalent to the ending value of the preceding loop. In this case, "loop wrapping" is not an issue.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). It can be used by an application to identify a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>This method can return the identifier, the object, or both portions of the tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler that Windows Animation should call whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardStatusChanged</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardUpdated</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Strip flag options.</p> + <p>These flags are used by <strong>{{D3DStripShader}}</strong>.</p> + + + + <p>Values that identify parts of the content of an arbitrary length data buffer.</p> + <p>These values are passed to the <strong>{{D3DGetBlobPart}}</strong> or <strong>{{D3DSetBlobPart}}</strong> function.</p> + + + + <p>Describes shader data.</p> + <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures is passed to <strong>{{D3DCompressShaders}}</strong> to compress the shader data into a more compact form.</p> + + + <dd> <p>A reference to shader data.</p> </dd> + + + <dd> <p>Length of shader data that <strong>pBytecode</strong> points to.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Reads a file that is on disk into memory.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DReadFileToBlob}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to read into memory.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that contains information that <strong>{{D3DReadFileToBlob}}</strong> read from the <em>pFileName</em> file. You can use this <strong>{{ID3DBlob}}</strong> interface to access the file information and pass it to other compiler functions.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Writes a memory blob to a file on disk.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DWriteBlobToFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a <strong>{{ID3DBlob}}</strong> interface that contains the memory blob to write to the file that the <em>pFileName</em> parameter specifies.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to which to write.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to overwrite information in the <em>pFileName</em> file. {{TRUE}} specifies to overwrite information and {{FALSE}} specifies not to overwrite information.</p> </dd> + + + + + <p>Compile {{HLSL}} code or an effect file into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile}}</strong> and <strong>{{D3DCompile2}}</strong> is that the latter method takes some optional parameters that can be used to control some aspects of how bytecode is generated. If this extra flexibility is not required, there is no performance gain from using <strong>{{D3DCompile2}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> You can use this parameter for strings that specify error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p>Optional. A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The name of the shader entry point function where shader execution begins. When you compile using a fx profile (for example, fx_4_0, fx_5_0, and so on), <strong>{{D3DCompile}}</strong> ignores <em>pEntrypoint</em>. In this case, we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it. For all other shader profiles, a valid <em>pEntrypoint</em> is required. +</p> </dd> + + + <dd> <p>A string that specifies the shader target or set of shader features to compile against. The shader target can be shader model 2, shader model 3, shader model 4, or shader model 5. The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile constants</strong>.</p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile effect constants</strong>. When you compile a shader and not an effect file, <strong>{{D3DCompile}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong> is that <strong>{{D3DCompile2}}</strong> takes some optional parameters (<em>SecondaryDataFlags</em>, <em>pSecondaryData</em> and <em>SecondaryDataSize</em>) that can be used to control some aspects of how bytecode is generated. Refer to the descriptions of these parameters for more details. There is no difference otherwise to the efficiency of the bytecode generated between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data ({{ASCII}} {{HLSL}} code).</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>An optional reference to a constant null-terminated string containing the name that identifies the source data to use in error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>An optional array of <strong>{{D3D_SHADER_MACRO}}</strong> structures that define shader macros. Each macro definition contains a name and a {{NULL}}-terminated definition. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> interface that the compiler uses to handle include files. If you set this parameter to <strong>{{NULL}}</strong> and the shader contains a #include, a compile error occurs. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the shader entry point function where shader execution begins. When you compile an effect, <strong>{{D3DCompile2}}</strong> ignores <em>pEntrypoint</em>; we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that specifies the shader target or set of shader features to compile against. The shader target can be a shader model (for example, shader model 2, shader model 3, shader model 4, or shader model 5). The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>A combination of shader <strong>{{D3D}} compile constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code.</p> </dd> + + + <dd> <p>A combination of effect <strong>{{D3D}} compile effect constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the effect. When you compile a shader and not an effect file, <strong>{{D3DCompile2}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS}} (0x01)</td><td>Merge unordered access view ({{UAV}}) slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS}} (0x02)</td><td>Preserve template slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH}} (0x04)</td><td>Require that templates in the secondary data that the <em>pSecondaryData</em> parameter points to match when the compiler compiles the {{HLSL}} code.</td></tr> </table> <p>?</p> <p>If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to secondary data. If you don't pass secondary data, set to <strong>{{NULL}}</strong>. Use this secondary data to align {{UAV}} slots in two shaders. Suppose shader A has {{UAVs}} and they are bound to some slots. To compile shader B such that {{UAVs}} with the same names are mapped in B to the same slots as in A, pass A?s byte code to <strong>{{D3DCompile2}}</strong> as the secondary data. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSecondaryData</em> points to. If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store. Refer to the section, "Compiling shaders for {{UWP}}", in the remarks for <strong>{{D3DCompile2}}</strong>.?<p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DCompileFromFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Preprocesses uncompiled {{HLSL}} code.</p> + <p><strong>{{D3DPreprocess}}</strong> outputs #line directives and preserves line numbering of source input so that output line numbering can be properly related to the input source.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> The name of the file that contains the uncompiled {{HLSL}} code.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The address of a <strong>{{ID3DBlob}}</strong> that contains the compiled code.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DBlob}}</strong> that contains compiler error messages, or <strong>{{NULL}}</strong> if there were no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Gets shader debug information.</p> + <p>Debug information is embedded in the body of the shader after calling <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data; either uncompiled or compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains debug information.</p> </dd> + + + + + <p>Gets a reference to a reflection interface.</p> + <p>Shader code contains metadata that can be inspected using the reflection {{APIs}}.</p><p>The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> Interface from a shader.</p><pre> pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector); +</pre> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11ShaderReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a reflection interface.</p> </dd> + + + + + <p>Creates a library-reflection interface from source data that contains an {{HLSL}} library of functions. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>A reference to source data as an {{HLSL}} library of functions. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11LibraryReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to a library-reflection interface, <strong>{{ID3D11LibraryReflection}}</strong>.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Flags affecting the behavior of <strong>{{D3DDisassemble}}</strong>. <em>Flags</em> can be a combination of zero or more of the following values. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_COLOR_CODE}}</strong></td><td>Enable the output of color codes.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}}</strong></td><td>Enable the output of default values.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}}</strong></td><td>Enable instruction numbering.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}}</strong></td><td>No effect.</td></tr> <tr><td><strong>{{D3D_DISASM_DISABLE_DEBUG_INFO}}</strong></td><td>Disable debug information.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}}</strong></td><td>Enable instruction offsets.</td></tr> <tr><td><strong>{{D3D_DISASM_INSTRUCTION_ONLY}}</strong></td><td>Disassemble instructions only.</td></tr> <tr><td><strong> {{D3D_DISASM_PRINT_HEX_LITERALS}}</strong></td><td>Use hex symbols in disassemblies.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The comment string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses assembly text.</p> </dd> + + + + + <p>Disassembles a specific region of compiled Microsoft High Level Shader Language ({{HLSL}}) code.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DDisassembleRegion}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of zero or more of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DDisassembleRegion}}</strong> disassembles the compiled shader data.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_DISASM_ENABLE_COLOR_CODE}} (0x01)</td><td>Enable the output of color codes.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}} (0x02)</td><td>Enable the output of default values.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}} (0x04)</td><td>Enable instruction numbering.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}} (0x08)</td><td>No effect.</td></tr> <tr><td>{{D3D_DISASM_DISABLE_DEBUG_INFO}} (0x10)</td><td>Disable the output of debug information.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}} (0x20)</td><td>Enable the output of instruction offsets.</td></tr> <tr><td>{{D3D_DISASM_INSTRUCTION_ONLY}} (0x40)</td><td>This flag has no effect in <strong>{{D3DDisassembleRegion}}</strong>. Cycle information comes from the trace; therefore, cycle information is available only in <strong>{{D3DDisassemble11Trace}}</strong>'s trace disassembly.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>The number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> starts the disassembly.</p> </dd> + + + <dd> <p>The number of instructions to disassemble.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> finishes the disassembly.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses the disassembled {{HLSL}} code.</p> </dd> + + + + + <p>Creates a linker interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateLinker}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Linker}}</strong> interface that is used to link a shader module.</p> </dd> + + + + + <p>Creates a shader module interface from source data for the shader module. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DLoadModule}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the source data for the shader module.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Module}}</strong> interface that is used for shader resource re-binding.</p> </dd> + + + + + <p>Creates a function-linking-graph interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateFunctionLinkingGraph}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11FunctionLinkingGraph}}</strong> interface that is used for constructing shaders that consist of a sequence of precompiled function calls.</p> </dd> + + + + + <p>Retrieves the byte offsets for instructions within a section of shader code.</p> + <p>A new kind of Microsoft High Level Shader Language ({{HLSL}}) debugging information from a program database ({{PDB}}) file uses instruction-byte offsets within a shader blob (arbitrary-length data buffer). You use <strong>{{D3DGetTraceInstructionOffsets}}</strong> to translate to and from instruction indexes.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DGetTraceInstructionOffsets}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the instruction offsets.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE}} (0x01)</td><td>Include non-executable code in the retrieved information.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The index of the instruction in the compiled shader data for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> starts to retrieve the byte offsets.</p> </dd> + + + <dd> <p>The number of instructions for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the byte offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the actual number of offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of instructions in the section of shader code.</p> </dd> + + + + + <strong>Note</strong>??<strong>{{D3DGetInputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the output signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetInputAndOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input and output signatures from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Removes unwanted blobs from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Strip flag options, represented by <strong>{{D3DCOMPILER_STRIP_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the unwanted stripped out shader code.</p> </dd> + + + + + <p>Retrieves a specific part from a compilation result.</p> + <p><strong>{{D3DGetBlobPart}}</strong> retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the <em>Part</em> parameter specifies.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part of the buffer to retrieve.</p> </dd> + + + <dd> <p>Flags that indicate how to retrieve the blob part. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the specified part of the buffer.</p> </dd> + + + + + <p>Sets information in a compilation result.</p> + <p><strong>{{D3DSetBlobPart}}</strong> modifies data in a compiled shader. Currently, <strong>{{D3DSetBlobPart}}</strong> can update only the private data in a compiled shader. You can use <strong>{{D3DSetBlobPart}}</strong> to attach arbitrary uninterpreted data to a compiled shader.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DSetBlobPart}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The length of the compiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part to set. Currently, you can update only private data; that is, <strong>{{D3DSetBlobPart}}</strong> currently only supports the <strong>{{D3D_BLOB_PRIVATE_DATA}}</strong> value.</p> </dd> + + + <dd> <p>Flags that indicate how to set the blob part. Currently, no flags are defined; therefore, set to zero.</p> </dd> + + + <dd> <p>A reference to data to set in the compilation result.</p> </dd> + + + <dd> <p>The length of the data that <em>pPart</em> points to.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface for the new shader in which the new part data is set.</p> </dd> + + + + + <p>Creates a buffer.</p> + <p>The latest {{D3dcompiler_nn}}.dll contains the <strong>{{D3DCreateBlob}}</strong> compiler function. Therefore, you are no longer required to create and use an arbitrary length data buffer by using the <strong>{{D3D10CreateBlob}}</strong> function that is contained in {{D3d10}}.dll.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>Number of bytes in the blob.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the buffer.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Compresses a set of shaders into a more compact form. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>The number of shaders to compress.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures that describe the set of shaders to compress.</p> </dd> + + + <dd> <p>Flags that indicate how to compress the shaders. Currently, only the {{D3D_COMPRESS_SHADER_KEEP_ALL_PARTS}} (0x00000001) flag is defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the compressed shader data.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Decompresses one or more shaders from a compressed set. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The number of shaders to decompress.</p> </dd> + + + <dd> <p>The index of the first shader to decompress.</p> </dd> + + + <dd> <p>An array of indexes that represent the shaders to decompress.</p> </dd> + + + <dd> <p>Flags that indicate how to decompress. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the decompressed shader data.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of shaders that <strong>{{D3DDecompressShaders}}</strong> decompressed.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code from a Direct3D10 effect.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Shader compile options.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains disassembly text.</p> </dd> + + + + + <p>Indicates shader type.</p> + + + <dd> <p>Pixel shader.</p> </dd> + + + <dd> <p>Vertex shader.</p> </dd> + + + <dd> <p>Geometry shader.</p> </dd> + + + <dd> <p>Hull shader.</p> </dd> + + + <dd> <p>Domain shader.</p> </dd> + + + <dd> <p>Compute shader.</p> </dd> + + + <dd> <p>Indicates the end of the enumeration constants.</p> </dd> + + + + + <p>Describes a shader signature.</p> + <p>A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.</p><p>When compiling a shader or an effect, some {{API}} calls validate shader signatures That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.</p><p>Get a shader-signature from a shader or an effect by calling {{APIs}} such as <strong>{{ID3D11ShaderReflection::GetInputParameterDesc}}</strong>. </p> + + + <dd> <p>A per-parameter string that identifies how the data will be used. For more info, see Semantics. </p> </dd> + + + <dd> <p>Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.</p> </dd> + + + <dd> <p>The register that will contain this variable's data.</p> </dd> + + + <dd> <p>A <strong>{{D3D_NAME}}</strong>-typed value that identifies a predefined string that determines the functionality of certain pipeline stages.</p> </dd> + + + <dd> <p>A <strong>{{D3D_REGISTER_COMPONENT_TYPE}}</strong>-typed value that identifies the per-component-data type that is stored in a register. Each register can store up to four-components of data.</p> </dd> + + + <dd> <p>Mask which indicates which components of a register are used.</p> </dd> + + + <dd> <p>Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). </p> </dd> + + + <dd> <p>Indicates which stream the geometry shader is using for the signature parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_MIN_PRECISION}}</strong>-typed value that indicates the minimum desired interpolation precision. For more info, see Using {{HLSL}} minimum precision.</p> </dd> + + + + + <p>Describes a shader constant-buffer.</p> + <p>Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling <strong>{{ID3D11ShaderReflectionConstantBuffer::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D_CBUFFER_TYPE}}</strong>-typed value that indicates the intended use of the constant data.</p> </dd> + + + <dd> <p>The number of unique variables.</p> </dd> + + + <dd> <p>Buffer size (in bytes).</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies properties for the shader constant-buffer.</p> </dd> + + + + + <p>Describes a shader variable.</p> + <p> Get a shader-variable description using reflection by calling <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong>. </p><p> As of the June 2010 update, <strong>DefaultValue</strong> emits default values for reflection. </p> + + + <dd> <p>The variable name.</p> </dd> + + + <dd> <p>Offset from the start of the parent structure to the beginning of the variable.</p> </dd> + + + <dd> <p>Size of the variable (in bytes).</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value identifies shader-variable properties. </p> </dd> + + + <dd> <p>The default value for initializing the variable.</p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the texture. </p> </dd> + + + <dd> <p>The size of the texture, in bytes. </p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the sampler. </p> </dd> + + + <dd> <p>The size of the sampler, in bytes. </p> </dd> + + + + + <p>Describes a shader-variable type.</p> + <p>Get a shader-variable-type description by calling <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type.</p> </dd> + + + <dd> <p>Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of elements in an array; otherwise 0.</p> </dd> + + + <dd> <p>Number of members in the structure; otherwise 0.</p> </dd> + + + <dd> <p>Offset, in bytes, between the start of the parent structure and this variable. Can be 0 if not a structure member.</p> </dd> + + + <dd> <p>Name of the shader-variable type. This member can be <strong>{{NULL}}</strong> if it isn't used. This member supports dynamic shader linkage interface types, which have names. For more info about dynamic shader linkage, see Dynamic Linking.</p> </dd> + + + + + <p>Describes a shader.</p> + <p>A shader is written in {{HLSL}} and compiled into an intermediate language by the {{HLSL}} compiler. The shader description returns information about the compiled shader. Get a shader description by calling <strong>{{ID3D11ShaderReflection::GetDesc}}</strong>.</p> + + + <dd> <p>Shader version.</p> </dd> + + + <dd> <p>The name of the originator of the shader.</p> </dd> + + + <dd> <p>Shader compilation/parse flags.</p> </dd> + + + <dd> <p>The number of shader-constant buffers.</p> </dd> + + + <dd> <p>The number of resource (textures and buffers) bound to a shader.</p> </dd> + + + <dd> <p>The number of parameters in the input signature.</p> </dd> + + + <dd> <p>The number of parameters in the output signature.</p> </dd> + + + <dd> <p>The number of intermediate-language instructions in the compiled shader.</p> </dd> + + + <dd> <p>The number of temporary registers in the compiled shader.</p> </dd> + + + <dd> <p>Number of temporary arrays used.</p> </dd> + + + <dd> <p>Number of constant defines.</p> </dd> + + + <dd> <p>Number of declarations (input + output).</p> </dd> + + + <dd> <p>Number of non-categorized texture instructions.</p> </dd> + + + <dd> <p>Number of texture load instructions</p> </dd> + + + <dd> <p>Number of texture comparison instructions</p> </dd> + + + <dd> <p>Number of texture bias instructions</p> </dd> + + + <dd> <p>Number of texture gradient instructions.</p> </dd> + + + <dd> <p>Number of floating point arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of signed integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of unsigned integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of static flow control instructions used.</p> </dd> + + + <dd> <p>Number of dynamic flow control instructions used.</p> </dd> + + + <dd> <p>Number of macro instructions used.</p> </dd> + + + <dd> <p>Number of array instructions used.</p> </dd> + + + <dd> <p>Number of cut instructions used.</p> </dd> + + + <dd> <p>Number of emit instructions used.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>-typed value that represents the geometry shader output topology.</p> </dd> + + + <dd> <p>Geometry shader maximum output vertex count.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE}}</strong>-typed value that represents the input primitive for a geometry shader or hull shader.</p> </dd> + + + <dd> <p>Number of parameters in the patch-constant signature.</p> </dd> + + + <dd> <p>Number of geometry shader instances.</p> </dd> + + + <dd> <p>Number of control points in the hull shader and domain shader.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_OUTPUT_PRIMITIVE}}</strong>-typed value that represents the tessellator output-primitive type.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_PARTITIONING}}</strong>-typed value that represents the tessellator partitioning mode.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_DOMAIN}}</strong>-typed value that represents the tessellator domain.</p> </dd> + + + <dd> <p>Number of barrier instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of interlocked instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of texture writes in a compute shader.</p> </dd> + + + + + <p>Describes how a shader resource is bound to a shader input.</p> + <p>Get a shader-input-signature description by calling <strong>{{ID3D11ShaderReflection::GetResourceBindingDesc}}</strong> or <strong>{{ID3D11ShaderReflection::GetResourceBindingDescByName}}</strong>.</p> + + + <dd> <p>Name of the shader resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed value that identifies the type of data in the resource.</p> </dd> + + + <dd> <p>Starting bind point.</p> </dd> + + + <dd> <p>Number of contiguous bind points for arrays.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values for shader input-parameter options. </p> </dd> + + + <dd> <p>If the input is a texture, the <strong>{{D3D_RESOURCE_RETURN_TYPE}}</strong>-typed value that identifies the return type.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value that identifies the dimensions of the bound resource.</p> </dd> + + + <dd> <p>The number of samples for a multisampled texture; when a texture isn't multisampled, the value is set to -1 (0xFFFFFFFF). </p> </dd> + + + + + <p>Describes a library.</p> + + + <dd> <p>The name of the originator of the library.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies how the compiler compiles.</p> </dd> + + + <dd> <p>The number of functions exported from the library.</p> </dd> + + + + + <p>Describes a function.</p> + + + <dd> <p>The shader version.</p> </dd> + + + <dd> <p>The name of the originator of the function.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies shader compilation and parsing.</p> </dd> + + + <dd> <p>The number of constant buffers for the function.</p> </dd> + + + <dd> <p>The number of bound resources for the function.</p> </dd> + + + <dd> <p>The number of emitted instructions for the function.</p> </dd> + + + <dd> <p>The number of temporary registers used by the function.</p> </dd> + + + <dd> <p>The number of temporary arrays used by the function.</p> </dd> + + + <dd> <p>The number of constant defines for the function.</p> </dd> + + + <dd> <p>The number of declarations (input + output) for the function.</p> </dd> + + + <dd> <p>The number of non-categorized texture instructions for the function.</p> </dd> + + + <dd> <p>The number of texture load instructions for the function.</p> </dd> + + + <dd> <p>The number of texture comparison instructions for the function.</p> </dd> + + + <dd> <p>The number of texture bias instructions for the function.</p> </dd> + + + <dd> <p>The number of texture gradient instructions for the function.</p> </dd> + + + <dd> <p>The number of floating point arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of signed integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of unsigned integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of static flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of dynamic flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of macro instructions used by the function.</p> </dd> + + + <dd> <p>The number of array instructions used by the function.</p> </dd> + + + <dd> <p>The number of mov instructions used by the function.</p> </dd> + + + <dd> <p>The number of movc instructions used by the function.</p> </dd> + + + <dd> <p>The number of type conversion instructions used by the function.</p> </dd> + + + <dd> <p>The number of bitwise arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>A <strong>{{D3D_FEATURE_LEVEL}}</strong>-typed value that specifies the minimum Direct3D feature level target of the function byte code.</p> </dd> + + + <dd> <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. For a list of values, see <strong>{{ID3D11ShaderReflection::GetRequiresFlags}}</strong>. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p>The number of logical parameters in the function signature, not including the return value.</p> </dd> + + + <dd> <p>Indicates whether the function returns a value. <strong>{{TRUE}}</strong> indicates it returns a value; otherwise, <strong>{{FALSE}}</strong> (it is a subroutine).</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 vertex shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 vertex shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 pixel shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 pixel shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes a function parameter. </p> + <p>Get a function-parameter description by calling <strong>{{ID3D11FunctionParameterReflection::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the function parameter.</p> </dd> + + + <dd> <p>The {{HLSL}} semantic that is associated with this function parameter. This name includes the index, for example, {{SV_Target}}[n].</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type for the parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class for the parameter as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>The number of rows for a matrix parameter.</p> </dd> + + + <dd> <p>The number of columns for a matrix parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_INTERPOLATION_MODE}}</strong>-typed value that identifies the interpolation mode for the parameter.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_PARAMETER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies semantic flags for the parameter.</p> </dd> + + + <dd> <p>The first input register for this parameter.</p> </dd> + + + <dd> <p>The first input register component for this parameter.</p> </dd> + + + <dd> <p>The first output register for this parameter.</p> </dd> + + + <dd> <p>The first output register component for this parameter.</p> </dd> + + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get the description of a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-type description (see <strong>{{D3D11_SHADER_TYPE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-reflection-variable type by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection-variable type by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The variable type.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type.</p> + <p>IsEqual indicates whether the sources of the <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type. For example, if two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references were retrieved from variables, IsEqual can be used to see if the variables have the same type.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the references have the same underlying type; otherwise returns {{S_FALSE}}.</p> + + + + <p>Gets the base class of a class.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong> containing the base class type. Returns <strong>{{NULL}}</strong> if the class does not have a base class.</p> + + + + <p>Gets an <strong>{{ID3D11ShaderReflectionType}} Interface</strong> interface containing the variable base class type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>Gets the number of interfaces.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of interfaces.</p> + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether a variable is of the specified type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if object being queried is equal to or inherits from the type in the <em>pType</em> parameter; otherwise returns {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Indicates whether a class type implements an interface.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the interface is implemented; otherwise return {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>Get a shader-variable description.</p> + <p>This method can be used to determine if the <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> is valid, the method returns <strong>{{E_FAIL}}</strong> when the variable is not valid.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-variable description (see <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>This method returns the buffer of the current <strong>{{ID3D11ShaderReflectionVariable}}</strong>.</p> + <p> Returns a reference to the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> of the present <strong>{{ID3D11ShaderReflectionVariable}}</strong>. </p> + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>This shader-reflection interface provides access to a constant buffer.</p> + <p> To create a constant-buffer interface, call <strong>{{ID3D11ShaderReflection::GetConstantBufferByIndex}}</strong> or <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it. </p> + + + + <p>Get a constant-buffer description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong>, which represents a shader-buffer description.</p> </dd> + + + + + <p>Get a shader-reflection variable by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a shader-reflection variable interface (see <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a sentinel object (end of list marker). To determine if GetVariableByName successfully completed, call <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> and check the returned <strong>{{HRESULT}}</strong>; any return value other than success means that GetVariableByName failed.</p> + + + <dd> <p>Variable name.</p> </dd> + + + + + <p>A shader-reflection interface accesses shader information.</p> + <p> An <strong>{{ID3D11ShaderReflection}}</strong> interface can be retrieved for a shader by using <strong>{{D3DReflect}}</strong>. The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> from a shader. </p><pre>pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector);</pre> + + + + <p>Get a shader description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader description. See <strong>{{D3D11_SHADER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader.</p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Get an input-parameter description for a shader.</p> + <p>An input-parameter description is also called a shader signature. The shader signature contains information about the input parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p> A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> </dd> + + + + + <p>Get an output-parameter description for a shader.</p> + <p>An output-parameter description is also called a shader signature. The shader signature contains information about the output parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-output-parameter description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a patch-constant parameter description for a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Gets a variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Gets the number of Mov instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Mov instructions.</p> + + + + <p>Gets the number of Movc instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Movc instructions.</p> + + + + <p>Gets the number of conversion instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of conversion instructions.</p> + + + + <p>Gets the number of bitwise instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of bitwise instructions.</p> + + + + <p>Gets the geometry-shader input-primitive description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> The input-primitive description. See <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>, <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>, or <strong>{{D3D10_PRIMITIVE_TOPOLOGY}}</strong>. </p> + + + + <p>Indicates whether a shader is a sample frequency shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns true if the shader is a sample frequency shader; otherwise returns false.</p> + + + + <p>Gets the number of interface slots in a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of interface slots in the shader.</p> + + + + <p>Gets the minimum feature level.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to one of the enumerated values in <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the minimum feature level. </p> </dd> + + + + + <p>Retrieves the sizes, in units of threads, of the X, Y, and Z dimensions of the shader's thread-group grid.</p> + <p> This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll. </p><p>When a compute shader is written it defines the actions of a single thread group only. If multiple thread groups are required, it is the role of the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> call to issue multiple thread groups. </p> + <p> Returns the total size, in threads, of the thread-group grid by calculating the product of the size of each dimension. +</p><code>*pSizeX * *pSizeY * *pSizeZ;</code> + + + <dd> <p>A reference to the size, in threads, of the x-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the y-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the z-dimension of the thread-group grid. The maximum size is 64.</p> </dd> + + + + + <p>Gets a group of flags that indicates the requirements of a shader.</p> + <p>Here is how the {{D3D11Shader}}.h header defines the shader requirements flags:</p><pre> #define {{D3D_SHADER_REQUIRES_DOUBLES}} 0x00000001 +#define {{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}} 0x00000002 +#define {{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}} 0x00000004 +#define {{D3D_SHADER_REQUIRES_64_UAVS}} 0x00000008 +#define {{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}} 0x00000010 +#define {{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}} 0x00000020 +#define {{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}} 0x00000040 +#define {{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}} 0x00000080 +</pre> + <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. </p><table> <tr><th>Shader requirement flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_DOUBLES}}</strong></td><td>Shader requires that the graphics driver and hardware support double data type. For more info, see <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}}</strong></td><td>Shader requires an early depth stencil.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}}</strong></td><td>Shader requires unordered access views ({{UAVs}}) at every pipeline stage.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_64_UAVS}}</strong></td><td>Shader requires 64 {{UAVs}}.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}}</strong></td><td>Shader requires the graphics driver and hardware to support minimum precision. For more info, see Using {{HLSL}} minimum precision.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support extended doubles instructions. For more info, see the <strong>ExtendedDoublesShaderInstructions</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support the <strong>msad4</strong> intrinsic function in shaders. For more info, see the <strong>{{SAD4ShaderInstructions}}</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}}</strong></td><td>Shader requires that the graphics driver and hardware support Direct3D 9 shadow support. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_TILED_RESOURCES}}</strong></td><td>Shader requires that the graphics driver and hardware support tiled resources. For more info, see <strong>GetResourceTiling</strong>. </td></tr> </table><p>?</p> + + + + <p> A library-reflection interface accesses library info. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a library-reflection interface, call <strong>{{D3DReflectLibrary}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LibraryReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the library descriptor structure for the library reflection.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_LIBRARY_DESC}}</strong> structure that receives a description of the library reflection.</p> </dd> + + + + + <p>Gets the function reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionReflection}}</strong> interface that represents the function reflector.</p> + + + <dd> <p>The zero-based index of the function reflector to retrieve.</p> </dd> + + + + + <p>A function-reflection interface accesses function info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-reflection interface, call <strong>{{ID3D11LibraryReflection::GetFunctionByIndex}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the function descriptor structure for the function.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_FUNCTION_DESC}}</strong> structure that receives a description of the function.</p> </dd> + + + + + <p>Gets a constant buffer by index for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Gets a constant buffer by name for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets a variable by name.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets the function parameter reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionParameterReflection}}</strong> interface that represents the function parameter reflector.</p> + + + <dd> <p>The zero-based index of the function parameter reflector to retrieve.</p> </dd> + + + + + <p>A function-parameter-reflection interface accesses function-parameter info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-parameter-reflection interface, call <strong>{{ID3D11FunctionReflection::GetFunctionParameter}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionParameterReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the parameter descriptor structure for the function's parameter.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_PARAMETER_DESC}}</strong> structure that receives a description of the function's parameter. </p> </dd> + + + + + <p> A module interface creates an instance of a module that is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module interface, call <strong>{{D3DLoadModule}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Module}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes an instance of a shader module that is used for resource rebinding.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The name of a shader module to initialize. This can be <strong>{{NULL}}</strong> if you don't want to specify a name for the module.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface to initialize.</p> </dd> + + + + + <p> A module-instance interface is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module-instance interface, call <strong>{{ID3D11Module::CreateInstance}}</strong> or <strong>{{ID3D11FunctionLinkingGraph::CreateModuleInstance}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11ModuleInstance}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Rebinds a constant buffer from a source slot to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The source slot number for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a constant buffer by name to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the constant buffer for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a texture or buffer from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a texture or buffer by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the texture or buffer for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the sampler for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the {{UAV}} for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource as an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource by name as an unordered access view ({{UAV}}) to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the resource for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p> A linker interface is used to link a shader module. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linker interface, call <strong>{{D3DCreateLinker}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Linker}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p> Links the shader and produces a shader blob that the Direct3D runtime can use. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module instance to link from. </p> </dd> + + + <dd> <p> The name of the shader module instance to link from. </p> </dd> + + + <dd> <p> The name for the shader blob that is produced. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled shader code. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages. </p> </dd> + + + + + <p>Adds an instance of a library module to be used for linking.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module instance.</p> </dd> + + + + + <p>Adds a clip plane with the plane coefficients taken from a cbuffer entry for 10Level9 shaders.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Indicates the tier level at which view instancing is supported.</p> + + + <dd> <p>View instancing is not supported.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping only.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping at worst, but the {{GPU}} can perform view instancing more efficiently in certain circumstances which are architecture-dependent.</p> </dd> + + + <dd> <p>View instancing is supported and instancing begins with the first shader stage that references {{SV_ViewID}} or with rasterization if no shader stage references {{SV_ViewID}}. This means that redundant work is eliminated across view instances when it's not dependent on {{SV_ViewID}}. Before rasterization, work that doesn't directly depend on {{SV_ViewID}} is shared across all views; only work that depends on {{SV_ViewID}} is repeated for each view.</p> <strong>Note</strong> If a hull shader produces tessellation factors that are dependent on {{SV_ViewID}}, then tessellation and all subsequent work must be repeated per-view. Similarly, if the amount of geometry produced by the geometry shader depends on {{SV_ViewID}}, then the geometry shader must be repeated per-view before proceeding to rasterization. <p>View instance masking only effects whether work that directly depends on {{SV_ViewID}} is performed, not the entire loop iteration (per-view). If the view instance mask is non-0, some work that depends on {{SV_ViewID}} might still be performed on masked-off pixels but will have no externally-visible effect; for example, no {{UAV}} writes are performed and clipping/rasterzation is not invoked. If the view instance mask is 0 no work is performed, including work that's not dependent on {{SV_ViewID}}.</p> </dd> + + + + + <p> A linking-node interface is used for shader linking. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linking-node interface, call <strong>{{ID3D11FunctionLinkingGraph::SetInputSignature}}</strong>, <strong>{{ID3D11FunctionLinkingGraph::SetOutputSignature}}</strong>, or <strong>{{ID3D11FunctionLinkingGraph::CallFunction}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LinkingNode}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-linking-graph interface, call <strong>{{D3DCreateFunctionLinkingGraph}}</strong>. </p><p>You can use the function-linking-graph ({{FLG}}) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write {{HLSL}} and then call the {{HLSL}} compiler. Instead, the shader structure is specified programmatically via a C++ {{API}}. {{FLG}} nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. {{FLG}} edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the {{HLSL}} behavior. Values can only be passed forward in this sequence.</p><strong>Note</strong>??<strong>{{ID3D11FunctionLinkingGraph}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes a shader module from the function-linking-graph object.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module to initialize.</p> </dd> + + + <dd> <p>An optional reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Sets the input signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the input signature.</p> </dd> + + + <dd> <p>The number of input parameters in the <em>pInputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the input signature of the function-linking-graph.</p> </dd> + + + + + <p>Sets the output signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the output signature.</p> </dd> + + + <dd> <p>The number of output parameters in the <em>pOutputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the output signature of the function-linking-graph.</p> </dd> + + + + + <p>Creates a call-function linking node to use in the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> The optional namespace for the function, or <strong>{{NULL}}</strong> if no namespace is needed. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module that contains the function prototype. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the function in the function-linking-graph. </p> </dd> + + + + + <p>Passes a value from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + + + <p>Passes a value with swizzle from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>The name of the source swizzle.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + <dd> <p>The name of the destination swizzle.</p> </dd> + + + + + <p>Gets the error from the last function call of the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the error. </p> </dd> + + + + + <p>Generates Microsoft High Level Shader Language ({{HLSL}}) shader code that represents the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the {{HLSL}} shader source code that represents the function-linking-graph. You can compile this {{HLSL}} code, but first you must add code or include statements for the functions called in the function-linking-graph.</p> </dd> + + + + + <p>Driver type options.</p> + <p>The driver type is required when calling <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + + + <dd> <p>The driver type is unknown.</p> </dd> + + + <dd> <p>A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration (on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver type is often referred to as a hardware abstraction layer or {{HAL}}.</p> </dd> + + + <dd> <p>A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special {{CPU}} instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration of functionality, debugging, or verifying bugs in other drivers. The reference device for this driver is installed by the Windows {{SDK}} 8.0 or later and is intended only as a debug aid for development purposes. This driver may be referred to as a {{REF}} driver, a reference driver, or a reference rasterizer.</p> <strong>Note</strong>??When you use the {{REF}} driver in Windows Store apps, the {{REF}} driver renders correctly but doesn't display any output on the screen. To verify bugs in hardware drivers for Windows Store apps, use <strong>{{D3D_DRIVER_TYPE_WARP}}</strong> for the {{WARP}} driver instead. ? </dd> + + + <dd> <p>A {{NULL}} driver, which is a reference driver without render capability. This driver is commonly used for debugging non-rendering {{API}} calls, it is not appropriate for retail applications. This driver is installed by the DirectX {{SDK}}.</p> </dd> + + + <dd> <p>A software driver, which is a driver implemented completely in software. The software implementation is not intended for a high-performance application due to its very slow performance.</p> </dd> + + + <dd> <p>A {{WARP}} driver, which is a high-performance software rasterizer. The rasterizer supports <strong>feature levels</strong> 9_1 through level 10_1 with a high performance software implementation. For information about limitations creating a {{WARP}} device on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. For more information about using a {{WARP}} driver, see Windows Advanced Rasterization Platform ({{WARP}}) In-Depth Guide.</p> <strong>Note</strong>??The {{WARP}} driver that Windows?8 includes supports feature levels 9_1 through level 11_1. ? <strong>Note</strong>??The {{WARP}} driver that Windows?8.1 includes fully supports feature level 11_1, including tiled resources, <strong>{{IDXGIDevice3::Trim}}</strong>, shared {{BCn}} surfaces, minblend, and map default. ? </dd> + + + + + <p> Describes the set of features targeted by a Direct3D device. </p> + <p> For an overview of the capabilities of each feature level, see Overview For Each Feature Level. </p><p> For information about limitations creating non-hardware-type devices on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. </p> + + + <dd> <p> Targets features supported by feature level 9.1 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.2 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.3 including shader model 2.0b. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.0 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.1 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.1 including shader model 5 and logical blend operations. This feature level requires a display driver that is at least implemented to {{WDDM}} for Windows?8 ({{WDDM}} 1.2). </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.1 including shader model 5. </p> </dd> + + + + + <p>Values that indicate how the pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on screen.</p> + <p>Use the <strong>{{ID3D11DeviceContext::IASetPrimitiveTopology}}</strong> method and a value from <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong> to bind a primitive topology to the input-assembler stage. Use the <strong>{{ID3D11DeviceContext::IAGetPrimitiveTopology}}</strong> method to retrieve the primitive topology for the input-assembler stage.</p><p>The following diagram shows the various primitive types for a geometry shader object.</p> + + + + <p>Values that indicate how the pipeline interprets geometry or hull shader input primitives.</p> + <p> The <strong>{{ID3D11ShaderReflection::GetGSInputPrimitive}}</strong> method returns a <strong>{{D3D_PRIMITIVE}}</strong>-typed value. </p> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p>The type is undefined.</p> </dd> + + + <dd> <p>The data is organized in a point list.</p> </dd> + + + <dd> <p>The data is organized in a line list.</p> </dd> + + + <dd> <p>The data is organized in a triangle list.</p> </dd> + + + <dd> <p>The data is organized in a line list with adjacency data.</p> </dd> + + + <dd> <p>The data is organized in a triangle list with adjacency data.</p> </dd> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + + + <p>Values that identify the type of resource to be viewed as a shader resource.</p> + <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value is specified in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure or the <strong>Dimension</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Values that indicate the location of a shader #include file. </p> + <p>You pass a <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value to the <em>IncludeType</em> parameter in a call to the <strong>{{ID3DInclude::Open}}</strong> method to indicate the location of the #include file.</p> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. </p> <p>Do not use this value.</p> </dd> + + + + + <p>Values that identify the class of a shader variable.</p> + <p>The class of a shader variable is not a programming class; the class identifies the variable class such as scalar, vector, object, and so on. <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed values are specified in the <strong>Class</strong> member of the <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify information about a shader variable.</p> + <p>A call to the <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> method returns <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong> values in the <strong>uFlags</strong> member of a <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong> structure.</p> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify various data, texture, and buffer types that can be assigned to a shader variable.</p> + <p> A call to the <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong> method returns a <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong> value in the <strong>Type</strong> member of a <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure. </p><p> The types in a structured buffer describe the structure of the elements in the buffer. The layout of these types generally match their C++ struct counterparts. The following examples show structured buffers: </p><pre>struct mystruct {float4 val; uint ind;}; {{RWStructuredBuffer}}&lt;mystruct&gt; rwbuf; {{RWStructuredBuffer}}&lt;float3&gt; rwbuf2;</pre> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> <p> For more information about structured buffer, see the <strong>Remarks</strong> section. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p> The variable is an 8-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 10-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 12-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read and write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify shader-input options.</p> + <p><strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure. </p> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> This value is reserved. </p> </dd> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> Forces the enumeration to compile to 32 bits. This value is not used directly by titles. </p> </dd> + + + + + <p>Values that identify resource types that can be bound to a shader and that are reflected as part of the resource description for the shader.</p> + <p><strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed values are specified in the <strong>Type</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + + + <p>Values that identify the indended use of a constant-data buffer.</p> + <p><strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong> structure.</p> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify the intended use of constant-buffer data. </p> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + + + <p>Values that identify shader parameters that use system-value semantics.</p> + <p> The <strong>{{D3D_NAME}}</strong> values identify shader parameters that have predefined system-value semantics. These values are used in a shader-signature description. For more information about shader-signature description, see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains an instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + + + <p>Values that identify the return type of a resource.</p> + <p>A resource return type is specified in the <strong>ReturnType</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + <dd> <p>Unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Signed integer.</p> </dd> + + + <dd> <p>Unsigned integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + + + <p>Values that identify the data types that can be stored in a register.</p> + <p>A register component type is specified in the <strong>ComponentType</strong> member of the <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong> structure.</p> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + + + <p>Values that identify domain options for tessellator data.</p> + <p>The data domain defines the type of data. This enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + + + <p>Values that identify partitioning options.</p> + <p>During tessellation, the partition option helps to determine how the algorithm chooses the next partition value; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + + + <p>Values that identify output primitive types.</p> + <p>The output primitive type determines how the tessellator output data is organized; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + + + <p>Values that indicate the minimum desired interpolation precision.</p> + <p>For more info, see <strong>Scalar Types</strong> and Using {{HLSL}} minimum precision.</p> + + + <dd> <p>Default minimum precision, which is 32-bit precision.</p> </dd> + + + <dd> <p>Minimum precision is min16float, which is 16-bit floating point. </p> </dd> + + + <dd> <p>Minimum precision is min10float, which is 10-bit floating point. </p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>Minimum precision is min16int, which is 16-bit signed integer. </p> </dd> + + + <dd> <p>Minimum precision is min16uint, which is 16-bit unsigned integer. </p> </dd> + + + <dd> <p>Minimum precision is any 16-bit value. </p> </dd> + + + <dd> <p>Minimum precision is any 10-bit value. </p> </dd> + + + + + <p>Specifies interpolation mode, which affects how values are calculated during rasterization.</p> + + + <dd> <p>The interpolation mode is undefined.</p> </dd> + + + <dd> <p>Don't interpolate between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but sample clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and sample clamped when multisampling.</p> </dd> + + + + + <p>Indicates semantic flags for function parameters.</p> + + + <dd> <p>The parameter has no semantic flags.</p> </dd> + + + <dd> <p>Indicates an input parameter.</p> </dd> + + + <dd> <p>Indicates an output parameter.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Defines a shader macro.</p> + <p>You can use shader macros in your shaders. The <strong>{{D3D_SHADER_MACRO}}</strong> structure defines a single shader macro as shown in the following example:</p><pre> {{D3D_SHADER_MACRO}} Shader_Macros[] = { "zero", "0", {{NULL}}, {{NULL}} }; +</pre><p>The following shader or effect creation functions take an array of shader macros as an input parameter:</p><ul> <li> <strong>{{D3D10CompileShader}}</strong> </li> <li> <strong>{{D3DX10CreateEffectFromFile}}</strong> </li> <li> <strong>{{D3DX10PreprocessShaderFromFile}}</strong> </li> <li> <strong>{{D3DX11CreateAsyncShaderPreprocessProcessor}}</strong> </li> </ul> + + + <dd> <p>The macro name.</p> </dd> + + + <dd> <p>The macro definition.</p> </dd> + + + + + <p>This interface is used to return arbitrary length data.</p> + <p>An <strong>{{ID3D10Blob}}</strong> is obtained by calling <strong>{{D3D10CreateBlob}}</strong>.</p><p>The <strong>{{ID3DBlob}}</strong> interface is type defined in the {{D3DCommon}}.h header file as a <strong>{{ID3D10Blob}}</strong> interface, which is fully defined in the {{D3DCommon}}.h header file. <strong>{{ID3DBlob}}</strong> is version neutral and can be used in code for any Direct3D version.</p><p>Blobs can be used as a data buffer, storing vertex, adjacency, and material information during mesh optimization and loading operations. Also, these objects are used to return object code and error messages in {{APIs}} that compile vertex, geometry and pixel shaders.</p> + + + + <p>Get a reference to the data.</p> + <p>Returns a reference.</p> + + + + <p>Get the size.</p> + <p>The size of the data, in bytes.</p> + + + + + + + + + + + + + <p><strong>{{ID3DInclude}}</strong> is an include interface that the user implements to allow an application to call user-overridable methods for opening and closing shader #include files. </p> + <p> To use this interface, create an interface that inherits from <strong>{{ID3DInclude}}</strong> and implement custom behavior for the methods. </p> + + + + <p>A user-implemented method for opening and reading the contents of a shader #include file.</p> + <p> The user-implemented method must return {{S_OK}}. If <strong>Open</strong> fails when it reads the #include file, the application programming interface ({{API}}) that caused <strong>Open</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> A <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value that indicates the location of the #include file. </p> </dd> + + + <dd> <p>Name of the #include file.</p> </dd> + + + <dd> <p> Pointer to the container that includes the #include file. The compiler might pass {{NULL}} in <em>pParentData</em>. For more information, see the "Searching for Include Files" section in Compile an Effect (Direct3D 11). </p> </dd> + + + <dd> <p> Pointer to the buffer that contains the include directives. This reference remains valid until you call<strong>{{ID3DInclude::Close}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the number of bytes that <strong>Open</strong> returns in <em>ppData</em>. </p> </dd> + + + + + <p>A user-implemented method for closing a shader #include file.</p> + <p> If <strong>{{ID3DInclude::Open}}</strong> was successful, <strong>Close</strong> is guaranteed to be called before the {{API}} using the <strong>{{ID3DInclude}}</strong> interface returns. </p> + <p> The user-implemented <strong>Close</strong> method should return {{S_OK}}. If <strong>Close</strong> fails when it closes the #include file, the application programming interface ({{API}}) that caused <strong>Close</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> Pointer to the buffer that contains the include directives. This is the reference that was returned by the corresponding <strong>{{ID3DInclude::Open}}</strong> call. </p> </dd> + + + + + <p>The type of a font represented by a single font file. Font formats that consist of multiple files, for example Type 1 .{{PFM}} and .{{PFB}}, have separate enum values for each of the file types.</p> + + + <dd> <p>Font type is not recognized by the DirectWrite font system.</p> </dd> + + + <dd> <p>OpenType font with {{CFF}} outlines.</p> </dd> + + + <dd> <p>OpenType font with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font that contains a TrueType collection.</p> </dd> + + + <dd> <p>Type 1 {{PFM}} font.</p> </dd> + + + <dd> <p>Type 1 {{PFB}} font.</p> </dd> + + + <dd> <p>Vector .{{FON}} font.</p> </dd> + + + <dd> <p>Bitmap .{{FON}} font.</p> </dd> + + + + + <p>Indicates the file format of a complete font face.</p> + <p>Font formats that consist of multiple files, such as Type 1 .{{PFM}} and .{{PFB}}, have a single enum entry.</p> + + + <dd> <p>OpenType font face with {{CFF}} outlines.</p> </dd> + + + <dd> <p>The font data includes only the {{CFF}} table from an OpenType {{CFF}} font. This font face type can be used only for embedded fonts (i.e., custom font file loaders) and the resulting font face object supports only the minimum functionality necessary to render glyphs.</p> </dd> + + + <dd> <p>OpenType font face with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font face that is a part of a TrueType collection.</p> </dd> + + + <dd> <p>A Type 1 font face.</p> </dd> + + + <dd> <p>A vector .{{FON}} format font face.</p> </dd> + + + <dd> <p>A bitmap .{{FON}} format font face.</p> </dd> + + + <dd> <p>Font face type is not recognized by the DirectWrite font system.</p> </dd> + + + + + <p>Specifies algorithmic style simulations to be applied to the font face. Bold and oblique simulations can be combined via bitwise {{OR}} operation.</p> + <p> Style simulations are not recommended for good typographic quality.</p> + + + <dd> <p>Indicates that no simulations are applied to the font face.</p> </dd> + + + <dd> <p>Indicates that algorithmic emboldening is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_BOLD}}</strong> increases weight by applying a widening algorithm to the glyph outline. This may be used to simulate a bold weight where no designed bold weight is available.</p> </dd> + + + <dd> <p>Indicates that algorithmic italicization is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_OBLIQUE}}</strong> applies obliquing (shear) to the glyph outline. This may be used to simulate an oblique/italic style where no designed oblique/italic style is available.</p> </dd> + + + + + <p>Represents the density of a typeface, in terms of the lightness or heaviness of the strokes. The enumerated values correspond to the usWeightClass definition in the OpenType specification. The <em>usWeightClass</em> represents an integer value between 1 and 999. Lower values indicate lighter weights; higher values indicate heavier weights.</p> + <p>Weight differences are generally differentiated by an increased stroke or thickness that is associated with a given character in a typeface, as compared to a "normal" character from that same typeface. +The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p><p></p><strong>Note</strong>??Not all weights are available for all typefaces. When a weight is not available for a typeface, the closest matching weight is returned.?<p>Font weight values less than 1 or greater than 999 are considered invalid, and they are rejected by font {{API}} functions.</p> + + + <dd> <p>Predefined font weight : Thin (100).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Light (300).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-Light (350).</p> </dd> + + + <dd> <p>Predefined font weight : Normal (400).</p> </dd> + + + <dd> <p>Predefined font weight : Regular (400).</p> </dd> + + + <dd> <p>Predefined font weight : Medium (500).</p> </dd> + + + <dd> <p>Predefined font weight : Demi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Bold (700).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Black (900).</p> </dd> + + + <dd> <p>Predefined font weight : Heavy (900).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-black (950).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-black (950).</p> </dd> + + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Represents the style of a font face as normal, italic, or oblique.</p> + <p>Three terms categorize the slant of a font: normal, italic, and oblique. </p><table> <tr><th>Font style</th><th>Description</th></tr> <tr><td>Normal</td><td>The characters in a normal, or roman, font are upright. +</td></tr> <tr><td>Italic +</td><td>The characters in an italic font are truly slanted and appear as they were designed. +</td></tr> <tr><td>Oblique</td><td>The characters in an oblique font are artificially slanted.</td></tr> </table><p>?</p><p>For Oblique, the slant is achieved by performing a shear transformation on the characters from a normal font. When a true italic font is not available on a computer or printer, an oblique style can be generated from the normal font and used to simulate an italic font. The following illustration shows the normal, italic, and oblique font styles for the Palatino Linotype font. Notice how the italic font style has a more flowing and visually appealing appearance than the oblique font style, which is simply created by skewing the normal font style version of the text.</p><p></p><strong>Note</strong>?? Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font {{API}} functions.? + + + <dd> <p>Font style : Normal.</p> </dd> + + + <dd> <p>Font style : Oblique. </p> </dd> + + + <dd> <p>Font style : Italic.</p> </dd> + + + + + <p>The informational string enumeration which identifies a string embedded in a font file.</p> + + + <dd> <p>Indicates the string containing the unspecified name {{ID}}.</p> </dd> + + + <dd> <p>Indicates the string containing the copyright notice provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing a version number.</p> </dd> + + + <dd> <p>Indicates the string containing the trademark information provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font manufacturer.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font designer.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font designer (with protocol, e.g., http://, ftp://).</p> </dd> + + + <dd> <p>Indicates the string containing the description of the font. This may also contain revision information, usage recommendations, history, features, and so on.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the {{URL}}, it can be used to register the font.</p> </dd> + + + <dd> <p>The full name of the font, like Arial Bold, from <em>name id 4</em> in the name table</p> </dd> + + + <dd> <p>Indicates the string containing the description of how the font may be legally used, or different example scenarios for licensed use.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} where additional licensing information can be found.</p> </dd> + + + <dd> <p>Indicates the string containing the {{GDI}}-compatible family name. Since {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names (e.g., "Arial", "Arial Narrow", "Arial Black").</p> </dd> + + + <dd> <p>Indicates the string containing a {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Indicates the string containing the family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Indicates the string containing the subfamily name preferred by the designer. This name is typically only present if it differs from the {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Contains sample text for display in font lists. This can be the font name or any other text that the designer thinks is the best example to display the font in.</p> </dd> + + + <dd> <p>The postscript name of the font, like GillSans-Bold, from <em>name id 6</em> in the name table.</p> </dd> + + + <dd> <p>The postscript {{CID}} findfont name, from <em>name id 20</em> in the name table</p> </dd> + + + + + <p>Specifies the type of DirectWrite factory object.</p> + <p>A DirectWrite factory object contains information about its internal state, such as font loader registration and cached font data. In most cases you should use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state information, thereby reducing memory usage. However, there are cases when it is desirable to reduce the impact of a component on the rest of the process, such as a plug-in from an untrusted source, by sandboxing and isolating it from the rest of the process components. In such cases, you should use an isolated factory for the sandboxed component.</p> + + + <dd> <p>Indicates that the DirectWrite factory is a shared factory and that it allows for the reuse of cached font data across multiple in-process components. Such factories also take advantage of cross process font caching components for better performance.</p> </dd> + + + <dd> <p>Indicates that the DirectWrite factory object is isolated. Objects created from the isolated factory do not interact with internal DirectWrite state from other components.</p> </dd> + + + + + <p> Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. +</p> + + + <dd> <p>The red, green, and blue color components of each pixel are assumed to occupy the same point.</p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with red on the left, green in the center, and blue on the right. This is the most common pixel geometry for {{LCD}} monitors. </p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with blue on the left, green in the center, and red on the right.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p> Specifies the direction in which reading progresses. </p><strong>Note</strong>??<strong>{{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}</strong> and <strong>{{DWRITE_READING_DIRECTION_BOTTOM_TO_TOP}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that reading progresses from left to right.</p> </dd> + + + <dd> <p>Indicates that reading progresses from right to left.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Indicates that reading progresses from top to bottom.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> Indicates that reading progresses from bottom to top.</p> </dd> + + + + + <p> Indicates the direction of how lines of text are placed relative to one another. </p> + + + <dd> <p>Specifies that text lines are placed from top to bottom.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from bottom to top.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from left to right.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from right to left.</p> </dd> + + + + + <p>Specifies the alignment of paragraph text along the reading direction axis, relative to the leading and trailing edge of the layout box.</p> + + + <dd> <p>The leading edge of the paragraph text is aligned to the leading edge of the layout box.</p> </dd> + + + <dd> <p>The trailing edge of the paragraph text is aligned to the trailing edge of the layout box.</p> </dd> + + + <dd> <p>The center of the paragraph text is aligned to the center of the layout box.</p> </dd> + + + <dd> <p>Align text to the leading side, and also justify text to fill the lines.</p> </dd> + + + + + <p> Specifies the alignment of paragraph text along the flow direction axis, relative to the top and bottom of the flow's layout box. </p> + + + <dd> <p>The top of the text flow is aligned to the top edge of the layout box.</p> </dd> + + + <dd> <p>The bottom of the text flow is aligned to the bottom edge of the layout box.</p> </dd> + + + <dd> <p>The center of the flow is aligned to the center of the layout box.</p> </dd> + + + + + <p> Specifies the word wrapping to be used in a particular multiline paragraph. </p><strong>Note</strong>??<strong>{{DWRITE_WORD_WRAPPING_EMERGENCY_BREAK}}</strong>, <strong>{{DWRITE_WORD_WRAPPING_WHOLE}} _WORD</strong>, and <strong>{{DWRITE_WORD_WRAPPING_CHARACTER}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that words are broken across lines to avoid text overflowing the layout box.</p> </dd> + + + <dd> <p>Indicates that words are kept within the same line even when it overflows the layout box. This option is often used with scrolling to reveal overflow text.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Words are broken across lines to avoid text overflowing the layout box. Emergency wrapping occurs if the word is larger than the maximum width. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> When emergency wrapping, only wrap whole words, never breaking words when the layout width is too small for even a single word. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Wrap between any valid character clusters.</p> </dd> + + + + + <p>The method used for line spacing in a text layout.</p> + <p>The line spacing method is set by using the <strong>SetLineSpacing</strong> method of the <strong>{{IDWriteTextFormat}}</strong> or <strong>{{IDWriteTextLayout}}</strong> interfaces. To get the current line spacing method of a text format or text layou use the <strong>GetLineSpacing</strong>.</p> + + + <dd> <p>Line spacing depends solely on the content, adjusting to accommodate the size of fonts and inline objects.</p> </dd> + + + <dd> <p>Lines are explicitly set to uniform spacing, regardless of the size of fonts and inline objects. This can be useful to avoid the uneven appearance that can occur from font fallback.</p> </dd> + + + <dd> <p>Line spacing and baseline distances are proportional to the computed values based on the content, the size of the fonts and inline objects. </p> <strong>Note</strong>??This value is only available on Windows?10 or later and it can be used with <strong>{{IDWriteTextLayout3::SetLineSpacing}}</strong>, but can not be used with <strong>{{IDWriteTextFormat::SetLineSpacing}}</strong>. ? </dd> + + + + + <p>Specifies the text granularity used to trim text overflowing the layout box.</p> + + + <dd> <p>No trimming occurs. Text flows beyond the layout width.</p> </dd> + + + <dd> <p>Trimming occurs at a character cluster boundary.</p> </dd> + + + <dd> <p>Trimming occurs at a word boundary.</p> </dd> + + + + + <p>A value that indicates the typographic feature of text supplied by the font.</p> + + + <dd> <p>The default.</p> </dd> + + + <dd> <p>Indicates that the font is displayed vertically.</p> </dd> + + + <dd> <p>Replaces normal figures with figures adjusted for vertical display.</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with an alternative form.</p> <p><strong>Equivalent OpenType tag:</strong> 'afrc' </p> </dd> + + + <dd> <p> Turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.</p> <p><strong>Equivalent OpenType tag:</strong> 'c2pc'</p> </dd> + + + <dd> <p>Turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text. </p> <p><strong>Equivalent OpenType tag:</strong> 'c2sc'</p> </dd> + + + <dd> <p> In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.</p> <p><strong>Equivalent OpenType tag:</strong> 'calt'</p> </dd> + + + <dd> <p> Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.</p> <p><strong>Equivalent OpenType tag:</strong> 'case'</p> </dd> + + + <dd> <p> To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called.</p> <p><strong>Equivalent OpenType tag:</strong> 'ccmp'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.</p> <p><strong>Equivalent OpenType tag:</strong> 'clig'</p> </dd> + + + <dd> <p> Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons. </p> <p><strong>Equivalent OpenType tag:</strong> 'cpsp'</p> </dd> + + + <dd> <p>Replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character. </p> <p><strong>Equivalent OpenType tag:</strong> 'cswh'</p> </dd> + + + <dd> <p> In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'curs'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user's preference.</p> <p><strong>Equivalent OpenType tag:</strong> 'dlig'</p> </dd> + + + <dd> <p> Replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. For example, a user would invoke this feature to replace kanji character U+5516 with U+555E. +</p> <p><strong>Equivalent OpenType tag:</strong> 'expt'</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with 'common' (diagonal) fractions.</p> <p><strong>Equivalent OpenType tag:</strong> 'frac'</p> </dd> + + + <dd> <p> Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a {{CJKV}} font, this may include "lower {{ASCII}}" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. For example, a user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions.</p> <p><strong>Equivalent OpenType tag:</strong> 'fwid'</p> </dd> + + + <dd> <p> Produces the half forms of consonants in Indic scripts. For example, in Hindi (Devanagari script), the conjunct {{KKa}}, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form. </p> <p><strong>Equivalent OpenType tag:</strong> 'half'</p> </dd> + + + <dd> <p> Produces the halant forms of consonants in Indic scripts. For example, in Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form.</p> <p><strong>Equivalent OpenType tag:</strong> 'haln'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'halt'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. </p> <p><strong>Equivalent OpenType tag:</strong> 'hist'</p> </dd> + + + <dd> <p> Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color.</p> <p><strong>Equivalent OpenType tag:</strong> 'hkna'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.</p> <p><strong>Equivalent OpenType tag:</strong> 'hlig'</p> </dd> + + + <dd> <p> Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many {{CJKV}} fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents.</p> <p><strong>Equivalent OpenType tag:</strong> 'hwid'</p> </dd> + + + <dd> <p> Used to access the {{JIS}} X 0212-1990 glyphs for the cases when the {{JIS}} X 0213:2004 form is encoded. The {{JIS}} X 0212-1990 (aka, "Hojo Kanji") and {{JIS}} X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both {{JIS}} X 0212-1990 and {{JIS}} X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that {{JIS}} X 0213:2004 forms be the preferred encoded form.</p> <p><strong>Equivalent OpenType tag:</strong> 'hojo'</p> </dd> + + + <dd> <p> The National Language Council ({{NLC}}) of Japan has defined new glyph shapes for a number of {{JIS}} characters, which were incorporated into {{JIS}} X 0213:2004 as new prototypical forms. The 'jp04' feature is A subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of {{JIS}} X 0213:2004.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp04'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} C 6226-1978 ({{JIS78}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp78'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} X 0208-1983 ({{JIS83}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp83'</p> </dd> + + + <dd> <p> Replaces Japanese glyphs from the {{JIS78}} or {{JIS83}} specifications with the corresponding forms from the {{JIS}} X 0208-1990 ({{JIS90}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp90'</p> </dd> + + + <dd> <p> Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.</p> <p><strong>Equivalent OpenType tag:</strong> 'kern'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.</p> <p><strong>Equivalent OpenType tag:</strong> 'liga'</p> </dd> + + + <dd> <p>Changes selected figures from oldstyle to the default lining form. For example, a user may invoke this feature in order to get lining figures, which fit better with all-capital text. This feature overrides results of the Oldstyle Figures feature (onum).</p> <p><strong>Equivalent OpenType tag:</strong> 'lnum'</p> </dd> + + + <dd> <p> Enables localized forms of glyphs to be substituted for default forms. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct. </p> <p><strong>Equivalent OpenType tag:</strong> 'locl'</p> </dd> + + + <dd> <p> Positions mark glyphs with respect to base glyphs. For example, in Arabic script positioning the Hamza above the Yeh.</p> <p><strong>Equivalent OpenType tag: </strong> 'mark'</p> </dd> + + + <dd> <p> Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).</p> <p><strong>Equivalent OpenType tag:</strong> 'mgrk'</p> </dd> + + + <dd> <p> Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. For example, in Arabic, the ligaturised mark Ha with Hamza above it can also be obtained by positioning these marks relative to one another.</p> <p><strong>Equivalent OpenType tag:</strong> 'mkmk'</p> </dd> + + + <dd> <p> Replaces default glyphs with various notational forms (such as glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.</p> <p><strong>Equivalent OpenType tag:</strong> 'nalt'</p> </dd> + + + <dd> <p> Used to access glyphs made from glyph shapes defined by the National Language Council ({{NLC}}) of Japan for a number of {{JIS}} characters in 2000. </p> <p><strong>Equivalent OpenType tag:</strong> 'nlck'</p> </dd> + + + <dd> <p> Changes selected figures from the default lining style to oldstyle form. For example, a user may invoke this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. This feature overrides results of the Lining Figures feature (lnum).</p> <p><strong>Equivalent OpenType tag:</strong> 'onum'</p> </dd> + + + <dd> <p> Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.</p> <p><strong>Equivalent OpenType tag:</strong> 'ordn'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs ({{GPOS}}, not {{GSUB}} feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated).</p> <p><strong>Equivalent OpenType tag:</strong> 'palt'</p> </dd> + + + <dd> <p>Turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and it is referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia). </p> <p><strong>Equivalent OpenType tag:</strong> 'pcap'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'pnum'</p> </dd> + + + <dd> <p> Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in {{CJKV}} fonts, but may also be used for Kana in Japanese fonts.</p> <p><strong>Equivalent OpenType tag:</strong> 'pwid'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'qwid'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to ensure correct glyph formation. </p> <p><strong>Equivalent OpenType tag:</strong> 'rlig'</p> </dd> + + + <dd> <p> Identifies glyphs in the font which have been designed for "ruby", from the old typesetting term for four-point-sized type. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. </p> <p><strong>Equivalent OpenType tag:</strong> 'ruby'</p> </dd> + + + <dd> <p> Replaces the default forms with the stylistic alternates. Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. </p> <p><strong>Equivalent OpenType tag:</strong> 'salt'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors.</p> <p><strong>Equivalent OpenType tag:</strong> 'sinf'</p> </dd> + + + <dd> <p> Turns lowercase characters into small capitals. This corresponds to the common {{SC}} font layout. It is generally used for display lines set in Large &amp; small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included.</p> <p><strong>Equivalent OpenType tag:</strong> 'smcp'</p> </dd> + + + <dd> <p> Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'smpl'</p> </dd> + + + <dd> <p> In addition to, or instead of, stylistic alternatives of individual glyphs (see 'salt' feature), some fonts may contain sets of stylistic variant glyphs corresponding to portions of the character set, such as multiple variants for lowercase letters in a Latin font. Glyphs in stylistic sets may be designed to harmonise visually, interract in particular ways, or otherwise work together. Examples of fonts including stylistic sets are Zapfino Linotype and Adobe's Poetica. Individual features numbered sequentially with the tag name convention 'ss01' 'ss02' 'ss03' . 'ss20' provide a mechanism for glyphs in these sets to be associated via {{GSUB}} lookup indexes to default forms and to each other, and for users to select from available stylistic sets</p> <p><strong>Equivalent OpenType tag:</strong> 'ss01'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss02'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss03'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss04'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss05'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss06'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss07'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss08'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss09'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss10'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss11'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss12'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss13'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss14'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss15'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss16'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss17'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss18'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss19'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss20'</p> </dd> + + + <dd> <p> May replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement.</p> <p><strong>Equivalent OpenType tag:</strong> 'subs'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles).</p> <p><strong>Equivalent OpenType tag:</strong> 'sups'</p> </dd> + + + <dd> <p> Replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character.</p> <p><strong>Equivalent OpenType tag:</strong> 'swsh'</p> </dd> + + + <dd> <p> Replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes.</p> <p><strong>Equivalent OpenType tag:</strong> 'titl'</p> </dd> + + + <dd> <p> Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts).</p> <p><strong>Equivalent OpenType tag:</strong> 'tnam'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'tnum'</p> </dd> + + + <dd> <p> Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'trad'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'twid'</p> </dd> + + + <dd> <p> Maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. +</p> <p><strong>Equivalent OpenType tag:</strong> 'unic'</p> </dd> + + + <dd> <p>Allows the user to change from the default 0 to a slashed form. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. </p> <p><strong>Equivalent OpenType tag:</strong> 'zero'</p> </dd> + + + + + <p>Indicates additional shaping requirements for text.</p> + + + <dd> <p>Indicates that there is no additional shaping requirements for text. Text is shaped with the writing system default behavior.</p> </dd> + + + <dd> <p>Indicates that text should leave no visible control or format control characters.</p> </dd> + + + + + <p> Indicates the condition at the edges of inline object or text used to determine line-breaking behavior.</p> + + + <dd> <p> Indicates whether a break is allowed by determining the condition of the neighboring text span or inline object.</p> </dd> + + + <dd> <p> Indicates that a line break is allowed, unless overruled by the condition of the neighboring text span or inline object, either prohibited by a "may not break" condition or forced by a "must break" condition. </p> </dd> + + + <dd> <p> Indicates that there should be no line break, unless overruled by a "must break" condition from the neighboring text span or inline object. </p> </dd> + + + <dd> <p> Indicates that the line break must happen, regardless of the condition of the adjacent text span or inline object. </p> </dd> + + + + + <p>Specifies how to apply number substitution on digits and related punctuation.</p> + + + <dd> <p>Specifies that the substitution method should be determined based on the {{LOCALE_IDIGITSUBSTITUTION}} value of the specified text culture.</p> </dd> + + + <dd> <p>If the culture is Arabic or Persian, specifies that the number shapes depend on the context. Either traditional or nominal number shapes are used, depending on the nearest preceding strong character or (if there is none) the reading direction of the paragraph.</p> </dd> + + + <dd> <p>Specifies that code points 0x30-0x39 are always rendered as nominal numeral shapes (ones of the European number), that is, no substitution is performed.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the national number shapes as specified by the {{LOCALE_SNATIVEDIGITS}} value of the specified text culture.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the traditional shapes for the specified culture. For most cultures, this is the same as NativeNational. However, NativeNational results in Latin numbers for some Arabic cultures, whereasDWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL results in arabic numbers for all Arabic cultures.</p> </dd> + + + + + <p>Identifies a type of alpha texture.</p> + <p>An alpha texture is a bitmap of alpha values, each representing opacity of a pixel or subpixel.</p> + + + <dd> <p>Specifies an alpha texture for aliased text rendering (that is, each pixel is either fully opaque or fully transparent), with one byte per pixel.</p> </dd> + + + <dd> <p>Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and one byte per pixel in the vertical dimension.</p> </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + + + <dd> <p>The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.</p> </dd> + + + <dd> <p>The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of <strong>ascent</strong>, <strong>descent</strong>, and <strong>lineGap</strong>. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.</p> </dd> + + + <dd> <p>The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.</p> </dd> + + + <dd> <p>The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.</p> </dd> + + + <dd> <p>The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.</p> </dd> + + + <dd> <p>The suggested underline thickness value of the font face in font design units.</p> </dd> + + + <dd> <p>The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.</p> </dd> + + + <dd> <p>The suggested strikethrough thickness value of the font face in font design units.</p> </dd> + + + + + <p>Specifies the metrics of an individual glyph. The units depend on how the metrics are obtained.</p> + + + <dd> <p>Specifies the X offset from the glyph origin to the left edge of the black box. The glyph origin is the current horizontal writing position. A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').</p> </dd> + + + <dd> <p>Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.</p> </dd> + + + <dd> <p>Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally. The value is negative when the right edge of the black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the vertical offset from the vertical origin to the top of the black box. Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.</p> </dd> + + + <dd> <p>Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically. Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different. Its Y coordinate is specified by <strong>verticalOriginY</strong> value, and its X coordinate is half the <strong>advanceWidth</strong> to the right of the horizontal origin.</p> </dd> + + + <dd> <p>Specifies the vertical distance from the bottom edge of the black box to the advance height. This is positive when the bottom edge of the black box is within the layout box, or negative when the bottom edge of black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system. The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing and the top (that is, yMax) of the glyph's bounding box.</p> </dd> + + + + + <p>The optional adjustment to a glyph's position.</p> + <p>An glyph offset changes the position of a glyph without affecting the pen position. Offsets are in logical, pre-transform units.</p> + + + <dd> <p>The offset in the advance direction of the run. A positive advance offset moves the glyph to the right (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.</p> </dd> + + + <dd> <p>The offset in the ascent direction, that is, the direction ascenders point. A positive ascender offset moves the glyph up (in pre-transform coordinates). A negative ascender offset moves the glyph down.</p> </dd> + + + + + <p>The <strong>{{DWRITE_MATRIX}}</strong> structure specifies the graphics transform to be applied to rendered glyphs.</p> + + + <dd> <p>A value indicating the horizontal scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical shear / sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shear / negative sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shift (always orthogonal regardless of rotation).</p> </dd> + + + <dd> <p>A value indicating the vertical shift (always orthogonal regardless of rotation.)</p> </dd> + + + + + <p>Specifies a range of text positions where format is applied in the text represented by an <strong>{{IDWriteTextLayout}}</strong> object.</p> + + + + <p>Specifies properties used to identify and execute typographic features in the current font face.</p> + <p>A non-zero value generally enables the feature execution, while the zero value disables it. A feature requiring a selector uses this value to indicate the selector index.</p><p>The OpenType standard provides access to typographic features available in the font by means of a feature tag with the associated parameters. The OpenType feature tag is a 4-byte identifier of the registered name of a feature. For example, the 'kern' feature name tag is used to identify the 'Kerning' feature in OpenType font. Similarly, the OpenType feature tag for 'Standard Ligatures' and 'Fractions' is 'liga' and 'frac' respectively. Since a single run can be associated with more than one typographic features, the Text String {{API}} accepts typographic settings for a run as a list of features and are executed in the order they are specified.</p><p>The value of the tag member represents the OpenType name tag of the feature, while the param value represents additional parameter for the execution of the feature referred by the tag member. Both <strong>nameTag</strong> and <strong>parameter</strong> are stored as little endian, the same convention followed by {{GDI}}. Most features treat the Param value as a binary value that indicates whether to turn the execution of the feature on or off, with it being off by default in the majority of cases. Some features, however, treat this value as an integral value representing the integer index to the list of alternate results it may produce during the execution; for instance, the feature 'Stylistic Alternates' or 'salt' uses the <strong>parameter</strong> value as an index to the list of alternate substituting glyphs it could produce for a specified glyph. </p> + + + <dd> <p>The feature OpenType name identifier.</p> </dd> + + + <dd> <p>The execution parameter of the feature.</p> </dd> + + + + + <p>Contains a set of typographic features to be applied during text shaping.</p> + + + <dd> <p>A reference to a structure that specifies properties used to identify and execute typographic features in the font.</p> </dd> + + + <dd> <p>A value that indicates the number of features being applied to a font face.</p> </dd> + + + + + <p>Specifies the trimming option for text overflowing the layout box. </p> + + + <dd> <p>A value that specifies the text granularity used to trim text overflowing the layout box.</p> </dd> + + + <dd> <p>A character code used as the delimiter that signals the beginning of the portion of text to be preserved. Text starting from the Nth occurence of the delimiter (where N equals delimiterCount) counting backwards from the end of the text block will be preserved. For example, given the text is a path like c:\A\B\C\D\file.txt and delimiter equal to '\' and delimiterCount equal to 1, the file.txt portion of the text would be preserved. Specifying a delimiterCount of 2 would preserve D\file.txt. </p> </dd> + + + <dd> <p>The delimiter count, counting from the end of the text, to preserve text from.</p> </dd> + + + + + <p>Stores the association of text and its writing system script, as well as some display attributes.</p> + + + <dd> <p>The zero-based index representation of writing system script.</p> </dd> + + + <dd> <p>A value that indicates additional shaping requirement of text.</p> </dd> + + + + + <p>Line breakpoint characteristics of a character.</p> + + + <dd> <p>Indicates a breaking condition before the character.</p> </dd> + + + <dd> <p>Indicates a breaking condition after the character.</p> </dd> + + + <dd> <p>Indicates that the character is some form of whitespace, which may be meaningful for justification.</p> </dd> + + + <dd> <p>Indicates that the character is a soft hyphen, often used to indicate hyphenation points inside words.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph is shaped alone.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph has justification applied.</p> </dd> + + + <dd> <p>Indicates that the glyph is the start of a cluster.</p> </dd> + + + <dd> <p>Indicates that the glyph is a diacritic mark.</p> </dd> + + + <dd> <p>Indicates that the glyph is a word boundary with no visible space.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs. All coordinates are in device independent pixels ({{DIPs}}). </p> + + + <dd> <p>The physical font face object to draw with.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIPs}} (equals 1/96 inch), not points.</p> </dd> + + + <dd> <p>The number of glyphs in the glyph run.</p> </dd> + + + <dd> <p>A reference to an array of indices to render for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph advance widths for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph offsets for the glyph run.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying <strong>isSideways</strong> = true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The implicit resolved bidi level of the run. Odd levels indicate right-to-left languages like Hebrew and Arabic, while even levels indicate left-to-right languages like English and Japanese (when written horizontally). For right-to-left languages, the text origin is on the right, and text should be drawn to the left.</p> </dd> + + + + + <p>Contains additional properties related to those in <strong>{{DWRITE_GLYPH_RUN}}</strong>.</p> + + + + <p>Contains information about the width, thickness, offset, run height, reading direction, and flow direction of an underline. </p> + <p>All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the underline, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the underline, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the underline from the baseline. A positive offset represents a position below the baseline (away from the text) and a negative offset is above (toward the text).</p> </dd> + + + <dd> <p>A value that indicates the height of the tallest run where the underline is applied.</p> </dd> + + + <dd> <p>A value that indicates the reading direction of the text associated with the underline. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>A value that indicates the flow direction of the text associated with the underline. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters which contains the locale of the text that the underline is being drawn under. For example, in vertical text, the underline belongs on the left for Chinese but on the right for Japanese. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information regarding the size and placement of strikethroughs. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the strikethrough, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the strikethrough, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the strikethrough from the baseline. A positive offset represents a position below the baseline and a negative offset is above. Typically, the offset will be negative.</p> </dd> + + + <dd> <p>Reading direction of the text associated with the strikethrough. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>Flow direction of the text associated with the strikethrough. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters containing the locale of the text that is the strikethrough is being drawn over. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + + + <p>Contains information about a glyph cluster.</p> + + + <dd> <p>The total advance width of all glyphs in the cluster.</p> </dd> + + + <dd> <p>The number of text positions in the cluster.</p> </dd> + + + <dd> <p>Indicates whether a line can be broken right after the cluster.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a whitespace character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a newline character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a soft hyphen character.</p> </dd> + + + <dd> <p>Indicates whether the cluster is read from right to left.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains properties describing the geometric measurement of an +application-defined inline object.</p> + + + <dd> <p>The width of the inline object.</p> </dd> + + + <dd> <p>The height of the inline object.</p> </dd> + + + <dd> <p>The distance from the top of the object to the point where it is lined up with the adjacent text. If the baseline is at the bottom, then <strong>baseline</strong> simply equals <strong>height</strong>.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the object is to be placed upright or alongside the text baseline for vertical text.</p> </dd> + + + + + <p>Indicates how much any visible {{DIPs}} (device independent pixels) overshoot each side of the layout or inline objects.</p><p>Positive overhangs indicate that the visible area extends outside the layout box or inline object, while negative values mean there is whitespace inside. The returned values are unaffected by rendering transforms or pixel snapping. Additionally, they may not exactly match the final target's pixel bounds after applying grid fitting and hinting.</p> + + + <dd> <p>The distance from the left-most visible {{DIP}} to its left-alignment edge.</p> </dd> + + + <dd> <p>The distance from the top-most visible {{DIP}} to its top alignment edge.</p> </dd> + + + <dd> <p>The distance from the right-most visible {{DIP}} to its right-alignment edge.</p> </dd> + + + <dd> <p>The distance from the bottom-most visible {{DIP}} to its lower-alignment edge.</p> </dd> + + + + + <p>Describes the region obtained by a hit test.</p> + + + <dd> <p>The first text position within the hit region. </p> </dd> + + + <dd> <p>The number of text positions within the hit region. </p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The width of the hit region.</p> </dd> + + + <dd> <p>The height of the hit region.</p> </dd> + + + <dd> <p>The <strong>{{BIDI}} level</strong> of the text positions within the hit region.</p> </dd> + + + <dd> <p>true if the hit region contains text; otherwise, false.</p> </dd> + + + <dd> <p>true if the text range is trimmed; otherwise, false.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Releases a fragment from a file. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the client-defined context of a font fragment returned from <strong>ReadFileFragment</strong>.</p> </dd> + + + + + <p> Obtains the total size of a file. </p> + <p> Implementing <strong>GetFileSize</strong>() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the total size of the file.</p> </dd> + + + + + <p> Obtains the last modified time of the file. </p> + <p>The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 ({{UTC}}).</p> </dd> + + + + + <p> Handles loading font file resources of a particular type from a font file reference key into a font file stream object. </p> + <p>The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file stream object that encapsulates an open file resource. </p> + <p>The resource is closed when the last reference to <em>fontFileStream</em> is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by <em> fontFileReferenceKeySize</em>.</p> </dd> + + + <dd> <p>The size of font file reference key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFontFileStream}}</strong> object.</p> </dd> + + + + + <p>A built-in implementation of the <strong>{{IDWriteFontFileLoader}}</strong> interface, that operates on local font files +and exposes local font file information from the font file reference key. Font file references created using <strong>CreateFontFileReference</strong> use this font file loader.</p> + + + + <p>Obtains the length of the absolute file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>Size of font file reference key in bytes.</p> </dd> + + + <dd> <p>Length of the file path string, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + + + <p>Obtains the absolute font file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The character array that receives the local file path.</p> </dd> + + + <dd> <p>The length of the file path character array.</p> </dd> + + + + + <p>Obtains the last write time of the file from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The time of the last font file modification.</p> </dd> + + + + + <p> Represents a font file. Applications such as font managers or font viewers can call <strong>{{IDWriteFontFile::Analyze}}</strong> to find out if a particular file is a font file, and whether it is a font type that is supported by the font system.</p> + + + + <p> Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font file reference key. Note that the reference value is only valid until the font file object it is obtained from is released. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font file reference key in bytes. This parameter is passed uninitialized.</p> </dd> + + + + + <p> Obtains the file loader associated with a font file object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the font file loader associated with the font file object.</p> </dd> + + + + + <p> Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system. </p> + <strong>Important</strong>??Certain font file types are recognized, but not supported by the font system. For example, the font system will recognize a file as a Type 1 font file but will not be able to construct a font face object from it. In such situations, <strong>Analyze</strong> will set <em>isSupportedFontType</em> output parameter to <strong>{{FALSE}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the font type is supported by the font system; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font file. Note that even if <em> isSupportedFontType</em> is <strong>{{FALSE}}</strong>, the <em>fontFileType</em> value may be different from <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font face. If <em>fontFileType</em> is not equal to <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>, then that can be constructed from the font file. </p> </dd> + + + <dd> <p>When this method returns, contains the number of font faces contained in the font file.</p> </dd> + + + + + <p> Represents text rendering settings such as ClearType level, enhanced contrast, and gamma correction for glyph rasterization and filtering.</p><p>An application typically obtains a rendering parameters object by calling the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p> + + + + <p>Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + <p>The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.</p> + <p>Returns the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + + + + <p>Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.</p> + <p>Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.</p> + <p>Returns the amount of contrast enhancement. Valid values are greater than or equal to zero.</p> + + + + <p>Gets the ClearType level of the rendering parameters object. </p> + <p>The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)</p> + <p>The ClearType level of the rendering parameters object.</p> + + + + <p>Gets the pixel geometry of the rendering parameters object.</p> + <p> A value that indicates the type of pixel geometry used in the rendering parameters object.</p> + + + + <p>Gets the rendering mode of the rendering parameters object.</p> + <p>By default, the rendering mode is initialized to {{DWRITE_RENDERING_MODE_DEFAULT}}, which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the <strong>{{IDWriteFontFace::GetRecommendedRenderingMode}}</strong> method.</p> + <p>A value that indicates the rendering mode of the rendering parameters object.</p> + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p> Obtains the file format type of a font face. </p> + <p>A value that indicates the type of format for the font face (such as Type 1, TrueType, vector, or bitmap).</p> + + + + <p> Obtains the font files representing a font face. </p> + <p>The <strong>{{IDWriteFontFace::GetFiles}}</strong> method should be called twice. The first time you call <strong>GetFiles</strong><em>fontFiles</em> should be <strong>{{NULL}}</strong>. When the method returns, <em>numberOfFiles</em> receives the number of font files that represent the font face.</p><p>Then, call the method a second time, passing the <em>numberOfFiles</em> value that was output the first call, and a non-null buffer of the correct size to store the <strong>{{IDWriteFontFile}}</strong> references.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <em>fontFiles</em> is <strong>{{NULL}}</strong>, receives the number of files representing the font face. Otherwise, the number of font files being requested should be passed. See the Remarks section below for more information.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a user-provided array that stores references to font files representing the font face. This parameter can be <strong>{{NULL}}</strong> if the user wants only the number of files representing the font face. This {{API}} increments reference count of the font file references returned according to {{COM}} conventions, and the client should release them when finished.</p> </dd> + + + + + <p> Obtains the index of a font face in the context of its font files. </p> + <p>The zero-based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value is zero.</p> + + + + <p> Obtains the algorithmic style simulation flags of a font face. </p> + <p>Font face simulation flags for algorithmic means of making text bold or italic.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p>Returns <strong>{{TRUE}}</strong> if the font is a symbol font, otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, a?<strong>{{DWRITE_FONT_METRICS}}</strong> structure that holds metrics (such as ascent, descent, or cap height) for the current font face element. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Obtains the number of glyphs in the font face. </p> + <p>The number of glyphs in the font face.</p> + + + + <p> Obtains ideal (resolution-independent) glyph metrics in font design units. </p> + <p>Design glyph metrics are used for glyph positioning.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains an array of {{DWRITE_GLYPH_METRICS}} structures. <em>glyphMetrics</em> must be initialized with an empty buffer that contains at least as many elements as <em>glyphCount</em>. The metrics returned by this function are in font design units.</p> </dd> + + + <dd> <p>Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation</p> </dd> + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p> Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the <strong>{{IDWriteFontFileStream}}</strong> interface implemented by the font file loader. </p> + <p> The context for the same tag may be different for each call, so each one must be held and released separately. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases the table obtained earlier from <strong>TryGetFontTable</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Computes the outline of a run of glyphs by calling back to the outline sink interface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of glyph indices. The glyphs are in logical order and the advance direction depends on the <em>isRightToLeft</em> parameter. The array must be allocated and be able to contain the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph advances in {{DIPs}}. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. <em>glyphAdvances</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. <em>glyphOffsets</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of glyphs in the run.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the ascender of the glyph runs alongside the baseline. If <strong>{{FALSE}}</strong>, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have <em>isSideways</em> set to <strong>{{FALSE}}</strong>.</p> <p>A client can render a vertical run by setting <em>isSideways</em> to <strong>{{TRUE}}</strong> and rotating the resulting geometry 90 degrees to the right using a transform. The <em>isSideways</em> and <em>isRightToLeft</em> parameters cannot both be true.</p> </dd> + + + <dd> <p>The visual order of the glyphs. If this parameter is <strong>{{FALSE}}</strong>, then glyph advances are from left to right. If <strong>{{TRUE}}</strong>, the advance direction is right to left. By default, the advance direction is left to right.</p> </dd> + + + <dd> <p>A reference to the interface that is called back to perform outline drawing operations.</p> </dd> + + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>A reference to an object that contains rendering settings such as gamma level, enhanced contrast, and ClearType level. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRIC}}</strong>S structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Obtains glyph metrics in font design units with the return values compatible with what {{GDI}} would produce.</p> + <p>Standard <strong>{{HRESULT}}</strong> error code. If any of the input glyph indices are outside of the valid glyph index range for the current font face, <strong>{{E_INVALIDARG}}</strong> will be returned.</p> + + + <dd> <p>The ogical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>When set to <strong>{{FALSE}}</strong>, the metrics are the same as the metrics of {{GDI}} aliased text. When set to <strong>{{TRUE}}</strong>, the metrics are the same as the metrics of text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>.</p> </dd> + + + <dd> <p>An array of glyph indices for which to compute the metrics.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_GLYPH_METRICS}}</strong> structures filled by this function. The metrics are in font design units.</p> </dd> + + + <dd> <p>A {{BOOL}} value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation.</p> </dd> + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Gets an object which represents the set of installed fonts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the system font collection object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + <dd> <p>If this parameter is nonzero, the function performs an immediate check for changes to the set of installed fonts. If this parameter is <strong>{{FALSE}}</strong>, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify <strong>{{TRUE}}</strong> if it has itself just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p> Creates a font collection using a custom font collection loader. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined font collection loader, which must have been previously registered using <strong>RegisterFontCollectionLoader</strong>.</p> </dd> + + + <dd> <p>The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of the collection key.</p> </dd> + + + <dd> <p>Contains an address of a reference to the system font collection object if the method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p>Registers a custom font collection loader with the factory object. </p> + <p>This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontCollectionLoader}}</strong> object to be registered.</p> </dd> + + + + + <p> Unregisters a custom font collection loader that was previously registered using <strong>RegisterFontCollectionLoader</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a font file reference object from a local font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided <em>filePath</em> doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided <em>lastWriteTime</em> doesn't match the file on the disk.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font file reference object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a reference to an application-specific font file resource. </p> + <p> This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. <em>fontFileReferenceKey</em> has to be unique only in the scope of the <em>fontFileLoader</em> used in this call. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font file reference key that uniquely identifies the font file resource during the lifetime of <em>fontFileLoader</em>.</p> </dd> + + + <dd> <p>The size of the font file reference key in bytes.</p> </dd> + + + <dd> <p>The font file loader that will be used by the font system to load data from the file identified by <em>fontFileReferenceKey</em>.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font file object when this method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that represents a font face. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the type of file format of the font face.</p> </dd> + + + <dd> <p>The number of font files, in element count, required to represent the font face.</p> </dd> + + + <dd> <p>A font file object representing the font face. Because <strong>{{IDWriteFontFace}}</strong> maintains its own references to the input font file objects, you may release them after this call.</p> </dd> + + + <dd> <p>The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the How to Add Support for Multiple Monitors topic.</p> + <p>Standard {{HRESULT}} error code.</p> + + + + <p> Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle for the specified monitor.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the rendering parameters object created by this method.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p> Registers a font file loader with DirectWrite. </p> + <p> This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontFileLoader}}</strong> object for a particular file resource type.</p> </dd> + + + + + <p> Unregisters a font file loader that was previously registered with the DirectWrite font system using <strong>RegisterFontFileLoader</strong>. </p> + <p> This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a text format object used for text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the name of the font family</p> </dd> + + + <dd> <p>A reference to a font collection object. When this is <strong>{{NULL}}</strong>, indicates the system font collection.</p> </dd> + + + <dd> <p>A value that indicates the font weight for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font style for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font stretch for the text object created by this method.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIP}} ("device-independent pixel") units. A {{DIP}} equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of characters that contains the locale name.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created text format object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a typography object for use in a text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a newly created typography object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that is used for interoperability with {{GDI}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to a {{GDI}} interop object if successful, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The number of characters in the string.</p> </dd> + + + <dd> <p>A reference to an object that indicates the format to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the resultant text layout object.</p> </dd> + + + + + <p> Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. </p> + <p>The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired <strong>CreateTextLayout</strong> should be used instead.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The length of the string, in character count.</p> </dd> + + + <dd> <p>The text formatting object to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} device <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} device <em>pixelsPerDip</em> is 1.25 (120/96).</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per {{DIP}}.</p> </dd> + + + <dd> <p> Instructs the text layout to use the same metrics as {{GDI}} bi-level text when set to <strong>{{FALSE}}</strong>. When set to <strong>{{TRUE}}</strong>, instructs the text layout to use the same metrics as text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>. </p> </dd> + + + <dd> <p>When this method returns, contains an address to the reference of the resultant text layout object.</p> </dd> + + + + + <p> Creates an inline object for trimming, using an ellipsis as the omission sign. </p> + <p>The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing <strong>{{IDWriteInlineObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A text format object, created with <strong>CreateTextFormat</strong>, used for text layout.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the omission (that is, ellipsis trimming) sign created by this method.</p> </dd> + + + + + <p> Returns an interface for performing text analysis. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created text analyzer object.</p> </dd> + + + + + <p> Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use {{NLS}} defaults for the given culture instead). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies how to apply number substitution on digits and related punctuation.</p> </dd> + + + <dd> <p>The name of the locale to be used in the <em>numberSubstitution</em> object.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether to ignore user overrides.</p> </dd> + + + <dd> <p>When this method returns, contains an address to a reference to the number substitution object created by this method.</p> </dd> + + + + + <p>Specifies the mode used by a <strong>WriteBufferImmediate</strong> operation.</p> + + + <dd> <p>The write operation behaves the same as normal copy-write operations.</p> </dd> + + + <dd> <p>The write operation is guaranteed to occur after all preceding commands in the command stream have started, including previous <strong>WriteBufferImmediate</strong> operations.</p> </dd> + + + <dd> <p>The write operation is deferred until all previous commands in the command stream have completed through the {{GPU}} pipeline, including previous <strong>WriteBufferImmediate</strong> operations. Write operations that specify <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT}}</strong> don't block subsequent operations from starting. If there are no previous operations in the command stream, then the write operation behaves as if <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN}}</strong> was specified.</p> </dd> + + + + + <p> Creates a glyph run analysis object, which encapsulates information used to render a glyph run. </p> + <p>The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the properties of the glyph run (font face, advances, and so on).</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1.25.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the <em>emSize</em> and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline).</p> </dd> + + + <dd> <p>Specifies the measuring mode to use with glyphs.</p> </dd> + + + <dd> <p>The horizontal position (X-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position (Y-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created glyph run analysis object.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Gets a reference to the current font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, the address of a reference to the newly created <strong>{{IDWriteFontFile}}</strong> object.</p> </dd> + + + + + <p> Used to construct a collection of fonts given a particular type of key. </p> + <p>The font collection loader interface is recommended to be implemented by a singleton object. Note that font collection loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file enumerator object that encapsulates a collection of font files. The font system calls back to this interface to create a font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IDWriteFactory}}</strong> object that was used to create the current font collection.</p> </dd> + + + <dd> <p>A font collection key that uniquely identifies the collection of font files within the scope of the font collection loader being used. The buffer allocated for this key must be at least the size, in bytes, specified by <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size of the font collection key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font file enumerator.</p> </dd> + + + + + <p> Represents a collection of strings indexed by locale name.</p> + <p>The set of strings represented by an <strong>{{IDWriteLocalizedStrings}}</strong> are indexed by a zero based <em>{{UINT32}}</em> number that maps to a locale. The numeric index for a specific locale is retreived by using the <strong>FindLocaleName</strong> method.</p><p>A common use for the <strong>{{IDWriteLocalizedStrings}}</strong> interface is to hold a list of localized font family names created by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method. The following example shows how to get the family name for the "en-us" locale.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + + + + <p> Gets the number of language/string pairs. </p> + <p>The number of language/string pairs.</p> + + + + <p> Gets the zero-based index of the locale name/string pair with the specified locale name. </p> + <p>Note that if the locale name does not exist, the return value is a success and the <em>exists</em> parameter is <strong>{{FALSE}}</strong>. If you are getting the font family name for a font and the specified locale name does not exist, one option is to set the index to 0 as shown below. There is always at least one locale for a font family.</p><pre>{{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; +</pre> + <p>If the specified locale name does not exist, the return value is <strong>{{S_OK}}</strong>, but <em>index</em> is <strong>{{UINT_MAX}}</strong> and <em>exists</em> is <strong>{{FALSE}}</strong>. +</p> + + + <dd> <p>A null-terminated array of characters containing the locale name to look for.</p> </dd> + + + <dd> <p>The zero-based index of the locale name/string pair. This method initializes <em>index</em> to <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the locale name exists; otherwise, <strong>{{FALSE}}</strong>. This method initializes <em>exists</em> to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the locale name with the specified index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the length in characters of the locale name, not including the null terminator.</p> </dd> + + + + + <p> Copies the locale name with the specified index to the specified array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains a character array, which is null-terminated, that receives the locale name from the language/string pair. The buffer allocated for this array must be at least the size of <em>size</em>, in element count.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the string with the specified index. </p> + <p>Use <strong>GetStringLength</strong> to get the string length before calling the <strong>{{IDWriteLocalizedStrings::GetString}}</strong> method, as shown in the following code.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A zero-based index of the language/string pair.</p> </dd> + + + <dd> <p>The length in characters of the string, not including the null terminator, from the language/string pair.</p> </dd> + + + + + <p> Copies the string with the specified index to the specified array. </p> + <p>The string returned must be allocated by the caller. You can get the size of the string by using the <strong>GetStringLength</strong> method prior to calling <strong>GetString</strong>, as shown in the following example.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the language/string pair to be examined.</p> </dd> + + + <dd> <p>The null terminated array of characters that receives the string from the language/string pair. The buffer allocated for this array should be at least the size of <em>size</em>. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + + + <p>Represents a family of related fonts.</p> + <p>A font family is a set of fonts that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include style, such as italic, and weight, such as bold. The following illustration shows examples of fonts that are members of the "Times New Roman" font family.</p><p>An <strong>{{IDWriteFontFamily}}</strong> object can be retrieved from a font collection using the <strong>{{IDWriteFontCollection::GetFontFamily}}</strong> method shown in the following example. <strong>GetFontFamily</strong> takes a <strong>{{UINT32}}</strong> index and returns the font family for the font at that index.</p><pre>{{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); +} +</pre><p>The font family name is used to specify the font family for text layout and text format objects. You can get a list of localized font family names from an <strong>{{IDWriteFontFamily}}</strong> object in the form of an <strong>{{IDWriteLocalizedStrings}}</strong> object by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method, as shown in the following code.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} +</pre> + + + + <p> Creates a localized strings object that contains the family names for the font family, indexed by locale name. </p> + <p> The following code example shows how to get the font family name from a <strong>{{IDWriteFontFamily}}</strong> object.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The address of a reference to the newly created <strong>{{IDWriteLocalizedStrings}}</strong> object.</p> </dd> + + + + + <p> Gets the font that best matches the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Gets a list of fonts in the font family ranked in order of how well they match the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>An address of a reference to the newly created <strong>{{IDWriteFontList}}</strong> object.</p> </dd> + + + + + <p> Represents a physical font in a font collection. This interface is used to create font faces from physical fonts, or to retrieve information such as font face metrics or face names from existing font faces.</p> + + + + <p> Gets the font family to which the specified font belongs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font family object to which the specified font belongs.</p> </dd> + + + + + <p> Gets the weight, or stroke thickness, of the specified font. </p> + <p>A value that indicates the weight for the specified font.</p> + + + + <p> Gets the stretch, or width, of the specified font. </p> + <p>A value that indicates the type of stretch, or width, applied to the specified font.</p> + + + + <p> Gets the style, or slope, of the specified font. </p> + <p>A value that indicates the type of style, or slope, of the specified font.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p><strong>{{TRUE}}</strong> if the font is a symbol font; otherwise, <strong>{{FALSE}}</strong>.</p> + + + + <p> Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address to a reference to the newly created localized strings object.</p> </dd> + + + + + <p> Gets a localized strings collection containing the specified informational strings, indexed by locale name. </p> + <p> If the font does not contain the string specified by <em>informationalStringID</em>, the return value is <strong>{{S_OK}}</strong> but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that identifies the informational string to get. For example, <strong>{{DWRITE_INFORMATIONAL_STRING_DESCRIPTION}}</strong> specifies a string that contains a description of the font. </p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created localized strings object.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a value that indicates what simulations are applied to the specified font. </p> + <p> A value that indicates one or more of the types of simulations (none, bold, or oblique) applied to the specified font.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a structure that has font metrics for the current font face. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Determines whether the font supports a specified character. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value for the method to inspect.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font supports the specified character; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Creates a font face object for the font. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + <p>The <strong>{{IDWriteFactory::GetSystemFontCollection}}</strong> method will give you an <strong>{{IDWriteFontCollection}}</strong> object, which encapsulates the set of fonts installed on the system, as shown in the following code example.</p><pre>{{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. +if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); +} +</pre><p> <strong>{{IDWriteTextFormat}}</strong> and <strong>{{IDWriteTextLayout}}</strong> both have a <strong>GetFontCollection</strong> method that returns the font collection being used by the object. These interfaces use the system font collection by default, but can use a custom font collection instead.</p><p>To determine what fonts are available on the system, get a reference to the system font collection. You can then use the <strong>{{IDWriteFontCollection::GetFontFamilyCount}}</strong> method to determine the number of fonts and loop through the list. The following example enumerates the fonts in the system font collection, and prints the font family names to the console.</p><pre> #include &lt;dwrite.h&gt; +#include &lt;string.h&gt; +#include &lt;stdio.h&gt; +#include &lt;new&gt; // SafeRelease inline function. +template &lt;class T&gt; inline void SafeRelease(T **ppT) +{ if (*ppT) { (*ppT)-&gt;Release(); *ppT = {{NULL}}; } +} void wmain() +{ {{IDWriteFactory}}* pDWriteFactory = {{NULL}}; {{HRESULT}} hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory) ); {{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. if ({{SUCCEEDED}}(hr)) { hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); } {{UINT32}} familyCount = 0; // Get the number of font families in the collection. if ({{SUCCEEDED}}(hr)) { familyCount = pFontCollection-&gt;GetFontFamilyCount(); } for ({{UINT32}} i = 0; i &lt; familyCount; ++i) { {{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. if ({{SUCCEEDED}}(hr)) { hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); } {{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. if ({{SUCCEEDED}}(hr)) { hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); } {{UINT32}} index = 0; {{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } } // If the specified locale doesn't exist, select the first on the list. if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); } // Allocate a string big enough to hold the name. wchar_t* name = new (std::nothrow) wchar_t[length+1]; if (name == {{NULL}}) { hr = {{E_OUTOFMEMORY}}; } // Get the family name. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetString(index, name, length+1); } if ({{SUCCEEDED}}(hr)) { // Print out the family name. wprintf(L"%s\n", name); } SafeRelease(&amp;pFontFamily); SafeRelease(&amp;pFamilyNames); delete [] name; } SafeRelease(&amp;pFontCollection); SafeRelease(&amp;pDWriteFactory); +} </pre> + + + + <p> Gets the number of font families in the collection. </p> + <p>The number of font families in the collection.</p> + + + + <p> Creates a font family object given a zero-based font family index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font family.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font family object.</p> </dd> + + + + + <p> Finds the font family with the specified family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters, which is null-terminated, containing the name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.</p> </dd> + + + <dd> <p>When this method returns, contains the zero-based index of the matching font family if the family name was found; otherwise, <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the family name exists; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong to the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font face object that specifies the physical font.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets the font collection that contains the fonts in the font list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the current <strong>{{IDWriteFontCollection}}</strong> object.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets a font given its zero-based index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Represents a font typography setting.</p> + + + + <p> Adds an OpenType font feature. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the OpenType name identifier and the execution parameter for the font feature being added.</p> </dd> + + + + + <p> Gets the number of OpenType font features for the current font. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>The number of font features for the current text format.</p> + + + + <p> Gets the font feature at the specified index. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the font feature to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains the font feature which is at the specified index.</p> </dd> + + + + + <p> Wraps an application-defined inline graphic, allowing {{DWrite}} to query metrics as if the graphic were a glyph inline with the text.</p> + + + + <p> The application implemented rendering callback (<strong>{{IDWriteTextRenderer::DrawInlineObject}}</strong>) can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the measurement of the inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the visible extents (in {{DIPs}}) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes.</p><p>The overhangs should be returned relative to the reported size of the object (see <strong>{{DWRITE_INLINE_OBJECT_METRICS}}</strong>), and should not be baseline adjusted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Layout uses this to determine the line-breaking behavior of the inline object among the text. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it.</p> </dd> + + + + + <p> The <strong>{{IDWriteTextFormat}}</strong> interface describes the font and paragraph properties used to format text, and it describes locale information. </p> + <p> To get a reference to the <strong>{{IDWriteTextFormat}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextFormat}}</strong> method as shown in the following code.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory_-&gt;CreateTextFormat( L"Gabriola", {{NULL}}, {{DWRITE_FONT_WEIGHT_REGULAR}}, {{DWRITE_FONT_STYLE_NORMAL}}, {{DWRITE_FONT_STRETCH_NORMAL}}, 72.0f, L"en-us", &amp;pTextFormat_ ); +} </pre><p>When creating an <strong>{{IDWriteTextFormat}}</strong> object using the <strong>CreateTextFormat</strong> function, the application specifies the font family, font collection, font weight, font size, and locale name for the text format.</p><p>These properties cannot be changed after the <strong>{{IDWriteTextFormat}}</strong> object is created. To change these properties, a new <strong>{{IDWriteTextFormat}}</strong> object must be created with the desired properties.</p><p> The <strong>{{IDWriteTextFormat}}</strong> interface is used to draw text with a single format</p><p> To draw text with multiple formats, or to use a custom text renderer, use the <strong>{{IDWriteTextLayout}}</strong> interface. <strong>{{IDWriteTextLayout}}</strong> enables the application to change the format for ranges of text within the string. The <strong>{{IDWriteFactory::CreateTextLayout}}</strong> takes an <strong>{{IDWriteTextFormat}}</strong> object as a parameter and initially applies the format information to the entire string. </p><p> This object may not be thread-safe, and it may carry the state of text format change. </p> + + + + <p>Sets the alignment of text in a paragraph, relative to the leading and trailing edge of a layout box for a <strong>{{IDWriteTextFormat}}</strong> interface.</p> + <p> The text can be aligned to the leading or trailing edge of the layout box, or it can be centered. The following illustration shows text with the alignment set to <strong>{{DWRITE_TEXT_ALIGNMENT_LEADING}}</strong>, <strong>{{DWRITE_TEXT_ALIGNMENT_CENTER}}</strong>, and <strong>{{DWRITE_TEXT_ALIGNMENT_TRAILING}}</strong>, respectively. </p><p></p><strong>Note</strong>??The alignment is dependent on reading direction, the above is for left-to-right reading direction. For right-to-left reading direction it would be the opposite.?<p>See <strong>{{DWRITE_TEXT_ALIGNMENT}}</strong> for more information. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The textAlignment argument is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> Sets the alignment option of a paragraph relative to the layout box's top and bottom edge. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph alignment option being set for a paragraph; see <strong>{{DWRITE_PARAGRAPH_ALIGNMENT}}</strong> for more information.</p> </dd> + + + + + <p> Sets the word wrapping option. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The word wrapping option being set for a paragraph; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> </dd> + + + + + <p> Sets the paragraph reading direction. </p> + <p> The reading direction and flow direction must always be set 90 degrees orthogonal to each other, or else you will get the error {{DWRITE_E_FLOWDIRECTIONCONFLICTS}} when you use layout functions like Draw or GetMetrics. So if you set a vertical reading direction (for example, to {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}), then you must also use SetFlowDirection to set the flow direction appropriately (for example, to {{DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The text reading direction (for example, <strong>{{DWRITE_READING_DIRECTION_RIGHT_TO_LEFT}}</strong> for languages, such as Arabic, that read from right to left) for a paragraph. </p> </dd> + + + + + <p> Sets the paragraph flow direction. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph flow direction; see <strong>{{DWRITE_FLOW_DIRECTION}}</strong> for more information.</p> </dd> + + + + + <p> Sets a fixed distance between two adjacent tab stops. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The fixed distance between two adjacent tab stops.</p> </dd> + + + + + <p> Sets trimming options for text overflowing the layout width. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Text trimming options.</p> </dd> + + + <dd> <p>Application-defined omission sign. This parameter may be <strong>{{NULL}}</strong>. See <strong>{{IDWriteInlineObject}}</strong> for more information.</p> </dd> + + + + + <p> Sets the line spacing. </p> + <p> For the default method, spacing depends solely on the content. For uniform spacing, the specified line height overrides the content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies how line height is being determined; see <strong>{{DWRITE_LINE_SPACING_METHOD}}</strong> for more information.</p> </dd> + + + <dd> <p>The line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>The distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the alignment option of text relative to the layout box's leading and trailing edge. </p> + <p>Returns the text alignment option of the current paragraph.</p> + + + + <p> Gets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box. </p> + <p>A value that indicates the current paragraph alignment option.</p> + + + + <p> Gets the word wrapping option. </p> + <p>Returns the word wrapping option; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> + + + + <p> Gets the current reading direction for text in a paragraph. </p> + <p>A value that indicates the current reading direction for text in a paragraph.</p> + + + + <p> Gets the direction that text lines flow. </p> + <p>The direction that text lines flow within their parent container. For example, <strong>{{DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM}}</strong> indicates that text lines are placed from top to bottom.</p> + + + + <p> Gets the incremental tab stop position. </p> + <p>The incremental tab stop value.</p> + + + + <p> Gets the trimming options for text that overflows the layout box. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, it contains a reference to a <strong>{{DWRITE_TRIMMING}}</strong> structure that holds the text trimming options for the overflowing text.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a trimming omission sign. This parameter may be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates how line height is determined.</p> </dd> + + + <dd> <p>When this method returns, contains the line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>When this method returns, contains the distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the current font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font collection being used for the current text.</p> </dd> + + + + + <p> Gets the length of the font family name. </p> + <p>The size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the font family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a character array, which is null-terminated, that receives the current font family name. The buffer allocated for this array should be at least the size, in elements, of <em>nameSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>fontFamilyName</em> character array, in character count, including the terminated <strong>{{NULL}}</strong> character. To find the size of <em>fontFamilyName</em>, use <strong>GetFontFamilyNameLength</strong>.</p> </dd> + + + + + <p> Gets the font weight of the text. </p> + <p>A value that indicates the type of weight (such as normal, bold, or black). </p> + + + + <p> Gets the font style of the text.</p> + <p>A value which indicates the type of font style (such as slope or incline).</p> + + + + <p> Gets the font stretch of the text. </p> + <p>A value which indicates the type of font stretch (such as normal or condensed).</p> + + + + <p> Gets the font size in {{DIP}} unites. </p> + <p>The current font size in {{DIP}} units.</p> + + + + <p> Gets the length of the locale name. </p> + <p>The size of the character array in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a character array that receives the current locale name.</p> </dd> + + + <dd> <p>The size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character. Use <strong>GetLocaleNameLength</strong> to get the size of the locale name character array.</p> </dd> + + + + + <p>Holds the appropriate digits and numeric punctuation for a specified locale.</p> + + + + <p>Implemented by the text analyzer's client to provide text to the analyzer. It allows the separation between the logical view of text as a continuous stream of characters identifiable by unique text positions, and the actual memory layout of potentially discrete blocks of text in the client's backing store. </p> + <p>If any of these callbacks returns an error, then the analysis functions will stop prematurely and return a callback error. Note that rather than return {{E_NOTIMPL}}, an application should stub the method and return a constant/null and {{S_OK}}.</p> + + + + <p>Gets a block of text starting at the specified text position. </p> + <p>Returning <strong>{{NULL}}</strong> indicates the end of text, which is the position after the last character. This function is called iteratively for each consecutive block, tying together several fragmented blocks in the backing store into a virtual contiguous string.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The first position of the piece to obtain. All positions are in <strong>{{UTF16}}</strong> code units, not whole characters, which matters when supplementary characters are used.</p> </dd> + + + <dd> <p>When this method returns, contains an address of the block of text as an array of characters to be retrieved from the text analysis.</p> </dd> + + + <dd> <p>When this method returns, contains the number of <strong>{{UTF16}}</strong> units of the retrieved chunk. The returned length is not the length of the block, but the length remaining in the block, from the specified position until its end. For example, querying for a position that is 75 positions into a 100-position block would return 25.</p> </dd> + + + + + <p>Gets a block of text immediately preceding the specified position.</p> + <p>{{NULL}} indicates no chunk available at the specified position, either because <em>textPosition</em> equals 0, <em>textPosition</em> is greater than the entire text content length, or the queried position is not mapped into the application's backing store.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position immediately after the last position of the block of text to obtain.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the block of text, as an array of characters from the specified range. The text range will be from <em>textPosition</em> to the front of the block.</p> </dd> + + + <dd> <p>Number of {{UTF16}} units of the retrieved block. The length returned is from the specified position to the front of the block.</p> </dd> + + + + + <p>Gets the paragraph reading direction.</p> + <p>The reading direction of the current paragraph.</p> + + + + <p>Gets the locale name on the range affected by the text analysis.</p> + <p>The <em>localeName</em> reference must remain valid until the next call or until the analysis returns.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position to examine.</p> </dd> + + + <dd> <p>Contains the length of the text being affected by the text analysis up to the next differing locale.</p> </dd> + + + <dd> <p>Contains an address of a reference to an array of characters which receives the locale name from the text affected by the text analysis. The array of characters is null-terminated.</p> </dd> + + + + + <p>Gets the number substitution from the text range affected by the text analysis.</p> + <p>Any implementation should return the number substitution with an incremented reference count, and the analysis will release when finished with it (either before the next call or before it returns). However, the sink callback may hold onto it after that.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>Contains the length of the text, in characters, remaining in the text range up to the next differing number substitution.</p> </dd> + + + <dd> <p>Contains an address of a reference to an object, which was created with <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong>, that holds the appropriate digits and numeric punctuation for a given locale.</p> </dd> + + + + + <p>This interface is implemented by the text analyzer's client to receive the output of a given text analysis. </p> + <p>The text analyzer disregards any current state of the analysis sink, therefore, a Set method call on a range overwrites the previously set analysis result of the same range.</p> + + + + <p>Reports script analysis for the specified text range.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains a zero-based index representation of a writing system script and a value indicating whether additional shaping of text is required.</p> </dd> + + + + + <p>Sets line-break opportunities for each character, starting from the specified position.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting text position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains breaking conditions set for each character from the starting position to the end of the specified range.</p> </dd> + + + + + <p>Sets a bidirectional level on the range, which is called once per run change (either explicit or resolved implicit).</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>The explicit level from the paragraph reading direction and any embedded control codes {{RLE}}/{{RLO}}/{{LRE}}/{{LRO}}/{{PDF}}, which is determined before any additional rules.</p> </dd> + + + <dd> <p>The final implicit level considering the explicit level and characters' natural directionality, after all Bidi rules have been applied.</p> </dd> + + + + + <p>Sets the number substitution on the text range affected by the text analysis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>An object that holds the appropriate digits and numeric punctuation for a given locale. Use <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong> to create this object.</p> </dd> + + + + + <p> Analyzes various text properties for complex script processing such as bidirectional (bidi) support for languages like Arabic, determination of line break opportunities, glyph placement, and number substitution.</p> + + + + <p> Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script {{ID}} to the sink callback <strong>SetScript</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback <strong>SetBidiLevel</strong>. </p> + <p> While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback <strong>SetNumberSubstitution</strong>. </p> + <p> Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback <strong>SetLineBreakpoints</strong>. </p> + <p> Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Parses the input text string and maps it to the set of glyphs and associated glyph data according to the font and the writing system's rendering rules. </p> + <p> Note that the mapping from characters to glyphs is, in general, many-to-many. The recommended estimate for the per-glyph output buffers is (3 * <em>textLength</em> / 2 + 16). This is not guaranteed to be sufficient. The value of the <em>actualGlyphCount</em> parameter is only valid if the call succeeds. In the event that <em>maxGlyphCount</em> is not big enough, <strong>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</strong> will be returned. The application should allocate a larger buffer and try again. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters to convert to glyphs.</p> </dd> + + + <dd> <p>The length of <em>textString</em>.</p> </dd> + + + <dd> <p>The font face that is the source of the output glyphs.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> if the text is intended to be drawn vertically.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> for right-to-left text.</p> </dd> + + + <dd> <p>A reference to a Script analysis result from an <strong>AnalyzeScript</strong> call.</p> </dd> + + + <dd> <p>The locale to use when selecting glyphs. For example the same character may map to different glyphs for ja-jp versus zh-chs. If this is <strong>{{NULL}}</strong>, then the default mapping based on the script is used.</p> </dd> + + + <dd> <p>A reference to an optional number substitution which selects the appropriate glyphs for digits and related numeric characters, depending on the results obtained from <strong>AnalyzeNumberSubstitution</strong>. Passing <strong>{{NULL}}</strong> indicates that no substitution is needed and that the digits should receive nominal glyphs.</p> </dd> + + + <dd> <p>An array of references to the sets of typographic features to use in each feature range.</p> </dd> + + + <dd> <p>The length of each feature range, in characters. The sum of all lengths should be equal to <em>textLength</em>.</p> </dd> + + + <dd> <p>The number of feature ranges.</p> </dd> + + + <dd> <p>The maximum number of glyphs that can be returned.</p> </dd> + + + <dd> <p>When this method returns, contains the mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contains shaping properties for each character.</p> </dd> + + + <dd> <p>The output glyph indices.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contain shaping properties for each output glyph.</p> </dd> + + + <dd> <p>When this method returns, contains the actual number of glyphs returned if the call succeeds.</p> </dd> + + + + + <p> Places glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Place glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines the pixel snapping properties such as pixels per {{DIP}}(device-independent pixel) and the current transform matrix of a text renderer.</p> + + + + <p> Determines whether pixel snapping is disabled. The recommended default is <strong>{{FALSE}}</strong>, unless doing animation that requires subpixel vertical placement. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if pixel snapping is disabled; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a transform that maps abstract coordinates to {{DIPs}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a structure which has transform information for pixel snapping.</p> </dd> + + + + + <p> Gets the number of physical pixels per {{DIP}}. </p> + <p> Because a {{DIP}} (device-independent pixel) is 1/96 inch, the <em>pixelsPerDip</em> value is the number of logical pixels per inch divided by 96.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of physical pixels per {{DIP}}.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p> Sets the layout maximum width.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum width of the layout box.</p> </dd> + + + + + <p> Sets the layout maximum height. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum height of the layout box. </p> </dd> + + + + + <p> Sets the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to set.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets null-terminated font family name for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font family name that applies to the entire text string within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the font weight for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. </p> + <p>The font weight can be set to one of the predefined font weight values provided in the <strong>{{DWRITE_FONT_WEIGHT}}</strong> enumeration or an integer from 1 to 999. Values outside this range will cause the method to fail with an <strong>{{E_INVALIDARG}}</strong> return value.</p><p>The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font style for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure.</p> + <p>The font style can be set to Normal, Italic or Oblique. The following illustration shows three styles for the Palatino font. For more information, see <strong>{{DWRITE_FONT_STYLE}}</strong>.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font stretch for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value which indicates the type of font stretch for text within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Sets the font size in {{DIP}} units for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font size in {{DIP}} units to be set for text in the range specified by <em>textRange</em>. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p>Sets strikethrough for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean flag that indicates whether strikethrough takes place in the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the application-defined drawing effect. </p> + <p>An <strong>{{ID2D1Brush}}</strong>, such as a color or gradient brush, can be set as a drawing effect if you are using the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> to draw text and that brush will be used to draw the specified range of text.</p><p> This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering.</p> </dd> + + + <dd> <p>The text range to which this change applies.</p> </dd> + + + + + <p> Sets the inline object. </p> + <p>The application may call this function to specify the set of properties describing an application-defined inline object for specific range.</p><p> This inline object applies to the specified range and will be passed back to the application by way of the <strong>DrawInlineObject</strong> callback when the range is drawn. Any text in that range will be suppressed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined inline object. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets font typography features for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to font typography settings. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the locale name for text within a specified text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated locale name string.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Gets the layout maximum width. </p> + <p>Returns the layout maximum width.</p> + + + + <p> Gets the layout maximum height. </p> + <p>The layout maximum height.</p> + + + + <p> Gets the font collection associated with the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Contains an address of a reference to the current font collection.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the length of the font family name at the current position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the character array containing the font family name, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family.</p> </dd> + + + + + <p> Copies the font family name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to examine.</p> </dd> + + + <dd> <p>When this method returns, contains an array of characters that receives the current font family name. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The size of the character array in character count including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family name.</p> </dd> + + + + + <p> Gets the font weight of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font weight being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font weight.</p> </dd> + + + + + <p> Gets the font style (also known as slope) of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font style (also known as slope or incline) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font style.</p> </dd> + + + + + <p> Gets the font stretch of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font stretch (also known as width) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font stretch.</p> </dd> + + + + + <p> Gets the font em height of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font in ems of the text at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font size.</p> </dd> + + + + + <p> Gets the underline presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether underline is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the strikethrough presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether strikethrough is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to strikethrough.</p> </dd> + + + + + <p> Gets the application-defined drawing effect at the specified text position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text whose drawing effect is to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect.</p> </dd> + + + + + <p> Gets the inline object at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The specified text position.</p> </dd> + + + <dd> <p>Contains the application-defined inline object.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the inline object.</p> </dd> + + + + + <p> Gets the typography setting of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current typography setting.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the typography.</p> </dd> + + + + + <p> Gets the length of the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Gets the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the character array receiving the current locale name.</p> </dd> + + + <dd> <p>Size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Draws text using the specified client drawing context.</p> + <p>To draw text with this method, a <em>textLayout</em> object needs to be created by the application using <strong>{{IDWriteFactory::CreateTextLayout}}</strong>. </p><p>After the <em>textLayout</em> object is obtained, the application calls the <strong>{{IDWriteTextLayout::Draw}}</strong> method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the <em>textRenderer</em> argument; there, the corresponding <strong>DrawGlyphRun</strong> {{API}} is called. </p><p>If you set a vertical text reading direction on {{IDWriteTextLayout}} via SetReadingDirection with {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}} (or bottom to top), then you must pass an interface that implements {{IDWriteTextRenderer1}}. Otherwise you get the error {{DWRITE_E_TEXTRENDERERINCOMPATIBLE}} because the original {{IDWriteTextRenderer}} interface only supported horizontal text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined drawing context. </p> </dd> + + + <dd> <p>Pointer to the set of callback functions used to draw parts of a text string.</p> </dd> + + + <dd> <p>The x-coordinate of the layout's left side.</p> </dd> + + + <dd> <p>The y-coordinate of the layout's top side.</p> </dd> + + + + + <p> Retrieves the information about each individual text line of the text string. </p> + <p> If <em>maxLineCount</em> is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>*actualLineCount</em> is set to the number of lines needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to an array of structures containing various calculated length values of individual text lines.</p> </dd> + + + <dd> <p>The maximum size of the <em>lineMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>lineMetrics</em> array that is needed.</p> </dd> + + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Returns the overhangs (in {{DIPs}}) of the layout and all objects contained in it, including text glyphs and inline objects.</p> + <p>Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Overshoots of visible extents (in {{DIPs}}) outside the layout.</p> </dd> + + + + + <p> Retrieves logical properties and measurements of each glyph cluster. </p> + <p> If <em>maxClusterCount</em> is not large enough, then {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>actualClusterCount</em> is set to the number of clusters needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains metrics, such as line-break or total advance width, for a glyph cluster.</p> </dd> + + + <dd> <p>The maximum size of the <em>clusterMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>clusterMetrics</em> array that is needed.</p> </dd> + + + + + <p>Determines the minimum possible width the layout can be set to without emergency breaking between the characters of whole words occurring.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Minimum width.</p> </dd> + + + + + <p> The application calls this function passing in a specific pixel location relative to the top-left location of the layout box and obtains the information about the correspondent hit-test metrics of the text string where the hit-test has occurred. When the specified pixel location is outside the text string, the function sets the output value <em>*isInside</em> to <strong>{{FALSE}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The pixel location X to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>The pixel location Y to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is at the leading or the trailing side of the character. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this value is set according to the output <em>hitTestMetrics-&gt;textPosition</em> value to represent the edge closest to the hit-test location.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is inside the text string. When <strong>{{FALSE}}</strong>, the position nearest the text's edge is returned.</p> </dd> + + + <dd> <p>The output geometry fully enclosing the hit-test location. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this structure represents the geometry enclosing the edge closest to the hit-test location.</p> </dd> + + + + + <p> The application calls this function to get the pixel location relative to the top-left of the layout box given the text position and the logical side of the position. This function is normally used as part of caret positioning of text where the caret is drawn at the location corresponding to the current text editing position. It may also be used as a way to programmatically obtain the geometry of a particular text position in {{UI}} automation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position used to get the pixel location.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the pixel location is of the leading or the trailing side of the specified text position.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location X, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location Y, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output geometry fully enclosing the specified text position.</p> </dd> + + + + + <p> The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. One of the main usages is to implement highlight selection of the text string. The function returns {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. The application is responsible for allocating a new buffer of greater size and calling the function again. A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function <strong>{{IDWriteTextLayout}}</strong>::GetLineLengths), and the maxBidiReorderingDepth value from the <strong>{{DWRITE_TEXT_METRICS}}</strong> structure of the output argument *textMetrics (from the function <strong>{{IDWriteFactory}}</strong>::<strong>CreateTextLayout</strong>). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.</p> + <p>You create an <strong>{{IDWriteBitmapRenderTarget}}</strong> by using the <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> method, as shown in the following code.</p><pre>if ({{SUCCEEDED}}(hr)) +{ hr = g_pGdiInterop-&gt;CreateBitmapRenderTarget(hdc, r.right, r.bottom, &amp;g_pBitmapRenderTarget); +} +</pre><p> <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> takes a handle to a {{DC}} and the desired width and height. In the above example, the width and height given are the size of the window rect.</p> + + + + <p> Draws a run of glyphs to a bitmap target at the specified position.</p> + <p>You can use the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the <strong>{{IDWriteTextRenderer::DrawGlyphRun}}</strong> callback method as shown in the following code.</p><pre>{{STDMETHODIMP}} GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, {{FLOAT}} baselineOriginX, {{FLOAT}} baselineOriginY, {{DWRITE_MEASURING_MODE}} measuringMode, __in {{DWRITE_GLYPH_RUN}} const* glyphRun, __in {{DWRITE_GLYPH_RUN_DESCRIPTION}} const* glyphRunDescription, {{IUnknown}}* clientDrawingEffect ) +{ {{HRESULT}} hr = {{S_OK}}; // Pass on the drawing call to the render target to do the real work. {{RECT}} dirtyRect = {0}; hr = pRenderTarget_-&gt;DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, {{RGB}}(0,200,255), &amp;dirtyRect ); return hr; +} +</pre><p>The <em>baselineOriginX</em>, <em>baslineOriginY</em>, <em>measuringMethod</em>, and <em>glyphRun</em> parameters are provided (as arguments) when the callback method is invoked. The <em>renderingParams</em>, <em>textColor</em> and <em>blackBoxRect</em> are not.</p><p>Default rendering params can be retrieved by using the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The horizontal position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The vertical position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p> The structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p> The object that controls rendering behavior.</p> </dd> + + + <dd> <p> The foreground color of the text.</p> </dd> + + + <dd> <p> The optional rectangle that receives the bounding box (in pixels not {{DIPs}}) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.</p> </dd> + + + + + <p> Gets a handle to the memory device context. </p> + <p> An application can use the device context to draw using {{GDI}} functions. An application can obtain the bitmap handle ({{HBITMAP}}) by calling <strong>GetCurrentObject</strong>. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call <strong>GetObject</strong> to fill in a <strong>{{DIBSECTION}}</strong> structure. The bitmap is always a 32-bit top-down {{DIB}}. </p><p>Note that this method takes no parameters and returns an {{HDC}} variable, not an {{HRESULT}}.</p><pre>memoryHdc = g_pBitmapRenderTarget-&gt;GetMemoryDC(); +</pre><p>The {{HDC}} returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.</p> + <p>Returns a device context handle to the memory device context.</p> + + + + <p> Gets the number of bitmap pixels per {{DIP}}. </p> + <p>A {{DIP}} (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.</p> + <p>The number of bitmap pixels per {{DIP}}.</p> + + + + <p> Sets the number of bitmap pixels per {{DIP}} (device-independent pixel). A {{DIP}} is 1/96 inch, so this value is the number if pixels per inch divided by 96. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the number of pixels per {{DIP}}.</p> </dd> + + + + + <p> Gets the transform that maps abstract coordinates to {{DIPs}}. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a transform matrix.</p> </dd> + + + + + <p> Sets the transform that maps abstract coordinate to {{DIPs}} (device-independent pixel). This does not affect the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the new transform. This parameter can be <strong>{{NULL}}</strong>, in which case the identity transform is implied.</p> </dd> + + + + + <p> Gets the dimensions of the target bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the width and height of the bitmap in pixels.</p> </dd> + + + + + <p> Resizes the bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new bitmap width, in pixels.</p> </dd> + + + <dd> <p>The new bitmap height, in pixels.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p> Creates a font object that matches the properties specified by the <strong>{{LOGFONT}}</strong> structure. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created <strong>{{IDWriteFont}}</strong> object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Initializes a <strong>{{LOGFONT}}</strong> structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a <strong>{{LOGFONT}}</strong> by using <strong>ConvertFontToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a <strong>{{LOGFONT}}</strong> as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFont}}</strong> object to be converted into a {{GDI}}-compatible <strong>{{LOGFONT}}</strong> structure.</p> </dd> + + + <dd> <p>When this method returns, contains a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the specified font object is part of the system font collection; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Initializes a {{LOGFONT}} structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a {{LOGFONT}} by using <strong>ConvertFontFaceToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a {{LOGFONT}} as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFontFace}}</strong> object to be converted into a {{GDI}}-compatible {{LOGFONT}} structure.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + + + <p> Creates an <strong>{{IDWriteFontFace}}</strong> object that corresponds to the currently selected <strong>{{HFONT}}</strong> of the specified <strong>{{HDC}}</strong>. </p> + <p>This function is intended for scenarios in which an application wants to use {{GDI}} and Uniscribe 1.x for text layout and shaping, but DirectWrite for final rendering. This function assumes the client is performing text output using glyph indexes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to a device context into which a font has been selected. It is assumed that the client has already performed font mapping and that the font selected into the device context is the actual font to be used for rendering glyphs.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure. The font face returned is guaranteed to reference the same physical typeface that would be used for drawing glyphs (but not necessarily characters) using ExtTextOut.</p> </dd> + + + + + <p> Creates an object that encapsulates a bitmap and memory {{DC}} (device context) which can be used for rendering glyphs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the optional device context used to create a compatible memory {{DC}} (device context).</p> </dd> + + + <dd> <p>The width of the bitmap render target.</p> </dd> + + + <dd> <p>The height of the bitmap render target.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created <strong>{{IDWriteBitmapRenderTarget}}</strong> object.</p> </dd> + + + + + <p> Contains low-level information used to render a glyph run.</p> + <p>The alpha texture can be a bi-level alpha texture or a ClearType alpha texture. </p><p>A bi-level alpha texture contains one byte per pixel, therefore the size of the buffer for a bi-level texture will be the area of the texture bounds, in bytes. Each byte in a bi-level alpha texture created by <strong>CreateAlphaTexture</strong> is either set to {{DWRITE_ALPHA_MAX}} (that is, 255) or zero.</p><p>A ClearType alpha texture contains three bytes per pixel, therefore the size of the buffer for a ClearType alpha texture is three times the area of the texture bounds, in bytes.</p> + + + + <p> Gets the bounding rectangle of the physical pixels affected by the glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of texture requested. If a bi-level texture is requested, the bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only antialiased glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains the bounding rectangle of the physical pixels affected by the glyph run, or an empty rectangle if there are no glyphs of the specified texture type.</p> </dd> + + + + + <p> Creates an alpha texture of the specified type for glyphs within a specified bounding rectangle. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the type of texture requested. This can be <strong>{{DWRITE_TEXTURE_BILEVEL_1x1}}</strong> or <strong>{{DWRITE_TEXTURE_CLEARTYPE_3x1}}</strong>. If a bi-level texture is requested, the texture contains only bi-level glyphs. Otherwise, the texture contains only antialiased glyphs.</p> </dd> + + + <dd> <p>The bounding rectangle of the texture, which can be different than the bounding rectangle returned by <strong>GetAlphaTextureBounds</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the array of alpha values from the texture. The buffer allocated for this array must be at least the size of <em>bufferSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>alphaValues</em> array, in bytes. The minimum size depends on the dimensions of the rectangle and the type of texture requested.</p> </dd> + + + + + <p> Gets alpha blending properties required for ClearType blending. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An object that specifies the ClearType level and enhanced contrast, gamma, pixel geometry, and rendering mode. In most cases, the values returned by the output parameters of this method are based on the properties of this object, unless a {{GDI}}-compatible rendering mode was specified.</p> </dd> + + + <dd> <p>When this method returns, contains the gamma value to use for gamma correction.</p> </dd> + + + <dd> <p>When this method returns, contains the enhanced contrast value to be used for blending.</p> </dd> + + + <dd> <p>When this method returns, contains the ClearType level used in the alpha blending.</p> </dd> + + + + + <p>Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.</p> + <p>This function creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects. DirectWrite factory contains internal state data such as font loader registration and cached font data. In most cases it is recommended you use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state data, and thereby reduce memory usage. However, there are cases when it is desirable to reduce the impact of a component, such as a plug-in from an untrusted source, on the rest of the process, by sandboxing and isolating it from the rest of the process components. In such cases, it is recommended you use an isolated factory for the sandboxed component.</p><p>The following example shows how to create a shared DirectWrite factory.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the factory object will be shared or isolated.</p> </dd> + + + <dd> <p>A {{GUID}} value that identifies the DirectWrite factory interface, such as __uuidof(<strong>{{IDWriteFactory}}</strong>).</p> </dd> + + + <dd> <p>An address of a reference to the newly created DirectWrite factory object.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FAMILY}}</strong> enumeration contains values that specify the kind of typeface classification.</p> + + + <dd> <p>Any typeface classification.</p> </dd> + + + <dd> <p>No fit typeface classification.</p> </dd> + + + <dd> <p>Text display typeface classification.</p> </dd> + + + <dd> <p>Script (or hand written) typeface classification.</p> </dd> + + + <dd> <p>Decorative typeface classification.</p> </dd> + + + <dd> <p>Symbol typeface classification.</p> </dd> + + + <dd> <p>Pictorial (or symbol) typeface classification.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SERIF_STYLE}}</strong> enumeration contains values that specify the appearance of the serif text.</p> + + + <dd> <p>Any appearance of the serif text.</p> </dd> + + + <dd> <p>No fit appearance of the serif text.</p> </dd> + + + <dd> <p>Cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square appearance of the serif text.</p> </dd> + + + <dd> <p>Thin appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + <dd> <p>Exaggerated appearance of the serif text.</p> </dd> + + + <dd> <p>Triangle appearance of the serif text.</p> </dd> + + + <dd> <p>Normal sans appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse sans appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Flared appearance of the serif text.</p> </dd> + + + <dd> <p>Rounded appearance of the serif text.</p> </dd> + + + <dd> <p>Script appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> enumeration contains values that specify the weight of characters.</p> + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> values roughly correspond to the <strong>{{DWRITE_FONT_WEIGHT}}</strong> values by using (panose_weight - 2) * 100 = font_weight.</p> + + + <dd> <p>Any weight.</p> </dd> + + + <dd> <p>No fit weight.</p> </dd> + + + <dd> <p>Very light weight.</p> </dd> + + + <dd> <p>Light weight.</p> </dd> + + + <dd> <p>Thin weight.</p> </dd> + + + <dd> <p>Book weight.</p> </dd> + + + <dd> <p>Medium weight.</p> </dd> + + + <dd> <p>Demi weight.</p> </dd> + + + <dd> <p>Bold weight.</p> </dd> + + + <dd> <p>Heavy weight.</p> </dd> + + + <dd> <p>Black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_PROPORTION}}</strong> enumeration contains values that specify the proportion of the glyph shape by considering additional detail to standard characters.</p> + + + <dd> <p>Any proportion for the text.</p> </dd> + + + <dd> <p>No fit proportion for the text.</p> </dd> + + + <dd> <p>Old style proportion for the text.</p> </dd> + + + <dd> <p>Modern proportion for the text.</p> </dd> + + + <dd> <p>Extra width proportion for the text.</p> </dd> + + + <dd> <p>Expanded proportion for the text.</p> </dd> + + + <dd> <p>Condensed proportion for the text.</p> </dd> + + + <dd> <p>Very expanded proportion for the text.</p> </dd> + + + <dd> <p>Very condensed proportion for the text.</p> </dd> + + + <dd> <p>Monospaced proportion for the text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CONTRAST}}</strong> enumeration contains values that specify the ratio between thickest and thinnest point of the stroke for a letter such as uppercase 'O'.</p> + + + <dd> <p>Any contrast.</p> </dd> + + + <dd> <p>No fit contrast.</p> </dd> + + + <dd> <p>No contrast.</p> </dd> + + + <dd> <p>Very low contrast.</p> </dd> + + + <dd> <p>Low contrast.</p> </dd> + + + <dd> <p>Medium low contrast.</p> </dd> + + + <dd> <p>Medium contrast.</p> </dd> + + + <dd> <p>Medium high contrast.</p> </dd> + + + <dd> <p>High contrast.</p> </dd> + + + <dd> <p>Very high contrast.</p> </dd> + + + <dd> <p>Horizontal low contrast.</p> </dd> + + + <dd> <p>Horizontal medium contrast.</p> </dd> + + + <dd> <p>Horizontal high contrast.</p> </dd> + + + <dd> <p>Broken contrast.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_STROKE_VARIATION}}</strong> enumeration contains values that specify the relationship between thin and thick stems of text characters.</p> + + + <dd> <p>Any stroke variation for text characters.</p> </dd> + + + <dd> <p>No fit stroke variation for text characters.</p> </dd> + + + <dd> <p>No stroke variation for text characters.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual diagonal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual transitional.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant horizontal.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ARM_STYLE}}</strong> enumeration contains values that specify the style of termination of stems and rounded letterforms for text.</p> + + + <dd> <p>Any arm style.</p> </dd> + + + <dd> <p>No fit arm style.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight wedge.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is straight single serif.</p> </dd> + + + <dd> <p>The arm style is straight double serif.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LETTERFORM}}</strong> enumeration contains values that specify the roundness of letterform for text.</p> + + + <dd> <p>Any letterform.</p> </dd> + + + <dd> <p>No fit letterform.</p> </dd> + + + <dd> <p>Normal contact letterform.</p> </dd> + + + <dd> <p>Normal weighted letterform.</p> </dd> + + + <dd> <p>Normal boxed letterform.</p> </dd> + + + <dd> <p>Normal flattened letterform.</p> </dd> + + + <dd> <p>Normal rounded letterform.</p> </dd> + + + <dd> <p>Normal off-center letterform.</p> </dd> + + + <dd> <p>Normal square letterform.</p> </dd> + + + <dd> <p>Oblique contact letterform.</p> </dd> + + + <dd> <p>Oblique weighted letterform.</p> </dd> + + + <dd> <p>Oblique boxed letterform.</p> </dd> + + + <dd> <p>Oblique flattened letterform.</p> </dd> + + + <dd> <p>Oblique rounded letterform.</p> </dd> + + + <dd> <p>Oblique off-center letterform.</p> </dd> + + + <dd> <p>Oblique square letterform.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_MIDLINE}}</strong> enumeration contains values that specify info about the placement of midline across uppercase characters and the treatment of diagonal stem apexes.</p> + + + <dd> <p>Any midline.</p> </dd> + + + <dd> <p>No fit midline.</p> </dd> + + + <dd> <p>Standard trimmed midline.</p> </dd> + + + <dd> <p>Standard pointed midline.</p> </dd> + + + <dd> <p>Standard serifed midline.</p> </dd> + + + <dd> <p>High trimmed midline.</p> </dd> + + + <dd> <p>High pointed midline.</p> </dd> + + + <dd> <p>High serifed midline.</p> </dd> + + + <dd> <p>Constant trimmed midline.</p> </dd> + + + <dd> <p>Constant pointed midline.</p> </dd> + + + <dd> <p>Constant serifed midline.</p> </dd> + + + <dd> <p>Low trimmed midline.</p> </dd> + + + <dd> <p>Low pointed midline.</p> </dd> + + + <dd> <p>Low serifed midline.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XHEIGHT}}</strong> enumeration contains values that specify info about the relative size of lowercase letters and the treatment of diacritic marks (xheight).</p> + + + <dd> <p>Any xheight.</p> </dd> + + + <dd> <p>No fit xheight.</p> </dd> + + + <dd> <p>Constant small xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Constant large xheight.</p> </dd> + + + <dd> <p>Ducking small xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + <dd> <p>Ducking large xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_TOOL_KIND}}</strong> enumeration contains values that specify the kind of tool that is used to create character forms.</p> + + + <dd> <p>Any kind of tool.</p> </dd> + + + <dd> <p>No fit for the kind of tool.</p> </dd> + + + <dd> <p>Flat {{NIB}} tool.</p> </dd> + + + <dd> <p>Pressure point tool.</p> </dd> + + + <dd> <p>Engraved tool.</p> </dd> + + + <dd> <p>Ball tool.</p> </dd> + + + <dd> <p>Brush tool.</p> </dd> + + + <dd> <p>Rough tool.</p> </dd> + + + <dd> <p>Felt-pen-brush-tip tool.</p> </dd> + + + <dd> <p>Wild-brush tool.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SPACING}}</strong> enumeration contains values that specify character spacing (monospace versus proportional).</p> + + + <dd> <p>Any spacing.</p> </dd> + + + <dd> <p>No fit for spacing.</p> </dd> + + + <dd> <p>Spacing is proportional.</p> </dd> + + + <dd> <p>Spacing is monospace.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT_RATIO}}</strong> enumeration contains values that specify info about the ratio between width and height of the character face.</p> + + + <dd> <p>Any aspect ratio.</p> </dd> + + + <dd> <p>No fit for aspect ratio.</p> </dd> + + + <dd> <p>Very condensed aspect ratio.</p> </dd> + + + <dd> <p>Condensed aspect ratio.</p> </dd> + + + <dd> <p>Normal aspect ratio.</p> </dd> + + + <dd> <p>Expanded aspect ratio.</p> </dd> + + + <dd> <p>Very expanded aspect ratio.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_TOPOLOGY}}</strong> enumeration contains values that specify the topology of letterforms.</p> + + + <dd> <p>Any script topology.</p> </dd> + + + <dd> <p>No fit for script topology.</p> </dd> + + + <dd> <p>Script topology is roman disconnected.</p> </dd> + + + <dd> <p>Script topology is roman trailing.</p> </dd> + + + <dd> <p>Script topology is roman connected.</p> </dd> + + + <dd> <p>Script topology is cursive disconnected.</p> </dd> + + + <dd> <p>Script topology is cursive trailing.</p> </dd> + + + <dd> <p>Script topology is cursive connected.</p> </dd> + + + <dd> <p>Script topology is black-letter disconnected.</p> </dd> + + + <dd> <p>Script topology is black-letter trailing.</p> </dd> + + + <dd> <p>Script topology is black-letter connected.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_FORM}}</strong> enumeration contains values that specify the general look of the character face, with consideration of its slope and tails.</p> + + + <dd> <p>Any script form.</p> </dd> + + + <dd> <p>No fit for script form.</p> </dd> + + + <dd> <p>Script form is upright with no wrapping.</p> </dd> + + + <dd> <p>Script form is upright with some wrapping.</p> </dd> + + + <dd> <p>Script form is upright with more wrapping.</p> </dd> + + + <dd> <p>Script form is upright with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with no wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with some wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with more wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with no wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with some wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with more wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with extreme wrapping.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FINIALS}}</strong> enumeration contains values that specify how character ends and miniscule ascenders are treated.</p> + + + <dd> <p>Any finials.</p> </dd> + + + <dd> <p>No fit for finials.</p> </dd> + + + <dd> <p>No loops.</p> </dd> + + + <dd> <p>No closed loops.</p> </dd> + + + <dd> <p>No open loops.</p> </dd> + + + <dd> <p>Sharp with no loops.</p> </dd> + + + <dd> <p>Sharp with closed loops.</p> </dd> + + + <dd> <p>Sharp with open loops.</p> </dd> + + + <dd> <p>Tapered with no loops.</p> </dd> + + + <dd> <p>Tapered with closed loops.</p> </dd> + + + <dd> <p>Tapered with open loops.</p> </dd> + + + <dd> <p>Round with no loops.</p> </dd> + + + <dd> <p>Round with closed loops.</p> </dd> + + + <dd> <p>Round with open loops.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XASCENT}}</strong> enumeration contains values that specify the relative size of the lowercase letters.</p> + + + <dd> <p>Any xascent.</p> </dd> + + + <dd> <p>No fit for xascent.</p> </dd> + + + <dd> <p>Very low xascent.</p> </dd> + + + <dd> <p>Low xascent.</p> </dd> + + + <dd> <p>Medium xascent.</p> </dd> + + + <dd> <p>High xascent.</p> </dd> + + + <dd> <p>Very high xascent.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_CLASS}}</strong> enumeration contains values that specify the general look of the character face.</p> + + + <dd> <p>Any class of decorative typeface.</p> </dd> + + + <dd> <p>No fit for decorative typeface.</p> </dd> + + + <dd> <p>Derivative decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard topology decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard elements decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard aspect decorative typeface.</p> </dd> + + + <dd> <p>Initials decorative typeface.</p> </dd> + + + <dd> <p>Cartoon decorative typeface.</p> </dd> + + + <dd> <p>Picture stems decorative typeface.</p> </dd> + + + <dd> <p>Ornamented decorative typeface.</p> </dd> + + + <dd> <p>Text and background decorative typeface.</p> </dd> + + + <dd> <p>Collage decorative typeface.</p> </dd> + + + <dd> <p>Montage decorative typeface.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT}}</strong> enumeration contains values that specify the ratio between the width and height of the character face.</p> + + + <dd> <p>Any aspect.</p> </dd> + + + <dd> <p>No fit for aspect.</p> </dd> + + + <dd> <p>Super condensed aspect.</p> </dd> + + + <dd> <p>Very condensed aspect.</p> </dd> + + + <dd> <p>Condensed aspect.</p> </dd> + + + <dd> <p>Normal aspect.</p> </dd> + + + <dd> <p>Extended aspect.</p> </dd> + + + <dd> <p>Very extended aspect.</p> </dd> + + + <dd> <p>Super extended aspect.</p> </dd> + + + <dd> <p>Monospace aspect.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FILL}}</strong> enumeration contains values that specify the type of fill and line treatment.</p> + + + <dd> <p>Any fill.</p> </dd> + + + <dd> <p>No fit for fill.</p> </dd> + + + <dd> <p>The fill is the standard solid fill.</p> </dd> + + + <dd> <p>No fill.</p> </dd> + + + <dd> <p>The fill is patterned fill.</p> </dd> + + + <dd> <p>The fill is complex fill.</p> </dd> + + + <dd> <p>The fill is shaped fill.</p> </dd> + + + <dd> <p>The fill is drawn distressed.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LINING}}</strong> enumeration contains values that specify the handling of the outline for the decorative typeface.</p> + + + <dd> <p>Any lining.</p> </dd> + + + <dd> <p>No fit for lining.</p> </dd> + + + <dd> <p>No lining.</p> </dd> + + + <dd> <p>The lining is inline.</p> </dd> + + + <dd> <p>The lining is outline.</p> </dd> + + + <dd> <p>The lining is engraved.</p> </dd> + + + <dd> <p>The lining is shadowed.</p> </dd> + + + <dd> <p>The lining is relief.</p> </dd> + + + <dd> <p>The lining is backdrop.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_TOPOLOGY}}</strong> enumeration contains values that specify the overall shape characteristics of the font.</p> + + + <dd> <p>Any decorative topology.</p> </dd> + + + <dd> <p>No fit for decorative topology.</p> </dd> + + + <dd> <p>Standard decorative topology.</p> </dd> + + + <dd> <p>Square decorative topology.</p> </dd> + + + <dd> <p>Multiple segment decorative topology.</p> </dd> + + + <dd> <p>Art deco decorative topology.</p> </dd> + + + <dd> <p>Uneven weighting decorative topology.</p> </dd> + + + <dd> <p>Diverse arms decorative topology.</p> </dd> + + + <dd> <p>Diverse forms decorative topology.</p> </dd> + + + <dd> <p>Lombardic forms decorative topology.</p> </dd> + + + <dd> <p>Upper case in lower case decorative topology.</p> </dd> + + + <dd> <p>The decorative topology is implied.</p> </dd> + + + <dd> <p>Horseshoe E and A decorative topology.</p> </dd> + + + <dd> <p>Cursive decorative topology.</p> </dd> + + + <dd> <p>Blackletter decorative topology.</p> </dd> + + + <dd> <p>Swash variance decorative topology.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CHARACTER_RANGES}}</strong> enumeration contains values that specify the type of characters available in the font.</p> + + + <dd> <p>Any range.</p> </dd> + + + <dd> <p>No fit for range.</p> </dd> + + + <dd> <p>The range includes extended collection.</p> </dd> + + + <dd> <p>The range includes literals.</p> </dd> + + + <dd> <p>The range doesn't include lower case.</p> </dd> + + + <dd> <p>The range includes small capitals.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_KIND}}</strong> enumeration contains values that specify the kind of symbol set.</p> + + + <dd> <p>Any kind of symbol set.</p> </dd> + + + <dd> <p>No fit for the kind of symbol set.</p> </dd> + + + <dd> <p>The kind of symbol set is montages.</p> </dd> + + + <dd> <p>The kind of symbol set is pictures.</p> </dd> + + + <dd> <p>The kind of symbol set is shapes.</p> </dd> + + + <dd> <p>The kind of symbol set is scientific symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is music symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is expert symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is patterns.</p> </dd> + + + <dd> <p>The kind of symbol set is boarders.</p> </dd> + + + <dd> <p>The kind of symbol set is icons.</p> </dd> + + + <dd> <p>The kind of symbol set is logos.</p> </dd> + + + <dd> <p>The kind of symbol set is industry specific.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_ASPECT_RATIO}}</strong> enumeration contains values that specify the aspect ratio of symbolic characters.</p> + + + <dd> <p>Any aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No fit for aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No width aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Exceptionally wide symbolic characters.</p> </dd> + + + <dd> <p>Super wide symbolic characters.</p> </dd> + + + <dd> <p>Very wide symbolic characters.</p> </dd> + + + <dd> <p>Wide symbolic characters.</p> </dd> + + + <dd> <p>Normal aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Narrow symbolic characters.</p> </dd> + + + <dd> <p>Very narrow symbolic characters.</p> </dd> + + + + + <p>The <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong> enumeration contains values that specify the policy used by the <strong>{{IDWriteFontFace1::GetRecommendedRenderingMode}}</strong> method to determine whether to render glyphs in outline mode.</p> + <p>Glyphs are rendered in outline mode by default at large sizes for performance reasons, but how large (that is, the outline threshold) depends on the quality of outline rendering. If the graphics system renders anti-aliased outlines, a relatively low threshold is used. But if the graphics system renders aliased outlines, a much higher threshold is used.</p> + + + + <p>The <strong>{{DWRITE_BASELINE}}</strong> enumeration contains values that specify the baseline for text alignment.</p> + + + <dd> <p>The Roman baseline for horizontal; the Central baseline for vertical.</p> </dd> + + + <dd> <p>The baseline that is used by alphabetic scripts such as Latin, Greek, and Cyrillic.</p> </dd> + + + <dd> <p>Central baseline, which is generally used for vertical text.</p> </dd> + + + <dd> <p>Mathematical baseline, which math characters are centered on.</p> </dd> + + + <dd> <p>Hanging baseline, which is used in scripts like Devanagari.</p> </dd> + + + <dd> <p>Ideographic bottom baseline for {{CJK}}, left in vertical.</p> </dd> + + + <dd> <p>Ideographic top baseline for {{CJK}}, right in vertical.</p> </dd> + + + <dd> <p>The bottom-most extent in horizontal, left-most in vertical.</p> </dd> + + + <dd> <p>The top-most extent in horizontal, right-most in vertical.</p> </dd> + + + + + <p>The <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong> enumeration contains values that specify the desired kind of glyph orientation for the text.</p> + <p>The client specifies a <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value to the analyzer as the desired orientation.</p><strong>Note</strong>??This is the client preference, and the constraints of the script determine the final presentation.? + + + <dd> <p>The default glyph orientation. In vertical layout, naturally horizontal scripts (Latin, Thai, Arabic, Devanagari) rotate 90 degrees clockwise, while ideographic scripts (Chinese, Japanese, Korean) remain upright, 0 degrees.</p> </dd> + + + <dd> <p>Stacked glyph orientation. Ideographic scripts and scripts that permit stacking (Latin, Hebrew) are stacked in vertical reading layout. Connected scripts (Arabic, Syriac, 'Phags-pa, Ogham), which would otherwise look broken if glyphs were kept at 0 degrees, remain connected and rotate.</p> </dd> + + + + + <p>The <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> enumeration contains values that specify how the glyph is oriented to the x-axis.</p> + <p>The text analyzer outputs <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> values. The value that it outputs depends on the desired orientation, bidi level, and character properties.</p> + + + <dd> <p>Glyph orientation is upright.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>Glyph orientation is upside-down.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>The <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong> enumeration contains values that specify the type of antialiasing to use for text when the rendering mode calls for antialiasing.</p> + + + <dd> <p>ClearType antialiasing computes coverage independently for the red, green, and blue color elements of each pixel. This allows for more detail than conventional antialiasing. However, because there is no one alpha value for each pixel, ClearType is not suitable for rendering text onto a transparent intermediate bitmap.</p> </dd> + + + <dd> <p>Grayscale antialiasing computes one coverage value for each pixel. Because the alpha value of each pixel is well-defined, text can be rendered onto a transparent bitmap, which can then be composited with other content.</p> <strong>Note</strong>??Grayscale rendering with <strong>{{IDWriteBitmapRenderTarget1}}</strong> uses premultiplied alpha. ? </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS1}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + <p><strong>{{DWRITE_FONT_METRICS1}}</strong> inherits from <strong>{{DWRITE_FONT_METRICS}}</strong>:</p><code> struct {{DWRITE_FONT_METRICS1}} : public {{DWRITE_FONT_METRICS}} +{ +... +};</code> + + + <dd> <p>Left edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Top edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Right edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Bottom edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Horizontal position of the subscript relative to the baseline origin. This is typically negative (to the left) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the subscript relative to the baseline. This is typically negative.</p> </dd> + + + <dd> <p>Horizontal size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Vertical size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Horizontal position of the superscript relative to the baseline origin. This is typically positive (to the right) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the superscript relative to the baseline. This is typically positive.</p> </dd> + + + <dd> <p>Horizontal size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>Vertical size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>A Boolean value that indicates that the ascent, descent, and lineGap are based on newer 'typographic' values in the font, rather than legacy values.</p> </dd> + + + + + <p>The <strong>{{DWRITE_CARET_METRICS}}</strong> structure specifies the metrics for caret placement in a font.</p> + + + <dd> <p>Vertical rise of the caret in font design units. Rise / Run yields the caret angle. Rise = 1 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal run of the caret in font design units. Rise / Run yields the caret angle. Run = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal offset of the caret, in font design units, along the baseline for good appearance. Offset = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + + + + + + + + + + + + + + + <p>The <strong>{{DWRITE_PANOSE}}</strong> union describes typeface classification values that you use with <strong>{{IDWriteFont1::GetPanose}}</strong> to select and match the font.</p> + <strong>Note</strong>??The <strong>familyKind</strong> member (index 0) is the only stable entry in the 10-byte array because all the entries that follow can change dynamically depending on the context of the first member.? + + + + <p>The <strong>{{DWRITE_UNICODE_RANGE}}</strong> structure specifies the range of Unicode code points.</p> + + + <dd> <p>The first code point in the Unicode range.</p> </dd> + + + <dd> <p>The last code point in the Unicode range.</p> </dd> + + + + + <p>The <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure specifies script properties for caret navigation and justification.</p> + + + <dd> <p>The standardized four character code for the given script. </p> <strong>Note</strong>??These only include the general Unicode scripts, not any additional {{ISO}} 15924 scripts for bibliographic distinction. ? </dd> + + + <dd> <p>The standardized numeric code, ranging 0-999.</p> </dd> + + + <dd> <p>Number of characters to estimate look-ahead for complex scripts. Latin and all Kana are generally 1. Indic scripts are up to 15, and most others are 8.</p> <strong>Note</strong>??Combining marks and variation selectors can produce clusters that are longer than these look-aheads, so this estimate is considered typical language use. Diacritics must be tested explicitly separately. ? </dd> + + + <dd> <p>Appropriate character to elongate the given script for justification. For example:</p> <ul> <li>Arabic - U+0640 Tatweel</li> <li>Ogham - U+1680 Ogham Space Mark</li> </ul> </dd> + + + <dd> <p>Restrict the caret to whole clusters, like Thai and Devanagari. Scripts such as Arabic by default allow navigation between clusters. Others like Thai always navigate across whole clusters.</p> </dd> + + + <dd> <p>The language uses dividers between words, such as spaces between Latin or the Ethiopic wordspace. Examples include Latin, Greek, Devanagari, and Ethiopic. Chinese, Korean, and Thai are excluded.</p> </dd> + + + <dd> <p>The characters are discrete units from each other. This includes both block scripts and clustered scripts. Examples include Latin, Greek, Cyrillic, Hebrew, Chinese, and Thai.</p> </dd> + + + <dd> <p>The language is a block script, expanding between characters. Examples include Chinese, Japanese, Korean, and Bopomofo.</p> </dd> + + + <dd> <p>The language is justified within glyph clusters, not just between glyph clusters, such as the character sequence of Thai Lu and Sara Am (U+{{E026}}, U+{{E033}}), which form a single cluster but still expand between them. Examples include Thai, Lao, and Khmer.</p> </dd> + + + <dd> <p>The script's clusters are connected to each other (such as the baseline-linked Devanagari), and no separation is added between characters.</p> <strong>Note</strong>??Cursively linked scripts like Arabic are also connected (but not all connected scripts are cursive). ? <p>Examples include Devanagari, Arabic, Syriac, Bengala, Gurmukhi, and Ogham. Latin, Chinese, and Thaana are excluded.</p> </dd> + + + <dd> <p>The script is naturally cursive (Arabic and Syriac), meaning it uses other justification methods like kashida extension rather than inter-character spacing.</p> <strong>Note</strong>?? Although other scripts like Latin and Japanese might actually support handwritten cursive forms, they are not considered cursive scripts. ? <p>Examples include Arabic, Syriac, and Mongolian. Thaana, Devanagari, Latin, and Chinese are excluded.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure specifies justification info per glyph.</p> + + + <dd> <p>Minimum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, typically being zero except for kashida.</p> </dd> + + + <dd> <p>Maximum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, being zero for fixed-size characters and connected scripts, and non-zero for discrete scripts, and non-zero for cursive scripts at expansion points.</p> </dd> + + + <dd> <p>Maximum amount of compression to apply to the side of the glyph. This might vary from zero up to the glyph cluster size.</p> </dd> + + + <dd> <p>Priority of this expansion point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Priority of this compression point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Allow this expansion point to use up any remaining slack space even after all expansion priorities have been used up.</p> </dd> + + + <dd> <p>Allow this compression point to use up any remaining space even after all compression priorities have been used up.</p> </dd> + + + <dd> <p>Apply expansion and compression to the leading edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Apply expansion and compression to the trailing edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The interface you implement to provide needed information to the text analyzer, like the text and associated text properties.</p><p> </p><strong>Note</strong>?? If any of these callbacks return an error, the analysis functions will stop prematurely and return a callback error.? + + + + <p>Used by the text analyzer to obtain the desired glyph orientation and resolved bidi level.</p> + <p>The text analyzer calls back to this to get the desired glyph orientation and resolved bidi level, which it uses along with the script properties of the text to determine the actual orientation of each character, which it reports back to the client via the sink SetGlyphOrientation method.</p> + <p>Returning an error will abort the analysis.</p> + + + <dd> <p>The text position.</p> </dd> + + + <dd> <p>A reference to the text length.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value that specifies the desired kind of glyph orientation for the text.</p> </dd> + + + <dd> <p>A reference to the resolved bidi level.</p> </dd> + + + + + <p> The interface you implement to receive the output of the text analyzers.</p> + + + + <p>The text analyzer calls back to this to report the actual orientation of each character for shaping and drawing.</p> + <p>Returns a successful code or an error code to abort analysis.</p> + + + <dd> <p>The starting position to report from.</p> </dd> + + + <dd> <p>Number of {{UTF}}-16 units of the reported range.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle of the glyphs within the text range (pass to <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to get the world relative transform).</p> </dd> + + + <dd> <p>The adjusted bidi level to be used by the client layout for reordering runs. This will differ from the resolved bidi level retrieved from the source for cases such as Arabic stacked top-to-bottom, where the glyphs are still shaped as {{RTL}}, but the runs are {{TTB}} along with any {{CJK}} or Latin.</p> </dd> + + + <dd> <p>Whether the glyphs are rotated on their side, which is the default case for {{CJK}} and the case stacked Latin</p> </dd> + + + <dd> <p>Whether the script should be shaped as right-to-left. For Arabic stacked top-to-bottom, even when the adjusted bidi level is coerced to an even level, this will still be true.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the amount of contrast enhancement to use for grayscale antialiasing.</p> + <p>The contrast enhancement value. Valid values are greater than or equal to zero.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Gets a font collection representing the set of {{EUDC}} (end-user defined characters) fonts.</p> + <p>Note that if no {{EUDC}} is set on the system, the returned collection will be empty, meaning it will return success but GetFontFamilyCount will be zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to fill.</p> </dd> + + + <dd> <p>Whether to check for updates.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace1}}</strong> interface.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that holds metrics for the current font face element. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRICS1}}</strong> structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Gets caret metrics for the font in design units.</p> + <p>Caret metrics are used by text editors for drawing the correct caret placement and slant.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_CARET_METRICS}}</strong> structure that is filled.</p> </dd> + + + + + <p>Retrieves a list of character ranges supported by a font.</p> + <p>A list of character ranges supported by the font is useful for scenarios like character picking, glyph display, and efficient font selection lookup. This is similar to {{GDI}}'s <strong>GetFontUnicodeRanges</strong>, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.</p> + <p>Returns {{TRUE}} if the font is monospaced, otherwise it returns {{FALSE}}.</p> + + + + <p>Retrieves the advances in design units for a sequences of glyphs.</p> + <p> This is equivalent to calling GetGlyphMetrics and using only the advance width and height.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve advances for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances for.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advance height rather than horizontal advance widths.</p> </dd> + + + + + <p>Returns the pixel-aligned advances for a sequences of glyphs.</p> + <p>This is equivalent to calling <strong>GetGdiCompatibleGlyphMetrics</strong> and using only the advance width and height. </p><p>Like <strong>GetGdiCompatibleGlyphMetrics</strong>, these are in design units, meaning they must be scaled down by {{DWRITE_FONT_METRICS::designUnitsPerEm}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96 this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.</p> </dd> + + + <dd> <p>When {{FALSE}}, the metrics are the same as {{GDI}} aliased text ({{DWRITE_MEASURING_MODE_GDI_CLASSIC}}). When {{TRUE}}, the metrics are the same as those measured by {{GDI}} using a font using {{CLEARTYPE_NATURAL_QUALITY}} ({{DWRITE_MEASURING_MODE_GDI_NATURAL}}).</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advances rather than horizontal advances.</p> </dd> + + + <dd> <p>Total glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + + + <p>Retrieves the kerning pair adjustments from the font's kern table.</p> + <p><strong>GetKerningPairAdjustments</strong> isn't a direct replacement for {{GDI}}'s character based <strong>GetKerningPairs</strong>, but it serves the same role, without the client needing to cache them locally. <strong>GetKerningPairAdjustments</strong> also uses glyph id's directly rather than {{UCS}}-2 characters (how the kern table actually stores them), which avoids glyph collapse and ambiguity, such as the dash and hyphen, or space and non-breaking space. </p><p>Newer fonts may have only {{GPOS}} kerning instead of the legacy pair-table kerning. Such fonts, like Gabriola, will only return 0's for adjustments. <strong>GetKerningPairAdjustments</strong> doesn't virtualize and flatten these {{GPOS}} entries into kerning pairs.</p><p>You can realize a performance benefit by calling <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> to determine whether you need to call <strong>GetKerningPairAdjustments</strong>. If you previously called <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> and it returned {{FALSE}}, you can avoid calling <strong>GetKerningPairAdjustments</strong> because the font has no kerning pair-table entries. That is, in this situation, a call to <strong>GetKerningPairAdjustments</strong> would be a no-op.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve adjustments for.</p> </dd> + + + <dd> <p>The advances, returned in font design units, for each glyph. The last glyph adjustment is zero.</p> </dd> + + + + + <p>Determines whether the font supports pair-kerning.</p> + <p>If the font doesn't support pair table kerning, you don't need to call <strong>{{IDWriteFontFace1::GetKerningPairAdjustments}}</strong> because it would retrieve all zeroes.</p> + <p>Returns {{TRUE}} if the font supports kerning pairs, otherwise {{FALSE}}.</p> + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>This method should be used to determine the actual rendering mode in cases where the rendering mode of the rendering params object is {{DWRITE_RENDERING_MODE_DEFAULT}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a horizontal position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a vertical position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Specifies the world transform.</p> </dd> + + + <dd> <p>Whether the glyphs in the run are sideways or not.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Retrieves the vertical forms of the nominal glyphs retrieved from GetGlyphIndices.</p> + <p> The retrieval uses the font's 'vert' table. This is used in {{CJK}} vertical layout so the correct characters are shown.</p><p>Call <strong>GetGlyphIndices</strong> to get the nominal glyph indices, followed by calling this to remap the to the substituted forms, when the run is sideways, and the font has vertical glyph variants. See <strong>HasVerticalGlyphVariants</strong> for more info. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve.</p> </dd> + + + <dd> <p>Original glyph indices from cmap.</p> </dd> + + + <dd> <p>The vertical form of glyph indices.</p> </dd> + + + + + <p>Determines whether the font has any vertical glyph variants.</p> + <p>For OpenType fonts, <strong>HasVerticalGlyphVariants</strong> returns {{TRUE}} if the font contains a "vert" feature. </p><p> <strong>{{IDWriteFontFace1::GetVerticalGlyphVariants}}</strong> retrieves the vertical forms of the nominal glyphs that are retrieved from <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong>. </p> + <p>Returns {{TRUE}} if the font contains vertical glyph variants, otherwise {{FALSE}}.</p> + + + + <p>Represents a physical font in a font collection.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that has font metrics for the current font face. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font and is used for font selection and matching.</p> + <p>If the font has no {{PANOSE}} values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_PANOSE}}</strong> structure to fill in.</p> </dd> + + + + + <p>Retrieves the list of character ranges supported by a font.</p> + <p>The list of character ranges supported by a font, is useful for scenarios like character picking, glyph display, and efficient font selection lookup. GetUnicodeRanges is similar to {{GDI}}'s GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).</p> + <p>Returns true if the font is monospaced, else it returns false.</p> + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Applies spacing between characters, properly adjusting glyph clusters and diacritics.</p> + <p>The input and output advances/offsets are allowed to alias the same array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The length of the clustermap and original text.</p> </dd> + + + <dd> <p>The number of glyphs.</p> </dd> + + + <dd> <p>Mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>The advance width of each glyph.</p> </dd> + + + <dd> <p>The offset of the origin of each glyph.</p> </dd> + + + <dd> <p>Properties of each glyph, from GetGlyphs.</p> </dd> + + + <dd> <p>The new advance width of each glyph.</p> </dd> + + + <dd> <p>The new offset of the origin of each glyph.</p> </dd> + + + + + <p>Retrieves the given baseline from the font.</p> + <p>If the baseline does not exist in the font, it is not considered an error, but the function will return exists = false. You may then use heuristics to calculate the missing base, or, if the flag simulationAllowed is true, the function will compute a reasonable approximation for you.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_BASELINE}}</strong>-typed value that specifies the baseline of interest.</p> </dd> + + + <dd> <p>Whether the baseline is vertical or horizontal.</p> </dd> + + + <dd> <p>Simulate the baseline if it is missing in the font.</p> </dd> + + + <dd> <p>Script analysis result from AnalyzeScript.</p> <strong>Note</strong>??You can pass an empty script analysis structure, like this <code>{{DWRITE_SCRIPT_ANALYSIS}} scriptAnalysis = {};</code>, and this method will return the default baseline. ? </dd> + + + <dd> <p>The language of the run.</p> </dd> + + + <dd> <p>The baseline coordinate value in design units.</p> </dd> + + + <dd> <p>Whether the returned baseline exists in the font.</p> </dd> + + + + + <p>Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink callback <strong>SetGlyphOrientation</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p> + <p>The translation component of the transform returned is zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle that was reported into <strong>{{IDWriteTextAnalysisSink1::SetGlyphOrientation}}</strong>.</p> </dd> + + + <dd> <p>Whether the run's glyphs are sideways or not.</p> </dd> + + + <dd> <p>Returned transform.</p> </dd> + + + + + <p>Retrieves the properties for a given script.</p> + <p>Returns properties for the given script. If the script is invalid, it returns generic properties for the unknown script and {{E_INVALIDARG}}.</p> + + + <dd> <p>The script for a run of text returned from <strong>{{IDWriteTextAnalyzer::AnalyzeScript}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure that describes info for the script.</p> </dd> + + + + + <p>Determines the complexity of text, and whether you need to call <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> for full script shaping. </p> + <p>Text is not simple if the characters are part of a script that has complex shaping requirements, require bidi analysis, combine with other characters, reside in the supplementary planes, or have glyphs that participate in standard OpenType features. The length returned will not split combining marks from their base characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves justification opportunity information for each of the glyphs given the text and shaping glyph properties.</p> + <p>This function is called per-run, after shaping is done via the <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> method. </p><strong>Note</strong>??this function only supports natural metrics (<strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face that was used for shaping. This is mainly important for returning correct results of the kashida width. </p> <p>May be {{NULL}}. </p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Characters used to produce the glyphs.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Glyph properties produced from shaping.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that receives info for the allowed justification expansion/compression for each glyph.</p> </dd> + + + + + <p>Justifies an array of glyph advances to fit the line width.</p> + <p>You call <strong>JustifyGlyphAdvances</strong> after you call <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong> to collect all the opportunities, and <strong>JustifyGlyphAdvances</strong> spans across the entire line. The input and output arrays are allowed to alias each other, permitting in-place update.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The line width.</p> </dd> + + + <dd> <p>The glyph count.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that contains info for the allowed justification expansion/compression for each glyph. Get this info from <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong>. </p> </dd> + + + <dd> <p>An array of glyph advances.</p> </dd> + + + <dd> <p>An array of glyph offsets.</p> </dd> + + + <dd> <p>The returned array of justified glyph advances.</p> </dd> + + + <dd> <p>The returned array of justified glyph offsets.</p> </dd> + + + + + <p>Fills in new glyphs for complex scripts where justification increased the advances of glyphs, such as Arabic with kashida.</p> + <p>You call <strong>GetJustifiedGlyphs</strong> after the line has been justified, and it is per-run. </p><p>You should call <strong>GetJustifiedGlyphs</strong> if <strong>{{IDWriteTextAnalyzer1::GetScriptProperties}}</strong> returns a non-null <strong>{{DWRITE_SCRIPT_PROPERTIES}}.justificationCharacter</strong> for that script.</p><p> Use <strong>GetJustifiedGlyphs</strong> mainly for cursive scripts like Arabic. If <em>maxGlyphCount</em> is not large enough, <strong>GetJustifiedGlyphs</strong> returns the error {{E_NOT_SUFFICIENT_BUFFER}} and fills the variable to which <em>actualGlyphCount</em> points with the needed glyph count.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face used for shaping.</p> <p>May be {{NULL}}.</p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Maximum number of output glyphs allocated by caller.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Original glyphs produced from shaping.</p> </dd> + + + <dd> <p>Original glyph advances produced from shaping.</p> </dd> + + + <dd> <p>Justified glyph advances from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Justified glyph offsets from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Properties of each glyph, from <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong>. </p> </dd> + + + <dd> <p>The new glyph count written to the modified arrays, or the needed glyph count if the size is not large enough.</p> </dd> + + + <dd> <p>Updated clustermap.</p> </dd> + + + <dd> <p>Updated glyphs with new glyphs inserted where needed.</p> </dd> + + + <dd> <p>Updated glyph advances.</p> </dd> + + + <dd> <p>Updated glyph offsets.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p>Enables or disables pair-kerning on a given text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The text range to which the change applies.</p> </dd> + + + + + <p>Gets whether or not pair-kerning is enabled at given position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Sets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Gets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Encapsulates a 32-bit device independent bitmap and device context, which you can use for rendering glyphs.</p> + + + + <p>Gets the current text antialiasing mode of the bitmap render target.</p> + <p>Returns a <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> + + + + <p>Sets the current text antialiasing mode of the bitmap render target.</p> + <p>The antialiasing mode of a newly-created bitmap render target defaults to <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE}}</strong>. An app can change the antialiasing mode by calling <strong>SetTextAntialiasMode</strong>. For example, an app might specify <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE}}</strong> for grayscale antialiasing when it renders text onto a transparent bitmap.</p> + <p>Returns {{S_OK}} if successful, or {{E_INVALIDARG}} if the argument is not valid.</p> + + + <dd> <p>A <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> </dd> + + + + + <p>The optical margin alignment mode.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS}}</strong>, then the alignment uses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + + + <dd> <p>Align to the default origin and side-bearings of the glyph.</p> </dd> + + + <dd> <p>Align to the ink of the glyphs, such that the black box abuts the margins.</p> </dd> + + + + + <p>Specifies whether to enable grid-fitting of glyph outlines (also known as hinting).</p> + + + <dd> <p>Choose grid fitting based on the font's table information.</p> </dd> + + + <dd> <p>Always disable grid fitting, using the ideal glyph outlines.</p> </dd> + + + <dd> <p>Enable grid fitting, adjusting glyph outlines for device pixel display.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs with glyph color information. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>Glyph run to draw for this layer.</p> </dd> + + + <dd> <p>Pointer to the glyph run description for this layer. This may be <strong>{{NULL}}</strong>. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.</p> </dd> + + + <dd> <p>X coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Y coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Color value of the run; if all members are zero, the run should be drawn using the current brush.</p> </dd> + + + <dd> <p>Zero-based index into the font?s color palette; if this is <strong>0xFFFF</strong>, the run should be drawn using the current brush.</p> </dd> + + + + + <p>Allows you to access fallback fonts from the font list.</p><p>The <strong>{{IDWriteFontFallback}}</strong> interface defines a fallback sequence to map character ranges to fonts, which is either created via <strong>{{IDWriteFontFallbackBuilder}}</strong> or retrieved from <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> + + + + <p>Determines an appropriate font to use to render the beginning range of text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text source implementation holds the text and locale.</p> </dd> + + + <dd> <p>Starting position to analyze.</p> </dd> + + + <dd> <p>Length of the text to analyze.</p> </dd> + + + <dd> <p>Default font collection to use.</p> </dd> + + + <dd> <p>Family name of the base font. If you pass null, no matching will be done against the family.</p> </dd> + + + <dd> <p>The desired weight.</p> </dd> + + + <dd> <p>The desired style.</p> </dd> + + + <dd> <p>The desired stretch.</p> </dd> + + + <dd> <p>Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.</p> </dd> + + + <dd> <p>The font that should be used to render the first <em>mappedLength</em> characters of the text. If it returns {{NULL}}, that means that no font can render the text, and <em>mappedLength</em> is the number of characters to skip (rendered with a missing glyph). +</p> </dd> + + + <dd> <p>Scale factor to multiply the em size of the returned font by.</p> </dd> + + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines. </p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. This interface has all the same methods as <strong>{{IDWriteTextFormat}}</strong> and adds the ability for you to apply an explicit orientation.</p> + + + + <p>Sets the orientation of a text format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The orientation to apply to the text format.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>The preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Sets the wrapping mode of the last line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If set to {{FALSE}}, the last line is not wrapped. If set to {{TRUE}}, the last line is wrapped.</p> <p>The last line is wrapped by default.</p> </dd> + + + + + <p>Gets the wrapping mode of the last line.</p> + <p>Returns {{FALSE}} if the last line is not wrapped; {{TRUE}} if the last line is wrapped.</p> + + + + <p>Sets the optical margin alignment for the text format.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_USING_SIDE_BEARINGS}}</strong>, then the alignment Suses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The optical alignment to set.</p> </dd> + + + + + <p>Gets the optical margin alignment for the text format.</p> + <p>The optical alignment.</p> + + + + <p> Applies the custom font fallback onto the layout. If none is set, it uses the default system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font fallback to apply to the layout.</p> </dd> + + + + + <p>Gets the current fallback. If none was ever set since creating the layout, it will be nullptr.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the the current font fallback object.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Set the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Preferred glyph orientation.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Set whether or not the last word on the last line is wrapped. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Line wrapping option.</p> </dd> + + + + + <p>Get whether or not the last word on the last line is wrapped.</p> + + + + <p>Set how the glyphs align to the edges the margin. Default behavior is to align glyphs using their default glyphs metrics, which include side bearings. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Optical alignment option.</p> </dd> + + + + + <p>Get how the glyphs align to the edges the margin. </p> + + + + <p>Apply a custom font fallback onto layout. If none is specified, the layout uses the system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Custom font fallback created from <strong>{{IDWriteFontFallbackBuilder::CreateFontFallback}}</strong> or <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> </dd> + + + + + <p>Get the current font fallback object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current font fallback object.</p> </dd> + + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p><p>Extends <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to pass valid values for the baseline origin rather than zeroes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a complete list of OpenType features available for a script or font. If a feature is partially supported, then this method indicates that it is supported. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to get features from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The maximum number of tags to return.</p> </dd> + + + <dd> <p>The actual number of tags returned.</p> </dd> + + + <dd> <p>An array of OpenType font feature tags.</p> </dd> + + + + + <p>Checks if a typographic feature is available for a glyph or a set of glyphs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read glyph information from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The font feature tag to check.</p> </dd> + + + <dd> <p>The number of glyphs to check.</p> </dd> + + + <dd> <p>An array of glyph indices to check.</p> </dd> + + + <dd> <p>An array of integers that indicate whether or not the font feature applies to each glyph specified.</p> </dd> + + + + + <p>Allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + + + + <p>Appends a single mapping to the list. Call this once for each additional mapping.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Unicode ranges that apply to this mapping.</p> </dd> + + + <dd> <p>Number of Unicode ranges.</p> </dd> + + + <dd> <p>List of target family name strings.</p> </dd> + + + <dd> <p>Number of target family names.</p> </dd> + + + <dd> <p>Optional explicit font collection for this mapping.</p> </dd> + + + <dd> <p>Locale of the context.</p> </dd> + + + <dd> <p>Base family name to match against, if applicable.</p> </dd> + + + <dd> <p>Scale factor to multiply the result target font by.</p> </dd> + + + + + <p>Add all the mappings from an existing font fallback object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An existing font fallback object.</p> </dd> + + + + + <p>Creates the finalized fallback object from the mappings added.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the created fallback list.</p> </dd> + + + + + <p>Represents a physical font in a font collection.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Enables determining if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has color information ({{COLR}} and {{CPAL}} tables); otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace2}}</strong> interface.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Allows you to determine if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if a color rendering path is potentially necessary.</p> + + + + <p>Gets the number of color palettes defined by the font. </p> + <p>The return value is zero if the font has no color information. Color fonts are required to define at least one palette, with palette index zero reserved as the default palette.</p> + + + + <p>Get the number of entries in each color palette.</p> + <p>The number of entries in each color palette. All color palettes in a font have the same number of palette entries. The return value is zero if the font has no color information. +</p> + + + + <p>Gets color values from the font's color palette.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{E_INVALIDARG}}</dt> </dl> </td><td> <p>The sum of <em>firstEntryIndex</em> and <em>entryCount</em> is greater than the actual number of palette entries that's returned by the <strong>GetPaletteEntryCount</strong> method. +</p> </td></tr> <tr><td> <dl> <dt>{{DWRITE_E_NOCOLOR}}</dt> </dl> </td><td> <p>The font doesn't have a palette with the specified palette index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the color palette. If the font does not have a palette with the specified index, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong>.</p> </dd> + + + <dd> <p>Zero-based index of the first palette entry to read.</p> </dd> + + + <dd> <p>Number of palette entries to read.</p> </dd> + + + <dd> <p>Array that receives the color values.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>This interface allows the application to enumerate through the color glyph runs. The enumerator enumerates the layers in a back to front order for appropriate layering.</p> + + + + <p>Move to the next glyph run in the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if there is a next glyph run.</p> </dd> + + + + + <p>Returns the current glyph run of the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the current glyph run.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the grid fitting mode.</p> + <p>Returns a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the grid fitting mode.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Creates a font fallback object from the system font fallback list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback object.</p> </dd> + + + + + <p>Creates a font fallback builder object.</p><p>A font fall back builder allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback builder object.</p> </dd> + + + + + <p>This method is called on a glyph run to translate it in to multiple color glyph runs.</p> + <p> If the code calls this method with a glyph run that contains no color information, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls <strong>DrawGlyphRun</strong> with each of the returned glyph runs and foreground colors. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>The vertical baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>Original glyph run containing monochrome glyph {{IDs}}.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Measuring mode used to compute glyph positions if the run contains color glyphs.</p> </dd> + + + <dd> <p> World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, and identity transform is assumed. </p> </dd> + + + <dd> <p> Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>. </p> </dd> + + + <dd> <p> If the original glyph run contains color glyphs, this parameter receives a reference to an <strong>{{IDWriteColorGlyphRunEnumerator}}</strong> interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> and the output reference is <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p>The geometry of a device pixel.</p> </dd> + + + <dd> <p>Method of rendering glyphs. In most cases, this should be {{DWRITE_RENDERING_MODE_DEFAULT}} to automatically use an appropriate mode.</p> </dd> + + + <dd> <p>How to grid fit glyph outlines. In most cases, this should be {{DWRITE_GRID_FIT_DEFAULT}} to automatically choose an appropriate mode.</p> </dd> + + + <dd> <p>Holds the newly created rendering parameters object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates a glyph run analysis object, which encapsulates information used to render a glyph run.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure specifying the properties of the glyph run.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the emSize and pixelsPerDip.</p> </dd> + + + <dd> <p>Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default and not outline).</p> </dd> + + + <dd> <p>Specifies the method to measure glyphs.</p> </dd> + + + <dd> <p>How to grid-fit glyph outlines. This must be non-default.</p> </dd> + + + <dd> <p>Specifies the antialias mode.</p> </dd> + + + <dd> <p>Horizontal position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Receives a reference to the newly created object.</p> </dd> + + + + + <p>Identifies a string in a font.</p> + + + <dd> <p>Unspecified font property identifier.</p> </dd> + + + <dd> <p>Family name for the weight-width-slope model.</p> </dd> + + + <dd> <p>Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Face name of the font, for example Regular or Bold.</p> </dd> + + + <dd> <p>The full name of the font, for example "Arial Bold", from name id 4 in the name table.</p> </dd> + + + <dd> <p>{{GDI}}-compatible family name. Because {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names, for example "Arial", "Arial Narrow", "Arial Black".</p> </dd> + + + <dd> <p>The postscript name of the font, for example "GillSans-Bold", from name id 6 in the name table.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font was primarily designed to support.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font declares it is able to support.</p> </dd> + + + <dd> <p>Semantic tag to describe the font, for example Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic.</p> </dd> + + + <dd> <p>Weight of the font represented as a decimal string in the range 1-999.</p> </dd> + + + <dd> <p>Stretch of the font represented as a decimal string in the range 1-9.</p> </dd> + + + <dd> <p>Style of the font represented as a decimal string in the range 0-2.</p> </dd> + + + <dd> <p>Total number of properties.</p> </dd> + + + + + <p>Specifies the location of a resource.</p> + + + <dd> <p>The resource is remote, and information about it is unknown, including the file size and date. If you attempt to create a font or file stream, the creation will fail until locality becomes at least partial. </p> </dd> + + + <dd> <p>The resource is partially local, which means you can query the size and date of the file stream. With this type, you also might be able to create a font face and retrieve the particular glyphs for metrics and drawing, but not all the glyphs will be present.</p> </dd> + + + <dd> <p>The resource is completely local, and all font functions can be called without concern of missing data or errors related to network connectivity.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics</p> + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Font property used for filtering font sets and building a font set with explicit properties.</p> + + + <dd> <p>Specifies the requested font property, such as {{DWRITE_FONT_PROPERTY_ID_FAMILY_NAME}}.</p> </dd> + + + <dd> <p>Specifies the value, such as "Segoe {{UI}}".</p> </dd> + + + <dd> <p>Specifies the locale to use, such as "en-{{US}}". Simply leave this empty when used with the font set filtering functions, as they will find a match regardless of language. For passing to AddFontFaceReference, the localeName specifies the language of the property value.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + <dd> <p>White space before the content of the line. This is included in the line height and baseline distances. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space above the content.</p> </dd> + + + <dd> <p>White space after the content of the line. This is included in the height of the line. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space below the content.</p> </dd> + + + + + <p></p> + + + <dd> <p>Method used to determine line spacing.</p> </dd> + + + <dd> <p>Spacing between lines. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>Line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} between lines</li> <li>proportional line spacing: a scaling factor to be applied to the computed line height; for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Distance from top of line to baseline. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>default line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} from the top of the line to the baseline</li> <li>proportional line spacing: a scaling factor applied to the computed baseline; for each line, the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining leading is distributed after the line. It is ignored for the default and uniform line spacing methods. The leading that is available to distribute before or after the line depends on the values of the height and baseline parameters.</p> </dd> + + + <dd> <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics.</p> </dd> + + + + + <p>Represents a color glyph run. The {{IDWriteFactory4::TranslateColorGlyphRun}} method returns an ordered collection of color glyph runs of varying types depending on what the font supports.</p> + + + <dd> <p>Type of glyph image format for this color run. Exactly one type will be set since TranslateColorGlyphRun has already broken down the run into separate parts.</p> </dd> + + + <dd> <p>Measuring mode to use for this glyph run.</p> </dd> + + + + + <p>Data for a single glyph from GetGlyphImageData.</p> + + + <dd> <p>Pointer to the glyph data.</p> </dd> + + + <dd> <p>Size of glyph data in bytes.</p> </dd> + + + <dd> <p>Unique identifier for the glyph data. Clients may use this to cache a parsed/decompressed version and tell whether a repeated call to the same font returns the same data.</p> </dd> + + + <dd> <p>Pixels per em of the returned data. For non-scalable raster data ({{PNG}}/{{TIFF}}/{{JPG}}), this can be larger or smaller than requested from GetGlyphImageData when there isn't an exact match. For scaling intermediate sizes, use: desired pixels per em * font em size / actual pixels per em.</p> </dd> + + + <dd> <p>Size of image when the format is pixel data.</p> </dd> + + + <dd> <p>Left origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Right origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Top origin along the vertical central baseline.</p> </dd> + + + <dd> <p>Bottom origin along vertical central baseline.</p> </dd> + + + + + + + + <p>Represents a reference to a font face. A uniquely identifying reference to a font, from which you can create a font face to query font metrics and use for rendering. A font face reference consists of a font file, font face index, and font face simulation. The file data may or may not be physically present on the local machine yet. </p> + + + + <p>Creates a font face from the reference for use with layout, shaping, or rendering.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + <p>Creates a font face with alternate font simulations, for example, to explicitly simulate a bold font face out of a regular variant.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + + + + <p>Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero. </p> + <p> the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.</p> + + + + <p>Obtains the algorithmic style simulation flags of a font face.</p> + <p>Returns the algorithmic style simulation flags of a font face.</p> + + + + <p>Obtains the font file representing a font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.</p> + <p>the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal <strong>GetFileSize</strong>.</p> + + + + <p>Get the total size of the font face in bytes. </p> + <p>Returns the total size of the font face in bytes. If the locality is remote, this value is unknown and will be zero.</p> + + + + <p>Get the last modified date.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the last modified date. The time may be zero if the font file loader does not expose file time.</p> </dd> + + + + + <p>Get the locality of this font face reference.</p> + <p>You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with {{DWRITE_E_REMOTEFONT}}. This function may change between calls depending on background downloads and whether cached data expires.</p> + <p>Returns the locality of this font face reference.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p> Downloading a character involves downloading every glyph it depends on directly or indirectly, via font tables (cmap, {{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>Downloading a glyph involves downloading any other glyphs it depends on from the font tables ({{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a font in a font collection.</p> + + + + <p>Used with the EnqueuMakeResident function to choose how residency operations proceed when the memory budget is exceeded.</p> + <p></p> + + + <dd> <p>Specifies the default residency policy, which allows residency operations to succeed regardless of the application's current memory budget. EnqueueMakeResident returns {{E_OUTOFMEMORY}} only when there is no memory available.</p> </dd> + + + <dd> <p>Specifies that the EnqueueMakeResident function should return {{E_OUTOFMEMORY}} when the residency operation would exceed the application's current memory budget.</p> </dd> + + + + + <p>Creates a font face object for the font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFace3}}</strong> interface for the newly created font face object.</p> </dd> + + + + + <p>Compares two instances of font references for equality.</p> + <p>Returns whether the two instances of font references are equal. Returns <strong>{{TRUE}}</strong> if the two instances are equal; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{IDWriteFont}}</strong> interface for the other font instance to compare to this font instance.</p> </dd> + + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + + + + <p>Gets the current locality of the font.</p> + <p>For fully local files, the result will always be {{DWRITE_LOCALITY_LOCAL}}. A downloadable file may be any of the states, and this function may change between calls.</p> + <p>Returns the current locality of the font.</p> + + + + <p>Represents an absolute reference to a font face.</p> + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font, used for font selection and matching.</p> + <p>This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{DWRITE_PANOSE}}</strong> structure that receives the {{PANOSE}} values from the font.</p> </dd> + + + + + <p>Gets the weight of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_WEIGHT}}</strong>-typed value that specifies the density of a typeface, in terms of the lightness or heaviness of the strokes. </p> + + + + <p>Gets the stretch (also known as width) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STRETCH}}</strong>-typed value that specifies the degree to which a font has been stretched compared to a font's normal aspect ratio. </p> + + + + <p>Gets the style (also known as slope) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STYLE}}</strong>-typed value that specifies the style of the font. </p> + + + + <p>Creates a localized strings object that contains the family names for the font family, indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Gets a localized strings collection that contains the specified informational strings, indexed by locale name.</p> + <p>If the font doesn't contain the specified string, the return value is {{S_OK}}, but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>A <strong>{{DWRITE_INFORMATIONAL_STRING_ID}}</strong>-typed value that identifies the strings to get.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + <dd> <p>A reference to a variable that receives whether the font contains the specified string {{ID}}. <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Determines whether the font supports the specified character.</p> + <p>Returns whether the font supports the specified character. Returns <strong>{{TRUE}}</strong> if the font has the specified character; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>Determines whether the character is locally downloaded from the font.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has the specified character locally available, <strong>{{FALSE}}</strong> if not or if the font does not support that character. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines whether the glyph is locally downloaded from the font.</p> + <p>Returns {{TRUE}} if the font has the specified glyph locally available.</p> + + + <dd> <p>Glyph identifier.</p> </dd> + + + + + <p>Determines whether the specified characters are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of characters.</p> </dd> + + + <dd> <p>The number of elements in the character array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified characters are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified characters are local, {{FALSE}} if any of the specified characters are remote.</p> </dd> + + + + + <p>Determines whether the specified glyphs are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of glyph indices.</p> </dd> + + + <dd> <p>The number of elements in the glyph index array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified glyphs are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified glyphs are local, {{FALSE}} if any of the specified glyphs are remote.</p> </dd> + + + + + <p></p> + + + + <p>Get the number of total fonts in the set.</p> + <p>Returns the number of total fonts in the set.</p> + + + + <p>Gets a reference to the font at the specified index, which may be local or remote.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font.</p> </dd> + + + <dd> <p>Receives a reference the font face reference object, or nullptr on failure.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases). </p> </dd> + + + <dd> <p>Receives a reference to the newly created strings list.</p> </dd> + + + + + <p>Returns how many times a given property value occurs in the set.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>Receives how many times the property occurs.</p> </dd> + + + + + <p>Returns a subset of fonts filtered by the given properties.</p> + <p>If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>List of properties to filter using.</p> </dd> + + + <dd> <p>The number of properties to filter.</p> </dd> + + + <dd> <p>The subset of fonts that match the properties, or nullptr on failure.</p> </dd> + + + + + <p>Contains methods for building a font set.</p> + + + + <p>Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reference to the font.</p> </dd> + + + <dd> <p>List of properties to associate with the reference.</p> </dd> + + + <dd> <p>The number of properties defined.</p> </dd> + + + + + <p>Appends an existing font set to the one being built, allowing one to aggregate two sets or to essentially extend an existing one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font set to append font face references from.</p> </dd> + + + + + <p>Creates a font set from all the font face references added so far with AddFontFaceReference.</p> + <p>Creating a font set takes less time if the references were added with metadata rather than needing to extract the metadata from the font file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the newly created font set object, or nullptr in case of failure.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + + + + <p>Gets the underlying font set used by this collection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the font set used by the collection.</p> </dd> + + + + + + + + <p>Represents a family of related fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Represents a collection of strings indexed by number. An {{IDWriteStringList}} is identical to {{IDWriteLocalizedStrings}} except for the semantics, where localized strings are indexed on language (each language has one string property) whereas {{IDWriteStringList}} may contain multiple strings of the same language, such as a string list of family names from a font set. You can QueryInterface from an {{IDWriteLocalizedStrings}} to an {{IDWriteStringList}}. </p> + + + + <p>Gets the number of strings in the string list.</p> + <p>Returns the number of strings in the string list.</p> + + + + <p>Gets the length in characters (not including the null terminator) of the locale name with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Receives the length in characters, not including the null terminator.</p> </dd> + + + + + <p>Copies the locale name with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Character array that receives the locale name.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p>Gets the length in characters (not including the null terminator) of the string with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Receives the length in characters of the string, not including the null terminator.</p> </dd> + + + + + <p>Copies the string with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Character array that receives the string.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p></p> + + + + <p>Registers a client-defined listener object that receives download notifications. All registered listener's DownloadCompleted will be called after <strong>BeginDownload</strong> completes. </p> + <p>An <strong>{{IDWriteFontDownloadListener}}</strong> can also be passed to <strong>BeginDownload</strong> using the context parameter, rather than globally registered to the queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Unregisters a notification handler that was previously registered using <strong>AddListener</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling <strong>BeginDownload</strong> clears the queue.</p> + <p>{{TRUE}} if the queue is empty, {{FALSE}} if there are requests pending for <strong>BeginDownload</strong>.</p> + + + + <p>Begins an asynchronous download operation. The download operation executes in the background until it completes or is cancelled by a <strong>CancelDownload</strong> call.</p> + <p>BeginDownload removes all download requests from the queue, transferring them to a background download operation. If any previous downloads are still ongoing when BeginDownload is called again, the new download does not complete until the previous downloads have finished. If the queue is empty and no active downloads are pending, the <strong>DownloadCompleted</strong> callback is called immediately with {{DWRITE_DOWNLOAD_RESULT_NONE}}.</p> + <p> Returns {{S_OK}} if a download was successfully begun, {{S_FALSE}} if the queue was empty, or a standard {{HRESULT}} error code.</p> + + + + <p> Removes all download requests from the queue and cancels any active download operations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.</p> + <p>The current generation number of the download queue.</p> + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the rendering mode.</p> + <p>Returns a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the rendering mode.</p> + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Creates a glyph-run-analysis object that encapsulates info that DirectWrite uses to render a glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p> The amount of contrast enhancement, zero or greater. </p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p> A <strong>{{DWRITE_PIXEL_GEOMETRY}}</strong>-typed value that specifies the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value that specifies the method (for example, ClearType natural quality) for rendering glyphs. In most cases, specify <strong>{{DWRITE_RENDERING_MODE1_DEFAULT}}</strong> to automatically use an appropriate mode. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value that specifies how to grid-fit glyph outlines. In most cases, specify <strong>{{DWRITE_GRID_FIT_DEFAULT}}</strong> to automatically choose an appropriate mode. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to a <strong>{{IDWriteRenderingParams3}}</strong> interface for the newly created rendering parameters object, or <strong>{{NULL}}</strong> in case of failure. </p> </dd> + + + + + <p>Creates a reference to a font given a full path. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>Last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.</p> </dd> + + + <dd> <p>The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Contains newly created font face reference object, or nullptr in case of failure.</p> </dd> + + + + + <p>Retrieves the list of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates an empty font set builder to add font face references and create a custom font set. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set builder object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Create a weight/width/slope tree from a set of fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of fonts to use to build the collection.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Retrieves a weight/width/slope tree of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates whether to include cloud fonts or only locally installed fonts.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + <dd> <p>If this parameter is {{TRUE}}, the function performs an immediate check for changes to the set of system fonts. If this parameter is {{FALSE}}, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify {{TRUE}} if it has just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p>Gets the font download queue associated with this factory object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the font download queue interface.</p> </dd> + + + + + <p>Represents a list of fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p> Application-defined callback interface that receives notifications from the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong> interface). Callbacks will occur on the downloading thread, and objects must be prepared to handle calls on their methods from other threads at any time.</p> + + + + <p>The DownloadCompleted method is called back on an arbitrary thread when a download operation ends. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the download queue interface on which the BeginDownload method was called.</p> </dd> + + + <dd> <p>Optional context object that was passed to BeginDownload. AddRef is called on the context object by BeginDownload and Release is called after the DownloadCompleted method returns.</p> </dd> + + + <dd> <p>Result of the download operation.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p>Creates a font object that matches the properties specified by the {{LOGFONT}} structure.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font collection to search. If {{NULL}}, the local system font collection is used.</p> </dd> + + + <dd> <p>Receives a newly created font object if successful, or {{NULL}} in case of error.</p> </dd> + + + + + <p>Reads the font signature from the given font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face to read font signature from.</p> </dd> + + + <dd> <p>Font signature from the {{OS}}/2 table, ulUnicodeRange and ulCodePageRange.</p> </dd> + + + + + <p>Gets a list of matching fonts based on the specified {{LOGFONT}} values. Only fonts of that family name will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font set to search.</p> </dd> + + + <dd> <p>&gt;Receives the filtered font set if successful.</p> </dd> + + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. </p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure describing how the space between lines is managed for the paragraph.</p> </dd> + + + + + <p></p> + + + + <p>Invalidates the layout, forcing layout to remeasure before calling the metrics or drawing functions. This is useful if the locality of a font changes, and layout should be redrawn, or if the size of a client implemented {{IDWriteInlineObject}} changes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets line spacing information.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Retrieves properties of each line.</p> + <p> If maxLineCount is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and actualLineCount is set to the number of lines needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array to fill with line information.</p> </dd> + + + <dd> <p>The maximum size of the lineMetrics array.</p> </dd> + + + <dd> <p>The actual size of the lineMetrics array that is needed.</p> </dd> + + + + + <p>Enumerator for an ordered collection of color glyph runs.</p> + + + + <p>Gets the current color glyph run.</p> + <p>Standard {{HRESULT}} error code. An error is returned if there is no current glyph run, i.e., if MoveNext has not yet been called or if the end of the sequence has been reached.</p> + + + <dd> <p>Receives a reference to the color glyph run. The reference remains valid until the next call to MoveNext or until the interface is released.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. It contains font face type, appropriate file references and face identification data. Various font data such as metrics, names and glyph outlines are obtained from {{IDWriteFontFace}}.</p> + + + + <p>Gets the available image formats of a specific glyph and ppem. </p> + <p>Glyphs often have at least TrueType or {{CFF}} outlines, but they may also have {{SVG}} outlines, or they may have only bitmaps with no TrueType/{{CFF}} outlines. Some image formats, notably the {{PNG}}/{{JPEG}} ones, are size specific and will return no match when there isn't an entry in that size range.</p><p>Glyph ids beyond the glyph count return {{DWRITE_GLYPH_IMAGE_FORMATS_NONE}}.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph.</p> </dd> + + + <dd> </dd> + + + <dd> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + + + <p>Gets a reference to the glyph data based on the desired image format.</p> + <p> The glyphDataContext must be released via <strong>ReleaseGlyphImageData</strong> when done if the data is not empty, similar to <strong>{{IDWriteFontFileStream::ReadFileFragment}}</strong> and <strong>{{IDWriteFontFileStream::ReleaseFileFragment}}</strong>. The data reference is valid so long as the <strong>{{IDWriteFontFace}}</strong> exists and <strong>ReleaseGlyphImageData</strong> has not been called. </p><p> The <strong>{{DWRITE_GLYPH_IMAGE_DATA::uniqueDataId}}</strong> is valuable for caching purposes so that if the same resource is returned more than once, an existing resource can be quickly retrieved rather than needing to reparse or decompress the data. </p><p> The function only returns {{SVG}} or raster data - requesting TrueType/{{CFF}}/{{COLR}} data returns {{DWRITE_E_INVALIDARG}}. Those must be drawn via DrawGlyphRun or queried using GetGlyphOutline instead. Exactly one format may be requested or else the function returns {{DWRITE_E_INVALIDARG}}. If the glyph does not have that format, the call is not an error, but the function returns empty data. </p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph to retrieve image data for.</p> </dd> + + + <dd> <p>Requested pixels per em.</p> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + <dd> <p>On return contains data for a glyph.</p> </dd> + + + <dd> </dd> + + + + + <p>Releases the table data obtained from ReadGlyphData.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Opaque context from ReadGlyphData.</p> </dd> + + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Translates a glyph run to a sequence of color glyph runs, which can be rendered to produce a color representation of the original "base" run.</p> + <p>Calling <strong>{{IDWriteFactory2::TranslateColorGlyphRun}}</strong> is equivalent to calling <strong>{{IDWriteFactory4::TranslateColorGlyph}}</strong> run with the following formats specified: {{DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE}}|{{DWRITE_GLYPH_IMAGE_FORMATS_CFF}}|{{DWRITE_GLYPH_IMAGE_FORMATS_COLR}}.</p> + <p>Returns {{DWRITE_E_NOCOLOR}} if the font has no color information, the glyph run does not contain any color glyphs, or the specified color palette index is out of range. In this case, the client should render the original glyph run. Otherwise, returns a standard {{HRESULT}} error code.</p> + + + <dd> <p>Horizontal and vertical origin of the base glyph run in pre-transform coordinates.</p> </dd> + + + <dd> <p>Pointer to the original "base" glyph run.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Which data formats the runs should be split into.</p> </dd> + + + <dd> <p>Measuring mode, needed to compute the origins of each glyph.</p> </dd> + + + <dd> <p>Matrix converting from the client's coordinate space to device coordinates (pixels), i.e., the world transform multiplied by any {{DPI}} scaling.</p> </dd> + + + <dd> <p>Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>.</p> </dd> + + + <dd> <p>If the function succeeds, receives a reference to an enumerator object that can be used to obtain the color glyph runs. If the base run has no color glyphs, then the output reference is {{NULL}} and the method returns {{DWRITE_E_NOCOLOR}}.</p> </dd> + + + + + <p>Converts glyph run placements to glyph origins.</p> + <p>The transform and {{DPI}} have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p>The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p>The position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p>World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is {{NULL}}, and identity transform is assumed. </p> </dd> + + + <dd> <p>On return contains the glyph origins for the glyphrun.</p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p>Used to indicate the level of support that the adapter provides for optional features of Direct3D 12.</p> + <p></p> + + + <dd> <p> Indicates whether timestamp queries are supported on copy queues. </p> </dd> + + + <dd> <p> Indicates whether casting from one fully typed format to another, compatible, format is supported. </p> </dd> + + + <dd> <p> Indicates the kinds of command lists that support the ability to write an immediate value directly from the command stream into a specified buffer. </p> </dd> + + + <dd> <p> Indicates the level of support the adapter has for view instancing. </p> </dd> + + + <dd> <p> Indicates whether barycentrics are supported. </p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + <p> Indicates the measuring method used for text layout.</p> + + + <dd> <p> Specifies that text is measured using glyph ideal metrics whose values are independent to the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using glyph display-compatible metrics whose values tuned for the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using the same glyph display metrics as text measured by {{GDI}} using a font created with {{CLEARTYPE_NATURAL_QUALITY}}.</p> </dd> + + + + + <p>Specifies which formats are supported in the font, either at a font-wide level or per glyph.</p> + + + <dd> <p>Indicates no data is available for this glyph.</p> </dd> + + + <dd> <p>The glyph has TrueType outlines.</p> </dd> + + + <dd> <p>The glyph has {{CFF}} outlines.</p> </dd> + + + <dd> <p>The glyph has multilayered {{COLR}} data.</p> </dd> + + + <dd> <p>The glyph has {{SVG}} outlines as standard {{XML}}. Fonts may store the content gzip'd rather than plain text, indicated by the first two bytes as gzip header {0x1F 0x8B}.</p> </dd> + + + <dd> <p>The glyph has {{PNG}} image data, with standard {{PNG}} {{IHDR}}.</p> </dd> + + + <dd> <p>The glyph has {{JPEG}} image data, with standard {{JIFF}} {{SOI}} header.</p> </dd> + + + <dd> <p>The glyph has {{TIFF}} image data.</p> </dd> + + + <dd> <p>The glyph has raw 32-bit premultiplied {{BGRA}} data.</p> </dd> + + + + + <p>Specifies how the alpha value of a bitmap or render target should be treated.</p> + <p>The <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration is used with the <strong>{{D2D1_PIXEL_FORMAT}}</strong> enumeration to specify the alpha mode of a render target or bitmap. Different render targets and bitmaps support different alpha modes. For a list, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>The alpha value might not be meaningful.</p> </dd> + + + <dd> <p>The alpha value has been premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color. </p> </dd> + + + <dd> <p>The alpha value is ignored.</p> </dd> + + + + + <p> Contains the data format and alpha mode for a bitmap or render target. </p> + <p>For more information about the pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>A value that specifies the size and arrangement of channels in each pixel.</p> </dd> + + + <dd> <p>A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unkown. </p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as an unsigned 32-bit integer value, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate value of the point. </p> </dd> + + + <dd> <p>The y-coordinate value of the point.</p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as floating-point values, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate of the point. +</p> </dd> + + + <dd> <p>The y-coordinate of the point. +</p> </dd> + + + + + <p>A 2D vector that consists of two single-precision floating-point values (x, y). </p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A 4D vector that consists of four single-precision floating-point values (x, y, z, w).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + <dd> <p>The w value of the vector.</p> </dd> + + + + + <p>Represents a rectangle defined by the coordinates of the upper-left corner (left, top) and the coordinates of the lower-right corner (right, bottom). </p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p> Represents a rectangle defined by the upper-left corner pair of coordinates (left,top) and the lower-right corner pair of coordinates (right, bottom). These coordinates are expressed as a 32-bit integer values.</p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p>Stores an ordered pair of floating-point values, typically the width and height of a rectangle. </p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Stores an ordered pair of integers, typically the width and height of a rectangle.</p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Represents a 3-by-2 matrix.</p> + + + <dd> <p> The value in the first row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the first row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and second column of the matrix.</p> </dd> + + + + + <p>Describes a 4-by-3 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X3_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X3_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X3_F}} {{D2D1_MATRIX_4X3_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-3 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 4-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X4_F}} {{D2D1_MATRIX_4X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-4 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 5-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_5X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_5X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_5X4_F}} {{D2D1_MATRIX_5X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fifth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 5-by-4 floating point array that describes the matrix.</p> </dd> + + + + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether an opacity mask contains graphics or text. Direct2D uses this information to determine which gamma space to use when blending the opacity mask.</p> + + + <dd> <p>The opacity mask contains graphics. The opacity mask is blended in the gamma 2.2 color space.</p> </dd> + + + <dd> <p>The opacity mask contains non-{{GDI}} text. The gamma space used for blending is obtained from the render target's text rendering parameters. (<strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong>).</p> </dd> + + + <dd> <p>The opacity mask contains text rendered using the {{GDI}}-compatible rendering mode. The opacity mask is blended using the gamma for {{GDI}} rendering.</p> </dd> + + + + + <p>Specifies how a brush paints areas outside of its normal content area.</p> + <p>For an <strong>{{ID2D1BitmapBrush}}</strong>, the brush's content is the brush's bitmap. For an <strong>{{ID2D1LinearGradientBrush}}</strong>, the brush's content area is the gradient axis. For an <strong>{{ID2D1RadialGradientBrush}}</strong>, the brush's content is the area within the gradient ellipse. </p> + + + <dd> <p>Repeat the edge pixels of the brush's content for all regions outside the normal content area.</p> </dd> + + + <dd> <p>Repeat the brush's content.</p> </dd> + + + <dd> <p> The same as {{D2D1_EXTEND_MODE_WRAP}}, except that alternate tiles of the brush's content are flipped. (The brush's normal content is drawn untransformed.)</p> </dd> + + + + + <p>Specifies how the edges of nontext primitives are rendered.</p> + + + <dd> <p>Edges are antialiased using the Direct2D per-primitive method of high-quality antialiasing.</p> </dd> + + + <dd> <p>Objects are aliased in most cases. Objects are antialiased only when they are drawn to a render target created by the <strong>CreateDxgiSurfaceRenderTarget</strong> method and Direct3D multisampling has been enabled on the backing DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> </dd> + + + + + <p>Describes the antialiasing mode used for drawing text. </p> + <p>This enumeration is used with the <strong>SetTextAntialiasMode</strong> of an <strong>{{ID2D1RenderTarget}}</strong> to specify how text and glyphs are antialiased.</p><p> By default, Direct2D renders text in ClearType mode. Factors that can downgrade the default quality to grayscale or aliased:</p><ul> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_ALIASED}} </strong>, then the default text antialiasing mode is aliased. To change the DirectWrite rendering mode of an <strong>{{ID2D1RenderTarget}}</strong>, use the <strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong> method. </li> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_OUTLINE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If the render target has an alpha channel and is not set to <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If <strong>{{ID2D1RenderTarget::PushLayer}}</strong> is called without <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> (and the corresponding <strong>PopLayer</strong> has not been called yet), then the default text antialiasing mode is grayscale.</li> </ul> + + + <dd> <p>Use the system default. See Remarks.</p> </dd> + + + <dd> <p>Use ClearType antialiasing.</p> </dd> + + + <dd> <p>Use grayscale antialiasing.</p> </dd> + + + <dd> <p>Do not use antialiasing.</p> </dd> + + + + + <p>Specifies the algorithm that is used when images are scaled or rotated.</p><strong>Note</strong>??Starting in Windows?8, more interpolations modes are available. See <strong>{{D2D1_INTERPOLATION_MODE}}</strong> for more info.? + <p> To stretch an image, each pixel in the original image must be mapped to a group of pixels in the larger image. To shrink an image, groups of pixels in the original image must be mapped to single pixels in the smaller image. The effectiveness of the algorithms that perform these mappings determines the quality of a scaled image. Algorithms that produce higher-quality scaled images tend to require more processing time. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} </strong>provides faster but lower-quality interpolation, while <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> provides higher-quality interpolation. </p> + + + + <p>Specifies whether text snapping is suppressed or clipping to the layout rectangle is enabled. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>Text is not vertically snapped to pixel boundaries. This setting is recommended for text that is being animated. </p> </dd> + + + <dd> <p>Text is clipped to the layout rectangle.</p> </dd> + + + <dd> <p>Text is vertically snapped to pixel boundaries and is not clipped to the layout rectangle. </p> </dd> + + + <dd> <p>In Windows?8.1 and later, text is rendered using color versions of glyphs, if defined by the font.</p> </dd> + + + <dd> <p>Bitmap origins of color glyph bitmaps are not snapped.</p> </dd> + + + + + <p>Specifies whether an arc should be greater than 180 degrees.</p> + + + <dd> <p> An arc's sweep should be 180 degrees or less.</p> </dd> + + + <dd> <p> An arc's sweep should be 180 degrees or greater.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes the sequence of dashes and gaps in a stroke. </p> + <p>The following illustration shows several available dash styles. </p> + + + <dd> <p>A solid line with no breaks.</p> </dd> + + + <dd> <p>A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH}}</strong> is {2, 2}.</p> </dd> + + + <dd> <p>A dot followed by a longer gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DOT}}</strong> is {0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT}}</strong> is {2, 2, 0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT_DOT}}</strong> is {2, 2, 0, 2, 0, 2}.</p> </dd> + + + <dd> <p>The dash pattern is specified by an array of floating-point values.</p> </dd> + + + + + <p>Describes the shape that joins two lines or segments. </p> + <p> A miter limit affects how sharp miter joins are allowed to be. If the line join style is <strong>{{D2D1_LINE_JOIN_MITER_OR_BEVEL}}</strong>, then the join will be mitered with regular angular vertices if it doesn't extend beyond the miter limit; otherwise, the line join will be beveled.</p><p>The following illustration shows different line join settings for the same stroked path geometry. </p><p></p> + + + <dd> <p>Regular angular vertices. </p> </dd> + + + <dd> <p>Beveled vertices. </p> </dd> + + + <dd> <p>Rounded vertices. </p> </dd> + + + <dd> <p>Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices. </p> </dd> + + + + + <p>Specifies the different methods by which two geometries can be combined.</p> + <p>The following illustration shows the different geometry combine modes. +</p> + + + <dd> <p>The two regions are combined by taking the union of both. Given two geometries, <em>A</em> and <em>B</em>, the resulting geometry is geometry <em>A</em> + geometry <em>B</em>.</p> </dd> + + + <dd> <p>The two regions are combined by taking their intersection. The new area consists of the overlapping region between the two geometries. </p> </dd> + + + <dd> <p>The two regions are combined by taking the area that exists in the first region but not the second and the area that exists in the second region but not the first. Given two geometries, <em>A</em> and <em>B</em>, the new region consists of (<em>A</em>-<em>B</em>) + (<em>B</em>-<em>A</em>). </p> </dd> + + + <dd> <p>The second region is excluded from the first. Given two geometries, <em>A</em> and <em>B</em>, the area of geometry <em>B</em> is removed from the area of geometry <em>A</em>, producing a region that is <em>A</em>-<em>B</em>.</p> </dd> + + + + + <p>Describes how one geometry object is spatially related to another geometry object. </p> + + + <dd> <p>The relationship between the two geometries cannot be determined. This value is never returned by any {{D2D}} method. </p> </dd> + + + <dd> <p>The two geometries do not intersect at all.</p> </dd> + + + <dd> <p>The instance geometry is entirely contained by the passed-in geometry.</p> </dd> + + + <dd> <p>The instance geometry entirely contains the passed-in geometry.</p> </dd> + + + <dd> <p>The two geometries overlap but neither completely contains the other. </p> </dd> + + + + + <p>Specifies how a geometry is simplified to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is filled or hollow. </p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is open or closed. </p> + + + + <p>Indicates whether a segment should be stroked and whether the join between this segment and the previous one should be smooth. This enumeration allows a bitwise combination of its member values. </p> + + + <dd> <p>The segment is joined as specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface, and it is stroked. </p> </dd> + + + <dd> <p>The segment is not stroked.</p> </dd> + + + <dd> <p>The segment is always joined with the one preceding it using a round line join, regardless of which <strong>{{D2D1_LINE_JOIN}}</strong>enumeration is specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface. If this segment is the first segment and the figure is closed, a round line join is used to connect the closing segment with the first segment. If the figure is not closed, this setting has no effect on the first segment of the figure. If <strong>{{ID2D1SimplifiedGeometrySink::SetSegmentFlags}}</strong> is called just before <strong>{{ID2D1SimplifiedGeometrySink::EndFigure}}</strong>, the join between the closing segment and the last explicitly specified segment is affected.</p> </dd> + + + + + <p>Defines the direction that an elliptical arc is drawn. </p> + + + <dd> <p> Arcs are drawn in a counterclockwise (negative-angle) direction. </p> </dd> + + + <dd> <p> Arcs are drawn in a clockwise (positive-angle) direction. </p> </dd> + + + + + <p>Specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry. </p> + <p>Use the <strong>{{D2D1_FILL_MODE}}</strong> enumeration when creating an <strong>{{ID2D1GeometryGroup}}</strong> with the <strong>CreateGeometryGroup</strong> method, or when modifying the fill mode of an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> with the <strong>{{ID2D1SimplifiedGeometrySink::SetFillMode}}</strong> method.</p><p>Direct2D fills the interior of a path by using one of the two fill modes specified by this enumeration: <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) or <strong>{{D2D1_FILL_MODE_WINDING}}</strong> (winding). Because the modes determine how to fill the interior of a closed shape, all shapes are treated as closed when they are filled. If there is a gap in a segment in a shape, draw an imaginary line to close it. </p><p> To see the difference between the winding and alternate fill modes, assume that you have four circles with the same center and a different radius, as shown in the following illustration. The first one has the radius of 25, the second 50, the third 75, and the fourth 100.</p><p>The following illustration shows the shape filled by using the alternate fill mode. Notice that the center and third ring are not filled. This is because a ray drawn from any point in either of those two rings passes through an even number of segments. </p><p>The following illustration explains this process. </p><p>The following illustration shows how the same shape is filled when the winding fill mode is specified. </p><p>Notice that all the rings are filled. This is because all the segments run in the same direction, so a ray drawn from any point will cross one or more segments, and the sum of the crossings will not equal zero. </p><p>The following illustration explains this process. The red arrows represent the direction in which the segments are drawn and the black arrow represents an arbitrary ray that runs from a point in the innermost ring. Starting with a value of zero, for each segment that the ray crosses, a value of one is added for every clockwise intersection. All points lie in the fill region in this illustration, because the count does not equal zero. </p> + + + <dd> <p>Determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region. </p> </dd> + + + <dd> <p>Determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path. </p> </dd> + + + + + <p>Specifies options that can be applied when a layer resource is applied to create a layer. </p><strong>Note</strong>??Starting in Windows?8, the <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> option is no longer supported. See <strong>{{D2D1_LAYER_OPTIONS1}}</strong> for Windows?8 layer options.? + <p>ClearType antialiasing must use the current contents of the render target to blend properly. When a pushed layer requests initializing for ClearType, Direct2D copies the current contents of the render target into the layer so that ClearType antialiasing can be performed. Rendering ClearType text into a transparent layer does not produce the desired results.</p><p>A small performance hit from re-copying content occurs when <strong>{{ID2D1RenderTarget::Clear}}</strong> is called.</p> + + + + <p>Describes whether a window is occluded. </p> + <p>If the window was occluded the last time <strong>EndDraw</strong> was called, the next time the render target calls <strong>CheckWindowState</strong>, it returns <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to check the current window state, call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This will ensure that your next call to <strong>CheckWindowState</strong> state returns the actual window state.</p> + + + <dd> <p>The window is not occluded.</p> </dd> + + + <dd> <p>The window is occluded.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes the minimum DirectX support required for hardware rendering by a render target.</p> + + + <dd> <p>Direct2D determines whether the video card provides adequate hardware rendering support.</p> </dd> + + + <dd> <p>The video card must support DirectX 9.</p> </dd> + + + <dd> <p>The video card must support DirectX 10. </p> </dd> + + + + + <p> Describes how a render target is remoted and whether it should be {{GDI}}-compatible. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target attempts to use Direct3D command-stream remoting and uses bitmap remoting if stream remoting fails. The render target is not {{GDI}}-compatible.</p> </dd> + + + <dd> <p>The render target renders content locally and sends it to the terminal services client as a bitmap. </p> </dd> + + + <dd> <p>The render target can be used efficiently with {{GDI}}.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Specifies additional features supportable by a compatible render target when it is created. This enumeration allows a bitwise combination of its member values.</p> + <p>Use this enumeration when creating a compatible render target with the <strong>CreateCompatibleRenderTarget</strong> method. For more information about compatible render targets, see the Render Targets Overview. </p><p>The <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> option may only be requested if the parent render target was created with <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> (for most render targets) or <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> (for render targets created by the <strong>CreateCompatibleRenderTarget</strong> method).</p> + + + <dd> <p>The render target supports no additional features.</p> </dd> + + + <dd> <p>The render target supports interoperability with the Windows Graphics Device Interface ({{GDI}}). </p> </dd> + + + + + <p> Specifies how a device context is initialized for {{GDI}} rendering when it is retrieved from the render target.</p> + <p>Use this enumeration with the <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> method to specify how the device context is initialized for {{GDI}} rendering.</p> + + + <dd> <p>The current contents of the render target are copied to the device context when it is initialized. </p> </dd> + + + <dd> <p>The device context is cleared to transparent black when it is initialized.</p> </dd> + + + + + <p>Indicates the type of information provided by the Direct2D Debug Layer. </p> + <p>To receive debugging messages, you must install the Direct2D Debug Layer.</p> + + + + <p>Specifies whether Direct2D provides synchronization for an <strong>{{ID2D1Factory}}</strong> and the resources it creates, so that they may be safely accessed from multiple threads. </p> + <p>When you create a factory, you can specify whether it is multithreaded or singlethreaded. A singlethreaded factory provides no serialization against any other single threaded instance within Direct2D, so this mechanism provides a very large degree of scaling on the {{CPU}}.</p><p>You can also create a multithreaded factory instance. In this case, the factory and all derived objects can be used from any thread, and each render target can be rendered to independently. Direct2D serializes calls to these objects, so a single multithreaded Direct2D instance won't scale as well on the {{CPU}} as many single threaded instances. However, the resources can be shared within the multithreaded instance.</p><p>Note the qualifier "On the {{CPU}}": {{GPUs}} generally take advantage of fine-grained parallelism more so than {{CPUs}}. For example, multithreaded calls from the {{CPU}} might still end up being serialized when being sent to the {{GPU}}; however, a whole bank of pixel and vertex shaders will run in parallel to perform the rendering.</p> + + + + <p>Describes the pixel format and dpi of a bitmap.</p> + + + <dd> <p>The bitmap's pixel format and alpha mode.</p> </dd> + + + <dd> <p>The horizontal dpi of the bitmap.</p> </dd> + + + <dd> <p>The vertical dpi of the bitmap.</p> </dd> + + + + + <p> Contains the position and color of a gradient stop. </p> + <p>Gradient stops can be specified in any order if they are at different positions. Two stops may share a position. In this case, the first stop specified is treated as the "low" stop (nearer 0.0f) and subsequent stops are treated as "higher" (nearer 1.0f). This behavior is useful if a caller wants an instant transition in the middle of a stop.</p><p>Typically, there are at least two points in a collection, although creation with only one stop is permitted. For example, one point is at position 0.0f, another point is at position 1.0f, and additional points are distributed in the [0, 1] range. Where the gradient progression is beyond the range of [0, 1], the stops are stored, but may affect the gradient. </p><p>When drawn, the [0, 1] range of positions is mapped to the brush, in a brush-dependent way. For details, see <strong>{{ID2D1LinearGradientBrush}}</strong> and <strong>{{ID2D1RadialGradientBrush}}</strong>. </p><p>Gradient stops with a position outside the [0, 1] range cannot be seen explicitly, but they can still affect the colors produced in the [0, 1] range. For example, a two-stop gradient {{0.0f, Black}, {2.0f, White}} is indistinguishable visually from {{0.0f, Black}, {1.0f, Mid-level gray}}. Also, the colors are clamped before interpolation.</p> + + + <dd> <p>A value that indicates the relative position of the gradient stop in the brush. This value must be in the [0.0f, 1.0f] range if the gradient stop is to be seen explicitly. </p> </dd> + + + <dd> <p>The color of the gradient stop.</p> </dd> + + + + + <p> Describes the opacity and transformation of a brush.</p> + <p>This structure is used when creating a brush. For convenience, Direct2D provides the <strong>{{D2D1::BrushProperties}}</strong> function for creating <strong>{{D2D1_BRUSH_PROPERTIES}}</strong> structures.</p><p>After creating a brush, you can change its opacity or transform by calling the <strong>SetOpacity</strong> or <strong>SetTransform</strong> methods.</p> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the degree of opacity of the brush.</p> </dd> + + + <dd> <p>The transformation that is applied to the brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p> Contains the starting point and endpoint of the gradient axis for an <strong>{{ID2D1LinearGradientBrush}}</strong>. </p> + <p>Use this method when creating new <strong>{{ID2D1LinearGradientBrush}}</strong> objects with the <strong>CreateLinearGradientBrush</strong> method. For convenience, Direct2D provides the <strong>{{D2D1::LinearGradientBrushProperties}}</strong> helper function for creating new <strong>{{D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES}}</strong> structures.</p><p>The following illustration shows how a linear gradient changes as you change its start and end points. For the first gradient, the start point is set to (0,0) and the end point to (150, 50); this creates a diagonal gradient that starts at the upper-left corner and extends to the lower-right corner of the area being painted. When you set the start point to (0, 25) and the end point to (150, 25), a horizontal gradient is created. Similarly, setting the start point to (75, 0) and the end point to (75, 50) creates a vertical gradient. Setting the start point to (0, 50) and the end point to (150, 0) creates a diagonal gradient that starts at the lower-left corner and extends to the upper-right corner of the area being painted.</p><p></p> + + + + <p> Contains the gradient origin offset and the size and position of the gradient ellipse for an <strong>{{ID2D1RadialGradientBrush}}</strong>. </p> + <p>Different values for <em>center</em>, <em>gradientOriginOffset</em>, <em>radiusX</em> and/or <em>radiusY</em> produce different gradients. The following illustration shows several radial gradients that have different gradient origin offsets, creating the appearance of the light illuminating the circles from different angles.</p><p></p><p>For convenience, Direct2D provides the <strong>{{D2D1::RadialGradientBrushProperties}}</strong> function for creating new <strong>{{D2D1_RADIAL_GRADIENT_BRUSH}}</strong> structures.</p> + + + + <p>Represents a cubic bezier segment drawn between two points.</p> + <p> A cubic Bezier curve is defined by four points: a start point, an end point (<em>point3</em>), and two control points (<em>point1</em> and <em>point2</em>). A Bezier segment does not contain a property for the starting point of the curve; it defines only the end point. The beginning point of the curve is the current point of the path to which the Bezier curve is added.</p><p> The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line toward themselves and producing a curve. The first control point, <em>point1</em>, affects the beginning portion of the curve; the second control point, <em>point2</em>, affects the ending portion of the curve. </p><strong>Note</strong>??The curve doesn't necessarily pass through either of the control points; each control point moves its portion of the line toward itself, but not through itself.? + + + <dd> <p>The first control point for the Bezier segment.</p> </dd> + + + <dd> <p>The second control point for the Bezier segment.</p> </dd> + + + <dd> <p>The end point for the Bezier segment.</p> </dd> + + + + + <p>Contains the three vertices that describe a triangle.</p> + + + <dd> <p>The first vertex of a triangle.</p> </dd> + + + <dd> <p>The second vertex of a triangle.</p> </dd> + + + <dd> <p>The third vertex of a triangle.</p> </dd> + + + + + <p>Describes an elliptical arc between two points.</p> + + + <dd> <p>The end point of the arc.</p> </dd> + + + <dd> <p>The x-radius and y-radius of the arc.</p> </dd> + + + <dd> <p>A value that specifies how many degrees in the clockwise direction the ellipse is rotated relative to the current coordinate system.</p> </dd> + + + <dd> <p>A value that specifies whether the arc sweep is clockwise or counterclockwise.</p> </dd> + + + <dd> <p>A value that specifies whether the given arc is larger than 180 degrees.</p> </dd> + + + + + <p> Contains the control point and end point for a quadratic Bezier segment.</p> + + + <dd> <p>The control point of the quadratic Bezier segment.</p> </dd> + + + <dd> <p>The end point of the quadratic Bezier segment.</p> </dd> + + + + + <p> Contains the center point, x-radius, and y-radius of an ellipse.</p> + + + <dd> <p>The center point of the ellipse.</p> </dd> + + + <dd> <p>The X-radius of the ellipse.</p> </dd> + + + <dd> <p>The Y-radius of the ellipse.</p> </dd> + + + + + <p> Contains the dimensions and corner radii of a rounded rectangle.</p> + <p>Each corner of the rectangle specified by the <em>rect</em> is replaced with a quarter ellipse, with a radius in each direction specified by <em>radiusX</em> and <em>radiusY</em>.</p><p> If the <em>radiusX</em> is greater than or equal to half the width of the rectangle, and the <em>radiusY</em> is greater than or equal to one-half the height, the rounded rectangle is an ellipse with the same width and height of the <em>rect</em>. </p><p>Even when both <em>radiuX</em> and <em>radiusY</em> are zero, the rounded rectangle is different from a rectangle., When stroked, the corners of the rounded rectangle are roundly joined, not mitered (square). </p> + + + <dd> <p>The coordinates of the rectangle.</p> </dd> + + + <dd> <p>The x-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + <dd> <p>The y-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + + + <p> Describes the stroke that outlines a shape. </p> + <p>The following illustration shows different <em>dashOffset</em> values for the same custom dash style.</p><p></p> + + + <dd> <p>The cap applied to the start of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The cap applied to the end of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The shape at either end of each dash segment.</p> </dd> + + + <dd> <p>A value that describes how segments are joined. This value is ignored for a vertex if the segment flags specify that the segment should have a smooth join. </p> </dd> + + + <dd> <p>The limit of the thickness of the join on a mitered corner. This value is always treated as though it is greater than or equal to 1.0f. </p> </dd> + + + <dd> <p>A value that specifies whether the stroke has a dash pattern and, if so, the dash style. </p> </dd> + + + <dd> <p>A value that specifies an offset in the dash sequence. A positive dash offset value shifts the dash pattern, in units of stroke width, toward the start of the stroked geometry. A negative dash offset value shifts the dash pattern, in units of stroke width, toward the end of the stroked geometry.</p> </dd> + + + + + <p> Contains the content bounds, mask information, opacity settings, and other options for a layer resource. </p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p> A value that specifies whether the layer intends to render text with ClearType antialiasing.</p> </dd> + + + + + <p> Contains rendering options (hardware or software), pixel format, {{DPI}} information, remoting options, and Direct3D support requirements for a render target. </p> + <p>Use this structure when creating a render target, or use it with the <strong>{{ID2D1RenderTarget::IsSupported}}</strong> method to check the properties supported by an existing render target.</p><p>As a convenience, Direct2D provides the <strong>{{D2D1::RenderTargetProperties}}</strong> helper function for creating <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structures. An easy way to create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that works for most render targets is to call the function without specifying any parameters. Doing so creates a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that has its fields set to default values. For more information, see <strong>{{D2D1::RenderTargetProperties}}</strong>.</p><p>Not all render targets support hardware rendering. For a list, see the Render Targets Overview.</p> + + + <dd> <p>A value that specifies whether the render target should force hardware or software rendering. A value of <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong> specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that {{WIC}} bitmap render targets do not support hardware rendering.</p> </dd> + + + <dd> <p>The pixel format and alpha mode of the render target. You can use the <strong>{{D2D1::PixelFormat}}</strong> function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>The horizontal {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>The vertical {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>A value that specifies how the render target is remoted and whether it should be {{GDI}}-compatible. Set to <strong>{{D2D1_RENDER_TARGET_USAGE_NONE}}</strong> to create a render target that is not compatible with {{GDI}} and uses Direct3D command-stream remoting if it is available. </p> </dd> + + + <dd> <p>A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the <strong>type </strong> member is set to <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong>; if <strong>type </strong> is set to to <strong>{{D2D1_RENDER_TARGET_TYPE_HARDWARE}}</strong>, render target creation fails. A value of <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating <strong>{{ID2D1HwndRenderTarget}}</strong> and <strong>{{ID2D1DCRenderTarget}}</strong> objects.</p> </dd> + + + + + <p> Contains the {{HWND}}, pixel size, and presentation options for an <strong>{{ID2D1HwndRenderTarget}}</strong>.</p> + <p>Use this structure when you call the <strong>CreateHwndRenderTarget</strong> method to create a new <strong>{{ID2D1HwndRenderTarget}}</strong>.</p><p>For convenience, Direct2D provides the <strong>{{D2D1::HwndRenderTargetProperties}}</strong> function for creating new <strong>{{D2D1_HWND_RENDER_TARGET_PROPERTIES}}</strong> structures.</p> + + + + <p>Describes the drawing state of a render target. </p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Contains the debugging level of an <strong>{{ID2D1Factory}}</strong> object. </p> + <p>To enable debugging, you must install the Direct2D Debug Layer.</p> + + + + <p> Describes a geometric path that does not contain quadratic bezier curves or arcs. </p> + <p>A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the <strong>BeginFigure</strong> method and specify the figure's start point, then use <strong>AddLines</strong> and <strong>AddBeziers</strong> to add line and Bezier segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p><p>To create geometry paths that can contain arcs and quadratic Bezier curves, use an <strong>{{ID2D1GeometrySink}}</strong>.</p> + + + + <p>Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. </p> + <p>The fill mode defaults to {{D2D1_FILL_MODE_ALTERNATE}}. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Not doing will put the geometry sink in an error state. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The method used to determine whether a given point is part of the geometry.</p> </dd> + + + + + <p>Specifies stroke and join options to be applied to new segments added to the geometry sink. </p> + <p>After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Stroke and join options to be applied to new segments added to the geometry sink.</p> </dd> + + + + + <p>Starts a new figure at the specified point. </p> + <p>If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point at which to begin the new figure.</p> </dd> + + + <dd> <p>Whether the new figure should be hollow or filled.</p> </dd> + + + + + <p> Creates a sequence of lines using the specified points and adds them to the geometry sink.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. </p> </dd> + + + <dd> <p>The number of points in the <em>points</em> array.</p> </dd> + + + + + <p>Creates a sequence of cubic Bezier curves and adds them to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.</p> </dd> + + + <dd> <p>The number of Bezier segments in the <em>beziers</em> array.</p> </dd> + + + + + <p> Ends the current figure; optionally, closes it.</p> + <p>Calling this method without a matching call to <strong>BeginFigure</strong> places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the <strong>Close</strong> method is called.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by <strong>BeginFigure</strong>.</p> </dd> + + + + + <p>Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. </p> + <p>Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one <strong>EndFigure</strong> call for each call to <strong>BeginFigure</strong>.</p><p>After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Forces the factory to refresh any system defaults that it might have changed since factory creation.</p> + <p>You should call this method before calling the <strong>GetDesktopDpi</strong> method, to ensure that the system {{DPI}} is current.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the current desktop dots per inch ({{DPI}}). To refresh this value, call <strong>ReloadSystemMetrics</strong>.</p> + <p>Use this method to obtain the system {{DPI}} when setting physical pixel values, such as when you specify the size of a window.</p> + <p>This method does not return a value.</p> + + + + <p> Creates an <strong>{{ID2D1RectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1RoundedRectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1EllipseGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1GeometryGroup}}</strong>, which is an object that holds other geometries.</p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a <strong>{{ID2D1GeometryGroup}}</strong> object, call the <strong>CreateGeometryGroup</strong> method on the <strong>{{ID2D1Factory}}</strong> object, passing in the <em>fillMode</em> with possible values of <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) and <strong>{{D2D1_FILL_MODE_WINDING}}</strong>, an array of geometry objects to add to the geometry group, and the number of elements in this array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Transforms the specified geometry and stores the result as an <strong>{{ID2D1TransformedGeometry}}</strong> object. </p> + <p>Like other resources, a transformed geometry inherits the resource space and threading policy of the factory that created it. This object is immutable.</p><p>When stroking a transformed geometry with the <strong>DrawGeometry</strong> method, the stroke width is not affected by the transform applied to the geometry. The stroke width is only affected by the world transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an empty <strong>{{ID2D1PathGeometry}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1StrokeStyle}}</strong> that describes start cap, dash pattern, and other features of a stroke.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1DrawingStateBlock}}</strong> that can be used with the <strong>SaveDrawingState</strong> and <strong>RestoreDrawingState</strong> methods of a render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that renders to a Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>You must use <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> for the <strong>minLevel</strong> member of the <em>renderTargetProperties</em> parameter with this method.</p><p>Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p><ul> <li></li> </ul> <p><strong>Note</strong>?? This method isn't supported on Windows Phone and will fail when called on a device with error code 0x8899000b (?There is no hardware rendering device available for this operation?). Because the Windows Phone Emulator supports {{WARP}} rendering, this method will fail when called on the emulator with a different error code, 0x88982f80 (wincodec_err_unsupportedpixelformat).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap that receives the rendering output of the render target.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method. </p> </dd> + + + + + <p>Creates an <strong>{{ID2D1HwndRenderTarget}}</strong>, a render target that renders to a window.</p> + <p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that draws to a DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> + <p>To write to a Direct3D surface, you obtain an {{IDXGISurface}} and pass it to the <strong>CreateDxgiSurfaceRenderTarget</strong> method to create a {{DXGI}} surface render target; you can then use the {{DXGI}} surface render target to draw 2-D content to the {{DXGI}} surface. </p><p>A {{DXGI}} surface render target is a type of <strong>{{ID2D1RenderTarget}}</strong>. Like other Direct2D render targets, you can use it to create resources and issue drawing commands. </p><p>The {{DXGI}} surface render target and the {{DXGI}} surface must use the same {{DXGI}} format. If you specify the {{DXGI_FORMAT_UNKOWN}} format when you create the render target, it will automatically use the surface's format.</p><p>The {{DXGI}} surface render target does not perform {{DXGI}} surface synchronization. </p><p>For more information about creating and using {{DXGI}} surface render targets, see the Direct2D and Direct3D Interoperability Overview.</p><p>To work with Direct2D, the Direct3D device that provides the {{IDXGISurface}} must be created with the <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag.</p><p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{IDXGISurface}} to which the render target will draw.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method.</p> </dd> + + + + + <p>Creates a render target that draws to a Windows Graphics Device Interface ({{GDI}}) device context.</p> + <p>Before you can render with a {{DC}} render target, you must use the render target's <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. Do this for each different {{DC}} and whenever there is a change in the size of the area you want to draw to.</p><p>To enable the {{DC}} render target to work with {{GDI}}, set the render target's {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>.</p><p>Your application should create render targets once and hold on to them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. To enable the device context ({{DC}}) render target to work with {{GDI}}, set the {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and the alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>. For more information about pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, <em>dcRenderTarget</em> contains the address of the reference to the <strong>{{ID2D1DCRenderTarget}}</strong> created by the method.</p> </dd> + + + + + <p>Represents an object that can receive drawing commands. Interfaces that inherit from <strong>{{ID2D1RenderTarget}}</strong> render the drawing commands they receive in different ways. </p> + <p>Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p> + + + + <p>Creates a Direct2D bitmap from a reference to in-memory source data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The dimension of the bitmap to create in pixels.</p> </dd> + + + <dd> <p>A reference to the memory location of the image data, or <strong>{{NULL}}</strong> to create an uninitialized bitmap.</p> </dd> + + + <dd> <p>The byte count of each scanline, which is equal to (the image width in pixels ? the number of bytes per pixel) + memory padding. If <em>srcData</em> is <strong>{{NULL}}</strong>, this value is ignored. (Note that pitch is also sometimes called <em>stride</em>.)</p> </dd> + + + <dd> <p>The pixel format and dots per inch ({{DPI}}) of the bitmap to create.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a reference to the new bitmap. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> by copying the specified Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>Before Direct2D can load a {{WIC}} bitmap, that bitmap must be converted to a supported pixel format and alpha mode. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> whose data is shared with another resource.</p> + <p>The <strong>CreateSharedBitmap</strong> method is useful for efficiently reusing bitmap data and can also be used to provide interoperability with Direct3D. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1BitmapBrush}}</strong> from the specified bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new <strong>{{ID2D1SolidColorBrush}}</strong> that has the specified color and a base opacity of 1.0f. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1GradientStopCollection}}</strong> from the specified gradient stops that uses the <strong>{{D2D1_GAMMA_2_2}}</strong> color interpolation gamma and the clamp extend mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1LinearGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1RadialGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a new bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target and has the same size, {{DPI}}, and pixel format (but not alpha mode) as the current render target. </p> + <p>The bitmap render target created by this method is not compatible with {{GDI}} and has an alpha mode of <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to a new bitmap render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. </p> + <p>Regardless of whether a size is initially specified, the layer automatically resizes as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when <strong>PushLayer</strong> is called.</p> </dd> + + + <dd> <p>When the method returns, contains a reference to a reference to the new layer. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Create a mesh that uses triangles to describe a shape.</p> + <p>To populate a mesh, use its <strong>Open</strong> method to obtain an <strong>{{ID2D1TessellationSink}}</strong>. To draw the mesh, use the render target's <strong>FillMesh</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the new mesh.</p> </dd> + + + + + <p>Draws a line between the specified points using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawLine</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The start point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The end point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the line's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid line.</p> </dd> + + + + + <p>Draws the outline of a rectangle that has the specified dimensions and stroke style. </p> + <p>When this method fails, it does not return an error code. To determine whether a drawing method (such as <strong>DrawRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimension of the rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's interior.</p> </dd> + + + + + <p> Draws the outline of the specified rounded rectangle using the specified stroke style.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rounded rectangle's outline. </p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of the rounded rectangle's stroke, or <strong>{{NULL}}</strong> to paint a solid stroke. The default value is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Paints the interior of the specified rounded rectangle.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the rounded rectangle.</p> </dd> + + + + + <p>Draws the outline of the specified ellipse using the specified stroke style. </p> + <p>The <strong>DrawEllipse</strong> method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius of the ellipse to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the ellipse's outline.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the ellipse's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified ellipse. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius, in device-independent pixels, of the ellipse to paint.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the ellipse.</p> </dd> + + + + + <p>Draws the outline of the specified geometry using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to draw.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the geometry's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified geometry. </p> + <p>If the <em>opacityBrush</em> parameter is not <strong>{{NULL}}</strong>, the alpha value of each pixel of the mapped <em>opacityBrush</em> is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by <em>brush</em>. +</p><p>When this method fails, it does not return an error code. To determine whether a drawing operation (such as <strong>FillGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to paint.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's interior.</p> </dd> + + + <dd> <p>The opacity mask to apply to the geometry, or <strong>{{NULL}}</strong> for no opacity mask. If an opacity mask (the <em>opacityBrush</em> parameter) is specified, <em>brush</em> must be an <strong>{{ID2D1BitmapBrush}}</strong> that has its x- and y-extend modes set to <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong>. For more information, see the Remarks section. </p> </dd> + + + + + <p> Paints the interior of the specified mesh.</p> + <p>The current antialias mode of the render target must be <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> when <strong>FillMesh</strong> is called. To change the render target's antialias mode, use the <strong>SetAntialiasMode</strong> method.</p><p><strong>FillMesh</strong> does not expect a particular winding order for the triangles in the <strong>{{ID2D1Mesh}}</strong>; both clockwise and counter-clockwise will work. </p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillMesh</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The mesh to paint.</p> </dd> + + + <dd> <p>The brush used to paint the mesh.</p> </dd> + + + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + <p>For this method to work properly, the render target must be using the <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> antialiasing mode. You can set the antialiasing mode by calling the <strong>{{ID2D1RenderTarget::SetAntialiasMode}}</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillOpacityMask</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + + + + <p>Draws the specified bitmap after scaling it to the size of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawBitmap</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to render.</p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn. If the rectangle is not well-ordered, nothing is drawn, but the render target does not enter an error state.</p> </dd> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the opacity value to be applied to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. Default is 1.0f.</p> </dd> + + + <dd> <p>The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong>. </p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to draw; <strong>{{NULL}}</strong> to draw the entire bitmap.</p> </dd> + + + + + <p>Draws the specified text using the format information provided by an <strong>{{IDWriteTextFormat}}</strong> object.</p> + <p>To create an <strong>{{IDWriteTextFormat}}</strong> object, create an <strong>{{IDWriteFactory}}</strong> and call its <strong>CreateTextFormat</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawText</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the formatted text described by the specified <strong>{{IDWriteTextLayout}}</strong> object.</p> + <p>When drawing the same text repeatedly, using the <strong>DrawTextLayout</strong> method is more efficient than using the <strong>DrawText</strong> method because the text doesn't need to be formatted and the layout processed with each call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawTextLayout</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the specified glyphs. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGlyphRun</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin, in device-independent pixels, of the glyphs' baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. </p> </dd> + + + + + Applies the specified transform to the render target, replacing the existing transformation. All subsequent drawing operations occur in the transformed space. + + + + <p>Gets the current transform of the render target. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this returns, contains the current transform of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Sets the antialiasing mode of the render target. The antialiasing mode applies to all subsequent drawing operations, excluding text and glyph drawing operations. </p> + <p>To specify the antialiasing mode for text and glyph operations, use the <strong>SetTextAntialiasMode</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode for future drawing operations. </p> </dd> + + + + + <p> Retrieves the current antialiasing mode for nontext drawing operations.</p> + <p>The current antialiasing mode for nontext drawing operations. </p> + + + + <p>Specifies the antialiasing mode to use for subsequent text and glyph drawing operations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode to use for subsequent text and glyph drawing operations.</p> </dd> + + + + + <p>Gets the current antialiasing mode for text and glyph drawing operations. </p> + <p>The current antialiasing mode for text and glyph drawing operations. </p> + + + + <p>Specifies text rendering options to be applied to all subsequent text and glyph drawing operations. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text rendering options to be applied to all subsequent text and glyph drawing operations; <strong>{{NULL}}</strong> to clear current text rendering options. </p> </dd> + + + + + <p>Retrieves the render target's current text rendering options. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, <em>textRenderingParams</em>contains the address of a reference to the render target's current text rendering options. </p> </dd> + + + + + <p>Specifies a label for subsequent drawing operations. </p> + <p>The labels specified by this method are printed by debug error messages. If no tag is set, the default value for each tag is 0.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Gets the label for subsequent drawing operations. </p> + <p>If the same address is passed for both parameters, both parameters receive the value of the second tag. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter. </p> </dd> + + + <dd> <p>When this method returns, contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter.</p> </dd> + + + + + <p>Adds the specified layer to the render target so that it receives all subsequent drawing operations until <strong>PopLayer</strong> is called. </p> + <p>The <strong>PushLayer</strong> method allows a caller to begin redirecting rendering to a layer. All rendering operations are valid in a layer. The location of the layer is affected by the world transform set on the render target. </p><p>Each <strong>PushLayer</strong> must have a matching <strong>PopLayer</strong> call. If there are more <strong>PopLayer</strong> calls than <strong>PushLayer</strong> calls, the render target is placed into an error state. If <strong>Flush</strong> is called before all outstanding layers are popped, the render target is placed into an error state, and an error is returned. The error state can be cleared by a call to <strong>EndDraw</strong>.</p><p>A particular <strong>{{ID2D1Layer}}</strong> resource can be active only at one time. In other words, you cannot call a <strong>PushLayer</strong> method, and then immediately follow with another <strong>PushLayer</strong> method with the same layer resource. Instead, you must call the second <strong>PushLayer</strong> method with different layer resources. +</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Stops redirecting drawing operations to the layer that is specified by the last <strong>PushLayer</strong> call. </p> + <p>A <strong>PopLayer</strong> must match a previous <strong>PushLayer</strong> call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Executes all pending drawing commands. </p> + <p>This command does not flush the Direct3D device context that is associated with the render target.</p><p>Calling this method resets the error state of the render target.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0).</p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Saves the current drawing state to the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the render target's drawing state to that of the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Specifies a rectangle to which all subsequent drawing operations are clipped. </p> + <p>The <em>clipRect</em> is transformed by the current world transform set on the render target. After the transform is applied to the <em>clipRect</em> that is passed in, the axis-aligned bounding box for the <em>clipRect</em> is computed. For efficiency, the contents are clipped to this axis-aligned bounding box and not to the original <em>clipRect</em> that is passed in. </p><p>The following diagrams show how a rotation transform is applied to the render target, the resulting <em>clipRect</em>, and a calculated axis-aligned bounding box.</p><ol> <li> <p>Assume the rectangle in the following illustration is a render target that is aligned to the screen pixels.</p> <p></p> </li> <li> <p>Apply a rotation transform to the render target. In the following illustration, the black rectangle represents the original render target and the red dashed rectangle represents the transformed render target.</p> <p></p> </li> <li> <p>After calling <strong>PushAxisAlignedClip</strong>, the rotation transform is applied to the <em>clipRect</em>. In the following illustration, the blue rectangle represents the transformed <em>clipRect</em>.</p> <p></p> </li> <li> <p>The axis-aligned bounding box is calculated. The green dashed rectangle represents the bounding box in the following illustration. All contents are clipped to this axis-aligned bounding box.</p> <p></p> </li> </ol><strong>Note</strong>??If rendering operations fail or if <strong>PopAxisAlignedClip</strong> is not called, clip rects may cause some artifacts on the render target. <strong>PopAxisAlignedClip</strong> can be considered a drawing operation that is designed to fix the borders of a clipping region. Without this call, the borders of a clipped area may be not antialiased or otherwise corrected.?<p>The <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> must match. Otherwise, the error state is set. For the render target to continue receiving new commands, you can call <strong>Flush</strong> to clear the error. </p><p>A <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> pair can occur around or within a PushLayer and PopLayer, but cannot overlap. For example, the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> is valid, but the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> is invalid.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The size and position of the clipping area, in device-independent pixels.</p> </dd> + + + <dd> <p>The antialiasing mode that is used to draw the edges of clip rects that have subpixel boundaries, and to blend the clip with the scene contents. The blending is performed once when the <strong>PopAxisAlignedClip</strong> method is called, and does not apply to each primitive within the layer. </p> </dd> + + + + + <p>Removes the last axis-aligned clip from the render target. After this method is called, the clip is no longer applied to subsequent drawing operations. </p> + <p>A <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> pair can occur around or within a <strong>PushLayer</strong>/<strong>PopLayer</strong> pair, but may not overlap. For example, a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> sequence is valid, but a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> sequence is not. </p><p><strong>PopAxisAlignedClip</strong> must be called once for every call to <strong>PushAxisAlignedClip</strong>.</p><p>For an example, see How to Clip with an Axis-Aligned Clip Rectangle.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>Direct2D interprets the <em>clearColor</em> as straight alpha (not premultiplied). If the render target's alpha mode is <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, the alpha channel of <em>clearColor</em> is ignored and replaced with 1.0f (fully opaque).</p><p>If the render target has an active clip (specified by <strong>PushAxisAlignedClip</strong>), the clear command is applied only to the area within the clip region.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The color to which the drawing area is cleared, or <strong>{{NULL}}</strong> for transparent black.</p> </dd> + + + + + <p>Initiates drawing on this render target. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p>BeginDraw and EndDraw are used to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an {{HRESULT}} indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing {{HRESULT}}. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate {{HRESULT}} and error information when <strong>EndDraw</strong> is called. +</p> + <p>This method does not return a value.</p> + + + + <p>Ends drawing operations on the render target and indicates the current error state and associated tags. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p> <strong>BeginDraw</strong> and <strong>EndDraw</strong> are use to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The <strong>BeginDraw</strong> method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an <strong>{{HRESULT}}</strong> indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing <strong>{{HRESULT}}</strong>. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate <strong>{{HRESULT}}</strong> and error information when <strong>EndDraw</strong> is called. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. </p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the pixel format and alpha mode of the render target. </p> + <p>The pixel format and alpha mode of the render target.</p> + + + + <p>Sets the dots per inch ({{DPI}}) of the render target. </p> + <p>This method specifies the mapping from pixel space to device-independent space for the render target. If both <em>dpiX</em> and <em>dpiY</em> are 0, the factory-read system {{DPI}} is chosen. If one parameter is zero and the other unspecified, the {{DPI}} is not changed.</p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A value greater than or equal to zero that specifies the horizontal {{DPI}} of the render target.</p> </dd> + + + <dd> <p>A value greater than or equal to zero that specifies the vertical {{DPI}} of the render target.</p> </dd> + + + + + <p>Return the render target's dots per inch ({{DPI}}).</p> + <p>This method indicates the mapping from pixel space to device-independent space for the render target. </p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the horizontal {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the vertical {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Returns the size of the render target in device-independent pixels.</p> + <p>The current size of the render target in device-independent pixels.</p> + + + + <p>Returns the size of the render target in device pixels.</p> + <p>The size of the render target in device pixels.</p> + + + + <p>Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.</p> + <p>This method returns the maximum texture size of the Direct3D device.</p><strong>Note</strong>??The software renderer and {{WARP}} devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? + <p> The maximum size, in pixels, of any one bitmap dimension supported by the render target.</p> + + + + <p>Indicates whether the render target supports the specified properties.</p> + <p>This method does not evaluate the {{DPI}} settings specified by the <em>renderTargetProperties</em> parameter.</p> + <p><strong>{{TRUE}}</strong> if the specified render target properties are supported by this render target; otherwise, <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The render target properties to test.</p> </dd> + + + + + <p>Renders to an intermediate texture created by the <strong>CreateCompatibleRenderTarget</strong> method. </p> + <p>An <strong>{{ID2D1BitmapRenderTarget}}</strong> writes to an intermediate texture. It's useful for creating patterns for use with an <strong>{{ID2D1BitmapBrush}}</strong> or caching drawing data that will be used repeatedly. </p><p>To write directly to a {{WIC}} bitmap instead, use the <strong>{{ID2D1Factory::CreateWicBitmapRenderTarget}}</strong> method. This method returns an <strong>{{ID2D1RenderTarget}}</strong> that writes to the specified {{WIC}} bitmap. </p> + + + + <p>Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations. </p> + <p>The {{DPI}} for the <strong>{{ID2D1Bitmap}}</strong> obtained from <strong>GetBitmap</strong> will be the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> when the render target was created. Changing the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> by calling <strong>SetDpi</strong> doesn't affect the {{DPI}} of the bitmap, even if <strong>SetDpi</strong> is called before <strong>GetBitmap</strong>. Using <strong>SetDpi</strong> to change the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> does affect how contents are rendered into the bitmap: it just doesn't affect the {{DPI}} of the bitmap retrieved by <strong>GetBitmap</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the bitmap for this render target. This bitmap can be used for drawing operations. </p> </dd> + + + + + <p>Populates an <strong>{{ID2D1Mesh}}</strong> object with triangles. </p> + + + + <p>Copies the specified triangles to the sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of <strong>{{D2D1_TRIANGLE}}</strong> structures that describe the triangles to add to the sink.</p> </dd> + + + <dd> <p>The number of triangles to copy from the <em>triangles</em> array.</p> </dd> + + + + + <p> Closes the sink and returns its error status.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a geometry resource and defines a set of helper methods for manipulating and measuring geometric shapes. Interfaces that inherit from <strong>{{ID2D1Geometry}}</strong> define specific shapes.</p> + <p>There are several types of Direct2D geometry objects: a simple geometry (<strong>{{ID2D1RectangleGeometry}}</strong>, <strong>{{ID2D1RoundedRectangleGeometry}}</strong>, or <strong>{{ID2D1EllipseGeometry}}</strong>), a path geometry (<strong>{{ID2D1PathGeometry}}</strong>), or a composite geometry (<strong>{{ID2D1GeometryGroup}}</strong> and <strong>{{ID2D1TransformedGeometry}}</strong>).</p><p> Direct2D geometries enable you to describe two-dimensional figures and also offer many uses, such as defining hit-test regions, clip regions, and even animation paths.</p><p>Direct2D geometries are immutable and device-independent resources created by <strong>{{ID2D1Factory}}</strong>. In general, you should create geometries once and retain them for the life of the application, or until they need to be modified. For more information about device-independent and device-dependent resources, see the Resources Overview.</p> + + + + Retrieves the bounds of the geometry. + + + + <p>Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The amount by which to widen the geometry by stroking its outline.</p> </dd> + + + <dd> <p>The style of the stroke that widens the geometry. +</p> </dd> + + + <dd> <p>A transform to apply to the geometry after the geometry is transformed and after the geometry has been stroked.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test for containment. +</p> </dd> + + + <dd> <p>The thickness of the stroke to apply. +</p> </dd> + + + <dd> <p>The style of stroke to apply.</p> </dd> + + + <dd> <p>The transform to apply to the stroked geometry. +</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. +</p> </dd> + + + + + <p>Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test. +</p> </dd> + + + <dd> <p>The transform to apply to the geometry prior to testing for containment, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a <strong>{{BOOL}}</strong> value that is <strong>{{TRUE}}</strong> if the area filled by the geometry contains <em>point</em>; otherwise, <strong>{{FALSE}}</strong>. +You must allocate storage for this parameter.</p> </dd> + + + + + <p>Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance.</p> + <p>When interpreting the returned <em>relation</em> value, it is important to remember that the member <strong>{{D2D1_GEOMETRY_RELATION_IS_CONTAINED}}</strong> of the <strong>{{D2D1_GEOMETRY_RELATION}}</strong> enumeration type means that this geometry is contained inside <em>inputGeometry</em>, not that this geometry contains <em>inputGeometry</em>. </p><p>For more information about how to interpret other possible return values, see <strong>{{D2D1_GEOMETRY_RELATION}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The geometry to test. </p> </dd> + + + <dd> <p>The transform to apply to <em>inputGeometry</em>, or <strong>{{NULL}}</strong>. +</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a value that describes how this geometry is related to <em>inputGeometry</em>. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry.</p> </dd> + + + <dd> <p>The <strong>{{ID2D1TessellationSink}}</strong> to which the tessellated is appended.</p> </dd> + + + + + <p>Combines this geometry with the specified geometry and stores the result in an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the outline of the geometry and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry before computing its area.</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter.</p> </dd> + + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + + + <p>Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry.</p> </dd> + + + <dd> <p>The transform to apply to the geometry before calculating the specified point and tangent.</p> </dd> + + + <dd> <p>The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Widens the geometry by the specified stroke and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines an object that paints an area. Interfaces that derive from <strong>{{ID2D1Brush}}</strong> describe how the area is painted. </p> + <p>An <strong>{{ID2D1BitmapBrush}}</strong> is a device-dependent resource: your application should create bitmap brushes after it initializes the render target with which the bitmap brush will be used, and recreate the bitmap brush whenever the render target needs recreated. (For more information about resources, see Resources Overview.)</p><p>Brush space in Direct2D is specified differently than in {{XPS}} and Windows Presentation Foundation ({{WPF}}). In Direct2D, brush space is not relative to the object being drawn, but rather is the current coordinate system of the render target, transformed by the brush transform, if present. To paint an object as it would be painted by a {{WPF}} brush, you must translate the brush space origin to the upper-left corner of the object's bounding box, and then scale the brush space so that the base tile fills the bounding box of the object.</p><p>For more information about brushes, see the Brushes Overview. </p> + + + + <p>Sets the degree of opacity of this brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> </dd> + + + + + <p> Sets the transformation applied to the brush.</p> + <p>When you paint with a brush, it paints in the coordinate space of the render target. Brushes do not automatically position themselves to align with the object being painted; by default, they begin painting at the origin (0, 0) of the render target. </p><p>You can "move" the gradient defined by an <strong>{{ID2D1LinearGradientBrush}}</strong> to a target area by setting its start point and end point. Likewise, you can move the gradient defined by an <strong>{{ID2D1RadialGradientBrush}}</strong> by changing its center and radii. </p><p>To align the content of an <strong>{{ID2D1BitmapBrush}}</strong> to the area being painted, you can use the <strong>SetTransform</strong> method to translate the bitmap to the desired location. This transform only affects the brush; it does not affect any other content drawn by the render target. </p><p>The following illustrations show the effect of using an <strong>{{ID2D1BitmapBrush}}</strong> to fill a rectangle located at (100, 100). The illustration on the left illustration shows the result of filling the rectangle without transforming the brush: the bitmap is drawn at the render target's origin. As a result, only a portion of the bitmap appears in the rectangle.</p><p>The illustration on the right shows the result of transforming the <strong>{{ID2D1BitmapBrush}}</strong> so that its content is shifted 50 pixels to the right and 50 pixels down. The bitmap now fills the rectangle.</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>The transformation to apply to this brush.</p> </dd> + + + + + <p>Gets the degree of opacity of this brush. </p> + <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> + + + + <p>Gets the transform applied to this brush. </p> + <p>When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform applied to this brush.</p> </dd> + + + + + <p>Represents a Direct2D drawing resource.</p> + + + + <p>Retrieves the factory associated with this resource.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the factory that created this resource. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + <p>An <strong>{{ID2D1Image}}</strong> is abstract. Concrete instances can be created through <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> and <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p><p> Images are evaluated lazily. If the type of image passed in is concrete, then the image can be directly sampled from. Other images can act only as a source of pixels and can produce content only as a result of calling <strong>{{ID2D1DeviceContext::DrawImage}}</strong>.</p> + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + <p>Returns the size, in device-independent pixels ({{DIPs}}), of the bitmap.</p> + <p>A {{DIP}} is 1/96?of an inch. To retrieve the size in device pixels, use the <strong>{{ID2D1Bitmap::GetPixelSize}}</strong> method.</p> + <p>The size, in {{DIPs}}, of the bitmap.</p> + + + + <p>Returns the size, in device-dependent units (pixels), of the bitmap.</p> + <p>The size, in pixels, of the bitmap.</p> + + + + <p>Retrieves the pixel format and alpha mode of the bitmap.</p> + <p>The pixel format and alpha mode of the bitmap.</p> + + + + <p>Return the dots per inch ({{DPI}}) of the bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The horizontal {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The vertical {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Copies the specified region from the specified bitmap into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>.</p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The bitmap to copy from.</p> </dd> + + + <dd> <p>The area of <em>bitmap</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from the specified render target into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>All clips and layers must be popped off of the render target before calling this method. The method returns <strong>{{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}}</strong> if any clips or layers are currently applied to the render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The render target that contains the region to copy.</p> </dd> + + + <dd> <p>The area of <em>renderTarget</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from memory into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. </p><p>If this method is passed invalid input (such as an invalid destination rectangle), can produce unpredictable results, such as a distorted image or device failure.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The data to copy.</p> </dd> + + + <dd> <p>The stride, or pitch, of the source bitmap stored in <em>srcData</em>. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding.</p> </dd> + + + + + <p>Represents an collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes.</p> + + + + + <p>Retrieves the number of gradient stops in the collection.</p> + <p>The number of gradient stops in the collection.</p> + + + + <p>Copies the gradient stops from the collection into an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> + <p>Gradient stops are copied in order of position, starting with the gradient stop with the smallest position value and progressing to the gradient stop with the largest position value.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates the gamma space in which the gradient stops are interpolated. </p> + <p>The gamma space in which the gradient stops are interpolated. </p> + + + + <p>Indicates the behavior of the gradient outside the normalized gradient range. </p> + <p>The behavior of the gradient outside the [0,1] normalized gradient range.</p> + + + + <p>Paints an area with a bitmap.</p> + <p> A bitmap brush is used to fill a geometry with a bitmap. Like all brushes, it defines an infinite plane of content. Because bitmaps are finite, the brush relies on an "extend mode" to determine how the plane is filled horizontally and vertically.</p> + + + + <p>Specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> </dd> + + + + + <p>Specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> </dd> + + + + + <p>Specifies the interpolation mode used when the brush bitmap is scaled or rotated.</p> + <p>This method sets the interpolation mode for a bitmap, which is an enum value that is specified in the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. {{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} represents nearest neighbor filtering. It looks up the nearest bitmap pixel to the current rendering pixel and chooses its exact color. {{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}} represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, bilinear interpolation positions the bitmap more precisely to the application requests, but blurs the bitmap in the process. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The interpolation mode used when the brush bitmap is scaled or rotated.</p> </dd> + + + + + <p>Specifies the bitmap source that this brush uses to paint. </p> + <p>This method specifies the bitmap source that this brush uses to paint. The bitmap is not resized or rescaled automatically to fit the geometry that it fills. The bitmap stays at its native size. To resize or translate the bitmap, use the <strong>SetTransform</strong> method to apply a transform to the brush. </p><p>The native size of a bitmap is the width and height in bitmap pixels, divided by the bitmap {{DPI}}. This native size forms the base tile of the brush. To tile a subregion of the bitmap, you must generate a new bitmap containing this subregion and use <strong>SetBitmap</strong> to apply it to the brush. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap source used by the brush.</p> </dd> + + + + + <p> Gets the method by which the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.</p> + + + + <p> Gets the method by which the brush vertically tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + + + + <p>Gets the interpolation method used when the brush bitmap is scaled or rotated. </p> + <p>This method gets the interpolation mode of a bitmap, which is specified by the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}}</strong> represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process. </p> + <p>The interpolation method used when the brush bitmap is scaled or rotated.</p> + + + + <p> Gets the bitmap source that this brush uses to paint.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address to a reference to the bitmap with which this brush paints.</p> </dd> + + + + + <p>Paints an area with a solid color. </p> + + + + + <p>Specifies the color of this solid color brush. </p> + <p>To help create colors, Direct2D provides the <strong>ColorF</strong> class. It offers several helper methods for creating colors and provides a set or predefined colors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The color of this solid color brush.</p> </dd> + + + + + <p> Retrieves the color of the solid color brush.</p> + <p>The color of this solid color brush.</p> + + + + <p>Paints an area with a linear gradient. </p> + <p>An <strong>{{ID2D1LinearGradientBrush}}</strong> paints an area with a linear gradient along a line between the brush start point and end point. The gradient, defined by the brush <strong>{{ID2D1GradientStopCollection}}</strong>, is extruded perpendicular to this line, and then transformed by a brush transform (if specified). </p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush start point and end point are also transformed. </p><p>It is possible to specify a gradient axis that does not completely fill the area that is being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong>, specified by the <strong>{{ID2D1GradientStopCollection}}</strong>, determines how the remaining area is painted. +</p> + + + + <p>Sets the starting coordinates of the linear gradient in the brush's coordinate space. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Sets the ending coordinates of the linear gradient in the brush's coordinate space.</p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the starting coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p>Retrieves the ending coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p> Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this linear gradient brush.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p> Paints an area with a radial gradient.</p> + <p>The <strong>{{ID2D1RadialGradientBrush}}</strong> is similar to the <strong>{{ID2D1LinearGradientBrush}}</strong> in that they both map a collection of gradient stops to a gradient. However, the linear gradient has a start and an end point to define the gradient vector, while the radial gradient uses an ellipse and a gradient origin to define its gradient behavior. To define the position and size of the ellipse, use the <strong>SetCenter</strong>, <strong>SetRadiusX</strong>, and <strong>SetRadiusY</strong> methods to specify the center, x-radius, and y-radius of the ellipse. The gradient origin is the center of the ellipse, unless a gradient offset is specified by using the <strong>SetGradientOriginOffset</strong> method.</p><p>The brush maps the gradient stop position 0.0f of the gradient origin, and the position 1.0f is mapped to the ellipse boundary. When the gradient origin is within the ellipse, the contents of the ellipse enclose the entire [0, 1] range of the brush gradient stops. If the gradient origin is outside the bounds of the ellipse, the brush still works, but its gradient is not well-defined.</p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps just one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush ellipse and gradient origin are also transformed.</p><p>It is possible to specify an ellipse that does not completely fill area being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong> and setting (specified by the brush <strong>{{ID2D1GradientStopCollection}}</strong>) determines how the remaining area is painted. +</p> + + + + <p>Specifies the center of the gradient ellipse in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The center of the gradient ellipse, in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the offset of the gradient origin relative to the gradient ellipse's center.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The offset of the gradient origin from the center of the gradient ellipse.</p> </dd> + + + + + <p> Specifies the x-radius of the gradient ellipse, in the brush's coordinate space.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The x-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the y-radius of the gradient ellipse, in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The y-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the center of the gradient ellipse. </p> + <p>The center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the offset of the gradient origin relative to the gradient ellipse's center. </p> + <p>The offset of the gradient origin from the center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the x-radius of the gradient ellipse. </p> + <p>The x-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the y-radius of the gradient ellipse. </p> + <p>The y-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this radial gradient brush object.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and additional information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + + + + + <p> Retrieves the type of shape used at the beginning of a stroke. </p> + <p>The type of shape used at the beginning of a stroke.</p> + + + + <p>Retrieves the type of shape used at the end of a stroke. </p> + <p>The type of shape used at the end of a stroke.</p> + + + + <p>Gets a value that specifies how the ends of each dash are drawn. </p> + <p>A value that specifies how the ends of each dash are drawn.</p> + + + + <p>Retrieves the limit on the ratio of the miter length to half the stroke's thickness. </p> + <p>A positive number greater than or equal to 1.0f that describes the limit on the ratio of the miter length to half the stroke's thickness.</p> + + + + <p>Retrieves the type of joint used at the vertices of a shape's outline. </p> + <p>A value that specifies the type of joint used at the vertices of a shape's outline.</p> + + + + <p>Retrieves a value that specifies how far in the dash sequence the stroke will start. </p> + <p>A value that specifies how far in the dash sequence the stroke will start. </p> + + + + <p>Gets a value that describes the stroke's dash pattern. </p> + <p>If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the <strong>GetDashes</strong> method.</p> + <p>A value that describes the predefined dash pattern used, or <strong>{{D2D1_DASH_STYLE_CUSTOM}}</strong> if a custom dash style is used.</p> + + + + <p>Retrieves the number of entries in the dashes array. </p> + <p>The number of entries in the dashes array if the stroke is dashed; otherwise, 0.</p> + + + + <p>Copies the dash pattern to the specified array. </p> + <p>The dashes are specified in units that are a multiple of the stroke width, with subsequent members of the array indicating the dashes and gaps between dashes: the first entry indicates a filled dash, the second a gap, and so on. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array that will receive the dash pattern. The array must be able to contain at least as many elements as specified by <em>dashesCount</em>. You must allocate storage for this array.</p> </dd> + + + <dd> <p>The number of dashes to copy. If this value is less than the number of dashes in the stroke style's dashes array, the returned dashes are truncated to <em>dashesCount</em>. If this value is greater than the number of dashes in the stroke style's dashes array, the extra dashes are set to 0.0f. To obtain the actual number of dashes in the stroke style's dashes array, use the <strong>GetDashesCount</strong> method. </p> </dd> + + + + + <p>Describes a two-dimensional rectangle. </p> + + + + + <p> Retrieves the rectangle that describes the rectangle geometry's dimensions.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Contains a reference to a rectangle that describes the rectangle geometry's dimensions when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Describes a rounded rectangle. </p> + + + + + <p>Retrieves a rounded rectangle that describes this rounded rectangle geometry. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference that receives a rounded rectangle that describes this rounded rectangle geometry. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Represents an ellipse. </p> + + + + + <p>Gets the <strong>{{D2D1_ELLIPSE}}</strong> structure that describes this ellipse geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Represents a composite geometry, composed of other <strong>{{ID2D1Geometry}}</strong> objects. </p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. </p> + + + + <p>Indicates how the intersecting areas of the geometries contained in this geometry group are combined.</p> + <p> A value that indicates how the intersecting areas of the geometries contained in this geometry group are combined. </p> + + + + <p>Indicates the number of geometry objects in the geometry group. </p> + <p>The number of geometries in the <strong>{{ID2D1GeometryGroup}}</strong>.</p> + + + + <p>Retrieves the geometries in the geometry group. </p> + <p>The returned geometries are referenced and counted, and the caller must release them.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an array of geometries to be filled by this method. The length of the array is specified by the <em>geometryCount</em> parameter. If the array is <strong>{{NULL}}</strong>, then this method performs no operation. You must allocate the memory for this array.</p> </dd> + + + <dd> <p>A value indicating the number of geometries to return in the <em>geometries</em> array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to <strong>{{NULL}}</strong>. To obtain the number of geometries currently in the geometry group, use the <strong>GetSourceGeometryCount</strong> method.</p> </dd> + + + + + <p>Represents a geometry that has been transformed. </p> + <p>Using an <strong>{{ID2D1TransformedGeometry}}</strong> rather than transforming a geometry by using a render target's transform enables you to transform a geometry without transforming its stroke.</p> + + + + <p>Retrieves the source geometry of this transformed geometry object. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the source geometry for this transformed geometry object. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the matrix used to transform the <strong>{{ID2D1TransformedGeometry}}</strong> object's source geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Creates a line segment between the current point and the specified end point and adds it to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The end point of the line to draw.</p> </dd> + + + + + Creates a cubic Bezier curve between the current point and the specified end point and adds it to the geometry sink. + + + + <p>Creates a quadratic Bezier curve between the current point and the specified end point.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A structure that describes the control point and the end point of the quadratic Bezier curve to add.</p> </dd> + + + + + <p>Adds a sequence of quadratic Bezier segments as an array in a single call.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of a sequence of quadratic Bezier segments.</p> </dd> + + + <dd> <p>A value indicating the number of quadratic Bezier segments in <em>beziers</em>. </p> </dd> + + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Represents a complex shape that may be composed of arcs, curves, and lines. </p> + <p>An <strong>{{ID2D1PathGeometry}}</strong> object enables you to describe a geometric path. To describe an <strong>{{ID2D1PathGeometry}}</strong> object's path, use the object's <strong>Open</strong> method to retrieve an <strong>{{ID2D1GeometrySink}}</strong>. Use the sink to populate the path geometry with figures and segments. </p> + + + + <p>Retrieves the geometry sink that is used to populate the path geometry with figures and segments. </p> + <p>Because path geometries are immutable and can only be populated once, it is an error to call <strong>Open</strong> on a path geometry more than once.</p><p>Note that the fill mode defaults to <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong>. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Failure to do so will put the geometry sink in an error state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, <em>geometrySink</em> contains the address of a reference to the geometry sink that is used to populate the path geometry with figures and segments. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Copies the contents of the path geometry to the specified <strong>{{ID2D1GeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the number of segments in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of segments in the path geometry when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Retrieves the number of figures in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of figures in the path geometry when this method returns. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Represents a set of vertices that form a list of triangles. </p> + + + + + <p>Opens the mesh for population.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to an <strong>{{ID2D1TessellationSink}}</strong> that is used to populate the mesh. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents the backing store required to render a layer. </p> + <p>To create a layer, call the <strong>CreateLayer</strong> method of the render target where the layer will be used. To draw to a layer, push the layer to the render target stack by calling the <strong>PushLayer</strong> method. After you have finished drawing to the layer, call the <strong>PopLayer</strong> method.</p><p>Between <strong>PushLayer</strong> and <strong>PopLayer</strong> calls, the layer is in use and cannot be used by another render target. </p><p>If the size of the layer is not specified, the corresponding <strong>PushLayer</strong> call determines the minimum layer size, based on the layer content bounds and the geometric mask. The layer resource can be larger than the size required by <strong>PushLayer</strong> without any rendering artifacts.</p><p>If the size of a layer is specified, or if the layer has been used and the required backing store size as calculated during <strong>PushLayer</strong> is larger than the layer, then the layer resource is expanded on each axis monotonically to ensure that it is large enough. The layer resource never shrinks in size.</p> + + + + <p>Gets the size of the layer in device-independent pixels. </p> + <p>The size of the layer in device-independent pixels.</p> + + + + <p>Represents the drawing state of a render target: the antialiasing mode, transform, tags, and text-rendering options. </p> + + + + + <p>Retrieves the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, and tags portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Specifies the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode, transform, and tags portion of the drawing state.</p> </dd> + + + + + <p>Specifies the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text-rendering configuration of the drawing state, or {{NULL}} to use default settings.</p> </dd> + + + + + <p>Retrieves the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an <strong>{{IDWriteRenderingParams}}</strong> object that describes the text-rendering configuration of the drawing state.</p> </dd> + + + + + <p>Renders drawing instructions to a window.</p> + <p>As is the case with other render targets, you must call <strong>BeginDraw</strong> before issuing drawing commands. After you've finished drawing, call <strong>EndDraw</strong> to indicate that drawing is finished and to release access to the buffer backing the render target. For <strong>{{ID2D1HwndRenderTarget}}</strong>, the only side effect of <strong>BeginDraw</strong> is changing the state of the render target to allow drawing commands to be issued. <strong>EndDraw</strong> flushes any batched drawing commands. If no errors have occurred, then it also presents the buffer, causing it to appear on the associated window. Finally, <strong>EndDraw</strong> returns the {{HRESULT}} of the first error that occurred in drawing or presenting, as well as the tag state at the time the error occurred.</p><p><strong>{{ID2D1HwndRenderTarget}}</strong> objects are double buffered, so drawing commands issued do not appear immediately, but rather are performed on an offscreen surface. When <strong>EndDraw</strong> is called, if there have been no rendering errors, the offscreen buffer is presented. If there have been rendering errors in the batch flushed by <strong>EndDraw</strong>, then the buffer is not presented, and the application must call <strong>BeginDraw</strong> and re-draw the frame. <strong>Flush</strong> can be used to check for errors before calling <strong>EndDraw</strong> if an application wants the frame to be presented regardless of errors. </p><p>A hardware render target's back-buffer is the size specified by <strong>GetPixelSize</strong>. If <strong>EndDraw</strong> presents the buffer, this bitmap is stretched to cover the surface where it is presented: the entire client area of the window. This stretch is performed using bilinear filtering if the render target is rendering in hardware and using nearest-neighbor filtering if the rendering target is using software. (Typically, an application will call <strong>Resize</strong> to ensure the pixel size of the render target and the pixel size of the destination match, and no scaling is necessary, though this is not a requirement.) </p><p>In the case where a window straddles adapters, Direct2D ensures that the portion of the off-screen render target is copied from the adapter where rendering is occurring to the adapter that needs to display the contents. If the adapter a render target is on has been removed or the driver upgraded while the application is running, this is returned as an error in the <strong>EndDraw</strong> call. In this case, the application should create a new render target and resources as necessary. +</p> + + + + <p>Indicates whether the {{HWND}} associated with this render target is occluded. </p> + <strong>Note</strong>??If the window was occluded the last time that <strong>EndDraw</strong> was called, the next time that the render target calls <strong>CheckWindowState</strong>, it will return <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to determine the current window state, you should call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This call will ensure that your next call to <strong>CheckWindowState</strong> state will return the actual window state.? + <p>A value that indicates whether the {{HWND}} associated with this render target is occluded.</p> + + + + Changes the size of the render target to the specified pixel size. + <p>After this method is called, the contents of the render target's back-buffer are not defined, even if the <strong>{{D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS}}</strong> option was specified when the render target was created.</p> + + + + <p> Returns the {{HWND}} associated with this render target.</p> + <p>The {{HWND}} associated with this render target.</p> + + + + <p>Provides access to an device context that can accept {{GDI}} drawing commands. </p> + <p>You don't create an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> object directly; instead, you use the <strong>QueryInterface</strong> method of an existing render target instance to provide an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> version of that render target. </p><p>Not all render targets support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface. The render target must be {{GDI}}-compatible (the <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> flag was specified when creating the render target), use the {{DXGI_FORMAT_B8G8R8A8_UNORM}} pixel format, and use the <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong> alpha mode.</p><p>Note that the <strong>QueryInterface</strong> method always succeeds; if the render target doesn't support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, calling <strong>GetDC</strong> will fail. (For render targets created through the <strong>CreateCompatibleRenderTarget</strong> method, the render target that created it must have these settings.) </p><p>To test whether a given render target supports the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}} </strong>that specifies {{GDI}} compatibility and the appropriate pixel format, then call the render target's <strong>IsSupported</strong> method to see whether the render target is {{GDI}}-compatible. </p> + + + + <p>Retrieves the device context associated with this render target. </p> + <p>Calling this method flushes the render target.</p><p>This command can be called only after <strong>BeginDraw</strong> and before <strong>EndDraw</strong>. </p><strong>Note</strong>??In Windows?7 and earlier, you should not call <strong>GetDC</strong> between <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> commands or between <strong>PushLayer</strong>/<strong>PopLayer</strong>. However, this restriction does not apply to Windows?8 and later.?<p> <strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the device context should be cleared.</p> </dd> + + + <dd> <p>When this method returns, contains the device context associated with this render target. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Indicates that drawing with the device context retrieved using the <strong>GetDC</strong> method is finished. </p> + <p><strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Issues drawing commands to a {{GDI}} device context. </p> + + + + + <p> Binds the render target to the device context to which it issues drawing commands.</p> + <p>Before you can render with the {{DC}} render target, you must use its <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. You do this each time you use a different {{DC}}, or the size of the area you want to draw to changes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The device context to which the render target issues drawing commands.</p> </dd> + + + <dd> <p>The dimensions of the handle to a device context ({{HDC}}) to which the render target is bound. </p> </dd> + + + + + <p>Creates a factory object that can be used to create Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface provides the starting point for Direct2D. In general, objects created from a single instance of a factory object can be used with other resources created from that instance, but not with resources created by other factory instances. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The threading model of the factory and the resources it creates.</p> </dd> + + + <dd> <p>A reference to the {{IID}} of <strong>{{ID2D1Factory}}</strong> that is obtained by using __uuidof({{ID2D1Factory}}).</p> </dd> + + + <dd> <p>The level of detail provided to the debugging layer.</p> </dd> + + + <dd> <p>When this method returns, contains the address to a reference to the new factory.</p> </dd> + + + + + <p>Creates a rotation transformation that rotates by the specified angle about the specified point.</p> + <p>Rotation occurs in the plane of the 2-D surface.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The clockwise rotation angle, in degrees. </p> </dd> + + + <dd> <p>The point about which to rotate.</p> </dd> + + + <dd> <p>When this method returns, contains the new rotation transformation. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a skew transformation that has the specified x-axis angle, y-axis angle, and center point. </p> + <p>This function does not return a value.</p> + + + <dd> <p>The x-axis skew angle, which is measured in degrees counterclockwise from the y-axis.</p> </dd> + + + <dd> <p>The y-axis skew angle, which is measured in degrees counterclockwise from the x-axis.</p> </dd> + + + <dd> <p>The center point of the skew operation.</p> </dd> + + + <dd> <p>When this method returns, contains the rotation transformation. You must allocate storate for this parameter.</p> </dd> + + + + + <p>Indicates whether the specified matrix is invertible.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to test.</p> </dd> + + + + + <p>Tries to invert the specified matrix.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to invert.</p> </dd> + + + + + <p>Specifies the color context types.</p> + + + <dd> <p>An uninitialized color context.</p> </dd> + + + <dd> <p>A color context that is a full {{ICC}} color profile.</p> </dd> + + + <dd> <p>A color context that is one of a number of set color spaces (sRGB, AdobeRGB) that are defined in the {{EXIF}} specification.</p> </dd> + + + + + <p>Specifies the desired cache usage.</p> + <p>The <strong>CreateBitmap</strong> of the <strong>{{IWICImagingFactory}}</strong> interface does not support {{WICBitmapNoCache}} when the <em>pixelFormat</em> is a native pixel format provided by Windows Imaging Component ({{WIC}}).</p> + + + <dd> <p>Do not cache the bitmap.</p> </dd> + + + <dd> <p>Cache the bitmap when needed.</p> </dd> + + + <dd> <p>Cache the bitmap at initialization.</p> </dd> + + + + + <p>Specifies decode options.</p> + + + <dd> <p>Cache metadata when needed.</p> </dd> + + + <dd> <p>Cache metadata when decoder is loaded.</p> </dd> + + + + + <p>Specifies the cache options available for an encoder.</p> + + + <dd> <p>The encoder is cached in memory. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is cached to a temporary file. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is not cached.</p> </dd> + + + + + <p>Specifies the type of Windows Imaging Component ({{WIC}}) component.</p> + + + <dd> <p>A {{WIC}} decoder.</p> </dd> + + + <dd> <p>A {{WIC}} encoder.</p> </dd> + + + <dd> <p>A {{WIC}} pixel converter.</p> </dd> + + + <dd> <p>A {{WIC}} metadata reader.</p> </dd> + + + <dd> <p>A {{WIC}} metadata writer.</p> </dd> + + + <dd> <p>A {{WIC}} pixel format.</p> </dd> + + + <dd> <p>All {{WIC}} components.</p> </dd> + + + + + <p>Specifies component enumeration options.</p> + + + <dd> <p>Enumerate any components that are not disabled. Because this value is 0x0, it is always included with the other options.</p> </dd> + + + <dd> <p>Force a read of the registry before enumerating components.</p> </dd> + + + <dd> <p>Include disabled components in the enumeration. The set of disabled components is disjoint with the set of default enumerated components</p> </dd> + + + <dd> <p>Include unsigned components in the enumeration. This option has no effect.</p> </dd> + + + <dd> <p>At the end of component enumeration, filter out any components that are not Windows provided.</p> </dd> + + + + + <p>Specifies the sampling or filtering mode to use when scaling an image.</p> + + + <dd> <p>A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation. </p> <p>The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.</p> </dd> + + + <dd> <p>A bilinear interpolation algorithm. </p> <p>The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid.</p> </dd> + + + <dd> <p>A bicubic interpolation algorithm. </p> <p>Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid. </p> </dd> + + + <dd> <p>A Fant resampling algorithm. </p> <p>Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel.</p> </dd> + + + <dd> <p>A high quality bicubic interpolation algorithm. Destination pixel values are computed using a much denser sampling kernel than regular cubic. The kernel is resized in response to the scale factor, making it suitable for downscaling by factors greater than 2.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? </dd> + + + + + <p>Specifies the type of palette used for an indexed image format.</p> + + + <dd> <p>An arbitrary custom palette provided by caller.</p> </dd> + + + <dd> <p>An optimal palette generated using a median-cut algorithm. Derived from the colors in an image.</p> </dd> + + + <dd> <p>A black and white palette.</p> </dd> + + + <dd> <p>A palette that has its 8-color on-off primaries and the 16 system colors added. With duplicates removed, 16 colors are available.</p> </dd> + + + <dd> <p>A palette that has 3 intensity levels of each primary: 27-color on-off primaries and the 16 system colors added. With duplicates removed, 35 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 intensity levels of each primary: 64-color on-off primaries and the 16 system colors added. With duplicates removed, 72 colors are available.</p> </dd> + + + <dd> <p>A palette that has 5 intensity levels of each primary: 125-color on-off primaries and the 16 system colors added. With duplicates removed, 133 colors are available.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteFixedHalftoneWeb}}</strong>.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteTypeFixedHalftone216}}</strong>.</p> </dd> + + + <dd> <p>A palette that has its 252-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has its 256-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 16 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 256 shades of gray.</p> </dd> + + + + + <p>Specifies the type of {{dither}} algorithm to apply when converting between image formats.</p> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A 4x4 ordered dither algorithm. </p> </dd> + + + <dd> <p>An 8x8 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 16x16 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 spiral dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An error diffusion algorithm.</p> </dd> + + + + + <p>Specifies the desired alpha channel usage.</p> + + + <dd> <p>Use alpha channel.</p> </dd> + + + <dd> <p>Use a pre-multiplied alpha channel.</p> </dd> + + + <dd> <p>Ignore alpha channel.</p> </dd> + + + <dd> <p>Sentinel value.</p> </dd> + + + + + <p>Specifies the flip and rotation transforms.</p> + + + <dd> <p>A rotation of 0 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 90 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 180 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 270 degrees.</p> </dd> + + + <dd> <p>A horizontal flip. Pixels are flipped around the vertical y-axis.</p> </dd> + + + <dd> <p>A vertical flip. Pixels are flipped around the horizontal x-axis.</p> </dd> + + + + + <p>Specifies access to an <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Specifies the capabilities of the decoder.</p> + + + <dd> <p>Decoder recognizes the image was encoded with an encoder produced by the same vendor. </p> <p></p> </dd> + + + <dd> <p>Decoder can decode all the images within an image container.</p> </dd> + + + <dd> <p>Decoder can decode some of the images within an image container.</p> </dd> + + + <dd> <p>Decoder can enumerate the metadata blocks within a container format.</p> </dd> + + + <dd> <p>Decoder can find and decode a thumbnail.</p> </dd> + + + + + <p>Specifies the progress operations to receive notifications for.</p> + + + <dd> <p>Receive copy pixel operation.</p> </dd> + + + <dd> <p>Receive write pixel operation.</p> </dd> + + + <dd> <p>Receive all progress operations available.</p> </dd> + + + + + <p>Specifies when the progress notification callback should be called.</p> + + + <dd> <p>The callback should be called when codec operations begin.</p> </dd> + + + <dd> <p>The callback should be called when codec operations end.</p> </dd> + + + <dd> <p>The callback should be called frequently to report status.</p> </dd> + + + <dd> <p>The callback should be called on all available progress notifications.</p> </dd> + + + + + <p>Specifies the component signing status.</p> + + + <dd> <p>A signed component.</p> </dd> + + + <dd> <p>An unsigned component</p> </dd> + + + <dd> <p>A component is safe. </p> <p>Components that do not have a binary component to sign, such as a pixel format, should return this value.</p> </dd> + + + <dd> <p>A component has been disabled.</p> </dd> + + + + + <p>Specifies the logical screen descriptor properties for Graphics Interchange Format ({{GIF}}) metadata.</p> + + + <dd> <p> [{{VT_UI1}} | {{VT_VECTOR}}] Indicates the signature property.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the width in pixels. </p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the height in pixels. </p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the global color table flag. <strong>{{TRUE}}</strong> if a global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the color resolution in bits per pixel.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the table is sorted; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the index within the color table to use for the background (pixels not defined in the image).</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the factor used to compute an approximation of the aspect ratio.</p> </dd> + + + + + <p>Specifies the image descriptor metadata properties for Graphics Interchange Format ({{GIF}}) frames.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the X offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the Y offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates width of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates height of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the local color table flag. <strong>{{TRUE}}</strong> if global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the interlace flag. <strong>{{TRUE}}</strong> if image is interlaced; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the color table is sorted from most frequently to least frequently used color; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + + + <p>Specifies the graphic control extension metadata properties that define the transitions between each frame animation for Graphics Interchange Format ({{GIF}}) images.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the disposal requirements. 0 - no disposal, 1 - do not dispose, 2 - restore to background color, 3 - restore to previous.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the user input flag. <strong>{{TRUE}}</strong> if user input should advance to the next frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the transparency flag. <strong>{{TRUE}}</strong> if a transparent color in is in the color table for this frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates how long to display the next frame before advancing to the next frame, in units of 1/100th of a second.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates which color in the palette should be treated as transparent.</p> </dd> + + + + + <p>Specifies the application extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates a string that identifies the application.</p> </dd> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates data that is exposed by the application.</p> </dd> + + + + + <p>Specifies the comment extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} comment properties.</p> + + + <dd> <p>Indicates the metadata property is comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} luminance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a luminance table.</p> </dd> + + + + + <p>Specifies the {{JPEG}} chrominance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a chrominance table.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UNKNOWN}}] The {{IPTC}} block embedded in this 8BIM {{IPTC}} block.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIMResolutionInfo block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The horizontal resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the horizontal resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image width is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The vertical resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the vertical resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image height is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} digest metadata block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_BLOB}}] The embedded {{IPTC}} digest value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) gAMA chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the gamma value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) background (bKGD) chunk metadata properties.</p> + + + <dd> <p>Indicates the background color. There are three possible types, depending on the image's pixel format.</p> <p></p> <dl> <dt>{{VT_UI1}}</dt> <dd> <p>Specifies the index of the background color in an image with an indexed pixel format.</p> </dd> <dt>{{VT_UI2}}</dt> <dd> <p>Specifies the background color in a grayscale image.</p> </dd> <dt>{{VT_VECTOR}}|{{VT_UI2}}</dt> <dd> <p>Specifies the background color in an {{RGB}} image as three {{USHORT}} values: {0x<em>{{RRRR}}</em>, 0x<em>{{GGGG}}</em>, 0x<em>{{BBBB}}</em>}.</p> </dd> </dl> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iTXT chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the keywords in the iTXT metadata chunk.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates whether the text in the iTXT chunk is compressed. 1 if the text is compressed; otherwise, 0.</p> </dd> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the human language used by the translated keyword and the text.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates a translation of the keyword into the language indicated by the language tag.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates additional text in the iTXT metadata chunk.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) cHRM chunk metadata properties for {{CIE}} {{XYZ}} chromaticity.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue y value ratio.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) hIST chunk metadata properties.</p> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI2}}] Indicates the approximate usage frequency of each color in the color palette. </p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iCCP chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the International Color Consortium ({{ICC}}) profile name.</p> </dd> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI1}}] Indicates the embedded {{ICC}} profile.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) sRGB chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the rendering intent for an sRGB color space image. The rendering intents have the following meaning.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td>0</td><td>Perceptual</td></tr> <tr><td>1</td><td>Relative colorimetric</td></tr> <tr><td>2</td><td>Saturation</td></tr> <tr><td>3</td><td>Absolute colorimetric</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) tIME chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the year of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the month of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates day of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the hour of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the minute of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the second of the last modification.</p> </dd> + + + + + <p>Specifies the access level of a Windows Graphics Device Interface ({{GDI}}) section.</p> + + + <dd> <p>Indicates a read only access level.</p> </dd> + + + <dd> <p>Indicates a read/write access level.</p> </dd> + + + + + + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies additional options to an <strong>{{IWICPlanarBitmapSourceTransform}}</strong> implementation. </p> + + + + <p>Specifies the options for indexing a {{JPEG}} image. </p> + + + <dd> <p>Index generation is deferred until <strong>{{IWICBitmapSource::CopyPixels}}</strong> is called on the image.</p> </dd> + + + <dd> <p>Index generation is performed when the when the image is initially loaded.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies conversion matrix from Y'Cb'Cr' to R'G'B'. </p> + + + <dd> <p>Specifies the identity transfer matrix.</p> </dd> + + + <dd> <p>Specifies the {{BT601}} transfer matrix.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the memory layout of pixel data in a {{JPEG}} image scan. </p> + + + <dd> <p>The pixel data is stored in an interleaved memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a planar memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a progressive layout.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the Tagged Image File Format ({{TIFF}}) compression options.</p> + + + <dd> <p>Indicates a suitable compression algorithm based on the image and pixel format.</p> </dd> + + + <dd> <p>Indicates no compression.</p> </dd> + + + <dd> <p>Indicates a {{CCITT3}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{CCITT4}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{LZW}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates a {{RLE}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{ZIP}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates an {{LZWH}} differencing algorithm.</p> </dd> + + + + + <p>Specifies the {{JPEG}} {{YCrCB}} subsampling options. </p> + <p>The native {{JPEG}} encoder uses <strong>{{WICJpegYCrCbSubsampling420}}</strong>.</p> + + + <dd> <p>The default subsampling option. </p> </dd> + + + <dd> <p>Subsampling option that uses both horizontal and vertical decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses horizontal decimation .</p> </dd> + + + <dd> <p>Subsampling option that uses no decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses 2x vertical downsampling only. This option is only available in Windows?8.1 and later.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) filters available for compression optimization.</p> + + + <dd> <p>Indicates an unspecified {{PNG}} filter. This enables {{WIC}} to algorithmically choose the best filtering option for the image.</p> </dd> + + + <dd> <p>Indicates no {{PNG}} filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} sub filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} up filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} average filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} paeth filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} adaptive filter. This enables {{WIC}} to choose the best filtering mode on a per-scanline basis.</p> </dd> + + + + + <p>Specifies named white balances for raw images.</p> + + + <dd> <p>The default white balance.</p> </dd> + + + <dd> <p>A daylight white balance.</p> </dd> + + + <dd> <p>A cloudy white balance.</p> </dd> + + + <dd> <p>A shade white balance.</p> </dd> + + + <dd> <p>A tungsten white balance.</p> </dd> + + + <dd> <p>A fluorescent white balance.</p> </dd> + + + <dd> <p>Daylight white balance.</p> </dd> + + + <dd> <p>A flash white balance.</p> </dd> + + + <dd> <p>A custom white balance. This is typically used when using a picture (grey-card) as white balance.</p> </dd> + + + <dd> <p>An automatic balance.</p> </dd> + + + <dd> <p>An "as shot" white balance.</p> </dd> + + + + + <p>Specifies the capability support of a raw image.</p> + + + <dd> <p>The capability is not supported.</p> </dd> + + + <dd> <p>The capability supports only get operations.</p> </dd> + + + <dd> <p>The capability supports get and set operations.</p> </dd> + + + + + <p>Specifies the rotation capabilities of the codec.</p> + + + <dd> <p>Rotation is not supported.</p> </dd> + + + <dd> <p>Set operations for rotation is not supported.</p> </dd> + + + <dd> <p>90 degree rotations are supported.</p> </dd> + + + <dd> <p>All rotation angles are supported.</p> </dd> + + + + + <p>Specifies the parameter set used by a raw codec.</p> + + + <dd> <p>An as shot parameter set.</p> </dd> + + + <dd> <p>A user adjusted parameter set.</p> </dd> + + + <dd> <p>A codec adjusted parameter set.</p> </dd> + + + + + <p>Specifies the render intent of the next <strong>CopyPixels</strong> call. </p> + + + + <p>Specifies the dimension type of the data contained in {{DDS}} image.</p> + <p>Both <strong>{{WICDdsTexture2d}}</strong> and <strong>{{WICDdsTextureCube}}</strong> correspond to <strong>{{D3D11_RESOURCE_DIMENSION_TEXTURE2D}}</strong>. When using <strong>{{ID3D11Device::CreateTexture2D}}</strong>, they are distinguished by the flag <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> in the structure <strong>{{D3D11_TEXTURE2D_DESC}}</strong>.</p> + + + <dd> <p>{{DDS}} image contains a 1-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 2-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 3-dimensional texture . </p> </dd> + + + <dd> <p>The {{DDS}} image contains a cube texture represented as an array of 6 faces. </p> </dd> + + + + + <p>Specifies the the meaning of pixel color component values contained in the {{DDS}} image.</p> + + + <dd> <p>Alpha behavior is unspecified and must be determined by the reader.</p> </dd> + + + <dd> <p>The alpha data is straight.</p> </dd> + + + <dd> <p>The alpha data is premultiplied.</p> </dd> + + + <dd> <p>The alpha data is opaque ({{UNORM}} value of 1). This can be used by a compliant reader as a performance optimization. For example, blending operations can be converted to copies.</p> </dd> + + + <dd> <p>The alpha channel contains custom data that is not alpha.</p> </dd> + + + + + <p>Represents a rectangle for Windows Imaging Component ({{WIC}})?{{API}}.</p> + + + <dd> <p>The horizontal coordinate of the rectangle.</p> </dd> + + + <dd> <p>The vertical coordinate of the rectangle.</p> </dd> + + + <dd> <p>The width of the rectangle.</p> </dd> + + + <dd> <p>The height of the rectangle.</p> </dd> + + + + + <p>Contains members that identify a pattern within an image file which can be used to identify a particular format.</p> + + + <dd> <p>The offset the pattern is located in the file.</p> </dd> + + + <dd> <p>The pattern length.</p> </dd> + + + <dd> <p>The actual pattern.</p> </dd> + + + <dd> <p>The pattern mask.</p> </dd> + + + <dd> <p>The end of the stream.</p> </dd> + + + + + <p>This defines parameters that you can use to override the default parameters normally used when encoding an image. </p> + <p>If this parameter is not passed to the encoding {{API}}, the encoder uses these settings.</p><ul> <li>A pixel format of (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>).</li> <li>An x and y {{DPI}} of 96.</li> <li>The entire image bounds will be used for encoding.</li> </ul><strong>Note</strong>??The parameters as specified can't result in a scale. The encoder can use a larger portion of the input image based on the passed in {{DPI}} and the pixel width and height.? + + + <dd> <p>The pixel format to which the image is processed before it is written to the encoder.</p> </dd> + + + <dd> <p>The {{DPI}} in the x dimension.</p> </dd> + + + <dd> <p>The {{DPI}} in the y dimension.</p> </dd> + + + <dd> <p>The top corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The left corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The width in pixels of the part of the image to write.</p> </dd> + + + <dd> <p>The height in pixels of the part of the image to write.</p> </dd> + + + + + <p>Specifies the pixel format and size of a component plane.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Component width of the plane.</p> </dd> + + + <dd> <p>Component height of the plane.</p> </dd> + + + + + <p>Specifies the pixel format, buffer, stride and size of a component plane for a planar pixel format.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Pointer to the buffer that holds the plane?s pixel components.</p> </dd> + + + <dd> <p>The stride of the buffer ponted to by <em>pbData</em>. Stride indicates the total number of bytes to go from the beginning of one scanline to the beginning of the next scanline.</p> </dd> + + + <dd> <p>The total size of the buffer pointed to by <em>pbBuffer</em>.</p> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the frame header for an image by calling <strong>{{IWICJpegFrameDecode::GetFrameHeader}}</strong>.</p> + + + <dd> <p>The width of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The height of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The transfer matrix of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The scan type of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The number of components in the frame.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The sample factors. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_SAMPLE_FACTORS_ONE}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_420}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_422}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_440}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_444}}</li> </ul> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_ONE}}</li> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_THREE}} </li> </ul> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the scan header for an image by calling <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> + + + <dd> <p>The number of components in the scan.</p> </dd> + + + <dd> <p>The interval of reset markers within the scan.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_HUFFMAN_BASELINE_ONE}}</li> <li>{{WIC_JPEG_HUFFMAN_BASELINE_THREE}} </li> </ul> </dd> + + + <dd> <p>The start of the spectral selection.</p> </dd> + + + <dd> <p>The end of the spectral selection.</p> </dd> + + + <dd> <p>The successive approximation high.</p> </dd> + + + <dd> <p>The successive approximation low.</p> </dd> + + + + + <p>Defines raw codec capabilites.</p> + + + <dd> <p>Size of the <strong>{{WICRawCapabilitiesInfo}}</strong> structure.</p> </dd> + + + <dd> <p>The codec's major version.</p> </dd> + + + <dd> <p>The codec's minor version.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of exposure compensation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of contrast support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of {{RGB}} white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICNamedWhitePoint}}</strong> support.</p> </dd> + + + <dd> <p>The <strong>{{WICNamedWhitePoint}}</strong> mask.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of kelvin white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of gamma support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tint support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of saturation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of sharpness support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of noise reduction support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of destination color profile support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tone curve support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawRotationCapabilities}}</strong> of rotation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICRawRenderMode}}</strong> support.</p> </dd> + + + + + <p>Represents a raw image tone curve point.</p> + + + <dd> <p>The tone curve input.</p> </dd> + + + <dd> <p>The tone curve output.</p> </dd> + + + + + <p>Represents a raw image tone curve.</p> + + + <dd> <p>The number of tone curve points.</p> </dd> + + + <dd> <p>The array of tone curve points.</p> </dd> + + + + + <p>Specifies the {{DDS}} image dimension, <strong>{{DXGI_FORMAT}}</strong> and alpha mode of contained data.</p> + + + + <p>Specifies the <strong>{{DXGI_FORMAT}}</strong> and block information of a {{DDS}} format.</p> + + + + <p>Defines methods that add the concept of writeability and static in-memory representations of bitmaps to <strong>{{IWICBitmapSource}}</strong>. </p> + <p><strong>{{IWICBitmap}}</strong> inherits from <strong>{{IWICBitmapSource}}</strong> and therefore also inherits the <strong>CopyPixels</strong> method. When pixels need to be moved to a new memory location, <strong>CopyPixels</strong> is often the most efficient. </p><p> Because of to the internal memory representation implied by the <strong>{{IWICBitmap}}</strong>, in-place modification and processing using the <strong>Lock</strong> is more efficient than <strong>CopyPixels</strong>, usually reducing to a simple reference access directly into the memory owned by the bitmap rather than a as a copy. This is contrasted to procedural bitmaps which implement only <strong>CopyPixels</strong> because there is no internal memory representation and one would need to be created on demand to satisfy a call to <strong>Lock</strong>. </p> + + + + <p>Provides access to a rectangular area of the bitmap.</p> + <p>Locks are exclusive for writing but can be shared for reading. You cannot call <strong>CopyPixels</strong> while the <strong>{{IWICBitmap}}</strong> is locked for writing. Doing so will return an error, since locks are exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to be accessed.</p> </dd> + + + <dd> <p>The access mode you wish to obtain for the lock. This is a bitwise combination of <strong>{{WICBitmapLockFlags}}</strong> for read, write, or read and write access.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockRead}}</strong></dt> </dl> </td><td> <p>The read access lock.</p> </td></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockWrite}}</strong></dt> </dl> </td><td> <p>The write access lock.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference that receives the locked memory location.</p> </dd> + + + + + <p>Provides access for palette modifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + + + <p>Changes the physical resolution of the image.</p> + <p> This method has no effect on the actual pixels or samples stored in the bitmap. Instead the interpretation of the sampling rate is modified. This means that a 96 {{DPI}} image which is 96 pixels wide is one inch. If the physical resolution is modified to 48 {{DPI}}, then the bitmap is considered to be 2 inches wide but has the same number of pixels. If the resolution is less than <strong>{{REAL_EPSILON}}</strong> (1.192092896e-07F) the error code <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong> is returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution.</p> </dd> + + + <dd> <p>The vertical resolution.</p> </dd> + + + + + <p>Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.</p> + <p>This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and scalers. Components that implement this interface can be connected together in a graph to pull imaging data through.</p><p>This interface defines only the notion of readability or being able to produce pixels. Modifying or writing to a bitmap is considered to be a specialization specific to bitmaps which have storage and is defined in the descendant interface <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Retrieves the pixel width and height of the bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel width of the bitmap.</p> </dd> + + + <dd> <p>A reference that receives the pixel height of the bitmap</p> </dd> + + + + + <p>Retrieves the pixel format of the bitmap source.. </p> + <p> The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the pixel format {{GUID}} the bitmap is stored in. For a list of available pixel formats, see the Native Pixel Formats topic.</p> </dd> + + + + + <p>Specifies the viewport/stencil and render target associated with a view instance.</p> + <p>The values specified in a view instance location structure can be added to ViewportArrayIndex and RenderTargetArrayIndex values output by the shader prior to rasterization to compute the final effective index of the viewport and render target to send primitives to. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in a {{PSO}} to the same value to act as a uniform base value for all views.</p> + + + <dd> <p> The index of the viewport in the viewports array to be used by the view instance associated with this location. </p> </dd> + + + <dd> <p> The index of the render target in the render targets array to be used by the view instance associated with this location. </p> </dd> + + + + + <p>Retrieves the sampling rate between pixels and physical world measurements.</p> + <p> Some formats, such as {{GIF}} and {{ICO}}, do not have full {{DPI}} support. For {{GIF}}, this method calculates the {{DPI}} values from the aspect ratio, using a base {{DPI}} of (96.0, 96.0). The {{ICO}} format does not support {{DPI}} at all, and the method always returns (96.0,96.0) for {{ICO}} images. </p><p> Additionally, {{WIC}} itself does not transform images based on the {{DPI}} values in an image. It is up to the caller to transform an image based on the resolution returned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the x-axis dpi resolution.</p> </dd> + + + <dd> <p>A reference that receives the y-axis dpi resolution.</p> </dd> + + + + + <p>Retrieves the color table for indexed pixel formats.</p> + <p> If the <strong>{{IWICBitmapSource}}</strong> is an <strong>{{IWICBitmapFrameDecode}}</strong>, the function may return the image's global palette if a frame-level palette is not available. The global palette may also be retrieved using the <strong>CopyPalette</strong> method. </p> + <p>Returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_PALETTEUNAVAILABLE}}</strong></dt> </dl> </td><td> <p>The palette was unavailable.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The palette was successfully copied.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{IWICPalette}}</strong>. A palette can be created using the <strong>CreatePalette</strong> method.</p> </dd> + + + + + <p>Instructs the object to produce pixels.</p> + <p><strong>CopyPixels</strong> is one of the two main image processing routines (the other being <strong>Lock</strong>) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a {{JPEG}} stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface. </p><p> The caller can restrict the operation to a rectangle of interest ({{ROI}}) using the prc parameter. The {{ROI}} sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a <strong>{{NULL}}</strong> {{ROI}} implies that the whole bitmap should be returned. +</p><p> The caller controls the memory management and must provide an output buffer (<em>pbBuffer</em>) for the results of the copy along with the buffer's bounds (<em>cbBufferSize</em>). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method. </p><p> If the caller needs to perform numerous copies of an expensive <strong>{{IWICBitmapSource}}</strong> such as a {{JPEG}}, it is recommended to create an in-memory <strong>{{IWICBitmap}}</strong> first. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy. A <strong>{{NULL}}</strong> value specifies the entire bitmap.</p> </dd> + + + <dd> <p>The stride of the bitmap</p> </dd> + + + <dd> <p>The size of the buffer.</p> </dd> + + + <dd> <p>A reference to the buffer.</p> </dd> + + + + + <p>Exposes methods for accessing and building a color table, primarily for indexed pixel formats.</p> + <p>If the <strong>{{WICBitmapPaletteType}}</strong> is not <strong>{{WICBitmapPaletteCustom}}</strong>, then the colors are automatically generated based on the table above. If the user subsequently changes a color palette entry the {{WICBitmapPalette}} is set to Custom by that action.</p><p> <strong>InitializeFromBitmap</strong>'s <em>fAddTransparentColor</em> parameter will add a transparent color to the end of the color collection if its size if less than 256, otherwise index 255 will be replaced with the transparent color. If a pre-defined palette type is used, it will change to BitmapPaletteTypeCustom since it no longer matches the predefined palette.</p><p>The palette interface is an auxiliary imaging interface in that it does not directly concern bitmaps and pixels; rather it provides indexed color translation for indexed bitmaps. For an indexed pixel format with M bits per pixels: (The number of colors in the palette) greater than 2^M.</p><p>Traditionally the basic operation of the palette is to provide a translation from a byte (or smaller) index into a 32bpp color value. This is often accomplished by a 256 entry table of color values.</p> + + + + <p>Initializes the palette to one of the pre-defined palettes specified by <strong>{{WICBitmapPaletteType}}</strong> and optionally adds a transparent color.</p> + <p>If a transparent color is added to a palette, the palette is no longer predefined and is returned as <strong>{{WICBitmapPaletteTypeCustom}}</strong>. For palettes with less than 256 entries, the transparent entry is added to the end of the palette (that is, a 16-color palette becomes a 17-color palette). For palettes with 256 colors, the transparent palette entry will replace the last entry in the pre-defined palette. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>InitializeCustom</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes a palette using a computed optimized values based on the reference bitmap.</p> + <p> The resulting palette contains the specified number of colors which best represent the colors present in the bitmap. The algorithm operates on the opaque {{RGB}} color value of each pixel in the reference bitmap and hence ignores any alpha values. If a transparent color is required, set the fAddTransparentColor parameter to <strong>{{TRUE}}</strong> and one fewer optimized color will be computed, reducing the <em>colorCount</em>, and a fully transparent color entry will be added. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source bitmap.</p> </dd> + + + <dd> <p>The number of colors to initialize the palette with.</p> </dd> + + + <dd> <p>A value to indicate whether to add a transparent color.</p> </dd> + + + + + <p>Initialize the palette based on a given palette.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source palette.</p> </dd> + + + + + <p>Retrieves the <strong>{{WICBitmapPaletteType}}</strong> that describes the palette. </p> + <p><strong>{{WICBitmapPaletteCustom}}</strong> is used for palettes initialized from both <strong>InitializeCustom</strong> and <strong>InitializeFromBitmap</strong>. There is no distinction is made between optimized and custom palettes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetColorCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Fills out the supplied color array with the colors from the internal color table. The color array should be sized according to the return results from <strong>GetColorCount</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value that describes whether the palette is black and white.</p> + <p>A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is black and white. <strong>{{TRUE}}</strong> indicates that the palette is black and white; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value that describes whether a palette is grayscale.</p> + <p>A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is grayscale. <strong>{{TRUE}}</strong> indicates that the palette is grayscale; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Proxy function for the <strong>HasAlpha</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Determines if the source pixel format can be converted to the destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source pixel format.</p> </dd> + + + <dd> <p>The destionation pixel format.</p> </dd> + + + <dd> <p>A reference that receives a value indicating whether the source pixel format can be converted to the destination pixel format.</p> </dd> + + + + + <p>Allows a format converter to be initialized with a planar source. You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICFormatConverter}}</strong>.</p> + + + + <p>Initializes a format converter with a planar source, and specifies the interleaved output pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of <strong>{{IWICBitmapSource}}</strong> that represents image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Query if the format converter can convert from one format to another.</p> + <p>To specify an interleaved input pixel format, provide a length 1 array to <em>pSrcPixelFormats</em>.</p> + <p>If the conversion is not supported, this method returns {{S_OK}}, but *<em>pfCanConvert</em> is set to {{FALSE}}. </p><p>If this method fails, the out parameter <em>pfCanConvert</em> is invalid.</p> + + + <dd> <p>An array of {{WIC}} pixel formats that represents source image planes.</p> </dd> + + + <dd> <p>The number of source pixel formats specified by the <em>pSrcFormats</em> parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>True if the conversion is supported.</p> </dd> + + + + + <p>Represents a resized version of the input bitmap using a resampling or filtering algorithm.</p> + <p>Images can be scaled to larger sizes; however, even with sophisticated scaling algorithms, there is only so much information in the image and artifacts tend to worsen the more you scale up.</p><p> The scaler will reapply the resampling algorithm every time <strong>CopyPixels</strong> is called. If the scaled image is to be animated, the scaled image should be created once and cached in a new bitmap, after which the <strong>{{IWICBitmapScaler}}</strong> may be released. In this way the scaling algorithm - which may be computationally expensive relative to drawing - is performed only once and the result displayed many times. </p><p> The scaler is optimized to use the minimum amount of memory required to scale the image correctly. The scaler may be used to produce parts of the image incrementally (banding) by calling <strong>CopyPixels</strong> with different rectangles representing the output bands of the image. Resampling typically requires overlapping rectangles from the source image and thus may need to request the same pixels from the source bitmap multiple times. Requesting scanlines out-of-order from some image decoders can have a significant performance penalty. Because of this reason, the scaler is optimized to handle consecutive horizontal bands of scanlines (rectangle width equal to the bitmap width). In this case the accumulator from the previous vertically adjacent rectangle is re-used to avoid duplicate scanline requests from the source. This implies that banded output from the scaler may have better performance if the bands are requested sequentially. Of course if the scaler is simply used to produce a single rectangle output, this concern is eliminated because the scaler will internally request scanlines in the correct order. </p> + + + + <p>Initializes the bitmap scaler with the provided parameters.</p> + <p> <strong>{{IWICBitmapScaler}}</strong> can't be initialized multiple times. For example, when scaling every frame in a multi-frame image, a new <strong>{{IWICBitmapScaler}}</strong> must be created and initialized for each frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The destination width.</p> </dd> + + + <dd> <p>The desination height.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapInterpolationMode}}</strong> to use when scaling.</p> </dd> + + + + + <p>Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.</p> + + + + <p>Initializes the bitmap clipper with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>he input bitmap source.</p> </dd> + + + <dd> <p>The rectangle of the bitmap source to clip.</p> </dd> + + + + + <p>Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. Rotations are done before the flip.</p> + <p>{{IWICBitmapFipRotator}} requests data on a per-pixel basis, while {{WIC}} codecs provide data on a per-scanline basis. This causes the fliprotator object to exhibit n? behavior if there is no buffering. This occures because each pixel in the transformed image requires an entire scanline to be decoded in the file. It is recommended that you buffer the image using <strong>{{IWICBitmap}}</strong>, or flip/rotate the image using Direct2D.</p> + + + + <p>Initializes the bitmap flip rotator with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapTransformOptions}}</strong> to flip or rotate the image.</p> </dd> + + + + + <p>Exposes methods that support the <strong>Lock</strong> method.</p> + <p>The bitmap lock is simply an abstraction for a rectangular memory window into the bitmap. For the simplest case, a system memory bitmap, this is simply a reference to the top left corner of the rectangle and a stride value.</p><p>To release the exclusive lock set by <strong>Lock</strong> method and the associated <strong>{{IWICBitmapLock}}</strong> object, call {{IUnknown::Release}} on the <strong>{{IWICBitmapLock}}</strong> object.</p> + + + + <p>Retrieves the width and height, in pixels, of the locked rectangle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the width of the locked rectangle.</p> </dd> + + + <dd> <p>A reference that receives the height of the locked rectangle.</p> </dd> + + + + + <p>Provides access to the {{stride}} value for the memory.</p> + <p> Note the {{stride}} value is specific to the <strong>{{IWICBitmapLock}}</strong>, not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Gets the reference to the top left pixel in the locked rectangle.</p> + <p>The reference provided by this method should not be used outside of the lifetime of the lock itself.</p><p><strong>GetDataPointer</strong> is not available in multi-threaded apartment applications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the size of the buffer.</p> </dd> + + + <dd> <p>A reference that receives a reference to the top left pixel in the locked rectangle.</p> </dd> + + + + + <p>Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel format {{GUID}} of the locked area.</p> </dd> + + + + + <p>Exposes methods for color management.</p> + <p>A Color Context is an abstraction for a color profile. The profile can either be loaded from a file (like "sRGB Color Space Profile.icm"), read from a memory buffer, or can be defined by an {{EXIF}} color space. The system color profile directory can be obtained by calling <strong>GetColorDirectory</strong>.</p><p>Once a color context has been initialized, it cannot be re-initialized.</p> + + + + <p>Initializes the color context from the given file.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the file.</p> </dd> + + + + + <p>Initializes the color context from a memory block.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffer used to initialize the <strong>{{IWICColorContext}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + + + <p>Initializes the color context using an Exchangeable Image File ({{EXIF}}) color space.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The value of the {{EXIF}} color space.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the color context type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICColorContextType}}</strong> of the color context.</p> </dd> + + + + + <p>Retrieves the color context profile.</p> + <p>Only use this method if the context type is <strong>{{WICColorContextProfile}}</strong>. +</p><p>Calling this method with <em>pbBuffer</em> set to <strong>{{NULL}}</strong> will cause it to return the required buffer size in <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the color context profile.</p> </dd> + + + <dd> <p>A reference that receives the actual buffer size needed to retrieve the entire color context profile.</p> </dd> + + + + + <p>Retrieves the Exchangeable Image File ({{EXIF}}) color space color context.</p> + <p>This method should only be used when <strong>{{IWICColorContext::GetType}}</strong> indicates <strong>{{WICColorContextExifColorSpace}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the {{EXIF}} color space color context.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>3 through 65534</dt> </dl> </td><td> <p>Unused.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Exposes methods that transforms an <strong>{{IWICBitmapSource}}</strong> from one color context to another.</p> + <p>A <strong>{{IWICColorTransform}}</strong> is an imaging pipeline component that knows how to pull pixels obtained from a given <strong>{{IWICBitmapSource}}</strong> through a color transform. The color transform is defined by mapping colors from the source color context to the destination color context in a given output pixel format.</p><p>Once initialized, a color transform cannot be reinitialized. Because of this, a color transform cannot be used with multiple sources or varying parameters.</p> + + + + <p>Initializes an <strong>{{IWICColorTransform}}</strong> with a <strong>{{IWICBitmapSource}}</strong> and transforms it from one <strong>{{IWICColorContext}}</strong> to another. </p> + <p>The currently supported formats for the <em>pIContextSource</em> and <em>pixelFmtDest</em> parameters are: +</p><ul> <li>{{GUID_WICPixelFormat8bppGray}}</li> <li>{{GUID_WICPixelFormat16bppGray}}</li> <li>{{GUID_WICPixelFormat16bppBGR555}}</li> <li>{{GUID_WICPixelFormat16bppBGR565}}</li> <li>{{GUID_WICPixelFormat24bppBGR}}</li> <li>{{GUID_WICPixelFormat24bppRGB}}</li> <li>{{GUID_WICPixelFormat32bppBGR}}</li> <li>{{GUID_WICPixelFormat32bppBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPRGBA}} (Windows?8 and later)</li> <li>{{GUID_WICPixelFormat32bppRGBA}}</li> <li>{{GUID_WICPixelFormat32bppBGR101010}}</li> <li>{{GUID_WICPixelFormat32bppCMYK}}</li> <li>{{GUID_WICPixelFormat48bppBGR}}</li> <li>{{GUID_WICPixelFormat64bppBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPRGBA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppRGBA}} (Windows?8 and later)</li> </ul><p>In order to get correct behavior from a color transform, the input and output pixel formats must be compatible with the source and destination color profiles. For example, an sRGB destination color profile will produce incorrect results when used with a {{CMYK}} destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods used for in-place metadata editing. A fast metadata encoder enables you to add and remove metadata to an image without having to fully re-encode the image.</p> + <p> A decoder must be created using the <strong>{{WICDecodeOptions}}</strong> value <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> to perform in-place metadata updates. Using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option causes the decoder to release the file stream necessary to perform the metadata updates. </p><p> Not all metadata formats support fast metadata encoding. The native metadata handlers that support metadata are {{IFD}}, Exif, {{XMP}}, and {{GPS}}. </p><p> If a fast metadata encoder fails, the image will need to be fully re-encoded to add the metadata. </p> + + + + <p>Finalizes metadata changes to the image stream.</p> + <p>If the commit fails and returns <strong>{{WINCODEC_ERR_STREAMNOTAVAILABLE}}</strong>, ensure that the image decoder was loaded using the <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> option. A fast metadata encoder is not supported when the decoder is created using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option. </p><p>If the commit fails for any reason, you will need to re-encode the image to ensure the new metadata is added to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a Windows Imaging Component ({{WIC}}) stream for referencing imaging and metadata content.</p> + <p>Decoders and metadata handlers are expected to create sub streams of whatever stream they hold when handing off control for embedded metadata to another metadata handler. If the stream is not restricted then use {{MAXLONGLONG}} as the max size and offset 0.</p><p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + + + + <p>Initializes a stream from another stream. Access rights are inherited from the underlying stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initialize stream.</p> </dd> + + + + + <p>Initializes a stream from a particular file.</p> + <p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a shared file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The file used to initialize the stream.</p> </dd> + + + <dd> <p>The desired file access mode.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GENERIC_READ}}</strong></dt> </dl> </td><td> <p>Read access.</p> </td></tr> <tr><td><dl> <dt><strong>{{GENERIC_WRITE}}</strong></dt> </dl> </td><td> <p>Write access.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Initializes a stream to treat a block of memory as a stream. The stream cannot grow beyond the buffer size. </p> + <p>This method should be avoided whenever possible. The caller is responsible for ensuring the memory block is valid for the lifetime of the stream when using <strong>InitializeFromMemory</strong>. A workaround for this behavior is to create an <strong>{{IStream}}</strong> and use <strong>InitializeFromIStream</strong> to create the <strong>{{IWICStream}}</strong>.</p><p>If you require a growable memory stream, use <strong>CreateStreamOnHGlobal</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the buffer used to initialize the stream.</p> </dd> + + + <dd> <p>The size of buffer.</p> </dd> + + + + + <p>Initializes the stream as a substream of another stream.</p> + <p>The stream functions with its own stream position, independent of the underlying stream but restricted to a region. All seek positions are relative to the sub region. It is allowed, though not recommended, to have multiple writable sub streams overlapping the same range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the input stream.</p> </dd> + + + <dd> <p>The stream offset used to create the new stream.</p> </dd> + + + <dd> <p>The maximum size of the stream.</p> </dd> + + + + + <p>Exposes methods that provide enumeration services for individual metadata items.</p> + + + + <p>Advanced the current position in the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of items to be retrieved.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>An array of enumerated items.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>The number of items that were retrieved. This value is always less than or equal to the number of items requested.</p> </dd> + + + + + <p>Skips to given number of objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of objects to skip.</p> </dd> + + + + + <p>Resets the current position to the beginning of the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a copy of the current <strong>{{IWICEnumMetadataItem}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods for retrieving metadata blocks and items from a decoder or its image frames using a metadata query expression.</p> + <p>A metadata query reader uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>The benefit of the query reader is the ability to access a metadata item in a single step. +</p><p>The query reader also provides the way to traverse the whole set of metadata hierarchy with the help of the <strong>GetEnumerator</strong> method. +However, it is not recommended to use this method since <strong>{{IWICMetadataBlockReader}}</strong> and <strong>{{IWICMetadataReader}}</strong> provide a more convenient and cheaper way. +</p> + + + + <p>Gets the metadata query readers container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the cointainer format {{GUID}}.</p> </dd> + + + + + <p>Retrieves the current path relative to the root metadata block.</p> + <p>If you pass <strong>{{NULL}}</strong> to <em>wzNamespace</em>, <strong>GetLocation</strong> ignores <em>cchMaxLength</em> and returns the required buffer length to store the path in the variable that <em>pcchActualLength</em> points to. +</p><p>If the query reader is relative to the top of the metadata hierarchy, it will return a single-char string.</p><p>If the query reader is relative to a nested metadata block, this method will return the path to the current query reader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the <em>wzNamespace</em> buffer.</p> </dd> + + + <dd> <p>Pointer that receives the current namespace location.</p> </dd> + + + <dd> <p>The actual buffer length that was needed to retrieve the current namespace location.</p> </dd> + + + + + <p>Retrieves the metadata block or item identified by a metadata query expression. </p> + <p><strong>GetMetadataByName</strong> uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>If multiple blocks or items exist that are expressed by the same query expression, the first metadata block or item found will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The query expression to the requested metadata block or item.</p> </dd> + + + <dd> <p>When this method returns, contains the metadata block or item requested.</p> </dd> + + + + + <p>Gets an enumerator of all metadata items at the current relative location within the metadata hierarchy.</p> + <p>The retrieved enumerator only contains query strings for the metadata blocks and items in the current level of the hierarchy. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IEnumString}}</strong> interface for the enumerator that contains query strings that can be used in the current <strong>{{IWICMetadataQueryReader}}</strong>. +</p> </dd> + + + + + <p>Exposes methods for setting or removing metadata blocks and items to an encoder or its image frames using a metadata query expression.</p> + <p>A metadata query writer uses metadata query expressions to set or remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p> + + + + <p>Sets a metadata item to a specific location.</p> + <p><strong>SetMetadataByName</strong> uses metadata query expressions to remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p> If the value set is a nested metadata block then use variant type <code>{{VT_UNKNOWN}}</code> and <em>pvarValue</em> pointing to the <strong>{{IWICMetadataQueryWriter}}</strong> of the new metadata block. The ordering of metadata items is at the discretion of the query writer since relative locations are not specified. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the metadata item.</p> </dd> + + + <dd> <p>The metadata to set.</p> </dd> + + + + + <p>Proxy function for the <strong>RemoveMetadataByName</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.</p> + <p>There are a number of concrete implemenations of this interface representing each of the standard encoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native encoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpEncoder}}</td><td>0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82</td></tr> <tr><td>{{CLSID_WICPngEncoder}}</td><td>0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc</td></tr> <tr><td>{{CLSID_WICJpegEncoder}}</td><td>0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76</td></tr> <tr><td>{{CLSID_WICGifEncoder}}</td><td>0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd</td></tr> <tr><td>{{CLSID_WICTiffEncoder}}</td><td>0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8</td></tr> <tr><td>{{CLSID_WICWmpEncoder}}</td><td>0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2</td></tr> </table><p>?</p><p>Additionally this interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p> + + + + <p>Initializes the encoder with an {{IStream}} which tells the encoder where to encode the bits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the encoder's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the encoder's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapEncoderInfo}}</strong> for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICColorContext}}</strong> objects for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the global thumbnail for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to set as the global thumbnail.</p> </dd> + + + + + <p>Sets the global preview for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to use as the global preview.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapFrameEncode}}</strong> instance.</p> + <p>The parameter <em>ppIEncoderOptions</em> can be used to receive an {{IPropertyBag2}} that can then be used to specify encoder options. This is done by passing a reference to a <strong>{{NULL}}</strong> {{IPropertyBag2}} reference in <em>ppIEncoderOptions</em>. The returned {{IPropertyBag2}} is initialized with all encoder options that are available for the given format, at their default values. To specify non-default encoding behavior, set the needed encoder options on the {{IPropertyBag2}} and pass it to <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>.</p><strong>Note</strong>??Do not pass in a reference to an initialized {{IPropertyBag2}}. The reference will be overwritten, and the original {{IPropertyBag2}} will not be freed.?<p>Otherwise, you can pass <strong>{{NULL}}</strong> in <em>ppIEncoderOptions</em> if you do not intend to specify encoder options.</p><p>See Encoding Overview for an example of how to set encoder options.</p><p>For formats that support encoding multiple frames (for example, {{TIFF}}, {{JPEG}}-{{XR}}), you can work on only one frame at a time. This means that you must call <strong>{{IWICBitmapFrameEncode::Commit}}</strong> before you call <strong>CreateNewFrame</strong> again. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all changes for the image and closes the stream.</p> + <p>To finalize an image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p><p>After the encoder has been committed, it can't be re-initialized or reused with another stream. A new encoder interface must be created, for example, with <strong>{{IWICImagingFactory::CreateEncoder}}</strong>. +</p><p>For the encoder <strong>Commit</strong> to succeed, you must at a minimum call <strong>{{IWICBitmapEncoder::Initialize}}</strong> and either <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> or <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong>. +</p><p> <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> specifies all parameters needed to encode the image data. <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> requires that you also call <strong>{{IWICBitmapFrameEncode::SetSize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong> (if the pixel format is indexed). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents an encoder's individual image frames.</p> + + + + <p>Initializes the frame encoder using the given properties.</p> + <p>If you don't want any encoding options, pass <strong>{{NULL}}</strong> for <em>pIEncoderOptions</em>. Otherwise, pass the {{IPropertyBag2}} that was provided by <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> with updated values. +</p><p>For a complete list of encoding options supported by the Windows-provided codecs, see Native {{WIC}} Codecs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The set of properties to use for <strong>{{IWICBitmapFrameEncode}}</strong> initialization.</p> </dd> + + + + + <p>Sets the output image dimensions for the frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the output image.</p> </dd> + + + <dd> <p>The height of the output image.</p> </dd> + + + + + <p>Sets the physical resolution of the output image.</p> + <p>Windows Imaging Component ({{WIC}}) doesn't perform any special processing as a result of {{DPI}} resolution values. For example, data returned from <strong>{{IWICBitmapSource::CopyPixels}}</strong> isn't scaled by the {{DPI}}. The app must handle {{DPI}} resolution. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution value.</p> </dd> + + + <dd> <p>The vertical resolution value.</p> </dd> + + + + + <p>Requests that the encoder use the specified pixel format.</p> + <p>The encoder might not support the requested pixel format. If not, <strong>SetPixelFormat</strong> returns the closest match in the memory block that <em>pPixelFormat</em> points to. If the returned pixel format doesn't match the requested format, you must use an <strong>{{IWICFormatConverter}}</strong> object to convert the pixel data.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_WRONGSTATE}}</strong></dt> </dl> </td><td> <p>The <strong>{{IWICBitmapFrameEncode::Initialize}}</strong> method was not called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>On input, the requested pixel format {{GUID}}. On output, the closest pixel format {{GUID}} supported by the encoder; this may be different than the requested format. For a list of pixel format {{GUIDs}}, see Native Pixel Formats.</p> </dd> + + + + + <p>Proxy function for the <strong>SetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICPalette}}</strong> for indexed pixel formats.</p> + <p>This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.</p><p>If you already called <strong>{{IWICBitmapEncoder::SetPalette}}</strong> to set a global palette, this method overrides that palette for the current frame.</p><p>The palette must be specified before your first call to <strong>WritePixels</strong>/<strong>WriteSource</strong>. Doing so will cause <strong>WriteSource</strong> to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to <strong>WriteSource</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies scan-line data from a caller-supplied buffer to the <strong>{{IWICBitmapFrameEncode}}</strong> object. +</p> + <p>Successive <strong>WritePixels</strong> calls are assumed to be sequential scan-line access in the output image.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_CODECTOOMANYSCANLINES}}</strong></dt> </dl> </td><td> <p>The value of <em>lineCount</em> is larger than the number of scan lines in the image.</p> </td></tr> </table><p>?</p> + + + + <p>Encodes a bitmap source.</p> + <p>If <strong>SetSize</strong> is not called prior to calling <strong>WriteSource</strong>, the size given in <em>prc</em> is used if not <strong>{{NULL}}</strong>. Otherwise, the size of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used. </p><p>If <strong>SetPixelFormat</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used.</p><p>If <strong>SetResolution</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of <em>pIBitmapSource</em> is used.</p><p>If <strong>SetPalette</strong> is not called prior to calling <strong>WriteSource</strong>, the target pixel format is indexed, and the pixel format of <em>pIBitmapSource</em> matches the encoder frame's pixel format, then the <em>pIBitmapSource</em> pixel format is used.</p><p>When encoding a {{GIF}} image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor ({{ISV}}) {{GIF}} codec, <strong>WriteSource</strong> will use the global palette to encode the frame even when <em>pIBitmapSource</em> has a frame level palette.</p><p>Starting with Windows?Vista, repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>.</p><p>Starting with Windows?8.1, the source rect must be at least the dimensions set through <strong>SetSize</strong>. If the source rect width exceeds the <strong>SetSize</strong> width, extra pixels on the right side are ignored. If the source rect height exceeds the remaining unfilled height, extra scan lines on the bottom are ignored. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap source to encode.</p> </dd> + + + <dd> <p>The size rectangle of the bitmap source.</p> </dd> + + + + + <p>Commits the frame to the image.</p> + <p>After the frame <strong>Commit</strong> has been called, you can't use or reinitialize the <strong>{{IWICBitmapFrameEncode}}</strong> object and any objects created from it. +</p><p>To finalize the image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the metadata query writer for the encoder frame.</p> + <p>If you are setting metadata on the frame, you must do this before you use <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> or <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> to write any image pixels to the frame</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to metadata query writer for the encoder frame.</p> </dd> + + + + + <p>Allows planar component image pixels to be written to an encoder. When supported by the encoder, this allows an application to encode planar component image data without first converting to an interleaved pixel format.</p><p>You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICBitmapFrameEncode}}</strong> for the {{JPEG}} encoder. +</p> + <p>Encoding {{YCbCr}} data using <strong>{{IWICPlanarBitmapFrameEncode}}</strong> is similar but not identical to encoding interleaved data using {{IWICBitmapFrameEncode}}. The planar interface only exposes the ability to write planar frame image data, and you should continue to use the frame encode interface to set metadata or a thumbnail and to commit at the end of the operation. +</p> + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WritePixels</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>Line Count Restriction</th><th>Chroma Plane Width</th><th>Chroma Plane Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>Any</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>The number of lines to encode. See the Remarks section for {{WIC}} Jpeg specific line count restrictions.</p> </dd> + + + <dd> <p>Specifies the source buffers for each component plane encoded. </p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pPlanes</em> parameter.</p> </dd> + + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WriteSource</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. </p><p>If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>Specifies an array of <strong>{{IWICBitmapSource}}</strong> that represent image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The source rectangle of pixels to encode from the <strong>{{IWICBitmapSource}}</strong> planes. Null indicates the entire source. The source rect width must match the width set through <strong>SetSize</strong>. Repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>. </p> </dd> + + + + + <p>Encodes <strong>{{ID2D1Image}}</strong> interfaces to an <strong>{{IWICBitmapEncoder}}</strong>. The input images can be larger than the maximum device texture size.</p> + + + + <p>Encodes the image to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>.</p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the {{IWICBitmapFrameEncode}} before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the image as a thumbnail to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>. </p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the <strong>{{IWICBitmapFrameEncode}}</strong> before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the given image as the thumbnail to the given {{WIC}} bitmap encoder.</p> + <p>You must create the image that you pass in on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If you don't specify additional parameters in the variable that <em>pImageParameters</em> points to, the encoder uses a set of useful defaults. For info about these defaults, see <strong>{{WICImageParameters}}</strong>. </p><p>Before you call <strong>WriteThumbnail</strong>, you must set up the <strong>{{IWICBitmapEncoder}}</strong> interface for the encoder on which you want to set the thumbnail. </p><p>If <strong>WriteThumbnail</strong> fails, it might return {{E_OUTOFMEMORY}}, {{D2DERR_WRONG_RESOURCE_DOMAIN}}, or other error codes from the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Direct2D image that will be encoded.</p> </dd> + + + <dd> <p>The encoder on which the thumbnail is set.</p> </dd> + + + <dd> <p>Additional parameters to control encoding.</p> </dd> + + + + + <p>Exposes methods that represent a decoder.</p><p>The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette. </p> + <p>There are a number of concrete implemenations of this interface representing each of the standard decoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), icon ({{ICO}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native decoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpDecoder}}</td><td>0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78</td></tr> <tr><td>{{CLSID_WICPngDecoder}}</td><td>0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51</td></tr> <tr><td>{{CLSID_WICIcoDecoder}}</td><td>0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe</td></tr> <tr><td>{{CLSID_WICJpegDecoder}}</td><td>0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca</td></tr> <tr><td>{{CLSID_WICGifDecoder}}</td><td>0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe</td></tr> <tr><td>{{CLSID_WICTiffDecoder}}</td><td>0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b</td></tr> <tr><td>{{CLSID_WICWmpDecoder}}</td><td>0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d</td></tr> </table><p>?</p><p>This interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p><p>Codecs written as {{TIFF}} container formats that are not register will decode as a {{TIFF}} image. Client applications should check for a zero frame count to determine if the codec is valid.</p> + + + + <p>Retrieves the capabilities of the decoder based on the specified stream.</p> + <p>Custom decoder implementations should save the current position of the specified {{IStream}}, read whatever information is necessary in order to determine which capabilities it can provide for the supplied stream, and restore the stream position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to retrieve the decoder capabilities from.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDecoderCapabilities}}</strong> of the decoder.</p> </dd> + + + + + <p>Initializes the decoder with the provided stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to use for initialization.</p> <p>The stream contains the encoded pixels which are decoded each time the <strong>CopyPixels</strong> method on the <strong>{{IWICBitmapFrameDecode}}</strong> interface (see <strong>GetFrame</strong>) is invoked.</p> </dd> + + + <dd> <p>The <strong>{{WICDecodeOptions}}</strong> to use for initialization.</p> </dd> + + + + + <p>Retrieves the image's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the image's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapDecoderInfo}}</strong> for the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CopyPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a preview image, if supported.</p> + <p>Not all formats support previews. Only the native Microsoft?Windows Digital Photo ({{WDP}}) codec support previews.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the preview bitmap if supported.</p> </dd> + + + + + <p>Proxy function for the <strong>GetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the total number of frames in the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the total number of frames in the image.</p> </dd> + + + + + <p>Retrieves the specified frame of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The particular frame to retrieve.</p> </dd> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapFrameDecode}}</strong>.</p> </dd> + + + + + + + + + <p>Copies pixel data using the supplied input parameters.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle of pixels to copy.</p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p> The {{GUID}} of desired pixel format in which the pixels should be returned. </p> <p>This {{GUID}} must be a format obtained through an <strong>GetClosestPixelFormat</strong> call.</p> </dd> + + + <dd> <p> The desired rotation or flip to perform prior to the pixel copy. </p> <p>The transform must be an operation supported by an <strong>DoesSupportTransform</strong> call.</p> <p>If a <em>dstTransform</em> is specified, <em>nStride</em> is the <em>transformed stride</em> and is based on the <em>pguidDstFormat</em> pixel format, not the original source's pixel format.</p> </dd> + + + <dd> <p>The {{stride}} of the destination buffer.</p> </dd> + + + <dd> <p>The size of the destination buffer.</p> </dd> + + + <dd> <p>The output buffer.</p> </dd> + + + + + <p>Returns the closest dimensions the implementation can natively scale to given the desired dimensions.</p> + <p>The Windows provided codecs provide the following support for native scaling: +</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{PNG:}} No scaling support.</li> <li>{{JPEG:}} Native down-scaling by a factor of 8, 4, or 2.</li> <li>{{JPEG}}-{{XR:}} Native scaling of the original image by powers of 2. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired width. A reference that receives the closest supported width.</p> </dd> + + + <dd> <p>The desired height. A reference that receives the closest supported height.</p> </dd> + + + + + <p>Retrieves the closest pixel format to which the implementation of <strong>{{IWICBitmapSourceTransform}}</strong> can natively copy pixels, given a desired format.</p> + <p>The Windows provided codecs provide the following support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of <strong>{{IWICBitmapSourceTransform}}</strong>.</li> <li>{{JPEG}}, {{PNG}}, {{JPEG}}-{{XR:}} Trivial support (always returns the same value as <strong>{{IWICBitmapFrameDecode::GetPixelFormat}}</strong>).</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether a specific transform option is supported natively by the implementation of the <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p> + <p>The Windows provided codecs provide the following level of support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{JPEG}}, {{PNG:}} Trivial support ({{WICBitmapTransformRotate0}} only).</li> <li>{{JPEG}}-{{XR:}} Support for all transformation/rotations. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides access to planar Y?CbCr pixel formats where pixel components are stored in separate component planes. This interface also allows access to other codec optimizations for flip/rotate, scale, and format conversion to other Y?CbCr planar formats; this is similar to the pre-existing <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p><p>QueryInterface can be used to obtain this interface from the Windows provided implementations of <strong>{{IWICBitmapFrameDecode}}</strong> for the {{JPEG}} decoder, <strong>{{IWICBitmapScaler}}</strong>, <strong>{{IWICBitmapFlipRotator}}</strong>, and <strong>{{IWICColorTransform}}</strong>.</p> + + + + <p>Use this method to determine if a desired planar output is supported and allow the caller to choose an optimized code path if it is. Otherwise, callers should fall back to <strong>{{IWICBitmapSourceTransform}}</strong> or <strong>{{IWICBitmapSource}}</strong> and retrieve interleaved pixels.</p><p> The following transforms can be checked:</p><ul> <li> Determine if the flip/rotate option specified via <strong>{{WICBitmapTransformOptions}}</strong> is supported.</li> <li>Determine if the requested planar pixel format configuration is supported.</li> <li>Determine the closest dimensions the implementation can natively scale to given the desired dimensions. +</li> </ul><p>When a transform is supported, this method returns the description of the resulting planes in the <em>pPlaneDescriptions</em> parameter. +</p> + <p>Check the value of <em>pfIsSupported</em> to determine if the transform is supported via <strong>{{IWICPlanarBitmapSourceTransform::CopyPixels}}</strong>. If this method fails, the output parameters for width, height, and plane descriptions are zero initialized. +Other return values indicate failure. </p> + + + + <p>Copies pixels into the destination planes. Configured by the supplied input parameters. </p><p>If a <em>dstTransform</em>, scale, or format conversion is specified, <em>cbStride</em> is the transformed stride and is based on the destination pixel format of the <em>pDstPlanes</em> parameter, not the original source's pixel format.</p> + <p>{{WIC}} {{JPEG}} Decoder: +Depending on the configured chroma subsampling of the image, the source rectangle has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>llumaWidth</td><td>llumaHeight</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The <em>pDstPlanes</em> parameter supports the following pixel formats.</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the specified scale, flip/rotate, and planar format configuration is not supported this method fails with <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong>. You can check if a transform is supported by calling <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> + + + <dd> <p>The source rectangle of pixels to copy. </p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The desired rotation or flip to perform prior to the pixel copy. A rotate can be combined with a flip horizontal or a flip vertical, see <strong>{{WICBitmapTransformOptions}}</strong>.</p> </dd> + + + <dd> <p>Used to specify additional configuration options for the transform. See <strong>{{WICPlanarOptions}}</strong> for more detail.</p> <p>{{WIC}} {{JPEG}} Decoder: +<strong>{{WICPlanarOptionsPreserveSubsampling}}</strong> can be specified to retain the subsampling ratios when downscaling. By default, the {{JPEG}} decoder attempts to preserve quality by downscaling only the Y plane in some cases, changing the image to 4:4:4 chroma subsampling. +</p> </dd> + + + <dd> <p>Specifies the pixel format and output buffer for each component plane. The number of planes and pixel format of each plane must match values obtainable through <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pDstPlanes</em> parameter.</p> </dd> + + + + + <p>Defines methods for decoding individual image frames of an encoded file.</p> + + + + <p>Retrieves a metadata query reader for the frame.</p> + <p>For image formats with one frame ({{JPG}}, {{PNG}}, {{JPEG}}-{{XR}}), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame ({{GIF}}, {{TIFF}}), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of {{GIF}} a decoder-level metadata reader will be present. If the decoder doesn?t support metadata ({{BMP}}, {{ICO}}), this will return {{WINCODEC_ERR_UNSUPPORTEDOPERATION}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to the frame's metadata query reader.</p> </dd> + + + + + <p>Retrieves the <strong>{{IWICColorContext}}</strong> associated with the image frame.</p> + <p>If {{NULL}} is passed for <em>ppIColorContexts</em>, and 0 is passed for <em>cCount</em>, this method will return the total number of color contexts in the image in <em>pcActualCount</em>. </p><p>The <em>ppIColorContexts</em> array must be filled with valid data: each <strong>{{IWICColorContext}}*</strong> in the array must have been created using <strong>{{IWICImagingFactory::CreateColorContext}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a small preview of the frame, if supported by the codec.</p> + <p>Not all formats support thumbnails. Joint Photographic Experts Group ({{JPEG}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}) support thumbnails.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapSource}}</strong> of the thumbnail.</p> </dd> + + + + + <p>Exposes methods for obtaining information about and controlling progressive decoding.</p> + <p>Images can only be progressively decoded if they were progressively encoded. Progressive images automatically start at the highest (best quality) progressive level. The caller must manually set the decoder to a lower progressive level.</p><p>{{E_NOTIMPL}} is returned if the codec does not support progressive level decoding.</p> + + + + <p>Gets the number of levels of progressive decoding supported by the {{CODEC}}.</p> + <p>Users should not use this function to iterate through the progressive levels of a progressive {{JPEG}} image. {{JPEG}} progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive {{JPEG}} image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the number of levels supported by the {{CODEC}}.</p> </dd> + + + + + <p>Gets the decoder's current progressive level.</p> + <p>The level always defaults to the highest progressive level. In order to decode a lower progressive level, <strong>SetCurrentLevel</strong> must first be called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the current level specified.</p> </dd> + + + + + <p>Specifies the level to retrieve on the next call to <strong>CopyPixels</strong>.</p> + <p> A call does not have to request every level supported. If a caller requests level 1, without having previously requested level 0, the bits returned by the next call to <strong>CopyPixels</strong> will include both levels. </p><p> If the requested level is invalid, the error returned is {{WINCODEC_ERR_INVALIDPROGRESSIVELEVEL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p><strong>{{IWICProgressCallback}}</strong> interface is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + + + + <p><strong>Notify</strong> method is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + <p>Registers a progress notification callback function.</p> + <p>Applications can only register a single callback. Subsequent registration calls will replace the previously registered callback. To unregister a callback, pass in <strong>{{NULL}}</strong> or register a new callback function.</p><p> Progress is reported in an increasing order between 0.0 and 1.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationBegin}}</strong>, the callback is guaranteed to be called with progress 0.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationEnd}}</strong>, the callback is guaranteed to be called with progress 1.0. </p><p><strong>{{WICProgressNotificationFrequent}}</strong> increases the frequency in which the callback is called. If an operation is expected to take more than 30 seconds, <strong>{{WICProgressNotificationFrequent}}</strong> should be added to <em>dwProgressFlags</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A function reference to the application defined progress notification callback function. See <strong>ProgressNotificationCallback</strong> for the callback signature.</p> </dd> + + + <dd> <p>A reference to component data for the callback method.</p> </dd> + + + <dd> <p>The <strong>{{WICProgressOperation}}</strong> and <strong>{{WICProgressNotification}}</strong> flags to use for progress notification.</p> </dd> + + + + + <p>Exposes methods that provide component information.</p> + + + + <p>Retrieves the component's <strong>{{WICComponentType}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetCLSID</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the signing status of the component.</p> + <p>Signing is unused by {{WIC}}. Therefore, all components {{WICComponentSigned}}.</p><p>This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICComponentSigning}}</strong> status of the component.</p> </dd> + + + + + <p>Retrieves the name of component's author.</p> + <p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzAuthor</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the name of the component's author. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's authors name. The author name is optional; if an author name is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the vendor {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the component's vendor {{GUID}}.</p> </dd> + + + + + <p>Proxy function for the <strong>GetVersion</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the component's specification version.</p> + <p>All built-in components return "1.0.0.0", except for pixel formats, which do not have a spec version.</p><p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzSpecVersion</em> buffer.</p> </dd> + + + <dd> <p>When this method returns, contain a culture invarient string of the component's specification version. The version form is {{NN}}.{{NN}}.{{NN}}.{{NN}}.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's specification version. The specification version is optional; if a value is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the component's friendly name, which is a human-readable display name for the component.</p> + <p>If <em>cchFriendlyName</em> is 0 and <em>wzFriendlyName</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzFriendlyName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the friendly name of the component. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's friendly name.</p> </dd> + + + + + <p>Exposes methods that provide information about a pixel format converter.</p> + + + + <p>Retrieves a list of {{GUIDs}} that signify which pixel formats the converter supports.</p> + <p>The format converter does not necessarily guarantee symmetricality with respect to conversion; that is, a converter may be able to convert {{FROM}} a particular format without actually being able to convert {{TO}} a particular format. In order to test symmetricality, use <strong>CanConvert</strong>.</p><p>To determine the number of pixel formats a coverter can handle, set <em>cFormats</em> to <code>0</code> and <em>pPixelFormatGUIDs</em> to <code>{{NULL}}</code>. The converter will fill <em>pcActual</em> with the number of formats supported by that converter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pPixelFormatGUIDs</em> array.</p> </dd> + + + <dd> <p>Pointer to a {{GUID}} array that receives the pixel formats the converter supports.</p> </dd> + + + <dd> <p>The actual array size needed to retrieve all pixel formats supported by the converter.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICFormatConverter}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a particular codec.</p> + + + + <p>Proxy function for the <strong>GetContainerFormat</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the pixel formats the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the array size needed to retrieve all the supported pixel formats by calling it with <em>cFormats</em> set to <code>0</code> and <em>pguidPixelFormats</em> set to <code>{{NULL}}</code>. This call sets <em>pcActual</em> to the array size needed. Once the needed array size is determined, a second <strong>GetPixelFormats</strong> call with <em>pguidPixelFormats</em> set to an array of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pguidPixelFormats</em> array. Use <code>0</code> on first call to determine the needed array size.</p> </dd> + + + <dd> <p>Receives the supported pixel formats. Use <code>{{NULL}}</code> on first call to determine needed array size.</p> </dd> + + + <dd> <p>The array size needed to retrieve all supported pixel formats.</p> </dd> + + + + + <p>Retrieves the color manangement version number the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchColorManagementVersion</em> set to <code>0</code> and <em>wzColorManagementVersion</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetColorManagementVersion</strong> call with <em>cchColorManagementVersion</em> set to the buffer size and <em>wzColorManagementVersion</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the version buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the color management version number. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the full color management version number.</p> </dd> + + + + + <p>Retrieves the name of the device manufacture associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceManufacturer</em> set to <code>0</code> and <em>wzDeviceManufacturer</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceManufacturer</strong> call with <em>cchDeviceManufacturer</em> set to the buffer size and <em>wzDeviceManufacturer</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device manufacture's name. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the device manufacture's name. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the device manufacture's name.</p> </dd> + + + + + <p>Retrieves a comma delimited list of device models associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceModels</em> set to <code>0</code> and <em>wzDeviceModels</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceModels</strong> call with <em>cchDeviceModels</em> set to the buffer size and <em>wzDeviceModels</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device models buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of device model names associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all of the device model names.</p> </dd> + + + + + <p>Proxy function for the <strong>GetMimeTypes</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a comma delimited list of the file name extensions associated with the codec.</p> + <p>The default extension for an image encoder is the first item in the list of returned extensions.</p><p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchFileExtensions</em> set to <code>0</code> and <em>wzFileExtensions</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetFileExtensions</strong> call with <em>cchFileExtensions</em> set to the buffer size and <em>wzFileExtensions</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the file name extension buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of file name extensions associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all file name extensions associated with the codec. </p> </dd> + + + + + <p>Proxy function for the <strong>DoesSupportAnimation</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value indicating whether the codec supports chromakeys.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports chromakeys; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports lossless formats.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports lossless formats; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports multi frame images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports multi frame images; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the given mime type matches the mime type of the codec.</p> + <strong>Note</strong>??The Windows provided codecs do not implement this method and return {{E_NOTIMPL}}.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The codec does not implement this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The mime type to compare.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the mime types match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Exposes methods that provide information about an encoder.</p> + + + + <p>Creates a new <strong>{{IWICBitmapEncoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a decoder.</p> + + + + <p>Retrieves the file pattern signatures supported by the decoder.</p> + <p> To retrieve all pattern signatures, this method should first be called with <em>pPatterns</em> set to <code>{{NULL}}</code> to retrieve the actual buffer size needed through <em>pcbPatternsActual</em>. Once the needed buffer size is known, allocate a buffer of the needed size and call <strong>GetPatterns</strong> again with the allocated buffer. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array size of the <em>pPatterns</em> array.</p> </dd> + + + <dd> <p>Receives a list of <strong>{{WICBitmapPattern}}</strong> objects supported by the decoder.</p> </dd> + + + <dd> <p>Receives the number of patterns the decoder supports.</p> </dd> + + + <dd> <p>Receives the actual buffer size needed to retrieve all pattern signatures supported by the decoder. </p> </dd> + + + + + <p>Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to pattern match within.</p> </dd> + + + <dd> <p>A reference that receives <strong>{{TRUE}}</strong> if the patterns match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapDecoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a pixel format.</p> + + + + <p>Gets the pixel format {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the pixel format {{GUID}}.</p> </dd> + + + + + <p>Gets the pixel format's <strong>{{IWICColorContext}}</strong>.</p> + <p>The returned color context is the default color space for the pixel format. However, if an {{IWICBitmapSource}} specifies its own color context, the source's context should be preferred over the pixel format's default. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetBitsPerPixel</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetChannelCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the pixel format's channel mask.</p> + <p>If 0 and {{NULL}} are passed in for <em>cbMaskBuffer</em> and <em>pbMaskBuffer</em>, respectively, the required buffer size will be returned through <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index to the channel mask to retrieve.</p> </dd> + + + <dd> <p>The size of the <em>pbMaskBuffer</em> buffer.</p> </dd> + + + <dd> <p>Pointer to the mask buffer.</p> </dd> + + + <dd> <p>The actual buffer size needed to obtain the channel mask.</p> </dd> + + + + + <p>Extends <strong>{{IWICPixelFormatInfo}}</strong> by providing additional information about a pixel format.</p> + + + + <p>Returns whether the format supports transparent pixels.</p> + <p> An indexed pixel format will not return <strong>{{TRUE}}</strong> even though it may have some transparency support. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if the pixel format supports transparency; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the <strong>{{WICPixelFormatNumericRepresentation}}</strong> of the pixel format.</p> </dd> + + + + + <p>Exposes methods used to create components for the Windows Imaging Component ({{WIC}}) such as decoders, encoders and pixel format converters.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given {{IStream}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> based on the given file handle.</p> + <p>When a decoder is created using this method, the file handle must remain alive during the lifetime of the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateComponentInfo</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapEncoder}}</strong> class.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICPalette}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICFormatConverter}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of an <strong>{{IWICBitmapScaler}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapClipper</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapFlipRotator</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICStream}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorContext}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorTransform}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> object.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a <strong>{{IWICBitmap}}</strong> from a <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a specified rectangle of an <strong>{{IWICBitmapSource}}</strong>.</p> + <p>Providing a rectangle that is larger than the source will produce undefined results.</p><p>This method always creates a separate copy of the source image, similar to the cache option <strong>{{WICBitmapCacheOnLoad}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a memory block.</p> + <p>The size of the {{IWICBitmap}} to be created must be smaller than or equal to the size of the image in <em>pbBuffer</em>.</p><p>The {{stride}} of the destination bitmap will equal the <em>stride</em> of the source data, regardless of the width and height specified.</p><p>The <em>pixelFormat</em> parameter defines the pixel format for both the input data and the output bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a bitmap handle.</p> + <p>For a non-palletized bitmap, set {{NULL}} for the <em>hPalette</em> parameter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from an icon handle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an {{IEnumUnknown}} object of the specified component types.</p> + <p>Component types must be enumerated seperately. Combinations of component types and <strong>{{WICAllComponents}}</strong> are unsupported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p>The Windows provided codecs do not support fast metadata encoding at the decoder level, and only support fast metadata encoding at the frame level. To create a fast metadata encoder from a frame, see <strong>CreateFastMetadataEncoderFromFrameDecode</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given image frame.</p> + <p>For a list of support metadata formats for fast metadata encoding, see {{WIC}} Metadata Overview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{IWICBitmapFrameDecode}}</strong> to create the <strong>{{IWICFastMetadataEncoder}}</strong> from.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a new fast metadata encoder.</p> </dd> + + + + + <p>Proxy function for the <strong>CreateQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateQueryWriterFromReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>An extension of the {{WIC}} factory interface that includes the ability to create an <strong>{{IWICImageEncoder}}</strong>. This interface uses a Direct2D device and an input image to encode to a destination <strong>{{IWICBitmapEncoder}}</strong>.</p> + + + + <p>Creates a new image encoder object.</p> + <p>You must create images to pass to the image encoder on the same Direct2D device that you pass to this method. </p><p>You are responsible for setting up the bitmap encoder itself through the existing <strong>{{IWICBitmapEncoder}}</strong> {{APIs}}. The <strong>{{IWICBitmapEncoder}}</strong> or the {{IWICBitmapFrameEncode}} object is passed to each of the <strong>{{IWICImageEncoder}}</strong> methods: <strong>WriteThumbnail</strong>, <strong>WriteFrame</strong>, and <strong>WriteFrameThumbnail</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{ID2D1Device}}</strong> object on which the corresponding image encoder is created.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IWICImageEncoder}}</strong> interface for the encoder object that you can use to encode Direct2D images.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + + + + + <p>Retrieves information about which capabilities are supported for a raw image.</p> + <p>It is recommended that a codec report that a capability is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives <strong>{{WICRawCapabilitiesInfo}}</strong> that provides the capabilities supported by the raw image.</p> </dd> + + + + + <p>Sets the desired <strong>{{WICRawParameterSet}}</strong> option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current set of parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the current set of parameters.</p> </dd> + + + + + <p>Sets the exposure compensation stop value.</p> + <p>It is recommended that a codec report that this method is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The exposure compensation value. The value range for exposure compensation is -5.0 through +5.0, which equates to 10 full stops.</p> </dd> + + + + + <p>Gets the exposure compensation stop value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the exposure compensation stop value. The default is the "as-shot" setting.</p> </dd> + + + + + <p>Sets the white point {{RGB}} values.</p> + <p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The red white point value.</p> </dd> + + + <dd> <p>The green white point value.</p> </dd> + + + <dd> <p>The blue white point value.</p> </dd> + + + + + <p>Gets the white point {{RGB}} values.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the red white point value.</p> </dd> + + + <dd> <p>A reference that receives the green white point value.</p> </dd> + + + <dd> <p>A reference that receives the blue white point value.</p> </dd> + + + + + <p>Sets the named white point of the raw file.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in the {{API}}.</p><p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Gets the named white point of the raw image.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in <strong>{{WICNamedWhitePoint}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Sets the white point Kelvin value.</p> + <p>Codec implementers should faithfully adjust the color temperature within the range supported natively by the raw image. For values outside the native support range, the codec implementer should provide a best effort representation of the image at that color temperature.</p><p>Codec implementers should return <strong>{{WINCODEC_ERR_VALUEOUTOFRANGE}}</strong> if the value is out of defined acceptable range.</p><p>Codec implementers must ensure proper interoperability with other white point setting methods such as <strong>SetWhitePointRGB</strong>. For example, if the caller sets the white point via <strong>SetNamedWhitePoint</strong> then the codec implementer may want to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wants to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The white point Kelvin value. Acceptable Kelvin values are 1,500 through 30,000.</p> </dd> + + + + + <p>Gets the white point Kelvin temperature of the raw image.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the white point Kelvin temperature of the raw image. The default is the "as-shot" setting value.</p> </dd> + + + + + <p>Gets the information about the current Kelvin range of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the minimum Kelvin temperature.</p> </dd> + + + <dd> <p>A reference that receives the maximum Kelvin temperature. </p> </dd> + + + <dd> <p>A reference that receives the Kelvin step value.</p> </dd> + + + + + <p>Sets the contrast value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Gets the contrast value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Sets the desired gamma value.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired gamma value.</p> </dd> + + + + + <p>Gets the current gamma setting of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current gamma setting.</p> </dd> + + + + + <p>Sets the sharpness value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Gets the sharpness value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Sets the saturation value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The saturation value of the raw image. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Gets the saturation value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the saturation value of the raw image. The default value is the "as-shot" setting. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Sets the tint value of the raw image.</p> + <p>The codec implementer must determine what the outer range values represent and must determine how to map the values to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Gets the tint value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Sets the noise reduction value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Gets the noise reduction value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents full highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Sets the destination color context.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The destination color context.</p> </dd> + + + + + <p>Sets the tone curve for the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> structure.</p> </dd> + + + <dd> <p>The desired tone curve.</p> </dd> + + + + + <p>Gets the tone curve of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the <strong>{{WICRawToneCurve}}</strong> of the raw image.</p> </dd> + + + <dd> <p>A reference that receives the size needed to obtain the tone curve structure.</p> </dd> + + + + + <p>Sets the desired rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired rotation angle.</p> </dd> + + + + + <p>Gets the current rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current rotation angle.</p> </dd> + + + + + <p>Sets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the notification callback method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the notification callback method.</p> </dd> + + + + + <p>Provides information and functionality specific to the {{DDS}} image format.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapDecoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsDecoder}}</strong>.</p> + + + + <p>Gets {{DDS}}-specific data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the structure where the information is returned.</p> </dd> + + + + + <p>Retrieves the specified frame of the {{DDS}} image.</p> + <p>A {{DDS}} file can contain multiple images that are organized into a three level hierarchy. First, {{DDS}} file may contain multiple textures in a texture array. Second, each texture can have multiple mip levels. Finally, the texture may be a 3D (volume) texture and have multiple slices, each of which is a 2D texture. See the {{DDS}} documentation for more information.</p><p>{{WIC}} maps this three level hierarchy into a linear array of <strong>{{IWICBitmapFrameDecode}}</strong>, accessible via <strong>{{IWICBitmapDecoder::GetFrame}}</strong>. However, determining which frame corresponds to a triad of <em>arrayIndex</em>, <em>mipLevel</em>, and <em>sliceIndex</em> value is not trivial because each mip level of a 3D texture has a different depth (number of slices). This method provides additional convenience over <strong>{{IWICBitmapDecoder::GetFrame}}</strong> for {{DDS}} images by calculating the correct frame given the three indices. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested index within the texture array.</p> </dd> + + + <dd> <p> The requested mip level.</p> </dd> + + + <dd> <p>The requested slice within the 3D texture. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{IWICBitmapFrameDecode}}</strong> object. +</p> </dd> + + + + + <p>Enables writing {{DDS}} format specific information to an encoder.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapEncoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsEncoder}}</strong>.</p> + + + + <p>Sets {{DDS}}-specific data.</p> + <p>You cannot call this method after you have started to write frame data, for example by calling <strong>{{IWICDdsEncoder::CreateNewFrame}}</strong>. </p><p>Setting {{DDS}} parameters using this method provides the {{DDS}} encoder with information about the expected number of frames and the dimensions and other parameters of each frame. The {{DDS}} encoder will fail if you do not set frame data that matches these expectations. For example, if you set <strong>{{WICDdsParameters::Width}}</strong> and <strong>Height</strong> to 32, and <strong>MipLevels</strong> to 6, the {{DDS}} encoder will expect 6 frames with the following dimensions:</p><ul> <li>32x32 pixels.</li> <li>16x16 pixels.</li> <li>8x8 pixels.</li> <li>4x4 pixels.</li> <li>2x2 pixels.</li> <li>1x1 pixels.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is described.</p> </dd> + + + + + <p>Gets {{DDS}}-specific data.</p> + <p>An application can call <strong>GetParameters</strong> to obtain the default {{DDS}} parameters, modify some or all of them, and then call <strong>SetParameters</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is returned.</p> </dd> + + + + + <p>Creates a new frame to encode.</p> + <p>This is equivalent to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, but returns additional information about the array index, mip level and slice of the newly created frame. In contrast to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, there is no <strong>{{IPropertyBag2}}</strong>* parameter because individual {{DDS}} frames do not have separate properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the newly created frame object.</p> </dd> + + + <dd> <p>Points to the location where the array index is returned.</p> </dd> + + + <dd> <p>Points to the location where the mip level index is returned.</p> </dd> + + + <dd> <p>Points to the location where the slice index is returned.</p> </dd> + + + + + <p>Provides access to a single frame of {{DDS}} image data in its native <strong>{{DXGI_FORMAT}}</strong> form, as well as information about the image data.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapFrameDecode}}</strong> using the {{DDS}} codec and QueryInterface for {{IID_IWICDdsFrameDecode}}.</p> + + + + <p>Gets the width and height, in blocks, of the {{DDS}} image.</p> + <p>For block compressed textures, the returned width and height values do not completely define the texture size because the image is padded to fit the closest whole block size. For example, three {{BC1}} textures with pixel dimensions of 1x1, 2x2 and 4x4 will all report <em>pWidthInBlocks</em> = 1 and <em>pHeightInBlocks</em> = 1. </p><p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method returns the texture size in pixels; for these formats the block size returned by <strong>{{IWICDdsFrameDecoder::GetFormatInfo}}</strong> is 1x1. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the {{DDS}} image in blocks.</p> </dd> + + + <dd> <p>The height of the {{DDS}} image in blocks.</p> </dd> + + + + + <p>Gets information about the format in which the {{DDS}} image is stored.</p> + <p>This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Information about the {{DDS}} format.</p> </dd> + + + + + <p>Requests pixel data as it is natively stored within the {{DDS}} file.</p> + <p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method behaves similarly to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. However, it does not perform any pixel format conversion, and instead produces the raw data from the {{DDS}} file.</p><p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method copies the block data directly into the provided buffer. In this case, the <em>prcBoundsInBlocks</em> parameter is defined in blocks, not pixels. To determine if this is the case, call <strong>GetFormatInfo</strong> and read the <strong>DxgiFormat</strong> member of the returned <strong>{{WICDdsFormatInfo}}</strong> structure. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy from the source. A {{NULL}} value specifies the entire texture.</p> <p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, all values of the rectangle are expressed in number of blocks, not pixels.</p> </dd> + + + <dd> <p>The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.</p> </dd> + + + <dd> <p>The size, in bytes, of the destination buffer.</p> </dd> + + + <dd> <p>A reference to the destination buffer.</p> </dd> + + + + + <p>Exposes methods for decoding {{JPEG}} images. Provides access to the Start Of Frame ({{SOF}}) header, Start of Scan ({{SOS}}) header, the Huffman and Quantization tables, and the compressed {{JPEG}} {{JPEG}} data. Also enables indexing for efficient random access. </p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameDecoder}}</strong> interface for the {{JPEG}} decoder.</p> + + + + <p>Retrieves a value indicating whether this decoder supports indexing for efficient random access.</p> + <p>Indexing is only supported for some {{JPEG}} types. Call this method</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>True if indexing is supported; otherwise, false.</p> </dd> + + + + + <p>Enables indexing of the {{JPEG}} for efficient random access.</p> + <p>This method enables efficient random-access to the image pixels at the expense of memory usage. The amount of memory required for indexing depends on the requested index granularity. Unless <strong>SetIndexing</strong> is called, it is much more efficient to access a {{JPEG}} by progressing through its pixels top-down during calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. +</p><p>This method will fail if indexing is unsupported on the file. <strong>{{IWICJpegFrameDecode::DoesSupportIndexing}}</strong> should be called to first determine whether indexing is supported. If this method is called multiple times, the final call changes the index granularity to the requested size. +</p><p>The provided interval size controls horizontal spacing of index entries. This value is internally rounded up according to the {{JPEG}}?s {{MCU}} (minimum coded unit) size, which is typically either 8 or 16 unscaled pixels. The vertical size of the index interval is always equal to one {{MCU}} size.</p><p> Indexes can be generated immediately, or during future calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong> to reduce redundant decompression work. </p> + <p>Returns {{S_OK}} upon successful completion.</p> + + + <dd> <p>A value specifying whether indexes should be generated immediately or deferred until a future call to <strong>{{IWICBitmapSource::CopyPixels}}</strong>.</p> </dd> + + + <dd> <p>The granularity of the indexing, in pixels.</p> </dd> + + + + + <p>Removes the indexing from a {{JPEG}} that has been indexed using <strong>{{IWICJpegFrameDecode::SetIndexing}}</strong>.</p> + <p>Returns {{S_OK}} upons successful completion.</p> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame ({{SOF}}) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves parameters from the Start Of Scan ({{SOS}}) marker for the scan with the specified index.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The index of the scan for which header data is retrieved.</p> </dd> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves a copy of the compressed {{JPEG}} scan directly from the {{WIC}} decoder frame's output stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The byte position in the scan data to begin copying. Use 0 on the first call. If the output buffer size is insufficient to store the entire scan, this offset allows you to resume copying from the end of the previous copy operation.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pbScanData</em> array.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>A reference that receives the size of the scan data actually copied into <em>pbScanData</em>. The size returned may be smaller that the size of <em>cbScanData</em>. This parameter may be {{NULL}}.</p> </dd> + + + + + + + + <p>Exposes methods for writing compressed {{JPEG}} scan data directly to the {{WIC}} encoder's output stream. Also provides access to the Huffman and quantization tables.</p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameEncoder}}</strong> interface for the {{JPEG}} encoder.</p><p>The {{WIC}} {{JPEG}} encoder supports a smaller subset of {{JPEG}} features than the decoder does.</p><ul> <li>The encoder is limited to a single scan. It does not support encoding images that are multi-scan, either for progressive encoding or planar component data.</li> <li>The encoder supports two quantization tables, two {{AC}} Huffman tables, and two {{DC}} Huffman tables. The luma tables are used for the Y channel and, in the case of {{YCCK}}, the black channel. The chroma tables are used for the CbCr channels. </li> <li>The encoder supports encoding gray, {{YCbCr}} ({{RGB}}), and {{YCCK}} ({{CMYK}}).</li> <li>The encoder supports 4 fixed compontent subsampling, 4:2:0, 4:2:2, 4:4:0, and 4:4:4. This subsamples chroma only.</li> <li>The encoder does not support restart markers.</li> </ul> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Writes scan data to a {{JPEG}} frame.</p> + <p><strong>WriteScan</strong> may be called multiple times. Each call appends the scan data specified to any previous scan data. Complete the scan by calling <strong>{{IWICBitmapFrameEncode::Commit}}</strong>. </p><p>Any calls to set encoder parameters or image metadata that will appear before the scan data in the resulting {{JPEG}} file must be completed before the first call to this method. This includes calls to <strong>{{IWICBitmapFrameEncode::SetColorContexts}}</strong> , <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, <strong>{{IWICBitmapFrameEncode::SetResolution}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetThumbnail}}</strong>. <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> is required as it has no default value for encoded image size. +</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The size of the data in the <em>pbScanData</em> parameter.</p> </dd> + + + <dd> <p>The scan data to write.</p> </dd> + + + + + + + + + + + + + + + + + <p>Obtains a <strong>{{IWICBitmapSource}}</strong> in the desired pixel format from a given <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If the <em>pISrc</em> bitmap is already in the desired format, <em>pISrc</em> is copied to the destination bitmap reference and a reference is added. If it is not in the desired format however, <strong>{{WICConvertBitmapSource}}</strong> will instantiate a <em>dstFormat</em> format converter and initialize it with <em>pISrc</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>The <strong>{{WICCreateBitmapFromSection}}</strong> function calls the <strong>{{WICCreateBitmapFromSectionEx}}</strong> function with the <em>desiredAccessLevel</em> parameter set to <strong>{{WICSectionAccessLevelRead}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains the short name associated with a given {{GUID}}.</p> + <p>Windows Imaging Component ({{WIC}}) short name mappings can be found within the following registry key: </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} to retrieve the short name for.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the short name associated with the {{GUID}}.</p> </dd> + + + <dd> <p>The actual size needed to retrieve the entire short name associated with the {{GUID}}.</p> </dd> + + + + + <p>Obtains the {{GUID}} associated with the given short name.</p> + <p>You can extend the short name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the short name.</p> </dd> + + + <dd> <p>A reference that receives the {{GUID}} associated with the given short name.</p> </dd> + + + + + <p>Obtains the name associated with a given schema.</p> + <p>You can extend the schema name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Schemas</strong> ????????????<strong>{{BB5ACC38}}-{{F216}}-4CEC-{{A6C5}}-5F6E739763A9</strong> ???????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The metadata format {{GUID}}.</p> </dd> + + + <dd> <p>The {{URI}} string of the schema for which the name is to be retrieved.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the schema's name.</p> <p>To obtain the required buffer size, call <strong>{{WICMapSchemaToName}}</strong> with <em>cchName</em> set to 0 and <em>wzName</em> set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the entire schema name.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Specifies how the Crop effect handles the crop rectangle falling on fractional pixel coordinates. </p> + + + + <p>Specifies the color channel the Displacement map effect extracts the intensity from and uses it to spatially displace the image in the X or Y direction.</p> + + + + <p> Speficies whether a flip and/or rotation operation should be performed by the Bitmap source effect </p> + + + + <p> Identifiers for properties of the Gaussian blur effect. </p> + + + + <p> The optimization mode for the Gaussian blur effect. </p> + + + + <p> Identifiers for properties of the Directional blur effect. </p> + + + + <p>Specifies the optimization mode for the Directional blur effect.</p> + + + + <p> Identifiers for properties of the Shadow effect. </p> + + + + <p>The level of performance optimization for the Shadow effect.</p> + + + + <p> Identifiers for properties of the Blend effect. </p> + + + + <p>The blend mode used for the Blend effect.</p> + + + + <p>Identifiers for properties of the Saturation effect.</p> + + + + <p>Identifiers for properties of the Hue rotate effect.</p> + + + + <p>Identifiers for the properties of the Color matrix effect.</p> + + + + <p>The alpha mode of the output of the Color matrix effect.</p> + + + + <p> Identifiers for properties of the Bitmap source effect. </p> + + + + <p>The interpolation mode used to scale the image in the Bitmap source effect. If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties. </p> + + + + <p>Specifies the alpha mode of the output of the Bitmap source effect.</p> + + + + <p> Identifiers for properties of the Composite effect. </p> + + + + <p> Identifiers for properties of the 3D transform effect. </p> + + + + <p> The interpolation mode the 3D transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for the properties of the 3D perspective transform effect. </p> + + + + <p> The interpolation mode the 3D perspective transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p>Identifiers for properties of the 2D affine transform effect.</p> + + + + <p>The interpolation mode to be used with the 2D affine transform effect to scale the image. There are 6 scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode uses more processing time than the nearest neighbor mode, but outputs a higher quality image.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the {{DPI}} compensation effect. </p> + + + + <p> The interpolation mode the {{DPI}} compensation effect uses to scale the image. </p> + + + + <p> Identifiers for properties of the Scale effect. </p> + + + + <p>The interpolation mode the Scale effect uses to scale the image. There are 6 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for properties of the Turbulence effect. </p> + + + + <p>The turbulence noise mode for the Turbulence effect. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function. </p> + + + + <p> Identifiers for properties of the Displacement map effect. </p> + + + + <p> Identifiers for the properties of the Color management effect. </p> + + + + <p> Indicates how the Color management effect should interpret alpha data that is contained in the input image. </p> + + + + <p>The quality level of the transform for the Color management effect. </p> + + + + <p>Specifies which {{ICC}} rendering intent the Color management effect should use.</p> + + + + <p> Identifiers for properties of the Histogram effect. </p> + + + + <p> Identifiers for properties of the Point-specular lighting effect. </p> + + + + <p>The interpolation mode the Point-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Spot-specular lighting effect. </p> + + + + <p>The interpolation mode the Spot-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Distant-specular lighting effect. </p> + + + + <p>The interpolation mode the Distant-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Point-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Point-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed</p> + + + + <p> Identifiers for properties of the Spot-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Spot-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for properties of the Distant-diffuse lighting effect.</p> + + + + <p>The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the Flood effect. </p> + + + + <p>Identifiers for properties of the Linear transfer effect.</p> + + + + <p> Identifiers for properties of the Gamma transfer effect. </p> + + + + <p> Identifiers for properties of the Table transfer effect. </p> + + + + <p>Identifiers for properties of the Discrete transfer effect.</p> + + + + <p>Identifiers for properties of the Convolve matrix effect.</p> + + + + <p>The interpolation mode the Convolve matrix effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for the properties of the Brightness effect.</p> + + + + <p> Identifiers for the properties of the Arithmetic composite effect. </p> + + + + <p>Identifiers for properties of the Crop effect.</p> + + + + <p>Identifiers for properties of the Border effect.</p> + + + + <p>The edge mode for the Border effect. </p> + + + + <p> Identifiers for properties of the Morphology effect. </p> + + + + <p> The mode for the Morphology effect. </p> + + + + <p> Identifiers for properties of the Tile effect. </p> + + + + <p> Identifiers for properties of the Atlas effect. </p> + + + + <p> Identifiers for properties of the Opacity metadata effect. </p> + + + + <p>Specifies the types of properties supported by the Direct2D property interface. </p> + + + + <dd> <p>An unknown property.</p> </dd> + + + <dd> <p>An arbitrary-length string.</p> </dd> + + + <dd> <p>A 32-bit integer value constrained to be either 0 or 1.</p> </dd> + + + <dd> <p>An unsigned 32-bit integer.</p> </dd> + + + <dd> <p>A signed 32-bit integer.</p> </dd> + + + <dd> <p>A 32-bit float.</p> </dd> + + + <dd> <p>Two 32-bit float values.</p> </dd> + + + <dd> <p> Three 32-bit float values.</p> </dd> + + + <dd> <p>Four 32-bit float values.</p> </dd> + + + <dd> <p>An arbitrary number of bytes.</p> </dd> + + + <dd> <p>A returned {{COM}} or nano-{{COM}} interface. </p> </dd> + + + <dd> <p>An enumeration. The value should be treated as a <strong>{{UINT32}}</strong> with a defined array of fields to specify the bindings to human-readable strings.</p> </dd> + + + <dd> <p>An enumeration. The value is the count of sub-properties in the array. The set of array elements will be contained in the sub-property.</p> </dd> + + + <dd> <p>A {{CLSID}}.</p> </dd> + + + <dd> <p>A 3x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x4 matrix of float values.</p> </dd> + + + <dd> <p>A 5x4 matrix of float values.</p> </dd> + + + <dd> <p>A nano-{{COM}} color context interface reference.</p> </dd> + + + + + <p>Specifies the indices of the system properties present on the <strong>{{ID2D1Properties}}</strong> interface for an <strong>{{ID2D1Effect}}</strong>.</p> + <p>Under normal circumstances the minimum and maximum number of inputs to the effect are the same. If the effect supports a variable number of inputs, the <strong>{{ID2D1Effect::SetNumberOfInputs}}</strong> method can be used to choose the number that the application will enable.</p> + + + + <p>Specifies the indices of the system sub-properties that may be present in any property.</p> + + + + <dd> <p>The name for the parent property.</p> </dd> + + + <dd> <p>A Boolean indicating whether the parent property is writeable.</p> </dd> + + + <dd> <p>The minimum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The maximum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The default value of the parent property.</p> </dd> + + + <dd> <p>An array of name/index pairs that indicate the possible values that can be set to the parent property.</p> </dd> + + + <dd> <p>An index sub-property used by the elements of the <strong>{{D2D1_SUBPROPERTY_FIELDS}}</strong> array.</p> </dd> + + + + + <p>Specifies how a bitmap can be used.</p> + <p><strong>{{D2D1_BITMAP_OPTIONS_NONE}}</strong> implies that none of the flags are set. This means that the bitmap can be used for drawing from, cannot be set as a target and cannot be read from by the {{CPU}}.</p><p><strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> means that the bitmap can be specified as a target in <strong>{{ID2D1DeviceContext::SetTarget}}</strong>. If you also specify the <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> flag the bitmap can be used a target but, it cannot be drawn from. Attempting to draw with a bitmap that has both flags set will result in the device context being put into an error state with <strong>{{D2DERR_BITMAP_CANNOT_DRAW}}</strong>. </p><p><strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> means that the bitmap can be mapped by using <strong>{{ID2D1Bitmap1::Map}}</strong>. This flag requires <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> and cannot be combined with any other flags. The bitmap must be updated with the <strong>CopyFromBitmap</strong> or <strong>CopyFromRenderTarget</strong> methods. </p><strong>Note</strong>??You should only use <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> is when the purpose of the bitmap is to be a target only or when the bitmap will be mapped .?<p><strong>{{D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE}}</strong> means that it is possible to get a {{DC}} associated with this bitmap. This must be used in conjunction with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>. The <strong>{{DXGI_FORMAT}}</strong> must be either <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>.</p> + + + <dd> <p>The bitmap is created with default properties.</p> </dd> + + + <dd> <p>The bitmap can be used as a device context target.</p> </dd> + + + <dd> <p>The bitmap cannot be used as an input. </p> </dd> + + + <dd> <p>The bitmap can be read from the {{CPU}}.</p> </dd> + + + <dd> <p>The bitmap works with <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong>.</p> <strong>Note</strong>??This flag is not available in Windows Store apps. ? </dd> + + + + + <p>Used to specify the blend mode for all of the Direct2D blending operations.</p> + <p>The figure here shows an example of each of the modes with images that have an opacity of 1.0 or 0.5. </p><p></p><p>There can be slightly different interpretations of these enumeration values depending on where the value is used.</p><ul> <li> <p>With a composite effect: +</p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong> with the inputs inverted.</li> <li> <p> As a parameter to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>: </p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is a no-op since the destination is already in the selected target.</li> </ul> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The destination is rendered over the source.</p> </dd> + + + <dd> <p>Performs a logical clip of the source pixels against the destination pixels.</p> </dd> + + + <dd> <p>The inverse of the <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong> operation.</p> </dd> + + + <dd> <p>This is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong>.</p> </dd> + + + <dd> <p>The is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_DESTINATION_IN}}</strong>.</p> </dd> + + + <dd> <p>Writes the source pixels over the destination where there are destination pixels.</p> </dd> + + + <dd> <p>The logical inverse of <strong>{{D2D1_COMPOSITE_MODE_SOURCE_ATOP}}</strong>.</p> </dd> + + + <dd> <p>The source is inverted with the destination.</p> </dd> + + + <dd> <p>The channel components are summed.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>Equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong>, but pixels outside of the source bounds are unchanged. +</p> </dd> + + + <dd> <p>Destination colors are inverted according to a source mask. +</p> </dd> + + + + + <p>Represents the bit depth of the imaging pipeline in Direct2D.</p> + <strong>Note</strong>?? Feature level 9 may or may not support precision types other than 8BPC.? + + + <dd> <p>The buffer precision is not specified.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer standard {{RGB}} data per channel.</p> </dd> + + + <dd> <p>Use 16-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 16-bit floats per channel.</p> </dd> + + + <dd> <p>Use 32-bit floats per channel.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits.</p> <p>Do not use this value.</p> </dd> + + + + + <p>Specifies how the memory to be mapped from the corresponding <strong>{{ID2D1Bitmap1}}</strong> should be treated.</p> + <p>The <strong>{{D2D1_MAP_OPTIONS_READ}}</strong> option can be used only if the bitmap was created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag.</p><p>These flags will be not be able to be used on bitmaps created by the <strong>{{ID2D1DeviceContext}}</strong>. However, the {{ID2D1SourceTransform}} will receive bitmaps for which these flags are valid.</p><p><strong>{{D2D1_MAP_OPTIONS_DISCARD}}</strong> can only be used with <strong>{{D2D1_MAP_OPTIONS_WRITE}}</strong>. Both of these options are only available through the effect author {{API}}, not through the Direct2D rendering {{API}}. +</p> + + + + <p>This is used to specify the quality of image scaling with <strong>{{ID2D1DeviceContext::DrawImage}}</strong> and with the 2D affine transform effect. </p> + + + + + <p>Specifies how units in Direct2D will be interpreted.</p> + <p>Setting the unit mode to <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong> is similar to setting the <strong>{{ID2D1DeviceContext}}</strong> dots per inch (dpi) to 96. However, Direct2D still checks the dpi to determine the threshold for enabling vertical antialiasing for text, and when the unit mode is restored, the dpi will be remembered.</p> + + + <dd> <p>Units will be interpreted as device-independent pixels (1/96").</p> </dd> + + + <dd> <p>Units will be interpreted as pixels.</p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>This specifies options that apply to the device context for its lifetime.</p> + + + + <dd> <p>The device context is created with default options.</p> </dd> + + + <dd> <p>Distribute rendering work across multiple threads. Refer to Improving the performance of Direct2D apps for additional notes on the use of this flag.</p> </dd> + + + + + <p>Defines how the world transform, dots per inch (dpi), and stroke width affect the shape of the pen used to stroke a primitive.</p> + <p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the stroke isn't affected by the world transform.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the application has the same behavior in Windows 7 and later.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}}</strong> the stroke is always 1 pixel wide.</p><p>Apart from the stroke, any value derived from the stroke width is not affected when the transformType is either fixed or hairline. This includes miters, line caps and so on.</p><p> It is important to distinguish between the geometry being stroked and the shape of the stroke pen. When {{D2D1_STROKE_TRANSFORM_TYPE_FIXED}} or {{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}} is specified, the geometry still respects the transform and dpi, but the pen that traces the geometry will not.</p><p>Here is an illustration of a stroke with dashing and a skew and stretch transform.</p><p>And here is an illustration of a fixed width stroke which does not get transformed.</p> + + + <dd> <p>The stroke respects the currently set world transform, the dpi, and the stroke width.</p> </dd> + + + <dd> <p>The stroke does not respect the world transform but it does respect the dpi and stroke width.</p> </dd> + + + <dd> <p>The stroke is forced to 1 pixel wide (in device space) and does not respect the world transform, the dpi, or the stroke width.</p> </dd> + + + + + <p>Used to specify the geometric blend mode for all Direct2D primitives. </p> + + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>The resulting pixel values use the minimum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + <dd> <p>The resulting pixel values are the sum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + + + <p>Specifies the threading mode used while simultaneously creating the device, factory, and device context. +</p> + + + <dd> <p>Resources may only be invoked serially. Device context state is not protected from multi-threaded access. </p> </dd> + + + <dd> <p>Resources may be invoked from multiple threads. Resources use interlocked reference counting and their state is protected. +</p> </dd> + + + + + <p>Defines how to interpolate between colors.</p> + + + <dd> <p>Colors are interpolated with straight alpha.</p> </dd> + + + <dd> <p>Colors are interpolated with premultiplied alpha.</p> </dd> + + + + + <p>Specifies how the layer contents should be prepared. +</p> + + + <dd> <p>Default layer behavior. A premultiplied layer target is pushed and its contents are cleared to transparent black. +</p> </dd> + + + <dd> <p> The layer is not cleared to transparent black.</p> </dd> + + + <dd> <p> The layer is always created as ignore alpha. All content rendered into the layer will be treated as opaque.</p> </dd> + + + + + <p>Defines when font resources should be subset during printing.</p> + + + <dd> <p>Uses a heuristic strategy to decide when to subset fonts. </p> <strong>Note</strong>??If the print driver has requested archive-optimized content, then Direct2D will subset fonts once, for the entire document. ? </dd> + + + <dd> <p>Subsets and embeds font resources in each page, then discards that font subset after the page is printed out. </p> </dd> + + + <dd> <p>Sends out the original font resources without subsetting along with the page that first uses the font, and re-uses the font resources for later pages without resending them. </p> </dd> + + + + + <p>This structure allows a <strong>{{ID2D1Bitmap1}}</strong> to be created with bitmap options and color context information available. +</p> + <p>If both <strong>dpiX</strong> and <strong>dpiY</strong> are 0, the dpi of the bitmap will be set to the desktop dpi if the device context is a windowed context, or 96 dpi for any other device context.</p> + + + + <p> Describes mapped memory from the <strong>{{ID2D1Bitmap1::Map}}</strong> {{API}}.</p> + <p>The mapped rectangle is used to map a rectangle into the caller's address space.</p> + + + + <p>Describes limitations to be applied to an imaging effect renderer.</p> + <p>The renderer can allocate tiles larger than the minimum tile allocation. The allocated tiles will be powers of two of the minimum size on each axis, except that the size on each axis will not exceed the guaranteed maximum texture size for the device feature level. </p><p>The <strong>minimumPixelRenderExtent</strong> is the size of the square tile below which the renderer will expand the tile allocation rather than attempting to subdivide the rendering tile any further. When this threshold is reached, the allocation tile size is expanded. This might occur repeatedly until rendering can either proceed or it is determined that the graph cannot be rendered.</p><p>The buffer precision is used for intermediate buffers if it is otherwise unspecified by the effects or the internal effect topology. The application can also use the <strong>Output.BufferPrecision</strong> method to specify the output precision for a particular effect. This takes precedence over the context precision. In addition, the effect might set a different precision internally if required. If the buffer type on the context is <strong>{{D2D1_BUFFER_PRECISION_UNKNOWN}}</strong> and otherwise not specified by the effect or transform, the precision of the output will be the maximum precision of the inputs to the transform. The buffer precision does not affect the number of channels used. </p> + + + <dd> <p>The buffer precision used by default if the buffer precision is not otherwise specified by the effect or the transform.</p> </dd> + + + <dd> <p>The tile allocation size to be used by the imaging effect renderer.</p> </dd> + + + + + <p>Describes features of an effect.</p> + <strong>Note</strong>??The caller should not rely heavily on the input rectangles returned by this structure. They can change due to subtle changes in effect implementations and due to optimization changes in the effect rendering system.? + + + <dd> <p>The effect whose input connection is being specified.</p> </dd> + + + <dd> <p>The input index of the effect that is being considered.</p> </dd> + + + <dd> <p>The amount of data that would be available on the input. This can be used to query this information when the data is not yet available. </p> </dd> + + + + + <p>Describes a point on a path geometry.</p> + + + + <dd> <p>The end point after walking the path.</p> </dd> + + + <dd> <p>A unit vector indicating the tangent point.</p> </dd> + + + <dd> <p>The index of the segment on which point resides. This index is global to the entire path, not just to a particular figure.</p> </dd> + + + <dd> <p>The index of the figure on which point resides.</p> </dd> + + + <dd> <p>The length of the section of the path stretching from the start of the path to the start of <strong>endSegment</strong>.</p> </dd> + + + + + <p>Describes image brush features.</p> + + + + <dd> <p>The source rectangle in the image space from which the image will be tiled or interpolated.</p> </dd> + + + <dd> <p>The extend mode in the image x-axis.</p> </dd> + + + <dd> <p>The extend mode in the image y-axis.</p> </dd> + + + <dd> <p>The interpolation mode to use when scaling the image brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p>Describes the stroke that outlines a shape.</p> + + + + <dd> <p>The cap to use at the start of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the end of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the start and end of each dash.</p> </dd> + + + <dd> <p>The line join to use.</p> </dd> + + + <dd> <p>The limit beyond which miters are either clamped or converted to bevels.</p> </dd> + + + <dd> <p>The type of dash to use.</p> </dd> + + + <dd> <p>The location of the first dash, relative to the start of the figure. </p> </dd> + + + <dd> <p>The rule that determines what render target properties affect the nib of the stroke.</p> </dd> + + + + + <p>Contains the content bounds, mask information, opacity settings, and other options for a layer resource.</p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p>Additional options for the layer creation.</p> </dd> + + + + + <p>Describes the drawing state of a device context.</p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>The blend mode for the device context to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>{{D2D1_UNIT_MODE}}</p> </dd> + + + + + <p>The creation properties for a <strong>{{ID2D1PrintControl}}</strong> object.</p> + + + + <p>Specifies the options with which the Direct2D device, factory, and device context are created. +</p> + <p>The root objects referred to here are the Direct2D device, Direct2D factory and the Direct2D device context. +</p> + + + + <p>Represents a color context that can be used with an <strong>{{ID2D1Bitmap1}}</strong> object.</p> + + + + <p>Gets the color space of the color context.</p> + <p>This method returns the color space of the contained {{ICC}} profile.</p> + + + + <p>Gets the size of the color profile associated with the bitmap. </p> + <p>This can be used to allocate a buffer to receive the color profile bytes associated with the context.</p> + <p>This method returns the size of the profile in bytes.</p> + + + + <p>Gets the color profile bytes for an <strong>{{ID2D1ColorContext}}</strong>. </p> + <p>If <em>profileSize</em> is insufficient to store the entire profile, <em>profile</em> is zero-initialized before this method fails.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_BUFFER}}</td><td>The supplied buffer was too small to accomodate the data.</td></tr> </table><p>?</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1PrintControl}}</strong> object that converts Direct2D primitives stored in <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + <strong>Note</strong>??This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation?factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_FAIL}}</td><td>Generic failure code.</td></tr> <tr><td>{{D2DERR_PRINT_FORMAT_NOT_SUPPORTED}}</td><td>The print format is not supported by the document target.</td></tr> </table><p>?</p> + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <strong>Note</strong>??Direct2D may exceed the maximum texture memory you set with this method for a single frame if necessary to render the frame.? + <p>This method does not return a value.</p> + + + <dd> <p>The new maximum texture memory in bytes.</p> </dd> + + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <p>The maximum amount of texture memory in bytes.</p> + + + + <p>Clears all of the rendering resources used by Direct2D. </p> + <p> If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Discards only resources that haven't been used for greater than the specified time in milliseconds. The default is 0 milliseconds.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Sets the given input image by index. </p> + <p>If the input index is out of range, the input image is ignored. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The index of the image to set.</p> </dd> + + + <dd> <p>The input image to set.</p> </dd> + + + <dd> <p>Whether to invalidate the graph at the location of the effect input</p> </dd> + + + + + <p>Allows the application to change the number of inputs to an effect.</p> + <p>Most effects do not support a variable number of inputs. Use <strong>{{ID2D1Properties::GetValue}}</strong> with the <strong>{{D2D1_PROPERTY_MIN_INPUTS}}</strong> and <strong>{{D2D1_PROPERTY_MAX_INPUTS}}</strong> values to determine the number of inputs supported by an effect.</p><p>If the input count is less than the minimum or more than the maximum supported inputs, the call will fail.</p><p>If the input count is unchanged, the call will succeed with <strong>{{S_OK}}</strong>. </p><p>Any inputs currently selected on the effect will be unaltered by this call unless the number of inputs is made smaller. If the number of inputs is made smaller, inputs beyond the selected range will be released.</p><p>If the method fails, the existing input and input count will remain unchanged.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the effect.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Gets the number of inputs to the effect. </p> + + <p>This method returns the number of inputs to the effect. </p> + + + + <p>Gets the output image from the effect. </p> + <p>The output image can be set as an input to another effect, or can be directly passed into the <strong>{{ID2D1DeviceContext}}</strong> in order to render the effect. </p><p>It is also possible to use <strong>QueryInterface</strong> to retrieve the same output image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the output image for the effect.</p> </dd> + + + + + <p>A developer implemented interface that allows a metafile to be replayed.</p> + + + + <p> This method is called once for each record stored in a metafile.</p> + <p>Return true if the record is successfully.</p> + + + <dd> <p>The type of the record.</p> </dd> + + + <dd> <p>The data for the record.</p> </dd> + + + <dd> <p>The byte size of the record data.</p> </dd> + + + + + <p>A Direct2D resource that wraps a {{WMF}}, {{EMF}}, or {{EMF}}+ metafile.</p> + + + + <p>This method streams the contents of the command to the given metafile sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The sink into which Direct2D will call back.</p> </dd> + + + + + <p> Gets the bounds of the metafile, in device-independent pixels ({{DIPs}}), as reported in the metafile?s header.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p> </p><p>The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as {{XPS}} when some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.</p> + <p>The <strong>{{ID2D1CommandSink}}</strong> can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The <strong>{{ID2D1CommandSink}}</strong> interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the <strong>{{ID2D1CommandList}}</strong> was created and will be passed in to the <strong>{{ID2D1CommandSink}}</strong> implementation. </p><p>Not all methods implemented by <strong>{{ID2D1DeviceContext}}</strong> are present.</p> + + + + <p>Notifies the implementation of the command sink that drawing is about to commence.</p> + <p> This method always returns <strong>{{S_OK}}</strong>. </p> + + + + <p>Indicates when <strong>{{ID2D1CommandSink}}</strong> processing has completed.</p> + <p>The <strong>{{HRESULT}}</strong> active at the end of the command list will be returned.</p><p> It allows the calling function or method to indicate a failure back to the stream implementation.</p> + <p>If the method/function succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the antialiasing mode that will be used to render any subsequent geometry.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode selected for the command list.</p> </dd> + + + + + <p>Sets the tags that correspond to the tags in the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The first tag to associate with the primitive.</p> </dd> + + + <dd> <p>The second tag to associate with the primitive.</p> </dd> + + + + + <p>Indicates the new default antialiasing mode for text.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode for the text.</p> </dd> + + + + + <p>Indicates more detailed text rendering parameters.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters to use for text rendering.</p> </dd> + + + + + <p>Sets a new transform.</p> + <p>The transform will be applied to the corresponding device context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The transform to be set.</p> </dd> + + + + + <p>Sets a new primitive blend mode.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>The unit mode changes the meaning of subsequent units from device-independent pixels ({{DIPs}}) to pixels or the other way. The command sink does not record a {{DPI}}, this is implied by the playback context or other playback interface such as <strong>{{ID2D1PrintControl}}</strong>.</p> + <p>The unit mode changes the interpretation of units from {{DIPs}} to pixels or vice versa.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>The clear color is restricted by the currently selected clip and layer bounds.</p><p>If no color is specified, the color should be interpreted by context. Examples include but are not limited to:</p><ul> <li>Transparent black for a premultiplied bitmap target.</li> <li>Opaque black for an ignore bitmap target.</li> <li>Containing no content (or white) for a printer page.</li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The color to which the command sink should be cleared.</p> </dd> + + + + + <p>Indicates the glyphs to be drawn.</p> + <p> <strong>DrawText</strong> and <strong>DrawTextLayout</strong> are broken down into glyph runs and rectangles by the time the command sink is processed. So, these methods aren't available on the command sink. Since the application may require additional callback processing when calling <strong>DrawTextLayout</strong>, this semantic can't be easily preserved in the command list.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The upper left corner of the baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Additional non-rendering information about the glyphs.</p> </dd> + + + <dd> <p>The brush used to fill the glyphs.</p> </dd> + + + <dd> <p>The measuring mode to apply to the glyphs.</p> </dd> + + + + + <p>Draws a line drawn between two points.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The start point of the line.</p> </dd> + + + <dd> <p>The end point of the line.</p> </dd> + + + <dd> <p>The brush used to fill the line.</p> </dd> + + + <dd> <p>The width of the stroke to fill the line.</p> </dd> + + + <dd> <p>The style of the stroke. If not specified, the stroke is solid.</p> </dd> + + + + + <p>Indicates the geometry to be drawn to the command sink.</p> + <p> <strong>Ellipses</strong> and <strong>rounded rectangles</strong> are converted to the corresponding ellipse and rounded rectangle geometries before calling into the <strong>DrawGeometry</strong> method. +</p> + <p>An {{HRESULT}}. </p> + + + <dd> <p>The geometry to be stroked.</p> </dd> + + + <dd> <p>The brush that will be used to fill the stroked geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a rectangle.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to be drawn to the command sink.</p> </dd> + + + <dd> <p>The brush used to stroke the geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The <em>destinationRectangle</em> parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If you specify {{NULL}}, then the destination rectangle is (left=0, top=0, right = width(<em>sourceRectangle</em>), bottom = height(<em>sourceRectangle</em>). </p><p>The <em>sourceRectangle</em> defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> clips this rectangle to the size of the source bitmap, so it's impossible to sample outside of the bitmap. If you specify {{NULL}}, then the source rectangle is taken to be the size of the source bitmap. </p><p>The <em>perspectiveTransform</em> is specified in addition to the transform on device context. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Draws the provided image to the command sink. </p> + <p>Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The image to be drawn to the command sink.</p> </dd> + + + <dd> <p>This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin.</p> </dd> + + + <dd> <p>The corresponding rectangle in the image space will be mapped to the provided origins when processing the image.</p> </dd> + + + <dd> <p>The interpolation mode to use to scale the image if necessary. +</p> </dd> + + + <dd> <p>If specified, the composite mode that will be applied to the limits of the currently selected clip.</p> </dd> + + + + + <p>Draw a metafile to the device context.</p> + <p>The <em>targetOffset</em> defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image is rendered to the corresponding destination. If you don't specify the offset, the destination origin will be (0, 0). The top, left corner of the image will be mapped to the target offset. This will not necessarily be the origin. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Indicates a mesh to be filled by the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The mesh object to be filled.</p> </dd> + + + <dd> <p>The brush with which to fill the mesh.</p> </dd> + + + + + <p>Fills an opacity mask on the command sink.</p> + <p>The opacity mask bitmap must be considered to be clamped on each axis.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The bitmap whose alpha channel will be sampled to define the opacity mask.</p> </dd> + + + <dd> <p>The brush with which to fill the mask.</p> </dd> + + + <dd> <p>The destination rectangle in which to fill the mask. If not specified, this is the origin.</p> </dd> + + + <dd> <p>The source rectangle within the opacity mask. If not specified, this is the entire mask.</p> </dd> + + + + + <p>Indicates to the command sink a geometry to be filled.</p> + <p>If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.</p><p>Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to <strong>FillGeometry</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The geometry that should be filled.</p> </dd> + + + <dd> <p>The primary brush used to fill the geometry.</p> </dd> + + + <dd> <p>A brush whose alpha channel is used to modify the opacity of the primary fill brush. </p> </dd> + + + + + <p>Indicates to the command sink a rectangle to be filled.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to fill.</p> </dd> + + + <dd> <p>The brush with which to fill the rectangle.</p> </dd> + + + + + <p>Pushes a clipping rectangle onto the clip and layer stack.</p> + <p>If the current world transform is not preserving the axis, <em>clipRectangle</em> is transformed and the bounds of the transformed rectangle are used instead.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle that defines the clip.</p> </dd> + + + <dd> <p>The antialias mode for the clip.</p> </dd> + + + + + <p>Pushes a layer onto the clip and layer stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters that define the layer.</p> </dd> + + + <dd> <p>The layer resource that receives subsequent drawing operations.</p> </dd> + + + + + <p>Removes an axis-aligned clip from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Removes a layer from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Represents a sequence of commands that can be recorded and played back.</p> + <p>The command list does not include static copies of resources with the recorded set of commands. All bitmaps, effects, and geometries are stored as references to the actual resource and all the brushes are stored by value. All the resource creation and destruction happens outside of the command list. The following table lists resources and how they are treated inside of a command list.</p><table> <tr><th>Resource</th><th>How it is treated by the command list</th></tr> <tr><td>Solid-color brush</td><td>Passed by value.</td></tr> <tr><td>Bitmap brush</td><td>The brush is passed by value but the bitmap that is used to create the brush is in fact referenced.</td></tr> <tr><td>Gradient brushes ? both linear and radial gradient</td><td>The brush is passed by value but the gradient stop collection itself is referenced. The gradient stop collection object is immutable. </td></tr> <tr><td>Bitmaps</td><td>Passed by reference.</td></tr> <tr><td>Drawing state block</td><td>The actual state on the device context is converted into set functions like set transform and is passed by value.</td></tr> <tr><td>Geometry</td><td>Immutable object passed by value.</td></tr> <tr><td>Stroke style</td><td>Immutable object passed by value.</td></tr> <tr><td>Mesh</td><td>Immutable object passed by value.</td></tr> </table><p>?</p> + + + + <p>Streams the contents of the command list to the specified command sink. </p> + <p>The command sink can be implemented by any caller of the {{API}}.</p><p>If the caller makes any design-time failure calls while a command list is selected as a target, the command list is placed in an error state. The stream call fails without making any calls to the passed in sink.</p><p>Sample use:</p><pre>Class MyCommandSink : public {{ID2D1CommandSink}} +{ +public: // All of the {{ID2D1CommandSink}} methods implemented here. +}; {{HRESULT}} +StreamToMyCommandSink( __in {{ID2D1CommandList}} *pCommandList ) +{ {{HRESULT}} hr = {{S_OK}}; MyCommandSink *pCommandSink = new MyCommandSink(); hr = pCommandSink ? {{S_OK}} : {{E_OUTOFMEMORY}}; if ({{SUCCEEDED}}(hr)) { // Receive the contents of the command sink streamed to the sink. hr = pCommandList-&gt;Stream(pCommandSink); } SafeRelease(&amp;pCommandSink); return hr; }</pre> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p><p>The return value indicates any failures the command sink implementation returns through its <strong>EndDraw</strong> method.</p> + + + <dd> <p>The sink into which the command list will be streamed.</p> </dd> + + + + + <p>Instructs the command list to stop accepting commands so that you can use it as an input to an effect or in a call to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>. You should call the method after it has been attached to an <strong>{{ID2D1DeviceContext}}</strong> and written to but before the command list is used.</p> + <p>This method returns {{D2DERR_WRONG_STATE}} if it has already been called on the command list. If an error occurred on the device context during population, the method returns that error. Otherwise, the method returns {{S_OK}}. </p><p>If the <strong>Close</strong> method returns an error, any future use of the command list results in the same error.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}} </td><td>Close has already been called on the command list.</td></tr> </table><p>?</p><p> </p><strong>Note</strong>??If the device context associated with the command list has an error, the command list returns the same error.? + + + + <p>Converts Direct2D primitives stored in an <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + + + + <p>Converts Direct2D primitives in the passed-in command list into a fixed page representation for use by the print subsystem. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + <dd> <p>The command list that contains the rendering operations.</p> </dd> + + + <dd> <p>The size of the page to add.</p> </dd> + + + <dd> <p>The print ticket stream.</p> </dd> + + + <dd> <p>Contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter.</p> </dd> + + + <dd> <p>Contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter. +</p> </dd> + + + + + <p>Passes all remaining resources to the print sub-system, then clean up and close the current print job. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + + <p>Represents a brush based on an <strong>{{ID2D1Image}}</strong>.</p> + + + + <p>Sets the image associated with the provided image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The image to be associated with the image brush.</p> </dd> + + + + + <p>Sets how the content inside the source rectangle in the image brush will be extended on the x-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the x-axis of the image.</p> </dd> + + + + + <p>Sets the extend mode on the y-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the y-axis of the image.</p> </dd> + + + + + <p>Sets the interpolation mode for the image brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>How the contents of the image will be interpolated to handle the brush transform.</p> </dd> + + + + + <p>Sets the source rectangle in the image brush.</p> + <p>The top left corner of the <em>sourceRectangle</em> parameter maps to the brush space origin. That is, if the brush and world transforms are both identity, the portion of the image in the top left corner of the source rectangle will be rendered at (0,0) in the render target.</p><p>The source rectangle will be expanded differently depending on whether the input image is based on pixels (a bitmap or effect) or by a command list. </p><ul> <li>If the input image is a bitmap or an effect, the rectangle will be expanded to encapsulate a full input pixel before being additionally down-scaled to ensure that the projected rectangle will be correct in the final scene-space.</li> <li>If the input image is a command list, the command list will be slightly expanded to encapsulate a full input pixel. +</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>The source rectangle that defines the portion of the image to tile.</p> </dd> + + + + + <p>Gets the image associated with the image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, contains the address of a reference to the image associated with this brush. </p> </dd> + + + + + <p>Gets the extend mode of the image brush on the x-axis.</p> + + <p>This method returns the x-extend mode.</p> + + + + <p>Gets the extend mode of the image brush on the y-axis of the image.</p> + + <p>This method returns the y-extend mode.</p> + + + + <p>Gets the interpolation mode of the image brush.</p> + <p>This method returns the interpolation mode.</p> + + + + <p>Gets the rectangle that will be used as the bounds of the image when drawn as an image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of the output source rectangle.</p> </dd> + + + + + <p>Paints an area with a bitmap. </p> + + + + <p>Sets the interpolation mode for the brush.</p> + <strong>Note</strong>??If <em>interpolationMode</em> is not a valid member of {{D2D1_INTERPOLATION_MODE}}, then this method silently ignores the call.? + + + <dd> <p>The mode to use.</p> </dd> + + + + + <p>Returns the current interpolation mode of the brush.</p> + <p>The current interpolation mode.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + <p>This interface adds functionality to <strong>{{ID2D1StrokeStyle}}</strong>.</p> + + + + <p>Gets the stroke transform type.</p> + <p>This method returns the stroke transform type.</p> + + + + <p>The <strong>{{ID2D1PathGeometry1}}</strong> interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>. In particular, it provides the path geometry-specific <strong>ComputePointAndSegmentAtLength</strong> method.</p> + <p>This interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>.</p> + + + + <p> Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One of the inputs was in an invalid range.</td></tr> </table><p>?</p> + + + <dd> <p>The distance to walk along the path.</p> </dd> + + + <dd> <p>The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.</p> </dd> + + + <dd> <p>The transform to apply to the path prior to walking.</p> </dd> + + + <dd> <p>The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a description of the point that can be found at the given location.</p> </dd> + + + + + <p>Represents a set of run-time bindable and discoverable properties that allow a data-driven application to modify the state of a Direct2D effect.</p> + <p>This interface supports access through either indices or property names. In addition to top-level properties, each property in an <strong>{{ID2D1Properties}}</strong> object may contain an <strong>{{ID2D1Properties}}</strong> object, which stores metadata describing the parent property. </p> + + + + <p>Gets the number of top-level properties. </p> + <p>This method returns the number of custom properties on the <strong>{{ID2D1Properties}}</strong> interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.</p> + <p>This method returns the number of custom (non-system) properties that can be accessed by the object.</p> + + + + Gets the property name that corresponds to the given index. + + + + <p>Gets the number of characters for the given property name. This is a template overload. See Remarks.</p> + <p>The value returned by this method can be used to ensure that the buffer size for <strong>GetPropertyName</strong> is appropriate. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetPropertyNameLength( U index ) {{CONST}}; + <p>This method returns the size in characters of the name corresponding to the given property index, or zero if the property index does not exist. </p> + + + <dd> <p>The index of the property name to retrieve.</p> </dd> + + + + + <p>Gets the <strong>{{D2D1_PROPERTY_TYPE}}</strong> of the selected property. </p> + <p>If the property does not exist, the method returns <strong>{{D2D1_PROPERTY_TYPE_UNKNOWN}}</strong>.</p> + <p>This method returns a <strong>{{D2D1_PROPERTY_TYPE}}</strong>-typed value for the type of the selected property.</p> + + + + <p>Gets the index corresponding to the given property name. </p> + <p> If the property does not exist, this method returns <strong>{{D2D1_INVALID_PROPERTY_INDEX}}</strong>. This reserved value will never map to a valid index and will cause <strong>{{NULL}}</strong> or sentinel values to be returned from other parts of the property interface.</p> + <p>The index of the corresponding property name.</p> + + + <dd> <p>The name of the property to retrieve.</p> </dd> + + + + + Sets the named property to the given value. + + + + <p>Sets the corresponding property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; {{HRESULT}} SetValue( U index, _In_ const T &amp;value ); + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INVALID_PROPERTY}}</td><td>The specified property does not exist.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> <tr><td>{{D3DERR_OUT_OF_VIDEO_MEMORY}}</td><td>Failed to allocate required video memory.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_FAIL}}</td><td>Unspecified failure.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the property to set.</p> </dd> + + + <dd> <p>The data to set.</p> </dd> + + + + + <p>Gets the property value by name. This is a template overload. See Remarks.</p> + <p>If <em>propertyName</em> does not exist, no information is retrieved.</p><p>Any error not in the standard set returned by a property implementation will be mapped into the standard error range.</p><p> </p>template&lt;typename T&gt; T GetValueByName( _In_ {{PCWSTR}} propertyName ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The property name to get.</p> </dd> + + + + + <p>Gets the value of the property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; T GetValue( U index ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The index of the property from which the value is to be obtained.</p> </dd> + + + + + <p>Gets the size of the property value in bytes, using the property index. This is a template overload. See Remarks.</p> + <p>This method returns zero if <em>index</em> does not exist. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetValueSize( U index ) {{CONST}}; + <p>This method returns size of the value in bytes, using the property index </p> + + + <dd> <p>The index of the property.</p> </dd> + + + + + <p>Gets the sub-properties of the provided property by index. This is a template overload. See Remarks. </p> + <p> If there are no sub-properties, <em>subProperties</em> will be <strong>{{NULL}}</strong>, and <strong>{{D2DERR_NO_SUBPROPERTIES}}</strong> will be returned. </p><p> </p>template&lt;typename U&gt; {{HRESULT}} GetSubProperties( U index, _Outptr_opt_ {{ID2D1Properties}} **subProperties ) {{CONST}}; + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_NO_SUBPROPERTIES}}</td><td>The specified property does not exist.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the sub-properties to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the sub-properties.</p> </dd> + + + + + <p> Represents a bitmap that can be used as a surface for an <strong>{{ID2D1DeviceContext}}</strong> or mapped into system memory, and can contain additional color context information.</p> + + + + + <p>Gets the color context information associated with the bitmap. </p> + <p>If the bitmap was created without specifying a color context, the returned context is <strong>{{NULL}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the color context interface associated with the bitmap.</p> </dd> + + + + + <p>Gets the options used in creating the bitmap.</p> + + <p>This method returns the options used.</p> + + + + <p>Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created. </p> + <p>The bitmap used must have been created from a {{DXGI}} surface render target, a derived render target, or a device context created from an <strong>{{ID2D1Device}}</strong>.</p><p>The returned surface can be used with Microsoft Direct3D or any other {{API}} that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through <strong>{{ID2D1Factory::CreateDxgiSurfaceRenderTarget}}</strong> or on a device context created on the same device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_BITMAP_BOUND_AS_TARGET}}</td><td>Cannot draw with a bitmap that is currently bound as the target bitmap.</td></tr> </table><p>?</p> + + + <dd> <p>The underlying {{DXGI}} surface for the bitmap.</p> </dd> + + + + + <p>Maps the given bitmap into memory.</p> + <strong>Note</strong>??You can't use bitmaps for some purposes while mapped. Particularly, the <strong>{{ID2D1Bitmap::CopyFromBitmap}}</strong> method doesn't work if either the source or destination bitmap is mapped.?<p>The bitmap must have been created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>The options used in mapping the bitmap into memory.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the rectangle that is mapped into memory.</p> </dd> + + + + + <p>Unmaps the bitmap from memory. </p> + <p>Any memory returned from the <strong>Map</strong> call is now invalid and may be reclaimed by the operating system or used for other purposes. </p><p>The bitmap must have been previously mapped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid.</td></tr> <tr><td>{{E_POINTER}}</td><td>Pointer is not valid.</td></tr> </table><p>?</p> + + + + <p>Represents a collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes. It provides get methods for all the new parameters added to the gradient stop collection.</p> + + + + + <p>Copies the gradient stops from the collection into memory.</p> + <p>If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong>, this method returns the same values specified in the creation method. If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, the stops returned here will first be transformed into the gamma space specified by the <em>colorInterpolationGamma</em> parameter. See the <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong> method for more info about color space and gamma space.</p><p>If <em>gradientStopsCount</em> is less than the number of gradient stops in the collection, the remaining gradient stops are omitted. If <em>gradientStopsCount</em> is larger than the number of gradient stops in the collection, the extra gradient stops are set to <strong>{{NULL}}</strong>. To obtain the number of gradient stops in the collection, use the <strong>GetGradientStopCount</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a one-dimensional array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> </dd> + + + <dd> <p>The number of gradient stops to copy. </p> </dd> + + + + + <p>Gets the color space of the input colors as well as the space in which gradient stops are interpolated.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns the color space related to the color interpolation gamma. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the color space after interpolation has occurred.</p> + <p>If you create using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns <strong>{{D2D1_COLOR_SPACE_SRGB}}</strong>. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the precision of the gradient buffer.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns {{D2D1_BUFFER_PRECISION_8BPC_UNORM}}. </p> + <p>The buffer precision of the gradient buffer.</p> + + + + <p>Retrieves the color interpolation mode that the gradient stop collection uses.</p> + <p>The color interpolation mode.</p> + + + + <p>Implementation of a drawing state block that adds the functionality of primitive blend in addition to already existing antialias mode, transform, tags and text rendering mode.</p><strong>Note</strong>??You can get an <strong>{{ID2D1DrawingStateBlock1}}</strong> using the <strong>{{ID2D1Factory::CreateDrawingStateBlock}}</strong> method or you can use the QueryInterface method on an <strong>{{ID2D1DrawingStateBlock}}</strong> object.? + + + + <p>Gets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Sets the <strong>{{D2D1_DRAWING_STATE_DESCRIPTION1}}</strong> associated with this drawing state block.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Creates a bitmap that can be used as a target surface, for reading back to the {{CPU}}, or as a source for the <strong>DrawBitmap</strong> and <strong>{{ID2D1BitmapBrush}}</strong> {{APIs}}. In addition, color context information can be passed to the bitmap.</p> + <p>The new bitmap can be used as a target for <strong>SetTarget</strong> if it is created with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a Direct2D bitmap by copying a {{WIC}} bitmap.</p> + <p>Starting with Windows?8.1, the <em>bitmapProperties</em> parameter is optional. When it is not specified, the created bitmap inherits the pixel format and alpha mode from <em>wicBitmapSource</em>. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.</p><p>When the <em>bitmapProperties</em> parameter is specified, the value in <em>bitmapProperties-&gt;pixelFormat</em> must either be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> or must match the {{WIC}} pixel format in <em>wicBitmapSource</em>.</p><p>When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong>, the newly created bitmap inherits the alpha mode from <em>wicBitmapSource</em>. When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>, <strong>{{D2D1_ALPHA_MODE_STRAIGHT}}</strong>, or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, this forces the newly created bitmap to use the specified alpha mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{WIC}} bitmap source to copy from.</p> </dd> + + + <dd> <p>A bitmap properties structure that specifies bitmap creation options.</p> </dd> + + + <dd> <p>The address of the newly created bitmap object.</p> </dd> + + + + + <p>Creates a color context.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap.</p><p>When <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>, <em>profile</em> and <em>profileSize</em> must be specified. Otherwise, these parameters should be set to <strong>{{NULL}}</strong> and zero respectively. When the space is {{D2D1_COLOR_SPACE_CUSTOM}}, the model field of the profile header is inspected to determine if this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space remains custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>Filename</em>.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p> Creates a bitmap from a {{DXGI}} surface that can be set as a target surface or have additional color context information specified.</p> + <p>If the bitmap properties are not specified, the following information is assumed: </p><ul> <li>The bitmap {{DPI}} is 96.</li> <li>The pixel format matches that of the surface.</li> <li>The returned bitmap will inherit the bind flags of the {{DXGI}} surface.<ul> <li>However, only the subset of flags meaningful to Direct2D will be inherited. For example, {{D3D10_USAGE_DYNAMIC}} is not compatible with any public Direct2D flags.</li> </ul> </li> <li>The color context is unknown.</li> <li>The alpha mode of the bitmap will be premultiplied (common case) or straight ({{A8}}). +</li> </ul><p>If the bitmap properties are specified, the bitmap properties will be used as follows:</p><ul> <li>The bitmap {{DPI}} will be specified by the bitmap properties.</li> <li>If both dpiX and dpiY are 0, the bitmap {{DPI}} will be 96.</li> <li>The pixel format must be compatible with the shader resource view or render target view of the surface.</li> <li>The bitmap options must be compatible with the bind flags of the {{DXGI}} surface. However, they may be a subset. This will influence what resource views are created by the bitmap.</li> <li>The color context information will be used from the bitmap properties, if specified.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface from which the bitmap can be created. </p> <strong>Note</strong>??The {{DXGI}} surface must have been created from the same Direct3D device that the Direct2D device context is associated with. + ? </dd> + + + <dd> <p>The bitmap properties specified in addition to the surface. </p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new bitmap object.</p> </dd> + + + + + <p>Creates an effect for the specified class {{ID}}. </p> + <p> If the created effect is a custom effect that is implemented in a {{DLL}}, this doesn't increment the reference count for that {{DLL}}. If the application deletes an effect while that effect is loaded, the resulting behavior is unpredictable. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}} </td><td>The effect requires capabilities not supported by the {{D2D}} device.</td></tr> </table><p>?</p> + + + <dd> <p>The class {{ID}} of the effect to create. See Built-in Effects for a list of effect {{IDs}}.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new effect.</p> </dd> + + + + + <p>Creates a gradient stop collection, enabling the gradient to contain color channels with values outside of [0,1] and also enabling rendering to a high-color render target with interpolation in sRGB space.</p> + <p>This method linearly interpolates between the color stops. An optional color space conversion is applied post-interpolation. Whether and how this gamma conversion is applied is determined by the pre- and post-interpolation. This method will fail if the device context does not support the requested buffer precision.</p><p>In order to get the desired result, you need to ensure that the inputs are specified in the correct color space. +</p><p>You must always specify colors in straight alpha, regardless of interpolation mode being premultiplied or straight. The interpolation mode only affects the interpolated values. Likewise, the stops returned by <strong>{{ID2D1GradientStopCollection::GetGradientStops}}</strong> will always have straight alpha. </p><p>If you specify <strong>{{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}}</strong>, then all stops are premultiplied before interpolation, and then un-premultiplied before color conversion. +</p><p>Starting with Windows?8, the interpolation behavior of this method has changed. </p><p>The table here shows the behavior in Windows?7 and earlier.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>1.0</td><td>Clamps the inputs and then converts from sRGB to scRGB.</td><td>Converts from scRGB to sRGB post-interpolation.</td><td>1.0</td></tr> <tr><td>2.2</td><td>Clamps the inputs.</td><td>No Operation</td><td>2.2</td></tr> </table><p>?</p><p>The table here shows the behavior in Windows?8 and later.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>sRGB to scRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>1.0</td></tr> <tr><td>scRGB to sRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>2.2</td></tr> <tr><td>sRGB to sRGB</td><td>No Operation</td><td>No Operation</td><td>2.2</td></tr> <tr><td>scRGB to scRGB</td><td>No Operation</td><td>No Operation</td><td>1.0</td></tr> </table><p>?</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>An array of color values and offsets.</p> </dd> + + + <dd> <p>The number of elements in the <em>gradientStops</em> array.</p> </dd> + + + <dd> <p>Specifies both the input color space and the space in which the color interpolation occurs.</p> </dd> + + + <dd> <p>The color space that colors will be converted to after interpolation occurs.</p> </dd> + + + <dd> <p>The precision of the texture used to hold interpolated values.</p> <strong>Note</strong>??This method will fail if the underlying Direct3D device does not support the requested buffer precision. Use <strong>{{ID2D1DeviceContext::IsBufferPrecisionSupported}}</strong> to determine what is supported. + ? </dd> + + + <dd> <p>Defines how colors outside of the range defined by the stop collection are determined.</p> </dd> + + + <dd> <p>Defines how colors are interpolated. {{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}} is the default, see Remarks for more info.</p> </dd> + + + <dd> <p>The new gradient stop collection.</p> </dd> + + + + + <p>Creates an image brush. The input image can be any type of image, including a bitmap, effect, or a command list. +</p> + <p>The image brush can be used to fill an arbitrary geometry, an opacity mask or text.</p><p>This sample illustrates drawing a rectangle with an image brush.</p><pre>{{HRESULT}} +CreatePatternBrush( __in {{ID2D1DeviceContext}} *pDeviceContext, __deref_out {{ID2D1ImageBrush}} **ppImageBrush ) +{ {{HRESULT}} hr = {{S_OK}}; {{ID2D1Image}} *pOldTarget = {{NULL}}; pDeviceContext-&gt;GetTarget(&amp;pOldTarget); {{ID2D1CommandList}} *pCommandList = {{NULL}}; hr = pDeviceContext-&gt;CreateCommandList(&amp;pCommandList); if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;SetTarget(pCommandList); hr = RenderPatternToCommandList(pDeviceContext); } pDeviceContext-&gt;SetTarget(pOldTarget); {{ID2D1ImageBrush}} *pImageBrush = {{NULL}}; if ({{SUCCEEDED}}(hr)) { hr = pDeviceContext-&gt;CreateImageBrush( pCommandList, {{D2D1::ImageBrushProperties}}( {{D2D1::RectF}}(198, 298, 370, 470), {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_INTERPOLATION_MODE_LINEAR}} ), &amp;pImageBrush ); } // Fill a rectangle with the image brush. if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;FillRectangle( {{D2D1::RectF}}(0, 0, 100, 100), pImageBrush); } SafeRelease(&amp;pImageBrush); SafeRelease(&amp;pCommandList); SafeRelease(&amp;pOldTarget); return hr; +}</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The image to be used as a source for the image brush.</p> </dd> + + + <dd> <p>The properties specific to an image brush.</p> </dd> + + + <dd> <p>Properties common to all brushes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the input rectangles.</p> </dd> + + + + + <p>Creates a bitmap brush, the input image is a Direct2D bitmap object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The bitmap to use as the brush.</p> </dd> + + + <dd> <p>A bitmap brush properties structure.</p> </dd> + + + <dd> <p>A brush properties structure.</p> </dd> + + + <dd> <p>The address of the newly created bitmap brush object.</p> </dd> + + + + + <p>Creates a <strong>{{ID2D1CommandList}}</strong> object.</p> + <p>A <strong>{{ID2D1CommandList}}</strong> can store Direct2D commands to be displayed later through <strong>{{ID2D1DeviceContext::DrawImage}}</strong> or through an image brush.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Indicates whether the format is supported by the device context. The formats supported are usually determined by the underlying hardware.</p> + <p>You can use supported formats in the <strong>{{D2D1_PIXEL_FORMAT}}</strong> structure to create bitmaps and render targets. Direct2D doesn't support all {{DXGI}} formats, even though they may have some level of Direct3D support by the hardware. +</p> + <p>Returns {{TRUE}} if the format is supported. Returns {{FALSE}} if the format is not supported.</p> + + + <dd> <p>The {{DXGI}} format to check.</p> </dd> + + + + + <p>Indicates whether the buffer precision is supported by the underlying Direct3D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Gets the bounds of an image without the world transform of the context applied.</p> + <p>The image bounds don't include multiplication by the world transform. They do reflect the current {{DPI}}, unit mode, and interpolation mode of the context. To get the bounds that include the world transform, use <strong>{{ID2D1DeviceContext::GetImageWorldBounds}}</strong>.</p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with a target offset of (0,0) and an identity world transform matrix. They do not reflect the current clip rectangle set on the device context or the extent of the context's current target image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}) and in local space.</p> </dd> + + + + + <p>Gets the bounds of an image with the world transform of the context applied.</p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. To get bounds which don't include the world transform, use <strong>{{ID2D1DeviceContext::GetImageLocalBounds}}</strong>. </p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with the same image and a target offset of (0,0). They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target image. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p> Gets the world-space bounds in {{DIPs}} of the glyph run using the device context {{DPI}}. </p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyph run to render.</p> </dd> + + + <dd> <p>The DirectWrite measuring mode that indicates how glyph metrics are used to measure text when it is formatted.</p> </dd> + + + <dd> <p>The bounds of the glyph run in {{DIPs}} and in world space.</p> </dd> + + + + + <p>Gets the device associated with a device context.</p> + <p>The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an <strong>{{ID2D1DeviceContext}}</strong> interface and then call <strong>GetDevice</strong>. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an <strong>{{ID2D1Device}}</strong> object.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a Direct2D device associated with this device context.</p> </dd> + + + + + <p>The bitmap or command list to which the Direct2D device context will now render.</p> + <p>The target can be changed at any time, including while the context is drawing.</p><p>The target can be either a bitmap created with the <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> flag, or it can be a command list. Other kinds of images cannot be set as a target. For example, you cannot set the output of an effect as target. If the target is not valid the context will enter the <strong>{{D2DERR_INVALID_TARGET}} </strong>error state.</p><p>You cannot use <strong>SetTarget</strong> to render to a bitmap/command list from multiple device contexts simultaneously. An image is considered ?being rendered to? if it has ever been set on a device context within a <strong>BeginDraw</strong>/<strong>EndDraw</strong> timespan. If an attempt is made to render to an image through multiple device contexts, all subsequent device contexts after the first will enter an error state. </p><p>Callers wishing to attach an image to a second device context should first call <strong>EndDraw</strong> on the first device context. +</p><p>Here is an example of the correct calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC1-&gt;SetTarget(pImage); +// ? +pDC1-&gt;EndDraw(); pDC2-&gt;BeginDraw(); +pDC2-&gt;SetTarget(pImage); +// ? +pDC2-&gt;EndDraw(); +</pre><p>Here is an example of the incorrect calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC2-&gt;BeginDraw(); pDC1-&gt;SetTarget(pImage); // ... pDC1-&gt;SetTarget({{NULL}}); pDC2-&gt;SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1. // ... pDC1-&gt;EndDraw(); // This EndDraw {{SUCCEEDs}}. +pDC2-&gt;EndDraw(); // This EndDraw {{FAILs}} </pre><strong>Note</strong>??Changing the target does not change the bitmap that an {{HWND}} render target presents from, nor does it change the bitmap that a {{DC}} render target blts to/from.?<p>This {{API}} makes it easy for an application to use a bitmap as a source (like in <strong>DrawBitmap</strong>) and as a destination at the same time. Attempting to use a bitmap as a source on the same device context to which it is bound as a target will put the device context into the {{D2DERR_BITMAP_BOUND_AS_TARGET}} error state.</p><p>It is acceptable to have a bitmap bound as a target bitmap on multiple render targets at once. Applications that do this must properly synchronize rendering with <strong>Flush</strong> or <strong>EndDraw</strong>.</p><p>You can change the target at any time, including while the context is drawing.</p><p>You can set the target to {{NULL}}, in which case drawing calls will put the device context into an error state with {{D2DERR_WRONG_STATE}}. Calling <strong>SetTarget</strong> with a {{NULL}} target does not restore the original target bitmap to the device context.</p><p>If the device context has an outstanding {{HDC}}, the context will enter the <strong>{{D2DERR_WRONG_STATE}}</strong> error state. The target will not be changed.</p><p>If the bitmap and the device context are not in the same resource domain, the context will enter <strong>\</strong> error state. The target will not be changed.</p><p> <strong>{{ID2D1RenderTarget::GetPixelSize}}</strong> returns the size of the current target bitmap (or 0, 0) if there is no bitmap bound). +<strong>{{ID2D1RenderTarget::GetSize}}</strong> returns the pixel size of the current bitmap scaled by the {{DPI}} of the render target. +<strong>SetTarget</strong> does not affect the {{DPI}} of the render target. +</p><p> <strong>{{ID2D1RenderTarget::GetPixelFormat}}</strong> returns the pixel format of the current target bitmap (or <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong> if there is none).</p><p> <strong>{{ID2D1Bitmap::CopyFromRenderTarget}}</strong> copies from the currently bound target bitmap.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the target currently associated with the device context.</p> + <p>If a target is not associated with the device context, <em>target</em> will contain <strong>{{NULL}}</strong> when the methods returns.</p><p>If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:</p><ul> <li> <strong>CreateHwndRenderTarget</strong> </li> <li> <strong>CreateDxgiSurfaceRenderTarget</strong> </li> <li> <strong>CreateWicBitmapRenderTarget</strong> </li> <li> <strong>CreateDCRenderTarget</strong> </li> <li> <strong>CreateCompatibleRenderTarget</strong> </li> </ul><p>It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for <strong>{{ID2D1RenderTarget}}</strong> methods.</p><p> <strong>CreateDxgiSurfaceRenderTarget</strong> will create a bitmap that is usable as a bitmap source if the {{DXGI}} surface is bindable as a shader resource view.</p><p> <strong>CreateCompatibleRenderTarget</strong> will always create bitmaps that are usable as a bitmap source.</p><p> <strong>{{ID2D1RenderTarget::BeginDraw}}</strong> will copy from the {{HDC}} to the original bitmap associated with it. <strong>{{ID2D1RenderTarget::EndDraw}}</strong> will copy from the original bitmap to the {{HDC}}. </p><p> <strong>{{IWICBitmap}}</strong> objects will be locked in the following circumstances:</p><ul> <li>BeginDraw has been called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>{{IWICBitmap}} objects will be unlocked in the following circumstances:</p><ul> <li>EndDraw is called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>Direct2D will only lock bitmaps that are not currently locked.</p><p>Calling <strong>QueryInterface</strong> for <strong>{{ID2D1GdiInteropRenderTarget}}</strong> will always succeed. <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the {{GDI_COMPATIBLE}} flag set.</p><p> <strong>{{ID2D1HwndRenderTarget::Resize}}</strong> will return <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if there are any outstanding references to the original target bitmap associated with the render target.</p><p>Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the target currently associated with the device context.</p> </dd> + + + + + <p>Sets the rendering controls for the given device context. </p> + <p> The rendering controls allow the application to tune the precision, performance, and resource usage of rendering operations.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The rendering controls to be applied.</p> </dd> + + + + + <p>Gets the rendering controls that have been applied to the context.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the rendering controls for this context.</p> </dd> + + + + + <p>Changes the primitive blend mode that is used for all rendering operations in the device context.</p> + <p>The primitive blend will apply to all of the primitive drawn on the context, unless this is overridden with the <em>compositeMode</em> parameter on the <strong>DrawImage</strong> {{API}}.</p><p> The primitive blend applies to the interior of any primitives drawn on the context. In the case of <strong>DrawImage</strong>, this will be implied by the image rectangle, offset and world transform.</p><p>If the primitive blend is anything other than <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong> then ClearType rendering will be turned off. If the application explicitly forces ClearType rendering in these modes, the drawing context will be placed in an error state. {{D2DERR_WRONG_STATE}} will be returned from either <strong>EndDraw</strong> or <strong>Flush</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The primitive blend to use.</p> </dd> + + + + + <p>Returns the currently set primitive blend used by the device context. </p> + + <p>The current primitive blend. The default value is <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong>.</p> + + + + <p>Specifies parameters used during view instancing configuration.</p> + <p>View instancing is declared in a {{PSO}} using this structure. The view instance count is set in the {{PSO}} to allow whole-pipeline optimization based on the number of views.</p><p>View instancing is disabled when it's not declared in the {{PSO}} or when ViewInstanceCount is set to 0. When disabled, rendering behaves as if view instancing is enabled and ViewInstanceCount is set to 1; shaders only see a value of 0 in {{SV_ViewID}} and just one view instance is produced. This allows shaders that are aware of view instancing to still be used in {{PSOs}} that disable it. Some adapters might support shader model 6.1 (which exposes {{SV_ViewID}}) but not view instancing; these adapters must still support shaders that input {{SV_ViewID}} in {{PSOs}} that declare ViewInstanceCount as 0 or 1.</p><p>The shader prior to rasterization can output {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values which don't have to depend on {{SV_ViewID}}. To compute the final effective index of the viewport and render target where primitives will be sent, these values, when present, are added to the ViewportArrayIndex and RenderTargetArrayIndex values of the view instance locations declared in the {{PSO}}. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in the {{PSO}} to a single value (such as 0) to act as a uniform base index to which the dynamically-selected {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values are added.</p> + + + <dd> <p> Specifies the number of views to be used, up to {{D3D12_MAX_VIEW_INSTANCE_COUNT}}. </p> </dd> + + + <dd> <p> The address of a memory location that contains <strong>ViewInstanceCount</strong> view instance location structures that specify the location of viewport/scissor and render target details of each view instance. </p> </dd> + + + <dd> <p> Configures view instancing with additional options. </p> </dd> + + + + + <p>Sets what units will be used to interpret values passed into the device context.</p><p></p> + <p> This method will affect all properties and parameters affected by <strong>SetDpi</strong> and <strong>GetDpi</strong>. This affects all coordinates, lengths, and other properties that are not explicitly defined as being in another unit. For example:</p><ul> <li><strong>SetUnitMode</strong> will affect a coordinate passed into <strong>{{ID2D1DeviceContext::DrawLine}}</strong>, and the scaling of a geometry passed into <strong>{{ID2D1DeviceContext::FillGeometry}}</strong>. </li> <li><strong>SetUnitMode</strong> will not affect the value returned by <strong>{{ID2D1Bitmap::GetPixelSize}}</strong>. </li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>An enumeration defining how passed-in units will be interpreted by the device context.</p> </dd> + + + + + <p>Gets the mode that is being used to interpret values by the device context.</p> + + <p>The unit mode.</p> + + + + <p>Draws a series of glyphs to the device context.</p> + <p>The <em>glyphRunDescription</em> is ignored when rendering, but can be useful for printing and serialization of rendering commands, such as to an {{XPS}} or {{SVG}} file. This extends <strong>{{ID2D1RenderTarget::DrawGlyphRun}}</strong>, which lacked the glyph run description.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Origin of first glyph in the series.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Supplementary glyph series information.</p> </dd> + + + <dd> <p>The brush that defines the text color.</p> </dd> + + + <dd> <p>The measuring mode of the glyph series, used to determine the advances and offsets. The default value is {{DWRITE_MEASURING_MODE_NATURAL}}.</p> </dd> + + + + + <p></p><p>A command list cannot reference effects which are part of effect graphs that consume the command list.</p> + + + + <p>Draw a metafile to the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If {{NULL}} is specified, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle)). </p><p>The <em>sourceRectangle</em> parameter defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> will clip this rectangle to the size of the source bitmap, thus making it impossible to sample outside of the bitmap. If {{NULL}} is specified, then the source rectangle is taken to be the size of the source bitmap. </p><p>If you specify <em>perspectiveTransform</em> it is applied to the rect in addition to the transform set on the render target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Push a layer onto the clip and layer stack of the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The parameters that defines the layer.</p> </dd> + + + <dd> <p>The layer resource to push on the device context that receives subsequent drawing operations. </p> <strong>Note</strong>??If a layer is not specified, Direct2D manages the layer resource automatically. ? </dd> + + + + + <p>This indicates that a portion of an effect's input is invalid. This method can be called many times.</p><p>You can use this method to propagate invalid rectangles through an effect graph. You can query Direct2D using the <strong>GetEffectInvalidRectangles</strong> method.</p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can also use this method to invalidate caches that have accumulated while rendering effects that have the <strong>{{D2D1_PROPERTY_CACHED}}</strong> property set to true.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Gets the number of invalid output rectangles that have accumulated on the effect. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to count the invalid rectangles on.</p> </dd> + + + <dd> <p>The returned rectangle count.</p> </dd> + + + + + <p>Gets the invalid rectangles that have accumulated since the last time the effect was drawn and <strong>EndDraw</strong> was then called on the device context.</p> + <p> </p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can use the <strong>InvalidateEffectInputRectangle</strong> method to specify invalidated rectangles for Direct2D to propagate through an effect graph.</p><p>If multiple invalid rectangles are requested, the rectangles that this method returns may overlap. When this is the case, the rectangle count might be lower than the count that <strong>GetEffectInvalidRectangleCount</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Returns the input rectangles that are required to be supplied by the caller to produce the given output rectangle. </p> + <p>The caller should be very careful not to place a reliance on the required input rectangles returned. Small changes for correctness to an effect's behavior can result in different rectangles being returned. In addition, different kinds of optimization applied inside the render can also influence the result. </p> + <p> A failure code, this will typically only be because an effect in the chain returned some error. </p> + + + <dd> <p>The image whose output is being rendered.</p> </dd> + + + <dd> <p>The portion of the output image whose inputs are being inspected.</p> </dd> + + + <dd> <p> A list of the inputs whos rectangles are being queried. </p> </dd> + + + <dd> <p>The input rectangles returned to the caller.</p> </dd> + + + <dd> <p>The number of inputs.</p> </dd> + + + + + <p>Fill using the alpha channel of the supplied opacity mask bitmap. The brush opacity will be modulated by the mask. The render target antialiasing mode must be set to aliased.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap that acts as the opacity mask</p> </dd> + + + <dd> <p>The brush to use for filling the primitive.</p> </dd> + + + <dd> <p>The destination rectangle to output to in the render target</p> </dd> + + + <dd> <p>The source rectangle from the opacity mask bitmap.</p> </dd> + + + + + <p> Creates Direct2D resources. </p> + <p> The <strong>{{ID2D1Factory1}}</strong> interface is used to create devices, register and unregister effects, and enumerate effects properties. Effects are registered and unregistered globally. The registration {{APIs}} are placed on this interface for convenience. </p> + + + + <p>Creates a <strong>{{ID2D1Device}}</strong> object.</p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a <strong>{{ID2D1StrokeStyle1}}</strong> object.</p> + <p>It is valid to specify a dash array only if {{D2D1_DASH_STYLE_CUSTOM}} is also specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Creates an <strong>{{ID2D1PathGeometry1}}</strong> object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Creates a new drawing state block, this can be used in subsequent SaveDrawingState and RestoreDrawingState operations on the render target. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The drawing state description structure.</p> </dd> + + + <dd> <p>The address of the newly created drawing state block.</p> </dd> + + + + + <p>Creates a new <strong>{{ID2D1GdiMetafile}}</strong> object that you can use to replay metafile content. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a stream.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p> <strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory, derived device, and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a string.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p><strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory and derived device and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Unregisters an effect within the factory instance that corresponds to the <em>classId</em> provided. </p> + <p>In order for the effect to be fully unloaded, you must call <strong>UnregisterEffect</strong> the same number of times that you have registered the effect.</p><p>The <strong>UnregisterEffect</strong> method unregisters only those effects that are registered on the same factory. It cannot be used to unregister a built-in effect.</p> + <p>{{D2DERR_EFFECT_IS_NOT_REGISTERED}} if the effect is not registered, {{S_OK}} otherwise.</p> + + + <dd> <p>The identifier of the effect to be unregistered.</p> </dd> + + + + + <p>Returns the class {{IDs}} of the currently registered effects and global effects on this factory.</p> + <p>The set of class {{IDs}} will be atomically returned by the {{API}}. The set will not be interrupted by other threads registering or unregistering effects.</p><p>If <em>effectsRegistered</em> is larger than <em>effectCount</em>, the supplied array will still be filled to capacity with the current set of registered effects. This method returns the {{CLSIDs}} for all global effects and all effects registered to this factory.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</td><td><em>effectsRegistered</em> is larger than <em>effectCount</em>.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains an array of effects. <strong>{{NULL}}</strong> if no effects are retrieved.</p> </dd> + + + <dd> <p>The capacity of the <em>effects</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects copied into <em>effects</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects currently registered in the system.</p> </dd> + + + + + <p>Retrieves the properties of an effect.</p> + <p>The returned effect properties will have all the mutable properties for the effect set to a default of <strong>{{NULL}}</strong>, or an empty value. </p><ul> <li>Value types will be zero-filled.</li> <li>Blob and string types will be zero-length.</li> <li>Array types will have length 1 and the element of the array will conform to the previous rules.</li> </ul><p>This method cannot be used to return the properties for any effect not visible to <strong>{{ID2D1DeviceContext::CreateEffect}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The requested effect could not be found.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The {{ID}} of the effect to retrieve properties from.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the property interface that can be used to query the metadata of the effect.</p> </dd> + + + + + <p> A locking mechanism from a Direct2D factory that Direct2D uses to control exclusive resource access in an app that is uses multiple threads. </p> + <p> You can get an <strong>{{ID2D1Multithread}}</strong> object by querying for it from an <strong>{{ID2D1Factory}}</strong> object. </p><p> You should use this lock while doing any operation on a Direct3D/{{DXGI}} surface. Direct2D will wait on any call until you leave the critical section. </p><strong>Note</strong>?? Normal rendering is guarded automatically by an internal Direct2D lock.? + + + + <p> Returns whether the Direct2D factory was created with the <strong>{{D2D1_FACTORY_TYPE_MULTI_THREADED}}</strong> flag. </p> + <p>Returns true if the Direct2D factory was created as multi-threaded, or false if it was created as single-threaded.</p> + + + + <p>Enters the Direct2D {{API}} critical section, if it exists. </p> + <p>This method does not return a value.</p> + + + + <p>Leaves the Direct2D {{API}} critical section, if it exists.</p> + <p>This method does not return a value.</p> + + + + <p>Creates a new Direct2D device associated with the provided {{DXGI}} device. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>If the creation properties are not specified, then <em>d2dDevice</em> will inherit its threading mode from <em>dxgiDevice</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} device the Direct2D device is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device.</p> </dd> + + + + + <p>Creates a new Direct2D device context associated with a {{DXGI}} surface. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>This function will also create a new <strong>{{ID2D1Device}}</strong> that can be retrieved through <strong>{{ID2D1DeviceContext::GetDevice}}</strong>.</p><p>The {{DXGI}} device will be specified implicitly through <em>dxgiSurface</em>.</p><p>If <em>creationProperties</em> are not specified, the Direct2D device will inherit its threading mode from the {{DXGI}} device implied by <em>dxgiSurface</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface the Direct2D device context is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device context.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device context.</p> </dd> + + + + + <p>Converts the given color from one colorspace to another.</p> + <p>The converted color.</p> + + + <dd> <p>The source color space.</p> </dd> + + + <dd> <p>The destination color space.</p> </dd> + + + <dd> <p>The source color.</p> </dd> + + + + + <p>Returns the sine and cosine of an angle.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The angle to calculate.</p> </dd> + + + <dd> <p>The sine of the angle.</p> </dd> + + + <dd> <p>The cosine of the angle.</p> </dd> + + + + + <p>Returns the tangent of an angle.</p> + <p>The tangent of the angle.</p> + + + <dd> <p>The angle to calculate the tangent for.</p> </dd> + + + + + <p>Returns the length of a 3 dimensional vector.</p> + <p>The length of the vector.</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + + <dd> <p>There were no changes.</p> </dd> + + + <dd> <p>The properties of the effect changed.</p> </dd> + + + <dd> <p>The context state changed.</p> </dd> + + + <dd> <p>The effect?s transform graph has changed. This happens only when an effect supports a variable input count.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + <dd> <p>The logical equivalent of having no flags set.</p> </dd> + + + <dd> <p>If this flag is set, the renderer assumes that the vertex shader will cover the entire region of interest with vertices and need not clear the destination render target. If this flag is not set, the renderer assumes that the vertices do not cover the entire region interest and must clear the render target to transparent black first.</p> </dd> + + + <dd> <p>The renderer will use a depth buffer when rendering custom vertices. The depth buffer will be used for calculating occlusion information. This can result in the renderer output being draw-order dependent if it contains transparency.</p> </dd> + + + <dd> <p>Indicates that custom vertices do not overlap each other.</p> </dd> + + + + + <p>Indicates whether the vertex buffer changes infrequently or frequently.</p> + <p>If a dynamic vertex buffer is created, Direct2D will not necessarily map the buffer directly to a Direct3D vertex buffer. Instead, a system memory copy can be copied to the rendering engine vertex buffer as the effects are rendered.</p> + + + <dd> <p>The created vertex buffer is updated infrequently.</p> </dd> + + + <dd> <p>The created vertex buffer is changed frequently.</p> </dd> + + + + + <p>Specifies the blend operation on two color sources.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND_OP}}</strong>.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Specifies how one of the color sources is to be derived and optionally specifies a preblend operation on the color source.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND}}</strong>.</p> + + + <dd> <p>The data source is black (0, 0, 0, 0). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is white (1, 1, 1, 1). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from the second input of the blend transform. There is not a preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from second input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from second input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the second input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data from the second input of the blend transform. The preblend operation clamps the data to 1 or less.</p> </dd> + + + <dd> <p>The data source is the blend factor. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is the blend factor. The preblend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + + + <p>Allows a caller to control the channel depth of a stage in the rendering pipeline.</p> + + + <dd> <p>The channel depth is the default. It is inherited from the inputs.</p> </dd> + + + <dd> <p>The channel depth is 1.</p> </dd> + + + <dd> <p>The channel depth is 4.</p> </dd> + + + + + <p>Represents filtering modes that a transform may select to use on input textures.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D11_FILTER}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + + + <p>Defines capabilities of the underlying Direct3D device which may be queried using <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + + <p>Defines a property binding to a pair of functions which get and set the corresponding property. </p> + <p>The <strong>propertyName</strong> is used to cross-correlate the property binding with the registration {{XML}}. The <strong>propertyName</strong> must be present in the {{XML}} call or the registration will fail. All properties must be bound.</p> + + + <dd> <p> The name of the property.</p> </dd> + + + <dd> <p> The function that will receive the data to set.</p> </dd> + + + <dd> <p>The function that will be asked to write the output data.</p> </dd> + + + + + <p>Defines a resource texture when the original resource texture is created.</p> + + + + <dd> <p>The extents of the resource table in each dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must be a number from 1 to 3.</p> </dd> + + + <dd> <p>The precision of the resource texture to create. </p> </dd> + + + <dd> <p>The number of channels in the resource texture.</p> </dd> + + + <dd> <p>The filtering mode to use on the texture.</p> </dd> + + + <dd> <p>Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>Defines the properties of a vertex buffer that are standard for all vertex shader definitions.</p> + <p>If <strong>usage</strong> is dynamic, the system might return a system memory buffer and copy these vertices into the rendering vertex buffer for each element.</p><p>If the initialization data is not specified, the buffer will be uninitialized.</p> + + + <dd> <p>The number of inputs to the vertex shader.</p> </dd> + + + <dd> <p>Indicates how frequently the vertex buffer is likely to be updated.</p> </dd> + + + <dd> <p>The initial contents of the vertex buffer.</p> </dd> + + + <dd> <p>The size of the vertex buffer, in bytes.</p> </dd> + + + + + <p>Defines a vertex shader and the input element description to define the input layout. The combination is used to allow a custom vertex effect to create a custom vertex shader and pass it a custom layout.</p> + <p>The vertex shader will be loaded by the <strong>CreateVertexBuffer</strong> call that accepts the vertex buffer properties.</p><p>This structure does not need to be specified if one of the standard vertex shaders is used.</p> + + + <dd> <p>The unique {{ID}} of the vertex shader.</p> </dd> + + + <dd> <p>An array of input assembler stage data types.</p> </dd> + + + <dd> <p>The number of input elements in the vertex shader.</p> </dd> + + + <dd> <p>The vertex stride.</p> </dd> + + + + + <p>Defines a range of vertices that are used when rendering less than the full contents of a vertex buffer.</p> + + + + <dd> <p>The first vertex in the range to process.</p> </dd> + + + <dd> <p>The number of vertices to use.</p> </dd> + + + + + <p>Defines a blend description to be used in a particular blend transform.</p> + <p>This description closely matches the <strong>{{D3D11_BLEND_DESC}}</strong> struct with some omissions and the addition of the blend factor in the description.</p> + + + <dd> <p>Specifies the first {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies the second {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies how to combine the {{RGB}} data sources.</p> </dd> + + + <dd> <p>Specifies the first alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies the second alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies how to combine the alpha data sources.</p> </dd> + + + <dd> <p>Parameters to the blend operations. The blend must use <strong>{{D2D1_BLEND_BLEND_FACTOR}}</strong> for this to be used.</p> </dd> + + + + + <p>Describes the options that transforms may set on input textures.</p> + + + + <dd> <p>The type of filter to apply to the input texture.</p> </dd> + + + <dd> <p>The mip level to retrieve from the upstream transform, if specified.</p> </dd> + + + + + <p>Describes the support for doubles in shaders.</p> + <p>Fill this structure by passing a {{D2D1_FEATURE_DOUBLES}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>{{TRUE}} is doubles are supported within the shaders.</p> </dd> + + + + + <p>Describes compute shader support, which is an option on {{D3D10}} feature level.</p> + <p>You can fill this structure by passing a {{D2D1_}} {{FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>Shader model 4 compute shaders are supported.</p> </dd> + + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + <p>This interface is passed to an effect implementation through the <strong>{{ID2D1EffectImpl::Initialize}}</strong> method. In order to prevent applications casually gaining access to this interface, and to separate reference counts between the public and private interfaces, it is not possible to call <strong>QueryInterface</strong> between the <strong>{{ID2D1DeviceContext}}</strong> and the <strong>{{ID2D1EffectContext}}</strong>.</p><p>Each call to <strong>{{ID2D1Effect::Initialize}}</strong> will be provided a different <strong>{{ID2D1EffectContext}}</strong> interface. This interface tracks resource allocations for the effect. When the effect is released, the corresponding allocations will also be released.</p> + + + + <p>Gets the unit mapping that an effect will use for properties that could be in either dots per inch (dpi) or pixels.</p> + <p> If the <strong>{{D2D1_UNIT_MODE}}</strong> is <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong>, both <em>dpiX</em> and <em>dpiY</em> will be set to 96.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The dpi on the x-axis.</p> </dd> + + + <dd> <p>The dpi on the y-axis.</p> </dd> + + + + + <p> Creates a Direct2D effect for the specified class {{ID}}. This is the same as <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> so custom effects can create other effects and wrap them in a transform. </p> + <p>The created effect does not reference count the {{DLL}} from which the effect was created. If the caller unregisters an effect while this effect is loaded, the resulting behavior is unpredictable.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> </table><p>?</p> + + + + <p>This indicates the maximum feature level from the provided list which is supported by the device. If none of the provided levels are supported, then this {{API}} fails with {{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}</td><td>None of the provided levels are supported.</td></tr> </table><p>?</p> + + + <dd> <p>The feature levels provided by the application.</p> </dd> + + + <dd> <p>The count of feature levels provided by the application</p> </dd> + + + <dd> <p>The maximum feature level from the <em>featureLevels</em> list which is supported by the {{D2D}} device. +</p> </dd> + + + + + <p>Wraps an effect graph into a single transform node and then inserted into a transform graph. This allows an effect to aggregate other effects. This will typically be done in order to allow the effect properties to be re-expressed with a different contract, or to allow different components to integrate each-other?s effects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to be wrapped in a transform node.</p> </dd> + + + <dd> <p>The returned transform node that encapsulates the effect graph.</p> </dd> + + + + + <p>This creates a blend transform that can be inserted into a transform graph. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the blend transform.</p> </dd> + + + <dd> <p>Describes the blend transform that is to be created.</p> </dd> + + + <dd> <p>The returned blend transform.</p> </dd> + + + + + <p>Creates a transform that extends its input infinitely in every direction based on the passed in extend mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The extend mode in the X-axis direction.</p> </dd> + + + <dd> <p>The extend mode in the Y-axis direction.</p> </dd> + + + <dd> <p>The returned transform.</p> </dd> + + + + + <p>Creates and returns an offset transform.</p> + <p>An offset transform is used to offset an input bitmap without having to insert a rendering pass. An offset transform is automatically inserted by an Affine transform if the transform evaluates to a pixel-aligned transform.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The offset amount.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to an offset transform object.</p> </dd> + + + + + <p>Creates and returns a bounds adjustment transform.</p> + <p>A support transform can be used for two different reasons.</p><ul> <li>To indicate that a region of its input image is already transparent black. This can increase efficiency for rendering bitmaps. <strong>Note</strong>??If the indicated region does {{NOT}} contain only transparent black pixels, then rendering results are undefined. ? </li> <li>To increase the size of the input image. The expanded area will be treated as transparent black +</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The initial output rectangle for the bounds adjustment transform.</p> </dd> + + + <dd> <p>The returned bounds adjustment transform.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>This tests to see if the given shader is loaded.</p> + <p>Whether the shader is loaded.</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + + + <p>Creates or finds the given resource texture, depending on whether a resource id is specified. It also optionally initializes the texture with the specified data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>An optional reference to the unique id that identifies the lookup table.</p> </dd> + + + <dd> <p>The properties used to create the resource texture.</p> </dd> + + + <dd> <p>The optional data to be loaded into the resource texture. +</p> </dd> + + + <dd> <p>An optional reference to the stride to advance through the resource texture, according to dimension.</p> </dd> + + + <dd> <p>The size, in bytes, of the data.</p> </dd> + + + <dd> <p>The returned texture that can be used as a resource in a Direct2D effect.</p> </dd> + + + + + <p>Finds the given resource texture if it has already been created with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested resource texture was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a vertex buffer or finds a standard vertex buffer and optionally initializes it with vertices. The returned buffer can be specified in the render info to specify both a vertex shader and or to pass custom vertices to the standard vertex shader used by Direct2D. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>This finds the given vertex buffer if it has already been created with <strong>{{ID2D1EffectContext::CreateVertexBuffer}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested vertex buffer was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a color context from a color space. </p><p>If the color space is Custom, the context is initialized from the <em>profile</em> and <em>profileSize</em> parameters.</p><p>If the color space is not Custom, the context is initialized with the profile bytes associated with the color space. The <em>profile</em> and <em>profileSize</em> parameters are ignored.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>filename</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>This indicates whether an optional capability is supported by the {{D3D}} device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The feature to query support for.</p> </dd> + + + <dd> <p>A structure indicating information about how or if the feature is supported.</p> </dd> + + + <dd> <p>The size of the <em>featureSupportData</em> parameter.</p> </dd> + + + + + <p> Indicates whether the buffer precision is supported by the underlying Direct2D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Describes a node in a transform topology.</p> + <p>Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.</p> + + + + <p>Gets the number of inputs to the transform node.</p> + + <p>This method returns the number of inputs to this transform node.</p> + + + + <p>Defines a mappable single-dimensional vertex buffer.</p> + + + + + <p>Maps the provided data into user memory.</p> + <p> If <em>data</em> is larger than <em>bufferSize</em>, this method fails. </p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains the address of a reference to the available buffer.</p> </dd> + + + <dd> <p>The desired size of the buffer.</p> </dd> + + + + + <p>Unmaps the vertex buffer.</p> + <p>After this method returns, the mapped memory from the vertex buffer is no longer accessible by the effect.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}}</td><td>The object was not in the correct state to process the method.</td></tr> </table><p>?</p> + + + + <p>Tracks a transform-created resource texture.</p> + + + + + <p>Updates the specific resource texture inside the specific range or box using the supplied data.</p> + <p>The number of dimensions in the update must match those of the created texture.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td> {{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The "left" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The "right" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The stride to advance through the input data, according to dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must match the number used to load the texture.</p> </dd> + + + <dd> <p>The data to be placed into the resource texture.</p> </dd> + + + <dd> <p>The size of the data buffer to be used to update the resource texture.</p> </dd> + + + + + <p>Describes the render information common to all of the various transform implementations.</p> + <p>This interface is used by a transform implementation to first describe and then indicate changes to the rendering pass that corresponds to the transform.</p> + + + + <p>Sets how a specific input to the transform should be handled by the renderer in terms of sampling.</p> + <p>The input description must be matched correctly by the effect shader code.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input that will have the input description applied.</p> </dd> + + + <dd> <p>The description of the input to be applied to the transform.</p> </dd> + + + + + <p>Allows a caller to control the output precision and channel-depth of the transform in which the render information is encapsulated.</p> + <p> If the output precision of the transform is not specified, then it will default to the precision specified on the Direct2D device context. The maximum of 16bpc <strong>{{UNORM}}</strong> and 16bpc <strong>{{FLOAT}}</strong> is 32bpc <strong>{{FLOAT}}</strong>.</p><p>The output channel depth will match the maximum of the input channel depths if the channel depth is <strong>{{D2D1_CHANNEL_DEPTH_DEFAULT}}</strong>.</p><p>There is no global output channel depth, this is always left to the control of the transforms. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of buffer that should be used as an output from this transform.</p> </dd> + + + <dd> <p>The number of channels that will be used on the output buffer. </p> </dd> + + + + + <p>Specifies that the output of the transform in which the render information is encapsulated is or is not cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output of the transform is cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides an estimated hint of shader execution cost to {{D2D}}.</p> + <p>The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this {{API}} is optional, but it may improve performance if you provide an accurate number. </p><strong>Note</strong>??Instructions that occur in a loop should be counted according to the number of loop iterations.? + <p>This method does not return a value.</p> + + + <dd> <p>An approximate instruction count of the associated shader.</p> </dd> + + + + + <p>This interface is used to describe a {{GPU}} rendering pass on a vertex or pixel shader. It is passed to <strong>{{ID2D1DrawTransform}}</strong>.</p> + + + + <p>Sets the constant buffer for this transform's pixel shader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the texture to be bound to the pixel shader.</p> </dd> + + + <dd> <p>The created resource texture.</p> </dd> + + + + + <p>Sets the constant buffer for this transform's vertex shader.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Set the shader instructions for this transform.</p> + <p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and will fail to Draw, it will place the context into an error state which can be retrieved through the <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call. </p><p>Specifying <em>pixelOptions</em> other than {{D2D1_PIXEL_OPTIONS_NONE}} can enable the renderer to perform certain optimizations such as combining various parts of the effect graph together. If this information does not accurately describe the shader, indeterminate rendering artifacts can result. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The resource id for the shader.</p> </dd> + + + <dd> <p>Additional information provided to the renderer to indicate the operations the pixel shader does.</p> </dd> + + + + + <p>Sets a vertex buffer, a corresponding vertex shader, and options to control how the vertices are to be handled by the Direct2D context.</p> + <p>The vertex shaders associated with the vertex buffer through the vertex shader {{GUID}} must have been loaded through the <strong>{{ID2D1EffectContext::LoadVertexShader}}</strong> method before this call is made.</p><p>If you pass the vertex option <strong>{{D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR}}</strong>, then the method fails unless the blend description is exactly this: </p><pre>{{D2D1_BLEND_DESCRIPTION}} blendDesc = { {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, { 1.0f, 1.0f, 1.0f, 1.0f } };</pre><p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p><p> If blendDescription is {{NULL}}, a foreground-over blend mode is used.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The vertex buffer, if this is cleared, the default vertex shader and mapping to the transform rectangles will be used.</p> </dd> + + + <dd> <p>Options that influence how the renderer will interact with the vertex shader.</p> </dd> + + + <dd> <p>How the vertices will be blended with the output texture.</p> </dd> + + + <dd> <p>The set of vertices to use from the buffer. +</p> </dd> + + + <dd> <p>The {{GUID}} of the vertex shader.</p> </dd> + + + + + <p>Enables specification of information for a compute-shader rendering pass.</p> + <p>The transform changes the state on this render information to specify the compute shader and its dependent resources.</p> + + + + <p>Establishes or changes the constant buffer data for this transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Sets the compute shader to the given shader resource. The resource must be loaded before this call is made.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{GUID}} of the shader.</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index to the given texture resource. The texture resource must already have been loaded with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> method. This call will fail if the specified index overlaps with any input. The input indices always precede the texture {{LUT}} indices. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>Represents a graph of transform nodes.</p> + <p>This interface allows a graph of transform nodes to be specified. This interface is passed to <strong>{{ID2D1EffectImpl::Initialize}}</strong> to allow an effect implementation to specify a graph of transforms or a single transform.</p> + + + + <p>Returns the number of inputs to the transform graph.</p> + <p>The number of inputs to this transform graph.</p> + + + + <p>Sets a single transform node as being equivalent to the whole graph.</p> + <p>This equivalent to calling <strong>{{ID2D1TransformGraph::Clear}}</strong>, adding a single node, connecting all of the node inputs to the effect inputs in order, and setting the transform not as the graph output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node to be set.</p> </dd> + + + + + <p>Adds the provided node to the transform graph.</p> + <p>This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way. +</p><p>A transform graph cannot be directly added to another transform graph. +Only interfaces derived from <strong>{{ID2D1TransformNode}}</strong> can be added to the transform graph. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be added to the transform graph.</p> </dd> + + + + + <p>Removes the provided node from the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p><p>Any connections to this node will be removed when the node is removed.</p><p>After the node is removed, it cannot be used by the interface until it has been added to the graph by <strong>AddNode</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be removed from the transform graph.</p> </dd> + + + + + <p>Sets the output node for the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be considered the output of the transform node.</p> </dd> + + + + + <p>Connects two nodes inside the transform graph.</p> + <p>Both nodes must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node from which the connection will be made.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Connects a transform node inside the graph to the corresponding effect input of the encapsulating effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The effect input to which the transform node will be bound.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Clears the transform nodes and all connections from the transform graph.</p> + <p>Used when enough changes to transfoms would make editing of the transform graph inefficient.</p> + <p>This method does not return a value.</p> + + + + <p>Uses the specified input as the effect output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input to the effect.</p> </dd> + + + + + <p>Represents the base interface for all of the transforms implemented by the transform author.</p> + <p>Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.</p> + + + + <p>Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle from which the inputs must be mapped.</p> </dd> + + + <dd> <p>The corresponding set of inputs. The inputs will directly correspond to the transform inputs.</p> </dd> + + + <dd> <p>The number of inputs specified. Direct2D guarantees that this is equal to the number of inputs specified on the transform.</p> </dd> + + + + + <p>Performs the inverse mapping to <strong>MapOutputRectToInputRects</strong>.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>Unlike the <strong>MapOutputRectToInputRects</strong> and <strong>MapInvalidRect</strong> functions, this method is explicitly called by the renderer at a determined place in its rendering algorithm. The transform implementation may change its state based on the input rectangles and use this information to control its rendering information. This method is always called before the <strong>MapInvalidRect</strong> and <strong>MapOutputRectToInputRects</strong> methods of the transform.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the input rectangles for this rendering pass into the transform.</p> + <p>The transform implementation must regard <strong>MapInvalidRect</strong> as purely functional. The transform implementation can base the mapped input rectangle on the transform implementation's current state as specified by the encapsulating effect properties. But the transform implementation can't change its own state in response to a call to <strong>MapInvalidRect</strong>. Direct2D can call this method at any time and in any sequence following a call to the <strong>MapInputRectsToOutputRect</strong> method. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the input rectangle.</p> </dd> + + + <dd> <p>The invalid input rectangle.</p> </dd> + + + <dd> <p>The output rectangle to which the input rectangle must be mapped.</p> </dd> + + + + + <p>A specialized implementation of the Shantzis calculations to a transform implemented on the {{GPU}}. These calculations are described in the paper A model for efficient and flexible image computing.</p><p>The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the <strong>SetDrawInfo</strong> method. </p> + + + + <p> Provides the {{GPU}} render info interface to the transform implementation.</p> + <p>The transform can maintain a reference to this interface for its lifetime. If any properties change on the transform, it can apply these changes to the corresponding <em>drawInfo</em> interface. </p><p>This is also used to determine that the corresponding nodes in the graph are dirty.</p> + <p>Any {{HRESULT}} value can be returned when implementing this method. A failure will be returned from the corresponding <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call.</p> + + + <dd> <p>The interface supplied back to the calling method to allow it to specify the {{GPU}} based transform pass.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Sets the render information used to specify the compute shader pass.</p> + <p>If this method fails, <strong>{{ID2D1TransformGraph::AddNode}}</strong> fails.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The render information object to set.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Supplies data to an analysis effect.</p> + <p> This interface can be implemented by either an <strong>{{ID2D1DrawTransform}}</strong> or an <strong>{{ID2D1ComputeTransform}}</strong>.</p> + + + + <p>Supplies the analysis data to an analysis transform.</p> + <p>The output of the transform will be copied to {{CPU}}-accessible memory by the imaging effects system before being passed to the implementation.</p><p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data that the transform will analyze.</p> </dd> + + + <dd> <p>The size of the analysis data.</p> </dd> + + + + + <p>Represents a {{CPU}}-based rasterization stage in the transform pipeline graph.</p> + <p><strong>{{ID2D1SourceTransform}}</strong> specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.</p> + + + + <p>Sets the render information for the transform.</p> + <p>Provides a render information interface to the source transform to allow it to specify state to the rendering system.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The interface supplied to the transform to allow specifying the {{CPU}} based transform pass.</p> </dd> + + + + + <p>Draws the transform to the graphics processing unit ({{GPU}})?based Direct2D pipeline.</p> + <p>The implementation of the rasterizer guarantees that adding the <em>renderRect</em> to the <em>targetOrigin</em> does not exceed the bounds of the bitmap.</p><p>When implementing this method you must update the bitmap in this way: </p><ol> <li>Call the <strong>{{ID2D1Bitmap::Map}}</strong> method with the {{D2D1_MAP_OPTIONS_DISCARD}} and {{D2D1_MAP_OPTIONS_WRITE}} +flags.</li> <li>Update the buffer this method returns.</li> <li>Call the <strong>{{ID2D1Bitmap::Unmap}}</strong> method.</li> </ol><p>If you set the buffer precision manually on the associated <strong>{{ID2D1RenderInfo}}</strong> object, it must handle different pixel formats in this method by calling <strong>{{ID2D1Bitmap::GetPixelFormat}}</strong>. If you set the buffer precision manually, then you can rely on that format always being the one you provided.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The target to which the transform should be written.</p> </dd> + + + <dd> <p>The area within the source from which the image should be drawn.</p> </dd> + + + <dd> <p>The origin within the target bitmap to which the source data should be drawn.</p> </dd> + + + + + <p>Represents the set of transforms implemented by the effect-rendering system, which provides fixed-functionality.</p> + + + + + <p>Sets the properties of the output buffer of the specified transform node.</p> + <p>You can use the <strong>{{ID2D1EffectContext::IsBufferPrecisionSupported}}</strong> method to see if buffer precision is supported.</p><p>The available channel depth and precision depend on the capabilities of the underlying Microsoft Direct3D device.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> </table><p>?</p> + + + <dd> <p>The number of bits and the type of the output buffer.</p> </dd> + + + <dd> <p>The number of channels in the output buffer (1 or 4).</p> </dd> + + + + + <p>Sets whether the output of the specified transform is cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output should be cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides methods to allow a blend operation to be inserted into a transform graph.</p><p>The image output of the blend transform is the same as rendering an image effect graph with these steps:</p><ul> <li>Copy the first input to the destination image.</li> <li>Render the next input on top using the blend description.</li> <li>Continue for each additional input.</li> </ul> + + + + + <p>Changes the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new blend description specified for the blend transform.</p> </dd> + + + + + <p>Gets the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the blend description specified for the blend transform.</p> </dd> + + + + + <p>Extends the input rectangle to infinity using the specified extend modes.</p> + + + + <p>Sets the extend mode in the x direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the x direction.</p> </dd> + + + + + <p>Sets the extend mode in the y direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the y direction.</p> </dd> + + + + + <p>Gets the extend mode in the x direction.</p> + + <p>This method returns the extend mode in the x direction.</p> + + + + <p>Gets the extend mode in the y direction.</p> + + <p>This method returns the extend mode in the y direction.</p> + + + + <p>Instructs the effect-rendering system to offset an input bitmap without inserting a rendering pass.</p> + <p>Because a rendering pass is not required, the interface derives from a transform node. This allows it to be inserted into a graph but does not allow an output buffer to be specified.</p> + + + + <p>Sets the offset in the current offset transform.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new offset to apply to the offset transform.</p> </dd> + + + + + <p>Gets the offset currently in the offset transform.</p> + + <p>The current transform offset.</p> + + + + <p>A support transform for effects to modify the output rectangle of the previous effect or bitmap. </p> + <p>The support transform can be used for two different reasons.</p><ul> <li> <p>To indicate that a region of its input image is already transparent black. The expanded area will be treated as transparent black.</p> <p>This can increase efficiency for rendering bitmaps.</p> </li> <li> <p>To increase the size of the input image.</p> </li> </ul><p>?</p><p>?</p> + + + + <p>This sets the output bounds for the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Returns the output rectangle of the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Allows a custom effect's interface and behavior to be specified by the effect author.</p> + <p>This interface is created by the effect author from a static factory registered through the <strong>{{ID2D1Factory::RegisterEffect}}</strong> method.</p> + + + + <p>The effect can use this method to do one time initialization tasks. If this method is not needed, the method can just return <strong>{{S_OK}}</strong>.</p> + <p>This moves resource creation cost to the <strong>CreateEffect</strong> call, rather than during rendering.</p><p>If the implementation fails this call, the corresponding <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> call also fails.</p><p>The following example shows an effect implementing an initialize method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An internal context interface that creates and returns effect author?centric types.</p> </dd> + + + <dd> <p>The effect can populate the transform graph with a topology and can update it later.</p> </dd> + + + + + <p>Prepares an effect for the rendering process.</p> + <p>This method is called by the renderer when the effect is within an effect graph that is drawn.</p><p> The method will be called:</p><ul> <li>If the effect has been initialized but has not previously been drawn.</li> <li>If an effect property has been set since the last draw call.</li> <li>If the context state has changed since the effect was last drawn.</li> </ul><p>The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.</p><p>Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the type of change the effect should expect.</p> </dd> + + + + + <p>The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. </p><p>The renderer calls this method when:</p><ul> <li>When the effect is first initialized.</li> <li>If the number of inputs to the effect changes.</li> </ul> + <p>An error that prevents the effect from being initialized if called as part of the CreateEffect call. If the effect fails a subsequent SetGraph call:</p><ul> <li>The error will be returned from the property method that caused the number of inputs to the effect to change. +</li> <li>The effect object will be placed into an error state, if subsequently used to render, the context will be placed into a temporary error state, that particular effect will fail to render and the failure will be returned on the next EndDraw or Flush call.</li> </ul> + + + <dd> <p>The graph to which the effect describes its transform topology through the SetDescription call.</p> </dd> + + + + + <p>The rendering priority affects the extent to which Direct2D will throttle its rendering workload.</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Retrieves the current rendering priority of the device.</p> + <p> The current rendering priority of the device.</p> + + + + <p>Sets the priority of Direct2D rendering operations performed on any device context associated with the device.</p> + <p>Calling this method affects the rendering priority of all device contexts associated with the device. This method can be called at any time, but is not guaranteed to take effect until the beginning of the next frame. The recommended usage is to call this method outside of <strong>BeginDraw</strong> and <strong>EndDraw</strong> blocks. Cycling this property frequently within drawing blocks will effectively reduce the benefits of any throttling that is applied.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The desired rendering priority for the device and associated contexts.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.</p> + + + + <p>Enables creation and drawing of geometry realization objects. </p> + + + + <p>Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The width of the stroke. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The stroke style (optional).</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Renders a given geometry realization to the target with the specified brush.</p> + <p> This method respects all currently set state (transform, {{DPI}}, unit mode, target image, clips, layers); however, artifacts such as faceting may appear when rendering the realizations with a large effective scale (either via the transform or the {{DPI}}). Callers should create their realizations with an appropriate flattening tolerance using either <strong>{{D2D1_DEFAULT_FLATTENING_TOLERANCE}}</strong> or <strong>ComputeFlatteningTolerance</strong> to compensate for this. </p><p>Additionally, callers should be aware of the safe render bounds when creating geometry realizations. If a geometry extends outside of [-524,287, 524,287] {{DIPs}} in either the X- or the Y- direction in its original (pre-transform) coordinate space, then it may be clipped to those bounds when it is realized. This clipping will be visible even if the realization is subsequently transformed to fit within the safe render bounds.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry realization to be rendered.</p> </dd> + + + <dd> <p>The brush to render the realization with.</p> </dd> + + + + + <p> Creates Direct2D resources. </p><p> This interface also enables the creation of <strong>{{ID2D1Device1}}</strong> objects. </p> + + + + <p>Creates an <strong>{{ID2D1Device1}}</strong> object. </p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device1}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink}}</strong> interface. It also enables access to the new primitive blend modes, {{MIN}} and {{ADD}}, through its <strong>SetPrimitiveBlend1</strong> method.</p> + + + + <p>Sets a new primitive blend mode. </p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>Computes the maximum factor by which a given transform can stretch any vector.</p> + <p>Formally, if M is the input matrix, this method will return the maximum value of |V * M| / |V| for all vectors V, where |.| denotes length. </p><strong>Note</strong>??Since this describes how M affects vectors (rather than points), the translation components (_31 and _32) of M are ignored.? + <p>The scale factor.</p> + + + <dd> <p>The input transform matrix.</p> </dd> + + + + + <p> Identifiers for properties of the {{YCbCr}} effect. </p> + + + + <p> Specifies the chroma subsampling of the input chroma image used by the {{YCbCr}} effect. </p> + + + + <p>Specifies the interpolation mode for the {{YCbCr}} effect.</p> + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + + + + + + + + + + <p> Specifies the appearance of the ink nib (pen tip) as part of an <strong>{{D2D1_INK_STYLE_PROPERTIES}}</strong> structure. </p> + + + + <p>Specifies the flip and rotation at which an image appears.</p> + + + <dd> <p>The orientation is unchanged.</p> </dd> + + + <dd> <p>The image is flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees.</p> </dd> + + + + + <p>Controls option flags for a new {{ID2D1ImageSource}} when it is created.</p> + <p> ? </p><p>{{D2D1_IMAGE_SOURCE_CREATION_OPTIONS_RELEASE_SOURCE}} causes the image source to not retain a reference to the source object used to create it. It can decrease the quality and efficiency of printing.</p> + + + <dd> <p>No options are used.</p> </dd> + + + <dd> <p>Indicates the image source should release its reference to the {{WIC}} bitmap source after it has initialized. By default, the image source retains a reference to the {{WIC}} bitmap source for the lifetime of the object to enable quality and speed optimizations for printing. This option disables that optimization. +</p> </dd> + + + <dd> <p>Indicates the image source should only populate subregions of the image cache on-demand. You can control this behavior using the <strong>EnsureCached</strong> and <strong>TrimCache</strong> methods. This options provides the ability to improve memory usage by only keeping needed portions of the image in memory. This option requires that the image source has a reference to the {{WIC}} bitmap source, and is incompatible with {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE}}.</p> </dd> + + + + + <p>Option flags controlling primary conversion performed by <strong>CreateImageSourceFromDxgi</strong>, if any.</p> + + + + <p>Option flags for transformed image sources.</p> + + + <dd> <p>No option flags.</p> </dd> + + + <dd> <p>Prevents the image source from being automatically scaled (by a ratio of the context {{DPI}} divided by 96) while drawn.</p> </dd> + + + + + <p>Specifies how to render gradient mesh edges.</p> + + + <dd> <p>Render this patch edge aliased. Use this value for the internal edges of your gradient mesh.</p> </dd> + + + <dd> <p>Render this patch edge antialiased. Use this value for the external (boundary) edges of your mesh.</p> </dd> + + + <dd> <p>Render this patch edge aliased and also slightly inflated. Use this for the internal edges of your gradient mesh when there could be t-junctions among patches. Inflating the internal edges mitigates seams that can appear along those junctions.</p> </dd> + + + + + <p>Specifies additional aspects of how a sprite batch is to be drawn, as part of a call to <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong>.</p> + + + + <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> + + + <dd> <p>Color bitmap glyph positions are snapped to the nearest pixel if the bitmap resolution matches that of the device context.</p> </dd> + + + <dd> <p>Color bitmap glyph positions are not snapped.</p> </dd> + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Properties of a transformed image source.</p> + + + <dd> <p>The orientation at which the image source is drawn.</p> </dd> + + + <dd> <p>The horizontal scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The vertical scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The interpolation mode used when the image source is drawn. This is ignored if the image source is drawn using the DrawImage method, or using an image brush.</p> </dd> + + + <dd> <p>Image sourc option flags.</p> </dd> + + + + + <p>Represents a point, radius pair that makes up part of a <strong>{{D2D1_INK_BEZIER_SEGMENT}}</strong>.</p> + + + + <p>Represents a Bezier segment to be used in the creation of an <strong>{{ID2D1Ink}}</strong> object. This structure differs from <strong>{{D2D1_BEZIER_SEGMENT}}</strong> in that it is composed of <strong>{{D2D1_INK_POINT}}</strong>s, which contain a radius in addition to x- and y-coordinates. </p> + + + + <p> Defines the general pen tip shape and the transform used in an <strong>{{ID2D1InkStyle}}</strong> object. </p> + + + + <p> Represents a tensor patch with 16 control points, 4 corner colors, and boundary flags. An {{ID2D1GradientMesh}} is made up of 1 or more gradient mesh patches. Use the <strong>GradientMeshPatch function</strong> or the <strong>GradientMeshPatchFromCoonsPatch function</strong> to create one. </p> + <p>The following image shows the numbering of control points on a tensor grid.</p> + + + + <p>Creates a color context from a simple color profile. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The simple color profile to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + <p> Represents a collection of style properties to be used by methods like <strong>{{ID2D1DeviceContext2::DrawInk}}</strong> when rendering ink. The ink style defines the nib (pen tip) shape and transform. </p> + + + + <p>Sets the transform to apply to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform to apply to this style?s nib shape. Note that the translation components of the transform matrix are ignored for the purposes of rendering.</p> </dd> + + + + + <p>Retrieves the transform to be applied to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the transform to be applied to this style's nib shape.</p> </dd> + + + + + <p>Sets the pre-transform nib shape for this style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The pre-transform nib shape to use in this style.</p> </dd> + + + + + <p>Retrieves the pre-transform nib shape for this style.</p> + <p>Returns the pre-transform nib shape for this style.</p> + + + + <p>Represents a single continuous stroke of variable-width ink, as defined by a series of Bezier segments and widths.</p> + + + + <p>Sets the starting point for this ink object. This determines where this ink object will start rendering.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The new starting point for this ink object.</p> </dd> + + + + + <p>Retrieves the starting point for this ink object.</p> + <p>The starting point for this ink object.</p> + + + + <p>Adds the given segments to the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of segments to be added to this ink object.</p> </dd> + + + <dd> <p>The number of segments to be added to this ink object.</p> </dd> + + + + + <p>Removes the given number of segments from the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of segments to be removed from the end of this ink object. Note that segmentsCount must be less or equal to the number of segments in the ink object.</p> </dd> + + + + + <p>Updates the specified segments in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to update.</p> </dd> + + + <dd> <p>A reference to the array of segment data to be used in the update.</p> </dd> + + + <dd> <p>The number of segments in this ink object that will be updated with new data. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Updates the last segment in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the segment data with which to overwrite this ink object's last segment. Note that if there are currently no segments in the ink object, SetSegmentsAtEnd will return an error.</p> </dd> + + + + + <p>Returns the number of segments in this ink object.</p> + <p>Returns the number of segments in this ink object.</p> + + + + <p>Retrieves the specified subset of segments stored in this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of retrieved segments.</p> </dd> + + + <dd> <p>The number of segments to retrieve. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Retrieves a geometric representation of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The world transform to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The flattening tolerance to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The geometry sink to which the geometry representation will be streamed.</p> </dd> + + + + + <p>Retrieve the bounds of the geometry, with an optional applied transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>The world transform to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of this ink object.</p> </dd> + + + + + <p>Represents a device-dependent representation of a gradient mesh composed of patches. Use the <strong>{{ID2D1DeviceContext2::CreateGradientMesh}} method</strong> to create an instance of {{ID2D1GradientMesh}}.</p> + + + + <p>Returns the number of patches that make up this gradient mesh.</p> + <p>Returns the number of patches that make up this gradient mesh.</p> + + + + <p>Returns a subset of the patches that make up this gradient mesh.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Index of the first patch to return.</p> </dd> + + + <dd> <p>A reference to the array to be filled with the patch data.</p> </dd> + + + <dd> <p>The number of patches to be returned.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p><strong>OfferResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully offered </li> <li><strong>{{E_INVALIDARG}}</strong> if a resource in the array or the priority is invalid </li> </ul> + + + + <p> Restores access to resources that were previously offered by calling <strong>OfferResources</strong>. </p> + <p> After you call <strong>OfferResources</strong> to offer one or more resources, +you must call <strong>TryReclaimResources</strong> before you can use those resources again. +You must check the value in the <strong>resourcesDiscarded</strong> to determine whether the resource?s content was discarded. +If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully reclaimed </li> <li><strong>{{E_INVALIDARG}}</strong> if the resources are invalid </li> </ul> + + + + <p>Produces 2D pixel data that has been sourced from {{WIC}}.</p> + <p> Create an an instance of {{ID2D1ImageSourceFromWic}} using <strong>{{ID2D1DeviceContext2::CreateImageSourceFromWic}}</strong>. </p> + + + + <p> Ensures that a specified region of the image source cache is populated. This method can be used to minimize glitches by performing expensive work to populate caches outside of a rendering loop. This method can also be used to speculatively load image data before it is needed by drawing routines. </p> + <p>This {{API}} loads image data into caches of image sources, if that data was not already cached. It does not trim pre-existing caches, if any. More areas within the cache can be populated than actually requested.</p><p> ? </p><p>The provided region must be constructed to include the scale with which the image source will subsequently be drawn. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, that should be populated in the cache. By default, this is the entire extent of the image.</p> </dd> + + + + + <p>This method trims the populated regions of the image source cache to just the specified rectangle.</p> + <p>The provided region must be constructed to include the scale at which the image source will be drawn at. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p> ? </p><p>This method will fail if on-demand caching was not requested when the image source was created.</p><p> ? </p><p>As with <strong>{{ID2D1Device::ClearResources}}</strong>, the caller can need to subsequently issue a {{D3D}} flush before memory usage is reduced.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, which should be preserved in the image source cache. Regions which are outside of the rectangle are evicted from the cache. By default, this is an empty rectangle, meaning that the entire image is evicted from the cache.</p> </dd> + + + + + <p>Retrieves the underlying bitmap image source from the Windows Imaging Component ({{WIC}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>On return contains the bitmap image source.</p> </dd> + + + + + <p>Represents an image source which shares resources with an original image source.</p> + + + + <p> Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p>A container for 3D lookup table data that can be passed to the LookupTable3D effect.</p><p>An {{ID2DLookupTable3D}} instance is created using <strong>{{ID2D1DeviceContext2::CreateLookupTable3D}}</strong> or {{ID2D1EffectContext1::CreateLookupTable3D}}.</p> + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Creates a new <strong>{{ID2D1Ink}}</strong> object that starts at the given point.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1InkStyle}}</strong> object, for use with ink rendering methods such as <strong>DrawInk</strong>.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1GradientMesh}}</strong> instance using the given array of patches.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates an image source object from a {{WIC}} bitmap source, while populating all pixel memory within the image source. The image is loaded and stored while using a minimal amount of memory.</p> + <p> This method creates an image source which can be used to draw the image. </p><p>This method supports images that exceed the maximum texture size. Large images are internally stored within a sparse tile cache. </p><p> This {{API}} supports the same set of pixel formats and alpha modes supported by <strong>CreateBitmapFromWicBitmap</strong>. If the {{GPU}} does not support a given pixel format, this method will return {{D2DERR_UNSUPPORTED_PIXEL_FORMAT}}. This method does not apply adjustments such as gamma or alpha premultiplication which affect the appearance of the image. </p><p>This method automatically selects an appropriate storage format to minimize {{GPU}} memory usage., such as using separate luminance and chrominance textures for {{JPEG}} images. </p><p>If the loadingOptions argument is {{NULL}}, {{D2D}} uses {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{WIC}} bitmap source to create the image source from.</p> </dd> + + + <dd> <p>Options for creating the image source. Default options are used if {{NULL}}.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + <p>Creates an image source from a set of {{DXGI}} surface(s). The {{YCbCr}} surface(s) are converted to {{RGBA}} automatically during subsequent drawing.</p> + <p> This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of {{DXGI}} formats and {{DXGI}} color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported: </p><table> <tr><th>Color Space Type</th><th>Surface Count(s)</th><th>Surface Format(s)</th></tr> <tr><td>{{DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709}}</td><td>1</td><td> Standard {{D2D}}-supported pixel formats: <ul> <li>{{DXGI_FORMAT_A8_UNORM}}</li> <li>{{DXGI_FORMAT_R8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8X8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>{{DXGI_FORMAT_R32G32B32A32_FLOAT}}</li> <li>{{DXGI_FORMAT_BC1_UNORM}}</li> <li>{{DXGI_FORMAT_BC2_UNORM}}</li> <li>{{DXGI_FORMAT_BC3_UNORM}}</li> </ul> </td></tr> <tr><td>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601}}</td><td>1, 2, 3</td><td> When Surface count is 1: <ul> <li>{{DXGI_FORMAT_AYUV}}</li> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> <li>{{DXGI_FORMAT_V408}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> <tr><td> {{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601}} <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020}}</p> </td><td>1,2,3</td><td> <p>When Surface count is 1: </p> <ul> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> </table><p>?</p><p>The {{GPU}} must also have sufficient support for a pixel format to be supported by {{D2D}}. To determine whether {{D2D}} supports a format, call IsDxgiFormatSupported.</p><p>This {{API}} converts {{YCbCr}} formats to sRGB using the provided color space type and options. {{RGBA}} data is assumed to be in the desired space, and {{D2D}} does not apply any conversion.</p><p> If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is {{NULL}}, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up). </p><p> If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another. </p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{DXGI}} surfaces to create the image source from.</p> </dd> + + + <dd> <p>The regions of the surfaces to create the image source from.</p> </dd> + + + <dd> <p>The number of surfaces provided; must be between one and three.</p> </dd> + + + <dd> <p>The color space of the input.</p> </dd> + + + <dd> <p>Options controlling color space conversions.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Returns the world bounds of a given gradient mesh.</p> + <p>The world bounds reflect the current {{DPI}}, unit mode, and world transform of the context. They indicate which pixels would be impacted by calling DrawGradientMesh with the given gradient mesh. +They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The gradient mesh whose world bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the gradient mesh, in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the device context using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the render target. If {{NULL}} is specified, the destination rectangle is {0, 0, w, h}, where w and h are the width and height of the metafile as reported by <strong>{{ID2D1GdiMetafile::GetBounds}}</strong>. </p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the metafile. If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>Creates an image source which shares resources with an original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The original image.</p> </dd> + + + <dd> <p>Properties for the source image.</p> </dd> + + + <dd> <p>Receives the new image source.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device1}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext2}}</strong> objects. </p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext2}}</strong> from a Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flush all device contexts that reference a given bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap, created on this device, for which all referencing device contexts will be flushed. </p> </dd> + + + + + <p>Returns the {{DXGI}} device associated with this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{DXGI}} device associated with this Direct2D device.</p> </dd> + + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device2}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device2}}</strong> object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink1}}</strong> interface. It also enables access to ink rendering and gradient mesh rendering.</p> + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the command sink using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the destination rectangle is the size of the target.</p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafile}} interface. It also enables accessing the metafile {{DPI}} and bounds.</p> + + + + <p>Gets the {{DPI}} reported by the metafile.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the horizontal {{DPI}} reported by the metafile.</p> </dd> + + + <dd> <p>Receives the vertical {{DPI}} reported by the metafile.</p> </dd> + + + + + <p>Gets the bounds of the metafile in source space in {{DIPs}}. This corresponds to the frame rect in an {{EMF}}/{{EMF}}+.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafileSink}} interface. It also enables access to metafile records.</p> + + + + <p>Provides access to metafile records, including their type, data, and flags.</p> + <p>For details on the {{EMF}} and {{EMF}}+ formats, please see Microsoft technical documents {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The type of metafile record being processed. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for a list of record types.</p> </dd> + + + <dd> <p>The data contained in this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record data layouts.</p> </dd> + + + <dd> <p>{{TThe}} size of the data pointed to by recordData. </p> </dd> + + + <dd> <p>The set of flags set for this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record flags.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Updates the properties of the specified sprites in this sprite batch. Providing a null value for any property will leave that property unmodified for that sprite. </p> + <p>Returns {{S_OK}} on success. Returns {{E_INVALIDARG}} if an invalid value was passed to the method. In this case, no sprites are modified by this call to SetSprites.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to update.</p> </dd> + + + <dd> <p>The number of sprites to update with new properties. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. </p> <p>Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the updated sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each updated sprite.</p> </dd> + + + + + <p>Retrieves the specified subset of sprites from this sprite batch. For the best performance, use nullptr for properties that you do not need to retrieve.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to retrieve.</p> </dd> + + + <dd> <p>The number of sprites to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the destination rectangles for the retrieved sprites.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the source rectangles for the retrieved sprites. </p> <p>The InfiniteRectU is returned for any sprites that were not assigned a source rectangle.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the colors to be applied to the retrieved sprites. </p> <p>The color {1.0f, 1.0f, 1.0f, 1.0f} is returned for any sprites that were not assigned a color.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the transforms to be applied to the retrieved sprites. </p> <p>The identity matrix is returned for any sprites that were not assigned a transform.</p> </dd> + + + + + <p>Retrieves the number of sprites in this sprite batch.</p> + <p>Returns the number of sprites in this sprite batch</p> + + + + <p>Removes all sprites from this sprite batch.</p> + <p>This method does not return a value.</p> + + + + <p>This interface performs all the same functions as the <strong>{{ID2D1DeviceContext2}}</strong> interface, plus it enables functionality for creating and drawing sprite batches.</p> + + + + <p>Creates a new, empty sprite batch. After creating a sprite batch, use <strong>{{ID2D1SpriteBatch::AddSprites}}</strong> to add sprites to it, then use <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong> to draw it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Renders all sprites in the given sprite batch to the device context using the specified drawing options.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device2}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext3}}</strong> objects.</p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext3}}</strong> from this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device3}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device3}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink2}}</strong> interface. It also enables access to sprite batch rendering.</p> + + + + <p>Renders part or all of the given sprite batch to the device context using the specified drawing options.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The index of the first sprite in the sprite batch to draw.</p> </dd> + + + <dd> <p>The number of sprites to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>This object supplies the values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> + + + + <p>Provides values to an {{SVG}} glyph for fill.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the area is painted. A null brush will cause the context-fill value to come from the <strong>defaultFillBrush</strong>. If the defaultFillBrush is also null, the context-fill value will be 'none'. To set the ?context-fill? value, this method uses the provided brush with its opacity set to 1. To set the ?context-fill-opacity? value, this method uses the opacity of the provided brush. </p> </dd> + + + + + <p>Returns the requested fill parameters.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + + + <p>Provides values to an {{SVG}} glyph for stroke properties. The brush with opacity set to 1 is used as the 'context-stroke'. The opacity of the brush is used as the 'context-stroke-opacity' value.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the stroke is painted. A null brush will cause the context-stroke value to be none.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dasharray' property. A null value will cause the stroke-dasharray to be set to 'none'.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p>Returns the number of dashes in the dash array.</p> + <p>Returns the number of dashes in the dash array.</p> + + + + <p>Returns the requested stroke parameters. Any parameters that are non-null will receive the value of the requested parameter. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the stroke is painted.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dasharray' property.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p> This interface performs all the same functions as the <strong>{{ID2D1DeviceContext3}}</strong> interface, plus it enables functionality for handling new types of color font glyphs. </p> + + + + <p>Creates an {{SVG}} glyph style object.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>On completion points to the created <strong>{{ID2D1SvgGlyphStyle}}</strong> object.</p> </dd> + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Draws a text layout object. If the layout is not subsequently changed, this can be more efficient than DrawText when drawing the same layout repeatedly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point, described in device-independent pixels, at which the upper-left corner of the text described by <em>textLayout</em> is drawn.</p> </dd> + + + <dd> <p>The formatted text to draw. Any drawing effects that do not inherit from <strong>{{ID2D1Resource}}</strong> are ignored. If there are drawing effects that inherit from <strong>{{ID2D1Resource}}</strong> that are not brushes, this method fails and the render target is put in an error state. </p> </dd> + + + <dd> <p>The brush used to paint the text.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font.</p> </dd> + + + <dd> <p> A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is <strong>{{D2D1_DRAW_TEXT_OPTIONS_NONE}}</strong>, which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. </p> </dd> + + + + + <p>Draws a color bitmap glyph run using one of the bitmap formats.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the format of the glyph image. Supported formats are {{DWRITE_GLYPH_IMAGE_FORMATS_PNG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_JPEG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_TIFF}}, or {{DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8}}. This method will result in an error if the color glyph run does not contain the requested format. </p> <p>Only one format can be specified at a time, combinations of flags are not valid input.</p> </dd> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Indicates the measuring method.</p> </dd> + + + <dd> <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> </dd> + + + + + <p>Draws a color glyph run that has the format of {{DWRITE_GLYPH_IMAGE_FORMATS_SVG}}.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>Values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Indicates the measuring method used for text layout.</p> </dd> + + + + + <p> Retrieves an image of the color bitmap glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The format for the glyph image. If there is no image data in the requested format for the requested glyph, this method will return an error. </p> </dd> + + + <dd> <p>The origin for the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the choice of which bitmap to use from the font. It also affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image. This input transform affects the choice of which bitmap to use from the font. It is also factored into the output glyphTransform.</p> </dd> + + + <dd> <p>Dots per inch along the x-axis.</p> </dd> + + + <dd> <p>Dots per inch along the y-axis.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion contains the retrieved glyph image.</p> </dd> + + + + + <p> Retrieves an image of the {{SVG}} glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Origin of the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph to retrieve.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image.</p> </dd> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion, contains the retrieved glyph image.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device3}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext4}}</strong> objects. </p> + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Sets the maximum capacity of the color glyph cache. </p> + <p>The color glyph cache is used to store color bitmap glyphs and {{SVG}} glyphs, enabling faster performance if the same glyphs are needed again. The capacity determines the amount of memory that {{D2D}} may use to store glyphs that the application does not already reference. If the application references a glyph using <strong>GetColorBitmapGlyphImage</strong> or <strong>GetSvgGlyphImage</strong>, after it has been evicted, this glyph does not count toward the cache capacity.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The maximum capacity of the color glyph cache.</p> </dd> + + + + + <p>Gets the maximum capacity of the color glyph cache.</p> + <p>Returns the maximum capacity of the color glyph cache in bytes.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device4}}</strong> objects.</p> + + + + <p> Creates an <strong>{{ID2D1Device4}}</strong> object. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink3}}</strong> interface. It also enables access to the new primitive blend mode, {{MAX}}, through the <strong>SetPrimitiveBlend2</strong> method.</p> + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Represents a color context to be used with the Color Management Effect.</p> + + + + + + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + + + + + + + <p>Creates a color context from a {{DXGI}} color space type. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The color space to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Returns the interior points for a gradient mesh patch based on the points defining a Coons patch.</p><strong>Note</strong>??<p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p>? + <p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p> + <p>This function does not return a value.</p> + + + + <p>Identifiers for properties of the Contrast effect.</p> + + + + <p>Indentifiers for properties of the {{RGB}} to Hue effect.</p> + + + + <p>Values for the <strong>{{D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE}}</strong> property of the {{RGB}} to Hue effect.</p> + + + + <p>Identifiers for properties of the Hue to {{RGB}} effect.</p> + + + + <p>Values for the <strong>{{D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE}}</strong> property of the Hue to {{RGB}} effect.</p> + + + + <p>Identifiers for properties of the Chroma-key effect.</p> + + + + <p>Identifiers for properties of the Emboss effect.</p> + + + + <p>Identifiers for properties of the Exposure effect.</p> + + + + <p>Identifiers for properties of the Posterize effect.</p> + + + + <p>Identifiers for properties of the Sepia effect.</p> + + + + <p>Identifiers for properties of the Sharpen effect.</p> + + + + <p>Identifiers for properties of the Straighten effect.</p> + + + + <p>Values for the <strong>{{D2D1_STRAIGHTEN_PROP_SCALE_MODE}}</strong> property of the Straighten effect.</p> + + + + <p>Identifiers for properties of the Temperature and Tint effect.</p> + + + + <p>Identifiers for properties of the Vignette effect.</p> + + + + <p>Identifiers for properties of the Edge Detection effect.</p> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_STRENGTH}} property is a float value modulating the response of the edge detection filter. A low strength value means that weaker edges will get filtered out, while a high value means stronger edges will get filtered out. The allowed range is 0.0 to 1.0. The default value is 0.5.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_BLUR_RADIUS}} property is a float value specifying the amount of blur to apply. Applying blur is used to remove high frequencies and reduce phantom edges. The allowed range is 0.0 to 10.0. The default value is 0.0 (no blur applied).</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_MODE}} property is a <strong>{{D2D1_EDGEDETECTION_MODE}}</strong> enumeration value which mode to use for edge detection. The default value is {{D2D1_EDGEDETECTION_MODE_SOBEL}}.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} property is a boolean value. Edge detection only applies to the {{RGB}} channels, the alpha channel is ignored for purposes of detecting edges. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is false, the output edges is fully opaque. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is true, the input opacity is preserved. The default value is false.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration value indicating the alpha mode of the input file. If the input is not opaque, this value is used to determine whether to unpremultiply the inputs. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information. The default value is {{D2D1_ALPHA_MODE_PREMULTIPLIED}}.</p> </dd> + + + + + <p>Values for the <strong>{{D2D1_EDGEDETECTION_PROP_MODE}}</strong> property of the Edge Detection effect.</p> + + + + <p>Identifiers for properties of the Highlights and Shadows effect.</p> + + + + <p>Values for the <strong>{{D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA}}</strong> property of the Highlights and Shadows effect.</p> + + + + <p>Identifiers for the properties of the 3D Lookup Table effect.</p> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_LUT}} property is a reference to an <strong>{{ID2D1LookupTable3D}}</strong> object. The default value is null.</p> </dd> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> value indicating the alpha mode of the input file. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information.</p> </dd> + + + + + <p>This effect adjusts the opacity of an image by multiplying the alpha channel of the input by the specified opacity value. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Opacity}}.</p> + + + + <p>This effect combines two images by adding weighted pixels from input images. It has two inputs, named Destination and Source.</p><p>The cross fade formula is <strong>output = weight * Destination + (1 - weight) * Source</strong>.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1CrossFade}}.</p> + + + + <p>This effect tints the source image by multiplying the source image by the specified color. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Tint}}.</p> + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Interface for all {{SVG}} elements.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + <p>Interface describing an {{SVG}} points value in a polyline or polygon element.</p> + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Used with <strong>{{ID3D11On12Device::CreateWrappedResource}}</strong> to override flags that would be inferred by the resource properties or heap properties, including bind flags, misc flags, and {{CPU}} access flags. </p> + <p> Use this structure with <strong>CreateWrappedResource</strong>. </p> + + + + <p>Handles the creation, wrapping and releasing of {{D3D11}} resources for Direct3D 11on12.</p> + + + + <p> This method creates {{D3D11}} resources for use with {{D3D}} 11on12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to an already-created {{D3D12}} resource or heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D11_RESOURCE_FLAGS}}</strong> structure that enables an application to override flags that would be inferred by the resource/heap properties. The {{D3D11_RESOURCE_FLAGS}} structure contains bind flags, misc flags, and {{CPU}} access flags. </p> </dd> + + + <dd> <p> The use of the resource on input, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The use of the resource on output, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the wrapped resource interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the wrapped resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a wrapped resource. </p> </dd> + + + <dd> <p> After the method returns, points to the newly created wrapped {{D3D11}} resource or heap. </p> </dd> + + + + + <p> Releases {{D3D11}} resources that were wrapped for {{D3D}} 11on12. </p> + <p> Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until <strong>{{ID3D11On12Device::AcquireWrappedResources}}</strong> is called. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Acquires {{D3D11}} resources for use with {{D3D}} 11on12. Indicates that rendering to the wrapped resources can begin again. </p> + <p> This method marks the resources as "acquired" in hazard tracking. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing {{D3D12}} device to use for {{D3D11}} interop. </p> + <p> The function signature {{PFN_D3D11ON12_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes that are documented for <strong>{{D3D11CreateDevice}}</strong>. See Direct3D 12 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> Specifies a pre-existing {{D3D12}} device to use for {{D3D11}} interop. May not be {{NULL}}. </p> </dd> + + + <dd> <p> One or more bitwise {{OR}}'ed flags from <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>. These are the same flags as those used by <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. Specifies which runtime layers to enable. <em>Flags</em> must be compatible with device flags, and its <em>NodeMask</em> must be a subset of the <em>NodeMask</em> provided to the present {{API}}. </p> </dd> + + + <dd> <p> An array of any of the following: </p> <ul> <li>{{D3D_FEATURE_LEVEL_12_1}}</li> <li>{{D3D_FEATURE_LEVEL_12_0}}</li> <li>{{D3D_FEATURE_LEVEL_11_1}}</li> <li>{{D3D_FEATURE_LEVEL_11_0}}</li> <li>{{D3D_FEATURE_LEVEL_10_1}}</li> <li>{{D3D_FEATURE_LEVEL_10_0}}</li> <li>{{D3D_FEATURE_LEVEL_9_3}}</li> <li>{{D3D_FEATURE_LEVEL_9_2}}</li> <li>{{D3D_FEATURE_LEVEL_9_1}}</li> </ul> <p> The first feature level which is less than or equal to the {{D3D12}} device's feature level will be used to perform {{D3D11}} validation. Creation will fail if no acceptable feature levels are provided. Providing {{NULL}} will default to the {{D3D12}} device's feature level. </p> </dd> + + + <dd> <p> The size of the feature levels array, in bytes. </p> </dd> + + + <dd> <p> An array of unique queues for {{D3D11On12}} to use. Valid queue types: 3D command queue. </p> </dd> + + + <dd> <p> The size of the command queue array, in bytes. </p> </dd> + + + <dd> <p> Which node of the {{D3D12}} device to use. Only 1 bit may be set. </p> </dd> + + + <dd> <p> Pointer to the returned <strong>{{ID3D11Device}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned <strong>{{ID3D11DeviceContext}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned feature level. May be {{NULL}}. </p> </dd> + + + + + <p>Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition.</p> + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once. </p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle (<strong>{{HWND}}</strong>).</p> + <p>A Microsoft DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns <strong>{{DCOMPOSITION_ERROR_ACCESS_DENIED}}</strong>. </p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context (<strong>{{HDC}}</strong>) returned by the <strong>GetDC</strong> function, or by calls to Microsoft DirectX <strong>Present</strong> methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The <em>topmost</em> parameter determines whether child windows clip the visual tree. </p><p> Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window's visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDComposition::VirtualSurfaceTrim}}</strong> method. </p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>This method enables an application to use a shared composition surface in a composition tree. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the <em>surface</em> reference in calls to the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. +</p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the <strong>{{DWMWA_CLOAK}}</strong> flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. For more information, see How to animate the bitmap of a layered child window and DirectComposition layered child window sample.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying <strong>{{WS_EX_LAYERED}}</strong> when creating the window with the <strong>CreateWindowEx</strong> function or by setting <strong>{{WS_EX_LAYERED}}</strong> via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of ?{{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Determines whether the DirectComposition device object is still valid.</p> + <p> If the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) device is lost, the DirectComposition device associated with the {{DXGI}} device is also lost. When it detects a lost device, DirectComposition sends the <strong>{{WM_PAINT}}</strong> message to all windows that are composing DirectComposition content using the lost device. An application should call <strong>CheckDeviceState</strong> in response to each <strong>{{WM_PAINT}}</strong> message to ensure that the DirectComposition device object is still valid. The application must take steps to recover content if the device object becomes invalid. Steps include creating new {{DXGI}} and DirectComposition devices, and recreating all content. (It?s not possible to create just a new {{DXGI}} device and associate it with the existing DirectComposition device.) The system ensures that the device object remains valid between <strong>{{WM_PAINT}}</strong> messages. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>{{TRUE}} if the DirectComposition device object is still valid; otherwise {{FALSE}}.</p> </dd> + + + + + <p>Represents a binding between a Microsoft DirectComposition visual tree and a destination on top of which the visual tree should be composed. </p> + + + + <p>Sets a visual object as the new root object of a visual tree.</p> + <p>A visual can be either the root of a single visual tree, or a child of another visual, but it cannot be both at the same time. This method fails if the <em>visual</em> parameter is already the root of another visual tree, or is a child of another visual.</p><p>If <em>visual</em> is {{NULL}}, the visual tree is empty. If there was a previous non-{{NULL}} root visual, that visual becomes available for use as the root of another visual tree, or as a child of another visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The visual object that is the new root of this visual tree. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a Microsoft DirectComposition visual. </p> + + + + <p>Changes the value of the OffsetX property of this visual. The OffsetX property specifies the new offset of the visual along the x-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetX property of a visual transforms the coordinate system of the entire visual subtree that is rooted at that visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetX property. In other words, the effect of setting the Transform property and the OffsetX property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetX value as <em>offsetX</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetX}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetX property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the x-axis, in pixels.</p> </dd> + + + + + <p>Changes the value of the OffsetY property of this visual. The OffsetY property specifies the new offset of the visual along the y-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetY property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetY property. In other words, the effect of setting the Transform property and the OffsetY property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetY value as <em>offsetY</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetY}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetY property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the y-axis, in pixels.</p> </dd> + + + + + Sets the Transform property of this visual. The Transform property specifies a 2D transform used to modify the coordinate system of this visual. The property can specify either a 3-by-2 transform matrix or a transform object. + + + + <p>Sets the TransformParent property of this visual. The TransformParent property establishes the coordinate system relative to which this visual is composed.</p> + <p>The coordinate system of a visual is modified by the OffsetX, OffsetY, and Transform properties. Normally, these properties define the coordinate system of a visual relative to its immediate parent. This method specifies the visual relative to which the coordinate system for this visual is based. The specified visual must be an ancestor of the current visual. If it is not an ancestor, the coordinate system is based on this visual's immediate parent, just as if the TransformParent property were set to {{NULL}}. Because visuals can be reparented, this property can take effect again if the specified visual becomes an ancestor of the target visual through a reparenting operation. </p><p>If the <em>visual</em> parameter is {{NULL}}, the coordinate system is always transformed relative to the visual's immediate parent. This is the default behavior if this method is not used. </p><p>This method fails if the <em>visual</em> parameter is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual that establishes the base coordinate system for this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the Effect property of this visual. The Effect property modifies how the subtree that is rooted at this visual is blended with the background, and can apply a 3D perspective transform to the visual. </p> + <p>This method creates an implicit off-screen surface to which the subtree that is rooted at this visual is composed. The surface is used as one of the inputs to the specified effect. The output of the effect is composed directly to the composition target. Some effects also use the composition target as another implicit input. This is typically the case for compositional or blend effects such as opacity, where the composition target is considered to be the "background." In that case, any visuals that are "behind" the current visual are included in the composition target when the current visual is rendered and are considered to be the "background" that this visual composes to. </p><p>If this visual is not the root of a visual tree and one of its ancestors also has an effect applied to it, the off-screen surface created by the closest ancestor is the composition target to which this visual's effect is composed. Otherwise, the composition target is the root composition target. As a consequence, the background for compositional and blend effects includes only the visuals up to the closest ancestor that itself has an effect. Conversely, any effects applied to visuals under the current visual use the newly created off-screen surface as the background, which may affect how those visuals ultimately compose on top of what the end user perceives as being "behind" those visuals. </p><p>If the <em>effect</em> parameter is {{NULL}}, no bitmap effect is applied to this visual. Any previous effects that were associated with this visual are removed. The off-screen surface is also removed and the visual subtree is composed directly to the parent composition target, which may also affect how compositional or blend effects under this visual are rendered. </p><p>This method fails if <em>effect</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to an effect object. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the BitmapInterpolationMode property, which specifies the mode for Microsoft DirectComposition to use when interpolating pixels from bitmaps that are not axis-aligned or drawn exactly at scale. </p> + <p>The interpolation mode affects how a bitmap is composed when it is transformed such that there is no one-to-one correspondence between pixels in the bitmap and pixels on the screen. </p><p>By default, a visual inherits the interpolation mode of the parent visual, which may inherit the interpolation mode of its parent visual, and so on. A visual uses the default interpolation mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If no visuals set the interpolation mode, the default for the entire visual tree is nearest neighbor interpolation, which offers the lowest visual quality but the highest performance. </p><p>If the <em>interpolationMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, this visual's bitmap is composed with the specified interpolation mode, and this mode becomes the new default mode for the children of this visual. That is, if the interpolation mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, the bitmaps of the child visuals are composed using the interpolation mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + + + <p>Sets the BorderMode property, which specifies how to compose the edges of bitmaps and clips associated with this visual, or with visuals in the subtree rooted at this visual.</p> + <p>The border mode affects how the edges of a bitmap are composed when the bitmap is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. It also affects how content is clipped at the corners of a clip that has rounded corners, and at the edge of a clip that is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. </p><p>By default, a visual inherits the border mode of its parent visual, which may inherit the border mode of its parent visual, and so on. A visual uses the default border mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>. If no visuals set the border mode, the default for the entire visual tree is aliased rendering, which offers the lowest visual quality but the highest performance. </p><p>If the <em>borderMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, this visual's bitmap and clip are composed with the specified border mode. In addition, this border mode becomes the new default for the children of the current visual. That is, if the border mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, the bitmaps and clips of the child visuals are composed using the border mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The border mode to use.</p> </dd> + + + + + Sets the Clip property of this visual to the specified rectangular region or clip object. The Clip property restricts the rendering of the visual subtree that is rooted at this visual to a rectangular region. + + + + <p>Sets the Content property of this visual to the specified bitmap or window wrapper.</p> + <p> The <em>content</em> parameter must point to one of the following:</p><ul> <li>An object that implements the <strong>{{IDCompositionSurface}}</strong> interface.</li> <li>An object that implements the <strong>{{IDXGISwapChain1}}</strong> interface.</li> <li>A wrapper object that is returned by the <strong>CreateSurfaceFromHandle</strong> or <strong>CreateSurfaceFromHwnd</strong> method. +</li> </ul><p>The new content replaces any content that was previously associated with the visual. If the <em>content</em> parameter is {{NULL}}, the visual has no associated content.</p><p>A visual can be associated with a bitmap object or a window wrapper. A bitmap is either a Microsoft DirectX swap chain or a Microsoft DirectComposition surface.</p><p>A window wrapper is created with the <strong>CreateSurfaceFromHwnd</strong> method and is a stand-in for the rasterization of another window, which must be a top-level window or a layered child window. A window wrapper is conceptually equivalent to a bitmap that is the size of the target window on which the contents of the window are drawn. The contents include the target window's child windows (layered or otherwise), and any DirectComposition content that is drawn in the child windows. </p><p>A DirectComposition surface wrapper is created with the <strong>CreateSurfaceFromHandle</strong> method and is a reference to a swap chain. An application might use a surface wrapper in a cross-process scenario where one process creates the swap chain and another process associates the bitmap with a visual.</p><p>The bitmap is always drawn at position (0,0) relative to the visual's coordinate system, although the coordinate system is directly affected by the OffsetX, OffsetY, and Transform properties, as well as indirectly by the transformations on ancestor visuals. The bitmap of a visual is always drawn behind the children of that visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The object that is the new content of this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Adds a new child visual to the children list of this visual.</p> + <p>Child visuals are arranged in an ordered list. The contents of a child visual are drawn in front of (or above) the contents of its parent visual, but behind (or below) the contents of its children.</p><p>The <em>referenceVisual</em> parameter must be an existing child of the parent visual, or it must be {{NULL}}. The <em>insertAbove</em> parameter indicates whether the new child should be rendered immediately above the reference visual in the Z order, or immediately below it.</p><p>If the <em>referenceVisual</em> parameter is {{NULL}}, the specified visual is rendered above or below all children of the parent visual, depending on the value of the <em>insertAbove</em> parameter. If <em>insertAbove</em> is {{TRUE}}, the new child visual is above no sibling, therefore it is rendered below all of its siblings. Conversely, if <em>insertAbove</em> is {{FALSE}}, the visual is below no sibling, therefore it is rendered above all of its siblings.</p><p>The visual specified by the <em>visual</em> parameter cannot be either a child of a single other visual, or the root of a visual tree that is associated with a composition target. If <em>visual</em> is already a child of another visual, <strong>AddVisual</strong> fails. The child visual must be removed from the children list of its previous parent before adding it to the children list of the new parent. If <em>visual</em> is the root of a visual tree, the visual must be dissociated from that visual tree before adding it to the children list of the new parent. To dissociate the visual from a visual tree, call the <strong>{{IDCompositionTarget::SetRoot}}</strong> method and specify either a different visual or {{NULL}} as the <em>visual</em> parameter.</p><p>A child visual need not have been created by the same <strong>{{IDCompositionDevice}}</strong> interface as its parent. When visuals from different devices are combined in the same visual tree, Microsoft DirectComposition composes the tree as it normally would, except that changes to a particular visual take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called on the device object that created the visual. The ability to combine visuals from different devices enables multiple threads to create and manipulate a single visual tree while maintaining independent devices that can be used to commit changes asynchronously</p><p>This method fails if <em>visual</em> or <em>referenceVisual</em> is an invalid reference, or if the visual referenced by the <em>referenceVisual</em> parameter is not a child of the parent visual. These interfaces cannot be custom implementations; only interfaces created by DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to add. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} to place the new child visual in front of the visual specified by the <em>referenceVisual</em> parameter, or {{FALSE}} to place it behind <em>referenceVisual</em>.</p> </dd> + + + <dd> <p>The existing child visual next to which the new visual should be added.</p> </dd> + + + + + <p>Removes a child visual from the children list of this visual.</p> + <p>The child visual is removed from the list of children. The order of the remaining child visuals is not changed.</p><p>This method fails if <em>visual</em> is not a child of the parent visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to remove from the children list. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Removes all visuals from the children list of this visual.</p> + <p>This method can be called even if this visual has no children. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the blending mode for this visual.</p> + <p>The composite mode determines how visual's bitmap is blended with the screen. By default, the visual is blended with "source over" semantics; that is, the colors are blended with per-pixel transparency.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The blending mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Represents a 2D transformation that can be used to modify the coordinate space of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform}}</strong> interface is an abstract interface that represents a 2D affine transformation. Transformations affect the entire visual subtree that is rooted at the visual that the transform is associated with. A transform object can be associated with multiple visuals. When a transform object is modified, all affected visuals are recomposed to reflect the change.</p><p>Transforms operate by modifying the coordinate system for all rendering operations on a visual. For example, ordinarily a bitmap that is associated with a visual draws at position (0,0) and extends the full width and height of the bitmap. If a translation transform is applied, the bitmap draws at a position that is offset by that transform. If a scale transform is applied, the extent covered by the bitmap is affected by the scale transform. More than one transform can be simultaneously applied to a visual by using the <strong>{{IDCompositionDevice::CreateTransformGroup}}</strong> interface.</p> + + + + <p>Represents a 3D transformation effect that can be used to modify the rasterization of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform3D}}</strong> interface is an abstract interface that represents a 3D perspective transformation effect. A 3D transform object can be associated with multiple visuals and multiple effect groups. When a 3D transform object is modified, all affected visuals are recomposed to reflect the change.</p> + + + + <p>Represents a 2D transformation that affects only the offset of a visual along the x-axis and y-axis.</p> + <p>A translation transform represents the following 3-by-2 matrix:</p><p></p><p>The effect is simply to offset the coordinate system by <em>x</em> and <em>y</em>.</p> + + + + <p>Changes the value of the OffsetX property of a 2D translation transform. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method perfoms an affine transformation, which moves every point by a fixed distance in the same direction. It is similar to shifting the origin of the coordinate space. </p><p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the OffsetX property was previously animated, this method removes the animation and sets the OffsetX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The distance to translate along the x-axis, in pixels.</p> </dd> + + + + + Changes or animates the value of the OffsetY property of a 2D translation transform. The OffsetY property specifies the translation along the y-axis. + + + + <p>Represents a 3D transformation that affects the offset of a visual along the x-axis, y-axis, and z-axis. </p> + <p>A 3D translation transform represents the following 4-by-4 matrix: </p><p></p><p> The effect is to offset the blending position of the visual's subtree by <em>x</em>, <em>y</em>, and <em>z</em>.</p> + + + + <p>Animates the value of the OffsetX property of a 3D translation transform effect. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetX property unless this method is called again. If the OffsetX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetY property of a 3D translation transform effect. The OffsetY property specifies the distance to translate along the y-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetY property unless this method is called again. If the OffsetY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetZ property of a 3D translation transform effect. The OffsetZ property specifies the distance to translate along the z-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetZ property unless this method is called again. If the OffsetZ property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetZ property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Animates the value of the ScaleX property of a 2D scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 2D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the ScaleZ property of a scale transform. The ScaleZ property specifies the scale factor along the z-axis. + + + + <p>Animates the value of the ScaleX property of a scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 3D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the ScaleZ property of a 3D scale transform. The ScaleZ property specifies the scale factor along the z-axis.</p> + <p>This method fails if the <em>scaleZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleZ property was previously animated, this method removes the animation and sets the ScaleZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the CenterX property of a 3D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterX property was previously animated, this method removes the animation and sets the CenterX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new x-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 3D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Changes the value of the CenterZ property of a 3D scale transform. The CenterZ property specifies the z-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Represents a 2D transformation that affects the rotation of a visual around the z-axis. The coordinate system is rotated around the specified center point. </p> + <p>A rotate transform represents the following 3-by-3 matrix:</p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise, and to apply the corresponding translation such that the center point does not move.</p> + + + + <p>Animates the value of the Angle property of a 2D rotation transform. The Angle property specifies the rotation angle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterY property of a 2D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a 3D transformation that affects the rotation of a visual along an arbitrary axis in 3D space. The coordinate system is rotated around the specified center point. </p> + <p>A 3D rotate transform represents the following 4-by-4 matrix:</p><p></p><p>where the <em>offsetX</em>, <em>offsetY</em>, and <em>offsetZ</em> values of the matrix are the following: </p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise around the specified axis, and to apply the corresponding translation such that the center point does not move.</p><p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p><p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p> + + + + <p>Animates the value of the Angle property of a 3D rotation transform. The Angle property specifies the rotation angle. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected 3D transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the AxisX property of a 3D rotation transform. The AxisX property specifies the x-coordinate for the axis vector of rotation. The default value is zero. + + + + <p>Changes the value of the AxisY property of a 3D rotation transform. The AxisY property specifies the y-coordinate for the axis vector of rotation. The default value is zero.</p> + <p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p><p>This method fails if the <em>axisY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AxisY property was previously animated, this method removes the animation and sets the AxisY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate for the axis vector of rotation. </p> </dd> + + + + + Changes or animates the value of the AxisZ property of a 3D rotation transform. The AxisZ property specifies the z-coordinate for the axis vector of rotation. The default value is 1.0. + + + + Changes or animates the value of the CenterX property of a 3D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed. The default value is zero. + + + + <p>Animates the value of the CenterY property of a 3D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterZ property of a 3D rotation transform. The CenterZ property specifies the z-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Animates the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the AngleX property unless this method is called again. If the AngleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that represents how the value of the AngleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method fails if the <em>angleX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleX property was previously animated, this method removes the animation and sets the AngleX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the x-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Changes the value of the AngleY property of a 2D skew transform. The AngleY property specifies the skew angle along the y-axis.</p> + <p>This method fails if the <em>angleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleY property was previously animated, this method removes the animation and sets the AngleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the y-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D skew transform. The CenterX property specifies the x-coordinate of the point about which the skew is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D skew transform. The CenterY property specifies the y-coordinate of the point about which the skew is performed.</p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + <p>Represents an arbitrary affine 2D transformation defined by a 3-by-2 matrix.</p><p></p> + + + + <p>Changes all values of the matrix of this 2D transform.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 2D transform.</p> </dd> + + + + + <p>Animates the value of one element of the matrix of this 2D transform.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the element unless this method is called again. If the element was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 2, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 1, inclusive.</p> </dd> + + + <dd> <p>An animation that represents how the value of the specified element changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents an arbitrary 3D transformation defined by a 4-by-4 matrix.</p><p></p> + <p>A 3D matrix transform represents the following 4-by-4 matrix:</p><p></p><p> The application can set any of the values in the first three columns. Note that the fourth column is padded to allow for matrix concatenation. </p> + + + + <p>Changes all values of the matrix of this 3D transformation effect.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 3D transformation effect.</p> </dd> + + + + + <p>Changes the value of one element of the matrix of this 3D transform.</p> + <p>This method fails if the <em>value</em> parameter is NaN, positive infinity, or negative infinity.</p><p>If the specified element was previously animated, this method removes the animation and sets the element to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The new value of the specified element.</p> </dd> + + + + + <p>Represents a bitmap effect that modifies the rasterization of a visual's subtree. </p> + <p><strong>{{IDCompositionEffect}}</strong> is an abstract interface that represents a bitmap effect. An effect applies to the entire visual subtree rooted at the visual that the effect is associated with. An effect object can be associated with multiple visuals. When an effect object is modified, all affected visuals are recomposed to reflect the change. </p><p>More than one effect can be simultaneously applied to a visual by using the <strong>{{IDCompositionEffectGroup}}</strong> interface.</p> + + + + <p>Represents a group of bitmap effects that are applied together to modify the rasterization of a visual's subtree. </p> + + + + <p>Changes the value of the Opacity property.</p> + <p>The opacity is interpreted as completely transparent for all values less than or equal to 0, and as completely opaque for all values greater than or equal to 1. All values between 0 and 1 represent partial opacity. </p><p>This method fails if the <em>opacity</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the Opacity property was previously animated, this method removes the animation and sets the Opacity property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new value of the Opacity property.</p> </dd> + + + + + <p>Sets the 3D transformation effect object that modifies the rasterization of the visuals that this effect group is applied to.</p> + <p>This method fails if <em>transform3D</em> is an invalid reference, or if the reference was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this effect group. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p><p>If the <em>transform3D</em> parameter is {{NULL}}, the effect group does not apply any perspective transformations to the visuals. Setting the transform to {{NULL}} is equivalent to setting the transform to an <strong>{{IDCompositionMatrixTransform3D}}</strong> object where the specified matrix is the identity matrix. However, an application should use a {{NULL}} transform whenever possible because it is slightly faster. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>Pointer to an <strong>{{IDCompositionTransform3D}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a clip object that is used to restrict the rendering of a visual subtree to a rectangular area. </p> + + + + <p>Represents a clip object that restricts the rendering of a visual subtree to the specified rectangular region. Optionally, the clip object may have rounded corners specified.</p> + + + + <p>Animates the value of the Left property of a clip rectangle. The Left property specifies the x-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Left property unless this method is called again. If the Left property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Left property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Top property of a clip rectangle. The Top property specifies the y-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Top property unless this method is called again. If the Top property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Top property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Right property of a clip rectangle. The Right property specifies the x-coordinate of the lower-right corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Right property unless this method is called again. If the Right property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Right property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the Bottom property of a clip object. The Bottom property specifies the y-coordinate of the lower-right corner of the clip rectangle. </p> + <p> This method fails if the <em>bottom</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the Bottom property was previously animated, this method removes the animation and sets the Bottom property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the Bottom property, in pixels. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusX property of this clip. The TopLeftRadiusX property specifies the x radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the x radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusY property of this clip. The TopLeftRadiusY property specifies the y radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the TopRightRadiusX property of this clip. The TopRightRadiusX property specifies the x radius of the ellipse that rounds the top-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the TopRightRadiusY property of this clip. The TopRightRadiusY property specifies the y radius of the ellipse that rounds the top-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + Changes or animates the value of the BottomLeftRadiusX property of this clip. The BottomLeftRadiusX property specifies the x radius of the ellipse that rounds the lower-left corner of the clip. + + + + <p>Changes the value of the BottomLeftRadiusY property of this clip. The BottomLeftRadiusY property specifies the y radius of the ellipse that rounds the lower-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the BottomRightRadiusX property of this clip. The BottomRightRadiusX property specifies the x radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the BottomRightRadiusY property of this clip. The BottomRightRadiusY property specifies the y radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Marks the end of drawing on this Microsoft DirectComposition surface object.</p> + <p>This method completes an update that was begun by a previous call to the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. After this method returns, the application can start another update on the same surface object or on a different one. </p><p>If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> before calling <strong>{{IDCompositionSurface::EndDraw}}</strong> for a surface with a pending update, that update is not processed by that Commit call. The update only takes effect on screen after the application calls <strong>{{IDCompositionSurface::EndDraw}}</strong> followed by the {{IDCompositionDevice2::Commit}} method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Suspends the drawing on this Microsoft DirectComposition surface object.</p> + <p>Because only one surface can be open for drawing at a time, calling <strong>SuspendDraw</strong> allows the user to call <strong>{{IDCompositionSurface::BeginDraw}}</strong> on a different surface. Drawing to this surface can be resumed by calling <strong>{{IDCompositionSurface::ResumeDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Resumes drawing on this Microsoft DirectComposition surface object.</p> + <p> This method allows the surface update to continue unless there are other surfaces that have active, unsuspended draws.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Scrolls a rectangular area of a Microsoft DirectComposition logical surface.</p> + <p>This method allows an application to blt/copy a sub-rectangle of a DirectComposition surface object. This avoids re-rendering content that is already available. </p><p>The <em>scrollRect</em> rectangle must be contained in the boundaries of the surface. If the <em>scrollRect</em> rectangle goes outside the bounds of the surface, this method fails. </p><p>The bits copied by the scroll operation (source) are defined by the intersection of the <em>scrollRect</em> and <em>clipRect</em> rectangles. </p><p>The bits shown on the screen (destination) are defined by the intersection of the offset source rectangle and <em>clipRect</em>. </p><p>Scroll operations can only be called before calling <strong>BeginDraw</strong> or after calling <strong>EndDraw</strong>. Suspended or resumed surfaces are not candidates for scrolling because they are still being updated. </p><p>The application is responsible for ensuring that the scrollable area for an <strong>{{IDCompositionVirtualSurface}}</strong> is limited to valid pixels. The behavior for invalid pixels in the <em>scrollRect</em> is undefined. </p><p>Virtual surface sub-rectangular areas that were discarded by a trim or a resize operation can't be scrolled even if the trim or resize is applied in the same batch. <strong>Trim</strong> and <strong>Resize</strong> are applied immediately. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The rectangular area of the surface to be scrolled, relative to the upper-left corner of the surface. If this parameter is {{NULL}}, the entire surface is scrolled.</p> </dd> + + + <dd> <p>The <em>clipRect</em> clips the destination (<em>scrollRect</em> after offset) of the scroll. +The only bitmap content that will be scrolled are those that remain inside the clip rectangle after the scroll is completed.</p> </dd> + + + <dd> <p>The amount of horizontal scrolling, in pixels. Use positive values to scroll right, and negative values to scroll left.</p> </dd> + + + <dd> <p>The amount of vertical scrolling, in pixels. Use positive values to scroll down, and negative values to scroll up.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Discards pixels that fall outside of the specified trim rectangles.</p> + <p>A virtual surface might not have enough storage for every pixel in the surface. An application instructs the composition engine to allocate memory for the surface by calling the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method, and to release memory for the surface by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method. The array of rectangles represents the regions of the virtual surface that should remain allocated after this method returns. Any pixels that are outside the specified set of rectangles are no longer used for texturing, and their memory may be reclaimed. </p><p>If the <em>count</em> parameter is zero, no pixels are kept, and all of the memory allocated for the virtual surface may be reclaimed. The <em>rectangles</em> parameter can be {{NULL}} only if the <em>count</em> parameter is zero. This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of rectangles to keep.</p> </dd> + + + <dd> <p>The number of rectangles in the <em>rectangles</em> array.</p> </dd> + + + + + <p>Represents a filter effect.</p><p>{{IDCompositionFilterEffect}} exposes a subset of Direct2D's image effects through Direction Composition for use in {{CSS}} filters in the browser platform.</p> + + + + <p>Sets the the input at an index to the specified filter effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the index the to apply the filter effect at.</p> </dd> + + + <dd> <p>The filter effect to apply. The following effects are available: </p> <ul> <li> <strong>{{IDCompositionAffineTransform2DEffect}}</strong> </li> <li> <strong>{{IDCompositionArithmeticCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionBlendEffect}}</strong> </li> <li> <strong>{{IDCompositionBrightnessEffect}}</strong> </li> <li> <strong>{{IDCompositionColorNatrixEffect}}</strong> </li> <li> <strong>{{IDCompositionCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionFloodEffect}}</strong> </li> <li> <strong>{{IDCompositionGaussianBlurEffect}}</strong> </li> <li> <strong>{{IDCompositionHueRotationEffect}}</strong> </li> <li> <strong>{{IDCompositionLinearTransferRffect}}</strong> </li> <li> <strong>{{IDCompositionSaturationRffect}}</strong> </li> <li> <strong>{{IDCompositionShadowEffect}}</strong> </li> <li> <strong>{{IDCompositionTableTransferEffect}}</strong> </li> <li> <strong>{{IDCompositionTurbulenceEffect}}</strong> </li> </ul> </dd> + + + <dd> <p>Flags to apply to the filter effect. </p> </dd> + + + + + <p></p> + + + + <p>Sets the amount of blur to be applied to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. A value of zero {{DIPs}} disables this effect entirely. </p> </dd> + + + + + <p>Sets the mode used to calculate the border of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode used to calculate the border of the image.</p> </dd> + + + + + <p>The brightness effect controls the brightness of the image.</p> + + + + <p>Sets the upper portion of the brightness transfer curve. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The upper portion of the brightness transfer curve. The white point adjusts the appearance of the brighter portions of the image. +This vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Specifies the lower portion of the brightness transfer curve for the brightness effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The lower portion of the brightness transfer curve. The black point adjusts the appearance of the darker portions of the image. The vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Sets the x value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the white point. This value must be between 0 and 1.</p> </dd> + + + + + <p>Sets the y value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the white point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the x value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the black point.</p> </dd> + + + + + <p>Sets the y value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the black point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p>Sets the matrix used by the effect to multiply the {{RGBA}} values of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The matrix used by the effect to multiply the {{RGBA}} values of the image. The matrix is column major and is applied as shown in the following equation: </p></dd> + + + + + <p>Sets an element of the color matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>An animation that represents how the element value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the alpha mode of the output for the color matrix effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The alpha mode of the output for the color matrix effect.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p> The shadow effect is used to generate a shadow from the alpha channel of an image. The shadow is more opaque for higher alpha values and more transparent for lower alpha values. You can set the amount of blur and the color of the shadow. </p> + + + + <p>Sets the amount of blur to be applied to the alpha channel of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the alpha channel of the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. </p> </dd> + + + + + <p>Sets color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The color of the shadow.</p> </dd> + + + + + <p>Sets the red value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the red value for the color of the shadow changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the green value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The green value for the color of the shadow.</p> </dd> + + + + + <p>Sets the blue value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blue value for the color of the shadow.</p> </dd> + + + + + <p>Sets the alpha value for the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the alpha value for the effect changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The hue rotate effect alters the hue of an image by applying a color matrix based on the rotation angle. </p> + + + + <p>Sets the angle to rotate the hue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the angle value changes over time. The effect calculates a color matrix based on the rotation angle (?) according to the following matrix equations: </p><p> This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> This effect is used to alter the saturation of an image. The saturation effect is a specialization of the?color matrix?effect. </p> + + + + <p>Sets the saturation of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the saturation of the image changes over time. This parameter must not be {{NULL}}. You can set the saturation to a value between 0 and 1. If you set it to 1 the output image is fully saturated. If you set it to 0 the output image is monochrome. The saturation value is unitless. The effect calculates a color matrix based on the saturation value (s in the equation here) using the following equation: </p></dd> + + + + + <p> The turbulence effect is used to generate a bitmap based on the Perlin noise function. The turbulence effect has no input image. </p> + + + + <p>Sets the coordinates where the turbulence output is generated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The coordinates where the turbulence output is generated. The algorithm used to generate the Perlin noise is position dependent, so a different offset results in a different output. This value is not bounded and the units are specified in {{DIPs}} </p> <strong>Note</strong>??Note The offset does not have the same effect as a translation because the noise function output is infinite and the function will wrap around the tile. ? </dd> + + + + + <p>Sets the base frequencies in the X and Y direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The base frequencies in the X and Y direction. This must be greater than 0. The units are specified in 1/{{DIPs}}. A value of 1 (1/{{DIPs}}) for the base frequency results in the Perlin noise completing an entire cycle between two pixels. The ease interpolation for these pixels results in completely random pixels, since there is no correlation between the pixels. A value of 0.1(1/{{DIPs}}) for the base frequency results in the Perlin noise function repeating every 10 {{DIPs}}. This results in correlation between pixels and the typical turbulence effect is visible. </p> </dd> + + + + + <p>Sets the size of the turbulence output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the turbulence output</p> </dd> + + + + + <p>Sets the number of octaves for the noise function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of octaves for the noise function. This value must be greater than 0.</p> </dd> + + + + + <p>Sets the seed for the pseudo random generator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The seed for the pseudo random generator. This value is unbounded.</p> </dd> + + + + + <p>Sets the turbulence noise mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The turbulence noise mode. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function.</p> </dd> + + + + + <p>Specifies whether stitching is on or off.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether stitching is on or off. The base frequency is adjusted so that the output bitmap can be stitched. This is useful if you want to tile multiple copies of the turbulence effect output. If this value is {{TRUE}}, the output bitmap can be tiled (using the tile effect) without the appearance of seams and the base frequency is adjusted so that output bitmap can be stitched. If this value is {{FALSE}}, the base frequency is not adjusted, so seams may appear between tiles if the bitmap is tiled. </p> </dd> + + + + + <p> The linear transfer effect is used to map the color intensities of an image using a linear function created from a list of values you provide for each channel. </p> + + + + <p>Sets the Y-intercept of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Y-intercept of the linear function for the red channel.</p> </dd> + + + + + <p>Sets the slope of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the red channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} the effect applies the RedLinearTransfer function to the red channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the green channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The slope of the linear function for the green channel.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenLinearTransfer function to the green channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the blue channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueLinearTransfer function to the blue channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the the Y-intercept of the linear function for the alpha channel. changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the alpha channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaLinearTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. </p> </dd> + + + + + <p>The table transfer effect is used to map the color intensities of an image using a transfer function created from interpolating a list of values you provide.</p> + + + + <p>Sets the list of values used to define the transfer function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the red channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the green channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the blue channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the alpha channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} it applies the RedTableTransfer function to the red channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenTableTransfer function to the green channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueTableTransfer function to the Blue channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaTableTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. The effect clamps the values before it premultiplies the alpha. </p> </dd> + + + + + <p>Sets a value in the red table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the green table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The value to set.</p> </dd> + + + + + <p>Sets a value in the blue table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the alpha table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The new value.</p> </dd> + + + + + <p> The composite effect is used to combine 2 or more images. This effect has 13 different composite modes. The composite effect accepts 2 or more inputs. When you specify 2 images, destination is the first input (index 0) and the source is the second input (index 1). If you specify more than 2 inputs, the images are composited starting with the first input and the second and so on. </p> + + + + <p>Sets the mode for the composite effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode for the composite effect.</p> </dd> + + + + + <p> The Blend Effect is used to combine 2 images. </p> + + + + <p>Sets the blend mode to use when the blend effect combines the two images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blend mode to use when the blend effect combines the two images.</p> </dd> + + + + + <p>The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images.</p> + + + + <p>Sets the coefficients for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The coefficients for the equation used to composite the two input images.</p> </dd> + + + + + <p>Specifies whether to clamp color values before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether to clamp the color values. A value of {{TRUE}} causes color values to be clamped between 0 and 1.</p> </dd> + + + + + <p>Sets the first coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the second coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the second coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the third coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the third coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the fourth coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the fourth coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images. </p> + + + + <p>Sets the interpolation mode of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the interpolation mode of the effect.</p> </dd> + + + + + <p>Sets the border mode to use with the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the border mode to use with the effect.</p> </dd> + + + + + <p>Sets the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the transform matrix for the effect to use.</p> </dd> + + + + + <p>Sets an element of the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>The new value of the element.</p> </dd> + + + + + <p>Sets the sharpness of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the sharpness value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice2::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once.</p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice2::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a fence. This interface extends <strong>{{ID3D12Fence}}</strong>, and supports the retrieval of the flags used to create the original fence. This new feature is useful primarily for opening shared fences.</p><strong>Note</strong> <strong>{{ID3D12Fence1}}</strong> was introduced in the Windows 10 Fall Creators Update, and is the latest version of the <strong>{{ID3D12Fence}}</strong> interface. Applications targeting Windows 10 Fall Creators Update and later should use <strong>{{ID3D12Fence1}}</strong> instead of earlier versions. + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created. </p> </dd> + + + <dd> <p>The height of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method.</p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, CenterZ, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p><p>To set the opacity and transform values, use the corresponding methods on the <strong>{{IDCompositionEffectGroup}}</strong> that was created.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of {{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables display of performance debugging counters.</p> + <p>Microsoft DirectComposition keeps a count of how many DirectComposition devices have performance counters enabled, for the entire desktop session. If the count is non-zero, the performance counters are displayed. Therefore, disabling the counters may not make them go away if another device is also requesting display of the counters.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function. +</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the surface reference in calls to the {{IDCompositionVisual::SetContent}} method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. </p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of those visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the {{DWMWA_CLOAK}} flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying {{WS_EX_LAYERED}} when creating the window with the <strong>CreateWindowEx</strong> function or by setting {{WS_EX_LAYERED}} via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the opacity mode for this visual.</p> + <p>The opacity mode affects how the Opacity property of an effect group object affects the composition of a visual sub-tree. DirectComposition supports two opacity modes: Layer and Multiply. In Layer mode, each visual sub-tree can be logically viewed as a bitmap that contains the opaque rasterization of that entire sub-tree, to which the opacity value is then applied. In this manner, overlapping opaque surfaces blend with the sub-tree?s background, but not with each other. In contrast, in Multiply mode the opacity is applied individually to each surface as it is composed, so surfaces blend with each other. Multiply mode is faster than Layer mode and always preferred if the visual tree contains entirely non-overlapping contents. However, Multiply mode may produce undesired visual results for overlapping elements. </p><p>By default, a visual inherits the opacity mode of its parent visual, which may inherit the opacity mode of its parent visual, and so on. A visual uses the {{DCOMPOSITION_OPACITY_MODE_LAYER}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_OPACITY_MODE_INHERIT}}. If no visuals set the opacity mode, the default for the entire visual tree is {{DCOMPOSITION_OPACITY_MODE_LAYER}}. </p><p>If the <em>opacityMode</em> parameter is anything other than {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, this visual's surfaces are composed with the specified opacity mode. In addition, this opacity mode becomes the new default for the children of the current visual. That is, if the opacity mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, the surfaces the child visuals are composed using the opacity mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The opacity mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Specifies whether or not surfaces that have 3D transformations applied to them should be displayed when facing away from the observer.</p> + <p>The back face visibility property affects how surfaces that have 3D transformations applied are rendered. </p><p>By default, a visual inherits the back face visibility property of its parent visual, which may inherit the back face visibility property of its parent visual, and so on. A visual uses the {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}. If no visuals set the back face visibility property, the default for the entire visual tree is {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}}. </p><p>If the <em>visibility</em> parameter is anything other than {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, this visual's surfaces are composed with the specified visibility mode. In addition, this visibility mode becomes the new default for the children of the current visual. That is, if the visibility mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, the surfaces the child visuals are composed using the visibility mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The back face visibility to use when composing surfaces in this visual?s sub-tree to the screen.</p> </dd> + + + + + <p>Represents a debug visual.</p> + + + + <p>Enables a visual heatmap that represents overdraw regions.</p> + <p>Heatmaps can be enabled by calling <strong>EnableHeatMap</strong>. The heatmaps are drawn on the source of the VisualDebug visual and child visuals. The heatmaps are represented in a specified color for all visual content. The heatmap color must have an transparency in order to see the overlaying overdraw regions. The colored surfaces are blended together to visually show all overdraw regions in a single view. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd></dd> + + + + + <p>Disables visual heatmaps.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables highlighting visuals when content is being redrawn.</p> + <p>Highlighting redraw regions can be enabled by calling <strong>EnableRedrawRegions</strong>. With this function, redrawn client areas are visually highlighted every frame the visual is updated. Redraw regions are drawn on the source of the VisualDebug and child visuals. Redraw is triggered when properties of a visual are updated. The updated visusal does not neccessarly need to visually change to trigger a redraw. The highlighting will cycle through Blue, Yellow, Pink and Green to provide an order of which content is being updated. The redraw regions are only visible while the window of the VisualDebug is being updated. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables visual redraw regions.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A newly created virtual surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> or <strong>{{IDCompositionVirtualSurface::Resize}}</strong> method.</p><p>Microsoft DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created virtual surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p> Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition. </p> + + + + <p>Creates an instance of <strong>{{IDCompositionGaussianBlurEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionBrightnessEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionColorMatrixEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionShadowEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionHueRotationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionSaturationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTurbulenceEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionLinearTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTableTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionCompositeEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionBlendEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionArithmeticCompositeEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionAffineTransform2DEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Changes the value of OffsetZ property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value.</p> </dd> + + + + + <p>Sets the value of the visual's opacity property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the opacity property.</p> </dd> + + + + + <p>Sets the Transform property of this visual to the specified 3D transform object.</p> + <p>Setting the Transform property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>If the Transform property previously specified a transform matrix, the newly specified transform object replaces the transform matrix.</p><p>A transformation specified by the Transform property is applied after the OffsetX and OffsetY properties. In other words, the effect of setting the Transform property and the OffsetX and OffsetY properties is the same as setting only the Transform property on a transform group where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has those same OffsetX and OffsetY values. However, you should use the <strong>{{IDCompositionVisual::SetOffsetX}}</strong> and <strong>SetOffsetY</strong> methods whenever possible because they are slightly faster. </p><p>This method fails if <em>transform</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p><p>If the <em>transform</em> parameter is {{NULL}}, the coordinate system of this visual is transformed only by its OffsetX and OffsetY properties. Setting the Transform property to {{NULL}} is equivalent to setting it to an <strong>{{IDCompositionMatrixTransform}}</strong> object where the specified matrix is the identity matrix. However, an application should set the Transform property to {{NULL}} whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The transform object that is used to modify the coordinate system of this visual. This parameter can point to an <strong>{{IDCompositionTransform}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the visual's Visible property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the visible property.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the <strong>{{IDCompositionDevice::Commit}}</strong> method.</p><p>The {{DXGI}} device specified by <em>dxgiDevice</em> is used to create all DirectComposition surface objects. In particular, the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method returns an interface reference to a {{DXGI}} surface that belongs to the device specified by the <em>dxgiDevice</em> parameter. </p><p>When creating the {{DXGI}} device, developers must specify the <strong>{{D3D11_CREATE_DEVICE}} {{BGRA_SUPPORT}}</strong> or <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag for Direct2D interoperability with Microsoft Direct3D resources.</p><p>The <em>iid</em> parameter must be <code>__uuidof({{IDCompositionDevice}})</code>, and the <em>dcompositionDevice</em> parameter receives a reference to an <strong>{{IDCompositionDevice}}</strong> interface. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The {{DXGI}} device to use to create DirectComposition surface objects.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. </p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the {{IDCompositionDevice2::Commit}} method. </p><p>The <em>renderingDevice</em> parameter may point to a {{DXGI}}, Direct3D, Direct2D device object, or it may be {{NULL}}. This parameter affects the behavior of the {{IDCompositionDevice2::CreateSurface}}, {{IDCompositionDevice2::CreateVirtualSurface}} and {{IDCompositionSurface::BeginDraw}} methods. </p><p>If the <em>renderingDevice</em> parameter is {{NULL}} then the returned DirectComposition device cannot directly create DirectComposition surface objects. In particular, {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods return {{E_INVALIDARG}}, regardless of the supplied parameters. However, such a DirectComposition device object can still be used to indirectly create surfaces if the application creates a surface factory object via the {{IDCompositionDevice2::CreateSurfaceFactory}} method. </p><p>If the <em>renderingDevice</em> parameter points to a {{DXGI}} device, that device is used to allocate all video memory needed by the {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods. Moreover, the {{IDCompositionSurface::BeginDraw}} method returns an interface reference to a {{DXGI}} surface that belongs to that same {{DXGI}} device. </p><p>If the <em>renderingDevice</em> parameter points to a Direct2D device object, DirectComposition extracts from it the underlying {{DXGI}} device object and uses it as if that {{DXGI}} device object had been passed in as the <em>renderingDevice</em> parameter. However, passing in a Direct2D object further causes {{IDCompositionSurface::BeginDraw}} to accept __uuidof({{ID2D1DeviceContext}}) for its <em>iid</em> parameter for any objects created with the {{IDCompositionDevice2::CreateSurface}} or {{IDCompositionDevice2::CreateVirtualSurface}} methods. In that case, the Direct2D device context object returned by {{IDCompositionSurface::BeginDraw}} will belong to the same Direct2D device passed as the <em>renderingDevice</em> parameter. </p><p>If the <em>iid</em> parameter is __uuidof({{IDCompositionDevice}}), then the dcompositionDevice parameter receives a reference to a Version 1 {{IDCompositionDevice}} interface, but the underlying object is a Version 2 desktop device object. The application can later obtain a reference to either the {{IDCompositionDevice2}} or {{IDCompositionDesktopDevice}} interfaces by calling the <strong>QueryInterface</strong> method on that device. Similarly, all DirectComposition objects created from such a device are Version 2 objects under the covers. For example, the {{IDCompositionDevice::CreateVisual}} method will return an {{IDCompositionVisual}} interface to the created visual, but the application can obtain a reference to the {{IDCompositionVisual2}} interface via the QueryInterface method. This behavior allows an application written to the DirectComposition {{V1}} {{API}} to incrementally adopt DirectComposition {{V2}} features by changing the device creation method from {{DCompositionCreateDevice}} to {{DCompositionCreateDevice2}}, while still requesting the {{IDCompositionDevice2}} interface. This allows the rest of the code to remain unchanged, while allowing the application to use QueryInterface in just the places where new functionality is needed. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new DirectComposition device object, which can be used to create other DirectComposition objects.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that can be bound to a +Microsoft DirectX swap chain or swap buffer and associated +with a visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The requested access to the composition surface object. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>0x0000L</dt> </dl> </td><td> <p>No access.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_READ}}</strong></dt> <dt>0x0001L</dt> </dl> </td><td> <p>Read access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_WRITE}}</strong></dt> <dt>0x0002L</dt> </dl> </td><td> <p>Write access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_ALL_ACCESS}}</strong></dt> <dt>0x0003L</dt> </dl> </td><td> <p>Read/write access. Always specify this flag except when duplicating a surface in another process, in which case set <em>desiredAccess</em> to 0.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains the security descriptor for the composition surface object, and specifies whether the handle of the composition surface object is inheritable when a child process is created. If this parameter is {{NULL}}, the composition surface object is created with default security attributes that grant read and write access to the current process, but do not enable child processes to inherit the handle.</p> </dd> + + + <dd> <p>The handle of the new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse wheel messages to the given {{HWND}}. This will fail if there is already an interaction attached to this visual. After calling this {{API}}, the device that owns the visual must be committed. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse button down and any subsequent move and up events to the given {{HWND}}. There is no move thresholding; when enabled, all events including and following the down are unconditionally redirected to the specified window. After calling this {{API}}, the device owning the visual must be committed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Represents a function for animating one or more properties of one or more Microsoft DirectComposition objects. Any object property that takes a scalar value can be animated.</p> + + + + <p>Resets the animation function so that it contains no segments.</p> + <p>This method returns the animation function to a clean state, as when the animation was first constructed. After this method is called, the next segment to be added becomes the first segment of the animation function. Because it is the first segment, it can have any non-negative beginning offset.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the absolute time at which the animation function starts.</p> + <p>By default, an animation function starts when the first frame of the animation takes effect. For example, if an application creates a simple animation function with a single primitive at offset zero, associates the animation with some property, and then calls the <strong>{{IDCompositionDevice::Commit}}</strong> method, the first frame that includes the commit samples the animation at offset zero for the first primitive. This implies that the actual default start time of all animations varies depending on the time between when the application creates the animation and calls <strong>Commit</strong>, to the time it takes the composition engine to pick up the committed changes. The application can use the <strong>SetAbsoluteBeginTime</strong> method to exercise finer control over the starting time of an animation. </p><p>This method does not control when animations take effect; it only affects how animations are sampled after they start. If the application specifies the exact time of the next frame as the absolute begin time, the result is the same as not calling this method at all. If the specified begin time is different from the time of the next frame, the result is one of following: </p><ul> <li>If the specified time is later than the next frame time, the animation start is delayed until the specified begin time.</li> <li>If the specified time is earlier than the next frame time, the beginning of the animation is dropped and sampling starts into the animation function. +</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The starting time for this animation.</p> </dd> + + + + + <p>Adds a cubic polynomial segment to the animation function.</p> + <p>A cubic segment transitions time along a cubic polynomial. For a given time input (t), the output value is given by the following equation. </p><p><em>x</em>(<em>t</em>) = <em>at</em>? + <em>bt</em>? + <em>ct</em> + <em>d</em></p><p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p><p>If all coefficients except <em>constantCoefficient</em> are zero, the value of this segment remains constant over time, and the animation does not cause a recomposition for the duration of the segment.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect.</p> </dd> + + + <dd> <p>The constant coefficient of the polynomial.</p> </dd> + + + <dd> <p>The linear coefficient of the polynomial.</p> </dd> + + + <dd> <p>The quadratic coefficient of the polynomial.</p> </dd> + + + <dd> <p>The cubic coefficient of the polynomial.</p> </dd> + + + + + <p>Adds a sinusoidal segment to the animation function.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity, or if the <em>beginOffset</em> parameter is negative. </p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect. </p> </dd> + + + <dd> <p>A constant that is added to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the time offset, in Hertz.</p> </dd> + + + <dd> <p>A constant that is added to the time offset, in degrees.</p> </dd> + + + + + <p>Adds a repeat segment that causes the specified portion of an animation function to be repeated.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>This animation segment remains in effect until the begin time of the next segment. If the animation function contains no more segments, this segment remains in effect indefinitely.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation to the point at which the repeat should begin.</p> </dd> + + + <dd> <p>The duration, in seconds, of a portion of the animation immediately preceding the begin time that is specified by <em>beginOffset</em>. This is the portion that will be repeated.</p> </dd> + + + + + <p>Adds an end segment that marks the end of an animation function. </p> + <p>When the specified offset is reached, the property or properties affected by this animation are set to the specified final value, and then the animation stops. If no end segment is added, the final segment of the animation function runs indefinitely. Calling this method is semantically identical to making the last segment of the animation function a cubic polynomial where the cubic, quadratic, and linear coefficients are all zeros, and the constant coefficient is the desired final value.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>endOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>After this method is called, all methods on this animation object fail except the <strong>{{IDCompositionAnimation::Reset}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when the function ends.</p> </dd> + + + <dd> <p>The final value of the animation.</p> </dd> + + + + + <p>Specifies the interpolation mode to be used when a bitmap is composed with any transform where the pixels in the bitmap don't line up exactly one-to-one with pixels on screen. </p> + <p>The default interpolation mode for a visual is <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If all visuals in a visual tree specify this mode, the default for all visuals is nearest neighbor sampling, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmaps are interpolated by using nearest-neighbor sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated by using linear sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated according to the mode established by the parent visual.</p> </dd> + + + + + <p>Specifies the border mode to use when composing a bitmap or applying a clip with any transform such that the edges of the bitmap or clip are not axis-aligned with integer coordinates. </p> + <p>The default border mode for any given visual is <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, which delegates the determination of the border mode to the parent visual. If all visuals in a visual tree specify this mode, the default for all visuals is aliased rendering, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmap and clip edges are antialiased.</p> </dd> + + + <dd> <p>Bitmap and clip edges are aliased. See Remarks.</p> </dd> + + + <dd> <p>Bitmap and clip edges are drawn according to the mode established by the parent visual.</p> </dd> + + + + + <p>The mode to use to blend the bitmap content of a visual with the render target.</p> + <p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The bitmap colors are inverted. </p> </dd> + + + <dd> <p>Bitmap colors subtract for color channels in the background. </p> </dd> + + + <dd> <p>Bitmaps are blended according to the mode established by the parent visual. </p> </dd> + + + + + <p>Specifies the backface visibility to be applied to a visual. </p> + + + <dd> <p>Surfaces in this visual's sub-tree are visible regardless of transformation.</p> </dd> + + + <dd> <p>Surfaces in this visual's sub-tree are only visible when facing the observer.</p> </dd> + + + <dd> <p>The back face visibility is the same as that of the target visual's parent visual.</p> </dd> + + + + + <p>Specifies how the effective opacity value of a visual is applied to that visual?s content and children.</p> + + + <dd> <p>The target visual defines a logical layer into which its entire sub-tree is composed with a starting effective opacity of 1.0. The original opacity value is then used to blend the layer onto the visual?s background.</p> </dd> + + + <dd> <p>The opacity value is multiplied with the effective opacity of the parent visual and the result is then individually applied to each piece of content in this visual?s sub-tree.</p> </dd> + + + <dd> <p>The opacity mode is the same as that of the target visual?s parent visual.</p> </dd> + + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Describes timing and composition statistics for a frame.</p> + <p>The <strong>{{IDCompositionDevice::GetFrameStatistics}}</strong> method fills this structure. An application can use the information in this structure to estimate the timestamp of the next few frames that will be started by the composition engine. Note that this is only an estimate because the composition engine may or may not compose the next frame, depending on whether any active animations or other work are pending for that frame. In addition, the composition engine may change frame rates according to the cost of composing individual frames.</p> + + + <dd> <p>The time stamp of the last batch of commands to be processed by the composition engine.</p> </dd> + + + <dd> <p>The rate at which the composition engine is producing frames, in frames per second.</p> </dd> + + + <dd> <p>The current time as computed by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>The units in which the <strong>lastFrameTime</strong> and <strong>currentTime</strong> members are specified, in Hertz.</p> </dd> + + + <dd> <p>The estimated time when the next frame will be displayed.</p> </dd> + + + + + <p>Defines the possible states of Direct Manipulation. The viewport can process input in any state unless otherwise noted.</p> + + + + <p>Defines how hit testing is handled by Direct Manipulation when using a dedicated hit-test thread registered through <strong>RegisterHitTestTarget</strong>.</p> + + + + <p>Defines the interaction configuration states available in Direct Manipulation.</p> + + + + <p>Defines the gestures that can be passed to <strong>SetManualGesture</strong>.</p> + <p>By default, Direct Manipulation always reassigns tap and press-and-hold gestures to the application. +</p><p>Use <strong>{{DIRECTMANIPULATION_GESTURE_PINCH_ZOOM}}</strong> to zoom instead of scale. +</p> + + + + <p> Defines the Direct Manipulation motion type.</p> + + + + <p>Defines the input behavior options for the viewport.</p> + <p><strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS}}</strong> is used in the <strong>SetViewportOptions</strong> method. These flags can be combined to set the input behavior for a viewport.</p> + + + <dd> <p>No special behaviors. This is the default value used to set or revert to default behavior.</p> </dd> + + + <dd> <p>At the end of an interaction, the viewport transitions to <strong>{{DIRECTMANIPULATION_READY}}</strong> and then immediately to <strong>{{DIRECTMANIPULATION_DISABLED}}</strong>. The viewport must be explicitly enabled through the <strong>Enable</strong> method before the next interaction can be processed.</p> </dd> + + + <dd> <p> <strong>Update</strong> must be called to redraw the content within the viewport. The content is not updated automatically during an input event.</p> </dd> + + + <dd> <p>All input from a contact associated with the viewport is passed to the {{UI}} thread for processing.</p> </dd> + + + <dd> <p>If set, all <strong>{{WM_POINTERDOWN}}</strong> messages are passed to the application for hit testing. Otherwise, Direct Manipulation will process the messages for hit testing against the existing list of running viewports, and the application will not see the input.</p> <p>Applies only when viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>.</p> </dd> + + + <dd> <p>Specifies that pixel snapping during a manipulation is disabled.</p> <p>Anti-aliasing can create irregular edge rendering. Artifacts, commonly seen as blurry, or semi-transparent, edges can occur when the location of an edge falls in the middle of a device pixel rather than between device pixels. </p> </dd> + + + + + <p>Modifies how the final inertia end position is calculated.</p> + <p>For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL}}</strong> snap points, the snap points are chosen based on the natural ending position of inertia as calculated by the touch interaction engine. For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE}}</strong> snap points, the selected snap point depends on where inertia started.</p> + + + <dd> <p>Content always stops at the snap point closest to where inertia would naturally stop along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at a snap point closest to where inertia would naturally stop along the direction of inertia, depending on how close the snap point is. </p> </dd> + + + <dd> <p>Content always stops at the snap point closest to the release point along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at the next snap point, if the motion starts far from it.</p> </dd> + + + + + <p>Defines the coordinate system for a collection of snap points.</p> + <p>If <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> and <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> are both specified, the snap points are interpreted as specified from the bottom and right boundaries of the content (the size of the content - the size of the viewport). This is intended for {{RTL}} reading scenarios where content is normally specified and rendered from right-to-left or bottom-to-top.</p> + + + <dd> <p>Default. </p> <p>Snap points are specified relative to the top and left boundaries of the content unless <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> is also specified, in which case they are relative to the bottom and right boundaries of the content. For zoom, the boundary is 1.0f.</p> </dd> + + + <dd> <p>Snap points are specified relative to the origin of the viewport.</p> </dd> + + + <dd> <p>Snap points are interpreted as specified in the negative direction of the origin. The origin is shifted to the bottom and right of the viewport or content. Cannot be set for zoom.</p> </dd> + + + + + <p>Defines the horizontal alignment options for content within a viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the left side of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the right side of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the horizontal alignment.</p> </dd> + + + + + <p>Defines the vertical alignment settings for content within the viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the top of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the bottom of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the vertical alignment.</p> </dd> + + + + + <p>Defines the threading behavior for <strong>SetInputMode</strong> or <strong>SetUpdateMode</strong>. The exact meaning of each constant depends on the method called.</p> + + + + <p>Defines the drag-and-drop interaction states for the viewport.</p> + <p>For each interaction, the status always starts at <strong>{{DIRECTMANIPULATION_DRAG_DROP_READY}}</strong> and ends at either <strong>{{DIRECTMANIPULATION_DRAG_DROP_CANCELLED}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_COMMITTED}}</strong>. There are no explicit callbacks for the transition from {{CANCELLED}}/{{COMMITTED}} to {{READY}}. +</p><p>The meaning of the {{CANCELLED}} and {{COMMITED}} values depend on the previous status.</p><ul> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_PRESELECT}}</strong>, they mean the same thing: the content goes back to the original location and no other actions should be taken.</li> <li>{{FOR}} <strong>{{DIRECTMANIPULATION_DRAG_DROP_SELECTING}}</strong>, {{COMMITED}} means apply the selection change; {{CANCELLED}} means avoid the selection change.</li> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_DRAGGING}}</strong>, {{COMMITED}} means perform the drop action; {{CANCELLED}} means cancel the drop action.</li> </ul> + + + <dd> <p>The viewport is at rest and ready for input.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is not selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is being dragged.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a revert.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a commit.</p> </dd> + + + + + <p>Defines behaviors for the drag-drop interaction.</p> + + + <dd> <p>Specifies that vertical movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that horizontal movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that the gesture is to be cross-slide only.</p> </dd> + + + <dd> <p>Specifies that the gesture is a drag initiated by cross-slide.</p> </dd> + + + <dd> <p>Specifies that the gesture a drag initiated by press-and-hold.</p> </dd> + + + + + <p>Defines gestures recognized by Direct Manipulation.</p> + + + + <p>Determines the type and direction of automatic scrolling animation to apply. </p> + + + <dd> <p>If content is scrolling, slowly stop along the direction of the motion.</p> </dd> + + + <dd> <p>Scroll towards the positive boundary of the content.</p> </dd> + + + <dd> <p>Scroll towards the origin of the content.</p> </dd> + + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Activates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated, by default. The manager does not receive or respond to input and callbacks until <strong>Activate</strong> is called for the window. </p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Deactivates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated by default. The manager does not receive or respond to input until <strong>Activate</strong> is called. The manipulation manager should be deactivated when the app does not receive or respond to input. For example, when the app is minimized.</p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Registers a dedicated thread for hit testing.</p> + <p>Hit testing is typically performed on the application {{UI}} thread. The application receives a <strong>{{WM_POINTERDOWN}}</strong> message on which hit-testing is performed. If a manipulation is required, <strong>SetContact</strong> is called on one or more viewports. An application can use the <strong>RegisterHitTestTarget</strong> method to delegate this hit-testing responsibility to a separate hit-testing thread. +</p><p>Once a dedicated hit-test target is successfully registered, <strong>{{WM_POINTERDOWN}}</strong> messages are processed on the hit-testing thread. If a manipulation, such as pan or zoom, is required, <strong>SetContact</strong> is called from this thread. +</p><p>If <strong>SetContact</strong> is not called from the hit-testing thread, <strong>{{WM_POINTERDOWN}}</strong> messages may be processed on the {{UI}} thread, depending on the <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong> specified during registration. +</p><p>If <strong>SetContact</strong> is not called by either the hit-test thread or the {{UI}} thread, Direct Manipulation ignores the input which is then handled on the {{UI}} thread. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of the main app window (typically created from the {{UI}} thread).</p> </dd> + + + <dd> <p>The handle of the window in which hit testing is registered (should be created from the hit testing thread). Pass in nullptr to unregister a previously registered hit-test target.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong>. Specifies whether the {{UI}} window or the hit testing window (or both) receives the hit testing <strong>{{WM_POINTERDOWN}}</strong> message , and in what order.</p> </dd> + + + + + <p>Passes keyboard and mouse messages to the manipulation manager on the app's {{UI}} thread.</p> + <p>Call this method for mouse and keyboard input.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input message to process.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if no further processing should be done with this message; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets a reference to an <strong>{{IDirectManipulationUpdateManager}}</strong> object that receives compositor updates. </p> + <p>For the compositor to respond to update events from Direct Manipulation, you must associate <strong>{{IDirectManipulationUpdateManager}}</strong> to an <strong>{{IDirectManipulationCompositor}}</strong> object during initialization. Use <strong>GetUpdateManager</strong> to obtain a reference to a <strong>{{IDirectManipulationUpdateManager}}</strong> object. Pass this reference to the compositor using the <strong>SetUpdateManager</strong> method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create a new <strong>{{IDirectManipulationViewport}}</strong> object.</p><p>The viewport manages the interaction state and mapping of input to output actions.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Extends the <strong>{{IDirectManipulationManager2}}</strong> interface that provides access to all the Direct Manipulation features and {{APIs}} available to the client application. </p><p>The <strong>{{IDirectManipulationManager3}}</strong> interface adds support for retrieving an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p><strong>Note</strong>??To obtain an <strong>{{IDirectManipulationManager3}}</strong> interface reference, <strong>QueryInterface</strong> on an existing <strong>{{IDirectManipulationManager}}</strong> interface reference.? + + + + <p>Retrieves an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Starts or resumes input processing by the viewport.</p> + <p>This method directs a viewport to attempt to respond to input.</p><p>Call this method if the <strong>{{AUTODISABLE}}</strong> option is set. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>, or <strong>{{S_FALSE}}</strong> if there is no work to do (for example, the viewport is already enabled). Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Stops input processing by the viewport.</p> + <p>When a viewport is disabled, it immediately stops all transforms and moves the content to the final location. </p><p>Call this method when you want to modify multiple attributes atomically. This method can be called at any time. </p><p>The viewport will not resume processing input until <strong>Enable</strong> is called. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies an association between a contact and the viewport.</p> + <p>Call this method when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p><p> <strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p><p>After initialization, Direct Manipulation is not aware of viewport z-order or parent-child relations between viewports. The order of <strong>SetContact</strong> calls defines the viewport tree. To establish the correct viewport hierarchy, <strong>SetContact</strong> should be called first on the child-most viewport, followed by the parent, grand-parent, and so on. +</p><p>Use <strong>{{GET_POINTERID_WPARAM}}</strong> to get the reference identifier from a reference message. The contact is removed automatically when <strong>{{WM_POINTERUP}}</strong> is received. +</p><p>If a contact is associated with one or more viewports using the <strong>SetContact</strong> method, Direct Manipulation will examine further input from that contact and attempt to identify an appropriate manipulation based on the configuration of the associated viewports. If a manipulation is recognized, the application will then receive a <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message for this contact. In this context, the <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message indicates that Direct Manipulation has captured the contact and the application will not receive input from this contact that is consumed for this manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes a contact that is associated with a viewport.</p> + <p>This method releases a contact from a specific Direct Manipulation viewport (equivalent to the user removing a touch point). </p><p>The viewport state is not affected unless the last remaining contact on the viewport is removed, in which case the viewport will transition to inertia, if supported. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes all contacts that are associated with the viewport. Inertia is started if the viewport supports inertia.</p> + <p>This is equivalent to calling <strong>ReleaseContact</strong> on every contact associated with the viewport. The outcome is equivalent to the user removing all touch points from the viewport. </p><p>If supported, inertia will be started after calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Gets the tag value of a viewport.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The out parameters are optional, so the method can return an {{ID}}, the viewport object, or both. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{IID}} to the interface.</p> </dd> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The identifier portion of the tag.</p> </dd> + + + + + <p>Sets a viewport tag.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The object parameter is optional, so that the method can set just an {{ID}}. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Retrieves the rectangle for the viewport relative to the origin of the viewport coordinate system specified by <strong>SetViewportRect</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the bounding rectangle for the viewport, relative to the origin of the viewport coordinate system.</p> + <p>The viewport rectangle specifies the region of content that is visible to the user. In conjunction with the primary content rectangle, the viewport rectangle is used to determine chaining behaviors.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle.</p> </dd> + + + + + <p>Moves the viewport to a specific area of the primary content and specifies whether to animate the transition.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The leftmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The topmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The rightmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The bottommost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>Specifies whether to animate the zoom behavior.</p> </dd> + + + + + <p>Specifies the transform from the viewport coordinate system to the window client coordinate system. </p> + <p>Call this function to specify the viewport position, scaling and orientation on the screen. Viewport position, scaling, orientation and size are uniquely determined by the viewport transform and the viewport rectangle. The application can specify the viewport transform using this method, and the viewport rectangle using <strong>SetViewportRect</strong>. +</p><p>The viewport rectangle (the rectangular area inside the content that is visible to the user) is specified in viewport coordinates. If the viewport rectangle top-left point is (0,0), the viewport rectangle is positioned exactly at the viewport coordinate system origin. Viewports offset from the viewport coordinate system origin can be specified in two ways:</p><ul> <li>Through the viewport rectangle top-left point</li> <li>Through the viewport transform translation component (_31, _32)</li> </ul><p>The viewport transform converts from the viewport coordinate system to the window client coordinate system. Direct Manipulation ignores the window {{RTL}} property, so the client area origin is always the top-left point. +The transforms are applied in the following order: +</p><ol> <li>Viewport rectangle offset</li> <li>Viewport transform (from viewport to client coordinate system)</li> <li>Client to screen mapping (from client to screen coordinate system) +</li> </ol> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Specifies a display transform for the viewport, and synchronizes the output transform with the new value of the display transform.</p> + <p>If the application performs special output processing of the content outside of the compositor (content not fully captured in the viewport transform), it should call this method to specify the display transform for the special processing. +</p><p>The display transform affects how manipulation updates are applied to the output transform. For example, if the display transform is set to scale 3x, panning will move the content 3x the original distance. +</p><p>When a display transform is changed using this method, the output transform will be synchronized to the new value of the display transform. +</p><p>This method cannot be called if the viewport status is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Gets the primary content of a viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. </p><p>Primary content is an element that gets transformed (e.g. moved, scaled, rotated) in response to a user interaction. Primary content is created at the same time as the viewport and cannot be added or removed.</p> + <p> This method gets the content of the viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds secondary content, such as a panning indicator, to a viewport.</p> + <p>Secondary content is created by calling <strong>CreateContent</strong>. Once added, the secondary content will move relative to the primary content in response to a manipulation. Its motion is determined by rules associated with each type of secondary content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the viewport.</p> </dd> + + + + + <p>Removes secondary content from a viewport.</p> + <p>Secondary content can be removed from the viewport at any time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content object to remove.</p> </dd> + + + + + <p>Sets how the viewport handles input and output.</p><p>Calling this method overrides all settings previously specified with <strong>SetUpdateMode</strong> or <strong>SetInputMode</strong>.</p> + <p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds an interaction configuration for the viewport.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p><p>You cannot add another drag and drop behavior after an existing one has already been added.</p><p>This method is designed to allow an application to switch pre-added configurations, as a configuration cannot be changed while a manipulation is occurring. Under most circumstances it is better to update the configuration using <strong>ActivateConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Removes an interaction configuration for the viewport.</p> + <p>This method removes a possible configuration that was added by using <strong>AddConfiguration</strong>. This method can be called only if the configuration is not active.</p><p>An interaction configuration specifies how the manipulation engine responds to input and which gestures are supported. Any number of configurations can be added to the viewport using <strong>AddConfiguration</strong>. Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets the configuration for input interaction.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specify the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets which gestures are ignored by Direct Manipulation. </p> + <p>Use this method to specify which gestures the application processes on the {{UI}} thread. If a gesture is recognized, it will be passed to the application for processing and ignored by Direct Manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the motion types supported in a viewport that can be chained to a parent viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> that specifies the motion types that are enabled for this viewport.</p> </dd> + + + + + <p>Adds a new event handler to listen for viewport events.</p> + <p>The event callback is fired from the thread that owns the specified window. Consecutive events of the same callback method may be coalesced. +</p><strong>Note</strong>??If the viewport has a drag-drop behavior attached, the event handler should implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of a window owned by the thread for the event callback.</p> </dd> + + + <dd> <p>The handler that is called when viewport status and update events occur. The specified object must implement the <strong>{{IDirectManipulationViewportEventHandler}}</strong> interface.</p> </dd> + + + <dd> <p>The handle that represents this event handler callback.</p> </dd> + + + + + <p>Removes an existing event handler from the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that was returned by a previous call to <strong>AddEventHandler</strong>.</p> </dd> + + + + + <p>Specifies if input is visible to the {{UI}} thread.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. </p><p> Direct Manipulation consumes all the input that drives the manipulation and the application receives {{WM_POINTERCAPTURECHANGED}} messages. +</p><p>In some situations an application may want to receive input that is driving a manipulation. Set {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}} in this case. The application will receive all input messages, even input used by Direct Manipulation to drive a manipulation. </p><strong>Note</strong>??The application will not receive {{WM_POINTERCAPTURECHANGED}} messages.?<p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Specifies whether a viewport updates content manually instead of during an input event.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. In this mode, visual updates are pushed to compositor driven by input. This is the expected mode of operation if the application is using system-provided implementation of <strong>{{IDirectManipulationCompositor}}</strong>. +</p><p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, it should switch viewport update mode to manual by setting {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}. When in manual mode, the compositor pulls visual updates whenever it calls <strong>Update</strong> on Direct Manipulation. +</p><p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Stops the manipulation and returns the viewport to a ready state. +</p> + <p>If a mandatory snap point has been configured, the content may animate to the nearest snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases all resources that are used by the viewport and prepares it for destruction from memory. +</p> + <p>Once <strong>Abandon</strong> has been called, do not make subsequent function calls on the viewport. If a function is called after <strong>Abandon</strong>, <strong>{{E_INVALID_STATE}}</strong> will be returned.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides management of behaviors on a viewport. A behavior affects the functionality of a particular part of the Direct Manipulation workflow. </p> + <p><strong>{{IDirectManipulationViewport2}}</strong> can be used in place of <strong>{{IDirectManipulationViewport}}</strong>. +</p><p>Behaviors are created using <strong>{{IDirectManipulationManager2}}</strong> and an appropriate class {{ID}}.</p><p>A behavior can be attached or removed at any time and takes effect immediately (even during an active manipulation or inertia animation).</p> + + + + <p>Adds a behavior to the viewport and returns a cookie to the caller.</p> + <p>A behavior takes effect immediately after <strong>AddBehavior</strong> is called. This must be considered when adding a behavior during an active manipulation or inertia phase.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. Attaching a behavior that is already attached to this viewport or another viewport results in a failure.</p> + + + <dd> <p>A behavior created using the <strong>CreateBehavior</strong> method.</p> </dd> + + + <dd> <p>A cookie is returned so the caller can remove this behavior later. This allows the caller to release any reference on the behavior and let Direct Manipulation maintain an appropriate lifetime, similar to event handlers. </p> </dd> + + + + + <p>Removes a behavior from the viewport that matches the given cookie.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If the behavior has already been removed or if the behavior is not attached to this viewport a failure is returned.</p> + + + <dd> <p>A valid cookie returned from the <strong>AddBehavior</strong> call on the same viewport.</p> </dd> + + + + + <p>Removes all behaviors added to the viewport.</p> + <p><strong>RemoveAllBehaviors</strong> only returns an error if the removal of a behavior from the viewport was unsuccessful. In the event that a specific behavior is not removed successfully, <strong>RemoveAllBehaviors</strong> removes all remaining behaviors.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines methods for handling status and update events for the viewport.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + <p>Client apps implement this handler to receive status and update events for viewports. Use <strong>AddEventHandler</strong> to set the handler for a viewport. Each viewport can have more than one handler.</p> + + + + <p>Called when the status of a viewport changes.</p> + <p>If you call <strong>GetStatus</strong> from within this handler, the status returned is not guaranteed to be the same as at the time of the call. This is because of the asynchronous nature of the notification.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport for which status has changed.</p> </dd> + + + <dd> <p>The new status of the viewport.</p> </dd> + + + <dd> <p>The previous status of the viewport.</p> </dd> + + + + + <p>Called after all content in the viewport has been updated.</p> + <p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>. <strong>OnContentUpdated</strong> is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that has been updated.</p> </dd> + + + + + <p>Called when content inside a viewport is updated. +</p> + <p>This method is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. For instance, when the position of the content is changed, you can use <strong>{{IDirectManipualtionContent::GetContentTransform}}</strong> to retrieve the new value.</p><p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that is updated.</p> </dd> + + + <dd> <p>The content in the viewport that has changed.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Retrieves the bounding rectangle of the content, relative to the bounding rectangle of the viewport (if defined).</p> + <p>If the bounding rectangle has not been set using <strong>SetContentRect</strong>, then <strong>{{UI_E_VALUE_NOT_SET}}</strong> is returned. However, the actual content rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Specifies the bounding rectangle of the content, relative to its viewport. +</p> + <p>The default bounding rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Retrieves the viewport that contains the content.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use.</p> </dd> + + + <dd> <p>The viewport object.</p> </dd> + + + + + <p> </p><p>Retrieves the tag object set on this content. </p> + <p><strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p><strong>GetTag</strong> queries the tag value for the specified interface and returns a reference to that interface.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to identify a motion. +The parameters are optional, so that the method can return both parts of the tag, the identifier portion, or the tag object. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use. The tag object typically implements this interface.</p> </dd> + + + <dd> <p>The tag object.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Specifies the tag object for the content. </p> + <p> <strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to store and retrieve an arbitrary object associated with the content.</p><p>The <em>object</em> parameter is optional, so that the method can set just the identifier portion. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Gets the final transform applied to the content.</p> + <p>This transform might contain the other custom curves applied during manipulation and inertia.</p><p>This transform contains both the content transform and the sync transform set with <strong>SyncContentTransform</strong>. +</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Modifies the content transform while maintaining the output transform.</p> + <p>This method will fail if the viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong>, <strong>{{DIRECTMANIPULATION_INERTIA}}</strong> or <strong>{{DIRECTMANIPULATION_SUSPENDED}}</strong>.</p><p>This method is useful when the application wants to apply transforms on top of the content transforms at the end of a manipulation, while preserving the visual output transform of the content.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p> Specifies snap points for the inertia end position at uniform intervals.</p> + <p>Snap point locations are in content coordinate units. </p><p>Specify snap points through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong>. </p><p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p><p>Snap points are not at boundaries by default. If you wish for content to stop at a boundary, a snap point must be set at the boundary.</p><p> Snap points set by <strong>SetSnapInterval</strong> can be cleared by calling <strong>SetSnapInterval</strong> with an interval of 0.0f.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>The interval between each snap point.</p> </dd> + + + <dd> <p>The offset from the coordinate specified in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + + + <p>Specifies the snap points for the inertia rest position.</p> + <p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If there is no change in the snap points, this method can return <strong>{{S_FALSE}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If invalid snap points are specified, existing snap points might be affected.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values. Only <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_X}}</strong>, <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_Y}}</strong>, or <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong> are allowed.</p> </dd> + + + <dd> <p>An array of snap points within the boundaries of the content to snap to. Should be specified in increasing order relative to the origin set in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + <dd> <p> The size of the array of snap points. Should be greater than 0.</p> </dd> + + + + + <p>Specifies the type of snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE}}</strong> enumeration values.</p> <p>If set to <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE}}</strong>, snap points specified through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong> are cleared.</p> </dd> + + + + + <p> Specifies the coordinate system for snap points or snap intervals. </p> + <p>The origin is relative to the content boundaries. If no boundary has been set (<strong>SetContentRect</strong> is never called) the default boundaries are (-{{FLT_MAX}}, {{FLT_MAX}}). </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. </p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong>. </p> <p>If <em>motion</em> is set to translation (<strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> or <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong>), all values of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> are valid. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, only <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> is valid (<em>origin</em> must be set to 0.0f).</p> </dd> + + + <dd> <p>The initial, or starting, snap point. All snap points are relative to this one. Only used when <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> is set. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, then <em>origin</em> must be set to 0.0f.</p> </dd> + + + + + <p>Specifies the minimum and maximum boundaries for zoom.</p> + <p>If the content is outside the new boundaries, and the viewport is {{ENABLED}} or {{READY}}, then the content is reset to be within the new boundaries. If inertia configuration is enabled, the reset operation uses an inertia animation. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The minimum zoom level allowed. Must be greater than or equal to 0.1f, which corresponds to 100% zoom.</p> </dd> + + + <dd> <p>The maximum zoom allowed. Must be greater than <em>zoomMinimum</em> and less than {{FLT_MAX}}.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Specifies the vertical alignment of the primary content in the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT}}</strong>.</p> <strong>Note</strong>??You cannot combine <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_TOP}}</strong>, <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER}}</strong>, or <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM}}</strong>. <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Gets the final transform, including inertia, of the primary content.</p> + <strong>Warning</strong>??Calling this method can cause a race condition if inertia has ended or been interrupted. This can also occur during the <strong>OnViewportStatusChanged</strong> callback.? + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transformed matrix that represents the inertia ending position.</p> </dd> + + + <dd> <p>The size of the matrix. </p> <p> This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the center point of the manipulation in content coordinates. If there is no manipulation in progress, retrieves the center point of the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The center on the horizontal axis.</p> </dd> + + + <dd> <p>The center on the vertical axis.</p> </dd> + + + + + <p>Defines methods to handle drag-drop behavior events.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when a status change happens in the viewport that the drag-and-drop behavior is attached to. </p> + <p>If a class is implementing <strong>{{IDirectManipulationViewportEventHandler}}</strong> it should also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong> if that viewport will use drag and drop. Direct Manipulation will query the <strong>{{IDirectManipulationViewportEventHandler}}</strong> instances to verify that they also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated viewport.</p> </dd> + + + <dd> <p>The current state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + <dd> <p>The previous state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Gets the status of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>This method returns the drag-drop status at the time of the call and not at the time when the return value is read.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>.</p> </dd> + + + + + <p>Defines methods to handle interactions when they are detected.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when an interaction is detected.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport on which the interaction was detected.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INTERACTION_TYPE}}</strong>.</p> </dd> + + + + + <p>Represents a time-keeping object that measures the latency of the composition infrastructure used by the application and provides this data to Direct Manipulation. +</p> + + + + <p>Retrieves the composition timing information from the compositor.</p> + <p>The system implementation of <strong>{{IDirectManipulationFrameInfoProvider}}</strong> uses DirectComposition. <strong>GetFrameStatistics</strong> is used to calculate the parameter values for <strong>GetNextFrameInfo</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current time, in milliseconds.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor begins constructing the next frame.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor finishes composing and drawing the next frame on the screen.</p> </dd> + + + + + <p> </p><p>Represents a compositor object that associates manipulated content with a drawing surface, such as <strong>canvas</strong> (Windows Store app using JavaScript) or <strong>Canvas</strong> (Windows Store app using C++, C#, or Visual Basic).</p> + <p>The content of a Direct Manipulation viewport must be manually updated during an input event for custom implementations of <strong>{{IDirectManipulationCompositor}}</strong>. Call <strong>Update</strong> to redraw the content within the viewport. </p><p>You specify manual mode on a viewport by calling either of these functions:</p><ul> <li> <strong>SetViewportOptions</strong>, with <strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE}}</strong> specified.</li> <li> <strong>SetUpdateMode</strong>, with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> specified.</li> </ul> + + + + <p>Associates content (owned by the caller) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. </p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. This can be primary content, obtained from the viewport by calling <strong>GetPrimaryContent</strong>, or secondary content, such as a panning indicator, created by calling <strong>CreateContent</strong>. +</p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Removes content from the compositor.</p> + <p>This method removes content added with <strong>AddContent</strong> and restores the original relationships between parent visuals and child visuals in the composition tree. In other words, <strong>RemoveContent</strong> undoes <strong>AddContent</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to remove from the composition tree.</p> </dd> + + + + + <p> </p><p> Sets the update manager used to send compositor updates to Direct Manipulation. </p> + <p>Retrieve <em>updateManager</em> by calling <strong>GetUpdateManager</strong>.</p><p>Call this method during Direct Manipulation initialization to connect the compositor to the <em>update manager</em>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all pending updates in the compositor to the system for rendering.</p> + <p>This method enables Direct Manipulation to flush any pending changes to its visuals before a system event, such as a process suspension.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p> </p><p>Defines methods for handling manipulation update events.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Notifies the compositor when to update inertia animation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Manages how compositor updates are sent to Direct Manipulation.</p><p>This interface enables the compositor to trigger an update on Direct Manipulation whenever there is a compositor update. The application should not call the methods of this interface directly. +</p> + + + + <p>Registers a callback that is triggered by a handle.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The event handle that triggers the callback.</p> </dd> + + + <dd> <p>The event handler to call when the event is fired.</p> </dd> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Deregisters a callback.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Updates Direct Manipulation at the current time.</p> + <p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, this implementation should call <strong>Update</strong> whenever there is a compositor update. Frame timing information can be provided to Direct Manipulation through the <strong>{{IDirectManipulationFrameInfoProvider}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents the auto-scroll animation behavior of content as it approaches the boundary of a given axis or axes.</p> + + + + <p>Performs the auto-scroll animation for the viewport this behavior is attached to. </p> + <p><strong>SetConfiguration</strong> takes effect immediately. If the content is not in inertia, and <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION_STOP}}</strong> is specified for <em>scrollMotion</em>, then this method returns {{S_FALSE}}. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> and <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong> from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. <strong>{{DIRECTMANIPULATION_MOTION_NONE}}</strong> cannot be specified.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION}}</strong>. </p> </dd> + + + + + <p>Represents a service for managing associations between a contact and a viewport.</p><p> <strong>SetContact</strong> is called when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p> + + + + <p>Specifies the amount of time to defer the execution of a call to <strong>SetContact</strong> for this <em>referenceId</em>.</p><p><strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel all scheduled calls to <strong>SetContact</strong> for this <em>referenceId</em>. </p> + <p>This function fails if the timeout specified in <strong>DeferContact</strong> has already been reached. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel the deferral set in <strong>DeferContact</strong> and process the scheduled <strong>SetContact</strong> call for this <em>referenceId</em>. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flags indicating the memory location of a resource.</p> + <p>This enum is used by <strong>QueryResourceResidency</strong>.</p> + + + <dd> <p>The resource is located in video memory.</p> </dd> + + + <dd> <p>At least some of the resource is located in {{CPU}} memory.</p> </dd> + + + <dd> <p>At least some of the resource has been paged out to the hard drive.</p> </dd> + + + + + <p> Options for handling pixels in a display surface after calling <strong>{{IDXGISwapChain1::Present1}}</strong>. </p> + <p> This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong>structures. </p><p> To use multisampling with <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling <strong>{{ID3D11Device::CreateTexture2D}}</strong> with a filled <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure (<strong>BindFlags</strong> member set to <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> and <strong>SampleDesc</strong> member with multisampling parameters). Next call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render-target view for the texture, and render your scene into the texture. Finally call <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve the multisampled texture into your non-multisampled swap chain. </p><p> The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager ({{DWM}}) for composition. In the bitblt model, which is used with the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> and <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> values, contents of the back buffer get copied into the redirection surface on each call to <strong>{{IDXGISwapChain1::Present1}}</strong>. In the flip model, which is used with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value, all back buffers are shared with the {{DWM}}. Therefore, the {{DWM}} can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics. </p><p> When you call <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip model swap chain (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>) with 0 specified in the <em>SyncInterval</em> parameter, <strong>{{IDXGISwapChain1::Present1}}</strong>'s behavior is the same as the behavior of Direct3D 9Ex's <strong>{{IDirect3DDevice9Ex::PresentEx}}</strong> with <strong>{{D3DSWAPEFFECT_FLIPEX}}</strong> and {{D3DPRESENT_FORCEIMMEDIATE}}. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames. </p><p> Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix {{GDI}} and DirectX presentation. In the flip model, the application must create the swap chain with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, and then must use <strong>GetDC</strong> on the back buffer explicitly. After the first successful call to <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip-model swap chain, {{GDI}} no longer works with the <strong>{{HWND}}</strong> that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like <strong>ScrollWindowEx</strong>. </p><p> For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas. </p> + + + + <p>Options for swap-chain behavior.</p> + <p>This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> structure and the <strong>{{IDXGISwapChain::ResizeTarget}}</strong> method.</p><p>This enumeration is also used by the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>You don't need to set <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> for swap chains that you create in full-screen mode with the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method because those swap chains already behave as if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. That is, presented content is not accessible by remote access or through the <strong>desktop duplication {{APIs}}</strong>.</p><p>Swap chains that you create with the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, and <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> methods are not protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is not set and are protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the <strong>desktop duplication {{APIs}}</strong>.</p><p>When you call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> to change the swap chain's back buffer, you can reset or change all <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> flags.</p> + + + <dd> <p>Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode. </p> </dd> + + + <dd> <p>Set this flag to enable an application to switch modes by calling <strong>{{IDXGISwapChain::ResizeTarget}}</strong>. When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.</p> </dd> + + + <dd> <p>Set this flag to enable an application to render using {{GDI}} on a swap chain or a surface. This will allow the application to call <strong>{{IDXGISurface1::GetDC}}</strong> on the 0th back buffer or a surface.</p> </dd> + + + <dd> <p>Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the <strong>desktop duplication {{APIs}}</strong>. </p> <p>This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and {{APIs}}.</p> <p>If you use this flag with windowed (<strong>{{HWND}}</strong> or <strong>{{IWindow}}</strong>) swap chains where another process created the <strong>{{HWND}}</strong>, the owner of the <strong>{{HWND}}</strong> must use the <strong>SetWindowDisplayAffinity</strong> function appropriately in order to allow calls to <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> to succeed. +</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> {{API}} instead of <strong>{{IDXGIDevice1::SetMaximumFrameLatency}}</strong>.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with <strong>CoreWindow</strong> swap chains, which are created with <strong>CreateSwapChainForCoreWindow</strong>. Apps should not create foreground swap chains if <strong>{{IDXGIOutput2::SupportsOverlays}}</strong> indicates that hardware support for overlays is not available.</p> <p>Note that <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> cannot be used to add or remove this flag.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for full-screen video. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for {{YUV}} video.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li>This flag can only be used with swap effect <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>.</li> </ul> <strong>Note</strong>??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection. ? <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling <strong>SetFullscreenState</strong>({{TRUE}}), but the recommended approach for Win32 developers is to use this tearing flag instead.</p> <p>To check for hardware support of this feature, refer to <strong>{{IDXGIFactory5::CheckFeatureSupport}}</strong>. For usage information refer to <strong>{{IDXGISwapChain::Present}}</strong> and the <strong>{{DXGI_PRESENT}}</strong> flags.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Describes timing and presentation statistics for a frame.</p> + <p>You initialize the <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure with the <strong>{{IDXGIOutput::GetFrameStatistics}}</strong> or <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> method.</p><p>You can only use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p><p>The values in the <strong>PresentCount</strong> and <strong>PresentRefreshCount</strong> members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the <strong>SyncRefreshCount</strong> and <strong>SyncQPCTime</strong> members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. +If the swap chain draws in windowed mode, these values are based on when the swap chain is created.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + + + <p>Describes a mapped rectangle that is used to access a surface.</p> + <p>The <strong>{{DXGI_MAPPED_RECT}}</strong> structure is initialized by the <strong>{{IDXGISurface::Map}}</strong> method.</p> + + + <dd> <p>A value that describes the width, in bytes, of the surface.</p> </dd> + + + <dd> <p>A reference to the image buffer of the surface.</p> </dd> + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p>Represents a handle to a shared resource.</p> + <p>To create a shared surface, pass a shared-resource handle into the <strong>{{IDXGIDevice::CreateSurface}}</strong> method.</p> + + + <dd> <p>A handle to a shared resource.</p> </dd> + + + + + <p>Describes a surface.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSurface</strong> methods.</p> + + + <dd> <p>A value describing the surface width.</p> </dd> + + + <dd> <p>A value describing the surface height.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_FORMAT}}</strong> enumerated type that describes the surface format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters for the surface.</p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSwapChain</strong> methods.</p><p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>If you create a swap chain with one buffer, specifying <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> does not cause the contents of the single buffer to be swapped with the front buffer.</p><p>For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.</p> + + + <dd> <p>A <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the backbuffer display mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_USAGE}}</strong> enumerated type that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you call <strong>{{IDXGIFactory::CreateSwapChain}}</strong> to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.</p> </dd> + + + <dd> <p>An <strong>{{HWND}}</strong> handle to the output window. This member must not be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the output is in windowed mode. <strong>{{TRUE}}</strong> if the output is in windowed mode; otherwise, <strong>{{FALSE}}</strong>. </p> <p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>; that is, do not set this member to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the <strong>BufferDesc</strong> member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. </p> <p>For more information about choosing windowed verses full screen, see <strong>{{IDXGIFactory::CreateSwapChain}}</strong>.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_EFFECT}}</strong> enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> enumerated type that describes options for swap-chain behavior.</p> </dd> + + + + + <p>Describes an adapter (or video card) using {{DXGI}} 1.1.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure provides a {{DXGI}} 1.1 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + + + <p> Don't use this structure; it is not supported and it will be removed from the header in a future release. </p> + + + <dd> <p> The primary coordinates, as an 8 by 2 array of {{FLOAT}} values. </p> </dd> + + + <dd> <p> The white points, as a 16 by 2 array of {{FLOAT}} values. </p> </dd> + + + + + <p> An <strong>{{IDXGIObject}}</strong> interface is a base interface for all {{DXGI}} objects; <strong>{{IDXGIObject}}</strong> supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object. </p> + <p><strong>{{IDXGIObject}}</strong> implements base-class functionality for the following interfaces: </p><ul> <li> <strong>{{IDXGIAdapter}}</strong> </li> <li> <strong>{{IDXGIDevice}}</strong> </li> <li> <strong>{{IDXGIFactory}}</strong> </li> <li> <strong>{{IDXGIOutput}}</strong> </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets application-defined data to the object and associates that data with a {{GUID}}.</p> + <p><strong>SetPrivateData</strong> makes a copy of the specified data and stores it with the object.</p><p>Private data that <strong>SetPrivateData</strong> stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through <strong>{{ID3D11Device::SetPrivateData}}</strong> or by a Direct3D?11 child device through <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>).</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the well-known private data {{GUID}} (<strong>{{WKPDID_D3DDebugObjectName}}</strong>) that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre><p>You can use <strong>{{WKPDID_D3DDebugObjectName}}</strong> to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks (<strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>) and with the event tracing for Windows events that we've added to Windows?8. +</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A {{GUID}} that identifies the data. Use this {{GUID}} in a call to <strong>GetPrivateData</strong> to get the data.</p> </dd> + + + <dd> <p>The size of the object's data.</p> </dd> + + + <dd> <p>A reference to the object's data.</p> </dd> + + + + + <p>Set an interface in the object's private data.</p> + <p>This {{API}} associates an interface reference with the object.</p><p>When the interface is set its reference count is incremented. When the data are overwritten (by calling {{SPD}} or {{SPDI}} with the same {{GUID}}) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the interface.</p> </dd> + + + <dd> <p>The interface to set.</p> </dd> + + + + + <p>Get a reference to the object's data.</p> + <p>If the data returned is a reference to an <strong>{{IUnknown}}</strong>, or one of its derivative classes, previously set by <strong>{{IDXGIObject::SetPrivateDataInterface}}</strong>, you must call <strong>::Release()</strong> on the reference before the reference is freed to decrement the reference count.</p><p>You can pass <strong>{{GUID_DeviceType}}</strong> in the <em>Name</em> parameter of <strong>GetPrivateData</strong> to retrieve the device type from the display adapter object (<strong>{{IDXGIAdapter}}</strong>, <strong>{{IDXGIAdapter1}}</strong>, <strong>{{IDXGIAdapter2}}</strong>). </p><p><strong>To get the type of device on which the display adapter was created</strong></p><ol> <li>Call <strong>{{IUnknown::QueryInterface}}</strong> on the <strong>{{ID3D11Device}}</strong> or <strong>{{ID3D10Device}}</strong> object to retrieve the <strong>{{IDXGIDevice}}</strong> object.</li> <li>Call <strong>GetParent</strong> on the <strong>{{IDXGIDevice}}</strong> object to retrieve the <strong>{{IDXGIAdapter}}</strong> object.</li> <li>Call <strong>GetPrivateData</strong> on the <strong>{{IDXGIAdapter}}</strong> object with <strong>{{GUID_DeviceType}}</strong> to retrieve the type of device on which the display adapter was created. <em>pData</em> will point to a value from the driver-type enumeration (for example, a value from <strong>{{D3D_DRIVER_TYPE}}</strong>).</li> </ol><p>On Windows?7 or earlier, this type is either a value from <strong>{{D3D10_DRIVER_TYPE}}</strong> or <strong>{{D3D_DRIVER_TYPE}}</strong> depending on which kind of device was created. On Windows?8, this type is always a value from <strong>{{D3D_DRIVER_TYPE}}</strong>. Don't use <strong>{{IDXGIObject::SetPrivateData}}</strong> with <strong>{{GUID_DeviceType}}</strong> because the behavior when doing so is undefined.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the data.</p> </dd> + + + <dd> <p>The size of the data.</p> </dd> + + + <dd> <p>Pointer to the data.</p> </dd> + + + + + <p>Gets the parent of the object.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>The {{ID}} of the requested interface.</p> </dd> + + + <dd> <p>The address of a reference to the parent object.</p> </dd> + + + + + <p>Inherited from objects that are tied to the device so that they can retrieve a reference to it.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Retrieves the device.</p> + <p>The type of interface that is returned can be any interface published by the device. For example, it could be an {{IDXGIDevice}} * called pDevice, and therefore the {{REFIID}} would be obtained by calling __uuidof(pDevice).</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}).</p> + + + <dd> <p>The reference id for the device.</p> </dd> + + + <dd> <p>The address of a reference to the device.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetSharedHandle</strong> anymore to retrieve the handle to a shared resource. Instead, use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> to get a handle for sharing. To use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong>, you must create the resource as shared and specify that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag). We also recommend that you create shared resources that use {{NT}} handles so you can use <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on on those shared resources.]</p><p>Gets the handle to a shared resource.</p> + <p><strong>GetSharedHandle</strong> returns a handle for the resource that you created as shared (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> with or without the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag). You can pass this handle to the <strong>{{ID3D11Device::OpenSharedResource}}</strong> method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an {{NT}} handle. Therefore, don't use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on.</p><p>The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.</p><p><strong>GetSharedHandle</strong> can also return handles for resources that were passed into <strong>{{ID3D11Device::OpenSharedResource}}</strong> to open those resources.</p><p><strong>GetSharedHandle</strong> fails if the resource to which it wants to get a handle is not shared.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Get the expected resource usage.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a usage flag (see {{DXGI_USAGE}}). For Direct3D 10, a surface can be used as a shader input or a render-target output.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get the eviction priority.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} to determine how to manage overcommitted memory.</p><p>Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the eviction priority, which determines when a resource can be evicted from memory. </p> <p>The following defined values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.</p> + <p>The <strong>{{IDXGIFactory1}}</strong> is required to create a resource capable of supporting the <strong>{{IDXGIKeyedMutex}}</strong> interface.</p><p>An <strong>{{IDXGIKeyedMutex}}</strong> should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag.</p><p>For information about creating a keyed mutex, see the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method.</p> + + + + <p>Using a key, acquires exclusive rendering access to a shared resource.</p> + <p>The <strong>AcquireSync</strong> method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>AcquireSync</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p><p>The <strong>AcquireSync</strong> method uses the key as follows, depending on the state of the surface:</p><ul> <li>On initial creation, the surface is unowned and any device can call the <strong>AcquireSync</strong> method to gain access. For an unowned device, only a key of 0 will succeed. Calling the <strong>AcquireSync</strong> method for any other key will stall the calling {{CPU}} thread.</li> <li>If the surface is owned by a device when you call the <strong>AcquireSync</strong> method, the {{CPU}} thread that called the <strong>AcquireSync</strong> method will stall until the owning device calls the <strong>ReleaseSync</strong> method using the same Key.</li> <li>If the surface is unowned when you call the <strong>AcquireSync</strong> method (for example, the last owning device has already called the <strong>ReleaseSync</strong> method), the <strong>AcquireSync</strong> method will succeed if you specify the same key that was specified when the <strong>ReleaseSync</strong> method was last called. Calling the <strong>AcquireSync</strong> method using any other key will cause a stall.</li> <li>When the owning device calls the <strong>ReleaseSync</strong> method with a particular key, and more than one device is waiting after calling the <strong>AcquireSync</strong> method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.</li> <li>A keyed mutex does not support recursive calls to the <strong>AcquireSync</strong> method.</li> </ul> + <p>Return {{S_OK}} if successful.</p><p>If the owning device attempted to create another keyed mutex on the same shared resource, <strong>AcquireSync</strong> returns {{E_FAIL}}.</p><p><strong>AcquireSync</strong> can also return the following <strong>{{DWORD}}</strong> constants. Therefore, you should explicitly check for these constants. If you only use the <strong>{{SUCCEEDED}}</strong> macro on the return value to determine if <strong>AcquireSync</strong> succeeded, you will not catch these constants.</p><ul> <li>{{WAIT_ABANDONED}} - The shared surface and keyed mutex are no longer in a consistent state. If <strong>AcquireSync</strong> returns this value, you should release and recreate both the keyed mutex and the shared surface.</li> <li>{{WAIT_TIMEOUT}} - The time-out interval elapsed before the specified key was released.</li> </ul> + + + <dd> <p>A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + <dd> <p>The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified <em>Key</em>. If this value is set to zero, the <strong>AcquireSync</strong> method will test to see if the keyed mutex has been released and returns immediately. If this value is set to {{INFINITE}}, the time-out interval will never elapse.</p> </dd> + + + + + <p>Using a key, releases exclusive rendering access to a shared resource.</p> + <p>The <strong>ReleaseSync</strong> method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>After you call the <strong>ReleaseSync</strong> method, the shared resource is unset from the rendering pipeline. </p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p> + <p>Returns {{S_OK}} if successful.</p><p>If the device attempted to release a keyed mutex that is not valid or owned by the device, <strong>ReleaseSync</strong> returns {{E_FAIL}}.</p> + + + <dd> <p>A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the <strong>ReleaseSync</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + + + <p>The <strong>{{IDXGISurface}}</strong> interface implements methods for image-data objects.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. </p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>.</p> + + + + <p>Get a description of the surface.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface description (see <strong>{{DXGI_SURFACE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>The <strong>{{IDXGISurface1}}</strong> interface extends the <strong>{{IDXGISurface}}</strong> by adding support for using Windows Graphics Device Interface ({{GDI}}) to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface1}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface1}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface1}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface1}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface1}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface1}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface1}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface1}}</strong>.</p> + + + + <p>Returns a device context ({{DC}}) that allows you to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface using Windows Graphics Device Interface ({{GDI}}).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>After you use the <strong>GetDC</strong> method to retrieve a {{DC}}, you can render to the {{DXGI}} surface by using {{GDI}}. The <strong>GetDC</strong> method readies the surface for {{GDI}} rendering and allows inter-operation between {{DXGI}} and {{GDI}} technologies. </p><p>Keep the following in mind when using this method:</p><ul> <li>You must create the surface by using the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag for a surface or by using the <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong> flag for swap chains, otherwise this method fails.</li> <li>You must release the device and call the <strong>{{IDXGISurface1::ReleaseDC}}</strong> method before you issue any new Direct3D commands.</li> <li>This method fails if an outstanding {{DC}} has already been created by this method.</li> <li>The format for the surface or swap chain must be <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</li> <li>On <strong>GetDC</strong>, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong> method on the device prior to Direct3D rendering after {{GDI}} rendering.</li> <li>Prior to resizing buffers you must release all outstanding {{DCs}}.</li> </ul><p> You can also call <strong>GetDC</strong> on the back buffer at index 0 of a swap chain by obtaining an <strong>{{IDXGISurface1}}</strong> from the swap chain. The following code illustrates the process.</p><pre> {{IDXGISwapChain}}* g_pSwapChain = {{NULL}}; +{{IDXGISurface1}}* g_pSurface1 = {{NULL}}; +... +//Setup the device and and swapchain +g_pSwapChain-&gt;GetBuffer(0, __uuidof({{IDXGISurface1}}), (void**) &amp;g_pSurface1); +g_pSurface1-&gt;GetDC( {{FALSE}}, &amp;g_hDC ); +... +//Draw on the {{DC}} using {{GDI}} +... +//When finish drawing release the {{DC}} +g_pSurface1-&gt;ReleaseDC( {{NULL}} ); </pre> + <p>Returns {{S_OK}} if successful; otherwise, an error code.</p> + + + <dd> <p>A Boolean value that specifies whether to preserve Direct3D contents in the {{GDI}} {{DC}}. <strong>{{TRUE}}</strong> directs the runtime not to preserve Direct3D contents in the {{GDI}} {{DC}}; that is, the runtime discards the Direct3D contents. <strong>{{FALSE}}</strong> guarantees that Direct3D contents are available in the {{GDI}} {{DC}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{HDC}}</strong> handle that represents the current device context for {{GDI}} rendering.</p> </dd> + + + + + <p>Releases the {{GDI}} device context ({{DC}}) that is associated with the current surface and allows you to use Direct3D to render.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>ReleaseDC</strong> method to release the {{DC}} and indicate that your application finished all {{GDI}} rendering to this surface. You must call the <strong>ReleaseDC</strong> method before you can use Direct3D to perform additional rendering.</p><p>Prior to resizing buffers you must release all outstanding {{DCs}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for {{GDI}} rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in <strong>{{NULL}}</strong>, <strong>ReleaseDC</strong> considers the whole surface as dirty. Otherwise, <strong>ReleaseDC</strong> uses the area specified by the {{RECT}} as a performance hint to indicate what areas have been manipulated by {{GDI}} rendering.</p> <p>You can pass a reference to an empty <strong>{{RECT}}</strong> structure (a rectangle with no position or area) if you didn't change any content.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerate adapter (video card) outputs.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>When the <strong>EnumOutputs</strong> method succeeds and fills the <em>ppOutput</em> parameter with the address of the reference to the output interface, <strong>EnumOutputs</strong> increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the <strong>Release</strong> method to decrement the reference count.</p><p><strong>EnumOutputs</strong> first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. <strong>EnumOutputs</strong> then returns other outputs.</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}). {{DXGI_ERROR_NOT_FOUND}} is returned if the index is greater than the number of outputs.</p><p>If the adapter came from a device created using {{D3D_DRIVER_TYPE_WARP}}, then the adapter has no outputs, so {{DXGI_ERROR_NOT_FOUND}} is returned. +</p> + + + <dd> <p>The index of the output.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIOutput}}</strong> interface at the position specified by the <em>Output</em> parameter.</p> </dd> + + + + + <p>Gets a {{DXGI}} 1.0 description of an adapter (or video card).</p> + <p>Graphics apps can use the {{DXGI}} {{API}} to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model ({{WDDM}}) drivers. The following are the critical steps involved.</p><ul> <li> Graphics driver model determination ? Because {{DXGI}} is only available on systems with {{WDDM}} drivers, the app must first confirm the driver model by using the following {{API}}. <pre> HasWDDMDriver() +{ {{LPDIRECT3DCREATE9EX}} pD3D9Create9Ex = {{NULL}}; {{HMODULE}} hD3D9 = {{NULL}}; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( {{NULL}} == hD3D9 ) { return false; } // /* Try to create {{IDirect3D9Ex}} interface (also known as a {{DX9L}} interface). This interface can only be created if the driver is a {{WDDM}} driver. */ // pD3D9Create9Ex = ({{LPDIRECT3DCREATE9EX}}) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != {{NULL}}; +} </pre> </li> <li> Retrieval of graphics memory values.? After the app determines the driver model to be {{WDDM}}, the app can use the Direct3D 10 or later {{API}} and {{DXGI}} to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that contains the amount of available graphics memory. <pre> {{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +{{IDXGIAdapter}} * pDXGIAdapter; +pDXGIDevice-&gt;GetAdapter(&amp;pDXGIAdapter); +{{DXGI_ADAPTER_DESC}} adapterDesc; +pDXGIAdapter-&gt;GetDesc(&amp;adapterDesc); </pre> </li> </ul> + <p>Returns {{S_OK}} if successful; otherwise returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p>Checks whether the system supports a device interface for a graphics component.</p> + <strong>Note</strong>??You can use <strong>CheckInterfaceSupport</strong> only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista {{SP1}} and later versions of the operating system. If you try to use <strong>CheckInterfaceSupport</strong> to check whether a Direct3D 11.x and later version interface is supported, <strong>CheckInterfaceSupport</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Therefore, do not use <strong>CheckInterfaceSupport</strong>. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the <strong>{{ID3D11Device::CreateBlendState}}</strong> method and it fails, the operating system does not support the <strong>{{ID3D11BlendState}}</strong> interface.? + <p>{{S_OK}} indicates that the interface is supported, otherwise {{DXGI_ERROR_UNSUPPORTED}} is returned (For more information, see {{DXGI_ERROR}}).</p> + + + <dd> <p>The {{GUID}} of the interface of the device version for which support is being checked. For example, __uuidof({{ID3D10Device}}).</p> </dd> + + + <dd> <p>The user mode driver version of <em>InterfaceName</em>. This is returned only if the interface is supported, otherwise this parameter will be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Get a description of the output.</p> + <p> On a high {{DPI}} desktop, <strong>GetDesc</strong> returns the visualized screen size unless the app is marked high {{DPI}} aware. For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> + <p>Returns a code that indicates success or failure. {{S_OK}} if successful, {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> is passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to the output description (see <strong>{{DXGI_OUTPUT_DESC}}</strong>).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>FindClosestMatchingMode</strong> anymore to find the display mode that most closely matches the requested display mode. Instead, use <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong>, which supports stereo display mode.]</p><p>Finds the display mode that most closely matches the requested display mode.</p> + <p><strong>FindClosestMatchingMode</strong> behaves similarly to the <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> except <strong>FindClosestMatchingMode</strong> considers only the mono display modes. <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> considers only stereo modes if you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure that <em>pModeToMatch</em> points to, and considers only mono modes if <strong>Stereo</strong> is not set.</p><p> <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> returns a matched display-mode set with only stereo modes or only mono modes. +<strong>FindClosestMatchingMode</strong> behaves as though you specified the input mode as mono.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Halt a thread until the next vertical blank occurs.</p> + <p>A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Takes ownership of an output.</p> + <p>When you are finished with the output, call <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>.</p><p><strong>TakeOwnership</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a device (such as an <strong>{{ID3D10Device}}</strong>).</p> </dd> + + + <dd> <p>Set to <strong>{{TRUE}}</strong> to enable other threads or applications to take ownership of the device; otherwise, set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Releases ownership of the output.</p> + <p>If you are not using a swap chain, get access to an output by calling <strong>{{IDXGIOutput::TakeOwnership}}</strong> and release it when you are finished by calling <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>. An application that uses a swap chain will typically not call either of these methods.</p> + <p>Returns nothing.</p> + + + + <p>Gets a description of the gamma-control capabilities.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a description of the gamma-control capabilities (see <strong>{{DXGI_GAMMA_CONTROL_CAPABILITIES}}</strong>).</p> </dd> + + + + + <p>Sets the gamma controls.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure that describes the gamma curve to set.</p> </dd> + + + + + <p>Gets the gamma control settings.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>An array of gamma control settings (see <strong>{{DXGI_GAMMA_CONTROL}}</strong>).</p> </dd> + + + + + <p>Changes the display mode.</p> + <p><strong>{{IDXGIOutput::SetDisplaySurface}}</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p><p>This method should only be called between <strong>{{IDXGIOutput::TakeOwnership}}</strong> and <strong>{{IDXGIOutput::ReleaseOwnership}}</strong> calls.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a surface (see <strong>{{IDXGISurface}}</strong>) used for rendering an image to the screen. The surface must have been created as a back buffer ({{DXGI_USAGE_BACKBUFFER}}).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplaySurfaceData</strong> anymore to retrieve the current display surface. Instead, use <strong>{{IDXGIOutput1::GetDisplaySurfaceData1}}</strong>, which supports stereo display mode.]</p><p>Gets a copy of the current display surface.</p> + <p><strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> can only be called when an output is in full-screen mode. If the method succeeds, {{DXGI}} fills the destination surface.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with {{CPU}}-write permission (see {{D3D10_CPU_ACCESS_WRITE}}). Other surfaces should be created with {{CPU}} read-write permission (see {{D3D10_CPU_ACCESS_READ_WRITE}}). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Gets statistics about recently rendered frames.</p> + <p>This {{API}} is similar to <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p><p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.? + <p>If this function succeeds, it returns {{S_OK}}. Otherwise, it might return {{DXGI_ERROR_INVALID_CALL}}.</p> + + + <dd> <p>A reference to frame statistics (see <strong>{{DXGI_FRAME_STATISTICS}}</strong>).</p> </dd> + + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + <p>Accesses one of the swap-chain's back buffers.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A zero-based buffer index. </p> <p>If the swap chain's swap effect is <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong>, this method can only access the first buffer; for this situation, set the index to zero.</p> <p>If the swap chain's swap effect is either <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the <strong>{{IDXGIResource::GetUsage}}</strong> method for such buffers, they have the <strong>{{DXGI_USAGE_READ_ONLY}}</strong> flag set.</p> </dd> + + + <dd> <p>The type of interface used to manipulate the buffer.</p> </dd> + + + <dd> <p>A reference to a back-buffer interface.</p> </dd> + + + + + <p>Sets the display state to windowed or full screen.</p> + <p>{{DXGI}} may change the display state of a swap chain in response to end user or system requests.</p><p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>SetFullscreenState</strong>; that is, do not set the <strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.</p> + <p>This methods returns: </p><ul> <li>{{S_OK}} if the action succeeded and the swap chain was placed in the requested state.</li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance: <ul> <li>The application is running over Terminal Server.</li> <li>The output window is occluded.</li> <li>The output window does not have keyboard focus.</li> <li>Another application is already in full-screen mode.</li> </ul> <p>When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.</p> </li> <li>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}} is returned if a fullscreen/windowed mode transition is occurring when this {{API}} is called.</li> <li>Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.</li> </ul> + + + <dd> <p>A Boolean value that specifies whether to set the display state to windowed or full screen. <strong>{{TRUE}}</strong> for full screen, and <strong>{{FALSE}}</strong> for windowed.</p> </dd> + + + <dd> <p>If you pass <strong>{{TRUE}}</strong> to the <em>Fullscreen</em> parameter to set the display state to full screen, you can optionally set this parameter to a reference to an <strong>{{IDXGIOutput}}</strong> interface for the output target that contains the swap chain. If you set this parameter to <strong>{{NULL}}</strong>, {{DXGI}} will choose the output based on the swap-chain's device and the output window's placement. If you pass <strong>{{FALSE}}</strong> to <em>Fullscreen</em>, you must set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Get the state associated with full-screen mode.</p> + <p>When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a boolean whose value is either: +</p> <ul> <li><strong>{{TRUE}}</strong> if the swap chain is in full-screen mode</li> <li><strong>{{FALSE}}</strong> if the swap chain is in windowed mode</li> </ul> </dd> + + + <dd> <p>A reference to the output target (see <strong>{{IDXGIOutput}}</strong>) when the mode is full screen; otherwise <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDesc</strong> anymore to get a description of the swap chain. Instead, use <strong>{{IDXGISwapChain1::GetDesc1}}</strong>.]</p><p>Get a description of the swap chain.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized. </p> + <p> You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for <strong>ResizeBuffers</strong> to succeed. </p><p> Direct references are held by the application after it calls <strong>AddRef</strong> on a resource. </p><p> Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on. </p><p> Before you call <strong>ResizeBuffers</strong>, ensure that the application releases all references (by calling the appropriate number of <strong>Release</strong> invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use <strong>{{ID3D11DeviceContext::ClearState}}</strong> to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling <strong>{{ID3D11DeviceContext::ClearState}}</strong>, then <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong>, then <strong>Release</strong> on the command list). After you call <strong>ResizeBuffers</strong>, you can re-query interfaces via <strong>{{IDXGISwapChain::GetBuffer}}</strong>. </p><p> For swap chains that you created with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, before you call <strong>ResizeBuffers</strong>, also call <strong>{{IDXGISurface1::ReleaseDC}}</strong> on the swap chain's back-buffer surface to ensure that you have no outstanding {{GDI}} device contexts ({{DCs}}) open. </p><p> We recommend that you call <strong>ResizeBuffers</strong> when a client window is resized (that is, when an application receives a {{WM_SIZE}} message). </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + + + <p>Resizes the output target.</p> + <p><strong>ResizeTarget</strong> resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call <strong>ResizeTarget</strong> to resize the target window (rather than a Microsoft Win32API such as <strong>SetWindowPos</strong>) without knowledge of the swap chain display mode.</p><p>If a Windows Store app calls <strong>ResizeTarget</strong>, it fails with {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}.</p><p>You cannot call <strong>ResizeTarget</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p><p>Apps must still call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> after they call <strong>ResizeTarget</strong> because only <strong>ResizeBuffers</strong> can change the back buffers. But, if those apps have implemented window resize processing to call <strong>ResizeBuffers</strong>, they don't need to explicitly call <strong>ResizeBuffers</strong> after they call <strong>ResizeTarget</strong> because the window resize processing will achieve what the app requires.</p> + <p>Returns a code that indicates success or failure. <strong>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}}</strong> is returned if a full-screen/windowed mode transition is occurring when this {{API}} is called. See {{DXGI_ERROR}} for additional {{DXGI}} error codes.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>ResizeTarget</strong> uses the existing format. We only recommend that you use <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> when the swap chain is in full-screen mode as this method is not thread safe.</p> </dd> + + + + + <p>Get the output (the display monitor) that contains the majority of the client area of the target window.</p> + <p>If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p><p>You cannot call <strong>GetContainingOutput</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the output interface (see <strong>{{IDXGIOutput}}</strong>).</p> </dd> + + + + + <p>Gets performance statistics about the last render frame.</p> + <p>You cannot use <strong>GetFrameStatistics</strong> for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.</p><p>You can only use <strong>GetFrameStatistics</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure for the frame statistics.</p> </dd> + + + + + <p>Gets the number of times that <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> has been called.</p> + <p>For info about presentation statistics for a frame, see <strong>{{DXGI_FRAME_STATISTICS}}</strong>.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p> An <strong>{{IDXGIFactory}}</strong> interface implements methods for generating {{DXGI}} objects (which handle full screen transitions). </p> + <p> Create a factory by calling <strong>CreateDXGIFactory</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice}} * pDXGIDevice = nullptr; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter = nullptr; +hr = pDXGIDevice-&gt;GetAdapter( &amp;pDXGIAdapter ); {{IDXGIFactory}} * pIDXGIFactory = nullptr; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory}}), (void **)&amp;pIDXGIFactory);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerates the adapters (video cards).</p> + <p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters</strong> next returns other adapters with outputs. <strong>EnumAdapters</strong> finally returns adapters without outputs. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Allows {{DXGI}} to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The combination of <em>WindowHandle</em> and <em>Flags</em> informs {{DXGI}} to stop monitoring window messages for the previously-associated window.</p><p>If the application switches to full-screen mode, {{DXGI}} will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.</p><p>Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a {{WM_SIZE}} message, the application should release any outstanding swap-chain back buffers, call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, {{DXGI}} will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to <strong>ResizeBuffers</strong> on {{WM_SIZE}} is always recommended, since {{WM_SIZE}} is always sent during a fullscreen transition.</p><p>While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but {{UI}} elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field {{WM_SIZING}}, then check against <strong>{{IDXGIOutput::FindClosestMatchingMode}}</strong>. If a matching mode is found, allow the resize. (The {{IDXGIOutput}} can be retrieved from <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)</p><p>Applications that want to handle mode changes or Alt+Enter themselves should call <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swap chain creation. The <em>WindowHandle</em> argument, if non-<strong>{{NULL}}</strong>, specifies that the application message queues will not be handled by the {{DXGI}} runtime for all swap chains of a particular target <strong>{{HWND}}</strong>. Calling <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swapchain creation ensures that {{DXGI}} will not interfere with application's handling of window mode changes or Alt+Enter.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is invalid, or {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>The handle of the window that is to be monitored. This parameter can be <strong>{{NULL}}</strong>; but only if the flags are also 0. </p> </dd> + + + <dd> <p>One or more of the following values: +</p> <ul> <li>{{DXGI_MWA_NO_WINDOW_CHANGES}} - Prevent {{DXGI}} from monitoring an applications message queue; this makes {{DXGI}} unable to respond to mode changes.</li> <li>{{DXGI_MWA_NO_ALT_ENTER}} - Prevent {{DXGI}} from responding to an alt-enter sequence.</li> <li>{{DXGI_MWA_NO_PRINT_SCREEN}} - Prevent {{DXGI}} from responding to a print-screen key.</li> </ul> </dd> + + + + + <p>Get the window through which the user controls the transition to and from full screen.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.? + <p>Returns a code that indicates success or failure. <strong>{{S_OK}}</strong> indicates success, {{DXGI_ERROR_INVALID_CALL}} indicates <em>pWindowHandle</em> was passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a window handle.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>CreateSwapChain</strong> anymore to create a swap chain. Instead, use <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, or <strong>CreateSwapChainForComposition</strong> depending on how you want to create the swap chain.]</p><p>Creates a swap chain.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and {{DXGI_STATUS_OCCLUDED}} will be returned.</p><p>If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.</p><p>Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:</p><ul> <li>Create a windowed swap chain and then set it full-screen using <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>.</li> <li>Save a reference to the swap chain immediately after creation, and use it to get the output window size during a {{WM_SIZE}} event. Then resize the swap chain buffers (with <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>) during the transition from windowed to full-screen.</li> </ul><p>If the swap chain is in full-screen mode, before you release it you must use <strong>SetFullscreenState</strong> to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of {{DXGI}} Overview.</p><p>After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to <strong>{{IDXGISwapChain::Present}}</strong>. To work around this issue, we recommend that you execute the following code right after you call <strong>CreateSwapChain</strong> to create a full-screen swap chain (<strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> set to <strong>{{FALSE}}</strong>). +</p><pre> // Detect if newly created full-screen swap chain isn't actually full screen. +{{IDXGIOutput}}* pTarget; {{BOOL}} bFullscreen; +if ({{SUCCEEDED}}(pSwapChain-&gt;GetFullscreenState(&amp;bFullscreen, &amp;pTarget))) +{ pTarget-&gt;Release(); +} +else bFullscreen = {{FALSE}}; +// If not full screen, enable full screen again. +if (!bFullscreen) +{ ShowWindow(hWnd, {{SW_MINIMIZE}}); ShowWindow(hWnd, {{SW_RESTORE}}); pSwapChain-&gt;SetFullscreenState({{TRUE}}, {{NULL}}); +} +</pre><p>You can specify <strong>{{DXGI_SWAP_EFFECT}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> values in the swap-chain description that <em>pDesc</em> points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 {{APIs}}.</p><p>However, to use stereo presentation and to change resize behavior for the flip model, applications must use the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>, {{DXGI_STATUS_OCCLUDED}} if you request full-screen mode and it is unavailable, or {{E_OUTOFMEMORY}}. Other error codes defined by the type of device passed in may also be returned.</p> + + + + <p>Create an adapter interface that represents a software adapter.</p> + <p>A software adapter is a {{DLL}} that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.</p><p>Calling this method will increment the module's reference count by one. The reference count can be decremented by calling <strong>FreeLibrary</strong>.</p><p>The typical calling scenario is to call <strong>LoadLibrary</strong>, pass the handle to <strong>CreateSoftwareAdapter</strong>, then immediately call <strong>FreeLibrary</strong> on the {{DLL}} and forget the {{DLL}}'s <strong>{{HMODULE}}</strong>. Since the software adapter calls <strong>FreeLibrary</strong> when it is destroyed, the lifetime of the {{DLL}} will now be owned by the adapter, and the application is free of any further consideration of its lifetime.</p> + <p>A return code indicating success or failure.</p> + + + <dd> <p>Handle to the software adapter's dll. {{HMODULE}} can be obtained with <strong>GetModuleHandle</strong> or <strong>LoadLibrary</strong>.</p> </dd> + + + <dd> <p>Address of a reference to an adapter (see <strong>{{IDXGIAdapter}}</strong>).</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Returns the adapter for the specified device.</p> + <p>If the <strong>GetAdapter</strong> method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the {{DXGI_ERROR}} that indicates failure. If the <em>pAdapter</em> parameter is <strong>{{NULL}}</strong> this method returns {{E_INVALIDARG}}.</p> + + + <dd> <p>The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Returns a surface. This method is used internally and you should not call it directly in your application.</p> + <p>The <strong>CreateSurface</strong> method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.</p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when it calls <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>. +</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SURFACE_DESC}}</strong> structure that describes the surface.</p> </dd> + + + <dd> <p>The number of surfaces to create.</p> </dd> + + + <dd> <p>A {{DXGI_USAGE}} flag that specifies how the surface is expected to be used.</p> </dd> + + + <dd> <p>An optional reference to a <strong>{{DXGI_SHARED_RESOURCE}}</strong> structure that contains shared resource information for opening views of such resources.</p> </dd> + + + <dd> <p>The address of an <strong>{{IDXGISurface}}</strong> interface reference to the first created surface.</p> </dd> + + + + + <p>Gets the residency status of an array of resources.</p> + <p>The information returned by the <em>pResidencyStatus</em> argument array describes the residency status at the time that the <strong>QueryResourceResidency</strong> method was called. </p><strong>Note</strong>??The residency status will constantly change.?<p>If you call the <strong>QueryResourceResidency</strong> method during a device removed state, the <em>pResidencyStatus</em> argument will return the <strong>{{DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY}}</strong> flag.</p><strong>Note</strong>??This method should not be called every frame as it incurs a non-trivial amount of overhead.? + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_DEVICE_REMOVED}}, {{E_INVALIDARG}}, or {{E_POINTER}} (see Common {{HRESULT}} Values and WinError.h for more information).</p> + + + <dd> <p>An array of <strong>{{IDXGIResource}}</strong> interfaces.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RESIDENCY}}</strong> flags. Each element describes the residency status for corresponding element in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array and <em>pResidencyStatus</em> argument array.</p> </dd> + + + + + <p>Sets the {{GPU}} thread priority.</p> + <p>The values for the <em>Priority</em> parameter function as follows:</p><ul> <li>Positive values increase the likelihood that the {{GPU}} scheduler will grant {{GPU}} execution cycles to the device when rendering.</li> <li>Negative values lessen the likelihood that the device will receive {{GPU}} execution cycles when devices compete for them.</li> <li>The device is guaranteed to receive some {{GPU}} execution cycles at all settings.</li> </ul><p>To use the <strong>SetGPUThreadPriority</strong> method, you should have a comprehensive understanding of {{GPU}} scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the <strong>SetGPUThreadPriority</strong> method can impede rendering speed and result in a poor user experience.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Priority</em> parameter is invalid.</p> + + + <dd> <p>A value that specifies the required {{GPU}} thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>Gets the {{GPU}} thread priority.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_POINTER}} if the <em>pPriority</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a variable that receives a value that indicates the current {{GPU}} thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>The <strong>{{IDXGIFactory1}}</strong> interface implements methods for generating {{DXGI}} objects.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>To create a factory, call the <strong>CreateDXGIFactory1</strong> function.</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong> or <strong>{{IDXGIDevice1}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory1}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory1}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Enumerates both adapters (video cards) with or without outputs.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory1}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters1</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters1</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters1</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters1</strong> next returns other adapters with outputs. <strong>EnumAdapters1</strong> finally returns adapters without outputs.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter1}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Informs an application of the possible need to re-enumerate adapters.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p> + <p><strong>{{FALSE}}</strong>, if a new adapter is becoming available or the current adapter is going away. <strong>{{TRUE}}</strong>, no adapter changes.</p><p><strong>IsCurrent</strong> returns <strong>{{FALSE}}</strong> to inform the calling application to re-enumerate adapters.</p> + + + + <p> The <strong>{{IDXGIAdapter1}}</strong> interface represents a display sub-system (including one or more {{GPU}}'s, {{DACs}} and video memory). </p> + <p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p>A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.</p><p> To enumerate the display sub-systems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Gets a {{DXGI}} 1.1 description of an adapter (or video card).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>GetDesc1</strong> method to get a {{DXGI}} 1.1 description of an adapter. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter}}</strong> method.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC1}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice1}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p>This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>) and the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> method if desired. </p><p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p> The <strong>{{IDXGIDevice1}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice1}}</strong> interface. To retrieve the <strong>{{IDXGIDevice1}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.</p> </dd> + + + + + <p>Gets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.0 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the fullscreen display mode.</p><p>If the <strong>CreateDXGIFactory</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory::Release}}</strong> method to release the interface.</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>?<p>The <strong>CreateDXGIFactory</strong> function does not exist for Windows Store apps. Instead, Windows Store apps use the <strong>CreateDXGIFactory1</strong> function.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory}}</strong> object.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.1 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} 1.1 factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the full-screen display mode. </p><p>If the <strong>CreateDXGIFactory1</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory1}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory1::Release}}</strong> method to release the interface.</p><p>This entry point is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory1</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory1}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory1}}</strong> object.</p> </dd> + + + + + <p> Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type. </p> + + + + <dd> <p>The format is not known.</p> </dd> + + + <dd> <p>A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8</p> </dd> + + + <dd> <p>A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A three-component, 96-bit typeless format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8</p> </dd> + + + <dd> <p>A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit signed-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8</p> </dd> + + + <dd> <p>A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit typeless format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit typeless format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit typeless format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format for alpha only.</p> </dd> + + + <dd> <p>A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{UYVY}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{YUY2}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V-&gt;{{R8}}, +U-&gt;{{G8}}, +Y-&gt;{{B8}}, +and A-&gt;{{A8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R10}}, +Y-&gt;{{G10}}, +V-&gt;{{B10}}, +and A-&gt;{{A2}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R16}}, +Y-&gt;{{G16}}, +V-&gt;{{B16}}, +and A-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_P010}} is no different than {{DXGI_FORMAT_P016}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit per channel planar {{YUV}} 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any {{RECT}} that are used for this format are multiples of 2. This format differs from {{DXGI_FORMAT_NV12}} in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the {{CPU}} to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-{{NV12}} 4:2:0 layout (for example, {{YV12}}, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than {{NV12}} can be used when the application does not need the data to be in a standard layout. </p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. </p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt;{{G8}}, +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt;{{A8}}.</p> <p>A unique valid view format for this video resource format is {{DXGI_FORMAT_R8G8_B8G8_UNORM}}. With this view format, the width of the view appears to be twice what the {{DXGI_FORMAT_R8G8B8A8_UNORM}} or {{DXGI_FORMAT_R8G8B8A8_UINT}} view would be when hardware reconstructs {{RGBA}} automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt; +{{G8}}[0], +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt; +{{G8}}[1].</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_Y210}} is no different than {{DXGI_FORMAT_Y216}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common planar {{YUV}} 4:1:1 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the {{UV}} plane, and the remainder is padding. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format that is used for palletized {{RGB}} data when the processor processes {{ISDB}}-T data and for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format with 8 bits of alpha that is used for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A video format; an 8-bit version of a hybrid planar 4:2:2 format.</p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4 rendering format. </p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4:4:4 rendering format. </p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Flags used with <strong>ReportLiveObjects</strong> to specify the amount of info to report about an object's lifetime. </p> + <p> Use this enumeration with <strong>{{IDXGIDebug::ReportLiveObjects}}</strong>. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Values that specify categories of debug messages.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. When you create an info queue filter, you can use these values to allow or deny any categories of messages to pass through the storage and retrieval filters.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Unknown category.</p> </dd> + + + <dd> <p>Miscellaneous category.</p> </dd> + + + <dd> <p>Initialization category.</p> </dd> + + + <dd> <p>Cleanup category.</p> </dd> + + + <dd> <p>Compilation category.</p> </dd> + + + <dd> <p>State creation category.</p> </dd> + + + <dd> <p>State setting category.</p> </dd> + + + <dd> <p>State getting category.</p> </dd> + + + <dd> <p>Resource manipulation category.</p> </dd> + + + <dd> <p>Execution category.</p> </dd> + + + <dd> <p>Shader category.</p> </dd> + + + + + <p>Values that specify debug message severity levels for an information queue.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. Also, use this enumeration with <strong>{{IDXGIInfoQueue::AddApplicationMessage}}</strong>. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Defines some type of corruption that has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> </dd> + + + + + <p>Describes a debug message in the information queue.</p> + <p> <strong>{{IDXGIInfoQueue::GetMessage}}</strong> returns a reference to this structure.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of the message string at <strong>pDescription</strong>, in bytes.</p> </dd> + + + + + <p>Describes the types of messages to allow or deny to pass through a filter.</p> + <p>This structure is a member of the <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure.</p><p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + + + <dd> <p>The number of message categories to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong> enumeration values that describe the message categories to allow or deny. The array must have at least <strong>NumCategories</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong> enumeration values that describe the message severity levels to allow or deny. The array must have at least <strong>NumSeverities</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>An array of integers that represent the message {{IDs}} to allow or deny. The array must have at least <strong>NumIDs</strong> number of elements.</p> </dd> + + + + + <p>Describes a debug message filter, which contains lists of message types to allow and deny.</p> + <p>Use with an <strong>{{IDXGIInfoQueue}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to allow.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to deny.</p> </dd> + + + + + <p>This interface controls the debug information queue, and can only be used if the debug layer is turned on.</p> + <p>This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function.</p><p>For more info about the debug layer, see Debug Layer.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the maximum number of messages that can be added to the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the limit on the number of messages.</p> </dd> + + + <dd> <p>The maximum number of messages that can be added to the queue. ?1 means no limit.</p> </dd> + + + + + <p>Clears all messages from the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that clears the messages.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p>Gets the number of messages that can pass through a retrieval filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that can pass through a retrieval filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages currently stored in the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages currently stored in the message queue.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{IDXGIInfoQueue::GetMessageCountLimit}}</strong> and <strong>{{IDXGIInfoQueue::SetMessageCountLimit}}</strong>, respectively. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that were discarded.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue reaches the maximum limit, new messages coming in push old messages out.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the maximum number of messages that can be added to the queue. ?1 means no limit.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that a storage filter allowed to pass through.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages allowed by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were denied passage through a storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages denied by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Adds storage filters to the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the storage filter at the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetStorageFilter</strong> outputs the size of the storage filter.</p> </dd> + + + + + <p>Removes a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty storage filter.</p> </dd> + + + + + <p>Pushes a deny-all storage filter onto the storage-filter stack.</p> + <p>A deny-all storage filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + + + <p>Pushes a copy of the storage filter that is currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the storage filter.</p> </dd> + + + + + <p>Pushes a storage filter onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the storage-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the storage-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds retrieval filters to the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the retrieval filter at the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetRetrievalFilter</strong> outputs the size of the retrieval filter.</p> </dd> + + + + + <p>Removes a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty retrieval filter.</p> </dd> + + + + + <p>Pushes a deny-all retrieval filter onto the retrieval-filter stack.</p> + <p>A deny-all retrieval filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the deny-all retrieval filter.</p> </dd> + + + + + <p>Pushes a copy of the retrieval filter that is currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the retrieval filter.</p> </dd> + + + + + <p>Pushes a retrieval filter onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the retrieval-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the retrieval-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds a debug message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Adds a user-defined message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Sets a message category to break on when a message with that category passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnCategory</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnSeverity</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnID</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the break on a message category is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this category of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + + + <p>Determines whether the break on a message severity level is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this severity of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + + + <p>Determines whether the break on a message identifier is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this break on a message identifier is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + + + <p>Turns the debug output on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to turn the debug output on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the debug output is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether the debug output is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + + + <p>This interface controls debug settings, and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function. </p><p> For more info about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Reports info about the lifetime of an object or objects.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the object or objects to get info about. Use one of the <strong>{{DXGI_DEBUG_ID}}</strong> {{GUIDs}}.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_DEBUG_RLO_FLAGS}}</strong>-typed value that specifies the amount of info to report.</p> </dd> + + + + + <p>Controls debug settings for Microsoft DirectX Graphics Infrastructure ({{DXGI}}). You can use the <strong>{{IDXGIDebug1}}</strong> interface in Windows Store apps. </p> + <p>Call the <strong>{{DXGIGetDebugInterface1}}</strong> function to obtain the <strong>{{IDXGIDebug1}}</strong> interface.</p><p>The <strong>{{IDXGIDebug1}}</strong> interface can be used only if the debug layer is turned on. For more info, see Debug Layer.</p> + + + + + + + + + + + + + <p>Retrieves a debugging interface.</p> + <p> <strong>{{IDXGIDebug}}</strong> and <strong>{{IDXGIInfoQueue}}</strong> are debugging interfaces.</p><p>To access <strong>{{DXGIGetDebugInterface}}</strong>, call the <strong>GetModuleHandle</strong> function to get Dxgidebug.dll and the <strong>GetProcAddress</strong> function to get the address of <strong>{{DXGIGetDebugInterface}}</strong>.</p><p><strong>Windows?8.1:??</strong>Starting in Windows?8.1, Windows Store apps call the <strong>{{DXGIGetDebugInterface1}}</strong> function to get an <strong>{{IDXGIDebug1}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Flags indicating the method the raster uses to create an image on a surface.</p> + <p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Scanline order is unspecified.</p> </dd> + + + <dd> <p>The image is created from the first scanline to the last without skipping any.</p> </dd> + + + <dd> <p>The image is created beginning with the upper field.</p> </dd> + + + <dd> <p>The image is created beginning with the lower field.</p> </dd> + + + + + <p>Flags indicating how an image is stretched to fit a given monitor's resolution.</p> + <p>Selecting the {{CENTERED}} or {{STRETCHED}} modes can result in a mode change even if you specify the native resolution of the display in the {{DXGI_MODE_DESC}}. If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via {{ALT}}+{{ENTER}} or <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>), you should use {{UNSPECIFIED}}.</p><p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Unspecified scaling.</p> </dd> + + + <dd> <p>Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an {{LED}} display).</p> </dd> + + + <dd> <p>Specifies stretched scaling.</p> </dd> + + + + + <p>Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.</p> + + + <dd> <p>Unspecified rotation.</p> </dd> + + + <dd> <p>Specifies no rotation.</p> </dd> + + + <dd> <p>Specifies 90 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 180 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 270 degrees of rotation.</p> </dd> + + + + + <p>Represents an {{RGB}} color.</p> + <p>This structure is a member of the <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure.</p> + + + <dd> <p>A value representing the color of the red component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the green component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the blue component. The range of this value is between 0 and 1.</p> </dd> + + + + + <p>Describes color values.</p> + <p>You can set the members of this structure to values outside the range of 0 through 1 to implement some unusual effects. Values greater than 1 produce strong lights that tend to wash out a scene. Negative values produce dark lights that actually remove light from a scene. </p> + + + <dd> <p>Floating-point value that specifies the red component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the red component, while a value of 1.0 indicates that red is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the green component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the green component, while a value of 1.0 indicates that green is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the blue component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the blue component, while a value of 1.0 indicates that blue is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the alpha component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates fully transparent, while a value of 1.0 indicates fully opaque.</p> </dd> + + + + + <p>Controls the settings of a gamma curve.</p> + <p>The <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure is used by the <strong>{{IDXGIOutput::SetGammaControl}}</strong> method.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with scalar values that are applied to rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with offset values that are applied to the rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RGB}}</strong> structures that control the points of a gamma curve.</p> </dd> + + + + + <p>Controls the gamma capabilities of an adapter.</p> + <p>To get a list of the capabilities for controlling gamma correction, call <strong>{{IDXGIOutput::GetGammaControlCapabilities}}</strong>.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>True if scaling and offset operations are supported during gamma correction; otherwise, false.</p> </dd> + + + <dd> <p>A value describing the maximum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the minimum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the number of control points in the array.</p> </dd> + + + <dd> <p>An array of values describing control points; the maximum length of control points is 1025.</p> </dd> + + + + + <p>Describes a display mode.</p> + <p>This structure is used by the <strong>GetDisplayModeList</strong> and <strong>FindClosestMatchingMode</strong> methods.</p><p>The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.</p><ul> <li> <p>Feature level &gt;= 9.1</p> <ul> <li> <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong> </li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong></li> <li> <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> (except 10.x on Windows?Vista)</li> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> (except 10.x on Windows?Vista)</li> </ul> </li> <li> <p>Feature level &gt;= 10.0</p> <ul> <li> <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong> </li> <li><strong>{{DXGI_FORMAT_R10G10B10A2_UNORM}}</strong></li> </ul> </li> <li> <p>Feature level &gt;= 11.0</p> <ul> <li><strong>{{DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM}}</strong></li> </ul> </li> </ul><p>You can pass one of these format values to <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to determine if it is a valid format for displaying on screen. If <strong>{{ID3D11Device::CheckFormatSupport}}</strong> returns <strong>{{D3D11_FORMAT_SUPPORT_DISPLAY}}</strong> in the bit field to which the <em>pFormatSupport</em> parameter points, the format is valid for displaying on screen.</p><p>Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>), you must set the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC}}</strong> to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>.</p><p>Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> render target view from a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> swap chain so they can use automatic color space conversion when they render the swap chain.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned width value.</p> </dd> + + + <dd> <p>A value describing the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned height value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure describing the refresh rate in hertz</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure describing the display format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type describing the scanline drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type describing the scaling mode.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{DC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{AC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} quantization table.</p> + + + <dd> <p>An array of bytes containing the elements of the quantization table.</p> </dd> + + + + + <p>Specifies color space types.</p> + <p>This enum is used within {{DXGI}} in the <strong>CheckColorSpaceSupport</strong>, <strong>SetColorSpace1</strong> and <strong>CheckOverlayColorSpaceSupport</strong> methods. It is also referenced in {{D3D11}} video methods such as <strong>{{ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1}}</strong>, and {{D2D}} methods such as <strong>{{ID2D1DeviceContext2::CreateImageSourceFromDxgi}}</strong>.</p><p>The following color parameters are defined:</p> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>1.0</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for {{ITU}}-R Recommendation {{BT}}.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> <tr><td>{{Transfer}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{JPG}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{MPEG2}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This definition is commonly used for H.264 and {{HEVC}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This definition may be used by {{HEVC}}, and is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <p>A custom color definition is used. </p> </dd> + + + + + <p>Represents a rational number.</p> + <p>This structure is a member of the <strong>{{DXGI_MODE_DESC}}</strong> structure.</p><p>The <strong>{{DXGI_RATIONAL}}</strong> structure operates under the following rules:</p><ul> <li>0/0 is legal and will be interpreted as 0/1.</li> <li>0/anything is interpreted as zero.</li> <li>If you are representing a whole number, the denominator should be 1.</li> </ul> + + + <dd> <p>An unsigned integer value representing the top of the rational number.</p> </dd> + + + <dd> <p>An unsigned integer value representing the bottom of the rational number.</p> </dd> + + + + + <p>Describes multi-sampling parameters for a resource.</p> + <p>This structure is a member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.</p><p>If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.</p><table> <tr><td> <p>Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:</p> <p>Direct3D 10.1 has defined two standard quality levels: <strong>{{D3D10_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D10_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D10_1}}.h.</p> <p>Direct3D 11 has defined two standard quality levels: <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D11}}.h.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of multisamples per pixel.</p> </dd> + + + <dd> <p>The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by <strong>{{ID3D10Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 10 or <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 11.</p> <p>For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.</p> </dd> + + + + + <p>Identifies the type of reference shape.</p> + + + <dd> <p>The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap ({{DIB}}) format {{AND}} mask that is followed by another 1 bpp {{DIB}} format {{XOR}} mask of the same size.</p> </dd> + + + <dd> <p>The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp {{ARGB}} {{DIB}} format.</p> </dd> + + + <dd> <p>The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp {{ARGB}} format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the {{RGB}} value should replace the screen pixel. When the mask value is 0xFF, an {{XOR}} operation is performed on the {{RGB}} value and the screen pixel; the result replaces the screen pixel.</p> </dd> + + + + + <p>Identifies the alpha value, transparency behavior, of a surface.</p> + <p>For more information about alpha mode, see <strong>{{D2D1_ALPHA_MODE}}</strong>.</p> + + + <dd> <p>Indicates that the transparency behavior is not specified.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.</p> </dd> + + + <dd> <p>Indicates to ignore the transparency behavior.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Identifies the importance of a resource?s content when you call the <strong>{{IDXGIDevice2::OfferResources}}</strong> method to offer the resource. </p> + <p>Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.</p> + + + + <p>Identifies resize behavior when the back-buffer size does not match the size of the target output.</p> + <p>The {{DXGI_SCALING_NONE}} value is supported only for flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value. You pass these values in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. </p><p>{{DXGI_SCALING_ASPECT_RATIO_STRETCH}} will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.</p><code>float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight &gt;= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast&lt;{{LONG}}&gt;(offsetX); rect.top = static_cast&lt;{{LONG}}&gt;(offsetY); rect.right = static_cast&lt;{{LONG}}&gt;(offsetX + scaledWidth); rect.bottom = static_cast&lt;{{LONG}}&gt;(offsetY + scaledHeight); rect.left = std::max&lt;{{LONG}}&gt;(0, rect.left); rect.top = std::max&lt;{{LONG}}&gt;(0, rect.top); rect.right = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputWidth), rect.right); rect.bottom = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputHeight), rect.bottom); +</code><p>Note that <em>outputWidth</em> and <em>outputHeight</em> are the pixel sizes of the presentation target size. In the case of <strong>CoreWindow</strong>, this requires converting the <em>logicalWidth</em> and <em>logicalHeight</em> values from {{DIPS}} to pixels using the window's {{DPI}} property.</p> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of {{DXGI}} when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the {{WS_EX_LAYOUTRTL}} style is associated with the <strong>{{HWND}}</strong> handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.</p> <p>This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to <strong>{{IDXGISwapChain1::SetBackgroundColor}}</strong>.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.</p> <p>This constant is supported on Windows Phone 8 and Windows 10. </p> <p>Note that with legacy Win32 window swapchains, this works the same as {{DXGI_SCALING_STRETCH}}. +</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current graphics rendering task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the <strong>GraphicsPreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p><p>The following figure shows granularity of graphics rendering tasks.</p> + + + <dd> <p>Indicates the preemption granularity as a {{DMA}} buffer.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics primitive. A primitive is a section in a {{DMA}} buffer and can be a group of triangles.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current compute task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the <strong>ComputePreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p> + + + <dd> <p>Indicates the preemption granularity as a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a dispatch (for example, a call to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method). A dispatch is a part of a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a compute instruction in a thread.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structure describes the movement of a rectangle.</p> + <p>This structure is used by <strong>GetFrameMoveRects</strong>.</p> + + + <dd> <p>The starting position of a rectangle.</p> </dd> + + + <dd> <p>The target region to which to move a rectangle.</p> </dd> + + + + + <p>The {{DXGI_OUTDUPL_DESC}} structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>This structure is used by <strong>GetDesc</strong>.</p> + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure describes the position of the hardware cursor.</p> + <p>The <strong>Position</strong> member is valid only if the <strong>Visible</strong> member?s value is set to <strong>{{TRUE}}</strong>.</p> + + + <dd> <p>The position of the hardware cursor relative to the top-left of the adapter output.</p> </dd> + + + <dd> <p>Specifies whether the hardware cursor is visible. <strong>{{TRUE}}</strong> if visible; otherwise, <strong>{{FALSE}}</strong>. If the hardware cursor is not visible, the calling application does not display the cursor in the client.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure describes information about the cursor shape.</p> + <p>An application draws the cursor shape with the top-left-hand corner drawn at the position that the <strong>Position</strong> member of the <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure specifies; the application does not use the hot spot to draw the cursor shape.</p><p>An application calls the <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to retrieve cursor shape information in a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure.</p> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_TYPE}}</strong>-typed value that specifies the type of cursor shape. </p> </dd> + + + <dd> <p>The width in pixels of the mouse cursor.</p> </dd> + + + <dd> <p>The height in scan lines of the mouse cursor.</p> </dd> + + + <dd> <p>The width in bytes of the mouse cursor.</p> </dd> + + + <dd> <p>The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure describes the current desktop image.</p> + <p>A non-zero <strong>LastMouseUpdateTime</strong> indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero <strong>LastMouseUpdateTime</strong>; however, the application must check the value of the <strong>PointerShapeBufferSize</strong> member to determine whether the shape was updated too.</p><p>If only the reference was updated (that is, the desktop image was not updated), the <strong>AccumulatedFrames</strong>, <strong>TotalMetadataBufferSize</strong>, and <strong>LastPresentTime</strong> members are set to zero.</p><p>An <strong>AccumulatedFrames</strong> value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the <strong>AccumulatedFrames</strong> value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.</p><p>A non-zero <strong>TotalMetadataBufferSize</strong> indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the <strong>{{IDXGIOutputDuplication::GetFrameDirtyRects}}</strong>, <strong>{{IDXGIOutputDuplication::GetFrameMoveRects}}</strong>, or <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to obtain information about each type of metadata.</p><strong>Note</strong>??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? + + + <dd> <p>The time stamp of the last update of the desktop image. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image.</p> </dd> + + + <dd> <p>The time stamp of the last update to the mouse. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the <strong>PointerShapeBufferSize</strong> member.</p> </dd> + + + <dd> <p>The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. <strong>{{TRUE}}</strong> if dirty regions were accumulated; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. <strong>{{TRUE}}</strong> if protected content was already blacked; otherwise, <strong>{{FALSE}}</strong>. The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure that describes the most recent mouse position if the <strong>LastMouseUpdateTime</strong> member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.</p> </dd> + + + <dd> <p>Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.</p> </dd> + + + <dd> <p>Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.</p> </dd> + + + + + <p>Describes a display mode and whether the display mode supports stereo.</p> + <p><strong>{{DXGI_MODE_DESC1}}</strong> is identical to <strong>{{DXGI_MODE_DESC}}</strong> except that <strong>{{DXGI_MODE_DESC1}}</strong> includes the <strong>Stereo</strong> member.</p><p>This structure is used by the <strong>GetDisplayModeList1</strong> and <strong>FindClosestMatchingMode1</strong> methods.</p> + + + <dd> <p>A value that describes the resolution width.</p> </dd> + + + <dd> <p>A value that describes the resolution height.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that describes the display format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong>-typed value that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCALING}}</strong>-typed value that describes the scaling mode.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, <strong>CreateSwapChainForComposition</strong>, <strong>CreateSwapChainForCompositionSurfaceHandle</strong>, and <strong>GetDesc1</strong> methods.</p><strong>Note</strong>??You cannot cast a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> to a <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and vice versa. An application must explicitly use the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the newer version of the swap-chain description structure.?<p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>For a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member), you must set the <strong>Format</strong> member to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>; you must set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that the <strong>SampleDesc</strong> member specifies to one and the <strong>Quality</strong> member of <strong>{{DXGI_SAMPLE_DESC}}</strong> to zero because multiple sample antialiasing ({{MSAA}}) is not supported; you must set the <strong>BufferCount</strong> member to from two to sixteen. For more info about flip-model swap chain, see {{DXGI}} Flip Model.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width value. You cannot specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A value that describes the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned height value. You cannot specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure that describes the display format.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_USAGE}}</strong>-typed value that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SCALING}}</strong>-typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SWAP_EFFECT}}</strong>-typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method because this method supports only flip presentation model.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_ALPHA_MODE}}</strong>-typed value that identifies the transparency behavior of the swap-chain back buffer.</p> </dd> + + + <dd> <p>A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior.</p> </dd> + + + + + <p>Describes full-screen mode for a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong> and <strong>GetFullscreenDesc</strong> methods.</p> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type that describes the scaling mode.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the swap chain is in windowed mode. <strong>{{TRUE}}</strong> if the swap chain is in windowed mode; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes information about present that helps the operating system optimize presentation.</p> + <p>This structure is used by the <strong>Present1</strong> method.</p><p>The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.</p><p>The following diagram and coordinates illustrate this example.</p><code> DirtyRectsCount = 2 +pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video +pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line +*pScrollRect = { 0, 0, 50, 70 } +*pScrollOffset = { 0, -10 } +</code><p>Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.</p><p>The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the <strong>pScrollRect</strong> member. +The arrow shows the scroll offset. The scroll offset is specified by the <strong>pScrollOffset</strong> member. +Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the <strong>DirtyRectsCount</strong> and <strong>pDirtyRects</strong> members.</p><p>The scroll rectangle and offset are not supported for the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.</p><p>The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see {{DXGI}} Flip Model.</p><p>For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.</p> + + + <dd> <p>The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.</p> </dd> + + + <dd> <p>A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to <strong>{{NULL}}</strong> if <strong>DirtyRectsCount</strong> is 0. An application must not update any pixel outside of the dirty rectangles.</p> </dd> + + + <dd> <p> A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.</p> <p>The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to <strong>{{NULL}}</strong> to indicate that no content is scrolled from the previous frame.</p> </dd> + + + <dd> <p>A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to <strong>{{NULL}}</strong> to indicate no offset.</p> </dd> + + + + + <p>Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure provides a {{DXGI}} 1.2 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_GRAPHICS_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_COMPUTE_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current compute task.</p> </dd> + + + + + <p> </p><p> The <strong>{{IDXGIDisplayControl}}</strong> interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable. </p><p> We recommend that you not use <strong>{{IDXGIDisplayControl}}</strong> to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the <strong>{{IDXGIFactory2::IsWindowedStereoEnabled}}</strong> method to determine whether to render in stereo; for your full-screen apps, call the <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong> method and then determine whether any of the returned display modes support rendering in stereo. </p> + <strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface is only used by the <strong>Display</strong> app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?<strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface does not exist for Windows Store apps.?<p> Call <strong>QueryInterface</strong> from a factory object (<strong>{{IDXGIFactory}}</strong>, <strong>{{IDXGIFactory1}}</strong> or <strong>{{IDXGIFactory2}}</strong>) to retrieve the <strong>{{IDXGIDisplayControl}}</strong> interface. The following code shows how. </p><pre>{{IDXGIDisplayControl}} * pDXGIDisplayControl; +hr = g_pDXGIFactory-&gt;QueryInterface(__uuidof({{IDXGIDisplayControl}}), (void **)&amp;pDXGIDisplayControl);</pre><p> The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls <strong>{{IDXGIDisplayControl::IsStereoEnabled}}</strong> to query for stereo configuration. Control applets can use the <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> method to register for notifications of all stereo configuration changes. </p><p><strong>Platform Update for Windows?7:??</strong> Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.</p> + <p>You pass a Boolean value to the <strong>{{IDXGIDisplayControl::SetStereoEnabled}}</strong> method to either enable or disable the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> + <p><strong>IsStereoEnabled</strong> returns {{TRUE}} when the operating system's stereoscopic 3D display behavior is enabled and {{FALSE}} when this behavior is disabled.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetStereoEnabled</strong> doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> </dd> + + + + + <p> The <strong>{{IDXGIOutputDuplication}}</strong> interface accesses and manipulates the duplicated desktop image. </p> + <p> A collaboration application can use <strong>{{IDXGIOutputDuplication}}</strong> to access the desktop image. <strong>{{IDXGIOutputDuplication}}</strong> is supported in Desktop Window Manager ({{DWM}}) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit {{GDI}} non-{{DWM}} desktop modes are not supported. </p><p> An application can use <strong>{{IDXGIOutputDuplication}}</strong> on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses <strong>{{IDXGIOutputDuplication}}</strong> to perform the following operations: </p><ol> <li>Acquire the next desktop image.</li> <li>Retrieve the information that describes the image.</li> <li> Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls <strong>{{IDXGISurface::Map}}</strong>. Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client. </li> <li>After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.</li> </ol><p>The following components of the operating system can generate the desktop image:</p><ul> <li> The {{DWM}} by composing the desktop image </li> <li>A full-screen DirectX or OpenGL application</li> <li>An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen</li> </ul><p> All current <strong>{{IDXGIOutputDuplication}}</strong> interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> interface. </p><p> Examples of situations in which <strong>{{IDXGIOutputDuplication}}</strong> becomes invalid are: </p><ul> <li>Desktop switch</li> <li>Mode change</li> <li> Switch from {{DWM}} on, {{DWM}} off, or other full-screen application </li> </ul><p> In these situations, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and must create a new <strong>{{IDXGIOutputDuplication}}</strong> interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the <strong>{{IDXGIOutput1::DuplicateOutput}}</strong> method fails. </p><p> While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data. </p><p> The desktop image is always in the <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> format. </p><p> The <strong>{{IDXGIOutputDuplication}}</strong> interface does not exist for Windows Store apps. </p> + + + + <p>Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.</p> + <p>After an application creates an <strong>{{IDXGIOutputDuplication}}</strong> interface, it calls <strong>GetDesc</strong> to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure that describes the duplicated output. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Indicates that the application is ready to process the next desktop image.</p> + <p>When <strong>AcquireNextFrame</strong> returns successfully, the calling application can access the desktop image that <strong>AcquireNextFrame</strong> returns in the variable at <em>ppDesktopResource</em>. +If the caller specifies a zero time-out interval in the <em>TimeoutInMilliseconds</em> parameter, <strong>AcquireNextFrame</strong> verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an <strong>{{INFINITE}}</strong> time-out interval in the <em>TimeoutInMilliseconds</em> parameter, the time-out interval never elapses.</p><strong>Note</strong>??You cannot cancel the wait that you specified in the <em>TimeoutInMilliseconds</em> parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-<strong>{{INFINITE}}</strong> time-out interval. After the time-out interval elapses, you can check for these other conditions and then call <strong>AcquireNextFrame</strong> again to wait for the next frame.?<p><strong>AcquireNextFrame</strong> acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that <strong>AcquireNextFrame</strong> acquires might have only the desktop image updated, only the reference shape or position updated, or both.</p> + <p><strong>AcquireNextFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully received the next desktop image.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_WAIT_TIMEOUT}} if the time-out interval elapsed before the next desktop frame was available.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>AcquireNextFrame</strong> without releasing the previous frame.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>AcquireNextFrame</strong> is incorrect; for example, if <em>pFrameInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.</p> <p>For more information about the time-out interval, see Remarks.</p> </dd> + + + <dd> <p>A reference to a memory location that receives the <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure that describes timing and presentation statistics for a frame.</p> </dd> + + + <dd> <p>A reference to a variable that receives the <strong>{{IDXGIResource}}</strong> interface of the surface that contains the desktop bitmap.</p> </dd> + + + + + <p>Gets information about dirty rectangles for the current desktop frame.</p> + <p><strong>GetFrameDirtyRects</strong> stores a size value in the variable at <em>pDirtyRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pDirtyRectsBuffer</em>:</p><ul> <li><strong>GetFrameDirtyRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameDirtyRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pDirtyRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>DirtyRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pDirtyRectsBufferSizeRequired</em> to determine the number of <strong>{{RECT}}</strong>s returned in the <em>pDirtyRectsBuffer</em> array.</p><p>The buffer contains the list of dirty <strong>{{RECT}}</strong>s for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move <strong>{{RECT}}</strong>s before it processes dirty <strong>{{RECT}}</strong>s.? + <p><strong>GetFrameDirtyRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about dirty rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameDirtyRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameDirtyRects</strong> is incorrect; for example, if <em>pDirtyRectsBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pDirtyRectsBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{RECT}}</strong> structures that identifies the dirty rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions in the buffer at <em>pDirtyRectsBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the moved rectangles for the current desktop frame.</p> + <p><strong>GetFrameMoveRects</strong> stores a size value in the variable at <em>pMoveRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pMoveRectBuffer</em>:</p><ul> <li><strong>GetFrameMoveRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameMoveRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pMoveRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>MoveRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pMoveRectsBufferSizeRequired</em> to determine the number of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures returned.</p><p>The buffer contains the list of move {{RECTs}} for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move {{RECTs}} before it processes dirty {{RECTs}}.? + <p><strong>GetFrameMoveRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about moved rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided is not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameMoveRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameMoveRects</strong> is incorrect; for example, if <em>pMoveRectBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pMoveRectBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures that identifies the moved rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions in the buffer at <em>pMoveRectBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the new reference shape for the current desktop frame.</p> + <p><strong>GetFramePointerShape</strong> stores a size value in the variable at <em>pPointerShapeBufferSizeRequired</em>. This value specifies the number of bytes that <em>pPointerShapeBufferSizeRequired</em> needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pPointerShapeBuffer</em>:</p><ul> <li><strong>GetFramePointerShape</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFramePointerShape</strong> supplies a bigger than necessary buffer. The size value returned at <em>pPointerShapeBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>PointerShapeBufferSize</em> parameter.</li> </ul><p>The <em>pPointerShapeInfo</em> parameter describes the new reference shape.</p> + <p><strong>GetFramePointerShape</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about the new reference shape.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFramePointerShape</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFramePointerShape</strong> is incorrect; for example, if <em>pPointerShapeInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pPointerShapeBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to a buffer to which <strong>GetFramePointerShape</strong> copies and returns pixel data for the new reference shape.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFramePointerShape</strong> needs to store the new reference shape pixel data in the buffer at <em>pPointerShapeBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure that receives the reference shape information.</p> </dd> + + + + + <p>Provides the {{CPU}} with efficient access to a desktop image if that desktop image is already in system memory.</p> + <p>You can successfully call <strong>MapDesktopSurface</strong> if the <strong>DesktopImageInSystemMemory</strong> member of the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure is set to <strong>{{TRUE}}</strong>. If <strong>DesktopImageInSystemMemory</strong> is <strong>{{FALSE}}</strong>, <strong>MapDesktopSurface</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Call <strong>{{IDXGIOutputDuplication::GetDesc}}</strong> to retrieve the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure.</p> + <p><strong>MapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the surface data.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already has an outstanding map on the desktop image. The application must call <strong>UnMapDesktopSurface</strong> before it calls <strong>MapDesktopSurface</strong> again. {{DXGI_ERROR_INVALID_CALL}} is also returned if the application did not own the desktop image when it called <strong>MapDesktopSurface</strong>.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the <strong>{{IDXGISurface::Map}}</strong> method.</li> <li>{{E_INVALIDARG}} if the <em>pLockedRect</em> parameter is incorrect; for example, if <em>pLockedRect</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_MAPPED_RECT}}</strong> structure that receives the surface data that the {{CPU}} needs to directly access the surface data. </p> </dd> + + + + + <p>Invalidates the reference to the desktop image that was retrieved by using <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</p> + <p><strong>UnMapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application did not map the desktop surface by calling <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Indicates that the application finished processing the frame.</p> + <p>The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.</p><p>For performance reasons, we recommend that you release the frame just before you call the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted {{GPU}} cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.</p> + <p><strong>ReleaseFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already released the frame.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>The <strong>{{IDXGISurface2}}</strong> interface extends the <strong>{{IDXGISurface1}}</strong> interface by adding support for subresource surfaces and getting a handle to a shared resource.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface2}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface2}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface2}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface2}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface2}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface2}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface2}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface2}}</strong>.</p><p>You can call the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method to create an <strong>{{IDXGISurface2}}</strong> interface that refers to one subresource of a stereo resource.</p> + + + + <p>Gets the parent resource and subresource index that support a subresource surface.</p> + <p>For subresource surface objects that the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method creates, <strong>GetResource</strong> simply returns the values that were used to create the subresource surface.</p><p>Current objects that implement <strong>{{IDXGISurface}}</strong> are either resources or views. <strong>GetResource</strong> for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{E_NOINTERFACE}} if the object does not implement the {{GUID}} that the <em>riid</em> parameter specifies.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the parent resource object for the subresource surface.</p> </dd> + + + <dd> <p>A reference to a variable that receives the index of the subresource surface.</p> </dd> + + + + + <p> An <strong>{{IDXGIResource1}}</strong> interface extends the <strong>{{IDXGIResource}}</strong> interface by adding support for creating a subresource surface object and for creating a handle to a shared resource. </p> + <p> To determine the type of memory a resource is currently located in, use <strong>{{IDXGIDevice::QueryResourceResidency}}</strong>. To share resources between processes, use <strong>{{ID3D11Device1::OpenSharedResource1}}</strong>. For information about how to share resources between multiple Windows graphics {{APIs}}, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics {{APIs}}. </p><p> You can retrieve the <strong>{{IDXGIResource1}}</strong> interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports <strong>{{ID3D10Resource}}</strong> or <strong>{{ID3D11Resource}}</strong> also supports <strong>{{IDXGIResource1}}</strong>. For example, the Direct3D 2D texture object that you create from <strong>{{ID3D11Device::CreateTexture2D}}</strong> supports <strong>{{IDXGIResource1}}</strong>. You can call <strong>QueryInterface</strong> on the 2D texture object (<strong>{{ID3D11Texture2D}}</strong>) to retrieve the <strong>{{IDXGIResource1}}</strong> interface. For example, to retrieve the <strong>{{IDXGIResource1}}</strong> interface from the 2D texture object, use the following code. </p><pre>{{IDXGIResource1}} * pDXGIResource; +hr = g_pd3dTexture2D-&gt;QueryInterface(__uuidof({{IDXGIResource1}}), (void **)&amp;pDXGIResource);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a subresource surface object.</p> + <p>Subresource surface objects implement the <strong>{{IDXGISurface2}}</strong> interface, which inherits from <strong>{{IDXGISurface1}}</strong> and indirectly <strong>{{IDXGISurface}}</strong>. Therefore, the {{GDI}}-interoperable methods of <strong>{{IDXGISurface1}}</strong> work if the original resource interface object was created with the {{GDI}}-interoperable flag (<strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong>).</p><p><strong>CreateSubresourceSurface</strong> creates a subresource surface that is based on the resource interface on which <strong>CreateSubresourceSurface</strong> is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.</p><p>You can use <strong>CreateSubresourceSurface</strong> to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if the index is out of range or if the subresource is not a valid surface.</li> <li>{{E_OUTOFMEMORY}} if insufficient memory is available to create the subresource surface object.</li> </ul><p>A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.</p> + + + <dd> <p>The index of the subresource surface object to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to a <strong>{{IDXGISurface2}}</strong> interface that represents the created subresource surface object at the position specified by the <em>index</em> parameter.</p> </dd> + + + + + <p>Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. </p> + <p><strong>CreateSharedHandle</strong> only returns the {{NT}} handle when you created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags). If you created the resource as shared and specified that it uses {{NT}} handles, you must use <strong>CreateSharedHandle</strong> to get a handle for sharing. In this situation, you can't use the <strong>{{IDXGIResource::GetSharedHandle}}</strong> method because it will fail.</p><p>You can pass the handle that <strong>CreateSharedHandle</strong> returns in a call to the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to give a device access to a shared resource that you created on a different device.</p><p>Because the handle that <strong>CreateSharedHandle</strong> returns is an {{NT}} handle, you can use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on. You can call <strong>CreateSharedHandle</strong> only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call <strong>DuplicateHandle</strong>. When you no longer need the shared resource handle, call <strong>CloseHandle</strong> to close the handle, in order to avoid memory leaks.</p><p>If you pass a name for the resource to <em>lpName</em> when you call <strong>CreateSharedHandle</strong> to share the resource, you can subsequently pass this name in a call to the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.</p><p>If you created the resource as shared and did not specify that it uses {{NT}} handles, you cannot use <strong>CreateSharedHandle</strong> to get a handle for sharing because <strong>CreateSharedHandle</strong> will fail.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid.</li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource.</li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSharedHandle</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.</p> <p>Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor.</p> <p>The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.</p> </dd> + + + <dd> <p>The requested access rights to the resource. In addition to the generic access rights, {{DXGI}} defines the following values:</p> <ul> <li><strong>{{DXGI_SHARED_RESOURCE_READ}}</strong> ( 0x80000000L ) - specifies read access to the resource.</li> <li><strong>{{DXGI_SHARED_RESOURCE_WRITE}}</strong> ( 1 ) - specifies write access to the resource.</li> </ul> <p>You can combine these values by using a bitwise {{OR}} operation.</p> </dd> + + + <dd> <p>The name of the resource to share. The name is limited to {{MAX_PATH}} characters. Name comparison is case sensitive. You will need the resource name if you call the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to access the shared resource by name. If you instead call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to access the shared resource by handle, set this parameter to <strong>{{NULL}}</strong>.</p> <p>If <em>lpName</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace.</p> <p>The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see +Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.</p> <p>The object can be created in a private namespace. For more information, see Object Namespaces.</p> </dd> + + + <dd> <p>A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice2}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes methods to block {{CPU}} processing until the {{GPU}} completes processing, and to offer resources to the operating system. </p> + <p> The <strong>{{IDXGIDevice2}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice2}}</strong> interface. To retrieve the <strong>{{IDXGIDevice2}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>{{IDXGIDevice2::ReclaimResource}}</strong> method to reclaim the resource. You cannot call <strong>OfferResources</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><strong>Note</strong>??The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.?<p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>OfferResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>OfferResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully offered</li> <li>{{E_INVALIDARG}} if a resource in the array or the priority is invalid</li> </ul> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice2::OfferResources}}</strong>.</p> + <p>After you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer one or more resources, you must call <strong>ReclaimResources</strong> before you can use those resources again. You must check the values in the array at <em>pDiscarded</em> to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.</p><p>To reclaim shared resources, call <strong>ReclaimResources</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources</strong> only while you hold the mutex.</p><p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>ReclaimResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully reclaimed</li> <li>{{E_INVALIDARG}} if the resources are invalid</li> </ul> + + + + <p>Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.</p> + <p><strong>EnqueueSetEvent</strong> calls the <strong>SetEvent</strong> function on the event object after all previously submitted rendering commands complete or the device is removed.</p><p>After an application calls <strong>EnqueueSetEvent</strong>, it can immediately call the <strong>WaitForSingleObject</strong> function to put itself to sleep until rendering commands complete.</p><p>You cannot use <strong>EnqueueSetEvent</strong> to determine work completion that is associated with presentation (<strong>{{IDXGISwapChain::Present}}</strong>); instead, we recommend that you use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values:</p><ul> <li><strong>{{E_OUTOFMEMORY}}</strong> if insufficient memory is available to complete the operation.</li> <li><strong>{{E_INVALIDARG}}</strong> if the parameter was validated and determined to be incorrect.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>EnqueueSetEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.</p> <p>The handle must have the {{EVENT_MODIFY_STATE}} access right. For more information about access rights, see Synchronization Object Security and Access Rights.</p> </dd> + + + + + <p>Provides presentation capabilities that are enhanced from <strong>{{IDXGISwapChain}}</strong>. These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p><p><strong>{{IDXGISwapChain1}}</strong> provides the <strong>IsTemporaryMonoSupported</strong> method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. +</p><strong>Note</strong>??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original (<strong>{{IDXGISwapChain}}</strong>) and new (<strong>{{IDXGISwapChain1}}</strong>) swap chain interfaces generally have the same behavior. For information about how <strong>{{IDXGISwapChain}}</strong> methods are translated into <strong>{{IDXGISwapChain1}}</strong> methods, see the descriptions of the <strong>{{IDXGISwapChain1}}</strong> methods.? + + + + <p>Gets a description of the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure that describes the swap chain.</p> </dd> + + + + + <p>Gets a description of a full-screen swap chain.</p> + <p>The semantics of <strong>GetFullscreenDesc</strong> are identical to that of the <strong>{{IDXGISwapchain::GetDesc}}</strong> method for <strong>{{HWND}}</strong>-based swap chains.</p> + <p><strong>GetFullscreenDesc</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the description of the full-screen swap chain.</li> <li> {{DXGI_ERROR_INVALID_CALL}} for non-<strong>{{HWND}}</strong> swap chains or if <em>pDesc</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structure that describes the full-screen swap chain.</p> </dd> + + + + + <p>Retrieves the underlying <strong>{{HWND}}</strong> for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain that is associated with an <strong>{{HWND}}</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p>If <em>pHwnd</em> receives <strong>{{NULL}}</strong> (that is, the swap chain is not <strong>{{HWND}}</strong>-based), <strong>GetHwnd</strong> returns {{DXGI_ERROR_INVALID_CALL}}.</p> + + + + <p>Retrieves the underlying <strong>CoreWindow</strong> object for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong> method to create a swap chain that is associated with an <strong>CoreWindow</strong> object.</p> + <p><strong>GetCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the underlying <strong>CoreWindow</strong> object.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>ppUnk</em> is <strong>{{NULL}}</strong>; that is, the swap chain is not associated with a <strong>CoreWindow</strong> object.</li> <li>Any <strong>{{HRESULT}}</strong> that a call to <strong>QueryInterface</strong> to query for an <strong>CoreWindow</strong> object might typically return.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Presents a frame on the display screen. </p> + <p>An app can use <strong>Present1</strong> to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager ({{DWM}}). The {{DWM}} can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to <strong>Present1</strong>, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p><p>For info about calling <strong>Present1</strong> when your app uses multiple threads, see Multithread Considerations and Multithreading and {{DXGI}}.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_REMOVED}} , {{DXGI_STATUS_OCCLUDED}}, {{DXGI_ERROR_INVALID_CALL}}, or {{E_OUTOFMEMORY}}. </p> + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks.</li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput1}}</strong>), <strong>Present1</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_PRESENT_PARAMETERS}}</strong> structure that describes updated rectangles and scroll information of the frame to present.</p> </dd> + + + + + <p>Determines whether a swap chain supports ?temporary mono.?</p> + <p>Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the <strong>{{IDXGISwapChain1::Present1}}</strong> method with the <strong>{{DXGI_PRESENT_STEREO_TEMPORARY_MONO}}</strong> flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.</p> + <p>Indicates whether to use the swap chain in temporary mono mode. <strong>{{TRUE}}</strong> indicates that you can use temporary-mono mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsTemporaryMonoSupported</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Gets the output (the display monitor) to which you can restrict the contents of a present operation.</p> + <p>If the method succeeds, the runtime fills the buffer at <em>ppRestrictToOutput</em> with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p> + <p>Returns {{S_OK}} if the restrict-to output was successfully retrieved; otherwise, returns {{E_INVALIDARG}} if the reference is invalid.</p> + + + <dd> <p> A reference to a buffer that receives a reference to the <strong>{{IDXGIOutput}}</strong> interface for the restrict-to output. An application passes this reference to <strong>{{IDXGIOutput}}</strong> in a call to the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain.</p> </dd> + + + + + <p>Changes the background color of the swap chain.</p> + <p>The background color affects only swap chains that you create with <strong>{{DXGI_SCALING_NONE}}</strong> in windowed mode. You pass this value in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.</p><p>When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The <strong>{{DXGI_PRESENT}}</strong> flags that you pass to <strong>{{IDXGISwapChain1::Present1}}</strong> can help achieve the effect that you require. For example, if you call <strong>SetBackgroundColor</strong> and then call <strong>{{IDXGISwapChain1::Present1}}</strong> with the <em>Flags</em> parameter set to <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong>, you change only the background color without changing the displayed contents of the swap chain.</p><p>When you call the <strong>{{IDXGISwapChain1::Present1}}</strong> method to display contents of the swap chain, <strong>{{IDXGISwapChain1::Present1}}</strong> uses the <strong>{{DXGI_ALPHA_MODE}}</strong> value that is specified in the <strong>AlphaMode</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to determine how to handle the <strong>a</strong> member of the <strong>{{DXGI_RGBA}}</strong> structure, the alpha value of the background color, that achieves window transparency. For example, if <strong>AlphaMode</strong> is <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong> ignores the a member of <strong>{{DXGI_RGBA}}</strong>.</p><strong>Note</strong>??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard {{RGB}} data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? + <p><strong>SetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the background color.</li> <li>{{E_INVALIDARG}} if the <em>pColor</em> parameter is incorrect, for example, <em>pColor</em> is {{NULL}} or any of the floating-point values of the members of <strong>{{DXGI_RGBA}}</strong> to which <em>pColor</em> points are outside the range from 0.0 through 1.0.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetBackgroundColor</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that specifies the background color to set.</p> </dd> + + + + + <p>Retrieves the background color of the swap chain.</p> + <strong>Note</strong>??The background color that <strong>GetBackgroundColor</strong> retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The default value of the background color is black with full opacity: 0,0,0,1.? + <p><strong>GetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the background color.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the <em>pColor</em> parameter is invalid, for example, <em>pColor</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that receives the background color of the swap chain.</p> </dd> + + + + + <p>Sets the rotation of the back buffers for the swap chain.</p> + <p>You can only use <strong>SetRotation</strong> to rotate the back buffers for flip-model swap chains that you present in windowed mode. </p><p><strong>SetRotation</strong> isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, <strong>SetRotation</strong> doesn't fail, but you must ensure that you specify no rotation (<strong>{{DXGI_MODE_ROTATION_IDENTITY}}</strong>) for the swap chain. Otherwise, when you call <strong>{{IDXGISwapChain1::Present1}}</strong> or <strong>{{IDXGISwapChain::Present}}</strong> to present a frame, the presentation fails.</p> + <p><strong>SetRotation</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the rotation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call <strong>SetRotation</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies how to set the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p>Gets the rotation of the back buffers for the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a variable that receives a <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p> The <strong>{{IDXGIFactory2}}</strong> interface includes methods to create a newer version swap chain with more features than <strong>{{IDXGISwapChain}}</strong> and to monitor stereoscopic 3D capabilities. </p> + <p>To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 factory interface, pass <strong>{{IDXGIFactory2}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object that either <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> returns. +</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, or <strong>{{IDXGIDevice2}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory2}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Determines whether to use stereo mode.</p> + <p>We recommend that windowed applications call <strong>IsWindowedStereoEnabled</strong> before they attempt to use stereo. <strong>IsWindowedStereoEnabled</strong> returns <strong>{{TRUE}}</strong> if both of the following items are true:</p><ul> <li>All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model ({{WDDM}}) for Windows?8 ({{WDDM}} 1.2). However, the adapter does not necessarily have to be able to scan out stereo.</li> <li>The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager ({{DWM}}) performs stereo composition on at least one adapter output.</li> </ul><p>The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.</p><p>The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.</p> + <p>Indicates whether to use stereo mode. <strong>{{TRUE}}</strong> indicates that you can use stereo mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsWindowedStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with an <strong>{{HWND}}</strong> handle to the output window for the swap chain.</p> + <strong>Note</strong>??Do not use this method in Windows Store apps. Instead, use <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>hWnd</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain at a time with an <strong>{{HWND}}</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForHwnd</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong><strong>{{DXGI_SCALING_NONE}}</strong> is not supported on Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed and causes <strong>CreateSwapChainForHwnd</strong> to return {{DXGI_ERROR_INVALID_CALL}} when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with the <strong>CoreWindow</strong> object for the output window for the swap chain.</p> + <strong>Note</strong>??Use this method in Windows Store apps rather than <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>pWindow</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain (per layer) at a time with a <strong>CoreWindow</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Identifies the adapter on which a shared resource object was created.</p> + <p>You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call <strong>GetSharedResourceAdapterLuid</strong> before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> or <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method.</p> + <p><strong>GetSharedResourceAdapterLuid</strong> returns: </p><ul> <li>{{S_OK}} if it identified the adapter.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if <em>hResource</em> is invalid.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetSharedResourceAdapterLuid</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to a shared resource object. The <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method returns this handle.</p> </dd> + + + <dd> <p>A reference to a variable that receives a locally unique identifier (<strong>{{LUID}}</strong>) value that identifies the adapter. <strong>{{LUID}}</strong> is defined in Dxgi.h. An <strong>{{LUID}}</strong> is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an <strong>{{LUID}}</strong> is guaranteed only until the operating system is restarted.</p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of stereo status.</p> + <p><strong>RegisterStereoStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when stereo status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in stereo status by using event signaling.</p> + <p><strong>RegisterStereoStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of stereo status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when stereo status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterStereoStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of occlusion status.</p> + <p>Apps choose the Windows message that Windows sends when occlusion status changes.</p> + <p><strong>RegisterOcclusionStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is not a valid window handle or not the window handle that the current process owns.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when occlusion status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in occlusion status by using event signaling.</p> + <p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the same event handle, <strong>RegisterOcclusionStatusEvent</strong> fails with {{DXGI_ERROR_INVALID_CALL}}.</p><p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the different event handles, <strong>RegisterOcclusionStatusEvent</strong> properly registers the events.</p> + <p><strong>RegisterOcclusionStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if the method successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>hEvent</em> is not a valid handle or not an event handle. </li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of occlusion status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle.</p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when occlusion status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterOcclusionStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterOcclusionStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Creates a swap chain that you can use to send Direct3D content into the DirectComposition {{API}} or the <strong>Windows.{{UI}}.Xaml</strong> framework to compose in a window.</p> + <p>You can use composition swap chains with either DirectComposition?s <strong>{{IDCompositionVisual}}</strong> interface or {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class. For DirectComposition, you can call the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For {{XAML}}, the <strong>SwapChainBackgroundPanel</strong> class exposes a classic {{COM}} interface <strong>{{ISwapChainBackgroundPanelNative}}</strong>. You can use the <strong>{{ISwapChainBackgroundPanelNative::SetSwapChain}}</strong> method to bind to the {{XAML}} {{UI}} graph. For info about how to use composition swap chains with {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class, see DirectX and {{XAML}} interop.</p><p>The <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>, <strong>{{IDXGISwapChain::ResizeTarget}}</strong>, <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>, <strong>{{IDXGISwapChain1::GetHwnd}}</strong>, and <strong>{{IDXGISwapChain::GetCoreWindow}}</strong> methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForComposition</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForComposition</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p> The <strong>{{IDXGIAdapter2}}</strong> interface represents a display subsystem, which includes one or more {{GPUs}}, {{DACs}}, and video memory. </p> + <p> A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p> + + + + <p>Gets a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current task.</p> + <p>Use the <strong>GetDesc2</strong> method to get a {{DXGI}} 1.2 description of an adapter. To get a {{DXGI}} 1.1 description, use the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p><p>The Windows Display Driver Model ({{WDDM}}) scheduler can preempt the {{GPU}}'s execution of application tasks. The granularity at which the {{GPU}} can be preempted from performing its current task in the {{WDDM}} 1.1 or earlier driver model is a direct memory access ({{DMA}}) buffer for graphics tasks or a compute packet for compute tasks. The {{GPU}} can switch between tasks only after it completes the currently executing unit of work, a {{DMA}} buffer or a compute packet. </p><p>A {{DMA}} buffer is the largest independent unit of graphics work that the {{WDDM}} scheduler can submit to the {{GPU}}. This buffer contains a set of {{GPU}} instructions that the {{WDDM}} driver and {{GPU}} use. A compute packet is the largest independent unit of compute work that the {{WDDM}} scheduler can submit to the {{GPU}}. A compute packet contains dispatches (for example, calls to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method), which contain thread groups. The {{WDDM}} 1.2 or later driver model allows the {{GPU}} to be preempted at finer granularity levels than a {{DMA}} buffer or compute packet. You can use the <strong>GetDesc2</strong> method to retrieve the granularity levels for graphics and compute tasks.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, earlier versions of <strong>GetDesc2</strong> (<strong>GetDesc</strong> and <strong>GetDesc1</strong>) return zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of the adapter description structure and ?Software Adapter? for the description string in the <strong>Description</strong> member. <strong>GetDesc2</strong> returns the actual feature level 9 hardware values in these members.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput1}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To determine the outputs that are available from the adapter, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To determine the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. You can then call <strong>QueryInterface</strong> from any <strong>{{IDXGIOutput}}</strong> object to obtain an <strong>{{IDXGIOutput1}}</strong> object.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>Finds the display mode that most closely matches the requested display mode.</p> + <p>Direct3D devices require {{UNORM}} formats.</p><p><strong>FindClosestMatchingMode1</strong> finds the closest matching available display mode to the mode that you specify in <em>pModeToMatch</em>.</p><p>If you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure to which <em>pModeToMatch</em> points to specify a stereo mode as input, <strong>FindClosestMatchingMode1</strong> considers only stereo modes. <strong>FindClosestMatchingMode1</strong> considers only mono modes if <strong>Stereo</strong> is not set.</p><p><strong>FindClosestMatchingMode1</strong> resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:</p><ol> <li><strong>ScanlineOrdering</strong></li> <li><strong>Scaling</strong></li> <li><strong>Format</strong></li> <li><strong>Resolution</strong></li> <li><strong>RefreshRate</strong></li> </ol><p>When <strong>FindClosestMatchingMode1</strong> determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when <strong>FindClosestMatchingMode1</strong> matches <strong>Resolution</strong>, it already filtered the display mode list by a certain <strong>ScanlineOrdering</strong>, <strong>Scaling</strong>, and <strong>Format</strong>, while it ignores <strong>RefreshRate</strong>. This ordering doesn't define the absolute ordering for every usage scenario of <strong>FindClosestMatchingMode1</strong>, because the application can choose some values initially, which effectively changes the order of resolving members.</p><p><strong>FindClosestMatchingMode1</strong> matches members of the display mode one at a time, generally in a specified order.</p><p>If a member is unspecified, <strong>FindClosestMatchingMode1</strong> gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, <strong>FindClosestMatchingMode1</strong> uses the default desktop output to find values. If an application uses a fully unspecified display mode, <strong>FindClosestMatchingMode1</strong> typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, <strong>FindClosestMatchingMode1</strong> resolves unspecified members later than specified members.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that describes the display mode to match. Members of <strong>{{DXGI_MODE_DESC1}}</strong> can be unspecified, which indicates no preference for that member. A value of 0 for <strong>Width</strong> or <strong>Height</strong> indicates that the value is unspecified. If either <strong>Width</strong> or <strong>Height</strong> is 0, both must be 0. A numerator and denominator of 0 in <strong>RefreshRate</strong> indicate it is unspecified. Other members of <strong>{{DXGI_MODE_DESC1}}</strong> have enumeration values that indicate that the member is unspecified. If <em>pConcernedDevice</em> is <strong>{{NULL}}</strong>, the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC1}}</strong> cannot be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that receives a description of the display mode that most closely matches the display mode described at <em>pModeToMatch</em>.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. If this parameter is <strong>{{NULL}}</strong>, <strong>FindClosestMatchingMode1</strong> returns only modes whose format matches that of <em>pModeToMatch</em>; otherwise, <strong>FindClosestMatchingMode1</strong> returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:</p> <ul> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.0 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.0 Hardware </li> <li> Hardware Support for Direct3D 10Level9 Formats </li> <li> Hardware Support for Direct3D 10.1 Formats </li> <li> Hardware Support for Direct3D 10 Formats </li> </ul> </dd> + + + + + <p>Copies the display surface (front buffer) to a user-provided resource.</p> + <p><strong>GetDisplaySurfaceData1</strong> is similar to <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> except <strong>GetDisplaySurfaceData1</strong> takes an <strong>{{IDXGIResource}}</strong> and <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> takes an <strong>{{IDXGISurface}}</strong>.</p><p><strong>GetDisplaySurfaceData1</strong> returns an error if the input resource is not a 2D texture (represented by the <strong>{{ID3D11Texture2D}}</strong> interface) with an array size (<strong>ArraySize</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure) that is equal to the swap chain buffers.</p><p>The original <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> and the updated <strong>GetDisplaySurfaceData1</strong> behave exactly the same. <strong>GetDisplaySurfaceData1</strong> was required because textures with an array size equal to 2 (<strong>ArraySize</strong> = 2) do not implement <strong>{{IDXGISurface}}</strong>.</p><p> You can call <strong>GetDisplaySurfaceData1</strong> only when an output is in full-screen mode. If <strong>GetDisplaySurfaceData1</strong> succeeds, it fills the destination resource.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with {{CPU}} write permission (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Other surfaces can be created with {{CPU}} read-write permission (<strong>{{D3D11_CPU_ACCESS_READ}}</strong> | <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). <strong>GetDisplaySurfaceData1</strong> modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). <strong>GetDisplaySurfaceData1</strong> performs the stretch and shrink with point sampling. </p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a resource interface that represents the resource to which <strong>GetDisplaySurfaceData1</strong> copies the display surface.</p> </dd> + + + + + <p>Creates a desktop duplication interface from the <strong>{{IDXGIOutput1}}</strong> interface that represents an adapter output.</p> + <p>If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.</p><p>For <strong>DuplicateOutput</strong> to succeed, you must create <em>pDevice</em> from <strong>{{IDXGIFactory1}}</strong> or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>.</p><p>If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.</p><p>By default, only four processes can use a <strong>{{IDXGIOutputDuplication}}</strong> interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop. </p><p>For improved performance, consider using <strong>DuplicateOutput1</strong>.</p> + <p><strong>DuplicateOutput</strong> returns: </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported. If <strong>DuplicateOutput</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput</strong> again after such a notification occurs. For more information, refer to <strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong> and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>DuplicateOutput</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Provides the implementation of a shared fixed-size surface for Direct2D drawing.</p><strong>Note</strong>??If the surface is larger than the screen size, use <strong>{{IVirtualSurfaceImageSourceNative}}</strong> instead.? + <p>This interface provides the native implementation of the <strong>SurfaceImageSource</strong> Windows runtime type. To obtain a reference to <strong>{{ISurfaceImageSourceNative}}</strong>, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNative}}&gt; m_sisNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisNative) </pre> + + + + <p>Sets the {{DXGI}} device, created with {{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}, that will draw the surface. This method must be called from the {{UI}} thread.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface.</p> </dd> + + + + + <p>Opens the supplied {{DXGI}} surface for drawing.</p> + <p>If the app window that contains the <strong>SurfaceImageSource</strong> isn't active, like when it's suspended, calling the <strong>BeginDraw</strong> method returns an error.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface that will be drawn into.</p> </dd> + + + <dd> <p>Receives a reference to the surface for drawing. </p> </dd> + + + <dd> <p>Receives the point (x,y) offset of the surface that will be drawn into.</p> </dd> + + + + + <p>Closes the surface draw operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides an interface for the implementation of drawing behaviors when a <strong>VirtualSurfaceImageSource</strong> requests an update. </p> + <p>This interface is implemented by the developer to provide specific drawing behaviors for updates to a <strong>VirtualSurfaceImageSource</strong>. Classes that implement this interface are provided to the <strong>{{IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded}}</strong>, which calls the <strong>UpdatesNeeded</strong> method implementation whenever an update is requested.</p> + + + + <p>Invalidates a specific region of the shared surface for drawing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface to invalidate.</p> </dd> + + + + + <p>Gets the total number of regions of the surface that must be updated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of regions to update.</p> </dd> + + + + + <p>Gets the set of regions that must be updated on the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of regions that must be updated. You obtain this by calling <strong>GetUpdateRectCount</strong>.</p> </dd> + + + <dd> <p>Receives a list of regions that must be updated.</p> </dd> + + + + + <p>Gets the boundaries of the visible region of the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a rectangle that specifies the visible region of the shared surface.</p> </dd> + + + + + <p>Registers for the callback that will perform the drawing when an update to the shared surface is requested.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an implementation of <strong>{{IVirtualSurfaceUpdatesCallbackNative}}</strong>.</p> </dd> + + + + + <p>Resizes the surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated width of the surface.</p> </dd> + + + <dd> <p>The updated height of the surface.</p> </dd> + + + + + + + + <p>Sets the DirectX swap chain for <strong>SwapChainBackgroundPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables performing bulk operations across all <strong>SurfaceImageSource</strong> objects created in the same process.</p> + + + + <p>Flushes all current {{GPU}} work for all <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects associated with the given device.</p> + <p>The <strong>FlushAllSurfacesWithDevice</strong> method flushes current {{GPU}} work for all <strong>SurfaceImageSource</strong> objects that were created with <em>device</em>. This {{GPU}} work includes Direct2D rendering work and internal {{GPU}} work done by the framework associated with rendering. This is useful if an application has created multiple <strong>SurfaceImageSource</strong> objects and needs to flush the {{GPU}} work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the {{UI}} thread to improve performance.</p><p>You can call the <strong>FlushAllSurfacesWithDevice</strong> method from a non-{{UI}} thread. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides the implementation of a shared Microsoft DirectX surface which is displayed in a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides the native implementation of the <strong>SurfaceImageSource</strong> class. To get a reference to the <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call the <strong>QueryInterface</strong> method.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNativeWithD2D}}&gt; m_sisD2DNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisD2DNative) </pre><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time. </p><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface enables drawing to a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> from one or more background threads, which allows high-performance DirectX rendering off the {{UI}} thread.</p><p>Only call the <strong>SetDevice</strong>, <strong>BeginDraw</strong>, and <strong>EndDraw</strong> methods on <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, not on the <strong>{{ISurfaceImageSourceNative}}</strong> or <strong>{{IVirtualSurfaceImageSourceNative}}</strong> interfaces. </p><p>In order to support batching updates to multiple surfaces to improve performance, you can pass an <strong>{{ID2D1Device}}</strong> to the <strong>SetDevice</strong> method, instead of an <strong>{{ID3D11Device}}</strong>. The <strong>BeginDraw</strong> method can then optionally return a shared <strong>{{ID2D1DeviceContext}}</strong>, which the app uses to draw all content for that update.</p><p>To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support. </p><p>You can call the <strong>BeginDraw</strong>, <strong>SuspendDraw</strong>, and <strong>ResumeDraw</strong> methods from any background thread to enable high-performance multithreaded drawing.</p><p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the DirectX content with the current {{XAML}} {{UI}} thread frame. You can call <strong>BeginDraw</strong> on a background thread, call <strong>SuspendDraw</strong> when you're done drawing on the background thread, and call <strong>EndDraw</strong> on the {{UI}} thread.</p><p>Use <strong>SuspendDraw</strong> and <strong>ResumeDraw</strong> to suspend and resume drawing on any background or {{UI}} thread. </p><p>Handle the <strong>SurfaceContentsLost</strong> event to determine when you need to recreate content which may be lost if the system resets the {{GPU}}.</p> + + + + <p>Sets the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) or Direct2D device, created with <strong>{{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}</strong>, that will draw the surface.</p> + <p>This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface. You can pass an <strong>{{ID2D1Device}}</strong> to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread. </p> </dd> + + + + + <p>Initiates an update to the associated <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Closes the surface draw operation.</p> + <p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the Microsoft DirectX content with the current {{XAML}} {{UI}} thread frame. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Suspends the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Resume the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative}}&gt; m_swapChainNative; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative}}), (void **)&amp;m_swapChainNative); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative2}}&gt; m_swapChainNative2; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative2}}), (void **)&amp;m_swapChainNative2); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong> using a handle to the swap chain.</p> + <p>SetSwapChain({{HANDLE}} swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.</p><p>{{XAML}} supports setting a {{DXGI}} swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the <strong>{{ISwapChainPanelNative}}</strong> interface from a SwapChainPanel instance and calling <strong>SetSwapChain({{IDXGISwapChain}} *swapChain)</strong>. </p><p>This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a {{XAML}} SwapChainPanel in the foreground app.</p><pre> &lt;!-- {{XAML}} markup --&gt; +&lt;Page&gt; &lt;SwapChainPanel x:Name=?captureStreamDisplayPanel? /&gt; +&lt;/Page&gt; // Definitions +ComPtr&lt;{{IDXGISwapChain1}}&gt; m_swapChain; +{{HANDLE}} m_swapChainHandle; +ComPtr&lt;{{ID3D11Device}}&gt; m_d3dDevice; +ComPtr&lt;{{IDXGIAdapter}}&gt; dxgiAdapter; +ComPtr&lt;{{IDXGIFactory2}}&gt; dxgiFactory; +ComPtr&lt;{{IDXGIFactoryMedia}}&gt; dxgiFactoryMedia; +ComPtr&lt;{{IDXGIDevice}}&gt; dxgiDevice; +{{DXGI_SWAP_CHAIN_DESC1}} swapChainDesc = {0}; // Get {{DXGI}} factory (assume standard boilerplate has created {{D3D11Device}}) +m_d3dDevice.As(&amp;dxgiDevice); +dxgiDevice-&gt;GetAdapter(&amp;dxgiAdapter); +dxgiAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), &amp;dxgiFactory); // Create swap chain and get handle +{{DCompositionCreateSurfaceHandle}}({{GENERIC_ALL}}, nullptr, &amp;m_swapChainHandle); +dxgiFactory.As(&amp;dxgiFactoryMedia); +dxgiFactoryMedia-&gt;CreateSwapChainForCompositionSurfaceHandle( m_d3dDevice.Get(), m_swapChainHandle, &amp;swapChainDesc, nullptr, &amp;m_swapChain +); // Set swap chain to display in a SwapChainPanel +ComPtr&lt;{{ISwapChainPanelNative2}}&gt; panelNative; +reinterpret_cast&lt;{{IUnknown}}*&gt;(captureStreamDisplayPanel)-&gt;QueryInterface({{IID_PPV_ARGS}}(&amp;panelNative))); +panelNative-&gt;SetSwapChainHandle(m_swapChainHandle); </pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Options for swap-chain color space.</p> + <p>This enum is used by <strong>SetColorSpace</strong>.</p> + + + <dd> <p>Specifies nominal range {{YCbCr}}, which isn't an absolute color space, but a way of encoding {{RGB}} info.</p> </dd> + + + <dd> <p>Specifies {{BT}}.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.</p> </dd> + + + <dd> <p>Specifies xvYCC or extended-gamut {{YCC}} (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.</p> </dd> + + + + + <p> Indicates options for presenting frames to the swap chain. </p> + <p>This enum is used by the <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure.</p> + + + <dd> <p> Specifies that the presentation mode is a composition surface, meaning that the conversion from {{YUV}} to {{RGB}} is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform {{YUV}} to {{RGB}} conversion itself, reducing the frequency of {{YUV}} to {{RGB}} conversion to once per video frame. </p> </dd> + + + <dd> <p> Specifies that the presentation mode is an overlay surface, meaning that the {{YUV}} to {{RGB}} conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See <strong>{{IDXGIDecodeSwapChain}}</strong>. </p> </dd> + + + <dd> <p> No presentation is specified. </p> </dd> + + + <dd> <p>An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:</p> <ul> <li>Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. +</li> <li>Stop using hardware protection if possible.</li> </ul> <p>Note that simply re-creating the swap chain or the device will usually have no impact as the {{DWM}} will continue to run out of memory and will return the same failure. </p> </dd> + + + + + <p>Specifies overlay support to check for in a call to <strong>{{IDXGIOutput3::CheckOverlaySupport}}</strong>.</p> + + + + <p>Represents a 3x2 matrix. Used with <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> to indicate the scaling and translation transform for <strong>SwapChainPanel</strong> swap chains.</p> + + + + <p>Used with <strong>{{IDXGIFactoryMedia}}</strong>::<strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> to describe a decode swap chain.</p> + + + + <p>Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.</p> + <p>This structure is used with the <strong>GetFrameStatisticsMedia</strong> method.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + <dd> <p>A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See <strong>{{DXGI_FRAME_PRESENTATION_MODE}}</strong>.</p> </dd> + + + <dd> <p>If the system approves an app's custom present duration request, this field is set to the approved custom present duration.</p> <p>If the app's custom present duration request is not approved, this field is set to zero.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice3}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes a method to trim graphics memory usage by the {{DXGI}} device. </p> + <p> The <strong>{{IDXGIDevice3}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice3}}</strong> interface. To retrieve the <strong>{{IDXGIDevice3}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice3}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice3}}), (void **)&amp;pDXGIDevice);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Trims the graphics memory allocated by the <strong>{{IDXGIDevice3}}</strong> {{DXGI}} device on the app's behalf.</p><p>For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for {{PLM}} and in general lead to increased memory usage by the overall system.</p><p>Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including <strong>CoreWindow</strong> and {{XAML}} interop) must call <strong>Trim</strong> in response to the {{PLM}} suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.</p><p>Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the <strong>Trim</strong> call, therefore apps should only call <strong>Trim</strong> when going idle for a period of time (in response to {{PLM}} suspend, for example).</p><p>Apps should ensure that they call <strong>Trim</strong> as one of the last {{D3D}} operations done before going idle. Direct3D will normally defer the destruction of {{D3D}} objects. Calling <strong>Trim</strong>, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling <strong>Trim</strong> will cause the object to be destroyed and memory to be deallocated before the app suspends.</p><p>Similar to <strong>{{ID3D11DeviceContext::Flush}}</strong>, apps should call <strong>{{ID3D11DeviceContext::ClearState}}</strong> before calling <strong>Trim</strong>. <strong>ClearState</strong> clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.</p><p>It is also prudent to release references on middleware before calling <strong>Trim</strong>, as that middleware may also need to release references +to Direct3D objects.</p> + <p>This method does not return a value.</p> + + + + <p>Extends <strong>{{IDXGISwapChain1}}</strong> with methods to support swap back buffer scaling and lower-latency swap chains.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + + + + <p>Sets the source region to be used for the swap chain.</p><p>Use <strong>SetSourceSize</strong> to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> method. Prior to Windows?8.1, calling <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].</p> + <p>This method can return:</p><ul> <li>{{E_INVALIDARG}} if one or more parameters exceed the size of the back buffer.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the source region used for the swap chain.</p><p>Use <strong>GetSourceSize</strong> to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use <strong>SetSourceSize</strong> to set this portion of the swap chain. </p> + <p> This method can return error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + + <p>Sets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>This method is only valid for use on swap chains created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>. Otherwise, the result will be {{DXGI_ERROR_INVALID_CALL}}.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.</p> </dd> + + + + + <p>Gets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.</p> </dd> + + + + + <p>Returns a waitable handle that signals when the {{DXGI}} adapter has finished presenting a new frame.</p><p>Windows?8.1 introduces new {{APIs}} that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the {{DXGI}} swap chain with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong> flag set, then call <strong>GetFrameLatencyWaitableObject</strong> to retrieve the waitable handle. Use the waitable handle with <strong>WaitForSingleObjectEx</strong> to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.</p> + <p>A handle to the waitable object, or {{NULL}} if the swap chain was not created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>.</p> + + + + <p>Sets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>SetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{E_INVALIDARG}} if the <em>pMatrix</em> parameter is incorrect, for example, <em>pMatrix</em> is {{NULL}} or the matrix represented by <strong>{{DXGI_MATRIX_3X2_F}}</strong> includes components other than scale and translation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>GetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Queries an adapter output for multiplane overlay support. If this {{API}} returns ?{{TRUE}}?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this {{API}} returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER}}</strong> flag).</p> + <p>See <strong>CreateSwapChainForCoreWindow</strong> for info on creating a foreground swap chain.</p> + <p>{{TRUE}} if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns {{FALSE}}.</p> + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p>Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) object was created.</p> + <p>The <strong>GetCreationFlags</strong> method returns flags that were passed to the <strong>CreateDXGIFactory2</strong> function, or were implicitly constructed by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, <strong>{{D3D11CreateDevice}}</strong>, or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + <p>The creation flags.</p> + + + + <p> Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface. </p> + <p> Decode swap chains are intended for use primarily with {{YUV}} surface formats. When using decode buffers created with an {{RGB}} surface format, the <em>TargetRect</em> and <em>DestSize</em> must be set equal to the buffer dimensions. <em>SourceRect</em> cannot exceed the buffer dimensions. </p><p> In clone mode, the decode swap chain is only guaranteed to be shown on the primary output. </p><p> Decode swap chains cannot be used with dirty rects. </p> + + + + <p>Presents a frame on the output adapter. The frame is a subresource of the <strong>{{IDXGIResource}}</strong> object that was used to create the decode swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the following error codes:</p><ul> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_STATUS_OCCLUDED}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li><strong>{{E_OUTOFMEMORY}}</strong></li> </ul> + + + + <p>Sets the rectangle that defines the source region for the video processing blit operation.</p><p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the source region to set for the swap chain.</p> </dd> + + + + + <p>Sets the rectangle that defines the target region for the video processing blit operation.</p><p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the target region to set for the swap chain.</p> </dd> + + + + + <p>Sets the size of the destination surface to use for the video processing blit operation.</p><p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>The width of the destination size, in pixels.</p> </dd> + + + <dd> <p>The height of the destination size, in pixels.</p> </dd> + + + + + <p>Gets the source region that is used for the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source region for the swap chain.</p> </dd> + + + + + <p>Gets the rectangle that defines the target region for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the target region for the swap chain.</p> </dd> + + + + + <p>Gets the size of the destination surface to use for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a variable that receives the width in pixels.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height in pixels.</p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space to set for the swap chain.</p> </dd> + + + + + <p>Gets the color space used by the swap chain.</p> + <p>A combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space for the swap chain.</p> + + + + <p> Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video. </p> + <p> To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) media factory interface, pass <strong>{{IDXGIFactoryMedia}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object returned by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, or <strong>CreateDXGIFactory2</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, <strong>{{IDXGIDevice2}}</strong>, or <strong>{{IDXGIDevice3}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactoryMedia}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactoryMedia}}), (void **)&amp;pIDXGIFactory);</pre> + + + + <p>Creates a {{YUV}} swap chain for an existing DirectComposition surface handle.</p> + <p><strong>CreateSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul> + + + + <p> Creates a {{YUV}} swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an <strong>{{IDXGIResource}}</strong> buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the <strong>{{IDXGIResource}}</strong>. </p> + <p>The <strong>{{IDXGIResource}}</strong> provided via the <em>pYuvDecodeBuffers</em> parameter must point to at least one subresource, and all subresources must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag.</p> + <p><strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>. </li> <li> Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>. </li> </ul> + + + + <p>This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.</p><p> For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel. </p> + <p> Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the {{DXGI}} output adapter is attached to an external display then <strong>CheckPresentDurationSupport</strong> will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes. </p><p> Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds. </p> + + + + <p>Queries the system for a <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure that indicates whether a custom refresh rate is currently approved by the system.</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + + <p>Requests a custom presentation duration (custom refresh rate).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>The custom presentation duration, specified in hundreds of nanoseconds.</p> </dd> + + + + + <p>Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.</p> + <p>If the {{DXGI}} output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.</p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput3}}</strong> interface exposes a method to check for overlay support.</p> + + + + <p>Checks for overlay support.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlaySupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay support. </p> </dd> + + + + + <p>Creates a {{DXGI}} 1.3 factory that you can use to generate other {{DXGI}} objects.</p><p>In Windows?8, any {{DXGI}} factory created while {{DXGIDebug}}.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that {{DXGIDebug}}.dll be loaded instead. Use <strong>CreateDXGIFactory2</strong> and specify the {{DXGI_CREATE_FACTORY_DEBUG}} flag to request {{DXGIDebug}}.dll; the {{DLL}} will be loaded if it is present on the system.</p> + <p>This function accepts a flag indicating whether {{DXGIDebug}}.dll is loaded. The function otherwise behaves identically to <strong>CreateDXGIFactory1</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>Valid values include the <strong>{{DXGI_CREATE_FACTORY_DEBUG}} (0x01)</strong> flag, and zero.</p> <strong>Note</strong>??This flag will be set by the {{D3D}} runtime if:<ul> <li>The system creates an implicit factory during device creation.</li> <li>The {{D3D11_CREATE_DEVICE_DEBUG}} flag is specified during device creation, for example using <strong>{{D3D11CreateDevice}}</strong> (or the swapchain method, or the Direct3D 10 equivalents).</li> </ul> ? </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory2}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory2}}</strong> object.</p> </dd> + + + + + <p>Retrieves an interface that Windows Store apps use for debugging the Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>The <strong>{{DXGIGetDebugInterface1}}</strong> function returns <strong>{{E_NOINTERFACE}}</strong> on systems without the Windows Software Development Kit ({{SDK}}) installed, because it's a development-time aid.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Not used.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type, which can be the identifier for the <strong>{{IDXGIDebug}}</strong>, <strong>{{IDXGIDebug1}}</strong>, or <strong>{{IDXGIInfoQueue}}</strong> interfaces.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Specifies color space support for the swap chain.</p> + + + <dd> <p>Color space support is present.</p> </dd> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies support for overlay color space.</p> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies the memory segment group to use.</p> + <p>This enum is used by <strong>QueryVideoMemoryInfo</strong> and <strong>SetVideoMemoryReservation</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p> The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the {{GPU}}. Applications should target the local segment group as the target size for their working set.</p> </dd> + + + <dd> <p>The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.</p> </dd> + + + + + <p>Describes the current video memory budgeting parameters.</p> + <p>Use this structure with <strong>QueryVideoMemoryInfo</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p>Specifies the {{OS}}-provided video memory budget, in bytes, that the application should target. If <em>CurrentUsage</em> is greater than <em>Budget</em>, the application may incur stuttering or performance penalties due to background activity by the {{OS}} to provide other applications with a fair usage of video memory.</p> </dd> + + + <dd> <p> Specifies the application?s current video memory usage, in bytes.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call <strong>{{IDXGIAdapter3::SetVideoMemoryReservation}}</strong>.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that is reserved by the application. The {{OS}} uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement. </p> </dd> + + + + + <p>Extends <strong>{{IDXGISwapChain2}}</strong> with methods to support getting the index of the swap chain's current back buffer and support for color space.</p> + + + + <p>Gets the index of the swap chain's current back buffer.</p> + <p>Returns the index of the current back buffer.</p> + + + + <p>Checks the swap chain's support for color space.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check support for.</p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for color space support. </p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies the color space to set.</p> </dd> + + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a {{D3D12}} command queue as an input device. This should be called when the application window is resized. </p> + <p> This method is only valid to call when the swapchain was created using a {{D3D12}} command queue (<strong>{{ID3D12CommandQueue}}</strong>) as an input device. </p><p> When a swapchain is created on a multi-{{GPU}} adapter, the backbuffers are all created on node 1 and only a single command queue is supported. <strong>ResizeBuffers1</strong> enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering ({{AFR}}) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters. </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p><p> Also see the Remarks section in <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, all of which is relevant to <strong>ResizeBuffers1</strong>. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + <dd> <p> An array of {{UINTs}}, of total size <em>BufferCount</em>, where the value indicates which node the back buffer should be created on. Buffers created using <strong>ResizeBuffers1</strong> with a non-null <em>pCreationNodeMask</em> array are visible to all nodes. </p> </dd> + + + <dd> <p> An array of command queues (<strong>{{ID3D12CommandQueue}}</strong> instances), of total size <em>BufferCount</em>. Each queue provided must match the corresponding creation node mask specified in the <em>pCreationNodeMask</em> array. When <strong>Present()</strong> is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation. </p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput4}}</strong> interface exposes a method to check for overlay color space support.</p> + + + + <p>Checks for overlay color space support.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check overlay support for.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlayColorSpaceSupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay color space support. </p> </dd> + + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p> Outputs the <strong>{{IDXGIAdapter}}</strong> for the specified {{LUID}}. </p> + <p> For Direct3D 12, it's no longer possible to backtrack from a device to the <strong>{{IDXGIAdapter}}</strong> that was used to create it. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> enables an app to retrieve information about the adapter where a {{D3D12}} device was created. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> is designed to be paired with <strong>{{ID3D12Device::GetAdapterLuid}}</strong>. For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + + <p> Provides an adapter which can be provided to {{D3D12CreateDevice}} to use the {{WARP}} renderer. </p> + <p> For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory4}}</strong> object referenced by the <em>ppvAdapter</em> parameter. </p> </dd> + + + <dd> <p> The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be {{NULL}}. </p> </dd> + + + + + <p>This interface adds some memory residency methods, for budgeting and reserving physical memory.</p> + <p>For more details, refer to the Residency section of the {{D3D12}} documentation.</p> + + + + <p>Registers to receive notification of hardware content protection teardown events.</p> + <p>Call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong>() to check for the presence of the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN}}</strong> capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call <strong>{{ID3D11VideoContext1::CheckCryptoSessionStatus}}</strong> to determine the impact of the hardware teardown for a specific <strong>{{ID3D11CryptoSession}}</strong> interface. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the event object that the operating system sets when hardware content protection teardown occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters an event to stop it from receiving notification of hardware content protection teardown events.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p> This method informs the process of the current budget and process usage. </p> + <p> Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is queried. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Fills in a {{DXGI_QUERY_VIDEO_MEMORY_INFO}} structure with the current values. </p> </dd> + + + + + <p> This method sends the minimum required physical memory for an application, to the {{OS}}. </p> + <p> Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the {{OS}} quickly minimize the impact of large memory pressure situations. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is being set. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that sets the minimum required physical memory, in bytes. </p> </dd> + + + + + <p>This method establishes a correlation between a {{CPU}} synchronization object and the budget change event.</p> + <p>Instead of calling <strong>QueryVideoMemoryInfo</strong> regularly, applications can use {{CPU}} synchronization objects to efficiently wake threads when budget changes occur. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies a {{HANDLE}} for the event.</p> </dd> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>This method stops notifying a {{CPU}} synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.</p> + <p>An application may switch back to polling for the information regularly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + + + + <p>Specifies the header metadata type.</p> + <p>This enum is used by the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>Indicates there is no header metadata.</p> </dd> + + + <dd> <p>Indicates the header metadata is held by a <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p>Specifies flags for the <strong>OfferResources1</strong> method.</p> + + + + <p>Specifies result flags for the <strong>ReclaimResources1</strong> method.</p> + + + + <p>Specifies a range of hardware features, to be used when checking for feature support.</p> + <p>This enum is used by the <strong>CheckFeatureSupport</strong> method.</p> + + + <dd> <p>The display supports tearing, a requirement of variable refresh rate displays.</p> </dd> + + + + + <p>Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.</p> + <p>The X and Y coordinates of the parameters mean the xy chromacity coordinate in the {{CIE1931}} color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.</p><p>This structure is used in conjunction with the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000. </p> </dd> + + + <dd> <p>The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.</p> </dd> + + + <dd> <p>The maximum nit value (in units of 0.00001 nit) used anywhere in the content. </p> </dd> + + + <dd> <p>The per-frame average of the maximum nit values (in units of 0.00001 nit).</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the <strong>{{IDXGIOutputDuplication}}</strong> object.</p> + <p>This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original <strong>DuplicateOutput</strong> function always converts the fullscreen surface to a 32-bit {{BGRA}} format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit {{BGRA}} incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using <strong>DuplicateOutput1</strong> also allows receiving the full gamut of colors in cases where a high-color format (such as {{R10G10B10A2}}) is being presented. </p><p>The <em>pSupportedFormats</em> array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the <em>pSupportedFormats</em> array, {{DXGI}} will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong>. The list of supported formats should always contain {{DXGI_FORMAT_B8G8R8A8_UNORM}}, as this is the most common format for the desktop. +</p> + <p> </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput1</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li> <p>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported.</p> <p>If <strong>DuplicateOutput1</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput1</strong> again after such a notification occurs. For more information, see the desktop switch (<strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong>) and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </p> </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput1</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + <p>This method sets High Dynamic Range ({{HDR}}) and Wide Color Gamut ({{WCG}}) header metadata.</p> + <p>This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_HDR_METADATA_TYPE}}</strong> enum.</p> </dd> + + + <dd> <p>Specifies the size of <em>pMetaData</em>, in bytes.</p> </dd> + + + <dd> <p>Specifies a void reference that references the metadata, if it exists. Refer to the <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.</p> + <p><strong>OfferResources1</strong> (an extension of the original <strong>{{IDXGIDevice2::OfferResources}}</strong> {{API}}) enables {{D3D}} based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. +A de-committed allocation cannot be reused, so opting in to the new {{DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT}} flag means the new reclaim results must be properly handled. Refer to the flag descriptions in <strong>{{DXGI_RECLAIM_RESOURCE_RESULTS}}</strong> and the Example below.</p><p><strong>OfferResources1</strong> and <strong>ReclaimResources1</strong> may <em>not</em> be used interchangeably with <strong>OfferResources</strong> and <strong>ReclaimResources</strong>. +</p><p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources1</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources1</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>ReclaimResources1</strong> method to reclaim the resource. You cannot call <strong>OfferResources1</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources1</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources1</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><p>The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources1</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if a resource in the array, or the priority, is invalid.</p> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + <dd> <p>Specifies the <strong>{{DXGI_OFFER_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice4::OfferResources1}}</strong>.</p> + <p>After you call <strong>OfferResources1</strong> to offer one or more resources, you must call <strong>ReclaimResources1</strong> before you can use those resources again.</p><p>To reclaim shared resources, call <strong>ReclaimResources1</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources1</strong> only while you hold the mutex.</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the resources are invalid.</p> + + + + <p>This interface enables a single method to support variable refresh rate displays.</p> + + + + <p>Used to check for hardware feature support.</p> + <p>Refer to the description of <strong>{{DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of <strong>{{DXGI_FEATURE}}</strong> to query support for.</p> </dd> + + + <dd> <p>Specifies a reference to a buffer that will be filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size, in bytes, of <em>pFeatureSupportData</em>.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + + + + + + + <p> </p><p>Specifies the aspect-ratio mode.</p> + + + <dd> <p>Do not maintain the aspect ratio of the video. Stretch the video to fit the output rectangle.</p> </dd> + + + <dd> <p>Preserve the aspect ratio of the video by letterboxing or within the output rectangle.</p> </dd> + + + <dd> <strong>Note</strong>??Currently the {{EVR}} ignores this flag. ? <p>Correct the aspect ratio if the physical size of the display device does not match the display resolution. For example, if the native resolution of the monitor is 1600 by 1200 (4:3) but the display resolution is 1280 by 1024 (5:4), the monitor will display non-square pixels.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePicture}}</strong> flag.</p> </dd> + + + <dd> <p>Apply a non-linear horizontal stretch if the aspect ratio of the destination rectangle does not match the aspect ratio of the source rectangle.</p> <p>The non-linear stretch algorithm preserves the aspect ratio in the middle of the picture and stretches (or shrinks) the image progressively more toward the left and right. This mode is useful when viewing 4:3 content full-screen on a 16:9 display, instead of pillar-boxing. Non-linear vertical stretch is not supported, because the visual results are generally poor.</p> <p>This mode may cause performance degradation.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePixel}}</strong> and <strong>{{MFVideoARMode_PreservePicture}}</strong> flags.</p> </dd> + + + <dd> <p>Bitmask to validate flag values. This value is not a valid flag.</p> </dd> + + + + + <p> </p><p>Contains flags that define how the enhanced video renderer ({{EVR}}) displays the video.</p> + <p>To set these flags, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.</p><p>The flags named "{{MFVideoRenderPrefs_Allow}}..." cause the {{EVR}} to use lower-quality settings only when requested by the quality manager. (For more information, see <strong>{{IMFQualityAdvise}}</strong>.) The flags named "{{MFVideoRenderPrefs_Force}}..." cause the video mixer to use lower-quality settings regardless of the quality manager. </p> + + + <dd> <p> If this flag is set, the {{EVR}} does not draw the border color. By default, the {{EVR}} draws a border on areas of the destination rectangle that have no video. See <strong>{{IMFVideoDisplayControl::SetBorderColor}}</strong>. </p> </dd> + + + <dd> <p> If this flag is set, the {{EVR}} does not clip the video when the video window straddles two monitors. By default, if the video window straddles two monitors, the {{EVR}} clips the video to the monitor that contains the largest area of video. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to batch Direct3D <strong>Present</strong> calls. This optimization enables the system to enter to idle states more frequently, which can reduce power consumption. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to batch Direct3D <strong>Present</strong> calls.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. The {{EVR}} will then scale the result to the correct output size. The effective resolution will be lower if this setting is applied.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Prevent the {{EVR}} from repainting the video window after a stop command. By default, the {{EVR}} repaints the video window black after a stop command.</p> </dd> + + + <dd> <p> Bitmask to validate flag values. This value is not a valid flag. </p> </dd> + + + + + <p>Defines messages for an enhanced video renderer ({{EVR}}) presenter. This enumeration is used with the <strong>{{IMFVideoPresenter::ProcessMessage}}</strong> method.</p> + + + + <p>Contains flags that are used to configure how the enhanced video renderer ({{EVR}}) performs deinterlacing.</p> + <p>To set these flags, call the <strong>{{IMFVideoMixerControl2::SetMixingPrefs}}</strong> method.</p><p>These flags control some trade-offs between video quality and rendering speed. The constants named "{{MFVideoMixPrefs_Allow}}..." enable lower-quality settings, but only when the quality manager requests a drop in quality. The constants named "{{MFVideoMixPrefs_Force}}..." force the {{EVR}} to use lower-quality settings regardless of what the quality manager requests. (For more information about the quality manager, see <strong>{{IMFQualityAdvise}}</strong>.)</p><p>Currently two lower-quality modes are supported, as described in the following table. Either is preferable to dropping an entire frame.</p><p></p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td> <p>Half interface</p> </td><td> <p>The {{EVR}}'s video mixer skips the second field (relative to temporal order) of each interlaced frame. The video mixer still deinterlaces the first field, and this operation typically interpolates data from the second field. The overall frame rate is unaffected.</p> </td></tr> <tr><td> <p>Bob deinterlacing</p> </td><td> <p>The video mixer uses bob deinterlacing, even if the driver supports a higher-quality deinterlacing algorithm.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Force the {{EVR}} to skip the second field (in temporal order) of every interlaced frame. </p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to skip the second field (in temporal order) of every interlaced frame.</p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to use bob deinterlacing, even if the driver supports a higher-quality deinterlacing mode.</p> </dd> + + + <dd> <p>Force the {{EVR}} to use bob deinterlacing, even if the driver supports a higher-quality mode.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag. +</p> </dd> + + + + + <p>Contains flags that are used to configure the Microsoft DirectShow enhanced video renderer ({{EVR}}) filter.</p> + + + <dd> <p>Enables dynamic adjustments to video quality during playback.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag.</p> </dd> + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p> </p><p>Defines a normalized rectangle, which is used to specify sub-rectangles in a video rectangle. When a rectangle N is <em>normalized</em> relative to some other rectangle R, it means the following:</p><ul> <li> <p>The coordinate (0.0, 0.0) on N is mapped to the upper-left corner of R.</p> </li> <li> <p>The coordinate (1.0, 1.0) on N is mapped to the lower-right corner of R.</p> </li> </ul><p>Any coordinates of N that fall outside the range [0...1] are mapped to positions outside the rectangle R. A normalized rectangle can be used to specify a region within a video rectangle without knowing the resolution or even the aspect ratio of the video. For example, the upper-left quadrant is defined as {0.0, 0.0, 0.5, 0.5}.</p> + + + <dd> <p>X-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>X-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + + + <p>Maps a position on an input video stream to the corresponding position on an output video stream.</p><p>To obtain a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the renderer with the service {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}.</p> + + + + <p>Maps output image coordinates to input image coordinates. This method provides the reverse transformation for components that map coordinates on the input image to different coordinates on the output image. </p> + <p>In the following diagram, R(dest) is the destination rectangle for the video. You can obtain this rectangle by calling <strong>{{IMFVideoDisplayControl::GetVideoPosition}}</strong>. The rectangle {{R1}} is a substream within the video. The point P has pixel coordinates (x,y) relative to R(dest).</p><p></p><p>The position of P relative to R(dest) in <em>normalized</em> coordinates is calculated as follows:</p><code>float xn = float(x + 0.5) / widthDest; +float xy = float(y + 0.5) / heightDest; +</code><p>where <em>widthDest</em> and <em>heightDest</em> are the width and height of R(dest) in pixels.</p><p>To calculate the position of P relative to {{R1}}, call <strong>MapOutputCoordinateToInputStream</strong> as follows:</p><code>float x1 = 0, y1 = 0; +hr = pMap-&gt;MapOutputCoordinateToInputStream(xn, yn, 0, dwInputStreamIndex, &amp;x1, &amp;y1);</code><p>The values returned in <em>x1</em> and <em>y1</em> are normalized to the range [0...1]. To convert back to pixel coordinates, scale these values by the size of {{R1:}}</p><code>int scaledx = int(floor(x1 * widthR1)); +int scaledy = int(floor(xy * heightR1));</code><p>Note that <em>x1</em> and <em>y1</em> might fall outside the range [0...1] if P lies outside of {{R1}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> X-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Y-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Output stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Input stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Receives the mapped x-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Receives the mapped y-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + + + <p>Returns the device identifier supported by a video renderer component. This interface is implemented by mixers and presenters for the enhanced video renderer ({{EVR}}). If you replace either of these components, the mixer and presenter must report the same device identifier.</p> + + + + <p> </p><p>Returns the identifier of the video device supported by an {{EVR}} mixer or presenter.</p> + <p>If a mixer or presenter uses Direct3D 9, it must return the value {{IID_IDirect3DDevice9}} in <em>pDeviceID</em>. The {{EVR}}'s default mixer and presenter both return this value. If you write a custom mixer or presenter, it can return some other value. However, the mixer and presenter must use matching device identifiers.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device identifier. Generally, the value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) displays video.</p><p>The {{EVR}} presenter implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li>The {{EVR}} media sink. </li> <li>The DirectShow {{EVR}} filter. </li> <li>The {{EVR}} presenter. </li> </ul><p>If you implement a custom presenter for the {{EVR}}, the presenter can optionally expose this interface as a service.</p> + + + + <p> Gets the size and aspect ratio of the video, prior to any stretching by the video renderer. </p> + <p>If no media types have been set on any video streams, the method succeeds but all parameters are set to zero.</p><p>You can set <em>pszVideo</em> or <em>pszARVideo</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one of the parameters must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the native video rectangle. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the aspect ratio of the video. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the range of sizes that the enhanced video renderer ({{EVR}}) can display without significantly degrading performance or image quality. </p> + <p>You can set <em>pszMin</em> or <em>pszMax</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the maximum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the source and destination rectangles for the video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>One or more required parameters are <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the source rectangle.</p> </dd> + + + <dd> <p>Receives the current destination rectangle.</p> </dd> + + + + + <p> </p><p>Specifies how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> Queries how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the clipping window for the video. </p> + <p>There is no default clipping window. The application must set the clipping window.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a handle to the window where the enhanced video renderer ({{EVR}}) will draw the video.</p> </dd> + + + + + <p> </p><p>Repaints the current video frame. Call this method whenever the application receives a {{WM_PAINT}} message.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} cannot repaint the frame at this time. This error can occur while the {{EVR}} is switching between full-screen and windowed mode. The caller can safely ignore this error.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> Gets a copy of the current image being displayed by the video renderer. </p> + <p>This method can be called at any time. However, calling the method too frequently degrades the video playback performance.</p><p>This method retrieves a copy of the final composited image, which includes any substreams, alpha-blended bitmap, aspect ratio correction, background color, and so forth.</p><p>In windowed mode, the bitmap is the size of the destination rectangle specified in <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. In full-screen mode, the bitmap is the size of the display.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LICENSE_INCORRECT_RIGHTS}}</strong></dt> </dl> </td><td> <p>The content is protected and the license does not permit capturing the image.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{BITMAPINFOHEADER}}</strong> structure that receives a description of the bitmap. Set the <strong>biSize</strong> member of the structure to <code>sizeof({{BITMAPINFOHEADER}})</code> before calling the method.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains a packed Windows device-independent bitmap ({{DIB}}). The caller must free the memory for the bitmap by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the buffer returned in <em>pDib</em>, in bytes.</p> </dd> + + + <dd> <p>Receives the time stamp of the captured image.</p> </dd> + + + + + <p> </p><p>Sets the border color for the video.</p> + <p>By default, if the video window straddles two monitors, the enhanced video renderer ({{EVR}}) clips the video to one monitor and draws the border color on the remaining portion of the window. (To change the clipping behavior, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.)</p><p>The border color is not used for letterboxing. To change the letterbox color, call <strong>{{IMFVideoProcessor::SetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the border color as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> Gets the border color for the video. </p> + <p>The border color is used for areas where the enhanced video renderer ({{EVR}}) does not draw any video.</p><p>The border color is not used for letterboxing. To get the letterbox color, call <strong>{{IMFVideoProcessor::GetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the border color, as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> </p><p>Sets various preferences related to video rendering.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p> Gets various video rendering settings. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. ]</p><p> Sets or unsets full-screen rendering mode.</p><p>To implement full-screen playback, an application should simply resize the video window to cover the entire area of the monitor. Also set the window to be a topmost window, so that the application receives all mouse-click messages. For more information about topmost windows, see the documentation for the <strong>SetWindowPos</strong> function.</p> + <p> The default {{EVR}} presenter implements full-screen mode using Direct3D exclusive mode. </p><p> If you use this method to switch to full-screen mode, set the application window to be a topmost window and resize the window to cover the entire monitor. This ensures that the application window receives all mouse-click messages. Also set the keyboard focus to the application window. When you switch out of full-screen mode, restore the window's original size and position. </p><p> By default, the cursor is still visible in full-screen mode. To hide the cursor, call <strong>ShowCursor</strong>. </p><p>The transition to and from full-screen mode occurs asynchronously. To get the current mode, call <strong>{{IMFVideoDisplayControl::GetFullscreen}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Queries whether the enhanced video renderer ({{EVR}}) is currently in full-screen mode. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} is currently switching between full-screen and windowed mode.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the {{EVR}} is in full-screen mode. If <strong>{{FALSE}}</strong>, the {{EVR}} will display the video inside the application-provided clipping window.</p> </dd> + + + + + <p>Represents a video presenter. A <em>video presenter</em> is an object that receives video frames, typically from a video mixer, and presents them in some way, typically by rendering them to the display. The enhanced video renderer ({{EVR}}) provides a default video presenter, and applications can implement custom presenters.</p><p>The video presenter receives video frames as soon as they are available from upstream. The video presenter is responsible for presenting frames at the correct time and for synchronizing with the presentation clock.</p> + + + + <p> </p><p>Sends a message to the video presenter. Messages are used to signal the presenter that it must perform some action, or that some event has occurred.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the message as a member of the <strong>{{MFVP_MESSAGE_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Message parameter. The meaning of this parameter depends on the message type.</p> </dd> + + + + + <p> </p><p>Retrieves the presenter's media type.</p> + <p>This method returns the media type that the presenter sets for the mixer's output type. It describes the format of the composited image.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media type is not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables the presenter for the enhanced video renderer ({{EVR}}) to request a specific frame from the video mixer.</p><p>The sample objects created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function implement this interface. To retrieve a reference to this interface, call <strong>QueryInterface</strong> on the sample.</p> + + + + <p> </p><p>Called by the mixer to get the time and duration of the sample requested by the presenter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No time stamp was set for this sample. See <strong>{{IMFDesiredSample::Clear}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the desired sample time that should be mixed.</p> </dd> + + + <dd> <p>Receives the sample duration that should be mixed.</p> </dd> + + + + + <p> </p><p>Called by the presenter to set the time and duration of the sample that it requests from the mixer.</p> + <p>This value should be set prior to passing the buffer to the mixer for a Mix operation. The mixer sets the actual start and duration times on the sample before sending it back.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The time of the requested sample.</p> </dd> + + + <dd> <p>The duration of the requested sample.</p> </dd> + + + + + <p> </p><p>Clears the time stamps previously set by a call to <strong>{{IMFDesiredSample::SetDesiredSampleTimeAndDuration}}</strong>.</p> + <p>After this method is called, the <strong>{{IMFDesiredSample::GetDesiredSampleTimeAndDuration}}</strong> method returns {{MF_E_NOT_AVAILABLE}}.</p><p>This method also clears the time stamp and duration and removes all attributes from the sample.</p> + <p>This method does not return a value.</p> + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) mixes video substreams. Applications can use this interface to control video mixing during playback.</p><p>The {{EVR}} mixer implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier {{GUID}} is {{MR_VIDEO_MIXER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li> The {{EVR}} media sink. </li> <li> The DirectShow {{EVR}} filter. </li> <li> The {{EVR}} mixer. </li> </ul><p>If you implement a custom mixer for the {{EVR}}, the mixer can optionally expose this interface as a service.</p> + + + + <p> </p><p>Sets the z-order of a video stream.</p> + <p>The {{EVR}} draws the video streams in the order of their z-order values, starting with zero. The reference stream must be first in the z-order, and the remaining streams can be in any order.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value of <em>dwZ</em> is larger than the maximum z-order value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid z-order for this stream. For the reference stream, <em>dwZ</em> must be zero. For all other streams, <em>dwZ</em> must be greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Z-order value. The z-order of the reference stream must be zero. The maximum z-order value is the number of streams minus one.</p> </dd> + + + + + <p> </p><p>Retrieves the z-order of a video stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Receives the z-order value.</p> </dd> + + + + + <p> Sets the position of a video stream within the composition rectangle. </p> + <p> The mixer draws each video stream inside a bounding rectangle that is specified relative to the final video image. This bounding rectangle is given in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. </p><p> The coordinates of the bounding rectangle must fall within the range [0.0, 1.0]. Also, the X and Y coordinates of the upper-left corner cannot exceed the X and Y coordinates of the lower-right corner. In other words, the bounding rectangle must fit entirely within the composition rectangle and cannot be flipped vertically or horizontally. </p><p>The following diagram shows how the {{EVR}} mixes substreams.</p><p>The output rectangle for the stream is specified by calling <strong>SetStreamOutputRect</strong>. The source rectangle is specified by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. The mixer applies the output rectangle first, when it mixes the streams into a single bounding rectangle. This bounding rectangle is called <em>composition space</em>. Then the presenter applies the source rectangle to the composited image.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The coordinates of the bounding rectangle given in <em>pnrcOutput</em> are not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that defines the bounding rectangle for the video stream.</p> </dd> + + + + + <p> </p><p>Retrieves the position of a video stream within the composition rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the bounding rectangle, in normalized coordinates.</p> </dd> + + + + + <p>Controls preferences for video deinterlacing.</p><p> The default video mixer for the Enhanced Video Renderer ({{EVR}}) implements this interface.</p><p>To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> on any of the following objects, using the <strong>{{MR_VIDEO_MIXER_SERVICE}}</strong> service identifier:</p><ul> <li>The Media Session, if the topology contains an instance of the {{EVR}}.</li> <li>The {{EVR}} media sink.</li> <li>The DirectShow {{EVR}} filter.</li> <li>The {{EVR}} mixer.</li> </ul> + + + + <p>Sets the preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration. </p> </dd> + + + + + <p>Gets the current preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>Sets a new mixer or presenter for the Enhanced Video Renderer ({{EVR}}).</p><p>Both the {{EVR}} media sink and the DirectShow {{EVR}} filter implement this interface. To get a reference to the interface, call <strong>QueryInterface</strong> on the media sink or the filter. Do not use <strong>{{IMFGetService}}</strong> to get a reference to this interface.</p> + <p>The {{EVR}} activation object returned by the <strong>{{MFCreateVideoRendererActivate}}</strong> function does not expose this interface. Instead, the activation object supports attributes that specify a custom mixer or presenter. For more information, see Enhanced Video Renderer Attributes.</p> + + + + <p> </p><p>Sets a new mixer or presenter for the enhanced video renderer ({{EVR}}).</p> + <p>Call this method directly after creating the {{EVR}}, before you do any of the following:</p><ul> <li> <p>Call <strong>{{IMFGetService::GetService}}</strong> on the {{EVR}}.</p> </li> <li> <p>Call <strong>{{IEVRFilterConfig::SetNumberOfStreams}}</strong> on the {{EVR}}.</p> </li> <li> <p>Connect any pins on the {{EVR}} filter, or set any media types on {{EVR}} media sink.</p> </li> </ul><p>The {{EVR}} filter returns {{VFW_E_WRONG_STATE}} if any of the filter's pins are connected. The {{EVR}} media sink returns {{MF_E_INVALIDREQUEST}} if a media type is set on any of the streams, or the presentation clock is running or paused.</p><p>The device identifiers for the mixer and the presenter must match. The <strong>{{IMFVideoDeviceID::GetDeviceID}}</strong> method returns the device identifier. If they do not match, the method returns {{E_INVALIDARG}}.</p><p>If the video renderer is in the protected media path ({{PMP}}), the mixer and presenter objects must be certified safe components and pass any trust authority verification that is being enforced. Otherwise, this method will fail.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Either the mixer or the presenter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The mixer and presenter cannot be replaced in the current state. ({{EVR}} media sink.)</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>One or more input pins are connected. (DirectShow {{EVR}} filter.)</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTransform}}</strong> interface of the mixer to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default mixer.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFVideoPresenter}}</strong> interface of the presenter to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default presenter.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p> </p><p>Sets the number of input pins on the {{EVR}} filter.</p> + <p>After this method has been called, it cannot be called a second time on the same instance of the {{EVR}} filter. Also, the method fails if any input pins are connected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid number of streams. The minimum is one, and the maximum is 16.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>This method has already been called, or at least one pin is already connected.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the total number of input pins on the {{EVR}} filter. This value includes the input pin for the reference stream, which is created by default. For example, to mix one substream plus the reference stream, set this parameter to 2.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Configures the DirectShow <strong>Enhanced Video Renderer</strong> ({{EVR}}) filter. To get a reference to this interface, call <strong>QueryInterface</strong> on the {{EVR}} filter.</p> + + + + <p>Sets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> ({{EVR}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + + <p>Gets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables a custom video mixer or video presenter to get interface references from the Enhanced Video Renderer ({{EVR}}). The mixer can also use this interface to get interface references from the presenter, and the presenter can use it to get interface references from the mixer.</p><p>To use this interface, implement the <strong>{{IMFTopologyServiceLookupClient}}</strong> interface on your custom mixer or presenter. The {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> with a reference to the {{EVR}}'s <strong>{{IMFTopologyServiceLookup}}</strong> interface.</p> + + + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p>Initializes a video mixer or presenter. This interface is implemented by mixers and presenters, and enables them to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>When the {{EVR}} loads the video mixer and the video presenter, the {{EVR}} queries the object for this interface and calls <strong>InitServicePointers</strong>. Inside the <strong>InitServicePointers</strong> method, the object can query the {{EVR}} for interface references.</p> + + + + <p> </p><p>Signals the mixer or presenter to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>The <strong>{{IMFTopologyServiceLookup}}</strong> reference is guaranteed to be valid only during the call to <strong>InitServicePointers</strong>. The mixer or presenter should not store a reference to this interface after the method returns.</p><p>When the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong>, the mixer or presenter should release any references it obtained from the {{EVR}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyServiceLookup}}</strong> interface. To query the {{EVR}} for an interface, call <strong>{{IMFTopologyServiceLookup::LookupService}}</strong>.</p> </dd> + + + + + <p> </p><p>Signals the object to release the interface references obtained from the enhanced video renderer ({{EVR}}).</p> + <p>After this method is called, any interface references obtained during the previous call to <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> are no longer valid. The object must release them.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Queries whether the plug-in has any transient vulnerabilities at this time. </p> + <p>This method provides a way for the plug-in to report temporary conditions that would cause the input trust authority ({{ITA}}) to distrust the plug-in. For example, if an {{EVR}} presenter is in windowed mode, it is vulnerable to {{GDI}} screen captures.</p><p>To disable screen capture in Direct3D, the plug-in must do the following:</p><ul> <li> <p>Create the Direct3D device in full-screen exlusive mode.</p> </li> <li> <p>Specify the {{D3DCREATE_DISABLE_PRINTSCREEN}} flag when you create the device. For more information, see <strong>{{IDirect3D9::CreateDevice}}</strong> in the DirectX documentation.</p> </li> </ul><p>In addition, the graphics adapter must support the Windows Vista Display Driver Model ({{WDDM}}) and the Direct3D extensions for Windows Vista (sometimes called {{D3D9Ex}} or {{D3D9L}}).</p><p>If these conditions are met, the presenter can return <strong>{{TRUE}}</strong> in the <em>pYes</em> parameter. Otherwise, it should return <strong>{{FALSE}}</strong>.</p><p>The {{EVR}} calls this method whenever the device changes. If the plug-in returns <strong>{{FALSE}}</strong>, the {{EVR}} treats this condition as if the plug-in had a new output connector of unknown type. The policy object can then allow or block playback, depending on the {{ITA}}'s policy.</p><p>This method should be used only to report transient conditions. A plug-in that is never in a trusted state should not implement the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface at all.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in has no transient vulnerabilities at the moment and can receive protected content. If <strong>{{FALSE}}</strong>, the plug-in has a transient vulnerability. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (untrusted).</p> </dd> + + + + + <p> Queries whether the plug-in can limit the effective video resolution. </p> + <p>Constriction is a protection mechanism that limits the effective resolution of the video frame to a specified maximum number of pixels.</p><p>Video constriction can be implemented by either the mixer or the presenter.</p><p>If the method returns <strong>{{TRUE}}</strong>, the {{EVR}} might call <strong>{{IEVRTrustedVideoPlugin::SetConstriction}}</strong> at any time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in can limit the effective video resolution. Otherwise, the plug-in cannot limit the video resolution. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (not supported).</p> </dd> + + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Enables or disables the ability of the plug-in to export the video image. </p> + <p>An {{EVR}} plug-in might expose a way for the application to get a copy of the video frames. For example, the standard {{EVR}} presenter implements <strong>{{IMFVideoDisplayControl::GetCurrentImage}}</strong>.</p><p>If the plug-in supports image exporting, this method enables or disables it. Before this method has been called for the first time, the {{EVR}} assumes that the mechanism is enabled.</p><p>If the plug-in does not support image exporting, this method should return {{S_OK}} and ignore the value of <em>bDisable</em>. If the method fails, the {{EVR}} treats it as a failure to enforce the policy, which will probably cause playback to stop.</p><p>While image exporting is disabled, any associated export method, such as <strong>GetCurrentImage</strong>, should return {{MF_E_LICENSE_INCORRECT_RIGHTS}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Boolean value. Specify <strong>{{TRUE}}</strong> to disable image exporting, or <strong>{{FALSE}}</strong> to enable it.</p> </dd> + + + + + <p> </p><p>Creates the default video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of this object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer and video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the video mixer. If the mixer is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the owner of the video presenter. If the presenter is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video mixer. The caller must release the interface.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an instance of the enhanced video renderer ({{EVR}}) media sink.</p> + <p>This function creates the Media Foundation version of the {{EVR}}. To create the DirectShow {{EVR}} filter, call <strong>CoCreateInstance</strong> with the class identifier {{CLSID_EnhancedVideoRenderer}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the {{EVR}}.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates a media sample that manages a Direct3D surface. </p> + <p>The media sample created by this function exposes the following interfaces in addition to <strong>{{IMFSample}}</strong>:</p><ul> <li> <strong>{{IMFDesiredSample}}</strong> </li> <li> <strong>{{IMFTrackedSample}}</strong> </li> </ul><p>If <em>pUnkSurface</em> is non-<strong>{{NULL}}</strong>, the sample contains a single media buffer, which holds a reference to the Direct3D surface. To get the Direct3D surface from the media buffer, call <strong>{{IMFGetService::GetService}}</strong> on the buffer, using the service identifier {{MR_BUFFER_SERVICE}}. The media buffer does not implement <strong>{{IMF2DBuffer}}</strong>, nor does it implement the <strong>{{IMFMediaBuffer::Lock}}</strong> and <strong>Unlock</strong> methods.</p><p>Alternatively, you can set <em>pUnkSurface</em> to <strong>{{NULL}}</strong>, and later add a DirectX surface buffer to the sample by calling <strong>{{IMFSample::AddBuffer}}</strong>. To create a DirectX surface buffer, call <strong>{{MFCreateDXSurfaceBuffer}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the Direct3D surface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the sample's <strong>{{IMFSample}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an object that allocates video samples.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Contains encoding statistics from the Digital Living Network Alliance ({{DLNA}}) media sink.</p><p>This structure is used with the {{MF_MP2DLNA_STATISTICS}} attribute.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink. </p><p>The {{DLNA}} media sink exposes this interface. To get a reference to this interface, call <strong>CoCreateInstance</strong>. The {{CLSID}} is <strong>{{CLSID_MPEG2DLNASink}}</strong>.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></strong></dt> </dl> </td><td> <p>The method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream. The {{DLNA}} media sink writes data to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the {{DLNA}} media sink accepts {{PAL}} video formats. Otherwise, it accepts {{NTSC}} video formats.</p> </dd> + + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies options for the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_CREATION_OPTIONS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies the current playback state.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags that describe a media item.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_MEDIAITEM_CHARACTERISTICS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags for the <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> structure.</p><p>Some of these flags, marked [out], convey information back to the {{MFPlay}} player object. The application should set or clear these flags as appropriate, before returning from the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Defines event types for the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + <p>For each event type, the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback receives a reference to a data structure. The first part of the data structure is always an <strong>{{MFP_EVENT_HEADER}}</strong> structure. The following table lists the data structure for each event type.</p><p>In your implementation of <strong>OnMediaPlayerEvent</strong>, you must cast the <em>pEventHeader</em> parameter to the correct structure type. A set of macros is defined for this purpose. These macros check the value of the event type and return <strong>{{NULL}}</strong> if there is a mismatch; otherwise they return a reference to the correct structure type.</p><table> <tr><td><strong>Event type</strong></td><td> <p><strong>Event structure</strong></p> <p><strong>Pointer cast macro</strong></p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAY}}</td><td> <p> <strong>{{MFP_PLAY_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAY_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PAUSE}}</td><td> <p> <strong>{{MFP_PAUSE_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PAUSE_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_STOP}}</td><td> <p> <strong>{{MFP_STOP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_STOP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_POSITION_SET}}</td><td> <p> <strong>{{MFP_POSITION_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_RATE_SET}}</td><td> <p> <strong>{{MFP_RATE_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CREATED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</td><td> <p> <strong>{{MFP_MEDIAITEM_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_FRAME_STEP}}</td><td> <p> <strong>{{MFP_FRAME_STEP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CLEARED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MF}}</td><td> <p> <strong>{{MFP_MF_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MF_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ERROR}}</td><td> <p> <strong>{{MFP_ERROR_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ERROR_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</td><td> <p> <strong>{{MFP_PLAYBACK_ENDED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</td><td> <p> <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains information that is common to every type of {{MFPlay}} event.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAY}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Play}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAY_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Pause}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PAUSE_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_STOP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Stop}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_STOP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetPosition}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the {{MFP_EVENT_TYPE_RATE_SET}} event. This event is sent when the <strong>{{IMFPMediaPlayer::SetRate}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> macro for this purpose.</p><p>Media items are created asynchronously. If multiple items are created, the operations can complete in any order, not necessarily in the same order as the method calls. You can use the <strong>dwUserData</strong> member to identify the items, if you have simultaneous requests pending. </p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> macro for this purpose.</p><p>If one or more streams could not be connected to a media sink, the event property store contains the {{MFP_PKEY_StreamRenderingResults}} property. The value of the property is an array of <strong>{{HRESULT}}</strong> values, indicating which streams were connected successfully. The event property store can be accessed through the <strong>header.pPropertyStore</strong> member.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::FrameStep}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::ClearMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MF}}</strong> event. The {{MFPlay}} player object uses this event to forward certain events from the Media Foundation pipeline to the application.</p> + <p> To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MF_EVENT}}</strong> macro for this purpose.</p><p>If <strong>{{MFEventType}}</strong> is {{MEStreamSinkFormatChanged}}, the following property may be stored in the event property store, which can be accessed through the <strong>header.pPropertyStore</strong> member.</p><table> <tr><th>Property</th><th>Description</th></tr> <tr><td> {{MFP_PKEY_StreamIndex}} </td><td>The index of the stream whose format changed. </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event. This event is sent if an error occurs during playback. </p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_ERROR_EVENT}}</strong> macro for this purpose.</p><p>This event is not used to signal the failure of an asynchronous <strong>{{IMFPMediaPlayer}}</strong> method. If an asynchronous method fails, the error is reported in the standard event listed for that method. The <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event is used for errors that happen outside the context of an asynchronous method call.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</strong> event. This event is sent when the current media item finishes playing.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</strong> event. This event is sent if the application plays a media file from a server that requires authentication. The application can respond by providing the user credentials.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method. You can use the <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> macro for this purpose.</p><p>If the <strong>flags</strong> member contains the <strong>{{MFP_CREDENTIAL_PROMPT}}</strong> flag, the application should do the following:</p><ol> <li>Prompt the user to enter a user name and password.</li> <li>Store the user name in the credentials object by calling <strong>{{IMFNetCredential::SetUser}}</strong> on the <strong>pCredential</strong> reference.</li> <li>Store the password by calling <strong>{{IMFNetCredential::SetPassword}}</strong> on the <strong>pCredential</strong> reference.</li> </ol><p>To cancel authentication, set <strong>fProceedWithAuthentication</strong> equal to <strong>{{FALSE}}</strong>.</p><p>By default, {{MFPlay}} uses the network source's implementation of <strong>{{IMFNetCredentialManager}}</strong> to manage credentials. An application can provide its own implementation of this interface as follows:</p><ol> <li>Call <strong>QueryInterface</strong> on the <strong>{{IMFPMediaPlayer}}</strong> reference to get the <strong>{{IPropertyStore}}</strong> interface.</li> <li>Call <strong>{{IPropertyStore::SetValue}}</strong> to set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property.</li> </ol> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Contains methods to play media files.</p><p>The {{MFPlay}} player object exposes this interface. To get a reference to this interface, call <strong>{{MFPCreateMediaPlayer}}</strong>.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Starts playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PLAY}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Pauses playback. While playback is paused, the most recent video frame is displayed, and audio is silent.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stops playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_STOP}}</strong>.</p><p>The current media item is still valid. After playback stops, the playback position resets to the beginning of the current media item. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Steps forward one video frame.</p> + <p> This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong>.</p><p>The player object does not support frame stepping during reverse playback (that is, while the playback rate is negative).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Cannot frame step. Reasons for this error code include:</p> <ul> <li>There is no media item queued for playback.</li> <li>The current media item does not contain video.</li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The media source does not support frame stepping, or the current playback rate is negative.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback position.</p> + <p>If you call this method while playback is stopped, the new position takes effect after playback resumes.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong>.</p><p>If playback was started before <strong>SetPosition</strong> is called, playback resumes at the new position. If playback was paused, the video is refreshed to display the current frame at the new position. </p><p>If you make two consecutive calls to <strong>SetPosition</strong> with <em>guidPositionType</em> equal to <strong>{{MFP_POSITIONTYPE_100NS}}</strong>, and the second call is made before the first call has completed, the second call supersedes the first. The status code for the superseded call is set to <strong>{{S_FALSE}}</strong> in the event data for that call. This behavior prevents excessive latency from repeated calls to <strong>SetPosition</strong>, as each call may force the media source to perform a relatively lengthy seek operation. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}( {{ERROR_SEEK}} )</strong></strong></dt> </dl> </td><td> <p>The value of <em>pvPositionValue</em> is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback position.</p> + <p>The playback position is calculated relative to the start time of the media item, which can be specified by calling <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>. For example, if you set the start time to 20 seconds and the source duration is 60 seconds, the range of values returned by <strong>GetPosition</strong> is 0?40 seconds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the playback duration of the current media item.</p> + <p>This method calculates the playback duration, taking into account the start and stop times for the media item. To set the start and stop times, call <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong> on the media item. To get the actual duration of the underlying media file, regardless of start and stop times, call <strong>{{IMFPMediaItem::GetDuration}}</strong>.</p><p>For example, suppose that you load a 30-second audio file and set the start time equal to 2 seconds and stop time equal to 10 seconds. The <strong>{{IMFPMediaItem::GetDuration}}</strong> method will return 30 seconds, but the <strong>{{IMFPMediaPlayer::GetDuration}}</strong> method will return 8 seconds.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The media source does not have a duration. This error can occur with a live source, such as a video camera.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback rate.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong>.</p><p>The method sets the nearest supported rate, which will depend on the underlying media source. For example, if <em>flRate</em> is 50 and the source's maximum rate is 8? normal rate, the method will set the rate to 8.0. The actual rate is indicated in the event data for the <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong> event.</p><p>To find the range of supported rates, call <strong>{{IMFPMediaPlayer::GetSupportedRates}}</strong>.</p><p>This method does not support playback rates of zero, although Media Foundation defines a meaning for zero rates in some other contexts.</p><p>The new rate applies only to the current media item. Setting a new media item resets the playback rate to 1.0.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flRate</em> parameter is zero.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback rate.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of supported playback rates.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 indicates normal playback speed, 0.5 indicates half speed, and 2.0 indicates twice speed. Positive values indicate forward playback, and negative values indicate reverse playback. +</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not support playback in the requested direction (either forward or reverse).</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback state of the {{MFPlay}} player object.</p> + <p>This method can be called after the player object has been shut down.</p><p>Many of the <strong>{{IMFPMediaPlayer}}</strong> methods complete asynchronously. While an asynchronous operation is pending, the current state is not updated until the operation completes. When the operation completes, the application receives an event callback, and the new state is given in the <strong>{{MFP_EVENT_HEADER}}</strong> structure that is passed to the callback.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from a {{URL}}.</p> + <p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromURL</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromURL</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromURL</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p><p>Currently, this method returns <strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong> if the {{URL}} specifies any of the following protocols: rtsp*, mms*, or mcast. If you want to use the Media Foundation network source with {{MFPlay}}, first use the Source Resolver to create the source, and then call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></strong></dt> </dl> </td><td> <p>Unsupported protocol. </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from an object.</p> + <p>The <em>pIUnknownObj</em> parameter must specify one of the following:</p><ul> <li>A reference to a media source. Media sources expose the <strong>{{IMFMediaSource}}</strong> interface. It is the caller's responsibility to call <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source.</li> <li>A reference to a byte stream. Byte streams expose the <strong>{{IMFByteStream}}</strong> interface. Internally, the method calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </li> </ul><p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromObject</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromObject</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromObject</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queues a media item for playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong>.</p><p>To create a media item, call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong>. A media item must be used with the same {{MFPlay}} player object that created that item. If the media item was created by a different instance of the player object, <strong>SetMediaItem</strong> returns <strong>{{E_INVALIDARG}}</strong>. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The media item contains protected content. {{MFPlay}} currently does not support protected content.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_AUDIO_PLAYBACK_DEVICE}}</strong></strong></dt> </dl> </td><td> <p>No audio playback device was found. This error can occur if the media source contains audio, but no audio playback devices are available on the system.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Clears the current media item.</p><strong>Note</strong>??This method is currently not implemented.? + <p>This method stops playback and releases the player object's references to the current media item.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the current media item.</p> + <p>The <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method is asynchronous. Therefore, while <strong>SetMediaItem</strong> is pending, <strong>GetMediaItem</strong> will not return the media item that was just set. Instead, the application should implement <strong>{{IMFPMediaPlayerCallback}}</strong> interface and handle the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see Receiving Events From the Player.</p><p>The previous remark also applies to setting the media item in the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_FAIL}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio volume.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio volume.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p>This method does not change the master volume level for the player's audio session. Instead, it adjusts the per-channel volume levels for audio stream(s) that belong to the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>The <em>flVolume</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio balance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio balance.</p> + <p>If you call this method before playback starts, the setting is applied when playback starts.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flBalance</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the audio is muted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Mutes or unmutes the audio.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p> This method does not mute the entire audio session to which the player belongs. It mutes only the streams from the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the size and aspect ratio of the video. These values are computed before any scaling is done to fit the video into the destination window.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of video sizes that can be displayed without significantly degrading performance or image quality.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>. Sizes are given in pixels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the video source rectangle.</p><p>{{MFPlay}} clips the video to this rectangle and stretches the rectangle to fill the video window.</p> + <p>{{MFPlay}} stretches the source rectangle to fill the entire video window. By default, {{MFPlay}} maintains the source's correct aspect ratio, letterboxing if needed. The letterbox color is controlled by the <strong>{{IMFPMediaPlayer::SetBorderColor}}</strong> method.</p><p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p> To set the video position before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the video source rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies whether the aspect ratio of the video is preserved during playback.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the aspect-ratio mode before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current aspect-ratio correction mode. This mode controls whether the aspect ratio of the video is preserved during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the window where the video is displayed.</p> + <p>The video window is specified when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Updates the video frame.</p> + <p>Call this method when your application's video playback window receives either a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message. This method performs two functions: </p><ul> <li>Ensures that the video frame is repainted while playback is paused or stopped. </li> <li>Adjusts the displayed video to match the current size of the video window.</li> </ul><strong>Important</strong>??Call the {{GDI}} <strong>BeginPaint</strong> function before calling <strong>UpdateVideo</strong>.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the color for the video border. The border color is used to letterbox the video.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the border color before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>M<strong>{{F_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current color of the video border. The border color is used to letterbox the video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Applies an audio or video effect to playback.</p> + <p>The object specified in the <em>pEffect</em> parameter can implement either a video effect or an audio effect. The effect is applied to any media items set after the method is called. It is not applied to the current media item. </p><p>For each media item, the effect is applied to the first selected stream of the matching type (audio or video). If a media item has two selected streams of the same type, the second stream does not receive the effect. The effect is ignored if the media item does not contain a stream that matches the effect type. For example, if you set a video effect and play a file that contains just audio, the video effect is ignored, although no error is raised.</p><p>The effect is applied to all subsequent media items, until the application removes the effect. To remove an effect, call <strong>{{IMFPMediaPlayer::RemoveEffect}}</strong> or <strong>{{IMFPMediaPlayer::RemoveAllEffects}}</strong>.</p><p>If you set multiple effects of the same type (audio or video), they are applied in the same order in which you call <strong>InsertEffect</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDINDEX}}</strong></strong></dt> </dl> </td><td> <p>This effect was already added.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes an effect that was added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effect is not removed from the current media item.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The effect was not found.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes all effects that were added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effects are not removed from the current media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Shuts down the {{MFPlay}} player object and releases any resources the object is using.</p> + <p>After this method is called, most <strong>{{IMFPMediaPlayer}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>. Also, any media items created from this instance of the player object are invalidated and most <strong>{{IMFPMediaItem}}</strong> methods also return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>The player object automatically shuts itself down when its reference count reaches zero. You can use the <strong>Shutdown</strong> method to shut down the player before all of the references have been released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Note</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Represents a media item. A <em>media item</em> is an abstraction for a source of media data, such as a video file. Use this interface to get information about the source, or to change certain playback settings, such as the start and stop times. To get a reference to this interface, call one of the following methods:</p><ul> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> </li> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> </li> </ul> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the {{MFPlay}} player object that created the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the {{URL}} that was used to create the media item.</p> + <p>This method applies when the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> to create a media item. If the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create a media item, the <strong>GetURL</strong> method for that media item returns <strong>{{MF_E_NOTFOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>No {{URL}} is associated with this media item.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the object that was used to create the media item.</p> + <p>The object reference is set if the application uses <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create the media item. Otherwise, <strong>GetObject</strong> returns {{MF_E_NOTFOUND}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>The media item was created from a {{URL}}, not from an object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the application-defined value stored in the media item.</p> + <p>You can assign this value when you first create the media item, by specifying it in the <em>dwUserData</em> parameter of the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method. To update the value, call <strong>{{IMFPMediaItem::SetUserData}}</strong>.</p><p>This method can be called after the player object is shut down.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stores an application-defined value in the media item.</p> + <p>This method can be called after the player object is shut down.</p> + <p>This method can return one of these values.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the start and stop times for the media item.</p> + <p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters receive the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFP_POSITIONTYPE_100NS}}</td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): {{VT_I8}}</li> <li>Variant member: <strong>hVal</strong></li> </ul> </td></tr> </table><p>?</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the start and stop time for the media item.</p> + <p>By default, a media item plays from the beginning to the end of the file. This method adjusts the start time and/or the stop time:</p><ul> <li>To set the start time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStartPositionType</em> and <em>pvStartValue</em>.</li> <li>To set the stop time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStopPositionType</em> and <em>pvStopValue</em>.</li> </ul><p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters give the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{MFP_POSITIONTYPE_100NS}}</strong></td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): <strong>{{VT_I8}}</strong></li> <li>Variant member: <strong>hVal</strong></li> </ul> <p>To clear a previously set time, use an empty <strong>{{PROPVARIANT}}</strong> (<strong>{{VT_EMPTY}}</strong>).</p> </td></tr> </table><p>?</p><p>The adjusted start and stop times are used the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>Invalid start or stop time. Any of the following can cause this error:</p> <ul> <li>Time less than zero.</li> <li>Time greater than the total duration of the media item.</li> <li>Stop time less than start time.</li> </ul> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains a video stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains an audio stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains protected content.</p><strong>Note</strong>??Currently <strong>{{IMFPMediaPlayer}}</strong> does not support playing protected content.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the duration of the media item.</p> + <p>The method returns the total duration of the content, regardless of any values set through <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the number of streams (audio, video, and other) in the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether a stream is selected to play.</p> + <p> To select or deselect a stream, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Selects or deselects a stream.</p> + <p>You can use this method to change which streams are selected. The change goes into effect the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again with this media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a stream attribute.</p> + <p>Stream attributes describe an individual stream (audio, video, or other) within the presentation. To get an attribute that applies to the entire presentation, call <strong>{{IMFPMediaItem::GetPresentationAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a presentation attribute.</p> + <p>Presentation attributes describe the presentation as a whole. To get an attribute that applies to an individual stream within the presentation, call <strong>{{IMFPMediaItem::GetStreamAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets various flags that describe the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Sets a media sink for the media item. A <em>media sink</em> is an object that consumes the data from one or more streams. </p> + <p>By default, the {{MFPlay}} player object renders audio streams to the Streaming Audio Renderer ({{SAR}}) and video streams to the Enhanced Video Renderer ({{EVR}}). You can use the <strong>SetStreamSink</strong> method to provide a different media sink for an audio or video stream; or to support other stream types besides audio and video. You can also use it to configure the {{SAR}} or {{EVR}} before they are used.</p><p>Call this method before calling <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>. Calling this method after <strong>SetMediaItem</strong> has no effect, unless you stop playback and call <strong>SetMediaItem</strong> again.</p><p>To reset the media item to use the default media sink, set <em>pMediaSink</em> to <strong>{{NULL}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a property store that contains metadata for the source, such as author or title.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Callback interface for the <strong>{{IMFPMediaPlayer}}</strong> interface.</p><p>To set the callback, pass an <strong>{{IMFPMediaPlayerCallback}}</strong> reference to the <strong>{{MFPCreateMediaPlayer}}</strong> function in the <em>pCallback</em> parameter. The application implements the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Called by the {{MFPlay}} player object to notify the application of a playback event.</p> + <p> The specific type of playback event is given in the <strong>eEventType</strong> member of the <strong>{{MFP_EVENT_HEADER}}</strong> structure. This structure contains information that is common to all of the event types. Some event types use extended structures. A set of macros is defined for casting the <em>pEventHeader</em> reference to the correct structure type. For more information, see <strong>{{MFP_EVENT_TYPE}}</strong>. </p><p>It is safe to call <strong>{{IMFPMediaPlayer}}</strong> and <strong>{{IMFPMediaItem}}</strong> methods inside the <strong>OnMediaPlayer</strong> method. {{MFPlay}} is guaranteed not to reenter the <strong>OnMediaPlayer</strong> method. That is, calls to <strong>OnMediaPlayer</strong> are serialized, and the method will not be invoked again from inside <strong>OnMediaPlayer</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a new instance of the {{MFPlay}} player object.</p> + <p>Before calling this function, call <strong>CoIntialize(Ex)</strong> from the same thread to initialize the {{COM}} library.</p><p>Internally, <strong>{{MFPCreateMediaPlayer}}</strong> calls <strong>{{MFStartup}}</strong> to initialize the Microsoft Media Foundation platform. When the player object is destroyed, it calls <strong>{{MFShutdown}}</strong> to shut down the platform. It is not necessary for an application to call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> when using {{MFPlay}}.</p><strong>Note</strong>??If you use other Media Foundation {{APIs}} outside the life time of the player object, then your application should call <strong>{{MFStartup}}</strong> and <strong>{{MFShutdown}}</strong>.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines the {{ASF}} splitter options.</p> + + + <dd> <p>The splitter delivers samples for the {{ASF}} content in reverse order to accommodate reverse playback.</p> </dd> + + + <dd> <p>The splitter delivers samples for streams that are protected with Windows Media Digital Rights Management.</p> </dd> + + + + + <p> </p><p>Defines status conditions for the <strong>{{IMFASFSplitter::GetNextSample}}</strong> method.</p> + + + + <p> </p><p>Defines the {{ASF}} multiplexer options.</p> + + + <dd> <p>The multiplexer automatically adjusts the bit rate of the {{ASF}} content in response to the characteristics of the streams being multiplexed.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} indexer options.</p> + + + <dd> <p>The indexer creates a new index object.</p> </dd> + + + <dd> <p>The indexer returns values for reverse playback.</p> </dd> + + + <dd> <p>The indexer creates an index object for a live {{ASF}} stream.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} stream selector options.</p> + + + <dd> <p>The stream selector will not set thinning. Thinning is the process of removing samples from a stream to reduce the bit rate.</p> </dd> + + + <dd> <p>The stream selector will use the average bit rate of streams when selecting streams.</p> </dd> + + + + + <p> </p><p>Defines the selection options for an {{ASF}} stream.</p> + + + <dd> <p>No samples from the stream are delivered.</p> </dd> + + + <dd> <p>Only samples from the stream that are clean points are delivered.</p> </dd> + + + <dd> <p>All samples from the stream are delivered.</p> </dd> + + + + + <p> </p><p>Specifies how the {{ASF}} file sink should apply Windows Media {{DRM}}.</p> + + + <dd> <p>Undefined action.</p> </dd> + + + <dd> <p>Encode the content using Windows Media {{DRM}}. Use this flag if the source content does not have {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcode the content using Windows Media {{DRM}}. Use this flag if the source content has Windows Media {{DRM}} protection and you want to change the encoding parameters but not the {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcrypt the content. Use this flag if the source content has {{DRM}} protection and you want to change the {{DRM}} protection; for example, if you want to convert from Windows Media {{DRM}} version 1 to Windows Media {{DRM}} version 7 or later.</p> </dd> + + + <dd> <p>Reserved. Do not use.</p> </dd> + + + + + <p> </p><p>Contains statistics about the progress of the {{ASF}} multiplexer.</p> + <p>Use <strong>{{IMFASFMultiplexer::GetStatistics}}</strong> to retrieve this structure.</p> + + + <dd> <p>Number of frames written by the {{ASF}} multiplexer.</p> </dd> + + + <dd> <p>Number of frames dropped by the {{ASF}} multiplexer.</p> </dd> + + + + + <p> Specifies an index for the {{ASF}} indexer object. </p> + <p> The index object of an {{ASF}} file can contain a number of distinct indexes. Each index is identified by the type of index and the stream number. No {{ASF}} index object can contain more than one index for a particular combination of stream number and index type.</p> + + + <dd> <p> The type of index. Currently this value must be {{GUID_NULL}}, which specifies time-based indexing. </p> </dd> + + + <dd> <p> The stream number to which this structure applies. </p> </dd> + + + + + <p> </p><p>Describes the indexing configuration for a stream and type of index.</p> + + + <dd> <p> <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and the type of index.</p> </dd> + + + <dd> <p>Number of bytes used for each index entry. If the value is {{MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC}}, the index entries have variable size.</p> </dd> + + + <dd> <p>Optional text description of the index.</p> </dd> + + + <dd> <p>Indexing interval. The units of this value depend on the index type. A value of {{MFASFINDEXER_NO_FIXED_INTERVAL}} indicates that there is no fixed indexing interval.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> Retrieves the size of the header section of an Advanced Systems Format ({{ASF}}) file. </p> + <p>The header of an {{ASF}} file or stream can be passed to the <strong>{{IMFASFContentInfo::ParseHeader}}</strong> method to populate the ContentInfo object with the header information.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The buffer does not contain valid {{ASF}} data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer does not contain enough valid data. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing the beginning of {{ASF}} content. The size of the valid data in the buffer must be at least {{MFASF_MIN_HEADER_BYTES}} in bytes.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the header section of the content. The value includes the size of the {{ASF}} Header Object plus the size of the header section of the Data Object. Therefore, the resulting value is the offset to the start of the data packets in the {{ASF}} Data Object.</p> </dd> + + + + + <p> </p><p>Parses the information in an {{ASF}} header and uses that information to set values in the ContentInfo object. You can pass the entire header in a single buffer or send it in several pieces.</p> + <p>If you pass the header in pieces, the ContentInfo object will keep references to the buffer objects until the entire header is parsed. Therefore, do not write over the buffers passed into this method.</p><p>The start of the Header object has the following layout in memory:</p><table> <tr><th>Field Name</th><th>Size in bytes</th></tr> <tr><td>Object {{ID}}</td><td>16</td></tr> <tr><td>Object Size</td><td>8</td></tr> <tr><td>Number of Header Objects</td><td>4</td></tr> <tr><td>Reserved1</td><td>1</td></tr> <tr><td>Reserved2</td><td>1</td></tr> </table><p>?</p><p>The first call to <strong>ParseHeader</strong> reads everything up to and including Rerserved2, so it requires a minimum of 30 bytes. (Note that the <strong>{{IMFASFContentInfo::GetHeaderSize}}</strong> method reads only the Object {{ID}} and Object Size fields, so that method requires a minimum of 24 bytes.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The header is completely parsed and validated.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The input buffer does not contain valid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The input buffer is to small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_ASF_PARSEINPROGRESS}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the header passed was incomplete. This is the successful return code for all calls but the last one when passing the header in pieces.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing some or all of the header. The buffer must contain at least 30 bytes, which is the size of the Header Object, not including the objects contained in the Header Object (that is, everything up to and including the Reserved2 field in the Header Object).</p> </dd> + + + <dd> <p>Offset, in bytes, of the first byte in the buffer relative to the beginning of the header.</p> </dd> + + + + + <p> </p><p>Encodes the data in the <strong>{{MFASFContentInfo}}</strong> object into a binary Advanced Systems Format ({{ASF}}) header.</p> + <p>The size received in the <em>pcbHeader</em> parameter includes the padding size. The content information shrinks or expands the padding data depending on the size of the {{ASF}} Header Objects.</p><p>During this call, the stream properties are set based on the encoding properties of the profile. These properties are available through the <strong>{{IMFMetadata}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Objects do not exist for the media that the ContentInfo object holds reference to. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Object size exceeds 10 {{MB}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer passed in <em>pIHeader</em> is not large enough to hold the {{ASF}} Header Object information. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the buffer object that will receive the encoded header. Set to <strong>{{NULL}}</strong> to retrieve the size of the header. </p> </dd> + + + <dd> <p> Size of the encoded {{ASF}} header in bytes. If <em>pIHeader</em> is <strong>{{NULL}}</strong>, this value is set to the buffer size required to hold the encoded header. </p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) profile that describes the {{ASF}} content.</p> + <p>The profile is set by calling either <strong>{{IMFASFContentInfo::SetProfile}}</strong> or <strong>{{IMFASFContentInfo::ParseHeader}}</strong>.</p><p>The {{ASF}} profile object returned by this method does not include any of the <strong>{{MF_PD_ASF_xxx}}</strong> attributes (see Presentation Descriptor Attributes). To get these attributes, do the following:</p><ol> <li> <p>Call <strong>{{IMFASFContentInfo::GeneratePresentationDescriptor}}</strong> to get the {{ASF}} presentation descriptor. You can query the presentation descriptor for the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> <li> <p>(Optional.) Call <strong>{{MFCreateASFProfileFromPresentationDescriptor}}</strong> to convert the presentation descriptor into an {{ASF}} profile. The profile object created by this function contains the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> </ol><p>An {{ASF}} profile is a template for file encoding, and is intended mainly for creating {{ASF}} content. If you are reading an existing {{ASF}} file, it is recommended that you use the presentation descriptor to get information about the file. One exception is that the profile contains the mutual exclusion and stream prioritization objects, which are not exposed directly from the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an <strong>{{IMFASFProfile}}</strong> interface reference. The caller must release the interface. If the object does not have an {{ASF}} profile, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor for {{ASF}} content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a property store that can be used to set encoding properties.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number to configure. Set to zero to configure file-level encoding properties.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves a stream from the profile by stream index, and/or retrieves the stream number for a stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the stream to retrieve. Stream indexes are sequential and zero-based. You can get the number of streams that are in the profile by calling the <strong>{{IMFASFProfile::GetStreamCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives the stream number of the requested stream. Stream numbers are one-based and are not necessarily sequential. This parameter can be set to <strong>{{NULL}}</strong> if the stream number is not required.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong> if you want to retrieve the stream number without accessing the stream configuration.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) stream configuration object for a stream in the profile. This method references the stream by stream number instead of stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain the interface reference.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a stream to the profile or reconfigures an existing stream.</p> + <p>If the stream number in the {{ASF}} stream configuration object is already included in the profile, the information in the new object replaces the old one. If the profile does not contain a stream for the stream number, the {{ASF}} stream configuration object is added as a new stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFStreamConfig}}</strong> interface of a configured {{ASF}} stream configuration object.</p> </dd> + + + + + <p> </p><p>Removes a stream from the Advanced Systems Format ({{ASF}}) profile object.</p> + <p>After a stream is removed, the {{ASF}} profile object reassigns stream indexes so that the index values are sequential starting from zero. Any previously stored stream index numbers are no longer valid after deleting a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to remove.</p> </dd> + + + + + <p> </p><p>Creates an Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The {{ASF}} stream configuration object created by this method is not included in the profile. To include the stream, you must first configure the stream configuration and then call <strong>{{IMFASFProfile::SetStream}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>ppIStream</em> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>stream configuration object could not be created due to insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of Advanced Systems Format ({{ASF}}) mutual exclusion objects that are associated with the profile.</p> + <p>Multiple mutual exclusion objects may be required for streams that are mutually exclusive in more than one way. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of mutual exclusion objects.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>This method does not create a copy of the mutual exclusion object. The returned reference refers to the mutual exclusion contained in the profile object. You must not make any changes to the mutual exclusion object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the mutual exclusion object in the profile, you must first clone the mutual exclusion object by calling <strong>{{IMFASFMutualExclusion::Clone}}</strong>. Make whatever changes are required to the clone of the object, remove the old mutual exclusion object from the profile by calling the <strong>{{IMFASFProfile::RemoveMutualExclusion}}</strong> method, and then add the updated object by calling the <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the mutual exclusion object in the profile.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the {{ASF}} mutual exclusion object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a configured Advanced Systems Format ({{ASF}}) mutual exclusion object to the profile.</p> + <p>You can create a mutual exclusion object by calling the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFMutualExclusion}}</strong> interface of a configured {{ASF}} mutual exclusion object.</p> </dd> + + + + + <p> </p><p>Removes an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>When a mutual exclusion object is removed from the profile, the {{ASF}} profile object reassigns the mutual exclusion indexes so that they are sequential starting with zero. Any previously stored indexes are no longer valid after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the mutual exclusion object to remove from the profile.</p> </dd> + + + + + <p> </p><p>Creates a new Advanced Systems Format ({{ASF}}) mutual exclusion object. Mutual exclusion objects can be added to a profile by calling the <strong>AddMutualExclusion</strong> method.</p> + <p>The {{ASF}} mutual exclusion object created by this method is not associated with the profile. Call <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> after configuring the object to make this association.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved.</p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <strong>Note</strong>??This method is not implemented.? + <p> Returns <strong>{{E_NOTIMPL}}</strong>. </p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format profile object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p>Gets the major media type of the stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the major media type for the stream. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> </p><p>Retrieves the stream number of the stream.</p> + <p>The method returns the stream number.</p> + + + + <p> </p><p>Assigns a stream number to the stream.</p> + <p>Stream numbers start from 1 and do not need to be sequential.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number to assign to the stream.</p> </dd> + + + + + <p> </p><p>Retrieves the media type of the stream.</p> + <p>To reduce unnecessary copying, the method returns a reference to the media type that is stored internally by the object. Do not modify the returned media type, as the results are not defined.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type object associated with the stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the media type for the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>Some validation of the media type is performed by this method. However, a media type can be successfully set, but cause an error when the stream is added to the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type object.</p> </dd> + + + + + <p> </p><p>Retrieves the number of payload extensions that are configured for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of payload extensions.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p> </p><p>Configures a payload extension for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>A reference to a buffer that contains information about this extension system. This information is the same for all samples and is stored in the content header (not with each sample). This parameter can be <strong>{{NULL}}</strong> if <em>cbExtensionSystemInfo</em> is 0.</p> </dd> + + + <dd> <p>Amount of data, in bytes, that describes this extension system. If this value is 0, then <em>pbExtensionSystemInfo</em> can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Removes all payload extensions that are configured for the stream.</p> + <p>None.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates a copy of the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p>Configures an Advanced Systems Format ({{ASF}}) mutual exclusion object, which manages information about a group of streams in an {{ASF}} profile that are mutually exclusive. When streams or groups of streams are mutually exclusive, only one of them is read at a time, they are not read concurrently.</p><p>A common example of mutual exclusion is a set of streams that each include the same content encoded at a different bit rate. The stream that is used is determined by the available bandwidth to the reader.</p><p>An <strong>{{IMFASFMutualExclusion}}</strong> interface exists for every {{ASF}} mutual exclusion object. A reference to this interface is obtained when you create the object using the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>An {{ASF}} profile object can support multiple mutual exclusions. Each must be configured using a separate {{ASF}} mutual exclusion object.</p> + + + + <p> </p><p>Retrieves the type of mutual exclusion represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams of several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A variable that receives the type identifier. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Sets the type of mutual exclusion that is represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams in several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The type of mutual exclusion that is represented by the {{ASF}} mutual exclusion object. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Retrieves the number of records in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of streams in every other record.</p><p>Use this method in conjunction with <strong>{{IMFASFMutualExclusion::GetStreamsForRecord}}</strong> to retrieve the streams that are included in each record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the count of records.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers contained in a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of the record for which to retrieve the stream numbers.</p> </dd> + + + <dd> <p>An array that receives the stream numbers. Set to <strong>{{NULL}}</strong> to get the number of elements required, which is indicated by the value of <em>pcStreams</em> on return. If this parameter is not <strong>{{NULL}}</strong>, the method will copy as many stream numbers to the array as there are elements indicated by the value of <em>pcStreams</em>.</p> </dd> + + + <dd> <p>On input, the number of elements in the array referenced by <em>pwStreamNumArray</em>. On output, the method sets this value to the count of stream numbers in the record. You can call <strong>GetStreamsForRecord</strong> with <em>pwStreamNumArray</em> set to <strong>{{NULL}}</strong> to retrieve the number of elements required to hold all of the stream numbers.</p> </dd> + + + + + <p> </p><p>Adds a stream number to a record in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of all streams in every other record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The specified stream number is already associated with the record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number to which the stream is added. A record number is set by the <strong>{{IMFASFMutualExclusion::AddRecord}}</strong> method.</p> </dd> + + + <dd> <p>The stream number to add to the record.</p> </dd> + + + + + <p> </p><p>Removes a stream number from a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The stream number is not listed for the specified record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number from which to remove the stream number.</p> </dd> + + + <dd> <p>The stream number to remove from the record.</p> </dd> + + + + + <p> </p><p>Removes a record from the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>When a record is removed, the {{ASF}} mutual exclusion object indexes the remaining records so that they are sequential starting with zero. You should enumerate the records to ensure that you have the correct index for each record. If the record removed is the one with the highest index, removing it has no effect on the other indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the record to remove.</p> </dd> + + + + + <p> </p><p>Adds a record to the mutual exclusion object. A record specifies streams that are mutually exclusive with the streams in all other records.</p> + <p>A record can include one or more stream numbers. All of the streams in a record are mutually exclusive with all the streams in all other records in the {{ASF}} mutual exclusion object.</p><p>You can use records to create complex mutual exclusion scenarios by using multiple {{ASF}} mutual exclusion objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the index assigned to the new record. Record indexes are zero-based and sequential.</p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format mutual exclusion object.</p> + <p>The cloned object is a new object, completely independent of the object from which it was cloned.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the number of entries in the stream priority list.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the stream priority list.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the stream number of a stream in the stream priority list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument or the <em>dwStreamIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the entry to retrieve from the stream priority list. To get the number of entries in the priority list, call <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the stream number of the stream priority entry.</p> </dd> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Removes a stream from the stream priority list.</p> + <p>When a stream is removed from the stream priority list, the index values of all streams that follow it in the list are decremented.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the entry in the stream priority list to remove. Values range from zero, to one less than the stream count retrieved by calling <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Creates a copy of the {{ASF}} stream prioritization object.</p> + <p>The new object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamPrioritization}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and configures it to parse data from an {{ASF}} data section.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIContentInfo</em> parameter is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of a ContentInfo object that describes the data to be parsed.</p> </dd> + + + + + <p> </p><p>Sets option flags on the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>This method can only be called after the splitter is initialized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The splitter is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter does not contain a valid flag.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{MFASF_SPLITTER_REVERSE}} flag is set, but the content cannot be parsed in reverse.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise combination of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the streams to be parsed by the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>Calling this method supersedes any previous stream selections; only the streams specified in the <em>pwStreamNumbers</em> array will be selected.</p><p>By default, no streams are selected by the splitter.</p><p>You can obtain a list of the currently selected streams by calling the <strong>{{IMFASFSplitter::GetSelectedStreams}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwStreamNumbers</em> is <strong>{{NULL}}</strong> and <em>wNumStreams</em> contains a value greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number was passed in the array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of variables containing the list of stream numbers to select.</p> </dd> + + + <dd> <p>The number of valid elements in the stream number array.</p> </dd> + + + + + <p> Gets a list of currently selected streams. </p> + <p>To get the number of selected streams, set <em>pwStreamNumbers</em> to <strong>{{NULL}}</strong>. The method will return <strong>{{MF_E_BUFFERTOSMALL}}</strong> but will also set the value of <code>*pwNumStreams</code> equal to the number of selected streams. Then allocate an array of that size and call the method again, passing the array in the <em>pwStreamNumbers</em> parameter.</p><p>The following code shows these steps:</p><pre>{{HRESULT}} DisplaySelectedStreams({{IMFASFSplitter}} *pSplitter) +{ {{WORD}} count = 0; {{HRESULT}} hr = pSplitter-&gt;GetSelectedStreams({{NULL}}, &amp;count); if (hr == {{MF_E_BUFFERTOOSMALL}}) { {{WORD}} *pStreamIds = new (std::nothrow) {{WORD}}[count]; if (pStreamIds) { hr = pSplitter-&gt;GetSelectedStreams(pStreamIds, &amp;count); if ({{SUCCEEDED}}(hr)) { for ({{WORD}} i = 0; i &lt; count; i++) { printf("Selected stream {{ID:}} %d\n", pStreamIds[i]); } } delete [] pStreamIds; } else { hr = {{E_OUTOFMEMORY}}; } } return hr; +} +</pre><p>Alternatively, you can allocate an array that is equal to the total number of streams and pass that to <em>pwStreamNumbers</em>.</p><p>Before calling this method, initialize <code>*pwNumStreams</code> to the number of elements in <em>pwStreamNumbers</em>. If <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>, set <code>*pwNumStreams</code> to zero.</p><p> By default, no streams are selected by the splitter. Select streams by calling the <strong>{{IMFASFSplitter::SelectStreams}}</strong> method. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The <em>pwStreamNumbers</em> array is smaller than the number of selected streams. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The address of an array of <strong>{{WORDs}}</strong>. This array receives the stream numbers of the selected streams. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, points to a variable that contains the number of elements in the <em>pwStreamNumbers</em> array. Set the variable to zero if <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>. </p> <p>On output, receives the number of elements that were copied into <em>pwStreamNumbers</em>. Each element is the identifier of a selected stream.</p> </dd> + + + + + <p> </p><p>Sends packetized Advanced Systems Format ({{ASF}}) data to the {{ASF}} splitter for processing.</p> + <p>After using this method to parse data, you must call <strong>{{IMFASFSplitter::GetNextSample}}</strong> to retrieve parsed media samples.</p><p>If your {{ASF}} data contains variable-sized packets, you must set the <strong>{{MFASFSPLITTER_PACKET_BOUNDARY}}</strong> attribute on the buffers to indicate the sample boundaries, and the buffers cannot span multiple packets.</p><p>If the method returns {{ME_E_NOTACCEPTING}}, call <strong>GetNextSample</strong> to get the output samples, or call <strong>{{IMFASFSplitter::Flush}}</strong> to clear the splitter.</p><p>The splitter might hold a reference count on the input buffer. Therefore, do not write over the valid data in the buffer after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIBuffer</em> parameter is <strong>{{NULL}}</strong>.</p> <p>The specified offset value in <em>cbBufferOffset</em> is greater than the length of the buffer.</p> <p>The total value of <em>cbBufferOffset</em> and <em>cbLength</em> is greater than the length of the buffer.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFASFSplitter::Initialize}}</strong> method was not called or the call failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The splitter cannot process more input at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing data to be parsed.</p> </dd> + + + <dd> <p>The offset into the data buffer where the splitter should begin parsing. This value is typically set to 0.</p> </dd> + + + <dd> <p>The length, in bytes, of the data to parse. This value is measured from the offset specified by <em>cbBufferOffset</em>. Set to 0 to process to the end of the buffer.</p> </dd> + + + + + <p> </p><p>Retrieves a sample from the Advanced Systems Format ({{ASF}}) splitter after the data has been parsed.</p> + <p>Before calling this method, call <strong>{{IMFASFSplitter::ParseData}}</strong> to give input data to the splitter. If the input does not contain enough data for a complete sample, the <strong>GetNextSample</strong> method succeeds but returns <strong>{{NULL}}</strong> in the <em>ppISample</em> parameter.</p><p>The {{ASF}} splitter skips samples for unselected streams. To select streams, call <strong>{{IMFASFSplitter::SelectStreams}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The {{ASF}} data in the buffer is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_MISSINGDATA}}</strong></dt> </dl> </td><td> <p>There is a gap in the {{ASF}} data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong></dt> </dl> </td><td> <p>More samples are ready to be retrieved. Call <strong>GetNextSample</strong> in a loop until the <em>pdwStatusFlags</em> parameter receives the value zero.</p> </td></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>No additional samples are ready. Call <strong>{{IMFASFSplitter::ParseData}}</strong> to give more input data to the splitter.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If the method returns a sample in the <em>ppISample</em> parameter, this parameter receives the number of the stream to which the sample belongs.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the parsed sample. The caller must release the interface. If no samples are ready, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and releases all pending samples.</p> + <p>Any samples waiting to be retrieved when <strong>Flush</strong> is called are lost.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the send time of the last sample received.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwLastSendTime</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the send time of the last sample received.</p> </dd> + + + + + <p>Provides methods to create Advanced Systems Format ({{ASF}}) data packets. The methods of this interface process input samples into the packets that make up an {{ASF}} data section. The {{ASF}} multiplexer exposes this interface. To create the {{ASF}} multiplexer, call <strong>{{MFCreateASFMultiplexer}}</strong>.</p> + + + + <p> </p><p>Initializes the multiplexer with the data from an {{ASF}} ContentInfo object.</p> + <p>This call must be made once at the beginning of encoding, with <em>pIContentInfo</em> pointing to the {{ASF}} ContentInfo object that describes the content to be encoded. This enables the {{ASF}} multiplexer to see, among other things, which streams will be present in the encoding session. This call typically does not affect the data in the {{ASF}} ContentInfo object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the <strong>{{MFASFContentInfo}}</strong> object that contains the header information of the new {{ASF}} file. The multiplexer will generate data packets for this file.</p> </dd> + + + + + <p> </p><p>Sets multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. These flags specify which multiplexer options to use. For more information, see "Multiplexer Initialization and Leaky Bucket Settings" in Creating the Multiplexer Object.</p> </dd> + + + + + <p> </p><p>Retrieves flags indicating the configured multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more values from the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. To set these flags, call <strong>{{IMFASFMultiplexer::SetFlags}}</strong>.</p> </dd> + + + + + <p> Delivers input samples to the multiplexer. </p> + <p> The application passes samples to <strong>ProcessSample</strong>, and the {{ASF}} multiplexer queues them internally until they are ready to be placed into {{ASF}} packets. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the {{ASF}} data packet. </p><p>After each call to <strong>ProcessSample</strong>, call <strong>GetNextPacket</strong> in a loop to get all of the available data packets. For a code example, see Generating New {{ASF}} Data Packets.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> There are too many packets waiting to be retrieved from the multiplexer. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the packets.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BANDWIDTH_OVERRUN}}</strong></dt> </dl> </td><td> <p> The sample that was processed violates the bandwidth limitations specified for the stream in the {{ASF}} ContentInfo object. When this error is generated, the sample is dropped. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The value passed in <em>wStreamNumber</em> is invalid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LATE_SAMPLE}}</strong></dt> </dl> </td><td> <p> The presentation time of the input media sample is earlier than the send time. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number of the stream to which the sample belongs. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The input sample contains the media data to be converted to {{ASF}} data packets. When possible, the time stamp of this sample should be accurate. </p> </dd> + + + <dd> <p> The adjustment to apply to the time stamp of the sample. This parameter is used if the caller wants to shift the sample time on <em>pISample</em>. This value should be positive if the time stamp should be pushed ahead and negative if the time stamp should be pushed back. This time stamp is added to sample time on <em>pISample</em>, and the resulting time is used by the multiplexer instead of the original sample time. If no adjustment is needed, set this value to 0. </p> </dd> + + + + + <p> </p><p>Retrieves the next output {{ASF}} packet from the multiplexer.</p> + <p> The client needs to call this method, ideally after every call to <strong>{{IMFASFMultiplexer::ProcessSample}}</strong>, to get the output {{ASF}} packets. Call this method in a loop as long as the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag is received. </p><p>If no packets are ready, the method returns <strong>{{S_OK}}</strong> but does not return a sample in <em>ppIPacket</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives zero or more status flags. If more than one packet is waiting, the method sets the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFSample}}</strong> interface of the first output sample of the data packet. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Signals the multiplexer to process all queued output media samples. Call this method after passing the last sample to the multiplexer.</p> + <p>You must call <strong>Flush</strong> after the last sample has been passed into the {{ASF}} multiplexer and before you call <strong>{{IMFASFMultiplexer::End}}</strong>. This causes all output media samples in progress to be completed. After calling <strong>Flush</strong>, call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> in a loop until all the pending media samples have been packetized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Collects data from the multiplexer and updates the {{ASF}} ContentInfo object to include that information in the {{ASF}} Header Object.</p> + <p>For non-live encoding scenarios (such as encoding to a file), the user should call <strong>End</strong> to update the specified ContentInfo object, adding data that the multiplexer has collected during the packet generation process. The user should then call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and write the output header at the beginning of the {{ASF}} file (overwriting the header obtained at the beginning of the encoding session). For more information, see Writing an {{ASF}} Header Object for a New File.</p><p>During live encoding, it is usually not possible to rewrite the header, so this call is not required for live encoding. (The header in those cases will simply lack some of the information that was not available until the end of the encoding session.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_FLUSH_NEEDED}}</strong></dt> </dl> </td><td> <p>There are pending output media samples waiting in the multiplexer. Call <strong>{{IMFASFMultiplexer::Flush}}</strong> to force the media samples to be packetized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object. This must be the same object that was used to initialize the multiplexer. The ContentInfo object represents the {{ASF}} Header Object of the file for which the multiplexer generated data packets.</p> </dd> + + + + + <p> </p><p>Retrieves multiplexer statistics.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain statistics.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ASF_MUX_STATISTICS}}</strong> structure that receives the statistics.</p> </dd> + + + + + <p> </p><p>Sets the maximum time by which samples from various streams can be out of synchronization. The multiplexer will not accept a sample with a time stamp that is out of synchronization with the latest samples from any other stream by an amount that exceeds the synchronization tolerance.</p> + <p>The synchronization tolerance is the maximum difference in presentation times at any given point between samples of different streams that the {{ASF}} multiplexer can accommodate. That is, if the synchronization tolerance is 3 seconds, no stream can be more than 3 seconds behind any other stream in the time stamps passed to the multiplexer. The multiplexer determines a default synchronization tolerance to use, but this method overrides it (usually to increase it). More tolerance means the potential for greater latency in the multiplexer. If the time stamps are synchronized among the streams, actual latency will be much lower than <em>msSyncTolerance</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Synchronization tolerance in milliseconds.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets indexer options.</p> + <p><strong>{{IMFASFIndexer::SetFlags}}</strong> must be called before <strong>{{IMFASFIndexer::Initialize}}</strong>. Attempting to call <strong>SetFlags</strong> after <strong>Initialize</strong> will return {{MF_E_INVALIDREQUEST}} as a result.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The indexer object was initialized before setting flags for it. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration specifying the indexer options to use.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes the indexer object. This method reads information in a ContentInfo object about the configuration of the content and the properties of the existing index, if present. Use this method before using the indexer for either writing or reading an index. You must make this call before using any of the other methods of the <strong>{{IMFASFIndexer}}</strong> interface.</p> + <p>The indexer needs to examine the data in the ContentInfo object to properly write or read the index for the content. The indexer will not make changes to the content information and will not hold any references to the <strong>{{IMFASFContentInfo}}</strong> interface.</p><p>In the {{ASF}} header, the maximum data-packet size must equal the minimum data-packet size. Otherwise, the method returns <strong>{{MF_E_UNEXPECTED}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>Invalid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>Unexpected error.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the offset of the index object from the start of the content.</p> + <p>The index continues from the offset retrieved by this method to the end of the file.</p><p>You must call <strong>{{IMFASFIndexer::Initialize}}</strong> to set up the indexer before calling this method.</p><p>If the index is retrieved by using more than one call to <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong>, the position of individual index portions is equal to the index offset plus the offset of the portion within the index.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pIContentInfo</em> is <strong>{{NULL}}</strong> or <em>pcbIndexOffset</em> is <strong>{{NULL}}</strong></p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + <dd> <p>Receives the offset of the index relative to the beginning of the content described by the ContentInfo object. This is the position relative to the beginning of the {{ASF}} file.</p> </dd> + + + + + <p> </p><p>Adds byte streams to be indexed.</p> + <p>For a reading scenario, only one byte stream should be used by the indexer object. For an index generating scenario, it depends how many index objects are needed to be generated. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer object has already been initialized and it has packets which have been indexed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of <strong>{{IMFByteStream}}</strong> interface references. To get the byte stream, call <strong>{{MFCreateASFIndexerByteStream}}</strong>.</p> </dd> + + + <dd> <p>The number of references in the <em>ppIByteStreams</em> array.</p> </dd> + + + + + <p> </p><p>Retrieves the number of byte streams that are in use by the indexer object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pcByteStreams</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of byte streams that are in use by the indexer object.</p> </dd> + + + + + <p> </p><p>Retrieves the index settings for a specified stream and index type.</p> + <p>To read an existing {{ASF}} index, call <strong>{{IMFASFIndexer::SetIndexByteStreams}}</strong> before calling this method.</p><p>If an index exists for the stream and the value passed into <em>pcbIndexDescriptor</em> is smaller than the required size of the <em>pbIndexDescriptor</em> buffer, the method returns {{MF_E_BUFFERTOOSMALL}}. The required buffer size is returned in the <em>pcbIndexDescriptor</em> parameter.</p><p>If there is no index for the specified stream, the method returns <strong>{{FALSE}}</strong> in the <em>pfIsIndexed</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer size specified in <em>pcbIndexDescriptor</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that contains the stream number and index type for which to get the status.</p> </dd> + + + <dd> <p>A variable that retrieves a Boolean value specifying whether the index described by <em>pIndexIdentifier</em> has been created.</p> </dd> + + + <dd> <p>A buffer that receives the index descriptor. The index descriptor consists of an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>On input, specifies the size, in bytes, of the buffer that <em>pbIndexDescriptor</em> points to. The value can be zero if <em>pbIndexDescriptor</em> is <strong>{{NULL}}</strong>. On output, receives the size of the index descriptor, in bytes.</p> </dd> + + + + + <p> </p><p>Configures the index for a stream.</p> + <p>You must make all calls to <strong>SetIndexStatus</strong> before making any calls to <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong>.</p><p>The indexer object is configured to create temporal indexes for each stream by default. Call this method only if you want to override the default settings.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>At attempt was made to change the index status in a seek-only scenario. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index descriptor to set. The index descriptor is an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>The size, in bytes, of the index descriptor.</p> </dd> + + + <dd> <p>A Boolean value. Set to <strong>{{TRUE}}</strong> to have the indexer create an index of the type specified for the stream specified in the index descriptor.</p> </dd> + + + + + <p> Given a desired seek time, gets the offset from which the client should start reading data. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The requested seek time is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_INDEX}}</strong></dt> </dl> </td><td> <p> No index exists of the specified type for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The value of the index entry for which to get the position. The format of this value varies depending on the type of index, which is specified in the index identifier. For time-based indexing, the variant type is <strong>{{VT_I8}}</strong> and the value is the desired seek time, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and index type. </p> </dd> + + + <dd> <p> Receives the offset within the data segment of the {{ASF}} Data Object. The offset is in bytes, and is relative to the start of packet 0. The offset gives the starting location from which the client should begin reading from the stream. This location might not correspond exactly to the requested seek time. </p> <p> For reverse playback, if no key frame exists after the desired seek position, this parameter receives the value <strong>{{MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT}}</strong>. In that case, the seek position should be 1 byte pass the end of the data segment. </p> </dd> + + + <dd> <p> Receives the approximate time stamp of the data that is located at the offset returned in the <em>pcbOffsetWithinData</em> parameter. The accuracy of this value is equal to the indexing interval of the {{ASF}} index, typically about 1 second. </p> <ul> <li> If the index type specified in <em>pIndexIdentifier</em> is <strong>{{GUID_NULL}}</strong> (time indexing), this parameter can be <strong>{{NULL}}</strong>. </li> <li> For all other index types, this parameter must be <strong>{{NULL}}</strong>. </li> </ul> <p> If the approximate time stamp cannot be determined, this parameter receives the value <strong>{{MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN}}</strong>. </p> </dd> + + + <dd> <p> Receives the payload number of the payload that contains the information for the specified stream. Packets can contain multiple payloads, each containing data for a different stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Accepts an {{ASF}} packet for the file and creates index entries for them.</p> + <p>The {{ASF}} indexer creates indexes for a file internally. You can get the completed index for all data packets sent to the indexer by committing the index with <strong>{{IMFASFIndexer::CommitIndex}}</strong> and then calling <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the index entries into a media buffer. To determine the size of the index so you can allocate a buffer large enough to hold the index, call <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>.</p><p> When this method creates index entries, they are immediately available for use by <strong>{{IMFASFIndexer::GetSeekPositionForValue}}</strong>. </p><p> The media sample specified in <em>pIASFPacketSample</em> must hold a buffer that contains a single {{ASF}} packet. Get the sample from the {{ASF}} multiplexer by calling the <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> method. </p><p>You cannot use this method while reading an index, only when writing an index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The argument passed in is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of a media sample that contains the {{ASF}} packet. </p> </dd> + + + + + <p> </p><p>Adds information about a new index to the ContentInfo object associated with {{ASF}} content. You must call this method before copying the index to the content so that the index will be readable by the indexer later.</p> + <p>For the index to function properly, you must call this method after all {{ASF}} packets in the file have been passed to the indexer by using the <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong> method. After you call this method, you must retrieve the indexes by calling <strong>GetCompletedIndex</strong> and write them to the appropriate location in the file. Finally, you must generate a new {{ASF}} header by calling the <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> method of the {{ASF}} ContentInfo object.</p><p> An application must use the <strong>CommitIndex</strong> method only when writing a new index otherwise <strong>CommitIndex</strong> may return {{MF_E_INVALIDREQUEST}} as a result. For example, {{MF_E_INVALIDREQUEST}} is returned if the application has flags other than {{MFASF_INDEXER_WRITE_NEW_INDEX}} set on the indexer object. <strong>CommitIndex</strong> can also return {{MFASF_INDEXER_WRITE_NEW_INDEX}} if the index entries have already been committed through an earlier <strong>CommitIndex</strong> call.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The caller made an invalid request. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + + + <p> </p><p>Retrieves the size, in bytes, of the buffer required to store the completed index.</p> + <p>Use this method to get the size of the index and then allocate a buffer big enough to hold it. </p><p>The index must be committed with a call to<strong>{{IMFASFIndexer::CommitIndex}}</strong> before calling <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>. If the index is not committed before <strong>GetIndexWriteSpace</strong> is called, then {{MF_E_INDEX_NOT_COMMITTED}} will be returned as a result. </p><p>Call <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the completed index into a media buffer.</p><p>You cannot use this method in a reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index has not been committed. For more information; see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the index, in bytes</p> </dd> + + + + + <p> </p><p>Retrieves the completed index from the {{ASF}} indexer object.</p> + <p>This method uses as much of the buffer as possible, and updates the length of the buffer appropriately.</p><p>If <em>pIIndexBuffer</em> is large enough to contain the entire buffer, <em>cbOffsetWithinIndex</em> should be 0, and the call needs to be made only once. Otherwise, there should be no gaps between successive buffers.</p><p>The user must write this data to the content at <em>cbOffsetFromIndexStart</em> bytes after the end of the {{ASF}} data object. You can call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong> to determine the start position of the {{ASF}} index.</p><p>This call will not succeed unless <strong>{{IMFASFIndexer::CommitIndex}}</strong> has been called. After calling <strong>GetCompletedIndex</strong>, the caller must call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and overwrite the existing {{ASF}} header with the new header; otherwise, the {{ASF}} header will not match the content, and the file is not guaranteed to play correctly.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index was not committed before attempting to get the completed index. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a media buffer that receives the index data.</p> </dd> + + + <dd> <p>The offset of the data to be retrieved, in bytes from the start of the index data. Set to 0 for the first call. If subsequent calls are needed (the buffer is not large enough to hold the entire index), set to the byte following the last one retrieved.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams that are in the Advanced Systems Format ({{ASF}}) content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the content.</p> </dd> + + + + + <p> </p><p>Retrieves the number of outputs for the Advanced Systems Format ({{ASF}}) content.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of outputs.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve the stream count.</p> </dd> + + + <dd> <p>Receives the number of streams associated with the output.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers for all of the streams that are associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve stream numbers.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers associated with the output. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetOutputStreamCount}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the output number associated with a stream.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to retrieve an output number.</p> </dd> + + + <dd> <p>Receives the output number.</p> </dd> + + + + + <p> </p><p>Retrieves the manual output override selection that is set for a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number for which to retrieve the output override selection.</p> </dd> + + + <dd> <p>Receives the output override selection. The value is a member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the selection status of an output, overriding other selection criteria.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to set selection.</p> </dd> + + + <dd> <p>Member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration specifying the level of selection for the output.</p> </dd> + + + + + <p> </p><p>Retrieves the number of mutual exclusion objects associated with an output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve the count of mutually exclusive relationships.</p> </dd> + + + <dd> <p>Receives the number of mutual exclusions.</p> </dd> + + + + + <p> </p><p>Retrieves a mutual exclusion object for an output.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve a mutual exclusion object.</p> </dd> + + + <dd> <p>Mutual exclusion number. This is an index of mutually exclusive relationships associated with the output. Set to a number between 0, and 1 less than the number of mutual exclusion objects retrieved by calling <strong>{{IMFASFStreamSelector::GetOutputMutexCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the mutual exclusion object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a mutual exclusion record to use for a mutual exclusion object associated with an output.</p> + <p>An output is a stream in an Advanced Systems Format ({{ASF}}) data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p><p>An {{ASF}} file can contain multiple mutually exclusive relationships, such as a file with both language based and bit-rate based mutual exclusion. If an output is involved in multiple mutually exclusive relationships, a record from each must be selected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to set a stream.</p> </dd> + + + <dd> <p>Index of the mutual exclusion for which to select.</p> </dd> + + + <dd> <p>Record of the specified mutual exclusion to select.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers that apply to a bandwidth step. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for {{MBR}} content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bandwidth step number for which to retrieve information. Set this value to a number between 0, and 1 less than the number of bandwidth steps returned by <strong>{{IMFASFStreamSelector::GetBandwidthStepCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the bit rate associated with the bandwidth step.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + <dd> <p>Address of an array that receives the selection status of each stream, as an <strong>{{ASF_SELECTION_STATUS}}</strong> value. The members of this array correspond to the members of the <em>rgwStreamNumbers</em> array by index. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + + + <p> </p><p>Retrieves the index of a bandwidth step that is appropriate for a specified bit rate. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>In a streaming multiple bit rate ({{MBR}}) scenario, call this method with the current data rate of the network connection to determine the correct step to use. You can also call this method periodically throughout streaming to ensure that the best step is used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The bit rate to find a bandwidth step for.</p> </dd> + + + <dd> <p>Receives the step number. Use this number to retrieve information about the step by calling <strong>{{IMFASFStreamSelector::GetBandwidthStep}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets options for the stream selector.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_STREAMSELECTOR_FLAGS}}</strong> enumeration specifying the options to use.</p> </dd> + + + + + <p>Configures Windows Media Digital Rights Management ({{DRM}}) for Network Devices on a network sink.</p><p> The Advanced Systems Format ({{ASF}}) streaming media sink exposes this interface. To get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface, perform the following tasks.</p><ol> <li>Get the activation object for the {{ASF}} streaming media sink by calling <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>.</li> <li>Create the media sink by calling the activation object <strong>ActivateObject</strong> method.</li> <li>Get an <strong>{{IMFDRMNetHelper}}</strong> reference by calling <strong>QueryInterface</strong> on the media sink.</li> </ol><p>For more information, see Remarks.</p> + <p>To stream protected content over a network, the <em>{{ASF}} streaming media sink</em> provides an output trust authority ({{OTA}}) that supports Windows Media {{DRM}} for Network Devices and implements the <strong>{{IMFDRMNetHelper}}</strong> interface. For this {{OTA}}, encryption occurs on each frame before multiplexing. The license request and response process takes place in the media sink.</p><p>The application gets a reference to <strong>{{IMFDRMNetHelper}}</strong> and uses the methods to handle the license request and response. The application is also responsible for sending the license to the client.</p><p>To stream the content, the application does the following:</p><ol> <li>Provide the {{HTTP}} byte stream to which the media sink writes the streamed content. <p>To stream {{DRM}}-protected content over a network from a server to a client, an application must use the Microsoft Media Foundation Protected Media Path ({{PMP}}). The media sink and the application-provided {{HTTP}} byte stream exist in mfpmp.exe. Therefore, the byte stream must expose the <strong>{{IMFActivate}}</strong> interface so that it can be created out-of-process.</p><strong>Note</strong>??This might affect how the code is packaged. The {{DLL}} that contains the {{HTTP}} byte stream and other dependent {{DLLs}} must be signed for the Protected Environment ({{PE}}-signed). ? </li> <li>Set the <strong>{{MFPKEY_ASFMEDIASINK_DRMACTION}}</strong> property to <strong>{{MFSINK_WMDRMACTION_TRANSCRYPT}}</strong>. The media sink's property store is available to the application through the {{ASF}} ContentInfo. To get the property store, call <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>.</li> <li>Get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface by querying the media sink.</li> <li>To make a license request, call <strong>{{IMFDRMNetHelper::ProcessLicenseRequest}}</strong>. This method calls into the {{OTA}} implementation and retrieves the license.<p>When the clock starts for the first time or restarts , the encrypter that is used for encrypting samples is retrieved, and the license response is cached.</p> </li> <li>To get the cached license response, call <strong>{{IMFDRMNetHelper::GetChainedLicenseResponse}}</strong>.</li> </ol> + + + + <p>Gets the license response for the specified request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. +</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte array that contains the license request.</p> </dd> + + + <dd> <p>Size, in bytes, of the license request.</p> </dd> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + <dd> <p>Receives the key identifier. The caller must release the string by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Not implemented in this release.</p> + <p>The method returns <strong>{{E_NOTIMPL}}</strong>.</p> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Header Object object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an {{ASF}} profile object from a presentation descriptor.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor that contains the profile information.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor from an {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface of the {{ASF}} profile object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Splitter.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} Multiplexer.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMultiplexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Indexer object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFIndexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a byte stream to access the index in an {{ASF}} stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table:</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The call succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The offset specified in <em>cbIndexStartOffset</em> is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream that contains the {{ASF}} stream.</p> </dd> + + + <dd> <p>Byte offset of the index within the {{ASF}} stream. To get this value, call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. Use this interface to read from the index or write to the index. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} stream selector.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamSelector}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream that will be used to write the {{ASF}} stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an activation object that can be used to create the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string that contains the output file name.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFASFContentInfo}}</strong> interface of an initialized {{ASF}} Header Object object. Use this interface to configure the {{ASF}} media sink.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Video ({{WMV}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Audio ({{WMA}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. </p> + <p>To create the {{ASF}} streaming sink in another process, call <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>. </p><p>An application can get a reference to the {{ASF}} ContentInfo Object by calling <strong>{{IUnknown::QueryInterface}}</strong> on the media sink object received in the <em>ppIMediaSink</em> parameter. The ContentInfo object is used to set the encoder configuration settings, provide stream properties supplied by an {{ASF}} profile, and add metadata information. These configuration settings populate the various {{ASF}} header objects of the encoded {{ASF}} file. For more information, see +Setting Properties in the ContentInfo Object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a byte stream object in which the {{ASF}} media sink writes the streamed content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{ASF}} streaming-media sink object. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> on the received reference. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. The activation object can be used to create the {{ASF}} streaming sink in another process.</p> + <p>Starting in Windows?7, Media Foundation provides an {{ASF}} streaming sink that writes the content in a live streaming scenario. This function should be used in secure transcode scenarios where this media sink needs to be created and configured in the remote +process. Like the {{ASF}} file sink, the new media sink performs {{ASF}} related tasks such as writing the {{ASF}} header, generating data packets (muxing). The content is written to a caller-implemented byte stream such as an {{HTTP}} byte stream. +The caller must also provide an activation object that media sink can use to create the byte stream remotely. </p><p>In addition, it performs transcryption for streaming protected content. It hosts the Windows Media Digital Rights Management ({{DRM}}) for Network Devices Output Trust Authority ({{OTA}}) that handles the license request and response. For more information, see <strong>{{IMFDRMNetHelper}}</strong> interface.</p><p>The new media sink does not perform any time adjustments. If the clock seeks, the timestamps are not changed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream object. The byte stream exposes the <strong>{{IMFByteStream}}</strong> interface. The {{ASF}} streaming sink will write data to this byte stream.</p> </dd> + + + <dd> <p>A reference to an {{ASF}} ContentInfo Object that contains the properties that describe the {{ASF}} content. These settings can contain stream settings, encoding properties, and metadata. For more information about these properties, see Setting Properties in the ContentInfo Object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface of the activation object that is used to create the {{ASF}} streaming-media sink. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> by using the received reference. The <strong>ActivateObject</strong> method also calls <strong>{{IMFActivate::Activate}}</strong> on the byte stream activate object specified by <em>pByteStreamActivate</em>, to create it so that the media sink can write streamed content in the byte stream. The caller must release the <strong>{{IMFActivate}}</strong> interface reference of the media sink activation object received in <em>ppIActivate</em>.</p> </dd> + + + + + <p>Specifies the type of work queue for the <strong>{{MFAllocateWorkQueueEx}}</strong> function to create.</p> + + + + <p> Specifies the status of a topology during playback. </p> + <p> This enumeration is used with the {{MESessionTopologyStatus}} event. The {{MESessionTopologyStatus}} event always has an <strong>{{MF_EVENT_TOPOLOGY_STATUS}}</strong> attribute whose value is a member of this enumeration. </p><p> For a single topology, the Media Session sends these status flags in numerical order, starting with <strong>{{MF_TOPOSTATUS_READY}}</strong>. However, there is no guarantee about the ordering of the events across two different topologies. For example, you might get <strong>{{MF_TOPOSTATUS_READY}}</strong> for a topology before you get <strong>{{MF_TOPOSTATUS_ENDED}}</strong> for the previous topology. </p> + + + <dd> <p> This value is not used. </p> </dd> + + + <dd> <p> The topology is ready to start. After this status flag is received, you can use the Media Session's <strong>{{IMFGetService::GetService}}</strong> method to query the topology for services, such as rate control. </p> </dd> + + + <dd> <p> The Media Session has started to read data from the media sources in the topology. </p> </dd> + + + <dd> <p>The Media Session modified the topology, because the format of a stream changed.</p> </dd> + + + <dd> <p> The media sinks have switched from the previous topology to this topology. This status value is not sent for the first topology that is played. For the first topology, the {{MESessionStarted}} event indicates that the media sinks have started receiving data. </p> </dd> + + + <dd> <p> Playback of this topology is complete. The Media Session might still use the topology internally. The Media Session does not completely release the topology until it sends the next <strong>{{MF_TOPOSTATUS_STARTED_SOURCE}}</strong> status event or the {{MESessionEnded}} event. </p> </dd> + + + + + <p>Contains flags for registering and enumeration Media Foundation transforms ({{MFTs}}).</p><p>These flags are used in the following functions:</p><ul> <li> <strong>{{MFTEnumEx}}</strong>: These flags control which Media Foundation transforms ({{MFTs}}) are enumerated, as well as the enumeration order.</li> <li> <strong>{{MFTRegister}}</strong>: A subset of these flags are used when registering an {{MFT}}.</li> </ul> + <p>For registration, these flags describe the {{MFT}} that is being registered. Some flags do not apply in that context. For enumeration, these flags control which {{MFTs}} are selected in the enumeration. For more details about the precise meaning of these flags, see the reference topics for <strong>{{MFTRegister}}</strong> and <strong>{{MFTEnumEx}}</strong> </p><p>For registration, the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>, <strong>{{MFT_ENUM_FLAG_ASYNCMFT}}</strong>, and <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flags are mutually exclusive. For enumeration, these three flags can be combined.</p> + + + + <p>Describes the type of data provided by a frame source.</p> + <p>The values of this enumeration are used with the {{MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPES}} attribute.</p> + + + <dd> <p>The frame source provides color data.</p> </dd> + + + <dd> <p>The frame source provides infrared data.</p> </dd> + + + <dd> <p>The frame source provides depth data.</p> </dd> + + + <dd> <p>The frame source provides custom data.</p> </dd> + + + + + <p>Specifies how 3D video frames are stored in memory.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_3D_FORMAT}} attribute.</p> + + + <dd> <p>The base view is stored in a single buffer. The other view is discarded.</p> </dd> + + + <dd> <p>Each media sample contains multiple buffers, one for each view.</p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed side-by-side into a single frame. </p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed top-and-bottom into a single frame. </p> </dd> + + + + + <p>Specifies how a 3D video frame is stored in a media sample.</p> + <p>This enumeration is used with the {{MFSampleExtension_3DVideo_SampleFormat}} attribute.</p><p>The exact layout of the views in memory is specified by the following media type attributes:</p><ul> <li> {{MF_MT_VIDEO_3D_FORMAT}} </li> <li> {{MF_MT_VIDEO_3D_FIRST_IS_LEFT}} </li> <li> {{MF_MT_VIDEO_3D_LEFT_IS_BASE}} </li> <li> {{MF_MT_VIDEO_3D_NUM_VIEWS}} </li> </ul> + + + <dd> <p>Each view is stored in a separate buffer. The sample contains one buffer per view.</p> </dd> + + + <dd> <p>All of the views are stored in the same buffer. The sample contains a single buffer. </p> </dd> + + + + + <p>Describes the rotation of the video image in the counter-clockwise direction.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_ROTATION}} attribute.</p> + + + <dd> <p>The image is not rotated.</p> </dd> + + + <dd> <p>The image is rotated 90 degrees counter-clockwise.</p> </dd> + + + <dd> <p>The image is rotated 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated 270 degrees counter-clockwise.</p> </dd> + + + + + + + + <p>Specifies the type of copy protection required for a video stream. </p> + <p>Use these flags with the <strong>{{MF_MT_DRM_FLAGS}}</strong> attribute.</p> + + + <dd> <p>No copy protection is required. </p> </dd> + + + <dd> <p>Analog copy protection should be applied. </p> </dd> + + + <dd> <p>Digital copy protection should be applied. </p> </dd> + + + + + <p> </p><p>Specifies whether to pad a video image so that it fits within a specified aspect ratio.</p> + <p>Use these flags with the <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> attribute.</p> + + + <dd> <p>Do not pad the image.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 4?3 area.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 16?9 area.</p> </dd> + + + + + <p> </p><p>Describes the intended aspect ratio for a video stream.</p> + <p>Use these flags with the <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> attribute.</p> + + + <dd> <p>The aspect ratio is unknown.</p> </dd> + + + <dd> <p>The source is 16?9 content encoded within a 4?3 area.</p> </dd> + + + <dd> <p>The source is 2.35:1 content encoded within a 16?9 or 4?3 area.</p> </dd> + + + + + <p> </p><p>Contains flags that specify how to convert an audio media type.</p> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEX}}</strong> structure if possible, or a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure otherwise.</p> </dd> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> </dd> + + + + + + + + <p>Provides information on a screen-to-screen move and a dirty rectangle copy operation.</p> + + + <dd> <p>A <strong>{{POINT}}</strong> structure that describes the source (<em>x, y</em>) point where the source rectangle is copied from.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure that contains the destination rectangle where the dirty rectangle is copied to.</p> </dd> + + + + + + + + + + + <p>Defines a regions of interest. </p> + + + <dd> <p>The bounds of the region.</p> </dd> + + + <dd> <p>Specifies the quantization parameter delta for the specified region from the rest of the frame.</p> </dd> + + + + + <p>The <strong>FaceRectInfoBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceRectInfo</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceRectInfo</strong> structures in the blob.</p> </dd> + + + + + <p>The <strong>FaceRectInfo</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute contains the face rectangle info detected by the driver. By default driver\{{MFT0}} should provide the face information on preview stream. If the driver advertises the capability on other streams, driver\{{MFT}} must provide the face info on the corresponding streams if the application enables face detection on those streams. When video stabilization is enabled on the driver, the face information should be provided post-video stabilization. The dominate face must be the first <strong>FaceRectInfo</strong> in the blob.</p><p>The <strong>FaceRectInfoBlobHeader</strong> and <strong>FaceRectInfo</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute. The metadata item structure for face {{ROIs}} (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face {{ROIs}} metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Relative coordinates on the frame that face detection is running ({{Q31}} format).</p> </dd> + + + <dd> <p>Confidence level of the region being a face (0 - 100).</p> </dd> + + + + + <p>The <strong>FaceCharacterizationBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceCharacterization</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceCharacterization</strong> structures in the blob. Must match the number of <strong>FaceRectInfo</strong> structures in <strong>FaceRectInfoBlobHeader</strong>.</p> </dd> + + + + + <p>The <strong>FaceCharacterization</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute contains the blink and facial expression state for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that does not support blink or facial expression detection, this attribute should be omitted.</p><p>The facial expressions that can be detected are defined as follows:</p><pre>#define {{MF_METADATAFACIALEXPRESSION_SMILE}} 0x00000001</pre><p>The <strong>FaceCharacterizationBlobHeader</strong> and <strong>FaceCharacterization</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute. The metadata item structure for the face characterizations (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face characterizations metadata payload) is up to driver and must be 8-byte aligned. </p> + + + <dd> <p>0 indicates no blink for the left eye, 100 indicates definite blink for the left eye (0 - 100).</p> </dd> + + + <dd> <p>0 indicates no blink for the right eye, 100 indicates definite blink for the right eye (0 - 100).</p> </dd> + + + <dd> <p>A defined facial expression value.</p> </dd> + + + <dd> <p>0 indicates no such facial expression as identified, 100 indicates definite such facial expression as defined (0 - 100).</p> </dd> + + + + + <p>This structure contains blob information for the {{EV}} compensation feedback for the photo captured.</p> + + + <dd> <p>A {{KSCAMERA_EXTENDEDPROP_EVCOMP_XXX}} step flag.</p> </dd> + + + <dd> <p>The {{EV}} compensation value in units of the step specified.</p> </dd> + + + + + <p>The CapturedMetadataISOGains structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong>.</p> + <p>The <strong>CapturedMetadataISOGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong> attribute. The metadata item structure for {{ISO}} gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + {{ISO}} gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>This structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. </p> + <p>The <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute contains the white balance gains applied to R, G, B by the sensor or {{ISP}} when the preview frame was captured. This is a unitless.</p><p>The <strong>CapturedMetadataWhiteBalanceGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. The metadata item structure for white balance gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + white balance gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>The <strong>R</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>G</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>B</strong> value of the blob.</p> </dd> + + + + + <p>The <strong>MetadataTimeStamps</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute contains the time stamp information for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that cannot provide the time stamp for face {{ROIs}}, this attribute should be omitted.</p><p>For the <strong>Flags</strong> field, the following bit flags indicate which time stamp is valid:</p><pre>#define {{MF_METADATATIMESTAMPS_DEVICE}} 0x00000001 +#define {{MF_METADATATIMESTAMPS_PRESENTATION}} 0x00000002</pre><p>{{MFT0}} must set <strong>Flags</strong> to <strong>{{MF_METADATATIEMSTAMPS_DEVICE}}</strong> and the appropriate {{QPC}} time for <strong>Device</strong>, if the driver provides the timestamp metadata for the face {{ROIs}}.</p><p>The <strong>MetadataTimeStamps</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute. The metadata item structure for timestamp (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + timestamp metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Bitwise {{OR}} of the <strong>{{MF_METADATATIMESTAMPS_}}*</strong> flags.</p> </dd> + + + <dd> <p>{{QPC}} time for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + <dd> <p>{{PTS}} for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + + + <p>The <strong>HistogramGrid</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + + + <dd> <p>Width of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Height of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Absolute coordinates of the region on the sensor output that the histogram is collected for.</p> </dd> + + + + + <p>The <strong>HistogramBlobHeader</strong> structure describes the blob size and the number of histograms in the blob for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute.</p> + + + <dd> <p>Size of the entire histogram blob in bytes.</p> </dd> + + + <dd> <p>Number of histograms in the blob. Each histogram is identified by a <strong>HistogramHeader</strong>.</p> </dd> + + + + + <p>The <strong>HistogramHeader</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute contains a histogram when a preview frame is captured.</p><p>For the <strong>ChannelMasks</strong> field, the following bitmasks indicate the available channels in the histogram:</p><pre>#define {{MF_HISTOGRAM_CHANNEL_Y}} 0x00000001 +#define {{MF_HISTOGRAM_CHANNEL_R}} 0x00000002 +#define {{MF_HISTOGRAM_CHANNEL_G}} 0x00000004 +#define {{MF_HISTOGRAM_CHANNEL_B}} 0x00000008 +#define {{MF_HISTOGRAM_CHANNEL_Cb}} 0x00000010 +#define {{MF_HISTOGRAM_CHANNEL_Cr}} 0x00000020</pre><p>Each blob can contain multiple histograms collected from different regions or different color spaces of the same frame. Each histogram in the blob is identified by its own <strong>HistogramHeader</strong>. Each histogram has its own region and sensor output size associated. For full frame histogram, the region will match the sensor output size specified in <strong>HistogramGrid</strong>.</p><p>Histogram data for all available channels are grouped under one histogram. Histogram data for each channel is identified by a <strong>HistogramDataHeader</strong> immediate above the data. <strong>ChannelMasks</strong> indicate how many and what channels are having the histogram data, which is the bitwise {{OR}} of the supported <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks as defined above. <strong>ChannelMask</strong> indicates what channel the data is for, which is identified by any one of the <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks.</p><p>Histogram data is an array of <strong>{{ULONG}}</strong> with each entry representing the number of pixels falling under a set of tonal values as categorized by the bin. The data in the array should start from bin 0 to bin N-1, where N is the number of bins in the histogram, for example, <strong>HistogramBlobHeader.Bins</strong>.</p><p>For Windows?10, if <strong>{{KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM}}</strong> is supported, at minimum a full frame histogram with Y channel must be provided which should be the first histogram in the histogram blob. +Note that <strong>HistogramBlobHeader</strong>, <strong>HistogramHeader</strong>, <strong>HistogramDataHeader</strong> and Histogram data only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. The metadata item structure for the histogram (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + all histogram metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Size of this header + (<strong>HistogramDataHeader</strong> + histogram data following) * number of channels available.</p> </dd> + + + <dd> <p>Number of bins in the histogram.</p> </dd> + + + <dd> <p>Color space that the histogram is collected from</p> </dd> + + + <dd> <p>Masks of the color channels that the histogram is collected for.</p> </dd> + + + <dd> <p>Grid that the histogram is collected from.</p> </dd> + + + + + <p>The <strong>HistogramDataHeader</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. </p> + + + <dd> <p>Size in bytes of this header + all following histogram data.</p> </dd> + + + <dd> <p>Mask of the color channel for the histogram data.</p> </dd> + + + <dd> <p>1 if linear, 0 if nonlinear.</p> </dd> + + + + + <p> </p><p>Contains coefficients used to transform multichannel audio into a smaller number of audio channels. This process is called <em>fold-down</em>.</p> + <p>To specify this information in the media type, set the <strong>{{MF_MT_AUDIO_FOLDDOWN_MATRIX}}</strong> attribute.</p><p>The {{ASF}} media source supports fold-down from six channels (5.1 audio) to two channels (stereo). It gets the information from the g_wszFold6To2Channels3 attribute in the {{ASF}} header. This attribute is documented in the Windows Media Format {{SDK}} documentation.</p> + + + <dd> <p>Size of the structure, in bytes.</p> </dd> + + + <dd> <p>Number of source channels.</p> </dd> + + + <dd> <p>Number of destination channels.</p> </dd> + + + <dd> <p>Specifies the assignment of audio channels to speaker positions in the transformed audio. This member is a bitwise <strong>{{OR}}</strong> of flags that define the speaker positions. For a list of valid flags, see <strong>{{MF_MT_AUDIO_CHANNEL_MASK}}</strong> attribute.</p> </dd> + + + <dd> <p>Array that contains the fold-down coefficients. The number of coefficients is <strong>cSrcChannels</strong>?<strong>cDstChannels</strong>. If the number of coefficients is less than the size of the array, the remaining elements in the array are ignored. For more information about how the coefficients are applied, see Windows Media Audio Professional Codec Features.</p> </dd> + + + + + <p> </p><p>Defines custom color primaries for a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This structure is used with the <strong>{{MF_MT_CUSTOM_VIDEO_PRIMARIES}}</strong> attribute.</p> + + + <dd> <p>Red x-coordinate.</p> </dd> + + + <dd> <p>Red y-coordinate.</p> </dd> + + + <dd> <p>Green x-coordinate.</p> </dd> + + + <dd> <p>Green y-coordinate.</p> </dd> + + + <dd> <p>Blue x-coordinate.</p> </dd> + + + <dd> <p>Blue y-coordinate.</p> </dd> + + + <dd> <p>White point x-coordinate.</p> </dd> + + + <dd> <p>White point y-coordinate.</p> </dd> + + + + + <p>Contains format data for a binary stream in an Advanced Streaming Format ({{ASF}}) file.</p> + <p>This structure is used with the {{MF_MT_ARBITRARY_HEADER}} media type attribute.</p><p>This structure corresponds to the first 60 bytes of the Type-Specific Data field of the Stream Properties Object, in files where the stream type is {{ASF_Binary_Media}}. For more information, see the {{ASF}} specification.</p><p>The Format Data field of the Type-Specific Data field is contained in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type.</p> + + + <dd> <p>Major media type. This value is the {{GUID}} stored in the Major Media Type field of the Type-Specific Data field of the {{ASF}} file. It might not match the major type {{GUID}} from the Media Foundation media type. </p> </dd> + + + <dd> <p>Media subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples have a fixed size in bytes. Otherwise, samples have variable size.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the data in this stream uses temporal compression. Otherwise, samples are independent of each other.</p> </dd> + + + <dd> <p>If <strong>bFixedSizeSamples</strong> is <strong>{{TRUE}}</strong>, this member specifies the sample size in bytes. Otherwise, the value is ignored and should be 0.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This {{GUID}} identifies the structure of the additional format data, which is stored in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type. If no additional format data is present, <strong>formattype</strong> equals {{GUID_NULL}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with two components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with three components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A four dimensional vector, used to represent a rotation.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + <dd> <p>W component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A transform describing the location of a camera relative to other cameras or an established external reference.</p> + <p>The <strong>Position</strong> value should be expressed in real-world coordinates in units of meters. The coordinate system of both position and orientation should be right-handed Cartesian as shown in the following diagram. </p><strong>Important</strong>??<p>The position and orientation are expressed as transforms toward the reference frame or origin. For example, a <strong>Position</strong> value of {-5, 0, 0} means that the origin is 5 meters to the left of the sensor, and therefore the sensor is 5 meters to the right of the origin. A sensor that is positioned 2 meters above the origin should specify a <strong>Position</strong> of {0, -2, 0} because that is the translation from the sensor to the origin.</p> <p>If the sensor is aligned with the origin, the rotation is the identity quaternion and the forward vector is along the -Z axis {0, 0, -1}. If the sensor is rotated +30 degrees around the Y axis from the origin, then the <strong>Orientation</strong> value should be a rotation of -30 degrees around the Y axis, because it represents the rotation from the sensor to the origin.</p>? + + + <dd> <p>A reference {{GUID}} identifying the calibration process for the data, allowing different consumers to identify calibration data from the same process.</p> </dd> + + + <dd> <p>The transform position.</p> </dd> + + + <dd> <p>The transform rotation.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes the location of a camera relative to other cameras or an established external reference. </p> + + + <dd> <p>The number of transforms in the <em>CalibratedTransforms</em> array.</p> </dd> + + + <dd> <p>The array of transforms in the extrinsic data.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera model. </p> + <p>For square pixels, the X and Y fields of the <strong>FocalLength</strong> should be the same.</p><p>The <strong>PrincipalPoint</strong> field is expressed in pixels, not in normalized coordinates. The origin [0,0] is the bottom, left corner of the image.</p> + + + <dd> <p>The focal length of the camera.</p> </dd> + + + <dd> <p>The principal point of the camera.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a polynomial lens distortion model.</p> + + + <dd> <p>The first radial distortion coefficient.</p> </dd> + + + <dd> <p>The second radial distortion coefficient.</p> </dd> + + + <dd> <p>The third radial distortion coefficient.</p> </dd> + + + <dd> <p>The first tangential distortion coefficient.</p> </dd> + + + <dd> <p>The second tangential distortion coefficient.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera intrinsic model for a specified resolution.</p> + + + <dd> <p>The width for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p>The height for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p> The pinhole camera model.</p> </dd> + + + <dd> <p> The lens distortion model.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Contains zero or 1 pinhole camera intrinsic models that describe how to project a 3D point in physical world onto the 2D image frame of a camera.</p> + + + <dd> <p>The number of camera intrinsic models in the <em>IntrinsicModels</em> array.</p> </dd> + + + <dd> <p>The array of camera intrinsic models in the intrinsic data.</p> </dd> + + + + + <p> Contains data that is needed to implement the <strong>{{IMFAsyncResult}}</strong> interface. </p> + <p> Any custom implementation of the <strong>{{IMFAsyncResult}}</strong> interface must inherit this structure. For more information, see Custom Asynchronous Result Objects. </p> + + + + <p>Initializes Microsoft Media Foundation.</p> + <p> An application must call this function before using Media Foundation. Before your application quits, call <strong>{{MFShutdown}}</strong> once for every previous call to <strong>{{MFStartup}}</strong>. </p><p> Do not call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> from work queue threads. For more information about work queues, see Work Queues. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BAD_STARTUP_VERSION}}</strong></dt> </dl> </td><td> <p> The <em>Version</em> parameter requires a newer version of Media Foundation than the version that is running.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DISABLED_IN_SAFEMODE}}</strong></dt> </dl> </td><td> <p> The Media Foundation platform is disabled because the system was started in "Safe Mode" (fail-safe boot). </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Media Foundation is not implemented on the system. This error can occur if the media components are not present (See {{KB2703761}} for more info). </p> </td></tr> </table><p>?</p> + + + <dd> <p>Version number. Use the value <strong>{{MF_VERSION}}</strong>, defined in mfapi.h.</p> </dd> + + + <dd> <p>This parameter is optional when using C++ but required in C. The value must be one of the following flags: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>{{MFSTARTUP_NOSOCKET}}</dt> </dl> </td><td> <p> Do not initialize the sockets library. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_LITE}}</dt> </dl> </td><td> <p> Equivalent to {{MFSTARTUP_NOSOCKET}}. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_FULL}}</dt> </dl> </td><td> <p> Initialize the entire Media Foundation platform. This is the default value when <em>dwFlags</em> is not specified. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Shuts down the Microsoft Media Foundation platform. Call this function once for every call to <strong>{{MFStartup}}</strong>. Do not call this function from work queue threads.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Blocks the <strong>{{MFShutdown}}</strong> function.</p> + <p>This function prevents work queue threads from being shut down when <strong>{{MFShutdown}}</strong> is called. Use this function to ensure that asynchronous operations complete gracefully before the platform shuts down.</p><p>This function holds a lock on the Media Foundation platform. To unlock the platform, call <strong>{{MFUnlockPlatform}}</strong>. The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>The <strong>{{MFShutdown}}</strong> function blocks until the platform is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.) To avoid memory leaks, the application should unlock the platform before the wait period ends. For example, cancel any asynchronous operations that are waiting to complete and are holding a lock on the platform.</p><p>The default implementation of the <strong>{{IMFAsyncResult}}</strong> interface automatically locks the Media Foundation platform when the result object is created. Releasing the interface unlocks the platform. Therefore, in most cases your application does not need to lock the platform directly. For more information, see Work Queues.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the Media Foundation platform after it was locked by a call to the <strong>{{MFLockPlatform}}</strong> function.</p> + <p>The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Puts an asynchronous operation on a work queue.</p> + <p> This function creates an asynchronous result object and puts the result object on the work queue. The work queue calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em>. </p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or {{MFAllocateWorkQueueEx}}. </p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue. </p> + <p> To invoke the work-item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>. </p> </dd> + + + + + <p>Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p> To invoke the work item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p>Queues a work item that waits for an event to be signaled.</p> + <p>This function enables a component to wait for an event without blocking the current thread. </p><p>The function puts a work item on the specified work queue. This work item waits for the event given in <em>hEvent</em> to be signaled. When the event is signaled, the work item invokes a callback. (The callback is contained in the result object given in <em>pResult</em>. For more information, see <strong>{{MFCreateAsyncResult}}</strong>).</p><p>The work item is dispatched on a work queue by the <strong>{{IMFAsyncCallback::GetParameters}}</strong> method of the callback. The work queue can be any of the following:</p><ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>).</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>).</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul><p>Do not use any of the following work queues: <strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_RT}}</strong>, or <strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to an event object. To create an event object, call <strong>CreateEvent</strong> or <strong>CreateEventEx</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the wait. To cancel the wait, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Creates a work queue that is guaranteed to serialize work items. The serial work queue wraps an existing multithreaded work queue. The serial work queue enforces a first-in, first-out ({{FIFO}}) execution order.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>Multithreaded queues use a thread pool, which can reduce the total number of threads in the pipeline. However, they do not serialize work items. A serial work queue enables the application to get the benefits of the thread pool, without needing to perform manual serialization of its own work items.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of an existing work queue. This must be either a multithreaded queue or another serial work queue. Any of the following can be used:</p> <ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>)</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>)</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul> </dd> + + + <dd> <p>Receives an identifier for the new serial work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>When the timer interval elapses, the timer calls <strong>{{MFInvokeCallback}}</strong> with the <em>pResult</em> reference to invoke the asynchronous callback. The callback is specified when you create the result object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>This function creates an asynchronous result object. When the timer interval elapses, the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> Attempts to cancel an asynchronous operation that was scheduled with <strong>{{MFScheduleWorkItem}}</strong> or <strong>{{MFScheduleWorkItemEx}}</strong>.</p> + <p>Because work items are asynchronous, the work-item callback might still be invoked after <strong>{{MFCancelWorkItem}}</strong> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves the timer interval for the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets a callback function to be called at a fixed interval.</p> + <p>To get the timer interval for the periodic callback, call <strong>{{MFGetTimerPeriodicity}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the callback function, of type <strong>{{MFPERIODICCALLBACK}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a caller-provided object that implements <strong>{{IUnknown}}</strong>, or <strong>{{NULL}}</strong>. This parameter is passed to the callback function.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the callback. To cancel the callback, call <strong>{{MFRemovePeriodicCallback}}</strong> and pass this key as the <em>dwKey</em> parameter.</p> </dd> + + + + + <p> </p><p>Cancels a callback function that was set by the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The callback is dispatched on another thread, and this function does not attempt to synchronize with the callback thread. Therefore, it is possible for the callback to be invoked after this function returns.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new work queue. This function extends the capabilities of the <strong>{{MFAllocateWorkQueue}}</strong> function by making it possible to create a work queue that has a message loop.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>The <strong>{{MFAllocateWorkQueue}}</strong> function is equivalent to calling <strong>{{MFAllocateWorkQueueEx}}</strong> with the value {{MF_STANDARD_WORKQUEUE}} for the <em>WorkQueueType</em> parameter.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The application exceeded the maximum number of work queues.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p> Creates a new work queue.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an identifier for the work queue.</p> </dd> + + + + + <p> Locks a work queue.</p> + <p>This function prevents the <strong>{{MFShutdown}}</strong> function from shutting down the work queue. Use this function to ensure that asynchronous operations on the work queue complete gracefully before the platform shuts down. The <strong>{{MFShutdown}}</strong> function blocks until the work queue is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.)</p><p>Call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue. Each call to <strong>{{MFLockWorkQueue}}</strong> must be matched by a corresponding call to <strong>{{MFUnlockWorkQueue}}</strong>.</p><p> </p><strong>Note</strong>??The <strong>{{MFAllocateWorkQueue}}</strong> function implicitly locks the work queue that it creates.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier for the work queue. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. </p> </dd> + + + + + <p> </p><p>Unlocks a work queue.</p> + <p>The application must call <strong>{{MFUnlockWorkQueue}}</strong> once for every call to <strong>{{MFAllocateWorkQueue}}</strong> and then once for every call to <strong>{{MFLockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue to be unlocked. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task.For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function extends the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function by adding the <em>lPriority</em> parameter.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request. </p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task. For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>The base relative priority for the work-queue threads. For more information, see <strong>AvSetMmThreadPriority</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function unregisters a work queue that was associated with an {{MMCSS}} class through the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndUnregisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class currently associated with this work queue.</p> + <p>If the work queue is not associated with an {{MMCSS}} task, the function retrieves an empty string.</p><p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the task name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier currently associated with this work queue.</p> + <p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Registers the standard Microsoft Media Foundation platform work queues with the Multimedia Class Scheduler Service ({{MMCSS}}). +</p> + <p>To unregister the platform work queues from the {{MMCSS}} class, call <strong>{{MFUnregisterPlatformFromMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}}, or use the value zero to create a new task group. On output, receives the actual task group {{ID}}.</p> </dd> + + + <dd> <p>The base priority of the work-queue threads. </p> </dd> + + + + + <p>Unregisters the Microsoft Media Foundation platform work queues from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains and locks a shared work queue.</p> + <p>A <em>multithreaded work queue</em> uses a thread pool to dispatch work items. Whenever a thread becomes available, it dequeues the next work item from the queue. Work items are dequeued in first-in-first-out order, but work items are not serialized. In other words, the work queue does not wait for a work item to complete before it starts the next work item. </p><p>Within a single process, the Microsoft Media Foundation platform creates up to one multithreaded queue for each Multimedia Class Scheduler Service ({{MMCSS}}) task. The <strong>{{MFLockSharedWorkQueue}}</strong> function checks whether a matching work queue already exists. If not, the function creates a new work queue and registers the work queue with {{MMCSS}}. The function returns the {{MMCSS}} task identifier (<em>pdwTaskId</em>) and the work queue identifier (<em>pID</em>). To queue a work item, pass the work queue identifier to any of the following functions: </p><ul> <li> <strong>{{MFPutWorkItem}}</strong> </li> <li> <strong>{{MFPutWorkItem2}}</strong> </li> <li> <strong>{{MFPutWorkItemEx}}</strong> </li> <li> <strong>{{MFPutWorkItemEx2}}</strong> </li> </ul><p>The <strong>{{MFLockSharedWorkQueue}}</strong> function also locks the queue. Before the process exits, call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue.</p><p>If the regular priority queue is being used (<em>wszClass</em>=""), then {{NULL}} must be passed in to <em>pdwTaskId</em> and the value 0 must be passed into <em>BasePriority</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The base priority of the work-queue threads. If the regular-priority queue is being used (<em>wszClass</em>=""), then the value 0 must be passed in.</p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}} , or use the value zero to create a new task group. If the regular priority queue is being used (<em>wszClass</em>=""), then <strong>{{NULL}}</strong> must be passed in. On output, receives the actual task group {{ID}}. </p> </dd> + + + <dd> <p>Receives an identifier for the new work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p>Gets the relative thread priority of a work queue.</p> + <p>This function returns the relative thread priority set by the <strong>{{MFBeginRegisterWorkQueueWithMMCSSEx}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Receives the relative thread priority.</p> </dd> + + + + + <p> </p><p>Creates an asynchronous result object. Use this function if you are implementing an asynchronous method.</p> + <p>To invoke the callback specified in <em>pCallback</em>, call the <strong>{{MFInvokeCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object stored in the asynchronous result. This reference is returned by the <strong>{{IMFAsyncResult::GetObject}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is implemented by the caller of the asynchronous method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object. This value is provided by the caller of the asynchronous method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAsyncResult}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Invokes a callback method to complete an asynchronous operation. </p> + <p> If you are implementing an asynchronous method, use this function to invoke the caller's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>The callback is invoked from a Media Foundation work queue. For more information, see Writing an Asynchronous Method.</p><p>The <strong>{{MFShutdown}}</strong> function shuts down the work queue threads, so the callback is not guaranteed to be invoked after <strong>{{MFShutdown}}</strong> is called.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The <strong>{{MFShutdown}}</strong> function was called to shut down the Media Foundation platform.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. To create this object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p> Creates a byte stream from a file. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to a null-terminated string that contains the file name. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> Creates a byte stream that is backed by a temporary local file. </p> + <p> This function creates a file in the system temporary folder, and then returns a byte stream object for that file. The full path name of the file is storted in the <strong>{{MF_BYTESTREAM_ORIGIN_NAME}}</strong> attribute. The file is created with the <strong>{{FILE_FLAG_DELETE_ON_CLOSE}}</strong> flag, and is deleted after the byte stream is released.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a byte stream from a file.</p> + <p>When the request is completed, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. The callback object should then call the <strong>{{MFEndCreateFile}}</strong> function to get a reference to the byte stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a null-terminated string containing the file name.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{MFCancelCreateFile}}</strong> function. The caller must release the interface. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a byte stream from a file.</p> + <p>Call this function when the <strong>{{MFBeginCreateFile}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels an asynchronous request to create a byte stream from a file.</p> + <p>You can use this function to cancel a previous call to <strong>{{MFBeginCreateFile}}</strong>. Because that function is asynchronous, however, it might complete before the operation can be canceled. Therefore, your callback might still be invoked after you call this function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the cancellation object. This reference is received in the <em>ppCancelCookie</em> parameter of the <strong>{{MFBeginCreateFile}}</strong> function.</p> </dd> + + + + + <p> </p><p>Allocates system memory and creates a media buffer to manage it.</p> + <p>The function allocates a buffer with a 1-byte memory alignment. To allocate a buffer that is aligned to a larger memory boundary, call <strong>{{MFCreateAlignedMemoryBuffer}}</strong>.</p><p>When the media buffer object is destroyed, it releases the allocated memory.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer that wraps an existing media buffer. The new media buffer points to the same memory as the original media buffer, or to an offset from the start of the memory.</p> + <p>The maximum size of the wrapper buffer is limited to the size of the valid data in the original buffer. This might be less than the allocated size of the original buffer. To set the size of the valid data, call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The requested offset or the requested length is not valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the original media buffer. </p> </dd> + + + <dd> <p>The start of the new buffer, as an offset in bytes from the start of the original buffer. </p> </dd> + + + <dd> <p>The size of the new buffer. The value of <em>cbOffset</em> + <em>dwLength</em> must be less than or equal to the size of valid data the original buffer. (The size of the valid data is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.) </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Converts a Media Foundation media buffer into a buffer that is compatible with DirectX Media Objects ({{DMOs}}).</p> + <p>The {{DMO}} buffer created by this function also exposes the <strong>{{IMFSample}}</strong> interface. If <em>pIMFSample</em> is <strong>{{NULL}}</strong>, all of the <strong>{{IMFSample}}</strong> methods return {{MF_E_NOT_INITIALIZED}}. Otherwise, they call through to the <em>pIMFSample</em> reference.</p><p>If the Media Foundation buffer specified by <em>pIMFMediaBuffer</em> exposes the <strong>{{IMF2DBuffer}}</strong> interface, the {{DMO}} buffer also exposes <strong>{{IMF2DBuffer}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. The <em>pIMFMediaBuffer</em> parameter must not be <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the sample that contains the Media Foundation buffer. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Offset in bytes from the start of the Media Foundation buffer. This offset defines where the {{DMO}} buffer starts. If this parameter is zero, the {{DMO}} buffer starts at the beginning of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMediaBuffer}}</strong> interface. This interface is documented in the DirectShow {{SDK}} documentation. The caller must release the interface.</p> </dd> + + + + + <p>Converts a Microsoft Direct3D?9 format identifier to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier.</p> + <p>Returns a <strong>{{DXGI_FORMAT}}</strong> value.</p> + + + <dd> <p>The <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code to convert.</p> </dd> + + + + + <p>Converts a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier to a Microsoft Direct3D?9 format identifier.</p> + <p>Returns a <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code.</p> + + + <dd> <p>The <strong>{{DXGI_FORMAT}}</strong> value to convert.</p> </dd> + + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Unlocks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>Call this function after a successful call to the <strong>{{MFLockDXGIDeviceManager}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a media buffer object that manages a Direct3D 9 surface. </p> + <p>This function creates a media buffer object that holds a reference to the Direct3D surface specified in <em>punkSurface</em>. Locking the buffer gives the caller access to the surface memory. When the buffer object is destroyed, it releases the surface. For more information about media buffers, see Media Buffers.</p><strong>Note</strong>??This function does not allocate the Direct3D surface itself.?<p> The buffer object created by this function also exposes the <strong>{{IMF2DBuffer}}</strong> interface. For more information, see DirectX Surface Buffer. </p><p>This function does not support {{DXGI}} surfaces.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifies the type of Direct3D 9 surface. Currently this value must be <strong>{{IID_IDirect3DSurface9}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the DirectX surface. </p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + + + + <p>Creates a media buffer object that manages a Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Set this parameter to <code>__uuidof({{IWICBitmap}})</code>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the bitmap surface. The bitmap surface must be a {{WIC}} bitmap that exposes the <strong>{{IWICBitmap}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer to manage a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>The returned buffer object supports the following interfaces:</p><ul> <li> <strong>{{IMF2DBuffer}}</strong> </li> <li> <strong>{{IMF2DBuffer2}}</strong> </li> <li> <strong>{{IMFDXGIBuffer}}</strong> </li> <li> <strong>{{IMFMediaBuffer}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Identifies the type of {{DXGI}} surface. This value must be <strong>{{IID_ID3D11Texture2D}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} surface. </p> </dd> + + + <dd> <p>The zero-based index of a subresource of the surface. The media buffer object is associated with this subresource.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with Direct3D. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + <p>Creates an object that allocates video samples that are compatible with Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>This function creates an allocator for {{DXGI}} video surfaces. The buffers created by this allocator expose the <strong>{{IMFDXGIBuffer}}</strong> interface. To create an allocator for Microsoft Direct3D?9 video surfaces, call <strong>{{MFCreateVideoSampleAllocator}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorEx}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorEx}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Microsoft Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Allocates system memory with a specified byte alignment and creates a media buffer to manage the memory. </p> + <p> When the media buffer object is destroyed, it releases the allocated memory. </p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p> Specifies the memory alignment for the buffer. Use one of the following constants. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_1_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000000</dt> </dl> </td><td> <p> Align to 1 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_2_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> Align to 2 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_4_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000003</dt> </dl> </td><td> <p> Align to 4 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_8_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000007</dt> </dl> </td><td> <p> Align to 8 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_16_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000000F</dt> </dl> </td><td> <p> Align to 16 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_32_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000001F</dt> </dl> </td><td> <p> Align to 32 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_64_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000003F</dt> </dl> </td><td> <p> Align to 64 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_128_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000007F</dt> </dl> </td><td> <p> Align to 128 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_256_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000000FF</dt> </dl> </td><td> <p> Align to 256 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_512_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000001FF</dt> </dl> </td><td> <p> Align to 512 bytes. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a media event object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The event type. See <strong>{{IMFMediaEvent::GetType}}</strong>. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. See <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. If the event type does not have an extended type, use the value {{GUID_NULL}}.</p> </dd> + + + <dd> <p>The event status. See <strong>{{IMFMediaEvent::GetStatus}}</strong> </p> </dd> + + + <dd> <p>The value associated with the event, if any. See <strong>{{IMFMediaEvent::GetValue}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an event queue.</p> + <p>This function creates a helper object that you can use to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEventQueue}}</strong> interface of the event queue. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty media sample.</p> + <p>Initially the sample does not contain any media buffers.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the media sample. The caller must release the interface.</p> </dd> + + + + + <p> Creates an empty attribute store. </p> + <p>Attributes are used throughout Microsoft Media Foundation to configure objects, describe media formats, query object properties, and other purposes. For more information, see Attributes in Media Foundation.</p><p>For a complete list of all the defined attribute {{GUIDs}} in Media Foundation, see Media Foundation Attributes.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + <dd> <p>The initial number of elements allocated for the attribute store. The attribute store grows as needed. </p> </dd> + + + + + <p> </p><p>Initializes the contents of an attribute store from a byte array.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p><p>This function deletes any attributes that were previously stored in <em>pAttributes</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The buffer is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to the array that contains the initialization data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves the size of the buffer needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>Use this function to find the size of the array that is needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Converts the contents of an attribute store to a byte array.</p> + <p>The function skips any attributes with <strong>{{IUnknown}}</strong> reference values ({{MF_ATTRIBUTE_IUNKNOWN}}); they are not stored in the array.</p><p>To convert the byte array back into an attribute store, call <strong>{{MFInitAttributesFromBlob}}</strong>.</p><p>To write an attribute store to a stream, call the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer given in <em>pBuf</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to an array that receives the attribute data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes. To get the required size of the buffer, call <strong>{{MFGetAttributesAsBlobSize}}</strong>.</p> </dd> + + + + + <p> Adds information about a Media Foundation transform ({{MFT}}) to the registry. </p><p>Applications can enumerate the {{MFT}} by calling the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> function.</p> + <p> The registry entries created by this function are read by the following functions: </p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFTEnum}}</strong> </td><td>Enumerates {{MFTs}} by media type and category.</td></tr> <tr><td> <strong>{{MFTEnumEx}}</strong> </td><td>Extended version of <strong>{{MFTEnum}}</strong>.</td></tr> <tr><td> <strong>{{MFTGetInfo}}</strong> </td><td>Looks up an {{MFT}} by {{CLSID}} and retrieves the registry information.</td></tr> </table><p>?</p><p>This function does not register the {{CLSID}} of the {{MFT}} for the <strong>CoCreateInstance</strong> or <strong>CoGetClassObject</strong> functions. </p><p> To remove the entries from the registry, call <strong>{{MFTUnregister}}</strong>. If you remove an {{MFT}} from the system, you should always call <strong>{{MFTUnregister}}</strong>.</p><p> The formats given in the <em>pInputTypes</em> and <em>pOutputTypes</em> parameters are intended to help applications search for {{MFTs}} by format. Applications can use the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> functions to enumerate {{MFTs}} that match a particular set of formats.</p><p>It is recommended to specify at least one input type in <em>pInputTypes</em> and one output type in the <em>pOutputTypes</em> parameter. Otherwise, the {{MFT}} might be skipped in the enumeration.</p><p>On 64-bit Windows, the 32-bit version of this function registers the {{MFT}} in the 32-bit node of the registry. For more information, see 32-bit and 64-bit Application Data in the Registry.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Unregisters a Media Foundation transform ({{MFT}}). </p> + <p> This function removes the registry entries created by the <strong>{{MFTRegister}}</strong> function.</p><p>It is safe to call <strong>{{MFTUnregister}}</strong> twice with the same {{CLSID}}. If the {{CLSID}} is not found in the registry, the function succeeds and does nothing.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>The <em>pClassFactory</em> parameter specifies a class factory object that creates the {{MFT}}. The class factory's <strong>{{IClassFactory::CreateInstance}}</strong> method must return an object that supports the <strong>{{IMFTransform}}</strong> interface.</p><strong>Note</strong>??The <strong>{{MFTEnumEx}}</strong> function retrieves a list of <strong>{{IMFActivate}}</strong> references. However, the class factory does not need to support the <strong>{{IMFActivate}}</strong> interface. Instead, the <strong>{{MFTEnumEx}}</strong> function provides an implementation of <strong>{{IMFActivate}}</strong> that wraps the class factory.?<p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocal}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. The class factory creates the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters one or more Media Foundation transforms ({{MFTs}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocal}}</strong> function.</p><p>If the <em>pClassFactory</em> parameter is <strong>{{NULL}}</strong>, all local {{MFTs}} in the process are unregistered. Otherwise, the function unregisters the {{MFT}} associated with the class factory specified by the <em>pClassFactory</em> parameter. In that case, the <em>pClassFactory</em> parameter should equal a reference value that was previously passed to the <strong>{{MFTRegisterLocal}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>pClassFactory</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocalByCLSID}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters a Media Foundation transform ({{MFT}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>clsidMFT</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + + + <p> Enumerates Media Foundation transforms ({{MFTs}}) in the registry. </p><p>Starting in Windows?7, applications should use the <strong>{{MFTEnumEx}}</strong> function instead.</p> + <p> This function returns a list of all the {{MFTs}} in the specified category that match the search criteria given by the <em>pInputType</em>, <em>pOutputType</em>, and <em>pAttributes</em> parameters. Any of those parameters can be <strong>{{NULL}}</strong>. </p><p> If no {{MFTs}} match the criteria, the method succeeds but returns the value zero in <em>pcMFTs</em>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnum}}</strong> function.</p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnumEx}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnumEx}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnumEx}}</strong> function to allow external applications and internal components to discover the hardware {{MFTs}} that correspond to a specific video adapter. </p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnum2}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnum2}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets information from the registry about a Media Foundation transform ({{MFT}}). </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + <dd> <p> Receives a reference to a wide-character string containing the friendly name of the {{MFT}}. The caller must free the string by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an input format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppInputTypes</em> array. If <em>ppInputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an output format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppOutputType</em> array. If <em>ppOutputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The caller must release the interface. The attribute store might contain attributes that are stored in the registry for the specified {{MFT}}. (For more information, see <strong>{{MFTRegister}}</strong>.) If no attributes are stored in the registry for this {{MFT}}, the attribute store is empty. </p> <p>This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets a reference to the Microsoft Media Foundation plug-in manager.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPluginControl}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the merit value of a hardware codec.</p> + <p> The function fails if the {{MFT}} does not represent a hardware device with a valid Output Protection Manager ({{OPM}}) certificate. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the Media Foundation transform ({{MFT}}) that represents the codec.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>verifier</em> array.</p> </dd> + + + <dd> <p>The address of a buffer that contains one of the following:</p> <ul> <li>The class identifier ({{CLSID}}) of the {{MFT}}.</li> <li>A null-terminated wide-character string that contains the symbol link for the underlying hardware device. Include the size of the terminating null in the value of <em>cbVerifier</em>.</li> </ul> </dd> + + + <dd> <p>Receives the merit value.</p> </dd> + + + + + <p>Registers a scheme handler in the caller's process.</p> + <p>Scheme handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local scheme handlers take precedence over scheme handlers that are registered in the registry. Local scheme handlers are not visible to other processes.</p><p>Use this function if you want to register a custom scheme handler for your application, but do not want the handler available to other applications.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the scheme. The scheme includes the trailing ':' character; for example, "http:".</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a scheme handler object. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + <p>Registers a byte-stream handler in the caller's process.</p> + <p>Byte-stream handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local byte-stream handlers take precedence over byte-stream handlers that are registered in the registry. Local byte-stream handlers are not visible to other processes.</p><p>Use this function if you want to register a custom byte-stream handler for your application, but do not want the handler available to other applications.</p><p>Either <em>szFileExtension</em> or <em>szMimeType</em> can be <strong>{{NULL}}</strong>; at least one must be non-<strong>{{NULL}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the file name extension for this handler.</p> </dd> + + + <dd> <p>A string that contains the {{MIME}} type for this handler.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream handler. The byte-stream handler exposes the <strong>{{IMFByteStreamHandler}}</strong> interface.</p> </dd> + + + + + <p>Creates a wrapper for a byte stream.</p> + <p>The <strong>{{IMFByteStream}}</strong> methods on the wrapper call directly through to the original byte stream, except for the <strong>{{IMFByteStream::Close}}</strong> method. Calling <strong>Close</strong> on the wrapper closes the wrapper object, but leaves the original byte stream open.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the original byte stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the wrapper. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object for a Windows Runtime class.</p> + <p>To create the Windows Runtime object, call <strong>{{IMFActivate::ActivateObject}}</strong> or <strong>{{IClassFactory::CreateInstance}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier that is associated with the activatable runtime class.</p> </dd> + + + <dd> <p>A reference to an optional <strong>{{IPropertySet}}</strong> object, which is used to configure the Windows Runtime class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. The activation object created by this function supports the following interfaces:</p> <ul> <li> <strong>{{IClassFactory}}</strong> </li> <li> <strong>{{IMFActivate}}</strong> </li> <li> <strong>{{IPersistStream}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + <p> Validates the size of a buffer for a video format block. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is large enough. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is too small, or the format block is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_FORMAT}}</strong></dt> </dl> </td><td> <p> This function does not support the specified format type. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies the type of format block. It must be one of the following values:</p> <dl><dt><strong>{{FORMAT_DvInfo}}</strong></dt><dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt><dt><strong>{{FORMAT_MPEG2Video}}</strong></dt><dt><strong>{{FORMAT_MPEGStreams}}</strong></dt><dt><strong>{{FORMAT_MPEGVideo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo2}}</strong></dt><dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </dd> + + + <dd> <p> Pointer to a buffer that contains the format block. </p> </dd> + + + <dd> <p> Size of the <em>pBlock</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Creates an empty media type.</p> + <p> The media type is created without any attributes. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates an <strong>{{MFVIDEOFORMAT}}</strong> structure from a video media type.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Converts a Media Foundation audio media type to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p>If the <strong>wFormatTag</strong> member of the returned structure is <strong>{{WAVE_FORMAT_EXTENSIBLE}}</strong>, you can cast the reference to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{WAVEFORMATEX}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <strong>{{WAVEFORMATEX}}</strong> structure.</p> </dd> + + + <dd> <p>Contains a flag from the <strong>{{MFWaveFormatExConvertFlags}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER2}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER2}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG1VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG1VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG2VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG2VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the image size for a video format. Given a <strong>{{BITMAPINFOHEADER}}</strong> structure, this function calculates the correct value of the <strong>biSizeImage</strong> member. </p> + <p> Before calling this function, you must set at least the following members of the <strong>{{BITMAPINFOHEADER}}</strong> structure:</p><ul> <li><strong>biCompression</strong></li> <li><strong>biBitCount</strong></li> <li><strong>biWidth</strong></li> <li><strong>biHeight</strong></li> </ul><p>Also, if <strong>biCompression</strong> is <strong>{{BI_BITFIELDS}}</strong>, the <strong>{{BITMAPINFOHEADER}}</strong> structure must be followed by an array of color masks. </p><p> This function fails if the <strong>{{BITMAPINFOHEADER}}</strong> structure describes a format that is not a video format. For example, it fails if <strong>biCompresson</strong> is <strong>{{BI_JPEG}}</strong> or <strong>{{BI_PNG}}</strong> .</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{BITMAPINFOHEADER}}</strong> structure is not valid, or the value of <em>cbBufSize</em> is too small. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p>The function returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Media subtype for the video format. For a list of subtypes, see Media Type {{GUIDs}}.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of each frame, in bytes. If the format is compressed or is not recognized, the value is zero.</p> </dd> + + + + + <p> Converts a video frame rate into a frame duration.</p> + <p>This function is useful for calculating time stamps on a sample, given the frame rate.</p><p>Also, average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p> For certain common frame rates, the function gets the frame duration from a look-up table:</p><table> <tr><th>Frames per second (floating point)</th><th>Frames per second (fractional)</th><th>Average time per frame</th></tr> <tr><td>59.94</td><td>60000/1001</td><td>166833</td></tr> <tr><td>29.97</td><td>30000/1001</td><td>333667</td></tr> <tr><td>23.976</td><td>24000/1001</td><td>417188</td></tr> <tr><td>60</td><td>60/1</td><td>166667</td></tr> <tr><td>30</td><td>30/1</td><td>333333</td></tr> <tr><td>50</td><td>50/1</td><td>200000</td></tr> <tr><td>25</td><td>25/1</td><td>400000</td></tr> <tr><td>24</td><td>24/1</td><td>416667</td></tr> </table><p>?</p><p> Most video content uses one of the frame rates listed here. For other frame rates, the function calculates the duration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The numerator of the frame rate. </p> </dd> + + + <dd> <p> The denominator of the frame rate. </p> </dd> + + + <dd> <p> Receives the average duration of a video frame, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Calculates the frame rate, in frames per second, from the average duration of a video frame.</p> + <p>Average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p>This function uses a look-up table for certain common durations. The table is listed in the Remarks section for the <strong>{{MFFrameRateToAverageTimePerFrame}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The average duration of a video frame, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the numerator of the frame rate.</p> </dd> + + + <dd> <p>Receives the denominator of the frame rate.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Initializes a media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Initializes a media type from a <strong>{{WAVEFORMATEX}}</strong> structure. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{WAVEFORMATEX}}</strong> structure, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + + + <p> </p><p>Initializes a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</li> <li><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The media type is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The function allocates memory for the format block. The caller must release the format block by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Creates a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>. The function also allocates memory for the format block, which the caller must release by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Compares a full media type to a partial media type.</p> + <p>A pipeline component can return a partial media type to describe a range of possible formats the component might accept. A partial media type has at least a major type {{GUID}}, but might be missing some of the other attributes that are needed to fully describe the type. The missing attributes represent "don't care" values for the partial type. For example, a partial video type might be missing the attributes for the width and height of the video.</p><p>This function returns <strong>{{TRUE}}</strong> if the following conditions are both true:</p><ul> <li> The partial media type contains a major type {{GUID}}. </li> <li> All of the attributes in the partial type exist in the full type and are set to the same value. </li> </ul><p> Otherwise, the function returns <strong>{{FALSE}}</strong>. </p> + <p>If the full media type is compatible with the partial media type, the function returns <strong>{{TRUE}}</strong>. Otherwise, the function returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the full media type.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the partial media type.</p> </dd> + + + + + <p> Creates a media type that wraps another media type. </p> + <p> The original media type (<em>pOrig</em>) is stored in the new media type under the <strong>{{MF_MT_WRAPPED_TYPE}}</strong> attribute. To extract the original media type, call <strong>{{MFUnwrapMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type to wrap in a new media type. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the major type for the new media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the subtype for the new media type. For possible values, see:</p> <ul> <li> <strong>Audio Subtypes</strong> </li> <li> Video Subtypes </li> </ul> <p>Applications can define custom subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the new media type that wraps the original media type. The caller must release the interface. </p> </dd> + + + + + <p> Retrieves a media type that was wrapped in another media type by the <strong>{{MFWrapMediaType}}</strong> function. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates a video media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure. </p> + <p> Instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure to initialize a video media type, you can call <strong>{{MFCreateMediaType}}</strong> and set the media type attributes directly. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a partial video media type with a specified subtype. </p> + <p> This function creates a media type and sets the major type equal to <strong>{{MFMediaType_Video}}</strong> and the subtype equal to the value specified in <em>pAMSubtype</em>. </p><p>You can get the same result with the following steps:</p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. </li> <li> Set the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute to <strong>{{MFMediaType_Video}}</strong>. </li> <li> Set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute to the subtype. </li> </ol><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a {{GUID}} that specifies the subtype. See Video Subtype {{GUIDs}}. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether a {{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value is a {{YUV}} format.</p> + <p>This function checks whether <em>Format</em> specifies a {{YUV}} format. Not every {{YUV}} format is recognized by this function. However, if a {{YUV}} format is not recognized by this function, it is probably not supported for video rendering or DirectX video acceleration ({{DXVA}}).</p> + <p>The function returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The value specifies a {{YUV}} format.</p> </td></tr> <tr><td> <dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The value does not specify a recognized {{YUV}} format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value.</p> </dd> + + + + + <p> This function is not implemented.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns <strong>{{E_FAIL}}</strong>.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Calculates the minimum surface stride for a video format. </p> + <p> This function calculates the minimum stride needed to hold the image in memory. Use this function if you are allocating buffers in system memory. Surfaces allocated in video memory might require a larger stride, depending on the graphics card. </p><p> If you are working with a DirectX surface buffer, use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to find the surface stride. </p><p> For planar {{YUV}} formats, this function returns the stride for the Y plane. Depending on the format, the chroma planes might have a different stride. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the minimum surface stride, in pixels.</p> </dd> + + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p> This function is equivalent to the <strong>{{MFCalculateImageSize}}</strong> function. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll.? + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of one frame, in bytes. If the format is compressed or is not recognized, this value is zero.</p> </dd> + + + + + <p>Creates a video media type from a <strong>{{BITMAPINFOHEADER}}</strong> structure.</p> + <p>If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates a Media Foundation media type from another format representation.</p> + <p>If the original format is a DirectShow audio media type, and the format type is not recognized, the function sets the following attributes on the converted media type.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_MT_AM_FORMAT_TYPE}}</strong> </td><td>Contains the format type {{GUID}}.</td></tr> <tr><td> <strong>{{MF_MT_USER_DATA}}</strong> </td><td>Contains the format block.</td></tr> </table><p>?</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p>The {{GUID}} specified in <em>guidRepresentation</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies which format representation to convert. The following value is defined.</p> <table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td>{{AM_MEDIA_TYPE_REPRESENTATION}}</td><td>Convert a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the format representation to convert. The layout of the buffer depends on the value of <em>guidRepresentation</em>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future.]</p><p>Creates an audio media type from a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p> The <strong>{{IMFAudioMediaType}}</strong> interface is deprecrated, so applications should avoid using this function. To create a media type from a <strong>{{WAVEFORMATEX}}</strong> structure, do the following: </p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. The returned media type object is initially empty. </li> <li> Call <strong>{{MFInitMediaTypeFromWaveFormatEx}}</strong> to populate the media type from the <strong>{{WAVEFORMATEX}}</strong> structure. </li> </ol><p> Alternatively, you can call <strong>{{MFCreateMediaType}}</strong> and then set the media type attributes directly. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAudioMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Returns the {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value for an uncompressed video format.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns a {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value that identifies the video format. If the video format is compressed or not recognized, the return value is {{D3DFMT_UNKNOWN}}.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for a standard video format such as {{DVD}}, analog television, or {{ATSC}} digital television.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for an uncompressed {{RGB}} video format.</p> + <p> This function fills in some reasonable default values for the specified {{RGB}} format. </p><p> Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. See Media Type Attributes. </p><p> In general, you should avoid calling this function. If you know all of the format details, you can fill in the <strong>{{MFVIDEOFORMAT}}</strong> structure without this function. If you do not know all of the format details, attributes are preferable to using the <strong>{{MFVIDEOFORMAT}}</strong> structure. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Converts the extended color information from an <strong>{{MFVIDEOFORMAT}}</strong> to the equivalent DirectX Video Acceleration ({{DXVA}}) color information. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Sets the extended color information in a <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>This function sets the following fields in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><ul> <li><strong>videoInfo.{{MFNominalRange}}</strong></li> <li><strong>videoInfo.{{MFVideoLighting}}</strong></li> <li><strong>videoInfo.{{MFVideoPrimaries}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferFunction}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferMatrix}}</strong></li> <li><strong>videoInfo.SourceChromaSubsampling</strong></li> </ul><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Copies an image or image plane from one buffer to another. </p> + <p> This function copies a single plane of the image. For planar {{YUV}} formats, you must call the function once for each plane. In this case, <em>pDest</em> and <em>pSrc</em> must point to the start of each plane. </p><p> This function is optimized if the {{MMX}}, {{SSE}}, or {{SSE2}} instruction sets are available on the processor. The function performs a non-temporal store (the data is written to memory directly without polluting the cache). </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the start of the first row of pixels in the destination buffer. </p> </dd> + + + <dd> <p> Stride of the destination buffer, in bytes. </p> </dd> + + + <dd> <p> Pointer to the start of the first row of pixels in the source image. </p> </dd> + + + <dd> <p> Stride of the source image, in bytes. </p> </dd> + + + <dd> <p> Width of the image, in bytes. </p> </dd> + + + <dd> <p> Number of rows of pixels to copy. </p> </dd> + + + + + <p> Converts an array of 16-bit floating-point numbers into an array of 32-bit floating-point numbers. </p> + <p> The function converts <em>dwCount</em> values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Number of elements in the <em>pSrc</em> array to convert. </p> </dd> + + + + + <p> Converts an array of 32-bit floating-point numbers into an array of 16-bit floating-point numbers. </p> + <p> The function converts the values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Number of elements in the <em>pSrc</em> array to convert.</p> </dd> + + + + + <p>Creates a system-memory buffer object to hold 2D image data.</p> + <p>The returned buffer object also exposes the <strong>{{IMF2DBuffer2}}</strong> interface.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Unrecognized video format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Width of the image, in pixels. </p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>A <strong>{{FOURCC}}</strong> code or {{D3DFORMAT}} value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}},</strong> the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p>Allocates a system-memory buffer that is optimal for a specified media type.</p> + <p>For video formats, if the format is recognized, the function creates a 2-D buffer that implements the <strong>{{IMF2DBuffer2}}</strong> interface. Otherwise it creates a linear buffer. To get the <strong>{{IMF2DBuffer2}}</strong> interface, call <strong>QueryInterface</strong> on the reference returned in <em>ppBuffer</em>. If the <strong>QueryInterface</strong> method fails, use the <strong>{{IMFMediaBuffer}}</strong> interface to access the buffer memory.</p><p>For audio formats, the function allocates a buffer that is large enough to contain <em>llDuration</em> audio samples, or <em>dwMinLength</em>, whichever is larger.</p><p>This function always allocates system memory. For Direct3D surfaces, use the <strong>{{MFCreateDXGISurfaceBuffer}}</strong> or <strong>{{MFCreateDXSurfaceBuffer}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>The sample duration. This value is required for audio formats.</p> </dd> + + + <dd> <p>The minimum size of the buffer, in bytes. The actual buffer size might be larger. Specify zero to allocate the default buffer size for the media type.</p> </dd> + + + <dd> <p>The minimum memory alignment for the buffer. Specify zero to use the default memory alignment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty collection object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the collection object's <strong>{{IMFCollection}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Allocates a block of memory.</p> + <p>In the current version of Media Foundation, this function is equivalent to calling the <strong>HeapAlloc</strong> function and specifying the heap of the calling process.</p><p>To free the allocated memory, call <strong>{{MFHeapFree}}</strong>.</p> + <p>If the function succeeds, it returns a reference to the allocated memory block. If the function fails, it returns <strong>{{NULL}}</strong>.</p> + + + <dd> <p>Number of bytes to allocate.</p> </dd> + + + <dd> <p>Zero or more flags. For a list of valid flags, see <strong>HeapAlloc</strong> in the Windows {{SDK}} documentation.</p> </dd> + + + <dd> <p> Reserved. Set to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Set to zero. </p> </dd> + + + <dd> <p> Reserved. Set to <strong>eAllocationTypeIgnore</strong>. </p> </dd> + + + + + <p> </p><p>Frees a block of memory that was allocated by calling the <strong>{{MFHeapAlloc}}</strong> function.</p> + <p>This function does not return a value.</p> + + + + <p>Calculates ((a * b) + d) / c, where each term is a 64-bit signed value.</p> + <strong>Note</strong>??A previous version of this topic described the parameters incorrectly. The divisor is <em>c</em> and the rounding factor is <em>d</em>.? + <p>Returns the result of the calculation. If numeric overflow occurs, the function returns _I64_MAX (positive overflow) or {{LLONG_MIN}} (negative overflow). If Mfplat.dll cannot be loaded, the function returns _I64_MAX.</p> + + + <dd> <p>A multiplier.</p> </dd> + + + <dd> <p>Another multiplier.</p> </dd> + + + <dd> <p>The divisor.</p> </dd> + + + <dd> <p>The rounding factor.</p> </dd> + + + + + <p>Gets the class identifier for a content protection system.</p> + <p>The class identifier can be used to create the input trust authority ({{ITA}}) for the content protection system. Call <strong>CoCreateInstance</strong> or <strong>{{IMFPMPHost::CreateObjectByCLSID}}</strong> to get an <strong>{{IMFTrustedInput}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} that identifies the content protection system.</p> </dd> + + + <dd> <p>Receives the class identifier to the content protection system.</p> </dd> + + + + + <p> </p><p>Defines the behavior of the <strong>{{IMFMediaSession::SetTopology}}</strong> method.</p> + <p> These flags are optional, and are not mutually exclusive. If no flags are set, the Media Session resolves the topology and then adds it to the queue of pending presentations. </p> + + + + <p> Defines flags for the <strong>{{IMFMediaSession::GetFullTopology}}</strong> method. </p> + + + + <p> Contains flags that define the behavior of the <strong>{{MFCreatePMPMediaSession}}</strong> function. </p> + + + + <p> </p><p>Defines the object types that are created by the source resolver.</p> + + + <dd> <p>Media source. You can query the object for the <strong>{{IMFMediaSource}}</strong> interface.</p> </dd> + + + <dd> <p>Byte stream. You can query the object for the <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>Invalid type.</p> </dd> + + + + + + + + <p>Specifies how the topology loader connects a topology node. This enumeration is used with the <strong>{{MF_TOPONODE_CONNECT_METHOD}}</strong> attribute. </p> + + + + <p> </p><p>Defines status flags for the <strong>{{MF_TOPOLOGY_RESOLUTION_STATUS}}</strong> attribute.</p> + + + + <p>Defines the characteristics of a media source. These flags are retrieved by the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method.</p> + <p>To skip forward or backward in a playlist, call <strong>{{IMFMediaSource::Start}}</strong> or <strong>{{IMFMediaSession::Start}}</strong> with the <strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong> time-format {{GUID}}. This capability applies only when the <strong>{{MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS}}</strong> flag is present.</p> + + + + + + + <p>Defines stream marker information for the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. The <strong>PlaceMarker</strong> method places a marker on the stream between samples. The <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration defines the marker type and the type of information associated with the marker.</p> + <p>If the Streaming Audio Renderer receives an <strong>{{MFSTREAMSINK_MARKER_TICK}}</strong> marker, it inserts silence to cover the gap in the data. </p> + + + + <p>Specifies how to rotate a video image.</p> + + + <dd> <p>Do not rotate the image.</p> </dd> + + + <dd> <p>Rotate the image to the correct viewing orientation.</p> </dd> + + + + + <p>Specifies how to flip a video image.</p> + + + <dd> <p>Do not flip the image.</p> </dd> + + + <dd> <p>Flip the image horizontally.</p> </dd> + + + <dd> <p>Flip the image vertically.</p> </dd> + + + + + <p>Specifies whether the topology loader enables Microsoft DirectX Video Acceleration ({{DXVA}}) in the topology.</p> + <p>This enumeration is used with the {{MF_TOPOLOGY_DXVA_MODE}} topology attribute.</p><p>If an {{MFT}} supports {{DXVA}}, the {{MFT}} must return <strong>{{TRUE}}</strong> for the <strong>{{MF_SA_D3D_AWARE}}</strong> attribute. To enable {{DXVA}}, the topology loader calls <strong>{{IMFTransform::ProcessMessage}}</strong> on the {{MFT}}, passing the {{MFT}} a reference to the <strong>{{IDirect3DDeviceManager9}}</strong> interface. The topology loader gets the <strong>{{IDirect3DDeviceManager9}}</strong> reference from the media sink for the video stream. Typically the enhanced video renderer ({{EVR}}) is the media sink.</p><p>Previous versions of Microsoft Media Foundation supported {{DXVA}} only for decoders.</p> + + + <dd> <p>The topology loader enables {{DXVA}} +on the decoder if possible, and drops optional Media Foundation transforms ({{MFTs}}) that do not support {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader disables all video acceleration. This setting forces software processing, even when the decoder supports {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader enables {{DXVA}} on every {{MFT}} that supports it.</p> </dd> + + + + + <p>Specifies whether the topology loader will insert hardware-based Media Foundation transforms ({{MFTs}}) into the topology.</p> + <p> This enumeration is used with the {{MF_TOPOLOGY_HARDWARE_MODE}} topology attribute. </p> + + + <dd> <p>Use only software {{MFTs}}. Do not use hardware-based {{MFTs}}. This mode is the default, for backward compatibility with existing applications.</p> </dd> + + + <dd> <p>Use hardware-based {{MFTs}} when possible, and software {{MFTs}} otherwise. This mode is the recommended one.</p> </dd> + + + <dd> <p>If hardware-based {{MFTs}} are available, the topoloader will insert them. If not, the connection will fail.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p> </p><p>Defines the type of a topology node.</p> + + + <dd> <p>Output node. Represents a media sink in the topology.</p> </dd> + + + <dd> <p>Source node. Represents a media stream in the topology.</p> </dd> + + + <dd> <p>Transform node. Represents a Media Foundation Transform ({{MFT}}) in the topology.</p> </dd> + + + <dd> <p>Tee node. A tee node does not hold a reference to an object. Instead, it represents a fork in the stream. A tee node has one input and multiple outputs, and samples from the upstream node are delivered to all of the downstream nodes.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> </p><p>Defines when a transform in a topology is flushed.</p> + + + <dd> <p>The transform is flushed whenever the stream changes, including seeks and new segments.</p> </dd> + + + <dd> <p>The transform is flushed when seeking is performed on the stream.</p> </dd> + + + <dd> <p>The transform is never flushed during streaming. It is flushed only when the object is released.</p> </dd> + + + + + <p> </p><p>Defines at what times a transform in a topology is drained.</p> + + + <dd> <p>The transform is drained when the end of a stream is reached. It is not drained when markout is reached at the end of a segment.</p> </dd> + + + <dd> <p>The transform is drained whenever a topology ends.</p> </dd> + + + <dd> <p>The transform is never drained.</p> </dd> + + + + + <p>Contains flags that describe the characteristics of a clock. These flags are returned by the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method.</p> + + + + <p> </p><p>Defines the state of a clock.</p> + + + <dd> <p>The clock is invalid. A clock might be invalid for several reasons. Some clocks return this state before the first start. This state can also occur if the underlying device is lost.</p> </dd> + + + <dd> <p>The clock is running. While the clock is running, the time advances at the clock's frequency and current rate.</p> </dd> + + + <dd> <p>The clock is stopped. While stopped, the clock reports a time of 0.</p> </dd> + + + <dd> <p>The clock is paused. While paused, the clock reports the time it was paused.</p> </dd> + + + + + <p> </p><p>Defines properties of a clock.</p> + + + <dd> <p>Jitter values are always negative. In other words, the time returned by <strong>{{IMFClock::GetCorrelatedTime}}</strong> might jitter behind the actual clock time, but will never jitter ahead of the actual time. If this flag is not present, the clock might jitter in either direction.</p> </dd> + + + + + <p> </p><p>Contains flags for the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + + + + + + + + + + <p> Describes the current status of a call to the <strong>{{IMFShutdown::Shutdown}}</strong> method.</p> + + + + <p> </p><p>Indicates whether the {{URL}} is from a trusted source.</p> + + + <dd> <p>The validity of the {{URL}} cannot be guaranteed because it is not signed. The application should warn the user.</p> </dd> + + + <dd> <p>The {{URL}} is the original one provided with the content.</p> </dd> + + + <dd> <p>The {{URL}} was originally signed and has been tampered with. The file should be considered corrupted, and the application should not navigate to the {{URL}} without issuing a strong warning the user.</p> </dd> + + + + + <p> </p><p>Specifies the direction of playback (forward or reverse).</p> + + + <dd> <p>Forward playback.</p> </dd> + + + <dd> <p>Reverse playback.</p> </dd> + + + + + <p> </p><p>Specifies how aggressively a pipeline component should drop samples.</p> + <p>In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode. The specific algorithm used depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels.</p><p>For example, suppose an encoded video stream has three B-frames between each pair of P-frames. A decoder might implement the following drop modes:</p><ul> <li> <p>Mode 1: Drop one out of every three B frames.</p> </li> <li> <p>Mode 2: Drop one out of every two B frames.</p> </li> <li> <p>Mode 3: Drop all delta frames.</p> </li> <li> <p>Modes 4 and 5: Unsupported.</p> </li> </ul><p>The enhanced video renderer ({{EVR}}) can drop video frames before sending them to the {{EVR}} mixer.</p> + + + <dd> <p>Normal processing of samples. Drop mode is disabled.</p> </dd> + + + <dd> <p>First drop mode (least aggressive).</p> </dd> + + + <dd> <p>Second drop mode.</p> </dd> + + + <dd> <p>Third drop mode.</p> </dd> + + + <dd> <p>Fourth drop mode.</p> </dd> + + + <dd> <p>Fifth drop mode (most aggressive, if it is supported; see Remarks).</p> </dd> + + + <dd> <p>Maximum number of drop modes. This value is not a valid flag.</p> </dd> + + + + + <p>Specifies the quality level for a pipeline component. The quality level determines how the component consumes or produces samples.</p> + <p> Each successive quality level decreases the amount of processing that is needed, while also reducing the resulting quality of the audio or video. The specific algorithm used to reduce quality depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels. Also, the same quality level might not be comparable between two different components. </p><p> Video decoders can often reduce quality by leaving out certain post-processing steps. The enhanced video renderer ({{EVR}}) can sometimes reduce quality by switching to a different deinterlacing mode. </p> + + + <dd> <p> Normal quality. </p> </dd> + + + <dd> <p> One level below normal quality. </p> </dd> + + + <dd> <p> Two levels below normal quality. </p> </dd> + + + <dd> <p> Three levels below normal quality. </p> </dd> + + + <dd> <p> Four levels below normal quality. </p> </dd> + + + <dd> <p> Five levels below normal quality. </p> </dd> + + + <dd> <p> Maximum number of quality levels. This value is not a valid flag. </p> </dd> + + + + + <p>Contains flags for the <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method.</p> + <p>If the decoder sets the <strong>{{MF_QUALITY_CANNOT_KEEP_UP}}</strong> flag, the quality manager tries to reduce latency through the media source and the media sink. For example, it might request the Enhanced Video Renderer ({{EVR}}) to drop frames. During this period, the quality manager stops calling the decoder's <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method, until samples are no longer arriving late at the sink. At that point, the quality manager resumes calling <strong>NotifyQualityEvent</strong> on the decoder.</p> + + + + <p> </p><p>Contains flags for adding a topology to the sequencer source, or updating a topology already in the queue.</p> + + + <dd> <p>This topology is the last topology in the sequence.</p> </dd> + + + + + <p> Specifies how the credential manager should obtain user credentials. </p> + <p>The application implements the credential manager, which must expose the <strong>{{IMFNetCredentialManager}}</strong> interface. If the <strong>{{REQUIRE_PROMPT}}</strong> flag is set, the credential manager should prompt the user for his or her name and password.</p><p>The credential cache object sets the <strong>{{REQUIRE_PROMPT}}</strong> flag if the cache does not yet contain valid credentials. It also sets this flag if the credentials will be sent as plain text, unless the credential manager previously set the <strong>{{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}}</strong> option. (See <strong>{{IMFNetCredentialCache::SetUserOptions}}</strong>.)</p> + + + <dd> <p> The credential manager should prompt the user to provide the credentials. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>The credentials are saved to persistent storage. This flag acts as a hint for the application's {{UI}}. If the application prompts the user for credentials, the {{UI}} can indicate that the credentials have already been saved.</p> </dd> + + + + + <p> </p><p>Describes options for the caching network credentials.</p> + + + <dd> <p>Allow the credential cache object to save credentials in persistant storage.</p> </dd> + + + <dd> <p>Do not allow the credential cache object to cache the credentials in memory. This flag cannot be combined with the {{MFNET_CREDENTIAL_SAVE}} flag.</p> </dd> + + + <dd> <p>The user allows credentials to be sent over the network in clear text.</p> <p> By default, <strong>{{IMFNetCredentialCache::GetCredential}}</strong> always returns the {{REQUIRE_PROMPT}} flag when the authentication flags include {{MFNET_AUTHENTICATION_CLEAR_TEXT}}, even if cached credentials are available. If you set the {{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}} option, the <strong>GetCredential</strong> method will not return {{REQUIRE_PROMPT}} for clear text, if cached credentials are available.</p> <p>Do not set this flag without notifying the user that credentials might be sent in clear text.</p> </dd> + + + + + <p> </p><p>Specifies how the user's credentials will be used.</p> + + + <dd> <p>The credentials will be used to authenticate with a proxy.</p> </dd> + + + <dd> <p>The credentials will be sent over the network unencrypted.</p> </dd> + + + <dd> <p>The credentials must be from a user who is currently logged on.</p> </dd> + + + + + <p> Indicates the type of control protocol that is used in streaming or downloading. </p> + + + <dd> <p> The protocol type has not yet been determined. </p> </dd> + + + <dd> <p> The protocol type is {{HTTP}}. This includes {{HTTPv9}}, {{WMSP}}, and {{HTTP}} download. </p> </dd> + + + <dd> <p> The protocol type is Real Time Streaming Protocol ({{RTSP}}). </p> </dd> + + + <dd> <p> The content is read from a file. The file might be local or on a remote share. </p> </dd> + + + <dd> <p>The protocol type is multicast.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p> </p><p>Describes the type of transport used in streaming or downloading data ({{TCP}} or {{UDP}}).</p> + + + <dd> <p>The data transport type is {{UDP}}.</p> </dd> + + + <dd> <p>The data transport type is {{TCP}}.</p> </dd> + + + + + <p> </p><p>Defines the status of the cache for a media file or entry.</p> + + + <dd> <p>The cache for a file or entry does not exist.</p> </dd> + + + <dd> <p>The cache for a file or entry is growing.</p> </dd> + + + <dd> <p>The cache for a file or entry is completed.</p> </dd> + + + + + <p>Defines statistics collected by the network source. The values in this enumeration define property identifiers ({{PIDs}}) for the <strong>{{MFNETSOURCE_STATISTICS}}</strong> property.</p><p>To retrieve statistics from the network source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MFNETSOURCE_STATISTICS_SERVICE}}</strong> and the interface identifier {{IID_IPropertyStore}}. The retrieved reference is an <strong>{{IPropertyStore}}</strong> reference. To get the value of a network statistic, construct a <strong>{{PROPERTYKEY}}</strong> with <strong>fmtid</strong> equal to <strong>{{MFNETSOURCE_STATISTICS}}</strong> and <strong>pid</strong> equal to a value from this enumeration. Then call <strong>{{IPropertyStore::GetValue}}</strong> with the property key to retrieve the value of the statistic as a <strong>{{PROPVARIANT}}</strong>. </p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Specifies how the default proxy locator will specify the connection settings to a proxy server. The application must set these values in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> + + + + <p> </p><p>Defines actions that can be performed on a stream.</p> + + + <dd> <p>No action.</p> </dd> + + + <dd> <p>Play the stream.</p> </dd> + + + <dd> <p>Copy the stream.</p> </dd> + + + <dd> <p>Export the stream to another format.</p> </dd> + + + <dd> <p>Extract the data from the stream and pass it to the application. For example, acoustic echo cancellation requires this action.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Last member of the enumeration.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_CGMSA}}</strong>.</p> + <p>These flags are equivalent to the {{OPM_CGMSA_Protection_Level}} enumeration constants used in the Output Protection Protocol ({{OPM}}). </p> + + + <dd> <p>{{CGMS}}-A is disabled.</p> </dd> + + + <dd> <p>The protection level is Copy Freely.</p> </dd> + + + <dd> <p>The protection level is Copy No More.</p> </dd> + + + <dd> <p>The protection level is Copy One Generation.</p> </dd> + + + <dd> <p>The protection level is Copy Never.</p> </dd> + + + <dd> <p>Redistribution control (also called the broadcast flag) is required. This flag can be combined with the other flags.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_ACP}}</strong>.</p> + + + <dd> <p>Specifies {{ACP}} is disabled.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level one.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level two.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level three.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Specifies values for audio constriction.</p> + <p>Values defined by the <strong>{{MFAudioConstriction}}</strong> enumeration matches the <strong>{{EAudioConstriction}}</strong> enumeration defined <strong>audioenginebaseapo.h</strong>.</p> + + + <dd> <p>Audio is not constricted. </p> </dd> + + + <dd> <p>Audio is down sampled to 48 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 44 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 14hKz/16-bit.</p> </dd> + + + <dd> <p>Audio is muted.</p> </dd> + + + + + <p> </p><p>Defines the version number for sample protection.</p> + + + <dd> <p>No sample protection.</p> </dd> + + + <dd> <p>Version 1.</p> </dd> + + + <dd> <p>Version 2.</p> </dd> + + + <dd> <p>Version 3.</p> </dd> + + + + + <p>Defines flags for the {{MF_TRANSCODE_TOPOLOGYMODE}} attribute.</p> + + + + <p>Defines the profile flags that are set in the {{MF_TRANSCODE_ADJUST_PROFILE}} attribute.</p><p>These flags are checked by <strong>{{MFCreateTranscodeTopology}}</strong> during topology building. Based on these flags, <strong>{{MFCreateTranscodeTopology}}</strong> adjusts the transcode profile by modifying the configuration settings for the streams according to the input requirements of the encoder used in the topology. </p><p>For more information about the stream settings that an application can specify, see Using the Transcode {{API}}.</p> + <p>If the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag is specified, the following changes are made for the video stream:</p><ul> <li>If the frame rate of the media source specified in the <em>pSrc</em> parameter of <strong>{{MFCreateTranscodeTopology}}</strong> and the frame rate specified by the application in the <strong>{{MF_MT_FRAME_RATE}}</strong> attribute differ by less than 1/1000, the profile uses the media source frame rate. This is because the pipeline considers the difference to be negligible.</li> <li>If the application does not specify an interlaced mode by setting the <strong>{{MF_MT_INTERLACE_MODE}}</strong> attribute, the profile is changed to use progressive frames.</li> </ul><p>The <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag must be accompanied with the required audio and video stream attributes provided by the application. For the audio stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_AUDIO_NUM_CHANNELS}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_SAMPLES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BLOCK_ALIGNMENT}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_AVG_BYTES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BITS_PER_SAMPLE}}</strong> </li> </ul><p> For the video stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_FRAME_RATE}}</strong> </li> <li> <strong>{{MF_MT_FRAME_SIZE}}</strong> </li> <li> <strong>{{MF_MT_AVG_BITRATE}}</strong> </li> <li> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </li> </ul><p> If these attributes are not set, <strong>{{MFCreateTranscodeTopology}}</strong> creates the topology but Media Session fails to generate the encoded file. The failure code depends on the {{MFT}} node in the topology. For example, if the application does not set the frame size, the {{WMV}} encoder fails to encode the content and application gets the {{MF_E_INVALIDMEDIATYPE}} error code through the Media Session. </p><p>Use the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag when you want to transcode the file by using the input stream attributes. The input source stream attributes are copied to the output media type before the {{MFT}} node is inserted in the topology. If you set additional stream attributes, this flag does not overwrite the set values. Only the missing attributes are filled with the input source's attribute values. This flag is useful in remux scenario where you want to generate the output file in the same format as the input source. If you want to perform format conversion, make sure you set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute for the stream to specify the encoder that topology builder must use. The transform node is added in the topology unless {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} is set. In this case, and the content is not encoded. Instead, if permitted by the container, the content is embedded in the specified container. </p><p>For example, assume that your input source is an {{MP3}} file. You set the container to be <strong>{{MFTranscodeContainerType_ASF}}</strong>, you do not set any stream attributes, and you set the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag. In this case, the generated output file is an {{ASF}} file (.wma) containing {{MP3}} media data. Note that if you use this flag, certain input stream attributes and the container type might not be compatible. </p> + + + + <p>Defines algorithms for the video processor which is use by {{MF_VIDEO_PROCESSOR_ALGORITHM}}.</p> + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies whether a stream associated with an <strong>{{IMFSensorDevice}}</strong> is an input or an output stream.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Defines the properties of a clock. </p> + + + <dd> <p> The interval at which the clock correlates its clock time with the system time, in 100-nanosecond units. If the value is zero, the correlation is made whenever the <strong>{{IMFClock::GetCorrelatedTime}}</strong> method is called. </p> </dd> + + + <dd> <p> The unique identifier of the underlying device that provides the time. If two clocks have the same unique identifier, they are based on the same device. If the underlying device is not shared between two clocks, the value can be <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> A bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFCLOCK_RELATIONAL_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> The clock frequency in Hz. A value of <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong> means that the clock has a frequency of 10 {{MHz}} (100-nanosecond ticks), which is the standard <strong>{{MFTIME}}</strong> time unit in Media Foundation. If the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the value of this field must be <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong>. </p> </dd> + + + <dd> <p> The amount of inaccuracy that may be present on the clock, in parts per billion (ppb). For example, an inaccuracy of 50 ppb means the clock might drift up to 50 seconds per billion seconds of real time. If the tolerance is not known, the value is <strong>{{MFCLOCK_TOLERANCE_UNKNOWN}}</strong>. This constant is equal to 50 parts per million (ppm). </p> </dd> + + + <dd> <p> The amount of jitter that may be present, in 100-nanosecond units. Jitter is the variation in the frequency due to sampling the underlying clock. Jitter does not include inaccuracies caused by drift, which is reflected in the value of <strong>dwClockTolerance</strong>. </p> <p> For clocks based on a single device, the minimum jitter is the length of the tick period (the inverse of the frequency). For example, if the frequency is 10 Hz, the jitter is 0.1 second, which is 1,000,000 in <strong>{{MFTIME}}</strong> units. This value reflects the fact that the clock might be sampled just before the next tick, resulting in a clock time that is one period less than the actual time. If the frequency is greater than 10 {{MHz}}, the jitter should be set to 1 (the minimum value). </p> <p> If a clock's underlying hardware device does not directly time stamp the incoming data, the jitter also includes the time required to dispatch the driver's interrupt service routine ({{ISR}}). In that case, the expected jitter should include the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_ISR}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the device driver's {{ISR}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_DPC}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the deferred procedure call ({{DPC}}) processing. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_PASSIVE}}</strong></dt> </dl> </td><td> <p> Jitter due to dropping to normal thread execution before time stamping. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Contains information about a revoked component.</p> + + + <dd> <p>Specifies the reason for the revocation. The following values are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_BOOT_DRIVER_VERIFICATION_FAILED}}</strong></dt> </dl> </td><td> <p>A boot driver could not be verified.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>A certificate in a trusted component's certificate chain was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_HS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The high-security certificate for authenticating the protected environment ({{PE}}) was revoked.</p> <p>The high-security certificate is typically used by {{ITAs}} that handle high-definition content and next-generation formats such as {{HD}}-{{DVD}}.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_EKU}}</strong></dt> </dl> </td><td> <p>A certificate's extended key usage ({{EKU}}) object is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_ROOT}}</strong></dt> </dl> </td><td> <p>The root certificate is not valid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_LS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The low-security certificate for authenticating the {{PE}} was revoked.</p> <p>The low-security certificate is typically used by {{ITAs}} that handle standard-definition content and current-generation formats.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_REVOKED}}</strong></dt> </dl> </td><td> <p>A trusted component was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_ABSENT}}</strong></dt> </dl> </td><td> <p>The {{GRL}} was not found.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_LOAD_FAILED}}</strong></dt> </dl> </td><td> <p>Could not load the global revocation list ({{GRL}}).</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_INVALID_GRL_SIGNATURE}}</strong></dt> </dl> </td><td> <p>The {{GRL}} signature is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MINCRYPT_FAILURE}}</strong></dt> </dl> </td><td> <p>A certificate chain was not well-formed, or a boot driver is unsigned or is signed with an untrusted certificate.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TEST_SIGNED_COMPONENT_LOADING}}</strong></dt> </dl> </td><td> <p>A component was signed by a test certificate.</p> </td></tr> </table> <p>?</p> <p>In addition, one of the following flags might be present, indicating the type of component that failed to load.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_USER_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>User-mode component.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_KERNEL_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>Kernel-mode component.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains a hash of the file header.</p> </dd> + + + <dd> <p>Contains a hash of the public key in the component's certificate.</p> </dd> + + + <dd> <p>File name of the revoked component.</p> </dd> + + + + + <p> </p><p>Contains information about one or more revoked components.</p> + + + <dd> <p>Revocation information version.</p> </dd> + + + <dd> <p>Number of elements in the <strong>pRRComponents</strong> array.</p> </dd> + + + <dd> <p>Array of <strong>{{MFRR_COMPONENT_HASH_INFO}}</strong> structures.</p> </dd> + + + + + <p> </p><p>Contains an image that is stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Picture</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Picture</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains a picture related to the content, such as album art.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMPicture for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li><strong>{{ASF_FLAT_PICTURE}}</strong> structure. </li> <li> Null-terminated wide-character string that contains the {{MIME}} type. </li> <li> Null-terminated wide-character string that contains a description. </li> <li> <p>Image data.</p> </li> </ul><p>This format differs from the <strong>{{WM_PICTURE}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_PICTURE}}</strong> structure contains internal references to two strings and the image data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_PICTURE}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + + <p> </p><p>Contains synchronized lyrics stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Lyrics_Synchronised</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Lyrics_Synchronised</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains lyrics synchronized to times in the source file.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMLyrics_Synchronised for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li> <p><strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure.</p> </li> <li> <p>Null-terminated wide-character string that contains a description.</p> </li> <li> <p>Lyric data. The format of the lyric data is described in the Windows Media Format {{SDK}} documentation.</p> </li> </ul><p>This format differs from the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure contains internal references to two strings and the lyric data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + <dd> <p>Specifies the format of time stamps in the lyrics. This member is equivalent to the <strong>bTimeStampFormat</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure is documented in the Windows Media Format {{SDK}}.</p> </dd> + + + <dd> <p>Specifies the type of synchronized strings that are in the lyric data. This member is equivalent to the <strong>bContentType</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure.</p> </dd> + + + <dd> <p>Size, in bytes, of the lyric data.</p> </dd> + + + + + <p>Specifies a new attribute value for a topology node.</p> + <p> Due to an error in the structure declaration, the <strong>u64</strong> member is declared as a 32-bit integer, not a 64-bit integer. Therefore, any 64-bit value passed to the <strong>{{IMFTopologyNodeAttributeEditor::UpdateNodeAttributes}}</strong> method is truncated to 32 bits. </p> + + + <dd> <p> The identifier of the topology node to update. To get the identifier of a topology node, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> {{GUID}} that specifies the attribute to update. </p> </dd> + + + <dd> <p> Attribute type, specified as a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT32}}</strong>. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT64}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> Attribute value (floating point). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>. </p> </dd> + + + + + <p> </p><p>Specifies the buffering requirements of a file.</p> + <p>This structure describes the buffering requirements for content encoded at the bit rate specified in the <strong>dwBitrate</strong>. The <strong>msBufferWindow</strong> member indicates how much data should be buffered before starting playback. The size of the buffer in bytes is <strong>msBufferWinow</strong>?<strong>dwBitrate</strong> / 8000.</p> + + + <dd> <p>Bit rate, in bits per second.</p> </dd> + + + <dd> <p>Size of the buffer window, in milliseconds.</p> </dd> + + + + + <p> </p><p>Specifies the buffering parameters for a network byte stream.</p> + + + <dd> <p>Size of the file, in bytes. If the total size is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Size of the playable media data in the file, excluding any trailing data that is not useful for playback. If this value is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MF_LEAKY_BUCKET_PAIR}}</strong> structures. Each member of the array gives the buffer window for a particular bit rate.</p> </dd> + + + <dd> <p>The number of elements in the <strong>prgBuckets</strong> array.</p> </dd> + + + <dd> <p>Amount of data to buffer from the network, in 100-nanosecond units. This value is in addition to the buffer windows defined in the <strong>prgBuckets</strong> member.</p> </dd> + + + <dd> <p>Amount of additional data to buffer when seeking, in 100-nanosecond units. This value reflects the fact that downloading must start from the previous key frame before the seek point. If the value is unknown, set this member to zero.</p> </dd> + + + <dd> <p>The playback duration of the file, in 100-nanosecond units. If the duration is unknown, set this member to zero.</p> </dd> + + + <dd> <p>Playback rate.</p> </dd> + + + + + <p>Specifies a range of bytes.</p> + + + <dd> <p>The offset, in bytes, of the start of the range.</p> </dd> + + + <dd> <p>The offset, in bytes, of the end of the range.</p> </dd> + + + + + <p> </p><p>Contains the authentication information for the credential manager.</p> + + + <dd> <p>The response code of the authentication challenge. For example, {{NS_E_PROXY_ACCESSDENIED}}.</p> </dd> + + + <dd> <p>Set this flag to <strong>{{TRUE}}</strong> if the currently logged on user's credentials should be used as the default credentials.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the authentication package will send unencrypted credentials over the network. Otherwise, the authentication package encrypts the credentials.</p> </dd> + + + <dd> <p>The original {{URL}} that requires authentication.</p> </dd> + + + <dd> <p>The name of the site or proxy that requires authentication.</p> </dd> + + + <dd> <p>The name of the realm for this authentication.</p> </dd> + + + <dd> <p>The name of the authentication package. For example, "Digest" or "{{MBS_BASIC}}".</p> </dd> + + + <dd> <p>The number of times that the credential manager should retry after authentication fails.</p> </dd> + + + + + <p> </p><p>Describes an action requested by an output trust authority ({{OTA}}). The request is sent to an input trust authority ({{ITA}}).</p> + + + <dd> <p>Specifies the action as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains a ticket object, provided by the {{OTA}}.</p> </dd> + + + <dd> <p>Size of the ticket object, in bytes.</p> </dd> + + + + + <p> </p><p>Contains parameters for the <strong>{{IMFInputTrustAuthority::BindAccess}}</strong> or <strong>{{IMFInputTrustAuthority::UpdateAccess}}</strong> method.</p> + + + + <p>Contains information about the audio and video streams for the transcode sink activation object.</p><p>To get the information stored in this structure, call <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong>.</p> + <p>The <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong> method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-<strong>{{NULL}}</strong> after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> + + + + <p>Contains parameters for the <strong>{{IMFLocalMFTRegistration::RegisterMFTs}}</strong> method.</p> + + + + <p>Contains information about the data that you want to provide as input to a protection system function.</p> + + + <dd> <p>The identifier of the function that you need to run. This value is defined by the implementation of the protection system. </p> </dd> + + + <dd> <p>The size of the private data that the implementation of the security processor implementation reserved. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The size of the data provided as input to the protection system function that you want to run. </p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The data to provide as input to the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for use by the independent hardware vendor ({{IHV}}). Bytes <strong>PrivateDataByteCount</strong> through <strong>{{HWProtectionDataByteCount}}</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the input data for the protection system function. </p> <p>The protection system specification defines the format and size of the {{DRM}} function.</p> </dd> + + + + + <p>Contains information about the data you received as output from a protection system function.</p> + + + <dd> <p>The size of the private data that the implementation of the security processor reserves, in bytes. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The maximum size of data that the independent hardware vendor ({{IHV}}) can return in the output buffer, in bytes.</p> </dd> + + + <dd> <p>The size of the data that the {{IHV}} wrote to the output buffer, in bytes.</p> </dd> + + + <dd> <p>The result of the protection system function.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data. </p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent running the protection system function. +</p> </dd> + + + <dd> <p>The output of the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for {{IHV}} use. Bytes <strong>PrivateDataByteCount</strong> through <strong>MaxHWProtectionDataByteCount</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the region of the array into which the driver should return the output data from the protection system function.</p> <p>The protection system specification defines the format and size of the function.</p> </dd> + + + + + <p>Advises the secure processor of the Multimedia Class Scheduler service ({{MMCSS}}) parameters so that real-time tasks can be scheduled at the expected priority.</p> + + + <dd> <p>The identifier for the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread that runs the {{MMCSS}} task.</p> </dd> + + + + + + + + + + + <p>Provides playback controls for protected and unprotected content. The Media Session and the protected media path ({{PMP}}) session objects expose this interface. This interface is the primary interface that applications use to control the Media Foundation pipeline.</p><p>To obtain a reference to this interface, call <strong>{{MFCreateMediaSession}}</strong> or <strong>{{MFCreatePMPMediaSession}}</strong>.</p> + + + + <p> Sets a topology on the Media Session. </p> + <p> If <em>pTopology</em> is a full topology, set the <strong>{{MFSESSION_SETTOPOLOGY_NORESOLUTION}}</strong> flag in the <em>dwSetTopologyFlags</em> parameter. Otherwise, the topology is assumed to be a partial topology. The Media Session uses the topology loader to resolve a partial topology into a full topology.</p><p>If the Media Session is currently paused or stopped, the <strong>SetTopology</strong> method does not take effect until the next call to <strong>{{IMFMediaSession::Start}}</strong>.</p><p>If the Media Session is currently running, or on the next call to <strong>Start</strong>, the <strong>SetTopology</strong> method does the following:</p><ul> <li>If the <strong>{{MFSESSION_SETTOPOLOGY_IMMEDIATE}}</strong> flag is set in <em>dwSetTopologyFlags</em>, the Media Session ends the current presentation immediately, clears all pending topologies, and uses <em>pTopology</em> to start a new presentation.</li> <li>Otherwise, the Media Session queues <em>pTopology</em> and starts the new presentation when the current presentation has completed. If there is no current presentation, the new presentation starts immediately.</li> <li>Starting in Windows?7, you can also specify the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag to clear the current topology but leave any other pending topologies on the queue.</li> </ul><p> This method is asynchronous. If the method returns {{S_OK}}, the Media Session sends an {{MESessionTopologySet}} event when the operation completes. If the Media Session is currently paused to stopped, the Media Session does not send the {{MESessionTopologySet}} event until the next call to <strong>{{IMFMediaSession::Start}}</strong> </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_INVALID_TIME_ATTRIBUTES}}</strong></dt> </dl> </td><td> <p>The topology has invalid values for one or more of the following attributes:</p> <ul> <li> <strong>{{MF_TOPONODE_MEDIASTART}}</strong> </li> <li> <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTART}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTOP}}</strong> </li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_DEBUGGING_NOT_ALLOWED}}</strong></dt> </dl> </td><td> <p> Protected content cannot be played while debugging. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_SETTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to the topology object's <strong>{{IMFTopology}}</strong> interface. </p> </dd> + + + + + <p> </p><p>Clears all of the presentations that are queued for playback in the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionTopologiesCleared}} event.</p><p>This method does not clear the current topology; it only removes topologies that are placed in the queue, waiting for playback. To remove the current topology, call <strong>{{IMFMediaSession::SetTopology}}</strong> with the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Starts the Media Session. </p> + <p>When this method is called, the Media Session starts the presentation clock and begins to process media samples.</p><p>This method is asynchronous. When the method completes, the Media Session sends an {{MESessionStarted}} event.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that specifies the time format for the <em>pvarStartPosition</em> parameter. This parameter can be <strong>{{NULL}}</strong>. The value <strong>{{NULL}}</strong> is equivalent to passing in <strong>{{GUID_NULL}}</strong>.</p> <p>The following time format {{GUIDs}} are defined:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>Presentation time. The <em>pvarStartPosition</em> parameter must have one of the following <strong>{{PROPVARIANT}}</strong> types.</p> <ul> <li><strong>{{VT_I8}}</strong>: The <em>pvarStartPosition</em> parameter contains the starting position in 100-nanosecond units, relative to the start of the presentation.</li> <li><strong>{{VT_EMPTY}}</strong>: Playback starts from the current position.</li> </ul> <p>All media sources support this time format.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong></dt> </dl> </td><td> <p>Segment offset. This time format is supported by the Sequencer Source. The starting time is an offset within a segment.</p> <p>Call the <strong>{{MFCreateSequencerSegmentOffset}}</strong> function to create the <strong>{{PROPVARIANT}}</strong> value for the +<em>pvarStartPosition</em> parameter.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong></dt> </dl> </td><td> <strong>Note</strong>??Requires Windows?7 or later. ? <p>Skip to a playlist entry. The <em>pvarStartPosition</em> parameter specifies the index of the playlist entry, relative to the current entry. For example, the value 2 skips forward two entries. To skip backward, pass a negative value. The <strong>{{PROPVARIANT}}</strong> type is <strong>{{VT_I4}}</strong>.</p> <p>If a media source supports this time format, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns one or both of the following flags:</p> <ul> <li><strong>{{MFMEDIASOURCE_CAN_SKIPFORWARD}}</strong></li> <li><strong>{{MFMEDIASOURCE_CAN_SKIPBACKWARD}}</strong></li> </ul> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that specifies the starting position for playback. The meaning and data type of this parameter are indicated by the <em>pguidTimeFormat</em> parameter. </p> </dd> + + + + + <p> </p><p>Pauses the Media Session.</p> + <p>This method pauses the presentation clock.</p><p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionPaused}} event.</p><p>This method fails if the Media Session is stopped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SESSION_PAUSEWHILESTOPPED}}</strong></dt> </dl> </td><td> <p>The Media Session cannot pause while stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Stops the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionStopped}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Closes the Media Session and releases all of the resources it is using.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionClosed}} event.</p><p>After the <strong>Close</strong> method is called, the only valid methods on the Media Session are the following:</p><ul> <li> <p> <strong>{{IMFMediaSession::GetClock}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetFullTopology}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetSessionCapabilities}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::Shutdown}}</strong> </p> </li> </ul><p>All other methods return {{MF_E_INVALIDREQUEST}}, or else queue an event with that error code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the Media Session and releases all the resources used by the Media Session.</p> + <p>Call this method when you are done using the Media Session, before the final call to <strong>{{IUnknown::Release}}</strong>. Otherwise, your application will leak memory.</p><p>After this method is called, other <strong>{{IMFMediaSession}}</strong> methods return {{MF_E_SHUTDOWN}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the Media Session's presentation clock.</p> + <p>The application can query the returned <strong>{{IMFClock}}</strong> reference for the <strong>{{IMFPresentationClock}}</strong> interface. However, the application should not use this interface to control the state of the presentation clock. Instead, the application should always call the transport control methods on the Media Session's <strong>{{IMFMediaSession}}</strong> interface, such as <strong>Start</strong>, <strong>Stop</strong>, and <strong>Pause</strong>.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The Media Session does not have a presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the capabilities of the Media Session, based on the current presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_PAUSE}}</strong></dt> </dl> </td><td> <p>The Media Session can be paused.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_FORWARD}}</strong></dt> </dl> </td><td> <p>The Media Session supports forward playback at rates faster than 1.0.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_REVERSE}}</strong></dt> </dl> </td><td> <p>The Media Session supports reverse playback.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_SEEK}}</strong></dt> </dl> </td><td> <p>The Media Session can be seeked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_START}}</strong></dt> </dl> </td><td> <p>The Media Session can be started.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> Gets a topology from the Media Session.</p><p>This method can get the current topology or a queued topology.</p> + <p> If the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag is specified in the <em>dwGetFullTopologyFlags</em> parameter, the method returns the topology for the current presentation. Otherwise, the method searches all of the queued topologies for one that matches the identifier given in the <em>TopoId</em> parameter. </p><p> This method can be used to retrieve the topology for the current presentation or any pending presentations. It cannot be used to retrieve a topology that has already ended. </p><p> The topology returned in <em>ppFullTopo</em> is a full topology, not a partial topology. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_GETFULLTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The identifier of the topology. This parameter is ignored if the <em>dwGetFullTopologyFlags</em> parameter contains the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag. To get the identifier of a topology, call <strong>{{IMFTopology::GetTopologyID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology. The caller must release the interface. </p> </dd> + + + + + <p>Creates a media source from a {{URL}} or a byte stream. The Source Resolver implements this interface. To create the source resolver, call <strong>{{MFCreateSourceResolver}}</strong> function.</p> + + + + <p> Creates a media source or a byte stream from a {{URL}}. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain either the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag, but should not contain both.</p><p>It is recommended that you do not set <strong>{{MF_RESOLUTION_WRITE}}</strong> on the input argument <em>dwFlags</em> unless it is necessary for your scenario. For most use-cases, media sources do not need to be created with write capability. Creating a media source with write capability may have a lower probability of success than creating a media source without write capability. This is because there can be stricter checks on the content represented by the {{URL}} when creating a media source with write capability.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><strong>Note</strong>??This method cannot be called remotely.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p> The {{URL}} scheme is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Null-terminated string that contains the {{URL}} to resolve. </p> </dd> + + + <dd> <p> Bitwise {{OR}} of one or more flags. See <strong>Source Resolver Flags</strong>. See remarks below.</p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Creates a media source from a byte stream. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values (both if possible):</p><ul> <li> Specify the {{URL}} in the <em>pwszURL</em> parameter. </li> <li> Specify the {{MIME}} type by setting the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. (This attribute might be set already when you create the byte stream, depending on how the byte stream was created.) </li> </ul><strong>Note</strong>??This method cannot be called remotely.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> This byte stream is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p> Null-terminated string that contains the {{URL}} of the byte stream. The {{URL}} is optional and can be <strong>{{NULL}}</strong>. See Remarks for more information. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source or a byte stream from a {{URL}}.</p> + <p>The <em>dwFlags</em> parameter must contain either the {{MF_RESOLUTION_MEDIASOURCE}} flag or the {{MF_RESOLUTION_BYTESTREAM}} flag, but should not contain both.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromURL}}</strong> to get a reference to the object that was created.</p><p>The usage of the <em>pProps</em> parameter depends on the implementation of the media source. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p>The {{URL}} scheme is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated string that contains the {{URL}} to resolve.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Completes an asynchronous request to create an object from a {{URL}}. </p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p> The operation was canceled. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromByteStream}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p>The byte stream is not supported.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream does not support seeking.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p>A null-terminated string that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of one or more flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A oointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source from a byte stream.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The application canceled the operation.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Cancels an asynchronous request to create an object. </p> + <p> You can use this method to cancel a previous call to <strong>BeginCreateObjectFromByteStream</strong> or <strong>BeginCreateObjectFromURL</strong>. Because these methods are asynchronous, however, they might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method. </p><strong>Note</strong>??This method cannot be called remotely.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSourceResolver::BeginCreateObjectFromByteStream}}</strong> or <strong>{{IMFSourceResolver::BeginCreateObjectFromURL}}</strong> method. </p> </dd> + + + + + <p>Implemented by media source objects.</p><p>Media sources are objects that generate media data. For example, the data might come from a video file, a network stream, or a hardware device, such as a camera. Each media source contains one or more streams, and each stream delivers data of one type, such as audio or video.</p> + <p>In Windows?8, this interface is extended with <strong>{{IMFMediaSourceEx}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the media source.</p> + <p>The characteristics of a media source can change at any time. If this happens, the source sends an {{MESourceCharacteristicsChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves a copy of the media source's presentation descriptor. Applications use the presentation descriptor to select streams and to get information about the source content.</p> + <p>The presentation descriptor contains the media source's default settings for the presentation. The application can change these settings by selecting or deselecting streams, or by changing the media type on a stream. Do not modify the presentation descriptor unless the source is stopped. The changes take affect when the source's <strong>{{IMFMediaSource::Start}}</strong> method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation descriptor's <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Starts, seeks, or restarts the media source by specifying where to start playback.</p> + <p>This method is asynchronous. If the operation succeeds, the media source sends the following events:</p><ul> <li> For each new stream, the source sends an {{MENewStream}} event. This event is sent for the first <strong>Start</strong> call in which the stream appears. The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> For each <em>updated</em> stream, the source sends an {{MEUpdatedStream}} event. A stream is updated if the stream already existed when <strong>Start</strong> was called (for example, if the application seeks during playback). The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> If the previous state was stopped, the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused and the starting position is the current position (<strong>{{VT_EMPTY}}</strong>), the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused, and a new starting position is specified, the source sends an {{MESourceSeeked}} event. </li> <li> If the source sends an {{MESourceStarted}} event, each media stream sends an {{MEStreamStarted}} event. If the source sends an {{MESourceSeeked}} event, each stream sends an {{MEStreamSeeked}} event. </li> </ul><p> If the start operation fails asynchronously (after the method returns <strong>{{S_OK}}</strong>), the media source sends an {{MESourceStarted}} event that contains a failure code, without sending any of the other events listed here. If the method fails synchronously (returns an error code), no events are raised. </p><p> A call to <strong>Start</strong> results in a <em>seek</em> if the previous state was started or paused, and the new starting position is not <strong>{{VT_EMPTY}}</strong>. Not every media source can seek. If a media source can seek, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the <strong>{{MFMEDIASOURCE_CAN_SEEK}}</strong> flag. </p><p> Events from the media source are not synchronized with events from the media streams. If you seek a media source, therefore, you can still receive samples from the earlier position after getting the {{MESourceSeeked}} event. If you need to synchronize the operations, wait for the stream event, {{MEStreamSeeked}}, which marks the exact point in the stream where the seek occurs. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The start position is past the end of the presentation ({{ASF}} media source). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_HW_MFT_FAILED_START_STREAMING}}</strong></dt> </dl> </td><td> <p>A hardware device was unable to start streaming. This error code can be returned by a media source that represents a hardware device, such as a camera. For example, if the camera is already being used by another application, the method might return this error code.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The start request is not valid. For example, the start position is past the end of the presentation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The media source's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p> The media source does not support the time format specified in <em>pguidTimeFormat</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get the presentation descriptor, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. You can modify the presentation descriptor before calling <strong>Start</strong>, to select or deselect streams or change the media types. </p> </dd> + + + <dd> <p> Pointer to a {{GUID}} that specifies the time format. The time format defines the units for the <em>pvarStartPosition</em> parameter. If the value <em></em> is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. This parameter can be <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, it is equalivent to <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> Specifies where to start playback. The units of this parameter are indicated by the time format given in <em>pguidTimeFormat</em>. If the time format is <strong>{{GUID_NULL}}</strong>, the variant type must be <strong>{{VT_I8}}</strong> or <strong>{{VT_EMPTY}}</strong>. Use <strong>{{VT_I8}}</strong> to specify a new starting position, in 100-nanosecond units. Use <strong>{{VT_EMPTY}}</strong> to start from the current position. Other time formats might use other <strong>{{PROPVARIANT}}</strong> types. </p> </dd> + + + + + <p> </p><p>Stops all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourceStopped}} event, and every active stream sends an {{MEStreamStopped}} event. If the method returns a failure code, no events are raised.</p><p>When a media source is stopped, its current position reverts to zero. After that, if the <strong>Start</strong> method is called with {{VT_EMPTY}} for the starting position, playback starts from the beginning of the presentation.</p><p>While the source is stopped, no streams produce data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourcePaused}} event, and every active stream sends an {{MEStreamPaused}} event. If the method returns a failure code, no events are raised.</p><p>The media source must be in the started state. The method fails if the media source is paused or stopped.</p><p>While the source is paused, calls to <strong>{{IMFMediaStream::RequestSample}}</strong> succeed, but the streams will not deliver any samples until after the source is started again. Note that the source's event queue is not serialized with the stream event queues, so the client might receive some samples after the {{MESourcePaused}} event, due to multi-threading issues. But the client will not receive any samples from a stream after the {{MEStreamPaused}} event.</p><p>Not every media source can pause. If a media source can pause, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the {{MFMEDIASOURCE_CAN_PAUSE}} flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>Invalid state transition. The media source must be in the started state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the media source and releases the resources it is using.</p> + <p>If the application creates the media source, either directly or through the source resolver, the application is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks.</p><p>After this method is called, methods on the media source and all of its media streams return {{MF_E_SHUTDOWN}} (except for <strong>{{IUnknown}}</strong> methods).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFMediaSource}}</strong> interface to provide additional capabilities for a media source.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media source. </p> + <p>Implementations of this interface can return <strong>{{E_NOTIMPL}}</strong> for any methods that are not required by the media source.</p> + + + + <p>Gets an attribute store for the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the entire source. For stream-level attributes, use the <strong>{{IMFMediaSourceEx::GetStreamAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute store for a stream on the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the specified stream. For attributes that apply to the entire source, use the <strong>{{IMFMediaSourceEx::GetSourceAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support stream-level attributes.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. To get the identifier, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong> on the stream descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets a reference to the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager on the media source.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} Manager. The media source should query this reference for the <strong>{{IMFDXGIDeviceManager}}</strong> interface.</p> </dd> + + + + + <p> Creates a media source or a byte stream from a {{URL}}. </p> + <p>Applications do not use this interface. This interface is exposed by scheme handlers, which are used by the source resolver. A scheme handler is designed to parse one type of {{URL}} scheme. When the scheme handler is given a {{URL}}, it parses the resource that is located at that {{URL}} and creates either a media source or a byte stream.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called by the media pipeline to provide the app with an instance of <strong>{{IMFPresentationClock}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Represents one stream in a media source. </p> + <p>Streams are created when a media source is started. For each stream, the media source sends an {{MENewStream}} event with a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface.</p> + + + + <p> </p><p>Retrieves a reference to the media source that created this media stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a stream descriptor for this media stream.</p> + <p>Do not modify the stream descriptor. To change the presentation, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> and modify the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Requests a sample from the media source. </p> + <p>If <em>pToken</em> is not <strong>{{NULL}}</strong>, the media stream calls <strong>AddRef</strong> on <em>pToken</em> and places the token in a first-in, first-out queue.</p><p>When the next sample is available, the media stream stream does the following:</p><ol> <li> Pulls the first token from the queue. </li> <li> Sets the <strong>{{MFSampleExtension_Token}}</strong> attribute on the media sample. The attribute data is a reference to the token object. </li> <li> Sends an {{MEMediaSample}} event. The event data is a reference to the media sample's <strong>{{IMFSample}}</strong> interface. </li> <li> Calls <strong>Release</strong> on the token. </li> </ol><p>If the media stream cannot fulfill the caller's request for a sample, it simply releases the token object and skips steps 2 and 3.</p><p>The caller should monitor the reference count on the request token. If the media stream sends an {{MEMediaSample}} event, get the <strong>{{MFSampleExtension_Token}}</strong> attribute from the sample and match the attribute value against the token. If the token's reference count falls to zero and you did not receive an {{MEMediaSample}} event, it means that the request was dropped.</p><p>Because the Media Foundation pipeline is multithreaded, the source's <strong>RequestSample</strong> method might get called after the source has stopped. If the media source is stopped, the method should return <strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong>. The pipeline does not treat this return code as an error condition. If the source returns any other error code, the pipeline treats it as fatal error and halts the session.</p><strong>Note</strong>??Earlier versions of the documentation listed the wrong error code for this case.?<p>If the media source is paused, the method succeeds, but the stream does not deliver the sample until the source is started again.</p><p>If a media source enounters an error asynchronously while processing data, it should signal the error in one of the following ways (but not both):</p><ul> <li>Return an error code from the next <strong>RequestSample</strong> call.</li> <li>Send an {{MEError}} event.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_END_OF_STREAM}}</strong></dt> </dl> </td><td> <p> The end of the stream was reached. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong></dt> </dl> </td><td> <p> The media source is stopped.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The source's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface to an object that is used as a token for the request. The caller must implement this object. This parameter can be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Implemented by media sink objects. This interface is the base interface for all Media Foundation media sinks. Stream sinks handle the actual processing of data on each stream.</p> + + + + <p> </p><p>Gets the characteristics of the media sink.</p> + <p> The characteristics of a media sink are fixed throughout the life time of the sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_FIXED_STREAMS}}</strong></strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The media sink has a fixed number of streams. It does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> and <strong>{{IMFMediaSink::RemoveStreamSink}}</strong> methods. This flag is a hint to the application. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CANNOT_MATCH_CLOCK}}</strong></strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The media sink cannot match rates with an external clock.</p> <p>For best results, this media sink should be used as the time source for the presentation clock. If any other time source is used, the media sink cannot match rates with the clock, with poor results (for example, glitching).</p> <p>This flag should be used sparingly, because it limits how the pipeline can be configured.</p> <p>For more information about the presentation clock, see Presentation Clock.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_RATELESS}}</strong></strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The media sink is rateless. It consumes samples as quickly as possible, and does not synchronize itself to a presentation clock.</p> <p>Most archiving sinks are rateless.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CLOCK_REQUIRED}}</strong></strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The media sink requires a presentation clock. The presentation clock is set by calling the media sink's <strong>{{IMFMediaSink::SetPresentationClock}}</strong> method.</p> <p>This flag is obsolete, because all media sinks must support the <strong>SetPresentationClock</strong> method, even if the media sink ignores the clock (as in a rateless media sink).</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CAN_PREROLL}}</strong></strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p> The media sink can accept preroll samples before the presentation clock starts. The media sink exposes the <strong>{{IMFMediaSinkPreroll}}</strong> interface. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE}}</strong></strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>The first stream sink (index 0) is a reference stream. The reference stream must have a media type before the media types can be set on the other stream sinks.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Adds a new stream sink to the media sink.</p> + <p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>If <em>pMediaType</em> is <strong>{{NULL}}</strong>, use the <strong>{{IMFMediaTypeHandler}}</strong> interface to set the media type. Call <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong> to get a reference to the interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The specified stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_EXISTS}}</strong></dt> </dl> </td><td> <p>There is already a stream sink with the same stream identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. New stream sinks cannot be added.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the new stream. The value is arbitrary but must be unique.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface, specifying the media type for the stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the new stream sink's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Removes a stream sink from the media sink.</p> + <p>After this method is called, the corresponding stream sink object is no longer valid. The <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong> and <strong>{{IMFMediaSink::GetStreamSinkById}}</strong> methods will no longer return that stream sink. You can re-use the stream identifier if you add another stream (by calling <strong>AddStreamSink</strong>).</p><p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>In some cases, the media sink supports this method but does not allow every stream sink to be removed. (For example, it might not allow stream 0 to be removed.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>This particular stream sink cannot be removed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream number is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. Stream sinks cannot be removed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream to remove. The stream identifier is defined when you call <strong>{{IMFMediaSink::AddStreamSink}}</strong> to add the stream sink.</p> </dd> + + + + + <p> </p><p>Gets the number of stream sinks on this media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of stream sinks.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by index.</p> + <p>Enumerating stream sinks is not a thread-safe operation, because stream sinks can be added or removed between calls to this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaSink::GetStreamSinkCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by stream identifier.</p> + <p>If you add a stream sink by calling the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method, the stream identifier is specified in the <em>dwStreamSinkIdentifier</em> parameter of that method. If the media sink has a fixed set of streams, the media sink assigns the stream identifiers.</p><p>To enumerate the streams by index number instead of stream identifier, call <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream identifier of the stream sink.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the presentation clock on the media sink.</p> + <p>During streaming, the media sink attempts to match rates with the presentation clock. Ideally, the media sink presents samples at the correct time according to the presentation clock and does not fall behind. Rateless media sinks are an exception to this rule, as they consume samples as quickly as possible and ignore the clock. If the sink is rateless, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_RATELESS}} flag.</p><p>The presentation clock must have a time source. Before calling this method, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> on the presentation clock to set the presentation time source. Some media sinks provide time sources; therefore, the media sink might be the time source for its own presentation clock. Regardless of what object provides the time source, however, the media sink must attempt to match rates with the clock specified in <em>pPresentationClock</em>. If a media sink cannot match rates with an external time source, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method retrieves the {{MEDIASINK_CANNOT_MATCH_CLOCK}} flag. In this case, <strong>SetPresentationClock</strong> will still succeed, but the results will not be optimal. The sink might not render samples quickly enough to match rates with the presentation clock.</p><p>If <em>pPresentationClock</em> is non-<strong>{{NULL}}</strong>, the media sink must register for clock state notifications, by calling <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock. If the method is called again with a new presentation clock, or if <em>pPresentationClock</em> is <strong>{{NULL}}</strong>, the media sink must call <strong>{{IMFPresentationClock::RemoveClockStateSink}}</strong> to deregister itself from the previous clock.</p><p>All media sinks must support this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>The presentation clock does not have a time source. Call <strong>SetTimeSource</strong> on the presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock, or <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, the media sink stops listening to the presentaton clock that was previously set, if any.</p> </dd> + + + + + <p> </p><p>Gets the presentation clock that was set on the media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>No clock has been set. To set the presentation clock, call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Shuts down the media sink and releases the resources it is using.</p> + <p>If the application creates the media sink, it is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks. In most applications, however, the application creates an activation object for the media sink, and the Media Session uses that object to create the media sink. In that case, the Media Session ? not the application ? shuts down the media sink. (For more information, see Activation Objects.)</p><p>After this method returns, all methods on the media sink return {{MF_E_SHUTDOWN}}, except for <strong>{{IUnknown}}</strong> methods and <strong>{{IMFMediaEventGenerator}}</strong> methods. The sink will not raise any events after this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a stream on a media sink object.</p> + + + + <p> </p><p>Retrieves the media sink that owns this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the stream identifier for this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the stream identifier. If this stream sink was added by calling <strong>{{IMFMediaSink::AddStreamSink}}</strong>, the stream identifier is in the <em>dwStreamSinkIdentifier</em> parameter of that method. Otherwise, the media sink defines the identifier.</p> </dd> + + + + + + + + <p> </p><p>Delivers a sample to the stream. The media sink processes the sample.</p> + <p>Call this method when the stream sink sends an {{MEStreamSinkRequestSample}} event.</p><p>This method can return {{MF_E_INVALID_TIMESTAMP}} for various reasons, depending on the implementation of the media sink:</p><ul> <li> <p>Negative time stamps.</p> </li> <li> <p>Time stamps that jump backward (within the same stream).</p> </li> <li> <p>The time stamps for one stream have drifted too far from the time stamps on another stream within the same media sink (for example, an archive sink that multiplexes the streams).</p> </li> </ul><p>Not every media sink returns an error code in these situations.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>The media sink is in the wrong state to receive a sample. For example, preroll is complete but the presenation clock has not started yet.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample has an invalid time stamp. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The media sink is paused or stopped and cannot process the sample.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>The presentation clock was not set. Call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a time stamp.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of a sample that contains valid data for the stream.</p> </dd> + + + + + <p> </p><p>Places a marker in the stream. </p> + <p>This method causes the stream sink to send an {{MEStreamSinkMarker}} event after the stream sink consumes all of the samples that were delivered up to this point (before the call to <strong>PlaceMarker</strong>).</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></strong></dt> </dl> </td><td> <p> This stream was removed from the media sink and is no longer valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the marker type, as a member of the <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that contains additional information related to the marker. The meaning of this value depends on the marker type. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that is attached to the {{MEStreamSinkMarker}} event. Call <strong>{{IMFMediaEvent::GetValue}}</strong> to get this value from the event. The caller can use this information for any purpose. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Causes the stream sink to drop any samples that it has received and has not rendered yet.</p> + <p>If any samples are still queued from previous calls to the <strong>{{IMFStreamSink::ProcessSample}}</strong> method, the media sink immediately discards them, without processing them. This can cause a glitch in the rendered output. The running state of the sink (running, paused, or stopped) does not change.</p><p>Any pending marker events from the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method are dispatched immediately, with the status code {{E_ABORT}}.</p><p>This method is synchronous. It does not return until the sink has discarded all pending samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized yet. You might need to set a media type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + + <p>Allocates video samples for a video media sink.</p><p>The stream sinks on the enhanced video renderer ({{EVR}}) expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier {{MR_VIDEO_ACCELERATION_SERVICE}}. Custom media sinks can also implement this interface. The Media Session uses this interface to allocate samples for the {{EVR}}, unless the upstream decoder supports DirectX Video Acceleration ({{DXVA}}).</p> + + + + <p> </p><p>Specifies the Direct3D device manager for the video media sink to use.</p> + <p>The media sink uses the Direct3D device manager to obtain a reference to the Direct3D device, which it uses to allocate Direct3D surfaces. The device manager enables multiple objects in the pipeline (such as a video renderer and a video decoder) to share the same Direct3D device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of the Direct3D device manager. The media sink queries this reference for the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Releases all of the video samples that have been allocated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Specifies the number of samples to allocate and the media type for the samples. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Invalid media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of samples to allocate. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Gets a video sample from the allocator. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The allocator was not initialized. Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocator}}</strong> or <strong>InitializeSampleAllocatorEx::InitializeSampleAllocatorEx</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SAMPLEALLOCATOR_EMPTY}}</strong></dt> </dl> </td><td> <p> No samples are available. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released and then returned to the pool of available samples, the allocator invokes the <strong>NotifyRelease</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when allocator samples are released for pruning by the allocator, or when the allocator is removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample to be pruned.</p> </dd> + + + + + <p>Enables an application to track video samples allocated by the enhanced video renderer ({{EVR}}).</p><p>The stream sinks on the {{EVR}} expose this interface as a service. To get a reference to the interface, call the <strong>{{IMFGetService::GetService}}</strong> method, using the <strong>{{MR_VIDEO_ACCELERATION_SERVICE}}</strong> service identifier.</p> + + + + <p>Sets the callback object that receives notification whenever a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released, it returns to the pool of available samples. When this happens, the allocator invokes the <strong>{{IMFVideoSampleAllocatorNotify::NotifyRelease}}</strong> callback.</p><p>The allocator holds at most one callback reference. Calling this method again replaces the previous callback reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFVideoSampleAllocatorNotify}}</strong> interface that receives notification, or <strong>{{NULL}}</strong> to remove the callback.</p> </dd> + + + + + <p>Gets the number of video samples that are currently available for use.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. The <strong>AllocateSample</strong> method removes a sample from the sample pool and returns it to the caller. When a sample is released, it returns to the pool. The <strong>GetFreeSampleCount</strong> method returns the count of samples that remain in the sample pool.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of available samples.</p> </dd> + + + + + <p>Allocates video samples that contain Microsoft Direct3D?11 texture surfaces.</p> + <p>You can use this interface to allocateDirect3D?11 video samples, rather than allocate the texture surfaces and media samples directly. To get a reference to this interface, call the <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> function. </p><p>To allocate video samples, perform the following steps:</p><ol> <li>Obtain a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. For a Media Foundation transform ({{MFT}}), this step occurs during the <strong>{{MFT_MESSAGE_SET_D3D_MANAGER}}</strong> event.</li> <li>Call <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> to create the allocator object and get a reference to the <strong>{{IMFVideoSampleAllocatorEx}}</strong> interface.</li> <li>Call <strong>{{IMFVideoSampleAllocator::SetDirectXManager}}</strong> on the allocator to set the <strong>{{IMFDXGIDeviceManager}}</strong> reference on the allocator.</li> <li>Call <strong>{{MFCreateAttributes}}</strong> to get a reference to the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Set the {{MF_SA_D3D11_USAGE}} and {{MF_SA_D3D11_BINDFLAGS}} attributes.</li> <li>Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocatorEx}}</strong>.</li> </ol> + + + + <p>Initializes the video sample allocator object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initial number of samples to allocate. </p> </dd> + + + <dd> <p>The maximum number of samples to allocate.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this interface to configure the allocator. Currently, the following configuration attributes are defined:</p> <ul> <li> {{MF_SA_BUFFERS_PER_SAMPLE}} </li> <li> {{MF_SA_D3D11_BINDFLAGS}} </li> <li> {{MF_SA_D3D11_USAGE}} </li> <li> {{MF_SA_D3D11_SHARED}} </li> <li> {{MF_SA_D3D11_SHARED_WITHOUT_MUTEX}} </li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Provides functionality for getting the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + + + + <p>Gets the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>Sets the border color.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color as an {{ARGB}} (alpha, red, green, blue) value.</p> </dd> + + + + + <p>Sets the source rectangle. The source rectangle is the portion of the input frame that is blitted to the destination surface.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle.</p> </dd> + + + + + <p>Sets the destination rectangle. The destination rectangle is the portion of the output surface where the source rectangle is blitted.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + + + <p>Specifies whether to flip the video image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_VIDEO_PROCESSOR_MIRROR}}</strong> value that specifies whether to flip the video image, either horizontally or vertically.</p> </dd> + + + + + <p>Specifies whether to rotate the video to the correct orientation.</p> + <p>The original orientation of the video is specified by the {{MF_MT_VIDEO_ROTATION}} attribute of the input media type.</p><p> If <em>eRotation</em> is <strong>{{ROTATION_NONE}}</strong>, the video processor does not correct the orientation of the output video. If the original video is rotated, and <em>eRotation</em> is <strong>{{ROTATION_NORMAL}}</strong>, the video processor corrects the orientation, so that the ouput video is not rotated. The video processor letterboxes the output as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{MF_VIDEO_PROCESSOR_ROTATION}}</strong> value that specifies whether to rotate the image.</p> </dd> + + + + + <p>Specifies the amount of downsampling to perform on the output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sampling size. To disable constriction, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Overrides the rotation operation that is performed in the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Rotation value in degrees. Typically, you can only use values from the <strong>{{MFVideoRotationFormat}}</strong> enumeration.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables effects that were implemented with <strong>{{IDirectXVideoProcessor::VideoProcessorBlt}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Returns the list of supported effects in the currently configured video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the list of suppported effect capabilities.</p> </dd> + + + + + <p>Represents a topology. A <em>topology</em> describes a collection of media sources, sinks, and transforms that are connected in a certain order. These objects are represented within the topology by <em>topology nodes</em>, which expose the <strong>{{IMFTopologyNode}}</strong> interface. A topology describes the path of multimedia data through these nodes.</p><p>To create a topology, call <strong>{{MFCreateTopology}}</strong>.</p> + + + + <p> Gets the identifier of the topology.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the identifier, as a <strong>{{TOPOID}}</strong> value. </p> </dd> + + + + + <p> </p><p>Adds a node to the topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pNode</em> is invalid, possibly because the node already exists in the topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a node from the topology.</p> + <p>This method does not destroy the node, so the <strong>{{IMFTopologyNode}}</strong> reference is still valid after the method returns.</p><p>The method breaks any connections between the specified node and other nodes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified node is not a member of this topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> Gets the number of nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of nodes. </p> </dd> + + + + + <p> Gets a node in the topology, specified by index. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The index is less than zero. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p> No node can be found at the index <em>wIndex</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The zero-based index of the node. To get the number of nodes in the topology, call <strong>{{IMFTopology::GetNodeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the reference. </p> </dd> + + + + + <p> </p><p>Removes all nodes from the topology.</p> + <p>You do not need to clear a topology before disposing of it. The <strong>Clear</strong> method is called automatically when the topology is destroyed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Converts this topology into a copy of another topology. </p> + <p>This method does the following:</p><ul> <li> Removes all of the nodes from this topology. </li> <li> Clones the nodes from <em>pTopology</em> and adds them to this topology. The cloned nodes have the same node identifiers as the nodes from <em>pTopology</em>. </li> <li> Connects the cloned nodes to match the connections in <em>pTopology</em>. </li> <li> Copies the attributes from <em>pTopology</em> to this topology. </li> <li> Copies the topology identifier from <em>pTopology</em> to this topology.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the topology to clone. </p> </dd> + + + + + <p>Gets a node in the topology, specified by node identifier.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The topology does not contain a node with this identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of the node to retrieve. To get a node's identifier, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the source nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the source nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty.</p> </dd> + + + + + <p> Gets the output nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the output nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty. </p> </dd> + + + + + <p>Represents a node in a topology. The following node types are supported:</p><ul> <li> Output node. Represents a media sink. </li> <li> Source node. Represents a media stream. </li> <li> Transform node. Represents a Media Foundation Transform ({{MFT}}). </li> <li> Tee node. Delivers a media stream to two or more nodes. </li> </ul><p>To create a new node, call the <strong>{{MFCreateTopologyNode}}</strong> function.</p> + + + + <p> </p><p>Sets the object associated with this node.</p> + <p>All node types support this method, but the object reference is not used by every node type.</p><table> <tr><th>Node type</th><th>Object reference</th></tr> <tr><td>Source node.</td><td>Not used.</td></tr> <tr><td>Transform node.</td><td> <strong>{{IMFTransform}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Output node</td><td> <strong>{{IMFStreamSink}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Tee node.</td><td>Not used.</td></tr> </table><p>?</p><p>If the object supports <strong>{{IPersist}}</strong>, <strong>{{IPersistStorage}}</strong>, or <strong>{{IPersistPropertyBag}}</strong>, the method gets the object's {{CLSID}} and sets the <strong>{{MF_TOPONODE_TRANSFORM_OBJECTID}}</strong> attribute on the node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the object's <strong>{{IUnknown}}</strong> interface. Use the value <strong>{{NULL}}</strong> to clear an object that was previous set.</p> </dd> + + + + + <p> Gets the object associated with this node. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> There is no object associated with this node. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the node type.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the node type, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> Retrieves the identifier of the node.</p> + <p> When a node is first created, it is assigned an identifier. Node identifiers are unique within a topology, but can be reused across several topologies. The topology loader uses the identifier to look up nodes in the previous topology, so that it can reuse objects from the previous topology. </p><p> To find a node in a topology by its identifier, call <strong>{{IMFTopology::GetNodeByID}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the identifier.</p> </dd> + + + + + <p> Sets the identifier for the node.</p> + <p> When a node is first created, it is assigned an identifier. Typically there is no reason for an application to override the identifier. Within a topology, each node identifier should be unique. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{TOPOID}}</strong> has already been set for this object. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the node. </p> </dd> + + + + + <p> </p><p>Retrieves the number of input streams that currently exist on this node.</p> + <p>The input streams may or may not be connected to output streams on other nodes. To get the node that is connected to a specified input stream, call <strong>{{IMFTopologyNode::GetInput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetInputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of input streams.</p> </dd> + + + + + <p> </p><p>Retrieves the number of output streams that currently exist on this node.</p> + <p>The output streams may or may not be connected to input streams on other nodes. To get the node that is connected to a specific output stream on this node, call <strong>{{IMFTopologyNode::GetOutput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetOutputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of output streams.</p> </dd> + + + + + <p> </p><p>Connects an output stream from this node to the input stream of another node.</p> + <p>Node connections represent data flow from one node to the next. The streams are logical, and are specified by index.</p><p>If the node is already connected at the specified output, the method breaks the existing connection. If <em>dwOutputIndex</em> or <em>dwInputIndexOnDownstreamNode</em> specify streams that do not exist yet, the method adds as many streams as needed.</p><p>This method checks for certain invalid conditions:</p><ul> <li> <p>An output node cannot have any output connections. If you call this method on an output node, the method returns {{E_FAIL}}.</p> </li> <li> <p>A node cannot be connected to itself. If <em>pDownstreamNode</em> specifies the same node as the method call, the method returns {{E_INVALIDARG}}.</p> </li> </ul><p>However, if the method succeeds, it does not guarantee that the node connection is valid. It is possible to create a partial topology that the topology loader cannot resolve. If so, the <strong>{{IMFTopoLoader::Load}}</strong> method will fail.</p><p>To break an existing node connection, call <strong>{{IMFTopologyNode::DisconnectOutput}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The method failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid parameter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream on this node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the node to connect to.</p> </dd> + + + <dd> <p>Zero-based index of the input stream on the other node.</p> </dd> + + + + + <p> </p><p>Disconnects an output stream on this node.</p> + <p>If the specified output stream is connected to another node, this method breaks the connection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwOutputIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified output stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream to disconnect.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified input stream on this node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified input stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the output stream that is connected to this node's input stream.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified output stream on this node.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified output stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the input stream that is connected to this node's output stream.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an output stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no output stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an output stream on this node.</p> + <p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}.</p><p>The preferred output type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred output type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred output type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an input stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no input stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an input stream on this node.</p> + <p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p><p>The preferred input type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred input type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred input type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> Copies the data from another topology node into this node.</p> + <p> The two nodes must have the same node type. To get the node type, call <strong>{{IMFTopologyNode::GetNodeType}}</strong>. </p><p> This method copies the object reference, preferred types, and attributes from <em>pNode</em> to this node. It also copies the <strong>{{TOPOID}}</strong> that uniquely identifies each node in a topology. It does not duplicate any of the connections from <em>pNode</em> to other nodes. </p><p> The purpose of this method is to copy nodes from one topology to another. Do not use duplicate nodes within the same topology. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The node types do not match. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node to copy. </p> </dd> + + + + + <p> Queries an object for a specified service interface. </p> + <p>A service is an interface that is exposed by one object but might be implemented by another object. The <strong>GetService</strong> method is equivalent to <strong>QueryInterface</strong>, with the following difference: when <strong>QueryInterface</strong> retrieves a reference to an interface, it is guaranteed that you can query the returned interface and get back the original interface. The <strong>GetService</strong> method does not make this guarantee, because the retrieved interface might be implemented by a separate object.</p><p>The <strong>{{MFGetService}}</strong> function is a helper function that queries an object for <strong>{{IMFGetService}}</strong> and calls the <strong>GetService</strong> method.</p> + + + + <p> </p><p>Retrieves a service interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the service.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The service identifier ({{SID}}) of the service. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives the interface reference. The caller must release the interface.</p> </dd> + + + + + <p>Provides timing information from a clock in Microsoft Media Foundation.</p><p>Clocks and some media sinks expose this interface through <strong>QueryInterface</strong>.</p> + <p>The <strong>{{IMFClock}}</strong> interface applies to any kind of clock. The presentation clock exposes the <strong>{{IMFPresentationClock}}</strong> interface in addition to <strong>{{IMFClock}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of values from the <strong>{{MFCLOCK_CHARACTERISTICS_FLAGS}}</strong> enumeration indicating the characteristics of the clock.</p> </dd> + + + + + <p> Retrieves the last clock time that was correlated with system time. </p> + <p>At some fixed interval, a clock correlates its internal clock ticks with the system time. (The system time is the time returned by the high-resolution performance counter.) This method returns:</p><ul> <li> The most recent clock time that was correlated with system time. </li> <li> The system time when the correlation was performed. </li> </ul><p> The clock time is returned in the <em>pllClockTime</em> parameter and is expressed in units of the clock's frequency. If the clock's <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the clock's frequency is 10 {{MHz}} (each clock tick is 100 nanoseconds). Otherwise, you can get the clock's frequency by calling <strong>{{IMFClock::GetProperties}}</strong>. The frequency is given in the <strong>qwClockFrequency</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure returned by that method. </p><p> The system time is returned in the <em>phnsSystemTime</em> parameter, and is always expressed in 100-nanosecond units. </p><p> To find out how often the clock correlates its clock time with the system time, call <strong>GetProperties</strong>. The correlation interval is given in the <strong>qwCorrelationRate</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure. If <strong>qwCorrelationRate</strong> is zero, it means the clock performs the correlation whenever <strong>GetCorrelatedTime</strong> is called. Otherwise, you can calculate the current clock time by extrapolating from the last correlated time. </p><p> Some clocks support rate changes through the <strong>{{IMFRateControl}}</strong> interface. If so, the clock time advances at a speed of frequency ? current rate. If a clock does not expose the <strong>{{IMFRateControl}}</strong> interface, the rate is always 1.0. </p><p>For the presentation clock, the clock time is the presentation time, and is always relative to the starting time specified in <strong>{{IMFPresentationClock::Start}}</strong>. You can also get the presentation time by calling <strong>{{IMFPresentationClock::GetTime}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a time source. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Reserved, must be zero. </p> </dd> + + + <dd> <p> Receives the last known clock time, in units of the clock's frequency. </p> </dd> + + + <dd> <p> Receives the system time that corresponds to the clock time returned in <em>pllClockTime</em>, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Retrieves the clock's continuity key. (Not supported.)</p> + <p>Continuity keys are currently not supported in Media Foundation. Clocks must return the value zero in the <em>pdwContinuityKey</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the continuity key.</p> </dd> + + + + + <p> </p><p>Retrieves the current state of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Receives the clock state, as a member of the <strong>{{MFCLOCK_STATE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the properties of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFCLOCK_PROPERTIES}}</strong> structure that receives the properties.</p> </dd> + + + + + <p>Represents a presentation clock, which is used to schedule when samples are rendered and to synchronize multiple streams.</p> + <p>To create a new instance of the presentation clock, call the {{MFCreatePresentationClock}} function. The presentation clock must have a time source, which is an object that provides the clock times. For example, the audio renderer is a time source that uses the sound card to drive the clock. Time sources expose the {{IMFPresentationTimeSource}} interface. To set the time source, call <strong>SetTimeSource</strong>. The presentation clock does not begin running until the <strong>Start</strong> method is called.</p><p>To get the presentation clock from the Media Session, call {{IMFMediaSession::GetClock}}.</p> + + + + <p> </p><p>Sets the time source for the presentation clock. The time source is the object that drives the clock by providing the current time.</p> + <p>The presentation clock cannot start until it has a time source.</p><p>The time source is automatically registered to receive state change notifications from the clock, through the time source's {{IMFClockStateSink}} interface, which all time sources must implement.</p><p>This time source have a frequency of 10 {{MHz}}. See {{IMFClock::GetClockCharacteristics}}. If not, the method returns {{MF_E_CLOCK_NOT_SIMPLE}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NOT_SIMPLE}}</strong></dt> </dl> </td><td> <p>The time source does not have a frequency of 10 {{MHz}}.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The time source has not been initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the {{IMFPresentationTimeSource}} interface of the time source.</p> </dd> + + + + + <p> </p><p>Retrieves the clock's presentation time source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the time source's {{IMFPresentationTimeSource}} interface. The caller must release the interface.</p> </dd> + + + + + <p> Retrieves the latest clock time. </p> + <p>This method does not attempt to smooth out jitter or otherwise account for any inaccuracies in the clock time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a presentation time source. Call <strong>{{IMFPresentationClock::SetTimeSource}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives the latest clock time, in 100-nanosecond units. The time is relative to when the clock was last started. </p> </dd> + + + + + <p> </p><p>Registers an object to be notified whenever the clock starts, stops, or pauses, or changes rate.</p> + <p>Before releasing the object, call {{IMFPresentationClock::RemoveClockStateSink}} to unregister the object for state-change notifications.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Unregisters an object that is receiving state-change notifications from the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Starts the presentation clock.</p> + <p>This method is valid in all states (stopped, paused, or running).</p><p>If the clock is paused and restarted from the same position (<em>llClockStartOffset</em> is {{PRESENTATION_CURRENT_POSITION}}), the presentation clock sends an {{IMFClockStateSink::OnClockRestart}} notification. Otherwise, the clock sends an {{IMFClockStateSink::OnClockStart}} notification.</p><p>The presentation clock initiates the state change by calling <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> methods. These calls are made asynchronously.</p><p>If the clock is already running, calling <strong>Start</strong> again has the effect of seeking the clock to the new <em>StartOffset</em> position.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Initial starting time, in 100-nanosecond units. At the time the <strong>Start</strong> method is called, the clock's {{IMFPresentationClock::GetTime}} method returns this value, and the clock time increments from there. If the value is {{PRESENTATION_CURRENT_POSITION}}, the clock starts from its current position. Use this value if the clock is paused and you want to restart it from the same position.</p> </dd> + + + + + <p> </p><p>Stops the presentation clock. While the clock is stopped, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} method returns zero.</p> + <p>This method is valid when the clock is running or paused.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockStop}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStop</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses the presentation clock. While the clock is paused, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} returns the time at which the clock was paused.</p> + <p>This method is valid when the clock is running. It is not valid when the clock is paused or stopped.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockPause}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockPause</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already paused.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The clock is stopped. This request is not valid when the clock is stopped.</p> </td></tr> </table><p>?</p> + + + + <p> Provides the clock times for the presentation clock. </p> + <p>This interface is implemented by presentation time sources. A presentation time source is an object that provides the clock time for the presentation clock. For example, the audio renderer is a presentation time source. The rate at which the audio renderer consumes audio samples determines the clock time. If the audio format is 44100 samples per second, the audio renderer will report that one second has passed for every 44100 audio samples it plays. In this case, the timing is provided by the sound card.</p><p>To set the presentation time source on the presentation clock, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> with a reference to the time source's <strong>{{IMFPresentationTimeSource}}</strong> interface.</p><p>A presentation time source must also implement the <strong>{{IMFClockStateSink}}</strong> interface. The presentaton clock uses this interface to notify the time source when the clock state changes.</p><p>Media Foundation provides a presentation time source that is based on the system clock. To create this object, call the <strong>{{MFCreateSystemTimeSource}}</strong> function.</p> + + + + <p> </p><p>Retrieves the underlying clock that the presentation time source uses to generate its clock times.</p> + <p>A presentation time source must support stopping, starting, pausing, and rate changes. However, in many cases the time source derives its clock times from a hardware clock or other device. The underlying clock is always running, and might not support rate changes.</p><p>Optionally, a time source can expose the underlying clock by implementing this method. The underlying clock is always running, even when the presentation time source is paused or stopped. (Therefore, the underlying clock returns the {{MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING}} flag in the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method).</p><p>The underlying clock is useful if you want to make decisions based on the clock times while the presentation clock is stopped or paused.</p><p>If the time source does not expose an underlying clock, the method returns {{MF_E_NO_CLOCK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>This time source does not expose an underlying clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + <p> Called when the presentation clock starts. </p> + <p>This method is called whe the presentation clock's <strong>{{IMFPresentationClock::Start}}</strong> method is called, with the following exception: If the clock is paused and <strong>Start</strong> is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, <strong>{{IMFClockStateSink::OnClockRestart}}</strong> is called instead of <strong>OnClockStart</strong>.</p><p>The clock notifies the presentation time source by calling the time source's <strong>OnClockStart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockStart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockStart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p><p>The value given in <em>llClockStartOffset</em> is the presentation time when the clock starts, so it is relative to the start of the presentation. Media sinks should not render any data with a presentation time earlier than <em>llClockStartOffSet</em>. If a sample straddles the offset?that is, if the offset falls between the sample's start and stop times?the sink should either trim the sample so that only data after <em>llClockStartOffset</em> is rendered, or else simply drop the sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock started, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new starting time for the clock, in 100-nanosecond units. This parameter can also equal <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, indicating the clock has started or restarted from its current position. </p> </dd> + + + + + <p> Called when the presentation clock stops. </p> + <p> When the presentation clock's <strong>{{IMFPresentationClock::Stop}}</strong> method is called, the clock notifies the presentation time source by calling the presentation time source's <strong>OnClockStop</strong> method. This call occurs synchronously within the <strong>Stop</strong> method. If the time source returns an error from <strong>OnClockStop</strong>, the presentation clock's <strong>Stop</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockStop</strong> method is called asynchronously, after the state change is completed. </p><p>If an object is already stopped, it should return <strong>{{S_OK}}</strong> from <strong>OnClockStop</strong>. It should not return an error code. </p><strong>Note</strong>??Although the header file mferror.h defines an error code named <strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong>, it should not be returned in this situation.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong></dt> </dl> </td><td> <p>Deprecated. Do not use this error code.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The system time when the clock stopped, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock pauses. </p> + <p>When the presentation clock's <strong>{{IMFPresentationClock::Pause}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockPause</strong> method. This call occurs synchronously within the <strong>Pause</strong> method. If the time source returns an error from <strong>OnClockPause</strong>, the presentation clock's <strong>Pause</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockPause</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock was paused, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock restarts from the same position while paused. </p> + <p> This method is called if the presentation clock is paused and the <strong>{{IMFPresentationClock::Start}}</strong> method is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>. </p><p> The clock notifies the presentation time source by calling the time source's <strong>OnClockRestart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockRestart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockRestart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock restarted, in 100-nanosecond units. </p> </dd> + + + + + <p>Called when the rate changes on the presentation clock. </p> + <p> When the presentation clock's <strong>{{IMFRateControl::SetRate}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockSetRate</strong> method. This call occurs synchronously within the <strong>SetRate</strong> method. If the time source returns an error from <strong>OnClockSetRate</strong>, the presentation clock's <strong>SetRate</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockSetRate</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the rate was set, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new rate, as a multiplier of the normal playback rate. </p> </dd> + + + + + <p> Describes the details of a presentation. A <em>presentation</em> is a set of related media streams that share a common presentation time. </p> + <p>Presentation descriptors are used to configure media sources and some media sinks. To get the presentation descriptor from a media source, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. To create a new presentation descriptor, call <strong>{{MFCreatePresentationDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the number of stream descriptors in the presentation. Each stream descriptor contains information about one stream in the media source. To retrieve a stream descriptor, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves a stream descriptor for a stream in the presentation. The stream descriptor contains information about the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the stream. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the stream is currently selected, or <strong>{{FALSE}}</strong> if the stream is currently deselected. If a stream is selected, the media source generates data for that stream when <strong>{{IMFMediaSource::Start}}</strong> is called. The media source will not generated data for deselected streams. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>.To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream descriptor's <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a stream in the presentation.</p> + <p> If a stream is selected, the media source will generate data for that stream. The media source will not generated data for deselected streams. To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number to select, indexed from zero. To find the number of streams in the presentation, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong>.</p> </dd> + + + + + <p> </p><p>Deselects a stream in the presentation.</p> + <p> If a stream is deselected, no data is generated for that stream. To select the stream again, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number to deselect, indexed from zero. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method. </p> </dd> + + + + + <p> </p><p>Creates a copy of this presentation descriptor.</p> + <p> This method performs a shallow copy of the presentation descriptor. The stream descriptors are not cloned. Therefore, use caution when modifying the presentation presentation descriptor or its stream descriptors. </p><p> If the original presentation descriptor is from a media source, do not modify the presentation descriptor unless the source is stopped. If you use the presentation descriptor to configure a media sink, do not modify the presentation descriptor after the sink is configured. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the new presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Gets information about one stream in a media source. </p> + <p>A presentation descriptor contains one or more stream descriptors. To get the stream descriptors from a presentation descriptor, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. To create a new stream descriptor, call <strong>{{MFCreateStreamDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an identifier for the stream.</p> + <p>The stream identifier uniquely identifies a stream within a presentation. It does not change throughout the lifetime of the stream. For example, if the presentation changes while the source is running, the index number of the stream may change, but the stream identifier does not.</p><p>In general, stream identifiers do not have a specific meaning, other than to identify the stream. Some media sources may assign stream identifiers based on meaningful values, such as packet identifiers, but this depends on the implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the stream identifier.</p> </dd> + + + + + <p> </p><p>Retrieves a media type handler for the stream. The media type handler can be used to enumerate supported media types for the stream, get the current media type, and set the media type.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Gets and sets media types on an object, such as a media source or media sink. </p> + <p>This interface is exposed by <em>media-type handlers</em>.</p><ul> <li> For media sources, get the media-type handler from the stream descriptor by calling <strong>{{IMFStreamDescriptor::GetMediaTypeHandler}}</strong>.</li> <li>For media sinks, get the media-type handler by calling <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong>.</li> </ul><p>If you are implementing a custom media source or media sink, you can create a simple media-type handler by calling <strong>{{MFCreateSimpleTypeHandler}}</strong>, or you can provide your own implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Queries whether the object supports a specified media type.</p> + <p> If the object supports the media type given in <em>pMediaType</em>, the method returns <strong>{{S_OK}}</strong>. For a media source, it means the source can generate data that conforms to that media type. For a media sink, it means the sink can receive data that conforms to that media type. If the object does not support the media type, the method fails. </p><p> The <em>ppMediaType</em> parameter is optional. If the method fails, the object might use <em>ppMediaType</em> to return a media type that the object does support, and which closely matches the one given in <em>pMediaType</em>. The method is not guaranteed to return a media type in <em>ppMediaType</em>. If no type is returned, this parameter receives a <strong>{{NULL}}</strong> reference. If the method succeeds, this parameter receives a <strong>{{NULL}}</strong> reference. If the caller sets <em>ppMediaType</em> to <strong>{{NULL}}</strong>, this parameter is ignored. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with {{SP2}} and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The object does not support this media type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to check. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the closest matching media type, or receives the value <strong>{{NULL}}</strong>. If non-<strong>{{NULL}}</strong>, the caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> </p><p>Retrieves the number of media types in the object's list of supported media types.</p> + <p> To get the supported media types, call <strong>{{IMFMediaTypeHandler::GetMediaTypeByIndex}}</strong>. </p><p> For a media source, the media type handler for each stream must contain at least one supported media type. For media sinks, the media type handler for each stream might contain zero media types. In that case, the application must provide the media type. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of media types in the list.</p> </dd> + + + + + <p> </p><p>Retrieves a media type from the object's list of supported media types.</p> + <p>Media types are returned in the approximate order of preference. The list of supported types is not guaranteed to be complete. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwIndex</em> parameter is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Zero-based index of the media type to retrieve. To get the number of media types in the list, call <strong>{{IMFMediaTypeHandler::GetMediaTypeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Sets the object's media type.</p> + <p>For media sources, setting the media type means the source will generate data that conforms to that media type. For media sinks, setting the media type means the sink can receive data that conforms to that media type.</p><p>Any implementation of this method should check whether <em>pMediaType</em> differs from the object's current media type. If the types are identical, the method should return {{S_OK}} but avoid releasing and recreating resources unnecessarily. If the types are not identical, the method should validate the new type.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> Invalid request. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the new media type.</p> </dd> + + + + + <p> </p><p>Retrieves the current media type of the object.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p> No media type is set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the major media type of the object. </p> + <p>The major type identifies what kind of data is in the stream, such as audio or video. To get the specific details of the format, call <strong>{{IMFMediaTypeHandler::GetCurrentMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a {{GUID}} that identifies the major type. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p>Provides a timer that invokes a callback at a specified time.</p> + <p>The presentation clock exposes this interface. To get a reference to the interface, call <strong>QueryInterface</strong>.</p> + + + + <p> </p><p>Sets a timer that invokes a callback at the specified time.</p> + <p>If the clock is stopped, the method returns {{MF_S_CLOCK_STOPPED}}. The callback will not be invoked until the clock is started.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The clock was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_CLOCK_STOPPED}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the clock is stopped.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFTIMER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The time at which the timer should fire, in units of the clock's frequency. The time is either absolute or relative to the current time, depending on the value of <em>dwFlags</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. The callback's <strong>Invoke</strong> method is called at the time specified in the <em>llClockTime</em> parameter.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of a cancellation object. The caller must release the interface. To cancel the timer, pass this reference to the <strong>{{IMFTimer::CancelTimer}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Cancels a timer that was set using the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + <p>Because the timer is dispatched asynchronously, the application's timer callback might get invoked even if this method succeeds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Exposed by some Media Foundation objects that must be explicitly shut down. </p> + <p>The following types of object expose <strong>{{IMFShutdown}}</strong>:</p><ul> <li> Content enablers (<strong>{{IMFContentEnabler}}</strong> interface) </li> <li> Input trust authorities (<strong>{{IMFInputTrustAuthority}}</strong> interface) </li> <li> Presentation clocks (<strong>{{IMFPresentationClock}}</strong> interface) </li> <li> Asynchronous {{MFTs}} </li> </ul><p> Any component that creates one of these objects is responsible for calling <strong>Shutdown</strong> on the object before releasing the object. Typically, applications do not create any of these objects directly, so it is not usually necessary to use this interface in an application. </p><p> To obtain a reference to this interface, call <strong>QueryInterface</strong> on the object. </p><p> If you are implementing a custom object, your object can expose this interface, but only if you can guarantee that your application will call <strong>Shutdown</strong>. </p><p>Media sources, media sinks, and <em>synchronous</em> {{MFTs}} should not implement this interface, because the Media Foundation pipeline will not call <strong>Shutdown</strong> on these objects. Asynchronous {{MFTs}} must implement this interface.</p><p> This interface is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p><p> Some Media Foundation interfaces define a <strong>Shutdown</strong> method, which serves the same purpose as <strong>{{IMFShutdown::Shutdown}}</strong> but is not directly related to it. </p> + + + + <p> Shuts down a Media Foundation object and releases all resources associated with the object. </p> + <p>The <strong>{{MFShutdownObject}}</strong> helper function is equivalent to calling this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Queries the status of an earlier call to the <strong>{{IMFShutdown::Shutdown}}</strong> method. </p> + <p>Until <strong>Shutdown</strong> is called, the <strong>GetShutdownStatus</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>If an object's <strong>Shutdown</strong> method is asynchronous, <em>pStatus</em> might receive the value <strong>{{MFSHUTDOWN_INITIATED}}</strong>. When the object is completely shut down, <em>pStatus</em> receives the value <strong>{{MFSHUTDOWN_COMPLETED}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The <strong>Shutdown</strong> method has not been called on this object. </p> </td></tr> </table><p>?</p> + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p>Enables playback of protected content by providing the application with a reference to a content enabler object.</p><p>Applications that play protected content should implement this interface.</p> + <p>A <em>content enabler</em> is an object that performs some action that is required to play a piece of protected content. For example, the action might be obtaining a {{DRM}} license. Content enablers expose the <strong>{{IMFContentEnabler}}</strong> interface, which defines a generic mechanism for content enabler. Content enablers are created inside the protected media path ({{PMP}}) process. However, they must be invoked from the application process. Therefore, the <strong>{{IMFContentProtectionManager}}</strong> interface provides a way for the {{PMP}} Media Session to notify the application.</p><p>To use this interface, do the following:</p><ol> <li> <p>Implement the interface in your application.</p> </li> <li> <p>Create an attribute store by calling <strong>{{MFCreateAttributes}}</strong>.</p> </li> <li> <p>Set the <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> attribute on the attribute store. The attribute value is a reference to your <strong>{{IMFContentProtectionManager}}</strong> implementation.</p> </li> <li> <p>Call <strong>{{MFCreatePMPMediaSession}}</strong> and pass the attribute store in the <em>pConfiguration</em> parameter.</p> </li> </ol><p>If the content requires a content enabler, the application's <strong>BeginEnableContent</strong> method is called. Usually this method called during the <strong>{{IMFMediaSession::SetTopology}}</strong> operation, before the Media Session raises the {{MESessionTopologySet}} event. The application might receive multiple <strong>BeginEnableContent</strong> calls for a single piece of content. The {{MESessionTopologySet}} event signals that the content-enabling process is complete for the current topology. The <strong>BeginEnableContent</strong> method can also be called outside of the <strong>SetTopology</strong> operation, but less commonly.</p><p>Many content enablers send machine-specific data to the network, which can have privacy implications. One of the purposes of the <strong>{{IMFContentProtectionManager}}</strong> interface is to give applications an opportunity to display information to the user and enable to user to opt in or out of the process.</p> + + + + <p>Begins an asynchronous request to perform a content enabling action.</p><p>This method requests the application to perform a specific step needed to acquire rights to the content, using a content enabler object.</p> + <p>Do not block within this callback method. Instead, perform the content enabling action asynchronously on another thread. When the operation is finished, notify the protected media path ({{PMP}}) through the <em>pCallback</em> parameter.</p><p>If you return a success code from this method, you must call <strong>Invoke</strong> on the callback. Conversely, if you return an error code from this method, you must not call <strong>Invoke</strong>. If the operation fails after the method returns a success code, use status code on the <strong>{{IMFAsyncResult}}</strong> object to report the error.</p><p>After the callback is invoked, the {{PMP}} will call the application's <strong>{{IMFContentProtectionManager::EndEnableContent}}</strong> method to complete the asynchronous call.</p><p>This method is not necessarily called every time the application plays protected content. Generally, the method will not be called if the user has a valid, up-to-date license for the content. Internally, the input trust authority ({{ITA}}) determines whether <strong>BeginEnableContent</strong> is called, based on the content provider's {{DRM}} policy. For more information, see Protected Media Path.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFActivate}}</strong> interface of a content enabler object. To create the content enabler, call <strong>{{IMFActivate::ActivateObject}}</strong> and request the <strong>{{IMFContentEnabler}}</strong> interface. The application should use the methods in <strong>{{IMFContentEnabler}}</strong> to complete the content enabling action. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFTopology}}</strong> interface of the pending topology. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. When the operation is complete, the application should call <strong>{{IMFAsyncCallback::Invoke}}</strong> on the callback. </p> </dd> + + + <dd> <p> Reserved. Currently this parameter is always <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Ends an asynchronous request to perform a content enabling action. This method is called by the protected media path ({{PMP}}) to complete an asynchronous call to <strong>{{IMFContentProtectionManager::BeginEnableContent}}</strong>.</p> + <p>When the <strong>BeginEnableContent</strong> method completes asynchronously, the application notifies the {{PMP}} by invoking the asynchronous callback. The {{PMP}} calls <strong>EndEnableContent</strong> on the application to get the result code. This method is called on the application's thread from inside the callback method. Therefore, it must not block the thread that invoked the callback.</p><p>The application must return the success or failure code of the asynchronous processing that followed the call to <strong>BeginEnableContent</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implements one step that must be performed for the user to access media content. For example, the steps might be individualization followed by license acquisition. Each of these steps would be encapsulated by a content enabler object that exposes the <strong>{{IMFContentEnabler}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the type of operation that this content enabler performs.</p> + <p>The following {{GUIDs}} are defined for the <em>pType</em> parameter.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFENABLETYPE_MF_RebootRequired}}</td><td>The user must reboot his or her computer.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateRevocationInformation}}</td><td>Update revocation information.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateUntrustedComponent}}</td><td>Update untrusted components.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV1_LicenseAcquisition}}</td><td>License acquisition for Windows Media Digital Rights Management ({{DRM}}) version 1.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_Individualization}}</td><td>Individualization.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_LicenseAcquisition}}</td><td>License acquisition for Windows Media {{DRM}} version 7 or later.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the type of operation. An application can tailor its user interface ({{UI}}) strings for known operation types. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves a {{URL}} for performing a manual content enabling action.</p> + <p>If the enabling action can be performed by navigating to a {{URL}}, this method returns the {{URL}}. If no such {{URL}} exists, the method returns a failure code.</p><p>The purpose of the {{URL}} depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of {{URL}}</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{URL}} to obtain the license. Call <strong>{{IMFContentEnabler::GetEnableData}}</strong> and submit the data to the {{URL}} as an {{HTTP}} {{POST}} request. To receive notification when the license is acquired, call <strong>{{IMFContentEnabler::MonitorEnable}}</strong>.</td></tr> <tr><td>Revocation</td><td>{{URL}} to a webpage where the user can download and install an updated component.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No {{URL}} is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the {{URL}}. The caller must release the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the number of characters returned in <em>ppwszURL</em>, including the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_URL_TRUST_STATUS}}</strong> enumeration indicating whether the {{URL}} is trusted.</p> </dd> + + + + + <p> </p><p>Retrieves the data for a manual content enabling action.</p> + <p>The purpose of the data depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of data</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{HTTP}} {{POST}} data.</td></tr> <tr><td>Revocation</td><td> <strong>{{MFRR_COMPONENTS}}</strong> structure.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the data. The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer.</p> </dd> + + + + + <p> </p><p>Queries whether the content enabler can perform all of its actions automatically.</p> + <p>If this method returns <strong>{{TRUE}}</strong> in the <em>pfAutomatic</em> parameter, call the <strong>{{IMFContentEnabler::AutomaticEnable}}</strong> method to perform the enabling action.</p><p>If this method returns <strong>{{FALSE}}</strong> in the <em>pfAutomatic</em> parameter, the application must use manual enabling. To do so, call <strong>{{IMFContentEnabler::GetEnableURL}}</strong> and <strong>{{IMFContentEnabler::GetEnableData}}</strong> to get the {{URL}} and data needed for manual enabling.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the content enabler can perform the enabing action automatically.</p> </dd> + + + + + <p> </p><p>Performs a content enabling action without any user interaction.</p> + <p>This method is asynchronous. When the operation is complete, the content enabler sends an {{MEEnablerCompleted}} event. While the operation is in progress, the content enabler might send {{MEEnablerProgress}} events.</p><p>To find out whether the content enabler supports this method, call <strong>{{IMFContentEnabler::IsAutomaticSupported}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Requests notification when the enabling action is completed.</p> + <p>If you use a manual enabling action, call this method to be notified when the operation completes. If this method returns {{S_OK}}, the content enabler will send an {{MEEnablerCompleted}} event when the operation is completed. If the application cancels the operatation before completing it, call <strong>{{IMFContentEnabler::Cancel}}</strong>.</p><p>You do not have to call <strong>MonitorEnable</strong> when you use automatic enabling by calling <strong>{{IMFContentEnabler::AutomaticEnable}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded and no action was required.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels a pending content enabling action.</p> + <p>The content enabler sends an {{MEEnablerCompleted}} event with a status code of {{E_CANCEL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Manages metadata for an object. Metadata is information that describes a media file, stream, or other content. Metadata consists of individual properties, where each property contains a descriptive name and a value. A property may be associated with a particular language.</p><p>To get this interface from a media source, use the <strong>{{IMFMetadataProvider}}</strong> interface.</p> + + + + <p> Sets the language for setting and retrieving metadata. </p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages".</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing an {{RFC}} 1766-compliant language tag.</p> </dd> + + + + + <p> Gets the current language setting.</p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages."</p><p>The <strong>{{IMFMetadata::SetLanguage}}</strong> and <strong>{{IMFMetadata::GetProperty}}</strong> methods set and get metadata for the current language setting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The metadata provider does not support multiple languages.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> No language was set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to a null-terminated string containing an {{RFC}} 1766-compliant language tag. The caller must release the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p> Gets a list of the languages in which metadata is available.</p> + <p> For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages". </p><p> To set the current language, call <strong>{{IMFMetadata::SetLanguage}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a <strong>{{PROPVARIANT}}</strong> that receives the list of languages. The list is returned as an array of null-terminated wide-character strings. Each string in the array is an {{RFC}} 1766-compliant language tag. </p> <p>The returned <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The list might be empty, if no language tags are present. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Sets the value of a metadata property. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the value of the property. For multivalued properties, use a <strong>{{PROPVARIANT}}</strong> with a {{VT_VECTOR}} type.</p> </dd> + + + + + <p> Gets the value of a metadata property.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The requested property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to a null-terminated string that containings the name of the property. To get the list of property names, call <strong>{{IMFMetadata::GetAllPropertyNames}}</strong>.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value of the property. The <strong>{{PROPVARIANT}}</strong> type depends on the property. For multivalued properties, the <strong>{{PROPVARIANT}}</strong> is a <strong>{{VT_VECTOR}}</strong> type. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Deletes a metadata property.</p> + <p>For a media source, deleting a property from the metadata collection does not change the original content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + + + <p> Gets a list of all the metadata property names on this object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. If no properties are available, the <strong>{{PROPVARIANT}}</strong> type is {{VT_EMPTY}}. Otherwise, the <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Gets metadata from a media source or other object.</p><p>If a media source supports this interface, it must expose the interface as a service. To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_METADATA_PROVIDER_SERVICE}}</strong>. Other types of object can expose this interface through <strong>QueryInterface</strong>.</p><p>Use this interface to get a reference to the <strong>{{IMFMetadata}}</strong> interface.</p> + + + + <p> Gets a collection of metadata, either for an entire presentation, or for one stream in the presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No metadata is available for the requested stream or presentation.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. </p> </dd> + + + <dd> <p> If this parameter is zero, the method retrieves metadata that applies to the entire presentation. Otherwise, this <em></em> parameter specifies a stream identifier, and the method retrieves metadata for that stream. To get the stream identifier for a stream, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMetadata}}</strong> interface. Use this interface to access the metadata. The caller must release the interface.</p> </dd> + + + + + <p>Queries the range of playback rates that are supported, including reverse playback.</p><p>To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}.</p> + <p>Applications can use this interface to discover the fastest and slowest playback rates that are possible, and to query whether a given playback rate is supported. Applications obtain this interface from the Media Session. Internally, the Media Session queries the objects in the pipeline. For more information, see How to Determine Supported Rates.</p><p>To get the current playback rate and to change the playback rate, use the <strong>{{IMFRateControl}}</strong> interface.</p><p>Playback rates are expressed as a ratio the normal playback rate. Reverse playback is expressed as a negative rate. Playback is either <em>thinned</em> or <em>non-thinned</em>. In thinned playback, some of the source data is skipped (typically delta frames). In non-thinned playback, all of the source data is rendered.</p><p>You might need to implement this interface if you are writing a pipeline object (media source, transform, or media sink). For more information, see Implementing Rate Control.</p> + + + + <p> </p><p>Retrieves the slowest playback rate supported by the object.</p> + <p>The value returned in <em>plfRate</em> represents a lower bound. Playback at this rate is not guaranteed. Call <strong>{{IMFRateSupport::IsRateSupported}}</strong> to check whether the boundary rate is supported. For example, a component that supports arbitrarily slow rates will return zero in <em>pflRate</em>, and applications should call <strong>IsRateSupported</strong> separately to determine whether the component supports rate 0.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the slowest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the slowest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the slowest thinned playback rate. Otherwise, the method retrieves the slowest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the slowest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Gets the fastest playback rate supported by the object.</p> + <p>For some formats (such as {{ASF}}), thinning means dropping all frames that are not I-frames. If a component produces stream data, such as a media source or a demultiplexer, it should pay attention to the <em>fThin</em> parameter and return {{MF_E_THINNING_UNSUPPORTED}} if it cannot thin the stream.</p><p>If the component processes or receives a stream (most transforms or media sinks), it may ignore this parameter if it does not care whether the stream is thinned. In the Media Session's implementation of rate support, if the transforms do not explicitly support reverse playback, the Media Session will attempt to playback in reverse with thinning but not without thinning. Therefore, most applications will set <em>fThin</em> to <strong>{{TRUE}}</strong> when using the Media Session for reverse playback.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the fastest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the fastest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the fastest thinned playback rate. Otherwise, the method retrieves the fastest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the fastest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Queries whether the object supports a specified playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The object supports the specified rate.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified rate.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method queries whether the object supports the playback rate with thinning. Otherwise, the method queries whether the object supports the playback rate without thinning. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>The playback rate to query.</p> </dd> + + + <dd> <p>If the object does not support the playback rate given in <em>flRate</em>, this parameter receives the closest supported playback rate. If the method returns {{S_OK}}, this parameter receives the value given in <em>flRate</em>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets or sets the playback rate. </p> + <p>Objects can expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}. The Media Session supports this interface. Media sources and transforms support this interface if they support rate changes. Media sinks do not need to support this interface. Media sinks are notified of rate changes through the <strong>{{IMFClockStateSink::OnClockSetRate}}</strong> method.</p><p>For more information, see About Rate Control.</p><p>To discover the playback rates that an object supports, use the <strong>{{IMFRateSupport}}</strong> interface</p> + + + + <p> Sets the playback rate. </p> + <p>The Media Session prevents some transitions between rate boundaries, depending on the current playback state:</p><table> <tr><th>Playback State</th><th>Forward/Reverse</th><th>Forward/Zero</th><th>Reverse/Zero</th></tr> <tr><td>Running</td><td>No</td><td>No</td><td>No</td></tr> <tr><td>Paused</td><td>No</td><td>Yes</td><td>No</td></tr> <tr><td>Stopped</td><td>Yes</td><td>Yes</td><td>Yes</td></tr> </table><p>?</p><p>If the transition is not supported, the method returns <strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong>.</p><p>When a media source completes a call to <strong>SetRate</strong>, it sends the {{MESourceRateChanged}} event. Other pipeline components do not send this event.</p><p>If a media source switches between thinned and non-thinned playback, the streams send an {{MEStreamThinMode}} event to indicate the transition. Events from the media source are not synchronized with events from the media streams. After you receive the {{MESourceRateChanged}} event, you can still receive samples that were queued before the stream switched to thinned or non-thinned mode. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p><p>When the Media Session completes a call to <strong>SetRate</strong>, it sends the {{MESessionRateChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support reverse playback. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support thinning. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p> The object does not support the requested playback rate. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong></dt> </dl> </td><td> <p> The object cannot change to the new rate while in the running state. </p> </td></tr> </table><p>?</p> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the media streams are thinned. Otherwise, the stream is not thinned. For media sources and demultiplexers, the object must thin the streams when this parameter is <strong>{{TRUE}}</strong>. For downstream transforms, such as decoders and multiplexers, this parameter is informative; it notifies the object that the input streams are thinned. For information, see About Rate Control. </p> </dd> + + + <dd> <p> The requested playback rate. Postive values indicate forward playback, negative values indicate reverse playback, and zero indicates scrubbing (the source delivers a single frame). </p> </dd> + + + + + + + + <p> </p><p>Gets the current playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the stream is currently being thinned. If the object does not support thinning, this parameter always receives the value <strong>{{FALSE}}</strong>. This parameter can be <strong>{{NULL}}</strong>. For more information, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the current playback rate.</p> </dd> + + + + + <p>Converts between Society of Motion Picture and Television Engineers ({{SMPTE}}) time codes and 100-nanosecond time units.</p> + <p>If an object supports this interface, it must expose the interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_TIMECODE_SERVICE}}</strong>.</p><p>The Advanced Streaming Format ({{ASF}}) media source exposes this interface.</p> + + + + <p>Starts an asynchronous call to convert Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertTimecodeToHNS}}</strong> to complete the asynchronous request.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>void CreateTimeCode( {{DWORD}} dwFrames, {{DWORD}} dwSeconds, {{DWORD}} dwMinutes, {{DWORD}} dwHours, {{DWORD}} dwRange, {{PROPVARIANT}} *pvar ) +{ {{ULONGLONG}} ullTimecode = (({{ULONGLONG}})dwRange) &lt;&lt; 32; ullTimecode += dwFrames % 10; ullTimecode += (( ({{ULONGLONG}})dwFrames ) / 10) &lt;&lt; 4; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) % 10) &lt;&lt; 8; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) / 10) &lt;&lt; 12; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) % 10) &lt;&lt; 16; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) / 10) &lt;&lt; 20; ullTimecode += (( ({{ULONGLONG}})dwHours ) % 10) &lt;&lt; 24; ullTimecode += (( ({{ULONGLONG}})dwHours ) / 10) &lt;&lt; 28; pvar-&gt;vt = {{VT_I8}}; pvar-&gt;hVal.QuadPart = ({{LONGLONG}})ullTimecode; +} +</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pPropVarTimecode</em> is not <strong>{{VT_I8}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Time in {{SMPTE}} time code to convert. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to <strong>{{VT_I8}}</strong>. The <strong>hVal.QuadPart</strong> member contains the time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>{{PPointer}} to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertTimecodeToHNS}}</strong> method completes asynchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives the converted time.</p> </dd> + + + + + <p>Starts an asynchronous call to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertHNSToTimecode}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The time to convert, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertHNSToTimecode}}</strong> method completes asynchronously.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>{{HRESULT}} ParseTimeCode( const {{PROPVARIANT}}&amp; var, {{DWORD}} *pdwRange, {{DWORD}} *pdwFrames, {{DWORD}} *pdwSeconds, {{DWORD}} *pdwMinutes, {{DWORD}} *pdwHours ) +{ if (var.vt != {{VT_I8}}) { return {{E_INVALIDARG}}; } {{ULONGLONG}} ullTimeCode = ({{ULONGLONG}})var.hVal.QuadPart; {{DWORD}} dwTimecode = ({{DWORD}})(ullTimeCode &amp; 0xFFFFFFFF); *pdwRange = ({{DWORD}})(ullTimeCode &gt;&gt; 32); *pdwFrames = dwTimecode &amp; 0x0000000F; *pdwFrames += (( dwTimecode &amp; 0x000000F0) &gt;&gt; 4 ) * 10; *pdwSeconds = ( dwTimecode &amp; 0x00000F00) &gt;&gt; 8; *pdwSeconds += (( dwTimecode &amp; 0x0000F000) &gt;&gt; 12 ) * 10; *pdwMinutes = ( dwTimecode &amp; 0x000F0000) &gt;&gt; 16; *pdwMinutes += (( dwTimecode &amp; 0x00F00000) &gt;&gt; 20 ) * 10; *pdwHours = ( dwTimecode &amp; 0x0F000000) &gt;&gt; 24; *pdwHours += (( dwTimecode &amp; 0xF0000000) &gt;&gt; 28 ) * 10; return {{S_OK}}; +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the converted time. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to {{VT_I8}}. The <strong>hVal.QuadPart</strong> member contains the converted time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>Controls the master volume level of the audio session associated with the streaming audio renderer ({{SAR}}) and the audio capture source.</p><p>The {{SAR}} and the audio capture source expose this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. For the {{SAR}}, use the service identifier {{MR_POLICY_VOLUME_SERVICE}}. For the audio capture source, use the service identifier {{MR_CAPTURE_POLICY_VOLUME_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or the audio capture source, or call it on the Media Session.</p> + <p>To control the volume levels of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface. The <strong>{{IMFAudioStreamVolume}}</strong> interface is supported by the {{SAR}} only.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> <p>The master volume level of the audio session.</p> </li> <li> <p>The volume level of the channel.</p> </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuaton for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels. To change the volume level of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p> Attenuation (dB) = 20 * log10(<em>Level</em>) </p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Sets the master volume level.</p> + <p>Events outside of the application can change the master volume level. For example, the user can change the volume from the system volume-control program (SndVol). If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Retrieves the master volume level.</p> + <p>If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Mutes or unmutes the audio.</p> + <p>This method does not change the volume level returned by the <strong>{{IMFSimpleAudioVolume::GetMasterVolume}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio.</p> </dd> + + + + + <p> </p><p>Queries whether the audio is muted.</p> + <p>Calling <strong>{{IMFSimpleAudioVolume::SetMasterVolume}}</strong> to set the volume does not change whether the audio is muted.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the audio is muted; otherwise, the audio is not muted.</p> </dd> + + + + + <p>Controls the volume levels of individual audio channels.</p><p>The streaming audio renderer ({{SAR}}) exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MR_STREAM_VOLUME_SERVICE}}</strong>. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + <p>If your application does not require channel-level volume control, you can use the <strong>{{IMFSimpleAudioVolume}}</strong> interface to control the master volume level of the audio session.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> The master volume level of the audio session. </li> <li> The volume level of the channel. </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuation for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p>Attenuation (dB) = 20 * log10(<em>Level</em>)</p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Retrieves the number of channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of channels in the audio stream.</p> </dd> + + + + + <p> </p><p>Sets the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the volume level for the channel.</p> </dd> + + + + + <p> </p><p>Sets the individual volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The array specifies the volume levels for all of the channels. Before calling the method, set each element of the array to the desired volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The method fills the array with the volume level for each channel in the stream.</p> </dd> + + + + + <p>Configures the audio session that is associated with the streaming audio renderer ({{SAR}}). Use this interface to change how the audio session appears in the Windows volume control.</p><p>The {{SAR}} exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MR_AUDIO_POLICY_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + + + + <p> </p><p>Assigns the audio session to a group of sessions.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{GUID}}</strong> that identifies the session group. Groups are application-defined. To create a new session group, assign a new {{GUID}}.</p> </dd> + + + + + <p> </p><p>Retrieves the group of sessions to which this audio session belongs.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the session group.</p> </dd> + + + + + <p> </p><p>Sets the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string that contains the display name.</p> </dd> + + + + + <p> </p><p>Retrieves the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the display name string. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Sets the icon resource for the audio session. The Windows volume control displays this icon. </p> + <p>The icon path has the format "path,index" or "path,-id", where <em>path</em> is the fully qualified path to a {{DLL}}, executable file, or icon file; <em>index</em> is the zero-based index of the icon within the file; and <em>id</em> is a resource identifier. Note that resource identifiers are preceded by a minus sign (-) to distinguish them from indexes. The path can contain environment variables, such as "%windir%". For more information, see <strong>{{IAudioSessionControl::SetIconPath}}</strong> in the Windows {{SDK}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A wide-character string that specifies the icon. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the icon resource for the audio session. The Windows volume control displays this icon.</p> + <p>If the application did not set an icon path, the method returns an empty string ("").</p><p>For more information, see <strong>{{IAudioSessionControl::GetIconPath}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a wide-character string that specifies a shell resource. The format of the string is described in the topic <strong>{{IMFAudioPolicy::SetIconPath}}</strong>. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Callback interface to get media data from the sample-grabber sink. </p> + <p>The sample-grabber sink enables an application to get data from the Media Foundation pipeline without implementing a custom media sink. To use the sample-grabber sink, the application must perform the following steps:</p><ol> <li> <p>Implement the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> </li> <li> <p>Call <strong>{{MFCreateSampleGrabberSinkActivate}}</strong>, passing in the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface reference. This function returns an <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Create a topology that includes an output node with the sink's <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Pass this topology to the Media Session.</p> </li> </ol><p>During playback, the sample-grabber sink calls methods on the application's callback.</p><p>You cannot use the sample-grabber sink to get protected content.</p> + + + + <p> </p><p>Called when the presentation clock is set on the sample-grabber sink.</p> + <p>This method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p> A reference to a buffer that contains the sample data. </p> </dd> + + + <dd> <p> Size of the <em>pSampleBuffer</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink is shut down.</p> + <p>This method is called when the sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method is called.</p><p>The <strong>OnShutdown</strong> method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> + <p>This callback interface is used with the sample-grabber sink. It extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface by adding the <strong>OnProcessSampleEx</strong> method, which supersedes the <strong>{{IMFSampleGrabberSinkCallback::OnProcessSample}}</strong> method.</p><p> The <strong>OnProcessSampleEx</strong> method adds a parameter that contains the attributes for the media sample. You can use the attributes to get information about the sample, such as field dominance and telecine flags. </p><p>To use this interface, do the following: </p><ol> <li>Implement a callback object that exposes the interface.</li> <li>Create the sample-grabber sink by calling the <strong>{{MFCreateSampleGrabberSinkActivate}}</strong> function. Pass the callback reference in the <em>pIMFSampleGrabberSinkCallback</em> parameter.</li> <li>The sample-grabber sink will call <strong>QueryInterface</strong> on the callback object.</li> <li>If the callback object exposes the <strong>{{IMFSampleGrabberSinkCallback2}}</strong> interface, the sample-grabber sink will use the <strong>OnProcessSampleEx</strong> callback method. Otherwise, the sample-grabber sink will use the older <strong>OnProcessSample</strong> callback method.</li> </ol> + + + + <p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type {{GUID}} that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>Sample flags. The sample-grabber sink gets the value of this parameter by calling the <strong>{{IMFSample::GetSampleFlags}}</strong> method of the media sample.</p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong></p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the sample data.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pSampleBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. Use this interface to get the attributes for this sample (if any). For a list of sample attributes, see Sample Attributes.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Registers the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Each source node in the topology defines one branch of the topology. The branch includes every topology node that receives data from that node. An application can assign each branch of a topology its own work queue and then associate those work queues with {{MMCSS}} tasks. </p><p>To use this method, perform the following steps.</p><ol> <li>Create the topology.</li> <li>Set the following attributes on the source nodes in the topology.<ul> <li> <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong>. Specifies an identifier for the work queue. The Media Session will allocate a new work queue.</li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_CLASS}}</strong>. Specifies the {{MMCSS}} class. </li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_TASKID}}</strong>. Specifies the {{MMCSS}} task identifier (optional). If this attribute is not set, {{MMCSS}} assigns a new task identifier. </li> </ul> </li> <li>Queue the topology by calling <strong>{{IMFMediaSession::SetTopology}}</strong>.</li> <li>Wait for the {{MESessionTopologyStatus}} event with the <strong>{{MF_TOPOSTATUS_READY}}</strong> status.</li> <li>Call <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong>. This method registers all of the topology work queues with {{MMCSS}}.</li> </ol><p>The <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong> method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. Within the callback method, call <strong>{{IMFWorkQueueServices::EndRegisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request. After this operation completes, the Media Session automatically registers the work queues for every new topology that is queued on the Media Session. The application does not need to call the method again for new topologies.</p><p>To unregister the topology work queues from {{MMCSS}}, call <strong>{{IMFWorkQueueServices::BeginUnregisterTopologyWorkQueuesWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unregisters the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>There is no work queue with the specified identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p> Associates a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task. </p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndRegisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The platform work queue to register with {{MMCSS}}. See Work Queue Identifiers. To register all of the standard work queues to the same {{MMCSS}} task, set this parameter to <strong>{{MFASYNC_CALLBACK_QUEUE_ALL}}</strong>.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task to be performed. </p> </dd> + + + <dd> <p> The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to register with {{MMCSS}}. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the pwszClass buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Extends the <strong>{{IMFWorkQueueServices}}</strong> interface.</p> + <p>This interface allows applications to control +both platform and topology work queues.</p><p>The <strong>{{IMFWorkQueueServices}}</strong> can be obtained from the session by querying for the <strong>{{MF_WORKQUEUE_SERVICES}}</strong> service.</p> + + + + <p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) string associated with the given topology work queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of the topology work queue. </p> </dd> + + + <dd> <p>Pointer to the buffer the work queue's {{MMCSS}} task id will be copied to.</p> </dd> + + + + + <p>Registers a platform work queue with Multimedia Class Scheduler Service ({{MMCSS}}) using the specified class and task id.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of one of the standard platform work queues.</p> </dd> + + + <dd> <p>The {{MMCSS}} class which the work queue should be registered with.</p> </dd> + + + <dd> <p> The task id which the work queue should be registered with. If <em>dwTaskId</em> is 0, a new {{MMCSS}} bucket will be created.</p> </dd> + + + <dd> <p>The priority.</p> </dd> + + + <dd> <p>Standard callback used for async operations in Media Foundation.</p> </dd> + + + <dd> <p>Standard state used for async operations in Media Foundation.</p> </dd> + + + + + <p>Gets the priority of the Multimedia Class Scheduler Service ({{MMCSS}}) priority associated with the specified platform work queue.</p> + <p>Pointer to a buffer allocated by the caller that the work queue's {{MMCSS}} task id will be copied to.</p> + + + <dd> <p>Topology work queue id for which the info will be returned.</p> </dd> + + + <dd></dd> + + + + + <p> Adjusts playback quality. This interface is exposed by the quality manager. </p> + <p>Media Foundation provides a default quality manager that is tuned for playback. Applications can provide a custom quality manager to the Media Session by setting the <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> attribute when creating the Media Session.</p> + + + + <p> </p><p>Called when the Media Session is about to start playing a new topology.</p> + <p>In a typical quality manager this method does the following:</p><ol> <li> <p>Enumerates the nodes in the topology.</p> </li> <li> <p>Calls <strong>{{IMFTopologyNode::GetObject}}</strong> to get the node's underlying object.</p> </li> <li> <p>Queries for the <strong>{{IMFQualityAdvise}}</strong> interface.</p> </li> </ol><p>The quality manager can then use the <strong>{{IMFQualityAdvise}}</strong> references to adjust audio-video quality as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the new topology. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the previous topology.</p> </dd> + + + + + <p> </p><p>Called when the Media Session selects a presentation clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the presentation clock.</p> </dd> + + + + + <p> </p><p>Called when the media processor is about to deliver an input sample to a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the input stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample.</p> </dd> + + + + + <p> </p><p>Called after the media processor gets an output sample from a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the output stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the output sample.</p> </dd> + + + + + <p> </p><p>Called when a pipeline component sends an {{MEQualityNotify}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Called when the Media Session is shutting down.</p> + <p>The quality manager should release all references to the Media Session when this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the quality manager to adjust the audio or video quality of a component in the pipeline.</p><p>This interface is exposed by pipeline components that can adjust their quality. Typically it is exposed by decoders and stream sinks. For example, the enhanced video renderer ({{EVR}}) implements this interface. However, media sources can also implement this interface.</p><p>To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_QUALITY_SERVICES}}. For all other pipeline objects (transforms and media sinks), call <strong>QueryInterface</strong>.</p> + <p>The quality manager typically obtains this interface when the quality manager's <strong>{{IMFQualityManager::NotifyTopology}}</strong> method is called.</p> + + + + <p> </p><p>Sets the drop mode. In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode.</p> + <p>If this method is called on a media source, the media source might switch between thinned and non-thinned output. If that occurs, the affected streams will send an {{MEStreamThinMode}} event to indicate the transition. The operation is asynchronous; after <strong>SetDropMode</strong> returns, you might receive samples that were queued before the transition. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_DROP_MODES}}</strong></dt> </dl> </td><td> <p>The component does not support the specified mode or any higher modes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the quality level. The quality level determines how the component consumes or produces samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_QUALITY_LEVELS}}</strong></dt> </dl> </td><td> <p>The component does not support the specified quality level or any levels below it.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current drop mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current quality level.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Drops samples over a specified interval of time.</p> + <p>Ideally the quality manager can prevent a renderer from falling behind. But if this does occur, then simply lowering quality does not guarantee the renderer will ever catch up. As a result, audio and video might fall out of sync. To correct this problem, the quality manager can call <strong>DropTime</strong> to request that the renderer drop samples quickly over a specified time interval. After that period, the renderer stops dropping samples.</p><p>This method is primarily intended for the video renderer. Dropped audio samples cause audio glitching, which is not desirable.</p><p>If a component does not support this method, it should return {{MF_E_DROPTIME_NOT_SUPPORTED}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DROPTIME_NOT_SUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Amount of time to drop, in 100-nanosecond units. This value is always absolute. If the method is called multiple times, do not add the times from previous calls.</p> </dd> + + + + + <p>Enables a pipeline object to adjust its own audio or video quality, in response to quality messages.</p> + <p>This interface enables a pipeline object to respond to quality messages from the media sink. Currently, it is supported only for video decoders.</p><p>If a video decoder exposes <strong>{{IMFQualityAdvise}}</strong> but not <strong>{{IMFQualityAdvise2}}</strong>, the quality manager controls quality adjustments for the decoder. In this case, the quality manager responds to {{MEQualityNotify}} events from the Enhanced Video Renderer ({{EVR}}) by calling <strong>{{IMFQualityAdvise}}</strong> methods on the decoder.</p><p>If the decoder exposes <strong>{{IMFQualityAdvise2}}</strong>, the quality manager forwards the {{MEQualityNotify}} events to the decoder and does not adjust the decoder's quality settings. The decoder should respond to these events by adjusting its own quality settings internally.</p><p>The preceding remarks apply to the default implementation of the quality manager; custom quality managers can implement other behaviors.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Forwards an {{MEQualityNotify}} event from the media sink.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries an object for the number of <em>quality modes</em> it supports. Quality modes are used to adjust the trade-off between quality and speed when rendering audio or video.</p><p>The default presenter for the <em>enhanced video renderer</em> ({{EVR}}) implements this interface. The {{EVR}} uses the interface to respond to quality messages from the quality manager.</p> + + + + <p>Gets the maximum <em>drop mode</em>. A higher drop mode means that the object will, if needed, drop samples more aggressively to match the presentation clock.</p> + <p>To get the current drop mode, call the <strong>{{IMFQualityAdvise::GetDropMode}}</strong> method. To set the drop mode, call the <strong>{{IMFQualityAdvise::SetDropMode}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the maximum drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the minimum quality level that is supported by the component.</p> + <p>To get the current quality level, call the <strong>{{IMFQualityAdvise::GetQualityLevel}}</strong> method. To set the quality level, call the <strong>{{IMFQualityAdvise::SetQualityLevel}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the minimum quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}).</p><p>Any pipeline object that creates worker threads should implement this interface.</p> + <p>Media Foundation provides a mechanism for applications to associate branches in the topology with {{MMCSS}} tasks. A topology branch is defined by a source node in the topology and all of the nodes downstream from it. An application registers a topology branch with {{MMCSS}} by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node and then calling <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong>.</p><p>When the application registers a topology branch with {{MMCSS}}, the Media Session queries every pipeline object in that branch for the <strong>{{IMFRealTimeClient}}</strong> interface. If the object exposes the interface, the Media Session calls <strong>RegisterThreads</strong>.</p><p>When the application unregisters the topology branch, the Media Session calls <strong>UnregisterThreads</strong>.</p><p>If a pipeline object creates its own worker threads but does not implement this interface, it can cause priority inversions in the Media Foundation pipeline, because high-priority processing threads might be blocked while waiting for the component to process data on a thread with lower priority.</p><p>Pipeline objects that do not create worker threads do not need to implement this interface.</p><p>In Windows?8, this interface is extended with <strong>{{IMFRealTimeClientEx}}</strong>.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p> The object's worker threads should register themselves with {{MMCSS}} by calling <strong>AvSetMmThreadCharacteristics</strong>, using the task name and identifier specified in this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{MMCSS}} task identifier. </p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + + + <p> Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>The object's worker threads should unregister themselves from {{MMCSS}} by calling <strong>AvRevertMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue for the topology branch that contains this object.</p> + <p> An application can register a branch of the topology to use a private work queue. The Media Session notifies any pipeline object that supports <strong>{{IMFRealTimeClient}}</strong> by calling <strong>SetWorkQueue</strong> with the application's work queue identifier. </p><p>When the application unregisters the topology branch, the Media Session calls <strong>SetWorkQueue</strong> again with the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue, or the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. See Remarks. </p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}). </p><p>This interface is a replacement for the <strong>{{IMFRealTimeClient}}</strong> interface.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>If the object does not create worker threads, the method should simply return {{S_OK}} and take no further action. </p><p>Otherwise, if the value of <code>*pdwTaskIndex</code> is zero on input, the object should perform the following steps:</p><ol> <li>A single worker thread calls <strong>AvSetMmThreadCharacteristics</strong> to create a new {{MMCSS}} task identifier. Store this value.</li> <li>Any additional worker threads call <strong>AvSetMmThreadCharacteristics</strong> using the new task identifier.</li> <li>Return the new task identifier to the caller, by setting <code>*pdwTaskIndex</code> equal to the task identifier.</li> </ol><p>If the value of <code>*pdwTaskIndex</code> is nonzero on input, the parameter contains an existing {{MMCSS}} task identifer. In that case, all worker threads of the object should register themselves for that task by calling <strong>AvSetMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MMCSS}} task identifier. If the value is zero on input, the object should create a new {{MCCSS}} task group. See Remarks.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread.</p> </dd> + + + + + <p>Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue that this object should use for asynchronous work items. </p> + <p>The object should use the values of <em>dwMultithreadedWorkQueueId</em> and <em>lWorkItemBasePriority</em> when it queues new work items. Use the <strong>{{MFPutWorkItem2}}</strong> or <strong>{{MFPutWorkItemEx2}}</strong> function to queue the work item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The work queue identifier.</p> </dd> + + + <dd> <p>The base priority for work items.</p> </dd> + + + + + <p>Implemented by the Sequencer Source. The sequencer source enables an application to create a sequence of topologies. To create the sequencer source, call <strong>{{MFCreateSequencerSource}}</strong>. For step-by-step instructions about how to create a playlist, see How to Create a Playlist.</p> + + + + <p> </p><p>Adds a topology to the end of the queue.</p> + <p>The sequencer plays topologies in the order they are queued. You can queue as many topologies as you want to preroll.</p><p>The application must indicate to the sequencer when it has queued the last topology on the Media Session. To specify the last topology, set the SequencerTopologyFlags_Last flag in the <em>dwFlags</em> parameter when you append the topology. The sequencer uses this information to end playback with the pipeline. Otherwise, the sequencer waits indefinitely for a new topology to be queued.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The source topology node is missing one of the following attributes:</p> <ul> <li> <p> <strong>{{MF_TOPONODE_STREAM_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_PRESENTATION_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_SOURCE}}</strong> </p> </li> </ul> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology. This reference cannot be <strong>{{NULL}}</strong>. If an application passes <strong>{{NULL}}</strong>, the call fails with an {{E_INVALIDARG}} error code.</p> </dd> + + + <dd> <p>A combination of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier for this topology.</p> </dd> + + + + + <p> </p><p>Deletes a topology from the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The sequencer element identifier of the topology to delete.</p> </dd> + + + + + <p> </p><p>Maps a presentation descriptor to its associated sequencer element identifier and the topology it represents.</p> + <p>The topology returned in <em>ppTopology</em> is the original topology that the application specified in <strong>AppendTopology</strong>. The source nodes in this topology contain references to the native sources. Do not queue this topology on the Media Session. Instead, call <strong>{{IMFMediaSourceTopologyProvider::GetMediaSourceTopology}}</strong> to get the sequencer source's modified topology. The source nodes in the modified topology contain references to the sequencer source, rather than the native sources.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The presentation descriptor is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_SEQUENCER_CONTEXT_CANCELED}}</strong></dt> </dl> </td><td> <p>This segment was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier. This value is assigned by the sequencer source when the application calls <strong>{{IMFSequencerSource::AppendTopology}}</strong>. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the original topology that the application added to the sequencer source. The caller must release the interface. This parameter can receive the value <strong>{{NULL}}</strong> if the sequencer source has switched to the next presentation. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Updates a topology in the queue.</p> + <p>This method is asynchronous. When the operation is completed, the sequencer source sends an {{MESequencerSourceTopologyUpdated}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The sequencer source has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the updated topology object.</p> </dd> + + + + + <p> </p><p>Updates the flags for a topology in the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + + + <p>Enables an application to get a topology from the sequencer source. This interface is exposed by the sequencer source object.</p> + + + + <p> </p><p>Returns a topology for a media source that builds an internal topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. For example, a <strong>{{NULL}}</strong> input parameter, or the presentation descriptor is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get this reference, either call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> on the media source, or get the reference from the {{MENewPresentation}} event.</p> </dd> + + + <dd> <p>Receives a reference to the topology's <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p>Updates the attributes of one or more nodes in the Media Session's current topology.</p><p>The Media Session exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE}}.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute.</p> + + + + <p> </p><p>Updates the attributes of one or more nodes in the current topology.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute. The method ignores any other attributes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The number of elements in the <em>pUpdates</em> array.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MFTOPONODE_ATTRIBUTE_UPDATE}}</strong> structures. Each element of the array updates one attribute on a node.</p> </dd> + + + + + <p> Controls how a byte stream buffers data from a network. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + <p> If a byte stream implements this interface, a media source can use it to control how the byte stream buffers data. This interface is designed for byte streams that read data from a network. </p><p> A byte stream that implements this interface should also implement the <strong>{{IMFMediaEventGenerator}}</strong> interface. When the byte stream starts buffering, it sends an {{MEBufferingStarted}} event. When it stops buffering, it sends an {{MEBufferingStopped}} event. </p><p> The byte stream must send a matching {{MEBufferingStopped}} event for every {{MEBufferingStarted}} event. The byte stream must not send {{MEBufferingStarted}} events unless the media source has enabled buffering by calling <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>. </p><p> After the byte stream sends an {{MEBufferingStarted}} event, it should send {{MEBufferingStopped}} if any of the following occur: </p><ul> <li> The byte stream finishes buffering data. </li> <li> The byte stream reaches the end of the stream. </li> <li> The media source calls <strong>EnableBuffering</strong> with the value <strong>{{FALSE}}</strong>. </li> <li> The media source calls <strong>StopBuffering</strong>. </li> </ul><p> The byte stream should not send any more buffering events after it reaches the end of the file. </p><p> If buffering is disabled, the byte stream does not send any buffering events. Internally, however, it might still buffer data while it waits for I/O requests to complete. Therefore, <strong>{{IMFByteStream}}</strong> methods might take an indefinite length of time to complete. </p><p> If the byte stream is buffering data internally and the media source calls <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>, the byte stream can send {{MEBufferingStarted}} immediately. </p><p> After the presentation has started, the media source should forward and {{MEBufferingStarted}} and {{MEBufferingStopped}} events that it receives while started. The Media Session will pause the presentation clock while buffering is progress and restart the presentation clock when buffering completes. The media source should only forward these events while the presentation is playing. The purpose of sending these events to the Media Session is to pause the presentation time while the source buffers data. </p> + + + + <p> </p><p>Sets the buffering parameters.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFBYTESTREAM_BUFFERING_PARAMS}}</strong> structure that contains the buffering parameters. The byte stream uses this information to calculate how much data to buffer from the network.</p> </dd> + + + + + <p> </p><p>Enables or disables buffering.</p> + <p>Before calling this method, call <strong>{{IMFByteStreamBuffering::SetBufferingParams}}</strong> to set the buffering parameters on the byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether the byte stream buffers data. If <strong>{{TRUE}}</strong>, buffering is enabled. If <strong>{{FALSE}}</strong>, buffering is disabled.</p> </dd> + + + + + <p> </p><p>Stops any buffering that is in progress.</p> + <p>If the byte stream is currently buffering data, it stops and sends an {{MEBufferingStopped}} event. If the byte stream is not currently buffering, this method has no effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The byte stream successfully stopped buffering.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No buffering was in progress.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how a network byte stream transfers data to a local cache. Optionally, this interface is exposed by byte streams that read data from a network, for example, through {{HTTP}}. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Stops the background transfer of data to the local cache.</p> + <p>The byte stream resumes transferring data to the cache if the application does one of the following:</p><ul> <li>Reads data from the byte stream.</li> <li>Calls the byte stream's <strong>{{IMFByteStreamBuffering::EnableBuffering}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks a byte stream by time position.</p> + <p>A byte stream can implement this interface if it supports time-based seeking. For example, a byte stream that reads data from a server might implement the interface. Typically, a local file-based byte stream would not implement it.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Queries whether the byte stream supports time-based seeking.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the byte stream supports time-based seeking, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Seeks to a new position in the byte stream.</p> + <p>If the byte stream reads from a server, it might cache the seek request until the next read request. Therefore, the byte stream might not send a request to the server immediately.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new position, in 100-nanosecond units.</p> </dd> + + + + + <p>Gets the result of a time-based seek.</p> + <p>This method returns the server response from a previous time-based seek. </p><strong>Note</strong>??This method normally cannot be invoked until some data is read from the byte stream, because the <strong>{{IMFByteStreamTimeSeek::TimeSeek}}</strong> method does not send a server request immediately.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The byte stream does not support time-based seeking, or no data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the new position after the seek, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the stop time, in 100-nanosecond units. If the stop time is unknown, the value is zero.</p> </dd> + + + <dd> <p>Receives the total duration of the file, in 100-nanosecond units. If the duration is unknown, the value is ?1.</p> </dd> + + + + + <p>Controls how a network byte stream transfers data to a local cache. This interface extends the <strong>{{IMFByteStreamCacheControl}}</strong> interface.</p> + <p>Byte streams object in Microsoft Media Foundation can optionally implement this interface. To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object. </p> + + + + <p>Gets the ranges of bytes that are currently stored in the cache.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of ranges returned in the <em>ppRanges</em> array.</p> </dd> + + + <dd> <p>Receives an array of <strong>{{MF_BYTE_STREAM_CACHE_RANGE}}</strong> structures. Each structure specifies a range of bytes stored in the cache. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Limits the cache size.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The maximum number of bytes to store in the cache, or <strong>{{ULONGLONG_MAX}} </strong> for no limit. The default value is no limit.</p> </dd> + + + + + <p>Queries whether background transfer is active.</p> + <p>Background transfer might stop because the cache limit was reached (see <strong>{{IMFByteStreamCacheControl2::SetCacheLimit}}</strong>) or because the <strong>{{IMFByteStreamCacheControl::StopBackgroundTransfer}}</strong> method was called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if background transfer is currently active, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Sets the user name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the user name. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the user name is encrypted. Otherwise, the user name is not encrypted.</p> </dd> + + + + + <p> </p><p>Sets the password.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the password. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the password is encrypted. Otherwise, the password is not encrypted.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Retrieves the password.</p> + <p>If the password is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the password. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Queries whether logged-on credentials should be used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If logged-on credentials should be used, the value is <strong>{{TRUE}}</strong>. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Implemented by applications to provide user credentials for a network source.</p><p>To use this interface, implement it in your application. Then create a property store object and set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property. The value of the property is a reference to your application's <strong>{{IMFNetCredentialManager}}</strong> interface. Then pass the property store to one of the source resolver's creation functions, such as <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong>, in the <em>pProps</em> parameter.</p><p>Media Foundation does not provide a default implementation of this interface. Applications that support authentication must implement this interface.</p> + + + + <p> </p><p>Begins an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFNetCredentialManagerGetParam}}</strong> structure.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{IMFAsyncResult}}</strong> interface that contains the asynchronous result.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface, which is used to retrieve the credentials. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Specifies whether the user's credentials succeeded in the authentication challenge. The network source calls this method to informs the application whether the user's credentials were authenticated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p>Boolean value. The value is <strong>{{TRUE}}</strong> if the credentials succeeded in the authentication challenge. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets credentials from the credential cache.</p><p>This interface is implemented by the credential cache object. Applications that implement the <strong>{{IMFNetCredentialManager}}</strong> interface can use this object to store the user's credentials. To create the credential cache object, call <strong>{{MFCreateCredentialCache}}</strong>.</p> + + + + <p> </p><p>Retrieves the credential object for the specified {{URL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string containing the {{URL}} for which the credential is needed.</p> </dd> + + + <dd> <p>A null-terminated wide-character string containing the realm for the authentication.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetAuthenticationFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialRequirements}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Reports whether the credential object provided successfully passed the authentication challenge.</p> + <p>This method is called by the network source into the credential manager.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the credential object succeeded in the authentication challenge; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Specifies how user credentials are stored.</p> + <p>If no flags are specified, the credentials are cached in memory. This method can be implemented by the credential manager and called by the network source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface. Obtain this reference by calling <strong>{{IMFNetCredentialCache::GetCredential}}</strong>.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialOptions}}</strong> enumeration.</p> </dd> + + + + + <p>Implemented by a client and called by Microsoft Media Foundation to get the client Secure Sockets Layer ({{SSL}}) certificate requested by the server. </p><p>In most {{HTTPS}} connections the server provides a certificate so that the client can ensure the identity of the server. However, in certain cases the server might wants to verify the identity of the client by requesting the client to send a certificate. For this scenario, a client application must provide a mechanism for Media Foundation to retrieve the client side certificate while opening an {{HTTPS}} {{URL}} with the source resolver or the scheme handler. The application must implement <strong>{{IMFSSLCertificateManager}}</strong>, set the <strong>{{IUnknown}}</strong> reference of the implemented object in the {{MFNETSOURCE_SSLCERTIFICATE_MANAGER}} property, and pass the property store to the source resolver. While opening the {{URL}}, Media Foundation calls the <strong>{{IMFSSLCertificateManager}}</strong> methods to get the certificate information. If the application needs to connect to {{HTTPS}} {{URL}} that requires a client-side certificate, or the application wants customized control over the type of server certificates to accept, then they can implement this interface. This interface can also be used by the application to validate the server {{SSL}} certificate.</p><p>If the <strong>{{IUnknown}}</strong> reference is not provided by the application and the {{HTTPS}} {{URL}} does not require the client to provide a certificate, +Media Foundation uses the default implementation to open the {{URL}}. +</p> + + + + <p>Gets the client {{SSL}} certificate synchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>Pointer to the buffer that stores the certificate. +This caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that receives the number of bytes required to hold the certificate data in the buffer pointed by <em>*ppbData</em>.</p> </dd> + + + + + <p>Starts an asynchronous call to get the client {{SSL}} certificate.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSSLCertificateManager::EndGetClientCertificate}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to get the client {{SSL}} certificate. </p> + <p>Call this method after the <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the buffer that stores the certificate. +The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer, in bytes.</p> </dd> + + + + + <p>Indicates whether the server {{SSL}} certificate must be verified by the caller, Media Foundation, or the <strong>{{IMFSSLCertificateManager}}</strong> implementation class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a string that contains the {{URL}} that is sent to the server.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if <strong>{{IMFSSLCertificateManager::OnServerCertificate}}</strong> is used to verify the server certificate. +Set to <strong>{{FALSE}}</strong> if Media Foundation verifies the server certificate by using the certificates in the Windows certificate store. +</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if the {{SSL}} certificate for the client is available for immediate retrieval. Media Foundation calls <strong>{{IMFSSLCertificateManager::GetClientCertificate}}</strong> to obtain the client certificate synchronously. If the value is set to <strong>{{FALSE}}</strong>, Media Foundation obtains the client {{SSL}} certificate with an asynchronous call to <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong>.</p> </dd> + + + + + <p>Called by Media Foundation when the server {{SSL}} certificate has been received; indicates whether the server certificate is accepted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} used to send the request to the server, and for which a server-side {{SSL}} certificate has been received.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the server {{SSL}} certificate.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that indicates the size of <em>pbData</em> in bytes.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> variable that indicates whether the certificate is accepted.</p> </dd> + + + + + <p>Notifies the application when a byte stream requests a {{URL}}, and enables the application to block {{URL}} redirection.</p> + <p>To set the callback interface:</p><ol> <li>Query the byte stream object for the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Call <strong>{{IMFAttributes::SetUnknown}}</strong> to set the {{MFNETSOURCE_RESOURCE_FILTER}} attribute.</li> </ol> + + + + <p>Called when the byte stream redirects to a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} to which the connection has been redirected.</p> </dd> + + + <dd> <p>To cancel the redirection, set this parameter to <strong>{{VARIANT_TRUE}}</strong>. To allow the redirection, set this parameter to <strong>{{VARIANT_FALSE}}</strong>.</p> </dd> + + + + + <p>Called when the byte stream requests a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} that the byte stream is requesting.</p> </dd> + + + + + <p>Callback interface to receive notifications from a network source on the progress of an asynchronous open operation.</p> + + + + <p> </p><p>Called by the network source when the open operation begins or ends.</p> + <p>The networks source calls this method with the following event types.</p><ul> <li> <p> {{MEConnectStart}} </p> </li> <li> <p> {{MEConnectEnd}} </p> </li> </ul><p>For more information, see How to Get Events from the Network Source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface.</p> </dd> + + + + + <p>Determines the proxy to use when connecting to a server. The network source uses this interface.</p><p>Applications can create the proxy locator configured by the application by implementing the <strong>{{IMFNetProxyLocatorFactory}}</strong> interface and setting the <strong>{{MFNETSOURCE_PROXYLOCATORFACTORY}}</strong> property on the source resolver. Otherwise, the network source uses the default Media Foundation implementation.</p><p>To create the default proxy locator, call <strong>{{MFCreateProxyLocator}}</strong>.</p> + + + + <p> </p><p>Initializes the proxy locator object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string containing the hostname of the destination server.</p> </dd> + + + <dd> <p>Null-terminated wide-character string containing the destination {{URL}}.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Determines the next proxy to use.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>There are no more proxy objects.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Keeps a record of the success or failure of using the current proxy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p><strong>{{HRESULT}}</strong> specifying the result of using the current proxy for connection.</p> </dd> + + + + + <p> </p><p>Retrieves the current proxy information including hostname and port.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pszStr</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives a null-terminated string containing the proxy hostname and port. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the number of elements in the <em>pszStr</em> array. On output, receives the required size of the buffer.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the default proxy locator.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the new proxy locator object's <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Persists media data from a source byte stream to an application-provided byte stream.</p><p>The byte stream used for {{HTTP}} download implements this interface. To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the byte stream, with the service identifier {{MFNET_SAVEJOB_SERVICE}}.</p> + + + + <p> </p><p>Begins saving a Windows Media file to the application's byte stream.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSaveJob::EndSave}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of the application's byte stream. The data from the source byte stream is written to this byte stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the percentage of content saved to the provided byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the percentage of completion.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves a supported protocol by index</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value passed in the <em>nProtocolIndex</em> parameter was greater than the total number of supported protocols, returned by <strong>GetNumberOfSupportedProtocols</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the protocol to retrieve. To get the number of supported protocols, call <strong>{{IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols}}</strong>.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MFNETSOURCE_PROTOCOL_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Not implemented in this release.</p> + <p>This method returns {{S_OK}}.</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request to create an object from a {{URL}}.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the Invoke method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create an object from a {{URL}}.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p><p>The operation cannot be canceled if <strong>BeginCreateObject</strong> returns <strong>{{NULL}}</strong> in the <em>ppIUnknownCancelCookie</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSchemeHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> Creates a media source from a byte stream. </p> + <p>Applications do not use this interface directly. This interface is exposed by byte-stream handlers, which are used by the source resolver. When the byte-stream handler is given a byte stream, it parses the stream and creates a media source. Byte-stream handlers are registered by file name extension or {{MIME}} type.</p> + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the {{MF_RESOLUTION_MEDIASOURCE}} flag and should not contain the {{MF_RESOLUTION_BYTESTREAM}} flag.</p><p>The byte-stream handler is responsible for parsing the stream and validating the contents. If the stream is not valid or the byte stream handler cannot parse the stream, the handler should return a failure code. The byte stream is not guaranteed to match the type of stream that the byte handler is designed to parse.</p><p>If the <em>pwszURL</em> parameter is not <strong>{{NULL}}</strong>, the byte-stream handler might use the {{URL}} during the resolution process. (For example, it might use the file name extension, if present.) Also, the byte stream might contain the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute, specifying the {{MIME}} type.</p><p>When the operation completes, the byte-stream handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFByteStreamHandler::EndCreateObject}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>String that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of zero or more flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The byte-stream handler can use this property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled. See <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create a media source.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFByteStreamHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the maximum number of bytes needed to create the media source or determine that the byte stream handler cannot parse this stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the maximum number of bytes that are required.</p> </dd> + + + + + <p> Implemented by components that provide input trust authorities ({{ITAs}}). This interface is used to get the {{ITA}} for each of the component's streams. </p> + + + + <p> </p><p>Retrieves the input trust authority ({{ITA}}) for a specified stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The {{ITA}} does not expose the requested interface.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream identifier for which the {{ITA}} is being requested.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. Currently the only supported value is {{IID_IMFInputTrustAuthority}}.</p> </dd> + + + <dd> <p>Receives a reference to the {{ITA}}'s <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables other components in the protected media path ({{PMP}}) to use the input protection system provided by an input trust authorities ({{ITA}}). An {{ITA}} is a component that implements an input protection system for media content. {{ITAs}} expose the <strong>{{IMFInputTrustAuthority}}</strong> interface.</p><p>An {{ITA}} translates policy from the content's native format into a common format that is used by other {{PMP}} components. It also provides a decrypter, if one is needed to decrypt the stream.</p><p>The topology contains one {{ITA}} instance for every protected stream in the media source. The {{ITA}} is obtained from the media source by calling <strong>{{IMFTrustedInput::GetInputTrustAuthority}}</strong>.</p> + + + + <p> </p><p>Retrieves a decrypter transform.</p> + <p>The decrypter should be created in a disabled state, where any calls to <strong>{{IMFTransform::ProcessOutput}}</strong> automatically fail. After the input trust authority ({{ITA}}) has verified that it is running inside the protected media path ({{PMP}}), the {{ITA}} should enable the decrypter.</p><p>An {{ITA}} is not required to provide a decrypter. If the source content is not encrypted, the method should return {{MF_E_NOT_PROTECTED}}. The {{PMP}} will then proceed without using a decrypter for that stream.</p><p>The {{ITA}} must create a new instance of its decrypter for each call to <strong>GetDecrypter</strong>. Do not return multiple references to the same decrypter. They must be separate instances because the Media Session might place them in two different branches of the topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The decrypter does not support the requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_PROTECTED}}</strong></dt> </dl> </td><td> <p>This input trust authority ({{ITA}}) does not provide a decrypter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface being requested. Currently this value must be {{IID_IMFTransform}}, which requests the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Requests permission to perform a specified action on the stream.</p> + <p>This method verifies whether the user has permission to perform a specified action on the stream. The {{ITA}} does any work needed to verify the user's right to perform the action, such as checking licenses.</p><p>To verify the user's rights, the {{ITA}} might need to perform additional steps that require interaction with the user or consent from the user. For example, it might need to acquire a new license or individualize a {{DRM}} component. In that case, the {{ITA}} creates an activation object for a content enabler and returns the activation object's <strong>{{IMFActivate}}</strong> interface in the <em>ppContentEnablerActivate</em> parameter. The activation object is responsible for creating a content enabler that exposes the <strong>{{IMFContentEnabler}}</strong> interface. The content enabler is used as follows:</p><ol> <li> <p>The Media Session returns the <strong>{{IMFActivate}}</strong> reference to the application.</p> </li> <li> <p>The application calls <strong>{{IMFActivate::ActivateObject}}</strong> to activate the content enabler.</p> </li> <li> <p>The application calls <strong>{{IMFContentEnabler}}</strong> methods to perform whatever actions are needed, such as individualization or obtaining a license. The content enabler object must encapsulate this functionality through the <strong>{{IMFContentEnabler}}</strong> interface.</p> </li> <li> <p>The Media Session calls <strong>RequestAccess</strong> again.</p> </li> </ol><p>The return value signals whether the user has permission to perform the action:</p><ul> <li> <p>If the user already has permission to perform the action, the method returns {{S_OK}} and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the user does not have permission, the method returns a failure code and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the {{ITA}} must perform additional steps that require interaction with the user, the method returns a failure code and returns the content enabler's <strong>{{IMFActivate}}</strong> reference in <em>ppContentEnablerActivate</em>.</p> </li> </ul><p>The Media Session will not allow the action unless this method returns {{S_OK}}. However, a return value of {{S_OK}} does not guarantee that the action will be performed, because some other failure might occur after this method is called. When the action is definitely about to happen, the Media Session calls <strong>{{IMFInputTrustAuthority::BindAccess}}</strong>.</p><p>A stream can go to multiple outputs, so this method might be called multiple times with different actions, once for every output.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The user has permission to perform this action.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_NEEDS_INDIVIDUALIZATION}}</strong></dt> </dl> </td><td> <p>The user must individualize the application.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_LICENSE_REQUIRED}}</strong></dt> </dl> </td><td> <p>The user must obtain a license.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested action, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the value <strong>{{NULL}}</strong> or a reference to the <strong>{{IMFActivate}}</strong> interface. The <strong>{{IMFActivate}}</strong> interface is used to create a content enabler object. The caller must release the interface. For more information, see Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the policy that defines which output protection systems are allowed for this stream, and the configuration data for each protection system.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The action that will be performed on this stream, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFOutputPolicy}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) that a requested action is about to be performed.</p> + <p>Before calling this method, the Media Session calls <strong>{{IMFInputTrustAuthority::RequestAccess}}</strong> to request an action. The <strong>BindAccess</strong> method notifies the {{ITA}} that the action is definitely about to occur, so that the {{ITA}} can update its internal state as needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>BindAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) when the number of output trust authorities ({{OTAs}}) that will perform a specified action has changed.</p> + <p>The {{ITA}} can update its internal state if needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>UpdateAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Resets the input trust authority ({{ITA}}) to its initial state.</p> + <p>When this method is called, the {{ITA}} should disable any decrypter that was returned in the <strong>{{IMFInputTrustAuthority::GetDecrypter}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implemented by components that provide output trust authorities ({{OTAs}}). Any Media Foundation transform ({{MFT}}) or media sink that is designed to work within the protected media path ({{PMP}}) and also sends protected content outside the Media Foundation pipeline must implement this interface.</p><p>The policy engine uses this interface to negotiate what type of content protection should be applied to the content. Applications do not use this interface directly.</p> + <p>If an {{MFT}} supports <strong>{{IMFTrustedOutput}}</strong>, it must expose the interface through <strong>QueryInterface</strong>. The interface applies to all of the input streams on the {{MFT}}. (There is no mechanism to return a separate <strong>{{IMFTrustedOutput}}</strong> reference for each stream.) The {{MFT}} must apply the output policies to all of its input streams. If the {{MFT}} sends different streams to separate connectors, it must report all of the connector attributes.</p> + + + + <p> Gets the number of output trust authorities ({{OTAs}}) provided by this trusted output. Each {{OTA}} reports a single action.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{OTAs}}. </p> </dd> + + + + + <p> Gets an output trust authority ({{OTA}}), specified by index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the {{OTA}} to retrieve. To get the number of {{OTAs}} provided by this object, call <strong>{{IMFTrustedOutput::GetOutputTrustAuthorityCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFOutputTrustAuthority}}</strong> interface of the {{OTA}}. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether this output is a policy sink, meaning it handles the rights and restrictions required by the input trust authority ({{ITA}}).</p> + <p>A trusted output is generally considered to be a policy sink if it does not pass the media content that it receives anywhere else; or, if it does pass the media content elsewhere, either it protects the content using some proprietary method such as encryption, or it sufficiently devalues the content so as not to require protection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, this object is a policy sink. If <strong>{{FALSE}}</strong>, the policy must be enforced further downstream.</p> </dd> + + + + + <p>Encapsulates the functionality of one or more output protection systems that a trusted output supports. This interface is exposed by output trust authority ({{OTA}}) objects. Each {{OTA}} represents a single action that the trusted output can perform, such as play, copy, or transcode. An {{OTA}} can represent more than one physical output if each output performs the same action.</p> + + + + <p> </p><p>Retrieves the action that is performed by this output trust authority ({{OTA}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the {{MFPOLICYMANAGER_ACTION}} enumeration.</p> </dd> + + + + + <p> Sets one or more policy objects on the output trust authority ({{OTA}}). </p> + <p>If the method returns <strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong>, the {{OTA}} sends an {{MEPolicySet}} event when it enforces the policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong></dt> </dl> </td><td> <p> The policy was negotiated successfully, but the {{OTA}} will enforce it asynchronously. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_POLICY_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The {{OTA}} does not support the requirements of this policy. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The address of an array of <strong>{{IMFOutputPolicy}}</strong> references. </p> </dd> + + + <dd> <p> The number of elements in the <em>ppPolicy</em> array. </p> </dd> + + + <dd> <p> Receives either a reference to a buffer allocated by the {{OTA}}, or the value <strong>{{NULL}}</strong>. If this parameter receives a non-<strong>{{NULL}}</strong> value, the caller must release the buffer by calling <strong>CoTaskMemFree</strong>. </p> <strong>Note</strong>??Currently this parameter is reserved. An {{OTA}} should set the reference to <strong>{{NULL}}</strong>. ? </dd> + + + <dd> <p> Receives the size of the <em>ppbTicket</em> buffer, in bytes. If <em>ppbTicket</em> receives the value <strong>{{NULL}}</strong>, <em>pcbTicket</em> receives the value zero.</p> </dd> + + + + + <p>Encapsulates a usage policy from an input trust authority ({{ITA}}). Output trust authorities ({{OTAs}}) use this interface to query which protection systems they are required to enforce by the {{ITA}}.</p> + + + + <p> Retrieves a list of the output protection systems that the output trust authority ({{OTA}}) must enforce, along with configuration data for each protection system. </p> + <p>The video {{OTA}} returns the <strong>{{MFCONNECTOR_UNKNOWN}}</strong> connector type unless the Direct3D device is in full-screen mode. (Direct3D windowed mode is not generally a secure video mode.) You can override this behavior by implementing a custom {{EVR}} presenter that implements the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Describes the output that is represented by the {{OTA}} calling this method. This value is a bitwise {{OR}} of zero or more of the following flags. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUS}}</strong></dt> </dl> </td><td> <p> Hardware bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_COMPRESSED}}</strong></dt> </dl> </td><td> <p> The output sends compressed data. If this flag is absent, the output sends uncompressed data. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUSIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_DIGITAL}}</strong></dt> </dl> </td><td> <p> The output sends a digital signal. If this flag is absent, the output sends an analog signal. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_NONSTANDARDIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_SOFTWARE}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_VIDEO}}</strong></dt> </dl> </td><td> <p> The output sends video data. If this flag is absent, the output sends audio data. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Indicates a specific family of output connectors that is represented by the {{OTA}} calling this method. Possible values include the following. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_AGP}}</strong></dt> </dl> </td><td> <p> {{AGP}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPONENT}}</strong></dt> </dl> </td><td> <p> Component video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPOSITE}}</strong></dt> </dl> </td><td> <p> Composite video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_D_JPN}}</strong></dt> </dl> </td><td> <p> Japanese D connector. (Connector conforming to the {{EIAJ}} {{RC}}-5237 standard.) </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DVI}}</strong></dt> </dl> </td><td> <p> Digital video interface ({{DVI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_HDMI}}</strong></dt> </dl> </td><td> <p> High-definition multimedia interface ({{HDMI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_LVDS}}</strong></dt> </dl> </td><td> <p> Low voltage differential signaling ({{LVDS}}) connector.</p> <p>A connector using the {{LVDS}} interface to connect internally to a display device. The connection between the graphics adapter and the display device is permanent and not accessible to the user. Applications should not enable High-Bandwidth Digital Content Protection ({{HDCP}}) for this connector.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI}}</strong></dt> </dl> </td><td> <p> {{PCI}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI_Express}}</strong></dt> </dl> </td><td> <p> {{PCI}} Express bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCIX}}</strong></dt> </dl> </td><td> <p> {{PCI}}-X bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SDI}}</strong></dt> </dl> </td><td> <p> Audio data sent over a connector via S/{{PDIF}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SPDIF}}</strong></dt> </dl> </td><td> <p> Serial digital interface connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SVIDEO}}</strong></dt> </dl> </td><td> <p> S-Video connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded Unified Display Interface ({{UDI}}). </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External {{UDI}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UNKNOWN}}</strong></dt> </dl> </td><td> <p> Unknown connector type. See Remarks. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_VGA}}</strong></dt> </dl> </td><td> <p> {{VGA}} connector. </p> </td></tr> <tr><td><dl> <dt><strong> {{MFCONNECTOR_MIRACAST}}</strong></dt> </dl> </td><td> <p>Miracast wireless connector. </p> <p>Supported in Windows?8.1 and later.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to an array of {{GUID}} values that specify which output protection systems are supported by the {{OTA}} that is calling this method. </p> </dd> + + + <dd> <p> Number of elements in the <em>rgGuidProtectionSchemasSupported</em> array. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object. The caller must release the interface. Each object in the collection is an <strong>{{IMFOutputSchema}}</strong> reference. Each <strong>{{IMFOutputSchema}}</strong> reference defines an output protection system that the {{OTA}} must enforce. </p> </dd> + + + + + <p> </p><p>Retrieives a {{GUID}} identifying the input trust authority ({{ITA}}) that created this output policy object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> </p><p>Retrieves the minimum version of the global revocation list ({{GRL}}) that must be enforced by the protected environment for this policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum {{GRL}} version.</p> </dd> + + + + + <p>Encapsulates information about an output protection system and its corresponding configuration data.</p> + <p>If the configuration information for the output protection system does not require more than a <strong>{{DWORD}}</strong> of space, the configuration information is retrieved in the <strong>GetConfigurationData</strong> method. If more than a <strong>{{DWORD}}</strong> of configuration information is needed, it is stored using the <strong>{{IMFAttributes}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the output protection system that is represented by this object. Output protection systems are identified by {{GUID}} value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the {{GUID}} that identifies the output protection system.</p> </dd> + + + + + <p> </p><p>Returns configuration data for the output protection system. The configuration data is used to enable or disable the protection system, and to set the protection levels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the configuration data. The meaning of this data depends on the output protection system.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} identifying the input trust authority ({{ITA}}) that generated this output schema object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> Establishes a one-way secure channel between two objects. </p> + + + + <p> </p><p>Retrieves the client's certificate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer allocated by the object. The buffer contains the client's certificate. The caller must release the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Passes the encrypted session key to the client.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the encrypted session key. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbEncryptedSessionKey</em> buffer, in bytes.</p> </dd> + + + + + <p> Provides encryption for media data inside the protected media path ({{PMP}}). </p> + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on input.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the sample protection certificate.</p> + <p>For certain version numbers of sample protection, the downstream component must provide a certificate. Components that do not support these version numbers can return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme for which to receive a certificate. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Receives a reference to a buffer containing the certificate. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves initialization information for sample protection from the upstream component.</p> + <p>This method must be implemented by the upstream component. The method fails if the component does not support the requested sample protection version. Downstream components do not implement this method and should return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the output stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a certificate provided by the downstream component.</p> </dd> + + + <dd> <p>Size of the certificate, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains the initialization information for downstream component. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes sample protection on the downstream component.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the input stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the initialization data provided by the upstream component. To retrieve this buffer, call <strong>{{IMFSampleProtection::InitOutputProtection}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p>Enables a media sink to receive samples before the presentation clock is started.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>Media sinks can implement this interface to support seamless playback and transitions. If a media sink exposes this interface, it can receive samples before the presentation clock starts. It can then pre-process the samples, so that rendering can begin immediately when the clock starts. Prerolling helps to avoid glitches during playback.</p><p>If a media sink supports preroll, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method should return the {{MEDIASINK_CAN_PREROLL}} flag.</p> + + + + <p> Notifies the media sink that the presentation clock is about to start. </p> + <p> After this method is called, the media sink sends any number of {{MEStreamSinkRequestSample}} events to request samples, until is has enough preroll data. When it has enough preroll data, the media sink sends an {{MEStreamSinkPrerolled}} event. This event signals that the client can start the presentation clock. </p><p> During preroll, the media sink can prepare the samples that it receives, so that they are ready to be rendered. It does not actually render any samples until the clock starts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The upcoming start time for the presentation clock, in 100-nanosecond units. This time is the same value that will be given to the <strong>{{IMFPresentationClock::Start}}</strong> method when the presentation clock is started. </p> </dd> + + + + + <p>Optionally supported by media sinks to perform required tasks before shutdown. This interface is typically exposed by archive sinks?that is, media sinks that write to a file. It is used to perform tasks such as flushing data to disk or updating a file header.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>If a media sink exposes this interface, the Media Session will call <strong>BeginFinalize</strong> on the sink before the session closes.</p> + + + + <p> </p><p>Notifies the media sink to asynchronously take any steps it needs to finish its tasks.</p> + <p>Many archive media sinks have steps they need to do at the end of archiving to complete their file operations, such as updating the header (for some formats) or flushing all pending writes to disk. In some cases, this may include expensive operations such as indexing the content. <strong>BeginFinalize</strong> is an asynchronous way to initiate final tasks.</p><p>When the finalize operation is complete, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFFinalizableMediaSink::EndFinalize}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of an asynchronous object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous finalize operation.</p> + <p>Call this method after the <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p>Passes configuration information to the media sinks that are used for streaming the content. Optionally, this interface is supported by media sinks. The built-in {{ASF}} streaming media sink and the {{MP3}} media sink implement this interface.</p> + + + + <p>Called by the streaming media client before the Media Session starts streaming to specify the byte offset or the time offset.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A Boolean value that specifies whether <em>qwSeekOffset</em> gives a byte offset of a time offset.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies a byte offset.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies the time position in 100-nanosecond units.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A byte offset or a time offset, depending on the value passed in <em>fSeekOffsetIsByteOffset</em>. Time offsets are specified in 100-nanosecond units. +</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the object that is hosting this proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface reference to and from a stream.</p><p>Stream objects that support <strong>{{IStream}}</strong> can expose this interface to provide custom marshaling for interface references.</p> + + + + <p> </p><p>Stores the data needed to marshal an interface across a process boundary.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface from data stored in the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHost::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHost::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an object in the protect media path ({{PMP}}) process, from a {{CLSID}}. </p> + <p> You can use the <em>pStream</em> parameter to initialize the object after it is created. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the object to create. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. If this parameter is not <strong>{{NULL}}</strong>, the {{PMP}} host queries the created object for the <strong>{{IPersistStream}}</strong> interface and calls <strong>{{IPersistStream::Load}}</strong>, passing in the <em>pStream</em> reference. </p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> Enables a media source to receive a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>If a media source exposes this interface, the Protected Media Path ({{PMP}}) Media Session calls <strong>SetPMPHost</strong> with a reference to the <strong>{{IMFPMPHost}}</strong> interface. The media source can use the <strong>{{IMFPMPHost}}</strong> interface to create objects in the {{PMP}} process.</p> + + + + <p> Provides a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>The <strong>{{IMFPMPHost}}</strong> reference is apartment threaded. The media source must add the reference to the global interface table ({{GIT}}) before using it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Enables two instances of the Media Session to share the same protected media path ({{PMP}}) process. </p> + <p>If your application creates more than one instance of the Media Session, you can use this interface to share the same {{PMP}} process among several instances. This can be more efficient than re-creating the {{PMP}} process each time.</p><p>Use this interface as follows:</p><ol> <li> Create the first instance of the {{PMP}} Media Session by calling <strong>{{MFCreatePMPMediaSession}}</strong>. </li> <li> Retrieve an <strong>{{IMFPMPServer}}</strong> reference from the first Media Session by calling <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_PMP_SERVER_CONTEXT}}</strong>. </li> <li> Create the second instance of the {{PMP}} Media Session. Set the {{MF_SESSION_SERVER_CONTEXT}} attribute on the <em>pConfiguration</em> parameter of the <strong>{{MFCreatePMPMediaSession}}</strong> function. The attribute value is the <strong>{{IMFPMPServer}}</strong> reference retrieved in step 2. </li> </ol> + + + + <p> </p><p>Blocks the protected media path ({{PMP}}) process from ending.</p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to {{IMFPMPServer::UnlockProcess}}, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to {{IMFPMPServer::LockProcess}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an object in the protected media path ({{PMP}}) process.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{CLSID}} of the object to create.</p> </dd> + + + <dd> <p>Interface identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Modifies a topology for use in a Terminal Services environment. </p> + <p>To use this interface, do the following:</p><ol> <li> Call <strong>GetSystemMetrics</strong> with the <strong>{{SM_REMOTESESSION}}</strong> flag. The function returns <strong>{{TRUE}}</strong> if the calling process is associated with a Terminal Services client session. </li> <li> If <strong>GetSystemMetrics</strong> returns <strong>{{TRUE}}</strong>, call <strong>{{MFCreateRemoteDesktopPlugin}}</strong>. This function returns a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface. </li> <li> Call <strong>UpdateTopology</strong> with a reference to the topology. </li> </ol><p>The application must call <strong>UpdateTopology</strong> before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + + + + <p> </p><p>Modifies a topology for use in a Terminal Services environment.</p> + <p>If the application is running in a Terminal Services client session, call this method before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology.</p> </dd> + + + + + <p> Sets and retrieves Synchronized Accessible Media Interchange ({{SAMI}}) styles on the {{SAMI}} Media Source. </p> + <p> To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_SAMI_SERVICE}}</strong>. Call <strong>GetService</strong> either directly on the {{SAMI}} media source, or on the Media Session (if you are using the {{SAMI}} source with the Media Session).</p> + + + + <p> Gets the number of styles defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{SAMI}} styles in the file. </p> </dd> + + + + + <p> Gets a list of the style names defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. The <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must clear the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> Sets the current style on the {{SAMI}} media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the style. To clear the current style, pass an empty string (""). To get the list of style names, call <strong>{{IMFSAMIStyle::GetStyles}}</strong>.</p> </dd> + + + + + <p> Gets the current style from the {{SAMI}} media source. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to a null-terminated string that contains the name of the style. If no style is currently set, the method returns an empty string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p>Implemented by the transcode profile object.</p><p>The transcode profile stores configuration settings that the topology builder uses to generate the transcode topology for the output file. These configuration settings are specified by the caller and include audio and video stream properties, encoder settings, and container settings that are specified by the caller.</p><p>To create the transcode profile object, call <strong>{{MFCreateTranscodeProfile}}</strong>. The configured transcode profile is passed to <strong>{{MFCreateTranscodeTopology}}</strong>, which creates the transcode topology with the appropriate settings. </p> + + + + <p>Sets audio stream configuration settings in the transcode profile.</p><p>To get a list of compatible audio media types supported by the Media Foundation transform ({{MFT}}) encoder , call <strong>{{MFTranscodeGetAudioOutputAvailableTypes}}</strong>. You can get the attributes that are set on the required media type and set them on the transcode profile. To set the audio attributes properly, create a new attribute store and copy the attribute store from the required media media type by calling <strong>{{IMFAttributes::CopyAllItems}}</strong>. This makes sure that the caller does not hold the references to the media type retrieved from the encoder. For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio stream settings that are currently set in the transcode profile. </p> + <p>If there are no audio attributes set in the transcode profile, the call to <strong>GetAudioAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following topics describe the audio attributes:</p><ul> <li> Audio Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current audio stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets video stream configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the video stream settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the <strong>GetVideoAttributes</strong> method succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following list shows the video attributes:</p><ul> <li> Video Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> <li> {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current video stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets container configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the container settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the call to <strong>GetContainerAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p> To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute. The following list shows the container attributes:</p><ul> <li> {{MF_TRANSCODE_CONTAINERTYPE}} </li> <li> {{MF_TRANSCODE_SKIP_METADATA_TRANSFER}} </li> <li> {{MF_TRANSCODE_TOPOLOGYMODE}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current container type for the output file. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets an output byte stream for the transcode media sink.</p> + <p>Call this method to provide a writeable byte stream that will receive the transcoded data.</p><p>Alternatively, you can provide the name of an output file, by calling <strong>{{IMFTranscodeSinkInfoProvider::SetOutputFile}}</strong>. These two methods are mutually exclusive.</p><p>The <em>pByteStreamActivate</em> parameter must specify an activation object that creates a writeable byte stream. Internally, the transcode media sink calls <strong>{{IMFActivate::ActivateObject}}</strong> to create the byte stream, as follows:</p><code>{{IMFByteStream}} *pByteStream = {{NULL}}; {{HRESULT}} hr = pByteStreamActivate-&gt;ActivateObject({{IID_IMFByteStream}}, (void**)&amp;pByteStream);</code><p>Currently, Microsoft Media Foundation does not provide any byte-stream activation objects. To use this method, an application must provide a custom implementation of <strong>{{IMFActivate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of a byte-stream activation object. </p> </dd> + + + + + <p>Sets the transcoding profile on the transcode sink activation object.</p> + <p>Before calling this method, initialize the profile object as follows:</p><ul> <li>Set the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to specify the container type of the output file.</li> <li>If the output file will have a video stream, set video attributes by calling the <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> method.</li> <li>If the output file will have an audio stream, set audio attributes by calling the <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface. To get a reference to this interface, call <strong>{{MFCreateTranscodeProfile}}</strong>.</p> </dd> + + + + + <p> Gets the media types for the audio and video streams specified in the transcode profile.</p> + <p>Before calling this method, call <strong>{{IMFTranscodeSinkInfoProvider::SetProfile}}</strong> to set the transcode profile. The <strong>GetSinkInfo</strong> method uses the profile to create media types for the audio and video streams. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MF_TRANSCODE_SINK_INFO}}</strong> structure.</p> <p>If the method succeeds, the method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-{{NULL}} after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> </dd> + + + + + <p>Enables an application to use a Media Foundation transform ({{MFT}}) that has restrictions on its use.</p> + <p>If you register an {{MFT}} that requires unlocking, include the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag when you call the <strong>{{MFTRegister}}</strong> function.</p> + + + + <p>Unlocks a Media Foundation transform ({{MFT}}) so that the application can use it.</p> + <p>This method authenticates the caller, using a private communication channel between the {{MFT}} and the object that implements the <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface. The details of the communication depend entirely on the implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{MFT}}.</p> </dd> + + + + + <p>Registers Media Foundation transforms ({{MFTs}}) in the caller's process.</p><p>The Media Session exposes this interface as a service. To obtain a reference to this interface, call the <strong>{{IMFGetService::GetService}}</strong> method on the Media Session with the service identifier <strong>{{MF_LOCAL_MFT_REGISTRATION_SERVICE}}</strong>.</p> + <p>This interface requires the Media Session. If you are not using the Media Session for playback, call one of the following functions instead:</p><ul> <li> <strong>{{MFTRegisterLocal}}</strong> </li> <li> <strong>{{MFTRegisterLocalByCLSID}}</strong> </li> </ul> + + + + <p>Registers one or more Media Foundation transforms ({{MFTs}}) in the caller's process.</p> + <p>This method is similar to the <strong>{{MFTRegisterLocalByCLSID}}</strong> function. It registers one or more {{MFTs}} in the caller's process. These {{MFTs}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag.</p><p>Unlike <strong>{{MFTRegisterLocalByCLSID}}</strong>, however, this method also makes the {{MFT}} available in the Protected Media Path ({{PMP}}) process, and is therefore useful if you are using the Media Session inside the {{PMP}}. For more information, see the following topics:</p><ul> <li> <strong>{{MFCreatePMPMediaSession}}</strong> </li> <li> Protected Media Path </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTRATION_INFO}}</strong> structures.</p> </dd> + + + <dd> <p>The number of elements in the <em>pMFTs</em> array.</p> </dd> + + + + + + + + + + + + + + + + + <p>Allows a media source to create a Windows Runtime object in the Protected Media Path ({{PMP}}) process. </p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHostApp::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHostApp::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a Windows Runtime object in the protected media path ({{PMP}}) process. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Id of object to create.</p> </dd> + + + <dd> <p>Data to be passed to the object by way of a <strong>{{IPersistStream}}</strong>.</p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the created object. </p> </dd> + + + + + <p>Provides a mechanism for a media source to implement content protection functionality in a Windows Store apps.</p> + <p><strong>When to implement:</strong> A media source implements <strong>{{IMFPMPClientApp}}</strong> in order to implement content protection functionality for Windows Store apps. </p> + + + + <p>Sets a reference to the <strong>{{IMFPMPHostApp}}</strong> interface allowing a media source to create objects in the {{PMP}} process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a request for a sample from a MediaStreamSource. </p> + <p><strong>{{MFMediaStreamSourceSampleRequest}}</strong> is implemented by the <strong>Windows.Media.Core.MediaStreamSourceSampleRequest</strong> runtime class.</p> + + + + <p>Sets the sample for the media stream source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample for the media stream source.</p> </dd> + + + + + <p>Tracks the reference counts on a video media sample. Video samples created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function expose this interface.</p> + <p>Use this interface to determine whether it is safe to delete or re-use the buffer contained in a sample. One object assigns itself as the owner of the video sample by calling <strong>SetAllocator</strong>. When all objects release their reference counts on the sample, the owner's callback method is invoked.</p> + + + + <p> </p><p>Sets the owner for the sample.</p> + <p>When this method is called, the sample holds an additional reference count on itself. When every other object releases its reference counts on the sample, the sample invokes the <em>pSampleAllocator</em> callback method. To get a reference to the sample, call <strong>{{IMFAsyncResult::GetObject}}</strong> on the asynchronous result object given to the callback's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>After the callback is invoked, the sample clears the callback. To reinstate the callback, you must call <strong>SetAllocator</strong> again.</p><p>It is safe to pass in the sample's <strong>{{IMFSample}}</strong> interface reference as the state object (<em>pUnkState</em>) for the callback. If <em>pUnkState</em> points to the sample, the <strong>SetAllocator</strong> method accounts for the additional reference count on <em>pUnkState</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The owner was already set. This method cannot be called twice on the sample.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to perform a handshake with the protected environment. This is needed because the <strong>CreateFile</strong> and <strong>DeviceIoControl</strong> {{APIs}} are not available to Windows Store apps.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create and use an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object.</p> + + + + <p>Allows content protection systems to access the protected environment.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object and use the <strong>Call</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The length in bytes of the input data.</p> </dd> + + + <dd> <p>A reference to the input data.</p> </dd> + + + <dd> <p>The length in bytes of the output data.</p> </dd> + + + <dd> <p>A reference to the output data.</p> </dd> + + + + + <p>Gets the Global Revocation List ({{GLR}}).</p> + <p>Allows reading of the system Global Revocation List ({{GRL}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the data returned in <strong>output</strong>.</p> </dd> + + + <dd> <p>Receives the contents of the global revocation list file.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to get the procedure address of a function in the signed library. This method provides the same functionality as <strong>GetProcAddress</strong> which is not available to Windows Store apps.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create and use an <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + + <p>Gets the procedure address of the specified function in the signed library.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create an <strong>{{IMFSignedLibrary}}</strong> object and call the <strong>GetProcedureAddress</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The entry point name in the {{DLL}} that specifies the function.</p> </dd> + + + <dd> <p>Receives the address of the entry point.</p> </dd> + + + + + <p>Provides a method that retireves system id data.</p> + + + + <p>Retrieves system id data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The size in bytes of the returned data.</p> </dd> + + + <dd> <p>Receives the returned data. The caller must free this buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Sets up the <strong>{{IMFSystemId}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Calls into the implementation of the protection system in the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the function that you want to run. This identifier is defined by the implementation of the protection system.</p> </dd> + + + <dd> <p>The number of bytes of in the buffer that <em>InputBuffer</em> specifies, including private data.</p> </dd> + + + <dd> <p>A reference to the data that you want to provide as input.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the length in bytes of the data that the function wrote to the buffer that <em>OutputBuffer</em> specifies, including the private data. </p> </dd> + + + <dd> <p>Pointer to the buffer where you want the function to write its output.</p> </dd> + + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Allows a decryptor to manage hardware keys and decrypt hardware samples.</p> + + + + <p> Allows the display driver to return {{IHV}}-specific information used when initializing a new hardware key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of bytes in the buffer that <em>InputPrivateData</em> specifies.</p> </dd> + + + <dd> <p>The contents of this parameter are defined by the implementation of the protection system that runs in the security processor. The contents may contain data about license or stream properties.</p> </dd> + + + <dd> <p>The return data is also defined by the implementation of the protection system implementation that runs in the security processor. The contents may contain data associated with the underlying hardware key.</p> </dd> + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + + + + + + + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p></p> + + + + <p></p> + + + + <p></p> + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + <p>Called by the media pipeline to get information about a transform provided by the sensor transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the transform for which information is being requested. In the current release, this value will always be 0.</p> </dd> + + + <dd> <p>Gets the identifier for the transform.</p> </dd> + + + <dd> <p>The attribute store to be populated.</p> </dd> + + + <dd> <p>A collection of <strong>{{IMFSensorStream}}</strong> objects.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the Media Session in the application's process.</p> + <p> If your application does not play protected content, you can use this function to create the Media Session in the application's process. To use the Media Session for protected content, you must call <strong>{{MFCreatePMPMediaSession}}</strong>. </p><p> You can use the <em>pConfiguration</em> parameter to specify any of the following attributes: </p><ul> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> <li> {{MF_LOW_LATENCY}} </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> Creates an instance of the Media Session inside a Protected Media Path ({{PMP}}) process. </p> + <p>You can use the <em>pConfiguration</em> parameter to set any of the following attributes:</p><ul> <li> <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_REMOTE_SOURCE_MODE}}</strong> </li> <li> <strong>{{MF_SESSION_SERVER_CONTEXT}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> </ul><p>If this function cannot create the {{PMP}} Media Session because a trusted binary was revoked, the <em>ppEnablerActivate</em> parameter receives an <strong>{{IMFActivate}}</strong> interface reference. The application can use this reference to create a content enabler object, which can then be used to download an updated binary:</p><ol> <li> Call <strong>{{IMFActivate::ActivateObject}}</strong> with the interface identifier {{IID_IMFContentEnabler}} to get an <strong>{{IMFContentEnabler}}</strong> interface reference. </li> <li> Use that interface to download the updated binary. </li> <li> Call <strong>{{MFCreatePMPMediaSession}}</strong> again. </li> </ol><p>If the function successfully creates the {{PMP}} Media Session, the <em>ppEnablerActivate</em> parameter receives the value <strong>{{NULL}}</strong>.</p><p>Do not make calls to the {{PMP}} Media Session from a thread that is processing a window message sent from another thread. To test whether the current thread falls into this category, call <strong>InSendMessage</strong>.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Creates the source resolver, which is used to create a media source from a {{URL}} or byte stream. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from mf.dll. Starting in Windows?7, this function is exported from mfplat.dll, and mf.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the source resolver's <strong>{{IMFSourceResolver}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create property stores.]</p><p> Creates an empty property store object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the {{URL}} schemes that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{URL}} schemes. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves the {{MIME}} types that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{MIME}} types. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates a topology object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology object. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> Creates a topology node.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The type of node to create, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the media type for a stream associated with a topology node.</p> + <p>This function gets the actual media type from the object that is associated with the topology node. The <em>pNode</em> parameter should specify a node that belongs to a fully resolved topology. If the node belongs to a partial topology, the function will probably fail. </p><p>Tee nodes do not have an associated object to query. For tee nodes, the function gets the node's input type, if available. Otherwise, if no input type is available, the function gets the media type of the node's primary output stream. The primary output stream is identified by the <strong>{{MF_TOPONODE_PRIMARYOUTPUT}}</strong> attribute.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + <dd> <p>The identifier of the stream to query. This parameter is interpreted as follows:</p> <ul> <li>Transform nodes: The value is the zero-based index of the input or output stream.</li> <li>All other node types: The value must be zero.</li> </ul> </dd> + + + <dd> <p><strong>If {{TRUE}}</strong>, the function gets an output type<strong>. If {{FALSE}}</strong>, the function gets an input type. This parameter is interpreted as follows:</p> <ul> <li>Output nodes: The value must be <strong>{{TRUE}}</strong>.</li> <li>Source nodes: The value must be <strong>{{FALSE}}</strong>.</li> <li>Tee nodes: The value is ignored.</li> <li>Transform nodes: If the value is <strong>{{TRUE}}</strong>, the <em>dwStreamIndex</em> parameter is the index for an output stream. Otherwise, <em>dwStreamIndex</em> is the index for an input stream.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries an object for a specified service interface.</p><p>This function is a helper function that wraps the <strong>{{IMFGetService::GetService}}</strong> method. The function queries the object for the <strong>{{IMFGetService}}</strong> interface and, if successful, calls <strong>GetService</strong> on the object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p> The service requested cannot be found in the object represented by <em>punkObject</em>. </p> </td></tr> </table><p>?</p> + + + + <p> Returns the system time. </p> + <p> Returns the system time, in 100-nanosecond units. </p> + + + + <p>Creates the presentation clock. The presentation clock is used to schedule the time at which samples are rendered and to synchronize multiple streams. +</p> + <p>The caller must shut down the presentation clock by calling <strong>{{IMFShutdown::Shutdown}}</strong> on the clock.</p><p>Typically applications do not create the presentation clock. The Media Session automatically creates the presentation clock. To get a reference to the presentation clock from the Media Session, call <strong>{{IMFMediaSession::GetClock}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a presentation time source that is based on the system time.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IMFPresentationTimeSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor.</p> + <p> If you are writing a custom media source, you can use this function to create the source presentation descriptor. The presentation descriptor is created with no streams selected. Generally, a media source should select at least one stream by default. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of elements in the <em>apStreamDescriptors</em> array.</p> </dd> + + + <dd> <p>Array of <strong>{{IMFStreamDescriptor}}</strong> interface references. Each reference represents a stream descriptor for one stream in the presentation.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Queries whether a media presentation requires the Protected Media Path ({{PMP}}).</p> + <p>If this function returns <strong>{{S_OK}}</strong>, it means the {{PMP}} is required for this presentation. Call <strong>{{MFCreatePMPMediaSession}}</strong> to create the {{PMP}} session object.</p><p>If the function returns <strong>{{S_FALSE}}</strong>, you can use the unprotected pipeline. Call <strong>{{MFCreateMediaSession}}</strong> to create the regular Media Session object.</p><p>Internally, this function checks whether any of the stream descriptors in the presentation have the <strong>{{MF_SD_PROTECTED}}</strong> attribute with the value <strong>{{TRUE}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>This presentation requires a protected environment.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{S_FALSE}}</strong></strong></dt> </dl> </td><td> <p>This presentation does not require a protected environment.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of a presentation descriptor. The presentation descriptor is created by the media source, and describes the presentation.</p> </dd> + + + + + <p> </p><p>Serializes a presentation descriptor to a byte array.</p> + <p>To deserialize the presentation descriptor, pass the byte array to the <strong>{{MFDeserializePresentationDescriptor}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor to serialize.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to an array of bytes containing the serialized presentation descriptor. The caller must free the memory for the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> </p><p>Deserializes a presentation descriptor from a byte array.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the <em>pbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Pointer to an array of bytes that contains the serialized presentation descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Creates a stream descriptor. </p> + <p> If you are writing a custom media source, you can use this function to create stream descriptors for the source. This function automatically creates the stream descriptor media type handler and initializes it with the list of types given in <em>apMediaTypes</em>. The function does not set the current media type on the handler, however. To set the type, call <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Stream identifier. </p> </dd> + + + <dd> <p> Number of elements in the <em>apMediaTypes</em> array. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{IMFMediaType}}</strong> interface references. These references are used to initialize the media type handler for the stream descriptor. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface of the new stream descriptor. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates a media-type handler that supports a single media type at a time.</p> + <p>The media-type handler created by this function supports one media type at a time. Set the media type by calling <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. After the type is set, <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong> always checks against that type.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface of the media-type handler. The caller must release the interface.</p> </dd> + + + + + <p>Shuts down a Media Foundation object and releases all resources associated with the object.</p><p>This function is a helper function that wraps the <strong>{{IMFShutdown::Shutdown}}</strong> method. The function queries the object for the <strong>{{IMFShutdown}}</strong> interface and, if successful, calls <strong>Shutdown</strong> on the object.</p> + <p>This function is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Creates the Streaming Audio Renderer. </p> + <p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFAttributes}}</strong> interface specified in the <em>pAudioAttributes</em> parameter.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the Streaming Audio Renderer.</p> + <p>To create the audio renderer, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference.</p><strong>Note</strong>??To avoid a memory leak, call <strong>{{IMFActivate::ShutdownObject}}</strong> before releasing the final reference to the audio renderer or the audio renderer activate object.?<p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the enhanced video renderer ({{EVR}}) media sink.</p> + <p>To create the {{EVR}}, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><p>To configure the {{EVR}}, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE}}</strong> </td><td>Activation object for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID}}</strong> </td><td>{{CLSID}} for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS}}</strong> </td><td>Flags for creating a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE}}</strong> </td><td>Activation object for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID}}</strong> </td><td>{{CLSID}} for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS}}</strong> </td><td>Flags for creating a custom presenter.</td></tr> </table><p>?</p><p>When <strong>{{IMFActivate::ActivateObject}}</strong> is called, the activation objects sets the video window on the {{EVR}} by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. Passing <strong>{{NULL}}</strong> for the <em>hwndVideo</em> parameter is not an error, but no video will render unless the {{EVR}} has a valid video window.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Handle to the window where the video will be displayed.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the {{EVR}}. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring {{MP4}} files.</p> + <p>The {{MP4}} media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author 3GP files, use the <strong>{{MFCreate3GPMediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring 3GP files.</p> + <p>The 3GP media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author {{MP4}} files, use the <strong>{{MFCreateMPEG4MediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the 3GP file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the 3GP media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the {{MP3}} media sink.</p> + <p> The {{MP3}} media sink takes compressed {{MP3}} +audio samples as input, and writes an {{MP3}} file with {{ID3}} headers as output. The {{MP3}} media sink does not perform {{MP3}} audio encoding. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP3}} file to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{MP3}} media sink.. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the {{AC}}-3 media sink.</p> + <p>The {{AC}}-3 media sink takes compressed {{AC}}-3 audio as input and writes the audio to the byte stream without modification. The primary use for this media sink is to stream {{AC}}-3 audio over a network. The media sink does not perform {{AC}}-3 audio encoding.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{AC}}-3 file to this byte stream. The byte stream must be writable. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{AC}}-3 audio stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_Dolby_AC3}}</strong> or <strong>{{MFAudioFormat_Dolby_DDPlus}}</strong></td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the audio data transport stream ({{ADTS}}) media sink.</p> + <p>The {{ADTS}} media sink converts Advanced Audio Coding ({{AAC}}) audio packets into an {{ADTS}} stream. The primary use for this media sink is to stream {{ADTS}} over a network. The output is not an audio file, but a stream of audio frames with {{ADTS}} headers.</p><p>The media sink can accept raw {{AAC}} frames ({{MF_MT_AAC_PAYLOAD_TYPE}} = 0) or {{ADTS}} packets ({{MF_MT_AAC_PAYLOAD_TYPE}} = 1). If the input is raw {{AAC}}, the media sink inserts an {{ADTS}} header at the start of each audio frame. If the input is {{ADTS}} packets, the media sink passes the packets through to the byte stream, without modification.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{ADTS}} stream to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{ADTS}} stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_AAC}}</strong></td></tr> <tr><td> {{MF_MT_AAC_PAYLOAD_TYPE}} </td><td>0 (raw {{AAC}}) or 1 ({{ADTS}})</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a generic media sink that wraps a multiplexer Microsoft Media Foundation transform ({{MFT}}).</p> + <p>This function attempts to find a multiplexer {{MFT}} that supports an output type with the following definition:</p><ul> <li>Major type: <strong>{{MFMediaType_Stream}}</strong></li> <li>Subtype: <em>guidOutputSubType</em></li> <li>Additional format attributes (optional)</li> </ul><p>To provide a list of additional format attributes:</p><ol> <li>Call <strong>{{MFCreateAttributes}}</strong> to get an <strong>{{IMFAttributes}}</strong> reference.</li> <li>Use the <strong>{{IMFAttributes}}</strong> interface to set the attributes. (See Media Type Attributes.)</li> <li>Pass the <strong>{{IMFAttributes}}</strong> reference in the <em>pOutputAttributes</em> parameter.</li> </ol><p>The multiplexer {{MFT}} must be registered in the <strong>{{MFT_CATEGORY_MULTIPLEXER}}</strong> category.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The subtype {{GUID}} of the output type for the {{MFT}}.</p> </dd> + + + <dd> <p>A list of format attributes for the {{MFT}} output type. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The output from the {{MFT}} is written to this byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring fragmented {{MP4}} files.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an Audio-Video Interleaved ({{AVI}}) Sink.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the byte stream that will be used to write the {{AVI}} file.</p> </dd> + + + <dd> <p>Pointer to the media type of the video input stream</p> </dd> + + + <dd> <p>Pointer to the media type of the audio input stream</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> Interface. The caller must release this interface.</p> </dd> + + + + + <p> Creates an {{WAVE}} archive sink. The {{WAVE}} archive sink takes +audio and writes it to an .wav file. +</p> + + + <dd> <p> Pointer to the byte stream that will be used to write the .wav file.</p> </dd> + + + <dd> <p>Pointer to the audio media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release this interface.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the topology loader.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopoLoader}}</strong> interface of the topology loader. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates an activation object for the sample grabber media sink.</p> + <p>To create the sample grabber sink, call <strong>{{IMFActivate::ActivateObject}}</strong> on the reference received in the <em>ppIActivate</em> parameter.</p><p>Before calling <strong>ActivateObject</strong>, you can configure the sample grabber by setting any of the following attributes on the <em>ppIActivate</em> reference:</p><ul> <li> {{MF_SAMPLEGRABBERSINK_IGNORE_CLOCK}} </li> <li> <strong>{{MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, defining the media type for the sample grabber's input stream. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to complete the creation of the sample grabber. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates the default implementation of the quality manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the quality manager's <strong>{{IMFQualityManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the sequencer source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved. Must be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSequencerSource}}</strong> interface of the sequencer source. The caller must release the interface.</p> </dd> + + + + + <p> Creates a <strong>{{PROPVARIANT}}</strong> that can be used to seek within a sequencer source presentation. </p> + <p> The <strong>{{PROPVARIANT}}</strong> returned in <em>pvarSegmentOffset</em> can be used for the <em>pvarStartPosition</em> parameter in the <strong>{{IMFMediaSession::Start}}</strong> method. Use the time format <strong>{{GUID}} {{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Sequencer element identifier. This value specifies the segment in which to begin playback. The element identifier is returned in the <strong>{{IMFSequencerSource::AppendTopology}}</strong> method. </p> </dd> + + + <dd> <p> Starting position within the segment, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong>. The method fills in the <strong>{{PROPVARIANT}}</strong> with the information needed for performing a seek operation. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Creates a media source that aggregates a collection of media sources. </p> + <p>The aggregated media source is useful for combining streams from separate media sources. For example, you can use it to combine a video capture source and an audio capture source. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <em>pSourceCollection</em> collection does not contain any elements.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCollection}}</strong> interface of the collection object that contains a list of media sources. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the aggregated media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a credential cache object. An application can use this object to implement a custom credential manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredentialCache}}</strong> interface of the new credential cache object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a default proxy locator.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The name of the protocol.</p> <strong>Note</strong>??In this release of Media Foundation, the default proxy locator does not support {{RTSP}}. ? </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains the proxy configuration in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the scheme handler for the network source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the protected media path ({{PMP}}) server object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MFPMPSESSION_CREATION_FLAGS}}</strong> enumeration that specifies how to create the {{PMP}} session.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPMPServer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the remote desktop plug-in object. Use this object if the application is running in a Terminal Services client session.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p>Remote desktop connections are not allowed by the current session policy.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface of the plug-in object. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create named property stores.]</p><p>Creates an empty property store to hold name/value pairs.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{INamedPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sample copier transform.</p> + <p>The sample copier is a Media Foundation transform ({{MFT}}) that copies data from input samples to output samples without modifying the data. The following data is copied from the sample:</p><ul> <li>All Sample Attributes.</li> <li>The time stamp and duration.</li> <li>Sample flags (see <strong>{{IMFSample::SetSampleFlags}}</strong>).</li> <li>The data in the media buffers. If the input sample contains multiple buffers, the data is copied into a single buffer on the output sample.</li> </ul><p>This {{MFT}} is useful in the following situation:</p><ul> <li>One pipeline object, such as a media source, allocates media samples for output.</li> <li>Another pipeline object, such as a media sink, allocates its own media samples for input. For example, the object might require buffers allocated from a special memory pool, such as video memory.</li> </ul><p>The following diagram shows this situation with a media source and a media sink.</p><p></p><p>In order for the media sink to receive data from the media source, the data must be copied into the media samples owned by the media sink. The sample copier can be used for this purpose.</p><p>A specific example of such a media sink is the Enhanced Video Renderer ({{EVR}}). The {{EVR}} allocates samples that contain Direct3D surface buffers, so it cannot receive video samples directly from a media source. Starting in Windows?7, the topology loader automatically handles this case by inserting the sample copier between the media source and the {{EVR}}.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an empty transcode profile object.</p><p>The transcode profile stores configuration settings for the output file. These configuration settings are specified by the caller, and include audio and video stream properties, encoder settings, and container settings. To set these properties, the caller must call the appropriate <strong>{{IMFTranscodeProfile}}</strong> methods.</p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function. The underlying topology builder uses these settings to build the transcode topology.</p> + <p>The <strong>{{MFCreateTranscodeProfile}}</strong> function creates an empty transcode profile. You must configure the transcode profile setting attributes that define the media types and the container properties. Use the following methods to configure the profile:</p><ul> <li> <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetContainerAttributes}}</strong> </li> </ul><p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a partial transcode topology.</p><p>The underlying topology builder creates a partial topology by connecting the required pipeline objects: +source, encoder, and sink. The encoder and the sink are configured according to the settings specified by the caller in the transcode profile. </p><p>To create the transcode profile object, call the <strong>{{MFCreateTranscodeProfile}}</strong> function and set the required attributes by calling the appropriate the <strong>{{IMFTranscodeProfile}}</strong> methods. </p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function, which creates the transcode topology with the appropriate settings. The caller can then set this topology on the Media Session and start the session to begin the encoding process. When the Media Session ends, the transcoded file is generated.</p> + <p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded, and <em>ppTranscodeTopo</em> receives a reference to the transcode topology.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwszOutputFilePath</em> contains invalid characters.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED}}</strong></dt> </dl> </td><td> <p>No streams are selected in the media source.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_CONTAINERTYPE}}</strong></dt> </dl> </td><td> <p>The profile does not contain the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>For one or more streams, cannot find an encoder that accepts the media type given in the profile.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS}}</strong></dt> </dl> </td><td> <p>The profile does not specify a media type for any of the selected streams on the media source.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a topology for transcoding to a byte stream.</p> + <p>This function creates a partial topology that contains the media source, the encoder, and the media sink. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source. The media source provides that source content for transcoding.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The transcoded output will be written to this byte stream.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface of a transcoding profile. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a list of output formats from an audio encoder.</p> + <p>This function assumes the encoder will be used in its default encoding mode, which is typically constant bit-rate ({{CBR}}) encoding. Therefore, the types returned by the function might not work with other modes, such as variable bit-rate ({{VBR}}) encoding.</p><p>Internally, this function works by calling <strong>{{MFTEnumEx}}</strong> to find a matching encoder, and then calling <strong>{{IMFTransform::GetOutputAvailableType}}</strong> to get the encoder's output types.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>Failed to find an encoder that matches the specified configuration settings.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the subtype of the output media. The encoder uses this value as a filter when it is enumerating the available output types. For information about the audio subtypes, see <strong>Audio Subtype {{GUIDs}}</strong>. </p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The attribute store specifies the encoder configuration settings. This parameter can be <strong>{{NULL}}</strong>. The attribute store can hold any of the following attributes.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFT_FIELDOFUSE_UNLOCK_Attribute}}</strong></dt> </dl> </td><td> <p>Set this attribute to unlock an encoder that has field-of-use descriptions.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_ENCODINGPROFILE}}</strong></dt> </dl> </td><td> <p>Specifies a device conformance profile for a Windows Media encoder.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_QUALITYVSSPEED}}</strong></dt> </dl> </td><td> <p>Sets the tradeoff between encoding quality and encoding speed.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object that contains a list of preferred audio media types. The collection contains <strong>{{IMFMediaType}}</strong> references. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates the transcode sink activation object.</p><p>The transcode sink activation object can be used to create any of the following file sinks:</p><ul> <li>3GP file sink</li> <li>{{MP3}} file sink</li> <li>{{MP4}} file sink</li> </ul><p>The transcode sink activation object exposes the <strong>{{IMFTranscodeSinkInfoProvider}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IMFTrackedSample}}</strong> object that tracks the reference counts on a video media sample.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IStream}}</strong> reference.</p> + <p>This function enables applications to pass an <strong>{{IStream}}</strong> object to a Media Foundation {{API}} that takes an <strong>{{IMFByteStream}}</strong> reference.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value.</p> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Returns an <strong>{{IStream}}</strong> reference that wraps a Microsoft Media Foundation byte stream.</p> + <p>This function enables an application to pass a Media Foundation byte stream to an {{API}} that takes an <strong>{{IStream}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IRandomAccessStream}}</strong> object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IRandomAccessStream}}</strong> object that wraps a Microsoft Media Foundation byte stream.</p> + <p>The returned byte stream object exposes the <strong>{{IMFGetService}}</strong> interface. To get the original <strong>{{IMFByteStream}}</strong> reference, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier <strong>{{MF_WRAPPED_OBJECT}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Create an <strong>{{IMFMediaType}}</strong> from properties.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates properties from a <strong>{{IMFMediaType}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enumerates a list of audio or video capture devices.</p> + <p>Each returned <strong>{{IMFActivate}}</strong> reference represents a capture device, and can be used to create a media source for that device. You can also use the <strong>{{IMFActivate}}</strong> reference to query for attributes that describe the device. The following attributes might be set:</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME}} </td><td>The display name of the device.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE}} </td><td>The major type and subtype {{GUIDs}} that describe the device's output format.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} </td><td>The type of capture device (audio or video).</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </td><td>The audio endpoint {{ID}} string. (Audio devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}} </td><td>The device category. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE}} </td><td> Whether a device is a hardware or software device. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </td><td>The symbolic link for the device driver. (Video devices only.)</td></tr> </table><p>?</p><p>To create a media source from an <strong>{{IMFActivate}}</strong> reference, call the <strong>{{IMFActivate::ActivateObject}}</strong> method.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an attribute store that contains search criteria. To create the attribute store, call <strong>{{MFCreateAttributes}}</strong>. Set one or more of the following attributes on the attribute store:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}}</strong></dt> </dl> </td><td> <p>Specifies whether to enumerate audio or video devices. (Required.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}}</strong></dt> </dl> </td><td> <p>For audio capture devices, specifies the device role. (Optional.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}}</strong></dt> </dl> </td><td> <p>For video capture devices, specifies the device category. (Optional.)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives an array of <strong>{{IMFActivate}}</strong> interface references. Each reference represents an activation object for a media source. The function allocates the memory for the array. The caller must release the references in the array and call <strong>CoTaskMemFree</strong> to free the memory for the array.</p> </dd> + + + <dd> <p>Receives the number of elements in the <em>pppSourceActivate</em> array. If no capture devices match the search criteria, this parameter receives the value 0.</p> </dd> + + + + + <p>Creates a media source for a hardware capture device.</p> + <strong>Important</strong>??When the capture device is no longer needed, you must shut down the device by calling <strong>Shutdown</strong> on the <strong>{{IMFMediaSource}}</strong> object you obtained by calling <strong>{{MFCreateDeviceSource}}</strong>. Failure to call <strong>Shutdown</strong> can result in memory links because the system may keep a reference to <strong>{{IMFMediaSource}}</strong> resources until <strong>Shutdown</strong> is called.?<p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IMFMediaSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object that represents a hardware capture device.</p> + <p>This function creates an activation object that can be used to create a media source for a hardware device. To create the media source itself, call <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object that allows content protection systems to perform a handshake with the protected environment.</p> + + + + <p>Loads a dynamic link library that is signed for the protected environment.</p> + <p>A singlemodule load count is maintained on the dynamic link library (as it is with <strong>LoadLibrary</strong>). This load count is freed when the final release is called on the <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + <dd> <p>The name of the dynamic link library to load. This dynamic link library must be signed for the protected environment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSignedLibrary}}</strong> interface for the library.</p> </dd> + + + + + <p>Returns an <strong>{{IMFSystemId}}</strong> object for retrieving system id data.</p> + + + + <p>Gets the local system {{ID}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p> + + + <dd> <p>Application-specific verifier value.</p> </dd> + + + <dd> <p>Length in bytes of verifier.</p> </dd> + + + <dd> <p>Returned {{ID}} string. This value must be freed by the caller by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentProtectionDevice}}</strong> interface for the specified media protection system.</p> + + + + <p>Checks whether a hardware security processor is supported for the specified media protection system.</p> + + + <dd> <p>The identifier of the protection system that you want to check.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the hardware security processor is supported for the specified protection system; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentDecryptorContext}}</strong> interface for the specified media protection system. </p> + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Creates an instance of the <strong>{{IMFSensorStream}}</strong> interface.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{IMFSensorGroup}}</strong> is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{LPCWSTR}}</strong> is null.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Used to determinine whether the adapter supports creating heaps from existing system memory. Such heaps are not intended for general use, but are exceptionally useful for diagnostic purposes because they are guaranteed to persist even after the adapter faults or experiences a device-removal event. Persistence is not guaranteed for heaps returned by CreateHeap or CreateCommittedResource, even when the heap resides in system memory.</p> + <p>For a variety of performance and compatibility reasons, applications should not make use of this feature except for diagnostic purposes. In particular, heaps created using this feature only support system-memory heaps with cross-adapter properties, which precludes many optimization opportunities that typical application scenarios could otherwise take advantage of.</p> + + + <dd> <p>True if the adapter can create a heap from existing system memory. Otherwise, false.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains flags that indicate the status of the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + <p>Contains flags for the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + + + + + + + + + + <p>Contains statistics about the performance of the sink writer.</p> + + + <dd> <p>The size of the structure, in bytes.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the sink writer. The sink writer updates this value each time the application calls <strong>{{IMFSinkWriter::WriteSample}}</strong>.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample to be encoded. The sink writer updates this value whenever it calls <strong>{{IMFTransform::ProcessOutput}}</strong> on the encoder.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the media sink. The sink writer updates this value whenever it calls <strong>{{IMFStreamSink::ProcessSample}}</strong> on the media sink.</p> </dd> + + + <dd> <p>The time stamp of the most recent stream tick. The sink writer updates this value whenever the application calls <strong>{{IMFSinkWriter::SendStreamTick}}</strong>.</p> </dd> + + + <dd> <p>The system time of the most recent sample request from the media sink. The sink writer updates this value whenever it receives an {{MEStreamSinkRequestSample}} event from the media sink. The value is the current system time.</p> </dd> + + + <dd> <p>The number of samples received.</p> </dd> + + + <dd> <p>The number of samples encoded.</p> </dd> + + + <dd> <p>The number of samples given to the media sink.</p> </dd> + + + <dd> <p>The number of stream ticks received.</p> </dd> + + + <dd> <p>The amount of data, in bytes, currently waiting to be processed. </p> </dd> + + + <dd> <p>The total amount of data, in bytes, that has been sent to the media sink.</p> </dd> + + + <dd> <p>The number of pending sample requests.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink.</p> </dd> + + + + + <p>Creates an instance of either the sink writer or the source reader.</p> + <p>To get a reference to this interface, call the <strong>CoCreateInstance</strong> function. The {{CLSID}} is <strong>{{CLSID_MFReadWriteClassFactory}}</strong>. Call the <strong>{{MFStartup}}</strong> function before using the interface.</p><p>As an alternative to using this interface, you can call any of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Internally, these functions use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Creates an instance of the sink writer or source reader, given a {{URL}}.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A null-terminated string that contains a {{URL}}. If <em>clsid</em> is {{CLSID_}}<strong>{{MFSinkWriter}}</strong>, the {{URL}} specifies the name of the output file. The sink writer creates a new file with this name. If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, the {{URL}} specifies the input file for the source reader.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sink writer or source reader, given an <strong>{{IUnknown}}</strong> reference. </p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object that is used to initialize the source reader or sink writer. The method queries this reference for one of the following interfaces.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IMFByteStream}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a byte stream. </p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>, the sink writer writes data to this byte stream.</p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, this byte stream provides the source data for the source reader.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSink}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media sink. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSource}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media source. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Implemented by the Microsoft Media Foundation source reader object.</p> + <p>To create the source reader, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSourceReaderEx}}</strong>.</p> + + + + <p>Queries whether a stream is selected.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the stream is selected and will generate data. Receives <strong>{{FALSE}}</strong> if the stream is not selected and will not generate data.</p> </dd> + + + + + <p>Selects or deselects one or more streams.</p> + <p>There are two common uses for this method:</p><ul> <li>To change the default stream selection. Some media files contain multiple streams of the same type. For example, a file might include audio streams for multiple languages. You can use this method to change which of the streams is selected. To get information about each stream, call <strong>{{IMFSourceReader::GetPresentationAttribute}}</strong> or <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If you will not need data from one of the streams, it is a good idea to deselect that stream. If the stream is selected, the media source might hold onto a queue of unread data, and the queue might grow indefinitely, consuming memory. </li> </ul><p>For an example of deselecting a stream, see Tutorial: Decoding Audio.</p><p>If a stream is deselected, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong> for that stream. Other <strong>{{IMFSourceReader}}</strong> methods are valid for deselected streams.</p><p>Stream selection does not affect how the source reader loads or unloads decoders in memory. In particular, deselecting a stream does not force the source reader to unload the decoder for that stream.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to select streams or <strong>{{FALSE}}</strong> to deselect streams. If a stream is deselected, it will not generate data.</p> </dd> + + + + + <p>Gets a format that is supported natively by the media source.</p> + <p>This method queries the underlying media source for its native output format. Potentially, each source stream can produce more than one output format. Use the <em>dwMediaTypeIndex</em> parameter to loop through the available formats. Generally, file sources offer just one format per stream, but capture devices might offer several formats.</p><p> The method returns a copy of the media type, so it is safe to modify the object received in the <em> ppMediaType</em> parameter.</p><p>To set the output type for a stream, call the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_MORE_TYPES}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the current media type for a stream.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets the media type for a stream.</p><p>This media type defines that format that the Source Reader produces as output. It can differ from the native format provided by the media source. See Remarks for more information.</p> + <p>For each stream, you can set the media type to any of the following:</p><ul> <li>One of the native types offered by the media source. To enumerate the native types, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If the native media type is compressed, you can specify a corresponding uncompressed format. The Source Reader will search for a decoder that can decode from the native format to the specified uncompressed format.</li> </ul><p>Audio resampling support was added to the source reader with Windows?8. In versions of Windows prior to Windows?8, the source reader does not support audio resampling. If you need to resample the audio in versions of Windows earlier than Windows?8, you can use the <strong>Audio Resampler {{DSP}}</strong>.</p><p>If you set the {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attribute to <strong>{{TRUE}}</strong> when you create the Source Reader, the Source Reader will convert {{YUV}} video to {{RGB}}-32. This conversion is not optimized for real-time video playback.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>At least one decoder was found for the native stream type, but the type specified by <em>pMediaType</em> was rejected.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find a decoder for the native stream type.</p> </td></tr> </table><p>?</p> + + + + <p>Seeks to a new position in the media source.</p> + <p>The <strong>SetCurrentPosition</strong> method does not guarantee exact seeking. The accuracy of the seek depends on the media content. If the media content contains a video stream, the <strong>SetCurrentPosition</strong> method typically seeks to the nearest key frame before the desired position. The distance between key frames depends on several factors, including the encoder implementation, the video content, and the particular encoding settings used to encode the content. The distance between key frame can vary within a single video file (for example, depending on scene complexity).</p><p>After seeking, the application should call <strong>{{IMFSourceReader::ReadSample}}</strong> and advance to the desired position. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that specifies the <em>time format</em>. The time format defines the units for the <em>varPosition</em> parameter. The following value is defined for all media sources:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>100-nanosecond units.</p> </td></tr> </table> <p>?</p> <p>Some media sources might support additional values. </p> </dd> + + + <dd> <p>The position from which playback will be started. The units are specified by the <em>guidTimeFormat</em> parameter. If the <em>guidTimeFormat</em> parameter is <strong>{{GUID_NULL}}</strong>, set the variant type to <strong>{{VT_I8}}</strong>.</p> </dd> + + + + + <p>Reads the next sample from the media source.</p> + <p>If the requested stream is not selected, the return code is <strong>{{MF_E_INVALIDREQUEST}}</strong>. See <strong>{{IMFSourceReader::SetStreamSelection}}</strong>.</p><p> This method can complete synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOTACCEPTING}}</strong></strong></dt> </dl> </td><td> <p>A flush operation is pending. See <strong>{{IMFSourceReader::Flush}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to pull data from. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ANY_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>Get the next available sample, regardless of which stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_CONTROL_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the time stamp of the sample, or the time of the stream event indicated in <em>pdwStreamFlags</em>. The time is given in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface or the value <strong>{{NULL}}</strong> (see Remarks). If this parameter receives a non-<strong>{{NULL}}</strong> reference, the caller must release the interface.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>The <strong>Flush</strong> method discards all queued samples and cancels all pending sample requests.</p><p>This method can complete either synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about the setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p><p>In synchronous mode, the method blocks until the operation is complete.</p><p>In asynchronous mode, the application's <strong>{{IMFSourceReaderCallback::OnFlush}}</strong> method is called when the flush operation completes. While a flush operation is pending, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_NOTACCEPTING}}</strong>.</p><strong>Note</strong>??In Windows?7, there was a bug in the implementation of this method, which causes <strong>OnFlush</strong> to be called before the flush operation completes. A hotfix is available that fixes this bug. For more information, see http://support.microsoft.com/kb/979567.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to flush. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Queries the underlying media source or decoder for an interface.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. If the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, the method queries the media source. Otherwise, it queries the decoder that is associated with the specified stream. The following values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A service identifier {{GUID}}. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls the <strong>{{IMFGetService::GetService}}</strong> method. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute from the underlying media source.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A {{GUID}} that identifies the attribute to retrieve. If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, <em>guidAttribute</em> can specify one of the following:</p> <ul> <li>A presentation descriptor attribute. For a list of values, see Presentation Descriptor Attributes.</li> <li> {{MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS}}. Use this value to get characteristics flags from the media source.</li> </ul> <p>Otherwise, if the <em>dwStreamIndex</em> parameter specifies a stream, <em>guidAttribute</em> specifies a stream descriptor attribute. For a list of values, see Stream Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value of the attribute. Call the <strong>PropVariantClear</strong> function to free the <strong>{{PROPVARIANT}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IMFSourceReader}}</strong> interface.</p><p>The Source Reader implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Source Reader.</p> + + + + <p>Sets the native media type for a stream on the media source.</p> + <p>This method sets the output type that is produced by the media source. Unlike the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method, this method does not insert any decoders, video processors, or other transforms. The media source must support the specified media type natively. To get a list of supported types from the media source, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>This method can trigger a change in the output format for the stream. If so, the <strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong> flag is returned in the <em>pdwStreamFlags</em> parameter. The method might also cause the Source Reader to remove any effects that were added by the <strong>{{IMFSourceReaderEx::AddTransformForStream}}</strong> method. If this occurs, the <strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong> flag is returned in <em>pdwStreamFlags</em>. </p><p>This method is useful with audio and video capture devices, because a device might support several output formats. This method enables the application to choose the device format before decoders and other transforms are added.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd></dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong></dt> </dl> </td><td> <p>All effects were removed from the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong></dt> </dl> </td><td> <p>The current output type changed.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Adds a transform, such as an audio or video effect, to a stream.</p> + <p>This method attempts to add the transform at the end of the current processing chain. </p><p>To use this method, make the following sequence of calls:</p><ol> <li>Call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> to set the output type that you want for the stream. In this step, you can specify a media type that contains only the major type and subtype {{GUIDs}}. For example, to get 32-bit {{RGB}} output, set a major type of <strong>{{MFMediaType_Video}}</strong> and a subtype of <strong>{{MFVideoFormat_RGB32}}</strong>. (For more information, see Media Type {{GUIDs}}.)</li> <li>Call <strong>AddTransformForStream</strong>. If the Source Reader successfully connects the transform, it sets the output type on the transform.</li> <li>Call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong> to get the output type from the transform. This method returns a media type with a complete format description.</li> <li>Optionally, if you want to modify the output type, call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> again to set a complete media type on the transform.</li> </ol><p>The <strong>AddTransformForStream</strong> method will not insert a decoder into the processing chain. If the native stream format is encoded, and the transform requires an uncompressed format, call <strong>SetCurrentMediaType</strong> to set the uncompressed format (step 1 in the previous list). However, the method will insert a video processor to convert between {{RGB}} and {{YUV}} formats, if required.</p><p>The method fails if the source reader was configured with the {{MF_READWRITE_DISABLE_CONVERTERS}} or {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attributes. </p><p>In asynchronous mode, the method also fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>You can add a transform at any time during streaming. However, the method does not flush or drain the pipeline before inserting the transform. Therefore, if data is already in the pipeline, the next sample is not guaranteed to have the transform applied.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The transform does not support the current stream format, and no conversion was possible. See Remarks for more information.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to configure. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following:</p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes all of the Media Foundation transforms ({{MFTs}}) for a specified stream, with the exception of the decoder.</p> + <p>Calling this method can reset the current output type for the stream. To get the new output type, call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream for which to remove the {{MFTs}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>You can use this method to configure an {{MFT}} after it is inserted into the processing chain. Do not use the reference returned in <em>ppTransform</em> to set media types on the {{MFT}} or to process data. In particular, calling any of the following <strong>{{IMFTransform}}</strong> methods could have unexpected results.</p><ul> <li> <strong>AddInputStreams</strong> </li> <li> <strong>DeleteInputStream</strong> </li> <li> <strong>ProcessEvent</strong> </li> <li> <strong>ProcessInput</strong> </li> <li> <strong>ProcessMessage</strong> </li> <li> <strong>ProcessOutput</strong> </li> <li> <strong>SetInputType</strong> </li> <li> <strong>SetOutputType</strong> </li> </ul><p>If a decoder is present, it appears at index position zero.</p><p>To avoid losing any data, you should drain the source reader before calling this method. For more information, see Draining the Data Pipeline.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>dwTransformIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query for the {{MFT}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation source reader.</p> + <p>Use the {{MF_SOURCE_READER_ASYNC_CALLBACK}} attribute to set the callback reference when you first create the source reader object.</p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>If you do not specify a callback reference, the source reader operates synchronously.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::ReadSample}}</strong> method completes.</p> + <p>The <em>pSample</em> parameter might be <strong>{{NULL}}</strong>. For example, when the source reader reaches the end of a stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_ENDOFSTREAM}}</strong> flag, and <em>pSample</em> is <strong>{{NULL}}</strong>. </p><p>If there is a gap in the stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_STREAMTICK}}</strong> flag, <em>pSample</em> is <strong>{{NULL}}</strong>, and <em>llTimestamp</em> indicates the time when the gap occurred. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::Flush}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the source reader receives certain events from the media source.</p> + <p>In the current implementation, the source reader uses this method to forward the following events to the application:</p><ul> <li> {{MEBufferingStarted}} </li> <li> {{MEBufferingStopped}} </li> <li> {{MEConnectEnd}} </li> <li> {{MEConnectStart}} </li> <li> {{MEExtendedType}} </li> <li> {{MESourceCharacteristicsChanged}} </li> <li> {{MESourceMetadataChanged}} </li> </ul><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + <dd> <p>For stream events, the value is the zero-based index of the stream that sent the event. For source events, the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface of the event.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSourceReaderCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSourceReader}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSourceReader}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + <p>Adds a stream to the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. This media type specifies the format of the samples that will be written to the file. It does not need to match the input format. To set the input format, call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong>.</p> </dd> + + + <dd> <p>Receives the zero-based index of the new stream.</p> </dd> + + + + + <p>Sets the input format for a stream on the sink writer.</p> + <p>The input format does not have to match the target format that is written to the media sink. If the formats do not match, the method attempts to load an encoder that can encode from the input format to the target format.</p><p>After streaming begins?that is, after the first call to <strong>{{IMFSinkWriter::WriteSample}}</strong>?you can call this method at any time to change the input format. However, the underlying encoder and media sink must support dynamic format changes.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>The underlying media sink does not support the format, no conversion is possible, or a dynamic format change is not possible.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find an encoder for the encoded format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream. The index is received by the <em>pdwStreamIndex</em> parameter of the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. The media type specifies the input format.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. Use the attribute store to configure the encoder. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Initializes the sink writer for writing.</p> + <p>Call this method after you configure the input streams and before you send any data to the sink writer. </p><p>You must call <strong>BeginWriting</strong> before calling any of the following methods:</p><ul> <li> <strong>{{IMFSinkWriter::Finalize}}</strong> </li> <li> <strong>{{IMFSinkWriter::Flush}}</strong> </li> <li> <strong>{{IMFSinkWriter::NotifyEndOfSegment}}</strong> </li> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>The underlying media sink must have at least one input stream. Otherwise, <strong>BeginWriting</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. To add input streams, call the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p><p>If <strong>BeginWriting</strong> succeeds, any further calls to <strong>BeginWriting</strong> return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + + <p>Delivers a sample to the sink writer.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>By default, the sink writer limits the rate of incoming data by blocking the calling thread inside the <strong>WriteSample</strong> method. This prevents the application from delivering samples too quickly. To disable this behavior, set the {{MF_SINK_WRITER_DISABLE_THROTTLING}} attribute when you create the sink writer.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream for this sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + + + <p>Indicates a gap in an input stream.</p> + <p>For video, call this method once for each missing frame. For audio, call this method at least once per second during a gap in the audio. Set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute on the first media sample after the gap.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>The position in the stream where the gap in the data occurs. The value is given in 100-nanosecond units, relative to the start of the stream.</p> </dd> + + + + + <p>Places a marker in the specified stream.</p> + <p>To use this method, you must provide an asynchronous callback when you create the sink writer. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}.</p><p>Markers provide a way to be notified when the media sink consumes all of the samples in a stream up to a certain point. The media sink does not process the marker until it has processed all of the samples that came before the marker. When the media sink processes the marker, the sink writer calls the application's <strong>OnMarker</strong> method. When the callback is invoked, you know that the sink has consumed all of the previous samples for that stream.</p><p>For example, to change the format midstream, call <strong>PlaceMarker</strong> at the point where the format changes. When <strong>OnMarker</strong> is called, it is safe to call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong> to change the input type (assuming that the media sink supports dynamic format changes).</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p> </p><strong>Note</strong>??The <em>pvContext</em> parameter of the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method is not passed to the <em>pvarContextValue</em> parameter of the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. These two parameters are not directly related.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Pointer to an application-defined value. The value of this parameter is returned to the caller in the <em>pvContext</em> parameter of the caller's <strong>{{IMFSinkWriterCallback::OnMarker}}</strong> callback method. The application is responsible for any memory allocation associated with this data. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Notifies the media sink that a stream has reached the end of a segment.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink for the specified streams. For more information, see <strong>{{IMFStreamSink::PlaceMarker}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to signal that all streams have reached the end of a segment.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>For each stream that is flushed, the sink writer drops all pending samples, flushes the encoder, and sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to flush, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to flush all of the streams.</p> </dd> + + + + + <p>Completes all writing operations on the sink writer.</p> + <p>Call this method after you send all of the input samples to the sink writer. The method performs any operations needed to create the final output from the media sink.</p><p>If you provide a callback interface when you create the sink writer, this method completes asynchronously. When the operation completes, the <strong>{{IMFSinkWriterCallback::OnFinalize}}</strong> method of your callback is called. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}. Otherwise, if you do not provide a callback, the <strong>Finalize</strong> method blocks until the operation completes.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> to place end-of-segment markers for each stream on the media sink. It also calls <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> and <strong>EndFinalize</strong> if the media sink supports the <strong>{{IMFFinalizableMediaSink}}</strong> interface.</p><p>After this method is called, the following methods will fail:</p><ul> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>If you do not call <strong>Finalize</strong>, the output from the media sink might be incomplete or invalid. For example, required file headers might be missing from the output file.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries the underlying media sink or encoder for an interface.</p> + <p>If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong>, the method attempts to get the interface from the media sink. Otherwise, it attempts to get the interface from the encoder for the stream at the specified index. If that fails, or if no encoder is present, the method attempts to get the interface from the stream on the media sink.</p><p> If the input and output types of the sink are identical and compressed, it's possible that no encoding is required and the video encoder will not be instantiated. In that case, <strong>GetServiceForStream</strong> will return {{MF_E_UNSUPPORTED_SERVICE}}. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A service identifier {{GUID}}, or <strong>{{GUID_NULL}}</strong>. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls <strong>{{IMFGetService::GetService}}</strong>. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets statistics about the performance of the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}} </strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MF_SINK_WRITER_STATISTICS}}</strong> structure. Before calling the method, set the <strong>cb</strong> member to the size of the structure in bytes. The method fills the structure with statistics from the sink writer.</p> </dd> + + + + + <p>Extends the <strong>{{IMFSinkWriter}}</strong> interface.</p><p>The Sink Writer implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Sink Writer.</p> + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream.</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a reference to a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Provides additional functionality on the sink writer for dynamically changing the media type and encoder configuration. </p> + <p>The Sink Writer implements this interface in Windows?8.1. To get a reference to this interface, call <strong>QueryInterface</strong> on the <strong>{{IMFSinkWriter}}</strong>.</p> + + + + <p>Dynamically changes the target media type that Sink Writer is encoding to. </p> + <p>The new media type must be supported by the media sink being used and by the encoder {{MFTs}} installed on the system. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>The new media format to encode to.</p> </dd> + + + <dd> <p>The new set of encoding parameters to configure the encoder with. If not specified, previously provided parameters will be used. +</p> </dd> + + + + + <p>Dynamically updates the encoder configuration with a collection of new encoder settings.</p> + <p>The encoder will be configured with these settings after all previously queued input media samples have been sent to it through <strong>{{IMFTransform::ProcessInput}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>A set of encoding parameters to configure the encoder with. </p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation sink writer. </p> + <p>Set the callback reference by setting the {{MF_SINK_WRITER_ASYNC_CALLBACK}} attribute when you first create the sink writer. </p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::Finalize}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSinkWriterCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSinkWriter}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSinkWriter}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Creates the source reader from a {{URL}}.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong> method to create a media source from the {{URL}}. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of a media file to open.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This byte stream will provide the source data for the source reader.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a media source.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>By default, when the application releases the source reader, the source reader shuts down the media source by calling <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source. At that point, the application can no longer use the media source.</p><p>To change this default behavior, set the {{MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN}} attribute in the <em>pAttributes</em> parameter. If this attribute is <strong>{{TRUE}}</strong>, the application is responsible for shutting down the media source.</p><p>When using the Source Reader, do not call any of the following methods on the media source:</p><ul> <li> <strong>{{IMFMediaSource::Pause}}</strong> </li> <li> <strong>{{IMFMediaSource::Start}}</strong> </li> <li> <strong>{{IMFMediaSource::Stop}}</strong> </li> <li>All <strong>{{IMFMediaEventGenerator}}</strong> methods</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The source contains protected content.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a {{URL}} or byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>The first three parameters to this function can be <strong>{{NULL}}</strong>; however, only certain combinations are valid:</p><p> </p><table> <tr><th>Description</th><th><em>pwszOutputURL</em></th><th><em>pByteStream</em></th><th><em>pAttributes</em></th></tr> <tr><td>Specify a byte stream, with no {{URL}}.</td><td><strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Required (must not be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify a {{URL}}, with no byte stream.</td><td>not <strong>{{NULL}}</strong></td><td><strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify both a {{URL}} and a byte stream.</td><td>non-<strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> </table><p>?</p><p>The <em>pAttributes</em> parameter is required in the first case and optional in the others.</p><ul> <li>Case 1: Specify a byte stream without a {{URL}}. The <em>pAttributes</em> parameter must point to an attribute store that contains the {{MF_TRANSCODE_CONTAINERTYPE}} attribute. The sink writer uses the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to determine the type of file container to write, such as {{ASF}} or {{MP4}}.</li> <li>Case 2: Specify a {{URL}} without a byte stream. The sink writer creates a new file named <em>pwszOutputURL</em>. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, if the {{MF_TRANSCODE_CONTAINERTYPE}} attribute is absent or <em>pAttributes</em> is <strong>{{NULL}}</strong>, the sink writer uses the file name extension to select the container type; for example, ".asf" for an {{ASF}} file.</li> <li>Case 3: Specify both a {{URL}} and a byte stream. The sink writer writes to the byte stream. The {{URL}} provided in <em>pwszOutputURL</em> is informational only; the sink writer does not create a new file. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, the sink writer uses the file name extension to select the container type. The {{MF_TRANSCODE_CONTAINERTYPE}} attribute overrides the {{URL}} file name extension in this case.</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified {{URL}} was not found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If this parameter is a valid reference, the sink writer writes to the provided byte stream. (The byte stream must be writable.) Otherwise, if <em>pByteStream</em> is <strong>{{NULL}}</strong>, the sink writer creates a new file named <em>pwszOutputURL</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a media sink.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>When you are done using the media sink, call the media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method. (The sink writer does not shut down the media sink.) Release the sink writer before calling <strong>Shutdown</strong> on the media sink.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaSink}}</strong> interface of a media sink. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Defines the data type for a key/value pair.</p> + + + <dd> <p>Unsigned 32-bit integer.</p> </dd> + + + <dd> <p>Unsigned 64-bit integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p><strong>{{GUID}}</strong> value.</p> </dd> + + + <dd> <p>{{NULL}}-terminated wide-character string.</p> </dd> + + + <dd> <p>Byte array.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference.</p> </dd> + + + + + <p> </p><p>Specifies how to compare the attributes on two objects.</p> + + + <dd> <p>Check whether all the attributes in <em>pThis</em> exist in <em>pTheirs</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether all the attributes in <em>pTheirs</em> exist in <em>pThis</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether both objects have identical attributes with the same data.</p> </dd> + + + <dd> <p>Check whether the attributes that exist in both objects have the same data.</p> </dd> + + + <dd> <p>Find the object with the fewest number of attributes, and check if those attributes exist in the other object and have the same data.</p> </dd> + + + + + <p> </p><p>Defines flags for serializing and deserializing attribute stores.</p> + + + <dd> <p>If this flag is set, <strong>{{IUnknown}}</strong> references in the attribute store are marshaled to and from the stream. If this flag is absent, <strong>{{IUnknown}}</strong> references in the attribute store are not marshaled or serialized.</p> </dd> + + + + + <p>Contains flags for the <strong>{{IMF2DBuffer2::Lock2DSize}}</strong> method.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Specifies the conversion function from linear {{RGB}} to non-linear {{RGB}} (R'G'B'). </p> + <p> These flags are used with the <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferFunction}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown. Treat as {{MFVideoTransFunc_709}}. </p> </dd> + + + <dd> <p> Linear {{RGB}} (gamma = 1.0). </p> </dd> + + + <dd> <p> True 1.8 gamma, L' = L^1/1.8. </p> </dd> + + + <dd> <p> True 2.0 gamma, L' = L^1/2.0. </p> </dd> + + + <dd> <p> True 2.2 gamma, L' = L^1/2.2. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709 transfer function. Gamma 2.2 curve with a linear segment in the lower range. This transfer function is used in {{BT}}.709, {{BT}}.601, {{SMPTE}} 296M, {{SMPTE}} 170M, {{BT}}.470, and {{SPMTE}} 274M. In addition {{BT}}-1361 uses this function within the range [0...1]. </p> </dd> + + + <dd> <p> {{SPMTE}} 240M transfer function. Gamma 2.2 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> sRGB transfer function. Gamma 2.4 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> True 2.8 gamma. L' = L^1/2.8. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System B, G ({{PAL}}). </p> </dd> + + + <dd> <p>Logarithmic transfer (100:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Logarithmic transfer (316.22777:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Symmetric {{ITU}}-R {{BT}}.709.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p>Specifies the color primaries of a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoPrimaries}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p> The color primaries are unknown. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709. Also used for sRGB and scRGB. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System B,G ({{NTSC}}). </p> </dd> + + + <dd> <p> {{SMPTE}} 170M. </p> </dd> + + + <dd> <p> {{SMPTE}} 240M. </p> </dd> + + + <dd> <p> {{EBU}} 3213. </p> </dd> + + + <dd> <p> {{SMPTE}} C ({{SMPTE}} {{RP}} 145). </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> </p><p>Describes the optimal lighting for viewing a particular set of video content.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> attribute.</p> + + + <dd> <p>The optimal lighting is unknown.</p> </dd> + + + <dd> <p>Bright lighting; for example, outdoors.</p> </dd> + + + <dd> <p>Medium brightness; for example, normal office lighting.</p> </dd> + + + <dd> <p>Dim; for example, a living room with a television and additional low lighting.</p> </dd> + + + <dd> <p>Dark; for example, a movie theater.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Describes the conversion matrices between Y'PbPr (component video) and studio R'G'B'.</p> + <p>This enumeration is used with the <strong>{{MF_MT_YUV_MATRIX}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferMatrix}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown transfer matrix. Treat as {{MFVideoTransferMatrix_BT709}}.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.709 transfer matrix.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.601 transfer matrix. Also used for {{SMPTE}} 170 and {{ITU}}-R {{BT}}.470-2 System B,G.</p> </dd> + + + <dd> <p>{{SMPTE}} 240M transfer matrix.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Contains flags that define the chroma encoding scheme for Y'Cb'Cr' data.</p> + <p>These flags are used with the <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoChromaSubSampling}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown encoding scheme.</p> </dd> + + + <dd> <p>Chroma should be reconstructed as if the underlying video was progressive content, rather than skipping fields or applying chroma filtering to minimize artifacts from reconstructing 4:2:0 interlaced chroma.</p> </dd> + + + <dd> <p>Chroma samples are aligned horizontally with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel to the right of the corresponding luma sample.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel down from the corresponding luma sample.</p> </dd> + + + <dd> <p>The U and V planes are aligned vertically. If this flag is not set, the chroma planes are assumed to be out of phase by 1/2 chroma sample, alternating between a line of U followed by a line of V.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-2 video. Chroma samples are aligned horizontally with the luma samples, but are not aligned vertically. The U and V planes are aligned vertically.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-1 video.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{PAL}} {{DV}} video.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically and horizontally with the luma samples. {{YUV}} formats such as 4:4:4, 4:2:2, and 4:1:1 are always cosited in both directions and should use this flag.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p>Specifies whether color data includes headroom and toeroom. Headroom allows for values beyond 1.0 white ("whiter than white"), and toeroom allows for values below reference 0.0 black ("blacker than black"). </p> + <p> This enumeration is used with the <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_NominalRange}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown nominal range. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_0_255}}. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_16_235}}. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [0...255] for 8-bit samples or [0...1023] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [16...235] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0..1] maps to [48...208] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p>The normalized range [0..1] maps to [64...127] for 8-bit samples or [256...508] for 10-bit samples. This range is used in the xRGB color space.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Contains flags that describe a video stream.</p><p>These flags are used in the <strong>{{MFVideoInfo}}</strong> structure, which is part of the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. The following table lists the attributes that correspond to the flags defined in this enumeration.</p><table> <tr><th>Flags</th><th>Media Type Attribute</th></tr> <tr><td> <p>{{MFVideoFlag_PAD_TO_None}}</p> <p>{{MFVideoFlag_PAD_TO_4x3}}</p> <p>{{MFVideoFlag_PAD_TO_16x9}}</p> </td><td> <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint235_1}}</p> </td><td> <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_AnalogProtected}}</p> <p>{{MFVideoFlag_DigitallyProtected}}</p> </td><td> <strong>{{MF_MT_DRM_FLAGS}}</strong> </td></tr> <tr><td>{{MFVideoFlag_PanScanEnabled}}</td><td> <strong>{{MF_MT_PAN_SCAN_ENABLED}}</strong> </td></tr> <tr><td>{{MFVideoFlag_BottomUpLinearRep}}</td><td>Use the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute to specify a negative stride.</td></tr> </table><p>?</p><p>The following flags were defined to describe per-sample interlacing information, but are obsolete:</p><ul> <li> {{MFVideoFlag_ProgressiveContent}} </li> <li> {{MFVideoFlag_FieldRepeatCountMask}} </li> <li> {{MFVideoFlag_FieldRepeatCountShift}} </li> <li> {{MFVideoFlag_ProgressiveSeqReset}} </li> <li> {{MFVideoFlag_LowerFieldFirst}} </li> </ul><p>Instead, components should use sample attributes to describe per-sample interlacing information, as described in the topic Video Interlacing.</p> + + + + <p> </p><p>Contains values that specify common video formats.</p> + + + <dd> <p>Reserved; do not use.</p> </dd> + + + <dd> <p>{{NTSC}} television (720 x 480i).</p> </dd> + + + <dd> <p>{{PAL}} television (720 x 576i).</p> </dd> + + + <dd> <p>{{DVD}}, {{NTSC}} standard (720 x 480).</p> </dd> + + + <dd> <p>{{DVD}}, {{PAL}} standard (720 x 576).</p> </dd> + + + <dd> <p>{{DV}} video, {{PAL}} standard.</p> </dd> + + + <dd> <p>{{DV}} video, {{NTSC}} standard.</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{SD}} (480i).</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} interlaced (1080i)</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} progressive (720p)</p> </dd> + + + + + + + + <p> </p><p>Specifies the origin for a seek request.</p> + + + <dd> <p>The seek position is specified relative to the start of the stream.</p> </dd> + + + <dd> <p>The seek position is specified relative to the current read/write position in the stream.</p> </dd> + + + + + <p> </p><p>Specifies the requested access mode for opening a file.</p> + + + <dd> <p>Read mode.</p> </dd> + + + <dd> <p>Write mode.</p> </dd> + + + <dd> <p>Read and write mode.</p> </dd> + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p> Specifies the behavior when opening a file. </p> + + + <dd> <p> Use the default behavior. </p> </dd> + + + <dd> <p> Open the file with no system caching. </p> </dd> + + + <dd> <p>Subsequent open operations can have write access to the file. </p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Specifies the object type for the <strong>{{IMFPluginControl}}</strong> interface.</p> + + + + <p>Defines policy settings for the <strong>{{IMFPluginControl2::SetPolicy}}</strong> method.</p> + + + + + + + <p>Contains media type information for registering a Media Foundation transform ({{MFT}}). </p> + + + <dd> <p>The major media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>The media subtype. For a list of possible values, see the following topics:</p> <ul> <li> Audio Subtype {{GUIDs}} </li> <li> Video Subtype {{GUIDs}} </li> </ul> </dd> + + + + + <p> </p><p>Represents a ratio.</p> + + + <dd> <p>Numerator of the ratio.</p> </dd> + + + <dd> <p>Denominator of the ratio.</p> </dd> + + + + + <p> Specifies an offset as a fixed-point real number. </p> + <p> The value of the number is <strong>value</strong> + (<strong>fract</strong> / 65536.0f).</p> + + + <dd> <p> The fractional part of the number. </p> </dd> + + + <dd> <p> The integer part of the number. </p> </dd> + + + + + <p> Specifies a rectangular area within a video frame. </p> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the x-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the y-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> A <strong>{{SIZE}}</strong> structure that contains the width and height of the rectangle. </p> </dd> + + + + + <p> </p><p>Contains video format information that applies to both compressed and uncompressed formats.</p><p>This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVideoInfo}}</strong> structure. The following table lists the attributes that correspond to the members of this structure.</p><table> <tr><th>Structure Member</th><th>Media Type Attribute</th></tr> <tr><td><strong>dwWidth</strong>, <strong>dwHeight</strong></td><td> <strong>{{MF_MT_FRAME_SIZE}}</strong> </td></tr> <tr><td><strong>PixelAspectRatio</strong></td><td> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </td></tr> <tr><td><strong>SourceChromaSubsampling</strong></td><td> <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> </td></tr> <tr><td><strong>InterlaceMode</strong></td><td> <strong>{{MF_MT_INTERLACE_MODE}}</strong> </td></tr> <tr><td><strong>TransferFunction</strong></td><td> <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> </td></tr> <tr><td><strong>ColorPrimaries</strong></td><td> <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> </td></tr> <tr><td><strong>TransferMatrix</strong></td><td> <strong>{{MF_MT_YUV_MATRIX}}</strong> </td></tr> <tr><td><strong>SourceLighting</strong></td><td> <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> </td></tr> <tr><td><strong>FramesPerSecond</strong></td><td> <strong>{{MF_MT_FRAME_RATE}}</strong> </td></tr> <tr><td><strong>NominalRange</strong></td><td> <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> </td></tr> <tr><td><strong>GeometricAperture</strong></td><td> <strong>{{MF_MT_GEOMETRIC_APERTURE}}</strong> </td></tr> <tr><td><strong>MinimumDisplayAperture</strong></td><td> <strong>{{MF_MT_MINIMUM_DISPLAY_APERTURE}}</strong> </td></tr> <tr><td><strong>PanScanAperture</strong></td><td> <strong>{{MF_MT_PAN_SCAN_APERTURE}}</strong> </td></tr> <tr><td><strong>VideoFlags</strong></td><td>See <strong>{{MFVideoFlags}}</strong>.</td></tr> </table><p>?</p> + + + + <p> </p><p>Describes a 4:4:4:4 Y'Cb'Cr' sample.</p> + + + <dd> <p>Cr (chroma difference) value.</p> </dd> + + + <dd> <p>Cb (chroma difference) value.</p> </dd> + + + <dd> <p>Y (luma) value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p> </p><p>Describes an {{ARGB}} color value.</p> + + + <dd> <p>Blue value.</p> </dd> + + + <dd> <p>Green value.</p> </dd> + + + <dd> <p>Red value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p>Contains one palette entry in a color table.</p> + <p>This union can be used to represent both {{RGB}} palettes and Y'Cb'Cr' palettes. The video format that defines the palette determines which union member should be used.</p> + + + <dd> <p> <strong>{{MFARGB}}</strong> structure that contains an {{RGB}} color.</p> </dd> + + + <dd> <p> <strong>{{MFAYUVSample}}</strong> structure that contains a Y'Cb'Cr' color.</p> </dd> + + + + + <p> </p><p>Contains information about an uncompressed video format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + + + + <p> </p><p>Contains information about a video compression format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>For uncompressed video formats, set the structure members to zero.</p> + + + + <p> </p><p>Describes a video format.</p> + <p>Applications should avoid using this structure. Instead, it is recommended that applications use attributes to describe the video format. For a list of media type attributes, see Media Type Attributes. With attributes, you can set just the format information that you know, which is easier (and more likely to be accurate) than trying to fill in complete format information for the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><p>To initialize a media type object from an <strong>{{MFVIDEOFORMAT}}</strong> structure, call <strong>{{MFInitMediaTypeFromMFVideoFormat}}</strong>.</p><p>You can use the <strong>{{MFVIDEOFORMAT}}</strong> structure as the format block for a DirectShow media type. Set the format {{GUID}} to {{FORMAT_MFVideoFormat}}.</p> + + + <dd> <p>Size of the structure, in bytes. This value includes the size of the palette entries that may appear after the <strong>surfaceInfo</strong> member.</p> </dd> + + + <dd> <p> <strong>{{MFVideoInfo}}</strong> structure. This structure contains information that applies to both compressed and uncompressed formats.</p> </dd> + + + <dd> <p>Video subtype. See Video Subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> <strong>{{MFVideoCompressedInfo}}</strong> structure. This structure contains information that applies only to compressed formats.</p> </dd> + + + <dd> <p> <strong>{{MFVideoSurfaceInfo}}</strong> structure. This structure contains information that applies only to uncompressed formats.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies which value to retrieve. </p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value, if the value is found. Call <strong>PropVariantClear</strong> to free the memory allocated by this method. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the method searches for the key and returns {{S_OK}} if the key is found, but does not copy the value.</p> </dd> + + + + + <p> </p><p>Retrieves the data type of the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key is not stored in this object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Queries whether a stored attribute value equals to a specified <strong>{{PROPVARIANT}}</strong>.</p> + <p>The method sets <em>pbResult</em> to <strong>{{FALSE}}</strong> for any of the following reasons:</p><ul> <li> <p>No attribute is found whose key matches the one given in <em>guidKey</em>.</p> </li> <li> <p>The attribute's <strong>{{PROPVARIANT}}</strong> type does not match the type given in <em>Value</em>.</p> </li> <li> <p>The attribute value does not match the value given in <em>Value</em>.</p> </li> <li> <p>The method fails.</p> </li> </ul><p>Otherwise, the method sets <em>pbResult</em> to <strong>{{TRUE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p><strong>{{PROPVARIANT}}</strong> that contains the value to compare.</p> </dd> + + + <dd> <p>Receives a Boolean value indicating whether the attribute matches the value given in <em>Value</em>. See Remarks. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Compares the attributes on this object with the attributes on another object.</p> + <p>If <em>pThis</em> is the object whose <strong>Compare</strong> method is called, and <em>pTheirs</em> is the object passed in as the <em>pTheirs</em> parameter, the following comparisons are defined by <em>MatchType</em>.</p><table> <tr><th>Match type</th><th>Returns <strong>{{TRUE}}</strong> if and only if</th></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_OUR_ITEMS}}</strong></td><td>For every attribute in <em>pThis</em>, an attribute with the same key and value exists in <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_THEIR_ITEMS}}</strong></td><td>For every attribute in <em>pTheirs</em>, an attribute with the same key and value exists in <em>pThis</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_ALL_ITEMS}}</strong></td><td>The key/value pairs are identical in both objects.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_INTERSECTION}}</strong></td><td>Take the intersection of the keys in <em>pThis</em> and the keys in <em>pTheirs</em>. The values associated with those keys are identical in both <em>pThis</em> and <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_SMALLER}}</strong></td><td>Take the object with the smallest number of attributes. For every attribute in that object, an attribute with the same key and value exists in the other object.</td></tr> </table><p>?</p><p>The <em>pTheirs</em> and <em>pbResult</em> parameters must not be <strong>{{NULL}}</strong>. If either parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the object to compare with this object.</p> </dd> + + + <dd> <p>Member of the <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong> enumeration, specifying the type of comparison to make.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the two sets of attributes match in the way specified by the <em>MatchType</em> parameter. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT32}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>{{UINT32}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT32}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT32}}</strong> value. If the key is found and the data type is <strong>{{UINT32}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT64}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a <strong>{{UINT64}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT64}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT64}}</strong> value. If the key is found and the data type is <strong>{{UINT64}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>double</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>double</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>double</strong> value. If the key is found and the data type is <strong>double</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_GUID}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} value. If the key is found and the data type is {{GUID}}, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves the length of a string value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives the number of characters in the string, not including the terminating <strong>{{NULL}}</strong> character. To get the string value, call <strong>{{IMFAttributes::GetString}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a wide-character string associated with a key.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedString}}</strong> method, which allocates the buffer to hold the string.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The length of the string is too large to fit in a <strong>{{UINT32}}</strong> value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to hold the string.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a wide-character array allocated by the caller. The array must be large enough to hold the string, including the terminating <strong>{{NULL}}</strong> character. If the key is found and the value is a string type, the method copies the string into this buffer. To find the length of the string, call <strong>{{IMFAttributes::GetStringLength}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pwszValue</em> array, in characters. This value includes the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets a wide-character string associated with a key. This method allocates the memory for the string. </p> + <p>To copy a string value into a caller-allocated buffer, use the <strong>{{IMFAttributes::GetString}}</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><strong>Note</strong>??An earlier version of the documentation incorrectly stated that the <em>pcchLength</em> parameter can be <strong>{{NULL}}</strong>. Setting this parameter to <strong>{{NULL}}</strong> might succeed in some cases, but is not guaranteed. The caller must pass a non-<strong>{{NULL}}</strong> reference for this parameter.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a string. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>. </p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives a copy of the string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + <dd> <p> Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter must not be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves the length of a byte array associated with a key.</p> + <p>To get the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a byte array, this parameter receives the size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves a byte array associated with a key. This method copies the array into a caller-allocated buffer.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedBlob}}</strong> method, which allocates the buffer to hold the byte array.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></strong></dt> </dl> </td><td> <p>The buffer is not large enough to the array.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDTYPE}}</strong></strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer allocated by the caller. If the key is found and the value is a byte array, the method copies the array into this buffer. To find the required size of the buffer, call <strong>{{IMFAttributes::GetBlobSize}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pBuf</em> buffer, in bytes.</p> </dd> + + + <dd> <p>Receives the size of the byte array. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an interface reference associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The attribute value is an <strong>{{IUnknown}}</strong> reference but does not support requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_IUNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds an attribute value with a specified key. </p> + <p> This method checks whether the <strong>{{PROPVARIANT}}</strong> type is one of the attribute types defined in <strong>{{MF_ATTRIBUTE_TYPE}}</strong>, and fails if an unsupported type is used. However, this method does not check whether the <strong>{{PROPVARIANT}}</strong> is the correct type for the specified attribute {{GUID}}. (There is no programmatic way to associate attribute {{GUIDs}} with property types.) For a list of Media Foundation attributes and their data types, see Media Foundation Attributes. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p> Insufficient memory. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> Invalid attribute type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value. </p> </dd> + + + <dd> <p> A <strong>{{PROPVARIANT}}</strong> that contains the attribute value. The method copies the value. The <strong>{{PROPVARIANT}}</strong> type must be one of the types listed in the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + + + <p> </p><p>Removes a key/value pair from the object's attribute list.</p> + <p>If the specified key does not exist, the method returns <strong>{{S_OK}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to delete.</p> </dd> + + + + + <p> </p><p>Removes all key/value pairs from the object's attribute list.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Associates a <strong>{{UINT32}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT32}}</strong> value, call <strong>{{IMFAttributes::GetUINT32}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>{{UINT64}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT64}}</strong> value, call <strong>{{IMFAttributes::GetUINT64}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>double</strong> value with a key.</p> + <p>To retrieve the double value, call <strong>{{IMFAttributes::GetDouble}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a {{GUID}} value with a key.</p> + <p>To retrieve the {{GUID}} value, call <strong>{{IMFAttributes::GetGUID}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a wide-character string with a key.</p> + <p>To retrieve the string, call <strong>{{IMFAttributes::GetString}}</strong> or <strong>{{IMFAttributes::GetAllocatedString}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Null-terminated wide-character string to associate with this key. The method stores a copy of the string.</p> </dd> + + + + + <p> </p><p>Associates a byte array with a key.</p> + <p>To retrieve the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong> or <strong>{{IMFAttributes::GetAllocatedBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Pointer to a byte array to associate with this key. The method stores a copy of the array.</p> </dd> + + + <dd> <p>Size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Associates an <strong>{{IUnknown}}</strong> reference with a key.</p> + <p>To retrieve the <strong>{{IUnknown}}</strong> reference, call <strong>{{IMFAttributes::GetUnknown}}</strong>.</p><p>It is not an error to call <strong>SetUnknown</strong> with <em>pUnknown</em> equal to <strong>{{NULL}}</strong>. However, <strong>GetUnknown</strong> will return <strong>{{MF_E_INVALIDTYPE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference to be associated with this key.</p> </dd> + + + + + <p> </p><p>Locks the attribute store so that no other thread can access it. If the attribute store is already locked by another thread, this method blocks until the other thread unlocks the object. After calling this method, call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the object.</p> + <p>This method can cause a deadlock if a thread that calls <strong>LockStore</strong> waits on a thread that calls any other <strong>{{IMFAttributes}}</strong> methods on the same object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the attribute store after a call to the <strong>{{IMFAttributes::LockStore}}</strong> method. While the object is unlocked, multiple threads can access the object's attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the number of attributes that are set on this object.</p> + <p>To enumerate all of the attributes, call <strong>{{IMFAttributes::GetItemByIndex}}</strong> for each index value.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of attributes. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Retrieves an attribute at the specified index.</p> + <p>To enumerate all of an object's attributes in a thread-safe way, do the following:</p><ol> <li> <p>Call <strong>{{IMFAttributes::LockStore}}</strong> to prevent another thread from adding or deleting attributes.</p> </li> <li> <p>Call <strong>{{IMFAttributes::GetCount}}</strong> to find the number of attributes.</p> </li> <li> <p>Call <strong>GetItemByIndex</strong> to get each attribute by index.</p> </li> <li> <p>Call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the attribute store.</p> </li> </ol><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the attribute to retrieve. To get the number of attributes, call <strong>{{IMFAttributes::GetCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{GUID}} that identifies this attribute.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value. This parameter can be <strong>{{NULL}}</strong>. If it is not <strong>{{NULL}}</strong>, the method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the attribute value. Call <strong>PropVariantClear</strong> to free the memory allocated by this method.</p> </dd> + + + + + <p> Copies all of the attributes from this object into another attribute store. </p> + <p> This method deletes all of the attributes originally stored in <em>pDest</em>. </p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong> on an <strong>{{IMFSample}}</strong>, which inherits this method, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store that receives the copy. </p> </dd> + + + + + <p>Represents a block of memory that contains media data. Use this interface to access the data in the buffer.</p> + <p>If the buffer contains 2-D image data (such as an uncompressed video frame), you should query the buffer for the <strong>{{IMF2DBuffer}}</strong> interface. The methods on <strong>{{IMF2DBuffer}}</strong> are optimized for 2-D data.</p><p>To get a buffer from a media sample, call one of the following <strong>{{IMFSample}}</strong> methods:</p><ul> <li> <p> <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> </p> </li> <li> <p> <strong>{{IMFSample::GetBufferByIndex}}</strong> </p> </li> </ul><p>To create a new buffer object, use one of the following functions.</p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFCreateMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory.</td></tr> <tr><td> <strong>{{MFCreateMediaBufferWrapper}}</strong> </td><td>Creates a media buffer that wraps an existing media buffer.</td></tr> <tr><td> <strong>{{MFCreateDXSurfaceBuffer}}</strong> </td><td>Creates a buffer that manages a DirectX surface.</td></tr> <tr><td> <strong>{{MFCreateAlignedMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory with a specified alignment.</td></tr> </table><p>?</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Gives the caller access to the memory in the buffer, for reading or writing</p> + <p>This method gives the caller access to the entire buffer, up to the maximum size returned in the <em>pcbMaxLength</em> parameter. The value returned in <em>pcbCurrentLength</em> is the size of any valid data already in the buffer, which might be less than the total buffer size.</p><p>The reference returned in <em>ppbBuffer</em> is guaranteed to be valid, and can safely be accessed across the entire buffer for as long as the lock is held. When you are done accessing the buffer, call <strong>{{IMFMediaBuffer::Unlock}}</strong> to unlock the buffer. You must call <strong>Unlock</strong> once for each call to <strong>Lock</strong>. After you unlock the buffer, the reference returned in <em>ppbBuffer</em> is no longer valid, and should not be used. Generally, it is best to call <strong>Lock</strong> only when you need to access the buffer memory, and not earlier.</p><p>Locking the buffer does not prevent other threads from calling <strong>Lock</strong>, so you should not rely on this method to synchronize threads.</p><p>This method does not allocate any memory, or transfer ownership of the memory to the caller. Do not release or free the memory; the media buffer will free the memory when the media buffer is destroyed.</p><p>If you modify the contents of the buffer, update the current length by calling <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>If the buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, you should use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to lock the buffer. For 2-D buffers, the <strong>Lock2D</strong> method is more efficient than the <strong>Lock</strong> method. If the buffer is locked using <strong>Lock2D</strong>, the Lock method might return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when locking the surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the start of the buffer.</p> </dd> + + + <dd> <p>Receives the maximum amount of data that can be written to the buffer. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + <dd> <p>Receives the length of the valid data in the buffer, in bytes. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for every call to <strong>{{IMFMediaBuffer::Lock}}</strong>.</p> + <p>It is an error to call <strong>Unlock</strong> if you did not call <strong>Lock</strong> previously.</p><p>After calling this method, do not use the reference returned by the <strong>Lock</strong> method. It is no longer guaranteed to be valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when unlocking the surface.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the length of the valid data in the buffer.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the length of the valid data, in bytes. If the buffer does not contain any valid data, the value is zero.</p> </dd> + + + + + <p> </p><p>Sets the length of the valid data in the buffer.</p> + <p>Call this method if you write data into the buffer.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified length is greater than the maximum size of the buffer.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Length of the valid data, in bytes. This value cannot be greater than the allocated size of the buffer, which is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the allocated size of the buffer.</p> + <p>The buffer might or might not contain any valid data, and if there is valid data in the buffer, it might be smaller than the buffer's allocated size. To get the length of the valid data, call <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the allocated size of the buffer, in bytes.</p> </dd> + + + + + <p>Represents a media sample, which is a container object for media data. For video, a sample typically contains one video frame. For audio data, a sample typically contains multiple audio samples, rather than a single sample of audio.</p><p>A media sample contains zero or more buffers. Each buffer manages a block of memory, and is represented by the <strong>{{IMFMediaBuffer}}</strong> interface. A sample can have multiple buffers. The buffers are kept in an ordered list and accessed by index value. It is also valid to have an empty sample with no buffers.</p> + <p>To create a new media sample, call <strong>{{MFCreateSample}}</strong>.</p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong>, inherited from the <strong>{{IMFAttributes}}</strong> interface, on an <strong>{{IMFSample}}</strong>, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To get attibutes from a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To set attibutes on a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the presentation time of the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a presentation time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the presentation time of the sample.</p> + <p>Some pipeline components require samples that have time stamps. Generally the component that generates the data for the sample also sets the time stamp. The Media Session might modify the time stamps.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the duration of the sample.</p> + <p>If the sample contains more than one buffer, the duration includes the data from all of the buffers.</p><p>If the retrieved duration is zero, or if the method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>, the duration is unknown. In that case, it might be possible to calculate the duration from the media type?for example, by using the video frame rate or the audio sampling rate.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The sample does not have a specified duration.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the duration, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the duration of the sample.</p> + <p>This method succeeds if the duration is negative, although negative durations are probably not valid for most types of data. It is the responsibility of the object that consumes the sample to validate the duration.</p><p>The duration can also be zero. This might be valid for some types of data. For example, the sample might contain stream metadata with no buffers.</p><p>Until this method is called, the <strong>{{IMFSample::GetSampleDuration}}</strong> method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Duration of the sample, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the number of buffers in the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of buffers in the sample. A sample might contain zero buffers.</p> </dd> + + + + + <p> Gets a buffer from the sample, by index.</p><p> </p><strong>Note</strong>??In most cases, it is safer to use the <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> method. If the sample contains more than one buffer, the <strong>ConvertToContiguousBuffer</strong> method replaces them with a single buffer, copies the original data into that buffer, and returns the new buffer to the caller. The copy operation occurs at most once. On subsequent calls, no data is copied.? + <p>A sample might contain more than one buffer. Use the <strong>GetBufferByIndex</strong> method to enumerate the individual buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument, or the index is out of range. </p> </td></tr> </table><p>?</p> + + + + <p> Converts a sample with multiple buffers into a sample with a single buffer. </p> + <p>If the sample contains more than one buffer, this method copies the data from the original buffers into a new buffer, and replaces the original buffer list with the new buffer. The new buffer is returned in the <em>ppBuffer</em> parameter.</p><p> If the sample contains a single buffer, this method returns a reference to the original buffer. In typical use, most samples do not contain multiple buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The sample does not contain any buffers.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds a buffer to the end of the list of buffers in the sample. </p> + <p>For uncompressed video data, each buffer should contain a single video frame, and samples should not contain multiple frames. In general, storing multiple buffers in a sample is discouraged.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the buffer's <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a buffer at a specified index from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the buffer. To find the number of buffers in the sample, call <strong>{{IMFSample::GetBufferCount}}</strong>. Buffers are indexed from zero.</p> </dd> + + + + + <p> </p><p>Removes all of the buffers from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the total length of the valid data in all of the buffers in the sample. The length is calculated as the sum of the values retrieved by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Copies the sample data to a buffer. This method concatenates the valid data from all of the buffers of the sample, in order.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to contain the data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the destination buffer. The buffer must be large enough to hold the valid data in the sample. To get the size of the data in the sample, call <strong>{{IMFSample::GetTotalLength}}</strong>.</p> </dd> + + + + + <p> Represents a buffer that contains a two-dimensional surface, such as a video frame. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media buffer.</p><p>To use a 2-D buffer, it is important to know the <em>stride</em>, which is the number of bytes needed to go from one row of pixels to the next. The stride may be larger than the image width, because the surface may contain padding bytes after each row of pixels. Stride can also be negative, if the pixels are oriented bottom-up in memory. For more information, see Image Stride.</p><p>Every video format defines a <em>contiguous</em> or <em>packed</em> representation. This representation is compatible with the standard layout of a DirectX surface in system memory, with no additional padding. For {{RGB}} video, the contiguous representation has a pitch equal to the image width in bytes, rounded up to the nearest <strong>{{DWORD}}</strong> boundary. For {{YUV}} video, the layout of the contiguous representation depends on the {{YUV}} format. For planar {{YUV}} formats, the Y plane might have a different pitch than the U and V planes.</p><p>If a media buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, the underlying buffer is not guaranteed to have a contiguous representation, because there might be additional padding bytes after each row of pixels. When a buffer is non-contiguous, the <strong>Lock</strong> and <strong>Lock2D</strong> methods have different behaviors:</p><ul> <li> The <strong>Lock2D</strong> method returns a reference to the underlying buffer. The buffer might not be contiguous. </li> <li> The <strong>Lock</strong> method returns a buffer that is guaranteed to be contiguous. If the underlying buffer is not contiguous, the method copies the data into a new buffer, and the <strong>Unlock</strong> method copies it back into the original buffer. </li> </ul><p>Call the <strong>Lock2D</strong> method to access the 2-D buffer in its native format. The native format might not be contiguous. The buffer's <strong>{{IMFMediaBuffer::Lock}}</strong> method returns a contiguous representation of the buffer. However, this might require an internal copy from the native format. For 2-D buffers, therefore, you should use the <strong>Lock2D</strong> method and avoid the <strong>Lock</strong> method. Because the <strong>Lock</strong> method might cause up to two buffer copies, the <strong>Lock2D</strong> method is generally more efficient and should be used when possible. To find out if the underlying buffer is contiguous, call <strong>{{IMF2DBuffer::IsContiguousFormat}}</strong>.</p><p>For uncompressed images, the amount of valid data in the buffer is determined by the width, height, and pixel layout of the image. For this reason, if you call <strong>Lock2D</strong> to access the buffer, do not rely on the values returned by <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> or <strong>{{IMFMediaBuffer::GetMaxLength}}</strong>. Similarly, if you modify the data in the buffer, you do not have to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> to update the size. Generally, you should avoid mixing calls to <strong>{{IMF2DBuffer}}</strong> and <strong>{{IMFMediaBuffer}}</strong> methods on the same media buffer.</p> + + + + <p> </p><p>Gives the caller access to the memory in the buffer.</p> + <p>If <em>p</em> is a reference to the first byte in a row of pixels, <em>p</em> + (*<em>plPitch</em>) points to the first byte in the next row of pixels. A buffer might contain padding after each row of pixels, so the stride might be wider than the width of the image in bytes. Do not access the memory that is reserved for padding bytes, because it might not be read-accessible or write-accessible. For more information, see Image Stride.</p><p>The reference returned in <em>pbScanline0</em> remains valid as long as the caller holds the lock. When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2D</strong>. After you unlock the buffer, the reference returned in <em>pbScanline0</em> is no longer valid and should not be used. Generally, it is best to call <strong>Lock2D</strong> only when you need to access the buffer memory, and not earlier.</p><p>The values returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> and <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> methods do not apply to the buffer that is returned by the <strong>Lock2D</strong> method. For the same reason, you do not need to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> after manipulating the data in the buffer returned by the <strong>Lock2D</strong> method.</p><p>The <strong>{{IMFMediaBuffer::Lock}}</strong> method fails while the <strong>Lock2D</strong> lock is held, and vice-versa. Applications should use only one of these methods at a time.</p><p>When the underlying buffer is a Direct3D surface, the method fails if the surface is not lockable.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>Cannot lock the Direct3D surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory.</p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for each call to <strong>{{IMF2DBuffer::Lock2D}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves a reference to the buffer memory and the surface stride.</p> + <p>Before calling this method, you must lock the buffer by calling <strong>{{IMF2DBuffer::Lock2D}}</strong>. The reference returned in <em>plPitch</em> is valid only while the buffer remains locked.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_INVALID_FUNCTION}}</strong></dt> </dl> </td><td> <p>You must lock the buffer before calling this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image.</p> </dd> + + + <dd> <p>Receives the stride, in bytes. For more information, see Image Stride.</p> </dd> + + + + + <p> </p><p>Queries whether the buffer is contiguous in its native format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface. For non-contiguous buffers, the <strong>{{IMFMediaBuffer::Lock}}</strong> method must perform an internal copy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the buffer is contiguous, and <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bytes needed to store the contents of the buffer in contiguous format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bytes needed to store the contents of the buffer in contiguous format.</p> </dd> + + + + + <p> </p><p>Copies this buffer into the caller's buffer, converting the data to contiguous format.</p> + <p>If the original buffer is not contiguous, this method converts the contents into contiguous format during the copy. For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid size specified in <em>pbDestBuffer</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the destination buffer where the data will be copied. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the destination buffer, in bytes. To get the required size, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p> </p><p>Copies data to this buffer from a buffer that has a contiguous format.</p> + <p>This method copies the contents of the source buffer into the buffer that is managed by this <strong>{{IMF2DBuffer}}</strong> object. The source buffer must be in contiguous format. While copying, the method converts the contents into the destination buffer's native format, correcting for the buffer's pitch if necessary.</p><p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in the <strong>{{IMF2DBuffer}}</strong> interface topic.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the source buffer. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the source buffer, in bytes. To get the maximum size of the buffer, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p>Represents a buffer that contains a two-dimensional surface, such as a video frame.</p> + <p>This interface extends the <strong>{{IMF2DBuffer}}</strong> interface and adds a safer version of the <strong>{{IMF2DBuffer::Lock2D}}</strong> method.</p> + + + + <p>Gives the caller access to the memory in the buffer.</p> + <p>When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2DSize</strong>.</p><p>This method is equivalent to the <strong>{{IMF2DBuffer::Lock2D}}</strong> method. However, <strong>Lock2DSize</strong> is preferred because it enables the caller to validate memory references, and because it supports read-only locks. A buffer is not guaranteed to support the <strong>{{IMF2DBuffer2}}</strong> interface. To access a buffer, you should try the following methods in the order listed:</p><ol> <li><strong>{{IMF2DBuffer2::Lock2DSize}}</strong></li> <li> <strong>{{IMF2DBuffer::Lock2D}}</strong> </li> <li> <strong>{{IMFMediaBuffer::Lock}}</strong> </li> </ol><p>The <em>ppbBufferStart</em> and <em>pcbBufferLength</em> parameters receive the bounds of the buffer memory. Use these values to guard against buffer overruns. Use the values of <em>ppbScanline0</em> and <em>plPitch</em> to access the image data. If the image is bottom-up in memory, <em>ppbScanline0</em> will point to the last scan line in memory and <em>plPitch</em> will be negative. For more information, see Image Stride.</p><p>The <em>lockFlags</em> parameter specifies whether the buffer is locked for read-only access, write-only access, or read/write access. </p><ul> <li>If the buffer is already locked for read-only access, it cannot be locked for write access.</li> <li>If the buffer is already locked for write-only access, it cannot be locked for read access.</li> <li>If the buffer is already locked for read/write acess, it can be locked for read or write acess.</li> </ul><p>When possible, use a read-only or write-only lock, and avoid locking the buffer for read/write access. If the buffer represents a DirectX Graphics Infrastructure ({{DXGI}}) surface, a read/write lock can cause an extra copy between {{CPU}} memory and {{GPU}} memory.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. The buffer might already be locked with an incompatible locking flag. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>There is insufficient memory to complete the operation. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MF2DBuffer_LockFlags}}</strong> enumeration that specifies whether to lock the buffer for reading, writing, or both.</p> </dd> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory. </p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory. </p> </dd> + + + <dd> <p>Receives a reference to the start of the accessible buffer in memory.</p> </dd> + + + <dd> <p>Receives the length of the buffer, in bytes.</p> </dd> + + + + + <p>Copies the buffer to another 2D buffer object.</p> + <p>The destination buffer must be at least as large as the source buffer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMF2DBuffer2}}</strong> interface of the destination buffer.</p> </dd> + + + + + <p>Represents a buffer that contains a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>To create a {{DXGI}} media buffer, first create the {{DXGI}} surface. Then call <strong>{{MFCreateDXGISurfaceBuffer}}</strong>. </p> + + + + <p>Queries the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface for an interface.</p> + <p>You can use this method to get a reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface. If the buffer is locked, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the index of the subresource that is associated with this media buffer.</p> + <p>The subresource index is specified when you create the media buffer object. See <strong>{{MFCreateDXGISurfaceBuffer}}</strong>.</p><p>For more information about texture subresources, see <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the zero-based index of the subresource.</p> </dd> + + + + + <p>Gets an <strong>{{IUnknown}}</strong> reference that was previously stored in the media buffer object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> </table><p>?</p> + + + + <p>Stores an arbitrary <strong>{{IUnknown}}</strong> reference in the media buffer object.</p> + <p>To retrieve the reference from the object, call <strong>{{IMFDXGIBuffer::GetUnknown}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_OBJECT_ALREADY_EXISTS}}</strong></dt> </dl> </td><td> <p>An item already exists with this key.</p> </td></tr> </table><p>?</p> + + + + <p> Represents a description of a media format. </p> + <p> To create a new media type, call <strong>{{MFCreateMediaType}}</strong>. </p><p> All of the information in a media type is stored as attributes. To clone a media type, call <strong>{{IMFAttributes::CopyAllItems}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>Gets the major type of the format. </p> + <p> This method is equivalent to getting the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute from the media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The major type is not set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the major type <strong>{{GUID}}</strong>. The major type describes the broad category of the format, such as audio or video. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> Queries whether the media type is a temporally compressed format. Temporal compression uses information from previously decoded samples when decompressing the current sample.</p> + <p> This method returns <strong>{{FALSE}}</strong> in <em>pfCompressed</em> if the media type's <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{TRUE}}</strong>. If the <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{FALSE}}</strong> or not set, the method returns <strong>{{TRUE}}</strong>. </p><p> If the method returns <strong>{{TRUE}}</strong> in <em>pfCompressed</em>, it is a hint that the format has temporal compression applied to it. If the method returns <strong>{{FALSE}}</strong>, the format does not use temporal compression, although it might use intra-frame compression. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the format uses temporal compression, or <strong>{{FALSE}}</strong> if the format does not use temporal compression.</p> </dd> + + + + + <p> Compares two media types and determines whether they are identical. If they are not identical, the method indicates how the two formats differ. </p> + <p> Both of the media types must have a major type, or the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p> If the method succeeds and all of the comparison flags are set in <em>pdwFlags</em>, the return value is <strong>{{S_OK}}</strong>. If the method succeeds but one or more comparison flags are not set, the method returns <strong>{{S_FALSE}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p> The types are not equal. Examine the <em>pdwFlags</em> parameter to determine how the types differ. </p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The types are equal. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> One or both media types are invalid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to compare.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags, indicating the degree of similarity between the two media types. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_MAJOR_TYPES}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>The major types are the same. The major type is specified by the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_TYPES}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The subtypes are the same, or neither media type has a subtype. The subtype is specified by the <strong>{{MF_MT_SUBTYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_DATA}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The attributes in one of the media types are a subset of the attributes in the other, and the values of these attributes match, excluding the value of the <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes.</p> <p>Specifically, the method takes the media type with the smaller number of attributes and checks whether each attribute from that type is present in the other media type and has the same value (not including <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}}). </p> <p>To perform other comparisons, use the <strong>{{IMFAttributes::Compare}}</strong> method. For example, the <strong>Compare</strong> method can test for identical attributes, or test the intersection of the two attribute sets. For more information, see <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The user data is identical, or neither media type contains user data. User data is specified by the <strong>{{MF_MT_USER_DATA}}</strong> attribute.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p>[<strong>{{IMFAudioMediaType}}</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Represents a description of an audio format.</p> + <p><strong>Windows Server?2008 and Windows?Vista:??</strong>If the major type of a media type is <strong>{{MFMediaType_Audio}}</strong>, you can query the media type object for the <strong>{{IMFAudioMediaType}}</strong> interface.</p><p> To convert an audio media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>[<strong>GetAudioFormat</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> + <p>If you need to convert the media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p> There are no guarantees about how long the returned reference is valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> This method returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.]</p><p> Retrieves an alternative representation of the media type.</p> + <p>This method is equivalent to <strong>{{IMFMediaType::GetRepresentation}}</strong> but includes the <em>lStride</em> parameter.</p><p>Instead of calling this method, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Provides information about the result of an asynchronous operation. </p> + <p>Use this interface to complete an asynchronous operation. You get a reference to this interface when your callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. To complete the operation, pass the <strong>{{IMFAsyncResult}}</strong> reference to the <strong>End...</strong> method that corresponds to the <strong>Begin...</strong> method that starts the operation. For example, if the asynchronous method is named <strong>BeginRead</strong>, call the <strong>EndRead</strong> method. For more information, see Calling Asynchronous Methods.</p><p>If you are implementing an asynchronous method, call <strong>{{MFCreateAsyncResult}}</strong> to create an instance of this object. For more information, see Writing an Asynchronous Method.</p><p>Any custom implementation of this interface must inherit the <strong>{{MFASYNCRESULT}}</strong> structure.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method.</p> + <p>The caller of the asynchronous method specifies the state object, and can use it for any caller-defined purpose. The state object can be <strong>{{NULL}}</strong>. If the state object is <strong>{{NULL}}</strong>, <strong>GetState</strong> returns <strong>{{E_POINTER}}</strong>.</p><p>If you are implementing an asynchronous method, set the state object on the through the <em>punkState</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no state object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the state object's <strong>{{IUnknown}}</strong> interface. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the status of the asynchronous operation.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation completed successfully.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets the status of the asynchronous operation.</p> + <p>If you implement an asynchronous method, call <strong>SetStatus</strong> to set the status code for the operation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The status of the asynchronous operation.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method, without incrementing the object's reference count.</p> + <p>This method cannot be called remotely.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>Returns a reference to the state object's <strong>{{IUnknown}}</strong> interface, or <strong>{{NULL}}</strong> if no object was set. This reference does not have an outstanding reference count. If you store this reference, you must call <strong>AddRef</strong> on the reference.</p> + + + + <p>Callback interface to notify the application when an asynchronous method completes. </p> + <p> For more information about asynchronous methods in Microsoft Media Foundation, see Asynchronous Callback Methods. </p><p>This interface is also used to perform a work item in a Media Foundation work-queue. For more information, see Work Queues. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + <p> </p><p>Called when an asynchronous operation is completed.</p> + <p>Within your implementation of <strong>Invoke</strong>, call the corresponding <strong>End...</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass this reference to the asynchronous <strong>End...</strong> method to complete the asynchronous call.</p> </dd> + + + + + <p>Provides logging information about the parent object the async callback is associated with.</p> + <p><strong>{{IMFAsyncCallbackLogging}}</strong> is primarily used for async callbacks to return an {{ID}} of the parent object that they are associated with.</p> + + + + <p>Gets the reference to the parent object the async callback is associated with. </p> + <p>void reference to the object.</p> + + + + <p>Gets the tag of the parent object the async callback is associated object.</p> + <p>The tag of the object.</p> + + + + <p>Represents an event generated by a Media Foundation object. Use this interface to get information about the event.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> or <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> on the event generator.</p> + <p>If you are implementing an object that generates events, call the <strong>{{MFCreateMediaEvent}}</strong> function to create a new event object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the event type. The event type indicates what happened to trigger the event. It also defines the meaning of the event value.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event type. For a list of event types, see Media Foundation Events.</p> </dd> + + + + + <p> </p><p>Retrieves the extended type of the event.</p> + <p>To define a custom event, create a new extended-type {{GUID}} and send an {{MEExtendedType}} event with that {{GUID}}.</p><p>Some standard Media Foundation events also use the extended type to differentiate between types of event data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a <strong>{{GUID}}</strong> that identifies the extended type.</p> </dd> + + + + + <p> </p><p>Retrieves an <strong>{{HRESULT}}</strong> that specifies the event status.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event status. If the operation that generated the event was successful, the value is a success code. A failure code means that an error condition triggered the event.</p> </dd> + + + + + <p> </p><p>Retrieves the value associated with the event, if any. The value is retrieved as a <strong>{{PROPVARIANT}}</strong> structure. The actual data type and the meaning of the value depend on the event.</p> + <p>Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong> structure. After the method returns, call <strong>PropVariantClear</strong> to free the memory that was allocated for the <strong>{{PROPVARIANT}}</strong> data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> structure. The method fills this structure with the data.</p> </dd> + + + + + <p> Retrieves events from any Media Foundation object that generates events. </p> + <p>An object that supports this interface maintains a queue of events. The client of the object can retrieve the events either synchronously or asynchronously. The synchronous method is <strong>GetEvent</strong>. The asynchronous methods are <strong>BeginGetEvent</strong> and <strong>EndGetEvent</strong>.</p> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p> + <p>This method executes synchronously.</p><p>If the queue already contains an event, the method returns {{S_OK}} immediately. If the queue does not contain an event, the behavior depends on the value of <em>dwFlags</em>:</p><ul> <li> <p>If <em>dwFlags</em> is 0, the method blocks indefinitely until a new event is queued, or until the event generator is shut down.</p> </li> <li> <p>If <em>dwFlags</em> is {{MF_EVENT_FLAG_NO_WAIT}}, the method fails immediately with the return code {{MF_E_NO_EVENTS_AVAILABLE}}.</p> </li> </ul><p>This method returns {{MF_E_MULTIPLE_SUBSCRIBERS}} if you previously called <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> and have not yet called <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_EVENTS_AVAILABLE}}</strong></dt> </dl> </td><td> <p>There are no events in the queue.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>0</strong></dt> </dl> </td><td> <p>The method blocks until the event generator queues an event.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_EVENT_FLAG_NO_WAIT}}</strong></dt> </dl> </td><td> <p>The method returns immediately.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p> + <p>When a new event is available, the event generator calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong> to get a reference to the <strong>{{IMFMediaEvent}}</strong> interface, and use that interface to examine the event.</p><p>Do not call <strong>BeginGetEvent</strong> a second time before calling <strong>EndGetEvent</strong>. While the first call is still pending, additional calls to the same object will fail. Also, the <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> method fails if an asynchronous request is still pending.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and a different state object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request with a different callback reference.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and state object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The client must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. For example code, see <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Puts a new event in the object's queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the event value. This parameter can be <strong>{{NULL}}</strong>. This value is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Used by the Microsoft Media Foundation proxy/stub {{DLL}} to marshal certain asynchronous method calls across process boundaries.</p><p>Applications do not use or implement this interface.</p> + + + + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> Retrieves the characteristics of the byte stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_READABLE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The byte stream can be read. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_WRITABLE}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p> The byte stream can be written to. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_SEEKABLE}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p> The byte stream can be seeked. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_REMOTE}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p> The byte stream is from a remote source, such as a network. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_DIRECTORY}}</strong></dt> <dt>0x00000080</dt> </dl> </td><td> <p> The byte stream represents a file directory. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p> Seeking within this stream might be slow. For example, the byte stream might download from a network.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>The byte stream is currently downloading data to a local cache. Read operations on the byte stream might take longer until the data is completely downloaded.</p> <p>This flag is cleared after all of the data has been downloaded.</p> <p>If the <strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong> flag is also set, it means the byte stream must download the entire file sequentially. Otherwise, the byte stream can respond to seek requests by restarting the download from a new point in the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SHARE_WRITE}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>Another thread or process can open this byte stream for writing. If this flag is present, the length of the +byte stream could change while it is being read. </p> <p>This flag can affect the behavior of byte-stream handlers. For more information, see {{MF_BYTESTREAMHANDLER_ACCEPTS_SHARE_WRITE}}.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_DOES_NOT_USE_NETWORK}}</strong></dt> <dt>0x00000800</dt> </dl> </td><td> <p>The byte stream is not currently +using the network to receive the content. Networking hardware +may enter a power saving state when this bit is set.</p> <strong>Note</strong>??Requires Windows?8 or later. ? </td></tr> </table> <p>?</p> </dd> + + + + + <p> Retrieves the length of the stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the length of the stream, in bytes. If the length is unknown, this value is -1. </p> </dd> + + + + + <p> </p><p>Sets the length of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Length of the stream in bytes. </p> </dd> + + + + + <p> Retrieves the current read or write position in the stream. </p> + <p> The methods that update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>SetCurrentPosition</strong>, and <strong>Seek</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the current position, in bytes. </p> </dd> + + + + + <p> </p><p>Sets the current read or write position.</p> + <p> If the new position is larger than the length of the stream, the method returns {{E_INVALIDARG}}. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by setting the current position to the value passed in to the <em>qwPosition</em> parameter. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>Seek</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> </table><p>?</p> + + + <dd> <p>New position in the stream, as a byte offset from the start of the stream.</p> </dd> + + + + + <p> </p><p>Queries whether the current position has reached the end of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the value <strong>{{TRUE}}</strong> if the end of the stream has been reached, or <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <p> Reads data from the stream. </p> + <p> This method reads at most <em>cb</em> bytes from the current position in the stream and copies them into the buffer provided by the caller. The number of bytes that were read is returned in the <em>pcbRead</em> parameter. The method does not return an error code on reaching the end of the file, so the application should check the value in <em>pcbRead</em> after the method returns. </p><p> This method is synchronous. It blocks until the read operation completes. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are copied into the buffer. This parameter cannot be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Begins an asynchronous read operation from the stream. </p> + <p> When all of the data has been read into the buffer, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndRead}}</strong> to complete the asynchronous request. </p><p> Do not read from, write to, free, or reallocate the buffer while an asynchronous read is pending. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Completes an asynchronous read operation. </p> + <p> Call this method after the <strong>{{IMFByteStream::BeginRead}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p> Receives the number of bytes that were read. </p> </dd> + + + + + <p> </p><p>Writes data to the stream.</p> + <p> This method writes the contents of the <em>pb</em> buffer to the stream, starting at the current stream position. The number of bytes that were written is returned in the <em>pcbWritten</em> parameter. </p><p> This method is synchronous. It blocks until the write operation completes. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position offset. </p><p> Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that contains the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are written. </p> </dd> + + + + + <p> Begins an asynchronous write operation to the stream. </p> + <p> When all of the data has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndWrite}}</strong> to complete the asynchronous request. </p><p> Do not reallocate, free, or write to the buffer while an asynchronous write is still pending. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer containing the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous write operation.</p> + <p> Call this method when the <strong>{{IMFByteStream::BeginWrite}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p> Receives the number of bytes that were written. </p> </dd> + + + + + <p> </p><p>Moves the current position in the stream by a specified offset.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the <em>qwSeekOffset</em> to the seek <em>SeekOrigin</em> position. This should be the same value passed back in the <em>pqwCurrentPosition</em> parameter. +Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>SetCurrentPosition</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the origin of the seek as a member of the <strong>{{MFBYTESTREAM_SEEK_ORIGIN}}</strong> enumeration. The offset is calculated relative to this position. </p> </dd> + + + <dd> <p> Specifies the new position, as a byte offset from the seek origin. </p> </dd> + + + <dd> <p> Specifies zero or more flags. The following flags are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO}}</strong></dt> </dl> </td><td> <p> All pending I/O requests are canceled after the seek request completes successfully. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the new position after the seek. </p> </dd> + + + + + <p> Clears any internal buffers used by the stream. If you are writing to the stream, the buffered data is written to the underlying file or device. </p> + <p> If the byte stream is read-only, this method has no effect.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Closes the stream and releases any resources associated with the stream, such as sockets or file handles. This method also cancels any pending asynchronous I/O requests. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to write a media sample to the stream.</p> + <p>Call this method when the <strong>{{IMFSampleOutputStream::BeginWriteSample}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + + + + + + Defines size, enumerators, and synchronization methods for all nongeneric collections. <p></p>Namespace: System.CollectionsAssembly: mscorlib (in mscorlib.dll)&lt;ComVisibleAttribute(True)&gt; _ +Public Interface {{ICollection}} Inherits {{IEnumerableDim}} instance As {{ICollection}} +[ComVisibleAttribute(true)] +public interface {{ICollection}} : {{IEnumerable}}[ComVisibleAttribute(true)] +public interface class {{ICollection}} : {{IEnumerable}}/** @attribute ComVisibleAttribute(true) */ +public interface {{ICollection}} extends {{IEnumerableComVisibleAttribute}}(true) +public interface {{ICollection}} extends {{IEnumerableNot}} applicable. <p>The {{ICollection}} interface is the base interface for classes in the System.Collections namespace.</p> <p>The {{ICollection}} interface extends {{IEnumerable}}; {{IDictionary}} and {{IList}} are more specialized interfaces that extend {{ICollection}}. An {{IDictionary}} implementation is a collection of key/value pairs, like the Hashtable class. An {{IList}} implementation is a collection of values and its members can be accessed by index, like the ArrayList class.</p> <p>Some collections that limit access to their elements, such as the Queue class and the Stack class, directly implement the {{ICollection}} interface.</p> <p>If neither the {{IDictionary}} interface nor the {{IList}} interface meet the requirements of the required collection, derive the new collection class from the {{ICollection}} interface instead for more flexibility.</p> <p>For the generic version of this interface, see System.Collections.Generic.{{ICollection}}.</p> <p>Windows 98, Windows Server 2000 {{SP4}}, Windows {{CE}}, Windows Millennium Edition, Windows Mobile for Pocket {{PC}}, Windows Mobile for Smartphone, Windows Server 2003, Windows {{XP}} Media Center Edition, Windows {{XP}} Professional x64 Edition, Windows {{XP}} {{SP2}}, Windows {{XP}} Starter Edition</p><p></p><p></p> The Microsoft .{{NET}} Framework 3.0 is supported on Windows Vista, Microsoft Windows {{XP}} {{SP2}}, and Windows Server 2003 {{SP1}}. .{{NET}} FrameworkSupported in: 3.0, 2.0, 1.1, 1.0.{{NET}} Compact FrameworkSupported in: 2.0, 1.0XNA FrameworkSupported in: 1.0ReferenceICollection MembersSystem.Collections NamespaceIDictionaryIListSystem.Collections.Generic.{{ICollection}} + + + + <p> </p><p>Retrieves the number of objects in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of objects in the collection.</p> </dd> + + + + + <p> </p><p>Retrieves an object in the collection.</p> + <p> This method does not remove the object from the collection. To remove an object, call <strong>{{IMFCollection::RemoveElement}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the object to retrieve. Objects are indexed in the order in which they were added to the collection. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. The retrieved reference value might be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Adds an object to the collection.</p> + <p>If <em>pUnkElement</em> is <strong>{{NULL}}</strong>, a <strong>{{NULL}}</strong> reference is added to the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes an object from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the object to remove. Objects are indexed in the order in which they were added to the collection.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface. This parameter cannot be <strong>{{NULL}}</strong>, but the retrieved reference value might be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Adds an object at the specified index in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index where the object will be added to the collection.</p> </dd> + + + <dd> <p>The object to insert.</p> </dd> + + + + + <p> </p><p>Removes all items from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Provides an event queue for applications that need to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This interface is exposed by a helper object that implements an event queue. If you are writing a component that implements the <strong>{{IMFMediaEventGenerator}}</strong> interface, you can use this object in your implementation. The event queue object is thread safe and provides methods to queue events and to pull them from the queue either synchronously or asynchronously. To create the event queue object, call <strong>{{MFCreateEventQueue}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::GetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Puts an event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains attributes. To create the event object, call <strong>{{MFCreateMediaEvent}}</strong>. Add attributes to the event by using methods from the <strong>{{IMFAttributes}}</strong> interface. (The <strong>{{IMFMediaEvent}}</strong> interface inherits <strong>{{IMFAttributes}}</strong>.)</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of the event to be put in the queue.</p> </dd> + + + + + <p> </p><p>Creates an event, sets a <strong>{{PROPVARIANT}}</strong> as the event data, and puts the event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::QueueEvent}}</strong>. Pass the parameters from that method directly to this method.</p><p>You can also call this method when your component needs to raise an event that does not contain attributes. If the event data is an <strong>{{IUnknown}}</strong> reference, you can use <strong>{{IMFMediaEventQueue::QueueEventParamUnk}}</strong>. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an event, sets an <strong>{{IUnknown}}</strong> reference as the event data, and puts the event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains an <strong>{{IUnknown}}</strong> reference value and no attributes. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type of the event to be added to the queue. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type of the event. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface. The method sets this reference as the event value. The reference is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Shuts down the event queue.</p> + <p>Call this method when your component shuts down. After this method is called, all <strong>{{IMFMediaEventQueue}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>This method removes all of the events from the queue.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the application to defer the creation of an object. This interface is exposed by activation objects.</p> + <p>Typically, the application calls some function that returns an <strong>{{IMFActivate}}</strong> reference and then passes that reference to another component. The other component calls <strong>ActivateObject</strong> at a later time to create the object. In the protected media path ({{PMP}}), the <strong>{{IMFActivate}}</strong> reference might be marshaled to the protected process, so that the object can be created in that process.</p> + + + + <p> Creates the object associated with this activation object. </p> + <p>Some Microsoft Media Foundation objects must be shut down before being released. If so, the caller is responsible for shutting down the object that is returned in <em>ppv</em>. To shut down the object, do one of the following:</p><ul> <li>Call <strong>{{IMFActivate::ShutdownObject}}</strong> on the activation object, or</li> <li>Call the object-specific shutdown method. This method will depend on the type of object. Possibilities include:<ul> <li>Media sources: Call <strong>{{IMFMediaSource::Shutdown}}</strong>.</li> <li>Media sinks: Call <strong>{{IMFMediaSink::Shutdown}}</strong>.</li> <li>Any object that supports the <strong>{{IMFShutdown}}</strong> interface: Call <strong>{{IMFShutdown::Shutdown}}</strong>.</li> </ul> </li> </ul><p>The <strong>{{IMFActivate::ShutdownObject}}</strong> method is generic to all object types. If the object does not require a shutdown method, <strong>ShutdownObject</strong> succeeds and has no effect. If you do not know the specific shutdown method for the object (or do not know the object type), call <strong>{{IMFActivate::ShutdownObject}}</strong>.</p><p> After the first call to <strong>ActivateObject</strong>, subsequent calls return a reference to the same instance, until the client calls either <strong>ShutdownObject</strong> or <strong>{{IMFActivate::DetachObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Interface identifier ({{IID}}) of the requested interface. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Shuts down the created object.</p> + <p>If you create an object by calling <strong>{{IMFActivate::ActivateObject}}</strong>, call <strong>ShutdownObject</strong> when you are done using the object.</p><p>The component that calls <strong>ActivateObject</strong>?not the component that creates the activation object?is responsible for calling <strong>ShutdownObject</strong>. For example, in a typical playback application, the application creates activation objects for the media sinks, but the Media Session calls <strong>ActivateObject</strong>. Therefore the Media Session, not the application, calls <strong>ShutdownObject</strong>.</p><p>After <strong>ShutdownObject</strong> is called, the activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Detaches the created object from the activation object.</p> + <p>The activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p><p>The <strong>DetachObject</strong> method does not shut down the created object. If the <strong>DetachObject</strong> method succeeds, the client must shut down the created object. This rule applies only to objects that have a shutdown method or that support the <strong>{{IMFShutdown}}</strong> interface. See the remarks for <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>Implementation of this method is optional. If the activation object does not support this method, the method returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong>.</p> + <p>Media Foundation provides a set of built-in media sources and decoders. Applications can enumerate them as follows: </p><ul> <li>Media sources are enumerated through the Source Resolver.</li> <li>Transforms, such as decoders, are enumerated through the <strong>{{MFTEnum}}</strong> and <strong>{{MFTEnumEx}}</strong> functions.</li> </ul><p>Applications might also enumerate these objects indirectly. For example, if an application uses the topology loader to resolve a partial topology, the topology loader calls <strong>{{MFTEnumEx}}</strong> to find the required decoders.</p><p>Third parties can implement their own custom media sources and decoders, and register them for enumeration so that other applications can use them.</p><p>To control the enumeration order, Media Foundation maintains two process-wide lists of {{CLSIDs:}} a preferred list and a blocked list. An object whose {{CLSID}} appears in the preferred list appears first in the enumeration order. An object whose {{CLSID}} appears on the blocked list is not enumerated.</p><p>The lists are initially populated from the registry. Applications can use the <strong>{{IMFPluginControl}}</strong> interface to modify the lists for the current process.</p><p>The preferred list contains a set of key/value pairs, where the keys are strings and the values are {{CLSIDs}}. These key/value pairs are defined as follows:</p><ul> <li>For media sources, the key name is a file name extension, protocol scheme, or {{MIME}} type. The value is the {{CLSID}} of a scheme handler or byte-stream handler for that media source.</li> <li>For decoders, the key name is a media subtype {{GUID}} in canonical string form. (For more information about media subtypes, see Media Types.) The value is the {{CLSID}} of the Media Foundation transform ({{MFT}}) that implements the decoder. </li> </ul><p>The following examples show the various types of key:</p><ul> <li>File extension: ".wmv"</li> <li>Scheme: "http:"</li> <li>{{MIME}} type: "video/mp4"</li> <li>Media subtype: "{47504A4D-0000-0010-8000-00AA00389B71}"</li> </ul><p>To search the preferred list by key name, call the <strong>{{IMFPluginControl::GetPreferredClsid}}</strong> method. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetPreferredClsidByIndex}}</strong> method in a loop.</p><p>The blocked list contains a list of {{CLSIDs}}. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetDisabledByIndex}}</strong> method in a loop. To check whether a specific {{CLSID}} appears on the list, call the <strong>{{IMFPluginControl::IsDisabled}}</strong> method.</p> + + + + <p>Searches the preferred list for a class identifier ({{CLSID}}) that matches a specified key name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>No {{CLSID}} matching this key was found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name to match. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{CLSID}} from the preferred list.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the preferred list, specified by index value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the key name associated with the {{CLSID}}. The caller must free the memory for the returned string by calling the <strong>CoTaskMemFree</strong> function. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the preferred list or removes a {{CLSID}} from the list.</p> + <p>The preferred list is global to the caller's process. Calling this method does not affect the list in other process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name for the {{CLSID}}. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>The {{CLSID}} to add to the list. If this parameter is <strong>{{NULL}}</strong>, the key/value entry specified by the <em>selector</em> parameter is removed from the list. </p> </dd> + + + + + <p>Queries whether a class identifier ({{CLSID}}) appears in the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} appears in the blocked list.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} is not in the blocked list.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object for the query.</p> </dd> + + + <dd> <p>The {{CLSID}} to search for.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the blocked list, or removes a {{CLSID}} from the list.</p> + <p> The blocked list is global to the caller's process. Calling this method does not affect the list in other processes. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The {{CLSID}} to add or remove.</p> </dd> + + + <dd> <p>Specifies whether to add or remove the {{CSLID}}. If the value is <strong>{{TRUE}}</strong>, the method adds the {{CLSID}} to the blocked list. Otherwise, the method removes it from the list.</p> </dd> + + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>This interface extends the <strong>{{IMFPluginControl}}</strong> interface.</p> + <p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong> and query the returned reference for <strong>{{IMFPluginControl2}}</strong>.</p> + + + + <p>Sets the policy for which media sources and transforms are enumerated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value from the <strong>{{MF_PLUGIN_CONTROL_POLICY}}</strong> enumeration that specifies the policy.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Queries the Microsoft Direct3D device for an interface.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>For more info see, Supporting Direct3D 11 Video Decoding in Media Foundation.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>If a <strong>{{ID3D11VideoDevice}}</strong> is specified and the {{D3D}} device created is using the reference rasterizer or {{WARP}}. Or it is a hardware device and you are using the Microsoft Basic Display Adapter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device supports the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong>. To get a reference to the Direct3D11 device, use <strong>{{IID_ID3D11Device}}</strong> as the <em>riid</em>.</li> <li> <strong>{{ID3D11VideoDevice}}</strong>. To get a reference to the Direct3D11 video device, use <strong>{{IID_ID3D11VideoDevice}}</strong> as the <em>riid</em>.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gives the caller exclusive access to the Microsoft Direct3D device.</p> + <p>When you are done using the Direct3D device, call <strong>{{IMFDXGIDeviceManager::UnlockDevice}}</strong> to unlock the device.</p><p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>If <em>fBlock</em> is <strong>{{TRUE}}</strong>, this method can potentially deadlock. For example, it will deadlock if a thread calls <strong>LockDevice</strong> and then waits on another thread that calls <strong>LockDevice</strong>. It will also deadlock if a thread calls <strong>LockDevice</strong> twice without calling <strong>UnlockDevice</strong> in between. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_VIDEO_DEVICE_LOCKED}}</strong></dt> </dl> </td><td> <p>The device is locked and <em>fBlock</em> is <strong>{{FALSE}}</strong>. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device will support the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong> </li> <li> <strong>{{ID3D11VideoContext}}</strong> </li> <li> <strong>{{ID3D11VideoDevice}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Specifies whether to wait for the device lock. If the device is already locked and this parameter is <strong>{{TRUE}}</strong>, the method blocks until the device is unlocked. Otherwise, if the device is locked and this parameter is <strong>{{FALSE}}</strong>, the method returns immediately with the error code <strong>{{DXVA2_E_VIDEO_DEVICE_LOCKED}}</strong>.</p> </dd> + + + + + <p>Gets a handle to the Microsoft Direct3D device. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device handle.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Tests whether a Microsoft Direct3D device handle is valid.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + + + <p>Unlocks the Microsoft Direct3D device.</p> + <p> Call this method to release the device after calling <strong>{{IMFDXGIDeviceManager::LockDevice}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the <strong>{{IMFAttributes}}</strong> for the substream with the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The stream specified substream index is invalid. Call <strong>GetStreamCount</strong> to get the number of substreams managed by the multiplexed media source.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + + + + + + + + + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + <p>Specifies the immediate value and destination address written using <strong>{{ID3D12CommandList2::WriteBufferImmediate}}</strong>.</p> + <p></p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + + + + + + + <p> </p><p>Writes the contents of an attribute store to a stream.</p> + <p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function serializes <strong>{{IUnknown}}</strong> references in the attribute store, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::SaveReference}}</strong> to serialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoMarshalInterface</strong> to serialize a proxy for the object.</p> </li> </ul><p>If <em>dwOptions</em> does not include the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function skips <strong>{{IUnknown}}</strong> references in the attribute store.</p><p>To load the attributes from the stream, call <strong>{{MFDeserializeAttributesFromStream}}</strong>.</p><p>The main purpose of this function is to marshal attributes across process boundaries.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream where the attributes are saved.</p> </dd> + + + + + <p> </p><p>Loads attributes from a stream into an attribute store.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p><p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function deserializes <strong>{{IUnknown}}</strong> references from the stream, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::LoadReference}}</strong> to deserialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoUnmarshalInterface</strong> to deserialize a proxy for the object.</p> </li> </ul><p>This function deletes any attributes that were previously stored in <em>pAttr</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream from which to read the attributes.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Defines flags for the <strong>{{IMFTransform::ProcessInput}}</strong> method. Currently no flags are defined.</p> + + + + <p> Defines flags for the <strong>{{IMFTransform::ProcessOutput}}</strong> method. </p> + <p>The values in this enumeration are not bit flags, so they should not be combined with a bitwise <strong>{{OR}}</strong>. Also, the caller should test for these flags with the equality operator, not a bitwise <strong>{{AND}}</strong>:</p><code>// Correct. +if (Buffer.dwStatus == {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) +{ ... +} // Incorrect. +if ((Buffer.dwStatus &amp; {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) != 0) +{ ... +} +</code> + + + + <p> </p><p>Indicates the status of an input stream on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>The input stream can receive more data at this time. To deliver more input data, call <strong>{{IMFTransform::ProcessInput}}</strong>.</p> </dd> + + + + + <p> </p><p>Indicates whether a Media Foundation transform ({{MFT}}) can produce output data.</p> + + + <dd> <p>There is a sample available for at least one output stream. To retrieve the available output samples, call <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Describes an input stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the transform, the only flags guaranteed to be accurate are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags. For all other flags, the client should first set the media type on every non-optional stream.</p><p>In the default processing model, an {{MFT}} holds a reference count on the sample that it receives in <strong>ProcessInput</strong>. It does not process the sample immediately inside <strong>ProcessInput</strong>. When <strong>ProcessOutput</strong> is called, the {{MFT}} produces output data and then discards the input sample. The following variations on this model are defined:</p><ul> <li> <p>If an {{MFT}} never holds onto input samples between <strong>ProcessInput</strong> and <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}.</p> </li> <li> <p>If an {{MFT}} holds some input samples beyond the next call to <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_HOLDS_BUFFERS}}.</p> </li> </ul> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of input data must contain complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each media sample that the client provides as input must contain exactly one unit of data, as defined for the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that processes uncompressed audio should not set this flag. The {{MFT}} should accept buffers that contain more than a single audio frame, for efficiency.</p> </dd> + + + <dd> <p> All input samples must be the same size. The size is given in the <strong>cbSize</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The {{MFT}} must provide this value. During processing, the {{MFT}} should verify the size of input samples, and may drop samples with incorrect size.</p> </dd> + + + <dd> <p>The {{MFT}} might hold one or more input samples after <strong>{{IMFTransform::ProcessOutput}}</strong> is called. If this flag is present, the <strong>hnsMaxLatency</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure gives the maximum latency, and the <strong>cbMaxLookahead</strong> member gives the maximum number of bytes of lookahead.</p> </dd> + + + <dd> <p>The {{MFT}} does not hold input samples after the <strong>{{IMFTransform::ProcessInput}}</strong> method returns. It releases the sample before the <strong>ProcessInput</strong> method returns.</p> <p>If this flag is absent, the {{MFT}} might hold a reference count on the samples that are passed to the <strong>ProcessInput</strong> method. The client must not re-use or delete the buffer memory until the {{MFT}} releases the sample's <strong>{{IMFSample}}</strong> reference.</p> <p>If this flag is absent, it does not guarantee that the {{MFT}} holds a reference count on the input samples. It is valid for an {{MFT}} to release input samples in <strong>ProcessInput</strong> even if the {{MFT}} does not set this flag. However, setting this flag might enable to client to optimize how it re-uses buffers.</p> <p>An {{MFT}} should not set this flag if it ever holds onto an input sample after returning from <strong>ProcessInput</strong>.</p> </dd> + + + <dd> <p>This input stream can be removed by calling <strong>{{IMFTransform::DeleteInputStream}}</strong>.</p> </dd> + + + <dd> <p>This input stream is optional. The transform can produce output without receiving input from this stream. The caller can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. It is possible for every input stream on a transform to be optional, but at least one input must be selected in order to produce output.</p> </dd> + + + <dd> <p>The {{MFT}} can perform in-place processing. In this mode, the {{MFT}} directly modifies the input buffer. When the client calls <strong>ProcessOutput</strong>, the same sample that was delivered to this stream is returned in the output stream that has a matching stream identifier. This flag implies that the {{MFT}} holds onto the input buffer, so this flag cannot combined with the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}} flag.</p> <p>If this flag is present, the {{MFT}} must set the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag for the output stream that corresponds to this input stream. (See <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>).</p> </dd> + + + + + <p> </p><p>Describes an output stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the {{MFT}}, the only flag guaranteed to be accurate is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag. For all other flags, the client should first set the media type on every non-optional stream.</p><p>The {{MFT_OUTPUT_STREAM_DISCARDABLE}} and {{MFT_OUTPUT_STREAM_LAZY_READ}} flags define different behaviors for how the {{MFT}} can discard output data.</p><ul> <li> <p>{{MFT_OUTPUT_STREAM_DISCARDABLE:}} The {{MFT}} discards output data only if the client calls <strong>ProcessOutput</strong> with the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag. The {{MFT}} never discards data when the client calls <strong>ProcessInput</strong>.</p> </li> <li> <p>{{MFT_OUTPUT_STREAM_LAZY_READ:}} If the client continues to call <strong>ProcessInput</strong> without collecting the output from this stream, the {{MFT}} eventually discards the output. If all output streams have the {{MFT_OUTPUT_STREAM_LAZY_READ}} flag, the {{MFT}} never refuses more input data.</p> </li> </ul><p>If neither of these flags is set, the {{MFT}} never discards output data.</p> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of output data from the {{MFT}} contains complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each output sample contains exactly one unit of data, as defined for the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that outputs uncompressed audio should not set this flag. For efficiency, it should output more than one audio frame at a time.</p> </dd> + + + <dd> <p>All output samples are the same size.</p> </dd> + + + <dd> <p>The {{MFT}} can discard the output data from this output stream, if requested by the client. To discard the output, set the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> </dd> + + + <dd> <p>This output stream is optional. The client can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. When an optional stream is deselected, it does not produce any output data.</p> </dd> + + + <dd> <p>The {{MFT}} provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. The {{MFT}} cannot use output samples provided by the client for this stream.</p> <p>If this flag is not set, the {{MFT}} must set <strong>cbSize</strong> to a nonzero value in the <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure, so that the client can allocate the correct buffer size. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </dd> + + + <dd> <p>The {{MFT}} can either provide output samples for this stream or it can use samples that the client allocates. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> <p>If the {{MFT}} does not set this flag or the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag, the client must allocate the samples for this output stream. The {{MFT}} will not provide its own samples.</p> </dd> + + + <dd> <p>The {{MFT}} does not require the client to process the output for this stream. If the client continues to send input data without getting the output from this stream, the {{MFT}} simply discards the previous input.</p> </dd> + + + <dd> <p>The {{MFT}} might remove this output stream during streaming. This flag typically applies to demultiplexers, where the input data contains multiple streams that can start and stop during streaming. For more information, see <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Defines flags for the setting or testing the media type on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Test the proposed media type, but do not set it.</p> </dd> + + + + + <p> </p><p>Defines flags for processing output samples in a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Do not produce output for streams in which the <strong>pSample</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure is <strong>{{NULL}}</strong>. This flag is not valid unless the {{MFT}} has marked the output stream with the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> </dd> + + + <dd> <p>Regenerates the last output sample.</p> <p><strong>Note</strong> Requires Windows?8.</p> </dd> + + + + + <p> </p><p>Indicates the status of a call to <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> + <p>If the {{MFT}} sets this flag, the <strong>ProcessOutput</strong> method returns {{MF_E_TRANSFORM_STREAM_CHANGE}} and no output data is produced. The client should respond as follows:</p><ol> <li> <p>Call <strong>{{IMFTransform::GetStreamCount}}</strong> to get the new number of streams.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetStreamIDs}}</strong> to get the new stream identifiers.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetOutputAvailableType}}</strong> and <strong>{{IMFTransform::SetOutputType}}</strong> to set the media types on the new streams.</p> </li> </ol><p>Until these steps are completed, all further calls to <strong>ProcessOutput</strong> return {{MF_E_TRANSFORM_STREAM_CHANGE}}.</p> + + + + <p> </p><p>Not supported.</p><strong>Note</strong>??Earlier versions of this documentation described the <strong>_MFT_DRAIN_TYPE</strong> enumeration incorrectly. The enumeration is not supported. For more information, see <strong>{{MFT_MESSAGE_TYPE}}</strong>.? + + + + <p>Defines messages for a Media Foundation transform ({{MFT}}). To send a message to an {{MFT}}, call <strong>{{IMFTransform::ProcessMessage}}</strong>.</p> + <p>Some messages require specific actions from the {{MFT}}. These events have "{{MESSAGE}}" in the message name. Other messages are informational; they notify the {{MFT}} of some action by the client, and do not require any particular response from the {{MFT}}. These messages have "{{NOTIFY}}" in the messages name. Except where noted, an {{MFT}} should not rely on the client sending notification messages.</p> + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + <p>Specifies how to output a 3D stereoscopic video stream.</p> + <p>This enumeration is used with the {{MF_ENABLE_3DVIDEO_OUTPUT}} attribute.</p> + + + <dd> <p>Output the base view only. Discard the other view.</p> </dd> + + + <dd> <p>Output a stereo view (two buffers).</p> </dd> + + + + + + + + + + + <p> </p><p>Contains information about an input stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetInputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags in the <strong>dwFlags</strong> member.</p><ul> <li> <p>The {{MFT_INPUT_STREAM_REMOVABLE}} flag indicates that the stream can be deleted.</p> </li> <li> <p>The {{MFT_INPUT_STREAM_OPTIONAL}} flag indicates that the stream is optional and does not require a media type.</p> </li> </ul><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetInputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag in the <strong>dwFlags</strong> member. This flag indicates that the stream is optional and does not require a media type.</p><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetOutputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output buffer for a Media Foundation transform. This structure is used in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> + <p>You must provide an <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure for each selected output stream.</p><p>{{MFTs}} can support two different allocation models for output samples:</p><ul> <li> The {{MFT}} allocates the output sample. </li> <li> The client allocates the output sample. </li> </ul><p>To find which model the {{MFT}} supports for a given output stream, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> and check the value of <strong>dwFlags</strong>.</p><table> <tr><th>Flag</th><th>Allocation Model</th></tr> <tr><td>{{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}}</td><td>The {{MFT}} allocates the output samples for the stream. Set <strong>pSample</strong> to <strong>{{NULL}}</strong> for this stream.</td></tr> <tr><td>{{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}}</td><td>The {{MFT}} supports both allocation models.</td></tr> <tr><td>Neither (default)</td><td>The client must allocate the output samples for the stream.</td></tr> </table><p>?</p><p>The behavior of <strong>ProcessOutput</strong> depends on the initial value of <strong>pSample</strong> and the value of the <em>dwFlags</em> parameter in the <strong>ProcessOutput</strong> method.</p><ul> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> contains the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag, the {{MFT}} discards the output data.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. (To get the flags for the output stream, call the <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> method.)</p> </li> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> does not contain the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}}, the {{MFT}} provides a sample for the output data. The {{MFT}} sets <strong>pSample</strong> to point to the sample that it provides. The {{MFT}} can either allocate a new sample or re-use an input sample.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </li> <li> <p>If <strong>pSample</strong> is non-<strong>{{NULL}}</strong>, the {{MFT}} uses the sample provided by the caller.</p> <p>Restriction: This output stream must not have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> </li> </ul><p>Any other combinations are invalid and cause <strong>ProcessOutput</strong> to return {{E_INVALIDARG}}.</p><p>Each call to <strong>ProcessOutput</strong> can produce zero or more events and up to one sample per output stream.</p> + + + + <p>Not for application use.</p> + <p>This structure is used internally by the Microsoft Media Foundation {{AVStream}} proxy.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + + + + + + + <p>Implemented by all Media Foundation Transforms ({{MFTs}}).</p> + + + + <p> Gets the minimum and maximum number of input and output streams for this Media Foundation transform ({{MFT}}). </p> + <p> If the {{MFT}} has a fixed number of streams, the minimum and maximum values are the same. </p><p> It is not recommended to create an {{MFT}} that supports zero inputs or zero outputs. An {{MFT}} with no inputs or no outputs may not be compatible with the rest of the Media Foundation pipeline. You should create a Media Foundation sink or source for this purpose instead. </p><p> When an {{MFT}} is first created, it is not guaranteed to have the minimum number of streams. To find the actual number of streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamLimits}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the minimum number of input streams. </p> </dd> + + + <dd> <p> Receives the maximum number of input streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + <dd> <p> Receives the minimum number of output streams. </p> </dd> + + + <dd> <p> Receives the maximum number of output streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + + + <p> Gets the current number of input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> The number of streams includes unselected streams?that is, streams with no media type or a <strong>{{NULL}}</strong> media type.</p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamCount}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of input streams. </p> </dd> + + + <dd> <p> Receives the number of output streams. </p> </dd> + + + + + <p> Gets the stream identifiers for the input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> Stream identifiers are necessary because some {{MFTs}} can add or remove streams, so the index of a stream may not be unique. Therefore, <strong>{{IMFTransform}}</strong> methods that operate on streams take stream identifiers. </p><p>This method can return <strong>{{E_NOTIMPL}}</strong> if both of the following conditions are true:</p><ul> <li> The transform has a fixed number of streams. </li> <li> The streams are numbered consecutively from 0 to n ? 1, where n is the number of input streams or output streams. In other words, the first input stream is 0, the second is 1, and so on; and the first output stream is 0, the second is 1, and so on. </li> </ul><p>This method must be implemented if any of the following conditions is true:</p><ul> <li> The {{MFT}} can add or remove output streams. </li> <li> The {{MFT}} allows the client to add or remove input streams. </li> <li> The stream identifiers are not consecutive. </li> </ul><p> All input stream identifiers must be unique within an {{MFT}}, and all output stream identifiers must be unique. However, an input stream and an output stream can share the same identifier. </p><p> If the client adds an input stream, the client assigns the identifier, so the {{MFT}} must allow arbitrary identifiers, as long as they are unique. If the {{MFT}} creates an output stream, the {{MFT}} assigns the identifier. </p><p> By convention, if an {{MFT}} has exactly one fixed input stream and one fixed output stream, it should assign the identifier 0 to both streams. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamIDs}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. See Remarks. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> One or both of the arrays is too small. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of elements in the <em>pdwInputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the input stream identifiers. The array size must be at least equal to the number of input streams. To get the number of input streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p> <p>If the caller passes an array that is larger than the number of input streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + <dd> <p> Number of elements in the <em>pdwOutputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the output stream identifiers. The array size must be at least equal to the number of output streams. To get the number of output streams, call <strong>GetStreamCount</strong>. </p> <p>If the caller passes an array that is larger than the number of output streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + + + <p> Gets the buffer requirements and other information for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the input stream. </p> </dd> + + + + + <p> Gets the buffer requirements and other information for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the output stream. </p> </dd> + + + + + <p> Gets the global attribute store for this Media Foundation transform ({{MFT}}). </p> + <p> Use the <strong>{{IMFAttributes}}</strong> reference retrieved by this method to get or set attributes that apply to the entire {{MFT}}. To get the attribute store for an input stream, call <strong>{{IMFTransform::GetInputStreamAttributes}}</strong>. To get the attribute store for an output stream, call <strong>{{IMFTransform::GetOutputStreamAttributes}}</strong>. </p><p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. Exception: Hardware-based {{MFTs}} must implement this method. See Hardware {{MFTs}}.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support attributes. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support input stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support output stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Removes an input stream from this Media Foundation transform ({{MFT}}). </p> + <p> If the transform has a fixed number of input streams, the method returns <strong>{{E_NOTIMPL}}</strong>. </p><p> An {{MFT}} might support this method but not allow certain input streams to be removed. If an input stream can be removed, the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method returns the <strong>{{MFT_INPUT_STREAM_REMOVABLE}}</strong> flag for that stream. Otherwise, the stream cannot be removed, and the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. The method also fails if the {{MFT}} currently has the minimum number of input streams that it requires. To find the minimum number of streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If the transform still has unprocessed input for that stream, the method might succeed or it might return <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>. If the method succeeds, the {{MFT}} will continue to process the remaining input after the stream is removed. If the method returns <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>, you must clear the input buffers before removing the stream. To clear the input buffers, either call <strong>{{IMFTransform::ProcessOutput}}</strong> or else call <strong>{{IMFTransform::ProcessMessage}}</strong> with the <strong>{{MFT_MESSAGE_COMMAND_FLUSH}}</strong> to flush the {{MFT}}. Then call the <strong>DeleteInputStream</strong> again. An {{MFT}} should never discard input buffers when <strong>DeleteInputStream</strong> is called. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTDeleteInputStream}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The transform has a fixed number of input streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The stream is not removable, or the transform currently has the minimum number of input streams it can support. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong></dt> </dl> </td><td> <p> The transform has unprocessed input buffers for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifier of the input stream to remove. </p> </dd> + + + + + <p> Adds one or more new input streams to this Media Foundation transform ({{MFT}}). </p> + <p> If the new streams exceed the maximum number of input streams for this transform, the method returns <strong>{{E_INVALIDARG}}.</strong> To find the maximum number of input streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If any of the new stream identifiers conflicts with an existing input stream, the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTAddInputStreams}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} has a fixed number of input streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of streams to add. </p> </dd> + + + <dd> <p> Array of stream identifiers. The new stream identifiers must not match any existing input streams. </p> </dd> + + + + + <p> Gets an available media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each input stream and orders them by preference. This method enumerates the available media types for an input stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream might change the available types for another stream, or change the preference order. However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetInputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of input types until one or more output types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p><p>For encoders, after the output type is set, <strong>GetInputAvailableType</strong> must return a list of input types that are compatible with the current output type. This means that all types returned by <strong>GetInputAvailableType</strong> after the output type is set must be valid types for <strong>SetInputType</strong>.</p><p>Encoders should reject input types if the attributes of the input media type and output media type do not match, such as resolution setting with {{MF_MT_FRAME_SIZE}}, nominal range setting with {{MF_MT_VIDEO_NOMINAL_RANGE}}, or frame rate setting with {{MF_MT_FRAME_SIZE}}</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. </p> </dd> + + + + + <p> Gets an available media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each output stream and orders them by preference. This method enumerates the available media types for an output stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns {{MF_}}<strong>{{E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream can change the available types for another stream (or change the preference order). However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of output types until one or more input types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function. </p><p> This method can return a <em>partial</em> media type. A partial media type contains an incomplete description of a format, and is used to provide a hint to the caller. For example, a partial type might include just the major type and subtype {{GUIDs}}. However, after the client sets the input types on the {{MFT}}, the {{MFT}} should generally return at least one complete output type, which can be used without further modification. For more information, see Complete and Partial Media Types.</p><p>Some {{MFTs}} cannot provide an accurate list of output types until the {{MFT}} receives the first input sample. For example, the {{MFT}} might need to read the first packet header to deduce the format. An {{MFT}} should handle this situation as follows:</p><ol> <li> Before the {{MFT}} receives any input, it offers a list of one or more output types that it could possibly produce. For example, an {{MPEG}}-2 decoder might return a media type that describes the {{MPEG}}-2 main profile/main level. </li> <li> The client selects one of these types (generally the first) and sets it on the output stream. </li> <li> The client delivers the first input sample by calling <strong>{{IMFTransform::ProcessInput}}</strong>. </li> <li> If the output type does not conform to the input data, the transform signals a format change in the <strong>ProcessOutput</strong> method. For more information about format changes, see <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> The calls <strong>GetOutputAvailableType</strong> again. At this point, the method should return an updated list of types that reflects the input data. </li> <li> The client selects a new output type from this list and calls <strong>SetOutputType</strong>. </li> </ol><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more output types before setting the input type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetInputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more input types before setting the output type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p>If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The transform cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Gets the current media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified input stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetInputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The input media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the current media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified output stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The output media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Queries whether an input stream on this Media Foundation transform ({{MFT}}) can accept more data. </p> + <p> If the method returns the <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong> flag, you can deliver an input sample to the specified stream by calling <strong>{{IMFTransform::ProcessInput}}</strong>. If the method succeeds but does not return any flags in the <em>pdwFlags</em> parameter, it means the input stream already has as much data as it can accept. </p><p> Use this method to test whether the input stream is ready to accept more data, without incurring the overhead of allocating a new sample and calling <strong>ProcessInput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output (or both). </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a member of the <strong>_MFT_INPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong>, the stream specified in <em>dwInputStreamID</em> can accept more input data. </p> </dd> + + + + + <p> Queries whether the Media Foundation transform ({{MFT}}) is ready to produce output data. </p> + <p> If the method returns the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag, it means you can generate one or more output samples by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> {{MFTs}} are not required to implement this method. If the method returns <strong>{{E_NOTIMPL}}</strong>, you must call <strong>ProcessOutput</strong> to determine whether the transform has output data. </p><p> If the {{MFT}} has more than one output stream, but it does not produce samples at the same time for each stream, it can set the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag when just one stream is ready. However, if the {{MFT}} normally produces samples at the same time for each output stream, it should not set this flag until all streams are ready. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a member of the <strong>_MFT_OUTPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong>, the {{MFT}} can produce an output sample. </p> </dd> + + + + + <p> Sets the range of time stamps the client needs for output. </p> + <p> This method can be used to optimize preroll, especially in formats that have gaps between time stamps, or formats where the data must start on a sync point, such as {{MPEG}}-2. Calling this method is optional, and implementation of this method by an {{MFT}} is optional. If the {{MFT}} does not implement the method, the return value is <strong>{{E_NOTIMPL}}</strong>.</p><p> If an {{MFT}} implements this method, it must limit its output data to the range of times specified by <em>hnsLowerBound</em> and <em>hnsUpperBound</em>. The {{MFT}} discards any input data that is not needed to produce output within this range. If the sample boundaries do not exactly match the range, the {{MFT}} should split the output samples, if possible. Otherwise, the output samples can overlap the range. </p><p> For example, suppose the output range is 100 to 150 milliseconds (ms), and the output format is video with each frame lasting 33 ms. A sample with a time stamp of 67 ms overlaps the range (67 + 33 = 100) and is produced as output. A sample with a time stamp of 66 ms is discarded (66 + 33 = 99). Similarly, a sample with a time stamp of 150 ms is produced as output, but a sample with a time stamp of 151 is discarded.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputBounds}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the earliest time stamp. The Media Foundation transform ({{MFT}}) will accept input until it can produce an output sample that begins at this time; or until it can produce a sample that ends at this time or later. If there is no lower bound, use the value <strong>{{MFT_OUTPUT_BOUND_LOWER_UNBOUNDED}}</strong>. </p> </dd> + + + <dd> <p> Specifies the latest time stamp. The {{MFT}} will not produce an output sample with time stamps later than this time. If there is no upper bound, use the value <strong>{{MFT_OUTPUT_BOUND_UPPER_UNBOUNDED}}</strong>. </p> </dd> + + + + + <p> Sends an event to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> An {{MFT}} can handle sending the event downstream, or it can let the pipeline do this, as indicated by the return value: </p><ul> <li><strong>{{E_NOTIMPL}}</strong>: The {{MFT}} ignores all events, and the pipeline should send all events downstream. After the pipeline receives this return value, it might not call <strong>ProcessEvent</strong> again. </li> <li><strong>{{S_OK}}</strong>: The {{MFT}} has examined this event, but the pipeline should send the event downstream. Internally, the {{MFT}} might respond to the event in some way, or it might ignore the event. </li> <li><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong>: The pipeline should not propagate this event downstream. Either the {{MFT}} will send the event downstream, or else the {{MFT}} will consume the event and not send it downstream. The {{MFT}} should only consume the event if the event should stop at this {{MFT}} and not travel any further downstream. But in most cases, the event should travel downstream. </li> </ul><p> To send the event downstream, the {{MFT}} adds the event to the collection object that is provided by the client in the <strong>pEvents</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure, when the client calls <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> Events must be serialized with the samples that come before and after them. Attach the event to the output sample that follows the event. (The pipeline will process the event first, and then the sample.) If an {{MFT}} holds back one or more samples between calls to <strong>{{IMFTransform::ProcessInput}}</strong> and <strong>ProcessOutput</strong>, the {{MFT}} should handle sending all events downstream, because in this situation the pipeline cannot correlate input samples with output samples. </p><p> If an {{MFT}} does not hold back samples and does not need to examine any events, it can return <strong>{{E_NOTIMPL}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessEvent}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong></dt> </dl> </td><td> <p> The pipeline should not propagate the event. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of an event object. </p> </dd> + + + + + <p> Sends a message to the Media Foundation transform ({{MFT}}). </p> + <p> Before calling this method, set the media types on all input and output streams. </p><p> The {{MFT}} might ignore certain message types. If so, the method returns <strong>{{S_OK}}</strong>. An error code indicates that the transform handles this message type but was unable to process the message in this instance. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessMessage}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. Applies to the <strong>{{MFT_MESSAGE_NOTIFY_END_OF_STREAM}}</strong> message. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The message to send, specified as a member of the <strong>{{MFT_MESSAGE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Message parameter. The meaning of this parameter depends on the message type. </p> </dd> + + + + + <p> Delivers data to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> In most cases, if the method succeeds, the {{MFT}} stores the sample and holds a reference count on the <strong>{{IMFSample}}</strong> reference. Do not re-use the sample until the {{MFT}} releases the sample. Instead of storing the sample, however, an {{MFT}} might copy the sample data into a new buffer. In that case, the {{MFT}} should set the <strong>{{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}</strong> flag in the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method. </p><p> If the {{MFT}} already has enough input data to produce an output sample, it does not accept new input data, and <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. At that point, the client should clear the pending input data by doing one of the following: </p><ul> <li> Generate new output by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> Flush the input data by calling <strong>{{IMFTransform::ProcessMessage}}</strong> with the {{MFT_}}<strong>{{MESSAGE_COMMAND_FLUSH}}</strong> message. </li> </ul><p> An exception to this rule is the <strong>{{MFT_OUTPUT_STREAM_LAZY_READ}}</strong> flag. When this flag is present, the transform will discard stored samples if you give it more input. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. A transform should never queue any more input data than is required to produce the correct output. </p><p> An {{MFT}} can process the input data in the <strong>ProcessInput</strong> method. However, most {{MFTs}} wait until the client calls <strong>ProcessOutput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. It should never be in both states or neither state. An {{MFT}} should only accept as much input as it needs to generate at least one output sample, at which point <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. When <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>, the client can assume that the {{MFT}} is ready to produce output. </p><p> If an {{MFT}} encounters a non-fatal error in the input data, it can simply drop the data and attempt to recover when it gets the more input data. To request more input data, the {{MFT}} returns <strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong> from the <strong>{{IMFTransform::ProcessOutput}}</strong> method. If the {{MFT}} drops any data, it should set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute attribute on the next output sample, to notify the caller that there is a gap in the data stream. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessInput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The input sample requires a valid sample duration. To set the duration, call <strong>{{IMFSample::SetSampleDuration}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid durations. Some {{MFTs}} do not require sample durations.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The input sample requires a time stamp. To set the time stamp, call <strong>{{IMFSample::SetSampleTime}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid time stamps. Some {{MFTs}} do not require time stamps.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> The transform cannot process more input at this time. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The media type is not supported for DirectX Video Acceleration ({{DXVA}}). A {{DXVA}}-enabled decoder might return this error code. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessInput}}</strong>, unlike the <strong>{{IMediaObject::ProcessInput}}</strong> method.? + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The sample must contain at least one media buffer that contains valid input data. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + + + <p> Generates output from the current input data. </p> + <p> The size of the <em>pOutputSamples</em> array must be equal to or greater than the number of <em>selected</em> output streams. The number of selected output streams equals the total number of output streams minus the number of <em>deselected</em> streams. A stream is deselected if it has the <strong>{{MFT_OUTPUT_STREAM_OPTIONAL}}</strong> flag and the caller does not set a media type (or sets the media type to <strong>{{NULL}}</strong>). For more information, see <strong>_MFT_OUTPUT_STREAM_INFO_FLAGS</strong> enumeration. </p><p>This method generates output samples and can also generate events. If the method succeeds, at least one of the following conditions is true:</p><ul> <li> One or more samples in the <em>pOutputSamples</em> array contains output data. </li> <li> One or more members of the <em>pOutputSamples</em> array contains a non-empty collection of events. </li> </ul><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including Mftransform.h, this method is renamed <strong>{{MFTProcessOutput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The <strong>ProcessOutput</strong> method was called on an asynchronous {{MFT}} that was not expecting this method call.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier in the <strong>dwStreamID</strong> member of one or more <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong></dt> </dl> </td><td> <p> The transform cannot produce output data until it receives more input data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_STREAM_CHANGE}}</strong></dt> </dl> </td><td> <p> The format has changed on an output stream, or there is a new preferred format, or there is a new output stream. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the media type on one or more streams of the {{MFT}}. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessOutput}}</strong>, unlike the <strong>{{IMediaObject::ProcessOutput}}</strong> method.? + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_FLAGS</strong> enumeration. </p> </dd> + + + <dd> <p> Number of elements in the <em>pOutputSamples</em> array. The value must be at least 1. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures, allocated by the caller. The {{MFT}} uses this array to return output data to the caller. </p> </dd> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_STATUS</strong> enumeration. </p> </dd> + + + + + <p> </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>The <strong>SetInputStreamState</strong> method sets the Device {{MFT}} input stream state and media type.</p> + <p>This interface function helps to transition the input stream to a specified state with a specified media type set on the input stream. This will be used by device transform manager ({{DTM}}) when the Device {{MFT}} requests a specific input stream?s state and media type to be changed. Device {{MFT}} would need to request such a change when one of the Device {{MFT}}'s output changes.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, if Output 2?s media type changes to 1080p, Device {{MFT}} has to change Input 1's media type to 1080p. To achieve this, Device {{MFT}} should request {{DTM}} to call this method using the {{METransformInputStreamStateChanged}} message. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Initialization succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>When <strong>{{S_OK}}</strong> is returned, perform the state change operation. Otherwise, this contains an error that occurred while setting the media type on the devproxy output pin. In this case, propagate the error appropriately.</p> </dd> + + + + + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + + + + + + + + + + + + + <p>Creates a generic activation object for Media Foundation transforms ({{MFTs}}).</p> + <p>Most applications will not use this function; it is used internally by the <strong>{{MFTEnumEx}}</strong> function. </p><p>An <em>activation object</em> is a helper object that creates another object, somewhat similar to a class factory. The <strong>{{MFCreateTransformActivate}}</strong> function creates an activation object for {{MFTs}}. Before this activation object can create an {{MFT}}, the caller must initialize the activation object by setting one or more attributes on it.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MFT_TRANSFORM_CLSID_Attribute}} </td><td>Required. Contains the {{CLSID}} of the {{MFT}}. The activation object creates the {{MFT}} by passing this {{CLSID}} to the <strong>CoCreateInstance</strong> function.</td></tr> <tr><td> {{MF_TRANSFORM_CATEGORY_Attribute}} </td><td>Optional. Specifies the category of the {{MFT}}.</td></tr> <tr><td> {{MF_TRANSFORM_FLAGS_Attribute}} </td><td>Contains various flags that describe the {{MFT}}. For hardware-based {{MFTs}}, set the <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flag. Otherwise, this attribute is optional.</td></tr> <tr><td> {{MFT_CODEC_MERIT_Attribute}} </td><td> <p>Optional. Contains the merit value of a hardware codec.</p> <p>If this attribute is set and its value is greater than zero, the activation object calls <strong>{{MFGetMFTMerit}}</strong> to get the trusted merit value for the {{MFT}}. If the trusted merit is less than the value of this attribute, the activation object's <strong>{{IMFActivate::ActivateObject}}</strong> method fails and returns <strong>{{MF_E_INVALID_CODEC_MERIT}}</strong>.</p> </td></tr> <tr><td> {{MFT_ENUM_HARDWARE_URL_Attribute}} </td><td>Required for hardware-based {{MFTs}}. Specifies the symbolic link for the hardware device. The device proxy uses this value to configure the {{MFT}}.</td></tr> <tr><td> {{MFT_FIELDOFUSE_UNLOCK_Attribute}} </td><td> <p>Optional. Contains an <strong>{{IMFFieldOfUseMFTUnlock}}</strong> reference, which can be used to unlock the {{MFT}}. The <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface is used with {{MFTs}} that have usage restrictions.</p> <p>If this attribute is set and the {{MF_TRANSFORM_FLAGS_Attribute}} attribute contains the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag, the activation object calls <strong>{{IMFFieldOfUseMFTUnlock::Unlock}}</strong> when it creates the {{MFT}}. An application can also set the {{MFT_FIELDOFUSE_UNLOCK_Attribute}} attribute without setting the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag. In that case, the application must call <strong>Unlock</strong>.</p> </td></tr> <tr><td> {{MFT_PREFERRED_ENCODER_PROFILE}} </td><td> <p>Optional. Contains the encoding profile for an encoder. The value of this attribute is an <strong>{{IMFAttributes}}</strong> reference.</p> <p>If this attribute is set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object uses the encoding profile to configure the {{MFT}}. The {{MFT}} must expose either <strong>{{ICodecAPI}}</strong> or <strong>{{IPropertyStore}}</strong> for this purpose.</p> </td></tr> <tr><td> {{MFT_PREFERRED_OUTPUTTYPE_Attribute}} </td><td> <p>Optional. Specifies the preferred output format for an encoder.</p> <p>If this attribute set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object sets this media type on the {{MFT}}.</p> </td></tr> </table><p>?</p><p>For more information about activation objects, see Activation Objects. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</code> enumeration defines flags that describe an input buffer.</p> + + + <dd> <p>The beginning of the data is a synchronization point.</p> </dd> + + + <dd> <p>The buffer's time stamp is valid.</p> <p>The buffer's indicated time length is valid.</p> </dd> + + + <dd> <p>The buffer's indicated time length is valid.</p> </dd> + + + + + + + + <p>Media Foundation transforms ({{MFTs}}) are an evolution of the transform model first introduced with DirectX Media Objects ({{DMOs}}). This topic summarizes the main ways in which {{MFTs}} differ from {{DMOs}}. Read this topic if you are already familiar with the {{DMO}} interfaces, or if you want to convert an existing {{DMO}} into an {{MFT}}.</p><p>This topic contains the following sections:</p><p> </p><ul> <li>{{Number}}</li> <li>{{Format}}</li> <li>{{Streaming}}<ul> <li>{{Allocating}}</li> <li>{{Processing}}</li> <li>{{Flushing}}</li> <li>{{Stream}}</li> </ul> </li> <li>{{Miscellaneous}}</li> <li>{{Flags}}<ul> <li>{{ProcessInput}}</li> <li>{{ProcessOutput}}</li> <li>{{GetInputStatus}}</li> <li>{{GetOutputStatus}}</li> <li>{{GetInputStreamInfo}}</li> <li>{{GetOutputStreamInfo}}</li> <li>{{SetInputType/SetOutputType}}</li> </ul> </li> <li>{{Error}}</li> <li>{{Creating}}</li> <li>{{Related}}</li> </ul> + + + + <p> </p><p>The <code>{{DMO_INPUT_STREAM_INFO_FLAGS}}</code> enumeration defines flags that describe an input stream.</p> + + + <dd> <p>The stream requires whole samples. Samples must not span multiple buffers, and buffers must not contain partial samples.</p> </dd> + + + <dd> <p>Each buffer must contain exactly one sample.</p> </dd> + + + <dd> <p>All the samples in this stream must be the same size.</p> </dd> + + + <dd> <p>The {{DMO}} performs lookahead on the incoming data, and may hold multiple input buffers for this stream.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{DMO_SET_TYPE_FLAGS}}</code> enumeration defines flags for setting the media type on a stream.</p> + <p>The {{DMO_SET_TYPEF_TEST_ONLY}} and {{DMO_SET_TYPEF_CLEAR}} flags are mutually exclusive. Do not set both flags.</p> + + + <dd> <p>Test the media type but do not set it.</p> </dd> + + + <dd> <p>Clear the media type that was set for the stream.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_PROCESS_OUTPUT_FLAGS}}</code> enumeration defines flags that specify output processing requests.</p> + + + <dd> <p>Discard the output when the reference to the output buffer is <strong>{{NULL}}</strong>.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <strong>{{DMO_MEDIA_TYPE}}</strong> structure describes the format of the data used by a stream in a Microsoft DirectX Media Object ({{DMO}}).</p> + <p>This structure is identical to the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The <strong>bFixedSizeSamples</strong>, <strong>bTemporalCompression</strong>, and <strong>lSampleSize</strong> members are for compatibility with DirectShow. Other {{DMO}} clients are not required to use them.</p> + + + <dd> <p>Major type {{GUID}} of the stream.</p> </dd> + + + <dd> <p>Subtype {{GUID}} of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are of a fixed size. This field is informational only. For audio, it is generally set to <strong>{{TRUE}}</strong>. For video, it is usually <strong>{{TRUE}}</strong> for uncompressed video and <strong>{{FALSE}}</strong> for compressed video.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are compressed using temporal (interframe) compression. (A value of <strong>{{TRUE}}</strong> indicates that not all frames are key frames.) This field is informational only.</p> </dd> + + + <dd> <p>Size of the sample in bytes. For compressed data, the value can be zero.</p> </dd> + + + <dd> <p>{{GUID}} specifying the format type. The <strong>pbFormat</strong> member points to the corresponding format structure. Format types include the following.</p> <table> <tr><th>Format type</th><th>Format structure</th></tr> <tr><td><dl> <dt><strong>{{FORMAT_DvInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{DVINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEG2Video}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG2VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEGVideo}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG1VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_None}}</strong></dt> </dl> </td><td> <p>None.</p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER2}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </td><td> <p> <strong>{{WAVEFORMATEX}}</strong> </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Not used. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the format block of the media type.</p> </dd> + + + <dd> <p>Pointer to the format structure. The structure type is specified by the <strong>formattype</strong> member. The format structure must be present, unless <strong>formattype</strong> is {{GUID_NULL}} or {{FORMAT_None}}.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{IMediaBuffer}}</code> interface provides methods for manipulating a data buffer. Buffers passed to the <strong>{{IMediaObject::ProcessInput}}</strong> and <strong>ProcessOutput</strong> methods must implement this interface.</p> + + + + + + + + + + + + + <p> </p><p>The <code>{{IMediaObject}}</code> interface provides methods for manipulating a Microsoft DirectX Media Object ({{DMO}}).</p> + + + + + + + + + + <p> </p><p>The <code>GetOutputStreamInfo</code> method retrieves information about an output stream; for example, whether the stream is discardable, and whether it uses a fixed sample size. This information never changes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a bitwise combination of zero or more <strong>{{DMO_OUTPUT_STREAM_INFO_FLAGS}}</strong> flags.</p> </dd> + + + + + <p> </p><p>The <code>GetInputType</code> method retrieves a preferred media type for a specified input stream.</p> + <p>Call this method to enumerate an input stream's preferred media types. The {{DMO}} assigns each media type an index value in order of preference. The most preferred type has an index of zero. To enumerate all the types, make successive calls while incrementing the type index until the method returns {{DMO_E_NO_MORE_ITEMS}}. The {{DMO}} is not guaranteed to enumerate every media type that it supports.</p><p>The format block in the returned type might be <strong>{{NULL}}</strong>. If so, the format type is {{GUID_NULL}}. Check the format type before dereferencing the format block.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block. (This function is also safe to call when the format block is <strong>{{NULL}}</strong>.)</p><p>To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method. Setting the media type on one stream can change another stream's preferred types. In fact, a stream might not have a preferred type until the type is set on another stream. For example, a decoder might not have a preferred output type until the input type is set. However, the {{DMO}} is not required to update its preferred types dynamically in this fashion. Thus, the types returned by this method are not guaranteed to be valid; they might fail when used in the <strong>SetInputType</strong> method.</p><p>To test whether a particular media type is acceptable, call <strong>SetInputType</strong> with the {{DMO_SET_TYPEF_TEST_ONLY}} flag.</p><p>To test whether the <em>dwTypeIndex</em> parameter is in range, set <em>pmt</em> to <strong>{{NULL}}</strong>. The method returns {{S_OK}} if the index is in range, or {{DMO_E_NO_MORE_ITEMS}} if the index is out of range.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NO_MORE_ITEMS}}</strong></dt> </dl> </td><td> <p>Type index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Zero-based index on the set of acceptable media types.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller, or <strong>{{NULL}}</strong>. If this parameter is non-<strong>{{NULL}}</strong>, the method fills the structure with the media type. You can use the value <strong>{{NULL}}</strong> to test whether the type index is in range, by checking the return code.</p> </dd> + + + + + + + + <p> </p><p>The <code>SetInputType</code> method sets the media type on an input stream, or tests whether a media type is acceptable.</p> + <p>Call this method to test, set, or clear the media type on an input stream:</p><ul> <li>To test the media type without setting it, use the {{DMO_SET_TYPEF_TEST_ONLY}} flag. If the media type is not acceptable, the method returns {{S_FALSE}}.</li> <li>To set the media type, set <em>dwFlags</em> to zero. If the media type is not acceptable, the method returns {{DMO_E_TYPE_NOT_ACCEPTED}}.</li> <li>To clear the current media type (if any), use the {{DMO_SET_TYPEF_CLEAR}} flag and set <em>pmt</em> to <strong>{{NULL}}</strong>. When the method returns, the stream no longer has a media type. The {{DMO}} cannot process samples until the application sets a new media type.</li> </ul><p>The media types that are currently set on other streams can affect whether the media type is acceptable.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_ACCEPTED}}</strong></dt> </dl> </td><td> <p>Media type was not accepted</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Media type is not acceptable</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Media type was set successfully, or is acceptable</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure that specifies the media type.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_SET_TYPE_FLAGS}}</strong> enumeration.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputCurrentType</code> method retrieves the media type that was set for an input stream, if any.</p> + <p>The caller must set the media type for the stream before calling this method. To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller. The method fills the structure with the media type.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputSizeInfo</code> method retrieves the buffer requirements for a specified input stream.</p> + <p>The buffer requirements may depend on the media types of the various streams. Before calling this method, set the media type of each stream by calling the <strong>{{IMediaObject::SetInputType}}</strong> and <strong>{{IMediaObject::SetOutputType}}</strong> methods. If the media types have not been set, this method might return an error.</p><p>If the {{DMO}} performs lookahead on the input stream, it returns the {{DMO_INPUT_STREAMF_HOLDS_BUFFERS}} flag in the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method. During processing, the {{DMO}} holds up to the number of bytes indicated by the <em>pcbMaxLookahead</em> parameter. The application must allocate enough buffers for the {{DMO}} to hold this much data.</p><p>A buffer is <em>aligned</em> if the buffer's start address is a multiple of <em>*pcbAlignment</em>. The alignment must be a power of two. Depending on the microprocessor, reads and writes to an aligned buffer might be faster than to an unaligned buffer. Also, some microprocessors do not support unaligned reads and writes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the minimum size of an input buffer for this stream, in bytes.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the maximum amount of data that the {{DMO}} will hold for lookahead, in bytes. If the {{DMO}} does not perform lookahead on the stream, the value is zero.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required buffer alignment, in bytes. If the input stream has no alignment requirement, the value is 1.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>Flush</code> method flushes all internally buffered data.</p> + <p>The {{DMO}} performs the following actions when this method is called:</p><ul> <li>Releases any <strong>{{IMediaBuffer}}</strong> references it holds.</li> <li>Discards any values that specify the time stamp or sample length for a media buffer.</li> <li>Reinitializes any internal states that depend on the contents of a media sample.</li> </ul><p>Media types, maximum latency, and locked state do not change.</p><p>When the method returns, every input stream accepts data. Output streams cannot produce any data until the application calls the <strong>{{IMediaObject::ProcessInput}}</strong> method on at least one input stream.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + + <p> </p><p>The <code>Discontinuity</code> method signals a discontinuity on the specified input stream.</p> + <p>A discontinuity represents a break in the input. A discontinuity might occur because no more data is expected, the format is changing, or there is a gap in the data. After a discontinuity, the {{DMO}} does not accept further input on that stream until all pending data has been processed. The application should call the <strong>{{IMediaObject::ProcessOutput}}</strong> method until none of the streams returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag.</p><p>This method might fail if it is called before the client sets the input and output types on the {{DMO}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The {{DMO}} is not accepting input.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The input and output types have not been set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>ProcessInput</code> method delivers a buffer to the specified input stream.</p> + <p>The input buffer specified in the <em>pBuffer</em> parameter is read-only. The {{DMO}} will not modify the data in this buffer. All write operations occur on the output buffers, which are given in a separate call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>If the {{DMO}} does not process all the data in the buffer, it keeps a reference count on the buffer. It releases the buffer once it has generated all the output, unless it needs to perform lookahead on the data. (To determine whether a {{DMO}} performs lookahead, call the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method.)</p><p>If this method returns {{DMO_E_NOTACCEPTING}}, call <strong>ProcessOutput</strong> until the input stream can accept more data. To determine whether the stream can accept more data, call the <strong>{{IMediaObject::GetInputStatus}}</strong> method.</p><p>If the method returns {{S_FALSE}}, no output was generated from this input and the application does not need to call <strong>ProcessOutput</strong>. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>Data cannot be accepted.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output to process.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to the buffer's <strong>{{IMediaBuffer}}</strong> interface.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Time stamp that specifies the start time of the data in the buffer. If the buffer has a valid time stamp, set the {{DMO_INPUT_DATA_BUFFERF_TIME}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + <dd> <p>Reference time specifying the duration of the data in the buffer. If this value is valid, set the {{DMO_INPUT_DATA_BUFFERF_TIMELENGTH}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + + + <p> </p><p>The <code>ProcessOutput</code> method generates output from the current input data.</p> + <p>The <em>pOutputBuffers</em> parameter points to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures. The application must allocate one structure for each output stream. To determine the number of output streams, call the <strong>{{IMediaObject::GetStreamCount}}</strong> method. Set the <em>cOutputBufferCount</em> parameter to this number.</p><p>Each <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure contains a reference to a buffer's <strong>{{IMediaBuffer}}</strong> interface. The application allocates these buffers. The other members of the structure are status fields. The {{DMO}} sets these fields if the method succeeds. If the method fails, their values are undefined.</p><p>When the application calls <code>ProcessOutput</code>, the {{DMO}} processes as much input data as possible. It writes the output data to the output buffers, starting from the end of the data in each buffer. (To find the end of the data, call the <strong>{{IMediaBuffer::GetBufferAndLength}}</strong> method.) The {{DMO}} never holds a reference count on an output buffer.</p><p>If the {{DMO}} fills an entire output buffer and still has input data to process, the {{DMO}} returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag in the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure. The application should check for this flag by testing the <strong>dwStatus</strong> member of each structure.</p><p>If the method returns {{S_FALSE}}, no output was generated. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p><p><strong>Discarding data:</strong></p><p>You can discard data from a stream by setting the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <em>dwFlags</em> parameter. For each stream that you want to discard, set the <strong>pBuffer</strong> member of the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure to <strong>{{NULL}}</strong>.</p><p>For each stream in which <strong>pBuffer</strong> is <strong>{{NULL}}</strong>:</p><ul> <li>If the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag is set, and the stream is discardable or optional, the {{DMO}} discards the data.</li> <li>If the flag is set but the stream is neither discardable nor optional, the {{DMO}} discards the data if possible. It is not guaranteed to discard the data.</li> <li>If the flag is not set, the {{DMO}} does not produce output data for that stream, but does not discard the data.</li> </ul><p>To check whether a stream is discardable or optional, call the <strong>{{IMediaObject::GetOutputStreamInfo}}</strong> method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output was generated</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_PROCESS_OUTPUT_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Number of output buffers.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures containing the output buffers. Specify the size of the array in the <em>cOutputBufferCount</em> parameter.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a reserved value (zero). The application should ignore this value.</p> </dd> + + + + + <p> </p><p>The <code>Lock</code> method acquires or releases a lock on the {{DMO}}. Call this method to keep the {{DMO}} serialized when performing multiple operations.</p> + <p>This method prevents other threads from calling methods on the {{DMO}}. If another thread calls a method on the {{DMO}}, the thread blocks until the lock is released.</p><p>If you are using the Active Template Library ({{ATL}}) to implement a {{DMO}}, the name of the Lock method conflicts with the <strong>{{CComObjectRootEx::Lock}}</strong> method. To work around this problem, define the preprocessor symbol {{FIX_LOCK_NAME}} before including the header file Dmo.h:</p><pre> #define {{FIX_LOCK_NAME}} +#include &lt;dmo.h&gt; +</pre><p>This directive causes the preprocessor to rename the <strong>{{IMediaObject}}</strong> method to <em>{{DMOLock}}</em>. In your {{DMO}}, implement the method as <em>{{DMOLock}}</em>. In your implementation, call the {{ATL}} <strong>Lock</strong> or <strong>Unlock</strong> method, depending on the value of <em>bLock</em>. Applications can still invoke the method using the name <em>Lock</em> because the vtable order does not change.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Value that specifies whether to acquire or release the lock. If the value is non-zero, a lock is acquired. If the value is zero, the lock is released.</p> </dd> + + + + + + + + <p> </p><p>The <code>Next</code> method retrieves a specified number of items in the enumeration sequence.</p> + <p>If the method succeeds, the arrays given by the <em>pCLSID</em> and <em>Names</em> parameters are filled with {{CLSIDs}} and wide-character strings. The value of *<em>pcItemsFetched</em> specifies the number of items returned in these arrays.</p><p>The method returns {{S_OK}} if it retrieves the requested number of items (in other words, if *<em>pcItemsFetched</em> equals <em>cItemsToFetch</em>). Otherwise, it returns {{S_FALSE}} or an error code.</p><p>The caller must free the memory allocated for each string returned in the <em>Names</em> parameter, using the <strong>CoTaskMemFree</strong> function.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Retrieved fewer items than requested.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Retrieved the requested number of items.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of items to retrieve.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the {{CLSIDs}} of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the friendly names of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the actual number of items retrieved. Can be <strong>{{NULL}}</strong> if <em>cItemsToFetch</em> equals 1.</p> </dd> + + + + + + + + <p> </p><p>The <code>Reset</code> method resets the enumeration sequence to the beginning.</p> + <p>Returns {{S_OK}}.</p> + + + + + + + + + + + + + <p> </p><p>The <code>Clone</code> method creates a copy of the {{DMO}} in its current state.</p> + <p>If the method succeeds, the <strong>{{IMediaObjectInPlace}}</strong> interface that it returns has an outstanding reference count. Be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Address of a reference to receive the new {{DMO}}'s <strong>{{IMediaObjectInPlace}}</strong> interface.</p> </dd> + + + + + <p> </p><p>The <code>GetLatency</code> method retrieves the latency introduced by this {{DMO}}.</p> + <p>This method returns the average time required to process each buffer. This value usually depends on factors in the run-time environment, such as the processor speed and the {{CPU}} load. One possible way to implement this method is for the {{DMO}} to keep a running average based on historical data.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Pointer to a variable that receives the latency, in 100-nanosecond units.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>The <code>GetCurrentOperationMode</code> method retrieves the optimization features in effect.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the current features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>The <code>GetCurrentSampleRequirements</code> method retrieves the optimization features required to process the next sample, given the features already agreed to by the application.</p> + <p>After an application calls the <strong>{{IDMOVideoOutputOptimizations::SetOperationMode}}</strong> method, it must provide all the features it has agreed to. However, the {{DMO}} might not require every feature on every sample. This method enables the {{DMO}} to waive an agreed-upon feature for one sample.</p><p>Before processing a sample, the application can call this method. If the {{DMO}} does not require a given feature in order to process the next sample, it omits the corresponding flag from the <em>pdwRequestedFeatures</em> parameter. For the next sample only, the application can ignore the feature. The results of this method are valid only for the next call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>The {{DMO}} will return only the flags that were agreed to in the <strong>SetOperationMode</strong> method. In other words, you cannot dynamically enable new features with this method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Defines error status codes for the Media Engine.</p> + <p>The values greater than zero correspond to error codes defined for the <strong>MediaError</strong> object in {{HTML5}}.</p> + + + <dd> <p>No error.</p> </dd> + + + <dd> <p>The process of fetching the media resource was stopped at the user's request. </p> </dd> + + + <dd> <p>A network error occurred while fetching the media resource. </p> </dd> + + + <dd> <p>An error occurred while decoding the media resource. </p> </dd> + + + <dd> <p>The media resource is not supported. </p> </dd> + + + <dd> <p>An error occurred while encrypting the media resource.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines event codes for the Media Engine. </p> + <p>The application receives Media Engine events through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. The <strong>EventNotify</strong> method includes two event parameters, <em>param1</em> and <em>param2</em>. The meaning of the parameters depends on the event code. If the event description does not list any parameters, ignore the values of <em>param1</em> and <em>param2</em>.</p><p>Values below 1000 correspond to events defined in {{HTML}} 5 for media elements.</p> + + + <dd> <p>The Media Engine has started to load the source. See <strong>{{IMFMediaEngine::Load}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine is loading the source.</p> </dd> + + + <dd> <p>The Media Engine has suspended a load operation.</p> </dd> + + + <dd> <p>The Media Engine cancelled a load operation that was in progress. </p> </dd> + + + <dd> <p>An error occurred.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A member of the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</td></tr> <tr><td><em>param2</em></td><td>An <strong>{{HRESULT}}</strong> error code, or zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine has switched to the <strong>{{MF_MEDIA_ENGINE_NETWORK_EMPTY}}</strong> state. This can occur when the <strong>{{IMFMediaEngine::Load}}</strong> method is called, or if an error occurs during the <strong>Load</strong> method. See <strong>{{IMFMediaEngine::GetNetworkState}}</strong>.</p> </dd> + + + <dd> <p>The <strong>Load</strong> algorithm is stalled, waiting for data.</p> </dd> + + + <dd> <p>The Media Engine is switching to the playing state. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>The media engine has paused. See <strong>{{IMFMediaEngine::Pause}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough source data to determine the duration and dimensions of the source.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough data to render some content (for example, a video frame).</p> </dd> + + + <dd> <p>Playback has stopped because the next frame is not available.</p> </dd> + + + <dd> <p>Playback has started. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>Playback can start, but the Media Engine might need to stop to buffer more data.</p> </dd> + + + <dd> <p>The Media Engine can probably play through to the end of the resource, without stopping to buffer data.</p> </dd> + + + <dd> <p>The Media Engine has started seeking to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has seeked to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The playback position has changed. See <strong>{{IMFMediaEngine::GetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>Playback has reached the end of the source. This event is not sent if the <strong>GetLoop</strong>is <strong>{{TRUE}}</strong>.</p> </dd> + + + <dd> <p>The playback rate has changed. See <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> </dd> + + + <dd> <p>The duration of the media source has changed. See <strong>{{IMFMediaEngine::GetDuration}}</strong>.</p> </dd> + + + <dd> <p>The audio volume changed. See <strong>{{IMFMediaEngine::SetVolume}}</strong>.</p> </dd> + + + <dd> <p>The output format of the media source has changed.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>Zero if the video format changed, 1 if the audio format changed.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine flushed any pending events from its queue.</p> </dd> + + + <dd> <p>The playback position reached a timeline marker. See <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong>.</p> </dd> + + + <dd> <p>The audio balance changed. See <strong>{{IMFMediaEngineEx::SetBalance}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has finished downloading the source data.</p> </dd> + + + <dd> <p>The media source has started to buffer data.</p> </dd> + + + <dd> <p>The media source has stopped buffering data.</p> </dd> + + + <dd> <p>The <strong>{{IMFMediaEngineEx::FrameStep}}</strong> method completed.</p> </dd> + + + <dd> <p>The Media Engine's <strong>Load</strong> algorithm is waiting to start.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A handle to a waitable event, of type <strong>{{HANDLE}}</strong>.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> <p>If Media Engine is created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong> flag, the Media Engine sends the <strong>{{MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE}}</strong> event at the start of the <strong>Load</strong> algorithm. The <em>param1</em> parameter is a handle to a waitable event. The <strong>Load</strong> thread waits for the application to signal the event by calling <strong>SetEvent</strong>.</p> <p>If the Media Engine is not created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong>, it does not send this event, and the <strong>Load</strong> thread does not wait to be signalled.</p> </dd> + + + <dd> <p>The first frame of the media source is ready to render.</p> </dd> + + + <dd> <p>Raised when a new track is added or removed.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when there is new information about the Output Protection Manager ({{OPM}}). </p> <p>This event will be raised when an {{OPM}} failure occurs, but {{ITA}} allows fallback without the {{OPM}}. In this case, constriction can be applied. </p> <p>This event will not be raised when there is an {{OPM}} failure and the fallback also fails. For example, if {{ITA}} blocks playback entirely when {{OPM}} cannot be established.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when one of the component streams of a media stream fails. This event is only raised if the media stream contains other component streams that did not fail.</p> </dd> + + + + + <p>Defines network status codes for the Media Engine.</p> + + + <dd> <p>The initial state.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, and has selected a media resource, but is not using the network.</p> </dd> + + + <dd> <p>The Media Engine is loading a media resource.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, but has not selected a media resource.</p> </dd> + + + + + <p>Defines ready-state values for the Media Engine.</p> + <p>These values correspond to constants defined for the <strong>{{HTMLMediaElement}}.readyState</strong> attribute in {{HTML5}}.</p> + + + <dd> <p>No data is available.</p> </dd> + + + <dd> <p>Some metadata is available, including the duration and, for video files, the video dimensions. No media data is available.</p> </dd> + + + <dd> <p>There is media data for the current playback position, but not enough data for playback or seeking.</p> </dd> + + + <dd> <p>There is enough media data to enable some playback or seeking. The amount of data might be a little as the next video frame.</p> </dd> + + + <dd> <p>There is enough data to play the resource, based on the current rate at which the resource is being fetched. </p> </dd> + + + + + <p>Specifies the likelihood that the Media Engine can play a specified type of media resource.</p> + + + <dd> <p>The Media Engine cannot play the resource.</p> </dd> + + + <dd> <p>The Media Engine might be able to play the resource.</p> </dd> + + + <dd> <p>The Media Engine can probably play the resource.</p> </dd> + + + + + <p>Defines preload hints for the Media Engine. These values correspond to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + + + <dd> <p>The <strong>preload</strong> attribute is missing. </p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is an empty string. This value is equivalent to <strong>{{MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC}}</strong>.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "none". This value is a hint to the user agent not to preload the resource.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "metadata". This value is a hint to the user agent to fetch the resource metadata.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "auto". This value is a hint to the user agent to preload the entire resource.</p> </dd> + + + + + <p>Specifies the layout for a packed 3D video frame.</p> + + + <dd> <p>None.</p> </dd> + + + <dd> <p>The views are packed side-by-side in a single frame.</p> </dd> + + + <dd> <p>The views are packed top-to-bottom in a single frame.</p> </dd> + + + + + <p>Identifies statistics that the Media Engine tracks during playback. To get a playback statistic from the Media Engine, call <strong>{{IMFMediaEngineEx::GetStatistics}}</strong>.</p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Defines values for the media engine seek mode.</p> + <p>This enumeration is used with the <strong>MediaEngineEx::SetCurrentTimeEx</strong>.</p> + + + <dd> <p>Specifies normal seek.</p> </dd> + + + <dd> <p>Specifies an approximate seek. </p> </dd> + + + + + <p>Specifies media engine extension types.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies the content protection requirements for a video frame.</p> + + + <dd> <p>The video frame should be protected.</p> </dd> + + + <dd> <p>Direct3D surface protection must be applied to any surface that contains the frame.</p> </dd> + + + <dd> <p>Direct3D anti-screen-scrape protection must be applied to any surface that contains the frame.</p> </dd> + + + + + + + + + + + + + + <p>Defines the different ready states of the Media Source Extension.</p> + + + <dd> <p>The media source is closed.</p> </dd> + + + <dd> <p>The media source is open.</p> </dd> + + + <dd> <p>The media source is ended.</p> </dd> + + + + + <p>Defines the different error states of the Media Source Extension.</p> + + + <dd> <p>Specifies no error.</p> </dd> + + + <dd> <p>Specifies an error with the network.</p> </dd> + + + <dd> <p>Specifies an error with decoding.</p> </dd> + + + <dd> <p>Specifies an unknown error.</p> </dd> + + + + + <p>Defines media key error codes for the media engine.</p> + <p><strong>{{MF_MEDIA_ENGINE_KEYERR}}</strong> is used with the <em>code</em> parameter of <strong>{{IMFMediaKeySessionNotify::KeyError}}</strong> and the <em>code</em> value returned from <strong>{{IMFMediaKeySession::GetError}}</strong>.</p> + + + <dd> <p>Unknown error occurred.</p> </dd> + + + <dd> <p>An error with the client occurred.</p> </dd> + + + <dd> <p>An error with the service occurred.</p> </dd> + + + <dd> <p>An error with the output occurred.</p> </dd> + + + <dd> <p>An error occurred related to a hardware change.</p> </dd> + + + <dd> <p>An error with the domain occurred.</p> </dd> + + + + + + + + <p>Defines the status of the Output Protection Manager ({{OPM}}).</p> + + + + <p>Contains flags for the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Contains flags that specify whether the Media Engine will play protected content, and whether the Media Engine will use the Protected Media Path ({{PMP}}).</p> + <p>These flags are used with the {{MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS}} attribute.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind of timed text track.</p> + + + <dd> <p>The kind of timed text track is unknown.</p> </dd> + + + <dd> <p>The kind of timed text track is subtitles.</p> </dd> + + + <dd> <p>The kind of timed text track is closed captions.</p> </dd> + + + <dd> <p>The kind of timed text track is metadata.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the units in which the timed text is measured.</p> + + + <dd> <p>The timed text is measured in pixels.</p> </dd> + + + <dd> <p>The timed text is measured as a percentage.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the font style of the timed text.</p> + + + <dd> <p>The font style is normal, sometimes referred to as roman.</p> </dd> + + + <dd> <p>The font style is oblique.</p> </dd> + + + <dd> <p>The font style is italic.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned in its parent block element. </p> + + + <dd> <p>Text is aligned at the start of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned at the end of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned in the center of its parent block element.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned with the display. </p> + + + <dd> <p>Text is aligned before an element.</p> </dd> + + + <dd> <p>Text is aligned after an element.</p> </dd> + + + <dd> <p>Text is aligned in the center between elements.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is decorated (underlined and so on). </p> + + + <dd> <p>Text isn't decorated.</p> </dd> + + + <dd> <p>Text is underlined.</p> </dd> + + + <dd> <p>Text has a line through it.</p> </dd> + + + <dd> <p>Text has a line over it.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the sequence in which text is written on its parent element.</p> + + + <dd> <p>Text is written from left to right and top to bottom.</p> </dd> + + + <dd> <p>Text is written from right to left and top to bottom.</p> </dd> + + + <dd> <p>Text is written from top to bottom and right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom and left to right.</p> </dd> + + + <dd> <p>Text is written from left to right.</p> </dd> + + + <dd> <p>Text is written from right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text appears when the parent element is scrolled.</p> + + + <dd> <p>Text pops on when the parent element is scrolled.</p> </dd> + + + <dd> <p>Text rolls up when the parent element is scrolled.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind error that occurred with a timed text track.</p> + <p>This enumeration is used to return error information from the <strong>{{IMFTimedTextTrack::GetErrorCode}}</strong> method.</p> + + + <dd> <p>No error occurred.</p> </dd> + + + <dd> <p>A fatal error occurred.</p> </dd> + + + <dd> <p>An error occurred with the data format of the timed text track.</p> </dd> + + + <dd> <p>A network error occurred when trying to load the timed text track.</p> </dd> + + + <dd> <p>An internal error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of a timed text cue event.</p> + + + <dd> <p>The cue has become active.</p> </dd> + + + <dd> <p>The cue has become inactive.</p> </dd> + + + <dd> <p>All cues have been deactivated.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Identifies the kind of media stream that failed.</p> + + + <dd> <p>The stream type is unknown.</p> </dd> + + + <dd> <p>The stream is an audio stream.</p> </dd> + + + <dd> <p>The stream is a video stream.</p> </dd> + + + + + + + + <p>Provides the current error status for the Media Engine.</p> + <p>The <strong>{{IMFMediaError}}</strong> interface corresponds to the <strong>MediaError</strong> object in {{HTML5}}.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEngine::GetError}}</strong>.</p> + + + + <p>Gets the error code.</p> + <p>Returns a value from the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</p> + + + + <p>Gets the extended error code.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> + + + + <p>Sets the error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, specified as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets the extended error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> </dd> + + + + + <p>Represents a list of time ranges, where each range is defined by a start and end time.</p> + <p>The <strong>{{IMFMediaTimeRange}}</strong> interface corresponds to the <strong>TimeRanges</strong> interface in {{HTML5}}.</p><p>Several <strong>{{IMFMediaEngine}}</strong> methods return <strong>{{IMFMediaTimeRange}}</strong> references.</p> + + + + <p>Gets the number of time ranges contained in the object.</p> + <p>This method corresponds to the <strong>TimeRanges.length</strong> attribute in {{HTML5}}.</p> + <p>Returns the number of time ranges.</p> + + + + <p>Gets the start time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.start</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the start time, in seconds.</p> </dd> + + + + + <p>Gets the end time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.end</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the end time, in seconds.</p> </dd> + + + + + <p>Queries whether a specified time falls within any of the time ranges.</p> + <p>This method returns <strong>{{TRUE}}</strong> if the following condition holds for any time range in the list:</p><dl> <dd>(<em>start</em> &lt;= <em>time</em>) &amp;&amp; (<em>time</em> &lt;= <em>end</em>)</dd> </dl> + <p>Returns <strong>{{TRUE}}</strong> if any time range contained in this object spans the value of the <em>time</em> parameter. Otherwise, returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The time, in seconds.</p> </dd> + + + + + <p>Adds a new range to the list of time ranges.</p> + <p>If the new range intersects a range already in the list, the two ranges are combined. Otherwise, the new range is added to the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The start time, in seconds.</p> </dd> + + + <dd> <p>The end time, in seconds.</p> </dd> + + + + + <p>Clears the list of time ranges.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Callback interface for the <strong>{{IMFMediaEngine}}</strong> interface. </p> + <p>To set the callback reference on the Media Engine, set the {{MF_MEDIA_ENGINE_CALLBACK}} attribute in the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Notifies the application when a playback event occurs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_EVENT}}</strong> enumeration that specifies the event.</p> </dd> + + + <dd> <p>The first event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + <dd> <p>The second event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + + + <p>Provides the Media Engine with a list of media resources.</p> + <p>The <strong>{{IMFMediaEngineSrcElements}}</strong> interface represents an ordered list of media resources.</p><p>This interface enables the application to provide the same audio/video content in several different encoding formats, such as H.264 and Windows Media Video. If a particular codec is not present on the user's computer, the Media Engine will try the next {{URL}} in the list. To use this interface, do the following:</p><ol> <li>Create an implementation of this interface.</li> <li>Initialize your implementation with a list of {{URLs}}. Optionally, provide {{MIME}} types and media query strings for each {{URL}}.</li> <li>Call the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method.</li> </ol> + + + + <p>Gets the number of source elements in the list.</p> + <p>Returns the number of source elements.</p> + + + + <p>Gets the {{URL}} of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the source element. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{URL}} is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the {{MIME}} type of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{MIME}} type. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{MIME}} type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the intended media type of an element in the list.</p> + <p>The string returned in <em>pMedia</em> should be a media-query string that conforms to the {{W3C}} <em>Media Queries</em> specification.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains a media-query string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no media type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Adds a source element to the end of the list.</p> + <p>Any of the parameters to this method can be <strong>{{NULL}}</strong>.</p><p>This method allocates copies of the <strong>{{BSTR}}</strong>s that are passed in.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A media-query string that specifies the intended media type, or <strong>{{NULL}}</strong>. If specified, the string should conform to the {{W3C}} <em>Media Queries</em> specification.</p> </dd> + + + + + <p>Removes all of the source elements from the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables an application to play audio or video files.</p> + <p>The Media Engine implements this interface. To create an instance of the Media Engine, call <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong>.</p><p>This interface is extended with <strong>{{IMFMediaEngineEx}}</strong>.</p> + + + + <p>Gets the most recent error status.</p> + <p>This method returns the last error status, if any, that resulted from loading the media source. If there has not been an error, <em>ppError</em> receives the value <strong>{{NULL}}</strong>.</p><p>This method corresponds to the <strong>error</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives either a reference to the <strong>{{IMFMediaError}}</strong> interface, or the value <strong>{{NULL}}</strong>. If the value is <strong>non-{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Sets the current error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets a list of media sources.</p> + <p>This method corresponds to adding a list of <strong>source</strong> elements to a media element in {{HTML5}}. </p><p>The Media Engine tries to load each item in the <em>pSrcElements</em> list, until it finds one that loads successfully. After this method is called, the application can use the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to update the list at any time. To reload the list, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load a {{URL}}, it sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>If the application also calls <strong>{{IMFMediaEngine::SetSource}}</strong>, the {{URL}} passed to <strong>SetSource</strong> takes precedence over the list given to <strong>SetSourceElements</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEngineSrcElements}}</strong> interface. The caller must implement this interface. </p> </dd> + + + + + <p>Sets the {{URL}} of a media resource.</p> + <p>This method corresponds to setting the <strong>src</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The {{URL}} specified by this method takes precedence over media resources specified in the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method. To load the {{URL}}, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method asynchronously loads the {{URL}}. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the {{URL}}, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + + + <p>Gets the {{URL}} of the current media resource, or an empty string if no media resource is present.</p> + <p>This method corresponds to the <strong>currentSrc</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>Initially, the current media resource is empty. It is updated when the Media Engine performs the resource selection algorithm.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the current media resource. If there is no media resource, <em>ppUrl</em> receives an empty string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Gets the current network state of the media engine.</p> + <p>This method corresponds to the <strong>networkState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_NETWORK}}</strong> enumeration value.</p> + + + + <p>Gets the preload flag.</p> + <p>This method corresponds to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> enumeration value.</p> + + + + <p>Sets the preload flag.</p> + <p>This method corresponds to setting the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> value equal to the preload flag.</p> </dd> + + + + + <p>Queries how much resource data the media engine has buffered.</p> + <p>This method corresponds to the <strong>buffered</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The returned <strong>{{IMFMediaTimeRange}}</strong> interface represents a list of time ranges. The time ranges indicate which portions of the media resource have been downloaded. The time range list can be empty.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Loads the current media source.</p> + <p>The main purpose of this method is to reload a list of source elements after updating the list. For more information, see <strong>SetSourceElements</strong>. Otherwise, calling this method is generally not required. To load a new media source, call <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>.</p><p>The <strong>Load</strong> method explictly invokes the Media Engine's media resource loading algorithm. Before calling this method, you must set the media resource by calling <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>. </p><p>This method completes asynchronously. When the <strong>Load</strong> operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the file, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>This method corresponds to the <strong>load</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries how likely it is that the Media Engine can play a specified type of media resource.</p> + <p>This method corresponds to the <strong>canPlayType</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The <strong>canPlayType</strong> attribute defines the following values.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>"" (empty string)</td><td>The user-agent cannot play the resource, or the resource type is "application/octet-stream".</td></tr> <tr><td>"probably"</td><td>The user-agent probably can play the resource.</td></tr> <tr><td>"maybe"</td><td>Neither of the previous values applies.</td></tr> </table><p>?</p><p>The value "probably" is used because a {{MIME}} type for a media resource is generally not a complete description of the resource. For example, "video/mp4" specifies an {{MP4}} file with video, but does not describe the codec. Even with the optional codecs parameter, the {{MIME}} type omits some information, such as the actual coded bit rate. Therefore, it is usually impossible to be certain that playback is possible until the actual media resource is opened.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives an <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration value.</p> </dd> + + + + + <p>Gets the ready state, which indicates whether the current media resource can be rendered.</p> + <p>This method corresponds to the <strong>readyState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_READY}}</strong> enumeration value.</p> + + + + <p>Queries whether the Media Engine is currently seeking to a new playback position.</p> + <p>This method corresponds to the <strong>seeking</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine is seeking, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the current playback position.</p> + <p>This method corresponds to the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback position, in seconds.</p> + + + + <p>Seeks to a new playback position.</p> + <p>This method corresponds to setting the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the seek operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKING}}</strong> event. When the seek operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKED}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new playback position, in seconds.</p> </dd> + + + + + <p>Gets the initial playback position.</p> + <p>This method corresponds to the <strong>initialTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns the initial playback position, in seconds.</p> + + + + <p>Gets the duration of the media resource.</p> + <p>This method corresponds to the <strong>duration</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If the duration changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE}}</strong> event. See <strong>{{IMFMediaEngineNotify::EventNotify}}</strong>.</p> + <p>Returns the duration, in seconds. If no media data is available, the method returns not-a-number (NaN). If the duration is unbounded, the method returns an infinite value.</p> + + + + <p>Queries whether playback is currently paused.</p> + <p>This method corresponds to the <strong>paused</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if playback is paused, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the default playback rate.</p> + <p>This method corresponds to getting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p><p>The default playback rate is used for the next call to the <strong>{{IMFMediaEngine::Play}}</strong> method. To change the current playback rate, call <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> + <p>Returns the default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the default playback rate.</p> + <p>This method corresponds to setting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the current playback rate.</p> + <p>This method corresponds to getting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the current playback rate.</p> + <p>This method corresponds to setting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the time ranges that have been rendered.</p> + <p>This method corresponds to the <strong>played</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the time ranges to which the Media Engine can currently seek.</p> + <p>This method corresponds to the <strong>seekable</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>To find out whether the media source supports seeking, call <strong>{{IMFMediaEngineEx::GetResourceCharacteristics}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries whether playback has ended.</p> + <p>This method corresponds to the <strong>ended</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the direction of playback is forward and playback has reached the end of the media resource. Returns <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Queries whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If this method returns <strong>{{TRUE}}</strong>, playback begins automatically after the <strong>{{IMFMediaEngine::Load}}</strong> method completes. Otherwise, playback begins when the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine automatically begins playback, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to setting the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine automatically begins playback after it loads a media source. Otherwise, playback does not begin until the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + + + <p>Queries whether the Media Engine will loop playback.</p> + <p>This method corresponds to getting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If looping is enabled, the Media Engine seeks to the start of the content when playback reaches the end.</p> + <p>Returns <strong>{{TRUE}}</strong> if looping is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine loops playback.</p> + <p>If <em>Loop</em> is <strong>{{TRUE}}</strong>, playback loops back to the beginning when it reaches the end of the source.</p><p>This method corresponds to setting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to enable looping, or <strong>{{FALSE}}</strong> to disable looping.</p> </dd> + + + + + <p>Starts playback.</p> + <p>This method corresponds to the <strong>play</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAY}}</strong> event. When playback is under way, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAYING}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Pauses playback.</p> + <p>This method corresponds to the <strong>pause</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the transition to paused is complete, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PAUSE}} </strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the audio is muted. </p> + <p>Returns <strong>{{TRUE}}</strong> if the audio is muted, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Mutes or unmutes the audio. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio. </p> </dd> + + + + + <p>Gets the audio volume level.</p> + <p>Returns the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> + + + + <p>Sets the audio volume level.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). </p> </dd> + + + + + + + + <p>Queries whether the current media resource contains a video stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains a video stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain a video stream.</p> + + + + <p>Queries whether the current media resource contains an audio stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains an audio stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain an audio stream.</p> + + + + <p>Gets the size of the video frame, adjusted for aspect ratio.</p> + <p>This method adjusts for the correct picture aspect ratio. +For example, if the encoded frame is 720 ? 420 and the picture aspect ratio is 4:3, the method will return a size equal to 640 ? 480 pixels.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the width in pixels.</p> </dd> + + + <dd> <p>Receives the height in pixels.</p> </dd> + + + + + <p>Gets the picture aspect ratio of the video stream.</p> + <p>The Media Engine automatically converts the pixel aspect ratio to 1:1 (square pixels).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the x component of the aspect ratio.</p> </dd> + + + <dd> <p>Receives the y component of the aspect ratio.</p> </dd> + + + + + <p>Shuts down the Media Engine and releases the resources it is using. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies the current video frame to a {{DXGI}} surface or {{WIC}} bitmap.</p> + <p>In frame-server mode, call this method to blit the video frame to a {{DXGI}} or {{WIC}} surface. The application can call this method at any time after the Media Engine loads a video resource. Typically, however, the application calls <strong>{{IMFMediaEngine::OnVideoStreamTick}}</strong> first, to determine whether a new frame is available. If <strong>OnVideoStreamTick</strong> returns <strong>{{S_OK}}</strong>, the application then calls <strong>TransferVideoFrame</strong>.</p><p>The Media Engine scales and letterboxes the video to fit the destination rectangle. It fills the letterbox area with the border color.</p><p>For protected content, call the <strong>{{IMFMediaEngineProtectedContent::TransferVideoFrame}}</strong> method instead of this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface. </p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Queries the Media Engine to find out whether a new video frame is ready.</p> + <p>In frame-server mode, the application should call this method whenever a vertical blank occurs in the display device. If the method returns <strong>{{S_OK}}</strong>, call <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> to blit the frame to the render target. If the method returns <strong>{{S_FALSE}}</strong>, wait for the next vertical blank and call the method again.</p><p>Do not call this method in rendering mode or audio-only mode. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the Media Engine does not have a new frame.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>A new video frame is ready for display.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If a new frame is ready, receives the presentation time of the frame.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngine}}</strong> interface.</p> + <p>The <strong>{{IMFMediaEngine}}</strong> interface contains methods that map to the {{HTML5}} media elements. The <strong>{{IMFMediaEngineEx}}</strong> provides additional functionality that does not correspond directly to {{HTML5}}.</p> + + + + <p>Opens a media resource from a byte stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream.</p> </dd> + + + <dd> <p>The {{URL}} of the byte stream.</p> </dd> + + + + + <p>Gets a playback statistic from the Media Engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_STATISTIC}}</strong> enumeration that identifies the statistic to get.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the statistic. The data type and meaning of this value depends on the value of <em>StatisticID</em>. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Updates the source rectangle, destination rectangle, and border color for the video.</p> + <p>In rendering mode, call this method to reposition the video, update the border color, or repaint the video frame. If all of the parameters are <strong>{{NULL}}</strong>, the method repaints the most recent video frame.</p><p>In frame-server mode, this method has no effect.</p><p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. The source rectangle defines the area of the video frame that is displayed. If this parameter is <strong>{{NULL}}</strong>, the entire video frame is displayed.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. The destination rectangle defines the area of the window or DirectComposition visual where the video is drawn.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Gets the audio balance. </p> + <p>Returns the balance. The value can be any number in the following range (inclusive). </p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table><p>?</p><p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> + + + + <p>Sets the audio balance.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_BALANCECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The audio balance. The value can be any number in the following range (inclusive). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table> <p>?</p> <p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> </dd> + + + + + <p>Queries whether the Media Engine can play at a specified playback rate.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 is normal playback speed, 0.5 is half speed, and 2.0 is 2? speed. Positive values mean forward playback, and negative values mean reverse playback.</p><p>The results of this method can vary depending on the media resource that is currently loaded. Some media formats might support faster playback rates than others. Also, some formats might not support reverse play.</p> + <p>Returns <strong>{{TRUE}}</strong> if the playback rate is supported, or <strong>{{FALSE}}</strong> otherwise.</p> + + + <dd> <p>The requested playback rate.</p> </dd> + + + + + <p>Steps forward or backward one frame.</p> + <p>The frame-step direction is independent of the current playback direction.</p><p>This method completes asynchronously. When the operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED}}</strong> event and enters the paused state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to step forward or <strong>{{FALSE}}</strong> to step backward.</p> </dd> + + + + + <p>Gets various flags that describe the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}} enumeration</strong>.</p> </dd> + + + + + <p>Gets a presentation attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The attribute to query. For a list of presentation attributes, see Presentation Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Gets the number of streams in the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Gets a stream-level attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>The attribute to query. Possible values are listed in the following topics: +</p> <ul> <li> Stream Descriptor Attributes </li> <li> Media Type Attributes </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. Call <strong>PropVariantClear</strong> to free the memory allocated by the method. </p> </dd> + + + + + <p>Queries whether a stream is selected to play.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Selects or deselects a stream for playback. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to select or deselect the stream.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Applies the stream selections from previous calls to <strong>SetStreamSelection</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains protected content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the media resource contains protected content, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Inserts a video effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of video effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the video effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the video effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Inserts an audio effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of audio effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the audio effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the audio effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Removes all audio and video effects.</p> + <p> Call this method to remove all of the effects that were added with the <strong>InsertAudioEffect</strong> and <strong>InsertVideoEffect</strong> methods. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies a presentation time when the Media Engine will send a marker event.</p> + <p>When playback reaches the time specified by <em>timeToFire</em>, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER}}</strong> event through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. Calling this method cancels any previous marker that is still pending. </p><p>If the application seeks past the marker point, the Media Engine cancels the marker and does not send the event.</p><p>During forward playback, set <em>timeToFire</em> to a value greater than the current playback position. During reverse playback, set <em>timeToFire</em> to a value less than the playback position.</p><p>To cancel a marker, call <strong>{{IMFMediaEngineEx::CancelTimelineMarkerTimer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The presentation time for the marker event, in seconds.</p> </dd> + + + + + <p>Gets the time of the next timeline marker, if any.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the marker time, in seconds. If no marker is set, this parameter receives the value <strong>NaN</strong>.</p> </dd> + + + + + <p>Cancels the next pending timeline marker.</p> + <p>Call this method to cancel the <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains stereoscopic 3D video.</p> + <p>Returns <strong>{{TRUE}}</strong> if the media resource contains 3D video, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>For stereoscopic 3D video, gets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, sets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration that specifies the layout. The two views can be arranged side-by-side, or top-to-bottom.</p> </dd> + + + + + <p>For stereoscopic 3D video, queries how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, specifies how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration that specifies the 3D video rendering mode.</p> </dd> + + + + + <p>Enables or disables windowless swap-chain mode.</p> + <p>In windowless swap-chain mode, the Media Engine creates a windowless swap chain and presents video frames to the swap chain. To render the video, call <strong>{{IMFMediaEngineEx::GetVideoSwapchainHandle}}</strong> to get a handle to the swap chain, and then associate the handle with a Microsoft DirectComposition visual. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, windowless swap-chain mode is enabled. </p> </dd> + + + + + <p>Gets a handle to the windowless swap chain.</p> + <p>To enable windowless swap-chain mode, call <strong>{{IMFMediaEngineEx::EnableWindowlessSwapchainMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the swap chain.</p> </dd> + + + + + <p>Enables or disables mirroring of the video.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video is mirrored horizontally. Otherwise, the video is displayed normally.</p> </dd> + + + + + <p>Gets the audio stream category used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio stream category for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio device endpoint role used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio device endpoint used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks to a new playback position using the specified <strong>{{MF_MEDIA_ENGINE_SEEK_MODE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables or disables the time update timer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the update timer is enabled. Otherwise, the timer is disabled.</p> </dd> + + + + + <p>Enables an application to load media resources in the Media Engine.</p> + <p>To use this interface, set the {{MF_MEDIA_ENGINE_EXTENSION}} attribute when you call the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Queries whether the object can load a specified type of media resource.</p> + <p>Implement this method if your Media Engine extension supports one or more {{MIME}} types.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine is set to audio-only mode. Otherwise, the Media Engine is set to audio-video mode.</p> </dd> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration.</p> </dd> + + + + + <p>Begins an asynchronous request to create either a byte stream or a media source.</p> + <p>This method requests the object to create either a byte stream or a media source, depending on the value of the <em>type</em> parameter:</p><ul> <li>If <em>type</em> is <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, the method creates a byte stream for the {{URL}} that is specified in <em>bstrURL</em>. In this case, the <em>pByteStream</em> parameter is <strong>{{NULL}}</strong>. </li> <li>If <em>type</em> is <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, the method creates a media source, using the byte stream that is specified in the <em>pByteStream</em> parameter. Note that <em>pByteStream</em> can also be <strong>{{NULL}}</strong> in this case.</li> </ul><p>The method is performed asynchronously. The Media Engine calls the <strong>{{IMFMediaEngineExtension::EndCreateObject}}</strong> method to complete the operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface.</p> <p>If the <em>type</em> parameter equals <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, this parameter is <strong>{{NULL}}</strong>. </p> <p>If <em>type</em> equals <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, this parameter either contains a reference to a byte stream or is <strong>{{NULL}}</strong>. See Remarks for more information.</p> </dd> + + + <dd> <p>A member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration that specifies which type of object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Create a byte stream. The byte stream must support the <strong>{{IMFByteStream}}</strong> interface.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_MEDIASOURCE}}</strong></dt> </dl> </td><td> <p>Create a media source. The media source must support the <strong>{{IMFMediaSource}}</strong> interface.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface. This reference can be used to cancel the asynchronous operation, by passing the reference to the <strong>{{IMFMediaEngineExtension::CancelObjectCreation}}</strong> method. </p> <p>The caller must release the interface. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is used to signal the completion of the asynchronous operation.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object impemented by the caller. You can use this object to hold state information for the callback. The object is returned to the caller when the callback is invoked. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Cancels the current request to create an object.</p> + <p>This method attempts to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might complete before the operation can be canceled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The reference that was returned in the the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method. </p> </dd> + + + + + <p>Completes an asynchronous request to create a byte stream or media source.</p> + <p>The Media Engine calls this method to complete the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the byte stream or media source. The caller must release the interface</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Enables the Media Engine to access protected content while in frame-server mode.</p> + <p>In frame-server mode, this method enables the Media Engine to share protected content with the Direct3D?11 device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the Direct3D?11 device content. The Media Engine queries this reference for the <strong>{{ID3D11VideoContext}}</strong> interface. </p> </dd> + + + + + <p>Gets the content protections that must be applied in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Specifies the window that should receive output link protections.</p> + <p>In frame-server mode, call this method to specify the destination window for protected video content. The Media Engine uses this window to set link protections, using the Output Protection Manager ({{OPM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window.</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Sets the content protection manager ({{CPM}}).</p> + <p>The Media Engine uses the {{CPM}} to handle events related to protected content, such as license acquisition.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFContentProtectionManager}}</strong> interface, implemented by the caller.</p> </dd> + + + + + <p>Sets the application's certificate.</p> + <p>Call this method to access protected video content in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a buffer that contains the certificate in X.509 format, followed by the application identifier signed with a {{SHA}}-256 signature using the private key from the certificate.</p> </dd> + + + <dd> <p>The size of the <em>pbBlob</em> buffer, in bytes.</p> </dd> + + + + + <p><em>Media sources</em> are objects that generate media data in the Media Foundation pipeline. This section describes the media source {{APIs}} in detail. Read this section if you are implementing a custom media source, or using a media source outside of the Media Foundation pipeline.</p><p>If your application uses the control layer, it needs to use only a limited subset of the media source {{APIs}}. For information, see the topic Using Media Sources with the Media Session.</p><p> </p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables playback of web audio.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating if the connecting to Web audio should delay the page's load event.</p> + <p>True if connection to Web audio should delay the page's load event; otherwise, false.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Connects web audio to Media Engine using the specified sample rate.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Disconnects web audio from the Media Engine </p> + <p>Returns {{S_OK}} on successful completion.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Used to indicate that the media source has opened.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has ended.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has closed.</p> + <p>This method does not return a value.</p> + + + + <p>Enables <strong>{{IMFSourceBufferList}}</strong> object to notify its clients of important state changes.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been added.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been removed.</p> + <p>This method does not return a value.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFSourceBuffer}}</strong>.</p> + + + + <p>Used to indicate that the source buffer has started updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has been aborted.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that an error has occurred with the source buffer.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + + + <p>Used to indicate that the source buffer is updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has finished updating.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a buffer which contains media data for a <strong>{{IMFMediaSourceExtension}}</strong>. </p> + <p><strong>{{IMFSourceBuffer}}</strong> is used in conjunction with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Gets a value that indicates if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong> is in process.</p> + <p><strong>true</strong> if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong>; otherwise, <strong>false</strong>.</p> + + + + <p>Gets the buffered time range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffered time range.</p> </dd> + + + + + <p>Gets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>The timestamp offset.</p> + + + + <p>Sets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the timestamp for the start of the append window.</p> + <p>The timestamp for the start of the append window.</p> + + + + <p>Sets the timestamp for the start of the append window.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The timestamp for the start of the append window.</p> </dd> + + + + + <p>Gets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + + <p>Sets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + <dd></dd> + + + + + <p>Appends the specified media segment to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Appends the media segment from the specified byte stream to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Aborts the processing of the current media segment. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the media segments defined by the specified time range from the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Represents a collection of <strong>{{IMFSourceBuffer}}</strong> objects.</p> + + + + <p>Gets the number of <strong>{{IMFSourceBuffer}}</strong> objects in the list.</p> + <p>The number of source buffers in the list.</p> + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the list.</p> + <p>The source buffer.</p> + + + + <p>Provides functionality for the Media Source Extension ({{MSE}}).</p> + <p> Media Source Extensions ({{MSE}}) is a World Wide Web Consortium ({{W3C}}) standard that extends the {{HTML5}} media elements to enable dynamically changing the media stream without the use of plug-ins. The <strong>{{IMFMediaSourceExtension}}</strong> interface and the related Microsoft Win32 {{API}} implement {{MSE}} and are expected to only be called by web browsers implementing {{MSE}}. </p><p>The {{MSE}} media source keeps track of the ready state of the of the source as well as a list of <strong>{{IMFSourceBuffer}}</strong> objects which provide media data for the source.</p> + + + + <p>Gets the collection of source buffers associated with this media source.</p> + <p>The collection of source buffers.</p> + + + + <p>Gets the source buffers that are actively supplying media data to the media source.</p> + <p>The list of active source buffers.</p> + + + + <p>Gets the ready state of the media source.</p> + <p>The ready state of the media source.</p> + + + + <p>Gets the duration of the media source in 100-nanosecond units.</p> + <p>The duration of the media source in 100-nanosecond units. </p> + + + + <p>Sets the duration of the media source in 100-nanosecond units.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The duration of the media source in 100-nanosecond units.</p> </dd> + + + + + <p>Adds a <strong>{{IMFSourceBuffer}}</strong> to the collection of buffers associated with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the specified source buffer from the collection of source buffers managed by the <strong>{{IMFMediaSourceExtension}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Indicate that the end of the media stream has been reached. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Used to pass error information.</p> </dd> + + + + + <p>Gets a value that indicates if the specified {{MIME}} type is supported by the media source.</p> + <p><strong>true</strong> if the media type is supported; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The media type to check support for.</p> </dd> + + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the collection of buffers.</p> + <p>The source buffer.</p> + + + + <p>Implemented by the media engine to add encrypted media extensions methods.</p> + + + + <p>Gets the media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> </dd> + + + + + <p>Sets the media keys object to use with the media engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to provide additional capabilities.</p> + + + + <p>Provides an enhanced version of <strong>{{IMFMediaEngineSrcElements::AddElement}}</strong> to add the key system intended to be used with content to an element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the key system for the given source element index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source element index.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element.</p> </dd> + + + + + <p>Represents a callback to the media engine to notify key request data.</p> + + + + <p>Notifies the application that a key or keys are needed along with any initialization data.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The initialization data.</p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + + + <p>Represents a media keys used for decrypting media data using a Digital Rights Management ({{DRM}}) key system. </p> + + + + <p>Creates a media key session object using the specified initialization data and custom data. +. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type of the media container used for the content.</p> </dd> + + + <dd> <p>The initialization data for the key system. </p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + <dd> <p>Custom data sent to the key system.</p> </dd> + + + <dd> <p>The count in bytes of <em>cbCustomData</em>.</p> </dd> + + + <dd> <p>notify</p> </dd> + + + <dd> <p>The media key session.</p> </dd> + + + + + <p>Gets the key system string the <strong>{{IMFMediaKeys}}</strong> object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p></p> + <p><strong>Shutdown</strong> should be called by the application before final release. The Content Decryption Module ({{CDM}}) reference and any other resources is released at this point. However, related sessions are not freed or closed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the suspend notify interface of the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The suspend notify interface of the Content Decryption Module ({{CDM}}).</p> </dd> + + + + + <p>Represents a session with the Digital Rights Management ({{DRM}}) key system.</p> + + + + <p>Gets the error state associated with the media key session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code.</p> </dd> + + + <dd> <p>Platform specific error information.</p> </dd> + + + + + <p>Gets the name of the key system name the media keys object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the key system.</p> </dd> + + + + + <p>Gets a unique session id created for this session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key session id.</p> </dd> + + + + + <p>Passes in a key value with any associated data required by the Content Decryption Module for the given key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd></dd> + + + <dd> <p>The count in bytes of <em>key</em>.</p> </dd> + + + + + <p>Closes the media key session and must be called before the key session is released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides a mechanism for notifying the app about information regarding the media key session. </p> + + + + <p>Passes information to the application so it can initiate a key acquisition.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The {{URL}} to send the message to.</p> </dd> + + + <dd> <p>The message to send to the application.</p> </dd> + + + <dd> <p>The length in bytes of <em>message</em>.</p> </dd> + + + + + <p>Notifies the application that the key has been added. </p> + <p><strong>KeyAdded</strong> can also be called if the keys requested for the session have already been acquired.</p> + <p>This method does not return a value.</p> + + + + <p>Notifies the application that an error occurred while processing the key.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Used to enable the client to notify the Content Decryption Module ({{CDM}}) when global resources should be brought into a consistent state prior to suspending. +</p> + + + + <p>Indicates that the suspend process is starting and resources should be brought into a consistent state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The actual suspend is about to occur and no more calls will be made into the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Provides methods for getting information about the Output Protection Manager ({{OPM}}).</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the Media Engine.</p><p>The <strong>{{MF_MEDIA_ENGINE_EVENT_OPMINFO}}</strong> <strong>{{IMFMediaEvent}}</strong> event is raised when there is a change in the {{OPM}} status.</p> + + + + <p>Gets status information about the Output Protection Manager ({{OPM}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{INVALIDARG}}</strong></dt> </dl> </td><td> <p>If any of the parameters are <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a time range object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media error object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaError}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p> Checks if <em>keySystem</em> is a supported key system and creates the related Content Decryption Module ({{CDM}}). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys system.</p> </dd> + + + <dd> <p>Points to a location to store Content Decryption Module ({{CDM}}) data which might be locked by multiple process and so might be incompatible with store app suspension.</p> </dd> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of the <strong>{{IMFMediaKeys}}</strong> object.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key system.</p> </dd> + + + <dd> <p>Points to the default file location for the store Content Decryption Module ({{CDM}}) data.</p> </dd> + + + <dd> <p>Points to a the inprivate location for the store Content Decryption Module ({{CDM}}) data. Specifying this path allows the {{CDM}} to comply with the application?s privacy policy by putting personal information in the file location indicated by this path.</p> </dd> + + + <dd> <p>Receives the media keys.</p> </dd> + + + + + + + + + + + <p>Enables the media source to be transferred between the media engine and the sharing engine for Play To.</p> + + + + <p>Specifies wether or not the source should be transferred.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>true</strong> if the source should be transferred; otherwise, <strong>false</strong>.</p> </dd> + + + + + <p>Detaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the byte stream.</p> </dd> + + + <dd> <p>Receives the media source.</p> </dd> + + + <dd> <p>Receives the media source extension.</p> </dd> + + + + + <p>Attaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the byte stream. </p> </dd> + + + <dd> <p>Specifies the media source.</p> </dd> + + + <dd> <p>Specifies the media source extension.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A timed-text object represents a component of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Registers a timed-text notify object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTimedTextNotify}}</strong> interface for the timed-text notify object to register.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Selects or deselects a track of text in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to select. </p> </dd> + + + <dd> <p>Specifies whether to select or deselect a track of text. Specify <strong>{{TRUE}}</strong> to select the track or <strong>{{FALSE}}</strong> to deselect the track. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface for the data source to add.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source from the specified {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the timed-text data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Removes the timed-text track with the specified identifier.</p> + <p>Get the identifier for a track by calling <strong>GetId</strong>. </p><p>When a track is removed, all buffered data from the track is also removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to remove.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Retrieves a list of all timed-text tracks registered with the <strong>{{IMFTimedText}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of active timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of active timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of all the timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of all of the timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of the timed-metadata tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of the timed-metadata tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables inband mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether inband mode is enabled.</p> + <p>Returns whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Interface that defines callbacks for Microsoft Media Foundation Timed Text notifications.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is added</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was added. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is removed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was removed. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a track is selected or deselected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was selected or deselected. </p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the track was selected. <strong>{{FALSE}}</strong> if the track was deselected. </p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an error occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An {{MF_TIMED_TEXT_ERROR_CODE}} representing the last error.</p> </dd> + + + <dd> <p>The extended error code for the last error.</p> </dd> + + + <dd> <p>The identifier of the track on which the error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a cue event occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value specifying the type of event that has occured.</p> </dd> + + + <dd> <p>The current time when the cue event occurred.</p> </dd> + + + <dd> <p>The <strong>{{IMFTimedTextCue}}</strong> object representing the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Resets the timed-text-notify object.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a track of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the track of timed text.</p> + <p>Returns the identifier of the track. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the label of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the label of a timed-text track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the language of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the language of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text track.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is inband.</p> + <p>Returns whether the timed-text track is inband. If <strong>{{TRUE}}</strong>, the timed-text track is inband; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the in-band metadata of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the in-band metadata of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is active.</p> + <p>Returns whether the timed-text track is active. If <strong>{{TRUE}}</strong>, the timed-text track is active; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating the error type of the latest error associated with the track.</p> + <p>A value indicating the error type of the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extended error code for the latest error associated with the track.</p> + <p>If the most recent error was associated with a track, this value will be the same <strong>{{HRESULT}}</strong> as returned by the <strong>{{IMFTimedTextNotify::Error}}</strong> method.</p> + <p>The extended error code for the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a {{GUID}} that identifies the track's underlying data format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A {{GUID}} that identifies the track's underlying data format.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a list of timed-text tracks.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the length, in tracks, of the timed-text-track list.</p> + <p>Returns the length, in tracks, of the timed-text-track list.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the index of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the identifier of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of a timed-text cue.</p> + <p>The identifier is retrieved by this method is dynamically generated by the system and is guaranteed to uniquely identify a cue within a single timed-text track. It is not guaranteed to be unique across tracks. If a cue already has an identifier that is provided in the text-track data format, this {{ID}} can be retrieved by calling <strong>GetOriginalId</strong>.</p> + <p>The identifier of a timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the cue identifier that is provided in the text-track data format, if available.</p> + <p>This method retrieves an identifier for the cue that is included in the source data, if one was specified. The system dynamically generates identifiers for cues that are guaranteed to be unique within a single time-text track. To obtain this system-generated {{ID}}, call <strong>GetId</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The cue identifier that is provided in the text-track data format.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text cue.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the start time of the cue in the track.</p> + <p>Returns the start time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the duration time of the cue in the track.</p> + <p>Returns the duration time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the timed-text cue.</p> + <p>Returns the identifier of the timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the display region of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextRegion}}</strong> interface for the timed-text region. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Specifies the supported protection schemes for encrypted samples.</p> + <p>The encryption scheme for a sample is specified using the {{MFSampleExtension_Encryption_ProtectionScheme}} attribute.</p> + + + <dd> <p>No encryption scheme.</p> </dd> + + + <dd> <p>The encryption scheme is {{AES}} counter mode ({{CTR}}).</p> </dd> + + + <dd> <p>The encryption scheme is Cipher Block Chaining ({{CBC}}).</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the style of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of lines of text in the timed-text cue.</p> + <p>Returns the number of lines of text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a line of text in the cue from the index of the line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the line of text in the cue to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextFormattedText}}</strong> interface for the line of text in the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a block of formatted timed-text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the text.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of subformats in the formatted timed-text object.</p> + <p>Returns the number of subformats. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a subformat in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the subformat in the formatted timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the first character of the subformat. </p> </dd> + + + <dd> <p>A reference to a variable that receives the length, in characters, of the subformat. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the subformat's timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text style is external.</p> + <p>Returns whether the timed-text style is external. If <strong>{{TRUE}}</strong>, the timed-text style is external; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font family of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the font family of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font size of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the font size of the timed-text style.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text style is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text always shows the background.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text always shows the background. The variable specifies <strong>{{TRUE}}</strong> if the background is always shown; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font style of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_FONT_STYLE}}</strong>-typed value that specifies the font style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text is bold.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text is bold. The variable specifies <strong>{{TRUE}}</strong> if the style is bold; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the right to left writing mode of the timed-text style is enabled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the right to left writing mode is enabled. The variable specifies <strong>{{TRUE}}</strong> if the right to left writing mode is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text alignment of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_ALIGNMENT}}</strong>-typed value that specifies the text alignment.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets how text is decorated for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{MF_TIMED_TEXT_DECORATION}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies how text is decorated.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text outline for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + <dd> <p>A reference to a variable that receives the thickness.</p> </dd> + + + <dd> <p>A reference to a variable that receives the blur radius.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the display region of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the position of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the X-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives the Y-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extent of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the width of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the writing mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_WRITING_MODE}}</strong>-typed value that specifies the writing mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the display alignment of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_DISPLAY_ALIGNMENT}}</strong>-typed value that specifies the display alignment of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the height of each line of text in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the height of each line of text in the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether a clip of text overflowed the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether a clip of text overflowed the region. The variable specifies <strong>{{TRUE}}</strong> if the clip overflowed; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the padding that surrounds the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the padding before the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the padding after the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the word wrap feature is enabled in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the word wrap feature is enabled in the region. The variable specifies <strong>{{TRUE}}</strong> if word wrap is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the Z-index (depth) of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the Z-index (depth) of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the scroll mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_SCROLL_MODE}}</strong>-typed value that specifies the scroll mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the data content of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the data content of the timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the length in bytes of the data content.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Specifies a type of capture device.</p> + + + <dd> <p>An audio capture device, such as a microphone.</p> </dd> + + + <dd> <p>A video capture device, such as a webcam.</p> </dd> + + + + + <p>Specifies a type of capture sink.</p> + + + <dd> <p>A recording sink, for capturing audio and video to a file.</p> </dd> + + + <dd> <p>A preview sink, for previewing live audio or video.</p> </dd> + + + <dd> <p>A photo sink, for capturing still images.</p> </dd> + + + + + + + + <p>Defines the values for the source stream category.</p> + + + <dd> <p>Specifies a video preview stream.</p> </dd> + + + <dd> <p>Specifies a video capture stream.</p> </dd> + + + <dd> <p>Specifies an independent photo stream.</p> </dd> + + + <dd> <p>Specifies a dependent photo stream.</p> </dd> + + + <dd> <p>Specifies an audio stream.</p> </dd> + + + <dd> <p>Specifies an unsupported stream.</p> </dd> + + + + + <p>Callback interface for receiving events from the capture engine.</p> + <p>To set the callback interface on the capture engine, call the <strong>{{IMFCaptureEngine::Initialize}}</strong> method.</p> + + + + <p>Called by the capture engine to notify the application of a capture event.</p> + <p>To get the type of event, call <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. This method returns one of the following {{GUIDs}}.</p><table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ALL_EFFECTS_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveAllEffects}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_BLOCKED}}</strong></td><td>Video capture has been blocked by the driver.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_UNBLOCKED}}</strong></td><td>Video capture has been restored by the driver after having been blocked.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_ADDED}}</strong></td><td>The <strong>{{IMFCaptureSource::AddEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ERROR}}</strong></td><td>An error occurred during capture.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong></td><td>The <strong>{{IMFCaptureEngine::Initialize}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong></td><td>The <strong>{{IMFCaptureEngine::TakePhoto}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SINK_PREPARED}}</strong></td><td>The <strong>{{IMFCaptureSink::Prepare}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SOURCE_CURRENT_DEVICE_MEDIA_TYPE_SET}}</strong></td><td>The <strong>{{IMFCaptureSource::SetCurrentDeviceMediaType}}</strong> method completed.</td></tr> </table><p>?</p><p>This method may be called from a worker thread. The implementation should be thread-safe.</p><p>To get the status code for the event, call <strong>{{IMFMediaEvent::GetStatus}}</strong>. If the status code is an error code, it indicates that the requested operation failed.</p><p>In addition, the event object specified by <em>pEvent</em> might contain any of the following attributes.</p><ul> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> </ul><p>To get event attributes, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaEvent}}</strong> inherits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface. Use this interface to get information about the event, as described in Remarks.</p> </dd> + + + + + <p>Callback interface to receive data from the capture engine.</p> + <p>To set the callback interface, call one of the following methods.</p><ul> <li> <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong> </li> </ul> + + + + <p>Called when the capture sink receives a sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface. Use this interface to get the time stamp, duration, and stream data. For more information, see Media Samples. This parameter can be <strong>{{NULL}}</strong>, so make sure to check for a <strong>{{NULL}}</strong> value before you dereference the reference.</p> </dd> + + + + + <p>Controls a capture sink, which is an object that receives one or more streams from a capture device.</p> + <p>The capture engine creates the following capture sinks.</p><ul> <li>Photo sink. Encodes still image files.</li> <li>Preview sink. Previews live audio or video.</li> <li>Recording sink. Creates compressed audio/video files or compressed audio/video streams.</li> </ul><p>To get a reference to a capture sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. Each capture sink implements an interface that derives from <strong>{{IMFCaptureSink}}</strong>. Call <strong>QueryInterface</strong> to get a reference to the derived interface.</p><table> <tr><th>Sink</th><th>Interface</th></tr> <tr><td>Photo sink</td><td> <strong>{{IMFCapturePhotoSink}}</strong> </td></tr> <tr><td>Preview sink</td><td> <strong>{{IMFCapturePreviewSink}}</strong> </td></tr> <tr><td>Recording sink</td><td> <strong>{{IMFCaptureRecordSink}}</strong> </td></tr> </table><p>?</p><p>Applications cannot directly create the capture sinks.</p><p>If an image stream native media type is set to {{JPEG}}, the photo sink should be configured with a format identical to native source format. {{JPEG}} native type is passthrough only.</p><p>If an image stream native type is set to {{JPEG}}, to add an effect, change the native type on the image stream to an uncompressed video media type (such as {{NV12}} or {{RGB32}}) and then add the effect.</p><p>If the native type is H.264 for the record stream, the record sink should be configured with the same media type. H.264 native type is passthrough only and cannot be decoded.</p><p>Record streams that expose H.264 do not expose any other type. H.264 record streams cannot be used in conjunction with effects. To add effects, instead connect the preview stream to the recordsink using <strong>AddStream</strong>.</p> + + + + <p>Gets the output format for a stream on this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSinkStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to query. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the reference.</p> </dd> + + + + + <p>Queries the underlying Sink Writer object for an interface.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + + <p>Connects a stream from the capture source to this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The format specified in <em>pMediaType</em> is not valid for this capture sink.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid, or the specified source stream was already connected to this sink.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The source stream to connect. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An <strong>{{IMFMediaType}}</strong> reference that specifies the desired format of the output stream. The details of the format will depend on the capture sink.</p> <ul> <li>Photo sink: A still image format compatible with Windows Imaging Component ({{WIC}}).</li> <li>Preview sink: An uncompressed audio or video format.</li> <li>Record sink: The audio or video format that will be written to the output file.</li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. For compressed streams, you can use this parameter to configure the encoder. This parameter can also be <strong>{{NULL}}</strong>. For the preview sink, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the index of the new stream on the capture sink. Note that this index will not necessarily match the value of <em>dwSourceStreamIndex</em>. </p> </dd> + + + + + <p>Prepares the capture sink by loading any required pipeline components, such as encoders, video processors, and media sinks.</p> + <p>Calling this method is optional. This method gives the application an opportunity to configure the pipeline components before they are used. The method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_SINK_PREPARED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. After this event is received, call <strong>{{IMFCaptureSink::GetService}}</strong> to configure individual components.</p><p>Before calling this method, configure the capture sink by adding at least one stream. To add a stream, call <strong>{{IMFCaptureSink::AddStream}}</strong>.</p><p>The <strong>Prepare</strong> method fails if the capture sink is currently in use. For example, calling <strong>Prepare</strong> on the preview sink fails if the capture engine is currently previewing.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + + <p>Removes all streams from the capture sink.</p> + <p>You can use this method to reconfigure the sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Controls the recording sink. The recording sink creates compressed audio/video files or compressed audio/video streams.</p> + <p>The recording sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported. (However, if a callback is used, you can provide a separate callback for each stream.)</p><p>If the destination is a byte stream or an output file, the application specifies a container type, such as {{MP4}} or {{ASF}}. The capture engine then multiplexes the audio and video to produce the format defined by the container type. If the destination is a callback interface, however, the capture engine does not multiplex or otherwise interleave the samples. The callback option gives you the most control over the recorded output, but requires more work by the application.</p><p>To start the recording, call <strong>{{IMFCaptureEngine::StartRecord}}</strong>.</p> + + + + <p>Specifies a byte stream that will receive the data for the recording.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the file container type. Possible values are documented in the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </dd> + + + + + <p>Specifies the name of the output file for the recording.</p> + <p>The capture engine uses the file name extension to select the container type for the output file. For example, if the file name extension is ."mp4", the capture engine creates an {{MP4}} file.</p><p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the recording data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Sets a custom media sink for recording.</p> + <p>This method overrides the default selection of the media sink for recording.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Gets the rotation that is currently being applied to the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Controls the preview sink. The preview sink enables the application to preview audio and video from the camera.</p> + <p>To start preview, call <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + + + + <p>Specifies a window for preview.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window. The preview sink draws the video frames inside this window.</p> </dd> + + + + + <p>Specifies a Microsoft DirectComposition visual for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a DirectComposition visual that implements the <strong>{{IDCompositionVisual}}</strong> interface.</p> </dd> + + + + + <p>Updates the video frame. Call this method when the preview window receives a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets a callback to receive the preview data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetRenderHandle}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled. If <strong>{{FALSE}}</strong>, mirror is disabled.</p> </dd> + + + + + <p>Gets the rotation of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Sets a custom media sink for preview.</p> + <p>This method overrides the default selection of the media sink for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Controls the photo sink. The photo sink captures still images from the video stream.</p> + <p>The photo sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported.</p><p>To capture an image, call <strong>{{IMFCaptureEngine::TakePhoto}}</strong>.</p> + + + + <p>Specifies the name of the output file for the still image.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the still-image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Specifies a byte stream that will receive the still image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + + + <p>Controls the capture source object. The capture source manages the audio and video capture devices.</p> + <p>To get a reference to the capture source, call <strong>{{IMFCaptureEngine::GetSource}}</strong>.</p> + + + + <p>Gets the current capture device's <strong>{{IMFMediaSource}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the current capture device's <strong>{{IMFActivate}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to the underlying Source Reader object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture source was not initialized. Possibly there is no capture device on the system.</p> </td></tr> </table><p>?</p> + + + + <p>Adds an effect to a capture stream.</p> + <p>The effect must be implemented as a Media Foundation Transform ({{MFT}}). The <em>pUnknown</em> parameter can point to an instance of the {{MFT}}, or to an activation object for the {{MFT}}. For more information, see Activation Objects.</p><p>The effect is applied to the stream before the data reaches the capture sinks. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>No compatible media type could be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following: </p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes an effect from a capture stream.</p> + <p>This method removes an effect that was previously added using the <strong>{{IMFCaptureSource::AddEffect}}</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. Possibly the specified effect could not be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the effect object. </p> </dd> + + + + + <p>Removes all effects from a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a format that is supported by one of the capture streams.</p> + <p>To enumerate all of the available formats on a stream, call this method in a loop while incrementing <em>dwMediaTypeIndex</em>, until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>.</p><p>Some cameras might support a range of frame rates. The minimum and maximum frame rates are stored in the {{MF_MT_FRAME_RATE_RANGE_MIN}} and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes on the media type.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Sets the output format for a capture stream.</p> + <p>This method sets the native output type on the capture device. The device must support the specified format. To get the list of available formats, call <strong>{{IMFCaptureSource::GetAvailableDeviceMediaType}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface.</p> </dd> + + + + + <p>Gets the current media type for a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the number of device streams.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of device streams.</p> </dd> + + + + + <p>Gets the stream category for the specified source stream index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the source stream.</p> </dd> + + + <dd> <p>Receives the {{MF_CAPTURE_ENGINE_STREAM_CATEGORY}} of the specified source stream.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The device stream does not have mirroring capability.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The source is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled; if <strong>{{FALSE}}</strong>, mirroring is disabled.</p> </dd> + + + + + <p>Gets the actual device stream index translated from a friendly stream name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The friendly name. Can be one of the following:</p> <ul> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_RECORD}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_PREVIEW}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_INDEPENDENT_PHOTO_STREAM}}</li> </ul> </dd> + + + <dd> <p>Receives the value of the stream index that corresponds to the friendly name.</p> </dd> + + + + + <p>Controls one or more capture devices. The capture engine implements this interface. To get a reference to this interface, call either <strong>{{MFCreateCaptureEngine}}</strong> or <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + <p><strong>{{IMFCaptureEngine}}</strong> only supports one pass {{CBR}} encoding.</p> + + + + <p>Initializes the capture engine.</p> + <p>You must call this method once before using the capture engine. Calling the method a second time returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The <strong>Initialize</strong> method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CAPTURE_DEVICES_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No capture devices are available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnEventCallback}}</strong> interface. The caller must implement this interface. The capture engine uses this interface to send asynchronous events to the caller.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. </p> <p>You can use this parameter to configure the capture engine. Call <strong>{{MFCreateAttributes}}</strong> to create an attribute store, and then set any of the following attributes.</p> <ul> <li> {{MF_CAPTURE_ENGINE_D3D_MANAGER}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_DXVA}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_HARDWARE_TRANSFORMS}} </li> <li> {{MF_CAPTURE_ENGINE_ENCODER_MFT_FIELDOFUSE_UNLOCK_Attribute}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> <li> {{MF_CAPTURE_ENGINE_MEDIASOURCE_CONFIG}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} </li> <li> {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} </li> </ul> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies an audio-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use an audio device, and the <em>pAudioSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pAudioSource</em> is <strong>{{NULL}}</strong>, the capture engine selects the microphone that is built into the video camera specified by <em>pVideoSource</em>. If the video camera does not have a microphone, the capture engine enumerates the audio-capture devices on the system and selects the first one.</p> <p>To override the default audio device, set <em>pAudioSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Audio/Video Capture in Media Foundation.</p> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies a video-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use a video device, and the <em>pVideoSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pVideoSource</em> is <strong>{{NULL}}</strong>, the capture engine enumerates the video-capture devices on the system and selects the first one.</p> <p>To override the default video device, set <em>pVideoSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Enumerating Video Capture Devices.</p> </dd> + + + + + <p>Starts preview.</p> + <p>Before calling this method, configure the preview sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the preview sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>After the preview sink is configured, you can stop and start preview by calling <strong>{{IMFCaptureEngine::StopPreview}}</strong> and <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The preview sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops preview.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture engine is not currently previewing.</p> </td></tr> </table><p>?</p> + + + + <p>Starts recording audio and/or video to a file.</p> + <p>Before calling this method, configure the recording sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the recording sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>To stop recording, call <strong>{{IMFCaptureEngine::StopRecord}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The recording sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops recording.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean value that specifies whether to finalize the output file. To create a valid output file, specify <strong>{{TRUE}}</strong>. Specify <strong>{{FALSE}}</strong> only if you want to interrupt the recording and discard the output file. If the value is <strong>{{FALSE}}</strong>, the operation completes more quickly, but the file will not be playable. </p> </dd> + + + <dd> <p>A Boolean value that specifies if the unprocessed samples waiting to be encoded should be flushed.</p> </dd> + + + + + <p>Captures a still image from the video stream.</p> + <p>Before calling this method, configure the photo sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the photo sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to one of the capture sink objects. You can use the capture sinks to configure preview, recording, or still-image capture.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{MF_CAPTURE_ENGINE_SINK_TYPE}}</strong> value that specifies the capture sink to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a reference to the capture source object. Use the capture source to configure the capture devices.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the capture engine.</p> + <p>To get a reference to this interface, call the CoCreateInstance function and specify the {{CLSID}} equal to <strong>{{CLSID_MFCaptureEngineClassFactory}}</strong>. </p><p>Calling the <strong>{{MFCreateCaptureEngine}}</strong> function is equivalent to calling <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + + + + <p>Creates an instance of the capture engine.</p> + <p>Before calling this method, call the <strong>{{MFStartup}}</strong> function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create. Currently, this parameter must equal <strong>{{CLSID_MFCaptureEngine}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface. The capture engine supports the <strong>{{IMFCaptureEngine}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Extensions for the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> callback interface that is used to receive data from the capture engine.</p> + + + + <p>Called by the capture sink when the format of the sample is changed.</p> + <p>The return value is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new media type.</p> </dd> + + + + + <p>Extends the <strong>{{IMFCaptureSink}}</strong> interface to provide functionality for dynamically setting the output media type of the record sink or preview sink.</p> + + + + <p>Dynamically sets the output media type of the record sink or preview sink.</p> + <p>This is an asynchronous call. Listen to the {{MF_CAPTURE_ENGINE_OUTPUT_MEDIA_TYPE_SET}} event +to be notified when the output media type has been set.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_MEDIATYPE}}</strong></dt> </dl> </td><td> <p>The sink does not support the media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream index to change the output media type on.</p> </dd> + + + <dd> <p>The new output media type.</p> </dd> + + + <dd> <p>The new encoder attributes. This can be <strong>null</strong>.</p> </dd> + + + + + <p>Contains the header information that is part of the raw input data. </p> + <p>To get more information on the device, use <strong>hDevice</strong> in a call to <strong>GetRawInputDeviceInfo</strong>.</p> + + + <dd> <p>The type of raw input. It can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Raw input comes from some device that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Raw input comes from the keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Raw input comes from the mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The size, in bytes, of the entire input packet of data. This includes <strong>{{RAWINPUT}}</strong> plus possible extra input reports in the <strong>{{RAWHID}}</strong> variable length array. </p> </dd> + + + <dd> <p>A handle to the device generating the raw input data. </p> </dd> + + + <dd> <p>The value passed in the <em>wParam</em> parameter of the <strong>{{WM_INPUT}}</strong> message. </p> </dd> + + + + + <p>Contains information about the state of the keyboard. </p> + + + <dd> <p>The scan code from the key depression. The scan code for keyboard overrun is <strong>{{KEYBOARD_OVERRUN_MAKE_CODE}}</strong>. </p> </dd> + + + <dd> <p>Flags for scan code information. It can be one or more of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RI_KEY_BREAK}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The key is up.</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E0}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The scan code has the {{E0}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E1}}</strong></dt> <dt>4</dt> </dl> </td><td> <p>The scan code has the {{E1}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_MAKE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The key is down.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Reserved; must be zero. </p> </dd> + + + <dd> <p>Windows message compatible virtual-key code. For more information, see Virtual Key Codes. </p> </dd> + + + <dd> <p>The corresponding window message, for example <strong>{{WM_KEYDOWN}}</strong>, <strong>{{WM_SYSKEYDOWN}}</strong>, and so forth. </p> </dd> + + + <dd> <p>The device-specific additional information for the event. </p> </dd> + + + + + <p>Describes the format of the raw input from a Human Interface Device ({{HID}}). </p> + <p>Each <strong>{{WM_INPUT}}</strong> can indicate several inputs, but all of the inputs come from the same {{HID}}. The size of the <strong>bRawData</strong> array is <strong>dwSizeHid</strong> * <strong>dwCount</strong>.</p> + + + <dd> <p>The size, in bytes, of each {{HID}} input in <strong>bRawData</strong>. </p> </dd> + + + <dd> <p>The number of {{HID}} inputs in <strong>bRawData</strong>.</p> </dd> + + + <dd> <p>The raw input data, as an array of bytes. </p> </dd> + + + + + + + + <p>This section describes how the system provides raw input to your application and how an application receives and processes that input. Raw input is sometimes referred to as generic input. </p> + + + + <p>Defines the raw input data coming from the specified mouse.</p> + <p>For the mouse, the Usage Page is 1 and the Usage is 2.</p> + + + <dd> <p>The identifier of the mouse device.</p> </dd> + + + <dd> <p>The number of buttons for the mouse.</p> </dd> + + + <dd> <p>The number of data points per second. This information may not be applicable for every mouse device.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the mouse has a wheel for horizontal scrolling; otherwise, <strong>{{FALSE}}</strong>. </p> <p><strong>Windows?{{XP:}}??</strong>This member is only supported starting with Windows?Vista.</p> </dd> + + + + + <p>Defines the raw input data coming from the specified keyboard. </p> + <p>For the keyboard, the Usage Page is 1 and the Usage is 6. </p> + + + <dd> <p>The type of the keyboard. </p> </dd> + + + <dd> <p>The subtype of the keyboard. </p> </dd> + + + <dd> <p>The scan code mode. </p> </dd> + + + <dd> <p>The number of function keys on the keyboard.</p> </dd> + + + <dd> <p>The number of {{LED}} indicators on the keyboard.</p> </dd> + + + <dd> <p>The total number of keys on the keyboard. </p> </dd> + + + + + <p>Defines the raw input data coming from the specified Human Interface Device ({{HID}}). </p> + + + <dd> <p>The vendor identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The product identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The version number for the {{HID}}. </p> </dd> + + + <dd> <p>The top-level collection Usage Page for the device. </p> </dd> + + + <dd> <p>The top-level collection Usage for the device. </p> </dd> + + + + + <p>Defines the raw input data coming from any device. </p> + + + <dd> <p>The size, in bytes, of the <strong>{{RID_DEVICE_INFO}}</strong> structure. </p> </dd> + + + <dd> <p>The type of raw input data. This member can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Data comes from an {{HID}} that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Data comes from a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Data comes from a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEMOUSE}}</strong>, this is the <strong>{{RID_DEVICE_INFO_MOUSE}}</strong> structure that defines the mouse. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEKEYBOARD}}</strong>, this is the <strong>{{RID_DEVICE_INFO_KEYBOARD}}</strong> structure that defines the keyboard. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEHID}}</strong>, this is the <strong>{{RID_DEVICE_INFO_HID}}</strong> structure that defines the {{HID}} device. </p> </dd> + + + + + <p>Defines information for the raw input devices. </p> + <p>If <strong>{{RIDEV_NOLEGACY}}</strong> is set for a mouse or a keyboard, the system does not generate any legacy message for that device for the application. For example, if the mouse {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_LBUTTONDOWN}}</strong> and related legacy mouse messages are not generated. Likewise, if the keyboard {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_KEYDOWN}}</strong> and related legacy keyboard messages are not generated.</p><p>If <strong>{{RIDEV_REMOVE}}</strong> is set and the <strong>hwndTarget</strong> member is not set to <strong>{{NULL}}</strong>, then parameter validation will fail.</p> + + + <dd> <p>Top level collection Usage page for the raw input device. </p> </dd> + + + <dd> <p>Top level collection Usage for the raw input device. </p> </dd> + + + <dd> <p>Mode flag that specifies how to interpret the information provided by <strong>usUsagePage</strong> and <strong>usUsage</strong>. It can be zero (the default) or one of the following values. By default, the operating system sends raw input from devices with the specified top level collection ({{TLC}}) to the registered application as long as it has the window focus. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDEV_APPKEYS}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>If set, the application command keys are handled. <strong>{{RIDEV_APPKEYS}}</strong> can be specified only if <strong>{{RIDEV_NOLEGACY}}</strong> is specified for a keyboard device.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_CAPTUREMOUSE}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the mouse button click does not activate the other window.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_DEVNOTIFY}}</strong></dt> <dt>0x00002000</dt> </dl> </td><td> <p>If set, this enables the caller to receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for device arrival and device removal.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXCLUDE}}</strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p>If set, this specifies the top level collections to exclude when reading a complete usage page. This flag only affects a {{TLC}} whose usage page is already specified with <strong>{{RIDEV_PAGEONLY}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXINPUTSINK}}</strong></dt> <dt>0x00001000</dt> </dl> </td><td> <p>If set, this enables the caller to receive input in the background only if the foreground application does not process it. In other words, if the foreground application is not registered for raw input, then the background application that is registered will receive the input.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_INPUTSINK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p>If set, this enables the caller to receive the input even when the caller is not in the foreground. Note that <strong>hwndTarget</strong> must be specified.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOHOTKEYS}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the application-defined keyboard device hotkeys are not handled. However, the system hotkeys; for example, {{ALT}}+{{TAB}} and {{CTRL}}+{{ALT}}+{{DEL}}, are still handled. By default, all keyboard hotkeys are handled. <strong>{{RIDEV_NOHOTKEYS}}</strong> can be specified even if <strong>{{RIDEV_NOLEGACY}}</strong> is not specified and <strong>hwndTarget</strong> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOLEGACY}}</strong></dt> <dt>0x00000030</dt> </dl> </td><td> <p>If set, this prevents any devices specified by <strong>usUsagePage</strong> or <strong>usUsage</strong> from generating legacy messages. This is only for the mouse and keyboard. See Remarks.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_PAGEONLY}}</strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>If set, this specifies all devices whose top level collection is from the specified <strong>usUsagePage</strong>. Note that <strong>usUsage</strong> must be zero. To exclude a particular top level collection, use <strong>{{RIDEV_EXCLUDE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_REMOVE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>If set, this removes the top level collection from the inclusion list. This tells the operating system to stop reading from a device which matches the top level collection.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A handle to the target window. If <strong>{{NULL}}</strong> it follows the keyboard focus.</p> </dd> + + + + + <p>Contains information about a raw input device.</p> + + + <dd> <p>A handle to the raw input device. </p> </dd> + + + <dd> <p>The type of device. This can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The device is an {{HID}} that is not a keyboard and not a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The device is a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The device is a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the raw input from the specified device.</p> + <p><strong>GetRawInputData</strong> gets the raw input one <strong>{{RAWINPUT}}</strong> structure at a time. In contrast, <strong>GetRawInputBuffer</strong> gets an array of <strong>{{RAWINPUT}}</strong> structures.</p> + <p>If <em>pData</em> is <strong>{{NULL}}</strong> and the function is successful, the return value is 0. If <em>pData</em> is not <strong>{{NULL}}</strong> and the function is successful, the return value is the number of bytes copied into pData.</p><p>If there is an error, the return value is (<strong>{{UINT}}</strong>)-1.</p> + + + <dd> <p>A handle to the <strong>{{RAWINPUT}}</strong> structure. This comes from the <em>lParam</em> in <strong>{{WM_INPUT}}</strong>. </p> </dd> + + + <dd> <p>The command flag. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RID_HEADER}}</strong></dt> <dt>0x10000005</dt> </dl> </td><td> <p>Get the header information from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RID_INPUT}}</strong></dt> <dt>0x10000003</dt> </dl> </td><td> <p>Get the raw data from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the data that comes from the <strong>{{RAWINPUT}}</strong> structure. This depends on the value of <em>uiCommand</em>. If <em>pData</em> is <strong>{{NULL}}</strong>, the required size of the buffer is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Retrieves information about the raw input device.</p> + <p>If successful, this function returns a non-negative number indicating the number of bytes copied to <em>pData</em>. </p><p>If <em>pData</em> is not large enough for the data, the function returns -1. If <em>pData</em> is <strong>{{NULL}}</strong>, the function returns a value of zero. In both of these cases, <em>pcbSize</em> is set to the minimum size required for the <em>pData</em> buffer.</p><p>Call <strong>GetLastError</strong> to identify any other errors.</p> + + + <dd> <p>A handle to the raw input device. This comes from the <strong>hDevice</strong> member of <strong>{{RAWINPUTHEADER}}</strong> or from <strong>GetRawInputDeviceList</strong>. </p> </dd> + + + <dd> <p>Specifies what data will be returned in <em>pData</em>. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICENAME}}</strong></dt> <dt>0x20000007</dt> </dl> </td><td> <p><em>pData</em> points to a string that contains the device name. </p> <p>For this <em>uiCommand</em> only, the value in <em>pcbSize</em> is the character count (not the byte count).</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICEINFO}}</strong></dt> <dt>0x2000000b</dt> </dl> </td><td> <p><em>pData</em> points to an <strong>{{RID_DEVICE_INFO}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_PREPARSEDDATA}}</strong></dt> <dt>0x20000005</dt> </dl> </td><td> <p><em>pData</em> points to the previously parsed data.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a buffer that contains the information specified by <em>uiCommand</em>. If <em>uiCommand</em> is <strong>{{RIDI_DEVICEINFO}}</strong>, set the <strong>cbSize</strong> member of <strong>{{RID_DEVICE_INFO}}</strong> to <code>sizeof({{RID_DEVICE_INFO}})</code> before calling <strong>GetRawInputDeviceInfo</strong>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + + + <p>Performs a buffered read of the raw input data.</p> + <p>Using <strong>GetRawInputBuffer</strong>, the raw input data is buffered in the array of <strong>{{RAWINPUT}}</strong> structures. For an unbuffered read, use the <strong>GetMessage</strong> function to read in the raw input data. </p><p>The <strong>{{NEXTRAWINPUTBLOCK}}</strong> macro allows an application to traverse an array of <strong>{{RAWINPUT}}</strong> structures.</p><strong>Note</strong>??To get the correct size of the raw input buffer, do not use *<em>pcbSize</em>, use *<em>pcbSize</em> * 8 instead. To ensure <strong>GetRawInputBuffer</strong> behaves properly on {{WOW64}}, you must align the <strong>{{RAWINPUT}}</strong> structure by 8 bytes. The following code shows how to align <strong>{{RAWINPUT}}</strong> for {{WOW64}}. <pre>[StructLayout(LayoutKind.Explicit)] +internal struct {{RAWINPUT}} +{ [FieldOffset(0)] public {{RAWINPUTHEADER}} header; [FieldOffset(16+8)] public {{RAWMOUSE}} mouse; [FieldOffset(16+8)] public {{RAWKEYBOARD}} keyboard; [FieldOffset(16+8)] public {{RAWHID}} hid; +} +</pre>? + <p>If <em>pData</em> is {{NULL}} and the function is successful, the return value is zero. If <em>pData</em> is not {{NULL}} and the function is successful, the return value is the number of <strong>{{RAWINPUT}}</strong> structures written to <em>pData</em>.</p><p>If an error occurs, the return value is (<strong>{{UINT}}</strong>)-1. Call <strong>GetLastError</strong> for the error code.</p> + + + <dd> <p>A reference to a buffer of <strong>{{RAWINPUT}}</strong> structures that contain the raw input data. If <strong>{{NULL}}</strong>, the minimum required buffer, in bytes, is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUT}}</strong> structure. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Registers the devices that supply the raw input data.</p> + <p>To receive <strong>{{WM_INPUT}}</strong> messages, an application must first register the raw input devices using <strong>RegisterRawInputDevices</strong>. By default, an application does not receive raw input.</p><p>To receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> messages, an application must specify the {{RIDEV_DEVNOTIFY}} flag for each device class that is specified by the usUsagePage and usUsage fields of the <strong>{{RAWINPUTDEVICE}}</strong> structure . By default, an application does not receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for raw input device arrival and removal.</p><p>If a <strong>{{RAWINPUTDEVICE}}</strong> structure has the {{RIDEV_REMOVE}} flag set and the hwndTarget parameter is not set to {{NULL}}, then parameter validation will fail. </p> + <p><strong>{{TRUE}}</strong> if the function succeeds; otherwise, <strong>{{FALSE}}</strong>. If the function fails, call <strong>GetLastError</strong> for more information.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures that represent the devices that supply the raw input.</p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures pointed to by <em>pRawInputDevices</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the information about the raw input devices for the current application.</p> + <p>To receive raw input from a device, an application must register it by using <strong>RegisterRawInputDevices</strong>. </p> + <p>If successful, the function returns a non-negative number that is the number of <strong>{{RAWINPUTDEVICE}}</strong> structures written to the buffer. </p><p>If the <em>pRawInputDevices</em> buffer is too small or <strong>{{NULL}}</strong>, the function sets the last error as <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>, returns -1, and sets <em>puiNumDevices</em> to the required number of devices. If the function fails for any other reason, it returns -1. For more details, call <strong>GetLastError</strong>. </p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures for the application. </p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures in *<em>pRawInputDevices</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure. </p> </dd> + + + + + <p>Enumerates the raw input devices attached to the system. </p> + <p>The devices returned from this function are the mouse, the keyboard, and other Human Interface Device ({{HID}}) devices.</p><p>To get more detailed information about the attached devices, call <strong>GetRawInputDeviceInfo</strong> using the hDevice from <strong>{{RAWINPUTDEVICELIST}}</strong>. </p> + <p>If the function is successful, the return value is the number of devices stored in the buffer pointed to by <em>pRawInputDeviceList</em>.</p><p>On any other error, the function returns (<strong>{{UINT}}</strong>) -1 and <strong>GetLastError</strong> returns the error indication.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICELIST}}</strong> structures for the devices attached to the system. If <strong>{{NULL}}</strong>, the number of devices are returned in *<em>puiNumDevices</em>. </p> </dd> + + + <dd> <p>If <em>pRawInputDeviceList</em> is <strong>{{NULL}}</strong>, the function populates this variable with the number of devices attached to the system; otherwise, this variable specifies the number of <strong>{{RAWINPUTDEVICELIST}}</strong> structures that can be contained in the buffer to which <em>pRawInputDeviceList</em> points. If this value is less than the number of devices attached to the system, the function returns the actual number of devices in this variable and fails with <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>.</p> </dd> + + + <dd> <p>The size of a <strong>{{RAWINPUTDEVICELIST}}</strong> structure, in bytes.</p> </dd> + + + + + <p>Indicates the filter type.</p> + <strong>Note</strong>??Note that the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>LowPassOnePoleFilter</strong> or the <strong>HighPassOnePoleFilter</strong>.? + + + <dd> <p>Attenuates (reduces) frequencies above the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies outside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies inside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies above the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>Defines a destination voice that is the target of a send from another voice and specifies whether a filter should be used.</p> + + + + <dd> <p>Indicates whether a filter should be used on data sent to the voice pointed to by <strong>pOutputVoice</strong>. Flags can be 0 or {{XAUDIO2_SEND_USEFILTER}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{IXAudio2Voice}}</strong> that will be the target of the send. The <strong>pOutputVoice</strong> member cannot be {{NULL}}.</p> </dd> + + + + + <p>Defines a set of voices to receive data from a single output voice.</p> + <p>If <strong>pSends</strong> is not {{NULL}} all of its elements must be non-{{NULL}}. To send output to the default mastering voice call <strong>{{IXAudio2Voice::SetOutputVoices}}</strong> with the pSendList argument set to {{NULL}}. </p><p>Setting <strong>SendCount</strong> to 0 is useful for certain effects such as volume meters or file writers that don't generate any audio output to pass on to another voice. </p><p>If needed, a voice will perform a single sample rate conversion, from the voice's input sample rate to the input sample rate of the voice's output voices. Because only one sample rate conversion will be performed, all the voice's output voices must have the same input sample rate. If the input sample rates of the voice and its output voices are the same, no sample rate conversion is performed. +</p> + + + <dd> <p>Number of voices to receive the output of the voice. An <strong>OutputCount</strong> value of 0 indicates the voice should not send output to any voices.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_SEND_DESCRIPTOR}}</strong> structures describing destination voices and the filters that should be used when sending to the voices. This array should contain <strong>SendCount</strong> elements. If <strong>SendCount</strong> is 0 <strong>pSends</strong> should be {{NULL}}. Note that <strong>pSends</strong> cannot contain the same voice more than once.</p> </dd> + + + + + <p>Contains information about an {{XAPO}} for use in an effect chain.</p> + <p>{{XAPO}} instances are passed to {{XAudio2}} as <strong>{{IUnknown}}</strong> interfaces and {{XAudio2}} uses <strong>{{IXAPO::QueryInterface}}</strong> to acquire an <strong>{{IXAPO}}</strong> interface and to detect whether the {{XAPO}} implements the <strong>{{IXAPOParameters}}</strong> interface. </p><p>For additional information on using {{XAPOs}} with {{XAudio2}} see How to: Create an Effect Chain and How to: Use an {{XAPO}} in {{XAudio2}}.</p> + + + + <p>Defines an effect chain.</p> + + + + <dd> <p>Number of effects in the effect chain for the voice.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structures containing references to {{XAPO}} instances.</p> </dd> + + + + + <p>Defines filter parameters for a source voice.</p> + <p>Setting {{XAUDIO2_FILTER_PARAMETERS}} with the following values is acoustically equivalent to the filter being fully bypassed.</p><pre>{{XAUDIO2_FILTER_PARAMETERS}} FilterParams; +FilterParams.Frequency = 1.0f; +FilterParams.OneOverQ = 1.0f; +FilterParams.Type = LowPassFilter; +</pre><p>The following formulas show the relationship between the members of {{XAUDIO2_FILTER_PARAMETERS}} and the per-voice filter.</p><pre>Yl( n ) = {{F1}} yb( n ) + yl( n - 1 ) +Yb( n ) = {{F1}} yh( n ) + yb( n - 1 ) +Yh( n ) = x( n ) - yl( n ) - OneOverQ(yb( n - 1 ) +Yn( n ) = Yl(n) + Yh(n) </pre><p>Where:</p><pre>Yl = lowpass output +Yb = bandpass output +Yh = highpass output +Yn = notch output +{{F1}} = {{XAUDIO2_FILTER_PARAMETERS}}.Frequency +OneOverQ = {{XAUDIO2_FILTER_PARAMETERS}}.OneOverQ</pre> + + + <dd> <p>The <strong>{{XAUDIO2_FILTER_TYPE}}</strong>.</p> </dd> + + + <dd> <p>Filter radian frequency calculated as (2 * sin(pi * (desired filter cutoff frequency) / sampleRate)). The frequency must be greater than or equal to 0 and less than or equal to {{XAUDIO2_MAX_FILTER_FREQUENCY}}. The maximum frequency allowable is equal to the source sound's sample rate divided by six which corresponds to the maximum filter radian frequency of 1. For example, if a sound's sample rate is 48000 and the desired cutoff frequency is the maximum allowable value for that sample rate, 8000, the value for <strong>Frequency</strong> will be 1. +If {{XAUDIO2_HELPER_FUNCTIONS}} is defined, {{XAudio2}}.h will include the <strong>{{XAudio2RadiansToCutoffFrequency}}</strong> and <strong>{{XAudio2CutoffFrequencyToRadians}}</strong> helper functions for converting between hertz and radian frequencies. Defining {{XAUDIO2_HELPER_FUNCTIONS}} will also include <strong>{{XAudio2CutoffFrequencyToOnePoleCoefficient}}</strong> for converting between hertz and a one-pole coefficient suitable for use with the LowPassOnePoleFilter and HighPassOnePoleFilter. </p> </dd> + + + <dd> <p>Reciprocal of Q factor. Controls how quickly frequencies beyond Frequency are dampened. Larger values result in quicker dampening while smaller values cause dampening to occur more gradually. Must be greater than 0 and less than or equal to {{XAUDIO2_MAX_FILTER_ONEOVERQ}}.</p> </dd> + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + <p>Used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> when submitting xWMA data.</p> + <p>When streaming an xWMA file a few packets at a time, {{XAUDIO2_END_OF_STREAM}} should be specified on the last packet. Alternatively, the application may call <strong>{{IXAudio2SourceVoice::Discontinuity}}</strong> after submitting the last packet. </p><p>In addition, when streaming an xWMA file a few packets at a time, the application should subtract <strong>pDecodedPacketCumulativeBytes</strong>[<strong>PacketCount</strong>-1] of the previous packet from all the entries of the currently submitted packet. </p><p>The members of <strong>{{XAUDIO2_BUFFER_WMA}}</strong> correspond to values contained in the 'dpds' {{RIFF}} chunk of the xWMA file being played. <strong>PacketCount</strong> will correspond to the size in {{UINT32s}} of the chunk. <strong>pDecodedPacketCumulativeBytes</strong> will correspond to a {{UINT32}} buffer containing the contents of the chunk. The contents of the buffer will need to be byte swapped when loading the buffer on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped and destroyed. </p><p>{{XAUDIO}} 2.8 in Windows 8.x does not support xWMA decoding. Use Windows Media Foundation {{APIs}} to perform the decoding from {{WMA}} to {{PCM}} instead. This functionality is available in the DirectX {{SDK}} versions of {{XAUDIO}} and in {{XAUDIO}} 2.9 in Windows?10.</p> + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Contains performance information.</p> + <p>{{CPU}} cycles are recorded using . Use to convert these values.</p> + + + <dd> <p>{{CPU}} cycles spent on audio processing since the last call to the <strong>{{IXAudio2::StartEngine}}</strong> or <strong>{{IXAudio2::GetPerformanceData}}</strong> function.</p> </dd> + + + <dd> <p>Total {{CPU}} cycles elapsed since the last call. </p> <strong>Note</strong>??This only counts cycles on the {{CPU}} on which {{XAudio2}} is running. ? </dd> + + + <dd> <p>Fewest {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Most {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Total memory currently in use.</p> </dd> + + + <dd> <p>Minimum delay that occurs between the time a sample is read from a source buffer and the time it reaches the speakers. </p> <table> <tr><th>Windows</th></tr> <tr><td>The delay reported is a variable value equal to the rough distance between the last sample submitted to the driver by {{XAudio2}} and the sample currently playing. The following factors can affect the delay: playing multichannel audio on a hardware-accelerated device; the type of audio device (WavePci, WaveCyclic, or WaveRT); and, to a lesser extent, audio hardware implementation. +</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>The delay reported is a fixed value, which is normally 1,024 samples (21.333 ms at 48 kHz). If <strong>{{XOverrideSpeakerConfig}}</strong> has been called using the <strong>{{XAUDIOSPEAKERCONFIG_LOW_LATENCY}}</strong> flag, the delay reported is 512 samples (10.667 ms at 48 kHz). +</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Total audio dropouts since the engine started.</p> </dd> + + + <dd> <p>Number of source voices currently playing. </p> </dd> + + + <dd> <p>Total number of source voices currently in existence. </p> </dd> + + + <dd> <p>Number of submix voices currently playing.</p> </dd> + + + <dd> <p>Number of resampler xAPOs currently active.</p> </dd> + + + <dd> <p>Number of matrix mix xAPOs currently active.</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>Number of source voices decoding {{XMA}} data.</td></tr> </table> <p>?</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>A voice can use more than one {{XMA}} stream.</td></tr> </table> <p>?</p> </dd> + + + + + <p>Contains the new global debug configuration for {{XAudio2}}. Used with the <strong>SetDebugConfiguration</strong> function.</p> + <p>Debugging messages can be completely turned off by initializing <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> to all zeroes.</p><strong>Note</strong>??For this version of {{XAudio2}}, only the <strong>{{XAUDIO2_LOG_ERRORS}}</strong> value is supported on <strong>TraceMask</strong> or <strong>BreakMask</strong>. All other members and values are ignored.? + + + + <p>{{IXAudio2}} is the interface for the {{XAudio2}} object that manages all audio engine states, the audio processing thread, the voice graph, and so forth. </p><p>This is the only {{XAudio2}} interface that is derived from the {{COM}} <strong>{{IUnknown}}</strong> interface. It controls the lifetime of the {{XAudio2}} object using two methods derived from <strong>{{IUnknown}}</strong>: <strong>{{IXAudio2::AddRef}}</strong> and <strong>{{IXAudio2::Release}}</strong>. No other {{XAudio2}} objects are reference-counted; their lifetimes are explicitly controlled using <em>create</em> and <em>destroy</em> calls, and are bounded by the lifetime of the {{XAudio2}} object that owns them.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} included three member functions that are not present in the Windows 8 version: <strong>GetDeviceCount</strong>, <strong>GetDeviceDetails</strong>, and <strong>Initialize</strong>. These enumeration methods are no longer provided and standard Windows Audio {{APIs}} should be used for device enumeration instead.</p> + + + + <p>Adds an <strong>{{IXAudio2EngineCallback}}</strong> reference to the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>This method can be called multiple times, allowing different components or layers of the same application to manage their own engine callback implementations separately. </p><p>It is invalid to call <strong>RegisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>RegisterForCallbacks</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + + <p>Removes an <strong>{{IXAudio2EngineCallback}}</strong> reference from the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>It is invalid to call <strong>UnregisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). </p> + <p>This method does not return a value.</p> + + + + <p>Creates and configures a source voice.</p> + <p>Source voices read audio data from the client. They process the data and send it to the {{XAudio2}} processing graph. </p><p>A source voice includes a variable-rate sample rate conversion, to convert data from the source format sample rate to the output rate required for the voice send list. If you use a {{NULL}} send list, the target sample rate will be the mastering voice's input sample rate. If you provide a single voice in pSendList, that voice's input sample rate is the target rate. If you provide multiple voices in the pSendList, all the source voice's output voices must be running at the same input sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destory a mastering voice if any source or submix voices still exist. </p><p>Source voices are always processed before any submix or mastering voices. This means that you do not need a ProcessingStage parameter to control the processing order. </p><p>When first created, source voices are in the stopped state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSourceVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSourceVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSourceVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSourceVoice</strong> is called. +</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}}-specific error codes.</p> + + + <dd> <p>If successful, returns a reference to the new <strong>{{IXAudio2SourceVoice}}</strong> object.</p> </dd> + + + <dd> <p>Pointer to a one of the structures in the table below. This structure contains the expected format for all audio buffers submitted to the source voice. +{{XAudio2}} supports {{PCM}} and {{ADPCM}} voice types. </p> <table> <tr><th>Format tag</th><th>Wave format structure</th><th>Size (in bytes)</th></tr> <tr><td>{{WAVE_FORMAT_PCM}} (0x0001) </td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>16</td></tr> <tr><td>-or-</td><td> <strong>{{WAVEFORMATEX}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_IEEE_FLOAT}} (0x0003) [32-bit]</td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_ADPCM}} (0x0002) [{{MS}}-{{ADPCM}}]</td><td> <strong>{{ADPCMWAVEFORMAT}}</strong> </td><td>50</td></tr> <tr><td>{{WAVE_FORMAT_EXTENSIBLE}} (0xFFFE)</td><td> <strong>{{WAVEFORMATEXTENSIBLE}}</strong> </td><td>40</td></tr> </table> <p>?</p> <p>{{XAudio2}} supports the following {{PCM}} formats. +</p> <ul> <li>8-bit (unsigned) integer {{PCM}} </li> <li>16-bit integer {{PCM}} (optimal format for {{XAudio2}}) </li> <li>20-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>24-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>32-bit integer {{PCM}} </li> <li>32-bit float {{PCM}} (preferred format after 16-bit integer) +</li> </ul> <p>The number of channels in a source voice must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. The sample rate of a source voice must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}.</p> <strong>Note</strong>??{{PCM}} data formats such as <strong>{{PCMWAVEFORMAT}}</strong> and <strong>{{ADPCMWAVEFORMAT}}</strong> that require more information than provided by <strong>{{WAVEFORMATEX}}</strong> have a <strong>{{WAVEFORMATEX}}</strong> structure as the first member in their format structures. When you create a source voice with one of those formats, cast the format's structure as a <strong>{{WAVEFORMATEX}}</strong> structure and use it as the value for <em>pSourceFormat</em>. ? </dd> + + + <dd> <p>Flags that specify the behavior of the source voice. A flag can be 0 or a combination of one or more of the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_NOPITCH}}</td><td>No pitch control is available on the voice.?</td></tr> <tr><td>{{XAUDIO2_VOICE_NOSRC}}</td><td>No sample rate conversion is available on the voice. The voice's outputs must have the same sample rate.<strong>Note</strong>??The {{XAUDIO2_VOICE_NOSRC}} flag causes the voice to behave as though the {{XAUDIO2_VOICE_NOPITCH}} flag also is specified. ? </td></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.?</td></tr> </table> <p>?</p> <strong>Note</strong>??The {{XAUDIO2_VOICE_MUSIC}} flag is not supported on Windows. ? </dd> + + + <dd> <p>Highest allowable frequency ratio that can be set on this voice. The value for this argument must be between {{XAUDIO2_MIN_FREQ_RATIO}} and {{XAUDIO2_MAX_FREQ_RATIO}}. Subsequent calls to <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> are clamped between {{XAUDIO2_MIN_FREQ_RATIO}} and <strong>MaxFrequencyRatio</strong>. +The maximum value for this argument is defined as {{XAUDIO2_MAX_FREQ_RATIO}}, which allows pitch to be raised by up to 10 octaves. </p> <p>If <em>MaxFrequencyRatio</em> is less than 1.0, the voice will use that ratio immediately after being created (rather than the default of 1.0). </p> <p> </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For {{XMA}} voices, there is one more restriction on the <em>MaxFrequencyRatio</em> argument and the voice's sample rate. The product of these two numbers cannot exceed {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO}} for one-channel voices or {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL}} for voices with any other number of channels. If the value specified for <em>MaxFrequencyRatio</em> is too high for the specified format, the call to <strong>CreateSourceVoice</strong> fails and produces a debug message. +</td></tr> </table> <p>?</p> <strong>Note</strong>??You can use the lowest possible <em>MaxFrequencyRatio</em> value to reduce {{XAudio2}}'s memory usage. ? </dd> + + + <dd> <p>Pointer to a client-provided callback interface, <strong>{{IXAudio2VoiceCallback}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the source voice. If pSendList is {{NULL}}, the send list defaults to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the source voice.</p> </dd> + + + + + <p>Creates and configures a submix voice.</p> + <p>Submix voices receive the output of one or more source or submix voices. They process the output, and then send it to another submix voice or to a mastering voice. </p><p>A submix voice performs a sample rate conversion from the input sample rate to the input rate of its output voices in <em>pSendList</em>. If you specify multiple voice sends, they must all have the input same sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destroy a mastering voice if any source or submix voices still exist. </p><p>When first created, submix voices are in the started state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means that memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSubmixVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSubmixVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the <em>pEffectChain</em> argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSubmixVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSubmixVoice</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>On success, returns a reference to the new <strong>{{IXAudio2SubmixVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels in the input audio data of the submix voice. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. +</p> </dd> + + + <dd> <p>Sample rate of the input audio data of submix voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. <em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> </dd> + + + <dd> <p>Flags that specify the behavior of the submix voice. It can be 0 or the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An arbitrary number that specifies when this voice is processed with respect to other submix voices, if the {{XAudio2}} engine is running other submix voices. The voice is processed after all other voices that include a smaller <em>ProcessingStage</em> value and before all other voices that include a larger <em>ProcessingStage</em> value. Voices that include the same <em>ProcessingStage</em> value are processed in any order. A submix voice cannot send to another submix voice with a lower or equal <em>ProcessingStage</em> value. This prevents audio being lost due to a submix cycle. +</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the submix voice. If <em>pSendList</em> is {{NULL}}, the send list will default to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the submix voice. </p> </dd> + + + + + <p>Creates and configures a mastering voice.</p> + <p>Mastering voices receive the output of one or more source or submix voices. They process the data, and send it to the audio output device. </p><p>Typically, you should create a mastering voice with an input sample rate that will be used by the majority of the title's audio content. The mastering voice performs a sample rate conversion from this input sample rate to the actual device output rate. </p><p>You cannot create a source or submix voices until a mastering voice exists. You cannot destroy a mastering voice if any source or submix voices still exist. </p><p>Mastering voices are always processed after all source and submix voices. This means that you need not specify a <em>ProcessingStage</em> parameter to control the processing order. </p><p>{{XAudio2}} only allows one mastering voice to exist at once. If you attempt to create more than one voice, {{XAUDIO2_E_INVALID_CALL}} is returned. If an additional mastering voice is needed, for example for an output device with a different audio category set, you will need to create an additional {{XAudio2}} instance. </p><p>When first created, mastering voices are in the started state. </p><p>It is invalid to call <strong>CreateMasteringVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateMasteringVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateMasteringVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateMasteringVoice</strong> is called. </p><p>Note that the DirectX {{SDK}} {{XAUDIO2}} version of <strong>CreateMasteringVoice</strong> took a DeviceIndex argument instead of a szDeviceId and a StreamCategory argument. This reflects the changes needed for the standard Windows device enumeration model.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. Returns {{ERROR_NOT_FOUND}} if no default audio device exists and {{NULL}} is passed in as the szDeviceId parameter. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p> If successful, returns a reference to the new <strong>{{IXAudio2MasteringVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels the mastering voice expects in its input audio. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. </p> <p>You can set <em>InputChannels</em> to {{XAUDIO2_DEFAULT_CHANNELS}}, which causes {{XAudio2}} to try to detect the system speaker configuration setup. </p> </dd> + + + <dd> <p>Sample rate of the input audio data of the mastering voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. +<em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> <p>You can set <em>InputSampleRate</em> to {{XAUDIO2_DEFAULT_SAMPLERATE}}, with the default being determined by the current platform. </p> <p>Windows {{XP}} defaults to 44100. </p> <p>Windows Vista and Windows 7 default to the setting specified in the Sound Control Panel. The default for this setting is 44100 (or 48000 if required by the driver). Flags +</p> </dd> + + + <dd> <p> Flags that specify the behavior of the mastering voice. Must be 0.</p> </dd> + + + <dd> <p>Identifier of the device to receive the output audio. Specifying the default value of {{NULL}} causes {{XAudio2}} to select the global default audio device.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes an effect chain to use in the mastering voice, or {{NULL}} to use no effects.</p> </dd> + + + <dd> <p>The audio stream category to use for this mastering voice.</p> </dd> + + + + + <p>Starts the audio processing thread.</p> + <p>After <strong>StartEngine</strong> is called, all started voices begin to consume audio. All enabled effects start running, and the resulting audio is sent to any connected output devices. When {{XAudio2}} is first initialized, the engine is already in the started state. </p><p>It is invalid to call <strong>StartEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>StartEngine</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Stops the audio processing thread.</p> + <p>When <strong>StopEngine</strong> is called, all output is stopped immediately. However, the audio graph is left untouched, preserving effect parameters, effect histories (for example, the data stored by a reverb effect in order to emit echoes of a previous sound), voice states, pending source buffers, cursor positions, and so forth. When the engine is restarted, the resulting audio output will be identical?apart from a period of silence?to the output that would have been produced if the engine had never been stopped. </p><p>It is invalid to call <strong>StopEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Atomically applies a set of operations that are tagged with a given identifier.</p> + <p><strong>CommitChanges</strong> does nothing if no operations are tagged with the given identifier. </p><p>See the {{XAudio2}} Operation Sets overview about working with <strong>CommitChanges</strong> and {{XAudio2}} interface methods that may be deferred. +</p> + <p>Returns {{S_OK}} if successful; returns an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Identifier of the set of operations to be applied. To commit all pending operations, pass <strong>{{XAUDIO2_COMMIT_ALL}}</strong>. </p> </dd> + + + + + <p>Returns current resource usage details, such as available memory or {{CPU}} usage.</p> + <p>For specific information on the statistics returned by <strong>GetPerformanceData</strong>, see the <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure reference. </p> + <p>This method does not return a value.</p> + + + <dd> <p>On success, reference to an <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure that is returned. +</p> </dd> + + + + + <p>Changes global debug logging options for {{XAudio2}}.</p> + <p>SetDebugConfiguration sets the debug configuration for the given instance of {{XAudio2}} engine. See <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> Structure for supported debug options. By default, {{XAudio2}} does not log debug output or break on errors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> structure that contains the new debug configuration.</p> </dd> + + + <dd> <p>This parameter is reserved and must be {{NULL}}.</p> </dd> + + + + + <p><strong>{{IXAudio2Voice}}</strong> represents the base interface from which <strong>{{IXAudio2SourceVoice}}</strong>, <strong>{{IXAudio2SubmixVoice}}</strong> and <strong>{{IXAudio2MasteringVoice}}</strong> are derived. The methods listed below are common to all voice subclasses.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Returns information about the creation flags, input channels, and sample rate of a voice.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{XAUDIO2_VOICE_DETAILS}}</strong> structure containing information about the voice.</p> </dd> + + + + + <p>Designates a new set of submix or mastering voices to receive the output of the voice.</p> + <p>This method is only valid for source and submix voices. Mastering voices can not send audio to another voice. </p><p>After calling <strong>SetOutputVoices</strong> a voice's current send levels will be replaced by a default send matrix. The <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> method must be called to set a custom matrix for the new sendlist. </p><p>It is invalid to call <strong>SetOutputVoices</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>SetOutputVoices</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}.</p><strong>Note</strong>??Calling <strong>SetOutputVoices</strong> invalidates any send matrices previously set with <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>Array of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structure references to destination voices. If <em>pSendList</em> is {{NULL}}, the voice will send its output to the current mastering voice. To set the voice to not send its output anywhere set the <strong>OutputCount</strong> member of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> to 0. All of the voices in a send list must have the same input sample rate, see {{XAudio2}} Sample Rate Conversions for additional information.</p> </dd> + + + + + <p>Replaces the effect chain of the voice.</p> + <p>The number of output channels allowed for a voice's effect chain is locked at creation of the voice. If you create the voice with an effect chain, any new effect chain passed to <strong>SetEffectChain</strong> must have the same number of input and output channels as the original effect chain. If you create the voice without an effect chain, the number of output channels allowed for the effect chain will default to the number of input channels for the voice. If any part of effect chain creation fails, none of it is applied. </p><p>After you attach an effect to an {{XAudio2}} voice, {{XAudio2}} takes control of the effect, and the client should not make any further calls to it. The simplest way to ensure this is to release all references to the effect. </p><p>It is invalid to call <strong>SetEffectChain</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>SetEffectChain</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>SetEffectChain</strong> successfully completes, and may be deleted immediately after <strong>SetEffectChain</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes the new effect chain to use. If {{NULL}} is passed, the current effect chain is removed.</p> <strong>Note</strong>??If <em>pEffectChain</em> is non-{{NULL}}, the <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that it points to must specify at least one effect. ? </dd> + + + + + <p>Enables the effect at a given position in the effect chain of the voice.</p> + <p>Be careful when you enable an effect while the voice that hosts it is running. Such an action can result in a problem if the effect significantly changes the audio's pitch or volume. </p><p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p><strong>EnableEffect</strong> takes effect immediately when you call it from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Disables the effect at a given position in the effect chain of the voice.</p> + <p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p>Disabling an effect immediately removes it from the processing graph. Any pending audio in the effect?such as a reverb tail?is not played. Be careful disabling an effect while the voice that hosts it is running. This can result in an audible artifact if the effect significantly changes the audio's pitch or volume. </p><p><strong>DisableEffect</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of valid error codes.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Returns the running state of the effect at a specified position in the effect chain of the voice.</p> + <p><strong>GetEffectState</strong> always returns the effect's actual current state. However, this may not be the state set by the most recent <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call: the actual state is only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if EnableEffect/DisableEffect was called with a deferred operation {{ID}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Returns {{TRUE}} If the effect is enabled. If the effect is disabled, returns {{FALSE}}.</p> </dd> + + + + + <p>Sets parameters for a given effect in the voice's effect chain.</p> + <p>The specific effect being used determines the valid size and format of the <em>pParameters</em> buffer. The call will fail if <em>pParameters</em> is invalid or if <em>ParametersByteSize</em> is not exactly the size that the effect expects. The client must take care to direct the <strong>SetEffectParameters</strong> call to the right effect. If this call is directed to a different effect that happens to accept the same parameter block size, the parameters will be interpreted differently. This may lead to unexpected results. </p><p>The memory pointed to by <em>pParameters</em> must <em>not</em> be freed immediately, because {{XAudio2}} will need to refer to it later when the parameters actually are applied to the effect. This happens during the next audio processing pass if the <em>OperationSet</em> argument is <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. Otherwise, the parameters are applied to the effect later, during the first processing pass after the <strong>{{IXAudio2::CommitChanges}}</strong> function is called with the same <em>OperationSet</em> argument. </p><p><strong>SetEffectParameters</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetEffectParameters}}</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. The actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface. +</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p> Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p> Size of the <strong>pParameters</strong> array in bytes.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the current effect-specific parameters of a given effect in the voice's effect chain.</p> + <p><strong>GetEffectParameters</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}). </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface.</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p>Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p>Size, in bytes, of the pParameters array.</p> </dd> + + + + + <p>Sets the voice's filter parameters.</p> + <p><strong>SetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p>This method is usable only on source and submix voices and has no effect on mastering voices.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetFilterParameters}}</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the voice's filter parameters.</p> + <p><strong>GetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p><strong>GetFilterParameters</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}). </p><strong>Note</strong>??<strong>GetFilterParameters</strong> is usable only on source and submix voices and has no effect on mastering voices.? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + + + <p>Sets the filter parameters on one of this voice's sends.</p> + <p><strong>SetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on a mastering voice's sends. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be set.</p> </dd> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the filter parameters from one of this voice's sends.</p> + <p><strong>GetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on mastering voices? sends. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be read.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Writes a number of 32-bit immediate values to the specified buffer locations directly from the command stream.</p> + <p><strong>WriteBufferImmediate</strong> performs <em>Count</em> number of 32-bit writes: one for each value and destination specified in <em>pParams</em>.</p><p>The receiving buffer (resource) must be in the <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong> state to be a valid destination for <strong>WriteBufferImmediate</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures that are pointed to by <em>pParams</em> and <em>pModes</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures equal to <em>Count</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE}}</strong> structures equal to <em>Count</em>. The default value is <strong>null</strong>; passing <strong>null</strong> causes the system to write all immediate values using <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT}}</strong>.</p> </dd> + + + + + <p>Sets the volume levels for the voice, per channel.</p> + <p><strong>SetChannelVolumes</strong> controls a voice's per-channel output levels and is applied just after the voice's final {{SRC}} and before its sends. </p><p>This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetChannelVolumes}}</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Number of channels in the voice.</p> </dd> + + + <dd> <p>Array containing the new volumes of each channel in the voice. The array must have <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the volume levels for the voice, per channel.</p> + <p>These settings are applied after the effect chain is applied. This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain, 0 means silence, and negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>GetChannelVolumes</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Confirms the channel count of the voice.</p> </dd> + + + <dd> <p>Returns the current volume level of each channel in the voice. The array must have at least <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Sets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method is valid only for source and submix voices, because mastering voices write directly to the device with no matrix mixing. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>The {{X3DAudio}} function <strong>{{X3DAudioCalculate}}</strong> can produce an output matrix for use with <strong>SetOutputMatrix</strong> based on a sound's position and a listener's position.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputMatrix}}</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Pointer to a destination <strong>{{IXAudio2Voice}}</strong> for which to set volume levels.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>SetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> ? <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel <em>S</em> to destination channel <em>D</em> is specified in the form <em>pLevelMatrix</em>[<em>SourceChannels</em> ? <em>D</em> + <em>S</em>]. +</p> <p>For example, when rendering two-channel stereo input into 5.1 output that is weighted toward the front channels?but is absent from the center and low-frequency channels?the matrix might have the values shown in the following table. </p> <table> <tr><th>Output</th><th>Left Input [Array Index]</th><th>Right Input [Array Index]</th></tr> <tr><td>Left</td><td>1.0 [0]</td><td>0.0 [1]</td></tr> <tr><td>Right</td><td>0.0 [2]</td><td>1.0 [3]</td></tr> <tr><td>Front Center</td><td>0.0 [4]</td><td>0.0 [5]</td></tr> <tr><td>{{LFE}}</td><td>0.0 [6]</td><td>0.0 [7]</td></tr> <tr><td>Rear Left</td><td>0.8 [8]</td><td>0.0 [9]</td></tr> <tr><td>Rear Right</td><td>0.0 [10]</td><td>0.8 [11]</td></tr> </table> <p>?</p> <strong>Note</strong>??The left and right input are fully mapped to the output left and right channels; 80 percent of the left and right input is mapped to the rear left and right channels. ? <p>See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method applies only to source and submix voices, because mastering voices write directly to the device with no matrix mixing. Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume level of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>See <strong>{{WAVEFORMATEXTENSIBLE}}</strong> for information on standard channel ordering. </p><strong>Note</strong>??<strong>GetOutputMatrix</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer specifying the destination <strong>{{IXAudio2Voice}}</strong> to retrieve the output matrix for.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>GetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> * <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel S to destination channel D is returned in the form <em>pLevelMatrix</em>[<em>DestinationChannels</em> ? S + D]. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Destroys the voice. If necessary, stops the voice and removes it from the {{XAudio2}} graph.</p> + <p>If any other voice is currently sending audio to this voice, the method fails. </p><p><strong>DestroyVoice</strong> waits for the audio processing thread to be idle, so it can take a little while (typically no more than a couple of milliseconds). This is necessary to guarantee that the voice will no longer make any callbacks or read any audio data, so the application can safely free up these resources as soon as the call returns. </p><p>To avoid title thread interruptions from a blocking <strong>DestroyVoice</strong> call, the application can destroy voices on a separate non-critical thread, or the application can use voice pooling strategies to reuse voices rather than destroying them. Note that voices can only be reused with audio that has the same data format and the same number of channels the voice was created with. A voice can play audio data with different sample rates than that of the voice by calling <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> with an appropriate ratio parameter. </p><p>It is invalid to call <strong>DestroyVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Use a source voice to submit audio data to the {{XAudio2}} processing pipeline.You must send voice data to a mastering voice to be heard, either directly or through intermediate submix voices. +</p> + + + + + <p>Starts consumption and processing of audio by the voice. Delivers the result to any connected submix or mastering voices, or to the output device.</p> + <p>If the {{XAudio2}} engine is stopped, the voice stops running. However, it remains in the started state, so that it starts running again as soon as the engine starts. </p><p>When first created, source voices are in the stopped state. Submix and mastering voices are in the started state. </p><p>After <strong>Start</strong> is called it has no further effect if called again before <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called. In addition multiple calls to <strong>Start</strong> without matching calls to <strong>{{IXAudio2SourceVoice::Stop}}</strong> will result in warning messages in debug builds.</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Flags that control how the voice is started. Must be 0.</p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Stops consumption of audio by the current voice.</p> + <p>All source buffers that are queued on the voice and the current cursor position are preserved. This allows the voice to continue from where it left off, when it is restarted. The <strong>{{IXAudio2SourceVoice::FlushSourceBuffers}}</strong> method can be used to flush queued source buffers. </p><p>By default, any pending output from voice effects?for example, reverb tails?is not played. Instead, the voice is immediately rendered silent. The {{XAUDIO2_PLAY_TAILS}} flag can be used to continue emitting effect output after the voice stops running. </p><p>A voice stopped with the {{XAUDIO2_PLAY_TAILS}} flag stops consuming source buffers, but continues to process its effects and send audio to its destination voices. A voice in this state can later be stopped completely by calling <strong>Stop</strong> again with the Flags argument set to 0. This enables stopping a voice with {{XAUDIO2_PLAY_TAILS}}, waiting sufficient time for any audio being produced by its effects to finish, and then fully stopping the voice by calling <strong>Stop</strong> again without {{XAUDIO2_PLAY_TAILS}}. This technique allows voices with effects to be stopped gracefully while ensuring idle voices will not continue to be processed after they have finished producing audio. </p><p><strong>Stop</strong> is always asynchronous, even if called within a callback. </p><strong>Note</strong>??{{XAudio2}} never calls any voice callbacks for a voice if the voice is stopped (even if it was stopped with {{XAUDIO2_PLAY_TAILS}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Flags that control how the voice is stopped. Can be 0 or the following: +</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_PLAY_TAILS}}</td><td>Continue emitting effect output after the voice is stopped.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Adds a new audio buffer to the voice queue.</p> + <p>The voice processes and plays back the buffers in its queue in the order that they were submitted. </p><p>The <strong>{{XAUDIO2_BUFFER}}</strong> structure includes details about the audio buffer's location and size, the part of the buffer that should actually be played, the loop region (if any) and loop count, the context reference to be used in any callbacks relating to this buffer, and an optional {{XAUDIO2_END_OF_STREAM}} flag that indicates that it is the last buffer of a contiguous sound. </p><p>If the voice is started and has no buffers queued, the new buffer will start playing immediately. If the voice is stopped, the buffer is added to the voice's queue and will be played when the voice starts. </p><p>If only part of the given buffer should be played, the <strong>PlayBegin</strong> and <strong>PlayLength</strong> fields in the <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the region to be played. A <strong>PlayLength</strong> value of 0 means to play the entire buffer (and in this case <strong>PlayBegin</strong> must be 0 as well). </p><p>If all or part of the buffer should be played in a continuous loop, the <strong>LoopBegin</strong>, <strong>LoopLength</strong> and <strong>LoopCount</strong> fields in <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the characteristics of the loop region. A <strong>LoopBegin</strong> value of {{XAUDIO2_NO_LOOP_REGION}} means that no looping should be performed, and in this case <strong>LoopLength</strong> and <strong>LoopCount</strong> must be given as 0. If a loop region is specified, it must be non-empty (<strong>LoopLength</strong> &gt; 0), and the loop count must be between 1 and {{XAUDIO2_MAX_LOOP_COUNT}} inclusive (or {{XAUDIO2_LOOP_INFINITE}} to specify an endless loop which will only end when <strong>{{IXAudio2SourceVoice::ExitLoop}}</strong> is called). A loop count of <em>N</em> means to skip backwards N times, i.e. to play the loop region <em>N</em>+1 times. </p><p>If an explicit play region is specified, it must begin and end within the given audio buffer (or, in the compressed case, within the set of samples that the buffer will decode to). In addition, the loop region cannot end past the end of the play region. </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For certain audio formats, there may be additional restrictions on the valid endpoints of any play or loop regions; e.g. for {{XMA}} buffers, the regions can only begin or end at 128-sample boundaries in the decoded audio. +</td></tr> </table><p>?</p><p>The <em>pBuffer</em> reference can be reused or freed immediately after calling this method, but the actual audio data referenced by <em>pBuffer</em> must remain valid until the buffer has been fully consumed by {{XAudio2}} (which is indicated by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback). </p><p>Up to {{XAUDIO2_MAX_QUEUED_BUFFERS}} buffers can be queued on a voice at any one time. </p><p><strong>SubmitSourceBuffer</strong> takes effect immediately when called from an {{XAudio2}} callback with an OperationSet of {{XAUDIO2_COMMIT_NOW}}. +</p><table> <tr><th>Xbox 360</th></tr> <tr><td>This method can be called from an Xbox system thread (most other {{XAudio2}} methods cannot). However, a maximum of two source buffers can be submitted from a system thread at a time.</td></tr> </table><p>?</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_BUFFER}}</strong> structure to queue. +</p> </dd> + + + <dd> <p>Pointer to an additional <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure used when submitting {{WMA}} data. </p> </dd> + + + + + <p>Removes all pending audio buffers from the voice queue.</p> + <p>If the voice is started, the buffer that is currently playing is not removed from the queue. </p><p><strong>FlushSourceBuffers</strong> can be called regardless of whether the voice is currently started or stopped. </p><p>For every buffer removed, an <strong>OnBufferEnd</strong> callback will be made, but none of the other per-buffer callbacks (<strong>OnBufferStart</strong>, <strong>OnStreamEnd</strong> or <strong>OnLoopEnd</strong>) will be made. </p><p><strong>FlushSourceBuffers</strong> does not change a the voice's running state, so if the voice was playing a buffer prior to the call, it will continue to do so, and will deliver all the callbacks for the buffer normally. This means that the <strong>OnBufferEnd</strong> callback for this buffer will take place after the <strong>OnBufferEnd</strong> callbacks for the buffers that were removed. Thus, an {{XAudio2}} client that calls <strong>FlushSourceBuffers</strong> cannot expect to receive <strong>OnBufferEnd</strong> callbacks in the order in which the buffers were submitted. </p><p>No warnings for starvation of the buffer queue will be emitted when the currently playing buffer completes; it is assumed that the client has intentionally removed the buffers that followed it. However, there may be an audio pop if this buffer does not end at a zero crossing. If the application must ensure that the flush operation takes place while a specific buffer is playing?perhaps because the buffer ends with a zero crossing?it must call <strong>FlushSourceBuffers</strong> from a callback, so that it executes synchronously. </p><p>Calling <strong>FlushSourceBuffers</strong> after a voice is stopped and then submitting new data to the voice resets all of the voice's internal counters. </p><p>A voice's state is not considered reset after calling <strong>FlushSourceBuffers</strong> until the <strong>OnBufferEnd</strong> callback occurs (if a buffer was previously submitted) or <strong>{{IXAudio2SourceVoice::GetState}}</strong> returns with <strong>{{XAUDIO2_VOICE_STATE}}</strong>. <strong>BuffersQueued</strong> == 0. For example, if you stop a voice and call <strong>FlushSourceBuffers</strong>, it's still not legal to immediately call <strong>{{IXAudio2SourceVoice::SetSourceSampleRate}}</strong> (which requires the voice to not have any buffers currently queued), until either of the previously mentioned conditions are met. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Notifies an {{XAudio2}} voice that no more buffers are coming after the last one that is currently in its queue.</p> + <p><strong>Discontinuity</strong> suppresses the warnings that normally occur in the debug build of {{XAudio2}} when a voice runs out of audio buffers to play. It is preferable to mark the final buffer of a stream by tagging it with the {{XAUDIO2_END_OF_STREAM}} flag, but in some cases the client may not know that a buffer is the end of a stream until after the buffer has been submitted. </p><p>Because calling <strong>Discontinuity</strong> is equivalent to applying the {{XAUDIO2_END_OF_STREAM}} flag retroactively to the last buffer submitted, an <strong>OnStreamEnd</strong> callback will be made when this buffer completes. +</p><strong>Note</strong>??{{XAudio2}} may consume its entire buffer queue and emit a warning before the <strong>Discontinuity</strong> call takes effect, so <strong>Discontinuity</strong> is not guaranteed to suppress the warnings.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Stops looping the voice when it reaches the end of the current loop region. </p> + <p>If the cursor for the voice is not in a loop region, <strong>ExitLoop</strong> does nothing. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Sets the frequency adjustment ratio of the voice.</p> + <p>Frequency adjustment is expressed as <em>source frequency</em> / <em>target frequency</em>. Changing the frequency ratio changes the rate audio is played on the voice. A ratio greater than 1.0 will cause the audio to play faster and a ratio less than 1.0 will cause the audio to play slower. Additionally, the frequency ratio affects the pitch of audio on the voice. As an example, a value of 1.0 has no effect on the audio, whereas a value of 2.0 raises pitch by one octave and 0.5 lowers it by one octave. </p><p>If <strong>SetFrequencyRatio</strong> is called specifying a Ratio value outside the valid range, the method will set the frequency ratio to the nearest valid value. A warning also will be generated for debug builds. </p><strong>Note</strong>??<strong>{{IXAudio2SourceVoice::GetFrequencyRatio}}</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Frequency adjustment ratio. This value must be between {{XAUDIO2_MIN_FREQ_RATIO}} and the <em>MaxFrequencyRatio</em> parameter specified when the voice was created (see <strong>{{IXAudio2::CreateSourceVoice}}</strong>). {{XAUDIO2_MIN_FREQ_RATIO}} currently is 0.0005, which allows pitch to be lowered by up to 11 octaves.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. +</p> </dd> + + + + + <p>Returns the frequency adjustment ratio of the voice.</p> + <p><strong>GetFrequencyRatio</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}). </p><p>For information on frequency ratios, see <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Returns the current frequency adjustment ratio if successful.</p> </dd> + + + + + <p>Reconfigures the voice to consume source data at a different sample rate than the rate specified when the voice was created.</p> + <p>The <strong>SetSourceSampleRate</strong> method supports reuse of {{XAudio2}} voices by allowing a voice to play sounds with a variety of sample rates. To use <strong>SetSourceSampleRate</strong> the voice must have been created without the {{XAUDIO2_VOICE_NOPITCH}} or {{XAUDIO2_VOICE_NOSRC}} flags and must not have any buffers currently queued. </p><p>The typical use of <strong>SetSourceSampleRate</strong> is to support voice pooling. For example to support voice pooling an application would precreate all the voices it expects to use. Whenever a new sound will be played the application chooses an inactive voice or ,if all voices are busy, picks the least important voice and calls <strong>SetSourceSampleRate</strong> on the voice with the new sound's sample rate. After <strong>SetSourceSampleRate</strong> has been called on the voice, the application can immediately start submitting and playing buffers with the new sample rate. This allows the application to avoid the overhead of creating and destroying voices frequently during gameplay. +</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>The new sample rate the voice should process submitted data at. Valid sample rates are 1kHz to 200kHz. </p> </dd> + + + + + <p>A submix voice is used primarily for performance improvements and effects processing. </p> + <p>Data buffers cannot be submitted directly to submix voices and will not be audible unless submitted to a mastering voice. A submix voice can be used to ensure that a particular set of voice data is converted to the same format and/or to have a particular effect chain processed on the collective result. +</p><p>{{IXAudio2SubmixVoice}} inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to submix voices. The interface type exists solely because some of the base class methods are implemented differently for submix voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + <p>A mastering voice is used to represent the audio output device.</p><p>Data buffers cannot be submitted directly to mastering voices, but data submitted to other types of voices must be directed to a mastering voice to be heard. +</p><p><strong>{{IXAudio2MasteringVoice}}</strong> inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to mastering voices. The interface type exists solely because some of the base class methods are implemented differently for mastering voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + + <p>Returns the channel mask for this voice.</p> + <p>The <em>pChannelMask</em> argument is a bit-mask of the various channels in the speaker geometry reported by the audio system. This information is needed for the <strong>{{X3DAudioInitialize}}</strong> <em>SpeakerChannelMask</em> parameter. </p><p>The {{X3DAUDIO}}.H header declares a number of <strong>{{SPEAKER_}}</strong> positional defines to decode these channels masks. </p><p>Examples include: </p><pre>{{SPEAKER_STEREO}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) {{SPEAKER_5POINT1}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) // | {{SPEAKER_FRONT_CENTER}} (0x4) // | {{SPEAKER_LOW_FREQUENCY}} (0x8) // | {{SPEAKER_BACK_LEFT}} (0x10) | {{SPEAKER_BACK_RIGHT}} (0x20)</pre><strong>Note</strong>??For the DirectX {{SDK}} versions of {{XAUDIO}}, the channel mask for the output device was obtained via the <strong>{{IXAudio2::GetDeviceDetails}}</strong> method, which doesn't exist in Windows?8 and later.? + <p>This method does not return a value.</p> + + + <dd> <p> Returns the channel mask for this voice. This corresponds to the <strong>dwChannelMask</strong> member of the <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure. +</p> </dd> + + + + + <p>The {{IXAudio2EngineCallback}} interface contains methods that notify the client when certain events happen in the <strong>{{IXAudio2}}</strong> engine.</p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods via an interface reference provided by the client, using the <strong>{{XAudio2Create}}</strong> method. Methods in this interface return <strong>void</strong>, rather than an {{HRESULT}}. +</p><p>See {{XAudio2}} Callbacks for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called by {{XAudio2}} just before an audio processing pass begins.</p> + + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} just after an audio processing pass ends.</p> + <p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + + <p>Called if a critical system error occurs that requires {{XAudio2}} to be closed down and restarted.</p> + <p>If you provide the {{ID}} of a specific device in the <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong> or use the {{XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT}} flag, then a critical error will occur and <strong>OnCriticalError</strong> is raised if the underlying {{WASAPI}} rendering device becomes unavailable. This can occur when a headset or speaker is unplugged or when a {{USB}} audio device is removed, for example. Once a critical error has occurred, audio processing stops and all further calls to {{XAudio2}} fail. The only way to recover in this situation is to release the {{XAudio2}} instance and create a new one. </p><p></p><p>If you specified {{NULL}} or <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong>, then the system uses a Virtual Audio Client to represent the audio endpoint. In this case, if the underlying {{WASAPI}} rendering device becomes unavailable, the system automatically selects a new audio rendering device for rendering, audio processing continues, and <strong>OnCriticalError</strong> is not raised.</p><p>On the mobile device family, a Virtual Audio Client is always used and <strong>OnCriticalError</strong> is never raised, regardless of the values you provide to <strong>CreateMasteringVoice</strong>.</p><p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Error code returned by {{XAudio2}}.</p> </dd> + + + + + <p>The <strong>{{IXAudio2VoiceCallback}}</strong> interface contains methods that notify the client when certain events happen in a given <strong>{{IXAudio2SourceVoice}}</strong>. </p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods through an interface reference provided by the client in the <strong>{{IXAudio2::CreateSourceVoice}}</strong> method. Methods in this interface return void, rather than an {{HRESULT}}. +</p><p>See the {{XAudio2}} Callbacks topic for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called during each processing pass for each voice, just before {{XAudio2}} reads data from the voice's buffer queue.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of bytes that must be submitted immediately to avoid starvation. This allows the implementation of just-in-time streaming scenarios; the client can keep the absolute minimum data queued on the voice at all times, and pass it fresh data just before the data is required. This model provides the lowest possible latency attainable with {{XAudio2}}. For xWMA and {{XMA}} data <em>BytesRequired</em> will always be zero, since the concept of a frame of xWMA or {{XMA}} data is meaningless. </p> <strong>Note</strong>??In a situation where there is always plenty of data available on the source voice, <em>BytesRequired</em> should always report zero, because it doesn't need any samples immediately to avoid glitching. ? </dd> + + + + + <p>Called just after the processing pass for the voice ends.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice has just finished playing a contiguous audio stream.</p> + <p><strong>OnStreamEnd</strong> is triggered when {{XAudio2}} processes an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set. See the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> method for more information. </p><p>The <strong>OnStreamEnd</strong> callback indicates that {{XAudio2}} has finished consuming the last buffer submitted to the voice. With {{PCM}} data, all audio is guaranteed to have been played and the voice can be stopped or destroyed safely. </p><p>The <strong>OnStreamEnd</strong> callback only indicates that an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set has been processed. The callback is strictly informational and does not change the state of the source voice that triggered it. A voice stays in the start state until <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called and will continue to play submitted source buffers and to trigger additional callbacks. </p><p><strong>OnStreamEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice is about to start processing a new audio buffer.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferStart</strong> is guaranteed to be called just before the first byte of the current buffer is consumed. It is appropriate to use this callback for changes to the voice state such as the following. </p><ul> <li>Submitting a new buffer to the voice </li> <li>Adjusting the volume, pitch, and effect parameters of the voice </li> <li>Enabling or disabling an effect in the voice's effect chain</li> </ul>All the actions listed above are synchronous when performed in an {{XAudio2}} callback, so the changes will take effect immediately, affecting the buffer that is about to start.<p>It is also safe to use this callback to write audio data to the buffer directly, which can be useful for low-latency streaming scenarios. However, as with all {{XAudio2}} callbacks, no work should be done that uses a significant amount of processor time or could block execution, including synchronous disk or network reads. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the pContext member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice finishes processing a buffer. </p> + <p>After an <strong>OnBufferEnd</strong> callback the audio memory for the buffer associated with <em>pBufferContext</em> can safely be released. </p><p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext </strong>member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed and before the first byte of the next buffer is consumed. This callback can be used to overwrite or release the audio data referenced by the completed buffer, and to update other state associated with the voice as appropriate. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Context reference assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice reaches the end position of a loop.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnLoopEnd</strong> is not sample-accurate; that is, actions in the callback do not occur at the exact moment that a given sample is being processed. It is only guaranteed to be called shortly after the last sample in the loop has been processed. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted. </p> </dd> + + + + + <p>Called when a critical error occurs during voice processing.</p> + <p><strong>OnVoiceError</strong> is called in the event of an error during voice processing, such as a hardware {{XMA}} decoder error on the Xbox 360. The arguments report which buffer was being processed at the time of the error, and its {{HRESULT}} code. If the error is not recoverable by destroying and re-creating the voice, the <strong>OnCriticalError</strong> engine callback will be called as well. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + <dd> <p> The {{HRESULT}} code of the error encountered.</p> </dd> + + + + + <p>Creates a new <strong>{{XAudio2}}</strong> object and returns a reference to its <strong>{{IXAudio2}}</strong> interface.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} supported a flag <strong>{{XAUDIO2_DEBUG_ENGINE}}</strong> to select between the release and 'checked' version. This flag is not supported or defined in the Windows 8 version of {{XAUDIO2}}. </p><strong>Note</strong>??No versions of the DirectX {{SDK}} contain the xaudio2.lib import library. DirectX {{SDK}} versions use {{COM}} to create a new <strong>{{XAudio2}}</strong> object.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Describes parameters for use with the volume meter {{APO}}.</p> + <p>This structure is used with the <strong>{{XAudio2}} {{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p><em>pPeakLevels</em> and <em>pRMSLevels</em> are not returned by <strong>{{IXAudio2Voice::GetEffectParameters}}</strong>, the arrays are only filled out if they are present. If <em>pPeakLevels</em> and <em>pRMSLevels</em> are used they must be allocated by the application. The application is responsible for freeing the arrays when they are no longer needed. </p><p><em>ChannelCount</em> must be set by the application to match the number of channels in the voice the effect is applied to.</p> + + + <dd> <p>Array that will be filled with the maximum absolute level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pPeakLevels</em> may be {{NULL}} if <em>pRMSLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Array that will be filled with root mean square level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pRMSLevels</em> may be {{NULL}} if <em>pPeakLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Number of channels being processed.</p> </dd> + + + + + <p>Describes parameters for use in the reverb {{APO}}.</p> + <p>All parameters related to sampling rate or time are relative to a 48kHz voice and must be scaled for use with other sampling rates. For example, setting <em>ReflectionsDelay</em> to 300ms gives a true 300ms delay when the reverb is hosted in a 48kHz voice, but becomes a 150ms delay when hosted in a 24kHz voice. </p> + + + <dd> <p>Percentage of the output that will be reverb. Allowable values are from 0 to 100.</p> </dd> + + + <dd> <p>The delay time of the first reflection relative to the direct path. Permitted range is from 0 to 300 milliseconds. </p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay of reverb relative to the first reflection. Permitted range is from 0 to 85 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left rear output and right rear output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left side output and right side output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Position of the left input within the simulated space relative to the listener. With <em>PositionLeft</em> set to the minimum value, the left input is placed close to the listener. In this position, early reflections are dominant, and the reverb decay is set back in the sound field and reduced in amplitude. With <em>PositionLeft</em> set to the maximum value, the left input is placed at a maximum distance from the listener within the simulated room. <em>PositionLeft</em> does not affect the reverb decay time (liveness of the room), only the apparent position of the source relative to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Same as <em>PositionLeft</em>, but affecting only the right input. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??PositionRight is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??<em>PositionMatrixRight</em> is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). </p> </dd> + + + <dd> <p>Controls the character of the individual wall reverberations. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). +</p> </dd> + + + <dd> <p>Adjusts the decay time of low frequencies relative to the decay time at 1 kHz. The values correspond to dB of gain as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td><td>+1</td><td>+2</td><td>+3</td><td>+4</td></tr> </table> <p>?</p> <strong>Note</strong>??A <em>LowEQGain</em> value of 8 results in the decay time of low frequencies being equal to the decay time at 1 kHz. ? <p> Permitted range is from 0 to 12 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter that is controlled by the <em>LowEQGain</em> parameter. The values correspond to frequency in Hz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr> <tr><th>Frequency (Hz)</th><td>50</td><td>100</td><td>150</td><td>200</td><td>250</td><td>300</td><td>350</td><td>400</td><td>450</td><td>500</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 9 (no units). </p> </dd> + + + <dd> <p>Adjusts the decay time of high frequencies relative to the decay time at 1 kHz. When set to zero, high frequencies decay at the same rate as 1 kHz. When set to maximum value, high frequencies decay at a much faster rate than 1 kHz. </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 8 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the high pass filter that is controlled by the <em>HighEQGain</em> parameter. The values correspond to frequency in kHz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr> <tr><th>Frequency (kHz)</th><td>1</td><td>1.5</td><td>2</td><td>2.5</td><td>3</td><td>3.5</td><td>4</td><td>4.5</td><td>5</td><td>5.5</td><td>6</td><td>6.5</td><td>7</td><td>7.5</td><td>8</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 14 (no units).</p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter for the room effect. Permitted range is from 20 to 20,000 Hz.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Sets the pass band intensity level of the low-pass filter for both the early reflections and the late field reverberation. Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Sets the intensity of the low-pass filter for both the early reflections and the late field reverberation at the corner frequency (<em>RoomFilterFreq</em>). Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the early reflections. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the reverberations. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Reverberation decay time at 1 kHz. This is the time that a full scale input signal decays by 60 dB. Permitted range is from 0.1 to infinity seconds.</p> </dd> + + + <dd> <p>Controls the modal density in the late field reverberation. For colorless spaces, <em>Density</em> should be set to the maximum value (100). As Density is decreased, the sound becomes hollow (comb filtered). This is an effect that can be useful if you are trying to model a silo. Permitted range as a percentage is from 0 to 100.</p> </dd> + + + <dd> <p>The apparent size of the acoustic space. Permitted range is from 1 to 100 feet.</p> </dd> + + + <dd> <p>If set to {{TRUE}}, disables late field reflection calculations. Disabling late field reflection calculations results in a significant {{CPU}} time savings.</p> <strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this member. ? </dd> + + + + + <p>Describes {{I3DL2}} (Interactive 3D Audio Rendering Guidelines Level 2.0) parameters for use in the <strong>ReverbConvertI3DL2ToNative</strong> function.</p> + <p>There are many preset values defined for the <strong>{{XAUDIO2FX_REVERB_I3DL2_PARAMETERS}}</strong> structure. For more information, see <strong>{{XAUDIO2FX_I3DL2_PRESET}}</strong>. </p> + + + + <p>Creates a new volume meter audio processing object ({{APO}}) and returns a reference to it.</p> + <p>For information on creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview.</p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateVolumeMeter}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateVolumeMeter}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateVolumeMeter}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pVolumeMeterAPO; +{{XAudio2CreateVolumeMeter}}(&amp;pVolumeMeterAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioVolumeMeter</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("4FC3B166-972A-40CF-{{BC37}}-7DB03DB2FBA3")) AudioVolumeMeter; +</code><p><strong>{{XAudio2CreateVolumeMeter}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The volume meter uses the <strong>{{XAUDIO2FX_VOLUMEMETER_LEVELS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method when the {{XAPO}} is bound to the audio graph.</p><strong>Note</strong>??<strong>{{XAudio2CreateVolumeMeter}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioVolumeMeter</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioVolumeMeter(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateVolumeMeter}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioVolumeMeter(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the created volume meter {{APO}}.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Creates a new reverb audio processing object ({{APO}}), and returns a reference to it.</p> + <p><strong>{{XAudio2CreateReverb}}</strong> creates an effect performing Princeton Digital Reverb. The {{XAPO}} effect library ({{XAPOFX}}) includes an alternate reverb effect. Use <strong>CreateFX</strong> to create this alternate effect. </p><p>The reverb {{APO}} supports has the following restrictions: </p><ul> <li>Input audio data must be {{FLOAT32}}. </li> <li>Framerate must be within {{XAUDIO2FX_REVERB_MIN_FRAMERATE}} (20,000 Hz) and {{XAUDIO2FX_REVERB_MAX_FRAMERATE}} (48,000 Hz). </li> <li>The input and output channels must be one of the following combinations.<ul> <li>Mono input and mono output </li> <li>Mono input and 5.1 output </li> <li>Stereo input and stereo output </li> <li>Stereo input and 5.1 output</li> </ul> </li> </ul>The reverb {{APO}} maintains internal state information between processing samples. You can only use an instance of the {{APO}} with one source of audio data at a time. Multiple voices that require reverb effects would each need to create a separate reverb effect with<strong>{{XAudio2CreateReverb}}</strong>.<p>For information about creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview. </p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateReverb}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateReverb}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateReverb}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pReverbAPO; +{{XAudio2CreateReverb}}(&amp;pReverbAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioReverb</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("{{C2633B16}}-471B-4498-{{B8C5}}-4F0959E2EC09")) AudioReverb; +</code><p><strong>{{XAudio2CreateReverb}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The reverb uses the <strong>{{XAUDIO2FX_REVERB_PARAMETERS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. </p><strong>Note</strong>??<strong>{{XAudio2CreateReverb}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioReverb</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioReverb(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateReverb}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioReverb(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a reference to the reverb {{APO}} that is created.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Defines a {{DSP}} setting at a given normalized distance.</p> + + + + <dd> <p>Normalized distance. This must be within 0.0f to 1.0f.</p> </dd> + + + <dd> <p>{{DSP}} control setting.</p> </dd> + + + + + <p>Defines an explicit piecewise curve made up of linear segments, directly defining {{DSP}} behavior with respect to normalized distance.</p> + + + + <dd> <p> <strong>{{X3DAUDIO_DISTANCE_CURVE_POINT}}</strong> array. The array must have no duplicates and be sorted in ascending order with respect to distance.</p> </dd> + + + <dd> <p>Number of distance curve points. There must be two or more points since all curves must have at least two endpoints defining values at 0.0f and 1.0f normalized distance, respectively.</p> </dd> + + + + + <p>Specifies directionality for a single-channel non-{{LFE}} emitter by scaling {{DSP}} behavior with respect to the emitter's orientation.</p> + <p>For a detailed explanation of sound cones see Sound Cones.</p> + + + <dd> <p>Inner cone angle in radians. This value must be within 0.0f to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Outer cone angle in radians. This value must be within <em>InnerAngle</em> to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Volume scaler on/within inner cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Volume scaler on/beyond outer cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on/within inner cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on or beyond outer cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on or within inner cone. This must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on/beyond outer cone. This must be within 0.0f to 2.0f. +</p> </dd> + + + + + <p>Defines a point of 3D audio reception.</p> + <p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>The parameter type <strong>{{X3DAUDIO_VECTOR}}</strong> is typed to DirectX::XMFLOAT3, to provide x, y and z floating-point values. </p><p>A listener's front and top vectors must be orthonormal. To be considered orthonormal, a pair of vectors must have a magnitude of 1 +- 1x10-5 and a dot product of 0 +- 1x10-5. </p> + + + <dd> <p>Orientation of front direction. When <strong>pCone</strong> is {{NULL}} <strong>OrientFront</strong> is used only for matrix and delay calculations. When <strong>pCone</strong> is not {{NULL}} <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. This value must be orthonormal with <strong>OrientTop</strong> when used.</p> </dd> + + + <dd> <p>Orientation of top direction, used only for matrix and delay calculations. This value must be orthonormal with <strong>OrientFront</strong> when used.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units per second, used only for doppler calculations. This value does not affect <strong>Position</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_CONE}}</strong> structure for this listener. Providing a listener cone will specify that additional calculations are performed when determining the volume and filter {{DSP}} parameters for individual sound sources. A {{NULL}} <strong>pCone</strong> value specifies an omnidirectional sound and no cone processing is applied. <strong>pCone</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + + + <p>Defines a single-point or multiple-point 3D audio source that is used with an arbitrary number of sound channels.</p> + <p><strong>{{X3DAUDIO_EMITTER}}</strong> only supports a cone in a single-point emitter. Multi-point emitters are a convenient and efficient way to manage a related group of sound sources. Many properties are shared among all channel points, such as Doppler?the same Doppler shift is applied to all channels in the emitter. Thus, the Doppler value need only be calculated once, not per-point as would be needed with multiple separate single-point emitters. Because <strong>{{X3DAUDIO_EMITTER}}</strong> only has one orientation vector, a multi-point emitter cone would be of limited usefulness, forcing all channels to behave as if they were facing the same direction. If multiple independent cones are needed, multiple single-point emitters should be used, each with its own orientation. </p><p>The parameter type {{X3DAUDIO_VECTOR}} is typed to DirectX::XMFLOAT3, to provide x , y , and z floating-point values. </p><p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>For user-defined distance curves, the distance field of the first point must be 0.0f and the distance field of the last point must be 1.0f. </p><p>If an emitter moves beyond a distance of (<strong>CurveDistanceScaler</strong> ? 1.0f), the last point on the curve is used to compute the volume output level. The last point is determined by the following: +</p><pre>{{X3DAUDIO_DISTANCE_CURVE}}.pPoints[PointCount-1].{{DSPSetting}})</pre> + + + <dd> <p>Pointer to a sound cone. Used only with single-channel emitters for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. {{NULL}} specifies the emitter is omnidirectional.</p> </dd> + + + <dd> <p>Orientation of the front direction. This value must be orthonormal with <strong>OrientTop</strong>. <strong>OrientFront</strong> must be normalized when used. For single-channel emitters without cones <strong>OrientFront</strong> is only used for emitter angle calculations. For multi channel emitters or single-channel with cones <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Orientation of the top direction. This value must be orthonormal with <strong>OrientFront</strong>. <strong>OrientTop</strong> is only used with multi-channel emitters for matrix calculations.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units/second. This value is used only for doppler calculations. It does not affect <strong>Position</strong>. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius calculations. If <strong>InnerRadius</strong> is 0, then no inner radius is used, but <strong>InnerRadiusAngle</strong> may still be used. This value must be between 0.0f and {{MAX_FLT}}. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius angle calculations. This value must be between 0.0f and {{X3DAUDIO_PI}}/4.0. </p> </dd> + + + <dd> <p>Number of emitters defined by the <strong>{{X3DAUDIO_EMITTER}}</strong> structure. Must be greater than 0. </p> </dd> + + + <dd> <p>Distance from <strong>Position</strong> that channels will be placed if <strong>ChannelCount</strong> is greater than 1. <strong>ChannelRadius</strong> is only used with multi-channel emitters for matrix calculations. Must be greater than or equal to 0.0f.</p> </dd> + + + <dd> <p>Table of channel positions, expressed as an azimuth in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector. An azimuth of {{X3DAUDIO_2PI}} specifies a channel is a low-frequency effects ({{LFE}}) channel. {{LFE}} channels are positioned at the emitter base and are calculated with respect to <strong>pLFECurve</strong> only, never <strong>pVolumeCurve</strong>. <strong>pChannelAzimuths</strong> must have at least <strong>ChannelCount</strong> elements, but can be <strong>{{NULL}}</strong> if <strong>ChannelCount</strong> = 1. The table values must be within 0.0f to {{X3DAUDIO_2PI}}. <strong>pChannelAzimuths</strong> is used with multi-channel emitters for matrix calculations. </p> </dd> + + + <dd> <p>Volume-level distance curve, which is used only for matrix calculations. {{NULL}} specifies a specialized default curve that conforms to the inverse square law, such that when distance is between 0.0f and <strong>CurveDistanceScaler</strong> ? 1.0f, no attenuation is applied. +When distance is greater than <strong>CurveDistanceScaler</strong> ? 1.0f, the amplification factor is (<strong>CurveDistanceScaler</strong> ? 1.0f)/distance. At a distance of <strong>CurveDistanceScaler</strong> ? 2.0f, the sound will be at half volume or -6 dB, at a distance of <strong>CurveDistanceScaler</strong> ? 4.0f, the sound will be at one quarter volume or -12 dB, and so on. <strong>pVolumeCurve</strong> and pLFECurve are independent of each other. <strong>pVolumeCurve</strong> does not affect <strong>{{LFE}} channel</strong> volume. </p> </dd> + + + <dd> <p>{{LFE}} roll-off distance curve, or {{NULL}} to use default curve: [0.0f, <strong>CurveDistanceScaler</strong> ?1.0f], [<strong>CurveDistanceScaler</strong> ?1.0f, 0.0f]. A {{NULL}} value for <strong>pLFECurve</strong> specifies a default curve that conforms to the inverse square law with distances &lt;= <strong>CurveDistanceScaler</strong> clamped to no attenuation. +<strong>pVolumeCurve</strong> and <strong>pLFECurve</strong> are independent of each other. <strong>pLFECurve</strong> does not affect non {{LFE}} channel volume. </p> </dd> + + + <dd> <p>Low-pass filter ({{LPF}}) direct-path coefficient distance curve, or {{NULL}} to use the default curve: [0.0f, 1.0f], [1.0f, 0.75f]. <strong>pLPFDirectCurve</strong> is only used for {{LPF}} direct-path calculations. +</p> </dd> + + + <dd> <p>{{LPF}} reverb-path coefficient distance curve, or {{NULL}} to use default curve: [0.0f, 0.75f], [1.0f, 0.75f]. <strong>pLPFReverbCurve</strong> is only used for {{LPF}} reverb path calculations.</p> </dd> + + + <dd> <p>Reverb send level distance curve, or {{NULL}} to use default curve: [0.0f, 1.0f], [1.0f, 0.0f]. </p> </dd> + + + <dd> <p>Curve distance scaler that is used to scale normalized distance curves to user-defined world units, and/or to exaggerate their effect. This does not affect any other calculations. The value must be within the range {{FLT_MIN}} to {{FLT_MAX}}. <strong>CurveDistanceScaler</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Doppler shift scaler that is used to exaggerate Doppler shift effect. <strong>DopplerScaler</strong> is only used for Doppler calculations and does not affect any other calculations. The value must be within the range 0.0f to {{FLT_MAX}}.</p> </dd> + + + + + <p>Receives the results from a call to <strong>{{X3DAudioCalculate}}</strong>.</p> + <p>The following members must be initialized before passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function: </p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes</strong></li> <li><strong>SrcChannelCount </strong></li> <li><strong>DstChannelCount</strong></li> </ul><p>The following members are returned by passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function:</p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes </strong></li> <li><strong>{{LPFDirectCoefficient}} </strong></li> <li><strong>{{LPFReverbCoefficient}}</strong></li> <li><strong>ReverbLevel </strong></li> <li><strong>DopplerFactor </strong></li> <li><strong>EmitterToListenerAngle</strong></li> <li><strong>EmitterToListenerDistance </strong></li> <li><strong>EmitterVelocityComponent </strong></li> <li><strong>ListenerVelocityComponent</strong></li> </ul><strong>Note</strong>??For <strong>pMatrixCoefficients</strong> and <strong>pDelayTimes</strong>, <strong>{{X3DAudioCalculate}}</strong> does not allocate additional memory. <strong>{{X3DAudioCalculate}}</strong> merely modifies the values at the memory locations allocated for these references.? + + + + <p>Sets all global 3D audio constants.</p> + <p><strong>{{X3DAUDIO_HANDLE}}</strong> is an opaque data structure. Because the operating system doesn't allocate any additional storage for the 3D audio instance handle, you don't need to free or close it.</p> + <p>This function does not return a value.</p> + + + <dd> <p>Assignment of channels to speaker positions. This value must not be zero. The only permissible value on Xbox 360 is {{SPEAKER_XBOX}}.</p> </dd> + + + <dd> <p>Speed of sound, in user-defined world units per second. Use this value only for doppler calculations. It must be greater than or equal to {{FLT_MIN}}.</p> </dd> + + + <dd> <p>3D audio instance handle. Use this handle when you call <strong>{{X3DAudioCalculate}}</strong>.</p> </dd> + + + + + <p>Calculates {{DSP}} settings with respect to 3D parameters.</p> + <p>You typically call <strong>{{X3DAudioCalculate}}</strong> once for each pair of emitting objects and listeners in the scene. After each call, to apply the 3D effects, the app manually applies the calculation results at <em>pDSPSettings</em> to the {{XAUDIO2}} graph. For more info, see How to: Integrate {{X3DAudio}} with {{XAudio2}}.</p><strong>Important</strong>?? The listener and emitter values must be valid. Floating-point specials (NaN, {{QNaN}}, +{{INF}}, -{{INF}}) can cause the entire audio output to go silent if introduced into a running audio graph.? + <p>This function does not return a value.</p> + + + <dd> <p>3D audio instance handle. Call <strong>{{X3DAudioInitialize}}</strong> to get this handle.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_LISTENER}}</strong> representing the point of reception.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_EMITTER}}</strong> representing the sound source.</p> </dd> + + + <dd> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{X3DAUDIO_CALCULATE_MATRIX}}</td><td>Enables matrix coefficient table calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DELAY}}</td><td>Enables delay time array calculation (stereo only).?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_DIRECT}}</td><td>Enables low pass filter ({{LPF}}) direct-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_REVERB}}</td><td>Enables {{LPF}} reverb-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REVERB}}</td><td>Enables reverb send level calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DOPPLER}}</td><td>Enables Doppler shift factor calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_EMITTER_ANGLE}}</td><td>Enables emitter-to-listener interior angle calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_ZEROCENTER}}</td><td>Fills the center channel with silence. This flag allows you to keep a 6-channel matrix so you do not have to remap the channels, but the center channel will be silent. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REDIRECT_TO_LFE}}</td><td> Applies an equal mix of all source channels to a low frequency effect ({{LFE}}) destination channel. It only applies to matrix calculations with a source that does not have an {{LFE}} channel and a destination that does have an {{LFE}} channel. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_DSP_SETTINGS}}</strong> structure that receives the calculation results.</p> </dd> + + + + + <p>Describes the contents of a stream buffer. </p> + <p>This metadata can be used to implement optimizations that require knowledge of a stream buffer's contents. For example, {{XAPOs}} that always produce silent output from silent input can check the flag on the input stream buffer to determine if any signal processing is necessary. If silent, the {{XAPO}} can simply set the flag on the output stream buffer to silent and return, thus averting the work of processing silent data. </p><p>Likewise, {{XAPOs}} that receive valid input data, but generate silence (for any reason), may set the output stream buffer's flag accordingly, rather than writing silent samples to the buffer. </p><p>These flags represent what should be assumed is in the respective buffer. The flags may not reflect what is actually stored in memory. For example, the {{XAPO_BUFFER_SILENT}} indicates that silent data should be assumed, however the respective memory may be uninitialized </p> + + + <dd> <p>Stream buffer contains only silent samples.</p> </dd> + + + <dd> <p>Stream buffer contains audio data to be processed.</p> </dd> + + + + + <p>Describes general characteristics of an {{XAPO}}. Used with <strong>{{IXAPO::GetRegistrationProperties}}</strong>, <strong>{{CXAPOParametersBase::CXAPOParametersBase}}</strong>, and <strong>{{CXAPOBase::CXAPOBase}}</strong>. </p> + + + + + <p>Defines stream buffer parameters that remain constant while an {{XAPO}} is locked. Used with the <strong>{{IXAPO::LockForProcess}}</strong> method.</p> + <p>The byte size of the respective stream buffer must be at least <em>MaxFrameCount</em> ? (<em>pFormat</em>-&gt;nBlockAlign) bytes. </p> + + + + <p>Defines stream buffer parameters that may change from one call to the next. Used with the <strong>Process</strong> method.</p> + <p>Although the format and maximum size values of a particular stream buffer are constant, as defined by the <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong> structure, the actual memory address of the stream buffer is permitted to change. For constant-bit-rate ({{CBR}}) {{XAPOs}}, ValidFrameCount is constant and is always equal to the corresponding <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong>.MaxFrameCount for this buffer. </p><strong>Note</strong>??Only constant-bit-rate {{XAPOs}} are currently supported.? + + + + <p>The interface for an Audio Processing Object which be used in an {{XAudio2}} effect chain.</p> + + + + + <p>Returns the registration properties of an {{XAPO}}. </p> + + <p>Returns {{S_OK}} if successful; returns an error code otherwise.</p> + + + <dd> <p> Receives a reference to a <strong>{{XAPO_REGISTRATION_PROPERTIES}}</strong> structure containing the registration properties the {{XAPO}} was created with; use <strong>{{XAPOFree}}</strong> to free the structure. </p> </dd> + + + + + <p>Queries if a specific input format is supported for a given output format.</p> + <p>The <strong>{{IXAPO::IsOutputFormatSupported}}</strong> and <strong>IsInputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsInputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods. </p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p> Output format. +</p> </dd> + + + <dd> <p> Input format to check for being supported.</p> </dd> + + + <dd> <p> If not {{NULL}}, and the input format is not supported for the given output format, <em>ppSupportedInputFormat</em> returns a reference to the closest input format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Queries if a specific output format is supported for a given input format.</p> + <p>The <strong>{{IXAPO::IsInputFormatSupported}}</strong> and <strong>IsOutputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsOutputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods.</p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p>Input format. </p> </dd> + + + <dd> <p>Output format to check for being supported.</p> </dd> + + + <dd> <p>If not {{NULL}} and the output format is not supported for the given input format, <em>ppSupportedOutputFormat</em> returns a reference to the closest output format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Performs any effect-specific initialization.</p> + <p>The contents of <em>pData</em> are defined by a given {{XAPO}}. Immutable parameters (constant for the lifetime of the {{XAPO}}) should be set in this method. Once initialized, an {{XAPO}} cannot be initialized again. An {{XAPO}} should be initialized before passing it to {{XAudio2}} as part of an effect chain. </p><strong>Note</strong>??{{XAudio2}} does not call this method, it should be called by the client before passing the {{XAPO}} to {{XAudio2}}.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + <dd> <p> Effect-specific initialization parameters, may be {{NULL}} if <em>DataByteSize</em> is 0.</p> </dd> + + + <dd> <p> Size of <em>pData</em> in bytes, may be 0 if <em>pData</em> is {{NULL}}.</p> </dd> + + + + + <p>Resets variables dependent on frame history.</p> + <p>Constant and locked parameters such as the input and output formats remain unchanged. Variables set by <strong>{{IXAPOParameters::SetParameters}}</strong> remain unchanged. </p><p>For example, an effect with delay should zero out its delay line during this method, but should not reallocate anything as the {{XAPO}} remains locked with a constant input and output configuration. </p><p>{{XAudio2}} only calls this method if the {{XAPO}} is locked. </p><p>This method is called from the realtime thread and should not block. +</p> + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} to lock the input and output configurations of an {{XAPO}} allowing it to do any final initialization before <strong>Process</strong> is called on the realtime thread.</p> + <p>Once locked, the input and output configuration and any other locked parameters remain constant until <strong>UnLockForProcess</strong> is called. After an {{XAPO}} is locked, further calls to <strong>LockForProcess</strong> have no effect until the <strong>UnLockForProcess</strong> function is called. </p><p>An {{XAPO}} indicates what specific formats it supports through its implementation of the <strong>IsInputFormatSupported</strong> and <strong>IsOutputFormatSupported</strong> methods. An {{XAPO}} should assert the input and output configurations are supported and that any required effect-specific initialization is complete. The <strong>IsInputFormatSupported</strong>, <strong>IsOutputFormatSupported</strong>, and <strong>Initialize</strong> methods should be used as necessary before calling this method. </p><p>Because <strong>Process</strong> is a nonblocking method, all internal memory buffers required for <strong>Process</strong> should be allocated in <strong>LockForProcess</strong>. </p><p> <strong>Process</strong> is never called before <strong>LockForProcess</strong> returns successfully. </p><p><strong>LockForProcess</strong> is called directly by {{XAudio2}} and should not be called by the client code. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Deallocates variables that were allocated with the <strong>LockForProcess</strong> method.</p> + <p>Unlocking an {{XAPO}} instance allows it to be reused with different input and output formats.</p> + <p>This method does not return a value.</p> + + + + <p>Runs the {{XAPO}}'s digital signal processing ({{DSP}}) code on the given input and output buffers.</p> + <p>Implementations of this function should not block, as the function is called from the realtime audio processing thread. </p><p>All code that could cause a delay, such as format validation and memory allocation, should be put in the <strong>{{IXAPO::LockForProcess}}</strong> method, which is not called from the realtime audio processing thread. </p><p>For in-place processing, the <em>pInputProcessParameters</em> parameter will not necessarily be the same as <em>pOutputProcessParameters</em>. Rather, their <em>pBuffer</em> members will point to the same memory. </p><p>Multiple input and output buffers may be used with in-place {{XAPOs}}, though the input buffer count must equal the output buffer count. For in-place processing when multiple input and output buffers are used, the {{XAPO}} may assume the number of input buffers equals the number of output buffers. </p><p>In addition to writing to the output buffer, as appropriate, an {{XAPO}} is responsible for setting the output stream's buffer flags and valid frame count. </p><p>When <em>IsEnabled</em> is {{FALSE}}, the {{XAPO}} should not apply its normal processing to the given input/output buffers during. It should instead pass data from input to output with as little modification possible. Effects that perform format conversion should continue to do so. Effects must ensure transitions between normal and thru processing do not introduce discontinuities into the signal. </p><p>When writing a <strong>Process</strong> method, it is important to note {{XAudio2}} audio data is interleaved, which means data from each channel is adjacent for a particular sample number. For example, if there was a 4-channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, and so on. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of elements in pInputProcessParameters. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p> Input array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. </p> </dd> + + + <dd> <p>Number of elements in <em>pOutputProcessParameters</em>. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p>Output array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. On input, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the number of frames that the {{XAPO}} should write to the output buffer. On output, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the actual number of frames written.</p> </dd> + + + <dd> <p> {{TRUE}} to process normally; {{FALSE}} to process thru. See Remarks for additional information.</p> </dd> + + + + + <p>Returns the number of input frames required to generate the given number of output frames.</p> + <p>{{XAudio2}} calls this method to determine what size input buffer an {{XAPO}} requires to generate the given number of output frames. This method only needs to be called once while an {{XAPO}} is locked. <strong>CalcInputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of input frames required.</p> + + + <dd> <p> The number of output frames desired. +</p> </dd> + + + + + <p>Returns the number of output frames that will be generated from a given number of input frames.</p> + <p>{{XAudio2}} calls this method to determine how large of an output buffer an {{XAPO}} will require for a certain number of input frames. <strong>CalcOutputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of output frames that will be produced. </p> + + + <dd> <p> The number of input frames. +</p> </dd> + + + + + <p>An optional interface that allows an {{XAPO}} to use effect-specific parameters.</p> + + + + + <p>Sets effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::SetParameters}}</strong> function. The data passed to <strong>SetParameters</strong> can be used to set the state of the {{XAPO}} and control the behavior of the <strong>{{IXAPO::Process}}</strong> function. </p><p><strong>SetParameters</strong> can only be called on the real-time audio processing thread; no synchronization between <strong>SetParameters</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. However, the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> method may be called from any thread as it adds in the required synchronization to deliver a copy (asynchronously) of the parameters to <strong>SetParameters</strong> on the real-time thread; no synchronization between <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Gets the current values for any effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::GetParameters}}</strong> function. The data returned in <em>pParameters</em> can be used to provide information about the current state of the {{XAPO}}. </p><p>Unlike SetParameters, {{XAudio2}} does not call this method on the realtime audio processing thread. Thus, the {{XAPO}} must protect variables shared with <strong>{{IXAPOParameters::SetParameters}}</strong> or <strong>{{IXAPO::Process}}</strong> using appropriate synchronization. The <strong>{{CXAPOParametersBase}}</strong> class is an implementation of <strong>{{IXAPOParameters}}</strong> and its implementation of <strong>GetParameters</strong> efficiently handles this synchronization for the user. </p><p>{{XAudio2}} calls this method from the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p>This method may block and should never be called from the realtime audio processing thread instead get the current parameters from <strong>{{CXAPOParametersBase::BeginProcess}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives an effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Parameters for use with the {{FXEQ}} {{XAPO}}.</p> + <p>Each band ranges from <strong>FrequencyCenterN</strong> - (<strong>BandwidthN</strong> / 2) to <strong>FrequencyCenterN</strong> + (<strong>BandwidthN</strong> / 2). </p> + + + <dd> <p>Center frequency in Hz for band 0. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 0. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 0. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 1. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 1. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}}</p> </dd> + + + <dd> <p>Width of band 1. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + <dd> <p>Center frequency in Hz for band 2. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 2. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 2. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 3. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 3. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 3. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + + + <p>Parameters for use with the {{FXMasteringLimiter}} {{XAPO}}.</p> + + + + + <p>Parameters for use with the {{FXReverb}} {{XAPO}}.</p> + + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface.Value must be between {{FXREVERB_MIN_DIFFUSION}} and {{FXREVERB_MAX_DIFFUSION}}.</p> </dd> + + + <dd> <p>Size of the room. Value must be between {{FXREVERB_MIN_ROOMSIZE}} and {{FXREVERB_MAX_ROOMSIZE}}. Note that physical meaning of RoomSize is subjective and not tied to any particular units. A smaller value will result in reflections reaching the listener more quickly while reflections will take longer with larger values for RoomSize.</p> </dd> + + + + + <p>Initialization parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Use of this structure is optional. The default <strong>MaxDelay</strong> is <strong>{{FXECHO_DEFAULT_DELAY}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this functionality.? + + + + <p>Parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Echo only supports {{FLOAT32}} audio formats.</p> + + + + <p>Creates an instance of the requested {{XAPOFX}} effect.</p> + <p>The created {{XAPO}} will have a reference count of 1. Client code must call <strong>{{IUnknown::Release}}</strong> after passing the {{XAPO}} to {{XAudio2}} to allow {{XAudio2}} to dispose of the {{XAPO}} when it is no longer needed. Use <strong> {{IXAudio2::CreateSourceVoice}}</strong> or <strong>{{IXAudio2Voice::SetEffectChain}}</strong> to pass an {{XAPO}} to {{XAudio2}}. </p><strong>Note</strong>??The DirectX {{SDK}} version of this function doesn't have the <em>pInitData</em> or <em>InitDataByteSize</em> parameters as it only takes the first 2 parameters. To set initial parameters for the {{XAPOFX}} effect that is created with the DirectX {{SDK}} version of this function, you must bind that effect to a voice and use <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. +For info about how to do this, see How to: Use {{XAPOFX}} in {{XAudio2}}.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the current state of the Xbox 360 Controller.</p> + <p>This structure is used by the <strong>{{XINPUT_STATE}}</strong> structure when polling for changes in the state of the controller. </p><p>The specific mapping of button to game function varies depending on the game type. </p><p>The constant {{XINPUT_GAMEPAD_TRIGGER_THRESHOLD}} may be used as the value which <em>bLeftTrigger</em> and <em>bRightTrigger</em> must be greater than to register as pressed. This is optional, but often desirable. Xbox 360 Controller buttons do not manifest crosstalk. +</p> + + + <dd> <p>Bitmask of the device digital buttons, as follows. A set bit indicates that the corresponding button is pressed. </p> <table> <tr><th>Device button</th><th>Bitmask</th></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_UP}}</td><td> 0x0001</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_DOWN}}</td><td> 0x0002</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_LEFT}}</td><td> 0x0004</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_RIGHT}}</td><td> 0x0008</td></tr> <tr><td>{{XINPUT_GAMEPAD_START}}</td><td> 0x0010</td></tr> <tr><td>{{XINPUT_GAMEPAD_BACK}}</td><td> 0x0020</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_THUMB}}</td><td> 0x0040</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_THUMB}}</td><td> 0x0080</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_SHOULDER}}</td><td> 0x0100</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_SHOULDER}}</td><td> 0x0200</td></tr> <tr><td>{{XINPUT_GAMEPAD_A}}</td><td> 0x1000</td></tr> <tr><td>{{XINPUT_GAMEPAD_B}}</td><td> 0x2000</td></tr> <tr><td>{{XINPUT_GAMEPAD_X}}</td><td> 0x4000</td></tr> <tr><td>{{XINPUT_GAMEPAD_Y}}</td><td> 0x8000</td></tr> </table> <p>?</p> <p>Bits that are set but not defined above are reserved, and their state is undefined. </p> </dd> + + + <dd> <p>The current value of the left trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>The current value of the right trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>Left thumbstick x-axis value. Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick. A value of 0 is centered. Negative values signify down or to the left. Positive values signify up or to the right. The constants {{XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE}} or {{XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE}} can be used as a positive and negative value to filter a thumbstick input. +</p> </dd> + + + <dd> <p>Left thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick x-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + + + <p>Represents the state of a controller.</p> + <p>The <em>dwPacketNumber</em> member is incremented only if the status of the controller has changed since the controller was last polled. </p> + + + <dd> <p>State packet number. The packet number indicates whether there have been any changes in the state of the controller. If the <em>dwPacketNumber</em> member is the same in sequentially returned <strong>{{XINPUT_STATE}}</strong> structures, the controller state has not changed.</p> </dd> + + + <dd> <p> <strong>{{XINPUT_GAMEPAD}}</strong> structure containing the current state of an Xbox 360 Controller.</p> </dd> + + + + + <p>Specifies motor speed levels for the vibration function of a controller.</p> + <p>The left motor is the low-frequency rumble motor. The right motor is the high-frequency rumble motor. The two motors are not the same, and they create different vibration effects.</p> + + + <dd> <p>Speed of the left motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + <dd> <p>Speed of the right motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies keystroke data returned by <strong>{{XInputGetKeystroke}}</strong>.</p> + <p>Future devices may return {{HID}} codes and virtual key values that are not supported on current devices, and are currently undefined. Applications should ignore these unexpected values. </p><p>A <em>virtual-key</em> code is a byte value that represents a particular physical key on the keyboard, not the character or characters (possibly none) that the key can be mapped to based on keyboard state. The keyboard state at the time a virtual key is pressed modifies the character reported. For example, {{VK_4}} might represent a "4" or a "$", depending on the state of the {{SHIFT}} key. </p><p>A reported keyboard event includes the virtual key that caused the event, whether the key was pressed or released (or is repeating), and the state of the keyboard at the time of the event. The keyboard state includes information about whether any {{CTRL}}, {{ALT}}, or {{SHIFT}} keys are down. </p><p>If the keyboard event represents an Unicode character (for example, pressing the "A" key), the <em>Unicode</em> member will contain that character. Otherwise, <em>Unicode</em> will contain the value zero. </p><p>The valid virtual-key ({{VK_xxx}}) codes are defined in {{XInput}}.h. In addition to codes that indicate key presses, the following codes indicate controller input. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{VK_PAD_A}}</td><td><strong>A</strong> button?</td></tr> <tr><td>{{VK_PAD_B}}</td><td><strong>B</strong> button?</td></tr> <tr><td>{{VK_PAD_X}}</td><td><strong>X</strong> button?</td></tr> <tr><td>{{VK_PAD_Y}}</td><td><strong>Y</strong> button?</td></tr> <tr><td>{{VK_PAD_RSHOULDER}}</td><td>Right shoulder button?</td></tr> <tr><td>{{VK_PAD_LSHOULDER}}</td><td>Left shoulder button?</td></tr> <tr><td>{{VK_PAD_LTRIGGER}}</td><td>Left trigger?</td></tr> <tr><td>{{VK_PAD_RTRIGGER}}</td><td>Right trigger?</td></tr> <tr><td>{{VK_PAD_DPAD_UP}}</td><td>Directional pad up?</td></tr> <tr><td>{{VK_PAD_DPAD_DOWN}}</td><td>Directional pad down?</td></tr> <tr><td>{{VK_PAD_DPAD_LEFT}}</td><td>Directional pad left?</td></tr> <tr><td>{{VK_PAD_DPAD_RIGHT}}</td><td>Directional pad right?</td></tr> <tr><td>{{VK_PAD_START}}</td><td><strong>{{START}}</strong> button?</td></tr> <tr><td>{{VK_PAD_BACK}}</td><td><strong>{{BACK}}</strong> button?</td></tr> <tr><td>{{VK_PAD_LTHUMB_PRESS}}</td><td>Left thumbstick click?</td></tr> <tr><td>{{VK_PAD_RTHUMB_PRESS}}</td><td>Right thumbstick click?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UP}}</td><td>Left thumbstick up?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWN}}</td><td>Left thumbstick down?</td></tr> <tr><td>{{VK_PAD_LTHUMB_RIGHT}}</td><td>Left thumbstick right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_LEFT}}</td><td>Left thumbstick left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPLEFT}}</td><td>Left thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPRIGHT}}</td><td>Left thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNRIGHT}}</td><td>Left thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNLEFT}}</td><td>Left thumbstick down and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UP}}</td><td>Right thumbstick up?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWN}}</td><td>Right thumbstick down?</td></tr> <tr><td>{{VK_PAD_RTHUMB_RIGHT}}</td><td>Right thumbstick right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_LEFT}}</td><td>Right thumbstick left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPLEFT}}</td><td>Right thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPRIGHT}}</td><td>Right thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNRIGHT}}</td><td>Right thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNLEFT}}</td><td>Right thumbstick down and left?</td></tr> </table><p>?</p> + + + + <p>Retrieves the current state of the specified controller.</p> + <p>When <strong>{{XInputGetState}}</strong> is used to retrieve controller data, the left and right triggers are each reported separately. For legacy reasons, when DirectInput retrieves controller data, the two triggers share the same axis. The legacy behavior is noticeable in the current Game Device Control Panel, which uses DirectInput for controller state.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_STATE}}</strong> structure that receives the current state of the controller.</p> </dd> + + + + + <p>Sends data to a connected controller. This function is used to activate the vibration function of a controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>.</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_VIBRATION}}</strong> structure containing the vibration information to send to the controller.</p> </dd> + + + + + <p>Retrieves the capabilities and features of a connected controller.</p> + <strong>Note</strong>??The legacy {{XINPUT}} 9.1.0 version (included in Windows?Vista and later) always returned a fixed set of capabilities regardless of attached device.? + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value in the range 0?3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers. </p> </dd> + + + <dd> <p>Input flags that identify the controller type. If this value is 0, then the capabilities of all controllers connected to the system are returned. Currently, only one value is supported:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{XINPUT_FLAG_GAMEPAD}}</strong></td><td>Limit query to devices of Xbox 360 Controller type.</td></tr> </table> <p>?</p> <p>Any value of <em>dwflags</em> other than the above or 0 is illegal and will result in an error break when debugging.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_CAPABILITIES}}</strong> structure that receives the controller capabilities.</p> </dd> + + + + + <p>Sets the reporting state of {{XInput}}.</p> + <p>This function is meant to be called when an application gains or loses focus (such as via <strong>{{WM_ACTIVATEAPP}}</strong>). Using this function, you will not have to change the {{XInput}} query loop in your application as neutral data will always be reported if {{XInput}} is disabled. +</p><p>In a controller that supports vibration effects:</p><ul> <li>Passing <strong>{{FALSE}}</strong> will stop any vibration effects currently playing. In this state, calls to <strong>{{XInputSetState}}</strong> will be registered, but not passed to the device.</li> <li>Passing <strong>{{TRUE}}</strong> will pass the last vibration request (even if it is 0) sent to <strong>{{XInputSetState}}</strong> to the device.</li> </ul> + <p>This function does not return a value.</p> + + + <dd> <p>If enable is <strong>{{FALSE}}</strong>, {{XInput}} will only send neutral data in response to <strong>{{XInputGetState}}</strong> (all buttons up, axes centered, and triggers at 0). <strong>{{XInputSetState}}</strong> calls will be registered but not sent to the device. Sending any value other than <strong>{{FALSE}} </strong>will restore reading and writing functionality to normal.</p> </dd> + + + + + <p>Retrieves the sound rendering and sound capture audio device {{IDs}} that are associated with the headset connected to the specified controller.</p> + <p>Callers must allocate the memory for the buffers passed to <strong>{{XInputGetAudioDeviceIds}}</strong>. The resulting strings can be of arbitrary length.</p> + <p>If the function successfully retrieves the device {{IDs}} for render and capture, the return code is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If there is no headset connected to the controller, the function will also retrieve <strong>{{ERROR_SUCCESS}}</strong> with <strong>{{NULL}}</strong> as the values for <em>pRenderDeviceId</em> and <em>pCaptureDeviceId</em>. +</p><p>If the controller port device is not physically connected, the function will return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, it will return a valid Win32 error code. +</p> + + + <dd> <p> Index of the gamer associated with the device.</p> </dd> + + + <dd> <p> Windows Core Audio device {{ID}} string for render (speakers).</p> </dd> + + + <dd> <p> Size, in wide-chars, of the render device {{ID}} string buffer.</p> </dd> + + + <dd> <p>Windows Core Audio device {{ID}} string for capture (microphone).</p> </dd> + + + <dd> <p>Size, in wide-chars, of capture device {{ID}} string buffer.</p> </dd> + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + <p>A multithread interface accesses multithread settings and can only be used if the thread-safe layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D10Device}} Interface</strong> using {{IUnknown::QueryInterface}}.</p> + + + + <p>Enter a device's critical section.</p> + <p>Entering a device's critical section prevents other threads from simultaneously calling that device's methods (if <strong>multithread protection</strong> is set to true), calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>{{ID3D10Multithread::Leave}}</strong> is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>{{ID3D10Multithread::Enter}}</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Turn multithreading on or off.</p> + <p>True if multithreading was turned on prior to calling this method, false otherwise.</p> + + + <dd> <p>True to turn multithreading on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithreading is turned on or not.</p> + <p>Whether or not multithreading is turned on. True means on, false means off.</p> + + + + <p> The +<strong>{{LOCKTYPE}}</strong> enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the +<strong>{{ILockBytes::LockRegion}}</strong> and +<strong>{{IStream::LockRegion}}</strong> methods.</p> + + + + <p> The +<strong>{{STATSTG}}</strong> structure contains statistical data about an open storage, stream, or byte-array object. This structure is used in the +<strong>{{IEnumSTATSTG}}</strong>, +<strong>{{ILockBytes}}</strong>, +<strong>{{IStorage}}</strong>, and +<strong>{{IStream}}</strong> interfaces.</p> + + + + <p> The +<strong>{{ISequentialStream}}</strong> interface supports simplified sequential access to stream objects. The +<strong>{{IStream}}</strong> interface inherits its +<strong>Read</strong> and +<strong>Write</strong> methods from +<strong>{{ISequentialStream}}</strong>.</p> + + + + <p>Reads a specified number of bytes from the stream object into memory starting at the current read/write location within the stream.</p> + + + <dd><p>[in] +Points to the buffer into which the stream is read. If an error occurs, this value is {{NULL}}.</p></dd> + + + <dd><p>[in] +Specifies the number of bytes of data to attempt to read from the stream object.</p></dd> + + + <dd><p>[out] +Pointer to a location where this method writes the actual number of bytes read from the stream object. You can set this reference to {{NULL}} to indicate that you are not interested in this value. In this case, this method does not provide the actual number of bytes read.</p></dd> + + + + + <p>Writes a specified number of bytes into the stream object starting at the current read/write location within the stream.</p> + + + <dd><p>[in] Points to the buffer into which the stream should be written.</p></dd> + + + <dd><p>[in] The number of bytes of data to attempt to write into the stream.</p></dd> + + + <dd><p>[out] Pointer to a location where this method writes the actual number of bytes written to the stream object. The caller can set this reference to {{NULL}}, in which case this method does not provide the actual number of bytes written.</p></dd> + + + + + <p> The +<strong>{{IStream}}</strong> interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.</p><p>The +<strong>{{IStream}}</strong> interface defines methods similar to the {{MS}}-{{DOS}} {{FAT}} file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a {{DOS}} file and a stream object is that in the latter case, streams are opened using an +<strong>{{IStream}}</strong> interface reference rather than a file handle.</p><p>The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.</p><p>Streams can remain open for long periods of time without consuming file-system resources. The <strong>{{IUnknown::Release}}</strong> method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.</p><p>Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous +<strong>{{IMoniker::BindToStorage}}</strong> operation and for receiving asynchronous notifications. See +{{URL}} Monikers for more information. The following table compares the behavior of asynchronous +<strong>{{ISequentialStream::Read}}</strong> and +<strong>{{IStream::Seek}}</strong> calls returned in <strong>{{IBindStatusCallback::OnDataAvailable}}</strong> in these two download models:</p> + + + + <p> The <strong>Seek</strong> method changes the seek reference to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek reference.</p> + <p><strong>{{IStream::Seek}}</strong> changes the seek reference so that subsequent read and write operations can be performed at a different location in the stream object. It is an error to seek before the beginning of the stream. It is not, however, an error to seek past the end of the stream. Seeking past the end of the stream is useful for subsequent write operations, as the stream byte range will be extended to the new seek position immediately before the write is complete.</p><p>You can also use this method to obtain the current value of the seek reference by calling this method with the <em>dwOrigin</em> parameter set to <strong>{{STREAM_SEEK_CUR}}</strong> and the <em>dlibMove</em> parameter set to 0 so that the seek reference is not changed. The current seek reference is returned in the <em>plibNewPosition</em> parameter.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The seek reference was successfully adjusted.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>Indicates that the [out] parameter <em>plibNewPosition</em> points to invalid memory, because <em>plibNewPosition</em> is not read.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The <em>dwOrigin</em> parameter contains an invalid value, or the <em>dlibMove</em> parameter contains a bad offset value. For example, the result of the seek reference is a negative offset value.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>The displacement to be added to the location indicated by the <em>dwOrigin</em> parameter. If <em>dwOrigin</em> is <strong>{{STREAM_SEEK_SET}}</strong>, this is interpreted as an unsigned value rather than a signed value.</p> </dd> + + + <dd> <p>The origin for the displacement specified in <em>dlibMove</em>. The origin can be the beginning of the file (<strong>{{STREAM_SEEK_SET}}</strong>), the current seek reference (<strong>{{STREAM_SEEK_CUR}}</strong>), or the end of the file (<strong>{{STREAM_SEEK_END}}</strong>). For more information about values, see the <strong>{{STREAM_SEEK}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the value of the new seek reference from the beginning of the stream. </p> <p>You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the new seek reference.</p> </dd> + + + + + <p>The <strong>SetSize</strong> method changes the size of the stream object.</p> + <p><strong>{{IStream::SetSize}}</strong> changes the size of the stream object. Call this method to preallocate space for the stream. If the <em>libNewSize</em> parameter is larger than the current stream size, the stream is extended to the indicated size by filling the intervening space with bytes of undefined value. This operation is similar to the +<strong>{{ISequentialStream::Write}}</strong> method if the seek reference is past the current end of the stream.</p><p>If the <em>libNewSize</em> parameter is smaller than the current stream, the stream is truncated to the indicated size.</p><p>The seek reference is not affected by the change in stream size.</p><p>Calling <strong>{{IStream::SetSize}}</strong> can be an effective way to obtain a large chunk of contiguous space.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The size of the stream object was successfully changed.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream size is not changed because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The value of the <em>libNewSize</em> parameter is not supported by the implementation. Not all streams support greater than 2?? bytes. If a stream does not support more than 2?? bytes, the high <strong>{{DWORD}}</strong> data type of <em>libNewSize</em> must be zero. If it is nonzero, the implementation may return {{STG_E_INVALIDFUNCTION}}. In general, {{COM}}-based implementations of the <strong>{{IStream}}</strong> interface do not support streams larger than 2?? bytes.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Specifies the new size, in bytes, of the stream.</p> </dd> + + + + + <p>The <strong>CopyTo</strong> method copies a specified number of bytes from the current seek reference in the stream to the current seek reference in another stream.</p> + <p>The <strong>CopyTo</strong> method copies the specified bytes from one stream to another. It can also be used to copy a stream to itself. The seek reference in each stream instance is adjusted for the number of bytes read or written. This method is equivalent to reading <em>cb</em> bytes into memory using +<strong>{{ISequentialStream::Read}}</strong> and then immediately writing them to the destination stream using +<strong>{{ISequentialStream::Write}}</strong>, although <strong>{{IStream::CopyTo}}</strong> will be more efficient.</p><p>The destination stream can be a clone of the source stream created by calling the +<strong>{{IStream::Clone}}</strong> method.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns an error, you cannot assume that the seek references are valid for either the source or destination. Additionally, the values of <em>pcbRead</em> and <em>pcbWritten</em> are not meaningful even though they are returned.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns successfully, the actual number of bytes read and written are the same.</p><p>To copy the remainder of the source from the current seek reference, specify the maximum large integer value for the <em>cb</em> parameter. If the seek reference is the beginning of the stream, this operation copies the entire stream.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream object was successfully copied.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the data to be copied is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The value of one of the reference parameters is invalid.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream is not copied because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>A reference to the destination stream. The stream pointed to by <em>pstm</em> can be a new stream or a clone of the source stream.</p> </dd> + + + <dd> <p>The number of bytes to copy from the source stream.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes read from the source. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes read.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes written to the destination. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes written.</p> </dd> + + + + + <p>The <strong>Commit</strong> method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, <strong>{{IStream::Commit}}</strong> has no effect other than flushing all memory buffers to the next-level storage object. The {{COM}} compound file implementation of streams does not support opening streams in transacted mode.</p> + <p>The <strong>Commit</strong> method ensures that changes to a stream object opened in transacted mode are reflected in the parent storage. Changes that have been made to the stream since it was opened or last committed are reflected to the parent storage object. If the parent is opened in transacted mode, the parent may revert at a later time, rolling back the changes to this stream object. The compound file implementation does not support the opening of streams in transacted mode, so this method has very little effect other than to flush memory buffers. For more information, see +{{IStream}} - Compound File Implementation.</p><p>If the stream is open in direct mode, this method ensures that any memory buffers have been flushed out to the underlying storage object. This is much like a flush in traditional file systems.</p><p>The <strong>{{IStream::Commit}}</strong> method is useful on a direct mode stream when the implementation of the +<strong>{{IStream}}</strong> interface is a wrapper for underlying file system {{APIs}}. In this case, <strong>{{IStream::Commit}}</strong> would be connected to the file system's flush call.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>Changes to the stream object were successfully committed to the parent level.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The commit operation failed due to lack of space on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Controls how the changes for the stream object are committed. See the +<strong>{{STGC}}</strong> enumeration for a definition of these values.</p> </dd> + + + + + <p>The <strong>Revert</strong> method discards all changes that have been made to a transacted stream since the last +<strong>{{IStream::Commit}}</strong> call. On streams open in direct mode and streams using the {{COM}} compound file implementation of <strong>{{IStream::Revert}}</strong>, this method has no effect.</p> + <p>The <strong>Revert</strong> method discards changes made to a transacted stream since the last commit operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully reverted to its previous version.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> </dl> + + + + + + + + + + <p> The <strong>Stat</strong> method retrieves the +<strong>{{STATSTG}}</strong> structure for this stream.</p> + <p><strong>{{IStream::Stat}}</strong> retrieves a reference to the +<strong>{{STATSTG}}</strong> structure that contains information about this open stream. When this stream is within a structured storage and +<strong>{{IStorage::EnumElements}}</strong> is called, it creates an enumerator object with the +<strong>{{IEnumSTATSTG}}</strong> interface on it, which can be called to enumerate the storages and streams through the +<strong>{{STATSTG}}</strong> structures associated with each of them.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was successfully returned at the specified location.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_ACCESSDENIED}}</strong></dt> <dd> <p>The caller does not have enough permissions for accessing statistics for this storage object.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was not returned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDFLAG}}</strong></dt> <dd> <p>The value for the <em>grfStateFlag</em> parameter is not valid.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>pStatStg</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + + <p> The <strong>Clone</strong> method creates a new stream object with its own seek reference that references the same bytes as the original stream.</p> + <p>The <strong>Clone</strong> method creates a new stream object for accessing the same bytes but using a separate seek reference. The new stream object sees the same data as the source-stream object. Changes written to one object are immediately visible in the other. Range locking is shared between the stream objects.</p><p>The initial setting of the seek reference in the cloned stream instance is the same as the current setting of the seek reference in the original stream at the time of the clone operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully cloned.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The stream was not cloned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>ppStm</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>When successful, reference to the location of an +<strong>{{IStream}}</strong> reference to the new stream object. If an error occurs, this parameter is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> The +<strong>{{STGC}}</strong> enumeration constants specify the conditions for performing the commit operation in the +<strong>{{IStorage::Commit}}</strong> and +<strong>{{IStream::Commit}}</strong> methods.</p> + <p>You can specify <strong>{{STGC_DEFAULT}}</strong> or some combination of <strong>{{STGC_OVERWRITE}}</strong>, <strong>{{STGC_ONLYIFCURRENT}}</strong>, and <strong>{{STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE}}</strong> for normal commit operations. You can specify <strong>{{STGC_CONSOLIDATE}}</strong> with any other {{STGC}} flags.</p><p>Typically, use <strong>{{STGC_ONLYIFCURRENT}}</strong> to protect the storage object in cases where more than one user can edit the object simultaneously.</p> + + + + <p> The +<strong>{{STATFLAG}}</strong> enumeration values indicate whether the method should try to return a name in the <strong>pwcsName</strong> member of the +<strong>{{STATSTG}}</strong> structure. The values are used in the +<strong>{{ILockBytes::Stat}}</strong>, +<strong>{{IStorage::Stat}}</strong>, and +<strong>{{IStream::Stat}}</strong> methods to save memory when the <strong>pwcsName</strong> member is not required.</p> + + + + <p> </p><p>The <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration defines constants that indicate whether an audio stream will run in shared mode or in exclusive mode.</p> + <p>The <strong>{{IAudioClient::Initialize}}</strong> and <strong>{{IAudioClient::IsFormatSupported}}</strong> methods use the constants defined in the <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration.</p><p>In shared mode, the client can share the audio endpoint device with clients that run in other user-mode processes. The audio engine always supports formats for client streams that match the engine's mix format. In addition, the audio engine might support another format if the Windows audio service can insert system effects into the client stream to convert the client format to the mix format.</p><p>In exclusive mode, the Windows audio service attempts to establish a connection in which the client has exclusive access to the audio endpoint device. In this mode, the audio engine inserts no system effects into the local stream to aid in the creation of the connection point. Either the audio device can handle the specified format directly or the method fails.</p><p>For more information about shared-mode and exclusive-mode streams, see User-Mode Audio Components.</p> + + + <dd> <p>The audio stream will run in shared mode. For more information, see Remarks.</p> </dd> + + + <dd> <p>The audio stream will run in exclusive mode. For more information, see Remarks.</p> </dd> + + + + + <p>Specifies the category of an audio stream.</p> + <p>Note that only a subset of the audio stream categories are valid for certain stream types.</p><table> <tr><th>Stream type</th><th>Valid categories</th></tr> <tr><td>Render stream</td><td>All categories are valid.</td></tr> <tr><td>Capture stream</td><td>AudioCategory_Communications, AudioCategory_Speech, AudioCategory_Other</td></tr> <tr><td>Loopback stream</td><td>AudioCategory_Other</td></tr> </table><p>?</p><p>Games should categorize their music streams as <strong>AudioCategory_GameMedia</strong> so that game music mutes automatically if another application plays music in the background. Music or video applications should categorize their streams as <strong>AudioCategory_Media</strong> or <strong>AudioCategory_Movie</strong> so they will take priority over <strong>AudioCategory_GameMedia</strong> streams.</p><p>The values <strong>AudioCategory_ForegroundOnlyMedia</strong> and <strong>AudioCategory_BackgroundCapableMedia</strong> are deprecated. For Windows Store apps, these values will continue to function the same when running on Windows?10 as they did on Windows?8.1. Attempting to use these values in a Universal Windows Platform ({{UWP}}) app, will result in compilation errors and an exception at runtime. Using these values in a Windows desktop application built with the Windows?10 {{SDK}} the will result in a compilation error.</p> + + + <dd> <p>Other audio stream.</p> </dd> + + + <dd> <p>Media that will only stream when the app is in the foreground. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Media that can be streamed when the app is in the background. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Real-time communications, such as {{VOIP}} or chat.</p> </dd> + + + <dd> <p>Alert sounds.</p> </dd> + + + <dd> <p>Sound effects.</p> </dd> + + + <dd> <p>Game sound effects.</p> </dd> + + + <dd> <p>Background audio for games.</p> </dd> + + + <dd> <p>Game chat audio. Similar to <strong>AudioCategory_Communications</strong> except that <strong>AudioCategory_GameChat</strong> will not attenuate other streams.</p> </dd> + + + <dd> <p>Speech.</p> </dd> + + + <dd> <p>Stream that includes audio with dialog.</p> </dd> + + + <dd> <p>Stream that includes audio without dialog.</p> </dd> + + + + + <p> </p><p>The <strong>AudioSessionState</strong> enumeration defines constants that indicate the current state of an audio session.</p> + <p>When a client opens a session by assigning the first stream to the session (by calling the <strong>{{IAudioClient::Initialize}}</strong> method), the initial session state is inactive. The session state changes from inactive to active when a stream in the session begins running (because the client has called the <strong>{{IAudioClient::Start}}</strong> method). The session changes from active to inactive when the client stops the last running stream in the session (by calling the <strong>{{IAudioClient::Stop}}</strong> method). The session state changes to expired when the client destroys the last stream in the session by releasing all references to the stream object.</p><p>The system volume-control program, Sndvol, displays volume controls for both active and inactive sessions. Sndvol stops displaying the volume control for a session when the session state changes to expired. For more information about Sndvol, see Audio Sessions.</p><p>The <strong>{{IAudioSessionControl::GetState}}</strong> and <strong>{{IAudioSessionEvents::OnStateChanged}}</strong> methods use the constants defined in the <strong>AudioSessionState</strong> enumeration.</p><p>For more information about session states, see Audio Sessions.</p> + + + <dd> <p>The audio session is inactive. (It contains at least one stream, but none of the streams in the session is currently running.)</p> </dd> + + + <dd> <p>The audio session is active. (At least one of the streams in the session is running.)</p> </dd> + + + <dd> <p>The audio session has expired. (It contains no streams.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + + + + + + + + + + <p>Status codes that can be returned by {{DXGI}} functions.</p><p></p> + <p>The <strong>{{HRESULT}}</strong> value for each <strong>{{DXGI_STATUS}}</strong> value is determined from this macro that is defined in {{DXGItype}}.h:</p><pre> #define _FACDXGI 0x87a +#define {{MAKE_DXGI_STATUS}}(code) {{MAKE_HRESULT}}(0, _FACDXGI, code) +</pre><p>For example, <strong>{{DXGI_STATUS_OCCLUDED}}</strong> is defined as <strong>0x087A0001</strong>:</p><pre> #define {{DXGI_STATUS_OCCLUDED}} {{MAKE_DXGI_STATUS}}(1) +</pre> + + + + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>{{XAudio2}} constants that specify default parameters, maximum values, and flags.</p><p> </p><p><strong>{{XAudio2}} boundary values</strong></p> + + + + + + + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + + + + + + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>A table of controller subtypes available in {{XInput}}.</p> + + + + + + + + + + + + + + + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + + + + + + + + + + + + + + + + <p>Represents a virtual adapter. This interface extends <strong>Id3d12device2</strong> to support the creation of special-purpose diagnostic heaps in system memory that persist even in the event of a {{GPU}}-fault or device-removed scenario.</p><strong>Note</strong> This interface, introduced in the Windows 10 Fall Creators Update, is the latest version of the <strong>{{ID3D12Device}}</strong> interface. Applications targeting the Windows 10 Fall Creators Update and later should use this interface instead of earlier versions. + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device.</p> + + + + <p>Specifies the type of unit contained in an <strong>{{IMFSample}}</strong> in a {{MFSampleExtension_ForwardedDecodeUnits}} collection.</p> + + + + + + + + <p>Gets the {{ID}} of the process with which the activity is associated.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pPID</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Part of a contract between {{D3D11On12}} diagnostic layers and graphics diagnostics tools. This interface facilitates diagnostics tools to capture information at a lower level than the {{DXGI}} swapchain.</p> + + + + + + + + + + <p>Represents the activity of a process associated with a sensor.</p> + + + + <p>Gets an <strong>{{IMFSensorProcessActivity}}</strong> object representing the current process activity of a sensor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppProcessActivity</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Gets the streaming mode of the sensor process.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pMode</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Gets the count of <strong>{{IMFSensorActivityReport}}</strong> objects that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified device name.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>symbolicName</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The system is out of memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No sensor with the specified symbolic name was found.</p> </td></tr> </table><p> </p> + + + + <p>Represents an activity report for a sensor.</p> + + + + <p>Gets the symbolic link for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor symbolic link is written.</p> </dd> + + + <dd> <p>The character count of the <em>SymbolicLink</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>SymbolicLink</em> string.</p> </dd> + + + + + <p>Interface implemented by the client to receive callbacks when sensor activity reports are available.</p> + <p>Register the callback by passing an implementation of this interface into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Gets a value indicating whether the sensor is currently streaming.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pfStreaming</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a value indicating whether the sensor is currently streaming.</p> </dd> + + + + + <p>Raised by the media pipeline when a new <strong>{{IMFSensorActivitiesReport}}</strong> is available.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the count of <strong>{{IMFSensorProcessActivity}}</strong> objects, representing the current activity of a process associated with the sensor, that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pulCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Provides methods for controlling a sensor activity monitor.</p> + <p>Get an instance of this class by calling <strong>{{MFCreateSensorActivityMonitor}}</strong>. Sensor activity reports are delivered through the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface passed into this method.</p> + + + + <p>Stops the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p> </p> + + + + <p>Gets the time associated with the sensor activity report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pft</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the time associated with the sensor activity report.</p> </dd> + + + + + + + + <p>Gets the friendly name for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor friendly name is written.</p> </dd> + + + <dd> <p>The character count of the <em>FriendlyName</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>FriendlyName</em> string.</p> </dd> + + + + + + + + <p>Provides access to <strong>{{IMFSensorActivityReport}}</strong> objects that describe the current activity of a sensor.</p> + <p>Register to receive sensor activities reports by implementing the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface and passing the implementation into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> </table><p> </p> + + + + <p>Starts the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The sensor activity monitor has already been started.</p> </td></tr> </table><p> </p> + + + + <p>Initializes a new instance of the <strong>{{IMFSensorActivityMonitor}}</strong> interface.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppActivityMonitor</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + + + + + + + + + + + + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows 8. + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows {{XP}} with Service Pack 2 ({{SP2}}) and later.</li> <li>Windows {{XP}} Media Center Edition 2005 with {{KB900325}} (Windows {{XP}} Media Center Edition 2005) and {{KB925766}} (October 2006 Update Rollup for Windows {{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Increments the reference count for an interface on an object. This method should be called for every new copy of a reference to an interface on an object.</p> + <p>Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use <strong>AddRef</strong> to stabilize a copy of an interface reference. It can also be called when the life of a cloned reference must extend beyond the lifetime of the original reference. The cloned reference must be released by calling <strong>{{IUnknown::Release}}</strong>.</p><p>The internal reference counter that <strong>AddRef</strong> maintains should be a 32-bit unsigned integer.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Retrieves references to the supported interfaces on an object.</p><p>This method calls <strong>{{IUnknown::AddRef}}</strong> on the reference it returns.</p> + <p>For any one object, a specific query for the <strong>{{IUnknown}}</strong> interface on any of the object's interfaces must always return the same reference value. This enables a client to determine whether two references point to the same component by calling <strong>QueryInterface</strong> with {{IID_IUnknown}} and comparing the results. It is specifically not the case that queries for interfaces other than {{IUnknown}} (even the same interface through the same reference) must return the same reference value.</p><p>There are four requirements for implementations of <strong>QueryInterface</strong> (In these cases, "must succeed" means "must succeed barring catastrophic failure."):</p><ul> <li> <p>The set of interfaces accessible on an object through <strong>QueryInterface</strong> must be static, not dynamic. This means that if a call to <strong>QueryInterface</strong> for a reference to a specified interface succeeds the first time, it must succeed again, and if it fails the first time, it must fail on all subsequent queries.</p> </li> <li> <p>It must be reflexive — if a client holds a reference to an interface on an object, and queries for that interface, the call must succeed.</p> </li> <li> <p>It must be symmetric — if a client holding a reference to one interface queries successfully for another, a query through the obtained reference for the first interface must succeed.</p> </li> <li> <p>It must be transitive — if a client holding a reference to one interface queries successfully for a second, and through that reference queries successfully for a third interface, a query for the first interface through the reference for the third interface must succeed.</p> </li> </ul> + <p>This method returns {{S_OK}} if the interface is supported, and {{E_NOINTERFACE}} otherwise. If <em>ppvObject</em> is <strong>{{NULL}}</strong>, this method returns {{E_POINTER}}.</p> + + + + <p>Decrements the reference count for an interface on an object.</p> + <p>When the reference count on an object reaches zero, <strong>Release</strong> must cause the interface reference to free itself. When the released reference is the only existing reference to an object (whether the object supports single or multiple interfaces), the implementation must free the object.</p><p>Note that aggregation of objects restricts the ability to recover interface references.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Enables clients to get references to other interfaces on a given object through the <strong>QueryInterface</strong> method, and manage the existence of the object through the <strong>AddRef</strong> and <strong>Release</strong> methods. All other {{COM}} interfaces are inherited, directly or indirectly, from <strong>{{IUnknown}}</strong>. Therefore, the three methods in <strong>{{IUnknown}}</strong> are the first entries in the {{VTable}} for every interface. +</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Describes a sensor profile {{ID}}.</p> + + + <dd> <p>A <strong>Sensor Profile {{GUID}}</strong> that describes the type of sensor profile. </p> </dd> + + + <dd> <p>The index of the sensor profile.</p> </dd> + + + <dd> <p>Not currently used.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/DocumentationCache/uap10.0/DocumentationCache.xml b/Source/DocumentationCache/uap10.0/DocumentationCache.xml new file mode 100644 index 000000000..7015f6de9 --- /dev/null +++ b/Source/DocumentationCache/uap10.0/DocumentationCache.xml @@ -0,0 +1,76738 @@ + + + + + <p>Type of data contained in an input slot.</p> + <p>Use these values to specify the type of data for a particular input element (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>) of an input-layout object.</p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Determines the fill mode to use when rendering triangles.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Indicates triangles facing a particular direction are not drawn.</p> + <p>This enumeration is part of a rasterizer-state object description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p>This enumeration is used in <strong>{{ID3D11Resource::GetType}}</strong>. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>This enumeration is used in <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> to create a depth-stencil view.</p> + + + <dd> <p><em>{{D3D11_DSV_DIMENSION_UNKNOWN}}</em> is not a valid value for <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + + + <p>These flags identify the type of resource that will be viewed as a render target.</p> + <p>This enumeration is used in <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> to create a render-target view.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Unordered-access view options.</p> + <p> This enumeration is used by a unordered access-view description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>). </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the {{CPU}} and/or the graphics processing unit ({{GPU}}).</p> + <p>An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>, and <strong>{{D3D11_BUFFER_DESC}}</strong>.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10/11:</p> <p>In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using {{D3DPOOL}}). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.</p> <p>In Direct3D 10/11, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A resource that requires read and write access by the {{GPU}}. This is likely to be the most common usage choice.</p> </dd> + + + <dd> <p>A resource that can only be read by the {{GPU}}. It cannot be written by the {{GPU}}, and cannot be accessed at all by the {{CPU}}. This type of resource must be initialized when it is created, since it cannot be changed after creation.</p> </dd> + + + <dd> <p>A resource that is accessible by both the {{GPU}} (read only) and the {{CPU}} (write only). A dynamic resource is a good choice for a resource that will be updated by the {{CPU}} at least once per frame. To update a dynamic resource, use a <strong>Map</strong> method.</p> <p>For info about how to use dynamic resources, see How to: Use dynamic resources. </p> </dd> + + + <dd> <p>A resource that supports data transfer (copy) from the {{GPU}} to the {{CPU}}.</p> </dd> + + + + + <p>Identifies how to bind a resource to the pipeline.</p> + <p>In general, binding flags can be combined using a logical {{OR}} (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.</p><p>This enumeration is used by a:</p><ul> <li> <strong>Buffer description</strong> when creating a buffer.</li> <li>Texture description when creating a texture (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong> or <strong>{{D3D11_TEXTURE2D_DESC}}</strong> or <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</li> </ul><p>A shader-resource buffer is {{NOT}} a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the {{D3D11_BIND_SHADER_RESOURCE}} flag and is bound to the pipeline using one of these {{APIs:}} <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>, or <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>. Furthermore, a shader-resource buffer cannot use the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p><strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.? + + + <dd> <p>Bind a buffer as a vertex buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as an index buffer to the input-assembler stage.</p> </dd> + + + <dd> <p>Bind a buffer as a constant buffer to a shader stage; this flag may {{NOT}} be combined with any other bind flag.</p> </dd> + + + <dd> <p>Bind a buffer or texture to a shader stage; this flag cannot be used with the <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + <dd> <p>Bind an output buffer for the stream-output stage.</p> </dd> + + + <dd> <p>Bind a texture as a render target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind a texture as a depth-stencil target for the output-merger stage.</p> </dd> + + + <dd> <p>Bind an unordered access resource.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive output from the decoder {{API}}. The common way to create resources for a decoder output is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that a 2D texture is used to receive input from the video encoder {{API}}. The common way to create resources for a video encoder is by calling the <strong>{{ID3D11Device::CreateTexture2D}}</strong> method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>Specifies the types of {{CPU}} access allowed for a resource.</p> + <p>This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p>Applications may combine one or more of these flags with a logical {{OR}}. When possible, create resources with no {{CPU}} access flags, as this enables better resource optimization.</p><p>The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags.</p> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + <dd> <p>The resource is to be mappable so that the {{CPU}} can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see <strong>{{D3D11_USAGE}}</strong>).</p> </dd> + + + + + <p>Identifies options for resources.</p> + <p> This enumeration is used in <strong>{{D3D11_BUFFER_DESC}}</strong>, <strong>{{D3D11_TEXTURE1D_DESC}}</strong>, <strong>{{D3D11_TEXTURE2D_DESC}}</strong>, <strong>{{D3D11_TEXTURE3D_DESC}}</strong>. </p><p> These flags can be combined by bitwise {{OR}}. </p><p> The <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> cannot be used when creating resources with <strong>{{D3D11_CPU_ACCESS}}</strong> flags. </p> + + + <dd> <p> Enables {{MIP}} map generation by using <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> on a texture resource. The resource must be created with the <strong>bind flags</strong> that specify that the resource is a render target and a shader resource. </p> </dd> + + + <dd> <p> Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? <strong>Note</strong>?? Starting with Windows?8, we recommend that you enable resource data sharing between two or more Direct3D devices by using a combination of the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags instead. ? </dd> + + + <dd> <p> Sets a resource to be a cube texture created from a Texture2DArray that contains 6 textures. </p> </dd> + + + <dd> <p>Enables instancing of {{GPU}}-generated content.</p> </dd> + + + <dd> <p> Enables a resource as a byte address buffer. </p> </dd> + + + <dd> <p> Enables a resource as a structured buffer. </p> </dd> + + + <dd> <p> Enables a resource with {{MIP}} map clamping for use with <strong>{{ID3D11DeviceContext::SetResourceMinLOD}}</strong>. </p> </dd> + + + <dd> <p>Enables the resource to be synchronized by using the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}}. The following Direct3D?11 resource creation {{APIs}}, that take <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong> parameters, have been extended to support the new flag.</p> <ul> <li> <strong>{{ID3D11Device::CreateTexture1D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture2D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateTexture3D}}</strong> </li> <li> <strong>{{ID3D11Device::CreateBuffer}}</strong> </li> </ul> <p>If you call any of these methods with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag set, the interface returned will support the <strong>{{IDXGIKeyedMutex}}</strong> interface. You can retrieve a reference to the <strong>{{IDXGIKeyedMutex}}</strong> interface from the resource by using <strong>{{IUnknown::QueryInterface}}</strong>. The <strong>{{IDXGIKeyedMutex}}</strong> interface implements the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> and <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> {{APIs}} to synchronize access to the surface. The device that creates the surface, and any other device that opens the surface by using <strong>OpenSharedResource</strong>, must call <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> before they issue any rendering commands to the surface. When those devices finish rendering, they must call <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong>. </p> <p><strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> are mutually exclusive. </p> <p><strong>{{WARP}}</strong> and <strong>{{REF}}</strong> devices do not support shared resources. If you try to create a resource with this flag on either a <strong>{{WARP}}</strong> or <strong>{{REF}}</strong> device, the create method will return an <strong>{{E_OUTOFMEMORY}}</strong> error code. </p> <strong>Note</strong>?? Starting with Windows?8, <strong>{{WARP}}</strong> devices fully support shared resources. ? </dd> + + + <dd> <p> Enables a resource compatible with {{GDI}}. You must set the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag on surfaces that you use with {{GDI}}. Setting the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag allows {{GDI}} rendering on the surface via <strong>{{IDXGISurface1::GetDC}}</strong>. </p> <p>Consider the following programming tips for using {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} when you create a texture or use that texture in a swap chain:</p> <ul> <li>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}} and {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} are mutually exclusive. Therefore, do not use them together.</li> <li> You must bind the texture as a render target for the output-merger stage. For example, set the {{D3D11_BIND_RENDER_TARGET}} flag in the <strong>BindFlags</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure. </li> <li> You must set the maximum number of {{MIP}} map levels to 1. For example, set the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to 1. </li> <li> You must specify that the texture requires read and write access by the {{GPU}}. For example, set the <strong>Usage</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to {{D3D11_USAGE_DEFAULT}}. </li> <li> <p>You must set the texture format to one of the following types. </p> <ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_TYPELESS}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> </ul> For example, set the <strong>Format</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to one of these types. </li> <li> You cannot use {{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}} with multisampling. Therefore, set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure to 1. Then, set the <strong>SampleDesc</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure to this <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </li> </ul> </dd> + + + <dd> <p>Set this flag to enable the use of {{NT}} {{HANDLE}} values when you create a shared resource. By enabling this flag, you deprecate the use of existing {{HANDLE}} values.</p> <p> When you use this flag, you must combine it with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag by using a bitwise {{OR}} operation. The resulting value specifies a new shared resource type that directs the runtime to use {{NT}} {{HANDLE}} values for the shared resource. The runtime then must confirm that the shared resource works on all hardware at the specified feature level. </p> <p>Without this flag set, the runtime does not strictly validate shared resource parameters (that is, formats, flags, usage, and so on). When the runtime does not validate shared resource parameters, behavior of much of the Direct3D {{API}} might be undefined and might vary from driver to driver. </p> <p><strong>Direct3D 11 and earlier:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource might contain protected content; therefore, the operating system should use the resource only when the driver and hardware support content protection. If the driver and hardware do not support content protection and you try to create a resource with this flag, the resource creation fails.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the operating system restricts access to the shared surface. You can use this flag together with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Set this flag to indicate that the driver restricts access to the shared surface. You can use this flag in conjunction with the {{D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE}} flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is guarded. Such a resource is returned by the <strong>{{IDCompositionSurface::BeginDraw}}</strong> (DirectComposition) and <strong>{{ISurfaceImageSourceNative::BeginDraw}}</strong> (Windows Runtime) {{APIs}}. For these {{APIs}}, you provide a region of interest ({{ROI}}) on a surface to update. This surface isn't compatible with multiple render targets ({{MRT}}).</p> <p>A guarded resource automatically restricts all writes to the region that is related to one of the preceding {{APIs}}. Additionally, the resource enforces access to the {{ROI}} with these restrictions:</p> <ul> <li> Copy operations from the resource by using <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> are restricted to only copy from the {{ROI}}. </li> <li>When a guarded resource is set as a render target, it must be the only target.</li> </ul> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tile pool.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Set this flag to indicate that the resource is a tiled resource.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Set this flag to indicate that the resource should be created such that it will be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li> This flag cannot be used with the following <strong>{{D3D11_USAGE}}</strong> values:<ul> <li><strong>{{D3D11_USAGE_DYNAMIC}}</strong></li> <li><strong>{{D3D11_USAGE_STAGING}}</strong></li> </ul> </li> <li> This flag cannot be used with the following <strong>{{D3D11_BIND_FLAG}}</strong> values.<ul> <li><strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong></li> <li><strong>{{D3D11_BIND_INDEX_BUFFER}}</strong></li> </ul> </li> <li>No {{CPU}} access flags can be specified.</li> </ul> <strong>Note</strong>??<p>Creating a texture using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection.</p> ? <p><strong>Note</strong>?? This enumeration value is supported starting with Windows?10. </p> </dd> + + + + + <p>Identifies a resource to be accessed for reading and writing by the {{CPU}}. Applications may combine one or more of these flags.</p> + <p>This enumeration is used in <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>These remarks are divided into the following topics:</p><p> </p><ul> <li>{{Meaning}}</li> <li>{{Common}}</li> </ul> + + + <dd> <p>Resource is mapped for reading. The resource must have been created with read access (see <strong>{{D3D11_CPU_ACCESS_READ}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for reading and writing. The resource must have been created with read and write access (see <strong>{{D3D11_CPU_ACCESS_READ}} and {{D3D11_CPU_ACCESS_WRITE}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access and dynamic usage (See <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong> and <strong>{{D3D11_USAGE_DYNAMIC}}</strong>).</p> </dd> + + + <dd> <p>Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Cannot be used on a resource created with the <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong> flag.</p> <strong>Note</strong>??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>. ? </dd> + + + + + <p>Specifies how the {{CPU}} should respond when an application calls the <strong>{{ID3D11DeviceContext::Map}}</strong> method on a resource that is being used by the {{GPU}}.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>{{D3D11_MAP_FLAG_DO_NOT_WAIT}} cannot be used with <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong> or <strong>{{D3D11_MAP_WRITE_NOOVERWRITE}}</strong>.</p> + + + + <p>Option(s) for raising an error to a non-continuable exception.</p> + <p>These flags are used by <strong>{{ID3D11Device::GetExceptionMode}}</strong> and <strong>{{ID3D11Device::SetExceptionMode}}</strong>. Use 0 to indicate no flags; multiple flags can be logically {{OR}}'ed together.</p> + + + <dd> <p>Raise an internal driver error to a non-continuable exception.</p> </dd> + + + + + <p> Specifies the parts of the depth stencil to clear. </p> + <p> These flags are used when calling <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong>; the flags can be combined with a bitwise {{OR}}. </p> + + + <dd> <p>Clear the depth buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + <dd> <p>Clear the stencil buffer, using fast clear if possible, then place the resource in a compressed state.</p> </dd> + + + + + <p>Comparison options.</p> + <p>A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for a depth-stencil buffer (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>), depth-stencil operations (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>), or sampler state (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identify the portion of a depth-stencil buffer for writing depth data.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>The stencil operations that can be performed during depth-stencil testing.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Blend factors, which modulate values for the pixel shader and render target.</p> + <p>Blend operations are specified in a <strong>blend description</strong>.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>{{RGB}} or alpha blending operation.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>blend description</strong>. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identify which components of each pixel of a render target are writable during blending.</p> + <p>These flags can be combined with a bitwise {{OR}}.</p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>The different faces of a cube texture.</p> + + + <dd> <p>Positive X face.</p> </dd> + + + <dd> <p>Negative X face.</p> </dd> + + + <dd> <p>Positive Y face.</p> </dd> + + + <dd> <p>Negative Y face.</p> </dd> + + + <dd> <p>Positive Z face.</p> </dd> + + + <dd> <p>Negative Z face.</p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p>This enumeration is used by <strong>{{D3D11_BUFFEREX_SRV}}</strong> </p> + + + <dd> <p>View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Depth-stencil view options.</p> + <p>This enumeration is used by <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>.</p><p>Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have a read/write conflicts between separate views.</p> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + + + <dd> <p>Resource contains raw, unstructured data. Requires the {{UAV}} format to be {{DXGI_FORMAT_R32_TYPELESS}}. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>Allow data to be appended to the end of the buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> flag must also be used for any view that will be used as a AppendStructuredBuffer or a ConsumeStructuredBuffer. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + <dd> <p>Adds a counter to the unordered-access-view buffer. <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> can only be used on a {{UAV}} that is a {{RWStructuredBuffer}} and it enables the functionality needed for the <strong>IncrementCounter</strong> and <strong>DecrementCounter</strong> methods in {{HLSL}}. Requires the {{UAV}} format to be {{DXGI_FORMAT_UNKNOWN}}.</p> </dd> + + + + + <p>Filtering options during texture sampling.</p> + <strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>{{HLSL}} texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td>sample</td><td>samplecmp or samplecmplevelzero</td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following {{DXGI}} formats: {{R32_FLOAT_X8X24_TYPELESS}}, {{R32_FLOAT}}, {{R24_UNORM_X8_TYPELESS}}, {{R16_UNORM}}.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as {{D3D11_FILTER_ANISOTROPIC}} and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Types of magnification or minification sampler filters.</p> + + + <dd> <p>Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture. </p> </dd> + + + <dd> <p>Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p> Specifies the type of sampler filter reduction. </p> + <p> This enum is used by the <strong>{{D3D11_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates standard (default) filter reduction. </p> </dd> + + + <dd> <p> Indicates a comparison filter reduction. </p> </dd> + + + <dd> <p> Indicates minimum filter reduction. </p> </dd> + + + <dd> <p> Indicates maximum filter reduction. </p> </dd> + + + + + <p>Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.</p> + + + <dd> <p>Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times.</p> </dd> + + + <dd> <p>Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.</p> </dd> + + + <dd> <p>Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D11_SAMPLER_DESC}}</strong> or {{HLSL}} code.</p> </dd> + + + <dd> <p>Similar to {{D3D11_TEXTURE_ADDRESS_MIRROR}} and {{D3D11_TEXTURE_ADDRESS_CLAMP}}. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.</p> </dd> + + + + + <p>Which resources are supported for a given format and given device (see <strong>{{ID3D11Device::CheckFormatSupport}}</strong> and <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>).</p> + + + + <p> Unordered resource support options for a compute shader resource (see <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>). </p> + + + + <p>Optional flags that control the behavior of <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + + + + <p>Query types.</p> + <p> Create a query with <strong>{{ID3D11Device::CreateQuery}}</strong>. </p> + + + <dd> <p> Determines whether or not the {{GPU}} is finished processing commands. When the {{GPU}} is finished processing commands <strong>{{ID3D11DeviceContext::GetData}}</strong> will return {{S_OK}}, and pData will point to a {{BOOL}} with a value of <strong>{{TRUE}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Get the number of samples that passed the depth and stencil tests in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. If a depth or stencil test is disabled, then each of those tests will be counted as a pass. </p> </dd> + + + <dd> <p> Get a timestamp value where <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{UINT64}}. This kind of query is only useful if two timestamp queries are done in the middle of a {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the {{D3D11_QUERY_TIMESTAMP_DISJOINT}} query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. When using this type of query, <strong>{{ID3D11DeviceContext::Begin}}</strong> is disabled. </p> </dd> + + + <dd> <p> Determines whether or not a {{D3D11_QUERY_TIMESTAMP}} is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_TIMESTAMP_DISJOINT}}</strong>. This type of query should only be invoked once per frame or less. </p> </dd> + + + <dd> <p> Get pipeline statistics, such as the number of pixel shader invocations in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong>. </p> </dd> + + + <dd> <p> Similar to {{D3D11_QUERY_OCCLUSION}}, except <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} indicating whether or not any samples passed the depth and stencil tests - <strong>{{TRUE}}</strong> meaning at least one passed, <strong>{{FALSE}}</strong> meaning none passed. </p> </dd> + + + <dd> <p> Get streaming output statistics, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not any of the streaming output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 0, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 0 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 1, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 1 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 2, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 2 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + <dd> <p> Get streaming output statistics for stream 3, such as the number of primitives streamed out in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> will return a <strong>{{D3D11_QUERY_DATA_SO_STATISTICS}}</strong> structure. </p> </dd> + + + <dd> <p> Determines whether or not the stream 3 output buffers overflowed in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. <strong>{{ID3D11DeviceContext::GetData}}</strong> returns a {{BOOL}} - <strong>{{TRUE}}</strong> meaning there was an overflow, <strong>{{FALSE}}</strong> meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an {{SO_STATISTICS}} query so that when an overflow occurs the {{SO_STATISTIC}} query will let the application know how much memory was needed to prevent an overflow. </p> </dd> + + + + + <p>Flags that describe miscellaneous query behavior.</p> + <p>This flag is part of a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> + + + <dd> <p>Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via <strong>{{ID3D11DeviceContext::GetData}}</strong> when using this flag.</p> </dd> + + + + + <p>Options for performance counters.</p> + <p>Independent hardware vendors may define their own set of performance counters for their devices, by giving the enumeration value a number that is greater than the value for {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}.</p><p>This enumeration is used by <strong>{{D3D11_COUNTER_DESC}}</strong> and <strong>{{D3D11_COUNTER_INFO}}</strong>.</p> + + + <dd> <p>Define a performance counter that is dependent on the hardware device.</p> </dd> + + + + + <p>Data type of a performance counter.</p> + <p>These flags are an output parameter in <strong>{{ID3D11Device::CheckCounter}}</strong>.</p> + + + <dd> <p>32-bit floating point.</p> </dd> + + + <dd> <p>16-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>64-bit unsigned integer.</p> </dd> + + + + + <p>Specifies a multi-sample pattern type.</p> + <p>An app calls <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> to get the number of quality levels available during multisampling. A 0 quality level means the hardware does not support multisampling for the particular format. If the number of quality levels is greater than 0 and the hardware supports the fixed sample patterns for the sample count, the app can request the fixed patterns by specifying quality level as either <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> or <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong>. The app can call <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to check for support of the standard fixed patterns. If the hardware only supports the fixed patterns but no additional vendor-specific patterns, the runtime can report the number of quality levels as 1, and the hardware can pretend 0 quality level behaves the same as quality level equal to {{D3D11_STANDARD_MULTISAMPLE_PATTERN}}.</p><p>The runtime defines the following standard sample patterns for 1(trivial), 2, 4, 8, and 16 sample counts. Hardware must support 1, 4, and 8 sample counts. Hardware vendors can expose more sample counts beyond these. However, if vendors support 2, 4(required), 8(required), or 16, they must also support the corresponding standard pattern or center pattern for each of those sample counts.</p><p></p><p></p><p></p> + + + <dd> <p>Pre-defined multi-sample patterns required for Direct3D?11 and Direct3D?10.1 hardware.</p> </dd> + + + <dd> <p>Pattern where all of the samples are located at the pixel center.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Direct3D 11 feature options.</p> + <p> This enumeration is used when querying a driver about support for these features by calling <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. Each value in this enumeration has a corresponding data structure that is required to be passed to the <em>pFeatureSupportData</em> parameter of <strong>{{ID3D11Device::CheckFeatureSupport}}</strong>. </p> + + + <dd> <p> The driver supports multithreading. To see an example of testing a driver for multithread support, see How To: Check for Driver Support. Refer to <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong>.</p> </dd> + + + <dd> <p>Supports the use of the double-precision shaders in {{HLSL}}. Refer to <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports the formats in <strong>{{D3D11_FORMAT_SUPPORT2}}</strong>. Refer to <strong>{{D3D11_FEATURE_DATA_FORMAT_SUPPORT2}}</strong>.</p> </dd> + + + <dd> <p>Supports compute shaders and raw and structured buffers. Refer to <strong>{{D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}}</strong>.</p> </dd> + + + <dd> <p>Supports Direct3D 11.1 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports specific adapter architecture. Refer to <strong>{{D3D11_FEATURE_DATA_ARCHITECTURE_INFO}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports minimum precision of shaders. For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision. Refer to <strong>{{D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p> Supports Direct3D?9 shadowing feature. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 instancing options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p>Supports Direct3D 11.2 marker options. Refer to <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D?9 feature options, which includes the Direct3D?9 shadowing feature and instancing support. Refer to <strong>{{D3D11_FEATURE_DATA_D3D9_OPTIONS1}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.2.</p> </dd> + + + <dd> <p> Supports Direct3D 11.3 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.3.</p> </dd> + + + <dd> <p> Supports Direct3D 11.4 conservative rasterization feature options. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + <dd> <p> Supports {{GPU}} virtual addresses. Refer to <strong>{{D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>.</p> </dd> + + + <dd> <p> Supports a single boolean for {{NV12}} shared textures. Refer to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS4}}</strong>.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.4.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Values that specify minimum precision levels at shader stages.</p> + + + <dd> <p>Minimum precision level is 10-bit.</p> </dd> + + + <dd> <p>Minimum precision level is 16-bit.</p> </dd> + + + + + <p>Indicates the tier level at which tiled resources are supported.</p> + + + <dd> <p>Tiled resources are not supported.</p> </dd> + + + <dd> <p> Tier_1 tiled resources are supported.</p> <p> The device supports calls to <strong>CreateTexture2D</strong> and so on with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. </p> <p> The device supports calls to <strong>CreateBuffer</strong> with the <strong>{{D3D11_RESOURCE_MISC_TILE_POOL}}</strong> flag. </p> <p> If you access tiles (read or write) that are <strong>{{NULL}}</strong>-mapped, you get undefined behavior, which includes device-removed. Apps can map all tiles to a single "default" tile to avoid this condition. </p> </dd> + + + <dd> <p> Tier_2 tiled resources are supported. </p> <p> Superset of Tier_1 functionality, which includes this additional support: </p> <ul> <li> On Tier_1, if the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. On Tier_2, this guarantee is expanded to include mipmap levels whose size is at least one standard tile shape. For more info, see <strong>{{D3D11_PACKED_MIP_DESC}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> </dd> + + + <dd> <p> Tier_3 tiled resources are supported. </p> <p> Superset of Tier_2 functionality, Tier 3 is essentially Tier 2 but with the additional support of Texture3D for Tiled Resources.</p> </dd> + + + + + <p>Specifies if the hardware and driver support conservative rasterization and at what tier level.</p> + + + <dd> <p>Conservative rasterization isn't supported.</p> </dd> + + + <dd> <p>Tier_1 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_2 conservative rasterization is supported.</p> </dd> + + + <dd> <p>Tier_3 conservative rasterization is supported.</p> </dd> + + + + + <p>Describes the level of support for shader caching in the current graphics driver.</p> + <p>This enum is used by the <strong>{{D3D_FEATURE_DATA_SHADER_CACHE}}</strong> structure.</p> + + + <dd> <p>Indicates that the driver does not support shader caching.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders in memory during the current run of the application.</p> </dd> + + + <dd> <p>Indicates that the driver supports an {{OS}}-managed shader cache that stores compiled shaders on disk to accelerate future runs of the application.</p> </dd> + + + + + <p>Specifies a type of compressed buffer for decoding.</p> + + + <dd> <p>Picture decoding parameter buffer. +</p> </dd> + + + <dd> <p>Macroblock control command buffer. +</p> </dd> + + + <dd> <p>Residual difference block data buffer. +</p> </dd> + + + <dd> <p>Deblocking filter control command buffer. +</p> </dd> + + + <dd> <p>Inverse quantization matrix buffer. +</p> </dd> + + + <dd> <p>Slice-control buffer. +</p> </dd> + + + <dd> <p>Bitstream data buffer. +</p> </dd> + + + <dd> <p>Motion vector buffer. +</p> </dd> + + + <dd> <p>Film grain synthesis data buffer. +</p> </dd> + + + + + <p>Specifies how a video format can be used for video processing.</p> + + + <dd> <p>The format can be used as the input to the video processor.</p> </dd> + + + <dd> <p>The format can be used as the output from the video processor.</p> </dd> + + + + + <p>Defines video processing capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor can blend video content in linear color space. Most video content is gamma corrected, resulting in nonlinear values. This capability flag means that the video processor converts colors to linear space before blending, which produces better results.</p> </dd> + + + <dd> <p>The video processor supports the xvYCC color space for {{YCbCr}} data. </p> </dd> + + + <dd> <p>The video processor can perform range conversion when the input and output are both {{RGB}} but use different color ranges (0-255 or 16-235, for 8-bit {{RGB}}). </p> </dd> + + + <dd> <p>The video processor can apply a matrix conversion to {{YCbCr}} values when the input and output are both {{YCbCr}}. For example, the driver can convert colors from {{BT}}.601 to {{BT}}.709. </p> </dd> + + + <dd> <p>The video processor supports {{YUV}} nominal range . </p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines features that a Microsoft Direct3D?11 video processor can support. </p> + + + <dd> <p>The video processor can set alpha values on the output pixels. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> </dd> + + + <dd> <p>The video processor can downsample the video output. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong>.</p> </dd> + + + <dd> <p>The video processor can perform luma keying. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamLumaKey}}</strong>.</p> </dd> + + + <dd> <p>The video processor can apply alpha values from color palette entries. </p> </dd> + + + <dd> <p>The driver does not support full video processing capabilities. If this capability flag is set, the video processor has the following limitations:</p> <ul> <li>A maximum of two streams are supported:<ul> <li>The first stream must be either {{NV12}} or {{YUY2}}.</li> <li>The second stream must be {{AYUV}}, {{AI44}}, or {{IA44}}.</li> </ul> </li> <li>Image adjustment (proc amp) controls are applied to the entire video processing blit, rather than per stream.</li> <li>Support for per-stream planar alpha is not reliable. (Per-pixel alpha is supported, however.)</li> </ul> </dd> + + + <dd> <p>The video processor can support 3D stereo video. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong>.</p> <p>All drivers setting this caps must support the following stereo formats: <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL}}</strong>, <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL}}</strong>, and <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>.</p> </dd> + + + <dd> <p>The driver can rotate the input data either 90, 180, or 270 degrees clockwise as part of the video processing operation.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamAlpha</strong> call.</p> </dd> + + + <dd> <p>The driver supports the <strong>VideoProcessorSetStreamPixelAspectRatio</strong> call.</p> </dd> + + + + + <p>Defines image filter capabilities for a Microsoft Direct3D?11 video processor.</p> + <p>These capability flags indicate support for the image filters defined by the <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> enumeration. To apply a particular filter, call the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamFilter}}</strong> method.</p> + + + <dd> <p>The video processor can adjust the brightness level. </p> </dd> + + + <dd> <p>The video processor can adjust the contrast level. </p> </dd> + + + <dd> <p>The video processor can adjust hue. </p> </dd> + + + <dd> <p>The video processor can adjust the saturation level. </p> </dd> + + + <dd> <p>The video processor can perform noise reduction. </p> </dd> + + + <dd> <p>The video processor can perform edge enhancement. </p> </dd> + + + <dd> <p>The video processor can perform anamorphic scaling. Anamorphic scaling can be used to stretch 4:3 content to a widescreen 16:9 aspect ratio. </p> </dd> + + + <dd> <p>For stereo 3D video, the video processor can adjust the offset between the left and right views, allowing the user to reduce potential eye strain.</p> </dd> + + + + + <p>Defines capabilities related to input formats for a Microsoft Direct3D?11 video processor.</p> + <p>These flags define video processing capabilities that usually are not needed, and that video devices are therefore not required to support.</p><p> The first three flags relate to {{RGB}} support for functions that are normally applied to {{YCbCr}} video: deinterlacing, color adjustment, and luma keying. A device that supports these functions for {{YCbCr}} is not required to support them for {{RGB}} input. Supporting {{RGB}} input for these functions is an additional capability, reflected by these constants. Note that the driver might convert the input to another color space, perform the indicated function, and then convert the result back to {{RGB}}. </p><p>Similarly, a device that supports deinterlacing is not required to support deinterlacing of palettized formats. This capability is indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED}}</strong> flag.</p> + + + <dd> <p>The video processor can deinterlace an input stream that contains interlaced {{RGB}} video. </p> </dd> + + + <dd> <p>The video processor can perform color adjustment on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can perform luma keying on {{RGB}} video.</p> </dd> + + + <dd> <p>The video processor can deinterlace input streams with palettized color formats.</p> </dd> + + + + + <p>Specifies the automatic image processing capabilities of the video processor.</p> + + + <dd> <p>Denoise.</p> </dd> + + + <dd> <p>Deringing.</p> </dd> + + + <dd> <p>Edge enhancement.</p> </dd> + + + <dd> <p>Color correction.</p> </dd> + + + <dd> <p>Flesh-tone mapping.</p> </dd> + + + <dd> <p>Image stabilization.</p> </dd> + + + <dd> <p>Enhanced image resolution.</p> </dd> + + + <dd> <p>Anamorphic scaling.</p> </dd> + + + + + <p>Defines stereo 3D capabilities for a Microsoft Direct3D?11 video processor.</p> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED}}</strong> format.</p> </dd> + + + <dd> <p>The video processor supports the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD}}</strong> format.</p> </dd> + + + <dd> <p>The video processor can flip one or both views. For more information, see <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong>.</p> </dd> + + + + + <p>Specifies video processing capabilities that relate to deinterlacing, inverse telecine ({{IVTC}}), and frame-rate conversion.</p> + + + <dd> <p>The video processor can perform blend deinterlacing. </p> <p>In blend deinterlacing, the two fields from an interlaced frame are blended into a single progressive frame. A video processor uses blend deinterlacing when it deinterlaces at half rate, as when converting 60i to 30p. Blend deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform bob deinterlacing.</p> <p>In bob deinterlacing, missing field lines are interpolated from the lines above and below. Bob deinterlacing does not require reference frames.</p> </dd> + + + <dd> <p>The video processor can perform adaptive deinterlacing.</p> <p>Adaptive deinterlacing uses spatial or temporal interpolation, and switches between the two on a field-by-field basis, depending on the amount of motion. If the video processor does not receive enough reference frames to perform adaptive deinterlacing, it falls back to bob deinterlacing.</p> </dd> + + + <dd> <p>The video processor can perform motion-compensated deinterlacing. </p> <p>Motion-compensated deinterlacing uses motion vectors to recreate missing lines. If the video processor does not receive enough reference frames to perform motion-compensated deinterlacing, it falls back to bob deinterlacing. </p> </dd> + + + <dd> <p>The video processor can perform inverse telecine ({{IVTC}}). </p> <p>If the video processor supports this capability, the <strong>{{ITelecineCaps}}</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure specifies which {{IVTC}} modes are supported. </p> </dd> + + + <dd> <p>The video processor can convert the frame rate by interpolating frames. </p> </dd> + + + + + <p>Specifies the inverse telecine ({{IVTC}}) capabilities of a video processor. </p> + + + <dd> <p>The video processor can reverse 3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:3:3:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 3:2:3:2:2 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 5:5 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 6:4 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 8:7 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.</p> </dd> + + + <dd> <p>The video processor can reverse other telecine modes not listed here.</p> </dd> + + + + + <p>Contains flags that describe content-protection capabilities.</p> + + + <dd> <p>The content protection is implemented in software by the driver.</p> </dd> + + + <dd> <p>The content protection is implemented in hardware by the {{GPU}}. +</p> </dd> + + + <dd> <p>Content protection is always applied to a protected surface, regardless of whether the application explicitly enables protection.</p> </dd> + + + <dd> <p>The driver can use partially encrypted buffers. If this capability is not present, the entire buffer must be either encrypted or clear.</p> </dd> + + + <dd> <p>The driver can encrypt data using a separate content key that is encrypted using the session key.</p> </dd> + + + <dd> <p>The driver can refresh the session key without renegotiating the key.</p> </dd> + + + <dd> <p>The driver can read back encrypted data from a protected surface. For more information, see <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong>.</p> </dd> + + + <dd> <p>The driver requires a separate key to read encrypted data from a protected surface.</p> </dd> + + + <dd> <p>If the encryption type is <strong>{{D3DCRYPTOTYPE_AES128_CTR}}</strong>, the application must use a sequential count in the <strong>{{D3D11_AES_CTR_IV}}</strong> structure.</p> </dd> + + + <dd> <p>The driver supports encrypted slice data, but does not support any other encrypted data in the compressed buffer. The caller should not encrypt any data within the buffer other than the slice data.</p> <strong>Note</strong>??The driver should only report this flag for the specific profiles that have this limitation. ? </dd> + + + <dd> <p>The driver can copy encrypted data from one resource to another, decrypting the data as part of the process.</p> </dd> + + + <dd> <p>The hardware supports the protection of specific resources. This means that:</p> <ul> <li>The contents of a protected allocation can never be read by the {{CPU}}.</li> <li>The hardware can ensure a protected resource cannot be copied to an unprotected resource.</li> </ul> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Physical pages of a protected resource can be evicted and potentially paged to disk in low memory conditions without losing the contents of the resource when paged back in. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The hardware supports an automatic teardown mechanism that could trigger hardware keys or protected content to become lost in some conditions. The application can register to be notified when these events occur.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>The secure environment is tightly coupled with the {{GPU}} and an <strong>{{ID3D11CryptoSession}}</strong> should be used for communication between the user mode {{DRM}} component and the secure execution environment.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + + + <p>Identifies a video processor filter.</p> + + + <dd> <p>Brightness filter.</p> </dd> + + + <dd> <p>Contrast filter.</p> </dd> + + + <dd> <p>Hue filter.</p> </dd> + + + <dd> <p>Saturation filter.</p> </dd> + + + <dd> <p>Noise reduction filter.</p> </dd> + + + <dd> <p>Edge enhancement filter.</p> </dd> + + + <dd> <p>Anamorphic scaling filter.</p> </dd> + + + <dd> <p>Stereo adjustment filter. When stereo 3D video is enabled, this filter adjusts the offset between the left and right views, allowing the user to reduce potential eye strain. </p> <p>The filter value indicates the amount by which the left and right views are adjusted. A positive value shifts the images away from each other: the left image toward the left, and the right image toward the right. A negative value shifts the images in the opposite directions, closer to each other.</p> </dd> + + + + + <p>Describes how a video stream is interlaced.</p> + + + <dd> <p>Frames are progressive.</p> </dd> + + + <dd> <p>Frames are interlaced. The top field of each frame is displayed first. </p> </dd> + + + <dd> <p>Frame are interlaced. The bottom field of each frame is displayed first.</p> </dd> + + + + + <p>Specifies the intended use for a video processor.</p> + + + <dd> <p>Normal video playback. The graphics driver should expose a set of capabilities that are appropriate for real-time video playback. </p> </dd> + + + <dd> <p>Optimal speed. The graphics driver should expose a minimal set of capabilities that are optimized for performance. </p> <p>Use this setting if you want better performance and can accept some reduction in video quality. For example, you might use this setting in power-saving mode or to play video thumbnails. </p> </dd> + + + <dd> <p>Optimal quality. The grahics driver should expose its maximum set of capabilities.</p> <p>Specify this setting to get the best video quality possible. It is appropriate for tasks such as video editing, when quality is more important than speed. It is not appropriate for real-time playback. </p> </dd> + + + + + <p>Specifies values for the luminance range of {{YUV}} data.</p> + + + <dd> <p>Driver defaults are used, which should be Studio luminance range [16-235],</p> </dd> + + + <dd> <p>Studio luminance range [16-235]</p> </dd> + + + <dd> <p>Full luminance range [0-255]</p> </dd> + + + + + <p>Specifies the alpha fill mode for video processing.</p> + + + <dd> <p>Alpha values inside the target rectangle are set to opaque. </p> </dd> + + + <dd> <p>Alpha values inside the target rectangle are set to the alpha value specified in the background color. To set the background color, call the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor}}</strong> method.</p> </dd> + + + <dd> <p>Existing alpha values remain unchanged in the output surface.</p> </dd> + + + <dd> <p>Alpha values are taken from an input stream, scaled, and copied to the corresponding destination rectangle for that stream. The input stream is specified in the <em>StreamIndex</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong> method. </p> <p>If the input stream does not have alpha data, the video processor sets the alpha values in the target rectangle to opaque. If the input stream is disabled or the source rectangle is empty, the alpha values in the target rectangle are not modified.</p> </dd> + + + + + <p>Specifies the rate at which the video processor produces output frames from an input stream.</p> + + + <dd> <p>The output is the normal frame rate. </p> </dd> + + + <dd> <p>The output is half the frame rate. </p> </dd> + + + <dd> <p>The output is a custom frame rate.</p> </dd> + + + + + <p>Specifies the layout in memory of a stereo 3D video frame.</p> + <p>This enumeration designates the two stereo views as "frame 0" and "frame 1". The <em>LeftViewFrame0</em> parameter of the <strong>VideoProcessorSetStreamStereoFormat</strong> method specifies which view is the left view, and which is the right view.</p><p>For packed formats, if the source rectangle clips part of the surface, the driver interprets the rectangle in logical coordinates relative to the stereo view, rather than absolute pixel coordinates. The result is that frame 0 and frame 1 are clipped proportionately.</p><p>To query whether the device supports stereo 3D video, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check for the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> flag in the <strong>FeatureCaps</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. If this capability flag is present, it means that the driver supports all of the stereo formats that are not listed as optional. To find out which optional formats are supported, call <strong>GetVideoProcessorCaps</strong> and check the <strong>StereoCaps</strong> member of the structure.</p> + + + <dd> <p>The sample does not contain stereo data. If the stereo format is not specified, this value is the default.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed side-by-side, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed top-to-bottom, as shown in the following diagram.</p> <p></p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are placed in separate resources or in separate texture array elements within the same resource.</p> <p>All drivers that support stereo video must support this format.</p> </dd> + + + <dd> <p>The sample contains non-stereo data. However, the driver should create a left/right output of this sample using a specified offset. The offset is specified in the <em>MonoOffset</em> parameter of the <strong>{{ID3D11VideoContext::VideoProcessorSetStreamStereoFormat}}</strong> method. </p> <p>This format is primarily intended for subtitles and other subpicture data, where the entire sample is presented on the same plane.</p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved rows, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed into interleaved columns, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + <dd> <p>Frame 0 and frame 1 are packed in a checkerboard format, as shown in the following diagram.</p> <p></p> <p>Support for this stereo format is optional.</p> </dd> + + + + + <p>For stereo 3D video, specifies whether the data in frame 0 or frame 1 is flipped, either horizontally or vertically. </p> + + + <dd> <p>Neither frame is flipped.</p> </dd> + + + <dd> <p>The data in frame 0 is flipped.</p> </dd> + + + <dd> <p>The data in frame 1 is flipped.</p> </dd> + + + + + <p>Specifies the video rotation states.</p> + + + <dd> <p>The video is not rotated.</p> </dd> + + + <dd> <p>The video is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 180 degrees clockwise.</p> </dd> + + + <dd> <p>The video is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>Specifies the type of Microsoft Direct3D authenticated channel. </p> + + + <dd> <p>Direct3D?11 channel. This channel provides communication with the Direct3D runtime. </p> </dd> + + + <dd> <p>Software driver channel. This channel provides communication with a driver that implements content protection mechanisms in software.</p> </dd> + + + <dd> <p>Hardware driver channel. This channel provides communication with a driver that implements content protection mechanisms in the {{GPU}} hardware. </p> </dd> + + + + + <p>Specifies the type of process that is identified in the <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT}}</strong> structure.</p> + + + + <p>Specifies the type of I/O bus that is used by the graphics adapter.</p> + + + <dd> <p>Indicates a type of bus other than the types listed here. +</p> </dd> + + + <dd> <p>{{PCI}} bus. +</p> </dd> + + + <dd> <p>{{PCI}}-X bus. +</p> </dd> + + + <dd> <p>{{PCI}} Express bus. +</p> </dd> + + + <dd> <p>Accelerated Graphics Port ({{AGP}}) bus. +</p> </dd> + + + <dd> <p>The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as {{PCI}} or {{AGP}}) when it is transferred from main memory to the graphics adapter.</p> </dd> + + + <dd> <p>The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector. +</p> </dd> + + + <dd> <p>The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +</p> </dd> + + + <dd> <p>One of the <strong>{{D3D11_BUS_IMPL_MODIFIER_Xxx}}</strong> flags is set. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video decoding output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture. +</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor input view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + + + <p>Specifies how to access a resource that is used in a video processor output view.</p> + <p>This enumeration is used with the <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Not a valid value.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + + + <p>Describes parameters that are used to create a device.</p> + <p>Device creation flags are used by <strong>{{D3D11CreateDevice}}</strong> and <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p><p>An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple {{CPU}} cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use <strong>{{D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS}}</strong> to request that the runtime and video driver not create any additional threads that might interfere with the application.</p> + + + <dd> <p>Use this flag if your application will only call methods of Direct3D?11 interfaces from a single thread. By default, the <strong>{{ID3D11Device}}</strong> object is thread-safe. By using this flag, you can increase performance. However, if you use this flag and your application calls methods of Direct3D?11 interfaces from multiple threads, undefined behavior might result.</p> </dd> + + + <dd> <p>Creates a device that supports the debug layer. </p> <p>To use this flag, you must have {{D3D11}}*{{SDKLayers}}.dll installed; otherwise, device creation fails. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> </dd> + + + <dd> <strong>Note</strong>??This flag is not supported in Direct3D?11. ? </dd> + + + <dd> <p>Prevents multiple threads from being created. When this flag is used with a Windows Advanced Rasterization Platform ({{WARP}}) device, no additional threads will be created by {{WARP}} and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.</p> </dd> + + + <dd> <p>Creates a device that supports {{BGRA}} formats (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> and <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>). All 10level9 and higher hardware with {{WDDM}} 1.1+ drivers support {{BGRA}} formats. </p> <strong>Note</strong>??Required for Direct2D interoperability with Direct3D resources. ? </dd> + + + <dd> <p>Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver. </p> <p>To use this flag, you must have {{D3D11_1SDKLayers}}.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get {{D3D11_1SDKLayers}}.dll, install the {{SDK}} for Windows?8.</p> <p>If you use this flag and the current driver does not support shader debugging, device creation fails. Shader debugging requires a driver that is implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2).</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX {{SDK}}. We shipped the last version of the DirectX {{SDK}} in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.</p> <strong>Note</strong>??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app. ? <p><strong>Windows?8.1:??</strong>This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app; instead use <strong>{{ID3D11DeviceContext2::IsAnnotationEnabled}}</strong>. This flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app. </p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Use this flag if the device will produce {{GPU}} workloads that take more than two seconds to complete, and you want the operating system to allow them to successfully finish. If this flag is not set, the operating system performs timeout detection and recovery when it detects a {{GPU}} packet that took more than two seconds to execute. If this flag is set, the operating system allows such a long running packet to execute without resetting the {{GPU}}. We recommend not to set this flag if your device needs to be highly responsive so that the operating system can detect and recover from {{GPU}} timeouts. We recommend to set this flag if your device needs to perform time consuming background tasks such as compute, image recognition, and video encoding to allow such tasks to successfully finish.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + <dd> <p>Forces the creation of the Direct3D device to fail if the display driver is not implemented to the {{WDDM}} for Windows?8 ({{WDDM}} 1.2). When the display driver is not implemented to {{WDDM}} 1.2, only a Direct3D device that is created with feature level 9.1, 9.2, or 9.3 supports video; therefore, if this flag is set, the runtime creates the Direct3D device only for feature level 9.1, 9.2, or 9.3. We recommend not to specify this flag for applications that want to favor Direct3D capability over video. If feature level 10 and higher is available, the runtime will use that feature level regardless of video support.</p> <p>If this flag is set, device creation on the Basic Render Device ({{BRD}}) will succeed regardless of the {{BRD}}'s missing support for video decode. This is because the Media Foundation video stack operates in software mode on {{BRD}}. In this situation, if you force the video stack to create the Direct3D device twice (create the device once with this flag, next discover {{BRD}}, then again create the device without the flag), you actually degrade performance.</p> <p>If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_NULL}}</strong>, <strong>{{D3D_DRIVER_TYPE_REFERENCE}}</strong>, or <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong>, device creation fails at any feature level because none of the associated drivers provide video capability. If you attempt to create a Direct3D device with driver type <strong>{{D3D_DRIVER_TYPE_WARP}}</strong>, device creation succeeds to allow software fallback for video.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + <p>A description of a single element for the input-assembler stage.</p> + <p>An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling <strong>{{ID3D11Device::CreateInputLayout}}</strong>. For an example, see the "Create the Input-Layout Object" subtopic under the Getting Started with the Input-Assembler Stage topic.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name </p> <pre>matrix</pre> <p>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler (see input slot). Valid values are between 0 and 15, defined in {{D3D11}}.h.</p> </dd> + + + <dd> <p>Optional. Offset (in bytes) between each element. Use {{D3D11_APPEND_ALIGNED_ELEMENT}} for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>Identifies the input data class for a single input slot (see <strong>{{D3D11_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to {{D3D11_INPUT_PER_VERTEX_DATA}}).</p> </dd> + + + + + <p>Description of a vertex element in a vertex buffer in an output slot.</p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if <em>SemanticName</em> is <strong>{{NULL}}</strong> then <em>ComponentCount</em> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline (see <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>). The valid range for <em>OutputSlot</em> is 0 to 3.</p> </dd> + + + + + <p>Defines the dimensions of a viewport.</p> + <p>In all cases, <strong>Width</strong> and <strong>Height</strong> must be &gt;= 0 and <strong>TopLeftX</strong> + <strong>Width</strong> and <strong>TopLeftY</strong> + <strong>Height</strong> must be &lt;= {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p><table> <tr><td> <p>Viewport Sizes and Feature Level Support Differences between Direct3D 11 and Direct3D 10:</p> <p>The range for the minimum and maximum viewport size is dependent on the feature level defined by <strong>{{D3D_FEATURE_LEVEL}}</strong>.</p> <ul> <li>Direct3D 11 supports fractional viewports; the parameter types are floating-point numbers. The feature level, {{D3D_FEATURE_LEVEL_11_0}}, supports ({{D3D11_VIEWPORT_BOUNDS_MIN}}, {{D3D11_VIEWPORT_BOUNDS_MAX}}) values between (-32768, 32,767).</li> <li>Direct3D 10 does not support fractional viewports. The feature levels, {{D3D_FEATURE_LEVEL_10_1}} (or below), supports ({{D3D10_VIEWPORT_BOUNDS_MIN}}, {{D3D10_VIEWPORT_BOUNDS_MAX}}) values between (-16384, 16383).</li> </ul> </td></tr> </table><p>?</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + + + <dd> <p>X position of the left hand side of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Y position of the top of the viewport. Ranges between {{D3D11_VIEWPORT_BOUNDS_MIN}} and {{D3D11_VIEWPORT_BOUNDS_MAX}}.</p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p> Arguments for draw instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong>. </p> + + + <dd> <p> The number of vertices to draw. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Arguments for draw indexed instanced indirect. </p> + <p> The members of this structure serve the same purpose as the parameters of <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong>. </p> + + + <dd> <p> The number of indices read from the index buffer for each instance. </p> </dd> + + + <dd> <p> The number of instances to draw. </p> </dd> + + + <dd> <p> The location of the first index read by the {{GPU}} from the index buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading a vertex from the vertex buffer. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p>Defines a 3D box.</p> + <p>The following diagram shows a 3D box, where the origin is the left, front, top corner.</p><p></p><p>The values for <strong>right</strong>, <strong>bottom</strong>, and <strong>back</strong> are each one pixel past the end of the pixels that are included in the box region. That is, the values for <strong>left</strong>, <strong>top</strong>, and <strong>front</strong> are included in the box region while the values for right, bottom, and back are excluded from the box region. For example, for a box that is one pixel wide, (right - left) == 1; the box region includes the left pixel but not the right pixel.</p><p>Coordinates of a box are in bytes for buffers and in texels for textures.</p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box.</p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <p> Describes the blend state that you use in a call to <strong>{{ID3D11Device::CreateBlendState}}</strong> to create a blend-state object. </p> + <p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><strong>Note</strong>??<strong>{{D3D11_BLEND_DESC}}</strong> is identical to <strong>{{D3D10_BLEND_DESC1}}</strong>.?<p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p> + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering (see <strong>{{D3D11_FILL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Indicates triangles facing the specified direction are not drawn (see <strong>{{D3D11_CULL_MODE}}</strong>).</p> </dd> + + + <dd> <p>Determines if a triangle is front- or back-facing. If this parameter is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + + + <p>Specifies data for initializing a subresource.</p> + <p>This structure is used in calls to create buffers (<strong>{{ID3D11Device::CreateBuffer}}</strong>) and textures (<strong>{{ID3D11Device::CreateTexture1D}}</strong>, <strong>{{ID3D11Device::CreateTexture2D}}</strong>, and <strong>{{ID3D11Device::CreateTexture3D}}</strong>). If the resource you create does not require a system-memory pitch or a system-memory-slice pitch, you can use those members to pass size information, which might help you when you debug a problem with creating a resource.</p><p>A subresource is a single mipmap-level surface. You can pass an array of subresources to one of the preceding methods to create the resource. A subresource can be 1D, 2D, or 3D. How you set the members of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> depend on whether the subresource is 1D, 2D, or 3D.</p><p></p><dl> <dt>1D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the length of the 1D surface in bytes. <strong>pSysMem</strong> points to the start of the 1D surface. You don't need to set <strong>SysMemSlicePitch</strong>. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + (x * BytesPerPixel)</pre> </dd> <dt>2D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the size of the entire 2D surface in bytes. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> <dt>3D</dt> <dd> <p>You set <strong>SysMemPitch</strong> to the distance between any two adjacent pixels on different lines. You set <strong>SysMemSlicePitch</strong> to the distance between any two adjacent 2D slices of the 3D surface. To access a specific pixel, you use: </p> <pre>(const char*)pSysMem + SysMemSlicePitch*d + SysMemPitch*y + (x * BytesPerPixel)</pre> </dd> </dl><p>The x, y, and d values are 0-based indices and <strong>BytesPerPixel</strong> depends on the pixel format. For mipmapped 3D surfaces, the number of depth slices in each level is half the number of the previous level (minimum 1) and rounded down if dividing by two results in a non-whole number.</p><strong>Note</strong>??An application must not rely on <strong>SysMemPitch</strong> being exactly equal to the number of texels in a line times the size of a texel. In some cases, <strong>SysMemPitch</strong> will include padding to skip past additional data in a line. This could be padding for alignment or the texture could be a subsection of a larger texture. For example, the <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure could represent a 32 by 32 subsection of a 128 by 128 texture. The value for <strong>SysMemSlicePitch</strong> will reflect any padding included in <strong>SysMemPitch</strong>.? + + + <dd> <p>Pointer to the initialization data.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one line of a texture to the next line. System-memory pitch is used only for 2D and 3D texture data as it is has no meaning for the other resource types. Specify the distance from the first pixel of one 2D slice of a 3D texture to the first pixel of the next 2D slice in that texture in the <strong>SysMemSlicePitch</strong> member.</p> </dd> + + + <dd> <p>The distance (in bytes) from the beginning of one depth level to the next. System-memory-slice pitch is only used for 3D texture data as it has no meaning for the other resource types.</p> </dd> + + + + + <p>Provides access to subresource data.</p> + <p>This structure is used in a call to <strong>{{ID3D11DeviceContext::Map}}</strong>.</p><p>The values in these members tell you how much data you can view:</p><ul> <li><strong>pData</strong> points to row 0 and depth slice 0.</li> <li><strong>RowPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from row to row, where each row contains multiple pixels.</li> <li><strong>DepthPitch</strong> contains the value that the runtime adds to <strong>pData</strong> to move from depth slice to depth slice, where each depth slice contains multiple rows.</li> </ul><p>When <strong>RowPitch</strong> and <strong>DepthPitch</strong> are not appropriate for the resource type, the runtime might set their values to 0. So, don't use these values for anything other than iterating over rows and depth. Here are some examples:</p><ul> <li>For <strong>Buffer</strong> and <strong>Texture1D</strong>, the runtime assigns values that aren't 0 to <strong>RowPitch</strong> and <strong>DepthPitch</strong>. For example, if a <strong>Buffer</strong> contains 8 bytes, the runtime assigns values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are greater than or equal to 8.</li> <li>For <strong>Texture2D</strong>, the runtime still assigns a value that isn't 0 to <strong>DepthPitch</strong>, assuming that the field isn't used.</li> </ul><strong>Note</strong>?? The runtime might assign values to <strong>RowPitch</strong> and <strong>DepthPitch</strong> that are larger than anticipated because there might be padding between rows and depth.? + + + <dd> <p>Pointer to the data. When <strong>{{ID3D11DeviceContext::Map}}</strong> provides the reference, the runtime ensures that the reference has a specific alignment, depending on the following feature levels:</p> <ul> <li>For <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong> and higher, the reference is aligned to 16 bytes.</li> <li>For lower than <strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>, the reference is aligned to 4 bytes.</li> </ul> </dd> + + + <dd> <p>The row pitch, or width, or physical size (in bytes) of the data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size (in bytes)of the data.</p> </dd> + + + + + <p>Describes a buffer resource.</p> + <p>This structure is used by <strong>{{ID3D11Device::CreateBuffer}}</strong> to create buffer resources.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_BUFFER_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a buffer description.</p><p>If the bind flag is <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>, you must set the <strong>ByteWidth</strong> value in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>.</p> + + + <dd> <p>Size of the buffer in bytes.</p> </dd> + + + <dd> <p>Identify how the buffer is expected to be read from and written to. Frequency of update is a key factor. The most common value is typically {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Identify how the buffer will be bound to the pipeline. Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>{{CPU}} access flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) or 0 if no {{CPU}} access is necessary. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) or 0 if unused. Flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer. For more info about structured buffers, see Structured Buffer.</p> <p>The size value in <strong>StructureByteStride</strong> must match the size of the format that you use for views of the buffer. For example, if you use a shader resource view ({{SRV}}) to read a buffer in a pixel shader, the {{SRV}} format size must match the size value in <strong>StructureByteStride</strong>.</p> </dd> + + + + + <p>Describes a 1D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture1D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE1D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE1D_U_DIMENSION}} (8192) when you create your 1D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE1D_U_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the array. The range is from 1 to {{D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}. For a 1D texture, the allowable values are: {{D3D11_BIND_SHADER_RESOURCE}}, {{D3D11_BIND_RENDER_TARGET}} and {{D3D11_BIND_DEPTH_STENCIL}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device::CreateTexture3D}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC}}</strong> derived structure, which is defined in {{D3D11}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a shader-resource view.</p> + <p> The <strong>{{D3D11_BUFFER_SRV}}</strong> structure is a member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure, which represents a shader-resource view description. You can create a shader-resource view by calling the <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> method. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the shader-resource-view description. </p> </dd> + + + + + <p>Describes the elements in a raw buffer resource to use in a shader-resource view.</p> + <p>This structure is used by <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a raw view of a buffer.</p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV_FLAG}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + + + <p>Specifies the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D11Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + + + <p>Specifies the subresources from a multisampled 2D texture to use in a shader-resource view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> specifying the viewing format. See remarks.</p> </dd> + + + <dd> <p>The resource type of the view. See <strong>{{D3D11_SRV_DIMENSION}}</strong>. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>View the resource as a buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFER_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D texture using information from a shader-resource view (see <strong>{{D3D11_TEX1D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 1D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture using information from a shader-resource view (see <strong>{{D3D11_TEX2D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2D_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled texture using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D texture using information from a shader-resource view (see <strong>{{D3D11_TEX3D_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube texture using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a 3D-cube-texture array using information from a shader-resource view (see <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>).</p> </dd> + + + <dd> <p>View the resource as a raw buffer using information from a shader-resource view (see <strong>{{D3D11_BUFFEREX_SRV}}</strong>). For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Specifies the elements in a buffer resource to use in a render-target view.</p> + <p> A render-target view is a member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>). Create a render-target view by calling <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. </p> + + + <dd> <p> Number of bytes between the beginning of the buffer and the first element to access. </p> </dd> + + + <dd> <p> The offset of the first element in the view to access, relative to element 0. </p> </dd> + + + <dd> <p> The total number of elements in the view. </p> </dd> + + + <dd> <p> The width of each element (in bytes). This can be determined from the format stored in the render-target-view description. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture to use in a render-target view.</p> + <p>Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in {{D3D11_TEX2DMS_RTV}}. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Specifies the subresources from an array of 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a an array of multisampled 2D textures to use in a render-target view.</p> + <p>This structure is one member of a render-target-view description (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources from a 3D texture to use in a render-target view.</p> + <p>This structure is one member of a render target view. See <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render target.</p><p>A render-target-view cannot use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_RTV_DIMENSION}}</strong>), which specifies how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a single subresource because a multisampled 2D texture only contains one subresource (see <strong>{{D3D11_TEX2DMS_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a multisampled 2D texture array that can be accessed (see <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_RTV}}</strong>).</p> </dd> + + + + + <p>Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Specifies the subresources from an array 2D textures that are accessible to a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.</p> + <p>Because a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.</p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Specifies the subresources from an array of multisampled 2D textures for a depth-stencil view.</p> + <p>This structure is one member of a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>).</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Specifies the subresources of a texture that are accessible from a depth-stencil view.</p> + <p>These are valid formats for a depth-stencil view:</p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p>A depth-stencil view cannot use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, then the format of the parent resource is used.</p><p>A depth-stencil-view description is needed when calling <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p> + + + <dd> <p>Resource data format (see <strong>{{DXGI_FORMAT}}</strong>). See remarks for allowable formats.</p> </dd> + + + <dd> <p>Type of resource (see <strong>{{D3D11_DSV_DIMENSION}}</strong>). Specifies how a depth-stencil resource will be accessed; the value is stored in the union in this structure.</p> </dd> + + + <dd> <p>A value that describes whether the texture is read only. Pass 0 to specify that it is not read only; otherwise, pass one of the members of the <strong>{{D3D11_DSV_FLAG}}</strong> enumerated type.</p> </dd> + + + <dd> <p>Specifies a 1D texture subresource (see <strong>{{D3D11_TEX1D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 1D texture subresources (see <strong>{{D3D11_TEX1D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a 2D texture subresource (see <strong>{{D3D11_TEX2D_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of 2D texture subresources (see <strong>{{D3D11_TEX2D_ARRAY_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies a multisampled 2D texture (see <strong>{{D3D11_TEX2DMS_DSV}}</strong>).</p> </dd> + + + <dd> <p>Specifies an array of multisampled 2D textures (see <strong>{{D3D11_TEX2DMS_ARRAY_DSV}}</strong>).</p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>View options for the resource (see <strong>{{D3D11_BUFFER_UAV_FLAG}}</strong>).</p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>This structure is used by a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Specifies the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>The data format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>The resource type (see <strong>{{D3D11_UAV_DIMENSION}}</strong>), which specifies how the resource will be accessed.</p> </dd> + + + <dd> <p>Specifies which buffer elements can be accessed (see <strong>{{D3D11_BUFFER_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture that can be accessed (see <strong>{{D3D11_TEX1D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 1D texture array that can be accessed (see <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture that can be accessed (see <strong>{{D3D11_TEX2D_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies the subresources in a 2D texture array that can be accessed (see <strong>{{D3D11_TEX2D_ARRAY_UAV}}</strong>).</p> </dd> + + + <dd> <p>Specifies subresources in a 3D texture that can be accessed (see <strong>{{D3D11_TEX3D_UAV}}</strong>).</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>These are the default values for sampler state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MinLOD</td><td>-3.402823466e+38F (-{{FLT_MAX}})</td></tr> <tr><td>MaxLOD</td><td>3.402823466e+38F ({{FLT_MAX}})</td></tr> <tr><td>MipMapLODBias</td><td>0.0f</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor</td><td>float4(1.0f,1.0f,1.0f,1.0f)</td></tr> <tr><td>Texture</td><td>N/A</td></tr> </table><p>?</p> + + + <dd> <p> Filtering method to use when sampling a texture (see <strong>{{D3D11_FILTER}}</strong>). </p> </dd> + + + <dd> <p> Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see <strong>{{D3D11_TEXTURE_ADDRESS_MODE}}</strong>). </p> </dd> + + + <dd> <p>Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.</p> </dd> + + + <dd> <p>Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.</p> </dd> + + + <dd> <p>Clamping value used if {{D3D11_FILTER_ANISOTROPIC}} or {{D3D11_FILTER_COMPARISON_ANISOTROPIC}} is specified in Filter. Valid values are between 1 and 16.</p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p>Border color to use if {{D3D11_TEXTURE_ADDRESS_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.</p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p>Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D11_FLOAT32_MAX}}.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>Type of query (see <strong>{{D3D11_QUERY}}</strong>).</p> </dd> + + + <dd> <p>Miscellaneous flags (see <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>).</p> </dd> + + + + + <p>Query information about the reliability of a timestamp query.</p> + <p>For a list of query types see <strong>{{D3D11_QUERY}}</strong>.</p> + + + <dd> <p>How frequently the {{GPU}} counter increments in Hz.</p> </dd> + + + <dd> <p>If this is <strong>{{TRUE}}</strong>, something occurred in between the query's <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the {{AC}} cord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by <strong>{{ID3D11DeviceContext::GetData}}</strong> for a timestamp query is only reliable if <strong>Disjoint</strong> is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Query information about the amount of data streamed out to the stream-output buffers in between <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>.</p> + + + + <p>Describes a counter.</p> + <p>This structure is used by <strong>{{ID3D11Counter::GetDesc}}</strong>, <strong>{{ID3D11Device::CheckCounter}}</strong> and <strong>{{ID3D11Device::CreateCounter}}</strong>.</p> + + + <dd> <p>Type of counter (see <strong>{{D3D11_COUNTER}}</strong>).</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Information about the video card's performance counter capabilities.</p> + <p>This structure is returned by <strong>{{ID3D11Device::CheckCounterInfo}}</strong>.</p> + + + <dd> <p>Largest device-dependent counter {{ID}} that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to {{D3D11_COUNTER_DEVICE_DEPENDENT_0}}. See <strong>{{D3D11_COUNTER}}</strong>.</p> </dd> + + + <dd> <p>Number of counters that can be simultaneously supported.</p> </dd> + + + <dd> <p>Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the {{VERTEX_PROCESSING}}, {{GEOMETRY_PROCESSING}}, {{PIXEL_PROCESSING}}, and {{OTHER_GPU_PROCESSING}} counters. </p> </dd> + + + + + <p>Describes an {{HLSL}} class instance.</p> + <p>The {{D3D11_CLASS_INSTANCE_DESC}} structure is returned by the <strong>{{ID3D11ClassInstance::GetDesc}}</strong> method.</p><p>The members of this structure except <strong>InstanceIndex</strong> are valid (non default values) if they describe a class instance aquired using <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The <strong>InstanceIndex</strong> member is only valid when the class instance is aquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>.</p> + + + <dd> <p>The instance {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The instance index of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The type {{ID}} of an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>Describes the constant buffer associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base constant buffer offset associated with an {{HLSL}} class; the default value is 0.</p> </dd> + + + <dd> <p>The base texture associated with an {{HLSL}} class; the default value is 127.</p> </dd> + + + <dd> <p>The base sampler associated with an {{HLSL}} class; the default value is 15.</p> </dd> + + + <dd> <p>True if the class was created; the default value is false.</p> </dd> + + + + + <p>Describes the multi-threading features that are supported by the current graphics driver.</p> + <p>Use the {{D3D11_FEATURE_DATA_THREADING}} structure with the <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> method to determine multi-threading support.</p> + + + <dd> <p><strong>{{TRUE}}</strong> means resources can be created concurrently on multiple threads while drawing; <strong>{{FALSE}}</strong> means that the presence of coarse synchronization will prevent concurrency.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> means command lists are supported by the current driver; <strong>{{FALSE}}</strong> means that the {{API}} will emulate deferred contexts and command lists with software.</p> </dd> + + + + + <p>Describes double data type support in the current graphics driver.</p> + <p>If the runtime sets <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>, the hardware and driver support the following Shader Model 5 instructions:</p><ul> <li> dadd </li> <li> dmax </li> <li> dmin </li> <li> dmul </li> <li> deq </li> <li> dge </li> <li> dlt </li> <li> dne </li> <li> dmov </li> <li> dmovc </li> <li> dtof </li> <li> ftod </li> </ul><strong>Note</strong>??If <strong>DoublePrecisionFloatShaderOps</strong> is <strong>{{TRUE}}</strong>, the hardware and driver do not necessarily support double-precision division.? + + + <dd> <p>Specifies whether double types are allowed. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong> in order for you to use any {{HLSL}} shader that is compiled with a double type.</p> </dd> + + + + + <p>Describes which resources are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> flags indicating which resources are supported.</p> </dd> + + + + + <p>Describes which unordered resource options are supported by the current graphics driver for a given format.</p> + + + <dd> <p> <strong>{{DXGI_FORMAT}}</strong> to return information on.</p> </dd> + + + <dd> <p>Combination of <strong>{{D3D11_FORMAT_SUPPORT2}}</strong> flags indicating which unordered resource options are supported.</p> </dd> + + + + + <p>Describes compute shader and raw and structured buffer support in the current graphics driver.</p> + <p>Direct3D 11 devices ({{D3D_FEATURE_LEVEL_11_0}}) are required to support Compute Shader model 5.0. Direct3D 10.x devices ({{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_10_1}}) can optionally support Compute Shader model 4.0 or 4.1.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if compute shaders and raw and structured buffers are supported; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 11.1 feature options in the current graphics driver.</p> + <p>If a Microsoft Direct3D device supports feature level 11.1 (<strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>), when you call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>, <strong>CheckFeatureSupport</strong> returns a reference to <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> with all member set to <strong>{{TRUE}}</strong> except the <strong>{{SAD4ShaderInstructions}}</strong> and <strong>ExtendedDoublesShaderInstructions</strong> members, which are optionally supported by the hardware and driver and therefore can be <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p><p>Feature level 11.1 provides the following additional features:</p><ul> <li>{{UAVs}} at every shader stage with 64 {{UAV}} bind slots instead of 8.</li> <li>Target-independent rasterization, which enables you to set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, 8, or 16 and to render to {{RTVs}} with a single sample.</li> <li>{{UAV}}-only rendering with the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> set to up to 16 (only up to 8 for feature level 11).</li> </ul><p>The runtime always sets the following groupings of members identically. That is, all the values in a grouping are <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> together:</p><ul> <li><strong>DiscardAPIsSeenByDriver</strong> and <strong>FlagsForUpdateAndCopySeenByDriver</strong></li> <li><strong>ClearView</strong>, <strong>CopyWithOverlap</strong>, <strong>ConstantBufferPartialUpdate</strong>, <strong>ConstantBufferOffsetting</strong>, and <strong>MapNoOverwriteOnDynamicConstantBuffer</strong></li> <li><strong>MapNoOverwriteOnDynamicBufferSRV</strong> and <strong>MultisampleRTVWithForcedSampleCountOne</strong></li> </ul> + + + <dd> <p>Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1.</p> </dd> + + + <dd> <p>Specifies whether the driver can render with no render target views ({{RTVs}}) or depth stencil views ({{DSVs}}), and only unordered access views ({{UAVs}}) bound. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver can render with no {{RTVs}} or {{DSVs}} and only {{UAVs}} bound and <strong>{{FALSE}}</strong> otherwise. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1, 4, or 8 when you render with no {{RTVs}} or {{DSV}} and only {{UAVs}} bound. For feature level 11.1, this member is always <strong>{{TRUE}}</strong> and you can also set <strong>ForcedSampleCount</strong> to 16 in addition to 1, 4, or 8. The default value of <strong>ForcedSampleCount</strong> is 0, which means the same as if the value is set to 1. You can always set <strong>ForcedSampleCount</strong> to 0 or 1 for {{UAV}}-only rendering independently of how this member is set.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::DiscardView}}</strong> and <strong>{{ID3D11DeviceContext1::DiscardResource}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports these methods and <strong>{{FALSE}}</strong> otherwise. How this member is set does not indicate whether the driver actually uses these methods; that is, the driver might ignore these methods if they are not useful to the hardware. If <strong>{{FALSE}}</strong>, the runtime does not expose these methods to the driver because the driver does not support them. You can monitor this member during development to rule out legacy drivers on hardware where these methods might have otherwise been beneficial. You are not required to write separate code paths based on whether this member is <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>; you can call these methods whenever applicable.</p> </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for copy and update that are exposed by the <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> methods. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports new semantics for copy and update. The runtime sets this member to <strong>{{FALSE}}</strong> only for legacy drivers. The runtime handles this member similarly to the <strong>DiscardAPIsSeenByDriver</strong> member.</p> </dd> + + + <dd> <p>Specifies whether the driver supports the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> with overlapping source and destination rectangles. The runtime sets this member to <strong>{{TRUE}}</strong> if you can call <strong>CopySubresourceRegion1</strong> with overlapping source and destination rectangles and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this method to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because drivers already support the option for these feature levels. ? </dd> + + + <dd> <p>Specifies whether the driver supports partial updates of constant buffers. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports partial updates of constant buffers and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether the driver supports new semantics for setting offsets in constant buffers for a shader. The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports allowing you to specify offsets when you call new methods like the <strong>{{ID3D11DeviceContext1::VSSetConstantBuffers1}}</strong> method and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime does not expose this operation to the driver because the driver does not support it. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic constant buffer (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation. </p> <strong>Note</strong>??For feature level 9.1, 9.2, and 9.3, this member is always <strong>{{TRUE}}</strong> because the option is emulated by the runtime. ? </dd> + + + <dd> <p>Specifies whether you can call <strong>{{ID3D11DeviceContext::Map}}</strong> with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong> on a dynamic buffer {{SRV}} (that is, whether the driver supports this operation). The runtime sets this member to <strong>{{TRUE}}</strong> if the driver supports this operation and <strong>{{FALSE}}</strong> otherwise. If <strong>{{FALSE}}</strong>, the runtime fails this method because the driver does not support the operation.</p> </dd> + + + <dd> <p>Specifies whether the driver supports multisample rendering when you render with {{RTVs}} bound. If <strong>{{TRUE}}</strong>, you can set the <strong>ForcedSampleCount</strong> member of <strong>{{D3D11_RASTERIZER_DESC1}}</strong> to 1 with a multisample {{RTV}} bound. The driver can support this option on feature level 10 and higher. If <strong>{{FALSE}}</strong>, the rasterizer-state creation will fail because the driver is legacy or the feature level is too low.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>msad4</strong> intrinsic function in shaders. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support calls to <strong>msad4</strong> intrinsic functions in shaders. If <strong>{{FALSE}}</strong>, the driver is legacy or the hardware does not support the option; the runtime will fail shader creation for shaders that use <strong>msad4</strong>.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support the <strong>fma</strong> intrinsic function and other extended doubles instructions (<strong>{{DDIV}}</strong> and <strong>{{DRCP}}</strong>) in shaders. The <strong>fma</strong> intrinsic function emits an extended doubles <strong>{{DFMA}}</strong> instruction. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended doubles instructions in shaders (shader model 5 and higher). Support of this option implies support of basic double-precision shader instructions as well. You can use the <strong>{{D3D11_FEATURE_DOUBLES}}</strong> value to query for support of double-precision shaders. If <strong>{{FALSE}}</strong>, the hardware and driver do not support the option; the runtime will fail shader creation for shaders that use extended doubles instructions.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support sharing a greater variety of Texture2D resource types and formats. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support extended Texture2D resource sharing.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes information about Direct3D 11.1 adapter architecture.</p> + + + <dd> <p>Specifies whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain {{API}} usage patterns that are fine for TileBasedDefferredRenderers ({{TBDRs}}) can perform worse on non-{{TBDRs}} and vice versa. Applications that are careful about rendering can be friendly to both {{TBDR}} and non-{{TBDR}} architectures. <strong>{{TRUE}}</strong> if the rendering device batches rendering commands and <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more information about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. For more information about this feature, see feature level.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes Direct3D?9 shadow support in the current graphics driver. </p> + <p>Shadows are an important element in realistic 3D scenes. You can use the shadow buffer technique to render shadows. The basic principle of the technique is to use a depth buffer to store the scene depth info from the perspective of the light source, and then compare each point rendered in the scene with that buffer to determine if it is in shadow.</p><p>To render objects into the scene with shadows on them, you create <strong>sampler state objects</strong> with comparison filtering set and the comparison mode (ComparisonFunc) to LessEqual. You can also set BorderColor addressing on this depth sampler, even though BorderColor isn't typically allowed on feature levels 9.1 and 9.2. By using the border color and picking 0.0 or 1.0 as the border color value, you can control whether the regions off the edge of the shadow map appear to be always in shadow or never in shadow respectively. +You can control the shadow filter quality by the Mag and Min filter settings in the comparison sampler. Point sampling will produce shadows with non-anti-aliased edges. Linear filter sampler settings will result in higher quality shadow edges, but might affect performance on some power-optimized devices.</p><strong>Note</strong>??If you use a separate setting for Mag versus Min filter options, you produce an undefined result. Anisotropic filtering is not supported. The Mip filter choice is not relevant because feature level 9.x does not allow mipmapped depth buffers.?<strong>Note</strong>??On feature level 9.x, you can't compile a shader with the <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> intrinsic functions by using older versions of the compiler. For example, you can't use the fxc.exe compiler that ships with the DirectX {{SDK}} or use the <strong>{{D3DCompile}}**</strong> functions (like <strong>{{D3DCompileFromFile}}</strong>) that are implemented in {{D3DCompiler_43}}.dll and earlier. These intrinsic functions on feature level 9.x are only supported in the fxc.exe compiler that ships with the Windows?8 {{SDK}} and later and with the <strong>{{D3DCompile}}**</strong> functions that are implemented in {{D3DCompiler_44}}.dll and later. +But these intrinsic functions are present in shader models for feature levels higher than 9.x.? + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes precision support options for shaders in the current graphics driver.</p> + <p>For hardware at Direct3D 10 and higher feature levels, the runtime sets both members identically. For hardware at Direct3D 9.3 and lower feature levels, the runtime can set a lower precision support in the <strong>PixelShaderMinPrecision</strong> member than the <strong>AllOtherShaderStagesMinPrecision</strong> member; for 9.3 and lower, all other shader stages represent only the vertex shader.</p><p>For more info about {{HLSL}} minimum precision, see using {{HLSL}} minimum precision.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for the pixel shader. A value of zero indicates that the driver supports only full 32-bit precision for the pixel shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for all other shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all other shader stages.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 11.2 feature options in the current graphics driver.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D11_OPTIONS1}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The members of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> will be set appropriately based on the system's graphics hardware and graphics driver. </p> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D11_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support the filtering options (<strong>{{D3D11_FILTER}}</strong>) of comparing the result to the minimum or maximum value during texture sampling. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support these filtering options. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver also support the <strong>{{ID3D11DeviceContext1::ClearView}}</strong> method on depth formats. For info about valid depth formats, see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies support for creating <strong>{{ID3D11Buffer}}</strong> resources that can be passed to the <strong>{{ID3D11DeviceContext::Map}}</strong> and <strong>{{ID3D11DeviceContext::Unmap}}</strong> methods. This means that the <strong>{{CPUAccessFlags}}</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure may be set with the desired <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong> elements when the <strong>Usage</strong> member of <strong>{{D3D11_BUFFER_DESC}}</strong> is set to <strong>{{D3D11_USAGE_DEFAULT}}</strong>. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware is capable of at least <strong>{{D3D_FEATURE_LEVEL_11_0}}</strong> and the graphics device driver supports mappable default buffers. </p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether simple instancing is supported.</p> + <p> If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>SimpleInstancingSupported</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>. </p><p> Simple instancing means that instancing is supported with the caveat that the <strong>InstanceDataStepRate</strong> member of the <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> structure must be equal to 1. This does not change the full instancing support provided by hardware at feature level 9.3 and above, and is meant to expose the instancing support that may be available on feature level 9.2 and 9.1 hardware. </p> + + + <dd> <p> Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing. </p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes whether a {{GPU}} profiling technique is supported.</p> + <p>If the Direct3D {{API}} is the Direct3D 11.2 runtime and can support 11.2 features, <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> for <strong>{{D3D11_FEATURE_MARKER_SUPPORT}}</strong> will return a {{SUCCESS}} code when valid parameters are passed. The <strong>Profile</strong> member of <strong>{{D3D11_FEATURE_DATA_MARKER_SUPPORT}}</strong> will be set to <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Specifies whether the hardware and driver support a {{GPU}} profiling technique that can be used with development tools. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support data marking.</p> </dd> + + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?<p>Describes Direct3D 9 feature options in the current graphics driver.</p> + <p>You can use the <strong>{{D3D11_FEATURE_D3D9_OPTIONS1}}</strong> enumeration value with <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> to query a driver about support for Direct3D 9 feature options rather than making multiple calls to <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> by using <strong>{{D3D11_FEATURE_D3D9_OPTIONS}}</strong>, <strong>{{D3D11_FEATURE_D3D9_SHADOW_SUPPORT}}</strong>, and <strong>{{D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT}}</strong>, which provide identical info about supported Direct3D 9 feature options.</p> + + + <dd> <p>Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more info about this feature, see feature level. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{FALSE}}</strong> if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. </p> </dd> + + + <dd> <p>Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to <strong>{{TRUE}}</strong> for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to <strong>{{TRUE}}</strong> only if the hardware and driver support the shadowing feature; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support simple instancing. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support simple instancing.</p> </dd> + + + <dd> <p>Specifies whether the hardware and driver support setting a single face of a <strong>TextureCube</strong> as a render target while the depth stencil surface that is bound alongside can be a <strong>Texture2D</strong> (as opposed to <strong>TextureCube</strong>). The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support this feature; otherwise <strong>{{FALSE}}</strong>.</p> <p>If the hardware and driver don't support this feature, the app must match the render target surface type with the depth stencil surface type. Because hardware at Direct3D 9.3 and lower feature levels doesn't allow <strong>TextureCube</strong> depth surfaces, the only way to render a scene into a <strong>TextureCube</strong> while having depth buffering enabled is to render each <strong>TextureCube</strong> face separately to a <strong>Texture2D</strong> render target first (because that can be matched with a <strong>Texture2D</strong> depth), and then copy the results into the <strong>TextureCube</strong>. If the hardware and driver support this feature, the app can just render to the <strong>TextureCube</strong> faces directly while getting depth buffering out of a <strong>Texture2D</strong> depth buffer.</p> <p>You only need to query this feature from hardware at Direct3D 9.3 and lower feature levels because hardware at Direct3D 10.0 and higher feature levels allow <strong>TextureCube</strong> depth surfaces.</p> </dd> + + + + + + + + <p>Describes Direct3D 11.3 feature options in the current graphics driver.</p> + + + <dd> <p> Whether to use the {{VP}} and {{RT}} array index from any shader feeding the rasterizer. </p> </dd> + + + + + <p> Describes feature data {{GPU}} virtual address support, including maximum address bits per resource and per process. </p> + <p> See <strong>{{D3D11_FEATURE}}</strong>. </p> + + + <dd> <p> The maximum {{GPU}} virtual address bits per resource. </p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process. </p> </dd> + + + + + <p>Stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D11_STENCIL_OP}}</strong>. The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as <strong>StencilFunc</strong> in the stencil test portion of depth-stencil testing.</p><p>This structure is a member of a <strong>depth-stencil description</strong>. </p> + + + <dd> <p>The stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>The stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A function that compares stencil data against existing stencil data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + + + + + + <p>Describes a video stream for a Microsoft Direct3D?11 video decoder or video processor. </p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The width of the video frame, in pixels. </p> </dd> + + + <dd> <p>The height of the video frame, in pixels. </p> </dd> + + + <dd> <p>The output surface format, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + + + <p>Describes the configuration of a Microsoft Direct3D?11 decoder device for DirectX Video Acceleration ({{DXVA}}). </p> + + + <dd> <p>If the bitstream data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 0, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the macroblock control data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>If the residual difference decoding data buffers are encrypted using the {{D3D11CryptoSession}} mechanism, this {{GUID}} should be set to zero. If no encryption is applied, the value is <strong>{{DXVA_NoEncrypt}}</strong>. If <strong>ConfigBitstreamRaw</strong> is 1, the value must be <strong>{{DXVA_NoEncrypt}}</strong>. </p> </dd> + + + <dd> <p>Indicates whether the host-decoder sends raw bit-stream data. If the value is 1, the data for the pictures will be sent in bit-stream buffers as raw bit-stream content. If the value is 0, picture data will be sent using macroblock control command buffers. If either <strong>ConfigResidDiffHost</strong> or <strong>ConfigResidDiffAccelerator</strong> is 1, the value must be 0. </p> </dd> + + + <dd> <p>Specifies whether macroblock control commands are in raster scan order or in arbitrary order. If the value is 1, the macroblock control commands within each macroblock control command buffer are in raster-scan order. If the value is 0, the order is arbitrary. For some types of bit streams, forcing raster order either greatly increases the number of required macroblock control buffers that must be processed, or requires host reordering of the control information. Therefore, supporting arbitrary order can be more efficient. </p> </dd> + + + <dd> <p>Contains the host residual difference configuration. If the value is 1, some residual difference decoding data may be sent as blocks in the spatial domain from the host. If the value is 0, spatial domain data will not be sent. </p> </dd> + + + <dd> <p>Indicates the word size used to represent residual difference spatial-domain blocks for predicted (non-intra) pictures when using host-based residual difference decoding. </p> <p>If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 1, the host will send residual difference spatial-domain blocks for non-intra macroblocks using 8-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigSpatialResid8</strong> is 0, the host will send residual difference spatial-domain blocks of data for non-intra macroblocks using 16-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of <strong>ConfigIntraResidUnsigned</strong>: </p> <ul> <li> If <strong>ConfigIntraResidUnsigned</strong> is 0, spatial domain blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> If <strong>ConfigIntraResidUnsigned</strong> is 1, spatial domain blocks for intra macroblocks are sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 0, <strong>ConfigSpatialResid8</strong> must be 0. </p> <p> For intra pictures, spatial-domain blocks must be sent using 8-bit samples if bits-per-pixel ({{BPP}}) is 8, and using 16-bit samples if {{BPP}} &gt; 8. If <strong>ConfigIntraResidUnsigned</strong> is 0, these samples are sent as signed integer values relative to a constant reference value of 2^({{BPP}}?1), and if <strong>ConfigIntraResidUnsigned</strong> is 1, these samples are sent as unsigned integer values relative to a constant reference value of 0. </p> </dd> + + + <dd> <p> If the value is 1, 8-bit difference overflow blocks are subtracted rather than added. The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 1. </p> <p> The ability to subtract differences rather than add them enables 8-bit difference decoding to be fully compliant with the full ?255 range of values required in video decoder specifications, because +255 cannot be represented as the addition of two signed 8-bit numbers, but any number in the range ?255 can be represented as the difference between two signed 8-bit numbers (+255 = +127 minus ?128).</p> </dd> + + + <dd> <p> If the value is 1, spatial-domain blocks for intra macroblocks must be clipped to an 8-bit range on the host and spatial-domain blocks for non-intra macroblocks must be clipped to a 9-bit range on the host. If the value is 0, no such clipping is necessary by the host. </p> <p> The value must be 0 unless <strong>ConfigSpatialResid8</strong> is 0 and <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, any spatial-domain residual difference data must be sent in a chrominance-interleaved form matching the {{YUV}} format chrominance interleaving pattern. The value must be 0 unless <strong>ConfigResidDiffHost</strong> is 1 and the {{YUV}} format is {{NV12}} or {{NV21}}. </p> </dd> + + + <dd> <p> Indicates the method of representation of spatial-domain blocks of residual difference data for intra blocks when using host-based difference decoding. </p> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 0, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1). </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^({{BPP}}?1), regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> If <strong>ConfigResidDiffHost</strong> is 1 and <strong>ConfigIntraResidUnsigned</strong> is 1, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows: </p> <ul> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 0, the spatial-domain residual difference data blocks for intra macroblocks must be sent as 16-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In a non-intra picture, if <strong>ConfigSpatialResid8</strong> is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0. </li> <li> In an intra picture, if {{BPP}} is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0, regardless of the value of <strong>ConfigSpatialResid8</strong>. </li> </ul> <p> The value of the member must be 0 unless <strong>ConfigResidDiffHost</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, transform-domain blocks of coefficient data may be sent from the host for accelerator-based {{IDCT}}. If the value is 0, accelerator-based {{IDCT}} will not be used. If both <strong>ConfigResidDiffHost</strong> and <strong>ConfigResidDiffAccelerator</strong> are 1, this indicates that some residual difference decoding will be done on the host and some on the accelerator, as indicated by macroblock-level control commands. </p> <p> The value must be 0 if <strong>ConfigBitstreamRaw</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the inverse scan for transform-domain block processing will be performed on the host, and absolute indices will be sent instead for any transform coefficients. If the value is 0, the inverse scan will be performed on the accelerator. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>Config4GroupedCoefs</strong> is 1. </p> </dd> + + + <dd> <p> If the value is 1, the {{IDCT}} specified in Annex W of {{ITU}}-T Recommendation H.263 is used. If the value is 0, any compliant {{IDCT}} can be used for off-host {{IDCT}}. </p> <p> The H.263 annex does not comply with the {{IDCT}} requirements of {{MPEG}}-2 corrigendum 2, so the value must not be 1 for use with {{MPEG}}-2 video. </p> <p> The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0, indicating purely host-based residual difference decoding. </p> </dd> + + + <dd> <p> If the value is 1, transform coefficients for off-host {{IDCT}} will be sent using the <strong>{{DXVA_TCoef4Group}}</strong> structure. If the value is 0, the <strong>{{DXVA_TCoefSingle}}</strong> structure is used. The value must be 0 if <strong>ConfigResidDiffAccelerator</strong> is 0 or if <strong>ConfigHostInverseScan</strong> is 1. </p> </dd> + + + <dd> <p> Specifies how many frames the decoder device processes at any one time. </p> </dd> + + + <dd> <p> Contains decoder-specific configuration information. </p> </dd> + + + + + <p>Contains an initialization vector ({{IV}}) for 128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher encryption. </p> + + + <dd> <p>The {{IV}}, in big-endian format.</p> </dd> + + + <dd> <p>The block count, in big-endian format.</p> </dd> + + + + + <p>Specifies which bytes in a video surface are encrypted. </p> + + + <dd> <p>The number of bytes that are encrypted at the start of the buffer. </p> </dd> + + + <dd> <p>The number of bytes that are skipped after the first <strong>NumEncryptedBytesAtBeginning</strong> bytes, and then after each block of <strong>NumBytesInEncryptPattern</strong> bytes. Skipped bytes are not encrypted. </p> </dd> + + + <dd> <p>The number of bytes that are encrypted after each block of skipped bytes.</p> </dd> + + + + + <p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. +</p> </dd> + + + <dd> <p>The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +</p> </dd> + + + <dd> <p>The number of macroblocks of data in the buffer. This count includes skipped macroblocks. </p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <strong>pIV</strong> parameter. If <strong>pIV</strong> is <strong>{{NULL}}</strong>, set this member to zero.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video surfaces are partially encrypted.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure that specifies which bytes of the surface are encrypted.</p> </dd> + + + + + <p>Contains driver-specific data for the <strong>{{ID3D11VideoContext::DecoderExtension}}</strong> method.</p> + <p>The exact meaning of each structure member depends on the value of <strong>Function</strong>.</p> + + + + <p>Describes the capabilities of a Microsoft Direct3D?11 video processor.</p> + <p>The video processor stores state information for each input stream. These states persist between blits. With each blit, the application selects which streams to enable or disable. Disabling a stream does not affect the state information for that stream.</p><p>The <strong>MaxStreamStates</strong> member gives the maximum number of stream states that can be saved. The <strong>MaxInputStreams</strong> member gives the maximum number of streams that can be enabled during a blit. These two values can differ. </p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSPR_FILTER_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of frame-rate conversion capabilities. To enumerate the frame-rate conversion capabilities, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method.</p> </dd> + + + <dd> <p>The maximum number of input streams that can be enabled at the same time. </p> </dd> + + + <dd> <p>The maximum number of input streams for which the device can store state data.</p> </dd> + + + + + <p>Defines a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + + + <dd> <p>The number of past reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>The number of future reference frames required to perform the optimal video processing. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The number of custom frame rates that the driver supports. To get the list of custom frame rates, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong> method.</p> </dd> + + + + + <p>Describes the content-protection capabilities of a graphics driver.</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_CONTENT_PROTECTION_CAPS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The number of cryptographic key-exchange types that are supported by the driver. To get the list of key-exchange types, call the <strong>{{ID3D11VideoDevice::CheckCryptoKeyExchange}}</strong> method.</p> </dd> + + + <dd> <p>The encyrption block size, in bytes. The size of data to be encrypted must be a multiple of this value. </p> </dd> + + + <dd> <p>The total amount of memory, in bytes, that can be used to hold protected surfaces.</p> </dd> + + + + + <p>Specifies a custom rate for frame-rate conversion or inverse telecine ({{IVTC}}). </p> + <p>The <strong>CustomRate</strong> member gives the rate conversion factor, while the remaining members define the pattern of input and output samples.</p> + + + <dd> <p>The ratio of the output frame rate to the input frame rate, expressed as a <strong>{{DXGI_RATIONAL}}</strong> structure that holds a rational number. </p> </dd> + + + <dd> <p>The number of output frames that will be generated for every <em>N</em> input samples, where <em>N</em> = <strong>InputFramesOrFields</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the input stream must be interlaced. Otherwise, the input stream must be progressive. </p> </dd> + + + <dd> <p>The number of input fields or frames for every <em>N</em> output frames that will be generated, where <em>N</em> = <strong>OutputFrames</strong>. </p> </dd> + + + + + <p>Defines the range of supported values for an image filter. </p> + <p>The multiplier enables the filter range to have a fractional step value.</p><p>For example, a hue filter might have an actual range of [?180.0 ... +180.0] with a step size of 0.25. The device would report the following range and multiplier:</p><ul> <li>Minimum: ?720</li> <li>Maximum: +720</li> <li>Multiplier: 0.25</li> </ul><p>In this case, a filter value of 2 would be interpreted by the device as 0.50 (or 2 ? 0.25).</p><p>The device should use a multiplier that can be represented exactly as a base-2 fraction.</p> + + + <dd> <p>The minimum value of the filter. </p> </dd> + + + <dd> <p>The maximum value of the filter. </p> </dd> + + + <dd> <p>The default value of the filter. </p> </dd> + + + <dd> <p>A multiplier. Use the following formula to translate the filter setting into the actual filter value: <em>Actual Value</em> = <em>Set Value</em>???<em>Multiplier</em>.</p> </dd> + + + + + <p>Describes a video stream for a video processor.</p> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> enumeration that describes how the video stream is interlaced.</p> </dd> + + + <dd> <p>The frame rate of the input video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the input frames, in pixels.</p> </dd> + + + <dd> <p>The height of the input frames, in pixels.</p> </dd> + + + <dd> <p>The frame rate of the output video stream, specified as a <strong>{{DXGI_RATIONAL}}</strong> structure. </p> </dd> + + + <dd> <p>The width of the output frames, in pixels. </p> </dd> + + + <dd> <p>The height of the output frames, in pixels.</p> </dd> + + + <dd> <p>A member of the <strong>{{D3D11_VIDEO_USAGE}}</strong> enumeration that describes how the video processor will be used. The value indicates the desired trade-off between speed and video quality. The driver uses this flag as a hint when it creates the video processor.</p> </dd> + + + + + <p>Specifies an {{RGB}} color value. </p> + <p>The {{RGB}} values have a nominal range of [0...1]. For an {{RGB}} format with <em>n</em> bits per channel, the value of each color component is calculated as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>For example, for {{RGB}}-32 (8 bits per channel), <code>val = {{BYTE}}(f * 255.0)</code>.</p> + + + <dd> <p>The red value.</p> </dd> + + + <dd> <p>The green value.</p> </dd> + + + <dd> <p>The blue value.</p> </dd> + + + <dd> <p>The alpha value. Values range from 0 (transparent) to 1 (opaque). +</p> </dd> + + + + + + + + <p>Defines a color value for Microsoft Direct3D?11 video.</p> + <p>The anonymous union can represent both {{RGB}} and {{YCbCr}} colors. The interpretation of the union depends on the context. </p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_YCbCrA}}</strong> structure that contains a {{YCbCr}} color value. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_COLOR_RGBA}}</strong> structure that contains an {{RGB}} color value. </p> </dd> + + + + + <p>Specifies the color space for video processing.</p> + <p>The <strong>{{RGB_Range}}</strong> member applies to {{RGB}} output, while the <strong>{{YCbCr_Matrix}}</strong> and <strong>{{YCbCr_xvYCC}}</strong> members apply to {{YCbCr}} output. If the driver performs color-space conversion on the background color, it uses the values that apply to both color spaces. </p><p>If the driver supports extended {{YCbCr}} (xvYCC), it returns the <strong>{{D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC}}</strong> capabilities flag in the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. Otherwise, the driver ignores the value of <strong>{{YCbCr_xvYCC}}</strong> and treats all {{YCbCr}} output as conventional {{YCbCr}}. </p><p>If extended {{YCbCr}} is supported, it can be used with either transfer matrix. Extended {{YCbCr}} does not change the black point or white point?the black point is still 16 and the white point is still 235. However, extended {{YCbCr}} explicitly allows blacker-than-black values in the range 1?15, and whiter-than-white values in the range 236?254. When extended {{YCbCr}} is used, the driver should not clip the luma values to the nominal 16?235 range.</p> + + + <dd> <p>Specifies whether the output is intended for playback or video processing (such as editing or authoring). The device can optimize the processing based on the type. The default state value is 0 (playback). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Playback</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Video processing</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{RGB}} color range. The default state value is 0 (full range). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Full range (0-255)</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Limited range (16-235)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the {{YCbCr}} transfer matrix. The default state value is 0 ({{BT}}.601). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.601</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>{{ITU}}-R {{BT}}.709</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies whether the output uses conventional {{YCbCr}} or extended {{YCbCr}} (xvYCC). The default state value is zero (conventional {{YCbCr}}). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0</dt> </dl> </td><td> <p>Conventional {{YCbCr}}</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>Extended {{YCbCr}} (xvYCC)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE}}</strong>. </p> <p>Introduced in Windows?8.1.</p> </dd> + + + <dd> <p>Reserved. Set to zero.</p> </dd> + + + + + <p>Contains stream-level data for the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method. </p> + <p>If the stereo 3D format is <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong>, the <strong>ppPastSurfaces</strong>, <strong>pInputSurface</strong>, and <strong>ppFutureSurfaces</strong> members contain the left view.</p> + + + + <p>Contains a Message Authentication Code ({{MAC}}). </p> + + + <dd> <p>A byte array that contains the cryptographic {{MAC}} value of the message.</p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method. </p> + + + + <p>Contains a response from the <strong>{{ID3D11VideoContext::QueryAuthenticatedChannel}}</strong> method.</p> + + + + + + + <p>Specifies the protection level for video content.</p> + + + <dd> <dl> <dt><strong>ProtectionEnabled</strong></dt> <dd> <p>If 1, video content protection is enabled. </p> </dd> <dt><strong>OverlayOrFullscreenRequired</strong></dt> <dd> <p>If 1, the application requires video to be displayed using either a hardware overlay or full-screen exclusive mode.</p> </dd> <dt><strong>Reserved </strong></dt> <dd> <p>Reserved. Set all bits to zero. </p> </dd> </dl> </dd> + + + <dd> <p>Use this member to access all of the bits in the union. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_PROTECTION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> value that specifies the channel type. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data. </p> </dd> + + + <dd> <p>A handle to the device. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION}}</strong> query. </p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to a decoder device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session that is associated with the decoder device.</p> </dd> + + + <dd> <p>A handle to the Direct3D device that is associated with the decoder device.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of processes that are allowed to open shared resources that have restricted access. A process cannot open such a resource unless the process has been granted access. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the process. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS}}</strong> query.</p> + <p>The Desktop Window Manager ({{DWM}}) process is identified by setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Other processes are identified by setting the process handle in <strong>ProcessHandle</strong> and setting <strong>ProcessIdentifier</strong> equal to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the process in the list of processes.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessIdentifier</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member contains a valid handle to a process. Otherwise, this member is ignored.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of protected, shared resources that can be opened by any process without restrictions.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The number of output {{IDs}} associated with the specified device and cryptographic session.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A handle to the device.</p> </dd> + + + <dd> <p>A handle to the cryptographic session.</p> </dd> + + + <dd> <p>The index of the output {{ID}}.</p> </dd> + + + <dd> <p>An output {{ID}} that is associated with the specified device and cryptographic session.</p> </dd> + + + + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The number of encryption {{GUIDs}}. </p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure that contains the {{GUID}} for the query and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}. </p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID}}</strong> query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>The index of the encryption {{GUID}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies a supported encryption type.</p> </dd> + + + + + <p>Contains the response to a <strong>{{D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE}} </strong>query.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure that contains a Message Authentication Code ({{MAC}}) and other data.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the current encryption type. </p> </dd> + + + + + <p>Contains input data for the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains the response from the <strong>{{ID3D11VideoContext::ConfigureAuthenticatedChannel}}</strong> method.</p> + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>The initial sequence number for queries.</p> </dd> + + + <dd> <p>The initial sequence number for commands.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_PROTECTION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROTECTION_FLAGS}}</strong> union that specifies the protection level.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A handle to the decoder device. Get this from <strong>{{ID3D11VideoDecoder::GetDriverHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the cryptographic session. Get this from <strong>{{ID3D11CryptoSession::GetCryptoSessionHandle}}</strong>.</p> </dd> + + + <dd> <p>A handle to the Direct3D device. Get this from <strong>{{D3D11VideoContext::QueryAuthenticatedChannel}}</strong> using <strong>{{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE}}</strong>. +</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE}}</strong> value that specifies the type of process. To specify the Desktop Window Manager ({{DWM}}) process, set this member to <strong>{{D3D11_PROCESSIDTYPE_DWM}}</strong>. Otherwise, set this member to <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong> and set the <strong>ProcessHandle</strong> member to a valid handle.</p> </dd> + + + <dd> <p>A process handle. If the <strong>ProcessType</strong> member equals <strong>{{D3D11_PROCESSIDTYPE_HANDLE}}</strong>, the <strong>ProcessHandle</strong> member specifies a handle to a process. Otherwise, the value is ignored.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the specified process has access to restricted shared resources.</p> </dd> + + + + + <p>Contains input data for a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE}}</strong> command.</p> + + + <dd> <p>A <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure that contains the command {{GUID}} and other data. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the type of encryption to apply.</p> </dd> + + + + + <p>Identifies the texture resource for a video decoder output view.</p> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video decoder output view.</p> + + + <dd> <p>The decoding profile. To get the list of profiles supported by the device, call the <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong> method.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VDOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VDOV}}</strong> structure that identifies the texture resource for the output view.</p> </dd> + + + + + <p>Identifies the texture resource for a video processor input view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The zero-based index of the texture.</p> </dd> + + + + + <p>Describes a video processor input view.</p> + + + <dd> <p>The surface format. If zero, the driver uses the {{DXGI}} format that was used to create the resource. If you are using feature level 9, the value must be zero.</p> </dd> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPIV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPIV}}</strong> structure that identifies the texture resource.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + + + <p>Identifies a texture resource for a video processor output view.</p> + + + <dd> <p>The zero-based index into the array of subtextures.</p> </dd> + + + <dd> <p>The index of the first texture to use.</p> </dd> + + + <dd> <p>The number of textures in the array.</p> </dd> + + + + + <p>Describes a video processor output view.</p> + + + <dd> <p>The resource type of the view, specified as a member of the <strong>{{D3D11_VPOV_DIMENSION}}</strong> enumeration.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_VPOV}}</strong> structure that identifies the texture resource for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2D}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_VPOV}}</strong> structure that identifies the texture array for the output view. </p> <p>Use this member of the union when <strong>ViewDimension</strong> equals <strong>{{D3D11_VPOV_DIMENSION_TEXTURE2DARRAY}}</strong>.</p> </dd> + + + + + <p>A device-child interface accesses data used by a device.</p> + <p>There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Get a reference to the device that created this interface.</p> + <p>Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a device (see <strong>{{ID3D11Device}}</strong>).</p> </dd> + + + + + <p>Get application-defined data from a device child.</p> + <p> The data stored in the device child is set by calling <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device child if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p>Set application-defined data to a device child and associate that data with an application-defined guid.</p> + <p>The data stored in the device child with this method can be retrieved with <strong>{{ID3D11DeviceChild::GetPrivateData}}</strong>.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device child. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>When this method is called ::addref() will be called on the {{IUnknown}}-derived interface, and when the device child is detroyed ::release() will be called on the {{IUnknown}}-derived interface.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>The depth-stencil-state interface holds a description for depth-stencil state that you can bind to the output-merger stage.</p> + <p>To create a depth-stencil-state object, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>. To bind the depth-stencil-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> + + + + <p>Gets the description for depth-stencil state that you used to create the depth-stencil-state object.</p> + <p>You use the description for depth-stencil state in a call to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> structure that receives a description of the depth-stencil state.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device::CreateBlendState}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device::CreateBlendState}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC}}</strong> structure that receives a description of the blend state.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device::CreateRasterizerState}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RASTERIZER_DESC}}</strong> structure that receives a description of the rasterizer state.</p> </dd> + + + + + <p>A resource interface provides common actions on all resources.</p> + <p>You don't directly create a resource interface; instead, you create buffers and textures that inherit from a resource interface. For more info, see How to: Create a Vertex Buffer, How to: Create an Index Buffer, How to: Create a Constant Buffer, and How to: Create a Texture.</p> + + + + <p>Get the type of the resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Pointer to the resource type (see <strong>{{D3D11_RESOURCE_DIMENSION}}</strong>). </p> </dd> + + + + + <p>Set the eviction priority of a resource.</p> + <p>Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.</p><p>A resource that is set to the maximum priority, {{DXGI_RESOURCE_PRIORITY_MAXIMUM}}, is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model ({{WDDM}}) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.</p><p>Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement. </p> + <p>Returns nothing.</p> + + + <dd> <p>Eviction priority for the resource, which is one of the following values:</p> <ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> </dd> + + + + + <p>Get the eviction priority of a resource.</p> + + <p>One of the following values, which specifies the eviction priority for the resource:</p><ul> <li>{{DXGI_RESOURCE_PRIORITY_MINIMUM}}</li> <li>{{DXGI_RESOURCE_PRIORITY_LOW}}</li> <li>{{DXGI_RESOURCE_PRIORITY_NORMAL}}</li> <li>{{DXGI_RESOURCE_PRIORITY_HIGH}}</li> <li>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}}</li> </ul> + + + + <p>A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.</p> + <p>There are three types of buffers: vertex, index, or a shader-constant buffer. Create a buffer resource by calling <strong>{{ID3D11Device::CreateBuffer}}</strong>.</p><p>A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to <strong>{{ID3D11DeviceContext::IASetVertexBuffers}}</strong> and <strong>{{ID3D11DeviceContext::IASetIndexBuffer}}</strong>, to the stream-output stage by a call to <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>, and to a shader stage by calling the appropriate shader method (such as <strong>{{ID3D11DeviceContext::VSSetConstantBuffers}}</strong> for example).</p><p>Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously.</p> + + + + <p>Get the properties of a buffer resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_BUFFER_DESC}}</strong>) filled in by the method.</p> </dd> + + + + + <p>A 1D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty 1D texture, call <strong>{{ID3D11Device::CreateTexture1D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 1D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE1D_DESC}}</strong>).</p> </dd> + + + + + <p>A 2D texture interface manages texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device::CreateTexture2D}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE2D_DESC}}</strong>).</p> </dd> + + + + + <p>A 3D texture interface accesses texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device::CreateTexture3D}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, create a by calling <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p> + + + + <p>Get the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_TEXTURE3D_DESC}}</strong>).</p> </dd> + + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>A view interface is the base interface for all views. There are four types of views; a depth-stencil view, a render-target view, a shader-resource view, and an unordered-access view.</p><ul> <li>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>.</li> <li>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</li> <li>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</li> <li>To create an unordered-access view, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</li> </ul><p>All resources must be bound to the pipeline before they can be accessed.</p><ul> <li>To bind a render-target view or a depth-stencil view, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</li> <li>To bind a shader resource, call <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>.</li> </ul> + + + + <p>Get the resource that is accessed through this view.</p> + <p>This function increments the reference count of the resource by one, so it is necessary to call <strong>Release</strong> on the returned reference when the application is done with it. Destroying (or losing) the returned reference before <strong>Release</strong> is called will result in a memory leak.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to the resource that is accessed through this view. (See <strong>{{ID3D11Resource}}</strong>.)</p> </dd> + + + + + <p>A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Get the shader resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure to be filled with data about the shader resource view.</p> </dd> + + + + + <p>A render-target-view interface identifies the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.</p> + + + + <p>Get the properties of a render target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the description of a render target view (see <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A depth-stencil-view interface accesses a texture resource during depth-stencil testing.</p> + <p>To create a depth-stencil view, call <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>.</p><p>To bind a depth-stencil view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + + + + <p>A view interface specifies the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device::CreateUnorderedAccessView}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Get a description of the resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a resource description (see <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong>.)</p> </dd> + + + + + <p>A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.</p> + <p>The vertex-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a vertex shader interface, call <strong>{{ID3D11Device::CreateVertexShader}}</strong>. Before using a vertex shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A hull-shader interface manages an executable program (a hull shader) that controls the hull-shader stage.</p> + <p>The hull-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a hull-shader interface, call <strong>{{ID3D11Device::CreateHullShader}}</strong>. Before using a hull shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::HSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A domain-shader interface manages an executable program (a domain shader) that controls the domain-shader stage.</p> + <p>The domain-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a domain-shader interface, call <strong>{{ID3D11Device::CreateDomainShader}}</strong>. Before using a domain shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::DSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.</p> + <p>The geometry-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a geometry shader interface, call either <strong>{{ID3D11Device::CreateGeometryShader}}</strong> or <strong>{{ID3D11Device::CreateGeometryShaderWithStreamOutput}}</strong>. Before using a geometry shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.</p> + <p>The pixel-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders in are implemented from a common set of features referred to as the common-shader core..</p><p>To create a pixel shader interface, call <strong>{{ID3D11Device::CreatePixelShader}}</strong>. Before using a pixel shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>A compute-shader interface manages an executable program (a compute shader) that controls the compute-shader stage.</p> + <p>The compute-shader interface has no methods; use {{HLSL}} to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..</p><p>To create a compute-shader interface, call <strong>{{ID3D11Device::CreateComputeShader}}</strong>. Before using a compute shader you must bind it to the device by calling <strong>{{ID3D11DeviceContext::CSSetShader}}</strong>.</p><p>This interface is defined in {{D3D11}}.h.</p> + + + + <p>An input-layout interface holds a definition of how to feed vertex data that is laid out in memory into the input-assembler stage of the graphics pipeline.</p> + <p>To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>. To bind the input-layout object to the input-assembler stage, call <strong>{{ID3D11DeviceContext::IASetInputLayout}}</strong>.</p> + + + + <p>The sampler-state interface holds a description for sampler state that you can bind to any shader stage of the pipeline for reference by texture sample operations.</p> + <p>To create a sampler-state object, call <strong>{{ID3D11Device::CreateSamplerState}}</strong>.</p><p>To bind a sampler-state object to any pipeline shader stage, call the following methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::VSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::HSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::PSSetSamplers}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CSSetSamplers}}</strong> </li> </ul><p>You can bind the same sampler-state object to multiple shader stages simultaneously.</p> + + + + <p>Gets the description for sampler state that you used to create the sampler-state object.</p> + <p>You use the description for sampler state in a call to the <strong>{{ID3D11Device::CreateSamplerState}}</strong> method to create the sampler-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SAMPLER_DESC}}</strong> structure that receives a description of the sampler state.</p> </dd> + + + + + <p>This interface encapsulates methods for retrieving data from the {{GPU}} asynchronously.</p> + <p>There are three types of asynchronous interfaces, all of which inherit this interface:</p><ul> <li> <strong>{{ID3D11Query}}</strong> - Queries information from the {{GPU}}.</li> <li> <strong>{{ID3D11Predicate}}</strong> - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.</li> <li> <strong>{{ID3D11Counter}}</strong> - Measures {{GPU}} performance.</li> </ul> + + + + <p>Get the size of the data (in bytes) that is output when calling <strong>{{ID3D11DeviceContext::GetData}}</strong>.</p> + <p>Size of the data (in bytes) that is output when calling GetData.</p> + + + + <p>A query interface queries information from the {{GPU}}.</p> + <p>A query can be created with <strong>{{ID3D11Device::CreateQuery}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>A query is typically executed as shown in the following code:</p><pre> {{D3D11_QUERY_DESC}} queryDesc; +... // Fill out queryDesc structure +{{ID3D11Query}} * pQuery; +pDevice-&gt;CreateQuery(&amp;queryDesc, &amp;pQuery); +pDeviceContext-&gt;Begin(pQuery); ... // Issue graphics commands pDeviceContext-&gt;End(pQuery); +{{UINT64}} queryData; // This data type is different depending on the query type while( {{S_OK}} != pDeviceContext-&gt;GetData(pQuery, &amp;queryData, sizeof({{UINT64}}), 0) ) +{ +} +</pre><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Get a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + + + <p>A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.</p> + <p>To create a predicate object, call <strong>{{ID3D11Device::CreatePredicate}}</strong>. To set the predicate object, call <strong>{{ID3D11DeviceContext::SetPredication}}</strong>.</p><p>There are two types of predicates: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.</p> + + + + <p>This interface encapsulates methods for measuring {{GPU}} performance.</p> + <p>A counter can be created with <strong>{{ID3D11Device::CreateCounter}}</strong>.</p><p>This is a derived class of <strong>{{ID3D11Asynchronous}}</strong>.</p><p>Counter data is gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.</p><p>Counters are best suited for profiling.</p><p>For a list of the types of performance counters, see <strong>{{D3D11_COUNTER}}</strong>.</p> + + + + <p>Get a counter description.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} class.</p> + <p>This interface is created by calling <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong>. The interface is used when binding shader resources to the pipeline using {{APIs}} such as <strong>{{ID3D11DeviceContext::VSSetShader}}</strong>.</p> + + + + <p> Gets the <strong>{{ID3D11ClassLinkage}}</strong> object associated with the current {{HLSL}} class. </p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Gets a description of the current {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p> An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated. </p><ul> <li> A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name <strong>DefaultShader</strong> would work in any shader that contained a type <strong>DefaultShader</strong> even though several shaders could describe a different type. </li> <li> A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in. </li> </ul><p> An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_CLASS_INSTANCE_DESC}}</strong> structure that describes the current {{HLSL}} class. </p> </dd> + + + + + <p>Gets the instance name of the current {{HLSL}} class.</p> + <p>GetInstanceName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The instance name of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pInstanceName</em> parameter. </p> </dd> + + + + + <p>Gets the type of the current {{HLSL}} class.</p> + <p>GetTypeName will return a valid name only for instances acquired using <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. </p><p> For more information about using the <strong>{{ID3D11ClassInstance}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Type of the current {{HLSL}} class.</p> </dd> + + + <dd> <p> The length of the <em>pTypeName</em> parameter. </p> </dd> + + + + + <p>This interface encapsulates an {{HLSL}} dynamic linkage.</p> + <p>A class linkage object can hold up to 64K gotten instances. A gotten instance is a handle that references a variable name in any shader that is created with that linkage object. When you create a shader with a class linkage object, the runtime gathers these instances and stores them in the class linkage object. For more information about how a class linkage object is used, see Storing Variables and Types for Shaders to Share.</p><p>An <strong>{{ID3D11ClassLinkage}}</strong> object is created using the <strong>{{ID3D11Device::CreateClassLinkage}}</strong> method.</p> + + + + <p>Gets the class-instance object that represents the specified {{HLSL}} class.</p> + <p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p> A class instance must have at least 1 data member in order to be available for the runtime to use with <strong>{{ID3D11ClassLinkage::GetClassInstance}}</strong>. Any instance with no members will be optimized out of a compiled shader blob as a zero-sized object. If you have a class with no data members, use <strong>{{ID3D11ClassLinkage::CreateClassInstance}}</strong> instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>The name of a class for which to get the class instance.</p> </dd> + + + <dd> <p>The index of the class instance.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>Initializes a class-instance object that represents an {{HLSL}} class instance.</p> + <p>Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in.</p><p> For more information about using the <strong>{{ID3D11ClassLinkage}}</strong> interface, see Dynamic Linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>The type name of a class to initialize.</p> </dd> + + + <dd> <p>Identifies the constant buffer that contains the class data.</p> </dd> + + + <dd> <p>The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset.</p> </dd> + + + <dd> <p>The texture slot for the first texture; there may be multiple textures following the offset.</p> </dd> + + + <dd> <p>The sampler slot for the first sampler; there may be multiple samplers following the offset.</p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3D11ClassInstance}}</strong> interface to initialize. </p> </dd> + + + + + <p>The <strong>{{ID3D11CommandList}}</strong> interface encapsulates a list of graphics commands for play back.</p> + <p>There is no explicit creation method, simply declare an <strong>{{ID3D11CommandList}}</strong> interface, then call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> to record commands or <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong> to play back commands.</p> + + + + <p>Gets the initialization flags associated with the deferred context that created the command list.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + <p>The context flag is reserved for future use and is always 0.</p> + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p> + + + + <p>Sets the constant buffers used by the vertex shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{VSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets a pixel shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p> Set ppClassInstances to <strong>{{NULL}}</strong> if no interfaces are used in the shader. If it is not <strong>{{NULL}}</strong>, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the pixel shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>Filter</td><td>{{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}</td></tr> <tr><td>AddressU</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressV</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>AddressW</td><td>{{D3D11_TEXTURE_ADDRESS_CLAMP}}</td></tr> <tr><td>MipLODBias</td><td>0</td></tr> <tr><td>MaxAnisotropy</td><td>1</td></tr> <tr><td>ComparisonFunc</td><td>{{D3D11_COMPARISON_NEVER}}</td></tr> <tr><td>BorderColor[0]</td><td>1.0f</td></tr> <tr><td>BorderColor[1]</td><td>1.0f</td></tr> <tr><td>BorderColor[2]</td><td>1.0f</td></tr> <tr><td>BorderColor[3]</td><td>1.0f</td></tr> <tr><td>MinLOD</td><td>-{{FLT_MAX}}</td></tr> <tr><td>MaxLOD</td><td>{{FLT_MAX}}</td></tr> </table><p>?</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Set a vertex shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Draw indexed, non-instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>If the sum of both indices is negative, the result of the function call is undefined.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, non-instanced primitives.</p> + <p><strong>Draw</strong> submits work to the rendering pipeline.</p><p>The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline.</p><p>Even without any vertex buffer bound to the pipeline, you can generate your own vertex data in your vertex shader by using the <strong>{{SV_VertexID}}</strong> system-value semantic to determine the current vertex that the runtime is processing.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Index of the first vertex, which is usually an offset in a vertex buffer.</p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Invalidate the reference to a resource and reenable the {{GPU}}'s access to that resource.</p> + <p> For info about how to use <strong>Unmap</strong>, see How to: Use dynamic resources. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{ID3D11Resource}}</strong> interface. </p> </dd> + + + <dd> <p>A subresource to be unmapped.</p> </dd> + + + + + <p> Sets the constant buffers used by the pixel shader pipeline stage. </p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an input-layout object to the input-assembler stage.</p> + <p>Input-layout objects describe how vertex buffer data is streamed into the {{IA}} pipeline stage. To create an input-layout object, call <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p> Bind an array of vertex buffers to the input-assembler stage. </p> + <p> For info about creating vertex buffers, see How to: Create a Vertex Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (that is, bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer can't be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an index buffer to the input-assembler stage.</p> + <p> For information about creating index buffers, see How to: Create an Index Buffer. </p><p> Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p> The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. </p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> object, that contains indices. The index buffer must have been created with the <strong>{{D3D11_BIND_INDEX_BUFFER}}</strong> flag. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers. </p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer to the first index to use.</p> </dd> + + + + + <p>Draw indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Draw non-indexed, instanced primitives.</p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors.</p><p>The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}).</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of vertices to draw.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>Index of the first vertex.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Sets the constant buffers used by the geometry shader pipeline stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>You can't use the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface to get information about what is currently bound to the pipeline in the device context. But you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> to get information from a compiled shader. For example, you can use <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> and <strong>{{ID3D11ShaderReflectionVariable}}</strong> to determine the slot in which a geometry shader expects a constant buffer. You can then pass this slot number to <strong>{{GSSetConstantBuffers}}</strong> to set the constant buffer. You can call the <strong>{{D3D11Reflect}}</strong> function to retrieve the address of a reference to the <strong>{{ID3D11ShaderReflection}}</strong> interface and then call <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong> to get a reference to <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{GSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Set a geometry shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p>Bind an array of shader resources to the vertex-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (range is from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the vertex shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Mark the beginning of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::End}}</strong> to mark the ending of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Mark the end of a series of commands.</p> + <p>Use <strong>{{ID3D11DeviceContext::Begin}}</strong> to mark the beginning of the series of commands.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface.</p> </dd> + + + + + <p>Get data from the graphics processing unit ({{GPU}}) asynchronously.</p> + <p>Queries in a deferred context are limited to predicated drawing. That is, you cannot call <strong>{{ID3D11DeviceContext::GetData}}</strong> on a deferred context to get data about a query; you can only call <strong>GetData</strong> on the immediate context to get data about a query. For predicated drawing, the results of a predication-type query are used by the {{GPU}} and not returned to an application. For more information about predication and predicated drawing, see <strong>{{D3D11DeviceContext::SetPredication}}</strong>.</p><p><strong>GetData</strong> retrieves the data that the runtime collected between calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong>. Certain queries only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> in which case the data returned by <strong>GetData</strong> is accurate up to the last call to <strong>{{ID3D11DeviceContext::End}}</strong>. For information about the queries that only require a call to <strong>{{ID3D11DeviceContext::End}}</strong> and about the type of data that <strong>GetData</strong> retrieves for each query, see <strong>{{D3D11_QUERY}}</strong>.</p><p>If <em>DataSize</em> is 0, <strong>GetData</strong> is only used to check status.</p><p>An application gathers counter data by calling <strong>{{ID3D11DeviceContext::Begin}}</strong>, issuing some graphics commands, calling <strong>{{ID3D11DeviceContext::End}}</strong>, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the <strong>Begin</strong> and <strong>End</strong> calls. For information about performance counter types, see <strong>{{D3D11_COUNTER}}</strong>. </p> + <p>This method returns one of the Direct3D 11 Return Codes. A return value of {{S_OK}} indicates that the data at <em>pData</em> is available for the calling application to access. A return value of {{S_FALSE}} indicates that the data is not yet available. If the data is not yet available, the application must call <strong>GetData</strong> until the data is available.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Asynchronous}}</strong> interface for the object about which <strong>GetData</strong> retrieves data.</p> </dd> + + + <dd> <p>Address of memory that will receive the data. If <strong>{{NULL}}</strong>, <strong>GetData</strong> will be used only to check status. The type of data output depends on the type of asynchronous interface.</p> </dd> + + + <dd> <p>Size of the data to retrieve or 0. Must be 0 when <em>pData</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Optional flags. Can be 0 or any combination of the flags enumerated by <strong>{{D3D11_ASYNC_GETDATA_FLAG}}</strong>.</p> </dd> + + + + + <p>Set a rendering predicate.</p> + <p>The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to <strong>{{ID3D11DeviceContext::Begin}}</strong> and <strong>{{ID3D11DeviceContext::End}}</strong> are invalid.</p><p>Use this method to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting predicate data of the predicate is equal to the <em>PredicateValue</em>. However, some predicates are only hints, so they may not actually prevent operations from being performed. </p><p>The primary usefulness of predication is to allow an application to issue rendering and resource manipulation commands without taking the performance hit of spinning, waiting for <strong>{{ID3D11DeviceContext::GetData}}</strong> to return. So, predication can occur while <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. Another way to think of it: an application can also use predication as a fallback, if it is possible that <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_FALSE}}</strong>. If <strong>{{ID3D11DeviceContext::GetData}}</strong> returns <strong>{{S_OK}}</strong>, the application can skip calling the rendering and resource manipulation commands manually with it's own application logic.</p><p>Rendering and resource manipulation commands for Direct3D?11 include these Draw, Dispatch, Copy, Update, Clear, Generate, and Resolve operations.</p><ul> <li> <strong>Draw</strong> </li> <li> <strong>DrawAuto</strong> </li> <li> <strong>DrawIndexed</strong> </li> <li> <strong>DrawIndexedInstanced</strong> </li> <li> <strong>DrawIndexedInstancedIndirect</strong> </li> <li> <strong>DrawInstanced</strong> </li> <li> <strong>DrawInstancedIndirect</strong> </li> <li> <strong>Dispatch</strong> </li> <li> <strong>DispatchIndirect</strong> </li> <li> <strong>CopyResource</strong> </li> <li> <strong>CopyStructureCount</strong> </li> <li> <strong>CopySubresourceRegion</strong> </li> <li> <strong>CopySubresourceRegion1</strong> </li> <li> <strong>CopyTiles</strong> </li> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateSubresource</strong> </li> <li> <strong>UpdateSubresource1</strong> </li> <li> <strong>UpdateTiles</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> <li> <strong>ClearRenderTargetView</strong> </li> <li> <strong>ClearUnorderedAccessViewFloat</strong> </li> <li> <strong>ClearUnorderedAccessViewUint</strong> </li> <li> <strong>ClearView</strong> </li> <li> <strong>ClearDepthStencilView</strong> </li> <li> <strong>GenerateMips</strong> </li> <li> <strong>ResolveSubresource</strong> </li> </ul><p>You can set a rendering predicate on an immediate or a deferred context. For info about immediate and deferred contexts, see Immediate and Deferred Rendering. </p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Predicate}}</strong> interface that represents the rendering predicate. A <strong>{{NULL}}</strong> value indicates "no" predication; in this case, the value of <em>PredicateValue</em> is irrelevant but will be preserved for <strong>{{ID3D11DeviceContext::GetPredication}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, rendering will be affected by when the predicate's conditions are met. If <strong>{{FALSE}}</strong>, rendering will be affected when the conditions are not met.</p> </dd> + + + + + <p>Bind an array of shader resources to the geometry shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set an array of sampler states to the geometry shader pipeline stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.</p> + <p>The maximum number of active render targets a device can have active at any given time is set by a #define in {{D3D11}}.h called <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to <strong>{{NULL}}</strong>.</p><p>If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to <strong>{{NULL}}</strong>, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>If the render-target views were created from an array resource type, all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.</p><p>The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.</p><p>Any combination of the eight slots for render targets can have a render target set or not set.</p><p>The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.</p> + <p>Returns nothing.</p> + + + + <p>Binds resources to the output-merger stage.</p> + <p> For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that {{UAVs}} must be given an offset so that they are placed in the slots after the render target views that are being bound. </p><strong>Note</strong>??{{RTVs}}, {{DSV}}, and {{UAVs}} cannot be set independently; they all need to be set at the same time.?<p>Two {{RTVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>Two {{UAVs}} conflict if they share a subresource (and therefore share the same resource).</p><p>An {{RTV}} conflicts with a {{UAV}} if they share a subresource or share a bind point.</p><p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> operates properly in the following situations: </p><ol> <li> <p><em>NumRTVs</em> != {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} and <em>NumUAVs</em> != {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li><em>{{UAVStartSlot}}</em> &gt;= <em>NumRTVs</em></li> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in the set of all <em>ppRenderTargetViews</em> and <em>ppUnorderedAccessViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> performs the following tasks: </p> <ul> <li>Unbinds all currently bound conflicting resources (stream-output target resources ({{SOTargets}}), compute shader ({{CS}}) {{UAVs}}, shader-resource views ({{SRVs}})).</li> <li> Binds <em>ppRenderTargetViews</em>, <em>ppDepthStencilView</em>, and <em>ppUnorderedAccessViews</em>. </li> </ul> </li> <li> <p><em>NumRTVs</em> == {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{UAVs}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>{{UAVStartSlot}}</em> + <em>NumUAVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppUnorderedAccessViews</em>. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{RTVs}} in slots &gt;= <em>{{UAVStartSlot}}</em></li> <li> All {{RTVs}} that conflict with any {{UAVs}} in <em>ppUnorderedAccessViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppUnorderedAccessViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppUnorderedAccessViews</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>ppDepthStencilView</em>, and the current depth-stencil view remains bound. </p> </li> <li> <p><em>NumUAVs</em> == {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} </p> <p> In this situation, <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds only {{RTVs}} and {{DSV}}. </p> <p> The following conditions must be true for <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to succeed and for the runtime to pass the bind information to the driver: </p> <ul> <li><em>NumRTVs</em> &lt;= 8 </li> <li> There must be no conflicts in <em>ppRenderTargetViews</em>. </li> <li><em>ppDepthStencilView</em> must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11. </li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> unbinds the following items: </p> <ul> <li> All {{UAVs}} in slots &lt; <em>NumRTVs</em></li> <li> All {{UAVs}} that conflict with any {{RTVs}} in <em>ppRenderTargetViews</em></li> <li> All currently bound resources ({{SOTargets}}, {{CS}} {{UAVs}}, {{SRVs}}) that conflict with <em>ppRenderTargetViews</em></li> </ul> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> binds <em>ppRenderTargetViews</em> and <em>ppDepthStencilView</em>. </p> <p><strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> ignores <em>{{UAVStartSlot}}</em>. </p> </li> </ol><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of render targets to bind (ranges between 0 and <strong>{{D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT}}</strong>). If this parameter is nonzero, the number of entries in the array to which <em>ppRenderTargetViews</em> points must equal the number in this parameter. If you set <em>NumRTVs</em> to {{D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL}} (0xffffffff), this method does not modify the currently bound render-target views ({{RTVs}}) and also does not modify depth-stencil view ({{DSV}}). </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s that represent the render targets to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumRTVs</em> is 0, no render targets are bound. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong> that represents the depth-stencil view to bind to the device. If this parameter is <strong>{{NULL}}</strong>, the depth-stencil state is not bound. </p> </dd> + + + <dd> <p>Index into a zero-based array to begin setting unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1).</p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1. {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64. </p> <p> For pixel shaders, <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views being bound. </p> </dd> + + + <dd> <p> Number of unordered-access views ({{UAVs}}) in <em>ppUnorderedAccessViews</em>. If you set <em>NumUAVs</em> to {{D3D11_KEEP_UNORDERED_ACCESS_VIEWS}} (0xffffffff), this method does not modify the currently bound unordered-access views. </p> <p> For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s that represent the unordered-access views to bind to the device. If this parameter is <strong>{{NULL}}</strong> and <em>NumUAVs</em> is 0, no unordered-access views are bound. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is relevant only for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Sets the depth-stencil state of the output-merger stage.</p> + <p>To create a depth-stencil state interface, call <strong>{{ID3D11Device::CreateDepthStencilState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to bind to the device. Set this to <strong>{{NULL}}</strong> to use the default state listed in <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>.</p> </dd> + + + <dd> <p>Reference value to perform against when doing a depth-stencil test. See remarks.</p> </dd> + + + + + <p>Set the target output buffers for the stream-output stage of the pipeline.</p> + <p>An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.</p><p> Calling this method using a buffer that is currently bound for writing will effectively bind <strong>{{NULL}}</strong> instead because a buffer cannot be bound as both an input and an output at the same time. </p><p>The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> The array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to bind to the device. The buffers must have been created with the <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong> flag. </p> </dd> + + + <dd> <p> Array of offsets to the output buffers from <em>ppSOTargets</em>, one offset for each buffer. The offset values must be in bytes. </p> </dd> + + + + + <p>Draw geometry of an unknown size.</p> + <p>A draw {{API}} submits work to the rendering pipeline. This {{API}} submits work of an unknown size that was processed by the input assembler, vertex shader, and stream-output stages; the work may or may not have gone through the geometry-shader stage.</p><p>After data has been streamed out to stream-output stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the {{SO}} stage buffers is maintained internally when the data is streamed out. This means that the {{CPU}} does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the {{SO}} stage buffers so that the layouts are available when the buffers are again bound to the input assembler.</p><p>The following diagram shows the DrawAuto process.</p><p></p><p>Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.</p><p>DrawAuto only works when drawing with one input buffer bound as an input to the {{IA}} stage at slot 0. Applications must create the {{SO}} buffer resource with both binding flags, <strong>{{D3D11_BIND_VERTEX_BUFFER}}</strong> and <strong>{{D3D11_BIND_STREAM_OUTPUT}}</strong>.</p><p>This {{API}} does not support indexing or instancing.</p><p>If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using <strong>{{D3D11_QUERY_SO_STATISTICS}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Draw indexed, instanced, {{GPU}}-generated primitives.</p> + <p> When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives. </p> </dd> + + + <dd> <p> Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives. </p> </dd> + + + + + <p>Draw instanced, {{GPU}}-generated primitives.</p> + <p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which is a buffer containing the {{GPU}} generated primitives.</p> </dd> + + + <dd> <p>Offset in <em>pBufferForArgs</em> to the start of the {{GPU}} generated primitives.</p> </dd> + + + + + <p>Execute a command list from a thread group.</p> + <p>You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z).</p><p>In the following illustration, assume a thread group with 50 threads where the size of the group is given by (5,5,2). A single thread is identified from a thread group with 50 threads in it, using the vector (4,1,1).</p><p></p><p>The following illustration shows the relationship between the parameters passed to <strong>{{ID3D11DeviceContext::Dispatch}}</strong>, Dispatch(5,3,2), the values specified in the numthreads attribute, numthreads(10,8,3), and values that will passed to the compute shader for the thread-related system values +({{SV_GroupIndex}},{{SV_DispatchThreadID}},{{SV_GroupThreadID}},{{SV_GroupID}}).</p><p></p> + <p>Returns nothing.</p> + + + <dd> <p>The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535).</p> </dd> + + + <dd> <p>The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1.</p> </dd> + + + + + <p>Execute a command list over one or more thread groups.</p> + <p>You call the <strong>DispatchIndirect</strong> method to execute commands in a compute shader.</p><p>When an application creates a buffer that is associated with the <strong>{{ID3D11Buffer}}</strong> interface that <em>pBufferForArgs</em> points to, the application must set the <strong>{{D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS}}</strong> flag in the <strong>MiscFlags</strong> member of the <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. To create the buffer, the application calls the <strong>{{ID3D11Device::CreateBuffer}}</strong> method and in this call passes a reference to <strong>{{D3D11_BUFFER_DESC}}</strong> in the <em>pDesc</em> parameter.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong>, which must be loaded with data that matches the argument list for <strong>{{ID3D11DeviceContext::Dispatch}}</strong>.</p> </dd> + + + <dd> <p>A byte-aligned offset between the start of the buffer and the arguments.</p> </dd> + + + + + <p>Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline.</p> + <p>To create a rasterizer state interface, call <strong>{{ID3D11Device::CreateRasterizerState}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + + <p>Bind an array of viewports to the rasterizer stage of the pipeline.</p> + <p>All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.</p><p>Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.</p><strong>Note</strong>??Even though you specify float values to the members of the <strong>{{D3D11_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p>Returns nothing.</p> + + + <dd> <p>Number of viewports to bind.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_VIEWPORT}}</strong> structures to bind to the device. See the structure page for details about how the viewport size is dependent on the device feature level which has changed between Direct3D 11 and Direct3D 10.</p> </dd> + + + + + <p>Bind an array of scissor rectangles to the rasterizer stage.</p> + <p>All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.</p><p> The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>). </p><p>Which scissor rectangle to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the {{SV_ViewportArrayIndex}} semantic then Direct3D will use the first scissor rectangle in the array.</p><p> Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see <strong>{{ID3D11DeviceContext::RSSetViewports}}</strong>). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of scissor rectangles to bind.</p> </dd> + + + <dd> <p> An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). </p> </dd> + + + + + <p>Copy a region from a source resource to a destination resource.</p> + <p>The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopySubresourceRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopySubresourceRegion</strong> call. Invalid parameters to <strong>CopySubresourceRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device.</p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. <strong>{{D3D11CalcSubresource}}</strong> is a helper function for calculating subresource indexes.</p><p><strong>CopySubresourceRegion</strong> performs the copy on the {{GPU}} (similar to a memcpy by the {{CPU}}). As a consequence, the source and destination resources:</p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must be the same type.</li> <li>Must have compatible {{DXGI}} formats (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopySubresourceRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>May not be currently mapped.</li> </ul><p><strong>CopySubresourceRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopySubresourceRegion</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p> If your app needs to copy an entire resource, we recommend to use <strong>{{ID3D11DeviceContext::CopyResource}}</strong> instead. </p><p><strong>CopySubresourceRegion</strong> is an asynchronous call, which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. For more information about pipeline stalls, see performance considerations.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> or <strong>CopySubresourceRegion</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> You can't use <strong>CopySubresourceRegion</strong> to copy mipmapped volume textures.?<strong>Note</strong>??<strong>Applies only to feature levels 9_x</strong> Subresources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopySubresourceRegion</strong>.?<strong>Note</strong>??If you use <strong>CopySubresourceRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box (see <strong>{{D3D11_BOX}}</strong>) that defines the source subresource that can be copied. If <strong>{{NULL}}</strong>, the entire source subresource is copied. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion</strong> doesn't perform a copy operation.</p> </dd> + + + + + <p>Copy the entire contents of the source resource to the destination resource using the {{GPU}}. </p> + <p>This method is unusual in that it causes the {{GPU}} to perform the copy operation (similar to a memcpy by the {{CPU}}). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:</p><ul> <li>Must be different resources.</li> <li>Must be the same type.</li> <li>Must have identical dimensions (including width, height, depth, and size as appropriate).</li> <li>Must have compatible {{DXGI}} formats, which means the formats must be identical or at least from the same type group. For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyResource</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> <li>Can't be currently mapped.</li> </ul><p><strong>CopyResource</strong> only supports copy; it doesn't support any stretch, color key, or blend. <strong>CopyResource</strong> can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.</p><p>You can't use an <strong>Immutable</strong> resource as a destination. You can use a <strong>depth-stencil</strong> resource as either a source or a destination provided that the feature level is {{D3D_FEATURE_LEVEL_10_1}} or greater. For feature levels 9_x, resources created with the {{D3D11_BIND_DEPTH_STENCIL}} flag can only be used as a source for <strong>CopyResource</strong>. Resources created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled, the call to <strong>{{ID3D11DeviceContext::CopyResource}}</strong> fails. Use <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve a multisampled resource to a resource that is not multisampled.</p><p>The method is an asynchronous call, which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. For more info, see performance considerations.</p><p>We recommend to use <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> instead if you only need to copy a portion of the data in a resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the destination resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface that represents the source resource.</p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>For a shader-constant buffer; set <em>pDstBox</em> to <strong>{{NULL}}</strong>. It is not possible to use this method to partially update a shader-constant buffer.</p><p>A resource cannot be used as a destination if:</p><ul> <li>the resource is created with <strong>immutable</strong> or <strong>dynamic</strong> usage.</li> <li>the resource is created as a depth-stencil resource.</li> <li>the resource is created with multisampling capability (see <strong>{{DXGI_SAMPLE_DESC}}</strong>).</li> </ul><p>When <strong>UpdateSubresource</strong> returns, the application is free to change or even free the data pointed to by <em>pSrcData</em> because the method has already copied/snapped away the original contents.</p><p>The performance of <strong>UpdateSubresource</strong> depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a <strong>Draw</strong> call and later calls <strong>UpdateSubresource</strong> on the same vertex buffer before the <strong>Draw</strong> call is actually executed by the {{GPU}}.</p><ul> <li>When there is contention for the resource, <strong>UpdateSubresource</strong> will perform 2 copies of the source data. First, the data is copied by the {{CPU}} to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the {{GPU}} to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by {{GPU}} when the command buffer is flushed.</li> <li>When there is no resource contention, the behavior of <strong>UpdateSubresource</strong> is dependent on which is faster (from the {{CPU}}'s perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the {{CPU}} copy the data to the final resource location. This is dependent on the architecture of the underlying system.</li> </ul><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?<p>To better understand the source row pitch and source depth pitch parameters, the following illustration shows a 3D volume texture.</p><p></p><p>Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is {{DXGI_FORMAT_R32G32B32A32_FLOAT}}, the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.</p><p>To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:</p><ul> <li>Source Row Pitch = [size of one element in bytes] * [number of elements in one row]</li> <li>Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]</li> </ul><p>In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:</p><ul> <li>Source Row Pitch = 16 * 2 = 32</li> <li>Source Depth Pitch = 16 * 2 * 3 = 96</li> </ul><p>The following illustration shows the resource as it is laid out in memory.</p><p></p><p>For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by <em>pData</em> to [(120,100)..(200,220)] in the destination texture. Also assume that <em>rowPitch</em> has been initialized with the proper value (as explained above). <strong>front</strong> and <strong>back</strong> are set to 0 and 1 respectively, because by having <strong>front</strong> equal to <strong>back</strong>, the box is technically empty.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 100; +destRegion.bottom = 220; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.</p><pre> {{D3D11_BOX}} destRegion; +destRegion.left = 120; +destRegion.right = 200; +destRegion.top = 0; +destRegion.bottom = 1; +destRegion.front = 0; +destRegion.back = 1; pd3dDeviceContext-&gt;UpdateSubresource( pDestTexture, 0, &amp;destRegion, pData, rowPitch, 0 ); +</pre><p>For info about various resource types and how <strong>UpdateSubresource</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource (see <strong>{{ID3D11Resource}}</strong>).</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D11_BOX}}</strong>).</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + + + <p>Copies data from a buffer holding variable length data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to <strong>{{ID3D11Buffer}}</strong>. This can be any buffer resource that other copy commands, such as <strong>{{ID3D11DeviceContext::CopyResource}}</strong> or <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>, are able to write to.</p> </dd> + + + <dd> <p>Offset from the start of <em>pDstBuffer</em> to write 32-bit {{UINT}} structure (vertex) count from <em>pSrcView</em>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> of a Structured Buffer resource created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created. These types of resources have hidden counters tracking "how many" records have been written.</p> </dd> + + + + + <p>Set all the elements in a render target to one value.</p> + <p>Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p><p>When using <strong>{{D3D_FEATURE_LEVEL_9_x}}</strong>, <strong>ClearRenderTargetView</strong> only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the render target.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to fill the render target with.</p> </dd> + + + + + <p>Clears an unordered access resource with bit-precise values.</p> + <p>This {{API}} copies the lower ni bits from each array element i to the corresponding channel, where ni is the number of bits in the ith channel of the resource format (for example, {{R8G8B8_FLOAT}} has 8 bits for the first 3 channels). This works on any {{UAV}} with no format conversion. For a raw or structured buffer view, only the first array element value is used.</p> + <p>Returns nothing.</p> + + + + <p>Clears an unordered access resource with a float value.</p> + <p>This {{API}} works on {{FLOAT}}, {{UNORM}}, and {{SNORM}} unordered access views ({{UAVs}}), with format conversion from {{FLOAT}} to *{{NORM}} where appropriate. On other {{UAVs}}, the operation is invalid and the call will not reach the driver.</p> + <p>Returns nothing.</p> + + + + <p>Clears the depth-stencil resource.</p> + <table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 11/10:</p> <p>Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.</p> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to the depth stencil to be cleared.</p> </dd> + + + <dd> <p>Identify the type of data to clear (see <strong>{{D3D11_CLEAR_FLAG}}</strong>).</p> </dd> + + + <dd> <p>Clear the depth buffer with this value. This value will be clamped between 0 and 1.</p> </dd> + + + <dd> <p>Clear the stencil buffer with this value.</p> </dd> + + + + + <p>Generates mipmaps for the given shader resource.</p> + <p>You can call <strong>GenerateMips</strong> on any shader-resource view to generate the lower mipmap levels for the shader resource. <strong>GenerateMips</strong> uses the largest mipmap level of the view to recursively generate the lower levels of the mip and stops with the smallest level that is specified by the view. If the base resource wasn't created with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong>, and <strong>{{D3D11_RESOURCE_MISC_GENERATE_MIPS}}</strong>, the call to <strong>GenerateMips</strong> has no effect.</p><p>Feature levels 9.1, 9.2, and 9.3 can't support automatic generation of mipmaps for 3D (volume) textures.</p><p>Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:</p><pre> {{DXGI_FORMAT_R8G8B8A8_UNORM}} +{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B5G6R5_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM}} +{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}} +{{DXGI_FORMAT_B8G8R8X8_UNORM}} +{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}} +</pre><p>Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:</p><pre> {{DXGI_FORMAT_R16G16B16A16_FLOAT}} +{{DXGI_FORMAT_R16G16B16A16_UNORM}} +{{DXGI_FORMAT_R16G16_FLOAT}} +{{DXGI_FORMAT_R16G16_UNORM}} +{{DXGI_FORMAT_R32_FLOAT}} +</pre><p>Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:</p><pre> {{DXGI_FORMAT_R32G32B32A32_FLOAT}} +{{DXGI_FORMAT_B4G4R4A4}} (optional) +</pre><p>Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:</p><pre> {{DXGI_FORMAT_R32G32B32_FLOAT}} (optional) +{{DXGI_FORMAT_R16G16B16A16_SNORM}} +{{DXGI_FORMAT_R32G32_FLOAT}} +{{DXGI_FORMAT_R10G10B10A2_UNORM}} +{{DXGI_FORMAT_R11G11B10_FLOAT}} +{{DXGI_FORMAT_R8G8B8A8_SNORM}} +{{DXGI_FORMAT_R16G16_SNORM}} +{{DXGI_FORMAT_R8G8_UNORM}} +{{DXGI_FORMAT_R8G8_SNORM}} +{{DXGI_FORMAT_R16_FLOAT}} +{{DXGI_FORMAT_R16_UNORM}} +{{DXGI_FORMAT_R16_SNORM}} +{{DXGI_FORMAT_R8_UNORM}} +{{DXGI_FORMAT_R8_SNORM}} +{{DXGI_FORMAT_A8_UNORM}} +{{DXGI_FORMAT_B5G5R5A1_UNORM}} (optional) +</pre><p>For all other unsupported formats, <strong>GenerateMips</strong> will silently fail.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11ShaderResourceView}}</strong> interface that represents the shader resource.</p> </dd> + + + + + <p>Sets the minimum level-of-detail ({{LOD}}) for a resource.</p> + <p>To use a resource with <strong>SetResourceMinLOD</strong>, you must set the <strong>{{D3D11_RESOURCE_MISC_RESOURCE_CLAMP}}</strong> flag when you create that resource.</p><p>For Direct3D 10 and Direct3D 10.1, when sampling from a texture resource in a shader, the sampler can define a minimum {{LOD}} clamp to force sampling from less detailed mip levels. For Direct3D 11, this functionality is extended from the sampler to the entire resource. Therefore, the application can specify the highest-resolution mip level of a resource that is available for access. This restricts the set of mip levels that are required to be resident in {{GPU}} memory, thereby saving memory.</p><p>The set of mip levels resident per-resource in {{GPU}} memory can be specified by the user.</p><p>Minimum {{LOD}} affects all of the resident mip levels. Therefore, only the resident mip levels can be updated and read from.</p><p>All methods that access texture resources must adhere to minimum {{LOD}} clamps.</p><p>Empty-set accesses are handled as out-of-bounds cases.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> that represents the resource.</p> </dd> + + + <dd> <p>The level-of-detail, which ranges between 0 and the maximum number of mipmap levels of the resource. For example, the maximum number of mipmap levels of a 1D texture is specified in the <strong>MipLevels</strong> member of the <strong>{{D3D11_TEXTURE1D_DESC}}</strong> structure.</p> </dd> + + + + + <p>Gets the minimum level-of-detail ({{LOD}}).</p> + <p>Returns the minimum {{LOD}}.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> which represents the resource.</p> </dd> + + + + + <p>Copy a multisampled resource into a non-multisampled resource.</p> + <p>This {{API}} is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.</p><p>The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this:</p><table> <tr><th>Scenario</th><th>Requirements</th></tr> <tr><td>Source and destination are prestructured and typed</td><td>Both the source and destination must have identical formats and that format must be specified in the Format parameter.</td></tr> <tr><td>One resource is prestructured and typed and the other is prestructured and typeless</td><td>The typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is {{DXGI_FORMAT_R32_FLOAT}} and the typeless resource is {{DXGI_FORMAT_R32_TYPELESS}}). The format of the typed resource must be specified in the Format parameter.</td></tr> <tr><td>Source and destination are prestructured and typeless</td><td>Both the source and desintation must have the same typeless format (i.e. both must have {{DXGI_FORMAT_R32_TYPELESS}}), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are {{DXGI_FORMAT_R32_TYPELESS}} then {{DXGI_FORMAT_R32_FLOAT}} could be specified in the Format parameter). <p>For example, given the {{DXGI_FORMAT_R16G16B16A16_TYPELESS}} format:</p> <ul> <li>The source (or dest) format could be {{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>The dest (or source) format could be {{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> </td></tr> </table><p>?</p> + <p>Returns nothing.</p> + + + <dd> <p>Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D11Resource}}</strong>.</p> </dd> + + + <dd> <p>A zero-based index, that identifies the destination subresource. Use <strong>{{D3D11CalcSubresource}}</strong> to calculate the index.</p> </dd> + + + <dd> <p>Source resource. Must be multisampled.</p> </dd> + + + <dd> <p>The source subresource of the source resource.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.</p> </dd> + + + + + <p>Queues commands from a command list onto a device.</p> + <p>Use this method to play back a command list that was recorded by a deferred context on any thread.</p><p> A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto the immediate context is required for the recorded commands to be executed on the graphics processing unit ({{GPU}}). A call to <strong>ExecuteCommandList</strong> of a command list from a deferred context onto another deferred context can be used to merge recorded lists. But to run the commands from the merged deferred command list on the {{GPU}}, you need to execute them on the immediate context. </p><p> This method performs some runtime validation related to queries. Queries that are begun in a device context cannot be manipulated indirectly by executing a command list (that is, Begin or End was invoked against the same query by the deferred context which generated the command list). If such a condition occurs, the ExecuteCommandList method does not execute the command list. However, the state of the device context is still maintained, as would be expected (<strong>{{ID3D11DeviceContext::ClearState}}</strong> is performed, unless the application indicates to preserve the device context state). </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to an <strong>{{ID3D11CommandList}}</strong> interface that encapsulates a command list. </p> </dd> + + + <dd> <p> A Boolean flag that determines whether the target context state is saved prior to and restored after the execution of a command list. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that no state shall be saved or restored, which causes the target context to return to its default state after the command list executes. Applications should typically use <strong>{{FALSE}}</strong> unless they will restore the state to be nearly equivalent to the state that the runtime would restore if <strong>{{TRUE}}</strong> were passed. When applications use <strong>{{FALSE}}</strong>, they can avoid unnecessary and inefficient state transitions. </p> </dd> + + + + + <p>Bind an array of shader resources to the hull-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set a hull shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a hull shader (see <strong>{{ID3D11HullShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the hull-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + + <p>Set the constant buffers used by the hull-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{HSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + + <p>Bind an array of shader resources to the domain-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Set a domain shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Pointer to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage. </p> </dd> + + + <dd> <p> A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces. </p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the domain-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre> //Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the domain-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p> If the application wants the shader to access other parts of the buffer, it must call the <strong>{{DSSetConstantBuffers1}}</strong> method instead. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device. </p> </dd> + + + + + <p>Bind an array of shader resources to the compute-shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p>Sets an array of views for an unordered resource.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index of the first element in the zero-based array to begin setting (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1). {{D3D11_1_UAV_SLOT_COUNT}} is defined as 64.</p> </dd> + + + <dd> <p> Number of views to set (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D11UnorderedAccessView}}</strong> references to be set by the method. </p> </dd> + + + <dd> <p> An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable {{UAV}}. <em>pUAVInitialCounts</em> is only relevant for {{UAVs}} that were created with either <strong>{{D3D11_BUFFER_UAV_FLAG_APPEND}}</strong> or <strong>{{D3D11_BUFFER_UAV_FLAG_COUNTER}}</strong> specified when the {{UAV}} was created; otherwise, the argument is ignored. </p> </dd> + + + + + <p>Set a compute shader to the device.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The maximum number of instances a shader can have is 256.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a compute shader (see <strong>{{ID3D11ComputeShader}}</strong>). Passing in <strong>{{NULL}}</strong> disables the shader for this pipeline stage.</p> </dd> + + + <dd> <p>A reference to an array of class-instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to <strong>{{NULL}}</strong> if the shader does not use any interfaces.</p> </dd> + + + <dd> <p>The number of class-instance interfaces in the array.</p> </dd> + + + + + <p>Set an array of sampler states to the compute-shader stage.</p> + <p>Any sampler may be set to <strong>{{NULL}}</strong>; this invokes the default state, which is defined to be the following.</p><pre>//Default sampler state: +{{D3D11_SAMPLER_DESC}} SamplerDesc; +SamplerDesc.Filter = {{D3D11_FILTER_MIN_MAG_MIP_LINEAR}}; +SamplerDesc.AddressU = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressV = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.AddressW = {{D3D11_TEXTURE_ADDRESS_CLAMP}}; +SamplerDesc.MipLODBias = 0; +SamplerDesc.MaxAnisotropy = 1; +SamplerDesc.ComparisonFunc = {{D3D11_COMPARISON_NEVER}}; +SamplerDesc.BorderColor[0] = 1.0f; +SamplerDesc.BorderColor[1] = 1.0f; +SamplerDesc.BorderColor[2] = 1.0f; +SamplerDesc.BorderColor[3] = 1.0f; +SamplerDesc.MinLOD = -{{FLT_MAX}}; +SamplerDesc.MaxLOD = {{FLT_MAX}}; </pre><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting samplers to (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>). See Remarks.</p> </dd> + + + + + <p>Sets the constant buffers used by the compute-shader stage.</p> + <p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of <strong>{{ID3D11Buffer}}</strong> resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer. </p><p>If the application wants the shader to access other parts of the buffer, it must call the <strong>{{CSSetConstantBuffers1}}</strong> method instead. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to <strong>{{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}}</strong> - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + + + <p>Get the constant buffers used by the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Bind an array of shader resources to the pixel shader stage.</p> + <p>If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this {{API}} will fill the destination shader resource slot with <strong>{{NULL}}</strong>.</p><p>For information about creating shader-resource views, see <strong>{{ID3D11Device::CreateShaderResourceView}}</strong>.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to set to the device.</p> </dd> + + + + + <p> Get the pixel shader currently set on the device. </p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed, to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns nothing. </p> + + + <dd> <p> Address of a reference to a pixel shader (see <strong>{{ID3D11PixelShader}}</strong>) to be returned by the method. </p> </dd> + + + <dd> <p> Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>). </p> </dd> + + + <dd> <p> The number of class-instance elements in the array. </p> </dd> + + + + + <p>Get an array of sampler states from the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the vertex shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a vertex shader (see <strong>{{ID3D11VertexShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get the constant buffers used by the pixel shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get a reference to the input-layout object that is bound to the input-assembler stage.</p> + <p>For information about creating an input-layout object, see Creating the Input-Layout Object.</p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the input-layout object (see <strong>{{ID3D11InputLayout}}</strong>), which describes the input buffers that will be read by the {{IA}} stage.</p> </dd> + + + + + <p>Get the vertex buffers bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>The input slot of the first vertex buffer to get. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to {{D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT}} - 1) are available; the maximum number of input slots depends on the feature level.</p> </dd> + + + <dd> <p>The number of vertex buffers to get starting at the offset. The number of buffers (plus the starting slot) cannot exceed the total number of {{IA}}-stage input slots.</p> </dd> + + + <dd> <p>A reference to an array of vertex buffers returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Pointer to an array of stride values returned by the method; one stride value for each buffer in the vertex-buffer array. Each stride value is the size (in bytes) of the elements that are to be used from that vertex buffer.</p> </dd> + + + <dd> <p>Pointer to an array of offset values returned by the method; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.</p> </dd> + + + + + <p>Get a reference to the index buffer that is bound to the input-assembler stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to an index buffer returned by the method (see <strong>{{ID3D11Buffer}}</strong>).</p> </dd> + + + <dd> <p>Specifies format of the data in the index buffer (see <strong>{{DXGI_FORMAT}}</strong>). These formats provide the size and type of the data in the buffer. The only formats allowed for index buffer data are 16-bit ({{DXGI_FORMAT_R16_UINT}}) and 32-bit ({{DXGI_FORMAT_R32_UINT}}) integers.</p> </dd> + + + <dd> <p>Offset (in bytes) from the start of the index buffer, to the first index to use.</p> </dd> + + + + + <p>Get the constant buffers used by the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the geometry shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a geometry shader (see <strong>{{ID3D11GeometryShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the type of primitive, and ordering of the primitive data (see <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>).</p> </dd> + + + + + <p>Get the vertex shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler states from the vertex shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Arry of sampler-state interface references (see <strong>{{ID3D11SamplerState}}</strong>) to be returned by the device.</p> </dd> + + + + + <p>Get the rendering predicate state.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>). Value stored here will be <strong>{{NULL}}</strong> upon device creation.</p> </dd> + + + <dd> <p>Address of a boolean to fill with the predicate comparison value. <strong>{{FALSE}}</strong> upon device creation.</p> </dd> + + + + + <p>Get the geometry shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the geometry shader pipeline stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of render targets to retrieve.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s which represent render target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of a render target is not needed. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not needed.</p> </dd> + + + + + <p>Get references to the resources bound to the output-merger stage.</p> + <p> Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>The number of render-target views to retrieve.</p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11RenderTargetView}}</strong>s, which represent render-target views. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of render-target views is not required. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{ID3D11DepthStencilView}}</strong>, which represents a depth-stencil view. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of the depth-stencil view is not required. </p> </dd> + + + <dd> <p> Index into a zero-based array to begin retrieving unordered-access views (ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - 1). For pixel shaders <em>{{UAVStartSlot}}</em> should be equal to the number of render-target views that are bound. </p> </dd> + + + <dd> <p> Number of unordered-access views to return in <em>ppUnorderedAccessViews</em>. This number ranges from 0 to {{D3D11_PS_CS_UAV_REGISTER_COUNT}} - <em>{{UAVStartSlot}}</em>. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{ID3D11UnorderedAccessView}}</strong>s, which represent unordered-access views that are retrieved. Specify <strong>{{NULL}}</strong> for this parameter when retrieval of unordered-access views is not required. </p> </dd> + + + + + <p>Set the blend state of the output-merger stage.</p> + <p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>blend option</strong> controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>blend operation</strong> controls how the blending stage mathematically combines these modulated values.</p><p>To create a blend-state interface, call <strong>{{ID3D11Device::CreateBlendState}}</strong>.</p><p>Passing in <strong>{{NULL}}</strong> for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p>A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.</p><p> The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. </p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>). Pass <strong>{{NULL}}</strong> for a default blend state. For more info about default blend state, see Remarks.</p> </dd> + + + <dd> <p>Array of blend factors, one for each {{RGBA}} component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage uses the non-{{NULL}} array of blend factors. If you didn't create the blend-state object with <strong>{{D3D11_BLEND_BLEND_FACTOR}}</strong> or <strong>{{D3D11_BLEND_INV_BLEND_FACTOR}}</strong>, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors, and you can later call <strong>{{ID3D11DeviceContext::OMGetBlendState}}</strong> to retrieve the blend factors. If you pass <strong>{{NULL}}</strong>, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.</p> </dd> + + + <dd> <p>32-bit sample coverage. The default value is 0xffffffff. See remarks.</p> </dd> + + + + + <p>Gets the depth-stencil state of the output-merger stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> Address of a reference to a depth-stencil state interface (see <strong>{{ID3D11DepthStencilState}}</strong>) to be filled with information from the device. </p> </dd> + + + <dd> <p>Pointer to the stencil reference value used in the depth-stencil test.</p> </dd> + + + + + <p>Get the target output buffers for the stream-output stage of the pipeline.</p> + <p>A maximum of four output buffers can be retrieved.</p><p> The offsets to the output buffers pointed to in the returned <em>ppSOTargets</em> array may be assumed to be -1 (append), as defined for use in <strong>{{ID3D11DeviceContext::SOSetTargets}}</strong>. </p><p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p>Number of buffers to get.</p> </dd> + + + <dd> <p> An array of output buffers (see <strong>{{ID3D11Buffer}}</strong>) to be retrieved from the device. </p> </dd> + + + + + <p> Gets a reference to the data contained in a subresource, and denies the {{GPU}} access to that subresource. </p> + <p> If you call <strong>Map</strong> on a deferred context, you can only pass <strong>{{D3D11_MAP_WRITE_DISCARD}}</strong>, <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>, or both to the <em>MapType</em> parameter. Other <strong>{{D3D11_MAP}}</strong>-typed values are not supported for a deferred context. </p><strong>Note</strong>?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views ({{SRVs}}) of dynamic buffers with <strong>{{D3D11_MAP_WRITE_NO_OVERWRITE}}</strong>. The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call <strong>{{ID3D11Device::CheckFeatureSupport}}</strong> with <strong>{{D3D11_FEATURE_D3D11_OPTIONS}}</strong>. <strong>CheckFeatureSupport</strong> fills members of a <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure with the device's features. The relevant members here are <strong>MapNoOverwriteOnDynamicConstantBuffer</strong> and <strong>MapNoOverwriteOnDynamicBufferSRV</strong>.?<p> For info about how to use <strong>Map</strong>, see How to: Use dynamic resources. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p><p> This method also returns <strong>{{DXGI_ERROR_WAS_STILL_DRAWING}}</strong> if <em>MapFlags</em> specifies <strong>{{D3D11_MAP_FLAG_DO_NOT_WAIT}}</strong> and the {{GPU}} is not yet finished with the resource. </p><p> This method also returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if <em>MapType</em> allows any {{CPU}} read access and the video card has been removed. </p><p> For more information about these error codes, see {{DXGI_ERROR}}. </p> + + + + <p>Gets the array of viewports bound to the rasterizer stage.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a variable that, on input, specifies the number of viewports (ranges from 0 to <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong>) in the <em>pViewports</em> array; on output, the variable contains the actual number of viewports that are bound to the rasterizer stage. If <em>pViewports</em> is <strong>{{NULL}}</strong>, <strong>{{RSGetViewports}}</strong> fills the variable with the number of viewports currently bound.</p> <strong>Note</strong>?? In some versions of the Windows {{SDK}}, a debug device will raise an exception if the input value in the variable to which <em>pNumViewports</em> points is greater than <strong>{{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}</strong> even if <em>pViewports</em> is <strong>{{NULL}}</strong>. The regular runtime ignores the value in the variable to which <em>pNumViewports</em> points when <em>pViewports</em> is <strong>{{NULL}}</strong>. This behavior of a debug device might be corrected in a future release of the Windows {{SDK}}. ? </dd> + + + <dd> <p> An array of <strong>{{D3D11_VIEWPORT}}</strong> structures for the viewports that are bound to the rasterizer stage. If the number of viewports (in the variable to which <em>pNumViewports</em> points) is greater than the actual number of viewports currently bound, unused elements of the array contain 0. For info about how the viewport size depends on the device feature level, which has changed between Direct3D 11 and Direct3D 10, see <strong>{{D3D11_VIEWPORT}}</strong>. </p> </dd> + + + + + <p>Get the array of scissor rectangles bound to the rasterizer stage.</p> + <p>Returns nothing.</p> + + + <dd> <p>The number of scissor rectangles (ranges between 0 and {{D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}) bound; set <em>pRects</em> to <strong>{{NULL}}</strong> to use <em>pNumRects</em> to see how many rectangles would be returned.</p> </dd> + + + <dd> <p>An array of scissor rectangles (see <strong>{{D3D11_RECT}}</strong>). If NumRects is greater than the number of scissor rects currently bound, then unused members of the array will contain 0.</p> </dd> + + + + + <p>Get the hull-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the hull shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a hull shader (see <strong>{{ID3D11HullShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the constant buffers used by the hull-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + + <p>Get the domain-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Get the domain shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a domain shader (see <strong>{{ID3D11DomainShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the domain-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Get the compute-shader resources.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to {{D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of <strong>shader resource view</strong> interfaces to be returned by the device.</p> </dd> + + + + + <p>Gets an array of views for an unordered resource.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call <strong>{{IUnknown::Release}}</strong> on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index of the first element in the zero-based array to return (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of views to get (ranges from 0 to {{D3D11_1_UAV_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>A reference to an array of interface references (see <strong>{{ID3D11UnorderedAccessView}}</strong>) to get.</p> </dd> + + + + + <p>Get the compute shader currently set on the device.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Address of a reference to a Compute shader (see <strong>{{ID3D11ComputeShader}}</strong>) to be returned by the method.</p> </dd> + + + <dd> <p>Pointer to an array of class instance interfaces (see <strong>{{ID3D11ClassInstance}}</strong>).</p> </dd> + + + <dd> <p>The number of class-instance elements in the array.</p> </dd> + + + + + <p>Get an array of sampler state interfaces from the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into a zero-based array to begin getting samplers from (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to {{D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Pointer to an array of sampler-state interfaces (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Get the constant buffers used by the compute-shader stage.</p> + <p>Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - StartSlot).</p> </dd> + + + <dd> <p>Array of constant buffer interface references (see <strong>{{ID3D11Buffer}}</strong>) to be returned by the method.</p> </dd> + + + + + <p>Restore all default settings.</p> + <p>This method resets any device context to the default settings. This sets all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to <strong>{{NULL}}</strong>. The primitive topology is set to {{UNDEFINED}}.</p><p>For a scenario where you would like to clear a list of commands recorded so far, call <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong> and throw away the resulting <strong>{{ID3D11CommandList}}</strong>.</p> + <p>Returns nothing.</p> + + + + <p>Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}).</p> + <p>Most applications don't need to call this method. If an application calls this method when not necessary, it incurs a performance penalty. Each call to <strong>Flush</strong> incurs a significant amount of overhead.</p><p>When Microsoft Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. <strong>Flush</strong> sends those commands to the {{GPU}} for processing. Typically, the Direct3D runtime sends these commands to the {{GPU}} automatically whenever the runtime determines that they need to be sent, such as when the command buffer is full or when an application maps a resource. <strong>Flush</strong> sends the commands manually.</p><p>We recommend that you use <strong>Flush</strong> when the {{CPU}} waits for an arbitrary amount of time (such as when you call the <strong>Sleep</strong> function).</p><p>Because <strong>Flush</strong> operates asynchronously, it can return either before or after the {{GPU}} finishes executing the queued graphics commands. However, the graphics commands eventually always complete. You can call the <strong>{{ID3D11Device::CreateQuery}}</strong> method with the <strong>{{D3D11_QUERY_EVENT}}</strong> value to create an event query; you can then use that event query in a call to the <strong>{{ID3D11DeviceContext::GetData}}</strong> method to determine when the {{GPU}} is finished processing the graphics commands. +</p><p>Microsoft Direct3D?11 defers the destruction of objects. Therefore, an application can't rely upon objects immediately being destroyed. By calling <strong>Flush</strong>, you destroy any objects whose destruction was deferred. If an application requires synchronous destruction of an object, we recommend that the application release all its references, call <strong>{{ID3D11DeviceContext::ClearState}}</strong>, and then call <strong>Flush</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the type of device context.</p> + <p>A member of <strong>{{D3D11_DEVICE_CONTEXT_TYPE}}</strong> that indicates the type of device context.</p> + + + + <p>Gets the initialization flags associated with the current deferred context.</p> + <p>The GetContextFlags method gets the flags that were supplied to the <em>ContextFlags</em> parameter of <strong>{{ID3D11Device::CreateDeferredContext}}</strong>; however, the context flag is reserved for future use.</p> + + + + <p>Create a command list and record graphics commands into it.</p> + <p> Create a command list from a deferred context and record commands into it by calling <strong>FinishCommandList</strong>. Play back a command list with an immediate context by calling <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p><p> Immediate context state is cleared before and after a command list is executed. A command list has no concept of inheritance. Each call to <strong>FinishCommandList</strong> will record only the state set since any previous call to <strong>FinishCommandList</strong>. </p><p> For example, the state of a device context is its render state or pipeline state. To retrieve device context state, an application can call <strong>{{ID3D11DeviceContext::GetData}}</strong> or <strong>{{ID3D11DeviceContext::GetPredication}}</strong>. </p><p> For more information about how to use <strong>FinishCommandList</strong>, see How to: Record a Command List. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns {{DXGI_ERROR_DEVICE_REMOVED}} if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.</li> <li> Returns {{DXGI_ERROR_INVALID_CALL}} if <strong>FinishCommandList</strong> cannot be called from the current context. See remarks. </li> <li>Returns {{E_OUTOFMEMORY}} if the application has exhausted available memory.</li> </ul> + + + <dd> <p> A Boolean flag that determines whether the runtime saves deferred context state before it executes <strong>FinishCommandList</strong> and restores it afterwards. Use <strong>{{TRUE}}</strong> to indicate that the runtime needs to save and restore the state. Use <strong>{{FALSE}}</strong> to indicate that the runtime will not save or restore any state. In this case, the deferred context will return to its default state after the call to <strong>FinishCommandList</strong> completes. For information about default state, see <strong>{{ID3D11DeviceContext::ClearState}}</strong>. Typically, use <strong>{{FALSE}}</strong> unless you restore the state to be nearly equivalent to the state that the runtime would restore if you passed <strong>{{TRUE}}</strong>. When you use <strong>{{FALSE}}</strong>, you can avoid unnecessary and inefficient state transitions. </p> <strong>Note</strong>?? This parameter does not affect the command list that the current call to <strong>FinishCommandList</strong> returns. However, this parameter affects the command list of the next call to <strong>FinishCommandList</strong> on the same deferred context. ? </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11CommandList}}</strong> interface reference is initialized with the recorded command list information. The resulting <strong>{{ID3D11CommandList}}</strong> object is immutable and can only be used with <strong>{{ID3D11DeviceContext::ExecuteCommandList}}</strong>. </p> </dd> + + + + + <p>Represents a hardware-accelerated video decoder for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> + + + + <p>Gets the parameters that were used to create the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that receives a description of the video stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that receives the decoder configuration.</p> </dd> + + + + + <p>Gets a handle to the driver.</p> + <p>The driver handle can be used to configure content protection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the driver.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the content description that was used to create this enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Queries whether the video processor supports a specified video format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The video format to query, specified as a <strong>{{DXGI_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the capabilities of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure that receives the capabilities.</p> </dd> + + + + + <p>Returns a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.</p> + <p>The capabilities defined in the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure are interdependent. Therefore, the driver can support multiple, distinct groups of these capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the group to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the frame-rate conversion capabilities.</p> </dd> + + + + + <p>Gets a list of custom frame rates that a video processor supports.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the frame-rate capability group. To get the maxmum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}} </strong> and check the <strong>RateConversionCapsCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>The zero-based index of the custom rate to retrieve. To get the maximum index, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> and check the <strong>CustomRateCount</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure.</p> <p>This index value is always relative to the capability group specified in the <em>TypeIndex</em> parameter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CUSTOM_RATE}}</strong> structure that receives the custom rate.</p> </dd> + + + + + <p>Gets the range of values for an image filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of image filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER_RANGE}}</strong> structure. The method fills the structure with the range of values for the specified filter.</p> </dd> + + + + + <p>Represents a video processor for Microsoft Direct3D?11.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> + + + + <p>Gets the content description that was used to create the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that receives the content description.</p> </dd> + + + + + <p>Gets the rate conversion capabilities of the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS}}</strong> structure that receives the rate conversion capabilities.</p> </dd> + + + + + <p>Provides a communication channel with the graphics driver or the Microsoft Direct3D runtime. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateAuthenticatedChannel}}</strong>.</p> + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes.</p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the authenticated channel.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the channel.</p> </dd> + + + + + <p>Represents a cryptographic session. </p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateCryptoSession}}</strong>.</p> + + + + <p>Gets the type of encryption that is supported by this session.</p> + <p>The application specifies the encryption type when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a {{GUID}} that specifies the encryption type. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets the decoding profile of the session.</p> + <p>The application specifies the profile when it creates the session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. </p> </dd> + + + + + <p>Gets the size of the driver's certificate chain.</p> + <p>To get the certificate, call <strong>{{ID3D11CryptoSession::GetCertificate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the size of the certificate chain, in bytes. </p> </dd> + + + + + <p>Gets the driver's certificate chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pCertificate</em> array, in bytes. To get the size of the certificate chain, call <strong>{{ID3D11CryptoSession::GetCertificateSize}}</strong>.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.</p> </dd> + + + + + <p>Gets a handle to the cryptographic session.</p> + <p>You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives a handle to the session.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video decoding.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video decoder output view. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the input surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorInputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor input view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p>Identifies the output surfaces that can be accessed during video processing.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorOutputView}}</strong>.</p> + + + + <p>Gets the properties of the video processor output view.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure. The method fills the structure with the view properties.</p> </dd> + + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + <p>Gets a reference to a decoder buffer.</p> + <p>The graphics driver allocates the buffers that are used for decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call <strong>{{ID3D11VideoContext::ReleaseDecoderBuffer}}</strong> to unlock the surface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>The type of buffer to retrieve, specified as a member of the <strong>{{D3D11_VIDEO_DECODER_BUFFER_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the size of the buffer, in bytes. </p> </dd> + + + <dd> <p>Receives a reference to the start of the memory buffer. </p> </dd> + + + + + <p>Releases a buffer that was obtained by calling the <strong>{{ID3D11VideoContext::GetDecoderBuffer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Starts a decoding operation to decode a video frame.</p> + <p>After this method is called, call <strong>{{ID3D11VideoContext::SubmitDecoderBuffers}}</strong> to perform decoding operations. When all decoding operations have been executed, call <strong>{{ID3D11VideoContext::DecoderEndFrame}}</strong>. </p><p>Each call to <strong>DecoderBeginFrame</strong> must have a matching call to <strong>DecoderEndFrame</strong>. In most cases you cannot nest <strong>DecoderBeginFrame</strong> calls, but some codecs, such as like {{VC}}-1, can have nested <strong>DecoderBeginFrame</strong> calls for special operations like post processing.</p><p>The following encryption scenarios are supported through the content key:</p><ul> <li>The decoder can choose to not encrypt every frame, for example it may only encrypt the I frames and not encrypt the P/B frames. In these scenario, the decoder will specify pContentKey = {{NULL}} and ContentKeySize = 0 for those frames that it does not encrypt.</li> <li>The decoder can choose to encrypt the compressed buffers using the session key. In this scenario, the decoder will specify a content key containing all zeros.</li> <li>The decoder can choose to encrypt the compressed buffers using a separate content key. In this scenario, the decoder will {{ECB}} encrypt the content key using the session key and pass the encrypted content key.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. <strong>{{D3DERR_WASSTILLDRAWING}}</strong> or <strong>{{E_PENDING}}</strong> is returned if the harware is busy, in which case the decoder should try to make the call again.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. This interface describes the resource that will receive the decoded frame. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoderOutputView}}</strong>.</p> </dd> + + + <dd> <p>The size of the content key that is specified in <em>pContentKey</em>. If <em>pContentKey</em> is {{NULL}}, set <em>ContentKeySize</em> to zero.</p> </dd> + + + <dd> <p>An optional reference to a content key that was used to encrypt the frame data. If no content key was used, set this parameter to <strong>{{NULL}}</strong>. If the caller provides a content key, the caller must use the session key to encrypt the content key.</p> </dd> + + + + + <p>Signals the end of a decoding operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p><p>When using feature levels 9_x, all partially encrypted buffers must use the same EncryptedBlockInfo, and partial encryption cannot be turned off on a per frame basis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Performs an extended function for decoding. This method enables extensions to the basic decoder functionality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_EXTENSION}}</strong> structure that contains data for the function.</p> </dd> + + + + + <p>Sets the target rectangle for the video processor.</p> + <p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor writes to the entire destination surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to apply the target rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the target rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the background color for the video processor.</p> + <p>The video processor uses the background color to fill areas of the target rectangle that do not contain a video image. Areas outside the target rectangle are not affected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the color is specified as a {{YCbCr}} value. Otherwise, the color is specified as an {{RGB}} value.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure that specifies the background color.</p> </dd> + + + + + <p>Sets the output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the alpha fill mode for data that the video processor writes to the render target.</p> + <p>To find out which fill modes the device supports, call the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> method. If the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL}}</strong> capability, the driver supports all of the fill modes. Otherwise, the <em>AlphaFillMode</em> parameter must be <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>. </p><p>The default fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The alpha fill mode, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>The zero-based index of an input stream. This parameter is used if <em>AlphaFillMode</em> is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>. Otherwise, the parameter is ignored.</p> </dd> + + + + + <p>Sets the amount of downsampling to perform on the output.</p> + <p>Downsampling is sometimes used to reduce the quality of premium content when other forms of content protection are not available. By default, downsampling is disabled.</p><p>If the <em>Enable</em> parameter is <strong>{{TRUE}}</strong>, the driver downsamples the composed image to the specified size, and then scales it back to the size of the target rectangle.</p><p>The width and height of <em>Size</em> must be greater than zero. If the size is larger than the target rectangle, downsampling does not occur.</p><p>To use this feature, the driver must support downsampling, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, downsampling is enabled. Otherwise, downsampling is disabled and the <strong>Size</strong> member is ignored. </p> </dd> + + + <dd> <p>The sampling size.</p> </dd> + + + + + <p>Specifies whether the video processor produces stereo video frames.</p> + <p>By default, the video processor produces mono video frames.</p><p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, stereo output is enabled. Otherwise, the video processor produces mono video frames.</p> </dd> + + + + + <p>Sets a driver-specific video processing state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the current target rectangle for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the target rectangle was explicitly set using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputTargetRect}}</strong> method. Receives the value {{FALSE}} if the target rectangle was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the target rectangle. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the current background color for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the background color is a {{YCbCr}} color, or <strong>{{FALSE}}</strong> if the background color is an {{RGB}} color.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_COLOR}}</strong> structure. The method fills in the structure with the background color.</p> </dd> + + + + + <p>Gets the current output color space for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure. The method fills in the structure with the output color space.</p> </dd> + + + + + <p>Gets the current alpha fill mode for the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the alpha fill mode, as a <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE}}</strong> value.</p> </dd> + + + <dd> <p>If the alpha fill mode is <strong>{{D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM}}</strong>, this parameter receives the zero-based index of an input stream. The input stream provides the alpha values for the alpha fill.</p> </dd> + + + + + <p>Gets the current level of downsampling that is performed by the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if downsampling was explicitly enabled using the <strong>{{ID3D11VideoContext::VideoProcessorSetOutputConstriction}}</strong> method. Receives the value <strong>{{FALSE}}</strong> if the downsampling was disabled or was never set.</p> </dd> + + + <dd> <p>If <em>Enabled</em> receives the value <strong>{{TRUE}}</strong>, this parameter receives the downsampling size. Otherwise, this parameter is ignored.</p> </dd> + + + + + <p>Queries whether the video processor produces stereo video frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo output is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets private state data from the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Specifies whether an input stream on the video processor contains interlaced or progressive frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies the interlacing.</p> </dd> + + + + + <p>Sets the color space for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> structure that specifies the color space.</p> </dd> + + + + + <p>Sets the rate at which the video processor produces output frames for an input stream.</p> + <p>The standard output rates are normal frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL}}</strong>) and half frame-rate (<strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF}}</strong>). In addition, the driver might support custom rates for rate conversion or inverse telecine. To get the list of custom rates, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate}}</strong>.</p><p>Depending on the output rate, the driver might need to convert the frame rate. If so, the value of <em>RepeatFrame</em> controls whether the driver creates interpolated frames or simply repeats input frames.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The output rate, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value.</p> </dd> + + + <dd> <p>Specifies how the driver performs frame-rate conversion, if required.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If <em>OutputRate</em> is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, this parameter specifies the exact output rate. Otherwise, this parameter is ignored and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the source rectangle for an input stream on the video processor.</p> + <p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p><p>If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, the video processor reads from the entire input surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the destination rectangle for an input stream on the video processor.</p> + <p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p><p>The default destination rectangle is an empty rectangle (0, 0, 0, 0). If this method is never called, or if the <em>Enable</em> parameter is <strong>{{FALSE}}</strong>, no data is written from this stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether to apply the destination rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the planar alpha for an input stream on the video processor.</p> + <p>To use this feature, the driver must support stereo video, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALHPA_STREAM}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p><p>Alpha blending is disabled by default. </p><p>For each pixel, the destination color value is computed as follows:</p><p><code>Cd = Cs * (As * Ap * Ae) + Cd * (1.0 - As * Ap * Ae)</code></p><p>where:</p><ul> <li><code>Cd</code> = The color value of the destination pixel</li> <li><code>Cs</code> = The color value of the source pixel</li> <li><code>As</code> = The per-pixel source alpha</li> <li><code>Ap</code> = The planar alpha value</li> <li><code>Ae</code> = The palette-entry alpha value, or 1.0 (see Note)</li> </ul><strong>Note</strong>??Palette-entry alpha values apply only to palettized color formats, and only when the device supports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability. Otherwise, this factor equals 1.0.?<p>The destination alpha value is computed according to the alpha fill mode. For more information, see <strong>{{ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether alpha blending is enabled.</p> </dd> + + + <dd> <p>The planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque). If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Sets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use the first 16 entries in the list. Formats with 8 bpp use the first 256 entries.</p><p>If a pixel has a palette index greater than the number of entries, the device treats the pixel as white with opaque alpha. For full-range {{RGB}}, this value is (255, 255, 255, 255); for {{YCbCr}} the value is (255, 235, 128, 128).</p><p>If the driver does not report the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE}}</strong> capability flag, every palette entry must have an alpha value of 0xFF (opaque). To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of elements in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to an array of palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation. The caller allocates the array.</p> </dd> + + + + + <p>Sets the pixel aspect ratio for an input stream on the video processor.</p> + <p>This function can only be called if the driver reports the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO}}</strong> capability. If this capability is not set, this function will have no effect.</p><p>Pixel aspect ratios of the form 0/n and n/0 are not valid.</p><p>The default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain valid values. Otherwise, the pixel aspect ratios are unspecified.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the source rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure that contains the pixel aspect ratio of the destination rectangle. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Sets the luma key for an input stream on the video processor.</p> + <p>To use this feature, the driver must support luma keying, indicated by the <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY}}</strong> capability flag. To query for this capability, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>. In addition, if the input format is {{RGB}}, the device must support the <strong>{{D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY}}</strong> capability.</p><p>The values of <em>Lower</em> and <em>Upper</em> give the lower and upper bounds of the luma key, using a nominal range of [0...1]. Given a format with <em>n</em> bits per channel, these values are converted to luma values as follows:</p><p><code>val = f * ((1 &lt;&lt; n)-1)</code></p><p>Any pixel whose luma value falls within the upper and lower bounds (inclusive) is treated as transparent.</p><p>For example, if the pixel format uses 8-bit luma, the upper bound is calculated as follows:</p><p><code>{{BYTE}} Y = {{BYTE}}(max(min(1.0, Upper), 0.0) * 255.0)</code></p><p>Note that the value is clamped to the range [0...1] before multiplying by 255.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether luma keying is enabled.</p> </dd> + + + <dd> <p>The lower bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + <dd> <p>The upper bound for the luma key. The valid range is [0?1]. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored.</p> </dd> + + + + + <p>Enables or disables stereo 3D video for an input stream on the video processor. In addition, this method specifies the layout of the video frames in memory.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies whether stereo 3D is enabled for this stream. If the value is <strong>{{FALSE}}</strong>, the remaining parameters of this method are ignored.</p> </dd> + + + <dd> <p>Specifies the layout of the two stereo views in memory, as a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the left view. Otherwise, frame 0 contains the right view. </p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> </ul> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, frame 0 contains the base view. Otherwise, frame 1 contains the base view.</p> <p>This parameter is ignored for the following stereo formats:</p> <ul> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}} </strong></li> <li><strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong></li> <li>When <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE}}</strong> is used and the application wants to convert the stereo data to mono, it can either:<ul> <li>Specify the base view as a mono input.</li> <li>Specify both resources and allow the driver to do the conversion from the base view. In this case, <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurface</strong> is considered frame 0 and <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}.hInputSurfaceRight</strong> is considered frame 1.</li> </ul> </li> </ul> </dd> + + + <dd> <p>A flag from the <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> enumeration, specifying whether one of the views is flipped.</p> </dd> + + + <dd> <p>For <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format, this parameter specifies how to generate the left and right views: </p> <ul> <li>If <em>MonoOffset</em> is positive, the right view is shifted to the right by that many pixels, and the left view is shifted to the left by the same amount. </li> <li>If <em>MonoOffset</em> is negative, the right view is shifted to the left by that many pixels, and the left view is shifted to right by the same amount.</li> </ul> <p>If <em>Format</em> is not <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong>, this parameter must be zero.</p> </dd> + + + + + <p>Enables or disables automatic processing features on the video processor.</p> + <p>By default, the driver might perform certain processing tasks automatically during the video processor blit. This method enables the application to disable these extra video processing features. For example, if you provide your own pixel shader for the video processor, you might want to disable the driver's automatic processing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, automatic processing features are enabled. If <strong>{{FALSE}}</strong>, the driver disables any extra video processing that it might be performing.</p> </dd> + + + + + <p>Enables or disables an image filter for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value.</p> <p>To query which filters the driver supports, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to enable the filter.</p> </dd> + + + <dd> <p>The filter level. If <em>Enable</em> is <strong>{{FALSE}}</strong>, this parameter is ignored. </p> <p>To find the valid range of levels for a specified filter, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange}}</strong>.</p> </dd> + + + + + <p>Sets a driver-specific state on a video processing stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the operation. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.</p> </dd> + + + + + <p>Gets the format of an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_FRAME_FORMAT}}</strong> value that specifies whether the stream contains interlaced or progressive frames.</p> </dd> + + + + + <p>Gets the color space for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_COLOR_SPACE}}</strong> value that specifies the color space.</p> </dd> + + + + + <p>Gets the rate at which the video processor produces output frames for an input stream. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE}}</strong> value that specifies the output rate.</p> </dd> + + + <dd> <p>Receives a Boolean value that specifies how the driver performs frame-rate conversion, if required. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Repeat frames.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Interpolate frames.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If the output rate is <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM}}</strong>, the method fills in this structure with the exact output rate. Otherwise, this parameter is ignored. </p> </dd> + + + + + <p>Gets the source rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the source rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source rectangle.</p> </dd> + + + + + <p>Gets the destination rectangle for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the destination rectangle is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the destination rectangle.</p> </dd> + + + + + <p>Gets the planar alpha for an input stream on the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if planar alpha is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque).</p> </dd> + + + + + <p>Gets the color-palette entries for an input stream on the video processor.</p> + <p>This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use 16 palette entries. Formats with 8 bpp use 256 entries.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The number of entries in the <em>pEntries</em> array.</p> </dd> + + + <dd> <p>A reference to a <strong>{{UINT}}</strong> array allocated by the caller. The method fills the array with the palette entries. For {{RGB}} streams, the palette entries use the <strong>{{DXGI_FORMAT_B8G8R8A8}}</strong> representation. For {{YCbCr}} streams, the palette entries use the <strong>{{DXGI_FORMAT_AYUV}}</strong> representation.</p> </dd> + + + + + <p>Gets the pixel aspect ratio for an input stream on the video processor. </p> + <p>When the method returns, if <em>*pEnabled</em> is <strong>{{TRUE}}</strong>, the <em>pSourceAspectRatio</em> and <em>pDestinationAspectRatio</em> parameters contain the pixel aspect ratios. Otherwise, the default pixel aspect ratio is 1:1 (square pixels).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the pixel aspect ratio is specified. Otherwise, receives the value <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_RATIONAL}}</strong> structure. If *<em>pEnabled</em> is <strong>{{TRUE}}</strong>, this parameter receives the pixel aspect ratio of the destination rectangle.</p> </dd> + + + + + <p>Gets the luma key for an input stream of the video processor. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if luma keying is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the lower bound for the luma key. The valid range is [0?1]. </p> </dd> + + + <dd> <p>Receives the upper bound for the luma key. The valid range is [0?1]. </p> </dd> + + + + + <p>Gets the stereo 3D format for an input stream on the video processor</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if stereo 3D is enabled for this stream, or <strong>{{FALSE}}</strong> otherwise. If the value is <strong>{{FALSE}}</strong>, ignore the remaining parameters.</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT}}</strong> value that specifies the layout of the two stereo views in memory.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the left view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the right view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>Frame 0 contains the base view.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>Frame 1 contains the base view.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE}}</strong> value. This value specifies whether one of the views is flipped. +</p> </dd> + + + <dd> <p>Receives the pixel offset used for <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET}}</strong> format. This parameter is ignored for other stereo formats.</p> </dd> + + + + + <p>Queries whether automatic processing features of the video processor are enabled.</p> + <p>Automatic processing refers to additional image processing that drivers might have performed on the image data prior to the application receiving the data. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if automatic processing features are enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the image filter settings for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>The filter to query, specified as a <strong>{{D3D11_VIDEO_PROCESSOR_FILTER}}</strong> value. </p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the image filter is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives the filter level.</p> </dd> + + + + + <p>Gets a driver-specific state for a video processing stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that identifies the state. The meaning of this {{GUID}} is defined by the graphics driver.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> buffer, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the private state data. </p> </dd> + + + + + <p>Performs a video processing operation on one or more input samples and writes the result to a Direct3D surface.</p> + <p>The maximum value of <em>StreamCount</em> is given in the <strong>MaxStreamStates</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}</strong> structure. The maximum number of streams that can be enabled at one time is given in the <strong>MaxInputStreams</strong> member of that structure. </p><p>If the output stereo mode is <strong>{{TRUE}}</strong>:</p><ul> <li>The output view must contain a texture array of two elements.</li> <li>At least one stereo stream must be specified.</li> <li>If multiple input streams are enabled, it is possible that one or more of the input streams may contain mono data.</li> </ul><p>Otherwise:</p><ul> <li>The output view must contain a single element.</li> <li>The stereo format cannot be <strong>{{D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO}}</strong> .</li> </ul><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface for the output surface. The output of the video processing operation will be written to this surface.</p> </dd> + + + <dd> <p>The frame number of the output video frame, indexed from zero. </p> </dd> + + + <dd> <p>The number of input streams to process.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_PROCESSOR_STREAM}}</strong> structures that contain information about the input streams. The caller allocates the array and fills in each structure. The number of elements in the array is given in the <em>StreamCount</em> parameter. </p> </dd> + + + + + <p>Establishes the session key for a cryptographic session. </p> + <p>The key exchange mechanism depends on the type of cryptographic session.</p><p>For {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}), the software decoder generates the secret key, encrypts the secret key by using the public key with {{RSAES}}-{{OAEP}}, and places the cipher text in the <em>pData</em> parameter. The actual size of the buffer for {{RSAES}}-{{OAEP}} is 256 bytes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>The size of the <em>pData</em> byte array, in bytes. </p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. </p> </dd> + + + + + <p>Reads encrypted data from a protected surface. </p> + <p>Not all drivers support this method. To query the driver capabilities, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK}}</strong> flag in the <strong>Caps</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p><p>Some drivers might require a separate key to decrypt the data that is read back. To check for this requirement, call <strong>GetContentProtectionCaps</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY}}</strong> flag. If this flag is present, call <strong>{{ID3D11VideoContext::GetEncryptionBltKey}}</strong> to get the decryption key.</p><p>This method has the following limitations:</p><ul> <li>Reading back sub-rectangles is not supported.</li> <li>Reading back partially encrypted surfaces is not supported.</li> <li>The protected surface must be either an off-screen plain surface or a render target.</li> <li>The destination surface must be a {{D3D11_USAGE_STAGING}} resource.</li> <li>The protected surface cannot be multisampled.</li> <li>Stretching and colorspace conversion are not supported.</li> </ul><p> This function does not honor a {{D3D11}} predicate that may have been set.</p><p> If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface of the cryptographic session.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the protected surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface that receives the encrypted data. +</p> </dd> + + + <dd> <p>A reference to a buffer that receives the initialization vector ({{IV}}). The caller allocates this buffer, but the driver generates the {{IV}}. </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. When the driver generates the first {{IV}}, it initializes the structure to a random number. For each subsequent {{IV}}, the driver simply increments the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. The application can validate that the same {{IV}} is never used more than once with the same key pair.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Writes encrypted data to a protected surface.</p> + <p>Not all hardware or drivers support this functionality for all cryptographic types. This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT}}</strong> cap is reported.</p><p>This method does not support writing to sub-rectangles of the surface.</p><p>If the hardware and driver support a content key:</p><ul> <li>The data is encrypted by the caller using the content key.</li> <li>The content key is encrypted by the caller using the session key.</li> <li>The encrypted content key is passed to the driver.</li> </ul><p> Otherwise, the data is encrypted by the caller using the session key and {{NULL}} is passed as the content key.</p><p>If the driver and hardware support partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted and which is not. If the entire buffer is encrypted, <em>pEncryptedBlockinfo</em> should be <strong>{{NULL}}</strong>.</p><p>The <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> allows the application to indicate which bytes in the buffer are encrypted. This is specified in bytes, so the application must ensure that the encrypted blocks match the {{GPU}}?s crypto block alignment.</p><p>This function does not honor a {{D3D11}} predicate that may have been set.</p><p>If the application uses <strong>{{D3D11}} quries</strong>, this function may not be accounted for with <strong>{{D3D11_QUERY_EVENT}}</strong> and <strong>{{D3D11_QUERY_TIMESTAMP}}</strong> when using feature levels lower than 11. <strong>{{D3D11_QUERY_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to the surface that contains the source data.</p> </dd> + + + <dd> <p>A reference to the protected surface where the encrypted data is written.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_ENCRYPTED_BLOCK_INFO}}</strong> structure, or <strong>{{NULL}}</strong>.</p> <p>If the driver supports partially encrypted buffers, <em>pEncryptedBlockInfo</em> indicates which portions of the buffer are encrypted. If the entire surface is encrypted, set this parameter to <strong>{{NULL}}</strong>. </p> <p>To check whether the driver supports partially encrypted buffers, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION}} +</strong> capabilities flag. If the driver does not support partially encrypted buffers, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains a content encryption key, or <strong>{{NULL}}</strong>. To query whether the driver supports the use of content keys, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY}}</strong> capabilities flag. </p> <p>If the driver supports content keys, use the content key to encrypt the surface. Encrypt the content key using the session key, and place the resulting cipher text in <em>pContentKey</em>. If the driver does not support content keys, use the session key to encrypt the surface and set <em>pContentKey</em> to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size of the encrypted content key, in bytes.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the initialization vector ({{IV}}). </p> <p>For 128-bit {{AES}}-{{CTR}} encryption, <em>pIV</em> points to a <strong>{{D3D11_AES_CTR_IV}}</strong> structure. The caller allocates the structure and generates the {{IV}}. When you generate the first {{IV}}, initialize the structure to a random number. For each subsequent {{IV}}, simply increment the <strong>{{IV}}</strong> member of the structure, ensuring that the value always increases. This procedure enables the driver to validate that the same {{IV}} is never used more than once with the same key pair.</p> <p>For other encryption types, a different structure might be used, or the encryption might not use an {{IV}}.</p> </dd> + + + <dd> <p>The size of the <em>pIV</em> buffer, in bytes.</p> </dd> + + + + + <p>Gets a random number that can be used to refresh the session key. </p> + <p>To generate a new session key, perform a bitwise <strong>{{XOR}}</strong> between the previous session key and the random number. The new session key does not take affect until the application calls <strong>{{ID3D11VideoContext::FinishSessionKeyRefresh}}</strong>.</p><p>To query whether the driver supports this method, call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong> and check for the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> capabilities flag.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pRandomNumber</em> array, in bytes. The size should match the size of the session key.</p> </dd> + + + <dd> <p>A reference to a byte array that receives a random number.</p> </dd> + + + + + <p>Switches to a new session key. </p> + <p>This function can only be called when the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY}}</strong> cap is reported.</p><p>Before calling this method, call <strong>{{ID3D11VideoContext::StartSessionKeyRefresh}}</strong>. The <strong>StartSessionKeyRefresh</strong> method gets a random number from the driver, which is used to create a new session key. The new session key does not become active until the application calls <strong>FinishSessionKeyRefresh</strong>. After the application calls <strong>FinishSessionKeyRefresh</strong>, all protected surfaces are encrypted using the new session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11CryptoSession}}</strong> interface.</p> </dd> + + + + + <p>Gets the cryptographic key to decrypt the data returned by the <strong>{{ID3D11VideoContext::EncryptionBlt}}</strong> method.</p> + <p>This method applies only when the driver requires a separate content key for the <strong>EncryptionBlt</strong> method. For more information, see the Remarks for <strong>EncryptionBlt</strong>.</p><p>Each time this method is called, the driver generates a new key.</p><p>The <em>KeySize</em> should match the size of the session key.</p><p>The read back key is encrypted by the driver/hardware using the session key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Establishes a session key for an authenticated channel. </p> + <p>This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. This method will fail if the channel type is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, because the Direct3D11 channel does not support authentication.</p> </dd> + + + <dd> <p>The size of the data in the <em>pData</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains the encrypted session key. The buffer must contain 256 bytes of data, encrypted using {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}). +</p> </dd> + + + + + <p>Sends a query to an authenticated channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_INPUT}}</strong> structure. The <strong>QueryType</strong> member of the structure specifies the query and defines the meaning of the rest of the array.</p> </dd> + + + <dd> <p>The size of the <em>pOutput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that receives the result of the query. This array always starts with a <strong>{{D3D11_AUTHENTICATED_QUERY_OUTPUT}}</strong> structure. The meaning of the rest of the array depends on the query.</p> </dd> + + + + + <p>Sends a configuration command to an authenticated channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface.</p> </dd> + + + <dd> <p>The size of the <em>pInput</em> array, in bytes.</p> </dd> + + + <dd> <p>A reference to a byte array that contains input data for the command. This buffer always starts with a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_INPUT}}</strong> structure. The <strong>ConfigureType</strong> member of the structure specifies the command and defines the meaning of the rest of the buffer.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_AUTHENTICATED_CONFIGURE_OUTPUT}}</strong> structure that receives the response to the command.</p> </dd> + + + + + <p>Sets the stream rotation for an input stream on the video processor.</p> + <p>This is an optional state and the application should only use it if <strong>{{D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION}}</strong> is reported in <strong>{{D3D11_VIDEO_PROCESSOR_CAPS}}.FeatureCaps</strong>.</p><p>The stream source rectangle will be specified in the pre-rotation coordinates (typically landscape) and the stream destination rectangle will be specified in the post-rotation coordinates (typically portrait). The application must update the stream destination rectangle correctly when using a rotation value other than 0? and 180?.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is to be rotated in a clockwise orientation. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream.</p> </dd> + + + + + <p>Gets the stream rotation for an input stream on the video processor.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the input stream. To get the maximum number of streams, call <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps}}</strong> and check the <strong>MaxStreamStates</strong> structure member.</p> </dd> + + + <dd> <p>Specifies if the stream is rotated. </p> </dd> + + + <dd> <p>Specifies the rotation of the stream in a clockwise orientation.</p> </dd> + + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device}}</strong> interface reference.</p><p>If you query an <strong>{{ID3D11Device}}</strong> for <strong>{{ID3D11VideoDevice}}</strong> and the Direct3D?11 device created is using the reference rasterizer or {{WARP}}, or is a hardware device and you are using the Microsoft Basic Display Adapter, <strong>{{E_NOINTERFACE}}</strong> is returned.</p> + + + + <p>Creates a video decoder device for Microsoft Direct3D?11.</p> + <p>This method allocates the necessary decoder buffers. </p><p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream and the decoder profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure that specifies the decoder configuration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a video processor device for Microsoft Direct3D?11.</p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>Specifies the frame-rate conversion capabilities for the video processor. The value is a zero-based index that corresponds to the <em>TypeIndex</em> parameter of the <strong>{{ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a channel to communicate with the Microsoft Direct3D device or the graphics driver. The channel can be used to send commands and queries for content protection.</p> + <p>If the <em>ChannelType</em> parameter is <strong>{{D3D11_AUTHENTICATED_CHANNEL_D3D11}}</strong>, the method creates a channel with the Direct3D device. This type of channel does not support authentication.</p><p>If <em>ChannelType</em> is <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE}}</strong> or <strong>{{D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE}}</strong>, the method creates an authenticated channel with the graphics driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of channel, as a member of the <strong>{{D3D11_AUTHENTICATED_CHANNEL_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11AuthenticatedChannel}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a cryptographic session to encrypt video content that is sent to the graphics driver. </p> + <p>The <strong>{{ID3D11DeviceContext::ClearState}}</strong> method does not affect the internal state of the cryptographic session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to use. The following {{GUIDs}} are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. For a list of possible values, see <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of key exchange.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_KEY_EXCHANGE_RSAES_OAEP}}</strong></dt> </dl> </td><td> <p>The caller will create the session key, encrypt it with {{RSA}} Encryption Scheme - Optimal Asymmetric Encryption Padding ({{RSAES}}-{{OAEP}}) by using the driver's public key, and pass the session key to the driver.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11CryptoSession}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a resource view for a video decoder, describing the output sample for the decoding operation.</p> + <p>Set the <em>ppVDOVView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the decoder surface. The resource must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoDecoderOutputView}}</strong> interface. The caller must release the interface. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the input sample for the video processing operation.</p> + <p>Set the <em>ppVPIView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>The surface format is given in the <strong>FourCC</strong> member of the <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure. The method fails if the video processor does not support this format as an input sample. An app must specify 0 when using 9_1, 9_2, or 9_3 feature levels. </p><p>Resources used for video processor input views must use the following bind flag combinations:</p><ul> <li>Any combination of bind flags that includes <strong>{{D3D11_BIND_DECODER}}</strong>,<strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong>, <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>, and <strong>{{D3D11_BIND_UNORDERED_ACCESS_VIEW}}</strong> can be used as for video processor input views (regardless of what other bind flags may be set).</li> <li>Bind flags = 0 is also allowed for a video processor input view.</li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the input surface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorInputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Creates a resource view for a video processor, describing the output sample for the video processing operation.</p> + <p>Set the <em>ppVPOView</em> parameter to <strong>{{NULL}}</strong> to test whether a view is supported.</p><p>Resources used for video processor output views must use the following <strong>{{D3D11_BIND_FLAG}}</strong> combinations:</p><ul> <li> <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> indicates that it can be used for a video processor output view. The following bind flags are allowed to be set with <strong>{{D3D11_BIND_RENDER_TARGET}}</strong>:<ul> <li> <strong>{{D3D11_BIND_VIDEO_ENCODER}}</strong> </li> <li> <strong>{{D3D11_BIND_SHADER_RESOURCE}}</strong> </li> </ul> </li> <li>Other restrictions will apply such as:<ul> <li>No multi-sampling is allowed.</li> <li>The Texture2D must have been created using {{D3D11_USAGE_DEFAULT}}.</li> </ul> </li> <li>Some {{YUV}} formats can be supported as a video processor output view, but might not be supported as a 3D render target. {{D3D11}} will allow the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag for these formats, but <strong>CreateRenderTargetView</strong> will not be allowed for these formats.</li> </ul><p>If stereo output is enabled, the output view must have 2 array elements. Otherwise, it must only have a single array element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface of the output surface. The resource must be created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag. See <strong>{{D3D11_BIND_FLAG}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface that specifies the video processor. To get this reference, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC}}</strong> structure that describes the view.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorOutputView}}</strong> interface. The caller must release the resource. If this parameter is <strong>{{NULL}}</strong>, the method checks whether the view is supported, but does not create the view. </p> </dd> + + + + + <p>Enumerates the video processor capabilities of the driver.</p> + <p>To create the video processor device, pass the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> reference to the <strong>{{ID3D11VideoDevice::CreateVideoProcessor}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_PROCESSOR_CONTENT_DESC}}</strong> structure that describes the video content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{ID3D11VideoProcessorEnumerator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the number of profiles that are supported by the driver.</p> + <p>To enumerate the profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> + <p>Returns the number of profiles.</p> + + + + <p>Gets a profile that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the profile. To get the number of profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfileCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the profile.</p> </dd> + + + + + <p>Given aprofile, checks whether the driver supports a specified output format.</p> + <p>If the driver does not support the profile given in <em>pDecoderProfile</em>, the method returns <strong>{{E_INVALIDARG}}</strong>. If the driver supports the profile, but the {{DXGI}} format is not compatible with the profile, the method succeeds but returns the value <strong>{{FALSE}}</strong> in <em>pSupported</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that identifies the profile. To get the list of supported profiles, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> value that specifies the output format. Typical values include <strong>{{DXGI_FORMAT_NV12}}</strong> and <strong>{{DXGI_FORMAT_420_OPAQUE}}</strong>.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the format is supported, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Gets the number of decoder configurations that the driver supports for a specified video description.</p> + <p>To enumerate the decoder configurations, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfig}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>Receives the number of decoder configurations.</p> </dd> + + + + + <p>Gets a decoder configuration that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> structure that describes the video stream.</p> </dd> + + + <dd> <p>The zero-based index of the decoder configuration. To get the number of configurations that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderConfigCount}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure. The method fills in the structure with the decoder configuration.</p> </dd> + + + + + <p>Queries the driver for its content protection capabilities. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> <p>If no encryption will be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> <p>The driver might disallow some combinations of encryption type and profile.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure. The method fills in this structure with the driver's content protection capabilities. </p> </dd> + + + + + <p>Gets a cryptographic key-exchange mechanism that is supported by the driver.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the type of encryption to be used. The following {{GUIDs}} are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{D3D11_CRYPTO_TYPE_AES128_CTR}}</strong></dt> </dl> </td><td> <p>128-bit Advanced Encryption Standard {{CTR}} mode ({{AES}}-{{CTR}}) block cipher. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a {{GUID}} that specifies the decoding profile. To get profiles that the driver supports, call <strong>{{ID3D11VideoDevice::GetVideoDecoderProfile}}</strong>. If decoding will not be used, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The zero-based index of the key-exchange type. The driver reports the number of types in the <strong>KeyExchangeTypeCount</strong> member of the <strong>{{D3D11_VIDEO_CONTENT_PROTECTION_CAPS}}</strong> structure.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the type of key exchange.</p> </dd> + + + + + <p>Sets private data on the video device and associates that data with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} associated with the data.</p> </dd> + + + <dd> <p>The size of the data, in bytes.</p> </dd> + + + <dd> <p>A reference to the data.</p> </dd> + + + + + <p>Sets a private <strong>{{IUnknown}}</strong> reference on the video device and associates that reference with a {{GUID}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p> + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a buffer (vertex buffer, index buffer, or shader-constant buffer).</p> + <p> For example code, see How to: Create a Vertex Buffer, How to: Create an Index Buffer or How to: Create a Constant Buffer. </p><p> For a constant buffer (<strong>BindFlags</strong> of <strong>{{D3D11_BUFFER_DESC}}</strong> set to <strong>{{D3D11_BIND_CONSTANT_BUFFER}}</strong>), you must set the <strong>ByteWidth</strong> value of <strong>{{D3D11_BUFFER_DESC}}</strong> in multiples of 16, and less than or equal to <strong>{{D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT}}</strong>. </p><p> The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, provides the following new functionality for <strong>CreateBuffer</strong>: </p><p> You can create a constant buffer that is larger than the maximum constant buffer size that a shader can access (4096 32-bit*4-component constants ? 64KB). When you bind the constant buffer to the pipeline (for example, via <strong>{{PSSetConstantBuffers}}</strong> or <strong>{{PSSetConstantBuffers1}}</strong>), you can define a range of the buffer that the shader can access that fits within the 4096 constant limit. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. On existing drivers that are implemented to feature level 10 and higher, a call to <strong>CreateBuffer</strong> to request a constant buffer that is larger than 4096 fails. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the buffer. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D11_BUFFER_DESC}}</strong> structure that describes the buffer. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structure that describes the initialization data; use <strong>{{NULL}}</strong> to allocate space only (with the exception that it cannot be <strong>{{NULL}}</strong> if the usage flag is <strong>{{D3D11_USAGE_IMMUTABLE}}</strong>). </p> <p> If you don't pass anything to <em>pInitialData</em>, the initial content of the memory for the buffer is undefined. In this case, you need to write the buffer content some other way before the resource is read. </p> </dd> + + + <dd> <p> Address of a reference to the <strong>{{ID3D11Buffer}}</strong> interface for the buffer object created. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (<strong>{{S_FALSE}}</strong> indicates a pass). </p> </dd> + + + + + <p>Creates an array of 1D textures.</p> + <p><strong>CreateTexture1D</strong> creates a 1D texture resource, which can contain a number of 1D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 width texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x1</li> <li>pInitialData[1] = 16x1</li> <li>pInitialData[2] = 8x1</li> <li>pInitialData[3] = 4x1 +</li> <li>pInitialData[4] = 2x1 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create an array of 2D textures.</p> + <p><strong>CreateTexture2D</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or it may use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a single 3D texture.</p> + <p><strong>CreateTexture3D</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Create a shader-resource view for accessing data in a resource.</p> + <p> A resource is made up of one or more subresources; a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following {{API}} methods: <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong> and <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>. </p><p>Because a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.</p><strong>Note</strong>?? To successfully create a shader-resource view from a typeless buffer (for example, <strong>{{DXGI_FORMAT_R32G32B32A32_TYPELESS}}</strong>), you must set the <strong>{{D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS}}</strong> flag when you create the buffer.?<p> The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateShaderResourceView</strong> for the following new purpose. </p><p> You can create shader-resource views of video resources so that Direct3D shaders can process those shader-resource views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure for a created shader-resource view must match the type of video resource, {{D3D11_SRV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_SRV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to. </p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}} </strong> flag. </p> </dd> + + + <dd> <p> Pointer to a shader-resource view description (see <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with). </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11ShaderResourceView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation). </p> </dd> + + + + + <p>Creates a view for accessing an unordered access resource.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateUnorderedAccessView</strong> for the following new purpose. </p><p>You can create unordered-access views of video resources so that Direct3D shaders can process those unordered-access views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure for a created unordered-access view must match the type of video resource, {{D3D11_UAV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_UAV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use <strong>CreateRenderTargetView</strong> for the following new purpose. </p><p>You can create render-target views of video resources so that Direct3D shaders can process those render-target views. These video resources are either Texture2D or Texture2DArray. The value in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> structure for a created render-target view must match the type of video resource, {{D3D11_RTV_DIMENSION_TEXTURE2D}} for Texture2D and {{D3D11_RTV_DIMENSION_TEXTURE2DARRAY}} for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the <strong>{{DXGI_FORMAT}}</strong> reference page specify the format values that views are restricted to.</p><p>The runtime read+write conflict prevention logic (which stops a resource from being bound as an {{SRV}} and {{RTV}} or {{UAV}} at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11RenderTargetView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create a depth-stencil view for accessing resource data.</p> + <p>A depth-stencil view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to the resource that will serve as the depth-stencil surface. This resource must have been created with the <strong>{{D3D11_BIND_DEPTH_STENCIL}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a depth-stencil-view description (see <strong>{{D3D11_DEPTH_STENCIL_VIEW_DESC}}</strong>). Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses mipmap level 0 of the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{ID3D11DepthStencilView}}</strong>. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return {{S_FALSE}} if the other input parameters pass validation).</p> </dd> + + + + + <p>Create an input-layout object to describe the input-buffer data for the input-assembler stage.</p> + <p>After creating an input layout object, it must be bound to the input-assembler stage before calling a draw {{API}}.</p><p>Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.</p><p> If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> If the method succeeds, the return code is {{S_OK}}. See Direct3D 11 Return Codes for failing error codes. </p> + + + <dd> <p> An array of the input-assembler stage input data types; each type is described by an element description (see <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong>). </p> </dd> + + + <dd> <p>The number of input-data types in the array of input-elements.</p> </dd> + + + <dd> <p> A reference to the compiled shader. The compiled shader code contains a input signature which is validated against the array of elements. See remarks. </p> </dd> + + + <dd> <p>Size of the compiled shader.</p> </dd> + + + <dd> <p> A reference to the input-layout object created (see <strong>{{ID3D11InputLayout}}</strong>). To validate the other input parameters, set this reference to be <strong>{{NULL}}</strong> and verify that the method returns {{S_FALSE}}. </p> </dd> + + + + + <p>Create a vertex-shader object from a compiled shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateVertexShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a vertex shader, you can successfully pass the compiled vertex shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateVertexShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateVertexShader</strong> fails. <strong>CreateVertexShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled vertex shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11VertexShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return <strong>{{S_FALSE}}</strong> instead of <strong>{{S_OK}}</strong>.</p> </dd> + + + + + <p>Create a geometry shader.</p> + <p>After it is created, the shader can be set to the device by calling <strong>{{ID3D11DeviceContext::GSSetShader}}</strong>.</p><p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShader</strong> fails. <strong>CreateGeometryShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11GeometryShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Creates a geometry shader that can write to streaming output buffers.</p> + <p> For more info about using <strong>CreateGeometryShaderWithStreamOutput</strong>, see Create a Geometry-Shader Object with Stream Output. </p><p> The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateGeometryShaderWithStreamOutput</strong>. </p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p> Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateGeometryShaderWithStreamOutput</strong> succeeds. </p><p> If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateGeometryShaderWithStreamOutput</strong> fails. <strong>CreateGeometryShaderWithStreamOutput</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports. </p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li> All atomics and immediate atomics (for example, atomic_and and imm_atomic_and) </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.</p> <p> To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the <strong>{{D3DGetOutputSignatureBlob}}</strong> compiler function. You can also pass a reference to the compiled shader for the prior stage (for example, the vertex-shader stage or domain-shader stage). This compiled shader provides the output signature for the data. </p> </dd> + + + <dd> <p>Size of the compiled geometry shader.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{D3D11_SO_DECLARATION_ENTRY}}</strong> array. Cannot be <strong>{{NULL}}</strong> if NumEntries &gt; 0. </p> </dd> + + + <dd> <p>The number of entries in the stream output declaration ( ranges from 0 to {{D3D11_SO_STREAM_COUNT}} * {{D3D11_SO_OUTPUT_COMPONENT_COUNT}} ).</p> </dd> + + + <dd> <p>An array of buffer strides; each stride is the size of an element for that buffer.</p> </dd> + + + <dd> <p> The number of strides (or buffers) in <em>pBufferStrides</em> (ranges from 0 to {{D3D11_SO_BUFFER_SLOT_COUNT}}). </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage (ranges from 0 to {{D3D11_SO_STREAM_COUNT}} - 1). Set to {{D3D11_SO_NO_RASTERIZED_STREAM}} if no stream is to be rasterized. </p> </dd> + + + <dd> <p> A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Address of a reference to an <strong>{{ID3D11GeometryShader}}</strong> interface, representing the geometry shader that was created. Set this to <strong>{{NULL}}</strong> to validate the other parameters; if validation passes, the method will return {{S_FALSE}} instead of {{S_OK}}. </p> </dd> + + + + + <p>Create a pixel shader.</p> + <p>After creating the pixel shader, you can set it to the device using <strong>{{ID3D11DeviceContext::PSSetShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the compiled shader. </p> </dd> + + + <dd> <p>Size of the compiled pixel shader.</p> </dd> + + + <dd> <p>A reference to a class linkage interface (see <strong>{{ID3D11ClassLinkage}}</strong>); the value can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Address of a reference to a <strong>{{ID3D11PixelShader}}</strong> interface. If this is <strong>{{NULL}}</strong>, all other parameters will be validated, and if all parameters pass validation this {{API}} will return {{S_FALSE}} instead of {{S_OK}}.</p> </dd> + + + + + <p>Create a hull shader.</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateHullShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a hull shader, you can successfully pass the compiled hull shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateHullShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateHullShader</strong> fails. <strong>CreateHullShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Create a domain shader .</p> + <p>The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for <strong>CreateDomainShader</strong>.</p><p>The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views ({{UAV}}) are available at all shader stages, you can use these instructions in all shader stages.</p><p>Therefore, if you use the following shader model 5.0 instructions in a domain shader, you can successfully pass the compiled domain shader to <em>pShaderBytecode</em>. That is, the call to <strong>CreateDomainShader</strong> succeeds.</p><p>If you pass a compiled shader to <em>pShaderBytecode</em> that uses any of the following instructions on a device that doesn?t support {{UAVs}} at every shader stage (including existing drivers that are not implemented to support {{UAVs}} at every shader stage), <strong>CreateDomainShader</strong> fails. <strong>CreateDomainShader</strong> also fails if the shader tries to use a {{UAV}} slot beyond the set of {{UAV}} slots that the hardware supports.</p><ul> <li> dcl_uav_typed </li> <li> dcl_uav_raw </li> <li> dcl_uav_structured </li> <li> ld_raw </li> <li> ld_structured </li> <li> ld_uav_typed </li> <li> store_raw </li> <li> store_structured </li> <li> store_uav_typed </li> <li> sync_uglobal </li> <li>All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)</li> </ul> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Create a compute shader.</p> + <p>For an example, see How To: Create a Compute Shader and {{HDRToneMappingCS11}} Sample.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates class linkage libraries to enable dynamic shader linkage.</p> + <p>The <strong>{{ID3D11ClassLinkage}}</strong> interface returned in <em>ppLinkage</em> is associated with a shader by passing it as a parameter to one of the <strong>{{ID3D11Device}}</strong> create shader methods such as <strong>{{ID3D11Device::CreatePixelShader}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a class-linkage interface reference (see <strong>{{ID3D11ClassLinkage}}</strong>).</p> </dd> + + + + + <p>Create a blend-state object that encapsules blend state for the output-merger stage.</p> + <p> An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values. </p> + + + <dd> <p> Pointer to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>). </p> </dd> + + + <dd> <p> Address of a reference to the blend-state object created (see <strong>{{ID3D11BlendState}}</strong>). </p> </dd> + + + + + <p>Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.</p> + <p>4096 unique depth-stencil state objects can be created on a device at a time.</p><p>If an application attempts to create a depth-stencil-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique depth-stencil state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a depth-stencil state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the depth-stencil state object created (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Create a rasterizer state object that tells the rasterizer stage how to behave.</p> + <p>4096 unique rasterizer state objects can be created on a device at a time.</p><p>If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a rasterizer state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the rasterizer state object created (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Create a sampler-state object that encapsulates sampling information for a texture.</p> + <p>4096 unique sampler state objects can be created on a device at a time.</p><p>If an application attempts to create a sampler-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique sampler state objects will stay the same.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a sampler state description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the sampler state object created (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>This interface encapsulates methods for querying information from the {{GPU}}.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a query description (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to the query object created (see <strong>{{ID3D11Query}}</strong>).</p> </dd> + + + + + <p>Creates a predicate.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a query description where the type of query must be a {{D3D11_QUERY_SO_OVERFLOW_PREDICATE}} or {{D3D11_QUERY_OCCLUSION_PREDICATE}} (see <strong>{{D3D11_QUERY_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a predicate (see <strong>{{ID3D11Predicate}}</strong>).</p> </dd> + + + + + <p>Create a counter object for measuring {{GPU}} performance.</p> + <p>If this function succeeds, it will return {{S_OK}}. If it fails, possible return values are: {{S_FALSE}}, {{E_OUTOFMEMORY}}, {{DXGI_ERROR_UNSUPPORTED}}, {{DXGI_ERROR_NONEXCLUSIVE}}, or {{E_INVALIDARG}}.</p><p>{{DXGI_ERROR_UNSUPPORTED}} is returned whenever the application requests to create a well-known counter, but the current device does not support it.</p><p>{{DXGI_ERROR_NONEXCLUSIVE}} indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.</p><p>{{E_INVALIDARG}} is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.</p> + + + <dd> <p>Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>).</p> </dd> + + + <dd> <p>Address of a reference to a counter (see <strong>{{ID3D11Counter}}</strong>).</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. Using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After all scene items are recorded, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device}}</strong>, the <strong>CreateDeferredContext</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Get the support of a given format on the installed video device.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Format</em> parameter is <strong>{{NULL}}</strong>, or returns {{E_FAIL}} if the described format does not exist.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> enumeration that describes a format for which to check for support.</p> </dd> + + + <dd> <p>A bitfield of <strong>{{D3D11_FORMAT_SUPPORT}}</strong> enumeration values describing how the specified format is supported on the installed device. The values are {{ORed}} together.</p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum number of quality levels is defined by {{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}} in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format. See <strong>{{DXGI_FORMAT}}</strong>.</p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>Number of quality levels supported by the adapter. See remarks.</p> </dd> + + + + + <p>Get a counter's information.</p> + <p>Returns nothing.</p> + + + <dd> <p>Pointer to counter information (see <strong>{{D3D11_COUNTER_INFO}}</strong>).</p> </dd> + + + + + <p>Get the type, name, units of measure, and a description of an existing counter.</p> + <p> Length parameters can be <strong>{{NULL}}</strong>, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-<strong>{{NULL}}</strong> and the corresponding string is <strong>{{NULL}}</strong>, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating <strong>{{NULL}}</strong>) will be returned through the length parameter. When length and the corresponding parameter are both non-<strong>{{NULL}}</strong>, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating <strong>{{NULL}}</strong> character) is passed out through the length parameter. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> Pointer to a counter description (see <strong>{{D3D11_COUNTER_DESC}}</strong>). Specifies which counter information is to be retrieved about. </p> </dd> + + + <dd> <p> Pointer to the data type of a counter (see <strong>{{D3D11_COUNTER_TYPE}}</strong>). Specifies the data type of the counter being retrieved. </p> </dd> + + + <dd> <p>Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.</p> </dd> + + + <dd> <p> String to be filled with a brief name for the counter. May be <strong>{{NULL}}</strong> if the application is not interested in the name of the counter. </p> </dd> + + + <dd> <p> Length of the string returned to szName. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szUnits. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be <strong>{{NULL}}</strong>. The returned string will always be in English. </p> </dd> + + + <dd> <p> Length of the string returned to szDescription. Can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets information about the features that are supported by the current graphics driver.</p> + <p>To query for multi-threading support, pass the <strong>{{D3D11_FEATURE_THREADING}}</strong> value to the <em>Feature</em> parameter, pass the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>pFeatureSupportData</em> parameter, and pass the size of the <strong>{{D3D11_FEATURE_DATA_THREADING}}</strong> structure to the <em>FeatureSupportDataSize</em> parameter.</p><p>Calling CheckFeatureSupport with <em>Feature</em> set to {{D3D11_FEATURE_FORMAT_SUPPORT}} causes the method to return the same information that would be returned by <strong>{{ID3D11Device::CheckFormatSupport}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter.</p> + + + <dd> <p>A member of the <strong>{{D3D11_FEATURE}}</strong> enumerated type that describes which feature to query for support.</p> </dd> + + + <dd> <p>Upon completion of the method, the passed structure is filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size of the structure passed to the <em>pFeatureSupportData</em> parameter.</p> </dd> + + + + + <p>Get application-defined data from a device.</p> + <p>This method returns one of the codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved.</p> </dd> + + + <dd> <p>A reference to a buffer that <strong>GetPrivateData</strong> fills with data from the device if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data.</p> </dd> + + + + + <p>Set data to a device and associate that data with a guid.</p> + <p>The data stored in the device with this method can be retrieved with <strong>{{ID3D11Device::GetPrivateData}}</strong>.</p><p>The data and guid set with this method will typically be application-defined.</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the <strong>{{WKPDID_D3DDebugObjectName}}</strong> {{GUID}} that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the data.</p> </dd> + + + <dd> <p>Size of the data.</p> </dd> + + + <dd> <p>Pointer to the data to be stored with this device. If pData is <strong>{{NULL}}</strong>, DataSize must also be 0, and any data previously associated with the guid will be destroyed.</p> </dd> + + + + + <p>Associate an {{IUnknown}}-derived interface with this device child and associate that interface with an application-defined guid.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Guid associated with the interface.</p> </dd> + + + <dd> <p>Pointer to an {{IUnknown}}-derived interface to be associated with the device child.</p> </dd> + + + + + <p>Gets the feature level of the hardware device.</p> + <p> Feature levels determine the capabilities of your device.</p> + <p>A member of the <strong>{{D3D_FEATURE_LEVEL}}</strong> enumerated type that describes the feature level of the hardware device.</p> + + + + <p>Get the flags used during the call to create the device with <strong>{{D3D11CreateDevice}}</strong>.</p> + <p>A bitfield containing the flags used to create the device. See <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>.</p> + + + + <p>Get the reason why the device was removed.</p> + <p>Possible return values include: </p><ul> <li>{{DXGI_ERROR_DEVICE_HUNG}}</li> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_ERROR_DEVICE_RESET}}</li> <li>{{DXGI_ERROR_DRIVER_INTERNAL_ERROR}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li>{{S_OK}}</li> </ul><p>For more detail on these return codes, see {{DXGI_ERROR}}.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p>The <strong>GetImmediateContext</strong> method returns an <strong>{{ID3D11DeviceContext}}</strong> object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext}}</strong> interface reference is initialized.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>Set an exception-mode flag to elevate an error condition to a non-continuable exception. </p><p>Whenever an error occurs, a Direct3D device enters the {{DEVICEREMOVED}} state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> </dd> + + + + + <p>Get the exception-mode flags.</p> + <p>An exception-mode flag is used to elevate an error condition to a non-continuable exception. </p> + <p>A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in <strong>{{D3D11_RAISE_FLAG}}</strong>. A default value of 0 means there are no flags.</p> + + + + <p>Creates a device that represents the display adapter.</p> + <p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Set <em>ppDevice</em> and <em>ppImmediateContext</em> to <strong>{{NULL}}</strong> to determine which feature level is supported by looking at <em>pFeatureLevel</em> without creating a device. </p><p> For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDevice}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><table> <tr><td> <p>Differences between Direct3D 10 and Direct3D 11:</p> <p> In Direct3D 10, the presence of <em>pAdapter</em> dictated which adapter to use and the <em>DriverType</em> could mismatch what the adapter was. </p> <p> In Direct3D 11, if you are trying to create a hardware or a software device, set <em>pAdapter</em> != <strong>{{NULL}}</strong> which constrains the other inputs to be: </p> <ul> <li><em>DriverType</em> must be {{D3D_DRIVER_TYPE_UNKNOWN}} </li> <li><em>Software</em> must be <strong>{{NULL}}</strong>. </li> </ul> <p> On the other hand, if <em>pAdapter</em> == <strong>{{NULL}}</strong>, the <em>DriverType</em> cannot be set to {{D3D_DRIVER_TYPE_UNKNOWN}}; it can be set to either: </p> <ul> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_SOFTWARE}}, <em>Software</em> cannot be <strong>{{NULL}}</strong>. </li> <li> If <em>DriverType</em> == {{D3D_DRIVER_TYPE_HARDWARE}}, the adapter used will be the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong> </li> </ul> </td></tr> </table><p>?</p><p> The function signature {{PFN_D3D11_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><p><strong>Windows Phone 8.1: </strong> This {{API}} is supported. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter that is enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre>{ {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +};</pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned. </p> </dd> + + + <dd> <p> If successful, returns the first <strong>{{D3D_FEATURE_LEVEL}}</strong> from the <em>pFeatureLevels</em> array which succeeded. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <p>Creates a device that represents the display adapter and a swap chain used for rendering.</p> + <strong>Note</strong>?? If you call this method in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p> This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 {{R2}}, and as an update to Windows Vista ({{KB971644}}). </p><p> To create a Direct3D 11.1 device (<strong>{{ID3D11Device1}}</strong>), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?{{R2}} with the Platform Update for Windows 7 installed, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device1}}</strong> interface. </p><p> To create a Direct3D 11.2 device (<strong>{{ID3D11Device2}}</strong>), which is available on Windows?8.1 and Windows Server?2012?{{R2}}, you first create a <strong>{{ID3D11Device}}</strong> with this function, and then call the <strong>QueryInterface</strong> method on the <strong>{{ID3D11Device}}</strong> object to obtain the <strong>{{ID3D11Device2}}</strong> interface. </p><p> Also, see the remarks section in <strong>{{D3D11CreateDevice}}</strong> for details about input parameter dependencies. To create a device without creating a swap chain, use the <strong>{{D3D11CreateDevice}}</strong> function. </p><p> If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value, you must also set the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_UNKNOWN}} value. If you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value, <strong>{{D3D11CreateDeviceAndSwapChain}}</strong> returns an <strong>{{HRESULT}}</strong> of {{E_INVALIDARG}}. </p><p> The function signature {{PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method can return one of the Direct3D 11 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong> if you call it in a Session 0 process. </p><p> This method returns {{E_INVALIDARG}} if you set the <em>pAdapter</em> parameter to a non-<strong>{{NULL}}</strong> value and the <em>DriverType</em> parameter to the {{D3D_DRIVER_TYPE_HARDWARE}} value. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> A reference to the video adapter to use when creating a device. Pass <strong>{{NULL}}</strong> to use the default adapter, which is the first adapter enumerated by <strong>{{IDXGIFactory1::EnumAdapters}}</strong>. </p> <strong>Note</strong>?? Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application. ? </dd> + + + <dd> <p> The <strong>{{D3D_DRIVER_TYPE}}</strong>, which represents the driver type to create. </p> </dd> + + + <dd> <p> A handle to a {{DLL}} that implements a software rasterizer. If <em>DriverType</em> is <em>{{D3D_DRIVER_TYPE_SOFTWARE}}</em>, <em>Software</em> must not be <strong>{{NULL}}</strong>. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. The value should be non-<strong>{{NULL}}</strong> when <strong>{{D3D_DRIVER_TYPE}}</strong> is <strong>{{D3D_DRIVER_TYPE_SOFTWARE}}</strong> and <strong>{{NULL}}</strong> otherwise. </p> </dd> + + + <dd> <p> The runtime layers to enable (see <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>); values can be bitwise {{OR}}'d together. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong>s, which determine the order of feature levels to attempt to create. If <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function uses the following array of feature levels: </p> <pre> { {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> <strong>Note</strong>?? If the Direct3D 11.1 runtime is present on the computer and <em>pFeatureLevels</em> is set to <strong>{{NULL}}</strong>, this function won't create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device. To create a <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> device, you must explicitly provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that includes <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong>. If you provide a <strong>{{D3D_FEATURE_LEVEL}}</strong> array that contains <strong>{{D3D_FEATURE_LEVEL_11_1}}</strong> on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with {{E_INVALIDARG}}. ? </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. </p> </dd> + + + <dd> <p> The {{SDK}} version; use <em>{{D3D11_SDK_VERSION}}</em>. </p> </dd> + + + <dd> <p> A reference to a swap chain description (see <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>) that contains initialization parameters for the swap chain. </p> </dd> + + + <dd> <p> Returns the address of a reference to the <strong>{{IDXGISwapChain}}</strong> object that represents the swap chain used for rendering. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11Device}}</strong> object that represents the device created. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11Device}} will be returned'. </p> </dd> + + + <dd> <p> Returns a reference to a <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the first element in an array of feature levels supported by the device. Supply <strong>{{NULL}}</strong> as an input if you don't need to determine which feature level is supported. </p> </dd> + + + <dd> <p> Returns the address of a reference to an <strong>{{ID3D11DeviceContext}}</strong> object that represents the device context. If this parameter is <strong>{{NULL}}</strong>, no {{ID3D11DeviceContext}} will be returned. </p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies how to handle the existing contents of a resource during a copy or update operation of a region within that resource.</p> + + + <dd> <p>The existing contents of the resource cannot be overwritten.</p> </dd> + + + <dd> <p>The existing contents of the resource are undefined and can be discarded.</p> </dd> + + + + + <strong>Note</strong>??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Specifies logical operations to configure for a render target.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Describes flags that are used to create a device context state object (<strong>{{ID3DDeviceContextState}}</strong>) with the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method.</p> + + + + <p>Specifies capabilities of the video decoder.</p> + + + <dd> <p>Indicates that the graphics driver supports at least a subset of downsampling operations.</p> </dd> + + + <dd> <p>Indicates that the decoding hardware cannot support the decode operation in real-time. Decoding is still supported for transcoding scenarios. With this capability, it is possible that decoding can occur in real-time if downsampling is enabled. +</p> </dd> + + + <dd> <p>Indicates that the driver supports changing down sample parameters after the initial down sample parameters have been applied. For more information, see <strong>{{ID3D11VideoContext1::DecoderUpdateDownsampling}}</strong>.</p> </dd> + + + + + <p>Specifies flags that indicate the most efficient methods for performing video processing operations. </p> + + + <dd> <p>Multi-plane overlay hardware can perform the rotation operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the scaling operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>Multi-plane overlay hardware can perform the colorspace conversion operation more efficiently than the <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> </dd> + + + <dd> <p>The video processor output data should be at least triple buffered for optimal performance.</p> </dd> + + + + + <p>Represents the status of an <strong>{{ID3D11CryptoSession}}</strong> interface.</p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D11_BLEND_DESC1}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Enable (or disable) blending.</p> </dd> + + + <dd> <p>Enable (or disable) a logical operation.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend option</strong> specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>This <strong>blend operation</strong> defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A write mask.</p> </dd> + + + + + <strong>Note</strong>?? This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p> Describes the blend state that you use in a call to <strong>{{ID3D11Device1::CreateBlendState1}}</strong> to create a blend-state object. </p> + <p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D11_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D11_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D11_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D11_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D11_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> If the driver type is set to <strong>{{D3D_DRIVER_TYPE_HARDWARE}}</strong>, the feature level is set to less than or equal to <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, and the pixel format of the render target is set to <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>, or <strong>{{DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}}</strong>, the display device performs the blend in standard {{RGB}} (sRGB) space and not in linear space. However, if the feature level is set to greater than <strong>{{D3D_FEATURE_LEVEL_9_3}}</strong>, the display device performs the blend in linear space, which is ideal. </p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this <strong>{{D3D11_BLEND_DESC1}}</strong> to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p> + + + + <strong>Note</strong>??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?<p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>Determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>Indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a sub sample mapping block.</p> + <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> + + + <dd> <p>The number of clear (non-encrypted) bytes at the start of the block.</p> </dd> + + + <dd> <p>The number of encrypted bytes following the clear bytes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a compressed buffer for decoding.</p> + + + <dd> <p>The type of buffer.</p> </dd> + + + <dd> <p>The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. </p> </dd> + + + <dd> <p>Size of the relevant data.</p> </dd> + + + <dd> <p>A reference to a buffer that contains an initialization vector ({{IV}}) for encrypted data. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> </dd> + + + <dd> <p>The size of the buffer specified in the <em>pIV</em> parameter. If <em>pIV</em> is {{NULL}}, set this member to zero.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures, which indicates exactly which bytes in the decode buffer are encrypted and which are in the clear. If the decode buffer does not contain encrypted data, set this member to {{NULL}}.</p> <p>Values in the sub sample mapping blocks are relative to the start of the decode buffer.</p> </dd> + + + <dd> <p>The number of <strong>{{D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK}}</strong> structures specified in the <em>pSubSampleMappingBlocks</em> parameter. If <em>pSubSampleMappingBlocks</em> is {{NULL}}, set this member to zero.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides data to the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> method.</p> + <p>This structure is passed in the <em>pContentKey</em> parameter of the <strong>{{ID3D11VideoContext::DecoderBeginFrame}}</strong> function when <strong>{{D3D11_DECODER_ENCRYPTION_HW_CENC}}</strong> is specified in the <strong>guidConfigBitstreamEncryption</strong> member of the <strong>{{D3D11_VIDEO_DECODER_CONFIG}}</strong> structure when creating the video decoder interface.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides information about the input streams passed into the <strong>{{ID3DVideoContext1::VideoProcessorGetBehaviorHints}}</strong> method.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange input data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateInputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The size of the {{DRM}} command data.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbInput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbInput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbInput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange output data for hardware content protection.</p> + + + <dd> <p>The size of the private data reserved for {{IHV}} usage. This size is determined from the <em>pPrivateOutputSize</em> parameter returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</p> </dd> + + + <dd> <p>The maximum size of data that the driver can return in the output buffer. The last byte that it can write to is <strong>pbOuput</strong>[<strong>PrivateDataSize</strong> + <strong>MaxHWProtectionDataSize</strong> ? 1].</p> </dd> + + + <dd> <p>The size of the output data written by the driver.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent executing the content protection command.</p> </dd> + + + <dd> <p>If <strong>PrivateDataSize</strong> is greater than 0, pbInput[0] ? <strong>pbOutput</strong>[<strong>PrivateDataSize</strong> - 1] is reserved for {{IHV}} use.</p> <p><strong>pbOutput</strong>[<strong>PrivateDataSize</strong>] ? <strong>pbOutput</strong>[<strong>{{HWProtectionDataSize}}</strong> + <strong>PrivateDataSize</strong> - 1] contains the input data for the {{DRM}} command. The format and size of the {{DRM}} command is defined by the {{DRM}} specification.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents key exchange data for hardware content protection.</p> + <p>A reference to this structure is passed in the <em>pData</em> parameter of <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method when the <strong>{{ID3D11CryptoSession}}</strong> is creating using the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong> key exchange type.</p> + + + <dd> <p>The function {{ID}} of the {{DRM}} command. The values and meanings of the function {{ID}} are defined by the {{DRM}} specification.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>Pointer to a buffer containing a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure that specifies memory reserved for {{IHV}} use and the input data for the {{DRM}} command.</p> </dd> + + + <dd> <p>The result of the hardware {{DRM}} command.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes a video sample.</p> + + + <dd> <p>The width of the video sample.</p> </dd> + + + <dd> <p>The height of the video sample.</p> </dd> + + + <dd> <p>The format of the video sample.</p> </dd> + + + <dd> <p>The colorspace of the sample.</p> </dd> + + + + + <p>The blend-state interface holds a description for blending state that you can bind to the output-merger stage. This blend-state interface supports logical operations as well as blending operations.</p> + <p>Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.</p><p>To create a blend-state object, call <strong>{{ID3D11Device1::CreateBlendState1}}</strong>. To bind the blend-state object to the output-merger stage, call <strong>{{ID3D11DeviceContext::OMSetBlendState}}</strong>.</p> + + + + <p>Gets the description for blending state that you used to create the blend-state object.</p> + <p>You use the description for blending state in a call to the <strong>{{ID3D11Device1::CreateBlendState1}}</strong> method to create the blend-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_BLEND_DESC1}}</strong> structure that receives a description of the blend state. This blend state can specify logical operations as well as blending operations.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device1::CreateRasterizerState1}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong> {{D3D11_RASTERIZER_DESC1}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count.</p> </dd> + + + + + <p>The <strong>{{ID3DDeviceContextState}}</strong> interface represents a context state object, which holds state and behavior information about a Microsoft Direct3D device.</p> + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + <p>Copies a region from a source resource to a destination resource.</p> + <p>If the display driver supports overlapping, the source and destination subresources can be identical, and the source and destination regions can overlap each other. For existing display drivers that don?t support overlapping, the runtime drops calls with identical source and destination subresources, regardless of whether the regions overlap. To determine whether the display driver supports overlapping, check the <strong>CopyWithOverlap</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>. This overlapping support enables additional scroll functionality in a call to <strong>{{IDXGISwapChain::Present}}</strong>.</p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong> or <strong>CopySubresourceRegion1</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>Destination subresource index.</p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the destination region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the destination region. For a 1D subresource, this must be zero.</p> </dd> + + + <dd> <p>The z-coordinate of the upper-left corner of the destination region. For a 1D or 2D subresource, this must be zero.</p> </dd> + + + <dd> <p>A reference to the source resource.</p> </dd> + + + <dd> <p>Source subresource index.</p> </dd> + + + <dd> <p>A reference to a 3D box that defines the region of the source subresource that <strong>CopySubresourceRegion1</strong> can copy. If <strong>{{NULL}}</strong>, <strong>CopySubresourceRegion1</strong> copies the entire source subresource. The box must fit within the source resource.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>CopySubresourceRegion1</strong> doesn't perform a copy operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the copy operation. If you specify zero for no copy option, <strong>CopySubresourceRegion1</strong> behaves like <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them. </p> </dd> + + + + + <p>The {{CPU}} copies data from memory to a subresource created in non-mappable memory.</p> + <p>If you call <strong>UpdateSubresource1</strong> to update a constant buffer, pass any region, and the driver has not been implemented to Windows?8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant). When the runtime drops the call, the runtime doesn't call the corresponding device driver interface ({{DDI}}).</p><p>When you record a call to <strong>UpdateSubresource</strong> with an offset <em>pDstBox</em> in a software command list, the offset in <em>pDstBox</em> is incorrectly applied to <em>pSrcData</em> when you play back the command list. The new-for-Windows?8<strong>UpdateSubresource1</strong> fixes this issue. In a call to <strong>UpdateSubresource1</strong>, <em>pDstBox</em> does not affect <em>pSrcData</em>.</p><p>For info about various resource types and how <strong>UpdateSubresource1</strong> might work with each resource type, see Introduction to a Resource in Direct3D 11. </p><strong>Note</strong>??<strong>Applies only to feature level 9_x hardware</strong> If you use <strong>UpdateSubresource1</strong> or <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a <strong>{{NULL}}</strong> source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? + <p>Returns nothing.</p> + + + <dd> <p>A reference to the destination resource.</p> </dd> + + + <dd> <p>A zero-based index that identifies the destination subresource. See <strong>{{D3D11CalcSubresource}}</strong> for more details.</p> </dd> + + + <dd> <p>A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If <strong>{{NULL}}</strong>, <strong>UpdateSubresource1</strong> writes the data to the destination subresource with no offset. The dimensions of the source must fit the destination.</p> <p>An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, <strong>UpdateSubresource1</strong> doesn't perform an update operation.</p> </dd> + + + <dd> <p>A reference to the source data in memory.</p> </dd> + + + <dd> <p>The size of one row of the source data.</p> </dd> + + + <dd> <p>The size of one depth slice of source data.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_COPY_FLAGS}}</strong>-typed value that specifies how to perform the update operation. If you specify zero for no update option, <strong>UpdateSubresource1</strong> behaves like <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong>. For existing display drivers that can't process these flags, the runtime doesn't use them.</p> </dd> + + + + + <p>Discards a resource from the device context.</p> + <p><strong>DiscardResource</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource that <em>pResource</em> points to is no longer needed.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11Resource}}</strong> interface for the resource to discard. The resource must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardResource</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Discards a resource view from the device context.</p> + <p><strong>DiscardView</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView</strong> allows you to discard a subset of a resource that is in a view (such as a single miplevel). More importantly, <strong>DiscardView</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView</strong>; if the debug layer is enabled, the runtime returns an error message.</p> </dd> + + + + + <p>Sets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{VSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{VSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{VSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the hull-shader stage of the pipeline uses.</p> + <p>The runtime drops the call to <strong>{{HSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{HSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If the <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{HSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + + <p>Sets the constant buffers that the domain-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{DSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{DSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{DSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>The runtime drops the call to <strong>{{GSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{GSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{GSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p> Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer. </p> + <p> To enable the shader to access other parts of the buffer, call <strong>{{PSSetConstantBuffers1}}</strong> instead of <strong>{{PSSetConstantBuffers}}</strong>. <strong>{{PSSetConstantBuffers1}}</strong> has additional parameters <em>pFirstConstant</em> and <em>pNumConstants</em>. </p><p> The runtime drops the call to <strong>{{PSSetConstantBuffers1}}</strong> if the numbers of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components. </p><p> The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range): </p><p> [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>] </p><p> That is, the window is the range is from (value in an element of <em>pFirstConstant</em>) to (value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>). </p><p> The runtime also drops the call to <strong>{{PSSetConstantBuffers1}}</strong> on existing drivers that do not support this offsetting. </p><p> The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. </p><p> From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>. </p><p> Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p> If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{PSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants. </p><p> If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>. </p> + <p> Returns nothing. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1). </p> </dd> + + + <dd> <p> Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>). </p> </dd> + + + <dd> <p> Array of constant buffers being given to the device. </p> </dd> + + + <dd> <p> An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants. </p> </dd> + + + <dd> <p> An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Sets the constant buffers that the compute-shader stage uses.</p> + <p>The runtime drops the call to <strong>{{CSSetConstantBuffers1}}</strong> if the number of constants to which <em>pNumConstants</em> points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the <em>pFirstConstant</em> and <em>pFirstConstant</em> + <em>pNumConstants</em> arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of <em>pFirstConstant</em>, value in an element of <em>pFirstConstant</em> + value in an element of <em>pNumConstants</em>]. The runtime also drops the call to <strong>{{CSSetConstantBuffers1}}</strong> on existing drivers that don't support this offsetting.</p><p>The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.</p><p>From the shader?s point of view, element [0] in the constant buffers array is the constant at <em>pFirstConstant</em>.</p><p>Out of bounds access to the constant buffers from the shader to the range that is defined by <em>pFirstConstant</em> and <em>pNumConstants</em> returns 0. </p><p>If <em>pFirstConstant</em> and <em>pNumConstants</em> arrays are <strong>{{NULL}}</strong>, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the <strong>{{CSSetConstantBuffers}}</strong> method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.</p><p>If either <em>pFirstConstant</em> or <em>pNumConstants</em> is <strong>{{NULL}}</strong>, the other parameter must also be <strong>{{NULL}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the zero-based array to begin setting constant buffers to (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to set (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffers (see <strong>{{ID3D11Buffer}}</strong>) being given to the device.</p> </dd> + + + <dd> <p>An array that holds the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.</p> </dd> + + + <dd> <p>An array that holds the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. Each number of constants must be a multiple of 16 constants, in the range [0..4096]. </p> </dd> + + + + + <p>Gets the constant buffers that the vertex shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the hull-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + + <p>Gets the constant buffers that the domain-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the geometry shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the pixel shader pipeline stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Gets the constant buffers that the compute-shader stage uses.</p> + <p>If no buffer is bound at a slot, <em>pFirstConstant</em> and <em>pNumConstants</em> are <strong>{{NULL}}</strong> for that slot.</p> + <p>Returns nothing.</p> + + + <dd> <p>Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - 1).</p> </dd> + + + <dd> <p>Number of buffers to retrieve (ranges from 0 to {{D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT}} - <em>StartSlot</em>).</p> </dd> + + + <dd> <p>Array of constant buffer interface references to be returned by the method.</p> </dd> + + + <dd> <p>A reference to an array that receives the offsets into the buffers that <em>ppConstantBuffers</em> specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets <em>pFirstConstant</em> to <strong>{{NULL}}</strong> if the buffers do not have offsets.</p> </dd> + + + <dd> <p>A reference to an array that receives the numbers of constants in the buffers that <em>ppConstantBuffers</em> specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the <em>pFirstConstant</em> array. The runtime sets <em>pNumConstants</em> to <strong>{{NULL}}</strong> if it doesn't specify the numbers of constants in each buffer.</p> </dd> + + + + + <p>Activates the given context state object and changes the current device behavior to Direct3D?11, Direct3D?10.1, or Direct3D?10.</p> + <p><strong>SwapDeviceContextState</strong> changes device behavior. This device behavior depends on the emulated interface that you passed to the <em>EmulatedInterface</em> parameter of the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method when you created the context state object. </p><p><strong>SwapDeviceContextState</strong> is not supported on a deferred context.</p><p><strong>SwapDeviceContextState</strong> disables the incompatible device interfaces <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong>. When a context state object is active, the runtime disables certain methods on the device and context interfaces. A context state object that is created with <code>__uuidof({{ID3D11Device1}})</code> or <code>__uuidof({{ID3D11Device}})</code> turns off most of the Direct3D?10 device interfaces. A context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> turns off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. +For more information about this behavior, see <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>.</p><p><strong>SwapDeviceContextState</strong> activates the context state object specified by <em>pState</em>. This means that the device behaviors that are associated with the context state object's feature level and compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. In addition, any state that was saved when this context state object was last active is now reactivated, so that the previous state is replaced.</p><p><strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the most recently activated context state object. The object allows the caller to save and then later restore the previous device state. This behavior is useful in a plug-in architecture such as Direct2D that shares a Direct3D device with its plug-ins. A Direct2D interface can use context state objects to save and restore the application's state.</p><p>If the caller did not previously call the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method to create a previous context state object, <strong>SwapDeviceContextState</strong> sets <em>ppPreviousState</em> to the default context state object. In either case, usage of <strong>SwapDeviceContextState</strong> is the same.</p><p>The feature level that is specified by the application, and that is chosen by the context state object from the acceptable list that the application supplies to <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong>, controls the feature level of the immediate context whenever the context state object is active. Because the Direct3D?11 device is free-threaded, the device methods cannot query the current immediate context feature level. Instead, the device runs at a feature level that is the maximum of all previously created context state objects' feature levels. This means that the device's feature level can increase dynamically.</p><p>The feature level of the context state object controls the functionality available from the immediate context. However, to maintain the free-threaded contract of the Direct3D?11 device methods?the resource-creation methods in particular?the upper-bound feature level of all created context state objects controls the set of resources that the device creates.</p><p>Because the context state object interface is published by the immediate context, the interface requires the same threading model as the immediate context. Specifically, <strong>SwapDeviceContextState</strong> is single-threaded with respect to the other immediate context methods and with respect to the equivalent methods of <strong>{{ID3D10Device}}</strong>.</p><p>Crucially, because only one of the Direct3D?10 or Direct3D?11 ref-count behaviors can be available at a time, one of the Direct3D?10 and Direct3D?11 interfaces must break its ref-count contract. To avoid this situation, the activation of a context state object turns off the incompatible version interface. Also, if you call a method of an incompatible version interface, the call silently fails if the method has return type <strong>void</strong>, returns an <strong>{{HRESULT}}</strong> value of <strong>{{E_INVALIDARG}}</strong>, or sets any out parameter to <strong>{{NULL}}</strong>.</p><p>When you switch from Direct3D?11 mode to either Direct3D?10 mode or Direct3D?10.1 mode, the binding behavior of the device changes. Specifically, the final release of a resource induces unbind in Direct3D?10 mode or Direct3D?10.1 mode. During final release an application releases all of the resource's references, including indirect references such as the linkage from view to resource, and the linkage from context state object to any of the context state object's bound resources. Any bound resource to which the application has no reference is unbound and destroyed, in order to maintain the Direct3D?10 behavior.</p><p><strong>SwapDeviceContextState</strong> does not affect any state that <strong>{{ID3D11VideoContext}}</strong> sets. </p><p>Command lists that are generated by deferred contexts do not hold a reference to context state objects and are not affected by future updates to context state objects.</p><p>No asynchronous objects are affected by <strong>SwapDeviceContextState</strong>. For example, if a query is active before a call to <strong>SwapDeviceContextState</strong>, it is still active after the call.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the context state object that was previously created through the <strong>{{ID3D11Device1::CreateDeviceContextState}}</strong> method. If <strong>SwapDeviceContextState</strong> is called with <em>pState</em> set to <strong>{{NULL}}</strong>, the call has no effect.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DDeviceContextState}}</strong> interface for the previously-activated context state object.</p> </dd> + + + + + <p>Sets all the elements in a resource view to one value.</p> + <p><strong>ClearView</strong> works only on render-target views ({{RTVs}}), depth/stencil views ({{DSVs}}) on depth-only resources (resources with no stencil component), unordered-access views ({{UAVs}}), or any video view of a <strong>Texture2D</strong> surface. The runtime drops invalid calls. Empty rectangles in the <em>pRect</em> array are a no-op. A rectangle is empty if the top value equals the bottom value or the left value equals the right value.</p><p><strong>ClearView</strong> doesn?t support 3D textures.</p><p><strong>ClearView</strong> applies the same color value to all array slices in a view; all rectangles in the <em>pRect</em> array correspond to each array slice. The <em>pRect</em> array of rectangles is a set of areas to clear on a single surface. If the view is an array, <strong>ClearView</strong> clears all the rectangles on each array slice individually.</p><p>When you apply rectangles to buffers, set the top value to 0 and the bottom value to 1 and set the left value and right value to describe the extent within the buffer. When the top value equals the bottom value or the left value equals the right value, the rectangle is empty and a no-op is achieved.</p><p>The driver converts and clamps color values to the destination format as appropriate per Direct3D conversion rules. For example, if the format of the view is <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>, the driver clamps inputs to 0.0f to 1.0f (+{{INF}} -&gt; 1.0f (0XFF)/NaN -&gt; 0.0f).</p><p>If the format is integer, such as <strong>{{DXGI_FORMAT_R8G8B8A8_UINT}}</strong>, the runtime interprets inputs as integral floats. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p><p>Here are the color mappings:</p><ul> <li>Color[0]: R (or Y for video)</li> <li>Color[1]: G (or U/Cb for video)</li> <li>Color[2]: B (or V/Cr for video)</li> <li>Color[3]: A</li> </ul><p>For video views with {{YUV}} or {{YCbBr}} formats, <strong>ClearView</strong> doesn't convert color values. In situations where the format name doesn?t indicate _UNORM, _UINT, and so on, <strong>ClearView</strong> assumes _UINT. Therefore, 235.0f maps to 235 (rounds to zero, out of range/{{INF}} values clamp to target range, and NaN to 0).</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11View}}</strong> interface that represents the resource view to clear.</p> </dd> + + + <dd> <p>A 4-component array that represents the color to use to clear the resource view.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearView</strong> clears the entire surface.</p> </dd> + + + <dd> <p>Number of rectangles in the array that the <em>pRect</em> parameter specifies.</p> </dd> + + + + + <p>Discards the specified elements in a resource view from the device context.</p> + <p><strong>DiscardView1</strong> informs the graphics processing unit ({{GPU}}) that the existing content in the specified elements in the resource view that <em>pResourceView</em> points to is no longer needed. The view can be an {{SRV}}, {{RTV}}, {{UAV}}, or {{DSV}}. <strong>DiscardView1</strong> is a variation on the <strong>DiscardResource</strong> method. <strong>DiscardView1</strong> allows you to discard elements of a subset of a resource that is in a view (such as elements of a single miplevel). More importantly, <strong>DiscardView1</strong> provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, <strong>DiscardResource</strong> can do the job for any resource. </p> + <p>Returns nothing</p> + + + <dd> <p> A reference to the <strong>{{ID3D11View}}</strong> interface for the resource view to discard. The resource that underlies the view must have been created with usage <strong>{{D3D11_USAGE_DEFAULT}}</strong> or <strong>{{D3D11_USAGE_DYNAMIC}}</strong>, otherwise the runtime drops the call to <strong>DiscardView1</strong>; if the debug layer is enabled, the runtime returns an error message. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_RECT}}</strong> structures for the rectangles in the resource view to discard. If <strong>{{NULL}}</strong>, <strong>DiscardView1</strong> discards the entire view and behaves the same as <strong>DiscardView</strong>. </p> </dd> + + + <dd> <p> Number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the video functionality of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext1}}</strong> interface reference.</p> + + + + <p>Submits one or more buffers for decoding.</p> + <p>This function does not honor any {{D3D11}} predicate that may have been set. <strong>{{D3D11_QUERY_DATA_PIPELINE_STATISTICS}}</strong> will not include this function for any feature level. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface. To get this reference, call the <strong>{{ID3D11VideoDevice::CreateVideoDecoder}}</strong> method.</p> </dd> + + + <dd> <p>The number of buffers submitted for decoding.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{D3D11_VIDEO_DECODER_BUFFER_DESC1}}</strong> structures. The <em>NumBuffers</em> parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.</p> </dd> + + + + + <p>Allows the driver to return {{IHV}} specific information used when initializing the new hardware key.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the {{ID3D11CryptoSession}} interface. To get this reference, call <strong>{{ID3D11VideoDevice1::CreateCryptoSession}}</strong>.</p> </dd> + + + <dd> <p>The size of the memory referenced by the <em>pPrivateInputData</em> parameter.</p> </dd> + + + <dd> <p>The private input data. The contents of this parameter is defined by the implementation of the secure execution environment. It may contain data about the license or about the stream properties.</p> </dd> + + + <dd> <p>A reference to the private output data. The return data is defined by the implementation of the secure execution environment. It may contain graphics-specific data to be associated with the underlying hardware key.</p> </dd> + + + + + <p>Checks the status of a crypto session.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>Specifies a <strong>{{ID3D11CryptoSession}}</strong> for which status is checked.</p> </dd> + + + <dd> <p>A {{D3D11_CRYPTO_SESSION_STATUS}} that is populated with the crypto session status upon completion.</p> </dd> + + + + + <p>Indicates that decoder downsampling will be used and that the driver should allocate the appropriate reference frames. </p> + <p>This function can only be called once for a specific <strong>{{ID3D11VideoDecoder}}</strong> interface. This method must be called prior to the first call to <strong>DecoderBeginFrame</strong>. To update the downsampling parameters, use <strong>DecoderUpdateDownsampling</strong>.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The color space information of the reference frame data.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>The number of reference frames to be used in the operation.</p> </dd> + + + + + <p>Updates the decoder downsampling parameters.</p> + <p>This method can only be called after decode downsampling is enabled by calling <strong>DecoderEnableDownsampling</strong>. This method is only supported if the <strong>{{D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC}}</strong> capability is reported.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoDecoder}}</strong> interface.</p> </dd> + + + <dd> <p>The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + + + <p>Sets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Sets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> will be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the color space information for the video processor output surface.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that indicates the colorspace for the video processor output surface.</p> </dd> + + + + + <p>Gets a value indicating whether the output surface from a call to <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> can be read by Direct3D shaders.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Specifies whether the video processor input stream should be flipped vertically or horizontally.</p> + <p>When used in combination, transformations on the processor input stream should be applied in the following order:</p><ul> <li>Rotation</li> <li>Mirroring</li> <li>Source clipping</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>True if mirroring should be enabled; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>True if the stream should be flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Gets the color space information for the video processor input stream.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace for the video processor input stream.</p> </dd> + + + + + <p>Gets values that indicate whether the video processor input stream is being flipped vertically or horizontally.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11VideoProcessor}}</strong> interface.</p> </dd> + + + <dd> <p>An index identifying the input stream.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether mirroring is enabled. True if mirroring is enabled; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped horizontally. True if the stream is being flipped horizontally; otherwise, false.</p> </dd> + + + <dd> <p>A reference to a boolean value indicating whether the stream is being flipped vertically. True if the stream is being flipped vertically; otherwise, false.</p> </dd> + + + + + <p>Returns driver hints that indicate which of the video processor operations are best performed using multi-plane overlay hardware rather than <strong>{{ID3D11VideoContext::VideoProcessorBlt}}</strong> method.</p> + <p>This method computes the behavior hints using the current state of the video processor as set by the "SetOutput" and "SetStream" methods of <strong>{{ID3D11VideoContext}}</strong> and <strong>{{ID3D11VideoContext1}}</strong>. You must set the proper state before calling this method to ensure that the returned hints contain useful data.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>There is insufficient memory to complete the operation.</td></tr> </table><p>?</p> + + + + <p>Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device. </p> + <p>The Direct3D?11 device supports this interface. To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11Device1}}</strong> interface reference.</p> + + + + <p>Retrieves optional sizes for private driver data. </p> + <p>When <em>pKeyExchangeType</em> is <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION}}</strong>, the following behavior is expected in the <strong>{{ID3D11VideoContext::NegotiateCryptoSessionKeyExchange}}</strong> method:</p><ul> <li>The <em>DataSize</em> parameter is set to the size of the <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure.</li> <li><em>pData</em> points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA}}</strong> structure. <ul> <li>The <strong>pInputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA}}</strong> structure where:<ul> <li><strong>pbInput</strong>[0] ? <strong>pbInput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateInputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbInput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> <li>The <strong>pOutputData</strong> of this structure points to a <strong>{{D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA}}</strong> structure where:<ul> <li><strong>pbOutput</strong>[0] ? <strong>pbOutput</strong>[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the <strong>pPrivateOutputSize</strong> value returned by the <strong>{{ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize}}</strong> function.</li> <li><strong>pbOutput</strong>[N] contains the first byte of the {{DRM}} command packet.</li> </ul> </li> </ul> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Indicates the crypto type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the decoder profile for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Indicates the key exchange type for which the private input and output size is queried.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for input commands.</p> </dd> + + + <dd> <p>Returns the size of private data that the driver needs for output commands.</p> </dd> + + + + + <p>Retrieves capabilities and limitations of the video decoder.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The decode profile for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video width for which the capabilities are queried.</p> </dd> + + + <dd> <p>The video height for which the capabilities are queried.</p> </dd> + + + <dd> <p>The frame rate of the video content. This information is used by the driver to determine whether the video can be decoded in real-time.</p> </dd> + + + <dd> <p>The bit rate of the video stream. A value of zero indicates that the bit rate can be ignored.</p> </dd> + + + <dd> <p>The type of cryptography used to encrypt the video stream. A value of {{NULL}} indicates that the video stream is not encrypted.</p> </dd> + + + <dd> <p>A reference to a bitwise {{OR}} combination of <strong>{{D3D11_VIDEO_DECODER_CAPS}}</strong> values specifying the decoder capabilities. </p> </dd> + + + + + <p>Indicates whether the video decoder supports downsampling with the specified input format, and whether real-time downsampling is supported.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>An object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>An object describing the resolution, format, and colorspace of the output frames. This is the destination resolution and format of the downsample operation.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if downsampling is supported with the specified input data. True if the driver supports the requested downsampling; otherwise, false.</p> </dd> + + + <dd> <p>Pointer to a boolean value set by the driver that indicates if real-time decoding is supported with the specified input data. True if the driver supports the requested real-time decoding; otherwise, false. Note that the returned value is based on the current configuration of the video decoder and does not guarantee that real-time decoding will be supported for future downsampling operations.</p> </dd> + + + + + <p>Allows the driver to recommend optimal output downsample parameters from the input parameters.</p> + <p>You should call <strong>GetVideoDecoderCaps</strong> to determine whether decoder downsampling is supported before checking support for a specific configuration.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{D3D11_VIDEO_DECODER_DESC}}</strong> object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong> value that specifies the colorspace of the reference frame data.</p> </dd> + + + <dd> <p>The configuration data associated with the decode profile.</p> </dd> + + + <dd> <p>The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time. </p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_VIDEO_SAMPLE_DESC}}</strong> structure that the driver populates with the recommended output buffer parameters for a downsample operation. The driver will attempt to recommend parameters that can support real-time decoding. If it is unable to do so, the driver will recommend values that are as close to the real-time solution as possible.</p> </dd> + + + + + <p>Enumerates the video processor capabilities of a Microsoft Direct3D?11 device.</p> + <p>To get a reference to this interface, call <strong>{{ID3D11VideoDevice::CreateVideoProcessorEnumerator}}</strong>. </p> + + + + <p>Indicates whether the driver supports the specified combination of format and colorspace conversions.</p> + <p>This method returns one of the following error codes.</p><table> <tr><td>{{S_OK}}</td><td>The operation completed successfully.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed or this function was called using an invalid calling pattern.</td></tr> </table><p>?</p> + + + <dd> <p>The format of the video processor input.</p> </dd> + + + <dd> <p>The colorspace of the video processor input.</p> </dd> + + + <dd> <p>The format of the video processor output.</p> </dd> + + + <dd> <p>The colorspace of the video processor output.</p> </dd> + + + <dd> <p>Pointer to a boolean that is set by the driver to indicate if the specified combination of format and colorspace conversions is supported. True if the conversion is supported; otherwise, false.</p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device1}}</strong> adds new methods to those in <strong>{{ID3D11Device}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists.</p> + <p><strong>GetImmediateContext1</strong> returns an <strong>{{ID3D11DeviceContext1}}</strong> object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.</p><p><strong>GetImmediateContext1</strong> increments the reference count of the immediate context by one. So, call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized.</p> </dd> + + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device that is represented by <strong>{{ID3D11Device1}}</strong>, the <strong>CreateDeferredContext1</strong> method will fail, and you will not be able to create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the graphics adapter has been physically removed from the computer or a driver upgrade for the graphics adapter has occurred. If this error occurs, you should destroy and re-create the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext1</strong> method cannot be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext1</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the application has exhausted available memory. </li> </ul> + + + <dd> <p> Reserved for future use. Pass 0. </p> </dd> + + + <dd> <p> Upon completion of the method, the passed reference to an <strong>{{ID3D11DeviceContext1}}</strong> interface reference is initialized. </p> </dd> + + + + + <p>Creates a blend-state object that encapsulates blend state for the output-merger stage and allows the configuration of logic operations.</p> + <p>The logical operations (those that enable bitwise logical operations between pixel shader output and render target contents, refer to <strong>{{D3D11_RENDER_TARGET_BLEND_DESC1}}</strong> ) are only available on certain feature levels; call <strong>CheckFeatureSupport</strong> with {{D3D11_FEATURE_D3D11_OPTIONS}} set, to ensure support by checking the boolean field <em>OutputMergerLogicOp</em> of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</p><p>An app can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>An app can create up to 4096 unique rasterizer state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p> Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior. </p> + <p> The <strong>{{REFIID}}</strong> value of the emulated interface is a {{GUID}} obtained by use of the <strong>__uuidof</strong> operator. For example, <code>__uuidof({{ID3D11Device}})</code> gets the {{GUID}} of the interface to a Microsoft Direct3D?11 device. </p><p> Call the <strong>{{ID3D11DeviceContext1::SwapDeviceContextState}}</strong> method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to <strong>SwapDeviceContextState</strong>. </p><p> When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with <code>__uuidof({{ID3D11Device}})</code> will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> will cause the runtime to turn off most of the <strong>{{ID3D11DeviceContext}}</strong> methods. This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the <strong>{{ID3D10Device1}}</strong> emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition. </p><p> For example, suppose the tessellation stage is made active through the <strong>{{ID3D11DeviceContext}}</strong> interface when you create the device through <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via <strong>QueryInterface</strong>. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call <strong>SwapDeviceContextState</strong> to activate a Direct3D?10-compatible context state object. </p><p> The following table shows the methods that are active and inactive for each emulated interface.</p><table> <tr><th> Emulated interface </th><th>Active device or immediate context interfaces </th><th>Inactive device or immediate context interfaces</th></tr> <tr><td> <p> <strong>{{ID3D11Device}}</strong> or </p> <p> <strong>{{ID3D11Device1}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> + </p> <p> <strong>{{IDXGIDevice2}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <strong>{{ID3D10Device}}</strong> </td></tr> <tr><td> <p> <strong>{{ID3D10Device1}}</strong> or </p> <p> <strong>{{ID3D10Device}}</strong> </p> </td><td> <p> <strong>{{ID3D10Device}}</strong> </p> <p> <strong>{{ID3D10Device1}}</strong> </p> <p> <strong>{{IDXGIDevice}}</strong> + </p> <p> <strong>{{IDXGIDevice1}}</strong> </p> <p> <strong>{{ID3D10Multithread}}</strong> </p> </td><td> <p> <strong>{{ID3D11Device}}</strong> </p> <p> <strong>{{ID3D11DeviceContext}}</strong> (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.) </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>ClearDepthStencilView</strong> </p> </td><td> <p> <strong>ClearDepthStencilView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearRenderTargetView</strong> </p> </td><td> <p> <strong>ClearRenderTargetView</strong> </p> </td></tr> <tr><td> <p> <strong>ClearState</strong> </p> </td><td> <p> <strong>ClearState</strong> </p> </td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewUint</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ClearUnorderedAccessViewFloat</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopyResource</strong> </p> </td><td> <p> <strong>CopyResource</strong> </p> </td></tr> <tr><td> <p> <strong>CopyStructureCount</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>CopySubresourceRegion</strong> </p> </td><td> <p> <strong>CopySubresourceRegion</strong> </p> </td></tr> <tr><td> <p> <strong>{{CSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSGetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{CSSetUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Dispatch</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DispatchIndirect</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>CreateBlendState</strong> </p> </td></tr> <tr><td> <p> <strong>Draw</strong> </p> </td><td> <p> <strong>Draw</strong> </p> </td></tr> <tr><td> <p> <strong>DrawAuto</strong> </p> </td><td> <p> <strong>DrawAuto</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexed</strong> </p> </td><td> <p> <strong>DrawIndexed</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td><td> <p> <strong>DrawIndexedInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawIndexedInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>DrawInstanced</strong> </p> </td><td> <p> <strong>DrawInstanced</strong> </p> </td></tr> <tr><td> <p> <strong>DrawInstancedIndirect</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{DSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>ExecuteCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>FinishCommandList</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Flush</strong> </p> </td><td> <p> <strong>Flush</strong> </p> </td></tr> <tr><td> <p> <strong>GenerateMips</strong> </p> </td><td> <p> <strong>GenerateMips</strong> </p> </td></tr> <tr><td> <p> <strong>GetPredication</strong> </p> </td><td> <p> <strong>GetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>GetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetType</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShader}}</strong> </p> </td><td> <p> <strong>{{GSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{GSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{GSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShader}}</strong> </p> </td><td> <p> <strong>{{GSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{GSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{HSGetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSGetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetConstantBuffers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetSamplers}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShader}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{HSSetShaderResources}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td><td> <p> <strong>{{IAGetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td><td> <p> <strong>{{IAGetInputLayout}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td><td> <p> <strong>{{IAGetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IAGetVertexBuffers}}</strong> </td><td> <p> <strong>{{IAGetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetIndexBuffer}}</strong> </td><td> <p> <strong>{{IASetIndexBuffer}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetInputLayout}}</strong> </td><td> <p> <strong>{{IASetInputLayout}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetPrimitiveTopology}}</strong> </td><td> <p> <strong>{{IASetPrimitiveTopology}}</strong> </p> </td></tr> <tr><td> <strong>{{IASetVertexBuffers}}</strong> </td><td> <p> <strong>{{IASetVertexBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMGetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMGetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMGetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMGetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td><td> <p> <strong>{{OMSetBlendState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td><td> <p> <strong>{{OMSetDepthStencilState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td><td> <p> <strong>{{OMSetRenderTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{OMSetRenderTargetsAndUnorderedAccessViews}}</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShader}}</strong> </p> </td><td> <p> <strong>{{PSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{PSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{PSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShader}}</strong> </p> </td><td> <p> <strong>{{PSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{PSSetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>ResolveSubresource</strong> </p> </td><td> <p> <strong>ResolveSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSGetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetState}}</strong> </p> </td><td> <p> <strong>{{RSGetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td><td> <p> <strong>{{RSGetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td><td> <p> <strong>{{RSSetScissorRects}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetState}}</strong> </p> </td><td> <p> <strong>{{RSSetState}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td><td> <p> <strong>{{RSSetViewports}}</strong> </p> </td></tr> <tr><td> <p> <strong>SetPredication</strong> </p> </td><td> <p> <strong>SetPredication</strong> </p> </td></tr> <tr><td> <p> <strong>SetResourceMinLOD</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>SetTextFilterSize</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td><td> <p> <strong>{{SOGetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td><td> <p> <strong>{{SOSetTargets}}</strong> </p> </td></tr> <tr><td> <p> <strong>UpdateSubresource</strong> </p> </td><td> <p> <strong>UpdateSubresource</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSGetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSGetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShader}}</strong> </p> </td><td> <p> <strong>{{VSGetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSGetShaderResources}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td><td> <p> <strong>{{VSSetConstantBuffers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td><td> <p> <strong>{{VSSetSamplers}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShader}}</strong> </p> </td><td> <p> <strong>{{VSSetShader}}</strong> </p> </td></tr> <tr><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td><td> <p> <strong>{{VSSetShaderResources}}</strong> </p> </td></tr> </table><p>?</p><p> The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.</p><table> <tr><th> Methods of <strong>{{ID3D11DeviceContext}}</strong> when <code>__uuidof({{ID3D10Device1}})</code> or <code>__uuidof({{ID3D10Device}})</code> is active </th><th> Methods of <strong>{{ID3D10Device}}</strong> when <code>__uuidof({{ID3D11Device}})</code> is active </th></tr> <tr><td> <p> <strong>Begin</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>End</strong> </p> </td><td></td></tr> <tr><td></td><td> <p> <strong>GetCreationFlags</strong> </p> </td></tr> <tr><td></td><td> <p> <strong>GetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>GetContextFlags</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>GetData</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Map</strong> </p> </td><td></td></tr> <tr><td> <p> <strong>Unmap</strong> </p> </td><td></td></tr> </table><p>?</p><p> The following table shows the <strong>{{ID3D10Device}}</strong> interface methods that the runtime does not disable because they are not immediate context methods.</p><table> <tr><th> Methods of <strong>{{ID3D10Device}}</strong> </th></tr> <tr><td> <p> <strong>CheckCounter</strong> </p> </td></tr> <tr><td> <p> <strong>CheckCounterInfo</strong> </p> </td></tr> <tr><td> <p> Create*, like <strong>CreateQuery</strong> </p> </td></tr> <tr><td> <p> <strong>GetDeviceRemovedReason</strong> </p> </td></tr> <tr><td> <p> <strong>GetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>OpenSharedResource</strong> </p> </td></tr> <tr><td> <p> <strong>SetExceptionMode</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateData</strong> </p> </td></tr> <tr><td> <p> <strong>SetPrivateDataInterface</strong> </p> </td></tr> </table><p>?</p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + <p> This method returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A combination of <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG}}</strong> values that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how to create the context state object. The <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag is currently the only defined flag. If the original device was created with <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong>, you must create all context state objects from that device with the <strong>{{D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED}}</strong> flag. </p> <p></p> <p>If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections.</p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D_FEATURE_LEVEL}}</strong> values. The array can contain elements from the following list and determines the order of feature levels for which creation is attempted. Unlike <strong>{{D3D11CreateDevice}}</strong>, you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong> because there is no default feature level array. </p> <pre>{ {{D3D_FEATURE_LEVEL_11_1}}, {{D3D_FEATURE_LEVEL_11_0}}, {{D3D_FEATURE_LEVEL_10_1}}, {{D3D_FEATURE_LEVEL_10_0}}, {{D3D_FEATURE_LEVEL_9_3}}, {{D3D_FEATURE_LEVEL_9_2}}, {{D3D_FEATURE_LEVEL_9_1}}, +}; </pre> </dd> + + + <dd> <p> The number of elements in <em>pFeatureLevels</em>. Unlike <strong>{{D3D11CreateDevice}}</strong>, you must set <em>FeatureLevels</em> to greater than 0 because you can't set <em>pFeatureLevels</em> to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> The {{SDK}} version. You must set this parameter to <strong>{{D3D11_SDK_VERSION}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are obtained by using the <strong>__uuidof</strong> operator on the <strong>{{ID3D10Device}}</strong>, <strong>{{ID3D10Device1}}</strong>, <strong>{{ID3D11Device}}</strong>, and <strong>{{ID3D11Device1}}</strong> interfaces. See Remarks. </p> </dd> + + + <dd> <p> A reference to a variable that receives a <strong>{{D3D_FEATURE_LEVEL}}</strong> value from the <em>pFeatureLevels</em> array. This is the first array value with which <strong>CreateDeviceContextState</strong> succeeded in creating the context state object. If the call to <strong>CreateDeviceContextState</strong> fails, the variable pointed to by <em>pChosenFeatureLevel</em> is set to zero. </p> </dd> + + + <dd> <p> The address of a reference to an <strong>{{ID3DDeviceContextState}}</strong> object that represents the state of a Direct3D device. </p> </dd> + + + + + <p>Give a device access to a shared resource created on a different device.</p> + <p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.</p><p>To share a resource between two Direct3D 11 devices the resource must have been created with the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> flag, if it was created using the {{ID3D11Device}} interface. If it was created using a {{DXGI}} device interface, then the resource is always shared.</p><p>The {{REFIID}}, or {{GUID}}, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D11Buffer}}) will get the {{GUID}} of the interface to a buffer resource.</p><p>When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the <strong>{{IDXGIResource}}</strong> interface and then calling <strong>GetSharedHandle</strong>.</p><pre> {{IDXGIResource}}* pOtherResource({{NULL}}); +hr = pOtherDeviceResource-&gt;QueryInterface( __uuidof({{IDXGIResource}}), (void**)&amp;pOtherResource ); +{{HANDLE}} sharedHandle; +pOtherResource-&gt;GetSharedHandle(&amp;sharedHandle); </pre><p>The only resources that can be shared are 2D non-mipmapped textures.</p><p>To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the <em>pSharedHandle</em> argument of <strong>CreateTexture</strong>. The shared Direct3D 9 handle is then passed to OpenSharedResource in the <em>hResource</em> argument.</p><p>The following code illustrates the method calls involved.</p><pre> sharedHandle = {{NULL}}; // must be set to {{NULL}} to create, can use a valid handle here to open in {{D3D9}} +pDevice9-&gt;CreateTexture(..., pTex2D_9, &amp;sharedHandle); +... +pDevice11-&gt;OpenSharedResource(sharedHandle, __uuidof({{ID3D11Resource}}), (void**)(&amp;tempResource11)); +tempResource11-&gt;QueryInterface(__uuidof({{ID3D11Texture2D}}), (void**)(&amp;pTex2D_11)); +tempResource11-&gt;Release(); +// now use pTex2D_11 with pDevice11 </pre><p>Textures being shared from {{D3D9}} to {{D3D11}} have the following restrictions.</p><ul> <li>Textures must be 2D</li> <li>Only 1 mip level is allowed</li> <li>Texture must have default usage</li> <li>Texture must be write only</li> <li>{{MSAA}} textures are not allowed</li> <li>Bind flags must have {{SHADER_RESOURCE}} and {{RENDER_TARGET}} set</li> <li>Only {{R10G10B10A2_UNORM}}, {{R16G16B16A16_FLOAT}} and {{R8G8B8A8_UNORM}} formats are allowed</li> </ul><p>If a shared texture is updated on one device <strong>{{ID3D11DeviceContext::Flush}}</strong> must be called on that device.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A resource handle. See remarks.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) for the resource interface. See remarks.</p> </dd> + + + <dd> <p>Address of a reference to the resource we are gaining access to.</p> </dd> + + + + + <p>Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag).</p> + <p>The behavior of <strong>OpenSharedResourceByName</strong> is similar to the behavior of the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method; each call to <strong>OpenSharedResourceByName</strong> to access a resource creates a new resource object. In other words, if you call <strong>OpenSharedResourceByName</strong> twice and pass the same resource name to <em>lpName</em>, you receive two resource objects with different <strong>{{IUnknown}}</strong> references.</p><p><strong>To share a resource between two devices</strong></p><ol> <li>Create the resource as shared and specify that it uses {{NT}} handles, by setting the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag.</li> <li>Obtain the {{REFIID}}, or {{GUID}}, of the interface to the resource by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D11Texture2D}}</strong>) retrieves the {{GUID}} of the interface to a 2D texture.</li> <li>Query the resource for the <strong>{{IDXGIResource1}}</strong> interface.</li> <li>Call the <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method to obtain the unique handle to the resource. In this <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> call, you must pass a name for the resource if you want to subsequently call <strong>OpenSharedResourceByName</strong> to access the resource by name. </li> </ol> + <p>This method returns one of the Direct3D 11 return codes. This method also returns {{E_ACCESSDENIED}} if the permissions to access the resource aren't valid.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>OpenSharedResourceByName</strong> fails with {{E_NOTIMPL}} because {{NTHANDLES}} are used. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface enables an application to describe conceptual sections and markers within the application's code flow. An appropriately enabled tool, such as Microsoft Visual Studio Ultimate?2012, can display these sections and markers visually along the tool's Microsoft Direct3D time line, while the tool debugs the application. These visual notes allow users of such a tool to navigate to parts of the time line that are of interest, or to understand what set of Direct3D calls are produced by certain sections of the application's code.</p> + <p>The methods of <strong>{{ID3DUserDefinedAnnotation}}</strong> have no effect when the calling application is not running under a Direct3D-specific profiling tool like Visual Studio Ultimate?2012. +</p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is published by Microsoft Direct3D?11 device contexts. Therefore, <strong>{{ID3DUserDefinedAnnotation}}</strong> has the same threading rules as the <strong>{{ID3D11DeviceContext}}</strong> interface, or any other context interface. For more information about Direct3D threading, see MultiThreading. +To retrieve the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface for the context, call the <strong>QueryInterface</strong> method for the context (for example, <strong>{{ID3D11DeviceContext::QueryInterface}}</strong>). In this call, you must pass the identifier of <strong>{{ID3DUserDefinedAnnotation}}</strong>. </p><p>The <strong>{{ID3DUserDefinedAnnotation}}</strong> interface is the Microsoft Direct3D?10 and later equivalent of the Direct3D 9 {{PIX}} functions ({{D3DPERF_}}* functions).</p><strong>Note</strong>??Setting the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag in your app replaces calling {{D3DPerf_SetOptions}}(1). But, to prevent Direct3D debugging tools from hooking your app, your app can also call <strong>{{ID3DUserDefinedAnnotation::GetStatus}}</strong> to determine whether it is running under a Direct3D debugging tool and then exit accordingly.?<p>You must call the <strong>BeginEvent</strong> and <strong>EndEvent</strong> methods in pairs; pairs of calls to these methods can nest within pairs of calls to these methods at a higher level in the application's call stack. In other words, a "Draw World" section can entirely contain another section named "Draw Trees," which can in turn entirely contain a section called "Draw Oaks." You can only associate an <strong>EndEvent</strong> method with the most recent <strong>BeginEvent</strong> method, that is, pairs cannot overlap. You cannot call an <strong>EndEvent</strong> for any <strong>BeginEvent</strong> that preceded the most recent <strong>BeginEvent</strong>. In fact, the runtime interprets the first <strong>EndEvent</strong> as ending the second <strong>BeginEvent</strong>.</p> + + + + <p>Marks the beginning of a section of event code.</p> + <p>You call the <strong>EndEvent</strong> method to mark the end of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>BeginEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to <strong>BeginEvent</strong> that have not yet been finalized by calls to the <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> method.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Marks the end of a section of event code.</p> + <p>You call the <strong>BeginEvent</strong> method to mark the beginning of the section of event code.</p><p>A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>EndEvent</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>Returns the number of previous calls to the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> method that have not yet been finalized by calls to <strong>EndEvent</strong>.</p><p>The return value is ?1 if the calling application is not running under a Direct3D profiling tool.</p> + + + + <p>Marks a single point of execution in code.</p> + <p>A user can visualize the marker when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.</p><p><strong>SetMarker</strong> has no effect if the calling application is not running under an enabled Direct3D profiling tool.</p> + <p>This method returns no values.</p> + + + <dd> <p>A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name of the marker. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool. +A <strong>{{NULL}}</strong> reference produces undefined results.</p> </dd> + + + + + <p>Determines whether the calling application is running under a Microsoft Direct3D profiling tool.</p> + <p>You can call <strong>GetStatus</strong> to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the <strong>{{ID3DUserDefinedAnnotation}}</strong> interface. For example, the <strong>{{ID3DUserDefinedAnnotation::BeginEvent}}</strong> and <strong>{{ID3DUserDefinedAnnotation::EndEvent}}</strong> methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.</p> + <p>The return value is nonzero if the calling application is running under a Direct3D profiling tool such as Visual Studio Ultimate?2012, and zero otherwise.</p> + + + + <p>Identifies how to perform a tile-mapping operation.</p> + + + <dd> <p>Indicates that no overwriting of tiles occurs in the tile-mapping operation.</p> </dd> + + + + + <p>Specifies a range of tile mappings to use with <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong>.</p> + + + + <p>Identifies how to check multisample quality levels.</p> + + + <dd> <p>Indicates to check the multisample quality levels of a tiled resource.</p> </dd> + + + + + <p>Identifies how to copy a tile.</p> + + + <dd> <p>Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the +specified buffer location, reading tiles sequentially, +to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. +</p> </dd> + + + <dd> <p>Indicates that the <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), +to the specified buffer location, deswizzling to linear memory layout as needed. +In this <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. +</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + + + <dd> <p>The x position of a tiled resource. Used for buffer and 1D, 2D, and 3D textures.</p> </dd> + + + <dd> <p>The y position of a tiled resource. Used for 2D and 3D textures.</p> </dd> + + + <dd> <p>The z position of a tiled resource. Used for 3D textures.</p> </dd> + + + <dd> <p>A subresource index value into mipmaps and arrays. Used for 1D, 2D, and 3D textures. </p> <p>For mipmaps that use nonstandard tiling, or are packed, or both use nonstandard tiling and are packed, any subresource value that indicates any of the packed mipmaps all refer to the same tile.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p>Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p>If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once.</p> <p>Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>bUseBox</strong>, you use a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p>When the region includes mipmaps that are packed with nonstandard tiling, <strong>bUseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0.</p> </dd> + + + <dd> <p>The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. </p> </dd> + + + <dd> <p>The height of the tiled region, in tiles. Used for 2D and 3D textures. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p>Each packed mipmap is individually reported as 0 for <strong>WidthInTiles</strong>, <strong>HeightInTiles</strong> and <strong>DepthInTiles</strong>. +</p><p>The total number of tiles in subresources is <strong>WidthInTiles</strong>*<strong>HeightInTiles</strong>*<strong>DepthInTiles</strong>. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> <p> <strong>GetResourceTiling</strong> sets <strong>StartTileIndexInOverallResource</strong> to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff) to indicate that the whole +<strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless, and the info to which the <em>pPackedMipDesc</em> parameter of <strong>GetResourceTiling</strong> points applies. For packed tiles, the description of the packed mipmaps comes from a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure instead. +</p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p>Texels are equivalent to pixels. For untyped buffer resources, a texel is just a byte. For multisample antialiasing ({{MSAA}}) surfaces, the numbers are still in terms of pixels/texels. +The values here are independent of the surface dimensions. Even if the surface is smaller than what would fit in a tile, the full tile dimensions are reported here. +</p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p>Describes the tile structure of a tiled resource with mipmaps. </p> + + + <dd> <p>Number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p>Number of packed mipmaps in the tiled resource. </p> <p>This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no +such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same +packing. +</p> <p>On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions +are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one +dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser +mipmaps for a given array slice are considered packed as well. +</p> </dd> + + + <dd> <p>Number of tiles for the packed mipmaps in the tiled resource. </p> <p>If there is no packing, this value is meaningless and is set to 0. +Otherwise, it is set to the number of tiles +that are needed to represent the set of packed mipmaps. +The pixel layout within the packed mipmaps is hardware specific. +If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. +For arrays, this value is only the count of packed mipmaps within +the subresources for each array slice.</p> </dd> + + + <dd> <p>Offset of the first packed tile for the resource +in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this +value is meaningless and is 0. Otherwise, it is the +offset of the first packed tile for the resource in the overall +range of tiles for the resource. A value of 0 for +<strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. +For array surfaces, this is the offset for the tiles that contain the packed +mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset +past the beginning of the tiles for each array slice. </p> <strong>Note</strong>??The +number of overall tiles, packed or not, for a given array slice is +simply the total number of tiles for the resource divided by the +resource's array size, so it is easy to locate the range of tiles for +any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies +which of those are packed. ? </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext2}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext1}}</strong>.</p> + + + + <p>Updates mappings of tile locations in tiled resources to memory locations in a tile pool.</p> + <p>In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of tile-pool tiles. </p><p>You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update:</p><ul> <li><strong>Tiled resource whose mappings are updated.</strong> This is a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Mappings start off all {{NULL}} when a resource is initially created.</li> <li><strong>Set of tile regions on the tiled resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <em>NumTiledResourceRegions</em> specifies how many regions there are, <em>pTiledResourceRegionStartCoordinates</em> and <em>pTiledResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumTiledResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pTiledResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pTiledResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire tiled resource, including all mipmaps, array slices, or both. <p>If <em>pTiledResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pTiledResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pTiledResourceRegionStartCoordinates</em> without having to send an array of <em>pTiledResourceRegionSizes</em> all set to 1.</p> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Tile pool that provides memory where tile mappings can go.</strong> A tiled resource can point to a single tile pool at a time. If a new tile pool is specified (for the first time or different from the last time a tile pool was specified), all existing tile mappings for the tiled resource are cleared and the new set of mappings in the current <strong>UpdateTileMappings</strong> call are applied for the new tile pool. If no tile pool is specified ({{NULL}}) or the same tile pool as a previous <strong>UpdateTileMappings</strong> call is provided, the <strong>UpdateTileMappings</strong> call just adds the new mappings to existing ones (overwriting on overlap). If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a tile pool because it is irrelevant. But if you specify a tile pool anyway, it takes the same behavior as previously described when providing a tile pool. </li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a tile pool (default), a count of tiles in the tiled resource to map to a single tile in a tile pool (sharing the tile), a count of tile mappings in the tiled resource to skip and leave as they are, or a count of tiles in the tile pool to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described tiled resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each tiled resource tile specified has a mapping specified.</p> <p><em>pRangeFlags</em>, <em>pTilePoolStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the tile pool; otherwise, for each range i, pRangeFlags[i] identifies how the mappings in that range of tiles work:</p> <ul> <li>If pRangeFlags[i] is 0, that range defines sequential tiles in the tile pool, with the number of tiles being pRangeTileCounts[i] and the starting location pTilePoolStartOffsets[i]. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_REUSE_SINGLE_TILE}}</strong>, pTilePoolStartOffsets[i] identifies the single tile in the tile pool to map to, and pRangeTileCounts[i] specifies how many tiles from the tile regions to map to that tile pool location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions.</li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_NULL}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. pTilePoolStartOffsets[i] is ignored for {{NULL}} mappings. </li> <li>If pRangeFlags[i] is <strong>{{D3D11_TILE_RANGE_SKIP}}</strong>, pRangeTileCounts[i] specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. pTilePoolStartOffsets[i] is ignored for {{SKIP}} mappings.</li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> means the caller promises that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. This allows the device to avoid having to flush previously submitted work in order to do the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources still being referenced by outstanding commands, undefined rendering behavior results, which includes the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to tile mapping data structure itself, which in hardware is a page table. The absence of this flag requires that tile mapping updates specified by this <strong>UpdateTileMappings</strong> call must be completed before any subsequent Direct3D command can proceed.</li> </ul><p>If tile mappings have changed on a tiled resource that the app will render via <strong>RenderTargetView</strong> or <strong>DepthStencilView</strong>, the app must clear, by using the fixed function <strong>Clear</strong> {{APIs}}, the tiles that have changed within the area being rendered (mapped or not). If an app doesn't clear in these situations, the app receives undefined values when it reads from the tiled resource. +</p><strong>Note</strong>??In Direct3D 11.2, hardware can now support <strong>ClearView</strong> on depth-only formats. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong>.?<p>If an app needs to preserve existing memory contents of areas in a tiled resource where mappings have changed, the app can first save the contents where tile mappings have changed, by copying them to a temporary surface, for example using <strong>CopyTiles</strong>, issuing the required <strong>Clear</strong>, and then copying the contents back. +</p><p>Suppose a tile is mapped into multiple tiled resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the tiled resources. Then, if the same tile is to be rendered via any other tiled resource, the tile must be cleared first as previously described. +</p><p>For more info about tiled resources, see Tiled resources.</p><p>Here are some examples of common <strong>UpdateTileMappings</strong> cases:</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags result in the call being dropped.<p>The debug layer will emit an error.</p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.<p>If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Apps can avoid this situation by only doing update calls that change existing mappings from tiled resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).</p> </li> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. </li> </ul> + + + <dd> <p>A reference to the tiled resource.</p> </dd> + + + <dd> <p>The number of tiled resource regions.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the tiled resource regions. The <em>NumTiledResourceRegions</em> parameter specifies the number of <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p>A reference to the tile pool.</p> </dd> + + + <dd> <p>The number of tile-pool ranges.</p> </dd> + + + <dd> <p> An array of <strong>{{D3D11_TILE_RANGE_FLAG}}</strong> values that describe each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p>An array of offsets into the tile pool. These are 0-based tile offsets, counting in tiles (not bytes).</p> </dd> + + + <dd> <p>An array of tiles. </p> <p> An array of values that specify the number of tiles in each tile-pool range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source tiled resource to a destination tiled resource.</p> + <p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across tiled resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temp location and then from there written to the destination.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{E_INVALIDARG}}</strong> if various conditions such as invalid flags or passing in non Tiled Resources result in the call being dropped. <p> The dest and the source regions must each entirely fit in their resource or behavior is undefined (debug layer will emit an error). </p> </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory. <p> If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Applications can avoid this situation by only doing update calls that change existing mappings from Tiled Resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping). </p> </li> </ul> + + + <dd> <p>A reference to the destination tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination tiled resource. </p> </dd> + + + <dd> <p>A reference to the source tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong>, which indicates that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. The device can then avoid having to flush previously submitted work to perform the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources that are still being referenced by outstanding commands, undefined rendering behavior results, including the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D {{API}}, except applied to the tile mapping data structure itself (which in hardware is a page table). The absence of the <strong>{{D3D11_TILE_MAPPING_NO_OVERWRITE}}</strong> value requires that tile mapping updates that <strong>CopyTileMappings</strong> specifies must be completed before any subsequent Direct3D command can proceed. </p> </dd> + + + + + <p>Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on <strong>Tier_1</strong> tiled resources, where reading and writing unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain. </p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> or <strong>{{ID3D11DeviceContext2::UpdateTiles}}</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance. </p><p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D11Buffer}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Updates tiles by copying from app memory to the tiled resource. </p> + <p><strong>UpdateTiles</strong> drops write operations to unmapped areas (except on <strong>Tier_1</strong> tiled resources, where writing to unmapped areas is invalid). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.</p><p>The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) or <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> for the whole mipmap chain.</p><p>The memory layout of the data on the source side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>{{ID3D11DeviceContext2::CopyTiles}}</strong> or <strong>UpdateTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy and update {{APIs}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> and <strong>{{ID3D11DeviceContext1::UpdateSubresource1}}</strong>) to copy small mipmaps individually. Although in the case of a generic copy {{API}} (like <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong>), the linear memory must be the same dimension as the tiled resource; <strong>{{ID3D11DeviceContext1::CopySubresourceRegion1}}</strong> can't copy from a buffer resource to a Texture2D for instance.</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to a tiled resource to update.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region.</p> </dd> + + + <dd> <p>A reference to memory that contains the source tile data that <strong>UpdateTiles</strong> uses to update the tiled resource.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_TILE_COPY_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The only valid value is <strong>{{D3D11_TILE_COPY_NO_OVERWRITE}}</strong>. The other values aren't meaningful here, though +by definition the <strong>{{D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE}}</strong> value is basically what <strong>UpdateTiles</strong> does, but sources from app memory. +</p> </dd> + + + + + <p>Resizes a tile pool.</p> + <p><strong>ResizeTilePool</strong> increases or decreases the size of the tile pool depending on whether the app needs more or less working set for the tiled resources that are mapped into it. An app can allocate additional tile pools for new tiled resources, but if any single tiled resource needs more space than initially available in its tile pool, the app can increase the size of the resource's tile pool. A tiled resource can't have mappings into multiple tile pools simultaneously. </p><p>When you increase the size of a tile pool, additional tiles are added to the end of the tile pool via one or more new allocations by the driver; your app can't detect the breakdown into the new allocations. Existing memory in the tile pool is left untouched, and existing tiled resource mappings into that memory remain intact.</p><p>When you decrease the size of a tile pool, tiles are removed from the end (this is allowed even below the initial allocation size, down to 0). This means that new mappings can't be made past the new size. But, existing mappings past the end of the new size remain intact and useable. The memory is kept active as long as mappings to any part of the allocations that are being used for the tile pool memory remains. If after decreasing, some memory has been kept active because tile mappings are pointing to it and the tile pool is increased again (by any amount), the existing memory is reused first before any additional allocations occur to service the size of the increase. </p><p>To be able to save memory, an app has to not only decrease a tile pool but also remove and remap existing mappings past the end of the new smaller tile pool size.</p><p>The act of decreasing (and removing mappings) doesn't necessarily produce immediate memory savings. Freeing of memory depends on how granular the driver's underlying allocations for the tile pool are. When a decrease in the size of a tile pool happens to be enough to make a driver allocation unused, the driver can free the allocation. If a tile pool was increased and if you then decrease to previous sizes (and remove and remap tile mappings correspondingly), you will most likely yield memory savings. But, this scenario isn't guaranteed in the case that the sizes don't exactly align with the underlying allocation sizes chosen by the driver. </p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following:</p><ul> <li>Returns <strong>{{E_INVALIDARG}}</strong> if the new tile pool size isn't a multiple of 64 {{KB}} or 0.</li> <li>Returns <strong>{{E_OUTOFMEMORY}}</strong> if the call results in the driver having to allocate space for new page table mappings but running out of memory.</li> <li>Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.</li> </ul><p>For <strong>{{E_INVALIDARG}}</strong> or <strong>{{E_OUTOFMEMORY}}</strong>, the existing tile pool remains unchanged, which includes existing mappings. </p> + + + <dd> <p>A reference to an <strong>{{ID3D11Buffer}}</strong> for the tile pool to resize.</p> </dd> + + + <dd> <p>The new size in bytes of the tile pool. The size must be a multiple of 64 {{KB}} or 0.</p> </dd> + + + + + <p>Specifies a data access ordering constraint between multiple tiled resources. For more info about this constraint, see Remarks.</p> + <p>Apps can use tiled resources to reuse tiles in different resources. But, a device and driver might not be able to determine whether some memory in a tile pool that was just rendered to is now being used for reading. +</p><p>For example, an app can render to some tiles in a tile pool with one tiled resource but then read from the same tiles by using a different tiled resource. These tiled-resource operations are different from using one resource and then just switching from writing with <strong>{{ID3D11RenderTargetView}}</strong> to reading with <strong>{{ID3D11ShaderResourceView}}</strong>. The runtime already tracks and handles these one resource operations using <strong>{{ID3D11RenderTargetView}}</strong> and <strong>{{ID3D11ShaderResourceView}}</strong>. +</p><p>When an app transitions from accessing (reading or writing) some location in a tile pool with one resource to accessing the same memory (read or write) via another tiled resource (with mappings to the same memory), the app must call <strong>TiledResourceBarrier</strong> after the first use of the resource and before the second. The parameters are the <em>pTiledResourceOrViewAccessBeforeBarrier</em> for accesses before the barrier (via rendering, copying), and the <em>pTiledResourceOrViewAccessAfterBarrier</em> for accesses after the barrier by using the same tile pool memory. If the resources are identical, the app doesn't need to call <strong>TiledResourceBarrier</strong> because this kind of hazard is already tracked and handled. +</p><p>The barrier call informs the driver that operations issued to the resource before the call must complete before any accesses that occur after the call via a different tiled resource that shares the same memory. +</p><p>Either or both of the parameters (before or after the barrier) can be <strong>{{NULL}}</strong>. <strong>{{NULL}}</strong> before the barrier means all tiled resource accesses before the barrier must complete before the resource specified after the barrier can be referenced by the graphics processing unit ({{GPU}}). <strong>{{NULL}}</strong> after the barrier means that any tiled resources accessed after the barrier can only be executed by the {{GPU}} after accesses to the tiled resources before the barrier are finished. Both <strong>{{NULL}}</strong> means all previous tiled resource accesses are complete before any subsequent tiled resource access can proceed. +</p><p>An app can pass a view reference, a resource, or <strong>{{NULL}}</strong> for each parameter. Views are allowed not only for convenience but also to allow the app to scope the barrier effect to a relevant portion of a resource. +</p><p>For more info about tiled resources, see Tiled resources.</p> + <p>Returns nothing</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must complete before the access operations on the object that <em>pTiledResourceOrViewAccessAfterBarrier</em> specifies.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11Resource}}</strong> or <strong>{{ID3D11View}}</strong> for a resource that was created with the <strong>{{D3D11_RESOURCE_MISC_TILED}}</strong> flag. Access operations on this object must begin after the access operations on the object that <em>pTiledResourceOrViewAccessBeforeBarrier</em> specifies.</p> </dd> + + + + + <p> Allows apps to determine when either a capture or profiling request is enabled.</p> + <p>Returns <strong>{{TRUE}}</strong> if the capture tool is present and capturing or the app is being profiled such that <strong>SetMarkerInt</strong> or <strong>BeginEventInt</strong> will be logged to <strong>{{ETW}}</strong>. Otherwise, it returns <strong>{{FALSE}}</strong>. Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so. </p><p>If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the <strong>{{D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY}}</strong> flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.</p> + <p>Returns <strong>{{TRUE}}</strong> if capture or profiling is enabled and <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Allows applications to annotate graphics commands.</p> + <p><strong>SetMarkerInt</strong> allows applications to annotate graphics commands, in order to provide more context to what the {{GPU}} is executing. When {{ETW}} logging or a support tool is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the beginning of a range of graphics commands.</p> + <p><strong>BeginEventInt</strong> allows applications to annotate the beginning of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When <strong>{{ETW}}</strong> logging (or a supported tool) is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines. The <em>pLabel</em> and <em>Data</em> value are logged to {{ETW}}. When the appropriate {{ETW}} logging is not enabled, this method does nothing.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An optional string that will be logged to <strong>{{ETW}}</strong> when {{ETW}} logging is active. If <strong>?#d?</strong> appears in the string, it will be replaced by the value of the <em>Data</em> parameter similar to the way <strong>printf</strong> works.</p> </dd> + + + <dd> <p>A signed data value that will be logged to {{ETW}} when {{ETW}} logging is active.</p> </dd> + + + + + <p>Allows applications to annotate the end of a range of graphics commands.</p> + <p><strong>EndEvent</strong> allows applications to annotate the end of a range of graphics commands, in order to provide more context to what the {{GPU}} is executing. When the appropriate <strong>{{ETW}}</strong> logging is not enabled, this method does nothing. When {{ETW}} logging is enabled, an additional marker is correlated between the {{CPU}} and {{GPU}} timelines.</p> + <p>This method does not return a value.</p> + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device2}}</strong> adds new methods to those in <strong>{{ID3D11Device1}}</strong>.</p> + + + + <p>Gets an immediate context, which can play back command lists. </p> + <p>The <strong>GetImmediateContext2</strong> method returns an <strong>{{ID3D11DeviceContext2}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.</p><p>The <strong>GetImmediateContext2</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the <strong>{{ID3D11CommandList}}</strong> interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core {{CPU}} scenarios. </p><p> You can create multiple deferred contexts. </p><strong>Note</strong>?? If you use the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value to create the device, <strong>CreateDeferredContext2</strong> fails with <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>, and you can't create a deferred context.?<p> For more information about deferred contexts, see Immediate and Deferred Rendering. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext2</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext2</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p>Gets info about how a tiled resource is broken into tiles.</p> + <p> For more info about tiled resources, see Tiled resources. </p> + <p>Returns nothing</p> + + + <dd> <p>A reference to the tiled resource to get info about.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_PACKED_MIP_DESC}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_TILE_SHAPE}}</strong> to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. </p> <p> If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> to zeros, except the <strong>StartTileIndexInOverallResource</strong> member, which <strong>GetResourceTiling</strong> sets to <strong>{{D3D11_PACKED_TILE}}</strong> (0xffffffff). The <strong>{{D3D11_PACKED_TILE}}</strong> constant indicates that the whole <strong>{{D3D11_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p>Get the number of quality levels available during multisampling.</p> + <p>When you multisample a texture, the number of quality levels available for an adapter is dependent on the texture format that you use and the number of samples that you request. The maximum number of quality levels is defined by <strong>{{D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT}}</strong> in {{D3D11}}.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.</p><p>Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.</p><p>Note that {{FEATURE_LEVEL_10_1}} devices are required to support 4x {{MSAA}} for all render targets except {{R32G32B32A32}} and {{R32G32B32}}. {{FEATURE_LEVEL_11_0}} devices are required to support 4x {{MSAA}} for all render target formats, and 8x {{MSAA}} for all render target formats except {{R32G32B32A32}} formats.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The texture format during multisampling. </p> </dd> + + + <dd> <p>The number of samples during multisampling.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. Currently, only <strong>{{D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE}}</strong> is supported. </p> </dd> + + + <dd> <p>A reference to a variable the receives the number of quality levels supported by the adapter. See Remarks.</p> </dd> + + + + + <p>Specifies the context in which a query occurs.</p> + <p> This enum is used by the following: </p><ul> <li> <strong>{{D3D11_QUERY_DESC1}}</strong> structure </li> <li> A {{CD3D11_QUERY_DESC1}} constructor.</li> <li> <strong>{{ID3D11DeviceContext3::Flush1}}</strong> method </li> </ul> + + + <dd> <p>The query can occur in all contexts.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D command queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D compute queue.</p> </dd> + + + <dd> <p>The query occurs in the context of a 3D copy queue.</p> </dd> + + + <dd> <p>The query occurs in the context of video.</p> </dd> + + + + + <p>Specifies texture layout options.</p> + <p>This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS2}}</strong> to ensure that each option is supported.</p><p>The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p>To demonstrate, consider the 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant.</p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000 +</code><p>To compute the swizzled address, the following code could be used (where the _pdep_u32 instruction is supported):</p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask); +</code> + + + <dd> <p>The texture layout is undefined, and is selected by the driver.</p> </dd> + + + <dd> <p>Data for the texture is stored in row major (sometimes called pitch-linear) order.</p> </dd> + + + <dd> <p>A default texture uses the standardized swizzle pattern.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p>Device context options.</p> + <p>This enumeration is used by <strong>{{ID3D11DeviceContext::GetType}}</strong>.</p> + + + <dd> <p>The device context is an immediate context.</p> </dd> + + + <dd> <p>The device context is a deferred context.</p> </dd> + + + + + <p>Describes a 2D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE2D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (8192) when you create your 2D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION}} (16384). For a texture cube-map, the range is from 1 to {{D3D11_REQ_TEXTURECUBE_DIMENSION}} (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Number of textures in the texture array. The range is from 1 to {{D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION}} (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the <strong>NumCubes</strong> member of <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong>), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Structure that specifies multisampling parameters for the texture. See <strong>{{DXGI_SAMPLE_DESC}}</strong>.</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical {{OR}}. For a texture cube-map, set the <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> flag. Cube-map arrays (that is, <strong>ArraySize</strong> &gt; 6) require feature level <strong>{{D3D_FEATURE_LEVEL_10_1}}</strong> or higher.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting TextureLayout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}. </p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may only be used to create non-multisampled, textures with a single subresource (Planar {{YUV}} textures are supported). These textures may only be used as a source and destination of copy operations, and BindFlags must be zero. +</p> <p>{{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may only be used to create non-multisampled, non-depth-stencil textures. </p> </dd> + + + + + <p>Describes a 3D texture.</p> + <p>This structure is used in a call to <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>.</p><p>In addition to this structure, you can also use the <strong>{{CD3D11_TEXTURE3D_DESC1}}</strong> derived structure, which is defined in {{D3D11_3}}.h and behaves like an inherited class, to help create a texture description.</p><p>The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.</p><p>The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 (<strong>{{D3D_FEATURE_LEVEL_10_0}}</strong>) and call <strong>{{D3D11CreateDevice}}</strong> to create an <strong>{{ID3D11Device}}</strong>, you must constrain the maximum texture size to {{D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048) when you create your 3D texture.</p> + + + <dd> <p>Texture width (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture height (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>Texture depth (in texels). The range is from 1 to {{D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION}} (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels in the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.</p> </dd> + + + <dd> <p>Texture format (see <strong>{{DXGI_FORMAT}}</strong>).</p> </dd> + + + <dd> <p>Value that identifies how the texture is to be read from and written to. The most common value is {{D3D11_USAGE_DEFAULT}}; see <strong>{{D3D11_USAGE}}</strong> for all possible values.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_BIND_FLAG}}</strong>) for binding to pipeline stages. The flags can be combined by a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_CPU_ACCESS_FLAG}}</strong>) to specify the types of {{CPU}} access allowed. Use 0 if {{CPU}} access is not required. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>Flags (see <strong>{{D3D11_RESOURCE_MISC_FLAG}}</strong>) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical {{OR}}.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXTURE_LAYOUT}}</strong>-typed value that identifies the layout of the texture.</p> <p>The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without {{CPU}} access also requested.</p> <p>It is illegal to set {{CPU}} access flags on default textures without also setting Layout to a value other than {{D3D11_TEXTURE_LAYOUT_UNDEFINED}}.</p> <p>{{D3D11_TEXTURE_LAYOUT_ROW_MAJOR}} may not be used with 3D textures. {{D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE}} may not be used with 3D textures that have mipmaps.</p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p>Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To set rasterizer state, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p><p>If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>Solid</td></tr> <tr><td><strong>CullMode</strong></td><td>Back</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>ScissorEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p><strong>Note</strong>??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set <strong>MultisampleEnable</strong> to <strong>{{FALSE}}</strong>, the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of <strong>MultisampleEnable</strong> has no effect on points and triangles with regard to {{MSAA}} and impacts only the selection of the line-rendering algorithm as shown in this table:?<p> </p><table> <tr><th>Line-rendering algorithm</th><th><strong>MultisampleEnable</strong></th><th><strong>AntialiasedLineEnable</strong></th></tr> <tr><td>Aliased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Alpha antialiased</td><td><strong>{{FALSE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>Quadrilateral</td><td><strong>{{TRUE}}</strong></td><td><strong>{{TRUE}}</strong></td></tr> </table><p>?</p><p>The settings of the <strong>MultisampleEnable</strong> and <strong>AntialiasedLineEnable</strong> members apply only to multisample antialiasing ({{MSAA}}) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set <strong>MultisampleEnable</strong> to <strong>{{TRUE}}</strong> whenever you render on {{MSAA}} render targets.</p> + + + <dd> <p>A <strong>{{D3D11_FILL_MODE}}</strong>-typed value that determines the fill mode to use when rendering.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_CULL_MODE}}</strong>-typed value that indicates that triangles facing the specified direction are not drawn.</p> </dd> + + + <dd> <p>Specifies whether a triangle is front- or back-facing. If <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If <strong>{{FALSE}}</strong>, the opposite is true.</p> </dd> + + + <dd> <p>Depth value added to a given pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.</p> </dd> + + + <dd> <p>Specifies whether to enable clipping based on distance.</p> <p>The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +</p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p>When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +</p> </dd> + + + <dd> <p>Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.</p> </dd> + + + <dd> <p>Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks.</p> </dd> + + + <dd> <p>The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.</p> <strong>Note</strong>??<p>If you want to render with <strong>ForcedSampleCount</strong> set to 1 or greater, you must follow these guidelines: </p> <ul> <li>Don't bind depth-stencil views.</li> <li>Disable depth testing.</li> <li>Ensure the shader doesn't output depth.</li> <li>If you have any render-target views bound (<strong>{{D3D11_BIND_RENDER_TARGET}}</strong>) and <strong>ForcedSampleCount</strong> is greater than 1, ensure that every render target has only a single sample.</li> <li>Don't operate the shader at sample frequency. Therefore, <strong>{{ID3D11ShaderReflection::IsSampleFrequencyShader}}</strong> returns <strong>{{FALSE}}</strong>.</li> </ul>Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ? </dd> + + + <dd> <p>A <strong>{{D3D11_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and (<strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1 ). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and ( <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong> creates a view) - 1). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D11_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p>A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.</p><p>When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource.</p><p>Create a shader-resource-view description by calling <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>. To view a shader-resource-view description, call <strong>{{ID3D11ShaderResourceView1::GetDesc1}}</strong>.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_SRV}}</strong> structure that views the resource as a buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_SRV1}}</strong> structure that views the resource as a 2D-texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_SRV1}}</strong> structure that views the resource as a 2D-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFEREX_SRV}}</strong> structure that views the resource as a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array to use in the render-target view, starting from <strong>FirstArraySlice</strong>.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using a render-target view.</p> + <p>A render-target-view description is passed into <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong> to create a render target.</p><p>A render-target-view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_RTV_DIMENSION}}</strong>-typed value that specifies the resource type and how the render-target resource will be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_RTV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_RTV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in the texture.</p> </dd> + + + + + <p>Describes an array of unordered-access 2D texture resources.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p>The index (plane slice number) of the plane to use in an array of textures.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible using an unordered-access view.</p> + <p>An unordered-access-view description is passed into <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the data format.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_UAV1}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX2D_ARRAY_UAV1}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D11_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes a query.</p> + + + <dd> <p>A <strong>{{D3D11_QUERY}}</strong>-typed value that specifies the type of query.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_QUERY_MISC_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies query behavior. </p> </dd> + + + <dd> <p>A <strong>{{D3D11_CONTEXT_TYPE}}</strong>-typed value that specifies the context for the query.</p> </dd> + + + + + <p>A 2D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture2D resource, call <strong>{{ID3D11Device3::CreateTexture2D1}}</strong>. For info about how to create a 2D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE2D_DESC1}}</strong> structure that receives the description of the 2D texture.</p> </dd> + + + + + <p>A 3D texture interface represents texel data, which is structured memory.</p> + <p>To create an empty Texture3D resource, call <strong>{{ID3D11Device3::CreateTexture3D1}}</strong>. For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture. </p><p>Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>, and <strong>{{ID3D11Device::CreateDepthStencilView}}</strong>, respectively. To use the texture as an input to a shader, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p> + + + + <p>Gets the properties of the texture resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_TEXTURE3D_DESC1}}</strong> structure that receives the description of the 3D texture.</p> </dd> + + + + + <p>The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count and conservative rasterization mode.</p> + <p>To create a rasterizer-state object, call <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong>. To bind the rasterizer-state object to the rasterizer stage, call <strong>{{ID3D11DeviceContext::RSSetState}}</strong>.</p> + + + + <p>Gets the description for rasterizer state that you used to create the rasterizer-state object.</p> + <p>You use the description for rasterizer state in a call to the <strong>{{ID3D11Device3::CreateRasterizerState2}}</strong> method to create the rasterizer-state object.</p> + <p>Returns nothing.</p> + + + <dd> <p> A reference to a <strong>{{D3D11_RASTERIZER_DESC2}}</strong> structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count and conservative rasterization mode. </p> </dd> + + + + + <p>A shader-resource-view interface represents the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.</p> + <p>To create a shader-resource view, call <strong>{{ID3D11Device3::CreateShaderResourceView1}}</strong>.</p><p>A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling <strong>{{ID3D11DeviceContext::GSSetShaderResources}}</strong>, <strong>{{ID3D11DeviceContext::VSSetShaderResources}}</strong> or <strong>{{ID3D11DeviceContext::PSSetShaderResources}}</strong>.</p> + + + + <p>Gets the shader-resource view's description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that receives the description of the shader-resource view.</p> </dd> + + + + + <p>A render-target-view interface represents the render-target subresources that can be accessed during rendering.</p> + <p>To create a render-target view, call <strong>{{ID3D11Device3::CreateRenderTargetView1}}</strong>. To bind a render-target view to the pipeline, call <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p><p>A render target is a resource that can be written by the output-merger stage at the end of a render pass. Each render target can also have a corresponding depth-stencil view.</p> + + + + <p>Gets the properties of a render-target view.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> structure that receives the description of the render-target view.</p> </dd> + + + + + <p>An unordered-access-view interface represents the parts of a resource the pipeline can access during rendering.</p> + <p>To create a view for an unordered access resource, call <strong>{{ID3D11Device3::CreateUnorderedAccessView1}}</strong>.</p><p>All resources must be bound to the pipeline before they can be accessed. Call <strong>{{ID3D11DeviceContext::CSSetUnorderedAccessViews}}</strong> to bind an unordered access view to a compute shader; call <strong>{{ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews}}</strong> to bind an unordered access view to a pixel shader.</p> + + + + <p>Gets a description of the resource.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_UNORDERED_ACCESS_VIEW_DESC1}}</strong> structure that receives the description of the unordered-access resource.</p> </dd> + + + + + <p>Represents a query object for querying information from the graphics processing unit ({{GPU}}).</p> + <p>A query can be created with <strong>{{ID3D11Device3::CreateQuery1}}</strong>.</p><p>Query data is typically gathered by issuing an <strong>{{ID3D11DeviceContext::Begin}}</strong> command, issuing some graphics commands, issuing an <strong>{{ID3D11DeviceContext::End}}</strong> command, and then calling <strong>{{ID3D11DeviceContext::GetData}}</strong> to get data about what happened in between the Begin and End calls. The data returned by <strong>GetData</strong> will be different depending on the type of query.</p><p>There are, however, some queries that do not require calls to <strong>Begin</strong>. For a list of possible queries see <strong>{{D3D11_QUERY}}</strong>.</p><p>When using a query that does not require a call to <strong>Begin</strong>, it still requires a call to <strong>End</strong>. The call to <strong>End</strong> causes the data returned by <strong>GetData</strong> to be accurate up until the last call to <strong>End</strong>.</p> + + + + <p>Gets a query description.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that receives a description of the query.</p> </dd> + + + + + <p> The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext3}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext2}}</strong>. </p> + + + + <p> Sends queued-up commands in the command buffer to the graphics processing unit ({{GPU}}), with a specified context type and an optional event handle to create an event query. </p> + <p><strong>Flush1</strong> has parameters. For more information, see <strong>{{ID3D11DeviceContext::Flush}}</strong>, which doesn't have parameters. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D11_CONTEXT_TYPE}}</strong> that specifies the context in which a query occurs, such as a 3D command queue, 3D compute queue, 3D copy queue, video, or image. </p> </dd> + + + <dd> <p> An optional event handle. When specified, this method creates an event query. </p> <p><strong>Flush1</strong> operates asynchronously, therefore it can return either before or after the {{GPU}} finishes executing the queued graphics commands, which will eventually complete. To create an event query, you can call <strong>{{ID3D11Device::CreateQuery}}</strong> with the value <strong>{{D3D11_QUERY_EVENT}}</strong> value. To determine when the {{GPU}} is finished processing the graphics commands, you can then use that event query in a call to <strong>{{ID3D11DeviceContext::GetData}}</strong>. </p> </dd> + + + + + <p> Sets the hardware protection state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies whether to enable hardware protection. </p> </dd> + + + + + <p> Gets whether hardware protection is enabled. </p> + <p> This method does not return a value. </p> + + + <dd> <p> After this method returns, points to a {{BOOL}} that indicates whether hardware protection is enabled. </p> </dd> + + + + + <p>The device context interface represents a device context; it is used to render commands. <strong>{{ID3D11DeviceContext1}}</strong> adds new methods to those in <strong>{{ID3D11DeviceContext}}</strong>.</p> + + + + + + + + + + + + + <p>The <strong>{{ID3D11DeviceContext}}</strong> interface represents a device context which generates rendering commands.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11DeviceContext4}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11DeviceContext4}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + + + + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device3}}</strong> adds new methods to those in <strong>{{ID3D11Device2}}</strong>.</p> + + + + <p>Creates a 2D texture.</p> + <p><strong>CreateTexture2D1</strong> creates a 2D texture resource, which can contain a number of 2D subresources. The number of subresources is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>For a 32 x 32 texture with a full mipmap chain, the <em>pInitialData</em> array has the following 6 elements: +</p><ul> <li>pInitialData[0] = 32x32</li> <li>pInitialData[1] = 16x16</li> <li>pInitialData[2] = 8x8</li> <li>pInitialData[3] = 4x4 +</li> <li>pInitialData[4] = 2x2 +</li> <li>pInitialData[5] = 1x1 +</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a 3D texture.</p> + <p><strong>CreateTexture3D1</strong> creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.</p><p>All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of <strong>{{D3D11_SUBRESOURCE_DATA}}</strong> structures pointed to by <em>pInitialData</em>, or they can use one of the {{D3DX}} texture functions such as <strong>{{D3DX11CreateTextureFromFile}}</strong>.</p><p>Each element of <em>pInitialData</em> provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:</p><ul> <li>pInitialData[0] = 32x32 with 4 slices</li> <li>pInitialData[1] = 16x16 with 2 slices</li> <li>pInitialData[2] = 8x8 with 1 slice</li> <li>pInitialData[3] = 4x4 +with 1 slice</li> <li>pInitialData[4] = 2x2 +with 1 slice</li> <li>pInitialData[5] = 1x1 +with 1 slice</li> </ul> + <p>If the method succeeds, the return code is <strong>{{S_OK}}</strong>. See Direct3D 11 Return Codes for failing error codes.</p> + + + + <p>Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while {{UAV}} rendering or rasterizing.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.</p> + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the shader-resource view. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to the resource that will serve as input to a shader. This resource must have been created with the <strong> {{D3D11_BIND_SHADER_RESOURCE}}</strong> flag.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC1}}</strong> structure that describes a shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses the entire resource (using the format the resource was created with).</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11ShaderResourceView1}}</strong> interface for the created shader-resource view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Creates a view for accessing an unordered access resource. </p> + <p> This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the unordered-access view. See Direct3D 11 Return Codes for other possible return values. </p> + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>A render-target view can be bound to the output-merger stage by calling <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong>.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a <strong>{{ID3D11Resource}}</strong> that represents a render target. This resource must have been created with the <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> flag.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{D3D11_RENDER_TARGET_VIEW_DESC1}}</strong> that represents a render-target view description. Set this parameter to <strong>{{NULL}}</strong> to create a view that accesses all of the subresources in mipmap level 0.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11RenderTargetView1}}</strong> interface for the created render-target view. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p>Creates a query object for querying information from the graphics processing unit ({{GPU}}). </p> + <p>This method returns {{E_OUTOFMEMORY}} if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.</p> + + + <dd> <p>Pointer to a <strong>{{D3D11_QUERY_DESC1}}</strong> structure that represents a query description.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{ID3D11Query1}}</strong> interface for the created query object. Set this parameter to <strong>{{NULL}}</strong> to validate the other input parameters (the method will return <strong>{{S_FALSE}}</strong> if the other input parameters pass validation).</p> </dd> + + + + + <p> Gets an immediate context, which can play back command lists. </p> + <p> The <strong>GetImmediateContext3</strong> method outputs an <strong>{{ID3D11DeviceContext3}}</strong> object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene. </p><p> The <strong>GetImmediateContext3</strong> method increments the reference count of the immediate context by one. Therefore, you must call <strong>Release</strong> on the returned interface reference when you are done with it to avoid a memory leak. </p> + <p>This method does not return a value.</p> + + + + <p> Creates a deferred context, which can record command lists. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following: </p><ul> <li> Returns <strong>{{DXGI_ERROR_DEVICE_REMOVED}}</strong> if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device. </li> <li> Returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if the <strong>CreateDeferredContext3</strong> method can't be called from the current context. For example, if the device was created with the <strong>{{D3D11_CREATE_DEVICE_SINGLETHREADED}}</strong> value, <strong>CreateDeferredContext3</strong> returns <strong>{{DXGI_ERROR_INVALID_CALL}}</strong>. </li> <li> Returns <strong>{{E_INVALIDARG}}</strong> if the <em>ContextFlags</em> parameter is invalid. </li> <li> Returns <strong>{{E_OUTOFMEMORY}}</strong> if the app has exhausted available memory. </li> </ul> + + + + <p> Copies data into a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p> Copies data from a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped using {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p> + <p> The provided resource must be a <strong>{{D3D11_USAGE_DEFAULT}}</strong> texture which was mapped for writing by a previous call to {{ID3D11DeviceContext3::}}<strong>Map</strong> while providing a {{NULL}} <strong>{{D3D11_MAPPED_SUBRESOURCE}}</strong> parameter. </p><p> This {{API}} is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables {{D3D}} to fill whole cache lines in the texture before returning. </p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [Bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When reading from sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offseting which can interfere with alignment to cache lines. </p> + <p> This method does not return a value. </p> + + + + <p>Describes Direct3D 11.4 feature options in the current graphics driver.</p> + <p>Use this structure with the {{D3D11_FEATURE_D3D11_OPTIONS4}} member of <strong>{{D3D11_FEATURE}}</strong>. </p><p>Refer to the section on {{NV12}} in Direct3D 11.4 Features.</p> + + + <dd> <p>Specifies a {{BOOL}} that determines if {{NV12}} textures can be shared across processes and {{D3D}} devices.</p> </dd> + + + + + <p> The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device4}}</strong> adds new methods to those in <strong>{{ID3D11Device3}}</strong>, such as <strong>RegisterDeviceRemovedEvent</strong> and <strong>UnregisterDeviceRemoved</strong>. </p> + + + + <p> Registers the "device removed" event and indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism. </p> + <p>Indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism, rather than as an {{HRESULT}} from <strong>Present</strong>. The reason for device removal can be retrieved using <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> after being notified of the occurrence.</p><p> Applications register and un-register a Win32 event handle with a particular device. That event handle will be signaled when the device becomes removed. A poll into the device's <strong>{{ID3D11Device::GetDeviceRemovedReason}}</strong> method indicates that the device is removed. </p><p> <strong>{{ISignalableNotifier}}</strong> or <strong>SetThreadpoolWait</strong> can be used by {{UWP}} apps. </p><p> When the graphics device is lost, the app or title will receive the graphics event, so that the app or title knows that its graphics device is no longer valid and it is safe for the app or title to re-create its DirectX devices. In response to this event, the app or title needs to re-create its rendering device and pass it into a SetRenderingDevice call on the composition graphics device objects. </p><p> After setting this new rendering device, the app or title needs to redraw content of all the pre-existing surfaces after the composition graphics device's <strong>OnRenderingDeviceReplaced</strong> event is fired. </p><p> This method supports Composition for device loss. </p><p> The event is not signaled when it is most ideal to re-create. So, instead, we recommend iterating through the adapter ordinals and creating the first ordinal that will succeed. </p><p> The application can register an event with the device. The application will be signaled when the device becomes removed. </p><p> If the device is already removed, calls to <strong>RegisterDeviceRemovedEvent</strong> will signal the event immediately. No device-removed error code will be returned from <strong>RegisterDeviceRemovedEvent</strong>. </p><p> Each "device removed" event is never signaled, or is signaled only once. These events are not signaled during device destruction. These events are unregistered during destruction. </p><p> The semantics of <strong>RegisterDeviceRemovedEvent</strong> are similar to <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong>. </p> + <p> See Direct3D 11 Return Codes. </p> + + + <dd> <p> The handle to the "device removed" event. </p> </dd> + + + <dd> <p> A reference to information about the "device removed" event, which can be used in <strong>UnregisterDeviceRemoved</strong> to unregister the event. </p> </dd> + + + + + <p> Unregisters the "device removed" event. </p> + <p> See <strong>RegisterDeviceRemovedEvent</strong>. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Information about the "device removed" event, retrieved during a successful <strong>RegisterDeviceRemovedEvent</strong> call. </p> </dd> + + + + + <p>The device interface represents a virtual adapter; it is used to create resources.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D11Device5}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D11Device5}}</strong> interface instead of <strong>{{ID3D11Device}}</strong>.? + <p> A device is created using <strong>{{D3D11CreateDevice}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>The device interface represents a virtual adapter; it is used to create resources. <strong>{{ID3D11Device5}}</strong> adds new methods to those in <strong>{{ID3D11Device4}}</strong>.</p><strong>Note</strong>??This interface, introduced in the Windows 10 Creators Update, is the latest version of the <strong>{{ID3D11Device}}</strong> interface. Applications targetting Windows 10 Creators Update should use this interface instead of earlier versions.? + + + + <p>Provides threading protection for critical sections of a multi-threaded application.</p> + <p>This interface is obtained by querying it from an immediate device context created with the <strong>{{ID3D11DeviceContext}}</strong> (or later versions of this) interface using {{IUnknown::QueryInterface}}.</p><p>Unlike {{D3D10}}, there is no multithreaded layer in {{D3D11}}. By default, multithread protection is turned off. Use <strong>SetMultithreadProtected</strong> to turn it on, then <strong>Enter</strong> and <strong>Leave</strong> to encapsulate graphics commands that must be executed in a specific order.</p><p>By default in {{D3D11}}, applications can only use one thread with the immediate context at a time. But, applications can use this interface to change that restriction. The interface can turn on threading protection for the immediate context, which will increase the overhead of each immediate context call in order to share one context with multiple threads.</p> + + + + <p>Enter a device's critical section.</p> + <p>If <strong>SetMultithreadProtected</strong> is set to true, then entering a device's critical section prevents other threads from simultaneously calling that device's methods, calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>Leave</strong> is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>Enter</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>This method does not return a value.</p> + + + + <p>Turns multithread protection on or off.</p> + <p>True if multithread protection was already turned on prior to calling this method, false otherwise. </p> + + + <dd> <p>Set to true to turn multithread protection on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithread protection is turned on or not.</p> + <p>Returns true if multithread protection is turned on, false otherwise. </p> + + + + <p> Provides the video functionality of a Microsoft Direct3D?11 device. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> with an <strong>{{ID3D11DeviceContext}}</strong> interface reference.</p><p>This interface provides access to several areas of Microsoft Direct3D video functionality:</p><ul> <li>Hardware-accelerated video decoding</li> <li>Video processing</li> <li>{{GPU}}-based content protection</li> <li>Video encryption and decryption</li> </ul><p>In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:</p><ul> <li> <strong>{{IDirect3DAuthenticatedChannel9}}</strong> </li> <li> <strong>{{IDirect3DCryptoSession9}}</strong> </li> <li> <strong>{{IDirectXVideoDecoder}}</strong> </li> <li> <strong>{{IDirectXVideoProcessor}}</strong> </li> <li> <strong>{{IDXVAHD_VideoProcessor}}</strong> </li> </ul> + + + + + + + + + + + + + + + + <p>Specifies the type of a command list.</p> + <p>This enum is used by the following methods:</p><ul> <li> <strong>CreateCommandAllocator</strong> </li> <li> <strong>CreateCommandQueue</strong> </li> <li> <strong>CreateCommandList</strong> </li> </ul> + + + <dd> <p>Specifies a command buffer that the {{GPU}} can execute. A direct command list doesn't inherit any {{GPU}} state. </p> </dd> + + + <dd> <p>Specifies a command buffer that can be executed only directly via a direct command list. A bundle command list inherits all {{GPU}} state (except for the currently set pipeline state object and primitive topology).</p> </dd> + + + <dd> <p>Specifies a command buffer for computing. </p> </dd> + + + <dd> <p>Specifies a command buffer for copying (drawing).</p> </dd> + + + + + <p>Specifies flags to be used when creating a command queue.</p> + <p> This enum is used by the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates a default command queue.</p> </dd> + + + <dd> <p>Indicates that the {{GPU}} timeout should be disabled for this command queue.</p> </dd> + + + + + <p>Defines priority levels for a command queue.</p> + <p> This enumeration is used by the <strong>Priority</strong> member of the <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + <dd> <p>Normal priority.</p> </dd> + + + <dd> <p>High priority.</p> </dd> + + + + + <p>Specifies how the pipeline interprets geometry or hull shader input primitives.</p> + <p>This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader has not been initialized with an input primitive type.</p> </dd> + + + <dd> <p>Interpret the input primitive as a point.</p> </dd> + + + <dd> <p>Interpret the input primitive as a line. </p> </dd> + + + <dd> <p>Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p>Interpret the input primitive as a control point patch.</p> </dd> + + + + + <p>Identifies the type of data contained in an input slot.</p> + <p> Specify one of these values in the member of a <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structure to specify the type of data for the input element of a pipeline state object. </p> + + + <dd> <p>Input data is per-vertex data.</p> </dd> + + + <dd> <p>Input data is per-instance data.</p> </dd> + + + + + <p>Specifies the fill mode to use when rendering triangles.</p> + <p> Fill mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Draw lines connecting the vertices. Adjacent vertices are not drawn.</p> </dd> + + + <dd> <p>Fill the triangles formed by the vertices. Adjacent vertices are not drawn.</p> </dd> + + + + + <p>Specifies triangles facing a particular direction are not drawn.</p> + <p> Cull mode is specified in a <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Always draw all triangles.</p> </dd> + + + <dd> <p>Do not draw triangles that are front-facing.</p> </dd> + + + <dd> <p>Do not draw triangles that are back-facing.</p> </dd> + + + + + <p>Specifies comparison options.</p> + <p> A comparison option determines how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The {{API}} allows you to set a comparison option for </p><ul> <li> a depth-stencil buffer (<strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>) </li> <li> depth-stencil operations (<strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong>) </li> <li> sampler state (<strong>{{D3D12_SAMPLER_DESC}}</strong>) </li> </ul> + + + <dd> <p>Never pass the comparison.</p> </dd> + + + <dd> <p>If the source data is less than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is less than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is not equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>If the source data is greater than or equal to the destination data, the comparison passes.</p> </dd> + + + <dd> <p>Always pass the comparison.</p> </dd> + + + + + <p>Identifies the portion of a depth-stencil buffer for writing depth data.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> structure.</p> + + + <dd> <p>Turn off writes to the depth-stencil buffer.</p> </dd> + + + <dd> <p>Turn on writes to the depth-stencil buffer.</p> </dd> + + + + + <p>Identifies the stencil operations that can be performed during depth-stencil testing.</p> + <p>This enum is used by the <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure.</p> + + + <dd> <p>Keep the existing stencil data.</p> </dd> + + + <dd> <p>Set the stencil data to 0.</p> </dd> + + + <dd> <p>Set the stencil data to the reference value set by calling <strong>{{ID3D11DeviceContext::OMSetDepthStencilState}}</strong>.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and clamp the result.</p> </dd> + + + <dd> <p>Invert the stencil data.</p> </dd> + + + <dd> <p>Increment the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + <dd> <p>Decrement the stencil value by 1, and wrap the result if necessary.</p> </dd> + + + + + <p>Specifies blend factors, which modulate values for the pixel shader and render target.</p> + <p>Source and destination blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>The blend factor is (0, 0, 0, 0). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1, 1, 1, 1). No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (R?, G?, B?, A?), that is color data ({{RGB}}) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data ({{RGB}}) from a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. No pre-blend operation.</p> </dd> + + + <dd> <p>The blend factor is the blend factor set with <strong>{{ID3D12GraphicsCommandList::OMSetBlendFactor}}</strong>. The pre-blend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - {{RGB}}. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.</p> </dd> + + + <dd> <p>The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.</p> </dd> + + + + + <p>Specifies {{RGB}} or alpha blending operations.</p> + <p>The runtime implements {{RGB}} blending and alpha blending separately. Therefore, blend state requires separate blend operations for {{RGB}} data and alpha data. These blend operations are specified in a <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. The two sources ?source 1 and source 2? are shown in the blending block diagram.</p><p>Blend state is used by the output-merger stage to determine how to blend together two {{RGB}} pixel values and two alpha values. The two {{RGB}} pixel values and two alpha values are the {{RGB}} pixel value and alpha value that the pixel shader outputs and the {{RGB}} pixel value and alpha value already in the output render target. The <strong>{{D3D12_BLEND}}</strong> value controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The <strong>{{D3D12_BLEND_OP}}</strong> value controls how the blending stage mathematically combines these modulated values.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Identifies which components of each pixel of a render target are writable during blending.</p> + <p> This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure. </p> + + + <dd> <p>Allow data to be stored in the red component.</p> </dd> + + + <dd> <p>Allow data to be stored in the green component.</p> </dd> + + + <dd> <p>Allow data to be stored in the blue component.</p> </dd> + + + <dd> <p>Allow data to be stored in the alpha component.</p> </dd> + + + <dd> <p>Allow data to be stored in all components.</p> </dd> + + + + + <p>Specifies logical operations to configure for a render target.</p> + <p>This enum is used by the <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structure.</p> + + + <dd> <p>Clears the render target.</p> </dd> + + + <dd> <p>Sets the render target.</p> </dd> + + + <dd> <p>Copys the render target.</p> </dd> + + + <dd> <p>Performs an inverted-copy of the render target.</p> </dd> + + + <dd> <p>No operation is performed on the render target.</p> </dd> + + + <dd> <p>Inverts the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NAND}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{NOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{XOR}} operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical equal operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{AND}} and invert operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and reverse operation on the render target.</p> </dd> + + + <dd> <p>Performs a logical {{OR}} and invert operation on the render target.</p> </dd> + + + + + <p>Identifies whether conservative rasterization is on or off.</p> + <p>This enum is used by the <strong>{{D3D12_RASTERIZER_DESC}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is off.</p> </dd> + + + <dd> <p>Conservative rasterization is on.</p> </dd> + + + + + <p> When using triangle strip primitive topology, vertex positions are interpreted as vertices of a continuous triangle ?strip?. There is a special index value that represents the desire to have a discontinuity in the strip, the cut index value. This enum lists the supported cut values. +</p> + <p> This enum is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates that there is no cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFF should be used as the cut value. </p> </dd> + + + <dd> <p> Indicates that 0xFFFFFFFF should be used as the cut value. </p> </dd> + + + + + <p> Flags to control pipeline state. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structures. </p> + + + <dd> <p> Indicates no flags. </p> </dd> + + + <dd> <p> Indicates that the pipeline state should be compiled with additional information to assist debugging. This can only be set on {{WARP}} devices. +</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + + + + <p> Describes minimum precision support options for shaders in the current graphics driver. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> The returned info just indicates that the graphics hardware can perform {{HLSL}} operations at a lower precision than the standard 32-bit float precision, but doesn?t guarantee that the graphics hardware will actually run at a lower precision. </p> + + + <dd> <p>The driver supports only full 32-bit precision for all shader stages.</p> </dd> + + + <dd> <p>The driver supports 10-bit precision.</p> </dd> + + + <dd> <p>The driver supports 16-bit precision.</p> </dd> + + + + + <p> Identifies the tier level at which tiled resources are supported. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> There are three discrete pieces of functionality bundled together for tiled resource functionality: </p><ul> <li> A tile-based texture layout option where nearby texel addresses contain nearby data coordinates. A tile of texels contains nearly the same amount of texels in each cardinal dimension of the resource. This layout is represented in {{D3D12}} by <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </li> <li> Reserve a region of virtual address space for a resource, where each page is initially {{NULL}}-mapped. In {{D3D12}}, this is operation is encapsulated within <strong>{{ID3D12Device::CreateReservedResource}}</strong>, which only works with textures that have the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. </li> <li> The ability to change page mappings and manipulate texture data on tile granularities. In {{D3D12}}, these operations are <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>, <strong>{{ID3D12CommandQueue::CopyTileMappings}}</strong>, and <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong>. </li> </ul><p> Three significant changes over {{D3D11}} are: </p><ul> <li> Tile pools are replaced by heaps. Heaps provide a superset of capabilities than {{D3D11}} tile pools do. </li> <li> Reserved resources may be mapped to pages from multiple heaps at the same time. The {{D3D11}} restriction that all non-{{NULL}} mapped pages must come from the same heap does not exist. </li> <li> Applications should be aware of {{GPU}} virtual address capabilities, which enable litmus tests for particular usage scenarios. See <strong>{{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong>. </li> </ul> + + + <dd> <p> Indicates that textures cannot be created with the <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong> layout. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> cannot be used, not even for buffers. </p> </dd> + + + <dd> <p> Indicates that 2D textures can be created with the {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} layout. Limitations exist for certain resource formats and properties. For more details, see <strong>{{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}}</strong>. </p> <p> <strong>{{ID3D12Device::CreateReservedResource}}</strong> can be used. </p> <p> {{GPU}} reads or writes to {{NULL}} mappings are undefined. Applications are encouraged to workaround this limitation by repeatedly mapping the same page to everywhere a {{NULL}} mapping would've been used. </p> <p> When the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier_1 functionality is supported, including this additional support: </p> <ul> <li> When the size of a texture mipmap level is at least one standard tile shape for its format, the mipmap level is guaranteed to be nonpacked. For more info, see <strong>{{D3D12_PACKED_MIP_INFO}}</strong>. </li> <li> Shader instructions are available for clamping level-of-detail ({{LOD}}) and for obtaining status about the shader operation. For info about one of these shader instructions, see Sample(S,float,int,float,uint). <strong>Sample(S,float,int,float,uint)</strong>. </li> <li> Reading from <strong>{{NULL}}</strong>-mapped tiles treat that sampled value as zero. Writes to <strong>{{NULL}}</strong>-mapped tiles are discarded. </li> </ul> <p> Adapters that support feature level 12_0 all support {{TIER_2}} or greater. </p> </dd> + + + <dd> <p> Indicates that a superset of Tier 2 is supported, with the addition that 3D textures (Volume Tiled Resources) are supported. </p> </dd> + + + + + + + + <p>Identifies the tier level of conservative rasterization.</p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p>Conservative rasterization is not supported.</p> </dd> + + + <dd> <p>Tier 1 enforces a maximum 1/2 pixel uncertainty region and does not support post-snap degenerates. This is good for tiled rendering, a texture atlas, light map generation and sub-pixel shadow maps.</p> </dd> + + + <dd> <p> Tier 2 reduces the maximum uncertainty region to 1/256 and requires post-snap degenerates not be culled. This tier is helpful for {{CPU}}-based algorithm acceleration (such as voxelization).</p> </dd> + + + <dd> <p> Tier 3 maintains a maximum 1/256 uncertainty region and adds support for inner input coverage. Inner input coverage adds the new value <code>{{SV_InnerCoverage}}</code> to High Level Shading Language ({{HLSL}}). This is a 32-bit scalar integer that can be specified on input to a pixel shader, and represents the underestimated conservative rasterization information (that is, whether a pixel is guaranteed-to-be-fully covered). This tier is helpful for occlusion culling.</p> </dd> + + + + + <p>Specifies resources that are supported for a provided format.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No resources are supported.</p> </dd> + + + <dd> <p>Buffer resources supported.</p> </dd> + + + <dd> <p>Vertex buffers supported.</p> </dd> + + + <dd> <p>Index buffers supported.</p> </dd> + + + <dd> <p>Streaming output buffers supported.</p> </dd> + + + <dd> <p>1D texture resources supported.</p> </dd> + + + <dd> <p>2D texture resources supported.</p> </dd> + + + <dd> <p>3D texture resources supported.</p> </dd> + + + <dd> <p>Cube texture resources supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Load</strong> function for texture objects is supported.</p> </dd> + + + <dd> <p>The {{HLSL}} <strong>Sample</strong> function for texture objects is supported.</p> <strong>Note</strong>??If the device supports the format as a resource (1D, 2D, 3D, or cube map) but doesn't support this option, the resource can still use the Sample method but must use only the point filtering sampler state to perform the sample. ? </dd> + + + <dd> <p>The {{HLSL}} <strong>SampleCmp</strong> and <strong>SampleCmpLevelZero</strong> functions for texture objects are supported.</p> <strong>Note</strong>??Windows?8 and later might provide limited support for these functions on Direct3D feature levels 9_1, 9_2, and 9_3. For more info, see Implementing shadow buffers for Direct3D feature level 9. + ? </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Mipmaps are supported.</p> </dd> + + + <dd> <p>Render targets are supported.</p> </dd> + + + <dd> <p>Blend operations supported.</p> </dd> + + + <dd> <p>Depth stencils supported.</p> </dd> + + + <dd> <p>Multisample antialiasing ({{MSAA}}) resolve operations are supported. For more info, see <strong>{{ID3D12GraphicsCommandList::ResolveSubresource}}</strong>. </p> </dd> + + + <dd> <p>Format can be displayed on screen.</p> </dd> + + + <dd> <p>Format can't be cast to another format.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled render target.</p> </dd> + + + <dd> <p>Format can be used as a multi-sampled texture and read into a shader with the {{HLSL}} <strong>Load</strong> function.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather function. This value is available in DirectX 10.1 or higher.</p> </dd> + + + <dd> <p>Format supports casting when the resource is a back buffer.</p> </dd> + + + <dd> <p>Format can be used for an unordered access view.</p> </dd> + + + <dd> <p>Format can be used with the {{HLSL}} gather with comparison function.</p> </dd> + + + <dd> <p>Format can be used with the decoder output.</p> </dd> + + + <dd> <p>Format can be used with the video processor output.</p> </dd> + + + <dd> <p>Format can be used with the video processor input.</p> </dd> + + + <dd> <p>Format can be used with the video encoder.</p> </dd> + + + + + <p> Specifies which unordered resource options are supported for a provided format. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_FORMAT_SUPPORT}}</strong> structure. </p> + + + <dd> <p>No unordered resource options are supported.</p> </dd> + + + <dd> <p>Format supports atomic add.</p> </dd> + + + <dd> <p>Format supports atomic bitwise operations.</p> </dd> + + + <dd> <p>Format supports atomic compare with store or exchange.</p> </dd> + + + <dd> <p>Format supports atomic exchange.</p> </dd> + + + <dd> <p>Format supports atomic min and max.</p> </dd> + + + <dd> <p>Format supports atomic unsigned min and max.</p> </dd> + + + <dd> <p>Format supports a typed load.</p> </dd> + + + <dd> <p>Format supports a typed store.</p> </dd> + + + <dd> <p>Format supports logic operations in blend state.</p> </dd> + + + <dd> <p> Format supports tiled resources. Refer to Volume Tiled Resources. </p> </dd> + + + <dd> <p> Format supports multi-plane overlays. </p> </dd> + + + + + <p> Specifies options for determining quality levels. </p> + <p> This enum is used by the <strong>{{D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS}}</strong> structure. </p> + + + <dd> <p> No options are supported. </p> </dd> + + + <dd> <p> The number of quality levels can be determined for tiled resources. </p> </dd> + + + + + <p> Specifies the level of sharing across nodes of an adapter, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> + <p> This enum is used by the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p> + + + <dd> <p> If an adapter only has 1 node, then cross-node sharing doesn't apply, so the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure is set to {{D3D12_CROSS_NODE_SHARING_NOT_SUPPORTED}}. </p> </dd> + + + <dd> <p> Tier 1 Emulated. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED}} have Tier 1 support. However, drivers stage these copy operations through a driver-internal system memory allocation. This will cause these copy operations to consume time on the destination {{GPU}} as well as the source. </p> </dd> + + + <dd> <p> Tier 1. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_1}} only support the following cross-node copy operations: </p> <ul> <li> <strong>{{ID3D12CommandList::CopyBufferRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyTextureRegion}}</strong> </li> <li> <strong>{{ID3D12CommandList::CopyResource}}</strong> </li> </ul> <p> Additionally, the cross-node resource must be the destination of the copy operation. </p> </dd> + + + <dd> <p> Tier 2. Devices that set the <strong>CrossNodeSharingTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure to {{D3D12_CROSS_NODE_SHARING_TIER_2}} support all operations across nodes, except for the following: </p> <ul> <li> Render target views. </li> <li> Depth stencil views. </li> <li> {{UAV}} atomic operations. Similar to {{CPU}}/{{GPU}} interop, shaders may perform {{UAV}} atomic operations; however, no atomicity across adapters is guaranteed. </li> </ul> <p> Applications can retrieve the node where a resource/heap exists from the <strong>{{D3D12_HEAP_DESC}}</strong> structure. These values are retrievable for opened resources. The runtime performs the appropriate re-mapping in case the 2 devices are using different {{UMD}}-specified node re-mappings. </p> </dd> + + + + + <p> Specifies which resource heap tier the hardware and driver support. </p> + <p> This enum is used by the <strong>ResourceHeapTier</strong> member of the <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> structure. </p><p> This enum specifies which resource heap tier the hardware and driver support. Lower tiers require more heap attribution than greater tiers. </p><p> Resources can be categorized into the following types: </p><ul> <li>Buffers</li> <li>Non-render target &amp; non-depth stencil textures</li> <li>Render target or depth stencil textures</li> </ul> + + + <dd> <p> Indicates that heaps can only support resources from a single resource category. For the list of resource categories, see Remarks. In tier 1, these resource categories are mutually exclusive and cannot be used with the same heap. The resource category must be declared when creating a heap, using the correct <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constant. Applications cannot create heaps with flags that allow all three categories. </p> </dd> + + + <dd> <p> Indicates that heaps can support resources from all three categories. For the list of resource categories, see Remarks. In tier 2, these resource categories can be mixed within the same heap. Applications may create heaps with flags that allow all three categories; but are not required to do so. Applications may be written to support tier 1 and seamlessly run on tier 2. </p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p>Specifies the version of root signature layout.</p> + <p> This enum is used by the following structures and methods.</p><ul> <li> <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> </li> <li> <strong>{{D3D12_FEATURE_DATA_ROOT_SIGNATURE}}</strong> </li> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>{{D3D12SerializeRootSignature}}</strong> </li> </ul> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version one of root signature layout.</p> </dd> + + + <dd> <p>Version 1.1 of root signature layout. Refer to Root Signature Version 1.1.</p> </dd> + + + + + <p>Specifies a shader model.</p> + <p>This enum is used by the <strong>{{D3D12_FEATURE_DATA_SHADER_MODEL}}</strong> structure.</p> + + + <dd> <p>Indicates shader model 5.1.</p> </dd> + + + <dd> <p>Indicates shader model 6.0.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies the type of heap. When resident, heaps reside in a particular physical memory pool with certain {{CPU}} cache properties. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> </li> <li> <strong>{{D3D12_HEAP_PROPERTIES}}</strong> </li> <li> <strong>GetCustomHeapProperties</strong> </li> </ul><p> The heap types fall into two categories: abstracted heap types, and custom heap types. </p><p> The following are abstracted heap types: </p><ul> <li>{{D3D12_HEAP_TYPE_DEFAULT}}</li> <li>{{D3D12_HEAP_TYPE_UPLOAD}}</li> <li>{{D3D12_HEAP_TYPE_READBACK}}</li> </ul><p> The following is a custom heap type: </p><ul> <li>{{D3D12_HEAP_TYPE_CUSTOM}}</li> </ul><p> The abstracted heap types (_DEFAULT, _UPLOAD, and _READBACK) are useful to simplify writing adapter-neutral applications, because such applications don't need to be aware of the adapter memory architecture. To use an abstracted heap type to simplify writing adapter-neutral applications, the application essentially treats the adapter as if it were a discrete or {{NUMA}} adapter. But, using the heap types enables efficient translation for {{UMA}} adapters. Adapter architecture neutral applications should assume there are two memory pools available, where the pool with the most {{GPU}} bandwidth cannot provide {{CPU}} access. The pool with the least {{GPU}} bandwidth can have {{CPU}} access; but must be either optimized for upload to {{GPU}} or readback from {{GPU}}. </p> + + + <dd> <p> Specifies the default heap. This heap type experiences the most bandwidth for the {{GPU}}, but cannot provide {{CPU}} access. The {{GPU}} can read and write to the memory from this pool, and resource transition barriers may be changed. The majority of heaps and resources are expected to be located here, and are typically populated through resources in upload heaps. </p> </dd> + + + <dd> <p> Specifies a heap used for uploading. This heap type has {{CPU}} access optimized for uploading to the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{CPU}}-write-once, {{GPU}}-read-once data; but {{GPU}}-read-once is stricter than necessary. {{GPU}}-read-once-or-from-cache is an acceptable use-case for the data; but such usages are hard to judge due to differing {{GPU}} cache designs and sizes. If in doubt, stick to the {{GPU}}-read-once definition or profile the difference on many {{GPUs}} between copying the data to a _DEFAULT heap vs. reading the data from an _UPLOAD heap. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ and cannot be changed away from this. The {{CPU}} address for such heaps is commonly not efficient for {{CPU}} reads. </p> <p> The following are typical usages for _UPLOAD heaps: </p> <ul> <li> Initializing resources in a _DEFAULT heap with data from the {{CPU}}. </li> <li> Uploading dynamic data in a constant buffer that is read, repeatedly, by each vertex or pixel. </li> </ul> <p> The following are likely not good usages for _UPLOAD heaps: </p> <ul> <li> Re-initializing the contents of a resource every frame. </li> <li> Uploading constant data which is only used every other Draw call, where each Draw uses a non-trivial amount of other data. </li> </ul> </dd> + + + <dd> <p> Specifies a heap used for reading back. This heap type has {{CPU}} access optimized for reading data back from the {{GPU}}, but does not experience the maximum amount of bandwidth for the {{GPU}}. This heap type is best for {{GPU}}-write-once, {{CPU}}-readable data. The {{CPU}} cache behavior is write-back, which is conducive for multiple sub-cache-line {{CPU}} reads. </p> <p> Resources in this heap must be created with <strong>{{D3D12_RESOURCE_STATE}}</strong>_COPY_DEST, and cannot be changed away from this. </p> </dd> + + + <dd> <p> Specifies a custom heap. The application may specify the memory pool and {{CPU}} cache properties directly, which can be useful for {{UMA}} optimizations, multi-engine, multi-adapter, or other special cases. To do so, the application is expected to understand the adapter architecture to make the right choice. For more details, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE, <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>, and <strong>GetCustomHeapProperties</strong>. </p> </dd> + + + + + <p>Specifies the {{CPU}}-page properties for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p> + + + <dd> <p>The {{CPU}}-page property is unknown.</p> </dd> + + + <dd> <p> The {{CPU}} cannot access the heap, therefore no page properties are available. </p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-combined.</p> </dd> + + + <dd> <p>The {{CPU}}-page property is write-back.</p> </dd> + + + + + <p>Specifies the memory pool for the heap.</p> + <p> This enum is used by the <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure. </p><p>When the adapter is {{UMA}}, {{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory. When</p><p> the adapter is not {{UMA:}} +{{D3D12_MEMORY_POOL_L0}} and {{DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL}} refer to the same memory. +{{D3D12_MEMORY_POOL_L1}} and {{DXGI_MEMORY_SEGMENT_GROUP_LOCAL}} refer to the same memory.</p> + + + <dd> <p> The memory pool is unknown. </p> </dd> + + + <dd> <p> The memory pool is {{L0}}. {{L0}} is the physical system memory pool. When the adapter is discrete/{{NUMA}}, this pool has greater bandwidth for the {{CPU}} and less bandwidth for the {{GPU}}. When the adapter is {{UMA}}, this pool is the only one which is valid. </p> </dd> + + + <dd> <p> The memory pool is {{L1}}. {{L1}} is typically known as the physical video memory pool. {{L1}} is only available when the adapter is discrete/{{NUMA}}, and has greater bandwidth for the {{GPU}} and cannot even be accessed by the {{CPU}}. When the adapter is {{UMA}}, this pool is not available. </p> </dd> + + + + + <p> Specifies heap options, such as whether the heap can contain textures, and whether resources are shared across adapters. </p> + <p> This enum is used by the following {{API}} items: </p><ul> <li> <strong>{{ID3D12Device::CreateHeap}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> </ul><p> The following heap flags must be used with <strong>{{ID3D12Device::CreateHeap}}</strong>, but will be set automatically for implicit heaps created by <strong>{{ID3D12Device::CreateCommittedResource}}</strong>. </p><p> Adapters that only support <strong>heap tier 1</strong> must set two out of the three following flags. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_BUFFERS}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_BUFFER}} (which is a <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> enumeration constant). </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} together with either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. (The latter two items are <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants.) </td></tr> <tr><td>{{D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES}}</td><td> The heap isn't allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} and {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are absent. </td></tr> </table><p>?</p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The heap is shared. Refer to Shared Heaps.</p> </dd> + + + <dd> <p> The heap isn't allowed to contain buffers. </p> </dd> + + + <dd> <p> The heap is allowed to contain swap-chain surfaces. </p> </dd> + + + <dd> <p> The heap is allowed to share resources across adapters. Refer to Shared Heaps. </p> </dd> + + + <dd> <p> The heap is not allowed to store Render Target ({{RT}}) and/or Depth-Stencil ({{DS}}) textures. </p> </dd> + + + <dd> <p>The heap is not allowed to contain resources with {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}, {{D3D12_RESOURCE_DIMENSION_TEXTURE2D}}, or {{D3D12_RESOURCE_DIMENSION_TEXTURE3D}} unless either {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} are present. Refer to <strong>{{D3D12_RESOURCE_DIMENSION}}</strong> and <strong>{{D3D12_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>_</p> </dd> + + + <dd> <p> The heap is allowed to store all types of buffers and/or textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store buffers. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store non-{{RT}}, non-{{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + <dd> <p> The heap is only allowed to store {{RT}} and/or {{DS}} textures. This is an alias; for more details, see "Aliases" in the Remarks section. </p> </dd> + + + + + <p>Identifies the type of resource being used.</p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p>Resource is of unknown type.</p> </dd> + + + <dd> <p>Resource is a buffer.</p> </dd> + + + <dd> <p>Resource is a 1D texture.</p> </dd> + + + <dd> <p>Resource is a 2D texture.</p> </dd> + + + <dd> <p>Resource is a 3D texture.</p> </dd> + + + + + <p> Specifies texture layout options. </p> + <p> This enum is used by the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p><p> This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong> to ensure that each option is supported. </p><p> The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location. </p><p> To demonstrate, consider the 2D 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant: </p><code>{{UINT}} xBytesMask = 1010 1010 1000 1111 +{{UINT}} yMask = 0101 0101 0111 0000</code><p> To compute the swizzled address, the following code could be used (where the <strong>_pdep_u32</strong> intrinsic instruction is supported): </p><code>{{UINT}} swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask);</code> + + + <dd> <p> Indicates that the layout is unknown, and is likely adapter-dependent. During creation, the driver chooses the most efficient layout based on other resource properties, especially resource size and flags. Prefer this choice unless certain functionality is required from another texture layout. </p> <p> Zero-copy texture upload optimizations exist for {{UMA}} architectures; see <strong>{{ID3D12Resource::WriteToSubresource}}</strong>. </p> </dd> + + + <dd> <p> Indicates that data for the texture is stored in row-major order (sometimes called "pitch-linear order"). </p> <p> This texture layout locates consecutive texels of a row contiguously in memory, before the texels of the next row. Similarly, consecutive texels of a particular depth or array slice are contiguous in memory before the texels of the next depth or array slice. Padding may exist between rows and between depth or array slices to align collections of data. A stride is the distance in memory between rows, depth, or array slices; and it includes any padding. </p> <p> This texture layout enables sharing of the texture data between multiple adapters, when other layouts aren't available. </p> <p> Many restrictions apply, because this layout is generally not efficient for extensive usage: </p> <ul> <li> The locality of nearby texels is not rotationally invariant. </li> <li> Only the following texture properties are supported: <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE_2D. </li> <li> A single mip level. </li> <li> A single array slice. </li> <li> 64KB alignment. </li> <li> Non-{{MSAA}}. </li> <li> No <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL. </li> <li> The format cannot be a {{YUV}} format. </li> </ul> </li> <li> The texture must be created on a heap with <strong>{{D3D12_HEAP_FLAG}}</strong>_SHARED_CROSS_ADAPTER. </li> </ul> <p> Buffers are created with <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR, because row-major texture data can be located in them without creating a texture object. This is commonly used for uploading or reading back texture data, especially for discrete/{{NUMA}} adapters. However, <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>_ROW_MAJOR can also be used when marshaling texture data between {{GPUs}} or adapters. For examples of usage with <strong>{{ID3D12GraphicsCommandList::CopyTextureRegion}}</strong>, see some of the following topics: </p> <ul> <li> Default Texture Mapping and Standard Swizzle </li> <li> Predication </li> <li> Synchronization and Multi-Engine </li> <li> Uploading Texture Data </li> </ul> </dd> + + + <dd> <p> Indicates that the layout within 64KB tiles and tail mip packing is up to the driver. No standard swizzle pattern. </p> <p> This texture layout is arranged into contiguous 64KB regions, also known as tiles, containing near equilateral amount of consecutive number of texels along each dimension. Tiles are arranged in row-major order. While there is no padding between tiles, there are typically unused texels within the last tile in each dimension. The layout of texels within the tile is undefined. Each subresource immediately follows where the previous subresource end, and the subresource order follows the same sequence as subresource ordinals. However, tail mip packing is adapter-specific. For more details, see tiled resource tier and <strong>{{ID3D12Device::GetResourceTiling}}</strong>. </p> <p> This texture layout enables partially resident or sparse texture scenarios when used together with virtual memory page mapping functionality. This texture layout must be used together with <strong>{{ID3D12Device::CreateReservedResource}}</strong> to enable the usage of <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> <p> Some restrictions apply to textures with this layout: </p> <ul> <li> The adapter must support <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong> 1 or greater. </li> <li> 64KB alignment must be used. </li> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D is not supported, nor are all formats. </li> <li> The tiled resource tier indicates whether textures with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE3D is supported. </li> </ul> </dd> + + + <dd> <p> Indicates that a default texture uses the standardized swizzle pattern. </p> <p> This texture layout is arranged the same way that {{D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE}} is, except that the layout of texels within the tile is defined. Tail mip packing is adapter-specific. </p> <p> This texture layout enables optimizations when marshaling data between multiple adapters or between the {{CPU}} and {{GPU}}. The amount of copying can be reduced when multiple components understand the texture memory layout. This layout is generally more efficient for extensive usage than row-major layout, due to the rotationally invariant locality of neighboring texels. This layout can typically only be used with adapters that support standard swizzle, but exceptions exist for cross-adapter shared heaps. </p> <p> The restrictions for this layout are that the following aren't supported: </p> <ul> <li> <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_TEXTURE1D </li> <li> Multi-sample anti-aliasing ({{MSAA}}) </li> <li> <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_DEPTH_STENCIL </li> <li> Formats within the <strong>{{DXGI_FORMAT}}</strong>_R32G32B32_TYPELESS group </li> </ul> </dd> + + + + + <p> Specifies options for working with resources. </p> + <p> This enum is used by the <strong>Flags</strong> member of the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p>Allows a render target view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_RENDER_TARGET}}. Some adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth during common rendering. This characteristic may not be beneficial for textures that are never rendered to, nor is it available for textures compressed with {{BC}} formats. Applications should avoid setting this flag when rendering will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li> Either the texture format must support render target capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support render target capabilities at the current feature level.</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}. +</li> <li>Cannot be used with 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}, nor usage with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}}.</li> </ul> </dd> + + + <dd> <p>Allows a depth stencil view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_DEPTH_WRITE}} and/or {{D3D12_RESOURCE_STATE_DEPTH_READ}}. Most adapter architectures allocate extra memory for textures with this flag to reduce the effective bandwidth and maximize optimizations for early depth-test. Applications should avoid setting this flag when depth operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support depth stencil capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support depth stencil capabilities at the current feature level.</li> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}, 4KB alignment, {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}, {{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}, {{D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS}}, {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}}, {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}}, nor used with heaps that have {{D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES}} or {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}. +</li> <li>Precludes usage of <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong>. +</li> <li>Precludes {{GPU}} copying of a subregion. <strong>CopyTextureRegion</strong> must copy a whole subresource to or from resources with this flag.</li> </ul> </dd> + + + <dd> <p>Allows an unordered access view to be created for the resource, as well as enables the resource to transition into the state of {{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}. Some adapter architectures must resort to less efficient texture layouts in order to provide this functionality. If a texture is rarely used for unordered access, it may be worth having two textures around and copying between them. One texture would have this flag, while the other wouldn't. Applications should avoid setting this flag when unordered access operations will never occur. +</p> <p>The following restrictions and interactions apply:</p> <ul> <li>Either the texture format must support unordered access capabilities at the current feature level. Or, when the format is a typeless format, a format within the same typeless group must support unordered access capabilities at the current feature level. +</li> <li>Cannot be set in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_ROW_MAJOR}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>CrossAdapterRowMajorTextureSupported</strong> is {{FALSE}} nor in conjunction with textures that have {{D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE}} when <strong>{{D3D12_FEATURE_DATA_D3D12_OPTIONS}}</strong>::<strong>StandardSwizzle64KBSupported</strong> is {{FALSE}}, nor when the feature level is less than 11.0. +</li> <li>Cannot be used with {{MSAA}} textures. </li> </ul> </dd> + + + <dd> <p>Disallows a shader resource view to be created for the resource, as well as disables the resource to transition into the state of {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}. Some adapter architectures experience increased bandwidth for depth stencil textures when shader resource views are precluded. If a texture is rarely used for shader resource, it may be worth having two textures around and copying between them. One texture would have this flag and the other wouldn't. Applications should set this flag when depth stencil textures will never be used from shader resource views. +</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}}. +</li> </ul> </dd> + + + <dd> <p>Allows the resource to be used for cross-adapter data, as well as the same features enabled by {{ALLOW_SIMULTANEOUS_ACCESS}}. Cross adapter resources commonly preclude techniques that reduce effective texture bandwidth during usage, and some adapter architectures may require different caching behavior. Applications should avoid setting this flag when the resource data will never be used with another adapter.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Must be used with heaps that have {{D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER}}.</li> <li>Cannot be used with heaps that have {{D3D12_HEAP_FLAG_ALLOW_DISPLAY}}.</li> </ul> </dd> + + + <dd> <p>Allows a resource to be simultaneously accessed by multiple different queues, devices or processes (for example, allows a resource to be used with <strong>ResourceBarrier</strong> transitions performed in more than one command list executing at the same time). </p> <p>Simultaneous access allows multiple readers and one writer, as long as the writer doesn't concurrently modify the texels that other readers are accessing. Some adapter architectures cannot leverage techniques to reduce effective texture bandwidth during usage. </p> <p>However, applications should avoid setting this flag when multiple readers are not required during frequent, non-overlapping writes to textures. Use of this flag can compromise resource fences to perform waits, and prevents any compression being used with a resource.</p> <p>The following restrictions and interactions apply: +</p> <ul> <li>Cannot be used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}; but buffers always have the properties represented by this flag. +</li> <li>Cannot be used with {{MSAA}} textures.</li> </ul> </dd> + + + + + <p> Specifies a range of tile mappings. </p> + <p> Use these flags with <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong>. </p> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p> The tile range is <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Skip the tile range. </p> </dd> + + + <dd> <p> Reuse a single tile in the tile range. </p> </dd> + + + + + <p> Specifies how to perform a tile-mapping operation. </p> + <p> This enum is used by the following methods:</p><ul> <li> <strong>CopyTileMappings</strong> </li> <li> <strong>UpdateTileMappings</strong> </li> </ul> + + + <dd> <p> No tile-mapping flags are specified. </p> </dd> + + + <dd> <p>Unsupported, do not use. </p> </dd> + + + + + <p> Specifies how to copy a tile. </p> + <p> This enum is used by the <strong>CopyTiles</strong> method. </p> + + + <dd> <p> No tile-copy flags are specified. </p> </dd> + + + <dd> <p> Indicates that the {{GPU}} isn't currently referencing any of the portions of destination memory being written. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the specified buffer location, reading tiles sequentially, to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pBuffer</em> parameter and the destination with the <em>pTiledResource</em> parameter. </p> </dd> + + + <dd> <p> Indicates that the <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), to the specified buffer location, deswizzling to linear memory layout as needed. In this <strong>{{ID3D12GraphicsCommandList::CopyTiles}}</strong> call, you specify the source data with the <em>pTiledResource</em> parameter and the destination with the <em>pBuffer</em> parameter. </p> </dd> + + + + + <p> Specifies the state of a resource regarding how the resource is being used. </p> + <p> This enum is used by the following methods: </p><ul> <li> <strong>CreateCommittedResource</strong> </li> <li> <strong>CreatePlacedResource</strong> </li> <li> <strong>CreateReservedResource</strong> </li> </ul> + + + <dd> <p>Applications should only transition to this state for accessing a resource across different graphics engine types.</p> <p>Specifically, a resource must be in the {{COMMON}} state before being used on a {{COPY}} queue (when previous used on {{DIRECT}}/{{COMPUTE}}), and before being used on {{DIRECT}}/{{COMPUTE}} (when previously used on {{COPY}}). This restriction does not exist when accessing data between {{DIRECT}} and {{COMPUTE}} queues.</p> <p>The {{COMMON}} state can be used for all usages on a Copy queue using the implicit state transitions. For more information, in Synchronization and Multi-Engine, find "common". </p> <p>Additionally, textures must be in the {{COMMON}} state for {{CPU}} access to be legal, assuming the texture was created in a {{CPU}}-visible heap in the first place.</p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as a vertex buffer or constant buffer. This is a read-only state. </p> </dd> + + + <dd> <p> A subresource must be in this state when it is accessed by the 3D pipeline as an index buffer. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as a render target. A subresource must be in this state when it is rendered to or when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong>. This is a write-only state. To read from a render target as a shader resource the resource must be in either {{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}} or {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}.</p> </dd> + + + <dd> <p> The resource is used for unordered access. A subresource must be in this state when it is accessed by the 3D pipeline via an unordered access view. A subresource must also be in this state when it is cleared with <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewInt}}</strong> or <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong>. This is a read/write state. </p> </dd> + + + <dd> <p>{{DEPTH_WRITE}} is a state which is mutually exclusive with other states. It should be used for <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> when the flags (see <strong>{{D3D12_CLEAR_FLAGS}}</strong>) indicate a given subresource should be cleared (otherwise the subresource state doesn't matter), or when using it in a writable depth stencil view (see <strong>{{D3D12_DSV_FLAGS}}</strong>) when the {{PSO}} has depth write enabled (see <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong>). +</p> </dd> + + + <dd> <p>{{DEPTH_READ}} is a state which can be combined with other states. It should be used when the subresource is in a read-only depth stencil view, or when the <em>DepthEnable</em> parameter of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> is false. It can be combined with other read states (for example, {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}), such that the resource can be used for the depth or stencil test, and accessed by a shader within the same draw call. Using it when depth will be written by a draw call or clear command is invalid.</p> </dd> + + + <dd> <p> The resource is used with a shader other than the pixel shader. A subresource must be in this state before being read by any stage (except for the pixel shader stage) via a shader resource view. You can still use the resource in a pixel shader with this flag as long as it also has the flag {{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}} set. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with a pixel shader. A subresource must be in this state before being read by the pixel shader via a shader resource view. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used with stream output. A subresource must be in this state when it is accessed by the 3D pipeline as a stream-out target. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as an indirect argument. Subresources must be in this state when they are used as the argument buffer passed to the indirect drawing method <strong>{{ID3D12GraphicsCommandList::ExecuteIndirect}}</strong>. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a copy operation. Subresources must be in this state when they are used as the destination of copy operation, or a blt operation. This is a write-only state. </p> </dd> + + + <dd> <p> The resource is used as the source in a copy operation. Subresources must be in this state when they are used as the source of copy operation, or a blt operation. This is a read-only state. </p> </dd> + + + <dd> <p> The resource is used as the destination in a resolve operation. </p> </dd> + + + <dd> <p> The resource is used as the source in a resolve operation. </p> </dd> + + + <dd> <p>This is the required starting state for upload heaps. Applications should generally avoid this state when possible, and instead transition resources to only the actually-used states.</p> </dd> + + + <dd> <p> Synonymous with {{D3D12_RESOURCE_STATE_COMMON}}. </p> </dd> + + + <dd> <p> The resource is used for Predication. </p> </dd> + + + + + <p>Specifies a type of resource barrier (transition in resource use) description.</p> + <p>This enum is used in the <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong> structure. Use these values with the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method.</p> + + + <dd> <p>A transition barrier that indicates a transition of a set of subresources between different usages. The caller must specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p>An aliasing barrier that indicates a transition between usages of 2 different resources that have mappings into the same tile pool. The caller can specify both the before and the after resource. Note that one or both resources can be <strong>{{NULL}}</strong>, which indicates that any tiled resource could cause aliasing.</p> </dd> + + + <dd> <p>An unordered access view ({{UAV}}) barrier that indicates all {{UAV}} accesses (reads or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Flags for setting split resource barriers. </p> + <p>Split barriers allow a single transition to be split into begin and end halves (refer to Synchronization and Multi-Engine).</p><p> This enum is used by the <em>Flags</em> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p> + + + <dd> <p> No flags. </p> </dd> + + + <dd> <p> This starts a barrier transition in a new state, putting a resource in a temporary no-access condition. </p> </dd> + + + <dd> <p> This barrier completes a transition, setting a new state and restoring active access to a resource.</p> </dd> + + + + + <p>Specifies what type of texture copy is to take place.</p> + <p>This enum is used by the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure.</p> + + + <dd> <p>Indicates a subresource, identified by an index, is to be copied.</p> </dd> + + + <dd> <p>Indicates a place footprint, identified by a <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure, is to be copied.</p> </dd> + + + + + <p>Specifies a resolve operation.</p> + <p>This enum is used by the <strong>{{ID3D12GraphicsCommandList1::ResolveSubresourceRegion}}</strong> function.</p> + + + <dd> <p>Resolves compressed source samples to their uncompressed values. When using this operation, the source and destination resources must have the same sample count, unlike the min, max, and average operations that require the destination to have a sample count of 1.</p> </dd> + + + <dd> <p>Resolves the source samples to their minimum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their maximum value. It can be used with any render target or depth stencil format.</p> </dd> + + + <dd> <p>Resolves the source samples to their average value. It can be used with any non-integer render target format, including the depth plane. It can't be used with integer render target formats, including the stencil plane.</p> </dd> + + + + + <p> Specifies how memory gets routed by a shader resource view ({{SRV}}). </p> + <p> This enum allows the {{SRV}} to select how memory gets routed to the four return components in a shader after a memory fetch. The options for each shader component [0..3] (corresponding to {{RGBA}}) are: component 0..3 from the {{SRV}} fetch result or force 0 or force 1. </p><p> The default 1:1 mapping can be indicated by specifying {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}}, otherwise an arbitrary mapping can be specified using the macro {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}. See below. </p><p>Note the following defines:</p><code>#define {{D3D12_SHADER_COMPONENT_MAPPING_MASK}} 0x7 +#define {{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}} 3 +#define {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}} (1&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*4)) +#define {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(Src0,Src1,Src2,Src3) ((((Src0)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})| \ (((Src1)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;{{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}})| \ (((Src2)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*2))| \ (((Src3)&amp;{{D3D12_SHADER_COMPONENT_MAPPING_MASK}})&lt;&lt;({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*3))| \ {{D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES}})) +#define {{D3D12_DECODE_SHADER_4_COMPONENT_MAPPING}}(ComponentToExtract,Mapping) (({{D3D12_SHADER_COMPONENT_MAPPING}})(Mapping &gt;&gt; ({{D3D12_SHADER_COMPONENT_MAPPING_SHIFT}}*ComponentToExtract) &amp; {{D3D12_SHADER_COMPONENT_MAPPING_MASK}})) +#define {{D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING}} {{D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING}}(0,1,2,3) +</code> + + + <dd> <p> Indicates return component 0 (red). </p> </dd> + + + <dd> <p> Indicates return component 1 (green). </p> </dd> + + + <dd> <p> Indicates return component 2 (blue). </p> </dd> + + + <dd> <p> Indicates return component 3 (alpha). </p> </dd> + + + <dd> <p> Indicates forcing the resulting value to 0. </p> </dd> + + + <dd> <p> Indicates forcing the resulting value 1. The value of forcing 1 is either 0x1 or 1.0f depending on the format type for that component in the source format. </p> </dd> + + + + + <p>Identifies how to view a buffer resource.</p> + <p> This enumeration is used by <strong>{{D3D12_BUFFER_SRV}}</strong>. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies the type of resource that will be viewed as a shader resource.</p> + <p>These values are used by a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + + + <p>Specifies filtering options during texture sampling.</p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure.</p><strong>Note</strong>??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?<p>During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.</p><p>Microsoft High Level Shader Language ({{HLSL}}) texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.</p><p>You can use {{HLSL}} intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.</p><p>Also note the following defines:</p><code>#define {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ( 0x3 ) #define {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ( 7 ) #define {{D3D12_FILTER_TYPE_MASK}} ( 0x3 ) #define {{D3D12_MIN_FILTER_SHIFT}} ( 4 ) #define {{D3D12_MAG_FILTER_SHIFT}} ( 2 ) #define {{D3D12_MIP_FILTER_SHIFT}} ( 0 ) #define {{D3D12_ANISOTROPIC_FILTERING_BIT}} ( 0x40 ) #define {{D3D12_ENCODE_BASIC_FILTER}}( min, mag, mip, reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ ( ( ( min ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIN_FILTER_SHIFT}} ) | \ ( ( ( mag ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MAG_FILTER_SHIFT}} ) | \ ( ( ( mip ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) &lt;&lt; {{D3D12_MIP_FILTER_SHIFT}} ) | \ ( ( ( reduction ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) &lt;&lt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) ) ) +#define {{D3D12_ENCODE_ANISOTROPIC_FILTER}}( reduction ) \ ( ( {{D3D12_FILTER}} ) ( \ {{D3D12_ANISOTROPIC_FILTERING_BIT}} | \ {{D3D12_ENCODE_BASIC_FILTER}}( {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ {{D3D12_FILTER_TYPE_LINEAR}}, \ reduction ) ) ) +#define {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIN_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MAG_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_MIP_FILTER_SHIFT}} ) &amp; {{D3D12_FILTER_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) \ ( ( {{D3D12_FILTER_REDUCTION_TYPE}} ) \ ( ( ( {{D3D12Filter}} ) &gt;&gt; {{D3D12_FILTER_REDUCTION_TYPE_SHIFT}} ) &amp; {{D3D12_FILTER_REDUCTION_TYPE_MASK}} ) ) +#define {{D3D12_DECODE_IS_COMPARISON_FILTER}}( {{D3D12Filter}} ) \ ( {{D3D12_DECODE_FILTER_REDUCTION}}( {{D3D12Filter}} ) == {{D3D12_FILTER_REDUCTION_TYPE_COMPARISON}} ) +#define {{D3D12_DECODE_IS_ANISOTROPIC_FILTER}}( {{D3D12Filter}} ) \ ( ( ( {{D3D12Filter}} ) &amp; {{D3D12_ANISOTROPIC_FILTERING_BIT}} ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIN_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MAG_FILTER}}( {{D3D12Filter}} ) ) &amp;&amp; \ ( {{D3D12_FILTER_TYPE_LINEAR}} == {{D3D12_DECODE_MIP_FILTER}}( {{D3D12Filter}} ) ) ) </code><table> <tr><th>Texture Sampling Function</th><th>Texture Sampling Function with Comparison Filtering</th></tr> <tr><td> <strong>Sample</strong> </td><td> <strong>SampleCmp</strong> or <strong>SampleCmpLevelZero</strong> </td></tr> </table><p>?</p><p>Comparison filters only work with textures that have the following formats: <strong>{{DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R32_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_R24_UNORM_X8_TYPELESS}}</strong>, <strong>{{DXGI_FORMAT_R16_UNORM}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_MIN_MAG_MIP_LINEAR}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + <dd> <p>Fetch the same set of texels as <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the <strong>MinMaxFiltering</strong> member in the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS1}}</strong> structure.</p> </dd> + + + + + <p>Specifies the type of magnification or minification sampler filters. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>Point filtering is used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.</p> </dd> + + + <dd> <p>Bilinear interpolation filtering is used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures. </p> </dd> + + + + + <p>Specifies the type of filter reduction. </p> + <p>This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. Also, refer to the remarks for <strong>{{D3D12_FILTER}}</strong>.</p> + + + <dd> <p>The filter type is standard.</p> </dd> + + + <dd> <p>The filter type is comparison.</p> </dd> + + + <dd> <p>The filter type is minimum.</p> </dd> + + + <dd> <p>The filter type is maximum.</p> </dd> + + + + + <p> Identifies a technique for resolving texture coordinates that are outside of the boundaries of a texture. </p> + <p> This enum is used by the <strong>{{D3D12_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times. </p> </dd> + + + <dd> <p> Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively. </p> </dd> + + + <dd> <p> Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in <strong>{{D3D12_SAMPLER_DESC}}</strong> or {{HLSL}} code. </p> </dd> + + + <dd> <p> Similar to <strong>{{D3D12_TEXTURE_ADDRESS_MODE_MIRROR}}</strong> and <strong>{{D3D12_TEXTURE_ADDRESS_MODE_CLAMP}}</strong>. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. </p> </dd> + + + + + <p>Identifies unordered-access view options for a buffer resource.</p> + <p> This enum is used in the <strong>{{D3D12_BUFFER_UAV}}</strong> structure. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p> Resource contains raw, unstructured data. Requires the {{UAV}} format to be <strong>{{DXGI_FORMAT_R32_TYPELESS}}</strong>. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Identifies unordered-access view options.</p> + <p> Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure. </p> + + + <dd> <p>The view type is unknown.</p> </dd> + + + <dd> <p>View the resource as a buffer.</p> </dd> + + + <dd> <p>View the resource as a 1D texture.</p> </dd> + + + <dd> <p>View the resource as a 1D texture array.</p> </dd> + + + <dd> <p>View the resource as a 2D texture.</p> </dd> + + + <dd> <p>View the resource as a 2D texture array.</p> </dd> + + + <dd> <p>View the resource as a 3D texture array.</p> </dd> + + + + + <p>Identifies the type of resource to view as a render target.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p>Do not use this value, as it will cause <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to fail.</p> </dd> + + + <dd> <p>The resource will be accessed as a buffer.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multisampling.</p> </dd> + + + <dd> <p>The resource will be accessed as a 3D texture.</p> </dd> + + + + + <p>Specifies depth-stencil view options.</p> + <p> Specify a combination of the values in this enumeration in the <strong>Flags</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure. The values are combined by using a bitwise {{OR}} operation. </p><p> Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have read/write conflicts between separate views. </p> + + + <dd> <p> Indicates a default view. </p> </dd> + + + <dd> <p>Indicates that depth values are read only.</p> </dd> + + + <dd> <p>Indicates that stencil values are read only.</p> </dd> + + + + + <p>Specifies how to access a resource used in a depth-stencil view.</p> + <p>Specify one of the values in this enumeration in the <strong>ViewDimension</strong> member of a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p> + + + <dd> <p><strong>{{D3D12_DSV_DIMENSION_UNKNOWN}}</strong> is not a valid value for <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> and is not used.</p> </dd> + + + <dd> <p>The resource will be accessed as a 1D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 1D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures.</p> </dd> + + + <dd> <p>The resource will be accessed as a 2D texture with multi sampling.</p> </dd> + + + <dd> <p>The resource will be accessed as an array of 2D textures with multi sampling.</p> </dd> + + + + + <p>Specifies what to clear from the depth stencil view.</p> + <p> This enum is used by <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong>. The flags can be combined to clear all. </p> + + + <dd> <p>Indicates the depth buffer should be cleared.</p> </dd> + + + <dd> <p>Indicates the stencil buffer should be cleared.</p> </dd> + + + + + <p> Specifies fence options. </p> + <p> This enum is used by the <strong>{{ID3D12Device::CreateFence}}</strong> method. </p> + + + <dd> <p> No options are specified. </p> </dd> + + + <dd> <p> The fence is shared. </p> </dd> + + + <dd> <p> The fence is shared with another {{GPU}} adapter. </p> </dd> + + + + + <p> Specifies a type of descriptor heap. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure, and the following methods:</p><ul> <li> <strong>CopyDescriptors</strong> </li> <li> <strong>CopyDescriptorsSimple</strong> </li> <li> <strong>GetDescriptorHandleIncrementSize</strong> </li> </ul> + + + <dd> <p> The descriptor heap for the combination of constant-buffer, shader-resource, and unordered-access views. </p> </dd> + + + <dd> <p> The descriptor heap for the sampler. </p> </dd> + + + <dd> <p> The descriptor heap for the render-target view. </p> </dd> + + + <dd> <p> The descriptor heap for the depth-stencil view. </p> </dd> + + + <dd> <p> The number of types of descriptor heaps. </p> </dd> + + + + + <p>Specifies options for a heap.</p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates default usage of a heap.</p> </dd> + + + <dd> <p>The flag {{D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE}} can optionally be set on a descriptor heap to indicate it is be bound on a command list for reference by shaders. Descriptor heaps created <em>without</em> this flag allow applications the option to stage descriptors in {{CPU}} memory before copying them to a shader visible descriptor heap, as a convenience. But it is also fine for applications to directly create descriptors into shader visible descriptor heaps with no requirement to stage anything on the {{CPU}}.</p> <p>This flag only applies to {{CBV}}, {{SRV}}, {{UAV}} and samplers. It does not apply to other descriptor heap types since shaders do not directly reference the other types. </p> </dd> + + + + + <p> Specifies a range so that, for example, if part of a descriptor table has 100 shader-resource views ({{SRVs}}) that range can be declared in one entry rather than 100. </p> + <p> This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structure. </p> + + + <dd> <p> Specifies a range of {{SRVs}}. </p> </dd> + + + <dd> <p> Specifies a range of unordered-access views ({{UAVs}}). </p> </dd> + + + <dd> <p> Specifies a range of constant-buffer views ({{CBVs}}). </p> </dd> + + + <dd> <p> Specifies a range of samplers. </p> </dd> + + + + + <p>Specifies the shaders that can access the contents of a given root signature slot.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure.</p><p>The compute queue always uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> because it has only one active stage. The 3D queue can choose values, but if it uses <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong>, all shader stages can access whatever is bound at the root signature slot.</p> + + + <dd> <p>Specifies that all shader stages can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the vertex shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the hull shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the domain shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the geometry shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + <dd> <p>Specifies that the pixel shader stage can access whatever is bound at the root signature slot.</p> </dd> + + + + + <p> Specifies the type of root signature slot. </p> + <p> This enum is used by the <strong>{{D3D12_ROOT_PARAMETER}}</strong> structure. </p> + + + <dd> <p> The slot is for a descriptor table. </p> </dd> + + + <dd> <p> The slot is for root constants. </p> </dd> + + + <dd> <p> The slot is for a constant-buffer view ({{CBV}}). </p> </dd> + + + <dd> <p> The slot is for a shader-resource view ({{SRV}}). </p> </dd> + + + <dd> <p> The slot is for a unordered-access view ({{UAV}}). </p> </dd> + + + + + <p> Specifies options for root signature layout. </p> + <p> This enum is used in the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p><p>The value in denying access to shader stages is a minor optimization on some hardware. If, for example, the <strong>{{D3D12_SHADER_VISIBILITY_ALL}}</strong> flag has been set to broadcast the root signature to all shader stages, then denying access can overrule this and save the hardware some work. Alternatively if the shader is so simple that no root signature resources are needed, then denying access could be used here too.</p> + + + <dd> <p> Indicates default behavior. </p> </dd> + + + <dd> <p> The app is opting in to using the Input Assembler (requiring an input layout that defines a set of vertex buffer bindings). Omitting this flag can result in one root argument space being saved on some hardware. Omit this flag if the Input Assembler is not required, though the optimization is minor. </p> </dd> + + + <dd> <p> Denies the vertex shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the hull shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the domain shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the geometry shader access to the root signature. </p> </dd> + + + <dd> <p> Denies the pixel shader access to the root signature. </p> </dd> + + + <dd> <p> The root signature allows stream output. This flag can be specified for root signatures authored in {{HLSL}}, similar to how the other flags are specified. <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> will fail if the geometry shader contains stream output but the root signature does not have this flag set. Omit this flag if stream output is not required.</p> </dd> + + + + + <p> Specifies the border color for a static sampler. </p> + <p> This enum is used by the <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structure. </p> + + + <dd> <p> Indicates black, with the alpha component as fully transparent. </p> </dd> + + + <dd> <p> Indicates black, with the alpha component as fully opaque. </p> </dd> + + + <dd> <p> Indicates white, with the alpha component as fully opaque. </p> </dd> + + + + + <p>Specifies the volatility of both descriptors and the data they reference in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structure.</p><p>To specify the volatility of just the data referenced by descriptors, refer to <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong>.</p> + + + <dd> <p>Default behavior. Descriptors are static, and default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>If this is the only flag set, then descriptors are volatile and default assumptions are made about data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> <p>If this flag is combined with {{DATA_VOLATILE}}, then both descriptors and data are volaille, which is equivalent to Root Signature Version 1.0.</p> <p>If this flag is combined with {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, then descriptors are volatile. This still doesn?t allow them to change during command list execution so it is valid to combine the additional declaration that data is static while set via root descriptor table during execution ? the underlying descriptors are effectively static for longer than the data is being promised to be static.</p> </dd> + + + <dd> <p>Descriptors are static and the data is volatile.</p> </dd> + + + <dd> <p>Descriptors are static and data is static while set at execute.</p> </dd> + + + <dd> <p>Both descriptors and data are static. This maximizes the potential for driver optimization.</p> </dd> + + + + + <p>Specifies the volatility of the data referenced by descriptors in a Root Signature 1.1 description, which can enable some driver optimizations.</p> + <p>This enum is used by the <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure.</p><p>To specify the volatility of both descriptors and data, refer to <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong>. </p> + + + <dd> <p>Default assumptions are made for data (for {{SRV}}/{{CBV:}} {{DATA_STATIC_WHILE_SET_AT_EXECUTE}}, and for {{UAV:}} {{DATA_VOLATILE}}). </p> </dd> + + + <dd> <p>Data is volatile. Equivalent to Root Signature Version 1.0.</p> </dd> + + + <dd> <p>Data is static while set at execute.</p> </dd> + + + <dd> <p>Data is static. The best potential for driver optimization.</p> </dd> + + + + + <p>Specifies the type of query heap to create.</p> + <p>This enum is used by the <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure.</p> + + + <dd> <p>This returns a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates that the heap is for high-performance timing data. </p> </dd> + + + <dd> <p>Indicates the heap is to contain pipeline data. Refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Indicates the heap is to contain stream output data. Refer to <strong>{{D3D12_QUERY_DATA_SO_STATISTICS}}</strong>.</p> </dd> + + + + + <p>Specifies the type of query.</p> + <p>This enum is used by <strong>BeginQuery</strong>, <strong>EndQuery</strong> and <strong>ResolveQueryData.</strong> </p> + + + <dd> <p>Indicates the query is for depth/stencil occlusion counts.</p> </dd> + + + <dd> <p>Indicates the query is for a binary depth/stencil occlusion statistics. </p> <p>This new query type acts like {{D3D12_QUERY_TYPE_OCCLUSION}} except that it returns simply a binary 0/1 result: 0 indicates that no samples passed depth and stencil testing, 1 indicates that at least one sample passed depth and stencil testing. This enables occlusion queries to not interfere with any {{GPU}} performance optimization associated with depth/stencil testing. </p> </dd> + + + <dd> <p>Indicates the query is for high definition {{GPU}} and {{CPU}} timestamps.</p> </dd> + + + <dd> <p>Indicates the query type is for graphics pipeline statistics, refer to <strong>{{D3D12_QUERY_DATA_PIPELINE_STATISTICS}}</strong>.</p> </dd> + + + <dd> <p>Stream 0 output statistics. In Direct3D 12 there is no single stream output ({{SO}}) overflow query for all the output streams. Apps need to issue multiple single-stream queries, and then correlate the results. Stream output is the ability of the {{GPU}} to write vertices to a buffer. The stream output counters monitor progress.</p> </dd> + + + <dd> <p>Stream 1 output statistics.</p> </dd> + + + <dd> <p>Stream 2 output statistics.</p> </dd> + + + <dd> <p>Stream 3 output statistics.</p> </dd> + + + + + <p> Specifies the predication operation to apply. </p> + <p> This enum is used by <strong>SetPredication</strong>. </p><p> Predication is decoupled from queries. Predication can be set based on the value of 64-bits within a buffer. </p> + + + <dd> <p> Enables predication if all 64-bits are zero. </p> </dd> + + + <dd> <p> Enables predication if at least one of the 64-bits are not zero. </p> </dd> + + + + + <p> Specifies the type of the indirect parameter. </p> + <p> This enum is used by the <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structure. </p> + + + <dd> <p>Indicates the type is a Draw call.</p> </dd> + + + <dd> <p>Indicates the type is a DrawIndexed call.</p> </dd> + + + <dd> <p>Indicates the type is a Dispatch call.</p> </dd> + + + <dd> <p>Indicates the type is a vertex buffer view.</p> </dd> + + + <dd> <p>Indicates the type is an index buffer view.</p> </dd> + + + <dd> <p>Indicates the type is a constant.</p> </dd> + + + <dd> <p>Indicates the type is a constant buffer view ({{CBV}}).</p> </dd> + + + <dd> <p>Indicates the type is a shader resource view ({{SRV}}).</p> </dd> + + + <dd> <p>Indicates the type is an unordered access view ({{UAV}}).</p> </dd> + + + + + <p>Specifies multiple wait flags for multiple fences.</p> + <p>This enum is used by the <strong>SetEventOnMultipleFenceCompletion</strong> method.</p> + + + <dd> <p>Indicates that none of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that any one of the fences need to be waited on.</p> </dd> + + + <dd> <p>Indicates that all the fences need to be waited on.</p> </dd> + + + + + <p>Specifies a residence priority.</p> + <p>This enum is used by the <strong>SetResidencyPriority</strong> method.</p> + + + <dd> <p>Indicates a minimum priority.</p> </dd> + + + <dd> <p>Indicates a low priority.</p> </dd> + + + <dd> <p>Indicates a normal, medium, priority.</p> </dd> + + + <dd> <p>Indicates a high priority, the default.</p> </dd> + + + <dd> <p>Indicates a maximum priority.</p> </dd> + + + + + <p>Describes a command queue.</p> + <p> This structure is passed into <strong>CreateCommandQueue</strong>. </p><p> This structure is returned by <strong>{{ID3D12CommandQueue::GetDesc}}</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>. </p> </dd> + + + <dd> <p> The priority for the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_PRIORITY}}</strong> enumeration constant to select normal or high priority. </p> </dd> + + + <dd> <p> Specifies any flags from the <strong>{{D3D12_COMMAND_QUEUE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the command queue applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Describes a single element for the input-assembler stage of the graphics pipeline.</p> + <p>This structure is a member of the <strong>{{D3D12_INPUT_LAYOUT_DESC}}</strong> structure. A pipeline state object contains a input-layout structure that defines one element being read from an input slot.</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name <strong>matrix</strong>, however each of the four component would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the format of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. For more info, see Input Slots. Valid values are between 0 and 15. </p> </dd> + + + <dd> <p>Optional. Offset, in bytes, between each element. Use {{D3D12_APPEND_ALIGNED_ELEMENT}} (0xffffffff) for convenience to define the current element directly after the previous one, including any packing if necessary.</p> </dd> + + + <dd> <p>A value that identifies the input data class for a single input slot.</p> </dd> + + + <dd> <p>The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to the {{D3D12_INPUT_PER_VERTEX_DATA}} member of <strong>{{D3D12_INPUT_CLASSIFICATION}}</strong>).</p> </dd> + + + + + <p>Describes a vertex element in a vertex buffer in an output slot.</p> + <p>Specify an array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures in the <strong>pSODeclaration</strong> member of a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p>Zero-based, stream number.</p> </dd> + + + <dd> <p>Type of output element; possible values include: <strong>"{{POSITION}}"</strong>, <strong>"{{NORMAL}}"</strong>, or <strong>"{{TEXCOORD0}}"</strong>. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. </p> </dd> + + + <dd> <p>Output element's zero-based index. Use, for example, if you have more than one texture coordinate stored in each vertex.</p> </dd> + + + <dd> <p>The component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2.</p> </dd> + + + <dd> <p>The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, <strong>StartComponent</strong> is 1 and <strong>ComponentCount</strong> is 2. Note that if <strong>SemanticName</strong> is <strong>{{NULL}}</strong> then <strong>ComponentCount</strong> can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.</p> </dd> + + + <dd> <p>The associated stream output buffer that is bound to the pipeline. The valid range for <strong>OutputSlot</strong> is 0 to 3.</p> </dd> + + + + + <p>Describes the dimensions of a viewport.</p> + <p>Pass an array of these structures to the <em>pViewports</em> parameter in a call to <strong>{{ID3D12GraphicsCommandList::RSSetViewports}}</strong> to set viewports for the display.</p> + + + <dd> <p>X position of the left hand side of the viewport. </p> </dd> + + + <dd> <p>Y position of the top of the viewport. </p> </dd> + + + <dd> <p>Width of the viewport.</p> </dd> + + + <dd> <p>Height of the viewport.</p> </dd> + + + <dd> <p>Minimum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + <dd> <p>Maximum depth of the viewport. Ranges between 0 and 1.</p> </dd> + + + + + <p>Describes a 3D box.</p> + <p> This structure is used by the methods <strong>WriteToSubresource</strong>, <strong>ReadFromSubresource</strong> and <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p>The x position of the left hand side of the box.</p> </dd> + + + <dd> <p>The y position of the top of the box.</p> </dd> + + + <dd> <p>The z position of the front of the box.</p> </dd> + + + <dd> <p>The x position of the right hand side of the box, plus 1. This means that <code>right - left</code> equals the width of the box.</p> </dd> + + + <dd> <p>The y position of the bottom of the box, plus 1. This means that <code>top - bottom</code> equals the height of the box.</p> </dd> + + + <dd> <p>The z position of the back of the box, plus 1. This means that <code>front - back</code> equals the depth of the box.</p> </dd> + + + + + <p>Describes stencil operations that can be performed based on the results of stencil test.</p> + <p>All stencil operations are specified as a <strong>{{D3D12_STENCIL_OP}}</strong>-typed value. Each stencil operation can be set differently based on the outcome of the stencil test, which is referred to as <strong>StencilFunc</strong>, in the stencil test portion of depth-stencil testing.</p><p>Members of <strong>{{D3D12_DEPTH_STENCIL_DESC}}</strong> have this structure for their data type. </p> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing passes and depth testing fails.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_STENCIL_OP}}</strong>-typed value that identifies the stencil operation to perform when stencil testing and depth testing both pass.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies the function that compares stencil data against existing stencil data. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a depth-stencil-state structure that controls how depth-stencil testing is performed by the output-merger stage. </p><p>This table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D12_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D12_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D12_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D12_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D12_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D12_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p> Specifies whether to enable depth testing. Set this member to <strong>{{TRUE}}</strong> to enable depth testing. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_WRITE_MASK}}</strong>-typed value that identifies a portion of the depth-stencil buffer that can be modified by depth data. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that identifies a function that compares depth data against existing depth data. </p> </dd> + + + <dd> <p> Specifies whether to enable stencil testing. Set this member to <strong>{{TRUE}}</strong> to enable stencil testing. </p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DEPTH_STENCILOP_DESC}}</strong> structure that describes how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera. </p> </dd> + + + + + <p>Describes depth-stencil state.</p> + <p>Pass a reference to <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong> to the <strong>{{ID3D11Device::CreateDepthStencilState}}</strong> method to create the depth-stencil state object.</p><p>Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.</p><p>The following table shows the default values of depth-stencil states.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>DepthEnable</td><td>{{TRUE}}</td></tr> <tr><td>DepthWriteMask</td><td>{{D3D11_DEPTH_WRITE_MASK_ALL}}</td></tr> <tr><td>DepthFunc</td><td>{{D3D11_COMPARISON_LESS}}</td></tr> <tr><td>StencilEnable</td><td>{{FALSE}}</td></tr> <tr><td>StencilReadMask</td><td>{{D3D11_DEFAULT_STENCIL_READ_MASK}}</td></tr> <tr><td>StencilWriteMask</td><td>{{D3D11_DEFAULT_STENCIL_WRITE_MASK}}</td></tr> <tr><td> <p>FrontFace.StencilFunc</p> <p>and</p> <p>BackFace.StencilFunc</p> </td><td>{{D3D11_COMPARISON_ALWAYS}}</td></tr> <tr><td> <p>FrontFace.StencilDepthFailOp</p> <p>and</p> <p>BackFace.StencilDepthFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilPassOp</p> <p>and</p> <p>BackFace.StencilPassOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> <tr><td> <p>FrontFace.StencilFailOp</p> <p>and</p> <p>BackFace.StencilFailOp</p> </td><td>{{D3D11_STENCIL_OP_KEEP}}</td></tr> </table><p>?</p><p>The formats that support stenciling are {{DXGI_FORMAT_D24_UNORM_S8_UINT}} and {{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}.</p> + + + <dd> <p>Enable depth testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer that can be modified by depth data (see <strong>{{D3D11_DEPTH_WRITE_MASK}}</strong>).</p> </dd> + + + <dd> <p>A function that compares depth data against existing depth data. The function options are listed in <strong>{{D3D11_COMPARISON_FUNC}}</strong>.</p> </dd> + + + <dd> <p>Enable stencil testing.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for reading stencil data.</p> </dd> + + + <dd> <p>Identify a portion of the depth-stencil buffer for writing stencil data.</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + <dd> <p>Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see <strong>{{D3D11_DEPTH_STENCILOP_DESC}}</strong>).</p> </dd> + + + + + <p>Describes the blend state for a render target.</p> + <p>You specify an array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures in the <strong>RenderTarget</strong> member of the <strong>{{D3D12_BLEND_DESC}}</strong> structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.</p><p>For info about how blending is done, see the output-merger stage.</p><p>Here are the default values for blend state.</p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>BlendEnable</td><td>{{FALSE}}</td></tr> <tr><td>LogicOpEnable</td><td>{{FALSE}}</td></tr> <tr><td>SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to enable (or disable) blending. Set to <strong>{{TRUE}}</strong> to enable blending.</p> </dd> + + + <dd> <p>Specifies whether to enable (or disable) a logical operation. Set to <strong>{{TRUE}}</strong> to enable a logical operation.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the {{RGB}} value that the pixel shader outputs. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current {{RGB}} value in the render target. The <strong>BlendOp</strong> member defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlend</strong> and <strong>DestBlend</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND}}</strong>-typed value that specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The <strong>BlendOpAlpha</strong> member defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BLEND_OP}}</strong>-typed value that defines how to combine the <strong>SrcBlendAlpha</strong> and <strong>DestBlendAlpha</strong> operations.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_LOGIC_OP}}</strong>-typed value that specifies the logical operation to configure for the render target.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D12_COLOR_WRITE_ENABLE}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies a write mask.</p> </dd> + + + + + <p>Describes the blend state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a blend-state structure that controls blending by the output-merger stage. </p><p> Here are the default values for blend state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td>AlphaToCoverageEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>IndependentBlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].BlendEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].LogicOpEnable</td><td><strong>{{FALSE}}</strong></td></tr> <tr><td>RenderTarget[0].SrcBlend</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlend</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOp</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].SrcBlendAlpha</td><td>{{D3D12_BLEND_ONE}}</td></tr> <tr><td>RenderTarget[0].DestBlendAlpha</td><td>{{D3D12_BLEND_ZERO}}</td></tr> <tr><td>RenderTarget[0].BlendOpAlpha</td><td>{{D3D12_BLEND_OP_ADD}}</td></tr> <tr><td>RenderTarget[0].LogicOp</td><td>{{D3D12_LOGIC_OP_NOOP}}</td></tr> <tr><td>RenderTarget[0].RenderTargetWriteMask</td><td>{{D3D12_COLOR_WRITE_ENABLE_ALL}}</td></tr> </table><p>?</p><p> When you set the <strong>LogicOpEnable</strong> member of the first element of the <strong>RenderTarget</strong> array (<strong>RenderTarget</strong>[0]) to <strong>{{TRUE}}</strong>, you must also set the <strong>BlendEnable</strong> member of <strong>RenderTarget</strong>[0] to <strong>{{FALSE}}</strong>, and the <strong>IndependentBlendEnable</strong> member of this structure to <strong>{{FALSE}}</strong>. This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets. </p><p> Note the helper structure, <strong>{{CD3DX12_BLEND_DESC}}</strong>. </p> + + + <dd> <p> Specifies whether to use alpha-to-coverage as a multisampling technique when setting a pixel to a render target. For more info about using alpha-to-coverage, see Alpha-To-Coverage. </p> </dd> + + + <dd> <p> Specifies whether to enable independent blending in simultaneous render targets. Set to <strong>{{TRUE}}</strong> to enable independent blending. If set to <strong>{{FALSE}}</strong>, only the <strong>RenderTarget</strong>[0] members are used; <strong>RenderTarget</strong>[1..7] are ignored. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RENDER_TARGET_BLEND_DESC}}</strong> structures that describe the blend states for render targets; these correspond to the eight render targets that can be bound to the output-merger stage at one time. </p> </dd> + + + + + <p>Describes rasterizer state.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> contains a rasterizer-state structure. </p><p> Rasterizer state defines the behavior of the rasterizer stage. </p><p> If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state. </p><table> <tr><th>State</th><th>Default Value</th></tr> <tr><td><strong>FillMode</strong></td><td>{{D3D12_FILL_MODE_SOLID}}</td></tr> <tr><td><strong>CullMode</strong></td><td>{{D3D12_CULL_MODE_BACK}}</td></tr> <tr><td><strong>FrontCounterClockwise</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>DepthBias</strong></td><td>0</td></tr> <tr><td><strong>DepthBiasClamp</strong></td><td>0.0f</td></tr> <tr><td><strong>SlopeScaledDepthBias</strong></td><td>0.0f</td></tr> <tr><td><strong>DepthClipEnable</strong></td><td><strong>{{TRUE}}</strong></td></tr> <tr><td><strong>MultisampleEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>AntialiasedLineEnable</strong></td><td><strong>{{FALSE}}</strong></td></tr> <tr><td><strong>ForcedSampleCount</strong></td><td>0</td></tr> <tr><td><strong>ConservativeRaster</strong></td><td><strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF}}</strong></td></tr> </table><p>?</p> + + + <dd> <p> A <strong>{{D3D12_FILL_MODE}}</strong>-typed value that specifies the fill mode to use when rendering. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CULL_MODE}}</strong>-typed value that specifies that triangles facing the specified direction are not drawn. </p> </dd> + + + <dd> <p> Determines if a triangle is front- or back-facing. If this member is <strong>{{TRUE}}</strong>, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is <strong>{{FALSE}}</strong>, the opposite is true. </p> </dd> + + + <dd> <p> Depth value added to a given pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Maximum depth bias of a pixel. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Scalar on a given pixel's slope. For info about depth bias, see Depth Bias. </p> </dd> + + + <dd> <p> Specifies whether to enable clipping based on distance. </p> <p> The hardware always performs x and y clipping of rasterized coordinates. When <strong>DepthClipEnable</strong> is set to the default?<strong>{{TRUE}}</strong>, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). </p> <code> 0 &lt; w +-w &lt;= x &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +-w &lt;= y &lt;= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) +0 &lt;= z &lt;= w +</code> <p> When you set <strong>DepthClipEnable</strong> to <strong>{{FALSE}}</strong>, the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 &lt; w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. </p> </dd> + + + <dd> <p> Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing ({{MSAA}}) render targets. Set to <strong>{{TRUE}}</strong> to use the quadrilateral line anti-aliasing algorithm and to <strong>{{FALSE}}</strong> to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> Specifies whether to enable line antialiasing; only applies if doing line drawing and <strong>MultisampleEnable</strong> is <strong>{{FALSE}}</strong>. For more info about this member, see Remarks. </p> </dd> + + + <dd> <p> The sample count that is forced while {{UAV}} rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_MODE}}</strong>-typed value that identifies whether conservative rasterization is on or off. </p> </dd> + + + + + <p>Describes shader data.</p> + <p> The <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> and <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> objects contain <strong>{{D3D12_SHADER_BYTECODE}}</strong> structures that describe various shader types. </p> + + + <dd> <p> A reference to a memory block that contains the shader data. </p> </dd> + + + <dd> <p> The size, in bytes, of the shader data that the <strong>pShaderBytecode</strong> member points to. </p> </dd> + + + + + <p>Describes a streaming output buffer.</p> + <p> A <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> object contains a <strong>{{D3D12_STREAM_OUTPUT_DESC}}</strong> structure. </p> + + + <dd> <p> An array of <strong>{{D3D12_SO_DECLARATION_ENTRY}}</strong> structures. Can't be <strong>{{NULL}}</strong> if <strong>NumEntries</strong> &gt; 0. </p> </dd> + + + <dd> <p> The number of entries in the stream output declaration array that the <strong>pSODeclaration</strong> member points to. </p> </dd> + + + <dd> <p> An array of buffer strides; each stride is the size of an element for that buffer. </p> </dd> + + + <dd> <p> The number of strides (or buffers) that the <strong>pBufferStrides</strong> member points to. </p> </dd> + + + <dd> <p> The index number of the stream to be sent to the rasterizer stage. </p> </dd> + + + + + <p>Describes the input-buffer data for the input-assembler stage.</p> + <p> This structure is a member of the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure.</p> + + + <dd> <p> An array of <strong>{{D3D12_INPUT_ELEMENT_DESC}}</strong> structures that describe the data types of the input-assembler stage. </p> </dd> + + + <dd> <p> The number of input-data types in the array of input elements that the <strong>pInputElementDescs</strong> member points to. </p> </dd> + + + + + <p>Stores a pipeline state.</p> + <p> This structure is used by the <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure, and the <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure.</p><p>This structure is intended to be filled with the data retrieved from <strong>{{ID3D12PipelineState::GetCachedBlob}}</strong>. This cached {{PSO}} contains data specific to the hardware, driver, and machine that it was retrieved from. Compilation using this data should be faster than compilation without. The rest of the data in the {{PSO}} needs to still be valid, and needs to match the cached {{PSO}}, otherwise {{E_INVALIDARG}} might be returned.</p><p>If the driver has been upgraded to a {{D3D12}} driver after the {{PSO}} was cached, you might see a {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} return code, or if you?re running on a different {{GPU}}, the {{D3D12_ERROR_ADAPTER_NOT_FOUND}} return code.</p> + + + <dd> <p> Specifies reference that references the memory location of the cache. </p> </dd> + + + <dd> <p> Specifies the size of the cache in bytes. </p> </dd> + + + + + + + + <p>Describes a compute pipeline state object.</p> + <p> This structure is used by <strong>CreateComputePipelineState</strong>. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_BYTECODE}}</strong> structure that describes the compute shader. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the compute pipeline state is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> A cached pipeline state object, as a <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong> structure. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_PIPELINE_STATE_FLAGS}}</strong> enumeration constant such as for "tool debug". </p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes Direct3D 12 feature options in the current graphics driver. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> Specifies whether <strong>double</strong> types are allowed for shader operations. If <strong>{{TRUE}}</strong>, double types are allowed; otherwise <strong>{{FALSE}}</strong>. The supported operations are equivalent to Direct3D 11's <strong>ExtendedDoublesShaderInstructions</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong> structure. </p> <p> To use any {{HLSL}} shader that is compiled with a <strong>double</strong> type, the runtime must set <strong>DoublePrecisionFloatShaderOps</strong> to <strong>{{TRUE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether logic operations are available in blend state. The runtime sets this member to <strong>{{TRUE}}</strong> if logic operations are available in blend state and <strong>{{FALSE}}</strong> otherwise. This member is <strong>{{FALSE}}</strong> for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is <strong>{{TRUE}}</strong> for feature level 11.1 and 12. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_SHADER_MIN_PRECISION_SUPPORT}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies minimum precision levels that the driver supports for shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all shader stages. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>-typed value that indicates if the hardware and driver support tiled resources and at what tier level. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support resource binding. The runtime sets this member to a <strong>{{D3D12_RESOURCE_BINDING_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Specifies whether pixel shader stencil ref is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether the loading of additional formats for typed unordered-access views ({{UAVs}}) is supported. If <strong>{{TRUE}}</strong>, it's supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies whether <em>Rasterizer Order Views</em> ({{ROVs}}) are supported. If <strong>{{TRUE}}</strong>, they're supported; otherwise <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver support conservative rasterization. The runtime sets this member to a <strong>{{D3D12_CONSERVATIVE_RASTERIZATION_TIER}}</strong>-typed value that indicates the tier level. </p> </dd> + + + <dd> <p> Don't use this field; instead, use the <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> query (a structure with a <strong>MaxGPUVirtualAddressBitsPerResource</strong> member), which is more accurate. </p> </dd> + + + <dd> <p> {{TRUE}} if the hardware supports textures with the 64KB standard swizzle pattern. Support for this pattern enables zero-copy texture optimizations while providing near-equilateral locality for each dimension within the texture. For texture swizzle options and restrictions, see <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CROSS_NODE_SHARING_TIER}}</strong> enumeration constant that specifies the level of sharing across nodes of an adapter that has multiple nodes, such as Tier 1 Emulated, Tier 1, or Tier 2. </p> </dd> + + + <dd> <p> {{FALSE}} means the device only supports copy operations to and from cross-adapter row-major textures. {{TRUE}} means the device supports shader resource views, unordered access views, and render target views of cross-adapter row-major textures. "Cross-adapter" means between multiple adapters (even from different {{IHVs}}). </p> </dd> + + + <dd> <p> Whether the viewport ({{VP}}) and Render Target ({{RT}}) array index from any shader feeding the rasterizer are supported without geometry shader emulation. Compare the <strong>{{VPAndRTArrayIndexFromAnyShaderFeedingRasterizer}}</strong> member of the <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS3}}</strong> structure. In <strong>{{ID3D12ShaderReflection::GetRequiresFlags}}</strong>, see the #define {{D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER}}. </p> </dd> + + + <dd> <p> Specifies the level at which the hardware and driver require heap attribution related to resource type. The runtime sets this member to a <strong>{{D3D12_RESOURCE_HEAP_TIER}}</strong> enumeration constant. </p> </dd> + + + + + <p>Describes the level of support for {{HLSL}} 6.0 wave operations.</p> + <p>A "lane" is single thread of execution. The shader models before version 6.0 expose only one of these at the language level, leaving expansion to parallel {{SIMD}} processing entirely up to the implementation. A "wave" is set of lanes (threads) executed simultaneously in the processor. No explicit barriers are required to guarantee that they execute in parallel. Similar concepts include "warp" and "wavefront". +</p><p> This structure is used with the {{D3D12_FEATURE_D3D12_OPTIONS1}} member of <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p>True if the driver supports {{HLSL}} 6.0 wave operations.</p> </dd> + + + <dd> <p>Specifies the baseline number of lanes in the {{SIMD}} wave that this implementation can support. This term is sometimes known as "wavefront size" or "warp width". Currently apps should rely only on this minimum value for sizing workloads. +</p> </dd> + + + <dd> <p>Specifies the maximum number of lanes in the {{SIMD}} wave that this implementation can support. This capability is reserved for future expansion, and is not expected to be used by current applications. +</p> </dd> + + + <dd> <p>Specifies the total number of {{SIMD}} lanes on the hardware.</p> </dd> + + + <dd> <p>Indicates transitions are possible in and out of the {{CBV}}, and indirect argument states, on compute command lists. If <strong>CheckFeatureSupport</strong> succeeds this value will always be true. </p> </dd> + + + <dd> <p>Indicates that 64bit integer operations are supported.</p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Pass this structure to <strong>CheckFeatureSupport</strong> to check for root signature version support.</p> + + + + <p>Provide detail about the adapter architecture, helping applications better optimize for certain adapter properties.</p> + + + + <dd> <p> In multi-adapter operation, this indicates which physical adapter of the device is relevant. See Multi-Adapter. <strong>NodeIndex</strong> is filled out by the application before calling <strong>CheckFeatureSupport</strong>, as the application can retrieve details about the architecture of each adapter. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support a tile-based renderer. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support a tile-based renderer. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support {{UMA}}. </p> </dd> + + + <dd> <p> Specifies whether the hardware and driver support cache-coherent {{UMA}}. The runtime sets this member to <strong>{{TRUE}}</strong> if the hardware and driver support cache-coherent {{UMA}}. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + + + + <p>Contains the supported shader model.</p> + <p> Refer to the enumeration constant {{D3D12_FEATURE_SHADER_MODEL}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>Specifies one member of <strong>{{D3D_SHADER_MODEL}}</strong> that indicates the maximum supported shader model.</p> </dd> + + + + + <p> Describes which resources are supported by the current graphics driver for a given format. </p> + <p> Refer to the enum <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT1}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which resources are supported. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_FORMAT_SUPPORT2}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies which unordered resource options are supported. </p> </dd> + + + + + <p> Describes the image quality levels for a given format and sample count. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of multi-samples per pixel to return info about. </p> </dd> + + + <dd> <p> Flags to control quality levels, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS}}</strong> enumeration constants. The resulting value specifies options for determining quality levels. </p> </dd> + + + <dd> <p> The number of quality levels. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p> Details the adapter's {{GPU}} virtual address space limitations, including maximum address bits per resource and per process. </p> + <p> See the enumeration constant {{D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT}} in the <strong>{{D3D12_FEATURE}}</strong> enumeration. </p> + + + <dd> <p>The maximum {{GPU}} virtual address bits per resource.</p> <p>Some adapters have significantly less bits available per resource than per process, while other adapters have significantly greater bits available per resource than per process. The latter scenario tends to happen in less common scenarios, like when running a 32-bit process on certain {{UMA}} adapters. +When per resource capabilities are greater than per process, the greater per resource capabilities can only be leveraged by reserved resources or {{NULL}} mapped pages. +</p> </dd> + + + <dd> <p> The maximum {{GPU}} virtual address bits per process.</p> <p>When this value is nearly equal to the available residency budget, <strong>Evict</strong> will not be a feasible option to manage residency. See <strong>MakeResident</strong> for more details.</p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p> Describes the {{DXGI}} data format. </p> + <p> See <strong>{{D3D12_FEATURE}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the format to return info about. </p> </dd> + + + <dd> <p> The number of planes to provide information about. </p> </dd> + + + + + <p>Describes parameters needed to allocate resources.</p> + <p> This structure is used by the <strong>GetResourceAllocationInfo</strong> method. </p> + + + <dd> <p>The size, in bytes, of the resource.</p> </dd> + + + <dd> <p>The alignment value for the resource; one of 4KB (4096), 64KB (65536) and 4MB (4194304) alignment.</p> </dd> + + + + + <p>Describes heap properties.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{D3D12_HEAP_DESC}}</strong> structure </li> <li> <strong>{{ID3D12Resource::GetHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::GetCustomHeapProperties}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> </ul><p> Valid combinations of struct member values: </p><ul> <li> When <strong>Type</strong> is <strong>{{D3D12_HEAP_TYPE}}</strong>_CUSTOM, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must not be ..._UNKNOWN. </li> <li> When <strong>Type</strong> is not {{D3D12_HEAP_TYPE_CUSTOM}}, <strong>{{CPUPageProperty}}</strong> and <strong>MemoryPoolPreference</strong> must be ..._UNKNOWN. </li> <li> When using {{D3D12_HEAP_TYPE_CUSTOM}} and <strong>{{D3D12_MEMORY_POOL}}</strong>_L1, on {{NUMA}} adapters, <strong>{{CPUPageProperty}}</strong> must be <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>_NOT_AVAILABLE. To differentiate {{NUMA}} from {{UMA}} adapters, see <strong>{{D3D12_FEATURE}}</strong>_ARCHITECTURE and <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </li> </ul> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the type of heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_PAGE_PROPERTY}}</strong>-typed value that specifies the {{CPU}}-page properties for the heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_MEMORY_POOL}}</strong>-typed value that specifies the memory pool for the heap. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the node where the resource should be created. Exactly one bit of this {{UINT}} must be set. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + <dd> <p> For multi-adapter operation, this indicates the set of nodes where the resource is visible. <em>VisibleNodeMask</em> must have the same bits set as <em>CreationNodeMask</em> has. See Multi-Adapter. </p> <p> Passing zero is equivalent to passing one, in order to simplify the usage of single-{{GPU}} adapters. </p> </dd> + + + + + <p>Describes a heap.</p> + <p> This structure is used by the <strong>CreateHeap</strong> method, and returned by the <strong>GetDesc</strong> method. </p> + + + <dd> <p> The size, in bytes, of the heap. To avoid wasting memory, applications should pass <em>SizeInBytes</em> values which are multiples of the effective <em>Alignment</em>; but non-aligned <em>SizeInBytes</em> is also supported, for convenience. To find out how large a heap must be to support textures with undefined layouts and adapter-specific sizes, call <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong>. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that describes the heap properties. </p> </dd> + + + <dd> <p> The alignment value for the heap. Valid values: </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td> 0 </td><td> An alias for 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 64KB. </td></tr> <tr><td> {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}} </td><td> #defined as 4MB. An application must decide whether the heap will contain multi-sample anti-aliasing ({{MSAA}}), in which case, the application must choose {{D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT}}. </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise-{{OR}} operation. The resulting value identifies heap options. When creating heaps to support adapters with resource heap tier 1, an application must choose some flags. </p> </dd> + + + + + <p> Describes a resource, such as a texture. This structure is used extensively. </p> + <p> Use this structure with:</p><ul> <li> <strong>{{ID3D12Resource::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::GetResourceAllocationInfo}}</strong> </li> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> <li> <strong>{{ID3D12Device::GetCopyableFootprints}}</strong> </li> <li> A number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</li> </ul><p>Two common resources are buffers and textures, which both use this structure, but with quite different uses of the fields.</p> + + + <dd> <p> One member of <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>, specifying the dimensions of the resource (for example, {{D3D12_RESOURCE_DIMENSION_TEXTURE1D}}), or whether it is a buffer (({{D3D12_RESOURCE_DIMENSION_BUFFER}}). </p> </dd> + + + <dd> <p> Specifies the alignment. </p> </dd> + + + <dd> <p> Specifies the width of the resource. </p> </dd> + + + <dd> <p> Specifies the height of the resource. </p> </dd> + + + <dd> <p> Specifies the depth of the resource, if it is 3D, or the array size if it is an array of 1D or 2D resources. </p> </dd> + + + <dd> <p> Specifies the number of {{MIP}} levels. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{DXGI_FORMAT}}</strong>. </p> </dd> + + + <dd> <p> Specifies a <strong>{{DXGI_SAMPLE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_TEXTURE_LAYOUT}}</strong>. </p> </dd> + + + <dd> <p> Bitwise-{{OR}}'d flags, as <strong>{{D3D12_RESOURCE_FLAGS}}</strong> enumeration constants. </p> </dd> + + + + + <p>Specifies a depth and stencil value.</p> + <p>This structure is used in the <strong>{{D3D12_CLEAR_VALUE}}</strong> structure.</p> + + + <dd> <p>Specifies the depth value.</p> </dd> + + + <dd> <p>Specifies the stencil value.</p> </dd> + + + + + <p>Describes a value used to optimize clear operations for a particular resource.</p> + <p> This structure is optionally passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CreateCommittedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreatePlacedResource}}</strong> </li> <li> <strong>{{ID3D12Device::CreateReservedResource}}</strong> </li> </ul> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_FORMAT}}</strong> enum.</p> <p>The format of the commonly cleared color follows the same validation rules as a view/ descriptor creation. In general, the format of the clear color can be any format in the same typeless group that the resource format belongs to.</p> <p>This <em>Format</em> must match the format of the view used during the clear operation. It indicates whether the <em>Color</em> or the <em>DepthStencil</em> member is valid and how to convert the values for usage with the resource.</p> </dd> + + + <dd> <p>Specifies a 4-entry array of float values (each value in the range 0.0 to 1.0), determining the {{RGBA}} value. The order of {{RGBA}} matches the order used with <strong>ClearRenderTargetView</strong>.</p> </dd> + + + <dd> <p>Specifies one member of <strong>{{D3D12_DEPTH_STENCIL_VALUE}}</strong>. These values match the semantics of <em>Depth</em> and <em>Stencil</em> in <strong>ClearDepthStencilView</strong>.</p> </dd> + + + + + <p>Describes a memory range.</p> + <p><strong>End</strong> is one-past-the-end. When <strong>Begin</strong> equals <strong>End</strong>, the range is empty. The size of the range is (<strong>End</strong> - <strong>Begin</strong>). </p><p> This structure is used by the <strong>Map</strong> and <strong>Unmap</strong> methods. </p> + + + <dd> <p> The offset, in bytes, denoting the beginning of a memory range. </p> </dd> + + + <dd> <p> The offset, in bytes, denoting the end of a memory range. <strong>End</strong> is one-past-the-end. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a subresource memory range.</p> + <p> This structure is used by the <strong>AtomicCopyBufferUINT</strong> and <strong>AtomicCopyBufferUINT64</strong> methods. </p> + + + <dd> <p>The index of the subresource.</p> </dd> + + + <dd> <p>A memory range within the subresource.</p> </dd> + + + + + <p>Describes subresource data.</p> + + + <dd> <p>Offset, in bytes, between the start of the parent resource and this subresource.</p> </dd> + + + <dd> <p>The row pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + <dd> <p>The depth pitch, or width, or physical size, in bytes, of the subresource data.</p> </dd> + + + + + <p>Describes the coordinates of a tiled resource.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The x-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The y-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The z-coordinate of the tiled resource.</p> </dd> + + + <dd> <p>The index of the subresource for the tiled resource.</p> </dd> + + + + + <p>Describes the size of a tiled region.</p> + <p> This structure is used by the <strong>CopyTiles</strong>, <strong>CopyTileMappings</strong> and <strong>UpdateTileMappings</strong> methods. </p> + + + <dd> <p>The number of tiles in the tiled region.</p> </dd> + + + <dd> <p> Specifies whether the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. </p> <p> If <strong>{{TRUE}}</strong>, the runtime uses the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members to define the region. In this case, <strong>NumTiles</strong> should be equal to <strong>Width</strong> * <strong>Height</strong> * <strong>Depth</strong>.</p> <p> If <strong>{{FALSE}}</strong>, the runtime ignores the <strong>Width</strong>, <strong>Height</strong>, and <strong>Depth</strong> members and uses the <strong>NumTiles</strong> member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once. </p> <p> Regardless of whether you specify <strong>{{TRUE}}</strong> or <strong>{{FALSE}}</strong> for <strong>UseBox</strong>, you use a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates. </p> <p> When the region includes mipmaps that are packed with nonstandard tiling, <strong>UseBox</strong> must be <strong>{{FALSE}}</strong> because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0. </p> </dd> + + + <dd> <p> The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p> The height of the tiled region, in tiles. Used for 2D and 3D textures. For more info, see Tile and toast image sizes. </p> </dd> + + + <dd> <p>The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.</p> </dd> + + + + + <p>Describes a tiled subresource volume.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in tiles of the subresource.</p> </dd> + + + <dd> <p>The height in tiles of the subresource.</p> </dd> + + + <dd> <p>The depth in tiles of the subresource.</p> </dd> + + + <dd> <p>The index of the tile in the overall tiled subresource to start with. </p> </dd> + + + + + <p>Describes the shape of a tile by specifying its dimensions.</p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p>The width in texels of the tile.</p> </dd> + + + <dd> <p>The height in texels of the tile.</p> </dd> + + + <dd> <p>The depth in texels of the tile.</p> </dd> + + + + + <p> Describes the tile structure of a tiled resource with mipmaps. </p> + <p> This structure is used by the <strong>GetResourceTiling</strong> method. </p> + + + <dd> <p> The number of standard mipmaps in the tiled resource. </p> </dd> + + + <dd> <p> The number of packed mipmaps in the tiled resource. </p> <p> This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same packing. </p> <p> On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser mipmaps for a given array slice are considered packed as well. </p> </dd> + + + <dd> <p> The number of tiles for the packed mipmaps in the tiled resource. </p> <p> If there is no packing, this value is meaningless and is set to 0. Otherwise, it is set to the number of tiles that are needed to represent the set of packed mipmaps. The pixel layout within the packed mipmaps is hardware specific. If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. For arrays, this value is only the count of packed mipmaps within the subresources for each array slice. </p> </dd> + + + <dd> <p> The offset of the first packed tile for the resource in the overall range of tiles. If <strong>NumPackedMips</strong> is 0, this value is meaningless and is 0. Otherwise, it is the offset of the first packed tile for the resource in the overall range of tiles for the resource. A value of 0 for <strong>StartTileIndexInOverallResource</strong> means the entire resource is packed. For array surfaces, this is the offset for the tiles that contain the packed mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset past the beginning of the tiles for each array slice. </p> <strong>Note</strong>?? The number of overall tiles, packed or not, for a given array slice is simply the total number of tiles for the resource divided by the resource's array size, so it is easy to locate the range of tiles for any given array slice, out of which <strong>StartTileIndexInOverallResource</strong> identifies which of those are packed. ? </dd> + + + + + <p> Describes the transition of subresources between different usages. </p> + <p> This struct is used by the <strong>Transition</strong> member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> struct. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the resource used in the transition. </p> </dd> + + + <dd> <p> The index of the subresource for the transition. Use the <strong>{{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}</strong> flag ( 0xffffffff ) to transition all subresources in a resource at the same time. </p> </dd> + + + <dd> <p> The "before" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The "after" usages of the subresources, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + + + <p> Describes the transition between usages of two different resources that have mappings into the same heap. </p> + <p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> Both the before and the after resources can be specified or one or both resources can be <strong>{{NULL}}</strong>, which indicates that any placed or reserved resource could cause aliasing. </p><p>Refer to the usage models described in <strong>CreatePlacedResource</strong>.</p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the before resource used in the transition. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the after resource used in the transition. </p> </dd> + + + + + <p> Represents a resource in which all {{UAV}} accesses must complete before any future {{UAV}} accesses can begin. </p> + <p> This struct represents a resource in which all unordered access view ({{UAV}}) accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p><p> This structure is a member of the <strong>{{D3D12_RESOURCE_BARRIER}}</strong> structure. </p><p> You don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that only read a {{UAV}}. Additionally, you don't need to insert a {{UAV}} barrier between 2 draw or dispatch calls that write to the same {{UAV}} if you know that it's safe to execute the {{UAV}} accesses in any order. The resource can be <strong>{{NULL}}</strong>, which indicates that any {{UAV}} access could require the barrier. </p> + + + <dd> <p> The resource used in the transition, as a reference to <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + + + <p> Describes a resource barrier (transition in resource use). </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> method. </p> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_BARRIER_TYPE}}</strong>-typed value that specifies the type of resource barrier. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_RESOURCE_BARRIER_FLAGS}}</strong> enumeration constant such as for "begin only" or "end only". </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> structure that describes the transition of subresources between different usages. Members specify the before and after usages of the subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> structure that describes the transition between usages of two different resources that have mappings into the same heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> structure that describes a resource in which all {{UAV}} accesses (reads or writes) must complete before any future {{UAV}} accesses (read or write) can begin. </p> </dd> + + + + + <p> Describes the format, width, height, depth, and row-pitch of the subresource into the parent resource. </p> + <p> Use this structure in the <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p><p> The helper structure is <strong>{{CD3DX12_SUBRESOURCE_FOOTPRINT}}</strong>. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. </p> </dd> + + + <dd> <p> The width of the subresource. </p> </dd> + + + <dd> <p> The height of the subresource. </p> </dd> + + + <dd> <p> The depth of the subresource. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. This must be a multiple of {{D3D12_TEXTURE_DATA_PITCH_ALIGNMENT}} (256), and must be greater than or equal to the size of the data within a row. </p> </dd> + + + + + <p> Describes the footprint of a placed subresource, including the offset and the {{D3D12_SUBRESOURCE_FOOTPRINT}}. </p> + <p> This structure is used in the <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong> structure, and by <strong>{{ID3D12Device::GetCopyableFootprints}}</strong>. </p><p> All the data referenced by the footprint structure must fit within the bounds of the parent resource. If you use <strong>GetCopyableFootprints</strong> to fill out the structure, the <em>pTotalBytes</em> output field indicates the required size of the resource.</p><p> This structure is also used a number of helper functions (refer to Helper Structures and Functions for {{D3D12}}).</p><p> When copying textures, use this structure along with <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. </p> + + + <dd> <p> The offset of the subresource within the parent resource, in bytes. The offset between the start of the parent resource and this subresource. </p> </dd> + + + <dd> <p> The format, width, height, depth, and row-pitch of the subresource, as a <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structure. </p> </dd> + + + + + <p>Describes a portion of a texture for the purpose of texture copies. </p> + <p> Use this structure with <strong>CopyTextureRegion</strong>. </p> + + + <dd> <p> Specifies the resource which will be used for the copy operation.</p>? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT}}, <strong>pResource</strong> must point to a buffer resource.? When <strong>Type</strong> is {{D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX}}, <strong>pResource</strong> must point to a texture resource. </dd> + + + <dd> <p> Specifies which type of resource location this is: a subresource of a texture, or a description of a texture layout which can be applied to a buffer. This <strong>{{D3D12_TEXTURE_COPY_TYPE}}</strong> enum indicates which union member to use. </p> </dd> + + + <dd> <p> Specifies a texture layout, with offset, dimensions, and pitches, for the hardware to understand how to treat a section of a buffer resource as a multi-dimensional texture. To fill-in the correct data for a <strong>CopyTextureRegion</strong> call, see <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the subresource of an arrayed, mip-mapped, or planar texture should be used for the copy operation. </p> </dd> + + + + + <p>This section provides code for sample scenarios. Many of the walk-throughs provide details on what coding is required to be added to a basic sample, to avoid repeating the basic component code for each scenario.</p><p>For the most basic component, refer to the Creating a Basic Direct3D 12 Component section. The following walk-throughs describe more advanced scenarios.</p><p> </p> + + + + <p>Describes the elements in a buffer resource to use in a shader-resource view.</p> + <p> This structure is used by <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> to create a view of a buffer. </p> + + + <dd> <p>The index of the first element to be accessed by the view.</p> </dd> + + + <dd> <p>The number of elements in the resource.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV_FLAGS}}</strong>-typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers. </p> </dd> + + + + + <p>Specifies the subresource from a 1D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p><p>As an example, assuming <strong>MostDetailedMip</strong> = 6 and <strong>MipLevels</strong> = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates the view. In this situation, <strong>MostDetailedMip</strong> is greater than the <strong>MipLevels</strong> in the view. However, <strong>MostDetailedMip</strong> is not greater than the <strong>MipLevels</strong> in the original resource.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture1D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1. </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a shader-resource view.</p> + <p> This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>. </p> + + + <dd> <p> Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> -1 (where <strong>MipLevels</strong> is from the original Texture2D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view). </p> </dd> + + + <dd> <p> The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>. </p> <p> Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed. </p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original Texture3D for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresource from a cube texture to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from an array of cube textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>Index of the most detailed mipmap level to use; this number is between 0 and <strong>MipLevels</strong> (from the original TextureCube for which <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> creates a view) -1.</p> </dd> + + + <dd> <p>The maximum number of mipmap levels for the view of the texture. See the remarks in <strong>{{D3D12_TEX1D_SRV}}</strong>.</p> <p>Set to -1 to indicate all the mipmap levels from <strong>MostDetailedMip</strong> on down to least detailed.</p> </dd> + + + <dd> <p>Index of the first 2D texture to use.</p> </dd> + + + <dd> <p>Number of cube textures in the array.</p> </dd> + + + <dd> <p>A value to clamp sample {{LOD}} values to. For example, if you specify 2.0f for the clamp value, you ensure that no individual sample accesses a mip level less than 2.0f.</p> </dd> + + + + + <p>Describes the subresources from a multi sampled 2D texture to use in a shader-resource view.</p> + <p>This structure is a member of the <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure.</p><p>Since a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_SRV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C.</p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures to use in a shader-resource view.</p> + <p>This structure is one member of a shader-resource-view description, <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong>.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes a shader-resource view.</p> + <p> A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. </p><p> When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you can't create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a {{DXGI_FORMAT_R32G32B32_TYPELESS}} resource can be viewed with one of these typed formats: {{DXGI_FORMAT_R32G32B32_FLOAT}}, {{DXGI_FORMAT_R32G32B32_UINT}}, and {{DXGI_FORMAT_R32G32B32_SINT}}, since these typed formats are compatible with the typeless resource. </p><p> Create a shader-resource-view description by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong>.</p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. See remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SRV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_COMPONENT_MAPPING}}</strong> enumeration constant, such as return component 0 (red) from memory, or force the resulting value to 0. This mapping enables the shader resource view ({{SRV}}) to choose how memory gets routed to the 4 return components in a shader after a memory fetch. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_SRV}}</strong> structure that views the resource as a buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_SRV}}</strong> structure that views the resource as a 1D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_SRV}}</strong> structure that views the resource as a 1D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_SRV}}</strong> structure that views the resource as a 2D-texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_SRV}}</strong> structure that views the resource as a 2D-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_SRV}}</strong> structure that views the resource as a 2D-multisampled texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_SRV}}</strong> structure that views the resource as a 2D-multisampled-texture array. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX3D_SRV}}</strong> structure that views the resource as a 3D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_SRV}}</strong> structure that views the resource as a 3D-cube texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXCUBE_ARRAY_SRV}}</strong> structure that views the resource as a 3D-cube-texture array. </p> </dd> + + + + + <p>Describes a constant buffer to view.</p> + <p>This structure is used by <strong>CreateConstantBufferView</strong>.</p> + + + <dd> <p> The {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + <dd> <p>The size in bytes of the constant buffer.</p> </dd> + + + + + <p>Describes a sampler state.</p> + <p>This structure is used by <strong>CreateSampler</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_FILTER}}</strong>-typed value that specifies the filtering method to use when sampling a texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a u texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a v texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong>-typed value that specifies the method to use for resolving a w texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if the runtime calculates that a texture should be sampled at mipmap level 3 and <strong>MipLODBias</strong> is 2, the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if <strong>{{D3D12_FILTER_ANISOTROPIC}}</strong> or <strong>{{D3D12_FILTER_COMPARISON_ANISOTROPIC}}</strong> is specified in <strong>Filter</strong>. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_COMPARISON_FUNC}}</strong>-typed value that specifies a function that compares sampled data against existing sampled data. </p> </dd> + + + <dd> <p> Border color to use if <strong>{{D3D12_TEXTURE_ADDRESS_MODE_BORDER}}</strong> is specified for <strong>AddressU</strong>, <strong>AddressV</strong>, or <strong>AddressW</strong>. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p>Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.</p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to <strong>MinLOD</strong>. To have no upper limit on {{LOD}}, set this member to a large value. </p> </dd> + + + + + <p>Describes the elements in a buffer to use in a unordered-access view.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a buffer. </p> + + + <dd> <p>The zero-based index of the first element to be accessed.</p> </dd> + + + <dd> <p>The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.</p> </dd> + + + <dd> <p>The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer.</p> </dd> + + + <dd> <p> The counter offset, in bytes. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong>-typed value that specifies the view options for the resource. </p> </dd> + + + + + <p>Describes a unordered-access 1D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + + + <p>Describes an array of unordered-access 1D texture resources. </p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + + + <p>Describes a unordered-access 2D texture resource.</p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p> Describes an array of unordered-access 2D texture resources. </p> + <p> Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first array slice to be accessed.</p> </dd> + + + <dd> <p>The number of slices in the array.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p>Describes a unordered-access 3D texture resource.</p> + <p>Use this structure with a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The mipmap slice index.</p> </dd> + + + <dd> <p>The zero-based index of the first depth slice to be accessed.</p> </dd> + + + <dd> <p>The number of depth slices.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using an unordered-access view.</p> + <p>Pass an unordered-access-view description into <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> to create a view.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_UAV_DIMENSION}}</strong>-typed value that specifies the resource type of the view. This type specifies how the resource will be accessed. This member also determines which _UAV to use in the union below.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_UAV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_UAV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_UAV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_UAV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_UAV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the elements in a buffer resource to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a buffer.</p> + + + <dd> <p>Number of bytes between the beginning of the buffer and the first element to access.</p> </dd> + + + <dd> <p>The total number of elements in the view.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 2D texture. </p> + + + <dd> <p>The index of the mipmap level to use.</p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in the texture. </p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture to use in a render-target view.</p> + <p>This structure is a member of the <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is actually nothing to specify in <strong>{{D3D12_TEX2DMS_RTV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Integer of any value. See remarks.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures to use in a render-target view.</p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures. </p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p> Number of textures in the array to use in the render target view, starting from <strong>FirstArraySlice</strong>. </p> </dd> + + + <dd> <p> The index (plane slice number) of the plane to use in an array of textures. </p> </dd> + + + + + <p> Describes the subresources from an array of multi sampled 2D textures to use in a render-target view. </p> + <p> Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures. </p> + + + <dd> <p> The index of the first texture to use in an array of textures. </p> </dd> + + + <dd> <p> The number of textures to use. </p> </dd> + + + + + <p>Describes the subresources from a 3D texture to use in a render-target view.</p> + <p>Use this structure with a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure to view the resource as a 3D texture.</p> + + + <dd> <p>The index of the mipmap level to use mip slice.</p> </dd> + + + <dd> <p>First depth level to use.</p> </dd> + + + <dd> <p>Number of depth levels to use in the render-target view, starting from <strong>FirstWSlice</strong>. A value of -1 indicates all of the slices along the w axis, starting from <strong>FirstWSlice</strong>.</p> </dd> + + + + + <p>Describes the subresources from a resource that are accessible by using a render-target view.</p> + <p>Pass a render-target-view description into <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> to create a render-target view.</p><p>A render-target view can't use the following formats:</p><ul> <li>Any typeless format.</li> <li>{{DXGI_FORMAT_R32G32B32}} if the view will be used to bind a buffer (vertex, index, constant, or stream-output).</li> </ul><p>If the format is set to {{DXGI_FORMAT_UNKNOWN}}, then the format of the resource that the view binds to the pipeline will be used.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_RTV_DIMENSION}}</strong>-typed value that specifies how the render-target resource will be accessed. This type specifies how the resource will be accessed. This member also determines which _RTV to use in the following union.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_BUFFER_RTV}}</strong> structure that specifies which buffer elements can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_RTV}}</strong> structure that specifies the subresources in a 1D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX1D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 1D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_RTV}}</strong> structure that specifies the subresources in a 2D texture that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2D_ARRAY_RTV}}</strong> structure that specifies the subresources in a 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_RTV}}</strong> structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX2DMS_ARRAY_RTV}}</strong> structure that specifies the subresources in a multisampled 2D texture array that can be accessed.</p> </dd> + + + <dd> <p>A <strong>{{D3D12_TEX3D_RTV}}</strong> structure that specifies subresources in a 3D texture that can be accessed.</p> </dd> + + + + + <p>Describes the subresource from a 1D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 1D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 1D textures to use in a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 1D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a 2D texture that is accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as a 2D texture.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + + + <p>Describes the subresources from an array of 2D textures that are accessible to a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of 2D textures.</p> + + + <dd> <p>The index of the first mipmap level to use.</p> </dd> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresource from a multi sampled 2D texture that is accessible to a depth-stencil view.</p> + <p>This structure is a member of the <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure.</p><p>Because a multi sampled 2D texture contains a single subresource, there is nothing to specify in <strong>{{D3D12_TEX2DMS_DSV}}</strong>. Consequently, <strong>UnusedField_NothingToDefine</strong> is included so that this structure will compile in C. </p> + + + <dd> <p>Unused.</p> </dd> + + + + + <p>Describes the subresources from an array of multi sampled 2D textures for a depth-stencil view.</p> + <p>Use this structure with a <strong>{{D3D12_DEPTH_STENCIL_VIEW_DESC}}</strong> structure to view the resource as an array of multi sampled 2D textures.</p> + + + <dd> <p>The index of the first texture to use in an array of textures.</p> </dd> + + + <dd> <p>Number of textures to use.</p> </dd> + + + + + <p>Describes the subresources of a texture that are accessible from a depth-stencil view.</p> + <p> These are valid formats for a depth-stencil view: </p><ul> <li>{{DXGI_FORMAT_D16_UNORM}}</li> <li>{{DXGI_FORMAT_D24_UNORM_S8_UINT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT}}</li> <li>{{DXGI_FORMAT_D32_FLOAT_S8X24_UINT}}</li> <li>{{DXGI_FORMAT_UNKNOWN}}</li> </ul><p> A depth-stencil view can't use a typeless format. If the format chosen is {{DXGI_FORMAT_UNKNOWN}}, the format of the parent resource is used. </p><p> Pass a depth-stencil-view description into <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> to create a depth-stencil view. </p> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value that specifies the viewing format. For allowable formats, see Remarks. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_DSV_DIMENSION}}</strong>-typed value that specifies how the depth-stencil resource will be accessed. This member also determines which _DSV to use in the following union. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DSV_FLAGS}}</strong> enumeration constants that are combined by using a bitwise {{OR}} operation. The resulting value specifies whether the texture is read only. Pass 0 to specify that it isn't read only; otherwise, pass one or more of the members of the <strong>{{D3D12_DSV_FLAGS}}</strong> enumerated type. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_DSV}}</strong> structure that specifies a 1D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX1D_ARRAY_DSV}}</strong> structure that specifies an array of 1D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_DSV}}</strong> structure that specifies a 2D texture subresource. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2D_ARRAY_DSV}}</strong> structure that specifies an array of 2D texture subresources. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_DSV}}</strong> structure that specifies a multisampled 2D texture. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_TEX2DMS_ARRAY_DSV}}</strong> structure that specifies an array of multisampled 2D textures. </p> </dd> + + + + + <p>Describes the descriptor heap.</p> + <p> This structure is used by the following: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetDesc}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDescriptorHeap}}</strong> </li> </ul> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the types of descriptors in the heap. </p> </dd> + + + <dd> <p> The number of descriptors in the heap. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_DESCRIPTOR_HEAP_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the heap. </p> </dd> + + + <dd> <p> For single-adapter operation, set this to zero. If there are multiple adapter nodes, set a bit to identify the node (one of the device's physical adapters) to which the descriptor heap applies. Each bit in the mask corresponds to a single node. Only one bit must be set. See Multi-Adapter. </p> </dd> + + + + + <p>Describes a descriptor range.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure. </p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.0 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes constants inline in the root signature that appear in shaders as one constant buffer. </p> + <p>Refer to Resource Binding in {{HLSL}} for more information on shader registers and spaces. </p><p><strong>{{D3D12_ROOT_CONSTANTS}}</strong> is the data type of the <strong>Constants</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_CONSTANTS}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS}} member of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p> The shader register. </p> </dd> + + + <dd> <p> The register space. </p> </dd> + + + <dd> <p> The number of constants that occupy a single shader slot (these constants appear like a single constant buffer). All constants occupy a single root signature bind slot. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.0 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.0.</p> + <p> A <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> can contain descriptor tables and inline constants. More capable hardware could support inline descriptors in the root signature as well. The number of bind slots in the root signature are most efficient if kept below a certain size, and can have an upper bound as well. </p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p> Describes a static sampler. </p> + <p> Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> The filtering method to use when sampling a texture, as a <strong>{{D3D12_FILTER}}</strong> enumeration constant. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>u</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>v</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Specifies the <strong>{{D3D12_TEXTURE_ADDRESS_MODE}}</strong> mode to use for resolving a <em>w</em> texture coordinate that is outside the 0 to 1 range. </p> </dd> + + + <dd> <p> Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5. </p> </dd> + + + <dd> <p> Clamping value used if {{D3D12_FILTER_ANISOTROPIC}} or {{D3D12_FILTER_COMPARISON_ANISOTROPIC}} is specified as the filter. Valid values are between 1 and 16. </p> </dd> + + + <dd> <p> A function that compares sampled data against existing sampled data. The function options are listed in <strong>{{D3D12_COMPARISON_FUNC}}</strong>. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_STATIC_BORDER_COLOR}}</strong>, the border color to use if {{D3D12_TEXTURE_ADDRESS_MODE_BORDER}} is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive. </p> </dd> + + + <dd> <p> Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. </p> </dd> + + + <dd> <p> Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on {{LOD}} set this to a large value such as {{D3D12_FLOAT32_MAX}}. </p> </dd> + + + <dd> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> parameters correspond to the binding syntax of {{HLSL}}. For example, in {{HLSL:}} </p> <code>Texture2D&lt;float4&gt; a : register(t2, space3);</code> <p> This corresponds to a <em>ShaderRegister</em> of 2 (indicating the type is {{SRV}}), and <em>RegisterSpace</em> is 3. </p> <p> The <em>ShaderRegister</em> and <em>RegisterSpace</em> pair is needed to establish correspondence between shader resources and runtime heap descriptors, using the root signature data structure. </p> </dd> + + + <dd> <p> See the description for <em>ShaderRegister</em>. Register space is optional; the default register space is 0. </p> </dd> + + + <dd> <p> Specifies the visibility of the sampler to the pipeline shaders, one member of <strong>{{D3D12_SHADER_VISIBILITY}}</strong>. </p> </dd> + + + + + <p> Describes the layout of a root signature version 1.0. </p> + <p> This structure is used by the <strong>{{D3D12SerializeRootSignature}}</strong> function and is returned by the <strong>{{ID3D12RootSignatureDeserializer::GetRootSignatureDesc}}</strong> method. </p><p> There is one graphics root signature, and one compute root signature. </p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for the root signature layout. </p> </dd> + + + + + <p>Describes a descriptor range, with flags to determine their volatility.</p> + <p> This structure is a member of the <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure. </p><p>Refer to the helper structure <strong>{{CD3DX12_DESCRIPTOR_RANGE1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_DESCRIPTOR_RANGE_TYPE}}</strong>-typed value that specifies the type of descriptor range. </p> </dd> + + + <dd> <p> The number of descriptors in the range. Use -1 or {{UINT_MAX}} to specify unbounded size. Only the last entry in a table can have unbounded size. </p> </dd> + + + <dd> <p> The base shader register in the range. For example, for shader-resource views ({{SRVs}}), 3 maps to ": register(t3);" in {{HLSL}}. </p> </dd> + + + <dd> <p> The register space. Can typically be 0, but allows multiple descriptor arrays of unknown size to not appear to overlap. For example, for {{SRVs}}, by extending the example in the <strong>BaseShaderRegister</strong> member description, 5 maps to ": register(t3,space5);" in {{HLSL}}. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> that determine descriptor and data volatility.</p> </dd> + + + <dd> <p> The offset in descriptors from the start of the root signature. This value can be <strong>{{D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND}}</strong>, which indicates this range should immediately follow the preceding range.</p> </dd> + + + + + <p> Describes the root signature 1.1 layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> + <p> Samplers are not allowed in the same descriptor table as constant-buffer views ({{CBVs}}), unordered-access views ({{UAVs}}), and shader-resource views ({{SRVs}}). </p><p><strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> is the data type of the <strong>DescriptorTable</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> member to <strong>{{D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR_TABLE1}}</strong>.</p> + + + <dd> <p> The number of descriptor ranges in the table layout. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_DESCRIPTOR_RANGE1}}</strong> structures that describe the descriptor ranges. </p> </dd> + + + + + <p> Describes descriptors inline in the root signature version 1.1 that appear in shaders. </p> + <p><strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> is the data type of the <strong>Descriptor</strong> member of <strong>{{D3D12_ROOT_PARAMETER1}}</strong>. Use a <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> when you set <strong>{{D3D12_ROOT_PARAMETER1}}</strong>'s <strong>SlotType</strong> field to the {{D3D12_ROOT_PARAMETER_TYPE_CBV}}, {{D3D12_ROOT_PARAMETER_TYPE_SRV}}, or {{D3D12_ROOT_PARAMETER_TYPE_UAV}} members of <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>. </p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_DESCRIPTOR1}}</strong>.</p> + + + <dd> <p>The shader register.</p> </dd> + + + <dd> <p>The register space.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> that determine the volatility of descriptors and the data they reference.</p> </dd> + + + + + <p>Describes the slot of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> structure.</p><p>Refer to the helper structure <strong>{{CD3DX12_ROOT_PARAMETER1}}</strong>.</p> + + + <dd> <p> A <strong>{{D3D12_ROOT_PARAMETER_TYPE}}</strong>-typed value that specifies the type of root signature slot. This member determines which type to use in the union below. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR_TABLE1}}</strong> structure that describes the layout of a descriptor table as a collection of descriptor ranges that appear one after the other in a descriptor heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_CONSTANTS}}</strong> structure that describes constants inline in the root signature that appear in shaders as one constant buffer. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_ROOT_DESCRIPTOR1}}</strong> structure that describes descriptors inline in the root signature that appear in shaders. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_SHADER_VISIBILITY}}</strong>-typed value that specifies the shaders that can access the contents of the root signature slot. </p> </dd> + + + + + <p>Describes the layout of a root signature version 1.1.</p> + <p>Use this structure with the <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> + + + <dd> <p> The number of slots in the root signature. This number is also the number of elements in the <em>pParameters</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_ROOT_PARAMETER1}}</strong> structures for the slots in the root signature. </p> </dd> + + + <dd> <p>Specifies the number of static samplers.</p> </dd> + + + <dd> <p> Pointer to one or more <strong>{{D3D12_STATIC_SAMPLER_DESC}}</strong> structures. </p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_ROOT_SIGNATURE_FLAGS}}</strong> that determine the data volatility.</p> </dd> + + + + + <p>Holds any version of a root signature description, and is designed to be used with serialization/deserialization functions.</p> + <p>Use this structure with the following methods.</p><ul> <li> <strong>GetRootSignatureDescAtVersion</strong> </li> <li> <strong>GetUnconvertedRootSignatureDesc</strong> </li> <li> <strong>{{D3D12SerializeVersionedRootSignature}}</strong> </li> </ul><p>Refer to the helper structure <strong>{{CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong>. </p> + + + <dd> <p>Specifies one member of {{D3D_ROOT_SIGNATURE_VERSION}} that determines the contents of the union.</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> (version 1.0).</p> </dd> + + + <dd> <p>Specifies a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> (version 1.1).</p> </dd> + + + + + <p> Describes a {{CPU}} descriptor handle. </p> + <p> This structure is returned by the following methods: </p><ul> <li> <strong>{{ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart}}</strong> </li> </ul><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12Device::CopyDescriptors}}</strong> </li> <li> <strong>{{ID3D12Device::CopyDescriptorsSimple}}</strong> </li> <li> <strong>{{ID3D12Device::CreateConstantBufferView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateUnorderedAccessView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12Device::CreateSampler}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::OMSetRenderTargets}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes a {{GPU}} descriptor handle. </p> + <p> This structure is returned by <strong>{{ID3D12DescriptorHeap::GetGPUDescriptorHandleForHeapStart}}</strong>. </p><p> This structure is passed into the following methods: </p><ul> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList:SetComputeRootDescriptorTable}}</strong> </li> <li> <strong>{{ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable}}</strong> </li> </ul> + + + <dd> <p> The address of the descriptor. </p> </dd> + + + + + <p> Describes details for the discard-resource operation. </p> + <p> This structure is used by the <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> method. </p><p> If rectangles are supplied in this structure, the resource must have 2D subresources with all specified subresources the same dimension. </p> + + + <dd> <p> The number of rectangles in the array that the <strong>pRects</strong> member specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource to discard. If <strong>{{NULL}}</strong>, <strong>DiscardResource</strong> discards the entire resource. </p> </dd> + + + <dd> <p> Index of the first subresource in the resource to discard. </p> </dd> + + + <dd> <p> The number of subresources in the resource to discard. </p> </dd> + + + + + <p> Describes the purpose of a query heap. A query heap contains an array of individual queries. </p> + <p> Use this structure with <strong>CreateQueryHeap</strong>. </p> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the number of queries the heap should contain. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter) to which the query heap applies. Each bit in the mask corresponds to a single node. Only 1 bit must be set. Refer to Multi-Adapter.</p> </dd> + + + + + <p>Query information about graphics-pipeline activity in between calls to <strong>BeginQuery</strong> and <strong>EndQuery</strong>.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + + <p>Describes query data for stream output.</p> + <p>Use this structure with <strong>{{D3D12_QUERY_HEAP_TYPE}}</strong> and <strong>CreateQueryHeap</strong>.</p> + + + <dd> <p>Specifies the number of primitives written.</p> </dd> + + + <dd> <p>Specifies the total amount of storage needed by the primitives.</p> </dd> + + + + + + + + <p>Describes parameters for drawing instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawInstanced</strong>.</p> + + + <dd> <p>Specifies the number of vertices to draw, per instance.</p> </dd> + + + <dd> <p>Specifies the number of instances.</p> </dd> + + + <dd> <p>Specifies an index to the first vertex to start drawing from.</p> </dd> + + + <dd> <p>Specifies an index to the first instance to start drawing from.</p> </dd> + + + + + <p>Describes parameters for drawing indexed instances.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>DrawIndexedInstanced</strong>. </p> + + + <dd> <p>The number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p> The number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Describes dispatch parameters, for use by the compute shader.</p> + <p>The members of this structure serve the same purpose as the parameters of <strong>Dispatch</strong>.</p><p> A compiled compute shader defines the set of instructions to execute per thread and the number of threads to run per group. The thread-group parameters indicate how many thread groups to execute. Each thread group contains the same number of threads, as defined by the compiled compute shader. The thread groups are organized in a three-dimensional grid. The total number of thread groups that the compiled compute shader executes is determined by the following calculation:</p><code>ThreadGroupCountX * ThreadGroupCountY * ThreadGroupCountZ</code><p>In particular, if any of the values in the thread-group parameters are 0, nothing will happen. +</p><p>The maximum size of any dimension is 65535.</p> + + + <dd> <p>The size, in thread groups, of the x-dimension of the thread-group grid. </p> </dd> + + + <dd> <p>The size, in thread groups, of the y-dimension of the thread-group grid.</p> </dd> + + + <dd> <p>The size, in thread groups, of the z-dimension of the thread-group grid. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Describes an indirect argument (an indirect parameter), for use with a command signature. </p> + <p> Use this structure with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> + + + <dd> <p> A single <strong>{{D3D12_INDIRECT_ARGUMENT_TYPE}}</strong> enumeration constant. </p> </dd> + + + <dd> <dl> <dt><strong>Slot</strong></dt> <dd> <p> Specifies the slot containing the vertex buffer address. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the constant. </p> </dd> <dt><strong>DestOffsetIn32BitValues</strong></dt> <dd> <p> The offset, in 32-bit values, to set the first constant of the group. Supports multi-value constants at a given root index. Root constant entries must be sorted from smallest to largest DestOffsetIn32BitValues. </p> </dd> <dt><strong>Num32BitValuesToSet</strong></dt> <dd> <p> The number of 32-bit constants that are set at the given root index. Supports multi-value constants at a given root index. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{CBV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{SRV}}. </p> </dd> </dl> </dd> + + + <dd> <dl> <dt><strong>RootParameterIndex</strong></dt> <dd> <p> Specifies the root index of the {{UAV}}. </p> </dd> </dl> </dd> + + + + + <p> Describes the arguments (parameters) of a command signature. </p> + <p> Use this structure by <strong>CreateCommandSignature</strong>. </p> + + + <dd> <p> Specifies the size of each argument of a command signature, in bytes. </p> </dd> + + + <dd> <p> Specifies the number of arguments in the command signature. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_INDIRECT_ARGUMENT_DESC}}</strong> structures, containing details of the arguments, including whether the argument is a vertex buffer, constant, constant buffer view, shader resource view, or unordered access view. </p> </dd> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters) for which the command signature is to apply. Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + + + <p> Describes subresource data. </p> + <p>This structure is used by a number of the helper functions, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that contains the subresource data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The depth pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p> Describes the destination of a memory copy operation. </p> + <p>This structure is used by a number of helper methods, refer to Helper Structures and Functions for {{D3D12}}.</p> + + + <dd> <p> A reference to a memory block that receives the copied data. </p> </dd> + + + <dd> <p> The row pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + <dd> <p> The slice pitch, or width, or physical size, in bytes, of the subresource data. </p> </dd> + + + + + <p>An interface from which <strong>{{ID3D12Device}}</strong> and <strong>{{ID3D12DeviceChild}}</strong> inherit from. It provides methods to associate private data and annotate object names.</p> + + + + <p>Gets application-defined data from a device object.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> that is associated with the data. </p> </dd> + + + <dd> <p> A reference to a variable that on input contains the size, in bytes, of the buffer that <em>pData</em> points to, and on output contains the size, in bytes, of the amount of data that <strong>GetPrivateData</strong> retrieved. </p> </dd> + + + <dd> <p> A reference to a memory block that receives the data from the device object if <em>pDataSize</em> points to a value that specifies a buffer large enough to hold the data. </p> </dd> + + + + + <p> Sets application-defined data to a device object and associates that data with an application-defined <strong>{{GUID}}</strong>. </p> + <p> Rather than using the Direct3D 11 debug object naming scheme of calling <strong>{{ID3D12Object::SetPrivateData}}</strong> using <strong>{{WKPDID_D3DDebugObjectName}}</strong> with an {{ASCII}} name, call <strong>{{ID3D12Object::SetName}}</strong> with a {{UNICODE}} name. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The <strong>{{GUID}}</strong> to associate with the data. </p> </dd> + + + <dd> <p> The size in bytes of the data. </p> </dd> + + + <dd> <p> A reference to a memory block that contains the data to be stored with this device object. If <em>pData</em> is <strong>{{NULL}}</strong>, <em>DataSize</em> must also be 0, and any data that was previously associated with the <strong>{{GUID}}</strong> specified in <em>guid</em> will be destroyed. </p> </dd> + + + + + <p> Associates an <strong>{{IUnknown}}</strong>-derived interface with the device object and associates that interface with an application-defined <strong>{{GUID}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Associates a name with the device object. This name is for use in debug diagnostics and tools. </p> + <p> This method takes {{UNICODE}} names. The older Direct3D 11 debug object naming system through <strong>{{ID3D12Object::SetPrivateData}}</strong> with <strong>{{WKPDID_D3DDebugObjectName}}</strong> used {{ASCII}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the device object. </p> </dd> + + + + + <p>An interface from which other core interfaces inherit from, including <strong>{{ID3D12PipelineLibrary}}</strong>, <strong>{{ID3D12CommandList}}</strong>, <strong>{{ID3D12Pageable}}</strong>, and <strong>{{ID3D12RootSignature}}</strong>. It provides a method to get back to the device object it was created against.</p> + + + + <p>Gets a reference to the device that created this interface. </p> + <p> Any returned interfaces have their reference count incremented by one, so be sure to call ::release() on the returned references before they are freed or else you will have a memory leak. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the device interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the device can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Device}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a device. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12Device}}</strong> interface for the device. </p> </dd> + + + + + <p>The root signature defines what resources are bound to the graphics pipeline. A root signature is configured by the app and links command lists to the resources the shaders require. Currently, there is one graphics and one compute root signature per app.</p> + + + + <p>Contains a method to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> data structure, of a serialized root signature version 1.0. </p> + <p>This interface has been superceded by <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>.</p> + + + + <p> Gets the layout of the root signature. </p> + <p> This method returns a deserialized root signature in a <strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature. </p> + + + + <p>Contains methods to return the deserialized <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, of any version of a serialized root signature. </p> + <p>This interface supercedes <strong>{{ID3D12RootSignatureDeserializer}}</strong>.</p> + + + + <p>Converts root signature description structures to a requested version.</p> + <p>This method allocates additional storage if needed for the converted root signature (memory owned by the deserializer interface). If conversion is done, the deserializer interface doesn?t free the original deserialized root signature memory ? all versions the interface has been asked to convert to are available until the deserializer is destroyed. </p><p>Converting a root signature from 1.1 to 1.0 will drop all <strong>{{D3D12_DESCRIPTOR_RANGE_FLAGS}}</strong> and <strong>{{D3D12_ROOT_DESCRIPTOR_FLAGS}}</strong> can be useful for generating compatible root signatures that need to run on old operating systems, though does lose optimization opportunities. For instance, multiple root signature versions can be serialized and stored with application assets, with the appropriate version used at runtime based on the operating system capabilities. </p><p>Converting a root signature from 1.0 to 1.1 just adds the appropriate flags to match 1.0 semantics.</p> + <p>This method returns an {{HRESULT}} success or error code. The method can fail with {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>Specifies the required <strong>{{D3D_ROOT_SIGNATURE_VERSION}}</strong>.</p> </dd> + + + <dd> <p>Contains the deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure.</p> </dd> + + + + + <p> Gets the layout of the root signature, without converting between root signature versions. </p> + <p>This method returns a deserialized root signature in a <strong>{{D3D12_VERSIONED_ROOT_SIGNATURE_DESC}}</strong> structure that describes the layout of the root signature.</p> + + + + <p>An interface from which many other core interfaces inherit from. It indicates that the object type encapsulates some amount of {{GPU}}-accessible memory; but does not strongly indicate whether the application can manipulate the object's residency. </p> + <p>For more details, refer to Memory Management in Direct3D 12 and the <strong>MakeResident</strong> method reference. +</p> + + + + <p>A heap is an abstraction of contiguous memory allocation, used to manage physical memory. This heap can be used with <strong>{{ID3D12Resource}}</strong> objects to support placed resources or reserved resources.</p> + + + + <p>Gets the heap description.</p> + <p>Returns the <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap.</p> + + + + + + + + + + <p>Invalidates the {{CPU}} reference to the specified subresource in the resource. <strong>Unmap</strong> also flushes the {{CPU}} cache, when necessary, so that {{GPU}} reads to this address reflect any modifications made by the {{CPU}}. +</p> + <p>Refer to the extensive Remarks and Examples for the <strong>Map</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the index of the subresource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RANGE}}</strong> structure that describes the range of memory to unmap.</p> <p>This indicates the region the {{CPU}} might have modified, and the coordinates are subresource-relative. A null reference indicates the entire subresource might have been modified by the {{CPU}}. It is valid to specify the {{CPU}} didn't write any data by passing a range where <strong>End</strong> is less than or equal to <strong>Begin</strong>.</p> </dd> + + + + + <p>Gets the resource description.</p> + <p>A Direct3D 12 resource description structure.</p> + + + + <p> This method returns the {{GPU}} virtual address of a buffer resource. </p> + <p>This method is only useful for buffer resources, it will return zero for all texture resources.</p><p> For more information on the use of {{GPU}} virtual addresses, refer to Indirect Drawing. </p> + <p> This method returns the {{GPU}} virtual address. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd synonym of {{UINT64}}. </p> + + + + <p>Uses the {{CPU}} to copy data into a subresource, enabling the {{CPU}} to modify the contents of most textures with undefined layouts.</p> + <p>The resource should first be mapped using <strong>Map</strong>. Textures must be in the <strong>{{D3D12_RESOURCE_STATE_COMMON}}</strong> state for {{CPU}} access through <strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> to be legal; but buffers do not.</p><p> For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned. </p><p> When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines. </p><p><strong>WriteToSubresource</strong> and <strong>ReadFromSubresource</strong> enable near zero-copy optimizations for {{UMA}} adapters, but can prohibitively impair the efficiency of discrete/ {{NUMA}} adapters as the texture data cannot reside in local video memory. Typical applications should stick to discrete-friendly upload techniques, unless they recognize the adapter architecture is {{UMA}}. For more details on uploading, refer to <strong>CopyTextureRegion</strong>, and for more details on {{UMA}}, refer to <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>. </p><p>On {{UMA}} systems, this routine can be used to minimize the cost of memory copying through the loop optimization known as loop tiling. By breaking up the upload into chucks that comfortably fit in the {{CPU}} cache, the effective bandwidth between the {{CPU}} and main memory more closely achieves theoretical maximums. +</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the index of the subresource. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data into. If {{NULL}}, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + <dd> <p> A reference to the source data in memory. </p> </dd> + + + <dd> <p>The distance from one row of source data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of source data to the next. </p> </dd> + + + + + <p> Uses the {{CPU}} to copy data from a subresource, enabling the {{CPU}} to read the contents of most textures with undefined layouts. </p> + <p> See the Remarks section for <strong>WriteToSubresource</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the destination data in memory. </p> </dd> + + + <dd> <p> The distance from one row of destination data to the next row. </p> </dd> + + + <dd> <p> The distance from one depth slice of destination data to the next. </p> </dd> + + + <dd> <p> Specifies the index of the subresource to read from. </p> </dd> + + + <dd> <p> A reference to a box that defines the portion of the destination subresource to copy the resource data from. If {{NULL}}, the data is read from the destination subresource with no offset. The dimensions of the destination must fit the destination (see <strong>{{D3D12_BOX}}</strong>). </p> <p> An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, this method doesn't perform any operation. </p> </dd> + + + + + <p> Retrieves the properties of the resource heap, for placed and committed resources. </p> + <p> This method only works on placed and committed resources, not on reserved resources. If the resource was created as reserved, {{E_INVALIDARG}} is returned. The pages could be mapped to none, one, or more heaps. </p><p> For more information, refer to Memory Management in Direct3D 12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. If the resource was created as reserved, {{E_INVALIDARG}} is returned. </p> + + + <dd> <p> Pointer to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure, that on successful completion of the method will contain the resource heap properties. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_HEAP_FLAGS}}</strong> variable, that on successful completion of the method will contain any miscellaneous heap flags. </p> </dd> + + + + + <p>Represents the allocations of storage for graphics processing unit ({{GPU}}) commands.</p> + <p>Use <strong>{{ID3D12Device::CreateCommandAllocator}}</strong> to create a command allocator object. </p><p>The command allocator object corresponds to the underlying allocations in which {{GPU}} commands are stored. The command allocator object applies to both direct command lists and bundles. You must use a command allocator object in a DirectX 12 app.</p> + + + + <p>Indicates to re-use the memory that is associated with the command allocator.</p> + <p>Apps call <strong>Reset</strong> to re-use the memory that is associated with a command allocator. From this call to <strong>Reset</strong>, the runtime and driver determine that the graphics processing unit ({{GPU}}) is no longer executing any command lists that have recorded commands with the command allocator.</p><p>Unlike <strong>{{ID3D12GraphicsCommandList::Reset}}</strong>, it is not recommended that you call <strong>Reset</strong> on the command allocator while a command list is still being executed. </p><p>The debug layer will issue a warning if it can't prove that there are no pending {{GPU}} references to command lists that have recorded commands in the allocator.</p><p>The debug layer will issue an error if <strong>Reset</strong> is called concurrently by multiple threads (on the same allocator object).</p> + <p>This method returns <strong>{{E_FAIL}}</strong> if there is an actively recording command list referencing the command allocator. The debug layer will also issue an error in this case. See Direct3D 12 Return Codes for other possible return values.</p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + <p>Gets the current value of the fence.</p> + <p>Returns the current value of the fence. </p> + + + + + + + <p>Sets the fence to the specified value.</p> + <p>Use this method to set a fence value from the {{CPU}} side. Use <strong>{{ID3D12CommandQueue::Signal}}</strong> to set a fence from the {{GPU}} side.</p> + <p>This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>The value to set the fence to.</p> </dd> + + + + + <p>Represents the state of all currently set shaders as well as certain fixed function state objects.</p> + <p>Use <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> or <strong>{{ID3D12Device::CreateComputePipelineState}}</strong> to create a pipeline state object ({{PSO}}). </p><p>A pipeline state object corresponds to a significant portion of the state of the graphics processing unit ({{GPU}}). This state includes all currently set shaders and certain fixed function state objects. The only way to change states contained within the pipeline object is to change the currently bound pipeline object.</p> + + + + <p> Gets the cached blob representing the pipeline state. </p> + <p>Refer to the remarks for <strong>{{D3D12_CACHED_PIPELINE_STATE}}</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> After this method returns, points to the cached blob representing the pipeline state. </p> </dd> + + + + + <p>A descriptor heap is a collection of contiguous allocations of descriptors, one allocation for every descriptor. Descriptor heaps contain many object types that are not part of a Pipeline State Object ({{PSO}}), such as Shader Resource Views ({{SRVs}}), Unordered Access Views ({{UAVs}}), Constant Buffer Views ({{CBVs}}), and Samplers.</p> + + + + <p> Gets the descriptor heap description. </p> + <p> The description of the descriptor heap, as a <strong>{{D3D12_DESCRIPTOR_HEAP_DESC}}</strong> structure. </p> + + + + <p>Gets the {{CPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{CPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Gets the {{GPU}} descriptor handle that represents the start of the heap.</p> + <p>Returns the {{GPU}} descriptor handle that represents the start of the heap.</p> + + + + <p>Manages a query heap. A query heap holds an array of queries, referenced by indexes.</p> + <p>For more information, refer to Queries.</p> + + + + <p> A command signature object enables apps to specify indirect drawing, including the buffer format, command type and resource bindings to be used.</p> + <p> To create a command signature, call <strong>{{ID3D12Device::CreateCommandSignature}}</strong>, as described in Indirect Drawing. </p> + + + + + + + <p> Gets the type of the command list, such as direct, bundle, compute, or copy. </p> + <p> This method returns the type of the command list, as a <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong> enumeration constant, such as direct, bundle, compute, or copy. </p> + + + + + + + <p> Indicates that recording to the command list has finished. </p> + <p> The runtime will validate that the command list has not previously been closed. If an error was encountered during recording, the error code is returned here. The runtime won't call the close device driver interface ({{DDI}}) in this case. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list has already been closed, or an invalid {{API}} was called during command list recording. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory during recording. </li> <li><strong>{{E_INVALIDARG}}</strong> if an invalid argument was passed to the command list {{API}} during recording. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + + <p> Resets a command list back to its initial state as if a new command list was just created. </p> + <p> By using <strong>Reset</strong>, you can re-use command list tracking structures without any allocations. Unlike <strong>{{ID3D12CommandAllocator::Reset}}</strong>, you can call <strong>Reset</strong> while the command list is still being executed. A typical pattern is to submit a command list and then immediately reset it to reuse the allocated memory for another command list. </p><p> You can use <strong>Reset</strong> for both direct command lists and bundles. </p><p> The command allocator that <strong>Reset</strong> takes as input can be associated with no more than one recording command list at a time. The allocator type, direct command list or bundle, must match the type of command list that is being created. </p><p> If a bundle doesn't specify a resource heap, it can't make changes to which descriptor tables are bound. Either way, bundles can't change the resource heap within the bundle. If a heap is specified for a bundle, the heap must match the calling 'parent' command list?s heap. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values: </p><ul> <li><strong>{{E_FAIL}}</strong> if the command list was not in the "closed" state when the <strong>Reset</strong> call was made, or the per-device limit would have been exceeded. </li> <li><strong>{{E_OUTOFMEMORY}}</strong> if the operating system ran out of memory. </li> <li><strong>{{E_INVALIDARG}}</strong> if the allocator is currently being used with another command list in the "recording" state or if the specified allocator was created with the wrong type. </li> </ul><p> See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12CommandAllocator}}</strong> object that the device creates command lists from. </p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. This is optional and can be {{NULL}}. If {{NULL}}, the runtime sets a dummy initial pipeline state so that drivers don't have to deal with undefined state. The overhead for this is low, particularly for a command list, for which the overall cost of recording the command list likely dwarfs the cost of one initial state setting. So there is little cost in not setting the initial pipeline state parameter if it isn't convenient. </p> <p>For bundles on the other hand, it might make more sense to try to set the initial state parameter since bundles are likely smaller overall and can be reused frequently.</p> </dd> + + + + + <p>Resets the state of a direct command list back to the state it was in when the command list was created. </p> + <p> It is invalid to call <strong>ClearState</strong> on a bundle. If an app calls <strong>ClearState</strong> on a bundle, the call to <strong>Close</strong> will return <strong>{{E_FAIL}}</strong>. </p><p> When <strong>ClearState</strong> is called, all currently bound resources are unbound. The primitive topology is set to <strong>{{D3D_PRIMITIVE_TOPOLOGY_UNDEFINED}}</strong>. Viewports, scissor rectangles, stencil reference value, and the blend factor are set to empty values (all zeros). Predication is disabled. </p><p> The app-provided pipeline state object becomes bound as the currently set pipeline state object. </p> + <p> Returns nothing. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12PipelineState}}</strong> object that contains the initial pipeline state for the command list. </p> </dd> + + + + + <p> Draws non-indexed, instanced primitives. </p> + <p> A draw {{API}} submits work to the rendering pipeline. </p><p> Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. </p><p> The vertex data for an instanced draw call typically comes from a vertex buffer that is bound to the pipeline. But, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic ({{SV_InstanceID}}). </p> + <p>Returns nothing</p> + + + <dd> <p> Number of vertices to draw. </p> </dd> + + + <dd> <p> Number of instances to draw. </p> </dd> + + + <dd> <p> Index of the first vertex. </p> </dd> + + + <dd> <p> A value added to each index before reading per-instance data from a vertex buffer. </p> </dd> + + + + + <p> Draws indexed, instanced primitives. </p> + <p>A draw {{API}} submits work to the rendering pipeline.</p><p>Instancing might extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.</p> + <p>Returns nothing.</p> + + + <dd> <p>Number of indices read from the index buffer for each instance.</p> </dd> + + + <dd> <p>Number of instances to draw.</p> </dd> + + + <dd> <p>The location of the first index read by the {{GPU}} from the index buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading a vertex from the vertex buffer.</p> </dd> + + + <dd> <p>A value added to each index before reading per-instance data from a vertex buffer.</p> </dd> + + + + + <p>Executes a command list from a thread group.</p> + <p> You call the <strong>Dispatch</strong> method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z). </p> + <p>Returns nothing.</p> + + + <dd> <p> The number of groups dispatched in the x direction. <em>ThreadGroupCountX</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the y direction. <em>ThreadGroupCountY</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). </p> </dd> + + + <dd> <p> The number of groups dispatched in the z direction. <em>ThreadGroupCountZ</em> must be less than or equal to {{D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION}} (65535). In feature level 10 the value for <em>ThreadGroupCountZ</em> must be 1. </p> </dd> + + + + + <p> Copies a region of a buffer from one resource to another. </p> + <p> Consider using the <strong>CopyResource</strong> method when copying an entire resource, and use this method for copying regions of a resource. </p><p><strong>CopyBufferRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the destination <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the destination resource. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} offset (in bytes) into the source resource, to start the copy from. </p> </dd> + + + <dd> <p> Specifies the number of bytes to copy. </p> </dd> + + + + + <p> This method uses the {{GPU}} to copy texture data between two locations. Both the source and the destination may reference texture data located within either a buffer resource or a texture resource.</p> + <p> The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of <strong>CopyTextureRegion</strong> is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid <strong>CopyTextureRegion</strong> call. Invalid parameters to <strong>CopyTextureRegion</strong> cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device. </p><p>If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. </p><p><strong>CopyTextureRegion</strong> performs the copy on the {{GPU}} (similar to a <code>memcpy</code> by the {{CPU}}). As a consequence, the source and destination resources: </p><ul> <li>Must be different subresources (although they can be from the same resource).</li> <li>Must have compatible <strong>{{DXGI_FORMAT}}</strong>s (identical or from the same type group). For example, a {{DXGI_FORMAT_R32G32B32_FLOAT}} texture can be copied to an {{DXGI_FORMAT_R32G32B32_UINT}} texture since both of these formats are in the {{DXGI_FORMAT_R32G32B32_TYPELESS}} group. <strong>CopyTextureRegion</strong> can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.</li> </ul><p><strong>CopyTextureRegion</strong> only supports copy; it does not support any stretch, color key, or blend. <strong>CopyTextureRegion</strong> can reinterpret the resource data between a few format types. </p><p> If your app needs to copy an entire resource, we recommend to use <strong>CopyResource</strong> instead. </p><strong>Note</strong>?? If you use <strong>CopyTextureRegion</strong> with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the <em>DstX</em>, <em>DstY</em>, and <em>DstZ</em> parameters and <strong>{{NULL}}</strong> to the <em>pSrcBox</em> parameter. In addition, source and destination resources, which are represented by the <em>pSrcResource</em> and <em>pDstResource</em> parameters, should have identical sample count values.?<p><strong>CopyTextureRegion</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p>Specifies the destination <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. +</p> </dd> + + + <dd> <p> The x-coordinate of the upper left corner of the destination region. </p> </dd> + + + <dd> <p> The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero. </p> </dd> + + + <dd> <p> The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. </p> </dd> + + + <dd> <p> Specifies the source <strong>{{D3D12_TEXTURE_COPY_LOCATION}}</strong>. The subresource referred to must be in the {{D3D12_RESOURCE_STATE_COPY_SOURCE}} state.</p> </dd> + + + <dd> <p> Specifies an optional {{D3D12_BOX}} that sets the size of the source texture to copy. </p> </dd> + + + + + + + + <p> Copies tiles from buffer to tiled resource or vice versa. </p> + <p><strong>CopyTiles</strong> drops write operations to unmapped areas and handles read operations from unmapped areas (except on Tier_1 tiled resources, where reading and writing unmapped areas is invalid - refer to <strong>{{D3D12_TILED_RESOURCES_TIER}}</strong>). </p><p>If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation. </p><p> The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy {{APIs}} like <strong>CopyTextureRegion</strong>.</p><p><strong>CopyTiles</strong> does copy data in a slightly different pattern than the standard copy methods.</p><p> The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 {{KB}} tiles, which the hardware and driver swizzle and de-swizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing ({{MSAA}}) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use <strong>CopyTiles</strong> to copy to mipmaps that the hardware packs together. You can just use generic copy {{APIs}}, like <strong>CopyTextureRegion</strong>, to copy small mipmaps individually.</p> + <p> This method does not return a value. </p> + + + <dd> <p>A reference to a tiled resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the tiled region. </p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3D12Resource}}</strong> that represents a default, dynamic, or staging buffer. </p> </dd> + + + <dd> <p> The offset in bytes into the buffer at <em>pBuffer</em> to start the operation. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_COPY_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation and that identifies how to copy tiles. </p> </dd> + + + + + <p>Copy a multi-sampled resource into a non-multi-sampled resource.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Destination resource. Must be a created with the <strong>{{D3D11_USAGE_DEFAULT}}</strong> flag and be single-sampled. See <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> A zero-based index, that identifies the destination subresource. Use <strong>{{D3D12CalcSubresource}}</strong> to calculate the subresource index if the parent resource is complex. </p> </dd> + + + <dd> <p> Source resource. Must be multisampled. </p> </dd> + + + <dd> <p> The source subresource of the source resource. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong> that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. </p> </dd> + + + + + <p>Bind information about the primitive type, and data order that describes input data for the input assembler stage.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The type of primitive and ordering of the primitive data (see <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>). </p> </dd> + + + + + <p> Bind an array of viewports to the rasterizer stage of the pipeline. </p> + <p> All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled. </p><p> Which viewport to use is determined by the {{SV_ViewportArrayIndex}} semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array. </p><strong>Note</strong>?? Even though you specify float values to the members of the <strong>{{D3D12_VIEWPORT}}</strong> structure for the <em>pViewports</em> array in a call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x, <strong>{{RSSetViewports}}</strong> uses {{DWORDs}} internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to <strong>{{RSSetViewports}}</strong> for feature levels 9_x fails. This failure occurs because <strong>{{RSSetViewports}}</strong> for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? + <p> This method does not return a value. </p> + + + <dd> <p> Number of viewports to bind. The range of valid values is (0, {{D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE}}). </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_VIEWPORT}}</strong> structures to bind to the device. </p> </dd> + + + + + + + + <p>Sets the blend factor that modulate values for a pixel shader, render target, or both.</p> + <p> If you created the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage uses the non-{{NULL}} array of blend factors. </p><p> If you didn't create the blend-state object with {{D3D11_BLEND_BLEND_FACTOR}} or {{D3D11_BLEND_INV_BLEND_FACTOR}}, the blending stage does not use the non-{{NULL}} array of blend factors; the runtime stores the blend factors. </p><p> If you pass {{NULL}}, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }. </p><p> {{D3D11_BLEND_BLEND_FACTOR}} and {{D3D11_BLEND_INV_BLEND_FACTOR}} are <strong>{{D3D12_BLEND}}</strong> enumeration constants. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Array of blend factors, one for each {{RGBA}} component. </p> </dd> + + + + + <p>Sets the reference value for depth stencil tests.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Reference value to perform against when doing a depth-stencil test. </p> </dd> + + + + + <p> Sets all shaders and programs most of the fixed-function state of the graphics processing unit ({{GPU}}) pipeline. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Pointer to the <strong>{{ID3D12PipelineState}}</strong> containing the pipeline state data. </p> </dd> + + + + + <p> Notifies the driver that it needs to synchronize multiple accesses to resources. </p> + <p>There are three types of barrier descriptions:</p><ul> <li> <strong>{{D3D12_RESOURCE_TRANSITION_BARRIER}}</strong> - Transition barriers indicate that a set of subresources transition between different usages. The caller must specify the <em>before</em> and <em>after</em> usages of the subresources. The {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}} flag is used to transition all subresources in a resource at the same time. </li> <li> <strong>{{D3D12_RESOURCE_ALIASING_BARRIER}}</strong> - Aliasing barriers indicate a transition between usages of two different resources which have mappings into the same heap. The application can specify both the before and the after resource. Note that one or both resources can be {{NULL}} (indicating that any tiled resource could cause aliasing). </li> <li> <strong>{{D3D12_RESOURCE_UAV_BARRIER}}</strong> - Unordered access view barriers indicate all {{UAV}} accesses (read or writes) to a particular resource must complete before any future {{UAV}} accesses (read or write) can begin. The specified resource may be {{NULL}}. It is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which only read a {{UAV}}. Additionally, it is not necessary to insert a {{UAV}} barrier between two draw or dispatch calls which write to the same {{UAV}} if the application knows that it is safe to execute the {{UAV}} accesses in any order. The resource can be {{NULL}} (indicating that any {{UAV}} access could require the barrier). </li> </ul><p> When <strong>{{ID3D12GraphicsCommandList::ResourceBarrier}}</strong> is passed an array of resource barrier descriptions, the {{API}} behaves as if it was called N times (1 for each array element), in the specified order. Transitions should be batched together into a single {{API}} call when possible, as a performance optimization.</p><p> For descriptions of the usage states a subresource can be in, see the <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration and the Using Resource Barriers to Synchronize Resource States in Direct3D 12 section. </p><p> All subresources in a resource must be in the {{RENDER_TARGET}} state, or {{DEPTH_WRITE}} state, for render targets/depth-stencil resources respectively, when <strong>{{ID3D12GraphicsCommandList::DiscardResource}}</strong> is called. </p><p> When a back buffer is presented, it must be in the {{D3D12_RESOURCE_STATE_PRESENT}} state. If <strong>{{IDXGISwapChain1::Present1}}</strong> is called on a resource which is not in the {{PRESENT}} state, a debug layer warning will be emitted. </p><p>The resource usage bits are group into two categories, read-only and read/write.</p><p> The following usage bits are read-only: </p><ul> <li>{{D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_INDEX_BUFFER}}</li> <li>{{D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}}</li> <li>{{D3D12_RESOURCE_STATE_COPY_SOURCE}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_READ}}</li> </ul><p>The following usage bits are read/write:</p><ul> <li>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</li> <li>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</li> </ul><p>The following usage bits are write-only:</p><ul> <li>{{D3D12_RESOURCE_STATE_COPY_DEST}}</li> <li>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</li> <li>{{D3D12_RESOURCE_STATE_STREAM_OUT}}</li> </ul><p> At most one write bit can be set. If any write bit is set, then no read bit may be set. If no write bit is set, then any number of read bits may be set. </p><p> At any given time, a subresource is in exactly one state (determined by a set of flags). The application must ensure that the states are matched when making a sequence of <strong>ResourceBarrier</strong> calls. In other words, the before and after states in consecutive calls to <strong>ResourceBarrier</strong> must agree. </p><p>To transition all subresources within a resource, the application can set the subresource index to {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}, which implies that all subresources are changed.</p><p> For improved performance, applications should use split barriers (refer to Synchronization and Multi-Engine). Applications should also batch multiple transitions into a single call whenever possible. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of submitted barrier descriptions. </p> </dd> + + + <dd> <p> Pointer to an array of barrier descriptions. </p> </dd> + + + + + <p> Executes a bundle. </p> + <p> Bundles inherit all state from the parent command list on which <strong>ExecuteBundle</strong> is called, except the pipeline state object and primitive topology. All of the state that is set in a bundle will affect the state of the parent command list. Note that <strong>ExecuteBundle</strong> is not a predicated operation. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12GraphicsCommandList}}</strong> that determines the bundle to be executed. </p> </dd> + + + + + <p> Changes the currently bound descriptor heaps that are associated with a command list. </p> + <p><strong>SetDescriptorHeaps</strong> can be called on a bundle, but the bundle descriptor heaps must match the calling command list descriptor heap. For more information on bundle restrictions, refer to Creating and Recording Command Lists and Bundles.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Number of descriptor heaps to bind. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{ID3D12DescriptorHeap}}</strong> objects for the heaps to set on the command list. </p> </dd> + + + + + <p> Sets the layout of the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets the layout of the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12RootSignature}}</strong> object. </p> </dd> + + + + + <p> Sets a descriptor table into the compute root signature.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a descriptor table into the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> A {{GPU_descriptor_handle}} object for the base descriptor to set. </p> </dd> + + + + + <p> Sets a constant in the compute root signature. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a constant in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The source data for the constant to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the constant in the root signature. </p> </dd> + + + + + <p> Sets a group of constants in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p>The slot number for binding.</p> </dd> + + + <dd> <p>The number of constants to set in the root signature.</p> </dd> + + + <dd> <p>The source data for the group of constants to set.</p> </dd> + + + <dd> <p>The offset, in 32-bit values, to set the first constant of the group in the root signature.</p> </dd> + + + + + <p> Sets a group of constants in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The number of constants to set in the root signature. </p> </dd> + + + <dd> <p> The source data for the group of constants to set. </p> </dd> + + + <dd> <p> The offset, in 32-bit values, to set the first constant of the group in the root signature. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> Specifies the {{D3D12_GPU_VIRTUAL_ADDRESS}} of the constant buffer. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the constant buffer in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the constant buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the shader resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the Buffer. Textures are not supported. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the compute root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets a {{CPU}} descriptor handle for the unordered-access-view resource in the graphics root signature. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The slot number for binding. </p> </dd> + + + <dd> <p> The {{GPU}} virtual address of the buffer. {{D3D12_GPU_VIRTUAL_ADDRESS}} is a typedef'd alias of {{UINT64}}. </p> </dd> + + + + + <p> Sets the view for the index buffer. </p> + <p>Only one index buffer can be bound to the graphics pipeline at any one time.</p> + <p> This method does not return a value. </p> + + + <dd> <p> The view specifies the index buffer's address, size, and <strong>{{DXGI_FORMAT}}</strong>, as a reference to a <strong>{{D3D12_INDEX_BUFFER_VIEW}}</strong> structure. </p> </dd> + + + + + <p>Sets a {{CPU}} descriptor handle for the vertex buffers.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting vertex buffers. </p> </dd> + + + <dd> <p> The number of views in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies the vertex buffer views in an array of <strong>{{D3D12_VERTEX_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets the stream output buffer views. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Index into the device's zero-based array to begin setting stream output buffers. </p> </dd> + + + <dd> <p> The number of entries in the <em>pViews</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_STREAM_OUTPUT_BUFFER_VIEW}}</strong> structures. </p> </dd> + + + + + <p> Sets {{CPU}} descriptor handles for the render targets and depth stencil. </p> + <p> This method does not return a value. </p> + + + <dd> <p> The number of entries in the <em>pRenderTargetDescriptors</em> array. </p> </dd> + + + <dd> <p> Specifies an array of <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structures that describe the {{CPU}} descriptor handles that represents the start of the heap of render target descriptors. </p> </dd> + + + <dd> <p><strong>True</strong> means the handle passed in is the reference to a contiguous range of <em>NumRenderTargetDescriptors</em> descriptors. This case is useful if the set of descriptors to bind already happens to be contiguous in memory (so all that?s needed is a handle to the first one). For example, if <em>NumRenderTargetDescriptors</em> is 3 then the memory layout is taken as follows:</p><p>In this case the driver dereferences the handle and then increments the memory being pointed to.</p> <p><strong>False</strong> means that the handle is the first of an array of <em>NumRenderTargetDescriptors</em> handles. The false case allows an application to bind a set of descriptors from different locations at once. Again assuming that <em>NumRenderTargetDescriptors</em> is 3, the memory layout is taken as follows:</p><p>In this case the driver dereferences three handles that are expected to be adjacent to each other in memory.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap that holds the depth stencil descriptor. </p> </dd> + + + + + <p>Clears the depth-stencil resource.</p> + <p><strong>ClearDepthStencilView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> Returns nothing. </p> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the depth stencil to be cleared. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_CLEAR_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. The resulting value identifies the type of data to clear (depth buffer, stencil buffer, or both). </p> </dd> + + + <dd> <p> A value to clear the depth buffer with. This value will be clamped between 0 and 1. </p> </dd> + + + <dd> <p> A value to clear the stencil buffer with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearDepthStencilView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a render target to one value. </p> + <p><strong>ClearRenderTargetView</strong> may be used to initialize resources which alias the same heap memory. See <strong>CreatePlacedResource</strong> for more details.</p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a {{D3D12_CPU_DESCRIPTOR_HANDLE}} structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to be cleared. </p> </dd> + + + <dd> <p> A 4-component array that represents the color to fill the render target with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearRenderTargetView</strong> clears the entire resource view. </p> </dd> + + + + + <p> Sets all the elements in a unordered-access view to the specified integer values. </p> + + <p> This method does not return a value. </p> + + + <dd> <p> A <strong>{{D3D12_GPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_CPU_DESCRIPTOR_HANDLE}}</strong> structure that describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewUint</strong> clears the entire resource view. </p> </dd> + + + + + <p>Sets all the elements in a unordered access view to the specified float values.</p> + + <p> This method does not return a value. </p> + + + <dd> <p> Describes the {{GPU}} descriptor handle that represents the start of the heap for the unordered-access view to clear. </p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap for the render target to clear. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface that represents the unordered-access-view resource to clear. </p> </dd> + + + <dd> <p> A 4-component array that containing the values to fill the unordered-access-view resource with. </p> </dd> + + + <dd> <p> The number of rectangles in the array that the <em>pRects</em> parameter specifies. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RECT}}</strong> structures for the rectangles in the resource view to clear. If <strong>{{NULL}}</strong>, <strong>ClearUnorderedAccessViewFloat</strong> clears the entire resource view. </p> </dd> + + + + + <p>Discards a resource.</p> + <p>The semantics of <strong>DiscardResource</strong> change based on the command list type.</p><p> For <strong>{{D3D12_COMMAND_LIST_TYPE_DIRECT}}</strong>, the following two rules apply: +</p><ul> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}}</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_RENDER_TARGET}}</strong> resource barrier state.</li> <li>When a resource has the <strong>{{D3D12_RESOURCE_FLAG}} _ALLOW_DEPTH_STENCIL</strong> flag, <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_DEPTH_WRITE}}</strong>. +</li> </ul><p>For <strong>{{D3D12_COMMAND_LIST_TYPE_COMPUTE}}</strong>, the following rule applies: +</p><ul> <li>The resource must have the <strong>{{D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS}}</strong> flag, and <strong>DiscardResource</strong> must be called when the discarded subresource regions are in the <strong>{{D3D12_RESOURCE_STATE_UNORDERED_ACCESS}}</strong> resource barrier state.</li> </ul><p><strong>DiscardResource</strong> is not supported on command lists with either <strong>{{D3D12_COMMAND_LIST_TYPE_BUNDLE}}</strong> nor <strong>{{D3D12_COMMAND_LIST_TYPE_COPY}}</strong>.</p> + <p> This method does not return a value. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Resource}}</strong> interface for the resource to discard. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_DISCARD_REGION}}</strong> structure that describes details for the discard-resource operation. </p> </dd> + + + + + <p>Starts a query running.</p> + <p> In Direct3D 12, the usage of queries is more restricted than Direct3D 11. The following scenarios are no longer supported: </p><ul> <li> A call to <strong>BeginQuery</strong> followed by another call to <strong>BeginQuery</strong> without an intervening call to <strong>EndQuery</strong>. </li> <li> A call to <strong>EndQuery</strong> followed by <strong>EndQuery</strong> without an intervening call to <strong>BeginQuery</strong>. </li> </ul><p> Given these restrictions, there are 3 states that a query can be in: </p><ul> <li>Inactive (this is the initial state of all queries)</li> <li>Querying</li> <li>Predicating</li> </ul><p><strong>BeginQuery</strong> transitions a query from the inactive state to the querying state. <strong>EndQuery</strong> transitions a query from the querying state to the inactive state. <strong>SetPredication</strong> transitions the previous set query from the predicating state to the inactive state and transitions the newly set query from the inactive state to the predicating state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query within the query heap. </p> </dd> + + + + + <p> Ends a running query. </p> + <p> Refer to the remarks for <strong>BeginQuery</strong>, and to Queries. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the query. </p> </dd> + + + <dd> <p> Specifies one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies the index of the query in the query heap. </p> </dd> + + + + + <p> </p><p> Extracts data from a query. <strong>ResolveQueryData</strong> works with all heap types (default, upload, and readback).? </p> + <p><strong>ResolveQueryData</strong> performs a batched operation which writes query data into a destination buffer. Query data is written contiguously to the destination buffer, and the parameter. </p><p> Binary occlusion queries write 64-bits per query. The least significant bit is either 0 or 1. The rest of the bits are 0. </p><p>The core runtime will validate the following:</p><ul> <li><em>StartIndex</em> and <em>NumQueries</em> are within range. </li> <li><em>AlignedDestinationBufferOffset</em> is a multiple of 8 bytes. </li> <li><em>DestinationBuffer</em> is a buffer. </li> <li> The written data will not overflow the output buffer. </li> <li> The query type must be supported by the command list type. </li> <li> The query type must be supported by the query heap. </li> </ul><p> The debug layer will issue a warning if the destination buffer is not in the {{D3D12_RESOURCE_STATE_COPY_DEST}} state. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12QueryHeap}}</strong> containing the queries to resolve. </p> </dd> + + + <dd> <p> Specifies the type of query, one member of <strong>{{D3D12_QUERY_TYPE}}</strong>. </p> </dd> + + + <dd> <p> Specifies an index of the first query to resolve. </p> </dd> + + + <dd> <p> Specifies the number of queries to resolve. </p> </dd> + + + <dd> <p> Specifies an <strong>{{ID3D12Resource}}</strong> destination buffer, which must be in the state <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong>. </p> </dd> + + + <dd> <p> Specifies an alignment offset into the destination buffer. Must be a multiple of 8 bytes. </p> </dd> + + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command list, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command list.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command list, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Apps perform indirect draws/dispatches using the <strong>ExecuteIndirect</strong> method. </p> + <p>The semantics of this {{API}} are defined with the following pseudo-code:</p><p>Non-{{NULL}} pCountBuffer:</p><code>// Read draw count out of count buffer +{{UINT}} CommandCount = pCountBuffer-&gt;ReadUINT32(CountBufferOffset); CommandCount = min(CommandCount, MaxCommandCount) // Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; CommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>{{NULL}} pCountBuffer:</p><code>// Get reference to first Commanding argument +{{BYTE}}* Arguments = pArgumentBuffer-&gt;GetBase() + ArgumentBufferOffset; for({{UINT}} CommandIndex = 0; CommandIndex &lt; MaxCommandCount; CommandIndex++) +{ // Interpret the data contained in *Arguments // according to the command signature pCommandSignature-&gt;Interpret(Arguments); Arguments += pCommandSignature -&gt;GetByteStride(); +} +</code><p>The debug layer will issue an error if either the count buffer or the argument buffer are not in the {{D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT}} state. The core runtime will validate:</p><ul> <li><em>CountBufferOffset</em> and <em>ArgumentBufferOffset</em> are 4-byte aligned </li> <li><em>pCountBuffer</em> and <em>pArgumentBuffer</em> are buffer resources (any heap type) </li> <li> The offset implied by <em>MaxCommandCount</em>, <em>ArgumentBufferOffset</em>, and the drawing program stride do not exceed the bounds of <em>pArgumentBuffer</em> (similarly for count buffer) </li> <li>The command list is a direct command list or a compute command list (not a copy or {{JPEG}} decode command list)</li> <li>The root signature of the command list matches the root signature of the command signature</li> </ul><p> The functionality of two {{APIs}} from earlier versions of Direct3D, <code>DrawInstancedIndirect</code> and <code>DrawIndexedInstancedIndirect</code>, are encompassed by <strong>ExecuteIndirect</strong>. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a <strong>{{ID3D12CommandSignature}}</strong>. The data referenced by <em>pArgumentBuffer</em> will be interpreted depending on the contents of the command signature. Refer to Indirect Drawing for the {{APIs}} that are used to create a command signature. </p> </dd> + + + <dd> <p>There are two ways that command counts can be specified:</p> <ul> <li> If <em>pCountBuffer</em> is not {{NULL}}, then <em>MaxCommandCount</em> specifies the maximum number of operations which will be performed. The actual number of operations to be performed are defined by the minimum of this value, and a 32-bit unsigned integer contained in <em>pCountBuffer</em> (at the byte offset specified by <em>CountBufferOffset</em>). </li> <li> If <em>pCountBuffer</em> is {{NULL}}, the <em>MaxCommandCount</em> specifies the exact number of operations which will be performed. </li> </ul> </dd> + + + <dd> <p> Specifies one or more <strong>{{ID3D12Resource}}</strong> objects, containing the command arguments. </p> </dd> + + + <dd> <p> Specifies an offset into <em>pArgumentBuffer</em> to identify the first command argument. </p> </dd> + + + <dd> <p> Specifies a reference to a <strong>{{ID3D12Resource}}</strong>. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that is the offset into <em>pCountBuffer</em>, identifying the argument count. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + + + + <p>This method configures the sample positions used by subsequent draw, copy, resolve, and similar operations.</p> + <p>The operational semantics of sample positions are determined by the various draw, copy, resolve, and other operations that can occur.</p><p><strong>CommandList:</strong> In the absense of any prior calls to SetSamplePositions in a CommandList, samples assume the default position based on the Pipeline State Object ({{PSO}}). The default positions are determined either by the {{SAMPLE_DESC}} portion of the {{PSO}} if it is present, or by the standard sample positions if the {{RASTERIZER_DESC}} portion of the {{PSO}} has ForcedSampleCount set to a value greater than 0.</p><p>After SetSamplePosition has been called, subsequent draw calls must use a {{PSO}} that specifies a matching sample count either using the {{SAMPLE_DESC}} portion of the {{PSO}}, or ForcedSampleCount in the {{RASTERIZER_DESC}} portion of the {{PSO}}.</p><p>SetSamplePositions can only be called on a graphics CommandList. It can't be called in a bundle; bundles inherit sample position state from the calling CommandList and don't modify it.</p><p>Calling SetSamplePositions(0, 0, {{NULL}}) reverts the sample positions to their default values.</p><p><strong>Clear RenderTarget:</strong> Sample positions are ignored when clearing a render target.</p><p><strong>Clear DepthStencil:</strong> When clearing the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of future rendering to the cleared surface or region; the contents of any uncleared regions produced using different sample positions become undefined.</p><p>When clearing the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored.</p><p><strong>Draw to RenderTarget:</strong> When drawing to a render target the sample positions can be changed for each draw call, even when drawing to a region that overlaps previous draw calls. The current sample positions determine the operational semantics of each draw call and samples are taken from taken from the stored contents of the render target, even if the contents were produced using different sample positions.</p><p><strong>Draw using DepthStencil:</strong> When drawing to a depth-stencil surface (read or write) or any region of it, the sample positions must be set to match those used to clear the affected region previously. To use a different sample position, the target region must be cleared first. The pixels outside the clear region are unaffected.</p><p>Hardware may store the depth portion or a depth-stencil surface as plane equations, and evaluate them to produce depth values when the application issues a read. Only the rasterizer and output-merger are required to suport programmable sample positions of the depth portion of a depth-stencil surface. Any other read or write of the depth portion that has been rendered with sample positions set may ignore them and instead sample at the standard positions.</p><p><strong>Resolve RenderTarget:</strong> When resolving a render target or any region of it, the sample positions are ignored; these {{APIs}} operate only on stored color values.</p><p><strong>Resolve DepthStencil:</strong> When resolving the depth portion of a depth-stencil surface or any region of it, the sample positions must be set to match those of past rendering to the resolved surface or region. To use a different sample position, the target region must be cleared first.</p><p>When resolving the stencil portion of a depth-stencil surface or any region of it, the sample positions are ignored; stencil resolves operate only on stored stencil values.</p><p><strong>Copy RenderTarget:</strong> When copying from a render target, the sample positions are ignored regardless of whether it is a full or partial copy.</p><p><strong>Copy DepthStencil (Full Subresource):</strong> When copying a full subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface. To use a different sample position, the target region must be cleared first.</p><p>On some hardware properties of the source surface (such as stored plane equations for depth values) transfer to the destination. Therefore, if the destination surface is subsequently drawn to, the sample positions originally used to generate the source content need to be used with the destination surface. The {{API}} requires this on all hardware for consistency even if it may only apply to some.</p><p><strong>Copy DepthStencil (Partial Subresource):</strong> When copying a partial subresource from a depth-stencil surface, the sample positions must be set to match the sample positions used to generate the source surface, similarly to copying a full subresource. However, if the content of an affected destination subresources is only partially covered by the copy, the contents of the uncovered portion within those subresources becomes undefined unless all of it was generated using the same sample positions as the copy source. To use a different sample position, the target region must be cleared first.</p><p>When copying a partial subresource from the stencil portion of a depth-stencil surface, the sample postions are ignored. It doesn?t matter what sample positions were used to generate content for any other areas of the destination buffer not covered by the copy ? those contents remain valid.</p><p><strong>Shader SamplePos:</strong> The {{HLSL}} SamplePos intrinsic is not aware of programmable sample positions and results returned to shaders calling this on a surface rendered with programmable positions is undefined. Applications must pass coordinates into their shader manually if needed. Similarly evaluating attributes by sample index is undefined with programmable sample positions.</p><p><strong>Transitioning out of {{DEPTH_READ}} or {{DEPTH_WRITE}} state:</strong> If a subresource in {{DEPTH_READ}} or {{DEPTH_WRITE}} state is transitioned to any other state, including {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some hardware might need to decompress the surface. Therefore, the sample positions must be set on the command list to match those used to generate the content in the source surface. Furthermore, for any subsequent transitions of the surface while the same depth data remains in it, the sample positions must continue to match those set on the command list. To use a different sample position, the target region must be cleared first.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p><p><strong>Transitioning out of {{RENDER_TARGET}} state:</strong> If a subresource in {{RENDER_TARGET}} state is transitioned to anything other than {{COPY_SOURCE}} or {{RESOLVE_SOURCE}}, some implementations may need to decompress the surface. This decompression is agnostic to sample positions.</p><p>If an application wants to minimize the decompressed area when only a portion needs to be used, or just to preserve compression, ResolveSubresourceRegion() can be called in {{DECOMPRESS}} mode with a rect specified. This will decompress just the relevant area to a separate resource leaving the source intact on some hardware, though on other hardware even the source area is decompressed. The separate explicitly decompressed resource can then be transitioned to the desired state (such as {{SHADER_RESOURCE}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of samples to take, per pixel. This value can be 1, 2, 4, 8, or 16, otherwise the SetSamplePosition call is dropped. The number of samples must match the sample count configured in the {{PSO}} at draw time, otherwise the behavior is undefined.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_</code></p> <p>Specifies the number of pixels that sample patterns are being specified for. This value can be either 1 or 4, otherwise the SetSamplePosition call is dropped. A value of 1 configures a single sample pattern to be used for each pixel; a value of 4 configures separate sample patterns for each pixel in a 2x2 pixel grid which is repeated over the render-target or viewport space, aligned to even coordintes.</p> <p>Note that the maximum number of combined samples can't exceed 16, otherwise the call is dropped. If NumPixels is set to 4, NumSamplesPerPixel can specify no more than 4 samples.</p> </dd> + + + <dd> <p>{{SAL:}} <code>_In_reads_(NumSamplesPerPixel*NumPixels)</code></p> <p>Specifies an array of {{D3D12_SAMPLE_POSITION}} elements. The size of the array is NumPixels * NumSamplesPerPixel. If NumPixels is set to 4, then the first group of sample positions corresponds to the upper-left pixel in the 2x2 grid of pixels; the next group of sample positions corresponds to the upper-right pixel, the next group to the lower-left pixel, and the final group to the lower-right pixel.</p> <p>If centroid interpolation is used during rendering, the order of positions for each pixel determines centroid-sampling prioritiy. That is, the first covered sample in the order specified is chosen as the centroid sample location.</p> </dd> + + + + + + + + <p> Updates mappings of tile locations in reserved resources to memory locations in a resource heap. </p> + <p>Use <strong>UpdateTileMappings</strong> to map the virtual pages of a reserved resource to the physical pages of a heap. The mapping does not have to be in order. The operation is similar to <strong>{{ID3D11DeviceContext2::UpdateTileMappings}}</strong> with the one key difference that {{D3D12}} allows a reserved resource to have tiles from multiple heaps.</p><p> In a single call to <strong>UpdateTileMappings</strong>, you can map one or more ranges of resource tiles to one or more ranges of heap tiles. </p><p> You can organize the parameters of <strong>UpdateTileMappings</strong> in these ways to perform an update: </p><ul> <li><strong>Reserved resource whose mappings are updated.</strong> Mappings start off all {{NULL}} when a resource is initially created. </li> <li><strong>Set of tile regions on the reserved resource whose mappings are updated.</strong> You can make one <strong>UpdateTileMappings</strong> call to update many mappings or multiple calls with a bit more {{API}} call overhead as well if that is more convenient. <ul> <li><em>NumResourceRegions</em> specifies how many regions there are.</li> <li><em>pResourceRegionStartCoordinates</em> and <em>pResourceRegionSizes</em> are each arrays that identify the start location and extend of each region. If <em>NumResourceRegions</em> is 1, for convenience either or both of the arrays that describe the regions can be {{NULL}}. {{NULL}} for <em>pResourceRegionStartCoordinates</em> means the start coordinate is all 0s, and {{NULL}} for <em>pResourceRegionSizes</em> identifies a default region that is the full set of tiles for the entire reserved resource, including all mipmaps, array slices, or both. </li> <li> <p> If <em>pResourceRegionStartCoordinates</em> isn't {{NULL}} and <em>pResourceRegionSizes</em> is {{NULL}}, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in <em>pResourceRegionStartCoordinates</em> without having to send an array of <em>pResourceRegionSizes</em> all set to 1. </p> </li> </ul> <p>The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.</p> </li> <li><strong>Heap that provides memory where tile mappings can go.</strong> If <strong>UpdateTileMappings</strong> only defines {{NULL}} mappings, you don't need to specify a heap.</li> <li><strong>Set of tile ranges where mappings are going.</strong> Each given tile range can specify one of a few types of ranges: a range of tiles in a heap (default), a count of tiles in the reserved resource to map to a single tile in a heap (sharing the tile), a count of tile mappings in the reserved resource to skip and leave as they are, or a count of tiles in the heap to map to {{NULL}}.<p><em>NumRanges</em> specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described reserved resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each reserved resource tile specified has a mapping specified. </p> <p><em>pRangeFlags</em>, <em>pHeapRangeStartOffsets</em>, and <em>pRangeTileCounts</em> are all arrays, of size <em>NumRanges</em>, that describe the tile ranges. If <em>pRangeFlags</em> is {{NULL}}, all ranges are sequential tiles in the heap; otherwise, for each range i,<em>pRangeFlags[i]</em> identifies how the mappings in that range of tiles work: </p> <ul> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NONE}}</strong>, that range defines sequential tiles in the heap, with the number of tiles being <em>pRangeTileCounts[i]</em> and the starting location <em>pHeapRangeStartOffsets[i]</em>. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE}}</strong>, <em>pHeapRangeStartOffsets[i]</em> identifies the single tile in the heap to map to, and <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to that heap location. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_NULL}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to map to {{NULL}}. If <em>NumRanges</em> is 1, <em>pRangeTileCounts</em> can be {{NULL}} and defaults to the total number of tiles specified by all the tile regions. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{NULL}} mappings. </li> <li> If <em>pRangeFlags[i]</em> is <strong>{{D3D12_TILE_RANGE_FLAG_SKIP}}</strong>, <em>pRangeTileCounts[i]</em> specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. <em>pHeapRangeStartOffsets[i]</em> is ignored for {{SKIP}} mappings. </li> </ul> </li> <li><strong>Flags parameter for overall options.</strong> <strong>{{D3D12_TILE_MAPPING_FLAG_NO_HAZARD}}</strong>. Refer to the description of this flag in <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>.</li> </ul><p> Reserved resources must follow the same rules for tile aliasing, initialization, and data inheritance as placed resources. See <strong>CreatePlacedResource</strong> for more details.</p><p> Here are some examples of common <strong>UpdateTileMappings</strong> cases: </p> + <p>This method does not return a value.</p> + + + <dd> <p> A reference to the reserved resource. </p> </dd> + + + <dd> <p> The number of reserved resource regions. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures that describe the starting coordinates of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures that describe the sizes of the reserved resource regions. The <em>NumResourceRegions</em> parameter specifies the number of <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structures in the array. </p> </dd> + + + <dd> <p> A reference to the resource heap. </p> </dd> + + + <dd> <p> The number of tile ranges. </p> </dd> + + + <dd> <p> A reference to an array of <strong>{{D3D12_TILE_RANGE_FLAGS}}</strong> values that describes each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> An array of offsets into the resource heap. These are 0-based tile offsets, counting in tiles (not bytes). </p> </dd> + + + <dd> <p> An array of tiles. An array of values that specify the number of tiles in each tile range. The <em>NumRanges</em> parameter specifies the number of values in the array. </p> </dd> + + + <dd> <p> A combination of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong> values that are combined by using a bitwise {{OR}} operation. </p> </dd> + + + + + <p>Copies mappings from a source reserved resource to a destination reserved resource.</p> + <p>Use <strong>CopyTileMappings</strong> to copy the tile mappings from one reserved resource to another, either to duplicate a resource mapping, or to initialize a new mapping before modifying it using <strong>UpdateTileMappings</strong>.</p><p><strong>CopyTileMappings</strong> helps with tasks such as shifting mappings around within and across reserved resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temporary location and from there written to the destination. </p><p>The destination and the source regions must each entirely fit in their resource or behavior is undefined and the debug layer will emit an error.</p><p> For more info on tiled resources, refer to the "DirectX tiled resources" section within DirectX programming. </p> + <p>This method does not return a value. If an {{E_OUTOFMEMORY}} occurs, the device is removed.</p> + + + <dd> <p>A reference to the destination reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the destination reserved resource. </p> </dd> + + + <dd> <p>A reference to the source reserved resource.</p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILED_RESOURCE_COORDINATE}}</strong> structure that describes the starting coordinates of the source reserved resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_TILE_REGION_SIZE}}</strong> structure that describes the size of the reserved region. </p> </dd> + + + <dd> <p> One member of <strong>{{D3D12_TILE_MAPPING_FLAGS}}</strong>. </p> </dd> + + + + + <p>Submits an array of command lists for execution.</p> + <p> The driver is free to patch the submitted command lists. It is the calling application?s responsibility to ensure that the graphics processing unit ({{GPU}}) is not currently reading the any of the submitted command lists from a previous execution. </p><p> Applications are encouraged to batch together command list executions to reduce fixed costs associated with submitted commands to the {{GPU}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of command lists to be executed. </p> </dd> + + + <dd> <p> The array of <strong>{{ID3D12CommandList}}</strong> command lists to be executed. </p> </dd> + + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To insert instrumentation markers at the current location within a {{D3D12}} command queue, use the <strong>{{PIXSetMarker}}</strong> function.? This is provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the start of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXBeginEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + <p> Not intended to be called directly.? Use the {{PIX}} event runtime to insert events into a command queue.</p> + <p>This is a support method used internally by the {{PIX}} event runtime.? It is not intended to be called directly.</p><p>To mark the end of an instrumentation region at the current location within a {{D3D12}} command queue, use the <strong>{{PIXEndEvent}}</strong> function or <strong>{{PIXScopedEvent}}</strong> macro.? These are provided by the WinPixEventRuntime NuGet package.</p> + <p> This method does not return a value. </p> + + + + + + + <p>Waits until the specified fence reaches or exceeds the specified value.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Fence}}</strong> object. </p> </dd> + + + <dd> <p>The value that the command queue is waiting for the fence to reach or exceed. So when <strong>{{ID3D12Fence::GetCompletedValue}}</strong> is greater than or equal to <em>Value</em>, the wait is terminated.</p> </dd> + + + + + <p>This method is used to determine the rate at which the {{GPU}} timestamp counter increments.</p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The {{GPU}} timestamp counter frequency (in ticks/second).</p> </dd> + + + + + <p>This method samples the {{CPU}} and {{GPU}} timestamp counters at the same moment in time. </p> + <p>For more information, refer to Timing.</p> + <p> This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>The value of the {{GPU}} timestamp counter.</p> </dd> + + + <dd> <p>The value of the {{CPU}} timestamp counter.</p> </dd> + + + + + <p> Gets the description of the command queue. </p> + <p> The description of the command queue, as a <strong>{{D3D12_COMMAND_QUEUE_DESC}}</strong> structure. </p> + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + <p> Reports the number of physical adapters (nodes) that are associated with this device. </p> + <p> The number of physical adapters (nodes) that this device has. </p> + + + + <p>Creates a command queue.</p> + <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command queue can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandQueue}}) will get the <strong>{{GUID}}</strong> of the interface to a command queue. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command queue. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> Specifies a {{D3D12_COMMAND_QUEUE_DESC}} that describes the command queue. </p> </dd> + + + <dd> <p> The globally unique identifier ({{GUID}}) for the command queue interface. See remarks. An input parameter. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandQueue}}</strong> interface for the command queue. </p> </dd> + + + + + <p>Creates a command allocator object.</p> + <p> The device creates command lists from the command allocator. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the command allocator. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A <strong>{{D3D12_COMMAND_LIST_TYPE}}</strong>-typed value that specifies the type of command allocator to create. The type of command allocator can be the type that records either direct command lists or bundles. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command allocator interface (<strong>{{ID3D12CommandAllocator}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command allocator can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12CommandAllocator}}) will get the <strong>{{GUID}}</strong> of the interface to a command allocator. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12CommandAllocator}}</strong> interface for the command allocator. </p> </dd> + + + + + + + + <p>Creates a compute pipeline state object.</p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the pipeline state object. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure that describes compute pipeline state. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the pipeline state interface (<strong>{{ID3D12PipelineState}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the pipeline state can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12PipelineState}}) will get the <strong>{{GUID}}</strong> of the interface to a pipeline state. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the <strong>{{ID3D12PipelineState}}</strong> interface for the pipeline state object. The pipeline state object is an immutable state object. It contains no methods. </p> </dd> + + + + + + + + <p> Gets information about the features that are supported by the current graphics driver.</p> + <p>Refer to Capability Querying.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns <strong>{{E_INVALIDARG}}</strong> if an unsupported data type is passed to the <em>pFeatureSupportData</em> parameter or a size mismatch is detected for the <em>FeatureSupportDataSize</em> parameter. </p> + + + <dd> <p> A <strong>{{D3D12_FEATURE}}</strong>-typed value that describes the feature to query for support. </p> </dd> + + + <dd> <p> The passed structure is filled with data that describes the feature support. To see the structure types, see the Remarks section in <strong>{{D3D12_FEATURE}} enumeration</strong>. </p> </dd> + + + <dd> <p> The size of the structure passed to the <em>pFeatureSupportData</em> parameter. </p> </dd> + + + + + + + + <p> Gets the size of the handle increment for the given type of descriptor heap. This value is typically used to increment a handle into a descriptor array by the correct amount.</p> + <p>The descriptor size returned by this method is used as one input to the helper structures <strong>{{CD3DX12_CPU_DESCRIPTOR_HANDLE}}</strong> and <strong>{{CD3DX12_GPU_DESCRIPTOR_HANDLE}}</strong>.</p> + <p> Returns the size of the handle increment for the given type of descriptor heap, including any necessary padding.</p> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to get the size of the handle increment for. </p> </dd> + + + + + + + + + + + <p>Creates a shader-resource view for accessing data in a resource.</p> + + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the shader resource.</p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_SHADER_RESOURCE_VIEW_DESC}}</strong> structure that describes the shader-resource view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{SRVs}} target a full buffer and are typed (not raw or structured), and for textures {{SRVs}} target a full texture, all mips and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the shader-resource view. This handle can be created in a shader-visible or non-shader-visible descriptor heap.</p> </dd> + + + + + <p> Creates a view for unordered accessing. </p> + <p> Returns nothing. </p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the unordered access. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p> The <strong>{{ID3D12Resource}}</strong> for the counter (if any) associated with the {{UAV}}. </p> <p> If <em>pCounterResource</em> is not specified, the <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be 0. </p> <p> If <em>pCounterResource</em> is specified, then there is a counter associated with the {{UAV}}, and the runtime performs validation of the following requirements: </p> <ul> <li> The <strong>StructureByteStride</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be greater than 0. </li> <li> The format must be {{DXGI_FORMAT_UNKNOWN}}. </li> <li> The {{D3D12_BUFFER_UAV_FLAG_RAW}} flag (a <strong>{{D3D12_BUFFER_UAV_FLAGS}}</strong> enumeration constant) must not be set. </li> <li> Both of the resources (<em>pResource</em> and <em>pCounterResource</em>) must be buffers. </li> <li> The <strong>CounterOffsetInBytes</strong> member of the <strong>{{D3D12_BUFFER_UAV}}</strong> structure must be a multiple of 4 bytes, and must be within the range of the counter resource. </li> <li><em>pResource</em> cannot be {{NULL}} </li> <li><em>pDesc</em> cannot be {{NULL}}. </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_UNORDERED_ACCESS_VIEW_DESC}}</strong> structure that describes the unordered-access view. </p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers {{UAVs}} target a full buffer and are typed, and for textures {{UAVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the unordered-access view. </p> </dd> + + + + + <p>Creates a render-target view for accessing resource data.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to the <strong>{{ID3D12Resource}}</strong> object that represents the render target. </p> <p>At least one of <em>pResource</em> or <em>pDesc</em> must be provided. +A null <em>pResource</em> is used to initialize a null descriptor, which guarantees {{D3D11}}-like null binding behavior (reading 0s, writes are discarded), but must have a valid <em>pDesc</em> in order to determine the descriptor type. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D12_RENDER_TARGET_VIEW_DESC}}</strong> structure that describes the render-target view.</p> <p>A null <em>pDesc</em> is used to initialize a default descriptor, if possible. This behavior is identical to the {{D3D11}} null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and {{RTVs}} target the first mip and all array slices. Not all resources support null descriptor initialization.</p> </dd> + + + <dd> <p> Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the render-target view. </p> </dd> + + + + + + + + <p>Create a sampler object that encapsulates sampling information for a texture.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{D3D12_SAMPLER_DESC}}</strong> structure that describes the sampler. </p> </dd> + + + <dd> <p>Describes the {{CPU}} descriptor handle that represents the start of the heap that holds the sampler.</p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of destination descriptor ranges to copy to. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy to. </p> </dd> + + + <dd> <p> An array of destination descriptor range sizes to copy to. </p> </dd> + + + <dd> <p> The number of source descriptor ranges to copy from. </p> </dd> + + + <dd> <p> An array of {{CPU_descriptor_handle}} objects to copy from. </p> </dd> + + + <dd> <p> An array of source descriptor range sizes to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Copies descriptors from a source to a destination. </p> + <p> Returns nothing. </p> + + + <dd> <p> The number of descriptors to copy. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the destination descriptors to start to copy to. </p> </dd> + + + <dd> <p> A {{CPU_descriptor_handle}} that describes the source descriptors to start to copy from. </p> </dd> + + + <dd> <p> The <strong>{{D3D12_DESCRIPTOR_HEAP_TYPE}}</strong>-typed value that specifies the type of descriptor heap to copy with. </p> </dd> + + + + + <p> Gets the size and alignment of memory required for a collection of resources on this adapter. </p> + <p> When using <strong>CreatePlacedResource</strong>, the application must use this method to understand the size and alignment characteristics of texture resources. The results of this method vary depending on the particular adapter, and must be treated as unique to this adapter and driver version. </p><p> Applications cannot use the output of <strong>GetResourceAllocationInfo</strong> to understand packed mip properties of textures. To understand packed mip properties of textures, applications must use <strong>GetResourceTiling</strong>. Texture resource sizes significantly differ from the information returned by <strong>GetResourceTiling</strong>, because some adapter architectures allocate extra memory for textures to reduce the effective bandwidth during common rendering scenarios. This even includes textures that have constraints on their texture layouts or have standardized texture layouts. That extra memory cannot be sparsely mapped or remapped by an application using <strong>CreateReservedResource</strong> and <strong>UpdateTileMappings</strong>, so it isn't reported in <strong>GetResourceTiling</strong>. </p><p> Applications can forgo using <strong>GetResourceAllocationInfo</strong> for buffer resources (<strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER). Buffers have the same size on all adapters, which is merely the smallest multiple of 64KB which is greater or equal to <strong>{{D3D12_RESOURCE_DESC}}</strong>::<strong>Width</strong>. </p><p> When multiple resource descriptions are passed in, the C++ algorithm for calculating a structure size and alignment are used. For example, a three-element array with two tiny 64KB-aligned resources and a tiny 4MB-aligned resource reports differing sizes based on the order of the array. If the 4MB aligned resource is in the middle, the resulting <strong>Size</strong> is 12MB. Otherwise, the resulting <strong>Size</strong> is 8MB. The <strong>Alignment</strong> returned would always be 4MB, as it is the superset of all alignments in the resource array. </p> + <p> Returns a <strong>{{D3D12_RESOURCE_ALLOCATION_INFO}}</strong> structure that provides info about video memory allocated for the specified array of resources. </p> + + + <dd> <p> For single {{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set bits to identify the nodes (the device's physical adapters). Each bit in the mask corresponds to a single node. Refer to Multi-Adapter.</p> </dd> + + + <dd> <p> The number of resource descriptors in the <em>pResourceDescs</em> array. </p> </dd> + + + <dd> <p> An array of <strong>{{D3D12_RESOURCE_DESC}}</strong> structures that described the resources to get info about. </p> </dd> + + + + + <p> Divulges the equivalent custom heap properties that are used for non-custom heap types, based on the adapter's architectural properties. </p> + <p> Returns a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the specified heap. The <strong>Type</strong> member of the returned {{D3D12_HEAP_PROPERTIES}} is always {{D3D12_HEAP_TYPE_CUSTOM}}. </p><p> When <strong>{{D3D12_FEATURE_DATA_ARCHITECTURE}}</strong>::UMA is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L1}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{FALSE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_COMBINE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p><p> When {{D3D12_FEATURE_DATA_ARCHITECTURE::UMA}} is {{TRUE}} and {{D3D12_FEATURE_DATA_ARCHITECTURE::CacheCoherentUMA}} is {{TRUE}}, the returned {{D3D12_HEAP_PROPERTIES}} members convert as follows: </p><table> <tr><th>Heap Type</th><th>How the returned {{D3D12_HEAP_PROPERTIES}} members convert</th></tr> <tr><td>{{D3D12_HEAP_TYPE_UPLOAD}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_DEFAULT}}</td><td><strong>{{CPUPageProperty}}</strong> = {{NOT_AVAILABLE}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> <tr><td>{{D3D12_HEAP_TYPE_READBACK}}</td><td><strong>{{CPUPageProperty}}</strong> = {{WRITE_BACK}}, <strong>MemoryPoolPreference</strong> = {{L0}}.</td></tr> </table><p>?</p> + + + <dd> <p> For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set a bit to identify the node (the device's physical adapter). Each bit in the mask corresponds to a single node. Only 1 bit must be set. See Multi-Adapter. </p> </dd> + + + <dd> <p> A <strong>{{D3D12_HEAP_TYPE}}</strong>-typed value that specifies the heap to get properties for. {{D3D12_HEAP_TYPE_CUSTOM}} is not supported as a parameter value. </p> </dd> + + + + + <p> Creates both a resource and an implicit heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. </p> + <p> This method creates both a resource and a heap, such that the heap is big enough to contain the entire resource and the resource is mapped to the heap. The created heap is known as an implicit heap, because the heap object cannot be obtained by the application. The application must ensure the {{GPU}} will no longer read or write to this resource before releasing the final reference on the resource. </p><p> The implicit heap is made resident for {{GPU}} access before the method returns to the application. See Residency. </p><p> The resource {{GPU}} {{VA}} mapping cannot be changed. See <strong>{{ID3D12CommandQueue::UpdateTileMappings}}</strong> and Volume Tiled Resources. </p><p> This method may be called by multiple threads concurrently. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. For other possible return values, see Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_PROPERTIES}}</strong> structure that provides properties for the resource's heap. </p> </dd> + + + <dd> <p> Heap options, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_HEAP_FLAGS}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a <strong>{{D3D12_HEAP_TYPE}}</strong>_UPLOAD heap, <em>InitialResourceState</em> must be <strong>{{D3D12_RESOURCE_STATE}}</strong>_GENERIC_READ. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialResourceState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the <strong>{{D3D12_RESOURCE_FLAG}}</strong>_ALLOW_RENDER_TARGET or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with <strong>{{D3D12_RESOURCE_DIMENSION}}</strong>_BUFFER. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> <p> While riidResource is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to memory that receives the requested interface reference to the created resource object. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> is valid. </p> </dd> + + + + + <p> Creates a heap that can be used with placed resources and reserved resources. </p> + <p><strong>CreateHeap</strong> creates a heap that can be used with placed resources and reserved resources. Before releasing the final reference on the heap, the application must ensure that the {{GPU}} will no longer read or write to this heap. Placed resource objects will hold a reference on the heap they are created on, but reserved resources will not hold a reference for each mapping made to a heap. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the heap. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to a <strong>{{D3D12_HEAP_DESC}}</strong> structure that describes the heap. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the heap interface. This is an input parameter. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the heap can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Heap}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a heap. <em>riid</em> is, most commonly, the {{GUID}} for <strong>{{ID3D12Heap}}</strong>, but it may be any {{GUID}} for any interface. If the resource object does not support the interface for the specified {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the heap. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p> Creates a resource that is placed in a specific heap. Placed resources are the lightest weight resource objects available, and are the fastest to create and destroy. </p> + <p><strong>CreatePlacedResource</strong> is similar to fully mapping a reserved resource to an offset within a heap; but the virtual address space associated with a heap may be reused as well. </p><p> Placed resources are lighter weight than committed resources to create and destroy, because no heap is created or destroyed during this operation. However, placed resources enable an even lighter weight technique to reuse memory than resource creation and destruction: reuse through aliasing and aliasing barriers. Multiple placed resources may simultaneously overlap each other on the same heap, but only a single overlapping resource can be used at a time. </p><p> There are two placed resource usage semantics, a simple model and an advanced model. The simple model is recommended, and is the most likely model for tool support, until the advanced model is proven to be required by the app. </p> + <p> This method returns <strong>{{E_OUTOFMEMORY}}</strong> if there is insufficient memory to create the resource. See Direct3D 12 Return Codes for other possible return values. </p> + + + <dd> <p> A reference to the <strong>{{ID3D12Heap}}</strong> interface that represents the heap in which the resource is placed. </p> </dd> + + + <dd> <p> The offset, in bytes, to the resource. The <em>HeapOffset</em> must be a multiple of the resource's alignment, and <em>HeapOffset</em> plus the resource size must be smaller than or equal to the heap size. <strong>GetResourceAllocationInfo</strong> must be used to understand the sizes of texture resources. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_RESOURCE_DESC}}</strong> structure that describes the resource. </p> </dd> + + + <dd> <p> The initial state of the resource, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> <p> When a resource is created together with a {{D3D12_HEAP_TYPE_UPLOAD}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_GENERIC_READ}}. When a resource is created together with a {{D3D12_HEAP_TYPE_READBACK}} heap, <em>InitialState</em> must be {{D3D12_RESOURCE_STATE_COPY_DEST}}. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_CLEAR_VALUE}}</strong> that describes the default value for a clear color. </p> <p><em>pOptimizedClearValue</em> specifies a value for which clear operations are most optimal. When the created resource is a texture with either the {{D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET}} or {{D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}} flags, applications should choose the value that the clear operation will most commonly be called with. Clear operations can be called with other values, but those operations will not be as efficient as when the value matches the one passed into resource creation. <em>pOptimizedClearValue</em> must be {{NULL}} when used with {{D3D12_RESOURCE_DIMENSION_BUFFER}}. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the resource interface. This is an input parameter. </p> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a resource. Although <strong>riid</strong> is, most commonly, the {{GUID}} for <strong>{{ID3D12Resource}}</strong>, it may be any {{GUID}} for any interface. If the resource object doesn't support the interface for this {{GUID}}, creation will fail with {{E_NOINTERFACE}}. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to the resource. <em>ppvResource</em> can be {{NULL}}, to enable capability testing. When <em>ppvResource</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pResourceDesc</em> and other parameters are valid. </p> </dd> + + + + + + + + <p> Creates a shared handle to an heap, resource, or fence object. </p> + <p> Both heaps and committed resources can be shared. Sharing a committed resource shares the implicit heap along with the committed resource description, such that a compatible resource description can be mapped to the heap from another device. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the following values: </p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid. </li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource. </li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li> Possibly other error codes that are described in the Direct3D 12 Return Codes topic. </li> </ul> + + + <dd> <p> A reference to the <strong>{{ID3D12DeviceChild}}</strong> interface that represents the heap, resource, or fence object to create for sharing. The following interfaces (derived from <strong>{{ID3D12DeviceChild}}</strong>) are supported: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + <dd> <p> A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a <strong>Boolean</strong> value that determines whether child processes can inherit the returned handle. </p> <p> Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor. </p> <p> The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights. </p> </dd> + + + <dd> <p>Currently the only value this parameter accepts is {{GENERIC_ALL}}.</p> </dd> + + + <dd> <p> A <strong>{{NULL}}</strong>-terminated <strong>{{UNICODE}}</strong> string that contains the name to associate with the shared heap. The name is limited to {{MAX_PATH}} characters. Name comparison is case-sensitive. </p> <p> If <em>Name</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace. </p> <p> The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users. </p> <p> The object can be created in a private namespace. For more information, see Object Namespaces. </p> </dd> + + + <dd> <p> A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource. </p> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using {{HANDLE}} and {{REFIID}}. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The handle that was output by the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> <p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface can be obtained by using the __uuidof() macro. For example, __uuidof({{ID3D12Heap}}) will get the <strong>{{GUID}}</strong> of the interface to a resource. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to one of the following interfaces: </p> <ul> <li> <strong>{{ID3D12Heap}}</strong> </li> <li> <strong>{{ID3D12Resource}}</strong> </li> <li> <strong>{{ID3D12Fence}}</strong> </li> </ul> </dd> + + + + + <p> Opens a handle for shared resources, shared heaps, and shared fences, by using Name and Access. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The name that was optionally passed as the <em>Name</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> The access level that was specified in the <em>Access</em> parameter in the call to <strong>{{ID3D12Device::CreateSharedHandle}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the shared handle. </p> </dd> + + + + + <p>Makes objects resident for the device.</p> + <p><strong>MakeResident</strong> loads the data associated with a resource from disk, and re-allocates the memory from the resource's appropriate memory pool. This method should be called on the object which owns the physical memory. +</p><p>Use this method, and <strong>Evict</strong>, to manage {{GPU}} video memory, noting that this was done automatically in {{D3D11}}, but now has to be done by the app in {{D3D12}}.</p><p><strong>MakeResident</strong> and <strong>Evict</strong> can help applications manage the residency budget on many adapters. <strong>MakeResident</strong> explicitly pages-in data and, then, precludes page-out so the {{GPU}} can access the data. <strong>Evict</strong> enables page-out.</p><p>Some {{GPU}} architectures do not benefit from residency manipulation, due to the lack of sufficient {{GPU}} virtual address space. Use <strong>{{D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT}}</strong> and <strong>{{IDXGIAdapter3::QueryVideoMemoryInfo}}</strong> to recognize when the maximum {{GPU}} {{VA}} space per-process is too small or roughly the same size as the residency budget. For such architectures, the residency budget will always be constrained by the amount of {{GPU}} virtual address space. <strong>Evict</strong> will not free-up any residency budget on such systems. +</p><p>Applications must handle <strong>MakeResident</strong> failures, even if there appears to be enough residency budget available. Physical memory fragmentation and adapter architecture quirks can preclude the utilization of large contiguous ranges. Applications should free up more residency budget before trying again. +</p><p><strong>MakeResident</strong> is ref-counted, such that <strong>Evict</strong> must be called the same amount of times as <strong>MakeResident</strong> before <strong>Evict</strong> takes effect. Objects that support residency are made resident during creation, so a single <strong>Evict</strong> call will actually evict the object. </p><p>Applications must use fences to ensure the {{GPU}} doesn't use non-resident objects. <strong>MakeResident</strong> must return before the {{GPU}} executes a command list that references the object. <strong>Evict</strong> must be called after the {{GPU}} finishes executing a command list that references the object.</p><p>Evicted objects still consume the same {{GPU}} virtual address and same amount of {{GPU}} virtual address space. Therefore, resource descriptors and other {{GPU}} virtual address references are not invalidated after <strong>Evict</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to make resident for the device. </p> </dd> + + + <dd> <p>A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + <p>Enables the page-out of data, which precludes {{GPU}} access of that data.</p> + <p><strong>Evict</strong> persists the data associated with a resource to disk, and then removes the resource from the memory pool where it was located. This method should be called on the object which owns the physical memory: either a committed resource (which owns both virtual and physical memory assignments) or a heap - noting that reserved resources do not have physical memory, and placed resources are borrowing memory from a heap. +</p><p>Refer to the remarks for <strong>MakeResident</strong>.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The number of objects in the <em>ppObjects</em> array to evict from the device. </p> </dd> + + + <dd> <p> A reference to a memory block that contains an array of <strong>{{ID3D12Pageable}}</strong> interface references for the objects. </p> <p>Even though most {{D3D12}} objects inherit from <strong>{{ID3D12Pageable}}</strong>, residency changes are only supported on the following objects: +Descriptor Heaps, Heaps, Committed Resources, and Query Heaps</p> </dd> + + + + + + + + <p>Gets the reason that the device was removed.</p> + <p>This method returns the reason that the device was removed.</p> + + + + <p> Gets a resource layout that can be copied. Helps the app fill-in <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> when suballocating space in upload heaps. </p> + <p> This routine assists the application in filling out <strong>{{D3D12_PLACED_SUBRESOURCE_FOOTPRINT}}</strong> and <strong>{{D3D12_SUBRESOURCE_FOOTPRINT}}</strong> structures, when suballocating space in upload heaps. The resulting structures are {{GPU}} adapter-agnostic, meaning that the values will not vary from one {{GPU}} adapter to the next. <strong>GetCopyableFootprints</strong> uses specified details about resource formats, texture layouts, and alignment requirements (from the <strong>{{D3D12_RESOURCE_DESC}}</strong> structure) to fill out the subresource structures. Applications have access to all these details, so this method, or a variation of it, could be written as part of the app. </p> + <p> This method does not return a value. </p> + + + + <p> Creates a query heap. A query heap contains an array of queries. </p> + <p> Refer to Queries for more information. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Specifies the query heap in a <strong>{{D3D12_QUERY_HEAP_DESC}}</strong> structure. </p> </dd> + + + <dd> <p> Specifies a {{REFIID}} that uniquely identifies the heap. </p> </dd> + + + <dd> <p> Specifies a reference to the heap, that will be returned on successful completion of the method. <em>ppvHeap</em> can be {{NULL}}, to enable capability testing. When <em>ppvHeap</em> is {{NULL}}, no object will be created and {{S_FALSE}} will be returned when <em>pDesc</em> is valid. </p> </dd> + + + + + <p>A development-time aid for certain types of profiling and experimental prototyping.</p> + <p>This method is only useful during the development of applications. It enables developers to profile {{GPU}} usage of multiple algorithms without experiencing artifacts from dynamic frequency scaling.</p><p>Do not call this method in normal execution for a shipped application. This method only works while the machine is in developer mode. If developer mode is not enabled, then device removal will occur. Instead, call this method in response to an off-by-default, developer-facing switch. Calling it in response to command line parameters, config files, registry keys, and developer console commands are reasonable usage scenarios. </p><p>A stable power state typically fixes {{GPU}} clock rates at a slower setting that is significantly lower than that experienced by users under normal application load. This reduction in clock rate affects the entire system. Slow clock rates are required to ensure processors don?t exhaust power, current, and thermal limits. Normal usage scenarios commonly leverage a processors ability to dynamically over-clock. Any conclusions made by comparing two designs under a stable power state should be double-checked with supporting results from real usage scenarios.</p> + <p>This method returns one of the Direct3D 12 Return Codes.</p> + + + <dd> <p>Specifies a {{BOOL}} that turns the stable power state on or off.</p> </dd> + + + + + <p> This method creates a command signature. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Describes the command signature to be created with the <strong>{{D3D12_COMMAND_SIGNATURE_DESC}}</strong> structure. </p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12RootSignature}}</strong> that the command signature applies to. </p> <p>The root signature is required if any of the commands in the signature will update bindings on the pipeline. If the only command present is a draw or dispatch, the root signature parameter can be set to {{NULL}}.</p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the command signature interface (<strong>{{ID3D12CommandSignature}}</strong>). The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the command signature can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12CommandSignature}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a command signature. </p> </dd> + + + <dd> <p> Specifies a reference, that on successful completion of the method will point to the created command signature (<strong>{{ID3D12CommandSignature}}</strong>). </p> </dd> + + + + + <p> Gets info about how a tiled resource is broken into tiles. </p> + <p> To estimate the total resource size of textures needed when calculating heap sizes and calling <strong>CreatePlacedResource</strong>, use <strong>GetResourceAllocationInfo</strong> instead of <strong>GetResourceTiling</strong>. <strong>GetResourceTiling</strong> cannot be used for this. </p><p> For more information on tiled resources, refer to Volume Tiled Resources. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a tiled <strong>{{ID3D12Resource}}</strong> to get info about. </p> </dd> + + + <dd> <p> A reference to a variable that receives the number of tiles needed to store the entire tiled resource. </p> </dd> + + + <dd> <p> A reference to a <strong>{{D3D12_PACKED_MIP_INFO}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about how the tiled resource's mipmaps are packed. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_TILE_SHAPE}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, <strong>GetResourceTiling</strong> sets the members of {{D3D12_TILE_SHAPE}} to zeros. </p> </dd> + + + <dd> <p> A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at <em>pSubresourceTilingsForNonPackedMips</em> (clamped to what's available). </p> </dd> + + + <dd> <p> The number of the first subresource tile to get. <strong>GetResourceTiling</strong> ignores this parameter if the number that <em>pNumSubresourceTilings</em> points to is 0. </p> </dd> + + + <dd> <p> Specifies a <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure that <strong>GetResourceTiling</strong> fills with info about subresource tiles. If subresource tiles are part of packed mipmaps, <strong>GetResourceTiling</strong> sets the members of {{D3D12_SUBRESOURCE_TILING}} to zeros, except the <em>StartTileIndexInOverallResource</em> member, which <strong>GetResourceTiling</strong> sets to {{D3D12_PACKED_TILE}} (0xffffffff). The {{D3D12_PACKED_TILE}} constant indicates that the whole <strong>{{D3D12_SUBRESOURCE_TILING}}</strong> structure is meaningless for this situation, and the info that the <em>pPackedMipDesc</em> parameter points to applies. </p> </dd> + + + + + <p> Gets a locally unique identifier for the current device (adapter). </p> + <p> This method returns a unique identifier for the adapter that is specific to the adapter hardware. Applications can use this identifier to define robust mappings across various {{APIs}} (Direct3D 12, {{DXGI}}). </p><p> A locally unique identifier ({{LUID}}) is a 64-bit value that is guaranteed to be unique only on the system on which it was generated. The uniqueness of a locally unique identifier ({{LUID}}) is guaranteed only until the system is restarted. </p> + <p> The locally unique identifier for the adapter. </p> + + + + <p>Manages a pipeline library, in particular loading and retrieving individual {{PSOs}}.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + + + + <p>Adds the input {{PSO}} to an internal database with the corresponding name.</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the name already exists, {{E_OUTOFMEMORY}} if unable to allocate storage in the library. +</p> + + + <dd> <p>Specifies a unique name for the library. Overwriting is not supported.</p> </dd> + + + <dd> <p>Specifies the <strong>{{ID3D12PipelineState}}</strong> to add.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. </p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_GRAPHICS_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Retrieves the requested {{PSO}} from the library. The input desc is matched against the data in the current library database, and remembered in order to prevent duplication of {{PSO}} contents. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if the name doesn?t exist, or if the input description doesn?t match the data in the library, and {{E_OUTOFMEMORY}} if unable to allocate the return {{PSO}}. +</p> + + + <dd> <p>The unique name of the {{PSO}}.</p> </dd> + + + <dd> <p>Specifies a description of the required {{PSO}} in a <strong>{{D3D12_COMPUTE_PIPELINE_STATE_DESC}}</strong> structure. This input description is matched against the data in the current library database, and stored in order to prevent duplication of {{PSO}} contents.</p> </dd> + + + <dd> <p>Specifies a {{REFIID}} for the <strong>{{ID3D12PipelineState}}</strong> object. Typically set this, and the following parameter, with the macro <code>{{IID_PPV_ARGS}}(&amp;{{PSO1}})</code>, where <em>{{PSO1}}</em> is the name of the object.</p> </dd> + + + <dd> <p>Specifies a reference that will reference the returned {{PSO}}.</p> </dd> + + + + + <p>Returns the amount of memory required to serialize the current contents of the database. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns a {{SIZE_T}} object, containing the size required in bytes.</p> + + + + <p>Writes the contents of the library to the provided memory, to be provided back to the runtime at a later time. +</p> + <p>Refer to the remarks and examples for <strong>CreatePipelineLibrary</strong>. </p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the buffer provided isn?t big enough. +</p> + + + <dd> <p>Specifies a reference to the data. This memory must be readable and writeable up to the input size. This data can be saved and provided to <strong>CreatePipelineLibrary</strong> at a later time, including future instances of this or other processes. The data becomes invalidated if the runtime or driver is updated, and is not portable to other hardware or devices.</p> </dd> + + + <dd> <p>The size provided must be at least the size returned from <strong>GetSerializedSize</strong>. </p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter, and expands on the range of methods provided by <strong>{{ID3D12Device}}</strong>.</p> + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p> + + + + <p>Creates a cached pipeline library. By grouping {{PSOs}} that are expected to share data together into a library before serializing, there?s less overhead due to metadata, as well as opportunity to avoid redundant or duplicated data from being written to disk.</p> + <p>A pipeline library enables the following operations.</p><ul> <li>Adding Pipeline State Objects ({{PSOs}}) to an existing library object (refer to <strong>StorePipeline</strong>). </li> <li>Serializing a {{PSO}} library into a contiguous block of memory for disk storage (refer to <strong>Serialize</strong>).</li> <li>De-serializing a {{PSO}} library from persistent storage (this is handled by <strong>CreatePipelineLibrary</strong>).</li> <li>Retrieving individual {{PSOs}} from the library (refer to <strong>LoadComputePipeline</strong> and <strong>LoadGraphicsPipeline</strong>).</li> </ul><p>At no point in the lifecycle of a pipeline library is there duplication between {{PSOs}} with identical sub-components. +A recommended solution for managing the lifetime of the provided reference while only having to ref-count the returned interface is to leverage <strong>{{ID3D12Object::SetPrivateDataInterface}}</strong>, and use an object which implements <strong>{{IUnknown}}</strong>, and frees the memory when the ref-count reaches 0. +</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the blob is corrupted or unrecognized, {{D3D12_ERROR_DRIVER_VERSION_MISMATCH}} if the provided data came from an old driver or runtime, and {{D3D12_ERROR_ADAPTER_NOT_FOUND}} if the data came from different hardware.</p><p>If you pass nullptr for <em>ppPipelineLibrary</em> then the runtime will still perform the validation of the blob but avoid creating the actual library and returns {{S_FALSE}} if the library would have been created.</p><p>Also, the feature requires an updated driver, and attempting to use it on old drivers will return {{E_NOTIMPL}}.</p> + + + <dd> <p> If the input library blob is empty, the initial contents of the library is empty. If the input library blob is not empty, it is validated for integrity, parsed, and the reference is stored. The reference provided as input to this method must remain valid for the lifetime of the object returned. For efficiency reasons, the data is not copied. +</p> </dd> + + + <dd> <p>Specifies the length of <em>pLibraryBlob</em> in bytes.</p> </dd> + + + <dd> <p>Specifies a unique {{REFIID}} for the <strong>{{ID3D12PipelineLibrary}}</strong> object. +Typically set this and the following parameter with the macro <code>{{IID_PPV_ARGS}}(&amp;Library)</code>, where <em>Library</em> is the name of the object.</p> </dd> + + + <dd> <p>Returns a reference to the created library.</p> </dd> + + + + + <p>Specifies an event that should be fired when one or more of a collection of fences reach specific values.</p> + <p>To specify a single fence refer to the <strong>SetEventOnCompletion</strong> method.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the <strong>{{ID3D12Fence}}</strong> objects.</p> </dd> + + + <dd> <p>An array of length <em>NumFences</em> that specifies the fence values required for the event is to be signaled.</p> </dd> + + + <dd> <p>Specifies the number of fences to be included.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_MULTIPLE_FENCE_WAIT_FLAGS}}</strong> that determines how to proceed.</p> </dd> + + + <dd> <p>A handle to the event object.</p> </dd> + + + + + <p> </p><p>This method sets residency priorities of a specified list of objects.</p> + <p>For more information, refer to Residency.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies the number of objects in the <em>ppObjects</em> and <em>pPriorities</em> arrays.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, containing references to <strong>{{ID3D12Pageable}}</strong> objects.</p> </dd> + + + <dd> <p>Specifies an array, of length <em>NumObjects</em>, of <strong>{{D3D12_RESIDENCY_PRIORITY}}</strong> values for the list of objects.</p> </dd> + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + <p>Represents a virtual adapter; it is used to create command allocators, command lists, command queues, fences, resources, pipeline state objects, heaps, root signatures, samplers, and many resource views.</p><strong>Note</strong>??The latest version of this interface is <strong>{{ID3D12Device2}}</strong> introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the <strong>{{ID3D12Device2}}</strong> interface instead of <strong>{{ID3D12Device}}</strong>.? + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device. </p><p>For Windows 10 Anniversary some additional functionality is available through <strong>{{ID3D12Device1}}</strong>.</p> + + + + + + + + + + + + + <p> Deserializes a root signature so you can determine the layout definition (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). </p> + <p>This function has been superceded by <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong>.</p><p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12RootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12RootSignatureDeserializer::GetRootSignature}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC}}</strong>). <strong>{{ID3D12RootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12RootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Serializes a root signature of any version that can be passed to <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p> + <p> If an application procedurally generates a <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> data structure, it must pass a reference to this <strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong> in a call to <strong>{{D3D12SerializeVersionedRootSignature}}</strong> to make the serialized form. The application then passes the serialized form to which <em>ppBlob</em> points into <strong>{{ID3D12Device::CreateRootSignature}}</strong>. </p><p> If a shader has been authored with a root signature in it (when that capability is added), the compiled shader will contain a serialized root signature in it already. </p><p> The function signature {{PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function was released with the Windows 10 Anniversary Update (14393) and supersedes <strong>{{D3D12SerializeRootSignature}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Gets a debug interface. </p> + <p> The function signature {{PFN_D3D12_GET_DEBUG_INTERFACE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the debug interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the debug interface can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Debug}}</strong>) will get the <strong>{{GUID}}</strong> of the debug interface. </p> </dd> + + + <dd> <p> The debug interface, as a reference to reference to void. See <strong>{{ID3D12Debug}}</strong> and <strong>{{ID3D12DebugDevice}}</strong>. </p> </dd> + + + + + <p>Generates an interface that can return the deserialized data structure, via <strong>GetUnconvertedRootSignatureDesc</strong>.</p> + <p> If an application has a serialized root signature already or has a compiled shader that contains a root signature and wants to determine the layout definition, it can call <strong>{{D3D12CreateVersionedRootSignatureDeserializer}}</strong> to generate a <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> interface. <strong>{{ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion}}</strong> can return the deserialized data structure (<strong>{{D3D12_ROOT_SIGNATURE_DESC1}}</strong>). <strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong> just owns the lifetime of the memory for the deserialized data structure. </p><p> The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the root signature deserializer can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12VersionedRootSignatureDeserializer}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a root signature deserializer. </p><p> The function signature {{PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p><p>This function supercedes <strong>{{D3D12CreateRootSignatureDeserializer}}</strong>.</p> + <p> Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the Direct3D 12 Return Codes. </p> + + + + + + + <p> Specifies options for the amount of information to report about a live device object's lifetime. </p> + <p> This enumeration is used by <strong>{{ID3D12DebugDevice::ReportLiveDeviceObjects}}</strong>. </p> + + + <dd></dd> + + + <dd> <p>Obtain a summary about a live device object's lifetime. </p> </dd> + + + <dd> <p>Obtain detailed information about a live device object's lifetime. </p> </dd> + + + <dd> <p> Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the data type of the memory pointed to by the <em>pData</em> parameter of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + + <p>Flags for optional {{D3D12}} Debug Layer features.</p> + <p>This enum is used by <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugDevice1::GetDebugParameter}}</strong>.</p> + + + <dd> <p>The default. No optional Debug Layer features.</p> </dd> + + + <dd> <p>The Debug Layer is allowed to deliberately change functional behavior of an application in order to help identify potential errors. By default, the Debug Layer allows most invalid {{API}} usage to run the natural course.</p> </dd> + + + <dd> <p>Performs additional resource state validation of resources set in descriptors at the time <strong>{{ID3D12CommandQueue::ExecuteCommandLists}}</strong> is called. By design descriptors can be changed even after submitting command lists assuming proper synchronization. Conservative resource state tracking ignores this allowance and validates all resources used in descriptor tables when <strong>ExecuteCommandLists</strong> is called. The result may be false validation errors.</p> </dd> + + + <dd> <p>Disables validation of bundle commands by virtually injecting checks into the calling command list validation paths.</p> </dd> + + + <dd> <p>Internal use only.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of shader patching used by {{GPU}}-Based Validation at either the device or command list level.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p> + + + <dd> <p>No shader patching is to be done. This will retain the original shader bytecode. Can lead to errors in some of the {{GPU}}-Based Validation state tracking as the unpatched shader may still change resource state (see Common state promotion) but the promotion will be untracked without patching the shader. This can improve performance but no validation will be performed and may also lead to misleading {{GPU}}-Based Validation errors. Use this mode very carefully. </p> </dd> + + + <dd> <p>Shaders can be patched with resource state tracking code but no validation. This may improve performance but no validation will be performed.</p> </dd> + + + <dd> <p>The default. Shaders are patched with validation code but erroneous instructions will still be executed. </p> </dd> + + + <dd> <p>Shaders are patched with validation code and erroneous instructions are skipped in execution. This can help avoid crashes or device removal.</p> </dd> + + + <dd> <p>Unused, simply the count of the number of modes.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how {{GPU}}-Based Validation handles patched pipeline states during <strong>{{ID3D12Device::CreateGraphicsPipelineState}}</strong> and <strong>{{ID3D12Device::CreateComputePipelineState}}</strong>.</p> + <p>This enum is used by the <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong> structure.</p><p>Generally speaking most application developers are likely to leave this parameter unchanged. However, if the overhead of deferring patched {{PSO}} creation is suspected to be too much of a performance problem, then developers should consider changing this setting.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Indicates the debug parameter type used by <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> and <strong>{{ID3D12DebugCommandList1::GetDebugParameter}}</strong>.</p> + + + + <p> Specifies categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D12InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters. </p> + <p>This is part of the Information Queue feature, refer to the <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + + <p> Debug message severity levels for an information queue.</p> + <p> Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>AddApplicationMessage</strong> and <strong>AddMessage</strong>. </p> + + + <dd> <p> Indicates a corruption error. </p> </dd> + + + <dd> <p> Indicates an error. </p> </dd> + + + <dd> <p> Indicates a warning. </p> </dd> + + + <dd> <p> Indicates an information message. </p> </dd> + + + <dd> <p> Indicates a message other than corruption, error, warning or information. </p> </dd> + + + + + <p> Specifies debug message {{IDs}} for setting up an info-queue filter (see <strong>{{D3D12_INFO_QUEUE_FILTER}}</strong>); use these messages to allow or deny message categories to pass through the storage and retrieval filters. These {{IDs}} are used by methods such as <strong>{{ID3D12InfoQueue::GetMessage}}</strong> or <strong>{{ID3D12InfoQueue::AddMessage}}</strong>. </p> + <p> This enum is used by <strong>AddMessage</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes settings used by {{GPU}}-Based Validation. </p> + <p>Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> to configure device-wide {{GPU}}-Based Validation settings. </p><p>Individual command lists can override the default shader patch mode using <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong>.</p> + + + <dd> <p>Specifies a {{UINT}} that limits the number of messages that can be stored in the {{GPU}}-Based Validation message log. The default value is 256. Since many identical errors can be produced in a single Draw/Dispatch call it may be useful to increase this number. Note this can become a memory burden if a large number of command lists are used as there is a committed message log per command list.</p> </dd> + + + <dd> <p>Specifies the <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that {{GPU}}-Based Validation uses when injecting validation code into shaders, except when overridden by per-command-list {{GPU}}-Based Validation settings (see <strong>{{D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS}}</strong>). The default value is {{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION}}.</p> </dd> + + + <dd> <p>Specifies one of the <strong>{{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS}}</strong> that indicates how {{GPU}}-Based Validation handles patching pipeline states. The default value is {{D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE}}.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes per-command-list settings used by {{GPU}}-Based Validation. </p> + <p> Point to an object using this structure with the <em>pData</em> member of <strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> to configure per-command-list {{GPU}}-Based Validation settings. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE}}</strong> that overrides the default device-level shader patch mode (see <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong>). By default this value is initialized to the <em>DefaultShaderPatchMode</em> assigned to the device (see <strong>{{D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS}}</strong>.</p> </dd> + + + + + <p> A debug message in the Information Queue.</p> + <p> This structure is returned from <strong>{{ID3D12InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D12InfoQueue}}</strong>). </p> + + + <dd> <p> The category of the message. See <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>. </p> </dd> + + + <dd> <p> The severity of the message. See <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>. </p> </dd> + + + <dd> <p> The {{ID}} of the message. See <strong>{{D3D12_MESSAGE_ID}}</strong>. </p> </dd> + + + <dd> <p> The message string. </p> </dd> + + + <dd> <p> The length of <em>pDescription</em>, in bytes. </p> </dd> + + + + + <p> Allow or deny certain types of messages to pass through a filter.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p>Number of message categories to allow or deny. </p> </dd> + + + <dd> <p> Array of message categories to allow or deny. Array must have at least <em>NumCategories</em> members (see <strong>{{D3D12_MESSAGE_CATEGORY}}</strong>). </p> </dd> + + + <dd> <p> Number of message severity levels to allow or deny. </p> </dd> + + + <dd> <p> Array of message severity levels to allow or deny. Array must have at least <em>NumSeverities</em> members (see <strong>{{D3D12_MESSAGE_SEVERITY}}</strong>). </p> </dd> + + + <dd> <p> Number of message {{IDs}} to allow or deny. </p> </dd> + + + <dd> <p> Array of message {{IDs}} to allow or deny. Array must have at least <em>NumIDs</em> members (see <strong>{{D3D12_MESSAGE_ID}}</strong>). </p> </dd> + + + + + <p> Debug message filter; contains a lists of message types to allow or deny.</p> + <p> For use with an <strong>{{ID3D12InfoQueue}}</strong> Interface.</p> + + + <dd> <p> Specifies types of messages that you want to allow. See <strong>{{D3D12_INFO_QUEUE_FILTER_DESC}}</strong>. </p> </dd> + + + <dd> <p> Specifies types of messages that you want to deny. </p> </dd> + + + + + <p> A debug interface controls debug settings and validates pipeline state. It can only be used if the debug layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Enables the debug layer. </p> + <p>To enable the debug layers using this {{API}}, it must be called before the {{D3D12}} device is created. Calling this {{API}} after creating the {{D3D12}} device will cause the {{D3D12}} runtime to remove the device.</p> + <p> This method does not return a value. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds {{GPU}}-Based Validation and Dependent Command Queue Synchronization to the debug layer.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables the debug layer.</p> + <p>This method is identical to <strong>{{ID3D12Debug::EnableDebugLayer}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This method enables or disables {{GPU}}-Based Validation ({{GBV}}) before creating a device with the debug layer enabled. </p> + <p>{{GPU}}-Based Validation can only be enabled/disabled prior to creating a device. By default, {{GPU}}-Based Validation is disabled. To disable {{GPU}}-Based Validation after initially enabling it the device must be fully released and recreated. </p><p>For more information, see Using {{D3D12}} Debug Layer {{GPU}}-Based Validation.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable {{GPU}}-Based Validation, otherwise {{FALSE}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables dependent command queue synchronization when using a {{D3D12}} device with the debug layer enabled.</p> + <p>Dependent Command Queue Synchronization is a {{D3D12}} Debug Layer feature that gives the debug layer the ability to track resource states more accurately when enabled. Dependent Command Queue Synchronization is enabled by default. </p><p>When Dependent Command Queue Synchronization is enabled, the debug layer holds back actual submission of {{GPU}} work until all outstanding fence <strong>Wait</strong> conditions are met. This gives the debug layer the ability to make reasonable assumptions about {{GPU}} state (such as resource states) on the {{CPU}}-timeline when multiple command queues are potentially doing concurrent work.</p><p>With Dependent Command Queue Synchronization disabled, all resource states tracked by the debug layer are cleared each time <strong>{{ID3D12CommandQueue::Signal}}</strong> is called. This results in significantly less useful resource state validation.</p><p>Disabling Dependent Command Queue Synchronization may reduce some debug layer performance overhead when using multiple command queues. However, it is suggested to leave it enabled unless this overhead is problematic. Note that applications that use only a single command queue will see no performance changes with Dependent Command Queue Synchronization disabled.</p> + <p>This method does not return a value.</p> + + + <dd> <p>{{TRUE}} to enable Dependent Command Queue Synchronization, otherwise {{FALSE}}.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies device-wide debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies the {{D3D12}} optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to get.</p> </dd> + + + <dd> <p>Debug parameter data to set.</p> </dd> + + + <dd> <p>Size in bytes of the data pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional device-wide Debug Layer settings.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_DEVICE_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the amount of information to report on a device object's lifetime.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> </dd> + + + + + <p> This interface represents a graphics device for debugging. </p> + + + + <p> Set a bit field of flags that will turn debug features on and off. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> Feature-mask flags, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, that feature will be set to on; otherwise, the feature will be set to off. </p> </dd> + + + + + <p> Gets a bit field of flags that indicates which debug features are on or off. </p> + <p> Mask of feature-mask flags, as a bitwise {{OR}}'ed combination of <strong>{{D3D12_DEBUG_FEATURE}}</strong> enumeration constants. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. </p> + + + + <p> Reports information about a device object's lifetime. </p> + <p> This method returns one of the Direct3D 12 Return Codes. <strong>{{HRESULT}}</strong> </p> + + + <dd> <p> A value from the <strong>{{D3D12_RLDO_FLAGS}}</strong> enumeration. This method uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime. </p> </dd> + + + + + <p> Provides methods to monitor and debug a command queue. </p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method is very similar to <strong>{{ID3D12DebugCommandList::AssertResourceState}}</strong>, however there are methods on the command queue that work directly with resources that might need to be monitored (for example <strong>{{ID3D13CommandQueue::CopyTileMappings}}</strong>).</p> + <p> This method returns true if the resource or subresource is in the specified state, false otherwise. </p> + + + <dd> <p> Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p> The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p> Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>This interface enables modification of additional command list debug layer settings.</p> + <p>This interface is currently in Preview mode.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Validates that the given state matches the state of the subresource, assuming the state of the given subresource is known during recording of a command list (e.g. the resource was transitioned earlier in the same command list recording). If the state is not yet known this method sets the known state for further validation later in the same command list recording.</p> + <p>Since execution of command lists occurs sometime after recording, the state of a resource often cannot be known during command list recording. <strong>AssertResourceState</strong> gives an application developer the ability to impose an assumed state on a resource or subresource at a fixed recording point in a command list.</p><p>Often the state of a resource or subresource can either be known due to a previous barrier or inferred-by-use (for example, was used in an earlier call to <strong>CopyBufferRegion</strong>) during command list recording. In such cases <strong>AssertResourceState</strong> can produce a debug message if the given state does not match the known or assumed state.</p><p>This {{API}} is for debug validation only and does not affect the actual runtime or {{GPU}} state of the resource.</p> + <p>This method returns <strong>true</strong> if the tracked state of the resource or subresource matches the specified state, <strong>false</strong> otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more <strong>{{D3D12_RESOURCE_STATES}}</strong> flags Or'ed together.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Modifies optional Debug Layer settings of a command list.</p> + <p>Certain debug behaviors of {{D3D12}} Debug Layer can be modified by setting debug parameters. These can be used to toggle extra validation or expose experimental debug features.</p><p><strong>{{ID3D12DebugCommandList1::SetDebugParameter}}</strong> only impacts debug settings for the associated command list. For device-wide debug parameters see the <strong>{{ID3D12DebugDevice1::SetDebugParameter}}</strong> method.</p><p>Resetting a command list restores the debug parameters to the default values. This is because a command list reset is treated as equivalent to creating a new command list.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that indicates which debug parameter data to set.</p> </dd> + + + <dd> <p>Pointer to debug parameter data to set. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Specifies the size in bytes of the debug parameter <em>pData</em>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets optional Command List Debug Layer settings.</p> + <p> Returns {{S_OK}} if successful, otherwise {{E_INVALIDARG}}. </p> + + + <dd> <p>Specifies a <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> value that determines which debug parameter data to copy to the memory pointed to by <em>pData</em>.</p> </dd> + + + <dd> <p>Points to the memory that will be filled with a copy of the debug parameter data. The interpretation of this data depends on the <strong>{{D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE}}</strong> given in the <em>Type</em> parameter.</p> </dd> + + + <dd> <p>Size in bytes of the memory buffer pointed to by <em>pData</em>.</p> </dd> + + + + + <p> Provides methods to monitor and debug a command list.</p> + + + + <p> Checks whether a resource, or subresource, is in a specified state, or not.</p> + <p>This method returns true if the resource or subresource is in the specified state, false otherwise.</p> + + + <dd> <p>Specifies the <strong>{{ID3D12Resource}}</strong> to check.</p> </dd> + + + <dd> <p>The index of the subresource to check. This can be set to an index, or {{D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES}}.</p> </dd> + + + <dd> <p>Specifies the state to check for. This can be one or more {{D3D12_RESOURCE_STATES}} flags Or'ed together.</p> </dd> + + + + + <p> Turns the debug features for a command list on or off.</p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. </p> </dd> + + + + + <p> Returns the debug feature flags that have been set on a command list. </p> + <p> A bit mask containing the set debug features. </p> + + + + <p> An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D12Device}}</strong> using <code>{{IUnknown::QueryInterface}}</code>. </p> + + + + <p> Set the maximum number of messages that can be added to the message queue. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Maximum number of messages that can be added to the message queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> </dd> + + + + + <p> Clear all messages from the message queue. </p> + <p> This method does not return a value. </p> + + + + <p> Get a message from the message queue. </p> + <p>This method does not remove any messages from the message queue. </p><p>This method gets messages from the message queue after an optional retrieval filter has been applied. </p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example: </p><code> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D12_MESSAGE}} * pMessage = ({{D3D12_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>GetNumStoredMessagesAllowedByRetrievalFilter</strong>). 0 is the message at the front of the message queue. </p> </dd> + + + <dd> <p> Returned message.</p> </dd> + + + <dd> <p>Size of <em>pMessage</em> in bytes. </p> </dd> + + + + + <p> Get the number of messages that were allowed to pass through a storage filter. </p> + <p> Number of messages allowed by a storage filter. </p> + + + + <p>Get the number of messages that were denied passage through a storage filter. </p> + <p> Number of messages denied by a storage filter. </p> + + + + <p> Get the number of messages currently stored in the message queue. </p> + <p> Number of messages currently stored in the message queue. </p> + + + + <p> Get the number of messages that are able to pass through a retrieval filter. </p> + <p>Number of messages allowed by a retrieval filter. </p> + + + + <p> Get the number of messages that were discarded due to the message count limit. </p> + <p>Get and set the message count limit with <strong>GetMessageCountLimit</strong> and <strong>SetMessageCountLimit</strong>, respectively. </p> + <p> Number of messages discarded. </p> + + + + <p> Get the maximum number of messages that can be added to the message queue. </p> + <p> Maximum number of messages that can be added to the queue. -1 means no limit. When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out. </p> + + + + <p> Add storage filters to the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Array of storage filters.</p> </dd> + + + + + <p> Get the storage filter at the top of the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Storage filter at the top of the storage-filter stack. </p> </dd> + + + <dd> <p> Size of the storage filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the storage filter will be output to this parameter. </p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty storage filter onto the storage-filter stack. </p> + <p>An empty storage filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a storage filter onto the storage-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a storage filter.</p> </dd> + + + + + <p> Pop a storage filter from the top of the storage-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the storage-filter stack in bytes. </p> + <p> Size of the storage-filter stack in bytes. </p> + + + + <p> Add storage filters to the top of the retrieval-filter stack. </p> + <p>The following code example shows how to use this method: </p><code> {{D3D12_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D12_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D12_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D12_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D12_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); </code> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p>Array of retrieval filters. </p> </dd> + + + + + <p> Get the retrieval filter at the top of the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Retrieval filter at the top of the retrieval-filter stack. </p> </dd> + + + <dd> <p> Size of the retrieval filter in bytes. If <em>pFilter</em> is {{NULL}}, the size of the retrieval filter will be output to this parameter. </p> </dd> + + + + + <p> Remove a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Push an empty retrieval filter onto the retrieval-filter stack. </p> + <p>An empty retrieval filter allows all messages to pass through. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + + <p> Push a retrieval filter onto the retrieval-filter stack. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Pointer to a retrieval filter.</p> </dd> + + + + + <p> Pop a retrieval filter from the top of the retrieval-filter stack. </p> + <p> This method does not return a value. </p> + + + + <p> Get the size of the retrieval-filter stack in bytes. </p> + <p> Size of the retrieval-filter stack in bytes. </p> + + + + <p>Adds a debug message to the message queue and sends that message to debug output. </p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D12InfoQueue::AddApplicationMessage}}</strong>. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Category of a message. </p> </dd> + + + <dd> <p> Severity of a message. </p> </dd> + + + <dd> <p> Unique identifier of a message. </p> </dd> + + + <dd> <p> User-defined message. </p> </dd> + + + + + <p> Adds a user-defined message to the message queue and sends that message to debug output. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Severity of a message.</p> </dd> + + + <dd> <p> Specifies the message string. </p> </dd> + + + + + <p> Set a message category to break on when a message with that category passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A message severity level to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Set a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + <dd> <p> Turns this breaking condition on or off (true for on, false for off). </p> </dd> + + + + + <p> Get a message category to break on when a message with that category passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message category to break on. </p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message severity level to break on.</p> </dd> + + + + + <p> Get a message identifier to break on when a message with that identifier passes through the storage filter. </p> + <p> Whether this breaking condition is turned on or off (true for on, false for off). </p> + + + <dd> <p> Message identifier to break on. </p> </dd> + + + + + <p> Set a boolean that turns the debug output on or off. </p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Disable/Enable the debug output (true to disable or mute the output, false to enable the output). </p> </dd> + + + + + <p> Get a boolean that determines if debug output is on or off. </p> + <p> Whether the debug output is on or off (true for on, false for off). </p> + + + + <p>Options for the amount of information to report about a device object's lifetime.</p> + <p> This enumeration is used by <strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>. </p><p> Several inline functions exist to combine the options using operators, see the {{D3D11SDKLayers}}.h header file for details. </p> + + + <dd> <p> Specifies to obtain a summary about a device object's lifetime. </p> </dd> + + + <dd> <p> Specifies to obtain detailed information about a device object's lifetime. </p> </dd> + + + <dd> <p> Do not use this enumeration constant. It is for internal use only. </p> </dd> + + + + + <p>Indicates which resource types to track.</p> + <p>The <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> or <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> method tracks a specific type of resource.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No resource types are tracked.</p> </dd> + + + <dd> <p>Track device memory that is created with unordered access view ({{UAV}}) bind flags.</p> </dd> + + + <dd> <p>Track device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory.</p> </dd> + + + <dd> <p>Track all shaders that use group shared memory.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created without {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all device memory except device memory that is created with {{UAV}} bind flags.</p> </dd> + + + <dd> <p>Track all memory on the device.</p> </dd> + + + + + <p>Options that specify how to perform shader debug tracking.</p> + <p> This enumeration is used by the following methods: </p><ul> <li> <strong>{{ID3D11RefDefaultTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11RefTrackingOptions::SetTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptions}}</strong> </li> <li> <strong>{{ID3D11TracingDevice::SetShaderTrackingOptionsByType}}</strong> </li> </ul><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>No debug tracking is performed.</p> </dd> + + + <dd> <p>Track the reading of uninitialized data.</p> </dd> + + + <dd> <p>Track read-after-write hazards.</p> </dd> + + + <dd> <p>Track write-after-read hazards.</p> </dd> + + + <dd> <p>Track write-after-write hazards.</p> </dd> + + + <dd> <p>Track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address.</p> </dd> + + + <dd> <p>Track read-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-read hazards across thread groups.</p> </dd> + + + <dd> <p>Track write-after-write hazards across thread groups.</p> </dd> + + + <dd> <p>Track that only one type of atomic operation is used on an address across thread groups.</p> </dd> + + + <dd> <p>Track hazards that are specific to unordered access views ({{UAVs}}).</p> </dd> + + + <dd> <p>Track all hazards.</p> </dd> + + + <dd> <p>Track all hazards and track that hazards are allowed in which data is written but the value does not change.</p> </dd> + + + <dd> <p> All of the preceding tracking options are set except <strong>{{D3D11_SHADER_TRACKING_OPTION_IGNORE}}</strong>. </p> </dd> + + + + + <p>Categories of debug messages. This will identify the category of a message when retrieving a message with <strong>{{ID3D11InfoQueue::GetMessage}}</strong> and when adding a message with <strong>{{ID3D11InfoQueue::AddMessage}}</strong>. When creating an <strong>info queue filter</strong>, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.</p> + <p>This is part of the Information Queue feature. See <strong>{{ID3D11InfoQueue}} Interface</strong>.</p> + + + + <p>Debug message severity levels for an information queue.</p> + <p>Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>). This {{API}} is used by <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + + + <dd> <p>Defines some type of corruption which has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> <p><strong>Direct3D 11:??</strong>This value is not supported until Direct3D 11.1.</p> </dd> + + + + + + + + <p>A debug message in the Information Queue.</p> + <p>This structure is returned from <strong>{{ID3D11InfoQueue::GetMessage}}</strong> as part of the Information Queue feature (see <strong>{{ID3D11InfoQueue}} Interface</strong>).</p> + + + <dd> <p>The category of the message. See <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>The severity of the message. See <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>.</p> </dd> + + + <dd> <p>The {{ID}} of the message. See <strong>{{D3D11_MESSAGE_ID}}</strong>.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of pDescription in bytes.</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Allow or deny certain types of messages to pass through a filter.</p> + + + <dd> <p>Number of message categories to allow or deny.</p> </dd> + + + <dd> <p>Array of message categories to allow or deny. Array must have at least NumCategories members (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>Array of message {{IDs}} to allow or deny. Array must have at least NumIDs members (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by querying it from the <strong>{{ID3D11Device}}</strong> using <strong>{{IUnknown::QueryInterface}}</strong>. </p><p> For more information about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set a bit field of flags that will turn debug features on and off.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>Setting one of the following feature-mask flags will cause a rendering-operation method (listed below) to do some extra task when called. </p><table> <tr><td>{{D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP}} (0x2)</td><td>Application will wait for the {{GPU}} to finish processing the rendering operation before continuing.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP}} (0x1)</td><td>Runtime will additionally call <strong>{{ID3D11DeviceContext::Flush}}</strong>.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} (0x4)</td><td>Runtime will call <strong>{{IDXGISwapChain::Present}}</strong>. Presentation of render buffers will occur according to the settings established by prior calls to <strong>{{ID3D11Debug::SetSwapChain}}</strong> and <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</td></tr> </table><p>?</p><p>These feature-mask flags apply to the following rendering-operation methods:</p><ul> <li> <strong>{{ID3D11DeviceContext::Draw}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexed}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawIndexedInstanced}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::DrawAuto}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearRenderTargetView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ClearDepthStencilView}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopySubresourceRegion}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::CopyResource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::UpdateSubresource}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::GenerateMips}}</strong> </li> <li> <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> </li> </ul><p>By setting one of the following feature-mask flags, you can control the behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods to aid in testing and debugging. </p><strong>Note</strong>??These flags are supported by the Direct3D 11.1 runtime, which is available starting with Windows?8.?<table> <tr><td>{{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}} (0x8)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is always discarded. Use this flag to test code paths that regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}}.</td></tr> <tr><td>{{D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE}} (0x10)</td><td>When you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer resources while this flag is enabled, their content is never discarded. Use this flag to test code paths that do not need to regenerate resource content on reclaim. You cannot use this flag in combination with {{D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE}}.</td></tr> </table><p>?</p><p>The behavior of the <strong>{{IDXGIDevice2::OfferResources}}</strong> and <strong>{{IDXGIDevice2::ReclaimResources}}</strong> methods depends on system-wide memory pressure. Therefore, the scenario where content is lost and must be regenerated is uncommon for most applications. The preceding new options in the Direct3D debug layer let you simulate that scenario consistently and test code paths.</p><p>The following flag is supported by the Direct3D 11.1 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} (0x40)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>When the debug layer is enabled, it performs certain actions to reveal application problems. By setting the {{D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS}} feature-mask flag, you can enable the debug layer without getting the following default debugging behavior:</p><ul> <li>If an application calls <strong>{{ID3D11DeviceContext1::DiscardView}}</strong>, the runtime fills in the resource with a random color.</li> <li>If an application calls <strong>{{IDXGISwapChain1::Present1}}</strong> with partial presentation parameters, the runtime ignores the partial presentation information.</li> </ul><p>The following flag is supported by the Direct3D 11.2 runtime.</p><table> <tr><td>{{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} (0x80)</td><td>Disables the following default debugging behavior.</td></tr> </table><p>?</p><p>By default (that is, without {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} set), the debug layer validates the proper usage of all tile mappings for tiled resources for bound resources for every operation performed on the device context (for example, draw, copy, and so on). Depending on the size of the tiled resources used (if any), this validation can be processor intensive and slow. Apps might want to initially run with tiled resource tile mapping validation on; then, when they determine that the calling pattern is safe, they can disable the validation by setting {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}}.</p><p>If {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set when a tiled resource is created, the debug layer never performs the tracking of tile mapping for that resource for its entire lifetime. Alternatively, if {{D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION}} is set for any given device context method call (like draw or copy calls) involving tiled resources, the debug layer skips all tile mapping validation for the call.</p> + <p>This method returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A combination of feature-mask flags that are combined by using a bitwise {{OR}} operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. For descriptions of the feature-mask flags, see Remarks.</p> </dd> + + + + + <p>Get a bitfield of flags that indicates which debug features are on or off.</p> + <p>Mask of feature-mask flags bitwise {{ORed}} together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See <strong>{{ID3D11Debug::SetFeatureMask}}</strong> for a list of possible feature-mask flags.</p> + + + + <p>Set the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The application will only sleep if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is a set in the <strong>feature mask</strong>. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the number of milliseconds to sleep after <strong>{{IDXGISwapChain::Present}}</strong> is called.</p> + <p>Value is set with <strong>{{ID3D11Debug::SetPresentPerRenderOpDelay}}</strong>.</p> + <p>Number of milliseconds to sleep after Present is called.</p> + + + + <p>Sets a swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The swap chain set by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get the swap chain that the runtime will use for automatically calling <strong>{{IDXGISwapChain::Present}}</strong>.</p> + <p>The swap chain retrieved by this method will only be used if {{D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP}} is set in the <strong>feature mask</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Check to see if the draw pipeline state is valid.</p> + <p>Use validate prior to calling a draw method (for example, <strong>{{ID3D11DeviceContext::Draw}}</strong>); validation requires the debug layer.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong>, that represents a device context.</p> </dd> + + + + + <p>Report information about a device object's lifetime.</p> + <p><strong>ReportLiveDeviceObjects</strong> uses the value in <em>Flags</em> to determine the amount of information to report about a device object's lifetime.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A value from the <strong>{{D3D11_RLDO_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Verifies whether the dispatch pipeline state is valid.</p> + <p>Use this method before you call a dispatch method (for example, <strong>{{ID3D11DeviceContext::Dispatch}}</strong>). Validation requires the debug layer.</p> + <p>This method returns one of the return codes described in the topic Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11DeviceContext}}</strong> that represents a device context.</p> </dd> + + + + + <strong>Note</strong>?? The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <strong>Note</strong>??The <strong>{{ID3D11SwitchToRef}}</strong> interface and its methods are not supported in Direct3D 11.? + <p>Reserved.</p> + + + + <p>The tracing device interface sets shader tracking information, which enables accurate logging and playback of shader execution.</p> + <p>To get this interface, turn on the debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the reference rasterizer's default race-condition tracking options for the specified resource types.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on," otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets the reference rasterizer's race-condition tracking options for a specific shader.</p> + <strong>Note</strong>??After a call to <strong>SetShaderTrackingOptions</strong>, the tracking options that the <em>Options</em> parameter specifies are set for all calls by the shader that the <em>pShader</em> parameter specifies, until the next call to <strong>SetShaderTrackingOptions</strong>. If you set a flag that is specific to unordered access views ({{UAV}}) (for example, <strong>{{D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS}}</strong>) in the <em>Options</em> parameter for a compute shader, <strong>SetShaderTrackingOptions</strong> ignores it.?<strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a shader.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>Sets graphics processing unit ({{GPU}}) debug reference tracking options.</p> + <p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + <p>This method returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p> Sets graphics processing unit ({{GPU}}) debug reference default tracking options for specific resource types. </p> + <p> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8. </p> + <p> This method returns one of the Direct3D 11 return codes. </p> + + + <dd> <p> A <strong>{{D3D11_SHADER_TRACKING_RESOURCE_TYPE}}</strong>-typed value that specifies the type of resource to track. </p> </dd> + + + <dd> <p>A combination of <strong>{{D3D11_SHADER_TRACKING_OPTIONS}}</strong>-typed flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."</p> </dd> + + + + + <p>An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.</p> + <p> To get this interface, turn on debug layer and use <strong>{{IUnknown::QueryInterface}}</strong> from the <strong>{{ID3D11Device}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Set the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Maximum number of messages that can be added to the message queue. -1 means no limit.</p> </dd> + + + + + <p>Clear all messages from the message queue.</p> + <p>Returns nothing.</p> + + + + <p>Get a message from the message queue.</p> + <p>This method does not remove any messages from the message queue.</p><p>This method gets messages from the message queue after an optional retrieval filter has been applied.</p><p>Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage(0, {{NULL}}, &amp;messageLength); // Allocate space and get the message +{{D3D11_MESSAGE}} * pMessage = ({{D3D11_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage(0, pMessage, &amp;messageLength); +</pre><p>For an overview see <strong>Information Queue Overview</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with <strong>{{ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter}}</strong>). 0 is the message at the front of the message queue.</p> </dd> + + + <dd> <p>Returned message (see <strong>{{D3D11_MESSAGE}}</strong>).</p> </dd> + + + <dd> <p>Size of pMessage in bytes, including the size of the message string that the pMessage points to.</p> </dd> + + + + + <p>Get the number of messages that were allowed to pass through a storage filter.</p> + <p>Number of messages allowed by a storage filter.</p> + + + + <p>Get the number of messages that were denied passage through a storage filter.</p> + <p>Number of messages denied by a storage filter.</p> + + + + <p>Get the number of messages currently stored in the message queue.</p> + <p>Number of messages currently stored in the message queue.</p> + + + + <p>Get the number of messages that are able to pass through a retrieval filter.</p> + <p>Number of messages allowed by a retrieval filter.</p> + + + + <p>Get the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{ID3D11InfoQueue::GetMessageCountLimit}}</strong> and <strong>{{ID3D11InfoQueue::SetMessageCountLimit}}</strong>, respectively.</p> + <p>Number of messages discarded.</p> + + + + <p>Get the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.</p> + <p>Maximum number of messages that can be added to the queue. -1 means no limit.</p> + + + + <p>Add storage filters to the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of storage filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the storage filter at the top of the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Storage filter at the top of the storage-filter stack.</p> </dd> + + + <dd> <p>Size of the storage filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the storage filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a storage filter onto the storage-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a storage filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a storage filter from the top of the storage-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the storage-filter stack in bytes.</p> + <p>Size of the storage-filter stack in bytes.</p> + + + + <p>Add storage filters to the top of the retrieval-filter stack.</p> + <p>The following code example shows how to use <strong>{{ID3D11InfoQueue::AddRetrievalFilterEntries}}</strong>:</p><pre> {{D3D11_MESSAGE_CATEGORY}} cats[] = { ..., ..., ... }; +{{D3D11_MESSAGE_SEVERITY}} sevs[] = { ..., ..., ... }; +{{UINT}} ids[] = { ..., ..., ... }; {{D3D11_INFO_QUEUE_FILTER}} filter; +memset( &amp;filter, 0, sizeof(filter) ); // To set the type of messages to allow, +// set filter.AllowList as follows: +filter.AllowList.NumCategories = sizeof(cats / sizeof({{D3D11_MESSAGE_CATEGORY}})); +filter.AllowList.pCategoryList = cats; +filter.AllowList.NumSeverities = sizeof(sevs / sizeof({{D3D11_MESSAGE_SEVERITY}})); +filter.AllowList.pSeverityList = sevs; +filter.AllowList.NumIDs = sizeof(ids) / sizeof({{UINT}}); +filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList +// similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information. +hr = infoQueue-&gt;AddRetrievalFilterEntries( &amp;filter ); +</pre> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Array of retrieval filters (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Get the retrieval filter at the top of the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Retrieval filter at the top of the retrieval-filter stack.</p> </dd> + + + <dd> <p>Size of the retrieval filter in bytes. If pFilter is <strong>{{NULL}}</strong>, the size of the retrieval filter will be output to this parameter.</p> </dd> + + + + + <p>Remove a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Push an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Push a retrieval filter onto the retrieval-filter stack.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to a retrieval filter (see <strong>{{D3D11_INFO_QUEUE_FILTER}}</strong>).</p> </dd> + + + + + <p>Pop a retrieval filter from the top of the retrieval-filter stack.</p> + <p>Returns nothing.</p> + + + + <p>Get the size of the retrieval-filter stack in bytes.</p> + <p>Size of the retrieval-filter stack in bytes.</p> + + + + <p>Add a debug message to the message queue and send that message to debug output.</p> + <p>This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call <strong>{{ID3D11InfoQueue::AddApplicationMessage}}</strong>.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Category of a message (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Unique identifier of a message (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>User-defined message.</p> </dd> + + + + + <p>Add a user-defined message to the message queue and send that message to debug output.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Severity of a message (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + <dd> <p>Message string.</p> </dd> + + + + + <p>Set a message category to break on when a message with that category passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>, which represents a message severity level to break on.</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Set a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>This method returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + <dd> <p>Turns this breaking condition on or off (true for on, false for off).</p> </dd> + + + + + <p>Get a message category to break on when a message with that category passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message category to break on (see <strong>{{D3D11_MESSAGE_CATEGORY}}</strong>).</p> </dd> + + + + + <p>Get a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message severity level to break on (see <strong>{{D3D11_MESSAGE_SEVERITY}}</strong>).</p> </dd> + + + + + <p>Get a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <p>Whether this breaking condition is turned on or off (true for on, false for off).</p> + + + <dd> <p>Message identifier to break on (see <strong>{{D3D11_MESSAGE_ID}}</strong>).</p> </dd> + + + + + <p>Set a boolean that turns the debug output on or off.</p> + <p>This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.</p> + <p>Returns nothing.</p> + + + <dd> <p>Disable/Enable the debug output (<strong>{{TRUE}}</strong> to disable or mute the output, <strong>{{FALSE}}</strong> to enable the output).</p> </dd> + + + + + <p>Get a boolean that turns the debug output on or off.</p> + <p>Whether the debug output is on or off (true for on, false for off).</p> + + + + <p>Indicates the device state.</p> + <p>A state-block mask indicates the device states that a pass or a technique changes.</p> + + + <dd> <p>Boolean value indicating whether to save the vertex shader state. </p> </dd> + + + <dd> <p>Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of vertex-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the hull shader state. </p> </dd> + + + <dd> <p>Array of hull-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of hull-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of hull-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of hull-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the domain shader state. </p> </dd> + + + <dd> <p>Array of domain-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.</p> </dd> + + + <dd> <p>Array of domain-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of domain-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.</p> </dd> + + + <dd> <p>Array of domain-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the geometry shader state. </p> </dd> + + + <dd> <p>Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot. </p> </dd> + + + <dd> <p>Array of geometry-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader state.</p> </dd> + + + <dd> <p>Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot. </p> </dd> + + + <dd> <p>Array of pixel-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the pixel shader unordered access views.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader state.</p> </dd> + + + <dd> <p>Array of compute-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot. </p> </dd> + + + <dd> <p>Array of compute-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.</p> </dd> + + + <dd> <p>Array of compute-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.</p> </dd> + + + <dd> <p>Array of compute-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.</p> </dd> + + + <dd> <p>Boolean value indicating whether to save the compute shader unordered access views.</p> </dd> + + + <dd> <p>Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the index buffer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the input layout state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the primitive topology state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the render targets states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the depth-stencil state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the blend state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the viewports states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the scissor rectangles states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the rasterizer state. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the stream-out buffers states. </p> </dd> + + + <dd> <p>Boolean value indicating whether to save the predication state. </p> </dd> + + + + + <p>Describes an effect-variable type.</p> + <p>{{D3DX11_EFFECT_TYPE_DESC}} is used with <strong>{{ID3DX11EffectType::GetDesc}}</strong> </p> + + + <dd> <p>Name of the type, for example "float4" or "MyStruct".</p> </dd> + + + <dd> <p>The variable class (see <strong>{{D3D10_SHADER_VARIABLE_CLASS}}</strong>). </p> </dd> + + + <dd> <p>The variable type (see <strong>{{D3D10_SHADER_VARIABLE_TYPE}}</strong>).</p> </dd> + + + <dd> <p>Number of elements in this type (0 if not an array).</p> </dd> + + + <dd> <p>Number of members (0 if not a structure).</p> </dd> + + + <dd> <p>Number of rows in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of columns in this type (0 if not a numeric primitive).</p> </dd> + + + <dd> <p>Number of bytes required to represent this data type, when tightly packed.</p> </dd> + + + <dd> <p>Number of bytes occupied by this data type, when laid out in a constant buffer.</p> </dd> + + + <dd> <p>Number of bytes to seek between elements, when laid out in a constant buffer.</p> </dd> + + + + + <p>Describes an effect variable.</p> + <p>{{D3DX11_EFFECT_VARIABLE_DESC}} is used with <strong>{{ID3DX11EffectVariable::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this variable, annotation, or structure member.</p> </dd> + + + <dd> <p>Semantic string of this variable or structure member ({{NULL}} for annotations or if not present).</p> </dd> + + + <dd> <p>Optional flags for effect variables.</p> </dd> + + + <dd> <p>Number of annotations on this variable (always 0 for annotations).</p> </dd> + + + <dd> <p>Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers).</p> </dd> + + + <dd> <p>Used if the variable has been explicitly bound using the register keyword. Check Flags for {{D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT}}.</p> </dd> + + + + + <p>Describes an effect shader.</p> + <p>{{D3DX11_EFFECT_SHADER_DESC}} is used with <strong>{{ID3DX11EffectShaderVariable::GetShaderDesc}}</strong>.</p> + + + <dd> <p>Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See <strong>{{ID3D11Device::CreateInputLayout}}</strong>.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> is the shader is defined inline; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Shader bytecode.</p> </dd> + + + <dd> <p>The length of pBytecode. </p> </dd> + + + <dd> <p>Stream out declaration string (for geometry shader with {{SO}}).</p> </dd> + + + <dd> <p>Indicates which stream is rasterized. {{D3D11}} geometry shaders can output up to four streams of data, one of which can be rasterized.</p> </dd> + + + <dd> <p>Number of entries in the input signature.</p> </dd> + + + <dd> <p>Number of entries in the output signature.</p> </dd> + + + <dd> <p>Number of entries in the patch constant signature.</p> </dd> + + + + + <p>Describes an effect pass, which contains pipeline state.</p> + <p>{{D3DX11_PASS_DESC}} is used with <strong>{{ID3DX11EffectPass::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this pass (<strong>{{NULL}}</strong> if not anonymous).</p> </dd> + + + <dd> <p>Number of annotations on this pass.</p> </dd> + + + <dd> <p>Signature from the vertex shader or geometry shader (if there is no vertex shader) or <strong>{{NULL}}</strong> if neither exists.</p> </dd> + + + <dd> <p>Singature size in bytes.</p> </dd> + + + <dd> <p>The stencil-reference value used in the depth-stencil state.</p> </dd> + + + <dd> <p>The sample mask for the blend state.</p> </dd> + + + <dd> <p>The per-component blend factors ({{RGBA}}) for the blend state.</p> </dd> + + + + + <p>Describes an effect pass.</p> + <p>{{D3DX11_PASS_SHADER_DESC}} is used with <strong>{{ID3DX11EffectPass}}</strong> Get*ShaderDesc methods.</p><p>If this is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. It's name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, pShaderVariable != <strong>{{NULL}}</strong>, but pShaderVariable-&gt;IsValid() == <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The variable that this shader came from.</p> </dd> + + + <dd> <p>The element of pShaderVariable (if an array) or 0 if not applicable.</p> </dd> + + + + + <p>Describes an effect technique.</p> + <p>{{D3DX11_TECHNIQUE_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this technique ({{NULL}} if not anonymous).</p> </dd> + + + <dd> <p>Number of passes contained in the technique.</p> </dd> + + + <dd> <p>Number of annotations on this technique.</p> </dd> + + + + + <p>Describes an effect group.</p> + <p>{{D3DX11_GROUP_DESC}} is used with <strong>{{ID3DX11EffectTechnique::GetDesc}}</strong>.</p> + + + <dd> <p>Name of this group (only <strong>{{NULL}}</strong> if global).</p> </dd> + + + <dd> <p>Number of techniques contained in group.</p> </dd> + + + <dd> <p>Number of annotations on this group.</p> </dd> + + + + + <p>Describes an effect.</p> + <p>{{D3DX11_EFFECT_DESC}} is used with <strong>{{ID3DX11Effect::GetDesc}}</strong>.</p> + + + <dd> <p>Number of constant buffers in this effect.</p> </dd> + + + <dd> <p>Number of global variables in this effect.</p> </dd> + + + <dd> <p>Number of global interfaces in this effect.</p> </dd> + + + <dd> <p>Number of techniques in this effect.</p> </dd> + + + <dd> <p>Number of groups in this effect.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Tests that the effect type is valid.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if it is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get an effect-type description.</p> + <p>The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-type description. See <strong>{{D3DX11_EFFECT_TYPE_DESC}}</strong>.</p> </dd> + + + + + <p>Get a member type by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an member type by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A member's name.</p> </dd> + + + + + <p>Get a member type by semantic.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + <dd> <p>A semantic.</p> </dd> + + + + + <p>Get the name of a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The name of the member.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get the semantic attached to a member.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A string that contains the semantic.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectVariable}}</strong> interface is the base class for all effect variables.</p><p>The lifetime of an <strong>{{ID3DX11EffectVariable}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Compare the data type with the data stored.</p> + <p>This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get type information.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectType}}</strong>.</p> + + + + <p>Get a description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect-variable description (see <strong>{{D3DX11_EFFECT_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Annonations can be attached to a technique, a pass, or a global variable.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The annotation name.</p> </dd> + + + + + <p>Get a structure member by index.</p> + <p>If the effect variable is an structure, use this method to look up a member by index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a structure member by name.</p> + <p>If the effect variable is an structure, use this method to look up a member by name.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a structure member by semantic.</p> + <p>If the effect variable is an structure, use this method to look up a member by attached semantic.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic.</p> </dd> + + + + + <p>Get an array element.</p> + <p>If the effect variable is an array, use this method to return one of the elements.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index; otherwise 0.</p> </dd> + + + + + <p>Get a constant buffer.</p> + <p>Effect variables are read-from or written-to a constant buffer.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a scalar variable.</p> + <p>AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a scalar variable. See <strong>{{ID3DX11EffectScalarVariable}}</strong>.</p> + + + + <p>Get a vector variable.</p> + <p>AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a vector variable. See <strong>{{ID3DX11EffectVectorVariable}}</strong>.</p> + + + + <p>Get a matrix variable.</p> + <p>AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a matrix variable. See <strong>{{ID3DX11EffectMatrixVariable}}</strong>.</p> + + + + <p>Get a string variable.</p> + <p>AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a string variable. See <strong>{{ID3DX11EffectStringVariable}}</strong>.</p> + + + + <p>Get a class-instance variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to class-instance variable. See <strong>{{ID3DX11EffectClassInstanceVariable}}</strong>.</p> + + + + <p>Get an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an interface variable. See <strong>{{ID3DX11EffectInterfaceVariable}}</strong>.</p> + + + + <p>Get a shader-resource variable.</p> + <p>AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader-resource variable. See <strong>{{ID3DX11EffectShaderResourceVariable}}</strong>.</p> + + + + <p>Get an unordered-access-view variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an unordered-access-view variable. See <strong>{{ID3DX11EffectUnorderedAccessViewVariable}}</strong>.</p> + + + + <p>Get a render-target-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a render-target-view variable. See <strong>{{ID3DX11EffectRenderTargetViewVariable}}</strong>.</p> + + + + <p>Get a depth-stencil-view variable.</p> + <p>This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil-view variable. See <strong>{{ID3DX11EffectDepthStencilViewVariable}}</strong>.</p> + + + + <p>Get a constant buffer.</p> + <p>AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a constant buffer. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + + <p>Get a shader variable.</p> + <p>AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a shader variable. See <strong>{{ID3DX11EffectShaderVariable}}</strong>.</p> + + + + <p>Get a effect-blend variable.</p> + <p>AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an effect blend variable. See <strong>{{ID3DX11EffectBlendVariable}}</strong>.</p> + + + + <p>Get a depth-stencil variable.</p> + <p>AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a depth-stencil variable. See <strong>{{ID3DX11EffectDepthStencilVariable}}</strong>.</p> + + + + <p>Get a rasterizer variable.</p> + <p>AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a rasterizer variable. See <strong>{{ID3DX11EffectRasterizerVariable}}</strong>.</p> + + + + <p>Get a sampler variable.</p> + <p>AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.</p><p>Applications can test the returned object for validity by calling <strong>IsValid</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a sampler variable. See <strong>{{ID3DX11EffectSamplerVariable}}</strong>.</p> + + + + <p>Set data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to set.</p> </dd> + + + + + <p>Get data.</p> + <p>This method does no conversion or type checking; it is therefore a very quick way to access array items.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + <dd> <p>The offset (in bytes) from the beginning of the reference to the data.</p> </dd> + + + <dd> <p>The number of bytes to get.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a floating-point variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of floating-point variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get an integer variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of integer variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Get a boolean variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the variable.</p> </dd> + + + + + <p>Set an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of boolean variables.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>A vector-variable interface accesses a four-component vector.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Get a four-component vector that contains floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first component.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Set an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain boolean data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain integer data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Get an array of four-component vectors that contain floating-point data.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the start of the data to set.</p> </dd> + + + <dd> <p>Must be set to 0; this is reserved for future use. </p> </dd> + + + <dd> <p>The number of array elements to set.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Set a floating-point matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in the matrix.</p> </dd> + + + + + <p>Get a matrix.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element in a matrix.</p> </dd> + + + + + <p>Set an array of floating-point matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first matrix.</p> </dd> + + + <dd> <p>The number of matrix elements to skip from the start of the array.</p> </dd> + + + <dd> <p>The number of elements to set.</p> </dd> + + + + + <p>Get an array of matrices.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of the first matrix in an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix returned.</p> </dd> + + + <dd> <p>The number of matrices in the returned array.</p> </dd> + + + + + + + + + + + <p>Transpose and set a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a matrix.</p> </dd> + + + + + <p>Transpose and get a floating-point matrix.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of a transposed matrix.</p> </dd> + + + + + <p>Transpose and set an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to set.</p> </dd> + + + <dd> <p>The number of matrices in the array to set.</p> </dd> + + + + + <p>Transpose and get an array of floating-point matrices.</p> + <p>Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first element of an array of tranposed matrices.</p> </dd> + + + <dd> <p>The offset (in number of matrices) between the start of the array and the first matrix to get.</p> </dd> + + + <dd> <p>The number of matrices in the array to get.</p> </dd> + + + + + + + + + + + <p>A string-variable interface accesses a string variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get the string.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the string.</p> </dd> + + + + + <p>Get an array of strings.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the first string in the array.</p> </dd> + + + <dd> <p>The offset (in number of strings) between the start of the array and the first string to get.</p> </dd> + + + <dd> <p>The number of strings in the returned array.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Gets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11ClassInstance}}</strong> reference that will be set to class instance.</p> </dd> + + + + + <p>Accesses an interface variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Sets a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> interface.</p> </dd> + + + + + <p>Get a class instance.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3DX11EffectClassInstanceVariable}}</strong> reference that will be set to the class instance.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Get a shader resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>Set an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of shader resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of an array of shader-resource-view interfaces. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Accesses an unordered access view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong>.</p> </dd> + + + + + <p>Get an unordered-access-view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set on return.</p> </dd> + + + + + <p>Set an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{ID3D11UnorderedAccessView}}</strong> references.</p> </dd> + + + <dd> <p>Index of the first unordered-access-view.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Get an array of unordered-access-views.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Pointer to an <strong>{{ID3D11UnorderedAccessView}}</strong> reference that will be set to the {{UAV}} array on return. </p> </dd> + + + <dd> <p>Index of the first interface.</p> </dd> + + + <dd> <p>Number of elements in the array.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Get a render-target.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a render-target-view interface. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + + + <p>Set an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Set an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to store the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of render-targets.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of render-target-view interfaces. See <strong>{{ID3D11RenderTargetView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>A depth-stencil-view-variable interface accesses a depth-stencil view.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Set a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Get a depth-stencil-view resource.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a depth-stencil-view interface. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + + + <p>Set an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to set the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Get an array of depth-stencil-view resources.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an array of depth-stencil-view interfaces. See <strong>{{ID3D11DepthStencilView}}</strong>.</p> </dd> + + + <dd> <p>The zero-based array index to get the first interface.</p> </dd> + + + <dd> <p>The number of elements in the array.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Set a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Reverts a previously set constant buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a constant-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a constant-buffer interface. See <strong>{{ID3D11Buffer}}</strong>.</p> </dd> + + + + + <p>Set a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-resource-view interface for accessing a texture buffer.</p> </dd> + + + + + <p>Reverts a previously set texture buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Get a texture-buffer.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to a shader-resource-view interface for accessing a texture buffer. See <strong>{{ID3D11ShaderResourceView}}</strong>.</p> </dd> + + + + + <p>A shader-variable interface accesses a shader variable.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to a shader description (see <strong>{{D3DX11_EFFECT_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11VertexShader}}</strong> reference that will be set to the vertex shader on return.</p> </dd> + + + + + <p>Get a geometry shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11GeometryShader}}</strong> reference that will be set to the geometry shader on return.</p> </dd> + + + + + <p>Get a pixel shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11PixelShader}}</strong> reference that will be set to the pixel shader on return.</p> </dd> + + + + + <p>Get a hull shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the shader.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11HullShader}}</strong> reference that will be set to the hull shader on return.</p> </dd> + + + + + <p>Get a domain shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the domain shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DomainShader}}</strong> reference that will be set to the domain shader on return.</p> </dd> + + + + + <p>Get a compute shader.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index of the compute shader.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11ComputeShader}}</strong> reference that will be set to the compute shader on return.</p> </dd> + + + + + <p>Get an input-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based shader-element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an output-signature description.</p> + <p>An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index.</p> </dd> + + + <dd> <p>A zero-based element index.</p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a patch constant signature description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based shader index. </p> </dd> + + + <dd> <p>A zero-based element index. </p> </dd> + + + <dd> <p>A reference to a parameter description (see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>).</p> </dd> + + + + + <p>The blend-variable interface accesses blend state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a blend-state interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11BlendState}}</strong>).</p> </dd> + + + + + <p>Sets an effect's blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + <dd> <p>A reference to an <strong>{{ID3D11BlendState}}</strong> interface containing the blend-state to set.</p> </dd> + + + + + <p>Reverts a previously set blend-state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.</p> </dd> + + + + + <p>Get a reference to a blend-state variable.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a blend-state description (see <strong>{{D3D11_BLEND_DESC}}</strong>).</p> </dd> + + + + + <p>A depth-stencil-variable interface accesses depth-stencil state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a depth-stencil interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a blend-state interface (see <strong>{{ID3D11DepthStencilState}}</strong>).</p> </dd> + + + + + <p>Sets the depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11DepthStencilState}}</strong> interface containing the new depth stencil state.</p> </dd> + + + + + <p>Reverts a previously set depth stencil state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.</p> </dd> + + + + + <p>Get a reference to a variable that contains depth-stencil state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a depth-stencil-state description (see <strong>{{D3D11_DEPTH_STENCIL_DESC}}</strong>).</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a rasterizer interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a rasterizer interface (see <strong>{{ID3D11RasterizerState}}</strong>).</p> </dd> + + + + + <p>Sets the rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11RasterizerState}}</strong> interface.</p> </dd> + + + + + <p>Reverts a previously set rasterizer state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains rasteriser state.</p> + <p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a rasteriser-state description (see <strong>{{D3D11_RASTERIZER_DESC}}</strong>).</p> </dd> + + + + + <p>A sampler interface accesses sampler state.</p> + <p>An <strong>{{ID3DX11EffectVariable}}</strong> interface is created when an effect is read into memory.</p><p>Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Get a reference to a sampler interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0.</p> </dd> + + + <dd> <p>The address of a reference to a sampler interface (see <strong>{{ID3D11SamplerState}}</strong>).</p> </dd> + + + + + <p>Set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3D11SamplerState}}</strong> interface containing the sampler state.</p> </dd> + + + + + <p>Revert a previously set sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler interfaces. If there is only one sampler interface, use 0. </p> </dd> + + + + + <p>Get a reference to a variable that contains sampler state.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.</p> </dd> + + + <dd> <p>A reference to a sampler description (see <strong>{{D3D11_SAMPLER_DESC}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectPass}}</strong> interface encapsulates state assignments within a technique.</p><p>The lifetime of an <strong>{{ID3DX11EffectPass}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique.</p><p>To get an effect-pass interface, call a method like <strong>{{ID3DX11EffectTechnique::GetPassByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a pass to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a pass description.</p> + <p>A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pass description (see <strong>{{D3DX11_PASS_DESC}}</strong>).</p> </dd> + + + + + <p>Get a vertex-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a vertex-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a geometry-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a geometry-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a pixel-shader description.</p> + <p>An effect pass can contain render state assignments and shader object assignments.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a pixel-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get hull-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a hull-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a domain-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a domain-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get a compute-shader description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a compute-shader description (see <strong>{{D3DX11_PASS_SHADER_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Set the state contained in a pass to the device.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Unused.</p> </dd> + + + <dd> <p>The <strong>{{ID3D11DeviceContext}}</strong> to apply the pass to.</p> </dd> + + + + + <p>Generate a mask for allowing/preventing state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>An <strong>{{ID3DX11EffectTechnique}}</strong> interface is a collection of passes.</p><p>The lifetime of an <strong>{{ID3DX11EffectTechnique}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments.</p><p>To get an effect-technique interface, call a method such as <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test a technique to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get a technique description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a technique description (see <strong>{{D3DX11_TECHNIQUE_DESC}}</strong>).</p> </dd> + + + + + <p>Get an annotation by index.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The zero-based index of the interface reference.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <p>Use an annotation to attach a piece of metadata to a technique.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>Name of the annotation.</p> </dd> + + + + + <p>Get a pass by index.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a pass by name.</p> + <p>A technique contains one or more passes; get a pass using a name or an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectPass}}</strong>.</p> + + + <dd> <p>The name of the pass.</p> </dd> + + + + + <p>Compute a state-block mask to allow/prevent state changes.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a state-block mask (see <strong>{{D3DX11_STATE_BLOCK_MASK}}</strong>).</p> </dd> + + + + + <p>The <strong>{{ID3DX11EffectGroup}}</strong> interface accesses an Effect group.</p><p>The lifetime of an <strong>{{ID3DX11EffectGroup}}</strong> object is equal to the lifetime of its parent <strong>{{ID3DX11Effect}}</strong> object.</p><ul> <li>{{Methods}}</li> </ul> + <p>To get an <strong>{{ID3DX11EffectGroup}}</strong> interface, call a method like <strong>{{ID3DX11Effect::GetGroupByName}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Gets a group description.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3DX11_GROUP_DESC}}</strong> structure.</p> </dd> + + + + + <p>Get an annotation by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Pointer to an <strong>{{ID3DX11EffectVariable}}</strong> interface.</p> + + + <dd> <p>Index of the annotation.</p> </dd> + + + + + <p>Get an annotation by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Note that if the annotation is not found the <strong>{{ID3DX11EffectVariable}}</strong> returned will be empty. The <strong>{{ID3DX11EffectVariable::IsValid}}</strong> method should be called to determine whether the annotation was found.</p> + + + <dd> <p>The name of the annotation.</p> </dd> + + + + + <p>Get a technique by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>, or <strong>{{NULL}}</strong> if the technique is not found.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>An <strong>{{ID3DX11Effect}}</strong> interface manages a set of state objects, resources, and shaders for implementing a rendering effect.</p> + <p>An effect is created by calling <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><p>The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.?<strong>Note</strong>??<p>If you call <strong>QueryInterface</strong> on an <strong>{{ID3DX11Effect}}</strong> object to retrieve the <strong>{{IUnknown}}</strong> interface, <strong>QueryInterface</strong> returns {{E_NOINTERFACE}}. To work around this issue, use the following code:</p> <pre> {{IUnknown}}* pIUnknown = ({{IUnknown}}*)pEffect; pIUnknown-&gt;AddRef(); +</pre>? + + + + <p>Test an effect to see if it contains valid syntax.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the code syntax is valid; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Get the device that created the effect.</p> + <p>An effect is created for a specific device, by calling a function such as <strong>{{D3DX11CreateEffectFromMemory}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an <strong>{{ID3D11Device}}</strong>.</p> </dd> + + + + + <p>Get an effect description.</p> + <p>An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to an effect description (see <strong>{{D3DX11_EFFECT_DESC}}</strong>).</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the constant buffer indicated by the Name. See <strong>{{ID3DX11EffectConstantBuffer}}</strong>.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a variable by index.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the index exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to a <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a variable by name.</p> + <p>An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> whether or not a variable is found. <strong>{{ID3DX11Effect::IsValid}}</strong> should be called to verify whether or not the name exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectVariable}}</strong>. Returns an invalid variable if the specified name cannot be found.</p> + + + <dd> <p>The variable name.</p> </dd> + + + + + <p>Get a variable by semantic.</p> + <p>Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.</p><p>The method returns a reference to an <strong>effect-variable interface</strong> if a variable is not found; you can call <strong>{{ID3DX11Effect::IsValid}}</strong> to verify whether or not the semantic exists.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to the effect variable indicated by the Semantic. See <strong>{{ID3DX11EffectVariable}}</strong>.</p> + + + <dd> <p>The semantic name.</p> </dd> + + + + + <p>Gets an effect group by index.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Index of the effect group.</p> </dd> + + + + + <p>Gets an effect group by name.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectGroup}}</strong> interface.</p> + + + <dd> <p>Name of the effect group.</p> </dd> + + + + + <p>Get a technique by index.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. </p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>.</p> + + + <dd> <p>A zero-based index.</p> </dd> + + + + + <p>Get a technique by name.</p> + <p>An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>A reference to an <strong>{{ID3DX11EffectTechnique}}</strong>. If a technique with the appropriate name is not found an invalid technique is returned. <strong>{{ID3DX11EffectTechnique::IsValid}}</strong> should be called on the returned technique to determine whether it is valid.</p> + + + <dd> <p>The name of the technique.</p> </dd> + + + + + <p>Gets a class linkage interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns a reference to an <strong>{{ID3D11ClassLinkage}}</strong> interface.</p> + + + + <p>Creates a copy of an effect interface.</p> + <strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>Flags affecting the creation of the cloned effect. Can be 0 or one of the following values.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DX11_EFFECT_CLONE_FORCE_NONSINGLE}}</td><td>Ignore all "single" qualifiers on cbuffers. All cbuffers will have their own <strong>{{ID3D11Buffer}}</strong>s created in the cloned effect.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ID3DX11Effect}}</strong> reference that will be set to the copy of the effect.</p> </dd> + + + + + <p>Minimize the amount of memory required for an effect.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. {{API}} methods to read variables will no longer work once reflection data has been removed.</p><p>The following methods will fail after Optimize has been called on an effect.</p><ul> <li> <strong>{{ID3DX11Effect::GetConstantBufferByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetConstantBufferByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDesc}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetDevice}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetTechniqueByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByIndex}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableByName}}</strong> </li> <li> <strong>{{ID3DX11Effect::GetVariableBySemantic}}</strong> </li> </ul><strong>Note</strong>??References retrieved with these methods before calling <strong>{{ID3DX11Effect::Optimize}}</strong> are still valid after <strong>{{ID3DX11Effect::Optimize}}</strong> is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.?<strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + + <p>Test an effect to see if the reflection metadata has been removed from memory.</p> + <p>An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the {{API}}. You can minimize the amount of memory required by an effect by calling <strong>{{ID3DX11Effect::Optimize}}</strong> which removes the reflection metadata from memory. Of course, {{API}} methods to read variables will no longer work once reflection data has been removed.</p><strong>Note</strong>??The DirectX {{SDK}} does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p><strong>{{TRUE}}</strong> if the effect is optimized; otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Creates an effect from a binary effect or file.</p> + <strong>Note</strong>??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + <p>The return value is one of the values listed in Direct3D 11 Return Codes.</p> + + + <dd> <p>Blob of compiled effect data.</p> </dd> + + + <dd> <p>Length of the data blob.</p> </dd> + + + <dd> <p>No effect flags exist. Set to zero.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{ID3D11Device}}</strong> on which to create Effect resources.</p> </dd> + + + <dd> <p>Address of the newly created <strong>{{ID3DX11Effect}}</strong> interface.</p> </dd> + + + + + <p> Defines results for animation updates.</p> + + + <dd> <p> No animation variables have changed.</p> </dd> + + + <dd> <p> One or more animation variables has changed.</p> </dd> + + + + + <p> Defines the activity status of an animation manager.</p> + + + <dd> <p> The animation manager is idle; no animations are currently playing.</p> </dd> + + + <dd> <p> The animation manager is busy; at least one animation is currently playing or scheduled.</p> </dd> + + + + + <p> Defines animation modes.</p> + + + <dd> <p> Animation is disabled.</p> </dd> + + + <dd> <p> The animation mode is managed by the system.</p> </dd> + + + <dd> <p> Animation is enabled.</p> </dd> + + + + + <p>Defines the pattern for a loop iteration.</p> + + + <dd> <p>The start of a loop begins with the first value (v1-&gt;v2, v1-&gt;v2, v1-&gt;v2, and so on).</p> </dd> + + + <dd> <p>The start of a loop alternates between values (v1-&gt;v2, v2-&gt;v1, v1-&gt;v2, and so on).</p> </dd> + + + + + <p> Defines the rounding modes to be used when the value of an animation variable is converted from a floating-point type to an integer type.</p> + + + <dd> <p> Round to the nearest integer.</p> </dd> + + + <dd> <p> Round down.</p> </dd> + + + <dd> <p> Round up.</p> </dd> + + + + + <p> Defines the status for a storyboard.</p> + <p>Unless <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, it returns only the following status values:</p><ul> <li>{{UI_ANIMATION_STORYBOARD_BUILDING}}</li> <li>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</li> <li>{{UI_ANIMATION_STORYBOARD_PLAYING}}</li> <li>{{UI_ANIMATION_STORYBOARD_READY}}</li> </ul><p>All status values can be passed to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p><p>The following diagram illustrates the transitions between these states.</p><p></p> + + + <dd> <p> The storyboard has never been scheduled.</p> </dd> + + + <dd> <p> The storyboard is scheduled to play.</p> </dd> + + + <dd> <p> The storyboard was canceled.</p> </dd> + + + <dd> <p> The storyboard is currently playing.</p> </dd> + + + <dd> <p> The storyboard was truncated.</p> </dd> + + + <dd> <p> The storyboard has finished playing.</p> </dd> + + + <dd> <p> The storyboard is built and ready for scheduling.</p> </dd> + + + <dd> <p> Scheduling the storyboard failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority.</p> </dd> + + + + + <p> Defines results for storyboard scheduling.</p> + <p> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> returns {{UI_ANIMATION_SCHEDULING_DEFERRED}} only if the application attempts to schedule a storyboard during a callback to <strong>{{IUIAnimationStoryboardEventHandler::OnStoryboardStatusChanged}}</strong>.</p> + + + <dd> <p> Scheduling failed for an unexpected reason.</p> </dd> + + + <dd> <p> Scheduling failed because a scheduling conflict occurred and the currently scheduled storyboard has higher priority. For more information, see <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>.</p> </dd> + + + <dd> <p> Scheduling failed because the storyboard is already scheduled.</p> </dd> + + + <dd> <p> Scheduling succeeded.</p> </dd> + + + <dd> <p> Scheduling is deferred and will be attempted when the current callback completes.</p> </dd> + + + + + <p> Defines potential effects on a storyboard if a priority comparison returns false.</p> + <p>This enumeration is used as the <em>priorityEffect</em> parameter of <strong>{{IUIAnimationPriorityComparison::HasPriority}}</strong>, informing the client of the potential effect on the storyboard to be scheduled when the return value is false ({{S_FALSE}}). {{UI_ANIMATION_PRIORITY_EFFECT_FAILURE}} means that the attempt to schedule the storyboard might fail if the return value is false. {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}} means that the attempt to schedule the storyboard will succeed, but if the return value is false, the storyboard could play later than it would otherwise.</p><p> This enumeration can help an application decide how aggressive to be about reducing latency in the {{UI}}. For example, if the application returns true when the effect is {{UI_ANIMATION_PRIORITY_EFFECT_DELAY}}, then other animations might get canceled or compressed even though doing so was not strictly necessary to play a new animation within the application-specified longest acceptable delay.</p> + + + <dd> <p> This storyboard might not be successfully scheduled.</p> </dd> + + + <dd> <p> The storyboard will be scheduled, but might start playing later.</p> </dd> + + + + + <p> Defines animation slope characteristics.</p> + + + <dd> <p> An increasing slope.</p> </dd> + + + <dd> <p> A decreasing slope.</p> </dd> + + + + + <p>Defines which aspects of an interpolator depend on a given input.</p> + <p>Multiple <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> values can be combined using a bitwise-{{OR}} operation.</p> + + + <dd> <p>No aspect depends on the input.</p> </dd> + + + <dd> <p>The intermediate values depend on the input.</p> </dd> + + + <dd> <p>The final value depends on the input.</p> </dd> + + + <dd> <p>The final velocity depends on the input.</p> </dd> + + + <dd> <p>The duration depends on the input.</p> </dd> + + + + + <p> Defines the behavior of a timer when the animation manager is idle.</p> + + + <dd> <p> The timer continues to generate timer events (is enabled) when the animation manager is idle.</p> </dd> + + + <dd> <p> The timer is suspended (disabled) when the animation manager is idle. </p> </dd> + + + + + <p> Defines activity status for a timer's client.</p> + + + <dd> <p> The client is idle.</p> </dd> + + + <dd> <p> The client is busy.</p> </dd> + + + + + + + + <p> Defines the animation manager, which provides a central interface for creating and managing animations.</p> + <p><strong>{{IUIAnimationManager}}</strong> defines a central control object for animations. A single instance of <strong>{{IUIAnimationManager}}</strong> is typically used to compose, schedule, and manage all animations for a client application.</p><p> <strong>{{IUIAnimationVariable}}</strong>, <strong>{{IUIAnimationTransition}}</strong>, and <strong>{{IUIAnimationStoryboard}}</strong> are the primary components for building animations. Use <strong>{{IUIAnimationManager}}</strong> to create and manage these components.</p> + + + + <p> Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the new animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p> Creates a new storyboard.</p> + <p>Storyboards can specify complex coordinated updates to many animation variables. These updates happen in sequence or in parallel, and they are guaranteed to remain synchronized within the storyboard. A storyboard is created, populated with transitions on animation variables, and then scheduled. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling <strong>FinishAllStoryboards</strong> ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. A storyboard is considered active if its status is <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changing statuses of storyboards as necessary and updating any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. <strong>{{NULL}}</strong> is a valid object component of a tag; therefore, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>This method is used to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks section for more information.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it has not started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable once the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when the scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Sets the priority comparison handler to be called to determine whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the reminder of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable.</p> </dd> + + + + + <p> Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>The result can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable.</p> </dd> + + + + + <p> Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>The results can be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable.</p> </dd> + + + + + <p> Gets the current value of the animation variable as an integer.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the final value of the animation variable as an integer. This is the value after all currently scheduled animations have completed.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The final value of the animation variable cannot be determined at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The final value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the previous value of the animation variable as an integer. This is the value of the animation variable before the most recent update.</p> + <p>To specify the rounding mode to be used when converting the value, use the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p>The result can also be affected by the lower and upper bounds determined by <strong>{{IUIAnimationVariable::SetLowerBound}}</strong> and <strong>{{IUIAnimationVariable::SetUpperBound}}</strong>, respectively.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The previous value of the animation variable, converted to an <strong>{{INT32}}</strong> value.</p> </dd> + + + + + <p> Gets the storyboard that is currently animating the animation variable.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The current storyboard, or <strong>{{NULL}}</strong> if no storyboard is currently animating the animation variable.</p> </dd> + + + + + <p> Sets the lower bound (floor) for the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The lower bound for the animation variable.</p> </dd> + + + + + <p> Sets an upper bound (ceiling) for the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The upper bound for the animation variable.</p> </dd> + + + + + <p> Specifies the rounding mode for the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The rounding mode for the animation variable.</p> </dd> + + + + + <p> Sets the tag for an animation variable.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for an animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The animation variable's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Specifies a variable change handler. This handler is notified of changes to the value of the animation variable.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableChangeHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Specifies an integer variable change handler. This handler is notified of changes to the integer value of the animation variable.</p> + <p>Passing {{NULL}} for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Winodws Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> An integer variable change handler. The specified object must implement the <strong>{{IUIAnimationVariableIntegerChangeHandler}}</strong> interface or be {{NULL}}. See Remarks.</p> </dd> + + + + + <p> Defines a storyboard, which contains a group of transitions that are synchronized relative to one another.</p> + <p><strong>{{IUIAnimationStoryboard}}</strong> is a primary component for building animations, along with <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationTransition}}</strong>. </p> + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong> Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p> Creates a loop between two specified keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_END_KEYFRAME_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>It might not be possible to determine the end keyframe time when the start keyframe is reached.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_LOOPS_OVERLAP}}</strong></dt> </dl> </td><td> <p>Two repeated portions of a storyboard might overlap.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p> The keyframe at which the loop is to end. It must not be posssible for <em>endKeyframe</em> to occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p> The number of times the loop is to be repeated; this parameter must be 0 or a positive number. Use <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) to repeat the loop indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For a storyboard to be successfully scheduled, it must begin before the longest acceptable delay has elapsed. This delay is determined in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes. </p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to attempt to add itself to the schedule of playing storyboards. The rules are as follows:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard begins playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. This parameter can be omitted from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of a keyframe loop iteration, the loop is terminated and the loop value is set to the starting loop value.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>The parameters are optional so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard's tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler to be called whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Defines a transition, which determines how an animation variable changes over time.</p> + <p><strong>{{IUIAnimationTransition}}</strong> is one of the primary interfaces used to add animation to an application, along with the <strong>{{IUIAnimationVariable}}</strong> and <strong>{{IUIAnimationStoryboard}}</strong> interfaces.</p><p> <strong>{{UIAnimationTransitionLibrary}}</strong> implements a library of standard transitions.</p> + + + + <p> Sets the initial value for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p> Sets the initial velocity for the transition.</p> + <p>This method should not be called after the transition has been added to a storyboard.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Determines whether a transition's duration is currently known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p> Returns {{S_OK}} if the duration is known, {{S_FALSE}} if the duration is not known, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in schedule.</p> </td></tr> </table><p>?</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> method before calling this method. This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_DETERMINED}}</strong></dt> </dl> </td><td> <p>The requested value for the duration cannot be determined.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_ACTIVE}}</strong></dt> </dl> </td><td> <p>The storyboard for this transition is currently in the schedule.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling status updates to an animation manager.</p> + + + + <p> Handles status changes to an animation manager.</p> + <p>A call made in this callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Defines a method for handling events related to animation variable updates.</p> + <p> <strong> OnValueChanged</strong> receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use <strong>{{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong>.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged}}</strong> method.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling animation variable update events.</p> + <p> <strong> OnIntegerValueChanged</strong> receives animation variable value updates as <strong>{{INT32}}</strong> values. To receive value updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + + + + <p> Handles events that occur when the value of an animation variable changes.</p><p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>{{IUIAnimationVariableChangeHandler::OnValueChanged}}</strong> method.</p> + <p>The rounding mode for an animation variable is specified using the <strong>{{IUIAnimationVariable::SetRoundingMode}}</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines methods for handling status and update events for a storyboard.</p> + + + + <p> Handles events that occur when a storyboard's status changes.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::SetTag}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard whose status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p> Handles events that occur when a storyboard is updated.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}}</strong> </li> </ul> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p> Defines a method for priority comparison that the animation manager uses to resolve scheduling conflicts.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p> + + + + <p> Determines whether a new storyboard has priority over a scheduled storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call <strong>HasPriority</strong> on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}}</strong> </li> </ul> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified in <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates an instantaneous transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The figure below shows the effect on an animation variable over time during an instantaneous transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The figure below shows the effect on an animation variable over time during a constant-duration transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The figure below shows the effect on an animation variable over time during a discrete transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The figure below shows the effect on an animation variable over time during a linear-speed transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal-velocity transition, with an amplitude determined by the initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-velocity transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave in seconds.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range transition, with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The figure below shows the effect on an animation variable over time during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave, in seconds.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise with the deceleration ratio. If the initial velocity is nonzero, it is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The figures below show the effect on animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the above figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of the time spent accelerating to the duration.</p> </dd> + + + <dd> <p> The ratio of the time spent decelerating to the duration.</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The figure below shows such a reversal transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to a specified final value over the duration of the transition, ending at a specified velocity.</p><p>The figure below shows the effect on an animation variable over time during a cubic transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches it with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The figure below shows the effect on an animation variable over time during a smooth-stop transition.</p><p></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The figure below shows the effect on an animation variable over time during a parabolic-acceleration transition.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Defines methods for creating a custom interpolator.</p> + <p>Client applications can use the transitions provided in <strong>{{IUIAnimationTransitionLibrary}}</strong> or in a library provided by a third party; however, if you need custom behavior, you can create your own transitions by implementing the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements <strong>{{IUIAnimationTransition}}</strong> by calling the <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong> method and passing in the custom interpolator. After the interpolator is wrapped, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> interface.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return <strong>{{IUIAnimationTransition}}</strong> interfaces.</p> + + + + <p>Sets the initial value and velocity at the start of the transition.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator}}</strong> at different offsets. However, it can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + + + <p> Sets the duration of the transition.</p> + <p>Windows Animation calls this method only after calling the <strong>GetDependencies</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency will have a duration parameter in its associated creation method of <strong>{{IUIAnimationTransitionFactory}}</strong>. The interpolator should store its duration when first initialized and overwrite it when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + + + <p> Interpolates the value of an animation variable at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + + + <p> Interpolates the velocity, or rate of change, at the specified offset.</p> + <p>Windows Animation always calls the <strong>SetInitialValueAndVelocity</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p> The interpolated velocity.</p> </dd> + + + + + <p> Gets the aspects of the interpolator that depend on the initial value or velocity passed to <strong>SetInitialValueAndVelocity</strong>, or that depend on the duration passed to <strong>SetDuration</strong>.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator (1) that accepts a final value as a parameter, (2) that always comes to a gradual stop at that final value, and (3) whose duration is determined by the difference between the final and initial values. The interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for <em>initialValueDependencies</em>. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> because this is set when the interpolator is created and is not affected by the initial value. Likewise it should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong> because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter what velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong> because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for creating transitions from custom interpolators.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that it can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong>.</p> + + + + <p> Creates a transition from a custom interpolator.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator}}</strong> interface.</p> </dd> + + + <dd> <p> The new transition.</p> </dd> + + + + + <p> Defines an animation timer, which provides services for managing animation timing.</p> + <p>A timer helps to manage animation rendering by automatically indicating the passage of a small unit of time, called a tick. In turn, ticks can trigger animation rendering or other animation events. Each animation timer provides timing for a single animation manager.</p><p>The timing system is designed to provide the necessary timing services needed to support animations and does not require applications to play an explicit role in generating the ticks. The animation timer can be set up to automatically update the animation manager for each tick without application-side handling.</p><p>An application may not need to use a timer with Windows Animation, depending on the graphics platform it is using. For example, an application drawing with Direct2D or Direct3D can synchronize to monitor's refresh rate, yielding very smooth animation. However, such applications may still find the <strong>{{IUIAnimationTimer}}</strong> interface useful for its <strong>GetTime</strong> method, which returns an accurate system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + + + + <p> Specifies a timer update handler.</p> + <p> The timer update handler receives time updates (ticks) from the timer. The timer indicates an update by calling the <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> method on the specified handler.</p><p>Passing <strong>{{NULL}}</strong> for the <em>updateHandler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. If the update handler is already connected to a timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer update handler, or <strong>{{NULL}}</strong> (see Remarks). The specified object must implement the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> interface.</p> </dd> + + + <dd> <p> A member of <strong>{{UI_ANIMATION_IDLE_BEHAVIOR}}</strong> that specifies the behavior of the timer when it is idle.</p> </dd> + + + + + <p> Specifies a timer event handler.</p> + <p> Timing events include the <strong>OnPreUpdate</strong>, <strong>OnPostUpdate</strong>, and <strong>OnRenderingTooSlow</strong> methods of the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface.</p><p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager::Shutdown}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A timer event handler. The specified object must implement the <strong>{{IUIAnimationTimerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p> Enables the animation timer.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Disables the animation timer.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Determines whether the timer is currently enabled.</p> + <p> Returns {{S_OK}} if the animation timer is enabled, {{S_FALSE}} if the animation timer is disabled, or an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the current time.</p> + <p> This method can be used in both the application-driven and timer-driven configurations to retrieve the system time in <strong>{{UI_ANIMATION_SECONDS}}</strong>, the units used throughout the Windows Animation {{API}}.</p> + <p> If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See Windows Animation Error Codes for a list of error codes.</p> + + + <dd> <p> The current time, in <strong>{{UI_ANIMATION_SECONDS}}</strong>.</p> </dd> + + + + + <p> Sets the frame rate below which the timer notifies the application that rendering is too slow.</p> + <p> If the rendering frame rate for an animation falls below the specified frame rate, an <strong>{{IUIAnimationTimerEventHandler::OnRenderingTooSlow}}</strong> event is raised.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The minimum desirable frame rate, in frames per second.</p> </dd> + + + + + <p> Defines methods for handling timing update events.</p> + <p>The <strong>{{UIAnimationManager}}</strong> object implements this interface, so a client application can query the <strong>{{UIAnimationManager}}</strong> object for this interface and then pass the interface to <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>. It is not necessary to disconnect the <strong>{{UIAnimationManager}}</strong> and <strong>{{UIAnimationTimer}}</strong> objects; releasing them both is sufficient to clean up.</p> + + + + <p> Handles update events from the timer.</p> + <p>This method is used by the <strong>{{UIAnimationTimer}}</strong> object to update the state of the <strong>{{UIAnimationManager}}</strong> object. The <strong>{{UIAnimationTimer}}</strong> object calls <strong>{{UIAnimationTimerEventHandler::OnPostUpdate}}</strong> only when calls to this method return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current timer time, in seconds.</p> </dd> + + + <dd> <p> Receives a member of the <strong>{{UI_ANIMATION_UPDATE_RESULT}}</strong> enumeration, indicating whether any animation variables changed as a result of the update.</p> </dd> + + + + + <p> Specifies a handler for timer client status change events.</p> + <p>If the update handler is already connected to the timer, this method returns <strong>{{UI_E_TIMER_CLIENT_ALREADY_CONNECTED}}.</strong></p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> A handler for timer client events. The specified object must implement <strong>{{IUIAnimationTimerUpdateHandler}}</strong>. </p> </dd> + + + + + <p> Clears the handler for timer client status change events.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Defines a method for handling events related to changes in timer client status.</p> + + + + <p> Handles events that occur when the status of the timer's client changes.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new status of the timer's client.</p> </dd> + + + <dd> <p> The previous status of the timer's client.</p> </dd> + + + + + <p> Defines methods for handling timing events.</p> + <p> Use <strong> SetTimerEventHandler</strong> to specify the timing events handler for an instance of <strong>{{IUIAnimationTimer}}</strong>. </p> + + + + <p> Handles events that occur before an animation update begins.</p> + <p>For each tick, a timer calls the following sequence of methods:</p><ul> <li><strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong></li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong> </li> </ul><p><strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong> method. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with the <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur after an animation update is finished.</p> + <p>The <strong>{{UIAnimationTimer}}</strong> object calls this method only when calls to <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> return a result of <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>.</p><p>For each tick, a timer calls the following sequence of methods:</p><ul> <li> <strong>{{IUIAnimationTimerEventHandler::OnPreUpdate}}</strong> </li> <li> <strong>{{IUIAnimationTimerUpdateHandler::OnUpdate}}</strong> </li> <li><strong>{{IUIAnimationTimerEventHandler::OnPostUpdate}}</strong></li> </ul><p> <strong>OnPreUpdate</strong> and <strong>OnPostUpdate</strong> are called on the <strong>{{IUIAnimationTimerEventHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerEventHandler}}</strong>. <strong>OnUpdate</strong> is called on the <strong>{{IUIAnimationTimerUpdateHandler}}</strong> registered with <strong>{{IUIAnimationTimer::SetTimerUpdateHandler}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + + <p> Handles events that occur when the rendering frame rate for an animation falls below a minimum desirable frame rate. </p> + <p> The minimum desirable frame rate is specified using the <strong>{{IUIAnimationTimer::SetFrameRateThreshold}}</strong> method.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>{{UIAnimation}} Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current frame rate, in frames per second.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p>Creates a new animation variable for each specified dimension.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create three animation variables for the X, Y, and Z coordinates of an object that can move freely within a a three-dimensional space.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) of initial values for the animation variable.</p> </dd> + + + <dd> <p>The number of dimensions that require animated values. This parameter specifies the number of values listed in <em>initialValue</em>.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p>Creates a new animation variable.</p> + <p>The initial value of an animation variable is specified when the variable is created. After an animation variable is created, its value cannot be changed directly; it must be updated through the animation manager.</p><p>An animation variable is typically created to represent each visual characteristic that is to be animated. For example, an application might create two animation variables for the X and Y coordinates of an object that can move freely within a window.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The initial value for the animation variable.</p> </dd> + + + <dd> <p> The new animation variable.</p> </dd> + + + + + <p> Creates and schedules a single-transition storyboard.</p> + <p>This method schedules a new storyboard by creating the storyboard, applying the specified transition to the specified variable, and then scheduling the storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + <dd> <p> A transition to be applied to the animation variable.</p> </dd> + + + <dd> <p> The current system time.</p> </dd> + + + + + <p>Creates a new storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The new storyboard.</p> </dd> + + + + + <p> Finishes all active storyboards within the specified time interval.</p> + <p> Calling the <strong>FinishAllStoryboards</strong> method ensures that all active storyboards finish within the specified completion deadline. If a storyboard is scheduled to play past the deadline, it is compressed.</p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum time interval during which all storyboards must be finished.</p> </dd> + + + + + <p> Abandons all active storyboards.</p> + <p>Calling this method is equivalent to calling the <strong>{{IUIAnimationStoryboard::Abandon}}</strong> method for each active storyboard. </p><p>A storyboard is considered active if a call to the <strong>{{IUIAnimationStoryboard::GetStatus}}</strong> method returns <strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Updates the values of all animation variables.</p> + <p>Calling this method advances the animation manager to <em>timeNow</em>, changes the status of all storyboards as necessary, and updates any animation variables to appropriate interpolated values. If the animation manager is paused, no storyboards or variables are updated. If the animation mode is <strong>{{UI_ANIMATION_MODE_DISABLED}}</strong>, all scheduled storyboards finish playing immediately. If the values of any variables change during this call, the value of <em>updateResult</em> is <strong>{{UI_ANIMATION_UPDATE_VARIABLES_CHANGED}}</strong>; otherwise, it is <strong>{{UI_ANIMATION_UPDATE_NO_CHANGE}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current system time. This parameter must be greater than or equal to 0.0.</p> </dd> + + + <dd> <p>The result of the update. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Gets the animation variable with the specified tag.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns <strong>{{UI_E_AMBIGUOUS_MATCH}}</strong> if more than one animation variable exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The animation variable that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p> Gets the storyboard with the specified tag.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). An application can use tags to identify animation variables and storyboards. {{NULL}} is a valid object component of a tag; therefore, the <em>object</em> parameter can be {{NULL}}.</p><p>Tags are not necessarily unique; this method returns {{UI_E_AMBIGUOUS_MATCH}} if more than one storyboard exists with the specified tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + <dd> <p> The storyboard that matches the specified tag, or <strong>{{NULL}}</strong> if no match is found.</p> </dd> + + + + + <p>Retrieves an estimate of the time interval before the next animation event.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The estimated time, in seconds.</p> </dd> + + + + + <p> Gets the status of the animation manager.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The status of the animation manager.</p> </dd> + + + + + <p> Sets the animation mode.</p> + <p>Use this method to enable or disable animation globally. While animation is disabled, all storyboards finish immediately when they are scheduled. The default mode is <strong>{{UI_ANIMATION_MODE_SYSTEM_DEFAULT}}</strong>, which lets Windows decide when to enable or disable animation in the application.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation mode.</p> </dd> + + + + + <p> Pauses all animations.</p> + <p> When an animation manager is paused, its status is set to <strong>{{UI_ANIMATION_MANAGER_IDLE}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Resumes all animations.</p> + <p> When an animation manager is resumed, and at least one animation is currently scheduled or playing, its status is set to <strong>{{UI_ANIMATION_MANAGER_BUSY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Specifies a handler for animation manager status updates.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The event handler to be called when the status of the animation manager changes. The specified object must implement the <strong>{{IUIAnimationManagerEventHandler}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be canceled.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by canceling storyboards.</p><p>A scheduled storyboard can be canceled only if it hasn't started playing and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. Canceled storyboards are completely removed from the schedule.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any priority comparison handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for cancelation. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be trimmed.</p> + <p> Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by trimming the scheduled storyboard.</p><p>A scheduled storyboard can be trimmed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the new storyboard trims the scheduled storyboard, the scheduled storyboard can no longer affect a variable after the new storyboard begins to animate that variable.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The priority comparison handler for trimming. The specified object must implement the <strong>{{IUIAnimationPriorityComparison}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be compressed.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by compressing the scheduled storyboard and any other storyboards animating the same variables.</p><p>A storyboard can be compressed only if the priority comparison object registered with this method returns <strong>{{S_OK}}</strong> for all the other scheduled storyboards that will be affected by compression. When the storyboards are compressed, time is temporarily accelerated for affected storyboards, so they play faster.</p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for compression. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info. </p> </dd> + + + + + <p> Sets the priority comparison handler that determines whether a scheduled storyboard can be concluded.</p> + <p>Setting a priority comparison handler with this method enables the application to indicate when scheduling conflicts can be resolved by concluding the scheduled storyboard.</p><p>A scheduled storyboard can be concluded only if it contains a loop with a repetition count of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> and the priority comparison object registered with this method returns <strong>{{S_OK}}</strong>. If the storyboard is concluded, the current repetition of the loop completes, and the rest of the storyboard then plays. </p><p>Passing <strong>{{NULL}}</strong> for the <em>comparison</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The priority comparison handler for conclusion. The specified object must implement the <strong>{{IUIAnimationPriorityComparison2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + + + <p> Sets the default acceptable animation delay. This is the length of time that may pass before storyboards begin.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling <strong>{{IUIAnimationStoryboard::SetLongestAcceptableDelay}}</strong> for this specific storyboard, the delay value set by calling this method, or 0.0 if neither method has been called.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The default delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p> Shuts down the animation manager and all its associated objects.</p> + <p>Calling this method directs the animation manager, and all the objects it created, to release all their references to other objects. After <strong>{{IUIAnimationManager2::Shutdown}}</strong> has been called, no other methods may be called on the animation manager or on any objects that it created. An application can call this method to clean up if there is any possibility that the application has introduced a reference cycle that includes some animation objects.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines an animation variable, which represents a visual element that can be animated in multiple dimensions.</p> + + + + <p>Gets the number of dimensions that the animation variable is to be animated in.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the value of the animation variable in the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the animation curve of the animation variable.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + + + <p>Gets the animation curve of the animation variable for the specified dimension.</p> + <p>The application implements the <strong>{{IDCompositionAnimation}}</strong> object that is referenced by the <em>animation</em> parameter.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that generates a sequence of animation curve primitives.</p> </dd> + + + <dd> <p>The number of animation curves. +</p> </dd> + + + + + <p>Gets the final value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + + + <p>Gets the final value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous value of the animation variable. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + + + <p>Gets the previous value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the integer value of the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the integer value of the animation variable for the specified dimension.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the final integer value of the animation variable. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the final integer value of the animation variable for the specified dimension. This is the value after all currently scheduled animations have completed.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable in the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + + + <p>Gets the previous integer value of the animation variable for the specified dimension. This is the value of the animation variable before the most recent update.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The previous value of the animation variable as an integer.</p> </dd> + + + <dd> <p>The dimension from which to get the value of the animation variable. +</p> </dd> + + + + + <p>Gets the active storyboard for the animation variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The active storyboard, or {{NULL}} if the animation variable is not being animated.</p> </dd> + + + + + <p>Sets the lower bound (floor) for the value of the animation variable. The value of the animation variable should not fall below the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The lower bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the lower bound (floor) value of each specified dimension for the animation variable. The value of each animation variable should not fall below its lower bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the lower bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require lower bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) for the value of the animation variable. The value of the animation variable should not rise above the specified value.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The upper bound for the value of the animation variable.</p> </dd> + + + + + <p>Sets the upper bound (ceiling) value of each specified dimension for the animation variable. The value of each animation variable should not rise above its upper bound.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the upper bound values of each dimension.</p> </dd> + + + <dd> <p>The number of dimensions that require upper bound values. This parameter specifies the number of values listed in <em>bound</em>.</p> </dd> + + + + + <p>Sets the rounding mode of the animation variable.</p> + <p> An animation variable's rounding mode determines how a floating-point value is converted to an integer. The default mode for each variable is <strong>{{UI_ANIMATION_ROUNDING_NEAREST}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The rounding mode.</p> </dd> + + + + + <p>Sets the tag of the animation variable. </p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>), and it can be used by an application to identify an animation variable. Because <strong>{{NULL}}</strong> is a valid object component of a tag, the <em>object</em> parameter can be <strong>{{NULL}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object portion of the tag. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>The identifier portion of the tag. </p> </dd> + + + + + <p> Gets the tag of the animation variable.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify an animation variable.</p><p>The parameters are optional, so that the method can return both portions of the tag, or just the identifier or object portion.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p>Specifies a handler for changes to the value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The handler for changes to the value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the integer value of the animation variable. </p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>Shutdown</strong> method.</p><p> <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> is called only if the rounded value has changed since the last update.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the integer value of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, specifies that the <strong>EstimateNextEventTime</strong> method will incorporate <em>handler</em> into its estimate of the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Specifies a handler for changes to the animation curve of the animation variable. </p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A reference to the handler for changes to the animation curve of the animation variable. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationTransition}}</strong> interface that defines a transition. An <strong>{{IUIAnimationTransition2}}</strong> transition determines how an animation variable changes over time in a given dimension.</p> + + + + <p>Gets the number of dimensions in which the animation variable has a transition specified.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value of the transition.</p> + <p>Do not call this method after the transition has been added to a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value for the transition.</p> </dd> + + + + + <p>Sets the initial value of the transition for each specified dimension in the animation variable.</p> + <p>The animation manager should not call this method after the transition has been added to a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial values for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition values. This parameter specifies the number of values listed in <em>value</em>.</p> </dd> + + + + + <p>Sets the initial velocity of the transition.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial velocity for the transition.</p> </dd> + + + + + <p>Sets the initial velocity of the transition for each specified dimension in the animation variable.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the initial velocities for the transition.</p> </dd> + + + <dd> <p>The number of dimensions that require transition velocities. This parameter specifies the number of values listed in <em>velocity</em>.</p> </dd> + + + + + <p>Determines whether the duration of a transition is known.</p> + <p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Gets the duration of the transition.</p> + <p>An application should typically call the <strong>IsDurationKnown</strong> method before calling this method. </p><p>This method should not be called when the storyboard to which the transition has been added is scheduled or playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition, in seconds.</p> </dd> + + + + + <p> Defines a method for handling updates to an <strong>animation manager</strong>.</p> + + + + <p> Handles status changes to an <strong>animation manager</strong>.</p> + <p>Calls made to other Windows Animation methods from <strong>{{IUIAnimationManager2::OnManagerStatusChanged}}</strong> fail and return <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + <p> The <strong> OnValueChanged</strong> method receives animation variable value updates as <strong>{{DOUBLE}}</strong> values. To receive value updates as <strong>{{INT32}}</strong> values, use the <strong>{{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p> + + + + + + + <p> Handles events that occur when the value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{DOUBLE}}</strong> values. To receive updates as <strong>{{INT32}}</strong> values, use the <strong> {{IUIAnimationVariableIntegerChangeHandler2::OnIntegerValueChanged}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>{{IUIAnimationVariableChangeHandler2::OnValueChanged}}</strong>:</p><ul> <li> <strong>{{IUIAnimationVariable2::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetFinalIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetPreviousIntegerValue}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetCurrentStoryboard}} +</strong> </li> <li> <strong>{{IUIAnimationVariable::GetTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetVariableFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationManager::GetStoryboardFromTag}} +</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}} +</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new value of the animation variable.</p> </dd> + + + <dd> <p>The previous value of the animation variable.</p> </dd> + + + <dd> <p>The dimension in which the value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation variable update events. <strong>{{IUIAnimationVariableIntegerChangeHandler2}}</strong> handles events that occur in a specified dimension.</p> + + + + <p> Handles events that occur when the integer value of an animation variable changes in the specified dimension.</p> + <p>This method receives updates as <strong>{{INT32}}</strong> values. To receive updates as <strong>{{DOUBLE}}</strong> values, use the <strong>OnValueChanged</strong> method.</p><p><strong>OnIntegerValueChanged</strong> events might occur less frequently than <strong>OnValueChanged</strong> events because values such as 2.2, 2.3, and 2.4 would all be rounded to the same integer.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnIntegerValueChanged</strong>:</p><ul> <li> <strong>GetValue</strong> </li> <li> <strong>GetFinalValue</strong> </li> <li> <strong>GetPreviousValue</strong> </li> <li> <strong>GetIntegerValue</strong> </li> <li> <strong>GetFinalIntegerValue</strong> </li> <li> <strong>GetPreviousIntegerValue</strong> </li> <li> <strong>GetCurrentStoryboard</strong> </li> <li> <strong>GetVariableFromTag</strong> </li> <li> <strong>GetStoryboardFromTag</strong> </li> <li> <strong>GetTag</strong> </li> <li> <strong>GetTag</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard that is animating the animation variable specified by the <em>variable</em> parameter.</p> </dd> + + + <dd> <p>The animation variable that has been updated.</p> </dd> + + + <dd> <p>The new integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The previous integer value of the animation variable.</p> <strong>Note</strong>??The rounding mode for an animation variable is specified using the <strong>SetRoundingMode</strong> method. ? </dd> + + + <dd> <p>The dimension in which the integer value of the animation variable changed.</p> </dd> + + + + + <p>Defines a method for handling animation curve update events. </p> + + + + <p> Handles events that occur when the animation curve of an animation variable changes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The animation variable for which the animation curve has been updated.</p> </dd> + + + + + <p>Defines methods for handling storyboard events. </p> + + + + <p> Handles storyboard status change events.</p> + <p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardStatusChanged</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::CreateAnimationVariable}}</strong> </li> <li> <strong>{{IUIAnimationManager2::CreateStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Abandon}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAtOffset}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddKeyframeAfterTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransition}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionAtKeyframe}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::AddTransitionBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Conclude}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Finish}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::HoldVariable}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::RepeatBetweenKeyframes}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetStoryboardEventHandler}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::SetTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::Schedule}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::GetDuration}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::IsDurationKnown}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialValue}}</strong> </li> <li> <strong>{{IUIAnimationTransition2::SetInitialVelocity}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::SetTag}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard for which the status has changed.</p> </dd> + + + <dd> <p> The new status.</p> </dd> + + + <dd> <p> The previous status.</p> </dd> + + + + + <p>Handles storyboard update events.</p> + <p>This method is called when the value of at least one of the variables that a storyboard is animating has changed since the last call to the <strong>{{IUIAnimationManager2::Update}}</strong> method.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>OnStoryboardUpdated</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetCurrentStoryboard}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetFinalValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousIntegerValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetPreviousValue}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetValue}}</strong> </li> </ul> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard that has been updated.</p> </dd> + + + + + <p>Defines a method for handling storyboard loop iteration events.</p> + + + + <p>Handles loop iteration change events, which occur when a loop within a storyboard begins a new iteration.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The storyboard to which the loop belongs.</p> </dd> + + + <dd> <p>The loop {{ID}}.</p> </dd> + + + <dd> <p>The iteration count for the latest <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + <dd> <p>The iteration count for the previous <strong>{{IUIAnimationManager2::Update}}</strong>.</p> </dd> + + + + + <p>Defines a method that resolves scheduling conflicts through priority comparison.</p> + <p>A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a newly scheduled storyboard attempts to animate one or more variables that are currently scheduled for animation by different storyboards, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p> + + + + <p>Determines the relative priority between a scheduled storyboard and a new storyboard.</p> + <p> A single animation variable can be included in multiple storyboards, but multiple storyboards cannot animate the same variable at the same time. If a new storyboard attempts to animate one or more variables that are currently scheduled for animation by a different storyboard, a scheduling conflict occurs. To determine which storyboard has priority, the animation manager can call the <strong>HasPriority</strong> method on one or more priority comparison handlers provided by the application.</p><p>Registering priority comparison objects is optional. By default, all storyboards can be trimmed, concluded, or compressed to prevent failure, but none can be canceled, and by default no storyboards will be canceled or trimmed to prevent a delay.</p><p>By default, a call made in a callback method to any other animation method results in the call failing and returning <strong>{{UI_E_ILLEGAL_REENTRANCY}}</strong>. However, there are exceptions to this default. The following methods can be successfully called from <strong>HasPriority</strong>:</p><ul> <li> <strong>{{IUIAnimationManager2::GetStoryboardFromTag}}</strong> </li> <li> <strong>{{IUIAnimationManager2::GetVariableFromTag}}</strong> </li> <li> <strong>{{IUIAnimationStoryboard::GetTag}}</strong> </li> <li> <strong>{{IUIAnimationVariable2::GetTag}}</strong> </li> </ul> + <p>Returns the following if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p><em>newStoryboard</em> has priority.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p><em>scheduledStoryboard</em> has priority.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The currently scheduled storyboard.</p> </dd> + + + <dd> <p> The new storyboard that is interrupting the scheduled storyboard specified by <em>scheduledStoryboard</em>.</p> </dd> + + + <dd> <p> The potential effect on <em>newStoryboard</em> if <em>scheduledStoryboard</em> has a higher priority.</p> </dd> + + + + + <p>Defines a library of standard transitions for a specified dimension.</p> + <p>Windows Animation includes a library of common transitions that developers can apply to variables through a storyboard. The parameters for specifying a transition depend on the type of transition. For some transitions, the duration of the transition is an explicit parameter; for others, the duration is determined by other parameters, such as speed or acceleration when the transition begins. A transition's initial value or velocity can be overridden if a discontinuous jump is desired, and duration can be queried after the transition is added to a storyboard.</p><p>If an application requires an effect that cannot be specified using the transition library, developers can implement custom transitions. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from interpolators. An interpolator must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by the <strong>{{UIAnimationTransitionFactory2}}</strong> object.</p> + + + + <p> Creates an instantaneous scalar transition.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates an instantaneous vector transition for each specified dimension.</p> + <p>During an instantaneous transition, the value of the animation variable changes instantly from its current value to a specified final value. The duration of this transition is always zero.</p><p>The following figure shows the change in value over time of an animation variable during an instantaneous transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new instantaneous transition.</p> </dd> + + + + + <p> Creates a constant scalar transition.</p> + <p>During a constant transition, the value of an animation variable remains at the initial value over the duration of the transition.</p><p>The following figure shows the change in value for an animation variable over time during a constant-duration transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The new constant transition.</p> </dd> + + + + + <p> Creates a discrete scalar transition.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a discrete vector transition for each specified dimension.</p> + <p>During a discrete transition, the animation variable remains at the initial value for a specified delay time, then switches instantaneously to a specified final value and remains at that value for a given hold time.</p><p>The following figure shows the change in value over time of an animation variable during a discrete transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The amount of time by which to delay the instantaneous switch to the final value.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The amount of time by which to hold the variable at its final value.</p> </dd> + + + <dd> <p> The new discrete transition.</p> </dd> + + + + + <p> Creates a linear scalar transition.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear vector transition in the specified dimension.</p> + <p>During a linear transition, the value of the animation variable transitions linearly from its initial value to a specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear transition.</p> </dd> + + + + + <p> Creates a linear-speed scalar transition.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a linear-speed vector transition in the specified dimension.</p> + <p>During a linear-speed transition, the value of the animation variable changes at a specified rate. The duration of the transition is determined by the difference between the initial value and the specified final value.</p><p>The following figure shows the change in value over time of an animation variable during a linear-speed transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The absolute value of the velocity in units/second.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p> The new linear-speed transition.</p> </dd> + + + + + <p> Creates a sinusoidal scalar transition where amplitude is determined by initial velocity.</p> + <p>The value of the animation variable oscillates around the initial value over the entire duration of a sinusoidal-range transition. The amplitude of the oscillation is determined by the velocity when the transition begins.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-velocity transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p> The new sinusoidal-velocity transition.</p> </dd> + + + + + <p> Creates a sinusoidal-range scalar transition with a specified range of oscillation.</p> + <p>The value of the animation variable fluctuates between the specified minimum and maximum values over the entire duration of a sinusodial-range transition. The <em>slope</em> parameter is used to disambiguate between the two possible sine waves specified by the other parameters.</p><p>The following figure shows the change in value over time of an animation variable during a sinusoidal-range transition. Passing in the <strong>{{UI_ANIMATION_SLOPE_INCREASING}}</strong> enumeration value yields a wave like the solid curve shown in the figure, whereas the <strong>{{UI_ANIMATION_SLOPE_DECREASING}}</strong> value yields a wave like the dashed curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p>The value of the animation variable at a trough of the sinusoidal wave.</p> </dd> + + + <dd> <p>The value of the animation variable at a peak of the sinusoidal wave.</p> </dd> + + + <dd> <p>The period of oscillation of the sinusoidal wave.</p> </dd> + + + <dd> <p>The slope at the start of the transition.</p> </dd> + + + <dd> <p> The new sinusoidal-range transition.</p> </dd> + + + + + <p> Creates an accelerate-decelerate scalar transition.</p> + <p>During an accelerate-decelerate transition, the animation variable speeds up and then slows down over the duration of the transition, ending at a specified value. You can control how quickly the variable accelerates and decelerates independently, by specifying different acceleration and deceleration ratios.</p><p>When the initial velocity is zero, the acceleration ratio is the fraction of the duration that the variable will spend accelerating; likewise for the deceleration ratio. If the value of initial velocity is nonzero, the value is the fraction of the time between the velocity reaching zero and the end of transition. The acceleration ratio and the deceleration ratio should sum to a maximum of 1.0. </p><p>The following figures show the change in value for animation variables with different initial velocities during accelerate-decelerate transitions.</p><strong>Note</strong>??d' in the figure on the right shows the time between the velocity reaching zero and the end of the transition.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent accelerating (0 to 1).</p> </dd> + + + <dd> <p> The ratio of <em>duration</em> time spent decelerating (0 to 1).</p> </dd> + + + <dd> <p> The new accelerate-decelerate transition.</p> </dd> + + + + + <p> Creates a reversal scalar transition.</p> + <p> A reversal transition smoothly changes direction over the specified duration. The final value will be the same as the initial value and the final velocity will be the negative of the initial velocity. The folllowing figure shows such a reversal transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + <dd> <p> The new reversal transition.</p> </dd> + + + + + <p> Creates a cubic scalar transition.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The velocity of the variable at the end of the transition.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a cubic vector transition for each specified dimension.</p> + <p>During a cubic transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition, ending at the <em>finalVelocity</em>.</p><p>The following figure shows the effect on an animation variable over time during a cubic transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final velocities (in units per second) of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em> and <em>finalVelocity</em>.</p> </dd> + + + <dd> <p> The new cubic transition.</p> </dd> + + + + + <p> Creates a smooth-stop scalar transition.</p> + <p>A smooth-stop transition slows down as it approaches the specified final value, and reaches the final value with a velocity of zero. The duration of the transition is determined by the initial velocity, the difference between the initial and final values, and the specified maximum duration. If there is no solution consisting of a single parabolic arc, this method creates a cubic transition.</p><p>The following figure shows the change in value over time of an animation variable during a smooth-stop transition.</p><p></p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p> The new smooth-stop transition.</p> </dd> + + + + + <p> Creates a parabolic-acceleration scalar transition.</p> + <p> During a parabolic-acceleration transition, the value of the animation variable changes from the initial value to the final value, ending at the specified velocity. You can control how quickly the variable reaches the final value by specifying the rate of acceleration.</p><p>The following figure shows the change in value over time of an animation variable during a parabolic-acceleration transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The velocity, in units/second, at the end of the transition.</p> </dd> + + + <dd> <p> The acceleration, in units/second?, during the transition.</p> </dd> + + + <dd> <p> The new parabolic-acceleration transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear scalar transition.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time for an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p> The value of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p> Creates a cubic B?zier linear vector transition for each specified dimension.</p> + <p>During a cubic B?zier linear transition, the value of the animation variable changes from its initial value to the <em>finalValue</em> over the <em>duration</em> of the transition. The ordered pairs, (x1, y1) and (x2, y2), act as control points that provide directional information to transform the linear path of the transition into a smooth parametric curve.</p><p>The following figure shows the change in value over time of an animation variable during a cubic B?zier linear transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The duration of the transition.</p> </dd> + + + <dd> <p>A vector (of size <em>cDimension</em>) that contains the final values of the animation variable at the end of the transition.</p> </dd> + + + <dd> <p>The number of dimensions to apply the transition. This parameter specifies the number of values listed in <em>finalValue</em>.</p> </dd> + + + <dd> <p>The x-coordinate of the first control point.</p> </dd> + + + <dd> <p>The y-coordinate of the first control point.</p> </dd> + + + <dd> <p>The x-coordinate of the second control point.</p> </dd> + + + <dd> <p>The y-coordinate of the second control point.</p> </dd> + + + <dd> <p>The new cubic B?zier linear transition.</p> </dd> + + + + + <p>Defines a method that allows a custom interpolator to provide transition information, in the form of a cubic polynomial curve, to the animation manager.</p> + + + + <p>Adds a cubic polynomial segment that describes the shape of a transition curve to the animation function. </p> + <p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The cubic polynomial constant coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial linear coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial quadratic coefficient.</p> </dd> + + + <dd> <p>The cubic polynomial cubic coefficient.</p> </dd> + + + + + <p>Adds a sinusoidal segment that describes the shape of a transition curve to the animation function. </p> + <p>Defined by the function Y(t) = bias + amplitude*sin(360*frequency*t + phase), where 'sin' is the sin of an angle specified in degrees (for example, sin(n + 360) == sin(n) for any real number 'n').</p><p>This method will fail with an error code of {{UI_E_INVALID_PRIMITIVE}} if the start time is either less than 0 +or less than the start time of a previous segment. +</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + <dd> <p>The begin offset for the segment, where 0 corresponds to the start of the transition.</p> </dd> + + + <dd> <p>The bias constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The amplitude constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The frequency constant in the sinusoidal function.</p> </dd> + + + <dd> <p>The phase constant in the sinusoidal function.</p> </dd> + + + + + <p>Extends the <strong>{{IUIAnimationInterpolator}}</strong> interface that defines methods for creating a custom interpolator. <strong>{{IUIAnimationInterpolator2}}</strong> supports interpolation in a given dimension. </p> + <p>Client applications can use the transitions provided in the <strong>{{IUIAnimationTransitionLibrary}}</strong> or<strong>{{IUIAnimationTransitionLibrary2}}</strong> interfaces, or in a library provided by a third party; however, custom transitions can be created by implementing the <strong>{{IUIAnimationInterpolator}}</strong> or <strong>{{IUIAnimationInterpolator2}}</strong> interfaces.</p><p>Before Windows Animation can use your custom interpolator, you must wrap it in an object that implements the <strong>{{IUIAnimationTransition}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory::CreateTransition}}</strong>) or the <strong>{{IUIAnimationTransition2}}</strong> interface (by calling <strong>{{IUIAnimationTransitionFactory2::CreateTransition}}</strong>) and passing in the custom interpolator. After the interpolator wrapper has been created, client applications interact with your interpolator using the <strong>{{IUIAnimationTransition}}</strong> or <strong>{{IUIAnimationTransition2}}</strong> interfaces.</p><p>Custom interpolators can be reused across applications, but it is recommended that they be exposed using factory interfaces that return an <strong>{{IUIAnimationTransition}}</strong> interface or an <strong>{{IUIAnimationTransition2}}</strong> interface.</p> + + + + <p>Gets the number of dimensions that require interpolation.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The number of dimensions.</p> </dd> + + + + + <p>Sets the initial value and velocity of the transition for the given dimension.</p> + <p>Windows Animation always calls <strong>SetInitialValueAndVelocity</strong> before calling the other methods of <strong>{{IUIAnimationInterpolator2}}</strong> at different offsets. However, <strong>SetInitialValueAndVelocity</strong> can be called multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to these methods reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The initial value.</p> </dd> + + + <dd> <p>The initial velocity.</p> </dd> + + + <dd> <p>The dimension in which to set the initial value or velocity of the transition.</p> </dd> + + + + + <p>Used to determine which kinds of command lists are capable of supporting various operations. For example, whether a command list supports immediate writes. </p> + + + <dd> <p>Specifies that no command list supports the operation in question.</p> </dd> + + + <dd> <p>Specifies that direct command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that command list bundles can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that compute command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that copy command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-decode command lists can support the operation in question.</p> </dd> + + + <dd> <p>Specifies that video-processing command lists can support the operation is question.</p> </dd> + + + + + <p>Sets the duration of the transition in the given dimension.</p> + <p>Windows Animation calls this method only after calling the <strong>{{IUIAnimationInterpolator2::GetDependencies}}</strong> method, and only if that call returns <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong> as one of its <em>durationDependencies</em> flags.</p><p>Typically, an interpolator with a duration dependency has a duration parameter in the <strong>{{IUIAnimationTransitionFactory}}</strong> or <strong>{{IUIAnimationTransitionFactory2}}</strong> creation method that is associated with that interpolator. The interpolator should store its duration when first initialized and overwrite the duration when <strong>SetDuration</strong> is called.</p><p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>SetDuration</strong>, so a custom interpolator doesn't need to check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> and <strong>SetDuration</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>SetDuration</strong> reflect the updated state.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the duration of a transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetDuration</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetDuration</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The duration of the transition.</p> </dd> + + + + + <p>Gets the final value at the end of the transition for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>GetFinalValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>GetFinalValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The final value.</p> </dd> + + + <dd> <p>The dimension from which to retrieve the final value.</p> </dd> + + + + + <p>Interpolates the value of an animation variable at the specified offset and for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateValue</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateValue</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition.</p> <p>This parameter is always greater than or equal to zero and less than the duration of the transition. This method is not called if the duration of the transition is zero.</p> </dd> + + + <dd> <p>The interpolated value.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the value.</p> </dd> + + + + + <p>Interpolates the velocity, or rate of change, at the specified offset for the given dimension.</p> + <p>Windows Animation always calls the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method to set the initial value and velocity before calling <strong>InterpolateVelocity</strong>, so a custom interpolator need not check whether the initial value and velocity have been set.</p><p>Windows Animation can call <strong>SetInitialValueAndVelocity</strong> multiple times with different parameters. Interpolators can cache internal state to improve performance, but they must update this cached state each time <strong>SetInitialValueAndVelocity</strong> is called and ensure that the results of subsequent calls to <strong>InterpolateVelocity</strong> reflect the updated state.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset from the start of the transition. </p> <p>The offset is always greater than or equal to zero and less than or equal to the duration of the transition. This method is not called if the duration of the transition is zero. +</p> </dd> + + + <dd> <p>The interpolated velocity.</p> </dd> + + + <dd> <p>The dimension in which to interpolate the velocity.</p> </dd> + + + + + <p>Generates a primitive interpolation of the specified animation curve.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The object that defines the custom animation curve information.</p> </dd> + + + <dd> <p>The dimension in which to apply the new segment.</p> </dd> + + + + + <p>For the given dimension, <strong>GetDependencies</strong> retrieves the aspects of the interpolator that depend on the initial value or velocity that is passed to the <strong>{{IUIAnimationInterpolator2::SetInitialValueAndVelocity}}</strong> method or the duration that is passed to the <strong>{{IUIAnimationInterpolator2::SetDuration}}</strong> method.</p> + <p>This method is called to identify which aspects of the custom interpolator are affected by certain inputs: value, velocity, and duration. For each of these inputs, the interpolator returns either of the following:</p><ul> <li>The bitwise-{{OR}} of any members of <strong>{{UI_ANIMATION_DEPENDENCIES}}</strong> that apply.</li> <li><strong>{{UI_ANIMATION_DEPENDENCY_NONE}}</strong> if nothing depends on the input.</li> </ul><p>For example, consider an interpolator that:</p><ul> <li>Accepts a final value as a parameter.</li> <li>Always comes to a gradual stop at that final value.</li> <li>Has a duration determined by the difference between the final value and the initial value.</li> </ul><p>In this case the interpolator should return <strong>{{UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES}}</strong>|<strong>{{UI_ANIMATION_DURATION}}</strong> for the <em>initialValueDependencies</em> parameter. It should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong>, because this value is set when the interpolator is created and is not affected by the initial value. Likewise, the interpolator should not return <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY}}</strong>, because the slope of the curve is defined to always be zero when it reaches the final value.</p><p>It is important that an interpolator return a correct set of flags. If a flag is not present for an output, Windows Animation assumes that the corresponding parameter does not affect that aspect of the interpolator's results. For example, if the custom interpolator does not include <strong>{{UI_ANIMATION_DEPENDENCY_FINAL_VALUE}}</strong> for <em>initialVelocityDependencies</em>, Windows Animation may call <strong>SetInitialValueAndVelocity</strong> with an arbitrary velocity parameter, and then call <strong>GetFinalValue</strong> to determine the final value. The interpolator's implementation of <strong>GetFinalValue</strong> must return the same result no matter which velocity parameter has been passed to <strong>SetInitialValueAndVelocity</strong>, because the interpolator has claimed that the transition's final value does not depend on the initial velocity.</p><strong>Note</strong>??If the flags returned for <em>durationDependencies</em> do not include <strong>{{UI_ANIMATION_DEPENDENCY_DURATION}}</strong>, <strong>SetDuration</strong> will never be called on the interpolator.? + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Defines a method for creating transitions from custom interpolators.</p><p><strong>{{IUIAnimationTransitionFactory2}}</strong> supports the creation of transitions in a specified dimension.</p> + <p> When an application requires animation effects that are not available in the transition library, developers can implement custom transitions that the application can use. A custom transition is created by first implementing the interpolator function for the transition, and then by using a factory object to generate transitions from the interpolator. An interpolator must implement either the <strong>{{IUIAnimationInterpolator}}</strong> interface or the <strong>{{IUIAnimationInterpolator2}}</strong> interface; an implementation of the transition factory object is provided by <strong>{{UIAnimationTransitionFactory}}</strong> or by <strong>{{UIAnimationTransitionFactory2}}</strong>.</p> + + + + <p>Creates a transition from a custom interpolator for a given dimension.</p> + <p>If the method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The interpolator from which a transition is to be created. The specified object must implement the <strong>{{IUIAnimationInterpolator2}}</strong> interface.</p> </dd> + + + <dd> <p>The new transition.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p> Adds a transition to the storyboard.</p> + <p>The <strong>AddTransition</strong> method applies the specified transition to the specified variable in the storyboard. If this is the first transition applied to this variable in this storyboard, the transition begins at the start of the storyboard. Otherwise, the transition is appended to the transition that was most recently added to the variable.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + + + <p> Adds a keyframe at the specified offset from an existing keyframe.</p> + <p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The existing keyframe. To add a keyframe at an offset from the start of the storyboard, use the special keyframe <strong>{{UI_ANIMATION_KEYFRAME_STORYBOARD_START}}</strong>.</p> </dd> + + + <dd> <p> The offset from the existing keyframe at which a new keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a keyframe at the end of the specified transition.</p> + <p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_NOT_IN_STORYBOARD}}</strong></dt> </dl> </td><td> <p>The transition has not been added to the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The transition after which a keyframe is to be added.</p> </dd> + + + <dd> <p> The keyframe to be added.</p> </dd> + + + + + <p> Adds a transition that starts at the specified keyframe.</p> + <p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition is determined by the state of the preceding one. A transition should not begin before the start of the preceding transition.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which a transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> The keyframe that specifies the beginning of the new transition.</p> </dd> + + + + + <p> Adds a transition between two keyframes.</p> + <p>This method applies the specified transition to the specified variable in the storyboard, with the transition starting and ending at the specified keyframes. If the transition was created with a duration parameter specified, that duration is overwritten with the duration of time between the start and end keyframes. Otherwise, Windows Animation speeds up or slows down the transition as necessary.</p><p> A keyframe represents a moment in time within a storyboard and can be used to specify the start and end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p><p>Transitions must be added in the order in which they will be played. A transition may begin playing before the preceding transition in the storyboard has finished, in which case the initial value and velocity seen by the new transition will be determined by the state of the preceding one. It must not be possible for a transition to begin before the start of the preceding transition.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ALREADY_USED}}</strong></dt> </dl> </td><td> <p>This transition has already been added to a storyboard or has been added to a storyboard that has finished playing and been released.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_TRANSITION_ECLIPSED}}</strong></dt> </dl> </td><td> <p>The transition might eclipse the beginning of another transition in the storyboard.</p> </td></tr> <tr><td> <dl> <dt><strong>{{UI_E_START_KEYFRAME_AFTER_END}}</strong></dt> </dl> </td><td> <p>The start keyframe might occur after the end keyframe.</p> </td></tr> </table><p>?</p><p>See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable for which the transition is to be added.</p> </dd> + + + <dd> <p> The transition to be added.</p> </dd> + + + <dd> <p> A keyframe that specifies the beginning of the new transition.</p> </dd> + + + <dd> <p> A keyframe that specifies the end of the new transition. It must not be possible for <em>endKeyframe</em> to appear earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + + + <p>Creates a loop between two keyframes.</p> + <p>This method directs a storyboard to play the interval between the given keyframes repeatedly before playing the remainder of the storyboard. If a finite repetition count is specified, the loop always plays that number of times. If <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) is specified, the loop repeats until the storyboard is concluded, in which case the current iteration of the loop completes and the remainder of the storyboard plays. A storyboard that loops indefinitely also ends if it is truncated.</p><p>Nested and overlapping loops are not supported.</p><p>A keyframe represents a moment in time within a storyboard and can be used to specify the start or end times of transitions. Because keyframes can be added at the ends of transitions, their offsets from the start of the storyboard may not be known until the storyboard is playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The keyframe at which the loop is to begin.</p> </dd> + + + <dd> <p>The keyframe at which the loop is to end. <em>endKeyframe</em> must not occur earlier in the storyboard than <em>startKeyframe</em>.</p> </dd> + + + <dd> <p>The number of times the loop is to be repeated; the last iteration of a loop can terminate fractionally between keyframes. A value of zero indicates that the specified portion of a storyboard will not be played. A value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1) indicates that the loop will repeat indefinitely until the storyboard is trimmed or concluded.</p> </dd> + + + <dd> <p>The pattern for the loop iteration. </p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) specifies that the start of the loop must alternate between keyframes (k1-&gt;k2, k2-&gt;k1, k1-&gt;k2, and so on).</p> <p>A value of <strong>{{UI_ANIMATION_REPEAT_MODE_NORMAL}}</strong> (0) specifies that the start of the loop must begin with the first keyframe (k1-&gt;k2, k1-&gt;k2, k1-&gt;k2, and so on).</p> <strong>Note</strong>??If <em>repeatMode</em> has a value of <strong>{{UI_ANIMATION_REPEAT_MODE_ALTERNATE}}</strong> (1) and <em>cRepetition</em> has a value of <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong> (-1), the loop terminates on the end keyframe. + ? </dd> + + + <dd> <p>The handler for each loop iteration event. The default value is 0.</p> </dd> + + + <dd> <p>The loop {{ID}} to pass to <em>pIterationChangeHandler</em>. The default value is 0.</p> </dd> + + + <dd> <p>If true, specifies that <em>pIterationChangeHandler</em> will be incorporated into the estimate of the time interval until the next animation event that is returned by the <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong> method. The default value is 0, or false.</p> </dd> + + + + + <p> Directs the storyboard to hold the specified animation variable at its final value until the storyboard ends.</p> + <p> When a storyboard is playing, it has exclusive access to any variables it animates unless the storyboard is trimmed by a higher-priority storyboard. Typically, this exclusive access is released when the last transition in the storyboard for that variable finishes playing. Applications can call this method to maintain exclusive access to the animation variable and hold the variable, at the final value of the last transition, until the end of the storyboard.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The animation variable.</p> </dd> + + + + + <p> Sets the longest acceptable delay before the scheduled storyboard begins.</p> + <p>For Windows Animation to schedule a storyboard successfully, the storyboard must begin before the longest acceptable delay has elapsed. Windows Animation determines this delay in the following order: the delay value set by calling this method, the delay value set by calling the <strong>{{IUIAnimationManager2::SetDefaultLongestAcceptableDelay}}</strong> method, or 0.0 if neither of these methods has been called.</p><p> Use <strong>{{IUIAnimationStoryboard2::SetSkipDuration}}</strong> to start a storyboard animation at a specified offset instead of delaying the start of a storyboard.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The longest acceptable delay. This parameter can be a positive value, or <strong>{{UI_ANIMATION_SECONDS_EVENTUALLY}}</strong> (-1) to indicate that any finite delay is acceptable.</p> </dd> + + + + + <p>Specifies an offset from the beginning of a storyboard at which to start animating.</p> + <p>Calls to <strong>SetSkipDuration</strong> fail if the storyboard has been scheduled.</p><p><strong>SetSkipDuration</strong> does not delay the start of a scheduled storyboard. See <strong>{{IUIAnimationStoryboard2::SetLongestAcceptableDelay}}</strong> for more info on how to set a delay for a scheduled storyboard.</p><p>This diagram shows a skip duration, or offset, for a storyboard. </p><p></p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p>The offset, or amount of time, to skip at the beginning of the storyboard.</p> </dd> + + + + + <p> Directs the storyboard to schedule itself for play.</p> + <p>This method directs a storyboard to try to add itself to the schedule of playing storyboards, using these rules:</p><ul> <li> <p>If there are no playing storyboards animating any of the same animation variables, the attempt succeeds and the storyboard starts playing immediately.</p> </li> <li> <p>If the storyboard has priority to cancel, trim, conclude, or compress conflicting storyboards, the attempt to schedule succeeds and the storyboard starts playing as soon as possible.</p> </li> <li> <p>If the storyboard does not have priority, the attempt fails and the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p> </li> </ul><p>If this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the <em>schedulingResult</em> parameter is set to <strong>{{UI_ANIMATION_SCHEDULING_DEFERRED}}</strong>. The only way to determine whether the storyboard is successfully scheduled is to set a storyboard event handler and check whether the storyboard's status ever becomes <strong>{{UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY}}</strong>.</p><p>It is possible to reuse a storyboard by calling <strong>Schedule</strong> again after its status has reached <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>. An attempt to schedule a storyboard when it is in any state other than <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong> or <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong> fails, and <em>schedulingResult</em> is set to <strong>{{UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The current time.</p> </dd> + + + <dd> <p>The result of the scheduling request. You can omit this parameter from calls to this method.</p> </dd> + + + + + <p>Completes the current iteration of a keyframe loop that is in progress (where the loop is set to <strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong>), terminates the loop, and continues with the storyboard. </p> + <p>This method specifies that any subsequent keyframe loops that have a repetition count of <strong><strong>{{UI_ANIMATION_REPEAT_INDEFINITELY}}</strong></strong> (-1) will be skipped while the remainder of the storyboard is played. </p><p>An iteration of a keyframe loop that is in progress will be completed before the remainder of the storyboard plays.</p><p>If this method is called at the end of an alternating keyframe loop iteration, the loop is terminated with the loop value set to the ending loop value.</p><p> If this method is called at the end of a non-alternating keyframe loop iteration, where "loop wrapping" results in the loop value being set to the starting value of the next iteration, the loop is executed once more in order for the loop value to be set to the ending loop value.</p><p>For alternating keyframe loops, each iteration has a starting value that is equivalent to the ending value of the preceding loop. In this case, "loop wrapping" is not an issue.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p>Finishes the storyboard within the specified time, compressing the storyboard if necessary.</p> + <p>This method has no effect on storyboard events. Events continue to be raised as expected while the storyboard plays.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The maximum amount of time that the storyboard can use to finish playing.</p> </dd> + + + + + <p>Terminates the storyboard, releases all related animation variables, and removes the storyboard from the schedule.</p> + <p> This method can be called before or after the storyboard starts playing.</p><p>This method does not trigger any storyboard events.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + + <p> Sets the tag for the storyboard.</p> + <p> A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>). It can be used by an application to identify a storyboard.</p> + <p>Returns {{S_OK}} if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The object portion of the tag. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the tag for a storyboard.</p> + <p>A tag is a pairing of an integer identifier (<em>id</em>) with a {{COM}} object (<em>object</em>); it can be used by an application to identify a storyboard.</p><p>This method can return the identifier, the object, or both portions of the tag.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_VALUE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The storyboard tag was not set.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The object portion of the tag.</p> </dd> + + + <dd> <p> The identifier portion of the tag.</p> </dd> + + + + + <p> Gets the status of the storyboard.</p> + <p>Unless this method is called from a handler for <strong>OnStoryboardStatusChanged</strong> events, the only values it returns are <strong>{{UI_ANIMATION_STORYBOARD_BUILDING}}</strong>, <strong>{{UI_ANIMATION_STORYBOARD_SCHEDULED}}</strong>, +<strong>{{UI_ANIMATION_STORYBOARD_PLAYING}}</strong>, and <strong>{{UI_ANIMATION_STORYBOARD_READY}}</strong>.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The storyboard status.</p> </dd> + + + + + <p> Gets the time that has elapsed since the storyboard started playing.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{UI_E_STORYBOARD_NOT_PLAYING}}</strong></dt> </dl> </td><td> <p>The storyboard is not playing.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The elapsed time.</p> </dd> + + + + + <p> Specifies a handler for storyboard events.</p> + <p>Passing <strong>{{NULL}}</strong> for the <em>handler</em> parameter causes Windows Animation to release its reference to any handler object that you passed in earlier. This technique can be essential for breaking reference cycles without having to call the <strong>{{IUIAnimationManager2::Shutdown}}</strong> method.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise an <strong>{{HRESULT}}</strong> error code. See <strong>Windows Animation Error Codes</strong> for a list of error codes.</p> + + + <dd> <p> The handler that Windows Animation should call whenever storyboard status and update events occur. The specified object must implement the <strong>{{IUIAnimationStoryboardEventHandler2}}</strong> interface or be <strong>{{NULL}}</strong>. See Remarks for more info.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardStatusChanged</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, registers the <strong>OnStoryboardUpdated</strong> event and includes those events in <strong>{{IUIAnimationManager2::EstimateNextEventTime}}</strong>, which estimates the time interval until the next animation event. No default value.</p> </dd> + + + + + <p>Strip flag options.</p> + <p>These flags are used by <strong>{{D3DStripShader}}</strong>.</p> + + + + <p>Values that identify parts of the content of an arbitrary length data buffer.</p> + <p>These values are passed to the <strong>{{D3DGetBlobPart}}</strong> or <strong>{{D3DSetBlobPart}}</strong> function.</p> + + + + <p>Describes shader data.</p> + <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures is passed to <strong>{{D3DCompressShaders}}</strong> to compress the shader data into a more compact form.</p> + + + <dd> <p>A reference to shader data.</p> </dd> + + + <dd> <p>Length of shader data that <strong>pBytecode</strong> points to.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Reads a file that is on disk into memory.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DReadFileToBlob}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to read into memory.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that contains information that <strong>{{D3DReadFileToBlob}}</strong> read from the <em>pFileName</em> file. You can use this <strong>{{ID3DBlob}}</strong> interface to access the file information and pass it to other compiler functions.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Writes a memory blob to a file on disk.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DWriteBlobToFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to a <strong>{{ID3DBlob}}</strong> interface that contains the memory blob to write to the file that the <em>pFileName</em> parameter specifies.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the file to which to write.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to overwrite information in the <em>pFileName</em> file. {{TRUE}} specifies to overwrite information and {{FALSE}} specifies not to overwrite information.</p> </dd> + + + + + <p>Compile {{HLSL}} code or an effect file into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile}}</strong> and <strong>{{D3DCompile2}}</strong> is that the latter method takes some optional parameters that can be used to control some aspects of how bytecode is generated. If this extra flexibility is not required, there is no performance gain from using <strong>{{D3DCompile2}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> You can use this parameter for strings that specify error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p>Optional. A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The name of the shader entry point function where shader execution begins. When you compile using a fx profile (for example, fx_4_0, fx_5_0, and so on), <strong>{{D3DCompile}}</strong> ignores <em>pEntrypoint</em>. In this case, we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it. For all other shader profiles, a valid <em>pEntrypoint</em> is required. +</p> </dd> + + + <dd> <p>A string that specifies the shader target or set of shader features to compile against. The shader target can be shader model 2, shader model 3, shader model 4, or shader model 5. The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile constants</strong>.</p> </dd> + + + <dd> <p>Flags defined by <strong>{{D3D}} compile effect constants</strong>. When you compile a shader and not an effect file, <strong>{{D3DCompile}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <p>The difference between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong> is that <strong>{{D3DCompile2}}</strong> takes some optional parameters (<em>SecondaryDataFlags</em>, <em>pSecondaryData</em> and <em>SecondaryDataSize</em>) that can be used to control some aspects of how bytecode is generated. Refer to the descriptions of these parameters for more details. There is no difference otherwise to the efficiency of the bytecode generated between <strong>{{D3DCompile2}}</strong> and <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data ({{ASCII}} {{HLSL}} code).</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>An optional reference to a constant null-terminated string containing the name that identifies the source data to use in error messages. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>An optional array of <strong>{{D3D_SHADER_MACRO}}</strong> structures that define shader macros. Each macro definition contains a name and a {{NULL}}-terminated definition. If not used, set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> interface that the compiler uses to handle include files. If you set this parameter to <strong>{{NULL}}</strong> and the shader contains a #include, a compile error occurs. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>A reference to a constant null-terminated string that contains the name of the shader entry point function where shader execution begins. When you compile an effect, <strong>{{D3DCompile2}}</strong> ignores <em>pEntrypoint</em>; we recommend that you set <em>pEntrypoint</em> to <strong>{{NULL}}</strong> because it is good programming practice to set a reference parameter to <strong>{{NULL}}</strong> if the called function will not use it.</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string that specifies the shader target or set of shader features to compile against. The shader target can be a shader model (for example, shader model 2, shader model 3, shader model 4, or shader model 5). The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets. </p> </dd> + + + <dd> <p>A combination of shader <strong>{{D3D}} compile constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code.</p> </dd> + + + <dd> <p>A combination of effect <strong>{{D3D}} compile effect constants</strong> that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the effect. When you compile a shader and not an effect file, <strong>{{D3DCompile2}}</strong> ignores <em>Flags2</em>; we recommend that you set <em>Flags2</em> to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how the compiler compiles the {{HLSL}} code. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS}} (0x01)</td><td>Merge unordered access view ({{UAV}}) slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS}} (0x02)</td><td>Preserve template slots in the secondary data that the <em>pSecondaryData</em> parameter points to.</td></tr> <tr><td>{{D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH}} (0x04)</td><td>Require that templates in the secondary data that the <em>pSecondaryData</em> parameter points to match when the compiler compiles the {{HLSL}} code.</td></tr> </table> <p>?</p> <p>If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to secondary data. If you don't pass secondary data, set to <strong>{{NULL}}</strong>. Use this secondary data to align {{UAV}} slots in two shaders. Suppose shader A has {{UAVs}} and they are bound to some slots. To compile shader B such that {{UAVs}} with the same names are mapped in B to the same slots as in A, pass A?s byte code to <strong>{{D3DCompile2}}</strong> as the secondary data. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSecondaryData</em> points to. If <em>pSecondaryData</em> is <strong>{{NULL}}</strong>, set to zero.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled code.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store. Refer to the section, "Compiling shaders for {{UWP}}", in the remarks for <strong>{{D3DCompile2}}</strong>.?<p>Compiles Microsoft High Level Shader Language ({{HLSL}}) code into bytecode for a given target.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DCompileFromFile}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Preprocesses uncompiled {{HLSL}} code.</p> + <p><strong>{{D3DPreprocess}}</strong> outputs #line directives and preserves line numbering of source input so that output line numbering can be properly related to the input source.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p> The name of the file that contains the uncompiled {{HLSL}} code.</p> </dd> + + + <dd> <p> An array of {{NULL}}-terminated macro definitions (see <strong>{{D3D_SHADER_MACRO}}</strong>).</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DInclude}}</strong> for handling include files. Setting this to <strong>{{NULL}}</strong> will cause a compile error if a shader contains a #include. You can pass the <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong> macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use <strong>{{D3D_COMPILE_STANDARD_FILE_INCLUDE}}</strong>, you must specify the source file name in the <em>pSourceName</em> parameter; the compiler will derive the initial relative directory from <em>pSourceName</em>.</p> <pre>#define {{D3D_COMPILE_STANDARD_FILE_INCLUDE}} (({{ID3DInclude}}*)({{UINT_PTR}})1) +</pre> </dd> + + + <dd> <p>The address of a <strong>{{ID3DBlob}}</strong> that contains the compiled code.</p> </dd> + + + <dd> <p> A reference to an <strong>{{ID3DBlob}}</strong> that contains compiler error messages, or <strong>{{NULL}}</strong> if there were no errors.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Gets shader debug information.</p> + <p>Debug information is embedded in the body of the shader after calling <strong>{{D3DCompile}}</strong>.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data; either uncompiled or compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains debug information.</p> </dd> + + + + + <p>Gets a reference to a reflection interface.</p> + <p>Shader code contains metadata that can be inspected using the reflection {{APIs}}.</p><p>The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> Interface from a shader.</p><pre> pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector); +</pre> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11ShaderReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a reflection interface.</p> </dd> + + + + + <p>Creates a library-reflection interface from source data that contains an {{HLSL}} library of functions. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p>A reference to source data as an {{HLSL}} library of functions. </p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The reference {{GUID}} of the {{COM}} interface to use. For example, <strong>{{IID_ID3D11LibraryReflection}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to a library-reflection interface, <strong>{{ID3D11LibraryReflection}}</strong>.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Flags affecting the behavior of <strong>{{D3DDisassemble}}</strong>. <em>Flags</em> can be a combination of zero or more of the following values. </p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_COLOR_CODE}}</strong></td><td>Enable the output of color codes.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}}</strong></td><td>Enable the output of default values.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}}</strong></td><td>Enable instruction numbering.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}}</strong></td><td>No effect.</td></tr> <tr><td><strong>{{D3D_DISASM_DISABLE_DEBUG_INFO}}</strong></td><td>Disable debug information.</td></tr> <tr><td><strong>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}}</strong></td><td>Enable instruction offsets.</td></tr> <tr><td><strong>{{D3D_DISASM_INSTRUCTION_ONLY}}</strong></td><td>Disassemble instructions only.</td></tr> <tr><td><strong> {{D3D_DISASM_PRINT_HEX_LITERALS}}</strong></td><td>Use hex symbols in disassemblies.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The comment string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses assembly text.</p> </dd> + + + + + <p>Disassembles a specific region of compiled Microsoft High Level Shader Language ({{HLSL}}) code.</p> + <strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DDisassembleRegion}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of zero or more of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DDisassembleRegion}}</strong> disassembles the compiled shader data.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_DISASM_ENABLE_COLOR_CODE}} (0x01)</td><td>Enable the output of color codes.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS}} (0x02)</td><td>Enable the output of default values.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING}} (0x04)</td><td>Enable instruction numbering.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_CYCLE}} (0x08)</td><td>No effect.</td></tr> <tr><td>{{D3D_DISASM_DISABLE_DEBUG_INFO}} (0x10)</td><td>Disable the output of debug information.</td></tr> <tr><td>{{D3D_DISASM_ENABLE_INSTRUCTION_OFFSET}} (0x20)</td><td>Enable the output of instruction offsets.</td></tr> <tr><td>{{D3D_DISASM_INSTRUCTION_ONLY}} (0x40)</td><td>This flag has no effect in <strong>{{D3DDisassembleRegion}}</strong>. Cycle information comes from the trace; therefore, cycle information is available only in <strong>{{D3DDisassemble11Trace}}</strong>'s trace disassembly.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a constant null-terminated string at the top of the shader that identifies the shader constants and variables.</p> </dd> + + + <dd> <p>The number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> starts the disassembly.</p> </dd> + + + <dd> <p>The number of instructions to disassemble.</p> </dd> + + + <dd> <p>A reference to a variable that receives the number of bytes offset into the compiled shader data where <strong>{{D3DDisassembleRegion}}</strong> finishes the disassembly.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that accesses the disassembled {{HLSL}} code.</p> </dd> + + + + + <p>Creates a linker interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateLinker}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Linker}}</strong> interface that is used to link a shader module.</p> </dd> + + + + + <p>Creates a shader module interface from source data for the shader module. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DLoadModule}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the source data for the shader module.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11Module}}</strong> interface that is used for shader resource re-binding.</p> </dd> + + + + + <p>Creates a function-linking-graph interface. </p><strong>Note</strong>??This function is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <strong>Note</strong>??The {{D3dcompiler_47}}.dll or later version of the {{DLL}} contains the <strong>{{D3DCreateFunctionLinkingGraph}}</strong> function.? + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11FunctionLinkingGraph}}</strong> interface that is used for constructing shaders that consist of a sequence of precompiled function calls.</p> </dd> + + + + + <p>Retrieves the byte offsets for instructions within a section of shader code.</p> + <p>A new kind of Microsoft High Level Shader Language ({{HLSL}}) debugging information from a program database ({{PDB}}) file uses instruction-byte offsets within a shader blob (arbitrary-length data buffer). You use <strong>{{D3DGetTraceInstructionOffsets}}</strong> to translate to and from instruction indexes.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DGetTraceInstructionOffsets}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to the compiled shader data.</p> </dd> + + + <dd> <p>The size, in bytes, of the block of memory that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A combination of the following flags that are combined by using a bitwise <strong>{{OR}}</strong> operation. The resulting value specifies how <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the instruction offsets.</p> <table> <tr><th>Flag</th><th>Description</th></tr> <tr><td>{{D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE}} (0x01)</td><td>Include non-executable code in the retrieved information.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The index of the instruction in the compiled shader data for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> starts to retrieve the byte offsets.</p> </dd> + + + <dd> <p>The number of instructions for which <strong>{{D3DGetTraceInstructionOffsets}}</strong> retrieves the byte offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the actual number of offsets.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of instructions in the section of shader code.</p> </dd> + + + + + <strong>Note</strong>??<strong>{{D3DGetInputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the output signature from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <strong>Note</strong>??<strong>{{D3DGetInputAndOutputSignatureBlob}}</strong> may be altered or unavailable for releases after Windows?8.1. Instead use <strong>{{D3DGetBlobPart}}</strong> with the <strong>{{D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB}}</strong> value.?<p>Gets the input and output signatures from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + + <p>Removes unwanted blobs from a compilation result.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Length of <em>pSrcData</em>.</p> </dd> + + + <dd> <p>Strip flag options, represented by <strong>{{D3DCOMPILER_STRIP_FLAGS}}</strong>.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the unwanted stripped out shader code.</p> </dd> + + + + + <p>Retrieves a specific part from a compilation result.</p> + <p><strong>{{D3DGetBlobPart}}</strong> retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the <em>Part</em> parameter specifies.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part of the buffer to retrieve.</p> </dd> + + + <dd> <p>Flags that indicate how to retrieve the blob part. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the specified part of the buffer.</p> </dd> + + + + + <p>Sets information in a compilation result.</p> + <p><strong>{{D3DSetBlobPart}}</strong> modifies data in a compiled shader. Currently, <strong>{{D3DSetBlobPart}}</strong> can update only the private data in a compiled shader. You can use <strong>{{D3DSetBlobPart}}</strong> to attach arbitrary uninterpreted data to a compiled shader.</p><strong>Note</strong>??The {{D3dcompiler_44}}.dll or later version of the file contains the <strong>{{D3DSetBlobPart}}</strong> compiler function.? + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to compiled shader data.</p> </dd> + + + <dd> <p>The length of the compiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>A <strong>{{D3D_BLOB_PART}}</strong>-typed value that specifies the part to set. Currently, you can update only private data; that is, <strong>{{D3DSetBlobPart}}</strong> currently only supports the <strong>{{D3D_BLOB_PRIVATE_DATA}}</strong> value.</p> </dd> + + + <dd> <p>Flags that indicate how to set the blob part. Currently, no flags are defined; therefore, set to zero.</p> </dd> + + + <dd> <p>A reference to data to set in the compilation result.</p> </dd> + + + <dd> <p>The length of the data that <em>pPart</em> points to.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface for the new shader in which the new part data is set.</p> </dd> + + + + + <p>Creates a buffer.</p> + <p>The latest {{D3dcompiler_nn}}.dll contains the <strong>{{D3DCreateBlob}}</strong> compiler function. Therefore, you are no longer required to create and use an arbitrary length data buffer by using the <strong>{{D3D10CreateBlob}}</strong> function that is contained in {{D3d10}}.dll.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>Number of bytes in the blob.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the buffer.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Compresses a set of shaders into a more compact form. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>The number of shaders to compress.</p> </dd> + + + <dd> <p>An array of <strong>{{D3D_SHADER_DATA}}</strong> structures that describe the set of shaders to compress.</p> </dd> + + + <dd> <p>Flags that indicate how to compress the shaders. Currently, only the {{D3D_COMPRESS_SHADER_KEEP_ALL_PARTS}} (0x00000001) flag is defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the compressed shader data.</p> </dd> + + + + + <strong>Note</strong>??You can use this {{API}} to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?<p>Decompresses one or more shaders from a compressed set. </p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to uncompiled shader data; either {{ASCII}} {{HLSL}} code or a compiled effect.</p> </dd> + + + <dd> <p>Length of uncompiled shader data that <em>pSrcData</em> points to.</p> </dd> + + + <dd> <p>The number of shaders to decompress.</p> </dd> + + + <dd> <p>The index of the first shader to decompress.</p> </dd> + + + <dd> <p>An array of indexes that represent the shaders to decompress.</p> </dd> + + + <dd> <p>Flags that indicate how to decompress. Currently, no flags are defined.</p> </dd> + + + <dd> <p>The address of a reference to the <strong>{{ID3DBlob}}</strong> interface that is used to retrieve the decompressed shader data.</p> </dd> + + + <dd> <p>A reference to a variable that receives the total number of shaders that <strong>{{D3DDecompressShaders}}</strong> decompressed.</p> </dd> + + + + + <p>Disassembles compiled {{HLSL}} code from a Direct3D10 effect.</p> + <p>Returns one of the Direct3D 11 return codes.</p> + + + <dd> <p>A reference to source data as compiled {{HLSL}} code.</p> </dd> + + + <dd> <p>Shader compile options.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the <strong>{{ID3DBlob}}</strong> interface that contains disassembly text.</p> </dd> + + + + + <p>Indicates shader type.</p> + + + <dd> <p>Pixel shader.</p> </dd> + + + <dd> <p>Vertex shader.</p> </dd> + + + <dd> <p>Geometry shader.</p> </dd> + + + <dd> <p>Hull shader.</p> </dd> + + + <dd> <p>Domain shader.</p> </dd> + + + <dd> <p>Compute shader.</p> </dd> + + + <dd> <p>Indicates the end of the enumeration constants.</p> </dd> + + + + + <p>Describes a shader signature.</p> + <p>A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.</p><p>When compiling a shader or an effect, some {{API}} calls validate shader signatures That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.</p><p>Get a shader-signature from a shader or an effect by calling {{APIs}} such as <strong>{{ID3D11ShaderReflection::GetInputParameterDesc}}</strong>. </p> + + + <dd> <p>A per-parameter string that identifies how the data will be used. For more info, see Semantics. </p> </dd> + + + <dd> <p>Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.</p> </dd> + + + <dd> <p>The register that will contain this variable's data.</p> </dd> + + + <dd> <p>A <strong>{{D3D_NAME}}</strong>-typed value that identifies a predefined string that determines the functionality of certain pipeline stages.</p> </dd> + + + <dd> <p>A <strong>{{D3D_REGISTER_COMPONENT_TYPE}}</strong>-typed value that identifies the per-component-data type that is stored in a register. Each register can store up to four-components of data.</p> </dd> + + + <dd> <p>Mask which indicates which components of a register are used.</p> </dd> + + + <dd> <p>Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). </p> </dd> + + + <dd> <p>Indicates which stream the geometry shader is using for the signature parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_MIN_PRECISION}}</strong>-typed value that indicates the minimum desired interpolation precision. For more info, see Using {{HLSL}} minimum precision.</p> </dd> + + + + + <p>Describes a shader constant-buffer.</p> + <p>Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling <strong>{{ID3D11ShaderReflectionConstantBuffer::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the buffer.</p> </dd> + + + <dd> <p>A <strong>{{D3D_CBUFFER_TYPE}}</strong>-typed value that indicates the intended use of the constant data.</p> </dd> + + + <dd> <p>The number of unique variables.</p> </dd> + + + <dd> <p>Buffer size (in bytes).</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies properties for the shader constant-buffer.</p> </dd> + + + + + <p>Describes a shader variable.</p> + <p> Get a shader-variable description using reflection by calling <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong>. </p><p> As of the June 2010 update, <strong>DefaultValue</strong> emits default values for reflection. </p> + + + <dd> <p>The variable name.</p> </dd> + + + <dd> <p>Offset from the start of the parent structure to the beginning of the variable.</p> </dd> + + + <dd> <p>Size of the variable (in bytes).</p> </dd> + + + <dd> <p> A combination of <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value identifies shader-variable properties. </p> </dd> + + + <dd> <p>The default value for initializing the variable.</p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the texture. </p> </dd> + + + <dd> <p>The size of the texture, in bytes. </p> </dd> + + + <dd> <p>Offset from the start of the variable to the beginning of the sampler. </p> </dd> + + + <dd> <p>The size of the sampler, in bytes. </p> </dd> + + + + + <p>Describes a shader-variable type.</p> + <p>Get a shader-variable-type description by calling <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong>.</p> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type.</p> </dd> + + + <dd> <p>Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0.</p> </dd> + + + <dd> <p>Number of elements in an array; otherwise 0.</p> </dd> + + + <dd> <p>Number of members in the structure; otherwise 0.</p> </dd> + + + <dd> <p>Offset, in bytes, between the start of the parent structure and this variable. Can be 0 if not a structure member.</p> </dd> + + + <dd> <p>Name of the shader-variable type. This member can be <strong>{{NULL}}</strong> if it isn't used. This member supports dynamic shader linkage interface types, which have names. For more info about dynamic shader linkage, see Dynamic Linking.</p> </dd> + + + + + <p>Describes a shader.</p> + <p>A shader is written in {{HLSL}} and compiled into an intermediate language by the {{HLSL}} compiler. The shader description returns information about the compiled shader. Get a shader description by calling <strong>{{ID3D11ShaderReflection::GetDesc}}</strong>.</p> + + + <dd> <p>Shader version.</p> </dd> + + + <dd> <p>The name of the originator of the shader.</p> </dd> + + + <dd> <p>Shader compilation/parse flags.</p> </dd> + + + <dd> <p>The number of shader-constant buffers.</p> </dd> + + + <dd> <p>The number of resource (textures and buffers) bound to a shader.</p> </dd> + + + <dd> <p>The number of parameters in the input signature.</p> </dd> + + + <dd> <p>The number of parameters in the output signature.</p> </dd> + + + <dd> <p>The number of intermediate-language instructions in the compiled shader.</p> </dd> + + + <dd> <p>The number of temporary registers in the compiled shader.</p> </dd> + + + <dd> <p>Number of temporary arrays used.</p> </dd> + + + <dd> <p>Number of constant defines.</p> </dd> + + + <dd> <p>Number of declarations (input + output).</p> </dd> + + + <dd> <p>Number of non-categorized texture instructions.</p> </dd> + + + <dd> <p>Number of texture load instructions</p> </dd> + + + <dd> <p>Number of texture comparison instructions</p> </dd> + + + <dd> <p>Number of texture bias instructions</p> </dd> + + + <dd> <p>Number of texture gradient instructions.</p> </dd> + + + <dd> <p>Number of floating point arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of signed integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of unsigned integer arithmetic instructions used.</p> </dd> + + + <dd> <p>Number of static flow control instructions used.</p> </dd> + + + <dd> <p>Number of dynamic flow control instructions used.</p> </dd> + + + <dd> <p>Number of macro instructions used.</p> </dd> + + + <dd> <p>Number of array instructions used.</p> </dd> + + + <dd> <p>Number of cut instructions used.</p> </dd> + + + <dd> <p>Number of emit instructions used.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>-typed value that represents the geometry shader output topology.</p> </dd> + + + <dd> <p>Geometry shader maximum output vertex count.</p> </dd> + + + <dd> <p>The <strong>{{D3D_PRIMITIVE}}</strong>-typed value that represents the input primitive for a geometry shader or hull shader.</p> </dd> + + + <dd> <p>Number of parameters in the patch-constant signature.</p> </dd> + + + <dd> <p>Number of geometry shader instances.</p> </dd> + + + <dd> <p>Number of control points in the hull shader and domain shader.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_OUTPUT_PRIMITIVE}}</strong>-typed value that represents the tessellator output-primitive type.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_PARTITIONING}}</strong>-typed value that represents the tessellator partitioning mode.</p> </dd> + + + <dd> <p>The <strong>{{D3D_TESSELLATOR_DOMAIN}}</strong>-typed value that represents the tessellator domain.</p> </dd> + + + <dd> <p>Number of barrier instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of interlocked instructions in a compute shader.</p> </dd> + + + <dd> <p>Number of texture writes in a compute shader.</p> </dd> + + + + + <p>Describes how a shader resource is bound to a shader input.</p> + <p>Get a shader-input-signature description by calling <strong>{{ID3D11ShaderReflection::GetResourceBindingDesc}}</strong> or <strong>{{ID3D11ShaderReflection::GetResourceBindingDescByName}}</strong>.</p> + + + <dd> <p>Name of the shader resource.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed value that identifies the type of data in the resource.</p> </dd> + + + <dd> <p>Starting bind point.</p> </dd> + + + <dd> <p>Number of contiguous bind points for arrays.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values for shader input-parameter options. </p> </dd> + + + <dd> <p>If the input is a texture, the <strong>{{D3D_RESOURCE_RETURN_TYPE}}</strong>-typed value that identifies the return type.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value that identifies the dimensions of the bound resource.</p> </dd> + + + <dd> <p>The number of samples for a multisampled texture; when a texture isn't multisampled, the value is set to -1 (0xFFFFFFFF). </p> </dd> + + + + + <p>Describes a library.</p> + + + <dd> <p>The name of the originator of the library.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies how the compiler compiles.</p> </dd> + + + <dd> <p>The number of functions exported from the library.</p> </dd> + + + + + <p>Describes a function.</p> + + + <dd> <p>The shader version.</p> </dd> + + + <dd> <p>The name of the originator of the function.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3DCOMPILE}} Constants</strong> that are combined by using a bitwise {{OR}} operation. The resulting value specifies shader compilation and parsing.</p> </dd> + + + <dd> <p>The number of constant buffers for the function.</p> </dd> + + + <dd> <p>The number of bound resources for the function.</p> </dd> + + + <dd> <p>The number of emitted instructions for the function.</p> </dd> + + + <dd> <p>The number of temporary registers used by the function.</p> </dd> + + + <dd> <p>The number of temporary arrays used by the function.</p> </dd> + + + <dd> <p>The number of constant defines for the function.</p> </dd> + + + <dd> <p>The number of declarations (input + output) for the function.</p> </dd> + + + <dd> <p>The number of non-categorized texture instructions for the function.</p> </dd> + + + <dd> <p>The number of texture load instructions for the function.</p> </dd> + + + <dd> <p>The number of texture comparison instructions for the function.</p> </dd> + + + <dd> <p>The number of texture bias instructions for the function.</p> </dd> + + + <dd> <p>The number of texture gradient instructions for the function.</p> </dd> + + + <dd> <p>The number of floating point arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of signed integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of unsigned integer arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>The number of static flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of dynamic flow control instructions used by the function.</p> </dd> + + + <dd> <p>The number of macro instructions used by the function.</p> </dd> + + + <dd> <p>The number of array instructions used by the function.</p> </dd> + + + <dd> <p>The number of mov instructions used by the function.</p> </dd> + + + <dd> <p>The number of movc instructions used by the function.</p> </dd> + + + <dd> <p>The number of type conversion instructions used by the function.</p> </dd> + + + <dd> <p>The number of bitwise arithmetic instructions used by the function.</p> </dd> + + + <dd> <p>A <strong>{{D3D_FEATURE_LEVEL}}</strong>-typed value that specifies the minimum Direct3D feature level target of the function byte code.</p> </dd> + + + <dd> <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. For a list of values, see <strong>{{ID3D11ShaderReflection::GetRequiresFlags}}</strong>. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p>The number of logical parameters in the function signature, not including the return value.</p> </dd> + + + <dd> <p>Indicates whether the function returns a value. <strong>{{TRUE}}</strong> indicates it returns a value; otherwise, <strong>{{FALSE}}</strong> (it is a subroutine).</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 vertex shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 vertex shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Indicates whether there is a Direct3D 10Level9 pixel shader blob. <strong>{{TRUE}}</strong> indicates there is a 10Level9 pixel shader blob; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes a function parameter. </p> + <p>Get a function-parameter description by calling <strong>{{ID3D11FunctionParameterReflection::GetDesc}}</strong>.</p> + + + <dd> <p>The name of the function parameter.</p> </dd> + + + <dd> <p>The {{HLSL}} semantic that is associated with this function parameter. This name includes the index, for example, {{SV_Target}}[n].</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong>-typed value that identifies the variable type for the parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed value that identifies the variable class for the parameter as one of scalar, vector, matrix, object, and so on.</p> </dd> + + + <dd> <p>The number of rows for a matrix parameter.</p> </dd> + + + <dd> <p>The number of columns for a matrix parameter.</p> </dd> + + + <dd> <p>A <strong>{{D3D_INTERPOLATION_MODE}}</strong>-typed value that identifies the interpolation mode for the parameter.</p> </dd> + + + <dd> <p>A combination of <strong>{{D3D_PARAMETER_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies semantic flags for the parameter.</p> </dd> + + + <dd> <p>The first input register for this parameter.</p> </dd> + + + <dd> <p>The first input register component for this parameter.</p> </dd> + + + <dd> <p>The first output register for this parameter.</p> </dd> + + + <dd> <p>The first output register component for this parameter.</p> </dd> + + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get the description of a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-type description (see <strong>{{D3D11_SHADER_TYPE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-reflection-variable type by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection-variable type by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Member name.</p> </dd> + + + + + <p>Get a shader-reflection-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The variable type.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type.</p> + <p>IsEqual indicates whether the sources of the <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references have the same underlying type. For example, if two <strong>{{ID3D11ShaderReflectionType}} Interface</strong> references were retrieved from variables, IsEqual can be used to see if the variables have the same type.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the references have the same underlying type; otherwise returns {{S_FALSE}}.</p> + + + + <p>Gets the base class of a class.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong> containing the base class type. Returns <strong>{{NULL}}</strong> if the class does not have a base class.</p> + + + + <p>Gets an <strong>{{ID3D11ShaderReflectionType}} Interface</strong> interface containing the variable base class type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>Gets the number of interfaces.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of interfaces.</p> + + + + <p>Get an interface by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Indicates whether a variable is of the specified type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if object being queried is equal to or inherits from the type in the <em>pType</em> parameter; otherwise returns {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Indicates whether a class type implements an interface.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns {{S_OK}} if the interface is implemented; otherwise return {{S_FALSE}}.</p> + + + <dd> <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> </dd> + + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>Get a shader-variable description.</p> + <p>This method can be used to determine if the <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> is valid, the method returns <strong>{{E_FAIL}}</strong> when the variable is not valid.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader-variable description (see <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a shader-variable type.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionType}} Interface</strong>.</p> + + + + <p>This method returns the buffer of the current <strong>{{ID3D11ShaderReflectionVariable}}</strong>.</p> + <p> Returns a reference to the <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> of the present <strong>{{ID3D11ShaderReflectionVariable}}</strong>. </p> + + + + <p>Gets the corresponding interface slot for a variable that represents an interface reference.</p> + <p>GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the {{HLSL}} Interfaces and Classes overview for additional information.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the index of the interface in the interface array.</p> + + + <dd> <p>Index of the array element to get the slot number for. For a non-array variable this value will be zero.</p> </dd> + + + + + <p>This shader-reflection interface provides access to a constant buffer.</p> + <p> To create a constant-buffer interface, call <strong>{{ID3D11ShaderReflection::GetConstantBufferByIndex}}</strong> or <strong>{{ID3D11ShaderReflection::GetConstantBufferByName}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it. </p> + + + + <p>Get a constant-buffer description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong>, which represents a shader-buffer description.</p> </dd> + + + + + <p>Get a shader-reflection variable by index.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a shader-reflection variable interface (see <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a shader-reflection variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns a sentinel object (end of list marker). To determine if GetVariableByName successfully completed, call <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> and check the returned <strong>{{HRESULT}}</strong>; any return value other than success means that GetVariableByName failed.</p> + + + <dd> <p>Variable name.</p> </dd> + + + + + <p>A shader-reflection interface accesses shader information.</p> + <p> An <strong>{{ID3D11ShaderReflection}}</strong> interface can be retrieved for a shader by using <strong>{{D3DReflect}}</strong>. The following code illustrates retrieving a <strong>{{ID3D11ShaderReflection}}</strong> from a shader. </p><pre>pd3dDevice-&gt;CreatePixelShader( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), g_pPSClassLinkage, &amp;g_pPixelShader ); {{ID3D11ShaderReflection}}* pReflector = {{NULL}}; +{{D3DReflect}}( pPixelShaderBuffer-&gt;GetBufferPointer(), pPixelShaderBuffer-&gt;GetBufferSize(), {{IID_ID3D11ShaderReflection}}, (void**) &amp;pReflector);</pre> + + + + <p>Get a shader description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a shader description. See <strong>{{D3D11_SHADER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a constant buffer by index.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Get a constant buffer by name.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>A reference to a constant buffer (see <strong>{{ID3D11ShaderReflectionConstantBuffer}} Interface</strong>).</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader.</p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Get an input-parameter description for a shader.</p> + <p>An input-parameter description is also called a shader signature. The shader signature contains information about the input parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p> A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> </dd> + + + + + <p>Get an output-parameter description for a shader.</p> + <p>An output-parameter description is also called a shader signature. The shader signature contains information about the output parameters such as the order or parameters, their data type, and a parameter semantic.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-output-parameter description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Get a patch-constant parameter description for a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based parameter index.</p> </dd> + + + <dd> <p>A reference to a shader-input-signature description. See <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>.</p> </dd> + + + + + <p>Gets a variable by name.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Get a description of how a resource is bound to a shader. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets information about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p><p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns one of the following Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to an input-binding description. See <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong>.</p> </dd> + + + + + <p>Gets the number of Mov instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Mov instructions.</p> + + + + <p>Gets the number of Movc instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of Movc instructions.</p> + + + + <p>Gets the number of conversion instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns the number of conversion instructions.</p> + + + + <p>Gets the number of bitwise instructions.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of bitwise instructions.</p> + + + + <p>Gets the geometry-shader input-primitive description.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> The input-primitive description. See <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong>, <strong>{{D3D11_PRIMITIVE_TOPOLOGY}}</strong>, or <strong>{{D3D10_PRIMITIVE_TOPOLOGY}}</strong>. </p> + + + + <p>Indicates whether a shader is a sample frequency shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>Returns true if the shader is a sample frequency shader; otherwise returns false.</p> + + + + <p>Gets the number of interface slots in a shader.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p>The number of interface slots in the shader.</p> + + + + <p>Gets the minimum feature level.</p> + <p>This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll.</p> + <p> Returns one of the following Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to one of the enumerated values in <strong>{{D3D_FEATURE_LEVEL}}</strong>, which represents the minimum feature level. </p> </dd> + + + + + <p>Retrieves the sizes, in units of threads, of the X, Y, and Z dimensions of the shader's thread-group grid.</p> + <p> This method's interface is hosted in the out-of-box {{DLL}} {{D3DCompiler_xx}}.dll. </p><p>When a compute shader is written it defines the actions of a single thread group only. If multiple thread groups are required, it is the role of the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> call to issue multiple thread groups. </p> + <p> Returns the total size, in threads, of the thread-group grid by calculating the product of the size of each dimension. +</p><code>*pSizeX * *pSizeY * *pSizeZ;</code> + + + <dd> <p>A reference to the size, in threads, of the x-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the y-dimension of the thread-group grid. The maximum size is 1024.</p> </dd> + + + <dd> <p>A reference to the size, in threads, of the z-dimension of the thread-group grid. The maximum size is 64.</p> </dd> + + + + + <p>Gets a group of flags that indicates the requirements of a shader.</p> + <p>Here is how the {{D3D11Shader}}.h header defines the shader requirements flags:</p><pre> #define {{D3D_SHADER_REQUIRES_DOUBLES}} 0x00000001 +#define {{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}} 0x00000002 +#define {{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}} 0x00000004 +#define {{D3D_SHADER_REQUIRES_64_UAVS}} 0x00000008 +#define {{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}} 0x00000010 +#define {{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}} 0x00000020 +#define {{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}} 0x00000040 +#define {{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}} 0x00000080 +</pre> + <p>A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. </p><table> <tr><th>Shader requirement flag</th><th>Description</th></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_DOUBLES}}</strong></td><td>Shader requires that the graphics driver and hardware support double data type. For more info, see <strong>{{D3D11_FEATURE_DATA_DOUBLES}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}}</strong></td><td>Shader requires an early depth stencil.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}}</strong></td><td>Shader requires unordered access views ({{UAVs}}) at every pipeline stage.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_64_UAVS}}</strong></td><td>Shader requires 64 {{UAVs}}.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_MINIMUM_PRECISION}}</strong></td><td>Shader requires the graphics driver and hardware to support minimum precision. For more info, see Using {{HLSL}} minimum precision.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support extended doubles instructions. For more info, see the <strong>ExtendedDoublesShaderInstructions</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}}</strong></td><td>Shader requires that the graphics driver and hardware support the <strong>msad4</strong> intrinsic function in shaders. For more info, see the <strong>{{SAD4ShaderInstructions}}</strong> member of <strong>{{D3D11_FEATURE_DATA_D3D11_OPTIONS}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}}</strong></td><td>Shader requires that the graphics driver and hardware support Direct3D 9 shadow support. For more info, see <strong>{{D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT}}</strong>.</td></tr> <tr><td><strong>{{D3D_SHADER_REQUIRES_TILED_RESOURCES}}</strong></td><td>Shader requires that the graphics driver and hardware support tiled resources. For more info, see <strong>GetResourceTiling</strong>. </td></tr> </table><p>?</p> + + + + <p> A library-reflection interface accesses library info. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a library-reflection interface, call <strong>{{D3DReflectLibrary}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LibraryReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the library descriptor structure for the library reflection.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_LIBRARY_DESC}}</strong> structure that receives a description of the library reflection.</p> </dd> + + + + + <p>Gets the function reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionReflection}}</strong> interface that represents the function reflector.</p> + + + <dd> <p>The zero-based index of the function reflector to retrieve.</p> </dd> + + + + + <p>A function-reflection interface accesses function info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-reflection interface, call <strong>{{ID3D11LibraryReflection::GetFunctionByIndex}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the function descriptor structure for the function.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_FUNCTION_DESC}}</strong> structure that receives a description of the function.</p> </dd> + + + + + <p>Gets a constant buffer by index for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>Zero-based index.</p> </dd> + + + + + <p>Gets a constant buffer by name for a function.</p> + <p>A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.</p> + <p>A reference to a <strong>{{ID3D11ShaderReflectionConstantBuffer}}</strong> interface that represents the constant buffer.</p> + + + <dd> <p>The constant-buffer name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDesc</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>ResourceIndex</em> parameter specifies the index for the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A zero-based resource index.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets a variable by name.</p> + <p> Returns a <strong>{{ID3D11ShaderReflectionVariable}} Interface</strong> interface. </p> + + + <dd> <p>A reference to a string containing the variable name.</p> </dd> + + + + + <p>Gets a description of how a resource is bound to a function. </p> + <p>A shader consists of executable code (the compiled {{HLSL}} functions) and a set of resources that supply the shader with input data. <strong>GetResourceBindingDescByName</strong> gets info about how one resource in the set is bound as an input to the shader. The <em>Name</em> parameter specifies the name of the resource.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The constant-buffer name of the resource.</p> </dd> + + + <dd> <p>A reference to a <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure that describes input binding of the resource. </p> </dd> + + + + + <p>Gets the function parameter reflector.</p> + <p>A reference to a <strong>{{ID3D11FunctionParameterReflection}}</strong> interface that represents the function parameter reflector.</p> + + + <dd> <p>The zero-based index of the function parameter reflector to retrieve.</p> </dd> + + + + + <p>A function-parameter-reflection interface accesses function-parameter info. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-parameter-reflection interface, call <strong>{{ID3D11FunctionReflection::GetFunctionParameter}}</strong>. This isn't a {{COM}} interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.</p><strong>Note</strong>??<strong>{{ID3D11FunctionParameterReflection}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Fills the parameter descriptor structure for the function's parameter.</p> + <p>Returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to a <strong>{{D3D11_PARAMETER_DESC}}</strong> structure that receives a description of the function's parameter. </p> </dd> + + + + + <p> A module interface creates an instance of a module that is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module interface, call <strong>{{D3DLoadModule}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Module}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes an instance of a shader module that is used for resource rebinding.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The name of a shader module to initialize. This can be <strong>{{NULL}}</strong> if you don't want to specify a name for the module.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface to initialize.</p> </dd> + + + + + <p> A module-instance interface is used for resource rebinding. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a module-instance interface, call <strong>{{ID3D11Module::CreateInstance}}</strong> or <strong>{{ID3D11FunctionLinkingGraph::CreateModuleInstance}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11ModuleInstance}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Rebinds a constant buffer from a source slot to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The source slot number for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a constant buffer by name to a destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding </li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data </li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds </li> <li> Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the constant buffer for rebinding.</p> </dd> + + + <dd> <p>The destination slot number for rebinding.</p> </dd> + + + <dd> <p>The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.</p> </dd> + + + + + <p>Rebinds a texture or buffer from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a texture or buffer by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the texture or buffer for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a sampler by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the sampler for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds an unordered access view ({{UAV}}) by name to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the {{UAV}} for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource as an unordered access view ({{UAV}}) from source slot to destination slot.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The first source slot number for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p>Rebinds a resource by name as an unordered access view ({{UAV}}) to destination slots.</p> + <p>Returns:</p><ul> <li><strong>{{S_OK}}</strong> for a valid rebinding</li> <li><strong>{{S_FALSE}}</strong> for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data</li> <li><strong>{{E_FAIL}}</strong> for an invalid rebinding, for example, the rebinding is out-of-bounds</li> <li>Possibly one of the other Direct3D 11 Return Codes </li> </ul> + + + <dd> <p>The name of the resource for rebinding.</p> </dd> + + + <dd> <p>The first destination slot number for rebinding.</p> </dd> + + + <dd> <p>The number of slots for rebinding. </p> </dd> + + + + + <p> A linker interface is used to link a shader module. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linker interface, call <strong>{{D3DCreateLinker}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11Linker}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p> Links the shader and produces a shader blob that the Direct3D runtime can use. </p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module instance to link from. </p> </dd> + + + <dd> <p> The name of the shader module instance to link from. </p> </dd> + + + <dd> <p> The name for the shader blob that is produced. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the compiled shader code. </p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages. </p> </dd> + + + + + <p>Adds an instance of a library module to be used for linking.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module instance.</p> </dd> + + + + + <p>Adds a clip plane with the plane coefficients taken from a cbuffer entry for 10Level9 shaders.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + + <p>Indicates the tier level at which view instancing is supported.</p> + + + <dd> <p>View instancing is not supported.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping only.</p> </dd> + + + <dd> <p>View instancing is supported by draw-call level looping at worst, but the {{GPU}} can perform view instancing more efficiently in certain circumstances which are architecture-dependent.</p> </dd> + + + <dd> <p>View instancing is supported and instancing begins with the first shader stage that references {{SV_ViewID}} or with rasterization if no shader stage references {{SV_ViewID}}. This means that redundant work is eliminated across view instances when it's not dependent on {{SV_ViewID}}. Before rasterization, work that doesn't directly depend on {{SV_ViewID}} is shared across all views; only work that depends on {{SV_ViewID}} is repeated for each view.</p> <strong>Note</strong> If a hull shader produces tessellation factors that are dependent on {{SV_ViewID}}, then tessellation and all subsequent work must be repeated per-view. Similarly, if the amount of geometry produced by the geometry shader depends on {{SV_ViewID}}, then the geometry shader must be repeated per-view before proceeding to rasterization. <p>View instance masking only effects whether work that directly depends on {{SV_ViewID}} is performed, not the entire loop iteration (per-view). If the view instance mask is non-0, some work that depends on {{SV_ViewID}} might still be performed on masked-off pixels but will have no externally-visible effect; for example, no {{UAV}} writes are performed and clipping/rasterzation is not invoked. If the view instance mask is 0 no work is performed, including work that's not dependent on {{SV_ViewID}}.</p> </dd> + + + + + <p> A linking-node interface is used for shader linking. </p><strong>Note</strong>?? This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p> To get a linking-node interface, call <strong>{{ID3D11FunctionLinkingGraph::SetInputSignature}}</strong>, <strong>{{ID3D11FunctionLinkingGraph::SetOutputSignature}}</strong>, or <strong>{{ID3D11FunctionLinkingGraph::CallFunction}}</strong>. </p><strong>Note</strong>??<strong>{{ID3D11LinkingNode}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other. </p><strong>Note</strong>??This interface is part of the {{HLSL}} shader linking technology that you can use on all Direct3D?11 platforms to create precompiled {{HLSL}} functions, package them into libraries, and link them into full shaders at run time.? + <p>To get a function-linking-graph interface, call <strong>{{D3DCreateFunctionLinkingGraph}}</strong>. </p><p>You can use the function-linking-graph ({{FLG}}) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write {{HLSL}} and then call the {{HLSL}} compiler. Instead, the shader structure is specified programmatically via a C++ {{API}}. {{FLG}} nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. {{FLG}} edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the {{HLSL}} behavior. Values can only be passed forward in this sequence.</p><strong>Note</strong>??<strong>{{ID3D11FunctionLinkingGraph}}</strong> requires the {{D3dcompiler_47}}.dll or a later version of the {{DLL}}.? + + + + <p>Initializes a shader module from the function-linking-graph object.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>The address of a reference to an <strong>{{ID3D11ModuleInstance}}</strong> interface for the shader module to initialize.</p> </dd> + + + <dd> <p>An optional reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access compiler error messages, or <strong>{{NULL}}</strong> if there are no errors.</p> </dd> + + + + + <p>Sets the input signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the input signature.</p> </dd> + + + <dd> <p>The number of input parameters in the <em>pInputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the input signature of the function-linking-graph.</p> </dd> + + + + + <p>Sets the output signature of the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>An array of <strong>{{D3D11_PARAMETER_DESC}}</strong> structures for the parameters of the output signature.</p> </dd> + + + <dd> <p>The number of output parameters in the <em>pOutputParameters</em> array.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the output signature of the function-linking-graph.</p> </dd> + + + + + <p>Creates a call-function linking node to use in the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> The optional namespace for the function, or <strong>{{NULL}}</strong> if no namespace is needed. </p> </dd> + + + <dd> <p> A reference to the <strong>{{ID3D11ModuleInstance}}</strong> interface for the library module that contains the function prototype. </p> </dd> + + + <dd> <p>The name of the function.</p> </dd> + + + <dd> <p> A reference to a variable that receives a reference to the <strong>{{ID3D11LinkingNode}}</strong> interface that represents the function in the function-linking-graph. </p> </dd> + + + + + <p>Passes a value from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + + + <p>Passes a value with swizzle from a source linking node to a destination linking node.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the source linking node.</p> </dd> + + + <dd> <p>The zero-based index of the source parameter.</p> </dd> + + + <dd> <p>The name of the source swizzle.</p> </dd> + + + <dd> <p>A reference to the <strong>{{ID3D11LinkingNode}}</strong> interface for the destination linking node.</p> </dd> + + + <dd> <p>The zero-based index of the destination parameter.</p> </dd> + + + <dd> <p>The name of the destination swizzle.</p> </dd> + + + + + <p>Gets the error from the last function call of the function-linking-graph.</p> + <p> Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes. </p> + + + <dd> <p> An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the error. </p> </dd> + + + + + <p>Generates Microsoft High Level Shader Language ({{HLSL}}) shader code that represents the function-linking-graph.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the Direct3D 11 Return Codes.</p> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>An reference to a variable that receives a reference to the <strong>{{ID3DBlob}}</strong> interface that you can use to access the {{HLSL}} shader source code that represents the function-linking-graph. You can compile this {{HLSL}} code, but first you must add code or include statements for the functions called in the function-linking-graph.</p> </dd> + + + + + <p>Driver type options.</p> + <p>The driver type is required when calling <strong>{{D3D11CreateDevice}}</strong> or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + + + <dd> <p>The driver type is unknown.</p> </dd> + + + <dd> <p>A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration (on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver type is often referred to as a hardware abstraction layer or {{HAL}}.</p> </dd> + + + <dd> <p>A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special {{CPU}} instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration of functionality, debugging, or verifying bugs in other drivers. The reference device for this driver is installed by the Windows {{SDK}} 8.0 or later and is intended only as a debug aid for development purposes. This driver may be referred to as a {{REF}} driver, a reference driver, or a reference rasterizer.</p> <strong>Note</strong>??When you use the {{REF}} driver in Windows Store apps, the {{REF}} driver renders correctly but doesn't display any output on the screen. To verify bugs in hardware drivers for Windows Store apps, use <strong>{{D3D_DRIVER_TYPE_WARP}}</strong> for the {{WARP}} driver instead. ? </dd> + + + <dd> <p>A {{NULL}} driver, which is a reference driver without render capability. This driver is commonly used for debugging non-rendering {{API}} calls, it is not appropriate for retail applications. This driver is installed by the DirectX {{SDK}}.</p> </dd> + + + <dd> <p>A software driver, which is a driver implemented completely in software. The software implementation is not intended for a high-performance application due to its very slow performance.</p> </dd> + + + <dd> <p>A {{WARP}} driver, which is a high-performance software rasterizer. The rasterizer supports <strong>feature levels</strong> 9_1 through level 10_1 with a high performance software implementation. For information about limitations creating a {{WARP}} device on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. For more information about using a {{WARP}} driver, see Windows Advanced Rasterization Platform ({{WARP}}) In-Depth Guide.</p> <strong>Note</strong>??The {{WARP}} driver that Windows?8 includes supports feature levels 9_1 through level 11_1. ? <strong>Note</strong>??The {{WARP}} driver that Windows?8.1 includes fully supports feature level 11_1, including tiled resources, <strong>{{IDXGIDevice3::Trim}}</strong>, shared {{BCn}} surfaces, minblend, and map default. ? </dd> + + + + + <p> Describes the set of features targeted by a Direct3D device. </p> + <p> For an overview of the capabilities of each feature level, see Overview For Each Feature Level. </p><p> For information about limitations creating non-hardware-type devices on certain feature levels, see Limitations Creating {{WARP}} and Reference Devices. </p> + + + <dd> <p> Targets features supported by feature level 9.1 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.2 including shader model 2. </p> </dd> + + + <dd> <p> Targets features supported by feature level 9.3 including shader model 2.0b. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.0 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 10.1 including shader model 4. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 11.1 including shader model 5 and logical blend operations. This feature level requires a display driver that is at least implemented to {{WDDM}} for Windows?8 ({{WDDM}} 1.2). </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.0 including shader model 5. </p> </dd> + + + <dd> <p> Targets features supported by Direct3D 12.1 including shader model 5. </p> </dd> + + + + + <p>Values that indicate how the pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on screen.</p> + <p>Use the <strong>{{ID3D11DeviceContext::IASetPrimitiveTopology}}</strong> method and a value from <strong>{{D3D_PRIMITIVE_TOPOLOGY}}</strong> to bind a primitive topology to the input-assembler stage. Use the <strong>{{ID3D11DeviceContext::IAGetPrimitiveTopology}}</strong> method to retrieve the primitive topology for the input-assembler stage.</p><p>The following diagram shows the various primitive types for a geometry shader object.</p> + + + + <p>Values that indicate how the pipeline interprets geometry or hull shader input primitives.</p> + <p> The <strong>{{ID3D11ShaderReflection::GetGSInputPrimitive}}</strong> method returns a <strong>{{D3D_PRIMITIVE}}</strong>-typed value. </p> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p>The type is undefined.</p> </dd> + + + <dd> <p>The data is organized in a point list.</p> </dd> + + + <dd> <p>The data is organized in a line list.</p> </dd> + + + <dd> <p>The data is organized in a triangle list.</p> </dd> + + + <dd> <p>The data is organized in a line list with adjacency data.</p> </dd> + + + <dd> <p>The data is organized in a triangle list with adjacency data.</p> </dd> + + + <dd> <p> The shader has not been initialized with an input primitive type. </p> </dd> + + + <dd> <p> Interpret the input primitive as a point. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle. </p> </dd> + + + <dd> <p> Interpret the input primitive as a line with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a triangle with adjacency data. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + <dd> <p> Interpret the input primitive as a control point patch. </p> </dd> + + + + + <p>Values that identify the type of resource to be viewed as a shader resource.</p> + <p>A <strong>{{D3D_SRV_DIMENSION}}</strong>-typed value is specified in the <strong>ViewDimension</strong> member of the <strong>{{D3D11_SHADER_RESOURCE_VIEW_DESC}}</strong> structure or the <strong>Dimension</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The type is unknown.</p> </dd> + + + <dd> <p>The resource is a buffer.</p> </dd> + + + <dd> <p>The resource is a 1D texture.</p> </dd> + + + <dd> <p>The resource is an array of 1D textures.</p> </dd> + + + <dd> <p>The resource is a 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of 2D textures.</p> </dd> + + + <dd> <p>The resource is a multisampling 2D texture.</p> </dd> + + + <dd> <p>The resource is an array of multisampling 2D textures.</p> </dd> + + + <dd> <p>The resource is a 3D texture.</p> </dd> + + + <dd> <p>The resource is a cube texture.</p> </dd> + + + <dd> <p>The resource is an array of cube textures.</p> </dd> + + + <dd> <p>The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.</p> </dd> + + + + + <p>Values that indicate the location of a shader #include file. </p> + <p>You pass a <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value to the <em>IncludeType</em> parameter in a call to the <strong>{{ID3DInclude::Open}}</strong> method to indicate the location of the #include file.</p> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>The local directory.</p> </dd> + + + <dd> <p>The system directory.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. </p> <p>Do not use this value.</p> </dd> + + + + + <p>Values that identify the class of a shader variable.</p> + <p>The class of a shader variable is not a programming class; the class identifies the variable class such as scalar, vector, object, and so on. <strong>{{D3D_SHADER_VARIABLE_CLASS}}</strong>-typed values are specified in the <strong>Class</strong> member of the <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure.</p> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>The shader variable is a scalar.</p> </dd> + + + <dd> <p>The shader variable is a vector.</p> </dd> + + + <dd> <p>The shader variable is a row-major matrix.</p> </dd> + + + <dd> <p>The shader variable is a column-major matrix.</p> </dd> + + + <dd> <p>The shader variable is an object.</p> </dd> + + + <dd> <p>The shader variable is a structure.</p> </dd> + + + <dd> <p>The shader variable is a class.</p> </dd> + + + <dd> <p>The shader variable is an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify information about a shader variable.</p> + <p>A call to the <strong>{{ID3D11ShaderReflectionVariable::GetDesc}}</strong> method returns <strong>{{D3D_SHADER_VARIABLE_FLAGS}}</strong> values in the <strong>uFlags</strong> member of a <strong>{{D3D11_SHADER_VARIABLE_DESC}}</strong> structure.</p> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).</p> </dd> + + + <dd> <p>Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.</p> </dd> + + + <dd> <p>Indicates that this variable is an interface.</p> </dd> + + + <dd> <p>Indicates that this variable is a parameter of an interface.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify various data, texture, and buffer types that can be assigned to a shader variable.</p> + <p> A call to the <strong>{{ID3D11ShaderReflectionType::GetDesc}}</strong> method returns a <strong>{{D3D_SHADER_VARIABLE_TYPE}}</strong> value in the <strong>Type</strong> member of a <strong>{{D3D11_SHADER_TYPE_DESC}}</strong> structure. </p><p> The types in a structured buffer describe the structure of the elements in the buffer. The layout of these types generally match their C++ struct counterparts. The following examples show structured buffers: </p><pre>struct mystruct {float4 val; uint ind;}; {{RWStructuredBuffer}}&lt;mystruct&gt; rwbuf; {{RWStructuredBuffer}}&lt;float3&gt; rwbuf2;</pre> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> <p> For more information about structured buffer, see the <strong>Remarks</strong> section. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p> The variable is an 8-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 10-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{FLOAT}}. </p> </dd> + + + <dd> <p> The variable is a 12-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p> The variable is a 16-byte {{INT}}. </p> </dd> + + + <dd> <p>The variable is a void reference.</p> </dd> + + + <dd> <p>The variable is a boolean.</p> </dd> + + + <dd> <p>The variable is an integer.</p> </dd> + + + <dd> <p>The variable is a floating-point number.</p> </dd> + + + <dd> <p>The variable is a string.</p> </dd> + + + <dd> <p>The variable is a texture.</p> </dd> + + + <dd> <p>The variable is a 1D texture.</p> </dd> + + + <dd> <p>The variable is a 2D texture.</p> </dd> + + + <dd> <p>The variable is a 3D texture.</p> </dd> + + + <dd> <p>The variable is a texture cube.</p> </dd> + + + <dd> <p>The variable is a sampler.</p> </dd> + + + <dd> <p> The variable is a 1D sampler. </p> </dd> + + + <dd> <p> The variable is a 2D sampler. </p> </dd> + + + <dd> <p> The variable is a 3D sampler. </p> </dd> + + + <dd> <p> The variable is a cube sampler. </p> </dd> + + + <dd> <p>The variable is a pixel shader.</p> </dd> + + + <dd> <p>The variable is a vertex shader.</p> </dd> + + + <dd> <p> The variable is a pixel fragment. </p> </dd> + + + <dd> <p> The variable is a vertex fragment. </p> </dd> + + + <dd> <p>The variable is an unsigned integer.</p> </dd> + + + <dd> <p>The variable is an 8-bit unsigned integer.</p> </dd> + + + <dd> <p>The variable is a geometry shader.</p> </dd> + + + <dd> <p>The variable is a rasterizer-state object.</p> </dd> + + + <dd> <p>The variable is a depth-stencil-state object.</p> </dd> + + + <dd> <p>The variable is a blend-state object.</p> </dd> + + + <dd> <p>The variable is a buffer.</p> </dd> + + + <dd> <p>The variable is a constant buffer.</p> </dd> + + + <dd> <p>The variable is a texture buffer.</p> </dd> + + + <dd> <p>The variable is a 1D-texture array.</p> </dd> + + + <dd> <p>The variable is a 2D-texture array.</p> </dd> + + + <dd> <p>The variable is a render-target view.</p> </dd> + + + <dd> <p>The variable is a depth-stencil view.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled texture.</p> </dd> + + + <dd> <p>The variable is a 2D-multisampled-texture array.</p> </dd> + + + <dd> <p>The variable is a texture-cube array.</p> </dd> + + + <dd> <p>The variable holds a compiled hull-shader binary.</p> </dd> + + + <dd> <p>The variable holds a compiled domain-shader binary.</p> </dd> + + + <dd> <p>The variable is an interface.</p> </dd> + + + <dd> <p>The variable holds a compiled compute-shader binary.</p> </dd> + + + <dd> <p>The variable is a double precision (64-bit) floating-point number.</p> </dd> + + + <dd> <p>The variable is a 1D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 1D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 2D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is an array of 2D read-and-write textures.</p> </dd> + + + <dd> <p>The variable is a 3D read-and-write texture.</p> </dd> + + + <dd> <p>The variable is a read-and-write buffer.</p> </dd> + + + <dd> <p>The variable is a byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a read and write byte-address buffer.</p> </dd> + + + <dd> <p>The variable is a structured buffer. </p> </dd> + + + <dd> <p>The variable is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The variable is an append structured buffer.</p> </dd> + + + <dd> <p>The variable is a consume structured buffer.</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify shader-input options.</p> + <p><strong>{{D3D_SHADER_INPUT_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure. </p> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> This value is reserved. </p> </dd> + + + <dd> <p> Assign a shader input to a register based on the register assignment in the {{HLSL}} code (instead of letting the compiler choose the register). </p> </dd> + + + <dd> <p> Use a comparison sampler, which uses the SampleCmp (DirectX {{HLSL}} Texture Object) and SampleCmpLevelZero (DirectX {{HLSL}} Texture Object) sampling functions. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> A 2-bit value for encoding texture components. </p> </dd> + + + <dd> <p> Forces the enumeration to compile to 32 bits. This value is not used directly by titles. </p> </dd> + + + + + <p>Values that identify resource types that can be bound to a shader and that are reflected as part of the resource description for the shader.</p> + <p><strong>{{D3D_SHADER_INPUT_TYPE}}</strong>-typed values are specified in the <strong>Type</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + <dd> <p>The shader resource is a constant buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture buffer.</p> </dd> + + + <dd> <p>The shader resource is a texture.</p> </dd> + + + <dd> <p>The shader resource is a sampler.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write buffer.</p> </dd> + + + <dd> <p>The shader resource is a structured buffer.</p> <p>For more information about structured buffer, see the <strong>Remarks</strong> section.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write byte-address buffer.</p> </dd> + + + <dd> <p>The shader resource is an append-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a consume-structured buffer.</p> </dd> + + + <dd> <p>The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.</p> </dd> + + + + + <p>Values that identify the indended use of a constant-data buffer.</p> + <p><strong>{{D3D_SHADER_CBUFFER_FLAGS}}</strong>-typed values are specified in the <strong>uFlags</strong> member of the <strong>{{D3D11_SHADER_BUFFER_DESC}}</strong> structure.</p> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>Bind the constant buffer to an input slot defined in {{HLSL}} code (instead of letting the compiler choose the input slot).</p> </dd> + + + <dd> <p>This value is not used by a programmer; it exists to force the enumeration to compile to 32 bits.</p> </dd> + + + + + <p>Values that identify the intended use of constant-buffer data. </p> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing scalar constants.</p> </dd> + + + <dd> <p>A buffer containing texture data.</p> </dd> + + + <dd> <p>A buffer containing interface references.</p> </dd> + + + <dd> <p>A buffer containing binding information.</p> </dd> + + + + + <p>Values that identify shader parameters that use system-value semantics.</p> + <p> The <strong>{{D3D_NAME}}</strong> values identify shader parameters that have predefined system-value semantics. These values are used in a shader-signature description. For more information about shader-signature description, see <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong>. </p> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains an instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the number of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + <dd> <p>This parameter does not use a predefined system-value semantic.</p> </dd> + + + <dd> <p>This parameter contains position data.</p> </dd> + + + <dd> <p>This parameter contains clip-distance data.</p> </dd> + + + <dd> <p>This parameter contains cull-distance data.</p> </dd> + + + <dd> <p>This parameter contains a render-target-array index.</p> </dd> + + + <dd> <p>This parameter contains a viewport-array index.</p> </dd> + + + <dd> <p>This parameter contains a vertex {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a primitive {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains a instance {{ID}}.</p> </dd> + + + <dd> <p>This parameter contains data that identifies whether or not the primitive faces the camera.</p> </dd> + + + <dd> <p>This parameter contains a sampler-array index.</p> </dd> + + + <dd> <p>This parameter contains render-target data.</p> </dd> + + + <dd> <p>This parameter contains depth data.</p> </dd> + + + <dd> <p>This parameter contains alpha-coverage data.</p> </dd> + + + <dd> <p>This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.</p> </dd> + + + <dd> <p>This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines broken into within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter contains the tessellation factor that corresponds to the amount of lines that are created within the patch. This flag is used to tessellate an isolines patch.</p> </dd> + + + <dd> <p>This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p>This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.</p> </dd> + + + <dd> <p> This parameter contains a stencil reference. See Shader Specified Stencil Reference Value. </p> </dd> + + + <dd> <p> This parameter contains inner input coverage data. See Conservative Rasterization. </p> </dd> + + + + + <p>Values that identify the return type of a resource.</p> + <p>A resource return type is specified in the <strong>ReturnType</strong> member of the <strong>{{D3D11_SHADER_INPUT_BIND_DESC}}</strong> structure.</p> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + <dd> <p>Unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Signed integer.</p> </dd> + + + <dd> <p>Unsigned integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is an unsigned integer value normalized to a value between 0 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer value normalized to a value between -1 and 1.</p> </dd> + + + <dd> <p>Return type is a signed integer.</p> </dd> + + + <dd> <p>Return type is an unsigned integer.</p> </dd> + + + <dd> <p>Return type is a floating-point number.</p> </dd> + + + <dd> <p>Return type is unknown.</p> </dd> + + + <dd> <p>Return type is a double-precision value.</p> </dd> + + + <dd> <p>Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.</p> </dd> + + + + + <p>Values that identify the data types that can be stored in a register.</p> + <p>A register component type is specified in the <strong>ComponentType</strong> member of the <strong>{{D3D11_SIGNATURE_PARAMETER_DESC}}</strong> structure.</p> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + <dd> <p>The data type is unknown.</p> </dd> + + + <dd> <p>32-bit unsigned integer.</p> </dd> + + + <dd> <p>32-bit signed integer.</p> </dd> + + + <dd> <p>32-bit floating-point number.</p> </dd> + + + + + <p>Values that identify domain options for tessellator data.</p> + <p>The data domain defines the type of data. This enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + <dd> <p>The data type is undefined.</p> </dd> + + + <dd> <p>Isoline data.</p> </dd> + + + <dd> <p>Triangle data.</p> </dd> + + + <dd> <p>Quad data.</p> </dd> + + + + + <p>Values that identify partitioning options.</p> + <p>During tessellation, the partition option helps to determine how the algorithm chooses the next partition value; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + <dd> <p>The partitioning type is undefined.</p> </dd> + + + <dd> <p>Partition with integers only.</p> </dd> + + + <dd> <p>Partition with a power-of-two number only.</p> </dd> + + + <dd> <p>Partition with an odd, fractional number.</p> </dd> + + + <dd> <p>Partition with an even, fractional number.</p> </dd> + + + + + <p>Values that identify output primitive types.</p> + <p>The output primitive type determines how the tessellator output data is organized; this enumeration is used by <strong>{{D3D11_SHADER_DESC}}</strong>.</p> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is undefined.</p> </dd> + + + <dd> <p>The output primitive type is a point.</p> </dd> + + + <dd> <p>The output primitive type is a line.</p> </dd> + + + <dd> <p>The output primitive type is a clockwise triangle.</p> </dd> + + + <dd> <p>The output primitive type is a counter clockwise triangle.</p> </dd> + + + + + <p>Values that indicate the minimum desired interpolation precision.</p> + <p>For more info, see <strong>Scalar Types</strong> and Using {{HLSL}} minimum precision.</p> + + + <dd> <p>Default minimum precision, which is 32-bit precision.</p> </dd> + + + <dd> <p>Minimum precision is min16float, which is 16-bit floating point. </p> </dd> + + + <dd> <p>Minimum precision is min10float, which is 10-bit floating point. </p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + <dd> <p>Minimum precision is min16int, which is 16-bit signed integer. </p> </dd> + + + <dd> <p>Minimum precision is min16uint, which is 16-bit unsigned integer. </p> </dd> + + + <dd> <p>Minimum precision is any 16-bit value. </p> </dd> + + + <dd> <p>Minimum precision is any 10-bit value. </p> </dd> + + + + + <p>Specifies interpolation mode, which affects how values are calculated during rasterization.</p> + + + <dd> <p>The interpolation mode is undefined.</p> </dd> + + + <dd> <p>Don't interpolate between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and centroid clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but sample clamped when multisampling.</p> </dd> + + + <dd> <p>Interpolate linearly between register values but with no perspective correction and sample clamped when multisampling.</p> </dd> + + + + + <p>Indicates semantic flags for function parameters.</p> + + + <dd> <p>The parameter has no semantic flags.</p> </dd> + + + <dd> <p>Indicates an input parameter.</p> </dd> + + + <dd> <p>Indicates an output parameter.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Defines a shader macro.</p> + <p>You can use shader macros in your shaders. The <strong>{{D3D_SHADER_MACRO}}</strong> structure defines a single shader macro as shown in the following example:</p><pre> {{D3D_SHADER_MACRO}} Shader_Macros[] = { "zero", "0", {{NULL}}, {{NULL}} }; +</pre><p>The following shader or effect creation functions take an array of shader macros as an input parameter:</p><ul> <li> <strong>{{D3D10CompileShader}}</strong> </li> <li> <strong>{{D3DX10CreateEffectFromFile}}</strong> </li> <li> <strong>{{D3DX10PreprocessShaderFromFile}}</strong> </li> <li> <strong>{{D3DX11CreateAsyncShaderPreprocessProcessor}}</strong> </li> </ul> + + + <dd> <p>The macro name.</p> </dd> + + + <dd> <p>The macro definition.</p> </dd> + + + + + <p>This interface is used to return arbitrary length data.</p> + <p>An <strong>{{ID3D10Blob}}</strong> is obtained by calling <strong>{{D3D10CreateBlob}}</strong>.</p><p>The <strong>{{ID3DBlob}}</strong> interface is type defined in the {{D3DCommon}}.h header file as a <strong>{{ID3D10Blob}}</strong> interface, which is fully defined in the {{D3DCommon}}.h header file. <strong>{{ID3DBlob}}</strong> is version neutral and can be used in code for any Direct3D version.</p><p>Blobs can be used as a data buffer, storing vertex, adjacency, and material information during mesh optimization and loading operations. Also, these objects are used to return object code and error messages in {{APIs}} that compile vertex, geometry and pixel shaders.</p> + + + + <p>Get a reference to the data.</p> + <p>Returns a reference.</p> + + + + <p>Get the size.</p> + <p>The size of the data, in bytes.</p> + + + + + + + + + + + + + <p><strong>{{ID3DInclude}}</strong> is an include interface that the user implements to allow an application to call user-overridable methods for opening and closing shader #include files. </p> + <p> To use this interface, create an interface that inherits from <strong>{{ID3DInclude}}</strong> and implement custom behavior for the methods. </p> + + + + <p>A user-implemented method for opening and reading the contents of a shader #include file.</p> + <p> The user-implemented method must return {{S_OK}}. If <strong>Open</strong> fails when it reads the #include file, the application programming interface ({{API}}) that caused <strong>Open</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> A <strong>{{D3D_INCLUDE_TYPE}}</strong>-typed value that indicates the location of the #include file. </p> </dd> + + + <dd> <p>Name of the #include file.</p> </dd> + + + <dd> <p> Pointer to the container that includes the #include file. The compiler might pass {{NULL}} in <em>pParentData</em>. For more information, see the "Searching for Include Files" section in Compile an Effect (Direct3D 11). </p> </dd> + + + <dd> <p> Pointer to the buffer that contains the include directives. This reference remains valid until you call<strong>{{ID3DInclude::Close}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the number of bytes that <strong>Open</strong> returns in <em>ppData</em>. </p> </dd> + + + + + <p>A user-implemented method for closing a shader #include file.</p> + <p> If <strong>{{ID3DInclude::Open}}</strong> was successful, <strong>Close</strong> is guaranteed to be called before the {{API}} using the <strong>{{ID3DInclude}}</strong> interface returns. </p> + <p> The user-implemented <strong>Close</strong> method should return {{S_OK}}. If <strong>Close</strong> fails when it closes the #include file, the application programming interface ({{API}}) that caused <strong>Close</strong> to be called fails. This failure can occur in one of the following situations: </p><ul> <li> The high-level shader language ({{HLSL}}) shader fails one of the <strong>{{D3D10CompileShader}}***</strong> functions. </li> <li> The effect fails one of the <strong>{{D3D10CreateEffect}}***</strong> functions. </li> </ul> + + + <dd> <p> Pointer to the buffer that contains the include directives. This is the reference that was returned by the corresponding <strong>{{ID3DInclude::Open}}</strong> call. </p> </dd> + + + + + <p>The type of a font represented by a single font file. Font formats that consist of multiple files, for example Type 1 .{{PFM}} and .{{PFB}}, have separate enum values for each of the file types.</p> + + + <dd> <p>Font type is not recognized by the DirectWrite font system.</p> </dd> + + + <dd> <p>OpenType font with {{CFF}} outlines.</p> </dd> + + + <dd> <p>OpenType font with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font that contains a TrueType collection.</p> </dd> + + + <dd> <p>Type 1 {{PFM}} font.</p> </dd> + + + <dd> <p>Type 1 {{PFB}} font.</p> </dd> + + + <dd> <p>Vector .{{FON}} font.</p> </dd> + + + <dd> <p>Bitmap .{{FON}} font.</p> </dd> + + + + + <p>Indicates the file format of a complete font face.</p> + <p>Font formats that consist of multiple files, such as Type 1 .{{PFM}} and .{{PFB}}, have a single enum entry.</p> + + + <dd> <p>OpenType font face with {{CFF}} outlines.</p> </dd> + + + <dd> <p>The font data includes only the {{CFF}} table from an OpenType {{CFF}} font. This font face type can be used only for embedded fonts (i.e., custom font file loaders) and the resulting font face object supports only the minimum functionality necessary to render glyphs.</p> </dd> + + + <dd> <p>OpenType font face with TrueType outlines.</p> </dd> + + + <dd> <p>OpenType font face that is a part of a TrueType collection.</p> </dd> + + + <dd> <p>A Type 1 font face.</p> </dd> + + + <dd> <p>A vector .{{FON}} format font face.</p> </dd> + + + <dd> <p>A bitmap .{{FON}} format font face.</p> </dd> + + + <dd> <p>Font face type is not recognized by the DirectWrite font system.</p> </dd> + + + + + <p>Specifies algorithmic style simulations to be applied to the font face. Bold and oblique simulations can be combined via bitwise {{OR}} operation.</p> + <p> Style simulations are not recommended for good typographic quality.</p> + + + <dd> <p>Indicates that no simulations are applied to the font face.</p> </dd> + + + <dd> <p>Indicates that algorithmic emboldening is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_BOLD}}</strong> increases weight by applying a widening algorithm to the glyph outline. This may be used to simulate a bold weight where no designed bold weight is available.</p> </dd> + + + <dd> <p>Indicates that algorithmic italicization is applied to the font face. <strong>{{DWRITE_FONT_SIMULATIONS_OBLIQUE}}</strong> applies obliquing (shear) to the glyph outline. This may be used to simulate an oblique/italic style where no designed oblique/italic style is available.</p> </dd> + + + + + <p>Represents the density of a typeface, in terms of the lightness or heaviness of the strokes. The enumerated values correspond to the usWeightClass definition in the OpenType specification. The <em>usWeightClass</em> represents an integer value between 1 and 999. Lower values indicate lighter weights; higher values indicate heavier weights.</p> + <p>Weight differences are generally differentiated by an increased stroke or thickness that is associated with a given character in a typeface, as compared to a "normal" character from that same typeface. +The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p><p></p><strong>Note</strong>??Not all weights are available for all typefaces. When a weight is not available for a typeface, the closest matching weight is returned.?<p>Font weight values less than 1 or greater than 999 are considered invalid, and they are rejected by font {{API}} functions.</p> + + + <dd> <p>Predefined font weight : Thin (100).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-light (200).</p> </dd> + + + <dd> <p>Predefined font weight : Light (300).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-Light (350).</p> </dd> + + + <dd> <p>Predefined font weight : Normal (400).</p> </dd> + + + <dd> <p>Predefined font weight : Regular (400).</p> </dd> + + + <dd> <p>Predefined font weight : Medium (500).</p> </dd> + + + <dd> <p>Predefined font weight : Demi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Semi-bold (600).</p> </dd> + + + <dd> <p>Predefined font weight : Bold (700).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-bold (800).</p> </dd> + + + <dd> <p>Predefined font weight : Black (900).</p> </dd> + + + <dd> <p>Predefined font weight : Heavy (900).</p> </dd> + + + <dd> <p>Predefined font weight : Extra-black (950).</p> </dd> + + + <dd> <p>Predefined font weight : Ultra-black (950).</p> </dd> + + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Represents the style of a font face as normal, italic, or oblique.</p> + <p>Three terms categorize the slant of a font: normal, italic, and oblique. </p><table> <tr><th>Font style</th><th>Description</th></tr> <tr><td>Normal</td><td>The characters in a normal, or roman, font are upright. +</td></tr> <tr><td>Italic +</td><td>The characters in an italic font are truly slanted and appear as they were designed. +</td></tr> <tr><td>Oblique</td><td>The characters in an oblique font are artificially slanted.</td></tr> </table><p>?</p><p>For Oblique, the slant is achieved by performing a shear transformation on the characters from a normal font. When a true italic font is not available on a computer or printer, an oblique style can be generated from the normal font and used to simulate an italic font. The following illustration shows the normal, italic, and oblique font styles for the Palatino Linotype font. Notice how the italic font style has a more flowing and visually appealing appearance than the oblique font style, which is simply created by skewing the normal font style version of the text.</p><p></p><strong>Note</strong>?? Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font {{API}} functions.? + + + <dd> <p>Font style : Normal.</p> </dd> + + + <dd> <p>Font style : Oblique. </p> </dd> + + + <dd> <p>Font style : Italic.</p> </dd> + + + + + <p>The informational string enumeration which identifies a string embedded in a font file.</p> + + + <dd> <p>Indicates the string containing the unspecified name {{ID}}.</p> </dd> + + + <dd> <p>Indicates the string containing the copyright notice provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing a version number.</p> </dd> + + + <dd> <p>Indicates the string containing the trademark information provided by the font.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font manufacturer.</p> </dd> + + + <dd> <p>Indicates the string containing the name of the font designer.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font designer (with protocol, e.g., http://, ftp://).</p> </dd> + + + <dd> <p>Indicates the string containing the description of the font. This may also contain revision information, usage recommendations, history, features, and so on.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} of the font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the {{URL}}, it can be used to register the font.</p> </dd> + + + <dd> <p>The full name of the font, like Arial Bold, from <em>name id 4</em> in the name table</p> </dd> + + + <dd> <p>Indicates the string containing the description of how the font may be legally used, or different example scenarios for licensed use.</p> </dd> + + + <dd> <p>Indicates the string containing the {{URL}} where additional licensing information can be found.</p> </dd> + + + <dd> <p>Indicates the string containing the {{GDI}}-compatible family name. Since {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names (e.g., "Arial", "Arial Narrow", "Arial Black").</p> </dd> + + + <dd> <p>Indicates the string containing a {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Indicates the string containing the family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Indicates the string containing the subfamily name preferred by the designer. This name is typically only present if it differs from the {{GDI}}-compatible subfamily name.</p> </dd> + + + <dd> <p>Contains sample text for display in font lists. This can be the font name or any other text that the designer thinks is the best example to display the font in.</p> </dd> + + + <dd> <p>The postscript name of the font, like GillSans-Bold, from <em>name id 6</em> in the name table.</p> </dd> + + + <dd> <p>The postscript {{CID}} findfont name, from <em>name id 20</em> in the name table</p> </dd> + + + + + <p>Specifies the type of DirectWrite factory object.</p> + <p>A DirectWrite factory object contains information about its internal state, such as font loader registration and cached font data. In most cases you should use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state information, thereby reducing memory usage. However, there are cases when it is desirable to reduce the impact of a component on the rest of the process, such as a plug-in from an untrusted source, by sandboxing and isolating it from the rest of the process components. In such cases, you should use an isolated factory for the sandboxed component.</p> + + + <dd> <p>Indicates that the DirectWrite factory is a shared factory and that it allows for the reuse of cached font data across multiple in-process components. Such factories also take advantage of cross process font caching components for better performance.</p> </dd> + + + <dd> <p>Indicates that the DirectWrite factory object is isolated. Objects created from the isolated factory do not interact with internal DirectWrite state from other components.</p> </dd> + + + + + <p> Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. +</p> + + + <dd> <p>The red, green, and blue color components of each pixel are assumed to occupy the same point.</p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with red on the left, green in the center, and blue on the right. This is the most common pixel geometry for {{LCD}} monitors. </p> </dd> + + + <dd> <p>Each pixel is composed of three vertical stripes, with blue on the left, green in the center, and red on the right.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p> Specifies the direction in which reading progresses. </p><strong>Note</strong>??<strong>{{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}</strong> and <strong>{{DWRITE_READING_DIRECTION_BOTTOM_TO_TOP}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that reading progresses from left to right.</p> </dd> + + + <dd> <p>Indicates that reading progresses from right to left.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Indicates that reading progresses from top to bottom.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> Indicates that reading progresses from bottom to top.</p> </dd> + + + + + <p> Indicates the direction of how lines of text are placed relative to one another. </p> + + + <dd> <p>Specifies that text lines are placed from top to bottom.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from bottom to top.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from left to right.</p> </dd> + + + <dd> <p>Specifies that text lines are placed from right to left.</p> </dd> + + + + + <p>Specifies the alignment of paragraph text along the reading direction axis, relative to the leading and trailing edge of the layout box.</p> + + + <dd> <p>The leading edge of the paragraph text is aligned to the leading edge of the layout box.</p> </dd> + + + <dd> <p>The trailing edge of the paragraph text is aligned to the trailing edge of the layout box.</p> </dd> + + + <dd> <p>The center of the paragraph text is aligned to the center of the layout box.</p> </dd> + + + <dd> <p>Align text to the leading side, and also justify text to fill the lines.</p> </dd> + + + + + <p> Specifies the alignment of paragraph text along the flow direction axis, relative to the top and bottom of the flow's layout box. </p> + + + <dd> <p>The top of the text flow is aligned to the top edge of the layout box.</p> </dd> + + + <dd> <p>The bottom of the text flow is aligned to the bottom edge of the layout box.</p> </dd> + + + <dd> <p>The center of the flow is aligned to the center of the layout box.</p> </dd> + + + + + <p> Specifies the word wrapping to be used in a particular multiline paragraph. </p><strong>Note</strong>??<strong>{{DWRITE_WORD_WRAPPING_EMERGENCY_BREAK}}</strong>, <strong>{{DWRITE_WORD_WRAPPING_WHOLE}} _WORD</strong>, and <strong>{{DWRITE_WORD_WRAPPING_CHARACTER}}</strong> are available in Windows?8.1 and later, only.? + + + <dd> <p>Indicates that words are broken across lines to avoid text overflowing the layout box.</p> </dd> + + + <dd> <p>Indicates that words are kept within the same line even when it overflows the layout box. This option is often used with scrolling to reveal overflow text.</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Words are broken across lines to avoid text overflowing the layout box. Emergency wrapping occurs if the word is larger than the maximum width. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p> When emergency wrapping, only wrap whole words, never breaking words when the layout width is too small for even a single word. +</p> </dd> + + + <dd> <strong>Note</strong>??Windows?8.1 and later only. ? <p>Wrap between any valid character clusters.</p> </dd> + + + + + <p>The method used for line spacing in a text layout.</p> + <p>The line spacing method is set by using the <strong>SetLineSpacing</strong> method of the <strong>{{IDWriteTextFormat}}</strong> or <strong>{{IDWriteTextLayout}}</strong> interfaces. To get the current line spacing method of a text format or text layou use the <strong>GetLineSpacing</strong>.</p> + + + <dd> <p>Line spacing depends solely on the content, adjusting to accommodate the size of fonts and inline objects.</p> </dd> + + + <dd> <p>Lines are explicitly set to uniform spacing, regardless of the size of fonts and inline objects. This can be useful to avoid the uneven appearance that can occur from font fallback.</p> </dd> + + + <dd> <p>Line spacing and baseline distances are proportional to the computed values based on the content, the size of the fonts and inline objects. </p> <strong>Note</strong>??This value is only available on Windows?10 or later and it can be used with <strong>{{IDWriteTextLayout3::SetLineSpacing}}</strong>, but can not be used with <strong>{{IDWriteTextFormat::SetLineSpacing}}</strong>. ? </dd> + + + + + <p>Specifies the text granularity used to trim text overflowing the layout box.</p> + + + <dd> <p>No trimming occurs. Text flows beyond the layout width.</p> </dd> + + + <dd> <p>Trimming occurs at a character cluster boundary.</p> </dd> + + + <dd> <p>Trimming occurs at a word boundary.</p> </dd> + + + + + <p>A value that indicates the typographic feature of text supplied by the font.</p> + + + <dd> <p>The default.</p> </dd> + + + <dd> <p>Indicates that the font is displayed vertically.</p> </dd> + + + <dd> <p>Replaces normal figures with figures adjusted for vertical display.</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with an alternative form.</p> <p><strong>Equivalent OpenType tag:</strong> 'afrc' </p> </dd> + + + <dd> <p> Turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.</p> <p><strong>Equivalent OpenType tag:</strong> 'c2pc'</p> </dd> + + + <dd> <p>Turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text. </p> <p><strong>Equivalent OpenType tag:</strong> 'c2sc'</p> </dd> + + + <dd> <p> In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.</p> <p><strong>Equivalent OpenType tag:</strong> 'calt'</p> </dd> + + + <dd> <p> Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.</p> <p><strong>Equivalent OpenType tag:</strong> 'case'</p> </dd> + + + <dd> <p> To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called.</p> <p><strong>Equivalent OpenType tag:</strong> 'ccmp'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.</p> <p><strong>Equivalent OpenType tag:</strong> 'clig'</p> </dd> + + + <dd> <p> Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons. </p> <p><strong>Equivalent OpenType tag:</strong> 'cpsp'</p> </dd> + + + <dd> <p>Replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character. </p> <p><strong>Equivalent OpenType tag:</strong> 'cswh'</p> </dd> + + + <dd> <p> In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'curs'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user's preference.</p> <p><strong>Equivalent OpenType tag:</strong> 'dlig'</p> </dd> + + + <dd> <p> Replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. For example, a user would invoke this feature to replace kanji character U+5516 with U+555E. +</p> <p><strong>Equivalent OpenType tag:</strong> 'expt'</p> </dd> + + + <dd> <p> Replaces figures separated by a slash with 'common' (diagonal) fractions.</p> <p><strong>Equivalent OpenType tag:</strong> 'frac'</p> </dd> + + + <dd> <p> Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a {{CJKV}} font, this may include "lower {{ASCII}}" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. For example, a user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions.</p> <p><strong>Equivalent OpenType tag:</strong> 'fwid'</p> </dd> + + + <dd> <p> Produces the half forms of consonants in Indic scripts. For example, in Hindi (Devanagari script), the conjunct {{KKa}}, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form. </p> <p><strong>Equivalent OpenType tag:</strong> 'half'</p> </dd> + + + <dd> <p> Produces the halant forms of consonants in Indic scripts. For example, in Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form.</p> <p><strong>Equivalent OpenType tag:</strong> 'haln'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs.</p> <p><strong>Equivalent OpenType tag:</strong> 'halt'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. </p> <p><strong>Equivalent OpenType tag:</strong> 'hist'</p> </dd> + + + <dd> <p> Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color.</p> <p><strong>Equivalent OpenType tag:</strong> 'hkna'</p> </dd> + + + <dd> <p> Replaces the default (current) forms with the historical alternates. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.</p> <p><strong>Equivalent OpenType tag:</strong> 'hlig'</p> </dd> + + + <dd> <p> Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many {{CJKV}} fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents.</p> <p><strong>Equivalent OpenType tag:</strong> 'hwid'</p> </dd> + + + <dd> <p> Used to access the {{JIS}} X 0212-1990 glyphs for the cases when the {{JIS}} X 0213:2004 form is encoded. The {{JIS}} X 0212-1990 (aka, "Hojo Kanji") and {{JIS}} X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both {{JIS}} X 0212-1990 and {{JIS}} X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that {{JIS}} X 0213:2004 forms be the preferred encoded form.</p> <p><strong>Equivalent OpenType tag:</strong> 'hojo'</p> </dd> + + + <dd> <p> The National Language Council ({{NLC}}) of Japan has defined new glyph shapes for a number of {{JIS}} characters, which were incorporated into {{JIS}} X 0213:2004 as new prototypical forms. The 'jp04' feature is A subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of {{JIS}} X 0213:2004.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp04'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} C 6226-1978 ({{JIS78}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp78'</p> </dd> + + + <dd> <p>Replaces default ({{JIS90}}) Japanese glyphs with the corresponding forms from the {{JIS}} X 0208-1983 ({{JIS83}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp83'</p> </dd> + + + <dd> <p> Replaces Japanese glyphs from the {{JIS78}} or {{JIS83}} specifications with the corresponding forms from the {{JIS}} X 0208-1990 ({{JIS90}}) specification.</p> <p><strong>Equivalent OpenType tag:</strong> 'jp90'</p> </dd> + + + <dd> <p> Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.</p> <p><strong>Equivalent OpenType tag:</strong> 'kern'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.</p> <p><strong>Equivalent OpenType tag:</strong> 'liga'</p> </dd> + + + <dd> <p>Changes selected figures from oldstyle to the default lining form. For example, a user may invoke this feature in order to get lining figures, which fit better with all-capital text. This feature overrides results of the Oldstyle Figures feature (onum).</p> <p><strong>Equivalent OpenType tag:</strong> 'lnum'</p> </dd> + + + <dd> <p> Enables localized forms of glyphs to be substituted for default forms. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct. </p> <p><strong>Equivalent OpenType tag:</strong> 'locl'</p> </dd> + + + <dd> <p> Positions mark glyphs with respect to base glyphs. For example, in Arabic script positioning the Hamza above the Yeh.</p> <p><strong>Equivalent OpenType tag: </strong> 'mark'</p> </dd> + + + <dd> <p> Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).</p> <p><strong>Equivalent OpenType tag:</strong> 'mgrk'</p> </dd> + + + <dd> <p> Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. For example, in Arabic, the ligaturised mark Ha with Hamza above it can also be obtained by positioning these marks relative to one another.</p> <p><strong>Equivalent OpenType tag:</strong> 'mkmk'</p> </dd> + + + <dd> <p> Replaces default glyphs with various notational forms (such as glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.</p> <p><strong>Equivalent OpenType tag:</strong> 'nalt'</p> </dd> + + + <dd> <p> Used to access glyphs made from glyph shapes defined by the National Language Council ({{NLC}}) of Japan for a number of {{JIS}} characters in 2000. </p> <p><strong>Equivalent OpenType tag:</strong> 'nlck'</p> </dd> + + + <dd> <p> Changes selected figures from the default lining style to oldstyle form. For example, a user may invoke this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. This feature overrides results of the Lining Figures feature (lnum).</p> <p><strong>Equivalent OpenType tag:</strong> 'onum'</p> </dd> + + + <dd> <p> Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.</p> <p><strong>Equivalent OpenType tag:</strong> 'ordn'</p> </dd> + + + <dd> <p> Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs ({{GPOS}}, not {{GSUB}} feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated).</p> <p><strong>Equivalent OpenType tag:</strong> 'palt'</p> </dd> + + + <dd> <p>Turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and it is referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia). </p> <p><strong>Equivalent OpenType tag:</strong> 'pcap'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'pnum'</p> </dd> + + + <dd> <p> Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in {{CJKV}} fonts, but may also be used for Kana in Japanese fonts.</p> <p><strong>Equivalent OpenType tag:</strong> 'pwid'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'qwid'</p> </dd> + + + <dd> <p> Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to ensure correct glyph formation. </p> <p><strong>Equivalent OpenType tag:</strong> 'rlig'</p> </dd> + + + <dd> <p> Identifies glyphs in the font which have been designed for "ruby", from the old typesetting term for four-point-sized type. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. </p> <p><strong>Equivalent OpenType tag:</strong> 'ruby'</p> </dd> + + + <dd> <p> Replaces the default forms with the stylistic alternates. Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. </p> <p><strong>Equivalent OpenType tag:</strong> 'salt'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors.</p> <p><strong>Equivalent OpenType tag:</strong> 'sinf'</p> </dd> + + + <dd> <p> Turns lowercase characters into small capitals. This corresponds to the common {{SC}} font layout. It is generally used for display lines set in Large &amp; small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included.</p> <p><strong>Equivalent OpenType tag:</strong> 'smcp'</p> </dd> + + + <dd> <p> Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'smpl'</p> </dd> + + + <dd> <p> In addition to, or instead of, stylistic alternatives of individual glyphs (see 'salt' feature), some fonts may contain sets of stylistic variant glyphs corresponding to portions of the character set, such as multiple variants for lowercase letters in a Latin font. Glyphs in stylistic sets may be designed to harmonise visually, interract in particular ways, or otherwise work together. Examples of fonts including stylistic sets are Zapfino Linotype and Adobe's Poetica. Individual features numbered sequentially with the tag name convention 'ss01' 'ss02' 'ss03' . 'ss20' provide a mechanism for glyphs in these sets to be associated via {{GSUB}} lookup indexes to default forms and to each other, and for users to select from available stylistic sets</p> <p><strong>Equivalent OpenType tag:</strong> 'ss01'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss02'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss03'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss04'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss05'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss06'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss07'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss08'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss09'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss10'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss11'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss12'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss13'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss14'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss15'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss16'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss17'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss18'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss19'</p> </dd> + + + <dd> <p>See the description for <strong>{{DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1}}</strong>.</p> <p><strong>Equivalent OpenType tag:</strong> 'ss20'</p> </dd> + + + <dd> <p> May replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement.</p> <p><strong>Equivalent OpenType tag:</strong> 'subs'</p> </dd> + + + <dd> <p> Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles).</p> <p><strong>Equivalent OpenType tag:</strong> 'sups'</p> </dd> + + + <dd> <p> Replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character.</p> <p><strong>Equivalent OpenType tag:</strong> 'swsh'</p> </dd> + + + <dd> <p> Replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes.</p> <p><strong>Equivalent OpenType tag:</strong> 'titl'</p> </dd> + + + <dd> <p> Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts).</p> <p><strong>Equivalent OpenType tag:</strong> 'tnam'</p> </dd> + + + <dd> <p> Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.</p> <p><strong>Equivalent OpenType tag:</strong> 'tnum'</p> </dd> + + + <dd> <p> Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms.</p> <p><strong>Equivalent OpenType tag:</strong> 'trad'</p> </dd> + + + <dd> <p> Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation.</p> <p><strong>Equivalent OpenType tag:</strong> 'twid'</p> </dd> + + + <dd> <p> Maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. +</p> <p><strong>Equivalent OpenType tag:</strong> 'unic'</p> </dd> + + + <dd> <p>Allows the user to change from the default 0 to a slashed form. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. </p> <p><strong>Equivalent OpenType tag:</strong> 'zero'</p> </dd> + + + + + <p>Indicates additional shaping requirements for text.</p> + + + <dd> <p>Indicates that there is no additional shaping requirements for text. Text is shaped with the writing system default behavior.</p> </dd> + + + <dd> <p>Indicates that text should leave no visible control or format control characters.</p> </dd> + + + + + <p> Indicates the condition at the edges of inline object or text used to determine line-breaking behavior.</p> + + + <dd> <p> Indicates whether a break is allowed by determining the condition of the neighboring text span or inline object.</p> </dd> + + + <dd> <p> Indicates that a line break is allowed, unless overruled by the condition of the neighboring text span or inline object, either prohibited by a "may not break" condition or forced by a "must break" condition. </p> </dd> + + + <dd> <p> Indicates that there should be no line break, unless overruled by a "must break" condition from the neighboring text span or inline object. </p> </dd> + + + <dd> <p> Indicates that the line break must happen, regardless of the condition of the adjacent text span or inline object. </p> </dd> + + + + + <p>Specifies how to apply number substitution on digits and related punctuation.</p> + + + <dd> <p>Specifies that the substitution method should be determined based on the {{LOCALE_IDIGITSUBSTITUTION}} value of the specified text culture.</p> </dd> + + + <dd> <p>If the culture is Arabic or Persian, specifies that the number shapes depend on the context. Either traditional or nominal number shapes are used, depending on the nearest preceding strong character or (if there is none) the reading direction of the paragraph.</p> </dd> + + + <dd> <p>Specifies that code points 0x30-0x39 are always rendered as nominal numeral shapes (ones of the European number), that is, no substitution is performed.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the national number shapes as specified by the {{LOCALE_SNATIVEDIGITS}} value of the specified text culture.</p> </dd> + + + <dd> <p>Specifies that numbers are rendered using the traditional shapes for the specified culture. For most cultures, this is the same as NativeNational. However, NativeNational results in Latin numbers for some Arabic cultures, whereasDWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL results in arabic numbers for all Arabic cultures.</p> </dd> + + + + + <p>Identifies a type of alpha texture.</p> + <p>An alpha texture is a bitmap of alpha values, each representing opacity of a pixel or subpixel.</p> + + + <dd> <p>Specifies an alpha texture for aliased text rendering (that is, each pixel is either fully opaque or fully transparent), with one byte per pixel.</p> </dd> + + + <dd> <p>Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and one byte per pixel in the vertical dimension.</p> </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + + + <dd> <p>The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.</p> </dd> + + + <dd> <p>The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.</p> </dd> + + + <dd> <p>The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of <strong>ascent</strong>, <strong>descent</strong>, and <strong>lineGap</strong>. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.</p> </dd> + + + <dd> <p>The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.</p> </dd> + + + <dd> <p>The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.</p> </dd> + + + <dd> <p>The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.</p> </dd> + + + <dd> <p>The suggested underline thickness value of the font face in font design units.</p> </dd> + + + <dd> <p>The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.</p> </dd> + + + <dd> <p>The suggested strikethrough thickness value of the font face in font design units.</p> </dd> + + + + + <p>Specifies the metrics of an individual glyph. The units depend on how the metrics are obtained.</p> + + + <dd> <p>Specifies the X offset from the glyph origin to the left edge of the black box. The glyph origin is the current horizontal writing position. A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').</p> </dd> + + + <dd> <p>Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.</p> </dd> + + + <dd> <p>Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally. The value is negative when the right edge of the black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the vertical offset from the vertical origin to the top of the black box. Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.</p> </dd> + + + <dd> <p>Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically. Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different. Its Y coordinate is specified by <strong>verticalOriginY</strong> value, and its X coordinate is half the <strong>advanceWidth</strong> to the right of the horizontal origin.</p> </dd> + + + <dd> <p>Specifies the vertical distance from the bottom edge of the black box to the advance height. This is positive when the bottom edge of the black box is within the layout box, or negative when the bottom edge of black box overhangs the layout box.</p> </dd> + + + <dd> <p>Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system. The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing and the top (that is, yMax) of the glyph's bounding box.</p> </dd> + + + + + <p>The optional adjustment to a glyph's position.</p> + <p>An glyph offset changes the position of a glyph without affecting the pen position. Offsets are in logical, pre-transform units.</p> + + + <dd> <p>The offset in the advance direction of the run. A positive advance offset moves the glyph to the right (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.</p> </dd> + + + <dd> <p>The offset in the ascent direction, that is, the direction ascenders point. A positive ascender offset moves the glyph up (in pre-transform coordinates). A negative ascender offset moves the glyph down.</p> </dd> + + + + + <p>The <strong>{{DWRITE_MATRIX}}</strong> structure specifies the graphics transform to be applied to rendered glyphs.</p> + + + <dd> <p>A value indicating the horizontal scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical shear / sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shear / negative sine of rotation.</p> </dd> + + + <dd> <p>A value indicating the vertical scaling / cosine of rotation.</p> </dd> + + + <dd> <p>A value indicating the horizontal shift (always orthogonal regardless of rotation).</p> </dd> + + + <dd> <p>A value indicating the vertical shift (always orthogonal regardless of rotation.)</p> </dd> + + + + + <p>Specifies a range of text positions where format is applied in the text represented by an <strong>{{IDWriteTextLayout}}</strong> object.</p> + + + + <p>Specifies properties used to identify and execute typographic features in the current font face.</p> + <p>A non-zero value generally enables the feature execution, while the zero value disables it. A feature requiring a selector uses this value to indicate the selector index.</p><p>The OpenType standard provides access to typographic features available in the font by means of a feature tag with the associated parameters. The OpenType feature tag is a 4-byte identifier of the registered name of a feature. For example, the 'kern' feature name tag is used to identify the 'Kerning' feature in OpenType font. Similarly, the OpenType feature tag for 'Standard Ligatures' and 'Fractions' is 'liga' and 'frac' respectively. Since a single run can be associated with more than one typographic features, the Text String {{API}} accepts typographic settings for a run as a list of features and are executed in the order they are specified.</p><p>The value of the tag member represents the OpenType name tag of the feature, while the param value represents additional parameter for the execution of the feature referred by the tag member. Both <strong>nameTag</strong> and <strong>parameter</strong> are stored as little endian, the same convention followed by {{GDI}}. Most features treat the Param value as a binary value that indicates whether to turn the execution of the feature on or off, with it being off by default in the majority of cases. Some features, however, treat this value as an integral value representing the integer index to the list of alternate results it may produce during the execution; for instance, the feature 'Stylistic Alternates' or 'salt' uses the <strong>parameter</strong> value as an index to the list of alternate substituting glyphs it could produce for a specified glyph. </p> + + + <dd> <p>The feature OpenType name identifier.</p> </dd> + + + <dd> <p>The execution parameter of the feature.</p> </dd> + + + + + <p>Contains a set of typographic features to be applied during text shaping.</p> + + + <dd> <p>A reference to a structure that specifies properties used to identify and execute typographic features in the font.</p> </dd> + + + <dd> <p>A value that indicates the number of features being applied to a font face.</p> </dd> + + + + + <p>Specifies the trimming option for text overflowing the layout box. </p> + + + <dd> <p>A value that specifies the text granularity used to trim text overflowing the layout box.</p> </dd> + + + <dd> <p>A character code used as the delimiter that signals the beginning of the portion of text to be preserved. Text starting from the Nth occurence of the delimiter (where N equals delimiterCount) counting backwards from the end of the text block will be preserved. For example, given the text is a path like c:\A\B\C\D\file.txt and delimiter equal to '\' and delimiterCount equal to 1, the file.txt portion of the text would be preserved. Specifying a delimiterCount of 2 would preserve D\file.txt. </p> </dd> + + + <dd> <p>The delimiter count, counting from the end of the text, to preserve text from.</p> </dd> + + + + + <p>Stores the association of text and its writing system script, as well as some display attributes.</p> + + + <dd> <p>The zero-based index representation of writing system script.</p> </dd> + + + <dd> <p>A value that indicates additional shaping requirement of text.</p> </dd> + + + + + <p>Line breakpoint characteristics of a character.</p> + + + <dd> <p>Indicates a breaking condition before the character.</p> </dd> + + + <dd> <p>Indicates a breaking condition after the character.</p> </dd> + + + <dd> <p>Indicates that the character is some form of whitespace, which may be meaningful for justification.</p> </dd> + + + <dd> <p>Indicates that the character is a soft hyphen, often used to indicate hyphenation points inside words.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph is shaped alone.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains shaping output properties for an output glyph.</p> + + + <dd> <p>Indicates that the glyph has justification applied.</p> </dd> + + + <dd> <p>Indicates that the glyph is the start of a cluster.</p> </dd> + + + <dd> <p>Indicates that the glyph is a diacritic mark.</p> </dd> + + + <dd> <p>Indicates that the glyph is a word boundary with no visible space.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs. All coordinates are in device independent pixels ({{DIPs}}). </p> + + + <dd> <p>The physical font face object to draw with.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIPs}} (equals 1/96 inch), not points.</p> </dd> + + + <dd> <p>The number of glyphs in the glyph run.</p> </dd> + + + <dd> <p>A reference to an array of indices to render for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph advance widths for the glyph run.</p> </dd> + + + <dd> <p>A reference to an array containing glyph offsets for the glyph run.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying <strong>isSideways</strong> = true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The implicit resolved bidi level of the run. Odd levels indicate right-to-left languages like Hebrew and Arabic, while even levels indicate left-to-right languages like English and Japanese (when written horizontally). For right-to-left languages, the text origin is on the right, and text should be drawn to the left.</p> </dd> + + + + + <p>Contains additional properties related to those in <strong>{{DWRITE_GLYPH_RUN}}</strong>.</p> + + + + <p>Contains information about the width, thickness, offset, run height, reading direction, and flow direction of an underline. </p> + <p>All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the underline, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the underline, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the underline from the baseline. A positive offset represents a position below the baseline (away from the text) and a negative offset is above (toward the text).</p> </dd> + + + <dd> <p>A value that indicates the height of the tallest run where the underline is applied.</p> </dd> + + + <dd> <p>A value that indicates the reading direction of the text associated with the underline. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>A value that indicates the flow direction of the text associated with the underline. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters which contains the locale of the text that the underline is being drawn under. For example, in vertical text, the underline belongs on the left for Chinese but on the right for Japanese. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information regarding the size and placement of strikethroughs. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the width of the strikethrough, measured parallel to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the thickness of the strikethrough, measured perpendicular to the baseline.</p> </dd> + + + <dd> <p>A value that indicates the offset of the strikethrough from the baseline. A positive offset represents a position below the baseline and a negative offset is above. Typically, the offset will be negative.</p> </dd> + + + <dd> <p>Reading direction of the text associated with the strikethrough. This value is used to interpret whether the width value runs horizontally or vertically.</p> </dd> + + + <dd> <p>Flow direction of the text associated with the strikethrough. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.</p> </dd> + + + <dd> <p>An array of characters containing the locale of the text that is the strikethrough is being drawn over. </p> </dd> + + + <dd> <p>The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in {{GDI}}-compatible modes.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + + + <p>Contains information about a glyph cluster.</p> + + + <dd> <p>The total advance width of all glyphs in the cluster.</p> </dd> + + + <dd> <p>The number of text positions in the cluster.</p> </dd> + + + <dd> <p>Indicates whether a line can be broken right after the cluster.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a whitespace character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a newline character.</p> </dd> + + + <dd> <p>Indicates whether the cluster corresponds to a soft hyphen character.</p> </dd> + + + <dd> <p>Indicates whether the cluster is read from right to left.</p> </dd> + + + <dd> <p>Reserved for future use.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains properties describing the geometric measurement of an +application-defined inline object.</p> + + + <dd> <p>The width of the inline object.</p> </dd> + + + <dd> <p>The height of the inline object.</p> </dd> + + + <dd> <p>The distance from the top of the object to the point where it is lined up with the adjacent text. If the baseline is at the bottom, then <strong>baseline</strong> simply equals <strong>height</strong>.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the object is to be placed upright or alongside the text baseline for vertical text.</p> </dd> + + + + + <p>Indicates how much any visible {{DIPs}} (device independent pixels) overshoot each side of the layout or inline objects.</p><p>Positive overhangs indicate that the visible area extends outside the layout box or inline object, while negative values mean there is whitespace inside. The returned values are unaffected by rendering transforms or pixel snapping. Additionally, they may not exactly match the final target's pixel bounds after applying grid fitting and hinting.</p> + + + <dd> <p>The distance from the left-most visible {{DIP}} to its left-alignment edge.</p> </dd> + + + <dd> <p>The distance from the top-most visible {{DIP}} to its top alignment edge.</p> </dd> + + + <dd> <p>The distance from the right-most visible {{DIP}} to its right-alignment edge.</p> </dd> + + + <dd> <p>The distance from the bottom-most visible {{DIP}} to its lower-alignment edge.</p> </dd> + + + + + <p>Describes the region obtained by a hit test.</p> + + + <dd> <p>The first text position within the hit region. </p> </dd> + + + <dd> <p>The number of text positions within the hit region. </p> </dd> + + + <dd> <p>The x-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the hit region.</p> </dd> + + + <dd> <p>The width of the hit region.</p> </dd> + + + <dd> <p>The height of the hit region.</p> </dd> + + + <dd> <p>The <strong>{{BIDI}} level</strong> of the text positions within the hit region.</p> </dd> + + + <dd> <p>true if the hit region contains text; otherwise, false.</p> </dd> + + + <dd> <p>true if the text range is trimmed; otherwise, false.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Reads a fragment from a font file. </p> + <p> Note that <strong>ReadFileFragment</strong> implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from <strong>ReadFileFragment</strong>. </p><p> DirectWrite may invoke <strong>{{IDWriteFontFileStream}}</strong> methods on the same object from multiple threads simultaneously. Therefore, <strong>ReadFileFragment</strong> implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>The offset of the fragment, in bytes, from the beginning of the font file.</p> </dd> + + + <dd> <p>The size of the file fragment, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to <strong>ReleaseFileFragment</strong>.</p> </dd> + + + + + <p> Releases a fragment from a file. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the client-defined context of a font fragment returned from <strong>ReadFileFragment</strong>.</p> </dd> + + + + + <p> Obtains the total size of a file. </p> + <p> Implementing <strong>GetFileSize</strong>() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the total size of the file.</p> </dd> + + + + + <p> Obtains the last modified time of the file. </p> + <p>The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 ({{UTC}}).</p> </dd> + + + + + <p> Handles loading font file resources of a particular type from a font file reference key into a font file stream object. </p> + <p>The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file stream object that encapsulates an open file resource. </p> + <p>The resource is closed when the last reference to <em>fontFileStream</em> is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by <em> fontFileReferenceKeySize</em>.</p> </dd> + + + <dd> <p>The size of font file reference key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFontFileStream}}</strong> object.</p> </dd> + + + + + <p>A built-in implementation of the <strong>{{IDWriteFontFileLoader}}</strong> interface, that operates on local font files +and exposes local font file information from the font file reference key. Font file references created using <strong>CreateFontFileReference</strong> use this font file loader.</p> + + + + <p>Obtains the length of the absolute file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>Size of font file reference key in bytes.</p> </dd> + + + <dd> <p>Length of the file path string, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + + + <p>Obtains the absolute font file path from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The character array that receives the local file path.</p> </dd> + + + <dd> <p>The length of the file path character array.</p> </dd> + + + + + <p>Obtains the last write time of the file from the font file reference key.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.</p> </dd> + + + <dd> <p>The size of font file reference key in bytes.</p> </dd> + + + <dd> <p>The time of the last font file modification.</p> </dd> + + + + + <p> Represents a font file. Applications such as font managers or font viewers can call <strong>{{IDWriteFontFile::Analyze}}</strong> to find out if a particular file is a font file, and whether it is a font type that is supported by the font system.</p> + + + + <p> Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font file reference key. Note that the reference value is only valid until the font file object it is obtained from is released. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font file reference key in bytes. This parameter is passed uninitialized.</p> </dd> + + + + + <p> Obtains the file loader associated with a font file object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the font file loader associated with the font file object.</p> </dd> + + + + + <p> Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system. </p> + <strong>Important</strong>??Certain font file types are recognized, but not supported by the font system. For example, the font system will recognize a file as a Type 1 font file but will not be able to construct a font face object from it. In such situations, <strong>Analyze</strong> will set <em>isSupportedFontType</em> output parameter to <strong>{{FALSE}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the font type is supported by the font system; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font file. Note that even if <em> isSupportedFontType</em> is <strong>{{FALSE}}</strong>, the <em>fontFileType</em> value may be different from <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the type of the font face. If <em>fontFileType</em> is not equal to <strong>{{DWRITE_FONT_FILE_TYPE_UNKNOWN}}</strong>, then that can be constructed from the font file. </p> </dd> + + + <dd> <p>When this method returns, contains the number of font faces contained in the font file.</p> </dd> + + + + + <p> Represents text rendering settings such as ClearType level, enhanced contrast, and gamma correction for glyph rasterization and filtering.</p><p>An application typically obtains a rendering parameters object by calling the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p> + + + + <p>Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + <p>The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.</p> + <p>Returns the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.</p> + + + + <p>Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.</p> + <p>Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.</p> + <p>Returns the amount of contrast enhancement. Valid values are greater than or equal to zero.</p> + + + + <p>Gets the ClearType level of the rendering parameters object. </p> + <p>The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)</p> + <p>The ClearType level of the rendering parameters object.</p> + + + + <p>Gets the pixel geometry of the rendering parameters object.</p> + <p> A value that indicates the type of pixel geometry used in the rendering parameters object.</p> + + + + <p>Gets the rendering mode of the rendering parameters object.</p> + <p>By default, the rendering mode is initialized to {{DWRITE_RENDERING_MODE_DEFAULT}}, which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the <strong>{{IDWriteFontFace::GetRecommendedRenderingMode}}</strong> method.</p> + <p>A value that indicates the rendering mode of the rendering parameters object.</p> + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p> Obtains the file format type of a font face. </p> + <p>A value that indicates the type of format for the font face (such as Type 1, TrueType, vector, or bitmap).</p> + + + + <p> Obtains the font files representing a font face. </p> + <p>The <strong>{{IDWriteFontFace::GetFiles}}</strong> method should be called twice. The first time you call <strong>GetFiles</strong><em>fontFiles</em> should be <strong>{{NULL}}</strong>. When the method returns, <em>numberOfFiles</em> receives the number of font files that represent the font face.</p><p>Then, call the method a second time, passing the <em>numberOfFiles</em> value that was output the first call, and a non-null buffer of the correct size to store the <strong>{{IDWriteFontFile}}</strong> references.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <em>fontFiles</em> is <strong>{{NULL}}</strong>, receives the number of files representing the font face. Otherwise, the number of font files being requested should be passed. See the Remarks section below for more information.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a user-provided array that stores references to font files representing the font face. This parameter can be <strong>{{NULL}}</strong> if the user wants only the number of files representing the font face. This {{API}} increments reference count of the font file references returned according to {{COM}} conventions, and the client should release them when finished.</p> </dd> + + + + + <p> Obtains the index of a font face in the context of its font files. </p> + <p>The zero-based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value is zero.</p> + + + + <p> Obtains the algorithmic style simulation flags of a font face. </p> + <p>Font face simulation flags for algorithmic means of making text bold or italic.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p>Returns <strong>{{TRUE}}</strong> if the font is a symbol font, otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, a?<strong>{{DWRITE_FONT_METRICS}}</strong> structure that holds metrics (such as ascent, descent, or cap height) for the current font face element. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Obtains the number of glyphs in the font face. </p> + <p>The number of glyphs in the font face.</p> + + + + <p> Obtains ideal (resolution-independent) glyph metrics in font design units. </p> + <p>Design glyph metrics are used for glyph positioning.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains an array of {{DWRITE_GLYPH_METRICS}} structures. <em>glyphMetrics</em> must be initialized with an empty buffer that contains at least as many elements as <em>glyphCount</em>. The metrics returned by this function are in font design units.</p> </dd> + + + <dd> <p>Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation</p> </dd> + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p> Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the <strong>{{IDWriteFontFileStream}}</strong> interface implemented by the font file loader. </p> + <p> The context for the same tag may be different for each call, so each one must be held and released separately. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases the table obtained earlier from <strong>TryGetFontTable</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Computes the outline of a run of glyphs by calling back to the outline sink interface. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of glyph indices. The glyphs are in logical order and the advance direction depends on the <em>isRightToLeft</em> parameter. The array must be allocated and be able to contain the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph advances in {{DIPs}}. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. <em>glyphAdvances</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. <em>glyphOffsets</em> contains the number of elements specified by <em>glyphCount</em>.</p> </dd> + + + <dd> <p>The number of glyphs in the run.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the ascender of the glyph runs alongside the baseline. If <strong>{{FALSE}}</strong>, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have <em>isSideways</em> set to <strong>{{FALSE}}</strong>.</p> <p>A client can render a vertical run by setting <em>isSideways</em> to <strong>{{TRUE}}</strong> and rotating the resulting geometry 90 degrees to the right using a transform. The <em>isSideways</em> and <em>isRightToLeft</em> parameters cannot both be true.</p> </dd> + + + <dd> <p>The visual order of the glyphs. If this parameter is <strong>{{FALSE}}</strong>, then glyph advances are from left to right. If <strong>{{TRUE}}</strong>, the advance direction is right to left. By default, the advance direction is left to right.</p> </dd> + + + <dd> <p>A reference to the interface that is called back to perform outline drawing operations.</p> </dd> + + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>A reference to an object that contains rendering settings such as gamma level, enhanced contrast, and ClearType level. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRIC}}</strong>S structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Obtains glyph metrics in font design units with the return values compatible with what {{GDI}} would produce.</p> + <p>Standard <strong>{{HRESULT}}</strong> error code. If any of the input glyph indices are outside of the valid glyph index range for the current font face, <strong>{{E_INVALIDARG}}</strong> will be returned.</p> + + + <dd> <p>The ogical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>When set to <strong>{{FALSE}}</strong>, the metrics are the same as the metrics of {{GDI}} aliased text. When set to <strong>{{TRUE}}</strong>, the metrics are the same as the metrics of text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>.</p> </dd> + + + <dd> <p>An array of glyph indices for which to compute the metrics.</p> </dd> + + + <dd> <p>The number of elements in the <em>glyphIndices</em> array.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_GLYPH_METRICS}}</strong> structures filled by this function. The metrics are in font design units.</p> </dd> + + + <dd> <p>A {{BOOL}} value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation.</p> </dd> + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Gets an object which represents the set of installed fonts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the system font collection object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + <dd> <p>If this parameter is nonzero, the function performs an immediate check for changes to the set of installed fonts. If this parameter is <strong>{{FALSE}}</strong>, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify <strong>{{TRUE}}</strong> if it has itself just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p> Creates a font collection using a custom font collection loader. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined font collection loader, which must have been previously registered using <strong>RegisterFontCollectionLoader</strong>.</p> </dd> + + + <dd> <p>The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of the collection key.</p> </dd> + + + <dd> <p>Contains an address of a reference to the system font collection object if the method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p>Registers a custom font collection loader with the factory object. </p> + <p>This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontCollectionLoader}}</strong> object to be registered.</p> </dd> + + + + + <p> Unregisters a custom font collection loader that was previously registered using <strong>RegisterFontCollectionLoader</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a font file reference object from a local font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided <em>filePath</em> doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided <em>lastWriteTime</em> doesn't match the file on the disk.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font file reference object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a reference to an application-specific font file resource. </p> + <p> This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. <em>fontFileReferenceKey</em> has to be unique only in the scope of the <em>fontFileLoader</em> used in this call. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font file reference key that uniquely identifies the font file resource during the lifetime of <em>fontFileLoader</em>.</p> </dd> + + + <dd> <p>The size of the font file reference key in bytes.</p> </dd> + + + <dd> <p>The font file loader that will be used by the font system to load data from the file identified by <em>fontFileReferenceKey</em>.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font file object when this method succeeds, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that represents a font face. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the type of file format of the font face.</p> </dd> + + + <dd> <p>The number of font files, in element count, required to represent the font face.</p> </dd> + + + <dd> <p>A font file object representing the font face. Because <strong>{{IDWriteFontFace}}</strong> maintains its own references to the input font file objects, you may release them after this call.</p> </dd> + + + <dd> <p>The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the How to Add Support for Multiple Monitors topic.</p> + <p>Standard {{HRESULT}} error code.</p> + + + + <p> Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle for the specified monitor.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the rendering parameters object created by this method.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p> Registers a font file loader with DirectWrite. </p> + <p> This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{IDWriteFontFileLoader}}</strong> object for a particular file resource type.</p> </dd> + + + + + <p> Unregisters a font file loader that was previously registered with the DirectWrite font system using <strong>RegisterFontFileLoader</strong>. </p> + <p> This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a text format object used for text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the name of the font family</p> </dd> + + + <dd> <p>A reference to a font collection object. When this is <strong>{{NULL}}</strong>, indicates the system font collection.</p> </dd> + + + <dd> <p>A value that indicates the font weight for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font style for the text object created by this method.</p> </dd> + + + <dd> <p>A value that indicates the font stretch for the text object created by this method.</p> </dd> + + + <dd> <p>The logical size of the font in {{DIP}} ("device-independent pixel") units. A {{DIP}} equals 1/96 inch.</p> </dd> + + + <dd> <p>An array of characters that contains the locale name.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created text format object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates a typography object for use in a text layout. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a newly created typography object, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Creates an object that is used for interoperability with {{GDI}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to a {{GDI}} interop object if successful, or <strong>{{NULL}}</strong> in case of failure.</p> </dd> + + + + + <p> Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The number of characters in the string.</p> </dd> + + + <dd> <p>A reference to an object that indicates the format to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the resultant text layout object.</p> </dd> + + + + + <p> Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. </p> + <p>The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired <strong>CreateTextLayout</strong> should be used instead.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters that contains the string to create a new <strong>{{IDWriteTextLayout}}</strong> object from. This array must be of length <em>stringLength</em> and can contain embedded <strong>{{NULL}}</strong> characters.</p> </dd> + + + <dd> <p>The length of the string, in character count.</p> </dd> + + + <dd> <p>The text formatting object to apply to the string.</p> </dd> + + + <dd> <p>The width of the layout box.</p> </dd> + + + <dd> <p>The height of the layout box.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} device <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} device <em>pixelsPerDip</em> is 1.25 (120/96).</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per {{DIP}}.</p> </dd> + + + <dd> <p> Instructs the text layout to use the same metrics as {{GDI}} bi-level text when set to <strong>{{FALSE}}</strong>. When set to <strong>{{TRUE}}</strong>, instructs the text layout to use the same metrics as text measured by {{GDI}} using a font created with <strong>{{CLEARTYPE_NATURAL_QUALITY}}</strong>. </p> </dd> + + + <dd> <p>When this method returns, contains an address to the reference of the resultant text layout object.</p> </dd> + + + + + <p> Creates an inline object for trimming, using an ellipsis as the omission sign. </p> + <p>The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing <strong>{{IDWriteInlineObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A text format object, created with <strong>CreateTextFormat</strong>, used for text layout.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the omission (that is, ellipsis trimming) sign created by this method.</p> </dd> + + + + + <p> Returns an interface for performing text analysis. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created text analyzer object.</p> </dd> + + + + + <p> Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use {{NLS}} defaults for the given culture instead). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies how to apply number substitution on digits and related punctuation.</p> </dd> + + + <dd> <p>The name of the locale to be used in the <em>numberSubstitution</em> object.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether to ignore user overrides.</p> </dd> + + + <dd> <p>When this method returns, contains an address to a reference to the number substitution object created by this method.</p> </dd> + + + + + <p>Specifies the mode used by a <strong>WriteBufferImmediate</strong> operation.</p> + + + <dd> <p>The write operation behaves the same as normal copy-write operations.</p> </dd> + + + <dd> <p>The write operation is guaranteed to occur after all preceding commands in the command stream have started, including previous <strong>WriteBufferImmediate</strong> operations.</p> </dd> + + + <dd> <p>The write operation is deferred until all previous commands in the command stream have completed through the {{GPU}} pipeline, including previous <strong>WriteBufferImmediate</strong> operations. Write operations that specify <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT}}</strong> don't block subsequent operations from starting. If there are no previous operations in the command stream, then the write operation behaves as if <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN}}</strong> was specified.</p> </dd> + + + + + <p> Creates a glyph run analysis object, which encapsulates information used to render a glyph run. </p> + <p>The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the properties of the glyph run (font face, advances, and so on).</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}} (device independent pixel). For example, if rendering onto a 96 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1. If rendering onto a 120 {{DPI}} bitmap then <em>pixelsPerDip</em> is 1.25.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the <em>emSize</em> and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline).</p> </dd> + + + <dd> <p>Specifies the measuring mode to use with glyphs.</p> </dd> + + + <dd> <p>The horizontal position (X-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position (Y-coordinate) of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created glyph run analysis object.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to <strong>MoveNext</strong> advances to the first file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When the method returns, contains the value <strong>{{TRUE}}</strong> if the enumerator advances to a file; otherwise, <strong>{{FALSE}}</strong> if the enumerator advances past the last file in the collection.</p> </dd> + + + + + <p> Gets a reference to the current font file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, the address of a reference to the newly created <strong>{{IDWriteFontFile}}</strong> object.</p> </dd> + + + + + <p> Used to construct a collection of fonts given a particular type of key. </p> + <p>The font collection loader interface is recommended to be implemented by a singleton object. Note that font collection loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.</p> + + + + <p> Creates a font file enumerator object that encapsulates a collection of font files. The font system calls back to this interface to create a font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IDWriteFactory}}</strong> object that was used to create the current font collection.</p> </dd> + + + <dd> <p>A font collection key that uniquely identifies the collection of font files within the scope of the font collection loader being used. The buffer allocated for this key must be at least the size, in bytes, specified by <em>collectionKeySize</em>.</p> </dd> + + + <dd> <p>The size of the font collection key, in bytes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font file enumerator.</p> </dd> + + + + + <p> Represents a collection of strings indexed by locale name.</p> + <p>The set of strings represented by an <strong>{{IDWriteLocalizedStrings}}</strong> are indexed by a zero based <em>{{UINT32}}</em> number that maps to a locale. The numeric index for a specific locale is retreived by using the <strong>FindLocaleName</strong> method.</p><p>A common use for the <strong>{{IDWriteLocalizedStrings}}</strong> interface is to hold a list of localized font family names created by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method. The following example shows how to get the family name for the "en-us" locale.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + + + + <p> Gets the number of language/string pairs. </p> + <p>The number of language/string pairs.</p> + + + + <p> Gets the zero-based index of the locale name/string pair with the specified locale name. </p> + <p>Note that if the locale name does not exist, the return value is a success and the <em>exists</em> parameter is <strong>{{FALSE}}</strong>. If you are getting the font family name for a font and the specified locale name does not exist, one option is to set the index to 0 as shown below. There is always at least one locale for a font family.</p><pre>{{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; +</pre> + <p>If the specified locale name does not exist, the return value is <strong>{{S_OK}}</strong>, but <em>index</em> is <strong>{{UINT_MAX}}</strong> and <em>exists</em> is <strong>{{FALSE}}</strong>. +</p> + + + <dd> <p>A null-terminated array of characters containing the locale name to look for.</p> </dd> + + + <dd> <p>The zero-based index of the locale name/string pair. This method initializes <em>index</em> to <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the locale name exists; otherwise, <strong>{{FALSE}}</strong>. This method initializes <em>exists</em> to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the locale name with the specified index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the length in characters of the locale name, not including the null terminator.</p> </dd> + + + + + <p> Copies the locale name with the specified index to the specified array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains a character array, which is null-terminated, that receives the locale name from the language/string pair. The buffer allocated for this array must be at least the size of <em>size</em>, in element count.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p> Gets the length in characters (not including the null terminator) of the string with the specified index. </p> + <p>Use <strong>GetStringLength</strong> to get the string length before calling the <strong>{{IDWriteLocalizedStrings::GetString}}</strong> method, as shown in the following code.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A zero-based index of the language/string pair.</p> </dd> + + + <dd> <p>The length in characters of the string, not including the null terminator, from the language/string pair.</p> </dd> + + + + + <p> Copies the string with the specified index to the specified array. </p> + <p>The string returned must be allocated by the caller. You can get the size of the string by using the <strong>GetStringLength</strong> method prior to calling <strong>GetString</strong>, as shown in the following example.</p><pre>{{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the language/string pair to be examined.</p> </dd> + + + <dd> <p>The null terminated array of characters that receives the string from the language/string pair. The buffer allocated for this array should be at least the size of <em>size</em>. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + <dd> <p>The size of the array in characters. The size must include space for the terminating null character. <strong>GetStringLength</strong> can be used to get the size of the array before using this method.</p> </dd> + + + + + <p>Represents a family of related fonts.</p> + <p>A font family is a set of fonts that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include style, such as italic, and weight, such as bold. The following illustration shows examples of fonts that are members of the "Times New Roman" font family.</p><p>An <strong>{{IDWriteFontFamily}}</strong> object can be retrieved from a font collection using the <strong>{{IDWriteFontCollection::GetFontFamily}}</strong> method shown in the following example. <strong>GetFontFamily</strong> takes a <strong>{{UINT32}}</strong> index and returns the font family for the font at that index.</p><pre>{{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); +} +</pre><p>The font family name is used to specify the font family for text layout and text format objects. You can get a list of localized font family names from an <strong>{{IDWriteFontFamily}}</strong> object in the form of an <strong>{{IDWriteLocalizedStrings}}</strong> object by using the <strong>{{IDWriteFontFamily::GetFamilyNames}}</strong> method, as shown in the following code.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} +</pre> + + + + <p> Creates a localized strings object that contains the family names for the font family, indexed by locale name. </p> + <p> The following code example shows how to get the font family name from a <strong>{{IDWriteFontFamily}}</strong> object.</p><pre>{{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); +} {{UINT32}} index = 0; +{{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) +{ // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } +} // If the specified locale doesn't exist, select the first on the list. +if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); +} // Allocate a string big enough to hold the name. +wchar_t* name = new (std::nothrow) wchar_t[length+1]; +if (name == {{NULL}}) +{ hr = {{E_OUTOFMEMORY}}; +} // Get the family name. +if ({{SUCCEEDED}}(hr)) +{ hr = pFamilyNames-&gt;GetString(index, name, length+1); +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The address of a reference to the newly created <strong>{{IDWriteLocalizedStrings}}</strong> object.</p> </dd> + + + + + <p> Gets the font that best matches the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Gets a list of fonts in the font family ranked in order of how well they match the specified properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that is used to match a requested font weight.</p> </dd> + + + <dd> <p>A value that is used to match a requested font stretch.</p> </dd> + + + <dd> <p>A value that is used to match a requested font style.</p> </dd> + + + <dd> <p>An address of a reference to the newly created <strong>{{IDWriteFontList}}</strong> object.</p> </dd> + + + + + <p> Represents a physical font in a font collection. This interface is used to create font faces from physical fonts, or to retrieve information such as font face metrics or face names from existing font faces.</p> + + + + <p> Gets the font family to which the specified font belongs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font family object to which the specified font belongs.</p> </dd> + + + + + <p> Gets the weight, or stroke thickness, of the specified font. </p> + <p>A value that indicates the weight for the specified font.</p> + + + + <p> Gets the stretch, or width, of the specified font. </p> + <p>A value that indicates the type of stretch, or width, applied to the specified font.</p> + + + + <p> Gets the style, or slope, of the specified font. </p> + <p>A value that indicates the type of style, or slope, of the specified font.</p> + + + + <p> Determines whether the font is a symbol font. </p> + <p><strong>{{TRUE}}</strong> if the font is a symbol font; otherwise, <strong>{{FALSE}}</strong>.</p> + + + + <p> Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address to a reference to the newly created localized strings object.</p> </dd> + + + + + <p> Gets a localized strings collection containing the specified informational strings, indexed by locale name. </p> + <p> If the font does not contain the string specified by <em>informationalStringID</em>, the return value is <strong>{{S_OK}}</strong> but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that identifies the informational string to get. For example, <strong>{{DWRITE_INFORMATIONAL_STRING_DESCRIPTION}}</strong> specifies a string that contains a description of the font. </p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created localized strings object.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a value that indicates what simulations are applied to the specified font. </p> + <p> A value that indicates one or more of the types of simulations (none, bold, or oblique) applied to the specified font.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a structure that has font metrics for the current font face. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p> Determines whether the font supports a specified character. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value for the method to inspect.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the font supports the specified character; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Creates a font face object for the font. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created font face object.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + <p>The <strong>{{IDWriteFactory::GetSystemFontCollection}}</strong> method will give you an <strong>{{IDWriteFontCollection}}</strong> object, which encapsulates the set of fonts installed on the system, as shown in the following code example.</p><pre>{{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. +if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); +} +</pre><p> <strong>{{IDWriteTextFormat}}</strong> and <strong>{{IDWriteTextLayout}}</strong> both have a <strong>GetFontCollection</strong> method that returns the font collection being used by the object. These interfaces use the system font collection by default, but can use a custom font collection instead.</p><p>To determine what fonts are available on the system, get a reference to the system font collection. You can then use the <strong>{{IDWriteFontCollection::GetFontFamilyCount}}</strong> method to determine the number of fonts and loop through the list. The following example enumerates the fonts in the system font collection, and prints the font family names to the console.</p><pre> #include &lt;dwrite.h&gt; +#include &lt;string.h&gt; +#include &lt;stdio.h&gt; +#include &lt;new&gt; // SafeRelease inline function. +template &lt;class T&gt; inline void SafeRelease(T **ppT) +{ if (*ppT) { (*ppT)-&gt;Release(); *ppT = {{NULL}}; } +} void wmain() +{ {{IDWriteFactory}}* pDWriteFactory = {{NULL}}; {{HRESULT}} hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory) ); {{IDWriteFontCollection}}* pFontCollection = {{NULL}}; // Get the system font collection. if ({{SUCCEEDED}}(hr)) { hr = pDWriteFactory-&gt;GetSystemFontCollection(&amp;pFontCollection); } {{UINT32}} familyCount = 0; // Get the number of font families in the collection. if ({{SUCCEEDED}}(hr)) { familyCount = pFontCollection-&gt;GetFontFamilyCount(); } for ({{UINT32}} i = 0; i &lt; familyCount; ++i) { {{IDWriteFontFamily}}* pFontFamily = {{NULL}}; // Get the font family. if ({{SUCCEEDED}}(hr)) { hr = pFontCollection-&gt;GetFontFamily(i, &amp;pFontFamily); } {{IDWriteLocalizedStrings}}* pFamilyNames = {{NULL}}; // Get a list of localized strings for the family name. if ({{SUCCEEDED}}(hr)) { hr = pFontFamily-&gt;GetFamilyNames(&amp;pFamilyNames); } {{UINT32}} index = 0; {{BOOL}} exists = false; wchar_t localeName[{{LOCALE_NAME_MAX_LENGTH}}]; if ({{SUCCEEDED}}(hr)) { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, {{LOCALE_NAME_MAX_LENGTH}}); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames-&gt;FindLocaleName(localeName, &amp;index, &amp;exists); } if ({{SUCCEEDED}}(hr) &amp;&amp; !exists) // if the above find did not find a match, retry with {{US}} English { hr = pFamilyNames-&gt;FindLocaleName(L"en-us", &amp;index, &amp;exists); } } // If the specified locale doesn't exist, select the first on the list. if (!exists) index = 0; {{UINT32}} length = 0; // Get the string length. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetStringLength(index, &amp;length); } // Allocate a string big enough to hold the name. wchar_t* name = new (std::nothrow) wchar_t[length+1]; if (name == {{NULL}}) { hr = {{E_OUTOFMEMORY}}; } // Get the family name. if ({{SUCCEEDED}}(hr)) { hr = pFamilyNames-&gt;GetString(index, name, length+1); } if ({{SUCCEEDED}}(hr)) { // Print out the family name. wprintf(L"%s\n", name); } SafeRelease(&amp;pFontFamily); SafeRelease(&amp;pFamilyNames); delete [] name; } SafeRelease(&amp;pFontCollection); SafeRelease(&amp;pDWriteFactory); +} </pre> + + + + <p> Gets the number of font families in the collection. </p> + <p>The number of font families in the collection.</p> + + + + <p> Creates a font family object given a zero-based font family index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font family.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font family object.</p> </dd> + + + + + <p> Finds the font family with the specified family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters, which is null-terminated, containing the name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.</p> </dd> + + + <dd> <p>When this method returns, contains the zero-based index of the matching font family if the family name was found; otherwise, <strong>{{UINT_MAX}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, <strong>{{TRUE}}</strong> if the family name exists; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong to the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A font face object that specifies the physical font.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created font object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets the font collection that contains the fonts in the font list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the current <strong>{{IDWriteFontCollection}}</strong> object.</p> </dd> + + + + + <p> Gets the number of fonts in the font list. </p> + <p>The number of fonts in the font list.</p> + + + + <p> Gets a font given its zero-based index. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the newly created <strong>{{IDWriteFont}}</strong> object.</p> </dd> + + + + + <p> Represents a font typography setting.</p> + + + + <p> Adds an OpenType font feature. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure that contains the OpenType name identifier and the execution parameter for the font feature being added.</p> </dd> + + + + + <p> Gets the number of OpenType font features for the current font. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>The number of font features for the current text format.</p> + + + + <p> Gets the font feature at the specified index. </p> + <p>A single run of text can be associated with more than one typographic feature. The <strong>{{IDWriteTypography}}</strong> object holds a list of these font features.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the font feature to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains the font feature which is at the specified index.</p> </dd> + + + + + <p> Wraps an application-defined inline graphic, allowing {{DWrite}} to query metrics as if the graphic were a glyph inline with the text.</p> + + + + <p> The application implemented rendering callback (<strong>{{IDWriteTextRenderer::DrawInlineObject}}</strong>) can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the measurement of the inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> <strong>{{IDWriteTextLayout}}</strong> calls this callback function to get the visible extents (in {{DIPs}}) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes.</p><p>The overhangs should be returned relative to the reported size of the object (see <strong>{{DWRITE_INLINE_OBJECT_METRICS}}</strong>), and should not be baseline adjusted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Layout uses this to determine the line-breaking behavior of the inline object among the text. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it.</p> </dd> + + + + + <p> The <strong>{{IDWriteTextFormat}}</strong> interface describes the font and paragraph properties used to format text, and it describes locale information. </p> + <p> To get a reference to the <strong>{{IDWriteTextFormat}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextFormat}}</strong> method as shown in the following code.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = pDWriteFactory_-&gt;CreateTextFormat( L"Gabriola", {{NULL}}, {{DWRITE_FONT_WEIGHT_REGULAR}}, {{DWRITE_FONT_STYLE_NORMAL}}, {{DWRITE_FONT_STRETCH_NORMAL}}, 72.0f, L"en-us", &amp;pTextFormat_ ); +} </pre><p>When creating an <strong>{{IDWriteTextFormat}}</strong> object using the <strong>CreateTextFormat</strong> function, the application specifies the font family, font collection, font weight, font size, and locale name for the text format.</p><p>These properties cannot be changed after the <strong>{{IDWriteTextFormat}}</strong> object is created. To change these properties, a new <strong>{{IDWriteTextFormat}}</strong> object must be created with the desired properties.</p><p> The <strong>{{IDWriteTextFormat}}</strong> interface is used to draw text with a single format</p><p> To draw text with multiple formats, or to use a custom text renderer, use the <strong>{{IDWriteTextLayout}}</strong> interface. <strong>{{IDWriteTextLayout}}</strong> enables the application to change the format for ranges of text within the string. The <strong>{{IDWriteFactory::CreateTextLayout}}</strong> takes an <strong>{{IDWriteTextFormat}}</strong> object as a parameter and initially applies the format information to the entire string. </p><p> This object may not be thread-safe, and it may carry the state of text format change. </p> + + + + <p>Sets the alignment of text in a paragraph, relative to the leading and trailing edge of a layout box for a <strong>{{IDWriteTextFormat}}</strong> interface.</p> + <p> The text can be aligned to the leading or trailing edge of the layout box, or it can be centered. The following illustration shows text with the alignment set to <strong>{{DWRITE_TEXT_ALIGNMENT_LEADING}}</strong>, <strong>{{DWRITE_TEXT_ALIGNMENT_CENTER}}</strong>, and <strong>{{DWRITE_TEXT_ALIGNMENT_TRAILING}}</strong>, respectively. </p><p></p><strong>Note</strong>??The alignment is dependent on reading direction, the above is for left-to-right reading direction. For right-to-left reading direction it would be the opposite.?<p>See <strong>{{DWRITE_TEXT_ALIGNMENT}}</strong> for more information. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The textAlignment argument is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> Sets the alignment option of a paragraph relative to the layout box's top and bottom edge. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph alignment option being set for a paragraph; see <strong>{{DWRITE_PARAGRAPH_ALIGNMENT}}</strong> for more information.</p> </dd> + + + + + <p> Sets the word wrapping option. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The word wrapping option being set for a paragraph; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> </dd> + + + + + <p> Sets the paragraph reading direction. </p> + <p> The reading direction and flow direction must always be set 90 degrees orthogonal to each other, or else you will get the error {{DWRITE_E_FLOWDIRECTIONCONFLICTS}} when you use layout functions like Draw or GetMetrics. So if you set a vertical reading direction (for example, to {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}}), then you must also use SetFlowDirection to set the flow direction appropriately (for example, to {{DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The text reading direction (for example, <strong>{{DWRITE_READING_DIRECTION_RIGHT_TO_LEFT}}</strong> for languages, such as Arabic, that read from right to left) for a paragraph. </p> </dd> + + + + + <p> Sets the paragraph flow direction. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The paragraph flow direction; see <strong>{{DWRITE_FLOW_DIRECTION}}</strong> for more information.</p> </dd> + + + + + <p> Sets a fixed distance between two adjacent tab stops. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The fixed distance between two adjacent tab stops.</p> </dd> + + + + + <p> Sets trimming options for text overflowing the layout width. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Text trimming options.</p> </dd> + + + <dd> <p>Application-defined omission sign. This parameter may be <strong>{{NULL}}</strong>. See <strong>{{IDWriteInlineObject}}</strong> for more information.</p> </dd> + + + + + <p> Sets the line spacing. </p> + <p> For the default method, spacing depends solely on the content. For uniform spacing, the specified line height overrides the content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies how line height is being determined; see <strong>{{DWRITE_LINE_SPACING_METHOD}}</strong> for more information.</p> </dd> + + + <dd> <p>The line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>The distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the alignment option of text relative to the layout box's leading and trailing edge. </p> + <p>Returns the text alignment option of the current paragraph.</p> + + + + <p> Gets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box. </p> + <p>A value that indicates the current paragraph alignment option.</p> + + + + <p> Gets the word wrapping option. </p> + <p>Returns the word wrapping option; see <strong>{{DWRITE_WORD_WRAPPING}}</strong> for more information.</p> + + + + <p> Gets the current reading direction for text in a paragraph. </p> + <p>A value that indicates the current reading direction for text in a paragraph.</p> + + + + <p> Gets the direction that text lines flow. </p> + <p>The direction that text lines flow within their parent container. For example, <strong>{{DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM}}</strong> indicates that text lines are placed from top to bottom.</p> + + + + <p> Gets the incremental tab stop position. </p> + <p>The incremental tab stop value.</p> + + + + <p> Gets the trimming options for text that overflows the layout box. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, it contains a reference to a <strong>{{DWRITE_TRIMMING}}</strong> structure that holds the text trimming options for the overflowing text.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a trimming omission sign. This parameter may be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates how line height is determined.</p> </dd> + + + <dd> <p>When this method returns, contains the line height, or distance between one baseline to another.</p> </dd> + + + <dd> <p>When this method returns, contains the distance from top of line to baseline. A reasonable ratio to <em>lineSpacing</em> is 80 percent.</p> </dd> + + + + + <p> Gets the current font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains an address of a reference to the font collection being used for the current text.</p> </dd> + + + + + <p> Gets the length of the font family name. </p> + <p>The size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the font family name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a character array, which is null-terminated, that receives the current font family name. The buffer allocated for this array should be at least the size, in elements, of <em>nameSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>fontFamilyName</em> character array, in character count, including the terminated <strong>{{NULL}}</strong> character. To find the size of <em>fontFamilyName</em>, use <strong>GetFontFamilyNameLength</strong>.</p> </dd> + + + + + <p> Gets the font weight of the text. </p> + <p>A value that indicates the type of weight (such as normal, bold, or black). </p> + + + + <p> Gets the font style of the text.</p> + <p>A value which indicates the type of font style (such as slope or incline).</p> + + + + <p> Gets the font stretch of the text. </p> + <p>A value which indicates the type of font stretch (such as normal or condensed).</p> + + + + <p> Gets the font size in {{DIP}} unites. </p> + <p>The current font size in {{DIP}} units.</p> + + + + <p> Gets the length of the locale name. </p> + <p>The size of the character array in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> + + + + <p> Gets a copy of the locale name. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a character array that receives the current locale name.</p> </dd> + + + <dd> <p>The size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character. Use <strong>GetLocaleNameLength</strong> to get the size of the locale name character array.</p> </dd> + + + + + <p>Holds the appropriate digits and numeric punctuation for a specified locale.</p> + + + + <p>Implemented by the text analyzer's client to provide text to the analyzer. It allows the separation between the logical view of text as a continuous stream of characters identifiable by unique text positions, and the actual memory layout of potentially discrete blocks of text in the client's backing store. </p> + <p>If any of these callbacks returns an error, then the analysis functions will stop prematurely and return a callback error. Note that rather than return {{E_NOTIMPL}}, an application should stub the method and return a constant/null and {{S_OK}}.</p> + + + + <p>Gets a block of text starting at the specified text position. </p> + <p>Returning <strong>{{NULL}}</strong> indicates the end of text, which is the position after the last character. This function is called iteratively for each consecutive block, tying together several fragmented blocks in the backing store into a virtual contiguous string.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The first position of the piece to obtain. All positions are in <strong>{{UTF16}}</strong> code units, not whole characters, which matters when supplementary characters are used.</p> </dd> + + + <dd> <p>When this method returns, contains an address of the block of text as an array of characters to be retrieved from the text analysis.</p> </dd> + + + <dd> <p>When this method returns, contains the number of <strong>{{UTF16}}</strong> units of the retrieved chunk. The returned length is not the length of the block, but the length remaining in the block, from the specified position until its end. For example, querying for a position that is 75 positions into a 100-position block would return 25.</p> </dd> + + + + + <p>Gets a block of text immediately preceding the specified position.</p> + <p>{{NULL}} indicates no chunk available at the specified position, either because <em>textPosition</em> equals 0, <em>textPosition</em> is greater than the entire text content length, or the queried position is not mapped into the application's backing store.</p><p>Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position immediately after the last position of the block of text to obtain.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the block of text, as an array of characters from the specified range. The text range will be from <em>textPosition</em> to the front of the block.</p> </dd> + + + <dd> <p>Number of {{UTF16}} units of the retrieved block. The length returned is from the specified position to the front of the block.</p> </dd> + + + + + <p>Gets the paragraph reading direction.</p> + <p>The reading direction of the current paragraph.</p> + + + + <p>Gets the locale name on the range affected by the text analysis.</p> + <p>The <em>localeName</em> reference must remain valid until the next call or until the analysis returns.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position to examine.</p> </dd> + + + <dd> <p>Contains the length of the text being affected by the text analysis up to the next differing locale.</p> </dd> + + + <dd> <p>Contains an address of a reference to an array of characters which receives the locale name from the text affected by the text analysis. The array of characters is null-terminated.</p> </dd> + + + + + <p>Gets the number substitution from the text range affected by the text analysis.</p> + <p>Any implementation should return the number substitution with an incremented reference count, and the analysis will release when finished with it (either before the next call or before it returns). However, the sink callback may hold onto it after that.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>Contains the length of the text, in characters, remaining in the text range up to the next differing number substitution.</p> </dd> + + + <dd> <p>Contains an address of a reference to an object, which was created with <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong>, that holds the appropriate digits and numeric punctuation for a given locale.</p> </dd> + + + + + <p>This interface is implemented by the text analyzer's client to receive the output of a given text analysis. </p> + <p>The text analyzer disregards any current state of the analysis sink, therefore, a Set method call on a range overwrites the previously set analysis result of the same range.</p> + + + + <p>Reports script analysis for the specified text range.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains a zero-based index representation of a writing system script and a value indicating whether additional shaping of text is required.</p> </dd> + + + + + <p>Sets line-break opportunities for each character, starting from the specified position.</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting text position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>A reference to a structure that contains breaking conditions set for each character from the starting position to the end of the specified range.</p> </dd> + + + + + <p>Sets a bidirectional level on the range, which is called once per run change (either explicit or resolved implicit).</p> + <p>A successful code or error code to stop analysis.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>The explicit level from the paragraph reading direction and any embedded control codes {{RLE}}/{{RLO}}/{{LRE}}/{{LRO}}/{{PDF}}, which is determined before any additional rules.</p> </dd> + + + <dd> <p>The final implicit level considering the explicit level and characters' natural directionality, after all Bidi rules have been applied.</p> </dd> + + + + + <p>Sets the number substitution on the text range affected by the text analysis.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The starting position from which to report.</p> </dd> + + + <dd> <p>The number of {{UTF16}} units of the reported range.</p> </dd> + + + <dd> <p>An object that holds the appropriate digits and numeric punctuation for a given locale. Use <strong>{{IDWriteFactory::CreateNumberSubstitution}}</strong> to create this object.</p> </dd> + + + + + <p> Analyzes various text properties for complex script processing such as bidirectional (bidi) support for languages like Arabic, determination of line break opportunities, glyph placement, and number substitution.</p> + + + + <p> Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script {{ID}} to the sink callback <strong>SetScript</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback <strong>SetBidiLevel</strong>. </p> + <p> While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback <strong>SetNumberSubstitution</strong>. </p> + <p> Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback <strong>SetLineBreakpoints</strong>. </p> + <p> Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Parses the input text string and maps it to the set of glyphs and associated glyph data according to the font and the writing system's rendering rules. </p> + <p> Note that the mapping from characters to glyphs is, in general, many-to-many. The recommended estimate for the per-glyph output buffers is (3 * <em>textLength</em> / 2 + 16). This is not guaranteed to be sufficient. The value of the <em>actualGlyphCount</em> parameter is only valid if the call succeeds. In the event that <em>maxGlyphCount</em> is not big enough, <strong>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</strong> will be returned. The application should allocate a larger buffer and try again. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of characters to convert to glyphs.</p> </dd> + + + <dd> <p>The length of <em>textString</em>.</p> </dd> + + + <dd> <p>The font face that is the source of the output glyphs.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> if the text is intended to be drawn vertically.</p> </dd> + + + <dd> <p>A Boolean flag set to <strong>{{TRUE}}</strong> for right-to-left text.</p> </dd> + + + <dd> <p>A reference to a Script analysis result from an <strong>AnalyzeScript</strong> call.</p> </dd> + + + <dd> <p>The locale to use when selecting glyphs. For example the same character may map to different glyphs for ja-jp versus zh-chs. If this is <strong>{{NULL}}</strong>, then the default mapping based on the script is used.</p> </dd> + + + <dd> <p>A reference to an optional number substitution which selects the appropriate glyphs for digits and related numeric characters, depending on the results obtained from <strong>AnalyzeNumberSubstitution</strong>. Passing <strong>{{NULL}}</strong> indicates that no substitution is needed and that the digits should receive nominal glyphs.</p> </dd> + + + <dd> <p>An array of references to the sets of typographic features to use in each feature range.</p> </dd> + + + <dd> <p>The length of each feature range, in characters. The sum of all lengths should be equal to <em>textLength</em>.</p> </dd> + + + <dd> <p>The number of feature ranges.</p> </dd> + + + <dd> <p>The maximum number of glyphs that can be returned.</p> </dd> + + + <dd> <p>When this method returns, contains the mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contains shaping properties for each character.</p> </dd> + + + <dd> <p>The output glyph indices.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of structures that contain shaping properties for each output glyph.</p> </dd> + + + <dd> <p>When this method returns, contains the actual number of glyphs returned if the call succeeds.</p> </dd> + + + + + <p> Places glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Place glyphs output from the <strong>GetGlyphs</strong> method according to the font and the writing system's rendering rules.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines the pixel snapping properties such as pixels per {{DIP}}(device-independent pixel) and the current transform matrix of a text renderer.</p> + + + + <p> Determines whether pixel snapping is disabled. The recommended default is <strong>{{FALSE}}</strong>, unless doing animation that requires subpixel vertical placement. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if pixel snapping is disabled; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Gets a transform that maps abstract coordinates to {{DIPs}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains a structure which has transform information for pixel snapping.</p> </dd> + + + + + <p> Gets the number of physical pixels per {{DIP}}. </p> + <p> Because a {{DIP}} (device-independent pixel) is 1/96 inch, the <em>pixelsPerDip</em> value is the number of logical pixels per inch divided by 96.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The drawing context passed to <strong>{{IDWriteTextLayout::Draw}}</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of physical pixels per {{DIP}}.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p> Sets the layout maximum width.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum width of the layout box.</p> </dd> + + + + + <p> Sets the layout maximum height. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that indicates the maximum height of the layout box. </p> </dd> + + + + + <p> Sets the font collection. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to set.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets null-terminated font family name for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font family name that applies to the entire text string within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the font weight for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. </p> + <p>The font weight can be set to one of the predefined font weight values provided in the <strong>{{DWRITE_FONT_WEIGHT}}</strong> enumeration or an integer from 1 to 999. Values outside this range will cause the method to fail with an <strong>{{E_INVALIDARG}}</strong> return value.</p><p>The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font style for text within a text range specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure.</p> + <p>The font style can be set to Normal, Italic or Oblique. The following illustration shows three styles for the Palatino font. For more information, see <strong>{{DWRITE_FONT_STYLE}}</strong>.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the font stretch for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value which indicates the type of font stretch for text within the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Sets the font size in {{DIP}} units for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font size in {{DIP}} units to be set for text in the range specified by <em>textRange</em>. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>The <strong>{{IDWriteTextLayout}}</strong> interface represents a block of text after it has been fully analyzed and formatted.</p> + <p>To get a reference to the <strong>{{IDWriteTextLayout}}</strong> interface, the application must call the <strong>{{IDWriteFactory::CreateTextLayout}}</strong> method, as shown in the following code. </p><pre> // Create a text layout using the text format. +if ({{SUCCEEDED}}(hr)) +{ {{RECT}} rect; GetClientRect(hwnd_, &amp;rect); float width = rect.right / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_-&gt;CreateTextLayout( wszText_, // The string to be laid out and formatted. cTextLength_, // The length of the string. pTextFormat_, // The text format to apply to the string (contains font information, etc). width, // The width of the layout box. height, // The height of the layout box. &amp;pTextLayout_ // The {{IDWriteTextLayout}} interface reference. ); +} </pre><p>The <strong>{{IDWriteTextLayout}}</strong> interface allows the application to change the format for ranges of the text it represents, specified by a <strong>{{DWRITE_TEXT_RANGE}}</strong> structure. The following example shows how to set the font weight for a text range.</p><pre> // Set the font weight to bold for the first 5 letters. +{{DWRITE_TEXT_RANGE}} textRange = {0, 4}; if ({{SUCCEEDED}}(hr)) +{ hr = pTextLayout_-&gt;SetFontWeight({{DWRITE_FONT_WEIGHT_BOLD}}, textRange); +} </pre><p><strong>{{IDWriteTextLayout}}</strong> also provides methods for adding strikethrough, underline, and inline objects to the text.</p><p>To draw the block of text represented by an <strong>{{IDWriteTextLayout}}</strong> object, Direct2D provides the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> method. To draw using a custom renderer implement an <strong>{{IDWriteTextRenderer}}</strong> interface and call the <strong>{{IDWriteTextLayout::Draw}}</strong> method</p> + + + + <p>Sets strikethrough for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean flag that indicates whether strikethrough takes place in the range specified by <em>textRange</em>.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the application-defined drawing effect. </p> + <p>An <strong>{{ID2D1Brush}}</strong>, such as a color or gradient brush, can be set as a drawing effect if you are using the <strong>{{ID2D1RenderTarget::DrawTextLayout}}</strong> to draw text and that brush will be used to draw the specified range of text.</p><p> This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering.</p> </dd> + + + <dd> <p>The text range to which this change applies.</p> </dd> + + + + + <p> Sets the inline object. </p> + <p>The application may call this function to specify the set of properties describing an application-defined inline object for specific range.</p><p> This inline object applies to the specified range and will be passed back to the application by way of the <strong>DrawInlineObject</strong> callback when the range is drawn. Any text in that range will be suppressed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined inline object. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets font typography features for text within a specified text range. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to font typography settings. </p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Sets the locale name for text within a specified text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated locale name string.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p> Gets the layout maximum width. </p> + <p>Returns the layout maximum width.</p> + + + + <p> Gets the layout maximum height. </p> + <p>The layout maximum height.</p> + + + + <p> Gets the font collection associated with the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Contains an address of a reference to the current font collection.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the length of the font family name at the current position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the character array containing the font family name, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family.</p> </dd> + + + + + <p> Copies the font family name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to examine.</p> </dd> + + + <dd> <p>When this method returns, contains an array of characters that receives the current font family name. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The size of the character array in character count including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font family name.</p> </dd> + + + + + <p> Gets the font weight of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font weight being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font weight.</p> </dd> + + + + + <p> Gets the font style (also known as slope) of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font style (also known as slope or incline) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font style.</p> </dd> + + + + + <p> Gets the font stretch of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains a value which indicates the type of font stretch (also known as width) being applied at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font stretch.</p> </dd> + + + + + <p> Gets the font em height of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the size of the font in ems of the text at the specified position.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the font size.</p> </dd> + + + + + <p> Gets the underline presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether underline is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the underline.</p> </dd> + + + + + <p> Get the strikethrough presence of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether strikethrough is present at the position indicated by <em>currentPosition</em>.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to strikethrough.</p> </dd> + + + + + <p> Gets the application-defined drawing effect at the specified text position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text whose drawing effect is to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing.</p> </dd> + + + <dd> <p>Contains the range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect.</p> </dd> + + + + + <p> Gets the inline object at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The specified text position.</p> </dd> + + + <dd> <p>Contains the application-defined inline object.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the inline object.</p> </dd> + + + + + <p> Gets the typography setting of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the current typography setting.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the typography.</p> </dd> + + + + + <p> Gets the length of the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>Size of the character array, in character count, not including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Gets the locale name of the text at the specified position. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The position of the text to inspect.</p> </dd> + + + <dd> <p>When this method returns, contains the character array receiving the current locale name.</p> </dd> + + + <dd> <p>Size of the character array, in character count, including the terminated <strong>{{NULL}}</strong> character.</p> </dd> + + + <dd> <p>The range of text that has the same formatting as the text at the position specified by <em>currentPosition</em>. This means the run has the exact formatting as the position specified, including but not limited to the locale name.</p> </dd> + + + + + <p> Draws text using the specified client drawing context.</p> + <p>To draw text with this method, a <em>textLayout</em> object needs to be created by the application using <strong>{{IDWriteFactory::CreateTextLayout}}</strong>. </p><p>After the <em>textLayout</em> object is obtained, the application calls the <strong>{{IDWriteTextLayout::Draw}}</strong> method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the <em>textRenderer</em> argument; there, the corresponding <strong>DrawGlyphRun</strong> {{API}} is called. </p><p>If you set a vertical text reading direction on {{IDWriteTextLayout}} via SetReadingDirection with {{DWRITE_READING_DIRECTION_TOP_TO_BOTTOM}} (or bottom to top), then you must pass an interface that implements {{IDWriteTextRenderer1}}. Otherwise you get the error {{DWRITE_E_TEXTRENDERERINCOMPATIBLE}} because the original {{IDWriteTextRenderer}} interface only supported horizontal text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An application-defined drawing context. </p> </dd> + + + <dd> <p>Pointer to the set of callback functions used to draw parts of a text string.</p> </dd> + + + <dd> <p>The x-coordinate of the layout's left side.</p> </dd> + + + <dd> <p>The y-coordinate of the layout's top side.</p> </dd> + + + + + <p> Retrieves the information about each individual text line of the text string. </p> + <p> If <em>maxLineCount</em> is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>*actualLineCount</em> is set to the number of lines needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to an array of structures containing various calculated length values of individual text lines.</p> </dd> + + + <dd> <p>The maximum size of the <em>lineMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>lineMetrics</em> array that is needed.</p> </dd> + + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Returns the overhangs (in {{DIPs}}) of the layout and all objects contained in it, including text glyphs and inline objects.</p> + <p>Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Overshoots of visible extents (in {{DIPs}}) outside the layout.</p> </dd> + + + + + <p> Retrieves logical properties and measurements of each glyph cluster. </p> + <p> If <em>maxClusterCount</em> is not large enough, then {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and <em>actualClusterCount</em> is set to the number of clusters needed. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains metrics, such as line-break or total advance width, for a glyph cluster.</p> </dd> + + + <dd> <p>The maximum size of the <em>clusterMetrics</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the actual size of the <em>clusterMetrics</em> array that is needed.</p> </dd> + + + + + <p>Determines the minimum possible width the layout can be set to without emergency breaking between the characters of whole words occurring.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Minimum width.</p> </dd> + + + + + <p> The application calls this function passing in a specific pixel location relative to the top-left location of the layout box and obtains the information about the correspondent hit-test metrics of the text string where the hit-test has occurred. When the specified pixel location is outside the text string, the function sets the output value <em>*isInside</em> to <strong>{{FALSE}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The pixel location X to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>The pixel location Y to hit-test, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is at the leading or the trailing side of the character. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this value is set according to the output <em>hitTestMetrics-&gt;textPosition</em> value to represent the edge closest to the hit-test location.</p> </dd> + + + <dd> <p>An output flag that indicates whether the hit-test location is inside the text string. When <strong>{{FALSE}}</strong>, the position nearest the text's edge is returned.</p> </dd> + + + <dd> <p>The output geometry fully enclosing the hit-test location. When the output <em>*isInside</em> value is set to <strong>{{FALSE}}</strong>, this structure represents the geometry enclosing the edge closest to the hit-test location.</p> </dd> + + + + + <p> The application calls this function to get the pixel location relative to the top-left of the layout box given the text position and the logical side of the position. This function is normally used as part of caret positioning of text where the caret is drawn at the location corresponding to the current text editing position. It may also be used as a way to programmatically obtain the geometry of a particular text position in {{UI}} automation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text position used to get the pixel location.</p> </dd> + + + <dd> <p>A Boolean flag that indicates whether the pixel location is of the leading or the trailing side of the specified text position.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location X, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output pixel location Y, relative to the top-left location of the layout box.</p> </dd> + + + <dd> <p>When this method returns, contains the output geometry fully enclosing the specified text position.</p> </dd> + + + + + <p> The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. One of the main usages is to implement highlight selection of the text string. The function returns {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. The application is responsible for allocating a new buffer of greater size and calling the function again. A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function <strong>{{IDWriteTextLayout}}</strong>::GetLineLengths), and the maxBidiReorderingDepth value from the <strong>{{DWRITE_TEXT_METRICS}}</strong> structure of the output argument *textMetrics (from the function <strong>{{IDWriteFactory}}</strong>::<strong>CreateTextLayout</strong>). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.</p> + <p>You create an <strong>{{IDWriteBitmapRenderTarget}}</strong> by using the <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> method, as shown in the following code.</p><pre>if ({{SUCCEEDED}}(hr)) +{ hr = g_pGdiInterop-&gt;CreateBitmapRenderTarget(hdc, r.right, r.bottom, &amp;g_pBitmapRenderTarget); +} +</pre><p> <strong>{{IDWriteGdiInterop::CreateBitmapRenderTarget}}</strong> takes a handle to a {{DC}} and the desired width and height. In the above example, the width and height given are the size of the window rect.</p> + + + + <p> Draws a run of glyphs to a bitmap target at the specified position.</p> + <p>You can use the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the <strong>{{IDWriteTextRenderer::DrawGlyphRun}}</strong> callback method as shown in the following code.</p><pre>{{STDMETHODIMP}} GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, {{FLOAT}} baselineOriginX, {{FLOAT}} baselineOriginY, {{DWRITE_MEASURING_MODE}} measuringMode, __in {{DWRITE_GLYPH_RUN}} const* glyphRun, __in {{DWRITE_GLYPH_RUN_DESCRIPTION}} const* glyphRunDescription, {{IUnknown}}* clientDrawingEffect ) +{ {{HRESULT}} hr = {{S_OK}}; // Pass on the drawing call to the render target to do the real work. {{RECT}} dirtyRect = {0}; hr = pRenderTarget_-&gt;DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, {{RGB}}(0,200,255), &amp;dirtyRect ); return hr; +} +</pre><p>The <em>baselineOriginX</em>, <em>baslineOriginY</em>, <em>measuringMethod</em>, and <em>glyphRun</em> parameters are provided (as arguments) when the callback method is invoked. The <em>renderingParams</em>, <em>textColor</em> and <em>blackBoxRect</em> are not.</p><p>Default rendering params can be retrieved by using the <strong>{{IDWriteFactory::CreateMonitorRenderingParams}}</strong> method.</p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The horizontal position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The vertical position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p> The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p> The structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p> The object that controls rendering behavior.</p> </dd> + + + <dd> <p> The foreground color of the text.</p> </dd> + + + <dd> <p> The optional rectangle that receives the bounding box (in pixels not {{DIPs}}) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.</p> </dd> + + + + + <p> Gets a handle to the memory device context. </p> + <p> An application can use the device context to draw using {{GDI}} functions. An application can obtain the bitmap handle ({{HBITMAP}}) by calling <strong>GetCurrentObject</strong>. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call <strong>GetObject</strong> to fill in a <strong>{{DIBSECTION}}</strong> structure. The bitmap is always a 32-bit top-down {{DIB}}. </p><p>Note that this method takes no parameters and returns an {{HDC}} variable, not an {{HRESULT}}.</p><pre>memoryHdc = g_pBitmapRenderTarget-&gt;GetMemoryDC(); +</pre><p>The {{HDC}} returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.</p> + <p>Returns a device context handle to the memory device context.</p> + + + + <p> Gets the number of bitmap pixels per {{DIP}}. </p> + <p>A {{DIP}} (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.</p> + <p>The number of bitmap pixels per {{DIP}}.</p> + + + + <p> Sets the number of bitmap pixels per {{DIP}} (device-independent pixel). A {{DIP}} is 1/96 inch, so this value is the number if pixels per inch divided by 96. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the number of pixels per {{DIP}}.</p> </dd> + + + + + <p> Gets the transform that maps abstract coordinates to {{DIPs}}. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a transform matrix.</p> </dd> + + + + + <p> Sets the transform that maps abstract coordinate to {{DIPs}} (device-independent pixel). This does not affect the world transform of the underlying device context. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the new transform. This parameter can be <strong>{{NULL}}</strong>, in which case the identity transform is implied.</p> </dd> + + + + + <p> Gets the dimensions of the target bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the width and height of the bitmap in pixels.</p> </dd> + + + + + <p> Resizes the bitmap. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new bitmap width, in pixels.</p> </dd> + + + <dd> <p>The new bitmap height, in pixels.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p> Creates a font object that matches the properties specified by the <strong>{{LOGFONT}}</strong> structure. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to a newly created <strong>{{IDWriteFont}}</strong> object if successful; otherwise, <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Initializes a <strong>{{LOGFONT}}</strong> structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a <strong>{{LOGFONT}}</strong> by using <strong>ConvertFontToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a <strong>{{LOGFONT}}</strong> as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFont}}</strong> object to be converted into a {{GDI}}-compatible <strong>{{LOGFONT}}</strong> structure.</p> </dd> + + + <dd> <p>When this method returns, contains a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>When this method returns, contains <strong>{{TRUE}}</strong> if the specified font object is part of the system font collection; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> Initializes a {{LOGFONT}} structure based on the {{GDI}}-compatible properties of the specified font. </p> + <p>The conversion to a {{LOGFONT}} by using <strong>ConvertFontFaceToLOGFONT</strong> operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that {{GDI}} will select the same physical font for displaying text formatted by a {{LOGFONT}} as the <strong>{{IDWriteFont}}</strong> object that was converted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{IDWriteFontFace}}</strong> object to be converted into a {{GDI}}-compatible {{LOGFONT}} structure.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a structure that receives a {{GDI}}-compatible font description.</p> </dd> + + + + + <p> Creates an <strong>{{IDWriteFontFace}}</strong> object that corresponds to the currently selected <strong>{{HFONT}}</strong> of the specified <strong>{{HDC}}</strong>. </p> + <p>This function is intended for scenarios in which an application wants to use {{GDI}} and Uniscribe 1.x for text layout and shaping, but DirectWrite for final rendering. This function assumes the client is performing text output using glyph indexes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to a device context into which a font has been selected. It is assumed that the client has already performed font mapping and that the font selected into the device context is the actual font to be used for rendering glyphs.</p> </dd> + + + <dd> <p>Contains an address of a reference to the newly created font face object, or <strong>{{NULL}}</strong> in case of failure. The font face returned is guaranteed to reference the same physical typeface that would be used for drawing glyphs (but not necessarily characters) using ExtTextOut.</p> </dd> + + + + + <p> Creates an object that encapsulates a bitmap and memory {{DC}} (device context) which can be used for rendering glyphs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the optional device context used to create a compatible memory {{DC}} (device context).</p> </dd> + + + <dd> <p>The width of the bitmap render target.</p> </dd> + + + <dd> <p>The height of the bitmap render target.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created <strong>{{IDWriteBitmapRenderTarget}}</strong> object.</p> </dd> + + + + + <p> Contains low-level information used to render a glyph run.</p> + <p>The alpha texture can be a bi-level alpha texture or a ClearType alpha texture. </p><p>A bi-level alpha texture contains one byte per pixel, therefore the size of the buffer for a bi-level texture will be the area of the texture bounds, in bytes. Each byte in a bi-level alpha texture created by <strong>CreateAlphaTexture</strong> is either set to {{DWRITE_ALPHA_MAX}} (that is, 255) or zero.</p><p>A ClearType alpha texture contains three bytes per pixel, therefore the size of the buffer for a ClearType alpha texture is three times the area of the texture bounds, in bytes.</p> + + + + <p> Gets the bounding rectangle of the physical pixels affected by the glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the type of texture requested. If a bi-level texture is requested, the bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only antialiased glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains the bounding rectangle of the physical pixels affected by the glyph run, or an empty rectangle if there are no glyphs of the specified texture type.</p> </dd> + + + + + <p> Creates an alpha texture of the specified type for glyphs within a specified bounding rectangle. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies the type of texture requested. This can be <strong>{{DWRITE_TEXTURE_BILEVEL_1x1}}</strong> or <strong>{{DWRITE_TEXTURE_CLEARTYPE_3x1}}</strong>. If a bi-level texture is requested, the texture contains only bi-level glyphs. Otherwise, the texture contains only antialiased glyphs.</p> </dd> + + + <dd> <p>The bounding rectangle of the texture, which can be different than the bounding rectangle returned by <strong>GetAlphaTextureBounds</strong>.</p> </dd> + + + <dd> <p>When this method returns, contains the array of alpha values from the texture. The buffer allocated for this array must be at least the size of <em>bufferSize</em>.</p> </dd> + + + <dd> <p>The size of the <em>alphaValues</em> array, in bytes. The minimum size depends on the dimensions of the rectangle and the type of texture requested.</p> </dd> + + + + + <p> Gets alpha blending properties required for ClearType blending. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An object that specifies the ClearType level and enhanced contrast, gamma, pixel geometry, and rendering mode. In most cases, the values returned by the output parameters of this method are based on the properties of this object, unless a {{GDI}}-compatible rendering mode was specified.</p> </dd> + + + <dd> <p>When this method returns, contains the gamma value to use for gamma correction.</p> </dd> + + + <dd> <p>When this method returns, contains the enhanced contrast value to be used for blending.</p> </dd> + + + <dd> <p>When this method returns, contains the ClearType level used in the alpha blending.</p> </dd> + + + + + <p>Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.</p> + <p>This function creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects. DirectWrite factory contains internal state data such as font loader registration and cached font data. In most cases it is recommended you use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state data, and thereby reduce memory usage. However, there are cases when it is desirable to reduce the impact of a component, such as a plug-in from an untrusted source, on the rest of the process, by sandboxing and isolating it from the rest of the process components. In such cases, it is recommended you use an isolated factory for the sandboxed component.</p><p>The following example shows how to create a shared DirectWrite factory.</p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the factory object will be shared or isolated.</p> </dd> + + + <dd> <p>A {{GUID}} value that identifies the DirectWrite factory interface, such as __uuidof(<strong>{{IDWriteFactory}}</strong>).</p> </dd> + + + <dd> <p>An address of a reference to the newly created DirectWrite factory object.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FAMILY}}</strong> enumeration contains values that specify the kind of typeface classification.</p> + + + <dd> <p>Any typeface classification.</p> </dd> + + + <dd> <p>No fit typeface classification.</p> </dd> + + + <dd> <p>Text display typeface classification.</p> </dd> + + + <dd> <p>Script (or hand written) typeface classification.</p> </dd> + + + <dd> <p>Decorative typeface classification.</p> </dd> + + + <dd> <p>Symbol typeface classification.</p> </dd> + + + <dd> <p>Pictorial (or symbol) typeface classification.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SERIF_STYLE}}</strong> enumeration contains values that specify the appearance of the serif text.</p> + + + <dd> <p>Any appearance of the serif text.</p> </dd> + + + <dd> <p>No fit appearance of the serif text.</p> </dd> + + + <dd> <p>Cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse square cove appearance of the serif text.</p> </dd> + + + <dd> <p>Square appearance of the serif text.</p> </dd> + + + <dd> <p>Thin appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + <dd> <p>Exaggerated appearance of the serif text.</p> </dd> + + + <dd> <p>Triangle appearance of the serif text.</p> </dd> + + + <dd> <p>Normal sans appearance of the serif text.</p> </dd> + + + <dd> <p>Obtuse sans appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Flared appearance of the serif text.</p> </dd> + + + <dd> <p>Rounded appearance of the serif text.</p> </dd> + + + <dd> <p>Script appearance of the serif text.</p> </dd> + + + <dd> <p>Perpendicular sans appearance of the serif text.</p> </dd> + + + <dd> <p>Oval appearance of the serif text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> enumeration contains values that specify the weight of characters.</p> + <p>The <strong>{{DWRITE_PANOSE_WEIGHT}}</strong> values roughly correspond to the <strong>{{DWRITE_FONT_WEIGHT}}</strong> values by using (panose_weight - 2) * 100 = font_weight.</p> + + + <dd> <p>Any weight.</p> </dd> + + + <dd> <p>No fit weight.</p> </dd> + + + <dd> <p>Very light weight.</p> </dd> + + + <dd> <p>Light weight.</p> </dd> + + + <dd> <p>Thin weight.</p> </dd> + + + <dd> <p>Book weight.</p> </dd> + + + <dd> <p>Medium weight.</p> </dd> + + + <dd> <p>Demi weight.</p> </dd> + + + <dd> <p>Bold weight.</p> </dd> + + + <dd> <p>Heavy weight.</p> </dd> + + + <dd> <p>Black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + <dd> <p>Extra black weight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_PROPORTION}}</strong> enumeration contains values that specify the proportion of the glyph shape by considering additional detail to standard characters.</p> + + + <dd> <p>Any proportion for the text.</p> </dd> + + + <dd> <p>No fit proportion for the text.</p> </dd> + + + <dd> <p>Old style proportion for the text.</p> </dd> + + + <dd> <p>Modern proportion for the text.</p> </dd> + + + <dd> <p>Extra width proportion for the text.</p> </dd> + + + <dd> <p>Expanded proportion for the text.</p> </dd> + + + <dd> <p>Condensed proportion for the text.</p> </dd> + + + <dd> <p>Very expanded proportion for the text.</p> </dd> + + + <dd> <p>Very condensed proportion for the text.</p> </dd> + + + <dd> <p>Monospaced proportion for the text.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CONTRAST}}</strong> enumeration contains values that specify the ratio between thickest and thinnest point of the stroke for a letter such as uppercase 'O'.</p> + + + <dd> <p>Any contrast.</p> </dd> + + + <dd> <p>No fit contrast.</p> </dd> + + + <dd> <p>No contrast.</p> </dd> + + + <dd> <p>Very low contrast.</p> </dd> + + + <dd> <p>Low contrast.</p> </dd> + + + <dd> <p>Medium low contrast.</p> </dd> + + + <dd> <p>Medium contrast.</p> </dd> + + + <dd> <p>Medium high contrast.</p> </dd> + + + <dd> <p>High contrast.</p> </dd> + + + <dd> <p>Very high contrast.</p> </dd> + + + <dd> <p>Horizontal low contrast.</p> </dd> + + + <dd> <p>Horizontal medium contrast.</p> </dd> + + + <dd> <p>Horizontal high contrast.</p> </dd> + + + <dd> <p>Broken contrast.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_STROKE_VARIATION}}</strong> enumeration contains values that specify the relationship between thin and thick stems of text characters.</p> + + + <dd> <p>Any stroke variation for text characters.</p> </dd> + + + <dd> <p>No fit stroke variation for text characters.</p> </dd> + + + <dd> <p>No stroke variation for text characters.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual diagonal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual transitional.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is gradual horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is rapid horizontal.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant vertical.</p> </dd> + + + <dd> <p>The stroke variation for text characters is instant horizontal.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ARM_STYLE}}</strong> enumeration contains values that specify the style of termination of stems and rounded letterforms for text.</p> + + + <dd> <p>Any arm style.</p> </dd> + + + <dd> <p>No fit arm style.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight wedge.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is straight single serif.</p> </dd> + + + <dd> <p>The arm style is straight double serif.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + <dd> <p>The arm style is straight horizontal.</p> </dd> + + + <dd> <p>The arm style is straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight horizontal.</p> </dd> + + + <dd> <p>The arm style is non-straight wedge.</p> </dd> + + + <dd> <p>The arm style is non-straight vertical.</p> </dd> + + + <dd> <p>The arm style is non-straight single serif.</p> </dd> + + + <dd> <p>The arm style is non-straight double serif.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LETTERFORM}}</strong> enumeration contains values that specify the roundness of letterform for text.</p> + + + <dd> <p>Any letterform.</p> </dd> + + + <dd> <p>No fit letterform.</p> </dd> + + + <dd> <p>Normal contact letterform.</p> </dd> + + + <dd> <p>Normal weighted letterform.</p> </dd> + + + <dd> <p>Normal boxed letterform.</p> </dd> + + + <dd> <p>Normal flattened letterform.</p> </dd> + + + <dd> <p>Normal rounded letterform.</p> </dd> + + + <dd> <p>Normal off-center letterform.</p> </dd> + + + <dd> <p>Normal square letterform.</p> </dd> + + + <dd> <p>Oblique contact letterform.</p> </dd> + + + <dd> <p>Oblique weighted letterform.</p> </dd> + + + <dd> <p>Oblique boxed letterform.</p> </dd> + + + <dd> <p>Oblique flattened letterform.</p> </dd> + + + <dd> <p>Oblique rounded letterform.</p> </dd> + + + <dd> <p>Oblique off-center letterform.</p> </dd> + + + <dd> <p>Oblique square letterform.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_MIDLINE}}</strong> enumeration contains values that specify info about the placement of midline across uppercase characters and the treatment of diagonal stem apexes.</p> + + + <dd> <p>Any midline.</p> </dd> + + + <dd> <p>No fit midline.</p> </dd> + + + <dd> <p>Standard trimmed midline.</p> </dd> + + + <dd> <p>Standard pointed midline.</p> </dd> + + + <dd> <p>Standard serifed midline.</p> </dd> + + + <dd> <p>High trimmed midline.</p> </dd> + + + <dd> <p>High pointed midline.</p> </dd> + + + <dd> <p>High serifed midline.</p> </dd> + + + <dd> <p>Constant trimmed midline.</p> </dd> + + + <dd> <p>Constant pointed midline.</p> </dd> + + + <dd> <p>Constant serifed midline.</p> </dd> + + + <dd> <p>Low trimmed midline.</p> </dd> + + + <dd> <p>Low pointed midline.</p> </dd> + + + <dd> <p>Low serifed midline.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XHEIGHT}}</strong> enumeration contains values that specify info about the relative size of lowercase letters and the treatment of diacritic marks (xheight).</p> + + + <dd> <p>Any xheight.</p> </dd> + + + <dd> <p>No fit xheight.</p> </dd> + + + <dd> <p>Constant small xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Constant large xheight.</p> </dd> + + + <dd> <p>Ducking small xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + <dd> <p>Ducking large xheight.</p> </dd> + + + <dd> <p>Constant standard xheight.</p> </dd> + + + <dd> <p>Ducking standard xheight.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_TOOL_KIND}}</strong> enumeration contains values that specify the kind of tool that is used to create character forms.</p> + + + <dd> <p>Any kind of tool.</p> </dd> + + + <dd> <p>No fit for the kind of tool.</p> </dd> + + + <dd> <p>Flat {{NIB}} tool.</p> </dd> + + + <dd> <p>Pressure point tool.</p> </dd> + + + <dd> <p>Engraved tool.</p> </dd> + + + <dd> <p>Ball tool.</p> </dd> + + + <dd> <p>Brush tool.</p> </dd> + + + <dd> <p>Rough tool.</p> </dd> + + + <dd> <p>Felt-pen-brush-tip tool.</p> </dd> + + + <dd> <p>Wild-brush tool.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SPACING}}</strong> enumeration contains values that specify character spacing (monospace versus proportional).</p> + + + <dd> <p>Any spacing.</p> </dd> + + + <dd> <p>No fit for spacing.</p> </dd> + + + <dd> <p>Spacing is proportional.</p> </dd> + + + <dd> <p>Spacing is monospace.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT_RATIO}}</strong> enumeration contains values that specify info about the ratio between width and height of the character face.</p> + + + <dd> <p>Any aspect ratio.</p> </dd> + + + <dd> <p>No fit for aspect ratio.</p> </dd> + + + <dd> <p>Very condensed aspect ratio.</p> </dd> + + + <dd> <p>Condensed aspect ratio.</p> </dd> + + + <dd> <p>Normal aspect ratio.</p> </dd> + + + <dd> <p>Expanded aspect ratio.</p> </dd> + + + <dd> <p>Very expanded aspect ratio.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_TOPOLOGY}}</strong> enumeration contains values that specify the topology of letterforms.</p> + + + <dd> <p>Any script topology.</p> </dd> + + + <dd> <p>No fit for script topology.</p> </dd> + + + <dd> <p>Script topology is roman disconnected.</p> </dd> + + + <dd> <p>Script topology is roman trailing.</p> </dd> + + + <dd> <p>Script topology is roman connected.</p> </dd> + + + <dd> <p>Script topology is cursive disconnected.</p> </dd> + + + <dd> <p>Script topology is cursive trailing.</p> </dd> + + + <dd> <p>Script topology is cursive connected.</p> </dd> + + + <dd> <p>Script topology is black-letter disconnected.</p> </dd> + + + <dd> <p>Script topology is black-letter trailing.</p> </dd> + + + <dd> <p>Script topology is black-letter connected.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SCRIPT_FORM}}</strong> enumeration contains values that specify the general look of the character face, with consideration of its slope and tails.</p> + + + <dd> <p>Any script form.</p> </dd> + + + <dd> <p>No fit for script form.</p> </dd> + + + <dd> <p>Script form is upright with no wrapping.</p> </dd> + + + <dd> <p>Script form is upright with some wrapping.</p> </dd> + + + <dd> <p>Script form is upright with more wrapping.</p> </dd> + + + <dd> <p>Script form is upright with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with no wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with some wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with more wrapping.</p> </dd> + + + <dd> <p>Script form is oblique with extreme wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with no wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with some wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with more wrapping.</p> </dd> + + + <dd> <p>Script form is exaggerated with extreme wrapping.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FINIALS}}</strong> enumeration contains values that specify how character ends and miniscule ascenders are treated.</p> + + + <dd> <p>Any finials.</p> </dd> + + + <dd> <p>No fit for finials.</p> </dd> + + + <dd> <p>No loops.</p> </dd> + + + <dd> <p>No closed loops.</p> </dd> + + + <dd> <p>No open loops.</p> </dd> + + + <dd> <p>Sharp with no loops.</p> </dd> + + + <dd> <p>Sharp with closed loops.</p> </dd> + + + <dd> <p>Sharp with open loops.</p> </dd> + + + <dd> <p>Tapered with no loops.</p> </dd> + + + <dd> <p>Tapered with closed loops.</p> </dd> + + + <dd> <p>Tapered with open loops.</p> </dd> + + + <dd> <p>Round with no loops.</p> </dd> + + + <dd> <p>Round with closed loops.</p> </dd> + + + <dd> <p>Round with open loops.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_XASCENT}}</strong> enumeration contains values that specify the relative size of the lowercase letters.</p> + + + <dd> <p>Any xascent.</p> </dd> + + + <dd> <p>No fit for xascent.</p> </dd> + + + <dd> <p>Very low xascent.</p> </dd> + + + <dd> <p>Low xascent.</p> </dd> + + + <dd> <p>Medium xascent.</p> </dd> + + + <dd> <p>High xascent.</p> </dd> + + + <dd> <p>Very high xascent.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_CLASS}}</strong> enumeration contains values that specify the general look of the character face.</p> + + + <dd> <p>Any class of decorative typeface.</p> </dd> + + + <dd> <p>No fit for decorative typeface.</p> </dd> + + + <dd> <p>Derivative decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard topology decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard elements decorative typeface.</p> </dd> + + + <dd> <p>Nonstandard aspect decorative typeface.</p> </dd> + + + <dd> <p>Initials decorative typeface.</p> </dd> + + + <dd> <p>Cartoon decorative typeface.</p> </dd> + + + <dd> <p>Picture stems decorative typeface.</p> </dd> + + + <dd> <p>Ornamented decorative typeface.</p> </dd> + + + <dd> <p>Text and background decorative typeface.</p> </dd> + + + <dd> <p>Collage decorative typeface.</p> </dd> + + + <dd> <p>Montage decorative typeface.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_ASPECT}}</strong> enumeration contains values that specify the ratio between the width and height of the character face.</p> + + + <dd> <p>Any aspect.</p> </dd> + + + <dd> <p>No fit for aspect.</p> </dd> + + + <dd> <p>Super condensed aspect.</p> </dd> + + + <dd> <p>Very condensed aspect.</p> </dd> + + + <dd> <p>Condensed aspect.</p> </dd> + + + <dd> <p>Normal aspect.</p> </dd> + + + <dd> <p>Extended aspect.</p> </dd> + + + <dd> <p>Very extended aspect.</p> </dd> + + + <dd> <p>Super extended aspect.</p> </dd> + + + <dd> <p>Monospace aspect.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_FILL}}</strong> enumeration contains values that specify the type of fill and line treatment.</p> + + + <dd> <p>Any fill.</p> </dd> + + + <dd> <p>No fit for fill.</p> </dd> + + + <dd> <p>The fill is the standard solid fill.</p> </dd> + + + <dd> <p>No fill.</p> </dd> + + + <dd> <p>The fill is patterned fill.</p> </dd> + + + <dd> <p>The fill is complex fill.</p> </dd> + + + <dd> <p>The fill is shaped fill.</p> </dd> + + + <dd> <p>The fill is drawn distressed.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_LINING}}</strong> enumeration contains values that specify the handling of the outline for the decorative typeface.</p> + + + <dd> <p>Any lining.</p> </dd> + + + <dd> <p>No fit for lining.</p> </dd> + + + <dd> <p>No lining.</p> </dd> + + + <dd> <p>The lining is inline.</p> </dd> + + + <dd> <p>The lining is outline.</p> </dd> + + + <dd> <p>The lining is engraved.</p> </dd> + + + <dd> <p>The lining is shadowed.</p> </dd> + + + <dd> <p>The lining is relief.</p> </dd> + + + <dd> <p>The lining is backdrop.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_DECORATIVE_TOPOLOGY}}</strong> enumeration contains values that specify the overall shape characteristics of the font.</p> + + + <dd> <p>Any decorative topology.</p> </dd> + + + <dd> <p>No fit for decorative topology.</p> </dd> + + + <dd> <p>Standard decorative topology.</p> </dd> + + + <dd> <p>Square decorative topology.</p> </dd> + + + <dd> <p>Multiple segment decorative topology.</p> </dd> + + + <dd> <p>Art deco decorative topology.</p> </dd> + + + <dd> <p>Uneven weighting decorative topology.</p> </dd> + + + <dd> <p>Diverse arms decorative topology.</p> </dd> + + + <dd> <p>Diverse forms decorative topology.</p> </dd> + + + <dd> <p>Lombardic forms decorative topology.</p> </dd> + + + <dd> <p>Upper case in lower case decorative topology.</p> </dd> + + + <dd> <p>The decorative topology is implied.</p> </dd> + + + <dd> <p>Horseshoe E and A decorative topology.</p> </dd> + + + <dd> <p>Cursive decorative topology.</p> </dd> + + + <dd> <p>Blackletter decorative topology.</p> </dd> + + + <dd> <p>Swash variance decorative topology.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_CHARACTER_RANGES}}</strong> enumeration contains values that specify the type of characters available in the font.</p> + + + <dd> <p>Any range.</p> </dd> + + + <dd> <p>No fit for range.</p> </dd> + + + <dd> <p>The range includes extended collection.</p> </dd> + + + <dd> <p>The range includes literals.</p> </dd> + + + <dd> <p>The range doesn't include lower case.</p> </dd> + + + <dd> <p>The range includes small capitals.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_KIND}}</strong> enumeration contains values that specify the kind of symbol set.</p> + + + <dd> <p>Any kind of symbol set.</p> </dd> + + + <dd> <p>No fit for the kind of symbol set.</p> </dd> + + + <dd> <p>The kind of symbol set is montages.</p> </dd> + + + <dd> <p>The kind of symbol set is pictures.</p> </dd> + + + <dd> <p>The kind of symbol set is shapes.</p> </dd> + + + <dd> <p>The kind of symbol set is scientific symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is music symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is expert symbols.</p> </dd> + + + <dd> <p>The kind of symbol set is patterns.</p> </dd> + + + <dd> <p>The kind of symbol set is boarders.</p> </dd> + + + <dd> <p>The kind of symbol set is icons.</p> </dd> + + + <dd> <p>The kind of symbol set is logos.</p> </dd> + + + <dd> <p>The kind of symbol set is industry specific.</p> </dd> + + + + + <p>The <strong>{{DWRITE_PANOSE_SYMBOL_ASPECT_RATIO}}</strong> enumeration contains values that specify the aspect ratio of symbolic characters.</p> + + + <dd> <p>Any aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No fit for aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>No width aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Exceptionally wide symbolic characters.</p> </dd> + + + <dd> <p>Super wide symbolic characters.</p> </dd> + + + <dd> <p>Very wide symbolic characters.</p> </dd> + + + <dd> <p>Wide symbolic characters.</p> </dd> + + + <dd> <p>Normal aspect ratio of symbolic characters.</p> </dd> + + + <dd> <p>Narrow symbolic characters.</p> </dd> + + + <dd> <p>Very narrow symbolic characters.</p> </dd> + + + + + <p>The <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong> enumeration contains values that specify the policy used by the <strong>{{IDWriteFontFace1::GetRecommendedRenderingMode}}</strong> method to determine whether to render glyphs in outline mode.</p> + <p>Glyphs are rendered in outline mode by default at large sizes for performance reasons, but how large (that is, the outline threshold) depends on the quality of outline rendering. If the graphics system renders anti-aliased outlines, a relatively low threshold is used. But if the graphics system renders aliased outlines, a much higher threshold is used.</p> + + + + <p>The <strong>{{DWRITE_BASELINE}}</strong> enumeration contains values that specify the baseline for text alignment.</p> + + + <dd> <p>The Roman baseline for horizontal; the Central baseline for vertical.</p> </dd> + + + <dd> <p>The baseline that is used by alphabetic scripts such as Latin, Greek, and Cyrillic.</p> </dd> + + + <dd> <p>Central baseline, which is generally used for vertical text.</p> </dd> + + + <dd> <p>Mathematical baseline, which math characters are centered on.</p> </dd> + + + <dd> <p>Hanging baseline, which is used in scripts like Devanagari.</p> </dd> + + + <dd> <p>Ideographic bottom baseline for {{CJK}}, left in vertical.</p> </dd> + + + <dd> <p>Ideographic top baseline for {{CJK}}, right in vertical.</p> </dd> + + + <dd> <p>The bottom-most extent in horizontal, left-most in vertical.</p> </dd> + + + <dd> <p>The top-most extent in horizontal, right-most in vertical.</p> </dd> + + + + + <p>The <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong> enumeration contains values that specify the desired kind of glyph orientation for the text.</p> + <p>The client specifies a <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value to the analyzer as the desired orientation.</p><strong>Note</strong>??This is the client preference, and the constraints of the script determine the final presentation.? + + + <dd> <p>The default glyph orientation. In vertical layout, naturally horizontal scripts (Latin, Thai, Arabic, Devanagari) rotate 90 degrees clockwise, while ideographic scripts (Chinese, Japanese, Korean) remain upright, 0 degrees.</p> </dd> + + + <dd> <p>Stacked glyph orientation. Ideographic scripts and scripts that permit stacking (Latin, Hebrew) are stacked in vertical reading layout. Connected scripts (Arabic, Syriac, 'Phags-pa, Ogham), which would otherwise look broken if glyphs were kept at 0 degrees, remain connected and rotate.</p> </dd> + + + + + <p>The <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> enumeration contains values that specify how the glyph is oriented to the x-axis.</p> + <p>The text analyzer outputs <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong> values. The value that it outputs depends on the desired orientation, bidi level, and character properties.</p> + + + <dd> <p>Glyph orientation is upright.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 90 degrees clockwise.</p> </dd> + + + <dd> <p>Glyph orientation is upside-down.</p> </dd> + + + <dd> <p>Glyph orientation is rotated 270 degrees clockwise.</p> </dd> + + + + + <p>The <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong> enumeration contains values that specify the type of antialiasing to use for text when the rendering mode calls for antialiasing.</p> + + + <dd> <p>ClearType antialiasing computes coverage independently for the red, green, and blue color elements of each pixel. This allows for more detail than conventional antialiasing. However, because there is no one alpha value for each pixel, ClearType is not suitable for rendering text onto a transparent intermediate bitmap.</p> </dd> + + + <dd> <p>Grayscale antialiasing computes one coverage value for each pixel. Because the alpha value of each pixel is well-defined, text can be rendered onto a transparent bitmap, which can then be composited with other content.</p> <strong>Note</strong>??Grayscale rendering with <strong>{{IDWriteBitmapRenderTarget1}}</strong> uses premultiplied alpha. ? </dd> + + + + + <p>The <strong>{{DWRITE_FONT_METRICS1}}</strong> structure specifies the metrics that are applicable to all glyphs within the font face.</p> + <p><strong>{{DWRITE_FONT_METRICS1}}</strong> inherits from <strong>{{DWRITE_FONT_METRICS}}</strong>:</p><code> struct {{DWRITE_FONT_METRICS1}} : public {{DWRITE_FONT_METRICS}} +{ +... +};</code> + + + <dd> <p>Left edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Top edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Right edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Bottom edge of accumulated bounding blackbox of all glyphs in the font.</p> </dd> + + + <dd> <p>Horizontal position of the subscript relative to the baseline origin. This is typically negative (to the left) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the subscript relative to the baseline. This is typically negative.</p> </dd> + + + <dd> <p>Horizontal size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Vertical size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.</p> </dd> + + + <dd> <p>Horizontal position of the superscript relative to the baseline origin. This is typically positive (to the right) in italic and oblique fonts, and zero in regular fonts.</p> </dd> + + + <dd> <p>Vertical position of the superscript relative to the baseline. This is typically positive.</p> </dd> + + + <dd> <p>Horizontal size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>Vertical size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.</p> </dd> + + + <dd> <p>A Boolean value that indicates that the ascent, descent, and lineGap are based on newer 'typographic' values in the font, rather than legacy values.</p> </dd> + + + + + <p>The <strong>{{DWRITE_CARET_METRICS}}</strong> structure specifies the metrics for caret placement in a font.</p> + + + <dd> <p>Vertical rise of the caret in font design units. Rise / Run yields the caret angle. Rise = 1 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal run of the caret in font design units. Rise / Run yields the caret angle. Run = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + <dd> <p>Horizontal offset of the caret, in font design units, along the baseline for good appearance. Offset = 0 for perfectly upright fonts (non-italic).</p> </dd> + + + + + + + + + + + + + + + + + <p>The <strong>{{DWRITE_PANOSE}}</strong> union describes typeface classification values that you use with <strong>{{IDWriteFont1::GetPanose}}</strong> to select and match the font.</p> + <strong>Note</strong>??The <strong>familyKind</strong> member (index 0) is the only stable entry in the 10-byte array because all the entries that follow can change dynamically depending on the context of the first member.? + + + + <p>The <strong>{{DWRITE_UNICODE_RANGE}}</strong> structure specifies the range of Unicode code points.</p> + + + <dd> <p>The first code point in the Unicode range.</p> </dd> + + + <dd> <p>The last code point in the Unicode range.</p> </dd> + + + + + <p>The <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure specifies script properties for caret navigation and justification.</p> + + + <dd> <p>The standardized four character code for the given script. </p> <strong>Note</strong>??These only include the general Unicode scripts, not any additional {{ISO}} 15924 scripts for bibliographic distinction. ? </dd> + + + <dd> <p>The standardized numeric code, ranging 0-999.</p> </dd> + + + <dd> <p>Number of characters to estimate look-ahead for complex scripts. Latin and all Kana are generally 1. Indic scripts are up to 15, and most others are 8.</p> <strong>Note</strong>??Combining marks and variation selectors can produce clusters that are longer than these look-aheads, so this estimate is considered typical language use. Diacritics must be tested explicitly separately. ? </dd> + + + <dd> <p>Appropriate character to elongate the given script for justification. For example:</p> <ul> <li>Arabic - U+0640 Tatweel</li> <li>Ogham - U+1680 Ogham Space Mark</li> </ul> </dd> + + + <dd> <p>Restrict the caret to whole clusters, like Thai and Devanagari. Scripts such as Arabic by default allow navigation between clusters. Others like Thai always navigate across whole clusters.</p> </dd> + + + <dd> <p>The language uses dividers between words, such as spaces between Latin or the Ethiopic wordspace. Examples include Latin, Greek, Devanagari, and Ethiopic. Chinese, Korean, and Thai are excluded.</p> </dd> + + + <dd> <p>The characters are discrete units from each other. This includes both block scripts and clustered scripts. Examples include Latin, Greek, Cyrillic, Hebrew, Chinese, and Thai.</p> </dd> + + + <dd> <p>The language is a block script, expanding between characters. Examples include Chinese, Japanese, Korean, and Bopomofo.</p> </dd> + + + <dd> <p>The language is justified within glyph clusters, not just between glyph clusters, such as the character sequence of Thai Lu and Sara Am (U+{{E026}}, U+{{E033}}), which form a single cluster but still expand between them. Examples include Thai, Lao, and Khmer.</p> </dd> + + + <dd> <p>The script's clusters are connected to each other (such as the baseline-linked Devanagari), and no separation is added between characters.</p> <strong>Note</strong>??Cursively linked scripts like Arabic are also connected (but not all connected scripts are cursive). ? <p>Examples include Devanagari, Arabic, Syriac, Bengala, Gurmukhi, and Ogham. Latin, Chinese, and Thaana are excluded.</p> </dd> + + + <dd> <p>The script is naturally cursive (Arabic and Syriac), meaning it uses other justification methods like kashida extension rather than inter-character spacing.</p> <strong>Note</strong>?? Although other scripts like Latin and Japanese might actually support handwritten cursive forms, they are not considered cursive scripts. ? <p>Examples include Arabic, Syriac, and Mongolian. Thaana, Devanagari, Latin, and Chinese are excluded.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure specifies justification info per glyph.</p> + + + <dd> <p>Minimum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, typically being zero except for kashida.</p> </dd> + + + <dd> <p>Maximum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, being zero for fixed-size characters and connected scripts, and non-zero for discrete scripts, and non-zero for cursive scripts at expansion points.</p> </dd> + + + <dd> <p>Maximum amount of compression to apply to the side of the glyph. This might vary from zero up to the glyph cluster size.</p> </dd> + + + <dd> <p>Priority of this expansion point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Priority of this compression point. Larger priorities are applied later, while priority zero does nothing.</p> </dd> + + + <dd> <p>Allow this expansion point to use up any remaining slack space even after all expansion priorities have been used up.</p> </dd> + + + <dd> <p>Allow this compression point to use up any remaining space even after all compression priorities have been used up.</p> </dd> + + + <dd> <p>Apply expansion and compression to the leading edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Apply expansion and compression to the trailing edge of the glyph. This bit is <strong>{{FALSE}}</strong> (0) for connected scripts, fixed-size characters, and diacritics. It is generally <strong>{{FALSE}}</strong> within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.</p> </dd> + + + <dd> <p>Reserved</p> </dd> + + + + + <p>The interface you implement to provide needed information to the text analyzer, like the text and associated text properties.</p><p> </p><strong>Note</strong>?? If any of these callbacks return an error, the analysis functions will stop prematurely and return a callback error.? + + + + <p>Used by the text analyzer to obtain the desired glyph orientation and resolved bidi level.</p> + <p>The text analyzer calls back to this to get the desired glyph orientation and resolved bidi level, which it uses along with the script properties of the text to determine the actual orientation of each character, which it reports back to the client via the sink SetGlyphOrientation method.</p> + <p>Returning an error will abort the analysis.</p> + + + <dd> <p>The text position.</p> </dd> + + + <dd> <p>A reference to the text length.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_VERTICAL_GLYPH_ORIENTATION}}</strong>-typed value that specifies the desired kind of glyph orientation for the text.</p> </dd> + + + <dd> <p>A reference to the resolved bidi level.</p> </dd> + + + + + <p> The interface you implement to receive the output of the text analyzers.</p> + + + + <p>The text analyzer calls back to this to report the actual orientation of each character for shaping and drawing.</p> + <p>Returns a successful code or an error code to abort analysis.</p> + + + <dd> <p>The starting position to report from.</p> </dd> + + + <dd> <p>Number of {{UTF}}-16 units of the reported range.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle of the glyphs within the text range (pass to <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to get the world relative transform).</p> </dd> + + + <dd> <p>The adjusted bidi level to be used by the client layout for reordering runs. This will differ from the resolved bidi level retrieved from the source for cases such as Arabic stacked top-to-bottom, where the glyphs are still shaped as {{RTL}}, but the runs are {{TTB}} along with any {{CJK}} or Latin.</p> </dd> + + + <dd> <p>Whether the glyphs are rotated on their side, which is the default case for {{CJK}} and the case stacked Latin</p> </dd> + + + <dd> <p>Whether the script should be shaped as right-to-left. For Arabic stacked top-to-bottom, even when the adjusted bidi level is coerced to an even level, this will still be true.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the amount of contrast enhancement to use for grayscale antialiasing.</p> + <p>The contrast enhancement value. Valid values are greater than or equal to zero.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Gets a font collection representing the set of {{EUDC}} (end-user defined characters) fonts.</p> + <p>Note that if no {{EUDC}} is set on the system, the returned collection will be empty, meaning it will return success but GetFontFamilyCount will be zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font collection to fill.</p> </dd> + + + <dd> <p>Whether to check for updates.</p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The gamma level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The enhanced contrast level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The ClearType level to be set for the new rendering parameters object.</p> </dd> + + + <dd> <p>Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.</p> </dd> + + + <dd> <p>A value that represents the method (for example, ClearType natural quality) for rendering glyphs.</p> </dd> + + + <dd> <p>When this method returns, contains an address of a reference to the newly created rendering parameters object.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace1}}</strong> interface.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that holds metrics for the current font face element. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.</p> + <p>Standard {{HRESULT}} error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}}.</p> </dd> + + + <dd> <p>An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and <em>pixelsPerDip</em>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_FONT_METRICS1}}</strong> structure to fill in. The metrics returned by this function are in font design units.</p> </dd> + + + + + <p>Gets caret metrics for the font in design units.</p> + <p>Caret metrics are used by text editors for drawing the correct caret placement and slant.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_CARET_METRICS}}</strong> structure that is filled.</p> </dd> + + + + + <p>Retrieves a list of character ranges supported by a font.</p> + <p>A list of character ranges supported by the font is useful for scenarios like character picking, glyph display, and efficient font selection lookup. This is similar to {{GDI}}'s <strong>GetFontUnicodeRanges</strong>, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.</p> + <p>Returns {{TRUE}} if the font is monospaced, otherwise it returns {{FALSE}}.</p> + + + + <p>Retrieves the advances in design units for a sequences of glyphs.</p> + <p> This is equivalent to calling GetGlyphMetrics and using only the advance width and height.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve advances for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances for.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advance height rather than horizontal advance widths.</p> </dd> + + + + + <p>Returns the pixel-aligned advances for a sequences of glyphs.</p> + <p>This is equivalent to calling <strong>GetGdiCompatibleGlyphMetrics</strong> and using only the advance width and height. </p><p>Like <strong>GetGdiCompatibleGlyphMetrics</strong>, these are in design units, meaning they must be scaled down by {{DWRITE_FONT_METRICS::designUnitsPerEm}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>Number of physical pixels per {{DIP}}. For example, if the {{DPI}} of the rendering surface is 96 this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.</p> </dd> + + + <dd> <p>When {{FALSE}}, the metrics are the same as {{GDI}} aliased text ({{DWRITE_MEASURING_MODE_GDI_CLASSIC}}). When {{TRUE}}, the metrics are the same as those measured by {{GDI}} using a font using {{CLEARTYPE_NATURAL_QUALITY}} ({{DWRITE_MEASURING_MODE_GDI_NATURAL}}).</p> </dd> + + + <dd> <p>Retrieve the glyph's vertical advances rather than horizontal advances.</p> </dd> + + + <dd> <p>Total glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve advances.</p> </dd> + + + <dd> <p>The returned advances in font design units for each glyph.</p> </dd> + + + + + <p>Retrieves the kerning pair adjustments from the font's kern table.</p> + <p><strong>GetKerningPairAdjustments</strong> isn't a direct replacement for {{GDI}}'s character based <strong>GetKerningPairs</strong>, but it serves the same role, without the client needing to cache them locally. <strong>GetKerningPairAdjustments</strong> also uses glyph id's directly rather than {{UCS}}-2 characters (how the kern table actually stores them), which avoids glyph collapse and ambiguity, such as the dash and hyphen, or space and non-breaking space. </p><p>Newer fonts may have only {{GPOS}} kerning instead of the legacy pair-table kerning. Such fonts, like Gabriola, will only return 0's for adjustments. <strong>GetKerningPairAdjustments</strong> doesn't virtualize and flatten these {{GPOS}} entries into kerning pairs.</p><p>You can realize a performance benefit by calling <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> to determine whether you need to call <strong>GetKerningPairAdjustments</strong>. If you previously called <strong>{{IDWriteFontFace1::HasKerningPairs}}</strong> and it returned {{FALSE}}, you can avoid calling <strong>GetKerningPairAdjustments</strong> because the font has no kerning pair-table entries. That is, in this situation, a call to <strong>GetKerningPairAdjustments</strong> would be a no-op.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of glyphs to retrieve adjustments for.</p> </dd> + + + <dd> <p>An array of glyph id's to retrieve adjustments for.</p> </dd> + + + <dd> <p>The advances, returned in font design units, for each glyph. The last glyph adjustment is zero.</p> </dd> + + + + + <p>Determines whether the font supports pair-kerning.</p> + <p>If the font doesn't support pair table kerning, you don't need to call <strong>{{IDWriteFontFace1::GetKerningPairAdjustments}}</strong> because it would retrieve all zeroes.</p> + <p>Returns {{TRUE}} if the font supports kerning pairs, otherwise {{FALSE}}.</p> + + + + <p> Determines the recommended rendering mode for the font, using the specified size and rendering parameters. </p> + <p>This method should be used to determine the actual rendering mode in cases where the rendering mode of the rendering params object is {{DWRITE_RENDERING_MODE_DEFAULT}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The logical size of the font in {{DIP}} units. A {{DIP}} ("device-independent pixel") equals 1/96 inch.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a horizontal position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>The number of physical pixels per {{DIP}} in a vertical position. For example, if the {{DPI}} of the rendering surface is 96, this value is 1.0f. If the {{DPI}} is 120, this value is 120.0f/96.</p> </dd> + + + <dd> <p>Specifies the world transform.</p> </dd> + + + <dd> <p>Whether the glyphs in the run are sideways or not.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example: </p> <ul> <li>{{DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC}} for <strong>{{DWRITE_MEASURING_MODE_GDI_CLASSIC}}</strong> </li> <li> {{DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL}} for <strong>{{DWRITE_MEASURING_MODE_GDI_NATURAL}}</strong> </li> </ul> </dd> + + + <dd> <p>When this method returns, contains a value that indicates the recommended rendering mode to use.</p> </dd> + + + + + <p>Retrieves the vertical forms of the nominal glyphs retrieved from GetGlyphIndices.</p> + <p> The retrieval uses the font's 'vert' table. This is used in {{CJK}} vertical layout so the correct characters are shown.</p><p>Call <strong>GetGlyphIndices</strong> to get the nominal glyph indices, followed by calling this to remap the to the substituted forms, when the run is sideways, and the font has vertical glyph variants. See <strong>HasVerticalGlyphVariants</strong> for more info. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of glyphs to retrieve.</p> </dd> + + + <dd> <p>Original glyph indices from cmap.</p> </dd> + + + <dd> <p>The vertical form of glyph indices.</p> </dd> + + + + + <p>Determines whether the font has any vertical glyph variants.</p> + <p>For OpenType fonts, <strong>HasVerticalGlyphVariants</strong> returns {{TRUE}} if the font contains a "vert" feature. </p><p> <strong>{{IDWriteFontFace1::GetVerticalGlyphVariants}}</strong> retrieves the vertical forms of the nominal glyphs that are retrieved from <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong>. </p> + <p>Returns {{TRUE}} if the font contains vertical glyph variants, otherwise {{FALSE}}.</p> + + + + <p>Represents a physical font in a font collection.</p> + + + + <p> Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations. </p> + <p>This method does not return a value.</p> + + + <dd> <p> A filled <strong>{{DWRITE_FONT_METRICS1}}</strong> structure that has font metrics for the current font face. The metrics returned by this method are in font design units.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font and is used for font selection and matching.</p> + <p>If the font has no {{PANOSE}} values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to the <strong>{{DWRITE_PANOSE}}</strong> structure to fill in.</p> </dd> + + + + + <p>Retrieves the list of character ranges supported by a font.</p> + <p>The list of character ranges supported by a font, is useful for scenarios like character picking, glyph display, and efficient font selection lookup. GetUnicodeRanges is similar to {{GDI}}'s GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit {{UCS}}-2.</p><p>These ranges are from the cmap, not the {{OS}}/2::ulCodePageRange1.</p><p>If this method is unavailable, you can use the <strong>{{IDWriteFontFace::GetGlyphIndices}}</strong> method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.</p><p> The <strong>{{IDWriteFont::HasCharacter}}</strong> method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The method executed successfully.</p> </td></tr> <tr><td> <dl> <dt>{{E_NOT_SUFFICIENT_BUFFER}}</dt> </dl> </td><td> <p>The buffer is too small. The <em>actualRangeCount</em> was more than the <em>maxRangeCount</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The maximum number of character ranges passed in from the client.</p> </dd> + + + <dd> <p>An array of <strong>{{DWRITE_UNICODE_RANGE}}</strong> structures that are filled with the character ranges.</p> </dd> + + + <dd> <p>A reference to the actual number of character ranges, regardless of the maximum count.</p> </dd> + + + + + <p>Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).</p> + <p>Returns true if the font is monospaced, else it returns false.</p> + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Applies spacing between characters, properly adjusting glyph clusters and diacritics.</p> + <p>The input and output advances/offsets are allowed to alias the same array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The length of the clustermap and original text.</p> </dd> + + + <dd> <p>The number of glyphs.</p> </dd> + + + <dd> <p>Mapping from character ranges to glyph ranges.</p> </dd> + + + <dd> <p>The advance width of each glyph.</p> </dd> + + + <dd> <p>The offset of the origin of each glyph.</p> </dd> + + + <dd> <p>Properties of each glyph, from GetGlyphs.</p> </dd> + + + <dd> <p>The new advance width of each glyph.</p> </dd> + + + <dd> <p>The new offset of the origin of each glyph.</p> </dd> + + + + + <p>Retrieves the given baseline from the font.</p> + <p>If the baseline does not exist in the font, it is not considered an error, but the function will return exists = false. You may then use heuristics to calculate the missing base, or, if the flag simulationAllowed is true, the function will compute a reasonable approximation for you.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_BASELINE}}</strong>-typed value that specifies the baseline of interest.</p> </dd> + + + <dd> <p>Whether the baseline is vertical or horizontal.</p> </dd> + + + <dd> <p>Simulate the baseline if it is missing in the font.</p> </dd> + + + <dd> <p>Script analysis result from AnalyzeScript.</p> <strong>Note</strong>??You can pass an empty script analysis structure, like this <code>{{DWRITE_SCRIPT_ANALYSIS}} scriptAnalysis = {};</code>, and this method will return the default baseline. ? </dd> + + + <dd> <p>The language of the run.</p> </dd> + + + <dd> <p>The baseline coordinate value in design units.</p> </dd> + + + <dd> <p>Whether the returned baseline exists in the font.</p> </dd> + + + + + <p>Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink callback <strong>SetGlyphOrientation</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p> + <p>The translation component of the transform returned is zero.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{DWRITE_GLYPH_ORIENTATION_ANGLE}}</strong>-typed value that specifies the angle that was reported into <strong>{{IDWriteTextAnalysisSink1::SetGlyphOrientation}}</strong>.</p> </dd> + + + <dd> <p>Whether the run's glyphs are sideways or not.</p> </dd> + + + <dd> <p>Returned transform.</p> </dd> + + + + + <p>Retrieves the properties for a given script.</p> + <p>Returns properties for the given script. If the script is invalid, it returns generic properties for the unknown script and {{E_INVALIDARG}}.</p> + + + <dd> <p>The script for a run of text returned from <strong>{{IDWriteTextAnalyzer::AnalyzeScript}}</strong>.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_SCRIPT_PROPERTIES}}</strong> structure that describes info for the script.</p> </dd> + + + + + <p>Determines the complexity of text, and whether you need to call <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> for full script shaping. </p> + <p>Text is not simple if the characters are part of a script that has complex shaping requirements, require bidi analysis, combine with other characters, reside in the supplementary planes, or have glyphs that participate in standard OpenType features. The length returned will not split combining marks from their base characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves justification opportunity information for each of the glyphs given the text and shaping glyph properties.</p> + <p>This function is called per-run, after shaping is done via the <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong> method. </p><strong>Note</strong>??this function only supports natural metrics (<strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face that was used for shaping. This is mainly important for returning correct results of the kashida width. </p> <p>May be {{NULL}}. </p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Characters used to produce the glyphs.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Glyph properties produced from shaping.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that receives info for the allowed justification expansion/compression for each glyph.</p> </dd> + + + + + <p>Justifies an array of glyph advances to fit the line width.</p> + <p>You call <strong>JustifyGlyphAdvances</strong> after you call <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong> to collect all the opportunities, and <strong>JustifyGlyphAdvances</strong> spans across the entire line. The input and output arrays are allowed to alias each other, permitting in-place update.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The line width.</p> </dd> + + + <dd> <p>The glyph count.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DWRITE_JUSTIFICATION_OPPORTUNITY}}</strong> structure that contains info for the allowed justification expansion/compression for each glyph. Get this info from <strong>{{IDWriteTextAnalyzer1::GetJustificationOpportunities}}</strong>. </p> </dd> + + + <dd> <p>An array of glyph advances.</p> </dd> + + + <dd> <p>An array of glyph offsets.</p> </dd> + + + <dd> <p>The returned array of justified glyph advances.</p> </dd> + + + <dd> <p>The returned array of justified glyph offsets.</p> </dd> + + + + + <p>Fills in new glyphs for complex scripts where justification increased the advances of glyphs, such as Arabic with kashida.</p> + <p>You call <strong>GetJustifiedGlyphs</strong> after the line has been justified, and it is per-run. </p><p>You should call <strong>GetJustifiedGlyphs</strong> if <strong>{{IDWriteTextAnalyzer1::GetScriptProperties}}</strong> returns a non-null <strong>{{DWRITE_SCRIPT_PROPERTIES}}.justificationCharacter</strong> for that script.</p><p> Use <strong>GetJustifiedGlyphs</strong> mainly for cursive scripts like Arabic. If <em>maxGlyphCount</em> is not large enough, <strong>GetJustifiedGlyphs</strong> returns the error {{E_NOT_SUFFICIENT_BUFFER}} and fills the variable to which <em>actualGlyphCount</em> points with the needed glyph count.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face used for shaping.</p> <p>May be {{NULL}}.</p> </dd> + + + <dd> <p>Font em size used for the glyph run.</p> </dd> + + + <dd> <p>Script of the text from the itemizer.</p> </dd> + + + <dd> <p>Length of the text.</p> </dd> + + + <dd> <p>Number of glyphs.</p> </dd> + + + <dd> <p>Maximum number of output glyphs allocated by caller.</p> </dd> + + + <dd> <p>Clustermap produced from shaping.</p> </dd> + + + <dd> <p>Original glyphs produced from shaping.</p> </dd> + + + <dd> <p>Original glyph advances produced from shaping.</p> </dd> + + + <dd> <p>Justified glyph advances from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Justified glyph offsets from <strong>{{IDWriteTextAnalyzer1::JustifyGlyphAdvances}}</strong>. </p> </dd> + + + <dd> <p>Properties of each glyph, from <strong>{{IDWriteTextAnalyzer::GetGlyphs}}</strong>. </p> </dd> + + + <dd> <p>The new glyph count written to the modified arrays, or the needed glyph count if the size is not large enough.</p> </dd> + + + <dd> <p>Updated clustermap.</p> </dd> + + + <dd> <p>Updated glyphs with new glyphs inserted where needed.</p> </dd> + + + <dd> <p>Updated glyph advances.</p> </dd> + + + <dd> <p>Updated glyph offsets.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p>Enables or disables pair-kerning on a given text range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The text range to which the change applies.</p> </dd> + + + + + <p>Gets whether or not pair-kerning is enabled at given position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The flag that indicates whether text is pair-kerned.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Sets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>Text range to which this change applies.</p> </dd> + + + + + <p>Gets the spacing between characters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current text position.</p> </dd> + + + <dd> <p>The spacing before each character, in reading order.</p> </dd> + + + <dd> <p>The spacing after each character, in reading order.</p> </dd> + + + <dd> <p>The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.</p> </dd> + + + <dd> <p>The position range of the current format.</p> </dd> + + + + + <p>Encapsulates a 32-bit device independent bitmap and device context, which you can use for rendering glyphs.</p> + + + + <p>Gets the current text antialiasing mode of the bitmap render target.</p> + <p>Returns a <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> + + + + <p>Sets the current text antialiasing mode of the bitmap render target.</p> + <p>The antialiasing mode of a newly-created bitmap render target defaults to <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE}}</strong>. An app can change the antialiasing mode by calling <strong>SetTextAntialiasMode</strong>. For example, an app might specify <strong>{{DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE}}</strong> for grayscale antialiasing when it renders text onto a transparent bitmap.</p> + <p>Returns {{S_OK}} if successful, or {{E_INVALIDARG}} if the argument is not valid.</p> + + + <dd> <p>A <strong>{{DWRITE_TEXT_ANTIALIAS_MODE}}</strong>-typed value that specifies the antialiasing mode.</p> </dd> + + + + + <p>The optical margin alignment mode.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS}}</strong>, then the alignment uses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + + + <dd> <p>Align to the default origin and side-bearings of the glyph.</p> </dd> + + + <dd> <p>Align to the ink of the glyphs, such that the black box abuts the margins.</p> </dd> + + + + + <p>Specifies whether to enable grid-fitting of glyph outlines (also known as hinting).</p> + + + <dd> <p>Choose grid fitting based on the font's table information.</p> </dd> + + + <dd> <p>Always disable grid fitting, using the ideal glyph outlines.</p> </dd> + + + <dd> <p>Enable grid fitting, adjusting glyph outlines for device pixel display.</p> </dd> + + + + + <p>Contains the metrics associated with text after layout. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.</p> </dd> + + + <dd> <p>A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The width of the formatted text, taking into account the trailing whitespace at the end of each line.</p> </dd> + + + <dd> <p>The height of the formatted text. The height of an empty string is set to the same value as that of the default font.</p> </dd> + + + <dd> <p>The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.</p> </dd> + + + <dd> <p>Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.</p> </dd> + + + <dd> <p>The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.</p> </dd> + + + <dd> <p>Total number of lines.</p> </dd> + + + + + <p>Contains the information needed by renderers to draw glyph runs with glyph color information. All coordinates are in device independent pixels ({{DIPs}}).</p> + + + <dd> <p>Glyph run to draw for this layer.</p> </dd> + + + <dd> <p>Pointer to the glyph run description for this layer. This may be <strong>{{NULL}}</strong>. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.</p> </dd> + + + <dd> <p>X coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Y coordinate of the baseline origin for the layer.</p> </dd> + + + <dd> <p>Color value of the run; if all members are zero, the run should be drawn using the current brush.</p> </dd> + + + <dd> <p>Zero-based index into the font?s color palette; if this is <strong>0xFFFF</strong>, the run should be drawn using the current brush.</p> </dd> + + + + + <p>Allows you to access fallback fonts from the font list.</p><p>The <strong>{{IDWriteFontFallback}}</strong> interface defines a fallback sequence to map character ranges to fonts, which is either created via <strong>{{IDWriteFontFallbackBuilder}}</strong> or retrieved from <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> + + + + <p>Determines an appropriate font to use to render the beginning range of text.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The text source implementation holds the text and locale.</p> </dd> + + + <dd> <p>Starting position to analyze.</p> </dd> + + + <dd> <p>Length of the text to analyze.</p> </dd> + + + <dd> <p>Default font collection to use.</p> </dd> + + + <dd> <p>Family name of the base font. If you pass null, no matching will be done against the family.</p> </dd> + + + <dd> <p>The desired weight.</p> </dd> + + + <dd> <p>The desired style.</p> </dd> + + + <dd> <p>The desired stretch.</p> </dd> + + + <dd> <p>Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.</p> </dd> + + + <dd> <p>The font that should be used to render the first <em>mappedLength</em> characters of the text. If it returns {{NULL}}, that means that no font can render the text, and <em>mappedLength</em> is the number of characters to skip (rendered with a missing glyph). +</p> </dd> + + + <dd> <p>Scale factor to multiply the em size of the returned font by.</p> </dd> + + + + + <p> Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines. </p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to render a run of glyphs. </p> + <p>The <strong>{{IDWriteTextLayout::Draw}}</strong> function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics {{API}} such as Direct2D to draw glyphs on the drawing context. An application that uses {{GDI}} can implement this callback in terms of the <strong>{{IDWriteBitmapRenderTarget::DrawGlyphRun}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw an underline. </p> + <p> A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this function to instruct the client to draw a strikethrough. </p> + <p> A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> {{IDWriteTextLayout::}}<strong>Draw</strong> calls this application callback when it needs to draw an inline object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. This interface has all the same methods as <strong>{{IDWriteTextFormat}}</strong> and adds the ability for you to apply an explicit orientation.</p> + + + + <p>Sets the orientation of a text format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The orientation to apply to the text format.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>The preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Sets the wrapping mode of the last line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If set to {{FALSE}}, the last line is not wrapped. If set to {{TRUE}}, the last line is wrapped.</p> <p>The last line is wrapped by default.</p> </dd> + + + + + <p>Gets the wrapping mode of the last line.</p> + <p>Returns {{FALSE}} if the last line is not wrapped; {{TRUE}} if the last line is wrapped.</p> + + + + <p>Sets the optical margin alignment for the text format.</p><p> By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify <strong>{{DWRITE_OPTICAL_ALIGNMENT_USING_SIDE_BEARINGS}}</strong>, then the alignment Suses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The optical alignment to set.</p> </dd> + + + + + <p>Gets the optical margin alignment for the text format.</p> + <p>The optical alignment.</p> + + + + <p> Applies the custom font fallback onto the layout. If none is set, it uses the default system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font fallback to apply to the layout.</p> </dd> + + + + + <p>Gets the current fallback. If none was ever set since creating the layout, it will be nullptr.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the the current font fallback object.</p> </dd> + + + + + <p>Represents a block of text after it has been fully analyzed and formatted.</p> + + + + <p> Retrieves overall metrics for the formatted string. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the measured distances of text and associated content after being formatted.</p> </dd> + + + + + <p>Set the preferred orientation of glyphs when using a vertical reading direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Preferred glyph orientation.</p> </dd> + + + + + <p>Get the preferred orientation of glyphs when using a vertical reading direction.</p> + + + + <p>Set whether or not the last word on the last line is wrapped. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Line wrapping option.</p> </dd> + + + + + <p>Get whether or not the last word on the last line is wrapped.</p> + + + + <p>Set how the glyphs align to the edges the margin. Default behavior is to align glyphs using their default glyphs metrics, which include side bearings. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Optical alignment option.</p> </dd> + + + + + <p>Get how the glyphs align to the edges the margin. </p> + + + + <p>Apply a custom font fallback onto layout. If none is specified, the layout uses the system fallback list. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Custom font fallback created from <strong>{{IDWriteFontFallbackBuilder::CreateFontFallback}}</strong> or <strong>{{IDWriteFactory2::GetSystemFontFallback}}</strong>. </p> </dd> + + + + + <p>Get the current font fallback object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current font fallback object.</p> </dd> + + + + + <p>Analyzes various text properties for complex script processing.</p> + + + + <p>Returns 2x3 transform matrix for the respective angle to draw the glyph run.</p><p>Extends <strong>{{IDWriteTextAnalyzer1::GetGlyphOrientationTransform}}</strong> to pass valid values for the baseline origin rather than zeroes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a complete list of OpenType features available for a script or font. If a feature is partially supported, then this method indicates that it is supported. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to get features from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The maximum number of tags to return.</p> </dd> + + + <dd> <p>The actual number of tags returned.</p> </dd> + + + <dd> <p>An array of OpenType font feature tags.</p> </dd> + + + + + <p>Checks if a typographic feature is available for a glyph or a set of glyphs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The font face to read glyph information from.</p> </dd> + + + <dd> <p>The script analysis for the script or font to check.</p> </dd> + + + <dd> <p>The locale name to check.</p> </dd> + + + <dd> <p>The font feature tag to check.</p> </dd> + + + <dd> <p>The number of glyphs to check.</p> </dd> + + + <dd> <p>An array of glyph indices to check.</p> </dd> + + + <dd> <p>An array of integers that indicate whether or not the font feature applies to each glyph specified.</p> </dd> + + + + + <p>Allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + + + + <p>Appends a single mapping to the list. Call this once for each additional mapping.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Unicode ranges that apply to this mapping.</p> </dd> + + + <dd> <p>Number of Unicode ranges.</p> </dd> + + + <dd> <p>List of target family name strings.</p> </dd> + + + <dd> <p>Number of target family names.</p> </dd> + + + <dd> <p>Optional explicit font collection for this mapping.</p> </dd> + + + <dd> <p>Locale of the context.</p> </dd> + + + <dd> <p>Base family name to match against, if applicable.</p> </dd> + + + <dd> <p>Scale factor to multiply the result target font by.</p> </dd> + + + + + <p>Add all the mappings from an existing font fallback object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An existing font fallback object.</p> </dd> + + + + + <p>Creates the finalized fallback object from the mappings added.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the created fallback list.</p> </dd> + + + + + <p>Represents a physical font in a font collection.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Enables determining if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has color information ({{COLR}} and {{CPAL}} tables); otherwise <strong>{{FALSE}}</strong>.</p> + + + + <p>Represents an absolute reference to a font face. </p><p>This interface contains the font face type, appropriate file references, and face identification data. </p><p>You obtain various font data like metrics, names, and glyph outlines from the <strong>{{IDWriteFontFace2}}</strong> interface.</p><p>This interface adds the ability to check if a color rendering path is potentially necessary.</p> + + + + <p>Allows you to determine if a color rendering path is potentially necessary.</p> + <p>Returns <strong>{{TRUE}}</strong> if a color rendering path is potentially necessary.</p> + + + + <p>Gets the number of color palettes defined by the font. </p> + <p>The return value is zero if the font has no color information. Color fonts are required to define at least one palette, with palette index zero reserved as the default palette.</p> + + + + <p>Get the number of entries in each color palette.</p> + <p>The number of entries in each color palette. All color palettes in a font have the same number of palette entries. The return value is zero if the font has no color information. +</p> + + + + <p>Gets color values from the font's color palette.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{E_INVALIDARG}}</dt> </dl> </td><td> <p>The sum of <em>firstEntryIndex</em> and <em>entryCount</em> is greater than the actual number of palette entries that's returned by the <strong>GetPaletteEntryCount</strong> method. +</p> </td></tr> <tr><td> <dl> <dt>{{DWRITE_E_NOCOLOR}}</dt> </dl> </td><td> <p>The font doesn't have a palette with the specified palette index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the color palette. If the font does not have a palette with the specified index, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong>.</p> </dd> + + + <dd> <p>Zero-based index of the first palette entry to read.</p> </dd> + + + <dd> <p>Number of palette entries to read.</p> </dd> + + + <dd> <p>Array that receives the color values.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>This interface allows the application to enumerate through the color glyph runs. The enumerator enumerates the layers in a back to front order for appropriate layering.</p> + + + + <p>Move to the next glyph run in the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if there is a next glyph run.</p> </dd> + + + + + <p>Returns the current glyph run of the enumerator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the current glyph run.</p> </dd> + + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the grid fitting mode.</p> + <p>Returns a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the grid fitting mode.</p> + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Creates a font fallback object from the system font fallback list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback object.</p> </dd> + + + + + <p>Creates a font fallback builder object.</p><p>A font fall back builder allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains an address of a reference to the newly created font fallback builder object.</p> </dd> + + + + + <p>This method is called on a glyph run to translate it in to multiple color glyph runs.</p> + <p> If the code calls this method with a glyph run that contains no color information, the method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls <strong>DrawGlyphRun</strong> with each of the returned glyph runs and foreground colors. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>The vertical baseline origin of the original glyph run.</p> </dd> + + + <dd> <p>Original glyph run containing monochrome glyph {{IDs}}.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Measuring mode used to compute glyph positions if the run contains color glyphs.</p> </dd> + + + <dd> <p> World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, and identity transform is assumed. </p> </dd> + + + <dd> <p> Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>. </p> </dd> + + + <dd> <p> If the original glyph run contains color glyphs, this parameter receives a reference to an <strong>{{IDWriteColorGlyphRunEnumerator}}</strong> interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns <strong>{{DWRITE_E_NOCOLOR}}</strong> and the output reference is <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The amount of contrast enhancement, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p>The geometry of a device pixel.</p> </dd> + + + <dd> <p>Method of rendering glyphs. In most cases, this should be {{DWRITE_RENDERING_MODE_DEFAULT}} to automatically use an appropriate mode.</p> </dd> + + + <dd> <p>How to grid fit glyph outlines. In most cases, this should be {{DWRITE_GRID_FIT_DEFAULT}} to automatically choose an appropriate mode.</p> </dd> + + + <dd> <p>Holds the newly created rendering parameters object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates a glyph run analysis object, which encapsulates information used to render a glyph run.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure specifying the properties of the glyph run.</p> </dd> + + + <dd> <p>Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the emSize and pixelsPerDip.</p> </dd> + + + <dd> <p>Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default and not outline).</p> </dd> + + + <dd> <p>Specifies the method to measure glyphs.</p> </dd> + + + <dd> <p>How to grid-fit glyph outlines. This must be non-default.</p> </dd> + + + <dd> <p>Specifies the antialias mode.</p> </dd> + + + <dd> <p>Horizontal position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Vertical position of the baseline origin, in {{DIPs}}.</p> </dd> + + + <dd> <p>Receives a reference to the newly created object.</p> </dd> + + + + + <p>Identifies a string in a font.</p> + + + <dd> <p>Unspecified font property identifier.</p> </dd> + + + <dd> <p>Family name for the weight-width-slope model.</p> </dd> + + + <dd> <p>Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with {{GDI}}. This name is typically only present if it differs from the {{GDI}}-compatible family name.</p> </dd> + + + <dd> <p>Face name of the font, for example Regular or Bold.</p> </dd> + + + <dd> <p>The full name of the font, for example "Arial Bold", from name id 4 in the name table.</p> </dd> + + + <dd> <p>{{GDI}}-compatible family name. Because {{GDI}} allows a maximum of four fonts per family, fonts in the same family may have different {{GDI}}-compatible family names, for example "Arial", "Arial Narrow", "Arial Black".</p> </dd> + + + <dd> <p>The postscript name of the font, for example "GillSans-Bold", from name id 6 in the name table.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font was primarily designed to support.</p> </dd> + + + <dd> <p>Script/language tag to identify the scripts or languages that the font declares it is able to support.</p> </dd> + + + <dd> <p>Semantic tag to describe the font, for example Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic.</p> </dd> + + + <dd> <p>Weight of the font represented as a decimal string in the range 1-999.</p> </dd> + + + <dd> <p>Stretch of the font represented as a decimal string in the range 1-9.</p> </dd> + + + <dd> <p>Style of the font represented as a decimal string in the range 0-2.</p> </dd> + + + <dd> <p>Total number of properties.</p> </dd> + + + + + <p>Specifies the location of a resource.</p> + + + <dd> <p>The resource is remote, and information about it is unknown, including the file size and date. If you attempt to create a font or file stream, the creation will fail until locality becomes at least partial. </p> </dd> + + + <dd> <p>The resource is partially local, which means you can query the size and date of the file stream. With this type, you also might be able to create a font face and retrieve the particular glyphs for metrics and drawing, but not all the glyphs will be present.</p> </dd> + + + <dd> <p>The resource is completely local, and all font functions can be called without concern of missing data or errors related to network connectivity.</p> </dd> + + + + + <p> Represents a method of rendering glyphs. </p><strong>Note</strong>?? This topic is about <strong>{{DWRITE_RENDERING_MODE}}</strong> in Windows?8 and later. For info on the previous version see <strong>this topic</strong>.? + + + + <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics</p> + + + + <p>Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the <em>usWidthClass</em> definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.</p> + <p>A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. +The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.</p><p></p><strong>Note</strong>??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font {{API}} functions.? + + + <dd> <p>Predefined font stretch : Not known (0).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-condensed (1).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-condensed (2).</p> </dd> + + + <dd> <p>Predefined font stretch : Condensed (3).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-condensed (4).</p> </dd> + + + <dd> <p>Predefined font stretch : Normal (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Medium (5).</p> </dd> + + + <dd> <p>Predefined font stretch : Semi-expanded (6).</p> </dd> + + + <dd> <p>Predefined font stretch : Expanded (7).</p> </dd> + + + <dd> <p>Predefined font stretch : Extra-expanded (8).</p> </dd> + + + <dd> <p>Predefined font stretch : Ultra-expanded (9).</p> </dd> + + + + + <p>Font property used for filtering font sets and building a font set with explicit properties.</p> + + + <dd> <p>Specifies the requested font property, such as {{DWRITE_FONT_PROPERTY_ID_FAMILY_NAME}}.</p> </dd> + + + <dd> <p>Specifies the value, such as "Segoe {{UI}}".</p> </dd> + + + <dd> <p>Specifies the locale to use, such as "en-{{US}}". Simply leave this empty when used with the font set filtering functions, as they will find a match regardless of language. For passing to AddFontFaceReference, the localeName specifies the language of the property value.</p> </dd> + + + + + <p>Contains information about a formatted line of text.</p> + + + <dd> <p>The number of text positions in the text line. This includes any trailing whitespace and newline characters.</p> </dd> + + + <dd> <p>The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.</p> </dd> + + + <dd> <p>The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.</p> </dd> + + + <dd> <p>The height of the text line.</p> </dd> + + + <dd> <p>The distance from the top of the text line to its baseline.</p> </dd> + + + <dd> <p>The line is trimmed.</p> </dd> + + + <dd> <p>White space before the content of the line. This is included in the line height and baseline distances. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space above the content.</p> </dd> + + + <dd> <p>White space after the content of the line. This is included in the height of the line. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space below the content.</p> </dd> + + + + + <p></p> + + + <dd> <p>Method used to determine line spacing.</p> </dd> + + + <dd> <p>Spacing between lines. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>Line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} between lines</li> <li>proportional line spacing: a scaling factor to be applied to the computed line height; for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Distance from top of line to baseline. The interpretation of this parameter depends upon the line spacing method, as follows: </p> <ul> <li>default line spacing: ignored</li> <li>uniform line spacing: explicit distance in {{DIPs}} from the top of the line to the baseline</li> <li>proportional line spacing: a scaling factor applied to the computed baseline; for each line, the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value.</li> </ul> </dd> + + + <dd> <p>Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining leading is distributed after the line. It is ignored for the default and uniform line spacing methods. The leading that is available to distribute before or after the line depends on the values of the height and baseline parameters.</p> </dd> + + + <dd> <p>Specify whether <strong>{{DWRITE_FONT_METRICS}}</strong>::lineGap value should be part of the line metrics.</p> </dd> + + + + + <p>Represents a color glyph run. The {{IDWriteFactory4::TranslateColorGlyphRun}} method returns an ordered collection of color glyph runs of varying types depending on what the font supports.</p> + + + <dd> <p>Type of glyph image format for this color run. Exactly one type will be set since TranslateColorGlyphRun has already broken down the run into separate parts.</p> </dd> + + + <dd> <p>Measuring mode to use for this glyph run.</p> </dd> + + + + + <p>Data for a single glyph from GetGlyphImageData.</p> + + + <dd> <p>Pointer to the glyph data.</p> </dd> + + + <dd> <p>Size of glyph data in bytes.</p> </dd> + + + <dd> <p>Unique identifier for the glyph data. Clients may use this to cache a parsed/decompressed version and tell whether a repeated call to the same font returns the same data.</p> </dd> + + + <dd> <p>Pixels per em of the returned data. For non-scalable raster data ({{PNG}}/{{TIFF}}/{{JPG}}), this can be larger or smaller than requested from GetGlyphImageData when there isn't an exact match. For scaling intermediate sizes, use: desired pixels per em * font em size / actual pixels per em.</p> </dd> + + + <dd> <p>Size of image when the format is pixel data.</p> </dd> + + + <dd> <p>Left origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Right origin along the horizontal Roman baseline.</p> </dd> + + + <dd> <p>Top origin along the vertical central baseline.</p> </dd> + + + <dd> <p>Bottom origin along vertical central baseline.</p> </dd> + + + + + + + + <p>Represents a reference to a font face. A uniquely identifying reference to a font, from which you can create a font face to query font metrics and use for rendering. A font face reference consists of a font file, font face index, and font face simulation. The file data may or may not be physically present on the local machine yet. </p> + + + + <p>Creates a font face from the reference for use with layout, shaping, or rendering.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + <p>Creates a font face with alternate font simulations, for example, to explicitly simulate a bold font face out of a regular variant.</p> + <p>This function can fail with {{DWRITE_E_REMOTEFONT}} if the font is not local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Newly created font face object, or nullptr in the case of failure.</p> </dd> + + + + + + + + <p>Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero. </p> + <p> the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.</p> + + + + <p>Obtains the algorithmic style simulation flags of a font face.</p> + <p>Returns the algorithmic style simulation flags of a font face.</p> + + + + <p>Obtains the font file representing a font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.</p> + <p>the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal <strong>GetFileSize</strong>.</p> + + + + <p>Get the total size of the font face in bytes. </p> + <p>Returns the total size of the font face in bytes. If the locality is remote, this value is unknown and will be zero.</p> + + + + <p>Get the last modified date.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the last modified date. The time may be zero if the font file loader does not expose file time.</p> </dd> + + + + + <p>Get the locality of this font face reference.</p> + <p>You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with {{DWRITE_E_REMOTEFONT}}. This function may change between calls depending on background downloads and whether cached data expires.</p> + <p>Returns the locality of this font face reference.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p> Downloading a character involves downloading every glyph it depends on directly or indirectly, via font tables (cmap, {{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>Downloading a glyph involves downloading any other glyphs it depends on from the font tables ({{GSUB}}, {{COLR}}, glyf).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds a request to the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong>).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a font in a font collection.</p> + + + + <p>Used with the EnqueuMakeResident function to choose how residency operations proceed when the memory budget is exceeded.</p> + <p></p> + + + <dd> <p>Specifies the default residency policy, which allows residency operations to succeed regardless of the application's current memory budget. EnqueueMakeResident returns {{E_OUTOFMEMORY}} only when there is no memory available.</p> </dd> + + + <dd> <p>Specifies that the EnqueueMakeResident function should return {{E_OUTOFMEMORY}} when the residency operation would exceed the application's current memory budget.</p> </dd> + + + + + <p>Creates a font face object for the font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFace3}}</strong> interface for the newly created font face object.</p> </dd> + + + + + <p>Compares two instances of font references for equality.</p> + <p>Returns whether the two instances of font references are equal. Returns <strong>{{TRUE}}</strong> if the two instances are equal; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{IDWriteFont}}</strong> interface for the other font instance to compare to this font instance.</p> </dd> + + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + + + + <p>Gets the current locality of the font.</p> + <p>For fully local files, the result will always be {{DWRITE_LOCALITY_LOCAL}}. A downloadable file may be any of the states, and this function may change between calls.</p> + <p>Returns the current locality of the font.</p> + + + + <p>Represents an absolute reference to a font face.</p> + + + + <p>Gets a font face reference that identifies this font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Gets the {{PANOSE}} values from the font, used for font selection and matching.</p> + <p>This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to a <strong>{{DWRITE_PANOSE}}</strong> structure that receives the {{PANOSE}} values from the font.</p> </dd> + + + + + <p>Gets the weight of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_WEIGHT}}</strong>-typed value that specifies the density of a typeface, in terms of the lightness or heaviness of the strokes. </p> + + + + <p>Gets the stretch (also known as width) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STRETCH}}</strong>-typed value that specifies the degree to which a font has been stretched compared to a font's normal aspect ratio. </p> + + + + <p>Gets the style (also known as slope) of this font.</p> + <p>Returns a <strong>{{DWRITE_FONT_STYLE}}</strong>-typed value that specifies the style of the font. </p> + + + + <p>Creates a localized strings object that contains the family names for the font family, indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + + + <p>Gets a localized strings collection that contains the specified informational strings, indexed by locale name.</p> + <p>If the font doesn't contain the specified string, the return value is {{S_OK}}, but <em>informationalStrings</em> receives a <strong>{{NULL}}</strong> reference and <em>exists</em> receives the value <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>A <strong>{{DWRITE_INFORMATIONAL_STRING_ID}}</strong>-typed value that identifies the strings to get.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteLocalizedStrings}}</strong> interface for the newly created localized strings object.</p> </dd> + + + <dd> <p>A reference to a variable that receives whether the font contains the specified string {{ID}}. <strong>{{TRUE}}</strong> if the font contains the specified string {{ID}}; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Determines whether the font supports the specified character.</p> + <p>Returns whether the font supports the specified character. Returns <strong>{{TRUE}}</strong> if the font has the specified character; otherwise, <strong>{{FALSE}}</strong>. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Logical font size in {{DIPs}}.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the horizontal direction.</p> </dd> + + + <dd> <p>Number of pixels per logical inch in the vertical direction.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MATRIX}}</strong> structure that describes the world transform.</p> </dd> + + + <dd> <p>Specifies whether the font is sideways. <strong>{{TRUE}}</strong> if the font is sideways; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + <dd> <p>A <strong>{{DWRITE_OUTLINE_THRESHOLD}}</strong>-typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.</p> </dd> + + + <dd> <p>A <strong>{{DWRITE_MEASURING_MODE}}</strong>-typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.</p> </dd> + + + <dd> <p>A reference to a <strong>{{IDWriteRenderingParams}}</strong> interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the recommended rendering mode.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value for the recommended grid-fit mode.</p> </dd> + + + + + <p>Determines whether the character is locally downloaded from the font.</p> + <p>Returns <strong>{{TRUE}}</strong> if the font has the specified character locally available, <strong>{{FALSE}}</strong> if not or if the font does not support that character. </p> + + + <dd> <p>A Unicode ({{UCS}}-4) character value.</p> </dd> + + + + + <p>Determines whether the glyph is locally downloaded from the font.</p> + <p>Returns {{TRUE}} if the font has the specified glyph locally available.</p> + + + <dd> <p>Glyph identifier.</p> </dd> + + + + + <p>Determines whether the specified characters are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of characters.</p> </dd> + + + <dd> <p>The number of elements in the character array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified characters are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified characters are local, {{FALSE}} if any of the specified characters are remote.</p> </dd> + + + + + <p>Determines whether the specified glyphs are local.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Array of glyph indices.</p> </dd> + + + <dd> <p>The number of elements in the glyph index array.</p> </dd> + + + <dd> <p>Specifies whether to enqueue a download request if any of the specified glyphs are not local.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if all of the specified glyphs are local, {{FALSE}} if any of the specified glyphs are remote.</p> </dd> + + + + + <p></p> + + + + <p>Get the number of total fonts in the set.</p> + <p>Returns the number of total fonts in the set.</p> + + + + <p>Gets a reference to the font at the specified index, which may be local or remote.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font.</p> </dd> + + + <dd> <p>Receives a reference the font face reference object, or nullptr on failure.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face object that specifies the physical font.</p> </dd> + + + <dd> <p>Receives the zero-based index of the matching font if the font was found, or {{UINT_MAX}} otherwise.</p> </dd> + + + <dd> <p>Receives {{TRUE}} if the font exists or {{FALSE}} otherwise.</p> </dd> + + + + + <p>Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases). </p> </dd> + + + <dd> <p>Receives a reference to the newly created strings list.</p> </dd> + + + + + <p>Returns how many times a given property value occurs in the set.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font property of interest.</p> </dd> + + + <dd> <p>Receives how many times the property occurs.</p> </dd> + + + + + <p>Returns a subset of fonts filtered by the given properties.</p> + <p>If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>List of properties to filter using.</p> </dd> + + + <dd> <p>The number of properties to filter.</p> </dd> + + + <dd> <p>The subset of fonts that match the properties, or nullptr on failure.</p> </dd> + + + + + <p>Contains methods for building a font set.</p> + + + + <p>Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reference to the font.</p> </dd> + + + <dd> <p>List of properties to associate with the reference.</p> </dd> + + + <dd> <p>The number of properties defined.</p> </dd> + + + + + <p>Appends an existing font set to the one being built, allowing one to aggregate two sets or to essentially extend an existing one.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font set to append font face references from.</p> </dd> + + + + + <p>Creates a font set from all the font face references added so far with AddFontFaceReference.</p> + <p>Creating a font set takes less time if the references were added with metadata rather than needing to extract the metadata from the font file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the newly created font set object, or nullptr in case of failure.</p> </dd> + + + + + <p> An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection {{API}} can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.</p> + + + + <p>Gets the underlying font set used by this collection.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the font set used by the collection.</p> </dd> + + + + + + + + <p>Represents a family of related fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p>Represents a collection of strings indexed by number. An {{IDWriteStringList}} is identical to {{IDWriteLocalizedStrings}} except for the semantics, where localized strings are indexed on language (each language has one string property) whereas {{IDWriteStringList}} may contain multiple strings of the same language, such as a string list of family names from a font set. You can QueryInterface from an {{IDWriteLocalizedStrings}} to an {{IDWriteStringList}}. </p> + + + + <p>Gets the number of strings in the string list.</p> + <p>Returns the number of strings in the string list.</p> + + + + <p>Gets the length in characters (not including the null terminator) of the locale name with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Receives the length in characters, not including the null terminator.</p> </dd> + + + + + <p>Copies the locale name with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the locale name.</p> </dd> + + + <dd> <p>Character array that receives the locale name.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p>Gets the length in characters (not including the null terminator) of the string with the specified index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Receives the length in characters of the string, not including the null terminator.</p> </dd> + + + + + <p>Copies the string with the specified index to the specified array.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the string.</p> </dd> + + + <dd> <p>Character array that receives the string.</p> </dd> + + + <dd> <p>Size of the array in characters. The size must include space for the terminating null character.</p> </dd> + + + + + <p></p> + + + + <p>Registers a client-defined listener object that receives download notifications. All registered listener's DownloadCompleted will be called after <strong>BeginDownload</strong> completes. </p> + <p>An <strong>{{IDWriteFontDownloadListener}}</strong> can also be passed to <strong>BeginDownload</strong> using the context parameter, rather than globally registered to the queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Unregisters a notification handler that was previously registered using <strong>AddListener</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling <strong>BeginDownload</strong> clears the queue.</p> + <p>{{TRUE}} if the queue is empty, {{FALSE}} if there are requests pending for <strong>BeginDownload</strong>.</p> + + + + <p>Begins an asynchronous download operation. The download operation executes in the background until it completes or is cancelled by a <strong>CancelDownload</strong> call.</p> + <p>BeginDownload removes all download requests from the queue, transferring them to a background download operation. If any previous downloads are still ongoing when BeginDownload is called again, the new download does not complete until the previous downloads have finished. If the queue is empty and no active downloads are pending, the <strong>DownloadCompleted</strong> callback is called immediately with {{DWRITE_DOWNLOAD_RESULT_NONE}}.</p> + <p> Returns {{S_OK}} if a download was successfully begun, {{S_FALSE}} if the queue was empty, or a standard {{HRESULT}} error code.</p> + + + + <p> Removes all download requests from the queue and cancels any active download operations.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.</p> + <p>The current generation number of the download queue.</p> + + + + <p>Represents text rendering settings for glyph rasterization and filtering.</p> + + + + <p>Gets the rendering mode.</p> + <p>Returns a <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value for the rendering mode.</p> + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + <p> Creates a glyph-run-analysis object that encapsulates info that DirectWrite uses to render a glyph run. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a rendering parameters object with the specified properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</p> </dd> + + + <dd> <p> The amount of contrast enhancement, zero or greater. </p> </dd> + + + <dd> <p>The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.</p> </dd> + + + <dd> <p>The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</p> </dd> + + + <dd> <p> A <strong>{{DWRITE_PIXEL_GEOMETRY}}</strong>-typed value that specifies the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_RENDERING_MODE1}}</strong>-typed value that specifies the method (for example, ClearType natural quality) for rendering glyphs. In most cases, specify <strong>{{DWRITE_RENDERING_MODE1_DEFAULT}}</strong> to automatically use an appropriate mode. </p> </dd> + + + <dd> <p> A <strong>{{DWRITE_GRID_FIT_MODE}}</strong>-typed value that specifies how to grid-fit glyph outlines. In most cases, specify <strong>{{DWRITE_GRID_FIT_DEFAULT}}</strong> to automatically choose an appropriate mode. </p> </dd> + + + <dd> <p> A reference to a memory block that receives a reference to a <strong>{{IDWriteRenderingParams3}}</strong> interface for the newly created rendering parameters object, or <strong>{{NULL}}</strong> in case of failure. </p> </dd> + + + + + <p>Creates a reference to a font given a full path. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.</p> </dd> + + + <dd> <p>Last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.</p> </dd> + + + <dd> <p>The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.</p> </dd> + + + <dd> <p>Font face simulation flags for algorithmic emboldening and italicization.</p> </dd> + + + <dd> <p>Contains newly created font face reference object, or nullptr in case of failure.</p> </dd> + + + + + <p>Retrieves the list of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Creates an empty font set builder to add font face references and create a custom font set. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Holds the newly created font set builder object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Create a weight/width/slope tree from a set of fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of fonts to use to build the collection.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + + + <p>Retrieves a weight/width/slope tree of system fonts.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates whether to include cloud fonts or only locally installed fonts.</p> </dd> + + + <dd> <p>Holds the newly created font collection object, or {{NULL}} in case of failure.</p> </dd> + + + <dd> <p>If this parameter is {{TRUE}}, the function performs an immediate check for changes to the set of system fonts. If this parameter is {{FALSE}}, the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify {{TRUE}} if it has just installed a font and wants to be sure the font collection contains that font.</p> </dd> + + + + + <p>Gets the font download queue associated with this factory object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the font download queue interface.</p> </dd> + + + + + <p>Represents a list of fonts.</p> + + + + <p>Gets the current location of a font given its zero-based index.</p> + <p>For fully local files, the result will always be <strong>{{DWRITE_LOCALITY_LOCAL}}</strong>. For streamed files, the result depends on how much of the file has been downloaded. <strong>GetFont</strong> fails if the locality is <strong>{{DWRITE_LOCALITY_REMOTE}}</strong> and potentially fails if <strong>{{DWRITE_LOCALITY_PARTIAL}}</strong>. </p> + <p>Returns a <strong>{{DWRITE_LOCALITY}}</strong>-typed value that specifies the location of the specified font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + + + <p>Gets a font given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p><p>This method returns <strong>{{DWRITE_E_REMOTEFONT}}</strong> if it could not construct a remote font.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFont3}}</strong> interface for the newly created font object.</p> </dd> + + + + + <p>Gets a font face reference given its zero-based index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the font in the font list.</p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to a <strong>{{IDWriteFontFaceReference}}</strong> interface for the newly created font face reference object.</p> </dd> + + + + + <p> Application-defined callback interface that receives notifications from the font download queue (<strong>{{IDWriteFontDownloadQueue}}</strong> interface). Callbacks will occur on the downloading thread, and objects must be prepared to handle calls on their methods from other threads at any time.</p> + + + + <p>The DownloadCompleted method is called back on an arbitrary thread when a download operation ends. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the download queue interface on which the BeginDownload method was called.</p> </dd> + + + <dd> <p>Optional context object that was passed to BeginDownload. AddRef is called on the context object by BeginDownload and Release is called after the DownloadCompleted method returns.</p> </dd> + + + <dd> <p>Result of the download operation.</p> </dd> + + + + + <p>Provides interoperability with {{GDI}}, such as methods to convert a font face to a {{LOGFONT}} structure, or to convert a {{GDI}} font description into a font face. It is also used to create bitmap render target objects.</p> + + + + <p>Creates a font object that matches the properties specified by the {{LOGFONT}} structure.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font collection to search. If {{NULL}}, the local system font collection is used.</p> </dd> + + + <dd> <p>Receives a newly created font object if successful, or {{NULL}} in case of error.</p> </dd> + + + + + <p>Reads the font signature from the given font face.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Font face to read font signature from.</p> </dd> + + + <dd> <p>Font signature from the {{OS}}/2 table, ulUnicodeRange and ulCodePageRange.</p> </dd> + + + + + <p>Gets a list of matching fonts based on the specified {{LOGFONT}} values. Only fonts of that family name will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Structure containing a {{GDI}}-compatible font description.</p> </dd> + + + <dd> <p>The font set to search.</p> </dd> + + + <dd> <p>&gt;Receives the filtered font set if successful.</p> </dd> + + + + + <p>Describes the font and paragraph properties used to format text, and it describes locale information. </p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets the line spacing adjustment set for a multiline text paragraph. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A structure describing how the space between lines is managed for the paragraph.</p> </dd> + + + + + <p></p> + + + + <p>Invalidates the layout, forcing layout to remeasure before calling the metrics or drawing functions. This is useful if the locality of a font changes, and layout should be redrawn, or if the size of a client implemented {{IDWriteInlineObject}} changes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Set line spacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Gets line spacing information.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>How to manage space between lines.</p> </dd> + + + + + <p>Retrieves properties of each line.</p> + <p> If maxLineCount is not large enough {{E_NOT_SUFFICIENT_BUFFER}}, which is equivalent to {{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}}), is returned and actualLineCount is set to the number of lines needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array to fill with line information.</p> </dd> + + + <dd> <p>The maximum size of the lineMetrics array.</p> </dd> + + + <dd> <p>The actual size of the lineMetrics array that is needed.</p> </dd> + + + + + <p>Enumerator for an ordered collection of color glyph runs.</p> + + + + <p>Gets the current color glyph run.</p> + <p>Standard {{HRESULT}} error code. An error is returned if there is no current glyph run, i.e., if MoveNext has not yet been called or if the end of the sequence has been reached.</p> + + + <dd> <p>Receives a reference to the color glyph run. The reference remains valid until the next call to MoveNext or until the interface is released.</p> </dd> + + + + + <p>Represents an absolute reference to a font face. It contains font face type, appropriate file references and face identification data. Various font data such as metrics, names and glyph outlines are obtained from {{IDWriteFontFace}}.</p> + + + + <p>Gets the available image formats of a specific glyph and ppem. </p> + <p>Glyphs often have at least TrueType or {{CFF}} outlines, but they may also have {{SVG}} outlines, or they may have only bitmaps with no TrueType/{{CFF}} outlines. Some image formats, notably the {{PNG}}/{{JPEG}} ones, are size specific and will return no match when there isn't an entry in that size range.</p><p>Glyph ids beyond the glyph count return {{DWRITE_GLYPH_IMAGE_FORMATS_NONE}}.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph.</p> </dd> + + + <dd> </dd> + + + <dd> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + + + <p>Gets a reference to the glyph data based on the desired image format.</p> + <p> The glyphDataContext must be released via <strong>ReleaseGlyphImageData</strong> when done if the data is not empty, similar to <strong>{{IDWriteFontFileStream::ReadFileFragment}}</strong> and <strong>{{IDWriteFontFileStream::ReleaseFileFragment}}</strong>. The data reference is valid so long as the <strong>{{IDWriteFontFace}}</strong> exists and <strong>ReleaseGlyphImageData</strong> has not been called. </p><p> The <strong>{{DWRITE_GLYPH_IMAGE_DATA::uniqueDataId}}</strong> is valuable for caching purposes so that if the same resource is returned more than once, an existing resource can be quickly retrieved rather than needing to reparse or decompress the data. </p><p> The function only returns {{SVG}} or raster data - requesting TrueType/{{CFF}}/{{COLR}} data returns {{DWRITE_E_INVALIDARG}}. Those must be drawn via DrawGlyphRun or queried using GetGlyphOutline instead. Exactly one format may be requested or else the function returns {{DWRITE_E_INVALIDARG}}. If the glyph does not have that format, the call is not an error, but the function returns empty data. </p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>The {{ID}} of the glyph to retrieve image data for.</p> </dd> + + + <dd> <p>Requested pixels per em.</p> </dd> + + + <dd> <p>Specifies which formats are supported in the font.</p> </dd> + + + <dd> <p>On return contains data for a glyph.</p> </dd> + + + <dd> </dd> + + + + + <p>Releases the table data obtained from ReadGlyphData.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Opaque context from ReadGlyphData.</p> </dd> + + + + + <p>The root factory interface for all DirectWrite objects.</p> + + + + <p>Translates a glyph run to a sequence of color glyph runs, which can be rendered to produce a color representation of the original "base" run.</p> + <p>Calling <strong>{{IDWriteFactory2::TranslateColorGlyphRun}}</strong> is equivalent to calling <strong>{{IDWriteFactory4::TranslateColorGlyph}}</strong> run with the following formats specified: {{DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE}}|{{DWRITE_GLYPH_IMAGE_FORMATS_CFF}}|{{DWRITE_GLYPH_IMAGE_FORMATS_COLR}}.</p> + <p>Returns {{DWRITE_E_NOCOLOR}} if the font has no color information, the glyph run does not contain any color glyphs, or the specified color palette index is out of range. In this case, the client should render the original glyph run. Otherwise, returns a standard {{HRESULT}} error code.</p> + + + <dd> <p>Horizontal and vertical origin of the base glyph run in pre-transform coordinates.</p> </dd> + + + <dd> <p>Pointer to the original "base" glyph run.</p> </dd> + + + <dd> <p>Optional glyph run description.</p> </dd> + + + <dd> <p>Which data formats the runs should be split into.</p> </dd> + + + <dd> <p>Measuring mode, needed to compute the origins of each glyph.</p> </dd> + + + <dd> <p>Matrix converting from the client's coordinate space to device coordinates (pixels), i.e., the world transform multiplied by any {{DPI}} scaling.</p> </dd> + + + <dd> <p>Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by <strong>{{IDWriteFontFace2::GetColorPaletteCount}}</strong>.</p> </dd> + + + <dd> <p>If the function succeeds, receives a reference to an enumerator object that can be used to obtain the color glyph runs. If the base run has no color glyphs, then the output reference is {{NULL}} and the method returns {{DWRITE_E_NOCOLOR}}.</p> </dd> + + + + + <p>Converts glyph run placements to glyph origins.</p> + <p>The transform and {{DPI}} have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.</p> + <p>If this method succeeds, it returns {{S_OK}}. Otherwise, it returns an {{HRESULT}} error code.</p> + + + <dd> <p>Structure containing the properties of the glyph run.</p> </dd> + + + <dd> <p>The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.</p> </dd> + + + <dd> <p>The position of the baseline origin, in {{DIPs}}, relative to the upper-left corner of the {{DIB}}.</p> </dd> + + + <dd> <p>World transform multiplied by any {{DPI}} scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. If this parameter is {{NULL}}, and identity transform is assumed. </p> </dd> + + + <dd> <p>On return contains the glyph origins for the glyphrun.</p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + <p>Used to indicate the level of support that the adapter provides for optional features of Direct3D 12.</p> + <p></p> + + + <dd> <p> Indicates whether timestamp queries are supported on copy queues. </p> </dd> + + + <dd> <p> Indicates whether casting from one fully typed format to another, compatible, format is supported. </p> </dd> + + + <dd> <p> Indicates the kinds of command lists that support the ability to write an immediate value directly from the command stream into a specified buffer. </p> </dd> + + + <dd> <p> Indicates the level of support the adapter has for view instancing. </p> </dd> + + + <dd> <p> Indicates whether barycentrics are supported. </p> </dd> + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + + + + <p>Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines. </p> + + + + + + + + + + <p>Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.</p> + <p> Create an <strong>{{IDWriteFactory}}</strong> object by using the <strong>{{DWriteCreateFactory}}</strong> function. </p><pre> if ({{SUCCEEDED}}(hr)) +{ hr = {{DWriteCreateFactory}}( {{DWRITE_FACTORY_TYPE_SHARED}}, __uuidof({{IDWriteFactory}}), reinterpret_cast&lt;{{IUnknown}}**&gt;(&amp;pDWriteFactory_) ); +} </pre><p>An <strong>{{IDWriteFactory}}</strong> object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.</p> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + + + + <p> </p><p>This topic describes various ways in which you can use custom fonts in your app.</p><p> </p><ul> <li>{{Introduction?}}</li> <li>{{Summary}}</li> <li>{{Key}}</li> <li>{{Fonts}}</li> <li>{{Font}}</li> <li>{{Common}}<ul> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> <li>{{Creating}}</li> </ul> </li> <li>{{Advanced}}<ul> <li>{{Combining}}</li> <li>{{Using}}</li> <li>{{Using}}</li> <li>{{Supporting}}</li> </ul> </li> </ul> + + + + <p> Indicates the measuring method used for text layout.</p> + + + <dd> <p> Specifies that text is measured using glyph ideal metrics whose values are independent to the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using glyph display-compatible metrics whose values tuned for the current display resolution.</p> </dd> + + + <dd> <p> Specifies that text is measured using the same glyph display metrics as text measured by {{GDI}} using a font created with {{CLEARTYPE_NATURAL_QUALITY}}.</p> </dd> + + + + + <p>Specifies which formats are supported in the font, either at a font-wide level or per glyph.</p> + + + <dd> <p>Indicates no data is available for this glyph.</p> </dd> + + + <dd> <p>The glyph has TrueType outlines.</p> </dd> + + + <dd> <p>The glyph has {{CFF}} outlines.</p> </dd> + + + <dd> <p>The glyph has multilayered {{COLR}} data.</p> </dd> + + + <dd> <p>The glyph has {{SVG}} outlines as standard {{XML}}. Fonts may store the content gzip'd rather than plain text, indicated by the first two bytes as gzip header {0x1F 0x8B}.</p> </dd> + + + <dd> <p>The glyph has {{PNG}} image data, with standard {{PNG}} {{IHDR}}.</p> </dd> + + + <dd> <p>The glyph has {{JPEG}} image data, with standard {{JIFF}} {{SOI}} header.</p> </dd> + + + <dd> <p>The glyph has {{TIFF}} image data.</p> </dd> + + + <dd> <p>The glyph has raw 32-bit premultiplied {{BGRA}} data.</p> </dd> + + + + + <p>Specifies how the alpha value of a bitmap or render target should be treated.</p> + <p>The <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration is used with the <strong>{{D2D1_PIXEL_FORMAT}}</strong> enumeration to specify the alpha mode of a render target or bitmap. Different render targets and bitmaps support different alpha modes. For a list, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>The alpha value might not be meaningful.</p> </dd> + + + <dd> <p>The alpha value has been premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color. </p> </dd> + + + <dd> <p>The alpha value is ignored.</p> </dd> + + + + + <p> Contains the data format and alpha mode for a bitmap or render target. </p> + <p>For more information about the pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> + + + <dd> <p>A value that specifies the size and arrangement of channels in each pixel.</p> </dd> + + + <dd> <p>A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unkown. </p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as an unsigned 32-bit integer value, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate value of the point. </p> </dd> + + + <dd> <p>The y-coordinate value of the point.</p> </dd> + + + + + <p> Represents an x-coordinate and y-coordinate pair, expressed as floating-point values, in two-dimensional space.</p> + + + <dd> <p>The x-coordinate of the point. +</p> </dd> + + + <dd> <p>The y-coordinate of the point. +</p> </dd> + + + + + <p>A 2D vector that consists of two single-precision floating-point values (x, y). </p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A 4D vector that consists of four single-precision floating-point values (x, y, z, w).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + <dd> <p>The w value of the vector.</p> </dd> + + + + + <p>Represents a rectangle defined by the coordinates of the upper-left corner (left, top) and the coordinates of the lower-right corner (right, bottom). </p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p> Represents a rectangle defined by the upper-left corner pair of coordinates (left,top) and the lower-right corner pair of coordinates (right, bottom). These coordinates are expressed as a 32-bit integer values.</p> + + + <dd> <p>The x-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>The y-coordinate of the upper-left corner of the rectangle. </p> </dd> + + + <dd> <p>The x-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + <dd> <p>The y-coordinate of the lower-right corner of the rectangle. </p> </dd> + + + + + <p>Stores an ordered pair of floating-point values, typically the width and height of a rectangle. </p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Stores an ordered pair of integers, typically the width and height of a rectangle.</p> + + + <dd> <p>The horizontal component of this size.</p> </dd> + + + <dd> <p>The vertical component of this size.</p> </dd> + + + + + <p> Represents a 3-by-2 matrix.</p> + + + <dd> <p> The value in the first row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the first row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the second row and second column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and first column of the matrix.</p> </dd> + + + <dd> <p>The value in the third row and second column of the matrix.</p> </dd> + + + + + <p>Describes a 4-by-3 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X3_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X3_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X3_F}} {{D2D1_MATRIX_4X3_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, and third columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-3 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 4-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_4X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_4X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_4X4_F}} {{D2D1_MATRIX_4X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 4-by-4 floating point array that describes the matrix.</p> </dd> + + + + + <p>Describes a 5-by-4 floating point matrix.</p> + <p>The <strong>{{D2D1_MATRIX_5X4_F}}</strong> structure is type defined from a <strong>{{D2D_MATRIX_5X4_F}}</strong> structure in {{D2d1_1}}.h.</p><code> typedef {{D2D_MATRIX_5X4_F}} {{D2D1_MATRIX_5X4_F}}; +</code> + + + <dd> <p> The values in the first row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the second row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The values in the third row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fourth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>The value in the fifth row and first, second, third, and fourth columns of the matrix.</p> </dd> + + + <dd> <p>A 5-by-4 floating point array that describes the matrix.</p> </dd> + + + + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether an opacity mask contains graphics or text. Direct2D uses this information to determine which gamma space to use when blending the opacity mask.</p> + + + <dd> <p>The opacity mask contains graphics. The opacity mask is blended in the gamma 2.2 color space.</p> </dd> + + + <dd> <p>The opacity mask contains non-{{GDI}} text. The gamma space used for blending is obtained from the render target's text rendering parameters. (<strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong>).</p> </dd> + + + <dd> <p>The opacity mask contains text rendered using the {{GDI}}-compatible rendering mode. The opacity mask is blended using the gamma for {{GDI}} rendering.</p> </dd> + + + + + <p>Specifies how a brush paints areas outside of its normal content area.</p> + <p>For an <strong>{{ID2D1BitmapBrush}}</strong>, the brush's content is the brush's bitmap. For an <strong>{{ID2D1LinearGradientBrush}}</strong>, the brush's content area is the gradient axis. For an <strong>{{ID2D1RadialGradientBrush}}</strong>, the brush's content is the area within the gradient ellipse. </p> + + + <dd> <p>Repeat the edge pixels of the brush's content for all regions outside the normal content area.</p> </dd> + + + <dd> <p>Repeat the brush's content.</p> </dd> + + + <dd> <p> The same as {{D2D1_EXTEND_MODE_WRAP}}, except that alternate tiles of the brush's content are flipped. (The brush's normal content is drawn untransformed.)</p> </dd> + + + + + <p>Specifies how the edges of nontext primitives are rendered.</p> + + + <dd> <p>Edges are antialiased using the Direct2D per-primitive method of high-quality antialiasing.</p> </dd> + + + <dd> <p>Objects are aliased in most cases. Objects are antialiased only when they are drawn to a render target created by the <strong>CreateDxgiSurfaceRenderTarget</strong> method and Direct3D multisampling has been enabled on the backing DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> </dd> + + + + + <p>Describes the antialiasing mode used for drawing text. </p> + <p>This enumeration is used with the <strong>SetTextAntialiasMode</strong> of an <strong>{{ID2D1RenderTarget}}</strong> to specify how text and glyphs are antialiased.</p><p> By default, Direct2D renders text in ClearType mode. Factors that can downgrade the default quality to grayscale or aliased:</p><ul> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_ALIASED}} </strong>, then the default text antialiasing mode is aliased. To change the DirectWrite rendering mode of an <strong>{{ID2D1RenderTarget}}</strong>, use the <strong>{{ID2D1RenderTarget::SetTextRenderingParams}}</strong> method. </li> <li>If the <strong>{{DWRITE_RENDERING_MODE}}</strong> value is <strong>{{DWRITE_RENDERING_MODE_OUTLINE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If the render target has an alpha channel and is not set to <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, then the default text antialiasing mode is grayscale.</li> <li>If <strong>{{ID2D1RenderTarget::PushLayer}}</strong> is called without <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> (and the corresponding <strong>PopLayer</strong> has not been called yet), then the default text antialiasing mode is grayscale.</li> </ul> + + + <dd> <p>Use the system default. See Remarks.</p> </dd> + + + <dd> <p>Use ClearType antialiasing.</p> </dd> + + + <dd> <p>Use grayscale antialiasing.</p> </dd> + + + <dd> <p>Do not use antialiasing.</p> </dd> + + + + + <p>Specifies the algorithm that is used when images are scaled or rotated.</p><strong>Note</strong>??Starting in Windows?8, more interpolations modes are available. See <strong>{{D2D1_INTERPOLATION_MODE}}</strong> for more info.? + <p> To stretch an image, each pixel in the original image must be mapped to a group of pixels in the larger image. To shrink an image, groups of pixels in the original image must be mapped to single pixels in the smaller image. The effectiveness of the algorithms that perform these mappings determines the quality of a scaled image. Algorithms that produce higher-quality scaled images tend to require more processing time. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} </strong>provides faster but lower-quality interpolation, while <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> provides higher-quality interpolation. </p> + + + + <p>Specifies whether text snapping is suppressed or clipping to the layout rectangle is enabled. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>Text is not vertically snapped to pixel boundaries. This setting is recommended for text that is being animated. </p> </dd> + + + <dd> <p>Text is clipped to the layout rectangle.</p> </dd> + + + <dd> <p>Text is vertically snapped to pixel boundaries and is not clipped to the layout rectangle. </p> </dd> + + + <dd> <p>In Windows?8.1 and later, text is rendered using color versions of glyphs, if defined by the font.</p> </dd> + + + <dd> <p>Bitmap origins of color glyph bitmaps are not snapped.</p> </dd> + + + + + <p>Specifies whether an arc should be greater than 180 degrees.</p> + + + <dd> <p> An arc's sweep should be 180 degrees or less.</p> </dd> + + + <dd> <p> An arc's sweep should be 180 degrees or greater.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes the sequence of dashes and gaps in a stroke. </p> + <p>The following illustration shows several available dash styles. </p> + + + <dd> <p>A solid line with no breaks.</p> </dd> + + + <dd> <p>A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH}}</strong> is {2, 2}.</p> </dd> + + + <dd> <p>A dot followed by a longer gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DOT}}</strong> is {0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT}}</strong> is {2, 2, 0, 2}.</p> </dd> + + + <dd> <p>A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap.</p> <p>The equivalent dash array for <strong>{{D2D1_DASH_STYLE_DASH_DOT_DOT}}</strong> is {2, 2, 0, 2, 0, 2}.</p> </dd> + + + <dd> <p>The dash pattern is specified by an array of floating-point values.</p> </dd> + + + + + <p>Describes the shape that joins two lines or segments. </p> + <p> A miter limit affects how sharp miter joins are allowed to be. If the line join style is <strong>{{D2D1_LINE_JOIN_MITER_OR_BEVEL}}</strong>, then the join will be mitered with regular angular vertices if it doesn't extend beyond the miter limit; otherwise, the line join will be beveled.</p><p>The following illustration shows different line join settings for the same stroked path geometry. </p><p></p> + + + <dd> <p>Regular angular vertices. </p> </dd> + + + <dd> <p>Beveled vertices. </p> </dd> + + + <dd> <p>Rounded vertices. </p> </dd> + + + <dd> <p>Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices. </p> </dd> + + + + + <p>Specifies the different methods by which two geometries can be combined.</p> + <p>The following illustration shows the different geometry combine modes. +</p> + + + <dd> <p>The two regions are combined by taking the union of both. Given two geometries, <em>A</em> and <em>B</em>, the resulting geometry is geometry <em>A</em> + geometry <em>B</em>.</p> </dd> + + + <dd> <p>The two regions are combined by taking their intersection. The new area consists of the overlapping region between the two geometries. </p> </dd> + + + <dd> <p>The two regions are combined by taking the area that exists in the first region but not the second and the area that exists in the second region but not the first. Given two geometries, <em>A</em> and <em>B</em>, the new region consists of (<em>A</em>-<em>B</em>) + (<em>B</em>-<em>A</em>). </p> </dd> + + + <dd> <p>The second region is excluded from the first. Given two geometries, <em>A</em> and <em>B</em>, the area of geometry <em>B</em> is removed from the area of geometry <em>A</em>, producing a region that is <em>A</em>-<em>B</em>.</p> </dd> + + + + + <p>Describes how one geometry object is spatially related to another geometry object. </p> + + + <dd> <p>The relationship between the two geometries cannot be determined. This value is never returned by any {{D2D}} method. </p> </dd> + + + <dd> <p>The two geometries do not intersect at all.</p> </dd> + + + <dd> <p>The instance geometry is entirely contained by the passed-in geometry.</p> </dd> + + + <dd> <p>The instance geometry entirely contains the passed-in geometry.</p> </dd> + + + <dd> <p>The two geometries overlap but neither completely contains the other. </p> </dd> + + + + + <p>Specifies how a geometry is simplified to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is filled or hollow. </p> + + + + <p>Indicates whether a specific <strong>{{ID2D1SimplifiedGeometrySink}}</strong> figure is open or closed. </p> + + + + <p>Indicates whether a segment should be stroked and whether the join between this segment and the previous one should be smooth. This enumeration allows a bitwise combination of its member values. </p> + + + <dd> <p>The segment is joined as specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface, and it is stroked. </p> </dd> + + + <dd> <p>The segment is not stroked.</p> </dd> + + + <dd> <p>The segment is always joined with the one preceding it using a round line join, regardless of which <strong>{{D2D1_LINE_JOIN}}</strong>enumeration is specified by the <strong>{{ID2D1StrokeStyle}}</strong> interface. If this segment is the first segment and the figure is closed, a round line join is used to connect the closing segment with the first segment. If the figure is not closed, this setting has no effect on the first segment of the figure. If <strong>{{ID2D1SimplifiedGeometrySink::SetSegmentFlags}}</strong> is called just before <strong>{{ID2D1SimplifiedGeometrySink::EndFigure}}</strong>, the join between the closing segment and the last explicitly specified segment is affected.</p> </dd> + + + + + <p>Defines the direction that an elliptical arc is drawn. </p> + + + <dd> <p> Arcs are drawn in a counterclockwise (negative-angle) direction. </p> </dd> + + + <dd> <p> Arcs are drawn in a clockwise (positive-angle) direction. </p> </dd> + + + + + <p>Specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry. </p> + <p>Use the <strong>{{D2D1_FILL_MODE}}</strong> enumeration when creating an <strong>{{ID2D1GeometryGroup}}</strong> with the <strong>CreateGeometryGroup</strong> method, or when modifying the fill mode of an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> with the <strong>{{ID2D1SimplifiedGeometrySink::SetFillMode}}</strong> method.</p><p>Direct2D fills the interior of a path by using one of the two fill modes specified by this enumeration: <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) or <strong>{{D2D1_FILL_MODE_WINDING}}</strong> (winding). Because the modes determine how to fill the interior of a closed shape, all shapes are treated as closed when they are filled. If there is a gap in a segment in a shape, draw an imaginary line to close it. </p><p> To see the difference between the winding and alternate fill modes, assume that you have four circles with the same center and a different radius, as shown in the following illustration. The first one has the radius of 25, the second 50, the third 75, and the fourth 100.</p><p>The following illustration shows the shape filled by using the alternate fill mode. Notice that the center and third ring are not filled. This is because a ray drawn from any point in either of those two rings passes through an even number of segments. </p><p>The following illustration explains this process. </p><p>The following illustration shows how the same shape is filled when the winding fill mode is specified. </p><p>Notice that all the rings are filled. This is because all the segments run in the same direction, so a ray drawn from any point will cross one or more segments, and the sum of the crossings will not equal zero. </p><p>The following illustration explains this process. The red arrows represent the direction in which the segments are drawn and the black arrow represents an arbitrary ray that runs from a point in the innermost ring. Starting with a value of zero, for each segment that the ray crosses, a value of one is added for every clockwise intersection. All points lie in the fill region in this illustration, because the count does not equal zero. </p> + + + <dd> <p>Determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region. </p> </dd> + + + <dd> <p>Determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path. </p> </dd> + + + + + <p>Specifies options that can be applied when a layer resource is applied to create a layer. </p><strong>Note</strong>??Starting in Windows?8, the <strong>{{D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE}}</strong> option is no longer supported. See <strong>{{D2D1_LAYER_OPTIONS1}}</strong> for Windows?8 layer options.? + <p>ClearType antialiasing must use the current contents of the render target to blend properly. When a pushed layer requests initializing for ClearType, Direct2D copies the current contents of the render target into the layer so that ClearType antialiasing can be performed. Rendering ClearType text into a transparent layer does not produce the desired results.</p><p>A small performance hit from re-copying content occurs when <strong>{{ID2D1RenderTarget::Clear}}</strong> is called.</p> + + + + <p>Describes whether a window is occluded. </p> + <p>If the window was occluded the last time <strong>EndDraw</strong> was called, the next time the render target calls <strong>CheckWindowState</strong>, it returns <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to check the current window state, call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This will ensure that your next call to <strong>CheckWindowState</strong> state returns the actual window state.</p> + + + <dd> <p>The window is not occluded.</p> </dd> + + + <dd> <p>The window is occluded.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes the minimum DirectX support required for hardware rendering by a render target.</p> + + + <dd> <p>Direct2D determines whether the video card provides adequate hardware rendering support.</p> </dd> + + + <dd> <p>The video card must support DirectX 9.</p> </dd> + + + <dd> <p>The video card must support DirectX 10. </p> </dd> + + + + + <p> Describes how a render target is remoted and whether it should be {{GDI}}-compatible. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target attempts to use Direct3D command-stream remoting and uses bitmap remoting if stream remoting fails. The render target is not {{GDI}}-compatible.</p> </dd> + + + <dd> <p>The render target renders content locally and sends it to the terminal services client as a bitmap. </p> </dd> + + + <dd> <p>The render target can be used efficiently with {{GDI}}.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Specifies additional features supportable by a compatible render target when it is created. This enumeration allows a bitwise combination of its member values.</p> + <p>Use this enumeration when creating a compatible render target with the <strong>CreateCompatibleRenderTarget</strong> method. For more information about compatible render targets, see the Render Targets Overview. </p><p>The <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> option may only be requested if the parent render target was created with <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> (for most render targets) or <strong>{{D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE}}</strong> (for render targets created by the <strong>CreateCompatibleRenderTarget</strong> method).</p> + + + <dd> <p>The render target supports no additional features.</p> </dd> + + + <dd> <p>The render target supports interoperability with the Windows Graphics Device Interface ({{GDI}}). </p> </dd> + + + + + <p> Specifies how a device context is initialized for {{GDI}} rendering when it is retrieved from the render target.</p> + <p>Use this enumeration with the <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> method to specify how the device context is initialized for {{GDI}} rendering.</p> + + + <dd> <p>The current contents of the render target are copied to the device context when it is initialized. </p> </dd> + + + <dd> <p>The device context is cleared to transparent black when it is initialized.</p> </dd> + + + + + <p>Indicates the type of information provided by the Direct2D Debug Layer. </p> + <p>To receive debugging messages, you must install the Direct2D Debug Layer.</p> + + + + <p>Specifies whether Direct2D provides synchronization for an <strong>{{ID2D1Factory}}</strong> and the resources it creates, so that they may be safely accessed from multiple threads. </p> + <p>When you create a factory, you can specify whether it is multithreaded or singlethreaded. A singlethreaded factory provides no serialization against any other single threaded instance within Direct2D, so this mechanism provides a very large degree of scaling on the {{CPU}}.</p><p>You can also create a multithreaded factory instance. In this case, the factory and all derived objects can be used from any thread, and each render target can be rendered to independently. Direct2D serializes calls to these objects, so a single multithreaded Direct2D instance won't scale as well on the {{CPU}} as many single threaded instances. However, the resources can be shared within the multithreaded instance.</p><p>Note the qualifier "On the {{CPU}}": {{GPUs}} generally take advantage of fine-grained parallelism more so than {{CPUs}}. For example, multithreaded calls from the {{CPU}} might still end up being serialized when being sent to the {{GPU}}; however, a whole bank of pixel and vertex shaders will run in parallel to perform the rendering.</p> + + + + <p>Describes the pixel format and dpi of a bitmap.</p> + + + <dd> <p>The bitmap's pixel format and alpha mode.</p> </dd> + + + <dd> <p>The horizontal dpi of the bitmap.</p> </dd> + + + <dd> <p>The vertical dpi of the bitmap.</p> </dd> + + + + + <p> Contains the position and color of a gradient stop. </p> + <p>Gradient stops can be specified in any order if they are at different positions. Two stops may share a position. In this case, the first stop specified is treated as the "low" stop (nearer 0.0f) and subsequent stops are treated as "higher" (nearer 1.0f). This behavior is useful if a caller wants an instant transition in the middle of a stop.</p><p>Typically, there are at least two points in a collection, although creation with only one stop is permitted. For example, one point is at position 0.0f, another point is at position 1.0f, and additional points are distributed in the [0, 1] range. Where the gradient progression is beyond the range of [0, 1], the stops are stored, but may affect the gradient. </p><p>When drawn, the [0, 1] range of positions is mapped to the brush, in a brush-dependent way. For details, see <strong>{{ID2D1LinearGradientBrush}}</strong> and <strong>{{ID2D1RadialGradientBrush}}</strong>. </p><p>Gradient stops with a position outside the [0, 1] range cannot be seen explicitly, but they can still affect the colors produced in the [0, 1] range. For example, a two-stop gradient {{0.0f, Black}, {2.0f, White}} is indistinguishable visually from {{0.0f, Black}, {1.0f, Mid-level gray}}. Also, the colors are clamped before interpolation.</p> + + + <dd> <p>A value that indicates the relative position of the gradient stop in the brush. This value must be in the [0.0f, 1.0f] range if the gradient stop is to be seen explicitly. </p> </dd> + + + <dd> <p>The color of the gradient stop.</p> </dd> + + + + + <p> Describes the opacity and transformation of a brush.</p> + <p>This structure is used when creating a brush. For convenience, Direct2D provides the <strong>{{D2D1::BrushProperties}}</strong> function for creating <strong>{{D2D1_BRUSH_PROPERTIES}}</strong> structures.</p><p>After creating a brush, you can change its opacity or transform by calling the <strong>SetOpacity</strong> or <strong>SetTransform</strong> methods.</p> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the degree of opacity of the brush.</p> </dd> + + + <dd> <p>The transformation that is applied to the brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p> Contains the starting point and endpoint of the gradient axis for an <strong>{{ID2D1LinearGradientBrush}}</strong>. </p> + <p>Use this method when creating new <strong>{{ID2D1LinearGradientBrush}}</strong> objects with the <strong>CreateLinearGradientBrush</strong> method. For convenience, Direct2D provides the <strong>{{D2D1::LinearGradientBrushProperties}}</strong> helper function for creating new <strong>{{D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES}}</strong> structures.</p><p>The following illustration shows how a linear gradient changes as you change its start and end points. For the first gradient, the start point is set to (0,0) and the end point to (150, 50); this creates a diagonal gradient that starts at the upper-left corner and extends to the lower-right corner of the area being painted. When you set the start point to (0, 25) and the end point to (150, 25), a horizontal gradient is created. Similarly, setting the start point to (75, 0) and the end point to (75, 50) creates a vertical gradient. Setting the start point to (0, 50) and the end point to (150, 0) creates a diagonal gradient that starts at the lower-left corner and extends to the upper-right corner of the area being painted.</p><p></p> + + + + <p> Contains the gradient origin offset and the size and position of the gradient ellipse for an <strong>{{ID2D1RadialGradientBrush}}</strong>. </p> + <p>Different values for <em>center</em>, <em>gradientOriginOffset</em>, <em>radiusX</em> and/or <em>radiusY</em> produce different gradients. The following illustration shows several radial gradients that have different gradient origin offsets, creating the appearance of the light illuminating the circles from different angles.</p><p></p><p>For convenience, Direct2D provides the <strong>{{D2D1::RadialGradientBrushProperties}}</strong> function for creating new <strong>{{D2D1_RADIAL_GRADIENT_BRUSH}}</strong> structures.</p> + + + + <p>Represents a cubic bezier segment drawn between two points.</p> + <p> A cubic Bezier curve is defined by four points: a start point, an end point (<em>point3</em>), and two control points (<em>point1</em> and <em>point2</em>). A Bezier segment does not contain a property for the starting point of the curve; it defines only the end point. The beginning point of the curve is the current point of the path to which the Bezier curve is added.</p><p> The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line toward themselves and producing a curve. The first control point, <em>point1</em>, affects the beginning portion of the curve; the second control point, <em>point2</em>, affects the ending portion of the curve. </p><strong>Note</strong>??The curve doesn't necessarily pass through either of the control points; each control point moves its portion of the line toward itself, but not through itself.? + + + <dd> <p>The first control point for the Bezier segment.</p> </dd> + + + <dd> <p>The second control point for the Bezier segment.</p> </dd> + + + <dd> <p>The end point for the Bezier segment.</p> </dd> + + + + + <p>Contains the three vertices that describe a triangle.</p> + + + <dd> <p>The first vertex of a triangle.</p> </dd> + + + <dd> <p>The second vertex of a triangle.</p> </dd> + + + <dd> <p>The third vertex of a triangle.</p> </dd> + + + + + <p>Describes an elliptical arc between two points.</p> + + + <dd> <p>The end point of the arc.</p> </dd> + + + <dd> <p>The x-radius and y-radius of the arc.</p> </dd> + + + <dd> <p>A value that specifies how many degrees in the clockwise direction the ellipse is rotated relative to the current coordinate system.</p> </dd> + + + <dd> <p>A value that specifies whether the arc sweep is clockwise or counterclockwise.</p> </dd> + + + <dd> <p>A value that specifies whether the given arc is larger than 180 degrees.</p> </dd> + + + + + <p> Contains the control point and end point for a quadratic Bezier segment.</p> + + + <dd> <p>The control point of the quadratic Bezier segment.</p> </dd> + + + <dd> <p>The end point of the quadratic Bezier segment.</p> </dd> + + + + + <p> Contains the center point, x-radius, and y-radius of an ellipse.</p> + + + <dd> <p>The center point of the ellipse.</p> </dd> + + + <dd> <p>The X-radius of the ellipse.</p> </dd> + + + <dd> <p>The Y-radius of the ellipse.</p> </dd> + + + + + <p> Contains the dimensions and corner radii of a rounded rectangle.</p> + <p>Each corner of the rectangle specified by the <em>rect</em> is replaced with a quarter ellipse, with a radius in each direction specified by <em>radiusX</em> and <em>radiusY</em>.</p><p> If the <em>radiusX</em> is greater than or equal to half the width of the rectangle, and the <em>radiusY</em> is greater than or equal to one-half the height, the rounded rectangle is an ellipse with the same width and height of the <em>rect</em>. </p><p>Even when both <em>radiuX</em> and <em>radiusY</em> are zero, the rounded rectangle is different from a rectangle., When stroked, the corners of the rounded rectangle are roundly joined, not mitered (square). </p> + + + <dd> <p>The coordinates of the rectangle.</p> </dd> + + + <dd> <p>The x-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + <dd> <p>The y-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.</p> </dd> + + + + + <p> Describes the stroke that outlines a shape. </p> + <p>The following illustration shows different <em>dashOffset</em> values for the same custom dash style.</p><p></p> + + + <dd> <p>The cap applied to the start of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The cap applied to the end of all the open figures in a stroked geometry.</p> </dd> + + + <dd> <p>The shape at either end of each dash segment.</p> </dd> + + + <dd> <p>A value that describes how segments are joined. This value is ignored for a vertex if the segment flags specify that the segment should have a smooth join. </p> </dd> + + + <dd> <p>The limit of the thickness of the join on a mitered corner. This value is always treated as though it is greater than or equal to 1.0f. </p> </dd> + + + <dd> <p>A value that specifies whether the stroke has a dash pattern and, if so, the dash style. </p> </dd> + + + <dd> <p>A value that specifies an offset in the dash sequence. A positive dash offset value shifts the dash pattern, in units of stroke width, toward the start of the stroked geometry. A negative dash offset value shifts the dash pattern, in units of stroke width, toward the end of the stroked geometry.</p> </dd> + + + + + <p> Contains the content bounds, mask information, opacity settings, and other options for a layer resource. </p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p> A value that specifies whether the layer intends to render text with ClearType antialiasing.</p> </dd> + + + + + <p> Contains rendering options (hardware or software), pixel format, {{DPI}} information, remoting options, and Direct3D support requirements for a render target. </p> + <p>Use this structure when creating a render target, or use it with the <strong>{{ID2D1RenderTarget::IsSupported}}</strong> method to check the properties supported by an existing render target.</p><p>As a convenience, Direct2D provides the <strong>{{D2D1::RenderTargetProperties}}</strong> helper function for creating <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structures. An easy way to create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that works for most render targets is to call the function without specifying any parameters. Doing so creates a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}}</strong> structure that has its fields set to default values. For more information, see <strong>{{D2D1::RenderTargetProperties}}</strong>.</p><p>Not all render targets support hardware rendering. For a list, see the Render Targets Overview.</p> + + + <dd> <p>A value that specifies whether the render target should force hardware or software rendering. A value of <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong> specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that {{WIC}} bitmap render targets do not support hardware rendering.</p> </dd> + + + <dd> <p>The pixel format and alpha mode of the render target. You can use the <strong>{{D2D1::PixelFormat}}</strong> function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>The horizontal {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>The vertical {{DPI}} of the render target. To use the default {{DPI}}, set <em>dpiX</em> and <em>dpiY</em> to 0. For more information, see the Remarks section. </p> </dd> + + + <dd> <p>A value that specifies how the render target is remoted and whether it should be {{GDI}}-compatible. Set to <strong>{{D2D1_RENDER_TARGET_USAGE_NONE}}</strong> to create a render target that is not compatible with {{GDI}} and uses Direct3D command-stream remoting if it is available. </p> </dd> + + + <dd> <p>A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the <strong>type </strong> member is set to <strong>{{D2D1_RENDER_TARGET_TYPE_DEFAULT}}</strong>; if <strong>type </strong> is set to to <strong>{{D2D1_RENDER_TARGET_TYPE_HARDWARE}}</strong>, render target creation fails. A value of <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating <strong>{{ID2D1HwndRenderTarget}}</strong> and <strong>{{ID2D1DCRenderTarget}}</strong> objects.</p> </dd> + + + + + <p> Contains the {{HWND}}, pixel size, and presentation options for an <strong>{{ID2D1HwndRenderTarget}}</strong>.</p> + <p>Use this structure when you call the <strong>CreateHwndRenderTarget</strong> method to create a new <strong>{{ID2D1HwndRenderTarget}}</strong>.</p><p>For convenience, Direct2D provides the <strong>{{D2D1::HwndRenderTargetProperties}}</strong> function for creating new <strong>{{D2D1_HWND_RENDER_TARGET_PROPERTIES}}</strong> structures.</p> + + + + <p>Describes the drawing state of a render target. </p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Contains the debugging level of an <strong>{{ID2D1Factory}}</strong> object. </p> + <p>To enable debugging, you must install the Direct2D Debug Layer.</p> + + + + <p> Describes a geometric path that does not contain quadratic bezier curves or arcs. </p> + <p>A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the <strong>BeginFigure</strong> method and specify the figure's start point, then use <strong>AddLines</strong> and <strong>AddBeziers</strong> to add line and Bezier segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p><p>To create geometry paths that can contain arcs and quadratic Bezier curves, use an <strong>{{ID2D1GeometrySink}}</strong>.</p> + + + + <p>Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. </p> + <p>The fill mode defaults to {{D2D1_FILL_MODE_ALTERNATE}}. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Not doing will put the geometry sink in an error state. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The method used to determine whether a given point is part of the geometry.</p> </dd> + + + + + <p>Specifies stroke and join options to be applied to new segments added to the geometry sink. </p> + <p>After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Stroke and join options to be applied to new segments added to the geometry sink.</p> </dd> + + + + + <p>Starts a new figure at the specified point. </p> + <p>If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point at which to begin the new figure.</p> </dd> + + + <dd> <p>Whether the new figure should be hollow or filled.</p> </dd> + + + + + <p> Creates a sequence of lines using the specified points and adds them to the geometry sink.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. </p> </dd> + + + <dd> <p>The number of points in the <em>points</em> array.</p> </dd> + + + + + <p>Creates a sequence of cubic Bezier curves and adds them to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by <strong>BeginFigure</strong>) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.</p> </dd> + + + <dd> <p>The number of Bezier segments in the <em>beziers</em> array.</p> </dd> + + + + + <p> Ends the current figure; optionally, closes it.</p> + <p>Calling this method without a matching call to <strong>BeginFigure</strong> places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the <strong>Close</strong> method is called.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by <strong>BeginFigure</strong>.</p> </dd> + + + + + <p>Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. </p> + <p>Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one <strong>EndFigure</strong> call for each call to <strong>BeginFigure</strong>.</p><p>After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Forces the factory to refresh any system defaults that it might have changed since factory creation.</p> + <p>You should call this method before calling the <strong>GetDesktopDpi</strong> method, to ensure that the system {{DPI}} is current.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the current desktop dots per inch ({{DPI}}). To refresh this value, call <strong>ReloadSystemMetrics</strong>.</p> + <p>Use this method to obtain the system {{DPI}} when setting physical pixel values, such as when you specify the size of a window.</p> + <p>This method does not return a value.</p> + + + + <p> Creates an <strong>{{ID2D1RectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1RoundedRectangleGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1EllipseGeometry}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1GeometryGroup}}</strong>, which is an object that holds other geometries.</p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a <strong>{{ID2D1GeometryGroup}}</strong> object, call the <strong>CreateGeometryGroup</strong> method on the <strong>{{ID2D1Factory}}</strong> object, passing in the <em>fillMode</em> with possible values of <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong> (alternate) and <strong>{{D2D1_FILL_MODE_WINDING}}</strong>, an array of geometry objects to add to the geometry group, and the number of elements in this array. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Transforms the specified geometry and stores the result as an <strong>{{ID2D1TransformedGeometry}}</strong> object. </p> + <p>Like other resources, a transformed geometry inherits the resource space and threading policy of the factory that created it. This object is immutable.</p><p>When stroking a transformed geometry with the <strong>DrawGeometry</strong> method, the stroke width is not affected by the transform applied to the geometry. The stroke width is only affected by the world transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an empty <strong>{{ID2D1PathGeometry}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1StrokeStyle}}</strong> that describes start cap, dash pattern, and other features of a stroke.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1DrawingStateBlock}}</strong> that can be used with the <strong>SaveDrawingState</strong> and <strong>RestoreDrawingState</strong> methods of a render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that renders to a Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>You must use <strong>{{D2D1_FEATURE_LEVEL_DEFAULT}}</strong> for the <strong>minLevel</strong> member of the <em>renderTargetProperties</em> parameter with this method.</p><p>Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p><ul> <li></li> </ul> <p><strong>Note</strong>?? This method isn't supported on Windows Phone and will fail when called on a device with error code 0x8899000b (?There is no hardware rendering device available for this operation?). Because the Windows Phone Emulator supports {{WARP}} rendering, this method will fail when called on the emulator with a different error code, 0x88982f80 (wincodec_err_unsupportedpixelformat).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap that receives the rendering output of the render target.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method. </p> </dd> + + + + + <p>Creates an <strong>{{ID2D1HwndRenderTarget}}</strong>, a render target that renders to a window.</p> + <p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error is received. When you receive this error, you need to recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a render target that draws to a DirectX Graphics Infrastructure ({{DXGI}}) surface. </p> + <p>To write to a Direct3D surface, you obtain an {{IDXGISurface}} and pass it to the <strong>CreateDxgiSurfaceRenderTarget</strong> method to create a {{DXGI}} surface render target; you can then use the {{DXGI}} surface render target to draw 2-D content to the {{DXGI}} surface. </p><p>A {{DXGI}} surface render target is a type of <strong>{{ID2D1RenderTarget}}</strong>. Like other Direct2D render targets, you can use it to create resources and issue drawing commands. </p><p>The {{DXGI}} surface render target and the {{DXGI}} surface must use the same {{DXGI}} format. If you specify the {{DXGI_FORMAT_UNKOWN}} format when you create the render target, it will automatically use the surface's format.</p><p>The {{DXGI}} surface render target does not perform {{DXGI}} surface synchronization. </p><p>For more information about creating and using {{DXGI}} surface render targets, see the Direct2D and Direct3D Interoperability Overview.</p><p>To work with Direct2D, the Direct3D device that provides the {{IDXGISurface}} must be created with the <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag.</p><p>When you create a render target and hardware acceleration is available, you allocate resources on the computer's {{GPU}}. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p><p></p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{IDXGISurface}} to which the render target will draw.</p> </dd> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of the reference to the <strong>{{ID2D1RenderTarget}}</strong> object created by this method.</p> </dd> + + + + + <p>Creates a render target that draws to a Windows Graphics Device Interface ({{GDI}}) device context.</p> + <p>Before you can render with a {{DC}} render target, you must use the render target's <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. Do this for each different {{DC}} and whenever there is a change in the size of the area you want to draw to.</p><p>To enable the {{DC}} render target to work with {{GDI}}, set the render target's {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>.</p><p>Your application should create render targets once and hold on to them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, recreate the render target (and any resources it created).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rendering mode, pixel format, remoting options, {{DPI}} information, and the minimum DirectX support required for hardware rendering. To enable the device context ({{DC}}) render target to work with {{GDI}}, set the {{DXGI}} format to {{DXGI_FORMAT_B8G8R8A8_UNORM}} and the alpha mode to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>. For more information about pixel formats, see Supported Pixel Formats and Alpha Modes.</p> </dd> + + + <dd> <p>When this method returns, <em>dcRenderTarget</em> contains the address of the reference to the <strong>{{ID2D1DCRenderTarget}}</strong> created by the method.</p> </dd> + + + + + <p>Represents an object that can receive drawing commands. Interfaces that inherit from <strong>{{ID2D1RenderTarget}}</strong> render the drawing commands they receive in different ways. </p> + <p>Your application should create render targets once and hold onto them for the life of the application or until the render target's <strong>EndDraw</strong> method returns the <strong>{{D2DERR_RECREATE_TARGET}}</strong> error. When you receive this error, you need to recreate the render target (and any resources it created). </p> + + + + <p>Creates a Direct2D bitmap from a reference to in-memory source data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The dimension of the bitmap to create in pixels.</p> </dd> + + + <dd> <p>A reference to the memory location of the image data, or <strong>{{NULL}}</strong> to create an uninitialized bitmap.</p> </dd> + + + <dd> <p>The byte count of each scanline, which is equal to (the image width in pixels ? the number of bytes per pixel) + memory padding. If <em>srcData</em> is <strong>{{NULL}}</strong>, this value is ignored. (Note that pitch is also sometimes called <em>stride</em>.)</p> </dd> + + + <dd> <p>The pixel format and dots per inch ({{DPI}}) of the bitmap to create.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a reference to the new bitmap. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> by copying the specified Microsoft Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>Before Direct2D can load a {{WIC}} bitmap, that bitmap must be converted to a supported pixel format and alpha mode. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1Bitmap}}</strong> whose data is shared with another resource.</p> + <p>The <strong>CreateSharedBitmap</strong> method is useful for efficiently reusing bitmap data and can also be used to provide interoperability with Direct3D. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1BitmapBrush}}</strong> from the specified bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new <strong>{{ID2D1SolidColorBrush}}</strong> that has the specified color and a base opacity of 1.0f. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an <strong>{{ID2D1GradientStopCollection}}</strong> from the specified gradient stops that uses the <strong>{{D2D1_GAMMA_2_2}}</strong> color interpolation gamma and the clamp extend mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1LinearGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{ID2D1RadialGradientBrush}}</strong> that contains the specified gradient stops, has no transform, and has a base opacity of 1.0. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a new bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target and has the same size, {{DPI}}, and pixel format (but not alpha mode) as the current render target. </p> + <p>The bitmap render target created by this method is not compatible with {{GDI}} and has an alpha mode of <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to a new bitmap render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. </p> + <p>Regardless of whether a size is initially specified, the layer automatically resizes as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when <strong>PushLayer</strong> is called.</p> </dd> + + + <dd> <p>When the method returns, contains a reference to a reference to the new layer. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Create a mesh that uses triangles to describe a shape.</p> + <p>To populate a mesh, use its <strong>Open</strong> method to obtain an <strong>{{ID2D1TessellationSink}}</strong>. To draw the mesh, use the render target's <strong>FillMesh</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the new mesh.</p> </dd> + + + + + <p>Draws a line between the specified points using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawLine</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The start point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The end point of the line, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the line's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid line.</p> </dd> + + + + + <p>Draws the outline of a rectangle that has the specified dimensions and stroke style. </p> + <p>When this method fails, it does not return an error code. To determine whether a drawing method (such as <strong>DrawRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to paint, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimension of the rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rectangle's interior.</p> </dd> + + + + + <p> Draws the outline of the specified rounded rectangle using the specified stroke style.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the rounded rectangle's outline. </p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of the rounded rectangle's stroke, or <strong>{{NULL}}</strong> to paint a solid stroke. The default value is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Paints the interior of the specified rounded rectangle.</p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillRoundedRectangle</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The dimensions of the rounded rectangle to paint, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the rounded rectangle.</p> </dd> + + + + + <p>Draws the outline of the specified ellipse using the specified stroke style. </p> + <p>The <strong>DrawEllipse</strong> method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius of the ellipse to draw, in device-independent pixels.</p> </dd> + + + <dd> <p>The brush used to paint the ellipse's outline.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the ellipse's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified ellipse. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillEllipse</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The position and radius, in device-independent pixels, of the ellipse to paint.</p> </dd> + + + <dd> <p>The brush used to paint the interior of the ellipse.</p> </dd> + + + + + <p>Draws the outline of the specified geometry using the specified stroke style. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to draw.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's stroke.</p> </dd> + + + <dd> <p>The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.</p> </dd> + + + <dd> <p>The style of stroke to apply to the geometry's outline, or <strong>{{NULL}}</strong> to paint a solid stroke.</p> </dd> + + + + + <p>Paints the interior of the specified geometry. </p> + <p>If the <em>opacityBrush</em> parameter is not <strong>{{NULL}}</strong>, the alpha value of each pixel of the mapped <em>opacityBrush</em> is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by <em>brush</em>. +</p><p>When this method fails, it does not return an error code. To determine whether a drawing operation (such as <strong>FillGeometry</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The geometry to paint.</p> </dd> + + + <dd> <p>The brush used to paint the geometry's interior.</p> </dd> + + + <dd> <p>The opacity mask to apply to the geometry, or <strong>{{NULL}}</strong> for no opacity mask. If an opacity mask (the <em>opacityBrush</em> parameter) is specified, <em>brush</em> must be an <strong>{{ID2D1BitmapBrush}}</strong> that has its x- and y-extend modes set to <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong>. For more information, see the Remarks section. </p> </dd> + + + + + <p> Paints the interior of the specified mesh.</p> + <p>The current antialias mode of the render target must be <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> when <strong>FillMesh</strong> is called. To change the render target's antialias mode, use the <strong>SetAntialiasMode</strong> method.</p><p><strong>FillMesh</strong> does not expect a particular winding order for the triangles in the <strong>{{ID2D1Mesh}}</strong>; both clockwise and counter-clockwise will work. </p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillMesh</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The mesh to paint.</p> </dd> + + + <dd> <p>The brush used to paint the mesh.</p> </dd> + + + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + <p>For this method to work properly, the render target must be using the <strong>{{D2D1_ANTIALIAS_MODE_ALIASED}}</strong> antialiasing mode. You can set the antialiasing mode by calling the <strong>{{ID2D1RenderTarget::SetAntialiasMode}}</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>FillOpacityMask</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + + + + <p>Draws the specified bitmap after scaling it to the size of the specified rectangle. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawBitmap</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to render.</p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn. If the rectangle is not well-ordered, nothing is drawn, but the render target does not enter an error state.</p> </dd> + + + <dd> <p>A value between 0.0f and 1.0f, inclusive, that specifies the opacity value to be applied to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. Default is 1.0f.</p> </dd> + + + <dd> <p>The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong>. </p> </dd> + + + <dd> <p>The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to draw; <strong>{{NULL}}</strong> to draw the entire bitmap.</p> </dd> + + + + + <p>Draws the specified text using the format information provided by an <strong>{{IDWriteTextFormat}}</strong> object.</p> + <p>To create an <strong>{{IDWriteTextFormat}}</strong> object, create an <strong>{{IDWriteFactory}}</strong> and call its <strong>CreateTextFormat</strong> method.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawText</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the formatted text described by the specified <strong>{{IDWriteTextLayout}}</strong> object.</p> + <p>When drawing the same text repeatedly, using the <strong>DrawTextLayout</strong> method is more efficient than using the <strong>DrawText</strong> method because the text doesn't need to be formatted and the layout processed with each call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawTextLayout</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Draws the specified glyphs. </p> + <p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>DrawGlyphRun</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin, in device-independent pixels, of the glyphs' baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is <strong>{{DWRITE_MEASURING_MODE_NATURAL}}</strong>. </p> </dd> + + + + + Applies the specified transform to the render target, replacing the existing transformation. All subsequent drawing operations occur in the transformed space. + + + + <p>Gets the current transform of the render target. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this returns, contains the current transform of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Sets the antialiasing mode of the render target. The antialiasing mode applies to all subsequent drawing operations, excluding text and glyph drawing operations. </p> + <p>To specify the antialiasing mode for text and glyph operations, use the <strong>SetTextAntialiasMode</strong> method. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode for future drawing operations. </p> </dd> + + + + + <p> Retrieves the current antialiasing mode for nontext drawing operations.</p> + <p>The current antialiasing mode for nontext drawing operations. </p> + + + + <p>Specifies the antialiasing mode to use for subsequent text and glyph drawing operations. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode to use for subsequent text and glyph drawing operations.</p> </dd> + + + + + <p>Gets the current antialiasing mode for text and glyph drawing operations. </p> + <p>The current antialiasing mode for text and glyph drawing operations. </p> + + + + <p>Specifies text rendering options to be applied to all subsequent text and glyph drawing operations. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text rendering options to be applied to all subsequent text and glyph drawing operations; <strong>{{NULL}}</strong> to clear current text rendering options. </p> </dd> + + + + + <p>Retrieves the render target's current text rendering options. </p> + <p>If the settings specified by <em>textRenderingParams</em> are incompatible with the render target's text antialiasing mode (specified by <strong>SetTextAntialiasMode</strong>), subsequent text and glyph drawing operations will fail and put the render target into an error state.</p> + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, <em>textRenderingParams</em>contains the address of a reference to the render target's current text rendering options. </p> </dd> + + + + + <p>Specifies a label for subsequent drawing operations. </p> + <p>The labels specified by this method are printed by debug error messages. If no tag is set, the default value for each tag is 0.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>A label to apply to subsequent drawing operations.</p> </dd> + + + + + <p>Gets the label for subsequent drawing operations. </p> + <p>If the same address is passed for both parameters, both parameters receive the value of the second tag. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter. </p> </dd> + + + <dd> <p>When this method returns, contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If <strong>{{NULL}}</strong> is specified, no value is retrieved for this parameter.</p> </dd> + + + + + <p>Adds the specified layer to the render target so that it receives all subsequent drawing operations until <strong>PopLayer</strong> is called. </p> + <p>The <strong>PushLayer</strong> method allows a caller to begin redirecting rendering to a layer. All rendering operations are valid in a layer. The location of the layer is affected by the world transform set on the render target. </p><p>Each <strong>PushLayer</strong> must have a matching <strong>PopLayer</strong> call. If there are more <strong>PopLayer</strong> calls than <strong>PushLayer</strong> calls, the render target is placed into an error state. If <strong>Flush</strong> is called before all outstanding layers are popped, the render target is placed into an error state, and an error is returned. The error state can be cleared by a call to <strong>EndDraw</strong>.</p><p>A particular <strong>{{ID2D1Layer}}</strong> resource can be active only at one time. In other words, you cannot call a <strong>PushLayer</strong> method, and then immediately follow with another <strong>PushLayer</strong> method with the same layer resource. Instead, you must call the second <strong>PushLayer</strong> method with different layer resources. +</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Stops redirecting drawing operations to the layer that is specified by the last <strong>PushLayer</strong> call. </p> + <p>A <strong>PopLayer</strong> must match a previous <strong>PushLayer</strong> call.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopLayer</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Executes all pending drawing commands. </p> + <p>This command does not flush the Direct3D device context that is associated with the render target.</p><p>Calling this method resets the error state of the render target.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0).</p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Saves the current drawing state to the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Sets the render target's drawing state to that of the specified <strong>{{ID2D1DrawingStateBlock}}</strong>.</p> + <p>This method does not return a value.</p> + + + + <p>Specifies a rectangle to which all subsequent drawing operations are clipped. </p> + <p>The <em>clipRect</em> is transformed by the current world transform set on the render target. After the transform is applied to the <em>clipRect</em> that is passed in, the axis-aligned bounding box for the <em>clipRect</em> is computed. For efficiency, the contents are clipped to this axis-aligned bounding box and not to the original <em>clipRect</em> that is passed in. </p><p>The following diagrams show how a rotation transform is applied to the render target, the resulting <em>clipRect</em>, and a calculated axis-aligned bounding box.</p><ol> <li> <p>Assume the rectangle in the following illustration is a render target that is aligned to the screen pixels.</p> <p></p> </li> <li> <p>Apply a rotation transform to the render target. In the following illustration, the black rectangle represents the original render target and the red dashed rectangle represents the transformed render target.</p> <p></p> </li> <li> <p>After calling <strong>PushAxisAlignedClip</strong>, the rotation transform is applied to the <em>clipRect</em>. In the following illustration, the blue rectangle represents the transformed <em>clipRect</em>.</p> <p></p> </li> <li> <p>The axis-aligned bounding box is calculated. The green dashed rectangle represents the bounding box in the following illustration. All contents are clipped to this axis-aligned bounding box.</p> <p></p> </li> </ol><strong>Note</strong>??If rendering operations fail or if <strong>PopAxisAlignedClip</strong> is not called, clip rects may cause some artifacts on the render target. <strong>PopAxisAlignedClip</strong> can be considered a drawing operation that is designed to fix the borders of a clipping region. Without this call, the borders of a clipped area may be not antialiased or otherwise corrected.?<p>The <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> must match. Otherwise, the error state is set. For the render target to continue receiving new commands, you can call <strong>Flush</strong> to clear the error. </p><p>A <strong>PushAxisAlignedClip</strong> and <strong>PopAxisAlignedClip</strong> pair can occur around or within a PushLayer and PopLayer, but cannot overlap. For example, the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> is valid, but the sequence of <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> is invalid.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PushAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The size and position of the clipping area, in device-independent pixels.</p> </dd> + + + <dd> <p>The antialiasing mode that is used to draw the edges of clip rects that have subpixel boundaries, and to blend the clip with the scene contents. The blending is performed once when the <strong>PopAxisAlignedClip</strong> method is called, and does not apply to each primitive within the layer. </p> </dd> + + + + + <p>Removes the last axis-aligned clip from the render target. After this method is called, the clip is no longer applied to subsequent drawing operations. </p> + <p>A <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> pair can occur around or within a <strong>PushLayer</strong>/<strong>PopLayer</strong> pair, but may not overlap. For example, a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopLayer</strong>, <strong>PopAxisAlignedClip</strong> sequence is valid, but a <strong>PushAxisAlignedClip</strong>, <strong>PushLayer</strong>, <strong>PopAxisAlignedClip</strong>, <strong>PopLayer</strong> sequence is not. </p><p><strong>PopAxisAlignedClip</strong> must be called once for every call to <strong>PushAxisAlignedClip</strong>.</p><p>For an example, see How to Clip with an Axis-Aligned Clip Rectangle.</p><p>This method doesn't return an error code if it fails. To determine whether a drawing operation (such as <strong>PopAxisAlignedClip</strong>) failed, check the result returned by the <strong>{{ID2D1RenderTarget::EndDraw}}</strong> or <strong>{{ID2D1RenderTarget::Flush}}</strong> methods. </p> + <p>This method does not return a value.</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>Direct2D interprets the <em>clearColor</em> as straight alpha (not premultiplied). If the render target's alpha mode is <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, the alpha channel of <em>clearColor</em> is ignored and replaced with 1.0f (fully opaque).</p><p>If the render target has an active clip (specified by <strong>PushAxisAlignedClip</strong>), the clear command is applied only to the area within the clip region.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The color to which the drawing area is cleared, or <strong>{{NULL}}</strong> for transparent black.</p> </dd> + + + + + <p>Initiates drawing on this render target. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p>BeginDraw and EndDraw are used to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an {{HRESULT}} indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing {{HRESULT}}. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate {{HRESULT}} and error information when <strong>EndDraw</strong> is called. +</p> + <p>This method does not return a value.</p> + + + + <p>Ends drawing operations on the render target and indicates the current error state and associated tags. </p> + <p>Drawing operations can only be issued between a <strong>BeginDraw</strong> and <strong>EndDraw</strong> call.</p><p> <strong>BeginDraw</strong> and <strong>EndDraw</strong> are use to indicate that a render target is in use by the Direct2D system. Different implementations of <strong>{{ID2D1RenderTarget}}</strong> might behave differently when <strong>BeginDraw</strong> is called. An <strong>{{ID2D1BitmapRenderTarget}}</strong> may be locked between <strong>BeginDraw</strong>/<strong>EndDraw</strong> calls, a {{DXGI}} surface render target might be acquired on <strong>BeginDraw</strong> and released on <strong>EndDraw</strong>, while an <strong>{{ID2D1HwndRenderTarget}}</strong> may begin batching at <strong>BeginDraw</strong> and may present on <strong>EndDraw</strong>, for example.</p><p> The <strong>BeginDraw</strong> method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of <strong>BeginDraw</strong>/<strong>EndDraw</strong>. </p><p>After <strong>BeginDraw</strong> is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the <strong>Flush</strong> method is called, or until <strong>EndDraw</strong> is called. The <strong>EndDraw</strong> method causes any batched drawing operations to complete, and then returns an <strong>{{HRESULT}}</strong> indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The <strong>EndDraw</strong> method always succeeds: it should not be called twice even if a previous <strong>EndDraw</strong> resulted in a failing <strong>{{HRESULT}}</strong>. </p><p>If <strong>EndDraw</strong> is called without a matched call to <strong>BeginDraw</strong>, it returns an error indicating that <strong>BeginDraw</strong> must be called before <strong>EndDraw</strong>. Calling <strong>BeginDraw</strong> twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate <strong>{{HRESULT}}</strong> and error information when <strong>EndDraw</strong> is called. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code and sets <em>tag1</em> and <em>tag2</em> to the tags that were active when the error occurred. </p> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the pixel format and alpha mode of the render target. </p> + <p>The pixel format and alpha mode of the render target.</p> + + + + <p>Sets the dots per inch ({{DPI}}) of the render target. </p> + <p>This method specifies the mapping from pixel space to device-independent space for the render target. If both <em>dpiX</em> and <em>dpiY</em> are 0, the factory-read system {{DPI}} is chosen. If one parameter is zero and the other unspecified, the {{DPI}} is not changed.</p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A value greater than or equal to zero that specifies the horizontal {{DPI}} of the render target.</p> </dd> + + + <dd> <p>A value greater than or equal to zero that specifies the vertical {{DPI}} of the render target.</p> </dd> + + + + + <p>Return the render target's dots per inch ({{DPI}}).</p> + <p>This method indicates the mapping from pixel space to device-independent space for the render target. </p><p>For <strong>{{ID2D1HwndRenderTarget}}</strong>, the {{DPI}} defaults to the most recently factory-read system {{DPI}}. The default value for all other render targets is 96 {{DPI}}. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the horizontal {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + <dd> <p>When this method returns, contains the vertical {{DPI}} of the render target. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Returns the size of the render target in device-independent pixels.</p> + <p>The current size of the render target in device-independent pixels.</p> + + + + <p>Returns the size of the render target in device pixels.</p> + <p>The size of the render target in device pixels.</p> + + + + <p>Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.</p> + <p>This method returns the maximum texture size of the Direct3D device.</p><strong>Note</strong>??The software renderer and {{WARP}} devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? + <p> The maximum size, in pixels, of any one bitmap dimension supported by the render target.</p> + + + + <p>Indicates whether the render target supports the specified properties.</p> + <p>This method does not evaluate the {{DPI}} settings specified by the <em>renderTargetProperties</em> parameter.</p> + <p><strong>{{TRUE}}</strong> if the specified render target properties are supported by this render target; otherwise, <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The render target properties to test.</p> </dd> + + + + + <p>Renders to an intermediate texture created by the <strong>CreateCompatibleRenderTarget</strong> method. </p> + <p>An <strong>{{ID2D1BitmapRenderTarget}}</strong> writes to an intermediate texture. It's useful for creating patterns for use with an <strong>{{ID2D1BitmapBrush}}</strong> or caching drawing data that will be used repeatedly. </p><p>To write directly to a {{WIC}} bitmap instead, use the <strong>{{ID2D1Factory::CreateWicBitmapRenderTarget}}</strong> method. This method returns an <strong>{{ID2D1RenderTarget}}</strong> that writes to the specified {{WIC}} bitmap. </p> + + + + <p>Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations. </p> + <p>The {{DPI}} for the <strong>{{ID2D1Bitmap}}</strong> obtained from <strong>GetBitmap</strong> will be the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> when the render target was created. Changing the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> by calling <strong>SetDpi</strong> doesn't affect the {{DPI}} of the bitmap, even if <strong>SetDpi</strong> is called before <strong>GetBitmap</strong>. Using <strong>SetDpi</strong> to change the {{DPI}} of the <strong>{{ID2D1BitmapRenderTarget}}</strong> does affect how contents are rendered into the bitmap: it just doesn't affect the {{DPI}} of the bitmap retrieved by <strong>GetBitmap</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the bitmap for this render target. This bitmap can be used for drawing operations. </p> </dd> + + + + + <p>Populates an <strong>{{ID2D1Mesh}}</strong> object with triangles. </p> + + + + <p>Copies the specified triangles to the sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of <strong>{{D2D1_TRIANGLE}}</strong> structures that describe the triangles to add to the sink.</p> </dd> + + + <dd> <p>The number of triangles to copy from the <em>triangles</em> array.</p> </dd> + + + + + <p> Closes the sink and returns its error status.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a geometry resource and defines a set of helper methods for manipulating and measuring geometric shapes. Interfaces that inherit from <strong>{{ID2D1Geometry}}</strong> define specific shapes.</p> + <p>There are several types of Direct2D geometry objects: a simple geometry (<strong>{{ID2D1RectangleGeometry}}</strong>, <strong>{{ID2D1RoundedRectangleGeometry}}</strong>, or <strong>{{ID2D1EllipseGeometry}}</strong>), a path geometry (<strong>{{ID2D1PathGeometry}}</strong>), or a composite geometry (<strong>{{ID2D1GeometryGroup}}</strong> and <strong>{{ID2D1TransformedGeometry}}</strong>).</p><p> Direct2D geometries enable you to describe two-dimensional figures and also offer many uses, such as defining hit-test regions, clip regions, and even animation paths.</p><p>Direct2D geometries are immutable and device-independent resources created by <strong>{{ID2D1Factory}}</strong>. In general, you should create geometries once and retain them for the life of the application, or until they need to be modified. For more information about device-independent and device-dependent resources, see the Resources Overview.</p> + + + + Retrieves the bounds of the geometry. + + + + <p>Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The amount by which to widen the geometry by stroking its outline.</p> </dd> + + + <dd> <p>The style of the stroke that widens the geometry. +</p> </dd> + + + <dd> <p>A transform to apply to the geometry after the geometry is transformed and after the geometry has been stroked.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test for containment. +</p> </dd> + + + <dd> <p>The thickness of the stroke to apply. +</p> </dd> + + + <dd> <p>The style of stroke to apply.</p> </dd> + + + <dd> <p>The transform to apply to the stroked geometry. +</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. +</p> </dd> + + + + + <p>Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The point to test. +</p> </dd> + + + <dd> <p>The transform to apply to the geometry prior to testing for containment, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a <strong>{{BOOL}}</strong> value that is <strong>{{TRUE}}</strong> if the area filled by the geometry contains <em>point</em>; otherwise, <strong>{{FALSE}}</strong>. +You must allocate storage for this parameter.</p> </dd> + + + + + <p>Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance.</p> + <p>When interpreting the returned <em>relation</em> value, it is important to remember that the member <strong>{{D2D1_GEOMETRY_RELATION_IS_CONTAINED}}</strong> of the <strong>{{D2D1_GEOMETRY_RELATION}}</strong> enumeration type means that this geometry is contained inside <em>inputGeometry</em>, not that this geometry contains <em>inputGeometry</em>. </p><p>For more information about how to interpret other possible return values, see <strong>{{D2D1_GEOMETRY_RELATION}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The geometry to test. </p> </dd> + + + <dd> <p>The transform to apply to <em>inputGeometry</em>, or <strong>{{NULL}}</strong>. +</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a value that describes how this geometry is related to <em>inputGeometry</em>. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry.</p> </dd> + + + <dd> <p>The <strong>{{ID2D1TessellationSink}}</strong> to which the tessellated is appended.</p> </dd> + + + + + <p>Combines this geometry with the specified geometry and stores the result in an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the outline of the geometry and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform to apply to this geometry before computing its area.</p> </dd> + + + <dd> <p>The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution. +</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter.</p> </dd> + + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + + + <p>Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the default tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry.</p> </dd> + + + <dd> <p>The transform to apply to the geometry before calculating the specified point and tangent.</p> </dd> + + + <dd> <p>The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Widens the geometry by the specified stroke and writes the result to an <strong>{{ID2D1SimplifiedGeometrySink}}</strong> after it has been transformed by the specified matrix and flattened using the specified tolerance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines an object that paints an area. Interfaces that derive from <strong>{{ID2D1Brush}}</strong> describe how the area is painted. </p> + <p>An <strong>{{ID2D1BitmapBrush}}</strong> is a device-dependent resource: your application should create bitmap brushes after it initializes the render target with which the bitmap brush will be used, and recreate the bitmap brush whenever the render target needs recreated. (For more information about resources, see Resources Overview.)</p><p>Brush space in Direct2D is specified differently than in {{XPS}} and Windows Presentation Foundation ({{WPF}}). In Direct2D, brush space is not relative to the object being drawn, but rather is the current coordinate system of the render target, transformed by the brush transform, if present. To paint an object as it would be painted by a {{WPF}} brush, you must translate the brush space origin to the upper-left corner of the object's bounding box, and then scale the brush space so that the base tile fills the bounding box of the object.</p><p>For more information about brushes, see the Brushes Overview. </p> + + + + <p>Sets the degree of opacity of this brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> </dd> + + + + + <p> Sets the transformation applied to the brush.</p> + <p>When you paint with a brush, it paints in the coordinate space of the render target. Brushes do not automatically position themselves to align with the object being painted; by default, they begin painting at the origin (0, 0) of the render target. </p><p>You can "move" the gradient defined by an <strong>{{ID2D1LinearGradientBrush}}</strong> to a target area by setting its start point and end point. Likewise, you can move the gradient defined by an <strong>{{ID2D1RadialGradientBrush}}</strong> by changing its center and radii. </p><p>To align the content of an <strong>{{ID2D1BitmapBrush}}</strong> to the area being painted, you can use the <strong>SetTransform</strong> method to translate the bitmap to the desired location. This transform only affects the brush; it does not affect any other content drawn by the render target. </p><p>The following illustrations show the effect of using an <strong>{{ID2D1BitmapBrush}}</strong> to fill a rectangle located at (100, 100). The illustration on the left illustration shows the result of filling the rectangle without transforming the brush: the bitmap is drawn at the render target's origin. As a result, only a portion of the bitmap appears in the rectangle.</p><p>The illustration on the right shows the result of transforming the <strong>{{ID2D1BitmapBrush}}</strong> so that its content is shifted 50 pixels to the right and 50 pixels down. The bitmap now fills the rectangle.</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>The transformation to apply to this brush.</p> </dd> + + + + + <p>Gets the degree of opacity of this brush. </p> + <p>A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together. </p> + + + + <p>Gets the transform applied to this brush. </p> + <p>When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform applied to this brush.</p> </dd> + + + + + <p>Represents a Direct2D drawing resource.</p> + + + + <p>Retrieves the factory associated with this resource.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the factory that created this resource. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + <p>An <strong>{{ID2D1Image}}</strong> is abstract. Concrete instances can be created through <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> and <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p><p> Images are evaluated lazily. If the type of image passed in is concrete, then the image can be directly sampled from. Other images can act only as a source of pixels and can produce content only as a result of calling <strong>{{ID2D1DeviceContext::DrawImage}}</strong>.</p> + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + <p>Returns the size, in device-independent pixels ({{DIPs}}), of the bitmap.</p> + <p>A {{DIP}} is 1/96?of an inch. To retrieve the size in device pixels, use the <strong>{{ID2D1Bitmap::GetPixelSize}}</strong> method.</p> + <p>The size, in {{DIPs}}, of the bitmap.</p> + + + + <p>Returns the size, in device-dependent units (pixels), of the bitmap.</p> + <p>The size, in pixels, of the bitmap.</p> + + + + <p>Retrieves the pixel format and alpha mode of the bitmap.</p> + <p>The pixel format and alpha mode of the bitmap.</p> + + + + <p>Return the dots per inch ({{DPI}}) of the bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The horizontal {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + <dd> <p>The vertical {{DPI}} of the image. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Copies the specified region from the specified bitmap into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>.</p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The bitmap to copy from.</p> </dd> + + + <dd> <p>The area of <em>bitmap</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from the specified render target into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>All clips and layers must be popped off of the render target before calling this method. The method returns <strong>{{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}}</strong> if any clips or layers are currently applied to the render target.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The render target that contains the region to copy.</p> </dd> + + + <dd> <p>The area of <em>renderTarget</em> to copy.</p> </dd> + + + + + <p>Copies the specified region from memory into the current bitmap. </p> + <p>This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. </p><p>If this method is passed invalid input (such as an invalid destination rectangle), can produce unpredictable results, such as a distorted image or device failure.</p><p>Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing <strong>{{HRESULT}}</strong> and tag state will be returned at the next call to <strong>EndDraw</strong> or <strong>Flush</strong>. </p><p>Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the <em>srcRect</em> parameter must be multiples of 4 or the method returns <strong>{{E_INVALIDARG}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>In the current bitmap, the upper-left corner of the area to which the region specified by <em>srcRect</em> is copied.</p> </dd> + + + <dd> <p>The data to copy.</p> </dd> + + + <dd> <p>The stride, or pitch, of the source bitmap stored in <em>srcData</em>. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding.</p> </dd> + + + + + <p>Represents an collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes.</p> + + + + + <p>Retrieves the number of gradient stops in the collection.</p> + <p>The number of gradient stops in the collection.</p> + + + + <p>Copies the gradient stops from the collection into an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> + <p>Gradient stops are copied in order of position, starting with the gradient stop with the smallest position value and progressing to the gradient stop with the largest position value.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates the gamma space in which the gradient stops are interpolated. </p> + <p>The gamma space in which the gradient stops are interpolated. </p> + + + + <p>Indicates the behavior of the gradient outside the normalized gradient range. </p> + <p>The behavior of the gradient outside the [0,1] normalized gradient range.</p> + + + + <p>Paints an area with a bitmap.</p> + <p> A bitmap brush is used to fill a geometry with a bitmap. Like all brushes, it defines an infinite plane of content. Because bitmaps are finite, the brush relies on an "extend mode" to determine how the plane is filled horizontally and vertically.</p> + + + + <p>Specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap. </p> </dd> + + + + + <p>Specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + <p>Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (<strong>SetExtendModeX</strong>) and vertical (<strong>SetExtendModeY</strong>) extend mode settings to determine how to fill the remaining area.</p><p>The following illustration shows the results from every possible combination of the extend modes for an <strong>{{ID2D1BitmapBrush}}</strong>: <strong>{{D2D1_EXTEND_MODE_CLAMP}}</strong> ({{CLAMP}}), <strong>{{D2D1_EXTEND_MODE_WRAP}}</strong> ({{WRAP}}), and <strong>{{D2D1_EXTEND_MIRROR}}</strong> ({{MIRROR}}).</p><p></p> + <p>This method does not return a value.</p> + + + <dd> <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> </dd> + + + + + <p>Specifies the interpolation mode used when the brush bitmap is scaled or rotated.</p> + <p>This method sets the interpolation mode for a bitmap, which is an enum value that is specified in the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. {{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}} represents nearest neighbor filtering. It looks up the nearest bitmap pixel to the current rendering pixel and chooses its exact color. {{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}} represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, bilinear interpolation positions the bitmap more precisely to the application requests, but blurs the bitmap in the process. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The interpolation mode used when the brush bitmap is scaled or rotated.</p> </dd> + + + + + <p>Specifies the bitmap source that this brush uses to paint. </p> + <p>This method specifies the bitmap source that this brush uses to paint. The bitmap is not resized or rescaled automatically to fit the geometry that it fills. The bitmap stays at its native size. To resize or translate the bitmap, use the <strong>SetTransform</strong> method to apply a transform to the brush. </p><p>The native size of a bitmap is the width and height in bitmap pixels, divided by the bitmap {{DPI}}. This native size forms the base tile of the brush. To tile a subregion of the bitmap, you must generate a new bitmap containing this subregion and use <strong>SetBitmap</strong> to apply it to the brush. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap source used by the brush.</p> </dd> + + + + + <p> Gets the method by which the brush horizontally tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.</p> + + + + <p> Gets the method by which the brush vertically tiles those areas that extend past its bitmap. </p> + <p>Like all brushes, <strong>{{ID2D1BitmapBrush}}</strong> defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.</p> + <p>A value that specifies how the brush vertically tiles those areas that extend past its bitmap.</p> + + + + <p>Gets the interpolation method used when the brush bitmap is scaled or rotated. </p> + <p>This method gets the interpolation mode of a bitmap, which is specified by the <strong>{{D2D1_BITMAP_INTERPOLATION_MODE}}</strong> enumeration type. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}}</strong> represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. <strong>{{D2D1_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> represents linear filtering, and interpolates a color from the four nearest bitmap pixels.</p><p>The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process. </p> + <p>The interpolation method used when the brush bitmap is scaled or rotated.</p> + + + + <p> Gets the bitmap source that this brush uses to paint.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address to a reference to the bitmap with which this brush paints.</p> </dd> + + + + + <p>Paints an area with a solid color. </p> + + + + + <p>Specifies the color of this solid color brush. </p> + <p>To help create colors, Direct2D provides the <strong>ColorF</strong> class. It offers several helper methods for creating colors and provides a set or predefined colors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The color of this solid color brush.</p> </dd> + + + + + <p> Retrieves the color of the solid color brush.</p> + <p>The color of this solid color brush.</p> + + + + <p>Paints an area with a linear gradient. </p> + <p>An <strong>{{ID2D1LinearGradientBrush}}</strong> paints an area with a linear gradient along a line between the brush start point and end point. The gradient, defined by the brush <strong>{{ID2D1GradientStopCollection}}</strong>, is extruded perpendicular to this line, and then transformed by a brush transform (if specified). </p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush start point and end point are also transformed. </p><p>It is possible to specify a gradient axis that does not completely fill the area that is being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong>, specified by the <strong>{{ID2D1GradientStopCollection}}</strong>, determines how the remaining area is painted. +</p> + + + + <p>Sets the starting coordinates of the linear gradient in the brush's coordinate space. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Sets the ending coordinates of the linear gradient in the brush's coordinate space.</p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the starting coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p>Retrieves the ending coordinates of the linear gradient. </p> + <p>The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.</p> + <p>The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.</p> + + + + <p> Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this linear gradient brush.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p> Paints an area with a radial gradient.</p> + <p>The <strong>{{ID2D1RadialGradientBrush}}</strong> is similar to the <strong>{{ID2D1LinearGradientBrush}}</strong> in that they both map a collection of gradient stops to a gradient. However, the linear gradient has a start and an end point to define the gradient vector, while the radial gradient uses an ellipse and a gradient origin to define its gradient behavior. To define the position and size of the ellipse, use the <strong>SetCenter</strong>, <strong>SetRadiusX</strong>, and <strong>SetRadiusY</strong> methods to specify the center, x-radius, and y-radius of the ellipse. The gradient origin is the center of the ellipse, unless a gradient offset is specified by using the <strong>SetGradientOriginOffset</strong> method.</p><p>The brush maps the gradient stop position 0.0f of the gradient origin, and the position 1.0f is mapped to the ellipse boundary. When the gradient origin is within the ellipse, the contents of the ellipse enclose the entire [0, 1] range of the brush gradient stops. If the gradient origin is outside the bounds of the ellipse, the brush still works, but its gradient is not well-defined.</p><p>The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps just one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush ellipse and gradient origin are also transformed.</p><p>It is possible to specify an ellipse that does not completely fill area being painted. When this occurs, the <strong>{{D2D1_EXTEND_MODE}}</strong> and setting (specified by the brush <strong>{{ID2D1GradientStopCollection}}</strong>) determines how the remaining area is painted. +</p> + + + + <p>Specifies the center of the gradient ellipse in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The center of the gradient ellipse, in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the offset of the gradient origin relative to the gradient ellipse's center.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The offset of the gradient origin from the center of the gradient ellipse.</p> </dd> + + + + + <p> Specifies the x-radius of the gradient ellipse, in the brush's coordinate space.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The x-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Specifies the y-radius of the gradient ellipse, in the brush's coordinate space. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The y-radius of the gradient ellipse. This value is in the brush's coordinate space.</p> </dd> + + + + + <p>Retrieves the center of the gradient ellipse. </p> + <p>The center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the offset of the gradient origin relative to the gradient ellipse's center. </p> + <p>The offset of the gradient origin from the center of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the x-radius of the gradient ellipse. </p> + <p>The x-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the y-radius of the gradient ellipse. </p> + <p>The y-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.</p> + + + + <p>Retrieves the <strong>{{ID2D1GradientStopCollection}}</strong> associated with this radial gradient brush object.</p> + <p> <strong>{{ID2D1GradientStopCollection}}</strong> contains an array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures and additional information, such as the extend mode and the color interpolation mode.</p> + <p>This method does not return a value.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + + + + + <p> Retrieves the type of shape used at the beginning of a stroke. </p> + <p>The type of shape used at the beginning of a stroke.</p> + + + + <p>Retrieves the type of shape used at the end of a stroke. </p> + <p>The type of shape used at the end of a stroke.</p> + + + + <p>Gets a value that specifies how the ends of each dash are drawn. </p> + <p>A value that specifies how the ends of each dash are drawn.</p> + + + + <p>Retrieves the limit on the ratio of the miter length to half the stroke's thickness. </p> + <p>A positive number greater than or equal to 1.0f that describes the limit on the ratio of the miter length to half the stroke's thickness.</p> + + + + <p>Retrieves the type of joint used at the vertices of a shape's outline. </p> + <p>A value that specifies the type of joint used at the vertices of a shape's outline.</p> + + + + <p>Retrieves a value that specifies how far in the dash sequence the stroke will start. </p> + <p>A value that specifies how far in the dash sequence the stroke will start. </p> + + + + <p>Gets a value that describes the stroke's dash pattern. </p> + <p>If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the <strong>GetDashes</strong> method.</p> + <p>A value that describes the predefined dash pattern used, or <strong>{{D2D1_DASH_STYLE_CUSTOM}}</strong> if a custom dash style is used.</p> + + + + <p>Retrieves the number of entries in the dashes array. </p> + <p>The number of entries in the dashes array if the stroke is dashed; otherwise, 0.</p> + + + + <p>Copies the dash pattern to the specified array. </p> + <p>The dashes are specified in units that are a multiple of the stroke width, with subsequent members of the array indicating the dashes and gaps between dashes: the first entry indicates a filled dash, the second a gap, and so on. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference to an array that will receive the dash pattern. The array must be able to contain at least as many elements as specified by <em>dashesCount</em>. You must allocate storage for this array.</p> </dd> + + + <dd> <p>The number of dashes to copy. If this value is less than the number of dashes in the stroke style's dashes array, the returned dashes are truncated to <em>dashesCount</em>. If this value is greater than the number of dashes in the stroke style's dashes array, the extra dashes are set to 0.0f. To obtain the actual number of dashes in the stroke style's dashes array, use the <strong>GetDashesCount</strong> method. </p> </dd> + + + + + <p>Describes a two-dimensional rectangle. </p> + + + + + <p> Retrieves the rectangle that describes the rectangle geometry's dimensions.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Contains a reference to a rectangle that describes the rectangle geometry's dimensions when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Describes a rounded rectangle. </p> + + + + + <p>Retrieves a rounded rectangle that describes this rounded rectangle geometry. </p> + <p>This method does not return a value.</p> + + + <dd> <p>A reference that receives a rounded rectangle that describes this rounded rectangle geometry. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Represents an ellipse. </p> + + + + + <p>Gets the <strong>{{D2D1_ELLIPSE}}</strong> structure that describes this ellipse geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Represents a composite geometry, composed of other <strong>{{ID2D1Geometry}}</strong> objects. </p> + <p>Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. </p> + + + + <p>Indicates how the intersecting areas of the geometries contained in this geometry group are combined.</p> + <p> A value that indicates how the intersecting areas of the geometries contained in this geometry group are combined. </p> + + + + <p>Indicates the number of geometry objects in the geometry group. </p> + <p>The number of geometries in the <strong>{{ID2D1GeometryGroup}}</strong>.</p> + + + + <p>Retrieves the geometries in the geometry group. </p> + <p>The returned geometries are referenced and counted, and the caller must release them.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an array of geometries to be filled by this method. The length of the array is specified by the <em>geometryCount</em> parameter. If the array is <strong>{{NULL}}</strong>, then this method performs no operation. You must allocate the memory for this array.</p> </dd> + + + <dd> <p>A value indicating the number of geometries to return in the <em>geometries</em> array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to <strong>{{NULL}}</strong>. To obtain the number of geometries currently in the geometry group, use the <strong>GetSourceGeometryCount</strong> method.</p> </dd> + + + + + <p>Represents a geometry that has been transformed. </p> + <p>Using an <strong>{{ID2D1TransformedGeometry}}</strong> rather than transforming a geometry by using a render target's transform enables you to transform a geometry without transforming its stroke.</p> + + + + <p>Retrieves the source geometry of this transformed geometry object. </p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to the source geometry for this transformed geometry object. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Retrieves the matrix used to transform the <strong>{{ID2D1TransformedGeometry}}</strong> object's source geometry. </p> + <p>This method does not return a value.</p> + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Creates a line segment between the current point and the specified end point and adds it to the geometry sink. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The end point of the line to draw.</p> </dd> + + + + + Creates a cubic Bezier curve between the current point and the specified end point and adds it to the geometry sink. + + + + <p>Creates a quadratic Bezier curve between the current point and the specified end point.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A structure that describes the control point and the end point of the quadratic Bezier curve to add.</p> </dd> + + + + + <p>Adds a sequence of quadratic Bezier segments as an array in a single call.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An array of a sequence of quadratic Bezier segments.</p> </dd> + + + <dd> <p>A value indicating the number of quadratic Bezier segments in <em>beziers</em>. </p> </dd> + + + + + <p>Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves. </p> + <p>The <strong>{{ID2D1GeometrySink}}</strong> interface extends the <strong>{{ID2D1SimplifiedGeometrySink}}</strong> interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.</p><p>A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the <strong>BeginFigure</strong> method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the <strong>EndFigure</strong> method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the <strong>Close</strong> method.</p> + + + + <p>Represents a complex shape that may be composed of arcs, curves, and lines. </p> + <p>An <strong>{{ID2D1PathGeometry}}</strong> object enables you to describe a geometric path. To describe an <strong>{{ID2D1PathGeometry}}</strong> object's path, use the object's <strong>Open</strong> method to retrieve an <strong>{{ID2D1GeometrySink}}</strong>. Use the sink to populate the path geometry with figures and segments. </p> + + + + <p>Retrieves the geometry sink that is used to populate the path geometry with figures and segments. </p> + <p>Because path geometries are immutable and can only be populated once, it is an error to call <strong>Open</strong> on a path geometry more than once.</p><p>Note that the fill mode defaults to <strong>{{D2D1_FILL_MODE_ALTERNATE}}</strong>. To set the fill mode, call <strong>SetFillMode</strong> before the first call to <strong>BeginFigure</strong>. Failure to do so will put the geometry sink in an error state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, <em>geometrySink</em> contains the address of a reference to the geometry sink that is used to populate the path geometry with figures and segments. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Copies the contents of the path geometry to the specified <strong>{{ID2D1GeometrySink}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the number of segments in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of segments in the path geometry when this method returns. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Retrieves the number of figures in the path geometry. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the number of figures in the path geometry when this method returns. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Represents a set of vertices that form a list of triangles. </p> + + + + + <p>Opens the mesh for population.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to a reference to an <strong>{{ID2D1TessellationSink}}</strong> that is used to populate the mesh. This parameter is passed uninitialized.</p> </dd> + + + + + <p>Represents the backing store required to render a layer. </p> + <p>To create a layer, call the <strong>CreateLayer</strong> method of the render target where the layer will be used. To draw to a layer, push the layer to the render target stack by calling the <strong>PushLayer</strong> method. After you have finished drawing to the layer, call the <strong>PopLayer</strong> method.</p><p>Between <strong>PushLayer</strong> and <strong>PopLayer</strong> calls, the layer is in use and cannot be used by another render target. </p><p>If the size of the layer is not specified, the corresponding <strong>PushLayer</strong> call determines the minimum layer size, based on the layer content bounds and the geometric mask. The layer resource can be larger than the size required by <strong>PushLayer</strong> without any rendering artifacts.</p><p>If the size of a layer is specified, or if the layer has been used and the required backing store size as calculated during <strong>PushLayer</strong> is larger than the layer, then the layer resource is expanded on each axis monotonically to ensure that it is large enough. The layer resource never shrinks in size.</p> + + + + <p>Gets the size of the layer in device-independent pixels. </p> + <p>The size of the layer in device-independent pixels.</p> + + + + <p>Represents the drawing state of a render target: the antialiasing mode, transform, tags, and text-rendering options. </p> + + + + + <p>Retrieves the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, and tags portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Specifies the antialiasing mode, transform, and tags portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The antialiasing mode, transform, and tags portion of the drawing state.</p> </dd> + + + + + <p>Specifies the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The text-rendering configuration of the drawing state, or {{NULL}} to use default settings.</p> </dd> + + + + + <p>Retrieves the text-rendering configuration of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to an <strong>{{IDWriteRenderingParams}}</strong> object that describes the text-rendering configuration of the drawing state.</p> </dd> + + + + + <p>Renders drawing instructions to a window.</p> + <p>As is the case with other render targets, you must call <strong>BeginDraw</strong> before issuing drawing commands. After you've finished drawing, call <strong>EndDraw</strong> to indicate that drawing is finished and to release access to the buffer backing the render target. For <strong>{{ID2D1HwndRenderTarget}}</strong>, the only side effect of <strong>BeginDraw</strong> is changing the state of the render target to allow drawing commands to be issued. <strong>EndDraw</strong> flushes any batched drawing commands. If no errors have occurred, then it also presents the buffer, causing it to appear on the associated window. Finally, <strong>EndDraw</strong> returns the {{HRESULT}} of the first error that occurred in drawing or presenting, as well as the tag state at the time the error occurred.</p><p><strong>{{ID2D1HwndRenderTarget}}</strong> objects are double buffered, so drawing commands issued do not appear immediately, but rather are performed on an offscreen surface. When <strong>EndDraw</strong> is called, if there have been no rendering errors, the offscreen buffer is presented. If there have been rendering errors in the batch flushed by <strong>EndDraw</strong>, then the buffer is not presented, and the application must call <strong>BeginDraw</strong> and re-draw the frame. <strong>Flush</strong> can be used to check for errors before calling <strong>EndDraw</strong> if an application wants the frame to be presented regardless of errors. </p><p>A hardware render target's back-buffer is the size specified by <strong>GetPixelSize</strong>. If <strong>EndDraw</strong> presents the buffer, this bitmap is stretched to cover the surface where it is presented: the entire client area of the window. This stretch is performed using bilinear filtering if the render target is rendering in hardware and using nearest-neighbor filtering if the rendering target is using software. (Typically, an application will call <strong>Resize</strong> to ensure the pixel size of the render target and the pixel size of the destination match, and no scaling is necessary, though this is not a requirement.) </p><p>In the case where a window straddles adapters, Direct2D ensures that the portion of the off-screen render target is copied from the adapter where rendering is occurring to the adapter that needs to display the contents. If the adapter a render target is on has been removed or the driver upgraded while the application is running, this is returned as an error in the <strong>EndDraw</strong> call. In this case, the application should create a new render target and resources as necessary. +</p> + + + + <p>Indicates whether the {{HWND}} associated with this render target is occluded. </p> + <strong>Note</strong>??If the window was occluded the last time that <strong>EndDraw</strong> was called, the next time that the render target calls <strong>CheckWindowState</strong>, it will return <strong>{{D2D1_WINDOW_STATE_OCCLUDED}}</strong> regardless of the current window state. If you want to use <strong>CheckWindowState</strong> to determine the current window state, you should call <strong>CheckWindowState</strong> after every <strong>EndDraw</strong> call and ignore its return value. This call will ensure that your next call to <strong>CheckWindowState</strong> state will return the actual window state.? + <p>A value that indicates whether the {{HWND}} associated with this render target is occluded.</p> + + + + Changes the size of the render target to the specified pixel size. + <p>After this method is called, the contents of the render target's back-buffer are not defined, even if the <strong>{{D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS}}</strong> option was specified when the render target was created.</p> + + + + <p> Returns the {{HWND}} associated with this render target.</p> + <p>The {{HWND}} associated with this render target.</p> + + + + <p>Provides access to an device context that can accept {{GDI}} drawing commands. </p> + <p>You don't create an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> object directly; instead, you use the <strong>QueryInterface</strong> method of an existing render target instance to provide an <strong>{{ID2D1GdiInteropRenderTarget}}</strong> version of that render target. </p><p>Not all render targets support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface. The render target must be {{GDI}}-compatible (the <strong>{{D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE}}</strong> flag was specified when creating the render target), use the {{DXGI_FORMAT_B8G8R8A8_UNORM}} pixel format, and use the <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong> or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong> alpha mode.</p><p>Note that the <strong>QueryInterface</strong> method always succeeds; if the render target doesn't support the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, calling <strong>GetDC</strong> will fail. (For render targets created through the <strong>CreateCompatibleRenderTarget</strong> method, the render target that created it must have these settings.) </p><p>To test whether a given render target supports the <strong>{{ID2D1GdiInteropRenderTarget}}</strong> interface, create a <strong>{{D2D1_RENDER_TARGET_PROPERTIES}} </strong>that specifies {{GDI}} compatibility and the appropriate pixel format, then call the render target's <strong>IsSupported</strong> method to see whether the render target is {{GDI}}-compatible. </p> + + + + <p>Retrieves the device context associated with this render target. </p> + <p>Calling this method flushes the render target.</p><p>This command can be called only after <strong>BeginDraw</strong> and before <strong>EndDraw</strong>. </p><strong>Note</strong>??In Windows?7 and earlier, you should not call <strong>GetDC</strong> between <strong>PushAxisAlignedClip</strong>/<strong>PopAxisAlignedClip</strong> commands or between <strong>PushLayer</strong>/<strong>PopLayer</strong>. However, this restriction does not apply to Windows?8 and later.?<p> <strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that specifies whether the device context should be cleared.</p> </dd> + + + <dd> <p>When this method returns, contains the device context associated with this render target. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Indicates that drawing with the device context retrieved using the <strong>GetDC</strong> method is finished. </p> + <p><strong>ReleaseDC</strong> must be called once for each call to <strong>GetDC</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Issues drawing commands to a {{GDI}} device context. </p> + + + + + <p> Binds the render target to the device context to which it issues drawing commands.</p> + <p>Before you can render with the {{DC}} render target, you must use its <strong>BindDC</strong> method to associate it with a {{GDI}} {{DC}}. You do this each time you use a different {{DC}}, or the size of the area you want to draw to changes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The device context to which the render target issues drawing commands.</p> </dd> + + + <dd> <p>The dimensions of the handle to a device context ({{HDC}}) to which the render target is bound. </p> </dd> + + + + + <p>Creates a factory object that can be used to create Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface provides the starting point for Direct2D. In general, objects created from a single instance of a factory object can be used with other resources created from that instance, but not with resources created by other factory instances. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The threading model of the factory and the resources it creates.</p> </dd> + + + <dd> <p>A reference to the {{IID}} of <strong>{{ID2D1Factory}}</strong> that is obtained by using __uuidof({{ID2D1Factory}}).</p> </dd> + + + <dd> <p>The level of detail provided to the debugging layer.</p> </dd> + + + <dd> <p>When this method returns, contains the address to a reference to the new factory.</p> </dd> + + + + + <p>Creates a rotation transformation that rotates by the specified angle about the specified point.</p> + <p>Rotation occurs in the plane of the 2-D surface.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The clockwise rotation angle, in degrees. </p> </dd> + + + <dd> <p>The point about which to rotate.</p> </dd> + + + <dd> <p>When this method returns, contains the new rotation transformation. You must allocate storage for this parameter. </p> </dd> + + + + + <p>Creates a skew transformation that has the specified x-axis angle, y-axis angle, and center point. </p> + <p>This function does not return a value.</p> + + + <dd> <p>The x-axis skew angle, which is measured in degrees counterclockwise from the y-axis.</p> </dd> + + + <dd> <p>The y-axis skew angle, which is measured in degrees counterclockwise from the x-axis.</p> </dd> + + + <dd> <p>The center point of the skew operation.</p> </dd> + + + <dd> <p>When this method returns, contains the rotation transformation. You must allocate storate for this parameter.</p> </dd> + + + + + <p>Indicates whether the specified matrix is invertible.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to test.</p> </dd> + + + + + <p>Tries to invert the specified matrix.</p> + <p><strong>true</strong> if the matrix was inverted; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The matrix to invert.</p> </dd> + + + + + <p>Specifies the color context types.</p> + + + <dd> <p>An uninitialized color context.</p> </dd> + + + <dd> <p>A color context that is a full {{ICC}} color profile.</p> </dd> + + + <dd> <p>A color context that is one of a number of set color spaces (sRGB, AdobeRGB) that are defined in the {{EXIF}} specification.</p> </dd> + + + + + <p>Specifies the desired cache usage.</p> + <p>The <strong>CreateBitmap</strong> of the <strong>{{IWICImagingFactory}}</strong> interface does not support {{WICBitmapNoCache}} when the <em>pixelFormat</em> is a native pixel format provided by Windows Imaging Component ({{WIC}}).</p> + + + <dd> <p>Do not cache the bitmap.</p> </dd> + + + <dd> <p>Cache the bitmap when needed.</p> </dd> + + + <dd> <p>Cache the bitmap at initialization.</p> </dd> + + + + + <p>Specifies decode options.</p> + + + <dd> <p>Cache metadata when needed.</p> </dd> + + + <dd> <p>Cache metadata when decoder is loaded.</p> </dd> + + + + + <p>Specifies the cache options available for an encoder.</p> + + + <dd> <p>The encoder is cached in memory. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is cached to a temporary file. This option is not supported.</p> </dd> + + + <dd> <p>The encoder is not cached.</p> </dd> + + + + + <p>Specifies the type of Windows Imaging Component ({{WIC}}) component.</p> + + + <dd> <p>A {{WIC}} decoder.</p> </dd> + + + <dd> <p>A {{WIC}} encoder.</p> </dd> + + + <dd> <p>A {{WIC}} pixel converter.</p> </dd> + + + <dd> <p>A {{WIC}} metadata reader.</p> </dd> + + + <dd> <p>A {{WIC}} metadata writer.</p> </dd> + + + <dd> <p>A {{WIC}} pixel format.</p> </dd> + + + <dd> <p>All {{WIC}} components.</p> </dd> + + + + + <p>Specifies component enumeration options.</p> + + + <dd> <p>Enumerate any components that are not disabled. Because this value is 0x0, it is always included with the other options.</p> </dd> + + + <dd> <p>Force a read of the registry before enumerating components.</p> </dd> + + + <dd> <p>Include disabled components in the enumeration. The set of disabled components is disjoint with the set of default enumerated components</p> </dd> + + + <dd> <p>Include unsigned components in the enumeration. This option has no effect.</p> </dd> + + + <dd> <p>At the end of component enumeration, filter out any components that are not Windows provided.</p> </dd> + + + + + <p>Specifies the sampling or filtering mode to use when scaling an image.</p> + + + <dd> <p>A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation. </p> <p>The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.</p> </dd> + + + <dd> <p>A bilinear interpolation algorithm. </p> <p>The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid.</p> </dd> + + + <dd> <p>A bicubic interpolation algorithm. </p> <p>Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid. </p> </dd> + + + <dd> <p>A Fant resampling algorithm. </p> <p>Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel.</p> </dd> + + + <dd> <p>A high quality bicubic interpolation algorithm. Destination pixel values are computed using a much denser sampling kernel than regular cubic. The kernel is resized in response to the scale factor, making it suitable for downscaling by factors greater than 2.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? </dd> + + + + + <p>Specifies the type of palette used for an indexed image format.</p> + + + <dd> <p>An arbitrary custom palette provided by caller.</p> </dd> + + + <dd> <p>An optimal palette generated using a median-cut algorithm. Derived from the colors in an image.</p> </dd> + + + <dd> <p>A black and white palette.</p> </dd> + + + <dd> <p>A palette that has its 8-color on-off primaries and the 16 system colors added. With duplicates removed, 16 colors are available.</p> </dd> + + + <dd> <p>A palette that has 3 intensity levels of each primary: 27-color on-off primaries and the 16 system colors added. With duplicates removed, 35 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 intensity levels of each primary: 64-color on-off primaries and the 16 system colors added. With duplicates removed, 72 colors are available.</p> </dd> + + + <dd> <p>A palette that has 5 intensity levels of each primary: 125-color on-off primaries and the 16 system colors added. With duplicates removed, 133 colors are available.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteFixedHalftoneWeb}}</strong>.</p> </dd> + + + <dd> <p>A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as <strong>{{WICBitmapPaletteTypeFixedHalftone216}}</strong>.</p> </dd> + + + <dd> <p>A palette that has its 252-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has its 256-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.</p> </dd> + + + <dd> <p>A palette that has 4 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 16 shades of gray.</p> </dd> + + + <dd> <p>A palette that has 256 shades of gray.</p> </dd> + + + + + <p>Specifies the type of {{dither}} algorithm to apply when converting between image formats.</p> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A solid color algorithm without dither.</p> </dd> + + + <dd> <p>A 4x4 ordered dither algorithm. </p> </dd> + + + <dd> <p>An 8x8 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 16x16 ordered dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 spiral dither algorithm.</p> </dd> + + + <dd> <p>A 4x4 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An 8x8 dual spiral dither algorithm.</p> </dd> + + + <dd> <p>An error diffusion algorithm.</p> </dd> + + + + + <p>Specifies the desired alpha channel usage.</p> + + + <dd> <p>Use alpha channel.</p> </dd> + + + <dd> <p>Use a pre-multiplied alpha channel.</p> </dd> + + + <dd> <p>Ignore alpha channel.</p> </dd> + + + <dd> <p>Sentinel value.</p> </dd> + + + + + <p>Specifies the flip and rotation transforms.</p> + + + <dd> <p>A rotation of 0 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 90 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 180 degrees.</p> </dd> + + + <dd> <p>A clockwise rotation of 270 degrees.</p> </dd> + + + <dd> <p>A horizontal flip. Pixels are flipped around the vertical y-axis.</p> </dd> + + + <dd> <p>A vertical flip. Pixels are flipped around the horizontal x-axis.</p> </dd> + + + + + <p>Specifies access to an <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Specifies the capabilities of the decoder.</p> + + + <dd> <p>Decoder recognizes the image was encoded with an encoder produced by the same vendor. </p> <p></p> </dd> + + + <dd> <p>Decoder can decode all the images within an image container.</p> </dd> + + + <dd> <p>Decoder can decode some of the images within an image container.</p> </dd> + + + <dd> <p>Decoder can enumerate the metadata blocks within a container format.</p> </dd> + + + <dd> <p>Decoder can find and decode a thumbnail.</p> </dd> + + + + + <p>Specifies the progress operations to receive notifications for.</p> + + + <dd> <p>Receive copy pixel operation.</p> </dd> + + + <dd> <p>Receive write pixel operation.</p> </dd> + + + <dd> <p>Receive all progress operations available.</p> </dd> + + + + + <p>Specifies when the progress notification callback should be called.</p> + + + <dd> <p>The callback should be called when codec operations begin.</p> </dd> + + + <dd> <p>The callback should be called when codec operations end.</p> </dd> + + + <dd> <p>The callback should be called frequently to report status.</p> </dd> + + + <dd> <p>The callback should be called on all available progress notifications.</p> </dd> + + + + + <p>Specifies the component signing status.</p> + + + <dd> <p>A signed component.</p> </dd> + + + <dd> <p>An unsigned component</p> </dd> + + + <dd> <p>A component is safe. </p> <p>Components that do not have a binary component to sign, such as a pixel format, should return this value.</p> </dd> + + + <dd> <p>A component has been disabled.</p> </dd> + + + + + <p>Specifies the logical screen descriptor properties for Graphics Interchange Format ({{GIF}}) metadata.</p> + + + <dd> <p> [{{VT_UI1}} | {{VT_VECTOR}}] Indicates the signature property.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the width in pixels. </p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the height in pixels. </p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the global color table flag. <strong>{{TRUE}}</strong> if a global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the color resolution in bits per pixel.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the table is sorted; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the index within the color table to use for the background (pixels not defined in the image).</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the factor used to compute an approximation of the aspect ratio.</p> </dd> + + + + + <p>Specifies the image descriptor metadata properties for Graphics Interchange Format ({{GIF}}) frames.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the X offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates the Y offset at which to locate this frame within the logical screen.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates width of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates height of this frame, in pixels.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the local color table flag. <strong>{{TRUE}}</strong> if global color table is present; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the interlace flag. <strong>{{TRUE}}</strong> if image is interlaced; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the sorted color table flag. <strong>{{TRUE}}</strong> if the color table is sorted from most frequently to least frequently used color; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the value used to calculate the number of bytes contained in the global color table. </p> <p>To calculate the actual size of the color table, raise 2 to the value of the field + 1.</p> </dd> + + + + + <p>Specifies the graphic control extension metadata properties that define the transitions between each frame animation for Graphics Interchange Format ({{GIF}}) images.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the disposal requirements. 0 - no disposal, 1 - do not dispose, 2 - restore to background color, 3 - restore to previous.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the user input flag. <strong>{{TRUE}}</strong> if user input should advance to the next frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_BOOL}}] Indicates the transparency flag. <strong>{{TRUE}}</strong> if a transparent color in is in the color table for this frame; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] Indicates how long to display the next frame before advancing to the next frame, in units of 1/100th of a second.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates which color in the palette should be treated as transparent.</p> </dd> + + + + + <p>Specifies the application extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates a string that identifies the application.</p> </dd> + + + <dd> <p>[{{VT_UI1}} | {{VT_VECTOR}}] Indicates data that is exposed by the application.</p> </dd> + + + + + <p>Specifies the comment extension metadata properties for a Graphics Interchange Format ({{GIF}}) image.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} comment properties.</p> + + + <dd> <p>Indicates the metadata property is comment text.</p> </dd> + + + + + <p>Specifies the {{JPEG}} luminance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a luminance table.</p> </dd> + + + + + <p>Specifies the {{JPEG}} chrominance table property.</p> + + + <dd> <p>[{{VT_UI2}}|{{VT_VECTOR}}] Indicates the metadata property is a chrominance table.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UNKNOWN}}] The {{IPTC}} block embedded in this 8BIM {{IPTC}} block.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIMResolutionInfo block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The horizontal resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the horizontal resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image width is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] The vertical resolution of the image.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the vertical resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.</p> </dd> + + + <dd> <p>[{{VT_UI2}}] The units that the image height is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.</p> </dd> + + + + + <p>Specifies the identifiers of the metadata items in an 8BIM {{IPTC}} digest metadata block.</p> + + + <dd> <p>[{{VT_LPSTR}}] A name that identifies the 8BIM block.</p> </dd> + + + <dd> <p>[{{VT_BLOB}}] The embedded {{IPTC}} digest value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) gAMA chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the gamma value.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) background (bKGD) chunk metadata properties.</p> + + + <dd> <p>Indicates the background color. There are three possible types, depending on the image's pixel format.</p> <p></p> <dl> <dt>{{VT_UI1}}</dt> <dd> <p>Specifies the index of the background color in an image with an indexed pixel format.</p> </dd> <dt>{{VT_UI2}}</dt> <dd> <p>Specifies the background color in a grayscale image.</p> </dd> <dt>{{VT_VECTOR}}|{{VT_UI2}}</dt> <dd> <p>Specifies the background color in an {{RGB}} image as three {{USHORT}} values: {0x<em>{{RRRR}}</em>, 0x<em>{{GGGG}}</em>, 0x<em>{{BBBB}}</em>}.</p> </dd> </dl> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iTXT chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the keywords in the iTXT metadata chunk.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates whether the text in the iTXT chunk is compressed. 1 if the text is compressed; otherwise, 0.</p> </dd> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the human language used by the translated keyword and the text.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates a translation of the keyword into the language indicated by the language tag.</p> </dd> + + + <dd> <p>[{{VT_LPWSTR}}] Indicates additional text in the iTXT metadata chunk.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) cHRM chunk metadata properties for {{CIE}} {{XYZ}} chromaticity.</p> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the whitepoint y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the red y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the green y value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue x value ratio.</p> </dd> + + + <dd> <p>[{{VT_UI4}}] Indicates the blue y value ratio.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) hIST chunk metadata properties.</p> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI2}}] Indicates the approximate usage frequency of each color in the color palette. </p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) iCCP chunk metadata properties.</p> + + + <dd> <p>[{{VT_LPSTR}}] Indicates the International Color Consortium ({{ICC}}) profile name.</p> </dd> + + + <dd> <p>[{{VT_VECTOR}} | {{VT_UI1}}] Indicates the embedded {{ICC}} profile.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) sRGB chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI1}}] Indicates the rendering intent for an sRGB color space image. The rendering intents have the following meaning.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td>0</td><td>Perceptual</td></tr> <tr><td>1</td><td>Relative colorimetric</td></tr> <tr><td>2</td><td>Saturation</td></tr> <tr><td>3</td><td>Absolute colorimetric</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) tIME chunk metadata properties.</p> + + + <dd> <p>[{{VT_UI2}}] Indicates the year of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the month of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates day of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the hour of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the minute of the last modification.</p> </dd> + + + <dd> <p>[{{VT_UI1}}] Indicates the second of the last modification.</p> </dd> + + + + + <p>Specifies the access level of a Windows Graphics Device Interface ({{GDI}}) section.</p> + + + <dd> <p>Indicates a read only access level.</p> </dd> + + + <dd> <p>Indicates a read/write access level.</p> </dd> + + + + + + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies additional options to an <strong>{{IWICPlanarBitmapSourceTransform}}</strong> implementation. </p> + + + + <p>Specifies the options for indexing a {{JPEG}} image. </p> + + + <dd> <p>Index generation is deferred until <strong>{{IWICBitmapSource::CopyPixels}}</strong> is called on the image.</p> </dd> + + + <dd> <p>Index generation is performed when the when the image is initially loaded.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies conversion matrix from Y'Cb'Cr' to R'G'B'. </p> + + + <dd> <p>Specifies the identity transfer matrix.</p> </dd> + + + <dd> <p>Specifies the {{BT601}} transfer matrix.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the memory layout of pixel data in a {{JPEG}} image scan. </p> + + + <dd> <p>The pixel data is stored in an interleaved memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a planar memory layout.</p> </dd> + + + <dd> <p>The pixel data is stored in a progressive layout.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used. </p> </dd> + + + + + <p>Specifies the Tagged Image File Format ({{TIFF}}) compression options.</p> + + + <dd> <p>Indicates a suitable compression algorithm based on the image and pixel format.</p> </dd> + + + <dd> <p>Indicates no compression.</p> </dd> + + + <dd> <p>Indicates a {{CCITT3}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{CCITT4}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{LZW}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates a {{RLE}} compression algorithm. This algorithm is only valid for 1bpp pixel formats.</p> </dd> + + + <dd> <p>Indicates a {{ZIP}} compression algorithm.</p> </dd> + + + <dd> <p>Indicates an {{LZWH}} differencing algorithm.</p> </dd> + + + + + <p>Specifies the {{JPEG}} {{YCrCB}} subsampling options. </p> + <p>The native {{JPEG}} encoder uses <strong>{{WICJpegYCrCbSubsampling420}}</strong>.</p> + + + <dd> <p>The default subsampling option. </p> </dd> + + + <dd> <p>Subsampling option that uses both horizontal and vertical decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses horizontal decimation .</p> </dd> + + + <dd> <p>Subsampling option that uses no decimation.</p> </dd> + + + <dd> <p>Subsampling option that uses 2x vertical downsampling only. This option is only available in Windows?8.1 and later.</p> </dd> + + + + + <p>Specifies the Portable Network Graphics ({{PNG}}) filters available for compression optimization.</p> + + + <dd> <p>Indicates an unspecified {{PNG}} filter. This enables {{WIC}} to algorithmically choose the best filtering option for the image.</p> </dd> + + + <dd> <p>Indicates no {{PNG}} filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} sub filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} up filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} average filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} paeth filter.</p> </dd> + + + <dd> <p>Indicates a {{PNG}} adaptive filter. This enables {{WIC}} to choose the best filtering mode on a per-scanline basis.</p> </dd> + + + + + <p>Specifies named white balances for raw images.</p> + + + <dd> <p>The default white balance.</p> </dd> + + + <dd> <p>A daylight white balance.</p> </dd> + + + <dd> <p>A cloudy white balance.</p> </dd> + + + <dd> <p>A shade white balance.</p> </dd> + + + <dd> <p>A tungsten white balance.</p> </dd> + + + <dd> <p>A fluorescent white balance.</p> </dd> + + + <dd> <p>Daylight white balance.</p> </dd> + + + <dd> <p>A flash white balance.</p> </dd> + + + <dd> <p>A custom white balance. This is typically used when using a picture (grey-card) as white balance.</p> </dd> + + + <dd> <p>An automatic balance.</p> </dd> + + + <dd> <p>An "as shot" white balance.</p> </dd> + + + + + <p>Specifies the capability support of a raw image.</p> + + + <dd> <p>The capability is not supported.</p> </dd> + + + <dd> <p>The capability supports only get operations.</p> </dd> + + + <dd> <p>The capability supports get and set operations.</p> </dd> + + + + + <p>Specifies the rotation capabilities of the codec.</p> + + + <dd> <p>Rotation is not supported.</p> </dd> + + + <dd> <p>Set operations for rotation is not supported.</p> </dd> + + + <dd> <p>90 degree rotations are supported.</p> </dd> + + + <dd> <p>All rotation angles are supported.</p> </dd> + + + + + <p>Specifies the parameter set used by a raw codec.</p> + + + <dd> <p>An as shot parameter set.</p> </dd> + + + <dd> <p>A user adjusted parameter set.</p> </dd> + + + <dd> <p>A codec adjusted parameter set.</p> </dd> + + + + + <p>Specifies the render intent of the next <strong>CopyPixels</strong> call. </p> + + + + <p>Specifies the dimension type of the data contained in {{DDS}} image.</p> + <p>Both <strong>{{WICDdsTexture2d}}</strong> and <strong>{{WICDdsTextureCube}}</strong> correspond to <strong>{{D3D11_RESOURCE_DIMENSION_TEXTURE2D}}</strong>. When using <strong>{{ID3D11Device::CreateTexture2D}}</strong>, they are distinguished by the flag <strong>{{D3D11_RESOURCE_MISC_TEXTURECUBE}}</strong> in the structure <strong>{{D3D11_TEXTURE2D_DESC}}</strong>.</p> + + + <dd> <p>{{DDS}} image contains a 1-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 2-dimensional texture . </p> </dd> + + + <dd> <p>{{DDS}} image contains a 3-dimensional texture . </p> </dd> + + + <dd> <p>The {{DDS}} image contains a cube texture represented as an array of 6 faces. </p> </dd> + + + + + <p>Specifies the the meaning of pixel color component values contained in the {{DDS}} image.</p> + + + <dd> <p>Alpha behavior is unspecified and must be determined by the reader.</p> </dd> + + + <dd> <p>The alpha data is straight.</p> </dd> + + + <dd> <p>The alpha data is premultiplied.</p> </dd> + + + <dd> <p>The alpha data is opaque ({{UNORM}} value of 1). This can be used by a compliant reader as a performance optimization. For example, blending operations can be converted to copies.</p> </dd> + + + <dd> <p>The alpha channel contains custom data that is not alpha.</p> </dd> + + + + + <p>Represents a rectangle for Windows Imaging Component ({{WIC}})?{{API}}.</p> + + + <dd> <p>The horizontal coordinate of the rectangle.</p> </dd> + + + <dd> <p>The vertical coordinate of the rectangle.</p> </dd> + + + <dd> <p>The width of the rectangle.</p> </dd> + + + <dd> <p>The height of the rectangle.</p> </dd> + + + + + <p>Contains members that identify a pattern within an image file which can be used to identify a particular format.</p> + + + <dd> <p>The offset the pattern is located in the file.</p> </dd> + + + <dd> <p>The pattern length.</p> </dd> + + + <dd> <p>The actual pattern.</p> </dd> + + + <dd> <p>The pattern mask.</p> </dd> + + + <dd> <p>The end of the stream.</p> </dd> + + + + + <p>This defines parameters that you can use to override the default parameters normally used when encoding an image. </p> + <p>If this parameter is not passed to the encoding {{API}}, the encoder uses these settings.</p><ul> <li>A pixel format of (<strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>).</li> <li>An x and y {{DPI}} of 96.</li> <li>The entire image bounds will be used for encoding.</li> </ul><strong>Note</strong>??The parameters as specified can't result in a scale. The encoder can use a larger portion of the input image based on the passed in {{DPI}} and the pixel width and height.? + + + <dd> <p>The pixel format to which the image is processed before it is written to the encoder.</p> </dd> + + + <dd> <p>The {{DPI}} in the x dimension.</p> </dd> + + + <dd> <p>The {{DPI}} in the y dimension.</p> </dd> + + + <dd> <p>The top corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The left corner in pixels of the image space to be encoded to the destination.</p> </dd> + + + <dd> <p>The width in pixels of the part of the image to write.</p> </dd> + + + <dd> <p>The height in pixels of the part of the image to write.</p> </dd> + + + + + <p>Specifies the pixel format and size of a component plane.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Component width of the plane.</p> </dd> + + + <dd> <p>Component height of the plane.</p> </dd> + + + + + <p>Specifies the pixel format, buffer, stride and size of a component plane for a planar pixel format.</p> + + + <dd> <p>Describes the pixel format of the plane. </p> </dd> + + + <dd> <p>Pointer to the buffer that holds the plane?s pixel components.</p> </dd> + + + <dd> <p>The stride of the buffer ponted to by <em>pbData</em>. Stride indicates the total number of bytes to go from the beginning of one scanline to the beginning of the next scanline.</p> </dd> + + + <dd> <p>The total size of the buffer pointed to by <em>pbBuffer</em>.</p> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the frame header for an image by calling <strong>{{IWICJpegFrameDecode::GetFrameHeader}}</strong>.</p> + + + <dd> <p>The width of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The height of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The transfer matrix of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The scan type of the {{JPEG}} frame.</p> </dd> + + + <dd> <p>The number of components in the frame.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The sample factors. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_SAMPLE_FACTORS_ONE}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_420}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_422}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_440}}</li> <li>{{WIC_JPEG_SAMPLE_FACTORS_THREE_444}}</li> </ul> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_ONE}}</li> <li>{{WIC_JPEG_QUANTIZATION_BASELINE_THREE}} </li> </ul> </dd> + + + + + <p>Represents a {{JPEG}} frame header.</p> + <p>Get the scan header for an image by calling <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> + + + <dd> <p>The number of components in the scan.</p> </dd> + + + <dd> <p>The interval of reset markers within the scan.</p> </dd> + + + <dd> <p>The component identifiers.</p> </dd> + + + <dd> <p>The format of the quantization table indices. Use one of the following constants, described in <strong>{{IWICJpegFrameDecode}} Constants</strong>.</p> <ul> <li>{{WIC_JPEG_HUFFMAN_BASELINE_ONE}}</li> <li>{{WIC_JPEG_HUFFMAN_BASELINE_THREE}} </li> </ul> </dd> + + + <dd> <p>The start of the spectral selection.</p> </dd> + + + <dd> <p>The end of the spectral selection.</p> </dd> + + + <dd> <p>The successive approximation high.</p> </dd> + + + <dd> <p>The successive approximation low.</p> </dd> + + + + + <p>Defines raw codec capabilites.</p> + + + <dd> <p>Size of the <strong>{{WICRawCapabilitiesInfo}}</strong> structure.</p> </dd> + + + <dd> <p>The codec's major version.</p> </dd> + + + <dd> <p>The codec's minor version.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of exposure compensation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of contrast support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of {{RGB}} white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICNamedWhitePoint}}</strong> support.</p> </dd> + + + <dd> <p>The <strong>{{WICNamedWhitePoint}}</strong> mask.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of kelvin white point support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of gamma support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tint support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of saturation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of sharpness support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of noise reduction support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of destination color profile support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of tone curve support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawRotationCapabilities}}</strong> of rotation support.</p> </dd> + + + <dd> <p>The <strong>{{WICRawCapabilities}}</strong> of <strong>{{WICRawRenderMode}}</strong> support.</p> </dd> + + + + + <p>Represents a raw image tone curve point.</p> + + + <dd> <p>The tone curve input.</p> </dd> + + + <dd> <p>The tone curve output.</p> </dd> + + + + + <p>Represents a raw image tone curve.</p> + + + <dd> <p>The number of tone curve points.</p> </dd> + + + <dd> <p>The array of tone curve points.</p> </dd> + + + + + <p>Specifies the {{DDS}} image dimension, <strong>{{DXGI_FORMAT}}</strong> and alpha mode of contained data.</p> + + + + <p>Specifies the <strong>{{DXGI_FORMAT}}</strong> and block information of a {{DDS}} format.</p> + + + + <p>Defines methods that add the concept of writeability and static in-memory representations of bitmaps to <strong>{{IWICBitmapSource}}</strong>. </p> + <p><strong>{{IWICBitmap}}</strong> inherits from <strong>{{IWICBitmapSource}}</strong> and therefore also inherits the <strong>CopyPixels</strong> method. When pixels need to be moved to a new memory location, <strong>CopyPixels</strong> is often the most efficient. </p><p> Because of to the internal memory representation implied by the <strong>{{IWICBitmap}}</strong>, in-place modification and processing using the <strong>Lock</strong> is more efficient than <strong>CopyPixels</strong>, usually reducing to a simple reference access directly into the memory owned by the bitmap rather than a as a copy. This is contrasted to procedural bitmaps which implement only <strong>CopyPixels</strong> because there is no internal memory representation and one would need to be created on demand to satisfy a call to <strong>Lock</strong>. </p> + + + + <p>Provides access to a rectangular area of the bitmap.</p> + <p>Locks are exclusive for writing but can be shared for reading. You cannot call <strong>CopyPixels</strong> while the <strong>{{IWICBitmap}}</strong> is locked for writing. Doing so will return an error, since locks are exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to be accessed.</p> </dd> + + + <dd> <p>The access mode you wish to obtain for the lock. This is a bitwise combination of <strong>{{WICBitmapLockFlags}}</strong> for read, write, or read and write access.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockRead}}</strong></dt> </dl> </td><td> <p>The read access lock.</p> </td></tr> <tr><td><dl> <dt><strong>{{WICBitmapLockWrite}}</strong></dt> </dl> </td><td> <p>The write access lock.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference that receives the locked memory location.</p> </dd> + + + + + <p>Provides access for palette modifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + + + <p>Changes the physical resolution of the image.</p> + <p> This method has no effect on the actual pixels or samples stored in the bitmap. Instead the interpretation of the sampling rate is modified. This means that a 96 {{DPI}} image which is 96 pixels wide is one inch. If the physical resolution is modified to 48 {{DPI}}, then the bitmap is considered to be 2 inches wide but has the same number of pixels. If the resolution is less than <strong>{{REAL_EPSILON}}</strong> (1.192092896e-07F) the error code <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong> is returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution.</p> </dd> + + + <dd> <p>The vertical resolution.</p> </dd> + + + + + <p>Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.</p> + <p>This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and scalers. Components that implement this interface can be connected together in a graph to pull imaging data through.</p><p>This interface defines only the notion of readability or being able to produce pixels. Modifying or writing to a bitmap is considered to be a specialization specific to bitmaps which have storage and is defined in the descendant interface <strong>{{IWICBitmap}}</strong>.</p> + + + + <p>Retrieves the pixel width and height of the bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel width of the bitmap.</p> </dd> + + + <dd> <p>A reference that receives the pixel height of the bitmap</p> </dd> + + + + + <p>Retrieves the pixel format of the bitmap source.. </p> + <p> The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the pixel format {{GUID}} the bitmap is stored in. For a list of available pixel formats, see the Native Pixel Formats topic.</p> </dd> + + + + + <p>Specifies the viewport/stencil and render target associated with a view instance.</p> + <p>The values specified in a view instance location structure can be added to ViewportArrayIndex and RenderTargetArrayIndex values output by the shader prior to rasterization to compute the final effective index of the viewport and render target to send primitives to. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in a {{PSO}} to the same value to act as a uniform base value for all views.</p> + + + <dd> <p> The index of the viewport in the viewports array to be used by the view instance associated with this location. </p> </dd> + + + <dd> <p> The index of the render target in the render targets array to be used by the view instance associated with this location. </p> </dd> + + + + + <p>Retrieves the sampling rate between pixels and physical world measurements.</p> + <p> Some formats, such as {{GIF}} and {{ICO}}, do not have full {{DPI}} support. For {{GIF}}, this method calculates the {{DPI}} values from the aspect ratio, using a base {{DPI}} of (96.0, 96.0). The {{ICO}} format does not support {{DPI}} at all, and the method always returns (96.0,96.0) for {{ICO}} images. </p><p> Additionally, {{WIC}} itself does not transform images based on the {{DPI}} values in an image. It is up to the caller to transform an image based on the resolution returned. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the x-axis dpi resolution.</p> </dd> + + + <dd> <p>A reference that receives the y-axis dpi resolution.</p> </dd> + + + + + <p>Retrieves the color table for indexed pixel formats.</p> + <p> If the <strong>{{IWICBitmapSource}}</strong> is an <strong>{{IWICBitmapFrameDecode}}</strong>, the function may return the image's global palette if a frame-level palette is not available. The global palette may also be retrieved using the <strong>CopyPalette</strong> method. </p> + <p>Returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_PALETTEUNAVAILABLE}}</strong></dt> </dl> </td><td> <p>The palette was unavailable.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The palette was successfully copied.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{IWICPalette}}</strong>. A palette can be created using the <strong>CreatePalette</strong> method.</p> </dd> + + + + + <p>Instructs the object to produce pixels.</p> + <p><strong>CopyPixels</strong> is one of the two main image processing routines (the other being <strong>Lock</strong>) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a {{JPEG}} stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface. </p><p> The caller can restrict the operation to a rectangle of interest ({{ROI}}) using the prc parameter. The {{ROI}} sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a <strong>{{NULL}}</strong> {{ROI}} implies that the whole bitmap should be returned. +</p><p> The caller controls the memory management and must provide an output buffer (<em>pbBuffer</em>) for the results of the copy along with the buffer's bounds (<em>cbBufferSize</em>). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method. </p><p> If the caller needs to perform numerous copies of an expensive <strong>{{IWICBitmapSource}}</strong> such as a {{JPEG}}, it is recommended to create an in-memory <strong>{{IWICBitmap}}</strong> first. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy. A <strong>{{NULL}}</strong> value specifies the entire bitmap.</p> </dd> + + + <dd> <p>The stride of the bitmap</p> </dd> + + + <dd> <p>The size of the buffer.</p> </dd> + + + <dd> <p>A reference to the buffer.</p> </dd> + + + + + <p>Exposes methods for accessing and building a color table, primarily for indexed pixel formats.</p> + <p>If the <strong>{{WICBitmapPaletteType}}</strong> is not <strong>{{WICBitmapPaletteCustom}}</strong>, then the colors are automatically generated based on the table above. If the user subsequently changes a color palette entry the {{WICBitmapPalette}} is set to Custom by that action.</p><p> <strong>InitializeFromBitmap</strong>'s <em>fAddTransparentColor</em> parameter will add a transparent color to the end of the color collection if its size if less than 256, otherwise index 255 will be replaced with the transparent color. If a pre-defined palette type is used, it will change to BitmapPaletteTypeCustom since it no longer matches the predefined palette.</p><p>The palette interface is an auxiliary imaging interface in that it does not directly concern bitmaps and pixels; rather it provides indexed color translation for indexed bitmaps. For an indexed pixel format with M bits per pixels: (The number of colors in the palette) greater than 2^M.</p><p>Traditionally the basic operation of the palette is to provide a translation from a byte (or smaller) index into a 32bpp color value. This is often accomplished by a 256 entry table of color values.</p> + + + + <p>Initializes the palette to one of the pre-defined palettes specified by <strong>{{WICBitmapPaletteType}}</strong> and optionally adds a transparent color.</p> + <p>If a transparent color is added to a palette, the palette is no longer predefined and is returned as <strong>{{WICBitmapPaletteTypeCustom}}</strong>. For palettes with less than 256 entries, the transparent entry is added to the end of the palette (that is, a 16-color palette becomes a 17-color palette). For palettes with 256 colors, the transparent palette entry will replace the last entry in the pre-defined palette. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>InitializeCustom</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes a palette using a computed optimized values based on the reference bitmap.</p> + <p> The resulting palette contains the specified number of colors which best represent the colors present in the bitmap. The algorithm operates on the opaque {{RGB}} color value of each pixel in the reference bitmap and hence ignores any alpha values. If a transparent color is required, set the fAddTransparentColor parameter to <strong>{{TRUE}}</strong> and one fewer optimized color will be computed, reducing the <em>colorCount</em>, and a fully transparent color entry will be added. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source bitmap.</p> </dd> + + + <dd> <p>The number of colors to initialize the palette with.</p> </dd> + + + <dd> <p>A value to indicate whether to add a transparent color.</p> </dd> + + + + + <p>Initialize the palette based on a given palette.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the source palette.</p> </dd> + + + + + <p>Retrieves the <strong>{{WICBitmapPaletteType}}</strong> that describes the palette. </p> + <p><strong>{{WICBitmapPaletteCustom}}</strong> is used for palettes initialized from both <strong>InitializeCustom</strong> and <strong>InitializeFromBitmap</strong>. There is no distinction is made between optimized and custom palettes.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetColorCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Fills out the supplied color array with the colors from the internal color table. The color array should be sized according to the return results from <strong>GetColorCount</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value that describes whether the palette is black and white.</p> + <p>A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is black and white. <strong>{{TRUE}}</strong> indicates that the palette is black and white; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value that describes whether a palette is grayscale.</p> + <p>A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a boolean value that indicates whether the palette is grayscale. <strong>{{TRUE}}</strong> indicates that the palette is grayscale; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Proxy function for the <strong>HasAlpha</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Initializes the format converter.</p> + <p> If you do not have a predefined palette, you must first create one. Use <strong>InitializeFromBitmap</strong> to create the palette object, then pass it in along with your other parameters. </p><p><em>dither</em>, <em>pIPalette</em>, <em>alphaThresholdPercent</em>, and <em>paletteTranslate</em> are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: <em>dither</em> set to <strong>{{WICBitmapDitherTypeNone}}</strong>, <em>pIPalette</em> set to <strong>{{NULL}}</strong>, <em>alphaThresholdPercent</em> set to <strong>0.0f</strong>, and <em>paletteTranslate</em> set to <strong>{{WICBitmapPaletteTypeCustom}}</strong>. </p><p> The basic algorithm involved when using an ordered dither requires a fixed palette, found in the <strong>{{WICBitmapPaletteType}}</strong> enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The <em>pIPalette</em> is the actual destination palette to be used and the <em>paletteTranslate</em> is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in <em>pIPalette</em> using a nearest color matching algorithm. </p><p> If colors in <em>pIPalette</em> do not closely match those in <em>paletteTranslate</em>, the mapping may produce undesireable results. </p><p><strong>{{WICBitmapDitherTypeOrdered4x4}}</strong> can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data. </p><p><strong>{{WICBitmapDitherTypeErrorDiffusion}}</strong> selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, <strong>{{WICBitmapPaletteCustom}}</strong> should be passed in as the <em>paletteTranslate</em>. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the <strong>{{IWICPalette}}</strong>. </p><p> When converting a bitmap which has an alpha channel, such as a Portable Network Graphics ({{PNG}}), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats. </p><p> Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format ({{GIF}}) format allows for a single palette entry to be used as a transparent color. For this type of content, <em>alphaThresholdPercent</em> specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the <em>alphaThresholdPercent</em> indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap to convert</p> </dd> + + + <dd> <p>The destination pixel format {{GUID}}.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Determines if the source pixel format can be converted to the destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source pixel format.</p> </dd> + + + <dd> <p>The destionation pixel format.</p> </dd> + + + <dd> <p>A reference that receives a value indicating whether the source pixel format can be converted to the destination pixel format.</p> </dd> + + + + + <p>Allows a format converter to be initialized with a planar source. You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICFormatConverter}}</strong>.</p> + + + + <p>Initializes a format converter with a planar source, and specifies the interleaved output pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of <strong>{{IWICBitmapSource}}</strong> that represents image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDitherType}}</strong> used for conversion.</p> </dd> + + + <dd> <p>The palette to use for conversion.</p> </dd> + + + <dd> <p>The alpha threshold to use for conversion.</p> </dd> + + + <dd> <p>The palette translation type to use for conversion.</p> </dd> + + + + + <p>Query if the format converter can convert from one format to another.</p> + <p>To specify an interleaved input pixel format, provide a length 1 array to <em>pSrcPixelFormats</em>.</p> + <p>If the conversion is not supported, this method returns {{S_OK}}, but *<em>pfCanConvert</em> is set to {{FALSE}}. </p><p>If this method fails, the out parameter <em>pfCanConvert</em> is invalid.</p> + + + <dd> <p>An array of {{WIC}} pixel formats that represents source image planes.</p> </dd> + + + <dd> <p>The number of source pixel formats specified by the <em>pSrcFormats</em> parameter.</p> </dd> + + + <dd> <p>The destination interleaved pixel format.</p> </dd> + + + <dd> <p>True if the conversion is supported.</p> </dd> + + + + + <p>Represents a resized version of the input bitmap using a resampling or filtering algorithm.</p> + <p>Images can be scaled to larger sizes; however, even with sophisticated scaling algorithms, there is only so much information in the image and artifacts tend to worsen the more you scale up.</p><p> The scaler will reapply the resampling algorithm every time <strong>CopyPixels</strong> is called. If the scaled image is to be animated, the scaled image should be created once and cached in a new bitmap, after which the <strong>{{IWICBitmapScaler}}</strong> may be released. In this way the scaling algorithm - which may be computationally expensive relative to drawing - is performed only once and the result displayed many times. </p><p> The scaler is optimized to use the minimum amount of memory required to scale the image correctly. The scaler may be used to produce parts of the image incrementally (banding) by calling <strong>CopyPixels</strong> with different rectangles representing the output bands of the image. Resampling typically requires overlapping rectangles from the source image and thus may need to request the same pixels from the source bitmap multiple times. Requesting scanlines out-of-order from some image decoders can have a significant performance penalty. Because of this reason, the scaler is optimized to handle consecutive horizontal bands of scanlines (rectangle width equal to the bitmap width). In this case the accumulator from the previous vertically adjacent rectangle is re-used to avoid duplicate scanline requests from the source. This implies that banded output from the scaler may have better performance if the bands are requested sequentially. Of course if the scaler is simply used to produce a single rectangle output, this concern is eliminated because the scaler will internally request scanlines in the correct order. </p> + + + + <p>Initializes the bitmap scaler with the provided parameters.</p> + <p> <strong>{{IWICBitmapScaler}}</strong> can't be initialized multiple times. For example, when scaling every frame in a multi-frame image, a new <strong>{{IWICBitmapScaler}}</strong> must be created and initialized for each frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The destination width.</p> </dd> + + + <dd> <p>The desination height.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapInterpolationMode}}</strong> to use when scaling.</p> </dd> + + + + + <p>Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.</p> + + + + <p>Initializes the bitmap clipper with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>he input bitmap source.</p> </dd> + + + <dd> <p>The rectangle of the bitmap source to clip.</p> </dd> + + + + + <p>Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. Rotations are done before the flip.</p> + <p>{{IWICBitmapFipRotator}} requests data on a per-pixel basis, while {{WIC}} codecs provide data on a per-scanline basis. This causes the fliprotator object to exhibit n? behavior if there is no buffering. This occures because each pixel in the transformed image requires an entire scanline to be decoded in the file. It is recommended that you buffer the image using <strong>{{IWICBitmap}}</strong>, or flip/rotate the image using Direct2D.</p> + + + + <p>Initializes the bitmap flip rotator with the provided parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input bitmap source.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapTransformOptions}}</strong> to flip or rotate the image.</p> </dd> + + + + + <p>Exposes methods that support the <strong>Lock</strong> method.</p> + <p>The bitmap lock is simply an abstraction for a rectangular memory window into the bitmap. For the simplest case, a system memory bitmap, this is simply a reference to the top left corner of the rectangle and a stride value.</p><p>To release the exclusive lock set by <strong>Lock</strong> method and the associated <strong>{{IWICBitmapLock}}</strong> object, call {{IUnknown::Release}} on the <strong>{{IWICBitmapLock}}</strong> object.</p> + + + + <p>Retrieves the width and height, in pixels, of the locked rectangle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the width of the locked rectangle.</p> </dd> + + + <dd> <p>A reference that receives the height of the locked rectangle.</p> </dd> + + + + + <p>Provides access to the {{stride}} value for the memory.</p> + <p> Note the {{stride}} value is specific to the <strong>{{IWICBitmapLock}}</strong>, not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> </dd> + + + + + <p>Gets the reference to the top left pixel in the locked rectangle.</p> + <p>The reference provided by this method should not be used outside of the lifetime of the lock itself.</p><p><strong>GetDataPointer</strong> is not available in multi-threaded apartment applications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the size of the buffer.</p> </dd> + + + <dd> <p>A reference that receives a reference to the top left pixel in the locked rectangle.</p> </dd> + + + + + <p>Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the pixel format {{GUID}} of the locked area.</p> </dd> + + + + + <p>Exposes methods for color management.</p> + <p>A Color Context is an abstraction for a color profile. The profile can either be loaded from a file (like "sRGB Color Space Profile.icm"), read from a memory buffer, or can be defined by an {{EXIF}} color space. The system color profile directory can be obtained by calling <strong>GetColorDirectory</strong>.</p><p>Once a color context has been initialized, it cannot be re-initialized.</p> + + + + <p>Initializes the color context from the given file.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the file.</p> </dd> + + + + + <p>Initializes the color context from a memory block.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffer used to initialize the <strong>{{IWICColorContext}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + + + <p>Initializes the color context using an Exchangeable Image File ({{EXIF}}) color space.</p> + <p>Once a color context has been initialized, it can't be re-initialized. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The value of the {{EXIF}} color space.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the color context type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICColorContextType}}</strong> of the color context.</p> </dd> + + + + + <p>Retrieves the color context profile.</p> + <p>Only use this method if the context type is <strong>{{WICColorContextProfile}}</strong>. +</p><p>Calling this method with <em>pbBuffer</em> set to <strong>{{NULL}}</strong> will cause it to return the required buffer size in <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pbBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the color context profile.</p> </dd> + + + <dd> <p>A reference that receives the actual buffer size needed to retrieve the entire color context profile.</p> </dd> + + + + + <p>Retrieves the Exchangeable Image File ({{EXIF}}) color space color context.</p> + <p>This method should only be used when <strong>{{IWICColorContext::GetType}}</strong> indicates <strong>{{WICColorContextExifColorSpace}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the {{EXIF}} color space color context.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>1</dt> </dl> </td><td> <p>A sRGB color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>2</dt> </dl> </td><td> <p>An Adobe {{RGB}} color space.</p> </td></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>3 through 65534</dt> </dl> </td><td> <p>Unused.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Exposes methods that transforms an <strong>{{IWICBitmapSource}}</strong> from one color context to another.</p> + <p>A <strong>{{IWICColorTransform}}</strong> is an imaging pipeline component that knows how to pull pixels obtained from a given <strong>{{IWICBitmapSource}}</strong> through a color transform. The color transform is defined by mapping colors from the source color context to the destination color context in a given output pixel format.</p><p>Once initialized, a color transform cannot be reinitialized. Because of this, a color transform cannot be used with multiple sources or varying parameters.</p> + + + + <p>Initializes an <strong>{{IWICColorTransform}}</strong> with a <strong>{{IWICBitmapSource}}</strong> and transforms it from one <strong>{{IWICColorContext}}</strong> to another. </p> + <p>The currently supported formats for the <em>pIContextSource</em> and <em>pixelFmtDest</em> parameters are: +</p><ul> <li>{{GUID_WICPixelFormat8bppGray}}</li> <li>{{GUID_WICPixelFormat16bppGray}}</li> <li>{{GUID_WICPixelFormat16bppBGR555}}</li> <li>{{GUID_WICPixelFormat16bppBGR565}}</li> <li>{{GUID_WICPixelFormat24bppBGR}}</li> <li>{{GUID_WICPixelFormat24bppRGB}}</li> <li>{{GUID_WICPixelFormat32bppBGR}}</li> <li>{{GUID_WICPixelFormat32bppBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPBGRA}}</li> <li>{{GUID_WICPixelFormat32bppPRGBA}} (Windows?8 and later)</li> <li>{{GUID_WICPixelFormat32bppRGBA}}</li> <li>{{GUID_WICPixelFormat32bppBGR101010}}</li> <li>{{GUID_WICPixelFormat32bppCMYK}}</li> <li>{{GUID_WICPixelFormat48bppBGR}}</li> <li>{{GUID_WICPixelFormat64bppBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPBGRA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppPRGBA}} (Windows?8 and later)</li> <li> {{GUID_WICPixelFormat64bppRGBA}} (Windows?8 and later)</li> </ul><p>In order to get correct behavior from a color transform, the input and output pixel formats must be compatible with the source and destination color profiles. For example, an sRGB destination color profile will produce incorrect results when used with a {{CMYK}} destination pixel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods used for in-place metadata editing. A fast metadata encoder enables you to add and remove metadata to an image without having to fully re-encode the image.</p> + <p> A decoder must be created using the <strong>{{WICDecodeOptions}}</strong> value <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> to perform in-place metadata updates. Using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option causes the decoder to release the file stream necessary to perform the metadata updates. </p><p> Not all metadata formats support fast metadata encoding. The native metadata handlers that support metadata are {{IFD}}, Exif, {{XMP}}, and {{GPS}}. </p><p> If a fast metadata encoder fails, the image will need to be fully re-encoded to add the metadata. </p> + + + + <p>Finalizes metadata changes to the image stream.</p> + <p>If the commit fails and returns <strong>{{WINCODEC_ERR_STREAMNOTAVAILABLE}}</strong>, ensure that the image decoder was loaded using the <strong>{{WICDecodeMetadataCacheOnDemand}}</strong> option. A fast metadata encoder is not supported when the decoder is created using the <strong>{{WICDecodeMetadataCacheOnLoad}}</strong> option. </p><p>If the commit fails for any reason, you will need to re-encode the image to ensure the new metadata is added to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a Windows Imaging Component ({{WIC}}) stream for referencing imaging and metadata content.</p> + <p>Decoders and metadata handlers are expected to create sub streams of whatever stream they hold when handing off control for embedded metadata to another metadata handler. If the stream is not restricted then use {{MAXLONGLONG}} as the max size and offset 0.</p><p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + + + + <p>Initializes a stream from another stream. Access rights are inherited from the underlying stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initialize stream.</p> </dd> + + + + + <p>Initializes a stream from a particular file.</p> + <p> The <strong>{{IWICStream}}</strong> interface methods do not enable you to provide a file sharing option. To create a shared file stream for an image, use the {{SHCreateStreamOnFileEx}} function. This stream can then be used to create an <strong>{{IWICBitmapDecoder}}</strong> using the <strong>CreateDecoderFromStream</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The file used to initialize the stream.</p> </dd> + + + <dd> <p>The desired file access mode.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GENERIC_READ}}</strong></dt> </dl> </td><td> <p>Read access.</p> </td></tr> <tr><td><dl> <dt><strong>{{GENERIC_WRITE}}</strong></dt> </dl> </td><td> <p>Write access.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Initializes a stream to treat a block of memory as a stream. The stream cannot grow beyond the buffer size. </p> + <p>This method should be avoided whenever possible. The caller is responsible for ensuring the memory block is valid for the lifetime of the stream when using <strong>InitializeFromMemory</strong>. A workaround for this behavior is to create an <strong>{{IStream}}</strong> and use <strong>InitializeFromIStream</strong> to create the <strong>{{IWICStream}}</strong>.</p><p>If you require a growable memory stream, use <strong>CreateStreamOnHGlobal</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the buffer used to initialize the stream.</p> </dd> + + + <dd> <p>The size of buffer.</p> </dd> + + + + + <p>Initializes the stream as a substream of another stream.</p> + <p>The stream functions with its own stream position, independent of the underlying stream but restricted to a region. All seek positions are relative to the sub region. It is allowed, though not recommended, to have multiple writable sub streams overlapping the same range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the input stream.</p> </dd> + + + <dd> <p>The stream offset used to create the new stream.</p> </dd> + + + <dd> <p>The maximum size of the stream.</p> </dd> + + + + + <p>Exposes methods that provide enumeration services for individual metadata items.</p> + + + + <p>Advanced the current position in the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of items to be retrieved.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>An array of enumerated items.</p> </dd> + + + <dd> <p>An array of enumerated items. This parameter is optional.</p> </dd> + + + <dd> <p>The number of items that were retrieved. This value is always less than or equal to the number of items requested.</p> </dd> + + + + + <p>Skips to given number of objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of objects to skip.</p> </dd> + + + + + <p>Resets the current position to the beginning of the enumeration.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a copy of the current <strong>{{IWICEnumMetadataItem}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods for retrieving metadata blocks and items from a decoder or its image frames using a metadata query expression.</p> + <p>A metadata query reader uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>The benefit of the query reader is the ability to access a metadata item in a single step. +</p><p>The query reader also provides the way to traverse the whole set of metadata hierarchy with the help of the <strong>GetEnumerator</strong> method. +However, it is not recommended to use this method since <strong>{{IWICMetadataBlockReader}}</strong> and <strong>{{IWICMetadataReader}}</strong> provide a more convenient and cheaper way. +</p> + + + + <p>Gets the metadata query readers container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the cointainer format {{GUID}}.</p> </dd> + + + + + <p>Retrieves the current path relative to the root metadata block.</p> + <p>If you pass <strong>{{NULL}}</strong> to <em>wzNamespace</em>, <strong>GetLocation</strong> ignores <em>cchMaxLength</em> and returns the required buffer length to store the path in the variable that <em>pcchActualLength</em> points to. +</p><p>If the query reader is relative to the top of the metadata hierarchy, it will return a single-char string.</p><p>If the query reader is relative to a nested metadata block, this method will return the path to the current query reader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the <em>wzNamespace</em> buffer.</p> </dd> + + + <dd> <p>Pointer that receives the current namespace location.</p> </dd> + + + <dd> <p>The actual buffer length that was needed to retrieve the current namespace location.</p> </dd> + + + + + <p>Retrieves the metadata block or item identified by a metadata query expression. </p> + <p><strong>GetMetadataByName</strong> uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p>If multiple blocks or items exist that are expressed by the same query expression, the first metadata block or item found will be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The query expression to the requested metadata block or item.</p> </dd> + + + <dd> <p>When this method returns, contains the metadata block or item requested.</p> </dd> + + + + + <p>Gets an enumerator of all metadata items at the current relative location within the metadata hierarchy.</p> + <p>The retrieved enumerator only contains query strings for the metadata blocks and items in the current level of the hierarchy. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IEnumString}}</strong> interface for the enumerator that contains query strings that can be used in the current <strong>{{IWICMetadataQueryReader}}</strong>. +</p> </dd> + + + + + <p>Exposes methods for setting or removing metadata blocks and items to an encoder or its image frames using a metadata query expression.</p> + <p>A metadata query writer uses metadata query expressions to set or remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p> + + + + <p>Sets a metadata item to a specific location.</p> + <p><strong>SetMetadataByName</strong> uses metadata query expressions to remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.</p><p> If the value set is a nested metadata block then use variant type <code>{{VT_UNKNOWN}}</code> and <em>pvarValue</em> pointing to the <strong>{{IWICMetadataQueryWriter}}</strong> of the new metadata block. The ordering of metadata items is at the discretion of the query writer since relative locations are not specified. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the metadata item.</p> </dd> + + + <dd> <p>The metadata to set.</p> </dd> + + + + + <p>Proxy function for the <strong>RemoveMetadataByName</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.</p> + <p>There are a number of concrete implemenations of this interface representing each of the standard encoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native encoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpEncoder}}</td><td>0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82</td></tr> <tr><td>{{CLSID_WICPngEncoder}}</td><td>0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc</td></tr> <tr><td>{{CLSID_WICJpegEncoder}}</td><td>0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76</td></tr> <tr><td>{{CLSID_WICGifEncoder}}</td><td>0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd</td></tr> <tr><td>{{CLSID_WICTiffEncoder}}</td><td>0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8</td></tr> <tr><td>{{CLSID_WICWmpEncoder}}</td><td>0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2</td></tr> </table><p>?</p><p>Additionally this interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p> + + + + <p>Initializes the encoder with an {{IStream}} which tells the encoder where to encode the bits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the encoder's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the encoder's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapEncoderInfo}}</strong> for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICColorContext}}</strong> objects for the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the global thumbnail for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to set as the global thumbnail.</p> </dd> + + + + + <p>Sets the global preview for the image.</p> + <p>Returns {{S_OK}} if successful, or an error value otherwise. </p><p>Returns {{WINCODEC_ERR_UNSUPPORTEDOPERATION}} if the feature is not supported by the encoder.</p> + + + <dd> <p>The <strong>{{IWICBitmapSource}}</strong> to use as the global preview.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapFrameEncode}}</strong> instance.</p> + <p>The parameter <em>ppIEncoderOptions</em> can be used to receive an {{IPropertyBag2}} that can then be used to specify encoder options. This is done by passing a reference to a <strong>{{NULL}}</strong> {{IPropertyBag2}} reference in <em>ppIEncoderOptions</em>. The returned {{IPropertyBag2}} is initialized with all encoder options that are available for the given format, at their default values. To specify non-default encoding behavior, set the needed encoder options on the {{IPropertyBag2}} and pass it to <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>.</p><strong>Note</strong>??Do not pass in a reference to an initialized {{IPropertyBag2}}. The reference will be overwritten, and the original {{IPropertyBag2}} will not be freed.?<p>Otherwise, you can pass <strong>{{NULL}}</strong> in <em>ppIEncoderOptions</em> if you do not intend to specify encoder options.</p><p>See Encoding Overview for an example of how to set encoder options.</p><p>For formats that support encoding multiple frames (for example, {{TIFF}}, {{JPEG}}-{{XR}}), you can work on only one frame at a time. This means that you must call <strong>{{IWICBitmapFrameEncode::Commit}}</strong> before you call <strong>CreateNewFrame</strong> again. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all changes for the image and closes the stream.</p> + <p>To finalize an image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p><p>After the encoder has been committed, it can't be re-initialized or reused with another stream. A new encoder interface must be created, for example, with <strong>{{IWICImagingFactory::CreateEncoder}}</strong>. +</p><p>For the encoder <strong>Commit</strong> to succeed, you must at a minimum call <strong>{{IWICBitmapEncoder::Initialize}}</strong> and either <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> or <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong>. +</p><p> <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> specifies all parameters needed to encode the image data. <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> requires that you also call <strong>{{IWICBitmapFrameEncode::SetSize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong> (if the pixel format is indexed). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents an encoder's individual image frames.</p> + + + + <p>Initializes the frame encoder using the given properties.</p> + <p>If you don't want any encoding options, pass <strong>{{NULL}}</strong> for <em>pIEncoderOptions</em>. Otherwise, pass the {{IPropertyBag2}} that was provided by <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> with updated values. +</p><p>For a complete list of encoding options supported by the Windows-provided codecs, see Native {{WIC}} Codecs. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The set of properties to use for <strong>{{IWICBitmapFrameEncode}}</strong> initialization.</p> </dd> + + + + + <p>Sets the output image dimensions for the frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the output image.</p> </dd> + + + <dd> <p>The height of the output image.</p> </dd> + + + + + <p>Sets the physical resolution of the output image.</p> + <p>Windows Imaging Component ({{WIC}}) doesn't perform any special processing as a result of {{DPI}} resolution values. For example, data returned from <strong>{{IWICBitmapSource::CopyPixels}}</strong> isn't scaled by the {{DPI}}. The app must handle {{DPI}} resolution. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The horizontal resolution value.</p> </dd> + + + <dd> <p>The vertical resolution value.</p> </dd> + + + + + <p>Requests that the encoder use the specified pixel format.</p> + <p>The encoder might not support the requested pixel format. If not, <strong>SetPixelFormat</strong> returns the closest match in the memory block that <em>pPixelFormat</em> points to. If the returned pixel format doesn't match the requested format, you must use an <strong>{{IWICFormatConverter}}</strong> object to convert the pixel data.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_WRONGSTATE}}</strong></dt> </dl> </td><td> <p>The <strong>{{IWICBitmapFrameEncode::Initialize}}</strong> method was not called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>On input, the requested pixel format {{GUID}}. On output, the closest pixel format {{GUID}} supported by the encoder; this may be different than the requested format. For a list of pixel format {{GUIDs}}, see Native Pixel Formats.</p> </dd> + + + + + <p>Proxy function for the <strong>SetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the <strong>{{IWICPalette}}</strong> for indexed pixel formats.</p> + <p>This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.</p><p>If you already called <strong>{{IWICBitmapEncoder::SetPalette}}</strong> to set a global palette, this method overrides that palette for the current frame.</p><p>The palette must be specified before your first call to <strong>WritePixels</strong>/<strong>WriteSource</strong>. Doing so will cause <strong>WriteSource</strong> to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to <strong>WriteSource</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>SetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies scan-line data from a caller-supplied buffer to the <strong>{{IWICBitmapFrameEncode}}</strong> object. +</p> + <p>Successive <strong>WritePixels</strong> calls are assumed to be sequential scan-line access in the output image.</p> + <p>Possible return values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{WINCODEC_ERR_CODECTOOMANYSCANLINES}}</strong></dt> </dl> </td><td> <p>The value of <em>lineCount</em> is larger than the number of scan lines in the image.</p> </td></tr> </table><p>?</p> + + + + <p>Encodes a bitmap source.</p> + <p>If <strong>SetSize</strong> is not called prior to calling <strong>WriteSource</strong>, the size given in <em>prc</em> is used if not <strong>{{NULL}}</strong>. Otherwise, the size of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used. </p><p>If <strong>SetPixelFormat</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of the <strong>{{IWICBitmapSource}}</strong> given in <em>pIBitmapSource</em> is used.</p><p>If <strong>SetResolution</strong> is not called prior to calling <strong>WriteSource</strong>, the pixel format of <em>pIBitmapSource</em> is used.</p><p>If <strong>SetPalette</strong> is not called prior to calling <strong>WriteSource</strong>, the target pixel format is indexed, and the pixel format of <em>pIBitmapSource</em> matches the encoder frame's pixel format, then the <em>pIBitmapSource</em> pixel format is used.</p><p>When encoding a {{GIF}} image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor ({{ISV}}) {{GIF}} codec, <strong>WriteSource</strong> will use the global palette to encode the frame even when <em>pIBitmapSource</em> has a frame level palette.</p><p>Starting with Windows?Vista, repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>.</p><p>Starting with Windows?8.1, the source rect must be at least the dimensions set through <strong>SetSize</strong>. If the source rect width exceeds the <strong>SetSize</strong> width, extra pixels on the right side are ignored. If the source rect height exceeds the remaining unfilled height, extra scan lines on the bottom are ignored. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bitmap source to encode.</p> </dd> + + + <dd> <p>The size rectangle of the bitmap source.</p> </dd> + + + + + <p>Commits the frame to the image.</p> + <p>After the frame <strong>Commit</strong> has been called, you can't use or reinitialize the <strong>{{IWICBitmapFrameEncode}}</strong> object and any objects created from it. +</p><p>To finalize the image, both the frame <strong>Commit</strong> and the encoder <strong>Commit</strong> must be called. However, only call the encoder <strong>Commit</strong> method after all frames have been committed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the metadata query writer for the encoder frame.</p> + <p>If you are setting metadata on the frame, you must do this before you use <strong>{{IWICBitmapFrameEncode::WritePixels}}</strong> or <strong>{{IWICBitmapFrameEncode::WriteSource}}</strong> to write any image pixels to the frame</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to metadata query writer for the encoder frame.</p> </dd> + + + + + <p>Allows planar component image pixels to be written to an encoder. When supported by the encoder, this allows an application to encode planar component image data without first converting to an interleaved pixel format.</p><p>You can use QueryInterface to obtain this interface from the Windows provided implementation of <strong>{{IWICBitmapFrameEncode}}</strong> for the {{JPEG}} encoder. +</p> + <p>Encoding {{YCbCr}} data using <strong>{{IWICPlanarBitmapFrameEncode}}</strong> is similar but not identical to encoding interleaved data using {{IWICBitmapFrameEncode}}. The planar interface only exposes the ability to write planar frame image data, and you should continue to use the frame encode interface to set metadata or a thumbnail and to commit at the end of the operation. +</p> + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WritePixels</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>Line Count Restriction</th><th>Chroma Plane Width</th><th>Chroma Plane Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Multiple of 2, unless the call covers the last scanline of the image</td><td>Any</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>The number of lines to encode. See the Remarks section for {{WIC}} Jpeg specific line count restrictions.</p> </dd> + + + <dd> <p>Specifies the source buffers for each component plane encoded. </p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pPlanes</em> parameter.</p> </dd> + + + + + <p>Writes lines from the source planes to the encoded format.</p> + <p>Successive <strong>WriteSource</strong> calls are assumed sequentially add scanlines to the output image. <strong>{{IWICBitmapFrameEncode::Initialize}}</strong>, <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> and <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> must be called before this method or it will fail.</p><p>The interleaved pixel format set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong> and the codec specific encode parameters determine the supported planar formats. +</p><p>{{WIC}} {{JPEG}} Encoder: +QueryInterface can be used to obtain this interface from the {{WIC}} {{JPEG}} <strong>{{IWICBitmapFrameEncode}}</strong> implementation. When using this method to encode Y?CbCr data with the {{WIC}} {{JPEG}} encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong> for more details. </p><p>Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>Any</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>Any</td><td>Any</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.</p><p>Additionally, if a pixel format is set via <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, it must be {{GUID_WICPixelFormat24bppBGR}}. </p><p>The supported pixel formats of the bitmap sources passed into this method are as follows: +</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the planes and source rectangle do not meet the requirements, this method fails with <strong>{{WINCODEC_ERR_IMAGESIZEOUTOFRANGE}}</strong>. </p><p>If the <strong>{{IWICBitmapSource}}</strong> format does not meet the encoder requirements, this method fails with <strong>{{WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT}}</strong>. +</p> + + + <dd> <p>Specifies an array of <strong>{{IWICBitmapSource}}</strong> that represent image planes.</p> </dd> + + + <dd> <p>The number of component planes specified by the planes parameter.</p> </dd> + + + <dd> <p>The source rectangle of pixels to encode from the <strong>{{IWICBitmapSource}}</strong> planes. Null indicates the entire source. The source rect width must match the width set through <strong>SetSize</strong>. Repeated <strong>WriteSource</strong> calls can be made as long as the total accumulated source rect height is the same as set through <strong>SetSize</strong>. </p> </dd> + + + + + <p>Encodes <strong>{{ID2D1Image}}</strong> interfaces to an <strong>{{IWICBitmapEncoder}}</strong>. The input images can be larger than the maximum device texture size.</p> + + + + <p>Encodes the image to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>.</p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the {{IWICBitmapFrameEncode}} before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the image as a thumbnail to the frame given by the <strong>{{IWICBitmapFrameEncode}}</strong>. </p> + <p>The image passed in must be created on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If the <em>pImageParameters</em> are not specified, a set of useful defaults will be assumed, see <strong>{{WICImageParameters}}</strong> for more info. </p><p>You must correctly and independently have set up the <strong>{{IWICBitmapFrameEncode}}</strong> before calling this {{API}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Encodes the given image as the thumbnail to the given {{WIC}} bitmap encoder.</p> + <p>You must create the image that you pass in on the same device as in <strong>{{IWICImagingFactory2::CreateImageEncoder}}</strong>. If you don't specify additional parameters in the variable that <em>pImageParameters</em> points to, the encoder uses a set of useful defaults. For info about these defaults, see <strong>{{WICImageParameters}}</strong>. </p><p>Before you call <strong>WriteThumbnail</strong>, you must set up the <strong>{{IWICBitmapEncoder}}</strong> interface for the encoder on which you want to set the thumbnail. </p><p>If <strong>WriteThumbnail</strong> fails, it might return {{E_OUTOFMEMORY}}, {{D2DERR_WRONG_RESOURCE_DOMAIN}}, or other error codes from the encoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Direct2D image that will be encoded.</p> </dd> + + + <dd> <p>The encoder on which the thumbnail is set.</p> </dd> + + + <dd> <p>Additional parameters to control encoding.</p> </dd> + + + + + <p>Exposes methods that represent a decoder.</p><p>The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette. </p> + <p>There are a number of concrete implemenations of this interface representing each of the standard decoders provided by the platform including bitmap ({{BMP}}), Portable Network Graphics ({{PNG}}), icon ({{ICO}}), Joint Photographic Experts Group ({{JPEG}}), Graphics Interchange Format ({{GIF}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}). The following table includes the class identifier ({{CLSID}}) for each native decoder. </p><table> <tr><th>{{CLSID}} Name</th><th>{{CLSID}}</th></tr> <tr><td>{{CLSID_WICBmpDecoder}}</td><td>0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78</td></tr> <tr><td>{{CLSID_WICPngDecoder}}</td><td>0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51</td></tr> <tr><td>{{CLSID_WICIcoDecoder}}</td><td>0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe</td></tr> <tr><td>{{CLSID_WICJpegDecoder}}</td><td>0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca</td></tr> <tr><td>{{CLSID_WICGifDecoder}}</td><td>0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe</td></tr> <tr><td>{{CLSID_WICTiffDecoder}}</td><td>0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b</td></tr> <tr><td>{{CLSID_WICWmpDecoder}}</td><td>0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d</td></tr> </table><p>?</p><p>This interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the {{AITCodec}} Sample {{CODEC}}.</p><p>Codecs written as {{TIFF}} container formats that are not register will decode as a {{TIFF}} image. Client applications should check for a zero frame count to determine if the codec is valid.</p> + + + + <p>Retrieves the capabilities of the decoder based on the specified stream.</p> + <p>Custom decoder implementations should save the current position of the specified {{IStream}}, read whatever information is necessary in order to determine which capabilities it can provide for the supplied stream, and restore the stream position.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to retrieve the decoder capabilities from.</p> </dd> + + + <dd> <p>The <strong>{{WICBitmapDecoderCapabilities}}</strong> of the decoder.</p> </dd> + + + + + <p>Initializes the decoder with the provided stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to use for initialization.</p> <p>The stream contains the encoded pixels which are decoded each time the <strong>CopyPixels</strong> method on the <strong>{{IWICBitmapFrameDecode}}</strong> interface (see <strong>GetFrame</strong>) is invoked.</p> </dd> + + + <dd> <p>The <strong>{{WICDecodeOptions}}</strong> to use for initialization.</p> </dd> + + + + + <p>Retrieves the image's container format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the image's container format {{GUID}}.</p> </dd> + + + + + <p>Retrieves an <strong>{{IWICBitmapDecoderInfo}}</strong> for the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CopyPalette</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetMetadataQueryReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a preview image, if supported.</p> + <p>Not all formats support previews. Only the native Microsoft?Windows Digital Photo ({{WDP}}) codec support previews.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the preview bitmap if supported.</p> </dd> + + + + + <p>Proxy function for the <strong>GetColorContexts</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetThumbnail</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the total number of frames in the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the total number of frames in the image.</p> </dd> + + + + + <p>Retrieves the specified frame of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The particular frame to retrieve.</p> </dd> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapFrameDecode}}</strong>.</p> </dd> + + + + + + + + + <p>Copies pixel data using the supplied input parameters.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle of pixels to copy.</p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must equal the value obtainable through <strong>{{IWICBitmapSourceTransform::GetClosestSize}}</strong>.</p> </dd> + + + <dd> <p> The {{GUID}} of desired pixel format in which the pixels should be returned. </p> <p>This {{GUID}} must be a format obtained through an <strong>GetClosestPixelFormat</strong> call.</p> </dd> + + + <dd> <p> The desired rotation or flip to perform prior to the pixel copy. </p> <p>The transform must be an operation supported by an <strong>DoesSupportTransform</strong> call.</p> <p>If a <em>dstTransform</em> is specified, <em>nStride</em> is the <em>transformed stride</em> and is based on the <em>pguidDstFormat</em> pixel format, not the original source's pixel format.</p> </dd> + + + <dd> <p>The {{stride}} of the destination buffer.</p> </dd> + + + <dd> <p>The size of the destination buffer.</p> </dd> + + + <dd> <p>The output buffer.</p> </dd> + + + + + <p>Returns the closest dimensions the implementation can natively scale to given the desired dimensions.</p> + <p>The Windows provided codecs provide the following support for native scaling: +</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{PNG:}} No scaling support.</li> <li>{{JPEG:}} Native down-scaling by a factor of 8, 4, or 2.</li> <li>{{JPEG}}-{{XR:}} Native scaling of the original image by powers of 2. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired width. A reference that receives the closest supported width.</p> </dd> + + + <dd> <p>The desired height. A reference that receives the closest supported height.</p> </dd> + + + + + <p>Retrieves the closest pixel format to which the implementation of <strong>{{IWICBitmapSourceTransform}}</strong> can natively copy pixels, given a desired format.</p> + <p>The Windows provided codecs provide the following support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of <strong>{{IWICBitmapSourceTransform}}</strong>.</li> <li>{{JPEG}}, {{PNG}}, {{JPEG}}-{{XR:}} Trivial support (always returns the same value as <strong>{{IWICBitmapFrameDecode::GetPixelFormat}}</strong>).</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Determines whether a specific transform option is supported natively by the implementation of the <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p> + <p>The Windows provided codecs provide the following level of support:</p><ul> <li>{{BMP}}, {{ICO}}, {{GIF}}, {{TIFF:}} No implementation of {{IWICBitmapSourceTransform}}.</li> <li>{{JPEG}}, {{PNG:}} Trivial support ({{WICBitmapTransformRotate0}} only).</li> <li>{{JPEG}}-{{XR:}} Support for all transformation/rotations. +</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides access to planar Y?CbCr pixel formats where pixel components are stored in separate component planes. This interface also allows access to other codec optimizations for flip/rotate, scale, and format conversion to other Y?CbCr planar formats; this is similar to the pre-existing <strong>{{IWICBitmapSourceTransform}}</strong> interface.</p><p>QueryInterface can be used to obtain this interface from the Windows provided implementations of <strong>{{IWICBitmapFrameDecode}}</strong> for the {{JPEG}} decoder, <strong>{{IWICBitmapScaler}}</strong>, <strong>{{IWICBitmapFlipRotator}}</strong>, and <strong>{{IWICColorTransform}}</strong>.</p> + + + + <p>Use this method to determine if a desired planar output is supported and allow the caller to choose an optimized code path if it is. Otherwise, callers should fall back to <strong>{{IWICBitmapSourceTransform}}</strong> or <strong>{{IWICBitmapSource}}</strong> and retrieve interleaved pixels.</p><p> The following transforms can be checked:</p><ul> <li> Determine if the flip/rotate option specified via <strong>{{WICBitmapTransformOptions}}</strong> is supported.</li> <li>Determine if the requested planar pixel format configuration is supported.</li> <li>Determine the closest dimensions the implementation can natively scale to given the desired dimensions. +</li> </ul><p>When a transform is supported, this method returns the description of the resulting planes in the <em>pPlaneDescriptions</em> parameter. +</p> + <p>Check the value of <em>pfIsSupported</em> to determine if the transform is supported via <strong>{{IWICPlanarBitmapSourceTransform::CopyPixels}}</strong>. If this method fails, the output parameters for width, height, and plane descriptions are zero initialized. +Other return values indicate failure. </p> + + + + <p>Copies pixels into the destination planes. Configured by the supplied input parameters. </p><p>If a <em>dstTransform</em>, scale, or format conversion is specified, <em>cbStride</em> is the transformed stride and is based on the destination pixel format of the <em>pDstPlanes</em> parameter, not the original source's pixel format.</p> + <p>{{WIC}} {{JPEG}} Decoder: +Depending on the configured chroma subsampling of the image, the source rectangle has the following restrictions: +</p><table> <tr><th>Chroma Subsampling</th><th>X Coordinate</th><th>Y Coordinate</th><th>Chroma Width</th><th>Chroma Height</th></tr> <tr><td>4:2:0</td><td>Multiple of 2</td><td>Multiple of 2</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight / 2 Rounded up to the nearest integer.</td></tr> <tr><td>4:2:2</td><td>Multiple of 2</td><td>Any</td><td>lumaWidth / 2 Rounded up to the nearest integer.</td><td>lumaHeight</td></tr> <tr><td>4:4:4</td><td>Any</td><td>Any</td><td>llumaWidth</td><td>llumaHeight</td></tr> <tr><td>4:4:0</td><td>Any</td><td>Multiple of 2</td><td>lumaWidth</td><td>llumaHeight / 2 Rounded up to the nearest integer.</td></tr> </table><p>?</p><p>The <em>pDstPlanes</em> parameter supports the following pixel formats.</p><table> <tr><th>Plane Count</th><th>Plane 1</th><th>Plane 2</th><th>Plane 3</th></tr> <tr><td>3</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat8bppCb}}</td><td>{{GUID_WICPixelFormat8bppCr}}</td></tr> <tr><td>2</td><td>{{GUID_WICPixelFormat8bppY}}</td><td>{{GUID_WICPixelFormat16bppCbCr}}</td><td>N/A</td></tr> </table><p>?</p> + <p>If the specified scale, flip/rotate, and planar format configuration is not supported this method fails with <strong>{{WINCODEC_ERR_INVALIDPARAMETER}}</strong>. You can check if a transform is supported by calling <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> + + + <dd> <p>The source rectangle of pixels to copy. </p> </dd> + + + <dd> <p>The width to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The height to scale the source bitmap. This parameter must be equal to a value obtainable through <strong>{{IWICPlanarBitmapSourceTransform::}} DoesSupportTransform</strong>.</p> </dd> + + + <dd> <p>The desired rotation or flip to perform prior to the pixel copy. A rotate can be combined with a flip horizontal or a flip vertical, see <strong>{{WICBitmapTransformOptions}}</strong>.</p> </dd> + + + <dd> <p>Used to specify additional configuration options for the transform. See <strong>{{WICPlanarOptions}}</strong> for more detail.</p> <p>{{WIC}} {{JPEG}} Decoder: +<strong>{{WICPlanarOptionsPreserveSubsampling}}</strong> can be specified to retain the subsampling ratios when downscaling. By default, the {{JPEG}} decoder attempts to preserve quality by downscaling only the Y plane in some cases, changing the image to 4:4:4 chroma subsampling. +</p> </dd> + + + <dd> <p>Specifies the pixel format and output buffer for each component plane. The number of planes and pixel format of each plane must match values obtainable through <strong>{{IWICPlanarBitmapSourceTransform::DoesSupportTransform}}</strong>.</p> </dd> + + + <dd> <p>The number of component planes specified by the <em>pDstPlanes</em> parameter.</p> </dd> + + + + + <p>Defines methods for decoding individual image frames of an encoded file.</p> + + + + <p>Retrieves a metadata query reader for the frame.</p> + <p>For image formats with one frame ({{JPG}}, {{PNG}}, {{JPEG}}-{{XR}}), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame ({{GIF}}, {{TIFF}}), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of {{GIF}} a decoder-level metadata reader will be present. If the decoder doesn?t support metadata ({{BMP}}, {{ICO}}), this will return {{WINCODEC_ERR_UNSUPPORTEDOPERATION}}. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>When this method returns, contains a reference to the frame's metadata query reader.</p> </dd> + + + + + <p>Retrieves the <strong>{{IWICColorContext}}</strong> associated with the image frame.</p> + <p>If {{NULL}} is passed for <em>ppIColorContexts</em>, and 0 is passed for <em>cCount</em>, this method will return the total number of color contexts in the image in <em>pcActualCount</em>. </p><p>The <em>ppIColorContexts</em> array must be filled with valid data: each <strong>{{IWICColorContext}}*</strong> in the array must have been created using <strong>{{IWICImagingFactory::CreateColorContext}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a small preview of the frame, if supported by the codec.</p> + <p>Not all formats support thumbnails. Joint Photographic Experts Group ({{JPEG}}), Tagged Image File Format ({{TIFF}}), and Microsoft?Windows Digital Photo ({{WDP}}) support thumbnails.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the <strong>{{IWICBitmapSource}}</strong> of the thumbnail.</p> </dd> + + + + + <p>Exposes methods for obtaining information about and controlling progressive decoding.</p> + <p>Images can only be progressively decoded if they were progressively encoded. Progressive images automatically start at the highest (best quality) progressive level. The caller must manually set the decoder to a lower progressive level.</p><p>{{E_NOTIMPL}} is returned if the codec does not support progressive level decoding.</p> + + + + <p>Gets the number of levels of progressive decoding supported by the {{CODEC}}.</p> + <p>Users should not use this function to iterate through the progressive levels of a progressive {{JPEG}} image. {{JPEG}} progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive {{JPEG}} image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the number of levels supported by the {{CODEC}}.</p> </dd> + + + + + <p>Gets the decoder's current progressive level.</p> + <p>The level always defaults to the highest progressive level. In order to decode a lower progressive level, <strong>SetCurrentLevel</strong> must first be called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the current level specified.</p> </dd> + + + + + <p>Specifies the level to retrieve on the next call to <strong>CopyPixels</strong>.</p> + <p> A call does not have to request every level supported. If a caller requests level 1, without having previously requested level 0, the bits returned by the next call to <strong>CopyPixels</strong> will include both levels. </p><p> If the requested level is invalid, the error returned is {{WINCODEC_ERR_INVALIDPROGRESSIVELEVEL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p><strong>{{IWICProgressCallback}}</strong> interface is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + + + + <p><strong>Notify</strong> method is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use <strong>RegisterProgressNotification</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + <p>Registers a progress notification callback function.</p> + <p>Applications can only register a single callback. Subsequent registration calls will replace the previously registered callback. To unregister a callback, pass in <strong>{{NULL}}</strong> or register a new callback function.</p><p> Progress is reported in an increasing order between 0.0 and 1.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationBegin}}</strong>, the callback is guaranteed to be called with progress 0.0. If <em>dwProgressFlags</em> includes <strong>{{WICProgressNotificationEnd}}</strong>, the callback is guaranteed to be called with progress 1.0. </p><p><strong>{{WICProgressNotificationFrequent}}</strong> increases the frequency in which the callback is called. If an operation is expected to take more than 30 seconds, <strong>{{WICProgressNotificationFrequent}}</strong> should be added to <em>dwProgressFlags</em>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A function reference to the application defined progress notification callback function. See <strong>ProgressNotificationCallback</strong> for the callback signature.</p> </dd> + + + <dd> <p>A reference to component data for the callback method.</p> </dd> + + + <dd> <p>The <strong>{{WICProgressOperation}}</strong> and <strong>{{WICProgressNotification}}</strong> flags to use for progress notification.</p> </dd> + + + + + <p>Exposes methods that provide component information.</p> + + + + <p>Retrieves the component's <strong>{{WICComponentType}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetCLSID</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the signing status of the component.</p> + <p>Signing is unused by {{WIC}}. Therefore, all components {{WICComponentSigned}}.</p><p>This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the <strong>{{WICComponentSigning}}</strong> status of the component.</p> </dd> + + + + + <p>Retrieves the name of component's author.</p> + <p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzAuthor</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the name of the component's author. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's authors name. The author name is optional; if an author name is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the vendor {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the component's vendor {{GUID}}.</p> </dd> + + + + + <p>Proxy function for the <strong>GetVersion</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the component's specification version.</p> + <p>All built-in components return "1.0.0.0", except for pixel formats, which do not have a spec version.</p><p>If <em>cchAuthor</em> is 0 and <em>wzAuthor</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzSpecVersion</em> buffer.</p> </dd> + + + <dd> <p>When this method returns, contain a culture invarient string of the component's specification version. The version form is {{NN}}.{{NN}}.{{NN}}.{{NN}}.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's specification version. The specification version is optional; if a value is not specified by the component, the length returned is 0.</p> </dd> + + + + + <p>Retrieves the component's friendly name, which is a human-readable display name for the component.</p> + <p>If <em>cchFriendlyName</em> is 0 and <em>wzFriendlyName</em> is <strong>{{NULL}}</strong>, the required buffer size is returned in <em>pccchActual</em>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>wzFriendlyName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the friendly name of the component. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.</p> </dd> + + + <dd> <p>A reference that receives the actual length of the component's friendly name.</p> </dd> + + + + + <p>Exposes methods that provide information about a pixel format converter.</p> + + + + <p>Retrieves a list of {{GUIDs}} that signify which pixel formats the converter supports.</p> + <p>The format converter does not necessarily guarantee symmetricality with respect to conversion; that is, a converter may be able to convert {{FROM}} a particular format without actually being able to convert {{TO}} a particular format. In order to test symmetricality, use <strong>CanConvert</strong>.</p><p>To determine the number of pixel formats a coverter can handle, set <em>cFormats</em> to <code>0</code> and <em>pPixelFormatGUIDs</em> to <code>{{NULL}}</code>. The converter will fill <em>pcActual</em> with the number of formats supported by that converter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pPixelFormatGUIDs</em> array.</p> </dd> + + + <dd> <p>Pointer to a {{GUID}} array that receives the pixel formats the converter supports.</p> </dd> + + + <dd> <p>The actual array size needed to retrieve all pixel formats supported by the converter.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICFormatConverter}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a particular codec.</p> + + + + <p>Proxy function for the <strong>GetContainerFormat</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves the pixel formats the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the array size needed to retrieve all the supported pixel formats by calling it with <em>cFormats</em> set to <code>0</code> and <em>pguidPixelFormats</em> set to <code>{{NULL}}</code>. This call sets <em>pcActual</em> to the array size needed. Once the needed array size is determined, a second <strong>GetPixelFormats</strong> call with <em>pguidPixelFormats</em> set to an array of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pguidPixelFormats</em> array. Use <code>0</code> on first call to determine the needed array size.</p> </dd> + + + <dd> <p>Receives the supported pixel formats. Use <code>{{NULL}}</code> on first call to determine needed array size.</p> </dd> + + + <dd> <p>The array size needed to retrieve all supported pixel formats.</p> </dd> + + + + + <p>Retrieves the color manangement version number the codec supports.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchColorManagementVersion</em> set to <code>0</code> and <em>wzColorManagementVersion</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetColorManagementVersion</strong> call with <em>cchColorManagementVersion</em> set to the buffer size and <em>wzColorManagementVersion</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the version buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the color management version number. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the full color management version number.</p> </dd> + + + + + <p>Retrieves the name of the device manufacture associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceManufacturer</em> set to <code>0</code> and <em>wzDeviceManufacturer</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceManufacturer</strong> call with <em>cchDeviceManufacturer</em> set to the buffer size and <em>wzDeviceManufacturer</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device manufacture's name. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives the device manufacture's name. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the device manufacture's name.</p> </dd> + + + + + <p>Retrieves a comma delimited list of device models associated with the codec.</p> + <p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchDeviceModels</em> set to <code>0</code> and <em>wzDeviceModels</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetDeviceModels</strong> call with <em>cchDeviceModels</em> set to the buffer size and <em>wzDeviceModels</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the device models buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of device model names associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all of the device model names.</p> </dd> + + + + + <p>Proxy function for the <strong>GetMimeTypes</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a comma delimited list of the file name extensions associated with the codec.</p> + <p>The default extension for an image encoder is the first item in the list of returned extensions.</p><p> The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with <em>cchFileExtensions</em> set to <code>0</code> and <em>wzFileExtensions</em> set to <code>{{NULL}}</code>. This call sets <em>pcchActual</em> to the buffer size needed. Once the needed buffer size is determined, a second <strong>GetFileExtensions</strong> call with <em>cchFileExtensions</em> set to the buffer size and <em>wzFileExtensions</em> set to a buffer of the appropriate size will retrieve the pixel formats. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the file name extension buffer. Use <code>0</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>Receives a comma delimited list of file name extensions associated with the codec. Use <code>{{NULL}}</code> on first call to determine needed buffer size.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve all file name extensions associated with the codec. </p> </dd> + + + + + <p>Proxy function for the <strong>DoesSupportAnimation</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Retrieves a value indicating whether the codec supports chromakeys.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports chromakeys; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports lossless formats.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports lossless formats; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the codec supports multi frame images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the codec supports multi frame images; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Retrieves a value indicating whether the given mime type matches the mime type of the codec.</p> + <strong>Note</strong>??The Windows provided codecs do not implement this method and return {{E_NOTIMPL}}.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The codec does not implement this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The mime type to compare.</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the mime types match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Exposes methods that provide information about an encoder.</p> + + + + <p>Creates a new <strong>{{IWICBitmapEncoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a decoder.</p> + + + + <p>Retrieves the file pattern signatures supported by the decoder.</p> + <p> To retrieve all pattern signatures, this method should first be called with <em>pPatterns</em> set to <code>{{NULL}}</code> to retrieve the actual buffer size needed through <em>pcbPatternsActual</em>. Once the needed buffer size is known, allocate a buffer of the needed size and call <strong>GetPatterns</strong> again with the allocated buffer. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The array size of the <em>pPatterns</em> array.</p> </dd> + + + <dd> <p>Receives a list of <strong>{{WICBitmapPattern}}</strong> objects supported by the decoder.</p> </dd> + + + <dd> <p>Receives the number of patterns the decoder supports.</p> </dd> + + + <dd> <p>Receives the actual buffer size needed to retrieve all pattern signatures supported by the decoder. </p> </dd> + + + + + <p>Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to pattern match within.</p> </dd> + + + <dd> <p>A reference that receives <strong>{{TRUE}}</strong> if the patterns match; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates a new <strong>{{IWICBitmapDecoder}}</strong> instance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Exposes methods that provide information about a pixel format.</p> + + + + <p>Gets the pixel format {{GUID}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer that receives the pixel format {{GUID}}.</p> </dd> + + + + + <p>Gets the pixel format's <strong>{{IWICColorContext}}</strong>.</p> + <p>The returned color context is the default color space for the pixel format. However, if an {{IWICBitmapSource}} specifies its own color context, the source's context should be preferred over the pixel format's default. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetBitsPerPixel</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>GetChannelCount</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the pixel format's channel mask.</p> + <p>If 0 and {{NULL}} are passed in for <em>cbMaskBuffer</em> and <em>pbMaskBuffer</em>, respectively, the required buffer size will be returned through <em>pcbActual</em>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index to the channel mask to retrieve.</p> </dd> + + + <dd> <p>The size of the <em>pbMaskBuffer</em> buffer.</p> </dd> + + + <dd> <p>Pointer to the mask buffer.</p> </dd> + + + <dd> <p>The actual buffer size needed to obtain the channel mask.</p> </dd> + + + + + <p>Extends <strong>{{IWICPixelFormatInfo}}</strong> by providing additional information about a pixel format.</p> + + + + <p>Returns whether the format supports transparent pixels.</p> + <p> An indexed pixel format will not return <strong>{{TRUE}}</strong> even though it may have some transparency support. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns <strong>{{TRUE}}</strong> if the pixel format supports transparency; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Returns the <strong>{{WICPixelFormatNumericRepresentation}}</strong> of the pixel format.</p> </dd> + + + + + <p>Exposes methods used to create components for the Windows Imaging Component ({{WIC}}) such as decoders, encoders and pixel format converters.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given file.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> class based on the given {{IStream}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapDecoder}}</strong> based on the given file handle.</p> + <p>When a decoder is created using this method, the file handle must remain alive during the lifetime of the decoder.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateComponentInfo</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICBitmapEncoder}}</strong> class.</p> + <p> Other values may be available for both <em>guidContainerFormat</em> and <em>pguidVendor</em> depending on the installed {{WIC}}-enabled encoders. The values listed are those that are natively supported by the operating system. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICPalette}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICFormatConverter}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of an <strong>{{IWICBitmapScaler}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapClipper</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateBitmapFlipRotator</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICStream}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorContext}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the <strong>{{IWICColorTransform}}</strong> class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> object.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a <strong>{{IWICBitmap}}</strong> from a <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a specified rectangle of an <strong>{{IWICBitmapSource}}</strong>.</p> + <p>Providing a rectangle that is larger than the source will produce undefined results.</p><p>This method always creates a separate copy of the source image, similar to the cache option <strong>{{WICBitmapCacheOnLoad}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a memory block.</p> + <p>The size of the {{IWICBitmap}} to be created must be smaller than or equal to the size of the image in <em>pbBuffer</em>.</p><p>The {{stride}} of the destination bitmap will equal the <em>stride</em> of the source data, regardless of the width and height specified.</p><p>The <em>pixelFormat</em> parameter defines the pixel format for both the input data and the output bitmap.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from a bitmap handle.</p> + <p>For a non-palletized bitmap, set {{NULL}} for the <em>hPalette</em> parameter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IWICBitmap}}</strong> from an icon handle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an {{IEnumUnknown}} object of the specified component types.</p> + <p>Component types must be enumerated seperately. Combinations of component types and <strong>{{WICAllComponents}}</strong> are unsupported.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given <strong>{{IWICBitmapDecoder}}</strong>.</p> + <p>The Windows provided codecs do not support fast metadata encoding at the decoder level, and only support fast metadata encoding at the frame level. To create a fast metadata encoder from a frame, see <strong>CreateFastMetadataEncoderFromFrameDecode</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a new instance of the fast metadata encoder based on the given image frame.</p> + <p>For a list of support metadata formats for fast metadata encoding, see {{WIC}} Metadata Overview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{IWICBitmapFrameDecode}}</strong> to create the <strong>{{IWICFastMetadataEncoder}}</strong> from.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to a new fast metadata encoder.</p> </dd> + + + + + <p>Proxy function for the <strong>CreateQueryWriter</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Proxy function for the <strong>CreateQueryWriterFromReader</strong> method.</p> + + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>An extension of the {{WIC}} factory interface that includes the ability to create an <strong>{{IWICImageEncoder}}</strong>. This interface uses a Direct2D device and an input image to encode to a destination <strong>{{IWICBitmapEncoder}}</strong>.</p> + + + + <p>Creates a new image encoder object.</p> + <p>You must create images to pass to the image encoder on the same Direct2D device that you pass to this method. </p><p>You are responsible for setting up the bitmap encoder itself through the existing <strong>{{IWICBitmapEncoder}}</strong> {{APIs}}. The <strong>{{IWICBitmapEncoder}}</strong> or the {{IWICBitmapFrameEncode}} object is passed to each of the <strong>{{IWICImageEncoder}}</strong> methods: <strong>WriteThumbnail</strong>, <strong>WriteFrame</strong>, and <strong>WriteFrameThumbnail</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The <strong>{{ID2D1Device}}</strong> object on which the corresponding image encoder is created.</p> </dd> + + + <dd> <p>A reference to a variable that receives a reference to the <strong>{{IWICImageEncoder}}</strong> interface for the encoder object that you can use to encode Direct2D images.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + <p>An application-defined callback method used for raw image parameter change notifications.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A set of <strong>{{IWICDevelopRawNotificationCallback}} Constants</strong> parameter notification flags.</p> </dd> + + + + + + + + + <p>Retrieves information about which capabilities are supported for a raw image.</p> + <p>It is recommended that a codec report that a capability is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives <strong>{{WICRawCapabilitiesInfo}}</strong> that provides the capabilities supported by the raw image.</p> </dd> + + + + + <p>Sets the desired <strong>{{WICRawParameterSet}}</strong> option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current set of parameters.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives a reference to the current set of parameters.</p> </dd> + + + + + <p>Sets the exposure compensation stop value.</p> + <p>It is recommended that a codec report that this method is supported even if the results at the outer range limits are not of perfect quality.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The exposure compensation value. The value range for exposure compensation is -5.0 through +5.0, which equates to 10 full stops.</p> </dd> + + + + + <p>Gets the exposure compensation stop value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the exposure compensation stop value. The default is the "as-shot" setting.</p> </dd> + + + + + <p>Sets the white point {{RGB}} values.</p> + <p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The red white point value.</p> </dd> + + + <dd> <p>The green white point value.</p> </dd> + + + <dd> <p>The blue white point value.</p> </dd> + + + + + <p>Gets the white point {{RGB}} values.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the red white point value.</p> </dd> + + + <dd> <p>A reference that receives the green white point value.</p> </dd> + + + <dd> <p>A reference that receives the blue white point value.</p> </dd> + + + + + <p>Sets the named white point of the raw file.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in the {{API}}.</p><p>Due to other white point setting methods (e.g. <strong>SetWhitePointKelvin</strong>), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Gets the named white point of the raw image.</p> + <p>If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this {{API}}, the codec implementer should still mark this capability as supported.</p><p>If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.</p><p>If the raw file containes named white points not supported by this {{API}}, the codec implementer should support the named white points in <strong>{{WICNamedWhitePoint}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the bitwise combination of the enumeration values.</p> </dd> + + + + + <p>Sets the white point Kelvin value.</p> + <p>Codec implementers should faithfully adjust the color temperature within the range supported natively by the raw image. For values outside the native support range, the codec implementer should provide a best effort representation of the image at that color temperature.</p><p>Codec implementers should return <strong>{{WINCODEC_ERR_VALUEOUTOFRANGE}}</strong> if the value is out of defined acceptable range.</p><p>Codec implementers must ensure proper interoperability with other white point setting methods such as <strong>SetWhitePointRGB</strong>. For example, if the caller sets the white point via <strong>SetNamedWhitePoint</strong> then the codec implementer may want to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wants to deny a given action because of previous calls, <strong>{{WINCODEC_ERR_WRONGSTATE}}</strong> should be returned.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The white point Kelvin value. Acceptable Kelvin values are 1,500 through 30,000.</p> </dd> + + + + + <p>Gets the white point Kelvin temperature of the raw image.</p> + + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the white point Kelvin temperature of the raw image. The default is the "as-shot" setting value.</p> </dd> + + + + + <p>Gets the information about the current Kelvin range of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the minimum Kelvin temperature.</p> </dd> + + + <dd> <p>A reference that receives the maximum Kelvin temperature. </p> </dd> + + + <dd> <p>A reference that receives the Kelvin step value.</p> </dd> + + + + + <p>Sets the contrast value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Gets the contrast value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.</p> </dd> + + + + + <p>Sets the desired gamma value.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired gamma value.</p> </dd> + + + + + <p>Gets the current gamma setting of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current gamma setting.</p> </dd> + + + + + <p>Sets the sharpness value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Gets the sharpness value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.</p> </dd> + + + + + <p>Sets the saturation value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The saturation value of the raw image. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Gets the saturation value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the saturation value of the raw image. The default value is the "as-shot" setting. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.</p> </dd> + + + + + <p>Sets the tint value of the raw image.</p> + <p>The codec implementer must determine what the outer range values represent and must determine how to map the values to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Gets the tint value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.</p> </dd> + + + + + <p>Sets the noise reduction value of the raw image.</p> + <p>The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Gets the noise reduction value of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents full highest noise reduction amount that can be applied.</p> </dd> + + + + + <p>Sets the destination color context.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The destination color context.</p> </dd> + + + + + <p>Sets the tone curve for the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> structure.</p> </dd> + + + <dd> <p>The desired tone curve.</p> </dd> + + + + + <p>Gets the tone curve of the raw image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the <em>pToneCurve</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the <strong>{{WICRawToneCurve}}</strong> of the raw image.</p> </dd> + + + <dd> <p>A reference that receives the size needed to obtain the tone curve structure.</p> </dd> + + + + + <p>Sets the desired rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The desired rotation angle.</p> </dd> + + + + + <p>Gets the current rotation angle.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference that receives the current rotation angle.</p> </dd> + + + + + <p>Sets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the current <strong>{{WICRawRenderMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the notification callback method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the notification callback method.</p> </dd> + + + + + <p>Provides information and functionality specific to the {{DDS}} image format.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapDecoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsDecoder}}</strong>.</p> + + + + <p>Gets {{DDS}}-specific data.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the structure where the information is returned.</p> </dd> + + + + + <p>Retrieves the specified frame of the {{DDS}} image.</p> + <p>A {{DDS}} file can contain multiple images that are organized into a three level hierarchy. First, {{DDS}} file may contain multiple textures in a texture array. Second, each texture can have multiple mip levels. Finally, the texture may be a 3D (volume) texture and have multiple slices, each of which is a 2D texture. See the {{DDS}} documentation for more information.</p><p>{{WIC}} maps this three level hierarchy into a linear array of <strong>{{IWICBitmapFrameDecode}}</strong>, accessible via <strong>{{IWICBitmapDecoder::GetFrame}}</strong>. However, determining which frame corresponds to a triad of <em>arrayIndex</em>, <em>mipLevel</em>, and <em>sliceIndex</em> value is not trivial because each mip level of a 3D texture has a different depth (number of slices). This method provides additional convenience over <strong>{{IWICBitmapDecoder::GetFrame}}</strong> for {{DDS}} images by calculating the correct frame given the three indices. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested index within the texture array.</p> </dd> + + + <dd> <p> The requested mip level.</p> </dd> + + + <dd> <p>The requested slice within the 3D texture. +</p> </dd> + + + <dd> <p>A reference to a <strong>{{IWICBitmapFrameDecode}}</strong> object. +</p> </dd> + + + + + <p>Enables writing {{DDS}} format specific information to an encoder.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapEncoder}}</strong> using the {{DDS}} codec and QueryInterface for <strong>{{IWICDdsEncoder}}</strong>.</p> + + + + <p>Sets {{DDS}}-specific data.</p> + <p>You cannot call this method after you have started to write frame data, for example by calling <strong>{{IWICDdsEncoder::CreateNewFrame}}</strong>. </p><p>Setting {{DDS}} parameters using this method provides the {{DDS}} encoder with information about the expected number of frames and the dimensions and other parameters of each frame. The {{DDS}} encoder will fail if you do not set frame data that matches these expectations. For example, if you set <strong>{{WICDdsParameters::Width}}</strong> and <strong>Height</strong> to 32, and <strong>MipLevels</strong> to 6, the {{DDS}} encoder will expect 6 frames with the following dimensions:</p><ul> <li>32x32 pixels.</li> <li>16x16 pixels.</li> <li>8x8 pixels.</li> <li>4x4 pixels.</li> <li>2x2 pixels.</li> <li>1x1 pixels.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is described.</p> </dd> + + + + + <p>Gets {{DDS}}-specific data.</p> + <p>An application can call <strong>GetParameters</strong> to obtain the default {{DDS}} parameters, modify some or all of them, and then call <strong>SetParameters</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Points to the structure where the information is returned.</p> </dd> + + + + + <p>Creates a new frame to encode.</p> + <p>This is equivalent to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, but returns additional information about the array index, mip level and slice of the newly created frame. In contrast to <strong>{{IWICBitmapEncoder::CreateNewFrame}}</strong>, there is no <strong>{{IPropertyBag2}}</strong>* parameter because individual {{DDS}} frames do not have separate properties.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the newly created frame object.</p> </dd> + + + <dd> <p>Points to the location where the array index is returned.</p> </dd> + + + <dd> <p>Points to the location where the mip level index is returned.</p> </dd> + + + <dd> <p>Points to the location where the slice index is returned.</p> </dd> + + + + + <p>Provides access to a single frame of {{DDS}} image data in its native <strong>{{DXGI_FORMAT}}</strong> form, as well as information about the image data.</p> + <p>This interface is implemented by the {{WIC}} {{DDS}} codec. To obtain this interface, create an <strong>{{IWICBitmapFrameDecode}}</strong> using the {{DDS}} codec and QueryInterface for {{IID_IWICDdsFrameDecode}}.</p> + + + + <p>Gets the width and height, in blocks, of the {{DDS}} image.</p> + <p>For block compressed textures, the returned width and height values do not completely define the texture size because the image is padded to fit the closest whole block size. For example, three {{BC1}} textures with pixel dimensions of 1x1, 2x2 and 4x4 will all report <em>pWidthInBlocks</em> = 1 and <em>pHeightInBlocks</em> = 1. </p><p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method returns the texture size in pixels; for these formats the block size returned by <strong>{{IWICDdsFrameDecoder::GetFormatInfo}}</strong> is 1x1. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The width of the {{DDS}} image in blocks.</p> </dd> + + + <dd> <p>The height of the {{DDS}} image in blocks.</p> </dd> + + + + + <p>Gets information about the format in which the {{DDS}} image is stored.</p> + <p>This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID2D1DeviceContext::CreateBitmap}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Information about the {{DDS}} format.</p> </dd> + + + + + <p>Requests pixel data as it is natively stored within the {{DDS}} file.</p> + <p>If the texture does not use a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method behaves similarly to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. However, it does not perform any pixel format conversion, and instead produces the raw data from the {{DDS}} file.</p><p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, this method copies the block data directly into the provided buffer. In this case, the <em>prcBoundsInBlocks</em> parameter is defined in blocks, not pixels. To determine if this is the case, call <strong>GetFormatInfo</strong> and read the <strong>DxgiFormat</strong> member of the returned <strong>{{WICDdsFormatInfo}}</strong> structure. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The rectangle to copy from the source. A {{NULL}} value specifies the entire texture.</p> <p>If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, all values of the rectangle are expressed in number of blocks, not pixels.</p> </dd> + + + <dd> <p>The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed <strong>{{DXGI_FORMAT}}</strong>, a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.</p> </dd> + + + <dd> <p>The size, in bytes, of the destination buffer.</p> </dd> + + + <dd> <p>A reference to the destination buffer.</p> </dd> + + + + + <p>Exposes methods for decoding {{JPEG}} images. Provides access to the Start Of Frame ({{SOF}}) header, Start of Scan ({{SOS}}) header, the Huffman and Quantization tables, and the compressed {{JPEG}} {{JPEG}} data. Also enables indexing for efficient random access. </p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameDecoder}}</strong> interface for the {{JPEG}} decoder.</p> + + + + <p>Retrieves a value indicating whether this decoder supports indexing for efficient random access.</p> + <p>Indexing is only supported for some {{JPEG}} types. Call this method</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>True if indexing is supported; otherwise, false.</p> </dd> + + + + + <p>Enables indexing of the {{JPEG}} for efficient random access.</p> + <p>This method enables efficient random-access to the image pixels at the expense of memory usage. The amount of memory required for indexing depends on the requested index granularity. Unless <strong>SetIndexing</strong> is called, it is much more efficient to access a {{JPEG}} by progressing through its pixels top-down during calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong>. +</p><p>This method will fail if indexing is unsupported on the file. <strong>{{IWICJpegFrameDecode::DoesSupportIndexing}}</strong> should be called to first determine whether indexing is supported. If this method is called multiple times, the final call changes the index granularity to the requested size. +</p><p>The provided interval size controls horizontal spacing of index entries. This value is internally rounded up according to the {{JPEG}}?s {{MCU}} (minimum coded unit) size, which is typically either 8 or 16 unscaled pixels. The vertical size of the index interval is always equal to one {{MCU}} size.</p><p> Indexes can be generated immediately, or during future calls to <strong>{{IWICBitmapSource::CopyPixels}}</strong> to reduce redundant decompression work. </p> + <p>Returns {{S_OK}} upon successful completion.</p> + + + <dd> <p>A value specifying whether indexes should be generated immediately or deferred until a future call to <strong>{{IWICBitmapSource::CopyPixels}}</strong>.</p> </dd> + + + <dd> <p>The granularity of the indexing, in pixels.</p> </dd> + + + + + <p>Removes the indexing from a {{JPEG}} that has been indexed using <strong>{{IWICJpegFrameDecode::SetIndexing}}</strong>.</p> + <p>Returns {{S_OK}} upons successful completion.</p> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with <strong>{{IWICJpegFrameDecode::GetScanHeader}}</strong>.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame ({{SOF}}) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves parameters from the Start Of Scan ({{SOS}}) marker for the scan with the specified index.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The index of the scan for which header data is retrieved.</p> </dd> + + + <dd> <p>A reference that receives the frame header data.</p> </dd> + + + + + <p>Retrieves a copy of the compressed {{JPEG}} scan directly from the {{WIC}} decoder frame's output stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The byte position in the scan data to begin copying. Use 0 on the first call. If the output buffer size is insufficient to store the entire scan, this offset allows you to resume copying from the end of the previous copy operation.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pbScanData</em> array.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>A reference that receives the size of the scan data actually copied into <em>pbScanData</em>. The size returned may be smaller that the size of <em>cbScanData</em>. This parameter may be {{NULL}}.</p> </dd> + + + + + + + + <p>Exposes methods for writing compressed {{JPEG}} scan data directly to the {{WIC}} encoder's output stream. Also provides access to the Huffman and quantization tables.</p> + <p>Obtain this interface by calling <strong>{{IUnknown::QueryInterface}}</strong> on the Windows-provided <strong>{{IWICBitmapFrameEncoder}}</strong> interface for the {{JPEG}} encoder.</p><p>The {{WIC}} {{JPEG}} encoder supports a smaller subset of {{JPEG}} features than the decoder does.</p><ul> <li>The encoder is limited to a single scan. It does not support encoding images that are multi-scan, either for progressive encoding or planar component data.</li> <li>The encoder supports two quantization tables, two {{AC}} Huffman tables, and two {{DC}} Huffman tables. The luma tables are used for the Y channel and, in the case of {{YCCK}}, the black channel. The chroma tables are used for the CbCr channels. </li> <li>The encoder supports encoding gray, {{YCbCr}} ({{RGB}}), and {{YCCK}} ({{CMYK}}).</li> <li>The encoder supports 4 fixed compontent subsampling, 4:2:0, 4:2:2, 4:4:0, and 4:4:4. This subsamples chroma only.</li> <li>The encoder does not support restart markers.</li> </ul> + + + + <p>Retrieves a copy of the {{AC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pAcHuffmanTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{AC}} Huffman table to retrieve.</p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the {{DC}} Huffman table for the specified scan and table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the {{DC}} Huffman table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Retrieves a copy of the quantization table.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>{{S_OK}}</dt> </dl> </td><td> <p>The operation was successful.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDJPEGSCANINDEX}} </dt> </dl> </td><td> <p>The specified scan index is invalid.</p> </td></tr> <tr><td> <dl> <dt>{{WINCODEC_ERR_INVALIDPARAMETER}}</dt> </dl> </td><td> <p>Can occur if <em>pTable</em> is {{NULL}} or if <em>tableIndex</em> does not point to a valid table slot. Check the scan header for valid table indices.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the scan for which data is retrieved.</p> </dd> + + + <dd> <p>The index of the quantization table to retrieve. </p> </dd> + + + <dd> <p>A reference that receives the table data. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Writes scan data to a {{JPEG}} frame.</p> + <p><strong>WriteScan</strong> may be called multiple times. Each call appends the scan data specified to any previous scan data. Complete the scan by calling <strong>{{IWICBitmapFrameEncode::Commit}}</strong>. </p><p>Any calls to set encoder parameters or image metadata that will appear before the scan data in the resulting {{JPEG}} file must be completed before the first call to this method. This includes calls to <strong>{{IWICBitmapFrameEncode::SetColorContexts}}</strong> , <strong>{{IWICBitmapFrameEncode::SetPalette}}</strong>, <strong>{{IWICBitmapFrameEncode::SetPixelFormat}}</strong>, <strong>{{IWICBitmapFrameEncode::SetResolution}}</strong>, and <strong>{{IWICBitmapFrameEncode::SetThumbnail}}</strong>. <strong>{{IWICBitmapFrameEncode::SetSize}}</strong> is required as it has no default value for encoded image size. +</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The size of the data in the <em>pbScanData</em> parameter.</p> </dd> + + + <dd> <p>The scan data to write.</p> </dd> + + + + + + + + + + + + + + + + + <p>Obtains a <strong>{{IWICBitmapSource}}</strong> in the desired pixel format from a given <strong>{{IWICBitmapSource}}</strong>.</p> + <p>If the <em>pISrc</em> bitmap is already in the desired format, <em>pISrc</em> is copied to the destination bitmap reference and a reference is added. If it is not in the desired format however, <strong>{{WICConvertBitmapSource}}</strong> will instantiate a <em>dstFormat</em> format converter and initialize it with <em>pISrc</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>The <strong>{{WICCreateBitmapFromSection}}</strong> function calls the <strong>{{WICCreateBitmapFromSectionEx}}</strong> function with the <em>desiredAccessLevel</em> parameter set to <strong>{{WICSectionAccessLevelRead}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Returns a <strong>{{IWICBitmapSource}}</strong> that is backed by the pixels of a Windows Graphics Device Interface ({{GDI}}) section handle.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains the short name associated with a given {{GUID}}.</p> + <p>Windows Imaging Component ({{WIC}}) short name mappings can be found within the following registry key: </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} to retrieve the short name for.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference that receives the short name associated with the {{GUID}}.</p> </dd> + + + <dd> <p>The actual size needed to retrieve the entire short name associated with the {{GUID}}.</p> </dd> + + + + + <p>Obtains the {{GUID}} associated with the given short name.</p> + <p>You can extend the short name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Namespace</strong> ????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the short name.</p> </dd> + + + <dd> <p>A reference that receives the {{GUID}} associated with the given short name.</p> </dd> + + + + + <p>Obtains the name associated with a given schema.</p> + <p>You can extend the schema name mapping by adding to the following registry key:</p><p> </p><pre><strong>{{HKEY_CLASSES_ROOT}}</strong> ???<strong>{{CLSID}}</strong> ??????<strong>{FAE3D380-{{FEA4}}-4623-8C75-{{C6B61110B681}}}</strong> ?????????<strong>Schemas</strong> ????????????<strong>{{BB5ACC38}}-{{F216}}-4CEC-{{A6C5}}-5F6E739763A9</strong> ???????????????<strong>...</strong></pre><p>For more information, see How to Write a {{WIC}}-Enabled Codec.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The metadata format {{GUID}}.</p> </dd> + + + <dd> <p>The {{URI}} string of the schema for which the name is to be retrieved.</p> </dd> + + + <dd> <p>The size of the <em>wzName</em> buffer.</p> </dd> + + + <dd> <p>A reference to a buffer that receives the schema's name.</p> <p>To obtain the required buffer size, call <strong>{{WICMapSchemaToName}}</strong> with <em>cchName</em> set to 0 and <em>wzName</em> set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The actual buffer size needed to retrieve the entire schema name.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Specifies how the Crop effect handles the crop rectangle falling on fractional pixel coordinates. </p> + + + + <p>Specifies the color channel the Displacement map effect extracts the intensity from and uses it to spatially displace the image in the X or Y direction.</p> + + + + <p> Speficies whether a flip and/or rotation operation should be performed by the Bitmap source effect </p> + + + + <p> Identifiers for properties of the Gaussian blur effect. </p> + + + + <p> The optimization mode for the Gaussian blur effect. </p> + + + + <p> Identifiers for properties of the Directional blur effect. </p> + + + + <p>Specifies the optimization mode for the Directional blur effect.</p> + + + + <p> Identifiers for properties of the Shadow effect. </p> + + + + <p>The level of performance optimization for the Shadow effect.</p> + + + + <p> Identifiers for properties of the Blend effect. </p> + + + + <p>The blend mode used for the Blend effect.</p> + + + + <p>Identifiers for properties of the Saturation effect.</p> + + + + <p>Identifiers for properties of the Hue rotate effect.</p> + + + + <p>Identifiers for the properties of the Color matrix effect.</p> + + + + <p>The alpha mode of the output of the Color matrix effect.</p> + + + + <p> Identifiers for properties of the Bitmap source effect. </p> + + + + <p>The interpolation mode used to scale the image in the Bitmap source effect. If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties. </p> + + + + <p>Specifies the alpha mode of the output of the Bitmap source effect.</p> + + + + <p> Identifiers for properties of the Composite effect. </p> + + + + <p> Identifiers for properties of the 3D transform effect. </p> + + + + <p> The interpolation mode the 3D transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for the properties of the 3D perspective transform effect. </p> + + + + <p> The interpolation mode the 3D perspective transform effect uses on the image. There are 5 scale modes that range in quality and speed. </p> + + + + <p>Identifiers for properties of the 2D affine transform effect.</p> + + + + <p>The interpolation mode to be used with the 2D affine transform effect to scale the image. There are 6 scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode uses more processing time than the nearest neighbor mode, but outputs a higher quality image.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the {{DPI}} compensation effect. </p> + + + + <p> The interpolation mode the {{DPI}} compensation effect uses to scale the image. </p> + + + + <p> Identifiers for properties of the Scale effect. </p> + + + + <p>The interpolation mode the Scale effect uses to scale the image. There are 6 scale modes that range in quality and speed. </p> + + + + <p> Identifiers for properties of the Turbulence effect. </p> + + + + <p>The turbulence noise mode for the Turbulence effect. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function. </p> + + + + <p> Identifiers for properties of the Displacement map effect. </p> + + + + <p> Identifiers for the properties of the Color management effect. </p> + + + + <p> Indicates how the Color management effect should interpret alpha data that is contained in the input image. </p> + + + + <p>The quality level of the transform for the Color management effect. </p> + + + + <p>Specifies which {{ICC}} rendering intent the Color management effect should use.</p> + + + + <p> Identifiers for properties of the Histogram effect. </p> + + + + <p> Identifiers for properties of the Point-specular lighting effect. </p> + + + + <p>The interpolation mode the Point-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Spot-specular lighting effect. </p> + + + + <p>The interpolation mode the Spot-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Distant-specular lighting effect. </p> + + + + <p>The interpolation mode the Distant-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p> Identifiers for properties of the Point-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Point-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed</p> + + + + <p> Identifiers for properties of the Spot-diffuse lighting effect. </p> + + + + <p>The interpolation mode the Spot-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for properties of the Distant-diffuse lighting effect.</p> + + + + <p>The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + <dd> <p>Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.</p> </dd> + + + <dd> <p>Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.</p> </dd> + + + <dd> <p>Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. </p> </dd> + + + <dd> <p>Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.</p> </dd> + + + <dd> <p>Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.</p> </dd> + + + <dd> <p>Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.</p> </dd> + + + + + <p> Identifiers for properties of the Flood effect. </p> + + + + <p>Identifiers for properties of the Linear transfer effect.</p> + + + + <p> Identifiers for properties of the Gamma transfer effect. </p> + + + + <p> Identifiers for properties of the Table transfer effect. </p> + + + + <p>Identifiers for properties of the Discrete transfer effect.</p> + + + + <p>Identifiers for properties of the Convolve matrix effect.</p> + + + + <p>The interpolation mode the Convolve matrix effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.</p> + + + + <p>Identifiers for the properties of the Brightness effect.</p> + + + + <p> Identifiers for the properties of the Arithmetic composite effect. </p> + + + + <p>Identifiers for properties of the Crop effect.</p> + + + + <p>Identifiers for properties of the Border effect.</p> + + + + <p>The edge mode for the Border effect. </p> + + + + <p> Identifiers for properties of the Morphology effect. </p> + + + + <p> The mode for the Morphology effect. </p> + + + + <p> Identifiers for properties of the Tile effect. </p> + + + + <p> Identifiers for properties of the Atlas effect. </p> + + + + <p> Identifiers for properties of the Opacity metadata effect. </p> + + + + <p>Specifies the types of properties supported by the Direct2D property interface. </p> + + + + <dd> <p>An unknown property.</p> </dd> + + + <dd> <p>An arbitrary-length string.</p> </dd> + + + <dd> <p>A 32-bit integer value constrained to be either 0 or 1.</p> </dd> + + + <dd> <p>An unsigned 32-bit integer.</p> </dd> + + + <dd> <p>A signed 32-bit integer.</p> </dd> + + + <dd> <p>A 32-bit float.</p> </dd> + + + <dd> <p>Two 32-bit float values.</p> </dd> + + + <dd> <p> Three 32-bit float values.</p> </dd> + + + <dd> <p>Four 32-bit float values.</p> </dd> + + + <dd> <p>An arbitrary number of bytes.</p> </dd> + + + <dd> <p>A returned {{COM}} or nano-{{COM}} interface. </p> </dd> + + + <dd> <p>An enumeration. The value should be treated as a <strong>{{UINT32}}</strong> with a defined array of fields to specify the bindings to human-readable strings.</p> </dd> + + + <dd> <p>An enumeration. The value is the count of sub-properties in the array. The set of array elements will be contained in the sub-property.</p> </dd> + + + <dd> <p>A {{CLSID}}.</p> </dd> + + + <dd> <p>A 3x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x2 matrix of float values.</p> </dd> + + + <dd> <p>A 4x4 matrix of float values.</p> </dd> + + + <dd> <p>A 5x4 matrix of float values.</p> </dd> + + + <dd> <p>A nano-{{COM}} color context interface reference.</p> </dd> + + + + + <p>Specifies the indices of the system properties present on the <strong>{{ID2D1Properties}}</strong> interface for an <strong>{{ID2D1Effect}}</strong>.</p> + <p>Under normal circumstances the minimum and maximum number of inputs to the effect are the same. If the effect supports a variable number of inputs, the <strong>{{ID2D1Effect::SetNumberOfInputs}}</strong> method can be used to choose the number that the application will enable.</p> + + + + <p>Specifies the indices of the system sub-properties that may be present in any property.</p> + + + + <dd> <p>The name for the parent property.</p> </dd> + + + <dd> <p>A Boolean indicating whether the parent property is writeable.</p> </dd> + + + <dd> <p>The minimum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The maximum value that can be set to the parent property.</p> </dd> + + + <dd> <p>The default value of the parent property.</p> </dd> + + + <dd> <p>An array of name/index pairs that indicate the possible values that can be set to the parent property.</p> </dd> + + + <dd> <p>An index sub-property used by the elements of the <strong>{{D2D1_SUBPROPERTY_FIELDS}}</strong> array.</p> </dd> + + + + + <p>Specifies how a bitmap can be used.</p> + <p><strong>{{D2D1_BITMAP_OPTIONS_NONE}}</strong> implies that none of the flags are set. This means that the bitmap can be used for drawing from, cannot be set as a target and cannot be read from by the {{CPU}}.</p><p><strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> means that the bitmap can be specified as a target in <strong>{{ID2D1DeviceContext::SetTarget}}</strong>. If you also specify the <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> flag the bitmap can be used a target but, it cannot be drawn from. Attempting to draw with a bitmap that has both flags set will result in the device context being put into an error state with <strong>{{D2DERR_BITMAP_CANNOT_DRAW}}</strong>. </p><p><strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> means that the bitmap can be mapped by using <strong>{{ID2D1Bitmap1::Map}}</strong>. This flag requires <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> and cannot be combined with any other flags. The bitmap must be updated with the <strong>CopyFromBitmap</strong> or <strong>CopyFromRenderTarget</strong> methods. </p><strong>Note</strong>??You should only use <strong>{{D2D1_BITMAP_OPTIONS_CANNOT_DRAW}}</strong> is when the purpose of the bitmap is to be a target only or when the bitmap will be mapped .?<p><strong>{{D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE}}</strong> means that it is possible to get a {{DC}} associated with this bitmap. This must be used in conjunction with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>. The <strong>{{DXGI_FORMAT}}</strong> must be either <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong>.</p> + + + <dd> <p>The bitmap is created with default properties.</p> </dd> + + + <dd> <p>The bitmap can be used as a device context target.</p> </dd> + + + <dd> <p>The bitmap cannot be used as an input. </p> </dd> + + + <dd> <p>The bitmap can be read from the {{CPU}}.</p> </dd> + + + <dd> <p>The bitmap works with <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong>.</p> <strong>Note</strong>??This flag is not available in Windows Store apps. ? </dd> + + + + + <p>Used to specify the blend mode for all of the Direct2D blending operations.</p> + <p>The figure here shows an example of each of the modes with images that have an opacity of 1.0 or 0.5. </p><p></p><p>There can be slightly different interpretations of these enumeration values depending on where the value is used.</p><ul> <li> <p>With a composite effect: +</p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong> with the inputs inverted.</li> <li> <p> As a parameter to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>: </p><strong>{{D2D1_COMPOSITE_MODE_DESTINATION_COPY}}</strong> is a no-op since the destination is already in the selected target.</li> </ul> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The destination is rendered over the source.</p> </dd> + + + <dd> <p>Performs a logical clip of the source pixels against the destination pixels.</p> </dd> + + + <dd> <p>The inverse of the <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong> operation.</p> </dd> + + + <dd> <p>This is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_IN}}</strong>.</p> </dd> + + + <dd> <p>The is the logical inverse to <strong>{{D2D1_COMPOSITE_MODE_DESTINATION_IN}}</strong>.</p> </dd> + + + <dd> <p>Writes the source pixels over the destination where there are destination pixels.</p> </dd> + + + <dd> <p>The logical inverse of <strong>{{D2D1_COMPOSITE_MODE_SOURCE_ATOP}}</strong>.</p> </dd> + + + <dd> <p>The source is inverted with the destination.</p> </dd> + + + <dd> <p>The channel components are summed.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>Equivalent to <strong>{{D2D1_COMPOSITE_MODE_SOURCE_COPY}}</strong>, but pixels outside of the source bounds are unchanged. +</p> </dd> + + + <dd> <p>Destination colors are inverted according to a source mask. +</p> </dd> + + + + + <p>Represents the bit depth of the imaging pipeline in Direct2D.</p> + <strong>Note</strong>?? Feature level 9 may or may not support precision types other than 8BPC.? + + + <dd> <p>The buffer precision is not specified.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 8-bit normalized integer standard {{RGB}} data per channel.</p> </dd> + + + <dd> <p>Use 16-bit normalized integer per channel.</p> </dd> + + + <dd> <p>Use 16-bit floats per channel.</p> </dd> + + + <dd> <p>Use 32-bit floats per channel.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits.</p> <p>Do not use this value.</p> </dd> + + + + + <p>Specifies how the memory to be mapped from the corresponding <strong>{{ID2D1Bitmap1}}</strong> should be treated.</p> + <p>The <strong>{{D2D1_MAP_OPTIONS_READ}}</strong> option can be used only if the bitmap was created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag.</p><p>These flags will be not be able to be used on bitmaps created by the <strong>{{ID2D1DeviceContext}}</strong>. However, the {{ID2D1SourceTransform}} will receive bitmaps for which these flags are valid.</p><p><strong>{{D2D1_MAP_OPTIONS_DISCARD}}</strong> can only be used with <strong>{{D2D1_MAP_OPTIONS_WRITE}}</strong>. Both of these options are only available through the effect author {{API}}, not through the Direct2D rendering {{API}}. +</p> + + + + <p>This is used to specify the quality of image scaling with <strong>{{ID2D1DeviceContext::DrawImage}}</strong> and with the 2D affine transform effect. </p> + + + + + <p>Specifies how units in Direct2D will be interpreted.</p> + <p>Setting the unit mode to <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong> is similar to setting the <strong>{{ID2D1DeviceContext}}</strong> dots per inch (dpi) to 96. However, Direct2D still checks the dpi to determine the threshold for enabling vertical antialiasing for text, and when the unit mode is restored, the dpi will be remembered.</p> + + + <dd> <p>Units will be interpreted as device-independent pixels (1/96").</p> </dd> + + + <dd> <p>Units will be interpreted as pixels.</p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>This specifies options that apply to the device context for its lifetime.</p> + + + + <dd> <p>The device context is created with default options.</p> </dd> + + + <dd> <p>Distribute rendering work across multiple threads. Refer to Improving the performance of Direct2D apps for additional notes on the use of this flag.</p> </dd> + + + + + <p>Defines how the world transform, dots per inch (dpi), and stroke width affect the shape of the pen used to stroke a primitive.</p> + <p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the stroke isn't affected by the world transform.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_FIXED}}</strong> the application has the same behavior in Windows 7 and later.</p><p>If you specify <strong>{{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}}</strong> the stroke is always 1 pixel wide.</p><p>Apart from the stroke, any value derived from the stroke width is not affected when the transformType is either fixed or hairline. This includes miters, line caps and so on.</p><p> It is important to distinguish between the geometry being stroked and the shape of the stroke pen. When {{D2D1_STROKE_TRANSFORM_TYPE_FIXED}} or {{D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE}} is specified, the geometry still respects the transform and dpi, but the pen that traces the geometry will not.</p><p>Here is an illustration of a stroke with dashing and a skew and stretch transform.</p><p>And here is an illustration of a fixed width stroke which does not get transformed.</p> + + + <dd> <p>The stroke respects the currently set world transform, the dpi, and the stroke width.</p> </dd> + + + <dd> <p>The stroke does not respect the world transform but it does respect the dpi and stroke width.</p> </dd> + + + <dd> <p>The stroke is forced to 1 pixel wide (in device space) and does not respect the world transform, the dpi, or the stroke width.</p> </dd> + + + + + <p>Used to specify the geometric blend mode for all Direct2D primitives. </p> + + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The source is copied to the destination; the destination pixels are ignored.</p> </dd> + + + <dd> <p>The resulting pixel values use the minimum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + <dd> <p>The resulting pixel values are the sum of the source and destination pixel values. Available in Windows?8 and later.</p> </dd> + + + + + <p>Specifies the threading mode used while simultaneously creating the device, factory, and device context. +</p> + + + <dd> <p>Resources may only be invoked serially. Device context state is not protected from multi-threaded access. </p> </dd> + + + <dd> <p>Resources may be invoked from multiple threads. Resources use interlocked reference counting and their state is protected. +</p> </dd> + + + + + <p>Defines how to interpolate between colors.</p> + + + <dd> <p>Colors are interpolated with straight alpha.</p> </dd> + + + <dd> <p>Colors are interpolated with premultiplied alpha.</p> </dd> + + + + + <p>Specifies how the layer contents should be prepared. +</p> + + + <dd> <p>Default layer behavior. A premultiplied layer target is pushed and its contents are cleared to transparent black. +</p> </dd> + + + <dd> <p> The layer is not cleared to transparent black.</p> </dd> + + + <dd> <p> The layer is always created as ignore alpha. All content rendered into the layer will be treated as opaque.</p> </dd> + + + + + <p>Defines when font resources should be subset during printing.</p> + + + <dd> <p>Uses a heuristic strategy to decide when to subset fonts. </p> <strong>Note</strong>??If the print driver has requested archive-optimized content, then Direct2D will subset fonts once, for the entire document. ? </dd> + + + <dd> <p>Subsets and embeds font resources in each page, then discards that font subset after the page is printed out. </p> </dd> + + + <dd> <p>Sends out the original font resources without subsetting along with the page that first uses the font, and re-uses the font resources for later pages without resending them. </p> </dd> + + + + + <p>This structure allows a <strong>{{ID2D1Bitmap1}}</strong> to be created with bitmap options and color context information available. +</p> + <p>If both <strong>dpiX</strong> and <strong>dpiY</strong> are 0, the dpi of the bitmap will be set to the desktop dpi if the device context is a windowed context, or 96 dpi for any other device context.</p> + + + + <p> Describes mapped memory from the <strong>{{ID2D1Bitmap1::Map}}</strong> {{API}}.</p> + <p>The mapped rectangle is used to map a rectangle into the caller's address space.</p> + + + + <p>Describes limitations to be applied to an imaging effect renderer.</p> + <p>The renderer can allocate tiles larger than the minimum tile allocation. The allocated tiles will be powers of two of the minimum size on each axis, except that the size on each axis will not exceed the guaranteed maximum texture size for the device feature level. </p><p>The <strong>minimumPixelRenderExtent</strong> is the size of the square tile below which the renderer will expand the tile allocation rather than attempting to subdivide the rendering tile any further. When this threshold is reached, the allocation tile size is expanded. This might occur repeatedly until rendering can either proceed or it is determined that the graph cannot be rendered.</p><p>The buffer precision is used for intermediate buffers if it is otherwise unspecified by the effects or the internal effect topology. The application can also use the <strong>Output.BufferPrecision</strong> method to specify the output precision for a particular effect. This takes precedence over the context precision. In addition, the effect might set a different precision internally if required. If the buffer type on the context is <strong>{{D2D1_BUFFER_PRECISION_UNKNOWN}}</strong> and otherwise not specified by the effect or transform, the precision of the output will be the maximum precision of the inputs to the transform. The buffer precision does not affect the number of channels used. </p> + + + <dd> <p>The buffer precision used by default if the buffer precision is not otherwise specified by the effect or the transform.</p> </dd> + + + <dd> <p>The tile allocation size to be used by the imaging effect renderer.</p> </dd> + + + + + <p>Describes features of an effect.</p> + <strong>Note</strong>??The caller should not rely heavily on the input rectangles returned by this structure. They can change due to subtle changes in effect implementations and due to optimization changes in the effect rendering system.? + + + <dd> <p>The effect whose input connection is being specified.</p> </dd> + + + <dd> <p>The input index of the effect that is being considered.</p> </dd> + + + <dd> <p>The amount of data that would be available on the input. This can be used to query this information when the data is not yet available. </p> </dd> + + + + + <p>Describes a point on a path geometry.</p> + + + + <dd> <p>The end point after walking the path.</p> </dd> + + + <dd> <p>A unit vector indicating the tangent point.</p> </dd> + + + <dd> <p>The index of the segment on which point resides. This index is global to the entire path, not just to a particular figure.</p> </dd> + + + <dd> <p>The index of the figure on which point resides.</p> </dd> + + + <dd> <p>The length of the section of the path stretching from the start of the path to the start of <strong>endSegment</strong>.</p> </dd> + + + + + <p>Describes image brush features.</p> + + + + <dd> <p>The source rectangle in the image space from which the image will be tiled or interpolated.</p> </dd> + + + <dd> <p>The extend mode in the image x-axis.</p> </dd> + + + <dd> <p>The extend mode in the image y-axis.</p> </dd> + + + <dd> <p>The interpolation mode to use when scaling the image brush.</p> </dd> + + + + + <p> Describes the extend modes and the interpolation mode of an <strong>{{ID2D1BitmapBrush}}</strong>.</p> + + + + <p>Describes the stroke that outlines a shape.</p> + + + + <dd> <p>The cap to use at the start of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the end of each open figure.</p> </dd> + + + <dd> <p>The cap to use at the start and end of each dash.</p> </dd> + + + <dd> <p>The line join to use.</p> </dd> + + + <dd> <p>The limit beyond which miters are either clamped or converted to bevels.</p> </dd> + + + <dd> <p>The type of dash to use.</p> </dd> + + + <dd> <p>The location of the first dash, relative to the start of the figure. </p> </dd> + + + <dd> <p>The rule that determines what render target properties affect the nib of the stroke.</p> </dd> + + + + + <p>Contains the content bounds, mask information, opacity settings, and other options for a layer resource.</p> + + + <dd> <p>The content bounds of the layer. Content outside these bounds is not guaranteed to render.</p> </dd> + + + <dd> <p>The geometric mask specifies the area of the layer that is composited into the render target. </p> </dd> + + + <dd> <p>A value that specifies the antialiasing mode for the geometricMask. </p> </dd> + + + <dd> <p> A value that specifies the transform that is applied to the geometric mask when composing the layer.</p> </dd> + + + <dd> <p>An opacity value that is applied uniformly to all resources in the layer when compositing to the target.</p> </dd> + + + <dd> <p>A brush that is used to modify the opacity of the layer. The brush +is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel. </p> </dd> + + + <dd> <p>Additional options for the layer creation.</p> </dd> + + + + + <p>Describes the drawing state of a device context.</p> + + + <dd> <p>The antialiasing mode for subsequent nontext drawing operations. </p> </dd> + + + <dd> <p>The antialiasing mode for subsequent text and glyph drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>A label for subsequent drawing operations.</p> </dd> + + + <dd> <p>The transformation to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>The blend mode for the device context to apply to subsequent drawing operations.</p> </dd> + + + <dd> <p>{{D2D1_UNIT_MODE}}</p> </dd> + + + + + <p>The creation properties for a <strong>{{ID2D1PrintControl}}</strong> object.</p> + + + + <p>Specifies the options with which the Direct2D device, factory, and device context are created. +</p> + <p>The root objects referred to here are the Direct2D device, Direct2D factory and the Direct2D device context. +</p> + + + + <p>Represents a color context that can be used with an <strong>{{ID2D1Bitmap1}}</strong> object.</p> + + + + <p>Gets the color space of the color context.</p> + <p>This method returns the color space of the contained {{ICC}} profile.</p> + + + + <p>Gets the size of the color profile associated with the bitmap. </p> + <p>This can be used to allocate a buffer to receive the color profile bytes associated with the context.</p> + <p>This method returns the size of the profile in bytes.</p> + + + + <p>Gets the color profile bytes for an <strong>{{ID2D1ColorContext}}</strong>. </p> + <p>If <em>profileSize</em> is insufficient to store the entire profile, <em>profile</em> is zero-initialized before this method fails.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_BUFFER}}</td><td>The supplied buffer was too small to accomodate the data.</td></tr> </table><p>?</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Creates an <strong>{{ID2D1PrintControl}}</strong> object that converts Direct2D primitives stored in <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + <strong>Note</strong>??This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation?factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_FAIL}}</td><td>Generic failure code.</td></tr> <tr><td>{{D2DERR_PRINT_FORMAT_NOT_SUPPORTED}}</td><td>The print format is not supported by the document target.</td></tr> </table><p>?</p> + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <strong>Note</strong>??Direct2D may exceed the maximum texture memory you set with this method for a single frame if necessary to render the frame.? + <p>This method does not return a value.</p> + + + <dd> <p>The new maximum texture memory in bytes.</p> </dd> + + + + + <p>Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.</p> + <p>The maximum amount of texture memory in bytes.</p> + + + + <p>Clears all of the rendering resources used by Direct2D. </p> + <p> If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Discards only resources that haven't been used for greater than the specified time in milliseconds. The default is 0 milliseconds.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Sets the given input image by index. </p> + <p>If the input index is out of range, the input image is ignored. </p> + <p>This method does not return a value.</p> + + + <dd> <p>The index of the image to set.</p> </dd> + + + <dd> <p>The input image to set.</p> </dd> + + + <dd> <p>Whether to invalidate the graph at the location of the effect input</p> </dd> + + + + + <p>Allows the application to change the number of inputs to an effect.</p> + <p>Most effects do not support a variable number of inputs. Use <strong>{{ID2D1Properties::GetValue}}</strong> with the <strong>{{D2D1_PROPERTY_MIN_INPUTS}}</strong> and <strong>{{D2D1_PROPERTY_MAX_INPUTS}}</strong> values to determine the number of inputs supported by an effect.</p><p>If the input count is less than the minimum or more than the maximum supported inputs, the call will fail.</p><p>If the input count is unchanged, the call will succeed with <strong>{{S_OK}}</strong>. </p><p>Any inputs currently selected on the effect will be unaltered by this call unless the number of inputs is made smaller. If the number of inputs is made smaller, inputs beyond the selected range will be released.</p><p>If the method fails, the existing input and input count will remain unchanged.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the effect.</p> </dd> + + + + + <p>Represents a basic image-processing construct in Direct2D.</p> + <p>An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.</p> + + + + <p>Gets the number of inputs to the effect. </p> + + <p>This method returns the number of inputs to the effect. </p> + + + + <p>Gets the output image from the effect. </p> + <p>The output image can be set as an input to another effect, or can be directly passed into the <strong>{{ID2D1DeviceContext}}</strong> in order to render the effect. </p><p>It is also possible to use <strong>QueryInterface</strong> to retrieve the same output image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the output image for the effect.</p> </dd> + + + + + <p>A developer implemented interface that allows a metafile to be replayed.</p> + + + + <p> This method is called once for each record stored in a metafile.</p> + <p>Return true if the record is successfully.</p> + + + <dd> <p>The type of the record.</p> </dd> + + + <dd> <p>The data for the record.</p> </dd> + + + <dd> <p>The byte size of the record data.</p> </dd> + + + + + <p>A Direct2D resource that wraps a {{WMF}}, {{EMF}}, or {{EMF}}+ metafile.</p> + + + + <p>This method streams the contents of the command to the given metafile sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The sink into which Direct2D will call back.</p> </dd> + + + + + <p> Gets the bounds of the metafile, in device-independent pixels ({{DIPs}}), as reported in the metafile?s header.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p> </p><p>The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as {{XPS}} when some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.</p> + <p>The <strong>{{ID2D1CommandSink}}</strong> can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required. </p><p>The <strong>{{ID2D1CommandSink}}</strong> interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the <strong>{{ID2D1CommandList}}</strong> was created and will be passed in to the <strong>{{ID2D1CommandSink}}</strong> implementation. </p><p>Not all methods implemented by <strong>{{ID2D1DeviceContext}}</strong> are present.</p> + + + + <p>Notifies the implementation of the command sink that drawing is about to commence.</p> + <p> This method always returns <strong>{{S_OK}}</strong>. </p> + + + + <p>Indicates when <strong>{{ID2D1CommandSink}}</strong> processing has completed.</p> + <p>The <strong>{{HRESULT}}</strong> active at the end of the command list will be returned.</p><p> It allows the calling function or method to indicate a failure back to the stream implementation.</p> + <p>If the method/function succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the antialiasing mode that will be used to render any subsequent geometry.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode selected for the command list.</p> </dd> + + + + + <p>Sets the tags that correspond to the tags in the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The first tag to associate with the primitive.</p> </dd> + + + <dd> <p>The second tag to associate with the primitive.</p> </dd> + + + + + <p>Indicates the new default antialiasing mode for text.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The antialiasing mode for the text.</p> </dd> + + + + + <p>Indicates more detailed text rendering parameters.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters to use for text rendering.</p> </dd> + + + + + <p>Sets a new transform.</p> + <p>The transform will be applied to the corresponding device context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The transform to be set.</p> </dd> + + + + + <p>Sets a new primitive blend mode.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>The unit mode changes the meaning of subsequent units from device-independent pixels ({{DIPs}}) to pixels or the other way. The command sink does not record a {{DPI}}, this is implied by the playback context or other playback interface such as <strong>{{ID2D1PrintControl}}</strong>.</p> + <p>The unit mode changes the interpretation of units from {{DIPs}} to pixels or vice versa.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Clears the drawing area to the specified color. </p> + <p>The clear color is restricted by the currently selected clip and layer bounds.</p><p>If no color is specified, the color should be interpreted by context. Examples include but are not limited to:</p><ul> <li>Transparent black for a premultiplied bitmap target.</li> <li>Opaque black for an ignore bitmap target.</li> <li>Containing no content (or white) for a printer page.</li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The color to which the command sink should be cleared.</p> </dd> + + + + + <p>Indicates the glyphs to be drawn.</p> + <p> <strong>DrawText</strong> and <strong>DrawTextLayout</strong> are broken down into glyph runs and rectangles by the time the command sink is processed. So, these methods aren't available on the command sink. Since the application may require additional callback processing when calling <strong>DrawTextLayout</strong>, this semantic can't be easily preserved in the command list.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The upper left corner of the baseline.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Additional non-rendering information about the glyphs.</p> </dd> + + + <dd> <p>The brush used to fill the glyphs.</p> </dd> + + + <dd> <p>The measuring mode to apply to the glyphs.</p> </dd> + + + + + <p>Draws a line drawn between two points.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The start point of the line.</p> </dd> + + + <dd> <p>The end point of the line.</p> </dd> + + + <dd> <p>The brush used to fill the line.</p> </dd> + + + <dd> <p>The width of the stroke to fill the line.</p> </dd> + + + <dd> <p>The style of the stroke. If not specified, the stroke is solid.</p> </dd> + + + + + <p>Indicates the geometry to be drawn to the command sink.</p> + <p> <strong>Ellipses</strong> and <strong>rounded rectangles</strong> are converted to the corresponding ellipse and rounded rectangle geometries before calling into the <strong>DrawGeometry</strong> method. +</p> + <p>An {{HRESULT}}. </p> + + + <dd> <p>The geometry to be stroked.</p> </dd> + + + <dd> <p>The brush that will be used to fill the stroked geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a rectangle.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to be drawn to the command sink.</p> </dd> + + + <dd> <p>The brush used to stroke the geometry.</p> </dd> + + + <dd> <p>The width of the stroke.</p> </dd> + + + <dd> <p>The style of the stroke.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The <em>destinationRectangle</em> parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If you specify {{NULL}}, then the destination rectangle is (left=0, top=0, right = width(<em>sourceRectangle</em>), bottom = height(<em>sourceRectangle</em>). </p><p>The <em>sourceRectangle</em> defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> clips this rectangle to the size of the source bitmap, so it's impossible to sample outside of the bitmap. If you specify {{NULL}}, then the source rectangle is taken to be the size of the source bitmap. </p><p>The <em>perspectiveTransform</em> is specified in addition to the transform on device context. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Draws the provided image to the command sink. </p> + <p>Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The image to be drawn to the command sink.</p> </dd> + + + <dd> <p>This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin.</p> </dd> + + + <dd> <p>The corresponding rectangle in the image space will be mapped to the provided origins when processing the image.</p> </dd> + + + <dd> <p>The interpolation mode to use to scale the image if necessary. +</p> </dd> + + + <dd> <p>If specified, the composite mode that will be applied to the limits of the currently selected clip.</p> </dd> + + + + + <p>Draw a metafile to the device context.</p> + <p>The <em>targetOffset</em> defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image is rendered to the corresponding destination. If you don't specify the offset, the destination origin will be (0, 0). The top, left corner of the image will be mapped to the target offset. This will not necessarily be the origin. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Indicates a mesh to be filled by the command sink.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The mesh object to be filled.</p> </dd> + + + <dd> <p>The brush with which to fill the mesh.</p> </dd> + + + + + <p>Fills an opacity mask on the command sink.</p> + <p>The opacity mask bitmap must be considered to be clamped on each axis.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The bitmap whose alpha channel will be sampled to define the opacity mask.</p> </dd> + + + <dd> <p>The brush with which to fill the mask.</p> </dd> + + + <dd> <p>The destination rectangle in which to fill the mask. If not specified, this is the origin.</p> </dd> + + + <dd> <p>The source rectangle within the opacity mask. If not specified, this is the entire mask.</p> </dd> + + + + + <p>Indicates to the command sink a geometry to be filled.</p> + <p>If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.</p><p>Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to <strong>FillGeometry</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The geometry that should be filled.</p> </dd> + + + <dd> <p>The primary brush used to fill the geometry.</p> </dd> + + + <dd> <p>A brush whose alpha channel is used to modify the opacity of the primary fill brush. </p> </dd> + + + + + <p>Indicates to the command sink a rectangle to be filled.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle to fill.</p> </dd> + + + <dd> <p>The brush with which to fill the rectangle.</p> </dd> + + + + + <p>Pushes a clipping rectangle onto the clip and layer stack.</p> + <p>If the current world transform is not preserving the axis, <em>clipRectangle</em> is transformed and the bounds of the transformed rectangle are used instead.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The rectangle that defines the clip.</p> </dd> + + + <dd> <p>The antialias mode for the clip.</p> </dd> + + + + + <p>Pushes a layer onto the clip and layer stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The parameters that define the layer.</p> </dd> + + + <dd> <p>The layer resource that receives subsequent drawing operations.</p> </dd> + + + + + <p>Removes an axis-aligned clip from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Removes a layer from the layer and clip stack.</p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + + <p>Represents a sequence of commands that can be recorded and played back.</p> + <p>The command list does not include static copies of resources with the recorded set of commands. All bitmaps, effects, and geometries are stored as references to the actual resource and all the brushes are stored by value. All the resource creation and destruction happens outside of the command list. The following table lists resources and how they are treated inside of a command list.</p><table> <tr><th>Resource</th><th>How it is treated by the command list</th></tr> <tr><td>Solid-color brush</td><td>Passed by value.</td></tr> <tr><td>Bitmap brush</td><td>The brush is passed by value but the bitmap that is used to create the brush is in fact referenced.</td></tr> <tr><td>Gradient brushes ? both linear and radial gradient</td><td>The brush is passed by value but the gradient stop collection itself is referenced. The gradient stop collection object is immutable. </td></tr> <tr><td>Bitmaps</td><td>Passed by reference.</td></tr> <tr><td>Drawing state block</td><td>The actual state on the device context is converted into set functions like set transform and is passed by value.</td></tr> <tr><td>Geometry</td><td>Immutable object passed by value.</td></tr> <tr><td>Stroke style</td><td>Immutable object passed by value.</td></tr> <tr><td>Mesh</td><td>Immutable object passed by value.</td></tr> </table><p>?</p> + + + + <p>Streams the contents of the command list to the specified command sink. </p> + <p>The command sink can be implemented by any caller of the {{API}}.</p><p>If the caller makes any design-time failure calls while a command list is selected as a target, the command list is placed in an error state. The stream call fails without making any calls to the passed in sink.</p><p>Sample use:</p><pre>Class MyCommandSink : public {{ID2D1CommandSink}} +{ +public: // All of the {{ID2D1CommandSink}} methods implemented here. +}; {{HRESULT}} +StreamToMyCommandSink( __in {{ID2D1CommandList}} *pCommandList ) +{ {{HRESULT}} hr = {{S_OK}}; MyCommandSink *pCommandSink = new MyCommandSink(); hr = pCommandSink ? {{S_OK}} : {{E_OUTOFMEMORY}}; if ({{SUCCEEDED}}(hr)) { // Receive the contents of the command sink streamed to the sink. hr = pCommandList-&gt;Stream(pCommandSink); } SafeRelease(&amp;pCommandSink); return hr; }</pre> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p><p>The return value indicates any failures the command sink implementation returns through its <strong>EndDraw</strong> method.</p> + + + <dd> <p>The sink into which the command list will be streamed.</p> </dd> + + + + + <p>Instructs the command list to stop accepting commands so that you can use it as an input to an effect or in a call to <strong>{{ID2D1DeviceContext::DrawImage}}</strong>. You should call the method after it has been attached to an <strong>{{ID2D1DeviceContext}}</strong> and written to but before the command list is used.</p> + <p>This method returns {{D2DERR_WRONG_STATE}} if it has already been called on the command list. If an error occurred on the device context during population, the method returns that error. Otherwise, the method returns {{S_OK}}. </p><p>If the <strong>Close</strong> method returns an error, any future use of the command list results in the same error.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}} </td><td>Close has already been called on the command list.</td></tr> </table><p>?</p><p> </p><strong>Note</strong>??If the device context associated with the command list has an error, the command list returns the same error.? + + + + <p>Converts Direct2D primitives stored in an <strong>{{ID2D1CommandList}}</strong> into a fixed page representation. The print sub-system then consumes the primitives.</p> + + + + <p>Converts Direct2D primitives in the passed-in command list into a fixed page representation for use by the print subsystem. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + <dd> <p>The command list that contains the rendering operations.</p> </dd> + + + <dd> <p>The size of the page to add.</p> </dd> + + + <dd> <p>The print ticket stream.</p> </dd> + + + <dd> <p>Contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter.</p> </dd> + + + <dd> <p>Contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If {{NULL}} is specified, no value is retrieved for this parameter. +</p> </dd> + + + + + <p>Passes all remaining resources to the print sub-system, then clean up and close the current print job. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_PRINT_JOB_CLOSED}}</td><td>The print job is already finished.</td></tr> </table><p>?</p> + + + + <p>Represents a brush based on an <strong>{{ID2D1Image}}</strong>.</p> + + + + <p>Sets the image associated with the provided image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The image to be associated with the image brush.</p> </dd> + + + + + <p>Sets how the content inside the source rectangle in the image brush will be extended on the x-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the x-axis of the image.</p> </dd> + + + + + <p>Sets the extend mode on the y-axis.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode on the y-axis of the image.</p> </dd> + + + + + <p>Sets the interpolation mode for the image brush.</p> + <p>This method does not return a value.</p> + + + <dd> <p>How the contents of the image will be interpolated to handle the brush transform.</p> </dd> + + + + + <p>Sets the source rectangle in the image brush.</p> + <p>The top left corner of the <em>sourceRectangle</em> parameter maps to the brush space origin. That is, if the brush and world transforms are both identity, the portion of the image in the top left corner of the source rectangle will be rendered at (0,0) in the render target.</p><p>The source rectangle will be expanded differently depending on whether the input image is based on pixels (a bitmap or effect) or by a command list. </p><ul> <li>If the input image is a bitmap or an effect, the rectangle will be expanded to encapsulate a full input pixel before being additionally down-scaled to ensure that the projected rectangle will be correct in the final scene-space.</li> <li>If the input image is a command list, the command list will be slightly expanded to encapsulate a full input pixel. +</li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>The source rectangle that defines the portion of the image to tile.</p> </dd> + + + + + <p>Gets the image associated with the image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> When this method returns, contains the address of a reference to the image associated with this brush. </p> </dd> + + + + + <p>Gets the extend mode of the image brush on the x-axis.</p> + + <p>This method returns the x-extend mode.</p> + + + + <p>Gets the extend mode of the image brush on the y-axis of the image.</p> + + <p>This method returns the y-extend mode.</p> + + + + <p>Gets the interpolation mode of the image brush.</p> + <p>This method returns the interpolation mode.</p> + + + + <p>Gets the rectangle that will be used as the bounds of the image when drawn as an image brush.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of the output source rectangle.</p> </dd> + + + + + <p>Paints an area with a bitmap. </p> + + + + <p>Sets the interpolation mode for the brush.</p> + <strong>Note</strong>??If <em>interpolationMode</em> is not a valid member of {{D2D1_INTERPOLATION_MODE}}, then this method silently ignores the call.? + + + <dd> <p>The mode to use.</p> </dd> + + + + + <p>Returns the current interpolation mode of the brush.</p> + <p>The current interpolation mode.</p> + + + + <p>Describes the caps, miter limit, line join, and dash information for a stroke.</p> + <p>This interface adds functionality to <strong>{{ID2D1StrokeStyle}}</strong>.</p> + + + + <p>Gets the stroke transform type.</p> + <p>This method returns the stroke transform type.</p> + + + + <p>The <strong>{{ID2D1PathGeometry1}}</strong> interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>. In particular, it provides the path geometry-specific <strong>ComputePointAndSegmentAtLength</strong> method.</p> + <p>This interface adds functionality to <strong>{{ID2D1PathGeometry}}</strong>.</p> + + + + <p> Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One of the inputs was in an invalid range.</td></tr> </table><p>?</p> + + + <dd> <p>The distance to walk along the path.</p> </dd> + + + <dd> <p>The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.</p> </dd> + + + <dd> <p>The transform to apply to the path prior to walking.</p> </dd> + + + <dd> <p>The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.</p> </dd> + + + <dd> <p>When this method returns, contains a description of the point that can be found at the given location.</p> </dd> + + + + + <p>Represents a set of run-time bindable and discoverable properties that allow a data-driven application to modify the state of a Direct2D effect.</p> + <p>This interface supports access through either indices or property names. In addition to top-level properties, each property in an <strong>{{ID2D1Properties}}</strong> object may contain an <strong>{{ID2D1Properties}}</strong> object, which stores metadata describing the parent property. </p> + + + + <p>Gets the number of top-level properties. </p> + <p>This method returns the number of custom properties on the <strong>{{ID2D1Properties}}</strong> interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.</p> + <p>This method returns the number of custom (non-system) properties that can be accessed by the object.</p> + + + + Gets the property name that corresponds to the given index. + + + + <p>Gets the number of characters for the given property name. This is a template overload. See Remarks.</p> + <p>The value returned by this method can be used to ensure that the buffer size for <strong>GetPropertyName</strong> is appropriate. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetPropertyNameLength( U index ) {{CONST}}; + <p>This method returns the size in characters of the name corresponding to the given property index, or zero if the property index does not exist. </p> + + + <dd> <p>The index of the property name to retrieve.</p> </dd> + + + + + <p>Gets the <strong>{{D2D1_PROPERTY_TYPE}}</strong> of the selected property. </p> + <p>If the property does not exist, the method returns <strong>{{D2D1_PROPERTY_TYPE_UNKNOWN}}</strong>.</p> + <p>This method returns a <strong>{{D2D1_PROPERTY_TYPE}}</strong>-typed value for the type of the selected property.</p> + + + + <p>Gets the index corresponding to the given property name. </p> + <p> If the property does not exist, this method returns <strong>{{D2D1_INVALID_PROPERTY_INDEX}}</strong>. This reserved value will never map to a valid index and will cause <strong>{{NULL}}</strong> or sentinel values to be returned from other parts of the property interface.</p> + <p>The index of the corresponding property name.</p> + + + <dd> <p>The name of the property to retrieve.</p> </dd> + + + + + Sets the named property to the given value. + + + + <p>Sets the corresponding property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; {{HRESULT}} SetValue( U index, _In_ const T &amp;value ); + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_INVALID_PROPERTY}}</td><td>The specified property does not exist.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Failed to allocate necessary memory.</td></tr> <tr><td>{{D3DERR_OUT_OF_VIDEO_MEMORY}}</td><td>Failed to allocate required video memory.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are invalid.</td></tr> <tr><td>{{E_FAIL}}</td><td>Unspecified failure.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the property to set.</p> </dd> + + + <dd> <p>The data to set.</p> </dd> + + + + + <p>Gets the property value by name. This is a template overload. See Remarks.</p> + <p>If <em>propertyName</em> does not exist, no information is retrieved.</p><p>Any error not in the standard set returned by a property implementation will be mapped into the standard error range.</p><p> </p>template&lt;typename T&gt; T GetValueByName( _In_ {{PCWSTR}} propertyName ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The property name to get.</p> </dd> + + + + + <p>Gets the value of the property by index. This is a template overload. See Remarks.</p> + <p> </p>template&lt;typename T, typename U&gt; T GetValue( U index ) const; + <p>Returns the value requested.</p> + + + <dd> <p>The index of the property from which the value is to be obtained.</p> </dd> + + + + + <p>Gets the size of the property value in bytes, using the property index. This is a template overload. See Remarks.</p> + <p>This method returns zero if <em>index</em> does not exist. </p><p> </p>template&lt;typename U&gt; {{UINT32}} GetValueSize( U index ) {{CONST}}; + <p>This method returns size of the value in bytes, using the property index </p> + + + <dd> <p>The index of the property.</p> </dd> + + + + + <p>Gets the sub-properties of the provided property by index. This is a template overload. See Remarks. </p> + <p> If there are no sub-properties, <em>subProperties</em> will be <strong>{{NULL}}</strong>, and <strong>{{D2DERR_NO_SUBPROPERTIES}}</strong> will be returned. </p><p> </p>template&lt;typename U&gt; {{HRESULT}} GetSubProperties( U index, _Outptr_opt_ {{ID2D1Properties}} **subProperties ) {{CONST}}; + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_NO_SUBPROPERTIES}}</td><td>The specified property does not exist.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the sub-properties to be retrieved.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the sub-properties.</p> </dd> + + + + + <p> Represents a bitmap that can be used as a surface for an <strong>{{ID2D1DeviceContext}}</strong> or mapped into system memory, and can contain additional color context information.</p> + + + + + <p>Gets the color context information associated with the bitmap. </p> + <p>If the bitmap was created without specifying a color context, the returned context is <strong>{{NULL}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the color context interface associated with the bitmap.</p> </dd> + + + + + <p>Gets the options used in creating the bitmap.</p> + + <p>This method returns the options used.</p> + + + + <p>Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created. </p> + <p>The bitmap used must have been created from a {{DXGI}} surface render target, a derived render target, or a device context created from an <strong>{{ID2D1Device}}</strong>.</p><p>The returned surface can be used with Microsoft Direct3D or any other {{API}} that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through <strong>{{ID2D1Factory::CreateDxgiSurfaceRenderTarget}}</strong> or on a device context created on the same device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_BITMAP_BOUND_AS_TARGET}}</td><td>Cannot draw with a bitmap that is currently bound as the target bitmap.</td></tr> </table><p>?</p> + + + <dd> <p>The underlying {{DXGI}} surface for the bitmap.</p> </dd> + + + + + <p>Maps the given bitmap into memory.</p> + <strong>Note</strong>??You can't use bitmaps for some purposes while mapped. Particularly, the <strong>{{ID2D1Bitmap::CopyFromBitmap}}</strong> method doesn't work if either the source or destination bitmap is mapped.?<p>The bitmap must have been created with the <strong>{{D2D1_BITMAP_OPTIONS_CPU_READ}}</strong> flag specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>The options used in mapping the bitmap into memory.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the rectangle that is mapped into memory.</p> </dd> + + + + + <p>Unmaps the bitmap from memory. </p> + <p>Any memory returned from the <strong>Map</strong> call is now invalid and may be reclaimed by the operating system or used for other purposes. </p><p>The bitmap must have been previously mapped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid.</td></tr> <tr><td>{{E_POINTER}}</td><td>Pointer is not valid.</td></tr> </table><p>?</p> + + + + <p>Represents a collection of <strong>{{D2D1_GRADIENT_STOP}}</strong> objects for linear and radial gradient brushes. It provides get methods for all the new parameters added to the gradient stop collection.</p> + + + + + <p>Copies the gradient stops from the collection into memory.</p> + <p>If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong>, this method returns the same values specified in the creation method. If the <strong>{{ID2D1GradientStopCollection1}}</strong> object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, the stops returned here will first be transformed into the gamma space specified by the <em>colorInterpolationGamma</em> parameter. See the <strong>{{ID2D1DeviceContext::CreateGradientStopCollection}}</strong> method for more info about color space and gamma space.</p><p>If <em>gradientStopsCount</em> is less than the number of gradient stops in the collection, the remaining gradient stops are omitted. If <em>gradientStopsCount</em> is larger than the number of gradient stops in the collection, the extra gradient stops are set to <strong>{{NULL}}</strong>. To obtain the number of gradient stops in the collection, use the <strong>GetGradientStopCount</strong> method.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to a one-dimensional array of <strong>{{D2D1_GRADIENT_STOP}}</strong> structures.</p> </dd> + + + <dd> <p>The number of gradient stops to copy. </p> </dd> + + + + + <p>Gets the color space of the input colors as well as the space in which gradient stops are interpolated.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns the color space related to the color interpolation gamma. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the color space after interpolation has occurred.</p> + <p>If you create using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns <strong>{{D2D1_COLOR_SPACE_SRGB}}</strong>. </p> + <p>This method returns the color space.</p> + + + + <p>Gets the precision of the gradient buffer.</p> + <p>If this object was created using <strong>{{ID2D1RenderTarget::CreateGradientStopCollection}}</strong>, this method returns {{D2D1_BUFFER_PRECISION_8BPC_UNORM}}. </p> + <p>The buffer precision of the gradient buffer.</p> + + + + <p>Retrieves the color interpolation mode that the gradient stop collection uses.</p> + <p>The color interpolation mode.</p> + + + + <p>Implementation of a drawing state block that adds the functionality of primitive blend in addition to already existing antialias mode, transform, tags and text rendering mode.</p><strong>Note</strong>??You can get an <strong>{{ID2D1DrawingStateBlock1}}</strong> using the <strong>{{ID2D1Factory::CreateDrawingStateBlock}}</strong> method or you can use the QueryInterface method on an <strong>{{ID2D1DrawingStateBlock}}</strong> object.? + + + + <p>Gets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state. You must allocate storage for this parameter.</p> </dd> + + + + + <p>Sets the <strong>{{D2D1_DRAWING_STATE_DESCRIPTION1}}</strong> associated with this drawing state block.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Creates a bitmap that can be used as a target surface, for reading back to the {{CPU}}, or as a source for the <strong>DrawBitmap</strong> and <strong>{{ID2D1BitmapBrush}}</strong> {{APIs}}. In addition, color context information can be passed to the bitmap.</p> + <p>The new bitmap can be used as a target for <strong>SetTarget</strong> if it is created with <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a Direct2D bitmap by copying a {{WIC}} bitmap.</p> + <p>Starting with Windows?8.1, the <em>bitmapProperties</em> parameter is optional. When it is not specified, the created bitmap inherits the pixel format and alpha mode from <em>wicBitmapSource</em>. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.</p><p>When the <em>bitmapProperties</em> parameter is specified, the value in <em>bitmapProperties-&gt;pixelFormat</em> must either be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> or must match the {{WIC}} pixel format in <em>wicBitmapSource</em>.</p><p>When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong>, the newly created bitmap inherits the alpha mode from <em>wicBitmapSource</em>. When <em>bitmapProperties-&gt;pixelFormat.alphaMode</em> is set to <strong>{{D2D1_ALPHA_MODE_PREMULTIPLIED}}</strong>, <strong>{{D2D1_ALPHA_MODE_STRAIGHT}}</strong>, or <strong>{{D2D1_ALPHA_MODE_IGNORE}}</strong>, this forces the newly created bitmap to use the specified alpha mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{WIC}} bitmap source to copy from.</p> </dd> + + + <dd> <p>A bitmap properties structure that specifies bitmap creation options.</p> </dd> + + + <dd> <p>The address of the newly created bitmap object.</p> </dd> + + + + + <p>Creates a color context.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap.</p><p>When <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>, <em>profile</em> and <em>profileSize</em> must be specified. Otherwise, these parameters should be set to <strong>{{NULL}}</strong> and zero respectively. When the space is {{D2D1_COLOR_SPACE_CUSTOM}}, the model field of the profile header is inspected to determine if this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space remains custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>Filename</em>.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p> Creates a bitmap from a {{DXGI}} surface that can be set as a target surface or have additional color context information specified.</p> + <p>If the bitmap properties are not specified, the following information is assumed: </p><ul> <li>The bitmap {{DPI}} is 96.</li> <li>The pixel format matches that of the surface.</li> <li>The returned bitmap will inherit the bind flags of the {{DXGI}} surface.<ul> <li>However, only the subset of flags meaningful to Direct2D will be inherited. For example, {{D3D10_USAGE_DYNAMIC}} is not compatible with any public Direct2D flags.</li> </ul> </li> <li>The color context is unknown.</li> <li>The alpha mode of the bitmap will be premultiplied (common case) or straight ({{A8}}). +</li> </ul><p>If the bitmap properties are specified, the bitmap properties will be used as follows:</p><ul> <li>The bitmap {{DPI}} will be specified by the bitmap properties.</li> <li>If both dpiX and dpiY are 0, the bitmap {{DPI}} will be 96.</li> <li>The pixel format must be compatible with the shader resource view or render target view of the surface.</li> <li>The bitmap options must be compatible with the bind flags of the {{DXGI}} surface. However, they may be a subset. This will influence what resource views are created by the bitmap.</li> <li>The color context information will be used from the bitmap properties, if specified.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface from which the bitmap can be created. </p> <strong>Note</strong>??The {{DXGI}} surface must have been created from the same Direct3D device that the Direct2D device context is associated with. + ? </dd> + + + <dd> <p>The bitmap properties specified in addition to the surface. </p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new bitmap object.</p> </dd> + + + + + <p>Creates an effect for the specified class {{ID}}. </p> + <p> If the created effect is a custom effect that is implemented in a {{DLL}}, this doesn't increment the reference count for that {{DLL}}. If the application deletes an effect while that effect is loaded, the resulting behavior is unpredictable. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}} </td><td>The effect requires capabilities not supported by the {{D2D}} device.</td></tr> </table><p>?</p> + + + <dd> <p>The class {{ID}} of the effect to create. See Built-in Effects for a list of effect {{IDs}}.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new effect.</p> </dd> + + + + + <p>Creates a gradient stop collection, enabling the gradient to contain color channels with values outside of [0,1] and also enabling rendering to a high-color render target with interpolation in sRGB space.</p> + <p>This method linearly interpolates between the color stops. An optional color space conversion is applied post-interpolation. Whether and how this gamma conversion is applied is determined by the pre- and post-interpolation. This method will fail if the device context does not support the requested buffer precision.</p><p>In order to get the desired result, you need to ensure that the inputs are specified in the correct color space. +</p><p>You must always specify colors in straight alpha, regardless of interpolation mode being premultiplied or straight. The interpolation mode only affects the interpolated values. Likewise, the stops returned by <strong>{{ID2D1GradientStopCollection::GetGradientStops}}</strong> will always have straight alpha. </p><p>If you specify <strong>{{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}}</strong>, then all stops are premultiplied before interpolation, and then un-premultiplied before color conversion. +</p><p>Starting with Windows?8, the interpolation behavior of this method has changed. </p><p>The table here shows the behavior in Windows?7 and earlier.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>1.0</td><td>Clamps the inputs and then converts from sRGB to scRGB.</td><td>Converts from scRGB to sRGB post-interpolation.</td><td>1.0</td></tr> <tr><td>2.2</td><td>Clamps the inputs.</td><td>No Operation</td><td>2.2</td></tr> </table><p>?</p><p>The table here shows the behavior in Windows?8 and later.</p><table> <tr><th>Gamma</th><th>Before Interpolation Behavior</th><th>After Interpolation Behavior</th><th>GetColorInteroplationGamma +(output color space) +</th></tr> <tr><td>sRGB to scRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>1.0</td></tr> <tr><td>scRGB to sRGB</td><td>No Operation</td><td>Clamps the outputs and then converts from sRGB to scRGB.</td><td>2.2</td></tr> <tr><td>sRGB to sRGB</td><td>No Operation</td><td>No Operation</td><td>2.2</td></tr> <tr><td>scRGB to scRGB</td><td>No Operation</td><td>No Operation</td><td>1.0</td></tr> </table><p>?</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>An array of color values and offsets.</p> </dd> + + + <dd> <p>The number of elements in the <em>gradientStops</em> array.</p> </dd> + + + <dd> <p>Specifies both the input color space and the space in which the color interpolation occurs.</p> </dd> + + + <dd> <p>The color space that colors will be converted to after interpolation occurs.</p> </dd> + + + <dd> <p>The precision of the texture used to hold interpolated values.</p> <strong>Note</strong>??This method will fail if the underlying Direct3D device does not support the requested buffer precision. Use <strong>{{ID2D1DeviceContext::IsBufferPrecisionSupported}}</strong> to determine what is supported. + ? </dd> + + + <dd> <p>Defines how colors outside of the range defined by the stop collection are determined.</p> </dd> + + + <dd> <p>Defines how colors are interpolated. {{D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED}} is the default, see Remarks for more info.</p> </dd> + + + <dd> <p>The new gradient stop collection.</p> </dd> + + + + + <p>Creates an image brush. The input image can be any type of image, including a bitmap, effect, or a command list. +</p> + <p>The image brush can be used to fill an arbitrary geometry, an opacity mask or text.</p><p>This sample illustrates drawing a rectangle with an image brush.</p><pre>{{HRESULT}} +CreatePatternBrush( __in {{ID2D1DeviceContext}} *pDeviceContext, __deref_out {{ID2D1ImageBrush}} **ppImageBrush ) +{ {{HRESULT}} hr = {{S_OK}}; {{ID2D1Image}} *pOldTarget = {{NULL}}; pDeviceContext-&gt;GetTarget(&amp;pOldTarget); {{ID2D1CommandList}} *pCommandList = {{NULL}}; hr = pDeviceContext-&gt;CreateCommandList(&amp;pCommandList); if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;SetTarget(pCommandList); hr = RenderPatternToCommandList(pDeviceContext); } pDeviceContext-&gt;SetTarget(pOldTarget); {{ID2D1ImageBrush}} *pImageBrush = {{NULL}}; if ({{SUCCEEDED}}(hr)) { hr = pDeviceContext-&gt;CreateImageBrush( pCommandList, {{D2D1::ImageBrushProperties}}( {{D2D1::RectF}}(198, 298, 370, 470), {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_EXTEND_MODE_WRAP}}, {{D2D1_INTERPOLATION_MODE_LINEAR}} ), &amp;pImageBrush ); } // Fill a rectangle with the image brush. if ({{SUCCEEDED}}(hr)) { pDeviceContext-&gt;FillRectangle( {{D2D1::RectF}}(0, 0, 100, 100), pImageBrush); } SafeRelease(&amp;pImageBrush); SafeRelease(&amp;pCommandList); SafeRelease(&amp;pOldTarget); return hr; +}</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The image to be used as a source for the image brush.</p> </dd> + + + <dd> <p>The properties specific to an image brush.</p> </dd> + + + <dd> <p>Properties common to all brushes.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the input rectangles.</p> </dd> + + + + + <p>Creates a bitmap brush, the input image is a Direct2D bitmap object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The bitmap to use as the brush.</p> </dd> + + + <dd> <p>A bitmap brush properties structure.</p> </dd> + + + <dd> <p>A brush properties structure.</p> </dd> + + + <dd> <p>The address of the newly created bitmap brush object.</p> </dd> + + + + + <p>Creates a <strong>{{ID2D1CommandList}}</strong> object.</p> + <p>A <strong>{{ID2D1CommandList}}</strong> can store Direct2D commands to be displayed later through <strong>{{ID2D1DeviceContext::DrawImage}}</strong> or through an image brush.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Indicates whether the format is supported by the device context. The formats supported are usually determined by the underlying hardware.</p> + <p>You can use supported formats in the <strong>{{D2D1_PIXEL_FORMAT}}</strong> structure to create bitmaps and render targets. Direct2D doesn't support all {{DXGI}} formats, even though they may have some level of Direct3D support by the hardware. +</p> + <p>Returns {{TRUE}} if the format is supported. Returns {{FALSE}} if the format is not supported.</p> + + + <dd> <p>The {{DXGI}} format to check.</p> </dd> + + + + + <p>Indicates whether the buffer precision is supported by the underlying Direct3D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Gets the bounds of an image without the world transform of the context applied.</p> + <p>The image bounds don't include multiplication by the world transform. They do reflect the current {{DPI}}, unit mode, and interpolation mode of the context. To get the bounds that include the world transform, use <strong>{{ID2D1DeviceContext::GetImageWorldBounds}}</strong>.</p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with a target offset of (0,0) and an identity world transform matrix. They do not reflect the current clip rectangle set on the device context or the extent of the context's current target image.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}) and in local space.</p> </dd> + + + + + <p>Gets the bounds of an image with the world transform of the context applied.</p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. To get bounds which don't include the world transform, use <strong>{{ID2D1DeviceContext::GetImageLocalBounds}}</strong>. </p><p>The returned bounds reflect which pixels would be impacted by calling <strong>DrawImage</strong> with the same image and a target offset of (0,0). They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target image. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The image whose bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the image in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p> Gets the world-space bounds in {{DIPs}} of the glyph run using the device context {{DPI}}. </p> + <p>The image bounds reflect the current {{DPI}}, unit mode, and world transform of the context. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyph run to render.</p> </dd> + + + <dd> <p>The DirectWrite measuring mode that indicates how glyph metrics are used to measure text when it is formatted.</p> </dd> + + + <dd> <p>The bounds of the glyph run in {{DIPs}} and in world space.</p> </dd> + + + + + <p>Gets the device associated with a device context.</p> + <p>The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an <strong>{{ID2D1DeviceContext}}</strong> interface and then call <strong>GetDevice</strong>. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an <strong>{{ID2D1Device}}</strong> object.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to a Direct2D device associated with this device context.</p> </dd> + + + + + <p>The bitmap or command list to which the Direct2D device context will now render.</p> + <p>The target can be changed at any time, including while the context is drawing.</p><p>The target can be either a bitmap created with the <strong>{{D2D1_BITMAP_OPTIONS_TARGET}}</strong> flag, or it can be a command list. Other kinds of images cannot be set as a target. For example, you cannot set the output of an effect as target. If the target is not valid the context will enter the <strong>{{D2DERR_INVALID_TARGET}} </strong>error state.</p><p>You cannot use <strong>SetTarget</strong> to render to a bitmap/command list from multiple device contexts simultaneously. An image is considered ?being rendered to? if it has ever been set on a device context within a <strong>BeginDraw</strong>/<strong>EndDraw</strong> timespan. If an attempt is made to render to an image through multiple device contexts, all subsequent device contexts after the first will enter an error state. </p><p>Callers wishing to attach an image to a second device context should first call <strong>EndDraw</strong> on the first device context. +</p><p>Here is an example of the correct calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC1-&gt;SetTarget(pImage); +// ? +pDC1-&gt;EndDraw(); pDC2-&gt;BeginDraw(); +pDC2-&gt;SetTarget(pImage); +// ? +pDC2-&gt;EndDraw(); +</pre><p>Here is an example of the incorrect calling order.</p><pre>pDC1-&gt;BeginDraw(); +pDC2-&gt;BeginDraw(); pDC1-&gt;SetTarget(pImage); // ... pDC1-&gt;SetTarget({{NULL}}); pDC2-&gt;SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1. // ... pDC1-&gt;EndDraw(); // This EndDraw {{SUCCEEDs}}. +pDC2-&gt;EndDraw(); // This EndDraw {{FAILs}} </pre><strong>Note</strong>??Changing the target does not change the bitmap that an {{HWND}} render target presents from, nor does it change the bitmap that a {{DC}} render target blts to/from.?<p>This {{API}} makes it easy for an application to use a bitmap as a source (like in <strong>DrawBitmap</strong>) and as a destination at the same time. Attempting to use a bitmap as a source on the same device context to which it is bound as a target will put the device context into the {{D2DERR_BITMAP_BOUND_AS_TARGET}} error state.</p><p>It is acceptable to have a bitmap bound as a target bitmap on multiple render targets at once. Applications that do this must properly synchronize rendering with <strong>Flush</strong> or <strong>EndDraw</strong>.</p><p>You can change the target at any time, including while the context is drawing.</p><p>You can set the target to {{NULL}}, in which case drawing calls will put the device context into an error state with {{D2DERR_WRONG_STATE}}. Calling <strong>SetTarget</strong> with a {{NULL}} target does not restore the original target bitmap to the device context.</p><p>If the device context has an outstanding {{HDC}}, the context will enter the <strong>{{D2DERR_WRONG_STATE}}</strong> error state. The target will not be changed.</p><p>If the bitmap and the device context are not in the same resource domain, the context will enter <strong>\</strong> error state. The target will not be changed.</p><p> <strong>{{ID2D1RenderTarget::GetPixelSize}}</strong> returns the size of the current target bitmap (or 0, 0) if there is no bitmap bound). +<strong>{{ID2D1RenderTarget::GetSize}}</strong> returns the pixel size of the current bitmap scaled by the {{DPI}} of the render target. +<strong>SetTarget</strong> does not affect the {{DPI}} of the render target. +</p><p> <strong>{{ID2D1RenderTarget::GetPixelFormat}}</strong> returns the pixel format of the current target bitmap (or <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>{{D2D1_ALPHA_MODE_UNKNOWN}}</strong> if there is none).</p><p> <strong>{{ID2D1Bitmap::CopyFromRenderTarget}}</strong> copies from the currently bound target bitmap.</p> + <p>This method does not return a value.</p> + + + + <p>Gets the target currently associated with the device context.</p> + <p>If a target is not associated with the device context, <em>target</em> will contain <strong>{{NULL}}</strong> when the methods returns.</p><p>If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:</p><ul> <li> <strong>CreateHwndRenderTarget</strong> </li> <li> <strong>CreateDxgiSurfaceRenderTarget</strong> </li> <li> <strong>CreateWicBitmapRenderTarget</strong> </li> <li> <strong>CreateDCRenderTarget</strong> </li> <li> <strong>CreateCompatibleRenderTarget</strong> </li> </ul><p>It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for <strong>{{ID2D1RenderTarget}}</strong> methods.</p><p> <strong>CreateDxgiSurfaceRenderTarget</strong> will create a bitmap that is usable as a bitmap source if the {{DXGI}} surface is bindable as a shader resource view.</p><p> <strong>CreateCompatibleRenderTarget</strong> will always create bitmaps that are usable as a bitmap source.</p><p> <strong>{{ID2D1RenderTarget::BeginDraw}}</strong> will copy from the {{HDC}} to the original bitmap associated with it. <strong>{{ID2D1RenderTarget::EndDraw}}</strong> will copy from the original bitmap to the {{HDC}}. </p><p> <strong>{{IWICBitmap}}</strong> objects will be locked in the following circumstances:</p><ul> <li>BeginDraw has been called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>{{IWICBitmap}} objects will be unlocked in the following circumstances:</p><ul> <li>EndDraw is called and the currently selected target bitmap is a {{WIC}} bitmap.</li> <li>A {{WIC}} bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.</li> <li>Any of the {{ID2D1Bitmap::Copy}}* methods are called with a {{WIC}} bitmap as either the source or destination.</li> </ul><p>Direct2D will only lock bitmaps that are not currently locked.</p><p>Calling <strong>QueryInterface</strong> for <strong>{{ID2D1GdiInteropRenderTarget}}</strong> will always succeed. <strong>{{ID2D1GdiInteropRenderTarget::GetDC}}</strong> will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the {{GDI_COMPATIBLE}} flag set.</p><p> <strong>{{ID2D1HwndRenderTarget::Resize}}</strong> will return <strong>{{DXGI_ERROR_INVALID_CALL}}</strong> if there are any outstanding references to the original target bitmap associated with the render target.</p><p>Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the address of a reference to the target currently associated with the device context.</p> </dd> + + + + + <p>Sets the rendering controls for the given device context. </p> + <p> The rendering controls allow the application to tune the precision, performance, and resource usage of rendering operations.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The rendering controls to be applied.</p> </dd> + + + + + <p>Gets the rendering controls that have been applied to the context.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the rendering controls for this context.</p> </dd> + + + + + <p>Changes the primitive blend mode that is used for all rendering operations in the device context.</p> + <p>The primitive blend will apply to all of the primitive drawn on the context, unless this is overridden with the <em>compositeMode</em> parameter on the <strong>DrawImage</strong> {{API}}.</p><p> The primitive blend applies to the interior of any primitives drawn on the context. In the case of <strong>DrawImage</strong>, this will be implied by the image rectangle, offset and world transform.</p><p>If the primitive blend is anything other than <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong> then ClearType rendering will be turned off. If the application explicitly forces ClearType rendering in these modes, the drawing context will be placed in an error state. {{D2DERR_WRONG_STATE}} will be returned from either <strong>EndDraw</strong> or <strong>Flush</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>The primitive blend to use.</p> </dd> + + + + + <p>Returns the currently set primitive blend used by the device context. </p> + + <p>The current primitive blend. The default value is <strong>{{D2D1_PRIMITIVE_BLEND_SOURCE_OVER}}</strong>.</p> + + + + <p>Specifies parameters used during view instancing configuration.</p> + <p>View instancing is declared in a {{PSO}} using this structure. The view instance count is set in the {{PSO}} to allow whole-pipeline optimization based on the number of views.</p><p>View instancing is disabled when it's not declared in the {{PSO}} or when ViewInstanceCount is set to 0. When disabled, rendering behaves as if view instancing is enabled and ViewInstanceCount is set to 1; shaders only see a value of 0 in {{SV_ViewID}} and just one view instance is produced. This allows shaders that are aware of view instancing to still be used in {{PSOs}} that disable it. Some adapters might support shader model 6.1 (which exposes {{SV_ViewID}}) but not view instancing; these adapters must still support shaders that input {{SV_ViewID}} in {{PSOs}} that declare ViewInstanceCount as 0 or 1.</p><p>The shader prior to rasterization can output {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values which don't have to depend on {{SV_ViewID}}. To compute the final effective index of the viewport and render target where primitives will be sent, these values, when present, are added to the ViewportArrayIndex and RenderTargetArrayIndex values of the view instance locations declared in the {{PSO}}. If a computed index is out of range (that is, when the index is larger than the number of viewport or render target elements in their respective arrays) then the effective index becomes 0.</p><p>For shaders that dynamically select the viewport or render target indices, an application can set all the view instance locations declared in the {{PSO}} to a single value (such as 0) to act as a uniform base index to which the dynamically-selected {{SV_RenderTargetArrayIndex}} and {{SV_ViewportArrayIndex}} values are added.</p> + + + <dd> <p> Specifies the number of views to be used, up to {{D3D12_MAX_VIEW_INSTANCE_COUNT}}. </p> </dd> + + + <dd> <p> The address of a memory location that contains <strong>ViewInstanceCount</strong> view instance location structures that specify the location of viewport/scissor and render target details of each view instance. </p> </dd> + + + <dd> <p> Configures view instancing with additional options. </p> </dd> + + + + + <p>Sets what units will be used to interpret values passed into the device context.</p><p></p> + <p> This method will affect all properties and parameters affected by <strong>SetDpi</strong> and <strong>GetDpi</strong>. This affects all coordinates, lengths, and other properties that are not explicitly defined as being in another unit. For example:</p><ul> <li><strong>SetUnitMode</strong> will affect a coordinate passed into <strong>{{ID2D1DeviceContext::DrawLine}}</strong>, and the scaling of a geometry passed into <strong>{{ID2D1DeviceContext::FillGeometry}}</strong>. </li> <li><strong>SetUnitMode</strong> will not affect the value returned by <strong>{{ID2D1Bitmap::GetPixelSize}}</strong>. </li> </ul> + <p>This method does not return a value.</p> + + + <dd> <p>An enumeration defining how passed-in units will be interpreted by the device context.</p> </dd> + + + + + <p>Gets the mode that is being used to interpret values by the device context.</p> + + <p>The unit mode.</p> + + + + <p>Draws a series of glyphs to the device context.</p> + <p>The <em>glyphRunDescription</em> is ignored when rendering, but can be useful for printing and serialization of rendering commands, such as to an {{XPS}} or {{SVG}} file. This extends <strong>{{ID2D1RenderTarget::DrawGlyphRun}}</strong>, which lacked the glyph run description.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Origin of first glyph in the series.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Supplementary glyph series information.</p> </dd> + + + <dd> <p>The brush that defines the text color.</p> </dd> + + + <dd> <p>The measuring mode of the glyph series, used to determine the advances and offsets. The default value is {{DWRITE_MEASURING_MODE_NATURAL}}.</p> </dd> + + + + + <p></p><p>A command list cannot reference effects which are part of effect graphs that consume the command list.</p> + + + + <p>Draw a metafile to the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The offset from the upper left corner of the render target.</p> </dd> + + + + + <p>Draws a bitmap to the render target.</p> + <p>The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels ({{DIPs}})). This is affected by the currently set transform and the perspective transform, if set. If {{NULL}} is specified, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle)). </p><p>The <em>sourceRectangle</em> parameter defines the sub-rectangle of the source bitmap (in {{DIPs}}). <strong>DrawBitmap</strong> will clip this rectangle to the size of the source bitmap, thus making it impossible to sample outside of the bitmap. If {{NULL}} is specified, then the source rectangle is taken to be the size of the source bitmap. </p><p>If you specify <em>perspectiveTransform</em> it is applied to the rect in addition to the transform set on the render target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap to draw.</p> </dd> + + + <dd> <p>The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.</p> </dd> + + + <dd> <p>The opacity of the bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + <dd> <p>An optional source rectangle.</p> </dd> + + + <dd> <p>An optional perspective transform.</p> </dd> + + + + + <p>Push a layer onto the clip and layer stack of the device context.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The parameters that defines the layer.</p> </dd> + + + <dd> <p>The layer resource to push on the device context that receives subsequent drawing operations. </p> <strong>Note</strong>??If a layer is not specified, Direct2D manages the layer resource automatically. ? </dd> + + + + + <p>This indicates that a portion of an effect's input is invalid. This method can be called many times.</p><p>You can use this method to propagate invalid rectangles through an effect graph. You can query Direct2D using the <strong>GetEffectInvalidRectangles</strong> method.</p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can also use this method to invalidate caches that have accumulated while rendering effects that have the <strong>{{D2D1_PROPERTY_CACHED}}</strong> property set to true.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Gets the number of invalid output rectangles that have accumulated on the effect. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to count the invalid rectangles on.</p> </dd> + + + <dd> <p>The returned rectangle count.</p> </dd> + + + + + <p>Gets the invalid rectangles that have accumulated since the last time the effect was drawn and <strong>EndDraw</strong> was then called on the device context.</p> + <p> </p><strong>Note</strong>??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?<p>You can use the <strong>InvalidateEffectInputRectangle</strong> method to specify invalidated rectangles for Direct2D to propagate through an effect graph.</p><p>If multiple invalid rectangles are requested, the rectangles that this method returns may overlap. When this is the case, the rectangle count might be lower than the count that <strong>GetEffectInvalidRectangleCount</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p> Returns the input rectangles that are required to be supplied by the caller to produce the given output rectangle. </p> + <p>The caller should be very careful not to place a reliance on the required input rectangles returned. Small changes for correctness to an effect's behavior can result in different rectangles being returned. In addition, different kinds of optimization applied inside the render can also influence the result. </p> + <p> A failure code, this will typically only be because an effect in the chain returned some error. </p> + + + <dd> <p>The image whose output is being rendered.</p> </dd> + + + <dd> <p>The portion of the output image whose inputs are being inspected.</p> </dd> + + + <dd> <p> A list of the inputs whos rectangles are being queried. </p> </dd> + + + <dd> <p>The input rectangles returned to the caller.</p> </dd> + + + <dd> <p>The number of inputs.</p> </dd> + + + + + <p>Fill using the alpha channel of the supplied opacity mask bitmap. The brush opacity will be modulated by the mask. The render target antialiasing mode must be set to aliased.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap that acts as the opacity mask</p> </dd> + + + <dd> <p>The brush to use for filling the primitive.</p> </dd> + + + <dd> <p>The destination rectangle to output to in the render target</p> </dd> + + + <dd> <p>The source rectangle from the opacity mask bitmap.</p> </dd> + + + + + <p> Creates Direct2D resources. </p> + <p> The <strong>{{ID2D1Factory1}}</strong> interface is used to create devices, register and unregister effects, and enumerate effects properties. Effects are registered and unregistered globally. The registration {{APIs}} are placed on this interface for convenience. </p> + + + + <p>Creates a <strong>{{ID2D1Device}}</strong> object.</p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>Creates a <strong>{{ID2D1StrokeStyle1}}</strong> object.</p> + <p>It is valid to specify a dash array only if {{D2D1_DASH_STYLE_CUSTOM}} is also specified.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Creates an <strong>{{ID2D1PathGeometry1}}</strong> object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + + <p> Creates a new drawing state block, this can be used in subsequent SaveDrawingState and RestoreDrawingState operations on the render target. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The drawing state description structure.</p> </dd> + + + <dd> <p>The address of the newly created drawing state block.</p> </dd> + + + + + <p>Creates a new <strong>{{ID2D1GdiMetafile}}</strong> object that you can use to replay metafile content. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a stream.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p> <strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory, derived device, and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Registers an effect within the factory instance with the property {{XML}} specified as a string.</p> + <p>Direct2D effects must define their properties at registration time via registration {{XML}}. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the <em>propertyXml</em> parameter. </p><p><strong>RegisterEffect</strong> is both atomic and reference counted. To unregister an effect, call <strong>UnregisterEffect</strong> with the <em>classId</em> of the effect. </p><strong>Important</strong>??<strong>RegisterEffect</strong> does not hold a reference to the {{DLL}} or executable file in which the effect is contained. The application must independently make sure that the lifetime of the {{DLL}} or executable file completely contains all instances of each registered and created effect.?<p>Aside from the built-in effects that are globally registered, this {{API}} registers effects only for this factory and derived device and device context interfaces.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the effect to be registered.</p> </dd> + + + <dd> <p>A list of the effect properties, types, and metadata.</p> </dd> + + + <dd> <p>An array of properties and methods.</p> <p> This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding <em>propertyXml</em>. </p> </dd> + + + <dd> <p>The number of bindings in the binding array.</p> </dd> + + + <dd> <p>The static factory that is used to create the corresponding effect.</p> </dd> + + + + + <p>Unregisters an effect within the factory instance that corresponds to the <em>classId</em> provided. </p> + <p>In order for the effect to be fully unloaded, you must call <strong>UnregisterEffect</strong> the same number of times that you have registered the effect.</p><p>The <strong>UnregisterEffect</strong> method unregisters only those effects that are registered on the same factory. It cannot be used to unregister a built-in effect.</p> + <p>{{D2DERR_EFFECT_IS_NOT_REGISTERED}} if the effect is not registered, {{S_OK}} otherwise.</p> + + + <dd> <p>The identifier of the effect to be unregistered.</p> </dd> + + + + + <p>Returns the class {{IDs}} of the currently registered effects and global effects on this factory.</p> + <p>The set of class {{IDs}} will be atomically returned by the {{API}}. The set will not be interrupted by other threads registering or unregistering effects.</p><p>If <em>effectsRegistered</em> is larger than <em>effectCount</em>, the supplied array will still be filled to capacity with the current set of registered effects. This method returns the {{CLSIDs}} for all global effects and all effects registered to this factory.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{HRESULT_FROM_WIN32}}({{ERROR_INSUFFICIENT_BUFFER}})</td><td><em>effectsRegistered</em> is larger than <em>effectCount</em>.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains an array of effects. <strong>{{NULL}}</strong> if no effects are retrieved.</p> </dd> + + + <dd> <p>The capacity of the <em>effects</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects copied into <em>effects</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the number of effects currently registered in the system.</p> </dd> + + + + + <p>Retrieves the properties of an effect.</p> + <p>The returned effect properties will have all the mutable properties for the effect set to a default of <strong>{{NULL}}</strong>, or an empty value. </p><ul> <li>Value types will be zero-filled.</li> <li>Blob and string types will be zero-length.</li> <li>Array types will have length 1 and the element of the array will conform to the previous rules.</li> </ul><p>This method cannot be used to return the properties for any effect not visible to <strong>{{ID2D1DeviceContext::CreateEffect}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The requested effect could not be found.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The {{ID}} of the effect to retrieve properties from.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the property interface that can be used to query the metadata of the effect.</p> </dd> + + + + + <p> A locking mechanism from a Direct2D factory that Direct2D uses to control exclusive resource access in an app that is uses multiple threads. </p> + <p> You can get an <strong>{{ID2D1Multithread}}</strong> object by querying for it from an <strong>{{ID2D1Factory}}</strong> object. </p><p> You should use this lock while doing any operation on a Direct3D/{{DXGI}} surface. Direct2D will wait on any call until you leave the critical section. </p><strong>Note</strong>?? Normal rendering is guarded automatically by an internal Direct2D lock.? + + + + <p> Returns whether the Direct2D factory was created with the <strong>{{D2D1_FACTORY_TYPE_MULTI_THREADED}}</strong> flag. </p> + <p>Returns true if the Direct2D factory was created as multi-threaded, or false if it was created as single-threaded.</p> + + + + <p>Enters the Direct2D {{API}} critical section, if it exists. </p> + <p>This method does not return a value.</p> + + + + <p>Leaves the Direct2D {{API}} critical section, if it exists.</p> + <p>This method does not return a value.</p> + + + + <p>Creates a new Direct2D device associated with the provided {{DXGI}} device. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>If the creation properties are not specified, then <em>d2dDevice</em> will inherit its threading mode from <em>dxgiDevice</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} device the Direct2D device is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device.</p> </dd> + + + + + <p>Creates a new Direct2D device context associated with a {{DXGI}} surface. </p> + <p>This function will also create a new <strong>{{ID2D1Factory1}}</strong> that can be retrieved through <strong>{{ID2D1Resource::GetFactory}}</strong>.</p><p>This function will also create a new <strong>{{ID2D1Device}}</strong> that can be retrieved through <strong>{{ID2D1DeviceContext::GetDevice}}</strong>.</p><p>The {{DXGI}} device will be specified implicitly through <em>dxgiSurface</em>.</p><p>If <em>creationProperties</em> are not specified, the Direct2D device will inherit its threading mode from the {{DXGI}} device implied by <em>dxgiSurface</em> and debug tracing will not be enabled.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The {{DXGI}} surface the Direct2D device context is associated with.</p> </dd> + + + <dd> <p>The properties to apply to the Direct2D device context.</p> </dd> + + + <dd> <p>When this function returns, contains the address of a reference to a Direct2D device context.</p> </dd> + + + + + <p>Converts the given color from one colorspace to another.</p> + <p>The converted color.</p> + + + <dd> <p>The source color space.</p> </dd> + + + <dd> <p>The destination color space.</p> </dd> + + + <dd> <p>The source color.</p> </dd> + + + + + <p>Returns the sine and cosine of an angle.</p> + <p>This function does not return a value.</p> + + + <dd> <p>The angle to calculate.</p> </dd> + + + <dd> <p>The sine of the angle.</p> </dd> + + + <dd> <p>The cosine of the angle.</p> </dd> + + + + + <p>Returns the tangent of an angle.</p> + <p>The tangent of the angle.</p> + + + <dd> <p>The angle to calculate the tangent for.</p> </dd> + + + + + <p>Returns the length of a 3 dimensional vector.</p> + <p>The length of the vector.</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + + <dd> <p>There were no changes.</p> </dd> + + + <dd> <p>The properties of the effect changed.</p> </dd> + + + <dd> <p>The context state changed.</p> </dd> + + + <dd> <p>The effect?s transform graph has changed. This happens only when an effect supports a variable input count.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes flags that influence how the renderer interacts with a custom vertex shader.</p> + + + <dd> <p>The logical equivalent of having no flags set.</p> </dd> + + + <dd> <p>If this flag is set, the renderer assumes that the vertex shader will cover the entire region of interest with vertices and need not clear the destination render target. If this flag is not set, the renderer assumes that the vertices do not cover the entire region interest and must clear the render target to transparent black first.</p> </dd> + + + <dd> <p>The renderer will use a depth buffer when rendering custom vertices. The depth buffer will be used for calculating occlusion information. This can result in the renderer output being draw-order dependent if it contains transparency.</p> </dd> + + + <dd> <p>Indicates that custom vertices do not overlap each other.</p> </dd> + + + + + <p>Indicates whether the vertex buffer changes infrequently or frequently.</p> + <p>If a dynamic vertex buffer is created, Direct2D will not necessarily map the buffer directly to a Direct3D vertex buffer. Instead, a system memory copy can be copied to the rendering engine vertex buffer as the effects are rendered.</p> + + + <dd> <p>The created vertex buffer is updated infrequently.</p> </dd> + + + <dd> <p>The created vertex buffer is changed frequently.</p> </dd> + + + + + <p>Specifies the blend operation on two color sources.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND_OP}}</strong>.</p> + + + <dd> <p>Add source 1 and source 2.</p> </dd> + + + <dd> <p>Subtract source 1 from source 2.</p> </dd> + + + <dd> <p>Subtract source 2 from source 1.</p> </dd> + + + <dd> <p>Find the minimum of source 1 and source 2.</p> </dd> + + + <dd> <p>Find the maximum of source 1 and source 2.</p> </dd> + + + + + <p>Specifies how one of the color sources is to be derived and optionally specifies a preblend operation on the color source.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D10_BLEND}}</strong>.</p> + + + <dd> <p>The data source is black (0, 0, 0, 0). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is white (1, 1, 1, 1). There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from the second input of the blend transform. There is not a preblend operation.</p> </dd> + + + <dd> <p>The data source is color data ({{RGB}}) from second input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from second input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the second input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is alpha data (A) from the first input of the blend transform. The preblend operation inverts the data, generating 1 - A.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is color data from the first input of the blend transform. The preblend operation inverts the data, generating 1 - {{RGB}}.</p> </dd> + + + <dd> <p>The data source is alpha data from the second input of the blend transform. The preblend operation clamps the data to 1 or less.</p> </dd> + + + <dd> <p>The data source is the blend factor. There is no preblend operation.</p> </dd> + + + <dd> <p>The data source is the blend factor. The preblend operation inverts the blend factor, generating 1 - blend_factor.</p> </dd> + + + + + <p>Allows a caller to control the channel depth of a stage in the rendering pipeline.</p> + + + <dd> <p>The channel depth is the default. It is inherited from the inputs.</p> </dd> + + + <dd> <p>The channel depth is 1.</p> </dd> + + + <dd> <p>The channel depth is 4.</p> </dd> + + + + + <p>Represents filtering modes that a transform may select to use on input textures.</p> + <p>This enumeration has the same numeric values as <strong>{{D3D11_FILTER}}</strong>.</p> + + + <dd> <p>Use point sampling for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.</p> </dd> + + + <dd> <p>Use linear interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + <dd> <p>Use anisotropic interpolation for minification, magnification, and mip-level sampling.</p> </dd> + + + + + <p>Defines capabilities of the underlying Direct3D device which may be queried using <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + + <p>Defines a property binding to a pair of functions which get and set the corresponding property. </p> + <p>The <strong>propertyName</strong> is used to cross-correlate the property binding with the registration {{XML}}. The <strong>propertyName</strong> must be present in the {{XML}} call or the registration will fail. All properties must be bound.</p> + + + <dd> <p> The name of the property.</p> </dd> + + + <dd> <p> The function that will receive the data to set.</p> </dd> + + + <dd> <p>The function that will be asked to write the output data.</p> </dd> + + + + + <p>Defines a resource texture when the original resource texture is created.</p> + + + + <dd> <p>The extents of the resource table in each dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must be a number from 1 to 3.</p> </dd> + + + <dd> <p>The precision of the resource texture to create. </p> </dd> + + + <dd> <p>The number of channels in the resource texture.</p> </dd> + + + <dd> <p>The filtering mode to use on the texture.</p> </dd> + + + <dd> <p>Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>Defines the properties of a vertex buffer that are standard for all vertex shader definitions.</p> + <p>If <strong>usage</strong> is dynamic, the system might return a system memory buffer and copy these vertices into the rendering vertex buffer for each element.</p><p>If the initialization data is not specified, the buffer will be uninitialized.</p> + + + <dd> <p>The number of inputs to the vertex shader.</p> </dd> + + + <dd> <p>Indicates how frequently the vertex buffer is likely to be updated.</p> </dd> + + + <dd> <p>The initial contents of the vertex buffer.</p> </dd> + + + <dd> <p>The size of the vertex buffer, in bytes.</p> </dd> + + + + + <p>Defines a vertex shader and the input element description to define the input layout. The combination is used to allow a custom vertex effect to create a custom vertex shader and pass it a custom layout.</p> + <p>The vertex shader will be loaded by the <strong>CreateVertexBuffer</strong> call that accepts the vertex buffer properties.</p><p>This structure does not need to be specified if one of the standard vertex shaders is used.</p> + + + <dd> <p>The unique {{ID}} of the vertex shader.</p> </dd> + + + <dd> <p>An array of input assembler stage data types.</p> </dd> + + + <dd> <p>The number of input elements in the vertex shader.</p> </dd> + + + <dd> <p>The vertex stride.</p> </dd> + + + + + <p>Defines a range of vertices that are used when rendering less than the full contents of a vertex buffer.</p> + + + + <dd> <p>The first vertex in the range to process.</p> </dd> + + + <dd> <p>The number of vertices to use.</p> </dd> + + + + + <p>Defines a blend description to be used in a particular blend transform.</p> + <p>This description closely matches the <strong>{{D3D11_BLEND_DESC}}</strong> struct with some omissions and the addition of the blend factor in the description.</p> + + + <dd> <p>Specifies the first {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies the second {{RGB}} data source and includes an optional preblend operation.</p> </dd> + + + <dd> <p>Specifies how to combine the {{RGB}} data sources.</p> </dd> + + + <dd> <p>Specifies the first alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies the second alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.</p> </dd> + + + <dd> <p>Specifies how to combine the alpha data sources.</p> </dd> + + + <dd> <p>Parameters to the blend operations. The blend must use <strong>{{D2D1_BLEND_BLEND_FACTOR}}</strong> for this to be used.</p> </dd> + + + + + <p>Describes the options that transforms may set on input textures.</p> + + + + <dd> <p>The type of filter to apply to the input texture.</p> </dd> + + + <dd> <p>The mip level to retrieve from the upstream transform, if specified.</p> </dd> + + + + + <p>Describes the support for doubles in shaders.</p> + <p>Fill this structure by passing a {{D2D1_FEATURE_DOUBLES}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>{{TRUE}} is doubles are supported within the shaders.</p> </dd> + + + + + <p>Describes compute shader support, which is an option on {{D3D10}} feature level.</p> + <p>You can fill this structure by passing a {{D2D1_}} {{FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS}} structure to <strong>{{ID2D1EffectContext::CheckFeatureSupport}}</strong>.</p> + + + <dd> <p>Shader model 4 compute shaders are supported.</p> </dd> + + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + <p>This interface is passed to an effect implementation through the <strong>{{ID2D1EffectImpl::Initialize}}</strong> method. In order to prevent applications casually gaining access to this interface, and to separate reference counts between the public and private interfaces, it is not possible to call <strong>QueryInterface</strong> between the <strong>{{ID2D1DeviceContext}}</strong> and the <strong>{{ID2D1EffectContext}}</strong>.</p><p>Each call to <strong>{{ID2D1Effect::Initialize}}</strong> will be provided a different <strong>{{ID2D1EffectContext}}</strong> interface. This interface tracks resource allocations for the effect. When the effect is released, the corresponding allocations will also be released.</p> + + + + <p>Gets the unit mapping that an effect will use for properties that could be in either dots per inch (dpi) or pixels.</p> + <p> If the <strong>{{D2D1_UNIT_MODE}}</strong> is <strong>{{D2D1_UNIT_MODE_PIXELS}}</strong>, both <em>dpiX</em> and <em>dpiY</em> will be set to 96.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The dpi on the x-axis.</p> </dd> + + + <dd> <p>The dpi on the y-axis.</p> </dd> + + + + + <p> Creates a Direct2D effect for the specified class {{ID}}. This is the same as <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> so custom effects can create other effects and wrap them in a transform. </p> + <p>The created effect does not reference count the {{DLL}} from which the effect was created. If the caller unregisters an effect while this effect is loaded, the resulting behavior is unpredictable.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation. </td></tr> <tr><td>{{D2DERR_EFFECT_IS_NOT_REGISTERED}}</td><td>The specified effect is not registered by the system.</td></tr> </table><p>?</p> + + + + <p>This indicates the maximum feature level from the provided list which is supported by the device. If none of the provided levels are supported, then this {{API}} fails with {{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES}}</td><td>None of the provided levels are supported.</td></tr> </table><p>?</p> + + + <dd> <p>The feature levels provided by the application.</p> </dd> + + + <dd> <p>The count of feature levels provided by the application</p> </dd> + + + <dd> <p>The maximum feature level from the <em>featureLevels</em> list which is supported by the {{D2D}} device. +</p> </dd> + + + + + <p>Wraps an effect graph into a single transform node and then inserted into a transform graph. This allows an effect to aggregate other effects. This will typically be done in order to allow the effect properties to be re-expressed with a different contract, or to allow different components to integrate each-other?s effects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The effect to be wrapped in a transform node.</p> </dd> + + + <dd> <p>The returned transform node that encapsulates the effect graph.</p> </dd> + + + + + <p>This creates a blend transform that can be inserted into a transform graph. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The number of inputs to the blend transform.</p> </dd> + + + <dd> <p>Describes the blend transform that is to be created.</p> </dd> + + + <dd> <p>The returned blend transform.</p> </dd> + + + + + <p>Creates a transform that extends its input infinitely in every direction based on the passed in extend mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The extend mode in the X-axis direction.</p> </dd> + + + <dd> <p>The extend mode in the Y-axis direction.</p> </dd> + + + <dd> <p>The returned transform.</p> </dd> + + + + + <p>Creates and returns an offset transform.</p> + <p>An offset transform is used to offset an input bitmap without having to insert a rendering pass. An offset transform is automatically inserted by an Affine transform if the transform evaluates to a pixel-aligned transform.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The offset amount.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to an offset transform object.</p> </dd> + + + + + <p>Creates and returns a bounds adjustment transform.</p> + <p>A support transform can be used for two different reasons.</p><ul> <li>To indicate that a region of its input image is already transparent black. This can increase efficiency for rendering bitmaps. <strong>Note</strong>??If the indicated region does {{NOT}} contain only transparent black pixels, then rendering results are undefined. ? </li> <li>To increase the size of the input image. The expanded area will be treated as transparent black +</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The initial output rectangle for the bounds adjustment transform.</p> </dd> + + + <dd> <p>The returned bounds adjustment transform.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>Loads the given shader by its unique {{ID}}. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to {{JIT}}, if it hasn?t been already.</p> + <p>The shader you specify must be compiled, not in raw {{HLSL}} code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + <dd> <p>The buffer that contains the shader to register.</p> </dd> + + + <dd> <p>The size of the shader buffer in bytes.</p> </dd> + + + + + <p>This tests to see if the given shader is loaded.</p> + <p>Whether the shader is loaded.</p> + + + <dd> <p>The unique id that identifies the shader.</p> </dd> + + + + + <p>Creates or finds the given resource texture, depending on whether a resource id is specified. It also optionally initializes the texture with the specified data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>An optional reference to the unique id that identifies the lookup table.</p> </dd> + + + <dd> <p>The properties used to create the resource texture.</p> </dd> + + + <dd> <p>The optional data to be loaded into the resource texture. +</p> </dd> + + + <dd> <p>An optional reference to the stride to advance through the resource texture, according to dimension.</p> </dd> + + + <dd> <p>The size, in bytes, of the data.</p> </dd> + + + <dd> <p>The returned texture that can be used as a resource in a Direct2D effect.</p> </dd> + + + + + <p>Finds the given resource texture if it has already been created with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested resource texture was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a vertex buffer or finds a standard vertex buffer and optionally initializes it with vertices. The returned buffer can be specified in the render info to specify both a vertex shader and or to pass custom vertices to the standard vertex shader used by Direct2D. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>This finds the given vertex buffer if it has already been created with <strong>{{ID2D1EffectContext::CreateVertexBuffer}}</strong> with the same {{GUID}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_NOTFOUND}}</td><td>The requested vertex buffer was not found.</td></tr> </table><p>?</p> + + + + <p>Creates a color context from a color space. </p><p>If the color space is Custom, the context is initialized from the <em>profile</em> and <em>profileSize</em> parameters.</p><p>If the color space is not Custom, the context is initialized with the profile bytes associated with the color space. The <em>profile</em> and <em>profileSize</em> parameters are ignored.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The space of color context to create.</p> </dd> + + + <dd> <p>A buffer containing the {{ICC}} profile bytes used to initialize the color context when <em>space</em> is <strong>{{D2D1_COLOR_SPACE_CUSTOM}}</strong>. For other types, the parameter is ignored and should be set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The size in bytes of <em>Profile</em>.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context object.</p> </dd> + + + + + <p>Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by <em>filename</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The path to the file containing the profile bytes to initialize the color context with.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new color context.</p> </dd> + + + + + <p>Creates a color context from an <strong>{{IWICColorContext}}</strong>. The <strong>{{D2D1ColorContext}}</strong> space of the resulting context varies, see Remarks for more info.</p> + <p>The new color context can be used in <strong>{{D2D1_BITMAP_PROPERTIES1}}</strong> to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + + <p>This indicates whether an optional capability is supported by the {{D3D}} device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The feature to query support for.</p> </dd> + + + <dd> <p>A structure indicating information about how or if the feature is supported.</p> </dd> + + + <dd> <p>The size of the <em>featureSupportData</em> parameter.</p> </dd> + + + + + <p> Indicates whether the buffer precision is supported by the underlying Direct2D <strong>device.</strong> </p> + <p>Returns {{TRUE}} if the buffer precision is supported. Returns {{FALSE}} if the buffer precision is not supported.</p> + + + + <p>Describes a node in a transform topology.</p> + <p>Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.</p> + + + + <p>Gets the number of inputs to the transform node.</p> + + <p>This method returns the number of inputs to this transform node.</p> + + + + <p>Defines a mappable single-dimensional vertex buffer.</p> + + + + + <p>Maps the provided data into user memory.</p> + <p> If <em>data</em> is larger than <em>bufferSize</em>, this method fails. </p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_DEVICELOST}}</td><td>The device has been lost but cannot be reset at this time.</td></tr> </table><p>?</p> + + + <dd> <p>When this method returns, contains the address of a reference to the available buffer.</p> </dd> + + + <dd> <p>The desired size of the buffer.</p> </dd> + + + + + <p>Unmaps the vertex buffer.</p> + <p>After this method returns, the mapped memory from the vertex buffer is no longer accessible by the effect.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{D2DERR_WRONG_STATE}}</td><td>The object was not in the correct state to process the method.</td></tr> </table><p>?</p> + + + + <p>Tracks a transform-created resource texture.</p> + + + + + <p>Updates the specific resource texture inside the specific range or box using the supplied data.</p> + <p>The number of dimensions in the update must match those of the created texture.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td> {{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The "left" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The "right" extent of the updates if specified; if <strong>{{NULL}}</strong>, the entire texture is updated.</p> </dd> + + + <dd> <p>The stride to advance through the input data, according to dimension.</p> </dd> + + + <dd> <p>The number of dimensions in the resource texture. This must match the number used to load the texture.</p> </dd> + + + <dd> <p>The data to be placed into the resource texture.</p> </dd> + + + <dd> <p>The size of the data buffer to be used to update the resource texture.</p> </dd> + + + + + <p>Describes the render information common to all of the various transform implementations.</p> + <p>This interface is used by a transform implementation to first describe and then indicate changes to the rendering pass that corresponds to the transform.</p> + + + + <p>Sets how a specific input to the transform should be handled by the renderer in terms of sampling.</p> + <p>The input description must be matched correctly by the effect shader code.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input that will have the input description applied.</p> </dd> + + + <dd> <p>The description of the input to be applied to the transform.</p> </dd> + + + + + <p>Allows a caller to control the output precision and channel-depth of the transform in which the render information is encapsulated.</p> + <p> If the output precision of the transform is not specified, then it will default to the precision specified on the Direct2D device context. The maximum of 16bpc <strong>{{UNORM}}</strong> and 16bpc <strong>{{FLOAT}}</strong> is 32bpc <strong>{{FLOAT}}</strong>.</p><p>The output channel depth will match the maximum of the input channel depths if the channel depth is <strong>{{D2D1_CHANNEL_DEPTH_DEFAULT}}</strong>.</p><p>There is no global output channel depth, this is always left to the control of the transforms. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The type of buffer that should be used as an output from this transform.</p> </dd> + + + <dd> <p>The number of channels that will be used on the output buffer. </p> </dd> + + + + + <p>Specifies that the output of the transform in which the render information is encapsulated is or is not cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output of the transform is cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides an estimated hint of shader execution cost to {{D2D}}.</p> + <p>The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this {{API}} is optional, but it may improve performance if you provide an accurate number. </p><strong>Note</strong>??Instructions that occur in a loop should be counted according to the number of loop iterations.? + <p>This method does not return a value.</p> + + + <dd> <p>An approximate instruction count of the associated shader.</p> </dd> + + + + + <p>This interface is used to describe a {{GPU}} rendering pass on a vertex or pixel shader. It is passed to <strong>{{ID2D1DrawTransform}}</strong>.</p> + + + + <p>Sets the constant buffer for this transform's pixel shader.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the texture to be bound to the pixel shader.</p> </dd> + + + <dd> <p>The created resource texture.</p> </dd> + + + + + <p>Sets the constant buffer for this transform's vertex shader.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Set the shader instructions for this transform.</p> + <p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and will fail to Draw, it will place the context into an error state which can be retrieved through the <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call. </p><p>Specifying <em>pixelOptions</em> other than {{D2D1_PIXEL_OPTIONS_NONE}} can enable the renderer to perform certain optimizations such as combining various parts of the effect graph together. If this information does not accurately describe the shader, indeterminate rendering artifacts can result. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The resource id for the shader.</p> </dd> + + + <dd> <p>Additional information provided to the renderer to indicate the operations the pixel shader does.</p> </dd> + + + + + <p>Sets a vertex buffer, a corresponding vertex shader, and options to control how the vertices are to be handled by the Direct2D context.</p> + <p>The vertex shaders associated with the vertex buffer through the vertex shader {{GUID}} must have been loaded through the <strong>{{ID2D1EffectContext::LoadVertexShader}}</strong> method before this call is made.</p><p>If you pass the vertex option <strong>{{D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR}}</strong>, then the method fails unless the blend description is exactly this: </p><pre>{{D2D1_BLEND_DESCRIPTION}} blendDesc = { {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, {{D2D1_BLEND_ONE}}, {{D2D1_BLEND_ZERO}}, {{D2D1_BLEND_OPERATION_ADD}}, { 1.0f, 1.0f, 1.0f, 1.0f } };</pre><p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p><p> If blendDescription is {{NULL}}, a foreground-over blend mode is used.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The vertex buffer, if this is cleared, the default vertex shader and mapping to the transform rectangles will be used.</p> </dd> + + + <dd> <p>Options that influence how the renderer will interact with the vertex shader.</p> </dd> + + + <dd> <p>How the vertices will be blended with the output texture.</p> </dd> + + + <dd> <p>The set of vertices to use from the buffer. +</p> </dd> + + + <dd> <p>The {{GUID}} of the vertex shader.</p> </dd> + + + + + <p>Enables specification of information for a compute-shader rendering pass.</p> + <p>The transform changes the state on this render information to specify the compute shader and its dependent resources.</p> + + + + <p>Establishes or changes the constant buffer data for this transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data applied to the constant buffer.</p> </dd> + + + <dd> <p>The number of bytes of data in the constant buffer.</p> </dd> + + + + + <p>Sets the compute shader to the given shader resource. The resource must be loaded before this call is made.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The {{GUID}} of the shader.</p> </dd> + + + + + <p>Sets the resource texture corresponding to the given shader texture index to the given texture resource. The texture resource must already have been loaded with <strong>{{ID2D1EffectContext::CreateResourceTexture}}</strong> method. This call will fail if the specified index overlaps with any input. The input indices always precede the texture {{LUT}} indices. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + + <p>Represents a graph of transform nodes.</p> + <p>This interface allows a graph of transform nodes to be specified. This interface is passed to <strong>{{ID2D1EffectImpl::Initialize}}</strong> to allow an effect implementation to specify a graph of transforms or a single transform.</p> + + + + <p>Returns the number of inputs to the transform graph.</p> + <p>The number of inputs to this transform graph.</p> + + + + <p>Sets a single transform node as being equivalent to the whole graph.</p> + <p>This equivalent to calling <strong>{{ID2D1TransformGraph::Clear}}</strong>, adding a single node, connecting all of the node inputs to the effect inputs in order, and setting the transform not as the graph output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node to be set.</p> </dd> + + + + + <p>Adds the provided node to the transform graph.</p> + <p>This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way. +</p><p>A transform graph cannot be directly added to another transform graph. +Only interfaces derived from <strong>{{ID2D1TransformNode}}</strong> can be added to the transform graph. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be added to the transform graph.</p> </dd> + + + + + <p>Removes the provided node from the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p><p>Any connections to this node will be removed when the node is removed.</p><p>After the node is removed, it cannot be used by the interface until it has been added to the graph by <strong>AddNode</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be removed from the transform graph.</p> </dd> + + + + + <p>Sets the output node for the transform graph.</p> + <p>The node must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node that will be considered the output of the transform node.</p> </dd> + + + + + <p>Connects two nodes inside the transform graph.</p> + <p>Both nodes must already exist in the graph; otherwise, the call fails with <strong>{{D2DERR_NOT_FOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The node from which the connection will be made.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Connects a transform node inside the graph to the corresponding effect input of the encapsulating effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The effect input to which the transform node will be bound.</p> </dd> + + + <dd> <p>The node to which the connection will be made.</p> </dd> + + + <dd> <p>The node input that will be connected.</p> </dd> + + + + + <p>Clears the transform nodes and all connections from the transform graph.</p> + <p>Used when enough changes to transfoms would make editing of the transform graph inefficient.</p> + <p>This method does not return a value.</p> + + + + <p>Uses the specified input as the effect output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred</td></tr> <tr><td>{{D2DERR_NOT_FOUND}} = ({{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}}))</td><td>Direct2D could not locate the specified node.</td></tr> </table><p>?</p> + + + <dd> <p>The index of the input to the effect.</p> </dd> + + + + + <p>Represents the base interface for all of the transforms implemented by the transform author.</p> + <p>Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.</p> + + + + <p>Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle from which the inputs must be mapped.</p> </dd> + + + <dd> <p>The corresponding set of inputs. The inputs will directly correspond to the transform inputs.</p> </dd> + + + <dd> <p>The number of inputs specified. Direct2D guarantees that this is equal to the number of inputs specified on the transform.</p> </dd> + + + + + <p>Performs the inverse mapping to <strong>MapOutputRectToInputRects</strong>.</p> + <p>The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.</p><p>Unlike the <strong>MapOutputRectToInputRects</strong> and <strong>MapInvalidRect</strong> functions, this method is explicitly called by the renderer at a determined place in its rendering algorithm. The transform implementation may change its state based on the input rectangles and use this information to control its rendering information. This method is always called before the <strong>MapInvalidRect</strong> and <strong>MapOutputRectToInputRects</strong> methods of the transform.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the input rectangles for this rendering pass into the transform.</p> + <p>The transform implementation must regard <strong>MapInvalidRect</strong> as purely functional. The transform implementation can base the mapped input rectangle on the transform implementation's current state as specified by the encapsulating effect properties. But the transform implementation can't change its own state in response to a call to <strong>MapInvalidRect</strong>. Direct2D can call this method at any time and in any sequence following a call to the <strong>MapInputRectsToOutputRect</strong> method. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the input rectangle.</p> </dd> + + + <dd> <p>The invalid input rectangle.</p> </dd> + + + <dd> <p>The output rectangle to which the input rectangle must be mapped.</p> </dd> + + + + + <p>A specialized implementation of the Shantzis calculations to a transform implemented on the {{GPU}}. These calculations are described in the paper A model for efficient and flexible image computing.</p><p>The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the <strong>SetDrawInfo</strong> method. </p> + + + + <p> Provides the {{GPU}} render info interface to the transform implementation.</p> + <p>The transform can maintain a reference to this interface for its lifetime. If any properties change on the transform, it can apply these changes to the corresponding <em>drawInfo</em> interface. </p><p>This is also used to determine that the corresponding nodes in the graph are dirty.</p> + <p>Any {{HRESULT}} value can be returned when implementing this method. A failure will be returned from the corresponding <strong>{{ID2D1DeviceContext::EndDraw}}</strong> call.</p> + + + <dd> <p>The interface supplied back to the calling method to allow it to specify the {{GPU}} based transform pass.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Sets the render information used to specify the compute shader pass.</p> + <p>If this method fails, <strong>{{ID2D1TransformGraph::AddNode}}</strong> fails.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The render information object to set.</p> </dd> + + + + + <p>This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.</p> + <p>If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The output rectangle that will be filled by the compute transform.</p> </dd> + + + <dd> <p>The number of threads in the x dimension.</p> </dd> + + + <dd> <p>The number of threads in the y dimension.</p> </dd> + + + <dd> <p>The number of threads in the z dimension.</p> </dd> + + + + + <p>Supplies data to an analysis effect.</p> + <p> This interface can be implemented by either an <strong>{{ID2D1DrawTransform}}</strong> or an <strong>{{ID2D1ComputeTransform}}</strong>.</p> + + + + <p>Supplies the analysis data to an analysis transform.</p> + <p>The output of the transform will be copied to {{CPU}}-accessible memory by the imaging effects system before being passed to the implementation.</p><p> If this call fails, the corresponding <strong>{{ID2D1Effect}}</strong> instance is placed into an error state and fails to draw.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The data that the transform will analyze.</p> </dd> + + + <dd> <p>The size of the analysis data.</p> </dd> + + + + + <p>Represents a {{CPU}}-based rasterization stage in the transform pipeline graph.</p> + <p><strong>{{ID2D1SourceTransform}}</strong> specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.</p> + + + + <p>Sets the render information for the transform.</p> + <p>Provides a render information interface to the source transform to allow it to specify state to the rendering system.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The interface supplied to the transform to allow specifying the {{CPU}} based transform pass.</p> </dd> + + + + + <p>Draws the transform to the graphics processing unit ({{GPU}})?based Direct2D pipeline.</p> + <p>The implementation of the rasterizer guarantees that adding the <em>renderRect</em> to the <em>targetOrigin</em> does not exceed the bounds of the bitmap.</p><p>When implementing this method you must update the bitmap in this way: </p><ol> <li>Call the <strong>{{ID2D1Bitmap::Map}}</strong> method with the {{D2D1_MAP_OPTIONS_DISCARD}} and {{D2D1_MAP_OPTIONS_WRITE}} +flags.</li> <li>Update the buffer this method returns.</li> <li>Call the <strong>{{ID2D1Bitmap::Unmap}}</strong> method.</li> </ol><p>If you set the buffer precision manually on the associated <strong>{{ID2D1RenderInfo}}</strong> object, it must handle different pixel formats in this method by calling <strong>{{ID2D1Bitmap::GetPixelFormat}}</strong>. If you set the buffer precision manually, then you can rely on that format always being the one you provided.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The target to which the transform should be written.</p> </dd> + + + <dd> <p>The area within the source from which the image should be drawn.</p> </dd> + + + <dd> <p>The origin within the target bitmap to which the source data should be drawn.</p> </dd> + + + + + <p>Represents the set of transforms implemented by the effect-rendering system, which provides fixed-functionality.</p> + + + + + <p>Sets the properties of the output buffer of the specified transform node.</p> + <p>You can use the <strong>{{ID2D1EffectContext::IsBufferPrecisionSupported}}</strong> method to see if buffer precision is supported.</p><p>The available channel depth and precision depend on the capabilities of the underlying Microsoft Direct3D device.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>One or more arguments are not valid</td></tr> </table><p>?</p> + + + <dd> <p>The number of bits and the type of the output buffer.</p> </dd> + + + <dd> <p>The number of channels in the output buffer (1 or 4).</p> </dd> + + + + + <p>Sets whether the output of the specified transform is cached.</p> + + <p>This method does not return a value.</p> + + + <dd> <p><strong>{{TRUE}}</strong> if the output should be cached; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Provides methods to allow a blend operation to be inserted into a transform graph.</p><p>The image output of the blend transform is the same as rendering an image effect graph with these steps:</p><ul> <li>Copy the first input to the destination image.</li> <li>Render the next input on top using the blend description.</li> <li>Continue for each additional input.</li> </ul> + + + + + <p>Changes the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new blend description specified for the blend transform.</p> </dd> + + + + + <p>Gets the blend description of the corresponding blend transform object.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains the blend description specified for the blend transform.</p> </dd> + + + + + <p>Extends the input rectangle to infinity using the specified extend modes.</p> + + + + <p>Sets the extend mode in the x direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the x direction.</p> </dd> + + + + + <p>Sets the extend mode in the y direction.</p> + <p>If the extend mode enumeration is invalid, this operation is ignored.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The extend mode in the y direction.</p> </dd> + + + + + <p>Gets the extend mode in the x direction.</p> + + <p>This method returns the extend mode in the x direction.</p> + + + + <p>Gets the extend mode in the y direction.</p> + + <p>This method returns the extend mode in the y direction.</p> + + + + <p>Instructs the effect-rendering system to offset an input bitmap without inserting a rendering pass.</p> + <p>Because a rendering pass is not required, the interface derives from a transform node. This allows it to be inserted into a graph but does not allow an output buffer to be specified.</p> + + + + <p>Sets the offset in the current offset transform.</p> + + <p>This method does not return a value.</p> + + + <dd> <p>The new offset to apply to the offset transform.</p> </dd> + + + + + <p>Gets the offset currently in the offset transform.</p> + + <p>The current transform offset.</p> + + + + <p>A support transform for effects to modify the output rectangle of the previous effect or bitmap. </p> + <p>The support transform can be used for two different reasons.</p><ul> <li> <p>To indicate that a region of its input image is already transparent black. The expanded area will be treated as transparent black.</p> <p>This can increase efficiency for rendering bitmaps.</p> </li> <li> <p>To increase the size of the input image.</p> </li> </ul><p>?</p><p>?</p> + + + + <p>This sets the output bounds for the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Returns the output rectangle of the support transform.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The output bounds.</p> </dd> + + + + + <p>Allows a custom effect's interface and behavior to be specified by the effect author.</p> + <p>This interface is created by the effect author from a static factory registered through the <strong>{{ID2D1Factory::RegisterEffect}}</strong> method.</p> + + + + <p>The effect can use this method to do one time initialization tasks. If this method is not needed, the method can just return <strong>{{S_OK}}</strong>.</p> + <p>This moves resource creation cost to the <strong>CreateEffect</strong> call, rather than during rendering.</p><p>If the implementation fails this call, the corresponding <strong>{{ID2D1DeviceContext::CreateEffect}}</strong> call also fails.</p><p>The following example shows an effect implementing an initialize method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An internal context interface that creates and returns effect author?centric types.</p> </dd> + + + <dd> <p>The effect can populate the transform graph with a topology and can update it later.</p> </dd> + + + + + <p>Prepares an effect for the rendering process.</p> + <p>This method is called by the renderer when the effect is within an effect graph that is drawn.</p><p> The method will be called:</p><ul> <li>If the effect has been initialized but has not previously been drawn.</li> <li>If an effect property has been set since the last draw call.</li> <li>If the context state has changed since the effect was last drawn.</li> </ul><p>The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.</p><p>Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Indicates the type of change the effect should expect.</p> </dd> + + + + + <p>The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. </p><p>The renderer calls this method when:</p><ul> <li>When the effect is first initialized.</li> <li>If the number of inputs to the effect changes.</li> </ul> + <p>An error that prevents the effect from being initialized if called as part of the CreateEffect call. If the effect fails a subsequent SetGraph call:</p><ul> <li>The error will be returned from the property method that caused the number of inputs to the effect to change. +</li> <li>The effect object will be placed into an error state, if subsequently used to render, the context will be placed into a temporary error state, that particular effect will fail to render and the failure will be returned on the next EndDraw or Flush call.</li> </ul> + + + <dd> <p>The graph to which the effect describes its transform topology through the SetDescription call.</p> </dd> + + + + + <p>The rendering priority affects the extent to which Direct2D will throttle its rendering workload.</p> + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Retrieves the current rendering priority of the device.</p> + <p> The current rendering priority of the device.</p> + + + + <p>Sets the priority of Direct2D rendering operations performed on any device context associated with the device.</p> + <p>Calling this method affects the rendering priority of all device contexts associated with the device. This method can be called at any time, but is not guaranteed to take effect until the beginning of the next frame. The recommended usage is to call this method outside of <strong>BeginDraw</strong> and <strong>EndDraw</strong> blocks. Cycling this property frequently within drawing blocks will effectively reduce the benefits of any throttling that is applied.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> </table><p>?</p> + + + <dd> <p>The desired rendering priority for the device and associated contexts.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device}}</strong> interface. It also enables control of the device's rendering priority.</p> + + + + <p>Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.</p> + + + + <p>Enables creation and drawing of geometry realization objects. </p> + + + + <p>Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.</p> + <p>This method is used in conjunction with <strong>{{ID2D1DeviceContext1::DrawGeometryRealization}}</strong>. The <strong>{{D2D1::ComputeFlatteningTolerance}}</strong> helper {{API}} may be used to determine the proper flattening tolerance.</p><p>If the provided stroke style specifies a stroke transform type other than <strong>{{D2D1_STROKE_TRANSFORM_TYPE_NORMAL}}</strong>, then the stroke will be realized assuming the identity transform and a {{DPI}} of 96.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry to realize.</p> </dd> + + + <dd> <p>The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The width of the stroke. This parameter shares the same units as the coordinates of the geometry.</p> </dd> + + + <dd> <p>The stroke style (optional).</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to a new geometry realization object.</p> </dd> + + + + + <p>Renders a given geometry realization to the target with the specified brush.</p> + <p> This method respects all currently set state (transform, {{DPI}}, unit mode, target image, clips, layers); however, artifacts such as faceting may appear when rendering the realizations with a large effective scale (either via the transform or the {{DPI}}). Callers should create their realizations with an appropriate flattening tolerance using either <strong>{{D2D1_DEFAULT_FLATTENING_TOLERANCE}}</strong> or <strong>ComputeFlatteningTolerance</strong> to compensate for this. </p><p>Additionally, callers should be aware of the safe render bounds when creating geometry realizations. If a geometry extends outside of [-524,287, 524,287] {{DIPs}} in either the X- or the Y- direction in its original (pre-transform) coordinate space, then it may be clipped to those bounds when it is realized. This clipping will be visible even if the realization is subsequently transformed to fit within the safe render bounds.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call. </td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid value was passed to the method.</td></tr> </table><p>?</p> + + + <dd> <p>The geometry realization to be rendered.</p> </dd> + + + <dd> <p>The brush to render the realization with.</p> </dd> + + + + + <p> Creates Direct2D resources. </p><p> This interface also enables the creation of <strong>{{ID2D1Device1}}</strong> objects. </p> + + + + <p>Creates an <strong>{{ID2D1Device1}}</strong> object. </p> + <p>The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to <strong>CreateDevice</strong> returns a unique <strong>{{ID2D1Device1}}</strong> object, even if you pass the same <strong>{{IDXGIDevice}}</strong> multiple times.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><p> </p><table> <tr><th>{{HRESULT}}</th><th>Description</th></tr> <tr><td>{{S_OK}}</td><td>No error occurred.</td></tr> <tr><td>{{E_OUTOFMEMORY}}</td><td>Direct2D could not allocate sufficient memory to complete the call.</td></tr> <tr><td>{{E_INVALIDARG}}</td><td>An invalid parameter was passed to the returning function.</td></tr> <tr><td>{{D3DERR_OUTOFVIDEOMEMORY}}</td><td>Direct3D does not have enough display memory to perform the operation.</td></tr> </table><p>?</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink}}</strong> interface. It also enables access to the new primitive blend modes, {{MIN}} and {{ADD}}, through its <strong>SetPrimitiveBlend1</strong> method.</p> + + + + <p>Sets a new primitive blend mode. </p> + + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code. +</p> + + + <dd> <p>The primitive blend that will apply to subsequent primitives.</p> </dd> + + + + + <p>Computes the maximum factor by which a given transform can stretch any vector.</p> + <p>Formally, if M is the input matrix, this method will return the maximum value of |V * M| / |V| for all vectors V, where |.| denotes length. </p><strong>Note</strong>??Since this describes how M affects vectors (rather than points), the translation components (_31 and _32) of M are ignored.? + <p>The scale factor.</p> + + + <dd> <p>The input transform matrix.</p> </dd> + + + + + <p> Identifiers for properties of the {{YCbCr}} effect. </p> + + + + <p> Specifies the chroma subsampling of the input chroma image used by the {{YCbCr}} effect. </p> + + + + <p>Specifies the interpolation mode for the {{YCbCr}} effect.</p> + + + + <p>Provides factory methods and other state management for effect and transform authors.</p> + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + + + + + + + + + + <p> Specifies the appearance of the ink nib (pen tip) as part of an <strong>{{D2D1_INK_STYLE_PROPERTIES}}</strong> structure. </p> + + + + <p>Specifies the flip and rotation at which an image appears.</p> + + + <dd> <p>The orientation is unchanged.</p> </dd> + + + <dd> <p>The image is flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 180 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees.</p> </dd> + + + <dd> <p>The image is rotated clockwise 270 degrees, then flipped horizontally.</p> </dd> + + + <dd> <p>The image is rotated clockwise 90 degrees.</p> </dd> + + + + + <p>Controls option flags for a new {{ID2D1ImageSource}} when it is created.</p> + <p> ? </p><p>{{D2D1_IMAGE_SOURCE_CREATION_OPTIONS_RELEASE_SOURCE}} causes the image source to not retain a reference to the source object used to create it. It can decrease the quality and efficiency of printing.</p> + + + <dd> <p>No options are used.</p> </dd> + + + <dd> <p>Indicates the image source should release its reference to the {{WIC}} bitmap source after it has initialized. By default, the image source retains a reference to the {{WIC}} bitmap source for the lifetime of the object to enable quality and speed optimizations for printing. This option disables that optimization. +</p> </dd> + + + <dd> <p>Indicates the image source should only populate subregions of the image cache on-demand. You can control this behavior using the <strong>EnsureCached</strong> and <strong>TrimCache</strong> methods. This options provides the ability to improve memory usage by only keeping needed portions of the image in memory. This option requires that the image source has a reference to the {{WIC}} bitmap source, and is incompatible with {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE}}.</p> </dd> + + + + + <p>Option flags controlling primary conversion performed by <strong>CreateImageSourceFromDxgi</strong>, if any.</p> + + + + <p>Option flags for transformed image sources.</p> + + + <dd> <p>No option flags.</p> </dd> + + + <dd> <p>Prevents the image source from being automatically scaled (by a ratio of the context {{DPI}} divided by 96) while drawn.</p> </dd> + + + + + <p>Specifies how to render gradient mesh edges.</p> + + + <dd> <p>Render this patch edge aliased. Use this value for the internal edges of your gradient mesh.</p> </dd> + + + <dd> <p>Render this patch edge antialiased. Use this value for the external (boundary) edges of your mesh.</p> </dd> + + + <dd> <p>Render this patch edge aliased and also slightly inflated. Use this for the internal edges of your gradient mesh when there could be t-junctions among patches. Inflating the internal edges mitigates seams that can appear along those junctions.</p> </dd> + + + + + <p>Specifies additional aspects of how a sprite batch is to be drawn, as part of a call to <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong>.</p> + + + + <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> + + + <dd> <p>Color bitmap glyph positions are snapped to the nearest pixel if the bitmap resolution matches that of the device context.</p> </dd> + + + <dd> <p>Color bitmap glyph positions are not snapped.</p> </dd> + + + + + <p>Specifies which gamma is used for interpolation.</p> + <p>Interpolating in a linear gamma space (<strong>{{D2D1_GAMMA_1_0}}</strong>) can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:</p><p></p><p>The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.</p> + + + <dd> <p>Interpolation is performed in the standard {{RGB}} (sRGB) gamma.</p> </dd> + + + <dd> <p>Interpolation is performed in the linear-gamma color space.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Properties of a transformed image source.</p> + + + <dd> <p>The orientation at which the image source is drawn.</p> </dd> + + + <dd> <p>The horizontal scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The vertical scale factor at which the image source is drawn.</p> </dd> + + + <dd> <p>The interpolation mode used when the image source is drawn. This is ignored if the image source is drawn using the DrawImage method, or using an image brush.</p> </dd> + + + <dd> <p>Image sourc option flags.</p> </dd> + + + + + <p>Represents a point, radius pair that makes up part of a <strong>{{D2D1_INK_BEZIER_SEGMENT}}</strong>.</p> + + + + <p>Represents a Bezier segment to be used in the creation of an <strong>{{ID2D1Ink}}</strong> object. This structure differs from <strong>{{D2D1_BEZIER_SEGMENT}}</strong> in that it is composed of <strong>{{D2D1_INK_POINT}}</strong>s, which contain a radius in addition to x- and y-coordinates. </p> + + + + <p> Defines the general pen tip shape and the transform used in an <strong>{{ID2D1InkStyle}}</strong> object. </p> + + + + <p> Represents a tensor patch with 16 control points, 4 corner colors, and boundary flags. An {{ID2D1GradientMesh}} is made up of 1 or more gradient mesh patches. Use the <strong>GradientMeshPatch function</strong> or the <strong>GradientMeshPatchFromCoonsPatch function</strong> to create one. </p> + <p>The following image shows the numbering of control points on a tensor grid.</p> + + + + <p>Creates a color context from a simple color profile. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The simple color profile to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + <p> Represents a collection of style properties to be used by methods like <strong>{{ID2D1DeviceContext2::DrawInk}}</strong> when rendering ink. The ink style defines the nib (pen tip) shape and transform. </p> + + + + <p>Sets the transform to apply to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The transform to apply to this style?s nib shape. Note that the translation components of the transform matrix are ignored for the purposes of rendering.</p> </dd> + + + + + <p>Retrieves the transform to be applied to this style's nib shape.</p> + <p>This method does not return a value.</p> + + + <dd> <p>When this method returns, contains a reference to the transform to be applied to this style's nib shape.</p> </dd> + + + + + <p>Sets the pre-transform nib shape for this style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The pre-transform nib shape to use in this style.</p> </dd> + + + + + <p>Retrieves the pre-transform nib shape for this style.</p> + <p>Returns the pre-transform nib shape for this style.</p> + + + + <p>Represents a single continuous stroke of variable-width ink, as defined by a series of Bezier segments and widths.</p> + + + + <p>Sets the starting point for this ink object. This determines where this ink object will start rendering.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The new starting point for this ink object.</p> </dd> + + + + + <p>Retrieves the starting point for this ink object.</p> + <p>The starting point for this ink object.</p> + + + + <p>Adds the given segments to the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of segments to be added to this ink object.</p> </dd> + + + <dd> <p>The number of segments to be added to this ink object.</p> </dd> + + + + + <p>Removes the given number of segments from the end of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of segments to be removed from the end of this ink object. Note that segmentsCount must be less or equal to the number of segments in the ink object.</p> </dd> + + + + + <p>Updates the specified segments in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to update.</p> </dd> + + + <dd> <p>A reference to the array of segment data to be used in the update.</p> </dd> + + + <dd> <p>The number of segments in this ink object that will be updated with new data. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Updates the last segment in this ink object with new control points.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the segment data with which to overwrite this ink object's last segment. Note that if there are currently no segments in the ink object, SetSegmentsAtEnd will return an error.</p> </dd> + + + + + <p>Returns the number of segments in this ink object.</p> + <p>Returns the number of segments in this ink object.</p> + + + + <p>Retrieves the specified subset of segments stored in this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first segment in this ink object to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of retrieved segments.</p> </dd> + + + <dd> <p>The number of segments to retrieve. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.</p> </dd> + + + + + <p>Retrieves a geometric representation of this ink object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The world transform to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The flattening tolerance to be used in determining the geometric representation.</p> </dd> + + + <dd> <p>The geometry sink to which the geometry representation will be streamed.</p> </dd> + + + + + <p>Retrieve the bounds of the geometry, with an optional applied transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The ink style to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>The world transform to be used in determining the bounds of this ink object.</p> </dd> + + + <dd> <p>When this method returns, contains the bounds of this ink object.</p> </dd> + + + + + <p>Represents a device-dependent representation of a gradient mesh composed of patches. Use the <strong>{{ID2D1DeviceContext2::CreateGradientMesh}} method</strong> to create an instance of {{ID2D1GradientMesh}}.</p> + + + + <p>Returns the number of patches that make up this gradient mesh.</p> + <p>Returns the number of patches that make up this gradient mesh.</p> + + + + <p>Returns a subset of the patches that make up this gradient mesh.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Index of the first patch to return.</p> </dd> + + + <dd> <p>A reference to the array to be filled with the patch data.</p> </dd> + + + <dd> <p>The number of patches to be returned.</p> </dd> + + + + + <p>Represents a producer of pixels that can fill an arbitrary 2D plane.</p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p><strong>OfferResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully offered </li> <li><strong>{{E_INVALIDARG}}</strong> if a resource in the array or the priority is invalid </li> </ul> + + + + <p> Restores access to resources that were previously offered by calling <strong>OfferResources</strong>. </p> + <p> After you call <strong>OfferResources</strong> to offer one or more resources, +you must call <strong>TryReclaimResources</strong> before you can use those resources again. +You must check the value in the <strong>resourcesDiscarded</strong> to determine whether the resource?s content was discarded. +If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li><strong>{{S_OK}}</strong> if resources were successfully reclaimed </li> <li><strong>{{E_INVALIDARG}}</strong> if the resources are invalid </li> </ul> + + + + <p>Produces 2D pixel data that has been sourced from {{WIC}}.</p> + <p> Create an an instance of {{ID2D1ImageSourceFromWic}} using <strong>{{ID2D1DeviceContext2::CreateImageSourceFromWic}}</strong>. </p> + + + + <p> Ensures that a specified region of the image source cache is populated. This method can be used to minimize glitches by performing expensive work to populate caches outside of a rendering loop. This method can also be used to speculatively load image data before it is needed by drawing routines. </p> + <p>This {{API}} loads image data into caches of image sources, if that data was not already cached. It does not trim pre-existing caches, if any. More areas within the cache can be populated than actually requested.</p><p> ? </p><p>The provided region must be constructed to include the scale with which the image source will subsequently be drawn. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, that should be populated in the cache. By default, this is the entire extent of the image.</p> </dd> + + + + + <p>This method trims the populated regions of the image source cache to just the specified rectangle.</p> + <p>The provided region must be constructed to include the scale at which the image source will be drawn at. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the {{API}} according to the {{DPI}} and other relevant transforms, which can include the world transform and brush transforms.</p><p> ? </p><p>This method will fail if on-demand caching was not requested when the image source was created.</p><p> ? </p><p>As with <strong>{{ID2D1Device::ClearResources}}</strong>, the caller can need to subsequently issue a {{D3D}} flush before memory usage is reduced.</p><p>This operation is only supported when the image source has been initialized using the {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND}} option.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the region of the image, in pixels, which should be preserved in the image source cache. Regions which are outside of the rectangle are evicted from the cache. By default, this is an empty rectangle, meaning that the entire image is evicted from the cache.</p> </dd> + + + + + <p>Retrieves the underlying bitmap image source from the Windows Imaging Component ({{WIC}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>On return contains the bitmap image source.</p> </dd> + + + + + <p>Represents an image source which shares resources with an original image source.</p> + + + + <p> Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to <strong>CreateTransformedImageSource</strong>. </p> + <p>This method does not return a value.</p> + + + + <p>A container for 3D lookup table data that can be passed to the LookupTable3D effect.</p><p>An {{ID2DLookupTable3D}} instance is created using <strong>{{ID2D1DeviceContext2::CreateLookupTable3D}}</strong> or {{ID2D1EffectContext1::CreateLookupTable3D}}.</p> + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Creates a new <strong>{{ID2D1Ink}}</strong> object that starts at the given point.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1InkStyle}}</strong> object, for use with ink rendering methods such as <strong>DrawInk</strong>.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates a new <strong>{{ID2D1GradientMesh}}</strong> instance using the given array of patches.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + + <p>Creates an image source object from a {{WIC}} bitmap source, while populating all pixel memory within the image source. The image is loaded and stored while using a minimal amount of memory.</p> + <p> This method creates an image source which can be used to draw the image. </p><p>This method supports images that exceed the maximum texture size. Large images are internally stored within a sparse tile cache. </p><p> This {{API}} supports the same set of pixel formats and alpha modes supported by <strong>CreateBitmapFromWicBitmap</strong>. If the {{GPU}} does not support a given pixel format, this method will return {{D2DERR_UNSUPPORTED_PIXEL_FORMAT}}. This method does not apply adjustments such as gamma or alpha premultiplication which affect the appearance of the image. </p><p>This method automatically selects an appropriate storage format to minimize {{GPU}} memory usage., such as using separate luminance and chrominance textures for {{JPEG}} images. </p><p>If the loadingOptions argument is {{NULL}}, {{D2D}} uses {{D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{WIC}} bitmap source to create the image source from.</p> </dd> + + + <dd> <p>Options for creating the image source. Default options are used if {{NULL}}.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>Precision of the input lookup table data.</p> </dd> + + + <dd> <p>Number of lookup table elements per dimension (X, Y, Z).</p> </dd> + + + <dd> <p>Buffer holding the lookup table data.</p> </dd> + + + <dd> <p>Size of the lookup table data buffer.</p> </dd> + + + <dd> <p>An array containing two values. The first value is the size in bytes from one row (X dimension) of {{LUT}} data to the next. The second value is the size in bytes from one {{LUT}} data plane (X and Y dimensions) to the next.</p> </dd> + + + <dd> <p>Receives the new lookup table instance.</p> </dd> + + + + + <p>Creates an image source from a set of {{DXGI}} surface(s). The {{YCbCr}} surface(s) are converted to {{RGBA}} automatically during subsequent drawing.</p> + <p> This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of {{DXGI}} formats and {{DXGI}} color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported: </p><table> <tr><th>Color Space Type</th><th>Surface Count(s)</th><th>Surface Format(s)</th></tr> <tr><td>{{DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709}}</td><td>1</td><td> Standard {{D2D}}-supported pixel formats: <ul> <li>{{DXGI_FORMAT_A8_UNORM}}</li> <li>{{DXGI_FORMAT_R8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</li> <li>{{DXGI_FORMAT_B8G8R8X8_UNORM}}</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> <li>{{DXGI_FORMAT_R16G16B16A16_UNORM}}</li> <li>{{DXGI_FORMAT_R32G32B32A32_FLOAT}}</li> <li>{{DXGI_FORMAT_BC1_UNORM}}</li> <li>{{DXGI_FORMAT_BC2_UNORM}}</li> <li>{{DXGI_FORMAT_BC3_UNORM}}</li> </ul> </td></tr> <tr><td>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601}}</td><td>1, 2, 3</td><td> When Surface count is 1: <ul> <li>{{DXGI_FORMAT_AYUV}}</li> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> <li>{{DXGI_FORMAT_V408}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> <tr><td> {{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601}} <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020}}</p> <p>{{DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020}}</p> </td><td>1,2,3</td><td> <p>When Surface count is 1: </p> <ul> <li>{{DXGI_FORMAT_NV12}}</li> <li>{{DXGI_FORMAT_YUY2}}</li> <li>{{DXGI_FORMAT_P208}}</li> <li>{{DXGI_FORMAT_V208}}</li> </ul> <p>When Surface Count is 2:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8G8_UNORM}}}</li> </ul> <p>When Surface Count is 3:</p> <ul> <li>{DXGI_FORMAT_R8_UNORM, {{DXGI_FORMAT_R8_UNORM}}, {{DXGI_FORMAT_R8_UNORM}}}</li> </ul> </td></tr> </table><p>?</p><p>The {{GPU}} must also have sufficient support for a pixel format to be supported by {{D2D}}. To determine whether {{D2D}} supports a format, call IsDxgiFormatSupported.</p><p>This {{API}} converts {{YCbCr}} formats to sRGB using the provided color space type and options. {{RGBA}} data is assumed to be in the desired space, and {{D2D}} does not apply any conversion.</p><p> If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is {{NULL}}, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up). </p><p> If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another. </p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The {{DXGI}} surfaces to create the image source from.</p> </dd> + + + <dd> <p>The regions of the surfaces to create the image source from.</p> </dd> + + + <dd> <p>The number of surfaces provided; must be between one and three.</p> </dd> + + + <dd> <p>The color space of the input.</p> </dd> + + + <dd> <p>Options controlling color space conversions.</p> </dd> + + + <dd> <p>Receives the new image source instance.</p> </dd> + + + + + <p>Returns the world bounds of a given gradient mesh.</p> + <p>The world bounds reflect the current {{DPI}}, unit mode, and world transform of the context. They indicate which pixels would be impacted by calling DrawGradientMesh with the given gradient mesh. +They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The gradient mesh whose world bounds will be calculated.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to the bounds of the gradient mesh, in device independent pixels ({{DIPs}}).</p> </dd> + + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the device context using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the render target. If {{NULL}} is specified, the destination rectangle is {0, 0, w, h}, where w and h are the width and height of the metafile as reported by <strong>{{ID2D1GdiMetafile::GetBounds}}</strong>. </p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}) of the metafile. If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>Creates an image source which shares resources with an original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The original image.</p> </dd> + + + <dd> <p>Properties for the source image.</p> </dd> + + + <dd> <p>Receives the new image source.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing <strong>{{ID2D1Device1}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext2}}</strong> objects. </p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext2}}</strong> from a Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flush all device contexts that reference a given bitmap.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The bitmap, created on this device, for which all referencing device contexts will be flushed. </p> </dd> + + + + + <p>Returns the {{DXGI}} device associated with this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{DXGI}} device associated with this Direct2D device.</p> </dd> + + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device2}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device2}}</strong> object. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink1}}</strong> interface. It also enables access to ink rendering and gradient mesh rendering.</p> + + + + <p>Renders the given ink object using the given brush and ink style.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The ink object to be rendered.</p> </dd> + + + <dd> <p>The brush with which to render the ink object.</p> </dd> + + + <dd> <p>The ink style to use when rendering the ink object.</p> </dd> + + + + + <p>Renders a given gradient mesh to the target.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The gradient mesh to be rendered.</p> </dd> + + + + + <p>Draws a metafile to the command sink using the given source and destination rectangles.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The metafile to draw.</p> </dd> + + + <dd> <p>The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the destination rectangle is the size of the target.</p> </dd> + + + <dd> <p>The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in {{DIPs}}). If {{NULL}} is specified, the source rectangle is the value returned by <strong>{{ID2D1GdiMetafile1::GetSourceBounds}}</strong>.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafile}} interface. It also enables accessing the metafile {{DPI}} and bounds.</p> + + + + <p>Gets the {{DPI}} reported by the metafile.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the horizontal {{DPI}} reported by the metafile.</p> </dd> + + + <dd> <p>Receives the vertical {{DPI}} reported by the metafile.</p> </dd> + + + + + <p>Gets the bounds of the metafile in source space in {{DIPs}}. This corresponds to the frame rect in an {{EMF}}/{{EMF}}+.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The bounds, in {{DIPs}}, of the metafile.</p> </dd> + + + + + <p>This interface performs all the same functions as the existing {{ID2D1GdiMetafileSink}} interface. It also enables access to metafile records.</p> + + + + <p>Provides access to metafile records, including their type, data, and flags.</p> + <p>For details on the {{EMF}} and {{EMF}}+ formats, please see Microsoft technical documents {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}}.</p> + <p>{{S_OK}} if successful, otherwise a failure {{HRESULT}}.</p> + + + <dd> <p>The type of metafile record being processed. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for a list of record types.</p> </dd> + + + <dd> <p>The data contained in this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record data layouts.</p> </dd> + + + <dd> <p>{{TThe}} size of the data pointed to by recordData. </p> </dd> + + + <dd> <p>The set of flags set for this record. Please see {{MS}}-{{EMF}} and {{MS}}-{{EMFPLUS}} for information on record flags.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Adds the given sprites to the end of this sprite batch.</p> + <p>In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.</p><strong>Note</strong>??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of sprites to be added. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.</p> </dd> + + + + + <p>Updates the properties of the specified sprites in this sprite batch. Providing a null value for any property will leave that property unmodified for that sprite. </p> + <p>Returns {{S_OK}} on success. Returns {{E_INVALIDARG}} if an invalid value was passed to the method. In this case, no sprites are modified by this call to SetSprites.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to update.</p> </dd> + + + <dd> <p>The number of sprites to update with new properties. This determines how many strides into each given array Direct2D will read.</p> </dd> + + + <dd> <p>A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.</p> </dd> + + + <dd> <p>A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. </p> <p>Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped. </p> <p>Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the updated sprites.</p> </dd> + + + <dd> <p>A reference to an array containing the transforms to apply to each sprite?s destination rectangle. </p> <p>Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the updated sprites.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each updated sprite.</p> </dd> + + + <dd> <p>Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each updated sprite.</p> </dd> + + + + + <p>Retrieves the specified subset of sprites from this sprite batch. For the best performance, use nullptr for properties that you do not need to retrieve.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the first sprite in this sprite batch to retrieve.</p> </dd> + + + <dd> <p>The number of sprites to retrieve.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the destination rectangles for the retrieved sprites.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the source rectangles for the retrieved sprites. </p> <p>The InfiniteRectU is returned for any sprites that were not assigned a source rectangle.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the colors to be applied to the retrieved sprites. </p> <p>The color {1.0f, 1.0f, 1.0f, 1.0f} is returned for any sprites that were not assigned a color.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array containing the transforms to be applied to the retrieved sprites. </p> <p>The identity matrix is returned for any sprites that were not assigned a transform.</p> </dd> + + + + + <p>Retrieves the number of sprites in this sprite batch.</p> + <p>Returns the number of sprites in this sprite batch</p> + + + + <p>Removes all sprites from this sprite batch.</p> + <p>This method does not return a value.</p> + + + + <p>This interface performs all the same functions as the <strong>{{ID2D1DeviceContext2}}</strong> interface, plus it enables functionality for creating and drawing sprite batches.</p> + + + + <p>Creates a new, empty sprite batch. After creating a sprite batch, use <strong>{{ID2D1SpriteBatch::AddSprites}}</strong> to add sprites to it, then use <strong>{{ID2D1DeviceContext3::DrawSpriteBatch}}</strong> to draw it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Renders all sprites in the given sprite batch to the device context using the specified drawing options.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device2}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext3}}</strong> objects.</p> + + + + <p>Creates a new <strong>{{ID2D1DeviceContext3}}</strong> from this Direct2D device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device3}}</strong> objects.</p> + + + + <p>Creates an <strong>{{ID2D1Device3}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink2}}</strong> interface. It also enables access to sprite batch rendering.</p> + + + + <p>Renders part or all of the given sprite batch to the device context using the specified drawing options.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sprite batch to draw.</p> </dd> + + + <dd> <p>The index of the first sprite in the sprite batch to draw.</p> </dd> + + + <dd> <p>The number of sprites to draw.</p> </dd> + + + <dd> <p>The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.</p> </dd> + + + <dd> <p>The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.</p> </dd> + + + <dd> <p>The additional drawing options, if any, to be used for this sprite batch.</p> </dd> + + + + + <p>This object supplies the values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> + + + + <p>Provides values to an {{SVG}} glyph for fill.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the area is painted. A null brush will cause the context-fill value to come from the <strong>defaultFillBrush</strong>. If the defaultFillBrush is also null, the context-fill value will be 'none'. To set the ?context-fill? value, this method uses the provided brush with its opacity set to 1. To set the ?context-fill-opacity? value, this method uses the opacity of the provided brush. </p> </dd> + + + + + <p>Returns the requested fill parameters.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + + + <p>Provides values to an {{SVG}} glyph for stroke properties. The brush with opacity set to 1 is used as the 'context-stroke'. The opacity of the brush is used as the 'context-stroke-opacity' value.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Describes how the stroke is painted. A null brush will cause the context-stroke value to be none.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dasharray' property. A null value will cause the stroke-dasharray to be set to 'none'.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>Specifies the 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p>Returns the number of dashes in the dash array.</p> + <p>Returns the number of dashes in the dash array.</p> + + + + <p>Returns the requested stroke parameters. Any parameters that are non-null will receive the value of the requested parameter. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Describes how the stroke is painted.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-width' property.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dasharray' property.</p> </dd> + + + <dd> <p>The the number of dashes in the dash array.</p> </dd> + + + <dd> <p>The 'context-value' for the 'stroke-dashoffset' property.</p> </dd> + + + + + <p> This interface performs all the same functions as the <strong>{{ID2D1DeviceContext3}}</strong> interface, plus it enables functionality for handling new types of color font glyphs. </p> + + + + <p>Creates an {{SVG}} glyph style object.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>On completion points to the created <strong>{{ID2D1SvgGlyphStyle}}</strong> object.</p> </dd> + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + <p>Draws a text layout object. If the layout is not subsequently changed, this can be more efficient than DrawText when drawing the same layout repeatedly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The point, described in device-independent pixels, at which the upper-left corner of the text described by <em>textLayout</em> is drawn.</p> </dd> + + + <dd> <p>The formatted text to draw. Any drawing effects that do not inherit from <strong>{{ID2D1Resource}}</strong> are ignored. If there are drawing effects that inherit from <strong>{{ID2D1Resource}}</strong> that are not brushes, this method fails and the render target is put in an error state. </p> </dd> + + + <dd> <p>The brush used to paint the text.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font.</p> </dd> + + + <dd> <p> A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is <strong>{{D2D1_DRAW_TEXT_OPTIONS_NONE}}</strong>, which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. </p> </dd> + + + + + <p>Draws a color bitmap glyph run using one of the bitmap formats.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Specifies the format of the glyph image. Supported formats are {{DWRITE_GLYPH_IMAGE_FORMATS_PNG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_JPEG}}, {{DWRITE_GLYPH_IMAGE_FORMATS_TIFF}}, or {{DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8}}. This method will result in an error if the color glyph run does not contain the requested format. </p> <p>Only one format can be specified at a time, combinations of flags are not valid input.</p> </dd> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>Indicates the measuring method.</p> </dd> + + + <dd> <p>Specifies the pixel snapping policy when rendering color bitmap glyphs.</p> </dd> + + + + + <p>Draws a color glyph run that has the format of {{DWRITE_GLYPH_IMAGE_FORMATS_SVG}}.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The origin of the baseline for the glyph run.</p> </dd> + + + <dd> <p>The glyphs to render.</p> </dd> + + + <dd> <p>The brush used to paint the specified glyphs.</p> </dd> + + + <dd> <p>Values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Indicates the measuring method used for text layout.</p> </dd> + + + + + <p> Retrieves an image of the color bitmap glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The format for the glyph image. If there is no image data in the requested format for the requested glyph, this method will return an error. </p> </dd> + + + <dd> <p>The origin for the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the choice of which bitmap to use from the font. It also affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image. This input transform affects the choice of which bitmap to use from the font. It is also factored into the output glyphTransform.</p> </dd> + + + <dd> <p>Dots per inch along the x-axis.</p> </dd> + + + <dd> <p>Dots per inch along the y-axis.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion contains the retrieved glyph image.</p> </dd> + + + + + <p> Retrieves an image of the {{SVG}} glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Origin of the glyph.</p> </dd> + + + <dd> <p>Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.</p> </dd> + + + <dd> <p>The specified font size affects the output glyphTransform, causing it to properly scale the glyph.</p> </dd> + + + <dd> <p>Index of the glyph to retrieve.</p> </dd> + + + <dd> <p>If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.</p> </dd> + + + <dd> <p>The transform to apply to the image.</p> </dd> + + + <dd> <p>Describes how the area is painted.</p> </dd> + + + <dd> <p>The values for context-fill, context-stroke, and context-value that are used when rendering {{SVG}} glyphs.</p> </dd> + + + <dd> <p>The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the {{DWRITE_COLOR_GLYPH_RUN}} struct, which is not relevant for {{SVG}} glyphs.</p> </dd> + + + <dd> <p>Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.</p> </dd> + + + <dd> <p>On completion, contains the retrieved glyph image.</p> </dd> + + + + + <p> Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the <strong>{{ID2D1Device3}}</strong> interface. It also enables the creation of <strong>{{ID2D1DeviceContext4}}</strong> objects. </p> + + + + <p>Creates a new device context from a Direct2D device.</p> + <p>The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If it fails, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The options to be applied to the created device context.</p> </dd> + + + <dd> <p>When this method returns, contains the address of a reference to the new device context.</p> </dd> + + + + + <p>Sets the maximum capacity of the color glyph cache. </p> + <p>The color glyph cache is used to store color bitmap glyphs and {{SVG}} glyphs, enabling faster performance if the same glyphs are needed again. The capacity determines the amount of memory that {{D2D}} may use to store glyphs that the application does not already reference. If the application references a glyph using <strong>GetColorBitmapGlyphImage</strong> or <strong>GetSvgGlyphImage</strong>, after it has been evicted, this glyph does not count toward the cache capacity.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The maximum capacity of the color glyph cache.</p> </dd> + + + + + <p>Gets the maximum capacity of the color glyph cache.</p> + <p>Returns the maximum capacity of the color glyph cache in bytes.</p> + + + + <p>Creates Direct2D resources. This interface also enables the creation of <strong>{{ID2D1Device4}}</strong> objects.</p> + + + + <p> Creates an <strong>{{ID2D1Device4}}</strong> object. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + + <p>This interface performs all the same functions as the existing <strong>{{ID2D1CommandSink3}}</strong> interface. It also enables access to the new primitive blend mode, {{MAX}}, through the <strong>SetPrimitiveBlend2</strong> method.</p> + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + <p>Represents a color context to be used with the Color Management Effect.</p> + + + + + + + + + + <p>Represents a set of state and command buffers that are used to render to a target.</p><p>The device context can render to a target bitmap or a command list. +</p> + <p> Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device. </p> + + + + + + + + + + <p>Creates a color context from a {{DXGI}} color space type. It is only valid to use this with the Color Management Effect in 'Best' mode.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>The color space to create the color context from.</p> </dd> + + + <dd> <p>The created color context.</p> </dd> + + + + + + + + <p>Represents a resource domain whose objects and device contexts can be used together.</p> + + + + + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Creates Direct2D resources.</p> + <p>The <strong>{{ID2D1Factory}}</strong> interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes. </p><p>A factory defines a set of Create<em>Resource</em> methods that can produce the following drawing resources:</p><p> </p><ul> <li>Render targets: objects that render drawing commands.</li> <li>Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.</li> <li>Geometries: objects that represent simple and potentially complex shapes.</li> </ul><p>To create an <strong>{{ID2D1Factory}}</strong>, you use one of the <strong>CreateFactory</strong> methods. You should retain the <strong>{{ID2D1Factory}}</strong> instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.</p> + + + + <p>Returns the interior points for a gradient mesh patch based on the points defining a Coons patch.</p><strong>Note</strong>??<p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p>? + <p>This function is called by the <strong>GradientMeshPatchFromCoonsPatch</strong> function and is not intended to be used directly.</p> + <p>This function does not return a value.</p> + + + + <p>Identifiers for properties of the Contrast effect.</p> + + + + <p>Indentifiers for properties of the {{RGB}} to Hue effect.</p> + + + + <p>Values for the <strong>{{D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE}}</strong> property of the {{RGB}} to Hue effect.</p> + + + + <p>Identifiers for properties of the Hue to {{RGB}} effect.</p> + + + + <p>Values for the <strong>{{D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE}}</strong> property of the Hue to {{RGB}} effect.</p> + + + + <p>Identifiers for properties of the Chroma-key effect.</p> + + + + <p>Identifiers for properties of the Emboss effect.</p> + + + + <p>Identifiers for properties of the Exposure effect.</p> + + + + <p>Identifiers for properties of the Posterize effect.</p> + + + + <p>Identifiers for properties of the Sepia effect.</p> + + + + <p>Identifiers for properties of the Sharpen effect.</p> + + + + <p>Identifiers for properties of the Straighten effect.</p> + + + + <p>Values for the <strong>{{D2D1_STRAIGHTEN_PROP_SCALE_MODE}}</strong> property of the Straighten effect.</p> + + + + <p>Identifiers for properties of the Temperature and Tint effect.</p> + + + + <p>Identifiers for properties of the Vignette effect.</p> + + + + <p>Identifiers for properties of the Edge Detection effect.</p> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_STRENGTH}} property is a float value modulating the response of the edge detection filter. A low strength value means that weaker edges will get filtered out, while a high value means stronger edges will get filtered out. The allowed range is 0.0 to 1.0. The default value is 0.5.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_BLUR_RADIUS}} property is a float value specifying the amount of blur to apply. Applying blur is used to remove high frequencies and reduce phantom edges. The allowed range is 0.0 to 10.0. The default value is 0.0 (no blur applied).</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_MODE}} property is a <strong>{{D2D1_EDGEDETECTION_MODE}}</strong> enumeration value which mode to use for edge detection. The default value is {{D2D1_EDGEDETECTION_MODE_SOBEL}}.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} property is a boolean value. Edge detection only applies to the {{RGB}} channels, the alpha channel is ignored for purposes of detecting edges. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is false, the output edges is fully opaque. If {{D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES}} is true, the input opacity is preserved. The default value is false.</p> </dd> + + + <dd> <p>The {{D2D1_EDGEDETECTION_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> enumeration value indicating the alpha mode of the input file. If the input is not opaque, this value is used to determine whether to unpremultiply the inputs. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information. The default value is {{D2D1_ALPHA_MODE_PREMULTIPLIED}}.</p> </dd> + + + + + <p>Values for the <strong>{{D2D1_EDGEDETECTION_PROP_MODE}}</strong> property of the Edge Detection effect.</p> + + + + <p>Identifiers for properties of the Highlights and Shadows effect.</p> + + + + <p>Values for the <strong>{{D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA}}</strong> property of the Highlights and Shadows effect.</p> + + + + <p>Identifiers for the properties of the 3D Lookup Table effect.</p> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_LUT}} property is a reference to an <strong>{{ID2D1LookupTable3D}}</strong> object. The default value is null.</p> </dd> + + + <dd> <p>The {{D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE}} property is a <strong>{{D2D1_ALPHA_MODE}}</strong> value indicating the alpha mode of the input file. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information.</p> </dd> + + + + + <p>This effect adjusts the opacity of an image by multiplying the alpha channel of the input by the specified opacity value. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Opacity}}.</p> + + + + <p>This effect combines two images by adding weighted pixels from input images. It has two inputs, named Destination and Source.</p><p>The cross fade formula is <strong>output = weight * Destination + (1 - weight) * Source</strong>.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1CrossFade}}.</p> + + + + <p>This effect tints the source image by multiplying the source image by the specified color. It has a single input.</p><p>The {{CLSID}} for this effect is {{CLSID_D2D1Tint}}.</p> + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Defines options that should be applied to the color space.</p> + + + + <dd> <p>The color space is otherwise described, such as with a color profile.</p> </dd> + + + <dd> <p>The color space is sRGB.</p> </dd> + + + <dd> <p>The color space is scRGB.</p> </dd> + + + + + <p>Describes the shape at the end of a line or segment.</p> + <p> The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting. </p> + + + <dd> <p>A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines. </p> </dd> + + + <dd> <p>Half of a square that has a length equal to the line thickness.</p> </dd> + + + <dd> <p>A semicircle that has a diameter equal to the line thickness.</p> </dd> + + + <dd> <p>An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.</p> + + + <dd> <p>The render target waits until the display refreshes to present and discards the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not discard the frame upon presenting.</p> </dd> + + + <dd> <p>The render target does not wait until the display refreshes to present.</p> </dd> + + + + + <p>Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame). </p> + <p> If the shader specifies <strong>{{D2D1_PIXEL_OPTIONS_NONE}}</strong>, it must still correctly implement the region of interest calculations in <strong>{{ID2D1Transform::MapOutputRectToInputRects}}</strong> and <strong>{{ID2D1Transform::MapInputRectsToOutputRect}}</strong>.</p> + + + <dd> <p>The pixel shader is not restricted in its sampling.</p> </dd> + + + <dd> <p> The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.</p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.</p> + <p>Not every render target supports hardware rendering. For more information, see the Render Targets Overview. </p> + + + <dd> <p>The render target uses hardware rendering, if available; otherwise, it uses software rendering.</p> </dd> + + + <dd> <p>The render target uses software rendering only.</p> </dd> + + + <dd> <p>The render target uses hardware rendering only. </p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>A description of a single element to the vertex layout.</p> + <p>This structure is a subset of <strong>{{D3D11_INPUT_ELEMENT_DESC}}</strong> that omits fields required to define a vertex layout.</p><p>If the <strong>{{D2D1_APPEND_ALIGNED_ELEMENT}}</strong> constant is used for <strong>alignedByteOffset</strong>, the elements will be packed contiguously for convenience. +</p> + + + <dd> <p>The {{HLSL}} semantic associated with this element in a shader input-signature.</p> </dd> + + + <dd> <p>The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).</p> </dd> + + + <dd> <p>The data type of the element data.</p> </dd> + + + <dd> <p>An integer value that identifies the input-assembler. Valid values are between 0 and 15.</p> </dd> + + + <dd> <p>The offset in bytes between each element.</p> </dd> + + + + + <p>A 3D vector that consists of three single-precision floating-point values (x, y, z).</p> + + + <dd> <p>The x value of the vector.</p> </dd> + + + <dd> <p>The y value of the vector.</p> </dd> + + + <dd> <p>The z value of the vector.</p> </dd> + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Interface for all {{SVG}} elements.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + <p>Represents a bitmap that has been bound to an <strong>{{ID2D1RenderTarget}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + <p>Interface describing an {{SVG}} points value in a polyline or polygon element.</p> + + + + + + + + + + + + + + + + <p>This interface performs all the same functions as the {{ID2D1DeviceContext1}} interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Used with <strong>{{ID3D11On12Device::CreateWrappedResource}}</strong> to override flags that would be inferred by the resource properties or heap properties, including bind flags, misc flags, and {{CPU}} access flags. </p> + <p> Use this structure with <strong>CreateWrappedResource</strong>. </p> + + + + <p>Handles the creation, wrapping and releasing of {{D3D11}} resources for Direct3D 11on12.</p> + + + + <p> This method creates {{D3D11}} resources for use with {{D3D}} 11on12. </p> + <p> This method returns one of the Direct3D 12 Return Codes. </p> + + + <dd> <p> A reference to an already-created {{D3D12}} resource or heap. </p> </dd> + + + <dd> <p> A <strong>{{D3D11_RESOURCE_FLAGS}}</strong> structure that enables an application to override flags that would be inferred by the resource/heap properties. The {{D3D11_RESOURCE_FLAGS}} structure contains bind flags, misc flags, and {{CPU}} access flags. </p> </dd> + + + <dd> <p> The use of the resource on input, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The use of the resource on output, as a bitwise-{{OR}}'d combination of <strong>{{D3D12_RESOURCE_STATES}}</strong> enumeration constants. </p> </dd> + + + <dd> <p> The globally unique identifier (<strong>{{GUID}}</strong>) for the wrapped resource interface. The <strong>{{REFIID}}</strong>, or <strong>{{GUID}}</strong>, of the interface to the wrapped resource can be obtained by using the __uuidof() macro. For example, __uuidof(<strong>{{ID3D12Resource}}</strong>) will get the <strong>{{GUID}}</strong> of the interface to a wrapped resource. </p> </dd> + + + <dd> <p> After the method returns, points to the newly created wrapped {{D3D11}} resource or heap. </p> </dd> + + + + + <p> Releases {{D3D11}} resources that were wrapped for {{D3D}} 11on12. </p> + <p> Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until <strong>{{ID3D11On12Device::AcquireWrappedResources}}</strong> is called. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Acquires {{D3D11}} resources for use with {{D3D}} 11on12. Indicates that rendering to the wrapped resources can begin again. </p> + <p> This method marks the resources as "acquired" in hazard tracking. </p><p> Keyed mutex resources cannot be provided to this method; use <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> instead. </p> + <p> This method does not return a value. </p> + + + <dd> <p> Specifies a reference to a set of {{D3D11}} resources, defined by <strong>{{ID3D11Resource}}</strong>. </p> </dd> + + + <dd> <p> Count of the number of resources. </p> </dd> + + + + + <p> Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing {{D3D12}} device to use for {{D3D11}} interop. </p> + <p> The function signature {{PFN_D3D11ON12_CREATE_DEVICE}} is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking. </p> + <p> This method returns one of the Direct3D 12 Return Codes that are documented for <strong>{{D3D11CreateDevice}}</strong>. See Direct3D 12 Return Codes. </p><p> This method returns <strong>{{DXGI_ERROR_SDK_COMPONENT_MISSING}}</strong> if you specify <strong>{{D3D11_CREATE_DEVICE_DEBUG}}</strong> in <em>Flags</em> and the incorrect version of the debug layer is installed on your computer. Install the latest Windows {{SDK}} to get the correct version. </p> + + + <dd> <p> Specifies a pre-existing {{D3D12}} device to use for {{D3D11}} interop. May not be {{NULL}}. </p> </dd> + + + <dd> <p> One or more bitwise {{OR}}'ed flags from <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong>. These are the same flags as those used by <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>. Specifies which runtime layers to enable. <em>Flags</em> must be compatible with device flags, and its <em>NodeMask</em> must be a subset of the <em>NodeMask</em> provided to the present {{API}}. </p> </dd> + + + <dd> <p> An array of any of the following: </p> <ul> <li>{{D3D_FEATURE_LEVEL_12_1}}</li> <li>{{D3D_FEATURE_LEVEL_12_0}}</li> <li>{{D3D_FEATURE_LEVEL_11_1}}</li> <li>{{D3D_FEATURE_LEVEL_11_0}}</li> <li>{{D3D_FEATURE_LEVEL_10_1}}</li> <li>{{D3D_FEATURE_LEVEL_10_0}}</li> <li>{{D3D_FEATURE_LEVEL_9_3}}</li> <li>{{D3D_FEATURE_LEVEL_9_2}}</li> <li>{{D3D_FEATURE_LEVEL_9_1}}</li> </ul> <p> The first feature level which is less than or equal to the {{D3D12}} device's feature level will be used to perform {{D3D11}} validation. Creation will fail if no acceptable feature levels are provided. Providing {{NULL}} will default to the {{D3D12}} device's feature level. </p> </dd> + + + <dd> <p> The size of the feature levels array, in bytes. </p> </dd> + + + <dd> <p> An array of unique queues for {{D3D11On12}} to use. Valid queue types: 3D command queue. </p> </dd> + + + <dd> <p> The size of the command queue array, in bytes. </p> </dd> + + + <dd> <p> Which node of the {{D3D12}} device to use. Only 1 bit may be set. </p> </dd> + + + <dd> <p> Pointer to the returned <strong>{{ID3D11Device}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned <strong>{{ID3D11DeviceContext}}</strong>. May be {{NULL}}. </p> </dd> + + + <dd> <p> A reference to the returned feature level. May be {{NULL}}. </p> </dd> + + + + + <p>Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition.</p> + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once. </p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle (<strong>{{HWND}}</strong>).</p> + <p>A Microsoft DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns <strong>{{DCOMPOSITION_ERROR_ACCESS_DENIED}}</strong>. </p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context (<strong>{{HDC}}</strong>) returned by the <strong>GetDC</strong> function, or by calls to Microsoft DirectX <strong>Present</strong> methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The <em>topmost</em> parameter determines whether child windows clip the visual tree. </p><p> Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window's visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDComposition::VirtualSurfaceTrim}}</strong> method. </p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>This method enables an application to use a shared composition surface in a composition tree. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the <em>surface</em> reference in calls to the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. +</p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the <strong>{{DWMWA_CLOAK}}</strong> flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. For more information, see How to animate the bitmap of a layered child window and DirectComposition layered child window sample.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying <strong>{{WS_EX_LAYERED}}</strong> when creating the window with the <strong>CreateWindowEx</strong> function or by setting <strong>{{WS_EX_LAYERED}}</strong> via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of ?{{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Determines whether the DirectComposition device object is still valid.</p> + <p> If the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) device is lost, the DirectComposition device associated with the {{DXGI}} device is also lost. When it detects a lost device, DirectComposition sends the <strong>{{WM_PAINT}}</strong> message to all windows that are composing DirectComposition content using the lost device. An application should call <strong>CheckDeviceState</strong> in response to each <strong>{{WM_PAINT}}</strong> message to ensure that the DirectComposition device object is still valid. The application must take steps to recover content if the device object becomes invalid. Steps include creating new {{DXGI}} and DirectComposition devices, and recreating all content. (It?s not possible to create just a new {{DXGI}} device and associate it with the existing DirectComposition device.) The system ensures that the device object remains valid between <strong>{{WM_PAINT}}</strong> messages. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>{{TRUE}} if the DirectComposition device object is still valid; otherwise {{FALSE}}.</p> </dd> + + + + + <p>Represents a binding between a Microsoft DirectComposition visual tree and a destination on top of which the visual tree should be composed. </p> + + + + <p>Sets a visual object as the new root object of a visual tree.</p> + <p>A visual can be either the root of a single visual tree, or a child of another visual, but it cannot be both at the same time. This method fails if the <em>visual</em> parameter is already the root of another visual tree, or is a child of another visual.</p><p>If <em>visual</em> is {{NULL}}, the visual tree is empty. If there was a previous non-{{NULL}} root visual, that visual becomes available for use as the root of another visual tree, or as a child of another visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The visual object that is the new root of this visual tree. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a Microsoft DirectComposition visual. </p> + + + + <p>Changes the value of the OffsetX property of this visual. The OffsetX property specifies the new offset of the visual along the x-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetX property of a visual transforms the coordinate system of the entire visual subtree that is rooted at that visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetX property. In other words, the effect of setting the Transform property and the OffsetX property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetX value as <em>offsetX</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetX}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetX property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the x-axis, in pixels.</p> </dd> + + + + + <p>Changes the value of the OffsetY property of this visual. The OffsetY property specifies the new offset of the visual along the y-axis, relative to the parent visual.</p> + <p>This method fails if the <em>offsetY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>Changing the OffsetY property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>A transformation that is specified by the Transform property is applied after the OffsetY property. In other words, the effect of setting the Transform property and the OffsetY property is the same as setting only the Transform property on a transform group object where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has the same OffsetY value as <em>offsetY</em>. However, you should use <strong>{{IDCompositionVisual::SetOffsetY}}</strong> whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p><p>If the OffsetY property was previously animated, this method removes the animation and sets the property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new offset of the visual along the y-axis, in pixels.</p> </dd> + + + + + Sets the Transform property of this visual. The Transform property specifies a 2D transform used to modify the coordinate system of this visual. The property can specify either a 3-by-2 transform matrix or a transform object. + + + + <p>Sets the TransformParent property of this visual. The TransformParent property establishes the coordinate system relative to which this visual is composed.</p> + <p>The coordinate system of a visual is modified by the OffsetX, OffsetY, and Transform properties. Normally, these properties define the coordinate system of a visual relative to its immediate parent. This method specifies the visual relative to which the coordinate system for this visual is based. The specified visual must be an ancestor of the current visual. If it is not an ancestor, the coordinate system is based on this visual's immediate parent, just as if the TransformParent property were set to {{NULL}}. Because visuals can be reparented, this property can take effect again if the specified visual becomes an ancestor of the target visual through a reparenting operation. </p><p>If the <em>visual</em> parameter is {{NULL}}, the coordinate system is always transformed relative to the visual's immediate parent. This is the default behavior if this method is not used. </p><p>This method fails if the <em>visual</em> parameter is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual that establishes the base coordinate system for this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the Effect property of this visual. The Effect property modifies how the subtree that is rooted at this visual is blended with the background, and can apply a 3D perspective transform to the visual. </p> + <p>This method creates an implicit off-screen surface to which the subtree that is rooted at this visual is composed. The surface is used as one of the inputs to the specified effect. The output of the effect is composed directly to the composition target. Some effects also use the composition target as another implicit input. This is typically the case for compositional or blend effects such as opacity, where the composition target is considered to be the "background." In that case, any visuals that are "behind" the current visual are included in the composition target when the current visual is rendered and are considered to be the "background" that this visual composes to. </p><p>If this visual is not the root of a visual tree and one of its ancestors also has an effect applied to it, the off-screen surface created by the closest ancestor is the composition target to which this visual's effect is composed. Otherwise, the composition target is the root composition target. As a consequence, the background for compositional and blend effects includes only the visuals up to the closest ancestor that itself has an effect. Conversely, any effects applied to visuals under the current visual use the newly created off-screen surface as the background, which may affect how those visuals ultimately compose on top of what the end user perceives as being "behind" those visuals. </p><p>If the <em>effect</em> parameter is {{NULL}}, no bitmap effect is applied to this visual. Any previous effects that were associated with this visual are removed. The off-screen surface is also removed and the visual subtree is composed directly to the parent composition target, which may also affect how compositional or blend effects under this visual are rendered. </p><p>This method fails if <em>effect</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to an effect object. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Sets the BitmapInterpolationMode property, which specifies the mode for Microsoft DirectComposition to use when interpolating pixels from bitmaps that are not axis-aligned or drawn exactly at scale. </p> + <p>The interpolation mode affects how a bitmap is composed when it is transformed such that there is no one-to-one correspondence between pixels in the bitmap and pixels on the screen. </p><p>By default, a visual inherits the interpolation mode of the parent visual, which may inherit the interpolation mode of its parent visual, and so on. A visual uses the default interpolation mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If no visuals set the interpolation mode, the default for the entire visual tree is nearest neighbor interpolation, which offers the lowest visual quality but the highest performance. </p><p>If the <em>interpolationMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, this visual's bitmap is composed with the specified interpolation mode, and this mode becomes the new default mode for the children of this visual. That is, if the interpolation mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>, the bitmaps of the child visuals are composed using the interpolation mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The interpolation mode to use.</p> </dd> + + + + + <p>Sets the BorderMode property, which specifies how to compose the edges of bitmaps and clips associated with this visual, or with visuals in the subtree rooted at this visual.</p> + <p>The border mode affects how the edges of a bitmap are composed when the bitmap is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. It also affects how content is clipped at the corners of a clip that has rounded corners, and at the edge of a clip that is transformed such that the edges are not exactly axis-aligned and at precise pixel boundaries. </p><p>By default, a visual inherits the border mode of its parent visual, which may inherit the border mode of its parent visual, and so on. A visual uses the default border mode if this method is never called for the visual, or if this method is called with <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>. If no visuals set the border mode, the default for the entire visual tree is aliased rendering, which offers the lowest visual quality but the highest performance. </p><p>If the <em>borderMode</em> parameter is anything other than <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, this visual's bitmap and clip are composed with the specified border mode. In addition, this border mode becomes the new default for the children of the current visual. That is, if the border mode of this visual's children is unchanged or explicitly set to <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, the bitmaps and clips of the child visuals are composed using the border mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The border mode to use.</p> </dd> + + + + + Sets the Clip property of this visual to the specified rectangular region or clip object. The Clip property restricts the rendering of the visual subtree that is rooted at this visual to a rectangular region. + + + + <p>Sets the Content property of this visual to the specified bitmap or window wrapper.</p> + <p> The <em>content</em> parameter must point to one of the following:</p><ul> <li>An object that implements the <strong>{{IDCompositionSurface}}</strong> interface.</li> <li>An object that implements the <strong>{{IDXGISwapChain1}}</strong> interface.</li> <li>A wrapper object that is returned by the <strong>CreateSurfaceFromHandle</strong> or <strong>CreateSurfaceFromHwnd</strong> method. +</li> </ul><p>The new content replaces any content that was previously associated with the visual. If the <em>content</em> parameter is {{NULL}}, the visual has no associated content.</p><p>A visual can be associated with a bitmap object or a window wrapper. A bitmap is either a Microsoft DirectX swap chain or a Microsoft DirectComposition surface.</p><p>A window wrapper is created with the <strong>CreateSurfaceFromHwnd</strong> method and is a stand-in for the rasterization of another window, which must be a top-level window or a layered child window. A window wrapper is conceptually equivalent to a bitmap that is the size of the target window on which the contents of the window are drawn. The contents include the target window's child windows (layered or otherwise), and any DirectComposition content that is drawn in the child windows. </p><p>A DirectComposition surface wrapper is created with the <strong>CreateSurfaceFromHandle</strong> method and is a reference to a swap chain. An application might use a surface wrapper in a cross-process scenario where one process creates the swap chain and another process associates the bitmap with a visual.</p><p>The bitmap is always drawn at position (0,0) relative to the visual's coordinate system, although the coordinate system is directly affected by the OffsetX, OffsetY, and Transform properties, as well as indirectly by the transformations on ancestor visuals. The bitmap of a visual is always drawn behind the children of that visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The object that is the new content of this visual. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Adds a new child visual to the children list of this visual.</p> + <p>Child visuals are arranged in an ordered list. The contents of a child visual are drawn in front of (or above) the contents of its parent visual, but behind (or below) the contents of its children.</p><p>The <em>referenceVisual</em> parameter must be an existing child of the parent visual, or it must be {{NULL}}. The <em>insertAbove</em> parameter indicates whether the new child should be rendered immediately above the reference visual in the Z order, or immediately below it.</p><p>If the <em>referenceVisual</em> parameter is {{NULL}}, the specified visual is rendered above or below all children of the parent visual, depending on the value of the <em>insertAbove</em> parameter. If <em>insertAbove</em> is {{TRUE}}, the new child visual is above no sibling, therefore it is rendered below all of its siblings. Conversely, if <em>insertAbove</em> is {{FALSE}}, the visual is below no sibling, therefore it is rendered above all of its siblings.</p><p>The visual specified by the <em>visual</em> parameter cannot be either a child of a single other visual, or the root of a visual tree that is associated with a composition target. If <em>visual</em> is already a child of another visual, <strong>AddVisual</strong> fails. The child visual must be removed from the children list of its previous parent before adding it to the children list of the new parent. If <em>visual</em> is the root of a visual tree, the visual must be dissociated from that visual tree before adding it to the children list of the new parent. To dissociate the visual from a visual tree, call the <strong>{{IDCompositionTarget::SetRoot}}</strong> method and specify either a different visual or {{NULL}} as the <em>visual</em> parameter.</p><p>A child visual need not have been created by the same <strong>{{IDCompositionDevice}}</strong> interface as its parent. When visuals from different devices are combined in the same visual tree, Microsoft DirectComposition composes the tree as it normally would, except that changes to a particular visual take effect only when <strong>{{IDCompositionDevice::Commit}}</strong> is called on the device object that created the visual. The ability to combine visuals from different devices enables multiple threads to create and manipulate a single visual tree while maintaining independent devices that can be used to commit changes asynchronously</p><p>This method fails if <em>visual</em> or <em>referenceVisual</em> is an invalid reference, or if the visual referenced by the <em>referenceVisual</em> parameter is not a child of the parent visual. These interfaces cannot be custom implementations; only interfaces created by DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to add. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} to place the new child visual in front of the visual specified by the <em>referenceVisual</em> parameter, or {{FALSE}} to place it behind <em>referenceVisual</em>.</p> </dd> + + + <dd> <p>The existing child visual next to which the new visual should be added.</p> </dd> + + + + + <p>Removes a child visual from the children list of this visual.</p> + <p>The child visual is removed from the list of children. The order of the remaining child visuals is not changed.</p><p>This method fails if <em>visual</em> is not a child of the parent visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The child visual to remove from the children list. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Removes all visuals from the children list of this visual.</p> + <p>This method can be called even if this visual has no children. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the blending mode for this visual.</p> + <p>The composite mode determines how visual's bitmap is blended with the screen. By default, the visual is blended with "source over" semantics; that is, the colors are blended with per-pixel transparency.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The blending mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Represents a 2D transformation that can be used to modify the coordinate space of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform}}</strong> interface is an abstract interface that represents a 2D affine transformation. Transformations affect the entire visual subtree that is rooted at the visual that the transform is associated with. A transform object can be associated with multiple visuals. When a transform object is modified, all affected visuals are recomposed to reflect the change.</p><p>Transforms operate by modifying the coordinate system for all rendering operations on a visual. For example, ordinarily a bitmap that is associated with a visual draws at position (0,0) and extends the full width and height of the bitmap. If a translation transform is applied, the bitmap draws at a position that is offset by that transform. If a scale transform is applied, the extent covered by the bitmap is affected by the scale transform. More than one transform can be simultaneously applied to a visual by using the <strong>{{IDCompositionDevice::CreateTransformGroup}}</strong> interface.</p> + + + + <p>Represents a 3D transformation effect that can be used to modify the rasterization of a visual subtree. </p> + <p>The <strong>{{IDCompositionTransform3D}}</strong> interface is an abstract interface that represents a 3D perspective transformation effect. A 3D transform object can be associated with multiple visuals and multiple effect groups. When a 3D transform object is modified, all affected visuals are recomposed to reflect the change.</p> + + + + <p>Represents a 2D transformation that affects only the offset of a visual along the x-axis and y-axis.</p> + <p>A translation transform represents the following 3-by-2 matrix:</p><p></p><p>The effect is simply to offset the coordinate system by <em>x</em> and <em>y</em>.</p> + + + + <p>Changes the value of the OffsetX property of a 2D translation transform. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method perfoms an affine transformation, which moves every point by a fixed distance in the same direction. It is similar to shifting the origin of the coordinate space. </p><p>This method fails if the <em>offsetX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the OffsetX property was previously animated, this method removes the animation and sets the OffsetX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The distance to translate along the x-axis, in pixels.</p> </dd> + + + + + Changes or animates the value of the OffsetY property of a 2D translation transform. The OffsetY property specifies the translation along the y-axis. + + + + <p>Represents a 3D transformation that affects the offset of a visual along the x-axis, y-axis, and z-axis. </p> + <p>A 3D translation transform represents the following 4-by-4 matrix: </p><p></p><p> The effect is to offset the blending position of the visual's subtree by <em>x</em>, <em>y</em>, and <em>z</em>.</p> + + + + <p>Animates the value of the OffsetX property of a 3D translation transform effect. The OffsetX property specifies the distance to translate along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetX property unless this method is called again. If the OffsetX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetY property of a 3D translation transform effect. The OffsetY property specifies the distance to translate along the y-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetY property unless this method is called again. If the OffsetY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the OffsetZ property of a 3D translation transform effect. The OffsetZ property specifies the distance to translate along the z-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the OffsetZ property unless this method is called again. If the OffsetZ property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the OffsetZ property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Animates the value of the ScaleX property of a 2D scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 2D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the ScaleZ property of a scale transform. The ScaleZ property specifies the scale factor along the z-axis. + + + + <p>Animates the value of the ScaleX property of a scale transform. The ScaleX property specifies the scale factor along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the ScaleX property unless this method is called again. If the ScaleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the ScaleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the ScaleY property of a 3D scale transform. The ScaleY property specifies the scale factor along the y-axis.</p> + <p>This method fails if the <em>scaleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleY property was previously animated, this method removes the animation and sets the ScaleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the ScaleZ property of a 3D scale transform. The ScaleZ property specifies the scale factor along the z-axis.</p> + <p>This method fails if the <em>scaleZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the ScaleZ property was previously animated, this method removes the animation and sets the ScaleZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-axis scale factor.</p> </dd> + + + + + <p>Changes the value of the CenterX property of a 3D scale transform. The CenterX property specifies the x-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterX property was previously animated, this method removes the animation and sets the CenterX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new x-coordinate of the center point.</p> </dd> + + + + + Changes or animates the value of the CenterY property of a 3D scale transform. The CenterY property specifies the y-coordinate of the point about which scaling is performed. + + + + <p>Changes the value of the CenterZ property of a 3D scale transform. The CenterZ property specifies the z-coordinate of the point about which scaling is performed. </p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Represents a 2D transformation that affects the rotation of a visual around the z-axis. The coordinate system is rotated around the specified center point. </p> + <p>A rotate transform represents the following 3-by-3 matrix:</p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise, and to apply the corresponding translation such that the center point does not move.</p> + + + + <p>Animates the value of the Angle property of a 2D rotation transform. The Angle property specifies the rotation angle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the CenterY property of a 2D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a 3D transformation that affects the rotation of a visual along an arbitrary axis in 3D space. The coordinate system is rotated around the specified center point. </p> + <p>A 3D rotate transform represents the following 4-by-4 matrix:</p><p></p><p>where the <em>offsetX</em>, <em>offsetY</em>, and <em>offsetZ</em> values of the matrix are the following: </p><p></p><p>The effect is to rotate the coordinate system clockwise or counter-clockwise around the specified axis, and to apply the corresponding translation such that the center point does not move.</p><p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p><p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p> + + + + <p>Animates the value of the Angle property of a 3D rotation transform. The Angle property specifies the rotation angle. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Angle property unless this method is called again. If the Angle property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected 3D transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Angle property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + Changes or animates the value of the AxisX property of a 3D rotation transform. The AxisX property specifies the x-coordinate for the axis vector of rotation. The default value is zero. + + + + <p>Changes the value of the AxisY property of a 3D rotation transform. The AxisY property specifies the y-coordinate for the axis vector of rotation. The default value is zero.</p> + <p>When setting the axis to a non-default value, you should always set all three axis properties (AxisX, AxisY, and AxisZ).</p><p>This method fails if the <em>axisY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AxisY property was previously animated, this method removes the animation and sets the AxisY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate for the axis vector of rotation. </p> </dd> + + + + + Changes or animates the value of the AxisZ property of a 3D rotation transform. The AxisZ property specifies the z-coordinate for the axis vector of rotation. The default value is 1.0. + + + + Changes or animates the value of the CenterX property of a 3D rotation transform. The CenterX property specifies the x-coordinate of the point about which the rotation is performed. The default value is zero. + + + + <p>Animates the value of the CenterY property of a 3D rotation transform. The CenterY property specifies the y-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterY property unless this method is called again. If the CenterY property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterY property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterZ property of a 3D rotation transform. The CenterZ property specifies the z-coordinate of the point about which the rotation is performed. The default value is zero.</p> + <p>This method fails if the <em>centerZ</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterZ property was previously animated, this method removes the animation and sets the CenterZ property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new z-coordinate of the center point.</p> </dd> + + + + + <p>Animates the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the AngleX property unless this method is called again. If the AngleX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that represents how the value of the AngleX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the AngleX property of a 2D skew transform. The AngleX property specifies the skew angle along the x-axis.</p> + <p>This method fails if the <em>angleX</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleX property was previously animated, this method removes the animation and sets the AngleX property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the x-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Changes the value of the AngleY property of a 2D skew transform. The AngleY property specifies the skew angle along the y-axis.</p> + <p>This method fails if the <em>angleY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the AngleY property was previously animated, this method removes the animation and sets the AngleY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new skew angle of the y-axis, in degrees. A positive value creates a counterclockwise skew, and a negative value creates a clockwise skew. For values less than ?360 or greater than 360, the values wrap around and are treated as if the mathematical operation mod(360) was applied.</p> </dd> + + + + + <p>Animates the value of the CenterX property of a 2D skew transform. The CenterX property specifies the x-coordinate of the point about which the skew is performed.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the CenterX property unless this method is called again. If the CenterX property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the CenterX property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the CenterY property of a 2D skew transform. The CenterY property specifies the y-coordinate of the point about which the skew is performed.</p> + <p>This method fails if the <em>centerY</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the CenterY property was previously animated, this method removes the animation and sets the CenterY property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new y-coordinate of the center point.</p> </dd> + + + + + <p>Represents an arbitrary affine 2D transformation defined by a 3-by-2 matrix.</p><p></p> + + + + <p>Changes all values of the matrix of this 2D transform.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 2D transform.</p> </dd> + + + + + <p>Animates the value of one element of the matrix of this 2D transform.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the element unless this method is called again. If the element was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected transform. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 2, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 1, inclusive.</p> </dd> + + + <dd> <p>An animation that represents how the value of the specified element changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents an arbitrary 3D transformation defined by a 4-by-4 matrix.</p><p></p> + <p>A 3D matrix transform represents the following 4-by-4 matrix:</p><p></p><p> The application can set any of the values in the first three columns. Note that the fourth column is padded to allow for matrix concatenation. </p> + + + + <p>Changes all values of the matrix of this 3D transformation effect.</p> + <p>This method fails if any of the matrix values are NaN, positive infinity, or negative infinity.</p><p>If any of the matrix elements were previously animated, this method removes the animations and sets the elements to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix for this 3D transformation effect.</p> </dd> + + + + + <p>Changes the value of one element of the matrix of this 3D transform.</p> + <p>This method fails if the <em>value</em> parameter is NaN, positive infinity, or negative infinity.</p><p>If the specified element was previously animated, this method removes the animation and sets the element to the specified static value.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The row index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The column index of the element to change. This value must be between 0 and 3, inclusive.</p> </dd> + + + <dd> <p>The new value of the specified element.</p> </dd> + + + + + <p>Represents a bitmap effect that modifies the rasterization of a visual's subtree. </p> + <p><strong>{{IDCompositionEffect}}</strong> is an abstract interface that represents a bitmap effect. An effect applies to the entire visual subtree rooted at the visual that the effect is associated with. An effect object can be associated with multiple visuals. When an effect object is modified, all affected visuals are recomposed to reflect the change. </p><p>More than one effect can be simultaneously applied to a visual by using the <strong>{{IDCompositionEffectGroup}}</strong> interface.</p> + + + + <p>Represents a group of bitmap effects that are applied together to modify the rasterization of a visual's subtree. </p> + + + + <p>Changes the value of the Opacity property.</p> + <p>The opacity is interpreted as completely transparent for all values less than or equal to 0, and as completely opaque for all values greater than or equal to 1. All values between 0 and 1 represent partial opacity. </p><p>This method fails if the <em>opacity</em> parameter is NaN, positive infinity, or negative infinity. </p><p>If the Opacity property was previously animated, this method removes the animation and sets the Opacity property to the specified static value. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new value of the Opacity property.</p> </dd> + + + + + <p>Sets the 3D transformation effect object that modifies the rasterization of the visuals that this effect group is applied to.</p> + <p>This method fails if <em>transform3D</em> is an invalid reference, or if the reference was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as this effect group. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. </p><p>If the <em>transform3D</em> parameter is {{NULL}}, the effect group does not apply any perspective transformations to the visuals. Setting the transform to {{NULL}} is equivalent to setting the transform to an <strong>{{IDCompositionMatrixTransform3D}}</strong> object where the specified matrix is the identity matrix. However, an application should use a {{NULL}} transform whenever possible because it is slightly faster. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>Pointer to an <strong>{{IDCompositionTransform3D}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Represents a clip object that is used to restrict the rendering of a visual subtree to a rectangular area. </p> + + + + <p>Represents a clip object that restricts the rendering of a visual subtree to the specified rectangular region. Optionally, the clip object may have rounded corners specified.</p> + + + + <p>Animates the value of the Left property of a clip rectangle. The Left property specifies the x-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Left property unless this method is called again. If the Left property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Left property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Top property of a clip rectangle. The Top property specifies the y-coordinate of the upper-left corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Top property unless this method is called again. If the Top property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Top property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Animates the value of the Right property of a clip rectangle. The Right property specifies the x-coordinate of the lower-right corner of the clip rectangle.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the Right property unless this method is called again. If the Right property was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the Right property changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the Bottom property of a clip object. The Bottom property specifies the y-coordinate of the lower-right corner of the clip rectangle. </p> + <p> This method fails if the <em>bottom</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the Bottom property was previously animated, this method removes the animation and sets the Bottom property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the Bottom property, in pixels. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusX property of this clip. The TopLeftRadiusX property specifies the x radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the x radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Changes the value of the TopLeftRadiusY property of this clip. The TopLeftRadiusY property specifies the y radius of the ellipse that rounds the top-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the TopRightRadiusX property of this clip. The TopRightRadiusX property specifies the x radius of the ellipse that rounds the top-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the TopRightRadiusY property of this clip. The TopRightRadiusY property specifies the y radius of the ellipse that rounds the top-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + Changes or animates the value of the BottomLeftRadiusX property of this clip. The BottomLeftRadiusX property specifies the x radius of the ellipse that rounds the lower-left corner of the clip. + + + + <p>Changes the value of the BottomLeftRadiusY property of this clip. The BottomLeftRadiusY property specifies the y radius of the ellipse that rounds the lower-left corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Animates the value of the BottomRightRadiusX property of this clip. The BottomRightRadiusX property specifies the x radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p>This method makes a copy of the specified animation. If the object referenced by the <em>animation</em> parameter is changed after calling this method, the change does not affect the x radius unless this method is called again. If the x radius was previously animated, calling this method replaces the previous animation with the new animation. </p><p>This method fails if <em>animation</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface as the affected visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An animation object that determines how the value of the x radius changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the BottomRightRadiusY property of this clip. The BottomRightRadiusY property specifies the y radius of the ellipse that rounds the lower-right corner of the clip.</p> + <p> This method fails if the <em>radius</em> parameter is NaN, positive infinity, or negative infinity. </p><p> If the <em>radius</em> property was previously animated, this method removes the animation and sets the <em>radius</em> property to the specified static value. </p> + <p> If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The new value of the y radius. This parameter has a numerical limit of -2^21 to 2^21. The {{API}} accepts numbers outside of this range, but they are always clamped to this range.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Initiates drawing on this Microsoft DirectComposition surface object. The update rectangle must be within the boundaries of the surface; otherwise, this method fails. </p> + <p>This method enables an application to incrementally update the contents of a DirectComposition surface object. The application must use the following sequence: </p><ol> <li>Call <strong>BeginDraw</strong> to initiate the incremental update.</li> <li>Use the retrieved surface as a render target and draw the updated contents at the retrieved offset.</li> <li>Call the <strong>{{IDCompositionSurface::EndDraw}}</strong> method to finish the update.</li> </ol><p>The update object returned by this method is either a Direct2D device context or a {{DXGI}} surface, depending on the value of the <em>iid</em> parameter and on how the DirectComposition surface object was created. If the <em>iid</em> parameter is __uuidof({{ID2D1DeviceContext}}), then the returned object is a Direct2D device context that already has the DirectComposition surface selected as a render target. Otherwise, it is a {{DXGI}} surface which the application may use as a render target. In either case, the returned object is associated with the Direct2D or {{DXGI}} device passed by the application to the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method. </p><p>The <em>iid</em> parameter may only be __uuidof({{ID2D1DeviceContext}}) if the DirectComposition surface object was created from a DirectComposition device or surface factory that was, itself, created with an associated Direct2D device. In particular, the application must have called either the {{DCompositionCreateDevice2}} function or the <strong>{{IDCompositionDevice2::CreateSurfaceFactory}}</strong> method with a Direct2D device as the <em>renderingDevice</em> parameter. If the DirectComposition surface was created via a surface factory that was not associated with a Direct2D device, or if it was created directly via the {{IDCompositionDevice2}} interface and the device was not directly associated with a Direct2D device, then passing __uuidof({{ID2D1DeviceContext}}) as the iid parameter causes this method to return {{E_INVALIDARG}}. </p><p>If the application successfully retrieves a Direct2D device context as the update object, then the application should not call either the {{ID2D1DeviceContext::BeginDraw}} or {{ID2D1DeviceContext::EndDraw}} methods on the returned Direct2D device context. +</p><p>The retrieved offset is not necessarily the same as the top-left corner of the requested update rectangle. The application must transform its rendering primitives to draw within a rectangle of the same width and height as the input rectangle, but at the given offset. The application should not draw outside of this rectangle. </p><p>If the <em>updateRectangle</em> parameter is {{NULL}}, the entire surface is updated. In that case, because the retrieved offset still might not be (0,0), the application still needs to transform its rendering primitives accordingly. </p><p>If the surface is not a virtual surface, then the first time the application calls this method for a particular non-virtual surface, the update rectangle must cover the entire surface, either by specifying the full surface in the requested update rectangle, or by specifying {{NULL}} as the <em>updateRectangle</em> parameter. For virtual surfaces, the first call may be any sub-rectangle of the surface. </p><p>Because each call to this method might retrieve a different object in the <em>updateObject</em> surface, the application should not cache the retrieved surface reference. The application should release the retrieved reference as soon as it finishes drawing. </p><p>The retrieved surface rectangle does not contain the previous contents of the bitmap. The application must update every pixel in the update rectangle, either by first clearing the render target, or by issuing enough rendering primitives to fully cover the update rectangle. Because the initial contents of the update surface are undefined, failing to update every pixel leads to undefined behavior. </p><p>Only one DirectComposition surface can be updated at a time. An application must suspend drawing on one surface before beginning or resuming to draw on another surface. If the application calls <strong>BeginDraw</strong> twice, either for the same surface or for another surface belonging to the same DirectComposition device, without an intervening call to <strong>{{IDCompositionSurface::EndDraw}}</strong>, the second call fails. If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> without calling <strong>EndDraw</strong>, the update remains pending. The update takes effect only after the application calls <strong>EndDraw</strong> and then calls the <strong>{{IDCompositionDevice2::Commit}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. </p> + + + <dd> <p>The rectangle to be updated. If this parameter is {{NULL}}, the entire bitmap is updated.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives an interface reference of the type specified in the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> <strong>Note</strong>??In Windows?8, this parameter was <em>surface</em>. ? </dd> + + + <dd> <p>The offset into the surface where the application should draw updated content. This offset will reference the upper left corner of the update rectangle.</p> </dd> + + + + + <p>Marks the end of drawing on this Microsoft DirectComposition surface object.</p> + <p>This method completes an update that was begun by a previous call to the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. After this method returns, the application can start another update on the same surface object or on a different one. </p><p>If the application calls <strong>{{IDCompositionDevice2::Commit}}</strong> before calling <strong>{{IDCompositionSurface::EndDraw}}</strong> for a surface with a pending update, that update is not processed by that Commit call. The update only takes effect on screen after the application calls <strong>{{IDCompositionSurface::EndDraw}}</strong> followed by the {{IDCompositionDevice2::Commit}} method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Suspends the drawing on this Microsoft DirectComposition surface object.</p> + <p>Because only one surface can be open for drawing at a time, calling <strong>SuspendDraw</strong> allows the user to call <strong>{{IDCompositionSurface::BeginDraw}}</strong> on a different surface. Drawing to this surface can be resumed by calling <strong>{{IDCompositionSurface::ResumeDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Resumes drawing on this Microsoft DirectComposition surface object.</p> + <p> This method allows the surface update to continue unless there are other surfaces that have active, unsuspended draws.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code, which can include {{DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED}} and {{DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED}}. </p> + + + + <p>Scrolls a rectangular area of a Microsoft DirectComposition logical surface.</p> + <p>This method allows an application to blt/copy a sub-rectangle of a DirectComposition surface object. This avoids re-rendering content that is already available. </p><p>The <em>scrollRect</em> rectangle must be contained in the boundaries of the surface. If the <em>scrollRect</em> rectangle goes outside the bounds of the surface, this method fails. </p><p>The bits copied by the scroll operation (source) are defined by the intersection of the <em>scrollRect</em> and <em>clipRect</em> rectangles. </p><p>The bits shown on the screen (destination) are defined by the intersection of the offset source rectangle and <em>clipRect</em>. </p><p>Scroll operations can only be called before calling <strong>BeginDraw</strong> or after calling <strong>EndDraw</strong>. Suspended or resumed surfaces are not candidates for scrolling because they are still being updated. </p><p>The application is responsible for ensuring that the scrollable area for an <strong>{{IDCompositionVirtualSurface}}</strong> is limited to valid pixels. The behavior for invalid pixels in the <em>scrollRect</em> is undefined. </p><p>Virtual surface sub-rectangular areas that were discarded by a trim or a resize operation can't be scrolled even if the trim or resize is applied in the same batch. <strong>Trim</strong> and <strong>Resize</strong> are applied immediately. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The rectangular area of the surface to be scrolled, relative to the upper-left corner of the surface. If this parameter is {{NULL}}, the entire surface is scrolled.</p> </dd> + + + <dd> <p>The <em>clipRect</em> clips the destination (<em>scrollRect</em> after offset) of the scroll. +The only bitmap content that will be scrolled are those that remain inside the clip rectangle after the scroll is completed.</p> </dd> + + + <dd> <p>The amount of horizontal scrolling, in pixels. Use positive values to scroll right, and negative values to scroll left.</p> </dd> + + + <dd> <p>The amount of vertical scrolling, in pixels. Use positive values to scroll down, and negative values to scroll up.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Changes the logical size of this virtual surface object.</p> + <p>When a virtual surface is resized, its contents are preserved up to the new boundaries of the surface. If the surface is made smaller, any previously allocated pixels that fall outside of the new width or height are discarded.</p><p>This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p><p>This method fails if <em>width</em> or <em>height</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new width of the virtual surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The new height of the virtual surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + + + <p>Discards pixels that fall outside of the specified trim rectangles.</p> + <p>A virtual surface might not have enough storage for every pixel in the surface. An application instructs the composition engine to allocate memory for the surface by calling the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method, and to release memory for the surface by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method. The array of rectangles represents the regions of the virtual surface that should remain allocated after this method returns. Any pixels that are outside the specified set of rectangles are no longer used for texturing, and their memory may be reclaimed. </p><p>If the <em>count</em> parameter is zero, no pixels are kept, and all of the memory allocated for the virtual surface may be reclaimed. The <em>rectangles</em> parameter can be {{NULL}} only if the <em>count</em> parameter is zero. This method fails if <strong>{{IDCompositionSurface::BeginDraw}}</strong> was called for this bitmap without a corresponding call to <strong>{{IDCompositionSurface::EndDraw}}</strong>.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of rectangles to keep.</p> </dd> + + + <dd> <p>The number of rectangles in the <em>rectangles</em> array.</p> </dd> + + + + + <p>Represents a filter effect.</p><p>{{IDCompositionFilterEffect}} exposes a subset of Direct2D's image effects through Direction Composition for use in {{CSS}} filters in the browser platform.</p> + + + + <p>Sets the the input at an index to the specified filter effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the index the to apply the filter effect at.</p> </dd> + + + <dd> <p>The filter effect to apply. The following effects are available: </p> <ul> <li> <strong>{{IDCompositionAffineTransform2DEffect}}</strong> </li> <li> <strong>{{IDCompositionArithmeticCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionBlendEffect}}</strong> </li> <li> <strong>{{IDCompositionBrightnessEffect}}</strong> </li> <li> <strong>{{IDCompositionColorNatrixEffect}}</strong> </li> <li> <strong>{{IDCompositionCompositeEffect}}</strong> </li> <li> <strong>{{IDCompositionFloodEffect}}</strong> </li> <li> <strong>{{IDCompositionGaussianBlurEffect}}</strong> </li> <li> <strong>{{IDCompositionHueRotationEffect}}</strong> </li> <li> <strong>{{IDCompositionLinearTransferRffect}}</strong> </li> <li> <strong>{{IDCompositionSaturationRffect}}</strong> </li> <li> <strong>{{IDCompositionShadowEffect}}</strong> </li> <li> <strong>{{IDCompositionTableTransferEffect}}</strong> </li> <li> <strong>{{IDCompositionTurbulenceEffect}}</strong> </li> </ul> </dd> + + + <dd> <p>Flags to apply to the filter effect. </p> </dd> + + + + + <p></p> + + + + <p>Sets the amount of blur to be applied to the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. A value of zero {{DIPs}} disables this effect entirely. </p> </dd> + + + + + <p>Sets the mode used to calculate the border of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode used to calculate the border of the image.</p> </dd> + + + + + <p>The brightness effect controls the brightness of the image.</p> + + + + <p>Sets the upper portion of the brightness transfer curve. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The upper portion of the brightness transfer curve. The white point adjusts the appearance of the brighter portions of the image. +This vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Specifies the lower portion of the brightness transfer curve for the brightness effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The lower portion of the brightness transfer curve. The black point adjusts the appearance of the darker portions of the image. The vector is for both the x value and the y value, in that order. Each of the values must be between 0 and 1, inclusive.</p> </dd> + + + + + <p>Sets the x value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the white point. This value must be between 0 and 1.</p> </dd> + + + + + <p>Sets the y value of the white point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the white point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the x value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The x value of the black point.</p> </dd> + + + + + <p>Sets the y value of the black point.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the y value of the black point changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p>Sets the matrix used by the effect to multiply the {{RGBA}} values of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The matrix used by the effect to multiply the {{RGBA}} values of the image. The matrix is column major and is applied as shown in the following equation: </p></dd> + + + + + <p>Sets an element of the color matrix.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>An animation that represents how the element value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the alpha mode of the output for the color matrix effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The alpha mode of the output for the color matrix effect.</p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether the effect clamps color values to between 0 and 1 before the effects passes the values to the next effect in the chain.</p> </dd> + + + + + <p> The shadow effect is used to generate a shadow from the alpha channel of an image. The shadow is more opaque for higher alpha values and more transparent for lower alpha values. You can set the amount of blur and the color of the shadow. </p> + + + + <p>Sets the amount of blur to be applied to the alpha channel of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The amount of blur to be applied to the alpha channel of the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are {{DIPs}}. </p> </dd> + + + + + <p>Sets color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The color of the shadow.</p> </dd> + + + + + <p>Sets the red value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the red value for the color of the shadow changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the green value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The green value for the color of the shadow.</p> </dd> + + + + + <p>Sets the blue value for the color of the shadow.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blue value for the color of the shadow.</p> </dd> + + + + + <p>Sets the alpha value for the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the alpha value for the effect changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The hue rotate effect alters the hue of an image by applying a color matrix based on the rotation angle. </p> + + + + <p>Sets the angle to rotate the hue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the angle value changes over time. The effect calculates a color matrix based on the rotation angle (?) according to the following matrix equations: </p><p> This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> This effect is used to alter the saturation of an image. The saturation effect is a specialization of the?color matrix?effect. </p> + + + + <p>Sets the saturation of the image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the saturation of the image changes over time. This parameter must not be {{NULL}}. You can set the saturation to a value between 0 and 1. If you set it to 1 the output image is fully saturated. If you set it to 0 the output image is monochrome. The saturation value is unitless. The effect calculates a color matrix based on the saturation value (s in the equation here) using the following equation: </p></dd> + + + + + <p> The turbulence effect is used to generate a bitmap based on the Perlin noise function. The turbulence effect has no input image. </p> + + + + <p>Sets the coordinates where the turbulence output is generated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The coordinates where the turbulence output is generated. The algorithm used to generate the Perlin noise is position dependent, so a different offset results in a different output. This value is not bounded and the units are specified in {{DIPs}} </p> <strong>Note</strong>??Note The offset does not have the same effect as a translation because the noise function output is infinite and the function will wrap around the tile. ? </dd> + + + + + <p>Sets the base frequencies in the X and Y direction.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The base frequencies in the X and Y direction. This must be greater than 0. The units are specified in 1/{{DIPs}}. A value of 1 (1/{{DIPs}}) for the base frequency results in the Perlin noise completing an entire cycle between two pixels. The ease interpolation for these pixels results in completely random pixels, since there is no correlation between the pixels. A value of 0.1(1/{{DIPs}}) for the base frequency results in the Perlin noise function repeating every 10 {{DIPs}}. This results in correlation between pixels and the typical turbulence effect is visible. </p> </dd> + + + + + <p>Sets the size of the turbulence output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The size of the turbulence output</p> </dd> + + + + + <p>Sets the number of octaves for the noise function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of octaves for the noise function. This value must be greater than 0.</p> </dd> + + + + + <p>Sets the seed for the pseudo random generator.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The seed for the pseudo random generator. This value is unbounded.</p> </dd> + + + + + <p>Sets the turbulence noise mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The turbulence noise mode. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function.</p> </dd> + + + + + <p>Specifies whether stitching is on or off.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether stitching is on or off. The base frequency is adjusted so that the output bitmap can be stitched. This is useful if you want to tile multiple copies of the turbulence effect output. If this value is {{TRUE}}, the output bitmap can be tiled (using the tile effect) without the appearance of seams and the base frequency is adjusted so that output bitmap can be stitched. If this value is {{FALSE}}, the base frequency is not adjusted, so seams may appear between tiles if the bitmap is tiled. </p> </dd> + + + + + <p> The linear transfer effect is used to map the color intensities of an image using a linear function created from a list of values you provide for each channel. </p> + + + + <p>Sets the Y-intercept of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The Y-intercept of the linear function for the red channel.</p> </dd> + + + + + <p>Sets the slope of the linear function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the red channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} the effect applies the RedLinearTransfer function to the red channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the green channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The slope of the linear function for the green channel.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenLinearTransfer function to the green channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the blue channel. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the Y-intercept of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the blue channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueLinearTransfer function to the blue channel. </p> </dd> + + + + + <p>Sets the Y-intercept of the linear function for the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the the Y-intercept of the linear function for the alpha channel. changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the slope of the linear function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the slope of the linear function for the alpha channel changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaLinearTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. </p> </dd> + + + + + <p>The table transfer effect is used to map the color intensities of an image using a transfer function created from interpolating a list of values you provide.</p> + + + + <p>Sets the list of values used to define the transfer function for the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the red channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the green channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the blue channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Sets the list of values used to define the transfer function for the alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The list of values used to define the transfer function for the alpha channel.</p> </dd> + + + <dd> <p>The number of values in the tableValues parameter.</p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the red channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the red channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the red channel. If you set this to {{FALSE}} it applies the RedTableTransfer function to the red channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the green channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the green channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the green channel. If you set this to {{FALSE}} it applies the GreenTableTransfer function to the green channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the blue channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the blue channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the blue channel. If you set this to {{FALSE}} it applies the BlueTableTransfer function to the Blue channel. </p> </dd> + + + + + <p>Specifies whether to apply the transfer function to the Alpha channel.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether to apply the transfer function to the alpha channel. If you set this to {{TRUE}} the effect does not apply the transfer function to the Alpha channel. If you set this to {{FALSE}} it applies the AlphaTableTransfer function to the Alpha channel. </p> </dd> + + + + + <p>Specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A boolean value that specifies whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. If you set this to {{TRUE}} the effect will clamp the values. If you set this to {{FALSE}}, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. The effect clamps the values before it premultiplies the alpha. </p> </dd> + + + + + <p>Sets a value in the red table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the green table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The value to set.</p> </dd> + + + + + <p>Sets a value in the blue table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets a value in the alpha table.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the value to set.</p> </dd> + + + <dd> <p>The new value.</p> </dd> + + + + + <p> The composite effect is used to combine 2 or more images. This effect has 13 different composite modes. The composite effect accepts 2 or more inputs. When you specify 2 images, destination is the first input (index 0) and the source is the second input (index 1). If you specify more than 2 inputs, the images are composited starting with the first input and the second and so on. </p> + + + + <p>Sets the mode for the composite effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The mode for the composite effect.</p> </dd> + + + + + <p> The Blend Effect is used to combine 2 images. </p> + + + + <p>Sets the blend mode to use when the blend effect combines the two images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The blend mode to use when the blend effect combines the two images.</p> </dd> + + + + + <p>The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images.</p> + + + + <p>Sets the coefficients for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The coefficients for the equation used to composite the two input images.</p> </dd> + + + + + <p>Specifies whether to clamp color values before the effect passes the values to the next effect in the graph.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A boolean value indicating whether to clamp the color values. A value of {{TRUE}} causes color values to be clamped between 0 and 1.</p> </dd> + + + + + <p>Sets the first coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the second coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the second coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the third coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the third coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Sets the fourth coefficient for the equation used to composite the two input images.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the value of the fourth coefficient changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p> The arithmetic composite effect is used to combine 2 images using a weighted sum of pixels from the input images. </p> + + + + <p>Sets the interpolation mode of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the interpolation mode of the effect.</p> </dd> + + + + + <p>Sets the border mode to use with the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the border mode to use with the effect.</p> </dd> + + + + + <p>Sets the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the transform matrix for the effect to use.</p> </dd> + + + + + <p>Sets an element of the transform matrix of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The row of the element.</p> </dd> + + + <dd> <p>The column of the element.</p> </dd> + + + <dd> <p>The new value of the element.</p> </dd> + + + + + <p>Sets the sharpness of the effect.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An animation that represents how the sharpness value changes over time. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Commits all DirectComposition commands that are pending on this device.</p> + <p>Calls to DirectComposition methods are always batched and executed atomically as a single transaction. Calls take effect only when <strong>{{IDCompositionDevice2::Commit}}</strong> is called, at which time all pending method calls for a device are executed at once.</p><p>An application that uses multiple devices must call <strong>Commit</strong> for each device separately. However, because the composition engine processes the calls individually, the batch of commands might not take effect at the same time.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Waits for the composition engine to finish processing the previous call to the <strong>{{IDCompositionDevice2::Commit}}</strong> method. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Retrieves information from the composition engine about composition times and the frame rate.</p> + <p>This method retrieves timing information about the composition engine that an application can use to synchronize the rasterization of bitmaps with independent animations.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A structure that receives composition times and frame rate information.</p> </dd> + + + + + <p>Creates a new visual object.</p> + <p>A new visual object has a static value of zero for the OffsetX and OffsetY properties, and {{NULL}} for the Transform, Clip, and Content properties. Initially, the visual does not cause the contents of a window to change. The visual must be added as a child of another visual, or as the root of a composition target, before it can affect the appearance of a window.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new visual object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a Microsoft DirectComposition surface factory object, which can be used to create other DirectComposition surface or virtual surface objects</p> + <p>A surface factory allows an application to simultaneously use more than one single {{DXGI}} or Direct2D device with DirectComposition. Each surface factory has a permanent association with one {{DXGI}} or Direct2D device, but a DirectComposition device may have any number of surface factories. </p><p>Each surface factory manages resources independently from the others. In particular, DirectComposition pools surface allocations to mitigate surface allocation and deallocation costs. This pool is done on a per-surface factory basis. </p><p>If the <strong>{{DCompositionCreateDevice2}}</strong> function is called with a non-{{NULL}} <em>renderingDevice</em> parameter, the returned DirectComposition device object has an implicit surface factory under the covers associated with the given rendering device. This implicit surface factory is used to service the <strong>{{IDCompositionDevice::CreateSurface}}</strong>, <strong>{{IDCompositionDevice::CreateVirtualSurface}}</strong>, <strong>{{IDCompositionDevice2::CreateSurface}}</strong> and <strong>{{IDCompositionDevice2::CreateVirtualSurface}}</strong> methods. </p><p>A surface object remains alive as long as any of the surfaces or virtual surfaces that it created remain alive, either directly because the application holds a direct reference, or indirectly because one or more such surfaces are associated with one or more visual objects. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>A reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>The newly created surface factory object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Represents a fence. This interface extends <strong>{{ID3D12Fence}}</strong>, and supports the retrieval of the flags used to create the original fence. This new feature is useful primarily for opening shared fences.</p><strong>Note</strong> <strong>{{ID3D12Fence1}}</strong> was introduced in the Windows 10 Fall Creators Update, and is the latest version of the <strong>{{ID3D12Fence}}</strong> interface. Applications targeting Windows 10 Fall Creators Update and later should use <strong>{{ID3D12Fence1}}</strong> instead of earlier versions. + + + + <p>Creates an updateable surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>DirectComposition surfaces support the following pixel formats: </p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created. </p> </dd> + + + <dd> <p>The height of the surface, in pixels. Constrained by the feature level of the rendering device that was passed in at the time the DirectComposition device was created.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition sparse surface is a logical object that behaves like a rectangular array of pixels that can be associated with a visual for composition. The surface is not necessarily backed by any physical video or system memory for every one of its pixels. The application can realize or virtualize parts of the logical surface at different times. </p><p>A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> and <strong>{{IDCompositionSurface::EndDraw}}</strong> methods. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> method.</p><p>DirectComposition surfaces support the following pixel formats:</p><ul> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong></li> <li><strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong></li> </ul><p>This method fails if <em>initialWidth</em> or <em>initialHeight</em> exceeds 16,777,216 pixels. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface.</p> </dd> + + + <dd> <p>The meaning of the alpha channel, if the pixel format contains an alpha channel. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_UNSPECIFIED}}</strong></dt> </dl> </td><td> <p>The alpha channel is not specified. This value has the same effect as <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_PREMULTIPLIED}}</strong></dt> </dl> </td><td> <p>The color channels contain values that are premultiplied with the alpha channel. +</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong></dt> </dl> </td><td> <p>The alpha channel should be ignored and the bitmap should be rendered opaquely.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The newly created surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D translation transform object.</p> + <p>A new 2D translation transform object has a static value of zero for the OffsetX and OffsetY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D scale transform object.</p> + <p>A new 2D scale transform object has a static value of zero for the ScaleX, ScaleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D rotation transform object.</p> + <p>A new 2D rotation transform object has a static value of zero for the Angle, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D skew transform object.</p> + <p>A new 2D skew transform object has a static value of zero for the AngleX, AngleY, CenterX, and CenterY properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 2D skew transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D 3-by-2 matrix transform object.</p> + <p>A new matrix transform object has the identity matrix as its initial value. The identity matrix is the 3x2 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 2D transform group object that holds an array of 2D transform objects.</p> + <p>The array entries in a transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 2D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D translation transform object.</p> + <p>A newly created 3D translation transform has a static value of 0 for the OffsetX, OffsetY, and OffsetZ properties. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new 3D translation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D scale transform object.</p> + <p>A new 3D scale transform object has a static value of 1.0 for the ScaleX, ScaleY, and ScaleZ properties.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D scale transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D rotation transform object.</p> + <p>A new 3D rotation transform object has a default static value of zero for the Angle, CenterX, CenterY, CenterZ, AxisX, and AxisY properties, and a default static value of 1.0 for the AxisZ property.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D rotation transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D 4-by-4 matrix transform object.</p> + <p>The new 3D matrix transform has the identity matrix as its value. The identity matrix is the 4-by-4 matrix with ones on the main diagonal and zeros elsewhere, as shown in the following illustration. </p><p></p><p>When an identity transform is applied to an object, it does not change the position, shape, or size of the object. It is similar to the way that multiplying a number by one does not change the number. Any transform other than the identity transform will modify the position, shape, and/or size of objects.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new 3D matrix transform object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a 3D transform group object that holds an array of 3D transform objects.</p> + <p>The array entries in a 3D transform group cannot be changed. However, each transform in the array can be modified through its own property setting methods. If a transform in the array is modified, the change is reflected in the computed matrix of the transform group.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An array of 3D transform objects that make up this transform group.</p> </dd> + + + <dd> <p>The number of elements in the <em>transforms</em> array.</p> </dd> + + + <dd> <p>The new 3D transform group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an object that represents multiple effects to be applied to a visual subtree.</p> + <p>An effect group enables an application to apply multiple effects to a single visual subtree. </p><p>A new effect group has a default opacity value of 1.0 and no 3D transformations.</p><p>To set the opacity and transform values, use the corresponding methods on the <strong>{{IDCompositionEffectGroup}}</strong> that was created.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new effect group object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a clip object that can be used to restrict the rendering of a visual subtree to a rectangular area.</p> + <p>A newly created clip object has a static value of {{FLT_MAX}} for the left and top properties, and a static value of ?{{FLT_MAX}} for the right and bottom properties, effectively making it a no-op clip object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new clip object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an animation object that is used to animate one or more scalar properties of one or more Microsoft DirectComposition objects. </p> + <p>A number of DirectComposition object properties can have an animation object as the value of the property. When a property has an animation object as its value, DirectComposition redraws the visual at the refresh rate to reflect the changing value of the property that is being animated.</p><p>A newly created animation object does not have any animation segments associated with it. An application must use the methods of the <strong>{{IDCompositionAnimation}}</strong> interface to build an animation function before setting the animation object as the property of another DirectComposition object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The new animation object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables display of performance debugging counters.</p> + <p>Performance counters are displayed on the top-right corner of the screen. From left to right, Microsoft DirectComposition displays the following information: </p><ul> <li>The composition engine frame rate, in frames per second, averaged over the last 60 composition frames</li> <li>The overall {{CPU}} usage of the composition thread, in milliseconds +</li> </ul><p>The DirectComposition composition engine operates on the entire desktop all at once, so the performance counters measure the total cost of desktop composition, not just the cost of any one particular application. If the application occupies the entire screen, however, it is reasonable to assume that all of the composition cost is due to that one application. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables display of performance debugging counters.</p> + <p>Microsoft DirectComposition keeps a count of how many DirectComposition devices have performance counters enabled, for the entire desktop session. If the count is non-zero, the performance counters are displayed. Therefore, disabling the counters may not make them go away if another device is also requesting display of the counters.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a composition target object that is bound to the window that is represented by the specified window handle.</p> + <p>A DirectComposition visual tree must be bound to a window before anything can be displayed on screen. The window can be a top-level window or a child window. In either case, the window can be a layered window, but in all cases the window must belong to the calling process. If the window belongs to a different process, this method returns {{DCOMPOSITION_ERROR_ACCESS_DENIED}}.</p><p>When DirectComposition content is composed to the window, the content is always composed on top of whatever is drawn directly to that window through the device context returned by the <strong>GetDC</strong> function, or by calls to DirectX Present methods. However, because window clipping rules apply to DirectComposition content, if the window has child windows, those child windows may clip the visual tree. The topmost parameter determines whether child windows clip the visual tree.</p><p>Conceptually, each window consists of four layers:</p><ol> <li>The contents drawn directly to the window handle (this is the bottommost layer).</li> <li>An optional DirectComposition visual tree.</li> <li>The contents of all child windows, if any.</li> <li>Another optional DirectComposition visual tree (this is the topmost layer).</li> </ol><p>All four layers are clipped to the window?s visible region.</p><p>At most, only two composition targets can be created for each window in the system, one topmost and one not topmost. If a composition target is already bound to the specified window at the specified layer, this method fails. When a composition target object is destroyed, the layer it composed is available for use by a new composition target object.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The window to which the composition target object should be bound. This parameter must not be {{NULL}}.</p> </dd> + + + <dd> <p>{{TRUE}} if the visual tree should be displayed on top of the children of the window specified by the hwnd parameter; otherwise, the visual tree is displayed behind the children.</p> </dd> + + + <dd> <p>The new composition target object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that wraps an existing composition surface.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of an existing composition surface that was created by a call to the <strong>{{DCompositionCreateSurfaceHandle}}</strong> function. +</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a wrapper object that represents the rasterization of a layered window, and that can be associated with a visual for composition.</p> + <p>You can use the surface reference in calls to the {{IDCompositionVisual::SetContent}} method to set the content of one or more visuals. After setting the content, the visuals compose the contents of the specified layered window as long as the window is layered. If the window is unlayered, the window content disappears from the output of the composition tree. If the window is later re-layered, the window content reappears as long as it is still associated with a visual. If the window is resized, the affected visuals are re-composed. </p><p>The contents of the window are not cached beyond the life of the window. That is, if the window is destroyed, the affected visuals stop composing the window. </p><p>If the window is moved off-screen or resized to zero, the system stops composing the content of those visuals. You should use the <strong>DwmSetWindowAttribute</strong> function with the {{DWMWA_CLOAK}} flag to "cloak" the layered child window when you need to hide the original window while allowing the system to continue to compose the content of the visuals. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The handle of the layered window for which to create a wrapper. A layered window is created by specifying {{WS_EX_LAYERED}} when creating the window with the <strong>CreateWindowEx</strong> function or by setting {{WS_EX_LAYERED}} via <strong>SetWindowLong</strong> after the window has been created.</p> </dd> + + + <dd> <p>The new composition surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the opacity mode for this visual.</p> + <p>The opacity mode affects how the Opacity property of an effect group object affects the composition of a visual sub-tree. DirectComposition supports two opacity modes: Layer and Multiply. In Layer mode, each visual sub-tree can be logically viewed as a bitmap that contains the opaque rasterization of that entire sub-tree, to which the opacity value is then applied. In this manner, overlapping opaque surfaces blend with the sub-tree?s background, but not with each other. In contrast, in Multiply mode the opacity is applied individually to each surface as it is composed, so surfaces blend with each other. Multiply mode is faster than Layer mode and always preferred if the visual tree contains entirely non-overlapping contents. However, Multiply mode may produce undesired visual results for overlapping elements. </p><p>By default, a visual inherits the opacity mode of its parent visual, which may inherit the opacity mode of its parent visual, and so on. A visual uses the {{DCOMPOSITION_OPACITY_MODE_LAYER}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_OPACITY_MODE_INHERIT}}. If no visuals set the opacity mode, the default for the entire visual tree is {{DCOMPOSITION_OPACITY_MODE_LAYER}}. </p><p>If the <em>opacityMode</em> parameter is anything other than {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, this visual's surfaces are composed with the specified opacity mode. In addition, this opacity mode becomes the new default for the children of the current visual. That is, if the opacity mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_OPACITY_MODE_INHERIT}}, the surfaces the child visuals are composed using the opacity mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p> The opacity mode to use when composing the visual to the screen.</p> </dd> + + + + + <p>Specifies whether or not surfaces that have 3D transformations applied to them should be displayed when facing away from the observer.</p> + <p>The back face visibility property affects how surfaces that have 3D transformations applied are rendered. </p><p>By default, a visual inherits the back face visibility property of its parent visual, which may inherit the back face visibility property of its parent visual, and so on. A visual uses the {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}} mode if this method is never called for the visual, or if this method is called with {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}. If no visuals set the back face visibility property, the default for the entire visual tree is {{DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE}}. </p><p>If the <em>visibility</em> parameter is anything other than {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, this visual's surfaces are composed with the specified visibility mode. In addition, this visibility mode becomes the new default for the children of the current visual. That is, if the visibility mode of this visual's children is unchanged or explicitly set to {{DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT}}, the surfaces the child visuals are composed using the visibility mode of this visual. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The back face visibility to use when composing surfaces in this visual?s sub-tree to the screen.</p> </dd> + + + + + <p>Represents a debug visual.</p> + + + + <p>Enables a visual heatmap that represents overdraw regions.</p> + <p>Heatmaps can be enabled by calling <strong>EnableHeatMap</strong>. The heatmaps are drawn on the source of the VisualDebug visual and child visuals. The heatmaps are represented in a specified color for all visual content. The heatmap color must have an transparency in order to see the overlaying overdraw regions. The colored surfaces are blended together to visually show all overdraw regions in a single view. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd></dd> + + + + + <p>Disables visual heatmaps.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Enables highlighting visuals when content is being redrawn.</p> + <p>Highlighting redraw regions can be enabled by calling <strong>EnableRedrawRegions</strong>. With this function, redrawn client areas are visually highlighted every frame the visual is updated. Redraw regions are drawn on the source of the VisualDebug and child visuals. Redraw is triggered when properties of a visual are updated. The updated visusal does not neccessarly need to visually change to trigger a redraw. The highlighting will cycle through Blue, Yellow, Pink and Green to provide an order of which content is being updated. The redraw regions are only visible while the window of the VisualDebug is being updated. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Disables visual redraw regions.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a surface object that can be associated with one or more visuals for composition.</p> + <p>A Microsoft DirectComposition surface is a rectangular array of pixels that can be associated with a visual for composition. A newly created surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that has 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. The first call to this method must cover the entire surface area to provide an initial value for every pixel. Subsequent calls may specify smaller sub-rectangles of the surface to update. </p><p>This method will fail if either the width or height exceed the max texture size. If your scenario requires dimensions beyond the max texture size, use <strong>CreateVirtualSurface</strong> method.</p><p>DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p>Creates a sparsely populated surface that can be associated with one or more visuals for composition.</p> + <p>A newly created virtual surface object is in an uninitialized state. While it is uninitialized, the surface has no effect on the composition of the visual tree. It behaves exactly like a surface that is initialized with 100% transparent pixels. </p><p>To initialize the surface with pixel data, use the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method. This method not only provides pixels for the surface, but it also allocates actual storage space for those pixels. The memory allocation persists until the application returns some of the memory to the system. The application can free part or all of the allocated memory by calling the <strong>{{IDCompositionVirtualSurface::Trim}}</strong> or <strong>{{IDCompositionVirtualSurface::Resize}}</strong> method.</p><p>Microsoft DirectComposition surfaces support the following pixel formats: +</p><ul> <li>{{DXGI_FORMAT_B8G8R8A8_UNORM}} +</li> <li>{{DXGI_FORMAT_R8G8B8A8_UNORM}} </li> <li>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The width of the surface, in pixels. The maximum width is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The height of the surface, in pixels. +The maximum height is 16,777,216 pixels.</p> </dd> + + + <dd> <p>The pixel format of the surface. +</p> </dd> + + + <dd> <p>The format of the alpha channel, if an alpha channel is included in the pixel format. This can be one of {{DXGI_ALPHA_MODE_PREMULTIPLIED}} or {{DXGI_ALPHA_MODE_IGNORE}}. It can also be {{DXGI_ALPHA_MODE_UNSPECIFIED}}, which is interpreted as {{DXGI_ALPHA_MODE_IGNORE}}. +</p> </dd> + + + <dd> <p> The newly created virtual surface object. This parameter must not be {{NULL}}. +</p> </dd> + + + + + <p> Serves as a factory for all other Microsoft DirectComposition objects and provides methods to control transactional composition. </p> + + + + <p>Creates an instance of <strong>{{IDCompositionGaussianBlurEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionBrightnessEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionColorMatrixEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionShadowEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionHueRotationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionSaturationEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTurbulenceEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionLinearTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionTableTransferEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an instance of <strong>{{IDCompositionCompositeEffect}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionBlendEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionArithmeticCompositeEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an instance of <strong>{{IDCompositionAffineTransform2DEffect}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents one DirectComposition visual in a visual tree.</p> + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Changes the value of OffsetZ property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value.</p> </dd> + + + + + <p>Sets the value of the visual's opacity property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the opacity property.</p> </dd> + + + + + <p>Sets the Transform property of this visual to the specified 3D transform object.</p> + <p>Setting the Transform property transforms the coordinate system of the entire visual subtree that is rooted at this visual. If the Clip property of this visual is specified, the clip rectangle is also transformed. </p><p>If the Transform property previously specified a transform matrix, the newly specified transform object replaces the transform matrix.</p><p>A transformation specified by the Transform property is applied after the OffsetX and OffsetY properties. In other words, the effect of setting the Transform property and the OffsetX and OffsetY properties is the same as setting only the Transform property on a transform group where the first member of the group is an <strong>{{IDCompositionTranslateTransform}}</strong> object that has those same OffsetX and OffsetY values. However, you should use the <strong>{{IDCompositionVisual::SetOffsetX}}</strong> and <strong>SetOffsetY</strong> methods whenever possible because they are slightly faster. </p><p>This method fails if <em>transform</em> is an invalid reference or if it was not created by the same <strong>{{IDCompositionDevice}}</strong> interface that created this visual. The interface cannot be a custom implementation; only interfaces created by Microsoft DirectComposition can be used with this method. +</p><p>If the <em>transform</em> parameter is {{NULL}}, the coordinate system of this visual is transformed only by its OffsetX and OffsetY properties. Setting the Transform property to {{NULL}} is equivalent to setting it to an <strong>{{IDCompositionMatrixTransform}}</strong> object where the specified matrix is the identity matrix. However, an application should set the Transform property to {{NULL}} whenever possible because it is slightly faster.</p><p>If the OffsetX and OffsetY properties are set to 0, and the Transform property is set to {{NULL}}, the coordinate system of the visual is the same as that of its parent.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The transform object that is used to modify the coordinate system of this visual. This parameter can point to an <strong>{{IDCompositionTransform}}</strong> interface or one of its derived interfaces. This parameter can be {{NULL}}.</p> </dd> + + + + + <p>Changes the value of the visual's Visible property.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new value for the visible property.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the <strong>{{IDCompositionDevice::Commit}}</strong> method.</p><p>The {{DXGI}} device specified by <em>dxgiDevice</em> is used to create all DirectComposition surface objects. In particular, the <strong>{{IDCompositionSurface::BeginDraw}}</strong> method returns an interface reference to a {{DXGI}} surface that belongs to the device specified by the <em>dxgiDevice</em> parameter. </p><p>When creating the {{DXGI}} device, developers must specify the <strong>{{D3D11_CREATE_DEVICE}} {{BGRA_SUPPORT}}</strong> or <strong>{{D3D10_CREATE_DEVICE_BGRA_SUPPORT}}</strong> flag for Direct2D interoperability with Microsoft Direct3D resources.</p><p>The <em>iid</em> parameter must be <code>__uuidof({{IDCompositionDevice}})</code>, and the <em>dcompositionDevice</em> parameter receives a reference to an <strong>{{IDCompositionDevice}}</strong> interface. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The {{DXGI}} device to use to create DirectComposition surface objects.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. </p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new device object that can be used to create other Microsoft DirectComposition objects.</p> + <p>A device object serves as the factory for all other DirectComposition objects. It also controls transactional composition through the {{IDCompositionDevice2::Commit}} method. </p><p>The <em>renderingDevice</em> parameter may point to a {{DXGI}}, Direct3D, Direct2D device object, or it may be {{NULL}}. This parameter affects the behavior of the {{IDCompositionDevice2::CreateSurface}}, {{IDCompositionDevice2::CreateVirtualSurface}} and {{IDCompositionSurface::BeginDraw}} methods. </p><p>If the <em>renderingDevice</em> parameter is {{NULL}} then the returned DirectComposition device cannot directly create DirectComposition surface objects. In particular, {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods return {{E_INVALIDARG}}, regardless of the supplied parameters. However, such a DirectComposition device object can still be used to indirectly create surfaces if the application creates a surface factory object via the {{IDCompositionDevice2::CreateSurfaceFactory}} method. </p><p>If the <em>renderingDevice</em> parameter points to a {{DXGI}} device, that device is used to allocate all video memory needed by the {{IDCompositionDevice2::CreateSurface}} and {{IDCompositionDevice2::CreateVirtualSurface}} methods. Moreover, the {{IDCompositionSurface::BeginDraw}} method returns an interface reference to a {{DXGI}} surface that belongs to that same {{DXGI}} device. </p><p>If the <em>renderingDevice</em> parameter points to a Direct2D device object, DirectComposition extracts from it the underlying {{DXGI}} device object and uses it as if that {{DXGI}} device object had been passed in as the <em>renderingDevice</em> parameter. However, passing in a Direct2D object further causes {{IDCompositionSurface::BeginDraw}} to accept __uuidof({{ID2D1DeviceContext}}) for its <em>iid</em> parameter for any objects created with the {{IDCompositionDevice2::CreateSurface}} or {{IDCompositionDevice2::CreateVirtualSurface}} methods. In that case, the Direct2D device context object returned by {{IDCompositionSurface::BeginDraw}} will belong to the same Direct2D device passed as the <em>renderingDevice</em> parameter. </p><p>If the <em>iid</em> parameter is __uuidof({{IDCompositionDevice}}), then the dcompositionDevice parameter receives a reference to a Version 1 {{IDCompositionDevice}} interface, but the underlying object is a Version 2 desktop device object. The application can later obtain a reference to either the {{IDCompositionDevice2}} or {{IDCompositionDesktopDevice}} interfaces by calling the <strong>QueryInterface</strong> method on that device. Similarly, all DirectComposition objects created from such a device are Version 2 objects under the covers. For example, the {{IDCompositionDevice::CreateVisual}} method will return an {{IDCompositionVisual}} interface to the created visual, but the application can obtain a reference to the {{IDCompositionVisual2}} interface via the QueryInterface method. This behavior allows an application written to the DirectComposition {{V1}} {{API}} to incrementally adopt DirectComposition {{V2}} features by changing the device creation method from {{DCompositionCreateDevice}} to {{DCompositionCreateDevice2}}, while still requesting the {{IDCompositionDevice2}} interface. This allows the rest of the code to remain unchanged, while allowing the application to use QueryInterface in just the places where new functionality is needed. +</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new DirectComposition device object, which can be used to create other DirectComposition objects.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An optional reference to a DirectX device to be used to create DirectComposition surface objects. Must be a reference to an object implementing the <strong>{{IDXGIDevice}}</strong> or <strong>{{ID2D1Device}}</strong> interfaces.</p> </dd> + + + <dd> <p>The identifier of the interface to retrieve. This must be one of __uuidof({{IDCompositionDevice}}) or __uuidof({{IDCompositionDesktopDevice}}).</p> </dd> + + + <dd> <p>Receives an interface reference to the newly created device object. The reference is of the type specified by the <em>iid</em> parameter. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates a new composition surface object that can be bound to a +Microsoft DirectX swap chain or swap buffer and associated +with a visual.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes. </p> + + + <dd> <p>The requested access to the composition surface object. It can be one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong></strong></dt> <dt>0x0000L</dt> </dl> </td><td> <p>No access.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_READ}}</strong></dt> <dt>0x0001L</dt> </dl> </td><td> <p>Read access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_WRITE}}</strong></dt> <dt>0x0002L</dt> </dl> </td><td> <p>Write access. For internal use only.</p> </td></tr> <tr><td><dl> <dt><strong>{{COMPOSITIONSURFACE_ALL_ACCESS}}</strong></dt> <dt>0x0003L</dt> </dl> </td><td> <p>Read/write access. Always specify this flag except when duplicating a surface in another process, in which case set <em>desiredAccess</em> to 0.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains the security descriptor for the composition surface object, and specifies whether the handle of the composition surface object is inheritable when a child process is created. If this parameter is {{NULL}}, the composition surface object is created with default security attributes that grant read and write access to the current process, but do not enable child processes to inherit the handle.</p> </dd> + + + <dd> <p>The handle of the new composition surface object. This parameter must not be {{NULL}}.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse wheel messages to the given {{HWND}}. This will fail if there is already an interaction attached to this visual. After calling this {{API}}, the device that owns the visual must be committed. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Creates an Interaction/InputSink to route mouse button down and any subsequent move and up events to the given {{HWND}}. There is no move thresholding; when enabled, all events including and following the down are unconditionally redirected to the specified window. After calling this {{API}}, the device owning the visual must be committed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The visual to route messages from.</p> </dd> + + + <dd> <p>The {{HWND}} to route messages to.</p> </dd> + + + <dd> <p>Boolean value indicating whether to enable or disable routing.</p> </dd> + + + + + <p>Represents a function for animating one or more properties of one or more Microsoft DirectComposition objects. Any object property that takes a scalar value can be animated.</p> + + + + <p>Resets the animation function so that it contains no segments.</p> + <p>This method returns the animation function to a clean state, as when the animation was first constructed. After this method is called, the next segment to be added becomes the first segment of the animation function. Because it is the first segment, it can have any non-negative beginning offset.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + + <p>Sets the absolute time at which the animation function starts.</p> + <p>By default, an animation function starts when the first frame of the animation takes effect. For example, if an application creates a simple animation function with a single primitive at offset zero, associates the animation with some property, and then calls the <strong>{{IDCompositionDevice::Commit}}</strong> method, the first frame that includes the commit samples the animation at offset zero for the first primitive. This implies that the actual default start time of all animations varies depending on the time between when the application creates the animation and calls <strong>Commit</strong>, to the time it takes the composition engine to pick up the committed changes. The application can use the <strong>SetAbsoluteBeginTime</strong> method to exercise finer control over the starting time of an animation. </p><p>This method does not control when animations take effect; it only affects how animations are sampled after they start. If the application specifies the exact time of the next frame as the absolute begin time, the result is the same as not calling this method at all. If the specified begin time is different from the time of the next frame, the result is one of following: </p><ul> <li>If the specified time is later than the next frame time, the animation start is delayed until the specified begin time.</li> <li>If the specified time is earlier than the next frame time, the beginning of the animation is dropped and sampling starts into the animation function. +</li> </ul> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The starting time for this animation.</p> </dd> + + + + + <p>Adds a cubic polynomial segment to the animation function.</p> + <p>A cubic segment transitions time along a cubic polynomial. For a given time input (t), the output value is given by the following equation. </p><p><em>x</em>(<em>t</em>) = <em>at</em>? + <em>bt</em>? + <em>ct</em> + <em>d</em></p><p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p><p>If all coefficients except <em>constantCoefficient</em> are zero, the value of this segment remains constant over time, and the animation does not cause a recomposition for the duration of the segment.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect.</p> </dd> + + + <dd> <p>The constant coefficient of the polynomial.</p> </dd> + + + <dd> <p>The linear coefficient of the polynomial.</p> </dd> + + + <dd> <p>The quadratic coefficient of the polynomial.</p> </dd> + + + <dd> <p>The cubic coefficient of the polynomial.</p> </dd> + + + + + <p>Adds a sinusoidal segment to the animation function.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity, or if the <em>beginOffset</em> parameter is negative. </p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment, if any.</p><p>This animation segment remains in effect until the begin time of the next segment in the animation function. If the animation function contains no more segments, this segment remains in effect indefinitely. </p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when this segment should take effect. </p> </dd> + + + <dd> <p>A constant that is added to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the sinusoidal.</p> </dd> + + + <dd> <p>A scale factor that is applied to the time offset, in Hertz.</p> </dd> + + + <dd> <p>A constant that is added to the time offset, in degrees.</p> </dd> + + + + + <p>Adds a repeat segment that causes the specified portion of an animation function to be repeated.</p> + <p>This method fails if any of the parameters are NaN, positive infinity, or negative infinity.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>beginOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>This animation segment remains in effect until the begin time of the next segment. If the animation function contains no more segments, this segment remains in effect indefinitely.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation to the point at which the repeat should begin.</p> </dd> + + + <dd> <p>The duration, in seconds, of a portion of the animation immediately preceding the begin time that is specified by <em>beginOffset</em>. This is the portion that will be repeated.</p> </dd> + + + + + <p>Adds an end segment that marks the end of an animation function. </p> + <p>When the specified offset is reached, the property or properties affected by this animation are set to the specified final value, and then the animation stops. If no end segment is added, the final segment of the animation function runs indefinitely. Calling this method is semantically identical to making the last segment of the animation function a cubic polynomial where the cubic, quadratic, and linear coefficients are all zeros, and the constant coefficient is the desired final value.</p><p>Because animation segments must be added in increasing order, this method fails if the <em>endOffset</em> parameter is less than or equal to the <em>beginOffset</em> parameter of the previous segment. This method also fails if this is the first segment to be added to the animation function.</p><p>After this method is called, all methods on this animation object fail except the <strong>{{IDCompositionAnimation::Reset}}</strong> method.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. See DirectComposition Error Codes for a list of error codes.</p> + + + <dd> <p>The offset, in seconds, from the beginning of the animation function to the point when the function ends.</p> </dd> + + + <dd> <p>The final value of the animation.</p> </dd> + + + + + <p>Specifies the interpolation mode to be used when a bitmap is composed with any transform where the pixels in the bitmap don't line up exactly one-to-one with pixels on screen. </p> + <p>The default interpolation mode for a visual is <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT}}</strong>. If all visuals in a visual tree specify this mode, the default for all visuals is nearest neighbor sampling, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmaps are interpolated by using nearest-neighbor sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated by using linear sampling.</p> </dd> + + + <dd> <p>Bitmaps are interpolated according to the mode established by the parent visual.</p> </dd> + + + + + <p>Specifies the border mode to use when composing a bitmap or applying a clip with any transform such that the edges of the bitmap or clip are not axis-aligned with integer coordinates. </p> + <p>The default border mode for any given visual is <strong>{{DCOMPOSITION_BORDER_MODE_INHERIT}}</strong>, which delegates the determination of the border mode to the parent visual. If all visuals in a visual tree specify this mode, the default for all visuals is aliased rendering, which is the fastest mode.</p><p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>Bitmap and clip edges are antialiased.</p> </dd> + + + <dd> <p>Bitmap and clip edges are aliased. See Remarks.</p> </dd> + + + <dd> <p>Bitmap and clip edges are drawn according to the mode established by the parent visual.</p> </dd> + + + + + <p>The mode to use to blend the bitmap content of a visual with the render target.</p> + <p>A single visual can have any combination of visual properties. However, if a +visual has the following combination of properties, the borders of the visual will default +to <strong>{{DCOMPOSITION_BORDER_MODE_HARD}}</strong>. </p><ul> <li><code>SetCompositeMode({{DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT}}) +</code></li> <li><code>SetBorderMode({{DCOMPOSITION_BORDER_MODE_SOFT}}) +</code></li> <li><code>SetBitmapInterpolationMode({{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR}})</code></li> </ul><p>If you want a visual to be drawn with antialiasing, use <strong>{{DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR}}</strong> for the content of the visual, and <strong>{{DCOMPOSITION_BORDER_MODE_SOFT}}</strong> for the edges. +</p> + + + <dd> <p>The standard source-over-destination blend mode.</p> </dd> + + + <dd> <p>The bitmap colors are inverted. </p> </dd> + + + <dd> <p>Bitmap colors subtract for color channels in the background. </p> </dd> + + + <dd> <p>Bitmaps are blended according to the mode established by the parent visual. </p> </dd> + + + + + <p>Specifies the backface visibility to be applied to a visual. </p> + + + <dd> <p>Surfaces in this visual's sub-tree are visible regardless of transformation.</p> </dd> + + + <dd> <p>Surfaces in this visual's sub-tree are only visible when facing the observer.</p> </dd> + + + <dd> <p>The back face visibility is the same as that of the target visual's parent visual.</p> </dd> + + + + + <p>Specifies how the effective opacity value of a visual is applied to that visual?s content and children.</p> + + + <dd> <p>The target visual defines a logical layer into which its entire sub-tree is composed with a starting effective opacity of 1.0. The original opacity value is then used to blend the layer onto the visual?s background.</p> </dd> + + + <dd> <p>The opacity value is multiplied with the effective opacity of the parent visual and the result is then individually applied to each piece of content in this visual?s sub-tree.</p> </dd> + + + <dd> <p>The opacity mode is the same as that of the target visual?s parent visual.</p> </dd> + + + + + <p>Sets the depth mode property associated with this visual.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new depth mode.</p> </dd> + + + + + <p>Describes timing and composition statistics for a frame.</p> + <p>The <strong>{{IDCompositionDevice::GetFrameStatistics}}</strong> method fills this structure. An application can use the information in this structure to estimate the timestamp of the next few frames that will be started by the composition engine. Note that this is only an estimate because the composition engine may or may not compose the next frame, depending on whether any active animations or other work are pending for that frame. In addition, the composition engine may change frame rates according to the cost of composing individual frames.</p> + + + <dd> <p>The time stamp of the last batch of commands to be processed by the composition engine.</p> </dd> + + + <dd> <p>The rate at which the composition engine is producing frames, in frames per second.</p> </dd> + + + <dd> <p>The current time as computed by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>The units in which the <strong>lastFrameTime</strong> and <strong>currentTime</strong> members are specified, in Hertz.</p> </dd> + + + <dd> <p>The estimated time when the next frame will be displayed.</p> </dd> + + + + + <p>Defines the possible states of Direct Manipulation. The viewport can process input in any state unless otherwise noted.</p> + + + + <p>Defines how hit testing is handled by Direct Manipulation when using a dedicated hit-test thread registered through <strong>RegisterHitTestTarget</strong>.</p> + + + + <p>Defines the interaction configuration states available in Direct Manipulation.</p> + + + + <p>Defines the gestures that can be passed to <strong>SetManualGesture</strong>.</p> + <p>By default, Direct Manipulation always reassigns tap and press-and-hold gestures to the application. +</p><p>Use <strong>{{DIRECTMANIPULATION_GESTURE_PINCH_ZOOM}}</strong> to zoom instead of scale. +</p> + + + + <p> Defines the Direct Manipulation motion type.</p> + + + + <p>Defines the input behavior options for the viewport.</p> + <p><strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS}}</strong> is used in the <strong>SetViewportOptions</strong> method. These flags can be combined to set the input behavior for a viewport.</p> + + + <dd> <p>No special behaviors. This is the default value used to set or revert to default behavior.</p> </dd> + + + <dd> <p>At the end of an interaction, the viewport transitions to <strong>{{DIRECTMANIPULATION_READY}}</strong> and then immediately to <strong>{{DIRECTMANIPULATION_DISABLED}}</strong>. The viewport must be explicitly enabled through the <strong>Enable</strong> method before the next interaction can be processed.</p> </dd> + + + <dd> <p> <strong>Update</strong> must be called to redraw the content within the viewport. The content is not updated automatically during an input event.</p> </dd> + + + <dd> <p>All input from a contact associated with the viewport is passed to the {{UI}} thread for processing.</p> </dd> + + + <dd> <p>If set, all <strong>{{WM_POINTERDOWN}}</strong> messages are passed to the application for hit testing. Otherwise, Direct Manipulation will process the messages for hit testing against the existing list of running viewports, and the application will not see the input.</p> <p>Applies only when viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>.</p> </dd> + + + <dd> <p>Specifies that pixel snapping during a manipulation is disabled.</p> <p>Anti-aliasing can create irregular edge rendering. Artifacts, commonly seen as blurry, or semi-transparent, edges can occur when the location of an edge falls in the middle of a device pixel rather than between device pixels. </p> </dd> + + + + + <p>Modifies how the final inertia end position is calculated.</p> + <p>For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL}}</strong> snap points, the snap points are chosen based on the natural ending position of inertia as calculated by the touch interaction engine. For <strong>{{DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE}}</strong> or <strong>{{DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE}}</strong> snap points, the selected snap point depends on where inertia started.</p> + + + <dd> <p>Content always stops at the snap point closest to where inertia would naturally stop along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at a snap point closest to where inertia would naturally stop along the direction of inertia, depending on how close the snap point is. </p> </dd> + + + <dd> <p>Content always stops at the snap point closest to the release point along the direction of inertia.</p> </dd> + + + <dd> <p>Content stops at the next snap point, if the motion starts far from it.</p> </dd> + + + + + <p>Defines the coordinate system for a collection of snap points.</p> + <p>If <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> and <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> are both specified, the snap points are interpreted as specified from the bottom and right boundaries of the content (the size of the content - the size of the viewport). This is intended for {{RTL}} reading scenarios where content is normally specified and rendered from right-to-left or bottom-to-top.</p> + + + <dd> <p>Default. </p> <p>Snap points are specified relative to the top and left boundaries of the content unless <strong>{{DIRECTMANIPULATION_COORDINATE_MIRRORED}}</strong> is also specified, in which case they are relative to the bottom and right boundaries of the content. For zoom, the boundary is 1.0f.</p> </dd> + + + <dd> <p>Snap points are specified relative to the origin of the viewport.</p> </dd> + + + <dd> <p>Snap points are interpreted as specified in the negative direction of the origin. The origin is shifted to the bottom and right of the viewport or content. Cannot be set for zoom.</p> </dd> + + + + + <p>Defines the horizontal alignment options for content within a viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the left side of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the right side of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the horizontal alignment.</p> </dd> + + + + + <p>Defines the vertical alignment settings for content within the viewport.</p> + + + <dd> <p>No alignment. The object can be positioned anywhere within the viewport.</p> </dd> + + + <dd> <p>Align object along the top of the viewport.</p> </dd> + + + <dd> <p>Align object to the center of the viewport.</p> </dd> + + + <dd> <p>Align object along the bottom of the viewport.</p> </dd> + + + <dd> <p>Content zooms around the center point of the contacts, instead of being locked with the vertical alignment.</p> </dd> + + + + + <p>Defines the threading behavior for <strong>SetInputMode</strong> or <strong>SetUpdateMode</strong>. The exact meaning of each constant depends on the method called.</p> + + + + <p>Defines the drag-and-drop interaction states for the viewport.</p> + <p>For each interaction, the status always starts at <strong>{{DIRECTMANIPULATION_DRAG_DROP_READY}}</strong> and ends at either <strong>{{DIRECTMANIPULATION_DRAG_DROP_CANCELLED}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_COMMITTED}}</strong>. There are no explicit callbacks for the transition from {{CANCELLED}}/{{COMMITTED}} to {{READY}}. +</p><p>The meaning of the {{CANCELLED}} and {{COMMITED}} values depend on the previous status.</p><ul> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_PRESELECT}}</strong>, they mean the same thing: the content goes back to the original location and no other actions should be taken.</li> <li>{{FOR}} <strong>{{DIRECTMANIPULATION_DRAG_DROP_SELECTING}}</strong>, {{COMMITED}} means apply the selection change; {{CANCELLED}} means avoid the selection change.</li> <li>For <strong>{{DIRECTMANIPULATION_DRAG_DROP_DRAGGING}}</strong>, {{COMMITED}} means perform the drop action; {{CANCELLED}} means cancel the drop action.</li> </ul> + + + <dd> <p>The viewport is at rest and ready for input.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is not selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is selected.</p> </dd> + + + <dd> <p>The viewport is updating its content and the content is being dragged.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a revert.</p> </dd> + + + <dd> <p>The viewport has concluded the interaction and requests a commit.</p> </dd> + + + + + <p>Defines behaviors for the drag-drop interaction.</p> + + + <dd> <p>Specifies that vertical movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that horizontal movement is applicable to the chosen gesture.</p> </dd> + + + <dd> <p>Specifies that the gesture is to be cross-slide only.</p> </dd> + + + <dd> <p>Specifies that the gesture is a drag initiated by cross-slide.</p> </dd> + + + <dd> <p>Specifies that the gesture a drag initiated by press-and-hold.</p> </dd> + + + + + <p>Defines gestures recognized by Direct Manipulation.</p> + + + + <p>Determines the type and direction of automatic scrolling animation to apply. </p> + + + <dd> <p>If content is scrolling, slowly stop along the direction of the motion.</p> </dd> + + + <dd> <p>Scroll towards the positive boundary of the content.</p> </dd> + + + <dd> <p>Scroll towards the origin of the content.</p> </dd> + + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Activates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated, by default. The manager does not receive or respond to input and callbacks until <strong>Activate</strong> is called for the window. </p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Deactivates Direct Manipulation for processing input and handling callbacks on the specified window. </p> + <p>The manipulation manager is deactivated by default. The manager does not receive or respond to input until <strong>Activate</strong> is called. The manipulation manager should be deactivated when the app does not receive or respond to input. For example, when the app is minimized.</p><p>Calls to <strong>Activate</strong> and <strong>Deactivate</strong> are reference counted. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Registers a dedicated thread for hit testing.</p> + <p>Hit testing is typically performed on the application {{UI}} thread. The application receives a <strong>{{WM_POINTERDOWN}}</strong> message on which hit-testing is performed. If a manipulation is required, <strong>SetContact</strong> is called on one or more viewports. An application can use the <strong>RegisterHitTestTarget</strong> method to delegate this hit-testing responsibility to a separate hit-testing thread. +</p><p>Once a dedicated hit-test target is successfully registered, <strong>{{WM_POINTERDOWN}}</strong> messages are processed on the hit-testing thread. If a manipulation, such as pan or zoom, is required, <strong>SetContact</strong> is called from this thread. +</p><p>If <strong>SetContact</strong> is not called from the hit-testing thread, <strong>{{WM_POINTERDOWN}}</strong> messages may be processed on the {{UI}} thread, depending on the <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong> specified during registration. +</p><p>If <strong>SetContact</strong> is not called by either the hit-test thread or the {{UI}} thread, Direct Manipulation ignores the input which is then handled on the {{UI}} thread. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of the main app window (typically created from the {{UI}} thread).</p> </dd> + + + <dd> <p>The handle of the window in which hit testing is registered (should be created from the hit testing thread). Pass in nullptr to unregister a previously registered hit-test target.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_HITTEST_TYPE}}</strong>. Specifies whether the {{UI}} window or the hit testing window (or both) receives the hit testing <strong>{{WM_POINTERDOWN}}</strong> message , and in what order.</p> </dd> + + + + + <p>Passes keyboard and mouse messages to the manipulation manager on the app's {{UI}} thread.</p> + <p>Call this method for mouse and keyboard input.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The input message to process.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if no further processing should be done with this message; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets a reference to an <strong>{{IDirectManipulationUpdateManager}}</strong> object that receives compositor updates. </p> + <p>For the compositor to respond to update events from Direct Manipulation, you must associate <strong>{{IDirectManipulationUpdateManager}}</strong> to an <strong>{{IDirectManipulationCompositor}}</strong> object during initialization. Use <strong>GetUpdateManager</strong> to obtain a reference to a <strong>{{IDirectManipulationUpdateManager}}</strong> object. Pass this reference to the compositor using the <strong>SetUpdateManager</strong> method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create a new <strong>{{IDirectManipulationViewport}}</strong> object.</p><p>The viewport manages the interaction state and mapping of input to output actions.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The factory method that is used to create an instance of secondary content (such as a panning indicator) inside a viewport.</p> + <p>Primary content is automatically created at the same time as the viewport and has a one-to-one relationship to a viewport. Therefore, it is not possible to create, add, or remove primary content.</p><p>Secondary content is created independently from the viewport. There is no limit to how much secondary content can be added or removed from a viewport. All secondary content transforms are derived from those supported by the primary content with specific rules applied based on the intended purpose of the element (identified by its Class identifier ({{CLSID}})).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The frame info provider for the secondary content. This should match the frame info provider used to create the viewport.</p> </dd> + + + <dd> <p>Class identifier ({{CLSID}}) of the secondary content. This {{ID}} specifies the content type.</p> </dd> + + + <dd> <p>{{IID}} of the interface.</p> </dd> + + + <dd> <p>The secondary content object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Factory method to create a behavior.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{CLSID}} of the behavior. The {{CLSID}} specifies the type of behavior.</p> </dd> + + + <dd> <p>The {{IID}} of the behavior interface to create.</p> </dd> + + + <dd> <p>The new behavior object that implements the specified interface.</p> </dd> + + + + + <p>Extends the <strong>{{IDirectManipulationManager2}}</strong> interface that provides access to all the Direct Manipulation features and {{APIs}} available to the client application. </p><p>The <strong>{{IDirectManipulationManager3}}</strong> interface adds support for retrieving an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p><strong>Note</strong>??To obtain an <strong>{{IDirectManipulationManager3}}</strong> interface reference, <strong>QueryInterface</strong> on an existing <strong>{{IDirectManipulationManager}}</strong> interface reference.? + + + + <p>Retrieves an <strong>{{IDirectManipulationDeferContactService}}</strong> object.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Starts or resumes input processing by the viewport.</p> + <p>This method directs a viewport to attempt to respond to input.</p><p>Call this method if the <strong>{{AUTODISABLE}}</strong> option is set. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>, or <strong>{{S_FALSE}}</strong> if there is no work to do (for example, the viewport is already enabled). Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Stops input processing by the viewport.</p> + <p>When a viewport is disabled, it immediately stops all transforms and moves the content to the final location. </p><p>Call this method when you want to modify multiple attributes atomically. This method can be called at any time. </p><p>The viewport will not resume processing input until <strong>Enable</strong> is called. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies an association between a contact and the viewport.</p> + <p>Call this method when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p><p> <strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p><p>After initialization, Direct Manipulation is not aware of viewport z-order or parent-child relations between viewports. The order of <strong>SetContact</strong> calls defines the viewport tree. To establish the correct viewport hierarchy, <strong>SetContact</strong> should be called first on the child-most viewport, followed by the parent, grand-parent, and so on. +</p><p>Use <strong>{{GET_POINTERID_WPARAM}}</strong> to get the reference identifier from a reference message. The contact is removed automatically when <strong>{{WM_POINTERUP}}</strong> is received. +</p><p>If a contact is associated with one or more viewports using the <strong>SetContact</strong> method, Direct Manipulation will examine further input from that contact and attempt to identify an appropriate manipulation based on the configuration of the associated viewports. If a manipulation is recognized, the application will then receive a <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message for this contact. In this context, the <strong>{{WM_POINTERCAPTURECHANGED}}</strong> message indicates that Direct Manipulation has captured the contact and the application will not receive input from this contact that is consumed for this manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes a contact that is associated with a viewport.</p> + <p>This method releases a contact from a specific Direct Manipulation viewport (equivalent to the user removing a touch point). </p><p>The viewport state is not affected unless the last remaining contact on the viewport is removed, in which case the viewport will transition to inertia, if supported. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{ID}} of the reference.</p> </dd> + + + + + <p>Removes all contacts that are associated with the viewport. Inertia is started if the viewport supports inertia.</p> + <p>This is equivalent to calling <strong>ReleaseContact</strong> on every contact associated with the viewport. The outcome is equivalent to the user removing all touch points from the viewport. </p><p>If supported, inertia will be started after calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the state of the viewport.</p> + <p>This method returns the viewport state at the time of the call and not at the time when the return value is read.</p><p>This method will fail if called after <strong>Abandon</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_STATUS}}</strong>.</p> </dd> + + + + + <p>Gets the tag value of a viewport.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The out parameters are optional, so the method can return an {{ID}}, the viewport object, or both. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{IID}} to the interface.</p> </dd> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The identifier portion of the tag.</p> </dd> + + + + + <p>Sets a viewport tag.</p> + <p>A tag is a pairing of an integer {{ID}} with a Component Object Model ({{COM}}) object. It can be used by an app to identify the viewport.</p><p> The object parameter is optional, so that the method can set just an {{ID}}. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Retrieves the rectangle for the viewport relative to the origin of the viewport coordinate system specified by <strong>SetViewportRect</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Sets the bounding rectangle for the viewport, relative to the origin of the viewport coordinate system.</p> + <p>The viewport rectangle specifies the region of content that is visible to the user. In conjunction with the primary content rectangle, the viewport rectangle is used to determine chaining behaviors.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle.</p> </dd> + + + + + <p>Moves the viewport to a specific area of the primary content and specifies whether to animate the transition.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The leftmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The topmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The rightmost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>The bottommost coordinate of the rectangle in the primary content coordinate space.</p> </dd> + + + <dd> <p>Specifies whether to animate the zoom behavior.</p> </dd> + + + + + <p>Specifies the transform from the viewport coordinate system to the window client coordinate system. </p> + <p>Call this function to specify the viewport position, scaling and orientation on the screen. Viewport position, scaling, orientation and size are uniquely determined by the viewport transform and the viewport rectangle. The application can specify the viewport transform using this method, and the viewport rectangle using <strong>SetViewportRect</strong>. +</p><p>The viewport rectangle (the rectangular area inside the content that is visible to the user) is specified in viewport coordinates. If the viewport rectangle top-left point is (0,0), the viewport rectangle is positioned exactly at the viewport coordinate system origin. Viewports offset from the viewport coordinate system origin can be specified in two ways:</p><ul> <li>Through the viewport rectangle top-left point</li> <li>Through the viewport transform translation component (_31, _32)</li> </ul><p>The viewport transform converts from the viewport coordinate system to the window client coordinate system. Direct Manipulation ignores the window {{RTL}} property, so the client area origin is always the top-left point. +The transforms are applied in the following order: +</p><ol> <li>Viewport rectangle offset</li> <li>Viewport transform (from viewport to client coordinate system)</li> <li>Client to screen mapping (from client to screen coordinate system) +</li> </ol> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Specifies a display transform for the viewport, and synchronizes the output transform with the new value of the display transform.</p> + <p>If the application performs special output processing of the content outside of the compositor (content not fully captured in the viewport transform), it should call this method to specify the display transform for the special processing. +</p><p>The display transform affects how manipulation updates are applied to the output transform. For example, if the display transform is set to scale 3x, panning will move the content 3x the original distance. +</p><p>When a display transform is changed using this method, the output transform will be synchronized to the new value of the display transform. +</p><p>This method cannot be called if the viewport status is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong> or <strong>{{DIRECTMANIPULATION_INERTIA}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix, in row-wise order: _11, _12, _21, _22, _31, _32.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Gets the primary content of a viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. </p><p>Primary content is an element that gets transformed (e.g. moved, scaled, rotated) in response to a user interaction. Primary content is created at the same time as the viewport and cannot be added or removed.</p> + <p> This method gets the content of the viewport that implements <strong>{{IDirectManipulationContent}}</strong> and <strong>{{IDirectManipulationPrimaryContent}}</strong>. +</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds secondary content, such as a panning indicator, to a viewport.</p> + <p>Secondary content is created by calling <strong>CreateContent</strong>. Once added, the secondary content will move relative to the primary content in response to a manipulation. Its motion is determined by rules associated with each type of secondary content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the viewport.</p> </dd> + + + + + <p>Removes secondary content from a viewport.</p> + <p>Secondary content can be removed from the viewport at any time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content object to remove.</p> </dd> + + + + + <p>Sets how the viewport handles input and output.</p><p>Calling this method overrides all settings previously specified with <strong>SetUpdateMode</strong> or <strong>SetInputMode</strong>.</p> + <p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Adds an interaction configuration for the viewport.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p><p>You cannot add another drag and drop behavior after an existing one has already been added.</p><p>This method is designed to allow an application to switch pre-added configurations, as a configuration cannot be changed while a manipulation is occurring. Under most circumstances it is better to update the configuration using <strong>ActivateConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Removes an interaction configuration for the viewport.</p> + <p>This method removes a possible configuration that was added by using <strong>AddConfiguration</strong>. This method can be called only if the configuration is not active.</p><p>An interaction configuration specifies how the manipulation engine responds to input and which gestures are supported. Any number of configurations can be added to the viewport using <strong>AddConfiguration</strong>. Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specifies the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets the configuration for input interaction.</p> + <p>An interaction configuration specifies how the manipulation engine responds to input and which manipulations are supported. Any number of possible configurations can be added to the viewport using <strong>AddConfiguration</strong> before processing input. </p><p>Configurations can be switched by the application at runtime using <strong>ActivateConfiguration</strong>. </p><p>When a configuration is no longer required (and is not currently active), it can be removed using <strong>RemoveConfiguration</strong>. </p><p>If a configuration has not been added using <strong>AddConfiguration</strong>, it can be automatically added and then activated by calling <strong>ActivateConfiguration</strong>. </p><strong>Note</strong>??If input processing is occurring, this call will fail.?<p>This method fails if a drag and drop behavior has been specified. </p><p>A drag and drop behavior object cannot be attached after successfully calling this method.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_CONFIGURATION}}</strong> that specify the interaction configuration for the viewport.</p> </dd> + + + + + <p>Sets which gestures are ignored by Direct Manipulation. </p> + <p>Use this method to specify which gestures the application processes on the {{UI}} thread. If a gesture is recognized, it will be passed to the application for processing and ignored by Direct Manipulation.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the motion types supported in a viewport that can be chained to a parent viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> that specifies the motion types that are enabled for this viewport.</p> </dd> + + + + + <p>Adds a new event handler to listen for viewport events.</p> + <p>The event callback is fired from the thread that owns the specified window. Consecutive events of the same callback method may be coalesced. +</p><strong>Note</strong>??If the viewport has a drag-drop behavior attached, the event handler should implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The handle of a window owned by the thread for the event callback.</p> </dd> + + + <dd> <p>The handler that is called when viewport status and update events occur. The specified object must implement the <strong>{{IDirectManipulationViewportEventHandler}}</strong> interface.</p> </dd> + + + <dd> <p>The handle that represents this event handler callback.</p> </dd> + + + + + <p>Removes an existing event handler from the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value that was returned by a previous call to <strong>AddEventHandler</strong>.</p> </dd> + + + + + <p>Specifies if input is visible to the {{UI}} thread.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. </p><p> Direct Manipulation consumes all the input that drives the manipulation and the application receives {{WM_POINTERCAPTURECHANGED}} messages. +</p><p>In some situations an application may want to receive input that is driving a manipulation. Set {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}} in this case. The application will receive all input messages, even input used by Direct Manipulation to drive a manipulation. </p><strong>Note</strong>??The application will not receive {{WM_POINTERCAPTURECHANGED}} messages.?<p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Specifies whether a viewport updates content manually instead of during an input event.</p> + <p>{{DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC}} is the default mode for Direct Manipulation. In this mode, visual updates are pushed to compositor driven by input. This is the expected mode of operation if the application is using system-provided implementation of <strong>{{IDirectManipulationCompositor}}</strong>. +</p><p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, it should switch viewport update mode to manual by setting {{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}. When in manual mode, the compositor pulls visual updates whenever it calls <strong>Update</strong> on Direct Manipulation. +</p><p>Calling this method with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> set is similar to calling <strong>SetViewportOptions({{DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT}})</strong>. However, calling <strong>SetViewportOptions</strong> also overrides all other settings.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INPUT_MODE}}</strong>.</p> </dd> + + + + + <p> Stops the manipulation and returns the viewport to a ready state. +</p> + <p>If a mandatory snap point has been configured, the content may animate to the nearest snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Releases all resources that are used by the viewport and prepares it for destruction from memory. +</p> + <p>Once <strong>Abandon</strong> has been called, do not make subsequent function calls on the viewport. If a function is called after <strong>Abandon</strong>, <strong>{{E_INVALID_STATE}}</strong> will be returned.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides management of behaviors on a viewport. A behavior affects the functionality of a particular part of the Direct Manipulation workflow. </p> + <p><strong>{{IDirectManipulationViewport2}}</strong> can be used in place of <strong>{{IDirectManipulationViewport}}</strong>. +</p><p>Behaviors are created using <strong>{{IDirectManipulationManager2}}</strong> and an appropriate class {{ID}}.</p><p>A behavior can be attached or removed at any time and takes effect immediately (even during an active manipulation or inertia animation).</p> + + + + <p>Adds a behavior to the viewport and returns a cookie to the caller.</p> + <p>A behavior takes effect immediately after <strong>AddBehavior</strong> is called. This must be considered when adding a behavior during an active manipulation or inertia phase.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. Attaching a behavior that is already attached to this viewport or another viewport results in a failure.</p> + + + <dd> <p>A behavior created using the <strong>CreateBehavior</strong> method.</p> </dd> + + + <dd> <p>A cookie is returned so the caller can remove this behavior later. This allows the caller to release any reference on the behavior and let Direct Manipulation maintain an appropriate lifetime, similar to event handlers. </p> </dd> + + + + + <p>Removes a behavior from the viewport that matches the given cookie.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If the behavior has already been removed or if the behavior is not attached to this viewport a failure is returned.</p> + + + <dd> <p>A valid cookie returned from the <strong>AddBehavior</strong> call on the same viewport.</p> </dd> + + + + + <p>Removes all behaviors added to the viewport.</p> + <p><strong>RemoveAllBehaviors</strong> only returns an error if the removal of a behavior from the viewport was unsuccessful. In the event that a specific behavior is not removed successfully, <strong>RemoveAllBehaviors</strong> removes all remaining behaviors.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines methods for handling status and update events for the viewport.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + <p>Client apps implement this handler to receive status and update events for viewports. Use <strong>AddEventHandler</strong> to set the handler for a viewport. Each viewport can have more than one handler.</p> + + + + <p>Called when the status of a viewport changes.</p> + <p>If you call <strong>GetStatus</strong> from within this handler, the status returned is not guaranteed to be the same as at the time of the call. This is because of the asynchronous nature of the notification.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport for which status has changed.</p> </dd> + + + <dd> <p>The new status of the viewport.</p> </dd> + + + <dd> <p>The previous status of the viewport.</p> </dd> + + + + + <p>Called after all content in the viewport has been updated.</p> + <p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>. <strong>OnContentUpdated</strong> is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that has been updated.</p> </dd> + + + + + <p>Called when content inside a viewport is updated. +</p> + <p>This method is called once for each content change in the viewport. This can result in multiple <strong>OnContentUpdated</strong> calls. For instance, when the position of the content is changed, you can use <strong>{{IDirectManipualtionContent::GetContentTransform}}</strong> to retrieve the new value.</p><p>If you have actions that need to be executed once for a viewport update, implement <strong>OnViewportUpdated</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport that is updated.</p> </dd> + + + <dd> <p>The content in the viewport that has changed.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Retrieves the bounding rectangle of the content, relative to the bounding rectangle of the viewport (if defined).</p> + <p>If the bounding rectangle has not been set using <strong>SetContentRect</strong>, then <strong>{{UI_E_VALUE_NOT_SET}}</strong> is returned. However, the actual content rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Specifies the bounding rectangle of the content, relative to its viewport. +</p> + <p>The default bounding rectangle is (-{{FLT_MAX}}, -{{FLT_MAX}}, {{FLT_MAX}}, {{FLT_MAX}}).</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The bounding rectangle of the content.</p> </dd> + + + + + <p>Retrieves the viewport that contains the content.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use.</p> </dd> + + + <dd> <p>The viewport object.</p> </dd> + + + + + <p> </p><p>Retrieves the tag object set on this content. </p> + <p><strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p><strong>GetTag</strong> queries the tag value for the specified interface and returns a reference to that interface.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to identify a motion. +The parameters are optional, so that the method can return both parts of the tag, the identifier portion, or the tag object. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the identifier of the interface to use. The tag object typically implements this interface.</p> </dd> + + + <dd> <p>The tag object.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Specifies the tag object for the content. </p> + <p> <strong>GetTag</strong> and <strong>SetTag</strong> are useful for associating an external {{COM}} object with the content without an external mapping between the two. They can also be used to pass information to callbacks generated for the content.</p><p>A tag is a pairing of an integer {{ID}} (<em>id</em>) with a Component Object Model ({{COM}}) object (<em>object</em>). It can be used by an app to store and retrieve an arbitrary object associated with the content.</p><p>The <em>object</em> parameter is optional, so that the method can set just the identifier portion. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The object portion of the tag.</p> </dd> + + + <dd> <p>The {{ID}} portion of the tag.</p> </dd> + + + + + <p>Gets the final transform applied to the content.</p> + <p>This transform might contain the other custom curves applied during manipulation and inertia.</p><p>This transform contains both the content transform and the sync transform set with <strong>SyncContentTransform</strong>. +</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the transform applied to the content.</p> + <p>This transform contains the default overpan and bounce curves during manipulation and inertia.</p><p>This transform does not contain the sync transform set with <strong>SyncContentTransform</strong>.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl><p>When this method returns, the format of <em>matrix</em> is:</p><dl> <dd><em>matrix</em>[0]=ScaleX</dd> <dd><em>matrix</em>[1]=Unused</dd> <dd><em>matrix</em>[2]=Unused</dd> <dd><em>matrix</em>[3]=ScaleY +</dd> <dd><em>matrix</em>[4]=TranslateX</dd> <dd><em>matrix</em>[5]=TranslateY</dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Modifies the content transform while maintaining the output transform.</p> + <p>This method will fail if the viewport state is <strong>{{DIRECTMANIPULATION_RUNNING}}</strong>, <strong>{{DIRECTMANIPULATION_INERTIA}}</strong> or <strong>{{DIRECTMANIPULATION_SUSPENDED}}</strong>.</p><p>This method is useful when the application wants to apply transforms on top of the content transforms at the end of a manipulation, while preserving the visual output transform of the content.</p><p></p><dl> <dt>The relationship between the three primary transforms is defined as:</dt> <dd> <code>Output transform = Pixel rounding (Sync transform * Content transform)</code> </dd> </dl> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transform matrix.</p> </dd> + + + <dd> <p>The size of the transform matrix. This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p> Specifies snap points for the inertia end position at uniform intervals.</p> + <p>Snap point locations are in content coordinate units. </p><p>Specify snap points through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong>. </p><p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p><p>Snap points are not at boundaries by default. If you wish for content to stop at a boundary, a snap point must be set at the boundary.</p><p> Snap points set by <strong>SetSnapInterval</strong> can be cleared by calling <strong>SetSnapInterval</strong> with an interval of 0.0f.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>The interval between each snap point.</p> </dd> + + + <dd> <p>The offset from the coordinate specified in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + + + <p>Specifies the snap points for the inertia rest position.</p> + <p>If snap points are invalid (for example, outside of the content boundaries), they are ignored and the content is always within the content boundaries. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. If there is no change in the snap points, this method can return <strong>{{S_FALSE}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code. If invalid snap points are specified, existing snap points might be affected.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values. Only <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_X}}</strong>, <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATE_Y}}</strong>, or <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong> are allowed.</p> </dd> + + + <dd> <p>An array of snap points within the boundaries of the content to snap to. Should be specified in increasing order relative to the origin set in <strong>SetSnapCoordinate</strong>.</p> </dd> + + + <dd> <p> The size of the array of snap points. Should be greater than 0.</p> </dd> + + + + + <p>Specifies the type of snap point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more of the <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong> enumeration values.</p> </dd> + + + <dd> <p>One of the <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE}}</strong> enumeration values.</p> <p>If set to <strong>{{DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE}}</strong>, snap points specified through <strong>SetSnapPoints</strong> or <strong>SetSnapInterval</strong> are cleared.</p> </dd> + + + + + <p> Specifies the coordinate system for snap points or snap intervals. </p> + <p>The origin is relative to the content boundaries. If no boundary has been set (<strong>SetContentRect</strong> is never called) the default boundaries are (-{{FLT_MAX}}, {{FLT_MAX}}). </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. </p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong>. </p> <p>If <em>motion</em> is set to translation (<strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> or <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong>), all values of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> are valid. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, only <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> of <strong>{{DIRECTMANIPULATION_SNAPPOINT_COORDINATE}}</strong> is valid (<em>origin</em> must be set to 0.0f).</p> </dd> + + + <dd> <p>The initial, or starting, snap point. All snap points are relative to this one. Only used when <strong>{{DIRECTMANIPULATION_COORDINATE_ORIGIN}}</strong> is set. </p> <p>If <em>motion</em> is set to <strong>{{DIRECTMANIPULATION_MOTION_ZOOM}}</strong>, then <em>origin</em> must be set to 0.0f.</p> </dd> + + + + + <p>Specifies the minimum and maximum boundaries for zoom.</p> + <p>If the content is outside the new boundaries, and the viewport is {{ENABLED}} or {{READY}}, then the content is reset to be within the new boundaries. If inertia configuration is enabled, the reset operation uses an inertia animation. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The minimum zoom level allowed. Must be greater than or equal to 0.1f, which corresponds to 100% zoom.</p> </dd> + + + <dd> <p>The maximum zoom allowed. Must be greater than <em>zoomMinimum</em> and less than {{FLT_MAX}}.</p> </dd> + + + + + <p>Sets the horizontal alignment of the primary content relative to the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT}}</strong>. The default is <strong>{{DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE}}</strong>.</p> <strong>Note</strong>??You cannot combine the following options: {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT}}, {{DIRECTMANIPULATION}}-{{HORIZONTALALIGNMENT_CENTER}}, {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT}}. {{DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER}} can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Specifies the vertical alignment of the primary content in the viewport.</p> + <p>If you have activated a configuration consisting only of zoom or zoom inertia, specify <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> to respect the zoom center point.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One or more values from <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT}}</strong>.</p> <strong>Note</strong>??You cannot combine <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_TOP}}</strong>, <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER}}</strong>, or <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM}}</strong>. <strong>{{DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER}}</strong> can be combined with any option but cannot be configured by itself. ? </dd> + + + + + <p>Gets the final transform, including inertia, of the primary content.</p> + <strong>Warning</strong>??Calling this method can cause a race condition if inertia has ended or been interrupted. This can also occur during the <strong>OnViewportStatusChanged</strong> callback.? + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The transformed matrix that represents the inertia ending position.</p> </dd> + + + <dd> <p>The size of the matrix. </p> <p> This value is always 6, because a 3x2 matrix is used for all direct manipulation transforms.</p> </dd> + + + + + <p> Retrieves the center point of the manipulation in content coordinates. If there is no manipulation in progress, retrieves the center point of the viewport.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The center on the horizontal axis.</p> </dd> + + + <dd> <p>The center on the vertical axis.</p> </dd> + + + + + <p>Defines methods to handle drag-drop behavior events.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when a status change happens in the viewport that the drag-and-drop behavior is attached to. </p> + <p>If a class is implementing <strong>{{IDirectManipulationViewportEventHandler}}</strong> it should also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong> if that viewport will use drag and drop. Direct Manipulation will query the <strong>{{IDirectManipulationViewportEventHandler}}</strong> instances to verify that they also implement <strong>{{IDirectManipulationDragDropEventHandler}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated viewport.</p> </dd> + + + <dd> <p>The current state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + <dd> <p>The previous state of the drag-drop interaction from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>. </p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Sets the configuration of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>The configuration of the behavior can be set before or after it has been added to a viewport. If a configuration change is made while an interaction is occurring, the new configuration takes effect on the next interaction. ? +</p><p> <strong>{{IDirectManipulationViewport::ActivateConfiguration}}</strong> should not be called prior to calling <strong>{{IDirectManipulationDragDropBehavior::SetConfiguration}}</strong>. This will result in unexpected behavior.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Combination of values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION}}</strong>.</p> <p>For the configuration to be valid, <em>configuration</em> must contain exactly one of the following three values: +</p><ul> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong></li> <li><strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong></li> </ul> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_ONLY}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_SELECT_DRAG}}</strong> is specified, one of <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> or <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> is required. +</p> <p>If <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HOLD_DRAG}}</strong> is specified, both <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_VERTICAL}}</strong> and <strong>{{DIRECTMANIPULATION_DRAG_DROP_CONFIGURATION_HORIZONTAL}}</strong> are required. +</p> </dd> + + + + + <p>Gets the status of the drag-drop interaction for the viewport this behavior is attached to. </p> + <p>This method returns the drag-drop status at the time of the call and not at the time when the return value is read.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_DRAG_DROP_STATUS}}</strong>.</p> </dd> + + + + + <p>Defines methods to handle interactions when they are detected.</p><strong>Note</strong>??When implementing this interface, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Called when an interaction is detected.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The viewport on which the interaction was detected.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_INTERACTION_TYPE}}</strong>.</p> </dd> + + + + + <p>Represents a time-keeping object that measures the latency of the composition infrastructure used by the application and provides this data to Direct Manipulation. +</p> + + + + <p>Retrieves the composition timing information from the compositor.</p> + <p>The system implementation of <strong>{{IDirectManipulationFrameInfoProvider}}</strong> uses DirectComposition. <strong>GetFrameStatistics</strong> is used to calculate the parameter values for <strong>GetNextFrameInfo</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The current time, in milliseconds.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor begins constructing the next frame.</p> </dd> + + + <dd> <p>The time, in milliseconds, when the compositor finishes composing and drawing the next frame on the screen.</p> </dd> + + + + + <p> </p><p>Represents a compositor object that associates manipulated content with a drawing surface, such as <strong>canvas</strong> (Windows Store app using JavaScript) or <strong>Canvas</strong> (Windows Store app using C++, C#, or Visual Basic).</p> + <p>The content of a Direct Manipulation viewport must be manually updated during an input event for custom implementations of <strong>{{IDirectManipulationCompositor}}</strong>. Call <strong>Update</strong> to redraw the content within the viewport. </p><p>You specify manual mode on a viewport by calling either of these functions:</p><ul> <li> <strong>SetViewportOptions</strong>, with <strong>{{DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE}}</strong> specified.</li> <li> <strong>SetUpdateMode</strong>, with <strong>{{DIRECTMANIPULATION_INPUT_MODE_MANUAL}}</strong> specified.</li> </ul> + + + + <p>Associates content (owned by the caller) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. </p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. This can be primary content, obtained from the viewport by calling <strong>GetPrimaryContent</strong>, or secondary content, such as a panning indicator, created by calling <strong>CreateContent</strong>. +</p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Removes content from the compositor.</p> + <p>This method removes content added with <strong>AddContent</strong> and restores the original relationships between parent visuals and child visuals in the composition tree. In other words, <strong>RemoveContent</strong> undoes <strong>AddContent</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to remove from the composition tree.</p> </dd> + + + + + <p> </p><p> Sets the update manager used to send compositor updates to Direct Manipulation. </p> + <p>Retrieve <em>updateManager</em> by calling <strong>GetUpdateManager</strong>.</p><p>Call this method during Direct Manipulation initialization to connect the compositor to the <em>update manager</em>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Commits all pending updates in the compositor to the system for rendering.</p> + <p>This method enables Direct Manipulation to flush any pending changes to its visuals before a system event, such as a process suspension.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p>Associates content (owned by the component host) with the compositor, assigns a composition device to the content, and specifies the position of the content in the composition tree relative to other composition visuals. Represents a compositor object that associates manipulated content with drawing surfaces across multiple processes.</p> + <p>This method inserts a small visual tree (owned by the Direct Manipulation device) between the <em>parentVisual</em> and the <em>childVisual</em>. Transforms can then be applied to the inserted content. +</p><p>All content, regardless of type, must be added to the compositor. </p><p>If the application uses a system-provided <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em> must be an <strong>{{IDCompositionDevice}}</strong> object, and parent and child visuals must be <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> cannot be {{NULL}}. </li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> objects are created and owned by the application. +</li> <li>When content is added to the composition tree using this method, the new composition visuals are inserted between <em>parentVisual</em> and <em>childVisual</em>. The new visuals should not be destroyed until they are disassociated from the compositor with <strong>RemoveContent</strong>.</li> </ul><p>If the application uses a custom implementation of <strong>{{IDirectManipulationCompositor}}</strong>:</p><ul> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> must be a valid type for the compositor. They do not have to be <strong>{{IDCompositionDevice}}</strong> or <strong>{{IDCompositionVisual}}</strong> objects.</li> <li><em>device</em>, <em>parentVisual</em>, and <em>childVisual</em> can be {{NULL}}, depending on the compositor. </li> </ul><p>The cross-process reference events (<strong>{{WM_POINTERROUTEDAWAY}}</strong>, <strong>{{WM_POINTERROUTEDRELEASED}}</strong>, and <strong>{{WM_POINTERROUTEDTO}}</strong>) should be handled appropriately. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The content to add to the composition tree.</p> <p><em>content</em> is placed between <em>parentVisual</em> and <em>childVisual</em> in the composition tree. </p> <p>Only primary content, created at the same time as the viewport, is valid.</p> </dd> + + + <dd> <p>The device used to compose the content. </p> <strong>Note</strong>??<em>device</em> is created by the application. ? </dd> + + + <dd> <p>The parent visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + <dd> <p>The child visuals in the composition tree of the content being added.</p> <p><em>parentVisual</em> must also be a parent of <em>childVisual</em> in the composition tree.</p> </dd> + + + + + <p> </p><p>Defines methods for handling manipulation update events.</p><strong>Note</strong>??When implementing a Direct Manipulation object, ensure that the <strong>{{IUnknown}}</strong> implementation supports multithreading through thread-safe reference counting. For more information, see <strong>InterlockedIncrement</strong> and <strong>InterlockedDecrement</strong>.? + + + + <p>Notifies the compositor when to update inertia animation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Manages how compositor updates are sent to Direct Manipulation.</p><p>This interface enables the compositor to trigger an update on Direct Manipulation whenever there is a compositor update. The application should not call the methods of this interface directly. +</p> + + + + <p>Registers a callback that is triggered by a handle.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The event handle that triggers the callback.</p> </dd> + + + <dd> <p>The event handler to call when the event is fired.</p> </dd> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Deregisters a callback.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The unique {{ID}} of the event callback instance.</p> </dd> + + + + + <p>Updates Direct Manipulation at the current time.</p> + <p>If the application provides its own implementation of <strong>{{IDirectManipulationCompositor}}</strong>, this implementation should call <strong>Update</strong> whenever there is a compositor update. Frame timing information can be provided to Direct Manipulation through the <strong>{{IDirectManipulationFrameInfoProvider}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents the auto-scroll animation behavior of content as it approaches the boundary of a given axis or axes.</p> + + + + <p>Performs the auto-scroll animation for the viewport this behavior is attached to. </p> + <p><strong>SetConfiguration</strong> takes effect immediately. If the content is not in inertia, and <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION_STOP}}</strong> is specified for <em>scrollMotion</em>, then this method returns {{S_FALSE}}. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEX}}</strong> and <strong>{{DIRECTMANIPULATION_MOTION_TRANSLATEY}}</strong> from <strong>{{DIRECTMANIPULATION_MOTION_TYPES}}</strong>. <strong>{{DIRECTMANIPULATION_MOTION_NONE}}</strong> cannot be specified.</p> </dd> + + + <dd> <p>One of the values from <strong>{{DIRECTMANIPULATION_AUTOSCROLL_CONFIGURATION}}</strong>. </p> </dd> + + + + + <p>Represents a service for managing associations between a contact and a viewport.</p><p> <strong>SetContact</strong> is called when a <strong>{{WM_POINTERDOWN}}</strong> message is received. Upon receiving a <strong>{{WM_POINTERDOWN}}</strong>, the application can use the coordinates of the input to hit-test and determine the viewports to which the contact is associated. +</p> + + + + <p>Specifies the amount of time to defer the execution of a call to <strong>SetContact</strong> for this <em>referenceId</em>.</p><p><strong>DeferContact</strong> must be called before <strong>SetContact</strong>.</p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel all scheduled calls to <strong>SetContact</strong> for this <em>referenceId</em>. </p> + <p>This function fails if the timeout specified in <strong>DeferContact</strong> has already been reached. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Cancel the deferral set in <strong>DeferContact</strong> and process the scheduled <strong>SetContact</strong> call for this <em>referenceId</em>. </p> + <p>If the method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Flags indicating the memory location of a resource.</p> + <p>This enum is used by <strong>QueryResourceResidency</strong>.</p> + + + <dd> <p>The resource is located in video memory.</p> </dd> + + + <dd> <p>At least some of the resource is located in {{CPU}} memory.</p> </dd> + + + <dd> <p>At least some of the resource has been paged out to the hard drive.</p> </dd> + + + + + <p> Options for handling pixels in a display surface after calling <strong>{{IDXGISwapChain1::Present1}}</strong>. </p> + <p> This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong>structures. </p><p> To use multisampling with <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling <strong>{{ID3D11Device::CreateTexture2D}}</strong> with a filled <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure (<strong>BindFlags</strong> member set to <strong>{{D3D11_BIND_RENDER_TARGET}}</strong> and <strong>SampleDesc</strong> member with multisampling parameters). Next call <strong>{{ID3D11Device::CreateRenderTargetView}}</strong> to create a render-target view for the texture, and render your scene into the texture. Finally call <strong>{{ID3D11DeviceContext::ResolveSubresource}}</strong> to resolve the multisampled texture into your non-multisampled swap chain. </p><p> The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager ({{DWM}}) for composition. In the bitblt model, which is used with the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> and <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> values, contents of the back buffer get copied into the redirection surface on each call to <strong>{{IDXGISwapChain1::Present1}}</strong>. In the flip model, which is used with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value, all back buffers are shared with the {{DWM}}. Therefore, the {{DWM}} can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics. </p><p> When you call <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip model swap chain (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>) with 0 specified in the <em>SyncInterval</em> parameter, <strong>{{IDXGISwapChain1::Present1}}</strong>'s behavior is the same as the behavior of Direct3D 9Ex's <strong>{{IDirect3DDevice9Ex::PresentEx}}</strong> with <strong>{{D3DSWAPEFFECT_FLIPEX}}</strong> and {{D3DPRESENT_FORCEIMMEDIATE}}. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames. </p><p> Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix {{GDI}} and DirectX presentation. In the flip model, the application must create the swap chain with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, and then must use <strong>GetDC</strong> on the back buffer explicitly. After the first successful call to <strong>{{IDXGISwapChain1::Present1}}</strong> on a flip-model swap chain, {{GDI}} no longer works with the <strong>{{HWND}}</strong> that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like <strong>ScrollWindowEx</strong>. </p><p> For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas. </p> + + + + <p>Options for swap-chain behavior.</p> + <p>This enumeration is used by the <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> structure and the <strong>{{IDXGISwapChain::ResizeTarget}}</strong> method.</p><p>This enumeration is also used by the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>You don't need to set <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> for swap chains that you create in full-screen mode with the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method because those swap chains already behave as if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. That is, presented content is not accessible by remote access or through the <strong>desktop duplication {{APIs}}</strong>.</p><p>Swap chains that you create with the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, and <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> methods are not protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is not set and are protected if <strong>{{DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY}}</strong> is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the <strong>desktop duplication {{APIs}}</strong>.</p><p>When you call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> to change the swap chain's back buffer, you can reset or change all <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> flags.</p> + + + <dd> <p>Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode. </p> </dd> + + + <dd> <p>Set this flag to enable an application to switch modes by calling <strong>{{IDXGISwapChain::ResizeTarget}}</strong>. When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.</p> </dd> + + + <dd> <p>Set this flag to enable an application to render using {{GDI}} on a swap chain or a surface. This will allow the application to call <strong>{{IDXGISurface1::GetDC}}</strong> on the 0th back buffer or a surface.</p> </dd> + + + <dd> <p>Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the <strong>desktop duplication {{APIs}}</strong>. </p> <p>This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and {{APIs}}.</p> <p>If you use this flag with windowed (<strong>{{HWND}}</strong> or <strong>{{IWindow}}</strong>) swap chains where another process created the <strong>{{HWND}}</strong>, the owner of the <strong>{{HWND}}</strong> must use the <strong>SetWindowDisplayAffinity</strong> function appropriately in order to allow calls to <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> to succeed. +</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> {{API}} instead of <strong>{{IDXGIDevice1::SetMaximumFrameLatency}}</strong>.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with <strong>CoreWindow</strong> swap chains, which are created with <strong>CreateSwapChainForCoreWindow</strong>. Apps should not create foreground swap chains if <strong>{{IDXGIOutput2::SupportsOverlays}}</strong> indicates that hardware support for overlays is not available.</p> <p>Note that <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> cannot be used to add or remove this flag.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for full-screen video. </p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Set this flag to create a swap chain for {{YUV}} video.</p> <p><strong>Note</strong>??This enumeration value is supported starting with Windows?8.1.</p> </dd> + + + <dd> <p>Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.</p> <p>This flag has the following restrictions:</p> <ul> <li>This flag can only be used with swap effect <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>.</li> </ul> <strong>Note</strong>??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the {{DRM}} components are first initialized prior to any guarantees of protection. ? <p><strong>Note</strong>??This enumeration value is supported starting with Windows?10.</p> </dd> + + + <dd> <p>Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling <strong>SetFullscreenState</strong>({{TRUE}}), but the recommended approach for Win32 developers is to use this tearing flag instead.</p> <p>To check for hardware support of this feature, refer to <strong>{{IDXGIFactory5::CheckFeatureSupport}}</strong>. For usage information refer to <strong>{{IDXGISwapChain::Present}}</strong> and the <strong>{{DXGI_PRESENT}}</strong> flags.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p>Describes timing and presentation statistics for a frame.</p> + <p>You initialize the <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure with the <strong>{{IDXGIOutput::GetFrameStatistics}}</strong> or <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> method.</p><p>You can only use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p><p>The values in the <strong>PresentCount</strong> and <strong>PresentRefreshCount</strong> members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the <strong>SyncRefreshCount</strong> and <strong>SyncQPCTime</strong> members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. +If the swap chain draws in windowed mode, these values are based on when the swap chain is created.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + + + <p>Describes a mapped rectangle that is used to access a surface.</p> + <p>The <strong>{{DXGI_MAPPED_RECT}}</strong> structure is initialized by the <strong>{{IDXGISurface::Map}}</strong> method.</p> + + + <dd> <p>A value that describes the width, in bytes, of the surface.</p> </dd> + + + <dd> <p>A reference to the image buffer of the surface.</p> </dd> + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p>Represents a handle to a shared resource.</p> + <p>To create a shared surface, pass a shared-resource handle into the <strong>{{IDXGIDevice::CreateSurface}}</strong> method.</p> + + + <dd> <p>A handle to a shared resource.</p> </dd> + + + + + <p>Describes a surface.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSurface</strong> methods.</p> + + + <dd> <p>A value describing the surface width.</p> </dd> + + + <dd> <p>A value describing the surface height.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_FORMAT}}</strong> enumerated type that describes the surface format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters for the surface.</p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>GetDesc</strong> and <strong>CreateSwapChain</strong> methods.</p><p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>If you create a swap chain with one buffer, specifying <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> does not cause the contents of the single buffer to be swapped with the front buffer.</p><p>For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.</p> + + + <dd> <p>A <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the backbuffer display mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_USAGE}}</strong> enumerated type that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you call <strong>{{IDXGIFactory::CreateSwapChain}}</strong> to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.</p> </dd> + + + <dd> <p>An <strong>{{HWND}}</strong> handle to the output window. This member must not be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the output is in windowed mode. <strong>{{TRUE}}</strong> if the output is in windowed mode; otherwise, <strong>{{FALSE}}</strong>. </p> <p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>; that is, do not set this member to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the <strong>BufferDesc</strong> member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. </p> <p>For more information about choosing windowed verses full screen, see <strong>{{IDXGIFactory::CreateSwapChain}}</strong>.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_EFFECT}}</strong> enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> enumerated type that describes options for swap-chain behavior.</p> </dd> + + + + + <p>Describes an adapter (or video card) using {{DXGI}} 1.1.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure provides a {{DXGI}} 1.1 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + + + <p> Don't use this structure; it is not supported and it will be removed from the header in a future release. </p> + + + <dd> <p> The primary coordinates, as an 8 by 2 array of {{FLOAT}} values. </p> </dd> + + + <dd> <p> The white points, as a 16 by 2 array of {{FLOAT}} values. </p> </dd> + + + + + <p> An <strong>{{IDXGIObject}}</strong> interface is a base interface for all {{DXGI}} objects; <strong>{{IDXGIObject}}</strong> supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object. </p> + <p><strong>{{IDXGIObject}}</strong> implements base-class functionality for the following interfaces: </p><ul> <li> <strong>{{IDXGIAdapter}}</strong> </li> <li> <strong>{{IDXGIDevice}}</strong> </li> <li> <strong>{{IDXGIFactory}}</strong> </li> <li> <strong>{{IDXGIOutput}}</strong> </li> </ul><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets application-defined data to the object and associates that data with a {{GUID}}.</p> + <p><strong>SetPrivateData</strong> makes a copy of the specified data and stores it with the object.</p><p>Private data that <strong>SetPrivateData</strong> stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through <strong>{{ID3D11Device::SetPrivateData}}</strong> or by a Direct3D?11 child device through <strong>{{ID3D11DeviceChild::SetPrivateData}}</strong>).</p><p>The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "&lt;unnamed&gt;". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the <strong>SetPrivateData</strong> method and the well-known private data {{GUID}} (<strong>{{WKPDID_D3DDebugObjectName}}</strong>) that is in {{D3Dcommon}}.h. For example, to give pContext a friendly name of <em>My name</em>, use the following code:</p><pre> static const char c_szName[] = "My name"; +hr = pContext-&gt;SetPrivateData( {{WKPDID_D3DDebugObjectName}}, sizeof( c_szName ) - 1, c_szName ); +</pre><p>You can use <strong>{{WKPDID_D3DDebugObjectName}}</strong> to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks (<strong>{{ID3D11Debug::ReportLiveDeviceObjects}}</strong>) and with the event tracing for Windows events that we've added to Windows?8. +</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A {{GUID}} that identifies the data. Use this {{GUID}} in a call to <strong>GetPrivateData</strong> to get the data.</p> </dd> + + + <dd> <p>The size of the object's data.</p> </dd> + + + <dd> <p>A reference to the object's data.</p> </dd> + + + + + <p>Set an interface in the object's private data.</p> + <p>This {{API}} associates an interface reference with the object.</p><p>When the interface is set its reference count is incremented. When the data are overwritten (by calling {{SPD}} or {{SPDI}} with the same {{GUID}}) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the interface.</p> </dd> + + + <dd> <p>The interface to set.</p> </dd> + + + + + <p>Get a reference to the object's data.</p> + <p>If the data returned is a reference to an <strong>{{IUnknown}}</strong>, or one of its derivative classes, previously set by <strong>{{IDXGIObject::SetPrivateDataInterface}}</strong>, you must call <strong>::Release()</strong> on the reference before the reference is freed to decrement the reference count.</p><p>You can pass <strong>{{GUID_DeviceType}}</strong> in the <em>Name</em> parameter of <strong>GetPrivateData</strong> to retrieve the device type from the display adapter object (<strong>{{IDXGIAdapter}}</strong>, <strong>{{IDXGIAdapter1}}</strong>, <strong>{{IDXGIAdapter2}}</strong>). </p><p><strong>To get the type of device on which the display adapter was created</strong></p><ol> <li>Call <strong>{{IUnknown::QueryInterface}}</strong> on the <strong>{{ID3D11Device}}</strong> or <strong>{{ID3D10Device}}</strong> object to retrieve the <strong>{{IDXGIDevice}}</strong> object.</li> <li>Call <strong>GetParent</strong> on the <strong>{{IDXGIDevice}}</strong> object to retrieve the <strong>{{IDXGIAdapter}}</strong> object.</li> <li>Call <strong>GetPrivateData</strong> on the <strong>{{IDXGIAdapter}}</strong> object with <strong>{{GUID_DeviceType}}</strong> to retrieve the type of device on which the display adapter was created. <em>pData</em> will point to a value from the driver-type enumeration (for example, a value from <strong>{{D3D_DRIVER_TYPE}}</strong>).</li> </ol><p>On Windows?7 or earlier, this type is either a value from <strong>{{D3D10_DRIVER_TYPE}}</strong> or <strong>{{D3D_DRIVER_TYPE}}</strong> depending on which kind of device was created. On Windows?8, this type is always a value from <strong>{{D3D_DRIVER_TYPE}}</strong>. Don't use <strong>{{IDXGIObject::SetPrivateData}}</strong> with <strong>{{GUID_DeviceType}}</strong> because the behavior when doing so is undefined.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A {{GUID}} identifying the data.</p> </dd> + + + <dd> <p>The size of the data.</p> </dd> + + + <dd> <p>Pointer to the data.</p> </dd> + + + + + <p>Gets the parent of the object.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>The {{ID}} of the requested interface.</p> </dd> + + + <dd> <p>The address of a reference to the parent object.</p> </dd> + + + + + <p>Inherited from objects that are tied to the device so that they can retrieve a reference to it.</p> + <p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Retrieves the device.</p> + <p>The type of interface that is returned can be any interface published by the device. For example, it could be an {{IDXGIDevice}} * called pDevice, and therefore the {{REFIID}} would be obtained by calling __uuidof(pDevice).</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}).</p> + + + <dd> <p>The reference id for the device.</p> </dd> + + + <dd> <p>The address of a reference to the device.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetSharedHandle</strong> anymore to retrieve the handle to a shared resource. Instead, use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> to get a handle for sharing. To use <strong>{{IDXGIResource1::CreateSharedHandle}}</strong>, you must create the resource as shared and specify that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> flag). We also recommend that you create shared resources that use {{NT}} handles so you can use <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on on those shared resources.]</p><p>Gets the handle to a shared resource.</p> + <p><strong>GetSharedHandle</strong> returns a handle for the resource that you created as shared (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED}}</strong> with or without the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag). You can pass this handle to the <strong>{{ID3D11Device::OpenSharedResource}}</strong> method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an {{NT}} handle. Therefore, don't use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on.</p><p>The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.</p><p><strong>GetSharedHandle</strong> can also return handles for resources that were passed into <strong>{{ID3D11Device::OpenSharedResource}}</strong> to open those resources.</p><p><strong>GetSharedHandle</strong> fails if the resource to which it wants to get a handle is not shared.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Get the expected resource usage.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a usage flag (see {{DXGI_USAGE}}). For Direct3D 10, a surface can be used as a shader input or a render-target output.</p> </dd> + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get the eviction priority.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} to determine how to manage overcommitted memory.</p><p>Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the eviction priority, which determines when a resource can be evicted from memory. </p> <p>The following defined values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.</p> + <p>The <strong>{{IDXGIFactory1}}</strong> is required to create a resource capable of supporting the <strong>{{IDXGIKeyedMutex}}</strong> interface.</p><p>An <strong>{{IDXGIKeyedMutex}}</strong> should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flag.</p><p>For information about creating a keyed mutex, see the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method.</p> + + + + <p>Using a key, acquires exclusive rendering access to a shared resource.</p> + <p>The <strong>AcquireSync</strong> method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>AcquireSync</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p><p>The <strong>AcquireSync</strong> method uses the key as follows, depending on the state of the surface:</p><ul> <li>On initial creation, the surface is unowned and any device can call the <strong>AcquireSync</strong> method to gain access. For an unowned device, only a key of 0 will succeed. Calling the <strong>AcquireSync</strong> method for any other key will stall the calling {{CPU}} thread.</li> <li>If the surface is owned by a device when you call the <strong>AcquireSync</strong> method, the {{CPU}} thread that called the <strong>AcquireSync</strong> method will stall until the owning device calls the <strong>ReleaseSync</strong> method using the same Key.</li> <li>If the surface is unowned when you call the <strong>AcquireSync</strong> method (for example, the last owning device has already called the <strong>ReleaseSync</strong> method), the <strong>AcquireSync</strong> method will succeed if you specify the same key that was specified when the <strong>ReleaseSync</strong> method was last called. Calling the <strong>AcquireSync</strong> method using any other key will cause a stall.</li> <li>When the owning device calls the <strong>ReleaseSync</strong> method with a particular key, and more than one device is waiting after calling the <strong>AcquireSync</strong> method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.</li> <li>A keyed mutex does not support recursive calls to the <strong>AcquireSync</strong> method.</li> </ul> + <p>Return {{S_OK}} if successful.</p><p>If the owning device attempted to create another keyed mutex on the same shared resource, <strong>AcquireSync</strong> returns {{E_FAIL}}.</p><p><strong>AcquireSync</strong> can also return the following <strong>{{DWORD}}</strong> constants. Therefore, you should explicitly check for these constants. If you only use the <strong>{{SUCCEEDED}}</strong> macro on the return value to determine if <strong>AcquireSync</strong> succeeded, you will not catch these constants.</p><ul> <li>{{WAIT_ABANDONED}} - The shared surface and keyed mutex are no longer in a consistent state. If <strong>AcquireSync</strong> returns this value, you should release and recreate both the keyed mutex and the shared surface.</li> <li>{{WAIT_TIMEOUT}} - The time-out interval elapsed before the specified key was released.</li> </ul> + + + <dd> <p>A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the <strong>{{IDXGIKeyedMutex::ReleaseSync}}</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + <dd> <p>The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified <em>Key</em>. If this value is set to zero, the <strong>AcquireSync</strong> method will test to see if the keyed mutex has been released and returns immediately. If this value is set to {{INFINITE}}, the time-out interval will never elapse.</p> </dd> + + + + + <p>Using a key, releases exclusive rendering access to a shared resource.</p> + <p>The <strong>ReleaseSync</strong> method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.</p><p>When a surface is created using the <strong>{{D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> value of the <strong>{{D3D10_RESOURCE_MISC_FLAG}}</strong> enumeration, you must call the <strong>{{IDXGIKeyedMutex::AcquireSync}}</strong> method before rendering to the surface. You must call the <strong>ReleaseSync</strong> method when you are done rendering to a surface.</p><p>After you call the <strong>ReleaseSync</strong> method, the shared resource is unset from the rendering pipeline. </p><p>To acquire a reference to the keyed mutex object of a shared resource, call the <strong>QueryInterface</strong> method of the resource and pass in the <strong>{{UUID}}</strong> of the <strong>{{IDXGIKeyedMutex}}</strong> interface. For more information about acquiring this reference, see the following code example.</p> + <p>Returns {{S_OK}} if successful.</p><p>If the device attempted to release a keyed mutex that is not valid or owned by the device, <strong>ReleaseSync</strong> returns {{E_FAIL}}.</p> + + + <dd> <p>A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the <strong>ReleaseSync</strong> method using the same value. This value can be any {{UINT64}} value.</p> </dd> + + + + + <p>The <strong>{{IDXGISurface}}</strong> interface implements methods for image-data objects.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. </p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>.</p> + + + + <p>Get a description of the surface.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface description (see <strong>{{DXGI_SURFACE_DESC}}</strong>).</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + <p>The <strong>{{IDXGISurface1}}</strong> interface extends the <strong>{{IDXGISurface}}</strong> by adding support for using Windows Graphics Device Interface ({{GDI}}) to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface1}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface1}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface1}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface1}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface1}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface1}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface1}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface1}}</strong>.</p> + + + + <p>Returns a device context ({{DC}}) that allows you to render to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface using Windows Graphics Device Interface ({{GDI}}).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>After you use the <strong>GetDC</strong> method to retrieve a {{DC}}, you can render to the {{DXGI}} surface by using {{GDI}}. The <strong>GetDC</strong> method readies the surface for {{GDI}} rendering and allows inter-operation between {{DXGI}} and {{GDI}} technologies. </p><p>Keep the following in mind when using this method:</p><ul> <li>You must create the surface by using the <strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong> flag for a surface or by using the <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong> flag for swap chains, otherwise this method fails.</li> <li>You must release the device and call the <strong>{{IDXGISurface1::ReleaseDC}}</strong> method before you issue any new Direct3D commands.</li> <li>This method fails if an outstanding {{DC}} has already been created by this method.</li> <li>The format for the surface or swap chain must be <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> or <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</li> <li>On <strong>GetDC</strong>, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the <strong>{{ID3D11DeviceContext::OMSetRenderTargets}}</strong> method on the device prior to Direct3D rendering after {{GDI}} rendering.</li> <li>Prior to resizing buffers you must release all outstanding {{DCs}}.</li> </ul><p> You can also call <strong>GetDC</strong> on the back buffer at index 0 of a swap chain by obtaining an <strong>{{IDXGISurface1}}</strong> from the swap chain. The following code illustrates the process.</p><pre> {{IDXGISwapChain}}* g_pSwapChain = {{NULL}}; +{{IDXGISurface1}}* g_pSurface1 = {{NULL}}; +... +//Setup the device and and swapchain +g_pSwapChain-&gt;GetBuffer(0, __uuidof({{IDXGISurface1}}), (void**) &amp;g_pSurface1); +g_pSurface1-&gt;GetDC( {{FALSE}}, &amp;g_hDC ); +... +//Draw on the {{DC}} using {{GDI}} +... +//When finish drawing release the {{DC}} +g_pSurface1-&gt;ReleaseDC( {{NULL}} ); </pre> + <p>Returns {{S_OK}} if successful; otherwise, an error code.</p> + + + <dd> <p>A Boolean value that specifies whether to preserve Direct3D contents in the {{GDI}} {{DC}}. <strong>{{TRUE}}</strong> directs the runtime not to preserve Direct3D contents in the {{GDI}} {{DC}}; that is, the runtime discards the Direct3D contents. <strong>{{FALSE}}</strong> guarantees that Direct3D contents are available in the {{GDI}} {{DC}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{HDC}}</strong> handle that represents the current device context for {{GDI}} rendering.</p> </dd> + + + + + <p>Releases the {{GDI}} device context ({{DC}}) that is associated with the current surface and allows you to use Direct3D to render.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>ReleaseDC</strong> method to release the {{DC}} and indicate that your application finished all {{GDI}} rendering to this surface. You must call the <strong>ReleaseDC</strong> method before you can use Direct3D to perform additional rendering.</p><p>Prior to resizing buffers you must release all outstanding {{DCs}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for {{GDI}} rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in <strong>{{NULL}}</strong>, <strong>ReleaseDC</strong> considers the whole surface as dirty. Otherwise, <strong>ReleaseDC</strong> uses the area specified by the {{RECT}} as a performance hint to indicate what areas have been manipulated by {{GDI}} rendering.</p> <p>You can pass a reference to an empty <strong>{{RECT}}</strong> structure (a rectangle with no position or area) if you didn't change any content.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerate adapter (video card) outputs.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>When the <strong>EnumOutputs</strong> method succeeds and fills the <em>ppOutput</em> parameter with the address of the reference to the output interface, <strong>EnumOutputs</strong> increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the <strong>Release</strong> method to decrement the reference count.</p><p><strong>EnumOutputs</strong> first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. <strong>EnumOutputs</strong> then returns other outputs.</p> + <p>A code that indicates success or failure (see {{DXGI_ERROR}}). {{DXGI_ERROR_NOT_FOUND}} is returned if the index is greater than the number of outputs.</p><p>If the adapter came from a device created using {{D3D_DRIVER_TYPE_WARP}}, then the adapter has no outputs, so {{DXGI_ERROR_NOT_FOUND}} is returned. +</p> + + + <dd> <p>The index of the output.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIOutput}}</strong> interface at the position specified by the <em>Output</em> parameter.</p> </dd> + + + + + <p>Gets a {{DXGI}} 1.0 description of an adapter (or video card).</p> + <p>Graphics apps can use the {{DXGI}} {{API}} to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model ({{WDDM}}) drivers. The following are the critical steps involved.</p><ul> <li> Graphics driver model determination ? Because {{DXGI}} is only available on systems with {{WDDM}} drivers, the app must first confirm the driver model by using the following {{API}}. <pre> HasWDDMDriver() +{ {{LPDIRECT3DCREATE9EX}} pD3D9Create9Ex = {{NULL}}; {{HMODULE}} hD3D9 = {{NULL}}; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( {{NULL}} == hD3D9 ) { return false; } // /* Try to create {{IDirect3D9Ex}} interface (also known as a {{DX9L}} interface). This interface can only be created if the driver is a {{WDDM}} driver. */ // pD3D9Create9Ex = ({{LPDIRECT3DCREATE9EX}}) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != {{NULL}}; +} </pre> </li> <li> Retrieval of graphics memory values.? After the app determines the driver model to be {{WDDM}}, the app can use the Direct3D 10 or later {{API}} and {{DXGI}} to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that contains the amount of available graphics memory. <pre> {{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +{{IDXGIAdapter}} * pDXGIAdapter; +pDXGIDevice-&gt;GetAdapter(&amp;pDXGIAdapter); +{{DXGI_ADAPTER_DESC}} adapterDesc; +pDXGIAdapter-&gt;GetDesc(&amp;adapterDesc); </pre> </li> </ul> + <p>Returns {{S_OK}} if successful; otherwise returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p>Checks whether the system supports a device interface for a graphics component.</p> + <strong>Note</strong>??You can use <strong>CheckInterfaceSupport</strong> only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista {{SP1}} and later versions of the operating system. If you try to use <strong>CheckInterfaceSupport</strong> to check whether a Direct3D 11.x and later version interface is supported, <strong>CheckInterfaceSupport</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Therefore, do not use <strong>CheckInterfaceSupport</strong>. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the <strong>{{ID3D11Device::CreateBlendState}}</strong> method and it fails, the operating system does not support the <strong>{{ID3D11BlendState}}</strong> interface.? + <p>{{S_OK}} indicates that the interface is supported, otherwise {{DXGI_ERROR_UNSUPPORTED}} is returned (For more information, see {{DXGI_ERROR}}).</p> + + + <dd> <p>The {{GUID}} of the interface of the device version for which support is being checked. For example, __uuidof({{ID3D10Device}}).</p> </dd> + + + <dd> <p>The user mode driver version of <em>InterfaceName</em>. This is returned only if the interface is supported, otherwise this parameter will be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Get a description of the output.</p> + <p> On a high {{DPI}} desktop, <strong>GetDesc</strong> returns the visualized screen size unless the app is marked high {{DPI}} aware. For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> + <p>Returns a code that indicates success or failure. {{S_OK}} if successful, {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> is passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to the output description (see <strong>{{DXGI_OUTPUT_DESC}}</strong>).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>FindClosestMatchingMode</strong> anymore to find the display mode that most closely matches the requested display mode. Instead, use <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong>, which supports stereo display mode.]</p><p>Finds the display mode that most closely matches the requested display mode.</p> + <p><strong>FindClosestMatchingMode</strong> behaves similarly to the <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> except <strong>FindClosestMatchingMode</strong> considers only the mono display modes. <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> considers only stereo modes if you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure that <em>pModeToMatch</em> points to, and considers only mono modes if <strong>Stereo</strong> is not set.</p><p> <strong>{{IDXGIOutput1::FindClosestMatchingMode1}}</strong> returns a matched display-mode set with only stereo modes or only mono modes. +<strong>FindClosestMatchingMode</strong> behaves as though you specified the input mode as mono.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Halt a thread until the next vertical blank occurs.</p> + <p>A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p>Takes ownership of an output.</p> + <p>When you are finished with the output, call <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>.</p><p><strong>TakeOwnership</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a device (such as an <strong>{{ID3D10Device}}</strong>).</p> </dd> + + + <dd> <p>Set to <strong>{{TRUE}}</strong> to enable other threads or applications to take ownership of the device; otherwise, set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Releases ownership of the output.</p> + <p>If you are not using a swap chain, get access to an output by calling <strong>{{IDXGIOutput::TakeOwnership}}</strong> and release it when you are finished by calling <strong>{{IDXGIOutput::ReleaseOwnership}}</strong>. An application that uses a swap chain will typically not call either of these methods.</p> + <p>Returns nothing.</p> + + + + <p>Gets a description of the gamma-control capabilities.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a description of the gamma-control capabilities (see <strong>{{DXGI_GAMMA_CONTROL_CAPABILITIES}}</strong>).</p> </dd> + + + + + <p>Sets the gamma controls.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure that describes the gamma curve to set.</p> </dd> + + + + + <p>Gets the gamma control settings.</p> + <p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.?<p>For info about using gamma correction, see Using gamma correction. </p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>An array of gamma control settings (see <strong>{{DXGI_GAMMA_CONTROL}}</strong>).</p> </dd> + + + + + <p>Changes the display mode.</p> + <p><strong>{{IDXGIOutput::SetDisplaySurface}}</strong> should not be called directly by applications, since results will be unpredictable. It is called implicitly by the {{DXGI}} swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.</p><p>This method should only be called between <strong>{{IDXGIOutput::TakeOwnership}}</strong> and <strong>{{IDXGIOutput::ReleaseOwnership}}</strong> calls.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a surface (see <strong>{{IDXGISurface}}</strong>) used for rendering an image to the screen. The surface must have been created as a back buffer ({{DXGI_USAGE_BACKBUFFER}}).</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplaySurfaceData</strong> anymore to retrieve the current display surface. Instead, use <strong>{{IDXGIOutput1::GetDisplaySurfaceData1}}</strong>, which supports stereo display mode.]</p><p>Gets a copy of the current display surface.</p> + <p><strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> can only be called when an output is in full-screen mode. If the method succeeds, {{DXGI}} fills the destination surface.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with {{CPU}}-write permission (see {{D3D10_CPU_ACCESS_WRITE}}). Other surfaces should be created with {{CPU}} read-write permission (see {{D3D10_CPU_ACCESS_READ_WRITE}}). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p>Gets statistics about recently rendered frames.</p> + <p>This {{API}} is similar to <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p><p> </p><strong>Note</strong>??Calling this method is only supported while in full-screen mode.? + <p>If this function succeeds, it returns {{S_OK}}. Otherwise, it might return {{DXGI_ERROR_INVALID_CALL}}.</p> + + + <dd> <p>A reference to frame statistics (see <strong>{{DXGI_FRAME_STATISTICS}}</strong>).</p> </dd> + + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + <p>Accesses one of the swap-chain's back buffers.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A zero-based buffer index. </p> <p>If the swap chain's swap effect is <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong>, this method can only access the first buffer; for this situation, set the index to zero.</p> <p>If the swap chain's swap effect is either <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> or <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>, only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the <strong>{{IDXGIResource::GetUsage}}</strong> method for such buffers, they have the <strong>{{DXGI_USAGE_READ_ONLY}}</strong> flag set.</p> </dd> + + + <dd> <p>The type of interface used to manipulate the buffer.</p> </dd> + + + <dd> <p>A reference to a back-buffer interface.</p> </dd> + + + + + <p>Sets the display state to windowed or full screen.</p> + <p>{{DXGI}} may change the display state of a swap chain in response to end user or system requests.</p><p>We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through <strong>SetFullscreenState</strong>; that is, do not set the <strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> to {{FALSE}} to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.</p> + <p>This methods returns: </p><ul> <li>{{S_OK}} if the action succeeded and the swap chain was placed in the requested state.</li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance: <ul> <li>The application is running over Terminal Server.</li> <li>The output window is occluded.</li> <li>The output window does not have keyboard focus.</li> <li>Another application is already in full-screen mode.</li> </ul> <p>When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.</p> </li> <li>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}} is returned if a fullscreen/windowed mode transition is occurring when this {{API}} is called.</li> <li>Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.</li> </ul> + + + <dd> <p>A Boolean value that specifies whether to set the display state to windowed or full screen. <strong>{{TRUE}}</strong> for full screen, and <strong>{{FALSE}}</strong> for windowed.</p> </dd> + + + <dd> <p>If you pass <strong>{{TRUE}}</strong> to the <em>Fullscreen</em> parameter to set the display state to full screen, you can optionally set this parameter to a reference to an <strong>{{IDXGIOutput}}</strong> interface for the output target that contains the swap chain. If you set this parameter to <strong>{{NULL}}</strong>, {{DXGI}} will choose the output based on the swap-chain's device and the output window's placement. If you pass <strong>{{FALSE}}</strong> to <em>Fullscreen</em>, you must set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Get the state associated with full-screen mode.</p> + <p>When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a boolean whose value is either: +</p> <ul> <li><strong>{{TRUE}}</strong> if the swap chain is in full-screen mode</li> <li><strong>{{FALSE}}</strong> if the swap chain is in windowed mode</li> </ul> </dd> + + + <dd> <p>A reference to the output target (see <strong>{{IDXGIOutput}}</strong>) when the mode is full screen; otherwise <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDesc</strong> anymore to get a description of the swap chain. Instead, use <strong>{{IDXGISwapChain1::GetDesc1}}</strong>.]</p><p>Get a description of the swap chain.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized. </p> + <p> You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for <strong>ResizeBuffers</strong> to succeed. </p><p> Direct references are held by the application after it calls <strong>AddRef</strong> on a resource. </p><p> Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on. </p><p> Before you call <strong>ResizeBuffers</strong>, ensure that the application releases all references (by calling the appropriate number of <strong>Release</strong> invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use <strong>{{ID3D11DeviceContext::ClearState}}</strong> to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling <strong>{{ID3D11DeviceContext::ClearState}}</strong>, then <strong>{{ID3D11DeviceContext::FinishCommandList}}</strong>, then <strong>Release</strong> on the command list). After you call <strong>ResizeBuffers</strong>, you can re-query interfaces via <strong>{{IDXGISwapChain::GetBuffer}}</strong>. </p><p> For swap chains that you created with <strong>{{DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE}}</strong>, before you call <strong>ResizeBuffers</strong>, also call <strong>{{IDXGISurface1::ReleaseDC}}</strong> on the swap chain's back-buffer surface to ensure that you have no outstanding {{GDI}} device contexts ({{DCs}}) open. </p><p> We recommend that you call <strong>ResizeBuffers</strong> when a client window is resized (that is, when an application receives a {{WM_SIZE}} message). </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + + + <p>Resizes the output target.</p> + <p><strong>ResizeTarget</strong> resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call <strong>ResizeTarget</strong> to resize the target window (rather than a Microsoft Win32API such as <strong>SetWindowPos</strong>) without knowledge of the swap chain display mode.</p><p>If a Windows Store app calls <strong>ResizeTarget</strong>, it fails with {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}.</p><p>You cannot call <strong>ResizeTarget</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p><p>Apps must still call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> after they call <strong>ResizeTarget</strong> because only <strong>ResizeBuffers</strong> can change the back buffers. But, if those apps have implemented window resize processing to call <strong>ResizeBuffers</strong>, they don't need to explicitly call <strong>ResizeBuffers</strong> after they call <strong>ResizeTarget</strong> because the window resize processing will achieve what the app requires.</p> + <p>Returns a code that indicates success or failure. <strong>{{DXGI_STATUS_MODE_CHANGE_IN_PROGRESS}}</strong> is returned if a full-screen/windowed mode transition is occurring when this {{API}} is called. See {{DXGI_ERROR}} for additional {{DXGI}} error codes.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_MODE_DESC}}</strong> structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>, <strong>ResizeTarget</strong> uses the existing format. We only recommend that you use <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> when the swap chain is in full-screen mode as this method is not thread safe.</p> </dd> + + + + + <p>Get the output (the display monitor) that contains the majority of the client area of the target window.</p> + <p>If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p><p>You cannot call <strong>GetContainingOutput</strong> on a swap chain that you created with <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to the output interface (see <strong>{{IDXGIOutput}}</strong>).</p> </dd> + + + + + <p>Gets performance statistics about the last render frame.</p> + <p>You cannot use <strong>GetFrameStatistics</strong> for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.</p><p>You can only use <strong>GetFrameStatistics</strong> for swap chains that either use the flip presentation model or draw in full-screen mode. You set the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value in the <strong>SwapEffect</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to specify that the swap chain uses the flip presentation model.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_FRAME_STATISTICS}}</strong> structure for the frame statistics.</p> </dd> + + + + + <p>Gets the number of times that <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong> has been called.</p> + <p>For info about presentation statistics for a frame, see <strong>{{DXGI_FRAME_STATISTICS}}</strong>.</p> + <p>Returns one of the {{DXGI_ERROR}} values.</p> + + + + <p> An <strong>{{IDXGIFactory}}</strong> interface implements methods for generating {{DXGI}} objects (which handle full screen transitions). </p> + <p> Create a factory by calling <strong>CreateDXGIFactory</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice}} * pDXGIDevice = nullptr; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter = nullptr; +hr = pDXGIDevice-&gt;GetAdapter( &amp;pDXGIAdapter ); {{IDXGIFactory}} * pIDXGIFactory = nullptr; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory}}), (void **)&amp;pIDXGIFactory);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Enumerates the adapters (video cards).</p> + <p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters</strong> next returns other adapters with outputs. <strong>EnumAdapters</strong> finally returns adapters without outputs. </p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Allows {{DXGI}} to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>The combination of <em>WindowHandle</em> and <em>Flags</em> informs {{DXGI}} to stop monitoring window messages for the previously-associated window.</p><p>If the application switches to full-screen mode, {{DXGI}} will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.</p><p>Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a {{WM_SIZE}} message, the application should release any outstanding swap-chain back buffers, call <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, {{DXGI}} will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to <strong>ResizeBuffers</strong> on {{WM_SIZE}} is always recommended, since {{WM_SIZE}} is always sent during a fullscreen transition.</p><p>While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but {{UI}} elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field {{WM_SIZING}}, then check against <strong>{{IDXGIOutput::FindClosestMatchingMode}}</strong>. If a matching mode is found, allow the resize. (The {{IDXGIOutput}} can be retrieved from <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)</p><p>Applications that want to handle mode changes or Alt+Enter themselves should call <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swap chain creation. The <em>WindowHandle</em> argument, if non-<strong>{{NULL}}</strong>, specifies that the application message queues will not be handled by the {{DXGI}} runtime for all swap chains of a particular target <strong>{{HWND}}</strong>. Calling <strong>MakeWindowAssociation</strong> with the {{DXGI_MWA_NO_WINDOW_CHANGES}} flag after swapchain creation ensures that {{DXGI}} will not interfere with application's handling of window mode changes or Alt+Enter.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is invalid, or {{E_OUTOFMEMORY}}.</p> + + + <dd> <p>The handle of the window that is to be monitored. This parameter can be <strong>{{NULL}}</strong>; but only if the flags are also 0. </p> </dd> + + + <dd> <p>One or more of the following values: +</p> <ul> <li>{{DXGI_MWA_NO_WINDOW_CHANGES}} - Prevent {{DXGI}} from monitoring an applications message queue; this makes {{DXGI}} unable to respond to mode changes.</li> <li>{{DXGI_MWA_NO_ALT_ENTER}} - Prevent {{DXGI}} from responding to an alt-enter sequence.</li> <li>{{DXGI_MWA_NO_PRINT_SCREEN}} - Prevent {{DXGI}} from responding to a print-screen key.</li> </ul> </dd> + + + + + <p>Get the window through which the user controls the transition to and from full screen.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.? + <p>Returns a code that indicates success or failure. <strong>{{S_OK}}</strong> indicates success, {{DXGI_ERROR_INVALID_CALL}} indicates <em>pWindowHandle</em> was passed in as <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a window handle.</p> </dd> + + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>CreateSwapChain</strong> anymore to create a swap chain. Instead, use <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, or <strong>CreateSwapChainForComposition</strong> depending on how you want to create the swap chain.]</p><p>Creates a swap chain.</p> + <strong>Note</strong>??If you call this {{API}} in a Session 0 process, it returns <strong>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}}</strong>.?<p>If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and {{DXGI_STATUS_OCCLUDED}} will be returned.</p><p>If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.</p><p>Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:</p><ul> <li>Create a windowed swap chain and then set it full-screen using <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>.</li> <li>Save a reference to the swap chain immediately after creation, and use it to get the output window size during a {{WM_SIZE}} event. Then resize the swap chain buffers (with <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>) during the transition from windowed to full-screen.</li> </ul><p>If the swap chain is in full-screen mode, before you release it you must use <strong>SetFullscreenState</strong> to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of {{DXGI}} Overview.</p><p>After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to <strong>{{IDXGISwapChain::Present}}</strong>. To work around this issue, we recommend that you execute the following code right after you call <strong>CreateSwapChain</strong> to create a full-screen swap chain (<strong>Windowed</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> set to <strong>{{FALSE}}</strong>). +</p><pre> // Detect if newly created full-screen swap chain isn't actually full screen. +{{IDXGIOutput}}* pTarget; {{BOOL}} bFullscreen; +if ({{SUCCEEDED}}(pSwapChain-&gt;GetFullscreenState(&amp;bFullscreen, &amp;pTarget))) +{ pTarget-&gt;Release(); +} +else bFullscreen = {{FALSE}}; +// If not full screen, enable full screen again. +if (!bFullscreen) +{ ShowWindow(hWnd, {{SW_MINIMIZE}}); ShowWindow(hWnd, {{SW_RESTORE}}); pSwapChain-&gt;SetFullscreenState({{TRUE}}, {{NULL}}); +} +</pre><p>You can specify <strong>{{DXGI_SWAP_EFFECT}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong> values in the swap-chain description that <em>pDesc</em> points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 {{APIs}}.</p><p>However, to use stereo presentation and to change resize behavior for the flip model, applications must use the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.</p> + <p> {{DXGI_ERROR_INVALID_CALL}} if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>, {{DXGI_STATUS_OCCLUDED}} if you request full-screen mode and it is unavailable, or {{E_OUTOFMEMORY}}. Other error codes defined by the type of device passed in may also be returned.</p> + + + + <p>Create an adapter interface that represents a software adapter.</p> + <p>A software adapter is a {{DLL}} that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.</p><p>Calling this method will increment the module's reference count by one. The reference count can be decremented by calling <strong>FreeLibrary</strong>.</p><p>The typical calling scenario is to call <strong>LoadLibrary</strong>, pass the handle to <strong>CreateSoftwareAdapter</strong>, then immediately call <strong>FreeLibrary</strong> on the {{DLL}} and forget the {{DLL}}'s <strong>{{HMODULE}}</strong>. Since the software adapter calls <strong>FreeLibrary</strong> when it is destroyed, the lifetime of the {{DLL}} will now be owned by the adapter, and the application is free of any further consideration of its lifetime.</p> + <p>A return code indicating success or failure.</p> + + + <dd> <p>Handle to the software adapter's dll. {{HMODULE}} can be obtained with <strong>GetModuleHandle</strong> or <strong>LoadLibrary</strong>.</p> </dd> + + + <dd> <p>Address of a reference to an adapter (see <strong>{{IDXGIAdapter}}</strong>).</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Returns the adapter for the specified device.</p> + <p>If the <strong>GetAdapter</strong> method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the {{DXGI_ERROR}} that indicates failure. If the <em>pAdapter</em> parameter is <strong>{{NULL}}</strong> this method returns {{E_INVALIDARG}}.</p> + + + <dd> <p>The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Returns a surface. This method is used internally and you should not call it directly in your application.</p> + <p>The <strong>CreateSurface</strong> method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.</p><p>The runtime automatically creates an <strong>{{IDXGISurface}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface}}</strong> interface when it calls <strong>{{ID3D11Device::CreateTexture2D}}</strong> or <strong>{{ID3D10Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong> or <strong>{{ID3D10Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface}}</strong>. +</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SURFACE_DESC}}</strong> structure that describes the surface.</p> </dd> + + + <dd> <p>The number of surfaces to create.</p> </dd> + + + <dd> <p>A {{DXGI_USAGE}} flag that specifies how the surface is expected to be used.</p> </dd> + + + <dd> <p>An optional reference to a <strong>{{DXGI_SHARED_RESOURCE}}</strong> structure that contains shared resource information for opening views of such resources.</p> </dd> + + + <dd> <p>The address of an <strong>{{IDXGISurface}}</strong> interface reference to the first created surface.</p> </dd> + + + + + <p>Gets the residency status of an array of resources.</p> + <p>The information returned by the <em>pResidencyStatus</em> argument array describes the residency status at the time that the <strong>QueryResourceResidency</strong> method was called. </p><strong>Note</strong>??The residency status will constantly change.?<p>If you call the <strong>QueryResourceResidency</strong> method during a device removed state, the <em>pResidencyStatus</em> argument will return the <strong>{{DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY}}</strong> flag.</p><strong>Note</strong>??This method should not be called every frame as it incurs a non-trivial amount of overhead.? + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_DEVICE_REMOVED}}, {{E_INVALIDARG}}, or {{E_POINTER}} (see Common {{HRESULT}} Values and WinError.h for more information).</p> + + + <dd> <p>An array of <strong>{{IDXGIResource}}</strong> interfaces.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RESIDENCY}}</strong> flags. Each element describes the residency status for corresponding element in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array and <em>pResidencyStatus</em> argument array.</p> </dd> + + + + + <p>Sets the {{GPU}} thread priority.</p> + <p>The values for the <em>Priority</em> parameter function as follows:</p><ul> <li>Positive values increase the likelihood that the {{GPU}} scheduler will grant {{GPU}} execution cycles to the device when rendering.</li> <li>Negative values lessen the likelihood that the device will receive {{GPU}} execution cycles when devices compete for them.</li> <li>The device is guaranteed to receive some {{GPU}} execution cycles at all settings.</li> </ul><p>To use the <strong>SetGPUThreadPriority</strong> method, you should have a comprehensive understanding of {{GPU}} scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the <strong>SetGPUThreadPriority</strong> method can impede rendering speed and result in a poor user experience.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>Priority</em> parameter is invalid.</p> + + + <dd> <p>A value that specifies the required {{GPU}} thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>Gets the {{GPU}} thread priority.</p> + <p>Return {{S_OK}} if successful; otherwise, returns {{E_POINTER}} if the <em>pPriority</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>A reference to a variable that receives a value that indicates the current {{GPU}} thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.</p> </dd> + + + + + <p>The <strong>{{IDXGIFactory1}}</strong> interface implements methods for generating {{DXGI}} objects.</p> + <p>This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>To create a factory, call the <strong>CreateDXGIFactory1</strong> function.</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong> or <strong>{{IDXGIDevice1}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory1}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory1}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Enumerates both adapters (video cards) with or without outputs.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the <strong>{{IDXGIFactory1}}</strong> object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop. </p><p>When the <strong>EnumAdapters1</strong> method succeeds and fills the <em>ppAdapter</em> parameter with the address of the reference to the adapter interface, <strong>EnumAdapters1</strong> increments the adapter interface's reference count. When you finish using the adapter interface, call the <strong>Release</strong> method to decrement the reference count before you destroy the reference.</p><p><strong>EnumAdapters1</strong> first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. <strong>EnumAdapters1</strong> next returns other adapters with outputs. <strong>EnumAdapters1</strong> finally returns adapters without outputs.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{DXGI_ERROR_NOT_FOUND}} if the index is greater than or equal to the number of adapters in the local system, or {{DXGI_ERROR_INVALID_CALL}} if <em>ppAdapter</em> parameter is <strong>{{NULL}}</strong>.</p> + + + <dd> <p>The index of the adapter to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to an <strong>{{IDXGIAdapter1}}</strong> interface at the position specified by the <em>Adapter</em> parameter. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Informs an application of the possible need to re-enumerate adapters.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p> + <p><strong>{{FALSE}}</strong>, if a new adapter is becoming available or the current adapter is going away. <strong>{{TRUE}}</strong>, no adapter changes.</p><p><strong>IsCurrent</strong> returns <strong>{{FALSE}}</strong> to inform the calling application to re-enumerate adapters.</p> + + + + <p> The <strong>{{IDXGIAdapter1}}</strong> interface represents a display sub-system (including one or more {{GPU}}'s, {{DACs}} and video memory). </p> + <p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p>A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.</p><p> To enumerate the display sub-systems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Gets a {{DXGI}} 1.1 description of an adapter (or video card).</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Use the <strong>GetDesc1</strong> method to get a {{DXGI}} 1.1 description of an adapter. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter}}</strong> method.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC1}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, <strong>GetDesc1</strong> returns zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of <strong>{{DXGI_ADAPTER_DESC1}}</strong> and ?Software Adapter? for the description string in the <strong>Description</strong> member.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice1}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p>This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>) and the <strong>{{IDXGISwapChain2::SetMaximumFrameLatency}}</strong> method if desired. </p><p> This interface is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512). </p><p> The <strong>{{IDXGIDevice1}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice1}}</strong> interface. To retrieve the <strong>{{IDXGIDevice1}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice1}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice1}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Sets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.</p> </dd> + + + + + <p>Gets the number of frames that the system is allowed to queue for rendering.</p> + <p>This method is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><p>Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the {{CPU}} chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.0 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the fullscreen display mode.</p><p>If the <strong>CreateDXGIFactory</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory::Release}}</strong> method to release the interface.</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>?<p>The <strong>CreateDXGIFactory</strong> function does not exist for Windows Store apps. Instead, Windows Store apps use the <strong>CreateDXGIFactory1</strong> function.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory}}</strong> object.</p> </dd> + + + + + <p>Creates a {{DXGI}} 1.1 factory that you can use to generate other {{DXGI}} objects.</p> + <p>Use a {{DXGI}} 1.1 factory to generate objects that <strong>enumerate adapters</strong>, <strong>create swap chains</strong>, and <strong>associate a window</strong> with the alt+enter key sequence for toggling to and from the full-screen display mode. </p><p>If the <strong>CreateDXGIFactory1</strong> function succeeds, the reference count on the <strong>{{IDXGIFactory1}}</strong> interface is incremented. To avoid a memory leak, when you finish using the interface, call the <strong>{{IDXGIFactory1::Release}}</strong> method to release the interface.</p><p>This entry point is not supported by {{DXGI}} 1.0, which shipped in Windows?Vista and Windows Server?2008. {{DXGI}} 1.1 support is required, which is available on Windows?7, Windows Server?2008?{{R2}}, and as an update to Windows?Vista with Service Pack?2 ({{SP2}}) ({{KB}} 971644) and Windows Server?2008 ({{KB}} 971512).</p><strong>Note</strong>??Do not mix the use of {{DXGI}} 1.0 (<strong>{{IDXGIFactory}}</strong>) and {{DXGI}} 1.1 (<strong>{{IDXGIFactory1}}</strong>) in an application. Use <strong>{{IDXGIFactory}}</strong> or <strong>{{IDXGIFactory1}}</strong>, but not both in an application.?<strong>Note</strong>??<strong>CreateDXGIFactory1</strong> fails if your app's <strong>DllMain</strong> function calls it. For more info about how {{DXGI}} responds from <strong>DllMain</strong>, see {{DXGI}} Responses from {{DLLMain}}.?<strong>Note</strong>??Starting with Windows?8, all {{DXGI}} factories (regardless if they were created with <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong>) enumerate adapters identically. The enumeration order of adapters, which you retrieve with <strong>{{IDXGIFactory::EnumAdapters}}</strong> or <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>, is as follows: <ul> <li>Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.</li> <li>Adapters with outputs.</li> <li>Adapters without outputs.</li> </ul>? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory1}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory1}}</strong> object.</p> </dd> + + + + + <p> Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type. </p> + + + + <dd> <p>The format is not known.</p> </dd> + + + <dd> <p>A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8</p> </dd> + + + <dd> <p>A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?</p> </dd> + + + <dd> <p>A three-component, 96-bit typeless format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8</p> </dd> + + + <dd> <p>A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A three-component, 96-bit signed-integer format that supports 32 bits per color channel.</p> </dd> + + + <dd> <p>A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8</p> </dd> + + + <dd> <p>A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?</p> </dd> + + + <dd> <p>A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.</p> </dd> + + + <dd> <p>A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit typeless format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8</p> </dd> + + + <dd> <p>A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.</p> </dd> + + + <dd> <p>A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.</p> </dd> + + + <dd> <p>A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit typeless format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit typeless format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.</p> </dd> + + + <dd> <p>A single-component, 8-bit unsigned-normalized-integer format for alpha only.</p> </dd> + + + <dd> <p>A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.</p> </dd> + + + <dd> <p>Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.</p> <p></p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{UYVY}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format. This packed {{RGB}} format is analogous to the {{YUY2}} format. Each 32-bit block describes a pair of pixels: ({{R8}}, {{G8}}, {{B8}}) and ({{R8}}, {{G8}}, {{B8}}) where the {{R8}}/{{B8}} values are repeated, and the {{G8}} values are unique to each pixel. ?</p> <p>Width must be even.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.</p> <p><strong>Direct3D 10 through Direct3D 11:??</strong>This value is defined for {{DXGI}}. However, Direct3D 10, 10.1, or 11 devices do not support this format.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.</p> </dd> + + + <dd> <p>A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each channel including alpha. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A four-component, 32-bit unsigned-normalized standard {{RGB}} format that supports 8 bits for each color channel, and 8 bits are unused. ?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?</p> </dd> + + + <dd> <p>A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V-&gt;{{R8}}, +U-&gt;{{G8}}, +Y-&gt;{{B8}}, +and A-&gt;{{A8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R10G10B10A2_UNORM}} and {{DXGI_FORMAT_R10G10B10A2_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R10}}, +Y-&gt;{{G10}}, +V-&gt;{{B10}}, +and A-&gt;{{A2}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:4:4 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U-&gt;{{R16}}, +Y-&gt;{{G16}}, +V-&gt;{{B16}}, +and A-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_P010}} is no different than {{DXGI_FORMAT_P016}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel planar {{YUV}} 4:2:0 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R16_UNORM}} and {{DXGI_FORMAT_R16_UINT}}. Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. For {{UAVs}}, an additional valid chrominance data view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R16G16_UNORM}} and {{DXGI_FORMAT_R16G16_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R16}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R16}} and +V-&gt;{{G16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the {{UV}} plane.</p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit per channel planar {{YUV}} 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any {{RECT}} that are used for this format are multiples of 2. This format differs from {{DXGI_FORMAT_NV12}} in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the {{CPU}} to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-{{NV12}} 4:2:0 layout (for example, {{YV12}}, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than {{NV12}} can be used when the application does not need the data to be in a standard layout. </p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. </p> <p>An app using the {{YUY}} 4:2:0 formats must map the luma (Y) plane separately from the chroma ({{UV}}) planes. Developers do this by calling <strong>{{ID3D12Device::CreateShaderResourceView}}</strong> twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the {{UV}} planes (together) maps only the U and V planes as a single resource view.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. For {{UAVs}}, an additional valid view format is {{DXGI_FORMAT_R32_UINT}}. By using {{DXGI_FORMAT_R32_UINT}} for {{UAVs}}, you can both read and write as opposed to just write for {{DXGI_FORMAT_R8G8B8A8_UNORM}} and {{DXGI_FORMAT_R8G8B8A8_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt;{{G8}}, +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt;{{A8}}.</p> <p>A unique valid view format for this video resource format is {{DXGI_FORMAT_R8G8_B8G8_UNORM}}. With this view format, the width of the view appears to be twice what the {{DXGI_FORMAT_R8G8B8A8_UNORM}} or {{DXGI_FORMAT_R8G8B8A8_UINT}} view would be when hardware reconstructs {{RGBA}} automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is {{Y0}}-&gt;{{R8}}, +{{U0}}-&gt; +{{G8}}[0], +{{Y1}}-&gt;{{B8}}, +and {{V0}}-&gt; +{{G8}}[1].</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>10-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, {{DXGI_FORMAT_Y210}} is no different than {{DXGI_FORMAT_Y216}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>16-bit per channel packed {{YUV}} 4:2:2 video resource format. Valid view formats for this video resource format are {{DXGI_FORMAT_R16G16B16A16_UNORM}} and {{DXGI_FORMAT_R16G16B16A16_UINT}}. Supported view types are {{SRV}} and {{UAV}}. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is {{Y0}}-&gt;{{R16}}, +U-&gt;{{G16}}, +{{Y1}}-&gt;{{B16}}, +and V-&gt;{{A16}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be even.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>Most common planar {{YUV}} 4:1:1 video resource format. Valid luminance data view formats for this video resource format are {{DXGI_FORMAT_R8_UNORM}} and {{DXGI_FORMAT_R8_UINT}}. Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are {{DXGI_FORMAT_R8G8_UNORM}} and {{DXGI_FORMAT_R8G8_UINT}}. Supported view types are {{SRV}}, {{RTV}}, and {{UAV}}. For luminance data view, the mapping to the view channel is Y-&gt;{{R8}}. For chrominance data view, the mapping to the view channel is U-&gt;{{R8}} and +V-&gt;{{G8}}.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p>Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the {{UV}} plane, and the remainder is padding. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>4-bit palletized {{YUV}} format that is commonly used for {{DVD}} subpicture.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format that is used for palletized {{RGB}} data when the processor processes {{ISDB}}-T data and for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>8-bit palletized format with 8 bits of alpha that is used for palletized {{YUV}} data when the processor processes BluRay data.</p> <p>For more info about {{YUV}} formats for video rendering, see Recommended 8-Bit {{YUV}} Formats for Video Rendering. </p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.</p> <p><strong>Direct3D 11.1:??</strong>This value is not supported until Windows?8.</p> </dd> + + + <dd> <p>A video format; an 8-bit version of a hybrid planar 4:2:2 format.</p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4 rendering format. </p> </dd> + + + <dd> <p>An 8 bit {{YCbCrA}} 4:4:4:4 rendering format. </p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Flags used with <strong>ReportLiveObjects</strong> to specify the amount of info to report about an object's lifetime. </p> + <p> Use this enumeration with <strong>{{IDXGIDebug::ReportLiveObjects}}</strong>. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Values that specify categories of debug messages.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. When you create an info queue filter, you can use these values to allow or deny any categories of messages to pass through the storage and retrieval filters.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Unknown category.</p> </dd> + + + <dd> <p>Miscellaneous category.</p> </dd> + + + <dd> <p>Initialization category.</p> </dd> + + + <dd> <p>Cleanup category.</p> </dd> + + + <dd> <p>Compilation category.</p> </dd> + + + <dd> <p>State creation category.</p> </dd> + + + <dd> <p>State setting category.</p> </dd> + + + <dd> <p>State getting category.</p> </dd> + + + <dd> <p>Resource manipulation category.</p> </dd> + + + <dd> <p>Execution category.</p> </dd> + + + <dd> <p>Shader category.</p> </dd> + + + + + <p>Values that specify debug message severity levels for an information queue.</p> + <p>Use this enumeration when you call <strong>{{IDXGIInfoQueue::GetMessage}}</strong> to retrieve a message and when you call <strong>{{IDXGIInfoQueue::AddMessage}}</strong> to add a message. Also, use this enumeration with <strong>{{IDXGIInfoQueue::AddApplicationMessage}}</strong>. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>Defines some type of corruption that has occurred.</p> </dd> + + + <dd> <p>Defines an error message.</p> </dd> + + + <dd> <p>Defines a warning message.</p> </dd> + + + <dd> <p>Defines an information message.</p> </dd> + + + <dd> <p>Defines a message other than corruption, error, warning, or information.</p> </dd> + + + + + <p>Describes a debug message in the information queue.</p> + <p> <strong>{{IDXGIInfoQueue::GetMessage}}</strong> returns a reference to this structure.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + <dd> <p>The length of the message string at <strong>pDescription</strong>, in bytes.</p> </dd> + + + + + <p>Describes the types of messages to allow or deny to pass through a filter.</p> + <p>This structure is a member of the <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure.</p><p>This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.</p> + + + <dd> <p>The number of message categories to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong> enumeration values that describe the message categories to allow or deny. The array must have at least <strong>NumCategories</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message severity levels to allow or deny.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong> enumeration values that describe the message severity levels to allow or deny. The array must have at least <strong>NumSeverities</strong> number of elements.</p> </dd> + + + <dd> <p>The number of message {{IDs}} to allow or deny.</p> </dd> + + + <dd> <p>An array of integers that represent the message {{IDs}} to allow or deny. The array must have at least <strong>NumIDs</strong> number of elements.</p> </dd> + + + + + <p>Describes a debug message filter, which contains lists of message types to allow and deny.</p> + <p>Use with an <strong>{{IDXGIInfoQueue}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to allow.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_FILTER_DESC}}</strong> structure that describes the types of messages to deny.</p> </dd> + + + + + <p>This interface controls the debug information queue, and can only be used if the debug layer is turned on.</p> + <p>This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function.</p><p>For more info about the debug layer, see Debug Layer.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Sets the maximum number of messages that can be added to the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the limit on the number of messages.</p> </dd> + + + <dd> <p>The maximum number of messages that can be added to the queue. ?1 means no limit.</p> </dd> + + + + + <p>Clears all messages from the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that clears the messages.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p>Gets the number of messages that can pass through a retrieval filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that can pass through a retrieval filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages currently stored in the message queue.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages currently stored in the message queue.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were discarded due to the message count limit.</p> + <p>Get and set the message count limit with <strong>{{IDXGIInfoQueue::GetMessageCountLimit}}</strong> and <strong>{{IDXGIInfoQueue::SetMessageCountLimit}}</strong>, respectively. </p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages that were discarded.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the maximum number of messages that can be added to the message queue.</p> + <p>When the number of messages in the message queue reaches the maximum limit, new messages coming in push old messages out.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the maximum number of messages that can be added to the queue. ?1 means no limit.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that a storage filter allowed to pass through.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages allowed by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Gets the number of messages that were denied passage through a storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the number of messages denied by a storage filter.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the number.</p> </dd> + + + + + <p>Adds storage filters to the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the storage filter at the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetStorageFilter</strong> outputs the size of the storage filter.</p> </dd> + + + + + <p>Removes a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty storage filter onto the storage-filter stack.</p> + <p>An empty storage filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty storage filter.</p> </dd> + + + + + <p>Pushes a deny-all storage filter onto the storage-filter stack.</p> + <p>A deny-all storage filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + + + <p>Pushes a copy of the storage filter that is currently on the top of the storage-filter stack onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the storage filter.</p> </dd> + + + + + <p>Pushes a storage filter onto the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a storage filter from the top of the storage-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the storage-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the storage-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds retrieval filters to the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the filters.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structures that describe the filters.</p> </dd> + + + + + <p>Gets the retrieval filter at the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the filter description to which <em>pFilter</em> points. If <em>pFilter</em> is <strong>{{NULL}}</strong>, <strong>GetRetrievalFilter</strong> outputs the size of the retrieval filter.</p> </dd> + + + + + <p>Removes a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that removes the filter.</p> </dd> + + + + + <p>Pushes an empty retrieval filter onto the retrieval-filter stack.</p> + <p>An empty retrieval filter allows all messages to pass through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the empty retrieval filter.</p> </dd> + + + + + <p>Pushes a deny-all retrieval filter onto the retrieval-filter stack.</p> + <p>A deny-all retrieval filter prevents all messages from passing through.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the deny-all retrieval filter.</p> </dd> + + + + + <p>Pushes a copy of the retrieval filter that is currently on the top of the retrieval-filter stack onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the copy of the retrieval filter.</p> </dd> + + + + + <p>Pushes a retrieval filter onto the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pushes the filter.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_FILTER}}</strong> structure that describes the filter.</p> </dd> + + + + + <p>Pops a retrieval filter from the top of the retrieval-filter stack.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that pops the filter.</p> </dd> + + + + + <p>Gets the size of the retrieval-filter stack in bytes.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns the size of the retrieval-filter stack in bytes.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the size.</p> </dd> + + + + + <p>Adds a debug message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that produced the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>An integer that uniquely identifies the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Adds a user-defined message to the message queue and sends that message to the debug output.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>The message string.</p> </dd> + + + + + <p>Sets a message category to break on when a message with that category passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnCategory</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message severity level to break on when a message with that severity level passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnSeverity</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Sets a message identifier to break on when a message with that identifier passes through the storage filter.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that sets the breaking condition.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether <strong>SetBreakOnID</strong> turns on or off this breaking condition (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the break on a message category is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this category of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_CATEGORY}}</strong>-typed value that specifies the category of the message.</p> </dd> + + + + + <p>Determines whether the break on a message severity level is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this severity of breaking condition is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_INFO_QUEUE_MESSAGE_SEVERITY}}</strong>-typed value that specifies the severity of the message.</p> </dd> + + + + + <p>Determines whether the break on a message identifier is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether this break on a message identifier is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the breaking status.</p> </dd> + + + <dd> <p>An integer value that specifies the identifier of the message.</p> </dd> + + + + + <p>Turns the debug output on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>This method does not return a value.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether to turn the debug output on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> </dd> + + + + + <p>Determines whether the debug output is turned on or off.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns a Boolean value that specifies whether the debug output is turned on or off (<strong>{{TRUE}}</strong> for on, <strong>{{FALSE}}</strong> for off).</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the mute status.</p> </dd> + + + + + <p>This interface controls debug settings, and can only be used if the debug layer is turned on.</p> + <p> This interface is obtained by calling the <strong>{{DXGIGetDebugInterface}}</strong> function. </p><p> For more info about the debug layer, see Debug Layer. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p><strong>Note</strong>?? This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + + + + <p>Reports info about the lifetime of an object or objects.</p> + <strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the object or objects to get info about. Use one of the <strong>{{DXGI_DEBUG_ID}}</strong> {{GUIDs}}.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_DEBUG_RLO_FLAGS}}</strong>-typed value that specifies the amount of info to report.</p> </dd> + + + + + <p>Controls debug settings for Microsoft DirectX Graphics Infrastructure ({{DXGI}}). You can use the <strong>{{IDXGIDebug1}}</strong> interface in Windows Store apps. </p> + <p>Call the <strong>{{DXGIGetDebugInterface1}}</strong> function to obtain the <strong>{{IDXGIDebug1}}</strong> interface.</p><p>The <strong>{{IDXGIDebug1}}</strong> interface can be used only if the debug layer is turned on. For more info, see Debug Layer.</p> + + + + + + + + + + + + + <p>Retrieves a debugging interface.</p> + <p> <strong>{{IDXGIDebug}}</strong> and <strong>{{IDXGIInfoQueue}}</strong> are debugging interfaces.</p><p>To access <strong>{{DXGIGetDebugInterface}}</strong>, call the <strong>GetModuleHandle</strong> function to get Dxgidebug.dll and the <strong>GetProcAddress</strong> function to get the address of <strong>{{DXGIGetDebugInterface}}</strong>.</p><p><strong>Windows?8.1:??</strong>Starting in Windows?8.1, Windows Store apps call the <strong>{{DXGIGetDebugInterface1}}</strong> function to get an <strong>{{IDXGIDebug1}}</strong> interface.</p><strong>Note</strong>??This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows?8.? + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Flags indicating the method the raster uses to create an image on a surface.</p> + <p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Scanline order is unspecified.</p> </dd> + + + <dd> <p>The image is created from the first scanline to the last without skipping any.</p> </dd> + + + <dd> <p>The image is created beginning with the upper field.</p> </dd> + + + <dd> <p>The image is created beginning with the lower field.</p> </dd> + + + + + <p>Flags indicating how an image is stretched to fit a given monitor's resolution.</p> + <p>Selecting the {{CENTERED}} or {{STRETCHED}} modes can result in a mode change even if you specify the native resolution of the display in the {{DXGI_MODE_DESC}}. If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via {{ALT}}+{{ENTER}} or <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>), you should use {{UNSPECIFIED}}.</p><p>This enum is used by the <strong>{{DXGI_MODE_DESC1}}</strong> and <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structures.</p> + + + <dd> <p>Unspecified scaling.</p> </dd> + + + <dd> <p>Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an {{LED}} display).</p> </dd> + + + <dd> <p>Specifies stretched scaling.</p> </dd> + + + + + <p>Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.</p> + + + <dd> <p>Unspecified rotation.</p> </dd> + + + <dd> <p>Specifies no rotation.</p> </dd> + + + <dd> <p>Specifies 90 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 180 degrees of rotation.</p> </dd> + + + <dd> <p>Specifies 270 degrees of rotation.</p> </dd> + + + + + <p>Represents an {{RGB}} color.</p> + <p>This structure is a member of the <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure.</p> + + + <dd> <p>A value representing the color of the red component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the green component. The range of this value is between 0 and 1.</p> </dd> + + + <dd> <p>A value representing the color of the blue component. The range of this value is between 0 and 1.</p> </dd> + + + + + <p>Describes color values.</p> + <p>You can set the members of this structure to values outside the range of 0 through 1 to implement some unusual effects. Values greater than 1 produce strong lights that tend to wash out a scene. Negative values produce dark lights that actually remove light from a scene. </p> + + + <dd> <p>Floating-point value that specifies the red component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the red component, while a value of 1.0 indicates that red is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the green component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the green component, while a value of 1.0 indicates that green is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the blue component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates the complete absence of the blue component, while a value of 1.0 indicates that blue is fully present.</p> </dd> + + + <dd> <p>Floating-point value that specifies the alpha component of a color. This value generally is in the range from 0.0 through 1.0. A value of 0.0 indicates fully transparent, while a value of 1.0 indicates fully opaque.</p> </dd> + + + + + <p>Controls the settings of a gamma curve.</p> + <p>The <strong>{{DXGI_GAMMA_CONTROL}}</strong> structure is used by the <strong>{{IDXGIOutput::SetGammaControl}}</strong> method.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with scalar values that are applied to rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RGB}}</strong> structure with offset values that are applied to the rgb values before being sent to the gamma look up table.</p> </dd> + + + <dd> <p>An array of <strong>{{DXGI_RGB}}</strong> structures that control the points of a gamma curve.</p> </dd> + + + + + <p>Controls the gamma capabilities of an adapter.</p> + <p>To get a list of the capabilities for controlling gamma correction, call <strong>{{IDXGIOutput::GetGammaControlCapabilities}}</strong>.</p><p>For info about using gamma correction, see Using gamma correction. </p> + + + <dd> <p>True if scaling and offset operations are supported during gamma correction; otherwise, false.</p> </dd> + + + <dd> <p>A value describing the maximum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the minimum range of the control-point positions.</p> </dd> + + + <dd> <p>A value describing the number of control points in the array.</p> </dd> + + + <dd> <p>An array of values describing control points; the maximum length of control points is 1025.</p> </dd> + + + + + <p>Describes a display mode.</p> + <p>This structure is used by the <strong>GetDisplayModeList</strong> and <strong>FindClosestMatchingMode</strong> methods.</p><p>The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.</p><ul> <li> <p>Feature level &gt;= 9.1</p> <ul> <li> <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong> </li> <li><strong>{{DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}}</strong></li> <li> <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> (except 10.x on Windows?Vista)</li> <li><strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> (except 10.x on Windows?Vista)</li> </ul> </li> <li> <p>Feature level &gt;= 10.0</p> <ul> <li> <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong> </li> <li><strong>{{DXGI_FORMAT_R10G10B10A2_UNORM}}</strong></li> </ul> </li> <li> <p>Feature level &gt;= 11.0</p> <ul> <li><strong>{{DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM}}</strong></li> </ul> </li> </ul><p>You can pass one of these format values to <strong>{{ID3D11Device::CheckFormatSupport}}</strong> to determine if it is a valid format for displaying on screen. If <strong>{{ID3D11Device::CheckFormatSupport}}</strong> returns <strong>{{D3D11_FORMAT_SUPPORT_DISPLAY}}</strong> in the bit field to which the <em>pFormatSupport</em> parameter points, the format is valid for displaying on screen.</p><p>Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member of <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong>), you must set the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC}}</strong> to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>.</p><p>Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}}</strong> render target view from a <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> swap chain so they can use automatic color space conversion when they render the swap chain.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned width value.</p> </dd> + + + <dd> <p>A value describing the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain::GetDesc}}</strong> method to retrieve the assigned height value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure describing the refresh rate in hertz</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure describing the display format.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type describing the scanline drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type describing the scaling mode.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{DC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} {{AC}} huffman table.</p> + + + <dd> <p>The number of codes for each code length.</p> </dd> + + + <dd> <p>The Huffman code values, in order of increasing code length.</p> </dd> + + + + + <p>Describes a {{JPEG}} quantization table.</p> + + + <dd> <p>An array of bytes containing the elements of the quantization table.</p> </dd> + + + + + <p>Specifies color space types.</p> + <p>This enum is used within {{DXGI}} in the <strong>CheckColorSpaceSupport</strong>, <strong>SetColorSpace1</strong> and <strong>CheckOverlayColorSpaceSupport</strong> methods. It is also referenced in {{D3D11}} video methods such as <strong>{{ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1}}</strong>, and {{D2D}} methods such as <strong>{{ID2D1DeviceContext2::CreateImageSourceFromDxgi}}</strong>.</p><p>The following color parameters are defined:</p> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>1.0</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is the standard definition for {{ITU}}-R Recommendation {{BT}}.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> <tr><td>{{Transfer}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{JPG}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This definition is commonly used for {{MPEG2}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.601</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This definition is commonly used for H.264 and {{HEVC}}, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.709</td></tr> </table> <p>?</p> <p>This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This definition may be used by {{HEVC}}, and is usually used with 10, 12, or 16 bit color channels. +</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{YCbCr}}</td></tr> <tr><td>{{Range}}</td><td>16-235</td></tr> <tr><td>{{Gamma}}</td><td>2084</td></tr> <tr><td>{{Siting}}</td><td>Video</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <table> <tr><td><strong>Property</strong></td><td><strong>Value</strong></td></tr> <tr><td>{{Colorspace}}</td><td>{{RGB}}</td></tr> <tr><td>{{Range}}</td><td>0-255</td></tr> <tr><td>{{Gamma}}</td><td>2.2</td></tr> <tr><td>{{Siting}}</td><td>Image</td></tr> <tr><td>{{Primaries}}</td><td>{{BT}}.2020</td></tr> </table> <p>?</p> <p>This is usually used with 10, 12, or 16 bit color channels.</p> </dd> + + + <dd> <p>A custom color definition is used. </p> </dd> + + + + + <p>Represents a rational number.</p> + <p>This structure is a member of the <strong>{{DXGI_MODE_DESC}}</strong> structure.</p><p>The <strong>{{DXGI_RATIONAL}}</strong> structure operates under the following rules:</p><ul> <li>0/0 is legal and will be interpreted as 0/1.</li> <li>0/anything is interpreted as zero.</li> <li>If you are representing a whole number, the denominator should be 1.</li> </ul> + + + <dd> <p>An unsigned integer value representing the top of the rational number.</p> </dd> + + + <dd> <p>An unsigned integer value representing the bottom of the rational number.</p> </dd> + + + + + <p>Describes multi-sampling parameters for a resource.</p> + <p>This structure is a member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure.</p><p>The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.</p><p>If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.</p><table> <tr><td> <p>Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:</p> <p>Direct3D 10.1 has defined two standard quality levels: <strong>{{D3D10_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D10_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D10_1}}.h.</p> <p>Direct3D 11 has defined two standard quality levels: <strong>{{D3D11_STANDARD_MULTISAMPLE_PATTERN}}</strong> and <strong>{{D3D11_CENTER_MULTISAMPLE_PATTERN}}</strong> in the <strong>{{D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS}}</strong> enumeration in {{D3D11}}.h.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of multisamples per pixel.</p> </dd> + + + <dd> <p>The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by <strong>{{ID3D10Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 10 or <strong>{{ID3D11Device::CheckMultisampleQualityLevels}}</strong> for Direct3D 11.</p> <p>For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.</p> </dd> + + + + + <p>Identifies the type of reference shape.</p> + + + <dd> <p>The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap ({{DIB}}) format {{AND}} mask that is followed by another 1 bpp {{DIB}} format {{XOR}} mask of the same size.</p> </dd> + + + <dd> <p>The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp {{ARGB}} {{DIB}} format.</p> </dd> + + + <dd> <p>The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp {{ARGB}} format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the {{RGB}} value should replace the screen pixel. When the mask value is 0xFF, an {{XOR}} operation is performed on the {{RGB}} value and the screen pixel; the result replaces the screen pixel.</p> </dd> + + + + + <p>Identifies the alpha value, transparency behavior, of a surface.</p> + <p>For more information about alpha mode, see <strong>{{D2D1_ALPHA_MODE}}</strong>.</p> + + + <dd> <p>Indicates that the transparency behavior is not specified.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.</p> </dd> + + + <dd> <p>Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.</p> </dd> + + + <dd> <p>Indicates to ignore the transparency behavior.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + <p> Identifies the importance of a resource?s content when you call the <strong>{{IDXGIDevice2::OfferResources}}</strong> method to offer the resource. </p> + <p>Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.</p> + + + + <p>Identifies resize behavior when the back-buffer size does not match the size of the target output.</p> + <p>The {{DXGI_SCALING_NONE}} value is supported only for flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value. You pass these values in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. </p><p>{{DXGI_SCALING_ASPECT_RATIO_STRETCH}} will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.</p><code>float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight &gt;= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast&lt;{{LONG}}&gt;(offsetX); rect.top = static_cast&lt;{{LONG}}&gt;(offsetY); rect.right = static_cast&lt;{{LONG}}&gt;(offsetX + scaledWidth); rect.bottom = static_cast&lt;{{LONG}}&gt;(offsetY + scaledHeight); rect.left = std::max&lt;{{LONG}}&gt;(0, rect.left); rect.top = std::max&lt;{{LONG}}&gt;(0, rect.top); rect.right = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputWidth), rect.right); rect.bottom = std::min&lt;{{LONG}}&gt;(static_cast&lt;{{LONG}}&gt;(outputHeight), rect.bottom); +</code><p>Note that <em>outputWidth</em> and <em>outputHeight</em> are the pixel sizes of the presentation target size. In the case of <strong>CoreWindow</strong>, this requires converting the <em>logicalWidth</em> and <em>logicalHeight</em> values from {{DIPS}} to pixels using the window's {{DPI}} property.</p> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of {{DXGI}} when you call the <strong>{{IDXGIFactory::CreateSwapChain}}</strong> method.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the {{WS_EX_LAYOUTRTL}} style is associated with the <strong>{{HWND}}</strong> handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.</p> <p>This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to <strong>{{IDXGISwapChain1::SetBackgroundColor}}</strong>.</p> </dd> + + + <dd> <p>Directs {{DXGI}} to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.</p> <p>This constant is supported on Windows Phone 8 and Windows 10. </p> <p>Note that with legacy Win32 window swapchains, this works the same as {{DXGI_SCALING_STRETCH}}. +</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current graphics rendering task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the <strong>GraphicsPreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p><p>The following figure shows granularity of graphics rendering tasks.</p> + + + <dd> <p>Indicates the preemption granularity as a {{DMA}} buffer.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics primitive. A primitive is a section in a {{DMA}} buffer and can be a group of triangles.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.</p> </dd> + + + + + <p>Identifies the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current compute task.</p> + <p>You call the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method to retrieve the granularity level at which the {{GPU}} can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the <strong>ComputePreemptionGranularity</strong> member of the <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure.</p> + + + <dd> <p>Indicates the preemption granularity as a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a dispatch (for example, a call to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method). A dispatch is a part of a compute packet.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.</p> </dd> + + + <dd> <p>Indicates the preemption granularity as a compute instruction in a thread.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structure describes the movement of a rectangle.</p> + <p>This structure is used by <strong>GetFrameMoveRects</strong>.</p> + + + <dd> <p>The starting position of a rectangle.</p> </dd> + + + <dd> <p>The target region to which to move a rectangle.</p> </dd> + + + + + <p>The {{DXGI_OUTDUPL_DESC}} structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>This structure is used by <strong>GetDesc</strong>.</p> + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure describes the position of the hardware cursor.</p> + <p>The <strong>Position</strong> member is valid only if the <strong>Visible</strong> member?s value is set to <strong>{{TRUE}}</strong>.</p> + + + <dd> <p>The position of the hardware cursor relative to the top-left of the adapter output.</p> </dd> + + + <dd> <p>Specifies whether the hardware cursor is visible. <strong>{{TRUE}}</strong> if visible; otherwise, <strong>{{FALSE}}</strong>. If the hardware cursor is not visible, the calling application does not display the cursor in the client.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure describes information about the cursor shape.</p> + <p>An application draws the cursor shape with the top-left-hand corner drawn at the position that the <strong>Position</strong> member of the <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure specifies; the application does not use the hot spot to draw the cursor shape.</p><p>An application calls the <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to retrieve cursor shape information in a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure.</p> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_TYPE}}</strong>-typed value that specifies the type of cursor shape. </p> </dd> + + + <dd> <p>The width in pixels of the mouse cursor.</p> </dd> + + + <dd> <p>The height in scan lines of the mouse cursor.</p> </dd> + + + <dd> <p>The width in bytes of the mouse cursor.</p> </dd> + + + <dd> <p>The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.</p> </dd> + + + + + <p>The <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure describes the current desktop image.</p> + <p>A non-zero <strong>LastMouseUpdateTime</strong> indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero <strong>LastMouseUpdateTime</strong>; however, the application must check the value of the <strong>PointerShapeBufferSize</strong> member to determine whether the shape was updated too.</p><p>If only the reference was updated (that is, the desktop image was not updated), the <strong>AccumulatedFrames</strong>, <strong>TotalMetadataBufferSize</strong>, and <strong>LastPresentTime</strong> members are set to zero.</p><p>An <strong>AccumulatedFrames</strong> value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the <strong>AccumulatedFrames</strong> value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.</p><p>A non-zero <strong>TotalMetadataBufferSize</strong> indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the <strong>{{IDXGIOutputDuplication::GetFrameDirtyRects}}</strong>, <strong>{{IDXGIOutputDuplication::GetFrameMoveRects}}</strong>, or <strong>{{IDXGIOutputDuplication::GetFramePointerShape}}</strong> method to obtain information about each type of metadata.</p><strong>Note</strong>??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? + + + <dd> <p>The time stamp of the last update of the desktop image. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image.</p> </dd> + + + <dd> <p>The time stamp of the last update to the mouse. The operating system calls the <strong>QueryPerformanceCounter</strong> function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the <strong>PointerShapeBufferSize</strong> member.</p> </dd> + + + <dd> <p>The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.</p> </dd> + + + <dd> <p>Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. <strong>{{TRUE}}</strong> if dirty regions were accumulated; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. <strong>{{TRUE}}</strong> if protected content was already blacked; otherwise, <strong>{{FALSE}}</strong>. The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OUTDUPL_POINTER_POSITION}}</strong> structure that describes the most recent mouse position if the <strong>LastMouseUpdateTime</strong> member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.</p> </dd> + + + <dd> <p>Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.</p> </dd> + + + <dd> <p>Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.</p> </dd> + + + + + <p>Describes a display mode and whether the display mode supports stereo.</p> + <p><strong>{{DXGI_MODE_DESC1}}</strong> is identical to <strong>{{DXGI_MODE_DESC}}</strong> except that <strong>{{DXGI_MODE_DESC1}}</strong> includes the <strong>Stereo</strong> member.</p><p>This structure is used by the <strong>GetDisplayModeList1</strong> and <strong>FindClosestMatchingMode1</strong> methods.</p> + + + <dd> <p>A value that describes the resolution width.</p> </dd> + + + <dd> <p>A value that describes the resolution height.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value that describes the display format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong>-typed value that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_MODE_SCALING}}</strong>-typed value that describes the scaling mode.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>Describes a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong>, <strong>CreateSwapChainForCoreWindow</strong>, <strong>CreateSwapChainForComposition</strong>, <strong>CreateSwapChainForCompositionSurfaceHandle</strong>, and <strong>GetDesc1</strong> methods.</p><strong>Note</strong>??You cannot cast a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> to a <strong>{{DXGI_SWAP_CHAIN_DESC}}</strong> and vice versa. An application must explicitly use the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the newer version of the swap-chain description structure.?<p>In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.</p><p>For a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member), you must set the <strong>Format</strong> member to <strong>{{DXGI_FORMAT_R16G16B16A16_FLOAT}}</strong>, <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>, or <strong>{{DXGI_FORMAT_R8G8B8A8_UNORM}}</strong>; you must set the <strong>Count</strong> member of the <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that the <strong>SampleDesc</strong> member specifies to one and the <strong>Quality</strong> member of <strong>{{DXGI_SAMPLE_DESC}}</strong> to zero because multiple sample antialiasing ({{MSAA}}) is not supported; you must set the <strong>BufferCount</strong> member to from two to sixteen. For more info about flip-model swap chain, see {{DXGI}} Flip Model.</p> + + + <dd> <p>A value that describes the resolution width. If you specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width value. You cannot specify the width as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A value that describes the resolution height. If you specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned height value. You cannot specify the height as zero when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong> structure that describes the display format.</p> </dd> + + + <dd> <p>Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. <strong>{{TRUE}}</strong> if stereo; otherwise, <strong>{{FALSE}}</strong>. If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set in the <strong>SwapEffect</strong> member).</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SAMPLE_DESC}}</strong> structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_USAGE}}</strong>-typed value that describes the surface usage and {{CPU}} access options for the back buffer. The back buffer can be used for shader input or render-target output.</p> </dd> + + + <dd> <p>A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SCALING}}</strong>-typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_SWAP_EFFECT}}</strong>-typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value when you call the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method because this method supports only flip presentation model.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_ALPHA_MODE}}</strong>-typed value that identifies the transparency behavior of the swap-chain back buffer.</p> </dd> + + + <dd> <p>A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior.</p> </dd> + + + + + <p>Describes full-screen mode for a swap chain.</p> + <p>This structure is used by the <strong>CreateSwapChainForHwnd</strong> and <strong>GetFullscreenDesc</strong> methods.</p> + + + <dd> <p>A <strong>{{DXGI_RATIONAL}}</strong> structure that describes the refresh rate in hertz.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCANLINE_ORDER}}</strong> enumerated type that describes the scan-line drawing mode.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_SCALING}}</strong> enumerated type that describes the scaling mode.</p> </dd> + + + <dd> <p>A Boolean value that specifies whether the swap chain is in windowed mode. <strong>{{TRUE}}</strong> if the swap chain is in windowed mode; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Describes information about present that helps the operating system optimize presentation.</p> + <p>This structure is used by the <strong>Present1</strong> method.</p><p>The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.</p><p>The following diagram and coordinates illustrate this example.</p><code> DirtyRectsCount = 2 +pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video +pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line +*pScrollRect = { 0, 0, 50, 70 } +*pScrollOffset = { 0, -10 } +</code><p>Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.</p><p>The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the <strong>pScrollRect</strong> member. +The arrow shows the scroll offset. The scroll offset is specified by the <strong>pScrollOffset</strong> member. +Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the <strong>DirtyRectsCount</strong> and <strong>pDirtyRects</strong> members.</p><p>The scroll rectangle and offset are not supported for the <strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong> present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.</p><p>The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see {{DXGI}} Flip Model.</p><p>For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.</p> + + + <dd> <p>The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.</p> </dd> + + + <dd> <p>A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to <strong>{{NULL}}</strong> if <strong>DirtyRectsCount</strong> is 0. An application must not update any pixel outside of the dirty rectangles.</p> </dd> + + + <dd> <p> A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.</p> <p>The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to <strong>{{NULL}}</strong> to indicate that no content is scrolled from the previous frame.</p> </dd> + + + <dd> <p>A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to <strong>{{NULL}}</strong> to indicate no offset.</p> </dd> + + + + + <p>Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure provides a {{DXGI}} 1.2 description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter2::GetDesc2}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type that describes the adapter type. The <strong>{{DXGI_ADAPTER_FLAG_REMOTE}}</strong> flag is reserved.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_GRAPHICS_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current graphics rendering task.</p> </dd> + + + <dd> <p>A value of the <strong>{{DXGI_COMPUTE_PREEMPTION_GRANULARITY}}</strong> enumerated type that describes the granularity level at which the {{GPU}} can be preempted from performing its current compute task.</p> </dd> + + + + + <p> </p><p> The <strong>{{IDXGIDisplayControl}}</strong> interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable. </p><p> We recommend that you not use <strong>{{IDXGIDisplayControl}}</strong> to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the <strong>{{IDXGIFactory2::IsWindowedStereoEnabled}}</strong> method to determine whether to render in stereo; for your full-screen apps, call the <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong> method and then determine whether any of the returned display modes support rendering in stereo. </p> + <strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface is only used by the <strong>Display</strong> app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?<strong>Note</strong>?? The <strong>{{IDXGIDisplayControl}}</strong> interface does not exist for Windows Store apps.?<p> Call <strong>QueryInterface</strong> from a factory object (<strong>{{IDXGIFactory}}</strong>, <strong>{{IDXGIFactory1}}</strong> or <strong>{{IDXGIFactory2}}</strong>) to retrieve the <strong>{{IDXGIDisplayControl}}</strong> interface. The following code shows how. </p><pre>{{IDXGIDisplayControl}} * pDXGIDisplayControl; +hr = g_pDXGIFactory-&gt;QueryInterface(__uuidof({{IDXGIDisplayControl}}), (void **)&amp;pDXGIDisplayControl);</pre><p> The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls <strong>{{IDXGIDisplayControl::IsStereoEnabled}}</strong> to query for stereo configuration. Control applets can use the <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> method to register for notifications of all stereo configuration changes. </p><p><strong>Platform Update for Windows?7:??</strong> Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.</p> + <p>You pass a Boolean value to the <strong>{{IDXGIDisplayControl::SetStereoEnabled}}</strong> method to either enable or disable the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> + <p><strong>IsStereoEnabled</strong> returns {{TRUE}} when the operating system's stereoscopic 3D display behavior is enabled and {{FALSE}} when this behavior is disabled.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetStereoEnabled</strong> doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. {{TRUE}} enables the operating system's stereoscopic 3D display behavior and {{FALSE}} disables it.</p> </dd> + + + + + <p> The <strong>{{IDXGIOutputDuplication}}</strong> interface accesses and manipulates the duplicated desktop image. </p> + <p> A collaboration application can use <strong>{{IDXGIOutputDuplication}}</strong> to access the desktop image. <strong>{{IDXGIOutputDuplication}}</strong> is supported in Desktop Window Manager ({{DWM}}) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit {{GDI}} non-{{DWM}} desktop modes are not supported. </p><p> An application can use <strong>{{IDXGIOutputDuplication}}</strong> on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses <strong>{{IDXGIOutputDuplication}}</strong> to perform the following operations: </p><ol> <li>Acquire the next desktop image.</li> <li>Retrieve the information that describes the image.</li> <li> Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls <strong>{{IDXGISurface::Map}}</strong>. Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client. </li> <li>After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.</li> </ol><p>The following components of the operating system can generate the desktop image:</p><ul> <li> The {{DWM}} by composing the desktop image </li> <li>A full-screen DirectX or OpenGL application</li> <li>An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen</li> </ul><p> All current <strong>{{IDXGIOutputDuplication}}</strong> interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> interface. </p><p> Examples of situations in which <strong>{{IDXGIOutputDuplication}}</strong> becomes invalid are: </p><ul> <li>Desktop switch</li> <li>Mode change</li> <li> Switch from {{DWM}} on, {{DWM}} off, or other full-screen application </li> </ul><p> In these situations, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and must create a new <strong>{{IDXGIOutputDuplication}}</strong> interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the <strong>{{IDXGIOutput1::DuplicateOutput}}</strong> method fails. </p><p> While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data. </p><p> The desktop image is always in the <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong> format. </p><p> The <strong>{{IDXGIOutputDuplication}}</strong> interface does not exist for Windows Store apps. </p> + + + + <p>Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.</p> + <p>After an application creates an <strong>{{IDXGIOutputDuplication}}</strong> interface, it calls <strong>GetDesc</strong> to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always <strong>{{DXGI_FORMAT_B8G8R8A8_UNORM}}</strong>.</p> + <p>Returns nothing.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure that describes the duplicated output. This parameter must not be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Indicates that the application is ready to process the next desktop image.</p> + <p>When <strong>AcquireNextFrame</strong> returns successfully, the calling application can access the desktop image that <strong>AcquireNextFrame</strong> returns in the variable at <em>ppDesktopResource</em>. +If the caller specifies a zero time-out interval in the <em>TimeoutInMilliseconds</em> parameter, <strong>AcquireNextFrame</strong> verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an <strong>{{INFINITE}}</strong> time-out interval in the <em>TimeoutInMilliseconds</em> parameter, the time-out interval never elapses.</p><strong>Note</strong>??You cannot cancel the wait that you specified in the <em>TimeoutInMilliseconds</em> parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-<strong>{{INFINITE}}</strong> time-out interval. After the time-out interval elapses, you can check for these other conditions and then call <strong>AcquireNextFrame</strong> again to wait for the next frame.?<p><strong>AcquireNextFrame</strong> acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that <strong>AcquireNextFrame</strong> acquires might have only the desktop image updated, only the reference shape or position updated, or both.</p> + <p><strong>AcquireNextFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully received the next desktop image.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_WAIT_TIMEOUT}} if the time-out interval elapsed before the next desktop frame was available.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>AcquireNextFrame</strong> without releasing the previous frame.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>AcquireNextFrame</strong> is incorrect; for example, if <em>pFrameInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.</p> <p>For more information about the time-out interval, see Remarks.</p> </dd> + + + <dd> <p>A reference to a memory location that receives the <strong>{{DXGI_OUTDUPL_FRAME_INFO}}</strong> structure that describes timing and presentation statistics for a frame.</p> </dd> + + + <dd> <p>A reference to a variable that receives the <strong>{{IDXGIResource}}</strong> interface of the surface that contains the desktop bitmap.</p> </dd> + + + + + <p>Gets information about dirty rectangles for the current desktop frame.</p> + <p><strong>GetFrameDirtyRects</strong> stores a size value in the variable at <em>pDirtyRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pDirtyRectsBuffer</em>:</p><ul> <li><strong>GetFrameDirtyRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameDirtyRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pDirtyRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>DirtyRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pDirtyRectsBufferSizeRequired</em> to determine the number of <strong>{{RECT}}</strong>s returned in the <em>pDirtyRectsBuffer</em> array.</p><p>The buffer contains the list of dirty <strong>{{RECT}}</strong>s for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move <strong>{{RECT}}</strong>s before it processes dirty <strong>{{RECT}}</strong>s.? + <p><strong>GetFrameDirtyRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about dirty rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameDirtyRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameDirtyRects</strong> is incorrect; for example, if <em>pDirtyRectsBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pDirtyRectsBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{RECT}}</strong> structures that identifies the dirty rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameDirtyRects</strong> needs to store information about dirty regions in the buffer at <em>pDirtyRectsBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the moved rectangles for the current desktop frame.</p> + <p><strong>GetFrameMoveRects</strong> stores a size value in the variable at <em>pMoveRectsBufferSizeRequired</em>. This value specifies the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pMoveRectBuffer</em>:</p><ul> <li><strong>GetFrameMoveRects</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFrameMoveRects</strong> supplies a buffer that is bigger than necessary. The size value returned at <em>pMoveRectsBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>MoveRectsBufferSize</em> parameter.</li> </ul><p>The caller can also use the value returned at <em>pMoveRectsBufferSizeRequired</em> to determine the number of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures returned.</p><p>The buffer contains the list of move {{RECTs}} for the current frame.</p><strong>Note</strong>??To produce a visually accurate copy of the desktop, an application must first process all move {{RECTs}} before it processes dirty {{RECTs}}.? + <p><strong>GetFrameMoveRects</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about moved rectangles.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul> In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided is not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFrameMoveRects</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFrameMoveRects</strong> is incorrect; for example, if <em>pMoveRectBuffer</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pMoveRectBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{DXGI_OUTDUPL_MOVE_RECT}}</strong> structures that identifies the moved rectangle regions for the desktop frame.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFrameMoveRects</strong> needs to store information about moved regions in the buffer at <em>pMoveRectBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + + + <p>Gets information about the new reference shape for the current desktop frame.</p> + <p><strong>GetFramePointerShape</strong> stores a size value in the variable at <em>pPointerShapeBufferSizeRequired</em>. This value specifies the number of bytes that <em>pPointerShapeBufferSizeRequired</em> needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to <em>pPointerShapeBuffer</em>:</p><ul> <li><strong>GetFramePointerShape</strong> fails with {{DXGI_ERROR_MORE_DATA}} because the buffer is not big enough.</li> <li><strong>GetFramePointerShape</strong> supplies a bigger than necessary buffer. The size value returned at <em>pPointerShapeBufferSizeRequired</em> informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the <em>PointerShapeBufferSize</em> parameter.</li> </ul><p>The <em>pPointerShapeInfo</em> parameter describes the new reference shape.</p> + <p><strong>GetFramePointerShape</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved information about the new reference shape.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_MORE_DATA}} if the buffer that the calling application provided was not big enough.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application called <strong>GetFramePointerShape</strong> without owning the desktop image.</li> <li>{{E_INVALIDARG}} if one of the parameters to <strong>GetFramePointerShape</strong> is incorrect; for example, if <em>pPointerShapeInfo</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The size in bytes of the buffer that the caller passed to the <em>pPointerShapeBuffer</em> parameter.</p> </dd> + + + <dd> <p>A reference to a buffer to which <strong>GetFramePointerShape</strong> copies and returns pixel data for the new reference shape.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the number of bytes that <strong>GetFramePointerShape</strong> needs to store the new reference shape pixel data in the buffer at <em>pPointerShapeBuffer</em>.</p> <p>For more information about returning the required buffer size, see Remarks.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DXGI_OUTDUPL_POINTER_SHAPE_INFO}}</strong> structure that receives the reference shape information.</p> </dd> + + + + + <p>Provides the {{CPU}} with efficient access to a desktop image if that desktop image is already in system memory.</p> + <p>You can successfully call <strong>MapDesktopSurface</strong> if the <strong>DesktopImageInSystemMemory</strong> member of the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure is set to <strong>{{TRUE}}</strong>. If <strong>DesktopImageInSystemMemory</strong> is <strong>{{FALSE}}</strong>, <strong>MapDesktopSurface</strong> returns {{DXGI_ERROR_UNSUPPORTED}}. Call <strong>{{IDXGIOutputDuplication::GetDesc}}</strong> to retrieve the <strong>{{DXGI_OUTDUPL_DESC}}</strong> structure.</p> + <p><strong>MapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the surface data.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already has an outstanding map on the desktop image. The application must call <strong>UnMapDesktopSurface</strong> before it calls <strong>MapDesktopSurface</strong> again. {{DXGI_ERROR_INVALID_CALL}} is also returned if the application did not own the desktop image when it called <strong>MapDesktopSurface</strong>.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the <strong>{{IDXGISurface::Map}}</strong> method.</li> <li>{{E_INVALIDARG}} if the <em>pLockedRect</em> parameter is incorrect; for example, if <em>pLockedRect</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_MAPPED_RECT}}</strong> structure that receives the surface data that the {{CPU}} needs to directly access the surface data. </p> </dd> + + + + + <p>Invalidates the reference to the desktop image that was retrieved by using <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</p> + <p><strong>UnMapDesktopSurface</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application did not map the desktop surface by calling <strong>{{IDXGIOutputDuplication::MapDesktopSurface}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Indicates that the application finished processing the frame.</p> + <p>The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.</p><p>For performance reasons, we recommend that you release the frame just before you call the <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong> method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted {{GPU}} cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.</p> + <p><strong>ReleaseFrame</strong> returns: </p><ul> <li>{{S_OK}} if it successfully completed.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the application already released the frame.</li> <li>{{DXGI_ERROR_ACCESS_LOST}} if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are: <ul> <li>Desktop switch</li> <li>Mode change</li> <li>Switch from {{DWM}} on, {{DWM}} off, or other full-screen application</li> </ul>In this situation, the application must release the <strong>{{IDXGIOutputDuplication}}</strong> interface and create a new <strong>{{IDXGIOutputDuplication}}</strong> for the new content.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>The <strong>{{IDXGISurface2}}</strong> interface extends the <strong>{{IDXGISurface1}}</strong> interface by adding support for subresource surfaces and getting a handle to a shared resource.</p> + <p>An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong>. Then, call <strong>QueryInterface</strong> on the <strong>{{IDXGISurface}}</strong> object that <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> returns to retrieve the <strong>{{IDXGISurface2}}</strong> interface.</p><p>Any object that supports <strong>{{IDXGISurface}}</strong> also supports <strong>{{IDXGISurface2}}</strong>.</p><p>The runtime automatically creates an <strong>{{IDXGISurface2}}</strong> interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an <strong>{{IDXGISurface2}}</strong> interface when you call <strong>{{ID3D11Device::CreateTexture2D}}</strong> to create a 2D texture. To retrieve the <strong>{{IDXGISurface2}}</strong> interface that represents the 2D texture surface, call <strong>{{ID3D11Texture2D::QueryInterface}}</strong>. In this call, you must pass the identifier of <strong>{{IDXGISurface2}}</strong>. If the 2D texture has only a single {{MIP}}-map level and does not consist of an array of textures, <strong>QueryInterface</strong> succeeds and returns a reference to the <strong>{{IDXGISurface2}}</strong> interface reference. Otherwise, <strong>QueryInterface</strong> fails and does not return the reference to <strong>{{IDXGISurface2}}</strong>.</p><p>You can call the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method to create an <strong>{{IDXGISurface2}}</strong> interface that refers to one subresource of a stereo resource.</p> + + + + <p>Gets the parent resource and subresource index that support a subresource surface.</p> + <p>For subresource surface objects that the <strong>{{IDXGIResource1::CreateSubresourceSurface}}</strong> method creates, <strong>GetResource</strong> simply returns the values that were used to create the subresource surface.</p><p>Current objects that implement <strong>{{IDXGISurface}}</strong> are either resources or views. <strong>GetResource</strong> for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{E_NOINTERFACE}} if the object does not implement the {{GUID}} that the <em>riid</em> parameter specifies.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the parent resource object for the subresource surface.</p> </dd> + + + <dd> <p>A reference to a variable that receives the index of the subresource surface.</p> </dd> + + + + + <p> An <strong>{{IDXGIResource1}}</strong> interface extends the <strong>{{IDXGIResource}}</strong> interface by adding support for creating a subresource surface object and for creating a handle to a shared resource. </p> + <p> To determine the type of memory a resource is currently located in, use <strong>{{IDXGIDevice::QueryResourceResidency}}</strong>. To share resources between processes, use <strong>{{ID3D11Device1::OpenSharedResource1}}</strong>. For information about how to share resources between multiple Windows graphics {{APIs}}, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics {{APIs}}. </p><p> You can retrieve the <strong>{{IDXGIResource1}}</strong> interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports <strong>{{ID3D10Resource}}</strong> or <strong>{{ID3D11Resource}}</strong> also supports <strong>{{IDXGIResource1}}</strong>. For example, the Direct3D 2D texture object that you create from <strong>{{ID3D11Device::CreateTexture2D}}</strong> supports <strong>{{IDXGIResource1}}</strong>. You can call <strong>QueryInterface</strong> on the 2D texture object (<strong>{{ID3D11Texture2D}}</strong>) to retrieve the <strong>{{IDXGIResource1}}</strong> interface. For example, to retrieve the <strong>{{IDXGIResource1}}</strong> interface from the 2D texture object, use the following code. </p><pre>{{IDXGIResource1}} * pDXGIResource; +hr = g_pd3dTexture2D-&gt;QueryInterface(__uuidof({{IDXGIResource1}}), (void **)&amp;pDXGIResource);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Creates a subresource surface object.</p> + <p>Subresource surface objects implement the <strong>{{IDXGISurface2}}</strong> interface, which inherits from <strong>{{IDXGISurface1}}</strong> and indirectly <strong>{{IDXGISurface}}</strong>. Therefore, the {{GDI}}-interoperable methods of <strong>{{IDXGISurface1}}</strong> work if the original resource interface object was created with the {{GDI}}-interoperable flag (<strong>{{D3D11_RESOURCE_MISC_GDI_COMPATIBLE}}</strong>).</p><p><strong>CreateSubresourceSurface</strong> creates a subresource surface that is based on the resource interface on which <strong>CreateSubresourceSurface</strong> is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.</p><p>You can use <strong>CreateSubresourceSurface</strong> to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if the index is out of range or if the subresource is not a valid surface.</li> <li>{{E_OUTOFMEMORY}} if insufficient memory is available to create the subresource surface object.</li> </ul><p>A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.</p> + + + <dd> <p>The index of the subresource surface object to enumerate.</p> </dd> + + + <dd> <p>The address of a reference to a <strong>{{IDXGISurface2}}</strong> interface that represents the created subresource surface object at the position specified by the <em>index</em> parameter.</p> </dd> + + + + + <p>Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. </p> + <p><strong>CreateSharedHandle</strong> only returns the {{NT}} handle when you created the resource as shared and specified that it uses {{NT}} handles (that is, you set the <strong>{{D3D11_RESOURCE_MISC_SHARED_NTHANDLE}}</strong> and <strong>{{D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX}}</strong> flags). If you created the resource as shared and specified that it uses {{NT}} handles, you must use <strong>CreateSharedHandle</strong> to get a handle for sharing. In this situation, you can't use the <strong>{{IDXGIResource::GetSharedHandle}}</strong> method because it will fail.</p><p>You can pass the handle that <strong>CreateSharedHandle</strong> returns in a call to the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to give a device access to a shared resource that you created on a different device.</p><p>Because the handle that <strong>CreateSharedHandle</strong> returns is an {{NT}} handle, you can use the handle with <strong>CloseHandle</strong>, <strong>DuplicateHandle</strong>, and so on. You can call <strong>CreateSharedHandle</strong> only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call <strong>DuplicateHandle</strong>. When you no longer need the shared resource handle, call <strong>CloseHandle</strong> to close the handle, in order to avoid memory leaks.</p><p>If you pass a name for the resource to <em>lpName</em> when you call <strong>CreateSharedHandle</strong> to share the resource, you can subsequently pass this name in a call to the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.</p><p>If you created the resource as shared and did not specify that it uses {{NT}} handles, you cannot use <strong>CreateSharedHandle</strong> to get a handle for sharing because <strong>CreateSharedHandle</strong> will fail.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following values:</p><ul> <li>{{DXGI_ERROR_INVALID_CALL}} if one of the parameters is invalid.</li> <li>{{DXGI_ERROR_NAME_ALREADY_EXISTS}} if the supplied name of the resource to share is already associated with another resource.</li> <li>{{E_ACCESSDENIED}} if the object is being created in a protected namespace.</li> <li>{{E_OUTOFMEMORY}} if sufficient memory is not available to create the handle.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSharedHandle</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{SECURITY_ATTRIBUTES}}</strong> structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.</p> <p>Set this parameter to <strong>{{NULL}}</strong> if you want child processes that the application might create to not inherit the handle returned by <strong>CreateSharedHandle</strong>, and if you want the resource that is associated with the returned handle to get a default security descriptor.</p> <p>The <strong>lpSecurityDescriptor</strong> member of the structure specifies a <strong>{{SECURITY_DESCRIPTOR}}</strong> for the resource. Set this member to <strong>{{NULL}}</strong> if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The {{ACLs}} in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.</p> </dd> + + + <dd> <p>The requested access rights to the resource. In addition to the generic access rights, {{DXGI}} defines the following values:</p> <ul> <li><strong>{{DXGI_SHARED_RESOURCE_READ}}</strong> ( 0x80000000L ) - specifies read access to the resource.</li> <li><strong>{{DXGI_SHARED_RESOURCE_WRITE}}</strong> ( 1 ) - specifies write access to the resource.</li> </ul> <p>You can combine these values by using a bitwise {{OR}} operation.</p> </dd> + + + <dd> <p>The name of the resource to share. The name is limited to {{MAX_PATH}} characters. Name comparison is case sensitive. You will need the resource name if you call the <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method to access the shared resource by name. If you instead call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> method to access the shared resource by handle, set this parameter to <strong>{{NULL}}</strong>.</p> <p>If <em>lpName</em> matches the name of an existing resource, <strong>CreateSharedHandle</strong> fails with {{DXGI_ERROR_NAME_ALREADY_EXISTS}}. This occurs because these objects share the same namespace.</p> <p>The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see +Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.</p> <p>The object can be created in a private namespace. For more information, see Object Namespaces.</p> </dd> + + + <dd> <p>A reference to a variable that receives the {{NT}} {{HANDLE}} value to the resource to share. You can use this handle in calls to access the resource.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice2}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes methods to block {{CPU}} processing until the {{GPU}} completes processing, and to offer resources to the operating system. </p> + <p> The <strong>{{IDXGIDevice2}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice2}}</strong> interface. To retrieve the <strong>{{IDXGIDevice2}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources by discarding their content.</p> + <p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>{{IDXGIDevice2::ReclaimResource}}</strong> method to reclaim the resource. You cannot call <strong>OfferResources</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><strong>Note</strong>??The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.?<p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>OfferResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>OfferResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully offered</li> <li>{{E_INVALIDARG}} if a resource in the array or the priority is invalid</li> </ul> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice2::OfferResources}}</strong>.</p> + <p>After you call <strong>{{IDXGIDevice2::OfferResources}}</strong> to offer one or more resources, you must call <strong>ReclaimResources</strong> before you can use those resources again. You must check the values in the array at <em>pDiscarded</em> to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.</p><p>To reclaim shared resources, call <strong>ReclaimResources</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources</strong> only while you hold the mutex.</p><p><strong>Platform Update for Windows?7:??</strong>The runtime validates that <strong>ReclaimResources</strong> is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p><strong>ReclaimResources</strong> returns: </p><ul> <li>{{S_OK}} if resources were successfully reclaimed</li> <li>{{E_INVALIDARG}} if the resources are invalid</li> </ul> + + + + <p>Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.</p> + <p><strong>EnqueueSetEvent</strong> calls the <strong>SetEvent</strong> function on the event object after all previously submitted rendering commands complete or the device is removed.</p><p>After an application calls <strong>EnqueueSetEvent</strong>, it can immediately call the <strong>WaitForSingleObject</strong> function to put itself to sleep until rendering commands complete.</p><p>You cannot use <strong>EnqueueSetEvent</strong> to determine work completion that is associated with presentation (<strong>{{IDXGISwapChain::Present}}</strong>); instead, we recommend that you use <strong>{{IDXGISwapChain::GetFrameStatistics}}</strong>.</p> + <p>Returns <strong>{{S_OK}}</strong> if successful; otherwise, returns one of the following values:</p><ul> <li><strong>{{E_OUTOFMEMORY}}</strong> if insufficient memory is available to complete the operation.</li> <li><strong>{{E_INVALIDARG}}</strong> if the parameter was validated and determined to be incorrect.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>EnqueueSetEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.</p> <p>The handle must have the {{EVENT_MODIFY_STATE}} access right. For more information about access rights, see Synchronization Object Security and Access Rights.</p> </dd> + + + + + <p>Provides presentation capabilities that are enhanced from <strong>{{IDXGISwapChain}}</strong>. These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p><p><strong>{{IDXGISwapChain1}}</strong> provides the <strong>IsTemporaryMonoSupported</strong> method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. +</p><strong>Note</strong>??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original (<strong>{{IDXGISwapChain}}</strong>) and new (<strong>{{IDXGISwapChain1}}</strong>) swap chain interfaces generally have the same behavior. For information about how <strong>{{IDXGISwapChain}}</strong> methods are translated into <strong>{{IDXGISwapChain1}}</strong> methods, see the descriptions of the <strong>{{IDXGISwapChain1}}</strong> methods.? + + + + <p>Gets a description of the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure that describes the swap chain.</p> </dd> + + + + + <p>Gets a description of a full-screen swap chain.</p> + <p>The semantics of <strong>GetFullscreenDesc</strong> are identical to that of the <strong>{{IDXGISwapchain::GetDesc}}</strong> method for <strong>{{HWND}}</strong>-based swap chains.</p> + <p><strong>GetFullscreenDesc</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the description of the full-screen swap chain.</li> <li> {{DXGI_ERROR_INVALID_CALL}} for non-<strong>{{HWND}}</strong> swap chains or if <em>pDesc</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_SWAP_CHAIN_FULLSCREEN_DESC}}</strong> structure that describes the full-screen swap chain.</p> </dd> + + + + + <p>Retrieves the underlying <strong>{{HWND}}</strong> for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong> method to create a swap chain that is associated with an <strong>{{HWND}}</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p>If <em>pHwnd</em> receives <strong>{{NULL}}</strong> (that is, the swap chain is not <strong>{{HWND}}</strong>-based), <strong>GetHwnd</strong> returns {{DXGI_ERROR_INVALID_CALL}}.</p> + + + + <p>Retrieves the underlying <strong>CoreWindow</strong> object for this swap-chain object.</p> + <p>Applications call the <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong> method to create a swap chain that is associated with an <strong>CoreWindow</strong> object.</p> + <p><strong>GetCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieved the underlying <strong>CoreWindow</strong> object.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>ppUnk</em> is <strong>{{NULL}}</strong>; that is, the swap chain is not associated with a <strong>CoreWindow</strong> object.</li> <li>Any <strong>{{HRESULT}}</strong> that a call to <strong>QueryInterface</strong> to query for an <strong>CoreWindow</strong> object might typically return.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic. </li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Presents a frame on the display screen. </p> + <p>An app can use <strong>Present1</strong> to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager ({{DWM}}). The {{DWM}} can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to <strong>Present1</strong>, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p><p>For info about calling <strong>Present1</strong> when your app uses multiple threads, see Multithread Considerations and Multithreading and {{DXGI}}.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_REMOVED}} , {{DXGI_STATUS_OCCLUDED}}, {{DXGI_ERROR_INVALID_CALL}}, or {{E_OUTOFMEMORY}}. </p> + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks.</li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput1}}</strong>), <strong>Present1</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_PRESENT_PARAMETERS}}</strong> structure that describes updated rectangles and scroll information of the frame to present.</p> </dd> + + + + + <p>Determines whether a swap chain supports ?temporary mono.?</p> + <p>Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the <strong>{{IDXGISwapChain1::Present1}}</strong> method with the <strong>{{DXGI_PRESENT_STEREO_TEMPORARY_MONO}}</strong> flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.</p> + <p>Indicates whether to use the swap chain in temporary mono mode. <strong>{{TRUE}}</strong> indicates that you can use temporary-mono mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsTemporaryMonoSupported</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Gets the output (the display monitor) to which you can restrict the contents of a present operation.</p> + <p>If the method succeeds, the runtime fills the buffer at <em>ppRestrictToOutput</em> with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.</p><p>The output is also owned by the adapter on which the swap chain's device was created.</p> + <p>Returns {{S_OK}} if the restrict-to output was successfully retrieved; otherwise, returns {{E_INVALIDARG}} if the reference is invalid.</p> + + + <dd> <p> A reference to a buffer that receives a reference to the <strong>{{IDXGIOutput}}</strong> interface for the restrict-to output. An application passes this reference to <strong>{{IDXGIOutput}}</strong> in a call to the <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain.</p> </dd> + + + + + <p>Changes the background color of the swap chain.</p> + <p>The background color affects only swap chains that you create with <strong>{{DXGI_SCALING_NONE}}</strong> in windowed mode. You pass this value in a call to <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.</p><p>When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The <strong>{{DXGI_PRESENT}}</strong> flags that you pass to <strong>{{IDXGISwapChain1::Present1}}</strong> can help achieve the effect that you require. For example, if you call <strong>SetBackgroundColor</strong> and then call <strong>{{IDXGISwapChain1::Present1}}</strong> with the <em>Flags</em> parameter set to <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong>, you change only the background color without changing the displayed contents of the swap chain.</p><p>When you call the <strong>{{IDXGISwapChain1::Present1}}</strong> method to display contents of the swap chain, <strong>{{IDXGISwapChain1::Present1}}</strong> uses the <strong>{{DXGI_ALPHA_MODE}}</strong> value that is specified in the <strong>AlphaMode</strong> member of the <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> structure to determine how to handle the <strong>a</strong> member of the <strong>{{DXGI_RGBA}}</strong> structure, the alpha value of the background color, that achieves window transparency. For example, if <strong>AlphaMode</strong> is <strong>{{DXGI_ALPHA_MODE_IGNORE}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong> ignores the a member of <strong>{{DXGI_RGBA}}</strong>.</p><strong>Note</strong>??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard {{RGB}} data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? + <p><strong>SetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the background color.</li> <li>{{E_INVALIDARG}} if the <em>pColor</em> parameter is incorrect, for example, <em>pColor</em> is {{NULL}} or any of the floating-point values of the members of <strong>{{DXGI_RGBA}}</strong> to which <em>pColor</em> points are outside the range from 0.0 through 1.0.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetBackgroundColor</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that specifies the background color to set.</p> </dd> + + + + + <p>Retrieves the background color of the swap chain.</p> + <strong>Note</strong>??The background color that <strong>GetBackgroundColor</strong> retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the <strong>{{IDXGISwapChain1::Present1}}</strong> method. The default value of the background color is black with full opacity: 0,0,0,1.? + <p><strong>GetBackgroundColor</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the background color.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the <em>pColor</em> parameter is invalid, for example, <em>pColor</em> is {{NULL}}.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + <dd> <p>A reference to a <strong>{{DXGI_RGBA}}</strong> structure that receives the background color of the swap chain.</p> </dd> + + + + + <p>Sets the rotation of the back buffers for the swap chain.</p> + <p>You can only use <strong>SetRotation</strong> to rotate the back buffers for flip-model swap chains that you present in windowed mode. </p><p><strong>SetRotation</strong> isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, <strong>SetRotation</strong> doesn't fail, but you must ensure that you specify no rotation (<strong>{{DXGI_MODE_ROTATION_IDENTITY}}</strong>) for the swap chain. Otherwise, when you call <strong>{{IDXGISwapChain1::Present1}}</strong> or <strong>{{IDXGISwapChain::Present}}</strong> to present a frame, the presentation fails.</p> + <p><strong>SetRotation</strong> returns: </p><ul> <li>{{S_OK}} if it successfully set the rotation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call <strong>SetRotation</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>SetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies how to set the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p>Gets the rotation of the back buffers for the swap chain.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetRotation</strong> fails with {{DXGI_ERROR_INVALID_CALL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A reference to a variable that receives a <strong>{{DXGI_MODE_ROTATION}}</strong>-typed value that specifies the rotation of the back buffers for the swap chain.</p> </dd> + + + + + <p> The <strong>{{IDXGIFactory2}}</strong> interface includes methods to create a newer version swap chain with more features than <strong>{{IDXGISwapChain}}</strong> and to monitor stereoscopic 3D capabilities. </p> + <p>To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 factory interface, pass <strong>{{IDXGIFactory2}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object that either <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> returns. +</p><p>Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. +You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, or <strong>{{IDXGIDevice2}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate +the factory. The following code shows how.</p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactory2}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), (void **)&amp;pIDXGIFactory); +</pre> + + + + <p>Determines whether to use stereo mode.</p> + <p>We recommend that windowed applications call <strong>IsWindowedStereoEnabled</strong> before they attempt to use stereo. <strong>IsWindowedStereoEnabled</strong> returns <strong>{{TRUE}}</strong> if both of the following items are true:</p><ul> <li>All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model ({{WDDM}}) for Windows?8 ({{WDDM}} 1.2). However, the adapter does not necessarily have to be able to scan out stereo.</li> <li>The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager ({{DWM}}) performs stereo composition on at least one adapter output.</li> </ul><p>The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.</p><p>The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.</p> + <p>Indicates whether to use stereo mode. <strong>{{TRUE}}</strong> indicates that you can use stereo mode; otherwise, <strong>{{FALSE}}</strong>.</p><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>IsWindowedStereoEnabled</strong> always returns {{FALSE}} because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with an <strong>{{HWND}}</strong> handle to the output window for the swap chain.</p> + <strong>Note</strong>??Do not use this method in Windows Store apps. Instead, use <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>hWnd</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain at a time with an <strong>{{HWND}}</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForHwnd</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong><strong>{{DXGI_SCALING_NONE}}</strong> is not supported on Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed and causes <strong>CreateSwapChainForHwnd</strong> to return {{DXGI_ERROR_INVALID_CALL}} when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Creates a swap chain that is associated with the <strong>CoreWindow</strong> object for the output window for the swap chain.</p> + <strong>Note</strong>??Use this method in Windows Store apps rather than <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>.?<p>If you specify the width, height, or both (<strong>Width</strong> and <strong>Height</strong> members of <strong>{{DXGI_SWAP_CHAIN_DESC1}}</strong> that <em>pDesc</em> points to) of the swap chain as zero, the runtime obtains the size from the output window that the <em>pWindow</em> parameter specifies. You can subsequently call the <strong>{{IDXGISwapChain1::GetDesc1}}</strong> method to retrieve the assigned width or height value.</p><p>Because you can associate only one flip presentation model swap chain (per layer) at a time with a <strong>CoreWindow</strong>, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see <strong>Deferred Destruction Issues with Flip Presentation Swap Chains</strong>.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForCoreWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForCoreWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Identifies the adapter on which a shared resource object was created.</p> + <p>You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call <strong>GetSharedResourceAdapterLuid</strong> before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the <strong>{{ID3D11Device1::OpenSharedResource1}}</strong> or <strong>{{ID3D11Device1::OpenSharedResourceByName}}</strong> method.</p> + <p><strong>GetSharedResourceAdapterLuid</strong> returns: </p><ul> <li>{{S_OK}} if it identified the adapter.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if <em>hResource</em> is invalid.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>GetSharedResourceAdapterLuid</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to a shared resource object. The <strong>{{IDXGIResource1::CreateSharedHandle}}</strong> method returns this handle.</p> </dd> + + + <dd> <p>A reference to a variable that receives a locally unique identifier (<strong>{{LUID}}</strong>) value that identifies the adapter. <strong>{{LUID}}</strong> is defined in Dxgi.h. An <strong>{{LUID}}</strong> is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an <strong>{{LUID}}</strong> is guaranteed only until the operating system is restarted.</p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of stereo status.</p> + <p><strong>RegisterStereoStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when stereo status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in stereo status by using event signaling.</p> + <p><strong>RegisterStereoStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterStereoStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of stereo status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterStereoStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when stereo status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterStereoStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterStereoStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterStereoStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Registers an application window to receive notification messages of changes of occlusion status.</p> + <p>Apps choose the Windows message that Windows sends when occlusion status changes.</p> + <p><strong>RegisterOcclusionStatusWindow</strong> returns: </p><ul> <li>{{S_OK}} if it successfully registered the window.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>WindowHandle</em> is not a valid window handle or not the window handle that the current process owns.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusWindow</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>The handle of the window to send a notification message to when occlusion status change occurs.</p> </dd> + + + <dd> <p>Identifies the notification message to send. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification message that <em>wMsg</em> specifies.</p> </dd> + + + + + <p>Registers to receive notification of changes in occlusion status by using event signaling.</p> + <p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the same event handle, <strong>RegisterOcclusionStatusEvent</strong> fails with {{DXGI_ERROR_INVALID_CALL}}.</p><p>If you call <strong>RegisterOcclusionStatusEvent</strong> multiple times with the different event handles, <strong>RegisterOcclusionStatusEvent</strong> properly registers the events.</p> + <p><strong>RegisterOcclusionStatusEvent</strong> returns: </p><ul> <li>{{S_OK}} if the method successfully registered the event.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if <em>hEvent</em> is not a valid handle or not an event handle. </li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>RegisterOcclusionStatusEvent</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + <dd> <p>A handle to the event object that the operating system sets when notification of occlusion status change occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle.</p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIFactory2::UnregisterOcclusionStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters a window or an event to stop it from receiving notification when occlusion status changes.</p> + <p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>UnregisterOcclusionStatus</strong> has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + <p>Returns nothing.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIFactory2::RegisterOcclusionStatusWindow}}</strong> or <strong>{{IDXGIFactory2::RegisterOcclusionStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>Creates a swap chain that you can use to send Direct3D content into the DirectComposition {{API}} or the <strong>Windows.{{UI}}.Xaml</strong> framework to compose in a window.</p> + <p>You can use composition swap chains with either DirectComposition?s <strong>{{IDCompositionVisual}}</strong> interface or {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class. For DirectComposition, you can call the <strong>{{IDCompositionVisual::SetContent}}</strong> method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For {{XAML}}, the <strong>SwapChainBackgroundPanel</strong> class exposes a classic {{COM}} interface <strong>{{ISwapChainBackgroundPanelNative}}</strong>. You can use the <strong>{{ISwapChainBackgroundPanelNative::SetSwapChain}}</strong> method to bind to the {{XAML}} {{UI}} graph. For info about how to use composition swap chains with {{XAML}}?s <strong>SwapChainBackgroundPanel</strong> class, see DirectX and {{XAML}} interop.</p><p>The <strong>{{IDXGISwapChain::SetFullscreenState}}</strong>, <strong>{{IDXGISwapChain::ResizeTarget}}</strong>, <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>, <strong>{{IDXGISwapChain1::GetHwnd}}</strong>, and <strong>{{IDXGISwapChain::GetCoreWindow}}</strong> methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.</p><p>For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.</p> + <p><strong>CreateSwapChainForComposition</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em> or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>CreateSwapChainForComposition</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p> The <strong>{{IDXGIAdapter2}}</strong> interface represents a display subsystem, which includes one or more {{GPUs}}, {{DACs}}, and video memory. </p> + <p> A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory1::EnumAdapters1}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p> + + + + <p>Gets a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit ({{GPU}}) can be preempted from performing its current task.</p> + <p>Use the <strong>GetDesc2</strong> method to get a {{DXGI}} 1.2 description of an adapter. To get a {{DXGI}} 1.1 description, use the <strong>{{IDXGIAdapter1::GetDesc1}}</strong> method. To get a {{DXGI}} 1.0 description, use the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p><p>The Windows Display Driver Model ({{WDDM}}) scheduler can preempt the {{GPU}}'s execution of application tasks. The granularity at which the {{GPU}} can be preempted from performing its current task in the {{WDDM}} 1.1 or earlier driver model is a direct memory access ({{DMA}}) buffer for graphics tasks or a compute packet for compute tasks. The {{GPU}} can switch between tasks only after it completes the currently executing unit of work, a {{DMA}} buffer or a compute packet. </p><p>A {{DMA}} buffer is the largest independent unit of graphics work that the {{WDDM}} scheduler can submit to the {{GPU}}. This buffer contains a set of {{GPU}} instructions that the {{WDDM}} driver and {{GPU}} use. A compute packet is the largest independent unit of compute work that the {{WDDM}} scheduler can submit to the {{GPU}}. A compute packet contains dispatches (for example, calls to the <strong>{{ID3D11DeviceContext::Dispatch}}</strong> method), which contain thread groups. The {{WDDM}} 1.2 or later driver model allows the {{GPU}} to be preempted at finer granularity levels than a {{DMA}} buffer or compute packet. You can use the <strong>GetDesc2</strong> method to retrieve the granularity levels for graphics and compute tasks.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns {{E_INVALIDARG}} if the <em>pDesc</em> parameter is <strong>{{NULL}}</strong>. </p> + + + <dd> <p>A reference to a <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure that describes the adapter. This parameter must not be <strong>{{NULL}}</strong>. On feature level 9 graphics hardware, earlier versions of <strong>GetDesc2</strong> (<strong>GetDesc</strong> and <strong>GetDesc1</strong>) return zeros for the {{PCI}} {{ID}} in the <strong>VendorId</strong>, <strong>DeviceId</strong>, <strong>SubSysId</strong>, and <strong>Revision</strong> members of the adapter description structure and ?Software Adapter? for the description string in the <strong>Description</strong> member. <strong>GetDesc2</strong> returns the actual feature level 9 hardware values in these members.</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput1}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To determine the outputs that are available from the adapter, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To determine the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>. You can then call <strong>QueryInterface</strong> from any <strong>{{IDXGIOutput}}</strong> object to obtain an <strong>{{IDXGIOutput1}}</strong> object.</p> + + + + <p>[Starting with Direct3D 11.1, we recommend not to use <strong>GetDisplayModeList</strong> anymore to retrieve the matching display mode. Instead, use <strong>{{IDXGIOutput1::GetDisplayModeList1}}</strong>, which supports stereo display mode.]</p><p>Gets the display modes that match the requested format and other input options.</p> + <p>In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this {{API}} to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).</p><p>As shown, this {{API}} is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.</p><pre> {{UINT}} num = 0; +{{DXGI_FORMAT}} format = {{DXGI_FORMAT_R32G32B32A32_FLOAT}}; +{{UINT}} flags = {{DXGI_ENUM_MODES_INTERLACED}}; pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, 0); ... {{DXGI_MODE_DESC}} * pDescs = new {{DXGI_MODE_DESC}}[num]; +pOutput-&gt;GetDisplayModeList( format, flags, &amp;num, pDescs); </pre> + <p>Returns one of the following {{DXGI_ERROR}}. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case {{DXGI_ERROR_MORE_DATA}} is returned (if there is not enough room for all the display modes). If <strong>GetDisplayModeList</strong> is called from a Remote Desktop Services session (formerly Terminal Services session), {{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} is returned.</p> + + + + <p>Finds the display mode that most closely matches the requested display mode.</p> + <p>Direct3D devices require {{UNORM}} formats.</p><p><strong>FindClosestMatchingMode1</strong> finds the closest matching available display mode to the mode that you specify in <em>pModeToMatch</em>.</p><p>If you set the <strong>Stereo</strong> member in the <strong>{{DXGI_MODE_DESC1}}</strong> structure to which <em>pModeToMatch</em> points to specify a stereo mode as input, <strong>FindClosestMatchingMode1</strong> considers only stereo modes. <strong>FindClosestMatchingMode1</strong> considers only mono modes if <strong>Stereo</strong> is not set.</p><p><strong>FindClosestMatchingMode1</strong> resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:</p><ol> <li><strong>ScanlineOrdering</strong></li> <li><strong>Scaling</strong></li> <li><strong>Format</strong></li> <li><strong>Resolution</strong></li> <li><strong>RefreshRate</strong></li> </ol><p>When <strong>FindClosestMatchingMode1</strong> determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when <strong>FindClosestMatchingMode1</strong> matches <strong>Resolution</strong>, it already filtered the display mode list by a certain <strong>ScanlineOrdering</strong>, <strong>Scaling</strong>, and <strong>Format</strong>, while it ignores <strong>RefreshRate</strong>. This ordering doesn't define the absolute ordering for every usage scenario of <strong>FindClosestMatchingMode1</strong>, because the application can choose some values initially, which effectively changes the order of resolving members.</p><p><strong>FindClosestMatchingMode1</strong> matches members of the display mode one at a time, generally in a specified order.</p><p>If a member is unspecified, <strong>FindClosestMatchingMode1</strong> gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, <strong>FindClosestMatchingMode1</strong> uses the default desktop output to find values. If an application uses a fully unspecified display mode, <strong>FindClosestMatchingMode1</strong> typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, <strong>FindClosestMatchingMode1</strong> resolves unspecified members later than specified members.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that describes the display mode to match. Members of <strong>{{DXGI_MODE_DESC1}}</strong> can be unspecified, which indicates no preference for that member. A value of 0 for <strong>Width</strong> or <strong>Height</strong> indicates that the value is unspecified. If either <strong>Width</strong> or <strong>Height</strong> is 0, both must be 0. A numerator and denominator of 0 in <strong>RefreshRate</strong> indicate it is unspecified. Other members of <strong>{{DXGI_MODE_DESC1}}</strong> have enumeration values that indicate that the member is unspecified. If <em>pConcernedDevice</em> is <strong>{{NULL}}</strong>, the <strong>Format</strong> member of <strong>{{DXGI_MODE_DESC1}}</strong> cannot be <strong>{{DXGI_FORMAT_UNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{DXGI_MODE_DESC1}}</strong> structure that receives a description of the display mode that most closely matches the display mode described at <em>pModeToMatch</em>.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. If this parameter is <strong>{{NULL}}</strong>, <strong>FindClosestMatchingMode1</strong> returns only modes whose format matches that of <em>pModeToMatch</em>; otherwise, <strong>FindClosestMatchingMode1</strong> returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:</p> <ul> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 12.0 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.1 Hardware </li> <li> {{DXGI}} Format Support for Direct3D Feature Level 11.0 Hardware </li> <li> Hardware Support for Direct3D 10Level9 Formats </li> <li> Hardware Support for Direct3D 10.1 Formats </li> <li> Hardware Support for Direct3D 10 Formats </li> </ul> </dd> + + + + + <p>Copies the display surface (front buffer) to a user-provided resource.</p> + <p><strong>GetDisplaySurfaceData1</strong> is similar to <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> except <strong>GetDisplaySurfaceData1</strong> takes an <strong>{{IDXGIResource}}</strong> and <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> takes an <strong>{{IDXGISurface}}</strong>.</p><p><strong>GetDisplaySurfaceData1</strong> returns an error if the input resource is not a 2D texture (represented by the <strong>{{ID3D11Texture2D}}</strong> interface) with an array size (<strong>ArraySize</strong> member of the <strong>{{D3D11_TEXTURE2D_DESC}}</strong> structure) that is equal to the swap chain buffers.</p><p>The original <strong>{{IDXGIOutput::GetDisplaySurfaceData}}</strong> and the updated <strong>GetDisplaySurfaceData1</strong> behave exactly the same. <strong>GetDisplaySurfaceData1</strong> was required because textures with an array size equal to 2 (<strong>ArraySize</strong> = 2) do not implement <strong>{{IDXGISurface}}</strong>.</p><p> You can call <strong>GetDisplaySurfaceData1</strong> only when an output is in full-screen mode. If <strong>GetDisplaySurfaceData1</strong> succeeds, it fills the destination resource.</p><p>Use <strong>{{IDXGIOutput::GetDesc}}</strong> to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with {{CPU}} write permission (see <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). Other surfaces can be created with {{CPU}} read-write permission (<strong>{{D3D11_CPU_ACCESS_READ}}</strong> | <strong>{{D3D11_CPU_ACCESS_WRITE}}</strong>). <strong>GetDisplaySurfaceData1</strong> modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). <strong>GetDisplaySurfaceData1</strong> performs the stretch and shrink with point sampling. </p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a resource interface that represents the resource to which <strong>GetDisplaySurfaceData1</strong> copies the display surface.</p> </dd> + + + + + <p>Creates a desktop duplication interface from the <strong>{{IDXGIOutput1}}</strong> interface that represents an adapter output.</p> + <p>If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.</p><p>For <strong>DuplicateOutput</strong> to succeed, you must create <em>pDevice</em> from <strong>{{IDXGIFactory1}}</strong> or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>.</p><p>If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.</p><p>By default, only four processes can use a <strong>{{IDXGIOutputDuplication}}</strong> interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop. </p><p>For improved performance, consider using <strong>DuplicateOutput1</strong>.</p> + <p><strong>DuplicateOutput</strong> returns: </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported. If <strong>DuplicateOutput</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput</strong> again after such a notification occurs. For more information, refer to <strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong> and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul><p><strong>Platform Update for Windows?7:??</strong>On Windows?7 or Windows Server?2008?{{R2}} with the Platform Update for Windows?7 installed, <strong>DuplicateOutput</strong> fails with {{E_NOTIMPL}}. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7. </p> + + + + <p>Provides the implementation of a shared fixed-size surface for Direct2D drawing.</p><strong>Note</strong>??If the surface is larger than the screen size, use <strong>{{IVirtualSurfaceImageSourceNative}}</strong> instead.? + <p>This interface provides the native implementation of the <strong>SurfaceImageSource</strong> Windows runtime type. To obtain a reference to <strong>{{ISurfaceImageSourceNative}}</strong>, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNative}}&gt; m_sisNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisNative) </pre> + + + + <p>Sets the {{DXGI}} device, created with {{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}, that will draw the surface. This method must be called from the {{UI}} thread.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface.</p> </dd> + + + + + <p>Opens the supplied {{DXGI}} surface for drawing.</p> + <p>If the app window that contains the <strong>SurfaceImageSource</strong> isn't active, like when it's suspended, calling the <strong>BeginDraw</strong> method returns an error.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface that will be drawn into.</p> </dd> + + + <dd> <p>Receives a reference to the surface for drawing. </p> </dd> + + + <dd> <p>Receives the point (x,y) offset of the surface that will be drawn into.</p> </dd> + + + + + <p>Closes the surface draw operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Performs the drawing behaviors when an update to <strong>VirtualSurfaceImageSource</strong> is requested.</p> + <p>This method is implemented by the developer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides an interface for the implementation of drawing behaviors when a <strong>VirtualSurfaceImageSource</strong> requests an update. </p> + <p>This interface is implemented by the developer to provide specific drawing behaviors for updates to a <strong>VirtualSurfaceImageSource</strong>. Classes that implement this interface are provided to the <strong>{{IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded}}</strong>, which calls the <strong>UpdatesNeeded</strong> method implementation whenever an update is requested.</p> + + + + <p>Invalidates a specific region of the shared surface for drawing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The region of the surface to invalidate.</p> </dd> + + + + + <p>Gets the total number of regions of the surface that must be updated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of regions to update.</p> </dd> + + + + + <p>Gets the set of regions that must be updated on the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of regions that must be updated. You obtain this by calling <strong>GetUpdateRectCount</strong>.</p> </dd> + + + <dd> <p>Receives a list of regions that must be updated.</p> </dd> + + + + + <p>Gets the boundaries of the visible region of the shared surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a rectangle that specifies the visible region of the shared surface.</p> </dd> + + + + + <p>Registers for the callback that will perform the drawing when an update to the shared surface is requested.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an implementation of <strong>{{IVirtualSurfaceUpdatesCallbackNative}}</strong>.</p> </dd> + + + + + <p>Resizes the surface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The updated width of the surface.</p> </dd> + + + <dd> <p>The updated height of the surface.</p> </dd> + + + + + + + + <p>Sets the DirectX swap chain for <strong>SwapChainBackgroundPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables performing bulk operations across all <strong>SurfaceImageSource</strong> objects created in the same process.</p> + + + + <p>Flushes all current {{GPU}} work for all <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects associated with the given device.</p> + <p>The <strong>FlushAllSurfacesWithDevice</strong> method flushes current {{GPU}} work for all <strong>SurfaceImageSource</strong> objects that were created with <em>device</em>. This {{GPU}} work includes Direct2D rendering work and internal {{GPU}} work done by the framework associated with rendering. This is useful if an application has created multiple <strong>SurfaceImageSource</strong> objects and needs to flush the {{GPU}} work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the {{UI}} thread to improve performance.</p><p>You can call the <strong>FlushAllSurfacesWithDevice</strong> method from a non-{{UI}} thread. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides the implementation of a shared Microsoft DirectX surface which is displayed in a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides the native implementation of the <strong>SurfaceImageSource</strong> class. To get a reference to the <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, you must cast a <strong>SurfaceImageSource</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call the <strong>QueryInterface</strong> method.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISurfaceImageSourceNativeWithD2D}}&gt; m_sisD2DNative; +// ... +{{IInspectable}}* sisInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(surfaceImageSource); +sisInspectable-&gt;QueryInterface(__uuidof({{ISurfaceImageSourceNative}}), (void **)&amp;m_sisD2DNative) </pre><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time. </p><p>The <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface enables drawing to a <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong> from one or more background threads, which allows high-performance DirectX rendering off the {{UI}} thread.</p><p>Only call the <strong>SetDevice</strong>, <strong>BeginDraw</strong>, and <strong>EndDraw</strong> methods on <strong>{{ISurfaceImageSourceNativeWithD2D}}</strong> interface, not on the <strong>{{ISurfaceImageSourceNative}}</strong> or <strong>{{IVirtualSurfaceImageSourceNative}}</strong> interfaces. </p><p>In order to support batching updates to multiple surfaces to improve performance, you can pass an <strong>{{ID2D1Device}}</strong> to the <strong>SetDevice</strong> method, instead of an <strong>{{ID3D11Device}}</strong>. The <strong>BeginDraw</strong> method can then optionally return a shared <strong>{{ID2D1DeviceContext}}</strong>, which the app uses to draw all content for that update.</p><p>To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support. </p><p>You can call the <strong>BeginDraw</strong>, <strong>SuspendDraw</strong>, and <strong>ResumeDraw</strong> methods from any background thread to enable high-performance multithreaded drawing.</p><p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the DirectX content with the current {{XAML}} {{UI}} thread frame. You can call <strong>BeginDraw</strong> on a background thread, call <strong>SuspendDraw</strong> when you're done drawing on the background thread, and call <strong>EndDraw</strong> on the {{UI}} thread.</p><p>Use <strong>SuspendDraw</strong> and <strong>ResumeDraw</strong> to suspend and resume drawing on any background or {{UI}} thread. </p><p>Handle the <strong>SurfaceContentsLost</strong> event to determine when you need to recreate content which may be lost if the system resets the {{GPU}}.</p> + + + + <p>Sets the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) or Direct2D device, created with <strong>{{D3D11_CREATE_DEVICE_BGRA_SUPPORT}}</strong>, that will draw the surface.</p> + <p>This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.</p> + + + <dd> <p>Pointer to the {{DXGI}} device interface. You can pass an <strong>{{ID2D1Device}}</strong> to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread. </p> </dd> + + + + + <p>Initiates an update to the associated <strong>SurfaceImageSource</strong> or <strong>VirtualSurfaceImageSource</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Closes the surface draw operation.</p> + <p>Always call the <strong>EndDraw</strong> method on the {{UI}} thread in order to synchronize updating the Microsoft DirectX content with the current {{XAML}} {{UI}} thread frame. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Suspends the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Resume the drawing operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative}}&gt; m_swapChainNative; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative}}), (void **)&amp;m_swapChainNative); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides interoperation between {{XAML}} and a DirectX swap chain. Unlike <strong>SwapChainBackgroundPanel</strong>, a <strong>SwapChainPanel</strong> can appear at any level in the {{XAML}} display tree, and more than 1 can be present in any given tree.</p> + <p>This interface provides the native implementation of the <strong>Windows::UI::XAML::Control::SwapChainPanel</strong> Windows Runtime type. To obtain a reference to <strong>{{ISwapChainPanelNative}}</strong>, you must cast a <strong>SwapChainPanel</strong> instance to <strong>{{IInspectable}}</strong> or <strong>{{IUnknown}}</strong>, and call <strong>QueryInterface</strong>.</p><pre> Microsoft::WRL::ComPtr&lt;{{ISwapChainPanelNative2}}&gt; m_swapChainNative2; +// ... +{{IInspectable}}* panelInspectable = ({{IInspectable}}*) reinterpret_cast&lt;{{IInspectable}}*&gt;(swapChainPanel); +panelInspectable-&gt;QueryInterface(__uuidof({{ISwapChainPanelNative2}}), (void **)&amp;m_swapChainNative2); </pre> + + + + <p>Sets the DirectX swap chain for <strong>SwapChainPanel</strong> using a handle to the swap chain.</p> + <p>SetSwapChain({{HANDLE}} swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.</p><p>{{XAML}} supports setting a {{DXGI}} swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the <strong>{{ISwapChainPanelNative}}</strong> interface from a SwapChainPanel instance and calling <strong>SetSwapChain({{IDXGISwapChain}} *swapChain)</strong>. </p><p>This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a {{XAML}} SwapChainPanel in the foreground app.</p><pre> &lt;!-- {{XAML}} markup --&gt; +&lt;Page&gt; &lt;SwapChainPanel x:Name=?captureStreamDisplayPanel? /&gt; +&lt;/Page&gt; // Definitions +ComPtr&lt;{{IDXGISwapChain1}}&gt; m_swapChain; +{{HANDLE}} m_swapChainHandle; +ComPtr&lt;{{ID3D11Device}}&gt; m_d3dDevice; +ComPtr&lt;{{IDXGIAdapter}}&gt; dxgiAdapter; +ComPtr&lt;{{IDXGIFactory2}}&gt; dxgiFactory; +ComPtr&lt;{{IDXGIFactoryMedia}}&gt; dxgiFactoryMedia; +ComPtr&lt;{{IDXGIDevice}}&gt; dxgiDevice; +{{DXGI_SWAP_CHAIN_DESC1}} swapChainDesc = {0}; // Get {{DXGI}} factory (assume standard boilerplate has created {{D3D11Device}}) +m_d3dDevice.As(&amp;dxgiDevice); +dxgiDevice-&gt;GetAdapter(&amp;dxgiAdapter); +dxgiAdapter-&gt;GetParent(__uuidof({{IDXGIFactory2}}), &amp;dxgiFactory); // Create swap chain and get handle +{{DCompositionCreateSurfaceHandle}}({{GENERIC_ALL}}, nullptr, &amp;m_swapChainHandle); +dxgiFactory.As(&amp;dxgiFactoryMedia); +dxgiFactoryMedia-&gt;CreateSwapChainForCompositionSurfaceHandle( m_d3dDevice.Get(), m_swapChainHandle, &amp;swapChainDesc, nullptr, &amp;m_swapChain +); // Set swap chain to display in a SwapChainPanel +ComPtr&lt;{{ISwapChainPanelNative2}}&gt; panelNative; +reinterpret_cast&lt;{{IUnknown}}*&gt;(captureStreamDisplayPanel)-&gt;QueryInterface({{IID_PPV_ARGS}}(&amp;panelNative))); +panelNative-&gt;SetSwapChainHandle(m_swapChainHandle); </pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Options for swap-chain color space.</p> + <p>This enum is used by <strong>SetColorSpace</strong>.</p> + + + <dd> <p>Specifies nominal range {{YCbCr}}, which isn't an absolute color space, but a way of encoding {{RGB}} info.</p> </dd> + + + <dd> <p>Specifies {{BT}}.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.</p> </dd> + + + <dd> <p>Specifies xvYCC or extended-gamut {{YCC}} (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.</p> </dd> + + + + + <p> Indicates options for presenting frames to the swap chain. </p> + <p>This enum is used by the <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure.</p> + + + <dd> <p> Specifies that the presentation mode is a composition surface, meaning that the conversion from {{YUV}} to {{RGB}} is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform {{YUV}} to {{RGB}} conversion itself, reducing the frequency of {{YUV}} to {{RGB}} conversion to once per video frame. </p> </dd> + + + <dd> <p> Specifies that the presentation mode is an overlay surface, meaning that the {{YUV}} to {{RGB}} conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See <strong>{{IDXGIDecodeSwapChain}}</strong>. </p> </dd> + + + <dd> <p> No presentation is specified. </p> </dd> + + + <dd> <p>An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:</p> <ul> <li>Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. +</li> <li>Stop using hardware protection if possible.</li> </ul> <p>Note that simply re-creating the swap chain or the device will usually have no impact as the {{DWM}} will continue to run out of memory and will return the same failure. </p> </dd> + + + + + <p>Specifies overlay support to check for in a call to <strong>{{IDXGIOutput3::CheckOverlaySupport}}</strong>.</p> + + + + <p>Represents a 3x2 matrix. Used with <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> to indicate the scaling and translation transform for <strong>SwapChainPanel</strong> swap chains.</p> + + + + <p>Used with <strong>{{IDXGIFactoryMedia}}</strong>::<strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> to describe a decode swap chain.</p> + + + + <p>Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.</p> + <p>This structure is used with the <strong>GetFrameStatisticsMedia</strong> method.</p> + + + <dd> <p>A value that represents the running total count of times that an image was presented to the monitor since the computer booted.</p> <strong>Note</strong>??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called <strong>{{IDXGISwapChain::Present}}</strong> or <strong>{{IDXGISwapChain1::Present1}}</strong>. ? </dd> + + + <dd> <p>A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling <strong>QueryPerformanceCounter</strong> and that have happened since the computer booted (for windowed mode, since the swap chain was created).</p> </dd> + + + <dd> <p>A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the <strong>QueryPerformanceCounter</strong> function.</p> </dd> + + + <dd> <p>Reserved. Always returns 0.</p> </dd> + + + <dd> <p>A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See <strong>{{DXGI_FRAME_PRESENTATION_MODE}}</strong>.</p> </dd> + + + <dd> <p>If the system approves an app's custom present duration request, this field is set to the approved custom present duration.</p> <p>If the app's custom present duration request is not approved, this field is set to zero.</p> </dd> + + + + + <p> The <strong>{{IDXGIDevice3}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. The interface exposes a method to trim graphics memory usage by the {{DXGI}} device. </p> + <p> The <strong>{{IDXGIDevice3}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice3}}</strong> interface. To retrieve the <strong>{{IDXGIDevice3}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice3}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice3}}), (void **)&amp;pDXGIDevice);</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Trims the graphics memory allocated by the <strong>{{IDXGIDevice3}}</strong> {{DXGI}} device on the app's behalf.</p><p>For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for {{PLM}} and in general lead to increased memory usage by the overall system.</p><p>Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including <strong>CoreWindow</strong> and {{XAML}} interop) must call <strong>Trim</strong> in response to the {{PLM}} suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.</p><p>Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the <strong>Trim</strong> call, therefore apps should only call <strong>Trim</strong> when going idle for a period of time (in response to {{PLM}} suspend, for example).</p><p>Apps should ensure that they call <strong>Trim</strong> as one of the last {{D3D}} operations done before going idle. Direct3D will normally defer the destruction of {{D3D}} objects. Calling <strong>Trim</strong>, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling <strong>Trim</strong> will cause the object to be destroyed and memory to be deallocated before the app suspends.</p><p>Similar to <strong>{{ID3D11DeviceContext::Flush}}</strong>, apps should call <strong>{{ID3D11DeviceContext::ClearState}}</strong> before calling <strong>Trim</strong>. <strong>ClearState</strong> clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.</p><p>It is also prudent to release references on middleware before calling <strong>Trim</strong>, as that middleware may also need to release references +to Direct3D objects.</p> + <p>This method does not return a value.</p> + + + + <p>Extends <strong>{{IDXGISwapChain1}}</strong> with methods to support swap back buffer scaling and lower-latency swap chains.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>.</p> + + + + <p>Sets the source region to be used for the swap chain.</p><p>Use <strong>SetSourceSize</strong> to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> method. Prior to Windows?8.1, calling <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].</p> + <p>This method can return:</p><ul> <li>{{E_INVALIDARG}} if one or more parameters exceed the size of the back buffer.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the source region used for the swap chain.</p><p>Use <strong>GetSourceSize</strong> to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use <strong>SetSourceSize</strong> to set this portion of the swap chain. </p> + <p> This method can return error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + + <p>Sets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>This method is only valid for use on swap chains created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>. Otherwise, the result will be {{DXGI_ERROR_INVALID_CALL}}.</p> + <p>Returns {{S_OK}} if successful; otherwise, {{DXGI_ERROR_DEVICE_REMOVED}} if the device was removed.</p> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.</p> </dd> + + + + + <p>Gets the number of frames that the swap chain is allowed to queue for rendering.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the following members of the {{D3DERR}} enumerated type:</p><ul> <li><strong>{{D3DERR_DEVICELOST}}</strong></li> <li><strong>{{D3DERR_DEVICEREMOVED}}</strong></li> <li><strong>{{D3DERR_DRIVERINTERNALERROR}}</strong></li> <li><strong>{{D3DERR_INVALIDCALL}}</strong></li> <li><strong>{{D3DERR_OUTOFVIDEOMEMORY}}</strong></li> </ul> + + + <dd> <p>The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.</p> </dd> + + + + + <p>Returns a waitable handle that signals when the {{DXGI}} adapter has finished presenting a new frame.</p><p>Windows?8.1 introduces new {{APIs}} that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the {{DXGI}} swap chain with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong> flag set, then call <strong>GetFrameLatencyWaitableObject</strong> to retrieve the waitable handle. Use the waitable handle with <strong>WaitForSingleObjectEx</strong> to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.</p> + <p>A handle to the waitable object, or {{NULL}} if the swap chain was not created with <strong>{{DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT}}</strong>.</p> + + + + <p>Sets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>SetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{E_INVALIDARG}} if the <em>pMatrix</em> parameter is incorrect, for example, <em>pMatrix</em> is {{NULL}} or the matrix represented by <strong>{{DXGI_MATRIX_3X2_F}}</strong> includes components other than scale and translation.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>Gets the transform matrix that will be applied to a composition swap chain upon the next present. </p><p>Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in {{XAML}} pages using the <strong>SwapChainPanel</strong> element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch {{UI}}. The <strong>GetMatrixTransform</strong> and <strong>SetMatrixTransform</strong> methods are used to synchronize scaling of the DirectX swap chain with its associated <strong>SwapChainPanel</strong> element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.</p> + <p><strong>GetMatrixTransform</strong> returns: </p><ul> <li>{{S_OK}} if it successfully retrieves the transform matrix.</li> <li>{{DXGI_ERROR_INVALID_CALL}} if the method is called on a swap chain that was not created with <strong>CreateSwapChainForComposition</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Queries an adapter output for multiplane overlay support. If this {{API}} returns ?{{TRUE}}?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this {{API}} returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the <strong>{{DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER}}</strong> flag).</p> + <p>See <strong>CreateSwapChainForCoreWindow</strong> for info on creating a foreground swap chain.</p> + <p>{{TRUE}} if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns {{FALSE}}.</p> + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p>Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) object was created.</p> + <p>The <strong>GetCreationFlags</strong> method returns flags that were passed to the <strong>CreateDXGIFactory2</strong> function, or were implicitly constructed by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, <strong>{{D3D11CreateDevice}}</strong>, or <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>.</p> + <p>The creation flags.</p> + + + + <p> Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface. </p> + <p> Decode swap chains are intended for use primarily with {{YUV}} surface formats. When using decode buffers created with an {{RGB}} surface format, the <em>TargetRect</em> and <em>DestSize</em> must be set equal to the buffer dimensions. <em>SourceRect</em> cannot exceed the buffer dimensions. </p><p> In clone mode, the decode swap chain is only guaranteed to be shown on the primary output. </p><p> Decode swap chains cannot be used with dirty rects. </p> + + + + <p>Presents a frame on the output adapter. The frame is a subresource of the <strong>{{IDXGIResource}}</strong> object that was used to create the decode swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the following error codes:</p><ul> <li>{{DXGI_ERROR_DEVICE_REMOVED}}</li> <li>{{DXGI_STATUS_OCCLUDED}}</li> <li>{{DXGI_ERROR_INVALID_CALL}}</li> <li><strong>{{E_OUTOFMEMORY}}</strong></li> </ul> + + + + <p>Sets the rectangle that defines the source region for the video processing blit operation.</p><p>The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the source region to set for the swap chain.</p> </dd> + + + + + <p>Sets the rectangle that defines the target region for the video processing blit operation.</p><p>The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that contains the target region to set for the swap chain.</p> </dd> + + + + + <p>Sets the size of the destination surface to use for the video processing blit operation.</p><p>The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>The width of the destination size, in pixels.</p> </dd> + + + <dd> <p>The height of the destination size, in pixels.</p> </dd> + + + + + <p>Gets the source region that is used for the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the source region for the swap chain.</p> </dd> + + + + + <p>Gets the rectangle that defines the target region for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that receives the target region for the swap chain.</p> </dd> + + + + + <p>Gets the size of the destination surface to use for the video processing blit operation.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a variable that receives the width in pixels.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height in pixels.</p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns {{S_OK}} on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to a combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space to set for the swap chain.</p> </dd> + + + + + <p>Gets the color space used by the swap chain.</p> + <p>A combination of <strong>{{DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the color space for the swap chain.</p> + + + + <p> Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video. </p> + <p> To create a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) media factory interface, pass <strong>{{IDXGIFactoryMedia}}</strong> into either the <strong>CreateDXGIFactory</strong> or <strong>CreateDXGIFactory1</strong> function or call <strong>QueryInterface</strong> from a factory object returned by <strong>CreateDXGIFactory</strong>, <strong>CreateDXGIFactory1</strong>, or <strong>CreateDXGIFactory2</strong>. </p><p> Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the <strong>{{IDXGIDevice}}</strong>, <strong>{{IDXGIDevice1}}</strong>, <strong>{{IDXGIDevice2}}</strong>, or <strong>{{IDXGIDevice3}}</strong> interface from the Direct3D device and then use the <strong>{{IDXGIObject::GetParent}}</strong> method to locate the factory. The following code shows how. </p><pre>{{IDXGIDevice2}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice2}}), (void **)&amp;pDXGIDevice); {{IDXGIAdapter}} * pDXGIAdapter; +hr = pDXGIDevice-&gt;GetParent(__uuidof({{IDXGIAdapter}}), (void **)&amp;pDXGIAdapter); {{IDXGIFactoryMedia}} * pIDXGIFactory; +pDXGIAdapter-&gt;GetParent(__uuidof({{IDXGIFactoryMedia}}), (void **)&amp;pIDXGIFactory);</pre> + + + + <p>Creates a {{YUV}} swap chain for an existing DirectComposition surface handle.</p> + <p><strong>CreateSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>.</li> <li>Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>.</li> </ul> + + + + <p> Creates a {{YUV}} swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an <strong>{{IDXGIResource}}</strong> buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the <strong>{{IDXGIResource}}</strong>. </p> + <p>The <strong>{{IDXGIResource}}</strong> provided via the <em>pYuvDecodeBuffers</em> parameter must point to at least one subresource, and all subresources must be created with the <strong>{{D3D11_BIND_DECODER}}</strong> flag.</p> + <p><strong>CreateDecodeSwapChainForCompositionSurfaceHandle</strong> returns: </p><ul> <li>{{S_OK}} if it successfully created a swap chain.</li> <li>{{E_OUTOFMEMORY}} if memory is unavailable to complete the operation.</li> <li> {{DXGI_ERROR_INVALID_CALL}} if the calling application provided invalid data, for example, if <em>pDesc</em>, <em>pYuvDecodeBuffers</em>, or <em>ppSwapChain</em> is <strong>{{NULL}}</strong>. </li> <li> Possibly other error codes that are described in the {{DXGI_ERROR}} topic that are defined by the type of device that you pass to <em>pDevice</em>. </li> </ul> + + + + <p>This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.</p><p> For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel. </p> + <p> Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the {{DXGI}} output adapter is attached to an external display then <strong>CheckPresentDurationSupport</strong> will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes. </p><p> Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds. </p> + + + + <p>Queries the system for a <strong>{{DXGI_FRAME_STATISTICS_MEDIA}}</strong> structure that indicates whether a custom refresh rate is currently approved by the system.</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + + <p>Requests a custom presentation duration (custom refresh rate).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>The custom presentation duration, specified in hundreds of nanoseconds.</p> </dd> + + + + + <p>Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.</p> + <p>If the {{DXGI}} output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).</p> + <p>This method returns {{S_OK}} on success, or a {{DXGI}} error code on failure.</p> + + + <dd> <p>Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.</p> </dd> + + + <dd> <p>A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.</p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput3}}</strong> interface exposes a method to check for overlay support.</p> + + + + <p>Checks for overlay support.</p> + <p>Returns one of the error codes described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlaySupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay support. </p> </dd> + + + + + <p>Creates a {{DXGI}} 1.3 factory that you can use to generate other {{DXGI}} objects.</p><p>In Windows?8, any {{DXGI}} factory created while {{DXGIDebug}}.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that {{DXGIDebug}}.dll be loaded instead. Use <strong>CreateDXGIFactory2</strong> and specify the {{DXGI_CREATE_FACTORY_DEBUG}} flag to request {{DXGIDebug}}.dll; the {{DLL}} will be loaded if it is present on the system.</p> + <p>This function accepts a flag indicating whether {{DXGIDebug}}.dll is loaded. The function otherwise behaves identically to <strong>CreateDXGIFactory1</strong>.</p> + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p>Valid values include the <strong>{{DXGI_CREATE_FACTORY_DEBUG}} (0x01)</strong> flag, and zero.</p> <strong>Note</strong>??This flag will be set by the {{D3D}} runtime if:<ul> <li>The system creates an implicit factory during device creation.</li> <li>The {{D3D11_CREATE_DEVICE_DEBUG}} flag is specified during device creation, for example using <strong>{{D3D11CreateDevice}}</strong> (or the swapchain method, or the Direct3D 10 equivalents).</li> </ul> ? </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory2}}</strong> object referenced by the <em>ppFactory</em> parameter.</p> </dd> + + + <dd> <p>Address of a reference to an <strong>{{IDXGIFactory2}}</strong> object.</p> </dd> + + + + + <p>Retrieves an interface that Windows Store apps use for debugging the Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>The <strong>{{DXGIGetDebugInterface1}}</strong> function returns <strong>{{E_NOINTERFACE}}</strong> on systems without the Windows Software Development Kit ({{SDK}}) installed, because it's a development-time aid.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Not used.</p> </dd> + + + <dd> <p>The globally unique identifier ({{GUID}}) of the requested interface type, which can be the identifier for the <strong>{{IDXGIDebug}}</strong>, <strong>{{IDXGIDebug1}}</strong>, or <strong>{{IDXGIInfoQueue}}</strong> interfaces.</p> </dd> + + + <dd> <p>A reference to a buffer that receives a reference to the debugging interface.</p> </dd> + + + + + <p>Specifies color space support for the swap chain.</p> + + + <dd> <p>Color space support is present.</p> </dd> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies support for overlay color space.</p> + + + <dd> <p>Overlay color space support is present.</p> </dd> + + + + + <p>Specifies the memory segment group to use.</p> + <p>This enum is used by <strong>QueryVideoMemoryInfo</strong> and <strong>SetVideoMemoryReservation</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p> The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the {{GPU}}. Applications should target the local segment group as the target size for their working set.</p> </dd> + + + <dd> <p>The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.</p> </dd> + + + + + <p>Describes the current video memory budgeting parameters.</p> + <p>Use this structure with <strong>QueryVideoMemoryInfo</strong>.</p><p>Refer to the remarks for <strong>{{D3D12_MEMORY_POOL}}</strong>.</p> + + + <dd> <p>Specifies the {{OS}}-provided video memory budget, in bytes, that the application should target. If <em>CurrentUsage</em> is greater than <em>Budget</em>, the application may incur stuttering or performance penalties due to background activity by the {{OS}} to provide other applications with a fair usage of video memory.</p> </dd> + + + <dd> <p> Specifies the application?s current video memory usage, in bytes.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call <strong>{{IDXGIAdapter3::SetVideoMemoryReservation}}</strong>.</p> </dd> + + + <dd> <p> The amount of video memory, in bytes, that is reserved by the application. The {{OS}} uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement. </p> </dd> + + + + + <p>Extends <strong>{{IDXGISwapChain2}}</strong> with methods to support getting the index of the swap chain's current back buffer and support for color space.</p> + + + + <p>Gets the index of the swap chain's current back buffer.</p> + <p>Returns the index of the current back buffer.</p> + + + + <p>Checks the swap chain's support for color space.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check support for.</p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for color space support. </p> </dd> + + + + + <p>Sets the color space used by the swap chain.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies the color space to set.</p> </dd> + + + + + <p> Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a {{D3D12}} command queue as an input device. This should be called when the application window is resized. </p> + <p> This method is only valid to call when the swapchain was created using a {{D3D12}} command queue (<strong>{{ID3D12CommandQueue}}</strong>) as an input device. </p><p> When a swapchain is created on a multi-{{GPU}} adapter, the backbuffers are all created on node 1 and only a single command queue is supported. <strong>ResizeBuffers1</strong> enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering ({{AFR}}) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters. </p><p> The only difference between <strong>{{IDXGISwapChain::ResizeBuffers}}</strong> in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> or {{DXGI_SWAP_EFFECT_FLIP_DISCARD}} value set. In Windows?8, you must call <strong>ResizeBuffers</strong> to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the <strong>{{IDXGISwapChain::Present}}</strong> method fails. </p><p> Also see the Remarks section in <strong>{{IDXGISwapChain::ResizeBuffers}}</strong>, all of which is relevant to <strong>ResizeBuffers1</strong>. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than <strong>{{DXGI_MAX_SWAP_CHAIN_BUFFERS}}</strong>. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model. </p> </dd> + + + <dd> <p> The new width of the back buffer. If you specify zero, {{DXGI}} will use the width of the client area of the target window. You can't specify the width as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> The new height of the back buffer. If you specify zero, {{DXGI}} will use the height of the client area of the target window. You can't specify the height as zero if you called the <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong> method to create the swap chain for a composition surface. </p> </dd> + + + <dd> <p> A <strong>{{DXGI_FORMAT}}</strong>-typed value for the new format of the back buffer. Set this value to <strong>{{DXGI_FORMAT_UNKNOWN}}</strong> to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model. </p> </dd> + + + <dd> <p> A combination of <strong>{{DXGI_SWAP_CHAIN_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for swap-chain behavior. </p> </dd> + + + <dd> <p> An array of {{UINTs}}, of total size <em>BufferCount</em>, where the value indicates which node the back buffer should be created on. Buffers created using <strong>ResizeBuffers1</strong> with a non-null <em>pCreationNodeMask</em> array are visible to all nodes. </p> </dd> + + + <dd> <p> An array of command queues (<strong>{{ID3D12CommandQueue}}</strong> instances), of total size <em>BufferCount</em>. Each queue provided must match the corresponding creation node mask specified in the <em>pCreationNodeMask</em> array. When <strong>Present()</strong> is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation. </p> </dd> + + + + + <p>Represents an adapter output (such as a monitor). The <strong>{{IDXGIOutput4}}</strong> interface exposes a method to check for overlay color space support.</p> + + + + <p>Checks for overlay color space support.</p> + <p>This method returns <strong>{{S_OK}}</strong> on success, or it returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A <strong>{{DXGI_FORMAT}}</strong>-typed value for the color format.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_COLOR_SPACE_TYPE}}</strong>-typed value that specifies color space type to check overlay support for.</p> </dd> + + + <dd> <p>A reference to the Direct3D device interface. <strong>CheckOverlayColorSpaceSupport</strong> returns only support info about this scan-out device. </p> </dd> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies options for overlay color space support. </p> </dd> + + + + + <p> Enables creating Microsoft DirectX Graphics Infrastructure ({{DXGI}}) objects. </p> + + + + <p> Outputs the <strong>{{IDXGIAdapter}}</strong> for the specified {{LUID}}. </p> + <p> For Direct3D 12, it's no longer possible to backtrack from a device to the <strong>{{IDXGIAdapter}}</strong> that was used to create it. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> enables an app to retrieve information about the adapter where a {{D3D12}} device was created. <strong>{{IDXGIFactory4::EnumAdapterByLuid}}</strong> is designed to be paired with <strong>{{ID3D12Device::GetAdapterLuid}}</strong>. For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + + <p> Provides an adapter which can be provided to {{D3D12CreateDevice}} to use the {{WARP}} renderer. </p> + <p> For more information, see {{DXGI}} 1.4 Improvements. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. See also Direct3D 12 Return Codes. </p> + + + <dd> <p> The globally unique identifier ({{GUID}}) of the <strong>{{IDXGIFactory4}}</strong> object referenced by the <em>ppvAdapter</em> parameter. </p> </dd> + + + <dd> <p> The address of an <strong>{{IDXGIAdapter}}</strong> interface reference to the adapter. This parameter must not be {{NULL}}. </p> </dd> + + + + + <p>This interface adds some memory residency methods, for budgeting and reserving physical memory.</p> + <p>For more details, refer to the Residency section of the {{D3D12}} documentation.</p> + + + + <p>Registers to receive notification of hardware content protection teardown events.</p> + <p>Call <strong>{{ID3D11VideoDevice::GetContentProtectionCaps}}</strong>() to check for the presence of the <strong>{{D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN}}</strong> capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call <strong>{{ID3D11VideoContext1::CheckCryptoSessionStatus}}</strong> to determine the impact of the hardware teardown for a specific <strong>{{ID3D11CryptoSession}}</strong> interface. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the event object that the operating system sets when hardware content protection teardown occurs. The <strong>CreateEvent</strong> or <strong>OpenEvent</strong> function returns this handle. </p> </dd> + + + <dd> <p>A reference to a key value that an application can pass to the <strong>{{IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus}}</strong> method to unregister the notification event that <em>hEvent</em> specifies.</p> </dd> + + + + + <p>Unregisters an event to stop it from receiving notification of hardware content protection teardown events.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p> This method informs the process of the current budget and process usage. </p> + <p> Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is queried. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Fills in a {{DXGI_QUERY_VIDEO_MEMORY_INFO}} structure with the current values. </p> </dd> + + + + + <p> This method sends the minimum required physical memory for an application, to the {{OS}}. </p> + <p> Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the {{OS}} quickly minimize the impact of large memory pressure situations. </p> + <p> Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}. </p> + + + <dd> <p> Specifies the device's physical adapter for which the video memory information is being set. For single-{{GPU}} operation, set this to zero. If there are multiple {{GPU}} nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter. </p> </dd> + + + <dd> <p> Specifies a {{DXGI_MEMORY_SEGMENT_GROUP}} that identifies the group as local or non-local. </p> </dd> + + + <dd> <p> Specifies a {{UINT64}} that sets the minimum required physical memory, in bytes. </p> </dd> + + + + + <p>This method establishes a correlation between a {{CPU}} synchronization object and the budget change event.</p> + <p>Instead of calling <strong>QueryVideoMemoryInfo</strong> regularly, applications can use {{CPU}} synchronization objects to efficiently wake threads when budget changes occur. </p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies a {{HANDLE}} for the event.</p> </dd> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + <p>This method stops notifying a {{CPU}} synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.</p> + <p>An application may switch back to polling for the information regularly.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A key value for the window or event to unregister. The <strong>{{IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent}}</strong> method returns this value. </p> </dd> + + + + + + + + <p>Specifies the header metadata type.</p> + <p>This enum is used by the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>Indicates there is no header metadata.</p> </dd> + + + <dd> <p>Indicates the header metadata is held by a <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p>Specifies flags for the <strong>OfferResources1</strong> method.</p> + + + + <p>Specifies result flags for the <strong>ReclaimResources1</strong> method.</p> + + + + <p>Specifies a range of hardware features, to be used when checking for feature support.</p> + <p>This enum is used by the <strong>CheckFeatureSupport</strong> method.</p> + + + <dd> <p>The display supports tearing, a requirement of variable refresh rate displays.</p> </dd> + + + + + <p>Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.</p> + <p>The X and Y coordinates of the parameters mean the xy chromacity coordinate in the {{CIE1931}} color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.</p><p>This structure is used in conjunction with the <strong>SetHDRMetaData</strong> method.</p> + + + <dd> <p>The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate. </p> </dd> + + + <dd> <p>The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000. </p> </dd> + + + <dd> <p>The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.</p> </dd> + + + <dd> <p>The maximum nit value (in units of 0.00001 nit) used anywhere in the content. </p> </dd> + + + <dd> <p>The per-frame average of the maximum nit values (in units of 0.00001 nit).</p> </dd> + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + <p>Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the <strong>{{IDXGIOutputDuplication}}</strong> object.</p> + <p>This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original <strong>DuplicateOutput</strong> function always converts the fullscreen surface to a 32-bit {{BGRA}} format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit {{BGRA}} incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using <strong>DuplicateOutput1</strong> also allows receiving the full gamut of colors in cases where a high-color format (such as {{R10G10B10A2}}) is being presented. </p><p>The <em>pSupportedFormats</em> array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the <em>pSupportedFormats</em> array, {{DXGI}} will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from <strong>{{IDXGIOutputDuplication::AcquireNextFrame}}</strong>. The list of supported formats should always contain {{DXGI_FORMAT_B8G8R8A8_UNORM}}, as this is the most common format for the desktop. +</p> + <p> </p><ul> <li>{{S_OK}} if <strong>DuplicateOutput1</strong> successfully created the desktop duplication interface.</li> <li>{{E_INVALIDARG}} for one of the following reasons: <ul> <li>The specified device (<em>pDevice</em>) is invalid, was not created on the correct adapter, or was not created from <strong>{{IDXGIFactory1}}</strong> (or a later version of a {{DXGI}} factory interface that inherits from <strong>{{IDXGIFactory1}}</strong>).</li> <li>The calling application is already duplicating this desktop output.</li> </ul> </li> <li>{{E_ACCESSDENIED}} if the application does not have access privilege to the current desktop image. For example, only an application that runs at {{LOCAL_SYSTEM}} can access the secure desktop.</li> <li> <p>{{DXGI_ERROR_UNSUPPORTED}} if the created <strong>{{IDXGIOutputDuplication}}</strong> interface does not support the current desktop mode or scenario. For example, 8bpp and non-{{DWM}} desktop modes are not supported.</p> <p>If <strong>DuplicateOutput1</strong> fails with {{DXGI_ERROR_UNSUPPORTED}}, the application can wait for system notification of desktop switches and mode changes and then call <strong>DuplicateOutput1</strong> again after such a notification occurs. For more information, see the desktop switch (<strong>{{EVENT_SYSTEM_DESKTOPSWITCH}}</strong>) and mode change notification (<strong>{{WM_DISPLAYCHANGE}}</strong>). </p> </li> <li>{{DXGI_ERROR_NOT_CURRENTLY_AVAILABLE}} if {{DXGI}} reached the limit on the maximum number of concurrent duplication applications (default of four). Therefore, the calling application cannot create any desktop duplication interfaces until the other applications close.</li> <li>{{DXGI_ERROR_SESSION_DISCONNECTED}} if <strong>DuplicateOutput1</strong> failed because the session is currently disconnected.</li> <li>Other error codes are described in the {{DXGI_ERROR}} topic.</li> </ul> + + + + <p>An <strong>{{IDXGISwapChain}}</strong> interface implements one or more <strong>surfaces</strong> for storing rendered data before presenting it to an output.</p> + <p>You can create a swap chain by +calling <strong>{{IDXGIFactory2::CreateSwapChainForHwnd}}</strong>, <strong>{{IDXGIFactory2::CreateSwapChainForCoreWindow}}</strong>, or <strong>{{IDXGIFactory2::CreateSwapChainForComposition}}</strong>. You can also create a swap chain when you call <strong>{{D3D11CreateDeviceAndSwapChain}}</strong>; however, you can then only access the sub-set of swap-chain functionality that the <strong>{{IDXGISwapChain}}</strong> interface provides.</p> + + + + <p>This method sets High Dynamic Range ({{HDR}}) and Wide Color Gamut ({{WCG}}) header metadata.</p> + <p>This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of the <strong>{{DXGI_HDR_METADATA_TYPE}}</strong> enum.</p> </dd> + + + <dd> <p>Specifies the size of <em>pMetaData</em>, in bytes.</p> </dd> + + + <dd> <p>Specifies a void reference that references the metadata, if it exists. Refer to the <strong>{{DXGI_HDR_METADATA_HDR10}}</strong> structure.</p> </dd> + + + + + <p> An <strong>{{IDXGIDevice}}</strong> interface implements a derived class for {{DXGI}} objects that produce image data. </p> + <p> The <strong>{{IDXGIDevice}}</strong> interface is designed for use by {{DXGI}} objects that need access to other {{DXGI}} objects. This interface is useful to applications that do not use Direct3D to communicate with {{DXGI}}. </p><p> The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the <strong>{{IUnknown}}</strong> interface. You can query this Direct3D device object for the device's corresponding <strong>{{IDXGIDevice}}</strong> interface. To retrieve the <strong>{{IDXGIDevice}}</strong> interface of a Direct3D device, use the following code: </p><pre>{{IDXGIDevice}} * pDXGIDevice; +hr = g_pd3dDevice-&gt;QueryInterface(__uuidof({{IDXGIDevice}}), (void **)&amp;pDXGIDevice); +</pre><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + <p>Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.</p> + <p><strong>OfferResources1</strong> (an extension of the original <strong>{{IDXGIDevice2::OfferResources}}</strong> {{API}}) enables {{D3D}} based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. +A de-committed allocation cannot be reused, so opting in to the new {{DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT}} flag means the new reclaim results must be properly handled. Refer to the flag descriptions in <strong>{{DXGI_RECLAIM_RESOURCE_RESULTS}}</strong> and the Example below.</p><p><strong>OfferResources1</strong> and <strong>ReclaimResources1</strong> may <em>not</em> be used interchangeably with <strong>OfferResources</strong> and <strong>ReclaimResources</strong>. +</p><p>The priority value that the <em>Priority</em> parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.</p><p>If you call <strong>OfferResources1</strong> to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call <strong>OfferResources1</strong> on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the <strong>ReclaimResources1</strong> method to reclaim the resource. You cannot call <strong>OfferResources1</strong> to offer immutable resources.</p><p>To offer shared resources, call <strong>OfferResources1</strong> on only one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>OfferResources1</strong> only while you hold the mutex. In fact, you can't offer shared resources unless you use <strong>{{IDXGIKeyedMutex}}</strong> because offering shared resources without using <strong>{{IDXGIKeyedMutex}}</strong> isn't supported.</p><p>The user mode display driver might not immediately offer the resources that you specified in a call to <strong>OfferResources1</strong>. The driver can postpone offering them until the next call to <strong>{{IDXGISwapChain::Present}}</strong>, <strong>{{IDXGISwapChain1::Present1}}</strong>, or <strong>{{ID3D11DeviceContext::Flush}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code, which can include {{E_INVALIDARG}} if a resource in the array, or the priority, is invalid.</p> + + + <dd> <p>The number of resources in the <em>ppResources</em> argument array.</p> </dd> + + + <dd> <p>An array of references to <strong>{{IDXGIResource}}</strong> interfaces for the resources to offer.</p> </dd> + + + <dd> <p>A <strong>{{DXGI_OFFER_RESOURCE_PRIORITY}}</strong>-typed value that indicates how valuable data is.</p> </dd> + + + <dd> <p>Specifies the <strong>{{DXGI_OFFER_RESOURCE_FLAGS}}</strong>.</p> </dd> + + + + + <p>Restores access to resources that were previously offered by calling <strong>{{IDXGIDevice4::OfferResources1}}</strong>.</p> + <p>After you call <strong>OfferResources1</strong> to offer one or more resources, you must call <strong>ReclaimResources1</strong> before you can use those resources again.</p><p>To reclaim shared resources, call <strong>ReclaimResources1</strong> only on one of the sharing devices. To ensure exclusive access to the resources, you must use an <strong>{{IDXGIKeyedMutex}}</strong> object and then call <strong>ReclaimResources1</strong> only while you hold the mutex.</p> + <p>This method returns an {{HRESULT}} success or error code, including {{E_INVALIDARG}} if the resources are invalid.</p> + + + + <p>This interface enables a single method to support variable refresh rate displays.</p> + + + + <p>Used to check for hardware feature support.</p> + <p>Refer to the description of <strong>{{DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING}}</strong>.</p> + <p>This method returns an {{HRESULT}} success or error code.</p> + + + <dd> <p>Specifies one member of <strong>{{DXGI_FEATURE}}</strong> to query support for.</p> </dd> + + + <dd> <p>Specifies a reference to a buffer that will be filled with data that describes the feature support.</p> </dd> + + + <dd> <p>The size, in bytes, of <em>pFeatureSupportData</em>.</p> </dd> + + + + + <p>Identifies the type of {{DXGI}} adapter.</p> + <p>The <strong>{{DXGI_ADAPTER_FLAG}}</strong> enumerated type is used by the <strong>Flags</strong> member of the <strong>{{DXGI_ADAPTER_DESC1}}</strong> or <strong>{{DXGI_ADAPTER_DESC2}}</strong> structure to identify the type of {{DXGI}} adapter.</p> + + + <dd> <p>Specifies no flags.</p> </dd> + + + <dd> <p>Value always set to 0. This flag is reserved.</p> </dd> + + + <dd> <p>Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.</p> <p><strong>Direct3D 11:??</strong>This enumeration value is supported starting with Windows?8.</p> </dd> + + + <dd> <p>Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.</p> </dd> + + + + + + + + <p>Describes an adapter (or video card) by using {{DXGI}} 1.0.</p> + <p>The <strong>{{DXGI_ADAPTER_DESC}}</strong> structure provides a description of an adapter. This structure is initialized by using the <strong>{{IDXGIAdapter::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the adapter description. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns ?Software Adapter? for the description string.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware vendor. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware vendor.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the hardware device. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the hardware device.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the sub system. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the sub system.</p> </dd> + + + <dd> <p>The {{PCI}} {{ID}} of the revision number of the adapter. On feature level 9 graphics hardware, <strong>GetDesc</strong> returns zeros for the {{PCI}} {{ID}} of the revision number of the adapter.</p> </dd> + + + <dd> <p>The number of bytes of dedicated video memory that are not shared with the {{CPU}}.</p> </dd> + + + <dd> <p>The number of bytes of dedicated system memory that are not shared with the {{CPU}}. This memory is allocated from available system memory at boot time.</p> </dd> + + + <dd> <p>The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.</p> </dd> + + + <dd> <p>A unique value that identifies the adapter. See <strong>{{LUID}}</strong> for a definition of the structure. <strong>{{LUID}}</strong> is defined in dxgi.h.</p> </dd> + + + + + <p>Describes an output or physical connection between the adapter (video card) and a device.</p> + <p>The <strong>{{DXGI_OUTPUT_DESC}}</strong> structure is initialized by the <strong>{{IDXGIOutput::GetDesc}}</strong> method.</p> + + + <dd> <p>A string that contains the name of the output device.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch ({{DPI}}) of the desktop. +For info about writing {{DPI}}-aware Win32 apps, see High {{DPI}}.</p> </dd> + + + <dd> <p>True if the output is attached to the desktop; otherwise, false.</p> </dd> + + + <dd> <p>A member of the <strong>{{DXGI_MODE_ROTATION}}</strong> enumerated type describing on how an image is rotated by the output.</p> </dd> + + + <dd> <p>An <strong>{{HMONITOR}}</strong> handle that represents the display monitor. For more information, see {{HMONITOR}} and the Device Context.</p> </dd> + + + + + <p> The <strong>{{IDXGIAdapter}}</strong> interface represents a display subsystem (including one or more {{GPUs}}, {{DACs}} and video memory). </p> + <p> A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard. </p><p> To enumerate the display subsystems, use <strong>{{IDXGIFactory::EnumAdapters}}</strong>. </p><p> To get an interface to the adapter for a particular device, use <strong>{{IDXGIDevice::GetAdapter}}</strong>. </p><p> To create a software adapter, use <strong>{{IDXGIFactory::CreateSoftwareAdapter}}</strong>. </p><p><strong>Windows?Phone?8: </strong> This {{API}} is supported. </p> + + + + + + + <p>An <strong>{{IDXGIOutput}}</strong> interface represents an adapter output (such as a monitor).</p> + <p>To see the outputs available, use <strong>{{IDXGIAdapter::EnumOutputs}}</strong>. To see the specific output that the swap chain will update, use <strong>{{IDXGISwapChain::GetContainingOutput}}</strong>.</p> + + + + + + + + + + <p> </p><p>Specifies the aspect-ratio mode.</p> + + + <dd> <p>Do not maintain the aspect ratio of the video. Stretch the video to fit the output rectangle.</p> </dd> + + + <dd> <p>Preserve the aspect ratio of the video by letterboxing or within the output rectangle.</p> </dd> + + + <dd> <strong>Note</strong>??Currently the {{EVR}} ignores this flag. ? <p>Correct the aspect ratio if the physical size of the display device does not match the display resolution. For example, if the native resolution of the monitor is 1600 by 1200 (4:3) but the display resolution is 1280 by 1024 (5:4), the monitor will display non-square pixels.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePicture}}</strong> flag.</p> </dd> + + + <dd> <p>Apply a non-linear horizontal stretch if the aspect ratio of the destination rectangle does not match the aspect ratio of the source rectangle.</p> <p>The non-linear stretch algorithm preserves the aspect ratio in the middle of the picture and stretches (or shrinks) the image progressively more toward the left and right. This mode is useful when viewing 4:3 content full-screen on a 16:9 display, instead of pillar-boxing. Non-linear vertical stretch is not supported, because the visual results are generally poor.</p> <p>This mode may cause performance degradation.</p> <p>If this flag is set, you must also set the <strong>{{MFVideoARMode_PreservePixel}}</strong> and <strong>{{MFVideoARMode_PreservePicture}}</strong> flags.</p> </dd> + + + <dd> <p>Bitmask to validate flag values. This value is not a valid flag.</p> </dd> + + + + + <p> </p><p>Contains flags that define how the enhanced video renderer ({{EVR}}) displays the video.</p> + <p>To set these flags, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.</p><p>The flags named "{{MFVideoRenderPrefs_Allow}}..." cause the {{EVR}} to use lower-quality settings only when requested by the quality manager. (For more information, see <strong>{{IMFQualityAdvise}}</strong>.) The flags named "{{MFVideoRenderPrefs_Force}}..." cause the video mixer to use lower-quality settings regardless of the quality manager. </p> + + + <dd> <p> If this flag is set, the {{EVR}} does not draw the border color. By default, the {{EVR}} draws a border on areas of the destination rectangle that have no video. See <strong>{{IMFVideoDisplayControl::SetBorderColor}}</strong>. </p> </dd> + + + <dd> <p> If this flag is set, the {{EVR}} does not clip the video when the video window straddles two monitors. By default, if the video window straddles two monitors, the {{EVR}} clips the video to the monitor that contains the largest area of video. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to limit its output to match {{GPU}} bandwidth.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to batch Direct3D <strong>Present</strong> calls. This optimization enables the system to enter to idle states more frequently, which can reduce power consumption. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to batch Direct3D <strong>Present</strong> calls.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Force the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. The {{EVR}} will then scale the result to the correct output size. The effective resolution will be lower if this setting is applied.</p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Allow the {{EVR}} to mix the video inside a rectangle that is smaller than the output rectangle. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>Prevent the {{EVR}} from repainting the video window after a stop command. By default, the {{EVR}} repaints the video window black after a stop command.</p> </dd> + + + <dd> <p> Bitmask to validate flag values. This value is not a valid flag. </p> </dd> + + + + + <p>Defines messages for an enhanced video renderer ({{EVR}}) presenter. This enumeration is used with the <strong>{{IMFVideoPresenter::ProcessMessage}}</strong> method.</p> + + + + <p>Contains flags that are used to configure how the enhanced video renderer ({{EVR}}) performs deinterlacing.</p> + <p>To set these flags, call the <strong>{{IMFVideoMixerControl2::SetMixingPrefs}}</strong> method.</p><p>These flags control some trade-offs between video quality and rendering speed. The constants named "{{MFVideoMixPrefs_Allow}}..." enable lower-quality settings, but only when the quality manager requests a drop in quality. The constants named "{{MFVideoMixPrefs_Force}}..." force the {{EVR}} to use lower-quality settings regardless of what the quality manager requests. (For more information about the quality manager, see <strong>{{IMFQualityAdvise}}</strong>.)</p><p>Currently two lower-quality modes are supported, as described in the following table. Either is preferable to dropping an entire frame.</p><p></p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td> <p>Half interface</p> </td><td> <p>The {{EVR}}'s video mixer skips the second field (relative to temporal order) of each interlaced frame. The video mixer still deinterlaces the first field, and this operation typically interpolates data from the second field. The overall frame rate is unaffected.</p> </td></tr> <tr><td> <p>Bob deinterlacing</p> </td><td> <p>The video mixer uses bob deinterlacing, even if the driver supports a higher-quality deinterlacing algorithm.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Force the {{EVR}} to skip the second field (in temporal order) of every interlaced frame. </p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to skip the second field (in temporal order) of every interlaced frame.</p> </dd> + + + <dd> <p>If the {{EVR}} is falling behind, allow it to use bob deinterlacing, even if the driver supports a higher-quality deinterlacing mode.</p> </dd> + + + <dd> <p>Force the {{EVR}} to use bob deinterlacing, even if the driver supports a higher-quality mode.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag. +</p> </dd> + + + + + <p>Contains flags that are used to configure the Microsoft DirectShow enhanced video renderer ({{EVR}}) filter.</p> + + + <dd> <p>Enables dynamic adjustments to video quality during playback.</p> </dd> + + + <dd> <p>The bitmask of valid flag values. This constant is not itself a valid flag.</p> </dd> + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p> </p><p>Defines a normalized rectangle, which is used to specify sub-rectangles in a video rectangle. When a rectangle N is <em>normalized</em> relative to some other rectangle R, it means the following:</p><ul> <li> <p>The coordinate (0.0, 0.0) on N is mapped to the upper-left corner of R.</p> </li> <li> <p>The coordinate (1.0, 1.0) on N is mapped to the lower-right corner of R.</p> </li> </ul><p>Any coordinates of N that fall outside the range [0...1] are mapped to positions outside the rectangle R. A normalized rectangle can be used to specify a region within a video rectangle without knowing the resolution or even the aspect ratio of the video. For example, the upper-left quadrant is defined as {0.0, 0.0, 0.5, 0.5}.</p> + + + <dd> <p>X-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the upper-left corner of the rectangle.</p> </dd> + + + <dd> <p>X-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + <dd> <p>Y-coordinate of the lower-right corner of the rectangle.</p> </dd> + + + + + <p>Maps a position on an input video stream to the corresponding position on an output video stream.</p><p>To obtain a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the renderer with the service {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}.</p> + + + + <p>Maps output image coordinates to input image coordinates. This method provides the reverse transformation for components that map coordinates on the input image to different coordinates on the output image. </p> + <p>In the following diagram, R(dest) is the destination rectangle for the video. You can obtain this rectangle by calling <strong>{{IMFVideoDisplayControl::GetVideoPosition}}</strong>. The rectangle {{R1}} is a substream within the video. The point P has pixel coordinates (x,y) relative to R(dest).</p><p></p><p>The position of P relative to R(dest) in <em>normalized</em> coordinates is calculated as follows:</p><code>float xn = float(x + 0.5) / widthDest; +float xy = float(y + 0.5) / heightDest; +</code><p>where <em>widthDest</em> and <em>heightDest</em> are the width and height of R(dest) in pixels.</p><p>To calculate the position of P relative to {{R1}}, call <strong>MapOutputCoordinateToInputStream</strong> as follows:</p><code>float x1 = 0, y1 = 0; +hr = pMap-&gt;MapOutputCoordinateToInputStream(xn, yn, 0, dwInputStreamIndex, &amp;x1, &amp;y1);</code><p>The values returned in <em>x1</em> and <em>y1</em> are normalized to the range [0...1]. To convert back to pixel coordinates, scale these values by the size of {{R1:}}</p><code>int scaledx = int(floor(x1 * widthR1)); +int scaledy = int(floor(xy * heightR1));</code><p>Note that <em>x1</em> and <em>y1</em> might fall outside the range [0...1] if P lies outside of {{R1}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> X-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Y-coordinate of the output image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Output stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Input stream index for the coordinate mapping. </p> </dd> + + + <dd> <p> Receives the mapped x-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + <dd> <p> Receives the mapped y-coordinate of the input image, normalized to the range [0...1]. </p> </dd> + + + + + <p>Returns the device identifier supported by a video renderer component. This interface is implemented by mixers and presenters for the enhanced video renderer ({{EVR}}). If you replace either of these components, the mixer and presenter must report the same device identifier.</p> + + + + <p> </p><p>Returns the identifier of the video device supported by an {{EVR}} mixer or presenter.</p> + <p>If a mixer or presenter uses Direct3D 9, it must return the value {{IID_IDirect3DDevice9}} in <em>pDeviceID</em>. The {{EVR}}'s default mixer and presenter both return this value. If you write a custom mixer or presenter, it can return some other value. However, the mixer and presenter must use matching device identifiers.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device identifier. Generally, the value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) displays video.</p><p>The {{EVR}} presenter implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{GUID}} {{MR_VIDEO_RENDER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li>The {{EVR}} media sink. </li> <li>The DirectShow {{EVR}} filter. </li> <li>The {{EVR}} presenter. </li> </ul><p>If you implement a custom presenter for the {{EVR}}, the presenter can optionally expose this interface as a service.</p> + + + + <p> Gets the size and aspect ratio of the video, prior to any stretching by the video renderer. </p> + <p>If no media types have been set on any video streams, the method succeeds but all parameters are set to zero.</p><p>You can set <em>pszVideo</em> or <em>pszARVideo</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one of the parameters must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the native video rectangle. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the aspect ratio of the video. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets the range of sizes that the enhanced video renderer ({{EVR}}) can display without significantly degrading performance or image quality. </p> + <p>You can set <em>pszMin</em> or <em>pszMax</em> to <strong>{{NULL}}</strong>, but not both.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the maximum ideal size. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the source and destination rectangles for the video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>One or more required parameters are <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the source rectangle.</p> </dd> + + + <dd> <p>Receives the current destination rectangle.</p> </dd> + + + + + <p> </p><p>Specifies how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> Queries how the enhanced video renderer ({{EVR}}) handles the aspect ratio of the source video. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of one or more flags from the <strong>{{MFVideoAspectRatioMode}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the source and destination rectangles for the video.</p> + <p>The source rectangle defines which portion of the video is displayed. It is specified in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. To display the entire video image, set the source rectangle to {0, 0, 1, 1}. The default source rectangle is {0, 0, 1, 1}.</p><p>The destination rectangle defines a rectangle within the clipping window where the video appears. It is specified in pixels, relative to the client area of the window. To fill the entire window, set the destination rectangle to {0, 0, <em>width</em>, <em>height</em>}, where <em>width</em> and <em>height</em> are dimensions of the window client area. The default destination rectangle is {0, 0, 0, 0}.</p><p>To update just one of these rectangles, set the other parameter to <strong>{{NULL}}</strong>. You can set <em>pnrcSource</em> or <em>prcDest</em> to <strong>{{NULL}}</strong>, but not both.</p><p>Before setting the destination rectangle (<em>prcDest</em>), you must set the video window by calling <strong>{{IMFVideoDisplayControl::SetVideoWindow}}</strong>. (For the Media Foundation version of the {{EVR}}, you can also provide the video window in the <strong>{{MFCreateVideoRendererActivate}}</strong> function.) If no video window was provided, <strong>SetVideoPosition</strong> returns {{E_POINTER}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the source rectangle does not change.</p> </dd> + + + <dd> <p>Specifies the destination rectangle. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the destination rectangle does not change.</p> </dd> + + + + + <p> Gets the clipping window for the video. </p> + <p>There is no default clipping window. The application must set the clipping window.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a handle to the window where the enhanced video renderer ({{EVR}}) will draw the video.</p> </dd> + + + + + <p> </p><p>Repaints the current video frame. Call this method whenever the application receives a {{WM_PAINT}} message.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} cannot repaint the frame at this time. This error can occur while the {{EVR}} is switching between full-screen and windowed mode. The caller can safely ignore this error.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> Gets a copy of the current image being displayed by the video renderer. </p> + <p>This method can be called at any time. However, calling the method too frequently degrades the video playback performance.</p><p>This method retrieves a copy of the final composited image, which includes any substreams, alpha-blended bitmap, aspect ratio correction, background color, and so forth.</p><p>In windowed mode, the bitmap is the size of the destination rectangle specified in <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. In full-screen mode, the bitmap is the size of the display.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LICENSE_INCORRECT_RIGHTS}}</strong></dt> </dl> </td><td> <p>The content is protected and the license does not permit capturing the image.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{BITMAPINFOHEADER}}</strong> structure that receives a description of the bitmap. Set the <strong>biSize</strong> member of the structure to <code>sizeof({{BITMAPINFOHEADER}})</code> before calling the method.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains a packed Windows device-independent bitmap ({{DIB}}). The caller must free the memory for the bitmap by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the buffer returned in <em>pDib</em>, in bytes.</p> </dd> + + + <dd> <p>Receives the time stamp of the captured image.</p> </dd> + + + + + <p> </p><p>Sets the border color for the video.</p> + <p>By default, if the video window straddles two monitors, the enhanced video renderer ({{EVR}}) clips the video to one monitor and draws the border color on the remaining portion of the window. (To change the clipping behavior, call <strong>{{IMFVideoDisplayControl::SetRenderingPrefs}}</strong>.)</p><p>The border color is not used for letterboxing. To change the letterbox color, call <strong>{{IMFVideoProcessor::SetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the border color as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> Gets the border color for the video. </p> + <p>The border color is used for areas where the enhanced video renderer ({{EVR}}) does not draw any video.</p><p>The border color is not used for letterboxing. To get the letterbox color, call <strong>{{IMFVideoProcessor::GetBackgroundColor}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the border color, as a <strong>{{COLORREF}}</strong> value.</p> </dd> + + + + + <p> </p><p>Sets various preferences related to video rendering.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p> Gets various video rendering settings. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoRenderPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. ]</p><p> Sets or unsets full-screen rendering mode.</p><p>To implement full-screen playback, an application should simply resize the video window to cover the entire area of the monitor. Also set the window to be a topmost window, so that the application receives all mouse-click messages. For more information about topmost windows, see the documentation for the <strong>SetWindowPos</strong> function.</p> + <p> The default {{EVR}} presenter implements full-screen mode using Direct3D exclusive mode. </p><p> If you use this method to switch to full-screen mode, set the application window to be a topmost window and resize the window to cover the entire monitor. This ensures that the application window receives all mouse-click messages. Also set the keyboard focus to the application window. When you switch out of full-screen mode, restore the window's original size and position. </p><p> By default, the cursor is still visible in full-screen mode. To hide the cursor, call <strong>ShowCursor</strong>. </p><p>The transition to and from full-screen mode occurs asynchronously. To get the current mode, call <strong>{{IMFVideoDisplayControl::GetFullscreen}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The video renderer has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Queries whether the enhanced video renderer ({{EVR}}) is currently in full-screen mode. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{EVR}} is currently switching between full-screen and windowed mode.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the {{EVR}} is in full-screen mode. If <strong>{{FALSE}}</strong>, the {{EVR}} will display the video inside the application-provided clipping window.</p> </dd> + + + + + <p>Represents a video presenter. A <em>video presenter</em> is an object that receives video frames, typically from a video mixer, and presents them in some way, typically by rendering them to the display. The enhanced video renderer ({{EVR}}) provides a default video presenter, and applications can implement custom presenters.</p><p>The video presenter receives video frames as soon as they are available from upstream. The video presenter is responsible for presenting frames at the correct time and for synchronizing with the presentation clock.</p> + + + + <p> </p><p>Sends a message to the video presenter. Messages are used to signal the presenter that it must perform some action, or that some event has occurred.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the message as a member of the <strong>{{MFVP_MESSAGE_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Message parameter. The meaning of this parameter depends on the message type.</p> </dd> + + + + + <p> </p><p>Retrieves the presenter's media type.</p> + <p>This method returns the media type that the presenter sets for the mixer's output type. It describes the format of the composited image.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media type is not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables the presenter for the enhanced video renderer ({{EVR}}) to request a specific frame from the video mixer.</p><p>The sample objects created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function implement this interface. To retrieve a reference to this interface, call <strong>QueryInterface</strong> on the sample.</p> + + + + <p> </p><p>Called by the mixer to get the time and duration of the sample requested by the presenter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No time stamp was set for this sample. See <strong>{{IMFDesiredSample::Clear}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the desired sample time that should be mixed.</p> </dd> + + + <dd> <p>Receives the sample duration that should be mixed.</p> </dd> + + + + + <p> </p><p>Called by the presenter to set the time and duration of the sample that it requests from the mixer.</p> + <p>This value should be set prior to passing the buffer to the mixer for a Mix operation. The mixer sets the actual start and duration times on the sample before sending it back.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The time of the requested sample.</p> </dd> + + + <dd> <p>The duration of the requested sample.</p> </dd> + + + + + <p> </p><p>Clears the time stamps previously set by a call to <strong>{{IMFDesiredSample::SetDesiredSampleTimeAndDuration}}</strong>.</p> + <p>After this method is called, the <strong>{{IMFDesiredSample::GetDesiredSampleTimeAndDuration}}</strong> method returns {{MF_E_NOT_AVAILABLE}}.</p><p>This method also clears the time stamp and duration and removes all attributes from the sample.</p> + <p>This method does not return a value.</p> + + + + <p>Controls how the Enhanced Video Renderer ({{EVR}}) mixes video substreams. Applications can use this interface to control video mixing during playback.</p><p>The {{EVR}} mixer implements this interface. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier {{GUID}} is {{MR_VIDEO_MIXER_SERVICE}}. Call <strong>GetService</strong> on any of the following objects:</p><ul> <li> The Media Session, if the topology contains an instance of the {{EVR}}. </li> <li> The {{EVR}} media sink. </li> <li> The DirectShow {{EVR}} filter. </li> <li> The {{EVR}} mixer. </li> </ul><p>If you implement a custom mixer for the {{EVR}}, the mixer can optionally expose this interface as a service.</p> + + + + <p> </p><p>Sets the z-order of a video stream.</p> + <p>The {{EVR}} draws the video streams in the order of their z-order values, starting with zero. The reference stream must be first in the z-order, and the remaining streams can be in any order.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value of <em>dwZ</em> is larger than the maximum z-order value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid z-order for this stream. For the reference stream, <em>dwZ</em> must be zero. For all other streams, <em>dwZ</em> must be greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Z-order value. The z-order of the reference stream must be zero. The maximum z-order value is the number of streams minus one.</p> </dd> + + + + + <p> </p><p>Retrieves the z-order of a video stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Receives the z-order value.</p> </dd> + + + + + <p> Sets the position of a video stream within the composition rectangle. </p> + <p> The mixer draws each video stream inside a bounding rectangle that is specified relative to the final video image. This bounding rectangle is given in <em>normalized</em> coordinates. For more information, see <strong>{{MFVideoNormalizedRect}}</strong> structure. </p><p> The coordinates of the bounding rectangle must fall within the range [0.0, 1.0]. Also, the X and Y coordinates of the upper-left corner cannot exceed the X and Y coordinates of the lower-right corner. In other words, the bounding rectangle must fit entirely within the composition rectangle and cannot be flipped vertically or horizontally. </p><p>The following diagram shows how the {{EVR}} mixes substreams.</p><p>The output rectangle for the stream is specified by calling <strong>SetStreamOutputRect</strong>. The source rectangle is specified by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. The mixer applies the output rectangle first, when it mixes the streams into a single bounding rectangle. This bounding rectangle is called <em>composition space</em>. Then the presenter applies the source rectangle to the composited image.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The coordinates of the bounding rectangle given in <em>pnrcOutput</em> are not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that defines the bounding rectangle for the video stream.</p> </dd> + + + + + <p> </p><p>Retrieves the position of a video stream within the composition rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. For the {{EVR}} media sink, the stream identifier is defined when the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method is called. For the DirectShow {{EVR}} filter, the stream identifier corresponds to the pin index. The reference stream is always stream 0.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{MFVideoNormalizedRect}}</strong> structure that receives the bounding rectangle, in normalized coordinates.</p> </dd> + + + + + <p>Controls preferences for video deinterlacing.</p><p> The default video mixer for the Enhanced Video Renderer ({{EVR}}) implements this interface.</p><p>To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> on any of the following objects, using the <strong>{{MR_VIDEO_MIXER_SERVICE}}</strong> service identifier:</p><ul> <li>The Media Session, if the topology contains an instance of the {{EVR}}.</li> <li>The {{EVR}} media sink.</li> <li>The DirectShow {{EVR}} filter.</li> <li>The {{EVR}} mixer.</li> </ul> + + + + <p>Sets the preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration. </p> </dd> + + + + + <p>Gets the current preferences for video deinterlacing.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFVideoMixPrefs}}</strong> enumeration.</p> </dd> + + + + + <p>Sets a new mixer or presenter for the Enhanced Video Renderer ({{EVR}}).</p><p>Both the {{EVR}} media sink and the DirectShow {{EVR}} filter implement this interface. To get a reference to the interface, call <strong>QueryInterface</strong> on the media sink or the filter. Do not use <strong>{{IMFGetService}}</strong> to get a reference to this interface.</p> + <p>The {{EVR}} activation object returned by the <strong>{{MFCreateVideoRendererActivate}}</strong> function does not expose this interface. Instead, the activation object supports attributes that specify a custom mixer or presenter. For more information, see Enhanced Video Renderer Attributes.</p> + + + + <p> </p><p>Sets a new mixer or presenter for the enhanced video renderer ({{EVR}}).</p> + <p>Call this method directly after creating the {{EVR}}, before you do any of the following:</p><ul> <li> <p>Call <strong>{{IMFGetService::GetService}}</strong> on the {{EVR}}.</p> </li> <li> <p>Call <strong>{{IEVRFilterConfig::SetNumberOfStreams}}</strong> on the {{EVR}}.</p> </li> <li> <p>Connect any pins on the {{EVR}} filter, or set any media types on {{EVR}} media sink.</p> </li> </ul><p>The {{EVR}} filter returns {{VFW_E_WRONG_STATE}} if any of the filter's pins are connected. The {{EVR}} media sink returns {{MF_E_INVALIDREQUEST}} if a media type is set on any of the streams, or the presentation clock is running or paused.</p><p>The device identifiers for the mixer and the presenter must match. The <strong>{{IMFVideoDeviceID::GetDeviceID}}</strong> method returns the device identifier. If they do not match, the method returns {{E_INVALIDARG}}.</p><p>If the video renderer is in the protected media path ({{PMP}}), the mixer and presenter objects must be certified safe components and pass any trust authority verification that is being enforced. Otherwise, this method will fail.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Either the mixer or the presenter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The mixer and presenter cannot be replaced in the current state. ({{EVR}} media sink.)</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The video renderer has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>One or more input pins are connected. (DirectShow {{EVR}} filter.)</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTransform}}</strong> interface of the mixer to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default mixer.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFVideoPresenter}}</strong> interface of the presenter to use. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the {{EVR}} uses its default presenter.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p> </p><p>Sets the number of input pins on the {{EVR}} filter.</p> + <p>After this method has been called, it cannot be called a second time on the same instance of the {{EVR}} filter. Also, the method fails if any input pins are connected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid number of streams. The minimum is one, and the maximum is 16.</p> </td></tr> <tr><td> <dl> <dt><strong>{{VFW_E_WRONG_STATE}}</strong></dt> </dl> </td><td> <p>This method has already been called, or at least one pin is already connected.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the total number of input pins on the {{EVR}} filter. This value includes the input pin for the reference stream, which is created by default. For example, to mix one substream plus the reference stream, set this parameter to 2.</p> </dd> + + + + + <p> </p><p>Retrieves the number of input pins on the {{EVR}} filter. The {{EVR}} filter always has at least one input pin, which corresponds to the reference stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Configures the DirectShow <strong>Enhanced Video Renderer</strong> ({{EVR}}) filter. To get a reference to this interface, call <strong>QueryInterface</strong> on the {{EVR}} filter.</p> + + + + <p>Sets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> ({{EVR}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + + <p>Gets the configuration parameters for the Microsoft DirectShow <strong>Enhanced Video Renderer Filter</strong> filter.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables a custom video mixer or video presenter to get interface references from the Enhanced Video Renderer ({{EVR}}). The mixer can also use this interface to get interface references from the presenter, and the presenter can use it to get interface references from the mixer.</p><p>To use this interface, implement the <strong>{{IMFTopologyServiceLookupClient}}</strong> interface on your custom mixer or presenter. The {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> with a reference to the {{EVR}}'s <strong>{{IMFTopologyServiceLookup}}</strong> interface.</p> + + + + + + + <p> </p><p>Retrieves an interface from the enhanced video renderer ({{EVR}}), or from the video mixer or video presenter.</p> + <p>This method can be called only from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. At any other time, the method returns {{MF_E_NOTACCEPTING}}.</p><p>The presenter can use this method to query the {{EVR}} and the mixer. The mixer can use it to query the {{EVR}} and the presenter. Which objects are queried depends on the caller and the service {{GUID}}, as shown in the following table.</p><table> <tr><th>Caller</th><th>Service {{GUID}}</th><th>Objects queried</th></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>{{EVR}}</td></tr> <tr><td>Presenter</td><td>{{MR_VIDEO_MIXER_SERVICE}}</td><td>Mixer</td></tr> <tr><td>Mixer</td><td>{{MR_VIDEO_RENDER_SERVICE}}</td><td>Presenter and {{EVR}}</td></tr> </table><p>?</p><p>The following interfaces are available from the {{EVR:}}</p><ul> <li> <p><strong>{{IMediaEventSink}}</strong>. This interface is documented in the DirectShow {{SDK}} documentation.</p> </li> <li> <p> <strong>{{IMFClock}}</strong> interface. This interface is available if the {{EVR}} has access to a clock (reference clock in DirectShow or presentation clock in Media Foundation). This interface might not be available. Presenter and mixers must be able to process data without a clock. If the <strong>{{IMFClock}}</strong> interface is available, you can also get these related interfaces:</p> <ul> <li> <p> <strong>{{IMFTimer}}</strong> </p> </li> <li> <p> <strong>{{IMFPresentationClock}}</strong> (Media Foundation {{EVR}} only)</p> </li> </ul> </li> </ul><p>The following interfaces are available from the mixer:</p><ul> <li> <p> <strong>{{IMFTransform}}</strong> </p> </li> <li> <p> <strong>{{IMFVideoDeviceID}}</strong> </p> </li> </ul> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The requested interface is not available.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The method was not called from inside the <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> method. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified service {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the scope of the search. Currently this parameter is ignored. Use the value {{MF_SERVICE_LOOKUP_GLOBAL}}.</p> </dd> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Service {{GUID}} of the requested interface.</p> </dd> + + + <dd> <p>Interface identifier of the requested interface.</p> </dd> + + + <dd> <p>Array of interface references. If the method succeeds, each member of the array contains either a valid interface reference or <strong>{{NULL}}</strong>. The caller must release the interface references when the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong> (or earlier). If the method fails, every member of the array is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the size of the <em>ppvObjects</em> array. The value must be at least 1. In the current implementation, there is no reason to specify an array size larger than one element. The value is not changed on output.</p> </dd> + + + + + <p>Initializes a video mixer or presenter. This interface is implemented by mixers and presenters, and enables them to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>When the {{EVR}} loads the video mixer and the video presenter, the {{EVR}} queries the object for this interface and calls <strong>InitServicePointers</strong>. Inside the <strong>InitServicePointers</strong> method, the object can query the {{EVR}} for interface references.</p> + + + + <p> </p><p>Signals the mixer or presenter to query the enhanced video renderer ({{EVR}}) for interface references.</p> + <p>The <strong>{{IMFTopologyServiceLookup}}</strong> reference is guaranteed to be valid only during the call to <strong>InitServicePointers</strong>. The mixer or presenter should not store a reference to this interface after the method returns.</p><p>When the {{EVR}} calls <strong>{{IMFTopologyServiceLookupClient::ReleaseServicePointers}}</strong>, the mixer or presenter should release any references it obtained from the {{EVR}}.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyServiceLookup}}</strong> interface. To query the {{EVR}} for an interface, call <strong>{{IMFTopologyServiceLookup::LookupService}}</strong>.</p> </dd> + + + + + <p> </p><p>Signals the object to release the interface references obtained from the enhanced video renderer ({{EVR}}).</p> + <p>After this method is called, any interface references obtained during the previous call to <strong>{{IMFTopologyServiceLookupClient::InitServicePointers}}</strong> are no longer valid. The object must release them.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Queries whether the plug-in has any transient vulnerabilities at this time. </p> + <p>This method provides a way for the plug-in to report temporary conditions that would cause the input trust authority ({{ITA}}) to distrust the plug-in. For example, if an {{EVR}} presenter is in windowed mode, it is vulnerable to {{GDI}} screen captures.</p><p>To disable screen capture in Direct3D, the plug-in must do the following:</p><ul> <li> <p>Create the Direct3D device in full-screen exlusive mode.</p> </li> <li> <p>Specify the {{D3DCREATE_DISABLE_PRINTSCREEN}} flag when you create the device. For more information, see <strong>{{IDirect3D9::CreateDevice}}</strong> in the DirectX documentation.</p> </li> </ul><p>In addition, the graphics adapter must support the Windows Vista Display Driver Model ({{WDDM}}) and the Direct3D extensions for Windows Vista (sometimes called {{D3D9Ex}} or {{D3D9L}}).</p><p>If these conditions are met, the presenter can return <strong>{{TRUE}}</strong> in the <em>pYes</em> parameter. Otherwise, it should return <strong>{{FALSE}}</strong>.</p><p>The {{EVR}} calls this method whenever the device changes. If the plug-in returns <strong>{{FALSE}}</strong>, the {{EVR}} treats this condition as if the plug-in had a new output connector of unknown type. The policy object can then allow or block playback, depending on the {{ITA}}'s policy.</p><p>This method should be used only to report transient conditions. A plug-in that is never in a trusted state should not implement the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface at all.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in has no transient vulnerabilities at the moment and can receive protected content. If <strong>{{FALSE}}</strong>, the plug-in has a transient vulnerability. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (untrusted).</p> </dd> + + + + + <p> Queries whether the plug-in can limit the effective video resolution. </p> + <p>Constriction is a protection mechanism that limits the effective resolution of the video frame to a specified maximum number of pixels.</p><p>Video constriction can be implemented by either the mixer or the presenter.</p><p>If the method returns <strong>{{TRUE}}</strong>, the {{EVR}} might call <strong>{{IEVRTrustedVideoPlugin::SetConstriction}}</strong> at any time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the plug-in can limit the effective video resolution. Otherwise, the plug-in cannot limit the video resolution. If the method fails, the {{EVR}} treats the value as <strong>{{FALSE}}</strong> (not supported).</p> </dd> + + + + + <p> Limits the effective video resolution. </p> + <p>This method limits the effective resolution of the video image. The actual resolution on the target device might be higher, due to stretching the image.</p><p>The {{EVR}} might call this method at any time if the <strong>{{IEVRTrustedVideoPlugin::CanConstrict}}</strong> method returns <strong>{{TRUE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Maximum number of source pixels that may appear in the final video image, in thousands of pixels. If the value is zero, the video is disabled. If the value is {{MAXDWORD}} (0xFFFFFFFF), video constriction is removed and the video may be rendered at full resolution.</p> </dd> + + + + + <p> Enables or disables the ability of the plug-in to export the video image. </p> + <p>An {{EVR}} plug-in might expose a way for the application to get a copy of the video frames. For example, the standard {{EVR}} presenter implements <strong>{{IMFVideoDisplayControl::GetCurrentImage}}</strong>.</p><p>If the plug-in supports image exporting, this method enables or disables it. Before this method has been called for the first time, the {{EVR}} assumes that the mechanism is enabled.</p><p>If the plug-in does not support image exporting, this method should return {{S_OK}} and ignore the value of <em>bDisable</em>. If the method fails, the {{EVR}} treats it as a failure to enforce the policy, which will probably cause playback to stop.</p><p>While image exporting is disabled, any associated export method, such as <strong>GetCurrentImage</strong>, should return {{MF_E_LICENSE_INCORRECT_RIGHTS}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Boolean value. Specify <strong>{{TRUE}}</strong> to disable image exporting, or <strong>{{FALSE}}</strong> to enable it.</p> </dd> + + + + + <p> </p><p>Creates the default video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of this object. If the object is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the video device interface that will be used for processing the video. Currently the only supported value is {{IID_IDirect3DDevice9}}.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the default video mixer and video presenter for the enhanced video renderer ({{EVR}}).</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the owner of the video mixer. If the mixer is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the owner of the video presenter. If the presenter is aggregated, pass a reference to the aggregating object's <strong>{{IUnknown}}</strong> interface. Otherwise, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the video mixer. The video mixer exposes the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video mixer. The caller must release the interface.</p> </dd> + + + <dd> <p>{{IID}} of the requested interface on the video presenter. The video presenter exposes the <strong>{{IMFVideoPresenter}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface on the video presenter. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an instance of the enhanced video renderer ({{EVR}}) media sink.</p> + <p>This function creates the Media Foundation version of the {{EVR}}. To create the DirectShow {{EVR}} filter, call <strong>CoCreateInstance</strong> with the class identifier {{CLSID_EnhancedVideoRenderer}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface on the {{EVR}}.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates a media sample that manages a Direct3D surface. </p> + <p>The media sample created by this function exposes the following interfaces in addition to <strong>{{IMFSample}}</strong>:</p><ul> <li> <strong>{{IMFDesiredSample}}</strong> </li> <li> <strong>{{IMFTrackedSample}}</strong> </li> </ul><p>If <em>pUnkSurface</em> is non-<strong>{{NULL}}</strong>, the sample contains a single media buffer, which holds a reference to the Direct3D surface. To get the Direct3D surface from the media buffer, call <strong>{{IMFGetService::GetService}}</strong> on the buffer, using the service identifier {{MR_BUFFER_SERVICE}}. The media buffer does not implement <strong>{{IMF2DBuffer}}</strong>, nor does it implement the <strong>{{IMFMediaBuffer::Lock}}</strong> and <strong>Unlock</strong> methods.</p><p>Alternatively, you can set <em>pUnkSurface</em> to <strong>{{NULL}}</strong>, and later add a DirectX surface buffer to the sample by calling <strong>{{IMFSample::AddBuffer}}</strong>. To create a DirectX surface buffer, call <strong>{{MFCreateDXSurfaceBuffer}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the Direct3D surface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the sample's <strong>{{IMFSample}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an object that allocates video samples.</p> + <p>If the function succeeds, it returns {{S_OK}}. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Contains encoding statistics from the Digital Living Network Alliance ({{DLNA}}) media sink.</p><p>This structure is used with the {{MF_MP2DLNA_STATISTICS}} attribute.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink. </p><p>The {{DLNA}} media sink exposes this interface. To get a reference to this interface, call <strong>CoCreateInstance</strong>. The {{CLSID}} is <strong>{{CLSID_MPEG2DLNASink}}</strong>.</p> + + + + <p>Initializes the Digital Living Network Alliance ({{DLNA}}) media sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></strong></dt> </dl> </td><td> <p>The method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream. The {{DLNA}} media sink writes data to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the {{DLNA}} media sink accepts {{PAL}} video formats. Otherwise, it accepts {{NTSC}} video formats.</p> </dd> + + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies options for the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_CREATION_OPTIONS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies the current playback state.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags that describe a media item.</p> + <p>The following <strong>typedef</strong> is defined for combining flags from this enumeration.</p><code>typedef {{UINT32}} {{MFP_MEDIAITEM_CHARACTERISTICS}};</code> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains flags for the <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> structure.</p><p>Some of these flags, marked [out], convey information back to the {{MFPlay}} player object. The application should set or clear these flags as appropriate, before returning from the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Defines event types for the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + <p>For each event type, the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback receives a reference to a data structure. The first part of the data structure is always an <strong>{{MFP_EVENT_HEADER}}</strong> structure. The following table lists the data structure for each event type.</p><p>In your implementation of <strong>OnMediaPlayerEvent</strong>, you must cast the <em>pEventHeader</em> parameter to the correct structure type. A set of macros is defined for this purpose. These macros check the value of the event type and return <strong>{{NULL}}</strong> if there is a mismatch; otherwise they return a reference to the correct structure type.</p><table> <tr><td><strong>Event type</strong></td><td> <p><strong>Event structure</strong></p> <p><strong>Pointer cast macro</strong></p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAY}}</td><td> <p> <strong>{{MFP_PLAY_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAY_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PAUSE}}</td><td> <p> <strong>{{MFP_PAUSE_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PAUSE_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_STOP}}</td><td> <p> <strong>{{MFP_STOP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_STOP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_POSITION_SET}}</td><td> <p> <strong>{{MFP_POSITION_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_RATE_SET}}</td><td> <p> <strong>{{MFP_RATE_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CREATED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</td><td> <p> <strong>{{MFP_MEDIAITEM_SET_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_FRAME_STEP}}</td><td> <p> <strong>{{MFP_FRAME_STEP_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</td><td> <p> <strong>{{MFP_MEDIAITEM_CLEARED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_MF}}</td><td> <p> <strong>{{MFP_MF_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_MF_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ERROR}}</td><td> <p> <strong>{{MFP_ERROR_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ERROR_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</td><td> <p> <strong>{{MFP_PLAYBACK_ENDED_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> </p> </td></tr> <tr><td>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</td><td> <p> <strong>{{MFP_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> <p> <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Contains information that is common to every type of {{MFPlay}} event.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAY}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Play}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAY_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Pause}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PAUSE_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_STOP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::Stop}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_STOP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetPosition}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_POSITION_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the {{MFP_EVENT_TYPE_RATE_SET}} event. This event is sent when the <strong>{{IMFPMediaPlayer::SetRate}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_RATE_SET_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CREATED_EVENT}}</strong> macro for this purpose.</p><p>Media items are created asynchronously. If multiple items are created, the operations can complete in any order, not necessarily in the same order as the method calls. You can use the <strong>dwUserData</strong> member to identify the items, if you have simultaneous requests pending. </p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_SET_EVENT}}</strong> macro for this purpose.</p><p>If one or more streams could not be connected to a media sink, the event property store contains the {{MFP_PKEY_StreamRenderingResults}} property. The value of the property is an array of <strong>{{HRESULT}}</strong> values, indicating which streams were connected successfully. The event property store can be accessed through the <strong>header.pPropertyStore</strong> member.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::FrameStep}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_FRAME_STEP_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong> event. This event is sent when the <strong>{{IMFPMediaPlayer::ClearMediaItem}}</strong> method completes.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MEDIAITEM_CLEARED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_MF}}</strong> event. The {{MFPlay}} player object uses this event to forward certain events from the Media Foundation pipeline to the application.</p> + <p> To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_MF_EVENT}}</strong> macro for this purpose.</p><p>If <strong>{{MFEventType}}</strong> is {{MEStreamSinkFormatChanged}}, the following property may be stored in the event property store, which can be accessed through the <strong>header.pPropertyStore</strong> member.</p><table> <tr><th>Property</th><th>Description</th></tr> <tr><td> {{MFP_PKEY_StreamIndex}} </td><td>The index of the stream whose format changed. </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event. This event is sent if an error occurs during playback. </p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_ERROR_EVENT}}</strong> macro for this purpose.</p><p>This event is not used to signal the failure of an asynchronous <strong>{{IMFPMediaPlayer}}</strong> method. If an asynchronous method fails, the error is reported in the standard event listed for that method. The <strong>{{MFP_EVENT_TYPE_ERROR}}</strong> event is used for errors that happen outside the context of an asynchronous method call.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_PLAYBACK_ENDED}}</strong> event. This event is sent when the current media item finishes playing.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> method. You can use the <strong>{{MFP_GET_PLAYBACK_ENDED_EVENT}}</strong> macro for this purpose.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Event structure for the <strong>{{MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL}}</strong> event. This event is sent if the application plays a media file from a server that requires authentication. The application can respond by providing the user credentials.</p> + <p>To get a reference to this structure, cast the <em>pEventHeader</em> parameter of the <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method. You can use the <strong>{{MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT}}</strong> macro for this purpose.</p><p>If the <strong>flags</strong> member contains the <strong>{{MFP_CREDENTIAL_PROMPT}}</strong> flag, the application should do the following:</p><ol> <li>Prompt the user to enter a user name and password.</li> <li>Store the user name in the credentials object by calling <strong>{{IMFNetCredential::SetUser}}</strong> on the <strong>pCredential</strong> reference.</li> <li>Store the password by calling <strong>{{IMFNetCredential::SetPassword}}</strong> on the <strong>pCredential</strong> reference.</li> </ol><p>To cancel authentication, set <strong>fProceedWithAuthentication</strong> equal to <strong>{{FALSE}}</strong>.</p><p>By default, {{MFPlay}} uses the network source's implementation of <strong>{{IMFNetCredentialManager}}</strong> to manage credentials. An application can provide its own implementation of this interface as follows:</p><ol> <li>Call <strong>QueryInterface</strong> on the <strong>{{IMFPMediaPlayer}}</strong> reference to get the <strong>{{IPropertyStore}}</strong> interface.</li> <li>Call <strong>{{IPropertyStore::SetValue}}</strong> to set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property.</li> </ol> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Contains methods to play media files.</p><p>The {{MFPlay}} player object exposes this interface. To get a reference to this interface, call <strong>{{MFPCreateMediaPlayer}}</strong>.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Starts playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PLAY}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Pauses playback. While playback is paused, the most recent video frame is displayed, and audio is silent.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_PAUSE}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stops playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_STOP}}</strong>.</p><p>The current media item is still valid. After playback stops, the playback position resets to the beginning of the current media item. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Steps forward one video frame.</p> + <p> This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_FRAME_STEP}}</strong>.</p><p>The player object does not support frame stepping during reverse playback (that is, while the playback rate is negative).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Cannot frame step. Reasons for this error code include:</p> <ul> <li>There is no media item queued for playback.</li> <li>The current media item does not contain video.</li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The media source does not support frame stepping, or the current playback rate is negative.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback position.</p> + <p>If you call this method while playback is stopped, the new position takes effect after playback resumes.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_POSITION_SET}}</strong>.</p><p>If playback was started before <strong>SetPosition</strong> is called, playback resumes at the new position. If playback was paused, the video is refreshed to display the current frame at the new position. </p><p>If you make two consecutive calls to <strong>SetPosition</strong> with <em>guidPositionType</em> equal to <strong>{{MFP_POSITIONTYPE_100NS}}</strong>, and the second call is made before the first call has completed, the second call supersedes the first. The status code for the superseded call is set to <strong>{{S_FALSE}}</strong> in the event data for that call. This behavior prevents excessive latency from repeated calls to <strong>SetPosition</strong>, as each call may force the media source to perform a relatively lengthy seek operation. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}( {{ERROR_SEEK}} )</strong></strong></dt> </dl> </td><td> <p>The value of <em>pvPositionValue</em> is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback position.</p> + <p>The playback position is calculated relative to the start time of the media item, which can be specified by calling <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>. For example, if you set the start time to 20 seconds and the source duration is 60 seconds, the range of values returned by <strong>GetPosition</strong> is 0?40 seconds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>No media item has been queued.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the playback duration of the current media item.</p> + <p>This method calculates the playback duration, taking into account the start and stop times for the media item. To set the start and stop times, call <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong> on the media item. To get the actual duration of the underlying media file, regardless of start and stop times, call <strong>{{IMFPMediaItem::GetDuration}}</strong>.</p><p>For example, suppose that you load a 30-second audio file and set the start time equal to 2 seconds and stop time equal to 10 seconds. The <strong>{{IMFPMediaItem::GetDuration}}</strong> method will return 30 seconds, but the <strong>{{IMFPMediaPlayer::GetDuration}}</strong> method will return 8 seconds.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The media source does not have a duration. This error can occur with a live source, such as a video camera.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the playback rate.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong>.</p><p>The method sets the nearest supported rate, which will depend on the underlying media source. For example, if <em>flRate</em> is 50 and the source's maximum rate is 8? normal rate, the method will set the rate to 8.0. The actual rate is indicated in the event data for the <strong>{{MFP_EVENT_TYPE_RATE_SET}}</strong> event.</p><p>To find the range of supported rates, call <strong>{{IMFPMediaPlayer::GetSupportedRates}}</strong>.</p><p>This method does not support playback rates of zero, although Media Foundation defines a meaning for zero rates in some other contexts.</p><p>The new rate applies only to the current media item. Setting a new media item resets the playback rate to 1.0.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flRate</em> parameter is zero.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback rate.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of supported playback rates.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 indicates normal playback speed, 0.5 indicates half speed, and 2.0 indicates twice speed. Positive values indicate forward playback, and negative values indicate reverse playback. +</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not support playback in the requested direction (either forward or reverse).</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current playback state of the {{MFPlay}} player object.</p> + <p>This method can be called after the player object has been shut down.</p><p>Many of the <strong>{{IMFPMediaPlayer}}</strong> methods complete asynchronously. While an asynchronous operation is pending, the current state is not updated until the operation completes. When the operation completes, the application receives an event callback, and the new state is given in the <strong>{{MFP_EVENT_HEADER}}</strong> structure that is passed to the callback.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from a {{URL}}.</p> + <p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromURL</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromURL</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromURL</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p><p>Currently, this method returns <strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong> if the {{URL}} specifies any of the following protocols: rtsp*, mms*, or mcast. If you want to use the Media Foundation network source with {{MFPlay}}, first use the Source Resolver to create the source, and then call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></strong></dt> </dl> </td><td> <p>Unsupported protocol. </p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a media item from an object.</p> + <p>The <em>pIUnknownObj</em> parameter must specify one of the following:</p><ul> <li>A reference to a media source. Media sources expose the <strong>{{IMFMediaSource}}</strong> interface. It is the caller's responsibility to call <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source.</li> <li>A reference to a byte stream. Byte streams expose the <strong>{{IMFByteStream}}</strong> interface. Internally, the method calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </li> </ul><p>This method does not queue the media item for playback. To queue the item for playback, call <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>.</p><p>The <strong>CreateMediaItemFromObject</strong> method can be called either synchronously or asynchronously: </p><ul> <li>If <em>fSync</em> is <strong>{{TRUE}}</strong>, the method completes synchronously. The <strong>{{IMFPMediaItem}}</strong> reference is returned in the <em>ppMediaItem</em> parameter. </li> <li>If <em>fSync</em> is <strong>{{FALSE}}</strong>, the method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CREATED}}</strong>. The event data contains the <strong>{{IMFPMediaItem}}</strong> reference for the new media item.</li> </ul><p>The callback interface is set when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object. If you do not provide a callback interface, the <em>fSync</em> parameter must be <strong>{{TRUE}}</strong>. Otherwise, <strong>CreateMediaItemFromObject</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. </p><p>If you make multiple asynchronous calls to <strong>CreateMediaItemFromObject</strong>, they are not guaranteed to complete in the same order. Use the <em>dwUserData</em> parameter to match created media items with pending requests.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request. This error can occur when <em>fSync</em> is <strong>{{FALSE}}</strong> and the application did not provide a callback interface. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queues a media item for playback.</p> + <p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong>.</p><p>To create a media item, call <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong>. A media item must be used with the same {{MFPlay}} player object that created that item. If the media item was created by a different instance of the player object, <strong>SetMediaItem</strong> returns <strong>{{E_INVALIDARG}}</strong>. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The media item contains protected content. {{MFPlay}} currently does not support protected content.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_AUDIO_PLAYBACK_DEVICE}}</strong></strong></dt> </dl> </td><td> <p>No audio playback device was found. This error can occur if the media source contains audio, but no audio playback devices are available on the system.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Clears the current media item.</p><strong>Note</strong>??This method is currently not implemented.? + <p>This method stops playback and releases the player object's references to the current media item.</p><p>This method completes asynchronously. When the operation completes, the application's <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong> callback method is invoked. The event type is <strong>{{MFP_EVENT_TYPE_MEDIAITEM_CLEARED}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the current media item.</p> + <p>The <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> method is asynchronous. Therefore, while <strong>SetMediaItem</strong> is pending, <strong>GetMediaItem</strong> will not return the media item that was just set. Instead, the application should implement <strong>{{IMFPMediaPlayerCallback}}</strong> interface and handle the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see Receiving Events From the Player.</p><p>The previous remark also applies to setting the media item in the <strong>{{MFPCreateMediaPlayer}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_FAIL}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>There is no current media item.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio volume.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio volume.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p>This method does not change the master volume level for the player's audio session. Instead, it adjusts the per-channel volume levels for audio stream(s) that belong to the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>The <em>flVolume</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current audio balance.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the audio balance.</p> + <p>If you call this method before playback starts, the setting is applied when playback starts.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_OUT_OF_RANGE}}</strong></strong></dt> </dl> </td><td> <p>The <em>flBalance</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the audio is muted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Mutes or unmutes the audio.</p> + <p>If you call this method before playback starts, the setting is applied after playback starts.</p><p> This method does not mute the entire audio session to which the player belongs. It mutes only the streams from the current media item. Other streams in the audio session are not affected. For more information, see Managing the Audio Session. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the size and aspect ratio of the video. These values are computed before any scaling is done to fit the video into the destination window.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the range of video sizes that can be displayed without significantly degrading performance or image quality.</p> + <p>At least one parameter must be non-<strong>{{NULL}}</strong>. Sizes are given in pixels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the video source rectangle.</p><p>{{MFPlay}} clips the video to this rectangle and stretches the rectangle to fill the video window.</p> + <p>{{MFPlay}} stretches the source rectangle to fill the entire video window. By default, {{MFPlay}} maintains the source's correct aspect ratio, letterboxing if needed. The letterbox color is controlled by the <strong>{{IMFPMediaPlayer::SetBorderColor}}</strong> method.</p><p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p> To set the video position before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the video source rectangle.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Specifies whether the aspect ratio of the video is preserved during playback.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the aspect-ratio mode before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current aspect-ratio correction mode. This mode controls whether the aspect ratio of the video is preserved during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the window where the video is displayed.</p> + <p>The video window is specified when you first call <strong>{{MFPCreateMediaPlayer}}</strong> to create the {{MFPlay}} player object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Updates the video frame.</p> + <p>Call this method when your application's video playback window receives either a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message. This method performs two functions: </p><ul> <li>Ensures that the video frame is repainted while playback is paused or stopped. </li> <li>Adjusts the displayed video to match the current size of the video window.</li> </ul><strong>Important</strong>??Call the {{GDI}} <strong>BeginPaint</strong> function before calling <strong>UpdateVideo</strong>.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the color for the video border. The border color is used to letterbox the video.</p> + <p>This method fails if no media item is currently set, or if the current media item does not contain video.</p><p>To set the border color before playback starts, call this method inside your event handler for the <strong>{{MFP_EVENT_TYPE_MEDIAITEM_SET}}</strong> event. For more information, see <strong>{{IMFPMediaPlayerCallback::OnMediaPlayerEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>M<strong>{{F_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the current color of the video border. The border color is used to letterbox the video.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The current media item does not contain video.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Applies an audio or video effect to playback.</p> + <p>The object specified in the <em>pEffect</em> parameter can implement either a video effect or an audio effect. The effect is applied to any media items set after the method is called. It is not applied to the current media item. </p><p>For each media item, the effect is applied to the first selected stream of the matching type (audio or video). If a media item has two selected streams of the same type, the second stream does not receive the effect. The effect is ignored if the media item does not contain a stream that matches the effect type. For example, if you set a video effect and play a file that contains just audio, the video effect is ignored, although no error is raised.</p><p>The effect is applied to all subsequent media items, until the application removes the effect. To remove an effect, call <strong>{{IMFPMediaPlayer::RemoveEffect}}</strong> or <strong>{{IMFPMediaPlayer::RemoveAllEffects}}</strong>.</p><p>If you set multiple effects of the same type (audio or video), they are applied in the same order in which you call <strong>InsertEffect</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDINDEX}}</strong></strong></dt> </dl> </td><td> <p>This effect was already added.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes an effect that was added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effect is not removed from the current media item.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The effect was not found.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Removes all effects that were added with the <strong>{{IMFPMediaPlayer::InsertEffect}}</strong> method.</p> + <p>The change applies to the next media item that is set on the player. The effects are not removed from the current media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Shuts down the {{MFPlay}} player object and releases any resources the object is using.</p> + <p>After this method is called, most <strong>{{IMFPMediaPlayer}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>. Also, any media items created from this instance of the player object are invalidated and most <strong>{{IMFPMediaItem}}</strong> methods also return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>The player object automatically shuts itself down when its reference count reaches zero. You can use the <strong>Shutdown</strong> method to shut down the player before all of the references have been released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Note</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Represents a media item. A <em>media item</em> is an abstraction for a source of media data, such as a video file. Use this interface to get information about the source, or to change certain playback settings, such as the start and stop times. To get a reference to this interface, call one of the following methods:</p><ul> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> </li> <li> <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> </li> </ul> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a reference to the {{MFPlay}} player object that created the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the {{URL}} that was used to create the media item.</p> + <p>This method applies when the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> to create a media item. If the application calls <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create a media item, the <strong>GetURL</strong> method for that media item returns <strong>{{MF_E_NOTFOUND}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>No {{URL}} is associated with this media item.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the object that was used to create the media item.</p> + <p>The object reference is set if the application uses <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> to create the media item. Otherwise, <strong>GetObject</strong> returns {{MF_E_NOTFOUND}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTFOUND}}</strong></dt> </dl> </td><td> <p>The media item was created from a {{URL}}, not from an object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFPMediaPlayer::Shutdown}}</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the application-defined value stored in the media item.</p> + <p>You can assign this value when you first create the media item, by specifying it in the <em>dwUserData</em> parameter of the <strong>{{IMFPMediaPlayer::CreateMediaItemFromURL}}</strong> or <strong>{{IMFPMediaPlayer::CreateMediaItemFromObject}}</strong> method. To update the value, call <strong>{{IMFPMediaItem::SetUserData}}</strong>.</p><p>This method can be called after the player object is shut down.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Stores an application-defined value in the media item.</p> + <p>This method can be called after the player object is shut down.</p> + <p>This method can return one of these values.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the start and stop times for the media item.</p> + <p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters receive the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFP_POSITIONTYPE_100NS}}</td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): {{VT_I8}}</li> <li>Variant member: <strong>hVal</strong></li> </ul> </td></tr> </table><p>?</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Sets the start and stop time for the media item.</p> + <p>By default, a media item plays from the beginning to the end of the file. This method adjusts the start time and/or the stop time:</p><ul> <li>To set the start time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStartPositionType</em> and <em>pvStartValue</em>.</li> <li>To set the stop time, pass non-<strong>{{NULL}}</strong> values for <em>pguidStopPositionType</em> and <em>pvStopValue</em>.</li> </ul><p>The <em>pguidStartPositionType</em> and <em>pguidStopPositionType</em> parameters give the units of time that are used. Currently, the only supported value is <strong>{{MFP_POSITIONTYPE_100NS}}</strong>.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{MFP_POSITIONTYPE_100NS}}</strong></td><td>100-nanosecond units. The time parameter (<em>pvStartValue</em> or <em>pvStopValue</em>) uses the following data type:<ul> <li>Variant type (<strong>vt</strong>): <strong>{{VT_I8}}</strong></li> <li>Variant member: <strong>hVal</strong></li> </ul> <p>To clear a previously set time, use an empty <strong>{{PROPVARIANT}}</strong> (<strong>{{VT_EMPTY}}</strong>).</p> </td></tr> </table><p>?</p><p>The adjusted start and stop times are used the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_OUT_OF_RANGE}}</strong></dt> </dl> </td><td> <p>Invalid start or stop time. Any of the following can cause this error:</p> <ul> <li>Time less than zero.</li> <li>Time greater than the total duration of the media item.</li> <li>Stop time less than start time.</li> </ul> </td></tr> </table><p>?</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains a video stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains an audio stream.</p> + <p> To select or deselect streams before playback starts, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether the media item contains protected content.</p><strong>Note</strong>??Currently <strong>{{IMFPMediaPlayer}}</strong> does not support playing protected content.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the duration of the media item.</p> + <p>The method returns the total duration of the content, regardless of any values set through <strong>{{IMFPMediaItem::SetStartStopPosition}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets the number of streams (audio, video, and other) in the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries whether a stream is selected to play.</p> + <p> To select or deselect a stream, call <strong>{{IMFPMediaItem::SetStreamSelection}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Selects or deselects a stream.</p> + <p>You can use this method to change which streams are selected. The change goes into effect the next time that <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong> is called with this media item. If the media item is already set on the player, the change does not happen unless you call <strong>SetMediaItem</strong> again with this media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a stream attribute.</p> + <p>Stream attributes describe an individual stream (audio, video, or other) within the presentation. To get an attribute that applies to the entire presentation, call <strong>{{IMFPMediaItem::GetPresentationAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Queries the media item for a presentation attribute.</p> + <p>Presentation attributes describe the presentation as a whole. To get an attribute that applies to an individual stream within the presentation, call <strong>{{IMFPMediaItem::GetStreamAttribute}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets various flags that describe the media item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p> Sets a media sink for the media item. A <em>media sink</em> is an object that consumes the data from one or more streams. </p> + <p>By default, the {{MFPlay}} player object renders audio streams to the Streaming Audio Renderer ({{SAR}}) and video streams to the Enhanced Video Renderer ({{EVR}}). You can use the <strong>SetStreamSink</strong> method to provide a different media sink for an audio or video stream; or to support other stream types besides audio and video. You can also use it to configure the {{SAR}} or {{EVR}} before they are used.</p><p>Call this method before calling <strong>{{IMFPMediaPlayer::SetMediaItem}}</strong>. Calling this method after <strong>SetMediaItem</strong> has no effect, unless you stop playback and call <strong>SetMediaItem</strong> again.</p><p>To reset the media item to use the default media sink, set <em>pMediaSink</em> to <strong>{{NULL}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Gets a property store that contains metadata for the source, such as author or title.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Callback interface for the <strong>{{IMFPMediaPlayer}}</strong> interface.</p><p>To set the callback, pass an <strong>{{IMFPMediaPlayerCallback}}</strong> reference to the <strong>{{MFPCreateMediaPlayer}}</strong> function in the <em>pCallback</em> parameter. The application implements the <strong>{{IMFPMediaPlayerCallback}}</strong> interface.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Called by the {{MFPlay}} player object to notify the application of a playback event.</p> + <p> The specific type of playback event is given in the <strong>eEventType</strong> member of the <strong>{{MFP_EVENT_HEADER}}</strong> structure. This structure contains information that is common to all of the event types. Some event types use extended structures. A set of macros is defined for casting the <em>pEventHeader</em> reference to the correct structure type. For more information, see <strong>{{MFP_EVENT_TYPE}}</strong>. </p><p>It is safe to call <strong>{{IMFPMediaPlayer}}</strong> and <strong>{{IMFPMediaItem}}</strong> methods inside the <strong>OnMediaPlayer</strong> method. {{MFPlay}} is guaranteed not to reenter the <strong>OnMediaPlayer</strong> method. That is, calls to <strong>OnMediaPlayer</strong> are serialized, and the method will not be invoked again from inside <strong>OnMediaPlayer</strong>. </p> + <p>This method does not return a value.</p> + + + + <p> </p><strong>Important</strong>??Deprecated. This {{API}} may be removed from future releases of Windows. Applications should use the Media Session for playback.?<p>Creates a new instance of the {{MFPlay}} player object.</p> + <p>Before calling this function, call <strong>CoIntialize(Ex)</strong> from the same thread to initialize the {{COM}} library.</p><p>Internally, <strong>{{MFPCreateMediaPlayer}}</strong> calls <strong>{{MFStartup}}</strong> to initialize the Microsoft Media Foundation platform. When the player object is destroyed, it calls <strong>{{MFShutdown}}</strong> to shut down the platform. It is not necessary for an application to call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> when using {{MFPlay}}.</p><strong>Note</strong>??If you use other Media Foundation {{APIs}} outside the life time of the player object, then your application should call <strong>{{MFStartup}}</strong> and <strong>{{MFShutdown}}</strong>.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Defines the {{ASF}} splitter options.</p> + + + <dd> <p>The splitter delivers samples for the {{ASF}} content in reverse order to accommodate reverse playback.</p> </dd> + + + <dd> <p>The splitter delivers samples for streams that are protected with Windows Media Digital Rights Management.</p> </dd> + + + + + <p> </p><p>Defines status conditions for the <strong>{{IMFASFSplitter::GetNextSample}}</strong> method.</p> + + + + <p> </p><p>Defines the {{ASF}} multiplexer options.</p> + + + <dd> <p>The multiplexer automatically adjusts the bit rate of the {{ASF}} content in response to the characteristics of the streams being multiplexed.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} indexer options.</p> + + + <dd> <p>The indexer creates a new index object.</p> </dd> + + + <dd> <p>The indexer returns values for reverse playback.</p> </dd> + + + <dd> <p>The indexer creates an index object for a live {{ASF}} stream.</p> </dd> + + + + + <p> </p><p>Defines the {{ASF}} stream selector options.</p> + + + <dd> <p>The stream selector will not set thinning. Thinning is the process of removing samples from a stream to reduce the bit rate.</p> </dd> + + + <dd> <p>The stream selector will use the average bit rate of streams when selecting streams.</p> </dd> + + + + + <p> </p><p>Defines the selection options for an {{ASF}} stream.</p> + + + <dd> <p>No samples from the stream are delivered.</p> </dd> + + + <dd> <p>Only samples from the stream that are clean points are delivered.</p> </dd> + + + <dd> <p>All samples from the stream are delivered.</p> </dd> + + + + + <p> </p><p>Specifies how the {{ASF}} file sink should apply Windows Media {{DRM}}.</p> + + + <dd> <p>Undefined action.</p> </dd> + + + <dd> <p>Encode the content using Windows Media {{DRM}}. Use this flag if the source content does not have {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcode the content using Windows Media {{DRM}}. Use this flag if the source content has Windows Media {{DRM}} protection and you want to change the encoding parameters but not the {{DRM}} protection.</p> </dd> + + + <dd> <p>Transcrypt the content. Use this flag if the source content has {{DRM}} protection and you want to change the {{DRM}} protection; for example, if you want to convert from Windows Media {{DRM}} version 1 to Windows Media {{DRM}} version 7 or later.</p> </dd> + + + <dd> <p>Reserved. Do not use.</p> </dd> + + + + + <p> </p><p>Contains statistics about the progress of the {{ASF}} multiplexer.</p> + <p>Use <strong>{{IMFASFMultiplexer::GetStatistics}}</strong> to retrieve this structure.</p> + + + <dd> <p>Number of frames written by the {{ASF}} multiplexer.</p> </dd> + + + <dd> <p>Number of frames dropped by the {{ASF}} multiplexer.</p> </dd> + + + + + <p> Specifies an index for the {{ASF}} indexer object. </p> + <p> The index object of an {{ASF}} file can contain a number of distinct indexes. Each index is identified by the type of index and the stream number. No {{ASF}} index object can contain more than one index for a particular combination of stream number and index type.</p> + + + <dd> <p> The type of index. Currently this value must be {{GUID_NULL}}, which specifies time-based indexing. </p> </dd> + + + <dd> <p> The stream number to which this structure applies. </p> </dd> + + + + + <p> </p><p>Describes the indexing configuration for a stream and type of index.</p> + + + <dd> <p> <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and the type of index.</p> </dd> + + + <dd> <p>Number of bytes used for each index entry. If the value is {{MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC}}, the index entries have variable size.</p> </dd> + + + <dd> <p>Optional text description of the index.</p> </dd> + + + <dd> <p>Indexing interval. The units of this value depend on the index type. A value of {{MFASFINDEXER_NO_FIXED_INTERVAL}} indicates that there is no fixed indexing interval.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> Retrieves the size of the header section of an Advanced Systems Format ({{ASF}}) file. </p> + <p>The header of an {{ASF}} file or stream can be passed to the <strong>{{IMFASFContentInfo::ParseHeader}}</strong> method to populate the ContentInfo object with the header information.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The buffer does not contain valid {{ASF}} data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer does not contain enough valid data. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing the beginning of {{ASF}} content. The size of the valid data in the buffer must be at least {{MFASF_MIN_HEADER_BYTES}} in bytes.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the header section of the content. The value includes the size of the {{ASF}} Header Object plus the size of the header section of the Data Object. Therefore, the resulting value is the offset to the start of the data packets in the {{ASF}} Data Object.</p> </dd> + + + + + <p> </p><p>Parses the information in an {{ASF}} header and uses that information to set values in the ContentInfo object. You can pass the entire header in a single buffer or send it in several pieces.</p> + <p>If you pass the header in pieces, the ContentInfo object will keep references to the buffer objects until the entire header is parsed. Therefore, do not write over the buffers passed into this method.</p><p>The start of the Header object has the following layout in memory:</p><table> <tr><th>Field Name</th><th>Size in bytes</th></tr> <tr><td>Object {{ID}}</td><td>16</td></tr> <tr><td>Object Size</td><td>8</td></tr> <tr><td>Number of Header Objects</td><td>4</td></tr> <tr><td>Reserved1</td><td>1</td></tr> <tr><td>Reserved2</td><td>1</td></tr> </table><p>?</p><p>The first call to <strong>ParseHeader</strong> reads everything up to and including Rerserved2, so it requires a minimum of 30 bytes. (Note that the <strong>{{IMFASFContentInfo::GetHeaderSize}}</strong> method reads only the Object {{ID}} and Object Size fields, so that method requires a minimum of 24 bytes.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The header is completely parsed and validated.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The input buffer does not contain valid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The input buffer is to small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_ASF_PARSEINPROGRESS}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the header passed was incomplete. This is the successful return code for all calls but the last one when passing the header in pieces.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing some or all of the header. The buffer must contain at least 30 bytes, which is the size of the Header Object, not including the objects contained in the Header Object (that is, everything up to and including the Reserved2 field in the Header Object).</p> </dd> + + + <dd> <p>Offset, in bytes, of the first byte in the buffer relative to the beginning of the header.</p> </dd> + + + + + <p> </p><p>Encodes the data in the <strong>{{MFASFContentInfo}}</strong> object into a binary Advanced Systems Format ({{ASF}}) header.</p> + <p>The size received in the <em>pcbHeader</em> parameter includes the padding size. The content information shrinks or expands the padding data depending on the size of the {{ASF}} Header Objects.</p><p>During this call, the stream properties are set based on the encoding properties of the profile. These properties are available through the <strong>{{IMFMetadata}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Objects do not exist for the media that the ContentInfo object holds reference to. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p> The {{ASF}} Header Object size exceeds 10 {{MB}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The buffer passed in <em>pIHeader</em> is not large enough to hold the {{ASF}} Header Object information. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the buffer object that will receive the encoded header. Set to <strong>{{NULL}}</strong> to retrieve the size of the header. </p> </dd> + + + <dd> <p> Size of the encoded {{ASF}} header in bytes. If <em>pIHeader</em> is <strong>{{NULL}}</strong>, this value is set to the buffer size required to hold the encoded header. </p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) profile that describes the {{ASF}} content.</p> + <p>The profile is set by calling either <strong>{{IMFASFContentInfo::SetProfile}}</strong> or <strong>{{IMFASFContentInfo::ParseHeader}}</strong>.</p><p>The {{ASF}} profile object returned by this method does not include any of the <strong>{{MF_PD_ASF_xxx}}</strong> attributes (see Presentation Descriptor Attributes). To get these attributes, do the following:</p><ol> <li> <p>Call <strong>{{IMFASFContentInfo::GeneratePresentationDescriptor}}</strong> to get the {{ASF}} presentation descriptor. You can query the presentation descriptor for the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> <li> <p>(Optional.) Call <strong>{{MFCreateASFProfileFromPresentationDescriptor}}</strong> to convert the presentation descriptor into an {{ASF}} profile. The profile object created by this function contains the <strong>{{MF_PD_ASF_xxx}}</strong> attributes.</p> </li> </ol><p>An {{ASF}} profile is a template for file encoding, and is intended mainly for creating {{ASF}} content. If you are reading an existing {{ASF}} file, it is recommended that you use the presentation descriptor to get information about the file. One exception is that the profile contains the mutual exclusion and stream prioritization objects, which are not exposed directly from the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an <strong>{{IMFASFProfile}}</strong> interface reference. The caller must release the interface. If the object does not have an {{ASF}} profile, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Uses profile data from a profile object to configure settings in the ContentInfo object.</p> + <p>If there is already information in the ContentInfo object when this method is called, it is replaced by the information from the profile object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The <strong>{{IMFASFProfile}}</strong> interface of the profile object.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor for {{ASF}} content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a property store that can be used to set encoding properties.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number to configure. Set to zero to configure file-level encoding properties.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams in the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the profile.</p> </dd> + + + + + <p> </p><p>Retrieves a stream from the profile by stream index, and/or retrieves the stream number for a stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the stream to retrieve. Stream indexes are sequential and zero-based. You can get the number of streams that are in the profile by calling the <strong>{{IMFASFProfile::GetStreamCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives the stream number of the requested stream. Stream numbers are one-based and are not necessarily sequential. This parameter can be set to <strong>{{NULL}}</strong> if the stream number is not required.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong> if you want to retrieve the stream number without accessing the stream configuration.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) stream configuration object for a stream in the profile. This method references the stream by stream number instead of stream index.</p> + <p>This method does not create a copy of the stream configuration object. The reference that is retrieved points to the object within the profile object. You must not make any changes to the stream configuration object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the stream configuration object in the profile, you must first clone the stream configuration object by calling <strong>{{IMFASFStreamConfig::Clone}}</strong>. Make whatever changes are required to the clone of the object and then add the updated object by calling the <strong>{{IMFASFProfile::SetStream}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain the interface reference.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a stream to the profile or reconfigures an existing stream.</p> + <p>If the stream number in the {{ASF}} stream configuration object is already included in the profile, the information in the new object replaces the old one. If the profile does not contain a stream for the stream number, the {{ASF}} stream configuration object is added as a new stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFStreamConfig}}</strong> interface of a configured {{ASF}} stream configuration object.</p> </dd> + + + + + <p> </p><p>Removes a stream from the Advanced Systems Format ({{ASF}}) profile object.</p> + <p>After a stream is removed, the {{ASF}} profile object reassigns stream indexes so that the index values are sequential starting from zero. Any previously stored stream index numbers are no longer valid after deleting a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to remove.</p> </dd> + + + + + <p> </p><p>Creates an Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The {{ASF}} stream configuration object created by this method is not included in the profile. To include the stream, you must first configure the stream configuration and then call <strong>{{IMFASFProfile::SetStream}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>ppIStream</em> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>stream configuration object could not be created due to insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new {{ASF}} stream configuration object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the number of Advanced Systems Format ({{ASF}}) mutual exclusion objects that are associated with the profile.</p> + <p>Multiple mutual exclusion objects may be required for streams that are mutually exclusive in more than one way. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of mutual exclusion objects.</p> </dd> + + + + + <p> </p><p>Retrieves an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>This method does not create a copy of the mutual exclusion object. The returned reference refers to the mutual exclusion contained in the profile object. You must not make any changes to the mutual exclusion object using this reference, because doing so can affect the profile object in unexpected ways.</p><p>To change the configuration of the mutual exclusion object in the profile, you must first clone the mutual exclusion object by calling <strong>{{IMFASFMutualExclusion::Clone}}</strong>. Make whatever changes are required to the clone of the object, remove the old mutual exclusion object from the profile by calling the <strong>{{IMFASFProfile::RemoveMutualExclusion}}</strong> method, and then add the updated object by calling the <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the mutual exclusion object in the profile.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the {{ASF}} mutual exclusion object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Adds a configured Advanced Systems Format ({{ASF}}) mutual exclusion object to the profile.</p> + <p>You can create a mutual exclusion object by calling the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFMutualExclusion}}</strong> interface of a configured {{ASF}} mutual exclusion object.</p> </dd> + + + + + <p> </p><p>Removes an Advanced Systems Format ({{ASF}}) mutual exclusion object from the profile.</p> + <p>When a mutual exclusion object is removed from the profile, the {{ASF}} profile object reassigns the mutual exclusion indexes so that they are sequential starting with zero. Any previously stored indexes are no longer valid after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the mutual exclusion object to remove from the profile.</p> </dd> + + + + + <p> </p><p>Creates a new Advanced Systems Format ({{ASF}}) mutual exclusion object. Mutual exclusion objects can be added to a profile by calling the <strong>AddMutualExclusion</strong> method.</p> + <p>The {{ASF}} mutual exclusion object created by this method is not associated with the profile. Call <strong>{{IMFASFProfile::AddMutualExclusion}}</strong> after configuring the object to make this association.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved.</p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <strong>Note</strong>??This method is not supported.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <strong>Note</strong>??This method is not implemented.? + <p> Returns <strong>{{E_NOTIMPL}}</strong>. </p> + + + <dd> <p>Reserved. </p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format profile object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p>Gets the major media type of the stream. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the major media type for the stream. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> </p><p>Retrieves the stream number of the stream.</p> + <p>The method returns the stream number.</p> + + + + <p> </p><p>Assigns a stream number to the stream.</p> + <p>Stream numbers start from 1 and do not need to be sequential.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number to assign to the stream.</p> </dd> + + + + + <p> </p><p>Retrieves the media type of the stream.</p> + <p>To reduce unnecessary copying, the method returns a reference to the media type that is stored internally by the object. Do not modify the returned media type, as the results are not defined.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type object associated with the stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the media type for the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>Some validation of the media type is performed by this method. However, a media type can be successfully set, but cause an error when the stream is added to the profile.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of a configured media type object.</p> </dd> + + + + + <p> </p><p>Retrieves the number of payload extensions that are configured for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of payload extensions.</p> </dd> + + + + + <p> </p><p>Retrieves information about an existing payload extension.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pbExtensionSystemInfo</em> is too small.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>wPayloadExtensionNumber</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The payload extension index. Valid indexes range from 0, to one less than the number of extensions obtained by calling <strong>{{IMFASFStreamConfig::GetPayloadExtensionCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Receives the number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives information about this extension system. This information is the same for all samples and is stored in the content header (not in each sample). This parameter can be <strong>{{NULL}}</strong>. To find the required size of the buffer, set this parameter to <strong>{{NULL}}</strong>; the size is returned in <em>pcbExtensionSystemInfo</em>.</p> </dd> + + + <dd> <p>On input, specifies the size of the buffer pointed to by <em>pbExtensionSystemInfo</em>. On output, receives the required size of the <em>pbExtensionSystemInfo</em> buffer in bytes.</p> </dd> + + + + + <p> </p><p>Configures a payload extension for the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that identifies the payload extension. For a list of predefined payload extensions, see {{ASF}} Payload Extension {{GUIDs}}. Applications can also define custom payload extensions.</p> </dd> + + + <dd> <p>Number of bytes added to each sample for the extension.</p> </dd> + + + <dd> <p>A reference to a buffer that contains information about this extension system. This information is the same for all samples and is stored in the content header (not with each sample). This parameter can be <strong>{{NULL}}</strong> if <em>cbExtensionSystemInfo</em> is 0.</p> </dd> + + + <dd> <p>Amount of data, in bytes, that describes this extension system. If this value is 0, then <em>pbExtensionSystemInfo</em> can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Removes all payload extensions that are configured for the stream.</p> + <p>None.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates a copy of the Advanced Systems Format ({{ASF}}) stream configuration object.</p> + <p>The cloned object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamConfig}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p>Configures an Advanced Systems Format ({{ASF}}) mutual exclusion object, which manages information about a group of streams in an {{ASF}} profile that are mutually exclusive. When streams or groups of streams are mutually exclusive, only one of them is read at a time, they are not read concurrently.</p><p>A common example of mutual exclusion is a set of streams that each include the same content encoded at a different bit rate. The stream that is used is determined by the available bandwidth to the reader.</p><p>An <strong>{{IMFASFMutualExclusion}}</strong> interface exists for every {{ASF}} mutual exclusion object. A reference to this interface is obtained when you create the object using the <strong>{{IMFASFProfile::CreateMutualExclusion}}</strong> method.</p> + <p>An {{ASF}} profile object can support multiple mutual exclusions. Each must be configured using a separate {{ASF}} mutual exclusion object.</p> + + + + <p> </p><p>Retrieves the type of mutual exclusion represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams of several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A variable that receives the type identifier. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Sets the type of mutual exclusion that is represented by the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>Sometimes, content must be made mutually exclusive in more than one way. For example, a video file might contain audio streams in several bit rates for each of several languages. To handle this type of complex mutual exclusion, you must configure more than one {{ASF}} mutual exclusion object. For more information, see <strong>{{IMFASFMutualExclusion::AddRecord}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The type of mutual exclusion that is represented by the {{ASF}} mutual exclusion object. For a list of predefined mutual exclusion type constants, see {{ASF}} Mutual Exclusion Type {{GUIDs}}.</p> </dd> + + + + + <p> </p><p>Retrieves the number of records in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of streams in every other record.</p><p>Use this method in conjunction with <strong>{{IMFASFMutualExclusion::GetStreamsForRecord}}</strong> to retrieve the streams that are included in each record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the count of records.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers contained in a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The number of the record for which to retrieve the stream numbers.</p> </dd> + + + <dd> <p>An array that receives the stream numbers. Set to <strong>{{NULL}}</strong> to get the number of elements required, which is indicated by the value of <em>pcStreams</em> on return. If this parameter is not <strong>{{NULL}}</strong>, the method will copy as many stream numbers to the array as there are elements indicated by the value of <em>pcStreams</em>.</p> </dd> + + + <dd> <p>On input, the number of elements in the array referenced by <em>pwStreamNumArray</em>. On output, the method sets this value to the count of stream numbers in the record. You can call <strong>GetStreamsForRecord</strong> with <em>pwStreamNumArray</em> set to <strong>{{NULL}}</strong> to retrieve the number of elements required to hold all of the stream numbers.</p> </dd> + + + + + <p> </p><p>Adds a stream number to a record in the Advanced Systems Format mutual exclusion object.</p> + <p>Each record includes one or more streams. Every stream in a record is mutually exclusive of all streams in every other record.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The specified stream number is already associated with the record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number to which the stream is added. A record number is set by the <strong>{{IMFASFMutualExclusion::AddRecord}}</strong> method.</p> </dd> + + + <dd> <p>The stream number to add to the record.</p> </dd> + + + + + <p> </p><p>Removes a stream number from a record in the Advanced Systems Format mutual exclusion object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The stream number is not listed for the specified record.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The record number from which to remove the stream number.</p> </dd> + + + <dd> <p>The stream number to remove from the record.</p> </dd> + + + + + <p> </p><p>Removes a record from the Advanced Systems Format ({{ASF}}) mutual exclusion object.</p> + <p>When a record is removed, the {{ASF}} mutual exclusion object indexes the remaining records so that they are sequential starting with zero. You should enumerate the records to ensure that you have the correct index for each record. If the record removed is the one with the highest index, removing it has no effect on the other indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index of the record to remove.</p> </dd> + + + + + <p> </p><p>Adds a record to the mutual exclusion object. A record specifies streams that are mutually exclusive with the streams in all other records.</p> + <p>A record can include one or more stream numbers. All of the streams in a record are mutually exclusive with all the streams in all other records in the {{ASF}} mutual exclusion object.</p><p>You can use records to create complex mutual exclusion scenarios by using multiple {{ASF}} mutual exclusion objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the index assigned to the new record. Record indexes are zero-based and sequential.</p> </dd> + + + + + <p> </p><p>Creates a copy of the Advanced Systems Format mutual exclusion object.</p> + <p>The cloned object is a new object, completely independent of the object from which it was cloned.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMutualExclusion}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the number of entries in the stream priority list.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the stream priority list.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Retrieves the stream number of a stream in the stream priority list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument or the <em>dwStreamIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the entry to retrieve from the stream priority list. To get the number of entries in the priority list, call <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the stream number of the stream priority entry.</p> </dd> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Adds a stream to the stream priority list.</p> + <p>The stream priority list is built by appending entries to the list with each call to <strong>AddStream</strong>. The list is evaluated in descending order of importance. The most important stream should be added first, and the least important should be added last.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number of the stream to add.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the stream is mandatory.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Removes a stream from the stream priority list.</p> + <p>When a stream is removed from the stream priority list, the index values of all streams that follow it in the list are decremented.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the entry in the stream priority list to remove. Values range from zero, to one less than the stream count retrieved by calling <strong>{{IMFASFStreamPrioritization::GetStreamCount}}</strong>.</p> </dd> + + + + + <p> </p><strong>Note</strong>??This interface is not implemented in this version of Media Foundation.?<p>Creates a copy of the {{ASF}} stream prioritization object.</p> + <p>The new object is completely independent of the original.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamPrioritization}}</strong> interface of the new object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and configures it to parse data from an {{ASF}} data section.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIContentInfo</em> parameter is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of a ContentInfo object that describes the data to be parsed.</p> </dd> + + + + + <p> </p><p>Sets option flags on the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>This method can only be called after the splitter is initialized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The splitter is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter does not contain a valid flag.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The {{MFASF_SPLITTER_REVERSE}} flag is set, but the content cannot be parsed in reverse.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise combination of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the option flags that are set on the {{ASF}} splitter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the option flags. This value is a bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_SPLITTERFLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the streams to be parsed by the Advanced Systems Format ({{ASF}}) splitter.</p> + <p>Calling this method supersedes any previous stream selections; only the streams specified in the <em>pwStreamNumbers</em> array will be selected.</p><p>By default, no streams are selected by the splitter.</p><p>You can obtain a list of the currently selected streams by calling the <strong>{{IMFASFSplitter::GetSelectedStreams}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwStreamNumbers</em> is <strong>{{NULL}}</strong> and <em>wNumStreams</em> contains a value greater than zero.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number was passed in the array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of variables containing the list of stream numbers to select.</p> </dd> + + + <dd> <p>The number of valid elements in the stream number array.</p> </dd> + + + + + <p> Gets a list of currently selected streams. </p> + <p>To get the number of selected streams, set <em>pwStreamNumbers</em> to <strong>{{NULL}}</strong>. The method will return <strong>{{MF_E_BUFFERTOSMALL}}</strong> but will also set the value of <code>*pwNumStreams</code> equal to the number of selected streams. Then allocate an array of that size and call the method again, passing the array in the <em>pwStreamNumbers</em> parameter.</p><p>The following code shows these steps:</p><pre>{{HRESULT}} DisplaySelectedStreams({{IMFASFSplitter}} *pSplitter) +{ {{WORD}} count = 0; {{HRESULT}} hr = pSplitter-&gt;GetSelectedStreams({{NULL}}, &amp;count); if (hr == {{MF_E_BUFFERTOOSMALL}}) { {{WORD}} *pStreamIds = new (std::nothrow) {{WORD}}[count]; if (pStreamIds) { hr = pSplitter-&gt;GetSelectedStreams(pStreamIds, &amp;count); if ({{SUCCEEDED}}(hr)) { for ({{WORD}} i = 0; i &lt; count; i++) { printf("Selected stream {{ID:}} %d\n", pStreamIds[i]); } } delete [] pStreamIds; } else { hr = {{E_OUTOFMEMORY}}; } } return hr; +} +</pre><p>Alternatively, you can allocate an array that is equal to the total number of streams and pass that to <em>pwStreamNumbers</em>.</p><p>Before calling this method, initialize <code>*pwNumStreams</code> to the number of elements in <em>pwStreamNumbers</em>. If <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>, set <code>*pwNumStreams</code> to zero.</p><p> By default, no streams are selected by the splitter. Select streams by calling the <strong>{{IMFASFSplitter::SelectStreams}}</strong> method. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> The <em>pwStreamNumbers</em> array is smaller than the number of selected streams. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The address of an array of <strong>{{WORDs}}</strong>. This array receives the stream numbers of the selected streams. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, points to a variable that contains the number of elements in the <em>pwStreamNumbers</em> array. Set the variable to zero if <em>pwStreamNumbers</em> is <strong>{{NULL}}</strong>. </p> <p>On output, receives the number of elements that were copied into <em>pwStreamNumbers</em>. Each element is the identifier of a selected stream.</p> </dd> + + + + + <p> </p><p>Sends packetized Advanced Systems Format ({{ASF}}) data to the {{ASF}} splitter for processing.</p> + <p>After using this method to parse data, you must call <strong>{{IMFASFSplitter::GetNextSample}}</strong> to retrieve parsed media samples.</p><p>If your {{ASF}} data contains variable-sized packets, you must set the <strong>{{MFASFSPLITTER_PACKET_BOUNDARY}}</strong> attribute on the buffers to indicate the sample boundaries, and the buffers cannot span multiple packets.</p><p>If the method returns {{ME_E_NOTACCEPTING}}, call <strong>GetNextSample</strong> to get the output samples, or call <strong>{{IMFASFSplitter::Flush}}</strong> to clear the splitter.</p><p>The splitter might hold a reference count on the input buffer. Therefore, do not write over the valid data in the buffer after calling this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>pIBuffer</em> parameter is <strong>{{NULL}}</strong>.</p> <p>The specified offset value in <em>cbBufferOffset</em> is greater than the length of the buffer.</p> <p>The total value of <em>cbBufferOffset</em> and <em>cbLength</em> is greater than the length of the buffer.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The <strong>{{IMFASFSplitter::Initialize}}</strong> method was not called or the call failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The splitter cannot process more input at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a buffer object containing data to be parsed.</p> </dd> + + + <dd> <p>The offset into the data buffer where the splitter should begin parsing. This value is typically set to 0.</p> </dd> + + + <dd> <p>The length, in bytes, of the data to parse. This value is measured from the offset specified by <em>cbBufferOffset</em>. Set to 0 to process to the end of the buffer.</p> </dd> + + + + + <p> </p><p>Retrieves a sample from the Advanced Systems Format ({{ASF}}) splitter after the data has been parsed.</p> + <p>Before calling this method, call <strong>{{IMFASFSplitter::ParseData}}</strong> to give input data to the splitter. If the input does not contain enough data for a complete sample, the <strong>GetNextSample</strong> method succeeds but returns <strong>{{NULL}}</strong> in the <em>ppISample</em> parameter.</p><p>The {{ASF}} splitter skips samples for unselected streams. To select streams, call <strong>{{IMFASFSplitter::SelectStreams}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>The {{ASF}} data in the buffer is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_MISSINGDATA}}</strong></dt> </dl> </td><td> <p>There is a gap in the {{ASF}} data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong></dt> </dl> </td><td> <p>More samples are ready to be retrieved. Call <strong>GetNextSample</strong> in a loop until the <em>pdwStatusFlags</em> parameter receives the value zero.</p> </td></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>No additional samples are ready. Call <strong>{{IMFASFSplitter::ParseData}}</strong> to give more input data to the splitter.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If the method returns a sample in the <em>ppISample</em> parameter, this parameter receives the number of the stream to which the sample belongs.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the parsed sample. The caller must release the interface. If no samples are ready, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Resets the Advanced Systems Format ({{ASF}}) splitter and releases all pending samples.</p> + <p>Any samples waiting to be retrieved when <strong>Flush</strong> is called are lost.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the send time of the last sample received.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwLastSendTime</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the send time of the last sample received.</p> </dd> + + + + + <p>Provides methods to create Advanced Systems Format ({{ASF}}) data packets. The methods of this interface process input samples into the packets that make up an {{ASF}} data section. The {{ASF}} multiplexer exposes this interface. To create the {{ASF}} multiplexer, call <strong>{{MFCreateASFMultiplexer}}</strong>.</p> + + + + <p> </p><p>Initializes the multiplexer with the data from an {{ASF}} ContentInfo object.</p> + <p>This call must be made once at the beginning of encoding, with <em>pIContentInfo</em> pointing to the {{ASF}} ContentInfo object that describes the content to be encoded. This enables the {{ASF}} multiplexer to see, among other things, which streams will be present in the encoding session. This call typically does not affect the data in the {{ASF}} ContentInfo object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the <strong>{{MFASFContentInfo}}</strong> object that contains the header information of the new {{ASF}} file. The multiplexer will generate data packets for this file.</p> </dd> + + + + + <p> </p><p>Sets multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. These flags specify which multiplexer options to use. For more information, see "Multiplexer Initialization and Leaky Bucket Settings" in Creating the Multiplexer Object.</p> </dd> + + + + + <p> </p><p>Retrieves flags indicating the configured multiplexer options.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more values from the <strong>{{MFASF_MULTIPLEXERFLAGS}}</strong> enumeration. To set these flags, call <strong>{{IMFASFMultiplexer::SetFlags}}</strong>.</p> </dd> + + + + + <p> Delivers input samples to the multiplexer. </p> + <p> The application passes samples to <strong>ProcessSample</strong>, and the {{ASF}} multiplexer queues them internally until they are ready to be placed into {{ASF}} packets. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the {{ASF}} data packet. </p><p>After each call to <strong>ProcessSample</strong>, call <strong>GetNextPacket</strong> in a loop to get all of the available data packets. For a code example, see Generating New {{ASF}} Data Packets.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> There are too many packets waiting to be retrieved from the multiplexer. Call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> to get the packets.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BANDWIDTH_OVERRUN}}</strong></dt> </dl> </td><td> <p> The sample that was processed violates the bandwidth limitations specified for the stream in the {{ASF}} ContentInfo object. When this error is generated, the sample is dropped. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The value passed in <em>wStreamNumber</em> is invalid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_LATE_SAMPLE}}</strong></dt> </dl> </td><td> <p> The presentation time of the input media sample is earlier than the send time. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number of the stream to which the sample belongs. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The input sample contains the media data to be converted to {{ASF}} data packets. When possible, the time stamp of this sample should be accurate. </p> </dd> + + + <dd> <p> The adjustment to apply to the time stamp of the sample. This parameter is used if the caller wants to shift the sample time on <em>pISample</em>. This value should be positive if the time stamp should be pushed ahead and negative if the time stamp should be pushed back. This time stamp is added to sample time on <em>pISample</em>, and the resulting time is used by the multiplexer instead of the original sample time. If no adjustment is needed, set this value to 0. </p> </dd> + + + + + <p> </p><p>Retrieves the next output {{ASF}} packet from the multiplexer.</p> + <p> The client needs to call this method, ideally after every call to <strong>{{IMFASFMultiplexer::ProcessSample}}</strong>, to get the output {{ASF}} packets. Call this method in a loop as long as the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag is received. </p><p>If no packets are ready, the method returns <strong>{{S_OK}}</strong> but does not return a sample in <em>ppIPacket</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives zero or more status flags. If more than one packet is waiting, the method sets the <strong>{{ASF_STATUSFLAGS_INCOMPLETE}}</strong> flag. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFSample}}</strong> interface of the first output sample of the data packet. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Signals the multiplexer to process all queued output media samples. Call this method after passing the last sample to the multiplexer.</p> + <p>You must call <strong>Flush</strong> after the last sample has been passed into the {{ASF}} multiplexer and before you call <strong>{{IMFASFMultiplexer::End}}</strong>. This causes all output media samples in progress to be completed. After calling <strong>Flush</strong>, call <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> in a loop until all the pending media samples have been packetized.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Collects data from the multiplexer and updates the {{ASF}} ContentInfo object to include that information in the {{ASF}} Header Object.</p> + <p>For non-live encoding scenarios (such as encoding to a file), the user should call <strong>End</strong> to update the specified ContentInfo object, adding data that the multiplexer has collected during the packet generation process. The user should then call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and write the output header at the beginning of the {{ASF}} file (overwriting the header obtained at the beginning of the encoding session). For more information, see Writing an {{ASF}} Header Object for a New File.</p><p>During live encoding, it is usually not possible to rewrite the header, so this call is not required for live encoding. (The header in those cases will simply lack some of the information that was not available until the end of the encoding session.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_FLUSH_NEEDED}}</strong></dt> </dl> </td><td> <p>There are pending output media samples waiting in the multiplexer. Call <strong>{{IMFASFMultiplexer::Flush}}</strong> to force the media samples to be packetized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object. This must be the same object that was used to initialize the multiplexer. The ContentInfo object represents the {{ASF}} Header Object of the file for which the multiplexer generated data packets.</p> </dd> + + + + + <p> </p><p>Retrieves multiplexer statistics.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to obtain statistics.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{ASF_MUX_STATISTICS}}</strong> structure that receives the statistics.</p> </dd> + + + + + <p> </p><p>Sets the maximum time by which samples from various streams can be out of synchronization. The multiplexer will not accept a sample with a time stamp that is out of synchronization with the latest samples from any other stream by an amount that exceeds the synchronization tolerance.</p> + <p>The synchronization tolerance is the maximum difference in presentation times at any given point between samples of different streams that the {{ASF}} multiplexer can accommodate. That is, if the synchronization tolerance is 3 seconds, no stream can be more than 3 seconds behind any other stream in the time stamps passed to the multiplexer. The multiplexer determines a default synchronization tolerance to use, but this method overrides it (usually to increase it). More tolerance means the potential for greater latency in the multiplexer. If the time stamps are synchronized among the streams, actual latency will be much lower than <em>msSyncTolerance</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Synchronization tolerance in milliseconds.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets indexer options.</p> + <p><strong>{{IMFASFIndexer::SetFlags}}</strong> must be called before <strong>{{IMFASFIndexer::Initialize}}</strong>. Attempting to call <strong>SetFlags</strong> after <strong>Initialize</strong> will return {{MF_E_INVALIDREQUEST}} as a result.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The indexer object was initialized before setting flags for it. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration specifying the indexer options to use.</p> </dd> + + + + + <p> </p><p>Retrieves the flags that indicate the selected indexer options.</p> + <p>You must call this method before initializing the indexer object with <strong>{{IMFASFIndexer::Initialize}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pdwFlags</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of zero or more flags from the <strong>{{MFASF_INDEXER_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes the indexer object. This method reads information in a ContentInfo object about the configuration of the content and the properties of the existing index, if present. Use this method before using the indexer for either writing or reading an index. You must make this call before using any of the other methods of the <strong>{{IMFASFIndexer}}</strong> interface.</p> + <p>The indexer needs to examine the data in the ContentInfo object to properly write or read the index for the content. The indexer will not make changes to the content information and will not hold any references to the <strong>{{IMFASFContentInfo}}</strong> interface.</p><p>In the {{ASF}} header, the maximum data-packet size must equal the minimum data-packet size. Otherwise, the method returns <strong>{{MF_E_UNEXPECTED}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_INVALIDDATA}}</strong></dt> </dl> </td><td> <p>Invalid {{ASF}} data.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>Unexpected error.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the offset of the index object from the start of the content.</p> + <p>The index continues from the offset retrieved by this method to the end of the file.</p><p>You must call <strong>{{IMFASFIndexer::Initialize}}</strong> to set up the indexer before calling this method.</p><p>If the index is retrieved by using more than one call to <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong>, the position of individual index portions is equal to the index offset plus the offset of the portion within the index.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pIContentInfo</em> is <strong>{{NULL}}</strong> or <em>pcbIndexOffset</em> is <strong>{{NULL}}</strong></p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + <dd> <p>Receives the offset of the index relative to the beginning of the content described by the ContentInfo object. This is the position relative to the beginning of the {{ASF}} file.</p> </dd> + + + + + <p> </p><p>Adds byte streams to be indexed.</p> + <p>For a reading scenario, only one byte stream should be used by the indexer object. For an index generating scenario, it depends how many index objects are needed to be generated. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ALREADY_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer object has already been initialized and it has packets which have been indexed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An array of <strong>{{IMFByteStream}}</strong> interface references. To get the byte stream, call <strong>{{MFCreateASFIndexerByteStream}}</strong>.</p> </dd> + + + <dd> <p>The number of references in the <em>ppIByteStreams</em> array.</p> </dd> + + + + + <p> </p><p>Retrieves the number of byte streams that are in use by the indexer object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pcByteStreams</em> is <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of byte streams that are in use by the indexer object.</p> </dd> + + + + + <p> </p><p>Retrieves the index settings for a specified stream and index type.</p> + <p>To read an existing {{ASF}} index, call <strong>{{IMFASFIndexer::SetIndexByteStreams}}</strong> before calling this method.</p><p>If an index exists for the stream and the value passed into <em>pcbIndexDescriptor</em> is smaller than the required size of the <em>pbIndexDescriptor</em> buffer, the method returns {{MF_E_BUFFERTOOSMALL}}. The required buffer size is returned in the <em>pcbIndexDescriptor</em> parameter.</p><p>If there is no index for the specified stream, the method returns <strong>{{FALSE}}</strong> in the <em>pfIsIndexed</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer size specified in <em>pcbIndexDescriptor</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that contains the stream number and index type for which to get the status.</p> </dd> + + + <dd> <p>A variable that retrieves a Boolean value specifying whether the index described by <em>pIndexIdentifier</em> has been created.</p> </dd> + + + <dd> <p>A buffer that receives the index descriptor. The index descriptor consists of an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>On input, specifies the size, in bytes, of the buffer that <em>pbIndexDescriptor</em> points to. The value can be zero if <em>pbIndexDescriptor</em> is <strong>{{NULL}}</strong>. On output, receives the size of the index descriptor, in bytes.</p> </dd> + + + + + <p> </p><p>Configures the index for a stream.</p> + <p>You must make all calls to <strong>SetIndexStatus</strong> before making any calls to <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong>.</p><p>The indexer object is configured to create temporal indexes for each stream by default. Call this method only if you want to override the default settings.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>At attempt was made to change the index status in a seek-only scenario. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The index descriptor to set. The index descriptor is an <strong>{{ASF_INDEX_DESCRIPTOR}}</strong> structure, optionally followed by index-specific data.</p> </dd> + + + <dd> <p>The size, in bytes, of the index descriptor.</p> </dd> + + + <dd> <p>A Boolean value. Set to <strong>{{TRUE}}</strong> to have the indexer create an index of the type specified for the stream specified in the index descriptor.</p> </dd> + + + + + <p> Given a desired seek time, gets the offset from which the client should start reading data. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The requested seek time is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_INDEX}}</strong></dt> </dl> </td><td> <p> No index exists of the specified type for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The value of the index entry for which to get the position. The format of this value varies depending on the type of index, which is specified in the index identifier. For time-based indexing, the variant type is <strong>{{VT_I8}}</strong> and the value is the desired seek time, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{ASF_INDEX_IDENTIFIER}}</strong> structure that identifies the stream number and index type. </p> </dd> + + + <dd> <p> Receives the offset within the data segment of the {{ASF}} Data Object. The offset is in bytes, and is relative to the start of packet 0. The offset gives the starting location from which the client should begin reading from the stream. This location might not correspond exactly to the requested seek time. </p> <p> For reverse playback, if no key frame exists after the desired seek position, this parameter receives the value <strong>{{MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT}}</strong>. In that case, the seek position should be 1 byte pass the end of the data segment. </p> </dd> + + + <dd> <p> Receives the approximate time stamp of the data that is located at the offset returned in the <em>pcbOffsetWithinData</em> parameter. The accuracy of this value is equal to the indexing interval of the {{ASF}} index, typically about 1 second. </p> <ul> <li> If the index type specified in <em>pIndexIdentifier</em> is <strong>{{GUID_NULL}}</strong> (time indexing), this parameter can be <strong>{{NULL}}</strong>. </li> <li> For all other index types, this parameter must be <strong>{{NULL}}</strong>. </li> </ul> <p> If the approximate time stamp cannot be determined, this parameter receives the value <strong>{{MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN}}</strong>. </p> </dd> + + + <dd> <p> Receives the payload number of the payload that contains the information for the specified stream. Packets can contain multiple payloads, each containing data for a different stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Accepts an {{ASF}} packet for the file and creates index entries for them.</p> + <p>The {{ASF}} indexer creates indexes for a file internally. You can get the completed index for all data packets sent to the indexer by committing the index with <strong>{{IMFASFIndexer::CommitIndex}}</strong> and then calling <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the index entries into a media buffer. To determine the size of the index so you can allocate a buffer large enough to hold the index, call <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>.</p><p> When this method creates index entries, they are immediately available for use by <strong>{{IMFASFIndexer::GetSeekPositionForValue}}</strong>. </p><p> The media sample specified in <em>pIASFPacketSample</em> must hold a buffer that contains a single {{ASF}} packet. Get the sample from the {{ASF}} multiplexer by calling the <strong>{{IMFASFMultiplexer::GetNextPacket}}</strong> method. </p><p>You cannot use this method while reading an index, only when writing an index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The argument passed in is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The indexer is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of a media sample that contains the {{ASF}} packet. </p> </dd> + + + + + <p> </p><p>Adds information about a new index to the ContentInfo object associated with {{ASF}} content. You must call this method before copying the index to the content so that the index will be readable by the indexer later.</p> + <p>For the index to function properly, you must call this method after all {{ASF}} packets in the file have been passed to the indexer by using the <strong>{{IMFASFIndexer::GenerateIndexEntries}}</strong> method. After you call this method, you must retrieve the indexes by calling <strong>GetCompletedIndex</strong> and write them to the appropriate location in the file. Finally, you must generate a new {{ASF}} header by calling the <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> method of the {{ASF}} ContentInfo object.</p><p> An application must use the <strong>CommitIndex</strong> method only when writing a new index otherwise <strong>CommitIndex</strong> may return {{MF_E_INVALIDREQUEST}} as a result. For example, {{MF_E_INVALIDREQUEST}} is returned if the application has flags other than {{MFASF_INDEXER_WRITE_NEW_INDEX}} set on the indexer object. <strong>CommitIndex</strong> can also return {{MFASF_INDEXER_WRITE_NEW_INDEX}} if the index entries have already been committed through an earlier <strong>CommitIndex</strong> call.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The caller made an invalid request. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFContentInfo}}</strong> interface of the ContentInfo object that describes the content.</p> </dd> + + + + + <p> </p><p>Retrieves the size, in bytes, of the buffer required to store the completed index.</p> + <p>Use this method to get the size of the index and then allocate a buffer big enough to hold it. </p><p>The index must be committed with a call to<strong>{{IMFASFIndexer::CommitIndex}}</strong> before calling <strong>{{IMFASFIndexer::GetIndexWriteSpace}}</strong>. If the index is not committed before <strong>GetIndexWriteSpace</strong> is called, then {{MF_E_INDEX_NOT_COMMITTED}} will be returned as a result. </p><p>Call <strong>{{IMFASFIndexer::GetCompletedIndex}}</strong> to write the completed index into a media buffer.</p><p>You cannot use this method in a reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index has not been committed. For more information; see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the size of the index, in bytes</p> </dd> + + + + + <p> </p><p>Retrieves the completed index from the {{ASF}} indexer object.</p> + <p>This method uses as much of the buffer as possible, and updates the length of the buffer appropriately.</p><p>If <em>pIIndexBuffer</em> is large enough to contain the entire buffer, <em>cbOffsetWithinIndex</em> should be 0, and the call needs to be made only once. Otherwise, there should be no gaps between successive buffers.</p><p>The user must write this data to the content at <em>cbOffsetFromIndexStart</em> bytes after the end of the {{ASF}} data object. You can call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong> to determine the start position of the {{ASF}} index.</p><p>This call will not succeed unless <strong>{{IMFASFIndexer::CommitIndex}}</strong> has been called. After calling <strong>GetCompletedIndex</strong>, the caller must call <strong>{{IMFASFContentInfo::GenerateHeader}}</strong> and overwrite the existing {{ASF}} header with the new header; otherwise, the {{ASF}} header will not match the content, and the file is not guaranteed to play correctly.</p><p>You cannot use this method in an index reading scenario. You can only use this method when writing indexes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INDEX_NOT_COMMITTED}}</strong></dt> </dl> </td><td> <p>The index was not committed before attempting to get the completed index. For more information, see Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of a media buffer that receives the index data.</p> </dd> + + + <dd> <p>The offset of the data to be retrieved, in bytes from the start of the index data. Set to 0 for the first call. If subsequent calls are needed (the buffer is not large enough to hold the entire index), set to the byte following the last one retrieved.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams that are in the Advanced Systems Format ({{ASF}}) content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of streams in the content.</p> </dd> + + + + + <p> </p><p>Retrieves the number of outputs for the Advanced Systems Format ({{ASF}}) content.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of outputs.</p> </dd> + + + + + <p> </p><p>Retrieves the number of streams associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve the stream count.</p> </dd> + + + <dd> <p>Receives the number of streams associated with the output.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers for all of the streams that are associated with an output.</p> + <p>An output is a stream in an {{ASF}} data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid output number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to retrieve stream numbers.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers associated with the output. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetOutputStreamCount}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the output number associated with a stream.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number for which to retrieve an output number.</p> </dd> + + + <dd> <p>Receives the output number.</p> </dd> + + + + + <p> </p><p>Retrieves the manual output override selection that is set for a stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream number for which to retrieve the output override selection.</p> </dd> + + + <dd> <p>Receives the output override selection. The value is a member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the selection status of an output, overriding other selection criteria.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to set selection.</p> </dd> + + + <dd> <p>Member of the <strong>{{ASF_SELECTION_STATUS}}</strong> enumeration specifying the level of selection for the output.</p> </dd> + + + + + <p> </p><p>Retrieves the number of mutual exclusion objects associated with an output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve the count of mutually exclusive relationships.</p> </dd> + + + <dd> <p>Receives the number of mutual exclusions.</p> </dd> + + + + + <p> </p><p>Retrieves a mutual exclusion object for an output.</p> + <p>Outputs are streams in the {{ASF}} data section that will be parsed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Output number for which to retrieve a mutual exclusion object.</p> </dd> + + + <dd> <p>Mutual exclusion number. This is an index of mutually exclusive relationships associated with the output. Set to a number between 0, and 1 less than the number of mutual exclusion objects retrieved by calling <strong>{{IMFASFStreamSelector::GetOutputMutexCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the mutual exclusion object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a mutual exclusion record to use for a mutual exclusion object associated with an output.</p> + <p>An output is a stream in an Advanced Systems Format ({{ASF}}) data section that will be parsed. If mutual exclusion is used, mutually exclusive streams share the same output.</p><p>An {{ASF}} file can contain multiple mutually exclusive relationships, such as a file with both language based and bit-rate based mutual exclusion. If an output is involved in multiple mutually exclusive relationships, a record from each must be selected.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The output number for which to set a stream.</p> </dd> + + + <dd> <p>Index of the mutual exclusion for which to select.</p> </dd> + + + <dd> <p>Record of the specified mutual exclusion to select.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bandwidth steps that exist for the content. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for multiple bit rate ({{MBR}}) content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bandwidth steps.</p> </dd> + + + + + <p> </p><p>Retrieves the stream numbers that apply to a bandwidth step. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>Bandwidth steps are bandwidth levels used for {{MBR}} content. If you stream {{MBR}} content, you can choose the bandwidth step that matches the network conditions to avoid interruptions during playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bandwidth step number for which to retrieve information. Set this value to a number between 0, and 1 less than the number of bandwidth steps returned by <strong>{{IMFASFStreamSelector::GetBandwidthStepCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the bit rate associated with the bandwidth step.</p> </dd> + + + <dd> <p>Address of an array that receives the stream numbers. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + <dd> <p>Address of an array that receives the selection status of each stream, as an <strong>{{ASF_SELECTION_STATUS}}</strong> value. The members of this array correspond to the members of the <em>rgwStreamNumbers</em> array by index. The caller allocates the array. The array size must be at least as large as the value returned by the <strong>{{IMFASFStreamSelector::GetStreamCount}}</strong> method. +</p> </dd> + + + + + <p> </p><p>Retrieves the index of a bandwidth step that is appropriate for a specified bit rate. This method is used for multiple bit rate ({{MBR}}) content.</p> + <p>In a streaming multiple bit rate ({{MBR}}) scenario, call this method with the current data rate of the network connection to determine the correct step to use. You can also call this method periodically throughout streaming to ensure that the best step is used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The bit rate to find a bandwidth step for.</p> </dd> + + + <dd> <p>Receives the step number. Use this number to retrieve information about the step by calling <strong>{{IMFASFStreamSelector::GetBandwidthStep}}</strong>.</p> </dd> + + + + + <p> </p><p>Sets options for the stream selector.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more members of the <strong>{{MFASF_STREAMSELECTOR_FLAGS}}</strong> enumeration specifying the options to use.</p> </dd> + + + + + <p>Configures Windows Media Digital Rights Management ({{DRM}}) for Network Devices on a network sink.</p><p> The Advanced Systems Format ({{ASF}}) streaming media sink exposes this interface. To get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface, perform the following tasks.</p><ol> <li>Get the activation object for the {{ASF}} streaming media sink by calling <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>.</li> <li>Create the media sink by calling the activation object <strong>ActivateObject</strong> method.</li> <li>Get an <strong>{{IMFDRMNetHelper}}</strong> reference by calling <strong>QueryInterface</strong> on the media sink.</li> </ol><p>For more information, see Remarks.</p> + <p>To stream protected content over a network, the <em>{{ASF}} streaming media sink</em> provides an output trust authority ({{OTA}}) that supports Windows Media {{DRM}} for Network Devices and implements the <strong>{{IMFDRMNetHelper}}</strong> interface. For this {{OTA}}, encryption occurs on each frame before multiplexing. The license request and response process takes place in the media sink.</p><p>The application gets a reference to <strong>{{IMFDRMNetHelper}}</strong> and uses the methods to handle the license request and response. The application is also responsible for sending the license to the client.</p><p>To stream the content, the application does the following:</p><ol> <li>Provide the {{HTTP}} byte stream to which the media sink writes the streamed content. <p>To stream {{DRM}}-protected content over a network from a server to a client, an application must use the Microsoft Media Foundation Protected Media Path ({{PMP}}). The media sink and the application-provided {{HTTP}} byte stream exist in mfpmp.exe. Therefore, the byte stream must expose the <strong>{{IMFActivate}}</strong> interface so that it can be created out-of-process.</p><strong>Note</strong>??This might affect how the code is packaged. The {{DLL}} that contains the {{HTTP}} byte stream and other dependent {{DLLs}} must be signed for the Protected Environment ({{PE}}-signed). ? </li> <li>Set the <strong>{{MFPKEY_ASFMEDIASINK_DRMACTION}}</strong> property to <strong>{{MFSINK_WMDRMACTION_TRANSCRYPT}}</strong>. The media sink's property store is available to the application through the {{ASF}} ContentInfo. To get the property store, call <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>.</li> <li>Get a reference to the <strong>{{IMFDRMNetHelper}}</strong> interface by querying the media sink.</li> <li>To make a license request, call <strong>{{IMFDRMNetHelper::ProcessLicenseRequest}}</strong>. This method calls into the {{OTA}} implementation and retrieves the license.<p>When the clock starts for the first time or restarts , the encrypter that is used for encrypting samples is retrieved, and the license response is cached.</p> </li> <li>To get the cached license response, call <strong>{{IMFDRMNetHelper::GetChainedLicenseResponse}}</strong>.</li> </ol> + + + + <p>Gets the license response for the specified request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. +</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte array that contains the license request.</p> </dd> + + + <dd> <p>Size, in bytes, of the license request.</p> </dd> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + <dd> <p>Receives the key identifier. The caller must release the string by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Not implemented in this release.</p> + <p>The method returns <strong>{{E_NOTIMPL}}</strong>.</p> + + + <dd> <p>Receives a reference to a byte array that contains the license response. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size, in bytes, of the license response.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Header Object object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an {{ASF}} profile object from a presentation descriptor.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor that contains the profile information.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFProfile}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor from an {{ASF}} profile object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface of the {{ASF}} profile object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Splitter.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates the {{ASF}} Multiplexer.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFMultiplexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} Indexer object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFIndexer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a byte stream to access the index in an {{ASF}} stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table:</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The call succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The offset specified in <em>cbIndexStartOffset</em> is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream that contains the {{ASF}} stream.</p> </dd> + + + <dd> <p>Byte offset of the index within the {{ASF}} stream. To get this value, call <strong>{{IMFASFIndexer::GetIndexPosition}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. Use this interface to read from the index or write to the index. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} stream selector.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFASFProfile}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFASFStreamSelector}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a byte stream that will be used to write the {{ASF}} stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an activation object that can be used to create the {{ASF}} media sink.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string that contains the output file name.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFASFContentInfo}}</strong> interface of an initialized {{ASF}} Header Object object. Use this interface to configure the {{ASF}} media sink.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Video ({{WMV}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p> Creates an activation object that can be used to create a Windows Media Audio ({{WMA}}) encoder. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the encoded output format.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains encoding parameters. Encoding parameters for the {{WMV}} encoder are defined in the header file wmcodecdsp.h. If you have an {{ASF}} ContentInfo object that contains an {{ASF}} profile object with all the streams for the output file, you can get the property store by calling <strong>{{IMFASFContentInfo::GetEncodingConfigurationPropertyStore}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the encoder. The caller must release the interface. </p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. </p> + <p>To create the {{ASF}} streaming sink in another process, call <strong>{{MFCreateASFStreamingMediaSinkActivate}}</strong>. </p><p>An application can get a reference to the {{ASF}} ContentInfo Object by calling <strong>{{IUnknown::QueryInterface}}</strong> on the media sink object received in the <em>ppIMediaSink</em> parameter. The ContentInfo object is used to set the encoder configuration settings, provide stream properties supplied by an {{ASF}} profile, and add metadata information. These configuration settings populate the various {{ASF}} header objects of the encoded {{ASF}} file. For more information, see +Setting Properties in the ContentInfo Object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a byte stream object in which the {{ASF}} media sink writes the streamed content.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{ASF}} streaming-media sink object. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> on the received reference. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates an activation object for the {{ASF}} streaming sink.</p><p>The {{ASF}} streaming sink enables an application to write streaming Advanced Systems Format ({{ASF}}) packets to an {{HTTP}} byte stream. The activation object can be used to create the {{ASF}} streaming sink in another process.</p> + <p>Starting in Windows?7, Media Foundation provides an {{ASF}} streaming sink that writes the content in a live streaming scenario. This function should be used in secure transcode scenarios where this media sink needs to be created and configured in the remote +process. Like the {{ASF}} file sink, the new media sink performs {{ASF}} related tasks such as writing the {{ASF}} header, generating data packets (muxing). The content is written to a caller-implemented byte stream such as an {{HTTP}} byte stream. +The caller must also provide an activation object that media sink can use to create the byte stream remotely. </p><p>In addition, it performs transcryption for streaming protected content. It hosts the Windows Media Digital Rights Management ({{DRM}}) for Network Devices Output Trust Authority ({{OTA}}) that handles the license request and response. For more information, see <strong>{{IMFDRMNetHelper}}</strong> interface.</p><p>The new media sink does not perform any time adjustments. If the clock seeks, the timestamps are not changed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream object. The byte stream exposes the <strong>{{IMFByteStream}}</strong> interface. The {{ASF}} streaming sink will write data to this byte stream.</p> </dd> + + + <dd> <p>A reference to an {{ASF}} ContentInfo Object that contains the properties that describe the {{ASF}} content. These settings can contain stream settings, encoding properties, and metadata. For more information about these properties, see Setting Properties in the ContentInfo Object.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface of the activation object that is used to create the {{ASF}} streaming-media sink. To create the media sink, the application must call <strong>{{IMFActivate::ActivateObject}}</strong> by using the received reference. The <strong>ActivateObject</strong> method also calls <strong>{{IMFActivate::Activate}}</strong> on the byte stream activate object specified by <em>pByteStreamActivate</em>, to create it so that the media sink can write streamed content in the byte stream. The caller must release the <strong>{{IMFActivate}}</strong> interface reference of the media sink activation object received in <em>ppIActivate</em>.</p> </dd> + + + + + <p>Specifies the type of work queue for the <strong>{{MFAllocateWorkQueueEx}}</strong> function to create.</p> + + + + <p> Specifies the status of a topology during playback. </p> + <p> This enumeration is used with the {{MESessionTopologyStatus}} event. The {{MESessionTopologyStatus}} event always has an <strong>{{MF_EVENT_TOPOLOGY_STATUS}}</strong> attribute whose value is a member of this enumeration. </p><p> For a single topology, the Media Session sends these status flags in numerical order, starting with <strong>{{MF_TOPOSTATUS_READY}}</strong>. However, there is no guarantee about the ordering of the events across two different topologies. For example, you might get <strong>{{MF_TOPOSTATUS_READY}}</strong> for a topology before you get <strong>{{MF_TOPOSTATUS_ENDED}}</strong> for the previous topology. </p> + + + <dd> <p> This value is not used. </p> </dd> + + + <dd> <p> The topology is ready to start. After this status flag is received, you can use the Media Session's <strong>{{IMFGetService::GetService}}</strong> method to query the topology for services, such as rate control. </p> </dd> + + + <dd> <p> The Media Session has started to read data from the media sources in the topology. </p> </dd> + + + <dd> <p>The Media Session modified the topology, because the format of a stream changed.</p> </dd> + + + <dd> <p> The media sinks have switched from the previous topology to this topology. This status value is not sent for the first topology that is played. For the first topology, the {{MESessionStarted}} event indicates that the media sinks have started receiving data. </p> </dd> + + + <dd> <p> Playback of this topology is complete. The Media Session might still use the topology internally. The Media Session does not completely release the topology until it sends the next <strong>{{MF_TOPOSTATUS_STARTED_SOURCE}}</strong> status event or the {{MESessionEnded}} event. </p> </dd> + + + + + <p>Contains flags for registering and enumeration Media Foundation transforms ({{MFTs}}).</p><p>These flags are used in the following functions:</p><ul> <li> <strong>{{MFTEnumEx}}</strong>: These flags control which Media Foundation transforms ({{MFTs}}) are enumerated, as well as the enumeration order.</li> <li> <strong>{{MFTRegister}}</strong>: A subset of these flags are used when registering an {{MFT}}.</li> </ul> + <p>For registration, these flags describe the {{MFT}} that is being registered. Some flags do not apply in that context. For enumeration, these flags control which {{MFTs}} are selected in the enumeration. For more details about the precise meaning of these flags, see the reference topics for <strong>{{MFTRegister}}</strong> and <strong>{{MFTEnumEx}}</strong> </p><p>For registration, the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>, <strong>{{MFT_ENUM_FLAG_ASYNCMFT}}</strong>, and <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flags are mutually exclusive. For enumeration, these three flags can be combined.</p> + + + + <p>Describes the type of data provided by a frame source.</p> + <p>The values of this enumeration are used with the {{MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPES}} attribute.</p> + + + <dd> <p>The frame source provides color data.</p> </dd> + + + <dd> <p>The frame source provides infrared data.</p> </dd> + + + <dd> <p>The frame source provides depth data.</p> </dd> + + + <dd> <p>The frame source provides custom data.</p> </dd> + + + + + <p>Specifies how 3D video frames are stored in memory.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_3D_FORMAT}} attribute.</p> + + + <dd> <p>The base view is stored in a single buffer. The other view is discarded.</p> </dd> + + + <dd> <p>Each media sample contains multiple buffers, one for each view.</p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed side-by-side into a single frame. </p> </dd> + + + <dd> <p>Each media sample contains one buffer, with both views packed top-and-bottom into a single frame. </p> </dd> + + + + + <p>Specifies how a 3D video frame is stored in a media sample.</p> + <p>This enumeration is used with the {{MFSampleExtension_3DVideo_SampleFormat}} attribute.</p><p>The exact layout of the views in memory is specified by the following media type attributes:</p><ul> <li> {{MF_MT_VIDEO_3D_FORMAT}} </li> <li> {{MF_MT_VIDEO_3D_FIRST_IS_LEFT}} </li> <li> {{MF_MT_VIDEO_3D_LEFT_IS_BASE}} </li> <li> {{MF_MT_VIDEO_3D_NUM_VIEWS}} </li> </ul> + + + <dd> <p>Each view is stored in a separate buffer. The sample contains one buffer per view.</p> </dd> + + + <dd> <p>All of the views are stored in the same buffer. The sample contains a single buffer. </p> </dd> + + + + + <p>Describes the rotation of the video image in the counter-clockwise direction.</p> + <p>This enumeration is used with the {{MF_MT_VIDEO_ROTATION}} attribute.</p> + + + <dd> <p>The image is not rotated.</p> </dd> + + + <dd> <p>The image is rotated 90 degrees counter-clockwise.</p> </dd> + + + <dd> <p>The image is rotated 180 degrees.</p> </dd> + + + <dd> <p>The image is rotated 270 degrees counter-clockwise.</p> </dd> + + + + + + + + <p>Specifies the type of copy protection required for a video stream. </p> + <p>Use these flags with the <strong>{{MF_MT_DRM_FLAGS}}</strong> attribute.</p> + + + <dd> <p>No copy protection is required. </p> </dd> + + + <dd> <p>Analog copy protection should be applied. </p> </dd> + + + <dd> <p>Digital copy protection should be applied. </p> </dd> + + + + + <p> </p><p>Specifies whether to pad a video image so that it fits within a specified aspect ratio.</p> + <p>Use these flags with the <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> attribute.</p> + + + <dd> <p>Do not pad the image.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 4?3 area.</p> </dd> + + + <dd> <p>Pad the image so that it can be displayed in a 16?9 area.</p> </dd> + + + + + <p> </p><p>Describes the intended aspect ratio for a video stream.</p> + <p>Use these flags with the <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> attribute.</p> + + + <dd> <p>The aspect ratio is unknown.</p> </dd> + + + <dd> <p>The source is 16?9 content encoded within a 4?3 area.</p> </dd> + + + <dd> <p>The source is 2.35:1 content encoded within a 16?9 or 4?3 area.</p> </dd> + + + + + <p> </p><p>Contains flags that specify how to convert an audio media type.</p> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEX}}</strong> structure if possible, or a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure otherwise.</p> </dd> + + + <dd> <p>Convert the media type to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> </dd> + + + + + + + + <p>Provides information on a screen-to-screen move and a dirty rectangle copy operation.</p> + + + <dd> <p>A <strong>{{POINT}}</strong> structure that describes the source (<em>x, y</em>) point where the source rectangle is copied from.</p> </dd> + + + <dd> <p>A <strong>{{RECT}}</strong> structure that contains the destination rectangle where the dirty rectangle is copied to.</p> </dd> + + + + + + + + + + + <p>Defines a regions of interest. </p> + + + <dd> <p>The bounds of the region.</p> </dd> + + + <dd> <p>Specifies the quantization parameter delta for the specified region from the rest of the frame.</p> </dd> + + + + + <p>The <strong>FaceRectInfoBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceRectInfo</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceRectInfo</strong> structures in the blob.</p> </dd> + + + + + <p>The <strong>FaceRectInfo</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute contains the face rectangle info detected by the driver. By default driver\{{MFT0}} should provide the face information on preview stream. If the driver advertises the capability on other streams, driver\{{MFT}} must provide the face info on the corresponding streams if the application enables face detection on those streams. When video stabilization is enabled on the driver, the face information should be provided post-video stabilization. The dominate face must be the first <strong>FaceRectInfo</strong> in the blob.</p><p>The <strong>FaceRectInfoBlobHeader</strong> and <strong>FaceRectInfo</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong> attribute. The metadata item structure for face {{ROIs}} (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face {{ROIs}} metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Relative coordinates on the frame that face detection is running ({{Q31}} format).</p> </dd> + + + <dd> <p>Confidence level of the region being a face (0 - 100).</p> </dd> + + + + + <p>The <strong>FaceCharacterizationBlobHeader</strong> structure describes the size and count information of the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + + + <dd> <p>Size of this header + all following <strong>FaceCharacterization</strong> structures.</p> </dd> + + + <dd> <p>Number of <strong>FaceCharacterization</strong> structures in the blob. Must match the number of <strong>FaceRectInfo</strong> structures in <strong>FaceRectInfoBlobHeader</strong>.</p> </dd> + + + + + <p>The <strong>FaceCharacterization</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute contains the blink and facial expression state for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that does not support blink or facial expression detection, this attribute should be omitted.</p><p>The facial expressions that can be detected are defined as follows:</p><pre>#define {{MF_METADATAFACIALEXPRESSION_SMILE}} 0x00000001</pre><p>The <strong>FaceCharacterizationBlobHeader</strong> and <strong>FaceCharacterization</strong> structures only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS}}</strong> attribute. The metadata item structure for the face characterizations (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + face characterizations metadata payload) is up to driver and must be 8-byte aligned. </p> + + + <dd> <p>0 indicates no blink for the left eye, 100 indicates definite blink for the left eye (0 - 100).</p> </dd> + + + <dd> <p>0 indicates no blink for the right eye, 100 indicates definite blink for the right eye (0 - 100).</p> </dd> + + + <dd> <p>A defined facial expression value.</p> </dd> + + + <dd> <p>0 indicates no such facial expression as identified, 100 indicates definite such facial expression as defined (0 - 100).</p> </dd> + + + + + <p>This structure contains blob information for the {{EV}} compensation feedback for the photo captured.</p> + + + <dd> <p>A {{KSCAMERA_EXTENDEDPROP_EVCOMP_XXX}} step flag.</p> </dd> + + + <dd> <p>The {{EV}} compensation value in units of the step specified.</p> </dd> + + + + + <p>The CapturedMetadataISOGains structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong>.</p> + <p>The <strong>CapturedMetadataISOGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_ISO_GAINS}}</strong> attribute. The metadata item structure for {{ISO}} gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + {{ISO}} gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>This structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. </p> + <p>The <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute contains the white balance gains applied to R, G, B by the sensor or {{ISP}} when the preview frame was captured. This is a unitless.</p><p>The <strong>CapturedMetadataWhiteBalanceGains</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_WHITEBALANCE_GAINS}}</strong> attribute. The metadata item structure for white balance gains (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + white balance gains metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>The <strong>R</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>G</strong> value of the blob.</p> </dd> + + + <dd> <p>The <strong>B</strong> value of the blob.</p> </dd> + + + + + <p>The <strong>MetadataTimeStamps</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute contains the time stamp information for the face {{ROIs}} identified in <strong>{{MF_CAPTURE_METADATA_FACEROIS}}</strong>. For a device that cannot provide the time stamp for face {{ROIs}}, this attribute should be omitted.</p><p>For the <strong>Flags</strong> field, the following bit flags indicate which time stamp is valid:</p><pre>#define {{MF_METADATATIMESTAMPS_DEVICE}} 0x00000001 +#define {{MF_METADATATIMESTAMPS_PRESENTATION}} 0x00000002</pre><p>{{MFT0}} must set <strong>Flags</strong> to <strong>{{MF_METADATATIEMSTAMPS_DEVICE}}</strong> and the appropriate {{QPC}} time for <strong>Device</strong>, if the driver provides the timestamp metadata for the face {{ROIs}}.</p><p>The <strong>MetadataTimeStamps</strong> structure only describes the blob format for the <strong>{{MF_CAPTURE_METADATA_FACEROITIMESTAMPS}}</strong> attribute. The metadata item structure for timestamp (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + timestamp metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Bitwise {{OR}} of the <strong>{{MF_METADATATIMESTAMPS_}}*</strong> flags.</p> </dd> + + + <dd> <p>{{QPC}} time for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + <dd> <p>{{PTS}} for the sample the face rectangle is derived from (in 100ns).</p> </dd> + + + + + <p>The <strong>HistogramGrid</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + + + <dd> <p>Width of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Height of the sensor output that histogram is collected from.</p> </dd> + + + <dd> <p>Absolute coordinates of the region on the sensor output that the histogram is collected for.</p> </dd> + + + + + <p>The <strong>HistogramBlobHeader</strong> structure describes the blob size and the number of histograms in the blob for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute.</p> + + + <dd> <p>Size of the entire histogram blob in bytes.</p> </dd> + + + <dd> <p>Number of histograms in the blob. Each histogram is identified by a <strong>HistogramHeader</strong>.</p> </dd> + + + + + <p>The <strong>HistogramHeader</strong> structure describes the blob format for <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong>.</p> + <p>The <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute contains a histogram when a preview frame is captured.</p><p>For the <strong>ChannelMasks</strong> field, the following bitmasks indicate the available channels in the histogram:</p><pre>#define {{MF_HISTOGRAM_CHANNEL_Y}} 0x00000001 +#define {{MF_HISTOGRAM_CHANNEL_R}} 0x00000002 +#define {{MF_HISTOGRAM_CHANNEL_G}} 0x00000004 +#define {{MF_HISTOGRAM_CHANNEL_B}} 0x00000008 +#define {{MF_HISTOGRAM_CHANNEL_Cb}} 0x00000010 +#define {{MF_HISTOGRAM_CHANNEL_Cr}} 0x00000020</pre><p>Each blob can contain multiple histograms collected from different regions or different color spaces of the same frame. Each histogram in the blob is identified by its own <strong>HistogramHeader</strong>. Each histogram has its own region and sensor output size associated. For full frame histogram, the region will match the sensor output size specified in <strong>HistogramGrid</strong>.</p><p>Histogram data for all available channels are grouped under one histogram. Histogram data for each channel is identified by a <strong>HistogramDataHeader</strong> immediate above the data. <strong>ChannelMasks</strong> indicate how many and what channels are having the histogram data, which is the bitwise {{OR}} of the supported <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks as defined above. <strong>ChannelMask</strong> indicates what channel the data is for, which is identified by any one of the <strong>{{MF_HISTOGRAM_CHANNEL_}}*</strong> bitmasks.</p><p>Histogram data is an array of <strong>{{ULONG}}</strong> with each entry representing the number of pixels falling under a set of tonal values as categorized by the bin. The data in the array should start from bin 0 to bin N-1, where N is the number of bins in the histogram, for example, <strong>HistogramBlobHeader.Bins</strong>.</p><p>For Windows?10, if <strong>{{KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM}}</strong> is supported, at minimum a full frame histogram with Y channel must be provided which should be the first histogram in the histogram blob. +Note that <strong>HistogramBlobHeader</strong>, <strong>HistogramHeader</strong>, <strong>HistogramDataHeader</strong> and Histogram data only describe the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. The metadata item structure for the histogram (<strong>{{KSCAMERA_METADATA_ITEMHEADER}}</strong> + all histogram metadata payload) is up to driver and must be 8-byte aligned.</p> + + + <dd> <p>Size of this header + (<strong>HistogramDataHeader</strong> + histogram data following) * number of channels available.</p> </dd> + + + <dd> <p>Number of bins in the histogram.</p> </dd> + + + <dd> <p>Color space that the histogram is collected from</p> </dd> + + + <dd> <p>Masks of the color channels that the histogram is collected for.</p> </dd> + + + <dd> <p>Grid that the histogram is collected from.</p> </dd> + + + + + <p>The <strong>HistogramDataHeader</strong> structure describes the blob format for the <strong>{{MF_CAPTURE_METADATA_HISTOGRAM}}</strong> attribute. </p> + + + <dd> <p>Size in bytes of this header + all following histogram data.</p> </dd> + + + <dd> <p>Mask of the color channel for the histogram data.</p> </dd> + + + <dd> <p>1 if linear, 0 if nonlinear.</p> </dd> + + + + + <p> </p><p>Contains coefficients used to transform multichannel audio into a smaller number of audio channels. This process is called <em>fold-down</em>.</p> + <p>To specify this information in the media type, set the <strong>{{MF_MT_AUDIO_FOLDDOWN_MATRIX}}</strong> attribute.</p><p>The {{ASF}} media source supports fold-down from six channels (5.1 audio) to two channels (stereo). It gets the information from the g_wszFold6To2Channels3 attribute in the {{ASF}} header. This attribute is documented in the Windows Media Format {{SDK}} documentation.</p> + + + <dd> <p>Size of the structure, in bytes.</p> </dd> + + + <dd> <p>Number of source channels.</p> </dd> + + + <dd> <p>Number of destination channels.</p> </dd> + + + <dd> <p>Specifies the assignment of audio channels to speaker positions in the transformed audio. This member is a bitwise <strong>{{OR}}</strong> of flags that define the speaker positions. For a list of valid flags, see <strong>{{MF_MT_AUDIO_CHANNEL_MASK}}</strong> attribute.</p> </dd> + + + <dd> <p>Array that contains the fold-down coefficients. The number of coefficients is <strong>cSrcChannels</strong>?<strong>cDstChannels</strong>. If the number of coefficients is less than the size of the array, the remaining elements in the array are ignored. For more information about how the coefficients are applied, see Windows Media Audio Professional Codec Features.</p> </dd> + + + + + <p> </p><p>Defines custom color primaries for a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This structure is used with the <strong>{{MF_MT_CUSTOM_VIDEO_PRIMARIES}}</strong> attribute.</p> + + + <dd> <p>Red x-coordinate.</p> </dd> + + + <dd> <p>Red y-coordinate.</p> </dd> + + + <dd> <p>Green x-coordinate.</p> </dd> + + + <dd> <p>Green y-coordinate.</p> </dd> + + + <dd> <p>Blue x-coordinate.</p> </dd> + + + <dd> <p>Blue y-coordinate.</p> </dd> + + + <dd> <p>White point x-coordinate.</p> </dd> + + + <dd> <p>White point y-coordinate.</p> </dd> + + + + + <p>Contains format data for a binary stream in an Advanced Streaming Format ({{ASF}}) file.</p> + <p>This structure is used with the {{MF_MT_ARBITRARY_HEADER}} media type attribute.</p><p>This structure corresponds to the first 60 bytes of the Type-Specific Data field of the Stream Properties Object, in files where the stream type is {{ASF_Binary_Media}}. For more information, see the {{ASF}} specification.</p><p>The Format Data field of the Type-Specific Data field is contained in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type.</p> + + + <dd> <p>Major media type. This value is the {{GUID}} stored in the Major Media Type field of the Type-Specific Data field of the {{ASF}} file. It might not match the major type {{GUID}} from the Media Foundation media type. </p> </dd> + + + <dd> <p>Media subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples have a fixed size in bytes. Otherwise, samples have variable size.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the data in this stream uses temporal compression. Otherwise, samples are independent of each other.</p> </dd> + + + <dd> <p>If <strong>bFixedSizeSamples</strong> is <strong>{{TRUE}}</strong>, this member specifies the sample size in bytes. Otherwise, the value is ignored and should be 0.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This {{GUID}} identifies the structure of the additional format data, which is stored in the {{MF_MT_ARBITRARY_FORMAT}} attribute of the media type. If no additional format data is present, <strong>formattype</strong> equals {{GUID_NULL}}.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with two components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A vector with three components.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A four dimensional vector, used to represent a rotation.</p> + + + <dd> <p>X component of the vector.</p> </dd> + + + <dd> <p>Y component of the vector.</p> </dd> + + + <dd> <p>Z component of the vector.</p> </dd> + + + <dd> <p>W component of the vector.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A transform describing the location of a camera relative to other cameras or an established external reference.</p> + <p>The <strong>Position</strong> value should be expressed in real-world coordinates in units of meters. The coordinate system of both position and orientation should be right-handed Cartesian as shown in the following diagram. </p><strong>Important</strong>??<p>The position and orientation are expressed as transforms toward the reference frame or origin. For example, a <strong>Position</strong> value of {-5, 0, 0} means that the origin is 5 meters to the left of the sensor, and therefore the sensor is 5 meters to the right of the origin. A sensor that is positioned 2 meters above the origin should specify a <strong>Position</strong> of {0, -2, 0} because that is the translation from the sensor to the origin.</p> <p>If the sensor is aligned with the origin, the rotation is the identity quaternion and the forward vector is along the -Z axis {0, 0, -1}. If the sensor is rotated +30 degrees around the Y axis from the origin, then the <strong>Orientation</strong> value should be a rotation of -30 degrees around the Y axis, because it represents the rotation from the sensor to the origin.</p>? + + + <dd> <p>A reference {{GUID}} identifying the calibration process for the data, allowing different consumers to identify calibration data from the same process.</p> </dd> + + + <dd> <p>The transform position.</p> </dd> + + + <dd> <p>The transform rotation.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Describes the location of a camera relative to other cameras or an established external reference. </p> + + + <dd> <p>The number of transforms in the <em>CalibratedTransforms</em> array.</p> </dd> + + + <dd> <p>The array of transforms in the extrinsic data.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera model. </p> + <p>For square pixels, the X and Y fields of the <strong>FocalLength</strong> should be the same.</p><p>The <strong>PrincipalPoint</strong> field is expressed in pixels, not in normalized coordinates. The origin [0,0] is the bottom, left corner of the image.</p> + + + <dd> <p>The focal length of the camera.</p> </dd> + + + <dd> <p>The principal point of the camera.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a polynomial lens distortion model.</p> + + + <dd> <p>The first radial distortion coefficient.</p> </dd> + + + <dd> <p>The second radial distortion coefficient.</p> </dd> + + + <dd> <p>The third radial distortion coefficient.</p> </dd> + + + <dd> <p>The first tangential distortion coefficient.</p> </dd> + + + <dd> <p>The second tangential distortion coefficient.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a pinhole camera intrinsic model for a specified resolution.</p> + + + <dd> <p>The width for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p>The height for the pinhole camera intrinsic model.</p> </dd> + + + <dd> <p> The pinhole camera model.</p> </dd> + + + <dd> <p> The lens distortion model.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Contains zero or 1 pinhole camera intrinsic models that describe how to project a 3D point in physical world onto the 2D image frame of a camera.</p> + + + <dd> <p>The number of camera intrinsic models in the <em>IntrinsicModels</em> array.</p> </dd> + + + <dd> <p>The array of camera intrinsic models in the intrinsic data.</p> </dd> + + + + + <p> Contains data that is needed to implement the <strong>{{IMFAsyncResult}}</strong> interface. </p> + <p> Any custom implementation of the <strong>{{IMFAsyncResult}}</strong> interface must inherit this structure. For more information, see Custom Asynchronous Result Objects. </p> + + + + <p>Initializes Microsoft Media Foundation.</p> + <p> An application must call this function before using Media Foundation. Before your application quits, call <strong>{{MFShutdown}}</strong> once for every previous call to <strong>{{MFStartup}}</strong>. </p><p> Do not call <strong>{{MFStartup}}</strong> or <strong>{{MFShutdown}}</strong> from work queue threads. For more information about work queues, see Work Queues. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BAD_STARTUP_VERSION}}</strong></dt> </dl> </td><td> <p> The <em>Version</em> parameter requires a newer version of Media Foundation than the version that is running.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DISABLED_IN_SAFEMODE}}</strong></dt> </dl> </td><td> <p> The Media Foundation platform is disabled because the system was started in "Safe Mode" (fail-safe boot). </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Media Foundation is not implemented on the system. This error can occur if the media components are not present (See {{KB2703761}} for more info). </p> </td></tr> </table><p>?</p> + + + <dd> <p>Version number. Use the value <strong>{{MF_VERSION}}</strong>, defined in mfapi.h.</p> </dd> + + + <dd> <p>This parameter is optional when using C++ but required in C. The value must be one of the following flags: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>{{MFSTARTUP_NOSOCKET}}</dt> </dl> </td><td> <p> Do not initialize the sockets library. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_LITE}}</dt> </dl> </td><td> <p> Equivalent to {{MFSTARTUP_NOSOCKET}}. </p> </td></tr> <tr><td> <dl> <dt>{{MFSTARTUP_FULL}}</dt> </dl> </td><td> <p> Initialize the entire Media Foundation platform. This is the default value when <em>dwFlags</em> is not specified. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Shuts down the Microsoft Media Foundation platform. Call this function once for every call to <strong>{{MFStartup}}</strong>. Do not call this function from work queue threads.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Blocks the <strong>{{MFShutdown}}</strong> function.</p> + <p>This function prevents work queue threads from being shut down when <strong>{{MFShutdown}}</strong> is called. Use this function to ensure that asynchronous operations complete gracefully before the platform shuts down.</p><p>This function holds a lock on the Media Foundation platform. To unlock the platform, call <strong>{{MFUnlockPlatform}}</strong>. The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>The <strong>{{MFShutdown}}</strong> function blocks until the platform is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.) To avoid memory leaks, the application should unlock the platform before the wait period ends. For example, cancel any asynchronous operations that are waiting to complete and are holding a lock on the platform.</p><p>The default implementation of the <strong>{{IMFAsyncResult}}</strong> interface automatically locks the Media Foundation platform when the result object is created. Releasing the interface unlocks the platform. Therefore, in most cases your application does not need to lock the platform directly. For more information, see Work Queues.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the Media Foundation platform after it was locked by a call to the <strong>{{MFLockPlatform}}</strong> function.</p> + <p>The application must call <strong>{{MFUnlockPlatform}}</strong> once for every call to <strong>{{MFLockPlatform}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Puts an asynchronous operation on a work queue.</p> + <p> This function creates an asynchronous result object and puts the result object on the work queue. The work queue calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em>. </p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or {{MFAllocateWorkQueueEx}}. </p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Puts an asynchronous operation on a work queue. </p> + <p> To invoke the work-item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>. </p> </dd> + + + + + <p>Puts an asynchronous operation on a work queue, with a specified priority.</p> + <p> To invoke the work item, this function passes <em>pResult</em> to the <strong>{{MFInvokeCallback}}</strong> function. The callback is specified when you create the result object specified by <em>pResult</em>. </p> + <p> Returns an <strong>{{HRESULT}}</strong> value. Possible values include the following.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> Success.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>{{MFStartup}}</strong> function was not called, or <strong>{{MFShutdown}}</strong> was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the work queue. This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong> or <strong>{{MFAllocateWorkQueueEx}}</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p>Queues a work item that waits for an event to be signaled.</p> + <p>This function enables a component to wait for an event without blocking the current thread. </p><p>The function puts a work item on the specified work queue. This work item waits for the event given in <em>hEvent</em> to be signaled. When the event is signaled, the work item invokes a callback. (The callback is contained in the result object given in <em>pResult</em>. For more information, see <strong>{{MFCreateAsyncResult}}</strong>).</p><p>The work item is dispatched on a work queue by the <strong>{{IMFAsyncCallback::GetParameters}}</strong> method of the callback. The work queue can be any of the following:</p><ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>).</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>).</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul><p>Do not use any of the following work queues: <strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION}}</strong>, <strong>{{MFASYNC_CALLBACK_QUEUE_RT}}</strong>, or <strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to an event object. To create an event object, call <strong>CreateEvent</strong> or <strong>CreateEventEx</strong>.</p> </dd> + + + <dd> <p>The priority of the work item. Work items are performed in order of priority.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the wait. To cancel the wait, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Creates a work queue that is guaranteed to serialize work items. The serial work queue wraps an existing multithreaded work queue. The serial work queue enforces a first-in, first-out ({{FIFO}}) execution order.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>Multithreaded queues use a thread pool, which can reduce the total number of threads in the pipeline. However, they do not serialize work items. A serial work queue enables the application to get the benefits of the thread pool, without needing to perform manual serialization of its own work items.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of an existing work queue. This must be either a multithreaded queue or another serial work queue. Any of the following can be used:</p> <ul> <li>The default work queue (<strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>)</li> <li>The platform multithreaded queue (<strong>{{MFASYNC_CALLBACK_QUEUE_MULTITHREADED}}</strong>)</li> <li>A multithreaded queue returned by the <strong>{{MFLockSharedWorkQueue}}</strong> function.</li> <li>A serial queue created by the <strong>{{MFAllocateSerialWorkQueue}}</strong> function.</li> </ul> </dd> + + + <dd> <p>Receives an identifier for the new serial work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>When the timer interval elapses, the timer calls <strong>{{MFInvokeCallback}}</strong> with the <em>pResult</em> reference to invoke the asynchronous callback. The callback is specified when you create the result object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface of an asynchronous result object. To create the result object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> </p><p>Schedules an asynchronous operation to be completed after a specified interval.</p> + <p>This function creates an asynchronous result object. When the timer interval elapses, the <strong>{{IMFAsyncCallback::Invoke}}</strong> method specified by <em>pCallback</em> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Time-out interval, in milliseconds. Set this parameter to a negative value. The callback is invoked after ?<em>Timeout</em> milliseconds. For example, if <em>Timeout</em> is ?5000, the callback is invoked after 5000 milliseconds.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the timer. To cancel the timer, call <strong>{{MFCancelWorkItem}}</strong> and pass this key in the <em>Key</em> parameter.</p> </dd> + + + + + <p> Attempts to cancel an asynchronous operation that was scheduled with <strong>{{MFScheduleWorkItem}}</strong> or <strong>{{MFScheduleWorkItemEx}}</strong>.</p> + <p>Because work items are asynchronous, the work-item callback might still be invoked after <strong>{{MFCancelWorkItem}}</strong> is called.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves the timer interval for the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets a callback function to be called at a fixed interval.</p> + <p>To get the timer interval for the periodic callback, call <strong>{{MFGetTimerPeriodicity}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the callback function, of type <strong>{{MFPERIODICCALLBACK}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a caller-provided object that implements <strong>{{IUnknown}}</strong>, or <strong>{{NULL}}</strong>. This parameter is passed to the callback function.</p> </dd> + + + <dd> <p>Receives a key that can be used to cancel the callback. To cancel the callback, call <strong>{{MFRemovePeriodicCallback}}</strong> and pass this key as the <em>dwKey</em> parameter.</p> </dd> + + + + + <p> </p><p>Cancels a callback function that was set by the <strong>{{MFAddPeriodicCallback}}</strong> function.</p> + <p>The callback is dispatched on another thread, and this function does not attempt to synchronize with the callback thread. Therefore, it is possible for the callback to be invoked after this function returns.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new work queue. This function extends the capabilities of the <strong>{{MFAllocateWorkQueue}}</strong> function by making it possible to create a work queue that has a message loop.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p><p>The <strong>{{MFAllocateWorkQueue}}</strong> function is equivalent to calling <strong>{{MFAllocateWorkQueueEx}}</strong> with the value {{MF_STANDARD_WORKQUEUE}} for the <em>WorkQueueType</em> parameter.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The application exceeded the maximum number of work queues.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p> Creates a new work queue.</p> + <p>When you are done using the work queue, call <strong>{{MFUnlockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> The application exceeded the maximum number of work queues. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The application did not call <strong>{{MFStartup}}</strong>, or the application has already called <strong>{{MFShutdown}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives an identifier for the work queue.</p> </dd> + + + + + <p> Locks a work queue.</p> + <p>This function prevents the <strong>{{MFShutdown}}</strong> function from shutting down the work queue. Use this function to ensure that asynchronous operations on the work queue complete gracefully before the platform shuts down. The <strong>{{MFShutdown}}</strong> function blocks until the work queue is unlocked, or until a fixed wait period has elapsed. (The wait period is a few seconds.)</p><p>Call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue. Each call to <strong>{{MFLockWorkQueue}}</strong> must be matched by a corresponding call to <strong>{{MFUnlockWorkQueue}}</strong>.</p><p> </p><strong>Note</strong>??The <strong>{{MFAllocateWorkQueue}}</strong> function implicitly locks the work queue that it creates.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier for the work queue. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. </p> </dd> + + + + + <p> </p><p>Unlocks a work queue.</p> + <p>The application must call <strong>{{MFUnlockWorkQueue}}</strong> once for every call to <strong>{{MFAllocateWorkQueue}}</strong> and then once for every call to <strong>{{MFLockWorkQueue}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue to be unlocked. The identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task.For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Associates a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function extends the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function by adding the <em>lPriority</em> parameter.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, call <strong>{{MFEndRegisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request. </p><p>To unregister the work queue from the {{MMCSS}} task, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p> The name of the {{MMCSS}} task. For more information, see Multimedia Class Scheduler Service. </p> </dd> + + + <dd> <p>The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>The base relative priority for the work-queue threads. For more information, see <strong>AvSetMmThreadPriority</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This function unregisters a work queue that was associated with an {{MMCSS}} class through the <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong> function.</p><p>This function is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{MFEndUnregisterWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{MFBeginUnregisterWorkQueueWithMMCSS}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class currently associated with this work queue.</p> + <p>If the work queue is not associated with an {{MMCSS}} task, the function retrieves an empty string.</p><p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the task name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier currently associated with this work queue.</p> + <p>To associate a work queue with an {{MMCSS}} task, call <strong>{{MFBeginRegisterWorkQueueWithMMCSS}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the work queue. The identifier is retrieved by the <strong>{{MFAllocateWorkQueue}}</strong> function.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Registers the standard Microsoft Media Foundation platform work queues with the Multimedia Class Scheduler Service ({{MMCSS}}). +</p> + <p>To unregister the platform work queues from the {{MMCSS}} class, call <strong>{{MFUnregisterPlatformFromMMCSS}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}}, or use the value zero to create a new task group. On output, receives the actual task group {{ID}}.</p> </dd> + + + <dd> <p>The base priority of the work-queue threads. </p> </dd> + + + + + <p>Unregisters the Microsoft Media Foundation platform work queues from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Obtains and locks a shared work queue.</p> + <p>A <em>multithreaded work queue</em> uses a thread pool to dispatch work items. Whenever a thread becomes available, it dequeues the next work item from the queue. Work items are dequeued in first-in-first-out order, but work items are not serialized. In other words, the work queue does not wait for a work item to complete before it starts the next work item. </p><p>Within a single process, the Microsoft Media Foundation platform creates up to one multithreaded queue for each Multimedia Class Scheduler Service ({{MMCSS}}) task. The <strong>{{MFLockSharedWorkQueue}}</strong> function checks whether a matching work queue already exists. If not, the function creates a new work queue and registers the work queue with {{MMCSS}}. The function returns the {{MMCSS}} task identifier (<em>pdwTaskId</em>) and the work queue identifier (<em>pID</em>). To queue a work item, pass the work queue identifier to any of the following functions: </p><ul> <li> <strong>{{MFPutWorkItem}}</strong> </li> <li> <strong>{{MFPutWorkItem2}}</strong> </li> <li> <strong>{{MFPutWorkItemEx}}</strong> </li> <li> <strong>{{MFPutWorkItemEx2}}</strong> </li> </ul><p>The <strong>{{MFLockSharedWorkQueue}}</strong> function also locks the queue. Before the process exits, call <strong>{{MFUnlockWorkQueue}}</strong> to unlock the work queue.</p><p>If the regular priority queue is being used (<em>wszClass</em>=""), then {{NULL}} must be passed in to <em>pdwTaskId</em> and the value 0 must be passed into <em>BasePriority</em>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + <dd> <p>The base priority of the work-queue threads. If the regular-priority queue is being used (<em>wszClass</em>=""), then the value 0 must be passed in.</p> </dd> + + + <dd> <p>The {{MMCSS}} task identifier. On input, specify an existing {{MCCSS}} task group {{ID}} , or use the value zero to create a new task group. If the regular priority queue is being used (<em>wszClass</em>=""), then <strong>{{NULL}}</strong> must be passed in. On output, receives the actual task group {{ID}}. </p> </dd> + + + <dd> <p>Receives an identifier for the new work queue. Use this identifier when queuing work items.</p> </dd> + + + + + <p>Gets the relative thread priority of a work queue.</p> + <p>This function returns the relative thread priority set by the <strong>{{MFBeginRegisterWorkQueueWithMMCSSEx}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue. For private work queues, the identifier is returned by the <strong>{{MFAllocateWorkQueue}}</strong> function. For platform work queues, see <strong>Work Queue Identifiers</strong>.</p> </dd> + + + <dd> <p>Receives the relative thread priority.</p> </dd> + + + + + <p> </p><p>Creates an asynchronous result object. Use this function if you are implementing an asynchronous method.</p> + <p>To invoke the callback specified in <em>pCallback</em>, call the <strong>{{MFInvokeCallback}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object stored in the asynchronous result. This reference is returned by the <strong>{{IMFAsyncResult::GetObject}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is implemented by the caller of the asynchronous method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object. This value is provided by the caller of the asynchronous method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAsyncResult}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Invokes a callback method to complete an asynchronous operation. </p> + <p> If you are implementing an asynchronous method, use this function to invoke the caller's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>The callback is invoked from a Media Foundation work queue. For more information, see Writing an Asynchronous Method.</p><p>The <strong>{{MFShutdown}}</strong> function shuts down the work queue threads, so the callback is not guaranteed to be invoked after <strong>{{MFShutdown}}</strong> is called.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALID_WORKQUEUE}}</strong></strong></dt> </dl> </td><td> <p>Invalid work queue. For more information, see <strong>{{IMFAsyncCallback::GetParameters}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p>The <strong>{{MFShutdown}}</strong> function was called to shut down the Media Foundation platform.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. To create this object, call <strong>{{MFCreateAsyncResult}}</strong>.</p> </dd> + + + + + <p> Creates a byte stream from a file. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to a null-terminated string that contains the file name. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> Creates a byte stream that is backed by a temporary local file. </p> + <p> This function creates a file in the system temporary folder, and then returns a byte stream object for that file. The full path name of the file is storted in the <strong>{{MF_BYTESTREAM_ORIGIN_NAME}}</strong> attribute. The file is created with the <strong>{{FILE_FLAG_DELETE_ON_CLOSE}}</strong> flag, and is deleted after the byte stream is released.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a byte stream from a file.</p> + <p>When the request is completed, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. The callback object should then call the <strong>{{MFEndCreateFile}}</strong> function to get a reference to the byte stream.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested access mode, specified as a member of the <strong>{{MF_FILE_ACCESSMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>The behavior of the function if the file already exists or does not exist, specified as a member of the <strong>{{MF_FILE_OPENMODE}}</strong> enumeration.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of values from the <strong>{{MF_FILE_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a null-terminated string containing the file name.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{MFCancelCreateFile}}</strong> function. The caller must release the interface. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a byte stream from a file.</p> + <p>Call this function when the <strong>{{MFBeginCreateFile}}</strong> function completes asynchronously.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels an asynchronous request to create a byte stream from a file.</p> + <p>You can use this function to cancel a previous call to <strong>{{MFBeginCreateFile}}</strong>. Because that function is asynchronous, however, it might complete before the operation can be canceled. Therefore, your callback might still be invoked after you call this function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the cancellation object. This reference is received in the <em>ppCancelCookie</em> parameter of the <strong>{{MFBeginCreateFile}}</strong> function.</p> </dd> + + + + + <p> </p><p>Allocates system memory and creates a media buffer to manage it.</p> + <p>The function allocates a buffer with a 1-byte memory alignment. To allocate a buffer that is aligned to a larger memory boundary, call <strong>{{MFCreateAlignedMemoryBuffer}}</strong>.</p><p>When the media buffer object is destroyed, it releases the allocated memory.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer that wraps an existing media buffer. The new media buffer points to the same memory as the original media buffer, or to an offset from the start of the memory.</p> + <p>The maximum size of the wrapper buffer is limited to the size of the valid data in the original buffer. This might be less than the allocated size of the original buffer. To set the size of the valid data, call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The requested offset or the requested length is not valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the original media buffer. </p> </dd> + + + <dd> <p>The start of the new buffer, as an offset in bytes from the start of the original buffer. </p> </dd> + + + <dd> <p>The size of the new buffer. The value of <em>cbOffset</em> + <em>dwLength</em> must be less than or equal to the size of valid data the original buffer. (The size of the valid data is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.) </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Converts a Media Foundation media buffer into a buffer that is compatible with DirectX Media Objects ({{DMOs}}).</p> + <p>The {{DMO}} buffer created by this function also exposes the <strong>{{IMFSample}}</strong> interface. If <em>pIMFSample</em> is <strong>{{NULL}}</strong>, all of the <strong>{{IMFSample}}</strong> methods return {{MF_E_NOT_INITIALIZED}}. Otherwise, they call through to the <em>pIMFSample</em> reference.</p><p>If the Media Foundation buffer specified by <em>pIMFMediaBuffer</em> exposes the <strong>{{IMF2DBuffer}}</strong> interface, the {{DMO}} buffer also exposes <strong>{{IMF2DBuffer}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. The <em>pIMFMediaBuffer</em> parameter must not be <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the sample that contains the Media Foundation buffer. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Offset in bytes from the start of the Media Foundation buffer. This offset defines where the {{DMO}} buffer starts. If this parameter is zero, the {{DMO}} buffer starts at the beginning of the Media Foundation buffer.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMediaBuffer}}</strong> interface. This interface is documented in the DirectShow {{SDK}} documentation. The caller must release the interface.</p> </dd> + + + + + <p>Converts a Microsoft Direct3D?9 format identifier to a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier.</p> + <p>Returns a <strong>{{DXGI_FORMAT}}</strong> value.</p> + + + <dd> <p>The <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code to convert.</p> </dd> + + + + + <p>Converts a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) format identifier to a Microsoft Direct3D?9 format identifier.</p> + <p>Returns a <strong>{{D3DFORMAT}}</strong> value or {{FOURCC}} code.</p> + + + <dd> <p>The <strong>{{DXGI_FORMAT}}</strong> value to convert.</p> </dd> + + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Unlocks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>Call this function after a successful call to the <strong>{{MFLockDXGIDeviceManager}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a media buffer object that manages a Direct3D 9 surface. </p> + <p>This function creates a media buffer object that holds a reference to the Direct3D surface specified in <em>punkSurface</em>. Locking the buffer gives the caller access to the surface memory. When the buffer object is destroyed, it releases the surface. For more information about media buffers, see Media Buffers.</p><strong>Note</strong>??This function does not allocate the Direct3D surface itself.?<p> The buffer object created by this function also exposes the <strong>{{IMF2DBuffer}}</strong> interface. For more information, see DirectX Surface Buffer. </p><p>This function does not support {{DXGI}} surfaces.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifies the type of Direct3D 9 surface. Currently this value must be <strong>{{IID_IDirect3DSurface9}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the DirectX surface. </p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + + + + <p>Creates a media buffer object that manages a Windows Imaging Component ({{WIC}}) bitmap.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Set this parameter to <code>__uuidof({{IWICBitmap}})</code>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the bitmap surface. The bitmap surface must be a {{WIC}} bitmap that exposes the <strong>{{IWICBitmap}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media buffer to manage a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>The returned buffer object supports the following interfaces:</p><ul> <li> <strong>{{IMF2DBuffer}}</strong> </li> <li> <strong>{{IMF2DBuffer2}}</strong> </li> <li> <strong>{{IMFDXGIBuffer}}</strong> </li> <li> <strong>{{IMFMediaBuffer}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Identifies the type of {{DXGI}} surface. This value must be <strong>{{IID_ID3D11Texture2D}}</strong>. </p> </dd> + + + <dd> <p> A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} surface. </p> </dd> + + + <dd> <p>The zero-based index of a subresource of the surface. The media buffer object is associated with this subresource.</p> </dd> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with Direct3D. </p> <p>For more information about top-down versus bottom-up images, see Image Stride.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the buffer. </p> </dd> + + + + + <p>Creates an object that allocates video samples that are compatible with Microsoft DirectX Graphics Infrastructure ({{DXGI}}).</p> + <p>This function creates an allocator for {{DXGI}} video surfaces. The buffers created by this allocator expose the <strong>{{IMFDXGIBuffer}}</strong> interface. To create an allocator for Microsoft Direct3D?9 video surfaces, call <strong>{{MFCreateVideoSampleAllocator}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the interface to retrieve. Specify one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IID_IUnknown}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocator}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocator}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorEx}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorEx}}</strong> reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IID_IMFVideoSampleAllocatorCallback}}</strong></strong></dt> </dl> </td><td> <p>Retrieve an <strong>{{IMFVideoSampleAllocatorCallback}}</strong> reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Microsoft Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Allocates system memory with a specified byte alignment and creates a media buffer to manage the memory. </p> + <p> When the media buffer object is destroyed, it releases the allocated memory. </p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the buffer, in bytes.</p> </dd> + + + <dd> <p> Specifies the memory alignment for the buffer. Use one of the following constants. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_1_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000000</dt> </dl> </td><td> <p> Align to 1 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_2_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> Align to 2 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_4_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000003</dt> </dl> </td><td> <p> Align to 4 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_8_BYTE_ALIGNMENT}}</strong></dt> <dt>0x00000007</dt> </dl> </td><td> <p> Align to 8 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_16_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000000F</dt> </dl> </td><td> <p> Align to 16 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_32_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000001F</dt> </dl> </td><td> <p> Align to 32 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_64_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000003F</dt> </dl> </td><td> <p> Align to 64 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_128_BYTE_ALIGNMENT}}</strong></dt> <dt>0x0000007F</dt> </dl> </td><td> <p> Align to 128 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_256_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000000FF</dt> </dl> </td><td> <p> Align to 256 bytes. </p> </td></tr> <tr><td><dl> <dt><strong>{{MF_512_BYTE_ALIGNMENT}}</strong></dt> <dt>0x000001FF</dt> </dl> </td><td> <p> Align to 512 bytes. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface of the media buffer. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a media event object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The event type. See <strong>{{IMFMediaEvent::GetType}}</strong>. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. See <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. If the event type does not have an extended type, use the value {{GUID_NULL}}.</p> </dd> + + + <dd> <p>The event status. See <strong>{{IMFMediaEvent::GetStatus}}</strong> </p> </dd> + + + <dd> <p>The value associated with the event, if any. See <strong>{{IMFMediaEvent::GetValue}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an event queue.</p> + <p>This function creates a helper object that you can use to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEventQueue}}</strong> interface of the event queue. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty media sample.</p> + <p>Initially the sample does not contain any media buffers.</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface of the media sample. The caller must release the interface.</p> </dd> + + + + + <p> Creates an empty attribute store. </p> + <p>Attributes are used throughout Microsoft Media Foundation to configure objects, describe media formats, query object properties, and other purposes. For more information, see Attributes in Media Foundation.</p><p>For a complete list of all the defined attribute {{GUIDs}} in Media Foundation, see Media Foundation Attributes.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + <dd> <p>The initial number of elements allocated for the attribute store. The attribute store grows as needed. </p> </dd> + + + + + <p> </p><p>Initializes the contents of an attribute store from a byte array.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p><p>This function deletes any attributes that were previously stored in <em>pAttributes</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The buffer is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to the array that contains the initialization data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves the size of the buffer needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>Use this function to find the size of the array that is needed for the <strong>{{MFGetAttributesAsBlob}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Converts the contents of an attribute store to a byte array.</p> + <p>The function skips any attributes with <strong>{{IUnknown}}</strong> reference values ({{MF_ATTRIBUTE_IUNKNOWN}}); they are not stored in the array.</p><p>To convert the byte array back into an attribute store, call <strong>{{MFInitAttributesFromBlob}}</strong>.</p><p>To write an attribute store to a stream, call the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer given in <em>pBuf</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Pointer to an array that receives the attribute data.</p> </dd> + + + <dd> <p>Size of the <em>pBuf</em> array, in bytes. To get the required size of the buffer, call <strong>{{MFGetAttributesAsBlobSize}}</strong>.</p> </dd> + + + + + <p> Adds information about a Media Foundation transform ({{MFT}}) to the registry. </p><p>Applications can enumerate the {{MFT}} by calling the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> function.</p> + <p> The registry entries created by this function are read by the following functions: </p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFTEnum}}</strong> </td><td>Enumerates {{MFTs}} by media type and category.</td></tr> <tr><td> <strong>{{MFTEnumEx}}</strong> </td><td>Extended version of <strong>{{MFTEnum}}</strong>.</td></tr> <tr><td> <strong>{{MFTGetInfo}}</strong> </td><td>Looks up an {{MFT}} by {{CLSID}} and retrieves the registry information.</td></tr> </table><p>?</p><p>This function does not register the {{CLSID}} of the {{MFT}} for the <strong>CoCreateInstance</strong> or <strong>CoGetClassObject</strong> functions. </p><p> To remove the entries from the registry, call <strong>{{MFTUnregister}}</strong>. If you remove an {{MFT}} from the system, you should always call <strong>{{MFTUnregister}}</strong>.</p><p> The formats given in the <em>pInputTypes</em> and <em>pOutputTypes</em> parameters are intended to help applications search for {{MFTs}} by format. Applications can use the <strong>{{MFTEnum}}</strong> or <strong>{{MFTEnumEx}}</strong> functions to enumerate {{MFTs}} that match a particular set of formats.</p><p>It is recommended to specify at least one input type in <em>pInputTypes</em> and one output type in the <em>pOutputTypes</em> parameter. Otherwise, the {{MFT}} might be skipped in the enumeration.</p><p>On 64-bit Windows, the 32-bit version of this function registers the {{MFT}} in the 32-bit node of the registry. For more information, see 32-bit and 64-bit Application Data in the Registry.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Unregisters a Media Foundation transform ({{MFT}}). </p> + <p> This function removes the registry entries created by the <strong>{{MFTRegister}}</strong> function.</p><p>It is safe to call <strong>{{MFTUnregister}}</strong> twice with the same {{CLSID}}. If the {{CLSID}} is not found in the registry, the function succeeds and does nothing.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>The <em>pClassFactory</em> parameter specifies a class factory object that creates the {{MFT}}. The class factory's <strong>{{IClassFactory::CreateInstance}}</strong> method must return an object that supports the <strong>{{IMFTransform}}</strong> interface.</p><strong>Note</strong>??The <strong>{{MFTEnumEx}}</strong> function retrieves a list of <strong>{{IMFActivate}}</strong> references. However, the class factory does not need to support the <strong>{{IMFActivate}}</strong> interface. Instead, the <strong>{{MFTEnumEx}}</strong> function provides an implementation of <strong>{{IMFActivate}}</strong> that wraps the class factory.?<p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocal}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. The class factory creates the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters one or more Media Foundation transforms ({{MFTs}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocal}}</strong> function.</p><p>If the <em>pClassFactory</em> parameter is <strong>{{NULL}}</strong>, all local {{MFTs}} in the process are unregistered. Otherwise, the function unregisters the {{MFT}} associated with the class factory specified by the <em>pClassFactory</em> parameter. In that case, the <em>pClassFactory</em> parameter should equal a reference value that was previously passed to the <strong>{{MFTRegisterLocal}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>pClassFactory</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IClassFactory}}</strong> interface of a class factory object. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Registers a Media Foundation transform ({{MFT}}) in the caller's process.</p> + <p>The primary purpose of this function is to make an {{MFT}} available for automatic topology resolution without making the {{MFT}} available to other processes or applications.</p><p>After you call this function, the {{MFT}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag. The {{MFT}} can be enumerated from within the same process, but is not visible to other processes.</p><p>To unregister the {{MFT}} from the current process, call <strong>{{MFTUnregisterLocalByCLSID}}</strong>.</p><p>If you need to register an {{MFT}} in the Protected Media Path ({{PMP}}) process, use the <strong>{{IMFLocalMFTRegistration}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the category of the {{MFT}}. For a list of {{MFT}} categories, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>A wide-character null-terminated string that contains the friendly name of the {{MFT}}.</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration.</p> </dd> + + + <dd> <p>The number of elements in the <em>pInputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array specifies an input format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cInputTypes</em> is zero.</p> </dd> + + + <dd> <p>The number of elements in the <em>pOutputTypes</em> array.</p> </dd> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array defines an output format that the {{MFT}} supports. This parameter can be <strong>{{NULL}}</strong> if <em>cOutputTypes</em> is zero.</p> </dd> + + + + + <p>Unregisters a Media Foundation transform ({{MFT}}) from the caller's process.</p> + <p>Use this function to unregister a local {{MFT}} that was previously registered through the <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{HRESULT_FROM_WIN32}}(<strong>{{ERROR_NOT_FOUND}}</strong>)</strong></dt> </dl> </td><td> <p>The {{MFT}} specified by the <em>clsidMFT</em> parameter was not registered in this process.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The class identifier ({{CLSID}}) of the {{MFT}}.</p> </dd> + + + + + <p> Enumerates Media Foundation transforms ({{MFTs}}) in the registry. </p><p>Starting in Windows?7, applications should use the <strong>{{MFTEnumEx}}</strong> function instead.</p> + <p> This function returns a list of all the {{MFTs}} in the specified category that match the search criteria given by the <em>pInputType</em>, <em>pOutputType</em>, and <em>pAttributes</em> parameters. Any of those parameters can be <strong>{{NULL}}</strong>. </p><p> If no {{MFTs}} match the criteria, the method succeeds but returns the value zero in <em>pcMFTs</em>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnum}}</strong> function.</p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnumEx}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnumEx}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets a list of Microsoft Media Foundation transforms ({{MFTs}}) that match specified search criteria. This function extends the <strong>{{MFTEnumEx}}</strong> function to allow external applications and internal components to discover the hardware {{MFTs}} that correspond to a specific video adapter. </p> + <p>The <em>Flags</em> parameter controls which {{MFTs}} are enumerated, and the order in which they are returned. The flags for this parameter fall into several groups.</p><p> </p><p>The first set of flags specifies how an {{MFT}} processes data.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p>{{MFT_ENUM_FLAG_SYNCMFT}}</p> </td><td> <p>The {{MFT}} performs synchronous data processing in software. This is the original {{MFT}} processing model, and is compatible with Windows?Vista.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_ASYNCMFT}}</p> </td><td> <p>The {{MFT}} performs asynchronous data processing in software. This processing model requires Windows?7. For more information, see Asynchronous {{MFTs}}.</p> </td></tr> <tr><td> <p>{{MFT_ENUM_FLAG_HARDWARE}}</p> </td><td> <p>The {{MFT}} performs hardware-based data processing, using either the {{AVStream}} driver or a {{GPU}}-based proxy {{MFT}}. {{MFTs}} in this category always process data asynchronously. For more information, see Hardware {{MFTs}}.</p> </td></tr> </table><p>?</p><p>Every {{MFT}} falls into exactly one of these categories. To enumerate a category, set the corresponding flag in the <em>Flags</em> parameter. You can combine these flags to enumerate more than one category. If none of these flags is specified, the default category is synchronous {{MFTs}} (<strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong>).</p><p> </p><p> </p><p>Next, the following flags include {{MFTs}} that are otherwise excluded from the results. By default, flags that match these criteria are excluded from the results. Use any these flags to include them.</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong></p> </td><td> <p>Include {{MFTs}} that must be unlocked by the application.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong></p> </td><td> <p>Include {{MFTs}} that are registered in the caller's process through either the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</p> </td></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_TRANSCODE_ONLY}}</strong></p> </td><td> <p>Include {{MFTs}} that are optimized for transcoding rather than playback.</p> </td></tr> </table><p>?</p><p> </p><p> </p><p>The last flag is used to sort and filter the results:</p><table> <tr><th>Flag</th><th>Description</th></tr> <tr><td> <p><strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong></p> </td><td> <p>Sort and filter the results.</p> </td></tr> </table><p>?</p><p>If the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag is set, the <strong>{{MFTEnum2}}</strong> function sorts the results as follows:</p><ul> <li>Local: If the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag is set, local {{MFTs}} appear first in the list. To register a local {{MFT}}, call the <strong>{{MFTRegisterLocal}}</strong> or <strong>{{MFTRegisterLocalByCLSID}}</strong> function.</li> <li>Merit: {{MFTs}} with a merit value appear next on the list, in order of merit value (highest to lowest). For more information about merit, see {{MFT_CODEC_MERIT_Attribute}}. </li> <li>Preferred: If an {{MFT}} is listed in the plug-in control's preferred list, it appears next in the list. For more information about the plug-in control, see <strong>{{IMFPluginControl}}</strong>.</li> <li>If an {{MFT}} appears on the blocked list, it is excluded from the results. For more information about the blocked list, see <strong>{{IMFPluginControl::IsDisabled}}</strong>.</li> <li>Any other {{MFTs}} that match the search criteria appear at the end of the list, unsorted.</li> </ul><p>If you do not set the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, the <strong>{{MFTEnum2}}</strong> function returns an unsorted list.</p><p>Setting the <em>Flags</em> parameter to zero is equivalent to using the value <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> | <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong>.</p><p>Setting <em>Flags</em> to <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> is equivalent to calling the <strong>{{MFTEnum}}</strong> function.</p><p>If no {{MFTs}} match the search criteria, the function returns <strong>{{S_OK}}</strong>, unless some other error occurs. Therefore, always check the count received in the <em>pcMFTActivate</em> parameter before you dereference the <em>pppMFTActivate</em> reference.</p><strong>Note</strong>??There is no way to enumerate just local {{MFTs}} and nothing else. Setting <em>Flags</em> equal to <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> is equivalent to including the <strong>{{MFT_ENUM_FLAG_SYNCMFT}}</strong> flag. However, if you also sort the results by specifying the <strong>{{MFT_ENUM_FLAG_SORTANDFILTER}}</strong> flag, local {{MFTs}} appear first in the list.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets information from the registry about a Media Foundation transform ({{MFT}}). </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the {{MFT}}. </p> </dd> + + + <dd> <p> Receives a reference to a wide-character string containing the friendly name of the {{MFT}}. The caller must free the string by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an input format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppInputTypes</em> array. If <em>ppInputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to an array of <strong>{{MFT_REGISTER_TYPE_INFO}}</strong> structures. Each member of the array describes an output format that the {{MFT}} supports. The caller must free the array by calling <strong>CoTaskMemFree</strong>. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Receives the number of elements in the <em>ppOutputType</em> array. If <em>ppOutputTypes</em> is <strong>{{NULL}}</strong>, this parameter is ignored and can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The caller must release the interface. The attribute store might contain attributes that are stored in the registry for the specified {{MFT}}. (For more information, see <strong>{{MFTRegister}}</strong>.) If no attributes are stored in the registry for this {{MFT}}, the attribute store is empty. </p> <p>This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Gets a reference to the Microsoft Media Foundation plug-in manager.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPluginControl}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the merit value of a hardware codec.</p> + <p> The function fails if the {{MFT}} does not represent a hardware device with a valid Output Protection Manager ({{OPM}}) certificate. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the Media Foundation transform ({{MFT}}) that represents the codec.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>verifier</em> array.</p> </dd> + + + <dd> <p>The address of a buffer that contains one of the following:</p> <ul> <li>The class identifier ({{CLSID}}) of the {{MFT}}.</li> <li>A null-terminated wide-character string that contains the symbol link for the underlying hardware device. Include the size of the terminating null in the value of <em>cbVerifier</em>.</li> </ul> </dd> + + + <dd> <p>Receives the merit value.</p> </dd> + + + + + <p>Registers a scheme handler in the caller's process.</p> + <p>Scheme handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local scheme handlers take precedence over scheme handlers that are registered in the registry. Local scheme handlers are not visible to other processes.</p><p>Use this function if you want to register a custom scheme handler for your application, but do not want the handler available to other applications.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the scheme. The scheme includes the trailing ':' character; for example, "http:".</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a scheme handler object. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + <p>Registers a byte-stream handler in the caller's process.</p> + <p>Byte-stream handlers are used in Microsoft Media Foundation during the source resolution process, which creates a media source from a {{URL}}. For more information, see Scheme Handlers and Byte-Stream Handlers.</p><p>Within a process, local byte-stream handlers take precedence over byte-stream handlers that are registered in the registry. Local byte-stream handlers are not visible to other processes.</p><p>Use this function if you want to register a custom byte-stream handler for your application, but do not want the handler available to other applications.</p><p>Either <em>szFileExtension</em> or <em>szMimeType</em> can be <strong>{{NULL}}</strong>; at least one must be non-<strong>{{NULL}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains the file name extension for this handler.</p> </dd> + + + <dd> <p>A string that contains the {{MIME}} type for this handler.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The caller implements this interface. The <strong>{{IMFActivate::ActivateObject}}</strong> method of the activation object must create a byte-stream handler. The byte-stream handler exposes the <strong>{{IMFByteStreamHandler}}</strong> interface.</p> </dd> + + + + + <p>Creates a wrapper for a byte stream.</p> + <p>The <strong>{{IMFByteStream}}</strong> methods on the wrapper call directly through to the original byte stream, except for the <strong>{{IMFByteStream::Close}}</strong> method. Calling <strong>Close</strong> on the wrapper closes the wrapper object, but leaves the original byte stream open.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the original byte stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface of the wrapper. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object for a Windows Runtime class.</p> + <p>To create the Windows Runtime object, call <strong>{{IMFActivate::ActivateObject}}</strong> or <strong>{{IClassFactory::CreateInstance}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The class identifier that is associated with the activatable runtime class.</p> </dd> + + + <dd> <p>A reference to an optional <strong>{{IPropertySet}}</strong> object, which is used to configure the Windows Runtime class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. The activation object created by this function supports the following interfaces:</p> <ul> <li> <strong>{{IClassFactory}}</strong> </li> <li> <strong>{{IMFActivate}}</strong> </li> <li> <strong>{{IPersistStream}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + <p> Validates the size of a buffer for a video format block. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is large enough. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The buffer that contains the format block is too small, or the format block is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_FORMAT}}</strong></dt> </dl> </td><td> <p> This function does not support the specified format type. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies the type of format block. It must be one of the following values:</p> <dl><dt><strong>{{FORMAT_DvInfo}}</strong></dt><dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt><dt><strong>{{FORMAT_MPEG2Video}}</strong></dt><dt><strong>{{FORMAT_MPEGStreams}}</strong></dt><dt><strong>{{FORMAT_MPEGVideo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo}}</strong></dt><dt><strong>{{FORMAT_VideoInfo2}}</strong></dt><dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </dd> + + + <dd> <p> Pointer to a buffer that contains the format block. </p> </dd> + + + <dd> <p> Size of the <em>pBlock</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Creates an empty media type.</p> + <p> The media type is created without any attributes. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates an <strong>{{MFVIDEOFORMAT}}</strong> structure from a video media type.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Converts a Media Foundation audio media type to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p>If the <strong>wFormatTag</strong> member of the returned structure is <strong>{{WAVE_FORMAT_EXTENSIBLE}}</strong>, you can cast the reference to a <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{WAVEFORMATEX}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <strong>{{WAVEFORMATEX}}</strong> structure.</p> </dd> + + + <dd> <p>Contains a flag from the <strong>{{MFWaveFormatExConvertFlags}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{VIDEOINFOHEADER2}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{VIDEOINFOHEADER2}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{VIDEOINFOHEADER2}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG1VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG1VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG1VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{MPEG2VIDEOINFO}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{MPEG2VIDEOINFO}}</strong> structure, in bytes.</p> </dd> + + + <dd> <p>Pointer to a subtype {{GUID}}. This parameter can be <strong>{{NULL}}</strong>. If the subtype {{GUID}} is specified, the function uses it to set the media subtype. Otherwise, the function attempts to deduce the subtype from the <strong>biCompression</strong> field contained in the <strong>{{MPEG2VIDEOINFO}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the image size for a video format. Given a <strong>{{BITMAPINFOHEADER}}</strong> structure, this function calculates the correct value of the <strong>biSizeImage</strong> member. </p> + <p> Before calling this function, you must set at least the following members of the <strong>{{BITMAPINFOHEADER}}</strong> structure:</p><ul> <li><strong>biCompression</strong></li> <li><strong>biBitCount</strong></li> <li><strong>biWidth</strong></li> <li><strong>biHeight</strong></li> </ul><p>Also, if <strong>biCompression</strong> is <strong>{{BI_BITFIELDS}}</strong>, the <strong>{{BITMAPINFOHEADER}}</strong> structure must be followed by an array of color masks. </p><p> This function fails if the <strong>{{BITMAPINFOHEADER}}</strong> structure describes a format that is not a video format. For example, it fails if <strong>biCompresson</strong> is <strong>{{BI_JPEG}}</strong> or <strong>{{BI_PNG}}</strong> .</p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{BITMAPINFOHEADER}}</strong> structure is not valid, or the value of <em>cbBufSize</em> is too small. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p>The function returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Media subtype for the video format. For a list of subtypes, see Media Type {{GUIDs}}.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of each frame, in bytes. If the format is compressed or is not recognized, the value is zero.</p> </dd> + + + + + <p> Converts a video frame rate into a frame duration.</p> + <p>This function is useful for calculating time stamps on a sample, given the frame rate.</p><p>Also, average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p> For certain common frame rates, the function gets the frame duration from a look-up table:</p><table> <tr><th>Frames per second (floating point)</th><th>Frames per second (fractional)</th><th>Average time per frame</th></tr> <tr><td>59.94</td><td>60000/1001</td><td>166833</td></tr> <tr><td>29.97</td><td>30000/1001</td><td>333667</td></tr> <tr><td>23.976</td><td>24000/1001</td><td>417188</td></tr> <tr><td>60</td><td>60/1</td><td>166667</td></tr> <tr><td>30</td><td>30/1</td><td>333333</td></tr> <tr><td>50</td><td>50/1</td><td>200000</td></tr> <tr><td>25</td><td>25/1</td><td>400000</td></tr> <tr><td>24</td><td>24/1</td><td>416667</td></tr> </table><p>?</p><p> Most video content uses one of the frame rates listed here. For other frame rates, the function calculates the duration.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The numerator of the frame rate. </p> </dd> + + + <dd> <p> The denominator of the frame rate. </p> </dd> + + + <dd> <p> Receives the average duration of a video frame, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Calculates the frame rate, in frames per second, from the average duration of a video frame.</p> + <p>Average time per frame is used in the older <strong>{{VIDEOINFOHEADER}}</strong> and <strong>{{VIDEOINFOHEADER2}}</strong> format structures. This function provides a standard conversion so that all components in the pipeline can use consistent values, if they need to translate between the older format structures and the media type attributes used in Media Foundation.</p><p>This function uses a look-up table for certain common durations. The table is listed in the Remarks section for the <strong>{{MFFrameRateToAverageTimePerFrame}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The average duration of a video frame, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the numerator of the frame rate.</p> </dd> + + + <dd> <p>Receives the denominator of the frame rate.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Initializes a media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Initializes a media type from a <strong>{{WAVEFORMATEX}}</strong> structure. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + <dd> <p>Size of the <strong>{{WAVEFORMATEX}}</strong> structure, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes a media type from a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to initialize. To create the uninitialized media type object, call <strong>{{MFCreateMediaType}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure that describes the media type. The caller must fill in the structure members before calling this function.</p> </dd> + + + + + <p> </p><p>Initializes a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</li> <li><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The media type is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The function allocates memory for the format block. The caller must release the format block by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Creates a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure from a Media Foundation media type.</p> + <p>This function can also be used with the following format structures that are equivalent to <strong>{{AM_MEDIA_TYPE}}</strong>:</p><ul> <li> <p><strong>{{DMO_MEDIA_TYPE}}</strong> (DirectX Media Objects)</p> </li> <li> <p><strong>{{WM_MEDIA_TYPE}}</strong> (Windows Media Format {{SDK}})</p> </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to convert.</p> </dd> + + + <dd> <p>Format type {{GUID}}. This value corresponds to the <strong>formattype</strong> member of the <strong>{{AM_MEDIA_TYPE}}</strong> structure and specifies the type of format block to allocate. If the value is {{GUID_NULL}}, the function attempts to deduce the correct format block, based on the major type and subtype.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{AM_MEDIA_TYPE}}</strong> structure. The caller must release the memory allocated for the structure by calling <strong>CoTaskMemFree</strong>. The function also allocates memory for the format block, which the caller must release by calling <strong>CoTaskMemFree</strong> on the <strong>pbFormat</strong> member.</p> </dd> + + + + + <p> </p><p>Compares a full media type to a partial media type.</p> + <p>A pipeline component can return a partial media type to describe a range of possible formats the component might accept. A partial media type has at least a major type {{GUID}}, but might be missing some of the other attributes that are needed to fully describe the type. The missing attributes represent "don't care" values for the partial type. For example, a partial video type might be missing the attributes for the width and height of the video.</p><p>This function returns <strong>{{TRUE}}</strong> if the following conditions are both true:</p><ul> <li> The partial media type contains a major type {{GUID}}. </li> <li> All of the attributes in the partial type exist in the full type and are set to the same value. </li> </ul><p> Otherwise, the function returns <strong>{{FALSE}}</strong>. </p> + <p>If the full media type is compatible with the partial media type, the function returns <strong>{{TRUE}}</strong>. Otherwise, the function returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the full media type.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the partial media type.</p> </dd> + + + + + <p> Creates a media type that wraps another media type. </p> + <p> The original media type (<em>pOrig</em>) is stored in the new media type under the <strong>{{MF_MT_WRAPPED_TYPE}}</strong> attribute. To extract the original media type, call <strong>{{MFUnwrapMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type to wrap in a new media type. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the major type for the new media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>A {{GUID}} that specifies the subtype for the new media type. For possible values, see:</p> <ul> <li> <strong>Audio Subtypes</strong> </li> <li> Video Subtypes </li> </ul> <p>Applications can define custom subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the new media type that wraps the original media type. The caller must release the interface. </p> </dd> + + + + + <p> Retrieves a media type that was wrapped in another media type by the <strong>{{MFWrapMediaType}}</strong> function. </p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Creates a video media type from an <strong>{{MFVIDEOFORMAT}}</strong> structure. </p> + <p> Instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure to initialize a video media type, you can call <strong>{{MFCreateMediaType}}</strong> and set the media type attributes directly. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a partial video media type with a specified subtype. </p> + <p> This function creates a media type and sets the major type equal to <strong>{{MFMediaType_Video}}</strong> and the subtype equal to the value specified in <em>pAMSubtype</em>. </p><p>You can get the same result with the following steps:</p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. </li> <li> Set the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute to <strong>{{MFMediaType_Video}}</strong>. </li> <li> Set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute to the subtype. </li> </ol><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a {{GUID}} that specifies the subtype. See Video Subtype {{GUIDs}}. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFVideoMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether a {{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value is a {{YUV}} format.</p> + <p>This function checks whether <em>Format</em> specifies a {{YUV}} format. Not every {{YUV}} format is recognized by this function. However, if a {{YUV}} format is not recognized by this function, it is probably not supported for video rendering or DirectX video acceleration ({{DXVA}}).</p> + <p>The function returns one of the following values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The value specifies a {{YUV}} format.</p> </td></tr> <tr><td> <dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The value does not specify a recognized {{YUV}} format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value.</p> </dd> + + + + + <p> This function is not implemented.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns <strong>{{E_FAIL}}</strong>.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Calculates the minimum surface stride for a video format. </p> + <p> This function calculates the minimum stride needed to hold the image in memory. Use this function if you are allocating buffers in system memory. Surfaces allocated in video memory might require a larger stride, depending on the graphics card. </p><p> If you are working with a DirectX surface buffer, use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to find the surface stride. </p><p> For planar {{YUV}} formats, this function returns the stride for the Y plane. Depending on the format, the chroma planes might have a different stride. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the minimum surface stride, in pixels.</p> </dd> + + + + + <p> </p><p>Retrieves the image size, in bytes, for an uncompressed video format.</p> + <p> This function is equivalent to the <strong>{{MFCalculateImageSize}}</strong> function. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll.? + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{FOURCC}} code or <strong>{{D3DFORMAT}}</strong> value that specifies the video format.</p> </dd> + + + <dd> <p>Width of the image, in pixels.</p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>Receives the size of one frame, in bytes. If the format is compressed or is not recognized, this value is zero.</p> </dd> + + + + + <p>Creates a video media type from a <strong>{{BITMAPINFOHEADER}}</strong> structure.</p> + <p>If the function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates a Media Foundation media type from another format representation.</p> + <p>If the original format is a DirectShow audio media type, and the format type is not recognized, the function sets the following attributes on the converted media type.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_MT_AM_FORMAT_TYPE}}</strong> </td><td>Contains the format type {{GUID}}.</td></tr> <tr><td> <strong>{{MF_MT_USER_DATA}}</strong> </td><td>Contains the format block.</td></tr> </table><p>?</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p>The {{GUID}} specified in <em>guidRepresentation</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that specifies which format representation to convert. The following value is defined.</p> <table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td>{{AM_MEDIA_TYPE_REPRESENTATION}}</td><td>Convert a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the format representation to convert. The layout of the buffer depends on the value of <em>guidRepresentation</em>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future.]</p><p>Creates an audio media type from a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + <p> The <strong>{{IMFAudioMediaType}}</strong> interface is deprecrated, so applications should avoid using this function. To create a media type from a <strong>{{WAVEFORMATEX}}</strong> structure, do the following: </p><ol> <li> Call <strong>{{MFCreateMediaType}}</strong>. This function returns a reference to the <strong>{{IMFMediaType}}</strong> interface. The returned media type object is initially empty. </li> <li> Call <strong>{{MFInitMediaTypeFromWaveFormatEx}}</strong> to populate the media type from the <strong>{{WAVEFORMATEX}}</strong> structure. </li> </ol><p> Alternatively, you can call <strong>{{MFCreateMediaType}}</strong> and then set the media type attributes directly. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAudioMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p>Returns the {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value for an uncompressed video format.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>Returns a {{FOURCC}} or <strong>{{D3DFORMAT}}</strong> value that identifies the video format. If the video format is compressed or not recognized, the return value is {{D3DFMT_UNKNOWN}}.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for a standard video format such as {{DVD}}, analog television, or {{ATSC}} digital television.</p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Video Media Types.]</p><p> Initializes an <strong>{{MFVIDEOFORMAT}}</strong> structure for an uncompressed {{RGB}} video format.</p> + <p> This function fills in some reasonable default values for the specified {{RGB}} format. </p><p> Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. See Media Type Attributes. </p><p> In general, you should avoid calling this function. If you know all of the format details, you can fill in the <strong>{{MFVIDEOFORMAT}}</strong> structure without this function. If you do not know all of the format details, attributes are preferable to using the <strong>{{MFVIDEOFORMAT}}</strong> structure. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Converts the extended color information from an <strong>{{MFVIDEOFORMAT}}</strong> to the equivalent DirectX Video Acceleration ({{DXVA}}) color information. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Applications should avoid using the <strong>{{MFVIDEOFORMAT}}</strong> structure, and use media type attributes instead. For more information, see Extended Color Information.]</p><p> Sets the extended color information in a <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>This function sets the following fields in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><ul> <li><strong>videoInfo.{{MFNominalRange}}</strong></li> <li><strong>videoInfo.{{MFVideoLighting}}</strong></li> <li><strong>videoInfo.{{MFVideoPrimaries}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferFunction}}</strong></li> <li><strong>videoInfo.{{MFVideoTransferMatrix}}</strong></li> <li><strong>videoInfo.SourceChromaSubsampling</strong></li> </ul><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Copies an image or image plane from one buffer to another. </p> + <p> This function copies a single plane of the image. For planar {{YUV}} formats, you must call the function once for each plane. In this case, <em>pDest</em> and <em>pSrc</em> must point to the start of each plane. </p><p> This function is optimized if the {{MMX}}, {{SSE}}, or {{SSE2}} instruction sets are available on the processor. The function performs a non-temporal store (the data is written to memory directly without polluting the cache). </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the start of the first row of pixels in the destination buffer. </p> </dd> + + + <dd> <p> Stride of the destination buffer, in bytes. </p> </dd> + + + <dd> <p> Pointer to the start of the first row of pixels in the source image. </p> </dd> + + + <dd> <p> Stride of the source image, in bytes. </p> </dd> + + + <dd> <p> Width of the image, in bytes. </p> </dd> + + + <dd> <p> Number of rows of pixels to copy. </p> </dd> + + + + + <p> Converts an array of 16-bit floating-point numbers into an array of 32-bit floating-point numbers. </p> + <p> The function converts <em>dwCount</em> values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements. </p> </dd> + + + <dd> <p> Number of elements in the <em>pSrc</em> array to convert. </p> </dd> + + + + + <p> Converts an array of 32-bit floating-point numbers into an array of 16-bit floating-point numbers. </p> + <p> The function converts the values in the <em>pSrc</em> array and writes them into the <em>pDest</em> array. </p><strong>Note</strong>??Prior to Windows?7, this function was exported from evr.dll. Starting in Windows?7, this function is exported from mfplat.dll, and evr.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an array of 16-bit floating-point values, typed as <strong>{{WORD}}</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>float</strong> values. The array must contain at least <em>dwCount</em> elements.</p> </dd> + + + <dd> <p>Number of elements in the <em>pSrc</em> array to convert.</p> </dd> + + + + + <p>Creates a system-memory buffer object to hold 2D image data.</p> + <p>The returned buffer object also exposes the <strong>{{IMF2DBuffer2}}</strong> interface.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Unrecognized video format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Width of the image, in pixels. </p> </dd> + + + <dd> <p>Height of the image, in pixels.</p> </dd> + + + <dd> <p>A <strong>{{FOURCC}}</strong> code or {{D3DFORMAT}} value that specifies the video format. If you have a video subtype {{GUID}}, you can use the first <strong>{{DWORD}}</strong> of the subtype. </p> </dd> + + + <dd> <p>If <strong>{{TRUE}},</strong> the buffer's <strong>{{IMF2DBuffer::ContiguousCopyTo}}</strong> method copies the buffer into a bottom-up format. The bottom-up format is compatible with {{GDI}} for uncompressed {{RGB}} images. If this parameter is <strong>{{FALSE}}</strong>, the <strong>ContiguousCopyTo</strong> method copies the buffer into a top-down format, which is compatible with DirectX. </p> <p>For more information about top-down versus bottom-up images, see Image Stride. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p>Allocates a system-memory buffer that is optimal for a specified media type.</p> + <p>For video formats, if the format is recognized, the function creates a 2-D buffer that implements the <strong>{{IMF2DBuffer2}}</strong> interface. Otherwise it creates a linear buffer. To get the <strong>{{IMF2DBuffer2}}</strong> interface, call <strong>QueryInterface</strong> on the reference returned in <em>ppBuffer</em>. If the <strong>QueryInterface</strong> method fails, use the <strong>{{IMFMediaBuffer}}</strong> interface to access the buffer memory.</p><p>For audio formats, the function allocates a buffer that is large enough to contain <em>llDuration</em> audio samples, or <em>dwMinLength</em>, whichever is larger.</p><p>This function always allocates system memory. For Direct3D surfaces, use the <strong>{{MFCreateDXGISurfaceBuffer}}</strong> or <strong>{{MFCreateDXSurfaceBuffer}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>The sample duration. This value is required for audio formats.</p> </dd> + + + <dd> <p>The minimum size of the buffer, in bytes. The actual buffer size might be larger. Specify zero to allocate the default buffer size for the media type.</p> </dd> + + + <dd> <p>The minimum memory alignment for the buffer. Specify zero to use the default memory alignment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an empty collection object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the collection object's <strong>{{IMFCollection}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Allocates a block of memory.</p> + <p>In the current version of Media Foundation, this function is equivalent to calling the <strong>HeapAlloc</strong> function and specifying the heap of the calling process.</p><p>To free the allocated memory, call <strong>{{MFHeapFree}}</strong>.</p> + <p>If the function succeeds, it returns a reference to the allocated memory block. If the function fails, it returns <strong>{{NULL}}</strong>.</p> + + + <dd> <p>Number of bytes to allocate.</p> </dd> + + + <dd> <p>Zero or more flags. For a list of valid flags, see <strong>HeapAlloc</strong> in the Windows {{SDK}} documentation.</p> </dd> + + + <dd> <p> Reserved. Set to <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Set to zero. </p> </dd> + + + <dd> <p> Reserved. Set to <strong>eAllocationTypeIgnore</strong>. </p> </dd> + + + + + <p> </p><p>Frees a block of memory that was allocated by calling the <strong>{{MFHeapAlloc}}</strong> function.</p> + <p>This function does not return a value.</p> + + + + <p>Calculates ((a * b) + d) / c, where each term is a 64-bit signed value.</p> + <strong>Note</strong>??A previous version of this topic described the parameters incorrectly. The divisor is <em>c</em> and the rounding factor is <em>d</em>.? + <p>Returns the result of the calculation. If numeric overflow occurs, the function returns _I64_MAX (positive overflow) or {{LLONG_MIN}} (negative overflow). If Mfplat.dll cannot be loaded, the function returns _I64_MAX.</p> + + + <dd> <p>A multiplier.</p> </dd> + + + <dd> <p>Another multiplier.</p> </dd> + + + <dd> <p>The divisor.</p> </dd> + + + <dd> <p>The rounding factor.</p> </dd> + + + + + <p>Gets the class identifier for a content protection system.</p> + <p>The class identifier can be used to create the input trust authority ({{ITA}}) for the content protection system. Call <strong>CoCreateInstance</strong> or <strong>{{IMFPMPHost::CreateObjectByCLSID}}</strong> to get an <strong>{{IMFTrustedInput}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{GUID}} that identifies the content protection system.</p> </dd> + + + <dd> <p>Receives the class identifier to the content protection system.</p> </dd> + + + + + <p> </p><p>Defines the behavior of the <strong>{{IMFMediaSession::SetTopology}}</strong> method.</p> + <p> These flags are optional, and are not mutually exclusive. If no flags are set, the Media Session resolves the topology and then adds it to the queue of pending presentations. </p> + + + + <p> Defines flags for the <strong>{{IMFMediaSession::GetFullTopology}}</strong> method. </p> + + + + <p> Contains flags that define the behavior of the <strong>{{MFCreatePMPMediaSession}}</strong> function. </p> + + + + <p> </p><p>Defines the object types that are created by the source resolver.</p> + + + <dd> <p>Media source. You can query the object for the <strong>{{IMFMediaSource}}</strong> interface.</p> </dd> + + + <dd> <p>Byte stream. You can query the object for the <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>Invalid type.</p> </dd> + + + + + + + + <p>Specifies how the topology loader connects a topology node. This enumeration is used with the <strong>{{MF_TOPONODE_CONNECT_METHOD}}</strong> attribute. </p> + + + + <p> </p><p>Defines status flags for the <strong>{{MF_TOPOLOGY_RESOLUTION_STATUS}}</strong> attribute.</p> + + + + <p>Defines the characteristics of a media source. These flags are retrieved by the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method.</p> + <p>To skip forward or backward in a playlist, call <strong>{{IMFMediaSource::Start}}</strong> or <strong>{{IMFMediaSession::Start}}</strong> with the <strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong> time-format {{GUID}}. This capability applies only when the <strong>{{MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS}}</strong> flag is present.</p> + + + + + + + <p>Defines stream marker information for the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. The <strong>PlaceMarker</strong> method places a marker on the stream between samples. The <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration defines the marker type and the type of information associated with the marker.</p> + <p>If the Streaming Audio Renderer receives an <strong>{{MFSTREAMSINK_MARKER_TICK}}</strong> marker, it inserts silence to cover the gap in the data. </p> + + + + <p>Specifies how to rotate a video image.</p> + + + <dd> <p>Do not rotate the image.</p> </dd> + + + <dd> <p>Rotate the image to the correct viewing orientation.</p> </dd> + + + + + <p>Specifies how to flip a video image.</p> + + + <dd> <p>Do not flip the image.</p> </dd> + + + <dd> <p>Flip the image horizontally.</p> </dd> + + + <dd> <p>Flip the image vertically.</p> </dd> + + + + + <p>Specifies whether the topology loader enables Microsoft DirectX Video Acceleration ({{DXVA}}) in the topology.</p> + <p>This enumeration is used with the {{MF_TOPOLOGY_DXVA_MODE}} topology attribute.</p><p>If an {{MFT}} supports {{DXVA}}, the {{MFT}} must return <strong>{{TRUE}}</strong> for the <strong>{{MF_SA_D3D_AWARE}}</strong> attribute. To enable {{DXVA}}, the topology loader calls <strong>{{IMFTransform::ProcessMessage}}</strong> on the {{MFT}}, passing the {{MFT}} a reference to the <strong>{{IDirect3DDeviceManager9}}</strong> interface. The topology loader gets the <strong>{{IDirect3DDeviceManager9}}</strong> reference from the media sink for the video stream. Typically the enhanced video renderer ({{EVR}}) is the media sink.</p><p>Previous versions of Microsoft Media Foundation supported {{DXVA}} only for decoders.</p> + + + <dd> <p>The topology loader enables {{DXVA}} +on the decoder if possible, and drops optional Media Foundation transforms ({{MFTs}}) that do not support {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader disables all video acceleration. This setting forces software processing, even when the decoder supports {{DXVA}}.</p> </dd> + + + <dd> <p>The topology loader enables {{DXVA}} on every {{MFT}} that supports it.</p> </dd> + + + + + <p>Specifies whether the topology loader will insert hardware-based Media Foundation transforms ({{MFTs}}) into the topology.</p> + <p> This enumeration is used with the {{MF_TOPOLOGY_HARDWARE_MODE}} topology attribute. </p> + + + <dd> <p>Use only software {{MFTs}}. Do not use hardware-based {{MFTs}}. This mode is the default, for backward compatibility with existing applications.</p> </dd> + + + <dd> <p>Use hardware-based {{MFTs}} when possible, and software {{MFTs}} otherwise. This mode is the recommended one.</p> </dd> + + + <dd> <p>If hardware-based {{MFTs}} are available, the topoloader will insert them. If not, the connection will fail.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p> </p><p>Defines the type of a topology node.</p> + + + <dd> <p>Output node. Represents a media sink in the topology.</p> </dd> + + + <dd> <p>Source node. Represents a media stream in the topology.</p> </dd> + + + <dd> <p>Transform node. Represents a Media Foundation Transform ({{MFT}}) in the topology.</p> </dd> + + + <dd> <p>Tee node. A tee node does not hold a reference to an object. Instead, it represents a fork in the stream. A tee node has one input and multiple outputs, and samples from the upstream node are delivered to all of the downstream nodes.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> </p><p>Defines when a transform in a topology is flushed.</p> + + + <dd> <p>The transform is flushed whenever the stream changes, including seeks and new segments.</p> </dd> + + + <dd> <p>The transform is flushed when seeking is performed on the stream.</p> </dd> + + + <dd> <p>The transform is never flushed during streaming. It is flushed only when the object is released.</p> </dd> + + + + + <p> </p><p>Defines at what times a transform in a topology is drained.</p> + + + <dd> <p>The transform is drained when the end of a stream is reached. It is not drained when markout is reached at the end of a segment.</p> </dd> + + + <dd> <p>The transform is drained whenever a topology ends.</p> </dd> + + + <dd> <p>The transform is never drained.</p> </dd> + + + + + <p>Contains flags that describe the characteristics of a clock. These flags are returned by the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method.</p> + + + + <p> </p><p>Defines the state of a clock.</p> + + + <dd> <p>The clock is invalid. A clock might be invalid for several reasons. Some clocks return this state before the first start. This state can also occur if the underlying device is lost.</p> </dd> + + + <dd> <p>The clock is running. While the clock is running, the time advances at the clock's frequency and current rate.</p> </dd> + + + <dd> <p>The clock is stopped. While stopped, the clock reports a time of 0.</p> </dd> + + + <dd> <p>The clock is paused. While paused, the clock reports the time it was paused.</p> </dd> + + + + + <p> </p><p>Defines properties of a clock.</p> + + + <dd> <p>Jitter values are always negative. In other words, the time returned by <strong>{{IMFClock::GetCorrelatedTime}}</strong> might jitter behind the actual clock time, but will never jitter ahead of the actual time. If this flag is not present, the clock might jitter in either direction.</p> </dd> + + + + + <p> </p><p>Contains flags for the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + + + + + + + + + + <p> Describes the current status of a call to the <strong>{{IMFShutdown::Shutdown}}</strong> method.</p> + + + + <p> </p><p>Indicates whether the {{URL}} is from a trusted source.</p> + + + <dd> <p>The validity of the {{URL}} cannot be guaranteed because it is not signed. The application should warn the user.</p> </dd> + + + <dd> <p>The {{URL}} is the original one provided with the content.</p> </dd> + + + <dd> <p>The {{URL}} was originally signed and has been tampered with. The file should be considered corrupted, and the application should not navigate to the {{URL}} without issuing a strong warning the user.</p> </dd> + + + + + <p> </p><p>Specifies the direction of playback (forward or reverse).</p> + + + <dd> <p>Forward playback.</p> </dd> + + + <dd> <p>Reverse playback.</p> </dd> + + + + + <p> </p><p>Specifies how aggressively a pipeline component should drop samples.</p> + <p>In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode. The specific algorithm used depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels.</p><p>For example, suppose an encoded video stream has three B-frames between each pair of P-frames. A decoder might implement the following drop modes:</p><ul> <li> <p>Mode 1: Drop one out of every three B frames.</p> </li> <li> <p>Mode 2: Drop one out of every two B frames.</p> </li> <li> <p>Mode 3: Drop all delta frames.</p> </li> <li> <p>Modes 4 and 5: Unsupported.</p> </li> </ul><p>The enhanced video renderer ({{EVR}}) can drop video frames before sending them to the {{EVR}} mixer.</p> + + + <dd> <p>Normal processing of samples. Drop mode is disabled.</p> </dd> + + + <dd> <p>First drop mode (least aggressive).</p> </dd> + + + <dd> <p>Second drop mode.</p> </dd> + + + <dd> <p>Third drop mode.</p> </dd> + + + <dd> <p>Fourth drop mode.</p> </dd> + + + <dd> <p>Fifth drop mode (most aggressive, if it is supported; see Remarks).</p> </dd> + + + <dd> <p>Maximum number of drop modes. This value is not a valid flag.</p> </dd> + + + + + <p>Specifies the quality level for a pipeline component. The quality level determines how the component consumes or produces samples.</p> + <p> Each successive quality level decreases the amount of processing that is needed, while also reducing the resulting quality of the audio or video. The specific algorithm used to reduce quality depends on the component. Mode 1 is the least aggressive mode, and mode 5 is the most aggressive. A component is not required to implement all five levels. Also, the same quality level might not be comparable between two different components. </p><p> Video decoders can often reduce quality by leaving out certain post-processing steps. The enhanced video renderer ({{EVR}}) can sometimes reduce quality by switching to a different deinterlacing mode. </p> + + + <dd> <p> Normal quality. </p> </dd> + + + <dd> <p> One level below normal quality. </p> </dd> + + + <dd> <p> Two levels below normal quality. </p> </dd> + + + <dd> <p> Three levels below normal quality. </p> </dd> + + + <dd> <p> Four levels below normal quality. </p> </dd> + + + <dd> <p> Five levels below normal quality. </p> </dd> + + + <dd> <p> Maximum number of quality levels. This value is not a valid flag. </p> </dd> + + + + + <p>Contains flags for the <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method.</p> + <p>If the decoder sets the <strong>{{MF_QUALITY_CANNOT_KEEP_UP}}</strong> flag, the quality manager tries to reduce latency through the media source and the media sink. For example, it might request the Enhanced Video Renderer ({{EVR}}) to drop frames. During this period, the quality manager stops calling the decoder's <strong>{{IMFQualityAdvise2::NotifyQualityEvent}}</strong> method, until samples are no longer arriving late at the sink. At that point, the quality manager resumes calling <strong>NotifyQualityEvent</strong> on the decoder.</p> + + + + <p> </p><p>Contains flags for adding a topology to the sequencer source, or updating a topology already in the queue.</p> + + + <dd> <p>This topology is the last topology in the sequence.</p> </dd> + + + + + <p> Specifies how the credential manager should obtain user credentials. </p> + <p>The application implements the credential manager, which must expose the <strong>{{IMFNetCredentialManager}}</strong> interface. If the <strong>{{REQUIRE_PROMPT}}</strong> flag is set, the credential manager should prompt the user for his or her name and password.</p><p>The credential cache object sets the <strong>{{REQUIRE_PROMPT}}</strong> flag if the cache does not yet contain valid credentials. It also sets this flag if the credentials will be sent as plain text, unless the credential manager previously set the <strong>{{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}}</strong> option. (See <strong>{{IMFNetCredentialCache::SetUserOptions}}</strong>.)</p> + + + <dd> <p> The credential manager should prompt the user to provide the credentials. </p> </dd> + + + <dd> <p> </p><strong>Note</strong>??Requires Windows?7 or later. ? <p>The credentials are saved to persistent storage. This flag acts as a hint for the application's {{UI}}. If the application prompts the user for credentials, the {{UI}} can indicate that the credentials have already been saved.</p> </dd> + + + + + <p> </p><p>Describes options for the caching network credentials.</p> + + + <dd> <p>Allow the credential cache object to save credentials in persistant storage.</p> </dd> + + + <dd> <p>Do not allow the credential cache object to cache the credentials in memory. This flag cannot be combined with the {{MFNET_CREDENTIAL_SAVE}} flag.</p> </dd> + + + <dd> <p>The user allows credentials to be sent over the network in clear text.</p> <p> By default, <strong>{{IMFNetCredentialCache::GetCredential}}</strong> always returns the {{REQUIRE_PROMPT}} flag when the authentication flags include {{MFNET_AUTHENTICATION_CLEAR_TEXT}}, even if cached credentials are available. If you set the {{MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT}} option, the <strong>GetCredential</strong> method will not return {{REQUIRE_PROMPT}} for clear text, if cached credentials are available.</p> <p>Do not set this flag without notifying the user that credentials might be sent in clear text.</p> </dd> + + + + + <p> </p><p>Specifies how the user's credentials will be used.</p> + + + <dd> <p>The credentials will be used to authenticate with a proxy.</p> </dd> + + + <dd> <p>The credentials will be sent over the network unencrypted.</p> </dd> + + + <dd> <p>The credentials must be from a user who is currently logged on.</p> </dd> + + + + + <p> Indicates the type of control protocol that is used in streaming or downloading. </p> + + + <dd> <p> The protocol type has not yet been determined. </p> </dd> + + + <dd> <p> The protocol type is {{HTTP}}. This includes {{HTTPv9}}, {{WMSP}}, and {{HTTP}} download. </p> </dd> + + + <dd> <p> The protocol type is Real Time Streaming Protocol ({{RTSP}}). </p> </dd> + + + <dd> <p> The content is read from a file. The file might be local or on a remote share. </p> </dd> + + + <dd> <p>The protocol type is multicast.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p> </p><p>Describes the type of transport used in streaming or downloading data ({{TCP}} or {{UDP}}).</p> + + + <dd> <p>The data transport type is {{UDP}}.</p> </dd> + + + <dd> <p>The data transport type is {{TCP}}.</p> </dd> + + + + + <p> </p><p>Defines the status of the cache for a media file or entry.</p> + + + <dd> <p>The cache for a file or entry does not exist.</p> </dd> + + + <dd> <p>The cache for a file or entry is growing.</p> </dd> + + + <dd> <p>The cache for a file or entry is completed.</p> </dd> + + + + + <p>Defines statistics collected by the network source. The values in this enumeration define property identifiers ({{PIDs}}) for the <strong>{{MFNETSOURCE_STATISTICS}}</strong> property.</p><p>To retrieve statistics from the network source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MFNETSOURCE_STATISTICS_SERVICE}}</strong> and the interface identifier {{IID_IPropertyStore}}. The retrieved reference is an <strong>{{IPropertyStore}}</strong> reference. To get the value of a network statistic, construct a <strong>{{PROPERTYKEY}}</strong> with <strong>fmtid</strong> equal to <strong>{{MFNETSOURCE_STATISTICS}}</strong> and <strong>pid</strong> equal to a value from this enumeration. Then call <strong>{{IPropertyStore::GetValue}}</strong> with the property key to retrieve the value of the statistic as a <strong>{{PROPVARIANT}}</strong>. </p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Specifies how the default proxy locator will specify the connection settings to a proxy server. The application must set these values in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> + + + + <p> </p><p>Defines actions that can be performed on a stream.</p> + + + <dd> <p>No action.</p> </dd> + + + <dd> <p>Play the stream.</p> </dd> + + + <dd> <p>Copy the stream.</p> </dd> + + + <dd> <p>Export the stream to another format.</p> </dd> + + + <dd> <p>Extract the data from the stream and pass it to the application. For example, acoustic echo cancellation requires this action.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Last member of the enumeration.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_CGMSA}}</strong>.</p> + <p>These flags are equivalent to the {{OPM_CGMSA_Protection_Level}} enumeration constants used in the Output Protection Protocol ({{OPM}}). </p> + + + <dd> <p>{{CGMS}}-A is disabled.</p> </dd> + + + <dd> <p>The protection level is Copy Freely.</p> </dd> + + + <dd> <p>The protection level is Copy No More.</p> </dd> + + + <dd> <p>The protection level is Copy One Generation.</p> </dd> + + + <dd> <p>The protection level is Copy Never.</p> </dd> + + + <dd> <p>Redistribution control (also called the broadcast flag) is required. This flag can be combined with the other flags.</p> </dd> + + + + + <p>Defines protection levels for <strong>{{MFPROTECTION_ACP}}</strong>.</p> + + + <dd> <p>Specifies {{ACP}} is disabled.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level one.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level two.</p> </dd> + + + <dd> <p>Specifies {{ACP}} is level three.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p>Specifies values for audio constriction.</p> + <p>Values defined by the <strong>{{MFAudioConstriction}}</strong> enumeration matches the <strong>{{EAudioConstriction}}</strong> enumeration defined <strong>audioenginebaseapo.h</strong>.</p> + + + <dd> <p>Audio is not constricted. </p> </dd> + + + <dd> <p>Audio is down sampled to 48 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 44 kHz/16-bit.</p> </dd> + + + <dd> <p>Audio is down sampled to 14hKz/16-bit.</p> </dd> + + + <dd> <p>Audio is muted.</p> </dd> + + + + + <p> </p><p>Defines the version number for sample protection.</p> + + + <dd> <p>No sample protection.</p> </dd> + + + <dd> <p>Version 1.</p> </dd> + + + <dd> <p>Version 2.</p> </dd> + + + <dd> <p>Version 3.</p> </dd> + + + + + <p>Defines flags for the {{MF_TRANSCODE_TOPOLOGYMODE}} attribute.</p> + + + + <p>Defines the profile flags that are set in the {{MF_TRANSCODE_ADJUST_PROFILE}} attribute.</p><p>These flags are checked by <strong>{{MFCreateTranscodeTopology}}</strong> during topology building. Based on these flags, <strong>{{MFCreateTranscodeTopology}}</strong> adjusts the transcode profile by modifying the configuration settings for the streams according to the input requirements of the encoder used in the topology. </p><p>For more information about the stream settings that an application can specify, see Using the Transcode {{API}}.</p> + <p>If the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag is specified, the following changes are made for the video stream:</p><ul> <li>If the frame rate of the media source specified in the <em>pSrc</em> parameter of <strong>{{MFCreateTranscodeTopology}}</strong> and the frame rate specified by the application in the <strong>{{MF_MT_FRAME_RATE}}</strong> attribute differ by less than 1/1000, the profile uses the media source frame rate. This is because the pipeline considers the difference to be negligible.</li> <li>If the application does not specify an interlaced mode by setting the <strong>{{MF_MT_INTERLACE_MODE}}</strong> attribute, the profile is changed to use progressive frames.</li> </ul><p>The <strong>{{MF_TRANSCODE_ADJUST_PROFILE_DEFAULT}}</strong> flag must be accompanied with the required audio and video stream attributes provided by the application. For the audio stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_AUDIO_NUM_CHANNELS}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_SAMPLES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BLOCK_ALIGNMENT}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_AVG_BYTES_PER_SECOND}}</strong> </li> <li> <strong>{{MF_MT_AUDIO_BITS_PER_SAMPLE}}</strong> </li> </ul><p> For the video stream, the required attributes are as follows:</p><ul> <li> <strong>{{MF_MT_FRAME_RATE}}</strong> </li> <li> <strong>{{MF_MT_FRAME_SIZE}}</strong> </li> <li> <strong>{{MF_MT_AVG_BITRATE}}</strong> </li> <li> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </li> </ul><p> If these attributes are not set, <strong>{{MFCreateTranscodeTopology}}</strong> creates the topology but Media Session fails to generate the encoded file. The failure code depends on the {{MFT}} node in the topology. For example, if the application does not set the frame size, the {{WMV}} encoder fails to encode the content and application gets the {{MF_E_INVALIDMEDIATYPE}} error code through the Media Session. </p><p>Use the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag when you want to transcode the file by using the input stream attributes. The input source stream attributes are copied to the output media type before the {{MFT}} node is inserted in the topology. If you set additional stream attributes, this flag does not overwrite the set values. Only the missing attributes are filled with the input source's attribute values. This flag is useful in remux scenario where you want to generate the output file in the same format as the input source. If you want to perform format conversion, make sure you set the <strong>{{MF_MT_SUBTYPE}}</strong> attribute for the stream to specify the encoder that topology builder must use. The transform node is added in the topology unless {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} is set. In this case, and the content is not encoded. Instead, if permitted by the container, the content is embedded in the specified container. </p><p>For example, assume that your input source is an {{MP3}} file. You set the container to be <strong>{{MFTranscodeContainerType_ASF}}</strong>, you do not set any stream attributes, and you set the <strong>{{MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES}}</strong> flag. In this case, the generated output file is an {{ASF}} file (.wma) containing {{MP3}} media data. Note that if you use this flag, certain input stream attributes and the container type might not be compatible. </p> + + + + <p>Defines algorithms for the video processor which is use by {{MF_VIDEO_PROCESSOR_ALGORITHM}}.</p> + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies whether a stream associated with an <strong>{{IMFSensorDevice}}</strong> is an input or an output stream.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Defines the properties of a clock. </p> + + + <dd> <p> The interval at which the clock correlates its clock time with the system time, in 100-nanosecond units. If the value is zero, the correlation is made whenever the <strong>{{IMFClock::GetCorrelatedTime}}</strong> method is called. </p> </dd> + + + <dd> <p> The unique identifier of the underlying device that provides the time. If two clocks have the same unique identifier, they are based on the same device. If the underlying device is not shared between two clocks, the value can be <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> A bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFCLOCK_RELATIONAL_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> The clock frequency in Hz. A value of <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong> means that the clock has a frequency of 10 {{MHz}} (100-nanosecond ticks), which is the standard <strong>{{MFTIME}}</strong> time unit in Media Foundation. If the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the value of this field must be <strong>{{MFCLOCK_FREQUENCY_HNS}}</strong>. </p> </dd> + + + <dd> <p> The amount of inaccuracy that may be present on the clock, in parts per billion (ppb). For example, an inaccuracy of 50 ppb means the clock might drift up to 50 seconds per billion seconds of real time. If the tolerance is not known, the value is <strong>{{MFCLOCK_TOLERANCE_UNKNOWN}}</strong>. This constant is equal to 50 parts per million (ppm). </p> </dd> + + + <dd> <p> The amount of jitter that may be present, in 100-nanosecond units. Jitter is the variation in the frequency due to sampling the underlying clock. Jitter does not include inaccuracies caused by drift, which is reflected in the value of <strong>dwClockTolerance</strong>. </p> <p> For clocks based on a single device, the minimum jitter is the length of the tick period (the inverse of the frequency). For example, if the frequency is 10 Hz, the jitter is 0.1 second, which is 1,000,000 in <strong>{{MFTIME}}</strong> units. This value reflects the fact that the clock might be sampled just before the next tick, resulting in a clock time that is one period less than the actual time. If the frequency is greater than 10 {{MHz}}, the jitter should be set to 1 (the minimum value). </p> <p> If a clock's underlying hardware device does not directly time stamp the incoming data, the jitter also includes the time required to dispatch the driver's interrupt service routine ({{ISR}}). In that case, the expected jitter should include the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_ISR}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the device driver's {{ISR}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_DPC}}</strong></dt> </dl> </td><td> <p> Jitter due to time stamping during the deferred procedure call ({{DPC}}) processing. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCLOCK_JITTER_PASSIVE}}</strong></dt> </dl> </td><td> <p> Jitter due to dropping to normal thread execution before time stamping. </p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Contains information about a revoked component.</p> + + + <dd> <p>Specifies the reason for the revocation. The following values are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_BOOT_DRIVER_VERIFICATION_FAILED}}</strong></dt> </dl> </td><td> <p>A boot driver could not be verified.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>A certificate in a trusted component's certificate chain was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_HS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The high-security certificate for authenticating the protected environment ({{PE}}) was revoked.</p> <p>The high-security certificate is typically used by {{ITAs}} that handle high-definition content and next-generation formats such as {{HD}}-{{DVD}}.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_EKU}}</strong></dt> </dl> </td><td> <p>A certificate's extended key usage ({{EKU}}) object is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_INVALID_ROOT}}</strong></dt> </dl> </td><td> <p>The root certificate is not valid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_LS_CERT_REVOKED}}</strong></dt> </dl> </td><td> <p>The low-security certificate for authenticating the {{PE}} was revoked.</p> <p>The low-security certificate is typically used by {{ITAs}} that handle standard-definition content and current-generation formats.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_COMPONENT_REVOKED}}</strong></dt> </dl> </td><td> <p>A trusted component was revoked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_ABSENT}}</strong></dt> </dl> </td><td> <p>The {{GRL}} was not found.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_GRL_LOAD_FAILED}}</strong></dt> </dl> </td><td> <p>Could not load the global revocation list ({{GRL}}).</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_INVALID_GRL_SIGNATURE}}</strong></dt> </dl> </td><td> <p>The {{GRL}} signature is invalid.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MINCRYPT_FAILURE}}</strong></dt> </dl> </td><td> <p>A certificate chain was not well-formed, or a boot driver is unsigned or is signed with an untrusted certificate.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TEST_SIGNED_COMPONENT_LOADING}}</strong></dt> </dl> </td><td> <p>A component was signed by a test certificate.</p> </td></tr> </table> <p>?</p> <p>In addition, one of the following flags might be present, indicating the type of component that failed to load.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_USER_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>User-mode component.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_KERNEL_MODE_COMPONENT_LOAD}}</strong></dt> </dl> </td><td> <p>Kernel-mode component.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Contains a hash of the file header.</p> </dd> + + + <dd> <p>Contains a hash of the public key in the component's certificate.</p> </dd> + + + <dd> <p>File name of the revoked component.</p> </dd> + + + + + <p> </p><p>Contains information about one or more revoked components.</p> + + + <dd> <p>Revocation information version.</p> </dd> + + + <dd> <p>Number of elements in the <strong>pRRComponents</strong> array.</p> </dd> + + + <dd> <p>Array of <strong>{{MFRR_COMPONENT_HASH_INFO}}</strong> structures.</p> </dd> + + + + + <p> </p><p>Contains an image that is stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Picture</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Picture</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains a picture related to the content, such as album art.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMPicture for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li><strong>{{ASF_FLAT_PICTURE}}</strong> structure. </li> <li> Null-terminated wide-character string that contains the {{MIME}} type. </li> <li> Null-terminated wide-character string that contains a description. </li> <li> <p>Image data.</p> </li> </ul><p>This format differs from the <strong>{{WM_PICTURE}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_PICTURE}}</strong> structure contains internal references to two strings and the image data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_PICTURE}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + + <p> </p><p>Contains synchronized lyrics stored as metadata for a media source. This structure is used as the data item for the <strong>{{WM}}/Lyrics_Synchronised</strong> metadata attribute.</p> + <p>The <strong>{{WM}}/Lyrics_Synchronised</strong> attribute is defined in the Windows Media Format {{SDK}}. The attribute contains lyrics synchronized to times in the source file.</p><p>To get this attribute from a media source, call <strong>{{IMFMetadata::GetProperty}}</strong>, passing in the constant g_wszWMLyrics_Synchronised for the <em>pwszName</em> parameter. The method retrieves a <strong>{{PROPVARIANT}}</strong> that contains a binary array ({{VT_BLOB}}). The layout of the array is as follows:</p><ul> <li> <p><strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure.</p> </li> <li> <p>Null-terminated wide-character string that contains a description.</p> </li> <li> <p>Lyric data. The format of the lyric data is described in the Windows Media Format {{SDK}} documentation.</p> </li> </ul><p>This format differs from the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure used in the Windows Media Format {{SDK}}. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure contains internal references to two strings and the lyric data. If the structure is copied, these references become invalid. The <strong>{{ASF_FLAT_SYNCHRONISED_LYRICS}}</strong> structure does not contain internal references, so it is safe to copy the structure.</p> + + + <dd> <p>Specifies the format of time stamps in the lyrics. This member is equivalent to the <strong>bTimeStampFormat</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure. The <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure is documented in the Windows Media Format {{SDK}}.</p> </dd> + + + <dd> <p>Specifies the type of synchronized strings that are in the lyric data. This member is equivalent to the <strong>bContentType</strong> member in the <strong>{{WM_SYNCHRONISED_LYRICS}}</strong> structure.</p> </dd> + + + <dd> <p>Size, in bytes, of the lyric data.</p> </dd> + + + + + <p>Specifies a new attribute value for a topology node.</p> + <p> Due to an error in the structure declaration, the <strong>u64</strong> member is declared as a 32-bit integer, not a 64-bit integer. Therefore, any 64-bit value passed to the <strong>{{IMFTopologyNodeAttributeEditor::UpdateNodeAttributes}}</strong> method is truncated to 32 bits. </p> + + + <dd> <p> The identifier of the topology node to update. To get the identifier of a topology node, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> {{GUID}} that specifies the attribute to update. </p> </dd> + + + <dd> <p> Attribute type, specified as a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT32}}</strong>. </p> </dd> + + + <dd> <p> Attribute value (unsigned 32-bit integer). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_UINT64}}</strong>. See Remarks. </p> </dd> + + + <dd> <p> Attribute value (floating point). This member is used when <strong>attrType</strong> equals <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>. </p> </dd> + + + + + <p> </p><p>Specifies the buffering requirements of a file.</p> + <p>This structure describes the buffering requirements for content encoded at the bit rate specified in the <strong>dwBitrate</strong>. The <strong>msBufferWindow</strong> member indicates how much data should be buffered before starting playback. The size of the buffer in bytes is <strong>msBufferWinow</strong>?<strong>dwBitrate</strong> / 8000.</p> + + + <dd> <p>Bit rate, in bits per second.</p> </dd> + + + <dd> <p>Size of the buffer window, in milliseconds.</p> </dd> + + + + + <p> </p><p>Specifies the buffering parameters for a network byte stream.</p> + + + <dd> <p>Size of the file, in bytes. If the total size is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Size of the playable media data in the file, excluding any trailing data that is not useful for playback. If this value is unknown, set this member to -1.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MF_LEAKY_BUCKET_PAIR}}</strong> structures. Each member of the array gives the buffer window for a particular bit rate.</p> </dd> + + + <dd> <p>The number of elements in the <strong>prgBuckets</strong> array.</p> </dd> + + + <dd> <p>Amount of data to buffer from the network, in 100-nanosecond units. This value is in addition to the buffer windows defined in the <strong>prgBuckets</strong> member.</p> </dd> + + + <dd> <p>Amount of additional data to buffer when seeking, in 100-nanosecond units. This value reflects the fact that downloading must start from the previous key frame before the seek point. If the value is unknown, set this member to zero.</p> </dd> + + + <dd> <p>The playback duration of the file, in 100-nanosecond units. If the duration is unknown, set this member to zero.</p> </dd> + + + <dd> <p>Playback rate.</p> </dd> + + + + + <p>Specifies a range of bytes.</p> + + + <dd> <p>The offset, in bytes, of the start of the range.</p> </dd> + + + <dd> <p>The offset, in bytes, of the end of the range.</p> </dd> + + + + + <p> </p><p>Contains the authentication information for the credential manager.</p> + + + <dd> <p>The response code of the authentication challenge. For example, {{NS_E_PROXY_ACCESSDENIED}}.</p> </dd> + + + <dd> <p>Set this flag to <strong>{{TRUE}}</strong> if the currently logged on user's credentials should be used as the default credentials.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the authentication package will send unencrypted credentials over the network. Otherwise, the authentication package encrypts the credentials.</p> </dd> + + + <dd> <p>The original {{URL}} that requires authentication.</p> </dd> + + + <dd> <p>The name of the site or proxy that requires authentication.</p> </dd> + + + <dd> <p>The name of the realm for this authentication.</p> </dd> + + + <dd> <p>The name of the authentication package. For example, "Digest" or "{{MBS_BASIC}}".</p> </dd> + + + <dd> <p>The number of times that the credential manager should retry after authentication fails.</p> </dd> + + + + + <p> </p><p>Describes an action requested by an output trust authority ({{OTA}}). The request is sent to an input trust authority ({{ITA}}).</p> + + + <dd> <p>Specifies the action as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains a ticket object, provided by the {{OTA}}.</p> </dd> + + + <dd> <p>Size of the ticket object, in bytes.</p> </dd> + + + + + <p> </p><p>Contains parameters for the <strong>{{IMFInputTrustAuthority::BindAccess}}</strong> or <strong>{{IMFInputTrustAuthority::UpdateAccess}}</strong> method.</p> + + + + <p>Contains information about the audio and video streams for the transcode sink activation object.</p><p>To get the information stored in this structure, call <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong>.</p> + <p>The <strong>{{IMFTranscodeSinkInfoProvider::GetSinkInfo}}</strong> method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-<strong>{{NULL}}</strong> after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> + + + + <p>Contains parameters for the <strong>{{IMFLocalMFTRegistration::RegisterMFTs}}</strong> method.</p> + + + + <p>Contains information about the data that you want to provide as input to a protection system function.</p> + + + <dd> <p>The identifier of the function that you need to run. This value is defined by the implementation of the protection system. </p> </dd> + + + <dd> <p>The size of the private data that the implementation of the security processor implementation reserved. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The size of the data provided as input to the protection system function that you want to run. </p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The data to provide as input to the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for use by the independent hardware vendor ({{IHV}}). Bytes <strong>PrivateDataByteCount</strong> through <strong>{{HWProtectionDataByteCount}}</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the input data for the protection system function. </p> <p>The protection system specification defines the format and size of the {{DRM}} function.</p> </dd> + + + + + <p>Contains information about the data you received as output from a protection system function.</p> + + + <dd> <p>The size of the private data that the implementation of the security processor reserves, in bytes. You can determine this value by calling the <strong>{{IMFContentProtectionDevice::GetPrivateDataByteCount}}</strong> method.</p> </dd> + + + <dd> <p>The maximum size of data that the independent hardware vendor ({{IHV}}) can return in the output buffer, in bytes.</p> </dd> + + + <dd> <p>The size of the data that the {{IHV}} wrote to the output buffer, in bytes.</p> </dd> + + + <dd> <p>The result of the protection system function.</p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent transporting the data. </p> </dd> + + + <dd> <p>The number of 100 nanosecond units spent running the protection system function. +</p> </dd> + + + <dd> <p>The output of the protection system function.</p> <p>If the value of the <strong>PrivateDataByteCount</strong> member is greater than 0, bytes 0 through <strong>PrivateDataByteCount</strong> - 1 are reserved for {{IHV}} use. Bytes <strong>PrivateDataByteCount</strong> through <strong>MaxHWProtectionDataByteCount</strong> + <strong>PrivateDataByteCount</strong> - 1 contain the region of the array into which the driver should return the output data from the protection system function.</p> <p>The protection system specification defines the format and size of the function.</p> </dd> + + + + + <p>Advises the secure processor of the Multimedia Class Scheduler service ({{MMCSS}}) parameters so that real-time tasks can be scheduled at the expected priority.</p> + + + <dd> <p>The identifier for the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread that runs the {{MMCSS}} task.</p> </dd> + + + + + + + + + + + <p>Provides playback controls for protected and unprotected content. The Media Session and the protected media path ({{PMP}}) session objects expose this interface. This interface is the primary interface that applications use to control the Media Foundation pipeline.</p><p>To obtain a reference to this interface, call <strong>{{MFCreateMediaSession}}</strong> or <strong>{{MFCreatePMPMediaSession}}</strong>.</p> + + + + <p> Sets a topology on the Media Session. </p> + <p> If <em>pTopology</em> is a full topology, set the <strong>{{MFSESSION_SETTOPOLOGY_NORESOLUTION}}</strong> flag in the <em>dwSetTopologyFlags</em> parameter. Otherwise, the topology is assumed to be a partial topology. The Media Session uses the topology loader to resolve a partial topology into a full topology.</p><p>If the Media Session is currently paused or stopped, the <strong>SetTopology</strong> method does not take effect until the next call to <strong>{{IMFMediaSession::Start}}</strong>.</p><p>If the Media Session is currently running, or on the next call to <strong>Start</strong>, the <strong>SetTopology</strong> method does the following:</p><ul> <li>If the <strong>{{MFSESSION_SETTOPOLOGY_IMMEDIATE}}</strong> flag is set in <em>dwSetTopologyFlags</em>, the Media Session ends the current presentation immediately, clears all pending topologies, and uses <em>pTopology</em> to start a new presentation.</li> <li>Otherwise, the Media Session queues <em>pTopology</em> and starts the new presentation when the current presentation has completed. If there is no current presentation, the new presentation starts immediately.</li> <li>Starting in Windows?7, you can also specify the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag to clear the current topology but leave any other pending topologies on the queue.</li> </ul><p> This method is asynchronous. If the method returns {{S_OK}}, the Media Session sends an {{MESessionTopologySet}} event when the operation completes. If the Media Session is currently paused to stopped, the Media Session does not send the {{MESessionTopologySet}} event until the next call to <strong>{{IMFMediaSession::Start}}</strong> </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_INVALID_TIME_ATTRIBUTES}}</strong></dt> </dl> </td><td> <p>The topology has invalid values for one or more of the following attributes:</p> <ul> <li> <strong>{{MF_TOPONODE_MEDIASTART}}</strong> </li> <li> <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTART}}</strong> </li> <li> <strong>{{MF_TOPOLOGY_PROJECTSTOP}}</strong> </li> </ul> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_DEBUGGING_NOT_ALLOWED}}</strong></dt> </dl> </td><td> <p> Protected content cannot be played while debugging. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_SETTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p> Pointer to the topology object's <strong>{{IMFTopology}}</strong> interface. </p> </dd> + + + + + <p> </p><p>Clears all of the presentations that are queued for playback in the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionTopologiesCleared}} event.</p><p>This method does not clear the current topology; it only removes topologies that are placed in the queue, waiting for playback. To remove the current topology, call <strong>{{IMFMediaSession::SetTopology}}</strong> with the <strong>{{MFSESSION_SETTOPOLOGY_CLEAR_CURRENT}}</strong> flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + + <p> Starts the Media Session. </p> + <p>When this method is called, the Media Session starts the presentation clock and begins to process media samples.</p><p>This method is asynchronous. When the method completes, the Media Session sends an {{MESessionStarted}} event.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The operation cannot be performed in the Media Session's current state. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a {{GUID}} that specifies the time format for the <em>pvarStartPosition</em> parameter. This parameter can be <strong>{{NULL}}</strong>. The value <strong>{{NULL}}</strong> is equivalent to passing in <strong>{{GUID_NULL}}</strong>.</p> <p>The following time format {{GUIDs}} are defined:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>Presentation time. The <em>pvarStartPosition</em> parameter must have one of the following <strong>{{PROPVARIANT}}</strong> types.</p> <ul> <li><strong>{{VT_I8}}</strong>: The <em>pvarStartPosition</em> parameter contains the starting position in 100-nanosecond units, relative to the start of the presentation.</li> <li><strong>{{VT_EMPTY}}</strong>: Playback starts from the current position.</li> </ul> <p>All media sources support this time format.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong></dt> </dl> </td><td> <p>Segment offset. This time format is supported by the Sequencer Source. The starting time is an offset within a segment.</p> <p>Call the <strong>{{MFCreateSequencerSegmentOffset}}</strong> function to create the <strong>{{PROPVARIANT}}</strong> value for the +<em>pvarStartPosition</em> parameter.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TIME_FORMAT_ENTRY_RELATIVE}}</strong></dt> </dl> </td><td> <strong>Note</strong>??Requires Windows?7 or later. ? <p>Skip to a playlist entry. The <em>pvarStartPosition</em> parameter specifies the index of the playlist entry, relative to the current entry. For example, the value 2 skips forward two entries. To skip backward, pass a negative value. The <strong>{{PROPVARIANT}}</strong> type is <strong>{{VT_I4}}</strong>.</p> <p>If a media source supports this time format, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns one or both of the following flags:</p> <ul> <li><strong>{{MFMEDIASOURCE_CAN_SKIPFORWARD}}</strong></li> <li><strong>{{MFMEDIASOURCE_CAN_SKIPBACKWARD}}</strong></li> </ul> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that specifies the starting position for playback. The meaning and data type of this parameter are indicated by the <em>pguidTimeFormat</em> parameter. </p> </dd> + + + + + <p> </p><p>Pauses the Media Session.</p> + <p>This method pauses the presentation clock.</p><p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionPaused}} event.</p><p>This method fails if the Media Session is stopped.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SESSION_PAUSEWHILESTOPPED}}</strong></dt> </dl> </td><td> <p>The Media Session cannot pause while stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Stops the Media Session.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionStopped}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The operation cannot be performed in the Media Session's current state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Closes the Media Session and releases all of the resources it is using.</p> + <p>This method is asynchronous. When the operation completes, the Media Session sends an {{MESessionClosed}} event.</p><p>After the <strong>Close</strong> method is called, the only valid methods on the Media Session are the following:</p><ul> <li> <p> <strong>{{IMFMediaSession::GetClock}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetFullTopology}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::GetSessionCapabilities}}</strong> </p> </li> <li> <p> <strong>{{IMFMediaSession::Shutdown}}</strong> </p> </li> </ul><p>All other methods return {{MF_E_INVALIDREQUEST}}, or else queue an event with that error code.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the Media Session and releases all the resources used by the Media Session.</p> + <p>Call this method when you are done using the Media Session, before the final call to <strong>{{IUnknown::Release}}</strong>. Otherwise, your application will leak memory.</p><p>After this method is called, other <strong>{{IMFMediaSession}}</strong> methods return {{MF_E_SHUTDOWN}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the Media Session's presentation clock.</p> + <p>The application can query the returned <strong>{{IMFClock}}</strong> reference for the <strong>{{IMFPresentationClock}}</strong> interface. However, the application should not use this interface to control the state of the presentation clock. Instead, the application should always call the transport control methods on the Media Session's <strong>{{IMFMediaSession}}</strong> interface, such as <strong>Start</strong>, <strong>Stop</strong>, and <strong>Pause</strong>.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The Media Session does not have a presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the capabilities of the Media Session, based on the current presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The Media Session has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_PAUSE}}</strong></dt> </dl> </td><td> <p>The Media Session can be paused.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_FORWARD}}</strong></dt> </dl> </td><td> <p>The Media Session supports forward playback at rates faster than 1.0.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_RATE_REVERSE}}</strong></dt> </dl> </td><td> <p>The Media Session supports reverse playback.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_SEEK}}</strong></dt> </dl> </td><td> <p>The Media Session can be seeked.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFSESSIONCAP_START}}</strong></dt> </dl> </td><td> <p>The Media Session can be started.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> Gets a topology from the Media Session.</p><p>This method can get the current topology or a queued topology.</p> + <p> If the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag is specified in the <em>dwGetFullTopologyFlags</em> parameter, the method returns the topology for the current presentation. Otherwise, the method searches all of the queued topologies for one that matches the identifier given in the <em>TopoId</em> parameter. </p><p> This method can be used to retrieve the topology for the current presentation or any pending presentations. It cannot be used to retrieve a topology that has already ended. </p><p> The topology returned in <em>ppFullTopo</em> is a full topology, not a partial topology. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The Media Session has been shut down. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFSESSION_GETFULLTOPOLOGY_FLAGS}}</strong> enumeration. </p> </dd> + + + <dd> <p>The identifier of the topology. This parameter is ignored if the <em>dwGetFullTopologyFlags</em> parameter contains the <strong>{{MFSESSION_GETFULLTOPOLOGY_CURRENT}}</strong> flag. To get the identifier of a topology, call <strong>{{IMFTopology::GetTopologyID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology. The caller must release the interface. </p> </dd> + + + + + <p>Creates a media source from a {{URL}} or a byte stream. The Source Resolver implements this interface. To create the source resolver, call <strong>{{MFCreateSourceResolver}}</strong> function.</p> + + + + <p> Creates a media source or a byte stream from a {{URL}}. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain either the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag, but should not contain both.</p><p>It is recommended that you do not set <strong>{{MF_RESOLUTION_WRITE}}</strong> on the input argument <em>dwFlags</em> unless it is necessary for your scenario. For most use-cases, media sources do not need to be created with write capability. Creating a media source with write capability may have a lower probability of success than creating a media source without write capability. This is because there can be stricter checks on the content represented by the {{URL}} when creating a media source with write capability.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><strong>Note</strong>??This method cannot be called remotely.? + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p> The {{URL}} scheme is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Null-terminated string that contains the {{URL}} to resolve. </p> </dd> + + + <dd> <p> Bitwise {{OR}} of one or more flags. See <strong>Source Resolver Flags</strong>. See remarks below.</p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Creates a media source from a byte stream. This method is synchronous. </p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values (both if possible):</p><ul> <li> Specify the {{URL}} in the <em>pwszURL</em> parameter. </li> <li> Specify the {{MIME}} type by setting the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. (This attribute might be set already when you create the byte stream, depending on how the byte stream was created.) </li> </ul><strong>Note</strong>??This method cannot be called remotely.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p> The <em>dwFlags</em> parameter contains mutually exclusive flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> This byte stream is not supported. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p> Null-terminated string that contains the {{URL}} of the byte stream. The {{URL}} is optional and can be <strong>{{NULL}}</strong>. See Remarks for more information. </p> </dd> + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source or a byte stream from a {{URL}}.</p> + <p>The <em>dwFlags</em> parameter must contain either the {{MF_RESOLUTION_MEDIASOURCE}} flag or the {{MF_RESOLUTION_BYTESTREAM}} flag, but should not contain both.</p><p>For local files, you can pass the file name in the <em>pwszURL</em> parameter; the <code>file:</code> scheme is not required.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromURL}}</strong> to get a reference to the object that was created.</p><p>The usage of the <em>pProps</em> parameter depends on the implementation of the media source. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SCHEME}}</strong></dt> </dl> </td><td> <p>The {{URL}} scheme is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated string that contains the {{URL}} to resolve.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the scheme handler or byte-stream handler that creates the object. The handler can use the property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> Completes an asynchronous request to create an object from a {{URL}}. </p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p> The operation was canceled. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method. </p> </dd> + + + <dd> <p> Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created. </p> </dd> + + + <dd> <p> Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag and should not contain the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag.</p><p>The source resolver attempts to find one or more byte-stream handlers for the byte stream, based on the file name extension of the {{URL}}, or the {{MIME}} type of the byte stream (or both). The {{URL}} is specified in the optional <em>pwszURL</em> parameter, and the {{MIME}} type may be specified in the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute on the byte stream. Byte-stream handlers are registered by file name extension or {{MIME}} type, or both, as described in Scheme Handlers and Byte-Stream Handlers. The caller should specify at least one of these values.</p><p>When the operation completes, the source resolver calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFSourceResolver::EndCreateObjectFromByteStream}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS}}</strong></dt> </dl> </td><td> <p>The <em>dwFlags</em> parameter contains mutually exclusive flags.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p>The byte stream is not supported.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream does not support seeking.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the byte stream's <strong>{{IMFByteStream}}</strong> interface. </p> </dd> + + + <dd> <p>A null-terminated string that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of one or more flags. See <strong>Source Resolver Flags</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IPropertyStore}}</strong> interface of a property store. The method passes the property store to the byte-stream handler. The byte-stream handler can use the property store to configure the media source. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source. </p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFSourceResolver::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A oointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source from a byte stream.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The application canceled the operation.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Cancels an asynchronous request to create an object. </p> + <p> You can use this method to cancel a previous call to <strong>BeginCreateObjectFromByteStream</strong> or <strong>BeginCreateObjectFromURL</strong>. Because these methods are asynchronous, however, they might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method. </p><strong>Note</strong>??This method cannot be called remotely.? + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSourceResolver::BeginCreateObjectFromByteStream}}</strong> or <strong>{{IMFSourceResolver::BeginCreateObjectFromURL}}</strong> method. </p> </dd> + + + + + <p>Implemented by media source objects.</p><p>Media sources are objects that generate media data. For example, the data might come from a video file, a network stream, or a hardware device, such as a camera. Each media source contains one or more streams, and each stream delivers data of one type, such as audio or video.</p> + <p>In Windows?8, this interface is extended with <strong>{{IMFMediaSourceEx}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the media source.</p> + <p>The characteristics of a media source can change at any time. If this happens, the source sends an {{MESourceCharacteristicsChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves a copy of the media source's presentation descriptor. Applications use the presentation descriptor to select streams and to get information about the source content.</p> + <p>The presentation descriptor contains the media source's default settings for the presentation. The application can change these settings by selecting or deselecting streams, or by changing the media type on a stream. Do not modify the presentation descriptor unless the source is stopped. The changes take affect when the source's <strong>{{IMFMediaSource::Start}}</strong> method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation descriptor's <strong>{{IMFPresentationDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Starts, seeks, or restarts the media source by specifying where to start playback.</p> + <p>This method is asynchronous. If the operation succeeds, the media source sends the following events:</p><ul> <li> For each new stream, the source sends an {{MENewStream}} event. This event is sent for the first <strong>Start</strong> call in which the stream appears. The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> For each <em>updated</em> stream, the source sends an {{MEUpdatedStream}} event. A stream is updated if the stream already existed when <strong>Start</strong> was called (for example, if the application seeks during playback). The event data is a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface. </li> <li> If the previous state was stopped, the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused and the starting position is the current position (<strong>{{VT_EMPTY}}</strong>), the source sends an {{MESourceStarted}} event. </li> <li> If the previous state was started or paused, and a new starting position is specified, the source sends an {{MESourceSeeked}} event. </li> <li> If the source sends an {{MESourceStarted}} event, each media stream sends an {{MEStreamStarted}} event. If the source sends an {{MESourceSeeked}} event, each stream sends an {{MEStreamSeeked}} event. </li> </ul><p> If the start operation fails asynchronously (after the method returns <strong>{{S_OK}}</strong>), the media source sends an {{MESourceStarted}} event that contains a failure code, without sending any of the other events listed here. If the method fails synchronously (returns an error code), no events are raised. </p><p> A call to <strong>Start</strong> results in a <em>seek</em> if the previous state was started or paused, and the new starting position is not <strong>{{VT_EMPTY}}</strong>. Not every media source can seek. If a media source can seek, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the <strong>{{MFMEDIASOURCE_CAN_SEEK}}</strong> flag. </p><p> Events from the media source are not synchronized with events from the media streams. If you seek a media source, therefore, you can still receive samples from the earlier position after getting the {{MESourceSeeked}} event. If you need to synchronize the operations, wait for the stream event, {{MEStreamSeeked}}, which marks the exact point in the stream where the seek occurs. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ASF_OUTOFRANGE}}</strong></dt> </dl> </td><td> <p> The start position is past the end of the presentation ({{ASF}} media source). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_HW_MFT_FAILED_START_STREAMING}}</strong></dt> </dl> </td><td> <p>A hardware device was unable to start streaming. This error code can be returned by a media source that represents a hardware device, such as a camera. For example, if the camera is already being used by another application, the method might return this error code.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The start request is not valid. For example, the start position is past the end of the presentation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The media source's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p> The media source does not support the time format specified in <em>pguidTimeFormat</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get the presentation descriptor, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. You can modify the presentation descriptor before calling <strong>Start</strong>, to select or deselect streams or change the media types. </p> </dd> + + + <dd> <p> Pointer to a {{GUID}} that specifies the time format. The time format defines the units for the <em>pvarStartPosition</em> parameter. If the value <em></em> is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. This parameter can be <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, it is equalivent to <strong>{{GUID_NULL}}</strong>. </p> </dd> + + + <dd> <p> Specifies where to start playback. The units of this parameter are indicated by the time format given in <em>pguidTimeFormat</em>. If the time format is <strong>{{GUID_NULL}}</strong>, the variant type must be <strong>{{VT_I8}}</strong> or <strong>{{VT_EMPTY}}</strong>. Use <strong>{{VT_I8}}</strong> to specify a new starting position, in 100-nanosecond units. Use <strong>{{VT_EMPTY}}</strong> to start from the current position. Other time formats might use other <strong>{{PROPVARIANT}}</strong> types. </p> </dd> + + + + + <p> </p><p>Stops all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourceStopped}} event, and every active stream sends an {{MEStreamStopped}} event. If the method returns a failure code, no events are raised.</p><p>When a media source is stopped, its current position reverts to zero. After that, if the <strong>Start</strong> method is called with {{VT_EMPTY}} for the starting position, playback starts from the beginning of the presentation.</p><p>While the source is stopped, no streams produce data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses all active streams in the media source.</p> + <p>This method is asynchronous. When the operation completes, the media source sends and {{MESourcePaused}} event, and every active stream sends an {{MEStreamPaused}} event. If the method returns a failure code, no events are raised.</p><p>The media source must be in the started state. The method fails if the media source is paused or stopped.</p><p>While the source is paused, calls to <strong>{{IMFMediaStream::RequestSample}}</strong> succeed, but the streams will not deliver any samples until after the source is started again. Note that the source's event queue is not serialized with the stream event queues, so the client might receive some samples after the {{MESourcePaused}} event, due to multi-threading issues. But the client will not receive any samples from a stream after the {{MEStreamPaused}} event.</p><p>Not every media source can pause. If a media source can pause, the <strong>{{IMFMediaSource::GetCharacteristics}}</strong> method returns the {{MFMEDIASOURCE_CAN_PAUSE}} flag.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>Invalid state transition. The media source must be in the started state.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Shuts down the media source and releases the resources it is using.</p> + <p>If the application creates the media source, either directly or through the source resolver, the application is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks.</p><p>After this method is called, methods on the media source and all of its media streams return {{MF_E_SHUTDOWN}} (except for <strong>{{IUnknown}}</strong> methods).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFMediaSource}}</strong> interface to provide additional capabilities for a media source.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media source. </p> + <p>Implementations of this interface can return <strong>{{E_NOTIMPL}}</strong> for any methods that are not required by the media source.</p> + + + + <p>Gets an attribute store for the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the entire source. For stream-level attributes, use the <strong>{{IMFMediaSourceEx::GetStreamAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute store for a stream on the media source.</p> + <p>Use the <strong>{{IMFAttributes}}</strong> reference to get or set attributes that apply to the specified stream. For attributes that apply to the entire source, use the <strong>{{IMFMediaSourceEx::GetSourceAttributes}}</strong> method instead.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support stream-level attributes.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream identifier.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The identifier of the stream. To get the identifier, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong> on the stream descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets a reference to the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager on the media source.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The media source does not support source-level attributes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{DXGI}} Manager. The media source should query this reference for the <strong>{{IMFDXGIDeviceManager}}</strong> interface.</p> </dd> + + + + + <p> Creates a media source or a byte stream from a {{URL}}. </p> + <p>Applications do not use this interface. This interface is exposed by scheme handlers, which are used by the source resolver. A scheme handler is designed to parse one type of {{URL}} scheme. When the scheme handler is given a {{URL}}, it parses the resource that is located at that {{URL}} and creates either a media source or a byte stream.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called by the media pipeline to provide the app with an instance of <strong>{{IMFPresentationClock}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Represents one stream in a media source. </p> + <p>Streams are created when a media source is started. For each stream, the media source sends an {{MENewStream}} event with a reference to the stream's <strong>{{IMFMediaStream}}</strong> interface.</p> + + + + <p> </p><p>Retrieves a reference to the media source that created this media stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a stream descriptor for this media stream.</p> + <p>Do not modify the stream descriptor. To change the presentation, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> and modify the presentation descriptor.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media source's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Requests a sample from the media source. </p> + <p>If <em>pToken</em> is not <strong>{{NULL}}</strong>, the media stream calls <strong>AddRef</strong> on <em>pToken</em> and places the token in a first-in, first-out queue.</p><p>When the next sample is available, the media stream stream does the following:</p><ol> <li> Pulls the first token from the queue. </li> <li> Sets the <strong>{{MFSampleExtension_Token}}</strong> attribute on the media sample. The attribute data is a reference to the token object. </li> <li> Sends an {{MEMediaSample}} event. The event data is a reference to the media sample's <strong>{{IMFSample}}</strong> interface. </li> <li> Calls <strong>Release</strong> on the token. </li> </ol><p>If the media stream cannot fulfill the caller's request for a sample, it simply releases the token object and skips steps 2 and 3.</p><p>The caller should monitor the reference count on the request token. If the media stream sends an {{MEMediaSample}} event, get the <strong>{{MFSampleExtension_Token}}</strong> attribute from the sample and match the attribute value against the token. If the token's reference count falls to zero and you did not receive an {{MEMediaSample}} event, it means that the request was dropped.</p><p>Because the Media Foundation pipeline is multithreaded, the source's <strong>RequestSample</strong> method might get called after the source has stopped. If the media source is stopped, the method should return <strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong>. The pipeline does not treat this return code as an error condition. If the source returns any other error code, the pipeline treats it as fatal error and halts the session.</p><strong>Note</strong>??Earlier versions of the documentation listed the wrong error code for this case.?<p>If the media source is paused, the method succeeds, but the stream does not deliver the sample until the source is started again.</p><p>If a media source enounters an error asynchronously while processing data, it should signal the error in one of the following ways (but not both):</p><ul> <li>Return an error code from the next <strong>RequestSample</strong> call.</li> <li>Send an {{MEError}} event.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_END_OF_STREAM}}</strong></dt> </dl> </td><td> <p> The end of the stream was reached. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_WRONGSTATE}}</strong></dt> </dl> </td><td> <p> The media source is stopped.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p> The source's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface to an object that is used as a token for the request. The caller must implement this object. This parameter can be <strong>{{NULL}}</strong>. See Remarks.</p> </dd> + + + + + <p>Implemented by media sink objects. This interface is the base interface for all Media Foundation media sinks. Stream sinks handle the actual processing of data on each stream.</p> + + + + <p> </p><p>Gets the characteristics of the media sink.</p> + <p> The characteristics of a media sink are fixed throughout the life time of the sink. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_FIXED_STREAMS}}</strong></strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The media sink has a fixed number of streams. It does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> and <strong>{{IMFMediaSink::RemoveStreamSink}}</strong> methods. This flag is a hint to the application. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CANNOT_MATCH_CLOCK}}</strong></strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The media sink cannot match rates with an external clock.</p> <p>For best results, this media sink should be used as the time source for the presentation clock. If any other time source is used, the media sink cannot match rates with the clock, with poor results (for example, glitching).</p> <p>This flag should be used sparingly, because it limits how the pipeline can be configured.</p> <p>For more information about the presentation clock, see Presentation Clock.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_RATELESS}}</strong></strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The media sink is rateless. It consumes samples as quickly as possible, and does not synchronize itself to a presentation clock.</p> <p>Most archiving sinks are rateless.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CLOCK_REQUIRED}}</strong></strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The media sink requires a presentation clock. The presentation clock is set by calling the media sink's <strong>{{IMFMediaSink::SetPresentationClock}}</strong> method.</p> <p>This flag is obsolete, because all media sinks must support the <strong>SetPresentationClock</strong> method, even if the media sink ignores the clock (as in a rateless media sink).</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_CAN_PREROLL}}</strong></strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p> The media sink can accept preroll samples before the presentation clock starts. The media sink exposes the <strong>{{IMFMediaSinkPreroll}}</strong> interface. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE}}</strong></strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>The first stream sink (index 0) is a reference stream. The reference stream must have a media type before the media types can be set on the other stream sinks.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Adds a new stream sink to the media sink.</p> + <p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>If <em>pMediaType</em> is <strong>{{NULL}}</strong>, use the <strong>{{IMFMediaTypeHandler}}</strong> interface to set the media type. Call <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong> to get a reference to the interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The specified stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_EXISTS}}</strong></dt> </dl> </td><td> <p>There is already a stream sink with the same stream identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. New stream sinks cannot be added.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier for the new stream. The value is arbitrary but must be unique.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface, specifying the media type for the stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the new stream sink's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Removes a stream sink from the media sink.</p> + <p>After this method is called, the corresponding stream sink object is no longer valid. The <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong> and <strong>{{IMFMediaSink::GetStreamSinkById}}</strong> methods will no longer return that stream sink. You can re-use the stream identifier if you add another stream (by calling <strong>AddStreamSink</strong>).</p><p>Not all media sinks support this method. If the media sink does not support this method, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_FIXED_STREAMS}} flag.</p><p>In some cases, the media sink supports this method but does not allow every stream sink to be removed. (For example, it might not allow stream 0 to be removed.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>This particular stream sink cannot be removed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream number is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The media sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINKS_FIXED}}</strong></dt> </dl> </td><td> <p>This media sink has a fixed set of stream sinks. Stream sinks cannot be removed.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifier of the stream to remove. The stream identifier is defined when you call <strong>{{IMFMediaSink::AddStreamSink}}</strong> to add the stream sink.</p> </dd> + + + + + <p> </p><p>Gets the number of stream sinks on this media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of stream sinks.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by index.</p> + <p>Enumerating stream sinks is not a thread-safe operation, because stream sinks can be added or removed between calls to this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaSink::GetStreamSinkCount}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Gets a stream sink, specified by stream identifier.</p> + <p>If you add a stream sink by calling the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method, the stream identifier is specified in the <em>dwStreamSinkIdentifier</em> parameter of that method. If the media sink has a fixed set of streams, the media sink assigns the stream identifiers.</p><p>To enumerate the streams by index number instead of stream identifier, call <strong>{{IMFMediaSink::GetStreamSinkByIndex}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream identifier is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream identifier of the stream sink.</p> </dd> + + + <dd> <p>Receives a reference to the stream's <strong>{{IMFStreamSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the presentation clock on the media sink.</p> + <p>During streaming, the media sink attempts to match rates with the presentation clock. Ideally, the media sink presents samples at the correct time according to the presentation clock and does not fall behind. Rateless media sinks are an exception to this rule, as they consume samples as quickly as possible and ignore the clock. If the sink is rateless, the <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method returns the {{MEDIASINK_RATELESS}} flag.</p><p>The presentation clock must have a time source. Before calling this method, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> on the presentation clock to set the presentation time source. Some media sinks provide time sources; therefore, the media sink might be the time source for its own presentation clock. Regardless of what object provides the time source, however, the media sink must attempt to match rates with the clock specified in <em>pPresentationClock</em>. If a media sink cannot match rates with an external time source, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method retrieves the {{MEDIASINK_CANNOT_MATCH_CLOCK}} flag. In this case, <strong>SetPresentationClock</strong> will still succeed, but the results will not be optimal. The sink might not render samples quickly enough to match rates with the presentation clock.</p><p>If <em>pPresentationClock</em> is non-<strong>{{NULL}}</strong>, the media sink must register for clock state notifications, by calling <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock. If the method is called again with a new presentation clock, or if <em>pPresentationClock</em> is <strong>{{NULL}}</strong>, the media sink must call <strong>{{IMFPresentationClock::RemoveClockStateSink}}</strong> to deregister itself from the previous clock.</p><p>All media sinks must support this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>The presentation clock does not have a time source. Call <strong>SetTimeSource</strong> on the presentation clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock, or <strong>{{NULL}}</strong>. If the value is <strong>{{NULL}}</strong>, the media sink stops listening to the presentaton clock that was previously set, if any.</p> </dd> + + + + + <p> </p><p>Gets the presentation clock that was set on the media sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>No clock has been set. To set the presentation clock, call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Shuts down the media sink and releases the resources it is using.</p> + <p>If the application creates the media sink, it is responsible for calling <strong>Shutdown</strong> to avoid memory or resource leaks. In most applications, however, the application creates an activation object for the media sink, and the Media Session uses that object to create the media sink. In that case, the Media Session ? not the application ? shuts down the media sink. (For more information, see Activation Objects.)</p><p>After this method returns, all methods on the media sink return {{MF_E_SHUTDOWN}}, except for <strong>{{IUnknown}}</strong> methods and <strong>{{IMFMediaEventGenerator}}</strong> methods. The sink will not raise any events after this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink was shut down.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a stream on a media sink object.</p> + + + + <p> </p><p>Retrieves the media sink that owns this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves the stream identifier for this stream sink.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the stream identifier. If this stream sink was added by calling <strong>{{IMFMediaSink::AddStreamSink}}</strong>, the stream identifier is in the <em>dwStreamSinkIdentifier</em> parameter of that method. Otherwise, the media sink defines the identifier.</p> </dd> + + + + + + + + <p> </p><p>Delivers a sample to the stream. The media sink processes the sample.</p> + <p>Call this method when the stream sink sends an {{MEStreamSinkRequestSample}} event.</p><p>This method can return {{MF_E_INVALID_TIMESTAMP}} for various reasons, depending on the implementation of the media sink:</p><ul> <li> <p>Negative time stamps.</p> </li> <li> <p>Time stamps that jump backward (within the same stream).</p> </li> <li> <p>The time stamps for one stream have drifted too far from the time stamps on another stream within the same media sink (for example, an archive sink that multiplexes the streams).</p> </li> </ul><p>Not every media sink returns an error code in these situations.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STATE_TRANSITION}}</strong></dt> </dl> </td><td> <p>The media sink is in the wrong state to receive a sample. For example, preroll is complete but the presenation clock has not started yet.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample has an invalid time stamp. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The media sink is paused or stopped and cannot process the sample.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>The presentation clock was not set. Call <strong>{{IMFMediaSink::SetPresentationClock}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a time stamp.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of a sample that contains valid data for the stream.</p> </dd> + + + + + <p> </p><p>Places a marker in the stream. </p> + <p>This method causes the stream sink to send an {{MEStreamSinkMarker}} event after the stream sink consumes all of the samples that were delivered up to this point (before the call to <strong>PlaceMarker</strong>).</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_SHUTDOWN}}</strong></strong></dt> </dl> </td><td> <p> The media sink's <strong>Shutdown</strong> method has been called. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></strong></dt> </dl> </td><td> <p> This stream was removed from the media sink and is no longer valid. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the marker type, as a member of the <strong>{{MFSTREAMSINK_MARKER_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that contains additional information related to the marker. The meaning of this value depends on the marker type. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Optional reference to a <strong>{{PROPVARIANT}}</strong> that is attached to the {{MEStreamSinkMarker}} event. Call <strong>{{IMFMediaEvent::GetValue}}</strong> to get this value from the event. The caller can use this information for any purpose. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Causes the stream sink to drop any samples that it has received and has not rendered yet.</p> + <p>If any samples are still queued from previous calls to the <strong>{{IMFStreamSink::ProcessSample}}</strong> method, the media sink immediately discards them, without processing them. This can cause a glitch in the rendered output. The running state of the sink (running, paused, or stopped) does not change.</p><p>Any pending marker events from the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method are dispatched immediately, with the status code {{E_ABORT}}.</p><p>This method is synchronous. It does not return until the sink has discarded all pending samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The stream sink has not been initialized yet. You might need to set a media type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The media sink's <strong>Shutdown</strong> method has been called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>This stream was removed from the media sink and is no longer valid.</p> </td></tr> </table><p>?</p> + + + + <p>Allocates video samples for a video media sink.</p><p>The stream sinks on the enhanced video renderer ({{EVR}}) expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier {{MR_VIDEO_ACCELERATION_SERVICE}}. Custom media sinks can also implement this interface. The Media Session uses this interface to allocate samples for the {{EVR}}, unless the upstream decoder supports DirectX Video Acceleration ({{DXVA}}).</p> + + + + <p> </p><p>Specifies the Direct3D device manager for the video media sink to use.</p> + <p>The media sink uses the Direct3D device manager to obtain a reference to the Direct3D device, which it uses to allocate Direct3D surfaces. The device manager enables multiple objects in the pipeline (such as a video renderer and a video decoder) to share the same Direct3D device.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of the Direct3D device manager. The media sink queries this reference for the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Releases all of the video samples that have been allocated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Specifies the number of samples to allocate and the media type for the samples. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>Invalid media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of samples to allocate. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Gets a video sample from the allocator. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The allocator was not initialized. Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocator}}</strong> or <strong>InitializeSampleAllocatorEx::InitializeSampleAllocatorEx</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SAMPLEALLOCATOR_EMPTY}}</strong></dt> </dl> </td><td> <p> No samples are available. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released and then returned to the pool of available samples, the allocator invokes the <strong>NotifyRelease</strong> method. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The callback for the <strong>{{IMFVideoSampleAllocatorCallback}}</strong> interface.</p> + + + + <p>Called when allocator samples are released for pruning by the allocator, or when the allocator is removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample to be pruned.</p> </dd> + + + + + <p>Enables an application to track video samples allocated by the enhanced video renderer ({{EVR}}).</p><p>The stream sinks on the {{EVR}} expose this interface as a service. To get a reference to the interface, call the <strong>{{IMFGetService::GetService}}</strong> method, using the <strong>{{MR_VIDEO_ACCELERATION_SERVICE}}</strong> service identifier.</p> + + + + <p>Sets the callback object that receives notification whenever a video sample is returned to the allocator.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. When the sample is released, it returns to the pool of available samples. When this happens, the allocator invokes the <strong>{{IMFVideoSampleAllocatorNotify::NotifyRelease}}</strong> callback.</p><p>The allocator holds at most one callback reference. Calling this method again replaces the previous callback reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFVideoSampleAllocatorNotify}}</strong> interface that receives notification, or <strong>{{NULL}}</strong> to remove the callback.</p> </dd> + + + + + <p>Gets the number of video samples that are currently available for use.</p> + <p>To get a video sample from the allocator, call the <strong>{{IMFVideoSampleAllocator::AllocateSample}}</strong> method. The <strong>AllocateSample</strong> method removes a sample from the sample pool and returns it to the caller. When a sample is released, it returns to the pool. The <strong>GetFreeSampleCount</strong> method returns the count of samples that remain in the sample pool.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of available samples.</p> </dd> + + + + + <p>Allocates video samples that contain Microsoft Direct3D?11 texture surfaces.</p> + <p>You can use this interface to allocateDirect3D?11 video samples, rather than allocate the texture surfaces and media samples directly. To get a reference to this interface, call the <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> function. </p><p>To allocate video samples, perform the following steps:</p><ol> <li>Obtain a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. For a Media Foundation transform ({{MFT}}), this step occurs during the <strong>{{MFT_MESSAGE_SET_D3D_MANAGER}}</strong> event.</li> <li>Call <strong>{{MFCreateVideoSampleAllocatorEx}}</strong> to create the allocator object and get a reference to the <strong>{{IMFVideoSampleAllocatorEx}}</strong> interface.</li> <li>Call <strong>{{IMFVideoSampleAllocator::SetDirectXManager}}</strong> on the allocator to set the <strong>{{IMFDXGIDeviceManager}}</strong> reference on the allocator.</li> <li>Call <strong>{{MFCreateAttributes}}</strong> to get a reference to the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Set the {{MF_SA_D3D11_USAGE}} and {{MF_SA_D3D11_BINDFLAGS}} attributes.</li> <li>Call <strong>{{IMFVideoSampleAllocator::InitializeSampleAllocatorEx}}</strong>.</li> </ol> + + + + <p>Initializes the video sample allocator object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The initial number of samples to allocate. </p> </dd> + + + <dd> <p>The maximum number of samples to allocate.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this interface to configure the allocator. Currently, the following configuration attributes are defined:</p> <ul> <li> {{MF_SA_BUFFERS_PER_SAMPLE}} </li> <li> {{MF_SA_D3D11_BINDFLAGS}} </li> <li> {{MF_SA_D3D11_USAGE}} </li> <li> {{MF_SA_D3D11_SHARED}} </li> <li> {{MF_SA_D3D11_SHARED_WITHOUT_MUTEX}} </li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type that describes the video format. </p> </dd> + + + + + <p>Provides functionality for getting the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + + + + <p>Gets the <strong>{{IMFDXGIDeviceManager}}</strong> from the Microsoft Media Foundation video rendering sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>Sets the border color.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color as an {{ARGB}} (alpha, red, green, blue) value.</p> </dd> + + + + + <p>Sets the source rectangle. The source rectangle is the portion of the input frame that is blitted to the destination surface.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the source rectangle.</p> </dd> + + + + + <p>Sets the destination rectangle. The destination rectangle is the portion of the output surface where the source rectangle is blitted.</p> + <p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + + + <p>Specifies whether to flip the video image.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_VIDEO_PROCESSOR_MIRROR}}</strong> value that specifies whether to flip the video image, either horizontally or vertically.</p> </dd> + + + + + <p>Specifies whether to rotate the video to the correct orientation.</p> + <p>The original orientation of the video is specified by the {{MF_MT_VIDEO_ROTATION}} attribute of the input media type.</p><p> If <em>eRotation</em> is <strong>{{ROTATION_NONE}}</strong>, the video processor does not correct the orientation of the output video. If the original video is rotated, and <em>eRotation</em> is <strong>{{ROTATION_NORMAL}}</strong>, the video processor corrects the orientation, so that the ouput video is not rotated. The video processor letterboxes the output as needed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A <strong>{{MF_VIDEO_PROCESSOR_ROTATION}}</strong> value that specifies whether to rotate the image.</p> </dd> + + + + + <p>Specifies the amount of downsampling to perform on the output.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sampling size. To disable constriction, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Configures the <strong>Video Processor {{MFT}}</strong>.</p> + <p>This interface controls how the <strong>Video Processor {{MFT}}</strong> generates output frames.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Overrides the rotation operation that is performed in the video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Rotation value in degrees. Typically, you can only use values from the <strong>{{MFVideoRotationFormat}}</strong> enumeration.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables effects that were implemented with <strong>{{IDirectXVideoProcessor::VideoProcessorBlt}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Returns the list of supported effects in the currently configured video processor.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A combination of <strong>{{D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies the list of suppported effect capabilities.</p> </dd> + + + + + <p>Represents a topology. A <em>topology</em> describes a collection of media sources, sinks, and transforms that are connected in a certain order. These objects are represented within the topology by <em>topology nodes</em>, which expose the <strong>{{IMFTopologyNode}}</strong> interface. A topology describes the path of multimedia data through these nodes.</p><p>To create a topology, call <strong>{{MFCreateTopology}}</strong>.</p> + + + + <p> Gets the identifier of the topology.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the identifier, as a <strong>{{TOPOID}}</strong> value. </p> </dd> + + + + + <p> </p><p>Adds a node to the topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pNode</em> is invalid, possibly because the node already exists in the topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a node from the topology.</p> + <p>This method does not destroy the node, so the <strong>{{IMFTopologyNode}}</strong> reference is still valid after the method returns.</p><p>The method breaks any connections between the specified node and other nodes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified node is not a member of this topology.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the node's <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + + + <p> Gets the number of nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of nodes. </p> </dd> + + + + + <p> Gets a node in the topology, specified by index. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The index is less than zero. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p> No node can be found at the index <em>wIndex</em>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The zero-based index of the node. To get the number of nodes in the topology, call <strong>{{IMFTopology::GetNodeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the reference. </p> </dd> + + + + + <p> </p><p>Removes all nodes from the topology.</p> + <p>You do not need to clear a topology before disposing of it. The <strong>Clear</strong> method is called automatically when the topology is destroyed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Converts this topology into a copy of another topology. </p> + <p>This method does the following:</p><ul> <li> Removes all of the nodes from this topology. </li> <li> Clones the nodes from <em>pTopology</em> and adds them to this topology. The cloned nodes have the same node identifiers as the nodes from <em>pTopology</em>. </li> <li> Connects the cloned nodes to match the connections in <em>pTopology</em>. </li> <li> Copies the attributes from <em>pTopology</em> to this topology. </li> <li> Copies the topology identifier from <em>pTopology</em> to this topology.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the topology to clone. </p> </dd> + + + + + <p>Gets a node in the topology, specified by node identifier.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The topology does not contain a node with this identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier of the node to retrieve. To get a node's identifier, call <strong>{{IMFTopologyNode::GetTopoNodeID}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the source nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the source nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty.</p> </dd> + + + + + <p> Gets the output nodes in the topology. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface. The caller must release the reference. The collection contains <strong>{{IUnknown}}</strong> references to all of the output nodes in the topology. Each reference can be queried for the <strong>{{IMFTopologyNode}}</strong> interface. The collection might be empty. </p> </dd> + + + + + <p>Represents a node in a topology. The following node types are supported:</p><ul> <li> Output node. Represents a media sink. </li> <li> Source node. Represents a media stream. </li> <li> Transform node. Represents a Media Foundation Transform ({{MFT}}). </li> <li> Tee node. Delivers a media stream to two or more nodes. </li> </ul><p>To create a new node, call the <strong>{{MFCreateTopologyNode}}</strong> function.</p> + + + + <p> </p><p>Sets the object associated with this node.</p> + <p>All node types support this method, but the object reference is not used by every node type.</p><table> <tr><th>Node type</th><th>Object reference</th></tr> <tr><td>Source node.</td><td>Not used.</td></tr> <tr><td>Transform node.</td><td> <strong>{{IMFTransform}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Output node</td><td> <strong>{{IMFStreamSink}}</strong> or <strong>{{IMFActivate}}</strong> interface.</td></tr> <tr><td>Tee node.</td><td>Not used.</td></tr> </table><p>?</p><p>If the object supports <strong>{{IPersist}}</strong>, <strong>{{IPersistStorage}}</strong>, or <strong>{{IPersistPropertyBag}}</strong>, the method gets the object's {{CLSID}} and sets the <strong>{{MF_TOPONODE_TRANSFORM_OBJECTID}}</strong> attribute on the node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the object's <strong>{{IUnknown}}</strong> interface. Use the value <strong>{{NULL}}</strong> to clear an object that was previous set.</p> </dd> + + + + + <p> Gets the object associated with this node. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p> There is no object associated with this node. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the node type.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the node type, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> Retrieves the identifier of the node.</p> + <p> When a node is first created, it is assigned an identifier. Node identifiers are unique within a topology, but can be reused across several topologies. The topology loader uses the identifier to look up nodes in the previous topology, so that it can reuse objects from the previous topology. </p><p> To find a node in a topology by its identifier, call <strong>{{IMFTopology::GetNodeByID}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the identifier.</p> </dd> + + + + + <p> Sets the identifier for the node.</p> + <p> When a node is first created, it is assigned an identifier. Typically there is no reason for an application to override the identifier. Within a topology, each node identifier should be unique. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <strong>{{TOPOID}}</strong> has already been set for this object. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The identifier for the node. </p> </dd> + + + + + <p> </p><p>Retrieves the number of input streams that currently exist on this node.</p> + <p>The input streams may or may not be connected to output streams on other nodes. To get the node that is connected to a specified input stream, call <strong>{{IMFTopologyNode::GetInput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetInputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of input streams.</p> </dd> + + + + + <p> </p><p>Retrieves the number of output streams that currently exist on this node.</p> + <p>The output streams may or may not be connected to input streams on other nodes. To get the node that is connected to a specific output stream on this node, call <strong>{{IMFTopologyNode::GetOutput}}</strong>.</p><p>The <strong>{{IMFTopologyNode::ConnectOutput}}</strong> and <strong>{{IMFTopologyNode::SetOutputPrefType}}</strong> methods add new input streams as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of output streams.</p> </dd> + + + + + <p> </p><p>Connects an output stream from this node to the input stream of another node.</p> + <p>Node connections represent data flow from one node to the next. The streams are logical, and are specified by index.</p><p>If the node is already connected at the specified output, the method breaks the existing connection. If <em>dwOutputIndex</em> or <em>dwInputIndexOnDownstreamNode</em> specify streams that do not exist yet, the method adds as many streams as needed.</p><p>This method checks for certain invalid conditions:</p><ul> <li> <p>An output node cannot have any output connections. If you call this method on an output node, the method returns {{E_FAIL}}.</p> </li> <li> <p>A node cannot be connected to itself. If <em>pDownstreamNode</em> specifies the same node as the method call, the method returns {{E_INVALIDARG}}.</p> </li> </ul><p>However, if the method succeeds, it does not guarantee that the node connection is valid. It is possible to create a partial topology that the topology loader cannot resolve. If so, the <strong>{{IMFTopoLoader::Load}}</strong> method will fail.</p><p>To break an existing node connection, call <strong>{{IMFTopologyNode::DisconnectOutput}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>The method failed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid parameter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream on this node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the node to connect to.</p> </dd> + + + <dd> <p>Zero-based index of the input stream on the other node.</p> </dd> + + + + + <p> </p><p>Disconnects an output stream on this node.</p> + <p>If the specified output stream is connected to another node, this method breaks the connection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>dwOutputIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified output stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream to disconnect.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified input stream on this node.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified input stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the output stream that is connected to this node's input stream.</p> </dd> + + + + + <p> </p><p>Retrieves the node that is connected to a specified output stream on this node.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified input stream is not connected to another node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on this node.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node that is connected to the specified output stream. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives the index of the input stream that is connected to this node's output stream.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an output stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no output stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an output stream on this node.</p> + <p>Output nodes cannot have outputs. If this method is called on an output node, it returns {{E_NOTIMPL}}.</p><p>The preferred output type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred output type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred output type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is an output node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the output stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Sets the preferred media type for an input stream on this node.</p> + <p>The preferred type is a hint for the topology loader.</p><p>Do not call this method after loading a topology or setting a topology on the Media Session. Changing the preferred type on a running topology can cause connection errors.</p><p>If no input stream exists at the specified index, the method creates new streams up to and including the specified index number.</p><p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + + + <p> </p><p>Retrieves the preferred media type for an input stream on this node.</p> + <p>Source nodes cannot have inputs. If this method is called on a source node, it returns {{E_NOTIMPL}}.</p><p>The preferred input type provides a hint to the topology loader. In a fully resolved topology, there is no guarantee that every topology node will have a preferred input type. To get the actual media type for a node, you must get a reference to the node's underlying object. (For more information, see <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.)</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>This node does not have a preferred input type.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>This node is a source node.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the input stream.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the media type. The caller must release the interface.</p> </dd> + + + + + <p> Copies the data from another topology node into this node.</p> + <p> The two nodes must have the same node type. To get the node type, call <strong>{{IMFTopologyNode::GetNodeType}}</strong>. </p><p> This method copies the object reference, preferred types, and attributes from <em>pNode</em> to this node. It also copies the <strong>{{TOPOID}}</strong> that uniquely identifies each node in a topology. It does not duplicate any of the connections from <em>pNode</em> to other nodes. </p><p> The purpose of this method is to copy nodes from one topology to another. Do not use duplicate nodes within the same topology. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The node types do not match. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to the <strong>{{IMFTopologyNode}}</strong> interface of the node to copy. </p> </dd> + + + + + <p> Queries an object for a specified service interface. </p> + <p>A service is an interface that is exposed by one object but might be implemented by another object. The <strong>GetService</strong> method is equivalent to <strong>QueryInterface</strong>, with the following difference: when <strong>QueryInterface</strong> retrieves a reference to an interface, it is guaranteed that you can query the returned interface and get back the original interface. The <strong>GetService</strong> method does not make this guarantee, because the retrieved interface might be implemented by a separate object.</p><p>The <strong>{{MFGetService}}</strong> function is a helper function that queries an object for <strong>{{IMFGetService}}</strong> and calls the <strong>GetService</strong> method.</p> + + + + <p> </p><p>Retrieves a service interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p>The object does not support the service.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The service identifier ({{SID}}) of the service. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives the interface reference. The caller must release the interface.</p> </dd> + + + + + <p>Provides timing information from a clock in Microsoft Media Foundation.</p><p>Clocks and some media sinks expose this interface through <strong>QueryInterface</strong>.</p> + <p>The <strong>{{IMFClock}}</strong> interface applies to any kind of clock. The presentation clock exposes the <strong>{{IMFPresentationClock}}</strong> interface in addition to <strong>{{IMFClock}}</strong>.</p> + + + + <p> </p><p>Retrieves the characteristics of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a bitwise {{OR}} of values from the <strong>{{MFCLOCK_CHARACTERISTICS_FLAGS}}</strong> enumeration indicating the characteristics of the clock.</p> </dd> + + + + + <p> Retrieves the last clock time that was correlated with system time. </p> + <p>At some fixed interval, a clock correlates its internal clock ticks with the system time. (The system time is the time returned by the high-resolution performance counter.) This method returns:</p><ul> <li> The most recent clock time that was correlated with system time. </li> <li> The system time when the correlation was performed. </li> </ul><p> The clock time is returned in the <em>pllClockTime</em> parameter and is expressed in units of the clock's frequency. If the clock's <strong>{{IMFClock::GetClockCharacteristics}}</strong> method returns the <strong>{{MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ}}</strong> flag, the clock's frequency is 10 {{MHz}} (each clock tick is 100 nanoseconds). Otherwise, you can get the clock's frequency by calling <strong>{{IMFClock::GetProperties}}</strong>. The frequency is given in the <strong>qwClockFrequency</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure returned by that method. </p><p> The system time is returned in the <em>phnsSystemTime</em> parameter, and is always expressed in 100-nanosecond units. </p><p> To find out how often the clock correlates its clock time with the system time, call <strong>GetProperties</strong>. The correlation interval is given in the <strong>qwCorrelationRate</strong> member of the <strong>{{MFCLOCK_PROPERTIES}}</strong> structure. If <strong>qwCorrelationRate</strong> is zero, it means the clock performs the correlation whenever <strong>GetCorrelatedTime</strong> is called. Otherwise, you can calculate the current clock time by extrapolating from the last correlated time. </p><p> Some clocks support rate changes through the <strong>{{IMFRateControl}}</strong> interface. If so, the clock time advances at a speed of frequency ? current rate. If a clock does not expose the <strong>{{IMFRateControl}}</strong> interface, the rate is always 1.0. </p><p>For the presentation clock, the clock time is the presentation time, and is always relative to the starting time specified in <strong>{{IMFPresentationClock::Start}}</strong>. You can also get the presentation time by calling <strong>{{IMFPresentationClock::GetTime}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a time source. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Reserved, must be zero. </p> </dd> + + + <dd> <p> Receives the last known clock time, in units of the clock's frequency. </p> </dd> + + + <dd> <p> Receives the system time that corresponds to the clock time returned in <em>pllClockTime</em>, in 100-nanosecond units. </p> </dd> + + + + + <p> </p><p>Retrieves the clock's continuity key. (Not supported.)</p> + <p>Continuity keys are currently not supported in Media Foundation. Clocks must return the value zero in the <em>pdwContinuityKey</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the continuity key.</p> </dd> + + + + + <p> </p><p>Retrieves the current state of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved, must be zero.</p> </dd> + + + <dd> <p>Receives the clock state, as a member of the <strong>{{MFCLOCK_STATE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the properties of the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFCLOCK_PROPERTIES}}</strong> structure that receives the properties.</p> </dd> + + + + + <p>Represents a presentation clock, which is used to schedule when samples are rendered and to synchronize multiple streams.</p> + <p>To create a new instance of the presentation clock, call the {{MFCreatePresentationClock}} function. The presentation clock must have a time source, which is an object that provides the clock times. For example, the audio renderer is a time source that uses the sound card to drive the clock. Time sources expose the {{IMFPresentationTimeSource}} interface. To set the time source, call <strong>SetTimeSource</strong>. The presentation clock does not begin running until the <strong>Start</strong> method is called.</p><p>To get the presentation clock from the Media Session, call {{IMFMediaSession::GetClock}}.</p> + + + + <p> </p><p>Sets the time source for the presentation clock. The time source is the object that drives the clock by providing the current time.</p> + <p>The presentation clock cannot start until it has a time source.</p><p>The time source is automatically registered to receive state change notifications from the clock, through the time source's {{IMFClockStateSink}} interface, which all time sources must implement.</p><p>This time source have a frequency of 10 {{MHz}}. See {{IMFClock::GetClockCharacteristics}}. If not, the method returns {{MF_E_CLOCK_NOT_SIMPLE}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NOT_SIMPLE}}</strong></dt> </dl> </td><td> <p>The time source does not have a frequency of 10 {{MHz}}.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The time source has not been initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the {{IMFPresentationTimeSource}} interface of the time source.</p> </dd> + + + + + <p> </p><p>Retrieves the clock's presentation time source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the time source's {{IMFPresentationTimeSource}} interface. The caller must release the interface.</p> </dd> + + + + + <p> Retrieves the latest clock time. </p> + <p>This method does not attempt to smooth out jitter or otherwise account for any inaccuracies in the clock time.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p> The clock does not have a presentation time source. Call <strong>{{IMFPresentationClock::SetTimeSource}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives the latest clock time, in 100-nanosecond units. The time is relative to when the clock was last started. </p> </dd> + + + + + <p> </p><p>Registers an object to be notified whenever the clock starts, stops, or pauses, or changes rate.</p> + <p>Before releasing the object, call {{IMFPresentationClock::RemoveClockStateSink}} to unregister the object for state-change notifications.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Unregisters an object that is receiving state-change notifications from the clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's {{IMFClockStateSink}} interface.</p> </dd> + + + + + <p> </p><p>Starts the presentation clock.</p> + <p>This method is valid in all states (stopped, paused, or running).</p><p>If the clock is paused and restarted from the same position (<em>llClockStartOffset</em> is {{PRESENTATION_CURRENT_POSITION}}), the presentation clock sends an {{IMFClockStateSink::OnClockRestart}} notification. Otherwise, the clock sends an {{IMFClockStateSink::OnClockStart}} notification.</p><p>The presentation clock initiates the state change by calling <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStart</strong> or <strong>OnClockRestart</strong> methods. These calls are made asynchronously.</p><p>If the clock is already running, calling <strong>Start</strong> again has the effect of seeking the clock to the new <em>StartOffset</em> position.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Initial starting time, in 100-nanosecond units. At the time the <strong>Start</strong> method is called, the clock's {{IMFPresentationClock::GetTime}} method returns this value, and the clock time increments from there. If the value is {{PRESENTATION_CURRENT_POSITION}}, the clock starts from its current position. Use this value if the clock is paused and you want to restart it from the same position.</p> </dd> + + + + + <p> </p><p>Stops the presentation clock. While the clock is stopped, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} method returns zero.</p> + <p>This method is valid when the clock is running or paused.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockStop}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockStop</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already stopped.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Pauses the presentation clock. While the clock is paused, the clock time does not advance, and the clock's {{IMFPresentationClock::GetTime}} returns the time at which the clock was paused.</p> + <p>This method is valid when the clock is running. It is not valid when the clock is paused or stopped.</p><p>The presentation clock initiates the state change by calling {{IMFClockStateSink::OnClockPause}} on the clock's time source. This call is made synchronously. If it fails, the state change does not occur. If the call succeeds, the state changes, and the clock notifies the other state-change subscribers by calling their <strong>OnClockPause</strong> methods. These calls are made asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_NO_TIME_SOURCE}}</strong></dt> </dl> </td><td> <p>No time source was set on this clock.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CLOCK_STATE_ALREADY_SET}}</strong></dt> </dl> </td><td> <p>The clock is already paused.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The clock is stopped. This request is not valid when the clock is stopped.</p> </td></tr> </table><p>?</p> + + + + <p> Provides the clock times for the presentation clock. </p> + <p>This interface is implemented by presentation time sources. A presentation time source is an object that provides the clock time for the presentation clock. For example, the audio renderer is a presentation time source. The rate at which the audio renderer consumes audio samples determines the clock time. If the audio format is 44100 samples per second, the audio renderer will report that one second has passed for every 44100 audio samples it plays. In this case, the timing is provided by the sound card.</p><p>To set the presentation time source on the presentation clock, call <strong>{{IMFPresentationClock::SetTimeSource}}</strong> with a reference to the time source's <strong>{{IMFPresentationTimeSource}}</strong> interface.</p><p>A presentation time source must also implement the <strong>{{IMFClockStateSink}}</strong> interface. The presentaton clock uses this interface to notify the time source when the clock state changes.</p><p>Media Foundation provides a presentation time source that is based on the system clock. To create this object, call the <strong>{{MFCreateSystemTimeSource}}</strong> function.</p> + + + + <p> </p><p>Retrieves the underlying clock that the presentation time source uses to generate its clock times.</p> + <p>A presentation time source must support stopping, starting, pausing, and rate changes. However, in many cases the time source derives its clock times from a hardware clock or other device. The underlying clock is always running, and might not support rate changes.</p><p>Optionally, a time source can expose the underlying clock by implementing this method. The underlying clock is always running, even when the presentation time source is paused or stopped. (Therefore, the underlying clock returns the {{MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING}} flag in the <strong>{{IMFClock::GetClockCharacteristics}}</strong> method).</p><p>The underlying clock is useful if you want to make decisions based on the clock times while the presentation clock is stopped or paused.</p><p>If the time source does not expose an underlying clock, the method returns {{MF_E_NO_CLOCK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CLOCK}}</strong></dt> </dl> </td><td> <p>This time source does not expose an underlying clock.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFClock}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + <p> Called when the presentation clock starts. </p> + <p>This method is called whe the presentation clock's <strong>{{IMFPresentationClock::Start}}</strong> method is called, with the following exception: If the clock is paused and <strong>Start</strong> is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, <strong>{{IMFClockStateSink::OnClockRestart}}</strong> is called instead of <strong>OnClockStart</strong>.</p><p>The clock notifies the presentation time source by calling the time source's <strong>OnClockStart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockStart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockStart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p><p>The value given in <em>llClockStartOffset</em> is the presentation time when the clock starts, so it is relative to the start of the presentation. Media sinks should not render any data with a presentation time earlier than <em>llClockStartOffSet</em>. If a sample straddles the offset?that is, if the offset falls between the sample's start and stop times?the sink should either trim the sample so that only data after <em>llClockStartOffset</em> is rendered, or else simply drop the sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock started, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new starting time for the clock, in 100-nanosecond units. This parameter can also equal <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>, indicating the clock has started or restarted from its current position. </p> </dd> + + + + + <p> Called when the presentation clock stops. </p> + <p> When the presentation clock's <strong>{{IMFPresentationClock::Stop}}</strong> method is called, the clock notifies the presentation time source by calling the presentation time source's <strong>OnClockStop</strong> method. This call occurs synchronously within the <strong>Stop</strong> method. If the time source returns an error from <strong>OnClockStop</strong>, the presentation clock's <strong>Stop</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockStop</strong> method is called asynchronously, after the state change is completed. </p><p>If an object is already stopped, it should return <strong>{{S_OK}}</strong> from <strong>OnClockStop</strong>. It should not return an error code. </p><strong>Note</strong>??Although the header file mferror.h defines an error code named <strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong>, it should not be returned in this situation.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SINK_ALREADYSTOPPED}}</strong></dt> </dl> </td><td> <p>Deprecated. Do not use this error code.</p> </td></tr> </table><p>?</p> + + + <dd> <p> The system time when the clock stopped, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock pauses. </p> + <p>When the presentation clock's <strong>{{IMFPresentationClock::Pause}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockPause</strong> method. This call occurs synchronously within the <strong>Pause</strong> method. If the time source returns an error from <strong>OnClockPause</strong>, the presentation clock's <strong>Pause</strong> method returns an error and the state change does not take place.</p><p>For any object that is not the presentation time source, the <strong>OnClockPause</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock was paused, in 100-nanosecond units. </p> </dd> + + + + + <p> Called when the presentation clock restarts from the same position while paused. </p> + <p> This method is called if the presentation clock is paused and the <strong>{{IMFPresentationClock::Start}}</strong> method is called with the value <strong>{{PRESENTATION_CURRENT_POSITION}}</strong>. </p><p> The clock notifies the presentation time source by calling the time source's <strong>OnClockRestart</strong> method. This call occurs synchronously within the <strong>Start</strong> method. If the time source returns an error from <strong>OnClockRestart</strong>, the presentation clock's <strong>Start</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockRestart</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the clock restarted, in 100-nanosecond units. </p> </dd> + + + + + <p>Called when the rate changes on the presentation clock. </p> + <p> When the presentation clock's <strong>{{IMFRateControl::SetRate}}</strong> method is called, the clock notifies the presentation time source by calling the time source's <strong>OnClockSetRate</strong> method. This call occurs synchronously within the <strong>SetRate</strong> method. If the time source returns an error from <strong>OnClockSetRate</strong>, the presentation clock's <strong>SetRate</strong> method returns an error and the state change does not take place. </p><p> For any object that is not the presentation time source, the <strong>OnClockSetRate</strong> method is called asynchronously, after the state change is completed. In that case, the return value from this method is ignored. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The system time when the rate was set, in 100-nanosecond units. </p> </dd> + + + <dd> <p> The new rate, as a multiplier of the normal playback rate. </p> </dd> + + + + + <p> Describes the details of a presentation. A <em>presentation</em> is a set of related media streams that share a common presentation time. </p> + <p>Presentation descriptors are used to configure media sources and some media sinks. To get the presentation descriptor from a media source, call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong>. To create a new presentation descriptor, call <strong>{{MFCreatePresentationDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the number of stream descriptors in the presentation. Each stream descriptor contains information about one stream in the media source. To retrieve a stream descriptor, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Retrieves a stream descriptor for a stream in the presentation. The stream descriptor contains information about the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Zero-based index of the stream. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the stream is currently selected, or <strong>{{FALSE}}</strong> if the stream is currently deselected. If a stream is selected, the media source generates data for that stream when <strong>{{IMFMediaSource::Start}}</strong> is called. The media source will not generated data for deselected streams. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>.To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the stream descriptor's <strong>{{IMFStreamDescriptor}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Selects a stream in the presentation.</p> + <p> If a stream is selected, the media source will generate data for that stream. The media source will not generated data for deselected streams. To deselect a stream, call <strong>{{IMFPresentationDescriptor::DeselectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream number to select, indexed from zero. To find the number of streams in the presentation, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong>.</p> </dd> + + + + + <p> </p><p>Deselects a stream in the presentation.</p> + <p> If a stream is deselected, no data is generated for that stream. To select the stream again, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p> To query whether a stream is selected, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>dwDescriptorIndex</em> is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The stream number to deselect, indexed from zero. To find the number of streams in the presentation, call the <strong>{{IMFPresentationDescriptor::GetStreamDescriptorCount}}</strong> method. </p> </dd> + + + + + <p> </p><p>Creates a copy of this presentation descriptor.</p> + <p> This method performs a shallow copy of the presentation descriptor. The stream descriptors are not cloned. Therefore, use caution when modifying the presentation presentation descriptor or its stream descriptors. </p><p> If the original presentation descriptor is from a media source, do not modify the presentation descriptor unless the source is stopped. If you use the presentation descriptor to configure a media sink, do not modify the presentation descriptor after the sink is configured. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the new presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Gets information about one stream in a media source. </p> + <p>A presentation descriptor contains one or more stream descriptors. To get the stream descriptors from a presentation descriptor, call <strong>{{IMFPresentationDescriptor::GetStreamDescriptorByIndex}}</strong>. To create a new stream descriptor, call <strong>{{MFCreateStreamDescriptor}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an identifier for the stream.</p> + <p>The stream identifier uniquely identifies a stream within a presentation. It does not change throughout the lifetime of the stream. For example, if the presentation changes while the source is running, the index number of the stream may change, but the stream identifier does not.</p><p>In general, stream identifiers do not have a specific meaning, other than to identify the stream. Some media sources may assign stream identifiers based on meaningful values, such as packet identifiers, but this depends on the implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the stream identifier.</p> </dd> + + + + + <p> </p><p>Retrieves a media type handler for the stream. The media type handler can be used to enumerate supported media types for the stream, get the current media type, and set the media type.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Gets and sets media types on an object, such as a media source or media sink. </p> + <p>This interface is exposed by <em>media-type handlers</em>.</p><ul> <li> For media sources, get the media-type handler from the stream descriptor by calling <strong>{{IMFStreamDescriptor::GetMediaTypeHandler}}</strong>.</li> <li>For media sinks, get the media-type handler by calling <strong>{{IMFStreamSink::GetMediaTypeHandler}}</strong>.</li> </ul><p>If you are implementing a custom media source or media sink, you can create a simple media-type handler by calling <strong>{{MFCreateSimpleTypeHandler}}</strong>, or you can provide your own implementation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Queries whether the object supports a specified media type.</p> + <p> If the object supports the media type given in <em>pMediaType</em>, the method returns <strong>{{S_OK}}</strong>. For a media source, it means the source can generate data that conforms to that media type. For a media sink, it means the sink can receive data that conforms to that media type. If the object does not support the media type, the method fails. </p><p> The <em>ppMediaType</em> parameter is optional. If the method fails, the object might use <em>ppMediaType</em> to return a media type that the object does support, and which closely matches the one given in <em>pMediaType</em>. The method is not guaranteed to return a media type in <em>ppMediaType</em>. If no type is returned, this parameter receives a <strong>{{NULL}}</strong> reference. If the method succeeds, this parameter receives a <strong>{{NULL}}</strong> reference. If the caller sets <em>ppMediaType</em> to <strong>{{NULL}}</strong>, this parameter is ignored. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with {{SP2}} and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The object does not support this media type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to check. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface of the closest matching media type, or receives the value <strong>{{NULL}}</strong>. If non-<strong>{{NULL}}</strong>, the caller must release the interface. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> </p><p>Retrieves the number of media types in the object's list of supported media types.</p> + <p> To get the supported media types, call <strong>{{IMFMediaTypeHandler::GetMediaTypeByIndex}}</strong>. </p><p> For a media source, the media type handler for each stream must contain at least one supported media type. For media sinks, the media type handler for each stream might contain zero media types. In that case, the application must provide the media type. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of media types in the list.</p> </dd> + + + + + <p> </p><p>Retrieves a media type from the object's list of supported media types.</p> + <p>Media types are returned in the approximate order of preference. The list of supported types is not guaranteed to be complete. To test whether a particular media type is supported, call <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwIndex</em> parameter is out of range. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Zero-based index of the media type to retrieve. To get the number of media types in the list, call <strong>{{IMFMediaTypeHandler::GetMediaTypeCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Sets the object's media type.</p> + <p>For media sources, setting the media type means the source will generate data that conforms to that media type. For media sinks, setting the media type means the sink can receive data that conforms to that media type.</p><p>Any implementation of this method should check whether <em>pMediaType</em> differs from the object's current media type. If the types are identical, the method should return {{S_OK}} but avoid releasing and recreating resources unnecessarily. If the types are not identical, the method should validate the new type.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> Invalid request. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the new media type.</p> </dd> + + + + + <p> </p><p>Retrieves the current media type of the object.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p> No media type is set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the major media type of the object. </p> + <p>The major type identifies what kind of data is in the stream, such as audio or video. To get the specific details of the format, call <strong>{{IMFMediaTypeHandler::GetCurrentMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a {{GUID}} that identifies the major type. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p>Provides a timer that invokes a callback at a specified time.</p> + <p>The presentation clock exposes this interface. To get a reference to the interface, call <strong>QueryInterface</strong>.</p> + + + + <p> </p><p>Sets a timer that invokes a callback at the specified time.</p> + <p>If the clock is stopped, the method returns {{MF_S_CLOCK_STOPPED}}. The callback will not be invoked until the clock is started.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The clock was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_CLOCK_STOPPED}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the clock is stopped.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise {{OR}} of zero or more flags from the <strong>{{MFTIMER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>The time at which the timer should fire, in units of the clock's frequency. The time is either absolute or relative to the current time, depending on the value of <em>dwFlags</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. The callback's <strong>Invoke</strong> method is called at the time specified in the <em>llClockTime</em> parameter.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of a cancellation object. The caller must release the interface. To cancel the timer, pass this reference to the <strong>{{IMFTimer::CancelTimer}}</strong> method. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Cancels a timer that was set using the <strong>{{IMFTimer::SetTimer}}</strong> method.</p> + <p>Because the timer is dispatched asynchronously, the application's timer callback might get invoked even if this method succeeds.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Exposed by some Media Foundation objects that must be explicitly shut down. </p> + <p>The following types of object expose <strong>{{IMFShutdown}}</strong>:</p><ul> <li> Content enablers (<strong>{{IMFContentEnabler}}</strong> interface) </li> <li> Input trust authorities (<strong>{{IMFInputTrustAuthority}}</strong> interface) </li> <li> Presentation clocks (<strong>{{IMFPresentationClock}}</strong> interface) </li> <li> Asynchronous {{MFTs}} </li> </ul><p> Any component that creates one of these objects is responsible for calling <strong>Shutdown</strong> on the object before releasing the object. Typically, applications do not create any of these objects directly, so it is not usually necessary to use this interface in an application. </p><p> To obtain a reference to this interface, call <strong>QueryInterface</strong> on the object. </p><p> If you are implementing a custom object, your object can expose this interface, but only if you can guarantee that your application will call <strong>Shutdown</strong>. </p><p>Media sources, media sinks, and <em>synchronous</em> {{MFTs}} should not implement this interface, because the Media Foundation pipeline will not call <strong>Shutdown</strong> on these objects. Asynchronous {{MFTs}} must implement this interface.</p><p> This interface is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p><p> Some Media Foundation interfaces define a <strong>Shutdown</strong> method, which serves the same purpose as <strong>{{IMFShutdown::Shutdown}}</strong> but is not directly related to it. </p> + + + + <p> Shuts down a Media Foundation object and releases all resources associated with the object. </p> + <p>The <strong>{{MFShutdownObject}}</strong> helper function is equivalent to calling this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Queries the status of an earlier call to the <strong>{{IMFShutdown::Shutdown}}</strong> method. </p> + <p>Until <strong>Shutdown</strong> is called, the <strong>GetShutdownStatus</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>If an object's <strong>Shutdown</strong> method is asynchronous, <em>pStatus</em> might receive the value <strong>{{MFSHUTDOWN_INITIATED}}</strong>. When the object is completely shut down, <em>pStatus</em> receives the value <strong>{{MFSHUTDOWN_COMPLETED}}</strong>.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The <strong>Shutdown</strong> method has not been called on this object. </p> </td></tr> </table><p>?</p> + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p> Creates a fully loaded topology from the input partial topology. </p> + <p> This method creates any intermediate transforms that are needed to complete the topology. It also sets the input and output media types on all of the objects in the topology. If the method succeeds, the full topology is returned in the <em>ppOutputTopo</em> parameter. </p><p> You can use the <em>pCurrentTopo</em> parameter to provide a full topology that was previously loaded. If this topology contains objects that are needed in the new topology, the topology loader can re-use them without creating them again. This caching can potentially make the process faster. The objects from <em>pCurrentTopo</em> will not be reconfigured, so you can specify a topology that is actively streaming data. For example, while a topology is still running, you can pre-load the next topology. </p><p> Before calling this method, you must ensure that the output nodes in the partial topology have valid <strong>{{IMFStreamSink}}</strong> references, not <strong>{{IMFActivate}}</strong> references. The Media Session automatically performs this action inside the <strong>{{IMFMediaSession::SetTopology}}</strong> method. However, if you call <strong>Load</strong> before calling <strong>SetTopology</strong>, you must bind the output nodes manually. For more information, see Binding Output Nodes to Media Sinks. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>One or more output nodes contain <strong>{{IMFActivate}}</strong> references. The caller must bind the output nodes to media sinks. See Binding Output Nodes to Media Sinks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopology}}</strong> interface of the partial topology to be resolved.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the completed topology. The caller must release the interface.</p> </dd> + + + <dd> <p> A reference to the <strong>{{IMFTopology}}</strong> interface of the previous full topology. The topology loader can re-use objects from this topology in the new topology. This parameter can be <strong>{{NULL}}</strong>. See Remarks. </p> </dd> + + + + + <p>Enables playback of protected content by providing the application with a reference to a content enabler object.</p><p>Applications that play protected content should implement this interface.</p> + <p>A <em>content enabler</em> is an object that performs some action that is required to play a piece of protected content. For example, the action might be obtaining a {{DRM}} license. Content enablers expose the <strong>{{IMFContentEnabler}}</strong> interface, which defines a generic mechanism for content enabler. Content enablers are created inside the protected media path ({{PMP}}) process. However, they must be invoked from the application process. Therefore, the <strong>{{IMFContentProtectionManager}}</strong> interface provides a way for the {{PMP}} Media Session to notify the application.</p><p>To use this interface, do the following:</p><ol> <li> <p>Implement the interface in your application.</p> </li> <li> <p>Create an attribute store by calling <strong>{{MFCreateAttributes}}</strong>.</p> </li> <li> <p>Set the <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> attribute on the attribute store. The attribute value is a reference to your <strong>{{IMFContentProtectionManager}}</strong> implementation.</p> </li> <li> <p>Call <strong>{{MFCreatePMPMediaSession}}</strong> and pass the attribute store in the <em>pConfiguration</em> parameter.</p> </li> </ol><p>If the content requires a content enabler, the application's <strong>BeginEnableContent</strong> method is called. Usually this method called during the <strong>{{IMFMediaSession::SetTopology}}</strong> operation, before the Media Session raises the {{MESessionTopologySet}} event. The application might receive multiple <strong>BeginEnableContent</strong> calls for a single piece of content. The {{MESessionTopologySet}} event signals that the content-enabling process is complete for the current topology. The <strong>BeginEnableContent</strong> method can also be called outside of the <strong>SetTopology</strong> operation, but less commonly.</p><p>Many content enablers send machine-specific data to the network, which can have privacy implications. One of the purposes of the <strong>{{IMFContentProtectionManager}}</strong> interface is to give applications an opportunity to display information to the user and enable to user to opt in or out of the process.</p> + + + + <p>Begins an asynchronous request to perform a content enabling action.</p><p>This method requests the application to perform a specific step needed to acquire rights to the content, using a content enabler object.</p> + <p>Do not block within this callback method. Instead, perform the content enabling action asynchronously on another thread. When the operation is finished, notify the protected media path ({{PMP}}) through the <em>pCallback</em> parameter.</p><p>If you return a success code from this method, you must call <strong>Invoke</strong> on the callback. Conversely, if you return an error code from this method, you must not call <strong>Invoke</strong>. If the operation fails after the method returns a success code, use status code on the <strong>{{IMFAsyncResult}}</strong> object to report the error.</p><p>After the callback is invoked, the {{PMP}} will call the application's <strong>{{IMFContentProtectionManager::EndEnableContent}}</strong> method to complete the asynchronous call.</p><p>This method is not necessarily called every time the application plays protected content. Generally, the method will not be called if the user has a valid, up-to-date license for the content. Internally, the input trust authority ({{ITA}}) determines whether <strong>BeginEnableContent</strong> is called, based on the content provider's {{DRM}} policy. For more information, see Protected Media Path.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFActivate}}</strong> interface of a content enabler object. To create the content enabler, call <strong>{{IMFActivate::ActivateObject}}</strong> and request the <strong>{{IMFContentEnabler}}</strong> interface. The application should use the methods in <strong>{{IMFContentEnabler}}</strong> to complete the content enabling action. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFTopology}}</strong> interface of the pending topology. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. When the operation is complete, the application should call <strong>{{IMFAsyncCallback::Invoke}}</strong> on the callback. </p> </dd> + + + <dd> <p> Reserved. Currently this parameter is always <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Ends an asynchronous request to perform a content enabling action. This method is called by the protected media path ({{PMP}}) to complete an asynchronous call to <strong>{{IMFContentProtectionManager::BeginEnableContent}}</strong>.</p> + <p>When the <strong>BeginEnableContent</strong> method completes asynchronously, the application notifies the {{PMP}} by invoking the asynchronous callback. The {{PMP}} calls <strong>EndEnableContent</strong> on the application to get the result code. This method is called on the application's thread from inside the callback method. Therefore, it must not block the thread that invoked the callback.</p><p>The application must return the success or failure code of the asynchronous processing that followed the call to <strong>BeginEnableContent</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implements one step that must be performed for the user to access media content. For example, the steps might be individualization followed by license acquisition. Each of these steps would be encapsulated by a content enabler object that exposes the <strong>{{IMFContentEnabler}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the type of operation that this content enabler performs.</p> + <p>The following {{GUIDs}} are defined for the <em>pType</em> parameter.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{MFENABLETYPE_MF_RebootRequired}}</td><td>The user must reboot his or her computer.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateRevocationInformation}}</td><td>Update revocation information.</td></tr> <tr><td>{{MFENABLETYPE_MF_UpdateUntrustedComponent}}</td><td>Update untrusted components.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV1_LicenseAcquisition}}</td><td>License acquisition for Windows Media Digital Rights Management ({{DRM}}) version 1.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_Individualization}}</td><td>Individualization.</td></tr> <tr><td>{{MFENABLETYPE_WMDRMV7_LicenseAcquisition}}</td><td>License acquisition for Windows Media {{DRM}} version 7 or later.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the type of operation. An application can tailor its user interface ({{UI}}) strings for known operation types. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves a {{URL}} for performing a manual content enabling action.</p> + <p>If the enabling action can be performed by navigating to a {{URL}}, this method returns the {{URL}}. If no such {{URL}} exists, the method returns a failure code.</p><p>The purpose of the {{URL}} depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of {{URL}}</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{URL}} to obtain the license. Call <strong>{{IMFContentEnabler::GetEnableData}}</strong> and submit the data to the {{URL}} as an {{HTTP}} {{POST}} request. To receive notification when the license is acquired, call <strong>{{IMFContentEnabler::MonitorEnable}}</strong>.</td></tr> <tr><td>Revocation</td><td>{{URL}} to a webpage where the user can download and install an updated component.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No {{URL}} is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the {{URL}}. The caller must release the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the number of characters returned in <em>ppwszURL</em>, including the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_URL_TRUST_STATUS}}</strong> enumeration indicating whether the {{URL}} is trusted.</p> </dd> + + + + + <p> </p><p>Retrieves the data for a manual content enabling action.</p> + <p>The purpose of the data depends on the content enabler type, which is obtained by calling <strong>{{IMFContentEnabler::GetEnableType}}</strong>.</p><table> <tr><th>Enable type</th><th>Purpose of data</th></tr> <tr><td>Individualization</td><td>Not applicable.</td></tr> <tr><td>License acquisition</td><td>{{HTTP}} {{POST}} data.</td></tr> <tr><td>Revocation</td><td> <strong>{{MFRR_COMPONENTS}}</strong> structure.</td></tr> </table><p>?</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer that contains the data. The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer.</p> </dd> + + + + + <p> </p><p>Queries whether the content enabler can perform all of its actions automatically.</p> + <p>If this method returns <strong>{{TRUE}}</strong> in the <em>pfAutomatic</em> parameter, call the <strong>{{IMFContentEnabler::AutomaticEnable}}</strong> method to perform the enabling action.</p><p>If this method returns <strong>{{FALSE}}</strong> in the <em>pfAutomatic</em> parameter, the application must use manual enabling. To do so, call <strong>{{IMFContentEnabler::GetEnableURL}}</strong> and <strong>{{IMFContentEnabler::GetEnableData}}</strong> to get the {{URL}} and data needed for manual enabling.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the content enabler can perform the enabing action automatically.</p> </dd> + + + + + <p> </p><p>Performs a content enabling action without any user interaction.</p> + <p>This method is asynchronous. When the operation is complete, the content enabler sends an {{MEEnablerCompleted}} event. While the operation is in progress, the content enabler might send {{MEEnablerProgress}} events.</p><p>To find out whether the content enabler supports this method, call <strong>{{IMFContentEnabler::IsAutomaticSupported}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Requests notification when the enabling action is completed.</p> + <p>If you use a manual enabling action, call this method to be notified when the operation completes. If this method returns {{S_OK}}, the content enabler will send an {{MEEnablerCompleted}} event when the operation is completed. If the application cancels the operatation before completing it, call <strong>{{IMFContentEnabler::Cancel}}</strong>.</p><p>You do not have to call <strong>MonitorEnable</strong> when you use automatic enabling by calling <strong>{{IMFContentEnabler::AutomaticEnable}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded and no action was required.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels a pending content enabling action.</p> + <p>The content enabler sends an {{MEEnablerCompleted}} event with a status code of {{E_CANCEL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Manages metadata for an object. Metadata is information that describes a media file, stream, or other content. Metadata consists of individual properties, where each property contains a descriptive name and a value. A property may be associated with a particular language.</p><p>To get this interface from a media source, use the <strong>{{IMFMetadataProvider}}</strong> interface.</p> + + + + <p> Sets the language for setting and retrieving metadata. </p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages".</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing an {{RFC}} 1766-compliant language tag.</p> </dd> + + + + + <p> Gets the current language setting.</p> + <p>For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages."</p><p>The <strong>{{IMFMetadata::SetLanguage}}</strong> and <strong>{{IMFMetadata::GetProperty}}</strong> methods set and get metadata for the current language setting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The metadata provider does not support multiple languages.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> No language was set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to a null-terminated string containing an {{RFC}} 1766-compliant language tag. The caller must release the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p> Gets a list of the languages in which metadata is available.</p> + <p> For more information about language tags, see {{RFC}} 1766, "Tags for the Identification of Languages". </p><p> To set the current language, call <strong>{{IMFMetadata::SetLanguage}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to a <strong>{{PROPVARIANT}}</strong> that receives the list of languages. The list is returned as an array of null-terminated wide-character strings. Each string in the array is an {{RFC}} 1766-compliant language tag. </p> <p>The returned <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The list might be empty, if no language tags are present. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Sets the value of a metadata property. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the value of the property. For multivalued properties, use a <strong>{{PROPVARIANT}}</strong> with a {{VT_VECTOR}} type.</p> </dd> + + + + + <p> Gets the value of a metadata property.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The requested property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A reference to a null-terminated string that containings the name of the property. To get the list of property names, call <strong>{{IMFMetadata::GetAllPropertyNames}}</strong>.</p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value of the property. The <strong>{{PROPVARIANT}}</strong> type depends on the property. For multivalued properties, the <strong>{{PROPVARIANT}}</strong> is a <strong>{{VT_VECTOR}}</strong> type. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p> Deletes a metadata property.</p> + <p>For a media source, deleting a property from the metadata collection does not change the original content.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p> The property was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the property.</p> </dd> + + + + + <p> Gets a list of all the metadata property names on this object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. If no properties are available, the <strong>{{PROPVARIANT}}</strong> type is {{VT_EMPTY}}. Otherwise, the <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Gets metadata from a media source or other object.</p><p>If a media source supports this interface, it must expose the interface as a service. To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_METADATA_PROVIDER_SERVICE}}</strong>. Other types of object can expose this interface through <strong>QueryInterface</strong>.</p><p>Use this interface to get a reference to the <strong>{{IMFMetadata}}</strong> interface.</p> + + + + <p> Gets a collection of metadata, either for an entire presentation, or for one stream in the presentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_PROPERTY_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No metadata is available for the requested stream or presentation.</p> </td></tr> </table><p>?</p> + + + <dd> <p> Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. </p> </dd> + + + <dd> <p> If this parameter is zero, the method retrieves metadata that applies to the entire presentation. Otherwise, this <em></em> parameter specifies a stream identifier, and the method retrieves metadata for that stream. To get the stream identifier for a stream, call <strong>{{IMFStreamDescriptor::GetStreamIdentifier}}</strong>. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMetadata}}</strong> interface. Use this interface to access the metadata. The caller must release the interface.</p> </dd> + + + + + <p>Queries the range of playback rates that are supported, including reverse playback.</p><p>To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}.</p> + <p>Applications can use this interface to discover the fastest and slowest playback rates that are possible, and to query whether a given playback rate is supported. Applications obtain this interface from the Media Session. Internally, the Media Session queries the objects in the pipeline. For more information, see How to Determine Supported Rates.</p><p>To get the current playback rate and to change the playback rate, use the <strong>{{IMFRateControl}}</strong> interface.</p><p>Playback rates are expressed as a ratio the normal playback rate. Reverse playback is expressed as a negative rate. Playback is either <em>thinned</em> or <em>non-thinned</em>. In thinned playback, some of the source data is skipped (typically delta frames). In non-thinned playback, all of the source data is rendered.</p><p>You might need to implement this interface if you are writing a pipeline object (media source, transform, or media sink). For more information, see Implementing Rate Control.</p> + + + + <p> </p><p>Retrieves the slowest playback rate supported by the object.</p> + <p>The value returned in <em>plfRate</em> represents a lower bound. Playback at this rate is not guaranteed. Call <strong>{{IMFRateSupport::IsRateSupported}}</strong> to check whether the boundary rate is supported. For example, a component that supports arbitrarily slow rates will return zero in <em>pflRate</em>, and applications should call <strong>IsRateSupported</strong> separately to determine whether the component supports rate 0.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the slowest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the slowest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the slowest thinned playback rate. Otherwise, the method retrieves the slowest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the slowest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Gets the fastest playback rate supported by the object.</p> + <p>For some formats (such as {{ASF}}), thinning means dropping all frames that are not I-frames. If a component produces stream data, such as a media source or a demultiplexer, it should pay attention to the <em>fThin</em> parameter and return {{MF_E_THINNING_UNSUPPORTED}} if it cannot thin the stream.</p><p>If the component processes or receives a stream (most transforms or media sinks), it may ignore this parameter if it does not care whether the stream is thinned. In the Media Session's implementation of rate support, if the transforms do not explicitly support reverse playback, the Media Session will attempt to playback in reverse with thinning but not without thinning. Therefore, most applications will set <em>fThin</em> to <strong>{{TRUE}}</strong> when using the Media Session for reverse playback.</p><p>If <em>eDirection</em> is {{MFRATE_REVERSE}}, the method retrieves the fastest reverse playback rate. This is a negative value, assuming the object supports reverse playback.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether to query to the fastest forward playback rate or reverse playback rate. The value is a member of the <strong>{{MFRATE_DIRECTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method retrieves the fastest thinned playback rate. Otherwise, the method retrieves the fastest non-thinned playback rate. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the fastest playback rate that the object supports.</p> </dd> + + + + + <p> </p><p>Queries whether the object supports a specified playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The object supports the specified rate.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support reverse playback.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support thinning.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified rate.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method queries whether the object supports the playback rate with thinning. Otherwise, the method queries whether the object supports the playback rate without thinning. For information about thinning, see About Rate Control.</p> </dd> + + + <dd> <p>The playback rate to query.</p> </dd> + + + <dd> <p>If the object does not support the playback rate given in <em>flRate</em>, this parameter receives the closest supported playback rate. If the method returns {{S_OK}}, this parameter receives the value given in <em>flRate</em>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets or sets the playback rate. </p> + <p>Objects can expose this interface as a service. To obtain a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_RATE_CONTROL_SERVICE}}. The Media Session supports this interface. Media sources and transforms support this interface if they support rate changes. Media sinks do not need to support this interface. Media sinks are notified of rate changes through the <strong>{{IMFClockStateSink::OnClockSetRate}}</strong> method.</p><p>For more information, see About Rate Control.</p><p>To discover the playback rates that an object supports, use the <strong>{{IMFRateSupport}}</strong> interface</p> + + + + <p> Sets the playback rate. </p> + <p>The Media Session prevents some transitions between rate boundaries, depending on the current playback state:</p><table> <tr><th>Playback State</th><th>Forward/Reverse</th><th>Forward/Zero</th><th>Reverse/Zero</th></tr> <tr><td>Running</td><td>No</td><td>No</td><td>No</td></tr> <tr><td>Paused</td><td>No</td><td>Yes</td><td>No</td></tr> <tr><td>Stopped</td><td>Yes</td><td>Yes</td><td>Yes</td></tr> </table><p>?</p><p>If the transition is not supported, the method returns <strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong>.</p><p>When a media source completes a call to <strong>SetRate</strong>, it sends the {{MESourceRateChanged}} event. Other pipeline components do not send this event.</p><p>If a media source switches between thinned and non-thinned playback, the streams send an {{MEStreamThinMode}} event to indicate the transition. Events from the media source are not synchronized with events from the media streams. After you receive the {{MESourceRateChanged}} event, you can still receive samples that were queued before the stream switched to thinned or non-thinned mode. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p><p>When the Media Session completes a call to <strong>SetRate</strong>, it sends the {{MESessionRateChanged}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_REVERSE_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support reverse playback. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_THINNING_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The object does not support thinning. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE}}</strong></dt> </dl> </td><td> <p> The object does not support the requested playback rate. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_RATE_TRANSITION}}</strong></dt> </dl> </td><td> <p> The object cannot change to the new rate while in the running state. </p> </td></tr> </table><p>?</p> + + + <dd> <p> If <strong>{{TRUE}}</strong>, the media streams are thinned. Otherwise, the stream is not thinned. For media sources and demultiplexers, the object must thin the streams when this parameter is <strong>{{TRUE}}</strong>. For downstream transforms, such as decoders and multiplexers, this parameter is informative; it notifies the object that the input streams are thinned. For information, see About Rate Control. </p> </dd> + + + <dd> <p> The requested playback rate. Postive values indicate forward playback, negative values indicate reverse playback, and zero indicates scrubbing (the source delivers a single frame). </p> </dd> + + + + + + + + <p> </p><p>Gets the current playback rate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the stream is currently being thinned. If the object does not support thinning, this parameter always receives the value <strong>{{FALSE}}</strong>. This parameter can be <strong>{{NULL}}</strong>. For more information, see About Rate Control.</p> </dd> + + + <dd> <p>Receives the current playback rate.</p> </dd> + + + + + <p>Converts between Society of Motion Picture and Television Engineers ({{SMPTE}}) time codes and 100-nanosecond time units.</p> + <p>If an object supports this interface, it must expose the interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_TIMECODE_SERVICE}}</strong>.</p><p>The Advanced Streaming Format ({{ASF}}) media source exposes this interface.</p> + + + + <p>Starts an asynchronous call to convert Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertTimecodeToHNS}}</strong> to complete the asynchronous request.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>void CreateTimeCode( {{DWORD}} dwFrames, {{DWORD}} dwSeconds, {{DWORD}} dwMinutes, {{DWORD}} dwHours, {{DWORD}} dwRange, {{PROPVARIANT}} *pvar ) +{ {{ULONGLONG}} ullTimecode = (({{ULONGLONG}})dwRange) &lt;&lt; 32; ullTimecode += dwFrames % 10; ullTimecode += (( ({{ULONGLONG}})dwFrames ) / 10) &lt;&lt; 4; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) % 10) &lt;&lt; 8; ullTimecode += (( ({{ULONGLONG}})dwSeconds ) / 10) &lt;&lt; 12; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) % 10) &lt;&lt; 16; ullTimecode += (( ({{ULONGLONG}})dwMinutes ) / 10) &lt;&lt; 20; ullTimecode += (( ({{ULONGLONG}})dwHours ) % 10) &lt;&lt; 24; ullTimecode += (( ({{ULONGLONG}})dwHours ) / 10) &lt;&lt; 28; pvar-&gt;vt = {{VT_I8}}; pvar-&gt;hVal.QuadPart = ({{LONGLONG}})ullTimecode; +} +</pre> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pPropVarTimecode</em> is not <strong>{{VT_I8}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Time in {{SMPTE}} time code to convert. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to <strong>{{VT_I8}}</strong>. The <strong>hVal.QuadPart</strong> member contains the time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>{{PPointer}} to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in Society of Motion Picture and Television Engineers ({{SMPTE}}) time code to 100-nanosecond units.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertTimecodeToHNS}}</strong> method completes asynchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives the converted time.</p> </dd> + + + + + <p>Starts an asynchronous call to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>When the asynchronous method completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application must call <strong>{{IMFTimecodeTranslate::EndConvertHNSToTimecode}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object's <strong>Shutdown</strong> method was called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BYTESTREAM_NOT_SEEKABLE}}</strong></dt> </dl> </td><td> <p>The byte stream is not seekable. The time code cannot be read from the end of the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The time to convert, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Completes an asynchronous request to convert time in 100-nanosecond units to Society of Motion Picture and Television Engineers ({{SMPTE}}) time code.</p> + <p>Call this method after the <strong>{{IMFTimecodeTranslate::BeginConvertHNSToTimecode}}</strong> method completes asynchronously.</p><p>The value of <em>pPropVarTimecode</em> is a 64-bit unsigned value typed as a <strong>{{LONGLONG}}</strong>. The upper <strong>{{DWORD}}</strong> contains the range. (A <em>range</em> is a continuous series of time codes.) The lower <strong>{{DWORD}}</strong> contains the time code in the form of a hexadecimal number <em>0xhhmmssff</em>, where each 2-byte sequence is read as a decimal value.</p><pre>{{HRESULT}} ParseTimeCode( const {{PROPVARIANT}}&amp; var, {{DWORD}} *pdwRange, {{DWORD}} *pdwFrames, {{DWORD}} *pdwSeconds, {{DWORD}} *pdwMinutes, {{DWORD}} *pdwHours ) +{ if (var.vt != {{VT_I8}}) { return {{E_INVALIDARG}}; } {{ULONGLONG}} ullTimeCode = ({{ULONGLONG}})var.hVal.QuadPart; {{DWORD}} dwTimecode = ({{DWORD}})(ullTimeCode &amp; 0xFFFFFFFF); *pdwRange = ({{DWORD}})(ullTimeCode &gt;&gt; 32); *pdwFrames = dwTimecode &amp; 0x0000000F; *pdwFrames += (( dwTimecode &amp; 0x000000F0) &gt;&gt; 4 ) * 10; *pdwSeconds = ( dwTimecode &amp; 0x00000F00) &gt;&gt; 8; *pdwSeconds += (( dwTimecode &amp; 0x0000F000) &gt;&gt; 12 ) * 10; *pdwMinutes = ( dwTimecode &amp; 0x000F0000) &gt;&gt; 16; *pdwMinutes += (( dwTimecode &amp; 0x00F00000) &gt;&gt; 20 ) * 10; *pdwHours = ( dwTimecode &amp; 0x0F000000) &gt;&gt; 24; *pdwHours += (( dwTimecode &amp; 0xF0000000) &gt;&gt; 28 ) * 10; return {{S_OK}}; +} +</pre> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the converted time. The <strong>vt</strong> member of the <strong>{{PROPVARIANT}}</strong> structure is set to {{VT_I8}}. The <strong>hVal.QuadPart</strong> member contains the converted time in binary coded decimal ({{BCD}}) form. See Remarks.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>For a particular seek position, gets the two nearest key frames.</p> + <p>If an application seeks to a non?key frame, the decoder must start decoding from the previous key frame. This can increase latency, because several frames might get decoded before the requested frame is reached. To reduce latency, an application can call this method to find the two key frames that are closest to the desired time, and then seek to one of those key frames. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_TIME_FORMAT}}</strong></dt> </dl> </td><td> <p>The time format specified in <em>pguidTimeFormat</em> is not supported.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to a {{GUID}} that specifies the time format. The time format defines the units for the other parameters of this method. If the value is <strong>{{GUID_NULL}}</strong>, the time format is 100-nanosecond units. Some media sources might support additional time format {{GUIDs}}. </p> </dd> + + + <dd> <p>The seek position. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + <dd> <p>Receives the position of the nearest key frame that appears earlier than <em>pvarStartPosition</em>. The units for this parameter are specified by <em>pguidTimeFormat</em>.</p> </dd> + + + + + <p>Controls the master volume level of the audio session associated with the streaming audio renderer ({{SAR}}) and the audio capture source.</p><p>The {{SAR}} and the audio capture source expose this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. For the {{SAR}}, use the service identifier {{MR_POLICY_VOLUME_SERVICE}}. For the audio capture source, use the service identifier {{MR_CAPTURE_POLICY_VOLUME_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or the audio capture source, or call it on the Media Session.</p> + <p>To control the volume levels of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface. The <strong>{{IMFAudioStreamVolume}}</strong> interface is supported by the {{SAR}} only.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> <p>The master volume level of the audio session.</p> </li> <li> <p>The volume level of the channel.</p> </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuaton for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels. To change the volume level of individual channels, use the <strong>{{IMFAudioStreamVolume}}</strong> interface.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p> Attenuation (dB) = 20 * log10(<em>Level</em>) </p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Sets the master volume level.</p> + <p>Events outside of the application can change the master volume level. For example, the user can change the volume from the system volume-control program (SndVol). If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Retrieves the master volume level.</p> + <p>If an external event changes the master volume, the audio renderer sends an {{MEAudioSessionVolumeChanged}} event, which the Media Session forwards to the application.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> </dd> + + + + + <p> </p><p>Mutes or unmutes the audio.</p> + <p>This method does not change the volume level returned by the <strong>{{IMFSimpleAudioVolume::GetMasterVolume}}</strong> function.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio.</p> </dd> + + + + + <p> </p><p>Queries whether the audio is muted.</p> + <p>Calling <strong>{{IMFSimpleAudioVolume::SetMasterVolume}}</strong> to set the volume does not change whether the audio is muted.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The audio renderer is not initialized.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_STREAMSINK_REMOVED}}</strong></dt> </dl> </td><td> <p>The audio renderer was removed from the pipeline.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, the audio is muted; otherwise, the audio is not muted.</p> </dd> + + + + + <p>Controls the volume levels of individual audio channels.</p><p>The streaming audio renderer ({{SAR}}) exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MR_STREAM_VOLUME_SERVICE}}</strong>. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + <p>If your application does not require channel-level volume control, you can use the <strong>{{IMFSimpleAudioVolume}}</strong> interface to control the master volume level of the audio session.</p><p>Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). For each channel, the attenuation level is the product of:</p><ul> <li> The master volume level of the audio session. </li> <li> The volume level of the channel. </li> </ul><p>For example, if the master volume is 0.8 and the channel volume is 0.5, the attenuation for that channel is 0.8 ? 0.5 = 0.4. Volume levels can exceed 1.0 (positive gain), but the audio engine clips any audio samples that exceed zero decibels.</p><p>Use the following formula to convert the volume level to the decibel (dB) scale:</p><p>Attenuation (dB) = 20 * log10(<em>Level</em>)</p><p>For example, a volume level of 0.50 represents 6.02 dB of attenuation.</p> + + + + <p> </p><p>Retrieves the number of channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of channels in the audio stream.</p> </dd> + + + + + <p> </p><p>Sets the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume level for a specified channel in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the audio channel. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the volume level for the channel.</p> </dd> + + + + + <p> </p><p>Sets the individual volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The array specifies the volume levels for all of the channels. Before calling the method, set each element of the array to the desired volume level for the channel.</p> </dd> + + + + + <p> </p><p>Retrieves the volume levels for all of the channels in the audio stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of elements in the <em>pfVolumes</em> array. The value must equal the number of channels. To get the number of channels, call <strong>{{IMFAudioStreamVolume::GetChannelCount}}</strong>.</p> </dd> + + + <dd> <p>Address of an array of size <em>dwCount</em>, allocated by the caller. The method fills the array with the volume level for each channel in the stream.</p> </dd> + + + + + <p>Configures the audio session that is associated with the streaming audio renderer ({{SAR}}). Use this interface to change how the audio session appears in the Windows volume control.</p><p>The {{SAR}} exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MR_AUDIO_POLICY_SERVICE}}. You can call <strong>GetService</strong> directly on the {{SAR}} or call it on the Media Session.</p> + + + + <p> </p><p>Assigns the audio session to a group of sessions.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A <strong>{{GUID}}</strong> that identifies the session group. Groups are application-defined. To create a new session group, assign a new {{GUID}}.</p> </dd> + + + + + <p> </p><p>Retrieves the group of sessions to which this audio session belongs.</p> + <p>If two or more audio sessions share the same group, the Windows volume control displays one slider control for the entire group. Otherwise, it displays a slider for each session. For more information, see <strong>{{IAudioSessionControl::SetGroupingParam}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the session group.</p> </dd> + + + + + <p> </p><p>Sets the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string that contains the display name.</p> </dd> + + + + + <p> </p><p>Retrieves the display name of the audio session. The Windows volume control displays this name.</p> + <p>If the application does not set a display name, Windows creates one.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the display name string. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Sets the icon resource for the audio session. The Windows volume control displays this icon. </p> + <p>The icon path has the format "path,index" or "path,-id", where <em>path</em> is the fully qualified path to a {{DLL}}, executable file, or icon file; <em>index</em> is the zero-based index of the icon within the file; and <em>id</em> is a resource identifier. Note that resource identifiers are preceded by a minus sign (-) to distinguish them from indexes. The path can contain environment variables, such as "%windir%". For more information, see <strong>{{IAudioSessionControl::SetIconPath}}</strong> in the Windows {{SDK}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A wide-character string that specifies the icon. See Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the icon resource for the audio session. The Windows volume control displays this icon.</p> + <p>If the application did not set an icon path, the method returns an empty string ("").</p><p>For more information, see <strong>{{IAudioSessionControl::GetIconPath}}</strong> in the core audio {{API}} documentation.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a wide-character string that specifies a shell resource. The format of the string is described in the topic <strong>{{IMFAudioPolicy::SetIconPath}}</strong>. The caller must free the memory allocated for the string by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> Callback interface to get media data from the sample-grabber sink. </p> + <p>The sample-grabber sink enables an application to get data from the Media Foundation pipeline without implementing a custom media sink. To use the sample-grabber sink, the application must perform the following steps:</p><ol> <li> <p>Implement the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> </li> <li> <p>Call <strong>{{MFCreateSampleGrabberSinkActivate}}</strong>, passing in the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface reference. This function returns an <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Create a topology that includes an output node with the sink's <strong>{{IMFActivate}}</strong> object.</p> </li> <li> <p>Pass this topology to the Media Session.</p> </li> </ol><p>During playback, the sample-grabber sink calls methods on the application's callback.</p><p>You cannot use the sample-grabber sink to get protected content.</p> + + + + <p> </p><p>Called when the presentation clock is set on the sample-grabber sink.</p> + <p>This method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the presentation clock's <strong>{{IMFPresentationClock}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p> A reference to a buffer that contains the sample data. </p> </dd> + + + <dd> <p> Size of the <em>pSampleBuffer</em> buffer, in bytes. </p> </dd> + + + + + <p> </p><p>Called when the sample-grabber sink is shut down.</p> + <p>This method is called when the sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method is called.</p><p>The <strong>OnShutdown</strong> method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface.</p> + <p>This callback interface is used with the sample-grabber sink. It extends the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface by adding the <strong>OnProcessSampleEx</strong> method, which supersedes the <strong>{{IMFSampleGrabberSinkCallback::OnProcessSample}}</strong> method.</p><p> The <strong>OnProcessSampleEx</strong> method adds a parameter that contains the attributes for the media sample. You can use the attributes to get information about the sample, such as field dominance and telecine flags. </p><p>To use this interface, do the following: </p><ol> <li>Implement a callback object that exposes the interface.</li> <li>Create the sample-grabber sink by calling the <strong>{{MFCreateSampleGrabberSinkActivate}}</strong> function. Pass the callback reference in the <em>pIMFSampleGrabberSinkCallback</em> parameter.</li> <li>The sample-grabber sink will call <strong>QueryInterface</strong> on the callback object.</li> <li>If the callback object exposes the <strong>{{IMFSampleGrabberSinkCallback2}}</strong> interface, the sample-grabber sink will use the <strong>OnProcessSampleEx</strong> callback method. Otherwise, the sample-grabber sink will use the older <strong>OnProcessSample</strong> callback method.</li> </ol> + + + + <p>Called when the sample-grabber sink receives a new media sample.</p> + <p>If you use the sample-grabber sink in a playback topology, this method should return quickly, or it might interfere with playback. Do not block the thread, wait on events, or perform other lengthy operations inside this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The major type {{GUID}} that specifies the format of the data. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>Sample flags. The sample-grabber sink gets the value of this parameter by calling the <strong>{{IMFSample::GetSampleFlags}}</strong> method of the media sample.</p> </dd> + + + <dd> <p>The presentation time for this sample, in 100-nanosecond units. If the sample does not have a presentation time, the value of this parameter is <strong>_I64_MAX</strong></p> </dd> + + + <dd> <p>The duration of the sample, in 100-nanosecond units. If the sample does not have a duration, the value of this parameter is <strong>_I64_MAX</strong>.</p> </dd> + + + <dd> <p>A reference to a buffer that contains the sample data.</p> </dd> + + + <dd> <p>The size, in bytes, of the <em>pSampleBuffer</em> buffer.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. Use this interface to get the attributes for this sample (if any). For a list of sample attributes, see Sample Attributes.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Registers the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Each source node in the topology defines one branch of the topology. The branch includes every topology node that receives data from that node. An application can assign each branch of a topology its own work queue and then associate those work queues with {{MMCSS}} tasks. </p><p>To use this method, perform the following steps.</p><ol> <li>Create the topology.</li> <li>Set the following attributes on the source nodes in the topology.<ul> <li> <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong>. Specifies an identifier for the work queue. The Media Session will allocate a new work queue.</li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_CLASS}}</strong>. Specifies the {{MMCSS}} class. </li> <li> <strong>{{MF_TOPONODE_WORKQUEUE_MMCSS_TASKID}}</strong>. Specifies the {{MMCSS}} task identifier (optional). If this attribute is not set, {{MMCSS}} assigns a new task identifier. </li> </ul> </li> <li>Queue the topology by calling <strong>{{IMFMediaSession::SetTopology}}</strong>.</li> <li>Wait for the {{MESessionTopologyStatus}} event with the <strong>{{MF_TOPOSTATUS_READY}}</strong> status.</li> <li>Call <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong>. This method registers all of the topology work queues with {{MMCSS}}.</li> </ol><p>The <strong>BeginRegisterTopologyWorkQueuesWithMMCSS</strong> method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. Within the callback method, call <strong>{{IMFWorkQueueServices::EndRegisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request. After this operation completes, the Media Session automatically registers the work queues for every new topology that is queued on the Media Session. The application does not need to call the method again for new topologies.</p><p>To unregister the topology work queues from {{MMCSS}}, call <strong>{{IMFWorkQueueServices::BeginUnregisterTopologyWorkQueuesWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to register the topology work queues with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unregisters the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterTopologyWorkQueuesWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister the topology work queues from the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>There is no work queue with the specified identifier.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pwszClass</em> buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified branch of the current topology.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Identifies the work queue assigned to this topology branch. The application defines this value by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node for the branch.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p> Associates a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task. </p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndRegisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The platform work queue to register with {{MMCSS}}. See Work Queue Identifiers. To register all of the standard work queues to the same {{MMCSS}} task, set this parameter to <strong>{{MFASYNC_CALLBACK_QUEUE_ALL}}</strong>.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task to be performed. </p> </dd> + + + <dd> <p> The unique task identifier. To obtain a new task identifier, set this value to zero. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to associate a platform work queue with a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this function when the <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p><p>To unregister the work queue from the {{MMCSS}} class, call <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p>The unique task identifier.</p> </dd> + + + + + <p> </p><p>Unregisters a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>This method is asynchronous. When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFWorkQueueServices::EndUnregisterPlatformWorkQueueWithMMCSS}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to register with {{MMCSS}}. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to unregister a platform work queue from a Multimedia Class Scheduler Service ({{MMCSS}}) task.</p> + <p>Call this method when the <strong>{{IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) class for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The <em>pwszClass</em> buffer is too small to receive the class name.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer that receives the name of the {{MMCSS}} class. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the size of the pwszClass buffer, in characters. On output, receives the required size of the buffer, in characters. The size includes the terminating null character.</p> </dd> + + + + + <p> </p><p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) task identifier for a specified platform work queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Platform work queue to query. See <strong>{{IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS}}</strong>.</p> </dd> + + + <dd> <p>Receives the task identifier.</p> </dd> + + + + + <p>Extends the <strong>{{IMFWorkQueueServices}}</strong> interface.</p> + <p>This interface allows applications to control +both platform and topology work queues.</p><p>The <strong>{{IMFWorkQueueServices}}</strong> can be obtained from the session by querying for the <strong>{{MF_WORKQUEUE_SERVICES}}</strong> service.</p> + + + + <p>Retrieves the Multimedia Class Scheduler Service ({{MMCSS}}) string associated with the given topology work queue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of the topology work queue. </p> </dd> + + + <dd> <p>Pointer to the buffer the work queue's {{MMCSS}} task id will be copied to.</p> </dd> + + + + + <p>Registers a platform work queue with Multimedia Class Scheduler Service ({{MMCSS}}) using the specified class and task id.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The id of one of the standard platform work queues.</p> </dd> + + + <dd> <p>The {{MMCSS}} class which the work queue should be registered with.</p> </dd> + + + <dd> <p> The task id which the work queue should be registered with. If <em>dwTaskId</em> is 0, a new {{MMCSS}} bucket will be created.</p> </dd> + + + <dd> <p>The priority.</p> </dd> + + + <dd> <p>Standard callback used for async operations in Media Foundation.</p> </dd> + + + <dd> <p>Standard state used for async operations in Media Foundation.</p> </dd> + + + + + <p>Gets the priority of the Multimedia Class Scheduler Service ({{MMCSS}}) priority associated with the specified platform work queue.</p> + <p>Pointer to a buffer allocated by the caller that the work queue's {{MMCSS}} task id will be copied to.</p> + + + <dd> <p>Topology work queue id for which the info will be returned.</p> </dd> + + + <dd></dd> + + + + + <p> Adjusts playback quality. This interface is exposed by the quality manager. </p> + <p>Media Foundation provides a default quality manager that is tuned for playback. Applications can provide a custom quality manager to the Media Session by setting the <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> attribute when creating the Media Session.</p> + + + + <p> </p><p>Called when the Media Session is about to start playing a new topology.</p> + <p>In a typical quality manager this method does the following:</p><ol> <li> <p>Enumerates the nodes in the topology.</p> </li> <li> <p>Calls <strong>{{IMFTopologyNode::GetObject}}</strong> to get the node's underlying object.</p> </li> <li> <p>Queries for the <strong>{{IMFQualityAdvise}}</strong> interface.</p> </li> </ol><p>The quality manager can then use the <strong>{{IMFQualityAdvise}}</strong> references to adjust audio-video quality as needed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the new topology. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the previous topology.</p> </dd> + + + + + <p> </p><p>Called when the Media Session selects a presentation clock.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationClock}}</strong> interface of the presentation clock. If this parameter is <strong>{{NULL}}</strong>, the quality manager should release any references to the presentation clock.</p> </dd> + + + + + <p> </p><p>Called when the media processor is about to deliver an input sample to a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the input stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample.</p> </dd> + + + + + <p> </p><p>Called after the media processor gets an output sample from a pipeline component.</p> + <p>This method is called for every sample passing through every pipeline component. Therefore, the method must return quickly to avoid introducing too much latency into the pipeline.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopologyNode}}</strong> interface of the topology node that represents the pipeline component.</p> </dd> + + + <dd> <p>Index of the output stream on the topology node.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFSample}}</strong> interface of the output sample.</p> </dd> + + + + + <p> </p><p>Called when a pipeline component sends an {{MEQualityNotify}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Called when the Media Session is shutting down.</p> + <p>The quality manager should release all references to the Media Session when this method is called.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the quality manager to adjust the audio or video quality of a component in the pipeline.</p><p>This interface is exposed by pipeline components that can adjust their quality. Typically it is exposed by decoders and stream sinks. For example, the enhanced video renderer ({{EVR}}) implements this interface. However, media sources can also implement this interface.</p><p>To get a reference to this interface from a media source, call <strong>{{IMFGetService::GetService}}</strong> with the service identifier {{MF_QUALITY_SERVICES}}. For all other pipeline objects (transforms and media sinks), call <strong>QueryInterface</strong>.</p> + <p>The quality manager typically obtains this interface when the quality manager's <strong>{{IMFQualityManager::NotifyTopology}}</strong> method is called.</p> + + + + <p> </p><p>Sets the drop mode. In drop mode, a component drops samples, more or less aggressively depending on the level of the drop mode.</p> + <p>If this method is called on a media source, the media source might switch between thinned and non-thinned output. If that occurs, the affected streams will send an {{MEStreamThinMode}} event to indicate the transition. The operation is asynchronous; after <strong>SetDropMode</strong> returns, you might receive samples that were queued before the transition. The {{MEStreamThinMode}} event marks the exact point in the stream where the transition occurs.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_DROP_MODES}}</strong></dt> </dl> </td><td> <p>The component does not support the specified mode or any higher modes.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Sets the quality level. The quality level determines how the component consumes or produces samples.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_QUALITY_LEVELS}}</strong></dt> </dl> </td><td> <p>The component does not support the specified quality level or any levels below it.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Requested quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current drop mode.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the current quality level.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Drops samples over a specified interval of time.</p> + <p>Ideally the quality manager can prevent a renderer from falling behind. But if this does occur, then simply lowering quality does not guarantee the renderer will ever catch up. As a result, audio and video might fall out of sync. To correct this problem, the quality manager can call <strong>DropTime</strong> to request that the renderer drop samples quickly over a specified time interval. After that period, the renderer stops dropping samples.</p><p>This method is primarily intended for the video renderer. Dropped audio samples cause audio glitching, which is not desirable.</p><p>If a component does not support this method, it should return {{MF_E_DROPTIME_NOT_SUPPORTED}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DROPTIME_NOT_SUPPORTED}}</strong></dt> </dl> </td><td> <p>The object does not support this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Amount of time to drop, in 100-nanosecond units. This value is always absolute. If the method is called multiple times, do not add the times from previous calls.</p> </dd> + + + + + <p>Enables a pipeline object to adjust its own audio or video quality, in response to quality messages.</p> + <p>This interface enables a pipeline object to respond to quality messages from the media sink. Currently, it is supported only for video decoders.</p><p>If a video decoder exposes <strong>{{IMFQualityAdvise}}</strong> but not <strong>{{IMFQualityAdvise2}}</strong>, the quality manager controls quality adjustments for the decoder. In this case, the quality manager responds to {{MEQualityNotify}} events from the Enhanced Video Renderer ({{EVR}}) by calling <strong>{{IMFQualityAdvise}}</strong> methods on the decoder.</p><p>If the decoder exposes <strong>{{IMFQualityAdvise2}}</strong>, the quality manager forwards the {{MEQualityNotify}} events to the decoder and does not adjust the decoder's quality settings. The decoder should respond to these events by adjusting its own quality settings internally.</p><p>The preceding remarks apply to the default implementation of the quality manager; custom quality managers can implement other behaviors.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Forwards an {{MEQualityNotify}} event from the media sink.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries an object for the number of <em>quality modes</em> it supports. Quality modes are used to adjust the trade-off between quality and speed when rendering audio or video.</p><p>The default presenter for the <em>enhanced video renderer</em> ({{EVR}}) implements this interface. The {{EVR}} uses the interface to respond to quality messages from the quality manager.</p> + + + + <p>Gets the maximum <em>drop mode</em>. A higher drop mode means that the object will, if needed, drop samples more aggressively to match the presentation clock.</p> + <p>To get the current drop mode, call the <strong>{{IMFQualityAdvise::GetDropMode}}</strong> method. To set the drop mode, call the <strong>{{IMFQualityAdvise::SetDropMode}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the maximum drop mode, specified as a member of the <strong>{{MF_QUALITY_DROP_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>Gets the minimum quality level that is supported by the component.</p> + <p>To get the current quality level, call the <strong>{{IMFQualityAdvise::GetQualityLevel}}</strong> method. To set the quality level, call the <strong>{{IMFQualityAdvise::SetQualityLevel}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the minimum quality level, specified as a member of the <strong>{{MF_QUALITY_LEVEL}}</strong> enumeration.</p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}).</p><p>Any pipeline object that creates worker threads should implement this interface.</p> + <p>Media Foundation provides a mechanism for applications to associate branches in the topology with {{MMCSS}} tasks. A topology branch is defined by a source node in the topology and all of the nodes downstream from it. An application registers a topology branch with {{MMCSS}} by setting the <strong>{{MF_TOPONODE_WORKQUEUE_ID}}</strong> attribute on the source node and then calling <strong>{{IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS}}</strong>.</p><p>When the application registers a topology branch with {{MMCSS}}, the Media Session queries every pipeline object in that branch for the <strong>{{IMFRealTimeClient}}</strong> interface. If the object exposes the interface, the Media Session calls <strong>RegisterThreads</strong>.</p><p>When the application unregisters the topology branch, the Media Session calls <strong>UnregisterThreads</strong>.</p><p>If a pipeline object creates its own worker threads but does not implement this interface, it can cause priority inversions in the Media Foundation pipeline, because high-priority processing threads might be blocked while waiting for the component to process data on a thread with lower priority.</p><p>Pipeline objects that do not create worker threads do not need to implement this interface.</p><p>In Windows?8, this interface is extended with <strong>{{IMFRealTimeClientEx}}</strong>.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p> The object's worker threads should register themselves with {{MMCSS}} by calling <strong>AvSetMmThreadCharacteristics</strong>, using the task name and identifier specified in this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{MMCSS}} task identifier. </p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task. </p> </dd> + + + + + <p> Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>The object's worker threads should unregister themselves from {{MMCSS}} by calling <strong>AvRevertMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue for the topology branch that contains this object.</p> + <p> An application can register a branch of the topology to use a private work queue. The Media Session notifies any pipeline object that supports <strong>{{IMFRealTimeClient}}</strong> by calling <strong>SetWorkQueue</strong> with the application's work queue identifier. </p><p>When the application unregisters the topology branch, the Media Session calls <strong>SetWorkQueue</strong> again with the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the work queue, or the value <strong>{{MFASYNC_CALLBACK_QUEUE_UNDEFINED}}</strong>. See Remarks. </p> </dd> + + + + + <p>Notifies a pipeline object to register itself with the Multimedia Class Scheduler Service ({{MMCSS}}). </p><p>This interface is a replacement for the <strong>{{IMFRealTimeClient}}</strong> interface.</p> + + + + <p>Notifies the object to register its worker threads with the Multimedia Class Scheduler Service ({{MMCSS}}).</p> + <p>If the object does not create worker threads, the method should simply return {{S_OK}} and take no further action. </p><p>Otherwise, if the value of <code>*pdwTaskIndex</code> is zero on input, the object should perform the following steps:</p><ol> <li>A single worker thread calls <strong>AvSetMmThreadCharacteristics</strong> to create a new {{MMCSS}} task identifier. Store this value.</li> <li>Any additional worker threads call <strong>AvSetMmThreadCharacteristics</strong> using the new task identifier.</li> <li>Return the new task identifier to the caller, by setting <code>*pdwTaskIndex</code> equal to the task identifier.</li> </ol><p>If the value of <code>*pdwTaskIndex</code> is nonzero on input, the parameter contains an existing {{MMCSS}} task identifer. In that case, all worker threads of the object should register themselves for that task by calling <strong>AvSetMmThreadCharacteristics</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MMCSS}} task identifier. If the value is zero on input, the object should create a new {{MCCSS}} task group. See Remarks.</p> </dd> + + + <dd> <p>The name of the {{MMCSS}} task.</p> </dd> + + + <dd> <p>The base priority of the thread.</p> </dd> + + + + + <p>Notifies the object to unregister its worker threads from the Multimedia Class Scheduler Service ({{MMCSS}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies the work queue that this object should use for asynchronous work items. </p> + <p>The object should use the values of <em>dwMultithreadedWorkQueueId</em> and <em>lWorkItemBasePriority</em> when it queues new work items. Use the <strong>{{MFPutWorkItem2}}</strong> or <strong>{{MFPutWorkItemEx2}}</strong> function to queue the work item.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The work queue identifier.</p> </dd> + + + <dd> <p>The base priority for work items.</p> </dd> + + + + + <p>Implemented by the Sequencer Source. The sequencer source enables an application to create a sequence of topologies. To create the sequencer source, call <strong>{{MFCreateSequencerSource}}</strong>. For step-by-step instructions about how to create a playlist, see How to Create a Playlist.</p> + + + + <p> </p><p>Adds a topology to the end of the queue.</p> + <p>The sequencer plays topologies in the order they are queued. You can queue as many topologies as you want to preroll.</p><p>The application must indicate to the sequencer when it has queued the last topology on the Media Session. To specify the last topology, set the SequencerTopologyFlags_Last flag in the <em>dwFlags</em> parameter when you append the topology. The sequencer uses this information to end playback with the pipeline. Otherwise, the sequencer waits indefinitely for a new topology to be queued.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The source topology node is missing one of the following attributes:</p> <ul> <li> <p> <strong>{{MF_TOPONODE_STREAM_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_PRESENTATION_DESCRIPTOR}}</strong> </p> </li> <li> <p> <strong>{{MF_TOPONODE_SOURCE}}</strong> </p> </li> </ul> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology. This reference cannot be <strong>{{NULL}}</strong>. If an application passes <strong>{{NULL}}</strong>, the call fails with an {{E_INVALIDARG}} error code.</p> </dd> + + + <dd> <p>A combination of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier for this topology.</p> </dd> + + + + + <p> </p><p>Deletes a topology from the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The sequencer element identifier of the topology to delete.</p> </dd> + + + + + <p> </p><p>Maps a presentation descriptor to its associated sequencer element identifier and the topology it represents.</p> + <p>The topology returned in <em>ppTopology</em> is the original topology that the application specified in <strong>AppendTopology</strong>. The source nodes in this topology contain references to the native sources. Do not queue this topology on the Media Session. Instead, call <strong>{{IMFMediaSourceTopologyProvider::GetMediaSourceTopology}}</strong> to get the sequencer source's modified topology. The source nodes in the modified topology contain references to the sequencer source, rather than the native sources.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The presentation descriptor is not valid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_SEQUENCER_CONTEXT_CANCELED}}</strong></dt> </dl> </td><td> <p>This segment was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor.</p> </dd> + + + <dd> <p>Receives the sequencer element identifier. This value is assigned by the sequencer source when the application calls <strong>{{IMFSequencerSource::AppendTopology}}</strong>. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the original topology that the application added to the sequencer source. The caller must release the interface. This parameter can receive the value <strong>{{NULL}}</strong> if the sequencer source has switched to the next presentation. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Updates a topology in the queue.</p> + <p>This method is asynchronous. When the operation is completed, the sequencer source sends an {{MESequencerSourceTopologyUpdated}} event.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The sequencer source has been shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the updated topology object.</p> </dd> + + + + + <p> </p><p>Updates the flags for a topology in the queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Sequencer element identifier of the topology to update.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of flags from the <strong>{{MFSequencerTopologyFlags}}</strong> enumeration.</p> </dd> + + + + + <p>Enables an application to get a topology from the sequencer source. This interface is exposed by the sequencer source object.</p> + + + + <p> </p><p>Returns a topology for a media source that builds an internal topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument. For example, a <strong>{{NULL}}</strong> input parameter, or the presentation descriptor is not valid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the media source's presentation descriptor. To get this reference, either call <strong>{{IMFMediaSource::CreatePresentationDescriptor}}</strong> on the media source, or get the reference from the {{MENewPresentation}} event.</p> </dd> + + + <dd> <p>Receives a reference to the topology's <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p> </p><p>Notifies the source when playback has reached the end of a segment. For timelines, this corresponds to reaching a mark-out point.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor for the segment that has ended.</p> </dd> + + + + + <p>Updates the attributes of one or more nodes in the Media Session's current topology.</p><p>The Media Session exposes this interface as a service. To get a reference to the interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is {{MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE}}.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute.</p> + + + + <p> </p><p>Updates the attributes of one or more nodes in the current topology.</p> + <p>Currently the only attribute that can be updated is the <strong>{{MF_TOPONODE_MEDIASTOP}}</strong> attribute. The method ignores any other attributes.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>The number of elements in the <em>pUpdates</em> array.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{MFTOPONODE_ATTRIBUTE_UPDATE}}</strong> structures. Each element of the array updates one attribute on a node.</p> </dd> + + + + + <p> Controls how a byte stream buffers data from a network. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + <p> If a byte stream implements this interface, a media source can use it to control how the byte stream buffers data. This interface is designed for byte streams that read data from a network. </p><p> A byte stream that implements this interface should also implement the <strong>{{IMFMediaEventGenerator}}</strong> interface. When the byte stream starts buffering, it sends an {{MEBufferingStarted}} event. When it stops buffering, it sends an {{MEBufferingStopped}} event. </p><p> The byte stream must send a matching {{MEBufferingStopped}} event for every {{MEBufferingStarted}} event. The byte stream must not send {{MEBufferingStarted}} events unless the media source has enabled buffering by calling <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>. </p><p> After the byte stream sends an {{MEBufferingStarted}} event, it should send {{MEBufferingStopped}} if any of the following occur: </p><ul> <li> The byte stream finishes buffering data. </li> <li> The byte stream reaches the end of the stream. </li> <li> The media source calls <strong>EnableBuffering</strong> with the value <strong>{{FALSE}}</strong>. </li> <li> The media source calls <strong>StopBuffering</strong>. </li> </ul><p> The byte stream should not send any more buffering events after it reaches the end of the file. </p><p> If buffering is disabled, the byte stream does not send any buffering events. Internally, however, it might still buffer data while it waits for I/O requests to complete. Therefore, <strong>{{IMFByteStream}}</strong> methods might take an indefinite length of time to complete. </p><p> If the byte stream is buffering data internally and the media source calls <strong>EnableBuffering</strong> with the value <strong>{{TRUE}}</strong>, the byte stream can send {{MEBufferingStarted}} immediately. </p><p> After the presentation has started, the media source should forward and {{MEBufferingStarted}} and {{MEBufferingStopped}} events that it receives while started. The Media Session will pause the presentation clock while buffering is progress and restart the presentation clock when buffering completes. The media source should only forward these events while the presentation is playing. The purpose of sending these events to the Media Session is to pause the presentation time while the source buffers data. </p> + + + + <p> </p><p>Sets the buffering parameters.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFBYTESTREAM_BUFFERING_PARAMS}}</strong> structure that contains the buffering parameters. The byte stream uses this information to calculate how much data to buffer from the network.</p> </dd> + + + + + <p> </p><p>Enables or disables buffering.</p> + <p>Before calling this method, call <strong>{{IMFByteStreamBuffering::SetBufferingParams}}</strong> to set the buffering parameters on the byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies whether the byte stream buffers data. If <strong>{{TRUE}}</strong>, buffering is enabled. If <strong>{{FALSE}}</strong>, buffering is disabled.</p> </dd> + + + + + <p> </p><p>Stops any buffering that is in progress.</p> + <p>If the byte stream is currently buffering data, it stops and sends an {{MEBufferingStopped}} event. If the byte stream is not currently buffering, this method has no effect.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The byte stream successfully stopped buffering.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No buffering was in progress.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how a network byte stream transfers data to a local cache. Optionally, this interface is exposed by byte streams that read data from a network, for example, through {{HTTP}}. </p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Stops the background transfer of data to the local cache.</p> + <p>The byte stream resumes transferring data to the cache if the application does one of the following:</p><ul> <li>Reads data from the byte stream.</li> <li>Calls the byte stream's <strong>{{IMFByteStreamBuffering::EnableBuffering}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks a byte stream by time position.</p> + <p>A byte stream can implement this interface if it supports time-based seeking. For example, a byte stream that reads data from a server might implement the interface. Typically, a local file-based byte stream would not implement it.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object.</p> + + + + <p>Queries whether the byte stream supports time-based seeking.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the byte stream supports time-based seeking, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Seeks to a new position in the byte stream.</p> + <p>If the byte stream reads from a server, it might cache the seek request until the next read request. Therefore, the byte stream might not send a request to the server immediately.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new position, in 100-nanosecond units.</p> </dd> + + + + + <p>Gets the result of a time-based seek.</p> + <p>This method returns the server response from a previous time-based seek. </p><strong>Note</strong>??This method normally cannot be invoked until some data is read from the byte stream, because the <strong>{{IMFByteStreamTimeSeek::TimeSeek}}</strong> method does not send a server request immediately.? + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The byte stream does not support time-based seeking, or no data is available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the new position after the seek, in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives the stop time, in 100-nanosecond units. If the stop time is unknown, the value is zero.</p> </dd> + + + <dd> <p>Receives the total duration of the file, in 100-nanosecond units. If the duration is unknown, the value is ?1.</p> </dd> + + + + + <p>Controls how a network byte stream transfers data to a local cache. This interface extends the <strong>{{IMFByteStreamCacheControl}}</strong> interface.</p> + <p>Byte streams object in Microsoft Media Foundation can optionally implement this interface. To get a reference to this interface, call <strong>QueryInterface</strong> on the byte stream object. </p> + + + + <p>Gets the ranges of bytes that are currently stored in the cache.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of ranges returned in the <em>ppRanges</em> array.</p> </dd> + + + <dd> <p>Receives an array of <strong>{{MF_BYTE_STREAM_CACHE_RANGE}}</strong> structures. Each structure specifies a range of bytes stored in the cache. The caller must free the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Limits the cache size.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The maximum number of bytes to store in the cache, or <strong>{{ULONGLONG_MAX}} </strong> for no limit. The default value is no limit.</p> </dd> + + + + + <p>Queries whether background transfer is active.</p> + <p>Background transfer might stop because the cache limit was reached (see <strong>{{IMFByteStreamCacheControl2::SetCacheLimit}}</strong>) or because the <strong>{{IMFByteStreamCacheControl::StopBackgroundTransfer}}</strong> method was called.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if background transfer is currently active, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Sets the user name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the user name. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the user name is encrypted. Otherwise, the user name is not encrypted.</p> </dd> + + + + + <p> </p><p>Sets the password.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the password. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the buffer is a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>Size of <em>pbData</em>, in bytes. If <em>fDataIsEncrypted</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the password is encrypted. Otherwise, the password is not encrypted.</p> </dd> + + + + + <p> </p><p>Retrieves the user name.</p> + <p>If the user name is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the user name. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Retrieves the password.</p> + <p>If the password is not available, the method might succeed and set *<em>pcbData</em> to zero.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives the password. To find the required buffer size, set this parameter to <strong>{{NULL}}</strong>. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the buffer contains a wide-character string. Otherwise, the buffer contains encrypted data.</p> </dd> + + + <dd> <p>On input, specifies the size of the <em>pbData</em> buffer, in bytes. On output, receives the required buffer size. If <em>fEncryptData</em> is <strong>{{FALSE}}</strong>, the size includes the terminating null character.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the method returns an encrypted string. Otherwise, the method returns an unencrypted string.</p> </dd> + + + + + <p> </p><p>Queries whether logged-on credentials should be used.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If logged-on credentials should be used, the value is <strong>{{TRUE}}</strong>. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Implemented by applications to provide user credentials for a network source.</p><p>To use this interface, implement it in your application. Then create a property store object and set the <strong>{{MFNETSOURCE_CREDENTIAL_MANAGER}}</strong> property. The value of the property is a reference to your application's <strong>{{IMFNetCredentialManager}}</strong> interface. Then pass the property store to one of the source resolver's creation functions, such as <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong>, in the <em>pProps</em> parameter.</p><p>Media Foundation does not provide a default implementation of this interface. Applications that support authentication must implement this interface.</p> + + + + <p> </p><p>Begins an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFNetCredentialManagerGetParam}}</strong> structure.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to retrieve the user's credentials.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{IMFAsyncResult}}</strong> interface that contains the asynchronous result.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface, which is used to retrieve the credentials. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Specifies whether the user's credentials succeeded in the authentication challenge. The network source calls this method to informs the application whether the user's credentials were authenticated.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p>Boolean value. The value is <strong>{{TRUE}}</strong> if the credentials succeeded in the authentication challenge. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Gets credentials from the credential cache.</p><p>This interface is implemented by the credential cache object. Applications that implement the <strong>{{IMFNetCredentialManager}}</strong> interface can use this object to store the user's credentials. To create the credential cache object, call <strong>{{MFCreateCredentialCache}}</strong>.</p> + + + + <p> </p><p>Retrieves the credential object for the specified {{URL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated wide-character string containing the {{URL}} for which the credential is needed.</p> </dd> + + + <dd> <p>A null-terminated wide-character string containing the realm for the authentication.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetAuthenticationFlags}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredential}}</strong> interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialRequirements}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Reports whether the credential object provided successfully passed the authentication challenge.</p> + <p>This method is called by the network source into the credential manager.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the credential object succeeded in the authentication challenge; otherwise, <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Specifies how user credentials are stored.</p> + <p>If no flags are specified, the credentials are cached in memory. This method can be implemented by the credential manager and called by the network source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFNetCredential}}</strong> interface. Obtain this reference by calling <strong>{{IMFNetCredentialCache::GetCredential}}</strong>.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFNetCredentialOptions}}</strong> enumeration.</p> </dd> + + + + + <p>Implemented by a client and called by Microsoft Media Foundation to get the client Secure Sockets Layer ({{SSL}}) certificate requested by the server. </p><p>In most {{HTTPS}} connections the server provides a certificate so that the client can ensure the identity of the server. However, in certain cases the server might wants to verify the identity of the client by requesting the client to send a certificate. For this scenario, a client application must provide a mechanism for Media Foundation to retrieve the client side certificate while opening an {{HTTPS}} {{URL}} with the source resolver or the scheme handler. The application must implement <strong>{{IMFSSLCertificateManager}}</strong>, set the <strong>{{IUnknown}}</strong> reference of the implemented object in the {{MFNETSOURCE_SSLCERTIFICATE_MANAGER}} property, and pass the property store to the source resolver. While opening the {{URL}}, Media Foundation calls the <strong>{{IMFSSLCertificateManager}}</strong> methods to get the certificate information. If the application needs to connect to {{HTTPS}} {{URL}} that requires a client-side certificate, or the application wants customized control over the type of server certificates to accept, then they can implement this interface. This interface can also be used by the application to validate the server {{SSL}} certificate.</p><p>If the <strong>{{IUnknown}}</strong> reference is not provided by the application and the {{HTTPS}} {{URL}} does not require the client to provide a certificate, +Media Foundation uses the default implementation to open the {{URL}}. +</p> + + + + <p>Gets the client {{SSL}} certificate synchronously.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>Pointer to the buffer that stores the certificate. +This caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that receives the number of bytes required to hold the certificate data in the buffer pointed by <em>*ppbData</em>.</p> </dd> + + + + + <p>Starts an asynchronous call to get the client {{SSL}} certificate.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSSLCertificateManager::EndGetClientCertificate}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} for which a client-side {{SSL}} certificate is required. Media Foundation can resolve the scheme and send the request to the server.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to get the client {{SSL}} certificate. </p> + <p>Call this method after the <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p>Receives a reference to the buffer that stores the certificate. +The caller must free the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> buffer, in bytes.</p> </dd> + + + + + <p>Indicates whether the server {{SSL}} certificate must be verified by the caller, Media Foundation, or the <strong>{{IMFSSLCertificateManager}}</strong> implementation class.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a string that contains the {{URL}} that is sent to the server.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if <strong>{{IMFSSLCertificateManager::OnServerCertificate}}</strong> is used to verify the server certificate. +Set to <strong>{{FALSE}}</strong> if Media Foundation verifies the server certificate by using the certificates in the Windows certificate store. +</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> value. Set to <strong>{{TRUE}}</strong> if the {{SSL}} certificate for the client is available for immediate retrieval. Media Foundation calls <strong>{{IMFSSLCertificateManager::GetClientCertificate}}</strong> to obtain the client certificate synchronously. If the value is set to <strong>{{FALSE}}</strong>, Media Foundation obtains the client {{SSL}} certificate with an asynchronous call to <strong>{{IMFSSLCertificateManager::BeginGetClientCertificate}}</strong>.</p> </dd> + + + + + <p>Called by Media Foundation when the server {{SSL}} certificate has been received; indicates whether the server certificate is accepted.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a string that contains the {{URL}} used to send the request to the server, and for which a server-side {{SSL}} certificate has been received.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the server {{SSL}} certificate.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DWORD}}</strong> variable that indicates the size of <em>pbData</em> in bytes.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{BOOL}}</strong> variable that indicates whether the certificate is accepted.</p> </dd> + + + + + <p>Notifies the application when a byte stream requests a {{URL}}, and enables the application to block {{URL}} redirection.</p> + <p>To set the callback interface:</p><ol> <li>Query the byte stream object for the <strong>{{IMFAttributes}}</strong> interface.</li> <li>Call <strong>{{IMFAttributes::SetUnknown}}</strong> to set the {{MFNETSOURCE_RESOURCE_FILTER}} attribute.</li> </ol> + + + + <p>Called when the byte stream redirects to a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} to which the connection has been redirected.</p> </dd> + + + <dd> <p>To cancel the redirection, set this parameter to <strong>{{VARIANT_TRUE}}</strong>. To allow the redirection, set this parameter to <strong>{{VARIANT_FALSE}}</strong>.</p> </dd> + + + + + <p>Called when the byte stream requests a {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} that the byte stream is requesting.</p> </dd> + + + + + <p>Callback interface to receive notifications from a network source on the progress of an asynchronous open operation.</p> + + + + <p> </p><p>Called by the network source when the open operation begins or ends.</p> + <p>The networks source calls this method with the following event types.</p><ul> <li> <p> {{MEConnectStart}} </p> </li> <li> <p> {{MEConnectEnd}} </p> </li> </ul><p>For more information, see How to Get Events from the Network Source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface.</p> </dd> + + + + + <p>Determines the proxy to use when connecting to a server. The network source uses this interface.</p><p>Applications can create the proxy locator configured by the application by implementing the <strong>{{IMFNetProxyLocatorFactory}}</strong> interface and setting the <strong>{{MFNETSOURCE_PROXYLOCATORFACTORY}}</strong> property on the source resolver. Otherwise, the network source uses the default Media Foundation implementation.</p><p>To create the default proxy locator, call <strong>{{MFCreateProxyLocator}}</strong>.</p> + + + + <p> </p><p>Initializes the proxy locator object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Null-terminated wide-character string containing the hostname of the destination server.</p> </dd> + + + <dd> <p>Null-terminated wide-character string containing the destination {{URL}}.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Determines the next proxy to use.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>There are no more proxy objects.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Keeps a record of the success or failure of using the current proxy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p><strong>{{HRESULT}}</strong> specifying the result of using the current proxy for connection.</p> </dd> + + + + + <p> </p><p>Retrieves the current proxy information including hostname and port.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer specified in <em>pszStr</em> is too small.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that receives a null-terminated string containing the proxy hostname and port. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>On input, specifies the number of elements in the <em>pszStr</em> array. On output, receives the required size of the buffer.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the default proxy locator.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the new proxy locator object's <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an <strong>{{IMFNetProxyLocator}}</strong> interface proxy locator object based on the protocol name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Persists media data from a source byte stream to an application-provided byte stream.</p><p>The byte stream used for {{HTTP}} download implements this interface. To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong> on the byte stream, with the service identifier {{MFNET_SAVEJOB_SERVICE}}.</p> + + + + <p> </p><p>Begins saving a Windows Media file to the application's byte stream.</p> + <p>When the operation completes, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFSaveJob::EndSave}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of the application's byte stream. The data from the source byte stream is written to this byte stream.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Cancels the operation started by <strong>{{IMFSaveJob::BeginSave}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the percentage of content saved to the provided byte stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the percentage of completion.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves the number of protocols supported by the network scheme plug-in.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of protocols.</p> </dd> + + + + + <p> </p><p>Retrieves a supported protocol by index</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The value passed in the <em>nProtocolIndex</em> parameter was greater than the total number of supported protocols, returned by <strong>GetNumberOfSupportedProtocols</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the protocol to retrieve. To get the number of supported protocols, call <strong>{{IMFNetSchemeHandlerConfig::GetNumberOfSupportedProtocols}}</strong>.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MFNETSOURCE_PROTOCOL_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Not implemented in this release.</p> + <p>This method returns {{S_OK}}.</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request to create an object from a {{URL}}.</p><p>When the Source Resolver creates a media source from a {{URL}}, it passes the request to a scheme handler. The scheme handler might create a media source directly from the {{URL}}, or it might return a byte stream. If it returns a byte stream, the source resolver use a byte-stream handler to create the media source from the byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag or the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag. If the <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> flag is set, the scheme handler might create the media source directly from the {{URL}}, or it might create a byte stream. The type of object is returned in the <em>pObjectType</em> parameter of the <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> method. If the scheme handler returns a byte stream, the source resolver will pass the byte stream to a byte-stream handler, which will create the media source from the byte stream.</p><p>If the <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flag is set, the scheme handler will attempt to create a byte stream from the {{URL}}. However, if the scheme handler is designed to create a media source directly, rather than a byte stream, the method will fail.</p><p>The following table summarizes the behavior of these two flags when passed to this method:</p><table> <tr><th>Flag</th><th>Object created</th></tr> <tr><td><strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong></td><td>Media source or byte stream</td></tr> <tr><td><strong>{{MF_RESOLUTION_BYTESTREAM}}</strong></td><td>Byte stream</td></tr> </table><p>?</p><p>The <strong>{{MF_RESOLUTION_MEDIASOURCE}}</strong> and <strong>{{MF_RESOLUTION_BYTESTREAM}}</strong> flags can be combined, although in this case it is redundant.</p><p>When the operation completes, the scheme handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The Invoke method should call <strong>{{IMFSchemeHandler::EndCreateObject}}</strong> to get a reference to the created object.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p> Cannot open the {{URL}} with the requested access (read or write). </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_BYTESTREAM_TYPE}}</strong></dt> </dl> </td><td> <p> Unsupported byte stream type. </p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request to create an object from a {{URL}}.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the Invoke method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create an object from a {{URL}}.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p><p>The operation cannot be canceled if <strong>BeginCreateObject</strong> returns <strong>{{NULL}}</strong> in the <em>ppIUnknownCancelCookie</em> parameter.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFSchemeHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> Creates a media source from a byte stream. </p> + <p>Applications do not use this interface directly. This interface is exposed by byte-stream handlers, which are used by the source resolver. When the byte-stream handler is given a byte stream, it parses the stream and creates a media source. Byte-stream handlers are registered by file name extension or {{MIME}} type.</p> + + + + <p> </p><p>Begins an asynchronous request to create a media source from a byte stream.</p> + <p>The <em>dwFlags</em> parameter must contain the {{MF_RESOLUTION_MEDIASOURCE}} flag and should not contain the {{MF_RESOLUTION_BYTESTREAM}} flag.</p><p>The byte-stream handler is responsible for parsing the stream and validating the contents. If the stream is not valid or the byte stream handler cannot parse the stream, the handler should return a failure code. The byte stream is not guaranteed to match the type of stream that the byte handler is designed to parse.</p><p>If the <em>pwszURL</em> parameter is not <strong>{{NULL}}</strong>, the byte-stream handler might use the {{URL}} during the resolution process. (For example, it might use the file name extension, if present.) Also, the byte stream might contain the <strong>{{MF_BYTESTREAM_CONTENT_TYPE}}</strong> attribute, specifying the {{MIME}} type.</p><p>When the operation completes, the byte-stream handler calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFByteStreamHandler::EndCreateObject}}</strong> to get a reference to the media source.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the byte stream's <strong>{{IMFByteStream}}</strong> interface.</p> </dd> + + + <dd> <p>String that contains the original {{URL}} of the byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Bitwise {{OR}} of zero or more flags. See <strong>Source Resolver Flags</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store. The byte-stream handler can use this property store to configure the object. This parameter can be <strong>{{NULL}}</strong>. For more information, see Configuring a Media Source.</p> </dd> + + + <dd> <p>Receives an <strong>{{IUnknown}}</strong> reference or the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, you can cancel the asynchronous operation by passing this reference to the <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong> method. The caller must release the interface. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request to create a media source.</p> + <p>Call this method from inside the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ABORT}}</strong></dt> </dl> </td><td> <p>The operation was canceled. See <strong>{{IMFByteStreamHandler::CancelObjectCreation}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_CANNOT_PARSE_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Unable to parse the byte stream.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration, specifying the type of object that was created.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Cancels the current request to create a media source.</p> + <p>You can use this method to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might be completed before the operation can be canceled. Therefore, your callback might still be invoked after you call this method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface that was returned in the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFByteStreamHandler::BeginCreateObject}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the maximum number of bytes needed to create the media source or determine that the byte stream handler cannot parse this stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the maximum number of bytes that are required.</p> </dd> + + + + + <p> Implemented by components that provide input trust authorities ({{ITAs}}). This interface is used to get the {{ITA}} for each of the component's streams. </p> + + + + <p> </p><p>Retrieves the input trust authority ({{ITA}}) for a specified stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The {{ITA}} does not expose the requested interface.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream identifier for which the {{ITA}} is being requested.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. Currently the only supported value is {{IID_IMFInputTrustAuthority}}.</p> </dd> + + + <dd> <p>Receives a reference to the {{ITA}}'s <strong>{{IUnknown}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables other components in the protected media path ({{PMP}}) to use the input protection system provided by an input trust authorities ({{ITA}}). An {{ITA}} is a component that implements an input protection system for media content. {{ITAs}} expose the <strong>{{IMFInputTrustAuthority}}</strong> interface.</p><p>An {{ITA}} translates policy from the content's native format into a common format that is used by other {{PMP}} components. It also provides a decrypter, if one is needed to decrypt the stream.</p><p>The topology contains one {{ITA}} instance for every protected stream in the media source. The {{ITA}} is obtained from the media source by calling <strong>{{IMFTrustedInput::GetInputTrustAuthority}}</strong>.</p> + + + + <p> </p><p>Retrieves a decrypter transform.</p> + <p>The decrypter should be created in a disabled state, where any calls to <strong>{{IMFTransform::ProcessOutput}}</strong> automatically fail. After the input trust authority ({{ITA}}) has verified that it is running inside the protected media path ({{PMP}}), the {{ITA}} should enable the decrypter.</p><p>An {{ITA}} is not required to provide a decrypter. If the source content is not encrypted, the method should return {{MF_E_NOT_PROTECTED}}. The {{PMP}} will then proceed without using a decrypter for that stream.</p><p>The {{ITA}} must create a new instance of its decrypter for each call to <strong>GetDecrypter</strong>. Do not return multiple references to the same decrypter. They must be separate instances because the Media Session might place them in two different branches of the topology.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The decrypter does not support the requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_PROTECTED}}</strong></dt> </dl> </td><td> <p>This input trust authority ({{ITA}}) does not provide a decrypter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface being requested. Currently this value must be {{IID_IMFTransform}}, which requests the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Requests permission to perform a specified action on the stream.</p> + <p>This method verifies whether the user has permission to perform a specified action on the stream. The {{ITA}} does any work needed to verify the user's right to perform the action, such as checking licenses.</p><p>To verify the user's rights, the {{ITA}} might need to perform additional steps that require interaction with the user or consent from the user. For example, it might need to acquire a new license or individualize a {{DRM}} component. In that case, the {{ITA}} creates an activation object for a content enabler and returns the activation object's <strong>{{IMFActivate}}</strong> interface in the <em>ppContentEnablerActivate</em> parameter. The activation object is responsible for creating a content enabler that exposes the <strong>{{IMFContentEnabler}}</strong> interface. The content enabler is used as follows:</p><ol> <li> <p>The Media Session returns the <strong>{{IMFActivate}}</strong> reference to the application.</p> </li> <li> <p>The application calls <strong>{{IMFActivate::ActivateObject}}</strong> to activate the content enabler.</p> </li> <li> <p>The application calls <strong>{{IMFContentEnabler}}</strong> methods to perform whatever actions are needed, such as individualization or obtaining a license. The content enabler object must encapsulate this functionality through the <strong>{{IMFContentEnabler}}</strong> interface.</p> </li> <li> <p>The Media Session calls <strong>RequestAccess</strong> again.</p> </li> </ol><p>The return value signals whether the user has permission to perform the action:</p><ul> <li> <p>If the user already has permission to perform the action, the method returns {{S_OK}} and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the user does not have permission, the method returns a failure code and sets *<em>ppContentEnablerActivate</em> to <strong>{{NULL}}</strong>.</p> </li> <li> <p>If the {{ITA}} must perform additional steps that require interaction with the user, the method returns a failure code and returns the content enabler's <strong>{{IMFActivate}}</strong> reference in <em>ppContentEnablerActivate</em>.</p> </li> </ul><p>The Media Session will not allow the action unless this method returns {{S_OK}}. However, a return value of {{S_OK}} does not guarantee that the action will be performed, because some other failure might occur after this method is called. When the action is definitely about to happen, the Media Session calls <strong>{{IMFInputTrustAuthority::BindAccess}}</strong>.</p><p>A stream can go to multiple outputs, so this method might be called multiple times with different actions, once for every output.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The user has permission to perform this action.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_DRM_NEEDS_INDIVIDUALIZATION}}</strong></dt> </dl> </td><td> <p>The user must individualize the application.</p> </td></tr> <tr><td> <dl> <dt><strong>{{NS_E_LICENSE_REQUIRED}}</strong></dt> </dl> </td><td> <p>The user must obtain a license.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The requested action, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the value <strong>{{NULL}}</strong> or a reference to the <strong>{{IMFActivate}}</strong> interface. The <strong>{{IMFActivate}}</strong> interface is used to create a content enabler object. The caller must release the interface. For more information, see Remarks.</p> </dd> + + + + + <p> </p><p>Retrieves the policy that defines which output protection systems are allowed for this stream, and the configuration data for each protection system.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The action that will be performed on this stream, specified as a member of the <strong>{{MFPOLICYMANAGER_ACTION}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFOutputPolicy}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) that a requested action is about to be performed.</p> + <p>Before calling this method, the Media Session calls <strong>{{IMFInputTrustAuthority::RequestAccess}}</strong> to request an action. The <strong>BindAccess</strong> method notifies the {{ITA}} that the action is definitely about to occur, so that the {{ITA}} can update its internal state as needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>BindAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Notifies the input trust authority ({{ITA}}) when the number of output trust authorities ({{OTAs}}) that will perform a specified action has changed.</p> + <p>The {{ITA}} can update its internal state if needed. If the method returns a failure code, the Media Session cancels the action.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to an <strong>{{MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS}}</strong> structure that contains parameters for the <strong>UpdateAccess</strong> action.</p> </dd> + + + + + <p> </p><p>Resets the input trust authority ({{ITA}}) to its initial state.</p> + <p>When this method is called, the {{ITA}} should disable any decrypter that was returned in the <strong>{{IMFInputTrustAuthority::GetDecrypter}}</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Implemented by components that provide output trust authorities ({{OTAs}}). Any Media Foundation transform ({{MFT}}) or media sink that is designed to work within the protected media path ({{PMP}}) and also sends protected content outside the Media Foundation pipeline must implement this interface.</p><p>The policy engine uses this interface to negotiate what type of content protection should be applied to the content. Applications do not use this interface directly.</p> + <p>If an {{MFT}} supports <strong>{{IMFTrustedOutput}}</strong>, it must expose the interface through <strong>QueryInterface</strong>. The interface applies to all of the input streams on the {{MFT}}. (There is no mechanism to return a separate <strong>{{IMFTrustedOutput}}</strong> reference for each stream.) The {{MFT}} must apply the output policies to all of its input streams. If the {{MFT}} sends different streams to separate connectors, it must report all of the connector attributes.</p> + + + + <p> Gets the number of output trust authorities ({{OTAs}}) provided by this trusted output. Each {{OTA}} reports a single action.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{OTAs}}. </p> </dd> + + + + + <p> Gets an output trust authority ({{OTA}}), specified by index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the {{OTA}} to retrieve. To get the number of {{OTAs}} provided by this object, call <strong>{{IMFTrustedOutput::GetOutputTrustAuthorityCount}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFOutputTrustAuthority}}</strong> interface of the {{OTA}}. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Queries whether this output is a policy sink, meaning it handles the rights and restrictions required by the input trust authority ({{ITA}}).</p> + <p>A trusted output is generally considered to be a policy sink if it does not pass the media content that it receives anywhere else; or, if it does pass the media content elsewhere, either it protects the content using some proprietary method such as encryption, or it sufficiently devalues the content so as not to require protection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. If <strong>{{TRUE}}</strong>, this object is a policy sink. If <strong>{{FALSE}}</strong>, the policy must be enforced further downstream.</p> </dd> + + + + + <p>Encapsulates the functionality of one or more output protection systems that a trusted output supports. This interface is exposed by output trust authority ({{OTA}}) objects. Each {{OTA}} represents a single action that the trusted output can perform, such as play, copy, or transcode. An {{OTA}} can represent more than one physical output if each output performs the same action.</p> + + + + <p> </p><p>Retrieves the action that is performed by this output trust authority ({{OTA}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the {{MFPOLICYMANAGER_ACTION}} enumeration.</p> </dd> + + + + + <p> Sets one or more policy objects on the output trust authority ({{OTA}}). </p> + <p>If the method returns <strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong>, the {{OTA}} sends an {{MEPolicySet}} event when it enforces the policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_WAIT_FOR_POLICY_SET}}</strong></dt> </dl> </td><td> <p> The policy was negotiated successfully, but the {{OTA}} will enforce it asynchronously. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_POLICY_UNSUPPORTED}}</strong></dt> </dl> </td><td> <p> The {{OTA}} does not support the requirements of this policy. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The address of an array of <strong>{{IMFOutputPolicy}}</strong> references. </p> </dd> + + + <dd> <p> The number of elements in the <em>ppPolicy</em> array. </p> </dd> + + + <dd> <p> Receives either a reference to a buffer allocated by the {{OTA}}, or the value <strong>{{NULL}}</strong>. If this parameter receives a non-<strong>{{NULL}}</strong> value, the caller must release the buffer by calling <strong>CoTaskMemFree</strong>. </p> <strong>Note</strong>??Currently this parameter is reserved. An {{OTA}} should set the reference to <strong>{{NULL}}</strong>. ? </dd> + + + <dd> <p> Receives the size of the <em>ppbTicket</em> buffer, in bytes. If <em>ppbTicket</em> receives the value <strong>{{NULL}}</strong>, <em>pcbTicket</em> receives the value zero.</p> </dd> + + + + + <p>Encapsulates a usage policy from an input trust authority ({{ITA}}). Output trust authorities ({{OTAs}}) use this interface to query which protection systems they are required to enforce by the {{ITA}}.</p> + + + + <p> Retrieves a list of the output protection systems that the output trust authority ({{OTA}}) must enforce, along with configuration data for each protection system. </p> + <p>The video {{OTA}} returns the <strong>{{MFCONNECTOR_UNKNOWN}}</strong> connector type unless the Direct3D device is in full-screen mode. (Direct3D windowed mode is not generally a secure video mode.) You can override this behavior by implementing a custom {{EVR}} presenter that implements the <strong>{{IEVRTrustedVideoPlugin}}</strong> interface.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Describes the output that is represented by the {{OTA}} calling this method. This value is a bitwise {{OR}} of zero or more of the following flags. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUS}}</strong></dt> </dl> </td><td> <p> Hardware bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_COMPRESSED}}</strong></dt> </dl> </td><td> <p> The output sends compressed data. If this flag is absent, the output sends uncompressed data. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_BUSIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_DIGITAL}}</strong></dt> </dl> </td><td> <p> The output sends a digital signal. If this flag is absent, the output sends an analog signal. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_NONSTANDARDIMPLEMENTATION}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_SOFTWARE}}</strong></dt> </dl> </td><td> <p> Reserved. Do not use. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFOUTPUTATTRIBUTE_VIDEO}}</strong></dt> </dl> </td><td> <p> The output sends video data. If this flag is absent, the output sends audio data. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Indicates a specific family of output connectors that is represented by the {{OTA}} calling this method. Possible values include the following. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_AGP}}</strong></dt> </dl> </td><td> <p> {{AGP}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPONENT}}</strong></dt> </dl> </td><td> <p> Component video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_COMPOSITE}}</strong></dt> </dl> </td><td> <p> Composite video. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_D_JPN}}</strong></dt> </dl> </td><td> <p> Japanese D connector. (Connector conforming to the {{EIAJ}} {{RC}}-5237 standard.) </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DISPLAYPORT_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External DisplayPort connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_DVI}}</strong></dt> </dl> </td><td> <p> Digital video interface ({{DVI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_HDMI}}</strong></dt> </dl> </td><td> <p> High-definition multimedia interface ({{HDMI}}) connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_LVDS}}</strong></dt> </dl> </td><td> <p> Low voltage differential signaling ({{LVDS}}) connector.</p> <p>A connector using the {{LVDS}} interface to connect internally to a display device. The connection between the graphics adapter and the display device is permanent and not accessible to the user. Applications should not enable High-Bandwidth Digital Content Protection ({{HDCP}}) for this connector.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI}}</strong></dt> </dl> </td><td> <p> {{PCI}} bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCI_Express}}</strong></dt> </dl> </td><td> <p> {{PCI}} Express bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_PCIX}}</strong></dt> </dl> </td><td> <p> {{PCI}}-X bus. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SDI}}</strong></dt> </dl> </td><td> <p> Audio data sent over a connector via S/{{PDIF}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SPDIF}}</strong></dt> </dl> </td><td> <p> Serial digital interface connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_SVIDEO}}</strong></dt> </dl> </td><td> <p> S-Video connector. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EMBEDDED}}</strong></dt> </dl> </td><td> <p> Embedded Unified Display Interface ({{UDI}}). </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UDI_EXTERNAL}}</strong></dt> </dl> </td><td> <p> External {{UDI}}. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_UNKNOWN}}</strong></dt> </dl> </td><td> <p> Unknown connector type. See Remarks. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFCONNECTOR_VGA}}</strong></dt> </dl> </td><td> <p> {{VGA}} connector. </p> </td></tr> <tr><td><dl> <dt><strong> {{MFCONNECTOR_MIRACAST}}</strong></dt> </dl> </td><td> <p>Miracast wireless connector. </p> <p>Supported in Windows?8.1 and later.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Pointer to an array of {{GUID}} values that specify which output protection systems are supported by the {{OTA}} that is calling this method. </p> </dd> + + + <dd> <p> Number of elements in the <em>rgGuidProtectionSchemasSupported</em> array. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object. The caller must release the interface. Each object in the collection is an <strong>{{IMFOutputSchema}}</strong> reference. Each <strong>{{IMFOutputSchema}}</strong> reference defines an output protection system that the {{OTA}} must enforce. </p> </dd> + + + + + <p> </p><p>Retrieives a {{GUID}} identifying the input trust authority ({{ITA}}) that created this output policy object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> </p><p>Retrieves the minimum version of the global revocation list ({{GRL}}) that must be enforced by the protected environment for this policy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the minimum {{GRL}} version.</p> </dd> + + + + + <p>Encapsulates information about an output protection system and its corresponding configuration data.</p> + <p>If the configuration information for the output protection system does not require more than a <strong>{{DWORD}}</strong> of space, the configuration information is retrieved in the <strong>GetConfigurationData</strong> method. If more than a <strong>{{DWORD}}</strong> of configuration information is needed, it is stored using the <strong>{{IMFAttributes}}</strong> interface.</p> + + + + <p> </p><p>Retrieves the output protection system that is represented by this object. Output protection systems are identified by {{GUID}} value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the {{GUID}} that identifies the output protection system.</p> </dd> + + + + + <p> </p><p>Returns configuration data for the output protection system. The configuration data is used to enable or disable the protection system, and to set the protection levels.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the configuration data. The meaning of this data depends on the output protection system.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} identifying the input trust authority ({{ITA}}) that generated this output schema object.</p> + <p>All of the policy objects and output schemas from the same {{ITA}} should return the same originator identifier (including dynamic policy changes). This value enables the {{OTA}} to distinguish policies that originate from different {{ITAs}}, so that the {{OTA}} can update dynamic policies correctly.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a {{GUID}} that identifies the originating {{ITA}}.</p> </dd> + + + + + <p> Establishes a one-way secure channel between two objects. </p> + + + + <p> </p><p>Retrieves the client's certificate.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to a buffer allocated by the object. The buffer contains the client's certificate. The caller must release the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Passes the encrypted session key to the client.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a buffer that contains the encrypted session key. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbEncryptedSessionKey</em> buffer, in bytes.</p> </dd> + + + + + <p> Provides encryption for media data inside the protected media path ({{PMP}}). </p> + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on input.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the version of sample protection that the component implements on output.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a member of the <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Retrieves the sample protection certificate.</p> + <p>For certain version numbers of sample protection, the downstream component must provide a certificate. Components that do not support these version numbers can return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme for which to receive a certificate. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Receives a reference to a buffer containing the certificate. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppCert</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves initialization information for sample protection from the upstream component.</p> + <p>This method must be implemented by the upstream component. The method fails if the component does not support the requested sample protection version. Downstream components do not implement this method and should return {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the output stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a certificate provided by the downstream component.</p> </dd> + + + <dd> <p>Size of the certificate, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to a buffer that contains the initialization information for downstream component. The caller must free the memory for the buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p> </p><p>Initializes sample protection on the downstream component.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the version number of the sample protection scheme. The version number is specified as a <strong>{{SAMPLE_PROTECTION_VERSION}}</strong> enumeration value.</p> </dd> + + + <dd> <p>Identifier of the input stream. The identifier corresponds to the output stream identifier returned by the <strong>{{IMFTransform}}</strong> interface.</p> </dd> + + + <dd> <p>Pointer to a buffer that contains the initialization data provided by the upstream component. To retrieve this buffer, call <strong>{{IMFSampleProtection::InitOutputProtection}}</strong>.</p> </dd> + + + <dd> <p>Size of the <em>pbSeed</em> buffer, in bytes.</p> </dd> + + + + + <p>Enables a media sink to receive samples before the presentation clock is started.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>Media sinks can implement this interface to support seamless playback and transitions. If a media sink exposes this interface, it can receive samples before the presentation clock starts. It can then pre-process the samples, so that rendering can begin immediately when the clock starts. Prerolling helps to avoid glitches during playback.</p><p>If a media sink supports preroll, the media sink's <strong>{{IMFMediaSink::GetCharacteristics}}</strong> method should return the {{MEDIASINK_CAN_PREROLL}} flag.</p> + + + + <p> Notifies the media sink that the presentation clock is about to start. </p> + <p> After this method is called, the media sink sends any number of {{MEStreamSinkRequestSample}} events to request samples, until is has enough preroll data. When it has enough preroll data, the media sink sends an {{MEStreamSinkPrerolled}} event. This event signals that the client can start the presentation clock. </p><p> During preroll, the media sink can prepare the samples that it receives, so that they are ready to be rendered. It does not actually render any samples until the clock starts. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The upcoming start time for the presentation clock, in 100-nanosecond units. This time is the same value that will be given to the <strong>{{IMFPresentationClock::Start}}</strong> method when the presentation clock is started. </p> </dd> + + + + + <p>Optionally supported by media sinks to perform required tasks before shutdown. This interface is typically exposed by archive sinks?that is, media sinks that write to a file. It is used to perform tasks such as flushing data to disk or updating a file header.</p><p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media sink.</p> + <p>If a media sink exposes this interface, the Media Session will call <strong>BeginFinalize</strong> on the sink before the session closes.</p> + + + + <p> </p><p>Notifies the media sink to asynchronously take any steps it needs to finish its tasks.</p> + <p>Many archive media sinks have steps they need to do at the end of archiving to complete their file operations, such as updating the header (for some formats) or flushing all pending writes to disk. In some cases, this may include expensive operations such as indexing the content. <strong>BeginFinalize</strong> is an asynchronous way to initiate final tasks.</p><p>When the finalize operation is complete, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFFinalizableMediaSink::EndFinalize}}</strong> to complete the asynchronous request.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of an asynchronous object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous finalize operation.</p> + <p>Call this method after the <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> method completes asynchronously.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + + + <p>Passes configuration information to the media sinks that are used for streaming the content. Optionally, this interface is supported by media sinks. The built-in {{ASF}} streaming media sink and the {{MP3}} media sink implement this interface.</p> + + + + <p>Called by the streaming media client before the Media Session starts streaming to specify the byte offset or the time offset.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A Boolean value that specifies whether <em>qwSeekOffset</em> gives a byte offset of a time offset.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{TRUE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies a byte offset.</p> </td></tr> <tr><td><dl> <dt><strong>{{FALSE}}</strong></dt> </dl> </td><td> <p>The <em>qwSeekOffset</em> parameter specifies the time position in 100-nanosecond units.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A byte offset or a time offset, depending on the value passed in <em>fSeekOffsetIsByteOffset</em>. Time offsets are specified in 100-nanosecond units. +</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the remote object for which this object is a proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Retrieves a reference to the object that is hosting this proxy.</p> + <p>The method returns an {{HRESULT}}. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface reference to and from a stream.</p><p>Stream objects that support <strong>{{IStream}}</strong> can expose this interface to provide custom marshaling for interface references.</p> + + + + <p> </p><p>Stores the data needed to marshal an interface across a process boundary.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Marshals an interface from data stored in the stream.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier of the interface to marshal.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHost::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHost::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates an object in the protect media path ({{PMP}}) process, from a {{CLSID}}. </p> + <p> You can use the <em>pStream</em> parameter to initialize the object after it is created. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The {{CLSID}} of the object to create. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. If this parameter is not <strong>{{NULL}}</strong>, the {{PMP}} host queries the created object for the <strong>{{IPersistStream}}</strong> interface and calls <strong>{{IPersistStream::Load}}</strong>, passing in the <em>pStream</em> reference. </p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> Enables a media source to receive a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>If a media source exposes this interface, the Protected Media Path ({{PMP}}) Media Session calls <strong>SetPMPHost</strong> with a reference to the <strong>{{IMFPMPHost}}</strong> interface. The media source can use the <strong>{{IMFPMPHost}}</strong> interface to create objects in the {{PMP}} process.</p> + + + + <p> Provides a reference to the <strong>{{IMFPMPHost}}</strong> interface. </p> + <p>The <strong>{{IMFPMPHost}}</strong> reference is apartment threaded. The media source must add the reference to the global interface table ({{GIT}}) before using it.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Enables two instances of the Media Session to share the same protected media path ({{PMP}}) process. </p> + <p>If your application creates more than one instance of the Media Session, you can use this interface to share the same {{PMP}} process among several instances. This can be more efficient than re-creating the {{PMP}} process each time.</p><p>Use this interface as follows:</p><ol> <li> Create the first instance of the {{PMP}} Media Session by calling <strong>{{MFCreatePMPMediaSession}}</strong>. </li> <li> Retrieve an <strong>{{IMFPMPServer}}</strong> reference from the first Media Session by calling <strong>{{IMFGetService::GetService}}</strong> with the service identifier <strong>{{MF_PMP_SERVER_CONTEXT}}</strong>. </li> <li> Create the second instance of the {{PMP}} Media Session. Set the {{MF_SESSION_SERVER_CONTEXT}} attribute on the <em>pConfiguration</em> parameter of the <strong>{{MFCreatePMPMediaSession}}</strong> function. The attribute value is the <strong>{{IMFPMPServer}}</strong> reference retrieved in step 2. </li> </ol> + + + + <p> </p><p>Blocks the protected media path ({{PMP}}) process from ending.</p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to {{IMFPMPServer::UnlockProcess}}, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to {{IMFPMPServer::LockProcess}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an object in the protected media path ({{PMP}}) process.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{CLSID}} of the object to create.</p> </dd> + + + <dd> <p>Interface identifier of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Modifies a topology for use in a Terminal Services environment. </p> + <p>To use this interface, do the following:</p><ol> <li> Call <strong>GetSystemMetrics</strong> with the <strong>{{SM_REMOTESESSION}}</strong> flag. The function returns <strong>{{TRUE}}</strong> if the calling process is associated with a Terminal Services client session. </li> <li> If <strong>GetSystemMetrics</strong> returns <strong>{{TRUE}}</strong>, call <strong>{{MFCreateRemoteDesktopPlugin}}</strong>. This function returns a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface. </li> <li> Call <strong>UpdateTopology</strong> with a reference to the topology. </li> </ol><p>The application must call <strong>UpdateTopology</strong> before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + + + + <p> </p><p>Modifies a topology for use in a Terminal Services environment.</p> + <p>If the application is running in a Terminal Services client session, call this method before calling <strong>{{IMFMediaSession::SetTopology}}</strong> on the Media Session.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFTopology}}</strong> interface of the topology.</p> </dd> + + + + + <p> Sets and retrieves Synchronized Accessible Media Interchange ({{SAMI}}) styles on the {{SAMI}} Media Source. </p> + <p> To get a reference to this interface, call <strong>{{IMFGetService::GetService}}</strong>. The service identifier is <strong>{{MF_SAMI_SERVICE}}</strong>. Call <strong>GetService</strong> either directly on the {{SAMI}} media source, or on the Media Session (if you are using the {{SAMI}} source with the Media Session).</p> + + + + <p> Gets the number of styles defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of {{SAMI}} styles in the file. </p> </dd> + + + + + <p> Gets a list of the style names defined in the {{SAMI}} file. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives an array of null-terminated wide-character strings. The <strong>{{PROPVARIANT}}</strong> type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must clear the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> Sets the current style on the {{SAMI}} media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string containing the name of the style. To clear the current style, pass an empty string (""). To get the list of style names, call <strong>{{IMFSAMIStyle::GetStyles}}</strong>.</p> </dd> + + + + + <p> Gets the current style from the {{SAMI}} media source. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to a null-terminated string that contains the name of the style. If no style is currently set, the method returns an empty string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + + + <p>Implemented by the transcode profile object.</p><p>The transcode profile stores configuration settings that the topology builder uses to generate the transcode topology for the output file. These configuration settings are specified by the caller and include audio and video stream properties, encoder settings, and container settings that are specified by the caller.</p><p>To create the transcode profile object, call <strong>{{MFCreateTranscodeProfile}}</strong>. The configured transcode profile is passed to <strong>{{MFCreateTranscodeTopology}}</strong>, which creates the transcode topology with the appropriate settings. </p> + + + + <p>Sets audio stream configuration settings in the transcode profile.</p><p>To get a list of compatible audio media types supported by the Media Foundation transform ({{MFT}}) encoder , call <strong>{{MFTranscodeGetAudioOutputAvailableTypes}}</strong>. You can get the attributes that are set on the required media type and set them on the transcode profile. To set the audio attributes properly, create a new attribute store and copy the attribute store from the required media media type by calling <strong>{{IMFAttributes::CopyAllItems}}</strong>. This makes sure that the caller does not hold the references to the media type retrieved from the encoder. For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio stream settings that are currently set in the transcode profile. </p> + <p>If there are no audio attributes set in the transcode profile, the call to <strong>GetAudioAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following topics describe the audio attributes:</p><ul> <li> Audio Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current audio stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets video stream configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the video stream settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the <strong>GetVideoAttributes</strong> method succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p>To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute, and specify the attribute name. The following list shows the video attributes:</p><ul> <li> Video Media Types </li> <li> {{MF_TRANSCODE_ENCODINGPROFILE}} </li> <li> {{MF_TRANSCODE_QUALITYVSSPEED}} </li> <li> {{MF_TRANSCODE_DONOT_INSERT_ENCODER}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current video stream settings. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets container configuration settings in the transcode profile.</p><p> For example code, see <strong>{{MFCreateTranscodeProfile}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the container settings that are currently set in the transcode profile.</p> + <p>If there are no container attributes set in the transcode profile, the call to <strong>GetContainerAttributes</strong> succeeds and <em>ppAttrs</em> receives <strong>{{NULL}}</strong>.</p><p> To get a specific attribute value, the caller must call the appropriate <strong>{{IMFAttributes}}</strong> method depending on the data type of the attribute. The following list shows the container attributes:</p><ul> <li> {{MF_TRANSCODE_CONTAINERTYPE}} </li> <li> {{MF_TRANSCODE_SKIP_METADATA_TRANSFER}} </li> <li> {{MF_TRANSCODE_TOPOLOGYMODE}} </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store containing the current container type for the output file. Caller must release the interface reference.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets the name of the encoded output file.</p> + <p> The media sink will create a local file with the specified file name.</p><p>Alternately, you can call <strong>{{IMFTranscodeSinkInfoProvider::SetOutputByteStream}}</strong> to specify a byte stream that will receive the transcoded data. These two methods are mutually exclusive.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to a null-terminated string that contains the name of the output file.</p> </dd> + + + + + <p>Sets an output byte stream for the transcode media sink.</p> + <p>Call this method to provide a writeable byte stream that will receive the transcoded data.</p><p>Alternatively, you can provide the name of an output file, by calling <strong>{{IMFTranscodeSinkInfoProvider::SetOutputFile}}</strong>. These two methods are mutually exclusive.</p><p>The <em>pByteStreamActivate</em> parameter must specify an activation object that creates a writeable byte stream. Internally, the transcode media sink calls <strong>{{IMFActivate::ActivateObject}}</strong> to create the byte stream, as follows:</p><code>{{IMFByteStream}} *pByteStream = {{NULL}}; {{HRESULT}} hr = pByteStreamActivate-&gt;ActivateObject({{IID_IMFByteStream}}, (void**)&amp;pByteStream);</code><p>Currently, Microsoft Media Foundation does not provide any byte-stream activation objects. To use this method, an application must provide a custom implementation of <strong>{{IMFActivate}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFActivate}}</strong> interface of a byte-stream activation object. </p> </dd> + + + + + <p>Sets the transcoding profile on the transcode sink activation object.</p> + <p>Before calling this method, initialize the profile object as follows:</p><ul> <li>Set the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to specify the container type of the output file.</li> <li>If the output file will have a video stream, set video attributes by calling the <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> method.</li> <li>If the output file will have an audio stream, set audio attributes by calling the <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> method.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface. To get a reference to this interface, call <strong>{{MFCreateTranscodeProfile}}</strong>.</p> </dd> + + + + + <p> Gets the media types for the audio and video streams specified in the transcode profile.</p> + <p>Before calling this method, call <strong>{{IMFTranscodeSinkInfoProvider::SetProfile}}</strong> to set the transcode profile. The <strong>GetSinkInfo</strong> method uses the profile to create media types for the audio and video streams. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MF_TRANSCODE_SINK_INFO}}</strong> structure.</p> <p>If the method succeeds, the method assigns <strong>{{IMFMediaType}}</strong> references to the <strong>pAudioMediaType</strong> and <strong>pVideoMediaType</strong> members of this structure. The method might set either member to <strong>{{NULL}}</strong>. If either member is non-{{NULL}} after the method returns, the caller must release the <strong>{{IMFMediaType}}</strong> references.</p> </dd> + + + + + <p>Enables an application to use a Media Foundation transform ({{MFT}}) that has restrictions on its use.</p> + <p>If you register an {{MFT}} that requires unlocking, include the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag when you call the <strong>{{MFTRegister}}</strong> function.</p> + + + + <p>Unlocks a Media Foundation transform ({{MFT}}) so that the application can use it.</p> + <p>This method authenticates the caller, using a private communication channel between the {{MFT}} and the object that implements the <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface. The details of the communication depend entirely on the implementation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the {{MFT}}.</p> </dd> + + + + + <p>Registers Media Foundation transforms ({{MFTs}}) in the caller's process.</p><p>The Media Session exposes this interface as a service. To obtain a reference to this interface, call the <strong>{{IMFGetService::GetService}}</strong> method on the Media Session with the service identifier <strong>{{MF_LOCAL_MFT_REGISTRATION_SERVICE}}</strong>.</p> + <p>This interface requires the Media Session. If you are not using the Media Session for playback, call one of the following functions instead:</p><ul> <li> <strong>{{MFTRegisterLocal}}</strong> </li> <li> <strong>{{MFTRegisterLocalByCLSID}}</strong> </li> </ul> + + + + <p>Registers one or more Media Foundation transforms ({{MFTs}}) in the caller's process.</p> + <p>This method is similar to the <strong>{{MFTRegisterLocalByCLSID}}</strong> function. It registers one or more {{MFTs}} in the caller's process. These {{MFTs}} can be enumerated by calling the <strong>{{MFTEnumEx}}</strong> function with the <strong>{{MFT_ENUM_FLAG_LOCALMFT}}</strong> flag.</p><p>Unlike <strong>{{MFTRegisterLocalByCLSID}}</strong>, however, this method also makes the {{MFT}} available in the Protected Media Path ({{PMP}}) process, and is therefore useful if you are using the Media Session inside the {{PMP}}. For more information, see the following topics:</p><ul> <li> <strong>{{MFCreatePMPMediaSession}}</strong> </li> <li> Protected Media Path </li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an array of <strong>{{MFT_REGISTRATION_INFO}}</strong> structures.</p> </dd> + + + <dd> <p>The number of elements in the <em>pMFTs</em> array.</p> </dd> + + + + + + + + + + + + + + + + + <p>Allows a media source to create a Windows Runtime object in the Protected Media Path ({{PMP}}) process. </p> + + + + <p> Blocks the protected media path ({{PMP}}) process from ending. </p> + <p>When this method is called, it increments the lock count on the {{PMP}} process. For every call to this method, the application should make a corresponding call to <strong>{{IMFPMPHostApp::UnlockProcess}}</strong>, which decrements the lock count. When the {{PMP}} process is ready to exit, it waits for about 3 seconds, or until the lock count reaches zero, before exiting.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Decrements the lock count on the protected media path ({{PMP}}) process. Call this method once for each call to <strong>{{IMFPMPHostApp::LockProcess}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Creates a Windows Runtime object in the protected media path ({{PMP}}) process. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Id of object to create.</p> </dd> + + + <dd> <p>Data to be passed to the object by way of a <strong>{{IPersistStream}}</strong>.</p> </dd> + + + <dd> <p> The interface identifier ({{IID}}) of the interface to retrieve. </p> </dd> + + + <dd> <p> Receives a reference to the created object. </p> </dd> + + + + + <p>Provides a mechanism for a media source to implement content protection functionality in a Windows Store apps.</p> + <p><strong>When to implement:</strong> A media source implements <strong>{{IMFPMPClientApp}}</strong> in order to implement content protection functionality for Windows Store apps. </p> + + + + <p>Sets a reference to the <strong>{{IMFPMPHostApp}}</strong> interface allowing a media source to create objects in the {{PMP}} process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Represents a request for a sample from a MediaStreamSource. </p> + <p><strong>{{MFMediaStreamSourceSampleRequest}}</strong> is implemented by the <strong>Windows.Media.Core.MediaStreamSourceSampleRequest</strong> runtime class.</p> + + + + <p>Sets the sample for the media stream source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The sample for the media stream source.</p> </dd> + + + + + <p>Tracks the reference counts on a video media sample. Video samples created by the <strong>{{MFCreateVideoSampleFromSurface}}</strong> function expose this interface.</p> + <p>Use this interface to determine whether it is safe to delete or re-use the buffer contained in a sample. One object assigns itself as the owner of the video sample by calling <strong>SetAllocator</strong>. When all objects release their reference counts on the sample, the owner's callback method is invoked.</p> + + + + <p> </p><p>Sets the owner for the sample.</p> + <p>When this method is called, the sample holds an additional reference count on itself. When every other object releases its reference counts on the sample, the sample invokes the <em>pSampleAllocator</em> callback method. To get a reference to the sample, call <strong>{{IMFAsyncResult::GetObject}}</strong> on the asynchronous result object given to the callback's <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p><p>After the callback is invoked, the sample clears the callback. To reinstate the callback, you must call <strong>SetAllocator</strong> again.</p><p>It is safe to pass in the sample's <strong>{{IMFSample}}</strong> interface reference as the state object (<em>pUnkState</em>) for the callback. If <em>pUnkState</em> points to the sample, the <strong>SetAllocator</strong> method accounts for the additional reference count on <em>pUnkState</em>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The owner was already set. This method cannot be called twice on the sample.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to perform a handshake with the protected environment. This is needed because the <strong>CreateFile</strong> and <strong>DeviceIoControl</strong> {{APIs}} are not available to Windows Store apps.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create and use an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object.</p> + + + + <p>Allows content protection systems to access the protected environment.</p> + <p>See <strong>{{MFCreateProtectedEnvironmentAccess}}</strong> for an example of how to create an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object and use the <strong>Call</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The length in bytes of the input data.</p> </dd> + + + <dd> <p>A reference to the input data.</p> </dd> + + + <dd> <p>The length in bytes of the output data.</p> </dd> + + + <dd> <p>A reference to the output data.</p> </dd> + + + + + <p>Gets the Global Revocation List ({{GLR}}).</p> + <p>Allows reading of the system Global Revocation List ({{GRL}}). </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The length of the data returned in <strong>output</strong>.</p> </dd> + + + <dd> <p>Receives the contents of the global revocation list file.</p> </dd> + + + + + <p>Provides a method that allows content protection systems to get the procedure address of a function in the signed library. This method provides the same functionality as <strong>GetProcAddress</strong> which is not available to Windows Store apps.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create and use an <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + + <p>Gets the procedure address of the specified function in the signed library.</p> + <p>See <strong>{{MFLoadSignedLibrary}}</strong> for an example of how to create an <strong>{{IMFSignedLibrary}}</strong> object and call the <strong>GetProcedureAddress</strong> method.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The entry point name in the {{DLL}} that specifies the function.</p> </dd> + + + <dd> <p>Receives the address of the entry point.</p> </dd> + + + + + <p>Provides a method that retireves system id data.</p> + + + + <p>Retrieves system id data.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The size in bytes of the returned data.</p> </dd> + + + <dd> <p>Receives the returned data. The caller must free this buffer by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Sets up the <strong>{{IMFSystemId}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Calls into the implementation of the protection system in the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the function that you want to run. This identifier is defined by the implementation of the protection system.</p> </dd> + + + <dd> <p>The number of bytes of in the buffer that <em>InputBuffer</em> specifies, including private data.</p> </dd> + + + <dd> <p>A reference to the data that you want to provide as input.</p> </dd> + + + <dd> <p>Pointer to a value that specifies the length in bytes of the data that the function wrote to the buffer that <em>OutputBuffer</em> specifies, including the private data. </p> </dd> + + + <dd> <p>Pointer to the buffer where you want the function to write its output.</p> </dd> + + + + + <p> Gets the required number of bytes that need to be prepended to the input and output buffers when you call the security processor through the <strong>InvokeFunction</strong> method. When you specify this number of bytes, the Media Foundation transform ({{MFT}}) decryptor can allocate the total amount of bytes and can avoid making copies of the data when the decrytor moves the data to the security processor. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Allows a decryptor to manage hardware keys and decrypt hardware samples.</p> + + + + <p> Allows the display driver to return {{IHV}}-specific information used when initializing a new hardware key. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The number of bytes in the buffer that <em>InputPrivateData</em> specifies.</p> </dd> + + + <dd> <p>The contents of this parameter are defined by the implementation of the protection system that runs in the security processor. The contents may contain data about license or stream properties.</p> </dd> + + + <dd> <p>The return data is also defined by the implementation of the protection system implementation that runs in the security processor. The contents may contain data associated with the underlying hardware key.</p> </dd> + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Enables a media source in the application process to create objects in the protected media path ({{PMP}}) process.</p> + <p>This interface is used when a media source resides in the application process but the Media Session resides in a {{PMP}} process. The media source can use this interface to create objects in the {{PMP}} process. For example, to play {{DRM}}-protected content, the media source typically must create an input trust authority ({{ITA}}) in the {{PMP}} process. </p><p>To use this interface, the media source implements the <strong>{{IMFPMPClient}}</strong> interface. The {{PMP}} Media Session calls <strong>{{IMFPMPClient::SetPMPHost}}</strong> on the media source, passing in a reference to the <strong>{{IMFPMPHost}}</strong> interface.</p><p>You can also get a reference to this interface by calling <strong>{{IMFGetService::GetService}}</strong> on the {{PMP}} Media Session, using the service identifier <strong>{{MF_PMP_SERVICE}}</strong>.</p> + + + + + + + + + + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + <p>Applications implement this interface in order to provide custom a custom {{HTTP}} or {{HTTPS}} download implementation. Use the <strong>{{IMFSourceResolver}}</strong> interface to register the provider. For more information, see Using the Source Resolver. Once registered, the Microsoft Media Foundation will invoke the <strong>CreateHttpDownloadSession</strong> method of the provider implementation to open {{HTTP}} or {{HTTPS}} {{URLs}} instead of using the default implementation.</p> + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p></p> + + + + <p></p> + + + + <p></p> + + + + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + + + + + + + + + + <p>Called by the media pipeline to get information about a transform provided by the sensor transform.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the transform for which information is being requested. In the current release, this value will always be 0.</p> </dd> + + + <dd> <p>Gets the identifier for the transform.</p> </dd> + + + <dd> <p>The attribute store to be populated.</p> </dd> + + + <dd> <p>A collection of <strong>{{IMFSensorStream}}</strong> objects.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the Media Session in the application's process.</p> + <p> If your application does not play protected content, you can use this function to create the Media Session in the application's process. To use the Media Session for protected content, you must call <strong>{{MFCreatePMPMediaSession}}</strong>. </p><p> You can use the <em>pConfiguration</em> parameter to specify any of the following attributes: </p><ul> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> <li> {{MF_LOW_LATENCY}} </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + <p> Creates an instance of the Media Session inside a Protected Media Path ({{PMP}}) process. </p> + <p>You can use the <em>pConfiguration</em> parameter to set any of the following attributes:</p><ul> <li> <strong>{{MF_SESSION_CONTENT_PROTECTION_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_GLOBAL_TIME}}</strong> </li> <li> <strong>{{MF_SESSION_QUALITY_MANAGER}}</strong> </li> <li> <strong>{{MF_SESSION_REMOTE_SOURCE_MODE}}</strong> </li> <li> <strong>{{MF_SESSION_SERVER_CONTEXT}}</strong> </li> <li> <strong>{{MF_SESSION_TOPOLOADER}}</strong> </li> </ul><p>If this function cannot create the {{PMP}} Media Session because a trusted binary was revoked, the <em>ppEnablerActivate</em> parameter receives an <strong>{{IMFActivate}}</strong> interface reference. The application can use this reference to create a content enabler object, which can then be used to download an updated binary:</p><ol> <li> Call <strong>{{IMFActivate::ActivateObject}}</strong> with the interface identifier {{IID_IMFContentEnabler}} to get an <strong>{{IMFContentEnabler}}</strong> interface reference. </li> <li> Use that interface to download the updated binary. </li> <li> Call <strong>{{MFCreatePMPMediaSession}}</strong> again. </li> </ol><p>If the function successfully creates the {{PMP}} Media Session, the <em>ppEnablerActivate</em> parameter receives the value <strong>{{NULL}}</strong>.</p><p>Do not make calls to the {{PMP}} Media Session from a thread that is processing a window message sent from another thread. To test whether the current thread falls into this category, call <strong>InSendMessage</strong>.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> Creates the source resolver, which is used to create a media source from a {{URL}} or byte stream. </p> + <strong>Note</strong>??Prior to Windows?7, this function was exported from mf.dll. Starting in Windows?7, this function is exported from mfplat.dll, and mf.dll exports a stub function that calls into mfplat.dll. For more information, see Library Changes in Windows?7.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the source resolver's <strong>{{IMFSourceResolver}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create property stores.]</p><p> Creates an empty property store object.</p> + <p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives a reference to the <strong>{{IPropertyStore}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Retrieves the {{URL}} schemes that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{URL}} schemes. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves the {{MIME}} types that are registered for the source resolver.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the {{MIME}} types. Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong>. If the method succeeds, the <strong>{{PROPVARIANT}}</strong> contains an array of wide-character strings. The <strong>{{PROPVARIANT}}</strong> data type is {{VT_VECTOR}} | {{VT_LPWSTR}}. The caller must release the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates a topology object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface of the topology object. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> Creates a topology node.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> The type of node to create, specified as a member of the <strong>{{MF_TOPOLOGY_TYPE}}</strong> enumeration.</p> </dd> + + + <dd> <p> Receives a reference to the node's <strong>{{IMFTopologyNode}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the media type for a stream associated with a topology node.</p> + <p>This function gets the actual media type from the object that is associated with the topology node. The <em>pNode</em> parameter should specify a node that belongs to a fully resolved topology. If the node belongs to a partial topology, the function will probably fail. </p><p>Tee nodes do not have an associated object to query. For tee nodes, the function gets the node's input type, if available. Otherwise, if no input type is available, the function gets the media type of the node's primary output stream. The primary output stream is identified by the <strong>{{MF_TOPONODE_PRIMARYOUTPUT}}</strong> attribute.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The stream index is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFTopologyNode}}</strong> interface.</p> </dd> + + + <dd> <p>The identifier of the stream to query. This parameter is interpreted as follows:</p> <ul> <li>Transform nodes: The value is the zero-based index of the input or output stream.</li> <li>All other node types: The value must be zero.</li> </ul> </dd> + + + <dd> <p><strong>If {{TRUE}}</strong>, the function gets an output type<strong>. If {{FALSE}}</strong>, the function gets an input type. This parameter is interpreted as follows:</p> <ul> <li>Output nodes: The value must be <strong>{{TRUE}}</strong>.</li> <li>Source nodes: The value must be <strong>{{FALSE}}</strong>.</li> <li>Tee nodes: The value is ignored.</li> <li>Transform nodes: If the value is <strong>{{TRUE}}</strong>, the <em>dwStreamIndex</em> parameter is the index for an output stream. Otherwise, <em>dwStreamIndex</em> is the index for an input stream.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries an object for a specified service interface.</p><p>This function is a helper function that wraps the <strong>{{IMFGetService::GetService}}</strong> method. The function queries the object for the <strong>{{IMFGetService}}</strong> interface and, if successful, calls <strong>GetService</strong> on the object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_SERVICE}}</strong></dt> </dl> </td><td> <p> The service requested cannot be found in the object represented by <em>punkObject</em>. </p> </td></tr> </table><p>?</p> + + + + <p> Returns the system time. </p> + <p> Returns the system time, in 100-nanosecond units. </p> + + + + <p>Creates the presentation clock. The presentation clock is used to schedule the time at which samples are rendered and to synchronize multiple streams. +</p> + <p>The caller must shut down the presentation clock by calling <strong>{{IMFShutdown::Shutdown}}</strong> on the clock.</p><p>Typically applications do not create the presentation clock. The Media Session automatically creates the presentation clock. To get a reference to the presentation clock from the Media Session, call <strong>{{IMFMediaSession::GetClock}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the clock's <strong>{{IMFPresentationClock}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Creates a presentation time source that is based on the system time.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IMFPresentationTimeSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a presentation descriptor.</p> + <p> If you are writing a custom media source, you can use this function to create the source presentation descriptor. The presentation descriptor is created with no streams selected. Generally, a media source should select at least one stream by default. To select a stream, call <strong>{{IMFPresentationDescriptor::SelectStream}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Number of elements in the <em>apStreamDescriptors</em> array.</p> </dd> + + + <dd> <p>Array of <strong>{{IMFStreamDescriptor}}</strong> interface references. Each reference represents a stream descriptor for one stream in the presentation.</p> </dd> + + + <dd> <p>Receives a reference to an <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Queries whether a media presentation requires the Protected Media Path ({{PMP}}).</p> + <p>If this function returns <strong>{{S_OK}}</strong>, it means the {{PMP}} is required for this presentation. Call <strong>{{MFCreatePMPMediaSession}}</strong> to create the {{PMP}} session object.</p><p>If the function returns <strong>{{S_FALSE}}</strong>, you can use the unprotected pipeline. Call <strong>{{MFCreateMediaSession}}</strong> to create the regular Media Session object.</p><p>Internally, this function checks whether any of the stream descriptors in the presentation have the <strong>{{MF_SD_PROTECTED}}</strong> attribute with the value <strong>{{TRUE}}</strong>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>This presentation requires a protected environment.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{S_FALSE}}</strong></strong></dt> </dl> </td><td> <p>This presentation does not require a protected environment.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of a presentation descriptor. The presentation descriptor is created by the media source, and describes the presentation.</p> </dd> + + + + + <p> </p><p>Serializes a presentation descriptor to a byte array.</p> + <p>To deserialize the presentation descriptor, pass the byte array to the <strong>{{MFDeserializePresentationDescriptor}}</strong> function.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor to serialize.</p> </dd> + + + <dd> <p>Receives the size of the <em>ppbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Receives a reference to an array of bytes containing the serialized presentation descriptor. The caller must free the memory for the array by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p> </p><p>Deserializes a presentation descriptor from a byte array.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Size of the <em>pbData</em> array, in bytes.</p> </dd> + + + <dd> <p>Pointer to an array of bytes that contains the serialized presentation descriptor.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPresentationDescriptor}}</strong> interface of the presentation descriptor. The caller must release the interface.</p> </dd> + + + + + <p> Creates a stream descriptor. </p> + <p> If you are writing a custom media source, you can use this function to create stream descriptors for the source. This function automatically creates the stream descriptor media type handler and initializes it with the list of types given in <em>apMediaTypes</em>. The function does not set the current media type on the handler, however. To set the type, call <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. </p><p>This function is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Stream identifier. </p> </dd> + + + <dd> <p> Number of elements in the <em>apMediaTypes</em> array. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{IMFMediaType}}</strong> interface references. These references are used to initialize the media type handler for the stream descriptor. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFStreamDescriptor}}</strong> interface of the new stream descriptor. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates a media-type handler that supports a single media type at a time.</p> + <p>The media-type handler created by this function supports one media type at a time. Set the media type by calling <strong>{{IMFMediaTypeHandler::SetCurrentMediaType}}</strong>. After the type is set, <strong>{{IMFMediaTypeHandler::IsMediaTypeSupported}}</strong> always checks against that type.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTypeHandler}}</strong> interface of the media-type handler. The caller must release the interface.</p> </dd> + + + + + <p>Shuts down a Media Foundation object and releases all resources associated with the object.</p><p>This function is a helper function that wraps the <strong>{{IMFShutdown::Shutdown}}</strong> method. The function queries the object for the <strong>{{IMFShutdown}}</strong> interface and, if successful, calls <strong>Shutdown</strong> on the object.</p> + <p>This function is not related to the <strong>{{MFShutdown}}</strong> function, which shuts down the Media Foundation platform, as described in Initializing Media Foundation. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + + + + + <p> Creates the Streaming Audio Renderer. </p> + <p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFAttributes}}</strong> interface specified in the <em>pAudioAttributes</em> parameter.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the Streaming Audio Renderer.</p> + <p>To create the audio renderer, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference.</p><strong>Note</strong>??To avoid a memory leak, call <strong>{{IMFActivate::ShutdownObject}}</strong> before releasing the final reference to the audio renderer or the audio renderer activate object.?<p>To configure the audio renderer, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID}}</strong> </td><td>The audio endpoint device identifier.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE}}</strong> </td><td>The audio endpoint role.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS}}</strong> </td><td>Miscellaneous configuration flags.</td></tr> <tr><td> <strong>{{MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID}}</strong> </td><td>The audio policy class.</td></tr> <tr><td> {{MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY}} </td><td>The audio stream category.</td></tr> <tr><td> {{MF_LOW_LATENCY}} </td><td>Enables low-latency audio streaming.</td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> </p><p>Creates an activation object for the enhanced video renderer ({{EVR}}) media sink.</p> + <p>To create the {{EVR}}, call <strong>{{IMFActivate::ActivateObject}}</strong> on the retrieved <strong>{{IMFActivate}}</strong> reference. (If you are using the Media Session, the Media Session automatically calls <strong>ActivateObject</strong> when you queue the topology.)</p><p>To configure the {{EVR}}, set any of the following attributes on the <strong>{{IMFActivate}}</strong> object before calling <strong>ActivateObject</strong>.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE}}</strong> </td><td>Activation object for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID}}</strong> </td><td>{{CLSID}} for a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS}}</strong> </td><td>Flags for creating a custom mixer.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE}}</strong> </td><td>Activation object for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID}}</strong> </td><td>{{CLSID}} for a custom presenter.</td></tr> <tr><td> <strong>{{MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS}}</strong> </td><td>Flags for creating a custom presenter.</td></tr> </table><p>?</p><p>When <strong>{{IMFActivate::ActivateObject}}</strong> is called, the activation objects sets the video window on the {{EVR}} by calling <strong>{{IMFVideoDisplayControl::SetVideoPosition}}</strong>. Passing <strong>{{NULL}}</strong> for the <em>hwndVideo</em> parameter is not an error, but no video will render unless the {{EVR}} has a valid video window.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Handle to the window where the video will be displayed.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to create the {{EVR}}. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring {{MP4}} files.</p> + <p>The {{MP4}} media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author 3GP files, use the <strong>{{MFCreate3GPMediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring 3GP files.</p> + <p>The 3GP media sink supports a maximum of one video stream and one audio stream. The initial stream formats are given in the <em>pVideoMediaType</em> and <em>pAudioMediaType</em> parameters. To create an {{MP4}} file with one stream, set the other stream type to <strong>{{NULL}}</strong>. For example, to create an audio-only file, set <em>pVideoMediaType</em> to <strong>{{NULL}}</strong>. </p><p>The number of streams is fixed when you create the media sink. The sink does not support the <strong>{{IMFMediaSink::AddStreamSink}}</strong> method.</p><p>To author {{MP4}} files, use the <strong>{{MFCreateMPEG4MediaSink}}</strong> function.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the 3GP file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the 3GP media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the {{MP3}} media sink.</p> + <p> The {{MP3}} media sink takes compressed {{MP3}} +audio samples as input, and writes an {{MP3}} file with {{ID3}} headers as output. The {{MP3}} media sink does not perform {{MP3}} audio encoding. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP3}} file to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the {{MP3}} media sink.. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the {{AC}}-3 media sink.</p> + <p>The {{AC}}-3 media sink takes compressed {{AC}}-3 audio as input and writes the audio to the byte stream without modification. The primary use for this media sink is to stream {{AC}}-3 audio over a network. The media sink does not perform {{AC}}-3 audio encoding.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{AC}}-3 file to this byte stream. The byte stream must be writable. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{AC}}-3 audio stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_Dolby_AC3}}</strong> or <strong>{{MFAudioFormat_Dolby_DDPlus}}</strong></td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the audio data transport stream ({{ADTS}}) media sink.</p> + <p>The {{ADTS}} media sink converts Advanced Audio Coding ({{AAC}}) audio packets into an {{ADTS}} stream. The primary use for this media sink is to stream {{ADTS}} over a network. The output is not an audio file, but a stream of audio frames with {{ADTS}} headers.</p><p>The media sink can accept raw {{AAC}} frames ({{MF_MT_AAC_PAYLOAD_TYPE}} = 0) or {{ADTS}} packets ({{MF_MT_AAC_PAYLOAD_TYPE}} = 1). If the input is raw {{AAC}}, the media sink inserts an {{ADTS}} header at the start of each audio frame. If the input is {{ADTS}} packets, the media sink passes the packets through to the byte stream, without modification.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{ADTS}} stream to this byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface. This parameter specifies the media type for the {{ADTS}} stream. The media type must contain the following attributes.</p> <table> <tr><th>Attribute</th><th>Value</th></tr> <tr><td> {{MF_MT_MAJOR_TYPE}} </td><td><strong>{{MFMediaType_Audio}}</strong></td></tr> <tr><td> {{MF_MT_SUBTYPE}} </td><td><strong>{{MFAudioFormat_AAC}}</strong></td></tr> <tr><td> {{MF_MT_AAC_PAYLOAD_TYPE}} </td><td>0 (raw {{AAC}}) or 1 ({{ADTS}})</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a generic media sink that wraps a multiplexer Microsoft Media Foundation transform ({{MFT}}).</p> + <p>This function attempts to find a multiplexer {{MFT}} that supports an output type with the following definition:</p><ul> <li>Major type: <strong>{{MFMediaType_Stream}}</strong></li> <li>Subtype: <em>guidOutputSubType</em></li> <li>Additional format attributes (optional)</li> </ul><p>To provide a list of additional format attributes:</p><ol> <li>Call <strong>{{MFCreateAttributes}}</strong> to get an <strong>{{IMFAttributes}}</strong> reference.</li> <li>Use the <strong>{{IMFAttributes}}</strong> interface to set the attributes. (See Media Type Attributes.)</li> <li>Pass the <strong>{{IMFAttributes}}</strong> reference in the <em>pOutputAttributes</em> parameter.</li> </ol><p>The multiplexer {{MFT}} must be registered in the <strong>{{MFT_CATEGORY_MULTIPLEXER}}</strong> category.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The subtype {{GUID}} of the output type for the {{MFT}}.</p> </dd> + + + <dd> <p>A list of format attributes for the {{MFT}} output type. This parameter is optional and can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The output from the {{MFT}} is written to this byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media sink for authoring fragmented {{MP4}} files.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The media sink writes the {{MP4}} file to this byte stream. The byte stream must be writable and support seeking.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a video media type. This type specifies the format of the video stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pAudioMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of an audio media type. This type specifies the format of the audio stream.</p> <p>This parameter can be <strong>{{NULL}}</strong>, but not if <em>pVideoMediaType</em> is <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the {{MP4}} media sink's <strong>{{IMFMediaSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an Audio-Video Interleaved ({{AVI}}) Sink.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the byte stream that will be used to write the {{AVI}} file.</p> </dd> + + + <dd> <p>Pointer to the media type of the video input stream</p> </dd> + + + <dd> <p>Pointer to the media type of the audio input stream</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> Interface. The caller must release this interface.</p> </dd> + + + + + <p> Creates an {{WAVE}} archive sink. The {{WAVE}} archive sink takes +audio and writes it to an .wav file. +</p> + + + <dd> <p> Pointer to the byte stream that will be used to write the .wav file.</p> </dd> + + + <dd> <p>Pointer to the audio media type.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSink}}</strong> interface. The caller must release this interface.</p> </dd> + + + + + <p> </p><p>Creates a new instance of the topology loader.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopoLoader}}</strong> interface of the topology loader. The caller must release the interface.</p> </dd> + + + + + + + + + + + + + + + + + <p> </p><p>Creates an activation object for the sample grabber media sink.</p> + <p>To create the sample grabber sink, call <strong>{{IMFActivate::ActivateObject}}</strong> on the reference received in the <em>ppIActivate</em> parameter.</p><p>Before calling <strong>ActivateObject</strong>, you can configure the sample grabber by setting any of the following attributes on the <em>ppIActivate</em> reference:</p><ul> <li> {{MF_SAMPLEGRABBERSINK_IGNORE_CLOCK}} </li> <li> <strong>{{MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET}}</strong> </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, defining the media type for the sample grabber's input stream. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSampleGrabberSinkCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFActivate}}</strong> interface. Use this interface to complete the creation of the sample grabber. The caller must release the interface. </p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Creates the default implementation of the quality manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the quality manager's <strong>{{IMFQualityManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the sequencer source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Reserved. Must be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSequencerSource}}</strong> interface of the sequencer source. The caller must release the interface.</p> </dd> + + + + + <p> Creates a <strong>{{PROPVARIANT}}</strong> that can be used to seek within a sequencer source presentation. </p> + <p> The <strong>{{PROPVARIANT}}</strong> returned in <em>pvarSegmentOffset</em> can be used for the <em>pvarStartPosition</em> parameter in the <strong>{{IMFMediaSession::Start}}</strong> method. Use the time format <strong>{{GUID}} {{MF_TIME_FORMAT_SEGMENT_OFFSET}}</strong>. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Sequencer element identifier. This value specifies the segment in which to begin playback. The element identifier is returned in the <strong>{{IMFSequencerSource::AppendTopology}}</strong> method. </p> </dd> + + + <dd> <p> Starting position within the segment, in 100-nanosecond units. </p> </dd> + + + <dd> <p> Pointer to a <strong>{{PROPVARIANT}}</strong>. The method fills in the <strong>{{PROPVARIANT}}</strong> with the information needed for performing a seek operation. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Creates a media source that aggregates a collection of media sources. </p> + <p>The aggregated media source is useful for combining streams from separate media sources. For example, you can use it to combine a video capture source and an audio capture source. </p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> The <em>pSourceCollection</em> collection does not contain any elements.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCollection}}</strong> interface of the collection object that contains a list of media sources. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaSource}}</strong> interface of the aggregated media source. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a credential cache object. An application can use this object to implement a custom credential manager.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetCredentialCache}}</strong> interface of the new credential cache object. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates a default proxy locator.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>The name of the protocol.</p> <strong>Note</strong>??In this release of Media Foundation, the default proxy locator does not support {{RTSP}}. ? </dd> + + + <dd> <p>Pointer to the <strong>{{IPropertyStore}}</strong> interface of a property store that contains the proxy configuration in the <strong>{{MFNETSOURCE_PROXYSETTINGS}}</strong> property.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFNetProxyLocator}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the scheme handler for the network source.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface. The scheme handler exposes the <strong>{{IMFSchemeHandler}}</strong> interface.</p> </dd> + + + + + + + + + + + <p> </p><p>Creates the protected media path ({{PMP}}) server object.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MFPMPSESSION_CREATION_FLAGS}}</strong> enumeration that specifies how to create the {{PMP}} session.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFPMPServer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Creates the remote desktop plug-in object. Use this object if the application is running in a Terminal Services client session.</p> + <p> The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The function succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_ACCESSDENIED}}</strong></dt> </dl> </td><td> <p>Remote desktop connections are not allowed by the current session policy.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFRemoteDesktopPlugin}}</strong> interface of the plug-in object. The caller must release the interface.</p> </dd> + + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should use the <strong>{{PSCreateMemoryPropertyStore}}</strong> function to create named property stores.]</p><p>Creates an empty property store to hold name/value pairs.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{INamedPropertyStore}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sample copier transform.</p> + <p>The sample copier is a Media Foundation transform ({{MFT}}) that copies data from input samples to output samples without modifying the data. The following data is copied from the sample:</p><ul> <li>All Sample Attributes.</li> <li>The time stamp and duration.</li> <li>Sample flags (see <strong>{{IMFSample::SetSampleFlags}}</strong>).</li> <li>The data in the media buffers. If the input sample contains multiple buffers, the data is copied into a single buffer on the output sample.</li> </ul><p>This {{MFT}} is useful in the following situation:</p><ul> <li>One pipeline object, such as a media source, allocates media samples for output.</li> <li>Another pipeline object, such as a media sink, allocates its own media samples for input. For example, the object might require buffers allocated from a special memory pool, such as video memory.</li> </ul><p>The following diagram shows this situation with a media source and a media sink.</p><p></p><p>In order for the media sink to receive data from the media source, the data must be copied into the media samples owned by the media sink. The sample copier can be used for this purpose.</p><p>A specific example of such a media sink is the Enhanced Video Renderer ({{EVR}}). The {{EVR}} allocates samples that contain Direct3D surface buffers, so it cannot receive video samples directly from a media source. Starting in Windows?7, the topology loader automatically handles this case by inserting the sample copier between the media source and the {{EVR}}.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an empty transcode profile object.</p><p>The transcode profile stores configuration settings for the output file. These configuration settings are specified by the caller, and include audio and video stream properties, encoder settings, and container settings. To set these properties, the caller must call the appropriate <strong>{{IMFTranscodeProfile}}</strong> methods.</p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function. The underlying topology builder uses these settings to build the transcode topology.</p> + <p>The <strong>{{MFCreateTranscodeProfile}}</strong> function creates an empty transcode profile. You must configure the transcode profile setting attributes that define the media types and the container properties. Use the following methods to configure the profile:</p><ul> <li> <strong>{{IMFTranscodeProfile::SetAudioAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetVideoAttributes}}</strong> </li> <li> <strong>{{IMFTranscodeProfile::SetContainerAttributes}}</strong> </li> </ul><p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a partial transcode topology.</p><p>The underlying topology builder creates a partial topology by connecting the required pipeline objects: +source, encoder, and sink. The encoder and the sink are configured according to the settings specified by the caller in the transcode profile. </p><p>To create the transcode profile object, call the <strong>{{MFCreateTranscodeProfile}}</strong> function and set the required attributes by calling the appropriate the <strong>{{IMFTranscodeProfile}}</strong> methods. </p><p>The configured transcode profile is passed to the <strong>{{MFCreateTranscodeTopology}}</strong> function, which creates the transcode topology with the appropriate settings. The caller can then set this topology on the Media Session and start the session to begin the encoding process. When the Media Session ends, the transcoded file is generated.</p> + <p>For example code that uses this function, see the following topics:</p><ul> <li> Tutorial: Encoding an {{MP4}} File </li> <li> Tutorial: Encoding a {{WMA}} File </li> </ul> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded, and <em>ppTranscodeTopo</em> receives a reference to the transcode topology.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><em>pwszOutputFilePath</em> contains invalid characters.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED}}</strong></dt> </dl> </td><td> <p>No streams are selected in the media source.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_CONTAINERTYPE}}</strong></dt> </dl> </td><td> <p>The profile does not contain the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>For one or more streams, cannot find an encoder that accepts the media type given in the profile.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS}}</strong></dt> </dl> </td><td> <p>The profile does not specify a media type for any of the selected streams on the media source.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a topology for transcoding to a byte stream.</p> + <p>This function creates a partial topology that contains the media source, the encoder, and the media sink. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source. The media source provides that source content for transcoding.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The transcoded output will be written to this byte stream.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFTranscodeProfile}}</strong> interface of a transcoding profile. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTopology}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a list of output formats from an audio encoder.</p> + <p>This function assumes the encoder will be used in its default encoding mode, which is typically constant bit-rate ({{CBR}}) encoding. Therefore, the types returned by the function might not work with other modes, such as variable bit-rate ({{VBR}}) encoding.</p><p>Internally, this function works by calling <strong>{{MFTEnumEx}}</strong> to find a matching encoder, and then calling <strong>{{IMFTransform::GetOutputAvailableType}}</strong> to get the encoder's output types.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The function call succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSCODE_NO_MATCHING_ENCODER}}</strong></dt> </dl> </td><td> <p>Failed to find an encoder that matches the specified configuration settings.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the subtype of the output media. The encoder uses this value as a filter when it is enumerating the available output types. For information about the audio subtypes, see <strong>Audio Subtype {{GUIDs}}</strong>. </p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_ENUM_FLAG</strong> enumeration. </p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. The attribute store specifies the encoder configuration settings. This parameter can be <strong>{{NULL}}</strong>. The attribute store can hold any of the following attributes.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFT_FIELDOFUSE_UNLOCK_Attribute}}</strong></dt> </dl> </td><td> <p>Set this attribute to unlock an encoder that has field-of-use descriptions.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_ENCODINGPROFILE}}</strong></dt> </dl> </td><td> <p>Specifies a device conformance profile for a Windows Media encoder.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_TRANSCODE_QUALITYVSSPEED}}</strong></dt> </dl> </td><td> <p>Sets the tradeoff between encoding quality and encoding speed.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCollection}}</strong> interface of a collection object that contains a list of preferred audio media types. The collection contains <strong>{{IMFMediaType}}</strong> references. The caller must release the interface reference.</p> </dd> + + + + + <p>Creates the transcode sink activation object.</p><p>The transcode sink activation object can be used to create any of the following file sinks:</p><ul> <li>3GP file sink</li> <li>{{MP3}} file sink</li> <li>{{MP4}} file sink</li> </ul><p>The transcode sink activation object exposes the <strong>{{IMFTranscodeSinkInfoProvider}}</strong> interface.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IMFTrackedSample}}</strong> object that tracks the reference counts on a video media sample.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IStream}}</strong> reference.</p> + <p>This function enables applications to pass an <strong>{{IStream}}</strong> object to a Media Foundation {{API}} that takes an <strong>{{IMFByteStream}}</strong> reference.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value.</p> + + + <dd> <p>A reference to the <strong>{{IStream}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFByteStream}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Returns an <strong>{{IStream}}</strong> reference that wraps a Microsoft Media Foundation byte stream.</p> + <p>This function enables an application to pass a Media Foundation byte stream to an {{API}} that takes an <strong>{{IStream}}</strong> reference.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a Microsoft Media Foundation byte stream that wraps an <strong>{{IRandomAccessStream}}</strong> object.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates an <strong>{{IRandomAccessStream}}</strong> object that wraps a Microsoft Media Foundation byte stream.</p> + <p>The returned byte stream object exposes the <strong>{{IMFGetService}}</strong> interface. To get the original <strong>{{IMFByteStream}}</strong> reference, call <strong>{{IMFGetService::GetService}}</strong> using the service identifier <strong>{{MF_WRAPPED_OBJECT}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Create an <strong>{{IMFMediaType}}</strong> from properties.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates properties from a <strong>{{IMFMediaType}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enumerates a list of audio or video capture devices.</p> + <p>Each returned <strong>{{IMFActivate}}</strong> reference represents a capture device, and can be used to create a media source for that device. You can also use the <strong>{{IMFActivate}}</strong> reference to query for attributes that describe the device. The following attributes might be set:</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME}} </td><td>The display name of the device.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE}} </td><td>The major type and subtype {{GUIDs}} that describe the device's output format.</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} </td><td>The type of capture device (audio or video).</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </td><td>The audio endpoint {{ID}} string. (Audio devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}} </td><td>The device category. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE}} </td><td> Whether a device is a hardware or software device. (Video devices only.)</td></tr> <tr><td> {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </td><td>The symbolic link for the device driver. (Video devices only.)</td></tr> </table><p>?</p><p>To create a media source from an <strong>{{IMFActivate}}</strong> reference, call the <strong>{{IMFActivate::ActivateObject}}</strong> method.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to an attribute store that contains search criteria. To create the attribute store, call <strong>{{MFCreateAttributes}}</strong>. Set one or more of the following attributes on the attribute store:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}}</strong></dt> </dl> </td><td> <p>Specifies whether to enumerate audio or video devices. (Required.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}}</strong></dt> </dl> </td><td> <p>For audio capture devices, specifies the device role. (Optional.)</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY}}</strong></dt> </dl> </td><td> <p>For video capture devices, specifies the device category. (Optional.)</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives an array of <strong>{{IMFActivate}}</strong> interface references. Each reference represents an activation object for a media source. The function allocates the memory for the array. The caller must release the references in the array and call <strong>CoTaskMemFree</strong> to free the memory for the array.</p> </dd> + + + <dd> <p>Receives the number of elements in the <em>pppSourceActivate</em> array. If no capture devices match the search criteria, this parameter receives the value 0.</p> </dd> + + + + + <p>Creates a media source for a hardware capture device.</p> + <strong>Important</strong>??When the capture device is no longer needed, you must shut down the device by calling <strong>Shutdown</strong> on the <strong>{{IMFMediaSource}}</strong> object you obtained by calling <strong>{{MFCreateDeviceSource}}</strong>. Failure to call <strong>Shutdown</strong> can result in memory links because the system may keep a reference to <strong>{{IMFMediaSource}}</strong> resources until <strong>Shutdown</strong> is called.?<p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the media source's <strong>{{IMFMediaSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an activation object that represents a hardware capture device.</p> + <p>This function creates an activation object that can be used to create a media source for a hardware device. To create the media source itself, call <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>The <em>pAttributes</em> parameter specifies an attribute store. To create the attribute store, call the <strong>{{MFCreateAttributes}}</strong> function. You must set the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE}} attribute, which specifies the type of device (audio or video).</p><p>For audio capture devices, optionally set one of the following attributes:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} </p> </td><td> <p>Specifies the audio endpoint {{ID}} of the audio capture device.</p> </td></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE}} </p> </td><td> <p>Specifies the device role. If this attribute is set, the function uses the default audio capture device for that device role.</p> <p>Do not combine this attribute with the {{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID}} attribute.</p> </td></tr> </table><p>?</p><p>If neither attribute is specified, the function selects the default audio capture device for the <strong>eCommunications</strong> role.</p><p>For video capture devices, you must set the following attribute:</p><p></p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> <p>{{MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK}} </p> </td><td> <p>Specifies the symbolic link to the device.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of an attribute store, which is used to select the device. See Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an <strong>{{IMFProtectedEnvironmentAccess}}</strong> object that allows content protection systems to perform a handshake with the protected environment.</p> + + + + <p>Loads a dynamic link library that is signed for the protected environment.</p> + <p>A singlemodule load count is maintained on the dynamic link library (as it is with <strong>LoadLibrary</strong>). This load count is freed when the final release is called on the <strong>{{IMFSignedLibrary}}</strong> object.</p> + + + <dd> <p>The name of the dynamic link library to load. This dynamic link library must be signed for the protected environment.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSignedLibrary}}</strong> interface for the library.</p> </dd> + + + + + <p>Returns an <strong>{{IMFSystemId}}</strong> object for retrieving system id data.</p> + + + + <p>Gets the local system {{ID}}.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p> + + + <dd> <p>Application-specific verifier value.</p> </dd> + + + <dd> <p>Length in bytes of verifier.</p> </dd> + + + <dd> <p>Returned {{ID}} string. This value must be freed by the caller by calling <strong>CoTaskMemFree</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentProtectionDevice}}</strong> interface for the specified media protection system.</p> + + + + <p>Checks whether a hardware security processor is supported for the specified media protection system.</p> + + + <dd> <p>The identifier of the protection system that you want to check.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the hardware security processor is supported for the specified protection system; otherwise <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p>Creates an <strong>{{IMFContentDecryptorContext}}</strong> interface for the specified media protection system. </p> + + + + <p>Locks the shared Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager.</p> + <p>This function obtains a reference to a {{DXGI}} Device Manager instance that can be shared between components. The Microsoft Media Foundation platform creates this instance of the {{DXGI}} Device Manager as a singleton object. Alternatively, you can create a new {{DXGI}} Device Manager by calling <strong>{{MFCreateDXGIDeviceManager}}</strong>.</p><p>The first time this function is called, the Media Foundation platform creates the shared {{DXGI}} Device Manager. </p><p>When you are done use the <strong>{{IMFDXGIDeviceManager}}</strong> reference, call the <strong>{{MFUnlockDXGIDeviceManager}}</strong>.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a token that identifies this instance of the {{DXGI}} Device Manager. Use this token when calling <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFDXGIDeviceManager}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Creates an instance of the <strong>{{IMFSensorStream}}</strong> interface.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{IMFSensorGroup}}</strong> is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The supplied <strong>{{LPCWSTR}}</strong> is null.</p> </td></tr> </table><p>?</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Used to determinine whether the adapter supports creating heaps from existing system memory. Such heaps are not intended for general use, but are exceptionally useful for diagnostic purposes because they are guaranteed to persist even after the adapter faults or experiences a device-removal event. Persistence is not guaranteed for heaps returned by CreateHeap or CreateCommittedResource, even when the heap resides in system memory.</p> + <p>For a variety of performance and compatibility reasons, applications should not make use of this feature except for diagnostic purposes. In particular, heaps created using this feature only support system-memory heaps with cross-adapter properties, which precludes many optimization opportunities that typical application scenarios could otherwise take advantage of.</p> + + + <dd> <p>True if the adapter can create a heap from existing system memory. Otherwise, false.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains flags that indicate the status of the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + <p>Contains flags for the <strong>{{IMFSourceReader::ReadSample}}</strong> method.</p> + + + + + + + + + + + + + <p>Contains statistics about the performance of the sink writer.</p> + + + <dd> <p>The size of the structure, in bytes.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the sink writer. The sink writer updates this value each time the application calls <strong>{{IMFSinkWriter::WriteSample}}</strong>.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample to be encoded. The sink writer updates this value whenever it calls <strong>{{IMFTransform::ProcessOutput}}</strong> on the encoder.</p> </dd> + + + <dd> <p>The time stamp of the most recent sample given to the media sink. The sink writer updates this value whenever it calls <strong>{{IMFStreamSink::ProcessSample}}</strong> on the media sink.</p> </dd> + + + <dd> <p>The time stamp of the most recent stream tick. The sink writer updates this value whenever the application calls <strong>{{IMFSinkWriter::SendStreamTick}}</strong>.</p> </dd> + + + <dd> <p>The system time of the most recent sample request from the media sink. The sink writer updates this value whenever it receives an {{MEStreamSinkRequestSample}} event from the media sink. The value is the current system time.</p> </dd> + + + <dd> <p>The number of samples received.</p> </dd> + + + <dd> <p>The number of samples encoded.</p> </dd> + + + <dd> <p>The number of samples given to the media sink.</p> </dd> + + + <dd> <p>The number of stream ticks received.</p> </dd> + + + <dd> <p>The amount of data, in bytes, currently waiting to be processed. </p> </dd> + + + <dd> <p>The total amount of data, in bytes, that has been sent to the media sink.</p> </dd> + + + <dd> <p>The number of pending sample requests.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder.</p> </dd> + + + <dd> <p>The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink.</p> </dd> + + + + + <p>Creates an instance of either the sink writer or the source reader.</p> + <p>To get a reference to this interface, call the <strong>CoCreateInstance</strong> function. The {{CLSID}} is <strong>{{CLSID_MFReadWriteClassFactory}}</strong>. Call the <strong>{{MFStartup}}</strong> function before using the interface.</p><p>As an alternative to using this interface, you can call any of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Internally, these functions use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Creates an instance of the sink writer or source reader, given a {{URL}}.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A null-terminated string that contains a {{URL}}. If <em>clsid</em> is {{CLSID_}}<strong>{{MFSinkWriter}}</strong>, the {{URL}} specifies the name of the output file. The sink writer creates a new file with this name. If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, the {{URL}} specifies the input file for the source reader.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the sink writer or source reader, given an <strong>{{IUnknown}}</strong> reference. </p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSinkWriter}}</strong></strong></dt> </dl> </td><td> <p>Create the sink writer. The <em>ppvObject</em> parameter receives an <strong>{{IMFSinkWriter}}</strong> interface reference.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{CLSID_MFSourceReader}}</strong></strong></dt> </dl> </td><td> <p>Create the source reader. The <em>ppvObject</em> parameter receives an <strong>{{IMFSourceReader}}</strong> interface reference.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object that is used to initialize the source reader or sink writer. The method queries this reference for one of the following interfaces.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{IMFByteStream}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a byte stream. </p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>, the sink writer writes data to this byte stream.</p> <p>If <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>, this byte stream provides the source data for the source reader.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSink}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media sink. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSinkWriter}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong><strong>{{IMFMediaSource}}</strong></strong></dt> </dl> </td><td> <p>Pointer to a media source. Applies only when <em>clsid</em> is <strong>{{CLSID_MFSourceReader}}</strong>.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer or source reader. For more information, see the following topics:</p> <ul> <li> Sink Writer Attributes </li> <li> Source Reader Attributes </li> </ul> <p>This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Implemented by the Microsoft Media Foundation source reader object.</p> + <p>To create the source reader, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSourceReaderFromByteStream}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromMediaSource}}</strong> </li> <li> <strong>{{MFCreateSourceReaderFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSourceReaderEx}}</strong>.</p> + + + + <p>Queries whether a stream is selected.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives <strong>{{TRUE}}</strong> if the stream is selected and will generate data. Receives <strong>{{FALSE}}</strong> if the stream is not selected and will not generate data.</p> </dd> + + + + + <p>Selects or deselects one or more streams.</p> + <p>There are two common uses for this method:</p><ul> <li>To change the default stream selection. Some media files contain multiple streams of the same type. For example, a file might include audio streams for multiple languages. You can use this method to change which of the streams is selected. To get information about each stream, call <strong>{{IMFSourceReader::GetPresentationAttribute}}</strong> or <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If you will not need data from one of the streams, it is a good idea to deselect that stream. If the stream is selected, the media source might hold onto a queue of unread data, and the queue might grow indefinitely, consuming memory. </li> </ul><p>For an example of deselecting a stream, see Tutorial: Decoding Audio.</p><p>If a stream is deselected, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_INVALIDREQUEST}}</strong> for that stream. Other <strong>{{IMFSourceReader}}</strong> methods are valid for deselected streams.</p><p>Stream selection does not affect how the source reader loads or unloads decoders in memory. In particular, deselecting a stream does not force the source reader to unload the decoder for that stream.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to select streams or <strong>{{FALSE}}</strong> to deselect streams. If a stream is deselected, it will not generate data.</p> </dd> + + + + + <p>Gets a format that is supported natively by the media source.</p> + <p>This method queries the underlying media source for its native output format. Potentially, each source stream can produce more than one output format. Use the <em>dwMediaTypeIndex</em> parameter to loop through the available formats. Generally, file sources offer just one format per stream, but capture devices might offer several formats.</p><p> The method returns a copy of the media type, so it is safe to modify the object received in the <em> ppMediaType</em> parameter.</p><p>To set the output type for a stream, call the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NO_MORE_TYPES}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the current media type for a stream.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Sets the media type for a stream.</p><p>This media type defines that format that the Source Reader produces as output. It can differ from the native format provided by the media source. See Remarks for more information.</p> + <p>For each stream, you can set the media type to any of the following:</p><ul> <li>One of the native types offered by the media source. To enumerate the native types, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</li> <li>If the native media type is compressed, you can specify a corresponding uncompressed format. The Source Reader will search for a decoder that can decode from the native format to the specified uncompressed format.</li> </ul><p>Audio resampling support was added to the source reader with Windows?8. In versions of Windows prior to Windows?8, the source reader does not support audio resampling. If you need to resample the audio in versions of Windows earlier than Windows?8, you can use the <strong>Audio Resampler {{DSP}}</strong>.</p><p>If you set the {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attribute to <strong>{{TRUE}}</strong> when you create the Source Reader, the Source Reader will convert {{YUV}} video to {{RGB}}-32. This conversion is not optimized for real-time video playback.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>At least one decoder was found for the native stream type, but the type specified by <em>pMediaType</em> was rejected.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find a decoder for the native stream type.</p> </td></tr> </table><p>?</p> + + + + <p>Seeks to a new position in the media source.</p> + <p>The <strong>SetCurrentPosition</strong> method does not guarantee exact seeking. The accuracy of the seek depends on the media content. If the media content contains a video stream, the <strong>SetCurrentPosition</strong> method typically seeks to the nearest key frame before the desired position. The distance between key frames depends on several factors, including the encoder implementation, the video content, and the particular encoding settings used to encode the content. The distance between key frame can vary within a single video file (for example, depending on scene complexity).</p><p>After seeking, the application should call <strong>{{IMFSourceReader::ReadSample}}</strong> and advance to the desired position. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>One or more sample requests are still pending.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that specifies the <em>time format</em>. The time format defines the units for the <em>varPosition</em> parameter. The following value is defined for all media sources:</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{GUID_NULL}}</strong></dt> </dl> </td><td> <p>100-nanosecond units.</p> </td></tr> </table> <p>?</p> <p>Some media sources might support additional values. </p> </dd> + + + <dd> <p>The position from which playback will be started. The units are specified by the <em>guidTimeFormat</em> parameter. If the <em>guidTimeFormat</em> parameter is <strong>{{GUID_NULL}}</strong>, set the variant type to <strong>{{VT_I8}}</strong>.</p> </dd> + + + + + <p>Reads the next sample from the media source.</p> + <p>If the requested stream is not selected, the return code is <strong>{{MF_E_INVALIDREQUEST}}</strong>. See <strong>{{IMFSourceReader::SetStreamSelection}}</strong>.</p><p> This method can complete synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_NOTACCEPTING}}</strong></strong></dt> </dl> </td><td> <p>A flush operation is pending. See <strong>{{IMFSourceReader::Flush}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument. See Remarks.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to pull data from. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ANY_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>Get the next available sample, regardless of which stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_CONTROL_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_SOURCE_READER_FLAG}}</strong> enumeration.</p> </dd> + + + <dd> <p>Receives the time stamp of the sample, or the time of the stream event indicated in <em>pdwStreamFlags</em>. The time is given in 100-nanosecond units.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSample}}</strong> interface or the value <strong>{{NULL}}</strong> (see Remarks). If this parameter receives a non-<strong>{{NULL}}</strong> reference, the caller must release the interface.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>The <strong>Flush</strong> method discards all queued samples and cancels all pending sample requests.</p><p>This method can complete either synchronously or asynchronously. If you provide a callback reference when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous. For more information about the setting the callback reference, see {{MF_SOURCE_READER_ASYNC_CALLBACK}}.</p><p>In synchronous mode, the method blocks until the operation is complete.</p><p>In asynchronous mode, the application's <strong>{{IMFSourceReaderCallback::OnFlush}}</strong> method is called when the flush operation completes. While a flush operation is pending, the <strong>{{IMFSourceReader::ReadSample}}</strong> method returns <strong>{{MF_E_NOTACCEPTING}}</strong>.</p><strong>Note</strong>??In Windows?7, there was a bug in the implementation of this method, which causes <strong>OnFlush</strong> to be called before the flush operation completes. A hotfix is available that fixes this bug. For more information, see http://support.microsoft.com/kb/979567.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream to flush. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_ALL_STREAMS}}</strong></strong></dt> <dt>0xFFFFFFFE</dt> </dl> </td><td> <p>All streams.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Queries the underlying media source or decoder for an interface.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. If the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, the method queries the media source. Otherwise, it queries the decoder that is associated with the specified stream. The following values are possible.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A service identifier {{GUID}}. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls the <strong>{{IMFGetService::GetService}}</strong> method. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets an attribute from the underlying media source.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The stream or object to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong></strong></dt> <dt>0xFFFFFFFF</dt> </dl> </td><td> <p>The media source. +</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A {{GUID}} that identifies the attribute to retrieve. If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>, <em>guidAttribute</em> can specify one of the following:</p> <ul> <li>A presentation descriptor attribute. For a list of values, see Presentation Descriptor Attributes.</li> <li> {{MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS}}. Use this value to get characteristics flags from the media source.</li> </ul> <p>Otherwise, if the <em>dwStreamIndex</em> parameter specifies a stream, <em>guidAttribute</em> specifies a stream descriptor attribute. For a list of values, see Stream Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value of the attribute. Call the <strong>PropVariantClear</strong> function to free the <strong>{{PROPVARIANT}}</strong>. </p> </dd> + + + + + <p>Extends the <strong>{{IMFSourceReader}}</strong> interface.</p><p>The Source Reader implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Source Reader.</p> + + + + <p>Sets the native media type for a stream on the media source.</p> + <p>This method sets the output type that is produced by the media source. Unlike the <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> method, this method does not insert any decoders, video processors, or other transforms. The media source must support the specified media type natively. To get a list of supported types from the media source, call <strong>{{IMFSourceReader::GetNativeMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>This method can trigger a change in the output format for the stream. If so, the <strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong> flag is returned in the <em>pdwStreamFlags</em> parameter. The method might also cause the Source Reader to remove any effects that were added by the <strong>{{IMFSourceReaderEx::AddTransformForStream}}</strong> method. If this occurs, the <strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong> flag is returned in <em>pdwStreamFlags</em>. </p><p>This method is useful with audio and video capture devices, because a device might support several output formats. This method enables the application to choose the device format before decoders and other transforms are added.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd></dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of the media type.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more of the following flags.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_ALLEFFECTSREMOVED}}</strong></dt> </dl> </td><td> <p>All effects were removed from the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED}}</strong></dt> </dl> </td><td> <p>The current output type changed.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Adds a transform, such as an audio or video effect, to a stream.</p> + <p>This method attempts to add the transform at the end of the current processing chain. </p><p>To use this method, make the following sequence of calls:</p><ol> <li>Call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> to set the output type that you want for the stream. In this step, you can specify a media type that contains only the major type and subtype {{GUIDs}}. For example, to get 32-bit {{RGB}} output, set a major type of <strong>{{MFMediaType_Video}}</strong> and a subtype of <strong>{{MFVideoFormat_RGB32}}</strong>. (For more information, see Media Type {{GUIDs}}.)</li> <li>Call <strong>AddTransformForStream</strong>. If the Source Reader successfully connects the transform, it sets the output type on the transform.</li> <li>Call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong> to get the output type from the transform. This method returns a media type with a complete format description.</li> <li>Optionally, if you want to modify the output type, call <strong>{{IMFSourceReader::SetCurrentMediaType}}</strong> again to set a complete media type on the transform.</li> </ol><p>The <strong>AddTransformForStream</strong> method will not insert a decoder into the processing chain. If the native stream format is encoded, and the transform requires an uncompressed format, call <strong>SetCurrentMediaType</strong> to set the uncompressed format (step 1 in the previous list). However, the method will insert a video processor to convert between {{RGB}} and {{YUV}} formats, if required.</p><p>The method fails if the source reader was configured with the {{MF_READWRITE_DISABLE_CONVERTERS}} or {{MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING}} attributes. </p><p>In asynchronous mode, the method also fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p><p>You can add a transform at any time during streaming. However, the method does not flush or drain the pipeline before inserting the transform. Therefore, if data is already in the pipeline, the next sample is not guaranteed to have the transform applied.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The transform does not support the current stream format, and no conversion was possible. See Remarks for more information.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to configure. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following:</p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes all of the Media Foundation transforms ({{MFTs}}) for a specified stream, with the exception of the decoder.</p> + <p>Calling this method can reset the current output type for the stream. To get the new output type, call <strong>{{IMFSourceReader::GetCurrentMediaType}}</strong>.</p><p>In asynchronous mode, this method fails if a sample request is pending. In that case, wait for the <strong>OnReadSample</strong> callback to be invoked before calling the method. For more information about using the Source Reader in asynchronous mode, see <strong>{{IMFSourceReader::ReadSample}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream for which to remove the {{MFTs}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>You can use this method to configure an {{MFT}} after it is inserted into the processing chain. Do not use the reference returned in <em>ppTransform</em> to set media types on the {{MFT}} or to process data. In particular, calling any of the following <strong>{{IMFTransform}}</strong> methods could have unexpected results.</p><ul> <li> <strong>AddInputStreams</strong> </li> <li> <strong>DeleteInputStream</strong> </li> <li> <strong>ProcessEvent</strong> </li> <li> <strong>ProcessInput</strong> </li> <li> <strong>ProcessMessage</strong> </li> <li> <strong>ProcessOutput</strong> </li> <li> <strong>SetInputType</strong> </li> <li> <strong>SetOutputType</strong> </li> </ul><p>If a decoder is present, it appears at index position zero.</p><p>To avoid losing any data, you should drain the source reader before calling this method. For more information, see Draining the Data Pipeline.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>dwTransformIndex</em> parameter is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query for the {{MFT}}. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_SOURCE_READER_FIRST_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation source reader.</p> + <p>Use the {{MF_SOURCE_READER_ASYNC_CALLBACK}} attribute to set the callback reference when you first create the source reader object.</p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>If you do not specify a callback reference, the source reader operates synchronously.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::ReadSample}}</strong> method completes.</p> + <p>The <em>pSample</em> parameter might be <strong>{{NULL}}</strong>. For example, when the source reader reaches the end of a stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_ENDOFSTREAM}}</strong> flag, and <em>pSample</em> is <strong>{{NULL}}</strong>. </p><p>If there is a gap in the stream, <em>dwStreamFlags</em> contains the <strong>{{MF_SOURCE_READERF_STREAMTICK}}</strong> flag, <em>pSample</em> is <strong>{{NULL}}</strong>, and <em>llTimestamp</em> indicates the time when the gap occurred. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSourceReader::Flush}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Called when the source reader receives certain events from the media source.</p> + <p>In the current implementation, the source reader uses this method to forward the following events to the application:</p><ul> <li> {{MEBufferingStarted}} </li> <li> {{MEBufferingStopped}} </li> <li> {{MEConnectEnd}} </li> <li> {{MEConnectStart}} </li> <li> {{MEExtendedType}} </li> <li> {{MESourceCharacteristicsChanged}} </li> <li> {{MESourceMetadataChanged}} </li> </ul><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + <dd> <p>For stream events, the value is the zero-based index of the stream that sent the event. For source events, the value is <strong>{{MF_SOURCE_READER_MEDIASOURCE}}</strong>.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface of the event.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSourceReaderCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSourceReader}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSourceReader}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the source reader ignores the return value.</p> + + + + <p>Implemented by the Microsoft Media Foundation sink writer object.</p> + <p>To create the sink writer, call one of the following functions:</p><ul> <li> <strong>{{MFCreateSinkWriterFromMediaSink}}</strong> </li> <li> <strong>{{MFCreateSinkWriterFromURL}}</strong> </li> </ul><p>Alternatively, use the <strong>{{IMFReadWriteClassFactory}}</strong> interface.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p><p>In Windows?8, this interface is extended with <strong>{{IMFSinkWriterEx}}</strong>.</p> + + + + <p>Adds a stream to the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. This media type specifies the format of the samples that will be written to the file. It does not need to match the input format. To set the input format, call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong>.</p> </dd> + + + <dd> <p>Receives the zero-based index of the new stream.</p> </dd> + + + + + <p>Sets the input format for a stream on the sink writer.</p> + <p>The input format does not have to match the target format that is written to the media sink. If the formats do not match, the method attempts to load an encoder that can encode from the input format to the target format.</p><p>After streaming begins?that is, after the first call to <strong>{{IMFSinkWriter::WriteSample}}</strong>?you can call this method at any time to change the input format. However, the underlying encoder and media sink must support dynamic format changes.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></strong></dt> </dl> </td><td> <p>The underlying media sink does not support the format, no conversion is possible, or a dynamic format change is not possible.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></strong></dt> </dl> </td><td> <p>The <em>dwStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_TOPO_CODEC_NOT_FOUND}}</strong></strong></dt> </dl> </td><td> <p>Could not find an encoder for the encoded format.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream. The index is received by the <em>pdwStreamIndex</em> parameter of the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface of a media type. The media type specifies the input format.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. Use the attribute store to configure the encoder. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Initializes the sink writer for writing.</p> + <p>Call this method after you configure the input streams and before you send any data to the sink writer. </p><p>You must call <strong>BeginWriting</strong> before calling any of the following methods:</p><ul> <li> <strong>{{IMFSinkWriter::Finalize}}</strong> </li> <li> <strong>{{IMFSinkWriter::Flush}}</strong> </li> <li> <strong>{{IMFSinkWriter::NotifyEndOfSegment}}</strong> </li> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>The underlying media sink must have at least one input stream. Otherwise, <strong>BeginWriting</strong> returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. To add input streams, call the <strong>{{IMFSinkWriter::AddStream}}</strong> method.</p><p>If <strong>BeginWriting</strong> succeeds, any further calls to <strong>BeginWriting</strong> return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + + <p>Delivers a sample to the sink writer.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>By default, the sink writer limits the rate of incoming data by blocking the calling thread inside the <strong>WriteSample</strong> method. This prevents the application from delivering samples too quickly. To disable this behavior, set the {{MF_SINK_WRITER_DISABLE_THROTTLING}} attribute when you create the sink writer.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream for this sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + + + <p>Indicates a gap in an input stream.</p> + <p>For video, call this method once for each missing frame. For audio, call this method at least once per second during a gap in the audio. Set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute on the first media sample after the gap.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>The position in the stream where the gap in the data occurs. The value is given in 100-nanosecond units, relative to the start of the stream.</p> </dd> + + + + + <p>Places a marker in the specified stream.</p> + <p>To use this method, you must provide an asynchronous callback when you create the sink writer. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}.</p><p>Markers provide a way to be notified when the media sink consumes all of the samples in a stream up to a certain point. The media sink does not process the marker until it has processed all of the samples that came before the marker. When the media sink processes the marker, the sink writer calls the application's <strong>OnMarker</strong> method. When the callback is invoked, you know that the sink has consumed all of the previous samples for that stream.</p><p>For example, to change the format midstream, call <strong>PlaceMarker</strong> at the point where the format changes. When <strong>OnMarker</strong> is called, it is safe to call <strong>{{IMFSinkWriter::SetInputMediaType}}</strong> to change the input type (assuming that the media sink supports dynamic format changes).</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> on the media sink.</p><p> </p><strong>Note</strong>??The <em>pvContext</em> parameter of the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method is not passed to the <em>pvarContextValue</em> parameter of the <strong>{{IMFStreamSink::PlaceMarker}}</strong> method. These two parameters are not directly related.?<p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Pointer to an application-defined value. The value of this parameter is returned to the caller in the <em>pvContext</em> parameter of the caller's <strong>{{IMFSinkWriterCallback::OnMarker}}</strong> callback method. The application is responsible for any memory allocation associated with this data. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Notifies the media sink that a stream has reached the end of a segment.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink for the specified streams. For more information, see <strong>{{IMFStreamSink::PlaceMarker}}</strong>.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to signal that all streams have reached the end of a segment.</p> </dd> + + + + + <p>Flushes one or more streams.</p> + <p>You must call <strong>{{IMFSinkWriter::BeginWriting}}</strong> before calling this method. Otherwise, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>For each stream that is flushed, the sink writer drops all pending samples, flushes the encoder, and sends an <strong>{{MFSTREAMSINK_MARKER_ENDOFSEGMENT}}</strong> marker to the media sink.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDREQUEST}}</strong></strong></dt> </dl> </td><td> <p>The request is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to flush, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}}</strong> to flush all of the streams.</p> </dd> + + + + + <p>Completes all writing operations on the sink writer.</p> + <p>Call this method after you send all of the input samples to the sink writer. The method performs any operations needed to create the final output from the media sink.</p><p>If you provide a callback interface when you create the sink writer, this method completes asynchronously. When the operation completes, the <strong>{{IMFSinkWriterCallback::OnFinalize}}</strong> method of your callback is called. For more information, see {{MF_SINK_WRITER_ASYNC_CALLBACK}}. Otherwise, if you do not provide a callback, the <strong>Finalize</strong> method blocks until the operation completes.</p><p>Internally, this method calls <strong>{{IMFStreamSink::PlaceMarker}}</strong> to place end-of-segment markers for each stream on the media sink. It also calls <strong>{{IMFFinalizableMediaSink::BeginFinalize}}</strong> and <strong>EndFinalize</strong> if the media sink supports the <strong>{{IMFFinalizableMediaSink}}</strong> interface.</p><p>After this method is called, the following methods will fail:</p><ul> <li> <strong>{{IMFSinkWriter::PlaceMarker}}</strong> </li> <li> <strong>{{IMFSinkWriter::SendStreamTick}}</strong> </li> <li> <strong>{{IMFSinkWriter::WriteSample}}</strong> </li> </ul><p>If you do not call <strong>Finalize</strong>, the output from the media sink might be incomplete or invalid. For example, required file headers might be missing from the output file.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries the underlying media sink or encoder for an interface.</p> + <p>If the <em>dwStreamIndex</em> parameter equals <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong>, the method attempts to get the interface from the media sink. Otherwise, it attempts to get the interface from the encoder for the stream at the specified index. If that fails, or if no encoder is present, the method attempts to get the interface from the stream on the media sink.</p><p> If the input and output types of the sink are identical and compressed, it's possible that no encoding is required and the video encoder will not be instantiated. In that case, <strong>GetServiceForStream</strong> will return {{MF_E_UNSUPPORTED_SERVICE}}. </p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_MEDIASINK}}</strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A service identifier {{GUID}}, or <strong>{{GUID_NULL}}</strong>. If the value is <strong>{{GUID_NULL}}</strong>, the method calls <strong>QueryInterface</strong> to get the requested interface. Otherwise, the method calls <strong>{{IMFGetService::GetService}}</strong>. For a list of service identifiers, see Service Interfaces.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the interface being requested. </p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets statistics about the performance of the sink writer.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of a stream to query, or <strong>{{MF_SINK_WRITER_ALL_STREAMS}} </strong> to query the media sink itself.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MF_SINK_WRITER_STATISTICS}}</strong> structure. Before calling the method, set the <strong>cb</strong> member to the size of the structure in bytes. The method fills the structure with statistics from the sink writer.</p> </dd> + + + + + <p>Extends the <strong>{{IMFSinkWriter}}</strong> interface.</p><p>The Sink Writer implements this interface in Windows?8. To get a reference to this interface, call <strong>QueryInterface</strong> on the Sink Writer.</p> + + + + <p>Gets a reference to a Media Foundation transform ({{MFT}}) for a specified stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of a stream.</p> </dd> + + + <dd> <p>The zero-based index of the {{MFT}} to retreive.</p> </dd> + + + <dd> <p>Receives a reference to a {{GUID}} that specifies the category of the {{MFT}}. For a list of possible values, see <strong>{{MFT_CATEGORY}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFTransform}}</strong> interface of the {{MFT}}. The caller must release the interface.</p> </dd> + + + + + <p>Provides additional functionality on the sink writer for dynamically changing the media type and encoder configuration. </p> + <p>The Sink Writer implements this interface in Windows?8.1. To get a reference to this interface, call <strong>QueryInterface</strong> on the <strong>{{IMFSinkWriter}}</strong>.</p> + + + + <p>Dynamically changes the target media type that Sink Writer is encoding to. </p> + <p>The new media type must be supported by the media sink being used and by the encoder {{MFTs}} installed on the system. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>The new media format to encode to.</p> </dd> + + + <dd> <p>The new set of encoding parameters to configure the encoder with. If not specified, previously provided parameters will be used. +</p> </dd> + + + + + <p>Dynamically updates the encoder configuration with a collection of new encoder settings.</p> + <p>The encoder will be configured with these settings after all previously queued input media samples have been sent to it through <strong>{{IMFTransform::ProcessInput}}</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the stream index.</p> </dd> + + + <dd> <p>A set of encoding parameters to configure the encoder with. </p> </dd> + + + + + <p>Callback interface for the Microsoft Media Foundation sink writer. </p> + <p>Set the callback reference by setting the {{MF_SINK_WRITER_ASYNC_CALLBACK}} attribute when you first create the sink writer. </p><p>The callback methods can be called from any thread, so an object that implements this interface must be thread-safe.</p><p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::Finalize}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Called when the <strong>{{IMFSinkWriter::PlaceMarker}}</strong> method completes.</p> + <p>This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Extends the <strong>{{IMFSinkWriterCallback}}</strong> interface.</p> + <p>This interface provides a mechanism for apps that use <strong>{{IMFSinkWriter}}</strong> to receive asynchronous notifications when the transform chain is complete and the system is ready for use or when an asynchronous error occurs.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when the transform chain in the <strong>{{IMFSourceReader}}</strong> is built or modified.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an asynchronous error occurs with the <strong>{{IMFSinkWriter}}</strong>.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Currently, the sink writer ignores the return value.</p> + + + + <p>Creates the source reader from a {{URL}}.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromURL}}</strong> method to create a media source from the {{URL}}. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of a media file to open.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p> Internally, the source reader calls the <strong>{{IMFSourceResolver::CreateObjectFromByteStream}}</strong> method to create a media source from the byte stream. Therefore, a byte-stream handler must be registered for the byte stream. For more information about byte-stream handlers, see Scheme Handlers and Byte-Stream Handlers. </p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This byte stream will provide the source data for the source reader.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the source reader from a media source.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>By default, when the application releases the source reader, the source reader shuts down the media source by calling <strong>{{IMFMediaSource::Shutdown}}</strong> on the media source. At that point, the application can no longer use the media source.</p><p>To change this default behavior, set the {{MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN}} attribute in the <em>pAttributes</em> parameter. If this attribute is <strong>{{TRUE}}</strong>, the application is responsible for shutting down the media source.</p><p>When using the Source Reader, do not call any of the following methods on the media source:</p><ul> <li> <strong>{{IMFMediaSource::Pause}}</strong> </li> <li> <strong>{{IMFMediaSource::Start}}</strong> </li> <li> <strong>{{IMFMediaSource::Stop}}</strong> </li> <li>All <strong>{{IMFMediaEventGenerator}}</strong> methods</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_DRM_UNSUPPORTED}}</strong></strong></dt> </dl> </td><td> <p>The source contains protected content.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSource}}</strong> interface of a media source.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the source reader. For more information, see Source Reader Attributes. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSourceReader}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a {{URL}} or byte stream.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>The first three parameters to this function can be <strong>{{NULL}}</strong>; however, only certain combinations are valid:</p><p> </p><table> <tr><th>Description</th><th><em>pwszOutputURL</em></th><th><em>pByteStream</em></th><th><em>pAttributes</em></th></tr> <tr><td>Specify a byte stream, with no {{URL}}.</td><td><strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Required (must not be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify a {{URL}}, with no byte stream.</td><td>not <strong>{{NULL}}</strong></td><td><strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> <tr><td>Specify both a {{URL}} and a byte stream.</td><td>non-<strong>{{NULL}}</strong></td><td>non-<strong>{{NULL}}</strong></td><td>Optional (may be <strong>{{NULL}}</strong>).</td></tr> </table><p>?</p><p>The <em>pAttributes</em> parameter is required in the first case and optional in the others.</p><ul> <li>Case 1: Specify a byte stream without a {{URL}}. The <em>pAttributes</em> parameter must point to an attribute store that contains the {{MF_TRANSCODE_CONTAINERTYPE}} attribute. The sink writer uses the {{MF_TRANSCODE_CONTAINERTYPE}} attribute to determine the type of file container to write, such as {{ASF}} or {{MP4}}.</li> <li>Case 2: Specify a {{URL}} without a byte stream. The sink writer creates a new file named <em>pwszOutputURL</em>. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, if the {{MF_TRANSCODE_CONTAINERTYPE}} attribute is absent or <em>pAttributes</em> is <strong>{{NULL}}</strong>, the sink writer uses the file name extension to select the container type; for example, ".asf" for an {{ASF}} file.</li> <li>Case 3: Specify both a {{URL}} and a byte stream. The sink writer writes to the byte stream. The {{URL}} provided in <em>pwszOutputURL</em> is informational only; the sink writer does not create a new file. If <em>pAttributes</em> specifies an attribute store with the {{MF_TRANSCODE_CONTAINERTYPE}} attribute, the sink writer uses that attribute to determine the type of file container. Otherwise, the sink writer uses the file name extension to select the container type. The {{MF_TRANSCODE_CONTAINERTYPE}} attribute overrides the {{URL}} file name extension in this case.</li> </ul><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>This function can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified {{URL}} was not found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If this parameter is a valid reference, the sink writer writes to the provided byte stream. (The byte stream must be writable.) Otherwise, if <em>pByteStream</em> is <strong>{{NULL}}</strong>, the sink writer creates a new file named <em>pwszOutputURL</em>.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates the sink writer from a media sink.</p> + <p>Call <strong>CoInitialize(Ex)</strong> and <strong>{{MFStartup}}</strong> before calling this function.</p><p>When you are done using the media sink, call the media sink's <strong>{{IMFMediaSink::Shutdown}}</strong> method. (The sink writer does not shut down the media sink.) Release the sink writer before calling <strong>Shutdown</strong> on the media sink.</p><p>This function is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.</p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaSink}}</strong> interface of a media sink. </p> </dd> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface. You can use this parameter to configure the sink writer. For more information, see Sink Writer Attributes. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFSinkWriter}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Defines the data type for a key/value pair.</p> + + + <dd> <p>Unsigned 32-bit integer.</p> </dd> + + + <dd> <p>Unsigned 64-bit integer.</p> </dd> + + + <dd> <p>Floating-point number.</p> </dd> + + + <dd> <p><strong>{{GUID}}</strong> value.</p> </dd> + + + <dd> <p>{{NULL}}-terminated wide-character string.</p> </dd> + + + <dd> <p>Byte array.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference.</p> </dd> + + + + + <p> </p><p>Specifies how to compare the attributes on two objects.</p> + + + <dd> <p>Check whether all the attributes in <em>pThis</em> exist in <em>pTheirs</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether all the attributes in <em>pTheirs</em> exist in <em>pThis</em> and have the same data, where <em>pThis</em> is the object whose <strong>Compare</strong> method is being called and <em>pTheirs</em> is the object given in the <em>pTheirs</em> parameter.</p> </dd> + + + <dd> <p>Check whether both objects have identical attributes with the same data.</p> </dd> + + + <dd> <p>Check whether the attributes that exist in both objects have the same data.</p> </dd> + + + <dd> <p>Find the object with the fewest number of attributes, and check if those attributes exist in the other object and have the same data.</p> </dd> + + + + + <p> </p><p>Defines flags for serializing and deserializing attribute stores.</p> + + + <dd> <p>If this flag is set, <strong>{{IUnknown}}</strong> references in the attribute store are marshaled to and from the stream. If this flag is absent, <strong>{{IUnknown}}</strong> references in the attribute store are not marshaled or serialized.</p> </dd> + + + + + <p>Contains flags for the <strong>{{IMF2DBuffer2::Lock2DSize}}</strong> method.</p> + + + + <p>Specifies how a video stream is interlaced.</p><p>In the descriptions that follow, upper field refers to the field that contains the leading half scan line. Lower field refers to the field that contains the first full scan line.</p> + <p>Scan lines in the lower field are 0.5 scan line lower than those in the upper field. In {{NTSC}} television, a frame consists of a lower field followed by an upper field. In {{PAL}} television, a frame consists of an upper field followed by a lower field.</p><p>The upper field is also called the even field, the top field, or field 2. The lower field is also called the odd field, the bottom field, or field 1.</p><p>If the interlace mode is {{MFVideoInterlace_FieldSingleUpper}} or {{MFVideoInterlace_FieldSingleLower}}, each sample contains a single field, so each buffer contains only half the number of field lines given in the media type.</p> + + + <dd> <p> The type of interlacing is not known. </p> </dd> + + + <dd> <p> Progressive frames. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the upper field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains two fields. The field lines are interleaved, with the lower field appearing on the first line. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the upper field appearing first. </p> </dd> + + + <dd> <p> Interlaced frames. Each frame contains one field, with the lower field appearing first. </p> </dd> + + + <dd> <p> The stream contains a mix of interlaced and progressive modes. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> Specifies the conversion function from linear {{RGB}} to non-linear {{RGB}} (R'G'B'). </p> + <p> These flags are used with the <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferFunction}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown. Treat as {{MFVideoTransFunc_709}}. </p> </dd> + + + <dd> <p> Linear {{RGB}} (gamma = 1.0). </p> </dd> + + + <dd> <p> True 1.8 gamma, L' = L^1/1.8. </p> </dd> + + + <dd> <p> True 2.0 gamma, L' = L^1/2.0. </p> </dd> + + + <dd> <p> True 2.2 gamma, L' = L^1/2.2. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709 transfer function. Gamma 2.2 curve with a linear segment in the lower range. This transfer function is used in {{BT}}.709, {{BT}}.601, {{SMPTE}} 296M, {{SMPTE}} 170M, {{BT}}.470, and {{SPMTE}} 274M. In addition {{BT}}-1361 uses this function within the range [0...1]. </p> </dd> + + + <dd> <p> {{SPMTE}} 240M transfer function. Gamma 2.2 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> sRGB transfer function. Gamma 2.4 curve with a linear segment in the lower range. </p> </dd> + + + <dd> <p> True 2.8 gamma. L' = L^1/2.8. This transfer function is used in {{ITU}}-R {{BT}}.470-2 System B, G ({{PAL}}). </p> </dd> + + + <dd> <p>Logarithmic transfer (100:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Logarithmic transfer (316.22777:1 range); for example, as used in H.264 video.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p>Symmetric {{ITU}}-R {{BT}}.709.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p>Specifies the color primaries of a video source. The color primaries define how to convert colors from {{RGB}} color space to {{CIE}} {{XYZ}} color space.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoPrimaries}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p> The color primaries are unknown. </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.709. Also used for sRGB and scRGB. </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System M ({{NTSC}}). </p> </dd> + + + <dd> <p> {{ITU}}-R {{BT}}.470-4 System B,G ({{NTSC}}). </p> </dd> + + + <dd> <p> {{SMPTE}} 170M. </p> </dd> + + + <dd> <p> {{SMPTE}} 240M. </p> </dd> + + + <dd> <p> {{EBU}} 3213. </p> </dd> + + + <dd> <p> {{SMPTE}} C ({{SMPTE}} {{RP}} 145). </p> </dd> + + + <dd> <p> Reserved. </p> </dd> + + + <dd> <p> Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value. </p> </dd> + + + + + <p> </p><p>Describes the optimal lighting for viewing a particular set of video content.</p> + <p>This enumeration is used with the <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> attribute.</p> + + + <dd> <p>The optimal lighting is unknown.</p> </dd> + + + <dd> <p>Bright lighting; for example, outdoors.</p> </dd> + + + <dd> <p>Medium brightness; for example, normal office lighting.</p> </dd> + + + <dd> <p>Dim; for example, a living room with a television and additional low lighting.</p> </dd> + + + <dd> <p>Dark; for example, a movie theater.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Describes the conversion matrices between Y'PbPr (component video) and studio R'G'B'.</p> + <p>This enumeration is used with the <strong>{{MF_MT_YUV_MATRIX}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoTransferMatrix}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown transfer matrix. Treat as {{MFVideoTransferMatrix_BT709}}.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.709 transfer matrix.</p> </dd> + + + <dd> <p>{{ITU}}-R {{BT}}.601 transfer matrix. Also used for {{SMPTE}} 170 and {{ITU}}-R {{BT}}.470-2 System B,G.</p> </dd> + + + <dd> <p>{{SMPTE}} 240M transfer matrix.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p> </p><p>Contains flags that define the chroma encoding scheme for Y'Cb'Cr' data.</p> + <p>These flags are used with the <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> attribute.</p><p>For more information about these values, see the remarks for the <strong>{{DXVA2_VideoChromaSubSampling}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration.</p> + + + <dd> <p>Unknown encoding scheme.</p> </dd> + + + <dd> <p>Chroma should be reconstructed as if the underlying video was progressive content, rather than skipping fields or applying chroma filtering to minimize artifacts from reconstructing 4:2:0 interlaced chroma.</p> </dd> + + + <dd> <p>Chroma samples are aligned horizontally with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel to the right of the corresponding luma sample.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically with the luma samples, or with multiples of the luma samples. If this flag is not set, chroma samples are located 1/2 pixel down from the corresponding luma sample.</p> </dd> + + + <dd> <p>The U and V planes are aligned vertically. If this flag is not set, the chroma planes are assumed to be out of phase by 1/2 chroma sample, alternating between a line of U followed by a line of V.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-2 video. Chroma samples are aligned horizontally with the luma samples, but are not aligned vertically. The U and V planes are aligned vertically.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{MPEG}}-1 video.</p> </dd> + + + <dd> <p>Specifies the chroma encoding scheme for {{PAL}} {{DV}} video.</p> </dd> + + + <dd> <p>Chroma samples are aligned vertically and horizontally with the luma samples. {{YUV}} formats such as 4:4:4, 4:2:2, and 4:1:1 are always cosited in both directions and should use this flag.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved. This member forces the enumeration type to compile as a <strong>{{DWORD}}</strong> value.</p> </dd> + + + + + <p>Specifies whether color data includes headroom and toeroom. Headroom allows for values beyond 1.0 white ("whiter than white"), and toeroom allows for values below reference 0.0 black ("blacker than black"). </p> + <p> This enumeration is used with the <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> attribute. </p><p> For more information about these values, see the remarks for the <strong>{{DXVA2_NominalRange}}</strong> enumeration, which is the DirectX Video Acceleration ({{DXVA}}) equivalent of this enumeration. </p> + + + <dd> <p> Unknown nominal range. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_0_255}}. </p> </dd> + + + <dd> <p> Equivalent to {{MFNominalRange_16_235}}. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [0...255] for 8-bit samples or [0...1023] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0...1] maps to [16...235] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p> The normalized range [0..1] maps to [48...208] for 8-bit samples or [64...940] for 10-bit samples. </p> </dd> + + + <dd> <p>The normalized range [0..1] maps to [64...127] for 8-bit samples or [256...508] for 10-bit samples. This range is used in the xRGB color space.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Contains flags that describe a video stream.</p><p>These flags are used in the <strong>{{MFVideoInfo}}</strong> structure, which is part of the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVIDEOFORMAT}}</strong> structure. The following table lists the attributes that correspond to the flags defined in this enumeration.</p><table> <tr><th>Flags</th><th>Media Type Attribute</th></tr> <tr><td> <p>{{MFVideoFlag_PAD_TO_None}}</p> <p>{{MFVideoFlag_PAD_TO_4x3}}</p> <p>{{MFVideoFlag_PAD_TO_16x9}}</p> </td><td> <strong>{{MF_MT_PAD_CONTROL_FLAGS}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint16x9}}</p> <p>{{MFVideoFlag_SrcContentHint235_1}}</p> </td><td> <strong>{{MF_MT_SOURCE_CONTENT_HINT}}</strong> </td></tr> <tr><td> <p>{{MFVideoFlag_AnalogProtected}}</p> <p>{{MFVideoFlag_DigitallyProtected}}</p> </td><td> <strong>{{MF_MT_DRM_FLAGS}}</strong> </td></tr> <tr><td>{{MFVideoFlag_PanScanEnabled}}</td><td> <strong>{{MF_MT_PAN_SCAN_ENABLED}}</strong> </td></tr> <tr><td>{{MFVideoFlag_BottomUpLinearRep}}</td><td>Use the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute to specify a negative stride.</td></tr> </table><p>?</p><p>The following flags were defined to describe per-sample interlacing information, but are obsolete:</p><ul> <li> {{MFVideoFlag_ProgressiveContent}} </li> <li> {{MFVideoFlag_FieldRepeatCountMask}} </li> <li> {{MFVideoFlag_FieldRepeatCountShift}} </li> <li> {{MFVideoFlag_ProgressiveSeqReset}} </li> <li> {{MFVideoFlag_LowerFieldFirst}} </li> </ul><p>Instead, components should use sample attributes to describe per-sample interlacing information, as described in the topic Video Interlacing.</p> + + + + <p> </p><p>Contains values that specify common video formats.</p> + + + <dd> <p>Reserved; do not use.</p> </dd> + + + <dd> <p>{{NTSC}} television (720 x 480i).</p> </dd> + + + <dd> <p>{{PAL}} television (720 x 576i).</p> </dd> + + + <dd> <p>{{DVD}}, {{NTSC}} standard (720 x 480).</p> </dd> + + + <dd> <p>{{DVD}}, {{PAL}} standard (720 x 576).</p> </dd> + + + <dd> <p>{{DV}} video, {{PAL}} standard.</p> </dd> + + + <dd> <p>{{DV}} video, {{NTSC}} standard.</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{SD}} (480i).</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} interlaced (1080i)</p> </dd> + + + <dd> <p>{{ATSC}} digital television, {{HD}} progressive (720p)</p> </dd> + + + + + + + + <p> </p><p>Specifies the origin for a seek request.</p> + + + <dd> <p>The seek position is specified relative to the start of the stream.</p> </dd> + + + <dd> <p>The seek position is specified relative to the current read/write position in the stream.</p> </dd> + + + + + <p> </p><p>Specifies the requested access mode for opening a file.</p> + + + <dd> <p>Read mode.</p> </dd> + + + <dd> <p>Write mode.</p> </dd> + + + <dd> <p>Read and write mode.</p> </dd> + + + + + <p> </p><p>Specifies how to open or create a file.</p> + + + <dd> <p>Open an existing file. Fail if the file does not exist.</p> </dd> + + + <dd> <p>Create a new file. Fail if the file already exists.</p> </dd> + + + <dd> <p>Open an existing file and truncate it, so that the size is zero bytes. Fail if the file does not already exist.</p> </dd> + + + <dd> <p>If the file does not exist, create a new file. If the file exists, open it.</p> </dd> + + + <dd> <p>Create a new file. If the file exists, overwrite the file.</p> </dd> + + + + + <p> Specifies the behavior when opening a file. </p> + + + <dd> <p> Use the default behavior. </p> </dd> + + + <dd> <p> Open the file with no system caching. </p> </dd> + + + <dd> <p>Subsequent open operations can have write access to the file. </p> <strong>Note</strong>??Requires Windows?7 or later. ? </dd> + + + + + <p>Specifies the object type for the <strong>{{IMFPluginControl}}</strong> interface.</p> + + + + <p>Defines policy settings for the <strong>{{IMFPluginControl2::SetPolicy}}</strong> method.</p> + + + + + + + <p>Contains media type information for registering a Media Foundation transform ({{MFT}}). </p> + + + <dd> <p>The major media type. For a list of possible values, see Major Media Types. </p> </dd> + + + <dd> <p>The media subtype. For a list of possible values, see the following topics:</p> <ul> <li> Audio Subtype {{GUIDs}} </li> <li> Video Subtype {{GUIDs}} </li> </ul> </dd> + + + + + <p> </p><p>Represents a ratio.</p> + + + <dd> <p>Numerator of the ratio.</p> </dd> + + + <dd> <p>Denominator of the ratio.</p> </dd> + + + + + <p> Specifies an offset as a fixed-point real number. </p> + <p> The value of the number is <strong>value</strong> + (<strong>fract</strong> / 65536.0f).</p> + + + <dd> <p> The fractional part of the number. </p> </dd> + + + <dd> <p> The integer part of the number. </p> </dd> + + + + + <p> Specifies a rectangular area within a video frame. </p> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the x-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> An <strong>{{MFOffset}}</strong> structure that contains the y-coordinate of the upper-left corner of the rectangle. This coordinate might have a fractional value. </p> </dd> + + + <dd> <p> A <strong>{{SIZE}}</strong> structure that contains the width and height of the rectangle. </p> </dd> + + + + + <p> </p><p>Contains video format information that applies to both compressed and uncompressed formats.</p><p>This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>Developers are encouraged to use media type attributes instead of using the <strong>{{MFVideoInfo}}</strong> structure. The following table lists the attributes that correspond to the members of this structure.</p><table> <tr><th>Structure Member</th><th>Media Type Attribute</th></tr> <tr><td><strong>dwWidth</strong>, <strong>dwHeight</strong></td><td> <strong>{{MF_MT_FRAME_SIZE}}</strong> </td></tr> <tr><td><strong>PixelAspectRatio</strong></td><td> <strong>{{MF_MT_PIXEL_ASPECT_RATIO}}</strong> </td></tr> <tr><td><strong>SourceChromaSubsampling</strong></td><td> <strong>{{MF_MT_VIDEO_CHROMA_SITING}}</strong> </td></tr> <tr><td><strong>InterlaceMode</strong></td><td> <strong>{{MF_MT_INTERLACE_MODE}}</strong> </td></tr> <tr><td><strong>TransferFunction</strong></td><td> <strong>{{MF_MT_TRANSFER_FUNCTION}}</strong> </td></tr> <tr><td><strong>ColorPrimaries</strong></td><td> <strong>{{MF_MT_VIDEO_PRIMARIES}}</strong> </td></tr> <tr><td><strong>TransferMatrix</strong></td><td> <strong>{{MF_MT_YUV_MATRIX}}</strong> </td></tr> <tr><td><strong>SourceLighting</strong></td><td> <strong>{{MF_MT_VIDEO_LIGHTING}}</strong> </td></tr> <tr><td><strong>FramesPerSecond</strong></td><td> <strong>{{MF_MT_FRAME_RATE}}</strong> </td></tr> <tr><td><strong>NominalRange</strong></td><td> <strong>{{MF_MT_VIDEO_NOMINAL_RANGE}}</strong> </td></tr> <tr><td><strong>GeometricAperture</strong></td><td> <strong>{{MF_MT_GEOMETRIC_APERTURE}}</strong> </td></tr> <tr><td><strong>MinimumDisplayAperture</strong></td><td> <strong>{{MF_MT_MINIMUM_DISPLAY_APERTURE}}</strong> </td></tr> <tr><td><strong>PanScanAperture</strong></td><td> <strong>{{MF_MT_PAN_SCAN_APERTURE}}</strong> </td></tr> <tr><td><strong>VideoFlags</strong></td><td>See <strong>{{MFVideoFlags}}</strong>.</td></tr> </table><p>?</p> + + + + <p> </p><p>Describes a 4:4:4:4 Y'Cb'Cr' sample.</p> + + + <dd> <p>Cr (chroma difference) value.</p> </dd> + + + <dd> <p>Cb (chroma difference) value.</p> </dd> + + + <dd> <p>Y (luma) value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p> </p><p>Describes an {{ARGB}} color value.</p> + + + <dd> <p>Blue value.</p> </dd> + + + <dd> <p>Green value.</p> </dd> + + + <dd> <p>Red value.</p> </dd> + + + <dd> <p>Alpha value.</p> </dd> + + + + + <p>Contains one palette entry in a color table.</p> + <p>This union can be used to represent both {{RGB}} palettes and Y'Cb'Cr' palettes. The video format that defines the palette determines which union member should be used.</p> + + + <dd> <p> <strong>{{MFARGB}}</strong> structure that contains an {{RGB}} color.</p> </dd> + + + <dd> <p> <strong>{{MFAYUVSample}}</strong> structure that contains a Y'Cb'Cr' color.</p> </dd> + + + + + <p> </p><p>Contains information about an uncompressed video format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + + + + <p> </p><p>Contains information about a video compression format. This structure is used in the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p> + <p>For uncompressed video formats, set the structure members to zero.</p> + + + + <p> </p><p>Describes a video format.</p> + <p>Applications should avoid using this structure. Instead, it is recommended that applications use attributes to describe the video format. For a list of media type attributes, see Media Type Attributes. With attributes, you can set just the format information that you know, which is easier (and more likely to be accurate) than trying to fill in complete format information for the <strong>{{MFVIDEOFORMAT}}</strong> structure.</p><p>To initialize a media type object from an <strong>{{MFVIDEOFORMAT}}</strong> structure, call <strong>{{MFInitMediaTypeFromMFVideoFormat}}</strong>.</p><p>You can use the <strong>{{MFVIDEOFORMAT}}</strong> structure as the format block for a DirectShow media type. Set the format {{GUID}} to {{FORMAT_MFVideoFormat}}.</p> + + + <dd> <p>Size of the structure, in bytes. This value includes the size of the palette entries that may appear after the <strong>surfaceInfo</strong> member.</p> </dd> + + + <dd> <p> <strong>{{MFVideoInfo}}</strong> structure. This structure contains information that applies to both compressed and uncompressed formats.</p> </dd> + + + <dd> <p>Video subtype. See Video Subtype {{GUIDs}}.</p> </dd> + + + <dd> <p> <strong>{{MFVideoCompressedInfo}}</strong> structure. This structure contains information that applies only to compressed formats.</p> </dd> + + + <dd> <p> <strong>{{MFVideoSurfaceInfo}}</strong> structure. This structure contains information that applies only to uncompressed formats.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies which value to retrieve. </p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value, if the value is found. Call <strong>PropVariantClear</strong> to free the memory allocated by this method. This parameter can be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, the method searches for the key and returns {{S_OK}} if the key is found, but does not copy the value.</p> </dd> + + + + + <p> </p><p>Retrieves the data type of the value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key is not stored in this object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>Queries whether a stored attribute value equals to a specified <strong>{{PROPVARIANT}}</strong>.</p> + <p>The method sets <em>pbResult</em> to <strong>{{FALSE}}</strong> for any of the following reasons:</p><ul> <li> <p>No attribute is found whose key matches the one given in <em>guidKey</em>.</p> </li> <li> <p>The attribute's <strong>{{PROPVARIANT}}</strong> type does not match the type given in <em>Value</em>.</p> </li> <li> <p>The attribute value does not match the value given in <em>Value</em>.</p> </li> <li> <p>The method fails.</p> </li> </ul><p>Otherwise, the method sets <em>pbResult</em> to <strong>{{TRUE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to query.</p> </dd> + + + <dd> <p><strong>{{PROPVARIANT}}</strong> that contains the value to compare.</p> </dd> + + + <dd> <p>Receives a Boolean value indicating whether the attribute matches the value given in <em>Value</em>. See Remarks. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Compares the attributes on this object with the attributes on another object.</p> + <p>If <em>pThis</em> is the object whose <strong>Compare</strong> method is called, and <em>pTheirs</em> is the object passed in as the <em>pTheirs</em> parameter, the following comparisons are defined by <em>MatchType</em>.</p><table> <tr><th>Match type</th><th>Returns <strong>{{TRUE}}</strong> if and only if</th></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_OUR_ITEMS}}</strong></td><td>For every attribute in <em>pThis</em>, an attribute with the same key and value exists in <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_THEIR_ITEMS}}</strong></td><td>For every attribute in <em>pTheirs</em>, an attribute with the same key and value exists in <em>pThis</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_ALL_ITEMS}}</strong></td><td>The key/value pairs are identical in both objects.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_INTERSECTION}}</strong></td><td>Take the intersection of the keys in <em>pThis</em> and the keys in <em>pTheirs</em>. The values associated with those keys are identical in both <em>pThis</em> and <em>pTheirs</em>.</td></tr> <tr><td><strong>{{MF_ATTRIBUTES_MATCH_SMALLER}}</strong></td><td>Take the object with the smallest number of attributes. For every attribute in that object, an attribute with the same key and value exists in the other object.</td></tr> </table><p>?</p><p>The <em>pTheirs</em> and <em>pbResult</em> parameters must not be <strong>{{NULL}}</strong>. If either parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the object to compare with this object.</p> </dd> + + + <dd> <p>Member of the <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong> enumeration, specifying the type of comparison to make.</p> </dd> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the two sets of attributes match in the way specified by the <em>MatchType</em> parameter. Otherwise, the value is <strong>{{FALSE}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT32}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>{{UINT32}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT32}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT32}}</strong> value. If the key is found and the data type is <strong>{{UINT32}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>{{UINT64}}</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a <strong>{{UINT64}}</strong>. </p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_UINT64}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{UINT64}}</strong> value. If the key is found and the data type is <strong>{{UINT64}}</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a <strong>double</strong> value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a <strong>double</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_DOUBLE}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>double</strong> value. If the key is found and the data type is <strong>double</strong>, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves a {{GUID}} value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a {{GUID}}.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_GUID}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{GUID}} value. If the key is found and the data type is {{GUID}}, the method copies the value into this parameter. Otherwise, the original value of this parameter is not changed.</p> </dd> + + + + + <p> </p><p>Retrieves the length of a string value associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives the number of characters in the string, not including the terminating <strong>{{NULL}}</strong> character. To get the string value, call <strong>{{IMFAttributes::GetString}}</strong>.</p> </dd> + + + + + <p> </p><p>Retrieves a wide-character string associated with a key.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedString}}</strong> method, which allocates the buffer to hold the string.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The length of the string is too large to fit in a <strong>{{UINT32}}</strong> value.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to hold the string.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a string.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a wide-character array allocated by the caller. The array must be large enough to hold the string, including the terminating <strong>{{NULL}}</strong> character. If the key is found and the value is a string type, the method copies the string into this buffer. To find the length of the string, call <strong>{{IMFAttributes::GetStringLength}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pwszValue</em> array, in characters. This value includes the terminating {{NULL}} character.</p> </dd> + + + <dd> <p>Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> Gets a wide-character string associated with a key. This method allocates the memory for the string. </p> + <p>To copy a string value into a caller-allocated buffer, use the <strong>{{IMFAttributes::GetString}}</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><strong>Note</strong>??An earlier version of the documentation incorrectly stated that the <em>pcchLength</em> parameter can be <strong>{{NULL}}</strong>. Setting this parameter to <strong>{{NULL}}</strong> might succeed in some cases, but is not guaranteed. The caller must pass a non-<strong>{{NULL}}</strong> reference for this parameter.? + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The specified key was not found. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The attribute value is not a string. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A {{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_STRING}}</strong>. </p> </dd> + + + <dd> <p>If the key is found and the value is a string type, this parameter receives a copy of the string. The caller must free the memory for the string by calling <strong>CoTaskMemFree</strong>. </p> </dd> + + + <dd> <p> Receives the number of characters in the string, excluding the terminating <strong>{{NULL}}</strong> character. This parameter must not be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves the length of a byte array associated with a key.</p> + <p>To get the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>If the key is found and the value is a byte array, this parameter receives the size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Retrieves a byte array associated with a key. This method copies the array into a caller-allocated buffer.</p> + <p>You can also use the <strong>{{IMFAttributes::GetAllocatedBlob}}</strong> method, which allocates the buffer to hold the byte array.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOT_SUFFICIENT_BUFFER}}</strong></strong></dt> </dl> </td><td> <p>The buffer is not large enough to the array.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{MF_E_INVALIDTYPE}}</strong></strong></dt> </dl> </td><td> <p>The attribute value is not a byte array.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_BLOB}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a buffer allocated by the caller. If the key is found and the value is a byte array, the method copies the array into this buffer. To find the required size of the buffer, call <strong>{{IMFAttributes::GetBlobSize}}</strong>.</p> </dd> + + + <dd> <p>The size of the <em>pBuf</em> buffer, in bytes.</p> </dd> + + + <dd> <p>Receives the size of the byte array. This parameter can be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Provides a generic way to store key/value pairs on an object. The keys are <strong>{{GUID}}</strong>s, and the values can be any of the following data types: <strong>{{UINT32}}</strong>, <strong>{{UINT64}}</strong>, <strong>double</strong>, <strong>{{GUID}}</strong>, wide-character string, byte array, or <strong>{{IUnknown}}</strong> reference. The standard implementation of this interface holds a thread lock while values are added, deleted, or retrieved.</p><p>For a list of predefined attribute <strong>{{GUID}}</strong>s, see Media Foundation Attributes. Each attribute <strong>{{GUID}}</strong> has an expected data type. The various "set" methods in <strong>{{IMFAttributes}}</strong> do not validate the type against the attribute <strong>{{GUID}}</strong>. It is the application's responsibility to set the correct type for the attribute.</p><p>To create an empty attribute store, call <strong>{{MFCreateAttributes}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves an interface reference associated with a key.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The attribute value is an <strong>{{IUnknown}}</strong> reference but does not support requested interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p>The attribute value is not an <strong>{{IUnknown}}</strong> reference.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies which value to retrieve. The attribute type must be <strong>{{MF_ATTRIBUTE_IUNKNOWN}}</strong>.</p> </dd> + + + <dd> <p>Interface identifier ({{IID}}) of the interface to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds an attribute value with a specified key. </p> + <p> This method checks whether the <strong>{{PROPVARIANT}}</strong> type is one of the attribute types defined in <strong>{{MF_ATTRIBUTE_TYPE}}</strong>, and fails if an unsupported type is used. However, this method does not check whether the <strong>{{PROPVARIANT}}</strong> is the correct type for the specified attribute {{GUID}}. (There is no programmatic way to associate attribute {{GUIDs}} with property types.) For a list of Media Foundation attributes and their data types, see Media Foundation Attributes. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p> Insufficient memory. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> Invalid attribute type. </p> </td></tr> </table><p>?</p> + + + <dd> <p> A {{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value. </p> </dd> + + + <dd> <p> A <strong>{{PROPVARIANT}}</strong> that contains the attribute value. The method copies the value. The <strong>{{PROPVARIANT}}</strong> type must be one of the types listed in the <strong>{{MF_ATTRIBUTE_TYPE}}</strong> enumeration. </p> </dd> + + + + + <p> </p><p>Removes a key/value pair from the object's attribute list.</p> + <p>If the specified key does not exist, the method returns <strong>{{S_OK}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to delete.</p> </dd> + + + + + <p> </p><p>Removes all key/value pairs from the object's attribute list.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Associates a <strong>{{UINT32}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT32}}</strong> value, call <strong>{{IMFAttributes::GetUINT32}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>{{UINT64}}</strong> value with a key.</p> + <p>To retrieve the <strong>{{UINT64}}</strong> value, call <strong>{{IMFAttributes::GetUINT64}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a <strong>double</strong> value with a key.</p> + <p>To retrieve the double value, call <strong>{{IMFAttributes::GetDouble}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a {{GUID}} value with a key.</p> + <p>To retrieve the {{GUID}} value, call <strong>{{IMFAttributes::GetGUID}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>New value for this key.</p> </dd> + + + + + <p> </p><p>Associates a wide-character string with a key.</p> + <p>To retrieve the string, call <strong>{{IMFAttributes::GetString}}</strong> or <strong>{{IMFAttributes::GetAllocatedString}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Null-terminated wide-character string to associate with this key. The method stores a copy of the string.</p> </dd> + + + + + <p> </p><p>Associates a byte array with a key.</p> + <p>To retrieve the byte array, call <strong>{{IMFAttributes::GetBlob}}</strong> or <strong>{{IMFAttributes::GetAllocatedBlob}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p>Pointer to a byte array to associate with this key. The method stores a copy of the array.</p> </dd> + + + <dd> <p>Size of the array, in bytes.</p> </dd> + + + + + <p> </p><p>Associates an <strong>{{IUnknown}}</strong> reference with a key.</p> + <p>To retrieve the <strong>{{IUnknown}}</strong> reference, call <strong>{{IMFAttributes::GetUnknown}}</strong>.</p><p>It is not an error to call <strong>SetUnknown</strong> with <em>pUnknown</em> equal to <strong>{{NULL}}</strong>. However, <strong>GetUnknown</strong> will return <strong>{{MF_E_INVALIDTYPE}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>{{GUID}} that identifies the value to set. If this key already exists, the method overwrites the old value.</p> </dd> + + + <dd> <p><strong>{{IUnknown}}</strong> reference to be associated with this key.</p> </dd> + + + + + <p> </p><p>Locks the attribute store so that no other thread can access it. If the attribute store is already locked by another thread, this method blocks until the other thread unlocks the object. After calling this method, call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the object.</p> + <p>This method can cause a deadlock if a thread that calls <strong>LockStore</strong> waits on a thread that calls any other <strong>{{IMFAttributes}}</strong> methods on the same object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Unlocks the attribute store after a call to the <strong>{{IMFAttributes::LockStore}}</strong> method. While the object is unlocked, multiple threads can access the object's attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the number of attributes that are set on this object.</p> + <p>To enumerate all of the attributes, call <strong>{{IMFAttributes::GetItemByIndex}}</strong> for each index value.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of attributes. This parameter must not be <strong>{{NULL}}</strong>. If this parameter is <strong>{{NULL}}</strong>, an access violation occurs.</p> </dd> + + + + + <p> </p><p>Retrieves an attribute at the specified index.</p> + <p>To enumerate all of an object's attributes in a thread-safe way, do the following:</p><ol> <li> <p>Call <strong>{{IMFAttributes::LockStore}}</strong> to prevent another thread from adding or deleting attributes.</p> </li> <li> <p>Call <strong>{{IMFAttributes::GetCount}}</strong> to find the number of attributes.</p> </li> <li> <p>Call <strong>GetItemByIndex</strong> to get each attribute by index.</p> </li> <li> <p>Call <strong>{{IMFAttributes::UnlockStore}}</strong> to unlock the attribute store.</p> </li> </ol><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid index.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the attribute to retrieve. To get the number of attributes, call <strong>{{IMFAttributes::GetCount}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{GUID}} that identifies this attribute.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that receives the value. This parameter can be <strong>{{NULL}}</strong>. If it is not <strong>{{NULL}}</strong>, the method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the attribute value. Call <strong>PropVariantClear</strong> to free the memory allocated by this method.</p> </dd> + + + + + <p> Copies all of the attributes from this object into another attribute store. </p> + <p> This method deletes all of the attributes originally stored in <em>pDest</em>. </p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong> on an <strong>{{IMFSample}}</strong>, which inherits this method, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> A reference to the <strong>{{IMFAttributes}}</strong> interface of the attribute store that receives the copy. </p> </dd> + + + + + <p>Represents a block of memory that contains media data. Use this interface to access the data in the buffer.</p> + <p>If the buffer contains 2-D image data (such as an uncompressed video frame), you should query the buffer for the <strong>{{IMF2DBuffer}}</strong> interface. The methods on <strong>{{IMF2DBuffer}}</strong> are optimized for 2-D data.</p><p>To get a buffer from a media sample, call one of the following <strong>{{IMFSample}}</strong> methods:</p><ul> <li> <p> <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> </p> </li> <li> <p> <strong>{{IMFSample::GetBufferByIndex}}</strong> </p> </li> </ul><p>To create a new buffer object, use one of the following functions.</p><table> <tr><th>Function</th><th>Description</th></tr> <tr><td> <strong>{{MFCreateMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory.</td></tr> <tr><td> <strong>{{MFCreateMediaBufferWrapper}}</strong> </td><td>Creates a media buffer that wraps an existing media buffer.</td></tr> <tr><td> <strong>{{MFCreateDXSurfaceBuffer}}</strong> </td><td>Creates a buffer that manages a DirectX surface.</td></tr> <tr><td> <strong>{{MFCreateAlignedMemoryBuffer}}</strong> </td><td>Creates a buffer and allocates system memory with a specified alignment.</td></tr> </table><p>?</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Gives the caller access to the memory in the buffer, for reading or writing</p> + <p>This method gives the caller access to the entire buffer, up to the maximum size returned in the <em>pcbMaxLength</em> parameter. The value returned in <em>pcbCurrentLength</em> is the size of any valid data already in the buffer, which might be less than the total buffer size.</p><p>The reference returned in <em>ppbBuffer</em> is guaranteed to be valid, and can safely be accessed across the entire buffer for as long as the lock is held. When you are done accessing the buffer, call <strong>{{IMFMediaBuffer::Unlock}}</strong> to unlock the buffer. You must call <strong>Unlock</strong> once for each call to <strong>Lock</strong>. After you unlock the buffer, the reference returned in <em>ppbBuffer</em> is no longer valid, and should not be used. Generally, it is best to call <strong>Lock</strong> only when you need to access the buffer memory, and not earlier.</p><p>Locking the buffer does not prevent other threads from calling <strong>Lock</strong>, so you should not rely on this method to synchronize threads.</p><p>This method does not allocate any memory, or transfer ownership of the memory to the caller. Do not release or free the memory; the media buffer will free the memory when the media buffer is destroyed.</p><p>If you modify the contents of the buffer, update the current length by calling <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong>.</p><p>If the buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, you should use the <strong>{{IMF2DBuffer::Lock2D}}</strong> method to lock the buffer. For 2-D buffers, the <strong>Lock2D</strong> method is more efficient than the <strong>Lock</strong> method. If the buffer is locked using <strong>Lock2D</strong>, the Lock method might return <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when locking the surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the start of the buffer.</p> </dd> + + + <dd> <p>Receives the maximum amount of data that can be written to the buffer. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + <dd> <p>Receives the length of the valid data in the buffer, in bytes. This parameter can be <strong>{{NULL}}</strong>. The same value is returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for every call to <strong>{{IMFMediaBuffer::Lock}}</strong>.</p> + <p>It is an error to call <strong>Unlock</strong> if you did not call <strong>Lock</strong> previously.</p><p>After calling this method, do not use the reference returned by the <strong>Lock</strong> method. It is no longer guaranteed to be valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>For Direct3D surface buffers, an error occurred when unlocking the surface.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the length of the valid data in the buffer.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the length of the valid data, in bytes. If the buffer does not contain any valid data, the value is zero.</p> </dd> + + + + + <p> </p><p>Sets the length of the valid data in the buffer.</p> + <p>Call this method if you write data into the buffer.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The specified length is greater than the maximum size of the buffer.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Length of the valid data, in bytes. This value cannot be greater than the allocated size of the buffer, which is returned by the <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> method.</p> </dd> + + + + + <p> </p><p>Retrieves the allocated size of the buffer.</p> + <p>The buffer might or might not contain any valid data, and if there is valid data in the buffer, it might be smaller than the buffer's allocated size. To get the length of the valid data, call <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the allocated size of the buffer, in bytes.</p> </dd> + + + + + <p>Represents a media sample, which is a container object for media data. For video, a sample typically contains one video frame. For audio data, a sample typically contains multiple audio samples, rather than a single sample of audio.</p><p>A media sample contains zero or more buffers. Each buffer manages a block of memory, and is represented by the <strong>{{IMFMediaBuffer}}</strong> interface. A sample can have multiple buffers. The buffers are kept in an ordered list and accessed by index value. It is also valid to have an empty sample with no buffers.</p> + <p>To create a new media sample, call <strong>{{MFCreateSample}}</strong>.</p><strong>Note</strong>??<p>When you call <strong>CopyAllItems</strong>, inherited from the <strong>{{IMFAttributes}}</strong> interface, on an <strong>{{IMFSample}}</strong>, the sample time, duration, and flags are not copied to the destination sample. You must copy these values to the new sample manually.</p>?<p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To get attibutes from a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets flags associated with the sample.</p><p>Currently no flags are defined. Instead, metadata for samples is defined using attributes. To set attibutes on a sample, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFSample}}</strong> inherits. For a list of sample attributes, see Sample Attributes.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the presentation time of the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The sample does not have a presentation time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the presentation time of the sample.</p> + <p>Some pipeline components require samples that have time stamps. Generally the component that generates the data for the sample also sets the time stamp. The Media Session might modify the time stamps.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The presentation time, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the duration of the sample.</p> + <p>If the sample contains more than one buffer, the duration includes the data from all of the buffers.</p><p>If the retrieved duration is zero, or if the method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>, the duration is unknown. In that case, it might be possible to calculate the duration from the media type?for example, by using the video frame rate or the audio sampling rate.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The sample does not have a specified duration.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the duration, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Sets the duration of the sample.</p> + <p>This method succeeds if the duration is negative, although negative durations are probably not valid for most types of data. It is the responsibility of the object that consumes the sample to validate the duration.</p><p>The duration can also be zero. This might be valid for some types of data. For example, the sample might contain stream metadata with no buffers.</p><p>Until this method is called, the <strong>{{IMFSample::GetSampleDuration}}</strong> method returns <strong>{{MF_E_NO_SAMPLE_DURATION}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Duration of the sample, in 100-nanosecond units.</p> </dd> + + + + + <p> </p><p>Retrieves the number of buffers in the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of buffers in the sample. A sample might contain zero buffers.</p> </dd> + + + + + <p> Gets a buffer from the sample, by index.</p><p> </p><strong>Note</strong>??In most cases, it is safer to use the <strong>{{IMFSample::ConvertToContiguousBuffer}}</strong> method. If the sample contains more than one buffer, the <strong>ConvertToContiguousBuffer</strong> method replaces them with a single buffer, copies the original data into that buffer, and returns the new buffer to the caller. The copy operation occurs at most once. On subsequent calls, no data is copied.? + <p>A sample might contain more than one buffer. Use the <strong>GetBufferByIndex</strong> method to enumerate the individual buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument, or the index is out of range. </p> </td></tr> </table><p>?</p> + + + + <p> Converts a sample with multiple buffers into a sample with a single buffer. </p> + <p>If the sample contains more than one buffer, this method copies the data from the original buffers into a new buffer, and replaces the original buffer list with the new buffer. The new buffer is returned in the <em>ppBuffer</em> parameter.</p><p> If the sample contains a single buffer, this method returns a reference to the original buffer. In typical use, most samples do not contain multiple buffers.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The sample does not contain any buffers.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaBuffer}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> Adds a buffer to the end of the list of buffers in the sample. </p> + <p>For uncompressed video data, each buffer should contain a single video frame, and samples should not contain multiple frames. In general, storing multiple buffers in a sample is discouraged.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the buffer's <strong>{{IMFMediaBuffer}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes a buffer at a specified index from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Index of the buffer. To find the number of buffers in the sample, call <strong>{{IMFSample::GetBufferCount}}</strong>. Buffers are indexed from zero.</p> </dd> + + + + + <p> </p><p>Removes all of the buffers from the sample.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves the total length of the valid data in all of the buffers in the sample. The length is calculated as the sum of the values retrieved by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Copies the sample data to a buffer. This method concatenates the valid data from all of the buffers of the sample, in order.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p>The buffer is not large enough to contain the data.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaBuffer}}</strong> interface of the destination buffer. The buffer must be large enough to hold the valid data in the sample. To get the size of the data in the sample, call <strong>{{IMFSample::GetTotalLength}}</strong>.</p> </dd> + + + + + <p> Represents a buffer that contains a two-dimensional surface, such as a video frame. </p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the media buffer.</p><p>To use a 2-D buffer, it is important to know the <em>stride</em>, which is the number of bytes needed to go from one row of pixels to the next. The stride may be larger than the image width, because the surface may contain padding bytes after each row of pixels. Stride can also be negative, if the pixels are oriented bottom-up in memory. For more information, see Image Stride.</p><p>Every video format defines a <em>contiguous</em> or <em>packed</em> representation. This representation is compatible with the standard layout of a DirectX surface in system memory, with no additional padding. For {{RGB}} video, the contiguous representation has a pitch equal to the image width in bytes, rounded up to the nearest <strong>{{DWORD}}</strong> boundary. For {{YUV}} video, the layout of the contiguous representation depends on the {{YUV}} format. For planar {{YUV}} formats, the Y plane might have a different pitch than the U and V planes.</p><p>If a media buffer supports the <strong>{{IMF2DBuffer}}</strong> interface, the underlying buffer is not guaranteed to have a contiguous representation, because there might be additional padding bytes after each row of pixels. When a buffer is non-contiguous, the <strong>Lock</strong> and <strong>Lock2D</strong> methods have different behaviors:</p><ul> <li> The <strong>Lock2D</strong> method returns a reference to the underlying buffer. The buffer might not be contiguous. </li> <li> The <strong>Lock</strong> method returns a buffer that is guaranteed to be contiguous. If the underlying buffer is not contiguous, the method copies the data into a new buffer, and the <strong>Unlock</strong> method copies it back into the original buffer. </li> </ul><p>Call the <strong>Lock2D</strong> method to access the 2-D buffer in its native format. The native format might not be contiguous. The buffer's <strong>{{IMFMediaBuffer::Lock}}</strong> method returns a contiguous representation of the buffer. However, this might require an internal copy from the native format. For 2-D buffers, therefore, you should use the <strong>Lock2D</strong> method and avoid the <strong>Lock</strong> method. Because the <strong>Lock</strong> method might cause up to two buffer copies, the <strong>Lock2D</strong> method is generally more efficient and should be used when possible. To find out if the underlying buffer is contiguous, call <strong>{{IMF2DBuffer::IsContiguousFormat}}</strong>.</p><p>For uncompressed images, the amount of valid data in the buffer is determined by the width, height, and pixel layout of the image. For this reason, if you call <strong>Lock2D</strong> to access the buffer, do not rely on the values returned by <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> or <strong>{{IMFMediaBuffer::GetMaxLength}}</strong>. Similarly, if you modify the data in the buffer, you do not have to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> to update the size. Generally, you should avoid mixing calls to <strong>{{IMF2DBuffer}}</strong> and <strong>{{IMFMediaBuffer}}</strong> methods on the same media buffer.</p> + + + + <p> </p><p>Gives the caller access to the memory in the buffer.</p> + <p>If <em>p</em> is a reference to the first byte in a row of pixels, <em>p</em> + (*<em>plPitch</em>) points to the first byte in the next row of pixels. A buffer might contain padding after each row of pixels, so the stride might be wider than the width of the image in bytes. Do not access the memory that is reserved for padding bytes, because it might not be read-accessible or write-accessible. For more information, see Image Stride.</p><p>The reference returned in <em>pbScanline0</em> remains valid as long as the caller holds the lock. When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2D</strong>. After you unlock the buffer, the reference returned in <em>pbScanline0</em> is no longer valid and should not be used. Generally, it is best to call <strong>Lock2D</strong> only when you need to access the buffer memory, and not earlier.</p><p>The values returned by the <strong>{{IMFMediaBuffer::GetCurrentLength}}</strong> and <strong>{{IMFMediaBuffer::GetMaxLength}}</strong> methods do not apply to the buffer that is returned by the <strong>Lock2D</strong> method. For the same reason, you do not need to call <strong>{{IMFMediaBuffer::SetCurrentLength}}</strong> after manipulating the data in the buffer returned by the <strong>Lock2D</strong> method.</p><p>The <strong>{{IMFMediaBuffer::Lock}}</strong> method fails while the <strong>Lock2D</strong> lock is held, and vice-versa. Applications should use only one of these methods at a time.</p><p>When the underlying buffer is a Direct3D surface, the method fails if the surface is not lockable.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{D3DERR_INVALIDCALL}}</strong></dt> </dl> </td><td> <p>Cannot lock the Direct3D surface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The buffer cannot be locked at this time.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory.</p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory.</p> </dd> + + + + + <p> </p><p>Unlocks a buffer that was previously locked. Call this method once for each call to <strong>{{IMF2DBuffer::Lock2D}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Retrieves a reference to the buffer memory and the surface stride.</p> + <p>Before calling this method, you must lock the buffer by calling <strong>{{IMF2DBuffer::Lock2D}}</strong>. The reference returned in <em>plPitch</em> is valid only while the buffer remains locked.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_INVALID_FUNCTION}}</strong></dt> </dl> </td><td> <p>You must lock the buffer before calling this method.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image.</p> </dd> + + + <dd> <p>Receives the stride, in bytes. For more information, see Image Stride.</p> </dd> + + + + + <p> </p><p>Queries whether the buffer is contiguous in its native format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface. For non-contiguous buffers, the <strong>{{IMFMediaBuffer::Lock}}</strong> method must perform an internal copy.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the buffer is contiguous, and <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p> </p><p>Retrieves the number of bytes needed to store the contents of the buffer in contiguous format.</p> + <p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of bytes needed to store the contents of the buffer in contiguous format.</p> </dd> + + + + + <p> </p><p>Copies this buffer into the caller's buffer, converting the data to contiguous format.</p> + <p>If the original buffer is not contiguous, this method converts the contents into contiguous format during the copy. For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in <strong>{{IMF2DBuffer}}</strong> interface.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid size specified in <em>pbDestBuffer</em>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the destination buffer where the data will be copied. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the destination buffer, in bytes. To get the required size, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p> </p><p>Copies data to this buffer from a buffer that has a contiguous format.</p> + <p>This method copies the contents of the source buffer into the buffer that is managed by this <strong>{{IMF2DBuffer}}</strong> object. The source buffer must be in contiguous format. While copying, the method converts the contents into the destination buffer's native format, correcting for the buffer's pitch if necessary.</p><p>For a definition of contiguous as it applies to 2-D buffers, see the Remarks section in the <strong>{{IMF2DBuffer}}</strong> interface topic.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the source buffer. The caller allocates the buffer.</p> </dd> + + + <dd> <p>Size of the source buffer, in bytes. To get the maximum size of the buffer, call <strong>{{IMF2DBuffer::GetContiguousLength}}</strong>.</p> </dd> + + + + + <p>Represents a buffer that contains a two-dimensional surface, such as a video frame.</p> + <p>This interface extends the <strong>{{IMF2DBuffer}}</strong> interface and adds a safer version of the <strong>{{IMF2DBuffer::Lock2D}}</strong> method.</p> + + + + <p>Gives the caller access to the memory in the buffer.</p> + <p>When you are done accessing the memory, call <strong>{{IMF2DBuffer::Unlock2D}}</strong> to unlock the buffer. You must call <strong>Unlock2D</strong> once for each call to <strong>Lock2DSize</strong>.</p><p>This method is equivalent to the <strong>{{IMF2DBuffer::Lock2D}}</strong> method. However, <strong>Lock2DSize</strong> is preferred because it enables the caller to validate memory references, and because it supports read-only locks. A buffer is not guaranteed to support the <strong>{{IMF2DBuffer2}}</strong> interface. To access a buffer, you should try the following methods in the order listed:</p><ol> <li><strong>{{IMF2DBuffer2::Lock2DSize}}</strong></li> <li> <strong>{{IMF2DBuffer::Lock2D}}</strong> </li> <li> <strong>{{IMFMediaBuffer::Lock}}</strong> </li> </ol><p>The <em>ppbBufferStart</em> and <em>pcbBufferLength</em> parameters receive the bounds of the buffer memory. Use these values to guard against buffer overruns. Use the values of <em>ppbScanline0</em> and <em>plPitch</em> to access the image data. If the image is bottom-up in memory, <em>ppbScanline0</em> will point to the last scan line in memory and <em>plPitch</em> will be negative. For more information, see Image Stride.</p><p>The <em>lockFlags</em> parameter specifies whether the buffer is locked for read-only access, write-only access, or read/write access. </p><ul> <li>If the buffer is already locked for read-only access, it cannot be locked for write access.</li> <li>If the buffer is already locked for write-only access, it cannot be locked for read access.</li> <li>If the buffer is already locked for read/write acess, it can be locked for read or write acess.</li> </ul><p>When possible, use a read-only or write-only lock, and avoid locking the buffer for read/write access. If the buffer represents a DirectX Graphics Infrastructure ({{DXGI}}) surface, a read/write lock can cause an extra copy between {{CPU}} memory and {{GPU}} memory.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. The buffer might already be locked with an incompatible locking flag. See Remarks.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>There is insufficient memory to complete the operation. </p> </td></tr> </table><p>?</p> + + + <dd> <p>A member of the <strong>{{MF2DBuffer_LockFlags}}</strong> enumeration that specifies whether to lock the buffer for reading, writing, or both.</p> </dd> + + + <dd> <p>Receives a reference to the first byte of the top row of pixels in the image. The top row is defined as the top row when the image is presented to the viewer, and might not be the first row in memory. </p> </dd> + + + <dd> <p>Receives the surface stride, in bytes. The stride might be negative, indicating that the image is oriented from the bottom up in memory. </p> </dd> + + + <dd> <p>Receives a reference to the start of the accessible buffer in memory.</p> </dd> + + + <dd> <p>Receives the length of the buffer, in bytes.</p> </dd> + + + + + <p>Copies the buffer to another 2D buffer object.</p> + <p>The destination buffer must be at least as large as the source buffer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMF2DBuffer2}}</strong> interface of the destination buffer.</p> </dd> + + + + + <p>Represents a buffer that contains a Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface.</p> + <p>To create a {{DXGI}} media buffer, first create the {{DXGI}} surface. Then call <strong>{{MFCreateDXGISurfaceBuffer}}</strong>. </p> + + + + <p>Queries the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) surface for an interface.</p> + <p>You can use this method to get a reference to the <strong>{{ID3D11Texture2D}}</strong> interface of the surface. If the buffer is locked, the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the index of the subresource that is associated with this media buffer.</p> + <p>The subresource index is specified when you create the media buffer object. See <strong>{{MFCreateDXGISurfaceBuffer}}</strong>.</p><p>For more information about texture subresources, see <strong>{{ID3D11Device::CreateTexture2D}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the zero-based index of the subresource.</p> </dd> + + + + + <p>Gets an <strong>{{IUnknown}}</strong> reference that was previously stored in the media buffer object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong> {{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>The object does not support the specified interface.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>The specified key was not found.</p> </td></tr> </table><p>?</p> + + + + <p>Stores an arbitrary <strong>{{IUnknown}}</strong> reference in the media buffer object.</p> + <p>To retrieve the reference from the object, call <strong>{{IMFDXGIBuffer::GetUnknown}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{ERROR_OBJECT_ALREADY_EXISTS}}</strong></dt> </dl> </td><td> <p>An item already exists with this key.</p> </td></tr> </table><p>?</p> + + + + <p> Represents a description of a media format. </p> + <p> To create a new media type, call <strong>{{MFCreateMediaType}}</strong>. </p><p> All of the information in a media type is stored as attributes. To clone a media type, call <strong>{{IMFAttributes::CopyAllItems}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>Gets the major type of the format. </p> + <p> This method is equivalent to getting the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute from the media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The major type is not set. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the major type <strong>{{GUID}}</strong>. The major type describes the broad category of the format, such as audio or video. For a list of possible values, see Major Media Types. </p> </dd> + + + + + <p> Queries whether the media type is a temporally compressed format. Temporal compression uses information from previously decoded samples when decompressing the current sample.</p> + <p> This method returns <strong>{{FALSE}}</strong> in <em>pfCompressed</em> if the media type's <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{TRUE}}</strong>. If the <strong>{{MF_MT_ALL_SAMPLES_INDEPENDENT}}</strong> attribute is <strong>{{FALSE}}</strong> or not set, the method returns <strong>{{TRUE}}</strong>. </p><p> If the method returns <strong>{{TRUE}}</strong> in <em>pfCompressed</em>, it is a hint that the format has temporal compression applied to it. If the method returns <strong>{{FALSE}}</strong>, the format does not use temporal compression, although it might use intra-frame compression. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a Boolean value. The value is <strong>{{TRUE}}</strong> if the format uses temporal compression, or <strong>{{FALSE}}</strong> if the format does not use temporal compression.</p> </dd> + + + + + <p> Compares two media types and determines whether they are identical. If they are not identical, the method indicates how the two formats differ. </p> + <p> Both of the media types must have a major type, or the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p> If the method succeeds and all of the comparison flags are set in <em>pdwFlags</em>, the return value is <strong>{{S_OK}}</strong>. If the method succeeds but one or more comparison flags are not set, the method returns <strong>{{S_FALSE}}</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p> The types are not equal. Examine the <em>pdwFlags</em> parameter to determine how the types differ. </p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The types are equal. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> One or both media types are invalid. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaType}}</strong> interface of the media type to compare.</p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags, indicating the degree of similarity between the two media types. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_MAJOR_TYPES}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>The major types are the same. The major type is specified by the <strong>{{MF_MT_MAJOR_TYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_TYPES}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p>The subtypes are the same, or neither media type has a subtype. The subtype is specified by the <strong>{{MF_MT_SUBTYPE}}</strong> attribute.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_DATA}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p>The attributes in one of the media types are a subset of the attributes in the other, and the values of these attributes match, excluding the value of the <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes.</p> <p>Specifically, the method takes the media type with the smaller number of attributes and checks whether each attribute from that type is present in the other media type and has the same value (not including <strong>{{MF_MT_USER_DATA}}</strong>, {{MF_MT_FRAME_RATE_RANGE_MIN}}, and {{MF_MT_FRAME_RATE_RANGE_MAX}}). </p> <p>To perform other comparisons, use the <strong>{{IMFAttributes::Compare}}</strong> method. For example, the <strong>Compare</strong> method can test for identical attributes, or test the intersection of the two attribute sets. For more information, see <strong>{{MF_ATTRIBUTES_MATCH_TYPE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p>The user data is identical, or neither media type contains user data. User data is specified by the <strong>{{MF_MT_USER_DATA}}</strong> attribute.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p> </p><p>Retrieves an alternative representation of the media type. Currently only the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure is supported.</p> + <p> If you request a specific format structure in the <em>guidRepresentation</em> parameter, such as <strong>{{VIDEOINFOHEADER}}</strong>, you might lose some of the format information. </p><p> You can also use the <strong>{{MFInitAMMediaTypeFromMFMediaType}}</strong> function to convert a Media Foundation media type into a DirectShow media type. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p> The details of the media type do not match the requested representation. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The media type is not valid. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> The media type does not support the requested representation. </p> </td></tr> </table><p>?</p> + + + <dd> <p> {{GUID}} that specifies the representation to retrieve. The following values are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{AM_MEDIA_TYPE_REPRESENTATION}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The method selects the most appropriate format structure (<strong>pbFormat</strong>). </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MFVideoFormat}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with an <strong>{{MFVIDEOFORMAT}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER}}</strong> format structure. </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> Convert the media type to a DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure with a <strong>{{VIDEOINFOHEADER2}}</strong> format structure. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives a reference to a structure that contains the representation. The method allocates the memory for the structure. The caller must release the memory by calling <strong>{{IMFMediaType::FreeRepresentation}}</strong>. </p> </dd> + + + + + <p>[<strong>{{IMFAudioMediaType}}</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Represents a description of an audio format.</p> + <p><strong>Windows Server?2008 and Windows?Vista:??</strong>If the major type of a media type is <strong>{{MFMediaType_Audio}}</strong>, you can query the media type object for the <strong>{{IMFAudioMediaType}}</strong> interface.</p><p> To convert an audio media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p>[<strong>GetAudioFormat</strong> is no longer available for use as of Windows?7. Instead, use the media type attributes to get the properties of the audio format.]</p><p> Returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure that describes the audio format.</p> + <p>If you need to convert the media type into a <strong>{{WAVEFORMATEX}}</strong> structure, call <strong>{{MFCreateWaveFormatExFromMFMediaType}}</strong>.</p><p> There are no guarantees about how long the returned reference is valid.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> This method returns a reference to a <strong>{{WAVEFORMATEX}}</strong> structure.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>Represents a description of a video format.</p> + <p>If the major type of a media type is {{MFMediaType_Video}}, you can query the media type object for the <strong>{{IMFVideoMediaType}}</strong> interface.</p><p>Applications should avoid using this interface except when a method or function requires an <strong>{{IMFVideoMediaType}}</strong> reference as a parameter. You can get all of the format information from a video media type through the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaType}}</strong> inherits.</p> + + + + <p>[This {{API}} is not supported and may be altered or unavailable in the future. Instead, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.]</p><p> Retrieves an alternative representation of the media type.</p> + <p>This method is equivalent to <strong>{{IMFMediaType::GetRepresentation}}</strong> but includes the <em>lStride</em> parameter.</p><p>Instead of calling this method, applications should set the <strong>{{MF_MT_DEFAULT_STRIDE}}</strong> attribute on the media type to specify the surface stride and then call <strong>{{IMFMediaType::GetRepresentation}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> Provides information about the result of an asynchronous operation. </p> + <p>Use this interface to complete an asynchronous operation. You get a reference to this interface when your callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. To complete the operation, pass the <strong>{{IMFAsyncResult}}</strong> reference to the <strong>End...</strong> method that corresponds to the <strong>Begin...</strong> method that starts the operation. For example, if the asynchronous method is named <strong>BeginRead</strong>, call the <strong>EndRead</strong> method. For more information, see Calling Asynchronous Methods.</p><p>If you are implementing an asynchronous method, call <strong>{{MFCreateAsyncResult}}</strong> to create an instance of this object. For more information, see Writing an Asynchronous Method.</p><p>Any custom implementation of this interface must inherit the <strong>{{MFASYNCRESULT}}</strong> structure.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method.</p> + <p>The caller of the asynchronous method specifies the state object, and can use it for any caller-defined purpose. The state object can be <strong>{{NULL}}</strong>. If the state object is <strong>{{NULL}}</strong>, <strong>GetState</strong> returns <strong>{{E_POINTER}}</strong>.</p><p>If you are implementing an asynchronous method, set the state object on the through the <em>punkState</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no state object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the state object's <strong>{{IUnknown}}</strong> interface. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the status of the asynchronous operation.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The operation completed successfully.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Sets the status of the asynchronous operation.</p> + <p>If you implement an asynchronous method, call <strong>SetStatus</strong> to set the status code for the operation.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The status of the asynchronous operation.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p> </p><p>Returns the state object specified by the caller in the asynchronous <strong>Begin</strong> method, without incrementing the object's reference count.</p> + <p>This method cannot be called remotely.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>Returns a reference to the state object's <strong>{{IUnknown}}</strong> interface, or <strong>{{NULL}}</strong> if no object was set. This reference does not have an outstanding reference count. If you store this reference, you must call <strong>AddRef</strong> on the reference.</p> + + + + <p>Callback interface to notify the application when an asynchronous method completes. </p> + <p> For more information about asynchronous methods in Microsoft Media Foundation, see Asynchronous Callback Methods. </p><p>This interface is also used to perform a work item in a Media Foundation work-queue. For more information, see Work Queues. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + <p> </p><p>Called when an asynchronous operation is completed.</p> + <p>Within your implementation of <strong>Invoke</strong>, call the corresponding <strong>End...</strong> method.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass this reference to the asynchronous <strong>End...</strong> method to complete the asynchronous call.</p> </dd> + + + + + <p>Provides logging information about the parent object the async callback is associated with.</p> + <p><strong>{{IMFAsyncCallbackLogging}}</strong> is primarily used for async callbacks to return an {{ID}} of the parent object that they are associated with.</p> + + + + <p>Gets the reference to the parent object the async callback is associated with. </p> + <p>void reference to the object.</p> + + + + <p>Gets the tag of the parent object the async callback is associated object.</p> + <p>The tag of the object.</p> + + + + <p>Represents an event generated by a Media Foundation object. Use this interface to get information about the event.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> or <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> on the event generator.</p> + <p>If you are implementing an object that generates events, call the <strong>{{MFCreateMediaEvent}}</strong> function to create a new event object.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the event type. The event type indicates what happened to trigger the event. It also defines the meaning of the event value.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event type. For a list of event types, see Media Foundation Events.</p> </dd> + + + + + <p> </p><p>Retrieves the extended type of the event.</p> + <p>To define a custom event, create a new extended-type {{GUID}} and send an {{MEExtendedType}} event with that {{GUID}}.</p><p>Some standard Media Foundation events also use the extended type to differentiate between types of event data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a <strong>{{GUID}}</strong> that identifies the extended type.</p> </dd> + + + + + <p> </p><p>Retrieves an <strong>{{HRESULT}}</strong> that specifies the event status.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the event status. If the operation that generated the event was successful, the value is a success code. A failure code means that an error condition triggered the event.</p> </dd> + + + + + <p> </p><p>Retrieves the value associated with the event, if any. The value is retrieved as a <strong>{{PROPVARIANT}}</strong> structure. The actual data type and the meaning of the value depend on the event.</p> + <p>Before calling this method, call <strong>PropVariantInit</strong> to initialize the <strong>{{PROPVARIANT}}</strong> structure. After the method returns, call <strong>PropVariantClear</strong> to free the memory that was allocated for the <strong>{{PROPVARIANT}}</strong> data.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> structure. The method fills this structure with the data.</p> </dd> + + + + + <p> Retrieves events from any Media Foundation object that generates events. </p> + <p>An object that supports this interface maintains a queue of events. The client of the object can retrieve the events either synchronously or asynchronously. The synchronous method is <strong>GetEvent</strong>. The asynchronous methods are <strong>BeginGetEvent</strong> and <strong>EndGetEvent</strong>.</p> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p> + <p>This method executes synchronously.</p><p>If the queue already contains an event, the method returns {{S_OK}} immediately. If the queue does not contain an event, the behavior depends on the value of <em>dwFlags</em>:</p><ul> <li> <p>If <em>dwFlags</em> is 0, the method blocks indefinitely until a new event is queued, or until the event generator is shut down.</p> </li> <li> <p>If <em>dwFlags</em> is {{MF_EVENT_FLAG_NO_WAIT}}, the method fails immediately with the return code {{MF_E_NO_EVENTS_AVAILABLE}}.</p> </li> </ul><p>This method returns {{MF_E_MULTIPLE_SUBSCRIBERS}} if you previously called <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong> and have not yet called <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>{{NULL}} reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_EVENTS_AVAILABLE}}</strong></dt> </dl> </td><td> <p>There are no events in the queue.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies one of the following values.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>0</strong></dt> </dl> </td><td> <p>The method blocks until the event generator queues an event.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_EVENT_FLAG_NO_WAIT}}</strong></dt> </dl> </td><td> <p>The method returns immediately.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p> + <p>When a new event is available, the event generator calls the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The <strong>Invoke</strong> method should call <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong> to get a reference to the <strong>{{IMFMediaEvent}}</strong> interface, and use that interface to examine the event.</p><p>Do not call <strong>BeginGetEvent</strong> a second time before calling <strong>EndGetEvent</strong>. While the first call is still pending, additional calls to the same object will fail. Also, the <strong>{{IMFMediaEventGenerator::GetEvent}}</strong> method fails if an asynchronous request is still pending.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and a different state object.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_MULTIPLE_SUBSCRIBERS}}</strong></dt> </dl> </td><td> <p>There is a pending request with a different callback reference.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_MULTIPLE_BEGIN}}</strong></dt> </dl> </td><td> <p>There is a pending request with the same callback reference and state object.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The client must implement this interface.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked.</p> </dd> + + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p> + <p>Call this method from inside your application's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. For example code, see <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>Invoke</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEvent}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>Puts a new event in the object's queue.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The object was shut down.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{PROPVARIANT}}</strong> that contains the event value. This parameter can be <strong>{{NULL}}</strong>. This value is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Used by the Microsoft Media Foundation proxy/stub {{DLL}} to marshal certain asynchronous method calls across process boundaries.</p><p>Applications do not use or implement this interface.</p> + + + + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> Retrieves the characteristics of the byte stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags. The following flags are defined.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_READABLE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p> The byte stream can be read. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_WRITABLE}}</strong></dt> <dt>0x00000002</dt> </dl> </td><td> <p> The byte stream can be written to. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_SEEKABLE}}</strong></dt> <dt>0x00000004</dt> </dl> </td><td> <p> The byte stream can be seeked. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_REMOTE}}</strong></dt> <dt>0x00000008</dt> </dl> </td><td> <p> The byte stream is from a remote source, such as a network. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_DIRECTORY}}</strong></dt> <dt>0x00000080</dt> </dl> </td><td> <p> The byte stream represents a file directory. </p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p> Seeking within this stream might be slow. For example, the byte stream might download from a network.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>The byte stream is currently downloading data to a local cache. Read operations on the byte stream might take longer until the data is completely downloaded.</p> <p>This flag is cleared after all of the data has been downloaded.</p> <p>If the <strong>{{MFBYTESTREAM_HAS_SLOW_SEEK}}</strong> flag is also set, it means the byte stream must download the entire file sequentially. Otherwise, the byte stream can respond to seek requests by restarting the download from a new point in the stream.</p> </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SHARE_WRITE}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>Another thread or process can open this byte stream for writing. If this flag is present, the length of the +byte stream could change while it is being read. </p> <p>This flag can affect the behavior of byte-stream handlers. For more information, see {{MF_BYTESTREAMHANDLER_ACCEPTS_SHARE_WRITE}}.</p> <strong>Note</strong>??Requires Windows?7 or later. ? </td></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_DOES_NOT_USE_NETWORK}}</strong></dt> <dt>0x00000800</dt> </dl> </td><td> <p>The byte stream is not currently +using the network to receive the content. Networking hardware +may enter a power saving state when this bit is set.</p> <strong>Note</strong>??Requires Windows?8 or later. ? </td></tr> </table> <p>?</p> </dd> + + + + + <p> Retrieves the length of the stream. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the length of the stream, in bytes. If the length is unknown, this value is -1. </p> </dd> + + + + + <p> </p><p>Sets the length of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Length of the stream in bytes. </p> </dd> + + + + + <p> Retrieves the current read or write position in the stream. </p> + <p> The methods that update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>SetCurrentPosition</strong>, and <strong>Seek</strong>. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the current position, in bytes. </p> </dd> + + + + + <p> </p><p>Sets the current read or write position.</p> + <p> If the new position is larger than the length of the stream, the method returns {{E_INVALIDARG}}. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by setting the current position to the value passed in to the <em>qwPosition</em> parameter. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>Seek</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> </table><p>?</p> + + + <dd> <p>New position in the stream, as a byte offset from the start of the stream.</p> </dd> + + + + + <p> </p><p>Queries whether the current position has reached the end of the stream.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the value <strong>{{TRUE}}</strong> if the end of the stream has been reached, or <strong>{{FALSE}}</strong> otherwise. </p> </dd> + + + + + <p> Reads data from the stream. </p> + <p> This method reads at most <em>cb</em> bytes from the current position in the stream and copies them into the buffer provided by the caller. The number of bytes that were read is returned in the <em>pcbRead</em> parameter. The method does not return an error code on reaching the end of the file, so the application should check the value in <em>pcbRead</em> after the method returns. </p><p> This method is synchronous. It blocks until the read operation completes. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are copied into the buffer. This parameter cannot be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> Begins an asynchronous read operation from the stream. </p> + <p> When all of the data has been read into the buffer, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndRead}}</strong> to complete the asynchronous request. </p><p> Do not read from, write to, free, or reallocate the buffer while an asynchronous read is pending. </p><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be read, which is specified by the value returned in the <em>pcbRead</em> parameter, to the current position. Other methods that can update the current position are <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that receives the data. The caller must allocate the buffer. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> Completes an asynchronous read operation. </p> + <p> Call this method after the <strong>{{IMFByteStream::BeginRead}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + <dd> <p> Receives the number of bytes that were read. </p> </dd> + + + + + <p> </p><p>Writes data to the stream.</p> + <p> This method writes the contents of the <em>pb</em> buffer to the stream, starting at the current stream position. The number of bytes that were written is returned in the <em>pcbWritten</em> parameter. </p><p> This method is synchronous. It blocks until the write operation completes. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that were written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position offset. </p><p> Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>BeginWrite</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer that contains the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Receives the number of bytes that are written. </p> </dd> + + + + + <p> Begins an asynchronous write operation to the stream. </p> + <p> When all of the data has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the application should call <strong>{{IMFByteStream::EndWrite}}</strong> to complete the asynchronous request. </p><p> Do not reallocate, free, or write to the buffer while an asynchronous write is still pending. </p><p><strong>Implementation notes:</strong> This method should update the current position in the stream by adding the number of bytes that will be written to the stream, which is specified by the value returned in the <em>pcbWritten</em>, to the current position. Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>Seek</strong>, and <strong>SetCurrentPosition</strong>. +</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Pointer to a buffer containing the data to write. </p> </dd> + + + <dd> <p> Size of the buffer in bytes. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p> </p><p>Completes an asynchronous write operation.</p> + <p> Call this method when the <strong>{{IMFByteStream::BeginWrite}}</strong> method completes asynchronously. </p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Pointer to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method.</p> </dd> + + + <dd> <p> Receives the number of bytes that were written. </p> </dd> + + + + + <p> </p><p>Moves the current position in the stream by a specified offset.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul><p><strong> Implementation notes:</strong> This method should update the current position in the stream by adding the <em>qwSeekOffset</em> to the seek <em>SeekOrigin</em> position. This should be the same value passed back in the <em>pqwCurrentPosition</em> parameter. +Other methods that can update the current position are <strong>Read</strong>, <strong>BeginRead</strong>, <strong>Write</strong>, <strong>BeginWrite</strong>, and <strong>SetCurrentPosition</strong>. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies the origin of the seek as a member of the <strong>{{MFBYTESTREAM_SEEK_ORIGIN}}</strong> enumeration. The offset is calculated relative to this position. </p> </dd> + + + <dd> <p> Specifies the new position, as a byte offset from the seek origin. </p> </dd> + + + <dd> <p> Specifies zero or more flags. The following flags are defined. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO}}</strong></dt> </dl> </td><td> <p> All pending I/O requests are canceled after the seek request completes successfully. </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the new position after the seek. </p> </dd> + + + + + <p> Clears any internal buffers used by the stream. If you are writing to the stream, the buffered data is written to the underlying file or device. </p> + <p> If the byte stream is read-only, this method has no effect.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Closes the stream and releases any resources associated with the stream, such as sockets or file handles. This method also cancels any pending asynchronous I/O requests. </p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a proxy to a byte stream. The proxy enables a media source to read from a byte stream in another process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream to proxy.</p> </dd> + + + <dd> <p>Reserved. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The interface identifer ({{IID}}) of the interface being requested.</p> </dd> + + + <dd> <p>Receives a reference to the interface. The caller must release the interface.</p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Begins an asynchronous request to write a media sample to the stream.</p> + <p>When the sample has been written to the stream, the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method is called. At that point, the caller should call <strong>{{IMFSampleOutputStream::EndWriteSample}}</strong> to complete the asynchronous request. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface of the sample.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface of a callback object. The caller must implement this interface.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of a state object, defined by the caller. This parameter can be <strong>{{NULL}}</strong>. You can use this object to hold state information. The object is returned to the caller when the callback is invoked. </p> </dd> + + + + + <p>Completes an asynchronous request to write a media sample to the stream.</p> + <p>Call this method when the <strong>{{IMFSampleOutputStream::BeginWriteSample}}</strong> method completes asynchronously. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface. Pass in the same reference that your callback object received in the <strong>{{IMFAsyncCallback::Invoke}}</strong> method. </p> </dd> + + + + + + + + Defines size, enumerators, and synchronization methods for all nongeneric collections. <p></p>Namespace: System.CollectionsAssembly: mscorlib (in mscorlib.dll)&lt;ComVisibleAttribute(True)&gt; _ +Public Interface {{ICollection}} Inherits {{IEnumerableDim}} instance As {{ICollection}} +[ComVisibleAttribute(true)] +public interface {{ICollection}} : {{IEnumerable}}[ComVisibleAttribute(true)] +public interface class {{ICollection}} : {{IEnumerable}}/** @attribute ComVisibleAttribute(true) */ +public interface {{ICollection}} extends {{IEnumerableComVisibleAttribute}}(true) +public interface {{ICollection}} extends {{IEnumerableNot}} applicable. <p>The {{ICollection}} interface is the base interface for classes in the System.Collections namespace.</p> <p>The {{ICollection}} interface extends {{IEnumerable}}; {{IDictionary}} and {{IList}} are more specialized interfaces that extend {{ICollection}}. An {{IDictionary}} implementation is a collection of key/value pairs, like the Hashtable class. An {{IList}} implementation is a collection of values and its members can be accessed by index, like the ArrayList class.</p> <p>Some collections that limit access to their elements, such as the Queue class and the Stack class, directly implement the {{ICollection}} interface.</p> <p>If neither the {{IDictionary}} interface nor the {{IList}} interface meet the requirements of the required collection, derive the new collection class from the {{ICollection}} interface instead for more flexibility.</p> <p>For the generic version of this interface, see System.Collections.Generic.{{ICollection}}.</p> <p>Windows 98, Windows Server 2000 {{SP4}}, Windows {{CE}}, Windows Millennium Edition, Windows Mobile for Pocket {{PC}}, Windows Mobile for Smartphone, Windows Server 2003, Windows {{XP}} Media Center Edition, Windows {{XP}} Professional x64 Edition, Windows {{XP}} {{SP2}}, Windows {{XP}} Starter Edition</p><p></p><p></p> The Microsoft .{{NET}} Framework 3.0 is supported on Windows Vista, Microsoft Windows {{XP}} {{SP2}}, and Windows Server 2003 {{SP1}}. .{{NET}} FrameworkSupported in: 3.0, 2.0, 1.1, 1.0.{{NET}} Compact FrameworkSupported in: 2.0, 1.0XNA FrameworkSupported in: 1.0ReferenceICollection MembersSystem.Collections NamespaceIDictionaryIListSystem.Collections.Generic.{{ICollection}} + + + + <p> </p><p>Retrieves the number of objects in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the number of objects in the collection.</p> </dd> + + + + + <p> </p><p>Retrieves an object in the collection.</p> + <p> This method does not remove the object from the collection. To remove an object, call <strong>{{IMFCollection::RemoveElement}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Zero-based index of the object to retrieve. Objects are indexed in the order in which they were added to the collection. </p> </dd> + + + <dd> <p> Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. The caller must release the interface. The retrieved reference value might be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p> </p><p>Adds an object to the collection.</p> + <p>If <em>pUnkElement</em> is <strong>{{NULL}}</strong>, a <strong>{{NULL}}</strong> reference is added to the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the object's <strong>{{IUnknown}}</strong> interface.</p> </dd> + + + + + <p> </p><p>Removes an object from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of the object to remove. Objects are indexed in the order in which they were added to the collection.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the object. The caller must release the interface. This parameter cannot be <strong>{{NULL}}</strong>, but the retrieved reference value might be <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> </p><p>Adds an object at the specified index in the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index where the object will be added to the collection.</p> </dd> + + + <dd> <p>The object to insert.</p> </dd> + + + + + <p> </p><p>Removes all items from the collection.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Provides an event queue for applications that need to implement the <strong>{{IMFMediaEventGenerator}}</strong> interface.</p><p>This interface is exposed by a helper object that implements an event queue. If you are writing a component that implements the <strong>{{IMFMediaEventGenerator}}</strong> interface, you can use this object in your implementation. The event queue object is thread safe and provides methods to queue events and to pull them from the queue either synchronously or asynchronously. To create the event queue object, call <strong>{{MFCreateEventQueue}}</strong>.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + <p> </p><p>Retrieves the next event in the queue. This method is synchronous.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::GetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Begins an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::BeginGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Completes an asynchronous request for the next event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::EndGetEvent}}</strong>. Pass the parameters from that method directly to this method.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Puts an event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains attributes. To create the event object, call <strong>{{MFCreateMediaEvent}}</strong>. Add attributes to the event by using methods from the <strong>{{IMFAttributes}}</strong> interface. (The <strong>{{IMFMediaEvent}}</strong> interface inherits <strong>{{IMFAttributes}}</strong>.)</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of the event to be put in the queue.</p> </dd> + + + + + <p> </p><p>Creates an event, sets a <strong>{{PROPVARIANT}}</strong> as the event data, and puts the event in the queue.</p><p>Call this method inside your implementation of <strong>{{IMFMediaEventGenerator::QueueEvent}}</strong>. Pass the parameters from that method directly to this method.</p><p>You can also call this method when your component needs to raise an event that does not contain attributes. If the event data is an <strong>{{IUnknown}}</strong> reference, you can use <strong>{{IMFMediaEventQueue::QueueEventParamUnk}}</strong>. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p> + <p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Creates an event, sets an <strong>{{IUnknown}}</strong> reference as the event data, and puts the event in the queue.</p> + <p>Call this method when your component needs to raise an event that contains an <strong>{{IUnknown}}</strong> reference value and no attributes. If the event contains attributes, use <strong>{{IMFMediaEventQueue::QueueEvent}}</strong> instead.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_SHUTDOWN}}</strong></dt> </dl> </td><td> <p>The <strong>Shutdown</strong> method was called.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies the event type of the event to be added to the queue. The event type is returned by the event's <strong>{{IMFMediaEvent::GetType}}</strong> method. For a list of event types, see Media Foundation Events.</p> </dd> + + + <dd> <p>The extended type of the event. If the event does not have an extended type, use the value {{GUID_NULL}}. The extended type is returned by the event's <strong>{{IMFMediaEvent::GetExtendedType}}</strong> method.</p> </dd> + + + <dd> <p>A success or failure code indicating the status of the event. This value is returned by the event's <strong>{{IMFMediaEvent::GetStatus}}</strong> method.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IUnknown}}</strong> interface. The method sets this reference as the event value. The reference is returned by the event's <strong>{{IMFMediaEvent::GetValue}}</strong> method.</p> </dd> + + + + + <p> </p><p>Shuts down the event queue.</p> + <p>Call this method when your component shuts down. After this method is called, all <strong>{{IMFMediaEventQueue}}</strong> methods return <strong>{{MF_E_SHUTDOWN}}</strong>.</p><p>This method removes all of the events from the queue.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p>Enables the application to defer the creation of an object. This interface is exposed by activation objects.</p> + <p>Typically, the application calls some function that returns an <strong>{{IMFActivate}}</strong> reference and then passes that reference to another component. The other component calls <strong>ActivateObject</strong> at a later time to create the object. In the protected media path ({{PMP}}), the <strong>{{IMFActivate}}</strong> reference might be marshaled to the protected process, so that the object can be created in that process.</p> + + + + <p> Creates the object associated with this activation object. </p> + <p>Some Microsoft Media Foundation objects must be shut down before being released. If so, the caller is responsible for shutting down the object that is returned in <em>ppv</em>. To shut down the object, do one of the following:</p><ul> <li>Call <strong>{{IMFActivate::ShutdownObject}}</strong> on the activation object, or</li> <li>Call the object-specific shutdown method. This method will depend on the type of object. Possibilities include:<ul> <li>Media sources: Call <strong>{{IMFMediaSource::Shutdown}}</strong>.</li> <li>Media sinks: Call <strong>{{IMFMediaSink::Shutdown}}</strong>.</li> <li>Any object that supports the <strong>{{IMFShutdown}}</strong> interface: Call <strong>{{IMFShutdown::Shutdown}}</strong>.</li> </ul> </li> </ul><p>The <strong>{{IMFActivate::ShutdownObject}}</strong> method is generic to all object types. If the object does not require a shutdown method, <strong>ShutdownObject</strong> succeeds and has no effect. If you do not know the specific shutdown method for the object (or do not know the object type), call <strong>{{IMFActivate::ShutdownObject}}</strong>.</p><p> After the first call to <strong>ActivateObject</strong>, subsequent calls return a reference to the same instance, until the client calls either <strong>ShutdownObject</strong> or <strong>{{IMFActivate::DetachObject}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Interface identifier ({{IID}}) of the requested interface. </p> </dd> + + + <dd> <p> Receives a reference to the requested interface. The caller must release the interface. </p> </dd> + + + + + <p> </p><p>Shuts down the created object.</p> + <p>If you create an object by calling <strong>{{IMFActivate::ActivateObject}}</strong>, call <strong>ShutdownObject</strong> when you are done using the object.</p><p>The component that calls <strong>ActivateObject</strong>?not the component that creates the activation object?is responsible for calling <strong>ShutdownObject</strong>. For example, in a typical playback application, the application creates activation objects for the media sinks, but the Media Session calls <strong>ActivateObject</strong>. Therefore the Media Session, not the application, calls <strong>ShutdownObject</strong>.</p><p>After <strong>ShutdownObject</strong> is called, the activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + + <p> </p><p>Detaches the created object from the activation object.</p> + <p>The activation object releases all of its internal references to the created object. If you call <strong>ActivateObject</strong> again, the activation object will create a new instance of the other object.</p><p>The <strong>DetachObject</strong> method does not shut down the created object. If the <strong>DetachObject</strong> method succeeds, the client must shut down the created object. This rule applies only to objects that have a shutdown method or that support the <strong>{{IMFShutdown}}</strong> interface. See the remarks for <strong>{{IMFActivate::ActivateObject}}</strong>.</p><p>Implementation of this method is optional. If the activation object does not support this method, the method returns {{E_NOTIMPL}}.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>Not implemented.</p> </td></tr> </table><p>?</p> + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong>.</p> + <p>Media Foundation provides a set of built-in media sources and decoders. Applications can enumerate them as follows: </p><ul> <li>Media sources are enumerated through the Source Resolver.</li> <li>Transforms, such as decoders, are enumerated through the <strong>{{MFTEnum}}</strong> and <strong>{{MFTEnumEx}}</strong> functions.</li> </ul><p>Applications might also enumerate these objects indirectly. For example, if an application uses the topology loader to resolve a partial topology, the topology loader calls <strong>{{MFTEnumEx}}</strong> to find the required decoders.</p><p>Third parties can implement their own custom media sources and decoders, and register them for enumeration so that other applications can use them.</p><p>To control the enumeration order, Media Foundation maintains two process-wide lists of {{CLSIDs:}} a preferred list and a blocked list. An object whose {{CLSID}} appears in the preferred list appears first in the enumeration order. An object whose {{CLSID}} appears on the blocked list is not enumerated.</p><p>The lists are initially populated from the registry. Applications can use the <strong>{{IMFPluginControl}}</strong> interface to modify the lists for the current process.</p><p>The preferred list contains a set of key/value pairs, where the keys are strings and the values are {{CLSIDs}}. These key/value pairs are defined as follows:</p><ul> <li>For media sources, the key name is a file name extension, protocol scheme, or {{MIME}} type. The value is the {{CLSID}} of a scheme handler or byte-stream handler for that media source.</li> <li>For decoders, the key name is a media subtype {{GUID}} in canonical string form. (For more information about media subtypes, see Media Types.) The value is the {{CLSID}} of the Media Foundation transform ({{MFT}}) that implements the decoder. </li> </ul><p>The following examples show the various types of key:</p><ul> <li>File extension: ".wmv"</li> <li>Scheme: "http:"</li> <li>{{MIME}} type: "video/mp4"</li> <li>Media subtype: "{47504A4D-0000-0010-8000-00AA00389B71}"</li> </ul><p>To search the preferred list by key name, call the <strong>{{IMFPluginControl::GetPreferredClsid}}</strong> method. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetPreferredClsidByIndex}}</strong> method in a loop.</p><p>The blocked list contains a list of {{CLSIDs}}. To enumerate the entire list, call the <strong>{{IMFPluginControl::GetDisabledByIndex}}</strong> method in a loop. To check whether a specific {{CLSID}} appears on the list, call the <strong>{{IMFPluginControl::IsDisabled}}</strong> method.</p> + + + + <p>Searches the preferred list for a class identifier ({{CLSID}}) that matches a specified key name.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>No {{CLSID}} matching this key was found.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name to match. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives a {{CLSID}} from the preferred list.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the preferred list, specified by index value.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the key name associated with the {{CLSID}}. The caller must free the memory for the returned string by calling the <strong>CoTaskMemFree</strong> function. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the preferred list or removes a {{CLSID}} from the list.</p> + <p>The preferred list is global to the caller's process. Calling this method does not affect the list in other process.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The key name for the {{CLSID}}. For more information about the format of key names, see the Remarks section of <strong>{{IMFPluginControl}}</strong>.</p> </dd> + + + <dd> <p>The {{CLSID}} to add to the list. If this parameter is <strong>{{NULL}}</strong>, the key/value entry specified by the <em>selector</em> parameter is removed from the list. </p> </dd> + + + + + <p>Queries whether a class identifier ({{CLSID}}) appears in the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} appears in the blocked list.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NOT_FOUND}})</strong></strong></dt> </dl> </td><td> <p>The specified {{CLSID}} is not in the blocked list.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object for the query.</p> </dd> + + + <dd> <p>The {{CLSID}} to search for.</p> </dd> + + + + + <p>Gets a class identifier ({{CLSID}}) from the blocked list.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{HRESULT_FROM_WIN32}}({{ERROR_NO_MORE_ITEMS}})</strong></strong></dt> </dl> </td><td> <p>The <em>index</em> parameter is out of range.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object to enumerate.</p> </dd> + + + <dd> <p>The zero-based index of the {{CLSID}} to retrieve.</p> </dd> + + + <dd> <p>Receives the {{CLSID}} at the specified index.</p> </dd> + + + + + <p>Adds a class identifier ({{CLSID}}) to the blocked list, or removes a {{CLSID}} from the list.</p> + <p> The blocked list is global to the caller's process. Calling this method does not affect the list in other processes. </p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_INVALIDARG}}</strong></strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Member of the <strong>{{MF_Plugin_Type}}</strong> enumeration, specifying the type of object.</p> </dd> + + + <dd> <p>The {{CLSID}} to add or remove.</p> </dd> + + + <dd> <p>Specifies whether to add or remove the {{CSLID}}. If the value is <strong>{{TRUE}}</strong>, the method adds the {{CLSID}} to the blocked list. Otherwise, the method removes it from the list.</p> </dd> + + + + + <p>Controls how media sources and transforms are enumerated in Microsoft Media Foundation.</p><p>This interface extends the <strong>{{IMFPluginControl}}</strong> interface.</p> + <p>To get a reference to this interface, call <strong>{{MFGetPluginControl}}</strong> and query the returned reference for <strong>{{IMFPluginControl2}}</strong>.</p> + + + + <p>Sets the policy for which media sources and transforms are enumerated.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A value from the <strong>{{MF_PLUGIN_CONTROL_POLICY}}</strong> enumeration that specifies the policy.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Queries the Microsoft Direct3D device for an interface.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>For more info see, Supporting Direct3D 11 Video Decoding in Media Foundation.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOINTERFACE}}</strong></dt> </dl> </td><td> <p>If a <strong>{{ID3D11VideoDevice}}</strong> is specified and the {{D3D}} device created is using the reference rasterizer or {{WARP}}. Or it is a hardware device and you are using the Microsoft Basic Display Adapter.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device supports the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong>. To get a reference to the Direct3D11 device, use <strong>{{IID_ID3D11Device}}</strong> as the <em>riid</em>.</li> <li> <strong>{{ID3D11VideoDevice}}</strong>. To get a reference to the Direct3D11 video device, use <strong>{{IID_ID3D11VideoDevice}}</strong> as the <em>riid</em>.</li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Gives the caller exclusive access to the Microsoft Direct3D device.</p> + <p>When you are done using the Direct3D device, call <strong>{{IMFDXGIDeviceManager::UnlockDevice}}</strong> to unlock the device.</p><p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p><p>If <em>fBlock</em> is <strong>{{TRUE}}</strong>, this method can potentially deadlock. For example, it will deadlock if a thread calls <strong>LockDevice</strong> and then waits on another thread that calls <strong>LockDevice</strong>. It will also deadlock if a thread calls <strong>LockDevice</strong> twice without calling <strong>UnlockDevice</strong> in between. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_VIDEO_DEVICE_LOCKED}}</strong></dt> </dl> </td><td> <p>The device is locked and <em>fBlock</em> is <strong>{{FALSE}}</strong>. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>The interface identifier ({{IID}}) of the requested interface. The Direct3D device will support the following interfaces:</p> <ul> <li> <strong>{{ID3D11Device}}</strong> </li> <li> <strong>{{ID3D11VideoContext}}</strong> </li> <li> <strong>{{ID3D11VideoDevice}}</strong> </li> </ul> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + <dd> <p>Specifies whether to wait for the device lock. If the device is already locked and this parameter is <strong>{{TRUE}}</strong>, the method blocks until the device is unlocked. Otherwise, if the device is locked and this parameter is <strong>{{FALSE}}</strong>, the method returns immediately with the error code <strong>{{DXVA2_E_VIDEO_DEVICE_LOCKED}}</strong>.</p> </dd> + + + + + <p>Gets a handle to the Microsoft Direct3D device. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_DEVICE_NOT_INITIALIZED}}</strong></dt> </dl> </td><td> <p>The {{DXGI}} Device Manager was not initialized. The owner of the device must call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives the device handle.</p> </dd> + + + + + <p>Enables two threads to share the same Microsoft Direct3D?11 device.</p> + <p>This interface is exposed by the Microsoft DirectX Graphics Infrastructure ({{DXGI}}) Device Manager. To create the {{DXGI}} Device Manager, call the <strong>{{MFCreateDXGIDeviceManager}}</strong> function.</p><p>When you create an <strong>{{IMFDXGIDeviceManager}}</strong> with <strong>{{MFCreateDXGIDeviceManager}}</strong>, a Direct3D?11 device is not associated with the device manager. To associate a Direct3D?11 device with the device manager, call <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong>, passing in the reference to the Direct3D?11 device. To create a Direct3D?11 device, call <strong>{{D3D11CreateDevice}}</strong>. The device should be created with the <strong>{{D3D11_CREATE_DEVICE_VIDEO_SUPPORT}}</strong> device creation flag which is defined in the <strong>{{D3D11_CREATE_DEVICE_FLAG}}</strong> enumeration.</p><p>For Microsoft Direct3D?9 devices, use the <strong>{{IDirect3DDeviceManager9}}</strong> interface.</p><p>Windows Store apps must use <strong>{{IMFDXGIDeviceManager}}</strong> and Direct3D 11 Video {{APIs}}. </p> + + + + <p>Tests whether a Microsoft Direct3D device handle is valid.</p> + <p>If the method returns <strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong>, call <strong>{{IMFDXGIDeviceManager::CloseDeviceHandle}}</strong> to close the handle and then call <strong>OpenDeviceHandle</strong> again to get a new handle. The <strong>{{IMFDXGIDeviceManager::ResetDevice}}</strong> method invalidates all open device handles.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_HANDLE}}</strong></dt> </dl> </td><td> <p>The specified handle is not a Direct3D device handle.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_DXGI_NEW_VIDEO_DEVICE}}</strong></dt> </dl> </td><td> <p>The device handle is invalid. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + + + <p>Unlocks the Microsoft Direct3D device.</p> + <p> Call this method to release the device after calling <strong>{{IMFDXGIDeviceManager::LockDevice}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the Direct3D device. To get the device handle, call <strong>{{IMFDXGIDeviceManager::OpenDeviceHandle}}</strong>.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + <p> Receives state-change notifications from the presentation clock. </p> + <p>To receive state-change notifications from the presentation clock, implement this interface and call <strong>{{IMFPresentationClock::AddClockStateSink}}</strong> on the presentation clock.</p><p>This interface must be implemented by:</p><ul> <li> <p>Presentation time sources. The presentation clock uses this interface to request change states from the time source.</p> </li> <li> <p>Media sinks. Media sinks use this interface to get notifications when the presentation clock changes.</p> </li> </ul><p>Other objects that need to be notified can implement this interface.</p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the <strong>{{IMFAttributes}}</strong> for the substream with the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> The stream specified substream index is invalid. Call <strong>GetStreamCount</strong> to get the number of substreams managed by the multiplexed media source.</p> </td></tr> </table><p>?</p> + + + + <p>Represents a byte stream from some data source, which might be a local file, a network file, or some other source. The <strong>{{IMFByteStream}}</strong> interface supports the typical stream operations, such as reading, writing, and seeking. </p> + <p> The following functions return <strong>{{IMFByteStream}}</strong> references for local files: </p><ul> <li> <strong>{{MFBeginCreateFile}}</strong> </li> <li> <strong>{{MFCreateFile}}</strong> </li> <li> <strong>{{MFCreateTempFile}}</strong> </li> </ul><p> A byte stream for a media souce can be opened with read access. A byte stream for an archive media sink should be opened with both read and write access. (Read access may be required, because the archive sink might need to read portions of the file as it writes.) </p><p>Some implementations of this interface also expose one or more of the following interfaces:</p><ul> <li> <strong>{{IMFAttributes}}</strong> </li> <li> <strong>{{IMFByteStreamBuffering}}</strong> </li> <li> <strong>{{IMFByteStreamCacheControl}}</strong> </li> <li> <strong>{{IMFGetService}}</strong> </li> <li> <strong>{{IMFMediaEventGenerator}}</strong> </li> </ul><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + + + + + + + + + + + + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + <p>Specifies the immediate value and destination address written using <strong>{{ID3D12CommandList2::WriteBufferImmediate}}</strong>.</p> + <p></p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Provides the ability to retrieve <strong>{{IMFSample}}</strong> objects for individual substreams within the output of a multiplexed media source.</p> + + + + + + + + + + <p> </p><p>Writes the contents of an attribute store to a stream.</p> + <p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function serializes <strong>{{IUnknown}}</strong> references in the attribute store, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::SaveReference}}</strong> to serialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoMarshalInterface</strong> to serialize a proxy for the object.</p> </li> </ul><p>If <em>dwOptions</em> does not include the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function skips <strong>{{IUnknown}}</strong> references in the attribute store.</p><p>To load the attributes from the stream, call <strong>{{MFDeserializeAttributesFromStream}}</strong>.</p><p>The main purpose of this function is to marshal attributes across process boundaries.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream where the attributes are saved.</p> </dd> + + + + + <p> </p><p>Loads attributes from a stream into an attribute store.</p> + <p>Use this function to deserialize an attribute store that was serialized with the <strong>{{MFSerializeAttributesToStream}}</strong> function.</p><p>If <em>dwOptions</em> contains the {{MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF}} flag, the function deserializes <strong>{{IUnknown}}</strong> references from the stream, as follows:</p><ul> <li> <p>If the <strong>{{IStream}}</strong> reference exposes the <strong>{{IMFObjectReferenceStream}}</strong> interface (through <strong>QueryInterface</strong>), the function calls <strong>{{IMFObjectReferenceStream::LoadReference}}</strong> to deserialize each reference.</p> </li> <li> <p>Otherwise, the function calls <strong>CoUnmarshalInterface</strong> to deserialize a proxy for the object.</p> </li> </ul><p>This function deletes any attributes that were previously stored in <em>pAttr</em>.</p> + <p>The function returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Pointer to the <strong>{{IMFAttributes}}</strong> interface of the attribute store.</p> </dd> + + + <dd> <p>Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_ATTRIBUTE_SERIALIZE_OPTIONS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Pointer to the <strong>{{IStream}}</strong> interface of the stream from which to read the attributes.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>Defines flags for the <strong>{{IMFTransform::ProcessInput}}</strong> method. Currently no flags are defined.</p> + + + + <p> Defines flags for the <strong>{{IMFTransform::ProcessOutput}}</strong> method. </p> + <p>The values in this enumeration are not bit flags, so they should not be combined with a bitwise <strong>{{OR}}</strong>. Also, the caller should test for these flags with the equality operator, not a bitwise <strong>{{AND}}</strong>:</p><code>// Correct. +if (Buffer.dwStatus == {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) +{ ... +} // Incorrect. +if ((Buffer.dwStatus &amp; {{MFT_OUTPUT_DATA_BUFFER_STREAM_END}}) != 0) +{ ... +} +</code> + + + + <p> </p><p>Indicates the status of an input stream on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>The input stream can receive more data at this time. To deliver more input data, call <strong>{{IMFTransform::ProcessInput}}</strong>.</p> </dd> + + + + + <p> </p><p>Indicates whether a Media Foundation transform ({{MFT}}) can produce output data.</p> + + + <dd> <p>There is a sample available for at least one output stream. To retrieve the available output samples, call <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Describes an input stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the transform, the only flags guaranteed to be accurate are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags. For all other flags, the client should first set the media type on every non-optional stream.</p><p>In the default processing model, an {{MFT}} holds a reference count on the sample that it receives in <strong>ProcessInput</strong>. It does not process the sample immediately inside <strong>ProcessInput</strong>. When <strong>ProcessOutput</strong> is called, the {{MFT}} produces output data and then discards the input sample. The following variations on this model are defined:</p><ul> <li> <p>If an {{MFT}} never holds onto input samples between <strong>ProcessInput</strong> and <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}.</p> </li> <li> <p>If an {{MFT}} holds some input samples beyond the next call to <strong>ProcessOutput</strong>, it can set the {{MFT_INPUT_STREAM_HOLDS_BUFFERS}}.</p> </li> </ul> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of input data must contain complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each media sample that the client provides as input must contain exactly one unit of data, as defined for the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_INPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that processes uncompressed audio should not set this flag. The {{MFT}} should accept buffers that contain more than a single audio frame, for efficiency.</p> </dd> + + + <dd> <p> All input samples must be the same size. The size is given in the <strong>cbSize</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The {{MFT}} must provide this value. During processing, the {{MFT}} should verify the size of input samples, and may drop samples with incorrect size.</p> </dd> + + + <dd> <p>The {{MFT}} might hold one or more input samples after <strong>{{IMFTransform::ProcessOutput}}</strong> is called. If this flag is present, the <strong>hnsMaxLatency</strong> member of the <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure gives the maximum latency, and the <strong>cbMaxLookahead</strong> member gives the maximum number of bytes of lookahead.</p> </dd> + + + <dd> <p>The {{MFT}} does not hold input samples after the <strong>{{IMFTransform::ProcessInput}}</strong> method returns. It releases the sample before the <strong>ProcessInput</strong> method returns.</p> <p>If this flag is absent, the {{MFT}} might hold a reference count on the samples that are passed to the <strong>ProcessInput</strong> method. The client must not re-use or delete the buffer memory until the {{MFT}} releases the sample's <strong>{{IMFSample}}</strong> reference.</p> <p>If this flag is absent, it does not guarantee that the {{MFT}} holds a reference count on the input samples. It is valid for an {{MFT}} to release input samples in <strong>ProcessInput</strong> even if the {{MFT}} does not set this flag. However, setting this flag might enable to client to optimize how it re-uses buffers.</p> <p>An {{MFT}} should not set this flag if it ever holds onto an input sample after returning from <strong>ProcessInput</strong>.</p> </dd> + + + <dd> <p>This input stream can be removed by calling <strong>{{IMFTransform::DeleteInputStream}}</strong>.</p> </dd> + + + <dd> <p>This input stream is optional. The transform can produce output without receiving input from this stream. The caller can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. It is possible for every input stream on a transform to be optional, but at least one input must be selected in order to produce output.</p> </dd> + + + <dd> <p>The {{MFT}} can perform in-place processing. In this mode, the {{MFT}} directly modifies the input buffer. When the client calls <strong>ProcessOutput</strong>, the same sample that was delivered to this stream is returned in the output stream that has a matching stream identifier. This flag implies that the {{MFT}} holds onto the input buffer, so this flag cannot combined with the {{MFT_INPUT_STREAM_DOES_NOT_ADDREF}} flag.</p> <p>If this flag is present, the {{MFT}} must set the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag for the output stream that corresponds to this input stream. (See <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>).</p> </dd> + + + + + <p> </p><p>Describes an output stream on a Media Foundation transform ({{MFT}}).</p> + <p>Before the client sets the media types on the {{MFT}}, the only flag guaranteed to be accurate is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag. For all other flags, the client should first set the media type on every non-optional stream.</p><p>The {{MFT_OUTPUT_STREAM_DISCARDABLE}} and {{MFT_OUTPUT_STREAM_LAZY_READ}} flags define different behaviors for how the {{MFT}} can discard output data.</p><ul> <li> <p>{{MFT_OUTPUT_STREAM_DISCARDABLE:}} The {{MFT}} discards output data only if the client calls <strong>ProcessOutput</strong> with the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag. The {{MFT}} never discards data when the client calls <strong>ProcessInput</strong>.</p> </li> <li> <p>{{MFT_OUTPUT_STREAM_LAZY_READ:}} If the client continues to call <strong>ProcessInput</strong> without collecting the output from this stream, the {{MFT}} eventually discards the output. If all output streams have the {{MFT_OUTPUT_STREAM_LAZY_READ}} flag, the {{MFT}} never refuses more input data.</p> </li> </ul><p>If neither of these flags is set, the {{MFT}} never discards output data.</p> + + + <dd> <p>Each media sample (<strong>{{IMFSample}}</strong> interface) of output data from the {{MFT}} contains complete, unbroken units of data. The definition of a <em>unit of data</em> depends on the media type: For uncompressed video, a video frame; for compressed data, a compressed packet; for uncompressed audio, a single audio frame.</p> <p>For uncompressed audio formats, this flag is always implied. (It is valid to set the flag, but not required.) An uncompressed audio frame should never span more than one media sample.</p> </dd> + + + <dd> <p>Each output sample contains exactly one unit of data, as defined for the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag.</p> <p>If this flag is present, the {{MFT_OUTPUT_STREAM_WHOLE_SAMPLES}} flag must also be present.</p> <p>An {{MFT}} that outputs uncompressed audio should not set this flag. For efficiency, it should output more than one audio frame at a time.</p> </dd> + + + <dd> <p>All output samples are the same size.</p> </dd> + + + <dd> <p>The {{MFT}} can discard the output data from this output stream, if requested by the client. To discard the output, set the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> </dd> + + + <dd> <p>This output stream is optional. The client can deselect the stream by not setting a media type or by setting a <strong>{{NULL}}</strong> media type. When an optional stream is deselected, it does not produce any output data.</p> </dd> + + + <dd> <p>The {{MFT}} provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. The {{MFT}} cannot use output samples provided by the client for this stream.</p> <p>If this flag is not set, the {{MFT}} must set <strong>cbSize</strong> to a nonzero value in the <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure, so that the client can allocate the correct buffer size. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </dd> + + + <dd> <p>The {{MFT}} can either provide output samples for this stream or it can use samples that the client allocates. This flag cannot be combined with the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> <p>If the {{MFT}} does not set this flag or the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag, the client must allocate the samples for this output stream. The {{MFT}} will not provide its own samples.</p> </dd> + + + <dd> <p>The {{MFT}} does not require the client to process the output for this stream. If the client continues to send input data without getting the output from this stream, the {{MFT}} simply discards the previous input.</p> </dd> + + + <dd> <p>The {{MFT}} might remove this output stream during streaming. This flag typically applies to demultiplexers, where the input data contains multiple streams that can start and stop during streaming. For more information, see <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> </dd> + + + + + <p> </p><p>Defines flags for the setting or testing the media type on a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Test the proposed media type, but do not set it.</p> </dd> + + + + + <p> </p><p>Defines flags for processing output samples in a Media Foundation transform ({{MFT}}).</p> + + + <dd> <p>Do not produce output for streams in which the <strong>pSample</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure is <strong>{{NULL}}</strong>. This flag is not valid unless the {{MFT}} has marked the output stream with the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> </dd> + + + <dd> <p>Regenerates the last output sample.</p> <p><strong>Note</strong> Requires Windows?8.</p> </dd> + + + + + <p> </p><p>Indicates the status of a call to <strong>{{IMFTransform::ProcessOutput}}</strong>.</p> + <p>If the {{MFT}} sets this flag, the <strong>ProcessOutput</strong> method returns {{MF_E_TRANSFORM_STREAM_CHANGE}} and no output data is produced. The client should respond as follows:</p><ol> <li> <p>Call <strong>{{IMFTransform::GetStreamCount}}</strong> to get the new number of streams.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetStreamIDs}}</strong> to get the new stream identifiers.</p> </li> <li> <p>Call <strong>{{IMFTransform::GetOutputAvailableType}}</strong> and <strong>{{IMFTransform::SetOutputType}}</strong> to set the media types on the new streams.</p> </li> </ol><p>Until these steps are completed, all further calls to <strong>ProcessOutput</strong> return {{MF_E_TRANSFORM_STREAM_CHANGE}}.</p> + + + + <p> </p><p>Not supported.</p><strong>Note</strong>??Earlier versions of this documentation described the <strong>_MFT_DRAIN_TYPE</strong> enumeration incorrectly. The enumeration is not supported. For more information, see <strong>{{MFT_MESSAGE_TYPE}}</strong>.? + + + + <p>Defines messages for a Media Foundation transform ({{MFT}}). To send a message to an {{MFT}}, call <strong>{{IMFTransform::ProcessMessage}}</strong>.</p> + <p>Some messages require specific actions from the {{MFT}}. These events have "{{MESSAGE}}" in the message name. Other messages are informational; they notify the {{MFT}} of some action by the client, and do not require any particular response from the {{MFT}}. These messages have "{{NOTIFY}}" in the messages name. Except where noted, an {{MFT}} should not rely on the client sending notification messages.</p> + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + <p>Specifies how to output a 3D stereoscopic video stream.</p> + <p>This enumeration is used with the {{MF_ENABLE_3DVIDEO_OUTPUT}} attribute.</p> + + + <dd> <p>Output the base view only. Discard the other view.</p> </dd> + + + <dd> <p>Output a stereo view (two buffers).</p> </dd> + + + + + + + + + + + <p> </p><p>Contains information about an input stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetInputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid are the {{MFT_INPUT_STREAM_REMOVABLE}} and {{MFT_INPUT_STREAM_OPTIONAL}} flags in the <strong>dwFlags</strong> member.</p><ul> <li> <p>The {{MFT_INPUT_STREAM_REMOVABLE}} flag indicates that the stream can be deleted.</p> </li> <li> <p>The {{MFT_INPUT_STREAM_OPTIONAL}} flag indicates that the stream is optional and does not require a media type.</p> </li> </ul><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetInputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output stream on a Media Foundation transform ({{MFT}}). To get these values, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>.</p> + <p>Before the media types are set, the only values that should be considered valid is the {{MFT_OUTPUT_STREAM_OPTIONAL}} flag in the <strong>dwFlags</strong> member. This flag indicates that the stream is optional and does not require a media type.</p><p>After you set a media type on all of the input and output streams (not including optional streams), all of the values returned by the <strong>GetOutputStreamInfo</strong> method are valid. They might change if you set different media types.</p> + + + + <p> </p><p>Contains information about an output buffer for a Media Foundation transform. This structure is used in the <strong>{{IMFTransform::ProcessOutput}}</strong> method.</p> + <p>You must provide an <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure for each selected output stream.</p><p>{{MFTs}} can support two different allocation models for output samples:</p><ul> <li> The {{MFT}} allocates the output sample. </li> <li> The client allocates the output sample. </li> </ul><p>To find which model the {{MFT}} supports for a given output stream, call <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> and check the value of <strong>dwFlags</strong>.</p><table> <tr><th>Flag</th><th>Allocation Model</th></tr> <tr><td>{{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}}</td><td>The {{MFT}} allocates the output samples for the stream. Set <strong>pSample</strong> to <strong>{{NULL}}</strong> for this stream.</td></tr> <tr><td>{{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}}</td><td>The {{MFT}} supports both allocation models.</td></tr> <tr><td>Neither (default)</td><td>The client must allocate the output samples for the stream.</td></tr> </table><p>?</p><p>The behavior of <strong>ProcessOutput</strong> depends on the initial value of <strong>pSample</strong> and the value of the <em>dwFlags</em> parameter in the <strong>ProcessOutput</strong> method.</p><ul> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> contains the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag, the {{MFT}} discards the output data.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_DISCARDABLE}} or {{MFT_OUTPUT_STREAM_LAZY_READ}} flag. (To get the flags for the output stream, call the <strong>{{IMFTransform::GetOutputStreamInfo}}</strong> method.)</p> </li> <li> <p>If <strong>pSample</strong> is <strong>{{NULL}}</strong> and <em>dwFlags</em> does not contain the {{MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}}, the {{MFT}} provides a sample for the output data. The {{MFT}} sets <strong>pSample</strong> to point to the sample that it provides. The {{MFT}} can either allocate a new sample or re-use an input sample.</p> <p>Restriction: This output stream must have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} or {{MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES}} flag.</p> </li> <li> <p>If <strong>pSample</strong> is non-<strong>{{NULL}}</strong>, the {{MFT}} uses the sample provided by the caller.</p> <p>Restriction: This output stream must not have the {{MFT_OUTPUT_STREAM_PROVIDES_SAMPLES}} flag.</p> </li> </ul><p>Any other combinations are invalid and cause <strong>ProcessOutput</strong> to return {{E_INVALIDARG}}.</p><p>Each call to <strong>ProcessOutput</strong> can produce zero or more events and up to one sample per output stream.</p> + + + + <p>Not for application use.</p> + <p>This structure is used internally by the Microsoft Media Foundation {{AVStream}} proxy.</p> + + + <dd> <p>Reserved.</p> </dd> + + + <dd> <p>Reserved.</p> </dd> + + + + + + + + + + + <p>Implemented by all Media Foundation Transforms ({{MFTs}}).</p> + + + + <p> Gets the minimum and maximum number of input and output streams for this Media Foundation transform ({{MFT}}). </p> + <p> If the {{MFT}} has a fixed number of streams, the minimum and maximum values are the same. </p><p> It is not recommended to create an {{MFT}} that supports zero inputs or zero outputs. An {{MFT}} with no inputs or no outputs may not be compatible with the rest of the Media Foundation pipeline. You should create a Media Foundation sink or source for this purpose instead. </p><p> When an {{MFT}} is first created, it is not guaranteed to have the minimum number of streams. To find the actual number of streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamLimits}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the minimum number of input streams. </p> </dd> + + + <dd> <p> Receives the maximum number of input streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + <dd> <p> Receives the minimum number of output streams. </p> </dd> + + + <dd> <p> Receives the maximum number of output streams. If there is no maximum, receives the value <strong>{{MFT_STREAMS_UNLIMITED}}</strong>. </p> </dd> + + + + + <p> Gets the current number of input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> The number of streams includes unselected streams?that is, streams with no media type or a <strong>{{NULL}}</strong> media type.</p><p> This method should not be called with <strong>{{NULL}}</strong> parameters, although in practice some implementations may allow <strong>{{NULL}}</strong> parameters. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamCount}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Receives the number of input streams. </p> </dd> + + + <dd> <p> Receives the number of output streams. </p> </dd> + + + + + <p> Gets the stream identifiers for the input and output streams on this Media Foundation transform ({{MFT}}). </p> + <p> Stream identifiers are necessary because some {{MFTs}} can add or remove streams, so the index of a stream may not be unique. Therefore, <strong>{{IMFTransform}}</strong> methods that operate on streams take stream identifiers. </p><p>This method can return <strong>{{E_NOTIMPL}}</strong> if both of the following conditions are true:</p><ul> <li> The transform has a fixed number of streams. </li> <li> The streams are numbered consecutively from 0 to n ? 1, where n is the number of input streams or output streams. In other words, the first input stream is 0, the second is 1, and so on; and the first output stream is 0, the second is 1, and so on. </li> </ul><p>This method must be implemented if any of the following conditions is true:</p><ul> <li> The {{MFT}} can add or remove output streams. </li> <li> The {{MFT}} allows the client to add or remove input streams. </li> <li> The stream identifiers are not consecutive. </li> </ul><p> All input stream identifiers must be unique within an {{MFT}}, and all output stream identifiers must be unique. However, an input stream and an output stream can share the same identifier. </p><p> If the client adds an input stream, the client assigns the identifier, so the {{MFT}} must allow arbitrary identifiers, as long as they are unique. If the {{MFT}} creates an output stream, the {{MFT}} assigns the identifier. </p><p> By convention, if an {{MFT}} has exactly one fixed input stream and one fixed output stream, it should assign the identifier 0 to both streams. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetStreamIDs}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. See Remarks. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_BUFFERTOOSMALL}}</strong></dt> </dl> </td><td> <p> One or both of the arrays is too small. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of elements in the <em>pdwInputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the input stream identifiers. The array size must be at least equal to the number of input streams. To get the number of input streams, call <strong>{{IMFTransform::GetStreamCount}}</strong>. </p> <p>If the caller passes an array that is larger than the number of input streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + <dd> <p> Number of elements in the <em>pdwOutputIDs</em> array. </p> </dd> + + + <dd> <p> Pointer to an array allocated by the caller. The method fills the array with the output stream identifiers. The array size must be at least equal to the number of output streams. To get the number of output streams, call <strong>GetStreamCount</strong>. </p> <p>If the caller passes an array that is larger than the number of output streams, the {{MFT}} must not write values into the extra array entries.</p> </dd> + + + + + <p> Gets the buffer requirements and other information for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_INPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the input stream. </p> </dd> + + + + + <p> Gets the buffer requirements and other information for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>It is valid to call this method before setting the media types.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStreamInfo}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to an <strong>{{MFT_OUTPUT_STREAM_INFO}}</strong> structure. The method fills the structure with information about the output stream. </p> </dd> + + + + + <p> Gets the global attribute store for this Media Foundation transform ({{MFT}}). </p> + <p> Use the <strong>{{IMFAttributes}}</strong> reference retrieved by this method to get or set attributes that apply to the entire {{MFT}}. To get the attribute store for an input stream, call <strong>{{IMFTransform::GetInputStreamAttributes}}</strong>. To get the attribute store for an output stream, call <strong>{{IMFTransform::GetOutputStreamAttributes}}</strong>. </p><p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. Exception: Hardware-based {{MFTs}} must implement this method. See Hardware {{MFTs}}.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support attributes. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support input stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the attribute store for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> Implementation of this method is optional unless the {{MFT}} needs to support a particular set of attributes. </p><p> To get the attribute store for the entire {{MFT}}, call <strong>{{IMFTransform::GetAttributes}}</strong>. </p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not support output stream attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFAttributes}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Removes an input stream from this Media Foundation transform ({{MFT}}). </p> + <p> If the transform has a fixed number of input streams, the method returns <strong>{{E_NOTIMPL}}</strong>. </p><p> An {{MFT}} might support this method but not allow certain input streams to be removed. If an input stream can be removed, the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method returns the <strong>{{MFT_INPUT_STREAM_REMOVABLE}}</strong> flag for that stream. Otherwise, the stream cannot be removed, and the method returns <strong>{{MF_E_INVALIDREQUEST}}</strong>. The method also fails if the {{MFT}} currently has the minimum number of input streams that it requires. To find the minimum number of streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If the transform still has unprocessed input for that stream, the method might succeed or it might return <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>. If the method succeeds, the {{MFT}} will continue to process the remaining input after the stream is removed. If the method returns <strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong>, you must clear the input buffers before removing the stream. To clear the input buffers, either call <strong>{{IMFTransform::ProcessOutput}}</strong> or else call <strong>{{IMFTransform::ProcessMessage}}</strong> with the <strong>{{MFT_MESSAGE_COMMAND_FLUSH}}</strong> to flush the {{MFT}}. Then call the <strong>DeleteInputStream</strong> again. An {{MFT}} should never discard input buffers when <strong>DeleteInputStream</strong> is called. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTDeleteInputStream}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The transform has a fixed number of input streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p> The stream is not removable, or the transform currently has the minimum number of input streams it can support. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_INPUT_REMAINING}}</strong></dt> </dl> </td><td> <p> The transform has unprocessed input buffers for the specified stream. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Identifier of the input stream to remove. </p> </dd> + + + + + <p> Adds one or more new input streams to this Media Foundation transform ({{MFT}}). </p> + <p> If the new streams exceed the maximum number of input streams for this transform, the method returns <strong>{{E_INVALIDARG}}.</strong> To find the maximum number of input streams, call <strong>{{IMFTransform::GetStreamLimits}}</strong>. </p><p> If any of the new stream identifiers conflicts with an existing input stream, the method returns <strong>{{E_INVALIDARG}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTAddInputStreams}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} has a fixed number of input streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Number of streams to add. </p> </dd> + + + <dd> <p> Array of stream identifiers. The new stream identifiers must not match any existing input streams. </p> </dd> + + + + + <p> Gets an available media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each input stream and orders them by preference. This method enumerates the available media types for an input stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream might change the available types for another stream, or change the preference order. However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetInputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of input types until one or more output types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p><p>For encoders, after the output type is set, <strong>GetInputAvailableType</strong> must return a list of input types that are compatible with the current output type. This means that all types returned by <strong>GetInputAvailableType</strong> after the output type is set must be valid types for <strong>SetInputType</strong>.</p><p>Encoders should reject input types if the attributes of the input media type and output media type do not match, such as resolution setting with {{MF_MT_FRAME_SIZE}}, nominal range setting with {{MF_MT_VIDEO_NOMINAL_RANGE}}, or frame rate setting with {{MF_MT_FRAME_SIZE}}</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. </p> </dd> + + + + + <p> Gets an available media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> The {{MFT}} defines a list of available media types for each output stream and orders them by preference. This method enumerates the available media types for an output stream. To enumerate the available types, increment <em>dwTypeIndex</em> until the method returns {{MF_}}<strong>{{E_NO_MORE_TYPES}}</strong>. </p><p> Setting the media type on one stream can change the available types for another stream (or change the preference order). However, an {{MFT}} is not required to update the list of available types dynamically. The only guaranteed way to test whether you can set a particular input type is to call <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p> In some cases, an {{MFT}} cannot return a list of output types until one or more input types are set. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> An {{MFT}} is not required to implement this method. However, most {{MFTs}} should implement this method, unless the supported types are simple and can be discovered through the <strong>{{MFTGetInfo}}</strong> function. </p><p> This method can return a <em>partial</em> media type. A partial media type contains an incomplete description of a format, and is used to provide a hint to the caller. For example, a partial type might include just the major type and subtype {{GUIDs}}. However, after the client sets the input types on the {{MFT}}, the {{MFT}} should generally return at least one complete output type, which can be used without further modification. For more information, see Complete and Partial Media Types.</p><p>Some {{MFTs}} cannot provide an accurate list of output types until the {{MFT}} receives the first input sample. For example, the {{MFT}} might need to read the first packet header to deduce the format. An {{MFT}} should handle this situation as follows:</p><ol> <li> Before the {{MFT}} receives any input, it offers a list of one or more output types that it could possibly produce. For example, an {{MPEG}}-2 decoder might return a media type that describes the {{MPEG}}-2 main profile/main level. </li> <li> The client selects one of these types (generally the first) and sets it on the output stream. </li> <li> The client delivers the first input sample by calling <strong>{{IMFTransform::ProcessInput}}</strong>. </li> <li> If the output type does not conform to the input data, the transform signals a format change in the <strong>ProcessOutput</strong> method. For more information about format changes, see <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> The calls <strong>GetOutputAvailableType</strong> again. At this point, the method should return an updated list of types that reflects the input data. </li> <li> The client selects a new output type from this list and calls <strong>SetOutputType</strong>. </li> </ol><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputAvailableType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> The {{MFT}} does not have a list of available output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p> The <em>dwTypeIndex</em> parameter is out of range. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Index of the media type to retrieve. Media types are indexed from zero and returned in approximate order of preference. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more output types before setting the input type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p> If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetInputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory attributes. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the output types before setting the input types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Sets, tests, or clears the media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p>This method can be used to set, test without setting, or clear the media type:</p><ul> <li> To set the media type, set <em>dwFlags</em> to zero and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. </li> <li> To test the media type without setting it, set <em>dwFlags</em> to <strong>{{MFT_SET_TYPE_TEST_ONLY}}</strong> and set <em>pType</em> to a non-<strong>{{NULL}}</strong> reference that specifies the media type. If the media type is acceptable, the method return <strong>{{S_OK}}</strong>. Otherwise, it returns <strong>{{MF_E_INVALIDMEDIATYPE}}</strong>. Regardless of the return value, the current media type does not change. </li> <li> To clear the media type, set <em>pType</em> to <strong>{{NULL}}</strong>. </li> </ul><p> Setting the media type on one stream may change the acceptable types on another stream. </p><p> An {{MFT}} may require the caller to set one or more input types before setting the output type. If so, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. </p><p>If the {{MFT}} supports DirectX Video Acceleration ({{DXVA}}) but is unable to find a suitable {{DXVA}} configuration (for example, if the graphics driver does not have the right capabilities), the method should return <strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong>. For more information, see Supporting {{DXVA}} 2.0 in Media Foundation.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p> The transform cannot use the proposed media type. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDTYPE}}</strong></dt> </dl> </td><td> <p> The proposed type is not valid. This error code indicates that the media type itself is not configured correctly; for example, it might contain mutually contradictory flags. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING}}</strong></dt> </dl> </td><td> <p> The {{MFT}} cannot switch types while processing data. Try draining or flushing the {{MFT}}. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the input types before setting the output types. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The {{MFT}} could not find a suitable DirectX Video Acceleration ({{DXVA}}) configuration. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaType}}</strong> interface, or <strong>{{NULL}}</strong>. </p> </dd> + + + <dd> <p> Zero or more flags from the <strong>_MFT_SET_TYPE_FLAGS</strong> enumeration. </p> </dd> + + + + + <p> Gets the current media type for an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified input stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetInputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The input media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Gets the current media type for an output stream on this Media Foundation transform ({{MFT}}). </p> + <p> If the specified output stream does not yet have a media type, the method returns <strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong>. Most {{MFTs}} do not set any default media types when first created. Instead, the client must set the media type by calling <strong>{{IMFTransform::SetOutputType}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputCurrentType}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The output media type has not been set. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Output stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p> Queries whether an input stream on this Media Foundation transform ({{MFT}}) can accept more data. </p> + <p> If the method returns the <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong> flag, you can deliver an input sample to the specified stream by calling <strong>{{IMFTransform::ProcessInput}}</strong>. If the method succeeds but does not return any flags in the <em>pdwFlags</em> parameter, it means the input stream already has as much data as it can accept. </p><p> Use this method to test whether the input stream is ready to accept more data, without incurring the overhead of allocating a new sample and calling <strong>ProcessInput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output (or both). </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetInputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Receives a member of the <strong>_MFT_INPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_INPUT_STATUS_ACCEPT_DATA}}</strong>, the stream specified in <em>dwInputStreamID</em> can accept more input data. </p> </dd> + + + + + <p> Queries whether the Media Foundation transform ({{MFT}}) is ready to produce output data. </p> + <p> If the method returns the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag, it means you can generate one or more output samples by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> {{MFTs}} are not required to implement this method. If the method returns <strong>{{E_NOTIMPL}}</strong>, you must call <strong>ProcessOutput</strong> to determine whether the transform has output data. </p><p> If the {{MFT}} has more than one output stream, but it does not produce samples at the same time for each stream, it can set the <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong> flag when just one stream is ready. However, if the {{MFT}} normally produces samples at the same time for each output stream, it should not set this flag until all streams are ready. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTGetOutputStatus}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Receives a member of the <strong>_MFT_OUTPUT_STATUS_FLAGS</strong> enumeration, or zero. If the value is <strong>{{MFT_OUTPUT_STATUS_SAMPLE_READY}}</strong>, the {{MFT}} can produce an output sample. </p> </dd> + + + + + <p> Sets the range of time stamps the client needs for output. </p> + <p> This method can be used to optimize preroll, especially in formats that have gaps between time stamps, or formats where the data must start on a sync point, such as {{MPEG}}-2. Calling this method is optional, and implementation of this method by an {{MFT}} is optional. If the {{MFT}} does not implement the method, the return value is <strong>{{E_NOTIMPL}}</strong>.</p><p> If an {{MFT}} implements this method, it must limit its output data to the range of times specified by <em>hnsLowerBound</em> and <em>hnsUpperBound</em>. The {{MFT}} discards any input data that is not needed to produce output within this range. If the sample boundaries do not exactly match the range, the {{MFT}} should split the output samples, if possible. Otherwise, the output samples can overlap the range. </p><p> For example, suppose the output range is 100 to 150 milliseconds (ms), and the output format is video with each frame lasting 33 ms. A sample with a time stamp of 67 ms overlaps the range (67 + 33 = 100) and is produced as output. A sample with a time stamp of 66 ms is discarded (66 + 33 = 99). Similarly, a sample with a time stamp of 150 ms is produced as output, but a sample with a time stamp of 151 is discarded.</p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTSetOutputBounds}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Specifies the earliest time stamp. The Media Foundation transform ({{MFT}}) will accept input until it can produce an output sample that begins at this time; or until it can produce a sample that ends at this time or later. If there is no lower bound, use the value <strong>{{MFT_OUTPUT_BOUND_LOWER_UNBOUNDED}}</strong>. </p> </dd> + + + <dd> <p> Specifies the latest time stamp. The {{MFT}} will not produce an output sample with time stamps later than this time. If there is no upper bound, use the value <strong>{{MFT_OUTPUT_BOUND_UPPER_UNBOUNDED}}</strong>. </p> </dd> + + + + + <p> Sends an event to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> An {{MFT}} can handle sending the event downstream, or it can let the pipeline do this, as indicated by the return value: </p><ul> <li><strong>{{E_NOTIMPL}}</strong>: The {{MFT}} ignores all events, and the pipeline should send all events downstream. After the pipeline receives this return value, it might not call <strong>ProcessEvent</strong> again. </li> <li><strong>{{S_OK}}</strong>: The {{MFT}} has examined this event, but the pipeline should send the event downstream. Internally, the {{MFT}} might respond to the event in some way, or it might ignore the event. </li> <li><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong>: The pipeline should not propagate this event downstream. Either the {{MFT}} will send the event downstream, or else the {{MFT}} will consume the event and not send it downstream. The {{MFT}} should only consume the event if the event should stop at this {{MFT}} and not travel any further downstream. But in most cases, the event should travel downstream. </li> </ul><p> To send the event downstream, the {{MFT}} adds the event to the collection object that is provided by the client in the <strong>pEvents</strong> member of the <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structure, when the client calls <strong>{{IMFTransform::ProcessOutput}}</strong>. </p><p> Events must be serialized with the samples that come before and after them. Attach the event to the output sample that follows the event. (The pipeline will process the event first, and then the sample.) If an {{MFT}} holds back one or more samples between calls to <strong>{{IMFTransform::ProcessInput}}</strong> and <strong>ProcessOutput</strong>, the {{MFT}} should handle sending all events downstream, because in this situation the pipeline cannot correlate input samples with output samples. </p><p> If an {{MFT}} does not hold back samples and does not need to examine any events, it can return <strong>{{E_NOTIMPL}}</strong>. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessEvent}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p> Not implemented. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT}}</strong></dt> </dl> </td><td> <p> The pipeline should not propagate the event. </p> </td></tr> </table><p>?</p> + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFMediaEvent}}</strong> interface of an event object. </p> </dd> + + + + + <p> Sends a message to the Media Foundation transform ({{MFT}}). </p> + <p> Before calling this method, set the media types on all input and output streams. </p><p> The {{MFT}} might ignore certain message types. If so, the method returns <strong>{{S_OK}}</strong>. An error code indicates that the transform handles this message type but was unable to process the message in this instance. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessMessage}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream number. Applies to the <strong>{{MFT_MESSAGE_NOTIFY_END_OF_STREAM}}</strong> message. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> </table><p>?</p> + + + <dd> <p> The message to send, specified as a member of the <strong>{{MFT_MESSAGE_TYPE}}</strong> enumeration. </p> </dd> + + + <dd> <p> Message parameter. The meaning of this parameter depends on the message type. </p> </dd> + + + + + <p> Delivers data to an input stream on this Media Foundation transform ({{MFT}}). </p> + <p> In most cases, if the method succeeds, the {{MFT}} stores the sample and holds a reference count on the <strong>{{IMFSample}}</strong> reference. Do not re-use the sample until the {{MFT}} releases the sample. Instead of storing the sample, however, an {{MFT}} might copy the sample data into a new buffer. In that case, the {{MFT}} should set the <strong>{{MFT_INPUT_STREAM_DOES_NOT_ADDREF}}</strong> flag in the <strong>{{IMFTransform::GetInputStreamInfo}}</strong> method. </p><p> If the {{MFT}} already has enough input data to produce an output sample, it does not accept new input data, and <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. At that point, the client should clear the pending input data by doing one of the following: </p><ul> <li> Generate new output by calling <strong>{{IMFTransform::ProcessOutput}}</strong>. </li> <li> Flush the input data by calling <strong>{{IMFTransform::ProcessMessage}}</strong> with the {{MFT_}}<strong>{{MESSAGE_COMMAND_FLUSH}}</strong> message. </li> </ul><p> An exception to this rule is the <strong>{{MFT_OUTPUT_STREAM_LAZY_READ}}</strong> flag. When this flag is present, the transform will discard stored samples if you give it more input. For more information, see <strong>{{IMFTransform::GetOutputStreamInfo}}</strong>. A transform should never queue any more input data than is required to produce the correct output. </p><p> An {{MFT}} can process the input data in the <strong>ProcessInput</strong> method. However, most {{MFTs}} wait until the client calls <strong>ProcessOutput</strong>. </p><p> After the client has set valid media types on all of the streams, the {{MFT}} should always be in one of two states: Able to accept more input, or able to produce more output. It should never be in both states or neither state. An {{MFT}} should only accept as much input as it needs to generate at least one output sample, at which point <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>. When <strong>ProcessInput</strong> returns <strong>{{MF_E_NOTACCEPTING}}</strong>, the client can assume that the {{MFT}} is ready to produce output. </p><p> If an {{MFT}} encounters a non-fatal error in the input data, it can simply drop the data and attempt to recover when it gets the more input data. To request more input data, the {{MFT}} returns <strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong> from the <strong>{{IMFTransform::ProcessOutput}}</strong> method. If the {{MFT}} drops any data, it should set the <strong>{{MFSampleExtension_Discontinuity}}</strong> attribute attribute on the next output sample, to notify the caller that there is a gap in the data stream. </p><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including mftransform.h, this method is renamed <strong>{{MFTProcessInput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p> Invalid argument. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_DURATION}}</strong></dt> </dl> </td><td> <p>The input sample requires a valid sample duration. To set the duration, call <strong>{{IMFSample::SetSampleDuration}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid durations. Some {{MFTs}} do not require sample durations.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_SAMPLE_TIMESTAMP}}</strong></dt> </dl> </td><td> <p>The input sample requires a time stamp. To set the time stamp, call <strong>{{IMFSample::SetSampleTime}}</strong>. </p> <p>Some {{MFTs}} require that input samples have valid time stamps. Some {{MFTs}} do not require time stamps.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p> The transform cannot process more input at this time. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> The media type is not set on one or more streams. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_UNSUPPORTED_D3D_TYPE}}</strong></dt> </dl> </td><td> <p> The media type is not supported for DirectX Video Acceleration ({{DXVA}}). A {{DXVA}}-enabled decoder might return this error code. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessInput}}</strong>, unlike the <strong>{{IMediaObject::ProcessInput}}</strong> method.? + + + <dd> <p> Input stream identifier. To get the list of stream identifiers, call <strong>{{IMFTransform::GetStreamIDs}}</strong>. </p> </dd> + + + <dd> <p> Pointer to the <strong>{{IMFSample}}</strong> interface of the input sample. The sample must contain at least one media buffer that contains valid input data. </p> </dd> + + + <dd> <p> Reserved. Must be zero. </p> </dd> + + + + + <p> Generates output from the current input data. </p> + <p> The size of the <em>pOutputSamples</em> array must be equal to or greater than the number of <em>selected</em> output streams. The number of selected output streams equals the total number of output streams minus the number of <em>deselected</em> streams. A stream is deselected if it has the <strong>{{MFT_OUTPUT_STREAM_OPTIONAL}}</strong> flag and the caller does not set a media type (or sets the media type to <strong>{{NULL}}</strong>). For more information, see <strong>_MFT_OUTPUT_STREAM_INFO_FLAGS</strong> enumeration. </p><p>This method generates output samples and can also generate events. If the method succeeds, at least one of the following conditions is true:</p><ul> <li> One or more samples in the <em>pOutputSamples</em> array contains output data. </li> <li> One or more members of the <em>pOutputSamples</em> array contains a non-empty collection of events. </li> </ul><p>If <strong>{{MFT_UNIQUE_METHOD_NAMES}}</strong> is defined before including Mftransform.h, this method is renamed <strong>{{MFTProcessOutput}}</strong>. See Creating Hybrid {{DMO}}/{{MFT}} Objects.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_UNEXPECTED}}</strong></dt> </dl> </td><td> <p>The <strong>ProcessOutput</strong> method was called on an asynchronous {{MFT}} that was not expecting this method call.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p> Invalid stream identifier in the <strong>dwStreamID</strong> member of one or more <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_NEED_MORE_INPUT}}</strong></dt> </dl> </td><td> <p> The transform cannot produce output data until it receives more input data. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_STREAM_CHANGE}}</strong></dt> </dl> </td><td> <p> The format has changed on an output stream, or there is a new preferred format, or there is a new output stream. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_TRANSFORM_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p> You must set the media type on one or more streams of the {{MFT}}. </p> </td></tr> </table><p>?</p><strong>Note</strong>??If you are converting a DirectX Media Object ({{DMO}}) to an {{MFT}}, be aware that <strong>{{S_FALSE}}</strong> is not a valid return code for <strong>{{IMFTransform::ProcessOutput}}</strong>, unlike the <strong>{{IMediaObject::ProcessOutput}}</strong> method.? + + + <dd> <p> Bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_FLAGS</strong> enumeration. </p> </dd> + + + <dd> <p> Number of elements in the <em>pOutputSamples</em> array. The value must be at least 1. </p> </dd> + + + <dd> <p> Pointer to an array of <strong>{{MFT_OUTPUT_DATA_BUFFER}}</strong> structures, allocated by the caller. The {{MFT}} uses this array to return output data to the caller. </p> </dd> + + + <dd> <p> Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>_MFT_PROCESS_OUTPUT_STATUS</strong> enumeration. </p> </dd> + + + + + <p> </p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>The <strong>SetInputStreamState</strong> method sets the Device {{MFT}} input stream state and media type.</p> + <p>This interface function helps to transition the input stream to a specified state with a specified media type set on the input stream. This will be used by device transform manager ({{DTM}}) when the Device {{MFT}} requests a specific input stream?s state and media type to be changed. Device {{MFT}} would need to request such a change when one of the Device {{MFT}}'s output changes.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, if Output 2?s media type changes to 1080p, Device {{MFT}} has to change Input 1's media type to 1080p. To achieve this, Device {{MFT}} should request {{DTM}} to call this method using the {{METransformInputStreamStateChanged}} message. +</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Initialization succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>When <strong>{{S_OK}}</strong> is returned, perform the state change operation. Otherwise, this contains an error that occurred while setting the media type on the devproxy output pin. In this case, propagate the error appropriately.</p> </dd> + + + + + + + + <p>The <strong>SetOutputStreamState</strong> method sets the Device {{MFT}} output stream state and media type.</p> + <p>This interface method helps to transition the output stream to a specified state with specified media type set on the output stream. This will be used by the {{DTM}} when the Device Source requests a specific output stream?s state and media type to be changed. Device {{MFT}} should change the specified output stream?s media type and state to the requested media type.</p><p>If the incoming media type and stream state are same as the current media type and stream state the method return <strong>{{S_OK}}</strong>.</p><p>If the incoming media type and current media type of the stream are the same, Device {{MFT}} must change the stream?s state to the requested value and return the appropriate <strong>{{HRESULT}}</strong>.</p><p>When a change in the output stream?s media type requires a corresponding change in the input then Device {{MFT}} must post the {{METransformInputStreamStateChanged}} event to {{DTM}} to change the relevant input stream. The call must return only after changing the input stream?s media type and the appropriate <strong>{{HRESULT}}</strong>.</p><p>As an example, consider a Device {{MFT}} that has two input streams and three output streams. Let Output 1 and Output 2 source from Input 1 and stream at 720p. Now, let us say Output 2?s media type changes to 1080p. To satisfy this request, Device {{MFT}} must change the Input 1 media type to 1080p, by posting {{METransformInputStreamStateChanged}} event to the {{DTM}}. {{DTM}} would call <strong>SetInputStreamState</strong> to change the input stream? media type and state. After this call, the <strong>SetOutputStreamState</strong> must return.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include but not limited to values given in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Transitioning the stream state succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Device {{MFT}} could not support the request at this time.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVAILIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>An invalid stream {{ID}} was passed.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_STREAM_STATE}}</strong></dt> </dl> </td><td> <p>The requested stream transition is not possible.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Stream {{ID}} of the input stream where the state and media type needs to be changed.</p> </dd> + + + <dd> <p>Preferred media type for the input stream is passed in through this parameter. Device {{MFT}} should change the media type only if the incoming media type is different from the current media type.</p> </dd> + + + <dd> <p>Specifies the <strong>DeviceStreamState</strong> which the input stream should transition to.</p> </dd> + + + <dd> <p>Must be zero.</p> </dd> + + + + + + + + + + + + + + + + + <p>Creates a generic activation object for Media Foundation transforms ({{MFTs}}).</p> + <p>Most applications will not use this function; it is used internally by the <strong>{{MFTEnumEx}}</strong> function. </p><p>An <em>activation object</em> is a helper object that creates another object, somewhat similar to a class factory. The <strong>{{MFCreateTransformActivate}}</strong> function creates an activation object for {{MFTs}}. Before this activation object can create an {{MFT}}, the caller must initialize the activation object by setting one or more attributes on it.</p><table> <tr><th>Attribute</th><th>Description</th></tr> <tr><td> {{MFT_TRANSFORM_CLSID_Attribute}} </td><td>Required. Contains the {{CLSID}} of the {{MFT}}. The activation object creates the {{MFT}} by passing this {{CLSID}} to the <strong>CoCreateInstance</strong> function.</td></tr> <tr><td> {{MF_TRANSFORM_CATEGORY_Attribute}} </td><td>Optional. Specifies the category of the {{MFT}}.</td></tr> <tr><td> {{MF_TRANSFORM_FLAGS_Attribute}} </td><td>Contains various flags that describe the {{MFT}}. For hardware-based {{MFTs}}, set the <strong>{{MFT_ENUM_FLAG_HARDWARE}}</strong> flag. Otherwise, this attribute is optional.</td></tr> <tr><td> {{MFT_CODEC_MERIT_Attribute}} </td><td> <p>Optional. Contains the merit value of a hardware codec.</p> <p>If this attribute is set and its value is greater than zero, the activation object calls <strong>{{MFGetMFTMerit}}</strong> to get the trusted merit value for the {{MFT}}. If the trusted merit is less than the value of this attribute, the activation object's <strong>{{IMFActivate::ActivateObject}}</strong> method fails and returns <strong>{{MF_E_INVALID_CODEC_MERIT}}</strong>.</p> </td></tr> <tr><td> {{MFT_ENUM_HARDWARE_URL_Attribute}} </td><td>Required for hardware-based {{MFTs}}. Specifies the symbolic link for the hardware device. The device proxy uses this value to configure the {{MFT}}.</td></tr> <tr><td> {{MFT_FIELDOFUSE_UNLOCK_Attribute}} </td><td> <p>Optional. Contains an <strong>{{IMFFieldOfUseMFTUnlock}}</strong> reference, which can be used to unlock the {{MFT}}. The <strong>{{IMFFieldOfUseMFTUnlock}}</strong> interface is used with {{MFTs}} that have usage restrictions.</p> <p>If this attribute is set and the {{MF_TRANSFORM_FLAGS_Attribute}} attribute contains the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag, the activation object calls <strong>{{IMFFieldOfUseMFTUnlock::Unlock}}</strong> when it creates the {{MFT}}. An application can also set the {{MFT_FIELDOFUSE_UNLOCK_Attribute}} attribute without setting the <strong>{{MFT_ENUM_FLAG_FIELDOFUSE}}</strong> flag. In that case, the application must call <strong>Unlock</strong>.</p> </td></tr> <tr><td> {{MFT_PREFERRED_ENCODER_PROFILE}} </td><td> <p>Optional. Contains the encoding profile for an encoder. The value of this attribute is an <strong>{{IMFAttributes}}</strong> reference.</p> <p>If this attribute is set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object uses the encoding profile to configure the {{MFT}}. The {{MFT}} must expose either <strong>{{ICodecAPI}}</strong> or <strong>{{IPropertyStore}}</strong> for this purpose.</p> </td></tr> <tr><td> {{MFT_PREFERRED_OUTPUTTYPE_Attribute}} </td><td> <p>Optional. Specifies the preferred output format for an encoder.</p> <p>If this attribute set and the value of the {{MF_TRANSFORM_CATEGORY_Attribute}} attribute is <strong>{{MFT_CATEGORY_AUDIO_ENCODER}}</strong> or <strong>{{MFT_CATEGORY_VIDEO_ENCODER}}</strong>, the activation object sets this media type on the {{MFT}}.</p> </td></tr> </table><p>?</p><p>For more information about activation objects, see Activation Objects. </p> + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFActivate}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</code> enumeration defines flags that describe an input buffer.</p> + + + <dd> <p>The beginning of the data is a synchronization point.</p> </dd> + + + <dd> <p>The buffer's time stamp is valid.</p> <p>The buffer's indicated time length is valid.</p> </dd> + + + <dd> <p>The buffer's indicated time length is valid.</p> </dd> + + + + + + + + <p>Media Foundation transforms ({{MFTs}}) are an evolution of the transform model first introduced with DirectX Media Objects ({{DMOs}}). This topic summarizes the main ways in which {{MFTs}} differ from {{DMOs}}. Read this topic if you are already familiar with the {{DMO}} interfaces, or if you want to convert an existing {{DMO}} into an {{MFT}}.</p><p>This topic contains the following sections:</p><p> </p><ul> <li>{{Number}}</li> <li>{{Format}}</li> <li>{{Streaming}}<ul> <li>{{Allocating}}</li> <li>{{Processing}}</li> <li>{{Flushing}}</li> <li>{{Stream}}</li> </ul> </li> <li>{{Miscellaneous}}</li> <li>{{Flags}}<ul> <li>{{ProcessInput}}</li> <li>{{ProcessOutput}}</li> <li>{{GetInputStatus}}</li> <li>{{GetOutputStatus}}</li> <li>{{GetInputStreamInfo}}</li> <li>{{GetOutputStreamInfo}}</li> <li>{{SetInputType/SetOutputType}}</li> </ul> </li> <li>{{Error}}</li> <li>{{Creating}}</li> <li>{{Related}}</li> </ul> + + + + <p> </p><p>The <code>{{DMO_INPUT_STREAM_INFO_FLAGS}}</code> enumeration defines flags that describe an input stream.</p> + + + <dd> <p>The stream requires whole samples. Samples must not span multiple buffers, and buffers must not contain partial samples.</p> </dd> + + + <dd> <p>Each buffer must contain exactly one sample.</p> </dd> + + + <dd> <p>All the samples in this stream must be the same size.</p> </dd> + + + <dd> <p>The {{DMO}} performs lookahead on the incoming data, and may hold multiple input buffers for this stream.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{DMO_SET_TYPE_FLAGS}}</code> enumeration defines flags for setting the media type on a stream.</p> + <p>The {{DMO_SET_TYPEF_TEST_ONLY}} and {{DMO_SET_TYPEF_CLEAR}} flags are mutually exclusive. Do not set both flags.</p> + + + <dd> <p>Test the media type but do not set it.</p> </dd> + + + <dd> <p>Clear the media type that was set for the stream.</p> </dd> + + + + + <p> </p><p>The <code>{{DMO_PROCESS_OUTPUT_FLAGS}}</code> enumeration defines flags that specify output processing requests.</p> + + + <dd> <p>Discard the output when the reference to the output buffer is <strong>{{NULL}}</strong>.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <strong>{{DMO_MEDIA_TYPE}}</strong> structure describes the format of the data used by a stream in a Microsoft DirectX Media Object ({{DMO}}).</p> + <p>This structure is identical to the DirectShow <strong>{{AM_MEDIA_TYPE}}</strong> structure. The <strong>bFixedSizeSamples</strong>, <strong>bTemporalCompression</strong>, and <strong>lSampleSize</strong> members are for compatibility with DirectShow. Other {{DMO}} clients are not required to use them.</p> + + + <dd> <p>Major type {{GUID}} of the stream.</p> </dd> + + + <dd> <p>Subtype {{GUID}} of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are of a fixed size. This field is informational only. For audio, it is generally set to <strong>{{TRUE}}</strong>. For video, it is usually <strong>{{TRUE}}</strong> for uncompressed video and <strong>{{FALSE}}</strong> for compressed video.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, samples are compressed using temporal (interframe) compression. (A value of <strong>{{TRUE}}</strong> indicates that not all frames are key frames.) This field is informational only.</p> </dd> + + + <dd> <p>Size of the sample in bytes. For compressed data, the value can be zero.</p> </dd> + + + <dd> <p>{{GUID}} specifying the format type. The <strong>pbFormat</strong> member points to the corresponding format structure. Format types include the following.</p> <table> <tr><th>Format type</th><th>Format structure</th></tr> <tr><td><dl> <dt><strong>{{FORMAT_DvInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{DVINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEG2Video}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG2VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_MPEGVideo}}</strong></dt> </dl> </td><td> <p> <strong>{{MPEG1VIDEOINFO}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_None}}</strong></dt> </dl> </td><td> <p>None.</p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_VideoInfo2}}</strong></dt> </dl> </td><td> <p> <strong>{{VIDEOINFOHEADER2}}</strong> </p> </td></tr> <tr><td><dl> <dt><strong>{{FORMAT_WaveFormatEx}}</strong></dt> </dl> </td><td> <p> <strong>{{WAVEFORMATEX}}</strong> </p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Not used. Set to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Size of the format block of the media type.</p> </dd> + + + <dd> <p>Pointer to the format structure. The structure type is specified by the <strong>formattype</strong> member. The format structure must be present, unless <strong>formattype</strong> is {{GUID_NULL}} or {{FORMAT_None}}.</p> </dd> + + + + + + + + <p> </p><p>The <code>{{IMediaBuffer}}</code> interface provides methods for manipulating a data buffer. Buffers passed to the <strong>{{IMediaObject::ProcessInput}}</strong> and <strong>ProcessOutput</strong> methods must implement this interface.</p> + + + + + + + + + + + + + <p> </p><p>The <code>{{IMediaObject}}</code> interface provides methods for manipulating a Microsoft DirectX Media Object ({{DMO}}).</p> + + + + + + + + + + <p> </p><p>The <code>GetOutputStreamInfo</code> method retrieves information about an output stream; for example, whether the stream is discardable, and whether it uses a fixed sample size. This information never changes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a bitwise combination of zero or more <strong>{{DMO_OUTPUT_STREAM_INFO_FLAGS}}</strong> flags.</p> </dd> + + + + + <p> </p><p>The <code>GetInputType</code> method retrieves a preferred media type for a specified input stream.</p> + <p>Call this method to enumerate an input stream's preferred media types. The {{DMO}} assigns each media type an index value in order of preference. The most preferred type has an index of zero. To enumerate all the types, make successive calls while incrementing the type index until the method returns {{DMO_E_NO_MORE_ITEMS}}. The {{DMO}} is not guaranteed to enumerate every media type that it supports.</p><p>The format block in the returned type might be <strong>{{NULL}}</strong>. If so, the format type is {{GUID_NULL}}. Check the format type before dereferencing the format block.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block. (This function is also safe to call when the format block is <strong>{{NULL}}</strong>.)</p><p>To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method. Setting the media type on one stream can change another stream's preferred types. In fact, a stream might not have a preferred type until the type is set on another stream. For example, a decoder might not have a preferred output type until the input type is set. However, the {{DMO}} is not required to update its preferred types dynamically in this fashion. Thus, the types returned by this method are not guaranteed to be valid; they might fail when used in the <strong>SetInputType</strong> method.</p><p>To test whether a particular media type is acceptable, call <strong>SetInputType</strong> with the {{DMO_SET_TYPEF_TEST_ONLY}} flag.</p><p>To test whether the <em>dwTypeIndex</em> parameter is in range, set <em>pmt</em> to <strong>{{NULL}}</strong>. The method returns {{S_OK}} if the index is in range, or {{DMO_E_NO_MORE_ITEMS}} if the index is out of range.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NO_MORE_ITEMS}}</strong></dt> </dl> </td><td> <p>Type index is out of range.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Zero-based index on the set of acceptable media types.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller, or <strong>{{NULL}}</strong>. If this parameter is non-<strong>{{NULL}}</strong>, the method fills the structure with the media type. You can use the value <strong>{{NULL}}</strong> to test whether the type index is in range, by checking the return code.</p> </dd> + + + + + + + + <p> </p><p>The <code>SetInputType</code> method sets the media type on an input stream, or tests whether a media type is acceptable.</p> + <p>Call this method to test, set, or clear the media type on an input stream:</p><ul> <li>To test the media type without setting it, use the {{DMO_SET_TYPEF_TEST_ONLY}} flag. If the media type is not acceptable, the method returns {{S_FALSE}}.</li> <li>To set the media type, set <em>dwFlags</em> to zero. If the media type is not acceptable, the method returns {{DMO_E_TYPE_NOT_ACCEPTED}}.</li> <li>To clear the current media type (if any), use the {{DMO_SET_TYPEF_CLEAR}} flag and set <em>pmt</em> to <strong>{{NULL}}</strong>. When the method returns, the stream no longer has a media type. The {{DMO}} cannot process samples until the application sets a new media type.</li> </ul><p>The media types that are currently set on other streams can affect whether the media type is acceptable.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_ACCEPTED}}</strong></dt> </dl> </td><td> <p>Media type was not accepted</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Media type is not acceptable</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Media type was set successfully, or is acceptable</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure that specifies the media type.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_SET_TYPE_FLAGS}}</strong> enumeration.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputCurrentType</code> method retrieves the media type that was set for an input stream, if any.</p> + <p>The caller must set the media type for the stream before calling this method. To set the media type, call the <strong>{{IMediaObject::SetInputType}}</strong> method.</p><p>If the method succeeds, call <strong>MoFreeMediaType</strong> to free the format block.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a <strong>{{DMO_MEDIA_TYPE}}</strong> structure allocated by the caller. The method fills the structure with the media type.</p> </dd> + + + + + + + + <p> </p><p>The <code>GetInputSizeInfo</code> method retrieves the buffer requirements for a specified input stream.</p> + <p>The buffer requirements may depend on the media types of the various streams. Before calling this method, set the media type of each stream by calling the <strong>{{IMediaObject::SetInputType}}</strong> and <strong>{{IMediaObject::SetOutputType}}</strong> methods. If the media types have not been set, this method might return an error.</p><p>If the {{DMO}} performs lookahead on the input stream, it returns the {{DMO_INPUT_STREAMF_HOLDS_BUFFERS}} flag in the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method. During processing, the {{DMO}} holds up to the number of bytes indicated by the <em>pcbMaxLookahead</em> parameter. The application must allocate enough buffers for the {{DMO}} to hold this much data.</p><p>A buffer is <em>aligned</em> if the buffer's start address is a multiple of <em>*pcbAlignment</em>. The alignment must be a power of two. Depending on the microprocessor, reads and writes to an aligned buffer might be faster than to an unaligned buffer. Also, some microprocessors do not support unaligned reads and writes.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>Media type was not set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the minimum size of an input buffer for this stream, in bytes.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the maximum amount of data that the {{DMO}} will hold for lookahead, in bytes. If the {{DMO}} does not perform lookahead on the stream, the value is zero.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required buffer alignment, in bytes. If the input stream has no alignment requirement, the value is 1.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>Flush</code> method flushes all internally buffered data.</p> + <p>The {{DMO}} performs the following actions when this method is called:</p><ul> <li>Releases any <strong>{{IMediaBuffer}}</strong> references it holds.</li> <li>Discards any values that specify the time stamp or sample length for a media buffer.</li> <li>Reinitializes any internal states that depend on the contents of a media sample.</li> </ul><p>Media types, maximum latency, and locked state do not change.</p><p>When the method returns, every input stream accepts data. Output streams cannot produce any data until the application calls the <strong>{{IMediaObject::ProcessInput}}</strong> method on at least one input stream.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + + <p> </p><p>The <code>Discontinuity</code> method signals a discontinuity on the specified input stream.</p> + <p>A discontinuity represents a break in the input. A discontinuity might occur because no more data is expected, the format is changing, or there is a gap in the data. After a discontinuity, the {{DMO}} does not accept further input on that stream until all pending data has been processed. The application should call the <strong>{{IMediaObject::ProcessOutput}}</strong> method until none of the streams returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag.</p><p>This method might fail if it is called before the client sets the input and output types on the {{DMO}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>The {{DMO}} is not accepting input.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_TYPE_NOT_SET}}</strong></dt> </dl> </td><td> <p>The input and output types have not been set.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + + + + + + + + + + + + <p> </p><p>The <code>ProcessInput</code> method delivers a buffer to the specified input stream.</p> + <p>The input buffer specified in the <em>pBuffer</em> parameter is read-only. The {{DMO}} will not modify the data in this buffer. All write operations occur on the output buffers, which are given in a separate call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>If the {{DMO}} does not process all the data in the buffer, it keeps a reference count on the buffer. It releases the buffer once it has generated all the output, unless it needs to perform lookahead on the data. (To determine whether a {{DMO}} performs lookahead, call the <strong>{{IMediaObject::GetInputStreamInfo}}</strong> method.)</p><p>If this method returns {{DMO_E_NOTACCEPTING}}, call <strong>ProcessOutput</strong> until the input stream can accept more data. To determine whether the stream can accept more data, call the <strong>{{IMediaObject::GetInputStatus}}</strong> method.</p><p>If the method returns {{S_FALSE}}, no output was generated from this input and the application does not need to call <strong>ProcessOutput</strong>. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index.</p> </td></tr> <tr><td> <dl> <dt><strong>{{DMO_E_NOTACCEPTING}}</strong></dt> </dl> </td><td> <p>Data cannot be accepted.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output to process.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an input stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to the buffer's <strong>{{IMediaBuffer}}</strong> interface.</p> </dd> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_INPUT_DATA_BUFFER_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Time stamp that specifies the start time of the data in the buffer. If the buffer has a valid time stamp, set the {{DMO_INPUT_DATA_BUFFERF_TIME}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + <dd> <p>Reference time specifying the duration of the data in the buffer. If this value is valid, set the {{DMO_INPUT_DATA_BUFFERF_TIMELENGTH}} flag in the <em>dwFlags</em> parameter. Otherwise, the {{DMO}} ignores this value.</p> </dd> + + + + + <p> </p><p>The <code>ProcessOutput</code> method generates output from the current input data.</p> + <p>The <em>pOutputBuffers</em> parameter points to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures. The application must allocate one structure for each output stream. To determine the number of output streams, call the <strong>{{IMediaObject::GetStreamCount}}</strong> method. Set the <em>cOutputBufferCount</em> parameter to this number.</p><p>Each <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure contains a reference to a buffer's <strong>{{IMediaBuffer}}</strong> interface. The application allocates these buffers. The other members of the structure are status fields. The {{DMO}} sets these fields if the method succeeds. If the method fails, their values are undefined.</p><p>When the application calls <code>ProcessOutput</code>, the {{DMO}} processes as much input data as possible. It writes the output data to the output buffers, starting from the end of the data in each buffer. (To find the end of the data, call the <strong>{{IMediaBuffer::GetBufferAndLength}}</strong> method.) The {{DMO}} never holds a reference count on an output buffer.</p><p>If the {{DMO}} fills an entire output buffer and still has input data to process, the {{DMO}} returns the {{DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE}} flag in the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure. The application should check for this flag by testing the <strong>dwStatus</strong> member of each structure.</p><p>If the method returns {{S_FALSE}}, no output was generated. However, a {{DMO}} is not required to return {{S_FALSE}} in this situation; it might return {{S_OK}}.</p><p><strong>Discarding data:</strong></p><p>You can discard data from a stream by setting the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag in the <em>dwFlags</em> parameter. For each stream that you want to discard, set the <strong>pBuffer</strong> member of the <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structure to <strong>{{NULL}}</strong>.</p><p>For each stream in which <strong>pBuffer</strong> is <strong>{{NULL}}</strong>:</p><ul> <li>If the {{DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER}} flag is set, and the stream is discardable or optional, the {{DMO}} discards the data.</li> <li>If the flag is set but the stream is neither discardable nor optional, the {{DMO}} discards the data if possible. It is not guaranteed to discard the data.</li> <li>If the flag is not set, the {{DMO}} does not produce output data for that stream, but does not discard the data.</li> </ul><p>To check whether a stream is discardable or optional, call the <strong>{{IMediaObject::GetOutputStreamInfo}}</strong> method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>No output was generated</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Bitwise combination of zero or more flags from the <strong>{{DMO_PROCESS_OUTPUT_FLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>Number of output buffers.</p> </dd> + + + <dd> <p>Pointer to an array of <strong>{{DMO_OUTPUT_DATA_BUFFER}}</strong> structures containing the output buffers. Specify the size of the array in the <em>cOutputBufferCount</em> parameter.</p> </dd> + + + <dd> <p>Pointer to a variable that receives a reserved value (zero). The application should ignore this value.</p> </dd> + + + + + <p> </p><p>The <code>Lock</code> method acquires or releases a lock on the {{DMO}}. Call this method to keep the {{DMO}} serialized when performing multiple operations.</p> + <p>This method prevents other threads from calling methods on the {{DMO}}. If another thread calls a method on the {{DMO}}, the thread blocks until the lock is released.</p><p>If you are using the Active Template Library ({{ATL}}) to implement a {{DMO}}, the name of the Lock method conflicts with the <strong>{{CComObjectRootEx::Lock}}</strong> method. To work around this problem, define the preprocessor symbol {{FIX_LOCK_NAME}} before including the header file Dmo.h:</p><pre> #define {{FIX_LOCK_NAME}} +#include &lt;dmo.h&gt; +</pre><p>This directive causes the preprocessor to rename the <strong>{{IMediaObject}}</strong> method to <em>{{DMOLock}}</em>. In your {{DMO}}, implement the method as <em>{{DMOLock}}</em>. In your implementation, call the {{ATL}} <strong>Lock</strong> or <strong>Unlock</strong> method, depending on the value of <em>bLock</em>. Applications can still invoke the method using the name <em>Lock</em> because the vtable order does not change.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_FAIL}}</strong></dt> </dl> </td><td> <p>Failure</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Value that specifies whether to acquire or release the lock. If the value is non-zero, a lock is acquired. If the value is zero, the lock is released.</p> </dd> + + + + + + + + <p> </p><p>The <code>Next</code> method retrieves a specified number of items in the enumeration sequence.</p> + <p>If the method succeeds, the arrays given by the <em>pCLSID</em> and <em>Names</em> parameters are filled with {{CLSIDs}} and wide-character strings. The value of *<em>pcItemsFetched</em> specifies the number of items returned in these arrays.</p><p>The method returns {{S_OK}} if it retrieves the requested number of items (in other words, if *<em>pcItemsFetched</em> equals <em>cItemsToFetch</em>). Otherwise, it returns {{S_FALSE}} or an error code.</p><p>The caller must free the memory allocated for each string returned in the <em>Names</em> parameter, using the <strong>CoTaskMemFree</strong> function.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>Insufficient memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>Retrieved fewer items than requested.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Retrieved the requested number of items.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Number of items to retrieve.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the {{CLSIDs}} of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Array of size <em>cItemsToFetch</em> that is filled with the friendly names of the enumerated {{DMOs}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the actual number of items retrieved. Can be <strong>{{NULL}}</strong> if <em>cItemsToFetch</em> equals 1.</p> </dd> + + + + + + + + <p> </p><p>The <code>Reset</code> method resets the enumeration sequence to the beginning.</p> + <p>Returns {{S_OK}}.</p> + + + + + + + + + + + + + <p> </p><p>The <code>Clone</code> method creates a copy of the {{DMO}} in its current state.</p> + <p>If the method succeeds, the <strong>{{IMediaObjectInPlace}}</strong> interface that it returns has an outstanding reference count. Be sure to release the interface when you are finished using it.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Address of a reference to receive the new {{DMO}}'s <strong>{{IMediaObjectInPlace}}</strong> interface.</p> </dd> + + + + + <p> </p><p>The <code>GetLatency</code> method retrieves the latency introduced by this {{DMO}}.</p> + <p>This method returns the average time required to process each buffer. This value usually depends on factors in the run-time environment, such as the processor speed and the {{CPU}} load. One possible way to implement this method is for the {{DMO}} to keep a running average based on historical data.</p> + <p>Returns {{S_OK}} if successful. Otherwise, returns an <strong>{{HRESULT}}</strong> value indicating the cause of the error.</p> + + + <dd> <p>Pointer to a variable that receives the latency, in 100-nanosecond units.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p> </p><p>The <code>GetCurrentOperationMode</code> method retrieves the optimization features in effect.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the current features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p> </p><p>The <code>GetCurrentSampleRequirements</code> method retrieves the optimization features required to process the next sample, given the features already agreed to by the application.</p> + <p>After an application calls the <strong>{{IDMOVideoOutputOptimizations::SetOperationMode}}</strong> method, it must provide all the features it has agreed to. However, the {{DMO}} might not require every feature on every sample. This method enables the {{DMO}} to waive an agreed-upon feature for one sample.</p><p>Before processing a sample, the application can call this method. If the {{DMO}} does not require a given feature in order to process the next sample, it omits the corresponding flag from the <em>pdwRequestedFeatures</em> parameter. For the next sample only, the application can ignore the feature. The results of this method are valid only for the next call to the <strong>{{IMediaObject::ProcessOutput}}</strong> method.</p><p>The {{DMO}} will return only the flags that were agreed to in the <strong>SetOperationMode</strong> method. In other words, you cannot dynamically enable new features with this method.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value. Possible values include those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{DMO_E_INVALIDSTREAMINDEX}}</strong></dt> </dl> </td><td> <p>Invalid stream index</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p><strong>{{NULL}}</strong> reference argument</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success</p> </td></tr> </table><p>?</p> + + + <dd> <p>Zero-based index of an output stream on the {{DMO}}.</p> </dd> + + + <dd> <p>Pointer to a variable that receives the required features. The returned value is a bitwise combination of zero or more flags from the <strong>{{DMO_VIDEO_OUTPUT_STREAM_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Defines error status codes for the Media Engine.</p> + <p>The values greater than zero correspond to error codes defined for the <strong>MediaError</strong> object in {{HTML5}}.</p> + + + <dd> <p>No error.</p> </dd> + + + <dd> <p>The process of fetching the media resource was stopped at the user's request. </p> </dd> + + + <dd> <p>A network error occurred while fetching the media resource. </p> </dd> + + + <dd> <p>An error occurred while decoding the media resource. </p> </dd> + + + <dd> <p>The media resource is not supported. </p> </dd> + + + <dd> <p>An error occurred while encrypting the media resource.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + + + <p>Defines event codes for the Media Engine. </p> + <p>The application receives Media Engine events through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. The <strong>EventNotify</strong> method includes two event parameters, <em>param1</em> and <em>param2</em>. The meaning of the parameters depends on the event code. If the event description does not list any parameters, ignore the values of <em>param1</em> and <em>param2</em>.</p><p>Values below 1000 correspond to events defined in {{HTML}} 5 for media elements.</p> + + + <dd> <p>The Media Engine has started to load the source. See <strong>{{IMFMediaEngine::Load}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine is loading the source.</p> </dd> + + + <dd> <p>The Media Engine has suspended a load operation.</p> </dd> + + + <dd> <p>The Media Engine cancelled a load operation that was in progress. </p> </dd> + + + <dd> <p>An error occurred.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A member of the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</td></tr> <tr><td><em>param2</em></td><td>An <strong>{{HRESULT}}</strong> error code, or zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine has switched to the <strong>{{MF_MEDIA_ENGINE_NETWORK_EMPTY}}</strong> state. This can occur when the <strong>{{IMFMediaEngine::Load}}</strong> method is called, or if an error occurs during the <strong>Load</strong> method. See <strong>{{IMFMediaEngine::GetNetworkState}}</strong>.</p> </dd> + + + <dd> <p>The <strong>Load</strong> algorithm is stalled, waiting for data.</p> </dd> + + + <dd> <p>The Media Engine is switching to the playing state. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>The media engine has paused. See <strong>{{IMFMediaEngine::Pause}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough source data to determine the duration and dimensions of the source.</p> </dd> + + + <dd> <p>The Media Engine has loaded enough data to render some content (for example, a video frame).</p> </dd> + + + <dd> <p>Playback has stopped because the next frame is not available.</p> </dd> + + + <dd> <p>Playback has started. See <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + <dd> <p>Playback can start, but the Media Engine might need to stop to buffer more data.</p> </dd> + + + <dd> <p>The Media Engine can probably play through to the end of the resource, without stopping to buffer data.</p> </dd> + + + <dd> <p>The Media Engine has started seeking to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has seeked to a new playback position. See <strong>{{IMFMediaEngine::SetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>The playback position has changed. See <strong>{{IMFMediaEngine::GetCurrentTime}}</strong>.</p> </dd> + + + <dd> <p>Playback has reached the end of the source. This event is not sent if the <strong>GetLoop</strong>is <strong>{{TRUE}}</strong>.</p> </dd> + + + <dd> <p>The playback rate has changed. See <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> </dd> + + + <dd> <p>The duration of the media source has changed. See <strong>{{IMFMediaEngine::GetDuration}}</strong>.</p> </dd> + + + <dd> <p>The audio volume changed. See <strong>{{IMFMediaEngine::SetVolume}}</strong>.</p> </dd> + + + <dd> <p>The output format of the media source has changed.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>Zero if the video format changed, 1 if the audio format changed.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The Media Engine flushed any pending events from its queue.</p> </dd> + + + <dd> <p>The playback position reached a timeline marker. See <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong>.</p> </dd> + + + <dd> <p>The audio balance changed. See <strong>{{IMFMediaEngineEx::SetBalance}}</strong>.</p> </dd> + + + <dd> <p>The Media Engine has finished downloading the source data.</p> </dd> + + + <dd> <p>The media source has started to buffer data.</p> </dd> + + + <dd> <p>The media source has stopped buffering data.</p> </dd> + + + <dd> <p>The <strong>{{IMFMediaEngineEx::FrameStep}}</strong> method completed.</p> </dd> + + + <dd> <p>The Media Engine's <strong>Load</strong> algorithm is waiting to start.</p> <table> <tr><th>Event Parameter</th><th>Description</th></tr> <tr><td><em>param1</em></td><td>A handle to a waitable event, of type <strong>{{HANDLE}}</strong>.</td></tr> <tr><td><em>param2</em></td><td>Zero.</td></tr> </table> <p>?</p> <p>If Media Engine is created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong> flag, the Media Engine sends the <strong>{{MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE}}</strong> event at the start of the <strong>Load</strong> algorithm. The <em>param1</em> parameter is a handle to a waitable event. The <strong>Load</strong> thread waits for the application to signal the event by calling <strong>SetEvent</strong>.</p> <p>If the Media Engine is not created with the <strong>{{MF_MEDIA_ENGINE_WAITFORSTABLE_STATE}}</strong>, it does not send this event, and the <strong>Load</strong> thread does not wait to be signalled.</p> </dd> + + + <dd> <p>The first frame of the media source is ready to render.</p> </dd> + + + <dd> <p>Raised when a new track is added or removed.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when there is new information about the Output Protection Manager ({{OPM}}). </p> <p>This event will be raised when an {{OPM}} failure occurs, but {{ITA}} allows fallback without the {{OPM}}. In this case, constriction can be applied. </p> <p>This event will not be raised when there is an {{OPM}} failure and the fallback also fails. For example, if {{ITA}} blocks playback entirely when {{OPM}} cannot be established.</p> <p>Supported in Windows?8.1 and later.</p> </dd> + + + <dd> <p>Raised when one of the component streams of a media stream fails. This event is only raised if the media stream contains other component streams that did not fail.</p> </dd> + + + + + <p>Defines network status codes for the Media Engine.</p> + + + <dd> <p>The initial state.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, and has selected a media resource, but is not using the network.</p> </dd> + + + <dd> <p>The Media Engine is loading a media resource.</p> </dd> + + + <dd> <p>The Media Engine has started the resource selection algorithm, but has not selected a media resource.</p> </dd> + + + + + <p>Defines ready-state values for the Media Engine.</p> + <p>These values correspond to constants defined for the <strong>{{HTMLMediaElement}}.readyState</strong> attribute in {{HTML5}}.</p> + + + <dd> <p>No data is available.</p> </dd> + + + <dd> <p>Some metadata is available, including the duration and, for video files, the video dimensions. No media data is available.</p> </dd> + + + <dd> <p>There is media data for the current playback position, but not enough data for playback or seeking.</p> </dd> + + + <dd> <p>There is enough media data to enable some playback or seeking. The amount of data might be a little as the next video frame.</p> </dd> + + + <dd> <p>There is enough data to play the resource, based on the current rate at which the resource is being fetched. </p> </dd> + + + + + <p>Specifies the likelihood that the Media Engine can play a specified type of media resource.</p> + + + <dd> <p>The Media Engine cannot play the resource.</p> </dd> + + + <dd> <p>The Media Engine might be able to play the resource.</p> </dd> + + + <dd> <p>The Media Engine can probably play the resource.</p> </dd> + + + + + <p>Defines preload hints for the Media Engine. These values correspond to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + + + <dd> <p>The <strong>preload</strong> attribute is missing. </p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is an empty string. This value is equivalent to <strong>{{MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC}}</strong>.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "none". This value is a hint to the user agent not to preload the resource.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "metadata". This value is a hint to the user agent to fetch the resource metadata.</p> </dd> + + + <dd> <p>The <strong>preload</strong> attribute is "auto". This value is a hint to the user agent to preload the entire resource.</p> </dd> + + + + + <p>Specifies the layout for a packed 3D video frame.</p> + + + <dd> <p>None.</p> </dd> + + + <dd> <p>The views are packed side-by-side in a single frame.</p> </dd> + + + <dd> <p>The views are packed top-to-bottom in a single frame.</p> </dd> + + + + + <p>Identifies statistics that the Media Engine tracks during playback. To get a playback statistic from the Media Engine, call <strong>{{IMFMediaEngineEx::GetStatistics}}</strong>.</p><p>In the descriptions that follow, the data type and value-type tag for the <strong>{{PROPVARIANT}}</strong> are listed in parentheses.</p> + + + + <p>Defines values for the media engine seek mode.</p> + <p>This enumeration is used with the <strong>MediaEngineEx::SetCurrentTimeEx</strong>.</p> + + + <dd> <p>Specifies normal seek.</p> </dd> + + + <dd> <p>Specifies an approximate seek. </p> </dd> + + + + + <p>Specifies media engine extension types.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Specifies the content protection requirements for a video frame.</p> + + + <dd> <p>The video frame should be protected.</p> </dd> + + + <dd> <p>Direct3D surface protection must be applied to any surface that contains the frame.</p> </dd> + + + <dd> <p>Direct3D anti-screen-scrape protection must be applied to any surface that contains the frame.</p> </dd> + + + + + + + + + + + + + + <p>Defines the different ready states of the Media Source Extension.</p> + + + <dd> <p>The media source is closed.</p> </dd> + + + <dd> <p>The media source is open.</p> </dd> + + + <dd> <p>The media source is ended.</p> </dd> + + + + + <p>Defines the different error states of the Media Source Extension.</p> + + + <dd> <p>Specifies no error.</p> </dd> + + + <dd> <p>Specifies an error with the network.</p> </dd> + + + <dd> <p>Specifies an error with decoding.</p> </dd> + + + <dd> <p>Specifies an unknown error.</p> </dd> + + + + + <p>Defines media key error codes for the media engine.</p> + <p><strong>{{MF_MEDIA_ENGINE_KEYERR}}</strong> is used with the <em>code</em> parameter of <strong>{{IMFMediaKeySessionNotify::KeyError}}</strong> and the <em>code</em> value returned from <strong>{{IMFMediaKeySession::GetError}}</strong>.</p> + + + <dd> <p>Unknown error occurred.</p> </dd> + + + <dd> <p>An error with the client occurred.</p> </dd> + + + <dd> <p>An error with the service occurred.</p> </dd> + + + <dd> <p>An error with the output occurred.</p> </dd> + + + <dd> <p>An error occurred related to a hardware change.</p> </dd> + + + <dd> <p>An error with the domain occurred.</p> </dd> + + + + + + + + <p>Defines the status of the Output Protection Manager ({{OPM}}).</p> + + + + <p>Contains flags for the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Contains flags that specify whether the Media Engine will play protected content, and whether the Media Engine will use the Protected Media Path ({{PMP}}).</p> + <p>These flags are used with the {{MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS}} attribute.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind of timed text track.</p> + + + <dd> <p>The kind of timed text track is unknown.</p> </dd> + + + <dd> <p>The kind of timed text track is subtitles.</p> </dd> + + + <dd> <p>The kind of timed text track is closed captions.</p> </dd> + + + <dd> <p>The kind of timed text track is metadata.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the units in which the timed text is measured.</p> + + + <dd> <p>The timed text is measured in pixels.</p> </dd> + + + <dd> <p>The timed text is measured as a percentage.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the font style of the timed text.</p> + + + <dd> <p>The font style is normal, sometimes referred to as roman.</p> </dd> + + + <dd> <p>The font style is oblique.</p> </dd> + + + <dd> <p>The font style is italic.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned in its parent block element. </p> + + + <dd> <p>Text is aligned at the start of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned at the end of its parent block element.</p> </dd> + + + <dd> <p>Text is aligned in the center of its parent block element.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is aligned with the display. </p> + + + <dd> <p>Text is aligned before an element.</p> </dd> + + + <dd> <p>Text is aligned after an element.</p> </dd> + + + <dd> <p>Text is aligned in the center between elements.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text is decorated (underlined and so on). </p> + + + <dd> <p>Text isn't decorated.</p> </dd> + + + <dd> <p>Text is underlined.</p> </dd> + + + <dd> <p>Text has a line through it.</p> </dd> + + + <dd> <p>Text has a line over it.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the sequence in which text is written on its parent element.</p> + + + <dd> <p>Text is written from left to right and top to bottom.</p> </dd> + + + <dd> <p>Text is written from right to left and top to bottom.</p> </dd> + + + <dd> <p>Text is written from top to bottom and right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom and left to right.</p> </dd> + + + <dd> <p>Text is written from left to right.</p> </dd> + + + <dd> <p>Text is written from right to left.</p> </dd> + + + <dd> <p>Text is written from top to bottom.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies how text appears when the parent element is scrolled.</p> + + + <dd> <p>Text pops on when the parent element is scrolled.</p> </dd> + + + <dd> <p>Text rolls up when the parent element is scrolled.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the kind error that occurred with a timed text track.</p> + <p>This enumeration is used to return error information from the <strong>{{IMFTimedTextTrack::GetErrorCode}}</strong> method.</p> + + + <dd> <p>No error occurred.</p> </dd> + + + <dd> <p>A fatal error occurred.</p> </dd> + + + <dd> <p>An error occurred with the data format of the timed text track.</p> </dd> + + + <dd> <p>A network error occurred when trying to load the timed text track.</p> </dd> + + + <dd> <p>An internal error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Specifies the type of a timed text cue event.</p> + + + <dd> <p>The cue has become active.</p> </dd> + + + <dd> <p>The cue has become inactive.</p> </dd> + + + <dd> <p>All cues have been deactivated.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Identifies the kind of media stream that failed.</p> + + + <dd> <p>The stream type is unknown.</p> </dd> + + + <dd> <p>The stream is an audio stream.</p> </dd> + + + <dd> <p>The stream is a video stream.</p> </dd> + + + + + + + + <p>Provides the current error status for the Media Engine.</p> + <p>The <strong>{{IMFMediaError}}</strong> interface corresponds to the <strong>MediaError</strong> object in {{HTML5}}.</p><p>To get a reference to this interface, call <strong>{{IMFMediaEngine::GetError}}</strong>.</p> + + + + <p>Gets the error code.</p> + <p>Returns a value from the <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> enumeration.</p> + + + + <p>Gets the extended error code.</p> + <p>Returns an <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> + + + + <p>Sets the error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, specified as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets the extended error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{HRESULT}}</strong> value that gives additional information about the last error.</p> </dd> + + + + + <p>Represents a list of time ranges, where each range is defined by a start and end time.</p> + <p>The <strong>{{IMFMediaTimeRange}}</strong> interface corresponds to the <strong>TimeRanges</strong> interface in {{HTML5}}.</p><p>Several <strong>{{IMFMediaEngine}}</strong> methods return <strong>{{IMFMediaTimeRange}}</strong> references.</p> + + + + <p>Gets the number of time ranges contained in the object.</p> + <p>This method corresponds to the <strong>TimeRanges.length</strong> attribute in {{HTML5}}.</p> + <p>Returns the number of time ranges.</p> + + + + <p>Gets the start time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.start</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the start time, in seconds.</p> </dd> + + + + + <p>Gets the end time for a specified time range.</p> + <p>This method corresponds to the <strong>TimeRanges.end</strong> method in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the time range to query. To get the number of time ranges, call <strong>{{IMFMediaTimeRange::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives the end time, in seconds.</p> </dd> + + + + + <p>Queries whether a specified time falls within any of the time ranges.</p> + <p>This method returns <strong>{{TRUE}}</strong> if the following condition holds for any time range in the list:</p><dl> <dd>(<em>start</em> &lt;= <em>time</em>) &amp;&amp; (<em>time</em> &lt;= <em>end</em>)</dd> </dl> + <p>Returns <strong>{{TRUE}}</strong> if any time range contained in this object spans the value of the <em>time</em> parameter. Otherwise, returns <strong>{{FALSE}}</strong>.</p> + + + <dd> <p>The time, in seconds.</p> </dd> + + + + + <p>Adds a new range to the list of time ranges.</p> + <p>If the new range intersects a range already in the list, the two ranges are combined. Otherwise, the new range is added to the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The start time, in seconds.</p> </dd> + + + <dd> <p>The end time, in seconds.</p> </dd> + + + + + <p>Clears the list of time ranges.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Callback interface for the <strong>{{IMFMediaEngine}}</strong> interface. </p> + <p>To set the callback reference on the Media Engine, set the {{MF_MEDIA_ENGINE_CALLBACK}} attribute in the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Notifies the application when a playback event occurs.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_EVENT}}</strong> enumeration that specifies the event.</p> </dd> + + + <dd> <p>The first event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + <dd> <p>The second event parameter. The meaning of this parameter depends on the event code.</p> </dd> + + + + + <p>Provides the Media Engine with a list of media resources.</p> + <p>The <strong>{{IMFMediaEngineSrcElements}}</strong> interface represents an ordered list of media resources.</p><p>This interface enables the application to provide the same audio/video content in several different encoding formats, such as H.264 and Windows Media Video. If a particular codec is not present on the user's computer, the Media Engine will try the next {{URL}} in the list. To use this interface, do the following:</p><ol> <li>Create an implementation of this interface.</li> <li>Initialize your implementation with a list of {{URLs}}. Optionally, provide {{MIME}} types and media query strings for each {{URL}}.</li> <li>Call the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method.</li> </ol> + + + + <p>Gets the number of source elements in the list.</p> + <p>Returns the number of source elements.</p> + + + + <p>Gets the {{URL}} of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the source element. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{URL}} is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the {{MIME}} type of an element in the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{MIME}} type. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no {{MIME}} type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Gets the intended media type of an element in the list.</p> + <p>The string returned in <em>pMedia</em> should be a media-query string that conforms to the {{W3C}} <em>Media Queries</em> specification.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the source element. To get the number of source elements, call <strong>{{IMFMediaEngineSrcElements::GetLength}}</strong>.</p> </dd> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains a media-query string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>. If no media type is set, this parameter receives the value <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p>Adds a source element to the end of the list.</p> + <p>Any of the parameters to this method can be <strong>{{NULL}}</strong>.</p><p>This method allocates copies of the <strong>{{BSTR}}</strong>s that are passed in.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element, or <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>A media-query string that specifies the intended media type, or <strong>{{NULL}}</strong>. If specified, the string should conform to the {{W3C}} <em>Media Queries</em> specification.</p> </dd> + + + + + <p>Removes all of the source elements from the list.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables an application to play audio or video files.</p> + <p>The Media Engine implements this interface. To create an instance of the Media Engine, call <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong>.</p><p>This interface is extended with <strong>{{IMFMediaEngineEx}}</strong>.</p> + + + + <p>Gets the most recent error status.</p> + <p>This method returns the last error status, if any, that resulted from loading the media source. If there has not been an error, <em>ppError</em> receives the value <strong>{{NULL}}</strong>.</p><p>This method corresponds to the <strong>error</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives either a reference to the <strong>{{IMFMediaError}}</strong> interface, or the value <strong>{{NULL}}</strong>. If the value is <strong>non-{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Sets the current error code.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code, as an <strong>{{MF_MEDIA_ENGINE_ERR}}</strong> value.</p> </dd> + + + + + <p>Sets a list of media sources.</p> + <p>This method corresponds to adding a list of <strong>source</strong> elements to a media element in {{HTML5}}. </p><p>The Media Engine tries to load each item in the <em>pSrcElements</em> list, until it finds one that loads successfully. After this method is called, the application can use the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to update the list at any time. To reload the list, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load a {{URL}}, it sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>If the application also calls <strong>{{IMFMediaEngine::SetSource}}</strong>, the {{URL}} passed to <strong>SetSource</strong> takes precedence over the list given to <strong>SetSourceElements</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEngineSrcElements}}</strong> interface. The caller must implement this interface. </p> </dd> + + + + + <p>Sets the {{URL}} of a media resource.</p> + <p>This method corresponds to setting the <strong>src</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The {{URL}} specified by this method takes precedence over media resources specified in the <strong>{{IMFMediaEngine::SetSourceElements}}</strong> method. To load the {{URL}}, call <strong>{{IMFMediaEngine::Load}}</strong>.</p><p>This method asynchronously loads the {{URL}}. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the {{URL}}, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + + + <p>Gets the {{URL}} of the current media resource, or an empty string if no media resource is present.</p> + <p>This method corresponds to the <strong>currentSrc</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>Initially, the current media resource is empty. It is updated when the Media Engine performs the resource selection algorithm.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a <strong>{{BSTR}}</strong> that contains the {{URL}} of the current media resource. If there is no media resource, <em>ppUrl</em> receives an empty string. The caller must free the <strong>{{BSTR}}</strong> by calling <strong>SysFreeString</strong>.</p> </dd> + + + + + <p>Gets the current network state of the media engine.</p> + <p>This method corresponds to the <strong>networkState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_NETWORK}}</strong> enumeration value.</p> + + + + <p>Gets the preload flag.</p> + <p>This method corresponds to the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> enumeration value.</p> + + + + <p>Sets the preload flag.</p> + <p>This method corresponds to setting the <strong>preload</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. The value is a hint to the user-agent whether to preload the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An <strong>{{MF_MEDIA_ENGINE_PRELOAD}}</strong> value equal to the preload flag.</p> </dd> + + + + + <p>Queries how much resource data the media engine has buffered.</p> + <p>This method corresponds to the <strong>buffered</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The returned <strong>{{IMFMediaTimeRange}}</strong> interface represents a list of time ranges. The time ranges indicate which portions of the media resource have been downloaded. The time range list can be empty.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Loads the current media source.</p> + <p>The main purpose of this method is to reload a list of source elements after updating the list. For more information, see <strong>SetSourceElements</strong>. Otherwise, calling this method is generally not required. To load a new media source, call <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>.</p><p>The <strong>Load</strong> method explictly invokes the Media Engine's media resource loading algorithm. Before calling this method, you must set the media resource by calling <strong>{{IMFMediaEngine::SetSource}}</strong> or <strong>{{IMFMediaEngine::SetSourceElements}}</strong>. </p><p>This method completes asynchronously. When the <strong>Load</strong> operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_LOADSTART}}</strong> event. If no errors occur during the <strong>Load</strong> operation, several other events are generated, including the following.</p><ul> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_LOADEDDATA}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAY}}</strong></li> <li><strong>{{MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH}}</strong></li> </ul><p>If the Media Engine is unable to load the file, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_ERROR}}</strong> event. </p><p>For more information about event handling in the Media Engine, see <strong>{{IMFMediaEngineNotify}}</strong>.</p><p>This method corresponds to the <strong>load</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries how likely it is that the Media Engine can play a specified type of media resource.</p> + <p>This method corresponds to the <strong>canPlayType</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The <strong>canPlayType</strong> attribute defines the following values.</p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>"" (empty string)</td><td>The user-agent cannot play the resource, or the resource type is "application/octet-stream".</td></tr> <tr><td>"probably"</td><td>The user-agent probably can play the resource.</td></tr> <tr><td>"maybe"</td><td>Neither of the previous values applies.</td></tr> </table><p>?</p><p>The value "probably" is used because a {{MIME}} type for a media resource is generally not a complete description of the resource. For example, "video/mp4" specifies an {{MP4}} file with video, but does not describe the codec. Even with the optional codecs parameter, the {{MIME}} type omits some information, such as the actual coded bit rate. Therefore, it is usually impossible to be certain that playback is possible until the actual media resource is opened.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives an <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration value.</p> </dd> + + + + + <p>Gets the ready state, which indicates whether the current media resource can be rendered.</p> + <p>This method corresponds to the <strong>readyState</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns an <strong>{{MF_MEDIA_ENGINE_READY}}</strong> enumeration value.</p> + + + + <p>Queries whether the Media Engine is currently seeking to a new playback position.</p> + <p>This method corresponds to the <strong>seeking</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine is seeking, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the current playback position.</p> + <p>This method corresponds to the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback position, in seconds.</p> + + + + <p>Seeks to a new playback position.</p> + <p>This method corresponds to setting the <strong>currentTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the seek operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKING}}</strong> event. When the seek operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_SEEKED}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new playback position, in seconds.</p> </dd> + + + + + <p>Gets the initial playback position.</p> + <p>This method corresponds to the <strong>initialTime</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns the initial playback position, in seconds.</p> + + + + <p>Gets the duration of the media resource.</p> + <p>This method corresponds to the <strong>duration</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If the duration changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE}}</strong> event. See <strong>{{IMFMediaEngineNotify::EventNotify}}</strong>.</p> + <p>Returns the duration, in seconds. If no media data is available, the method returns not-a-number (NaN). If the duration is unbounded, the method returns an infinite value.</p> + + + + <p>Queries whether playback is currently paused.</p> + <p>This method corresponds to the <strong>paused</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if playback is paused, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Gets the default playback rate.</p> + <p>This method corresponds to getting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p><p>The default playback rate is used for the next call to the <strong>{{IMFMediaEngine::Play}}</strong> method. To change the current playback rate, call <strong>{{IMFMediaEngine::SetPlaybackRate}}</strong>.</p> + <p>Returns the default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the default playback rate.</p> + <p>This method corresponds to setting the <strong>defaultPlaybackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The default playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the current playback rate.</p> + <p>This method corresponds to getting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}. </p> + <p>Returns the playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> + + + + <p>Sets the current playback rate.</p> + <p>This method corresponds to setting the <strong>playbackRate</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The playback rate, as a multiple of normal (1?) playback. A negative value indicates reverse playback.</p> </dd> + + + + + <p>Gets the time ranges that have been rendered.</p> + <p>This method corresponds to the <strong>played</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets the time ranges to which the Media Engine can currently seek.</p> + <p>This method corresponds to the <strong>seekable</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>To find out whether the media source supports seeking, call <strong>{{IMFMediaEngineEx::GetResourceCharacteristics}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Queries whether playback has ended.</p> + <p>This method corresponds to the <strong>ended</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>Returns <strong>{{TRUE}}</strong> if the direction of playback is forward and playback has reached the end of the media resource. Returns <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Queries whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If this method returns <strong>{{TRUE}}</strong>, playback begins automatically after the <strong>{{IMFMediaEngine::Load}}</strong> method completes. Otherwise, playback begins when the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> + <p>Returns <strong>{{TRUE}}</strong> if the Media Engine automatically begins playback, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine automatically begins playback.</p> + <p>This method corresponds to setting the <strong>autoplay</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine automatically begins playback after it loads a media source. Otherwise, playback does not begin until the application calls <strong>{{IMFMediaEngine::Play}}</strong>.</p> </dd> + + + + + <p>Queries whether the Media Engine will loop playback.</p> + <p>This method corresponds to getting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>If looping is enabled, the Media Engine seeks to the start of the content when playback reaches the end.</p> + <p>Returns <strong>{{TRUE}}</strong> if looping is enabled, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Specifies whether the Media Engine loops playback.</p> + <p>If <em>Loop</em> is <strong>{{TRUE}}</strong>, playback loops back to the beginning when it reaches the end of the source.</p><p>This method corresponds to setting the <strong>loop</strong> attribute of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to enable looping, or <strong>{{FALSE}}</strong> to disable looping.</p> </dd> + + + + + <p>Starts playback.</p> + <p>This method corresponds to the <strong>play</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the operation starts, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAY}}</strong> event. When playback is under way, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PLAYING}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Pauses playback.</p> + <p>This method corresponds to the <strong>pause</strong> method of the <strong>{{HTMLMediaElement}}</strong> interface in {{HTML5}}.</p><p>The method completes asynchronously. When the transition to paused is complete, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_PAUSE}} </strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the audio is muted. </p> + <p>Returns <strong>{{TRUE}}</strong> if the audio is muted, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>Mutes or unmutes the audio. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to mute the audio, or <strong>{{FALSE}}</strong> to unmute the audio. </p> </dd> + + + + + <p>Gets the audio volume level.</p> + <p>Returns the volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation).</p> + + + + <p>Sets the audio volume level.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The volume level. Volume is expressed as an attenuation level, where 0.0 indicates silence and 1.0 indicates full volume (no attenuation). </p> </dd> + + + + + + + + <p>Queries whether the current media resource contains a video stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains a video stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain a video stream.</p> + + + + <p>Queries whether the current media resource contains an audio stream.</p> + <p>Returns <strong>{{TRUE}}</strong> if the current media resource contains an audio stream. Returns <strong>{{FALSE}}</strong> if there is no media resource or the media resource does not contain an audio stream.</p> + + + + <p>Gets the size of the video frame, adjusted for aspect ratio.</p> + <p>This method adjusts for the correct picture aspect ratio. +For example, if the encoded frame is 720 ? 420 and the picture aspect ratio is 4:3, the method will return a size equal to 640 ? 480 pixels.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the width in pixels.</p> </dd> + + + <dd> <p>Receives the height in pixels.</p> </dd> + + + + + <p>Gets the picture aspect ratio of the video stream.</p> + <p>The Media Engine automatically converts the pixel aspect ratio to 1:1 (square pixels).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the x component of the aspect ratio.</p> </dd> + + + <dd> <p>Receives the y component of the aspect ratio.</p> </dd> + + + + + <p>Shuts down the Media Engine and releases the resources it is using. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Copies the current video frame to a {{DXGI}} surface or {{WIC}} bitmap.</p> + <p>In frame-server mode, call this method to blit the video frame to a {{DXGI}} or {{WIC}} surface. The application can call this method at any time after the Media Engine loads a video resource. Typically, however, the application calls <strong>{{IMFMediaEngine::OnVideoStreamTick}}</strong> first, to determine whether a new frame is available. If <strong>OnVideoStreamTick</strong> returns <strong>{{S_OK}}</strong>, the application then calls <strong>TransferVideoFrame</strong>.</p><p>The Media Engine scales and letterboxes the video to fit the destination rectangle. It fills the letterbox area with the border color.</p><p>For protected content, call the <strong>{{IMFMediaEngineProtectedContent::TransferVideoFrame}}</strong> method instead of this method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface. </p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Queries the Media Engine to find out whether a new video frame is ready.</p> + <p>In frame-server mode, the application should call this method whenever a vertical blank occurs in the display device. If the method returns <strong>{{S_OK}}</strong>, call <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> to blit the frame to the render target. If the method returns <strong>{{S_FALSE}}</strong>, wait for the next vertical blank and call the method again.</p><p>Do not call this method in rendering mode or audio-only mode. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_FALSE}}</strong></dt> </dl> </td><td> <p>The method succeeded, but the Media Engine does not have a new frame.</p> </td></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>A new video frame is ready for display.</p> </td></tr> </table><p>?</p> + + + <dd> <p>If a new frame is ready, receives the presentation time of the frame.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngine}}</strong> interface.</p> + <p>The <strong>{{IMFMediaEngine}}</strong> interface contains methods that map to the {{HTML5}} media elements. The <strong>{{IMFMediaEngineEx}}</strong> provides additional functionality that does not correspond directly to {{HTML5}}.</p> + + + + <p>Opens a media resource from a byte stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of the byte stream.</p> </dd> + + + <dd> <p>The {{URL}} of the byte stream.</p> </dd> + + + + + <p>Gets a playback statistic from the Media Engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_STATISTIC}}</strong> enumeration that identifies the statistic to get.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the statistic. The data type and meaning of this value depends on the value of <em>StatisticID</em>. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>.</p> </dd> + + + + + <p>Updates the source rectangle, destination rectangle, and border color for the video.</p> + <p>In rendering mode, call this method to reposition the video, update the border color, or repaint the video frame. If all of the parameters are <strong>{{NULL}}</strong>, the method repaints the most recent video frame.</p><p>In frame-server mode, this method has no effect.</p><p>See <strong>Video Processor {{MFT}}</strong> for info regarding source and destination rectangles in the <strong>Video Processor {{MFT}}</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle. The source rectangle defines the area of the video frame that is displayed. If this parameter is <strong>{{NULL}}</strong>, the entire video frame is displayed.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle. The destination rectangle defines the area of the window or DirectComposition visual where the video is drawn.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + + + <p>Gets the audio balance. </p> + <p>Returns the balance. The value can be any number in the following range (inclusive). </p><table> <tr><th>Return value</th><th>Description</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table><p>?</p><p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> + + + + <p>Sets the audio balance.</p> + <p>When the audio balance changes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_BALANCECHANGE}}</strong> event. See <strong>{{IMFMediaEventNotify::EventNotify}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The audio balance. The value can be any number in the following range (inclusive). </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>-1</dt> </dl> </td><td> <p>The left channel is at full volume; the right channel is silent. +</p> </td></tr> <tr><td> <dl> <dt>1</dt> </dl> </td><td> <p>The right channel is at full volume; the left channel is silent. +</p> </td></tr> </table> <p>?</p> <p>If the value is zero, the left and right channels are at equal volumes. The default value is zero. </p> </dd> + + + + + <p>Queries whether the Media Engine can play at a specified playback rate.</p> + <p>Playback rates are expressed as a ratio of the current rate to the normal rate. For example, 1.0 is normal playback speed, 0.5 is half speed, and 2.0 is 2? speed. Positive values mean forward playback, and negative values mean reverse playback.</p><p>The results of this method can vary depending on the media resource that is currently loaded. Some media formats might support faster playback rates than others. Also, some formats might not support reverse play.</p> + <p>Returns <strong>{{TRUE}}</strong> if the playback rate is supported, or <strong>{{FALSE}}</strong> otherwise.</p> + + + <dd> <p>The requested playback rate.</p> </dd> + + + + + <p>Steps forward or backward one frame.</p> + <p>The frame-step direction is independent of the current playback direction.</p><p>This method completes asynchronously. When the operation completes, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED}}</strong> event and enters the paused state.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specify <strong>{{TRUE}}</strong> to step forward or <strong>{{FALSE}}</strong> to step backward.</p> </dd> + + + + + <p>Gets various flags that describe the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MFMEDIASOURCE_CHARACTERISTICS}} enumeration</strong>.</p> </dd> + + + + + <p>Gets a presentation attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The attribute to query. For a list of presentation attributes, see Presentation Descriptor Attributes.</p> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. The caller must free the <strong>{{PROPVARIANT}}</strong> by calling <strong>PropVariantClear</strong>. </p> </dd> + + + + + <p>Gets the number of streams in the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of streams.</p> </dd> + + + + + <p>Gets a stream-level attribute from the media resource.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>The attribute to query. Possible values are listed in the following topics: +</p> <ul> <li> Stream Descriptor Attributes </li> <li> Media Type Attributes </li> </ul> </dd> + + + <dd> <p>A reference to a <strong>{{PROPVARIANT}}</strong> that receives the value. The method fills the <strong>{{PROPVARIANT}}</strong> with a copy of the stored value. Call <strong>PropVariantClear</strong> to free the memory allocated by the method. </p> </dd> + + + + + <p>Queries whether a stream is selected to play.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Receives a Boolean value.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play. +</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Selects or deselects a stream for playback. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. To get the number of streams, call <strong>{{IMFMediaEngineEx::GetNumberOfStreams}}</strong>.</p> </dd> + + + <dd> <p>Specifies whether to select or deselect the stream.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The stream is selected. During playback, this stream will play.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The stream is not selected. During playback, this stream will not play.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Applies the stream selections from previous calls to <strong>SetStreamSelection</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains protected content. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if the media resource contains protected content, or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + + + <p>Inserts a video effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of video effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the video effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the video effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Inserts an audio effect.</p> + <p>The effect is applied when the next media resource is loaded.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The maximum number of audio effects was reached.</p> </td></tr> </table><p>?</p> + + + <dd> <p>One of the following: </p> <ul> <li>A reference to the <strong>{{IMFTransform}}</strong> interface of a Media Foundation transform ({{MFT}}) that implements the audio effect.</li> <li>A reference to the <strong>{{IMFActivate}}</strong> interface of an activation object. The activation object must create an {{MFT}} for the audio effect.</li> </ul> </dd> + + + <dd> <p>Specifies whether the effect is optional.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong><strong>{{TRUE}}</strong></strong></dt> </dl> </td><td> <p>The effect is optional. If the Media Engine cannot add the effect, it ignores the effect and continues playback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{FALSE}}</strong></strong></dt> </dl> </td><td> <p>The effect is required. If the Media Engine object cannot add the effect, a playback error occurs.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Removes all audio and video effects.</p> + <p> Call this method to remove all of the effects that were added with the <strong>InsertAudioEffect</strong> and <strong>InsertVideoEffect</strong> methods. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Specifies a presentation time when the Media Engine will send a marker event.</p> + <p>When playback reaches the time specified by <em>timeToFire</em>, the Media Engine sends an <strong>{{MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER}}</strong> event through the <strong>{{IMFMediaEngineNotify::EventNotify}}</strong> method. Calling this method cancels any previous marker that is still pending. </p><p>If the application seeks past the marker point, the Media Engine cancels the marker and does not send the event.</p><p>During forward playback, set <em>timeToFire</em> to a value greater than the current playback position. During reverse playback, set <em>timeToFire</em> to a value less than the playback position.</p><p>To cancel a marker, call <strong>{{IMFMediaEngineEx::CancelTimelineMarkerTimer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The presentation time for the marker event, in seconds.</p> </dd> + + + + + <p>Gets the time of the next timeline marker, if any.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the marker time, in seconds. If no marker is set, this parameter receives the value <strong>NaN</strong>.</p> </dd> + + + + + <p>Cancels the next pending timeline marker.</p> + <p>Call this method to cancel the <strong>{{IMFMediaEngineEx::SetTimelineMarkerTimer}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Queries whether the media resource contains stereoscopic 3D video.</p> + <p>Returns <strong>{{TRUE}}</strong> if the media resource contains 3D video, or <strong>{{FALSE}}</strong> otherwise.</p> + + + + <p>For stereoscopic 3D video, gets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, sets the layout of the two views within a video frame.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF_MEDIA_ENGINE_S3D_PACKING_MODE}}</strong> enumeration that specifies the layout. The two views can be arranged side-by-side, or top-to-bottom.</p> </dd> + + + + + <p>For stereoscopic 3D video, queries how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration.</p> </dd> + + + + + <p>For stereoscopic 3D video, specifies how the Media Engine renders the 3D video content.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A member of the <strong>{{MF3DVideoOutputType}}</strong> enumeration that specifies the 3D video rendering mode.</p> </dd> + + + + + <p>Enables or disables windowless swap-chain mode.</p> + <p>In windowless swap-chain mode, the Media Engine creates a windowless swap chain and presents video frames to the swap chain. To render the video, call <strong>{{IMFMediaEngineEx::GetVideoSwapchainHandle}}</strong> to get a handle to the swap chain, and then associate the handle with a Microsoft DirectComposition visual. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, windowless swap-chain mode is enabled. </p> </dd> + + + + + <p>Gets a handle to the windowless swap chain.</p> + <p>To enable windowless swap-chain mode, call <strong>{{IMFMediaEngineEx::EnableWindowlessSwapchainMode}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a handle to the swap chain.</p> </dd> + + + + + <p>Enables or disables mirroring of the video.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the video is mirrored horizontally. Otherwise, the video is displayed normally.</p> </dd> + + + + + <p>Gets the audio stream category used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio stream category for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio stream categories, see <strong>{{AUDIO_STREAM_CATEGORY}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the audio device endpoint role used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the audio device endpoint used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>For information on audio endpoint roles, see <strong>{{ERole}} enumeration</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets the real time mode used for the next call to <strong>SetSource</strong> or <strong>Load</strong>. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Seeks to a new playback position using the specified <strong>{{MF_MEDIA_ENGINE_SEEK_MODE}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Enables or disables the time update timer.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the update timer is enabled. Otherwise, the timer is disabled.</p> </dd> + + + + + <p>Enables an application to load media resources in the Media Engine.</p> + <p>To use this interface, set the {{MF_MEDIA_ENGINE_EXTENSION}} attribute when you call the <strong>{{IMFMediaEngineClassFactory::CreateInstance}}</strong> method.</p> + + + + <p>Queries whether the object can load a specified type of media resource.</p> + <p>Implement this method if your Media Engine extension supports one or more {{MIME}} types.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, the Media Engine is set to audio-only mode. Otherwise, the Media Engine is set to audio-video mode.</p> </dd> + + + <dd> <p>A string that contains a {{MIME}} type with an optional codecs parameter, as defined in {{RFC}} 4281.</p> </dd> + + + <dd> <p>Receives a member of the <strong>{{MF_MEDIA_ENGINE_CANPLAY}}</strong> enumeration.</p> </dd> + + + + + <p>Begins an asynchronous request to create either a byte stream or a media source.</p> + <p>This method requests the object to create either a byte stream or a media source, depending on the value of the <em>type</em> parameter:</p><ul> <li>If <em>type</em> is <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, the method creates a byte stream for the {{URL}} that is specified in <em>bstrURL</em>. In this case, the <em>pByteStream</em> parameter is <strong>{{NULL}}</strong>. </li> <li>If <em>type</em> is <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, the method creates a media source, using the byte stream that is specified in the <em>pByteStream</em> parameter. Note that <em>pByteStream</em> can also be <strong>{{NULL}}</strong> in this case.</li> </ul><p>The method is performed asynchronously. The Media Engine calls the <strong>{{IMFMediaEngineExtension::EndCreateObject}}</strong> method to complete the operation.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the media resource.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface.</p> <p>If the <em>type</em> parameter equals <strong>{{MF_OBJECT_BYTESTREAM}}</strong>, this parameter is <strong>{{NULL}}</strong>. </p> <p>If <em>type</em> equals <strong>{{MF_OBJECT_MEDIASOURCE}}</strong>, this parameter either contains a reference to a byte stream or is <strong>{{NULL}}</strong>. See Remarks for more information.</p> </dd> + + + <dd> <p>A member of the <strong>{{MF_OBJECT_TYPE}}</strong> enumeration that specifies which type of object to create.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_BYTESTREAM}}</strong></dt> </dl> </td><td> <p>Create a byte stream. The byte stream must support the <strong>{{IMFByteStream}}</strong> interface.</p> </td></tr> <tr><td><dl> <dt><strong>{{MF_OBJECT_MEDIASOURCE}}</strong></dt> </dl> </td><td> <p>Create a media source. The media source must support the <strong>{{IMFMediaSource}}</strong> interface.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface. This reference can be used to cancel the asynchronous operation, by passing the reference to the <strong>{{IMFMediaEngineExtension::CancelObjectCreation}}</strong> method. </p> <p>The caller must release the interface. This parameter can be {{NULL}}.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAsyncCallback}}</strong> interface. This interface is used to signal the completion of the asynchronous operation.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of an object impemented by the caller. You can use this object to hold state information for the callback. The object is returned to the caller when the callback is invoked. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Cancels the current request to create an object.</p> + <p>This method attempts to cancel a previous call to <strong>BeginCreateObject</strong>. Because that method is asynchronous, however, it might complete before the operation can be canceled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The reference that was returned in the the <em>ppIUnknownCancelCookie</em> parameter of the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method. </p> </dd> + + + + + <p>Completes an asynchronous request to create a byte stream or media source.</p> + <p>The Media Engine calls this method to complete the <strong>{{IMFMediaEngineExtension::BeginCreateObject}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFAsyncResult}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IUnknown}}</strong> interface of the byte stream or media source. The caller must release the interface</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Enables the Media Engine to access protected content while in frame-server mode.</p> + <p>In frame-server mode, this method enables the Media Engine to share protected content with the Direct3D?11 device.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the Direct3D?11 device content. The Media Engine queries this reference for the <strong>{{ID3D11VideoContext}}</strong> interface. </p> </dd> + + + + + <p>Gets the content protections that must be applied in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration.</p> </dd> + + + + + <p>Specifies the window that should receive output link protections.</p> + <p>In frame-server mode, call this method to specify the destination window for protected video content. The Media Engine uses this window to set link protections, using the Output Protection Manager ({{OPM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window.</p> </dd> + + + + + <p>Copies a protected video frame to a {{DXGI}} surface.</p> + <p>For protected content, call this method instead of the <strong>{{IMFMediaEngine::TransferVideoFrame}}</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the destination surface.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFVideoNormalizedRect}}</strong> structure that specifies the source rectangle.</p> </dd> + + + <dd> <p>A reference to a <strong>{{RECT}}</strong> structure that specifies the destination rectangle.</p> </dd> + + + <dd> <p>A reference to an <strong>{{MFARGB}}</strong> structure that specifies the border color. </p> </dd> + + + <dd> <p>Receives a bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS}}</strong> enumeration. These flags indicate which content protections the application must apply before presenting the surface.</p> </dd> + + + + + <p>Sets the content protection manager ({{CPM}}).</p> + <p>The Media Engine uses the {{CPM}} to handle events related to protected content, such as license acquisition.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFContentProtectionManager}}</strong> interface, implemented by the caller.</p> </dd> + + + + + <p>Sets the application's certificate.</p> + <p>Call this method to access protected video content in frame-server mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a buffer that contains the certificate in X.509 format, followed by the application identifier signed with a {{SHA}}-256 signature using the private key from the certificate.</p> </dd> + + + <dd> <p>The size of the <em>pbBlob</em> buffer, in bytes.</p> </dd> + + + + + <p><em>Media sources</em> are objects that generate media data in the Media Foundation pipeline. This section describes the media source {{APIs}} in detail. Read this section if you are implementing a custom media source, or using a media source outside of the Media Foundation pipeline.</p><p>If your application uses the control layer, it needs to use only a limited subset of the media source {{APIs}}. For information, see the topic Using Media Sources with the Media Session.</p><p> </p> + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables playback of web audio.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating if the connecting to Web audio should delay the page's load event.</p> + <p>True if connection to Web audio should delay the page's load event; otherwise, false.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Connects web audio to Media Engine using the specified sample rate.</p> + <p>Returns {{S_OK}} on successful completion.</p> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + <dd> <p>The sample rate of the web audio.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Disconnects web audio from the Media Engine </p> + <p>Returns {{S_OK}} on successful completion.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Used to indicate that the media source has opened.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has ended.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the media source has closed.</p> + <p>This method does not return a value.</p> + + + + <p>Enables <strong>{{IMFSourceBufferList}}</strong> object to notify its clients of important state changes.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been added.</p> + <p>This method does not return a value.</p> + + + + <p>Indicates that a <strong>{{IMFSourceBuffer}}</strong> has been removed.</p> + <p>This method does not return a value.</p> + + + + <p>Provides functionality for raising events associated with <strong>{{IMFSourceBuffer}}</strong>.</p> + + + + <p>Used to indicate that the source buffer has started updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has been aborted.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that an error has occurred with the source buffer.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + + + <p>Used to indicate that the source buffer is updating.</p> + <p>This method does not return a value.</p> + + + + <p>Used to indicate that the source buffer has finished updating.</p> + <p>This method does not return a value.</p> + + + + <p>Represents a buffer which contains media data for a <strong>{{IMFMediaSourceExtension}}</strong>. </p> + <p><strong>{{IMFSourceBuffer}}</strong> is used in conjunction with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + + + + <p>Gets a value that indicates if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong> is in process.</p> + <p><strong>true</strong> if <strong>Append</strong>, <strong>AppendByteStream</strong>, or <strong>Remove</strong>; otherwise, <strong>false</strong>.</p> + + + + <p>Gets the buffered time range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The buffered time range.</p> </dd> + + + + + <p>Gets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>The timestamp offset.</p> + + + + <p>Sets the timestamp offset for media segments appended to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the timestamp for the start of the append window.</p> + <p>The timestamp for the start of the append window.</p> + + + + <p>Sets the timestamp for the start of the append window.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The timestamp for the start of the append window.</p> </dd> + + + + + <p>Gets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + + <p>Sets the timestamp for the end of the append window.</p> + <p>The timestamp for the end of the append window.</p> + + + <dd></dd> + + + + + <p>Appends the specified media segment to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Appends the media segment from the specified byte stream to the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Aborts the processing of the current media segment. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the media segments defined by the specified time range from the <strong>{{IMFSourceBuffer}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Represents a collection of <strong>{{IMFSourceBuffer}}</strong> objects.</p> + + + + <p>Gets the number of <strong>{{IMFSourceBuffer}}</strong> objects in the list.</p> + <p>The number of source buffers in the list.</p> + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the list.</p> + <p>The source buffer.</p> + + + + <p>Provides functionality for the Media Source Extension ({{MSE}}).</p> + <p> Media Source Extensions ({{MSE}}) is a World Wide Web Consortium ({{W3C}}) standard that extends the {{HTML5}} media elements to enable dynamically changing the media stream without the use of plug-ins. The <strong>{{IMFMediaSourceExtension}}</strong> interface and the related Microsoft Win32 {{API}} implement {{MSE}} and are expected to only be called by web browsers implementing {{MSE}}. </p><p>The {{MSE}} media source keeps track of the ready state of the of the source as well as a list of <strong>{{IMFSourceBuffer}}</strong> objects which provide media data for the source.</p> + + + + <p>Gets the collection of source buffers associated with this media source.</p> + <p>The collection of source buffers.</p> + + + + <p>Gets the source buffers that are actively supplying media data to the media source.</p> + <p>The list of active source buffers.</p> + + + + <p>Gets the ready state of the media source.</p> + <p>The ready state of the media source.</p> + + + + <p>Gets the duration of the media source in 100-nanosecond units.</p> + <p>The duration of the media source in 100-nanosecond units. </p> + + + + <p>Sets the duration of the media source in 100-nanosecond units.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The duration of the media source in 100-nanosecond units.</p> </dd> + + + + + <p>Adds a <strong>{{IMFSourceBuffer}}</strong> to the collection of buffers associated with the <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Removes the specified source buffer from the collection of source buffers managed by the <strong>{{IMFMediaSourceExtension}}</strong> object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Indicate that the end of the media stream has been reached. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Used to pass error information.</p> </dd> + + + + + <p>Gets a value that indicates if the specified {{MIME}} type is supported by the media source.</p> + <p><strong>true</strong> if the media type is supported; otherwise, <strong>false</strong>.</p> + + + <dd> <p>The media type to check support for.</p> </dd> + + + + + <p>Gets the <strong>{{IMFSourceBuffer}}</strong> at the specified index in the collection of buffers.</p> + <p>The source buffer.</p> + + + + <p>Implemented by the media engine to add encrypted media extensions methods.</p> + + + + <p>Gets the media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys object associated with the media engine or <strong>null</strong> if there is not a media keys object.</p> </dd> + + + + + <p>Sets the media keys object to use with the media engine.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Extends the <strong>{{IMFMediaEngineSrcElements}}</strong> interface to provide additional capabilities.</p> + + + + <p>Provides an enhanced version of <strong>{{IMFMediaEngineSrcElements::AddElement}}</strong> to add the key system intended to be used with content to an element.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the key system for the given source element index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The source element index.</p> </dd> + + + <dd> <p>The {{MIME}} type of the source element.</p> </dd> + + + + + <p>Represents a callback to the media engine to notify key request data.</p> + + + + <p>Notifies the application that a key or keys are needed along with any initialization data.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The initialization data.</p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + + + <p>Represents a media keys used for decrypting media data using a Digital Rights Management ({{DRM}}) key system. </p> + + + + <p>Creates a media key session object using the specified initialization data and custom data. +. +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type of the media container used for the content.</p> </dd> + + + <dd> <p>The initialization data for the key system. </p> </dd> + + + <dd> <p>The count in bytes of <em>initData</em>.</p> </dd> + + + <dd> <p>Custom data sent to the key system.</p> </dd> + + + <dd> <p>The count in bytes of <em>cbCustomData</em>.</p> </dd> + + + <dd> <p>notify</p> </dd> + + + <dd> <p>The media key session.</p> </dd> + + + + + <p>Gets the key system string the <strong>{{IMFMediaKeys}}</strong> object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p></p> + <p><strong>Shutdown</strong> should be called by the application before final release. The Content Decryption Module ({{CDM}}) reference and any other resources is released at this point. However, related sessions are not freed or closed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the suspend notify interface of the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The suspend notify interface of the Content Decryption Module ({{CDM}}).</p> </dd> + + + + + <p>Represents a session with the Digital Rights Management ({{DRM}}) key system.</p> + + + + <p>Gets the error state associated with the media key session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The error code.</p> </dd> + + + <dd> <p>Platform specific error information.</p> </dd> + + + + + <p>Gets the name of the key system name the media keys object was created with.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The name of the key system.</p> </dd> + + + + + <p>Gets a unique session id created for this session.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key session id.</p> </dd> + + + + + <p>Passes in a key value with any associated data required by the Content Decryption Module for the given key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd></dd> + + + <dd> <p>The count in bytes of <em>key</em>.</p> </dd> + + + + + <p>Closes the media key session and must be called before the key session is released.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Provides a mechanism for notifying the app about information regarding the media key session. </p> + + + + <p>Passes information to the application so it can initiate a key acquisition.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The {{URL}} to send the message to.</p> </dd> + + + <dd> <p>The message to send to the application.</p> </dd> + + + <dd> <p>The length in bytes of <em>message</em>.</p> </dd> + + + + + <p>Notifies the application that the key has been added. </p> + <p><strong>KeyAdded</strong> can also be called if the keys requested for the session have already been acquired.</p> + <p>This method does not return a value.</p> + + + + <p>Notifies the application that an error occurred while processing the key.</p> + <p>This method does not return a value.</p> + + + <dd></dd> + + + <dd></dd> + + + + + <p>Used to enable the client to notify the Content Decryption Module ({{CDM}}) when global resources should be brought into a consistent state prior to suspending. +</p> + + + + <p>Indicates that the suspend process is starting and resources should be brought into a consistent state. </p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>The actual suspend is about to occur and no more calls will be made into the Content Decryption Module ({{CDM}}).</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + + + + + + + + + + <p>Provides methods for getting information about the Output Protection Manager ({{OPM}}).</p> + <p>To get a reference to this interface, call <strong>QueryInterface</strong> on the Media Engine.</p><p>The <strong>{{MF_MEDIA_ENGINE_EVENT_OPMINFO}}</strong> <strong>{{IMFMediaEvent}}</strong> event is raised when there is a change in the {{OPM}} status.</p> + + + + <p>Gets status information about the Output Protection Manager ({{OPM}}).</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{INVALIDARG}}</strong></dt> </dl> </td><td> <p>If any of the parameters are <strong>{{NULL}}</strong>.</p> </td></tr> </table><p>?</p> + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a new instance of the Media Engine.</p> + <p>Before calling this method, call <strong>{{MFStartup}}</strong>.</p><p>The Media Engine supports three distinct modes:</p><table> <tr><th>Mode</th><th>Description</th></tr> <tr><td>Frame-server mode</td><td> <p>In this mode, the Media Engine delivers uncompressed video frames to the application. The application is responsible for displaying each frame, using Microsoft Direct3D or any other rendering technique. </p> <p>The Media Engine renders the audio; the application is not responsible for audio rendering.</p> <p>Frame-server mode is the default mode. </p> </td></tr> <tr><td>Rendering mode</td><td> <p>In this mode, the Media Engine renders both audio and video. The video is rendered to a window or Microsoft DirectComposition visual provided by the application.</p> <p>To enable rendering mode, set either the {{MF_MEDIA_ENGINE_PLAYBACK_HWND}} attribute or the {{MF_MEDIA_ENGINE_PLAYBACK_VISUAL}} attribute.</p> </td></tr> <tr><td>Audio mode</td><td> <p>In this mode, the Media Engine renders audio only, with no video.</p> <p>To enable audio mode, set the <strong>{{MF_MEDIA_ENGINE_AUDIOONLY}}</strong> flag in the <em>dwFlags</em> parameter.</p> </td></tr> </table><p>?</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_ATTRIBUTENOTFOUND}}</strong></dt> </dl> </td><td> <p>A required attribute was missing from <em>pAttr</em>, or an invalid combination of attributes was used.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A bitwise <strong>{{OR}}</strong> of zero or more flags from the <strong>{{MF_MEDIA_ENGINE_CREATEFLAGS}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface of an attribute store. </p> <p>This parameter specifies configuration attributes for the Media Engine. Call <strong>{{MFCreateAttributes}}</strong> to create the attribute store. Then, set one or more attributes from the list of Media Engine Attributes. For details, see Remarks.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaEngine}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a time range object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaTimeRange}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates a media error object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaError}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of <strong>{{IMFMediaSourceExtension}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p> Checks if <em>keySystem</em> is a supported key system and creates the related Content Decryption Module ({{CDM}}). +</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media keys system.</p> </dd> + + + <dd> <p>Points to a location to store Content Decryption Module ({{CDM}}) data which might be locked by multiple process and so might be incompatible with store app suspension.</p> </dd> + + + <dd> <p>The media keys.</p> </dd> + + + + + <p>Gets a value that indicates if the specified key system supports the specified media type.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{MIME}} type to check support for.</p> </dd> + + + <dd> <p>The key system to check support for.</p> </dd> + + + <dd> <p><strong>true</strong> if type is supported by <em>keySystem</em>; otherwise, <strong>false.</strong></p> </dd> + + + + + <p>Creates an instance of the <strong>{{IMFMediaKeys}}</strong> object.</p> + + + + <p>Creates a media keys object based on the specified key system.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The media key system.</p> </dd> + + + <dd> <p>Points to the default file location for the store Content Decryption Module ({{CDM}}) data.</p> </dd> + + + <dd> <p>Points to a the inprivate location for the store Content Decryption Module ({{CDM}}) data. Specifying this path allows the {{CDM}} to comply with the application?s privacy policy by putting personal information in the file location indicated by this path.</p> </dd> + + + <dd> <p>Receives the media keys.</p> </dd> + + + + + + + + + + + <p>Enables the media source to be transferred between the media engine and the sharing engine for Play To.</p> + + + + <p>Specifies wether or not the source should be transferred.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p><strong>true</strong> if the source should be transferred; otherwise, <strong>false</strong>.</p> </dd> + + + + + <p>Detaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the byte stream.</p> </dd> + + + <dd> <p>Receives the media source.</p> </dd> + + + <dd> <p>Receives the media source extension.</p> </dd> + + + + + <p>Attaches the media source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Specifies the byte stream. </p> </dd> + + + <dd> <p>Specifies the media source.</p> </dd> + + + <dd> <p>Specifies the media source extension.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>A timed-text object represents a component of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Registers a timed-text notify object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFTimedTextNotify}}</strong> interface for the timed-text notify object to register.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Selects or deselects a track of text in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to select. </p> </dd> + + + <dd> <p>Specifies whether to select or deselect a track of text. Specify <strong>{{TRUE}}</strong> to select the track or <strong>{{FALSE}}</strong> to deselect the track. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface for the data source to add.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Adds a timed-text data source from the specified {{URL}}.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{URL}} of the timed-text data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the label of the data source.</p> </dd> + + + <dd> <p>Null-terminated wide-character string that contains the language of the data source.</p> </dd> + + + <dd> <p>A <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> </dd> + + + <dd> <p>Specifies whether to add the default data source. Specify <strong>{{TRUE}}</strong> to add the default data source or <strong>{{FALSE}}</strong> otherwise.</p> </dd> + + + <dd> <p>Receives a reference to the unique identifier for the added track.</p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Removes the timed-text track with the specified identifier.</p> + <p>Get the identifier for a track by calling <strong>GetId</strong>. </p><p>When a track is removed, all buffered data from the track is also removed.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track to remove.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the offset to the cue time.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The offset to the cue time.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Retrieves a list of all timed-text tracks registered with the <strong>{{IMFTimedText}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of active timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of active timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of all the timed-text tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of all of the timed-text tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the list of the timed-metadata tracks in the timed-text component.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrackList}}</strong> interface that can enumerate the list of the timed-metadata tracks.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Enables or disables inband mode.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p> Specifies whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether inband mode is enabled.</p> + <p>Returns whether inband mode is enabled. If <strong>{{TRUE}}</strong>, inband mode is enabled. If <strong>{{FALSE}}</strong>, inband mode is disabled. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Interface that defines callbacks for Microsoft Media Foundation Timed Text notifications.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is added</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was added. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a text track is removed.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was removed. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a track is selected or deselected.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The identifier of the track that was selected or deselected. </p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the track was selected. <strong>{{FALSE}}</strong> if the track was deselected. </p> </dd> + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when an error occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>An {{MF_TIMED_TEXT_ERROR_CODE}} representing the last error.</p> </dd> + + + <dd> <p>The extended error code for the last error.</p> </dd> + + + <dd> <p>The identifier of the track on which the error occurred.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Called when a cue event occurs in a text track.</p> + <p>This method does not return a value.</p> + + + <dd> <p>A value specifying the type of event that has occured.</p> </dd> + + + <dd> <p>The current time when the cue event occurred.</p> </dd> + + + <dd> <p>The <strong>{{IMFTimedTextCue}}</strong> object representing the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Resets the timed-text-notify object.</p> + <p>This method does not return a value.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a track of timed text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the track of timed text.</p> + <p>Returns the identifier of the track. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the label of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Sets the label of a timed-text track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a null-terminated wide-character string that contains the label of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the language of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the language of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text track.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is inband.</p> + <p>Returns whether the timed-text track is inband. If <strong>{{TRUE}}</strong>, the timed-text track is inband; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the in-band metadata of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the in-band metadata of the track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text track is active.</p> + <p>Returns whether the timed-text track is active. If <strong>{{TRUE}}</strong>, the timed-text track is active; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a value indicating the error type of the latest error associated with the track.</p> + <p>A value indicating the error type of the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extended error code for the latest error associated with the track.</p> + <p>If the most recent error was associated with a track, this value will be the same <strong>{{HRESULT}}</strong> as returned by the <strong>{{IMFTimedTextNotify::Error}}</strong> method.</p> + <p>The extended error code for the latest error associated with the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a {{GUID}} that identifies the track's underlying data format.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A {{GUID}} that identifies the track's underlying data format.</p> </dd> + + + + + + + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a list of timed-text tracks.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the length, in tracks, of the timed-text-track list.</p> + <p>Returns the length, in tracks, of the timed-text-track list.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the index of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a text track in the list from the identifier of the track.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The identifier of the track in the list to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextTrack}}</strong> interface for the timed-text track.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of a timed-text cue.</p> + <p>The identifier is retrieved by this method is dynamically generated by the system and is guaranteed to uniquely identify a cue within a single timed-text track. It is not guaranteed to be unique across tracks. If a cue already has an identifier that is provided in the text-track data format, this {{ID}} can be retrieved by calling <strong>GetOriginalId</strong>.</p> + <p>The identifier of a timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the cue identifier that is provided in the text-track data format, if available.</p> + <p>This method retrieves an identifier for the cue that is included in the source data, if one was specified. The system dynamically generates identifiers for cues that are guaranteed to be unique within a single time-text track. To obtain this system-generated {{ID}}, call <strong>GetId</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The cue identifier that is provided in the text-track data format.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the kind of timed-text cue.</p> + <p>Returns a <strong>{{MF_TIMED_TEXT_TRACK_KIND}}</strong>-typed value that specifies the kind of timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the start time of the cue in the track.</p> + <p>Returns the start time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the duration time of the cue in the track.</p> + <p>Returns the duration time of the cue in the track.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the identifier of the timed-text cue.</p> + <p>Returns the identifier of the timed-text cue.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextBinary}}</strong> interface for the data content of the timed-text cue. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the display region of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextRegion}}</strong> interface for the timed-text region. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>Specifies the supported protection schemes for encrypted samples.</p> + <p>The encryption scheme for a sample is specified using the {{MFSampleExtension_Encryption_ProtectionScheme}} attribute.</p> + + + <dd> <p>No encryption scheme.</p> </dd> + + + <dd> <p>The encryption scheme is {{AES}} counter mode ({{CTR}}).</p> </dd> + + + <dd> <p>The encryption scheme is Cipher Block Chaining ({{CBC}}).</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets info about the style of the timed-text cue.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of lines of text in the timed-text cue.</p> + <p>Returns the number of lines of text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a line of text in the cue from the index of the line.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the line of text in the cue to retrieve. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextFormattedText}}</strong> interface for the line of text in the cue.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents a block of formatted timed-text.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the text.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the number of subformats in the formatted timed-text object.</p> + <p>Returns the number of subformats. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets a subformat in the formatted timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the subformat in the formatted timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the first character of the subformat. </p> </dd> + + + <dd> <p>A reference to a variable that receives the length, in characters, of the subformat. </p> </dd> + + + <dd> <p>A reference to a memory block that receives a reference to the <strong>{{IMFTimedTextStyle}}</strong> interface for the subformat's timed-text style. This parameter can be <strong>{{NULL}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the timed-text style is external.</p> + <p>Returns whether the timed-text style is external. If <strong>{{TRUE}}</strong>, the timed-text style is external; otherwise, <strong>{{FALSE}}</strong>. </p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font family of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the font family of the style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font size of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the font size of the timed-text style.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text style is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text always shows the background.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text always shows the background. The variable specifies <strong>{{TRUE}}</strong> if the background is always shown; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the font style of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_FONT_STYLE}}</strong>-typed value that specifies the font style.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the style of timed text is bold.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the style of timed text is bold. The variable specifies <strong>{{TRUE}}</strong> if the style is bold; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the right to left writing mode of the timed-text style is enabled.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the right to left writing mode is enabled. The variable specifies <strong>{{TRUE}}</strong> if the right to left writing mode is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text alignment of the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_ALIGNMENT}}</strong>-typed value that specifies the text alignment.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets how text is decorated for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a combination of <strong>{{MF_TIMED_TEXT_DECORATION}}</strong>-typed values that are combined by using a bitwise {{OR}} operation. The resulting value specifies how text is decorated.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the text outline for the timed-text style.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the color.</p> </dd> + + + <dd> <p>A reference to a variable that receives the thickness.</p> </dd> + + + <dd> <p>A reference to a variable that receives the blur radius.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the display region of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the name of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the null-terminated wide-character string that contains the name of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the position of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the X-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives the Y-coordinate of the position.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the extent of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the width of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the height of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the background color of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MFARGB}}</strong> structure that describes the background color.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the writing mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_WRITING_MODE}}</strong>-typed value that specifies the writing mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the display alignment of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_DISPLAY_ALIGNMENT}}</strong>-typed value that specifies the display alignment of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the height of each line of text in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the height of each line of text in the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether a clip of text overflowed the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether a clip of text overflowed the region. The variable specifies <strong>{{TRUE}}</strong> if the clip overflowed; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the padding that surrounds the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the padding before the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the start of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the padding after the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives the end of the region.</p> </dd> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_UNIT_TYPE}}</strong>-typed value that specifies the units in which the timed-text region is measured.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Determines whether the word wrap feature is enabled in the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a value that specifies whether the word wrap feature is enabled in the region. The variable specifies <strong>{{TRUE}}</strong> if word wrap is enabled; otherwise, <strong>{{FALSE}}</strong>. </p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the Z-index (depth) of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives the Z-index (depth) of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the scroll mode of the region.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a variable that receives a <strong>{{MF_TIMED_TEXT_SCROLL_MODE}}</strong>-typed value that specifies the scroll mode of the region.</p> </dd> + + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Represents the data content of a timed-text object.</p> + + + + <p>[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]</p><p>Gets the data content of the timed-text object.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a memory block that receives a reference to the data content of the timed-text object.</p> </dd> + + + <dd> <p>A reference to a variable that receives the length in bytes of the data content.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Specifies a type of capture device.</p> + + + <dd> <p>An audio capture device, such as a microphone.</p> </dd> + + + <dd> <p>A video capture device, such as a webcam.</p> </dd> + + + + + <p>Specifies a type of capture sink.</p> + + + <dd> <p>A recording sink, for capturing audio and video to a file.</p> </dd> + + + <dd> <p>A preview sink, for previewing live audio or video.</p> </dd> + + + <dd> <p>A photo sink, for capturing still images.</p> </dd> + + + + + + + + <p>Defines the values for the source stream category.</p> + + + <dd> <p>Specifies a video preview stream.</p> </dd> + + + <dd> <p>Specifies a video capture stream.</p> </dd> + + + <dd> <p>Specifies an independent photo stream.</p> </dd> + + + <dd> <p>Specifies a dependent photo stream.</p> </dd> + + + <dd> <p>Specifies an audio stream.</p> </dd> + + + <dd> <p>Specifies an unsupported stream.</p> </dd> + + + + + <p>Callback interface for receiving events from the capture engine.</p> + <p>To set the callback interface on the capture engine, call the <strong>{{IMFCaptureEngine::Initialize}}</strong> method.</p> + + + + <p>Called by the capture engine to notify the application of a capture event.</p> + <p>To get the type of event, call <strong>{{IMFMediaEvent::GetExtendedType}}</strong>. This method returns one of the following {{GUIDs}}.</p><table> <tr><th>{{GUID}}</th><th>Description</th></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ALL_EFFECTS_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveAllEffects}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_BLOCKED}}</strong></td><td>Video capture has been blocked by the driver.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_CAMERA_STREAM_UNBLOCKED}}</strong></td><td>Video capture has been restored by the driver after having been blocked.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_ADDED}}</strong></td><td>The <strong>{{IMFCaptureSource::AddEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_EFFECT_REMOVED}}</strong></td><td>The <strong>{{IMFCaptureSource::RemoveEffect}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_ERROR}}</strong></td><td>An error occurred during capture.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong></td><td>The <strong>{{IMFCaptureEngine::Initialize}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong></td><td>The <strong>{{IMFCaptureEngine::TakePhoto}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopPreview}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StartRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong></td><td>The <strong>{{IMFCaptureEngine::StopRecord}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SINK_PREPARED}}</strong></td><td>The <strong>{{IMFCaptureSink::Prepare}}</strong> method completed.</td></tr> <tr><td><strong>{{MF_CAPTURE_SOURCE_CURRENT_DEVICE_MEDIA_TYPE_SET}}</strong></td><td>The <strong>{{IMFCaptureSource::SetCurrentDeviceMediaType}}</strong> method completed.</td></tr> </table><p>?</p><p>This method may be called from a worker thread. The implementation should be thread-safe.</p><p>To get the status code for the event, call <strong>{{IMFMediaEvent::GetStatus}}</strong>. If the status code is an error code, it indicates that the requested operation failed.</p><p>In addition, the event object specified by <em>pEvent</em> might contain any of the following attributes.</p><ul> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> </ul><p>To get event attributes, use the <strong>{{IMFAttributes}}</strong> interface, which <strong>{{IMFMediaEvent}}</strong> inherits.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaEvent}}</strong> interface. Use this interface to get information about the event, as described in Remarks.</p> </dd> + + + + + <p>Callback interface to receive data from the capture engine.</p> + <p>To set the callback interface, call one of the following methods.</p><ul> <li> <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong> </li> <li> <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong> </li> </ul> + + + + <p>Called when the capture sink receives a sample.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFSample}}</strong> interface. Use this interface to get the time stamp, duration, and stream data. For more information, see Media Samples. This parameter can be <strong>{{NULL}}</strong>, so make sure to check for a <strong>{{NULL}}</strong> value before you dereference the reference.</p> </dd> + + + + + <p>Controls a capture sink, which is an object that receives one or more streams from a capture device.</p> + <p>The capture engine creates the following capture sinks.</p><ul> <li>Photo sink. Encodes still image files.</li> <li>Preview sink. Previews live audio or video.</li> <li>Recording sink. Creates compressed audio/video files or compressed audio/video streams.</li> </ul><p>To get a reference to a capture sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. Each capture sink implements an interface that derives from <strong>{{IMFCaptureSink}}</strong>. Call <strong>QueryInterface</strong> to get a reference to the derived interface.</p><table> <tr><th>Sink</th><th>Interface</th></tr> <tr><td>Photo sink</td><td> <strong>{{IMFCapturePhotoSink}}</strong> </td></tr> <tr><td>Preview sink</td><td> <strong>{{IMFCapturePreviewSink}}</strong> </td></tr> <tr><td>Recording sink</td><td> <strong>{{IMFCaptureRecordSink}}</strong> </td></tr> </table><p>?</p><p>Applications cannot directly create the capture sinks.</p><p>If an image stream native media type is set to {{JPEG}}, the photo sink should be configured with a format identical to native source format. {{JPEG}} native type is passthrough only.</p><p>If an image stream native type is set to {{JPEG}}, to add an effect, change the native type on the image stream to an uncompressed video media type (such as {{NV12}} or {{RGB32}}) and then add the effect.</p><p>If the native type is H.264 for the record stream, the record sink should be configured with the same media type. H.264 native type is passthrough only and cannot be decoded.</p><p>Record streams that expose H.264 do not expose any other type. H.264 record streams cannot be used in conjunction with effects. To add effects, instead connect the preview stream to the recordsink using <strong>AddStream</strong>.</p> + + + + <p>Gets the output format for a stream on this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSinkStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream to query. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the reference.</p> </dd> + + + + + <p>Queries the underlying Sink Writer object for an interface.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>Invalid stream number.</p> </td></tr> </table><p>?</p> + + + + <p>Connects a stream from the capture source to this capture sink.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>The format specified in <em>pMediaType</em> is not valid for this capture sink.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid, or the specified source stream was already connected to this sink.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The source stream to connect. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An <strong>{{IMFMediaType}}</strong> reference that specifies the desired format of the output stream. The details of the format will depend on the capture sink.</p> <ul> <li>Photo sink: A still image format compatible with Windows Imaging Component ({{WIC}}).</li> <li>Preview sink: An uncompressed audio or video format.</li> <li>Record sink: The audio or video format that will be written to the output file.</li> </ul> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. For compressed streams, you can use this parameter to configure the encoder. This parameter can also be <strong>{{NULL}}</strong>. For the preview sink, set this parameter to <strong>{{NULL}}</strong>.</p> </dd> + + + <dd> <p>Receives the index of the new stream on the capture sink. Note that this index will not necessarily match the value of <em>dwSourceStreamIndex</em>. </p> </dd> + + + + + <p>Prepares the capture sink by loading any required pipeline components, such as encoders, video processors, and media sinks.</p> + <p>Calling this method is optional. This method gives the application an opportunity to configure the pipeline components before they are used. The method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_SINK_PREPARED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. After this event is received, call <strong>{{IMFCaptureSink::GetService}}</strong> to configure individual components.</p><p>Before calling this method, configure the capture sink by adding at least one stream. To add a stream, call <strong>{{IMFCaptureSink::AddStream}}</strong>.</p><p>The <strong>Prepare</strong> method fails if the capture sink is currently in use. For example, calling <strong>Prepare</strong> on the preview sink fails if the capture engine is currently previewing.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request.</p> </td></tr> </table><p>?</p> + + + + <p>Removes all streams from the capture sink.</p> + <p>You can use this method to reconfigure the sink.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Controls the recording sink. The recording sink creates compressed audio/video files or compressed audio/video streams.</p> + <p>The recording sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported. (However, if a callback is used, you can provide a separate callback for each stream.)</p><p>If the destination is a byte stream or an output file, the application specifies a container type, such as {{MP4}} or {{ASF}}. The capture engine then multiplexes the audio and video to produce the format defined by the container type. If the destination is a callback interface, however, the capture engine does not multiplex or otherwise interleave the samples. The callback option gives you the most control over the recorded output, but requires more work by the application.</p><p>To start the recording, call <strong>{{IMFCaptureEngine::StartRecord}}</strong>.</p> + + + + <p>Specifies a byte stream that will receive the data for the recording.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + <dd> <p>A {{GUID}} that specifies the file container type. Possible values are documented in the {{MF_TRANSCODE_CONTAINERTYPE}} attribute.</p> </dd> + + + + + <p>Specifies the name of the output file for the recording.</p> + <p>The capture engine uses the file name extension to select the container type for the output file. For example, if the file name extension is ."mp4", the capture engine creates an {{MP4}} file.</p><p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the recording data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCaptureRecordSink::SetOutputByteStream}}</strong> or <strong>{{IMFCaptureRecordSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Sets a custom media sink for recording.</p> + <p>This method overrides the default selection of the media sink for recording.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Gets the rotation that is currently being applied to the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the recorded video stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Controls the preview sink. The preview sink enables the application to preview audio and video from the camera.</p> + <p>To start preview, call <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + + + + <p>Specifies a window for preview.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A handle to the window. The preview sink draws the video frames inside this window.</p> </dd> + + + + + <p>Specifies a Microsoft DirectComposition visual for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to a DirectComposition visual that implements the <strong>{{IDCompositionVisual}}</strong> interface.</p> </dd> + + + + + <p>Updates the video frame. Call this method when the preview window receives a <strong>{{WM_PAINT}}</strong> or <strong>{{WM_SIZE}}</strong> message.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Sets a callback to receive the preview data for one stream.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePreviewSink::SetRenderHandle}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. The index is returned in the <em>pdwSinkStreamIndex</em> parameter of the <strong>{{IMFCaptureSink::AddStream}}</strong> method.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled. If <strong>{{FALSE}}</strong>, mirror is disabled.</p> </dd> + + + + + <p>Gets the rotation of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream. You must specify a video stream.</p> </dd> + + + <dd> <p>Receives the image rotation, in degrees.</p> </dd> + + + + + <p>Rotates the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream to rotate. You must specify a video stream.</p> </dd> + + + <dd> <p>The amount to rotate the video, in degrees. Valid values are 0, 90, 180, and 270. The value zero restores the video to its original orientation.</p> </dd> + + + + + <p>Sets a custom media sink for preview.</p> + <p>This method overrides the default selection of the media sink for preview.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFMediaSink}}</strong> interface of the media sink.</p> </dd> + + + + + <p>Controls the photo sink. The photo sink captures still images from the video stream.</p> + <p>The photo sink can deliver samples to one of the following destinations:</p><ul> <li>Byte stream.</li> <li>Output file.</li> <li>Application-provided callback interface.</li> </ul><p>The application must specify a single destination. Multiple destinations are not supported.</p><p>To capture an image, call <strong>{{IMFCaptureEngine::TakePhoto}}</strong>.</p> + + + + <p>Specifies the name of the output file for the still image.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A null-terminated string that contains the {{URL}} of the output file. </p> </dd> + + + + + <p>Sets a callback to receive the still-image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputByteStream}}</strong> or <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> interface. The caller must implement this interface.</p> </dd> + + + + + <p>Specifies a byte stream that will receive the still image data.</p> + <p>Calling this method overrides any previous call to <strong>{{IMFCapturePhotoSink::SetOutputFileName}}</strong> or <strong>{{IMFCapturePhotoSink::SetSampleCallback}}</strong>.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A reference to the <strong>{{IMFByteStream}}</strong> interface of a byte stream. The byte stream must be writable.</p> </dd> + + + + + <p>Controls the capture source object. The capture source manages the audio and video capture devices.</p> + <p>To get a reference to the capture source, call <strong>{{IMFCaptureEngine::GetSource}}</strong>.</p> + + + + <p>Gets the current capture device's <strong>{{IMFMediaSource}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p> Gets the current capture device's <strong>{{IMFActivate}}</strong> object reference.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to the underlying Source Reader object.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture source was not initialized. Possibly there is no capture device on the system.</p> </td></tr> </table><p>?</p> + + + + <p>Adds an effect to a capture stream.</p> + <p>The effect must be implemented as a Media Foundation Transform ({{MFT}}). The <em>pUnknown</em> parameter can point to an instance of the {{MFT}}, or to an activation object for the {{MFT}}. For more information, see Activation Objects.</p><p>The effect is applied to the stream before the data reaches the capture sinks. </p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDMEDIATYPE}}</strong></dt> </dl> </td><td> <p>No compatible media type could be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to one of the following: </p> <ul> <li>A Media Foundation transform ({{MFT}}) that exposes the <strong>{{IMFTransform}}</strong> interface.</li> <li>An {{MFT}} activation object that exposes the <strong>{{IMFActivate}}</strong> interface.</li> </ul> </dd> + + + + + <p>Removes an effect from a capture stream.</p> + <p>This method removes an effect that was previously added using the <strong>{{IMFCaptureSource::AddEffect}}</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>Invalid request. Possibly the specified effect could not be found.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IUnknown}}</strong> interface of the effect object. </p> </dd> + + + + + <p>Removes all effects from a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Gets a format that is supported by one of the capture streams.</p> + <p>To enumerate all of the available formats on a stream, call this method in a loop while incrementing <em>dwMediaTypeIndex</em>, until the method returns <strong>{{MF_E_NO_MORE_TYPES}}</strong>.</p><p>Some cameras might support a range of frame rates. The minimum and maximum frame rates are stored in the {{MF_MT_FRAME_RATE_RANGE_MIN}} and {{MF_MT_FRAME_RATE_RANGE_MAX}} attributes on the media type.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_MORE_TYPES}}</strong></dt> </dl> </td><td> <p>The <em>dwMediaTypeIndex</em> parameter is out of range. +</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The zero-based index of the media type to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Sets the output format for a capture stream.</p> + <p>This method sets the native output type on the capture device. The device must support the specified format. To get the list of available formats, call <strong>{{IMFCaptureSource::GetAvailableDeviceMediaType}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The capture stream to set. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFMediaType}}</strong> interface.</p> </dd> + + + + + <p>Gets the current media type for a capture stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDSTREAMNUMBER}}</strong></dt> </dl> </td><td> <p>The <em>dwSourceStreamIndex</em> parameter is invalid.</p> </td></tr> </table><p>?</p> + + + <dd> <p>Specifies which stream to query. The value can be any of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td> <dl> <dt>0?0xFFFFFFFB</dt> </dl> </td><td> <p>The zero-based index of a stream. To get the number of streams, call <strong>{{IMFCaptureSource::GetDeviceStreamCount}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFB</dt> </dl> </td><td> <p>The first image stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFC</dt> </dl> </td><td> <p>The first video stream.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</strong></strong></dt> <dt>0xFFFFFFFD</dt> </dl> </td><td> <p>The first audio stream.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFMediaType}}</strong> interface. The caller must release the interface. </p> </dd> + + + + + <p>Gets the number of device streams.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives the number of device streams.</p> </dd> + + + + + <p>Gets the stream category for the specified source stream index.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The index of the source stream.</p> </dd> + + + <dd> <p>Receives the {{MF_CAPTURE_ENGINE_STREAM_CATEGORY}} of the specified source stream.</p> </dd> + + + + + <p>Gets the current mirroring state of the video preview stream.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>Receives the value <strong>{{TRUE}}</strong> if mirroring is enabled, or <strong>{{FALSE}}</strong> if mirroring is disabled.</p> </dd> + + + + + <p>Enables or disables mirroring of the video preview stream.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_NOTIMPL}}</strong></dt> </dl> </td><td> <p>The device stream does not have mirroring capability.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The source is not initialized.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The zero-based index of the stream.</p> </dd> + + + <dd> <p>If <strong>{{TRUE}}</strong>, mirroring is enabled; if <strong>{{FALSE}}</strong>, mirroring is disabled.</p> </dd> + + + + + <p>Gets the actual device stream index translated from a friendly stream name.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The friendly name. Can be one of the following:</p> <ul> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_RECORD}}</li> <li>{{MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_PREVIEW}}</li> <li>{{MF_CAPTURE_ENGINE_FIRST_SOURCE_INDEPENDENT_PHOTO_STREAM}}</li> </ul> </dd> + + + <dd> <p>Receives the value of the stream index that corresponds to the friendly name.</p> </dd> + + + + + <p>Controls one or more capture devices. The capture engine implements this interface. To get a reference to this interface, call either <strong>{{MFCreateCaptureEngine}}</strong> or <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + <p><strong>{{IMFCaptureEngine}}</strong> only supports one pass {{CBR}} encoding.</p> + + + + <p>Initializes the capture engine.</p> + <p>You must call this method once before using the capture engine. Calling the method a second time returns <strong>{{MF_E_INVALIDREQUEST}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_INITIALIZED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The <strong>Initialize</strong> method was already called.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NO_CAPTURE_DEVICES_AVAILABLE}}</strong></dt> </dl> </td><td> <p>No capture devices are available.</p> </td></tr> </table><p>?</p> + + + <dd> <p>A reference to the <strong>{{IMFCaptureEngineOnEventCallback}}</strong> interface. The caller must implement this interface. The capture engine uses this interface to send asynchronous events to the caller.</p> </dd> + + + <dd> <p>A reference to the <strong>{{IMFAttributes}}</strong> interface. This parameter can be <strong>{{NULL}}</strong>. </p> <p>You can use this parameter to configure the capture engine. Call <strong>{{MFCreateAttributes}}</strong> to create an attribute store, and then set any of the following attributes.</p> <ul> <li> {{MF_CAPTURE_ENGINE_D3D_MANAGER}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_DXVA}} </li> <li> {{MF_CAPTURE_ENGINE_DISABLE_HARDWARE_TRANSFORMS}} </li> <li> {{MF_CAPTURE_ENGINE_ENCODER_MFT_FIELDOFUSE_UNLOCK_Attribute}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_GENERATOR_GUID}} </li> <li> {{MF_CAPTURE_ENGINE_EVENT_STREAM_INDEX}} </li> <li> {{MF_CAPTURE_ENGINE_MEDIASOURCE_CONFIG}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_AUDIO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_PROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_RECORD_SINK_VIDEO_MAX_UNPROCESSED_SAMPLES}} </li> <li> {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} </li> <li> {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} </li> </ul> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies an audio-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_VIDEO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use an audio device, and the <em>pAudioSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pAudioSource</em> is <strong>{{NULL}}</strong>, the capture engine selects the microphone that is built into the video camera specified by <em>pVideoSource</em>. If the video camera does not have a microphone, the capture engine enumerates the audio-capture devices on the system and selects the first one.</p> <p>To override the default audio device, set <em>pAudioSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Audio/Video Capture in Media Foundation.</p> </dd> + + + <dd> <p>An <strong>{{IUnknown}}</strong> reference that specifies a video-capture device. This parameter can be <strong>{{NULL}}</strong>.</p> <p>If you set the {{MF_CAPTURE_ENGINE_USE_AUDIO_DEVICE_ONLY}} attribute to <strong>{{TRUE}}</strong> in <em>pAttributes</em>, the capture engine does not use a video device, and the <em>pVideoSource</em> parameter is ignored.</p> <p>Otherwise, if <em>pVideoSource</em> is <strong>{{NULL}}</strong>, the capture engine enumerates the video-capture devices on the system and selects the first one.</p> <p>To override the default video device, set <em>pVideoSource</em> to an <strong>{{IMFMediaSource}}</strong> or <strong>{{IMFActivate}}</strong> reference for the device. For more information, see Enumerating Video Capture Devices.</p> </dd> + + + + + <p>Starts preview.</p> + <p>Before calling this method, configure the preview sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the preview sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>After the preview sink is configured, you can stop and start preview by calling <strong>{{IMFCaptureEngine::StopPreview}}</strong> and <strong>{{IMFCaptureEngine::StartPreview}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The preview sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops preview.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PREVIEW_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The capture engine is not currently previewing.</p> </td></tr> </table><p>?</p> + + + + <p>Starts recording audio and/or video to a file.</p> + <p>Before calling this method, configure the recording sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the recording sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>.</p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STARTED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p><p>To stop recording, call <strong>{{IMFCaptureEngine::StopRecord}}</strong>.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The recording sink was not initialized.</p> </td></tr> </table><p>?</p> + + + + <p>Stops recording.</p> + <p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_RECORD_STOPPED}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>A Boolean value that specifies whether to finalize the output file. To create a valid output file, specify <strong>{{TRUE}}</strong>. Specify <strong>{{FALSE}}</strong> only if you want to interrupt the recording and discard the output file. If the value is <strong>{{FALSE}}</strong>, the operation completes more quickly, but the file will not be playable. </p> </dd> + + + <dd> <p>A Boolean value that specifies if the unprocessed samples waiting to be encoded should be flushed.</p> </dd> + + + + + <p>Captures a still image from the video stream.</p> + <p>Before calling this method, configure the photo sink by calling <strong>{{IMFCaptureSink::AddStream}}</strong>. To get a reference to the photo sink, call <strong>{{IMFCaptureEngine::GetSink}}</strong>. </p><p>This method is asynchronous. If the method returns a success code, the caller will receive an <strong>{{MF_CAPTURE_ENGINE_PHOTO_TAKEN}}</strong> event through the <strong>{{IMFCaptureEngineOnEventCallback::OnEvent}}</strong> method. The operation can fail asynchronously after the method succeeds. If so, the error code is conveyed through the <strong>OnEvent</strong> method.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets a reference to one of the capture sink objects. You can use the capture sinks to configure preview, recording, or still-image capture.</p> + <p>This method can return one of these values.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>Success.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>Invalid argument.</p> </td></tr> </table><p>?</p> + + + <dd> <p>An <strong>{{MF_CAPTURE_ENGINE_SINK_TYPE}}</strong> value that specifies the capture sink to retrieve.</p> </dd> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSink}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Gets a reference to the capture source object. Use the capture source to configure the capture devices.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Receives a reference to the <strong>{{IMFCaptureSource}}</strong> interface. The caller must release the interface.</p> </dd> + + + + + <p>Creates an instance of the capture engine.</p> + <p>To get a reference to this interface, call the CoCreateInstance function and specify the {{CLSID}} equal to <strong>{{CLSID_MFCaptureEngineClassFactory}}</strong>. </p><p>Calling the <strong>{{MFCreateCaptureEngine}}</strong> function is equivalent to calling <strong>{{IMFCaptureEngineClassFactory::CreateInstance}}</strong>.</p> + + + + <p>Creates an instance of the capture engine.</p> + <p>Before calling this method, call the <strong>{{MFStartup}}</strong> function.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The {{CLSID}} of the object to create. Currently, this parameter must equal <strong>{{CLSID_MFCaptureEngine}}</strong>.</p> </dd> + + + <dd> <p>The {{IID}} of the requested interface. The capture engine supports the <strong>{{IMFCaptureEngine}}</strong> interface.</p> </dd> + + + <dd> <p>Receives a reference to the requested interface. The caller must release the interface.</p> </dd> + + + + + <p>Extensions for the <strong>{{IMFCaptureEngineOnSampleCallback}}</strong> callback interface that is used to receive data from the capture engine.</p> + + + + <p>Called by the capture sink when the format of the sample is changed.</p> + <p>The return value is ignored.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>The new media type.</p> </dd> + + + + + <p>Extends the <strong>{{IMFCaptureSink}}</strong> interface to provide functionality for dynamically setting the output media type of the record sink or preview sink.</p> + + + + <p>Dynamically sets the output media type of the record sink or preview sink.</p> + <p>This is an asynchronous call. Listen to the {{MF_CAPTURE_ENGINE_OUTPUT_MEDIA_TYPE_SET}} event +to be notified when the output media type has been set.</p> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALID_MEDIATYPE}}</strong></dt> </dl> </td><td> <p>The sink does not support the media type.</p> </td></tr> </table><p>?</p> + + + <dd> <p>The stream index to change the output media type on.</p> </dd> + + + <dd> <p>The new output media type.</p> </dd> + + + <dd> <p>The new encoder attributes. This can be <strong>null</strong>.</p> </dd> + + + + + <p>Contains the header information that is part of the raw input data. </p> + <p>To get more information on the device, use <strong>hDevice</strong> in a call to <strong>GetRawInputDeviceInfo</strong>.</p> + + + <dd> <p>The type of raw input. It can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Raw input comes from some device that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Raw input comes from the keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Raw input comes from the mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The size, in bytes, of the entire input packet of data. This includes <strong>{{RAWINPUT}}</strong> plus possible extra input reports in the <strong>{{RAWHID}}</strong> variable length array. </p> </dd> + + + <dd> <p>A handle to the device generating the raw input data. </p> </dd> + + + <dd> <p>The value passed in the <em>wParam</em> parameter of the <strong>{{WM_INPUT}}</strong> message. </p> </dd> + + + + + <p>Contains information about the state of the keyboard. </p> + + + <dd> <p>The scan code from the key depression. The scan code for keyboard overrun is <strong>{{KEYBOARD_OVERRUN_MAKE_CODE}}</strong>. </p> </dd> + + + <dd> <p>Flags for scan code information. It can be one or more of the following.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RI_KEY_BREAK}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The key is up.</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E0}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The scan code has the {{E0}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_E1}}</strong></dt> <dt>4</dt> </dl> </td><td> <p>The scan code has the {{E1}} prefix. +</p> </td></tr> <tr><td><dl> <dt><strong>{{RI_KEY_MAKE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The key is down.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Reserved; must be zero. </p> </dd> + + + <dd> <p>Windows message compatible virtual-key code. For more information, see Virtual Key Codes. </p> </dd> + + + <dd> <p>The corresponding window message, for example <strong>{{WM_KEYDOWN}}</strong>, <strong>{{WM_SYSKEYDOWN}}</strong>, and so forth. </p> </dd> + + + <dd> <p>The device-specific additional information for the event. </p> </dd> + + + + + <p>Describes the format of the raw input from a Human Interface Device ({{HID}}). </p> + <p>Each <strong>{{WM_INPUT}}</strong> can indicate several inputs, but all of the inputs come from the same {{HID}}. The size of the <strong>bRawData</strong> array is <strong>dwSizeHid</strong> * <strong>dwCount</strong>.</p> + + + <dd> <p>The size, in bytes, of each {{HID}} input in <strong>bRawData</strong>. </p> </dd> + + + <dd> <p>The number of {{HID}} inputs in <strong>bRawData</strong>.</p> </dd> + + + <dd> <p>The raw input data, as an array of bytes. </p> </dd> + + + + + + + + <p>This section describes how the system provides raw input to your application and how an application receives and processes that input. Raw input is sometimes referred to as generic input. </p> + + + + <p>Defines the raw input data coming from the specified mouse.</p> + <p>For the mouse, the Usage Page is 1 and the Usage is 2.</p> + + + <dd> <p>The identifier of the mouse device.</p> </dd> + + + <dd> <p>The number of buttons for the mouse.</p> </dd> + + + <dd> <p>The number of data points per second. This information may not be applicable for every mouse device.</p> </dd> + + + <dd> <p><strong>{{TRUE}}</strong> if the mouse has a wheel for horizontal scrolling; otherwise, <strong>{{FALSE}}</strong>. </p> <p><strong>Windows?{{XP:}}??</strong>This member is only supported starting with Windows?Vista.</p> </dd> + + + + + <p>Defines the raw input data coming from the specified keyboard. </p> + <p>For the keyboard, the Usage Page is 1 and the Usage is 6. </p> + + + <dd> <p>The type of the keyboard. </p> </dd> + + + <dd> <p>The subtype of the keyboard. </p> </dd> + + + <dd> <p>The scan code mode. </p> </dd> + + + <dd> <p>The number of function keys on the keyboard.</p> </dd> + + + <dd> <p>The number of {{LED}} indicators on the keyboard.</p> </dd> + + + <dd> <p>The total number of keys on the keyboard. </p> </dd> + + + + + <p>Defines the raw input data coming from the specified Human Interface Device ({{HID}}). </p> + + + <dd> <p>The vendor identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The product identifier for the {{HID}}. </p> </dd> + + + <dd> <p>The version number for the {{HID}}. </p> </dd> + + + <dd> <p>The top-level collection Usage Page for the device. </p> </dd> + + + <dd> <p>The top-level collection Usage for the device. </p> </dd> + + + + + <p>Defines the raw input data coming from any device. </p> + + + <dd> <p>The size, in bytes, of the <strong>{{RID_DEVICE_INFO}}</strong> structure. </p> </dd> + + + <dd> <p>The type of raw input data. This member can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>Data comes from an {{HID}} that is not a keyboard or a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>Data comes from a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>Data comes from a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEMOUSE}}</strong>, this is the <strong>{{RID_DEVICE_INFO_MOUSE}}</strong> structure that defines the mouse. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEKEYBOARD}}</strong>, this is the <strong>{{RID_DEVICE_INFO_KEYBOARD}}</strong> structure that defines the keyboard. </p> </dd> + + + <dd> <p>If <strong>dwType</strong> is <strong>{{RIM_TYPEHID}}</strong>, this is the <strong>{{RID_DEVICE_INFO_HID}}</strong> structure that defines the {{HID}} device. </p> </dd> + + + + + <p>Defines information for the raw input devices. </p> + <p>If <strong>{{RIDEV_NOLEGACY}}</strong> is set for a mouse or a keyboard, the system does not generate any legacy message for that device for the application. For example, if the mouse {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_LBUTTONDOWN}}</strong> and related legacy mouse messages are not generated. Likewise, if the keyboard {{TLC}} is set with <strong>{{RIDEV_NOLEGACY}}</strong>, <strong>{{WM_KEYDOWN}}</strong> and related legacy keyboard messages are not generated.</p><p>If <strong>{{RIDEV_REMOVE}}</strong> is set and the <strong>hwndTarget</strong> member is not set to <strong>{{NULL}}</strong>, then parameter validation will fail.</p> + + + <dd> <p>Top level collection Usage page for the raw input device. </p> </dd> + + + <dd> <p>Top level collection Usage for the raw input device. </p> </dd> + + + <dd> <p>Mode flag that specifies how to interpret the information provided by <strong>usUsagePage</strong> and <strong>usUsage</strong>. It can be zero (the default) or one of the following values. By default, the operating system sends raw input from devices with the specified top level collection ({{TLC}}) to the registered application as long as it has the window focus. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDEV_APPKEYS}}</strong></dt> <dt>0x00000400</dt> </dl> </td><td> <p>If set, the application command keys are handled. <strong>{{RIDEV_APPKEYS}}</strong> can be specified only if <strong>{{RIDEV_NOLEGACY}}</strong> is specified for a keyboard device.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_CAPTUREMOUSE}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the mouse button click does not activate the other window.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_DEVNOTIFY}}</strong></dt> <dt>0x00002000</dt> </dl> </td><td> <p>If set, this enables the caller to receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for device arrival and device removal.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXCLUDE}}</strong></dt> <dt>0x00000010</dt> </dl> </td><td> <p>If set, this specifies the top level collections to exclude when reading a complete usage page. This flag only affects a {{TLC}} whose usage page is already specified with <strong>{{RIDEV_PAGEONLY}}</strong>. </p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_EXINPUTSINK}}</strong></dt> <dt>0x00001000</dt> </dl> </td><td> <p>If set, this enables the caller to receive input in the background only if the foreground application does not process it. In other words, if the foreground application is not registered for raw input, then the background application that is registered will receive the input.</p> <p><strong>Windows?{{XP:}}??</strong>This flag is not supported until Windows?Vista</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_INPUTSINK}}</strong></dt> <dt>0x00000100</dt> </dl> </td><td> <p>If set, this enables the caller to receive the input even when the caller is not in the foreground. Note that <strong>hwndTarget</strong> must be specified.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOHOTKEYS}}</strong></dt> <dt>0x00000200</dt> </dl> </td><td> <p>If set, the application-defined keyboard device hotkeys are not handled. However, the system hotkeys; for example, {{ALT}}+{{TAB}} and {{CTRL}}+{{ALT}}+{{DEL}}, are still handled. By default, all keyboard hotkeys are handled. <strong>{{RIDEV_NOHOTKEYS}}</strong> can be specified even if <strong>{{RIDEV_NOLEGACY}}</strong> is not specified and <strong>hwndTarget</strong> is <strong>{{NULL}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_NOLEGACY}}</strong></dt> <dt>0x00000030</dt> </dl> </td><td> <p>If set, this prevents any devices specified by <strong>usUsagePage</strong> or <strong>usUsage</strong> from generating legacy messages. This is only for the mouse and keyboard. See Remarks.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_PAGEONLY}}</strong></dt> <dt>0x00000020</dt> </dl> </td><td> <p>If set, this specifies all devices whose top level collection is from the specified <strong>usUsagePage</strong>. Note that <strong>usUsage</strong> must be zero. To exclude a particular top level collection, use <strong>{{RIDEV_EXCLUDE}}</strong>.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDEV_REMOVE}}</strong></dt> <dt>0x00000001</dt> </dl> </td><td> <p>If set, this removes the top level collection from the inclusion list. This tells the operating system to stop reading from a device which matches the top level collection.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A handle to the target window. If <strong>{{NULL}}</strong> it follows the keyboard focus.</p> </dd> + + + + + <p>Contains information about a raw input device.</p> + + + <dd> <p>A handle to the raw input device. </p> </dd> + + + <dd> <p>The type of device. This can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEHID}}</strong></dt> <dt>2</dt> </dl> </td><td> <p>The device is an {{HID}} that is not a keyboard and not a mouse.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEKEYBOARD}}</strong></dt> <dt>1</dt> </dl> </td><td> <p>The device is a keyboard.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIM_TYPEMOUSE}}</strong></dt> <dt>0</dt> </dl> </td><td> <p>The device is a mouse.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Retrieves the raw input from the specified device.</p> + <p><strong>GetRawInputData</strong> gets the raw input one <strong>{{RAWINPUT}}</strong> structure at a time. In contrast, <strong>GetRawInputBuffer</strong> gets an array of <strong>{{RAWINPUT}}</strong> structures.</p> + <p>If <em>pData</em> is <strong>{{NULL}}</strong> and the function is successful, the return value is 0. If <em>pData</em> is not <strong>{{NULL}}</strong> and the function is successful, the return value is the number of bytes copied into pData.</p><p>If there is an error, the return value is (<strong>{{UINT}}</strong>)-1.</p> + + + <dd> <p>A handle to the <strong>{{RAWINPUT}}</strong> structure. This comes from the <em>lParam</em> in <strong>{{WM_INPUT}}</strong>. </p> </dd> + + + <dd> <p>The command flag. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RID_HEADER}}</strong></dt> <dt>0x10000005</dt> </dl> </td><td> <p>Get the header information from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RID_INPUT}}</strong></dt> <dt>0x10000003</dt> </dl> </td><td> <p>Get the raw data from the <strong>{{RAWINPUT}}</strong> structure.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to the data that comes from the <strong>{{RAWINPUT}}</strong> structure. This depends on the value of <em>uiCommand</em>. If <em>pData</em> is <strong>{{NULL}}</strong>, the required size of the buffer is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Retrieves information about the raw input device.</p> + <p>If successful, this function returns a non-negative number indicating the number of bytes copied to <em>pData</em>. </p><p>If <em>pData</em> is not large enough for the data, the function returns -1. If <em>pData</em> is <strong>{{NULL}}</strong>, the function returns a value of zero. In both of these cases, <em>pcbSize</em> is set to the minimum size required for the <em>pData</em> buffer.</p><p>Call <strong>GetLastError</strong> to identify any other errors.</p> + + + <dd> <p>A handle to the raw input device. This comes from the <strong>hDevice</strong> member of <strong>{{RAWINPUTHEADER}}</strong> or from <strong>GetRawInputDeviceList</strong>. </p> </dd> + + + <dd> <p>Specifies what data will be returned in <em>pData</em>. This parameter can be one of the following values. </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICENAME}}</strong></dt> <dt>0x20000007</dt> </dl> </td><td> <p><em>pData</em> points to a string that contains the device name. </p> <p>For this <em>uiCommand</em> only, the value in <em>pcbSize</em> is the character count (not the byte count).</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_DEVICEINFO}}</strong></dt> <dt>0x2000000b</dt> </dl> </td><td> <p><em>pData</em> points to an <strong>{{RID_DEVICE_INFO}}</strong> structure.</p> </td></tr> <tr><td><dl> <dt><strong>{{RIDI_PREPARSEDDATA}}</strong></dt> <dt>0x20000005</dt> </dl> </td><td> <p><em>pData</em> points to the previously parsed data.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p>A reference to a buffer that contains the information specified by <em>uiCommand</em>. If <em>uiCommand</em> is <strong>{{RIDI_DEVICEINFO}}</strong>, set the <strong>cbSize</strong> member of <strong>{{RID_DEVICE_INFO}}</strong> to <code>sizeof({{RID_DEVICE_INFO}})</code> before calling <strong>GetRawInputDeviceInfo</strong>. </p> </dd> + + + <dd> <p>The size, in bytes, of the data in <em>pData</em>. </p> </dd> + + + + + <p>Performs a buffered read of the raw input data.</p> + <p>Using <strong>GetRawInputBuffer</strong>, the raw input data is buffered in the array of <strong>{{RAWINPUT}}</strong> structures. For an unbuffered read, use the <strong>GetMessage</strong> function to read in the raw input data. </p><p>The <strong>{{NEXTRAWINPUTBLOCK}}</strong> macro allows an application to traverse an array of <strong>{{RAWINPUT}}</strong> structures.</p><strong>Note</strong>??To get the correct size of the raw input buffer, do not use *<em>pcbSize</em>, use *<em>pcbSize</em> * 8 instead. To ensure <strong>GetRawInputBuffer</strong> behaves properly on {{WOW64}}, you must align the <strong>{{RAWINPUT}}</strong> structure by 8 bytes. The following code shows how to align <strong>{{RAWINPUT}}</strong> for {{WOW64}}. <pre>[StructLayout(LayoutKind.Explicit)] +internal struct {{RAWINPUT}} +{ [FieldOffset(0)] public {{RAWINPUTHEADER}} header; [FieldOffset(16+8)] public {{RAWMOUSE}} mouse; [FieldOffset(16+8)] public {{RAWKEYBOARD}} keyboard; [FieldOffset(16+8)] public {{RAWHID}} hid; +} +</pre>? + <p>If <em>pData</em> is {{NULL}} and the function is successful, the return value is zero. If <em>pData</em> is not {{NULL}} and the function is successful, the return value is the number of <strong>{{RAWINPUT}}</strong> structures written to <em>pData</em>.</p><p>If an error occurs, the return value is (<strong>{{UINT}}</strong>)-1. Call <strong>GetLastError</strong> for the error code.</p> + + + <dd> <p>A reference to a buffer of <strong>{{RAWINPUT}}</strong> structures that contain the raw input data. If <strong>{{NULL}}</strong>, the minimum required buffer, in bytes, is returned in *<em>pcbSize</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUT}}</strong> structure. </p> </dd> + + + <dd> <p>The size, in bytes, of the <strong>{{RAWINPUTHEADER}}</strong> structure. </p> </dd> + + + + + <p>Registers the devices that supply the raw input data.</p> + <p>To receive <strong>{{WM_INPUT}}</strong> messages, an application must first register the raw input devices using <strong>RegisterRawInputDevices</strong>. By default, an application does not receive raw input.</p><p>To receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> messages, an application must specify the {{RIDEV_DEVNOTIFY}} flag for each device class that is specified by the usUsagePage and usUsage fields of the <strong>{{RAWINPUTDEVICE}}</strong> structure . By default, an application does not receive <strong>{{WM_INPUT_DEVICE_CHANGE}}</strong> notifications for raw input device arrival and removal.</p><p>If a <strong>{{RAWINPUTDEVICE}}</strong> structure has the {{RIDEV_REMOVE}} flag set and the hwndTarget parameter is not set to {{NULL}}, then parameter validation will fail. </p> + <p><strong>{{TRUE}}</strong> if the function succeeds; otherwise, <strong>{{FALSE}}</strong>. If the function fails, call <strong>GetLastError</strong> for more information.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures that represent the devices that supply the raw input.</p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures pointed to by <em>pRawInputDevices</em>.</p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure.</p> </dd> + + + + + <p>Retrieves the information about the raw input devices for the current application.</p> + <p>To receive raw input from a device, an application must register it by using <strong>RegisterRawInputDevices</strong>. </p> + <p>If successful, the function returns a non-negative number that is the number of <strong>{{RAWINPUTDEVICE}}</strong> structures written to the buffer. </p><p>If the <em>pRawInputDevices</em> buffer is too small or <strong>{{NULL}}</strong>, the function sets the last error as <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>, returns -1, and sets <em>puiNumDevices</em> to the required number of devices. If the function fails for any other reason, it returns -1. For more details, call <strong>GetLastError</strong>. </p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICE}}</strong> structures for the application. </p> </dd> + + + <dd> <p>The number of <strong>{{RAWINPUTDEVICE}}</strong> structures in *<em>pRawInputDevices</em>. </p> </dd> + + + <dd> <p>The size, in bytes, of a <strong>{{RAWINPUTDEVICE}}</strong> structure. </p> </dd> + + + + + <p>Enumerates the raw input devices attached to the system. </p> + <p>The devices returned from this function are the mouse, the keyboard, and other Human Interface Device ({{HID}}) devices.</p><p>To get more detailed information about the attached devices, call <strong>GetRawInputDeviceInfo</strong> using the hDevice from <strong>{{RAWINPUTDEVICELIST}}</strong>. </p> + <p>If the function is successful, the return value is the number of devices stored in the buffer pointed to by <em>pRawInputDeviceList</em>.</p><p>On any other error, the function returns (<strong>{{UINT}}</strong>) -1 and <strong>GetLastError</strong> returns the error indication.</p> + + + <dd> <p>An array of <strong>{{RAWINPUTDEVICELIST}}</strong> structures for the devices attached to the system. If <strong>{{NULL}}</strong>, the number of devices are returned in *<em>puiNumDevices</em>. </p> </dd> + + + <dd> <p>If <em>pRawInputDeviceList</em> is <strong>{{NULL}}</strong>, the function populates this variable with the number of devices attached to the system; otherwise, this variable specifies the number of <strong>{{RAWINPUTDEVICELIST}}</strong> structures that can be contained in the buffer to which <em>pRawInputDeviceList</em> points. If this value is less than the number of devices attached to the system, the function returns the actual number of devices in this variable and fails with <strong>{{ERROR_INSUFFICIENT_BUFFER}}</strong>.</p> </dd> + + + <dd> <p>The size of a <strong>{{RAWINPUTDEVICELIST}}</strong> structure, in bytes.</p> </dd> + + + + + <p>Indicates the filter type.</p> + <strong>Note</strong>??Note that the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>LowPassOnePoleFilter</strong> or the <strong>HighPassOnePoleFilter</strong>.? + + + <dd> <p>Attenuates (reduces) frequencies above the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies outside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency.</p> </dd> + + + <dd> <p>Attenuates frequencies inside a given range.</p> </dd> + + + <dd> <p>Attenuates frequencies above the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + <dd> <p>Attenuates frequencies below the cutoff frequency. This is a one-pole filter, and <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong>.<strong>OneOverQ</strong> has no effect.</p> </dd> + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>Defines a destination voice that is the target of a send from another voice and specifies whether a filter should be used.</p> + + + + <dd> <p>Indicates whether a filter should be used on data sent to the voice pointed to by <strong>pOutputVoice</strong>. Flags can be 0 or {{XAUDIO2_SEND_USEFILTER}}.</p> </dd> + + + <dd> <p>A reference to an <strong>{{IXAudio2Voice}}</strong> that will be the target of the send. The <strong>pOutputVoice</strong> member cannot be {{NULL}}.</p> </dd> + + + + + <p>Defines a set of voices to receive data from a single output voice.</p> + <p>If <strong>pSends</strong> is not {{NULL}} all of its elements must be non-{{NULL}}. To send output to the default mastering voice call <strong>{{IXAudio2Voice::SetOutputVoices}}</strong> with the pSendList argument set to {{NULL}}. </p><p>Setting <strong>SendCount</strong> to 0 is useful for certain effects such as volume meters or file writers that don't generate any audio output to pass on to another voice. </p><p>If needed, a voice will perform a single sample rate conversion, from the voice's input sample rate to the input sample rate of the voice's output voices. Because only one sample rate conversion will be performed, all the voice's output voices must have the same input sample rate. If the input sample rates of the voice and its output voices are the same, no sample rate conversion is performed. +</p> + + + <dd> <p>Number of voices to receive the output of the voice. An <strong>OutputCount</strong> value of 0 indicates the voice should not send output to any voices.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_SEND_DESCRIPTOR}}</strong> structures describing destination voices and the filters that should be used when sending to the voices. This array should contain <strong>SendCount</strong> elements. If <strong>SendCount</strong> is 0 <strong>pSends</strong> should be {{NULL}}. Note that <strong>pSends</strong> cannot contain the same voice more than once.</p> </dd> + + + + + <p>Contains information about an {{XAPO}} for use in an effect chain.</p> + <p>{{XAPO}} instances are passed to {{XAudio2}} as <strong>{{IUnknown}}</strong> interfaces and {{XAudio2}} uses <strong>{{IXAPO::QueryInterface}}</strong> to acquire an <strong>{{IXAPO}}</strong> interface and to detect whether the {{XAPO}} implements the <strong>{{IXAPOParameters}}</strong> interface. </p><p>For additional information on using {{XAPOs}} with {{XAudio2}} see How to: Create an Effect Chain and How to: Use an {{XAPO}} in {{XAudio2}}.</p> + + + + <p>Defines an effect chain.</p> + + + + <dd> <p>Number of effects in the effect chain for the voice.</p> </dd> + + + <dd> <p>Array of <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structures containing references to {{XAPO}} instances.</p> </dd> + + + + + <p>Defines filter parameters for a source voice.</p> + <p>Setting {{XAUDIO2_FILTER_PARAMETERS}} with the following values is acoustically equivalent to the filter being fully bypassed.</p><pre>{{XAUDIO2_FILTER_PARAMETERS}} FilterParams; +FilterParams.Frequency = 1.0f; +FilterParams.OneOverQ = 1.0f; +FilterParams.Type = LowPassFilter; +</pre><p>The following formulas show the relationship between the members of {{XAUDIO2_FILTER_PARAMETERS}} and the per-voice filter.</p><pre>Yl( n ) = {{F1}} yb( n ) + yl( n - 1 ) +Yb( n ) = {{F1}} yh( n ) + yb( n - 1 ) +Yh( n ) = x( n ) - yl( n ) - OneOverQ(yb( n - 1 ) +Yn( n ) = Yl(n) + Yh(n) </pre><p>Where:</p><pre>Yl = lowpass output +Yb = bandpass output +Yh = highpass output +Yn = notch output +{{F1}} = {{XAUDIO2_FILTER_PARAMETERS}}.Frequency +OneOverQ = {{XAUDIO2_FILTER_PARAMETERS}}.OneOverQ</pre> + + + <dd> <p>The <strong>{{XAUDIO2_FILTER_TYPE}}</strong>.</p> </dd> + + + <dd> <p>Filter radian frequency calculated as (2 * sin(pi * (desired filter cutoff frequency) / sampleRate)). The frequency must be greater than or equal to 0 and less than or equal to {{XAUDIO2_MAX_FILTER_FREQUENCY}}. The maximum frequency allowable is equal to the source sound's sample rate divided by six which corresponds to the maximum filter radian frequency of 1. For example, if a sound's sample rate is 48000 and the desired cutoff frequency is the maximum allowable value for that sample rate, 8000, the value for <strong>Frequency</strong> will be 1. +If {{XAUDIO2_HELPER_FUNCTIONS}} is defined, {{XAudio2}}.h will include the <strong>{{XAudio2RadiansToCutoffFrequency}}</strong> and <strong>{{XAudio2CutoffFrequencyToRadians}}</strong> helper functions for converting between hertz and radian frequencies. Defining {{XAUDIO2_HELPER_FUNCTIONS}} will also include <strong>{{XAudio2CutoffFrequencyToOnePoleCoefficient}}</strong> for converting between hertz and a one-pole coefficient suitable for use with the LowPassOnePoleFilter and HighPassOnePoleFilter. </p> </dd> + + + <dd> <p>Reciprocal of Q factor. Controls how quickly frequencies beyond Frequency are dampened. Larger values result in quicker dampening while smaller values cause dampening to occur more gradually. Must be greater than 0 and less than or equal to {{XAUDIO2_MAX_FILTER_ONEOVERQ}}.</p> </dd> + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + <p>Used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> when submitting xWMA data.</p> + <p>When streaming an xWMA file a few packets at a time, {{XAUDIO2_END_OF_STREAM}} should be specified on the last packet. Alternatively, the application may call <strong>{{IXAudio2SourceVoice::Discontinuity}}</strong> after submitting the last packet. </p><p>In addition, when streaming an xWMA file a few packets at a time, the application should subtract <strong>pDecodedPacketCumulativeBytes</strong>[<strong>PacketCount</strong>-1] of the previous packet from all the entries of the currently submitted packet. </p><p>The members of <strong>{{XAUDIO2_BUFFER_WMA}}</strong> correspond to values contained in the 'dpds' {{RIFF}} chunk of the xWMA file being played. <strong>PacketCount</strong> will correspond to the size in {{UINT32s}} of the chunk. <strong>pDecodedPacketCumulativeBytes</strong> will correspond to a {{UINT32}} buffer containing the contents of the chunk. The contents of the buffer will need to be byte swapped when loading the buffer on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped and destroyed. </p><p>{{XAUDIO}} 2.8 in Windows 8.x does not support xWMA decoding. Use Windows Media Foundation {{APIs}} to perform the decoding from {{WMA}} to {{PCM}} instead. This functionality is available in the DirectX {{SDK}} versions of {{XAUDIO}} and in {{XAUDIO}} 2.9 in Windows?10.</p> + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Contains performance information.</p> + <p>{{CPU}} cycles are recorded using . Use to convert these values.</p> + + + <dd> <p>{{CPU}} cycles spent on audio processing since the last call to the <strong>{{IXAudio2::StartEngine}}</strong> or <strong>{{IXAudio2::GetPerformanceData}}</strong> function.</p> </dd> + + + <dd> <p>Total {{CPU}} cycles elapsed since the last call. </p> <strong>Note</strong>??This only counts cycles on the {{CPU}} on which {{XAudio2}} is running. ? </dd> + + + <dd> <p>Fewest {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Most {{CPU}} cycles spent on processing any single audio quantum since the last call.</p> </dd> + + + <dd> <p>Total memory currently in use.</p> </dd> + + + <dd> <p>Minimum delay that occurs between the time a sample is read from a source buffer and the time it reaches the speakers. </p> <table> <tr><th>Windows</th></tr> <tr><td>The delay reported is a variable value equal to the rough distance between the last sample submitted to the driver by {{XAudio2}} and the sample currently playing. The following factors can affect the delay: playing multichannel audio on a hardware-accelerated device; the type of audio device (WavePci, WaveCyclic, or WaveRT); and, to a lesser extent, audio hardware implementation. +</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>The delay reported is a fixed value, which is normally 1,024 samples (21.333 ms at 48 kHz). If <strong>{{XOverrideSpeakerConfig}}</strong> has been called using the <strong>{{XAUDIOSPEAKERCONFIG_LOW_LATENCY}}</strong> flag, the delay reported is 512 samples (10.667 ms at 48 kHz). +</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Total audio dropouts since the engine started.</p> </dd> + + + <dd> <p>Number of source voices currently playing. </p> </dd> + + + <dd> <p>Total number of source voices currently in existence. </p> </dd> + + + <dd> <p>Number of submix voices currently playing.</p> </dd> + + + <dd> <p>Number of resampler xAPOs currently active.</p> </dd> + + + <dd> <p>Number of matrix mix xAPOs currently active.</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>Number of source voices decoding {{XMA}} data.</td></tr> </table> <p>?</p> </dd> + + + <dd> <table> <tr><th>Windows</th></tr> <tr><td>Unsupported.</td></tr> </table> <p>?</p> <table> <tr><th>Xbox 360</th></tr> <tr><td>A voice can use more than one {{XMA}} stream.</td></tr> </table> <p>?</p> </dd> + + + + + <p>Contains the new global debug configuration for {{XAudio2}}. Used with the <strong>SetDebugConfiguration</strong> function.</p> + <p>Debugging messages can be completely turned off by initializing <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> to all zeroes.</p><strong>Note</strong>??For this version of {{XAudio2}}, only the <strong>{{XAUDIO2_LOG_ERRORS}}</strong> value is supported on <strong>TraceMask</strong> or <strong>BreakMask</strong>. All other members and values are ignored.? + + + + <p>{{IXAudio2}} is the interface for the {{XAudio2}} object that manages all audio engine states, the audio processing thread, the voice graph, and so forth. </p><p>This is the only {{XAudio2}} interface that is derived from the {{COM}} <strong>{{IUnknown}}</strong> interface. It controls the lifetime of the {{XAudio2}} object using two methods derived from <strong>{{IUnknown}}</strong>: <strong>{{IXAudio2::AddRef}}</strong> and <strong>{{IXAudio2::Release}}</strong>. No other {{XAudio2}} objects are reference-counted; their lifetimes are explicitly controlled using <em>create</em> and <em>destroy</em> calls, and are bounded by the lifetime of the {{XAudio2}} object that owns them.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} included three member functions that are not present in the Windows 8 version: <strong>GetDeviceCount</strong>, <strong>GetDeviceDetails</strong>, and <strong>Initialize</strong>. These enumeration methods are no longer provided and standard Windows Audio {{APIs}} should be used for device enumeration instead.</p> + + + + <p>Adds an <strong>{{IXAudio2EngineCallback}}</strong> reference to the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>This method can be called multiple times, allowing different components or layers of the same application to manage their own engine callback implementations separately. </p><p>It is invalid to call <strong>RegisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>RegisterForCallbacks</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + + <p>Removes an <strong>{{IXAudio2EngineCallback}}</strong> reference from the <strong>{{XAudio2}}</strong> engine callback list.</p> + <p>It is invalid to call <strong>UnregisterForCallbacks</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). </p> + <p>This method does not return a value.</p> + + + + <p>Creates and configures a source voice.</p> + <p>Source voices read audio data from the client. They process the data and send it to the {{XAudio2}} processing graph. </p><p>A source voice includes a variable-rate sample rate conversion, to convert data from the source format sample rate to the output rate required for the voice send list. If you use a {{NULL}} send list, the target sample rate will be the mastering voice's input sample rate. If you provide a single voice in pSendList, that voice's input sample rate is the target rate. If you provide multiple voices in the pSendList, all the source voice's output voices must be running at the same input sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destory a mastering voice if any source or submix voices still exist. </p><p>Source voices are always processed before any submix or mastering voices. This means that you do not need a ProcessingStage parameter to control the processing order. </p><p>When first created, source voices are in the stopped state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSourceVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSourceVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSourceVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSourceVoice</strong> is called. +</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}}-specific error codes.</p> + + + <dd> <p>If successful, returns a reference to the new <strong>{{IXAudio2SourceVoice}}</strong> object.</p> </dd> + + + <dd> <p>Pointer to a one of the structures in the table below. This structure contains the expected format for all audio buffers submitted to the source voice. +{{XAudio2}} supports {{PCM}} and {{ADPCM}} voice types. </p> <table> <tr><th>Format tag</th><th>Wave format structure</th><th>Size (in bytes)</th></tr> <tr><td>{{WAVE_FORMAT_PCM}} (0x0001) </td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>16</td></tr> <tr><td>-or-</td><td> <strong>{{WAVEFORMATEX}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_IEEE_FLOAT}} (0x0003) [32-bit]</td><td> <strong>{{PCMWAVEFORMAT}}</strong> </td><td>18</td></tr> <tr><td>{{WAVE_FORMAT_ADPCM}} (0x0002) [{{MS}}-{{ADPCM}}]</td><td> <strong>{{ADPCMWAVEFORMAT}}</strong> </td><td>50</td></tr> <tr><td>{{WAVE_FORMAT_EXTENSIBLE}} (0xFFFE)</td><td> <strong>{{WAVEFORMATEXTENSIBLE}}</strong> </td><td>40</td></tr> </table> <p>?</p> <p>{{XAudio2}} supports the following {{PCM}} formats. +</p> <ul> <li>8-bit (unsigned) integer {{PCM}} </li> <li>16-bit integer {{PCM}} (optimal format for {{XAudio2}}) </li> <li>20-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>24-bit integer {{PCM}} (either in 24 or 32 bit containers) </li> <li>32-bit integer {{PCM}} </li> <li>32-bit float {{PCM}} (preferred format after 16-bit integer) +</li> </ul> <p>The number of channels in a source voice must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. The sample rate of a source voice must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}.</p> <strong>Note</strong>??{{PCM}} data formats such as <strong>{{PCMWAVEFORMAT}}</strong> and <strong>{{ADPCMWAVEFORMAT}}</strong> that require more information than provided by <strong>{{WAVEFORMATEX}}</strong> have a <strong>{{WAVEFORMATEX}}</strong> structure as the first member in their format structures. When you create a source voice with one of those formats, cast the format's structure as a <strong>{{WAVEFORMATEX}}</strong> structure and use it as the value for <em>pSourceFormat</em>. ? </dd> + + + <dd> <p>Flags that specify the behavior of the source voice. A flag can be 0 or a combination of one or more of the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_NOPITCH}}</td><td>No pitch control is available on the voice.?</td></tr> <tr><td>{{XAUDIO2_VOICE_NOSRC}}</td><td>No sample rate conversion is available on the voice. The voice's outputs must have the same sample rate.<strong>Note</strong>??The {{XAUDIO2_VOICE_NOSRC}} flag causes the voice to behave as though the {{XAUDIO2_VOICE_NOPITCH}} flag also is specified. ? </td></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.?</td></tr> </table> <p>?</p> <strong>Note</strong>??The {{XAUDIO2_VOICE_MUSIC}} flag is not supported on Windows. ? </dd> + + + <dd> <p>Highest allowable frequency ratio that can be set on this voice. The value for this argument must be between {{XAUDIO2_MIN_FREQ_RATIO}} and {{XAUDIO2_MAX_FREQ_RATIO}}. Subsequent calls to <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> are clamped between {{XAUDIO2_MIN_FREQ_RATIO}} and <strong>MaxFrequencyRatio</strong>. +The maximum value for this argument is defined as {{XAUDIO2_MAX_FREQ_RATIO}}, which allows pitch to be raised by up to 10 octaves. </p> <p>If <em>MaxFrequencyRatio</em> is less than 1.0, the voice will use that ratio immediately after being created (rather than the default of 1.0). </p> <p> </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For {{XMA}} voices, there is one more restriction on the <em>MaxFrequencyRatio</em> argument and the voice's sample rate. The product of these two numbers cannot exceed {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO}} for one-channel voices or {{XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL}} for voices with any other number of channels. If the value specified for <em>MaxFrequencyRatio</em> is too high for the specified format, the call to <strong>CreateSourceVoice</strong> fails and produces a debug message. +</td></tr> </table> <p>?</p> <strong>Note</strong>??You can use the lowest possible <em>MaxFrequencyRatio</em> value to reduce {{XAudio2}}'s memory usage. ? </dd> + + + <dd> <p>Pointer to a client-provided callback interface, <strong>{{IXAudio2VoiceCallback}}</strong>.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the source voice. If pSendList is {{NULL}}, the send list defaults to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the source voice.</p> </dd> + + + + + <p>Creates and configures a submix voice.</p> + <p>Submix voices receive the output of one or more source or submix voices. They process the output, and then send it to another submix voice or to a mastering voice. </p><p>A submix voice performs a sample rate conversion from the input sample rate to the input rate of its output voices in <em>pSendList</em>. If you specify multiple voice sends, they must all have the input same sample rate. </p><p>You cannot create any source or submix voices until a mastering voice exists, and you cannot destroy a mastering voice if any source or submix voices still exist. </p><p>When first created, submix voices are in the started state. </p><p>{{XAudio2}} uses an internal memory pooler for voices with the same format. This means that memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the {{XAudio2}} pool. The memory pool is tied to an {{XAudio2}} engine instance. You can reclaim all the memory used by an instance of the {{XAudio2}} engine by destroying the {{XAudio2}} object and recreating it as necessary (forcing the memory pool to grow via preallocation would have to be reapplied as needed). </p><p>It is invalid to call <strong>CreateSubmixVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateSubmixVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the <em>pEffectChain</em> argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateSubmixVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateSubmixVoice</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>On success, returns a reference to the new <strong>{{IXAudio2SubmixVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels in the input audio data of the submix voice. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. +</p> </dd> + + + <dd> <p>Sample rate of the input audio data of submix voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. <em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> </dd> + + + <dd> <p>Flags that specify the behavior of the submix voice. It can be 0 or the following:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_VOICE_USEFILTER}}</td><td>The filter effect should be available on this voice.</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>An arbitrary number that specifies when this voice is processed with respect to other submix voices, if the {{XAudio2}} engine is running other submix voices. The voice is processed after all other voices that include a smaller <em>ProcessingStage</em> value and before all other voices that include a larger <em>ProcessingStage</em> value. Voices that include the same <em>ProcessingStage</em> value are processed in any order. A submix voice cannot send to another submix voice with a lower or equal <em>ProcessingStage</em> value. This prevents audio being lost due to a submix cycle. +</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structures that describe the set of destination voices for the submix voice. If <em>pSendList</em> is {{NULL}}, the send list will default to a single output to the first mastering voice created.</p> </dd> + + + <dd> <p>Pointer to a list of <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structures that describe an effect chain to use in the submix voice. </p> </dd> + + + + + <p>Creates and configures a mastering voice.</p> + <p>Mastering voices receive the output of one or more source or submix voices. They process the data, and send it to the audio output device. </p><p>Typically, you should create a mastering voice with an input sample rate that will be used by the majority of the title's audio content. The mastering voice performs a sample rate conversion from this input sample rate to the actual device output rate. </p><p>You cannot create a source or submix voices until a mastering voice exists. You cannot destroy a mastering voice if any source or submix voices still exist. </p><p>Mastering voices are always processed after all source and submix voices. This means that you need not specify a <em>ProcessingStage</em> parameter to control the processing order. </p><p>{{XAudio2}} only allows one mastering voice to exist at once. If you attempt to create more than one voice, {{XAUDIO2_E_INVALID_CALL}} is returned. If an additional mastering voice is needed, for example for an output device with a different audio category set, you will need to create an additional {{XAudio2}} instance. </p><p>When first created, mastering voices are in the started state. </p><p>It is invalid to call <strong>CreateMasteringVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>CreateMasteringVoice</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>CreateMasteringVoice</strong> successfully completes, and may be deleted immediately after <strong>CreateMasteringVoice</strong> is called. </p><p>Note that the DirectX {{SDK}} {{XAUDIO2}} version of <strong>CreateMasteringVoice</strong> took a DeviceIndex argument instead of a szDeviceId and a StreamCategory argument. This reflects the changes needed for the standard Windows device enumeration model.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. Returns {{ERROR_NOT_FOUND}} if no default audio device exists and {{NULL}} is passed in as the szDeviceId parameter. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p> If successful, returns a reference to the new <strong>{{IXAudio2MasteringVoice}}</strong> object.</p> </dd> + + + <dd> <p>Number of channels the mastering voice expects in its input audio. +<em>InputChannels</em> must be less than or equal to {{XAUDIO2_MAX_AUDIO_CHANNELS}}. </p> <p>You can set <em>InputChannels</em> to {{XAUDIO2_DEFAULT_CHANNELS}}, which causes {{XAudio2}} to try to detect the system speaker configuration setup. </p> </dd> + + + <dd> <p>Sample rate of the input audio data of the mastering voice. This rate must be a multiple of {{XAUDIO2_QUANTUM_DENOMINATOR}}. +<em>InputSampleRate</em> must be between {{XAUDIO2_MIN_SAMPLE_RATE}} and {{XAUDIO2_MAX_SAMPLE_RATE}}. </p> <p>You can set <em>InputSampleRate</em> to {{XAUDIO2_DEFAULT_SAMPLERATE}}, with the default being determined by the current platform. </p> <p>Windows {{XP}} defaults to 44100. </p> <p>Windows Vista and Windows 7 default to the setting specified in the Sound Control Panel. The default for this setting is 44100 (or 48000 if required by the driver). Flags +</p> </dd> + + + <dd> <p> Flags that specify the behavior of the mastering voice. Must be 0.</p> </dd> + + + <dd> <p>Identifier of the device to receive the output audio. Specifying the default value of {{NULL}} causes {{XAudio2}} to select the global default audio device.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes an effect chain to use in the mastering voice, or {{NULL}} to use no effects.</p> </dd> + + + <dd> <p>The audio stream category to use for this mastering voice.</p> </dd> + + + + + <p>Starts the audio processing thread.</p> + <p>After <strong>StartEngine</strong> is called, all started voices begin to consume audio. All enabled effects start running, and the resulting audio is sent to any connected output devices. When {{XAudio2}} is first initialized, the engine is already in the started state. </p><p>It is invalid to call <strong>StartEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>StartEngine</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Stops the audio processing thread.</p> + <p>When <strong>StopEngine</strong> is called, all output is stopped immediately. However, the audio graph is left untouched, preserving effect parameters, effect histories (for example, the data stored by a reverb effect in order to emit echoes of a previous sound), voice states, pending source buffers, cursor positions, and so forth. When the engine is restarted, the resulting audio output will be identical?apart from a period of silence?to the output that would have been produced if the engine had never been stopped. </p><p>It is invalid to call <strong>StopEngine</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Atomically applies a set of operations that are tagged with a given identifier.</p> + <p><strong>CommitChanges</strong> does nothing if no operations are tagged with the given identifier. </p><p>See the {{XAudio2}} Operation Sets overview about working with <strong>CommitChanges</strong> and {{XAudio2}} interface methods that may be deferred. +</p> + <p>Returns {{S_OK}} if successful; returns an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Identifier of the set of operations to be applied. To commit all pending operations, pass <strong>{{XAUDIO2_COMMIT_ALL}}</strong>. </p> </dd> + + + + + <p>Returns current resource usage details, such as available memory or {{CPU}} usage.</p> + <p>For specific information on the statistics returned by <strong>GetPerformanceData</strong>, see the <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure reference. </p> + <p>This method does not return a value.</p> + + + <dd> <p>On success, reference to an <strong>{{XAUDIO2_PERFORMANCE_DATA}}</strong> structure that is returned. +</p> </dd> + + + + + <p>Changes global debug logging options for {{XAudio2}}.</p> + <p>SetDebugConfiguration sets the debug configuration for the given instance of {{XAudio2}} engine. See <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> Structure for supported debug options. By default, {{XAudio2}} does not log debug output or break on errors. </p> + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to a <strong>{{XAUDIO2_DEBUG_CONFIGURATION}}</strong> structure that contains the new debug configuration.</p> </dd> + + + <dd> <p>This parameter is reserved and must be {{NULL}}.</p> </dd> + + + + + <p><strong>{{IXAudio2Voice}}</strong> represents the base interface from which <strong>{{IXAudio2SourceVoice}}</strong>, <strong>{{IXAudio2SubmixVoice}}</strong> and <strong>{{IXAudio2MasteringVoice}}</strong> are derived. The methods listed below are common to all voice subclasses.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Returns information about the creation flags, input channels, and sample rate of a voice.</p> + + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{XAUDIO2_VOICE_DETAILS}}</strong> structure containing information about the voice.</p> </dd> + + + + + <p>Designates a new set of submix or mastering voices to receive the output of the voice.</p> + <p>This method is only valid for source and submix voices. Mastering voices can not send audio to another voice. </p><p>After calling <strong>SetOutputVoices</strong> a voice's current send levels will be replaced by a default send matrix. The <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> method must be called to set a custom matrix for the new sendlist. </p><p>It is invalid to call <strong>SetOutputVoices</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If <strong>SetOutputVoices</strong> is called within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}.</p><strong>Note</strong>??Calling <strong>SetOutputVoices</strong> invalidates any send matrices previously set with <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + <dd> <p>Array of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> structure references to destination voices. If <em>pSendList</em> is {{NULL}}, the voice will send its output to the current mastering voice. To set the voice to not send its output anywhere set the <strong>OutputCount</strong> member of <strong>{{XAUDIO2_VOICE_SENDS}}</strong> to 0. All of the voices in a send list must have the same input sample rate, see {{XAudio2}} Sample Rate Conversions for additional information.</p> </dd> + + + + + <p>Replaces the effect chain of the voice.</p> + <p>The number of output channels allowed for a voice's effect chain is locked at creation of the voice. If you create the voice with an effect chain, any new effect chain passed to <strong>SetEffectChain</strong> must have the same number of input and output channels as the original effect chain. If you create the voice without an effect chain, the number of output channels allowed for the effect chain will default to the number of input channels for the voice. If any part of effect chain creation fails, none of it is applied. </p><p>After you attach an effect to an {{XAudio2}} voice, {{XAudio2}} takes control of the effect, and the client should not make any further calls to it. The simplest way to ensure this is to release all references to the effect. </p><p>It is invalid to call <strong>SetEffectChain</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>). If you call <strong>SetEffectChain</strong> within a callback, it returns {{XAUDIO2_E_INVALID_CALL}}. </p><p>The <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> that is passed in as the pEffectChain argument and any <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> information contained within it are no longer needed after <strong>SetEffectChain</strong> successfully completes, and may be deleted immediately after <strong>SetEffectChain</strong> is called.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. </p><p>See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that describes the new effect chain to use. If {{NULL}} is passed, the current effect chain is removed.</p> <strong>Note</strong>??If <em>pEffectChain</em> is non-{{NULL}}, the <strong>{{XAUDIO2_EFFECT_CHAIN}}</strong> structure that it points to must specify at least one effect. ? </dd> + + + + + <p>Enables the effect at a given position in the effect chain of the voice.</p> + <p>Be careful when you enable an effect while the voice that hosts it is running. Such an action can result in a problem if the effect significantly changes the audio's pitch or volume. </p><p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p><strong>EnableEffect</strong> takes effect immediately when you call it from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Disables the effect at a given position in the effect chain of the voice.</p> + <p>The effects in a given {{XAudio2}} voice's effect chain must consume and produce audio at that voice's processing sample rate. The only aspect of the audio format they can change is the channel count. For example a reverb effect can convert mono data to 5.1. The client can use the <strong>{{XAUDIO2_EFFECT_DESCRIPTOR}}</strong> structure's <strong>OutputChannels</strong> field to specify the number of channels it wants each effect to produce. Each effect in an effect chain must produce a number of channels that the next effect can consume. Any calls to <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> that would make the effect chain stop fulfilling these requirements will fail. </p><p>Disabling an effect immediately removes it from the processing graph. Any pending audio in the effect?such as a reverb tail?is not played. Be careful disabling an effect while the voice that hosts it is running. This can result in an audible artifact if the effect significantly changes the audio's pitch or volume. </p><p><strong>DisableEffect</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. </p> + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of valid error codes.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Returns the running state of the effect at a specified position in the effect chain of the voice.</p> + <p><strong>GetEffectState</strong> always returns the effect's actual current state. However, this may not be the state set by the most recent <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call: the actual state is only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::EnableEffect}}</strong> or <strong>{{IXAudio2Voice::DisableEffect}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if EnableEffect/DisableEffect was called with a deferred operation {{ID}}).</p> + <p>This method does not return a value.</p> + + + <dd> <p>Zero-based index of an effect in the effect chain of the voice.</p> </dd> + + + <dd> <p>Returns {{TRUE}} If the effect is enabled. If the effect is disabled, returns {{FALSE}}.</p> </dd> + + + + + <p>Sets parameters for a given effect in the voice's effect chain.</p> + <p>The specific effect being used determines the valid size and format of the <em>pParameters</em> buffer. The call will fail if <em>pParameters</em> is invalid or if <em>ParametersByteSize</em> is not exactly the size that the effect expects. The client must take care to direct the <strong>SetEffectParameters</strong> call to the right effect. If this call is directed to a different effect that happens to accept the same parameter block size, the parameters will be interpreted differently. This may lead to unexpected results. </p><p>The memory pointed to by <em>pParameters</em> must <em>not</em> be freed immediately, because {{XAudio2}} will need to refer to it later when the parameters actually are applied to the effect. This happens during the next audio processing pass if the <em>OperationSet</em> argument is <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. Otherwise, the parameters are applied to the effect later, during the first processing pass after the <strong>{{IXAudio2::CommitChanges}}</strong> function is called with the same <em>OperationSet</em> argument. </p><p><strong>SetEffectParameters</strong> takes effect immediately when called from an {{XAudio2}} callback with an <em>OperationSet</em> of <strong>{{XAUDIO2_COMMIT_NOW}}</strong>. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetEffectParameters}}</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. The actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful; otherwise, an error code. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface. +</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p> Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p> Size of the <strong>pParameters</strong> array in bytes.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the current effect-specific parameters of a given effect in the voice's effect chain.</p> + <p><strong>GetEffectParameters</strong> always returns the effect's actual current parameters. However, these may not match the parameters set by the most recent call to <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> was called with a deferred operation {{ID}}). </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p><p>Fails with {{E_NOTIMPL}} if the effect does not support a generic parameter control interface.</p> + + + <dd> <p>Zero-based index of an effect within the voice's effect chain.</p> </dd> + + + <dd> <p>Returns the current values of the effect-specific parameters.</p> </dd> + + + <dd> <p>Size, in bytes, of the pParameters array.</p> </dd> + + + + + <p>Sets the voice's filter parameters.</p> + <p><strong>SetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p>This method is usable only on source and submix voices and has no effect on mastering voices.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetFilterParameters}}</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the voice's filter parameters.</p> + <p><strong>GetFilterParameters</strong> will fail if the voice was not created with the {{XAUDIO2_VOICE_USEFILTER}} flag. </p><p><strong>GetFilterParameters</strong> always returns this voice's actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetFilterParameters}}</strong> was called with a deferred operation {{ID}}). </p><strong>Note</strong>??<strong>GetFilterParameters</strong> is usable only on source and submix voices and has no effect on mastering voices.? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information. </p> </dd> + + + + + <p>Sets the filter parameters on one of this voice's sends.</p> + <p><strong>SetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on a mastering voice's sends. +</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be set.</p> </dd> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the filter parameters from one of this voice's sends.</p> + <p><strong>GetOutputFilterParameters</strong> will fail if the send was not created with the {{XAUDIO2_SEND_USEFILTER}} flag. This method is usable only on sends belonging to source and submix voices and has no effect on mastering voices? sends. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputFilterParameters}}</strong> always returns this send?s actual current filter parameters. However, these may not match the parameters set by the most recent <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call: the actual parameters are only changed the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputFilterParameters}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p> <strong>{{IXAudio2Voice}}</strong> reference to the destination voice of the send whose filter parameters will be read.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XAUDIO2_FILTER_PARAMETERS}}</strong> structure containing the filter information.</p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Sets the overall volume level for the voice.</p> + <p><strong>SetVolume</strong> controls a voice's master input volume level. The master volume level is applied at different times depending on the type of voice. For submix and mastering voices the volume level is applied just before the voice's built in filter and effect chain is applied. For source voices the master volume level is applied after the voice's filter and effect chain is applied. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetVolume}}</strong> always returns the volume most recently set by <strong>{{IXAudio2Voice::SetVolume}}</strong>. However, it may not actually be in effect yet: it only takes effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetVolume}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetVolume}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Overall volume level to use. See Remarks for more information on volume levels. </p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. </p> </dd> + + + + + <p>Writes a number of 32-bit immediate values to the specified buffer locations directly from the command stream.</p> + <p><strong>WriteBufferImmediate</strong> performs <em>Count</em> number of 32-bit writes: one for each value and destination specified in <em>pParams</em>.</p><p>The receiving buffer (resource) must be in the <strong>{{D3D12_RESOURCE_STATE_COPY_DEST}}</strong> state to be a valid destination for <strong>WriteBufferImmediate</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>The number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures that are pointed to by <em>pParams</em> and <em>pModes</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_PARAMETER}}</strong> structures equal to <em>Count</em>.</p> </dd> + + + <dd> <p>The address of an array containing a number of <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE}}</strong> structures equal to <em>Count</em>. The default value is <strong>null</strong>; passing <strong>null</strong> causes the system to write all immediate values using <strong>{{D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT}}</strong>.</p> </dd> + + + + + <p>Sets the volume levels for the voice, per channel.</p> + <p><strong>SetChannelVolumes</strong> controls a voice's per-channel output levels and is applied just after the voice's final {{SRC}} and before its sends. </p><p>This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetChannelVolumes}}</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Number of channels in the voice.</p> </dd> + + + <dd> <p>Array containing the new volumes of each channel in the voice. The array must have <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the volume levels for the voice, per channel.</p> + <p>These settings are applied after the effect chain is applied. This method is valid only for source and submix voices, because mastering voices do not specify volume per channel. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume of 1 means there is no attenuation or gain, 0 means silence, and negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><strong>Note</strong>??<strong>GetChannelVolumes</strong> always returns the volume levels most recently set by <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong>. However, those values may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetChannelVolumes}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Confirms the channel count of the voice.</p> </dd> + + + <dd> <p>Returns the current volume level of each channel in the voice. The array must have at least <em>Channels</em> elements. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Sets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method is valid only for source and submix voices, because mastering voices write directly to the device with no matrix mixing. </p><p>Volume levels are expressed as floating-point amplitude multipliers between -{{XAUDIO2_MAX_VOLUME_LEVEL}} and {{XAUDIO2_MAX_VOLUME_LEVEL}} (-2?? to 2??), with a maximum gain of 144.5 dB. A volume level of 1.0 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>The {{X3DAudio}} function <strong>{{X3DAudioCalculate}}</strong> can produce an output matrix for use with <strong>SetOutputMatrix</strong> based on a sound's position and a listener's position.</p><strong>Note</strong>??<strong>{{IXAudio2Voice::GetOutputMatrix}}</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes.</p> + + + <dd> <p>Pointer to a destination <strong>{{IXAudio2Voice}}</strong> for which to set volume levels.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>SetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> ? <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel <em>S</em> to destination channel <em>D</em> is specified in the form <em>pLevelMatrix</em>[<em>SourceChannels</em> ? <em>D</em> + <em>S</em>]. +</p> <p>For example, when rendering two-channel stereo input into 5.1 output that is weighted toward the front channels?but is absent from the center and low-frequency channels?the matrix might have the values shown in the following table. </p> <table> <tr><th>Output</th><th>Left Input [Array Index]</th><th>Right Input [Array Index]</th></tr> <tr><td>Left</td><td>1.0 [0]</td><td>0.0 [1]</td></tr> <tr><td>Right</td><td>0.0 [2]</td><td>1.0 [3]</td></tr> <tr><td>Front Center</td><td>0.0 [4]</td><td>0.0 [5]</td></tr> <tr><td>{{LFE}}</td><td>0.0 [6]</td><td>0.0 [7]</td></tr> <tr><td>Rear Left</td><td>0.8 [8]</td><td>0.0 [9]</td></tr> <tr><td>Rear Right</td><td>0.0 [10]</td><td>0.8 [11]</td></tr> </table> <p>?</p> <strong>Note</strong>??The left and right input are fully mapped to the output left and right channels; 80 percent of the left and right input is mapped to the rear left and right channels. ? <p>See Remarks for more information on volume levels.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Gets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</p> + <p>This method applies only to source and submix voices, because mastering voices write directly to the device with no matrix mixing. Volume levels are expressed as floating-point amplitude multipliers between -2?? to 2??, with a maximum gain of 144.5 dB. A volume level of 1 means there is no attenuation or gain and 0 means silence. Negative levels can be used to invert the audio's phase. See {{XAudio2}} Volume and Pitch Control for additional information on volume control. </p><p>See <strong>{{WAVEFORMATEXTENSIBLE}}</strong> for information on standard channel ordering. </p><strong>Note</strong>??<strong>GetOutputMatrix</strong> always returns the levels most recently set by <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong>. However, they may not actually be in effect yet: they only take effect the next time the audio engine runs after the <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2Voice::SetOutputMatrix}}</strong> was called with a deferred operation {{ID}}).? + <p>This method does not return a value.</p> + + + <dd> <p>Pointer specifying the destination <strong>{{IXAudio2Voice}}</strong> to retrieve the output matrix for.</p> <strong>Note</strong>??If the voice sends to a single target voice then specifying {{NULL}} will cause <strong>GetOutputMatrix</strong> to operate on that target voice. ? </dd> + + + <dd> <p>Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</p> </dd> + + + <dd> <p>Confirms the input channel count of the destination voice.</p> </dd> + + + <dd> <p>Array of [<em>SourceChannels</em> * <em>DestinationChannels</em>] volume levels sent to the destination voice. The level sent from source channel S to destination channel D is returned in the form <em>pLevelMatrix</em>[<em>DestinationChannels</em> ? S + D]. See Remarks for more information on volume levels.</p> </dd> + + + + + <p>Destroys the voice. If necessary, stops the voice and removes it from the {{XAudio2}} graph.</p> + <p>If any other voice is currently sending audio to this voice, the method fails. </p><p><strong>DestroyVoice</strong> waits for the audio processing thread to be idle, so it can take a little while (typically no more than a couple of milliseconds). This is necessary to guarantee that the voice will no longer make any callbacks or read any audio data, so the application can safely free up these resources as soon as the call returns. </p><p>To avoid title thread interruptions from a blocking <strong>DestroyVoice</strong> call, the application can destroy voices on a separate non-critical thread, or the application can use voice pooling strategies to reuse voices rather than destroying them. Note that voices can only be reused with audio that has the same data format and the same number of channels the voice was created with. A voice can play audio data with different sample rates than that of the voice by calling <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> with an appropriate ratio parameter. </p><p>It is invalid to call <strong>DestroyVoice</strong> from within a callback (that is, <strong>{{IXAudio2EngineCallback}}</strong> or <strong>{{IXAudio2VoiceCallback}}</strong>).</p> + <p>This method does not return a value.</p> + + + + <p>Use a source voice to submit audio data to the {{XAudio2}} processing pipeline.You must send voice data to a mastering voice to be heard, either directly or through intermediate submix voices. +</p> + + + + + <p>Starts consumption and processing of audio by the voice. Delivers the result to any connected submix or mastering voices, or to the output device.</p> + <p>If the {{XAudio2}} engine is stopped, the voice stops running. However, it remains in the started state, so that it starts running again as soon as the engine starts. </p><p>When first created, source voices are in the stopped state. Submix and mastering voices are in the started state. </p><p>After <strong>Start</strong> is called it has no further effect if called again before <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called. In addition multiple calls to <strong>Start</strong> without matching calls to <strong>{{IXAudio2SourceVoice::Stop}}</strong> will result in warning messages in debug builds.</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p>Flags that control how the voice is started. Must be 0.</p> </dd> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Stops consumption of audio by the current voice.</p> + <p>All source buffers that are queued on the voice and the current cursor position are preserved. This allows the voice to continue from where it left off, when it is restarted. The <strong>{{IXAudio2SourceVoice::FlushSourceBuffers}}</strong> method can be used to flush queued source buffers. </p><p>By default, any pending output from voice effects?for example, reverb tails?is not played. Instead, the voice is immediately rendered silent. The {{XAUDIO2_PLAY_TAILS}} flag can be used to continue emitting effect output after the voice stops running. </p><p>A voice stopped with the {{XAUDIO2_PLAY_TAILS}} flag stops consuming source buffers, but continues to process its effects and send audio to its destination voices. A voice in this state can later be stopped completely by calling <strong>Stop</strong> again with the Flags argument set to 0. This enables stopping a voice with {{XAUDIO2_PLAY_TAILS}}, waiting sufficient time for any audio being produced by its effects to finish, and then fully stopping the voice by calling <strong>Stop</strong> again without {{XAUDIO2_PLAY_TAILS}}. This technique allows voices with effects to be stopped gracefully while ensuring idle voices will not continue to be processed after they have finished producing audio. </p><p><strong>Stop</strong> is always asynchronous, even if called within a callback. </p><strong>Note</strong>??{{XAudio2}} never calls any voice callbacks for a voice if the voice is stopped (even if it was stopped with {{XAUDIO2_PLAY_TAILS}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Flags that control how the voice is stopped. Can be 0 or the following: +</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{XAUDIO2_PLAY_TAILS}}</td><td>Continue emitting effect output after the voice is stopped.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Adds a new audio buffer to the voice queue.</p> + <p>The voice processes and plays back the buffers in its queue in the order that they were submitted. </p><p>The <strong>{{XAUDIO2_BUFFER}}</strong> structure includes details about the audio buffer's location and size, the part of the buffer that should actually be played, the loop region (if any) and loop count, the context reference to be used in any callbacks relating to this buffer, and an optional {{XAUDIO2_END_OF_STREAM}} flag that indicates that it is the last buffer of a contiguous sound. </p><p>If the voice is started and has no buffers queued, the new buffer will start playing immediately. If the voice is stopped, the buffer is added to the voice's queue and will be played when the voice starts. </p><p>If only part of the given buffer should be played, the <strong>PlayBegin</strong> and <strong>PlayLength</strong> fields in the <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the region to be played. A <strong>PlayLength</strong> value of 0 means to play the entire buffer (and in this case <strong>PlayBegin</strong> must be 0 as well). </p><p>If all or part of the buffer should be played in a continuous loop, the <strong>LoopBegin</strong>, <strong>LoopLength</strong> and <strong>LoopCount</strong> fields in <strong>{{XAUDIO2_BUFFER}}</strong> can be used to specify the characteristics of the loop region. A <strong>LoopBegin</strong> value of {{XAUDIO2_NO_LOOP_REGION}} means that no looping should be performed, and in this case <strong>LoopLength</strong> and <strong>LoopCount</strong> must be given as 0. If a loop region is specified, it must be non-empty (<strong>LoopLength</strong> &gt; 0), and the loop count must be between 1 and {{XAUDIO2_MAX_LOOP_COUNT}} inclusive (or {{XAUDIO2_LOOP_INFINITE}} to specify an endless loop which will only end when <strong>{{IXAudio2SourceVoice::ExitLoop}}</strong> is called). A loop count of <em>N</em> means to skip backwards N times, i.e. to play the loop region <em>N</em>+1 times. </p><p>If an explicit play region is specified, it must begin and end within the given audio buffer (or, in the compressed case, within the set of samples that the buffer will decode to). In addition, the loop region cannot end past the end of the play region. </p><table> <tr><th>Xbox 360</th></tr> <tr><td>For certain audio formats, there may be additional restrictions on the valid endpoints of any play or loop regions; e.g. for {{XMA}} buffers, the regions can only begin or end at 128-sample boundaries in the decoded audio. +</td></tr> </table><p>?</p><p>The <em>pBuffer</em> reference can be reused or freed immediately after calling this method, but the actual audio data referenced by <em>pBuffer</em> must remain valid until the buffer has been fully consumed by {{XAudio2}} (which is indicated by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback). </p><p>Up to {{XAUDIO2_MAX_QUEUED_BUFFERS}} buffers can be queued on a voice at any one time. </p><p><strong>SubmitSourceBuffer</strong> takes effect immediately when called from an {{XAudio2}} callback with an OperationSet of {{XAUDIO2_COMMIT_NOW}}. +</p><table> <tr><th>Xbox 360</th></tr> <tr><td>This method can be called from an Xbox system thread (most other {{XAudio2}} methods cannot). However, a maximum of two source buffers can be submitted from a system thread at a time.</td></tr> </table><p>?</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Pointer to an <strong>{{XAUDIO2_BUFFER}}</strong> structure to queue. +</p> </dd> + + + <dd> <p>Pointer to an additional <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure used when submitting {{WMA}} data. </p> </dd> + + + + + <p>Removes all pending audio buffers from the voice queue.</p> + <p>If the voice is started, the buffer that is currently playing is not removed from the queue. </p><p><strong>FlushSourceBuffers</strong> can be called regardless of whether the voice is currently started or stopped. </p><p>For every buffer removed, an <strong>OnBufferEnd</strong> callback will be made, but none of the other per-buffer callbacks (<strong>OnBufferStart</strong>, <strong>OnStreamEnd</strong> or <strong>OnLoopEnd</strong>) will be made. </p><p><strong>FlushSourceBuffers</strong> does not change a the voice's running state, so if the voice was playing a buffer prior to the call, it will continue to do so, and will deliver all the callbacks for the buffer normally. This means that the <strong>OnBufferEnd</strong> callback for this buffer will take place after the <strong>OnBufferEnd</strong> callbacks for the buffers that were removed. Thus, an {{XAudio2}} client that calls <strong>FlushSourceBuffers</strong> cannot expect to receive <strong>OnBufferEnd</strong> callbacks in the order in which the buffers were submitted. </p><p>No warnings for starvation of the buffer queue will be emitted when the currently playing buffer completes; it is assumed that the client has intentionally removed the buffers that followed it. However, there may be an audio pop if this buffer does not end at a zero crossing. If the application must ensure that the flush operation takes place while a specific buffer is playing?perhaps because the buffer ends with a zero crossing?it must call <strong>FlushSourceBuffers</strong> from a callback, so that it executes synchronously. </p><p>Calling <strong>FlushSourceBuffers</strong> after a voice is stopped and then submitting new data to the voice resets all of the voice's internal counters. </p><p>A voice's state is not considered reset after calling <strong>FlushSourceBuffers</strong> until the <strong>OnBufferEnd</strong> callback occurs (if a buffer was previously submitted) or <strong>{{IXAudio2SourceVoice::GetState}}</strong> returns with <strong>{{XAUDIO2_VOICE_STATE}}</strong>. <strong>BuffersQueued</strong> == 0. For example, if you stop a voice and call <strong>FlushSourceBuffers</strong>, it's still not legal to immediately call <strong>{{IXAudio2SourceVoice::SetSourceSampleRate}}</strong> (which requires the voice to not have any buffers currently queued), until either of the previously mentioned conditions are met. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Notifies an {{XAudio2}} voice that no more buffers are coming after the last one that is currently in its queue.</p> + <p><strong>Discontinuity</strong> suppresses the warnings that normally occur in the debug build of {{XAudio2}} when a voice runs out of audio buffers to play. It is preferable to mark the final buffer of a stream by tagging it with the {{XAUDIO2_END_OF_STREAM}} flag, but in some cases the client may not know that a buffer is the end of a stream until after the buffer has been submitted. </p><p>Because calling <strong>Discontinuity</strong> is equivalent to applying the {{XAUDIO2_END_OF_STREAM}} flag retroactively to the last buffer submitted, an <strong>OnStreamEnd</strong> callback will be made when this buffer completes. +</p><strong>Note</strong>??{{XAudio2}} may consume its entire buffer queue and emit a warning before the <strong>Discontinuity</strong> call takes effect, so <strong>Discontinuity</strong> is not guaranteed to suppress the warnings.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Stops looping the voice when it reaches the end of the current loop region. </p> + <p>If the cursor for the voice is not in a loop region, <strong>ExitLoop</strong> does nothing. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes.</p> + + + <dd> <p> Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information.</p> </dd> + + + + + <p>Returns the voice's current state and cursor position data.</p> + <p>For all encoded formats, including constant bit rate ({{CBR}}) formats such as adaptive differential pulse code modulation ({{ADPCM}}), <strong>SamplesPlayed</strong> is expressed in terms of decoded samples. For pulse code modulation ({{PCM}}) formats, <strong>SamplesPlayed</strong> is expressed in terms of either input or output samples. There is a one-to-one mapping from input to output for {{PCM}} formats. </p><p>If a client needs to get the correlated positions of several voices?that is, to know exactly which sample of a particular voice is playing when a specified sample of another voice is playing?it must make the <strong>{{IXAudio2SourceVoice::GetState}}</strong> calls in an {{XAudio2}} engine callback. Doing this ensures that none of the voices advance while the calls are made.</p> + + + <dd> <p>Pointer to a buffer context provided in the <strong>{{XAUDIO2_BUFFER}}</strong> that is processed currently, or, if the voice is stopped currently, to the next buffer due to be processed. <strong>pCurrentBufferContext</strong> is {{NULL}} if there are no buffers in the queue.</p> </dd> + + + <dd> <p>Number of audio buffers currently queued on the voice, including the one that is processed currently.</p> </dd> + + + <dd> <p>Total number of samples processed by this voice since it last started, or since the last audio stream ended (as marked with the {{XAUDIO2_END_OF_STREAM}} flag). This total includes samples played multiple times due to looping. Theoretically, if all audio emitted by the voice up to this time is captured, this parameter would be the length of the audio stream in samples. If you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong> when you call <strong>{{IXAudio2SourceVoice::GetState}}</strong>, this member won't be calculated, and its value is unspecified on return from <strong>{{IXAudio2SourceVoice::GetState}}</strong>. <strong>{{IXAudio2SourceVoice::GetState}}</strong> takes about one-third as much time to complete when you specify <strong>{{XAUDIO2_VOICE_NOSAMPLESPLAYED}}</strong>. </p> </dd> + + + + + <p>Sets the frequency adjustment ratio of the voice.</p> + <p>Frequency adjustment is expressed as <em>source frequency</em> / <em>target frequency</em>. Changing the frequency ratio changes the rate audio is played on the voice. A ratio greater than 1.0 will cause the audio to play faster and a ratio less than 1.0 will cause the audio to play slower. Additionally, the frequency ratio affects the pitch of audio on the voice. As an example, a value of 1.0 has no effect on the audio, whereas a value of 2.0 raises pitch by one octave and 0.5 lowers it by one octave. </p><p>If <strong>SetFrequencyRatio</strong> is called specifying a Ratio value outside the valid range, the method will set the frequency ratio to the nearest valid value. A warning also will be generated for debug builds. </p><strong>Note</strong>??<strong>{{IXAudio2SourceVoice::GetFrequencyRatio}}</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}).? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>Frequency adjustment ratio. This value must be between {{XAUDIO2_MIN_FREQ_RATIO}} and the <em>MaxFrequencyRatio</em> parameter specified when the voice was created (see <strong>{{IXAudio2::CreateSourceVoice}}</strong>). {{XAUDIO2_MIN_FREQ_RATIO}} currently is 0.0005, which allows pitch to be lowered by up to 11 octaves.</p> </dd> + + + <dd> <p>Identifies this call as part of a deferred batch. See the {{XAudio2}} Operation Sets overview for more information. +</p> </dd> + + + + + <p>Returns the frequency adjustment ratio of the voice.</p> + <p><strong>GetFrequencyRatio</strong> always returns the voice's actual current frequency ratio. However, this may not match the ratio set by the most recent <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call: the actual ratio is only changed the next time the audio engine runs after the <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> call (or after the corresponding <strong>{{IXAudio2::CommitChanges}}</strong> call, if <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong> was called with a deferred operation {{ID}}). </p><p>For information on frequency ratios, see <strong>{{IXAudio2SourceVoice::SetFrequencyRatio}}</strong>. +</p> + <p>This method does not return a value.</p> + + + <dd> <p>Returns the current frequency adjustment ratio if successful.</p> </dd> + + + + + <p>Reconfigures the voice to consume source data at a different sample rate than the rate specified when the voice was created.</p> + <p>The <strong>SetSourceSampleRate</strong> method supports reuse of {{XAudio2}} voices by allowing a voice to play sounds with a variety of sample rates. To use <strong>SetSourceSampleRate</strong> the voice must have been created without the {{XAUDIO2_VOICE_NOPITCH}} or {{XAUDIO2_VOICE_NOSRC}} flags and must not have any buffers currently queued. </p><p>The typical use of <strong>SetSourceSampleRate</strong> is to support voice pooling. For example to support voice pooling an application would precreate all the voices it expects to use. Whenever a new sound will be played the application chooses an inactive voice or ,if all voices are busy, picks the least important voice and calls <strong>SetSourceSampleRate</strong> on the voice with the new sound's sample rate. After <strong>SetSourceSampleRate</strong> has been called on the voice, the application can immediately start submitting and playing buffers with the new sample rate. This allows the application to avoid the overhead of creating and destroying voices frequently during gameplay. +</p> + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of error codes. </p> + + + <dd> <p>The new sample rate the voice should process submitted data at. Valid sample rates are 1kHz to 200kHz. </p> </dd> + + + + + <p>A submix voice is used primarily for performance improvements and effects processing. </p> + <p>Data buffers cannot be submitted directly to submix voices and will not be audible unless submitted to a mastering voice. A submix voice can be used to ensure that a particular set of voice data is converted to the same format and/or to have a particular effect chain processed on the collective result. +</p><p>{{IXAudio2SubmixVoice}} inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to submix voices. The interface type exists solely because some of the base class methods are implemented differently for submix voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + <p>A mastering voice is used to represent the audio output device.</p><p>Data buffers cannot be submitted directly to mastering voices, but data submitted to other types of voices must be directed to a mastering voice to be heard. +</p><p><strong>{{IXAudio2MasteringVoice}}</strong> inherits directly from <strong>{{IXAudio2Voice}}</strong>, but does not implement methods specific to mastering voices. The interface type exists solely because some of the base class methods are implemented differently for mastering voices. Having a separate type for these voices helps client code to distinguish the different voice types and to benefit from C++ type safety.</p> + + + + + <p>Returns the channel mask for this voice.</p> + <p>The <em>pChannelMask</em> argument is a bit-mask of the various channels in the speaker geometry reported by the audio system. This information is needed for the <strong>{{X3DAudioInitialize}}</strong> <em>SpeakerChannelMask</em> parameter. </p><p>The {{X3DAUDIO}}.H header declares a number of <strong>{{SPEAKER_}}</strong> positional defines to decode these channels masks. </p><p>Examples include: </p><pre>{{SPEAKER_STEREO}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) {{SPEAKER_5POINT1}} // {{SPEAKER_FRONT_LEFT}} (0x1) | {{SPEAKER_FRONT_RIGHT}} (0x2) // | {{SPEAKER_FRONT_CENTER}} (0x4) // | {{SPEAKER_LOW_FREQUENCY}} (0x8) // | {{SPEAKER_BACK_LEFT}} (0x10) | {{SPEAKER_BACK_RIGHT}} (0x20)</pre><strong>Note</strong>??For the DirectX {{SDK}} versions of {{XAUDIO}}, the channel mask for the output device was obtained via the <strong>{{IXAudio2::GetDeviceDetails}}</strong> method, which doesn't exist in Windows?8 and later.? + <p>This method does not return a value.</p> + + + <dd> <p> Returns the channel mask for this voice. This corresponds to the <strong>dwChannelMask</strong> member of the <strong>{{WAVEFORMATEXTENSIBLE}}</strong> structure. +</p> </dd> + + + + + <p>The {{IXAudio2EngineCallback}} interface contains methods that notify the client when certain events happen in the <strong>{{IXAudio2}}</strong> engine.</p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods via an interface reference provided by the client, using the <strong>{{XAudio2Create}}</strong> method. Methods in this interface return <strong>void</strong>, rather than an {{HRESULT}}. +</p><p>See {{XAudio2}} Callbacks for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called by {{XAudio2}} just before an audio processing pass begins.</p> + + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} just after an audio processing pass ends.</p> + <p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + + <p>Called if a critical system error occurs that requires {{XAudio2}} to be closed down and restarted.</p> + <p>If you provide the {{ID}} of a specific device in the <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong> or use the {{XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT}} flag, then a critical error will occur and <strong>OnCriticalError</strong> is raised if the underlying {{WASAPI}} rendering device becomes unavailable. This can occur when a headset or speaker is unplugged or when a {{USB}} audio device is removed, for example. Once a critical error has occurred, audio processing stops and all further calls to {{XAudio2}} fail. The only way to recover in this situation is to release the {{XAudio2}} instance and create a new one. </p><p></p><p>If you specified {{NULL}} or <em>szDeviceId</em> parameter to <strong>{{IXAudio2::CreateMasteringVoice}}</strong>, then the system uses a Virtual Audio Client to represent the audio endpoint. In this case, if the underlying {{WASAPI}} rendering device becomes unavailable, the system automatically selects a new audio rendering device for rendering, audio processing continues, and <strong>OnCriticalError</strong> is not raised.</p><p>On the mobile device family, a Virtual Audio Client is always used and <strong>OnCriticalError</strong> is never raised, regardless of the values you provide to <strong>CreateMasteringVoice</strong>.</p><p>For information about the <strong>{{IXAudio2EngineCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Error code returned by {{XAudio2}}.</p> </dd> + + + + + <p>The <strong>{{IXAudio2VoiceCallback}}</strong> interface contains methods that notify the client when certain events happen in a given <strong>{{IXAudio2SourceVoice}}</strong>. </p><p>This interface should be implemented by the {{XAudio2}} client. {{XAudio2}} calls these methods through an interface reference provided by the client in the <strong>{{IXAudio2::CreateSourceVoice}}</strong> method. Methods in this interface return void, rather than an {{HRESULT}}. +</p><p>See the {{XAudio2}} Callbacks topic for restrictions on callback implementation.</p><ul> <li>{{Methods}}</li> </ul> + + + + + <p>Called during each processing pass for each voice, just before {{XAudio2}} reads data from the voice's buffer queue.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p> The number of bytes that must be submitted immediately to avoid starvation. This allows the implementation of just-in-time streaming scenarios; the client can keep the absolute minimum data queued on the voice at all times, and pass it fresh data just before the data is required. This model provides the lowest possible latency attainable with {{XAudio2}}. For xWMA and {{XMA}} data <em>BytesRequired</em> will always be zero, since the concept of a frame of xWMA or {{XMA}} data is meaningless. </p> <strong>Note</strong>??In a situation where there is always plenty of data available on the source voice, <em>BytesRequired</em> should always report zero, because it doesn't need any samples immediately to avoid glitching. ? </dd> + + + + + <p>Called just after the processing pass for the voice ends.</p> + <p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice has just finished playing a contiguous audio stream.</p> + <p><strong>OnStreamEnd</strong> is triggered when {{XAudio2}} processes an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set. See the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> method for more information. </p><p>The <strong>OnStreamEnd</strong> callback indicates that {{XAudio2}} has finished consuming the last buffer submitted to the voice. With {{PCM}} data, all audio is guaranteed to have been played and the voice can be stopped or destroyed safely. </p><p>The <strong>OnStreamEnd</strong> callback only indicates that an <strong>{{XAUDIO2_BUFFER}}</strong> with the {{XAUDIO2_END_OF_STREAM}} flag set has been processed. The callback is strictly informational and does not change the state of the source voice that triggered it. A voice stays in the start state until <strong>{{IXAudio2SourceVoice::Stop}}</strong> is called and will continue to play submitted source buffers and to trigger additional callbacks. </p><p><strong>OnStreamEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + + <p>Called when the voice is about to start processing a new audio buffer.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferStart</strong> is guaranteed to be called just before the first byte of the current buffer is consumed. It is appropriate to use this callback for changes to the voice state such as the following. </p><ul> <li>Submitting a new buffer to the voice </li> <li>Adjusting the volume, pitch, and effect parameters of the voice </li> <li>Enabling or disabling an effect in the voice's effect chain</li> </ul>All the actions listed above are synchronous when performed in an {{XAudio2}} callback, so the changes will take effect immediately, affecting the buffer that is about to start.<p>It is also safe to use this callback to write audio data to the buffer directly, which can be useful for low-latency streaming scenarios. However, as with all {{XAudio2}} callbacks, no work should be done that uses a significant amount of processor time or could block execution, including synchronous disk or network reads. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the pContext member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice finishes processing a buffer. </p> + <p>After an <strong>OnBufferEnd</strong> callback the audio memory for the buffer associated with <em>pBufferContext</em> can safely be released. </p><p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext </strong>member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnBufferEnd</strong> is guaranteed to be called just after the last byte of the current buffer has been consumed and before the first byte of the next buffer is consumed. This callback can be used to overwrite or release the audio data referenced by the completed buffer, and to update other state associated with the voice as appropriate. </p><p>For information about <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks topic.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Context reference assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + + + <p>Called when the voice reaches the end position of a loop.</p> + <p><em>pBufferContext</em> is the context reference originally provided by the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure, which may be {{NULL}}. </p><p><strong>OnLoopEnd</strong> is not sample-accurate; that is, actions in the callback do not occur at the exact moment that a given sample is being processed. It is only guaranteed to be called shortly after the last sample in the loop has been processed. </p><p>For information about the <strong>{{IXAudio2VoiceCallback}}</strong> interface methods, see the {{XAudio2}} Callbacks section.</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted. </p> </dd> + + + + + <p>Called when a critical error occurs during voice processing.</p> + <p><strong>OnVoiceError</strong> is called in the event of an error during voice processing, such as a hardware {{XMA}} decoder error on the Xbox 360. The arguments report which buffer was being processed at the time of the error, and its {{HRESULT}} code. If the error is not recoverable by destroying and re-creating the voice, the <strong>OnCriticalError</strong> engine callback will be called as well. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Context reference that was assigned to the <strong>pContext</strong> member of the <strong>{{XAUDIO2_BUFFER}}</strong> structure when the buffer was submitted.</p> </dd> + + + <dd> <p> The {{HRESULT}} code of the error encountered.</p> </dd> + + + + + <p>Creates a new <strong>{{XAudio2}}</strong> object and returns a reference to its <strong>{{IXAudio2}}</strong> interface.</p> + <p>The DirectX {{SDK}} versions of {{XAUDIO2}} supported a flag <strong>{{XAUDIO2_DEBUG_ENGINE}}</strong> to select between the release and 'checked' version. This flag is not supported or defined in the Windows 8 version of {{XAUDIO2}}. </p><strong>Note</strong>??No versions of the DirectX {{SDK}} contain the xaudio2.lib import library. DirectX {{SDK}} versions use {{COM}} to create a new <strong>{{XAudio2}}</strong> object.? + <p>Returns {{S_OK}} if successful, an error code otherwise. See <strong>{{XAudio2}} Error Codes</strong> for descriptions of {{XAudio2}} specific error codes. </p> + + + + <p>Describes parameters for use with the volume meter {{APO}}.</p> + <p>This structure is used with the <strong>{{XAudio2}} {{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p><em>pPeakLevels</em> and <em>pRMSLevels</em> are not returned by <strong>{{IXAudio2Voice::GetEffectParameters}}</strong>, the arrays are only filled out if they are present. If <em>pPeakLevels</em> and <em>pRMSLevels</em> are used they must be allocated by the application. The application is responsible for freeing the arrays when they are no longer needed. </p><p><em>ChannelCount</em> must be set by the application to match the number of channels in the voice the effect is applied to.</p> + + + <dd> <p>Array that will be filled with the maximum absolute level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pPeakLevels</em> may be {{NULL}} if <em>pRMSLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Array that will be filled with root mean square level for each channel during a processing pass. The array must be at least <em>ChannelCount</em> ? sizeof(float) bytes. <em>pRMSLevels</em> may be {{NULL}} if <em>pPeakLevels</em> is not {{NULL}}.</p> </dd> + + + <dd> <p>Number of channels being processed.</p> </dd> + + + + + <p>Describes parameters for use in the reverb {{APO}}.</p> + <p>All parameters related to sampling rate or time are relative to a 48kHz voice and must be scaled for use with other sampling rates. For example, setting <em>ReflectionsDelay</em> to 300ms gives a true 300ms delay when the reverb is hosted in a 48kHz voice, but becomes a 150ms delay when hosted in a 24kHz voice. </p> + + + <dd> <p>Percentage of the output that will be reverb. Allowable values are from 0 to 100.</p> </dd> + + + <dd> <p>The delay time of the first reflection relative to the direct path. Permitted range is from 0 to 300 milliseconds. </p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay of reverb relative to the first reflection. Permitted range is from 0 to 85 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left rear output and right rear output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Delay for the left side output and right side output. Permitted range is from 0 to 5 milliseconds.</p> <strong>Note</strong>??This value is supported beginning with Windows?10. ? <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Position of the left input within the simulated space relative to the listener. With <em>PositionLeft</em> set to the minimum value, the left input is placed close to the listener. In this position, early reflections are dominant, and the reverb decay is set back in the sound field and reduced in amplitude. With <em>PositionLeft</em> set to the maximum value, the left input is placed at a maximum distance from the listener within the simulated room. <em>PositionLeft</em> does not affect the reverb decay time (liveness of the room), only the apparent position of the source relative to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Same as <em>PositionLeft</em>, but affecting only the right input. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??PositionRight is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units).</p> </dd> + + + <dd> <p>Gives a greater or lesser impression of distance from the source to the listener. Permitted range is from 0 to 30 (no units). </p> <strong>Note</strong>??<em>PositionMatrixRight</em> is ignored in mono-in/mono-out mode. ? </dd> + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). </p> </dd> + + + <dd> <p>Controls the character of the individual wall reverberations. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface. Permitted range is from 0 to 15 (no units). +</p> </dd> + + + <dd> <p>Adjusts the decay time of low frequencies relative to the decay time at 1 kHz. The values correspond to dB of gain as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td><td>+1</td><td>+2</td><td>+3</td><td>+4</td></tr> </table> <p>?</p> <strong>Note</strong>??A <em>LowEQGain</em> value of 8 results in the decay time of low frequencies being equal to the decay time at 1 kHz. ? <p> Permitted range is from 0 to 12 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter that is controlled by the <em>LowEQGain</em> parameter. The values correspond to frequency in Hz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr> <tr><th>Frequency (Hz)</th><td>50</td><td>100</td><td>150</td><td>200</td><td>250</td><td>300</td><td>350</td><td>400</td><td>450</td><td>500</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 9 (no units). </p> </dd> + + + <dd> <p>Adjusts the decay time of high frequencies relative to the decay time at 1 kHz. When set to zero, high frequencies decay at the same rate as 1 kHz. When set to maximum value, high frequencies decay at a much faster rate than 1 kHz. </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> <tr><th>Gain (dB)</th><td>-8</td><td>-7</td><td>-6</td><td>-5</td><td>-4</td><td>-3</td><td>-2</td><td>-1</td><td>0</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 8 (no units). </p> </dd> + + + <dd> <p>Sets the corner frequency of the high pass filter that is controlled by the <em>HighEQGain</em> parameter. The values correspond to frequency in kHz as follows: </p> <table> <tr><th>Value</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr> <tr><th>Frequency (kHz)</th><td>1</td><td>1.5</td><td>2</td><td>2.5</td><td>3</td><td>3.5</td><td>4</td><td>4.5</td><td>5</td><td>5.5</td><td>6</td><td>6.5</td><td>7</td><td>7.5</td><td>8</td></tr> </table> <p>?</p> <p>Permitted range is from 0 to 14 (no units).</p> </dd> + + + <dd> <p>Sets the corner frequency of the low pass filter for the room effect. Permitted range is from 20 to 20,000 Hz.</p> <strong>Note</strong>??All parameters related to sampling rate or time are relative to a 48kHz sampling rate and must be scaled for use with other sampling rates. See remarks section below for additional information. ? </dd> + + + <dd> <p>Sets the pass band intensity level of the low-pass filter for both the early reflections and the late field reverberation. Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Sets the intensity of the low-pass filter for both the early reflections and the late field reverberation at the corner frequency (<em>RoomFilterFreq</em>). Permitted range is from -100 to 0 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the early reflections. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Adjusts the intensity of the reverberations. Permitted range is from -100 to 20 dB.</p> </dd> + + + <dd> <p>Reverberation decay time at 1 kHz. This is the time that a full scale input signal decays by 60 dB. Permitted range is from 0.1 to infinity seconds.</p> </dd> + + + <dd> <p>Controls the modal density in the late field reverberation. For colorless spaces, <em>Density</em> should be set to the maximum value (100). As Density is decreased, the sound becomes hollow (comb filtered). This is an effect that can be useful if you are trying to model a silo. Permitted range as a percentage is from 0 to 100.</p> </dd> + + + <dd> <p>The apparent size of the acoustic space. Permitted range is from 1 to 100 feet.</p> </dd> + + + <dd> <p>If set to {{TRUE}}, disables late field reflection calculations. Disabling late field reflection calculations results in a significant {{CPU}} time savings.</p> <strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this member. ? </dd> + + + + + <p>Describes {{I3DL2}} (Interactive 3D Audio Rendering Guidelines Level 2.0) parameters for use in the <strong>ReverbConvertI3DL2ToNative</strong> function.</p> + <p>There are many preset values defined for the <strong>{{XAUDIO2FX_REVERB_I3DL2_PARAMETERS}}</strong> structure. For more information, see <strong>{{XAUDIO2FX_I3DL2_PRESET}}</strong>. </p> + + + + <p>Creates a new volume meter audio processing object ({{APO}}) and returns a reference to it.</p> + <p>For information on creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview.</p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateVolumeMeter}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateVolumeMeter}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateVolumeMeter}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pVolumeMeterAPO; +{{XAudio2CreateVolumeMeter}}(&amp;pVolumeMeterAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioVolumeMeter</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("4FC3B166-972A-40CF-{{BC37}}-7DB03DB2FBA3")) AudioVolumeMeter; +</code><p><strong>{{XAudio2CreateVolumeMeter}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The volume meter uses the <strong>{{XAUDIO2FX_VOLUMEMETER_LEVELS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method when the {{XAPO}} is bound to the audio graph.</p><strong>Note</strong>??<strong>{{XAudio2CreateVolumeMeter}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioVolumeMeter</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioVolumeMeter(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateVolumeMeter}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioVolumeMeter(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains the created volume meter {{APO}}.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Creates a new reverb audio processing object ({{APO}}), and returns a reference to it.</p> + <p><strong>{{XAudio2CreateReverb}}</strong> creates an effect performing Princeton Digital Reverb. The {{XAPO}} effect library ({{XAPOFX}}) includes an alternate reverb effect. Use <strong>CreateFX</strong> to create this alternate effect. </p><p>The reverb {{APO}} supports has the following restrictions: </p><ul> <li>Input audio data must be {{FLOAT32}}. </li> <li>Framerate must be within {{XAUDIO2FX_REVERB_MIN_FRAMERATE}} (20,000 Hz) and {{XAUDIO2FX_REVERB_MAX_FRAMERATE}} (48,000 Hz). </li> <li>The input and output channels must be one of the following combinations.<ul> <li>Mono input and mono output </li> <li>Mono input and 5.1 output </li> <li>Stereo input and stereo output </li> <li>Stereo input and 5.1 output</li> </ul> </li> </ul>The reverb {{APO}} maintains internal state information between processing samples. You can only use an instance of the {{APO}} with one source of audio data at a time. Multiple voices that require reverb effects would each need to create a separate reverb effect with<strong>{{XAudio2CreateReverb}}</strong>.<p>For information about creating new effects for use with {{XAudio2}}, see the {{XAPO}} Overview. </p><table> <tr><th>Windows</th></tr> <tr><td> <p>Because <strong>{{XAudio2CreateReverb}}</strong> calls <strong>CoCreateInstance</strong> on Windows, the application must have called the <strong>CoInitializeEx</strong> method before calling <strong>{{XAudio2CreateReverb}}</strong>. <strong>{{XAudio2Create}}</strong> has the same requirement, which means <strong>CoInitializeEx</strong> typically will be called long before <strong>{{XAudio2CreateReverb}}</strong> is called. </p> <p>A typical calling pattern on Windows would be as follows: </p> <pre>#ifndef _XBOX +CoInitializeEx({{NULL}}, {{COINIT_MULTITHREADED}}); +#endif +{{IXAudio2}}* pXAudio2 = {{NULL}}; +{{HRESULT}} hr; +if ( {{FAILED}}(hr = {{XAudio2Create}}( &amp;pXAudio2, 0, {{XAUDIO2_DEFAULT_PROCESSOR}} ) ) ) return hr; +... +{{IUnknown}} * pReverbAPO; +{{XAudio2CreateReverb}}(&amp;pReverbAPO); +</pre> </td></tr> </table><p>?</p><p>The xaudio2fx.h header defines the <strong>AudioReverb</strong> class {{GUID}} as a cross-platform audio processing object ({{XAPO}}). </p><code> class __declspec(uuid("{{C2633B16}}-471B-4498-{{B8C5}}-4F0959E2EC09")) AudioReverb; +</code><p><strong>{{XAudio2CreateReverb}}</strong> returns this object as a reference to a reference to <strong>{{IUnknown}}</strong> in the <em>ppApo</em> parameter. Although you can query the <strong>{{IXAPO}}</strong> and <strong>{{IXAPOParameters}}</strong> interfaces from this <strong>{{IUnknown}}</strong>, you typically never use these interfaces directly. Instead, you use them when you create a voice to add them as part of the effects chain. </p><p>The reverb uses the <strong>{{XAUDIO2FX_REVERB_PARAMETERS}}</strong> parameter structure that you access via the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. </p><strong>Note</strong>??<strong>{{XAudio2CreateReverb}}</strong> is an inline function in xaudio2fx.h that calls <strong>CreateAudioReverb</strong>: <code> {{XAUDIO2FX_STDAPI}} CreateAudioReverb(_Outptr_ {{IUnknown}}** ppApo); +__inline {{HRESULT}} {{XAudio2CreateReverb}}(_Outptr_ {{IUnknown}}** ppApo, {{UINT32}} /*Flags*/ {{DEFAULT}}(0)) +{ return CreateAudioReverb(ppApo); +} +</code>? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>Contains a reference to the reverb {{APO}} that is created.</p> </dd> + + + <dd> <p>Flags that specify the behavior of the {{APO}}. The value of this parameter must be 0.</p> </dd> + + + + + <p>Defines a {{DSP}} setting at a given normalized distance.</p> + + + + <dd> <p>Normalized distance. This must be within 0.0f to 1.0f.</p> </dd> + + + <dd> <p>{{DSP}} control setting.</p> </dd> + + + + + <p>Defines an explicit piecewise curve made up of linear segments, directly defining {{DSP}} behavior with respect to normalized distance.</p> + + + + <dd> <p> <strong>{{X3DAUDIO_DISTANCE_CURVE_POINT}}</strong> array. The array must have no duplicates and be sorted in ascending order with respect to distance.</p> </dd> + + + <dd> <p>Number of distance curve points. There must be two or more points since all curves must have at least two endpoints defining values at 0.0f and 1.0f normalized distance, respectively.</p> </dd> + + + + + <p>Specifies directionality for a single-channel non-{{LFE}} emitter by scaling {{DSP}} behavior with respect to the emitter's orientation.</p> + <p>For a detailed explanation of sound cones see Sound Cones.</p> + + + <dd> <p>Inner cone angle in radians. This value must be within 0.0f to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Outer cone angle in radians. This value must be within <em>InnerAngle</em> to {{X3DAUDIO_2PI}}.</p> </dd> + + + <dd> <p>Volume scaler on/within inner cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Volume scaler on/beyond outer cone. This value must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on/within inner cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>{{LPF}} direct-path or reverb-path coefficient scaler on or beyond outer cone. This value is only used for {{LPF}} calculations and must be within 0.0f to 1.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on or within inner cone. This must be within 0.0f to 2.0f. </p> </dd> + + + <dd> <p>Reverb send level scaler on/beyond outer cone. This must be within 0.0f to 2.0f. +</p> </dd> + + + + + <p>Defines a point of 3D audio reception.</p> + <p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>The parameter type <strong>{{X3DAUDIO_VECTOR}}</strong> is typed to DirectX::XMFLOAT3, to provide x, y and z floating-point values. </p><p>A listener's front and top vectors must be orthonormal. To be considered orthonormal, a pair of vectors must have a magnitude of 1 +- 1x10-5 and a dot product of 0 +- 1x10-5. </p> + + + <dd> <p>Orientation of front direction. When <strong>pCone</strong> is {{NULL}} <strong>OrientFront</strong> is used only for matrix and delay calculations. When <strong>pCone</strong> is not {{NULL}} <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. This value must be orthonormal with <strong>OrientTop</strong> when used.</p> </dd> + + + <dd> <p>Orientation of top direction, used only for matrix and delay calculations. This value must be orthonormal with <strong>OrientFront</strong> when used.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units per second, used only for doppler calculations. This value does not affect <strong>Position</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_CONE}}</strong> structure for this listener. Providing a listener cone will specify that additional calculations are performed when determining the volume and filter {{DSP}} parameters for individual sound sources. A {{NULL}} <strong>pCone</strong> value specifies an omnidirectional sound and no cone processing is applied. <strong>pCone</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + + + <p>Defines a single-point or multiple-point 3D audio source that is used with an arbitrary number of sound channels.</p> + <p><strong>{{X3DAUDIO_EMITTER}}</strong> only supports a cone in a single-point emitter. Multi-point emitters are a convenient and efficient way to manage a related group of sound sources. Many properties are shared among all channel points, such as Doppler?the same Doppler shift is applied to all channels in the emitter. Thus, the Doppler value need only be calculated once, not per-point as would be needed with multiple separate single-point emitters. Because <strong>{{X3DAUDIO_EMITTER}}</strong> only has one orientation vector, a multi-point emitter cone would be of limited usefulness, forcing all channels to behave as if they were facing the same direction. If multiple independent cones are needed, multiple single-point emitters should be used, each with its own orientation. </p><p>The parameter type {{X3DAUDIO_VECTOR}} is typed to DirectX::XMFLOAT3, to provide x , y , and z floating-point values. </p><p>{{X3DAudio}} uses a left-handed Cartesian coordinate system, with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. To use {{X3DAudio}} with right-handed coordinates, you must negate the .z element of <em>OrientFront</em>, <em>OrientTop</em>, <em>Position</em>, and <em>Velocity</em>.</p><p>For user-defined distance curves, the distance field of the first point must be 0.0f and the distance field of the last point must be 1.0f. </p><p>If an emitter moves beyond a distance of (<strong>CurveDistanceScaler</strong> ? 1.0f), the last point on the curve is used to compute the volume output level. The last point is determined by the following: +</p><pre>{{X3DAUDIO_DISTANCE_CURVE}}.pPoints[PointCount-1].{{DSPSetting}})</pre> + + + <dd> <p>Pointer to a sound cone. Used only with single-channel emitters for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations. {{NULL}} specifies the emitter is omnidirectional.</p> </dd> + + + <dd> <p>Orientation of the front direction. This value must be orthonormal with <strong>OrientTop</strong>. <strong>OrientFront</strong> must be normalized when used. For single-channel emitters without cones <strong>OrientFront</strong> is only used for emitter angle calculations. For multi channel emitters or single-channel with cones <strong>OrientFront</strong> is used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Orientation of the top direction. This value must be orthonormal with <strong>OrientFront</strong>. <strong>OrientTop</strong> is only used with multi-channel emitters for matrix calculations.</p> </dd> + + + <dd> <p>Position in user-defined world units. This value does not affect <strong>Velocity</strong>.</p> </dd> + + + <dd> <p>Velocity vector in user-defined world units/second. This value is used only for doppler calculations. It does not affect <strong>Position</strong>. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius calculations. If <strong>InnerRadius</strong> is 0, then no inner radius is used, but <strong>InnerRadiusAngle</strong> may still be used. This value must be between 0.0f and {{MAX_FLT}}. +</p> </dd> + + + <dd> <p>Value to be used for the inner radius angle calculations. This value must be between 0.0f and {{X3DAUDIO_PI}}/4.0. </p> </dd> + + + <dd> <p>Number of emitters defined by the <strong>{{X3DAUDIO_EMITTER}}</strong> structure. Must be greater than 0. </p> </dd> + + + <dd> <p>Distance from <strong>Position</strong> that channels will be placed if <strong>ChannelCount</strong> is greater than 1. <strong>ChannelRadius</strong> is only used with multi-channel emitters for matrix calculations. Must be greater than or equal to 0.0f.</p> </dd> + + + <dd> <p>Table of channel positions, expressed as an azimuth in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector. An azimuth of {{X3DAUDIO_2PI}} specifies a channel is a low-frequency effects ({{LFE}}) channel. {{LFE}} channels are positioned at the emitter base and are calculated with respect to <strong>pLFECurve</strong> only, never <strong>pVolumeCurve</strong>. <strong>pChannelAzimuths</strong> must have at least <strong>ChannelCount</strong> elements, but can be <strong>{{NULL}}</strong> if <strong>ChannelCount</strong> = 1. The table values must be within 0.0f to {{X3DAUDIO_2PI}}. <strong>pChannelAzimuths</strong> is used with multi-channel emitters for matrix calculations. </p> </dd> + + + <dd> <p>Volume-level distance curve, which is used only for matrix calculations. {{NULL}} specifies a specialized default curve that conforms to the inverse square law, such that when distance is between 0.0f and <strong>CurveDistanceScaler</strong> ? 1.0f, no attenuation is applied. +When distance is greater than <strong>CurveDistanceScaler</strong> ? 1.0f, the amplification factor is (<strong>CurveDistanceScaler</strong> ? 1.0f)/distance. At a distance of <strong>CurveDistanceScaler</strong> ? 2.0f, the sound will be at half volume or -6 dB, at a distance of <strong>CurveDistanceScaler</strong> ? 4.0f, the sound will be at one quarter volume or -12 dB, and so on. <strong>pVolumeCurve</strong> and pLFECurve are independent of each other. <strong>pVolumeCurve</strong> does not affect <strong>{{LFE}} channel</strong> volume. </p> </dd> + + + <dd> <p>{{LFE}} roll-off distance curve, or {{NULL}} to use default curve: [0.0f, <strong>CurveDistanceScaler</strong> ?1.0f], [<strong>CurveDistanceScaler</strong> ?1.0f, 0.0f]. A {{NULL}} value for <strong>pLFECurve</strong> specifies a default curve that conforms to the inverse square law with distances &lt;= <strong>CurveDistanceScaler</strong> clamped to no attenuation. +<strong>pVolumeCurve</strong> and <strong>pLFECurve</strong> are independent of each other. <strong>pLFECurve</strong> does not affect non {{LFE}} channel volume. </p> </dd> + + + <dd> <p>Low-pass filter ({{LPF}}) direct-path coefficient distance curve, or {{NULL}} to use the default curve: [0.0f, 1.0f], [1.0f, 0.75f]. <strong>pLPFDirectCurve</strong> is only used for {{LPF}} direct-path calculations. +</p> </dd> + + + <dd> <p>{{LPF}} reverb-path coefficient distance curve, or {{NULL}} to use default curve: [0.0f, 0.75f], [1.0f, 0.75f]. <strong>pLPFReverbCurve</strong> is only used for {{LPF}} reverb path calculations.</p> </dd> + + + <dd> <p>Reverb send level distance curve, or {{NULL}} to use default curve: [0.0f, 1.0f], [1.0f, 0.0f]. </p> </dd> + + + <dd> <p>Curve distance scaler that is used to scale normalized distance curves to user-defined world units, and/or to exaggerate their effect. This does not affect any other calculations. The value must be within the range {{FLT_MIN}} to {{FLT_MAX}}. <strong>CurveDistanceScaler</strong> is only used for matrix, {{LPF}} (both direct and reverb paths), and reverb calculations.</p> </dd> + + + <dd> <p>Doppler shift scaler that is used to exaggerate Doppler shift effect. <strong>DopplerScaler</strong> is only used for Doppler calculations and does not affect any other calculations. The value must be within the range 0.0f to {{FLT_MAX}}.</p> </dd> + + + + + <p>Receives the results from a call to <strong>{{X3DAudioCalculate}}</strong>.</p> + <p>The following members must be initialized before passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function: </p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes</strong></li> <li><strong>SrcChannelCount </strong></li> <li><strong>DstChannelCount</strong></li> </ul><p>The following members are returned by passing this structure to the <strong>{{X3DAudioCalculate}}</strong> function:</p><ul> <li><strong>pMatrixCoefficients </strong></li> <li><strong>pDelayTimes </strong></li> <li><strong>{{LPFDirectCoefficient}} </strong></li> <li><strong>{{LPFReverbCoefficient}}</strong></li> <li><strong>ReverbLevel </strong></li> <li><strong>DopplerFactor </strong></li> <li><strong>EmitterToListenerAngle</strong></li> <li><strong>EmitterToListenerDistance </strong></li> <li><strong>EmitterVelocityComponent </strong></li> <li><strong>ListenerVelocityComponent</strong></li> </ul><strong>Note</strong>??For <strong>pMatrixCoefficients</strong> and <strong>pDelayTimes</strong>, <strong>{{X3DAudioCalculate}}</strong> does not allocate additional memory. <strong>{{X3DAudioCalculate}}</strong> merely modifies the values at the memory locations allocated for these references.? + + + + <p>Sets all global 3D audio constants.</p> + <p><strong>{{X3DAUDIO_HANDLE}}</strong> is an opaque data structure. Because the operating system doesn't allocate any additional storage for the 3D audio instance handle, you don't need to free or close it.</p> + <p>This function does not return a value.</p> + + + <dd> <p>Assignment of channels to speaker positions. This value must not be zero. The only permissible value on Xbox 360 is {{SPEAKER_XBOX}}.</p> </dd> + + + <dd> <p>Speed of sound, in user-defined world units per second. Use this value only for doppler calculations. It must be greater than or equal to {{FLT_MIN}}.</p> </dd> + + + <dd> <p>3D audio instance handle. Use this handle when you call <strong>{{X3DAudioCalculate}}</strong>.</p> </dd> + + + + + <p>Calculates {{DSP}} settings with respect to 3D parameters.</p> + <p>You typically call <strong>{{X3DAudioCalculate}}</strong> once for each pair of emitting objects and listeners in the scene. After each call, to apply the 3D effects, the app manually applies the calculation results at <em>pDSPSettings</em> to the {{XAUDIO2}} graph. For more info, see How to: Integrate {{X3DAudio}} with {{XAudio2}}.</p><strong>Important</strong>?? The listener and emitter values must be valid. Floating-point specials (NaN, {{QNaN}}, +{{INF}}, -{{INF}}) can cause the entire audio output to go silent if introduced into a running audio graph.? + <p>This function does not return a value.</p> + + + <dd> <p>3D audio instance handle. Call <strong>{{X3DAudioInitialize}}</strong> to get this handle.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_LISTENER}}</strong> representing the point of reception.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_EMITTER}}</strong> representing the sound source.</p> </dd> + + + <dd> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{X3DAUDIO_CALCULATE_MATRIX}}</td><td>Enables matrix coefficient table calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DELAY}}</td><td>Enables delay time array calculation (stereo only).?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_DIRECT}}</td><td>Enables low pass filter ({{LPF}}) direct-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_LPF_REVERB}}</td><td>Enables {{LPF}} reverb-path coefficient calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REVERB}}</td><td>Enables reverb send level calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_DOPPLER}}</td><td>Enables Doppler shift factor calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_EMITTER_ANGLE}}</td><td>Enables emitter-to-listener interior angle calculation.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_ZEROCENTER}}</td><td>Fills the center channel with silence. This flag allows you to keep a 6-channel matrix so you do not have to remap the channels, but the center channel will be silent. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> <tr><td>{{X3DAUDIO_CALCULATE_REDIRECT_TO_LFE}}</td><td> Applies an equal mix of all source channels to a low frequency effect ({{LFE}}) destination channel. It only applies to matrix calculations with a source that does not have an {{LFE}} channel and a destination that does have an {{LFE}} channel. This flag is only valid if you also set {{X3DAUDIO_CALCULATE_MATRIX}}.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>Pointer to an <strong>{{X3DAUDIO_DSP_SETTINGS}}</strong> structure that receives the calculation results.</p> </dd> + + + + + <p>Describes the contents of a stream buffer. </p> + <p>This metadata can be used to implement optimizations that require knowledge of a stream buffer's contents. For example, {{XAPOs}} that always produce silent output from silent input can check the flag on the input stream buffer to determine if any signal processing is necessary. If silent, the {{XAPO}} can simply set the flag on the output stream buffer to silent and return, thus averting the work of processing silent data. </p><p>Likewise, {{XAPOs}} that receive valid input data, but generate silence (for any reason), may set the output stream buffer's flag accordingly, rather than writing silent samples to the buffer. </p><p>These flags represent what should be assumed is in the respective buffer. The flags may not reflect what is actually stored in memory. For example, the {{XAPO_BUFFER_SILENT}} indicates that silent data should be assumed, however the respective memory may be uninitialized </p> + + + <dd> <p>Stream buffer contains only silent samples.</p> </dd> + + + <dd> <p>Stream buffer contains audio data to be processed.</p> </dd> + + + + + <p>Describes general characteristics of an {{XAPO}}. Used with <strong>{{IXAPO::GetRegistrationProperties}}</strong>, <strong>{{CXAPOParametersBase::CXAPOParametersBase}}</strong>, and <strong>{{CXAPOBase::CXAPOBase}}</strong>. </p> + + + + + <p>Defines stream buffer parameters that remain constant while an {{XAPO}} is locked. Used with the <strong>{{IXAPO::LockForProcess}}</strong> method.</p> + <p>The byte size of the respective stream buffer must be at least <em>MaxFrameCount</em> ? (<em>pFormat</em>-&gt;nBlockAlign) bytes. </p> + + + + <p>Defines stream buffer parameters that may change from one call to the next. Used with the <strong>Process</strong> method.</p> + <p>Although the format and maximum size values of a particular stream buffer are constant, as defined by the <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong> structure, the actual memory address of the stream buffer is permitted to change. For constant-bit-rate ({{CBR}}) {{XAPOs}}, ValidFrameCount is constant and is always equal to the corresponding <strong>{{XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS}}</strong>.MaxFrameCount for this buffer. </p><strong>Note</strong>??Only constant-bit-rate {{XAPOs}} are currently supported.? + + + + <p>The interface for an Audio Processing Object which be used in an {{XAudio2}} effect chain.</p> + + + + + <p>Returns the registration properties of an {{XAPO}}. </p> + + <p>Returns {{S_OK}} if successful; returns an error code otherwise.</p> + + + <dd> <p> Receives a reference to a <strong>{{XAPO_REGISTRATION_PROPERTIES}}</strong> structure containing the registration properties the {{XAPO}} was created with; use <strong>{{XAPOFree}}</strong> to free the structure. </p> </dd> + + + + + <p>Queries if a specific input format is supported for a given output format.</p> + <p>The <strong>{{IXAPO::IsOutputFormatSupported}}</strong> and <strong>IsInputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsInputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods. </p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p> Output format. +</p> </dd> + + + <dd> <p> Input format to check for being supported.</p> </dd> + + + <dd> <p> If not {{NULL}}, and the input format is not supported for the given output format, <em>ppSupportedInputFormat</em> returns a reference to the closest input format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Queries if a specific output format is supported for a given input format.</p> + <p>The <strong>{{IXAPO::IsInputFormatSupported}}</strong> and <strong>IsOutputFormatSupported</strong> methods allow an {{XAPO}} to indicate which audio formats it is capable of processing. If a requested format is not supported, the {{XAPO}} should return the closest format that it does support. The closest format should be determined based on frame rate, bit depth, and channel count, in that order of importance. The behavior of <strong>IsOutputFormatSupported</strong> is allowed to change, based on the internal state of the {{XAPO}}, but its behavior should remain constant between calls to the <strong>{{IXAPO::LockForProcess}}</strong> and <strong>{{IXAPO::UnlockForProcess}}</strong> methods.</p> + <p>Returns {{S_OK}} if the format pair is supported. Returns {{XAPO_E_FORMAT_UNSUPPORTED}} if the format pair is not supported.</p> + + + <dd> <p>Input format. </p> </dd> + + + <dd> <p>Output format to check for being supported.</p> </dd> + + + <dd> <p>If not {{NULL}} and the output format is not supported for the given input format, <em>ppSupportedOutputFormat</em> returns a reference to the closest output format that is supported. Use <strong>{{XAPOFree}}</strong> to free the returned structure. </p> </dd> + + + + + <p>Performs any effect-specific initialization.</p> + <p>The contents of <em>pData</em> are defined by a given {{XAPO}}. Immutable parameters (constant for the lifetime of the {{XAPO}}) should be set in this method. Once initialized, an {{XAPO}} cannot be initialized again. An {{XAPO}} should be initialized before passing it to {{XAudio2}} as part of an effect chain. </p><strong>Note</strong>??{{XAudio2}} does not call this method, it should be called by the client before passing the {{XAPO}} to {{XAudio2}}.? + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + <dd> <p> Effect-specific initialization parameters, may be {{NULL}} if <em>DataByteSize</em> is 0.</p> </dd> + + + <dd> <p> Size of <em>pData</em> in bytes, may be 0 if <em>pData</em> is {{NULL}}.</p> </dd> + + + + + <p>Resets variables dependent on frame history.</p> + <p>Constant and locked parameters such as the input and output formats remain unchanged. Variables set by <strong>{{IXAPOParameters::SetParameters}}</strong> remain unchanged. </p><p>For example, an effect with delay should zero out its delay line during this method, but should not reallocate anything as the {{XAPO}} remains locked with a constant input and output configuration. </p><p>{{XAudio2}} only calls this method if the {{XAPO}} is locked. </p><p>This method is called from the realtime thread and should not block. +</p> + <p>This method does not return a value.</p> + + + + <p>Called by {{XAudio2}} to lock the input and output configurations of an {{XAPO}} allowing it to do any final initialization before <strong>Process</strong> is called on the realtime thread.</p> + <p>Once locked, the input and output configuration and any other locked parameters remain constant until <strong>UnLockForProcess</strong> is called. After an {{XAPO}} is locked, further calls to <strong>LockForProcess</strong> have no effect until the <strong>UnLockForProcess</strong> function is called. </p><p>An {{XAPO}} indicates what specific formats it supports through its implementation of the <strong>IsInputFormatSupported</strong> and <strong>IsOutputFormatSupported</strong> methods. An {{XAPO}} should assert the input and output configurations are supported and that any required effect-specific initialization is complete. The <strong>IsInputFormatSupported</strong>, <strong>IsOutputFormatSupported</strong>, and <strong>Initialize</strong> methods should be used as necessary before calling this method. </p><p>Because <strong>Process</strong> is a nonblocking method, all internal memory buffers required for <strong>Process</strong> should be allocated in <strong>LockForProcess</strong>. </p><p> <strong>Process</strong> is never called before <strong>LockForProcess</strong> returns successfully. </p><p><strong>LockForProcess</strong> is called directly by {{XAudio2}} and should not be called by the client code. </p> + <p>Returns {{S_OK}} if successful, an error code otherwise.</p> + + + + <p>Deallocates variables that were allocated with the <strong>LockForProcess</strong> method.</p> + <p>Unlocking an {{XAPO}} instance allows it to be reused with different input and output formats.</p> + <p>This method does not return a value.</p> + + + + <p>Runs the {{XAPO}}'s digital signal processing ({{DSP}}) code on the given input and output buffers.</p> + <p>Implementations of this function should not block, as the function is called from the realtime audio processing thread. </p><p>All code that could cause a delay, such as format validation and memory allocation, should be put in the <strong>{{IXAPO::LockForProcess}}</strong> method, which is not called from the realtime audio processing thread. </p><p>For in-place processing, the <em>pInputProcessParameters</em> parameter will not necessarily be the same as <em>pOutputProcessParameters</em>. Rather, their <em>pBuffer</em> members will point to the same memory. </p><p>Multiple input and output buffers may be used with in-place {{XAPOs}}, though the input buffer count must equal the output buffer count. For in-place processing when multiple input and output buffers are used, the {{XAPO}} may assume the number of input buffers equals the number of output buffers. </p><p>In addition to writing to the output buffer, as appropriate, an {{XAPO}} is responsible for setting the output stream's buffer flags and valid frame count. </p><p>When <em>IsEnabled</em> is {{FALSE}}, the {{XAPO}} should not apply its normal processing to the given input/output buffers during. It should instead pass data from input to output with as little modification possible. Effects that perform format conversion should continue to do so. Effects must ensure transitions between normal and thru processing do not introduce discontinuities into the signal. </p><p>When writing a <strong>Process</strong> method, it is important to note {{XAudio2}} audio data is interleaved, which means data from each channel is adjacent for a particular sample number. For example, if there was a 4-channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, and so on. +</p> + <p>This method does not return a value.</p> + + + <dd> <p> Number of elements in pInputProcessParameters. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p> Input array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. </p> </dd> + + + <dd> <p>Number of elements in <em>pOutputProcessParameters</em>. </p> <strong>Note</strong>??{{XAudio2}} currently supports only one input stream and one output stream. ? </dd> + + + <dd> <p>Output array of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong> structures. On input, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the number of frames that the {{XAPO}} should write to the output buffer. On output, the value of <strong>{{XAPO_PROCESS_BUFFER_PARAMETERS}}</strong>. <strong>ValidFrameCount</strong> indicates the actual number of frames written.</p> </dd> + + + <dd> <p> {{TRUE}} to process normally; {{FALSE}} to process thru. See Remarks for additional information.</p> </dd> + + + + + <p>Returns the number of input frames required to generate the given number of output frames.</p> + <p>{{XAudio2}} calls this method to determine what size input buffer an {{XAPO}} requires to generate the given number of output frames. This method only needs to be called once while an {{XAPO}} is locked. <strong>CalcInputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of input frames required.</p> + + + <dd> <p> The number of output frames desired. +</p> </dd> + + + + + <p>Returns the number of output frames that will be generated from a given number of input frames.</p> + <p>{{XAudio2}} calls this method to determine how large of an output buffer an {{XAPO}} will require for a certain number of input frames. <strong>CalcOutputFrames</strong> is only called by {{XAudio2}} if the {{XAPO}} is locked. </p><p>This function should not block, because it may be called from the realtime audio processing thread. </p> + <p>Returns the number of output frames that will be produced. </p> + + + <dd> <p> The number of input frames. +</p> </dd> + + + + + <p>An optional interface that allows an {{XAPO}} to use effect-specific parameters.</p> + + + + + <p>Sets effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::SetParameters}}</strong> function. The data passed to <strong>SetParameters</strong> can be used to set the state of the {{XAPO}} and control the behavior of the <strong>{{IXAPO::Process}}</strong> function. </p><p><strong>SetParameters</strong> can only be called on the real-time audio processing thread; no synchronization between <strong>SetParameters</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. However, the <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> method may be called from any thread as it adds in the required synchronization to deliver a copy (asynchronously) of the parameters to <strong>SetParameters</strong> on the real-time thread; no synchronization between <strong>{{IXAudio2Voice::SetEffectParameters}}</strong> and the <strong>{{IXAPO::Process}}</strong> method is necessary. </p> + <p>This method does not return a value.</p> + + + <dd> <p> Effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Gets the current values for any effect-specific parameters.</p> + <p>The data in <em>pParameters</em> is completely effect-specific and determined by the implementation of the <strong>{{IXAPOParameters::GetParameters}}</strong> function. The data returned in <em>pParameters</em> can be used to provide information about the current state of the {{XAPO}}. </p><p>Unlike SetParameters, {{XAudio2}} does not call this method on the realtime audio processing thread. Thus, the {{XAPO}} must protect variables shared with <strong>{{IXAPOParameters::SetParameters}}</strong> or <strong>{{IXAPO::Process}}</strong> using appropriate synchronization. The <strong>{{CXAPOParametersBase}}</strong> class is an implementation of <strong>{{IXAPOParameters}}</strong> and its implementation of <strong>GetParameters</strong> efficiently handles this synchronization for the user. </p><p>{{XAudio2}} calls this method from the <strong>{{IXAudio2Voice::GetEffectParameters}}</strong> method. </p><p>This method may block and should never be called from the realtime audio processing thread instead get the current parameters from <strong>{{CXAPOParametersBase::BeginProcess}}</strong>.</p> + <p>This method does not return a value.</p> + + + <dd> <p>Receives an effect-specific parameter block.</p> </dd> + + + <dd> <p> Size of pParameters, in bytes.</p> </dd> + + + + + <p>Parameters for use with the {{FXEQ}} {{XAPO}}.</p> + <p>Each band ranges from <strong>FrequencyCenterN</strong> - (<strong>BandwidthN</strong> / 2) to <strong>FrequencyCenterN</strong> + (<strong>BandwidthN</strong> / 2). </p> + + + <dd> <p>Center frequency in Hz for band 0. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 0. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 0. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 1. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 1. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}}</p> </dd> + + + <dd> <p>Width of band 1. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + <dd> <p>Center frequency in Hz for band 2. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}.</p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 2. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 2. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}. </p> </dd> + + + <dd> <p>Center frequency in Hz for band 3. Must be between {{FXEQ_MIN_FREQUENCY_CENTER}} and {{FXEQ_MAX_FREQUENCY_CENTER}}. </p> </dd> + + + <dd> <p>The boost or decrease to frequencies in band 3. Must be between {{FXEQ_MIN_GAIN}} and {{FXEQ_MAX_GAIN}} </p> </dd> + + + <dd> <p>Width of band 3. Must be between {{FXEQ_MIN_BANDWIDTH}} and {{FXEQ_MAX_BANDWIDTH}}.</p> </dd> + + + + + <p>Parameters for use with the {{FXMasteringLimiter}} {{XAPO}}.</p> + + + + + <p>Parameters for use with the {{FXReverb}} {{XAPO}}.</p> + + + + <dd> <p>Controls the character of the individual wall reflections. Set to minimum value to simulate a hard flat surface and to maximum value to simulate a diffuse surface.Value must be between {{FXREVERB_MIN_DIFFUSION}} and {{FXREVERB_MAX_DIFFUSION}}.</p> </dd> + + + <dd> <p>Size of the room. Value must be between {{FXREVERB_MIN_ROOMSIZE}} and {{FXREVERB_MAX_ROOMSIZE}}. Note that physical meaning of RoomSize is subjective and not tied to any particular units. A smaller value will result in reflections reaching the listener more quickly while reflections will take longer with larger values for RoomSize.</p> </dd> + + + + + <p>Initialization parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Use of this structure is optional. The default <strong>MaxDelay</strong> is <strong>{{FXECHO_DEFAULT_DELAY}}</strong>.</p><strong>Note</strong>??The DirectX {{SDK}} versions of {{XAUDIO2}} don't support this functionality.? + + + + <p>Parameters for use with the {{FXECHO}} {{XAPOFX}}.</p> + <p>Echo only supports {{FLOAT32}} audio formats.</p> + + + + <p>Creates an instance of the requested {{XAPOFX}} effect.</p> + <p>The created {{XAPO}} will have a reference count of 1. Client code must call <strong>{{IUnknown::Release}}</strong> after passing the {{XAPO}} to {{XAudio2}} to allow {{XAudio2}} to dispose of the {{XAPO}} when it is no longer needed. Use <strong> {{IXAudio2::CreateSourceVoice}}</strong> or <strong>{{IXAudio2Voice::SetEffectChain}}</strong> to pass an {{XAPO}} to {{XAudio2}}. </p><strong>Note</strong>??The DirectX {{SDK}} version of this function doesn't have the <em>pInitData</em> or <em>InitDataByteSize</em> parameters as it only takes the first 2 parameters. To set initial parameters for the {{XAPOFX}} effect that is created with the DirectX {{SDK}} version of this function, you must bind that effect to a voice and use <strong>{{IXAudio2Voice::SetEffectParameters}}</strong>. +For info about how to do this, see How to: Use {{XAPOFX}} in {{XAudio2}}.? + <p>If this function succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Describes the current state of the Xbox 360 Controller.</p> + <p>This structure is used by the <strong>{{XINPUT_STATE}}</strong> structure when polling for changes in the state of the controller. </p><p>The specific mapping of button to game function varies depending on the game type. </p><p>The constant {{XINPUT_GAMEPAD_TRIGGER_THRESHOLD}} may be used as the value which <em>bLeftTrigger</em> and <em>bRightTrigger</em> must be greater than to register as pressed. This is optional, but often desirable. Xbox 360 Controller buttons do not manifest crosstalk. +</p> + + + <dd> <p>Bitmask of the device digital buttons, as follows. A set bit indicates that the corresponding button is pressed. </p> <table> <tr><th>Device button</th><th>Bitmask</th></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_UP}}</td><td> 0x0001</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_DOWN}}</td><td> 0x0002</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_LEFT}}</td><td> 0x0004</td></tr> <tr><td>{{XINPUT_GAMEPAD_DPAD_RIGHT}}</td><td> 0x0008</td></tr> <tr><td>{{XINPUT_GAMEPAD_START}}</td><td> 0x0010</td></tr> <tr><td>{{XINPUT_GAMEPAD_BACK}}</td><td> 0x0020</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_THUMB}}</td><td> 0x0040</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_THUMB}}</td><td> 0x0080</td></tr> <tr><td>{{XINPUT_GAMEPAD_LEFT_SHOULDER}}</td><td> 0x0100</td></tr> <tr><td>{{XINPUT_GAMEPAD_RIGHT_SHOULDER}}</td><td> 0x0200</td></tr> <tr><td>{{XINPUT_GAMEPAD_A}}</td><td> 0x1000</td></tr> <tr><td>{{XINPUT_GAMEPAD_B}}</td><td> 0x2000</td></tr> <tr><td>{{XINPUT_GAMEPAD_X}}</td><td> 0x4000</td></tr> <tr><td>{{XINPUT_GAMEPAD_Y}}</td><td> 0x8000</td></tr> </table> <p>?</p> <p>Bits that are set but not defined above are reserved, and their state is undefined. </p> </dd> + + + <dd> <p>The current value of the left trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>The current value of the right trigger analog control. The value is between 0 and 255.</p> </dd> + + + <dd> <p>Left thumbstick x-axis value. Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick. A value of 0 is centered. Negative values signify down or to the left. Positive values signify up or to the right. The constants {{XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE}} or {{XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE}} can be used as a positive and negative value to filter a thumbstick input. +</p> </dd> + + + <dd> <p>Left thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick x-axis value. The value is between -32768 and 32767.</p> </dd> + + + <dd> <p>Right thumbstick y-axis value. The value is between -32768 and 32767.</p> </dd> + + + + + <p>Represents the state of a controller.</p> + <p>The <em>dwPacketNumber</em> member is incremented only if the status of the controller has changed since the controller was last polled. </p> + + + <dd> <p>State packet number. The packet number indicates whether there have been any changes in the state of the controller. If the <em>dwPacketNumber</em> member is the same in sequentially returned <strong>{{XINPUT_STATE}}</strong> structures, the controller state has not changed.</p> </dd> + + + <dd> <p> <strong>{{XINPUT_GAMEPAD}}</strong> structure containing the current state of an Xbox 360 Controller.</p> </dd> + + + + + <p>Specifies motor speed levels for the vibration function of a controller.</p> + <p>The left motor is the low-frequency rumble motor. The right motor is the high-frequency rumble motor. The two motors are not the same, and they create different vibration effects.</p> + + + <dd> <p>Speed of the left motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + <dd> <p>Speed of the right motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100 percent motor use.</p> </dd> + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + <p>Specifies keystroke data returned by <strong>{{XInputGetKeystroke}}</strong>.</p> + <p>Future devices may return {{HID}} codes and virtual key values that are not supported on current devices, and are currently undefined. Applications should ignore these unexpected values. </p><p>A <em>virtual-key</em> code is a byte value that represents a particular physical key on the keyboard, not the character or characters (possibly none) that the key can be mapped to based on keyboard state. The keyboard state at the time a virtual key is pressed modifies the character reported. For example, {{VK_4}} might represent a "4" or a "$", depending on the state of the {{SHIFT}} key. </p><p>A reported keyboard event includes the virtual key that caused the event, whether the key was pressed or released (or is repeating), and the state of the keyboard at the time of the event. The keyboard state includes information about whether any {{CTRL}}, {{ALT}}, or {{SHIFT}} keys are down. </p><p>If the keyboard event represents an Unicode character (for example, pressing the "A" key), the <em>Unicode</em> member will contain that character. Otherwise, <em>Unicode</em> will contain the value zero. </p><p>The valid virtual-key ({{VK_xxx}}) codes are defined in {{XInput}}.h. In addition to codes that indicate key presses, the following codes indicate controller input. </p><table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{VK_PAD_A}}</td><td><strong>A</strong> button?</td></tr> <tr><td>{{VK_PAD_B}}</td><td><strong>B</strong> button?</td></tr> <tr><td>{{VK_PAD_X}}</td><td><strong>X</strong> button?</td></tr> <tr><td>{{VK_PAD_Y}}</td><td><strong>Y</strong> button?</td></tr> <tr><td>{{VK_PAD_RSHOULDER}}</td><td>Right shoulder button?</td></tr> <tr><td>{{VK_PAD_LSHOULDER}}</td><td>Left shoulder button?</td></tr> <tr><td>{{VK_PAD_LTRIGGER}}</td><td>Left trigger?</td></tr> <tr><td>{{VK_PAD_RTRIGGER}}</td><td>Right trigger?</td></tr> <tr><td>{{VK_PAD_DPAD_UP}}</td><td>Directional pad up?</td></tr> <tr><td>{{VK_PAD_DPAD_DOWN}}</td><td>Directional pad down?</td></tr> <tr><td>{{VK_PAD_DPAD_LEFT}}</td><td>Directional pad left?</td></tr> <tr><td>{{VK_PAD_DPAD_RIGHT}}</td><td>Directional pad right?</td></tr> <tr><td>{{VK_PAD_START}}</td><td><strong>{{START}}</strong> button?</td></tr> <tr><td>{{VK_PAD_BACK}}</td><td><strong>{{BACK}}</strong> button?</td></tr> <tr><td>{{VK_PAD_LTHUMB_PRESS}}</td><td>Left thumbstick click?</td></tr> <tr><td>{{VK_PAD_RTHUMB_PRESS}}</td><td>Right thumbstick click?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UP}}</td><td>Left thumbstick up?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWN}}</td><td>Left thumbstick down?</td></tr> <tr><td>{{VK_PAD_LTHUMB_RIGHT}}</td><td>Left thumbstick right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_LEFT}}</td><td>Left thumbstick left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPLEFT}}</td><td>Left thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_LTHUMB_UPRIGHT}}</td><td>Left thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNRIGHT}}</td><td>Left thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_LTHUMB_DOWNLEFT}}</td><td>Left thumbstick down and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UP}}</td><td>Right thumbstick up?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWN}}</td><td>Right thumbstick down?</td></tr> <tr><td>{{VK_PAD_RTHUMB_RIGHT}}</td><td>Right thumbstick right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_LEFT}}</td><td>Right thumbstick left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPLEFT}}</td><td>Right thumbstick up and left?</td></tr> <tr><td>{{VK_PAD_RTHUMB_UPRIGHT}}</td><td>Right thumbstick up and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNRIGHT}}</td><td>Right thumbstick down and right?</td></tr> <tr><td>{{VK_PAD_RTHUMB_DOWNLEFT}}</td><td>Right thumbstick down and left?</td></tr> </table><p>?</p> + + + + <p>Retrieves the current state of the specified controller.</p> + <p>When <strong>{{XInputGetState}}</strong> is used to retrieve controller data, the left and right triggers are each reported separately. For legacy reasons, when DirectInput retrieves controller data, the two triggers share the same axis. The legacy behavior is noticeable in the current Game Device Control Panel, which uses DirectInput for controller state.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_STATE}}</strong> structure that receives the current state of the controller.</p> </dd> + + + + + <p>Sends data to a connected controller. This function is used to activate the vibration function of a controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>.</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value from 0 to 3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_VIBRATION}}</strong> structure containing the vibration information to send to the controller.</p> </dd> + + + + + <p>Retrieves the capabilities and features of a connected controller.</p> + <strong>Note</strong>??The legacy {{XINPUT}} 9.1.0 version (included in Windows?Vista and later) always returned a fixed set of capabilities regardless of attached device.? + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If the controller is not connected, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, the return value is an error code defined in WinError.h. The function does not use <em>SetLastError</em> to set the calling thread's last-error code.</p> + + + <dd> <p>Index of the user's controller. Can be a value in the range 0?3. For information about how this value is determined and how the value maps to indicators on the controller, see Multiple Controllers. </p> </dd> + + + <dd> <p>Input flags that identify the controller type. If this value is 0, then the capabilities of all controllers connected to the system are returned. Currently, only one value is supported:</p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td><strong>{{XINPUT_FLAG_GAMEPAD}}</strong></td><td>Limit query to devices of Xbox 360 Controller type.</td></tr> </table> <p>?</p> <p>Any value of <em>dwflags</em> other than the above or 0 is illegal and will result in an error break when debugging.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_CAPABILITIES}}</strong> structure that receives the controller capabilities.</p> </dd> + + + + + <p>Sets the reporting state of {{XInput}}.</p> + <p>This function is meant to be called when an application gains or loses focus (such as via <strong>{{WM_ACTIVATEAPP}}</strong>). Using this function, you will not have to change the {{XInput}} query loop in your application as neutral data will always be reported if {{XInput}} is disabled. +</p><p>In a controller that supports vibration effects:</p><ul> <li>Passing <strong>{{FALSE}}</strong> will stop any vibration effects currently playing. In this state, calls to <strong>{{XInputSetState}}</strong> will be registered, but not passed to the device.</li> <li>Passing <strong>{{TRUE}}</strong> will pass the last vibration request (even if it is 0) sent to <strong>{{XInputSetState}}</strong> to the device.</li> </ul> + <p>This function does not return a value.</p> + + + <dd> <p>If enable is <strong>{{FALSE}}</strong>, {{XInput}} will only send neutral data in response to <strong>{{XInputGetState}}</strong> (all buttons up, axes centered, and triggers at 0). <strong>{{XInputSetState}}</strong> calls will be registered but not sent to the device. Sending any value other than <strong>{{FALSE}} </strong>will restore reading and writing functionality to normal.</p> </dd> + + + + + <p>Retrieves the sound rendering and sound capture audio device {{IDs}} that are associated with the headset connected to the specified controller.</p> + <p>Callers must allocate the memory for the buffers passed to <strong>{{XInputGetAudioDeviceIds}}</strong>. The resulting strings can be of arbitrary length.</p> + <p>If the function successfully retrieves the device {{IDs}} for render and capture, the return code is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If there is no headset connected to the controller, the function will also retrieve <strong>{{ERROR_SUCCESS}}</strong> with <strong>{{NULL}}</strong> as the values for <em>pRenderDeviceId</em> and <em>pCaptureDeviceId</em>. +</p><p>If the controller port device is not physically connected, the function will return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. +</p><p>If the function fails, it will return a valid Win32 error code. +</p> + + + <dd> <p> Index of the gamer associated with the device.</p> </dd> + + + <dd> <p> Windows Core Audio device {{ID}} string for render (speakers).</p> </dd> + + + <dd> <p> Size, in wide-chars, of the render device {{ID}} string buffer.</p> </dd> + + + <dd> <p>Windows Core Audio device {{ID}} string for capture (microphone).</p> </dd> + + + <dd> <p>Size, in wide-chars, of capture device {{ID}} string buffer.</p> </dd> + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + <p>A multithread interface accesses multithread settings and can only be used if the thread-safe layer is turned on. </p> + <p>This interface is obtained by querying it from the <strong>{{ID3D10Device}} Interface</strong> using {{IUnknown::QueryInterface}}.</p> + + + + <p>Enter a device's critical section.</p> + <p>Entering a device's critical section prevents other threads from simultaneously calling that device's methods (if <strong>multithread protection</strong> is set to true), calling {{DXGI}} methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.</p><p>This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and <strong>{{ID3D10Multithread::Leave}}</strong> is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Leave a device's critical section.</p> + <p>This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. <strong>{{ID3D10Multithread::Enter}}</strong> is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.</p> + <p>Returns nothing.</p> + + + + <p>Turn multithreading on or off.</p> + <p>True if multithreading was turned on prior to calling this method, false otherwise.</p> + + + <dd> <p>True to turn multithreading on, false to turn it off.</p> </dd> + + + + + <p>Find out if multithreading is turned on or not.</p> + <p>Whether or not multithreading is turned on. True means on, false means off.</p> + + + + <p> The +<strong>{{LOCKTYPE}}</strong> enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the +<strong>{{ILockBytes::LockRegion}}</strong> and +<strong>{{IStream::LockRegion}}</strong> methods.</p> + + + + <p> The +<strong>{{STATSTG}}</strong> structure contains statistical data about an open storage, stream, or byte-array object. This structure is used in the +<strong>{{IEnumSTATSTG}}</strong>, +<strong>{{ILockBytes}}</strong>, +<strong>{{IStorage}}</strong>, and +<strong>{{IStream}}</strong> interfaces.</p> + + + + <p> The +<strong>{{ISequentialStream}}</strong> interface supports simplified sequential access to stream objects. The +<strong>{{IStream}}</strong> interface inherits its +<strong>Read</strong> and +<strong>Write</strong> methods from +<strong>{{ISequentialStream}}</strong>.</p> + + + + <p>Reads a specified number of bytes from the stream object into memory starting at the current read/write location within the stream.</p> + + + <dd><p>[in] +Points to the buffer into which the stream is read. If an error occurs, this value is {{NULL}}.</p></dd> + + + <dd><p>[in] +Specifies the number of bytes of data to attempt to read from the stream object.</p></dd> + + + <dd><p>[out] +Pointer to a location where this method writes the actual number of bytes read from the stream object. You can set this reference to {{NULL}} to indicate that you are not interested in this value. In this case, this method does not provide the actual number of bytes read.</p></dd> + + + + + <p>Writes a specified number of bytes into the stream object starting at the current read/write location within the stream.</p> + + + <dd><p>[in] Points to the buffer into which the stream should be written.</p></dd> + + + <dd><p>[in] The number of bytes of data to attempt to write into the stream.</p></dd> + + + <dd><p>[out] Pointer to a location where this method writes the actual number of bytes written to the stream object. The caller can set this reference to {{NULL}}, in which case this method does not provide the actual number of bytes written.</p></dd> + + + + + <p> The +<strong>{{IStream}}</strong> interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.</p><p>The +<strong>{{IStream}}</strong> interface defines methods similar to the {{MS}}-{{DOS}} {{FAT}} file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a {{DOS}} file and a stream object is that in the latter case, streams are opened using an +<strong>{{IStream}}</strong> interface reference rather than a file handle.</p><p>The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.</p><p>Streams can remain open for long periods of time without consuming file-system resources. The <strong>{{IUnknown::Release}}</strong> method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.</p><p>Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous +<strong>{{IMoniker::BindToStorage}}</strong> operation and for receiving asynchronous notifications. See +{{URL}} Monikers for more information. The following table compares the behavior of asynchronous +<strong>{{ISequentialStream::Read}}</strong> and +<strong>{{IStream::Seek}}</strong> calls returned in <strong>{{IBindStatusCallback::OnDataAvailable}}</strong> in these two download models:</p> + + + + <p> The <strong>Seek</strong> method changes the seek reference to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek reference.</p> + <p><strong>{{IStream::Seek}}</strong> changes the seek reference so that subsequent read and write operations can be performed at a different location in the stream object. It is an error to seek before the beginning of the stream. It is not, however, an error to seek past the end of the stream. Seeking past the end of the stream is useful for subsequent write operations, as the stream byte range will be extended to the new seek position immediately before the write is complete.</p><p>You can also use this method to obtain the current value of the seek reference by calling this method with the <em>dwOrigin</em> parameter set to <strong>{{STREAM_SEEK_CUR}}</strong> and the <em>dlibMove</em> parameter set to 0 so that the seek reference is not changed. The current seek reference is returned in the <em>plibNewPosition</em> parameter.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The seek reference was successfully adjusted.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>Indicates that the [out] parameter <em>plibNewPosition</em> points to invalid memory, because <em>plibNewPosition</em> is not read.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The <em>dwOrigin</em> parameter contains an invalid value, or the <em>dlibMove</em> parameter contains a bad offset value. For example, the result of the seek reference is a negative offset value.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>The displacement to be added to the location indicated by the <em>dwOrigin</em> parameter. If <em>dwOrigin</em> is <strong>{{STREAM_SEEK_SET}}</strong>, this is interpreted as an unsigned value rather than a signed value.</p> </dd> + + + <dd> <p>The origin for the displacement specified in <em>dlibMove</em>. The origin can be the beginning of the file (<strong>{{STREAM_SEEK_SET}}</strong>), the current seek reference (<strong>{{STREAM_SEEK_CUR}}</strong>), or the end of the file (<strong>{{STREAM_SEEK_END}}</strong>). For more information about values, see the <strong>{{STREAM_SEEK}}</strong> enumeration.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the value of the new seek reference from the beginning of the stream. </p> <p>You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the new seek reference.</p> </dd> + + + + + <p>The <strong>SetSize</strong> method changes the size of the stream object.</p> + <p><strong>{{IStream::SetSize}}</strong> changes the size of the stream object. Call this method to preallocate space for the stream. If the <em>libNewSize</em> parameter is larger than the current stream size, the stream is extended to the indicated size by filling the intervening space with bytes of undefined value. This operation is similar to the +<strong>{{ISequentialStream::Write}}</strong> method if the seek reference is past the current end of the stream.</p><p>If the <em>libNewSize</em> parameter is smaller than the current stream, the stream is truncated to the indicated size.</p><p>The seek reference is not affected by the change in stream size.</p><p>Calling <strong>{{IStream::SetSize}}</strong> can be an effective way to obtain a large chunk of contiguous space.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The size of the stream object was successfully changed.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream size is not changed because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_INVALIDFUNCTION}}</strong></dt> <dd> <p>The value of the <em>libNewSize</em> parameter is not supported by the implementation. Not all streams support greater than 2?? bytes. If a stream does not support more than 2?? bytes, the high <strong>{{DWORD}}</strong> data type of <em>libNewSize</em> must be zero. If it is nonzero, the implementation may return {{STG_E_INVALIDFUNCTION}}. In general, {{COM}}-based implementations of the <strong>{{IStream}}</strong> interface do not support streams larger than 2?? bytes.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Specifies the new size, in bytes, of the stream.</p> </dd> + + + + + <p>The <strong>CopyTo</strong> method copies a specified number of bytes from the current seek reference in the stream to the current seek reference in another stream.</p> + <p>The <strong>CopyTo</strong> method copies the specified bytes from one stream to another. It can also be used to copy a stream to itself. The seek reference in each stream instance is adjusted for the number of bytes read or written. This method is equivalent to reading <em>cb</em> bytes into memory using +<strong>{{ISequentialStream::Read}}</strong> and then immediately writing them to the destination stream using +<strong>{{ISequentialStream::Write}}</strong>, although <strong>{{IStream::CopyTo}}</strong> will be more efficient.</p><p>The destination stream can be a clone of the source stream created by calling the +<strong>{{IStream::Clone}}</strong> method.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns an error, you cannot assume that the seek references are valid for either the source or destination. Additionally, the values of <em>pcbRead</em> and <em>pcbWritten</em> are not meaningful even though they are returned.</p><p>If <strong>{{IStream::CopyTo}}</strong> returns successfully, the actual number of bytes read and written are the same.</p><p>To copy the remainder of the source from the current seek reference, specify the maximum large integer value for the <em>cb</em> parameter. If the seek reference is the beginning of the stream, this operation copies the entire stream.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream object was successfully copied.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the data to be copied is currently unavailable. For more information, see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The value of one of the reference parameters is invalid.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The stream is not copied because there is no space left on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>A reference to the destination stream. The stream pointed to by <em>pstm</em> can be a new stream or a clone of the source stream.</p> </dd> + + + <dd> <p>The number of bytes to copy from the source stream.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes read from the source. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes read.</p> </dd> + + + <dd> <p>A reference to the location where this method writes the actual number of bytes written to the destination. You can set this reference to <strong>{{NULL}}</strong>. In this case, this method does not provide the actual number of bytes written.</p> </dd> + + + + + <p>The <strong>Commit</strong> method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, <strong>{{IStream::Commit}}</strong> has no effect other than flushing all memory buffers to the next-level storage object. The {{COM}} compound file implementation of streams does not support opening streams in transacted mode.</p> + <p>The <strong>Commit</strong> method ensures that changes to a stream object opened in transacted mode are reflected in the parent storage. Changes that have been made to the stream since it was opened or last committed are reflected to the parent storage object. If the parent is opened in transacted mode, the parent may revert at a later time, rolling back the changes to this stream object. The compound file implementation does not support the opening of streams in transacted mode, so this method has very little effect other than to flush memory buffers. For more information, see +{{IStream}} - Compound File Implementation.</p><p>If the stream is open in direct mode, this method ensures that any memory buffers have been flushed out to the underlying storage object. This is much like a flush in traditional file systems.</p><p>The <strong>{{IStream::Commit}}</strong> method is useful on a direct mode stream when the implementation of the +<strong>{{IStream}}</strong> interface is a wrapper for underlying file system {{APIs}}. In this case, <strong>{{IStream::Commit}}</strong> would be connected to the file system's flush call.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>Changes to the stream object were successfully committed to the parent level.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_MEDIUMFULL}}</strong></dt> <dd> <p>The commit operation failed due to lack of space on the storage device.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>Controls how the changes for the stream object are committed. See the +<strong>{{STGC}}</strong> enumeration for a definition of these values.</p> </dd> + + + + + <p>The <strong>Revert</strong> method discards all changes that have been made to a transacted stream since the last +<strong>{{IStream::Commit}}</strong> call. On streams open in direct mode and streams using the {{COM}} compound file implementation of <strong>{{IStream::Revert}}</strong>, this method has no effect.</p> + <p>The <strong>Revert</strong> method discards changes made to a transacted stream since the last commit operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully reverted to its previous version.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> </dl> + + + + + + + + + + <p> The <strong>Stat</strong> method retrieves the +<strong>{{STATSTG}}</strong> structure for this stream.</p> + <p><strong>{{IStream::Stat}}</strong> retrieves a reference to the +<strong>{{STATSTG}}</strong> structure that contains information about this open stream. When this stream is within a structured storage and +<strong>{{IStorage::EnumElements}}</strong> is called, it creates an enumerator object with the +<strong>{{IEnumSTATSTG}}</strong> interface on it, which can be called to enumerate the storages and streams through the +<strong>{{STATSTG}}</strong> structures associated with each of them.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was successfully returned at the specified location.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_ACCESSDENIED}}</strong></dt> <dd> <p>The caller does not have enough permissions for accessing statistics for this storage object.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The +<strong>{{STATSTG}}</strong> structure was not returned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDFLAG}}</strong></dt> <dd> <p>The value for the <em>grfStateFlag</em> parameter is not valid.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>pStatStg</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + + <p> The <strong>Clone</strong> method creates a new stream object with its own seek reference that references the same bytes as the original stream.</p> + <p>The <strong>Clone</strong> method creates a new stream object for accessing the same bytes but using a separate seek reference. The new stream object sees the same data as the source-stream object. Changes written to one object are immediately visible in the other. Range locking is shared between the stream objects.</p><p>The initial setting of the seek reference in the cloned stream instance is the same as the current setting of the seek reference in the original stream at the time of the clone operation.</p> + <p>This method can return one of these values.</p><dl> <dt><strong>{{S_OK}}</strong></dt> <dd> <p>The stream was successfully cloned.</p> </dd> <dt><strong>{{E_PENDING}}</strong></dt> <dd> <p>Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see +<strong>{{IFillLockBytes}}</strong> and +Asynchronous Storage.</p> </dd> <dt><strong>{{STG_E_INSUFFICIENTMEMORY}}</strong></dt> <dd> <p>The stream was not cloned due to a lack of memory.</p> </dd> <dt><strong>{{STG_E_INVALIDPOINTER}}</strong></dt> <dd> <p>The <em>ppStm</em> reference is not valid.</p> </dd> <dt><strong>{{STG_E_REVERTED}}</strong></dt> <dd> <p>The object has been invalidated by a revert operation above it in the transaction tree.</p> </dd> </dl> + + + <dd> <p>When successful, reference to the location of an +<strong>{{IStream}}</strong> reference to the new stream object. If an error occurs, this parameter is <strong>{{NULL}}</strong>.</p> </dd> + + + + + <p> The +<strong>{{STGC}}</strong> enumeration constants specify the conditions for performing the commit operation in the +<strong>{{IStorage::Commit}}</strong> and +<strong>{{IStream::Commit}}</strong> methods.</p> + <p>You can specify <strong>{{STGC_DEFAULT}}</strong> or some combination of <strong>{{STGC_OVERWRITE}}</strong>, <strong>{{STGC_ONLYIFCURRENT}}</strong>, and <strong>{{STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE}}</strong> for normal commit operations. You can specify <strong>{{STGC_CONSOLIDATE}}</strong> with any other {{STGC}} flags.</p><p>Typically, use <strong>{{STGC_ONLYIFCURRENT}}</strong> to protect the storage object in cases where more than one user can edit the object simultaneously.</p> + + + + <p> The +<strong>{{STATFLAG}}</strong> enumeration values indicate whether the method should try to return a name in the <strong>pwcsName</strong> member of the +<strong>{{STATSTG}}</strong> structure. The values are used in the +<strong>{{ILockBytes::Stat}}</strong>, +<strong>{{IStorage::Stat}}</strong>, and +<strong>{{IStream::Stat}}</strong> methods to save memory when the <strong>pwcsName</strong> member is not required.</p> + + + + <p> </p><p>The <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration defines constants that indicate whether an audio stream will run in shared mode or in exclusive mode.</p> + <p>The <strong>{{IAudioClient::Initialize}}</strong> and <strong>{{IAudioClient::IsFormatSupported}}</strong> methods use the constants defined in the <strong>{{AUDCLNT_SHAREMODE}}</strong> enumeration.</p><p>In shared mode, the client can share the audio endpoint device with clients that run in other user-mode processes. The audio engine always supports formats for client streams that match the engine's mix format. In addition, the audio engine might support another format if the Windows audio service can insert system effects into the client stream to convert the client format to the mix format.</p><p>In exclusive mode, the Windows audio service attempts to establish a connection in which the client has exclusive access to the audio endpoint device. In this mode, the audio engine inserts no system effects into the local stream to aid in the creation of the connection point. Either the audio device can handle the specified format directly or the method fails.</p><p>For more information about shared-mode and exclusive-mode streams, see User-Mode Audio Components.</p> + + + <dd> <p>The audio stream will run in shared mode. For more information, see Remarks.</p> </dd> + + + <dd> <p>The audio stream will run in exclusive mode. For more information, see Remarks.</p> </dd> + + + + + <p>Specifies the category of an audio stream.</p> + <p>Note that only a subset of the audio stream categories are valid for certain stream types.</p><table> <tr><th>Stream type</th><th>Valid categories</th></tr> <tr><td>Render stream</td><td>All categories are valid.</td></tr> <tr><td>Capture stream</td><td>AudioCategory_Communications, AudioCategory_Speech, AudioCategory_Other</td></tr> <tr><td>Loopback stream</td><td>AudioCategory_Other</td></tr> </table><p>?</p><p>Games should categorize their music streams as <strong>AudioCategory_GameMedia</strong> so that game music mutes automatically if another application plays music in the background. Music or video applications should categorize their streams as <strong>AudioCategory_Media</strong> or <strong>AudioCategory_Movie</strong> so they will take priority over <strong>AudioCategory_GameMedia</strong> streams.</p><p>The values <strong>AudioCategory_ForegroundOnlyMedia</strong> and <strong>AudioCategory_BackgroundCapableMedia</strong> are deprecated. For Windows Store apps, these values will continue to function the same when running on Windows?10 as they did on Windows?8.1. Attempting to use these values in a Universal Windows Platform ({{UWP}}) app, will result in compilation errors and an exception at runtime. Using these values in a Windows desktop application built with the Windows?10 {{SDK}} the will result in a compilation error.</p> + + + <dd> <p>Other audio stream.</p> </dd> + + + <dd> <p>Media that will only stream when the app is in the foreground. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Media that can be streamed when the app is in the background. This enumeration value has been deprecated. For more information, see the Remarks section.</p> </dd> + + + <dd> <p>Real-time communications, such as {{VOIP}} or chat.</p> </dd> + + + <dd> <p>Alert sounds.</p> </dd> + + + <dd> <p>Sound effects.</p> </dd> + + + <dd> <p>Game sound effects.</p> </dd> + + + <dd> <p>Background audio for games.</p> </dd> + + + <dd> <p>Game chat audio. Similar to <strong>AudioCategory_Communications</strong> except that <strong>AudioCategory_GameChat</strong> will not attenuate other streams.</p> </dd> + + + <dd> <p>Speech.</p> </dd> + + + <dd> <p>Stream that includes audio with dialog.</p> </dd> + + + <dd> <p>Stream that includes audio without dialog.</p> </dd> + + + + + <p> </p><p>The <strong>AudioSessionState</strong> enumeration defines constants that indicate the current state of an audio session.</p> + <p>When a client opens a session by assigning the first stream to the session (by calling the <strong>{{IAudioClient::Initialize}}</strong> method), the initial session state is inactive. The session state changes from inactive to active when a stream in the session begins running (because the client has called the <strong>{{IAudioClient::Start}}</strong> method). The session changes from active to inactive when the client stops the last running stream in the session (by calling the <strong>{{IAudioClient::Stop}}</strong> method). The session state changes to expired when the client destroys the last stream in the session by releasing all references to the stream object.</p><p>The system volume-control program, Sndvol, displays volume controls for both active and inactive sessions. Sndvol stops displaying the volume control for a session when the session state changes to expired. For more information about Sndvol, see Audio Sessions.</p><p>The <strong>{{IAudioSessionControl::GetState}}</strong> and <strong>{{IAudioSessionEvents::OnStateChanged}}</strong> methods use the constants defined in the <strong>AudioSessionState</strong> enumeration.</p><p>For more information about session states, see Audio Sessions.</p> + + + <dd> <p>The audio session is inactive. (It contains at least one stream, but none of the streams in the session is currently running.)</p> </dd> + + + <dd> <p>The audio session is active. (At least one of the streams in the session is running.)</p> </dd> + + + <dd> <p>The audio session has expired. (It contains no streams.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Presents a rendered image to the user.</p> + <p>Starting with Direct3D 11.1, consider using <strong>{{IDXGISwapChain1::Present1}}</strong> because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.</p><p>For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.</p><p>Because calling <strong>Present</strong> might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.</p><table> <tr><td> <p>Differences between Direct3D 9 and Direct3D 10:</p> <p>Specifying <strong>{{DXGI_PRESENT_TEST}}</strong> in the <em>Flags</em> parameter is analogous to <strong>{{IDirect3DDevice9::TestCooperativeLevel}}</strong> in Direct3D 9.</p> </td></tr> </table><p>?</p><p>For flip presentation model swap chains that you create with the <strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong> value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the <strong>{{DXGI_PRESENT_DO_NOT_SEQUENCE}}</strong> flag in the <em>Flags</em> parameter.</p><p>For info about how data values change when you present content to the screen, see Converting data for the color space.</p> + <p>Possible return values include: {{S_OK}}, {{DXGI_ERROR_DEVICE_RESET}} or {{DXGI_ERROR_DEVICE_REMOVED}} (see {{DXGI_ERROR}}), {{DXGI_STATUS_OCCLUDED}} (see {{DXGI_STATUS}}), or {{D3DDDIERR_DEVICEREMOVED}}. </p><strong>Note</strong>??The <strong>Present</strong> method can return either {{DXGI_ERROR_DEVICE_REMOVED}} or {{D3DDDIERR_DEVICEREMOVED}} if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.? + + + <dd> <p>An integer that specifies how to synchronize presentation of a frame with the vertical blank. +</p> <p>For the bit-block transfer (bitblt) model (<strong>{{DXGI_SWAP_EFFECT_DISCARD}}</strong> or <strong>{{DXGI_SWAP_EFFECT_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - The presentation occurs immediately, there is no synchronization.</li> <li>1 through 4 - Synchronize presentation after the <em>n</em>th vertical blank.</li> </ul> <p>For the flip model (<strong>{{DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL}}</strong>), values are:</p> <ul> <li>0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +</li> <li>1 through 4 - Synchronize presentation for at least <em>n</em> vertical blanks. </li> </ul> <p>For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.</p> <p>If the update region straddles more than one output (each represented by <strong>{{IDXGIOutput}}</strong>), <strong>Present</strong> performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.</p> </dd> + + + <dd> <p>An integer value that contains swap-chain presentation options. These options are defined by the {{DXGI_PRESENT}} constants.</p> </dd> + + + + + + + + <p>Set the priority for evicting the resource from memory.</p> + <p>The eviction priority is a memory-management variable that is used by {{DXGI}} for determining how to populate overcommitted memory.</p><p>You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.</p> + <p>Returns one of the following {{DXGI_ERROR}}.</p> + + + <dd> <p>The priority is one of the following values: </p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MINIMUM}} (0x28000000)</strong></dt> </dl> </td><td> <p>The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_LOW}} (0x50000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a {{GPU}} can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_NORMAL}} (0x78000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource. </p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_HIGH}} (0xa0000000)</strong></dt> </dl> </td><td> <p>The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.</p> </td></tr> <tr><td><dl> <dt><strong>{{DXGI_RESOURCE_PRIORITY_MAXIMUM}} (0xc8000000)</strong></dt> </dl> </td><td> <p>The resource is evicted from memory only if there is no other way of resolving the memory requirement.</p> </td></tr> </table> <p>?</p> </dd> + + + + + <p>Get a reference to the data contained in the surface, and deny {{GPU}} access to the surface.</p> + <p>Use <strong>{{IDXGISurface::Map}}</strong> to access a surface from the {{CPU}}. To release a mapped surface (and allow {{GPU}} access) call <strong>{{IDXGISurface::Unmap}}</strong>.</p> + <p>Returns {{S_OK}} if successful; otherwise, returns one of the error codes that are described in the {{DXGI_ERROR}} topic.</p> + + + <dd> <p>A reference to the surface data (see <strong>{{DXGI_MAPPED_RECT}}</strong>).</p> </dd> + + + <dd> <p>{{CPU}} read-write flags. These flags can be combined with a logical {{OR}}. </p> <ul> <li>{{DXGI_MAP_READ}} - Allow {{CPU}} read access.</li> <li>{{DXGI_MAP_WRITE}} - Allow {{CPU}} write access.</li> <li>{{DXGI_MAP_DISCARD}} - Discard the previous contents of a resource when it is mapped.</li> </ul> </dd> + + + + + + + + + + + + + + <p>Status codes that can be returned by {{DXGI}} functions.</p><p></p> + <p>The <strong>{{HRESULT}}</strong> value for each <strong>{{DXGI_STATUS}}</strong> value is determined from this macro that is defined in {{DXGItype}}.h:</p><pre> #define _FACDXGI 0x87a +#define {{MAKE_DXGI_STATUS}}(code) {{MAKE_HRESULT}}(0, _FACDXGI, code) +</pre><p>For example, <strong>{{DXGI_STATUS_OCCLUDED}}</strong> is defined as <strong>0x087A0001</strong>:</p><pre> #define {{DXGI_STATUS_OCCLUDED}} {{MAKE_DXGI_STATUS}}(1) +</pre> + + + + + + + <p> </p><p>Provides configuration information to the dispatching thread for a callback.</p> + <p> The <strong>GetParameters</strong> method returns information about the callback so that the dispatching thread can optimize the process that it uses to invoke the callback. </p><p> If the method returns a value other than zero in the <em>pdwFlags</em> parameter, your <strong>Invoke</strong> method must meet the requirements described here. Otherwise, the callback might delay the pipeline.</p><p> If you want default values for both parameters, return <strong>{{E_NOTIMPL}}</strong>. The default values are given in the parameter descriptions on this page.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows?{{XP}} with Service Pack?2 ({{SP2}}) and later.</li> <li>Windows?{{XP}} Media Center Edition?2005 with {{KB900325}} (Windows?{{XP}} Media Center Edition?2005) and {{KB925766}} (October 2006 Update Rollup for Windows?{{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong><strong>{{S_OK}}</strong></strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong><strong>{{E_NOTIMPL}}</strong></strong></dt> </dl> </td><td> <p> Not implemented. Assume the default behavior. </p> </td></tr> </table><p>?</p> + + + <dd> <p>Receives a flag indicating the behavior of the callback object's <strong>{{IMFAsyncCallback::Invoke}}</strong> method. The following values are defined. The default value is zero.</p> <table> <tr><th>Value</th><th>Meaning</th></tr> <tr><td><dl> <dt><strong>Zero</strong></dt> </dl> </td><td> <p>The callback does not take a long time to complete, but has no specific restrictions on what system calls it makes. The callback generally takes less than 30 milliseconds to complete.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>The callback does very minimal processing. It takes less than 1 millisecond to complete.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_SIGNAL_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Implies <strong>{{MFASYNC_FAST_IO_PROCESSING_CALLBACK}}</strong>, with the additional restriction that the callback does no processing (less than 50 microseconds), and the only system call it makes is <strong>SetEvent</strong>.</p> <p>The callback must be invoked from one of the following work queues:</p> <ul> <li><strong>{{MFASYNC_CALLBACK_QUEUE_IO}}</strong></li> <li><strong>{{MFASYNC_CALLBACK_QUEUE_TIMER}}</strong></li> </ul> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_BLOCKING_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Blocking callback.</p> </td></tr> <tr><td><dl> <dt><strong><strong>{{MFASYNC_REPLY_CALLBACK}}</strong></strong></dt> </dl> </td><td> <p>Reply callback.</p> </td></tr> </table> <p>?</p> </dd> + + + <dd> <p> Receives the identifier of the work queue on which the callback is dispatched. </p> <p>This value can specify one of the standard Media Foundation work queues, or a work queue created by the application. For list of standard Media Foundation work queues, see <strong>Work Queue Identifiers</strong>. To create a new work queue, call <strong>{{MFAllocateWorkQueue}}</strong>. The default value is <strong>{{MFASYNC_CALLBACK_QUEUE_STANDARD}}</strong>.</p> <p>If the work queue is not compatible with the value returned in <em>pdwFlags</em>, the Media Foundation platform returns <strong>{{MF_E_INVALID_WORKQUEUE}}</strong> when it tries to dispatch the callback. (See <strong>{{MFPutWorkItem}}</strong>.)</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Contains information about the creation flags, input channels, and sample rate of a voice.</p> + <p>Note the DirectX {{SDK}} versions of {{XAUDIO2}} do not support the <strong>ActiveFlags</strong> member.</p> + + + <dd> <p>Flags used to create the voice; see the individual voice interfaces for more information.</p> </dd> + + + <dd> <p>Flags that are currently set on the voice.</p> </dd> + + + <dd> <p>The number of input channels the voice expects.</p> </dd> + + + <dd> <p>The input sample rate the voice expects.</p> </dd> + + + + + <p>{{XAudio2}} constants that specify default parameters, maximum values, and flags.</p><p> </p><p><strong>{{XAudio2}} boundary values</strong></p> + + + + + + + + + + + <p>Represents an audio data buffer, used with <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong>.</p> + <p>{{XAudio2}} audio data is interleaved, data from each channel is adjacent for a particular sample number. For example if there was a 4 channel wave playing into an {{XAudio2}} source voice, the audio data would be a sample of channel 0, a sample of channel 1, a sample of channel 2, a sample of channel 3, and then the next sample of channels 0, 1, 2, 3, etc. </p><p>The <strong>AudioBytes</strong> and <strong>pAudioData</strong> members of <strong>{{XAUDIO2_BUFFER}}</strong> correspond to the size in bytes and contents of the 'data' {{RIFF}} chunk of the file being played. The contents of the chunk may need to be byte swapped when loading the file on Xbox 360. </p><p>Memory allocated to hold a <strong>{{XAUDIO2_BUFFER}}</strong> or <strong>{{XAUDIO2_BUFFER_WMA}}</strong> structure can be freed as soon as the <strong>{{IXAudio2SourceVoice::SubmitSourceBuffer}}</strong> call it is passed to returns. The data the structure points to (<strong>pAudioData</strong> and <strong>pDecodedPacketCumulativeBytes</strong>, respectively) can't be freed until the buffer completes (as signaled by the <strong>{{IXAudio2VoiceCallback::OnBufferEnd}}</strong> callback) or the voice is stopped or destroyed. </p> + + + + + + + + + + + + + <p>Retrieves the battery type and charge status of a wireless controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>.</p> + + + <dd> <p>Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1.</p> </dd> + + + <dd> <p>Specifies which device associated with this user index should be queried. Must be <strong>{{BATTERY_DEVTYPE_GAMEPAD}}</strong> or <strong>{{BATTERY_DEVTYPE_HEADSET}}</strong>.</p> </dd> + + + <dd> <p>Pointer to an <strong>{{XINPUT_BATTERY_INFORMATION}}</strong> structure that receives the battery information.</p> </dd> + + + + + <p>Contains information on battery type and charge state.</p> + + + <dd> <p>The type of battery. <em>BatteryType</em> will be one of the following values. </p> <table> <tr><th>Value</th><th>Description</th></tr> <tr><td>{{BATTERY_TYPE_DISCONNECTED}}</td><td>The device is not connected.?</td></tr> <tr><td>{{BATTERY_TYPE_WIRED}}</td><td>The device is a wired device and does not have a battery.?</td></tr> <tr><td>{{BATTERY_TYPE_ALKALINE}}</td><td>The device has an alkaline battery.?</td></tr> <tr><td>{{BATTERY_TYPE_NIMH}}</td><td>The device has a nickel metal hydride battery.?</td></tr> <tr><td>{{BATTERY_TYPE_UNKNOWN}}</td><td>The device has an unknown battery type.?</td></tr> </table> <p>?</p> </dd> + + + <dd> <p>The charge state of the battery. This value is only valid for wireless devices with a known battery type. <em>BatteryLevel</em> will be one of the following values. </p> <table> <tr><th>Value</th></tr> <tr><td>{{BATTERY_LEVEL_EMPTY}}</td></tr> <tr><td>{{BATTERY_LEVEL_LOW}}</td></tr> <tr><td>{{BATTERY_LEVEL_MEDIUM}}</td></tr> <tr><td>{{BATTERY_LEVEL_FULL}}</td></tr> </table> <p>?</p> </dd> + + + + + + + + <p>Describes the capabilities of a connected controller. The <strong>{{XInputGetCapabilities}}</strong> function returns <strong>{{XINPUT_CAPABILITIES}}</strong>. </p> + <p> <strong>{{XInputGetCapabilities}}</strong> returns <strong>{{XINPUT_CAPABILITIES}}</strong> to indicate the characteristics and available functionality of a specified controller. </p><p> <strong>{{XInputGetCapabilities}}</strong> sets the structure members to indicate which inputs the device supports. For binary state controls, such as digital buttons, the corresponding bit reflects whether or not the control is supported by the device. For proportional controls, such as thumbsticks, the value indicates the resolution for that control. Some number of the least significant bits may not be set, indicating that the control does not provide resolution to that level. </p><p>The <em>SubType</em> member indicates the specific subtype of controller present. Games may detect the controller subtype and tune their handling of controller input or output based on subtypes that are well suited to their game genre. For example, a car racing game might check for the presence of a wheel controller to provide finer control of the car being driven. However, titles must not disable or ignore a device based on its subtype. Subtypes not recognized by the game or for which the game is not specifically tuned should be treated as a standard Xbox 360 Controller ({{XINPUT_DEVSUBTYPE_GAMEPAD}}). </p><p>Older {{XUSB}} Windows drivers report incomplete capabilities information, particularly for wireless devices. The latest {{XUSB}} Windows driver provides full support for wired and wireless devices, and more complete and accurate capabilties flags. </p> + + + + <p>A table of controller subtypes available in {{XInput}}.</p> + + + + + + + + + + + + + + + + + + + <p>Retrieves a gamepad input event.</p> + <p>Wireless controllers are not considered active upon system startup, and calls to any of the <em>{{XInput}}</em> functions before a wireless controller is made active return <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. Game titles must examine the return code and be prepared to handle this condition. Wired controllers are automatically activated when they are inserted. Wireless controllers are activated when the user presses the {{START}} or Xbox Guide button to power on the controller.</p> + <p>If the function succeeds, the return value is <strong>{{ERROR_SUCCESS}}</strong>. +</p><p>If no new keys have been pressed, the return value is <strong>{{ERROR_EMPTY}}</strong>. +</p><p>If the controller is not connected or the user has not activated it, the return value is <strong>{{ERROR_DEVICE_NOT_CONNECTED}}</strong>. See the Remarks section below.</p><p>If the function fails, the return value is an error code defined in Winerror.h. The function does not use <strong>SetLastError</strong> to set the calling thread's last-error code. +</p> + + + <dd> <p>[in] Index of the signed-in gamer associated with the device. Can be a value in the range 0?{{XUSER_MAX_COUNT}} ? 1, or {{XUSER_INDEX_ANY}} to fetch the next available input event from any user.</p> </dd> + + + <dd> <p>[in] Reserved</p> </dd> + + + <dd> <p>[out] Pointer to an <strong>{{XINPUT_KEYSTROKE}}</strong> structure that receives an input event.</p> </dd> + + + + + + + + + + + + + + + + + + + + <p>Represents a virtual adapter. This interface extends <strong>Id3d12device2</strong> to support the creation of special-purpose diagnostic heaps in system memory that persist even in the event of a {{GPU}}-fault or device-removed scenario.</p><strong>Note</strong> This interface, introduced in the Windows 10 Fall Creators Update, is the latest version of the <strong>{{ID3D12Device}}</strong> interface. Applications targeting the Windows 10 Fall Creators Update and later should use this interface instead of earlier versions. + <p>Use <strong>{{D3D12CreateDevice}}</strong> to create a device.</p> + + + + <p>Specifies the type of unit contained in an <strong>{{IMFSample}}</strong> in a {{MFSampleExtension_ForwardedDecodeUnits}} collection.</p> + + + + + + + + <p>Gets the {{ID}} of the process with which the activity is associated.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pPID</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Part of a contract between {{D3D11On12}} diagnostic layers and graphics diagnostics tools. This interface facilitates diagnostics tools to capture information at a lower level than the {{DXGI}} swapchain.</p> + + + + + + + + + + <p>Represents the activity of a process associated with a sensor.</p> + + + + <p>Gets an <strong>{{IMFSensorProcessActivity}}</strong> object representing the current process activity of a sensor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppProcessActivity</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Gets the streaming mode of the sensor process.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pMode</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the process {{ID}}.</p> </dd> + + + + + <p>Gets the count of <strong>{{IMFSensorActivityReport}}</strong> objects that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified device name.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_INVALIDARG}}</strong></dt> </dl> </td><td> <p>The <em>symbolicName</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_OUTOFMEMORY}}</strong></dt> </dl> </td><td> <p>The system is out of memory.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_NOT_FOUND}}</strong></dt> </dl> </td><td> <p>No sensor with the specified symbolic name was found.</p> </td></tr> </table><p> </p> + + + + <p>Represents an activity report for a sensor.</p> + + + + <p>Gets the symbolic link for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor symbolic link is written.</p> </dd> + + + <dd> <p>The character count of the <em>SymbolicLink</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>SymbolicLink</em> string.</p> </dd> + + + + + <p>Interface implemented by the client to receive callbacks when sensor activity reports are available.</p> + <p>Register the callback by passing an implementation of this interface into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Gets a value indicating whether the sensor is currently streaming.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pfStreaming</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a value indicating whether the sensor is currently streaming.</p> </dd> + + + + + <p>Raised by the media pipeline when a new <strong>{{IMFSensorActivitiesReport}}</strong> is available.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + + <p>Gets the count of <strong>{{IMFSensorProcessActivity}}</strong> objects, representing the current activity of a process associated with the sensor, that are available to be retrieved.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pulCount</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + <p>Provides methods for controlling a sensor activity monitor.</p> + <p>Get an instance of this class by calling <strong>{{MFCreateSensorActivityMonitor}}</strong>. Sensor activity reports are delivered through the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface passed into this method.</p> + + + + <p>Stops the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> </table><p> </p> + + + + <p>Gets the time associated with the sensor activity report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pft</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives the time associated with the sensor activity report.</p> </dd> + + + + + + + + <p>Gets the friendly name for the sensor associated with the report.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>pcchWritten</em> parameter is null.</p> </td></tr> </table><p> </p> + + + <dd> <p>The string into which the sensor friendly name is written.</p> </dd> + + + <dd> <p>The character count of the <em>FriendlyName</em> string.</p> </dd> + + + <dd> <p>Receives the number of characters that were written into the <em>FriendlyName</em> string.</p> </dd> + + + + + + + + <p>Provides access to <strong>{{IMFSensorActivityReport}}</strong> objects that describe the current activity of a sensor.</p> + <p>Register to receive sensor activities reports by implementing the <strong>{{IMFSensorActivitiesReportCallback}}</strong> interface and passing the implementation into <strong>{{MFCreateSensorActivityMonitor}}</strong>.</p> + + + + <p>Retrieves an <strong>{{IMFSensorActivityReport}}</strong> based on the specified index.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>sensorActivityReport</em> parameter is null.</p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDINDEX}}</strong></dt> </dl> </td><td> <p>The <em>Index</em> parameter is not less than value returned by <strong>GetCount</strong>. </p> </td></tr> </table><p> </p> + + + + <p>Starts the sensor activity monitor.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{MF_E_INVALIDREQUEST}}</strong></dt> </dl> </td><td> <p>The sensor activity monitor has already been started.</p> </td></tr> </table><p> </p> + + + + <p>Initializes a new instance of the <strong>{{IMFSensorActivityMonitor}}</strong> interface.</p> + <p> The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table. </p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p> The method succeeded. </p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>The <em>ppActivityMonitor</em> parameter is null.</p> </td></tr> </table><p> </p> + + + + + + + + + + + + + + + + + + + <p> Returns the nominal mapping of {{UCS4}} Unicode code points to glyph indices as defined by the font '{{CMAP}}' table. </p> + <p>Note that this mapping is primarily provided for line layout engines built on top of the physical font {{API}}. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.</p><p> When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, {{IDWriteFont::HasCharacter}} returns false and GetUnicodeRanges doesn't return it in the range.</p> + <p>If this method succeeds, it returns <strong>{{S_OK}}</strong>. Otherwise, it returns an <strong>{{HRESULT}}</strong> error code.</p> + + + <dd> <p>An array of {{USC4}} code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by <em>codePointCount</em>.</p> </dd> + + + <dd> <p>The number of elements in the <em>codePoints</em> array.</p> </dd> + + + <dd> <p>When this method returns, contains a reference to an array of nominal glyph indices filled by this function.</p> </dd> + + + + + <p>Gets a message from the message queue.</p> + <p>This method doesn't remove any messages from the message queue.</p><p>This method gets a message from the message queue after an optional retrieval filter has been applied.</p><p>Call this method twice to retrieve a message, first to obtain the size of the message and second to get the message. Here is a typical example:</p><pre> // Get the size of the message. +{{SIZE_T}} messageLength = 0; +{{HRESULT}} hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, {{NULL}}, &amp;messageLength); // Allocate space and get the message. +{{DXGI_INFO_QUEUE_MESSAGE}} * pMessage = ({{DXGI_INFO_QUEUE_MESSAGE}}*)malloc(messageLength); +hr = pInfoQueue-&gt;GetMessage({{DXGI_DEBUG_ALL}}, 0, pMessage, &amp;messageLength); +</pre><strong>Note</strong> This {{API}} requires the Windows Software Development Kit ({{SDK}}) for Windows 8. + <p>Returns {{S_OK}} if successful; an error code otherwise. For a list of error codes, see {{DXGI_ERROR}}.</p> + + + <dd> <p> A <strong>{{DXGI_DEBUG_ID}}</strong> value that identifies the entity that gets the message.</p> </dd> + + + <dd> <p>An index into the message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter. Call <strong>{{IDXGIInfoQueue::GetNumStoredMessagesAllowedByRetrievalFilters}}</strong> to obtain this number. 0 is the message at the beginning of the message queue.</p> </dd> + + + <dd> <p>A reference to a <strong>{{DXGI_INFO_QUEUE_MESSAGE}}</strong> structure that describes the message.</p> </dd> + + + <dd> <p>A reference to a variable that receives the size, in bytes, of the message description that <em>pMessage</em> points to. This size includes the size of the message string that <em>pMessage</em> points to.</p> </dd> + + + + + <p> </p><p>Returns an object associated with the asynchronous operation. The type of object, if any, depends on the asynchronous method that was called.</p> + <p>Typically, this object is used by the component that implements the asynchronous method. It provides a way for the function that invokes the callback to pass information to the asynchronous <strong>End...</strong> method that completes the operation.</p><p>If you are implementing an asynchronous method, you can set the object through the <em>punkObject</em> parameter of the <strong>{{MFCreateAsyncResult}}</strong> function.</p><p>If the asynchronous result object's internal <strong>{{IUnknown}}</strong> reference is <strong>{{NULL}}</strong>, the method returns <strong>{{E_POINTER}}</strong>.</p><p>This interface is available on the following platforms if the Windows Media Format 11 {{SDK}} redistributable components are installed:</p><ul> <li>Windows {{XP}} with Service Pack 2 ({{SP2}}) and later.</li> <li>Windows {{XP}} Media Center Edition 2005 with {{KB900325}} (Windows {{XP}} Media Center Edition 2005) and {{KB925766}} (October 2006 Update Rollup for Windows {{XP}} Media Center Edition) installed.</li> </ul> + <p>The method returns an <strong>{{HRESULT}}</strong>. Possible values include, but are not limited to, those in the following table.</p><table> <tr><th>Return code</th><th>Description</th></tr> <tr><td> <dl> <dt><strong>{{S_OK}}</strong></dt> </dl> </td><td> <p>The method succeeded.</p> </td></tr> <tr><td> <dl> <dt><strong>{{E_POINTER}}</strong></dt> </dl> </td><td> <p>There is no object associated with this asynchronous result.</p> </td></tr> </table><p> </p> + + + <dd> <p>Receives a reference to the object's <strong>{{IUnknown}}</strong> interface. If no object is associated with the operation, this parameter receives the value <strong>{{NULL}}</strong>. If the value is not <strong>{{NULL}}</strong>, the caller must release the interface.</p> </dd> + + + + + <p>Increments the reference count for an interface on an object. This method should be called for every new copy of a reference to an interface on an object.</p> + <p>Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use <strong>AddRef</strong> to stabilize a copy of an interface reference. It can also be called when the life of a cloned reference must extend beyond the lifetime of the original reference. The cloned reference must be released by calling <strong>{{IUnknown::Release}}</strong>.</p><p>The internal reference counter that <strong>AddRef</strong> maintains should be a 32-bit unsigned integer.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Retrieves references to the supported interfaces on an object.</p><p>This method calls <strong>{{IUnknown::AddRef}}</strong> on the reference it returns.</p> + <p>For any one object, a specific query for the <strong>{{IUnknown}}</strong> interface on any of the object's interfaces must always return the same reference value. This enables a client to determine whether two references point to the same component by calling <strong>QueryInterface</strong> with {{IID_IUnknown}} and comparing the results. It is specifically not the case that queries for interfaces other than {{IUnknown}} (even the same interface through the same reference) must return the same reference value.</p><p>There are four requirements for implementations of <strong>QueryInterface</strong> (In these cases, "must succeed" means "must succeed barring catastrophic failure."):</p><ul> <li> <p>The set of interfaces accessible on an object through <strong>QueryInterface</strong> must be static, not dynamic. This means that if a call to <strong>QueryInterface</strong> for a reference to a specified interface succeeds the first time, it must succeed again, and if it fails the first time, it must fail on all subsequent queries.</p> </li> <li> <p>It must be reflexive — if a client holds a reference to an interface on an object, and queries for that interface, the call must succeed.</p> </li> <li> <p>It must be symmetric — if a client holding a reference to one interface queries successfully for another, a query through the obtained reference for the first interface must succeed.</p> </li> <li> <p>It must be transitive — if a client holding a reference to one interface queries successfully for a second, and through that reference queries successfully for a third interface, a query for the first interface through the reference for the third interface must succeed.</p> </li> </ul> + <p>This method returns {{S_OK}} if the interface is supported, and {{E_NOINTERFACE}} otherwise. If <em>ppvObject</em> is <strong>{{NULL}}</strong>, this method returns {{E_POINTER}}.</p> + + + + <p>Decrements the reference count for an interface on an object.</p> + <p>When the reference count on an object reaches zero, <strong>Release</strong> must cause the interface reference to free itself. When the released reference is the only existing reference to an object (whether the object supports single or multiple interfaces), the implementation must free the object.</p><p>Note that aggregation of objects restricts the ability to recover interface references.</p> + <p>The method returns the new reference count. This value is intended to be used only for test purposes.</p> + + + + <p>Enables clients to get references to other interfaces on a given object through the <strong>QueryInterface</strong> method, and manage the existence of the object through the <strong>AddRef</strong> and <strong>Release</strong> methods. All other {{COM}} interfaces are inherited, directly or indirectly, from <strong>{{IUnknown}}</strong>. Therefore, the three methods in <strong>{{IUnknown}}</strong> are the first entries in the {{VTable}} for every interface. +</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>Describes a sensor profile {{ID}}.</p> + + + <dd> <p>A <strong>Sensor Profile {{GUID}}</strong> that describes the type of sensor profile. </p> </dd> + + + <dd> <p>The index of the sensor profile.</p> </dd> + + + <dd> <p>Not currently used.</p> </dd> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Install.ps1 b/Source/Install.ps1 deleted file mode 100644 index eb5ab8c42..000000000 --- a/Source/Install.ps1 +++ /dev/null @@ -1,36 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -"Installing [{0}] to project [{1}]" -f $package.Id, $project.FullName | Write-Host - -# Load MSBuild assembly if it’s not loaded yet. -Add-Type -AssemblyName "Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - -# Check that SharpDX.targets was correctly imported -$buildProject = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 -$importsToRemove = $buildProject.Xml.Imports | Where-Object { $_.Project.Endswith('SharpDX.targets') } -if (!$importsToRemove) -{ - throw ("SharpDX.targets import not found in project [{0}]" -f $project.FullName) -} -$sharpdx_package_bin_dir = $buildProject.GetProperty("SharpDXPackageBinDir").EvaluatedValue -$sharpdx_assembly_path = "{0}\{1}.dll" -f $sharpdx_package_bin_dir, $package.Id - -# Add the assembly through the project in order for VS to update correctly the references in the IDE -$project.Object.References.Add($sharpdx_assembly_path) - -# Find the references we just added -$sharpdx_reference = $buildProject.GetItems("Reference") | Where-Object { $_.EvaluatedInclude -eq $package.Id } -if (!$sharpdx_reference) -{ - $sharpdx_reference = $buildProject.GetItems("Reference") | Where-Object { $_.EvaluatedInclude.StartsWith("{0}," -f $package.Id) } -} -if (!$sharpdx_reference) -{ - throw ("Unable to find reference in project for assembly [{0}]" -f $package.Id) -} - -# Replace the HintPath using the $(SharpDXPackageBinDir) variable provided by the SharpDX.targets -$sharpdx_reference.SetMetadataValue("HintPath", '$(SharpDXPackageBinDir)\{0}.dll' -f $package.Id) - -# Save the project -$project.Save() diff --git a/Source/Mapping.Direct3D1x.xml b/Source/Mapping.Direct3D1x.xml index bc17dee5a..321669274 100644 --- a/Source/Mapping.Direct3D1x.xml +++ b/Source/Mapping.Direct3D1x.xml @@ -156,7 +156,7 @@ - + @@ -258,10 +258,10 @@ - + - + @@ -305,11 +305,11 @@ --> - + - + - + @@ -318,7 +318,7 @@ - + @@ -338,8 +338,8 @@ - - + + @@ -358,9 +358,9 @@ - - - + + + @@ -390,8 +390,8 @@ - - + + @@ -407,8 +407,8 @@ - - + + @@ -435,7 +435,7 @@ - + @@ -445,14 +445,14 @@ - - - - - - - - + + + + + + + + @@ -475,7 +475,7 @@ - + @@ -504,18 +504,18 @@ - - - - - - - + + + + + + + - - - - + + + + diff --git a/Source/Mapping.xml b/Source/Mapping.xml index 8b8c1559f..7daa73b82 100644 --- a/Source/Mapping.xml +++ b/Source/Mapping.xml @@ -22,13 +22,10 @@ --> - $(THIS_CONFIG_PATH)\..\External\LegacyHeaders - $(VC_TOOLS_PATH)\include - =HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots\KitsRoot10;Include\10.0.15063.0\shared - =HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots\KitsRoot10;Include\10.0.15063.0\um - =HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots\KitsRoot10;Include\10.0.15063.0\ucrt + + - error: pasting .*a valid preprocessing token + $(THIS_CONFIG_PATH)\..\External\LegacyHeaders @@ -63,35 +60,516 @@ - - SharpDX\Mapping.xml - SharpDX.DXGI\Mapping.xml - SharpDX.D3DCompiler\Mapping.xml - Mapping.Direct3D1x.xml - - SharpDX.Direct3D11\Mapping.xml - SharpDX.Direct3D12\Mapping.xml - SharpDX.Direct3D11.Effects\Mapping.xml - - - SharpDX.XAudio2\Mapping.xml - SharpDX.MediaFoundation\Mapping.xml + + + Aspect + Bytecode + Hull + Vertex + Rational + Ratio + PixelShader + Pixels + Pixel + Domain + Geometry + Audio + Forced + Force + Revoked + Omac + Soundbank + Sound + Notification + Positive + Negative + Scissors + Scissor + BitRate + VariableBitRate + Write + Writer + Allowing + Allow + Authenticated + Querying + Query + Checker + Cleanup + Clean + Allocation + All + Data + Prefer + Empty + Fully + Full + VertexBufferView + VertexBuffer + IndexBufferView + IndexBuffer + Checking + Check + Nothing + Destination + Encryption + Enqueue + Wrong + Certificate + GetCryptoSession + MonoOffset + StreamSelector + StreamSource + Flip + Buffering + Opm + Media + MediaType + Invalidated + Invalidate + BufferSize + Optional + Sort + And + Rgba + Rgb + Argb + OutputDuplicate + Targets + Target + Tool + NonStandard + Elements + Subscript + Opportunity + Classic + Initials + Drawn + Parameters + Pointed + Informational + Copyright + Notation + Contextual + Logical + Logic + Sampler + Samplers + SamplerState + Region + Copying + Copy + Changed + Viewports + Viewport + Adjust + Adjustment + Stereo + StreamStereo + Notice + Minus + Streaming + Some + Alpha + Output + Updates + Update + Colorimetric + Color + Background + Frame + Frames + FrameStep + Future + First + Downloaded + Download + Balanced + Balance + Metadata + Queued + Queue + Purge + Volumes + Volume + Duration + Rate + TimeUpdate + CanPlay + Loading + Loaded + Load + Stable + WaitFor + Wait + Waiting + Rectangle + Rectangles + Rectangle + Inputs + Input + Blendable + Blending + Blend + Decryption + Socket + Location + Indexer + Index + Indexed + Instance + Instanced + Once + Mirror + Unordered + Accessibility + Accessible + Access + Extension + Doubles + Double + Opening + Operations + Open + Change + Classification + Class + Slots + Slot + Open + Inverted + Invert + Subtract + Software + Soft + Indirect + Invalid + Optimization + Optimal + Optimization + Hazards + Hazard + OufOf + Memory + Freely + Free + Data + Create + Misc + Cpu + Accessible + Access + Argument + Arguments + Argument + Blit + Bindable + Binding + Bind + Initialize + Initial + Unrecognized + MSAA + Expected + Unexpected + Usage + Null + Constants + Constant + Large + Last + RenderTargets + RenderTarget + Supported + Unsupported + Format + Too + Drawable + Drawing + Draw + Many + Objects + Object + Shader + Depth + Missing + Element + Notify + Not + Settings + Setting + Private + More + Getting + Setting + Get + Set + Descriptor + Description + Description + ConstantBufferView + ConstantBuffer + TextureBuffer + ExtendedBuffer + Function + Function + Flags + Flags + ShaderResourceView + DepthStencilView + RenderTargetView + UnorderedAccessViews + UnorderedAccessView + Texture + Text + Cube + Texture + 1D + 2D + 3D + Multisampled + RW + ArraySize + ArraySlice + Arrays + Array + Buffers + Buffer + Address + ByteStream + Bytes + Byte + UInt8 + UInt + SInt + UNorm + SNorm + SRgb + WithAdjacency + WithAdjacency + InputAssembly + VertexShader + PixelShader + HullShader + Dsp + Setup + Subset + Unbind + Deleting + OutputMerger + DomainShader + GeometryShader + Rasterizer + ComputeShader + Option + Options + Backface + SingleThreaded + Geometry + Displaying + Display + Finishing + Finished + Finish + Deferred + Context + Compute + Reader + Source + Solid + StreamOutputView + StreamOutput + Operation + Opaque + Opacity + Optimizations + Optimization + Operation + Inverse + Inverse + Source + SecondarySource + Saturation + Saturate + Saturate + Without + Within + Initialization + Miscellaneous + With + StreamOutput + Stream + Streams + Rotation + Destination + Destroy + Destination + Reverb + Video + Processor + Reverse + Reverse + Maximum + Maximum + Minimum + Minimum + Min + Increment + Declaration + Declare + Declaration + Increasing + Decreasing + Decrement + StencilOperation + Stencil + Resources + Resource + Views + MipLevels + View + Sub + Substitution + ConstantBuffer + Information + Information + Description1 + Description2 + Disassembly + FastFourierTransform + DeviceContext + Linear + LineStrip + Lines + Line + List + Listener + Strip + Pointers + Pointer + Points + Point + Triangle + ThreadGroupSharedMemory + IUnknown + UInt32 + UInt64 + - SharpDX.Direct2D1\Mapping.xml + + + + + + + + + + + + + + + + + + + + + + + + + - - SharpDX.Animation\Mapping.xml - SharpDX.DirectComposition\Mapping.xml - SharpDX.DirectManipulation\Mapping.xml - SharpDX.RawInput\Mapping.xml - - - SharpDX.Animation\Mapping.xml - SharpDX.DirectComposition\Mapping.xml - SharpDX.DirectManipulation\Mapping.xml - SharpDX.RawInput\Mapping.xml - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - SharpDX.XInput\Mapping.xml + + + + + + + \ No newline at end of file diff --git a/Source/MappingFiles.props b/Source/MappingFiles.props new file mode 100644 index 000000000..765b49f1b --- /dev/null +++ b/Source/MappingFiles.props @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/SharedAssemblyInfo.cs b/Source/SharedAssemblyInfo.cs index 2ffdbc758..087d7dea0 100644 --- a/Source/SharedAssemblyInfo.cs +++ b/Source/SharedAssemblyInfo.cs @@ -22,14 +22,4 @@ using System.Resources; using System.Runtime.InteropServices; -[assembly:ComVisible(false)] - -#if STORE_APP -[assembly: Obfuscation(Feature = "Apply to type SharpDX.* when public and interface: renaming", Exclude = false, ApplyToMembers = true)] -[assembly: Obfuscation(Feature = "Apply to type SharpDX.* when struct: renaming", Exclude = false, ApplyToMembers = true)] -[assembly: Obfuscation(Feature = "Apply to type SharpDX.*: INotifyPropertyChanged heuristics", Exclude = true)] -[assembly: Obfuscation(Feature = "Apply to type SharpDX.* when enum: forced rename", Exclude = false)] -[assembly: Obfuscation(Feature = "Apply to type SharpDX.* when enum: enum values pruning", Exclude = false)] -[assembly: Obfuscation(Feature = "legacy xml serialization heuristics", Exclude = true)] -[assembly: Obfuscation(Feature = "ignore InternalsVisibleToAttribute", Exclude = false)] -#endif \ No newline at end of file +[assembly:ComVisible(false)] \ No newline at end of file diff --git a/Source/SharpDX.Animation/Manager.cs b/Source/SharpDX.Animation/Manager.cs index eb644620b..bf23bd0aa 100644 --- a/Source/SharpDX.Animation/Manager.cs +++ b/Source/SharpDX.Animation/Manager.cs @@ -26,7 +26,7 @@ namespace SharpDX.Animation public partial class Manager { private static readonly Guid ManagerGuid = new Guid("4C1FC63A-695C-47E8-A339-1A194BE3D0B8"); - private ManagerEventHandlerShadow shadowEventHandler; + private ManagerEventHandlerCallback statusEventHandler; /// /// Initializes a new instance of the class. @@ -60,30 +60,30 @@ public event StatusChangedDelegate StatusChanged add { // Setup the Manager Event Handler delegates - if (shadowEventHandler == null) + if (statusEventHandler == null) { - shadowEventHandler = new ManagerEventHandlerShadow(); - SetManagerEventHandler_(ManagerEventHandlerShadow.ToIntPtr(shadowEventHandler)); + statusEventHandler = new ManagerEventHandlerCallback(); + SetManagerEventHandler(statusEventHandler); } - shadowEventHandler.Delegates += value; + statusEventHandler.Delegates += value; } remove { - if (shadowEventHandler == null) return; + if (statusEventHandler == null) return; - shadowEventHandler.Delegates -= value; + statusEventHandler.Delegates -= value; - if (shadowEventHandler.Delegates.GetInvocationList().Length == 0) + if (statusEventHandler.Delegates.GetInvocationList().Length == 0) { - SetManagerEventHandler_(IntPtr.Zero); - shadowEventHandler.Dispose(); - shadowEventHandler = null; + SetManagerEventHandler(null); + statusEventHandler.Dispose(); + statusEventHandler = null; } } } - private PriorityComparisonShadow cancelPriorityComparisonShadow; + private PriorityComparisonCallback cancelPriorityComparisonCallback; /// /// Sets the cancel priority comparison. @@ -97,23 +97,23 @@ public PriorityComparisonDelegate CancelPriorityComparison { if (value != null) { - if (cancelPriorityComparisonShadow == null) + if (cancelPriorityComparisonCallback == null) { - cancelPriorityComparisonShadow = new PriorityComparisonShadow { Delegate = value }; - SetCancelPriorityComparison_(PriorityComparisonShadow.ToIntPtr(cancelPriorityComparisonShadow)); + cancelPriorityComparisonCallback = new PriorityComparisonCallback { Delegate = value }; + SetCancelPriorityComparison(cancelPriorityComparisonCallback); } - cancelPriorityComparisonShadow.Delegate = value; + cancelPriorityComparisonCallback.Delegate = value; } - else if (cancelPriorityComparisonShadow != null) + else if (cancelPriorityComparisonCallback != null) { - SetCancelPriorityComparison_(IntPtr.Zero); - cancelPriorityComparisonShadow.Dispose(); - cancelPriorityComparisonShadow = null; + SetCancelPriorityComparison(null); + cancelPriorityComparisonCallback.Dispose(); + cancelPriorityComparisonCallback = null; } } } - private PriorityComparisonShadow trimPriorityComparisonShadow; + private PriorityComparisonCallback trimPriorityComparisonCallback; /// /// Sets the trim priority comparison. @@ -127,23 +127,23 @@ public PriorityComparisonDelegate TrimPriorityComparison { if (value != null) { - if (trimPriorityComparisonShadow == null) + if (trimPriorityComparisonCallback == null) { - trimPriorityComparisonShadow = new PriorityComparisonShadow { Delegate = value }; - SetTrimPriorityComparison_(PriorityComparisonShadow.ToIntPtr(trimPriorityComparisonShadow)); + trimPriorityComparisonCallback = new PriorityComparisonCallback { Delegate = value }; + SetTrimPriorityComparison(trimPriorityComparisonCallback); } - trimPriorityComparisonShadow.Delegate = value; + trimPriorityComparisonCallback.Delegate = value; } - else if (trimPriorityComparisonShadow != null) + else if (trimPriorityComparisonCallback != null) { - SetTrimPriorityComparison_(IntPtr.Zero); - trimPriorityComparisonShadow.Dispose(); - trimPriorityComparisonShadow = null; + SetTrimPriorityComparison(null); + trimPriorityComparisonCallback.Dispose(); + trimPriorityComparisonCallback = null; } } } - private PriorityComparisonShadow compressPriorityComparisonShadow; + private PriorityComparisonCallback compressPriorityComparisonCallback; /// /// Sets the compress priority comparison. @@ -157,23 +157,23 @@ public PriorityComparisonDelegate CompressPriorityComparison { if (value != null) { - if (compressPriorityComparisonShadow == null) + if (compressPriorityComparisonCallback == null) { - compressPriorityComparisonShadow = new PriorityComparisonShadow { Delegate = value }; - SetCompressPriorityComparison_(PriorityComparisonShadow.ToIntPtr(compressPriorityComparisonShadow)); + compressPriorityComparisonCallback = new PriorityComparisonCallback { Delegate = value }; + SetCompressPriorityComparison(compressPriorityComparisonCallback); } - compressPriorityComparisonShadow.Delegate = value; + compressPriorityComparisonCallback.Delegate = value; } - else if (compressPriorityComparisonShadow != null) + else if (compressPriorityComparisonCallback != null) { - SetCompressPriorityComparison_(IntPtr.Zero); - compressPriorityComparisonShadow.Dispose(); - compressPriorityComparisonShadow = null; + SetCompressPriorityComparison(null); + compressPriorityComparisonCallback.Dispose(); + compressPriorityComparisonCallback = null; } } } - private PriorityComparisonShadow concludePriorityComparisonShadow; + private PriorityComparisonCallback concludePriorityComparisonCallback; /// /// Sets the conclude priority comparison. @@ -187,18 +187,18 @@ public PriorityComparisonDelegate ConcludePriorityComparison { if (value != null) { - if (trimPriorityComparisonShadow == null) + if (concludePriorityComparisonCallback == null) { - trimPriorityComparisonShadow = new PriorityComparisonShadow { Delegate = value }; - SetConcludePriorityComparison_(PriorityComparisonShadow.ToIntPtr(trimPriorityComparisonShadow)); + concludePriorityComparisonCallback = new PriorityComparisonCallback { Delegate = value }; + SetConcludePriorityComparison(concludePriorityComparisonCallback); } - trimPriorityComparisonShadow.Delegate = value; + concludePriorityComparisonCallback.Delegate = value; } - else if (trimPriorityComparisonShadow != null) + else if (concludePriorityComparisonCallback != null) { - SetConcludePriorityComparison_(IntPtr.Zero); - trimPriorityComparisonShadow.Dispose(); - trimPriorityComparisonShadow = null; + SetConcludePriorityComparison(null); + concludePriorityComparisonCallback.Dispose(); + concludePriorityComparisonCallback = null; } } } @@ -248,39 +248,39 @@ public SharpDX.Animation.Storyboard GetStoryboardFromTag(int id, object tagObjec /// protected override void Dispose(bool disposing) { - if (shadowEventHandler != null) + if (statusEventHandler != null) { - SetManagerEventHandler_(IntPtr.Zero); - shadowEventHandler.Dispose(); - shadowEventHandler = null; + SetManagerEventHandler(null); + statusEventHandler.Dispose(); + statusEventHandler = null; } - if (cancelPriorityComparisonShadow != null) + if (cancelPriorityComparisonCallback != null) { - SetCancelPriorityComparison_(IntPtr.Zero); - cancelPriorityComparisonShadow.Dispose(); - cancelPriorityComparisonShadow = null; + SetCancelPriorityComparison(null); + cancelPriorityComparisonCallback.Dispose(); + cancelPriorityComparisonCallback = null; } - if (trimPriorityComparisonShadow != null) + if (concludePriorityComparisonCallback != null) { - SetConcludePriorityComparison_(IntPtr.Zero); - trimPriorityComparisonShadow.Dispose(); - trimPriorityComparisonShadow = null; + SetConcludePriorityComparison(null); + concludePriorityComparisonCallback.Dispose(); + concludePriorityComparisonCallback = null; } - if (compressPriorityComparisonShadow != null) + if (compressPriorityComparisonCallback != null) { - SetCompressPriorityComparison_(IntPtr.Zero); - compressPriorityComparisonShadow.Dispose(); - compressPriorityComparisonShadow = null; + SetCompressPriorityComparison(null); + compressPriorityComparisonCallback.Dispose(); + compressPriorityComparisonCallback = null; } - if (trimPriorityComparisonShadow != null) + if (concludePriorityComparisonCallback != null) { - SetConcludePriorityComparison_(IntPtr.Zero); - trimPriorityComparisonShadow.Dispose(); - trimPriorityComparisonShadow = null; + SetConcludePriorityComparison(null); + concludePriorityComparisonCallback.Dispose(); + concludePriorityComparisonCallback = null; } base.Dispose(disposing); diff --git a/Source/Tools/SharpGen/CppModel/CppConstant.cs b/Source/SharpDX.Animation/ManagerEventHandlerCallback.cs similarity index 60% rename from Source/Tools/SharpGen/CppModel/CppConstant.cs rename to Source/SharpDX.Animation/ManagerEventHandlerCallback.cs index 7c18452a2..2c20e559d 100644 --- a/Source/Tools/SharpGen/CppModel/CppConstant.cs +++ b/Source/SharpDX.Animation/ManagerEventHandlerCallback.cs @@ -17,39 +17,32 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Xml.Serialization; +using System; +using System.Runtime.InteropServices; -namespace SharpGen.CppModel +namespace SharpDX.Animation { /// - /// A C++ constant Name/Value. + /// Internal ManagerEventHandler Callback /// - [XmlType("const")] - public class CppConstant : CppElement + internal class ManagerEventHandlerCallback : SharpDX.CallbackBase, SharpDX.ICallbackable, ManagerEventHandler { + public Manager.StatusChangedDelegate Delegates; + /// - /// Initializes a new instance of the class. + /// Return a pointer to the unmanaged version of this callback. /// - public CppConstant() + /// The callback. + /// A pointer to a shadow c++ callback + public static IntPtr ToIntPtr(ManagerEventHandler callback) { + return CppObject.ToCallbackPtr(callback); } - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The value. - public CppConstant(string name, string value) + public void OnManagerStatusChanged(ManagerStatus newStatus, ManagerStatus previousStatus) { - Name = name; - Value = value; + if (Delegates != null) + Delegates(newStatus, previousStatus); } - - /// - /// Gets or sets the value. - /// - /// The value. - [XmlAttribute("value")] - public string Value{ get; set; } } } \ No newline at end of file diff --git a/Source/SharpDX.Animation/ManagerEventHandlerShadow.cs b/Source/SharpDX.Animation/ManagerEventHandlerShadow.cs index 4abeaac64..54e3f3eb4 100644 --- a/Source/SharpDX.Animation/ManagerEventHandlerShadow.cs +++ b/Source/SharpDX.Animation/ManagerEventHandlerShadow.cs @@ -25,12 +25,10 @@ namespace SharpDX.Animation /// /// Internal ManagerEventHandler Callback /// - internal class ManagerEventHandlerShadow : SharpDX.ComObjectShadow, ManagerEventHandler + internal class ManagerEventHandlerShadow : SharpDX.ComObjectShadow { private static readonly ManagerEventHandlerVtbl Vtbl = new ManagerEventHandlerVtbl(); - public Manager.StatusChangedDelegate Delegates; - /// /// Return a pointer to the unmanaged version of this callback. /// @@ -71,28 +69,5 @@ protected override CppObjectVtbl GetVtbl { get { return Vtbl; } } - - public IDisposable Shadow { get; set; } - - public void OnManagerStatusChanged(ManagerStatus newStatus, ManagerStatus previousStatus) - { - if (Delegates != null) - Delegates(newStatus, previousStatus); - } - - protected override void Dispose(bool disposing) - { - // Release the shadow - if (disposing) - { - if (Shadow != null) - { - Shadow.Dispose(); - Shadow = null; - } - } - - base.Dispose(disposing); - } } } \ No newline at end of file diff --git a/Source/SharpDX.Animation/Mapping.xml b/Source/SharpDX.Animation/Mapping.xml index 421cef49d..65b655c9b 100644 --- a/Source/SharpDX.Animation/Mapping.xml +++ b/Source/SharpDX.Animation/Mapping.xml @@ -39,6 +39,7 @@ + @@ -74,10 +75,8 @@ // Animation Structures // ***************************************************************** --> - - - + - + - + @@ -124,6 +123,9 @@ + + + diff --git a/Source/SharpDX.Animation/KeyFrame.cs b/Source/SharpDX.Animation/PriorityComparisonCallback.cs similarity index 69% rename from Source/SharpDX.Animation/KeyFrame.cs rename to Source/SharpDX.Animation/PriorityComparisonCallback.cs index 5f9dcd112..01d4a995c 100644 --- a/Source/SharpDX.Animation/KeyFrame.cs +++ b/Source/SharpDX.Animation/PriorityComparisonCallback.cs @@ -17,25 +17,23 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - using System; +using System.Runtime.InteropServices; namespace SharpDX.Animation { - public partial struct KeyFrame + /// + /// Internal PriorityComparison Callback + /// + internal class PriorityComparisonCallback : SharpDX.CallbackBase, PriorityComparison { - /// - /// Represents the implicit keyframe at the start of every storyboard. - /// - public static readonly KeyFrame Start = new KeyFrame(new IntPtr(-1)); + public Manager.PriorityComparisonDelegate Delegate; - /// - /// Initializes a new instance of the struct. - /// - /// The id. - public KeyFrame(IntPtr id) + public bool HasPriority(Storyboard scheduledStoryboard, Storyboard newStoryboard, PriorityEffect priorityEffect) { - Id = id; + if (Delegate != null) + return Delegate.Invoke(scheduledStoryboard, newStoryboard, priorityEffect); + return false; } } } \ No newline at end of file diff --git a/Source/SharpDX.Animation/PriorityComparisonShadow.cs b/Source/SharpDX.Animation/PriorityComparisonShadow.cs index 455d37180..17b0ca3f8 100644 --- a/Source/SharpDX.Animation/PriorityComparisonShadow.cs +++ b/Source/SharpDX.Animation/PriorityComparisonShadow.cs @@ -25,12 +25,10 @@ namespace SharpDX.Animation /// /// Internal PriorityComparison Callback /// - internal class PriorityComparisonShadow : SharpDX.ComObjectShadow, PriorityComparison + internal class PriorityComparisonShadow : SharpDX.ComObjectShadow { private static readonly PriorityComparisonVtbl Vtbl = new PriorityComparisonVtbl(); - public Manager.PriorityComparisonDelegate Delegate; - /// /// Return a pointer to the unmanaged version of this callback. /// @@ -38,7 +36,7 @@ internal class PriorityComparisonShadow : SharpDX.ComObjectShadow, PriorityCompa /// A pointer to a shadow c++ callback public static IntPtr ToIntPtr(PriorityComparison callback) { - return ToCallbackPtr(callback); + return CppObject.ToCallbackPtr(callback); } public class PriorityComparisonVtbl : ComObjectVtbl @@ -72,29 +70,5 @@ protected override CppObjectVtbl GetVtbl { get { return Vtbl; } } - - public IDisposable Shadow { get; set; } - - public bool HasPriority(Storyboard scheduledStoryboard, Storyboard newStoryboard, PriorityEffect priorityEffect) - { - if (Delegate != null) - return Delegate.Invoke(scheduledStoryboard, newStoryboard, priorityEffect); - return false; - } - - protected override void Dispose(bool disposing) - { - // Release the shadow - if (disposing) - { - if (Shadow != null) - { - Shadow.Dispose(); - Shadow = null; - } - } - - base.Dispose(disposing); - } } } \ No newline at end of file diff --git a/Source/SharpDX.Animation/SharpDX.Animation.csproj b/Source/SharpDX.Animation/SharpDX.Animation.csproj index 85863874c..e3300de66 100644 --- a/Source/SharpDX.Animation/SharpDX.Animation.csproj +++ b/Source/SharpDX.Animation/SharpDX.Animation.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1 + net40;net45;netstandard1.1 SharpDX.Animation SharpDX.Animation - bin\$(Configuration)\$(TargetFramework)\SharpDX.Animation.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.Animation.xml SharpDX.Animation SharpDX.Animation Assembly providing DirectX - Animation managed API. @@ -20,5 +20,5 @@ - + \ No newline at end of file diff --git a/Source/SharpDX.Animation/Storyboard.cs b/Source/SharpDX.Animation/Storyboard.cs index fe01962a7..340cf24d2 100644 --- a/Source/SharpDX.Animation/Storyboard.cs +++ b/Source/SharpDX.Animation/Storyboard.cs @@ -35,13 +35,6 @@ public Storyboard(Manager manager) manager.CreateStoryboard(this); } - /// - /// HRESULT IUIAnimationStoryboard::RepeatBetweenKeyframes([In] __MIDL___MIDL_itf_UIAnimation_0000_0002_0003* startKeyframe,[In] __MIDL___MIDL_itf_UIAnimation_0000_0002_0003* endKeyframe,[In] int repetitionCount) - public void RepeatBetweenKeyframes(SharpDX.Animation.KeyFrame startKeyframe, SharpDX.Animation.KeyFrame endKeyframe, RepeatCount repetitionCount) - { - RepeatBetweenKeyframes(startKeyframe, endKeyframe, (int)repetitionCount); - } - /// /// Sets the tag. /// diff --git a/Source/SharpDX.D3DCompiler/ShaderBytecode.cs b/Source/SharpDX.D3DCompiler/ShaderBytecode.cs index 85ce07e3a..ac7afab95 100644 --- a/Source/SharpDX.D3DCompiler/ShaderBytecode.cs +++ b/Source/SharpDX.D3DCompiler/ShaderBytecode.cs @@ -363,40 +363,35 @@ public static CompilationResult Compile(IntPtr textSource, int textSize, string if (!(profile.ToUpperInvariant().StartsWith("FX_") || profile.ToUpperInvariant().StartsWith("LIB_")) && string.IsNullOrWhiteSpace(entryPoint)) throw new ArgumentNullException("entryPoint"); - var resultCode = Result.Ok; - Blob blobForCode = null; Blob blobForErrors = null; - try - { - D3D.Compile2( - (IntPtr)textSource, - textSize, - sourceFileName, - PrepareMacros(defines), - IncludeShadow.ToIntPtr(include), - entryPoint, - profile, - shaderFlags, - effectFlags, - secondaryDataFlags, - secondaryData != null ? secondaryData.DataPointer : IntPtr.Zero, - secondaryData != null ? (int)secondaryData.Length : 0, - out blobForCode, - out blobForErrors); - } - catch (SharpDXException ex) + var resultCode = D3D.Compile2( + (IntPtr)textSource, + textSize, + sourceFileName, + PrepareMacros(defines), + include, + entryPoint, + profile, + shaderFlags, + effectFlags, + secondaryDataFlags, + secondaryData != null ? secondaryData.DataPointer : IntPtr.Zero, + secondaryData != null ? (int)secondaryData.Length : 0, + out blobForCode, + out blobForErrors); + + if (resultCode.Failure) { if (blobForErrors != null) { - resultCode = ex.ResultCode; if (Configuration.ThrowOnShaderCompileError) - throw new CompilationException(ex.ResultCode, Utilities.BlobToString(blobForErrors)); + throw new CompilationException(resultCode, Utilities.BlobToString(blobForErrors)); } else { - throw; + throw new SharpDXException(resultCode); } } @@ -475,7 +470,7 @@ public static CompilationResult CompileFromFile(string fileName, ShaderMacro[] defines = null, Include include = null) { - return Compile(NativeFile.ReadAllText(fileName), entryPoint, profile, shaderFlags, effectFlags, defines, include); + return Compile(NativeFile.ReadAllText(fileName), entryPoint, profile, shaderFlags, effectFlags, defines, include, fileName); } // Win 8.1 SDK removed the corresponding functions from the WinRT platform @@ -800,7 +795,7 @@ public static string Preprocess(IntPtr shaderSourcePtr, int shaderSourceLength, try { - D3D.Preprocess(shaderSourcePtr, shaderSourceLength, sourceFileName, PrepareMacros(defines), IncludeShadow.ToIntPtr(include), + D3D.Preprocess(shaderSourcePtr, shaderSourceLength, sourceFileName, PrepareMacros(defines),include, out blobForText, out blobForErrors); } catch (SharpDXException ex) diff --git a/Source/SharpDX.D3DCompiler/ShaderSignature.cs b/Source/SharpDX.D3DCompiler/ShaderSignature.cs index 30346b7a9..1e768acdf 100644 --- a/Source/SharpDX.D3DCompiler/ShaderSignature.cs +++ b/Source/SharpDX.D3DCompiler/ShaderSignature.cs @@ -103,8 +103,6 @@ public byte[] Data private set; } -// Win 8.1 SDK removed the corresponding functions from the WinRT platform -#if DESKTOP_APP /// /// Extracts the input and output signatures from a compiled shader or effect. /// @@ -156,7 +154,6 @@ public unsafe static ShaderSignature GetOutputSignature(byte[] shaderBytecode) return null; return new ShaderSignature(shaderSignature); } -#endif /// /// Cast this to the underlying byte buffer. diff --git a/Source/SharpDX.D3DCompiler/SharpDX.D3DCompiler.csproj b/Source/SharpDX.D3DCompiler/SharpDX.D3DCompiler.csproj index ae001f80a..94e2b556a 100644 --- a/Source/SharpDX.D3DCompiler/SharpDX.D3DCompiler.csproj +++ b/Source/SharpDX.D3DCompiler/SharpDX.D3DCompiler.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.D3DCompiler SharpDX.D3DCompiler - bin\$(Configuration)\$(TargetFramework)\SharpDX.D3DCompiler.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.D3DCompiler.xml SharpDX.D3DCompiler SharpDX.D3DCompiler Assembly providing DirectX - D3DCompiler managed API. @@ -19,6 +19,4 @@ - - \ No newline at end of file diff --git a/Source/SharpDX.Direct3D12/GraphicsPipelineStateDescription.cs b/Source/SharpDX.DXGI/DXGIDebug.cs similarity index 68% rename from Source/SharpDX.Direct3D12/GraphicsPipelineStateDescription.cs rename to Source/SharpDX.DXGI/DXGIDebug.cs index 60bc77389..b5fb71f5b 100644 --- a/Source/SharpDX.Direct3D12/GraphicsPipelineStateDescription.cs +++ b/Source/SharpDX.DXGI/DXGIDebug.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel +// Copyright (c) 2010-2018 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -17,27 +17,22 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - using System; -namespace SharpDX.Direct3D12 -{ - /// dn770370 - public partial class GraphicsPipelineStateDescription +namespace SharpDX.DXGI +{ + public partial class DXGIDebug { - private RootSignature rootSignature; - /// - /// + /// If the DXGI debug layer is installed (e.g. on developer machines), creates the DXGI Debug object. + /// Otherwise, returns null. /// - public RootSignature RootSignature + /// + /// Currently doesn't work for Windows Store (aka UWP) apps + /// + public static DXGIDebug TryCreate() { - get { return rootSignature; } - set - { - rootSignature = value; - RootSignaturePointer = value != null ? value.NativePointer : IntPtr.Zero; - } - } + return DebugInterface.TryCreateComPtr(out IntPtr comPtr) ? new DXGIDebug(comPtr) : null; + } } } \ No newline at end of file diff --git a/Source/SharpDX.DXGI/DXGIDebug1.cs b/Source/SharpDX.DXGI/DXGIDebug1.cs new file mode 100644 index 000000000..6fb1f8944 --- /dev/null +++ b/Source/SharpDX.DXGI/DXGIDebug1.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2010-2018 SharpDX - Alexandre Mutel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; + +namespace SharpDX.DXGI +{ + public partial class DXGIDebug1 + { + /// + /// If the DXGI debug layer is installed (e.g. on developer machines), creates the DXGI Debug1 object. + /// Otherwise, returns null. + /// + /// + /// Currently doesn't work for Windows Store (aka UWP) apps + /// + public new static DXGIDebug1 TryCreate() + { + return DebugInterface.TryCreateComPtr(out IntPtr comPtr) ? new DXGIDebug1(comPtr) : null; + } + } +} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/LiteralAttribute.cs b/Source/SharpDX.DXGI/DebugId.cs similarity index 69% rename from Source/Tools/SharpGen/Config/LiteralAttribute.cs rename to Source/SharpDX.DXGI/DebugId.cs index e80f840c0..dea4b3eb1 100644 --- a/Source/Tools/SharpGen/Config/LiteralAttribute.cs +++ b/Source/SharpDX.DXGI/DebugId.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel +// Copyright (c) 2010-2018 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -19,15 +19,13 @@ // THE SOFTWARE. using System; -namespace SharpGen.Config +namespace SharpDX.DXGI { - [AttributeUsage(AttributeTargets.Field|AttributeTargets.Property, AllowMultiple = false)] - public class LiteralAttribute : Attribute + public static class DebugId { - public bool SharpString { get; set; } - - public bool Identifier { get; set; } - - public bool QualifiedIdentifier { get; set; } + public static readonly Guid All = new Guid("e48ae283-da80-490b-87e6-43e9a9cfda08"); + public static readonly Guid App = new Guid("06cd6e01-4219-4ebd-8709-27ed23360c62"); + public static readonly Guid Dx = new Guid("35cdd7fc-13b2-421d-a5d7-7e4451287d64"); + public static readonly Guid Dxgi = new Guid("25cddaa4-b1c6-47e1-ac3e-98875b5a2e2a"); } } \ No newline at end of file diff --git a/Source/SharpDX.DXGI/DebugInterface.cs b/Source/SharpDX.DXGI/DebugInterface.cs new file mode 100644 index 000000000..48c56f43c --- /dev/null +++ b/Source/SharpDX.DXGI/DebugInterface.cs @@ -0,0 +1,47 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace SharpDX.DXGI +{ + internal static class DebugInterface + { + [UnmanagedFunctionPointer(CallingConvention.Winapi)] + private delegate Result GetDebugInterface(ref Guid guid, out IntPtr result); + + private static readonly GetDebugInterface getDebugInterface; + + static DebugInterface() + { + // https://blogs.msdn.microsoft.com/chuckw/2015/07/27/dxgi-debug-device/ +#if DESKTOP_APP + IntPtr moduleHandle = Kernel32.LoadLibraryEx("dxgidebug.dll", IntPtr.Zero, Kernel32.LoadLibraryFlags.LoadLibrarySearchSystem32); + if (moduleHandle != IntPtr.Zero) + { + IntPtr procedureHandle = Kernel32.GetProcAddress(moduleHandle, "DXGIGetDebugInterface"); + if (procedureHandle != IntPtr.Zero) + { + getDebugInterface = (GetDebugInterface)Marshal.GetDelegateForFunctionPointer(procedureHandle, typeof(GetDebugInterface)); + } + } +#else + getDebugInterface = null; +#endif + } + + public static bool TryCreateComPtr(out IntPtr comPtr) where T : class + { + comPtr = IntPtr.Zero; + if (getDebugInterface == null) + return false; + + var guid = typeof(T).GetTypeInfo().GUID; + var result = getDebugInterface(ref guid, out comPtr); + if (result.Failure) + return false; + + return comPtr != IntPtr.Zero; + } + + } +} \ No newline at end of file diff --git a/Source/SharpDX.DXGI/Factory4.cs b/Source/SharpDX.DXGI/Factory4.cs index 56449dd2f..ab8e981cd 100644 --- a/Source/SharpDX.DXGI/Factory4.cs +++ b/Source/SharpDX.DXGI/Factory4.cs @@ -33,6 +33,17 @@ public Factory4() : this(IntPtr.Zero) NativePointer = factoryPtr; } + /// + /// Initializes a new instance of class. + /// + /// True - to set the DXGI_CREATE_FACTORY_DEBUG flag. + public Factory4(bool debug = false) : this(IntPtr.Zero) + { + IntPtr factoryPtr; + DXGI.CreateDXGIFactory2(debug ? DXGI.CreateFactoryDebug : 0x00, Utilities.GetGuidFromType(typeof(Factory4)), out factoryPtr); + NativePointer = factoryPtr; + } + /// /// Gets the default warp adapter. /// @@ -43,6 +54,7 @@ public Adapter GetWarpAdapter() EnumWarpAdapter(Utilities.GetGuidFromType(typeof(Adapter)), out adapterPtr); return new Adapter(adapterPtr); } + /// /// Gets the adapter for the specified LUID. /// diff --git a/Source/SharpDX.Direct2D1/EffectInputDescription.cs b/Source/SharpDX.DXGI/Factory5.cs similarity index 75% rename from Source/SharpDX.Direct2D1/EffectInputDescription.cs rename to Source/SharpDX.DXGI/Factory5.cs index 6d7929365..2fcd06c32 100644 --- a/Source/SharpDX.Direct2D1/EffectInputDescription.cs +++ b/Source/SharpDX.DXGI/Factory5.cs @@ -17,28 +17,24 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + using System; -using SharpDX.DXGI; +using SharpDX.Mathematics.Interop; -namespace SharpDX.Direct2D1 +namespace SharpDX.DXGI { - public partial class EffectInputDescription + public partial class Factory5 { - private Effect effect; - /// - /// Gets or sets the effect. + /// Gets if tearing is allowed during present. /// - public Effect Effect + public unsafe bool PresentAllowTearing { - get - { - return effect; - } - set + get { - effect = value; - EffectPointer = effect == null ? IntPtr.Zero : effect.NativePointer; + RawBool allowTearing; + CheckFeatureSupport(Feature.PresentAllowTearing, new IntPtr(&allowTearing), sizeof(RawBool)); + return allowTearing; } } } diff --git a/Source/SharpDX.DXGI/IVirtualSurfaceImageSourceNative.cs b/Source/SharpDX.DXGI/IVirtualSurfaceImageSourceNative.cs index 21cf0e16d..350c05fc0 100644 --- a/Source/SharpDX.DXGI/IVirtualSurfaceImageSourceNative.cs +++ b/Source/SharpDX.DXGI/IVirtualSurfaceImageSourceNative.cs @@ -52,7 +52,7 @@ public event EventHandler UpdatesNeeded if (callback == null) { callback = new VirtualSurfaceUpdatesCallbackNativeCallback(this); - RegisterForUpdatesNeeded_(VirtualSurfaceUpdatesCallbackNativeShadow.ToIntPtr(callback)); + RegisterForUpdatesNeeded(callback); } updatesNeeded = (EventHandler)Delegate.Combine(updatesNeeded, value); @@ -72,7 +72,7 @@ private void OnUpdatesNeeded() updatesNeeded(this, EventArgs.Empty); } - private class VirtualSurfaceUpdatesCallbackNativeCallback : DisposeBase, IVirtualSurfaceUpdatesCallbackNative + private class VirtualSurfaceUpdatesCallbackNativeCallback : CallbackBase, IVirtualSurfaceUpdatesCallbackNative { IVirtualSurfaceImageSourceNative eventCallback; @@ -85,21 +85,6 @@ public void UpdatesNeeded() { eventCallback.OnUpdatesNeeded(); } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (Shadow != null) - { - Shadow.Dispose(); - Shadow = null; - } - eventCallback = null; - } - } - - public IDisposable Shadow { get; set; } } } } \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppGuid.cs b/Source/SharpDX.DXGI/InfoQueue.cs similarity index 67% rename from Source/Tools/SharpGen/CppModel/CppGuid.cs rename to Source/SharpDX.DXGI/InfoQueue.cs index 24601da5c..54b0d0b87 100644 --- a/Source/Tools/SharpGen/CppModel/CppGuid.cs +++ b/Source/SharpDX.DXGI/InfoQueue.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel +// Copyright (c) 2010-2018 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -18,21 +18,21 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using System.Xml.Serialization; -namespace SharpGen.CppModel +namespace SharpDX.DXGI { - /// - /// A C++ declared guid. - /// - [XmlType("guid")] - public class CppGuid : CppElement + public partial class InfoQueue { /// - /// Gets or sets the GUID. + /// If the DXGI debug layer is installed (e.g. on developer machines), creates the DXGI InfoQueue object. + /// Otherwise, returns null. /// - /// The GUID. - [XmlAttribute("guid")] - public Guid Guid { get; set; } + /// + /// Currently doesn't work for Windows Store (aka UWP) apps + /// + public static InfoQueue TryCreate() + { + return DebugInterface.TryCreateComPtr(out IntPtr comPtr) ? new InfoQueue(comPtr) : null; + } } } \ No newline at end of file diff --git a/Source/SharpDX.DXGI/Kernel32.cs b/Source/SharpDX.DXGI/Kernel32.cs new file mode 100644 index 000000000..909b1819c --- /dev/null +++ b/Source/SharpDX.DXGI/Kernel32.cs @@ -0,0 +1,34 @@ +#if DESKTOP_APP +using System; +using System.Runtime.InteropServices; + +namespace SharpDX.DXGI { + internal static class Kernel32 + { + [Flags] + public enum LoadLibraryFlags : uint + { + DontResolveDllReferences = 0x00000001, + LoadIgnoreCodeAuthzLevel = 0x00000010, + LoadLibraryAsDatafile = 0x00000002, + LoadLibraryAsDatafileExclusive = 0x00000040, + LoadLibraryAsImageResource = 0x00000020, + LoadLibrarySearchApplicationDir = 0x00000200, + LoadLibrarySearchDefaultDirs = 0x00001000, + LoadLibrarySearchDllLoadDir = 0x00000100, + LoadLibrarySearchSystem32 = 0x00000800, + LoadLibrarySearchUserDirs = 0x00000400, + LoadWithAlteredSearchPath = 0x00000008 + } + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags); + + [DllImport("kernel32.dll")] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport("kernel32.dll")] + public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + } +} +#endif \ No newline at end of file diff --git a/Source/SharpDX.DXGI/Mapping.xml b/Source/SharpDX.DXGI/Mapping.xml index f5cf2676d..6a55e49f3 100644 --- a/Source/SharpDX.DXGI/Mapping.xml +++ b/Source/SharpDX.DXGI/Mapping.xml @@ -29,6 +29,7 @@ + @@ -44,6 +45,7 @@ sharpdx-dxgi-ext dxgi dxgiformat + dxgidebug dxgitype dxgicommon dxgi1_2 @@ -131,8 +133,8 @@ - - + + @@ -158,6 +160,13 @@ + + + + + + + - + + + \ No newline at end of file diff --git a/Source/SharpDX.DXGI/OutputDuplication.cs b/Source/SharpDX.DXGI/OutputDuplication.cs index 5f9fafa8f..532135cd1 100644 --- a/Source/SharpDX.DXGI/OutputDuplication.cs +++ b/Source/SharpDX.DXGI/OutputDuplication.cs @@ -29,6 +29,26 @@ public DataRectangle MapDesktopSurface() MapDesktopSurface(out mappedRect); return new DataRectangle(mappedRect.PBits, mappedRect.Pitch); } + + /// + ///

Indicates that the application is ready to process the next desktop image.

+ ///
+ ///

The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.

For more information about the time-out interval, see Remarks.

+ ///

A reference to a memory location that receives the structure that describes timing and presentation statistics for a frame.

+ ///

A reference to a variable that receives the interface of the surface that contains the desktop bitmap.

+ /// + ///

When AcquireNextFrame returns successfully, the calling application can access the desktop image that AcquireNextFrame returns in the variable at ppDesktopResource. + /// If the caller specifies a zero time-out interval in the TimeoutInMilliseconds parameter, AcquireNextFrame verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an INFINITE time-out interval in the TimeoutInMilliseconds parameter, the time-out interval never elapses.

Note??You cannot cancel the wait that you specified in the TimeoutInMilliseconds parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-INFINITE time-out interval. After the time-out interval elapses, you can check for these other conditions and then call AcquireNextFrame again to wait for the next frame.?

AcquireNextFrame acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that AcquireNextFrame acquires might have only the desktop image updated, only the reference shape or position updated, or both.

+ ///
+ /// + /// hh404615 + /// HRESULT IDXGIOutputDuplication::AcquireNextFrame([In] unsigned int TimeoutInMilliseconds,[Out] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,[Out] IDXGIResource** ppDesktopResource) + /// IDXGIOutputDuplication::AcquireNextFrame + public void AcquireNextFrame(int timeoutInMilliseconds, out SharpDX.DXGI.OutputDuplicateFrameInformation frameInfoRef, out SharpDX.DXGI.Resource desktopResourceOut) + { + var result = this.TryAcquireNextFrame(timeoutInMilliseconds, out frameInfoRef, out desktopResourceOut); + result.CheckError(); + } #endif } } \ No newline at end of file diff --git a/Source/SharpDX.DXGI/SharpDX.DXGI.csproj b/Source/SharpDX.DXGI/SharpDX.DXGI.csproj index ddb7875e5..7d5ee5084 100644 --- a/Source/SharpDX.DXGI/SharpDX.DXGI.csproj +++ b/Source/SharpDX.DXGI/SharpDX.DXGI.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.DXGI SharpDX.DXGI - bin\$(Configuration)\$(TargetFramework)\SharpDX.DXGI.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.DXGI.xml SharpDX.DXGI SharpDX.DXGI Assembly providing DirectX - DXGI managed API. @@ -20,6 +20,4 @@ - - \ No newline at end of file diff --git a/Source/SharpDX.DXGI/SwapChain1.cs b/Source/SharpDX.DXGI/SwapChain1.cs index 8d4328cbc..2f0d74ecd 100644 --- a/Source/SharpDX.DXGI/SwapChain1.cs +++ b/Source/SharpDX.DXGI/SwapChain1.cs @@ -68,13 +68,13 @@ public SwapChain1(Factory2 factory, ComObject device, ref SwapChainDescription1 } /// - /// [This documentation is preliminary and is subject to change.] + /// Presents a frame on the display screen, internally using the Present1 method. /// /// An integer that specifies how to synchronize presentation of a frame with the vertical blank. For the bit-block transfer (bitblt) model, values are: 0 - The presentation occurs immediately, there is no synchronization. 1,2,3,4 - Synchronize presentation after the nth vertical blank. For the flip model, values are: 0 - Discard this frame if you submitted a more recent presentation. n > 0 - Synchronize presentation for at least n vertical blanks. For an example that shows how sync-interval values affect a flip presentation queue, see Remarks. If the update region straddles more than one output (each represented by ), Present1 performs the synchronization to the output that contains the largest subrectangle of the target window's client area. /// An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants. /// A reference to a structure that describes updated rectangles and scroll information of the frame to present. /// Possible return values include: , , , , or E_OUTOFMEMORY. - /// + /// /// An application can use Present1 to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager (DWM). The DWM can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An application must confine its modifications to only the dirty regions that it passes to Present1, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.For flip presentation model swap chains that you create with the value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.Flip presentation model queueSuppose the following frames with sync-interval values are queued from oldest (A) to newest (E) before you call Present1.A: 3, B: 0, C: 0, D: 1, E: 0When you call Present1, the runtime shows frame A for 3 vertical blank intervals, then frame D for 1 vertical blank interval, and then frame E until you submit a new presentation. The runtime discards frames C and D. /// /// @@ -99,4 +99,4 @@ public unsafe Result Present(int syncInterval, PresentFlags presentFlags, Presen } } } -} \ No newline at end of file +} diff --git a/Source/SharpDX.Desktop/SharpDX.Desktop.csproj b/Source/SharpDX.Desktop/SharpDX.Desktop.csproj index 52e185f2b..b7c741452 100644 --- a/Source/SharpDX.Desktop/SharpDX.Desktop.csproj +++ b/Source/SharpDX.Desktop/SharpDX.Desktop.csproj @@ -1,10 +1,10 @@ - - + + net40;net45 SharpDX.Desktop SharpDX.Desktop - bin\$(Configuration)\$(TargetFramework)\SharpDX.Desktop.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.Desktop.xml SharpDX.Desktop SharpDX.Desktop Assembly providing APIs related to Desktop platform. @@ -30,5 +30,5 @@ - + \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/BitmapProperties1.cs b/Source/SharpDX.Direct2D1/BitmapProperties1.cs index 8a43d0819..cbd49eb47 100644 --- a/Source/SharpDX.Direct2D1/BitmapProperties1.cs +++ b/Source/SharpDX.Direct2D1/BitmapProperties1.cs @@ -77,24 +77,5 @@ public BitmapProperties1(PixelFormat pixelFormat, float dpiX, float dpiY, Bitmap BitmapOptions = bitmapOptions; ColorContext = colorContext; } - - /// - /// Gets or sets the color context. - /// - /// - /// The color context. - /// - public ColorContext ColorContext - { - get - { - return colorContext; - } - set - { - colorContext = value; - ColorContextPointer = colorContext == null ? IntPtr.Zero : colorContext.NativePointer; - } - } } } \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/CommandList.cs b/Source/SharpDX.Direct2D1/CommandList.cs index 5284f33ea..e869118ce 100644 --- a/Source/SharpDX.Direct2D1/CommandList.cs +++ b/Source/SharpDX.Direct2D1/CommandList.cs @@ -31,23 +31,5 @@ public CommandList(DeviceContext deviceContext) : base(IntPtr.Zero) { deviceContext.CreateCommandList(this); } - - /// - /// Streams the contents of the command list to the specified command sink. - /// - /// The sink into which the command list will be streamed. - public void Stream(CommandSink sink) - { - Stream_(CommandSinkShadow.ToIntPtr(sink)); - } - - /// - /// Streams the contents of the command list to the specified command sink. - /// - /// The sink into which the command list will be streamed. - public void Stream(CommandSink1 sink) - { - Stream_(CommandSink1Shadow.ToIntPtr(sink)); - } } } \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/CommandSinkShadow.cs b/Source/SharpDX.Direct2D1/CommandSinkShadow.cs index 261cc2add..eb26b7484 100644 --- a/Source/SharpDX.Direct2D1/CommandSinkShadow.cs +++ b/Source/SharpDX.Direct2D1/CommandSinkShadow.cs @@ -537,7 +537,9 @@ private unsafe static int PushLayerImpl(IntPtr thisPtr, IntPtr layerParameters1, { var shadow = ToShadow(thisPtr); var callback = (CommandSink)shadow.Callback; - callback.PushLayer(ref *(LayerParameters1*)layerParameters1, layer == IntPtr.Zero ? null : new Layer(layer)); + var layerParameters = new LayerParameters1(); + layerParameters.__MarshalFrom(ref *(LayerParameters1.__Native*)layerParameters1); + callback.PushLayer(ref layerParameters, layer == IntPtr.Zero ? null : new Layer(layer)); } catch (Exception exception) { diff --git a/Source/SharpDX.Direct2D1/DeviceContext5.cs b/Source/SharpDX.Direct2D1/DeviceContext5.cs index a0f265075..3d536e076 100644 --- a/Source/SharpDX.Direct2D1/DeviceContext5.cs +++ b/Source/SharpDX.Direct2D1/DeviceContext5.cs @@ -18,6 +18,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using SharpDX.Win32; using System; namespace SharpDX.Direct2D1 @@ -38,5 +39,18 @@ public DeviceContext5(Device5 device, DeviceContextOptions options) { device.CreateDeviceContext(options, this); } + + /// + /// Creates an Svg document from an xml string + /// + /// + /// + /// Svg document model + public SvgDocument CreateSvgDocument(IStream stream, SharpDX.Size2F viewportSize) + { + SvgDocument result; + CreateSvgDocument(stream, viewportSize, out result); + return result; + } } } \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator.cs b/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator.cs new file mode 100644 index 000000000..b571f2d39 --- /dev/null +++ b/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SharpDX.DirectWrite +{ + public partial class ColorGlyphRunEnumerator + { + public unsafe ColorGlyphRun CurrentRun + { + get + { + GetCurrentRun(out IntPtr ptr); + var run = new ColorGlyphRun(); + run.__MarshalFrom(ref *((ColorGlyphRun.__Native*)ptr)); + return run; + } + } + } +} diff --git a/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator1.cs b/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator1.cs new file mode 100644 index 000000000..5ad09ec64 --- /dev/null +++ b/Source/SharpDX.Direct2D1/DirectWrite/ColorGlyphRunEnumerator1.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SharpDX.DirectWrite +{ + public partial class ColorGlyphRunEnumerator1 + { + public new unsafe ColorGlyphRun1 CurrentRun + { + get + { + GetCurrentRun(out IntPtr ptr); + var run = new ColorGlyphRun1(); + run.__MarshalFrom(ref *((ColorGlyphRun1.__Native*)ptr)); + return run; + } + } + } +} diff --git a/Source/SharpDX.Direct2D1/DirectWrite/Factory.cs b/Source/SharpDX.Direct2D1/DirectWrite/Factory.cs index 3e9ce6a16..1a692008e 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/Factory.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/Factory.cs @@ -75,7 +75,8 @@ public Factory(FactoryType factoryType) /// HRESULT IDWriteFactory::RegisterFontCollectionLoader([None] IDWriteFontCollectionLoader* fontCollectionLoader) public void RegisterFontCollectionLoader(FontCollectionLoader fontCollectionLoader) { - this.RegisterFontCollectionLoader_(FontCollectionLoaderShadow.ToIntPtr(this, fontCollectionLoader)); + FontCollectionLoaderShadow.SetFactory(fontCollectionLoader, this); + this.RegisterFontCollectionLoader_(fontCollectionLoader); _fontCollectionLoaderCallbacks.Add(fontCollectionLoader); } @@ -88,7 +89,7 @@ public void RegisterFontCollectionLoader(FontCollectionLoader fontCollectionLoad public void UnregisterFontCollectionLoader(FontCollectionLoader fontCollectionLoader) { if (!_fontCollectionLoaderCallbacks.Contains(fontCollectionLoader)) throw new ArgumentException("This font collection loader is not registered", "fontCollectionLoader"); - UnregisterFontCollectionLoader_(FontCollectionLoaderShadow.ToIntPtr(fontCollectionLoader)); + UnregisterFontCollectionLoader_(fontCollectionLoader); _fontCollectionLoaderCallbacks.Remove(fontCollectionLoader); } @@ -104,7 +105,7 @@ public void UnregisterFontCollectionLoader(FontCollectionLoader fontCollectionLo /// HRESULT IDWriteFactory::RegisterFontFileLoader([None] IDWriteFontFileLoader* fontFileLoader) public void RegisterFontFileLoader(FontFileLoader fontFileLoader) { - this.RegisterFontFileLoader_(FontFileLoaderShadow.ToIntPtr(fontFileLoader)); + this.RegisterFontFileLoader_(fontFileLoader); _fontFileLoaderCallbacks.Add(fontFileLoader); } @@ -121,7 +122,7 @@ public void UnregisterFontFileLoader(FontFileLoader fontFileLoader) { if (!_fontFileLoaderCallbacks.Contains(fontFileLoader)) throw new ArgumentException("This font file loader is not registered", "fontFileLoader"); - UnregisterFontFileLoader_(FontFileLoaderShadow.ToIntPtr(fontFileLoader)); + UnregisterFontFileLoader_(fontFileLoader); _fontFileLoaderCallbacks.Remove(fontFileLoader); } } diff --git a/Source/SharpDX.Direct2D1/DirectWrite/Factory2.cs b/Source/SharpDX.Direct2D1/DirectWrite/Factory2.cs new file mode 100644 index 000000000..3b743bc6a --- /dev/null +++ b/Source/SharpDX.Direct2D1/DirectWrite/Factory2.cs @@ -0,0 +1,84 @@ +// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; + +namespace SharpDX.DirectWrite +{ + /// + ///

Creates a rendering parameters object with the specified properties.

+ ///
+ /// + /// Hh780402 + /// IDWriteFactory2 + /// IDWriteFactory2 + public partial class Factory2 + { + + /// + ///

This method is called on a glyph run to translate it in to multiple color glyph runs.

+ ///
+ ///

The horizontal baseline origin of the original glyph run.

+ ///

The vertical baseline origin of the original glyph run.

+ ///

Original glyph run containing monochrome glyph IDs.

+ ///

Optional glyph run description.

+ ///

Measuring mode used to compute glyph positions if the run contains color glyphs.

+ ///

World transform multiplied by any DPI scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not DWRITE_MEASURING_MODE_NATURAL. If this parameter is null, and identity transform is assumed.

+ ///

Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by IDWriteFontFace2::GetColorPaletteCount.

+ ///

If the original glyph run contains color glyphs, this parameter receives a reference to an interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns DWRITE_E_NOCOLOR and the output reference is null.

+ ///

If this method succeeds, it returns . Otherwise, it returns an error code.

+ /// + ///

If the code calls this method with a glyph run that contains no color information, the method returns DWRITE_E_NOCOLOR to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls DrawGlyphRun with each of the returned glyph runs and foreground colors.

+ ///
+ /// dn280451 + /// HRESULT IDWriteFactory2::TranslateColorGlyphRun([In] float baselineOriginX,[In] float baselineOriginY,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] const DWRITE_MATRIX* worldToDeviceTransform,[In] unsigned int colorPaletteIndex,[Out] IDWriteColorGlyphRunEnumerator** colorLayers) + /// IDWriteFactory2::TranslateColorGlyphRun + public void TranslateColorGlyphRun(System.Single baselineOriginX, System.Single baselineOriginY, SharpDX.DirectWrite.GlyphRun glyphRun, SharpDX.DirectWrite.GlyphRunDescription glyphRunDescription, SharpDX.Direct2D1.MeasuringMode measuringMode, SharpDX.Mathematics.Interop.RawMatrix3x2? worldToDeviceTransform, System.Int32 colorPaletteIndex, out SharpDX.DirectWrite.ColorGlyphRunEnumerator colorLayers) + { + var result = TryTranslateColorGlyphRun(baselineOriginX, baselineOriginY, glyphRun, glyphRunDescription, measuringMode, worldToDeviceTransform, colorPaletteIndex, out colorLayers); + result.CheckError(); + } + + + /// + ///

This method is called on a glyph run to translate it in to multiple color glyph runs.

+ ///
+ ///

The horizontal baseline origin of the original glyph run.

+ ///

The vertical baseline origin of the original glyph run.

+ ///

Original glyph run containing monochrome glyph IDs.

+ ///

Optional glyph run description.

+ ///

Measuring mode used to compute glyph positions if the run contains color glyphs.

+ ///

World transform multiplied by any DPI scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not DWRITE_MEASURING_MODE_NATURAL. If this parameter is null, and identity transform is assumed.

+ ///

Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by IDWriteFontFace2::GetColorPaletteCount.

+ ///

If the original glyph run contains color glyphs, this parameter receives a reference to an interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns DWRITE_E_NOCOLOR and the output reference is null.

+ /// + ///

If the code calls this method with a glyph run that contains no color information, the method returns DWRITE_E_NOCOLOR to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls DrawGlyphRun with each of the returned glyph runs and foreground colors.

+ ///
+ /// dn280451 + /// HRESULT IDWriteFactory2::TranslateColorGlyphRun([In] float baselineOriginX,[In] float baselineOriginY,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] const DWRITE_MATRIX* worldToDeviceTransform,[In] unsigned int colorPaletteIndex,[Out] IDWriteColorGlyphRunEnumerator** colorLayers) + /// IDWriteFactory2::TranslateColorGlyphRun + public SharpDX.DirectWrite.ColorGlyphRunEnumerator TranslateColorGlyphRun(System.Single baselineOriginX, System.Single baselineOriginY, SharpDX.DirectWrite.GlyphRun glyphRun, SharpDX.DirectWrite.GlyphRunDescription glyphRunDescription, SharpDX.Direct2D1.MeasuringMode measuringMode, SharpDX.Mathematics.Interop.RawMatrix3x2? worldToDeviceTransform, System.Int32 colorPaletteIndex) + { + SharpDX.DirectWrite.ColorGlyphRunEnumerator colorLayers; + TranslateColorGlyphRun(baselineOriginX, baselineOriginY, glyphRun, glyphRunDescription, measuringMode, worldToDeviceTransform, colorPaletteIndex, out colorLayers); + return colorLayers; + } + } +} \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/DirectWrite/FontCollection.cs b/Source/SharpDX.Direct2D1/DirectWrite/FontCollection.cs index ce8dcc59d..2895fa8d1 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/FontCollection.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/FontCollection.cs @@ -32,7 +32,7 @@ public partial class FontCollection /// HRESULT IDWriteFactory::CreateCustomFontCollection([None] IDWriteFontCollectionLoader* collectionLoader,[In, Buffer] const void* collectionKey,[None] int collectionKeySize,[Out] IDWriteFontCollection** fontCollection) public FontCollection(Factory factory, FontCollectionLoader collectionLoader, DataPointer collectionKey) { - factory.CreateCustomFontCollection_(FontCollectionLoaderShadow.ToIntPtr(collectionLoader), collectionKey.Pointer, collectionKey.Size, this); + factory.CreateCustomFontCollection(collectionLoader, collectionKey.Pointer, collectionKey.Size, this); } } } \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/DirectWrite/FontCollectionLoaderShadow.cs b/Source/SharpDX.Direct2D1/DirectWrite/FontCollectionLoaderShadow.cs index a193d2fed..fd19cdd7c 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/FontCollectionLoaderShadow.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/FontCollectionLoaderShadow.cs @@ -32,17 +32,16 @@ internal class FontCollectionLoaderShadow : SharpDX.ComObjectShadow private Factory _factory; - public static IntPtr ToIntPtr(FontCollectionLoader fontFileEnumerator) + public static IntPtr ToIntPtr(FontCollectionLoader loader) { - return ToCallbackPtr(fontFileEnumerator); + return ToCallbackPtr(loader); } - - public static IntPtr ToIntPtr(Factory factory, FontCollectionLoader fontFileEnumerator) + + public static void SetFactory(FontCollectionLoader loader, Factory factory) { - var shadowPtr = ToIntPtr(fontFileEnumerator); + var shadowPtr = ToIntPtr(loader); var shadow = ToShadow(shadowPtr); shadow._factory = factory; - return shadowPtr; } private class FontCollectionLoaderVtbl : ComObjectVtbl diff --git a/Source/SharpDX.Direct2D1/DirectWrite/FontFace.cs b/Source/SharpDX.Direct2D1/DirectWrite/FontFace.cs index a0ec1984b..a31c1c19c 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/FontFace.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/FontFace.cs @@ -142,27 +142,5 @@ public bool TryGetFontTable(int openTypeTableTag, out DataPointer tableData, out return exists; } } - - /// - /// Computes the outline of a run of glyphs by calling back to the outline sink interface. - /// - /// The logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch. - /// An array of glyph indices. The glyphs are in logical order and the advance direction depends on the isRightToLeft parameter. The array must be allocated and be able to contain the number of elements specified by glyphCount. - /// An optional array of glyph advances in DIPs. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. glyphAdvances contains the number of elements specified by glyphIndices.Length. - /// An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. glyphOffsets contains the number of elements specified by glyphIndices.Length. - /// If TRUE, the ascender of the glyph runs alongside the baseline. If FALSE, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have isSideways set to FALSE. A client can render a vertical run by setting isSideways to TRUE and rotating the resulting geometry 90 degrees to the right using a transform. The isSideways and isRightToLeft parameters cannot both be true. - /// The visual order of the glyphs. If this parameter is FALSE, then glyph advances are from left to right. If TRUE, the advance direction is right to left. By default, the advance direction is left to right. - /// A reference to the interface that is called back to perform outline drawing operations. - /// If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - /// HRESULT IDWriteFontFace::GetGlyphRunOutline([None] float emSize,[In, Buffer] const short* glyphIndices,[In, Buffer, Optional] const float* glyphAdvances,[In, Buffer, Optional] const DWRITE_GLYPH_OFFSET* glyphOffsets,[None] int glyphCount,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IDWriteGeometrySink* geometrySink) - public void GetGlyphRunOutline(float emSize, short[] glyphIndices, float[] glyphAdvances, GlyphOffset[] glyphOffsets, bool isSideways, bool isRightToLeft, SimplifiedGeometrySink geometrySink) - { - IntPtr ptr; - if ( geometrySink is GeometrySink) - ptr = GeometrySinkShadow.ToIntPtr((GeometrySink)geometrySink); - else - ptr = SimplifiedGeometrySinkShadow.ToIntPtr(geometrySink); - GetGlyphRunOutline_(emSize, glyphIndices, glyphAdvances, glyphOffsets, glyphIndices.Length, isSideways, isRightToLeft, ptr); - } } } \ No newline at end of file diff --git a/Source/SharpDX.Direct2D1/DirectWrite/FontFallback.cs b/Source/SharpDX.Direct2D1/DirectWrite/FontFallback.cs deleted file mode 100644 index 36404d17c..000000000 --- a/Source/SharpDX.Direct2D1/DirectWrite/FontFallback.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2010-2013 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpDX.DirectWrite -{ - public partial class FontFallback - { - /// - ///

Determines an appropriate font to use to render the beginning range of text.

- ///
- ///

The text source implementation holds the text and locale.

- ///

Starting position to analyze.

- ///

Length of the text to analyze.

- ///

Default font collection to use.

- ///

Family name of the base font. If you pass null, no matching will be done against the family.

- ///

The desired weight.

- ///

The desired style.

- ///

The desired stretch.

- ///

Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.

- ///

The font that should be used to render the first mappedLength characters of the text. If it returns null, that means that no font can render the text, and mappedLength is the number of characters to skip (rendered with a missing glyph).

- ///

Scale factor to multiply the em size of the returned font by.

- public void MapCharacters( - TextAnalysisSource analysisSource, - int textPosition, - int textLength, - FontCollection baseFontCollection, - string baseFamilyName, - FontWeight baseWeight, - FontStyle baseStyle, - FontStretch baseStretch, - out int mappedLength, - out Font mappedFont, - out float scale - ) - { - MapCharacters_( - TextAnalysisSourceShadow.ToIntPtr(analysisSource), - textPosition, - textLength, - baseFontCollection, - baseFamilyName, - baseWeight, - baseStyle, - baseStretch, - out mappedLength, - out mappedFont, - out scale - ); - } - } -} diff --git a/Source/SharpDX.Direct2D1/DirectWrite/FontFile.cs b/Source/SharpDX.Direct2D1/DirectWrite/FontFile.cs index 57f22b13d..6fdbfad36 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/FontFile.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/FontFile.cs @@ -59,7 +59,7 @@ public FontFile(Factory factory, string filePath, long? lastWriteTime) /// HRESULT IDWriteFactory::CreateCustomFontFileReference([In, Buffer] const void* fontFileReferenceKey,[None] int fontFileReferenceKeySize,[None] IDWriteFontFileLoader* fontFileLoader,[Out] IDWriteFontFile** fontFile) public FontFile(Factory factory, IntPtr fontFileReferenceKey, int fontFileReferenceKeySize, FontFileLoader fontFileLoader) { - factory.CreateCustomFontFileReference_(fontFileReferenceKey, fontFileReferenceKeySize, FontFileLoaderShadow.ToIntPtr(fontFileLoader), this); + factory.CreateCustomFontFileReference(fontFileReferenceKey, fontFileReferenceKeySize, fontFileLoader, this); } /// diff --git a/Source/SharpDX.Direct2D1/DirectWrite/InlineObjectNative.cs b/Source/SharpDX.Direct2D1/DirectWrite/InlineObjectNative.cs index b43cfd5f4..c203180c2 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/InlineObjectNative.cs +++ b/Source/SharpDX.Direct2D1/DirectWrite/InlineObjectNative.cs @@ -42,7 +42,7 @@ public void Draw(object clientDrawingContext, TextRenderer renderer, float origi IntPtr clientDrawingEffectPtr = Utilities.GetIUnknownForObject(clientDrawingEffect); try { - this.Draw__(GCHandle.ToIntPtr(handle), TextRendererShadow.ToIntPtr(renderer), originX, originY, isSideways, isRightToLeft, + this.Draw_(GCHandle.ToIntPtr(handle), renderer, originX, originY, isSideways, isRightToLeft, clientDrawingEffectPtr); } finally { diff --git a/Source/SharpDX.Direct2D1/DirectWrite/Mapping.xml b/Source/SharpDX.Direct2D1/DirectWrite/Mapping.xml index f6fbebc7a..096b4884a 100644 --- a/Source/SharpDX.Direct2D1/DirectWrite/Mapping.xml +++ b/Source/SharpDX.Direct2D1/DirectWrite/Mapping.xml @@ -27,10 +27,10 @@ SharpDX.DirectWrite SharpDX.Direct2D1 - - - - + + + + @@ -43,10 +43,10 @@ - dwrite - dwrite_1 - dwrite_2 - dwrite_3 + DWrite_1 + DWrite + DWrite_2 + DWrite_3 + - - + - - - - @@ -275,14 +277,9 @@ - - - - - @@ -411,6 +408,7 @@ + @@ -422,7 +420,7 @@ - + @@ -494,8 +492,12 @@ + + + + - @@ -188,6 +189,7 @@ + @@ -207,6 +209,7 @@ + @@ -219,12 +222,12 @@ - + - + @@ -258,9 +261,8 @@ - - + @@ -273,11 +275,11 @@ - + - + @@ -288,7 +290,6 @@ - diff --git a/Source/SharpDX.Direct2D1/WIC/PixelFormatInfo.cs b/Source/SharpDX.Direct2D1/WIC/PixelFormatInfo.cs index b26b2f84c..bcb1d5c2e 100644 --- a/Source/SharpDX.Direct2D1/WIC/PixelFormatInfo.cs +++ b/Source/SharpDX.Direct2D1/WIC/PixelFormatInfo.cs @@ -35,13 +35,12 @@ public byte[] GetChannelMask(int channelIndex) unsafe { int actualcount = 0; - GetChannelMask(channelIndex, actualcount, IntPtr.Zero, out actualcount); + GetChannelMask(channelIndex, actualcount, null, out actualcount); if (actualcount == 0) return new byte[0]; var temp = new byte[actualcount]; - fixed(void* pTemp = temp) - GetChannelMask(channelIndex, actualcount, (IntPtr)pTemp, out actualcount); + GetChannelMask(channelIndex, actualcount, temp, out actualcount); return temp; } } diff --git a/Source/SharpDX.Direct2D1/WIC/WICStream.cs b/Source/SharpDX.Direct2D1/WIC/WICStream.cs index 45dfa5ba7..0bf781009 100644 --- a/Source/SharpDX.Direct2D1/WIC/WICStream.cs +++ b/Source/SharpDX.Direct2D1/WIC/WICStream.cs @@ -58,8 +58,7 @@ public WICStream(ImagingFactory factory, Stream stream) { factory.CreateStream(this); streamProxy = new ComStreamProxy(stream); - var istreamPtr = ComStreamShadow.ToIntPtr(streamProxy); - InitializeFromIStream_(istreamPtr); + InitializeFromIStream(streamProxy); } /// diff --git a/Source/SharpDX.Direct2D1/WindowRenderTarget.cs b/Source/SharpDX.Direct2D1/WindowRenderTarget.cs index bf017249d..abb6e04ab 100644 --- a/Source/SharpDX.Direct2D1/WindowRenderTarget.cs +++ b/Source/SharpDX.Direct2D1/WindowRenderTarget.cs @@ -36,7 +36,7 @@ public partial class WindowRenderTarget public WindowRenderTarget(Factory factory, RenderTargetProperties renderTargetProperties, HwndRenderTargetProperties hwndProperties) : base(IntPtr.Zero) { - factory.CreateHwndRenderTarget(ref renderTargetProperties, hwndProperties, this); + factory.CreateHwndRenderTarget(ref renderTargetProperties, ref hwndProperties, this); } } } diff --git a/Source/SharpDX.Direct3D10/SharpDX.Direct3D10.csproj b/Source/SharpDX.Direct3D10/SharpDX.Direct3D10.csproj index 6b207e885..45a3f57b7 100644 --- a/Source/SharpDX.Direct3D10/SharpDX.Direct3D10.csproj +++ b/Source/SharpDX.Direct3D10/SharpDX.Direct3D10.csproj @@ -1,14 +1,15 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.Direct3D10 SharpDX.Direct3D10 - bin\$(Configuration)\$(TargetFramework)\SharpDX.Direct3D10.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.Direct3D10.xml SharpDX.Direct3D10 SharpDX.Direct3D10 Assembly providing DirectX - Direct3D10 and Direct3D10.1 managed API. $(PackageTags) Direct3D10 D3D10 + true @@ -22,6 +23,4 @@ - - \ No newline at end of file diff --git a/Source/SharpDX.Direct3D11.Effects/Mapping.xml b/Source/SharpDX.Direct3D11.Effects/Mapping.xml index f60c5f601..37e3fa0b2 100644 --- a/Source/SharpDX.Direct3D11.Effects/Mapping.xml +++ b/Source/SharpDX.Direct3D11.Effects/Mapping.xml @@ -95,9 +95,9 @@ - + - + @@ -201,6 +223,12 @@ + + + + + + @@ -321,8 +352,22 @@ - - + + + + + + + + + + + + + + + + @@ -873,6 +878,7 @@ + @@ -898,6 +904,7 @@ + @@ -997,9 +1004,11 @@ - + + + @@ -1021,10 +1030,18 @@ - - - - + + + + + + + + + + + + diff --git a/Source/SharpDX.MediaFoundation/Mapping.xml b/Source/SharpDX.MediaFoundation/Mapping.xml index 8c2c70b4c..c4f577be0 100644 --- a/Source/SharpDX.MediaFoundation/Mapping.xml +++ b/Source/SharpDX.MediaFoundation/Mapping.xml @@ -23,6 +23,4 @@ sharpdx-core sharpdx-mediafoundation - - Mapping-core.xml \ No newline at end of file diff --git a/Source/SharpDX.MediaFoundation/MediaAttributes.cs b/Source/SharpDX.MediaFoundation/MediaAttributes.cs index fff3e9b8f..12e1e2276 100644 --- a/Source/SharpDX.MediaFoundation/MediaAttributes.cs +++ b/Source/SharpDX.MediaFoundation/MediaAttributes.cs @@ -275,9 +275,9 @@ public unsafe void Set(System.Guid guidKey, T value) return; } - if (typeof(T) == typeof(ComObject) || typeof(T).GetTypeInfo().IsSubclassOf(typeof(ComObject))) + if (typeof(T) == typeof(ComObject) || typeof(IUnknown).GetTypeInfo().IsAssignableFrom(typeof(T).GetTypeInfo())) { - Set(guidKey, ((ComObject)(object)value)); + Set(guidKey, ((IUnknown)(object)value)); return; } diff --git a/Source/SharpDX.MediaFoundation/MediaEngineEx.cs b/Source/SharpDX.MediaFoundation/MediaEngineEx.cs index 5062fd0c3..47c92a279 100644 --- a/Source/SharpDX.MediaFoundation/MediaEngineEx.cs +++ b/Source/SharpDX.MediaFoundation/MediaEngineEx.cs @@ -38,8 +38,7 @@ public void SetSourceFromByteStream(ByteStream byteStream, string url) var bstrUrl = Utilities.StringToHGlobalUni(url); try { - //var urlBstr = Marshal.StringToBSTR(url); - SetSourceFromByteStream_(byteStream.NativePointer, bstrUrl); + SetSourceFromByteStream(byteStream, bstrUrl); } finally { Marshal.FreeHGlobal(bstrUrl); diff --git a/Source/SharpDX.MediaFoundation/MediaEventGenerator.cs b/Source/SharpDX.MediaFoundation/MediaEventGenerator.cs index cd25108b7..9180b06a4 100644 --- a/Source/SharpDX.MediaFoundation/MediaEventGenerator.cs +++ b/Source/SharpDX.MediaFoundation/MediaEventGenerator.cs @@ -56,7 +56,7 @@ public MediaEvent GetEvent(bool isBlocking) /// IMFMediaEventGenerator::BeginGetEvent public void BeginGetEvent(IAsyncCallback callback, object stateObject) { - BeginGetEvent_(AsyncCallbackShadow.ToIntPtr(callback), stateObject == null ? IntPtr.Zero : Marshal.GetIUnknownForObject(stateObject)); + BeginGetEvent(callback, stateObject == null ? IntPtr.Zero : Marshal.GetIUnknownForObject(stateObject)); } } } \ No newline at end of file diff --git a/Source/SharpDX.MediaFoundation/MediaFactory.cs b/Source/SharpDX.MediaFoundation/MediaFactory.cs index 15531631e..90a34c0c6 100644 --- a/Source/SharpDX.MediaFoundation/MediaFactory.cs +++ b/Source/SharpDX.MediaFoundation/MediaFactory.cs @@ -90,25 +90,6 @@ public static Activate[] FindTransform(Guid guidCategory, TransformEnumFlag enum return activates; } - /// - ///

Applies to: desktop apps only

Creates an activation object for the sample grabber media sink.

- ///
- ///

Pointer to the interface, defining the media type for the sample grabber's input stream.

- ///

Pointer to the interface of a callback object. The caller must implement this interface.

- ///

Receives a reference to the interface. Use this interface to complete the creation of the sample grabber. The caller must release the interface.

- ///

If this function succeeds, it returns . Otherwise, it returns an error code.

- /// - ///

To create the sample grabber sink, call on the reference received in the ppIActivate parameter.

Before calling ActivateObject, you can configure the sample grabber by setting any of the following attributes on the ppIActivate reference:

- ///
- /// - /// ms702068 - /// HRESULT MFCreateSampleGrabberSinkActivate([In] IMFMediaType* pIMFMediaType,[In] IMFSampleGrabberSinkCallback* pIMFSampleGrabberSinkCallback,[Out] IMFActivate** ppIActivate) - /// MFCreateSampleGrabberSinkActivate - public static void CreateSampleGrabberSinkActivate(MediaType mediaType, SampleGrabberSinkCallback callback, out Activate activate) - { - MediaFactory.CreateSampleGrabberSinkActivate(mediaType, SampleGrabberSinkCallbackShadow.ToIntPtr(callback), out activate); - } - /// ///

Applies to: desktop apps | Metro style apps

Copies an image or image plane from one buffer to another.

///
diff --git a/Source/SharpDX.MediaFoundation/SharpDX.MediaFoundation.csproj b/Source/SharpDX.MediaFoundation/SharpDX.MediaFoundation.csproj index c7ca5943b..d700822d2 100644 --- a/Source/SharpDX.MediaFoundation/SharpDX.MediaFoundation.csproj +++ b/Source/SharpDX.MediaFoundation/SharpDX.MediaFoundation.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.MediaFoundation SharpDX.MediaFoundation - bin\$(Configuration)\$(TargetFramework)\SharpDX.MediaFoundation.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.MediaFoundation.xml SharpDX.MediaFoundation SharpDX.MediaFoundation Assembly providing DirectX - MediaFoundation managed API. @@ -21,9 +21,7 @@ - - + + - - \ No newline at end of file diff --git a/Source/SharpDX.MediaFoundation/SinkWriter.cs b/Source/SharpDX.MediaFoundation/SinkWriter.cs new file mode 100644 index 000000000..1bd5a17c1 --- /dev/null +++ b/Source/SharpDX.MediaFoundation/SinkWriter.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SharpDX.MediaFoundation +{ + public partial class SinkWriter + { + /// + ///

Gets statistics about the performance of the sink writer.

+ ///
+ ///

The zero-based index of a stream to query, or to query the media sink itself.

+ ///

A reference to an structure. Before calling the method, set the cb member to the size of the structure in bytes. The method fills the structure with statistics from the sink writer.

+ ///

This method can return one of these values.

Return codeDescription

Success.

Invalid stream number.

?

+ /// + ///

This interface is available on Windows?Vista if Platform Update Supplement for Windows?Vista is installed.

+ ///
+ /// + /// dd374650 + /// HRESULT IMFSinkWriter::GetStatistics([In] unsigned int dwStreamIndex,[Out] MF_SINK_WRITER_STATISTICS* pStats) + /// IMFSinkWriter::GetStatistics + public void GetStatistics(int dwStreamIndex, out SharpDX.MediaFoundation.SinkWriterStatistics statsRef) + { + unsafe + { + statsRef = new SharpDX.MediaFoundation.SinkWriterStatistics(); + statsRef.Cb = sizeof(SharpDX.MediaFoundation.SinkWriterStatistics); + fixed (void* statsRefPtr = &statsRef) + { + GetStatistics_(dwStreamIndex, new IntPtr(statsRefPtr)); + } + } + } + } +} diff --git a/Source/SharpDX.MediaFoundation/SourceReader.cs b/Source/SharpDX.MediaFoundation/SourceReader.cs index 475c2340b..17f9b8885 100644 --- a/Source/SharpDX.MediaFoundation/SourceReader.cs +++ b/Source/SharpDX.MediaFoundation/SourceReader.cs @@ -62,7 +62,7 @@ public SourceReader(string url, MediaAttributes attributes = null) public SourceReader(byte[] buffer, MediaAttributes attributes = null) { byteStream = new ByteStream(new MemoryStream(buffer)); - MediaFactory.CreateSourceReaderFromByteStream(byteStream.NativePointer, attributes, this); + MediaFactory.CreateSourceReaderFromByteStream(byteStream, attributes, this); } /// @@ -82,7 +82,7 @@ public SourceReader(Stream buffer, MediaAttributes attributes = null) int capabilities = byteStream.Capabilities; - MediaFactory.CreateSourceReaderFromByteStream(byteStream.NativePointer, attributes, this); + MediaFactory.CreateSourceReaderFromByteStream(byteStream, attributes, this); } /// @@ -115,7 +115,7 @@ public SourceReader(MediaSource source, MediaAttributes attributes = null) public SourceReader(IRandomAccessStream buffer, MediaAttributes attributes = null) { byteStream = new ByteStream(buffer); - MediaFactory.CreateSourceReaderFromByteStream(byteStream.NativePointer, attributes, this); + MediaFactory.CreateSourceReaderFromByteStream(byteStream, attributes, this); } #endif @@ -134,7 +134,7 @@ public SourceReader(IRandomAccessStream buffer, MediaAttributes attributes = nul public SourceReader(SharpDX.Win32.ComStream comStream, MediaAttributes attributes = null) { byteStream = new ByteStream(comStream); - MediaFactory.CreateSourceReaderFromByteStream(byteStream.NativePointer, attributes, this); + MediaFactory.CreateSourceReaderFromByteStream(byteStream, attributes, this); } #endif diff --git a/Source/SharpDX.MediaFoundation/SourceResolver.cs b/Source/SharpDX.MediaFoundation/SourceResolver.cs index 2533ad2f8..8dbfc6d62 100644 --- a/Source/SharpDX.MediaFoundation/SourceResolver.cs +++ b/Source/SharpDX.MediaFoundation/SourceResolver.cs @@ -45,7 +45,7 @@ public SourceResolver() /// ms702279 /// HRESULT IMFSourceResolver::CreateObjectFromURL([In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromURL - public SharpDX.ComObject CreateObjectFromURL(string url, + public SharpDX.IUnknown CreateObjectFromURL(string url, SourceResolverFlags flags) { SharpDX.MediaFoundation.ObjectType objectType; @@ -65,7 +65,7 @@ public SharpDX.ComObject CreateObjectFromURL(string url, /// ms702279 /// HRESULT IMFSourceResolver::CreateObjectFromURL([In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromURL - public SharpDX.ComObject CreateObjectFromURL(string url, + public SharpDX.IUnknown CreateObjectFromURL(string url, SourceResolverFlags flags, out SharpDX.MediaFoundation.ObjectType objectType ) @@ -87,13 +87,13 @@ out SharpDX.MediaFoundation.ObjectType objectType /// ms702279 /// HRESULT IMFSourceResolver::CreateObjectFromURL([In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromURL - public SharpDX.ComObject CreateObjectFromURL(string url, + public SharpDX.IUnknown CreateObjectFromURL(string url, SourceResolverFlags flags, SharpDX.ComObject propertyStore, out SharpDX.MediaFoundation.ObjectType objectType ) { - ComObject result; + IUnknown result; CreateObjectFromURL(url, (int)(flags | SourceResolverFlags.MediaSource), propertyStore, out objectType, out result); return result; } @@ -111,7 +111,7 @@ out SharpDX.MediaFoundation.ObjectType objectType /// ms704671 /// HRESULT IMFSourceResolver::CreateObjectFromByteStream([In] IMFByteStream* pByteStream,[In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromByteStream - public SharpDX.ComObject CreateObjectFromStream(ByteStream stream, + public SharpDX.IUnknown CreateObjectFromStream(ByteStream stream, string url, SourceResolverFlags flags) { @@ -133,7 +133,7 @@ public SharpDX.ComObject CreateObjectFromStream(ByteStream stream, /// ms704671 /// HRESULT IMFSourceResolver::CreateObjectFromByteStream([In] IMFByteStream* pByteStream,[In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromByteStream - public SharpDX.ComObject CreateObjectFromStream(ByteStream stream, + public SharpDX.IUnknown CreateObjectFromStream(ByteStream stream, string url, SourceResolverFlags flags, out SharpDX.MediaFoundation.ObjectType objectType) @@ -156,14 +156,14 @@ public SharpDX.ComObject CreateObjectFromStream(ByteStream stream, /// ms704671 /// HRESULT IMFSourceResolver::CreateObjectFromByteStream([In] IMFByteStream* pByteStream,[In] const wchar_t* pwszURL,[In] unsigned int dwFlags,[In] IPropertyStore* pProps,[Out] MF_OBJECT_TYPE* pObjectType,[Out] IUnknown** ppObject) /// IMFSourceResolver::CreateObjectFromByteStream - public SharpDX.ComObject CreateObjectFromStream(ByteStream stream, + public SharpDX.IUnknown CreateObjectFromStream(ByteStream stream, string url, SourceResolverFlags flags, ComObject propertyStore, out SharpDX.MediaFoundation.ObjectType objectType) { - ComObject result; - CreateObjectFromByteStream_(stream.NativePointer, + IUnknown result; + CreateObjectFromByteStream(stream, url, (int)(flags | SourceResolverFlags.MediaSource), propertyStore, diff --git a/Source/SharpDX.MediaFoundation/Transform.cs b/Source/SharpDX.MediaFoundation/Transform.cs index 8fd444ef7..ed9e7934d 100644 --- a/Source/SharpDX.MediaFoundation/Transform.cs +++ b/Source/SharpDX.MediaFoundation/Transform.cs @@ -101,7 +101,7 @@ public bool TryGetOutputAvailableType(int dwOutputStreamID, int dwTypeIndex, out public bool ProcessOutput(TransformProcessOutputFlags dwFlags, TOutputDataBuffer[] outputSamplesRef, out TransformProcessOutputStatus dwStatusRef) { bool needMoreInput = false; - var result = ProcessOutput(dwFlags, outputSamplesRef.Length, outputSamplesRef[0], out dwStatusRef); + var result = ProcessOutput(dwFlags, outputSamplesRef.Length, ref outputSamplesRef[0], out dwStatusRef); // Check if it needs more input if (result== ResultCode.TransformNeedMoreInput) diff --git a/Source/SharpDX.MediaFoundation/VideoFormatGuids.cs b/Source/SharpDX.MediaFoundation/VideoFormatGuids.cs index 146800165..e2ffd8b2f 100644 --- a/Source/SharpDX.MediaFoundation/VideoFormatGuids.cs +++ b/Source/SharpDX.MediaFoundation/VideoFormatGuids.cs @@ -17,5 +17,69 @@ public static Guid FromFourCC(SharpDX.Multimedia.FourCC fourCC) { return new Guid(string.Concat(fourCC.ToString("I", null), "-0000-0010-8000-00aa00389b71")); } + + public static readonly Guid Wmv1 = new Guid("31564d57-0000-0010-8000-00aa00389b71"); + public static readonly Guid Wmv2 = new Guid("32564d57-0000-0010-8000-00aa00389b71"); + public static readonly Guid Wmv3 = new Guid("33564d57-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Dvc = new Guid("20637664-0000-0010-8000-00aa00389b71"); + public static readonly Guid Dv50 = new Guid("30357664-0000-0010-8000-00aa00389b71"); + public static readonly Guid Dv25 = new Guid("35327664-0000-0010-8000-00aa00389b71"); + + public static readonly Guid H263 = new Guid("33363248-0000-0010-8000-00aa00389b71"); + public static readonly Guid H264 = new Guid("34363248-0000-0010-8000-00aa00389b71"); + public static readonly Guid H265 = new Guid("35363248-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Hevc = new Guid("43564548-0000-0010-8000-00aa00389b71"); + public static readonly Guid HevcEs = new Guid("53564548-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Vp80 = new Guid("30385056-0000-0010-8000-00aa00389b71"); + public static readonly Guid Vp90 = new Guid("30395056-0000-0010-8000-00aa00389b71"); + + public static readonly Guid MultisampledS2 = new Guid("3253534d-0000-0010-8000-00aa00389b71"); + public static readonly Guid M4S2 = new Guid("3253344d-0000-0010-8000-00aa00389b71"); + public static readonly Guid Wvc1 = new Guid("31435657-0000-0010-8000-00aa00389b71"); + + public static readonly Guid P010 = new Guid("30313050-0000-0010-8000-00aa00389b71"); + public static readonly Guid AI44 = new Guid("34344941-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Dvh1 = new Guid("31687664-0000-0010-8000-00aa00389b71"); + public static readonly Guid Dvhd = new Guid("64687664-0000-0010-8000-00aa00389b71"); + + public static readonly Guid MultisampledS1 = new Guid("3153534d-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Mp43 = new Guid("3334504d-0000-0010-8000-00aa00389b71"); + public static readonly Guid Mp4s = new Guid("5334504d-0000-0010-8000-00aa00389b71"); + public static readonly Guid Mp4v = new Guid("5634504d-0000-0010-8000-00aa00389b71"); + public static readonly Guid Mpg1 = new Guid("3147504d-0000-0010-8000-00aa00389b71"); + public static readonly Guid Mjpg = new Guid("47504a4d-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Dvsl = new Guid("6c737664-0000-0010-8000-00aa00389b71"); + public static readonly Guid YUY2 = new Guid("32595559-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Yv12 = new Guid("32315659-0000-0010-8000-00aa00389b71"); + public static readonly Guid P016 = new Guid("36313050-0000-0010-8000-00aa00389b71"); + + public static readonly Guid P210 = new Guid("30313250-0000-0010-8000-00aa00389b71"); + public static readonly Guid P216 = new Guid("36313250-0000-0010-8000-00aa00389b71"); + public static readonly Guid I420 = new Guid("30323449-0000-0010-8000-00aa00389b71"); + public static readonly Guid Dvsd = new Guid("64737664-0000-0010-8000-00aa00389b71"); + + public static readonly Guid Y42T = new Guid("54323459-0000-0010-8000-00aa00389b71"); + public static readonly Guid NV12 = new Guid("3231564e-0000-0010-8000-00aa00389b71"); + public static readonly Guid NV11 = new Guid("3131564e-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y210 = new Guid("30313259-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y216 = new Guid("36313259-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y410 = new Guid("30313459-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y416 = new Guid("36313459-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y41P = new Guid("50313459-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y41T = new Guid("54313459-0000-0010-8000-00aa00389b71"); + public static readonly Guid Yvu9 = new Guid("39555659-0000-0010-8000-00aa00389b71"); + public static readonly Guid Yvyu = new Guid("55595659-0000-0010-8000-00aa00389b71"); + public static readonly Guid Iyuv = new Guid("56555949-0000-0010-8000-00aa00389b71"); + public static readonly Guid Uyvy = new Guid("59565955-0000-0010-8000-00aa00389b71"); + + public static readonly Guid AYUV = new Guid("56555941-0000-0010-8000-00aa00389b71"); + public static readonly Guid Y420O = new Guid("4f303234-0000-0010-8000-00aa00389b71"); } } diff --git a/Source/SharpDX.RawInput/Mapping.xml b/Source/SharpDX.RawInput/Mapping.xml index ea2661118..7b4386b7f 100644 --- a/Source/SharpDX.RawInput/Mapping.xml +++ b/Source/SharpDX.RawInput/Mapping.xml @@ -25,7 +25,7 @@ SharpDX.RawInput SharpDX.RawInput - + RAWINPUTHEADER @@ -38,6 +38,7 @@ RID_DEVICE_INFO_KEYBOARD RID_DEVICE_INFO_HID RID_DEVICE_INFO + RID_DEVICE_INFO_INNER_0 RAWINPUT_INNER_0 GetRawInputData @@ -153,7 +154,6 @@ - diff --git a/Source/SharpDX.RawInput/SharpDX.RawInput.csproj b/Source/SharpDX.RawInput/SharpDX.RawInput.csproj index e01b093c3..054a016f3 100644 --- a/Source/SharpDX.RawInput/SharpDX.RawInput.csproj +++ b/Source/SharpDX.RawInput/SharpDX.RawInput.csproj @@ -1,10 +1,10 @@ - - + + net40;net45 SharpDX.RawInput SharpDX.RawInput - bin\$(Configuration)\$(TargetFramework)\SharpDX.RawInput.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.RawInput.xml SharpDX.RawInput SharpDX.RawInput Assembly providing DirectX - RawInput managed API. @@ -30,5 +30,5 @@ - + \ No newline at end of file diff --git a/Source/SharpDX.XAudio2/EffectDescriptor.cs b/Source/SharpDX.XAudio2/EffectDescriptor.cs index a00454dea..470d60467 100644 --- a/Source/SharpDX.XAudio2/EffectDescriptor.cs +++ b/Source/SharpDX.XAudio2/EffectDescriptor.cs @@ -41,7 +41,7 @@ public EffectDescriptor(AudioProcessor effect) : this(effect,2) /// The output channel count. public EffectDescriptor(AudioProcessor effect, int outputChannelCount) { - EffectPointer = IntPtr.Zero; + EffectPointer = null; Effect = effect; InitialState = true; OutputChannelCount = outputChannelCount; @@ -66,7 +66,7 @@ public AudioProcessor Effect throw new ArgumentException("Cannot set Effect twice on the same EffectDescriptor"); _effect = value; - EffectPointer = AudioProcessorShadow.ToIntPtr(_effect); + EffectPointer = _effect; } } } diff --git a/Source/SharpDX.XAudio2/Fx/Reverb.cs b/Source/SharpDX.XAudio2/Fx/Reverb.cs index 9eac4c103..53809a1cd 100644 --- a/Source/SharpDX.XAudio2/Fx/Reverb.cs +++ b/Source/SharpDX.XAudio2/Fx/Reverb.cs @@ -41,7 +41,7 @@ public Reverb(XAudio2 device) : this(device, false) public Reverb(XAudio2 device, bool isUsingDebug) : base(device) { -#if DESKTOP_APP +#if !WINDOWS_UWP if (device.Version == XAudio2Version.Version27) { Guid clsid = (isUsingDebug) ? XAudio2FxContants.CLSID_AudioReverb_Debug : XAudio2FxContants.CLSID_AudioReverb; @@ -53,7 +53,7 @@ public Reverb(XAudio2 device, bool isUsingDebug) { XAudio28Functions.CreateAudioReverb(this); } -#if STORE_APP_10 +#if WINDOWS_UWP else if (device.Version == XAudio2Version.Version29) { XAudio29Functions.CreateAudioReverb(this); diff --git a/Source/SharpDX.XAudio2/Fx/VolumeMeter.cs b/Source/SharpDX.XAudio2/Fx/VolumeMeter.cs index 8c56c7c87..26497513a 100644 --- a/Source/SharpDX.XAudio2/Fx/VolumeMeter.cs +++ b/Source/SharpDX.XAudio2/Fx/VolumeMeter.cs @@ -46,7 +46,7 @@ public VolumeMeter(XAudio2 device) public VolumeMeter(XAudio2 device, bool isUsingDebug) : base(device) { -#if DESKTOP_APP +#if !WINDOWS_UWP if (device.Version == XAudio2Version.Version27) { Guid clsid = (isUsingDebug) ? XAudio2FxContants.CLSID_AudioVolumeMeter_Debug : XAudio2FxContants.CLSID_AudioVolumeMeter; @@ -58,7 +58,7 @@ public VolumeMeter(XAudio2 device, bool isUsingDebug) { XAudio28Functions.CreateAudioVolumeMeter(this); } -#if STORE_APP_10 +#if WINDOWS_UWP else if (device.Version == XAudio2Version.Version29) { XAudio29Functions.CreateAudioVolumeMeter(this); diff --git a/Source/SharpDX.XAudio2/LocalInterop.cs b/Source/SharpDX.XAudio2/LocalInterop.cs index 1d0e5112a..049ca0f72 100644 --- a/Source/SharpDX.XAudio2/LocalInterop.cs +++ b/Source/SharpDX.XAudio2/LocalInterop.cs @@ -43,8 +43,9 @@ namespace SharpDX.XAudio2 internal partial class LocalInterop { - public static unsafe int Calliint(void* thisObject,int arg0, void* arg1,void* methodPtr) { throw new NotImplementedException(); } - // System.Void*,System.Void*,System.Int32,System.Int32,System.Int32,System.Int32,System.Void* - public static unsafe int Calliint(void* thisObject, void* arg0, int arg1, int arg2, int arg3, int arg4, void* arg5, void* methodPtr) { throw new NotImplementedException(); } + public static unsafe int CalliGetDeviceDetails(void* thisObject,int arg0, void* arg1,void* methodPtr) { throw new NotImplementedException(); } + public static unsafe int CalliInitialize(void* thisObject,int arg0, int arg1,void* methodPtr) { throw new NotImplementedException(); } + public static unsafe int CalliCreateMasteringVoice(void* thisObject, void* arg0, int arg1, int arg2, int arg3, int arg4, void* arg5, void* methodPtr) { throw new NotImplementedException(); } + public static unsafe int CalliGetDeviceCount(void* thisObject, void* arg0, void* methodPtr) {throw new NotImplementedException(); } } } diff --git a/Source/SharpDX.XAudio2/Mapping-xaudio2.xml b/Source/SharpDX.XAudio2/Mapping-xaudio2.xml index 64ee1715a..42a645a48 100644 --- a/Source/SharpDX.XAudio2/Mapping-xaudio2.xml +++ b/Source/SharpDX.XAudio2/Mapping-xaudio2.xml @@ -28,12 +28,8 @@ SharpDX.XAudio2 - - $(FILTER_PASTING_ERROR) - - - $(FILTER_PASTING_ERROR) - + + @@ -196,8 +192,7 @@ - - + @@ -233,6 +228,7 @@ + @@ -250,7 +246,6 @@ - diff --git a/Source/SharpDX.XAudio2/Mapping.xml b/Source/SharpDX.XAudio2/Mapping.xml index 07a32c5df..f2ea7d2a0 100644 --- a/Source/SharpDX.XAudio2/Mapping.xml +++ b/Source/SharpDX.XAudio2/Mapping.xml @@ -22,8 +22,4 @@ --> sharpdx - - XAPO\Mapping.xml - X3DAudio\Mapping.xml - Mapping-xaudio2.xml \ No newline at end of file diff --git a/Source/SharpDX.XAudio2/MasteringVoice.cs b/Source/SharpDX.XAudio2/MasteringVoice.cs index b553abfef..e21ede074 100644 --- a/Source/SharpDX.XAudio2/MasteringVoice.cs +++ b/Source/SharpDX.XAudio2/MasteringVoice.cs @@ -57,6 +57,10 @@ public MasteringVoice(XAudio2 device, int inputChannels = 2, int inputSampleRate public MasteringVoice(XAudio2 device, int inputChannels, int inputSampleRate, string deviceId) : base(device) { + if (device.Version == XAudio2Version.Version27) + { + throw new InvalidOperationException("This method is only valid on XAudio 2.8 or XAudio 2.9 version"); + } device.CreateMasteringVoice(this, inputChannels, inputSampleRate, 0, deviceId, null, AudioStreamCategory.GameEffects); } @@ -72,6 +76,7 @@ public MasteringVoice(XAudio2 device, int inputChannels, int inputSampleRate, st public MasteringVoice(XAudio2 device, int inputChannels, int inputSampleRate, int deviceIndex) : base(device) { + device.CheckVersion27(); device.CreateMasteringVoice27(this, inputChannels, inputSampleRate, 0, deviceIndex, null); } diff --git a/Source/SharpDX.XAudio2/SharpDX.XAudio2.csproj b/Source/SharpDX.XAudio2/SharpDX.XAudio2.csproj index f314f7fff..326b6f19c 100644 --- a/Source/SharpDX.XAudio2/SharpDX.XAudio2.csproj +++ b/Source/SharpDX.XAudio2/SharpDX.XAudio2.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.XAudio2 SharpDX.XAudio2 - bin\$(Configuration)\$(TargetFramework)\SharpDX.XAudio2.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.XAudio2.xml SharpDX.XAudio2 SharpDX.XAudio2 Assembly providing DirectX - XAudio2, X3DAudio and XAPO managed API. @@ -26,7 +26,5 @@ - - diff --git a/Source/SharpDX.XAudio2/SourceVoice.cs b/Source/SharpDX.XAudio2/SourceVoice.cs index dd1bb27e3..c5e504de6 100644 --- a/Source/SharpDX.XAudio2/SourceVoice.cs +++ b/Source/SharpDX.XAudio2/SourceVoice.cs @@ -140,7 +140,7 @@ public SourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, S public SourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, SharpDX.XAudio2.VoiceFlags flags, float maxFrequencyRatio, VoiceCallback callback, EffectDescriptor[] effectDescriptors) : base(device) { - CreateSourceVoice(device, sourceFormat, flags, maxFrequencyRatio, callback == null ? IntPtr.Zero : VoiceShadow.ToIntPtr(callback), effectDescriptors); + CreateSourceVoice(device, sourceFormat, flags, maxFrequencyRatio, callback, effectDescriptors); } /// @@ -157,10 +157,10 @@ public SourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, S public SourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, SharpDX.XAudio2.VoiceFlags flags, float maxFrequencyRatio, bool enableCallbackEvents, EffectDescriptor[] effectDescriptors) : base(device) { - CreateSourceVoice(device, sourceFormat, flags, maxFrequencyRatio, enableCallbackEvents ? VoiceShadow.ToIntPtr(voiceCallbackImpl = new VoiceCallbackImpl(this)) : IntPtr.Zero, effectDescriptors); + CreateSourceVoice(device, sourceFormat, flags, maxFrequencyRatio, enableCallbackEvents ? (voiceCallbackImpl = new VoiceCallbackImpl(this)) : null, effectDescriptors); } - private void CreateSourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, SharpDX.XAudio2.VoiceFlags flags, float maxFrequencyRatio, IntPtr callback, EffectDescriptor[] effectDescriptors) + private void CreateSourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sourceFormat, SharpDX.XAudio2.VoiceFlags flags, float maxFrequencyRatio, VoiceCallback callback, EffectDescriptor[] effectDescriptors) { var waveformatPtr = WaveFormat.MarshalToPtr(sourceFormat); try @@ -177,13 +177,13 @@ private void CreateSourceVoice(XAudio2 device, SharpDX.Multimedia.WaveFormat sou fixed (void* pEffectDescriptors = &effectDescriptorNatives[0]) { tempSendDescriptor.EffectDescriptorPointer = (IntPtr)pEffectDescriptors; - device.CreateSourceVoice_(this, waveformatPtr, flags, maxFrequencyRatio, callback, null, tempSendDescriptor); + device.CreateSourceVoice(this, waveformatPtr, flags, maxFrequencyRatio, callback, null, tempSendDescriptor); } } } else { - device.CreateSourceVoice_(this, waveformatPtr, flags, maxFrequencyRatio, callback, null, null); + device.CreateSourceVoice(this, waveformatPtr, flags, maxFrequencyRatio, callback, null, null); } } finally @@ -265,12 +265,12 @@ public void SubmitSourceBuffer(SharpDX.XAudio2.AudioBuffer bufferRef, uint[] dec SharpDX.XAudio2.BufferWma bufferWmaRef; bufferWmaRef.PacketCount = decodedXMWAPacketInfo.Length; bufferWmaRef.DecodedPacketCumulativeBytesPointer = (IntPtr)pBuffer; - SubmitSourceBuffer(bufferRef, new IntPtr(&bufferWmaRef)); + SubmitSourceBuffer(bufferRef, bufferWmaRef); } } else { - SubmitSourceBuffer(bufferRef, IntPtr.Zero); + SubmitSourceBuffer(bufferRef, (SharpDX.XAudio2.BufferWma?)null); } } } diff --git a/Source/SharpDX.XAudio2/Voice.cs b/Source/SharpDX.XAudio2/Voice.cs index 5889b155f..e63e6d537 100644 --- a/Source/SharpDX.XAudio2/Voice.cs +++ b/Source/SharpDX.XAudio2/Voice.cs @@ -30,6 +30,22 @@ protected Voice(XAudio2 device) : base(IntPtr.Zero) this.device = device; } + /// + ///

Gets or Sets the overall volume level for the voice.

+ ///
+ public float Volume + { + get + { + GetVolume(out var value); + return value; + } + set + { + SetVolume(value); + } + } + /// ///

Returns information about the creation flags, input channels, and sample rate of a voice.

///
@@ -219,7 +235,14 @@ public void SetOutputVoices(params VoiceSendDescriptor[] outputVoices) if(outputVoices.Length > 0) { - fixed(void* pVoiceSendDescriptors = &outputVoices[0]) + var nativeDescriptors = new VoiceSendDescriptor.__Native[outputVoices.Length]; + + for (int i = 0; i < outputVoices.Length; i++) + { + outputVoices[i].__MarshalTo(ref nativeDescriptors[i]); + } + + fixed(void* pVoiceSendDescriptors = &nativeDescriptors[0]) { tempSendDescriptor.SendPointer = (IntPtr)pVoiceSendDescriptors; SetOutputVoices(tempSendDescriptor); diff --git a/Source/SharpDX.XAudio2/VoiceSendDescriptor.cs b/Source/SharpDX.XAudio2/VoiceSendDescriptor.cs index e7075eda6..87305051a 100644 --- a/Source/SharpDX.XAudio2/VoiceSendDescriptor.cs +++ b/Source/SharpDX.XAudio2/VoiceSendDescriptor.cs @@ -39,25 +39,7 @@ public VoiceSendDescriptor(Voice outputVoice) : this(VoiceSendFlags.None, output public VoiceSendDescriptor(VoiceSendFlags flags, Voice outputVoice) { Flags = flags; - OutputVoicePointer = IntPtr.Zero; OutputVoice = outputVoice; } - - - /// - /// Gets or sets the output voice. This parameter cannot be null. - /// - /// The output voice. - public Voice OutputVoice - { - get - { - return OutputVoicePointer==IntPtr.Zero?null:new Voice(OutputVoicePointer); - } - set - { - OutputVoicePointer = value.NativePointer; - } - } } } \ No newline at end of file diff --git a/Source/SharpDX.XAudio2/X3DAudio/Emitter.cs b/Source/SharpDX.XAudio2/X3DAudio/Emitter.cs index d35d2d293..a76839f94 100644 --- a/Source/SharpDX.XAudio2/X3DAudio/Emitter.cs +++ b/Source/SharpDX.XAudio2/X3DAudio/Emitter.cs @@ -58,8 +58,6 @@ internal unsafe void __MarshalFree() { // FreeHGlobal is crashing? Does X3DAudio perform deallocation? - if (ConePointer != IntPtr.Zero) - Marshal.FreeHGlobal(ConePointer); if (ChannelAzimuthsPointer != IntPtr.Zero) Marshal.FreeHGlobal(ChannelAzimuthsPointer); if (VolumeCurvePointer != IntPtr.Zero) diff --git a/Source/SharpDX.XAudio2/X3DAudio/Mapping.xml b/Source/SharpDX.XAudio2/X3DAudio/Mapping.xml index bfd6435cd..d365f9133 100644 --- a/Source/SharpDX.XAudio2/X3DAudio/Mapping.xml +++ b/Source/SharpDX.XAudio2/X3DAudio/Mapping.xml @@ -80,17 +80,17 @@ - + - - + + - - + + diff --git a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio.cs b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio.cs index 97c4ee09b..b56188354 100644 --- a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio.cs +++ b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio.cs @@ -89,7 +89,7 @@ public X3DAudio(Speakers speakers, float speedOfSound, X3DAudioVersion requestVe { switch(tryVersion) { -#if DESKTOP_APP +#if !WINDOWS_UWP case X3DAudioVersion.Version17: try { @@ -109,7 +109,7 @@ public X3DAudio(Speakers speakers, float speedOfSound, X3DAudioVersion requestVe } catch (DllNotFoundException) { } break; -#if STORE_APP_10 +#if WINDOWS_UWP case X3DAudioVersion.Version29: try { @@ -122,7 +122,7 @@ public X3DAudio(Speakers speakers, float speedOfSound, X3DAudioVersion requestVe #endif } - if(version != X3DAudioVersion.Default) + if (version != X3DAudioVersion.Default) { break; } diff --git a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio17.cs b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio17.cs index 687b79e1f..3af903fac 100644 --- a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio17.cs +++ b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio17.cs @@ -28,7 +28,7 @@ // the code is regenerated. // //------------------------------------------------------------------------------ -#if DESKTOP_APP +#if !WINDOWS_UWP using System; using System.Runtime.InteropServices; using System.Security; diff --git a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio29.cs b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio29.cs index 54c41286c..b943f3ea3 100644 --- a/Source/SharpDX.XAudio2/X3DAudio/X3DAudio29.cs +++ b/Source/SharpDX.XAudio2/X3DAudio/X3DAudio29.cs @@ -28,7 +28,7 @@ // the code is regenerated. // //------------------------------------------------------------------------------ -#if STORE_APP_10 +#if WINDOWS_UWP using System; using System.Runtime.InteropServices; using System.Security; diff --git a/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.Interop.cs b/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.Interop.cs index 53d95c6d1..ed4dd99d1 100644 --- a/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.Interop.cs +++ b/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.Interop.cs @@ -7,8 +7,8 @@ namespace SharpDX.XAPO.Fx /// Functions ///
/// - static partial class XAPOFx { -#if STORE_APP_10 + static partial class XAPOFx { +#if WINDOWS_UWP /// ///

Creates an instance of the requested XAPOFX effect.

///
diff --git a/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.cs b/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.cs index d2fe2b695..971d9e5e6 100644 --- a/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.cs +++ b/Source/SharpDX.XAudio2/XAPO/Fx/XAPOFx.cs @@ -32,7 +32,7 @@ internal partial class XAPOFx public static void CreateFX(SharpDX.XAudio2.XAudio2 device, System.Guid clsid, SharpDX.ComObject effectRef) { -#if DESKTOP_APP +#if !WINDOWS_UWP if (device.Version == XAudio2Version.Version27) { var clsid15 = clsid; @@ -66,7 +66,7 @@ public static void CreateFX(SharpDX.XAudio2.XAudio2 device, System.Guid clsid, S { CreateFX28(clsid, effectRef, IntPtr.Zero, 0); } -#if STORE_APP_10 +#if WINDOWS_UWP else if (device.Version == XAudio2Version.Version29) { CreateFX29(clsid, effectRef, IntPtr.Zero, 0); @@ -86,7 +86,7 @@ public static void CreateFX(SharpDX.XAudio2.XAudio2 device, System.Guid clsid, S /// Constant None. private static Guid CLSID_FXReverb_15 = new Guid("a90bc001-e897-e897-7439-435500000002"); -#if DESKTOP_APP +#if !WINDOWS_UWP [DllImport("XAPOFX1_5.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "CreateFX")] private unsafe static extern int CreateFX15(ref Guid guid, out IntPtr arg1); #endif diff --git a/Source/SharpDX.XAudio2/XAPO/Mapping.xml b/Source/SharpDX.XAudio2/XAPO/Mapping.xml index 256ae0438..9301ffa98 100644 --- a/Source/SharpDX.XAudio2/XAPO/Mapping.xml +++ b/Source/SharpDX.XAudio2/XAPO/Mapping.xml @@ -27,7 +27,6 @@ SharpDX.XAudio2 - $(FILTER_PASTING_ERROR) @@ -36,11 +35,9 @@ #define XAPO_FLAG_DEFAULT (XAPO_FLAG_CHANNELS_MUST_MATCH|XAPO_FLAG_FRAMERATE_MUST_MATCH|XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH|XAPO_FLAG_BUFFERCOUNT_MUST_MATCH|XAPO_FLAG_INPLACE_SUPPORTED) - $(FILTER_PASTING_ERROR)
- $(FILTER_PASTING_ERROR) diff --git a/Source/SharpDX.XAudio2/XAudio2.cs b/Source/SharpDX.XAudio2/XAudio2.cs index a3ce277fa..da43d900c 100644 --- a/Source/SharpDX.XAudio2/XAudio2.cs +++ b/Source/SharpDX.XAudio2/XAudio2.cs @@ -17,7 +17,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + using System; +using System.Runtime.InteropServices; namespace SharpDX.XAudio2 { @@ -50,6 +52,23 @@ public partial class XAudio2 ///
public event EventHandler CriticalError; +#if !WINDOWS_UWP + private const uint RPC_E_CHANGED_MODE = 0x80010106; + private const uint COINIT_MULTITHREADED = 0x0; + private const uint COINIT_APARTMENTTHREADED = 0x2; + + static XAudio2() + { + if (CoInitializeEx(IntPtr.Zero, COINIT_APARTMENTTHREADED) == RPC_E_CHANGED_MODE) + { + CoInitializeEx(IntPtr.Zero, COINIT_MULTITHREADED); + } + } + + [DllImport("ole32.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)] + private static extern uint CoInitializeEx([In, Optional] IntPtr pvReserved, [In]uint dwCoInit); +#endif + /// /// Initializes a new instance of the class. /// @@ -85,7 +104,7 @@ public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio { switch (tryVersion) { -#if DESKTOP_APP +#if !WINDOWS_UWP case XAudio2Version.Version27: Guid clsid = ((int)flags == 1) ? CLSID_XAudio27_Debug : CLSID_XAudio27; if ((requestedVersion == XAudio2Version.Default || requestedVersion == XAudio2Version.Version27) && Utilities.TryCreateComInstance(clsid, Utilities.CLSCTX.ClsctxInprocServer, IID_IXAudio2, this)) @@ -105,7 +124,6 @@ public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio } catch (DllNotFoundException) { } break; -#if STORE_APP_10 case XAudio2Version.Version29: try { @@ -114,7 +132,6 @@ public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio } catch (DllNotFoundException) { } break; -#endif } // Early exit if we found a requestedVersion @@ -133,7 +150,7 @@ public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio engineCallbackImpl = new EngineCallbackImpl(this); engineShadowPtr = EngineShadow.ToIntPtr(engineCallbackImpl); - RegisterForCallbacks_(engineShadowPtr); + RegisterForCallbacks(engineCallbackImpl); } /// @@ -154,9 +171,9 @@ public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio /// private void SetupVtblFor27() { - RegisterForCallbacks___vtbl_index += 3; - UnregisterForCallbacks___vtbl_index += 3; - CreateSourceVoice___vtbl_index += 3; + RegisterForCallbacks__vtbl_index += 3; + UnregisterForCallbacks__vtbl_index += 3; + CreateSourceVoice__vtbl_index += 3; CreateSubmixVoice__vtbl_index += 3; CreateMasteringVoice__vtbl_index += 3; StartEngine__vtbl_index += 3; @@ -166,7 +183,7 @@ private void SetupVtblFor27() SetDebugConfiguration__vtbl_index += 3; } - private void CheckVersion27() + internal void CheckVersion27() { if (Version != XAudio2Version.Version27) { @@ -205,7 +222,7 @@ private unsafe void GetDeviceCount(out int countRef) Result result; fixed (void* ptr = &countRef) { - result = LocalInterop.Calliint(this._nativePointer, ptr, *(*(void***)this._nativePointer + 3)); + result = LocalInterop.CalliGetDeviceCount(this._nativePointer, ptr, *(*(void***)this._nativePointer + 3)); } result.CheckError(); } @@ -218,7 +235,7 @@ internal unsafe void CreateMasteringVoice27(MasteringVoice masteringVoiceOut, in { value = effectChainRef.Value; } - Result result = LocalInterop.Calliint(this._nativePointer, (void*)&zero, inputChannels, inputSampleRate, flags, deviceIndex, effectChainRef.HasValue ? ((void*)(&value)) : ((void*)IntPtr.Zero), *(*(void***)this._nativePointer + 10)); + Result result = LocalInterop.CalliCreateMasteringVoice(this._nativePointer, (void*)&zero, inputChannels, inputSampleRate, flags, deviceIndex, effectChainRef.HasValue ? ((void*)(&value)) : ((void*)IntPtr.Zero), *(*(void***)this._nativePointer + 10)); masteringVoiceOut.NativePointer = zero; result.CheckError(); } @@ -241,7 +258,7 @@ public SharpDX.XAudio2.DeviceDetails GetDeviceDetails(int index) private unsafe void GetDeviceDetails(int index, out DeviceDetails deviceDetailsRef) { DeviceDetails.__Native _Native = default(DeviceDetails.__Native); - Result result = LocalInterop.Calliint(this._nativePointer, index, &_Native, *(*(void***)this._nativePointer + 4)); + Result result = LocalInterop.CalliGetDeviceDetails(this._nativePointer, index, &_Native, *(*(void***)this._nativePointer + 4)); deviceDetailsRef = default(DeviceDetails); deviceDetailsRef.__MarshalFrom(ref _Native); result.CheckError(); @@ -249,7 +266,7 @@ private unsafe void GetDeviceDetails(int index, out DeviceDetails deviceDetailsR private unsafe void Initialize(int flags, ProcessorSpecifier xAudio2Processor) { - var result = (Result)LocalInterop.Calliint(this._nativePointer, (int)flags, (int)xAudio2Processor, *(*(void***)this._nativePointer + 5)); + var result = (Result)LocalInterop.CalliInitialize(this._nativePointer, (int)flags, (int)xAudio2Processor, *(*(void***)this._nativePointer + 5)); result.CheckError(); } @@ -335,8 +352,8 @@ public void CommitChanges() protected override void Dispose(bool disposing) { - if (engineShadowPtr != IntPtr.Zero) - UnregisterForCallbacks_(engineShadowPtr); + if (engineCallbackImpl != null) + UnregisterForCallbacks(engineCallbackImpl); if (disposing) { diff --git a/Source/SharpDX.XAudio2/XAudio29Functions.cs b/Source/SharpDX.XAudio2/XAudio29Functions.cs index 21fd08e35..86e55a19f 100644 --- a/Source/SharpDX.XAudio2/XAudio29Functions.cs +++ b/Source/SharpDX.XAudio2/XAudio29Functions.cs @@ -1,4 +1,3 @@ -#if STORE_APP_10 using System; using System.Runtime.InteropServices; @@ -115,5 +114,4 @@ public static void CreateAudioVolumeMeter(SharpDX.ComObject apoOut) { [DllImport("xaudio2_9.dll", EntryPoint = "CreateAudioVolumeMeter", CallingConvention = CallingConvention.StdCall)] private unsafe static extern int CreateAudioVolumeMeter_(void* arg0); } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/Source/SharpDX.XInput/Controller.cs b/Source/SharpDX.XInput/Controller.cs index 386090391..e13bd410d 100644 --- a/Source/SharpDX.XInput/Controller.cs +++ b/Source/SharpDX.XInput/Controller.cs @@ -163,7 +163,7 @@ public bool IsConnected } } -#if DESKTOP_APP +#if !WINDOWS_UWP static Controller() { if(LoadLibrary("xinput1_4.dll") != IntPtr.Zero) @@ -176,7 +176,7 @@ static Controller() } else if (LoadLibrary("xinput9_1_0.dll") != IntPtr.Zero) { - xinput = new XInput13(); + xinput = new XInput910(); } } diff --git a/Source/Tools/SharpGen/Config/NamingFlags.cs b/Source/SharpDX.XInput/GamepadButtonFlags.cs similarity index 72% rename from Source/Tools/SharpGen/Config/NamingFlags.cs rename to Source/SharpDX.XInput/GamepadButtonFlags.cs index b2b191f0d..1acfd0f7c 100644 --- a/Source/Tools/SharpGen/Config/NamingFlags.cs +++ b/Source/SharpDX.XInput/GamepadButtonFlags.cs @@ -18,23 +18,27 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using System.Xml.Serialization; -namespace SharpGen.Config +namespace SharpDX.XInput { - /// - /// Defines naming options. - /// [Flags] - public enum NamingFlags - { - [XmlEnum("default")] - Default = 0x0, - - [XmlEnum("noexpand")] - NoShortNameExpand = 0x01, - - [XmlEnum("underscore")] - KeepUnderscore = 0x02, + public enum GamepadButtonFlags : ushort + { + None = 0, + DPadUp = 0x0001, + DPadDown = 0x0002, + DPadLeft = 0x0004, + DPadRight = 0x0008, + Start = 0x0010, + Back = 0x0020, + LeftThumb = 0x0040, + RightThumb = 0x0080, + LeftShoulder = 0x0100, + RightShoulder = 0x0200, + A = 0x1000, + B = 0x2000, + X = 0x4000, + Y = 0x8000 } -} \ No newline at end of file +} + diff --git a/Source/SharpDX.XInput/Mapping.xml b/Source/SharpDX.XInput/Mapping.xml index ed988b3b9..811adf6ea 100644 --- a/Source/SharpDX.XInput/Mapping.xml +++ b/Source/SharpDX.XInput/Mapping.xml @@ -44,6 +44,8 @@ sharpdx-xinput-ext xinput + + @@ -65,6 +67,7 @@ + @@ -94,10 +97,6 @@ - - - - @@ -161,4 +160,4 @@ - \ No newline at end of file + diff --git a/Source/SharpDX.XInput/SharpDX.XInput.csproj b/Source/SharpDX.XInput/SharpDX.XInput.csproj index 602108a48..bce5f863d 100644 --- a/Source/SharpDX.XInput/SharpDX.XInput.csproj +++ b/Source/SharpDX.XInput/SharpDX.XInput.csproj @@ -1,10 +1,10 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX.XInput SharpDX.XInput - bin\$(Configuration)\$(TargetFramework)\SharpDX.XInput.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.XInput.xml SharpDX.XInput SharpDX.XInput Assembly providing DirectX - XInput managed API. @@ -20,6 +20,4 @@ - - \ No newline at end of file diff --git a/Source/SharpDX.XInput/XInput13.cs b/Source/SharpDX.XInput/XInput13.cs index 17ca5ce4f..f8a6be2b9 100644 --- a/Source/SharpDX.XInput/XInput13.cs +++ b/Source/SharpDX.XInput/XInput13.cs @@ -17,7 +17,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if DESKTOP_APP +#if !WINDOWS_UWP using System; using System.Runtime.InteropServices; diff --git a/Source/SharpDX.XInput/XInput14.cs b/Source/SharpDX.XInput/XInput14.cs index 28e1914ba..49b90b1af 100644 --- a/Source/SharpDX.XInput/XInput14.cs +++ b/Source/SharpDX.XInput/XInput14.cs @@ -27,7 +27,7 @@ internal class XInput14 : IXInput { public int XInputSetState(int dwUserIndex, Vibration vibrationRef) { - return XInput.XInputSetState(dwUserIndex, vibrationRef); + return XInput.XInputSetState(dwUserIndex, ref vibrationRef); } public int XInputGetState(int dwUserIndex, out State stateRef) diff --git a/Source/SharpDX.XInput/XInput910.cs b/Source/SharpDX.XInput/XInput910.cs index 0dd1d939c..27850cf80 100644 --- a/Source/SharpDX.XInput/XInput910.cs +++ b/Source/SharpDX.XInput/XInput910.cs @@ -17,7 +17,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if DESKTOP_APP +#if !WINDOWS_UWP using System; using System.Runtime.InteropServices; using SharpDX.Mathematics.Interop; diff --git a/Source/SharpDX/CallbackBase.cs b/Source/SharpDX/CallbackBase.cs index 5c2012961..af4eaf470 100644 --- a/Source/SharpDX/CallbackBase.cs +++ b/Source/SharpDX/CallbackBase.cs @@ -18,6 +18,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using System.Threading; namespace SharpDX { @@ -26,6 +27,8 @@ namespace SharpDX ///
public abstract class CallbackBase : DisposeBase, ICallbackable { + private int refCount = 1; + /// /// Releases unmanaged and - optionally - managed resources /// @@ -34,13 +37,59 @@ protected override void Dispose(bool disposing) { if (disposing) { - var callback = ((ICallbackable) this); - if (callback.Shadow != null) + Release(); + } + } + + public int AddReference() + { + var old = refCount; + while (true) + { + if (old == 0) + { + throw new ObjectDisposedException("Cannot add a reference to a nonreferenced item"); + } + var current = Interlocked.CompareExchange(ref refCount, old + 1, old); + if (current == old) + { + return old + 1; + } + old = current; + } + } + + public int Release() + { + var old = refCount; + while (true) + { + var current = Interlocked.CompareExchange(ref refCount, old - 1, old); + + if (current == old) { - callback.Shadow.Dispose(); - callback.Shadow = null; + if (old == 1) + { + // Dispose native resources + var callback = ((ICallbackable)this); + callback.Shadow.Dispose(); + callback.Shadow = null; + } + return old - 1; } + old = current; + } + } + + public Result QueryInterface(ref Guid guid, out IntPtr comObject) + { + var container = (ShadowContainer)((ICallbackable)this).Shadow; + comObject = container.Find(guid); + if (comObject == IntPtr.Zero) + { + return Result.NoInterface; } + return Result.Ok; } IDisposable ICallbackable.Shadow { get; set; } diff --git a/Source/SharpDX/ComObject.cs b/Source/SharpDX/ComObject.cs index e43460a0b..ed7154fb1 100644 --- a/Source/SharpDX/ComObject.cs +++ b/Source/SharpDX/ComObject.cs @@ -26,15 +26,13 @@ namespace SharpDX /// /// Root IUnknown class to interop with COM object /// - public class ComObject : CppObject, IUnknown + public partial class ComObject : CppObject, IUnknown { /// - /// Initializes a new instance of the class. + /// Logs a warning of a possible memory leak when is enabled. + /// Default uses . /// - /// Pointer to Cpp Object - public ComObject(IntPtr pointer) : base(pointer) - { - } + public static Action LogMemoryLeakWarning = (warning) => System.Diagnostics.Debug.WriteLine(warning); /// /// Initializes a new instance of the class from a IUnknown object. @@ -229,18 +227,6 @@ public virtual T QueryInterfaceOrNull() where T : ComObject return FromPointer(QueryInterfaceOrNull(Utilities.GetGuidFromType(typeof(T)))); } - /// - /// Performs an explicit conversion from to . - /// - /// The native pointer. - /// - /// The result of the conversion. - /// - public static explicit operator ComObject(IntPtr nativePointer) - { - return nativePointer == IntPtr.Zero ? null : new ComObject(nativePointer); - } - /// /// Query Interface for a particular interface support and attach to the given instance. /// @@ -288,7 +274,7 @@ protected unsafe override void Dispose(bool disposing) if(!Configuration.EnableReleaseOnFinalizer) { var objectReference = ObjectTracker.Find(this); - System.Diagnostics.Debug.WriteLine(string.Format("Warning: Live ComObject [0x{0:X}], potential memory leak: {1}", NativePointer.ToInt64(), objectReference)); + LogMemoryLeakWarning?.Invoke(string.Format("Warning: Live ComObject [0x{0:X}], potential memory leak: {1}", NativePointer.ToInt64(), objectReference)); } } diff --git a/Source/SharpDX/ComObjectCallback.cs b/Source/SharpDX/ComObjectCallback.cs deleted file mode 100644 index 8b9e58d9c..000000000 --- a/Source/SharpDX/ComObjectCallback.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; - -namespace SharpDX -{ - /// - /// Base class for unmanaged callbackable Com object. - /// - public class ComObjectCallback : ComObject, ICallbackable - { - /// - /// Initializes a new instance of the class. - /// - /// Pointer to Cpp Object - protected ComObjectCallback(IntPtr pointer) : base(pointer) - { - } - - /// - /// Initializes a new instance of the class. - /// - protected ComObjectCallback() - { - } - - /// - /// Implements but it cannot not be set. - /// This is only used to support for interop with unmanaged callback. - /// - public IDisposable Shadow - { - get { throw new InvalidOperationException("Invalid access to Callback. This is used internally."); } - set { throw new InvalidOperationException("Invalid access to Callback. This is used internally."); } - } - } -} \ No newline at end of file diff --git a/Source/SharpDX/ComObjectShadow.cs b/Source/SharpDX/ComObjectShadow.cs index 84fb4b2b6..90cd05a25 100644 --- a/Source/SharpDX/ComObjectShadow.cs +++ b/Source/SharpDX/ComObjectShadow.cs @@ -28,15 +28,14 @@ namespace SharpDX /// internal abstract class ComObjectShadow : CppObjectShadow { - private int count = 1; public static Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046"); - protected int QueryInterfaceImpl(IntPtr thisObject, ref Guid guid, out IntPtr output) + protected int QueryInterfaceImpl(ref Guid guid, out IntPtr output) { var shadow = (ComObjectShadow)((ShadowContainer)Callback.Shadow).FindShadow(guid); if (shadow != null) { - shadow.AddRefImpl(thisObject); + ((IUnknown)Callback).AddReference(); output = shadow.NativePointer; return Result.Ok.Code; } @@ -44,14 +43,14 @@ protected int QueryInterfaceImpl(IntPtr thisObject, ref Guid guid, out IntPtr ou return Result.NoInterface.Code; } - protected virtual int AddRefImpl(IntPtr thisObject) + protected virtual int AddRefImpl() { - return Interlocked.Increment(ref count); + return ((IUnknown)Callback).AddReference(); } - protected virtual int ReleaseImpl(IntPtr thisObject) + protected virtual int ReleaseImpl() { - return Interlocked.Decrement(ref count); + return ((IUnknown)Callback).Release(); } internal class ComObjectVtbl : CppObjectVtbl @@ -86,7 +85,7 @@ protected static int QueryInterfaceImpl(IntPtr thisObject, IntPtr guid, out IntP } unsafe { - return shadow.QueryInterfaceImpl(thisObject, ref *((Guid*)guid), out output); + return shadow.QueryInterfaceImpl(ref *((Guid*)guid), out output); } } @@ -97,7 +96,7 @@ protected static int AddRefImpl(IntPtr thisObject) // But we are callbacked by a C++ that want to release it. if (shadow == null) return 0; - return shadow.AddRefImpl(thisObject); + return shadow.AddRefImpl(); } protected static int ReleaseImpl(IntPtr thisObject) @@ -107,7 +106,7 @@ protected static int ReleaseImpl(IntPtr thisObject) // But we are callbacked by a C++ that want to release it. if (shadow == null) return 0; - return shadow.ReleaseImpl(thisObject); + return shadow.ReleaseImpl(); } } } diff --git a/Source/SharpDX/CppObject.cs b/Source/SharpDX/CppObject.cs index dbe657d6c..b9cd1323f 100644 --- a/Source/SharpDX/CppObject.cs +++ b/Source/SharpDX/CppObject.cs @@ -24,7 +24,7 @@ namespace SharpDX /// /// Root class for all Cpp interop object. /// - public class CppObject : DisposeBase + public class CppObject : DisposeBase, ICallbackable { /// /// The native pointer @@ -175,5 +175,16 @@ public static IntPtr ToCallbackPtr(ICallbackable callback) return shadowContainer.Find(typeof(TCallback)); } + + + /// + /// Implements but it cannot not be set. + /// This is only used to support for interop with unmanaged callback. + /// + IDisposable ICallbackable.Shadow + { + get { throw new InvalidOperationException("Invalid access to Callback. This is used internally."); } + set { throw new InvalidOperationException("Invalid access to Callback. This is used internally."); } + } } } \ No newline at end of file diff --git a/Source/SharpDX/DataBuffer.cs b/Source/SharpDX/DataBuffer.cs index ebc7d4fb1..c05e9fe71 100644 --- a/Source/SharpDX/DataBuffer.cs +++ b/Source/SharpDX/DataBuffer.cs @@ -34,9 +34,11 @@ public class DataBuffer : DisposeBase { private unsafe sbyte* _buffer; private GCHandle _gCHandle; - private Blob _blob; private readonly bool _ownsBuffer; private readonly int _size; +#if !WINDOWS_UWP + private Blob _blob; +#endif /// /// Creates the specified user buffer. @@ -141,7 +143,7 @@ internal unsafe DataBuffer(void* buffer, int sizeInBytes, bool makeCopy) _size = sizeInBytes; _ownsBuffer = makeCopy; } -#if DESKTOP_APP +#if !WINDOWS_UWP internal unsafe DataBuffer(Blob buffer) { System.Diagnostics.Debug.Assert(buffer.GetBufferSize() > 0); @@ -160,7 +162,7 @@ protected override void Dispose(bool disposing) { if (disposing) { -#if DESKTOP_APP +#if !WINDOWS_UWP if (_blob != null) { _blob.Dispose(); diff --git a/Source/SharpDX/DataStream.cs b/Source/SharpDX/DataStream.cs index e9bc47ff2..62ad7e016 100644 --- a/Source/SharpDX/DataStream.cs +++ b/Source/SharpDX/DataStream.cs @@ -203,6 +203,11 @@ internal unsafe DataStream(void* buffer, int sizeInBytes, bool canRead, bool can _canWrite = canWrite; _ownsBuffer = makeCopy; } + + ~DataStream() + { + Dispose(false); + } /// /// Releases unmanaged and - optionally - managed resources diff --git a/Source/SharpDX/Diagnostics/ObjectTracker.cs b/Source/SharpDX/Diagnostics/ObjectTracker.cs index 884b1897f..34ee7de99 100644 --- a/Source/SharpDX/Diagnostics/ObjectTracker.cs +++ b/Source/SharpDX/Diagnostics/ObjectTracker.cs @@ -104,7 +104,7 @@ private static Dictionary> ObjectReferences /// public static string GetStackTrace() { -#if STORE_APP +#if WINDOWS_UWP var stacktrace = "Stacktrace is not available on this platform"; // This code is a workaround to be able to get a full stacktrace on Windows Store App. @@ -121,7 +121,7 @@ public static string GetStackTrace() // First try to get the stacktrace stacktrace = (string)stackTraceGetMethod.Invoke(null, null); } - catch (Exception ex) + catch (Exception) { // If we have an exception, it means that the access to the method is not possible // so we are going to patch the field RuntimeMethodInfo.m_invocationFlags that should contain @@ -145,7 +145,7 @@ public static string GetStackTrace() // if it succeeds, first Invoke() should run on next call stacktrace = (string)stackTraceGetMethod.Invoke(null, null); } - catch (Exception ex2) + catch (Exception) { // if it is still failing, we can't do anything } @@ -153,7 +153,7 @@ public static string GetStackTrace() } } } - catch (Exception ex) + catch (Exception) { // can't do anything } diff --git a/Source/SharpDX/Direct3D/Mapping.xml b/Source/SharpDX/Direct3D/Mapping.xml index deed7d33d..b91f28b6b 100644 --- a/Source/SharpDX/Direct3D/Mapping.xml +++ b/Source/SharpDX/Direct3D/Mapping.xml @@ -65,7 +65,7 @@ // ***************************************************************** --> - + @@ -131,10 +131,10 @@ // Direct3D Common Interfaces // ***************************************************************** --> - + - + diff --git a/Source/SharpDX/DisposeCollector.cs b/Source/SharpDX/DisposeCollector.cs index 1bfead0f9..6909e5ea3 100644 --- a/Source/SharpDX/DisposeCollector.cs +++ b/Source/SharpDX/DisposeCollector.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel +// Copyright (c) 2010-2018 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -42,22 +42,25 @@ public int Count /// /// Disposes all object collected by this class and clear the list. The collector can still be used for collecting. /// + /// If true, managed resources should be + /// disposed of in addition to unmanaged resources. /// /// To completely dispose this instance and avoid further dispose, use method instead. /// - public void DisposeAndClear() + public void DisposeAndClear(bool disposeManagedResources = true) { if (disposables == null) - { return; - } for (int i = disposables.Count - 1; i >= 0; i--) { var valueToDispose = disposables[i]; - if (valueToDispose is IDisposable) + if (valueToDispose is IDisposable disposable) { - ((IDisposable)valueToDispose).Dispose(); + if (disposeManagedResources) + { + disposable.Dispose(); + } } else { @@ -76,7 +79,7 @@ public void DisposeAndClear() /// disposed of in addition to unmanaged resources. protected override void Dispose(bool disposeManagedResources) { - DisposeAndClear(); + DisposeAndClear(disposeManagedResources); disposables = null; } diff --git a/Source/SharpDX/IO/NativeFile.cs b/Source/SharpDX/IO/NativeFile.cs index 10471e9fa..1fb24e7f3 100644 --- a/Source/SharpDX/IO/NativeFile.cs +++ b/Source/SharpDX/IO/NativeFile.cs @@ -29,7 +29,7 @@ namespace SharpDX.IO /// public static class NativeFile { -#if WINDOWS_API_SET +#if WINDOWS_UWP private const string KERNEL_FILE = "api-ms-win-core-file-l1-2-0.dll"; #else private const string KERNEL_FILE = "kernel32.dll"; @@ -114,7 +114,7 @@ public static string ReadAllText(string path, Encoding encoding, NativeFileShare } } } -#if WINDOWS_API_SET +#if WINDOWS_UWP internal struct CREATEFILE2_EXTENDED_PARAMETERS { public uint dwSize; @@ -284,7 +284,7 @@ public static DateTime GetLastWriteTime(string path) [DllImport(KERNEL_FILE, EntryPoint = "GetFileAttributesExW", CharSet = CharSet.Unicode, SetLastError = true)] internal static extern bool GetFileAttributesEx(string name, int fileInfoLevel, out WIN32_FILE_ATTRIBUTE_DATA lpFileInformation); -#if STORE_APP +#if WINDOWS_UWP /// /// Creates the file. diff --git a/Source/SharpDX/IO/NativeFileStream.cs b/Source/SharpDX/IO/NativeFileStream.cs index e34bc36c7..0d6c18564 100644 --- a/Source/SharpDX/IO/NativeFileStream.cs +++ b/Source/SharpDX/IO/NativeFileStream.cs @@ -44,7 +44,7 @@ public class NativeFileStream : Stream /// The share mode. public unsafe NativeFileStream(string fileName, NativeFileMode fileMode, NativeFileAccess access, NativeFileShare share = NativeFileShare.Read) { -#if STORE_APP +#if WINDOWS_UWP //uint newAccess = 0; //const int FILE_ATTRIBUTE_NORMAL = 0x00000080; //const int FILE_FLAG_RANDOM_ACCESS = 0x10000000; diff --git a/Source/SharpDX/IUnknown.cs b/Source/SharpDX/IUnknown.cs index cea54f87e..0d2323d3f 100644 --- a/Source/SharpDX/IUnknown.cs +++ b/Source/SharpDX/IUnknown.cs @@ -25,8 +25,7 @@ namespace SharpDX /// /// Base interface for Component Object Model (COM). /// - [Guid("00000000-0000-0000-C000-000000000046")] - public interface IUnknown + public partial interface IUnknown { /// /// Queries the supported COM interface on this instance. diff --git a/Source/SharpDX/Mapping-core.xml b/Source/SharpDX/Mapping-core.xml index 1c3a59f5a..e0cf85ea4 100644 --- a/Source/SharpDX/Mapping-core.xml +++ b/Source/SharpDX/Mapping-core.xml @@ -26,6 +26,10 @@ SharpDX SharpDX + + IUnknown + + STATSTG tagLOCKTYPE @@ -42,402 +46,6 @@ - - - Aspect - Bytecode - Hull - Vertex - Rational - Ratio - PixelShader - Pixels - Pixel - Domain - Geometry - Audio - Forced - Force - Revoked - Omac - Soundbank - Sound - Notification - Positive - Negative - Scissors - Scissor - BitRate - VariableBitRate - Write - Writer - Allowing - Allow - Authenticated - Querying - Query - Checker - Cleanup - Clean - Allocation - All - Data - Prefer - Empty - Fully - Full - VertexBufferView - VertexBuffer - IndexBufferView - IndexBuffer - Checking - Check - Nothing - Destination - Encryption - Enqueue - Wrong - Certificate - GetCryptoSession - MonoOffset - StreamSelector - StreamSource - Flip - Buffering - Opm - Media - MediaType - Invalidated - Invalidate - BufferSize - Optional - Sort - And - Rgba - Rgb - Argb - OutputDuplicate - Targets - Target - Tool - NonStandard - Elements - Subscript - Opportunity - Classic - Initials - Drawn - Parameters - Pointed - Informational - Copyright - Notation - Contextual - Logical - Logic - Sampler - Samplers - SamplerState - Region - Copying - Copy - Changed - Viewports - Viewport - Adjust - Adjustment - Stereo - StreamStereo - Notice - Minus - Streaming - Some - Alpha - Output - Updates - Update - Colorimetric - Color - Background - Frame - Frames - FrameStep - Future - First - Downloaded - Download - Balanced - Balance - Metadata - Queued - Queue - Purge - Volumes - Volume - Duration - Rate - TimeUpdate - CanPlay - Loading - Loaded - Load - Stable - WaitFor - Wait - Waiting - Rectangle - Rectangles - Rectangle - Inputs - Input - Blendable - Blending - Blend - Decryption - Socket - Location - Indexer - Index - Indexed - Instance - Instanced - Once - Mirror - Unordered - Accessibility - Accessible - Access - Extension - Doubles - Double - Opening - Operations - Open - Change - Classification - Class - Slots - Slot - Open - Inverted - Invert - Subtract - Software - Soft - Indirect - Invalid - Optimization - Optimal - Optimization - Hazards - Hazard - OufOf - Memory - Freely - Free - Data - Create - Misc - Cpu - Accessible - Access - Argument - Arguments - Argument - Blit - Bindable - Binding - Bind - Initialize - Initial - Unrecognized - MSAA - Expected - Unexpected - Usage - Null - Constants - Constant - Large - Last - RenderTargets - RenderTarget - Supported - Unsupported - Format - Too - Drawable - Drawing - Draw - Many - Objects - Object - Shader - Depth - Missing - Element - Notify - Not - Settings - Setting - Private - More - Getting - Setting - Get - Set - Descriptor - Description - Description - ConstantBufferView - ConstantBuffer - TextureBuffer - ExtendedBuffer - Function - Function - Flags - Flags - ShaderResourceView - DepthStencilView - RenderTargetView - UnorderedAccessViews - UnorderedAccessView - Texture - Text - Cube - Texture - 1D - 2D - 3D - Multisampled - RW - ArraySize - ArraySlice - Arrays - Array - Buffers - Buffer - Address - ByteStream - Bytes - Byte - UInt8 - UInt - SInt - UNorm - SNorm - SRgb - WithAdjacency - WithAdjacency - InputAssembly - VertexShader - PixelShader - HullShader - Dsp - Setup - Subset - Unbind - Deleting - OutputMerger - DomainShader - GeometryShader - Rasterizer - ComputeShader - Option - Options - Backface - SingleThreaded - Geometry - Displaying - Display - Finishing - Finished - Finish - Deferred - Context - Compute - Reader - Source - Solid - StreamOutputView - StreamOutput - Operation - Opaque - Opacity - Optimizations - Optimization - Operation - Inverse - Inverse - Source - SecondarySource - Saturation - Saturate - Saturate - Without - Within - Initialization - Miscellaneous - With - StreamOutput - Stream - Streams - Rotation - Destination - Destroy - Destination - Reverb - Video - Processor - Reverse - Reverse - Maximum - Maximum - Minimum - Minimum - Min - Increment - Declaration - Declare - Declaration - Increasing - Decreasing - Decrement - StencilOperation - Stencil - Resources - Resource - Views - MipLevels - View - Sub - Substitution - ConstantBuffer - Information - Information - Description1 - Description2 - Disassembly - FastFourierTransform - DeviceContext - Linear - LineStrip - Lines - Line - List - Listener - Strip - Pointers - Pointer - Points - Point - Triangle - ThreadGroupSharedMemory - IUnknown - UInt32 - UInt64 - - sharpdx-core-ext @@ -445,55 +53,6 @@ winerror - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -503,19 +62,6 @@ // ***************************************************************** --> - - - - - - - - - - - - - @@ -553,7 +99,7 @@ - + @@ -580,9 +126,12 @@ - - + + + + + @@ -612,7 +161,6 @@ - @@ -642,50 +190,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + Unknwnbase + + + objidlbase @@ -722,7 +230,7 @@ - + diff --git a/Source/SharpDX/Mapping.xml b/Source/SharpDX/Mapping.xml index ad4e4d070..2c8f88065 100644 --- a/Source/SharpDX/Mapping.xml +++ b/Source/SharpDX/Mapping.xml @@ -25,8 +25,4 @@ sharpdx-core sharpdx-core-direct3d sharpdx-core-multimedia - - Mapping-core.xml - Direct3D\Mapping.xml - Multimedia\Mapping.xml - \ No newline at end of file + diff --git a/Source/SharpDX/Multimedia/SoundStream.cs b/Source/SharpDX/Multimedia/SoundStream.cs index dd0479820..598da7fd5 100644 --- a/Source/SharpDX/Multimedia/SoundStream.cs +++ b/Source/SharpDX/Multimedia/SoundStream.cs @@ -28,7 +28,6 @@ namespace SharpDX.Multimedia /// public class SoundStream : Stream { - private readonly bool isOwnerOfInput; private Stream input; private long startPositionOfData; private long length; diff --git a/Source/SharpDX/Reflection/ObfuscationAttributes.cs b/Source/SharpDX/Reflection/ObfuscationAttributes.cs deleted file mode 100644 index 39e08d2b4..000000000 --- a/Source/SharpDX/Reflection/ObfuscationAttributes.cs +++ /dev/null @@ -1,132 +0,0 @@ -#if STORE_APP -// Definition of custom attributes for declarative obfuscation. -// This file is only necessary for .NET Compact Framework, Silverlight, WinRT and Portable Library projects. - -using System; -using System.Runtime.InteropServices; - -namespace System.Reflection -{ - /// - /// Instructs obfuscation tools to use their standard obfuscation rules for the appropriate assembly type. - /// - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] - public sealed class ObfuscateAssemblyAttribute : Attribute - { - /// - /// Initializes a new instance of the class, - /// specifying whether the assembly to be obfuscated is public or priyvate. - /// - /// true if the assembly is used within the scope of one application; otherwise, false. - public ObfuscateAssemblyAttribute(bool assemblyIsPrivate) - { - m_assemblyIsPrivate = assemblyIsPrivate; - m_stripAfterObfuscation = true; - } - - bool m_assemblyIsPrivate; - - /// - /// Gets a value indicating whether the assembly was marked private. - /// - /// - /// true if the assembly was marked private; otherwise, false. - /// - public bool AssemblyIsPrivate - { - get { return m_assemblyIsPrivate; } - } - - bool m_stripAfterObfuscation; - - /// - /// Gets or sets a value indicating whether the obfuscation tool should remove the attribute after processing. - /// - /// - /// true if the obfuscation tool should remove the attribute after processing; otherwise, false. - /// The default value for this property is true. - /// - public bool StripAfterObfuscation - { - get { return m_stripAfterObfuscation; } - set { m_stripAfterObfuscation = value; } - } - } - - /// - /// Instructs obfuscation tools to take the specified actions for an assembly, type, or member. - /// - [AttributeUsage(AttributeTargets.Delegate | AttributeTargets.Parameter | AttributeTargets.Interface | AttributeTargets.Event | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Enum | AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)] - public sealed class ObfuscationAttribute : Attribute - { - /// - /// Initializes a new instance of the class. - /// - public ObfuscationAttribute() - { - this.m_applyToMembers = true; - this.m_exclude = true; - this.m_feature = "all"; - this.m_stripAfterObfuscation = true; - } - - bool m_applyToMembers; - - /// - /// Gets or sets a value indicating whether the attribute of a type is to apply to the members of the type. - /// - /// - /// true if the attribute is to apply to the members of the type; otherwise, false. The default is true. - /// - public bool ApplyToMembers - { - get { return m_applyToMembers; } - set { m_applyToMembers = value; } - } - - bool m_exclude; - - /// - /// Gets or sets a value indicating whether the obfuscation tool should exclude the type or member from obfuscation. - /// - /// - /// true if the type or member to which this attribute is applied should be excluded from obfuscation; otherwise, false. - /// The default is true. - /// - public bool Exclude - { - get { return m_exclude; } - set { m_exclude = value; } - } - - string m_feature; - - /// - /// Gets or sets a string value that is recognized by the obfuscation tool, and which specifies processing options. - /// - /// - /// A string value that is recognized by the obfuscation tool, and which specifies processing options. The default is "all". - /// - public string Feature - { - get { return m_feature; } - set { m_feature = value; } - } - - bool m_stripAfterObfuscation; - - /// - /// Gets or sets a value indicating whether the obfuscation tool should remove the attribute after processing. - /// - /// - /// true if the obfuscation tool should remove the attribute after processing; otherwise, false. - /// The default value for this property is true. - /// - public bool StripAfterObfuscation - { - get { return m_stripAfterObfuscation; } - set { m_stripAfterObfuscation = value; } - } - } -} -#endif \ No newline at end of file diff --git a/Source/SharpDX/ResultDescriptor.cs b/Source/SharpDX/ResultDescriptor.cs index cb68c8051..4025374ec 100644 --- a/Source/SharpDX/ResultDescriptor.cs +++ b/Source/SharpDX/ResultDescriptor.cs @@ -278,7 +278,7 @@ private static string GetDescriptionFromResultCode(int resultCode) return description; } -#if WINDOWS_API_SET +#if WINDOWS_UWP [DllImport("api-ms-win-core-localization-l1-2-0.dll", EntryPoint = "FormatMessageW")] private static extern uint FormatMessageW(int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, ref IntPtr lpBuffer, int nSize, IntPtr Arguments); #else diff --git a/Source/SharpDX/SharpDX.csproj b/Source/SharpDX/SharpDX.csproj index 7f2084412..b9efcf329 100644 --- a/Source/SharpDX/SharpDX.csproj +++ b/Source/SharpDX/SharpDX.csproj @@ -1,14 +1,15 @@ - - + + - net40;net45;netcoreapp1.0;netstandard1.1;uap10.0 + net40;net45;netstandard1.1;uap10.0 SharpDX SharpDX - bin\$(Configuration)\$(TargetFramework)\SharpDX.xml + bin\$(Configuration)\$(TargetFramework)\SharpDX.xml SharpDX SharpDX Core assembly for all SharpDX assemblies. + @@ -20,5 +21,5 @@ - + \ No newline at end of file diff --git a/Source/SharpDX/Utilities.cs b/Source/SharpDX/Utilities.cs index fea594602..508c268bc 100644 --- a/Source/SharpDX/Utilities.cs +++ b/Source/SharpDX/Utilities.cs @@ -1039,7 +1039,7 @@ public enum CLSCTX : uint ClsctxAll = ClsctxServer | ClsctxInprocHandler } -#if STORE_APP +#if WINDOWS_UWP [StructLayout(LayoutKind.Sequential)] public struct MultiQueryInterface { @@ -1131,7 +1131,7 @@ public enum CoInit SpeedOverMemory = 0x8 } -#if WINDOWS_API_SET +#if WINDOWS_UWP [DllImport("api-ms-win-core-handle-l1-1-0.dll", EntryPoint = "CloseHandle", SetLastError = true)] internal static extern bool CloseHandle(IntPtr handle); #else @@ -1154,7 +1154,7 @@ public static IntPtr GetProcAddress(IntPtr handle, string dllFunctionToImport) return result; } -#if WINDOWS_API_SET +#if WINDOWS_UWP [DllImport("api-ms-win-core-libraryloader-l1-1-1.dll", EntryPoint = "GetProcAddress", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] static extern IntPtr GetProcAddress_(IntPtr hModule, string procName); #else diff --git a/Source/SharpDX/ComBaseStreamNative.cs b/Source/SharpDX/Win32/ComBaseStreamNative.cs similarity index 100% rename from Source/SharpDX/ComBaseStreamNative.cs rename to Source/SharpDX/Win32/ComBaseStreamNative.cs diff --git a/Source/SharpDX/Win32/ComStream.cs b/Source/SharpDX/Win32/ComStream.cs deleted file mode 100644 index d40f4701d..000000000 --- a/Source/SharpDX/Win32/ComStream.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; - -namespace SharpDX.Win32 -{ - public partial class ComStream - { - /// - /// Copies a specified number of bytes from the current seek pointer in the stream to the current seek pointer in another stream. - /// - /// The stream destination. - /// The number of bytes to copy. - /// The bytes written. - /// The number of bytes read from this instance - public long CopyTo(IStream streamDest, long numberOfBytesToCopy, out long bytesWritten) - { - CopyTo_(ToIntPtr(streamDest), numberOfBytesToCopy, out bytesWritten); - return bytesWritten; - } - - /// - /// Gets a com pointer to the underlying object. - /// - /// The stream. - /// A Com pointer - public static IntPtr ToIntPtr(IStream stream) - { - return ComStreamShadow.ToIntPtr(stream); - } - } -} - diff --git a/Source/SharpDX/Win32/ComStreamShadow.cs b/Source/SharpDX/Win32/ComStreamShadow.cs index 0cca235c9..ecf724ef5 100644 --- a/Source/SharpDX/Win32/ComStreamShadow.cs +++ b/Source/SharpDX/Win32/ComStreamShadow.cs @@ -261,7 +261,7 @@ private static Result CloneImpl(IntPtr thisPtr, out IntPtr streamPointer) var shadow = ToShadow(thisPtr); var callback = ((IStream)shadow.Callback); var clone = callback.Clone(); - streamPointer = ComStream.ToIntPtr(clone); + streamPointer = ComStreamShadow.ToIntPtr(clone); } catch (SharpDXException exception) { diff --git a/Source/Tools/Directory.build.props b/Source/Tools/Directory.build.props new file mode 100644 index 000000000..48f33cfdd --- /dev/null +++ b/Source/Tools/Directory.build.props @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Source/Tools/SharpCli/InteropApp.cs b/Source/Tools/SharpCli/InteropApp.cs deleted file mode 100644 index 8b796cce0..000000000 --- a/Source/Tools/SharpCli/InteropApp.cs +++ /dev/null @@ -1,911 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.Versioning; -using Mono.Cecil; -using Mono.Cecil.Cil; -using Mono.Cecil.Pdb; -using CallSite = Mono.Cecil.CallSite; -using MethodAttributes = Mono.Cecil.MethodAttributes; - -namespace SharpCli -{ - /// - /// InteropBuilder is responsible to patch SharpDX assemblies and inject unmanaged interop call. - /// InteropBuilder is also adding several useful methods: - /// - memcpy using cpblk - /// - Read/ReadRange/Write/WriteRange of structured data to a memory location - /// - SizeOf on generic structures (C# usually doesn't allow this). - /// - public class InteropApp - { - private List classToRemoveList = new List(); - AssemblyDefinition assembly; - private TypeReference voidType; - private TypeReference voidPointerType; - private TypeReference intType; - - /// - /// Creates a module init for a C# assembly. - /// - /// The method to add to the module init. - private void CreateModuleInit(MethodDefinition method) - { - const MethodAttributes ModuleInitAttributes = MethodAttributes.Static - | MethodAttributes.Assembly - | MethodAttributes.SpecialName - | MethodAttributes.RTSpecialName; - - var moduleType = assembly.MainModule.GetType(""); - - // Get or create ModuleInit method - var cctor = moduleType.Methods.FirstOrDefault(moduleTypeMethod => moduleTypeMethod.Name == ".cctor"); - if (cctor == null) - { - cctor = new MethodDefinition(".cctor", ModuleInitAttributes, method.ReturnType); - moduleType.Methods.Add(cctor); - } - - bool isCallAlreadyDone = cctor.Body.Instructions.Any(instruction => instruction.OpCode == OpCodes.Call && instruction.Operand == method); - - // If the method is not called, we can add it - if (!isCallAlreadyDone) - { - var ilProcessor = cctor.Body.GetILProcessor(); - var retInstruction = cctor.Body.Instructions.FirstOrDefault(instruction => instruction.OpCode == OpCodes.Ret); - var callMethod = ilProcessor.Create(OpCodes.Call, method); - - if (retInstruction == null) - { - // If a ret instruction is not present, add the method call and ret - ilProcessor.Append(callMethod); - ilProcessor.Emit(OpCodes.Ret); - } - else - { - // If a ret instruction is already present, just add the method to call before - ilProcessor.InsertBefore(retInstruction, callMethod); - } - } - } - - /// - /// Creates the write method with the following signature: - /// - /// public static unsafe void* Write<T>(void* pDest, ref T data) where T : struct - /// - /// - /// The method to patch - private void CreateWriteMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - var paramT = method.GenericParameters[0]; - // Preparing locals - // local(0) int - method.Body.Variables.Add(new VariableDefinition(intType)); - // local(1) T* - method.Body.Variables.Add(new VariableDefinition(new PinnedType(new ByReferenceType(paramT)))); - - // Push (0) pDest for memcpy - gen.Emit(OpCodes.Ldarg_0); - - // fixed (void* pinnedData = &data[offset]) - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Stloc_1); - - // Push (1) pinnedData for memcpy - gen.Emit(OpCodes.Ldloc_1); - - // totalSize = sizeof(T) - gen.Emit(OpCodes.Sizeof, paramT); - gen.Emit(OpCodes.Conv_I4); - gen.Emit(OpCodes.Stloc_0); - - // Push (2) totalSize - gen.Emit(OpCodes.Ldloc_0); - - // Emit cpblk - EmitCpblk(method, gen); - - // Return pDest + totalSize - gen.Emit(OpCodes.Ldloc_0); - gen.Emit(OpCodes.Conv_I); - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Add); - - // Ret - gen.Emit(OpCodes.Ret); - } - - private void ReplaceFixedStatement(MethodDefinition method, ILProcessor ilProcessor, Instruction fixedtoPatch) - { - var paramT = ((GenericInstanceMethod)fixedtoPatch.Operand).GenericArguments[0]; - // Preparing locals - // local(0) T* - method.Body.Variables.Add(new VariableDefinition("pin", new PinnedType(new ByReferenceType(paramT)))); - - int index = method.Body.Variables.Count - 1; - - Instruction ldlocFixed; - Instruction stlocFixed; - switch (index) - { - case 0: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_0); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_0); - break; - case 1: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_1); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_1); - break; - case 2: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_2); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_2); - break; - case 3: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_3); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_3); - break; - default: - stlocFixed = ilProcessor.Create(OpCodes.Stloc, index); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc, index); - break; - } - ilProcessor.InsertBefore(fixedtoPatch, stlocFixed); - ilProcessor.Replace(fixedtoPatch, ldlocFixed); - } - - private void ReplaceReadInline(MethodDefinition method, ILProcessor ilProcessor, Instruction fixedtoPatch) - { - var paramT = ((GenericInstanceMethod)fixedtoPatch.Operand).GenericArguments[0]; - var copyInstruction = ilProcessor.Create(OpCodes.Ldobj, paramT); - ilProcessor.Replace(fixedtoPatch, copyInstruction); - } - - private void ReplaceCopyInline(MethodDefinition method, ILProcessor ilProcessor, Instruction fixedtoPatch) - { - var paramT = ((GenericInstanceMethod)fixedtoPatch.Operand).GenericArguments[0]; - var copyInstruction = ilProcessor.Create(OpCodes.Cpobj, paramT); - ilProcessor.Replace(fixedtoPatch, copyInstruction); - } - - private void ReplaceSizeOfStructGeneric(MethodDefinition method, ILProcessor ilProcessor, Instruction fixedtoPatch) - { - var paramT = ((GenericInstanceMethod)fixedtoPatch.Operand).GenericArguments[0]; - var copyInstruction = ilProcessor.Create(OpCodes.Sizeof, paramT); - ilProcessor.Replace(fixedtoPatch, copyInstruction); - } - - /// - /// Creates the cast method with the following signature: - /// - /// public static unsafe void* Cast<T>(ref T data) where T : struct - /// - /// - /// The method cast. - private void CreateCastMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - - gen.Emit(OpCodes.Ldarg_0); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Creates the cast method with the following signature: - /// - /// public static TCAST[] CastArray<TCAST, T>(T[] arrayData) where T : struct where TCAST : struct - /// - /// - /// The method cast array. - private void CreateCastArrayMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - - gen.Emit(OpCodes.Ldarg_0); - - // Ret - gen.Emit(OpCodes.Ret); - } - - private void ReplaceFixedArrayStatement(MethodDefinition method, ILProcessor ilProcessor, Instruction fixedtoPatch) - { - var paramT = ((GenericInstanceMethod)fixedtoPatch.Operand).GenericArguments[0]; - // Preparing locals - // local(0) T* - method.Body.Variables.Add(new VariableDefinition("pin", new PinnedType(new ByReferenceType(paramT)))); - - int index = method.Body.Variables.Count - 1; - - Instruction ldlocFixed; - Instruction stlocFixed; - switch (index) - { - case 0: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_0); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_0); - break; - case 1: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_1); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_1); - break; - case 2: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_2); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_2); - break; - case 3: - stlocFixed = ilProcessor.Create(OpCodes.Stloc_3); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc_3); - break; - default: - stlocFixed = ilProcessor.Create(OpCodes.Stloc, index); - ldlocFixed = ilProcessor.Create(OpCodes.Ldloc, index); - break; - } - - var instructionLdci40 = ilProcessor.Create(OpCodes.Ldc_I4_0); - ilProcessor.InsertBefore(fixedtoPatch, instructionLdci40); - var instructionLdElema = ilProcessor.Create(OpCodes.Ldelema, paramT); - ilProcessor.InsertBefore(fixedtoPatch, instructionLdElema); - ilProcessor.InsertBefore(fixedtoPatch, stlocFixed); - ilProcessor.Replace(fixedtoPatch, ldlocFixed); - } - - /// - /// Creates the write range method with the following signature: - /// - /// public static unsafe void* Write<T>(void* pDest, T[] data, int offset, int count) where T : struct - /// - /// - /// The method copy struct. - private void CreateWriteRangeMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - var paramT = method.GenericParameters[0]; - // Preparing locals - // local(0) int - method.Body.Variables.Add(new VariableDefinition(intType)); - // local(1) T* - method.Body.Variables.Add(new VariableDefinition(new PinnedType(new ByReferenceType(paramT)))); - - // Push (0) pDest for memcpy - gen.Emit(OpCodes.Ldarg_0); - - // fixed (void* pinnedData = &data[offset]) - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Ldarg_2); - gen.Emit(OpCodes.Ldelema, paramT); - gen.Emit(OpCodes.Stloc_1); - - // Push (1) pinnedData for memcpy - gen.Emit(OpCodes.Ldloc_1); - - // totalSize = sizeof(T) * count - gen.Emit(OpCodes.Sizeof, paramT); - gen.Emit(OpCodes.Conv_I4); - gen.Emit(OpCodes.Ldarg_3); - gen.Emit(OpCodes.Mul); - gen.Emit(OpCodes.Stloc_0); - - // Push (2) totalSize - gen.Emit(OpCodes.Ldloc_0); - - // Emit cpblk - EmitCpblk(method, gen); - - // Return pDest + totalSize - gen.Emit(OpCodes.Ldloc_0); - gen.Emit(OpCodes.Conv_I); - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Add); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Creates the read method with the following signature: - /// - /// public static unsafe void* Read<T>(void* pSrc, ref T data) where T : struct - /// - /// - /// The method copy struct. - private void CreateReadMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - var paramT = method.GenericParameters[0]; - - // Preparing locals - // local(0) int - method.Body.Variables.Add(new VariableDefinition(intType)); - // local(1) T* - - method.Body.Variables.Add(new VariableDefinition(new PinnedType(new ByReferenceType(paramT)))); - - // fixed (void* pinnedData = &data[offset]) - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Stloc_1); - - // Push (0) pinnedData for memcpy - gen.Emit(OpCodes.Ldloc_1); - - // Push (1) pSrc for memcpy - gen.Emit(OpCodes.Ldarg_0); - - // totalSize = sizeof(T) - gen.Emit(OpCodes.Sizeof, paramT); - gen.Emit(OpCodes.Conv_I4); - gen.Emit(OpCodes.Stloc_0); - - // Push (2) totalSize - gen.Emit(OpCodes.Ldloc_0); - - // Emit cpblk - EmitCpblk(method, gen); - - // Return pDest + totalSize - gen.Emit(OpCodes.Ldloc_0); - gen.Emit(OpCodes.Conv_I); - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Add); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Creates the read method with the following signature: - /// - /// public static unsafe void Read<T>(void* pSrc, ref T data) where T : struct - /// - /// - /// The method copy struct. - private void CreateReadRawMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - var paramT = method.GenericParameters[0]; - - // Push (1) pSrc for memcpy - gen.Emit(OpCodes.Cpobj); - - } - - /// - /// Creates the read range method with the following signature: - /// - /// public static unsafe void* Read<T>(void* pSrc, T[] data, int offset, int count) where T : struct - /// - /// - /// The method copy struct. - private void CreateReadRangeMethod(MethodDefinition method) - { - method.Body.Instructions.Clear(); - method.Body.InitLocals = true; - - var gen = method.Body.GetILProcessor(); - var paramT = method.GenericParameters[0]; - // Preparing locals - // local(0) int - method.Body.Variables.Add(new VariableDefinition(intType)); - // local(1) T* - method.Body.Variables.Add(new VariableDefinition(new PinnedType(new ByReferenceType(paramT)))); - - // fixed (void* pinnedData = &data[offset]) - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Ldarg_2); - gen.Emit(OpCodes.Ldelema, paramT); - gen.Emit(OpCodes.Stloc_1); - - // Push (0) pinnedData for memcpy - gen.Emit(OpCodes.Ldloc_1); - - // Push (1) pDest for memcpy - gen.Emit(OpCodes.Ldarg_0); - - // totalSize = sizeof(T) * count - gen.Emit(OpCodes.Sizeof, paramT); - gen.Emit(OpCodes.Conv_I4); - gen.Emit(OpCodes.Ldarg_3); - gen.Emit(OpCodes.Conv_I4); - gen.Emit(OpCodes.Mul); - gen.Emit(OpCodes.Stloc_0); - - // Push (2) totalSize - gen.Emit(OpCodes.Ldloc_0); - - // Emit cpblk - EmitCpblk(method, gen); - - // Return pDest + totalSize - gen.Emit(OpCodes.Ldloc_0); - gen.Emit(OpCodes.Conv_I); - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Add); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Creates the memcpy method with the following signature: - /// - /// public static unsafe void memcpy(void* pDest, void* pSrc, int count) - /// - /// - /// The method copy struct. - private void CreateMemcpy(MethodDefinition methodCopyStruct) - { - methodCopyStruct.Body.Instructions.Clear(); - - var gen = methodCopyStruct.Body.GetILProcessor(); - - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Ldarg_2); - gen.Emit(OpCodes.Unaligned, (byte)1); // unaligned to 1 - gen.Emit(OpCodes.Cpblk); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Creates the memset method with the following signature: - /// - /// public static unsafe void memset(void* pDest, byte value, int count) - /// - /// - /// The method set struct. - private void CreateMemset(MethodDefinition methodSetStruct) - { - methodSetStruct.Body.Instructions.Clear(); - - var gen = methodSetStruct.Body.GetILProcessor(); - - gen.Emit(OpCodes.Ldarg_0); - gen.Emit(OpCodes.Ldarg_1); - gen.Emit(OpCodes.Ldarg_2); - gen.Emit(OpCodes.Unaligned, (byte)1); // unaligned to 1 - gen.Emit(OpCodes.Initblk); - - // Ret - gen.Emit(OpCodes.Ret); - } - - /// - /// Emits the cpblk method, supporting x86 and x64 platform. - /// - /// The method. - /// The gen. - private void EmitCpblk(MethodDefinition method, ILProcessor gen) - { - var cpblk = gen.Create(OpCodes.Cpblk); - //gen.Emit(OpCodes.Sizeof, voidPointerType); - //gen.Emit(OpCodes.Ldc_I4_8); - //gen.Emit(OpCodes.Bne_Un_S, cpblk); - gen.Emit(OpCodes.Unaligned, (byte)1); // unaligned to 1 - gen.Append(cpblk); - - } - - private List GetSharpDXAttributes(MethodDefinition method) - { - var attributes = new List(); - foreach (var customAttribute in method.CustomAttributes) - { - if (customAttribute.AttributeType.FullName == "SharpDX.TagAttribute") - { - var value = customAttribute.ConstructorArguments[0].Value; - attributes.Add(value == null ? string.Empty : value.ToString()); - } - } - - return attributes; - } - - /// - /// Patches the method. - /// - /// The method. - bool PatchMethod(MethodDefinition method) - { - bool isSharpJit = false; - - var attributes = this.GetSharpDXAttributes(method); - if (attributes.Contains("SharpDX.ModuleInit")) - { - CreateModuleInit(method); - } - - if (method.DeclaringType.Name == "Interop") - { - if (method.Name == "memcpy") - { - CreateMemcpy(method); - } - else if (method.Name == "memset") - { - CreateMemset(method); - } - else if ((method.Name == "Cast") || (method.Name == "CastOut")) - { - CreateCastMethod(method); - } - else if (method.Name == "CastArray") - { - CreateCastArrayMethod(method); - } - else if (method.Name == "Read" || (method.Name == "ReadOut") || (method.Name == "Read2D")) - { - if (method.Parameters.Count == 2) - CreateReadMethod(method); - else - CreateReadRangeMethod(method); - } - else if (method.Name == "Write" || (method.Name == "Write2D")) - { - if (method.Parameters.Count == 2) - CreateWriteMethod(method); - else - CreateWriteRangeMethod(method); - } - } - else if (method.HasBody) - { - var ilProcessor = method.Body.GetILProcessor(); - - var instructions = method.Body.Instructions; - Instruction instruction = null; - Instruction previousInstruction; - for (int i = 0; i < instructions.Count; i++) - { - previousInstruction = instruction; - instruction = instructions[i]; - - if (instruction.OpCode == OpCodes.Call && instruction.Operand is MethodReference) - { - var methodDescription = (MethodReference)instruction.Operand; - - if (methodDescription is MethodDefinition) - { - foreach (var customAttribute in ((MethodDefinition)methodDescription).CustomAttributes) - { - if (customAttribute.AttributeType.FullName == typeof(ObfuscationAttribute).FullName) - { - foreach (var arg in customAttribute.Properties) - { - if (arg.Name == "Feature" && arg.Argument.Value != null) - { - var customValue = arg.Argument.Value.ToString(); - if (customValue.StartsWith("SharpJit.")) - { - isSharpJit = true; - break; - } - } - } - } - if (isSharpJit) break; - } - } - - if (!isSharpJit) - { - if (methodDescription.Name.StartsWith("Calli") && methodDescription.DeclaringType.Name == "LocalInterop") - { - var callSite = new CallSite(methodDescription.ReturnType) { CallingConvention = MethodCallingConvention.StdCall }; - // Last parameter is the function ptr, so we don't add it as a parameter for calli - // as it is already an implicit parameter for calli - for (int j = 0; j < methodDescription.Parameters.Count - 1; j++) - { - var parameterDefinition = methodDescription.Parameters[j]; - callSite.Parameters.Add(parameterDefinition); - } - - // Create calli Instruction - var callIInstruction = ilProcessor.Create(OpCodes.Calli, callSite); - - // Replace instruction - ilProcessor.Replace(instruction, callIInstruction); - } - else if (methodDescription.DeclaringType.Name == "Interop") - { - if (methodDescription.FullName.Contains("Fixed")) - { - if (methodDescription.Parameters[0].ParameterType.IsArray) - { - ReplaceFixedArrayStatement(method, ilProcessor, instruction); - } - else - { - ReplaceFixedStatement(method, ilProcessor, instruction); - } - } - else if (methodDescription.Name.StartsWith("ReadInline")) - { - this.ReplaceReadInline(method, ilProcessor, instruction); - } - else if (methodDescription.Name.StartsWith("CopyInline") || methodDescription.Name.StartsWith("WriteInline")) - { - this.ReplaceCopyInline(method, ilProcessor, instruction); - } - else if (methodDescription.Name.StartsWith("SizeOf")) - { - this.ReplaceSizeOfStructGeneric(method, ilProcessor, instruction); - } - } - } - } - } - } - return isSharpJit; - } - - bool containsSharpJit; - - /// - /// Patches the type. - /// - /// The type. - void PatchType(TypeDefinition type) - { - // Patch methods - foreach (var method in type.Methods) - if (PatchMethod(method)) - containsSharpJit = true; - - // LocalInterop will be removed after the patch only for non SharpJit code - if (!containsSharpJit && type.Name == "LocalInterop") - classToRemoveList.Add(type); - - // Patch nested types - foreach (var typeDefinition in type.NestedTypes) - PatchType(typeDefinition); - } - - /// - /// Determines whether [is file check updated] [the specified file]. - /// - /// The file. - /// From file. - /// - /// true if [is file check updated] [the specified file]; otherwise, false. - /// - static bool IsFileCheckUpdated(string file, string fromFile) - { - return File.Exists(file) && File.GetLastWriteTime(file) == File.GetLastWriteTime(fromFile); - } - - /// - /// Get Program Files x86 - /// - /// - static string ProgramFilesx86() - { - if (8 == IntPtr.Size - || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))) - || Environment.GetEnvironmentVariable("ProgramFiles(x86)") != null) - { - return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); - } - - return Environment.GetEnvironmentVariable("ProgramFiles"); - } - - /// - /// Patches the file. - /// - /// The file. - public bool PatchFile(string file) - { - file = Path.Combine(Environment.CurrentDirectory, file); - - var fileTime = new FileTime(file); - //var fileTimeInteropBuilder = new FileTime(Assembly.GetExecutingAssembly().Location); - string checkFile = Path.GetFullPath(file) + ".check"; - //string checkInteropBuilderFile = "InteropBuild.check"; - - // If checkFile and checkInteropBuilderFile up-to-date, then nothing to do - if (fileTime.CheckFileUpToDate(checkFile)) - { - Log("Nothing to do. SharpDX patch was already applied for assembly [{0}]", file); - return false; - } - - // Copy PDB from input assembly to output assembly if any - var readerParameters = new ReaderParameters(); - var resolver = new DefaultAssemblyResolver(); - readerParameters.AssemblyResolver = resolver; - var writerParameters = new WriterParameters(); - var pdbName = Path.ChangeExtension(file, "pdb"); - if (File.Exists(pdbName)) - { - var symbolReaderProvider = new PdbReaderProvider(); - readerParameters.SymbolReaderProvider = symbolReaderProvider; - readerParameters.ReadSymbols = true; - writerParameters.WriteSymbols = true; - } - - // Read Assembly - assembly = AssemblyDefinition.ReadAssembly(file, readerParameters); - resolver.AddSearchDirectory(Path.GetDirectoryName(file)); - - // Query the target framework in order to resolve correct assemblies and type forwarding - var targetFrameworkAttr = assembly.CustomAttributes.FirstOrDefault( - attribute => attribute.Constructor.FullName.Contains("System.Runtime.Versioning.TargetFrameworkAttribute")); - if(targetFrameworkAttr != null && targetFrameworkAttr.ConstructorArguments.Count > 0 && - targetFrameworkAttr.ConstructorArguments[0].Value != null) - { - var targetFramework = new FrameworkName(targetFrameworkAttr.ConstructorArguments[0].Value.ToString()); - - var netcoreAssemblyPath = string.Format(@"Reference Assemblies\Microsoft\Framework\{0}\v{1}", - targetFramework.Identifier, - targetFramework.Version); - netcoreAssemblyPath = Path.Combine(ProgramFilesx86(), netcoreAssemblyPath); - if(Directory.Exists(netcoreAssemblyPath)) - { - resolver.AddSearchDirectory(netcoreAssemblyPath); - } - } - - // Import void* and int32 - voidType = assembly.MainModule.TypeSystem.Void.Resolve(); - voidPointerType = new PointerType(assembly.MainModule.Import(voidType)); - intType = assembly.MainModule.Import( assembly.MainModule.TypeSystem.Int32.Resolve()); - - // Remove CompilationRelaxationsAttribute - for (int i = 0; i < assembly.CustomAttributes.Count; i++) - { - var customAttribute = assembly.CustomAttributes[i]; - if (customAttribute.AttributeType.FullName == typeof(CompilationRelaxationsAttribute).FullName) - { - assembly.CustomAttributes.RemoveAt(i); - i--; - } - } - - Log("SharpDX interop patch for assembly [{0}]", file); - foreach (var type in assembly.MainModule.Types) - PatchType(type); - - // Remove All Interop classes - foreach (var type in classToRemoveList) - assembly.MainModule.Types.Remove(type); - - var outputFilePath = file; - assembly.Write(outputFilePath, writerParameters); - - fileTime = new FileTime(file); - // Update Check file - fileTime.UpdateCheckFile(checkFile); - //fileTimeInteropBuilder.UpdateCheckFile(checkInteropBuilderFile); - - Log("SharpDX patch done for assembly [{0}]", file); - return true; - } - /// - /// Main of this program. - /// - /// The args. - static void Main(string[] args) - { - try - { - if (args.Length != 1) - { - Console.WriteLine("{0} file_path is expecting one file argument", - Assembly.GetExecutingAssembly().GetName().Name); - Environment.Exit(1); - } - - string file = args[0]; - var program = new InteropApp(); - program.PatchFile(file); - } - catch (Exception ex) - { - Console.WriteLine(ex); - Environment.Exit(1); - } - } - - public void Log(string message, params object[] parameters) - { - Console.WriteLine(message, parameters); - } - - public void LogError(string message, params object[] parameters) - { - Console.WriteLine(message, parameters); - } - - public void LogError(Exception ex) - { - Console.WriteLine(ex.ToString()); - } - - /// - /// FileTime. - /// - class FileTime - { - private DateTime CreateTime; - private DateTime LastAccessTime; - private DateTime LastWriteTime; - - public FileTime(string file) - { - CreateTime = File.GetCreationTime(file); - LastAccessTime = File.GetLastAccessTime(file); - LastWriteTime = File.GetLastWriteTime(file); - } - - public void UpdateCheckFile(string checkFile) - { - File.WriteAllText(checkFile, ""); - UpdateFile(checkFile); - } - - /// - /// Checks the file. - /// - /// The file to check. - /// true if the file exist and has the same LastWriteTime - public bool CheckFileUpToDate(string checkfile) - { - return File.Exists(checkfile) && File.GetLastWriteTime(checkfile) == LastWriteTime; - } - - public void UpdateFile(string file) - { - File.SetCreationTime(file, CreateTime); - File.SetLastWriteTime(file, LastWriteTime); - File.SetLastAccessTime(file, LastAccessTime); - } - } - - } -} diff --git a/Source/Tools/SharpCli/Properties/AssemblyInfo.cs b/Source/Tools/SharpCli/Properties/AssemblyInfo.cs deleted file mode 100644 index e2cdd416b..000000000 --- a/Source/Tools/SharpCli/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Reflection; - -[assembly: AssemblyProduct("SharpCli")] -[assembly: AssemblyTitle("SharpCli")] -[assembly: AssemblyDescription("Assembly providing core tools for SharpDX Tools")] \ No newline at end of file diff --git a/Source/Tools/SharpCli/SharpCli.csproj b/Source/Tools/SharpCli/SharpCli.csproj deleted file mode 100644 index a53135435..000000000 --- a/Source/Tools/SharpCli/SharpCli.csproj +++ /dev/null @@ -1,85 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {4E2D9A17-2195-4A51-AAE3-924517440293} - Exe - Properties - SharpCli - SharpCli - v4.5 - 512 - - - - true - - - true - bin\Debug\ - DEBUG;TRACE - full - AnyCPU - prompt - false - - - Bin\Release\ - DEBUG;TRACE - - full - AnyCPU - prompt - - - false - - - - - - SharpCli.ico - - - - ..\..\..\External\Mono.Cecil\Mono.Cecil.dll - - - ..\..\..\External\Mono.Cecil\Mono.Cecil.Pdb.dll - - - - - - Properties\SharedAssemblyInfo.cs - - - - - - - - - - - - - - $(SolutionDir)Source\Bin\ - $(TargetTaskDir)$(TargetFileName) - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpCli/SharpCli.ico b/Source/Tools/SharpCli/SharpCli.ico deleted file mode 100644 index 5cfa86ef9..000000000 Binary files a/Source/Tools/SharpCli/SharpCli.ico and /dev/null differ diff --git a/Source/Tools/SharpCli/app.config b/Source/Tools/SharpCli/app.config deleted file mode 100644 index c5e1daefd..000000000 --- a/Source/Tools/SharpCli/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Source/Tools/SharpCli/logo_sharp_cli.ico b/Source/Tools/SharpCli/logo_sharp_cli.ico deleted file mode 100644 index d6a67cafd..000000000 Binary files a/Source/Tools/SharpCli/logo_sharp_cli.ico and /dev/null differ diff --git a/Source/Tools/SharpGen/CodeGenApp.cs b/Source/Tools/SharpGen/CodeGenApp.cs deleted file mode 100644 index 26f52262d..000000000 --- a/Source/Tools/SharpGen/CodeGenApp.cs +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using Mono.Options; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.Generator; -using SharpGen.Parser; - -namespace SharpGen -{ - /// - /// CodeGen Application. - /// - public class CodeGenApp - { - /// - /// Initializes a new instance of the class. - /// - public CodeGenApp() - { - Macros = new HashSet(); - } - - /// - /// Gets or sets a value indicating whether this instance is generating doc. - /// - /// - /// true if this instance is generating doc; otherwise, false. - /// - public bool IsGeneratingDoc { get; set; } - - /// - /// Gets or sets the path to a C++ document provider assembly. - /// - /// The path to a C++ document provider assembly. - public string DocProviderAssemblyPath { get; set; } - - /// - /// Gets or sets the CastXML executable path. - /// - /// The CastXML executable path. - public string CastXmlExecutablePath { get; set; } - - /// - /// Gets or sets the path to the Visual C++ toolset - /// - /// The Visual C++ toolset path - public string VcToolsPath { get; set; } - - /// - /// Gets or sets the app configuration. - /// - /// The application configuration - public string AppType { get; set; } - - /// - /// Gets or sets the macros. - /// - /// - /// The macros. - /// - public HashSet Macros { get; set; } - - private ConfigFile Config { get; set; } - - private string _thisAssemblyPath; - private bool _isAssemblyNew; - private DateTime _assemblyDatetime; - private string _assemblyCheckFile; - private string _generatedPath; - private string _allConfigCheck; - private string _configRootPath; - - /// - /// Print usages the error. - /// - /// The error. - /// The parameters. - private static void UsageError(string error, params object[] parameters) - { - var exeName = Path.GetFileName(Assembly.GetEntryAssembly().Location); - Console.Write("{0}: ", exeName); - Console.WriteLine(error, parameters); - Console.WriteLine("Use {0} --help' for more information.", exeName); - Environment.Exit(1); - } - - /// - /// Parses the command line arguments. - /// - /// The args. - public void ParseArguments(string[] args) - { - var showHelp = false; - - var options = new OptionSet() - { - "Copyright (c) 2010-2014 SharpDX - Alexandre Mutel", - "Usage: SharpGen [options] config_file.xml", - "Code generator from C++ to C# for .Net languages", - "", - {"c|castxml=", "Specify the path to castxml.exe", opt => CastXmlExecutablePath = opt}, - {"d|doc", "Specify to generate the documentation [default: false]", opt => IsGeneratingDoc = true}, - {"p|docpath=", "Specify the path to the assembly doc provider [default: null]", opt => DocProviderAssemblyPath = opt}, - {"v|vctools=", "Specify the path to the Visual C++ Toolset", opt => VcToolsPath = opt }, - {"a|apptype=", "Specify what app type to generate code for (i.e. DESKTOP_APP or STORE_APP)", opt => AppType = opt }, - "", - {"h|help", "Show this message and exit", opt => showHelp = opt != null}, - // default - {"<>", opt => _configRootPath = opt }, - }; - try - { - options.Parse(args); - } - catch (OptionException e) - { - UsageError(e.Message); - } - - if (showHelp) - { - options.WriteOptionDescriptions(Console.Out); - Environment.Exit(0); - } - - if (_configRootPath == null) - UsageError("Missing config.xml. A config.xml must be specified"); - } - - /// - /// Initializes the specified instance with a config root file. - /// - /// true if the config or assembly changed from the last run; otherwise returns false - public bool Init() - { - _thisAssemblyPath = Assembly.GetExecutingAssembly().Location; - _assemblyCheckFile = Path.ChangeExtension(_thisAssemblyPath, ".check-" + AppType); - _assemblyDatetime = File.GetLastWriteTime(_thisAssemblyPath); - _isAssemblyNew = (File.GetLastWriteTime(_thisAssemblyPath) != File.GetLastWriteTime(_assemblyCheckFile)); - _generatedPath = Path.GetDirectoryName(_configRootPath); - - Logger.Message("Loading config files..."); - - Macros.Add("DIRECTX11_1"); - Macros.Add(AppType); - - Config = ConfigFile.Load(_configRootPath, Macros.ToArray(), new KeyValue("VC_TOOLS_PATH", VcToolsPath)); - var latestConfigTime = ConfigFile.GetLatestTimestamp(Config.ConfigFilesLoaded); - - _allConfigCheck = Config.Id + "-" + AppType + "-CodeGen.check"; - - var isConfigFileChanged = !File.Exists(_allConfigCheck) || latestConfigTime > File.GetLastWriteTime(_allConfigCheck); - - if(_isAssemblyNew) - { - Logger.Message("Assembly [{0}] changed. All files will be generated", _thisAssemblyPath); - } - else if(isConfigFileChanged) - { - Logger.Message("Config files [{0}] changed", string.Join(",", Config.ConfigFilesLoaded.Select(file => Path.GetFileName(file.AbsoluteFilePath)))); - } - - // Return true if a config file changed or the assembly changed - return isConfigFileChanged || _isAssemblyNew; - } - - /// - /// Run CodeGenerator - /// - public void Run() - { - Logger.Progress(0, "Starting code generation..."); - - try - { - // Run the parser - var parser = new Parser.CppParser - { - IsGeneratingDoc = IsGeneratingDoc, - DocProviderAssembly = DocProviderAssemblyPath, - // @"..\..\..\DocProviderFromMsdn\bin\debug\DocProviderFromMsdn.exe", - ForceParsing = _isAssemblyNew, - CastXmlExecutablePath = CastXmlExecutablePath - }; - - // Init the parser - parser.Init(Config); - - if (Logger.HasErrors) - Logger.Fatal("Initializing parser failed"); - - // Run the parser - var group = parser.Run(); - - if (Logger.HasErrors) - Logger.Fatal("C++ compiler failed to parse header files"); - - // Run the main mapping process - var transformer = new TransformManager - { - GeneratedPath = _generatedPath, - ForceGenerator = _isAssemblyNew, - AppType = AppType - }; - - transformer.Init(group, Config); - - if (Logger.HasErrors) - Logger.Fatal("Mapping rules initialization failed"); - - transformer.Generate(); - - if (Logger.HasErrors) - Logger.Fatal("Code generation failed"); - - - // Print statistics - parser.PrintStatistics(); - transformer.PrintStatistics(); - - // Output all elements - var fileWriter = new StreamWriter("SharpGen_rename.log"); - transformer.NamingRules.DumpRenames(fileWriter); - fileWriter.Close(); - - // Update Checkfile for assembly - File.WriteAllText(_assemblyCheckFile, ""); - File.SetLastWriteTime(_assemblyCheckFile, _assemblyDatetime); - - // Update Checkfile for all config files - File.WriteAllText(_allConfigCheck, ""); - File.SetLastWriteTime(_allConfigCheck, DateTime.Now); - } - finally - { - Logger.Progress(100, "Finished"); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/BindRule.cs b/Source/Tools/SharpGen/Config/BindRule.cs deleted file mode 100644 index acf0a64a1..000000000 --- a/Source/Tools/SharpGen/Config/BindRule.cs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// Binding rule. Bind a cpp type to a C#/.Net type. - /// Usage: bind from="CPP_TYPE_NAME" to="C#_FULLTYPE_NAME" - /// - [XmlType("bind")] - public class BindRule : ConfigBaseRule - { - /// - /// Initializes a new instance of the class. - /// - public BindRule() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The cpp type - /// The C# type - public BindRule(string @from, string to) - { - From = from; - To = to; - } - - /// - /// Initializes a new instance of the class. - /// - /// The c++ type - /// The C# public type - /// The C# marshal type - public BindRule(string @from, string to, string marshal) - { - From = from; - To = to; - Marshal = marshal; - } - - /// - /// Gets or sets the cpp from type. - /// - /// From cpp type - [XmlAttribute("from")] - public string From { get; set; } - - /// - /// Gets or sets the C# to type - /// - /// To. - [XmlAttribute("to")] - public string To { get; set; } - - /// - /// Gets or sets the C# the marshal type - /// - /// To. - [XmlAttribute("marshal")] - public string Marshal { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} from:{1} to:{2} marshal:{3}", base.ToString(), From, To, Marshal); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ConfigBaseRule.cs b/Source/Tools/SharpGen/Config/ConfigBaseRule.cs deleted file mode 100644 index b2c8e5e8d..000000000 --- a/Source/Tools/SharpGen/Config/ConfigBaseRule.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// Abstract Rule base class for all rules in . - /// - public abstract class ConfigBaseRule - { - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - // Print the names of this rule using the XmlTypeAttribute name if present. - var attributes = GetType().GetCustomAttributes(typeof (XmlTypeAttribute), true); - string name = GetType().Name; - if (attributes.Length > 0) - name = ((XmlTypeAttribute) attributes[0]).TypeName; - return name; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ConfigFile.cs b/Source/Tools/SharpGen/Config/ConfigFile.cs deleted file mode 100644 index 77c9bfc3e..000000000 --- a/Source/Tools/SharpGen/Config/ConfigFile.cs +++ /dev/null @@ -1,592 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using System.Xml.Serialization; -using SharpGen.Logging; - -namespace SharpGen.Config -{ - /// - /// Config File. - /// - [XmlRoot("config", Namespace=NS)] - public class ConfigFile - { - internal const string NS = "urn:SharpGen.Config"; - - public ConfigFile() - { - Depends = new List(); - Files = new List(); - References = new List(); - IncludeProlog = new List(); - IncludeDirs = new List(); - Variables = new List(); - Naming = new List(); - Includes = new List(); - Mappings = new List(); - DynamicVariables = new Dictionary(); - } - - /// - /// Gets dynamic variables used by dynamic variable substitution #{MyVariable} - /// - /// The dynamic variables. - [XmlIgnore] - public Dictionary DynamicVariables { get; private set; } - - /// - /// Adds a dynamic variable. Remove any previous variable with the same key. - /// - /// The key. - /// The value. - public void AddDynamicVariable(string key, string value) - { - DynamicVariables.Remove(key); - DynamicVariables.Add(key, value); - } - - /// - /// Gets or sets the parent of this mapping file. - /// - /// The parent. - [XmlIgnore] - public ConfigFile Parent { get; set; } - - /// - /// Gets or sets the path of this MappingFile. If not null, used when saving this file. - /// - /// The path. - [XmlIgnore] - public string FilePath { get; set; } - - [XmlIgnore] - public string AbsoluteFilePath - { - get - { - if (Path.IsPathRooted(FilePath)) - return FilePath; - if (Parent != null) - return Path.Combine(Path.GetDirectoryName(Parent.AbsoluteFilePath), FilePath);; - return Path.GetFullPath(Path.Combine(".", FilePath)); - } - } - - - /* - private static void AddDependency(MappingFile configFile, List dependencyList) - { - // Dependency is already done for this file - foreach (var mappingFile in dependencyList) - if (mappingFile.Id == configFile.Id) - return; - - foreach (var configId in configFile.Depends) - AddDependency(configFile.MapIdToFile[configId], dependencyList); - - dependencyList.Add(configFile); - } - - public List ComputeDependencyList() - { - var dependency = new List(); - dependency.Add(GetRoot().Id); - - var configToProcess = new List(); - configToProcess.AddRange(ConfigFiles); - - - do - { - for (int i = configToProcess.Count - 1; i >= 0; i--) - { - var config = configToProcess[i]; - - bool dependencyAllResolved = true; - foreach (var configId in config.Depends) - { - if (!dependency.Contains(configId)) - { - dependencyAllResolved = false; - break; - } - } - if (dependencyAllResolved) - { - dependency.Add(config.Id); - configToProcess.RemoveAt(i); - } - } - } while (configToProcess.Count > 0); - } - */ - - [XmlAttribute("id")] - public string Id { get; set; } - - [XmlElement("depends")] - public List Depends { get; set; } - - [XmlElement("namespace")] - public string Namespace { get; set; } - - [XmlElement("assembly")] - public string Assembly { get; set; } - - [XmlElement("var")] - public List Variables { get; set; } - - [XmlElement("file")] - public List Files { get; set; } - - [XmlIgnore] - public List References { get; set; } - - [XmlElement("include-dir")] - public List IncludeDirs { get; set; } - - [XmlElement("include-prolog")] - public List IncludeProlog { get; set; } - - [XmlElement("include")] - public List Includes { get; set; } - - [XmlArray("naming"),XmlArrayItem(typeof(NamingRuleShort))] - public List Naming { get; set; } - - [XmlElement("context-set")] - public List ContextSets { get; set; } - - [XmlArray("extension")] - [XmlArrayItem(typeof(ContextRule))] - [XmlArrayItem(typeof(CreateExtensionRule))] - [XmlArrayItem(typeof(CreateCppExtensionRule))] - [XmlArrayItem(typeof(DefineExtensionRule))] - [XmlArrayItem(typeof(ConstantRule))] - public List Extension { get; set; } - - [XmlIgnore] - public string ExtensionId { get { return Id + "-ext"; } } - - /// - /// Gets the name of the extension header file. - /// - /// The name of the extension header file. - [XmlIgnore] - public string ExtensionFileName { get { return ExtensionId + ".h"; } } - - [XmlArray("bindings")] - public List Bindings { get; set; } - - [XmlArray("mapping")] - [XmlArrayItem(typeof(MappingRule))] - [XmlArrayItem(typeof(MoveRule))] - [XmlArrayItem(typeof(RemoveRule))] - [XmlArrayItem(typeof(ContextRule))] - [XmlArrayItem(typeof(ClearContextRule))] - public List Mappings { get; set; } - - /// - /// Gets or sets a value indicating whether this config was updated. - /// - /// - /// true if this config was updated; otherwise, false. - /// - [XmlIgnore] - public bool IsConfigUpdated { get; set; } - - /// - /// Returns all depend config files - /// - /// - public List FindAllDependencies() - { - var dependencies = new List(); - FindAllDependencies(dependencies); - return dependencies; - } - - /// - /// Finds all dependencies ConfigFile from this instance. - /// - /// The dependencies list to fill. - public void FindAllDependencies(List dependencyListOutput) - { - foreach (var dependConfigFileId in Depends) - { - var linkedConfig = GetRoot().MapIdToFile[dependConfigFileId]; - if (!dependencyListOutput.Contains(linkedConfig)) - dependencyListOutput.Add(linkedConfig); - - linkedConfig.FindAllDependencies(dependencyListOutput); - } - } - - /// - /// Gets or sets a value indicating whether we need to process mappings. - /// - /// - /// true if this instance is mapping to process; otherwise, false. - /// - [XmlIgnore] - public bool IsMappingToProcess { get; set; } - - /// - /// Indicates whether the current object is equal to another object of the same type. - /// - /// An object to compare with this object. - /// - /// true if the current object is equal to the parameter; otherwise, false. - /// - public bool Equals(ConfigFile other) - { - if (ReferenceEquals(null, other)) return false; - if (ReferenceEquals(this, other)) return true; - return Equals(other.Id, Id); - } - - /// - /// Determines whether the specified is equal to this instance. - /// - /// The to compare with this instance. - /// - /// true if the specified is equal to this instance; otherwise, false. - /// - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != typeof (ConfigFile)) return false; - return Equals((ConfigFile) obj); - } - - /// - /// Returns a hash code for this instance. - /// - /// - /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - /// - public override int GetHashCode() - { - return (Id != null ? Id.GetHashCode() : 0); - } - - /// - /// Finds a context set by Id. - /// - /// The context set id. - /// - public ContextSetRule FindContextSetById(string contextSetId) - { - if (ContextSets != null) - return ContextSets.FirstOrDefault(contextSetRule => contextSetRule.Id == contextSetId); - return null; - } - - /// - /// Expands all dynamic variables used inside Bindings and Mappings tags. - /// - /// if set to true [expand dynamic variable]. - public void ExpandVariables(bool expandDynamicVariable) - { - ExpandVariables(Variables, expandDynamicVariable); - ExpandVariables(Includes, expandDynamicVariable); - ExpandVariables(IncludeDirs, expandDynamicVariable); - ExpandVariables(Bindings, expandDynamicVariable); - ExpandVariables(Mappings, expandDynamicVariable); - // Do it recursively - foreach (var configFile in References) - configFile.ExpandVariables(expandDynamicVariable); - } - - /// - /// Iterate on all objects and sub-objects to expand dynamic variable - /// - /// The object to expand. - /// the expanded object - private object ExpandVariables(object objectToExpand, bool expandDynamicVariable) - { - if (objectToExpand == null) - return null; - if (objectToExpand is string) - return ExpandString((string)objectToExpand, expandDynamicVariable); - if (objectToExpand.GetType().IsPrimitive) - return objectToExpand; - if (objectToExpand is IList) - { - var list = ((IList) objectToExpand); - for (int i = 0; i < list.Count; i++) - list[i] = ExpandVariables(list[i], expandDynamicVariable); - return list; - } - foreach (var propertyInfo in objectToExpand.GetType().GetProperties()) - { - if (propertyInfo.GetCustomAttributes(typeof(XmlIgnoreAttribute), false).Length == 0) - { - // Check that this field is "ShouldSerializable" - var method = objectToExpand.GetType().GetMethod("ShouldSerialize" + propertyInfo.Name); - if (method != null && !((bool)method.Invoke(objectToExpand, null))) - continue; - - propertyInfo.SetValue(objectToExpand, ExpandVariables(propertyInfo.GetValue(objectToExpand, null), expandDynamicVariable), null); - } - } - return objectToExpand; - } - - - /// - /// Gets a variable value. Value is expanded if it contains any reference to other variables. - /// - /// Name of the variable. - /// the value of this variable - private string GetVariable(string variableName) - { - foreach (var keyValue in Variables) - { - if (keyValue.Name == variableName) - return ExpandString(keyValue.Value, false); - } - if (Parent != null) - return Parent.GetVariable(variableName); - return null; - } - - /// - /// Regex used to expand variable - /// - static readonly Regex ReplaceVariableRegex = new Regex(@"\$\(([a-zA-Z_][\w_]*)\)", RegexOptions.Compiled); - static readonly Regex ReplaceDynamicVariableRegex = new Regex(@"#\(([a-zA-Z_][\w_]*)\)", RegexOptions.Compiled); - - /// - /// Expands a string using environment variable and variables defined in mapping files. - /// - /// The string to expand. - /// the expanded string - public string ExpandString(string str, bool expandDynamicVariable) - { - var result = str; - - // Perform Config Variable substitution - if (ReplaceVariableRegex.Match(result).Success) - { - result = ReplaceVariableRegex.Replace(result, delegate(Match match) - { - string name = match.Groups[1].Value; - string localResult = GetVariable(name); - if (localResult == null) - localResult = Environment.GetEnvironmentVariable(name); - if (localResult == null) - { - Logger.Error("Unable to substitute config/environment variable $({0}). Variable is not defined", name); - return ""; - } - return localResult; - }); - } - - // Perform Dynamic Variable substitution - if (expandDynamicVariable && ReplaceDynamicVariableRegex.Match(result).Success) - { - result = ReplaceDynamicVariableRegex.Replace(result, delegate(Match match) - { - string name = match.Groups[1].Value; - string localResult; - if (!GetRoot().DynamicVariables.TryGetValue(name, out localResult)) - { - Logger.Error("Unable to substitute dynamic variable #({0}). Variable is not defined", name); - return ""; - } - localResult = localResult.Trim('"'); - return localResult; - }); - } - return result; - } - - private void PostLoad(ConfigFile parent, string file, string[] macros, IEnumerable variables) - { - FilePath = file; - Parent = parent; - - Variables.Add(new KeyValue("THIS_CONFIG_PATH", Path.GetDirectoryName(AbsoluteFilePath))); - Variables.AddRange(variables); - - // Load all dependencies - foreach (var dependFile in Files) - { - var dependFilePath = ExpandString(dependFile, false); - if (!Path.IsPathRooted(dependFilePath)) - dependFilePath = Path.Combine(Path.GetDirectoryName(AbsoluteFilePath), dependFilePath); - - var subMapping = Load(this, dependFilePath, macros, variables); - if (subMapping != null) - { - subMapping.FilePath = dependFile; - References.Add(subMapping); - } - } - - // Clear all depends file - Files.Clear(); - - // Add this mapping file - GetRoot().MapIdToFile.Add(Id, this); - } - - public IEnumerable ConfigFilesLoaded - { - get { return GetRoot().MapIdToFile.Values; } - } - - - /// - /// Gets the latest timestamp from a set of config files. - /// - /// The files to check. - /// The latest timestamp from a set of config files - public static DateTime GetLatestTimestamp(IEnumerable files) - { - var latestTimestmap = new DateTime(0); - foreach (var configFile in files) - { - var fileTime = File.GetLastWriteTime(configFile.AbsoluteFilePath); - if (fileTime > latestTimestmap) - latestTimestmap = fileTime; - } - return latestTimestmap; - } - - /// - /// Loads the specified config file attached to a parent config file. - /// - /// The parent. - /// The file. - /// The loaded config - private static ConfigFile Load(ConfigFile parent, string file, string[] macros, IEnumerable variables) - { - var deserializer = new XmlSerializer(typeof(ConfigFile)); - ConfigFile config = null; - try - { - Logger.PushLocation(file); - config = (ConfigFile)deserializer.Deserialize(new StringReader(Preprocessor.Preprocess(File.ReadAllText(file), macros))); - - if (config != null) - config.PostLoad(parent, file, macros, variables); - } - catch (Exception ex) - { - Logger.Error("Unable to parse file [{0}]", ex, file); - } - finally - { - Logger.PopLocation(); - } - return config; - } - - public ConfigFile GetRoot() - { - var root = this; - while (root.Parent != null) - root = root.Parent; - return root; - } - - private Dictionary MapIdToFile = new Dictionary(); - - private void Verify() - { - Depends.Remove(""); - - // TODO: verify Depends - foreach (var depend in Depends) - { - if (!GetRoot().MapIdToFile.ContainsKey(depend)) - throw new InvalidOperationException("Unable to resolve dependency [" + depend + "] for config file [" + Id + "]"); - } - - foreach (var includeDir in IncludeDirs) - { - - - includeDir.Path = ExpandString(includeDir.Path, false); - - if (!includeDir.Path.StartsWith("=") && !Directory.Exists(includeDir.Path)) - throw new DirectoryNotFoundException("Directory [" + includeDir.Path + "] not found in config file [" + Id + "]"); - } - - // Verify all dependencies - foreach (var mappingFile in References) - mappingFile.Verify(); - } - - /// - /// Loads a specified MappingFile. - /// - /// The MappingFile. - /// The MappingFile loaded - public static ConfigFile Load(string file, string[] macros, params KeyValue[] variables) - { - var root = Load(null, file, macros, variables); - root.Verify(); - root.ExpandVariables(false); - return root; - } - - public void Write(string file) - { - var output = new FileStream(file, FileMode.Create); - Write(output); - output.Close(); - } - - /// - /// Writes this MappingFile to the disk. - /// - /// The writer. - public void Write(Stream writer) - { - //Create our own namespaces for the output - var ns = new XmlSerializerNamespaces(); - ns.Add("", NS); - var serializer = new XmlSerializer(typeof(ConfigFile)); - serializer.Serialize(writer, this, ns); - } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "config {0}", Id); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ConstantRule.cs b/Source/Tools/SharpGen/Config/ConstantRule.cs deleted file mode 100644 index 7f58b2fb7..000000000 --- a/Source/Tools/SharpGen/Config/ConstantRule.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// Create constant associated to a C# class. - /// Usage: const [from-macro="MACRO_REGEXP"] class="C#_CLASS_NAME" type="C#_TYPE_NAME" name="FIELD_NAME" value="FIELD_VALUE" - /// - [XmlType("const")] - public class ConstantRule : ConfigBaseRule - { - [XmlAttribute("from-macro")] - public string Macro { get; set; } - - [XmlAttribute("from-guid")] - public string Guid { get; set; } - - [XmlAttribute("class")] - public string ClassName { get; set; } - - [XmlAttribute("cpp-type")] - public string CppType { get; set; } - - [XmlAttribute("cpp-cast")] - public string CppCast { get; set; } - - [XmlAttribute("type")] - public string Type { get; set; } - - [XmlAttribute("name")] - public string Name { get; set; } - - /// - /// General visibility for Methods - /// - [XmlIgnore] - public Visibility? Visibility { get; set; } - [XmlAttribute("visibility")] - public Visibility _Visibility_ { get { return Visibility.Value; } set { Visibility = value; } } public bool ShouldSerialize_Visibility_() { return Visibility != null; } - - [XmlText] - public string Value { get; set; } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} from-{1}:{2} class:{3} cpp-type:{4} cpp-cast:{5} type:{6} name:{7} value:{8}", base.ToString(), Macro!=null?"macro":"guid", Macro ?? Guid, ClassName, CppType, CppCast, Type, Name, Value); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ContextRule.cs b/Source/Tools/SharpGen/Config/ContextRule.cs deleted file mode 100644 index df0b7ad3f..000000000 --- a/Source/Tools/SharpGen/Config/ContextRule.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [XmlType("context")] - public class ContextRule : ConfigBaseRule - { - public ContextRule() - { - Ids = new List(); - } - - public ContextRule(string context) - { - Ids = new List() {context}; - } - - public ContextRule(IEnumerable ids) - { - Ids = new List(ids); - } - - [XmlAttribute("id")] - public string ContextSetId { get; set; } - - [XmlText] - public List Ids { get; set; } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} Ids:{1}", base.ToString(), (Ids != null) ? Ids.ToString() : ""); - } - } - - [XmlType("context-clear")] - public class ClearContextRule : ContextRule - { - public ClearContextRule() - { - Ids = null; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ContextSetRule.cs b/Source/Tools/SharpGen/Config/ContextSetRule.cs deleted file mode 100644 index 4b0a74ebd..000000000 --- a/Source/Tools/SharpGen/Config/ContextSetRule.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// A set of . - /// - public class ContextSetRule : ConfigBaseRule - { - /// - /// Gets or sets the id of this context. - /// - /// The id. - [XmlAttribute("id")] - public string Id { get; set; } - - /// - /// Context rules - /// - /// The rules. - [XmlElement("context")] - public List Contexts { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/CreateExtensionRule.cs b/Source/Tools/SharpGen/Config/CreateExtensionRule.cs deleted file mode 100644 index 025866c3f..000000000 --- a/Source/Tools/SharpGen/Config/CreateExtensionRule.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; -using SharpGen.Model; - -namespace SharpGen.Config -{ - [XmlType("create")] - public class CreateExtensionRule : ExtensionBaseRule - { - [XmlIgnore] - public Visibility? Visibility { get; set; } - [XmlAttribute("visibility")] - public Visibility _Visibility_ { get { return Visibility.Value; } set { Visibility = value; } } public bool ShouldSerialize_Visibility_() { return Visibility != null; } - - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} visibility:{1}", base.ToString(), Visibility.HasValue ? Visibility.Value.ToString() : "undef"); - } - } - - [XmlType("create-cpp")] - public class CreateCppExtensionRule : CreateExtensionRule - { - [XmlAttribute("macro")] - public string Macro { get; set; } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} macro:{1}", base.ToString(), Macro); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/DefineExtensionRule.cs b/Source/Tools/SharpGen/Config/DefineExtensionRule.cs deleted file mode 100644 index 7c2736013..000000000 --- a/Source/Tools/SharpGen/Config/DefineExtensionRule.cs +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [XmlType("define")] - public class DefineExtensionRule : ExtensionBaseRule - { - public DefineExtensionRule() - { - } - - public DefineExtensionRule(int sizeOf) - { - SizeOf = sizeOf; - } - - public DefineExtensionRule(int sizeOf, int align) - { - SizeOf = sizeOf; - Align = align; - } - - - [XmlIgnore] - public int? SizeOf { get; set; } - [XmlAttribute("sizeof")] - public int _SizeOf_ { get { return SizeOf.Value; } set { SizeOf = value; } } public bool ShouldSerialize_SizeOf_() { return SizeOf != null; } - - [XmlIgnore] - public int? Align { get; set; } - [XmlAttribute("align")] - public int _Align_ { get { return Align.Value; } set { Align = value; } } public bool ShouldSerialize_Align_() { return Align != null; } - - [XmlIgnore] - public bool? HasCustomMarshal { get; set; } - [XmlAttribute("marshal")] - public bool _HasCustomMarshal_ { get { return HasCustomMarshal.Value; } set { HasCustomMarshal = value; } } public bool ShouldSerialize_HasCustomMarshal_() { return HasCustomMarshal != null; } - - [XmlIgnore] - public bool? IsStaticMarshal { get; set; } - [XmlAttribute("static-marshal")] - public bool _IsStaticMarshal_ { get { return IsStaticMarshal.Value; } set { IsStaticMarshal = value; } } public bool ShouldSerialize_IsStaticMarshal_() { return IsStaticMarshal != null; } - - [XmlIgnore] - public bool? HasCustomNew { get; set; } - [XmlAttribute("custom-new")] - public bool _HasCustomNew_ { get { return HasCustomNew.Value; } set { HasCustomNew = value; } } public bool ShouldSerialize_HasCustomNew_() { return HasCustomNew != null; } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} {1} {2}", base.ToString(), SizeOf.HasValue ? "sizeof:" + SizeOf.Value : "", Align.HasValue ? "align:" + Align.Value : ""); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ExtensionBaseRule.cs b/Source/Tools/SharpGen/Config/ExtensionBaseRule.cs deleted file mode 100644 index d33c64f9e..000000000 --- a/Source/Tools/SharpGen/Config/ExtensionBaseRule.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Config -{ - public abstract class ExtensionBaseRule : MappingBaseRule - { - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ITypeRule.cs b/Source/Tools/SharpGen/Config/ITypeRule.cs deleted file mode 100644 index 0f091cecd..000000000 --- a/Source/Tools/SharpGen/Config/ITypeRule.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Xml.Serialization; -using SharpGen.CppModel; - -namespace SharpGen.Config -{ - interface ITypeRule - { - [XmlAttribute("class")] - string NewClass { get; set; } - [XmlAttribute("enum")] - string Enum { get; set; } - [XmlAttribute("enum-item")] - string EnumItem { get; set; } - [XmlAttribute("struct")] - string Struct { get; set; } - [XmlAttribute("field")] - string Field { get; set; } - [XmlAttribute("interface")] - string Interface { get; set; } - [XmlAttribute("function")] - string Function { get; set; } - [XmlAttribute("method")] - string Method { get; set; } - [XmlAttribute("param")] - string Parameter { get; set; } - [XmlAttribute("typedef")] - string Typedef { get; set; } - [XmlAttribute("element")] - string Element { get; set; } - [XmlAttribute("variable")] - string Variable { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/IncludeDirRule.cs b/Source/Tools/SharpGen/Config/IncludeDirRule.cs deleted file mode 100644 index 869b4c6ea..000000000 --- a/Source/Tools/SharpGen/Config/IncludeDirRule.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// An Include directive - /// - public class IncludeDirRule - { - /// - /// Initializes a new instance of the class. - /// - public IncludeDirRule() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The path. - public IncludeDirRule(string path) - { - Path = path; - } - - /// - /// Gets or sets the path. - /// - /// - /// The path. - /// - [XmlText] - public string Path { get; set; } - - /// - /// Gets or sets the is override. - /// - /// - /// The is override. - /// - [XmlAttribute("override")] - public bool IsOverride { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format("include-dir: {0} override: {1}", Path, IsOverride); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/IncludeRule.cs b/Source/Tools/SharpGen/Config/IncludeRule.cs deleted file mode 100644 index 2ff162408..000000000 --- a/Source/Tools/SharpGen/Config/IncludeRule.cs +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Collections.Generic; -using System.IO; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// An Include directive - /// - public class IncludeRule - { - public IncludeRule() - { - AttachTypes = new List(); - FilterErrors = new List(); - } - - /// - /// Gets or sets the id. - /// - /// The id. - [XmlIgnore] - public string Id { get { return Path.GetFileNameWithoutExtension(File).ToLower(); } } - - /// - /// Gets or sets the file to be included. - /// - /// The file. - [XmlAttribute("file")] - public string File { get; set; } - - /// - /// Gets or sets the namespace. - /// - /// The namespace. - [XmlAttribute("namespace")] - public string Namespace { get; set; } - - /// - /// Gets or sets the output. - /// - /// The output. - [XmlAttribute("output")] - public string Output { get; set; } - - /// - /// Gets or sets the file must be attached for mapping to the current Namespace/Assembly - /// - /// The attach. - [XmlIgnore] - public bool? Attach { get; set; } - - /// - /// Internal method to serialize nullable property. - /// - /// true if [_ attach_]; otherwise, false. - [XmlAttribute("attach")] - public bool _Attach_ - { - get { return Attach.Value; } - set { Attach = value; } - } - - /// - /// Should Attach be serialized? - /// - /// true if Attach property has a value; otherwise, false - public bool ShouldSerialize_Attach_() - { - return Attach != null; - } - - /// - /// Gets or sets the pre-include-code to insert before performing the include. - /// - /// The pre. - [XmlElement("pre")] - public string Pre { get; set; } - - /// - /// Gets or sets the post-include-code to insert after performing the include. - /// - /// The post. - [XmlElement("post")] - public string Post{ get; set; } - - /// - /// Gets or sets single types to attach. - /// - /// The post. - [XmlElement("attach")] - public List AttachTypes{ get; set; } - - /// - /// Gets or sets the ignore errors. - /// - /// The ignore errors. - [XmlElement("filter-error")] - public List FilterErrors { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "include: {0}", File); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/KeyValue.cs b/Source/Tools/SharpGen/Config/KeyValue.cs deleted file mode 100644 index bdd950843..000000000 --- a/Source/Tools/SharpGen/Config/KeyValue.cs +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// Simple Key-Value class for xml serializing. - /// - public class KeyValue - { - /// - /// Initializes a new instance of the class. - /// - public KeyValue() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The value. - public KeyValue(string name, string value) - { - Name = name; - Value = value; - } - - /// - /// Gets or sets the name. - /// - /// The name. - [XmlAttribute("name")] - public string Name { get; set; } - - /// - /// Gets or sets the value. - /// - /// The value. - [XmlText] - public string Value { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}=\"{1}\"", Name, Value); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/MappingBaseRule.cs b/Source/Tools/SharpGen/Config/MappingBaseRule.cs deleted file mode 100644 index 12fb5ea91..000000000 --- a/Source/Tools/SharpGen/Config/MappingBaseRule.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - public abstract class MappingBaseRule : ConfigBaseRule, ITypeRule - { - [XmlAttribute("class")] - public string NewClass { get; set; } - [XmlAttribute("enum")] - public string Enum { get; set; } - [XmlAttribute("enum-item")] - public string EnumItem { get; set; } - [XmlAttribute("struct")] - public string Struct { get; set; } - [XmlAttribute("field")] - public string Field { get; set; } - [XmlAttribute("interface")] - public string Interface { get; set; } - [XmlAttribute("function")] - public string Function { get; set; } - [XmlAttribute("method")] - public string Method { get; set; } - [XmlAttribute("param")] - public string Parameter { get; set; } - [XmlAttribute("typedef")] - public string Typedef { get; set; } - [XmlAttribute("element")] - public string Element { get; set; } - [XmlAttribute("variable")] - public string Variable { get; set; } - [XmlAttribute("doc")] - public string DocItem { get; set; } - - public override string ToString() - { - string type = ""; - - foreach(var property in typeof(MappingBaseRule).GetProperties()) - { - if (property.GetValue(this, null) != null) - { - type = ((XmlAttributeAttribute) (property.GetCustomAttributes(typeof (XmlAttributeAttribute), false)[0])).AttributeName + ":" + - property.GetValue(this, null); - break; - - } - } - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} {1}", base.ToString(), type); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/MappingRule.cs b/Source/Tools/SharpGen/Config/MappingRule.cs deleted file mode 100644 index 50ce5bbd1..000000000 --- a/Source/Tools/SharpGen/Config/MappingRule.cs +++ /dev/null @@ -1,311 +0,0 @@ -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [XmlType("map")] - public class MappingRule : MappingBaseRule - { - public MappingRule() - { - IsFinalMappingName = false; - MethodCheckReturnType = true; - } - - /// - /// Default Value for parameters - /// - [XmlAttribute("assembly")] - public string Assembly { get; set; } - - /// - /// Default Value for parameters - /// - [XmlAttribute("namespace")] - public string Namespace { get; set; } - - /// - /// Default Value for parameters - /// - [XmlAttribute("default")] - public string DefaultValue { get; set; } - - [XmlIgnore] - public bool? MethodCheckReturnType { get; set; } - [XmlAttribute("check")] - public bool _MethodCheckReturnType_ { get { return MethodCheckReturnType.Value; } set { MethodCheckReturnType = value; } } public bool ShouldSerialize_MethodCheckReturnType_() { return MethodCheckReturnType != null; } - - [XmlIgnore] - public bool? AlwaysReturnHResult { get; set; } - [XmlAttribute("hresult")] - public bool _AlwaysReturnHResult_ { get { return AlwaysReturnHResult.Value; } set { AlwaysReturnHResult = value; } } public bool ShouldSerialize_AlwaysReturnHResult_() { return AlwaysReturnHResult != null; } - - /// - /// General visibility for Methods - /// - [XmlIgnore] - public Visibility? Visibility { get; set; } - [XmlAttribute("visibility")] - public Visibility _Visibility_ { get { return Visibility.Value; } set { Visibility = value; } } public bool ShouldSerialize_Visibility_() { return Visibility != null; } - - /// - /// General visibility for DefaultCallback class - /// - [XmlIgnore] - public Visibility? NativeCallbackVisibility { get; set; } - [XmlAttribute("callback-visibility")] - public Visibility _NativeCallbackVisibility_ { get { return NativeCallbackVisibility.Value; } set { NativeCallbackVisibility = value; } } public bool ShouldSerialize_NativeCallbackVisibility_() { return NativeCallbackVisibility != null; } - - [XmlIgnore] - public NamingFlags? NamingFlags { get; set; } - [XmlAttribute("naming")] - public NamingFlags _NamingFlags_ { get { return NamingFlags.Value; } set { NamingFlags = value; } } public bool ShouldSerialize_NamingFlags_() { return NamingFlags != null; } - - /// - /// Name of a native callback - /// - [XmlAttribute("callback-name")] - public string NativeCallbackName { get; set; } - - /// - /// Used for methods, to force a method to not be translated to a property - /// - [XmlIgnore] - public bool? Property { get; set; } - [XmlAttribute("property")] - public bool _Property_ { get { return Property.Value; } set { Property = value; } } public bool ShouldSerialize_Property_() { return Property != null; } - - /// - /// Use to output vtbl offsets for methods as private fields that can be modified - /// - [XmlIgnore] - public bool? CustomVtbl { get; set; } - [XmlAttribute("custom-vtbl")] - public bool _CustomVtbl_ { get { return CustomVtbl.Value; } set { CustomVtbl = value; } } public bool ShouldSerialize_CustomVtbl_() { return CustomVtbl != null; } - - /// - /// Used for property zith COM Objects, in order to persist the getter - /// - [XmlIgnore] - public bool? Persist { get; set; } - [XmlAttribute("persist")] - public bool _Persist_ { get { return Persist.Value; } set { Persist = value; } } public bool ShouldSerialize_Persist_() { return Persist != null; } - - /// - /// Gets or sets the struct pack alignment. - /// - /// The struct pack. - [XmlIgnore] - public int? StructPack { get; set; } - [XmlAttribute("pack")] - public int _StructPack_ { get { return StructPack.Value; } set { StructPack = value; } } public bool ShouldSerialize_StructPack_() { return StructPack != null; } - - /// - /// Mapping name - /// - [XmlAttribute("name-tmp")] - public string MappingName { get; set; } - public bool ShouldSerializeMappingName() { return IsFinalMappingName.HasValue && !IsFinalMappingName.Value; } - - /// - /// Mapping replace - /// - [XmlAttribute("replace")] - public string Replace { get; set; } - - /// - /// Mapping name - /// - [XmlAttribute("name")] - public string MappingNameFinal - { - get { return MappingName; } - set - { - MappingName = value; - IsFinalMappingName = true; - } - } - public bool ShouldSerializeMappingNameFinal() { return !IsFinalMappingName.HasValue || IsFinalMappingName.Value; } - - //[XmlAttribute("final")] - //public bool _IsFinalMappingName_ { get { return IsFinalMappingName.Value; } set { IsFinalMappingName = value; } } public bool ShouldSerialize_IsFinalMappingName_() { return IsFinalMappingName != null; } - - /// - /// True if the MappingName doesn't need any further rename processing - /// - [XmlIgnore] - public bool? IsFinalMappingName { get; set; } - //[XmlAttribute("final")] - //public bool _IsFinalMappingName_ { get { return IsFinalMappingName.Value; } set { IsFinalMappingName = value; } } public bool ShouldSerialize_IsFinalMappingName_() { return IsFinalMappingName != null; } - - /// - /// True if a struct should used a native value type marshalling - /// - [XmlIgnore] - public bool? StructHasNativeValueType { get; set; } - [XmlAttribute("native")] - public bool _StructHasNativeValueType_ { get { return StructHasNativeValueType.Value; } set { StructHasNativeValueType = value; } } public bool ShouldSerialize_StructHasNativeValueType_() { return StructHasNativeValueType != null; } - - /// - /// True if a struct should be used as a class instead of struct (imply StructHasNativeValueType) - /// - [XmlIgnore] - public bool? StructToClass { get; set; } - [XmlAttribute("struct-to-class")] - public bool _StructToClass_ { get { return StructToClass.Value; } set { StructToClass = value; } } public bool ShouldSerialize_StructToClass_() { return StructToClass != null; } - - /// - /// True if a struct is using some Custom Marshal (imply StructHasNativeValueType) - /// - [XmlIgnore] - public bool? StructCustomMarshal { get; set; } - [XmlAttribute("marshal")] - public bool _StructCustomMarshal_ { get { return StructCustomMarshal.Value; } set { StructCustomMarshal = value; } } public bool ShouldSerialize_StructCustomMarshal_() { return StructCustomMarshal != null; } - - /// - /// True if a struct is using some Custom Marshal (imply StructHasNativeValueType) - /// - [XmlIgnore] - public bool? IsStaticMarshal { get; set; } - [XmlAttribute("static-marshal")] - public bool _IsStaticMarshal_ { get { return IsStaticMarshal.Value; } set { IsStaticMarshal = value; } } public bool ShouldSerialize_IsStaticMarshal_() { return IsStaticMarshal != null; } - - /// - /// True if a struct is using some a Custom New for the Native struct (imply StructHasNativeValueType) - /// - [XmlIgnore] - public bool? StructCustomNew { get; set; } - [XmlAttribute("new")] - public bool _StructCustomNew_ { get { return StructCustomNew.Value; } set { StructCustomNew = value; } } public bool ShouldSerialize_StructCustomNew_() { return StructCustomNew != null; } - - /// - /// True to force a struct with Native marshalling to have the method __MarshalTo generated - /// - [XmlIgnore] - public bool? StructForceMarshalToToBeGenerated { get; set; } - [XmlAttribute("marshalto")] - public bool _StructForceMarshalToToBeGenerated_ { get { return StructForceMarshalToToBeGenerated.Value; } set { StructForceMarshalToToBeGenerated = value; } } public bool ShouldSerialize_StructForceMarshalToToBeGenerated_() { return StructForceMarshalToToBeGenerated != null; } - - /// - /// Mapping type name - /// - [XmlAttribute("type")] - public string MappingType { get; set; } - - /// - /// Pointer to modify the type - /// - [XmlAttribute("pointer")] - public string Pointer { get; set; } - - /// - /// ArrayDimension - /// - [XmlAttribute("array")] - public string TypeArrayDimension { get; set; } - - /// - /// Used for enums, to tag enums that are used as flags - /// - [XmlIgnore] - public bool? EnumHasFlags { get; set; } - [XmlAttribute("flags")] - public bool _EnumHasFlags_ { get { return EnumHasFlags.Value; } set { EnumHasFlags = value; } } public bool ShouldSerialize_EnumHasFlags_() { return EnumHasFlags != null; } - - /// - /// Used for enums, to tag enums that should have none value (0) - /// - [XmlIgnore] - public bool? EnumHasNone { get; set; } - [XmlAttribute("none")] - public bool _EnumHasNone_ { get { return EnumHasNone.Value; } set { EnumHasNone = value; } } public bool ShouldSerialize_EnumHasNone_() { return EnumHasNone != null; } - - /// - /// Used for interface to mark them as callback interface - /// - [XmlIgnore] - public bool? IsCallbackInterface { get; set; } - [XmlAttribute("callback")] - public bool _IsCallbackInterface_ { get { return IsCallbackInterface.Value; } set { IsCallbackInterface = value; } } public bool ShouldSerialize_IsCallbackInterface_() { return IsCallbackInterface != null; } - - /// - /// Used for interface to mark them as dual-callback interface - /// - [XmlIgnore] - public bool? IsDualCallbackInterface { get; set; } - [XmlAttribute("callback-dual")] - public bool _IsDualCallbackInterface_ { get { return IsDualCallbackInterface.Value; } set { IsDualCallbackInterface = value; } } public bool ShouldSerialize_IsDualCallbackInterface_() { return IsDualCallbackInterface != null; } - - /// - /// Used for methods to specify that inheriting methods from interface should be kept public and without any rename. - /// - [XmlIgnore] - public bool? IsKeepImplementPublic { get; set; } - [XmlAttribute("keep-implement-public")] - public bool _IsKeepImplementPublic_ { get { return IsKeepImplementPublic.Value; } set { IsKeepImplementPublic = value; } } public bool ShouldSerialize_IsKeepImplementPublic_() { return IsKeepImplementPublic != null; } - - /// - /// DLL name attached to a function - /// - [XmlAttribute("dll")] - public string FunctionDllName { get; set; } - - /// - /// By default true for DLL import - /// - [XmlIgnore] - public bool? UseDllImport { get; set; } - [XmlAttribute("dllimport")] - public bool _UseDllImport_ { get { return UseDllImport.Value; } set { UseDllImport = value; } } public bool ShouldSerialize_UseDllImport_() { return UseDllImport != null; } - - /// - /// Used to duplicate methods taking pointers and generate an additional private method with pure pointer. This method - /// is also disabling renaming - /// - /// true if [raw PTR]; otherwise, false. - [XmlIgnore] - public bool? RawPtr { get; set; } - [XmlAttribute("rawptr")] - public bool _RawPtr_ { get { return RawPtr.Value; } set { RawPtr = value; } } public bool ShouldSerialize_RawPtr_() { return RawPtr != null; } - - /// - /// DLL name attached to a function - /// - [XmlAttribute("macro-dll")] - public string FunctionDllNameFromMacro { get; set; } - - /// - /// Parameter Attribute - /// - [XmlIgnore] - public ParamAttribute? ParameterAttribute { get; set; } - [XmlAttribute("attribute")] - public ParamAttribute _ParameterAttribute_ { get { return ParameterAttribute.Value; } set { ParameterAttribute = value; } } public bool ShouldSerialize_ParameterAttribute_() { return ParameterAttribute != null; } - - /// - /// For Method, true means that the return type should be returned in any case. For Parameter is tagged to be used as a return type - /// - [XmlIgnore] - public bool? ParameterUsedAsReturnType { get; set; } - [XmlAttribute("return")] - public bool _ParameterUsedAsReturnType_ { get { return ParameterUsedAsReturnType.Value; } set { ParameterUsedAsReturnType = value; } } public bool ShouldSerialize_ParameterUsedAsReturnType_() { return ParameterUsedAsReturnType != null; } - - /// - /// ClassType attached to a function - /// - //[XmlAttribute("class")] - [XmlAttribute("group")] - public string CsClass { get; set; } - - /// - /// An integer that can be used to transform the method's vtable offset relative to the value specified by the compiler. - /// - [XmlAttribute("offset-translate")] - public int LayoutOffsetTranslate { get; set; } - - //public override string ToString() - //{ - // return Utilities.PropertiesToString(this); - //} - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/MoveRule.cs b/Source/Tools/SharpGen/Config/MoveRule.cs deleted file mode 100644 index cd947f656..000000000 --- a/Source/Tools/SharpGen/Config/MoveRule.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [XmlType("move")] - public class MoveRule : MappingBaseRule - { - [XmlAttribute("to")] - public string To { get; set; } - - [XmlAttribute("property")] - public string Property { get; set; } - - [XmlAttribute("base")] - public string Base { get; set; } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} to:{1} property:{2} base:{3}", base.ToString(), To, Property, Base); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/NamingRuleShort.cs b/Source/Tools/SharpGen/Config/NamingRuleShort.cs deleted file mode 100644 index e2e392247..000000000 --- a/Source/Tools/SharpGen/Config/NamingRuleShort.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - /// - /// Simple naming rule to rename short name, abbreviation to an expanded name. - /// For example, rename SRV to ShaderResourceView. - /// - [XmlType("short")] - public class NamingRuleShort : NamingRule - { - /// - /// Initializes a new instance of the class. - /// - public NamingRuleShort() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The value. - public NamingRuleShort(string name, string value) : base(name, value) - { - } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "naming-rule-short: \"{0}\" => \"{1}\"", Name, Value); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/ParamAttribute.cs b/Source/Tools/SharpGen/Config/ParamAttribute.cs deleted file mode 100644 index e98120d7c..000000000 --- a/Source/Tools/SharpGen/Config/ParamAttribute.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Runtime.Serialization; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [DataContract(Name="attribute"), Flags] - public enum ParamAttribute - { - [EnumMember, XmlEnum("none")] - None = 0, - [EnumMember, XmlEnum("in")] - In = 0x1, - [EnumMember, XmlEnum("out")] - Out = 0x2, - [EnumMember, XmlEnum("inout")] - InOut = 0x4, - [EnumMember, XmlEnum("buffer")] - Buffer = 0x8, - [EnumMember, XmlEnum("optional")] - Optional = 0x10, - /// - /// Fast flag used for Out parameter. - /// - [EnumMember, XmlEnum("fast")] - Fast = 0x20, - [EnumMember, XmlEnum("params")] // params setup buffer and params - Params = 0x48, - [EnumMember, XmlEnum("value")] // force pointer to valuetype > 16 bytes to be passed by value - Value = 0x80, - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/Preprocessor.cs b/Source/Tools/SharpGen/Config/Preprocessor.cs deleted file mode 100644 index a60eb7038..000000000 --- a/Source/Tools/SharpGen/Config/Preprocessor.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.IO; -using System.Xml.Linq; -using System.Linq; - -namespace SharpGen.Config -{ - /// - /// A simple Xml preprocessor. - /// - internal class Preprocessor - { - /// - /// Preprocesses the specified XML text. - /// - /// The XML text. - /// The macros. - /// A preprocessed xml text - public static string Preprocess(string xmlText, string[] macros) - { - var doc = XDocument.Load(new StringReader(xmlText)); - - XNamespace ns = ConfigFile.NS; - - var list = doc.Descendants(ns + "ifndef").ToList(); - // Work on deepest first - list.Reverse(); - foreach (var ifndef in list) - { - var attr = ifndef.Attribute("name"); - if (attr != null && macros.Contains(attr.Value)) - { - ifndef.Remove(); - } - else - { - foreach (var element in ifndef.Elements()) - { - //Console.WriteLine("=============== ifndef Add element {0}", element); - ifndef.AddBeforeSelf(element); - } - - ifndef.Remove(); - } - } - - list = doc.Descendants(ns + "ifdef").ToList(); - // Work on deepest first - list.Reverse(); - foreach (var ifdef in list) - { - var attr = ifdef.Attribute("name"); - if(attr != null && !string.IsNullOrWhiteSpace(attr.Value)) - { - var values = attr.Value.Split(new []{ "|" }, StringSplitOptions.RemoveEmptyEntries); - if(values.Any(macros.Contains)) - { - foreach(var element in ifdef.Elements()) - { - //Console.WriteLine("=============== ifdef Add element {0}", element); - ifdef.AddBeforeSelf(element); - } - } - } - ifdef.Remove(); - } - - var writer = new StringWriter(); - doc.Save(writer); - - return writer.ToString(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/RemoveRule.cs b/Source/Tools/SharpGen/Config/RemoveRule.cs deleted file mode 100644 index ecf2f70d5..000000000 --- a/Source/Tools/SharpGen/Config/RemoveRule.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [XmlType("remove")] - public class RemoveRule: MappingBaseRule - { - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Config/Visibility.cs b/Source/Tools/SharpGen/Config/Visibility.cs deleted file mode 100644 index 80d5038d7..000000000 --- a/Source/Tools/SharpGen/Config/Visibility.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Xml.Serialization; - -namespace SharpGen.Config -{ - [Flags] - public enum Visibility - { - [XmlEnum("public")] - Public = 0x01, - [XmlEnum("internal")] - Internal = 0x02, - [XmlEnum("protected")] - Protected = 0x04, - [XmlEnum("public-protected")] - PublicProtected = 0x08, - [XmlEnum("private")] - Private = 0x10, - [XmlEnum("override")] - Override = 0x20, - [XmlEnum("abstract")] - Abstract = 0x40, - [XmlEnum("partial")] - Partial = 0x80, - [XmlEnum("static")] - Static = 0x100, - [XmlEnum("const")] - Const = 0x200, - [XmlEnum("virtual")] - Virtual = 0x400, - [XmlEnum("readonly")] - Readonly = 0x800, - [XmlEnum("sealed")] - Sealed = 0x1000, - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppCallingConvention.cs b/Source/Tools/SharpGen/CppModel/CppCallingConvention.cs deleted file mode 100644 index 1f774aca8..000000000 --- a/Source/Tools/SharpGen/CppModel/CppCallingConvention.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// The C++ calling convention. - /// - public enum CppCallingConvention - { - /// - /// Unknown calling convention. - /// - [XmlEnum("unknown")] - Unknown = 0, - /// - /// Stdcall calling convention. - /// - [XmlEnum("stdcall")] - StdCall = 1, - /// - /// Fastcall calling convention. - /// - [XmlEnum("fastcall")] - FastCall = 2, - /// - /// Thiscall calling convention. - /// - [XmlEnum("thiscall")] - ThisCall = 3, - /// - /// Cdecl calling convention. - /// - [XmlEnum("cdecl")] - CDecl = 4, - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppDefine.cs b/Source/Tools/SharpGen/CppModel/CppDefine.cs deleted file mode 100644 index b5bf2b87d..000000000 --- a/Source/Tools/SharpGen/CppModel/CppDefine.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ define macro Name=Value. - /// - [XmlType("macro")] - public class CppDefine : CppElement - { - /// - /// Initializes a new instance of the class. - /// - public CppDefine() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The value. - public CppDefine(string name, string value) - { - Name = name; - Value = value; - } - - /// - /// Gets or sets the value. - /// - /// The value. - [XmlAttribute("value")] - public string Value { get; set; } - - /// - /// Gets a stripped string value trimming double-quotes ". - /// - /// The strip string value. - public string StripStringValue - { - get - { - return Value.Trim('"'); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppElement.cs b/Source/Tools/SharpGen/CppModel/CppElement.cs deleted file mode 100644 index a830eb4b6..000000000 --- a/Source/Tools/SharpGen/CppModel/CppElement.cs +++ /dev/null @@ -1,442 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text.RegularExpressions; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// Base class for all C++ element. - /// - public class CppElement - { - /// - /// Delegate Modifier - /// - public delegate bool ProcessModifier(Regex regex, CppElement cppElement); - - /// - /// Current context used by the finder. - /// - private List _findContext; - - /// - /// Gets or sets the name. - /// - /// The name. - [XmlAttribute("name")] - public string Name { get; set; } - - /// - /// Gets or sets the id. - /// - /// - /// The id. - /// - [XmlElement("id")] - public string Id { get; set; } - - /// - /// Gets or sets the description. - /// - /// The description. - [XmlElement("description")] - public string Description { get; set; } - - /// - /// Gets or sets the remarks. - /// - /// The remarks. - [XmlElement("remarks")] - public string Remarks { get; set; } - - /// - /// Gets or sets the parent. - /// - /// The parent. - [XmlIgnore] - public CppElement Parent { get; set; } - - /// - /// Gets or sets the tag. - /// - /// The tag. - [XmlIgnore] - public object Tag { get; set; } - - /// - /// Gets the parent include. - /// - /// The parent include. - [XmlIgnore] - public CppInclude ParentInclude - { - get - { - CppElement cppInclude = Parent; - while (cppInclude != null && !(cppInclude is CppInclude)) - cppInclude = cppInclude.Parent; - return cppInclude as CppInclude; - } - } - - /// - /// Gets the parent root C++ element. - /// - /// The parent root. - [XmlIgnore] - public CppElement ParentRoot - { - get - { - CppElement cppRoot = this; - while (cppRoot.Parent != null) - cppRoot = cppRoot.Parent; - return cppRoot; - } - } - - /// - /// Gets the path. - /// - /// The path. - [XmlIgnore] - public virtual string Path - { - get - { - if (Parent != null) - return Parent.FullName; - return ""; - } - } - - /// - /// Gets the full name. - /// - /// The full name. - [XmlIgnore] - public virtual string FullName - { - get - { - string path = Path; - string name = Name ?? ""; - return String.IsNullOrEmpty(path) ? name : path + "::" + name; - } - } - - /// - /// Return all items inside this C++ element. - /// - [XmlArray("items")] - [XmlArrayItem(typeof (CppConstant))] - [XmlArrayItem(typeof (CppDefine))] - [XmlArrayItem(typeof (CppEnum))] - [XmlArrayItem(typeof (CppEnumItem))] - [XmlArrayItem(typeof (CppField))] - [XmlArrayItem(typeof (CppFunction))] - [XmlArrayItem(typeof (CppGuid))] - [XmlArrayItem(typeof (CppInclude))] - [XmlArrayItem(typeof (CppInterface))] - [XmlArrayItem(typeof (CppMethod))] - [XmlArrayItem(typeof (CppParameter))] - [XmlArrayItem(typeof (CppStruct))] - [XmlArrayItem(typeof (CppType))] - public List Items { get; set; } - - /// - /// Gets the context find list. - /// - /// The context find list. - private List ContextFindList - { - get - { - if (_findContext == null) - _findContext = new List(); - return _findContext; - } - } - - protected virtual IEnumerable AllItems - { - get { return Iterate(); } - } - - [XmlIgnore] - public bool IsEmpty - { - get { return Items == null || Items.Count == 0; } - } - - public T GetTagOrDefault() where T : new() - { - return (T) (Tag ?? new T()); - } - - public static string ShortName() where T : CppElement - { - var type = typeof (T); - string tagname = type.Name; - var attributes = type.GetCustomAttributes(typeof (DataContractAttribute), false); - if (attributes.Length == 1) - tagname = (attributes[0] as DataContractAttribute).Name; - return tagname; - } - - /// - /// Add an inner element to this CppElement - /// - /// - public void Add(CppElement element) - { - if (element.Parent != null) - element.Parent.Remove(element); - element.Parent = this; - GetSafeItems().Add(element); - } - - public void Add(IEnumerable elements) where T : CppElement - { - foreach (var cppElement in elements) - Add(cppElement); - } - - /// - /// Remove an inner element to this CppElement - /// - /// - public void Remove(CppElement element) - { - element.Parent = null; - GetSafeItems().Remove(element); - } - - private List GetSafeItems() - { - if (Items == null) - Items = new List(); - return Items; - } - - /// - /// Adds a context to the finder. - /// - /// Name of the context. - public void AddContextFind(string contextName) - { - ContextFindList.Add(contextName); - } - - /// - /// Adds a set of context to the finder. - /// - /// The context names. - public void AddContextRangeFind(IEnumerable contextNames) - { - foreach (var contextName in contextNames) - AddContextFind(contextName); - } - - /// - /// Clears the context finder. - /// - public void ClearContextFind() - { - ContextFindList.Clear(); - } - - /// - /// Iterates on items on this instance. - /// - /// Type of the item to iterate - /// An enumeration on items - public IEnumerable Iterate() where T : CppElement - { - return Items == null ? Enumerable.Empty() : Items.OfType(); - } - - /// - /// Finds the first element by regex. - /// - /// - /// The regex. - /// - public T FindFirst(string regex) where T : CppElement - { - return Find(regex).FirstOrDefault(); - } - - /// - /// Finds the specified elements by regex. - /// - /// - /// The regex. - /// - public IEnumerable Find(string regex) where T : CppElement - { - var cppElements = new List(); - bool modifyParent = false; - Find(new Regex("^" + regex + "$"), cppElements, null, ref modifyParent); - return cppElements.OfType(); - } - - /// - /// Remove recursively elements matching the regex of type T - /// - /// the T type to match - /// the regex to match - public void Remove(string regex) where T : CppElement - { - Modify(regex, (pathREgex, element) => true); - } - - /// - /// Modifies the specified elements by regex with the specified modifier. - /// - /// - /// The regex. - /// The modifier. - public void Modify(string regex, ProcessModifier modifier) where T : CppElement - { - var cppElements = new List(); - bool modifyParent = regex.StartsWith("#"); - regex = regex.TrimStart('#'); - regex = "^" + regex + "$"; - Find(new Regex(regex), cppElements, modifier, ref modifyParent); - } - - /// - /// Strips the regex. Removes ^ and $ at the end of the string - /// - /// The regex. - /// - public static string StripRegex(string regex) - { - string friendlyRegex = regex; - // Remove ^ and $ - if (friendlyRegex.StartsWith("^")) - friendlyRegex = friendlyRegex.Substring(1); - if (friendlyRegex.EndsWith("$")) - friendlyRegex = friendlyRegex.Substring(0, friendlyRegex.Length - 1); - return friendlyRegex; - } - - /// - /// Finds all elements by regex. - /// - /// The regex. - /// - public IEnumerable FindAll(string regex) - { - return Find(regex); - } - - /// - /// Finds the specified elements by regex and modifier. - /// - /// - /// The regex. - /// To add. - /// The modifier. - /// if set to true [modify parent]. - /// - private bool Find(Regex regex, List toAdd, ProcessModifier modifier, ref bool modifyParent) where T : CppElement - { - bool isToRemove = false; - string path = FullName; - - var elementToModify = modifyParent ? Parent : this; - - if ((elementToModify is T) && path != null && regex.Match(path).Success) - { - if (toAdd != null) - toAdd.Add((T)elementToModify); - - if (modifier != null) - { - isToRemove = modifier(regex, elementToModify); - } - } - - var elementsToRemove = new List(); - - // Force _findContext to reverse to null if not used anymore - if (_findContext != null && _findContext.Count == 0) - _findContext = null; - - if (_findContext == null) - { - // Optimized version with findContext - foreach (var innerElement in AllItems) - { - if (innerElement.Find(regex, toAdd, modifier, ref modifyParent)) - elementsToRemove.Add(innerElement); - } - } - else - { - foreach (var innerElement in AllItems) - { - if (_findContext.Contains(innerElement.Name)) - if (innerElement.Find(regex, toAdd, modifier, ref modifyParent)) - elementsToRemove.Add(innerElement); - } - } - - // If we are removing the parent using modifyParent flag - // Set modifyParent to false after removing in order to avoid recursive remove of all parents - if (elementsToRemove.Count > 0 && modifyParent) - { - modifyParent = false; - return true; - } - - foreach (var innerElementToRemove in elementsToRemove) - Remove(innerElementToRemove); - - return isToRemove; - } - - protected void ResetParents() - { - foreach (var innerElement in Iterate()) - { - innerElement.Parent = this; - innerElement.ResetParents(); - } - } - - public override string ToString() - { - return GetType().Name + " [" + Name + "]"; - } - - public virtual string ToShortString() - { - return Name; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppEnum.cs b/Source/Tools/SharpGen/CppModel/CppEnum.cs deleted file mode 100644 index e57189bb4..000000000 --- a/Source/Tools/SharpGen/CppModel/CppEnum.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ enum. - /// - [XmlType("enum")] - public class CppEnum : CppElement - { - /// - /// Adds an enum item to this enum. - /// - /// The name. - /// The value. - public void AddEnumItem(string name, string value) - { - Add(new CppEnumItem(name, value)); - } - - /// - /// Adds the None = 0 enum item. - /// - public void AddNone() - { - AddEnumItem("None", "0"); - } - - /// - /// Gets the enum items. - /// - /// The enum items. - [XmlIgnore] - public IEnumerable EnumItems - { - get { return Iterate(); } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppEnumItem.cs b/Source/Tools/SharpGen/CppModel/CppEnumItem.cs deleted file mode 100644 index 4d68d4043..000000000 --- a/Source/Tools/SharpGen/CppModel/CppEnumItem.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ enum item Name = Value. - /// - [XmlType("enum-item")] - public class CppEnumItem : CppElement - { - /// - /// Initializes a new instance of the class. - /// - public CppEnumItem() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The value. - public CppEnumItem(string name, string value) - { - Name = name; - Value = value; - } - - /// - /// Gets the path. - /// - /// The path. - public override string Path - { - get - { - // Return "" as enum items are global in C++. - return ""; - } - } - - /// - /// Gets or sets the value. - /// - /// The value. - [XmlAttribute("value")] - public string Value { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return "EnumItem [" + Name + "]"; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppField.cs b/Source/Tools/SharpGen/CppModel/CppField.cs deleted file mode 100644 index b69041989..000000000 --- a/Source/Tools/SharpGen/CppModel/CppField.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ field. - /// - [XmlType("field")] - public class CppField : CppType - { - /// - /// Index of the field mostly used to handle unions. - /// - [XmlAttribute("offset")] - public int Offset { get; set; } - - /// - /// Used only for structure with bits - /// - [XmlAttribute("bitfield")] - public bool IsBitField { get; set; } - - /// - /// Used only for structure with bits - /// - [XmlAttribute("bitoffset")] - public int BitOffset { get; set; } - - public override string ToShortString() - { - return string.Format("{0} {1}", TypeName, Name); - } - - /// - /// Indicates whether the current object is equal to another object of the same type. - /// - /// An object to compare with this object. - /// - /// true if the current object is equal to the parameter; otherwise, false. - /// - public bool Equals(CppField other) - { - if (ReferenceEquals(null, other)) return false; - if (ReferenceEquals(this, other)) return true; - return base.Equals(other) && other.Offset == Offset && other.IsBitField.Equals(IsBitField) && other.BitOffset == BitOffset; - } - - /// - /// Determines whether the specified is equal to this instance. - /// - /// The to compare with this instance. - /// - /// true if the specified is equal to this instance; otherwise, false. - /// - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - return Equals(obj as CppField); - } - - /// - /// Returns a hash code for this instance. - /// - /// - /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - /// - public override int GetHashCode() - { - unchecked - { - int result = base.GetHashCode(); - result = (result*397) ^ Offset; - result = (result*397) ^ IsBitField.GetHashCode(); - result = (result*397) ^ BitOffset; - return result; - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppFunction.cs b/Source/Tools/SharpGen/CppModel/CppFunction.cs deleted file mode 100644 index 5e5b7e52c..000000000 --- a/Source/Tools/SharpGen/CppModel/CppFunction.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ function. - /// - [XmlType("function")] - public class CppFunction : CppMethod - { - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppInclude.cs b/Source/Tools/SharpGen/CppModel/CppInclude.cs deleted file mode 100644 index 3557f6bff..000000000 --- a/Source/Tools/SharpGen/CppModel/CppInclude.cs +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ include contains C++ types declarations for macros, enums, structs, - /// interfaces and functions. - /// - [XmlType("include")] - public class CppInclude : CppElement - { - /// - /// Gets the full name. - /// - /// The full name. - [XmlIgnore] - public override string FullName - { - get { return ""; } - } - - /// - /// Gets the macros. - /// - /// The macros. - [XmlIgnore] - public IEnumerable Macros - { - get { return Iterate(); } - } - - /// - /// Gets the interfaces. - /// - /// The interfaces. - [XmlIgnore] - public IEnumerable Interfaces - { - get { return Iterate(); } - } - - /// - /// Gets the functions. - /// - /// The functions. - [XmlIgnore] - public IEnumerable Functions - { - get { return Iterate(); } - } - - /// - /// Gets the structs. - /// - /// The structs. - [XmlIgnore] - public IEnumerable Structs - { - get { return Iterate(); } - } - - /// - /// Gets the enums. - /// - /// The enums. - [XmlIgnore] - public IEnumerable Enums - { - get { return Iterate(); } - } - - /// - /// Gets the guids. - /// - /// The guids. - [XmlIgnore] - public IEnumerable Guids - { - get { return Iterate(); } - } - - /// - /// Gets the constants. - /// - /// The constants. - [XmlIgnore] - public IEnumerable Constants - { - get { return Iterate(); } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppInterface.cs b/Source/Tools/SharpGen/CppModel/CppInterface.cs deleted file mode 100644 index 4f6af942c..000000000 --- a/Source/Tools/SharpGen/CppModel/CppInterface.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ interface. - /// - [XmlType("interface")] - public class CppInterface : CppElement - { - /// - /// Gets or sets the GUID. - /// - /// The GUID. - [XmlAttribute("guid")] - public string Guid { get; set; } - - /// - /// Gets or sets the name of the parent. - /// - /// The name of the parent. - [XmlAttribute("base")] - public string ParentName { get; set; } - - /// - /// Gets the methods. - /// - /// The methods. - [XmlIgnore] - public IEnumerable Methods - { - get { return Iterate(); } - } - - /// - /// Gets or sets the total method count. - /// - /// The total method count. - internal int TotalMethodCount { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppMethod.cs b/Source/Tools/SharpGen/CppModel/CppMethod.cs deleted file mode 100644 index 695adf5d3..000000000 --- a/Source/Tools/SharpGen/CppModel/CppMethod.cs +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ method. - /// - [XmlType("method")] - public class CppMethod : CppElement - { - /// - /// Gets or sets the type of the return. - /// - /// The type of the return. - [XmlElement("return")] - public CppType ReturnType { get; set; } - - /// - /// Gets or sets the calling convention. - /// - /// The calling convention. - [XmlAttribute("call-conv")] - public CppCallingConvention CallingConvention { get; set; } - - /// - /// Gets or sets the offset. - /// - /// The offset. - [XmlAttribute("offset")] - public int Offset { get; set; } - - /// - /// Gets the parameters. - /// - /// The parameters. - [XmlIgnore] - public IEnumerable Parameters - { - get { return Iterate(); } - } - - protected override IEnumerable AllItems - { - get - { - var allElements = new List(Iterate()); - allElements.Add(ReturnType); - return allElements; - } - } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - var builder = new StringBuilder(); - builder.Append(ReturnType); - builder.Append(" "); - if (Parent is CppInterface) - { - builder.Append(Parent.Name); - builder.Append("::"); - } - builder.Append(Name); - builder.Append("("); - int i = 0, count = Parameters.Count(); - foreach (var cppParameter in Parameters) - { - builder.Append(cppParameter); - if ((i + 1) < count) - { - builder.Append(","); - } - i++; - } - builder.Append(")"); - return builder.ToString(); - } - - public override string ToShortString() - { - var builder = new StringBuilder(); - if (Parent is CppInterface) - { - builder.Append(Parent.Name); - builder.Append("::"); - } - builder.Append(Name); - return builder.ToString(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppModule.cs b/Source/Tools/SharpGen/CppModel/CppModule.cs deleted file mode 100644 index a98fc2d7f..000000000 --- a/Source/Tools/SharpGen/CppModel/CppModule.cs +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ module contains includes. - /// - [XmlRoot("cpp-module", Namespace= NS)] - public class CppModule : CppElement - { - internal const string NS = "urn:SharpGen.CppModel"; - - /// - /// Gets the full name. - /// - /// The full name. - [XmlIgnore] - public override string FullName - { - get { return ""; } - } - - /// - /// Gets the includes. - /// - /// The includes. - [XmlIgnore] - public IEnumerable Includes - { - get { return Iterate(); } - } - - /// - /// Finds the include. - /// - /// Name of the include. - /// - public CppInclude FindInclude(string includeName) - { - return (from cppElement in Iterate() - where cppElement.Name == includeName - select cppElement).FirstOrDefault(); - } - - /// - /// Reads the module from the specified file. - /// - /// The file. - /// A C++ module - public static CppModule Read(string file) - { - var input = new FileStream(file, FileMode.Open); - var result = Read(input); - input.Close(); - return result; - } - - /// - /// Reads the module from the specified input. - /// - /// The input. - /// A C++ module - public static CppModule Read(Stream input) - { - var ds = new XmlSerializer(typeof (CppModule)); - - CppModule module = null; - using (XmlReader w = XmlReader.Create(input)) - { - module = ds.Deserialize(w) as CppModule; - } - if (module != null) - module.ResetParents(); - return module; - } - - /// - /// Writes this instance to the specified file. - /// - /// The file. - public void Write(string file) - { - var output = new FileStream(file, FileMode.Create); - Write(output); - output.Close(); - } - - /// - /// Writes this instance to the specified output. - /// - /// The output. - public void Write(Stream output) - { - var ds = new XmlSerializer(typeof (CppModule)); - - var settings = new XmlWriterSettings() {Indent = true}; - using (XmlWriter w = XmlWriter.Create(output, settings)) - { - var ns = new XmlSerializerNamespaces(); - ns.Add("", NS); - ds.Serialize(w, this, ns); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppStruct.cs b/Source/Tools/SharpGen/CppModel/CppStruct.cs deleted file mode 100644 index c5df86874..000000000 --- a/Source/Tools/SharpGen/CppModel/CppStruct.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// A C++ struct. - /// - [XmlType("struct")] - public class CppStruct : CppElement - { - /// - /// Gets or sets the align. - /// - /// The align. - [XmlAttribute("align")] - public int Align { get; set; } - - /// - /// Gets or sets the name of the parent. - /// - /// The name of the parent. - [XmlAttribute("base")] - public string ParentName { get; set; } - - /// - /// Gets the fields. - /// - /// The fields. - [XmlIgnore] - public IEnumerable Fields - { - get { return Iterate(); } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/CppModel/CppType.cs b/Source/Tools/SharpGen/CppModel/CppType.cs deleted file mode 100644 index 089ed5044..000000000 --- a/Source/Tools/SharpGen/CppModel/CppType.cs +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Text; -using System.Xml.Serialization; - -namespace SharpGen.CppModel -{ - /// - /// Type declaration. - /// - [XmlType("type")] - public class CppType : CppElement - { - /// - /// Gets or sets the name of the type. - /// - /// The name of the type. - [XmlAttribute("typename")] - public string TypeName { get; set; } - - /// - /// Gets or sets the pointer. - /// - /// The pointer. - [XmlAttribute("ptr")] - public string Pointer { get; set; } - - /// - /// Gets or sets a value indicating whether this is const. - /// - /// true if const; otherwise, false. - [XmlAttribute("const")] - public bool Const { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is array. - /// - /// true if this instance is array; otherwise, false. - [XmlAttribute("array")] - public bool IsArray { get; set; } - - /// - /// Gets or sets the array dimension. - /// - /// The array dimension. - [XmlAttribute("array-dim")] - public string ArrayDimension { get; set; } - - /// - /// Returns a that represents this instance. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - var builder = new StringBuilder(); - if (Const) - builder.Append("const "); - builder.Append(TypeName); - builder.Append(Pointer); - - if (!string.IsNullOrEmpty(Name)) - { - builder.Append(" "); - builder.Append(Name); - } - - if (IsArray) - { - builder.Append("["); - builder.Append(ArrayDimension); - builder.Append("]"); - } - return builder.ToString(); - } - - public override string ToShortString() - { - return TypeName; - } - - public bool Equals(CppType other) - { - if (ReferenceEquals(null, other)) return false; - if (ReferenceEquals(this, other)) return true; - return Equals(other.TypeName, TypeName) && Equals(other.Pointer, Pointer); - } - - public override int GetHashCode() - { - unchecked - { - return ((TypeName != null ? TypeName.GetHashCode() : 0)*397) ^ (Pointer != null ? Pointer.GetHashCode() : 0); - } - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != typeof (CppType)) return false; - return Equals((CppType) obj); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Doc/DocProviderMsdn.cs b/Source/Tools/SharpGen/Doc/DocProviderMsdn.cs deleted file mode 100644 index 87065d95a..000000000 --- a/Source/Tools/SharpGen/Doc/DocProviderMsdn.cs +++ /dev/null @@ -1,669 +0,0 @@ -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Web; -using HtmlAgilityPack; -using ICSharpCode.SharpZipLib.Zip; -using Microsoft.JScript; -using SharpGen; -using SharpGen.Logging; - -using SharpGen.MTPS; - -namespace SharpGen.Doc -{ - internal class DocProviderMsdn : DocProvider - { - private static Regex stripSpace = new Regex(@"[\r\n]+\s+", RegexOptions.Multiline); - private static Regex beginWithSpace = new Regex(@"^\s+"); - private Dictionary mapReplaceName; - private ZipFile _zipFile; - private bool isZipUpdated; - private string archiveFullPath; - - private int filesAddedToArchive = 0; - - public DocProviderMsdn() - { - ArchiveName = "MSDNDoc.zip"; - UseArchive = true; - mapReplaceName = new Dictionary(); - ReplaceName("IDirectSound(?[3A-Za-z]*)::(?.*)$", @"IDirectSound${name}8::${method}"); - ReplaceName("IDirectSound(?[3A-Za-z]*)$", @"IDirectSound${name}8"); - ReplaceName("IDirectInput(?[A-Za-z]*)([0-9]?|[0-9]A)::(?.*)$", @"IDirectInput${name}8::${method}"); - ReplaceName("IDirectInput(?[A-Za-z]*)([0-9]?|[0-9]A)$", @"IDirectInput${name}8"); - ReplaceName("W::", @"::"); - ReplaceName("([a-z0-9])A::", @"$1::"); - ReplaceName("W$", @""); - ReplaceName("^_+", @""); - } - - public void ReplaceName(string fromNameRegex, string toName) - { - mapReplaceName.Add(new Regex(fromNameRegex), toName); - } - - /// - /// Archive to use to save the documentation - /// - public string ArchiveName { get; set; } - - /// - /// Output path for the archive / Directory - /// - public string OutputPath { get; set; } - - /// - /// Set to true to use a zip for caching documentation - /// - public bool UseArchive { get; set; } - - /// - /// Begin to request MSDN - /// - public void Begin() - { - filesAddedToArchive = 0; - string fullPath = (OutputPath ?? ".") + Path.DirectorySeparatorChar + ArchiveName; - - string outputDirectory = Path.GetDirectoryName(fullPath); - - if (!Directory.Exists(outputDirectory)) - Directory.CreateDirectory(outputDirectory); - - if (UseArchive) - { - archiveFullPath = outputDirectory + Path.DirectorySeparatorChar + ArchiveName; - OpenArchive(); - } - } - - /// - /// End request to MSDN. Archive is saved if any updated occurred between Begin/End. - /// - public void End() - { - if (UseArchive) - { - CloseArchive(); - } - } - - private void OpenArchive() - { - if (_zipFile == null) - { - isZipUpdated = false; - var fileInfo = new FileInfo(archiveFullPath); - if (fileInfo.Exists && fileInfo.Length > 0) - { - _zipFile = new ZipFile(archiveFullPath); - } - else - { - File.Delete(archiveFullPath); - _zipFile = ZipFile.Create(archiveFullPath); - } - } - } - - private void CloseArchive(bool clone = false) - { - if (_zipFile != null) - { - if (isZipUpdated) - _zipFile.CommitUpdate(); - _zipFile.Close(); - if (isZipUpdated && clone) - File.Copy(archiveFullPath, archiveFullPath + ".backup", true); - _zipFile = null; - } - } - - private int counter = 0; - - - /// - /// Get the documentation for a particular prefix (include name) and a full name item - /// - /// - /// - public DocItem FindDocumentation(string name) - { - string oldName = name; - // Regex replacer - foreach (var keyValue in mapReplaceName) - { - if (keyValue.Key.Match(name).Success) - { - name = keyValue.Key.Replace(name, keyValue.Value); - break; - } - } - - // Handle name with ends A or W - if (name.EndsWith("A") || name.EndsWith("W")) - { - string previouewChar = new string(name[name.Length - 2], 1); - - if (previouewChar.ToUpper() != previouewChar) - { - name = name.Substring(0, name.Length - 1); - } - } - if (oldName != name) - { - //Console.WriteLine("Documentation: Use name [{0}] instead of [{1}]", name, oldName); - } - - //Logger.Progress(20 + (counter/50) % 10, "Applying C++ documentation ([{0}])", name); - - string doc = GetDocumentationFromCacheOrMsdn(name); - if(doc == null) - { - return new DocItem() {Description = "No documentation for Direct3D12"}; - } - return ParseDocumentation(doc); - } - - /// - /// Internal ZipEntryStreamSource in order to add a string to a zip - /// - internal class ZipEntryStreamSource : IStaticDataSource - { - private Stream stream; - public ZipEntryStreamSource(string doc) - { - byte[] byteArray = Encoding.ASCII.GetBytes( doc ); - stream = new MemoryStream( byteArray ); - } - - public Stream GetSource() - { - return stream; - } - } - - /// - /// Handles documentation from zip/directory - /// - /// - /// - private string GetDocumentationFromCacheOrMsdn(string name) - { - string fileName = name.Replace("::", "-") + ".html"; - - string doc; - - if (UseArchive) - { - OpenArchive(); - var zipEntry = _zipFile.GetEntry(fileName); - if (zipEntry != null) - { - var streamInput = new StreamReader(_zipFile.GetInputStream(zipEntry)); - doc = streamInput.ReadToEnd(); - streamInput.Close(); - } - else - { - // Begin update if zip is not updated - if (!isZipUpdated) - { - _zipFile.BeginUpdate(); - isZipUpdated = true; - } - - Logger.Progress(20 + (counter/50) % 10, "Fetching C++ documentation ([{0}]) from MSDN", name); - - doc = GetDocumentationFromMsdn(name); - - _zipFile.Add(new ZipEntryStreamSource(doc), fileName); - - // Commit update every 20 files - filesAddedToArchive++; - if ((filesAddedToArchive % 20) == 0) - { - // Force a Flush of the archive - CloseArchive(true); - } - } - } else - { - fileName = OutputPath + Path.DirectorySeparatorChar + fileName; - - if (!File.Exists(fileName)) - { - Logger.Progress(20 + (counter / 50) % 10, "Fetching C++ documentation ([{0}]) from MSDN", name); - - doc = GetDocumentationFromMsdn(name); - File.WriteAllText(fileName, doc); - } - else - { - doc = File.ReadAllText(fileName); - } - } - return doc; - } - - - private static HashSet HtmlPreserveTags = new HashSet(StringComparer.InvariantCultureIgnoreCase) { "dl", "dt", "dd", "p", "strong", "pre", "em", "code", "ul", "ol", "li", "table", "tr", "th", "td" }; - - private static string ParseSubNodes(HtmlNode htmlNode, bool isRoot) - { - StringBuilder documentation = new StringBuilder(); - - bool isDocClear = false; - - string htmlNodeName = null; - - //if (!isRoot) - { - htmlNodeName = htmlNode.Name.ToLower(); - if (HtmlPreserveTags.Contains(htmlNodeName)) - documentation.Append("<").Append(htmlNodeName).Append(">"); - } - - if (htmlNode.Name == "a") - { - StringBuilder inside = new StringBuilder(); - foreach (var node in htmlNode.ChildNodes) - inside.Append(ParseSubNodes(node, false).Trim()); - string insideStr = inside.ToString(); - - if (!string.IsNullOrEmpty(insideStr) && insideStr != "Copy") - { - documentation.Append("{{"); - insideStr = insideStr.Trim().Split(' ','\t')[0]; - documentation.Append(insideStr); - documentation.Append("}}"); - } - return documentation.ToString(); - } - //else if (htmlNode.Name == "pre") - //{ - // return "\r\n\r\n" + ParseSubNodes(htmlNode.FirstChild, false) + "\r\n\r\n"; - //} - else if (htmlNode.NodeType == HtmlNodeType.Text) - { - string text = htmlNode.InnerText; - if (beginWithSpace.Match(text).Success) - text = beginWithSpace.Replace(text, " "); - if (stripSpace.Match(text).Success) - text = stripSpace.Replace(text, " "); - return text; - } - - foreach (var node in htmlNode.ChildNodes) - { - string text = ParseSubNodes(node, false); - //if (documentation.Length > 0 && documentation[documentation.Length - 1] == '.' && !string.IsNullOrEmpty(text)) - //{ - // documentation.Append(" "); - //} - - if (text.StartsWith("Type:")) - { - isDocClear = true; - } - else - { - documentation.Append(text); - } - } - - //if (!isRoot && !isDocClear) - if (!isDocClear) - { - if (HtmlPreserveTags.Contains(htmlNodeName)) - documentation.Append(""); - } - - if (isDocClear) - documentation.Clear(); - - //if (htmlNode.Name == "p") - // documentation.Append("\r\n"); - - return documentation.ToString(); - } - - private static Regex regexCapitals = new Regex(@"([^0-9A-Za-z_:\{])([A-Z][A-Z0-9_][0-9A-Za-z_:]*)"); - private static readonly Regex RegexReplacePointer = new Regex(@"pointer"); - - - /// - /// Parse HtmlNode to extract a string from it. Replace anchors href with {{ }} - /// and code with [[ ]] - /// - /// - /// - private static string ParseNode(HtmlNode htmlNode) - { - var result = ParseSubNodes(htmlNode, true); - result = regexCapitals.Replace(result, "$1{{$2}}"); - result = RegexReplacePointer.Replace(result, "reference"); - result = result.Trim(); - return result; - } - - private static string GetTextUntilNextHeader(HtmlNode htmlNode, bool skipFirstNode = true, params string[] untilNodes ) - { - if (skipFirstNode) - htmlNode = htmlNode.NextSibling; - - while (htmlNode != null && htmlNode.Name.ToLower() == "div") - { - htmlNode = htmlNode.FirstChild; - } - if (htmlNode == null) - return string.Empty; - - var builder = new StringBuilder(); - var nodes = new HashSet(StringComparer.InvariantCultureIgnoreCase) { "h3", "h2", "mtps:collapsiblearea" }; - foreach (var untilNode in untilNodes) - { - nodes.Add(untilNode); - } - - while (htmlNode != null && !nodes.Contains(htmlNode.Name.ToLower())) - { - builder.Append(ParseNode(htmlNode)); - htmlNode = htmlNode.NextSibling; - } - - return builder.ToString(); - } - - private static string ParseNextDiv(HtmlNode htmlNode) - { - while (htmlNode != null) - { - if (htmlNode.Name == "div" || htmlNode.Name.ToLower() == "mtps:collapsiblearea") - return ParseNode(htmlNode); - htmlNode = htmlNode.NextSibling; - } - return ""; - } - - /// - /// Parse a MSDN documentation file - /// - /// - /// - public static DocItem ParseDocumentation(string documentationToParse) - { - if (string.IsNullOrEmpty(documentationToParse)) - return new DocItem(); - - var htmlDocument = new HtmlDocument(); - // htmlDocument.Load("Documentation\\d3d11-ID3D11Device-CheckCounter.html"); - htmlDocument.LoadHtml(documentationToParse); - - var item = new DocItem { Id = htmlDocument.DocumentNode.ChildNodes.FindFirst("id").InnerText }; - - var element = htmlDocument.GetElementbyId("mainSection"); - - // Page not found? - if (element == null) - return item; - - // Get description before h3/collasiblearea and table - item.Description = GetTextUntilNextHeader(element.FirstChild, false, "table"); - - HtmlNode firstElement = element.ChildNodes.FindFirst("dl"); - if (firstElement != null) - { - string termName = null; - List currentDoc = new List(); - var nodes = firstElement.ChildNodes; - foreach (HtmlNode htmlNode in nodes) - { - if (htmlNode.Name == "dt") - { - if (currentDoc.Count > 0) - { - item.Items.Add(new DocSubItem - { - Term = termName, - Description = currentDoc[currentDoc.Count - 1] - }); - currentDoc.Clear(); - termName = htmlNode.InnerText; - } - } - else if (htmlNode.Name == "dd") - { - currentDoc.Add(ParseNode(htmlNode)); - } - } - if (currentDoc.Count > 0) - item.Items.Add(new DocSubItem - { - Term = termName, - Description = currentDoc[currentDoc.Count - 1] - }); - } - var headerCollection = element.SelectNodes("//h3 | //h2"); - if (headerCollection != null) - { - foreach (HtmlNode htmlNode in headerCollection) - { - string text = ParseNode(htmlNode); - if (text.StartsWith("Remarks")) - item.Remarks = GetTextUntilNextHeader(htmlNode); - else if (text.StartsWith("Return")) - item.Return = GetTextUntilNextHeader(htmlNode); - } - } - else - { - var returnCollection = element.SelectNodes("//h4[contains(.,'Return')]"); - if (returnCollection != null) - item.Return = ParseNextDiv(returnCollection[0].NextSibling); - - var remarksCollection = element.SelectNodes("//a[@id='remarks']"); - if (remarksCollection != null) - { - item.Remarks = ParseNextDiv(remarksCollection[0].NextSibling); - } - } - return item; - } - - private static Regex regexUrlMoved = new Regex(@"This content has moved to\s+ - /// Get MSDN documentation using an http query - /// - /// The name. - /// - public static string GetDocumentationFromMsdn(string name) - { - - var shortId = GetShortId(name); - if (string.IsNullOrEmpty(shortId)) - return string.Empty; - - var result = GetDocFromMTPS(shortId); - if (string.IsNullOrEmpty(result)) - return string.Empty; - return ""+shortId+"\r\n" + result; - } - - private static ContentServicePortTypeClient proxy; - - public static string GetDocFromMTPS(string shortId) - { - try - { - if (proxy == null) - proxy = new ContentServicePortTypeClient(); - - var request = new getContentRequest - { - contentIdentifier = shortId, - locale = "en-us", - version = "VS.85", - requestedDocuments = new[] { new requestedDocument() { type = documentTypes.primary, selector = "Mtps.Xhtml" } } - }; - var response = proxy.GetContent(new appId() { value = "Sandcastle" }, request); - if (response.primaryDocuments[0].Any != null) - return response.primaryDocuments[0].Any.OuterXml; - } catch (Exception ex) - { - //Logger.Warning("MTPS error for id {0} : {1}", shortId, ex.Message); - } - return string.Empty; - } - - - - private static Regex matchId = new Regex(@"/([a-zA-Z0-9\._\-]+)(\(.+\).*|\.[a-zA-Z]+)?$"); - - private static JScriptEval jScriptEval = new JScriptEval(); - - public static string GetShortId(string name) - { - try - { - var url = "http://social.msdn.microsoft.com/Search/en-US?query=" + HttpUtility.UrlEncode(name) + "&addenglish=1"; - - var result = GetFromUrl(url); - - if (string.IsNullOrEmpty(result)) - return string.Empty; - - var indexOfResults = result.IndexOf("var results", System.StringComparison.Ordinal); - if (indexOfResults > 0) - { - var endOfLine = result.IndexOf('\n', indexOfResults); - var urlResult = (JSObject)jScriptEval.Eval(result.Substring(indexOfResults, endOfLine - indexOfResults)); - var contentUrl = ((JSObject)((ArrayObject)((JSObject)urlResult["data"])["results"])[0])["url"].ToString(); - var match = matchId.Match(contentUrl); - if (match.Success) - return match.Groups[1].Value; - } - } - catch (Exception ex) - { - //Logger.Warning("Unable to get id for [{0}] (Reason: {1})", name, ex.Message); - } - - return string.Empty; - } - - private static bool IsPageNotFound(string value) - { - return value.Contains("Page Not Found"); - } - - private static string GetFromUrlHandlingMove(string url) - { - string result = GetFromUrl(url); - - if (IsPageNotFound(result)) - return null; - - var matchMoved = regexUrlMoved.Match(result); - if (matchMoved.Success) - { - result = GetFromUrl(matchMoved.Groups[1].Value); - } - - if (IsPageNotFound(result)) - return null; - - return result; - } - - internal static string GetFromUrl(string url) - { - try - { - // Create web request - var request = (HttpWebRequest)WebRequest.Create(url); - - // Set value for request headers - - request.Method = "GET"; - request.ProtocolVersion = HttpVersion.Version11; - request.AllowAutoRedirect = true; - request.Accept = "*/*"; - request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"; - request.Headers.Add("Accept-Language", "en-us"); - request.KeepAlive = true; - - StreamReader responseStream = null; - HttpWebResponse webResponse = null; - string webResponseStream = string.Empty; - - // Get response for http web request - webResponse = (HttpWebResponse)request.GetResponse(); - responseStream = new StreamReader(webResponse.GetResponseStream()); - webResponseStream = responseStream.ReadToEnd(); - /*This content has moved to - /// Exposes the JScrip eval function as a .net method. - /// This uses the "safe" JScript.Eval so no disk, or network access is allowed. - /// - private class JScriptEval - { - private readonly object evaluator; - private readonly Type evaluatorType; - - public JScriptEval() - { - var compiler = new JScriptCodeProvider(); - var parameters = new CompilerParameters { GenerateInMemory = true }; - string jscriptSource = - @"package Evaluator -{ - class Evaluator - { - public function Eval(expr : String) - { - return eval(expr); - } - } -}"; - var results = compiler.CompileAssemblyFromSource(parameters, jscriptSource); - - var assembly = results.CompiledAssembly; - evaluatorType = assembly.GetType("Evaluator.Evaluator"); - evaluator = Activator.CreateInstance(evaluatorType); - } - - public object Eval(String ecmaScript) - { - //ecmaScript = WrapInBrackets(ecmaScript); - - return evaluatorType.InvokeMember( - "Eval", - BindingFlags.InvokeMethod, - null, - evaluator, - new object[] { ecmaScript } - ); - } - } - - } -} diff --git a/Source/Tools/SharpGen/DocItem.cs b/Source/Tools/SharpGen/DocItem.cs deleted file mode 100644 index 3efde45da..000000000 --- a/Source/Tools/SharpGen/DocItem.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace SharpGen -{ - /// - /// Documentation item - /// - public class DocItem - { - public DocItem() - { - Items = new List(); - } - - /// - /// Gets or sets the short id. - /// - /// - /// The short id. - /// - public string Id { get; set; } - - /// - /// Gets or sets the description. - /// - /// The description. - public string Description { get; set; } - - /// - /// Gets or sets the remarks. - /// - /// The remarks. - public string Remarks { get; set; } - - /// - /// Gets or sets the return. - /// - /// The return. - public string Return { get; set; } - - /// - /// Gets or sets the items. - /// - /// The items. - public List Items { get; set; } - } - - /// - /// Documentation sub-item, used for structure fields, enum items, and function parameters. - /// - public class DocSubItem - { - /// - /// Gets or sets the name of the sub item. - /// - public string Term { get; set; } - - /// - /// Gets or sets the description associated with the sub item. - /// - public string Description { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/DocProvider.cs b/Source/Tools/SharpGen/DocProvider.cs deleted file mode 100644 index d88d1e1aa..000000000 --- a/Source/Tools/SharpGen/DocProvider.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -namespace SharpGen -{ - /// - /// A DocProvider is responsible to provide documentation to the Parser - /// in order to feed each C++ element with an associated documentation. - /// This is optional. - /// A client of Parser API could provide a documentation provider - /// in an external assembly. - /// - public interface DocProvider - { - /// - /// Begins the process of the documentation provider - /// - void Begin(); - - /// - /// Finds the documentation for a particular C++ item. - /// - /// The full name. for top level elements (like struct, interfaces, enums, functions), It's the name itself of the element. For interface methods, the name is passed like this "IMyInterface::MyMethod". - /// - DocItem FindDocumentation(string fullName); - - /// - // Ends the process of the documentation provider - /// - void End(); - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/EnumTransform.cs b/Source/Tools/SharpGen/Generator/EnumTransform.cs deleted file mode 100644 index 25f5f16b0..000000000 --- a/Source/Tools/SharpGen/Generator/EnumTransform.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Linq; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Model; - -namespace SharpGen.Generator -{ - /// - /// Transforms a C++ enum to a C# enum definition. - /// - public class EnumTransform : TransformBase - { - /// - /// Prepares the specified C++ element to a C# element. - /// - /// The C++ element. - /// The C# element created and registered to the - public override CsBase Prepare(CppElement cppElement) - { - var cppEnum = (CppEnum) cppElement; - - // Create C# enum - var newEnum = new CsEnum - { - Name = NamingRules.Rename(cppEnum), - CppElement = cppEnum - }; - - // Get the namespace for this particular include and enum - var nameSpace = Manager.ResolveNamespace(cppEnum); - nameSpace.Add(newEnum); - - // Bind C++ enum to C# enum - Manager.BindType(cppEnum.Name, newEnum); - - return newEnum; - } - - /// - /// Processes the specified C# element to complete the mapping process between the C++ and C# element. - /// - /// The C# element. - public override void Process(CsBase csElement) - { - Process((CsEnum)csElement); - } - - /// - /// Maps a C++ Enum to a C# enum. - /// - /// the C# enum. - private void Process(CsEnum newEnum) - { - var cppEnum = (CppEnum) newEnum.CppElement; - - // Get tag from C++ enum - var tag = cppEnum.GetTagOrDefault(); - - // Determine enum type. Default is int - string typeName = cppEnum.GetTypeNameWithMapping(); - switch (typeName) - { - case "byte": - newEnum.Type = typeof(byte); - newEnum.SizeOf = 1; - break; - case "short": - newEnum.Type = typeof(short); - newEnum.SizeOf = 1; - break; - case "int": - newEnum.Type = typeof(int); - newEnum.SizeOf = 4; - break; - default: - Logger.Error("Invalid type [{0}] for enum [{1}]. Types supported are : int, byte, short", typeName, cppEnum); - break; - } - - // Find Root Name of this enum - // All enum items should start with the same root name and the root name should be at least 4 chars - string rootName = cppEnum.Name; - string rootNameFound = null; - bool isRootNameFound = false; - for (int i = rootName.Length; i >= 4 && !isRootNameFound; i--) - { - rootNameFound = rootName.Substring(0, i); - - isRootNameFound = true; - foreach (var cppEnumItem in cppEnum.EnumItems) - { - if (!cppEnumItem.Name.StartsWith(rootNameFound)) - { - isRootNameFound = false; - break; - } - } - } - if (isRootNameFound) - rootName = rootNameFound; - - // Create enum items for enum - foreach (var cppEnumItem in cppEnum.EnumItems) - { - string enumName = NamingRules.Rename(cppEnumItem, rootName); - string enumValue = cppEnumItem.Value; - - var csharpEnumItem = new CsEnumItem(enumName, enumValue) { CppElement = cppEnumItem }; - - newEnum.Add(csharpEnumItem); - - if (cppEnumItem.Name != "None") - Manager.BindType(cppEnumItem.Name, csharpEnumItem); - } - - bool tryToAddNone = tag.EnumHasNone.HasValue ? tag.EnumHasNone.Value : false; - - // If C++ enum name is ending with FLAG OR FLAGS - // Then tag this enum as flags and add None if necessary - if (cppEnum.Name.EndsWith("FLAG") || cppEnum.Name.EndsWith("FLAGS")) - { - newEnum.IsFlag = true; - - if (!tag.EnumHasNone.HasValue) - tryToAddNone = !newEnum.Items.Cast().Any(item => item.Name == "None"); - } - - // Add None value - if (tryToAddNone) - { - var csharpEnumItem = new CsEnumItem("None", "0"); - csharpEnumItem.CppElement = new CppElement { Description = "None." }; - newEnum.Add(csharpEnumItem); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/InterfaceTransform.cs b/Source/Tools/SharpGen/Generator/InterfaceTransform.cs deleted file mode 100644 index 65b376d08..000000000 --- a/Source/Tools/SharpGen/Generator/InterfaceTransform.cs +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Model; - -namespace SharpGen.Generator -{ - /// - /// Transforms a C++ interface to a C# interface. - /// - public class InterfaceTransform : TransformBase - { - private readonly Dictionary _mapMoveMethodToInnerInterface = new Dictionary(); - private readonly CsTypeBase DefaultInterfaceCppObject = new CsInterface { Name = Global.Name + ".CppObject" }; - private readonly CsTypeBase DefaultCallbackable = new CsInterface { Name = Global.Name + ".ICallbackable" }; - private readonly CsTypeBase DefaultComObjectCallback = new CsInterface { Name = Global.Name + ".ComObjectCallback" }; - - /// - /// Moves the methods to an inner C# interface. - /// - /// The method name regexp query. - /// The C# inner interface. - /// The name of the property to access the inner interface. - /// Name of the inherited interface. - public void MoveMethodsToInnerInterface(string methodNameRegExp, string innerInterface, string propertyNameAccess, - string inheritedInterfaceName = null) - { - _mapMoveMethodToInnerInterface.Add(new Regex("^" + methodNameRegExp + "$"), - new InnerInterfaceMethod(innerInterface, propertyNameAccess, - inheritedInterfaceName)); - } - - /// - /// Gets the method transformer. - /// - /// The method transformer. - private MethodTransform MethodTranform { get { return Manager.MethodTransform; } } - - /// - /// Prepares the specified C++ element to a C# element. - /// - /// The C++ element. - /// The C# element created and registered to the - public override CsBase Prepare(CppElement cppElement) - { - var cppInterface = (CppInterface) cppElement; - - // IsFullyMapped to false => The structure is being mapped - var cSharpInterface = new CsInterface(cppInterface) {IsFullyMapped = false}; - CsNamespace nameSpace = Manager.ResolveNamespace(cppInterface); - cSharpInterface.Name = NamingRules.Rename(cppInterface); - nameSpace.Add(cSharpInterface); - - Manager.BindType(cppInterface.Name, cSharpInterface); - - return cSharpInterface; - } - - /// - /// Processes the specified C# element to complete the mapping process between the C++ and C# element. - /// - /// The C# element. - public override void Process(CsBase csElement) - { - Process((CsInterface) csElement); - } - - /// - /// Processes the specified interface type. - /// - /// Type of the interface. - public void Process(CsInterface interfaceType ) - { - if (interfaceType.IsFullyMapped) - return; - - // Set IsFullyMapped to avoid recursive mapping - interfaceType.IsFullyMapped = true; - - // var cppInterface = interfaceType.CppElement as CppInterface; - var cppInterface = (CppInterface)interfaceType.CppElement; - - // Associate Parent - var parentType = Manager.FindBindType(cppInterface.ParentName); - if (parentType != null) - { - interfaceType.Base = parentType; - - // Process base if it's not mapped already - if (!parentType.IsFullyMapped) - Process(parentType); - } - else - { - if (!interfaceType.IsCallback) - interfaceType.Base = DefaultInterfaceCppObject; - } - - // Warning, if Guid is null we need to recover it from a declared GUID - if (string.IsNullOrEmpty(cppInterface.Guid)) - { - // Go up to the root base interface - var rootBase = parentType; - while (rootBase != null && rootBase is CsInterface && ((CsInterface)rootBase).Base != null) - rootBase = ((CsInterface) rootBase).Base; - - // look for GUID only for ComObjects - var cppGuid = cppInterface.ParentInclude.Find("^IID_" + cppInterface.Name + "$").FirstOrDefault(); - if (cppGuid == null) - { - // If Guid == null && BaseRoot != null && BaseRoot is a ComObject - // then we probably missed a guid - if (rootBase != null && rootBase.QualifiedName == Global.Name + ".ComObject") - Logger.Warning("cannot find GUID"); - } - else - interfaceType.Guid = cppGuid.Guid.ToString(); - } - - // Handle Methods - var generatedMethods = new List(); - var intPtrType = Manager.ImportType(typeof(IntPtr)); - foreach (var cppMethod in cppInterface.Methods) - { - var cSharpMethod = (CsMethod)MethodTranform.Prepare(cppMethod); - generatedMethods.Add(cSharpMethod); - interfaceType.Add(cSharpMethod); - - MethodTranform.Process(cSharpMethod); - - // Add specialized method for ComArray - DuplicateMethodSpecial(interfaceType, cSharpMethod, intPtrType); - - //MapMethod(cSharpMethod); - //RegisterNativeInterop(cSharpMethod); - - // Allow overloads by changing the name to # - string origCppName = cppInterface.Name + "::" + cppMethod.Name; - string chosenCppName = origCppName; - for (int i = 0; Manager.FindBindType(chosenCppName) != null; i++) - chosenCppName = origCppName + i.ToString(); - - Manager.BindType(chosenCppName, cSharpMethod); - } - - // Dispatch method to inner interface if any - var mapInnerInterface = new Dictionary(); - - // Make a copy of the methods - var methods = interfaceType.Methods.ToList(); - foreach (var csMethod in methods) - { - string cppName = interfaceType.CppElementName + "::" + csMethod.CppElement.Name; - foreach (var keyValuePair in _mapMoveMethodToInnerInterface) - { - if (keyValuePair.Key.Match(cppName).Success) - { - string innerInterfaceName = keyValuePair.Value.InnerInterface; - string parentInterfaceName = keyValuePair.Value.InheritedInterfaceName; - - CsInterface innerCsInterface; - CsInterface parentCsInterface = null; - - if (parentInterfaceName != null) - { - if (!mapInnerInterface.TryGetValue(parentInterfaceName, out parentCsInterface)) - { - parentCsInterface = new CsInterface(null) { Name = parentInterfaceName }; - mapInnerInterface.Add(parentInterfaceName, parentCsInterface); - } - } - - if (!mapInnerInterface.TryGetValue(innerInterfaceName, out innerCsInterface)) - { - // TODO custom cppInterface? - innerCsInterface = new CsInterface(cppInterface) - { Name = innerInterfaceName, PropertyAccesName = keyValuePair.Value.PropertyAccessName, Base = parentCsInterface ?? DefaultInterfaceCppObject }; - - // Add inner interface to root interface - interfaceType.Add(innerCsInterface); - interfaceType.Parent.Add(innerCsInterface); - - // Move method to inner interface - mapInnerInterface.Add(innerInterfaceName, innerCsInterface); - } - - interfaceType.Remove(csMethod); - innerCsInterface.Add(csMethod); - break; - } - } - } - - // Remove dispatched methods from outer interface - //foreach (var innerInterface in mapInnerInterface) - //{ - // foreach (var method in innerInterface.Value.Methods) - // cppInterface.Remove(method.CppElement); - //} - - // If interfaceType is DualCallback, then need to generate a default implem - if (interfaceType.IsDualCallback) - { - var tagForInterface = cppInterface.GetTagOrDefault(); - var nativeCallback = new CsInterface(interfaceType.CppElement as CppInterface) - { - Name = interfaceType.Name + "Native", - Visibility = Visibility.Internal - }; - - // Update nativeCallback from tag - if (tagForInterface != null) - { - if (tagForInterface.NativeCallbackVisibility.HasValue) - nativeCallback.Visibility = tagForInterface.NativeCallbackVisibility.Value; - if (tagForInterface.NativeCallbackName != null) - nativeCallback.Name = tagForInterface.NativeCallbackName; - } - - nativeCallback.Base = interfaceType.Base; - - if (nativeCallback.IsBaseComObject) - { - nativeCallback.Base = DefaultComObjectCallback; - } - - // If Parent is a DualInterface, then inherit from Default Callback - if (interfaceType.Base is CsInterface) - { - var parentInterface = interfaceType.Base as CsInterface; - if (parentInterface.IsDualCallback) - nativeCallback.Base = parentInterface.NativeImplem; - } - - nativeCallback.IBase = interfaceType; - interfaceType.NativeImplem = nativeCallback; - - foreach (var innerElement in interfaceType.Items) - { - if (innerElement is CsMethod) - { - var method = (CsMethod)innerElement; - var newCsMethod = (CsMethod)method.Clone(); - var tagForMethod = method.CppElement.GetTagOrDefault(); - bool keepMethodPublic = tagForMethod.IsKeepImplementPublic.HasValue && tagForMethod.IsKeepImplementPublic.Value; - if (!keepMethodPublic) - { - newCsMethod.Visibility = Visibility.Internal; - newCsMethod.Name = newCsMethod.Name + "_"; - } - nativeCallback.Add(newCsMethod); - } - else - { - Logger.Warning("Unhandled innerElement {0} for DualCallbackInterface {1}", innerElement, interfaceType.Name); - } - } - nativeCallback.IsCallback = false; - nativeCallback.IsDualCallback = true; - interfaceType.Parent.Add(nativeCallback); - } - else - { - // If interface is a callback and parent is ComObject, then remove it - var parentInterface = interfaceType.Base as CsInterface; - if (parentInterface != null && parentInterface.IsDualCallback) - { - interfaceType.Base = parentInterface.NativeImplem; - } - else - { - // Refactor Properties - CreateProperties(generatedMethods); - } - } - - // If interface is a callback and parent is ComObject, then remove it - if (interfaceType.IsCallback ) - { - if (interfaceType.IsBaseComObject) - interfaceType.Base = null; - if (interfaceType.Base == null) - interfaceType.Base = DefaultCallbackable; - } - } - - private static void DuplicateMethodSpecial(CsInterface interfaceType, CsMethod csMethod, CsTypeBase intPtrType) - { - bool hasComArrayLike = false; - foreach(var csParameter in csMethod.Parameters) - { - if(csParameter.IsInComArrayLike) - { - hasComArrayLike = true; - break; - } - } - - // Look for at least one parameter ComArray candidate - if (hasComArrayLike) - { - // Create a new method and transforms all array of ComObject to ComArray - var newMethod = (CsMethod)csMethod.Clone(); - foreach (var csSubParameter in newMethod.Parameters) - { - if (csSubParameter.IsInComArrayLike) - csSubParameter.PublicType = new CsComArray((CsInterface)csSubParameter.PublicType); - } - interfaceType.Add(newMethod); - } - - if(hasComArrayLike || csMethod.RequestRawPtr) - { - // Create private method with raw pointers for arrays, with all arrays as pure IntPtr - // In order to be able to generate method taking single element - var rawMethod = (CsMethod)csMethod.Clone(); - rawMethod.Visibility = Visibility.Private; - foreach(var csSubParameter in rawMethod.Parameters) - { - if(csSubParameter.IsArray || csSubParameter.IsComObject || csSubParameter.HasPointer) - { - csSubParameter.PublicType = intPtrType; - csSubParameter.IsArray = false; - csSubParameter.Attribute = CsParameterAttribute.In; - } - } - interfaceType.Add(rawMethod); - } - } - - private static readonly Regex MatchGet = new Regex(@"^\s*(\<[Pp]\>)?\s*(Gets?|Retrieves?|Returns)"); - - /// - /// Creates C# properties for method that respect the following convention: - /// TODO describe the convention to create properties from methods here. - /// - /// The methods. - private static void CreateProperties(IEnumerable methods) - { - var cSharpProperties = new Dictionary(); - - foreach (var cSharpMethod in methods) - { - bool isIs = cSharpMethod.Name.StartsWith("Is"); - bool isGet = cSharpMethod.Name.StartsWith("Get") || isIs; - bool isSet = cSharpMethod.Name.StartsWith("Set"); - if (!(isGet || isSet)) - continue; - string propertyName = isIs ? cSharpMethod.Name : cSharpMethod.Name.Substring("Get".Length); - - int parameterCount = cSharpMethod.ParameterCount; - var parameterList = cSharpMethod.Parameters; - - CsProperty csProperty; - bool isPropertyToAdd = false; - - if (!cSharpProperties.TryGetValue(propertyName, out csProperty)) - { - csProperty = new CsProperty(propertyName); - isPropertyToAdd = true; - } - - // If the property has already a getter and a setter, this must be an error, remove the property - // (Should never happen, unless there are some polymorphism on the interface's methods) - if (csProperty.Getter != null && csProperty.Setter != null) - { - cSharpProperties.Remove(propertyName); - continue; - } - - // Check Getter - if (isGet) - { - if ((cSharpMethod.IsHResult || !cSharpMethod.HasReturnType) && parameterCount == 1 && - parameterList[0].IsOut && !parameterList[0].IsArray) - { - csProperty.Getter = cSharpMethod; - csProperty.PublicType = parameterList[0].PublicType; - csProperty.IsPropertyParam = true; - } - else if (parameterCount == 0 && cSharpMethod.HasReturnType) - { - csProperty.Getter = cSharpMethod; - csProperty.PublicType = csProperty.Getter.ReturnType.PublicType; - } - else - { - // If there is a getter, but the setter is not valid, then remove the getter - if (csProperty.Setter != null) - cSharpProperties.Remove(propertyName); - continue; - } - } - else - { - // Check Setter - if ((cSharpMethod.IsHResult || !cSharpMethod.HasReturnType) && parameterCount == 1 && - (parameterList[0].IsRefIn || parameterList[0].IsIn || parameterList[0].IsRef) && !parameterList[0].IsArray) - { - csProperty.Setter = cSharpMethod; - csProperty.PublicType = parameterList[0].PublicType; - } - else if (parameterCount == 1 && !cSharpMethod.HasReturnType) - { - csProperty.Setter = cSharpMethod; - csProperty.PublicType = csProperty.Setter.ReturnType.PublicType; - } - else - { - // If there is a getter, but the setter is not valid, then remove the getter - if (csProperty.Getter != null) - cSharpProperties.Remove(propertyName); - continue; - } - } - - // Check when Setter and Getter together that they have the same return type - if (csProperty.Setter != null && csProperty.Getter != null) - { - bool removeProperty = false; - - //// Don't add property that doesn't match with return type - //if (property.Setter != property.Getter.IsHResult) - // continue; - if (csProperty.IsPropertyParam) - { - var getterParameter = csProperty.Getter.Parameters.First(); - var setterParameter = csProperty.Setter.Parameters.First(); - if (getterParameter.PublicType.QualifiedName != setterParameter.PublicType.QualifiedName) - { - removeProperty = true; - } - } - else - { - var getterType = csProperty.Getter.ReturnType; - var setterType = csProperty.Setter.Parameters.First(); - if (getterType.PublicType.QualifiedName != setterType.PublicType.QualifiedName) - removeProperty = true; - } - if (removeProperty) - { - cSharpProperties.Remove(propertyName); - } - } - - if (isPropertyToAdd) - cSharpProperties.Add(propertyName, csProperty); - } - - // Add the property to the parentContainer - foreach (var cSharpProperty in cSharpProperties) - { - var property = cSharpProperty.Value; - - var getterOrSetter = property.Getter ?? property.Setter; - - // Associate the property with the Getter element - property.CppElement = getterOrSetter.CppElement; - - // If We have a getter, then we need to modify the documentation in order to print that we have Gets and Sets. - if (property.Getter != null && property.Setter != null && !string.IsNullOrEmpty(property.Description)) - { - property.Description = MatchGet.Replace(property.Description, "$1$2 or sets"); - } - - var parent = getterOrSetter.Parent; - - // If Getter has no property, - if ((property.Getter != null && !property.Getter.AllowProperty) || (property.Setter != null && !property.Setter.AllowProperty)) - continue; - - // Update visibility for getter and setter (set to internal) - if (property.Getter != null) - { - property.Getter.Visibility = Visibility.Internal; - property.IsPersistent = property.Getter.IsPersistent; - if (property.IsPersistent) - parent.HasPersistent = true; - } - - if (property.Setter != null) - property.Setter.Visibility = Visibility.Internal; - - if (property.Getter != null && property.Name.StartsWith("Is")) - property.Getter.Name = property.Getter.Name + "_"; - - parent.Add(property); - } - } - - /// - /// Private class used for inner interface method creation. - /// - private class InnerInterfaceMethod - { - public readonly string InnerInterface; - public readonly string PropertyAccessName; - public readonly string InheritedInterfaceName; - - public InnerInterfaceMethod(string innerInterface, string propertyAccess, string inheritedInterfaceName) - { - InnerInterface = innerInterface; - PropertyAccessName = propertyAccess; - InheritedInterfaceName = inheritedInterfaceName; - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/MethodTransform.cs b/Source/Tools/SharpGen/Generator/MethodTransform.cs deleted file mode 100644 index d481d7455..000000000 --- a/Source/Tools/SharpGen/Generator/MethodTransform.cs +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Model; - -namespace SharpGen.Generator -{ - /// - /// Transform a C++ method/function to a C# method. - /// - public class MethodTransform : TransformBase - { - /// - /// Prepares the specified C++ element to a C# element. - /// - /// The C++ element. - /// The C# element created and registered to the - public override CsBase Prepare(CppElement cppElement) - { - var cppMethod = (CppMethod) cppElement; - var cSharpFunction = (cppElement is CppFunction) ? new CsFunction((CppFunction)cppMethod) : new CsMethod(cppMethod); - - if (cppElement is CppFunction) - { - // All functions must have a tag - var tag = cppMethod.GetTagOrDefault(); - - if (tag == null || tag.CsClass == null) - { - Logger.Error("CppFunction [{0}] is not tagged and attached to any Class/FunctionGroup", cppMethod); - return null; - } - - var csClass = Manager.FindCsClassContainer(tag.CsClass); - - if (csClass == null) - { - Logger.Error("CppFunction [{0}] is not attached to a Class/FunctionGroup", cppMethod); - return null; - } - - // Set the DllName for this function - ((CsFunction)cSharpFunction).DllName = tag.FunctionDllName; - - // Add the function to the ClassType - csClass.Add(cSharpFunction); - - // Map the C++ name to the CSharpType - Manager.BindType(cppMethod.Name, cSharpFunction); - } - - return cSharpFunction; - } - - /// - /// Registers the native interop signature. - /// - /// The cs method. - private void RegisterNativeInteropSignature(CsMethod csMethod) - { - // Tag if the method is a function - var cSharpInteropCalliSignature = new InteropMethodSignature { IsFunction = (csMethod is CsFunction) }; - - // Handle Return Type parameter - // MarshalType.Type == null, then check that it is a structure - if (csMethod.ReturnType.PublicType is CsStruct || csMethod.ReturnType.PublicType is CsEnum) - { - // Return type and 1st parameter are implicitly a pointer to the structure to fill - if (csMethod.IsReturnStructLarge) - { - cSharpInteropCalliSignature.ReturnType = typeof(void*); - cSharpInteropCalliSignature.ParameterTypes.Add(typeof(void*)); - } - else - { - // Patch for Mono bug with structs marshalling and calli. TEMPORARY - var returnQualifiedName = csMethod.ReturnType.PublicType.QualifiedName; - if (returnQualifiedName == "SharpDX.Result") - cSharpInteropCalliSignature.ReturnType = typeof (int); - else if (returnQualifiedName == "SharpDX.PointerSize" || returnQualifiedName == "SharpDX.Direct3D9.EffectHandle") - cSharpInteropCalliSignature.ReturnType = typeof(void*); - else - cSharpInteropCalliSignature.ReturnType = csMethod.ReturnType.PublicType.QualifiedName; - } - } - else if (csMethod.ReturnType.MarshalType.Type != null) - { - Type type = csMethod.ReturnType.MarshalType.Type; - //if (type == typeof(IntPtr)) - // type = typeof(void*); - cSharpInteropCalliSignature.ReturnType = type; - } - else - { - throw new ArgumentException(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Invalid return type {0} for method {1}", csMethod.ReturnType.PublicType.QualifiedName, csMethod.CppElement)); - } - - // Handle Parameters - foreach (var param in csMethod.Parameters) - { - InteropType interopType; - string publicName = param.PublicType.QualifiedName; - // Patch for Mono bug with structs marshalling and calli. TEMPORARY - if (publicName == "SharpDX.PointerSize" || param.PublicType.QualifiedName == "SharpDX.Direct3D9.EffectHandle") - { - interopType = typeof(void*); - } - else if (param.MarshalType.Type == null) - { - if (param.PublicType is CsStruct) - { - // If parameter is a struct, then a LocalInterop is needed - interopType = param.PublicType.QualifiedName; - cSharpInteropCalliSignature.IsLocal = true; - } - else - { - throw new ArgumentException(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Invalid parameter {0} for method {1}", param.PublicType.QualifiedName, csMethod.CppElement)); - } - } - else - { - Type type = param.MarshalType.Type; - // Patch for Mono bug with structs marshalling and calli. TEMPORARY - if (type == typeof(IntPtr)) - type = typeof(void*); - interopType = type; - } - - cSharpInteropCalliSignature.ParameterTypes.Add(interopType); - } - - var assembly = csMethod.GetParent(); - cSharpInteropCalliSignature = assembly.Interop.Add(cSharpInteropCalliSignature); - - csMethod.Interop = cSharpInteropCalliSignature; - } - - /// - /// Processes the specified C# element to complete the mapping process between the C++ and C# element. - /// - /// The C# element. - public override void Process(CsBase csElement) - { - try - { - var csMethod = (CsMethod)csElement; - Logger.PushContext("Method {0}", csMethod.CppElement); - - Process(csMethod); - - if (csMethod is CsFunction) - csMethod.Visibility = csMethod.Visibility | Visibility.Static; - - RegisterNativeInteropSignature(csMethod); - } - finally - { - Logger.PopContext(); - } - } - - /// - /// Processes the specified method. - /// - /// The method. - private void Process(CsMethod method) - { - var cppMethod = (CppMethod)method.CppElement; - - method.Name = NamingRules.Rename(cppMethod); - method.Offset = cppMethod.Offset; - - // For methods, the tag "type" is only used for return type - // So we are overriding the return type here - var tag = cppMethod.GetTagOrDefault(); - if (tag.MappingType != null) - cppMethod.ReturnType.Tag = new MappingRule() { MappingType = tag.MappingType }; - - // Apply any offset to the method's vtable - method.Offset += tag.LayoutOffsetTranslate; - - // Get the inferred return type - method.ReturnType = Manager.GetCsType(cppMethod.ReturnType); - - // Hide return type only if it is a HRESULT and AlwaysReturnHResult is false - if (method.CheckReturnType && method.ReturnType.PublicType != null && method.ReturnType.PublicType.QualifiedName == "SharpDX.Result") - { - method.HideReturnType = !method.AlwaysReturnHResult; - } - - // Iterates on parameters to convert them to C# parameters - foreach (var cppParameter in cppMethod.Parameters) - { - var cppAttribute = cppParameter.Attribute; - var paramTag = cppParameter.GetTagOrDefault(); - - bool hasArray = cppParameter.IsArray || ((cppAttribute & ParamAttribute.Buffer) != 0); - bool hasParams = (cppAttribute & ParamAttribute.Params) == ParamAttribute.Params; - bool isOptional = (cppAttribute & ParamAttribute.Optional) != 0; - - var paramMethod = Manager.GetCsType(cppParameter); - - paramMethod.Name = NamingRules.Rename(cppParameter); - - bool hasPointer = paramMethod.HasPointer; - - var publicType = paramMethod.PublicType; - var marshalType = paramMethod.MarshalType; - - CsParameterAttribute parameterAttribute = CsParameterAttribute.In; - - if (hasArray) - hasPointer = true; - - // -------------------------------------------------------------------------------- - // Pointer - Handle special cases - // -------------------------------------------------------------------------------- - if (hasPointer) - { - marshalType = Manager.ImportType(typeof(IntPtr)); - - // -------------------------------------------------------------------------------- - // Handling Parameter Interface - // -------------------------------------------------------------------------------- - if (publicType is CsInterface) - { - // Force Interface** to be ParamAttribute.Out when None - if (cppAttribute == ParamAttribute.In) - { - if (cppParameter.Pointer == "**") - cppAttribute = ParamAttribute.Out; - } - - if ( (cppAttribute & ParamAttribute.In) != 0 || (cppAttribute & ParamAttribute.InOut) != 0) - { - parameterAttribute = CsParameterAttribute.In; - - // Force all array of interface to support null - if (hasArray) - { - isOptional = true; - } - - // If Interface is a callback, use IntPtr as a public marshalling type - CsInterface publicCsInterface = (CsInterface)publicType; - if (publicCsInterface.IsCallback) - { - publicType = Manager.ImportType(typeof(IntPtr)); - // By default, set the Visibility to internal for methods using callbacks - // as we need to provide user method. Don't do this on functions as they - // are already hidden by the container - if (!(method is CsFunction)) - { - method.Visibility = Visibility.Internal; - method.Name = method.Name + "_"; - } - } - } - //else if ((cppParameter.Attribute & ParamAttribute.InOut) != 0) - // parameterAttribute = method.ParameterAttribute.Ref; - else if ((cppAttribute & ParamAttribute.Out) != 0) - parameterAttribute = CsParameterAttribute.Out; - } - else - { - // If a pointer to array of bool are handle as array of int - if (paramMethod.IsBoolToInt && (cppAttribute & ParamAttribute.Buffer) != 0) - publicType = Manager.ImportType(typeof(int)); - - // -------------------------------------------------------------------------------- - // Handling Parameter Interface - // -------------------------------------------------------------------------------- - - - if ((cppAttribute & ParamAttribute.In) != 0) - { - parameterAttribute = publicType.Type == typeof(IntPtr) || publicType.Name == Global.Name + ".FunctionCallback" || - publicType.Type == typeof(string) - ? CsParameterAttribute.In - : CsParameterAttribute.RefIn; - } - else if ((cppAttribute & ParamAttribute.InOut) != 0) - { - if ((cppAttribute & ParamAttribute.Optional) != 0) - { - publicType = Manager.ImportType(typeof(IntPtr)); - parameterAttribute = CsParameterAttribute.In; - } - else - { - parameterAttribute = CsParameterAttribute.Ref; - } - - } - else if ((cppAttribute & ParamAttribute.Out) != 0) - parameterAttribute = CsParameterAttribute.Out; - - // Handle void* with Buffer attribute - if (cppParameter.TypeName == "void" && (cppAttribute & ParamAttribute.Buffer) != 0) - { - hasArray = false; - // arrayDimension = 0; - parameterAttribute = CsParameterAttribute.In; - } - else if (publicType.Type == typeof(string) && (cppAttribute & ParamAttribute.Out) != 0) - { - publicType = Manager.ImportType(typeof(IntPtr)); - parameterAttribute = CsParameterAttribute.In; - hasArray = false; - } - else if (publicType is CsStruct && - (parameterAttribute == CsParameterAttribute.Out || hasArray || parameterAttribute == CsParameterAttribute.RefIn || parameterAttribute == CsParameterAttribute.Ref)) - { - // Set IsOut on structure to generate proper marshalling - (publicType as CsStruct).IsOut = true; - } - } - } - if (publicType == null) - { - throw new ArgumentException("Public type cannot be null"); - } - - paramMethod.HasPointer = hasPointer; - paramMethod.Attribute = parameterAttribute; - paramMethod.IsArray = hasArray; - paramMethod.HasParams = hasParams; - paramMethod.HasPointer = hasPointer; - paramMethod.PublicType = publicType; - paramMethod.MarshalType = marshalType; - paramMethod.IsOptionnal = isOptional; - - // Force IsString to be only string (due to Buffer attribute) - if (paramMethod.IsString) - paramMethod.IsArray = false; - - method.Add(paramMethod); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/NamingRulesManager.cs b/Source/Tools/SharpGen/Generator/NamingRulesManager.cs deleted file mode 100644 index 5cce828f4..000000000 --- a/Source/Tools/SharpGen/Generator/NamingRulesManager.cs +++ /dev/null @@ -1,418 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Generator -{ - /// - /// This class handles renaming according to conventions. Pascal case (NamingRulesManager) for global types, - /// Camel case (namingRulesManager) for parameters. - /// - public class NamingRulesManager - { - private readonly List _expandShortName = new List(); - - /// - /// The recorded names, a list of previous name and new name. - /// - public readonly List> RecordNames = new List>(); - - /// - /// Adds the short name rule. - /// - /// Short name of the regex. - /// Name of the expanded. - public void AddShortNameRule(string regexShortName, string expandedName) - { - _expandShortName.Add(new ShortNameMapper(regexShortName, expandedName)); - // Not efficient, but we order from longest to shortest regex - _expandShortName.Sort((left, right) => -left.Regex.ToString().Length.CompareTo(right.Regex.ToString().Length)); - } - - /// - /// Renames a C++++ element - /// - /// The C++ element. - /// Name of the root. - /// The new name - private string RenameCore(CppElement cppElement, string rootName = null) - { - string originalName = cppElement.Name; - string name = cppElement.Name; - - var namingFlags = NamingFlags.Default; - bool nameModifiedByTag = false; - - // Handle Tag - var tag = cppElement.GetTagOrDefault(); - if (tag != null) - { - if (!string.IsNullOrEmpty(tag.MappingName)) - { - nameModifiedByTag = true; - name = tag.MappingName; - // If Final Mapping name then don't proceed further - if (tag.IsFinalMappingName.HasValue && tag.IsFinalMappingName.Value) - return name; - } - - if (tag.NamingFlags.HasValue) - namingFlags = tag.NamingFlags.Value; - } - - // Rename is tagged as final, then return the string - // If the string still contains some "_" then continue while processing - if (!name.Contains("_") && name.ToUpper() != name && char.IsUpper(name[0])) - return name; - - // Remove Prefix (for enums). Don't modify names that are modified by tag - if (!nameModifiedByTag && rootName != null && originalName.StartsWith(rootName)) - name = originalName.Substring(rootName.Length, originalName.Length - rootName.Length); - - // Remove leading '_' - name = name.TrimStart('_'); - - // Convert rest of the string in CamelCase - name = ConvertToPascalCase(name, namingFlags); - return name; - } - - /// - /// Renames the specified C++ element. - /// - /// The C++ element. - /// The C# name - public string Rename(CppElement cppElement) - { - return RecordRename(cppElement, UnKeyword(RenameCore(cppElement))); - } - - /// - /// Renames the specified C++ enum item. - /// - /// The C++ enum item. - /// Name of the root C++ enum. - /// The C# name of this enum item - public string Rename(CppEnumItem cppEnumItem, string rootEnumName) - { - return RecordRename(cppEnumItem, UnKeyword(RenameCore(cppEnumItem, rootEnumName))); - } - - /// - /// Renames the specified C++ parameter. - /// - /// The C++ parameter. - /// The C# name of this parameter. - public string Rename(CppParameter cppParameter) - { - string oldName = cppParameter.Name; - string name = RenameCore(cppParameter, null); - - bool hasPointer = !string.IsNullOrEmpty(cppParameter.Pointer) && - (cppParameter.Pointer.Contains("*") || cppParameter.Pointer.Contains("&")); - if (hasPointer) - { - if (oldName.StartsWith("pp")) - name = name.Substring(2) + "Out"; - else if (oldName.StartsWith("p")) - name = name.Substring(1) + "Ref"; - } - if (char.IsDigit(name[0])) - name = "arg" + name; - - - name = new string(name[0], 1).ToLower() + name.Substring(1); - - return RecordRename(cppParameter, UnKeyword(name)); - } - - /// - /// Dump the names changes as a comma separated list of [FromName,ToName] - /// - /// Text output of the dump - public void DumpRenames(TextWriter writer) - { - foreach (var recordName in RecordNames) - { - writer.WriteLine("{0},{1}", recordName.Item1.FullName, recordName.Item2); - } - } - - /// - /// Record the name source and the modified name. - /// - /// The element to rename - /// The new name - /// The new name - private string RecordRename(CppElement fromElement, string toName) - { - RecordNames.Add(new Tuple(fromElement, toName)); - return toName; - } - - /// - /// Protect the name from all C# reserved words. - /// - /// The name. - /// - private static string UnKeyword(string name) - { - if (IsKeyword(name)) - { - if (name == "string") - return "text"; - name = "@" + name; - } - return name; - } - - /// - /// Determines whether the specified string is a valid Pascal case. - /// - /// The string to validate. - /// The lower count. - /// - /// true if the specified string is a valid Pascal case; otherwise, false. - /// - private static bool IsPascalCase(string str, out int lowerCount) - { - // Count the number of char in lower case - lowerCount = str.Count(charInStr => char.IsLower(charInStr)); - - if (str.Length == 0) - return false; - - // First char must be a letter - if (!char.IsLetter(str[0])) - return false; - - // First letter must be upper - if (!char.IsUpper(str[0])) - return false; - - // Second letter must be lower - if (str.Length > 1 && char.IsUpper(str[1])) - return false; - - // other chars must be letter or numbers - //foreach (char charInStr in str) - //{ - // if (!char.IsLetterOrDigit(charInStr)) - // return false; - //} - return str.All(charInStr => char.IsLetterOrDigit(charInStr)); - } - - /// - /// Converts a string to PascalCase.. - /// - /// The text to convert. - /// The naming options to apply to the given string to convert. - /// The given string in PascalCase. - public string ConvertToPascalCase(string text, NamingFlags namingFlags) - { - string[] splittedPhrase = text.Split('_'); - var sb = new StringBuilder(); - - for (int i = 0; i < splittedPhrase.Length; i++) - { - string subPart = splittedPhrase[i]; - - // Don't perform expansion when asked - if ((namingFlags & NamingFlags.NoShortNameExpand) == 0) - { - while (subPart.Length > 0) - { - bool continueReplace = false; - foreach (var regExp in _expandShortName) - { - var regex = regExp.Regex; - var newText = regExp.Replace; - - if (regex.Match(subPart).Success) - { - if (regExp.HasRegexReplace) - { - subPart = regex.Replace(subPart, regExp.Replace); - sb.Append(subPart); - subPart = string.Empty; - } - else - { - subPart = regex.Replace(subPart, string.Empty); - sb.Append(newText); - continueReplace = true; - } - break; - } - } - - if (!continueReplace) - { - break; - } - } - } - - // Else, perform a standard conversion - if (subPart.Length > 0) - { - int numberOfCharLowercase; - // If string is not Pascal Case, then Pascal Case it - if (IsPascalCase(subPart, out numberOfCharLowercase)) - { - sb.Append(subPart); - } - else - { - char[] splittedPhraseChars = (numberOfCharLowercase > 0) - ? subPart.ToCharArray() - : subPart.ToLower().ToCharArray(); - - if (splittedPhraseChars.Length > 0) - splittedPhraseChars[0] = char.ToUpper(splittedPhraseChars[0]); - sb.Append(new String(splittedPhraseChars)); - } - } - - if ( (namingFlags & NamingFlags.KeepUnderscore) != 0 && (i + 1) < splittedPhrase.Length) - sb.Append("_"); - } - return sb.ToString(); - } - - /// - /// Checks if a given string is a C# keyword. - /// - /// The name to check. - /// true if the name is a C# keyword; false otherwise. - private static bool IsKeyword(string name) - { - return CSharpKeywords.Contains(name); - } - - private class ShortNameMapper - { - public ShortNameMapper(string regex, string replace) - { - Regex = new Regex("^" + regex); - Replace = replace; - HasRegexReplace = replace.Contains("$"); - } - - public Regex Regex; - - public string Replace; - - public bool HasRegexReplace; - } - - /// - /// Reserved C# keywords. - /// - private static readonly string[] CSharpKeywords = new[] - { - "abstract", - "as", - "base", - "bool", - "break", - "byte", - "case", - "catch", - "char", - "checked", - "class", - "const", - "continue", - "decimal", - "default", - "delegate", - "do", - "double", - "else", - "enum", - "event", - "explicit", - "extern", - "false", - "finally", - "fixed", - "float", - "for", - "foreach", - "goto", - "if", - "implicit", - "in", - "int", - "interface", - "internal", - "is", - "lock", - "long", - "namespace", - "new", - "null", - "object", - "operator", - "out", - "override", - "params", - "private", - "protected", - "public", - "readonly", - "ref", - "return", - "sbyte", - "sealed", - "short", - "sizeof", - "stackalloc", - "static", - "string", - "struct", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "uint", - "ulong", - "unchecked", - "unsafe", - "ushort", - "using", - "virtual", - "volatile", - "void", - "while", - }; - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/StructTransform.cs b/Source/Tools/SharpGen/Generator/StructTransform.cs deleted file mode 100644 index 485a6b7a6..000000000 --- a/Source/Tools/SharpGen/Generator/StructTransform.cs +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using SharpGen.Logging; -using SharpGen.CppModel; -using SharpGen.Model; - -namespace SharpGen.Generator -{ - /// - /// Transforms a C++ struct to a C# struct. - /// - public class StructTransform : TransformBase - { - private readonly Dictionary _mapMoveStructToInner = new Dictionary(); - - /// - /// Moves a C++ struct to an inner C# struct. - /// - /// From C++ struct regex query. - /// To C# struct. - public void MoveStructToInner(string fromStruct, string toStruct) - { - _mapMoveStructToInner.Add(new Regex("^" + fromStruct + "$"), toStruct); - } - - /// - /// Prepares C++ struct for mapping. This method is creating the associated C# struct. - /// - /// The c++ struct. - /// - public override CsBase Prepare(CppElement cppElement) - { - var cppStruct = (CppStruct) cppElement; - - // Create a new C# struct - var nameSpace = Manager.ResolveNamespace(cppStruct); - var csStruct = new CsStruct(cppStruct) - { - Name = NamingRules.Rename(cppStruct), - // IsFullyMapped to false => The structure is being mapped - IsFullyMapped = false - }; - - // Add the C# struct to its namespace - nameSpace.Add(csStruct); - - // Map the C++ name to the C# struct - Manager.BindType(cppStruct.Name, csStruct); - return csStruct; - } - - - /// - /// Processes the specified C# element to complete the mapping process between the C++ and C# element. - /// - /// The C# element. - public override void Process(CsBase csElement) - { - Process((CsStruct)csElement); - } - - /// - /// Maps the C++ struct to C# struct. - /// - /// The c sharp struct. - private void Process(CsStruct csStruct) - { - // TODO: this mapping must be robust. Current calculation for field offset is not always accurate for union. - // TODO: need to handle align/packing correctly. - - // If a struct was already mapped, then return immediately - // The method MapStruct can be called recursively - if (csStruct.IsFullyMapped) - return; - - // Set IsFullyMappy in order to avoid recursive mapping - csStruct.IsFullyMapped = true; - - // Get the associated CppStruct and CSharpTag - var cppStruct = (CppStruct)csStruct.CppElement; - bool hasMarshalType = csStruct.HasMarshalType; - - // If this structure need to me moved to another container, move it now - foreach (var keyValuePair in _mapMoveStructToInner) - { - if (keyValuePair.Key.Match(csStruct.CppElementName).Success) - { - string cppName = keyValuePair.Key.Replace(csStruct.CppElementName, keyValuePair.Value); - var destSharpStruct = (CsStruct)Manager.FindBindType(cppName); - // Remove the struct from his container - csStruct.Parent.Remove(csStruct); - // Add this struct to the new container struct - destSharpStruct.Add(csStruct); - } - } - - // Current offset of a field - int currentFieldAbsoluteOffset = 0; - - // Last field offset - int previousFieldOffsetIndex = -1; - - // Size of the last field - int previousFieldSize = 0; - - // - int maxSizeOfField = 0; - - bool isInUnion = false; - - int cumulatedBitOffset = 0; - - - var inheritedStructs = new Stack(); - var currentStruct = cppStruct; - while (currentStruct != null && currentStruct.ParentName != currentStruct.Name) - { - inheritedStructs.Push(currentStruct); - currentStruct = Manager.FindBindType(currentStruct.ParentName)?.CppElement as CppStruct; - } - - while (inheritedStructs.Count > 0) - { - currentStruct = inheritedStructs.Pop(); - - int fieldCount = currentStruct.IsEmpty ? 0 : currentStruct.Items.Count; - - // ------------------------------------------------------------------------------- - // Iterate on all fields and perform mapping - // ------------------------------------------------------------------------------- - for (int fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) - { - var cppField = (CppField)currentStruct.Items[fieldIndex]; - Logger.RunInContext(cppField.ToString(), () => - { - var fieldStruct = Manager.GetCsType(cppField, true); - csStruct.Add(fieldStruct); - - // Get name - fieldStruct.Name = NamingRules.Rename(cppField); - - // BoolToInt doesn't generate native Marshaling although they have a different marshaller - if (!fieldStruct.IsBoolToInt && fieldStruct.HasMarshalType) - hasMarshalType = true; - - - // If last field has same offset, then it's a union - // CurrentOffset is not moved - if (isInUnion && previousFieldOffsetIndex != cppField.Offset) - { - previousFieldSize = maxSizeOfField; - maxSizeOfField = 0; - isInUnion = false; - } - - currentFieldAbsoluteOffset += previousFieldSize; - var fieldAlignment = (fieldStruct.MarshalType ?? fieldStruct.PublicType).CalculateAlignment(); - - // If field alignment is < 0, then we have a pointer somewhere so we can't align - if (fieldAlignment > 0) - { - // otherwise, align the field on the alignment requirement of the field - int delta = (currentFieldAbsoluteOffset % fieldAlignment); - if (delta != 0) - { - currentFieldAbsoluteOffset += fieldAlignment - delta; - } - } - - // Get correct offset (for handling union) - fieldStruct.Offset = currentFieldAbsoluteOffset; - fieldStruct.IsBitField = cppField.IsBitField; - - // Handle bit fields : calculate BitOffset and BitMask for this field - if (previousFieldOffsetIndex != cppField.Offset) - { - cumulatedBitOffset = 0; - } - if (cppField.IsBitField) - { - int lastCumulatedBitOffset = cumulatedBitOffset; - cumulatedBitOffset += cppField.BitOffset; - fieldStruct.BitMask = ((1 << cppField.BitOffset) - 1); // &~((1 << (lastCumulatedBitOffset + 1)) - 1); - fieldStruct.BitOffset = lastCumulatedBitOffset; - } - - - var nextFieldIndex = fieldIndex + 1; - if ((previousFieldOffsetIndex == cppField.Offset) - || (nextFieldIndex < fieldCount && ((CppField)currentStruct.Items[nextFieldIndex]).Offset == cppField.Offset)) - { - if (previousFieldOffsetIndex != cppField.Offset) - { - maxSizeOfField = 0; - } - maxSizeOfField = fieldStruct.SizeOf > maxSizeOfField ? fieldStruct.SizeOf : maxSizeOfField; - isInUnion = true; - csStruct.ExplicitLayout = true; - previousFieldSize = 0; - } - else - { - previousFieldSize = fieldStruct.SizeOf; - } - previousFieldOffsetIndex = cppField.Offset; - }); - } - } - - // In case of explicit layout, check that we can safely generate it on both x86 and x64 (in case of an union - // using pointers, we can't) - if (csStruct.ExplicitLayout) - { - var fieldList = csStruct.Fields.ToList(); - for(int i = 0; i < fieldList.Count; i++) - { - var field = fieldList[i]; - var fieldAlignment = (field.MarshalType ?? field.PublicType).CalculateAlignment(); - - if(fieldAlignment < 0) - { - // If pointer field is not the last one, than we can't handle it - if ((i + 1) < fieldList.Count) - { - Logger.Error( - "The field [{0}] in structure [{1}] has pointer alignment within a structure that contains an union. An explicit layout cannot be handled on both x86/x64. This structure needs manual layout (remove fields from definition) and write them manually in xml mapping files", - field.CppElementName, - csStruct.CppElementName); - break; - } - } - } - } - - csStruct.SizeOf = currentFieldAbsoluteOffset + previousFieldSize; - csStruct.HasMarshalType = hasMarshalType; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/TransformBase.cs b/Source/Tools/SharpGen/Generator/TransformBase.cs deleted file mode 100644 index 7c235bc1d..000000000 --- a/Source/Tools/SharpGen/Generator/TransformBase.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using SharpGen.CppModel; -using SharpGen.Model; - -namespace SharpGen.Generator -{ - /// - /// Base class to convert a C++ type to a C# type. - /// - public abstract class TransformBase - { - /// - /// Initializes this instance with the specified . - /// - /// The manager. - public virtual void Init(TransformManager manager) - { - Manager = manager; - NamingRules = manager.NamingRules; - } - - /// - /// Gets the transform manager. - /// - /// The transform manager. - public TransformManager Manager { get; private set; } - - /// - /// Gets the naming rules manager. - /// - /// The naming rules manager. - public NamingRulesManager NamingRules { get; private set; } - - /// - /// Prepares the specified C++ element to a C# element. - /// - /// The C++ element. - /// The C# element created and registered to the - public abstract CsBase Prepare(CppElement cppElement); - - /// - /// Processes the specified C# element to complete the mapping process between the C++ and C# element. - /// - /// The C# element. - public abstract void Process(CsBase csElement); - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Generator/TransformManager.cs b/Source/Tools/SharpGen/Generator/TransformManager.cs deleted file mode 100644 index f93f1c6dc..000000000 --- a/Source/Tools/SharpGen/Generator/TransformManager.cs +++ /dev/null @@ -1,1459 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Runtime.Remoting.Messaging; -using System.Text; -using System.Text.RegularExpressions; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Model; -using SharpGen.TextTemplating; - -namespace SharpGen.Generator -{ - /// - /// This class is responsible for generating the C# model from C++ model. - /// - public class TransformManager - { - private readonly List _includesToProcess = new List(); - private readonly Dictionary> _mapConstantToCSharpType = new Dictionary>(); - private readonly Dictionary _docToCSharp = new Dictionary(); - private readonly Dictionary> _mapCppNameToCSharpType = new Dictionary>(); - private readonly Dictionary _mapDefinedCSharpType = new Dictionary(); - - private readonly Dictionary _mapIncludeToNamespace = new Dictionary(); - private readonly Dictionary _mapRegisteredFunctionGroup = new Dictionary(); - private readonly Dictionary _mapTypeToNamespace = new Dictionary(); - - /// - /// Initializes a new instance of the class. - /// - public TransformManager() - { - NamingRules = new NamingRulesManager(); - Assemblies = new List(); - CallContext.SetData("Generator", this); - - EnumTransform = new EnumTransform(); - EnumTransform.Init(this); - - StructTransform = new StructTransform(); - StructTransform.Init(this); - - MethodTransform = new MethodTransform(); - MethodTransform.Init(this); - - InterfaceTransform = new InterfaceTransform(); - InterfaceTransform.Init(this); - - GeneratedPath = @".\"; - } - - public bool ForceGenerator { get; set; } - - /// - /// Gets the naming rules manager. - /// - /// The naming rules manager. - public NamingRulesManager NamingRules { get; private set; } - - /// - /// Gets the C++ module used by this instance. - /// - /// The the C++ module used by this instance. - public CppModule CppModule { get; private set; } - - /// - /// Gets assembly list that are processed. This is accessible after - /// method has been called. - /// - /// The assembly list that are processed. - public List Assemblies { get; private set; } - - /// - /// Gets or sets the generated path. - /// - /// The generated path. - public string GeneratedPath { get; set; } - - /// - /// Gets or sets the app type for which to generate C# code. - /// - /// The app type. - public string AppType { get; set; } - - /// - /// Gets or sets the enum transformer. - /// - /// The enum transformer. - internal EnumTransform EnumTransform { get; set; } - - /// - /// Gets or sets the struct transformer. - /// - /// The struct transformer. - internal StructTransform StructTransform { get; set; } - - /// - /// Gets or sets the method transformer. - /// - /// The method transformer. - internal MethodTransform MethodTransform { get; set; } - - /// - /// Gets or sets the interface transformer. - /// - /// The interface transformer. - internal InterfaceTransform InterfaceTransform { get; set; } - - /// - /// Gets a list of include to process. - /// - /// The include to process. - private IEnumerable IncludeToProcess - { - get { return CppModule.Includes.Where(cppInclude => _includesToProcess.Contains(cppInclude.Name)); } - } - - /// - /// Gets or sets the name of the current assembly. - /// - /// The name of the current assembly. - private string CurrentAssemblyName { get; set; } - - /// - /// Gets or sets the name of the current namespace. - /// - /// The name of the current namespace. - private string CurrentNamespaceName { get; set; } - - /// - /// Initializes this instance with the specified C++ module and config. - /// - /// The C++ module. - /// The root config file. - public void Init(CppModule cppModule, ConfigFile config) - { - CppModule = cppModule; - var configFiles = config.ConfigFilesLoaded; - - // Compute dependencies first - // In order to calculate which assembly we need to process - foreach (var configFile in configFiles) - ComputeDependencies(configFile); - - // Check which assembly to update - foreach (var assembly in Assemblies) - CheckAssemblyUpdate(assembly); - - - int numberOfConfigFilesToParse = 0; - // If we don't need to process it, skip it silently - foreach (var configFile in configFiles) - if (configFile.IsMappingToProcess) - numberOfConfigFilesToParse++; - - int indexFile = 0; - // Process each config file - foreach (var configFile in configFiles) - { - if (configFile.IsMappingToProcess) - { - Logger.Progress(30 + (indexFile*30)/numberOfConfigFilesToParse, "Processing mapping rules [{0}]", configFile.Assembly ?? configFile.Id); - ProcessConfigFile(configFile); - indexFile++; - } - } - } - - /// - /// Adds the include to process. - /// - /// The include id. - private void AddIncludeToProcess(string includeId) - { - if (!_includesToProcess.Contains(includeId)) - _includesToProcess.Add(includeId); - } - - /// - /// Computes assembly dependencies from a config file. - /// - /// The file. - private void ComputeDependencies(ConfigFile file) - { - if (string.IsNullOrEmpty(file.Assembly)) - return; - - var assembly = GetOrCreateAssembly(file.Assembly); - - // Review all includes file - foreach (var includeRule in file.Includes) - { - if (includeRule.Attach.HasValue && includeRule.Attach.Value) - // Link this assembly to its config file (for dependency checking) - assembly.AddLinkedConfigFile(file); - else if (includeRule.AttachTypes.Count > 0) - // Link this assembly to its config file (for dependency checking) - assembly.AddLinkedConfigFile(file); - } - - // Add link to extensions if any - if (file.Extension.Count > 0) - assembly.AddLinkedConfigFile(file); - - // Find all dependencies from all linked config files - var dependencyList = new List(); - foreach (var linkedConfigFile in assembly.ConfigFilesLinked) - linkedConfigFile.FindAllDependencies(dependencyList); - - // Add full dependency for this assembly from all config files - foreach (var linkedConfigFile in dependencyList) - assembly.AddLinkedConfigFile(linkedConfigFile); - } - - /// - /// Checks the assembly is up to date relative to its config dependencies. - /// - /// The assembly. - private void CheckAssemblyUpdate(CsAssembly assembly) - { - var maxUpdateTime = ConfigFile.GetLatestTimestamp(assembly.ConfigFilesLinked); - - if (File.Exists(assembly.CheckFileName)) - { - if (maxUpdateTime > File.GetLastWriteTime(assembly.CheckFileName)) - assembly.IsToUpdate = true; - } - else - { - assembly.IsToUpdate = true; - } - - // Force generate - if (ForceGenerator) - assembly.IsToUpdate = true; - - if (assembly.IsToUpdate) - { - foreach (var linkedConfigFile in assembly.ConfigFilesLinked) - linkedConfigFile.IsMappingToProcess = true; - } - string updateForMessage = (assembly.IsToUpdate) ? "Config changed. Need to update from" : "Config unchanged. No need to update from"; - - Logger.Message("Process assembly [{0}] => {1} dependencies: [{2}]", assembly.QualifiedName, updateForMessage, - string.Join(",", assembly.ConfigFilesLinked)); - } - - /// - /// Process the specified config file. - /// - /// The file. - private void ProcessConfigFile(ConfigFile file) - { - Logger.PushLocation(file.AbsoluteFilePath); - try - { - CurrentAssemblyName = file.Assembly; - CurrentNamespaceName = file.Namespace; - - CsAssembly assembly = null; - - if (!string.IsNullOrEmpty(file.Assembly)) - assembly = GetOrCreateAssembly(file.Assembly); - - if (assembly != null) - Logger.Message("Process rules for assembly [{0}] and namespace [{1}]", CurrentAssemblyName, CurrentNamespaceName); - - // Update Naming Rules - foreach (var namingRule in file.Naming) - { - if (namingRule is NamingRuleShort) - NamingRules.AddShortNameRule(namingRule.Name, namingRule.Value); - } - - // Only attach includes when there is a bind to an assembly - if (assembly != null) - { - // Add all includes file - foreach (var includeRule in file.Includes) - { - if (includeRule.Attach.HasValue && includeRule.Attach.Value) - { - // include will be processed - MapIncludeToNamespace(includeRule.Id, null, includeRule.Namespace, includeRule.Output); - } - else - { - // include will be processed - if (includeRule.AttachTypes.Count > 0) - AddIncludeToProcess(includeRule.Id); - - foreach (var attachType in includeRule.AttachTypes) - AttachTypeToNamespace("^" + attachType + "$", null, includeRule.Namespace, includeRule.Output); - } - } - - // Add extensions if any - if (file.Extension.Count > 0) - MapIncludeToNamespace(file.ExtensionId); - - // Register defined Types from tag - foreach (var extensionRule in file.Extension) - { - if (extensionRule is DefineExtensionRule) - { - var defineRule = (DefineExtensionRule) extensionRule; - - CsTypeBase defineType = null; - - if (defineRule.Enum != null) - defineType = new CsEnum {Name = defineRule.Enum}; - else if (defineRule.Struct != null) - { - defineType = new CsStruct {Name = defineRule.Struct}; - if (defineRule.HasCustomMarshal.HasValue) - ((CsStruct) defineType).HasMarshalType = defineRule.HasCustomMarshal.Value; - - if (defineRule.IsStaticMarshal.HasValue) - ((CsStruct)defineType).IsStaticMarshal = defineRule.IsStaticMarshal.Value; - - if (defineRule.HasCustomNew.HasValue) - ((CsStruct) defineType).HasCustomNew = defineRule.HasCustomNew.Value; - } - else if (defineRule.Interface != null) - defineType = new CsInterface {Name = defineRule.Interface}; - else if (defineRule.NewClass != null) - defineType = new CsClass {Name = defineRule.NewClass}; - else - { - Logger.Error("Invalid rule [{0}]. Only valid for enum, struct, class or interface", defineRule); - continue; - } - - if (defineRule.SizeOf.HasValue) - defineType.SizeOf = defineRule.SizeOf.Value; - - if (defineRule.Align.HasValue) - defineType.Align = defineRule.Align.Value; - - // Define this type - DefineType(defineType); - } - else if (extensionRule.GetType() == typeof (CreateExtensionRule)) - { - var createRule = (CreateExtensionRule) extensionRule; - - if (createRule.NewClass != null) - { - var functionGroup = CreateCsClassContainer(null, null, createRule.NewClass); - if (createRule.Visibility.HasValue) - functionGroup.Visibility = createRule.Visibility.Value; - } - else - Logger.Error("Invalid rule [{0}]. Only valid for class", createRule); - } - else if (extensionRule is ConstantRule) - { - HandleConstantRule((ConstantRule) extensionRule); - } - else if (extensionRule is ContextRule) - { - HandleContextRule(file, (ContextRule) extensionRule); - } - } - - // Register bindings from tag - foreach (var bindingRule in file.Bindings) - { - BindType(bindingRule.From, ImportType(bindingRule.To), - string.IsNullOrEmpty(bindingRule.Marshal) ? null : ImportType(bindingRule.Marshal)); - } - } - - // Perform all mappings from tag - foreach (var configRule in file.Mappings) - { - if (configRule is MappingRule) - { - var mappingRule = (MappingRule) configRule; - - if (mappingRule.Enum != null) - CppModule.Tag(mappingRule.Enum, mappingRule); - else if (mappingRule.EnumItem != null) - CppModule.Tag(mappingRule.EnumItem, mappingRule); - else if (mappingRule.Struct != null) - CppModule.Tag(mappingRule.Struct, mappingRule); - else if (mappingRule.Field != null) - CppModule.Tag(mappingRule.Field, mappingRule); - else if (mappingRule.Interface != null) - CppModule.Tag(mappingRule.Interface, mappingRule); - else if (mappingRule.Function != null) - CppModule.Tag(mappingRule.Function, mappingRule); - else if (mappingRule.Method != null) - CppModule.Tag(mappingRule.Method, mappingRule); - else if (mappingRule.Parameter != null) - CppModule.Tag(mappingRule.Parameter, mappingRule); - else if (mappingRule.Element != null) - CppModule.Tag(mappingRule.Element, mappingRule); - else if (mappingRule.DocItem != null) - AddDocLink(mappingRule.DocItem, mappingRule.MappingNameFinal); - } - else if (configRule is ContextRule) - { - HandleContextRule(file, (ContextRule) configRule); - } - else if (configRule is RemoveRule) - { - var removeRule = (RemoveRule) configRule; - if (removeRule.Enum != null) - CppModule.Remove(removeRule.Enum); - else if (removeRule.EnumItem != null) - CppModule.Remove(removeRule.EnumItem); - else if (removeRule.Struct != null) - CppModule.Remove(removeRule.Struct); - else if (removeRule.Field != null) - CppModule.Remove(removeRule.Field); - else if (removeRule.Interface != null) - CppModule.Remove(removeRule.Interface); - else if (removeRule.Function != null) - CppModule.Remove(removeRule.Function); - else if (removeRule.Method != null) - CppModule.Remove(removeRule.Method); - else if (removeRule.Parameter != null) - CppModule.Remove(removeRule.Parameter); - else if (removeRule.Element != null) - CppModule.Remove(removeRule.Element); - } - else if (configRule is MoveRule) - { - var moveRule = (MoveRule) configRule; - if (moveRule.Struct != null) - StructTransform.MoveStructToInner(moveRule.Struct, moveRule.To); - else if (moveRule.Method != null) - InterfaceTransform.MoveMethodsToInnerInterface(moveRule.Method, moveRule.To, moveRule.Property, moveRule.Base); - } - } - } - finally - { - Logger.PopLocation(); - } - } - - /// - /// Handles the context rule. - /// - /// The file. - /// The context rule. - private void HandleContextRule(ConfigFile file, ContextRule contextRule) - { - if (contextRule is ClearContextRule) - CppModule.ClearContextFind(); - else - { - var contextIds = new List(); - - if (!string.IsNullOrEmpty(contextRule.ContextSetId)) - { - var contextSet = file.FindContextSetById(contextRule.ContextSetId); - if (contextSet != null) - contextIds.AddRange(contextSet.Contexts); - } - contextIds.AddRange(contextRule.Ids); - - CppModule.AddContextRangeFind(contextIds); - } - } - - /// - /// Dumps all enums, struct and interfaces to the specified file name. - /// - /// Name of the output file. - public void Dump(string fileName) - { - StreamWriter log = new StreamWriter(fileName, false, Encoding.ASCII); - - string csv = CultureInfo.CurrentCulture.TextInfo.ListSeparator; - string format = "{1}{0}{2}{0}{3}{0}{4}"; - - foreach (var assembly in Assemblies) - { - foreach (var ns in assembly.Namespaces) - { - foreach (var element in ns.Enums) - log.WriteLine(format, csv, "enum", ns.Name, element.Name, element.CppElementName); - foreach (var element in ns.Structs) - log.WriteLine(format, csv, "struct", ns.Name, element.Name, element.CppElementName); - foreach (var element in ns.Interfaces) - log.WriteLine(format, csv, "interface", ns.Name, element.Name, element.CppElementName); - } - } - log.Close(); - } - - /// - /// Generates the C# code. - /// - public void Generate() - { - Transform(); - - if (Logger.HasErrors) - Logger.Fatal("Transform failed"); - - // Configure TextTemplateEngine - var engine = new TemplateEngine(); - engine.OnInclude += TextTemplatingCallback; - engine.SetParameter("Generator", this); - - int indexToGenerate = 0; - var templateNames = new[] { "Enumerations", "Structures", "Interfaces", "Functions", "LocalInterop" }; - - var directoryToCreate = new HashSet(StringComparer.InvariantCultureIgnoreCase); - - // Iterates on templates - foreach (string templateName in templateNames) - { - Logger.Progress(85 + (indexToGenerate*15/templateNames.Length), "Generating code for {0}...", templateName); - indexToGenerate++; - - Logger.Message("\nGenerate {0}", templateName); - string templateFileName = templateName + ".tt"; - - string input = Utilities.GetResourceAsString("Templates." + templateFileName); - - // Sets the template file name - engine.TemplateFileName = - Path.GetFullPath(Path.Combine(Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "..\\..\\Templates\\"), templateFileName)); - - // Iterates on assemblies - foreach (var csAssembly in Assemblies) - { - if (!csAssembly.IsToUpdate) - continue; - - engine.SetParameter("Assembly", csAssembly); - - string generatedDirectoryForAssembly = Path.Combine(csAssembly.RootDirectory, "Generated", AppType); - - // Remove the generated directory before creating it - if (!directoryToCreate.Contains(generatedDirectoryForAssembly)) - { - directoryToCreate.Add(generatedDirectoryForAssembly); - if (Directory.Exists(generatedDirectoryForAssembly)) - { - foreach(var oldGeneratedFile in Directory.EnumerateFiles(generatedDirectoryForAssembly, "*.cs", SearchOption.AllDirectories)) - { - try - { - - File.Delete(oldGeneratedFile); - } - catch (Exception ex) - { - } - } - } - } - - if (!Directory.Exists(generatedDirectoryForAssembly)) - Directory.CreateDirectory(generatedDirectoryForAssembly); - - Logger.Message("Process Assembly {0} => {1}", csAssembly.Name, generatedDirectoryForAssembly); - - // LocalInterop is once generated per assembly - if (templateName == "LocalInterop") - { - Logger.Message("\tProcess Interop {0} => {1}", csAssembly.Name, generatedDirectoryForAssembly); - - //Transform the text template. - string output = engine.ProcessTemplate(input); - string outputFileName = Path.GetFileNameWithoutExtension(templateFileName); - - outputFileName = Path.Combine(generatedDirectoryForAssembly, outputFileName); - outputFileName = outputFileName + ".cs"; - File.WriteAllText(outputFileName, output, Encoding.ASCII); - } - else - { - // Else, iterates on each namespace - foreach (var csNamespace in csAssembly.Namespaces) - { - engine.SetParameter("Namespace", csNamespace); - - string subDirectory = csNamespace.OutputDirectory ?? "."; - - string nameSpaceDirectory = generatedDirectoryForAssembly + "\\" + subDirectory; - if (!Directory.Exists(nameSpaceDirectory)) - Directory.CreateDirectory(nameSpaceDirectory); - - Logger.Message("\tProcess Namespace {0} => {1}", csNamespace.Name, nameSpaceDirectory); - - ////host.Session = new TextTemplatingSession(); - //host.Session = host.CreateSession(); - - //Transform the text template. - string output = engine.ProcessTemplate(input); - string outputFileName = Path.GetFileNameWithoutExtension(templateFileName); - - outputFileName = Path.Combine(nameSpaceDirectory, outputFileName); - outputFileName = outputFileName + ".cs"; - File.WriteAllText(outputFileName, output, Encoding.ASCII); - } - } - } - } - - // Update check files for all assemblies - var processTime = DateTime.Now; - foreach (CsAssembly assembly in Assemblies) - { - File.WriteAllText(assembly.CheckFileName, ""); - File.SetLastWriteTime(assembly.CheckFileName, processTime); - } - } - - /// - /// Callback used by the text templating engine. - /// - /// The sender. - /// The e. - private static void TextTemplatingCallback(object sender, TemplateIncludeArgs e) - { - e.Text = Utilities.GetResourceAsString("Templates." + e.IncludeName); - } - - /// - /// Maps all C++ types to C# - /// - private void Transform() - { - var selectedCSharpType = new List(); - - // Prepare transform by defining/registering all types to process - PrepareTransform(EnumTransform, selectedCSharpType); - PrepareTransform(StructTransform, selectedCSharpType); - PrepareTransform(InterfaceTransform, selectedCSharpType); - PrepareTransform(MethodTransform, selectedCSharpType); - - // Transform all types - Logger.Progress(65, "Transforming enums..."); - ProcessTransform(EnumTransform, selectedCSharpType); - Logger.Progress(70, "Transforming structs..."); - ProcessTransform(StructTransform, selectedCSharpType); - Logger.Progress(75, "Transforming interfaces..."); - ProcessTransform(InterfaceTransform, selectedCSharpType); - Logger.Progress(80, "Transforming functions..."); - ProcessTransform(MethodTransform, selectedCSharpType); - - //// Sort all types inside each namespaces and add constant to FunctionGroup - foreach (CsAssembly cSharpAssembly in Assemblies) - foreach (var ns in cSharpAssembly.Namespaces) - { - // Sort items in this namespace - ns.Sort(); - - foreach (var cSharpFunctionGroup in ns.Classes) - AttachConstants(cSharpFunctionGroup); - } - } - - /// - /// Prepares a transformer from C++ to C# model. - /// - /// The C++ type of data to process - /// The transform. - /// The type to process. - private void PrepareTransform(TransformBase transform, List typeToProcess) where T : CppElement - { - // Predefine all structs, typedefs and interfaces - foreach (var cppInclude in IncludeToProcess) - { - foreach (var cppItem in cppInclude.Iterate()) - { - Logger.RunInContext(cppItem.ToString(), () => - { - // If a struct is already mapped, it means that there is already a predefined mapping - if (FindBindType(cppItem.Name) == null) - { - var csElement = transform.Prepare(cppItem); - if (csElement != null) - typeToProcess.Add(csElement); - } - }); - } - } - } - - /// - /// Processes a transformer from C++ to C# model. - /// - /// The C++ type of data to process - /// The transform. - /// The type to process. - private void ProcessTransform(TransformBase transform, IEnumerable typeToProcess) where T : CsBase - { - foreach (var csItem in typeToProcess.OfType()) - { - Logger.RunInContext(csItem.CppElement.ToString(), () => - { - transform.Process(csItem); - AttachConstants(csItem); - }); - } - } - - /// - /// Gets the C# type from a C++ type. - /// - /// The C# type to return - /// The C++ type to process. - /// if set to true this type is used in a struct declaration. - /// An instantiated C# type - internal T GetCsType(CppType cppType, bool isTypeUsedInStruct = false) where T : CsMarshalBase, new() - { - CsTypeBase publicType = null; - CsTypeBase marshalType = null; - var interopType = new T - { - CppElement = cppType, - IsArray = cppType.IsArray, - ArrayDimension = cppType.ArrayDimension, - // TODO: handle multidimension - HasPointer = !string.IsNullOrEmpty(cppType.Pointer) && (cppType.Pointer.Contains("*") || cppType.Pointer.Contains("&")), - }; - - // Calculate ArrayDimension - int arrayDimensionValue = 0; - if (cppType.IsArray) - { - if (string.IsNullOrEmpty(cppType.ArrayDimension)) - arrayDimensionValue = 0; - else if (!int.TryParse(cppType.ArrayDimension, out arrayDimensionValue)) - arrayDimensionValue = 1; - } - - // If array Dimension is 0, then it is not an array - if (arrayDimensionValue == 0) - { - cppType.IsArray = false; - interopType.IsArray = false; - } - interopType.ArrayDimensionValue = arrayDimensionValue; - - string typeName = cppType.GetTypeNameWithMapping(); - - switch (typeName) - { - case "char": - publicType = ImportType(typeof (byte)); - if (interopType.HasPointer) - publicType = ImportType(typeof (string)); - if (interopType.IsArray) - { - publicType = ImportType(typeof (string)); - marshalType = ImportType(typeof (byte)); - } - break; - case "wchar_t": - publicType = ImportType(typeof (char)); - interopType.IsWideChar = true; - if (interopType.HasPointer) - publicType = ImportType(typeof (string)); - if (interopType.IsArray) - { - publicType = ImportType(typeof (string)); - marshalType = ImportType(typeof (char)); - } - break; - default: - - // If CppType is an array, try first to get the binding for this array - if (cppType.IsArray) - publicType = FindBindType(typeName + "[" + cppType.ArrayDimension + "]"); - - // Else get the typeName - if (publicType == null) - { - // Try to get a declared struct - // If it fails, then this struct is unknown - publicType = FindBindType(typeName); - if (publicType == null) - Logger.Fatal("Unknown type found [{0}]", typeName); - } - else - { - interopType.ArrayDimensionValue = 0; - interopType.IsArray = false; - } - - // Get a MarshalType if any - marshalType = FindBindMarshalType(typeName); - - if (publicType is CsStruct) - { - var referenceStruct = publicType as CsStruct; - - // If a structure was not already parsed, then parsed it before going further - if (!referenceStruct.IsFullyMapped) - { - StructTransform.Process(referenceStruct); - } - - - // If referenced structure has a specialized marshalling, then specify marshalling - if (referenceStruct.HasMarshalType && !interopType.HasPointer) - { - marshalType = publicType; - } - } - else if (publicType is CsEnum) - { - var referenceEnum = publicType as CsEnum; - // Fixed array of enum should be mapped to their respective blittable type - if (interopType.IsArray) - { - marshalType = ImportType(referenceEnum.Type); - } - } - break; - } - - // Set bool to int conversion case - interopType.IsBoolToInt = marshalType != null && marshalType.Type == typeof (int) && publicType.Type == typeof (bool); - - // Default IntPtr type for pointer, unless modified by specialized type (like char* map to string) - if (interopType.HasPointer) - { - if (isTypeUsedInStruct) - { - publicType = ImportType(typeof (IntPtr)); - } - else - { - if (typeName == "void") - publicType = ImportType(typeof (IntPtr)); - - marshalType = ImportType(typeof (IntPtr)); - } - - switch (typeName) - { - case "char": - publicType = ImportType(typeof (string)); - marshalType = ImportType(typeof (IntPtr)); - break; - case "wchar_t": - publicType = ImportType(typeof (string)); - marshalType = ImportType(typeof (IntPtr)); - interopType.IsWideChar = true; - break; - } - } - else - { - if (isTypeUsedInStruct) - { - // Special case for Size type, as it is default marshal to IntPtr for method parameter - if (publicType.QualifiedName == "SharpDX.PointerSize") - marshalType = null; - } - } - - interopType.PublicType = publicType; - interopType.HasMarshalType = (marshalType != null || cppType.IsArray); - if (marshalType == null) - marshalType = publicType; - interopType.MarshalType = marshalType; - - // Update the SizeOf according to the SizeOf MarshalType - interopType.SizeOf = interopType.MarshalType.SizeOf*((interopType.ArrayDimensionValue > 1) ? interopType.ArrayDimensionValue : 1); - - return interopType; - } - - /// - /// Resolves the namespace for a C++ element. - /// - /// The C++ element. - /// The attached namespace for this C++ element. - internal CsNamespace ResolveNamespace(CppElement element) - { - CsNamespace ns; - - var tag = element.GetTagOrDefault(); - - // If a type is redispatched to another namespace - if (!string.IsNullOrEmpty(tag.Assembly) && !string.IsNullOrEmpty(tag.Namespace)) - { - return GetOrCreateNamespace(tag.Assembly, tag.Namespace); - } - - foreach (var regExp in _mapTypeToNamespace) - { - if (regExp.Key.Match(element.Name).Success) - return regExp.Value; - } - - if (!_mapIncludeToNamespace.TryGetValue(element.ParentInclude.Name, out ns)) - { - Logger.Fatal("Unable to find namespace for element [{0}] from include [{1}]", element, element.ParentInclude.Name); - } - return ns; - } - - /// - /// Defines and register a C# type. - /// - /// The C# type. - public void DefineType(CsTypeBase type) - { - string qualifiedName = type.QualifiedName; - if (!_mapDefinedCSharpType.ContainsKey(qualifiedName)) - _mapDefinedCSharpType.Add(qualifiedName, type); - } - - /// - /// Gets a C# type is registered. - /// - /// The C# type. - public CsTypeBase GetTypeDefined(CsTypeBase type) - { - CsTypeBase outType; - _mapDefinedCSharpType.TryGetValue(type.QualifiedName, out outType); - return outType; - } - - /// - /// Tests if a a C# type is registered. - /// - /// The C# type. - public bool IsTypeDefined(CsTypeBase type) - { - return GetTypeDefined(type) != null; - } - - /// - /// Removes a C# type. - /// - /// The C# type. - public bool RemoveDefineType(CsTypeBase type) - { - return _mapDefinedCSharpType.Remove(type.QualifiedName); - } - - /// - /// Imports a defined C# type. - /// - /// The C# type. - /// The C# type base - public CsTypeBase ImportType(Type type) - { - return ImportType(type.FullName); - } - - /// - /// Imports a defined C# type by name. - /// - /// Name of the C# type. - /// The C# type base - public CsTypeBase ImportType(string qualifiedName) - { - CsTypeBase cSharpType; - var typeName = GetShortNameForType(qualifiedName); - if (!_mapDefinedCSharpType.TryGetValue(typeName, out cSharpType)) - { - var type = Type.GetType(qualifiedName); - int sizeOf = 0; - if (type == null) - Logger.Warning("Type [{0}] is not defined", qualifiedName); - else - { - try - { - sizeOf = Marshal.SizeOf(type); - } - catch (Exception) - { - } - } - cSharpType = new CsTypeBase {Name = typeName, Type = type, SizeOf = sizeOf}; - DefineType(cSharpType); - } - return cSharpType; - } - - /// - /// Adds a doc link. - /// - /// Name of the CPP. - /// Name of the c sharp. - public void AddDocLink(string cppName, string cSharpName) - { - if (!_docToCSharp.ContainsKey(cppName)) - _docToCSharp.Add(cppName, cSharpName); - } - - /// - /// Gets the short C# name of a fully qualified C# name - /// - /// Name of the type. - /// - private static string GetShortNameForType(string typeName) - { - if (typeName == typeof (void).FullName) - return "void"; - if (typeName == typeof (string).FullName) - return "string"; - if (typeName == typeof (char).FullName) - return "char"; - if (typeName == typeof (float).FullName) - return "float"; - if (typeName == typeof (double).FullName) - return "double"; - if (typeName == typeof (bool).FullName) - return "bool"; - if (typeName == typeof (ulong).FullName) - return "ulong"; - if (typeName == typeof (long).FullName) - return "long"; - if (typeName == typeof (uint).FullName) - return "uint"; - if (typeName == typeof (int).FullName) - return "int"; - if (typeName == typeof (ushort).FullName) - return "ushort"; - if (typeName == typeof (short).FullName) - return "short"; - if (typeName == typeof (byte).FullName) - return "byte"; - if (typeName == typeof (sbyte).FullName) - return "sbyte"; - return typeName; - } - - /// - /// Maps a C++ type name to a C# class - /// - /// Name of the CPP. - /// The C# type. - /// The C# marshal type - public void BindType(string cppName, CsTypeBase type, CsTypeBase marshalType = null) - { - // Check for type replacer - if (type.CppElement != null) - { - var tag = type.CppElement.GetTagOrDefault(); - if (tag.Replace != null) - { - Logger.Warning("Replace type {0} -> {1}", cppName, tag.Replace); - - // Remove old type from namespace if any - var oldType = FindBindType(tag.Replace); - if (oldType != null) - { - if (oldType.Parent != null) - oldType.Parent.Remove(oldType); - } - - _mapCppNameToCSharpType.Remove(tag.Replace); - - // Replace the name - cppName = tag.Replace; - } - } - - if (_mapCppNameToCSharpType.ContainsKey(cppName)) - { - var old = _mapCppNameToCSharpType[cppName]; - Logger.Error("Mapping C++ element [{0}] to CSharp type [{1}/{2}] is already mapped to [{3}/{4}]", cppName, type.CppElementName, - type.QualifiedName, old.Item1.CppElementName, old.Item1.QualifiedName); - } - else - { - _mapCppNameToCSharpType.Add(cppName, new Tuple(type, marshalType)); - } - } - - /// - /// Finds the C# type binded from a C++ type name. - /// - /// Name of a c++ type - /// A C# type or null - public CsTypeBase FindBindType(string cppName) - { - if (cppName == null) - return null; - Tuple typeMap; - _mapCppNameToCSharpType.TryGetValue(cppName, out typeMap); - if (typeMap == null) return null; - return typeMap.Item1; - } - - /// - /// Finds the C# full name from a C++ name. - /// - /// Name of a c++ type - /// Name of the C# type - public string FindDocName(string cppName) - { - string cSharpName = null; - if (_docToCSharp.TryGetValue(cppName, out cSharpName)) - return cSharpName; - - var cSharpType = FindBindType(cppName); - if (cSharpType != null) - return cSharpType.QualifiedName; - - return null; - } - - /// - /// Finds the C# marshal type binded from a C++ typename. - /// - /// Name of a c++ type - /// A C# type or null - public CsTypeBase FindBindMarshalType(string cppName) - { - if (cppName == null) - return null; - Tuple typeMap; - _mapCppNameToCSharpType.TryGetValue(cppName, out typeMap); - if (typeMap == null) return null; - return typeMap.Item2; - } - - /// - /// Gets a C# assembly by its name. - /// - /// Name of the assembly. - /// A C# assembly - private CsAssembly GetOrCreateAssembly(string assemblyName) - { - var selectedAssembly = (from assembly in Assemblies - where assembly.Name == assemblyName - select assembly).FirstOrDefault(); - if (selectedAssembly == null) - { - selectedAssembly = new CsAssembly(assemblyName, AppType); - selectedAssembly.RootDirectory = Path.Combine(GeneratedPath, selectedAssembly.Name); - Assemblies.Add(selectedAssembly); - } - - return selectedAssembly; - } - - /// - /// Gets the C# namespace by its name and its assembly name. - /// - /// Name of the assembly. - /// Name of the namespace. - /// A C# namespace - private CsNamespace GetOrCreateNamespace(string assemblyName, string namespaceName) - { - if (assemblyName == null) - assemblyName = namespaceName; - - var selectedAssembly = GetOrCreateAssembly(assemblyName); - var selectedCsNamespace = (from nameSpaceObject in selectedAssembly.Namespaces - where nameSpaceObject.Name == namespaceName - select nameSpaceObject).FirstOrDefault(); - if (selectedCsNamespace == null) - { - selectedCsNamespace = new CsNamespace(selectedAssembly, namespaceName); - selectedAssembly.Add(selectedCsNamespace); - } - return selectedCsNamespace; - } - - /// - /// Creates the C# class container (used by functions, constants, variables). - /// - /// Name of the assembly. - /// Name of the namespace. - /// Name of the class. - /// The C# class container - private CsClass CreateCsClassContainer(string assemblyName = null, string namespaceName = null, string className = null) - { - if (className == null) throw new ArgumentNullException("className"); - - if (className.Contains(".")) - { - namespaceName = Path.GetFileNameWithoutExtension(className); - className = Path.GetExtension(className).Trim('.'); - } - - assemblyName = assemblyName ?? CurrentAssemblyName; - namespaceName = namespaceName ?? CurrentNamespaceName; - - CsNamespace csNameSpace = GetOrCreateNamespace(assemblyName, namespaceName); - - foreach (var cSharpFunctionGroup in csNameSpace.Classes) - { - if (cSharpFunctionGroup.Name == className) - return cSharpFunctionGroup; - } - - - var group = new CsClass {Name = className}; - csNameSpace.Add(group); - - _mapRegisteredFunctionGroup.Add(namespaceName + "." + className, group); - - return group; - } - - /// - /// Finds a C# class container by name. - /// - /// Name of the class. - /// - public CsClass FindCsClassContainer(string className) - { - CsClass csClass = null; - _mapRegisteredFunctionGroup.TryGetValue(className, out csClass); - return csClass; - } - - /// - /// Handles the constant rule. - /// - /// The constant rule. - private void HandleConstantRule(ConstantRule constantRule) - { - AddConstantFromMacroToCSharpType(constantRule.Macro ?? constantRule.Guid, constantRule.ClassName, constantRule.Type, constantRule.Name, constantRule.Value, constantRule.Visibility); - } - - /// - /// Adds a list of constant gathered from macros/guids to a C# type. - /// - /// The macro regexp. - /// Full type of the name C sharp. - /// The type. - /// Name of the field. - /// The value map. - /// The visibility. - private void AddConstantFromMacroToCSharpType(string macroRegexp, string fullNameCSharpType, string type, string fieldName = null, string valueMap = null, - Visibility? visibility = null) - { - var constantDefinitions = CppModule.Find(macroRegexp); - Regex regex = new Regex(macroRegexp); - - // $0: Name of the C++ macro - // $1: Value of the C++ macro - // $2: Name of the C# - // $3: Name of current namespace - if (valueMap != null) - { - valueMap = valueMap.Replace("{", "{{"); - valueMap = valueMap.Replace("}", "}}"); - valueMap = valueMap.Replace("$0", "{0}"); - valueMap = valueMap.Replace("$1", "{1}"); - valueMap = valueMap.Replace("$2", "{2}"); - valueMap = valueMap.Replace("$3", "{3}"); - } - - foreach (var macroDef in constantDefinitions) - { - string finalFieldName = fieldName == null ? macroDef.Name : NamingRules.ConvertToPascalCase(regex.Replace(macroDef.Name, fieldName), NamingFlags.Default); - string finalValue = valueMap == null ? macroDef.Value : string.Format(valueMap, macroDef.Name, macroDef.Value, finalFieldName, CurrentNamespaceName); - AddConstantToCSharpType(macroDef, fullNameCSharpType, type, finalFieldName, finalValue).Visibility = visibility.HasValue - ? visibility.Value - : Visibility.Public | Visibility.Const; - } - - var guidDefinitions = CppModule.Find(macroRegexp); - foreach (var guidDef in guidDefinitions) - { - string finalFieldName = fieldName == null ? guidDef.Name : NamingRules.ConvertToPascalCase(regex.Replace(guidDef.Name, fieldName), NamingFlags.Default); - string finalValue = valueMap == null ? guidDef.Guid.ToString() : string.Format(valueMap, guidDef.Name, guidDef.Guid.ToString(), finalFieldName, CurrentNamespaceName); - AddConstantToCSharpType(guidDef, fullNameCSharpType, type, finalFieldName, finalValue).Visibility = visibility.HasValue - ? visibility.Value - : Visibility.Public | Visibility.Static | - Visibility.Readonly; - } - } - - /// - /// Adds a specific C++ constant name/value to a C# type. - /// - /// The C++ element to get the constant from. - /// Name of the C# class to receive this constant. - /// The type name of the C# constant - /// Name of the field. - /// The value of this constant. - /// The C# variable declared. - private CsVariable AddConstantToCSharpType(CppElement cppElement, string csClassName, string typeName, string fieldName, string value) - { - List constantDefinitions; - if (!_mapConstantToCSharpType.TryGetValue(csClassName, out constantDefinitions)) - { - constantDefinitions = new List(); - _mapConstantToCSharpType.Add(csClassName, constantDefinitions); - } - - // Check that the constant is not already present - foreach (var constantDefinition in constantDefinitions) - { - if (constantDefinition.CppElementName == cppElement.Name) - return constantDefinition; - } - - var constantToAdd = new CsVariable(typeName, fieldName, value); - constantToAdd.CppElement = cppElement; - constantDefinitions.Add(constantToAdd); - - BindType(cppElement.Name, constantToAdd); - - return constantToAdd; - } - - /// - /// Tries to attach declared constants to this C# type. - /// - /// The C# type - private void AttachConstants(CsBase csType) - { - foreach (var innerElement in csType.Items) - AttachConstants(innerElement); - - foreach (KeyValuePair> keyValuePair in _mapConstantToCSharpType) - { - if (csType.QualifiedName == keyValuePair.Key) - { - foreach (var constantDef in keyValuePair.Value) - csType.Add(constantDef); - } - } - } - - /// - /// Maps a particular C++ include to a C# namespace. - /// - /// Name of the include. - /// Name of the assembly. - /// The name space. - /// The output directory. - private void MapIncludeToNamespace(string includeName, string assemblyName = null, string nameSpace = null, string outputDirectory = null) - { - AddIncludeToProcess(includeName); - - assemblyName = assemblyName ?? CurrentAssemblyName; - nameSpace = nameSpace ?? CurrentNamespaceName; - - var cSharpNamespace = GetOrCreateNamespace(assemblyName, nameSpace); - if (outputDirectory != null) - cSharpNamespace.OutputDirectory = outputDirectory; - _mapIncludeToNamespace.Add(includeName, cSharpNamespace); - } - - /// - /// Attaches C++ to a C# namespace using a regular expression query. - /// - /// The C++ regex selection. - /// Name of the assembly. - /// Name of the namespace. - /// The output directory. - private void AttachTypeToNamespace(string typeNameRegex, string assemblyName = null, string namespaceName = null, string outputDirectory = null) - { - assemblyName = assemblyName ?? CurrentAssemblyName; - namespaceName = namespaceName ?? CurrentNamespaceName; - var cSharpNamespace = GetOrCreateNamespace(assemblyName, namespaceName); - if (outputDirectory != null) - cSharpNamespace.OutputDirectory = outputDirectory; - _mapTypeToNamespace.Add(new Regex(typeNameRegex), cSharpNamespace); - } - - /// - /// Print statistics for this transform. - /// - public void PrintStatistics() - { - var globalStats = new Dictionary(); - globalStats["interfaces"] = 0; - globalStats["methods"] = 0; - globalStats["parameters"] = 0; - globalStats["enums"] = 0; - globalStats["structs"] = 0; - globalStats["fields"] = 0; - globalStats["enumitems"] = 0; - globalStats["functions"] = 0; - - Assemblies.Sort((left, right) => String.Compare(left.QualifiedName, right.QualifiedName, StringComparison.Ordinal)); - - foreach (var assembly in Assemblies) - { - var stats = globalStats.ToDictionary(globalStat => globalStat.Key, globalStat => 0); - - foreach (var nameSpace in assembly.Items) - { - // Enums, Structs, Interface, FunctionGroup - foreach (var item in nameSpace.Items) - { - if (item is CsInterface) stats["interfaces"]++; - else if (item is CsStruct) stats["structs"]++; - else if (item is CsEnum) stats["enums"]++; - - foreach (var subitem in item.Items) - { - if (subitem is CsFunction) - { - stats["functions"]++; - stats["parameters"] += subitem.Items.Count; - } - else if (subitem is CsMethod) - { - stats["methods"]++; - stats["parameters"] += subitem.Items.Count; - } - else if (subitem is CsEnumItem) - { - stats["enumitems"]++; - } - else if (subitem is CsFieldBase) - { - stats["fields"]++; - } - } - } - - foreach (var stat in stats) globalStats[stat.Key] += stat.Value; - } - - Logger.Message("Assembly [{0}] Statistics", assembly.QualifiedName); - foreach (var stat in stats) - Logger.Message("\tNumber of {0} : {1}", stat.Key, stat.Value); - } - Logger.Message("\n"); - - Logger.Message("Global Statistics:"); - foreach (var stat in globalStats) - Logger.Message("\tNumber of {0} : {1}", stat.Key, stat.Value); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Global.cs b/Source/Tools/SharpGen/Global.cs deleted file mode 100644 index fa3a2d4b0..000000000 --- a/Source/Tools/SharpGen/Global.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -namespace SharpGen -{ - /// - /// Global constant. - /// - public class Global - { - /// - /// Name of root package for SharpDX. - /// - public const string Name = "SharpDX"; - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/ConsoleLogger.cs b/Source/Tools/SharpGen/Logging/ConsoleLogger.cs deleted file mode 100644 index 5814dedab..000000000 --- a/Source/Tools/SharpGen/Logging/ConsoleLogger.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.IO; - -namespace SharpGen.Logging -{ - /// - /// Default logger to Console.Out. - /// - public class ConsoleLogger : LoggerBase - { - public ConsoleLogger() - { - Output = Console.Out; - } - - /// - /// Gets or sets the output . Default is set to . - /// - /// The output . - public TextWriter Output { get; set; } - - /// - /// Exits the process with the specified reason. - /// - /// The reason. - /// The exit code - public override void Exit(string reason, int exitCode) - { - if (Output == null) - return; - - Logger.Error("Process stopped. " + reason); - Environment.Exit(exitCode); - } - - /// - /// Logs the specified log message. - /// - /// The log level - /// The log location. - /// The context. - /// The message. - /// The exception. - /// The parameters. - public override void Log(LogLevel logLevel, LogLocation logLocation, string context, string message, Exception exception, params object[] parameters) - { - lock (this) - { - if (Output == null) - return; - - string lineMessage = FormatMessage(logLevel, logLocation, context, message, exception, parameters); - - Output.WriteLine(lineMessage); - Output.Flush(); - - if (exception != null) - LogException(logLocation, exception); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/ILogger.cs b/Source/Tools/SharpGen/Logging/ILogger.cs deleted file mode 100644 index fb993bbae..000000000 --- a/Source/Tools/SharpGen/Logging/ILogger.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; - -namespace SharpGen.Logging -{ - /// - /// Logging interface for backend output. - /// - public interface ILogger - { - /// - /// Exits the process with the specified reason. - /// - /// The reason. - /// The exit code - void Exit(string reason, int exitCode); - - /// - /// Logs the specified log message. - /// - /// The log level - /// The log location. - /// The context. - /// The message. - /// The exception. - /// The parameters. - void Log(LogLevel logLevel, LogLocation logLocation, string context, string message, Exception exception, params object[] parameters); - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/IProgressReport.cs b/Source/Tools/SharpGen/Logging/IProgressReport.cs deleted file mode 100644 index 8ee459747..000000000 --- a/Source/Tools/SharpGen/Logging/IProgressReport.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -namespace SharpGen.Logging -{ - /// - /// Interface to notify progress. - /// - public interface IProgressReport - { - /// - /// Notify progress. - /// - /// The level 0-100. - /// The message to notify. - /// true if the process is aborted; false otherwise - bool ProgressStatus(int level, string message); - - void FatalExit(string message); - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/LogLevel.cs b/Source/Tools/SharpGen/Logging/LogLevel.cs deleted file mode 100644 index 27c554e4b..000000000 --- a/Source/Tools/SharpGen/Logging/LogLevel.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -namespace SharpGen.Logging -{ - /// - /// Logging level. - /// - public enum LogLevel - { - /// - /// Logging information. - /// - Info, - /// - /// Logging Warning. - /// - Warning, - /// - /// Logging Error. - /// - Error, - /// - /// Logging Fatal. - /// - Fatal - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/LogLocation.cs b/Source/Tools/SharpGen/Logging/LogLocation.cs deleted file mode 100644 index 02bda4d6c..000000000 --- a/Source/Tools/SharpGen/Logging/LogLocation.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Logging -{ - /// - /// Source code location of a logging message. - /// - public class LogLocation - { - /// - /// Initializes a new instance of the class. - /// - /// The file location. - public LogLocation(string filePath) : this(filePath, 1) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The file path. - /// The line. - public LogLocation(string filePath, int line) : this(filePath, line, 1) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The file path. - /// The line. - /// The column. - public LogLocation(string filePath, int line, int column) - { - File = filePath; - Line = line; - Column = column; - } - - /// - /// Gets the file location. - /// - /// The file location. - public string File { get; private set; } - - /// - /// Gets the line inside the file. - /// - /// The line. - public int Line { get; private set; } - - /// - /// Gets the column inside the line of the file. - /// - /// The column. - public int Column { get; private set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/Logger.cs b/Source/Tools/SharpGen/Logging/Logger.cs deleted file mode 100644 index 4a7da5104..000000000 --- a/Source/Tools/SharpGen/Logging/Logger.cs +++ /dev/null @@ -1,315 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; - -namespace SharpGen.Logging -{ - /// - /// Root Logger class. - /// - public class Logger - { - #region Delegates - - /// - /// Public delegate for an execution inside a log context. - /// - public delegate void MethodLogInContext(); - - #endregion - - private static readonly string DefaultFilePathError = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location); - - private static int _errorCount; - private static readonly List ContextStack = new List(); - private static readonly Stack FileLocationStack = new Stack(); - - /// - /// Initializes the class. - /// - static Logger() - { - PushLocation(DefaultFilePathError); - LoggerOutput = new ConsoleLogger(); - } - - /// - /// Gets the context as a string. - /// - /// The context. - private static string ContextAsText - { - get { return HasContext ? string.Join("/", ContextStack) : null; } - } - - /// - /// Gets or sets the logger output. - /// - /// The logger output. - public static ILogger LoggerOutput { get; set; } - - /// - /// Gets a value indicating whether this instance has context. - /// - /// - /// true if this instance has context; otherwise, false. - /// - private static bool HasContext - { - get { return ContextStack.Count > 0; } - } - - /// - /// Gets a value indicating whether this instance has errors. - /// - /// - /// true if this instance has errors; otherwise, false. - /// - public static bool HasErrors - { - get { return _errorCount > 0; } - } - - /// - /// Gets or sets the progress report. - /// - /// The progress report. - public static IProgressReport ProgressReport { get; set; } - - - /// - /// Runs a delegate in the specified log context. - /// - /// The context. - /// The method. - public static void RunInContext(string context, MethodLogInContext method) - { - try - { - PushContext(context); - method(); - } - finally - { - PopContext(); - } - } - - /// - /// Pushes a context string. - /// - /// The context. - public static void PushContext(string context) - { - ContextStack.Add(context); - } - - /// - /// Pushes a context location. - /// - /// Name of the file. - /// The line. - /// The column. - public static void PushLocation(string fileName, int line = 1, int column = 1) - { - FileLocationStack.Push(new LogLocation(fileName, line, column)); - } - - /// - /// Pops the context location. - /// - public static void PopLocation() - { - FileLocationStack.Pop(); - } - - /// - /// Pushes a context formatted string. - /// - /// The context. - /// The parameters. - public static void PushContext(string context, params object[] parameters) - { - ContextStack.Add(string.Format(context, parameters)); - } - - /// - /// Pops the context. - /// - public static void PopContext() - { - if (ContextStack.Count > 0) - ContextStack.RemoveAt(ContextStack.Count - 1); - } - - /// - /// Logs the specified message. - /// - /// The message. - public static void Message(string message) - { - Message("{0}", message); - } - - /// - /// Logs the specified message. - /// - /// The message. - /// The parameters. - public static void Message(string message, params object[] parameters) - { - LogRawMessage(LogLevel.Info, message, null, parameters); - } - - /// - /// Logs the specified progress level and message. - /// - /// The level. - /// The message. - /// The parameters. - public static void Progress(int level, string message, params object[] parameters) - { - Message(message, parameters); - if (ProgressReport != null) - { - if (ProgressReport.ProgressStatus(level, string.Format(message, parameters))) - Exit("Process aborted manually"); - } - } - - /// - /// Logs the specified warning. - /// - /// The message. - public static void Warning(string message) - { - Warning("{0}", message); - } - - /// - /// Logs the specified warning. - /// - /// The message. - /// The parameters. - public static void Warning(string message, params object[] parameters) - { - LogRawMessage(LogLevel.Warning, message, null, parameters); - } - - /// - /// Logs the specified error. - /// - /// The message. - /// The ex. - /// The parameters. - public static void Error(string message, Exception ex, params object[] parameters) - { - LogRawMessage(LogLevel.Error, message, ex, parameters); - _errorCount++; - } - - /// - /// Logs the specified error. - /// - /// The message. - public static void Error(string message) - { - Error("{0}", message); - } - - /// - /// Logs the specified error. - /// - /// The message. - /// The parameters. - public static void Error(string message, params object[] parameters) - { - Error(message, null, parameters); - } - - /// - /// Logs the specified fatal error. - /// - /// The message. - /// The exception. - /// The parameters. - public static void Fatal(string message, Exception ex, params object[] parameters) - { - LogRawMessage(LogLevel.Fatal, message, ex, parameters); - _errorCount++; - Exit("A fatal error occured"); - } - - /// - /// Logs the specified fatal error. - /// - /// The message. - public static void Fatal(string message) - { - Fatal("{0}", message); - } - - /// - /// Logs the specified fatal error. - /// - /// The message. - /// The parameters. - public static void Fatal(string message, params object[] parameters) - { - Fatal(message, null, parameters); - } - - /// - /// Exits the process. - /// - /// The reason. - /// The parameters. - public static void Exit(string reason, params object[] parameters) - { - string message = string.Format(reason, parameters); - if (ProgressReport != null) - ProgressReport.FatalExit(message); - - if (LoggerOutput != null) - LoggerOutput.Exit(message, 1); - } - - /// - /// Logs the raw message to the LoggerOutput. - /// - /// The type. - /// The message. - /// The exception. - /// The parameters. - private static void LogRawMessage(LogLevel type, string message, Exception exception, params object[] parameters) - { - var logLocation = FileLocationStack.Count > 0 ? FileLocationStack.Peek() : null; - - if (LoggerOutput == null) - Console.WriteLine("Warning, unable to log error. No LoggerOutput configured"); - else - LoggerOutput.Log(type, logLocation, ContextAsText, message, exception, parameters); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Logging/LoggerBase.cs b/Source/Tools/SharpGen/Logging/LoggerBase.cs deleted file mode 100644 index 3219fb992..000000000 --- a/Source/Tools/SharpGen/Logging/LoggerBase.cs +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; - -namespace SharpGen.Logging -{ - /// - /// base implementation. - /// - public abstract class LoggerBase : ILogger - { - private static Regex regex = new Regex(@"^\s*at\s+([^\)]+)\)\s+in\s+(.*):line\s+(\d+)"); - - /// - /// Exits the process with the specified reason. - /// - /// The reason. - /// The exit code - public abstract void Exit(string reason, int exitCode); - - /// - /// Logs the specified log message. - /// - /// The log level - /// The log location. - /// The context. - /// The message. - /// The exception. - /// The parameters. - public abstract void Log(LogLevel logLevel, LogLocation logLocation, string context, string message, Exception exception, params object[] parameters); - - - /// - /// Formats the message. - /// - /// The log level. - /// The log location. - /// The context. - /// The message. - /// The exception. - /// The parameters. - /// - public static string FormatMessage(LogLevel logLevel, LogLocation logLocation, string context, string message, Exception exception, params object[] parameters) - { - var lineMessage = new StringBuilder(); - - if (logLocation != null) - lineMessage.AppendFormat("{0}({1},{2}): ", logLocation.File, logLocation.Line, logLocation.Column); - - // Write log parsable by Visual Studio - var levelName = Enum.GetName(typeof (LogLevel), logLevel).ToLower(); - lineMessage.AppendFormat("{0}:{1}", levelName == "fatal" ? "error:fatal":levelName , FormatMessage(context, message, parameters)); - - return lineMessage.ToString(); - } - - /// - /// Formats the message. - /// - /// The context. - /// The message. - /// The parameters. - /// - public static string FormatMessage(string context, string message, params object[] parameters) - { - var lineMessage = new StringBuilder(); - - // Write log parsable by Visual Studio - lineMessage.AppendFormat("{0}{1}", (context != null) ? " in " + context + " " : "", message != null ? string.Format(message, parameters) : ""); - - return lineMessage.ToString(); - } - - /// - /// Logs an exception. - /// - /// The log location. - /// The exception to log. - protected void LogException(LogLocation logLocation, Exception ex) - { - // Print friendly error parsable by Visual Studio in order to display them in the Error List - var reader = new StringReader(ex.ToString()); - - // And write the exception parsable by Visual Studio - string line; - while ((line = reader.ReadLine()) != null) - { - Match match = regex.Match(line); - if (match.Success) - { - string methodLocation = match.Groups[1].Value; - string fileName = match.Groups[2].Value; - int lineNumber; - int.TryParse(match.Groups[3].Value, out lineNumber); - Log( LogLevel.Error, new LogLocation(fileName, lineNumber, 1), methodLocation, "Exception", null); - } - else - { - // Escape a line - Log(LogLevel.Error, logLocation, null, line.Replace("{", "{{").Replace("}", "}}"), null); - } - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/MSDNDoc.zip b/Source/Tools/SharpGen/MSDNDoc.zip deleted file mode 100644 index 55562983c..000000000 Binary files a/Source/Tools/SharpGen/MSDNDoc.zip and /dev/null differ diff --git a/Source/Tools/SharpGen/Mapping.xlsx b/Source/Tools/SharpGen/Mapping.xlsx deleted file mode 100644 index 314bc54f2..000000000 Binary files a/Source/Tools/SharpGen/Mapping.xlsx and /dev/null differ diff --git a/Source/Tools/SharpGen/Model/CppElement.Extensions.cs b/Source/Tools/SharpGen/Model/CppElement.Extensions.cs deleted file mode 100644 index 0d669a1d4..000000000 --- a/Source/Tools/SharpGen/Model/CppElement.Extensions.cs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Text.RegularExpressions; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - public static class CppElementExtensions - { - - private static string LastCppOuterElement = "???"; - - public static void Tag(this CppElement element, string regex, MappingRule tag) where T : CppElement - { - string regexStr = CppElement.StripRegex(regex); - if (typeof(CppMethod).IsAssignableFrom(typeof(T)) || typeof(CppStruct).IsAssignableFrom(typeof(T))) - { - LastCppOuterElement = regexStr; - } - else if ( (typeof(T) == typeof(CppParameter) || typeof(T) == typeof(CppField)) && !regexStr.Contains("::")) - { - regexStr = LastCppOuterElement + "::" + regexStr; - } - - //element.Logger.Flush(); - element.Modify(regexStr, ProcessTag(tag)); - } - - /// - /// Tag an Enum and force it to be interpreted as a flag. - /// - /// - public static string GetTypeNameWithMapping(this CppElement cppType) - { - var tag = cppType.GetTagOrDefault(); - if (tag != null && tag.MappingType != null) - return tag.MappingType; - if (cppType is CppEnum) - return "int"; - if (cppType is CppType) - return (cppType as CppType).TypeName; - throw new ArgumentException(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Cannot get type name from type {0}", cppType)); - } - - private static string RegexRename(Regex regex, string fromName, string replaceName) - { - return replaceName.Contains("$")? regex.Replace(fromName, replaceName) : replaceName; - } - - /// - /// Fully rename a type and all references - /// - /// - /// - private static CppElement.ProcessModifier ProcessTag(MappingRule fromTag) - { - return (pathREgex, element) => - { - var tag = element.Tag as MappingRule; - if (tag == null) - { - tag = new MappingRule(); - element.Tag = tag; - } - if (fromTag.Assembly != null) tag.Assembly = fromTag.Assembly; - if (fromTag.Namespace != null) tag.Namespace = fromTag.Namespace; - if (fromTag.DefaultValue != null) tag.DefaultValue = fromTag.DefaultValue; - if (fromTag.MethodCheckReturnType.HasValue) tag.MethodCheckReturnType = fromTag.MethodCheckReturnType; - if (fromTag.AlwaysReturnHResult.HasValue) tag.AlwaysReturnHResult = fromTag.AlwaysReturnHResult; - if (fromTag.RawPtr.HasValue) tag.RawPtr = fromTag.RawPtr; - if (fromTag.Visibility.HasValue) tag.Visibility = fromTag.Visibility; - if (fromTag.NativeCallbackVisibility.HasValue) tag.NativeCallbackVisibility = fromTag.NativeCallbackVisibility; - if (fromTag.NativeCallbackName != null) tag.NativeCallbackName = fromTag.NativeCallbackName; - if (fromTag.Property.HasValue) tag.Property = fromTag.Property; - if (fromTag.CustomVtbl.HasValue) tag.CustomVtbl = fromTag.CustomVtbl; - if (fromTag.Persist.HasValue) tag.Persist = fromTag.Persist; - if (fromTag.Replace != null) tag.Replace = fromTag.Replace; - if (fromTag.MappingName != null) - tag.MappingName = RegexRename(pathREgex, element.FullName, fromTag.MappingName); - if (fromTag.NamingFlags.HasValue) tag.NamingFlags = fromTag.NamingFlags.Value; - if (fromTag.IsFinalMappingName != null) tag.IsFinalMappingName = fromTag.IsFinalMappingName; - if (fromTag.StructPack != null) tag.StructPack = fromTag.StructPack; - if (fromTag.StructHasNativeValueType != null) tag.StructHasNativeValueType = fromTag.StructHasNativeValueType; - if (fromTag.StructToClass != null) tag.StructToClass = fromTag.StructToClass; - if (fromTag.StructCustomMarshal != null) tag.StructCustomMarshal = fromTag.StructCustomMarshal; - if (fromTag.StructCustomNew != null) tag.StructCustomNew = fromTag.StructCustomNew; - if (fromTag.StructForceMarshalToToBeGenerated != null) - tag.StructForceMarshalToToBeGenerated = fromTag.StructForceMarshalToToBeGenerated; - if (fromTag.MappingType != null) tag.MappingType = RegexRename(pathREgex, element.FullName, fromTag.MappingType); - - var cppType = element as CppType; - if (cppType != null) - { - if (tag.MappingType != null) - cppType.TypeName = tag.MappingType; - - if (fromTag.Pointer != null) - { - cppType.Pointer = fromTag.Pointer; - tag.Pointer = fromTag.Pointer; - } - if (fromTag.TypeArrayDimension != null) - { - cppType.ArrayDimension = fromTag.TypeArrayDimension; - if (fromTag.TypeArrayDimension == null) - cppType.IsArray = false; - tag.TypeArrayDimension = fromTag.TypeArrayDimension; - } - } - if (fromTag.EnumHasFlags != null) tag.EnumHasFlags = fromTag.EnumHasFlags; - if (fromTag.EnumHasNone != null) tag.EnumHasNone = fromTag.EnumHasNone; - if (fromTag.IsCallbackInterface != null) tag.IsCallbackInterface = fromTag.IsCallbackInterface; - if (fromTag.IsDualCallbackInterface != null) tag.IsDualCallbackInterface = fromTag.IsDualCallbackInterface; - if (fromTag.IsKeepImplementPublic != null) tag.IsKeepImplementPublic = fromTag.IsKeepImplementPublic; - if (fromTag.FunctionDllName != null) tag.FunctionDllName = RegexRename(pathREgex, element.FullName, fromTag.FunctionDllName); - if (fromTag.UseDllImport != null) tag.UseDllImport = fromTag.UseDllImport; - if (fromTag.FunctionDllNameFromMacro != null) - tag.FunctionDllName = element.ParentRoot.FindFirst(fromTag.FunctionDllNameFromMacro).StripStringValue; - if (fromTag.CsClass != null) tag.CsClass = fromTag.CsClass; - if (fromTag.ParameterAttribute != null && element is CppParameter) - { - (element as CppParameter).Attribute = fromTag.ParameterAttribute.Value; - tag.ParameterAttribute = fromTag.ParameterAttribute.Value; - } - if (fromTag.ParameterUsedAsReturnType != null ) tag.ParameterUsedAsReturnType = fromTag.ParameterUsedAsReturnType; - return false; - }; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsAssembly.cs b/Source/Tools/SharpGen/Model/CsAssembly.cs deleted file mode 100644 index cbdab1316..000000000 --- a/Source/Tools/SharpGen/Model/CsAssembly.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Xml; -using SharpGen.Logging; -using SharpGen.Config; - -namespace SharpGen.Model -{ - /// - /// An assembly container for namespaces. - /// - public class CsAssembly : CsBase - { - private XmlDocument _codeComments; - private List _configFilesLinked; - - /// - /// Initializes a new instance of the class. - /// - /// Name of the assembly. - /// The application type this assembly is generated for. (Used for the check file) - public CsAssembly(string assemblyName, string appType) - { - Name = assemblyName; - Interop = new InteropManager(); - _configFilesLinked = new List(); - IsToUpdate = false; - _appType = appType; - } - - /// - /// Gets or sets the root directory of this assembly project. - /// - /// The root directory. - public string RootDirectory { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is to update. - /// - /// - /// true if this instance is to update; otherwise, false. - /// - public bool IsToUpdate { get; set; } - - /// - /// Path to the CodeComments file - /// - public const string CodeCommentsPath = @"Documentation\CodeComments.xml"; - private string _appType; - - /// - /// Gets config files linked to this assembly - /// - /// The config files linked to this assembly. - public ReadOnlyCollection ConfigFilesLinked { get { return _configFilesLinked.AsReadOnly(); }} - - /// - /// Adds linked config file to this instance. - /// - /// The config file to add. - public void AddLinkedConfigFile(ConfigFile configFileToAdd) - { - foreach (var configFile in _configFilesLinked) - if (configFile.Id == configFileToAdd.Id) - return; - - _configFilesLinked.Add(configFileToAdd); - } - - /// - /// Gets the name of the check file for this assembly. - /// - /// The name of the check file. - public string CheckFileName - { - get { return QualifiedName + "-" + _appType + ".check"; } - } - - /// - /// Gets the CodeComments XML document associated with this assembly. - /// - /// The code comments. - public XmlDocument CodeComments - { - get - { - if (_codeComments == null) - { - _codeComments = new XmlDocument(); - string codeCommentsFullPath = Path.Combine(RootDirectory, CodeCommentsPath); - - try - { - _codeComments.Load(codeCommentsFullPath); - } - catch (Exception ex) - { - Logger.Warning("Cannot load code comments from [{0}] for assembly [{1}]", codeCommentsFullPath, Name); - } - } - return _codeComments; - } - } - - /// - /// Gets the namespaces. - /// - /// The namespaces. - public IEnumerable Namespaces - { - get { return Items.OfType(); } - } - - /// - /// Gets or sets the interop associated with this AssemblyContainer. - /// - /// The interop. - public InteropManager Interop - { - get; - private set; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsBase.cs b/Source/Tools/SharpGen/Model/CsBase.cs deleted file mode 100644 index 44c0c63b9..000000000 --- a/Source/Tools/SharpGen/Model/CsBase.cs +++ /dev/null @@ -1,450 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Runtime.Remoting.Messaging; -using System.Text; -using System.Text.RegularExpressions; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Generator; - -namespace SharpGen.Model -{ - /// - /// Root class for all model elements. - /// - public class CsBase : ICloneable - { - private List _items; - private CppElement _cppElement; - private string _cppElementName; - private static readonly Regex RegexLinkStart = new Regex(@"^\s*\{\{.*?}}\s*(.*)", RegexOptions.Compiled); - private static readonly Regex RegexLink = new Regex(@"\{\{(.*?)}}", RegexOptions.Compiled); - private static readonly Regex RegexSpaceBegin = new Regex(@"^\s*(.*)", RegexOptions.Compiled); - - /// - /// Initializes a new instance of the class. - /// - public CsBase() - { - _items = new List(); - Generator = CallContext.GetData("Generator") as TransformManager; - Visibility = Visibility.Public; - IsFullyMapped = true; - Description = "No documentation."; - Remarks = ""; - } - - internal TransformManager Generator { get; private set; } - - /// - /// Gets or sets the parent of this container. - /// - /// The parent. - public CsBase Parent { get; set; } - - protected void ClearItems() - { - _items = new List(); - } - - /// - /// Gets the parent of a specified type. This method goes back - /// to all parent and returns the first parent of the type T or null if no parent were found. - /// - /// Type of the parent - /// a valid reference to the parent T or null if no parent of this type - public T GetParent() where T : CsBase - { - CsBase parent = Parent; - while (parent != null && !(parent is T)) - parent = parent.Parent; - return (T) parent; - } - - /// - /// Gets items stored in this container. - /// - /// The items. - public ReadOnlyCollection Items - { - get { return _items.AsReadOnly(); } - } - - /// - /// Gets the variables stored in this container. - /// TODO: move this method in another inherited class. - /// - /// The variables. - public IEnumerable Variables - { - get { return Items.OfType(); } - } - - /// - /// Adds the specified inner container to this container. - /// - /// - /// The Parent property of the innerContainer is set to this container. - /// - /// The inner container. - public void Add(CsBase innerCs) - { - innerCs.Parent = this; - _items.Add(innerCs); - } - - /// - /// Removes the specified inner container from this container - /// - /// - /// The Parent property of the innerContainer is set to null. - /// - /// The inner container. - public void Remove(CsBase innerCs) - { - innerCs.Parent = null; - _items.Remove(innerCs); - } - - /// - /// Sorts all elements inside this instance - /// - public void Sort() - { - _items.Sort(delegate(CsBase x, CsBase y) { return x.Name.CompareTo(y.Name); }); - } - - /// - /// Gets or sets the name of this element. - /// - /// The name. - public string Name { get; set; } - - /// - /// Gets or sets the of this element. Default is public. - /// - /// The visibility. - public Visibility Visibility { get; set; } - - /// - /// Returns a textual representation of the property. - /// - /// The full name of the visibility. - public string VisibilityName - { - get - { - var builder = new StringBuilder(); - - if ((Visibility & Visibility.Public) != 0) - builder.Append("public "); - else if ((Visibility & Visibility.Protected) != 0) - builder.Append("protected "); - else if ((Visibility & Visibility.Internal) != 0) - builder.Append("internal "); - else if ((Visibility & Visibility.Private) != 0) - builder.Append("private "); - else if ((Visibility & Visibility.PublicProtected) != 0) - builder.Append(""); - - if ((Visibility & Visibility.Const) != 0) - builder.Append("const "); - - if ((Visibility & Visibility.Static) != 0) - builder.Append("static "); - - if ((Visibility & Visibility.Sealed) != 0) - builder.Append("sealed "); - - if ((Visibility & Visibility.Readonly) != 0) - builder.Append("readonly "); - - if ((Visibility & Visibility.Override) != 0) - builder.Append("override "); - - if ((Visibility & Visibility.Abstract) != 0) - builder.Append("abstract "); - - if ((Visibility & Visibility.Virtual) != 0) - builder.Append("virtual "); - - return builder.ToString(); - } - } - - /// - /// Gets or sets a value indicating whether this instance is already fully mapped. - /// - /// - /// true if this instance is fully mapped; otherwise, false. - /// - public bool IsFullyMapped { get; set; } - - /// - /// Gets the full qualified name of this type. - /// - /// The full name. - public virtual string QualifiedName - { - get - { - string path = Parent != null ? Parent.QualifiedName : null; - string name = Name ?? ""; - return string.IsNullOrEmpty(path) ? name : path + "." + name; - } - } - - /// - /// Gets or sets the C++ element associated to this container. - /// - /// The CPP element. - public CppElement CppElement - { - get { return _cppElement; } - set - { - _cppElement = value; - if (_cppElement != null ) - { - MsdnId = string.IsNullOrEmpty(CppElement.Id) ? MsdnId : CppElement.Id; - Description = string.IsNullOrEmpty(CppElement.Description) ? Description : CppElement.Description; - Remarks = string.IsNullOrEmpty(CppElement.Remarks) ? Remarks : CppElement.Remarks; - - // Update this container with tag - //if (_cppElement.Tag != null) - UpdateFromTag(_cppElement.GetTagOrDefault()); - } - } - } - - /// - /// Gets the name of the C++ element. - /// - /// The name of the C++ element. "None" if no C++ element attached to this container. - public string CppElementName - { - get - { - if (!string.IsNullOrEmpty(_cppElementName)) - return _cppElementName; - if (CppElement != null && CppElement.Name != null) - return CppElement.Name; - return "None"; - } - set { _cppElementName = value; } - } - - /// - /// Gets or sets the sizeof this element. - /// - /// The size of. - public int SizeOf { get; set; } - - /// - /// Packing alignment for this structure (Default is 0 => Platform default) - /// - public int Align { get; set; } - - /// - /// Gets or sets the MSDN doc id. - /// - /// - /// The id. - /// - public string MsdnId { get; set; } - - /// - /// Gets or sets the description documentation. - /// - /// The description. - public string Description { get; set; } - - /// - /// Gets or sets the remarks documentation. - /// - /// The remarks. - public string Remarks { get; set; } - - public bool HasPersistent { get; set; } - - /// - /// Gets the XML C# doc items as a list of string (contains summary and remarks tags). - /// - /// The XML C# doc items. - public List DocItems - { - get - { - var docItems = new List(); - - // If doc comments are already stored in an external file, than don't emit them - if (!IsCodeCommentsExternal) - { - string description = Description; - string remarks = Remarks; - - description = RegexSpaceBegin.Replace(description, "$1"); - - description = RegexLink.Replace(description, RegexReplaceCReference); - // evaluator => ""); - - string line = null; - - StringReader stringReader = new StringReader(description); - docItems.Add(""); - while ((line = stringReader.ReadLine()) != null) - docItems.Add(line); - docItems.Add(""); - - FillDocItems(docItems); - - if (!string.IsNullOrEmpty(remarks)) - { - remarks = RegexSpaceBegin.Replace(remarks, "$1"); - remarks = RegexLink.Replace(remarks, RegexReplaceCReference); - - stringReader = new StringReader(remarks); - docItems.Add(""); - while ((line = stringReader.ReadLine()) != null) - docItems.Add(line); - docItems.Add(""); - } - } - - docItems.Add(DocIncludeDirective); - if (CppElement != null) - { - if (MsdnId != null) - { - docItems.Add("" + Utilities.EscapeXml(MsdnId) + ""); - } - docItems.Add("" + Utilities.EscapeXml(DocUnmanagedName) + ""); - docItems.Add("" + Utilities.EscapeXml(DocUnmanagedShortName) + ""); - } - - return docItems; - } - } - - protected virtual void FillDocItems(List docItems) {} - - public virtual string DocUnmanagedName - { - get { return CppElementName; } - } - - public virtual string DocUnmanagedShortName - { - get { return CppElementName; } - } - - /// - /// Gets the description as a single line of documentation. - /// - /// The single doc. - public string SingleDoc - { - get - { - string description = Description; - - if (RegexLinkStart.Match(description).Success) - description = RegexLinkStart.Replace(description, "$1"); - - description = RegexSpaceBegin.Replace(description, "$1"); - - description = RegexLink.Replace(description, RegexReplaceCReference); - - StringBuilder docItems = new StringBuilder(); - string line = null; - - StringReader stringReader = new StringReader(description); - while ((line = stringReader.ReadLine()) != null) - docItems.Append(line); - - return docItems.ToString(); - } - } - - private string DocIncludeDirective - { - get - { - var subDir = GetParent().OutputDirectory; - string relativePath = string.IsNullOrEmpty(subDir) ? "." : ".."; - return ""; - } - } - - private bool IsCodeCommentsExternal - { - get { return GetParent().CodeComments.SelectSingleNode(CodeCommentsXPath) != null; } - } - - private string CodeCommentsXPath - { - get { return "/comments/comment[@id='" + ((CppElement != null) ? CppElement.FullName : QualifiedName) + "']"; } - } - - /// - /// Updates this element from a tag. - /// - /// The tag. - protected virtual void UpdateFromTag(MappingRule tag) - { - if (tag.Visibility.HasValue) - Visibility = tag.Visibility.Value; - } - - private static Regex regextWithMethodW = new Regex("([^W])::"); - private static Regex regexWithTypeW = new Regex("([^W])$"); - - private string RegexReplaceCReference(Match match) - { - string matchName = match.Groups[1].Value; - var csName = Generator.FindDocName(matchName); - - // Tries to match with W:: - if (csName == null && regextWithMethodW.Match(matchName).Success) - csName = Generator.FindDocName(regextWithMethodW.Replace(matchName, "$1W::")); - - // Or with W - if (csName == null && regexWithTypeW.Match(matchName).Success) - csName = Generator.FindDocName(regexWithTypeW.Replace(matchName, "$1W")); - - if (csName == null) - return matchName; - - if (csName.StartsWith("<")) - return csName; - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "", csName); - } - - public virtual object Clone() - { - return MemberwiseClone(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsClass.cs b/Source/Tools/SharpGen/Model/CsClass.cs deleted file mode 100644 index 9befb7128..000000000 --- a/Source/Tools/SharpGen/Model/CsClass.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; -using System.Xml.Serialization; - -namespace SharpGen.Model -{ - [XmlType("class")] - public class CsClass : CsTypeBase - { - public CsClass() - { - Visibility = Config.Visibility.PublicProtected | Config.Visibility.Static; - Description = "Functions"; - } - - public IEnumerable Functions - { - get { return Items.OfType(); } - } - - public List GetFunctionDllNames() - { - var functionNames = new List(); - - foreach (var cSharpFunction in Functions) - { - if (!functionNames.Contains(cSharpFunction.DllName) && !cSharpFunction.UseDllImport) - functionNames.Add(cSharpFunction.DllName); - } - return functionNames; - } - - public override string ToString() - { - return Name; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsComArray.cs b/Source/Tools/SharpGen/Model/CsComArray.cs deleted file mode 100644 index eb3c3544a..000000000 --- a/Source/Tools/SharpGen/Model/CsComArray.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - public class CsComArray : CsInterface - { - private CsInterface baseElement; - - public CsComArray(CsInterface element) : base((CppInterface)element.CppElement) - { - baseElement = element; - } - - public override string QualifiedName - { - get - { - return "SharpDX.ComArray<" + baseElement.QualifiedName + ">"; - } - } - } -} - diff --git a/Source/Tools/SharpGen/Model/CsEnum.cs b/Source/Tools/SharpGen/Model/CsEnum.cs deleted file mode 100644 index 15bd166bd..000000000 --- a/Source/Tools/SharpGen/Model/CsEnum.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; -using System.Xml.Serialization; -using SharpGen.Config; - -namespace SharpGen.Model -{ - [XmlType("enum")] - public class CsEnum : CsTypeBase - { - public CsEnum() - { - Type = typeof (int); - SizeOf = 4; - } - - public bool IsFlag { get; set; } - - public string TypeName - { - get - { - if ( Type == typeof(int) ) - return "int"; - if (Type == typeof(short)) - return "short"; - if (Type == typeof(byte)) - return "byte"; - return "UNKNOWN"; - } - } - - public IEnumerable EnumItems - { - get { return Items.OfType(); } - } - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - if (tag.EnumHasFlags.HasValue) - IsFlag = tag.EnumHasFlags.Value; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsEnumItem.cs b/Source/Tools/SharpGen/Model/CsEnumItem.cs deleted file mode 100644 index 4dbb7a27e..000000000 --- a/Source/Tools/SharpGen/Model/CsEnumItem.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Model -{ - public class CsEnumItem : CsTypeBase - { - public CsEnumItem() - { - SizeOf = 4; - } - - public CsEnumItem(string name, string value) - { - Name = name; - Value = value; - } - - public string Value { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsField.cs b/Source/Tools/SharpGen/Model/CsField.cs deleted file mode 100644 index c4be63d87..000000000 --- a/Source/Tools/SharpGen/Model/CsField.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Model -{ - /// - /// Struct field - /// - public class CsField : CsFieldBase - { - public int Offset { get; set; } - - public bool IsBitField { get; set; } - - public int BitMask { get; set; } - - public int BitOffset { get; set; } - - public override string DocUnmanagedName - { - get { return CppElement != null ? CppElement.ToString() : "???"; } - } - - public override string DocUnmanagedShortName - { - get { return CppElement != null ? CppElement.ToShortString() : "???"; } - } - - public bool IsFixedArrayOfStruct - { - get - { - return MarshalType is CsStruct || PublicType.Type == typeof(System.IntPtr); - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsFieldBase.cs b/Source/Tools/SharpGen/Model/CsFieldBase.cs deleted file mode 100644 index f0305e6da..000000000 --- a/Source/Tools/SharpGen/Model/CsFieldBase.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Model -{ - public class CsFieldBase : CsMarshalBase - { - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsFunction.cs b/Source/Tools/SharpGen/Model/CsFunction.cs deleted file mode 100644 index 6fdb44d44..000000000 --- a/Source/Tools/SharpGen/Model/CsFunction.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - public class CsFunction : CsMethod - { - public CsFunction(CppFunction cppMethod) : base(cppMethod) - { - } - - protected override int MaxSizeReturnParameter - { - get - { - return 8; - } - } - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - UseDllImport = !tag.UseDllImport.HasValue || tag.UseDllImport.Value; - } - - public string DllName { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsInterface.cs b/Source/Tools/SharpGen/Model/CsInterface.cs deleted file mode 100644 index ee7d3c443..000000000 --- a/Source/Tools/SharpGen/Model/CsInterface.cs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; -using System.Xml.Serialization; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - [XmlType("interface")] - public class CsInterface : CsTypeBase - { - public CsInterface() : this(null) - { - } - - public CsInterface(CppInterface cppInterface) - { - CppElement = cppInterface; - if (cppInterface != null) - Guid = cppInterface.Guid; - NativeImplem = this; - } - - public IEnumerable Methods - { - get { return Items.OfType(); } - } - - public IEnumerable Properties - { - get { return Items.OfType(); } - } - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - IsCallback = tag.IsCallbackInterface.HasValue?tag.IsCallbackInterface.Value:false; - IsDualCallback = tag.IsDualCallbackInterface.HasValue ? tag.IsDualCallbackInterface.Value : false; - } - - /// - /// Class Parent inheritance - /// - public CsTypeBase Base { get; set; } - - /// - /// Interface Parent inheritance - /// - public CsTypeBase IBase { get; set; } - - public CsInterface NativeImplem { get; set; } - - public string Guid { get; set; } - - /// - /// Only valid for inner interface. Specify the name of the property in the outer interface to access to the inner interface - /// - public string PropertyAccesName { get; set; } - - /// - /// True if this interface is used as a callback to a C# object - /// - public bool IsCallback { get; set; } - - /// - /// True if this interface is used as a dual-callback to a C# object - /// - public bool IsDualCallback { get; set; } - - /// - /// List of declared inner structs - /// - public bool HasInnerInterfaces - { - get { return Items.OfType().Count() > 0; } - } - - /// - /// Gets a value indicating whether this instance is base COM object. - /// - /// - /// true if this instance is base COM object; otherwise, false. - /// - public bool IsBaseComObject - { - get { return Base != null && (Base as CsInterface).QualifiedName == Global.Name + ".ComObject"; } - } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "csinterface {0} => {1}", CppElementName, QualifiedName); - } - - /// - /// List of declared inner structs - /// - public IEnumerable InnerInterfaces - { - get { return Items.OfType(); } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsMarshalBase.cs b/Source/Tools/SharpGen/Model/CsMarshalBase.cs deleted file mode 100644 index b1509d281..000000000 --- a/Source/Tools/SharpGen/Model/CsMarshalBase.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Model -{ - public class CsMarshalBase : CsBase - { - /// - /// Public type used for interface - /// - public CsTypeBase PublicType { get; set; } - - /// - /// Internal type used for marshalling. If null, then use instead public type. - /// - public CsTypeBase MarshalType { get; set; } - - public bool HasPointer { get; set; } - - public bool HasMarshalType { get; set; } - - public bool IsArray { get; set; } - - public int ArrayDimensionValue { get; set; } - - public string ArrayDimension { get; set; } - - public bool IsWideChar { get; set; } - - public bool IsBoolToInt { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsMethod.cs b/Source/Tools/SharpGen/Model/CsMethod.cs deleted file mode 100644 index a4b51dbb3..000000000 --- a/Source/Tools/SharpGen/Model/CsMethod.cs +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Linq; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - public class CsMethod : CsTypeBase, ICloneable - { - protected virtual int MaxSizeReturnParameter - { - get { return 4; } - } - - public CsMethod(CppMethod cppMethod) - { - CppElement = cppMethod; - } - - private List _parameters; - public List Parameters - { - get { return _parameters ?? (_parameters = Items.OfType().ToList()); } - } - - public IEnumerable PublicParameters - { - get - { - return Items.Cast().Where(param => !param.IsUsedAsReturnType); - } - } - - public bool Hidden { get; set; } - - public int ParameterCount - { - get { return Parameters.Count; } - } - - public int PublicParameterCount - { - get - { - return PublicParameters.Count(); - } - } - - public string CallingConvention - { - get - { - switch (((CppMethod)CppElement).CallingConvention) - { - case CppCallingConvention.StdCall: - return "StdCall"; - case CppCallingConvention.CDecl: - return "Cdecl"; - case CppCallingConvention.ThisCall: - return "ThisCall"; - } - // By default - return "StdCall"; - } - } - - protected override void FillDocItems(List docItems) - { - foreach (var param in PublicParameters) - docItems.Add("" + param.SingleDoc + ""); - - if (HasReturnType) - docItems.Add("" + ReturnTypeDoc + ""); - } - - public bool IsHResult - { - get { return HasReturnType && ReturnType.PublicType.Name == Global.Name + ".Result"; } - } - - public bool IsReturnStructLarge - { - get - { - var csStruct = ReturnType.PublicType as CsStruct ; - if (csStruct != null) - { - if (ReturnType.MarshalType.Type == typeof(IntPtr)) - return false; - - return csStruct.SizeOf > MaxSizeReturnParameter; - } - return false; - } - } - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - - AllowProperty = !tag.Property.HasValue || tag.Property.Value; - - IsPersistent = tag.Persist.HasValue && tag.Persist.Value; - - if(tag.CustomVtbl.HasValue) - CustomVtbl = tag.CustomVtbl.Value; - - if (tag.MethodCheckReturnType.HasValue) - CheckReturnType = tag.MethodCheckReturnType.Value; - - if (tag.ParameterUsedAsReturnType.HasValue) - ForceReturnType = tag.ParameterUsedAsReturnType.Value; - - if (tag.AlwaysReturnHResult.HasValue) - AlwaysReturnHResult = tag.AlwaysReturnHResult.Value; - - if(tag.RawPtr.HasValue) - RequestRawPtr = tag.RawPtr.Value; - } - - /// - /// Gets or sets a value indicating whether [use DLL import]. - /// - /// - /// true if [use DLL import]; otherwise, false. - /// - /// Only used by function - public bool UseDllImport { get; set; } - - public bool AllowProperty { get; set; } - - public bool CustomVtbl { get; set; } - - public bool IsPersistent { get; set; } - - public bool RequestRawPtr { get; set; } - - public int Offset { get; set; } - - public InteropMethodSignature Interop { get; set; } - - public string CppSignature - { - get - { - if (CppElement != null) - { - return CppElement.ToString(); - } - return "Unknown"; - } - } - - public override string DocUnmanagedName - { - get { return CppSignature; } - } - - public override string DocUnmanagedShortName - { - get - { - if (CppElement != null) return CppElement.ToShortString(); - return null; - } - } - - public bool CheckReturnType { get; set; } - - public bool ForceReturnType { get; set; } - - public bool HideReturnType { get; set; } - - public bool AlwaysReturnHResult { get; set; } - - public bool HasReturnType - { - get { return !(ReturnType.PublicType.Type != null && ReturnType.PublicType.Type == typeof (void)); } - } - - public bool HasPublicReturnType - { - get - { - foreach (var param in Parameters) - { - if (param.IsUsedAsReturnType) - return true; - } - - return HasReturnType; - } - } - - - public string ReturnTypeForFunction - { - get - { - if (ReturnType.PublicType is CsInterface) - return "IntPtr"; - if (ReturnType.PublicType.Type != null && ReturnType.PublicType.Type == typeof(bool)) - return "int"; - return ReturnType.PublicType.QualifiedName; - } - } - - public string CastStart - { - get - { - if (ReturnType.PublicType.Type != null && ReturnType.PublicType.Type == typeof (bool)) - return "(0!="; - if (ReturnType.PublicType is CsInterface) - return "new " + ReturnType.PublicType.QualifiedName + "((IntPtr)"; - if (ReturnType.PublicType.Type == typeof(string)) - { - if (ReturnType.IsWideChar) - return "Marshal.PtrToStringUni("; - return "Marshal.PtrToStringAnsi("; - } - return ""; - } - } - - public string CastEnd - { - get - { - if (ReturnType.PublicType.Type != null && ReturnType.PublicType.Type == typeof (bool)) - return ")"; - if (ReturnType.PublicType is CsInterface) - return ")"; - if (ReturnType.PublicType.Type == typeof(string)) - return ")"; - return ""; - } - } - - public CsMarshalBase ReturnType { get; set; } - - - /// - /// Return the Public return type. If a out parameter is used as a public return type - /// then use the type of the out parameter for the public API. - /// - public bool HasReturnTypeParameter - { - get - { - return Parameters.Any(param => param.IsUsedAsReturnType); - } - } - - /// - /// Return the Public return type. If a out parameter is used as a public return type - /// then use the type of the out parameter for the public API. - /// - public string PublicReturnTypeQualifiedName - { - get - { - foreach (var param in Parameters) - { - if (param.IsUsedAsReturnType) - return param.PublicType.QualifiedName; - } - - if (HideReturnType && !ForceReturnType) - return "void"; - - return ReturnType.PublicType.QualifiedName; - } - } - - /// - /// Returns the documentation for the return type - /// - public string ReturnTypeDoc - { - get - { - foreach (var param in Parameters) - { - if (param.IsUsedAsReturnType) - { - return param.SingleDoc; - } - } - return ReturnType.SingleDoc; - } - } - - /// - /// Return the name of the variable used to return the value - /// - public string ReturnName - { - get - { - foreach (var param in Parameters) - { - if (param.IsUsedAsReturnType) - return param.Name; - } - return "__result__"; - } - } - - public override object Clone() - { - var method = (CsMethod)base.Clone(); - - // Clear cached parameters - method._parameters = null; - method.ClearItems(); - foreach (var parameter in Parameters) - method.Add((CsParameter) parameter.Clone()); - method.Parent = null; - return method; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsNamespace.cs b/Source/Tools/SharpGen/Model/CsNamespace.cs deleted file mode 100644 index c6ae6ef42..000000000 --- a/Source/Tools/SharpGen/Model/CsNamespace.cs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; - -namespace SharpGen.Model -{ - /// - /// A Namespace container. - /// - public class CsNamespace : CsBase - { - public CsNamespace(CsBase parentContainer, string nameSpace) - { - Name = nameSpace; - Parent = parentContainer; - } - - /// - /// Gets the full qualified name of this type. This is the name of this assembly - /// and equals to property. - /// - /// The full name. - public override string QualifiedName - { - get - { - return Name; - } - } - - /// - /// Gets the assembly that contains this namespace. - /// - /// The assembly. - public CsAssembly Assembly - { - get - { - return GetParent(); - } - } - - /// - /// Gets or sets the output directory for generated files for this namespace. - /// - /// The output directory. - public string OutputDirectory { get; set;} - - - public IEnumerable Types - { - get { return Items.OfType(); } - } - - /// - /// Gets all declared enums from this namespace. - /// - /// The enums. - public IEnumerable Enums - { - get { return Items.OfType(); } - } - - /// - /// Gets all declared structs from this namespace. - /// - /// The structs. - public IEnumerable Structs - { - get { return Items.OfType(); } - } - - /// - /// Gets all declared interfaces from this namespace. - /// - /// The interfaces. - public IEnumerable Interfaces - { - get { return Items.OfType(); } - } - - /// - /// Gets all declared classes from this namespace. - /// - /// The function groups. - public IEnumerable Classes - { - get { return Items.OfType(); } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsParameter.cs b/Source/Tools/SharpGen/Model/CsParameter.cs deleted file mode 100644 index 6b5367f4b..000000000 --- a/Source/Tools/SharpGen/Model/CsParameter.cs +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.Text; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - public class CsParameter : CsMarshalBase - { - private bool _isFast; - - public CsParameter() - { - // Default is In - Attribute = CsParameterAttribute.In; - _isFast = false; - } - - public CsParameterAttribute Attribute { get; set; } - - public bool HasParams { get; set; } - - public bool IsOptionnal { get; set; } - - public bool IsUsedAsReturnType { get; set; } - - public bool IsFastOut - { - get { return _isFast && IsOut; } - } - - public string DefaultValue { get; set; } - - private const int SizeOfLimit = 16; - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - if (tag.ParameterUsedAsReturnType.HasValue) - IsUsedAsReturnType = tag.ParameterUsedAsReturnType.Value; - if (tag.ParameterAttribute.HasValue && (tag.ParameterAttribute.Value & ParamAttribute.Fast) != 0) - _isFast = true; - - DefaultValue = tag.DefaultValue; - } - - public CppParameter CppParameter { get { return (CppParameter) CppElement; } } - - public bool IsFixed - { - get - { - if (Attribute == CsParameterAttribute.Ref || Attribute == CsParameterAttribute.RefIn) - { - if (IsRefInValueTypeOptional || IsRefInValueTypeByValue) - return false; - return true; - } - if (Attribute == CsParameterAttribute.Out && !IsBoolToInt) - return true; - if (IsArray && !IsComArray) - return true; - return false; - } - } - - public string TempName - { - get { return Name + "_"; } - } - - public bool IsRef - { - get { return Attribute == CsParameterAttribute.Ref; } - } - - public bool IsComArray - { - get - { - return PublicType is CsComArray; - } - } - - public bool IsInComArrayLike - { - get - { - return IsArray && IsComObject && !IsOut; - } - } - - public bool IsComObject - { - get - { - return PublicType.GetType() == typeof(CsInterface); - } - } - - public bool IsRefIn - { - get { return Attribute == CsParameterAttribute.RefIn; } - } - - public bool IsIn - { - get { return Attribute == CsParameterAttribute.In; } - } - - public bool IsOut - { - get { return Attribute == CsParameterAttribute.Out; } - } - - public bool IsPrimitive - { - get { return PublicType.Type != null && PublicType.Type.IsPrimitive; } - } - - public bool IsString - { - get { return PublicType.Type == typeof (string); } - } - - public bool IsValueType - { - get { return PublicType is CsStruct || PublicType is CsEnum || (PublicType.Type != null && (PublicType.Type.IsValueType || PublicType.Type.IsPrimitive)); } - } - - public bool IsStructClass - { - get { return PublicType is CsStruct && ((CsStruct)PublicType).GenerateAsClass; } - } - - public bool HasNativeValueType - { - get { return (PublicType is CsStruct && (PublicType as CsStruct).HasMarshalType) ; } - } - - public bool IsStaticMarshal - { - get { return (PublicType is CsStruct && (PublicType as CsStruct).IsStaticMarshal); } - } - - public bool IsRefInValueTypeOptional - { - get { return IsRefIn && IsValueType && !IsArray && IsOptionnal; } - } - - public bool IsRefInValueTypeByValue - { - get - { - return IsRefIn && IsValueType && !IsArray - && ((PublicType.SizeOf <= SizeOfLimit && !HasNativeValueType) || (CppParameter.Attribute & ParamAttribute.Value) != 0); - } - } - - public string ParamName - { - get - { - StringBuilder builder = new StringBuilder(); - if (!IsFastOut && Attribute == CsParameterAttribute.Out && (!IsArray || PublicType.Name == "string")) - builder.Append("out "); - else if ((Attribute == CsParameterAttribute.Ref || Attribute == CsParameterAttribute.RefIn) && !IsArray) - { - if (!(IsRefInValueTypeOptional || IsRefInValueTypeByValue) && !IsStructClass) - builder.Append("ref "); - } - else if (HasParams && IsArray) - { - builder.Append("params "); - } - - if (IsRefIn && IsValueType && !IsArray && IsOptionnal && !IsStructClass) - builder.Append(PublicType.QualifiedName + "?"); - else - builder.Append(PublicType.QualifiedName); - - if (IsArray && PublicType.Name != "string" && !IsComArray) - builder.Append("[]"); - builder.Append(" "); - builder.Append(Name); - return builder.ToString(); - } - } - - //IntPtr pDevice_; - //SharpDX.Interop.CalliVoid(_nativePointer, 3 * 4, &pDevice_); - //pDevice = new SharpDX.Direct3D11.Device(pDevice_); - - //for (int i = 0; i < pSamplers.Length; i++) - // pSamplers[i] = new SamplerState(pSamplers_[i]); - - public string CallName - { - get - { - // All ComArray are handle the same way - if (IsComArray) - return "(void*)((" + Name + " == null)?IntPtr.Zero:" + Name + ".NativePointer)"; - - if (IsOut) - { - if (PublicType is CsInterface) - { - if (IsArray) - { - return IsOptionnal ? Name + "==null?(void*)0:" + TempName : TempName; - } - return "&" + TempName; - } - if (IsArray) - { - //if (IsValueType && IsOptionnal) - //{ - // //return Name + "==null?(void*)IntPtr.Zero:" + TempName; - //} - //else - //{ - // return TempName; - //} - return IsComArray ? Name : TempName; - } - if (IsFixed && !HasNativeValueType) - { - return IsUsedAsReturnType ? "&" + Name : TempName; - } - if (HasNativeValueType || IsBoolToInt) - { - return "&" + TempName; - } - - return IsValueType ? "&" + Name : TempName; - } - if (IsRefInValueTypeOptional) - { - if (IsStructClass) - { - return "(" + Name + " != null)?&" + TempName + ":(void*)IntPtr.Zero"; - } - return "(" + Name + ".HasValue)?&" + TempName + ":(void*)IntPtr.Zero"; - } - if(IsRefInValueTypeByValue) - { - return HasNativeValueType ? "&" + TempName : "&" + Name; - } - if (PublicType.QualifiedName == Global.Name + ".Color4" && MarshalType.Type == typeof(int)) - { - return Name + ".ToArgb()"; - } - if (!IsFixed && PublicType is CsEnum && !IsArray) - return "unchecked((int)" + Name + ")"; - if (PublicType.Type == typeof (string)) - return "(void*)" + TempName; - //if (PublicType.Type == typeof (byte)) - // return "(int)" + Name; - if (PublicType is CsInterface && Attribute == CsParameterAttribute.In && !IsArray) - return "(void*)((" + Name + " == null)?IntPtr.Zero:" + Name + ".NativePointer)"; - if (IsArray) - { - if (HasNativeValueType || IsBoolToInt) - { - //if (IsOptionnal) - // return Name + "==null?(void*)IntPtr.Zero:" + TempName; - return TempName; - } - if (IsValueType && IsOptionnal) - { - //return Name + "==null?(void*)IntPtr.Zero:" + TempName; - return TempName; - } - } - if (IsBoolToInt) - return "(" + Name + "?1:0)"; - if (IsFixed && !HasNativeValueType) - return TempName; - if (PublicType.Type == typeof (IntPtr) && !IsArray) - return "(void*)" + Name; - if (HasNativeValueType) - { - return IsIn ? TempName : "&" + TempName; - } - if (PublicType.Name == "SharpDX.PointerSize") - return "(void*)" + Name; - return Name; - } - } - - public override object Clone() - { - var parameter = (CsParameter)base.Clone(); - parameter.Parent = null; - return parameter; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsParameterAttribute.cs b/Source/Tools/SharpGen/Model/CsParameterAttribute.cs deleted file mode 100644 index 8188f7bdc..000000000 --- a/Source/Tools/SharpGen/Model/CsParameterAttribute.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -namespace SharpGen.Model -{ - public enum CsParameterAttribute - { - In, - Out, - Ref, - RefIn - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsProperty.cs b/Source/Tools/SharpGen/Model/CsProperty.cs deleted file mode 100644 index 2a064e98d..000000000 --- a/Source/Tools/SharpGen/Model/CsProperty.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Linq; - -namespace SharpGen.Model -{ - public class CsProperty : CsMarshalBase - { - public CsProperty(string name) - { - Name = name; - } - - public CsMethod Getter { get; set; } - - public CsMethod Setter { get; set; } - - public string CppSignature - { - get - { - if (Getter != null) return Getter.CppSignature; - return Setter.CppSignature; - } - } - - public bool IsPropertyParam { get; set; } - - public bool IsPersistent { get; set; } - - public override string DocUnmanagedName - { - get - { - if (Setter != null && Getter != null) - return string.Format("{0} / {1}", Getter.CppElement.Name, Setter.CppElement.Name); - return base.DocUnmanagedName; - } - } - - public string PrefixSetterParam - { - get - { - if (Setter != null) - { - var parameter = Setter.Parameters.First(); - if (parameter.ParamName.StartsWith("ref")) - { - return "ref "; - } - } - return ""; - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsStruct.cs b/Source/Tools/SharpGen/Model/CsStruct.cs deleted file mode 100644 index 1c9221348..000000000 --- a/Source/Tools/SharpGen/Model/CsStruct.cs +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Serialization; -using SharpGen.Config; -using SharpGen.CppModel; - -namespace SharpGen.Model -{ - /// - /// A structElement that maps to a native struct - /// - [XmlType("struct")] - public class CsStruct : CsTypeBase - { - public CsStruct() - : this(null) - { - } - - public CsStruct(CppStruct cppStruct) - { - IsIn = true; - IsOut = false; - CppElement = cppStruct; - } - - protected override void UpdateFromTag(MappingRule tag) - { - base.UpdateFromTag(tag); - Align = tag.StructPack ?? 0; - HasMarshalType = tag.StructHasNativeValueType ?? false; - GenerateAsClass = tag.StructToClass ?? false; - HasCustomMarshal = tag.StructCustomMarshal ?? false; - IsStaticMarshal = tag.IsStaticMarshal ?? false; - HasCustomNew = tag.StructCustomNew ?? false; - IsOut = tag.StructForceMarshalToToBeGenerated ?? false; - - // Force a marshalling if a struct need to be treated as a class) - if (GenerateAsClass) - HasMarshalType = true; - } - - public IEnumerable Fields - { - get { return Items.OfType(); } - } - - /// - /// True if this structure is using an explicit layout else it's a sequential structure - /// - public bool ExplicitLayout { get; set; } - - /// - /// True if this struct needs an internal marshal type - /// - public bool HasMarshalType { get; set; } - - public bool HasCustomMarshal { get; set; } - - public bool IsStaticMarshal { get; set; } - - public bool GenerateAsClass { get; set; } - - public bool HasCustomNew { get; set; } - - public string GetConstructor() - { - return string.Format(HasCustomNew ? "{0}.__NewNative()" : "new {0}.__Native()", QualifiedName); - } - - public string StructTypeName - { - get - { - return GenerateAsClass ? "class" : "struct"; - } - } - - public bool IsIn { get; set; } - - public bool IsOut { get; set; } - - /// - /// List of declared inner structs - /// - public IEnumerable InnerStructs - { - get { return Items.OfType(); } - } - - public override int CalculateAlignment() - { - int structAlignment = 0; - foreach(var field in Fields) - { - var fieldAlignment = (field.MarshalType ?? field.PublicType).CalculateAlignment(); - if(fieldAlignment < 0) - { - structAlignment = fieldAlignment; - break; - } - if(fieldAlignment > structAlignment) - { - structAlignment = fieldAlignment; - } - } - - return structAlignment; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsTypeBase.cs b/Source/Tools/SharpGen/Model/CsTypeBase.cs deleted file mode 100644 index 787bdebce..000000000 --- a/Source/Tools/SharpGen/Model/CsTypeBase.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; - -namespace SharpGen.Model -{ - public class CsTypeBase : CsBase - { - public Type Type { get; set; } - - public bool IsReference { get; set; } - - public bool IsPointer - { - get { return Type == typeof (IntPtr); } - } - - public bool IsBlittable - { - get { return (this is CsStruct || this is CsEnum || Type.IsValueType); } - } - - /// - /// Calculates the natural alignment of a type. -1 if it is a pointer alignment (4 on x86, 8 on x64) - /// - /// System.Int32. - public virtual int CalculateAlignment() - { - if (Type == typeof(long) || Type == typeof(ulong) || Type == typeof(double)) - { - return 8; - } - - if (Type == typeof(int) || Type == typeof(uint) || - Type == typeof(float)) - { - return 4; - } - - if (Type == typeof(short) || Type == typeof(ushort) || Type == typeof(char)) - { - return 2; - } - - if (Type == typeof(byte) || Type == typeof(sbyte)) - { - return 1; - } - - if (IsPointer) - { - return -1; - } - - // throws an exception? - return 4; - } - - private CsAssembly _assembly; - public CsAssembly Assembly - { - get - { - if (_assembly == null) - _assembly = GetParent(); - return _assembly; - } - } - - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/CsVariable.cs b/Source/Tools/SharpGen/Model/CsVariable.cs deleted file mode 100644 index 9bbe982a0..000000000 --- a/Source/Tools/SharpGen/Model/CsVariable.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Xml.Serialization; - -namespace SharpGen.Model -{ - [XmlType("variable")] - public class CsVariable : CsTypeBase - { - public CsVariable() - { - CppElement = null; - Visibility = Config.Visibility.Public | Config.Visibility.Static; - } - - public CsVariable(string typeName, string name, string value) - { - CppElement = null; - TypeName = typeName; - Name = name; - Value = value; - Visibility = Config.Visibility.Public | Config.Visibility.Static; - } - - public string Value { get; set; } - - public string TypeName { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/InteropManager.cs b/Source/Tools/SharpGen/Model/InteropManager.cs deleted file mode 100644 index 227dce15a..000000000 --- a/Source/Tools/SharpGen/Model/InteropManager.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; - -namespace SharpGen.Model -{ - public class InteropManager - { - private List _methods; - - public InteropManager() - { - _methods = new List(); - } - - public List Methods - { - get { return _methods; } - } - - - public InteropMethodSignature Add(InteropMethodSignature method) - { - method.Index = Methods.Count; - int indexOf = Methods.IndexOf(method); - if (indexOf>=0) - return Methods[indexOf]; - - Methods.Add(method); - return method; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/InteropMethodSignature.cs b/Source/Tools/SharpGen/Model/InteropMethodSignature.cs deleted file mode 100644 index 4598be1ae..000000000 --- a/Source/Tools/SharpGen/Model/InteropMethodSignature.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.Text; -using SharpGen.Generator; - -namespace SharpGen.Model -{ - public class InteropMethodSignature - { - public InteropMethodSignature() - { - ParameterTypes = new List(); - } - - public int Index; - public InteropType ReturnType; - public List ParameterTypes; - public bool IsLocal; - public bool IsFunction; - - public string Name - { - get - { - string returnTypeName = ReturnType.TypeName; - returnTypeName = returnTypeName.Replace("*", "Ptr"); - returnTypeName = returnTypeName.Replace(".", ""); - return "Calli" + ((IsFunction)?"Func":"") + returnTypeName + ((IsLocal) ? ""+ Index : ""); - } - } - - public override bool Equals(object obj) - { - if (obj == null) - return false; - InteropMethodSignature against = obj as InteropMethodSignature; - if (against == null) - return false; - if (this.ReturnType != against.ReturnType) - return false; - if (this.IsFunction != against.IsFunction) - return false; - if (this.ParameterTypes.Count != against.ParameterTypes.Count) - return false; - if (this.IsLocal != against.IsLocal) - return false; - - for (int i = 0; i < ParameterTypes.Count; i++) - { - if (ParameterTypes[i] != against.ParameterTypes[i]) - return false; - } - return true; - } - - - public override string ToString() - { - StringBuilder builder = new StringBuilder(); - builder.Append(ReturnType.TypeName); - builder.Append(" Calli" + ReturnType.TypeName + "("); - for (int i = 0; i < ParameterTypes.Count; i++) - { - builder.Append(ParameterTypes[i].TypeName); - if ((i + 1) < ParameterTypes.Count) - builder.Append(","); - } - builder.Append(")"); - return builder.ToString(); - } - - public override int GetHashCode() - { - return ReturnType.GetHashCode(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Model/InteropType.cs b/Source/Tools/SharpGen/Model/InteropType.cs deleted file mode 100644 index b617b025e..000000000 --- a/Source/Tools/SharpGen/Model/InteropType.cs +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; - -namespace SharpGen.Model -{ - /// - /// Type used for template - /// - public class InteropType - { - private Type _type; - private string _typeName; - - /// - /// Initializes a new instance of the class. - /// - /// The type. - public InteropType(Type type) - { - _type = type; - } - - /// - /// Initializes a new instance of the class. - /// - /// Name of the type. - public InteropType(string typeName) - { - _typeName = typeName; - } - - /// - /// Gets the type. - /// - /// The type. - public Type Type - { - get { return _type; } - } - - /// - /// Performs an implicit conversion from to . - /// - /// The input. - /// The result of the conversion. - public static implicit operator InteropType(Type input) - { - return new InteropType(input); - } - - /// - /// Performs an implicit conversion from to . - /// - /// The input. - /// The result of the conversion. - public static implicit operator InteropType(string input) - { - return new InteropType(input); - } - - /// - /// Gets the name of the type. - /// - /// The name of the type. - public string TypeName - { - get - { - Type type = Type; - - if (type != null) - { - if (type == typeof(int)) - return "int"; - if (type == typeof(short)) - return "short"; - if (type == typeof(void*)) - return "void*"; - if (type == typeof(void)) - return "void"; - if (type == typeof(float)) - return "float"; - if (type == typeof(double)) - return "double"; - if (type == typeof(long)) - return "long"; - - return type.FullName; - } - return _typeName; - } - } - - /// - /// Gets the name of the param type of. - /// - /// The name of the param type of. - public string ParamTypeOfName - { - get - { - return "typeof(" + TypeName + ")"; - } - } - - /// - /// Gets a value indicating whether this instance is primitive. - /// - /// - /// true if this instance is primitive; otherwise, false. - /// - public bool IsPrimitive - { - get - { - if (Type != null) - return Type.IsPrimitive; - return false; - } - } - - public bool IsPointer - { - get - { - if (Type != null) - { - return Type.IsPointer; - } - return false; - } - } - - /// - /// Gets a value indicating whether this instance is value type. - /// - /// - /// true if this instance is value type; otherwise, false. - /// - public bool IsValueType - { - get - { - if (Type != null) - return Type.IsValueType; - // If typename != null is necessary a ValueType - return true; - } - } - - /// - /// Determines whether the specified is equal to this instance. - /// - /// The to compare with this instance. - /// - /// true if the specified is equal to this instance; otherwise, false. - /// - public override bool Equals(object obj) - { - InteropType against = obj as InteropType; - if (against == null) - return false; - return Type == against.Type && _typeName == against._typeName; - } - - /// - /// Implements the operator ==. - /// - /// A. - /// The b. - /// The result of the operator. - public static bool operator ==(InteropType a, Type b) - { - // If both are null, or both are same instance, return true. - if (System.Object.ReferenceEquals(a, b)) - { - return true; - } - - // If one is null, but not both, return false. - if (((object)a == null) || ((object)b == null)) - { - return false; - } - - return a.Type == b; - } - - /// - /// Implements the operator !=. - /// - /// A. - /// The b. - /// The result of the operator. - public static bool operator !=(InteropType a, Type b) - { - return !(a == b); - } - - /// - /// Implements the operator ==. - /// - /// A. - /// The b. - /// The result of the operator. - public static bool operator ==(InteropType a, InteropType b) - { - // If both are null, or both are same instance, return true. - if (System.Object.ReferenceEquals(a, b)) - { - return true; - } - - // If one is null, but not both, return false. - if (((object)a == null) || ((object)b == null)) - { - return false; - } - - return a.Equals(b); - } - - /// - /// Implements the operator !=. - /// - /// A. - /// The b. - /// The result of the operator. - public static bool operator !=(InteropType a, InteropType b) - { - return !(a == b); - } - - /// - /// Returns a hash code for this instance. - /// - /// - /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - /// - public override int GetHashCode() - { - return _type.GetHashCode(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Parser/CastXml.cs b/Source/Tools/SharpGen/Parser/CastXml.cs deleted file mode 100644 index d3946e34e..000000000 --- a/Source/Tools/SharpGen/Parser/CastXml.cs +++ /dev/null @@ -1,413 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -using Microsoft.Win32; - -using SharpGen.Logging; - -using SharpGen.Config; - -namespace SharpGen.Parser -{ - /// - /// CastXML front end for command line. - /// see https://github.com/CastXML/CastXML - /// - public class CastXml - { - private static readonly Regex MatchError = new Regex("error:"); - - /// - /// GccXml tag for FundamentalType - /// - public const string TagFundamentalType = "FundamentalType"; - - /// - /// GccXml tag for Enumeration - /// - public const string TagEnumeration = "Enumeration"; - - /// - /// GccXml tag for Struct - /// - public const string TagStruct = "Struct"; - - /// - /// GccXml tag for Field - /// - public const string TagField = "Field"; - - /// - /// GccXml tag for Union - /// - public const string TagUnion = "Union"; - - /// - /// GccXml tag for Typedef - /// - public const string TagTypedef = "Typedef"; - - /// - /// GccXml tag for Function - /// - public const string TagFunction = "Function"; - - /// - /// GccXml tag for PointerType - /// - public const string TagPointerType = "PointerType"; - - /// - /// GccXml tag for ArrayType - /// - public const string TagArrayType = "ArrayType"; - - /// - /// GccXml tag for ReferenceType - /// - public const string TagReferenceType = "ReferenceType"; - - /// - /// GccXml tag for CvQualifiedType - /// - public const string TagCvQualifiedType = "CvQualifiedType"; - - /// - /// GccXml tag for Namespace - /// - public const string TagNamespace = "Namespace"; - - /// - /// GccXml tag for Variable - /// - public const string TagVariable = "Variable"; - - /// - /// GccXml tag for FunctionType - /// - public const string TagFunctionType = "FunctionType"; - - /// - /// Gets or sets the executable path of gccxml.exe. - /// - /// The executable path. - public string ExecutablePath {get;set;} - - /// - /// Gets or sets the include directory list. - /// - /// The include directory list. - public List IncludeDirectoryList { get; private set; } - - /// - /// List of error filters regexp. - /// - private readonly List _filterErrors; - - /// - /// Initializes a new instance of the class. - /// - public CastXml() - { - IncludeDirectoryList = new List(); - _filterErrors = new List(); - } - - /// - /// Adds a filter error that will ignore a particular error from gccxml. - /// - /// The headerFile. - /// a regexp that filters a particular gccxml error message. - public void AddFilterError(string file, string regexpError) - { - string fullRegexpError = @"[\\/]" + Regex.Escape(file) + ":.*" + regexpError; - _filterErrors.Add(new Regex(fullRegexpError)); - } - - /// - /// Preprocesses the specified header file. - /// - /// The header file. - /// The handler. - public void Preprocess(string headerFile, DataReceivedEventHandler handler) - { - Logger.RunInContext("castxml", () => - { - if (!File.Exists(ExecutablePath)) - Logger.Fatal("castxml.exe not found from path: [{0}]", ExecutablePath); - - if (!File.Exists(headerFile)) - Logger.Fatal("C++ Header file [{0}] not found", headerFile); - - var currentProcess = new Process(); - var startInfo = new ProcessStartInfo(ExecutablePath) - { - RedirectStandardOutput = true, - RedirectStandardError = true, - UseShellExecute = false, - CreateNoWindow = true, - WorkingDirectory = Environment.CurrentDirectory - }; - - var arguments = GetCastXmlArgs(); - arguments += " -E -dD"; - - foreach (var directory in GetIncludePaths()) - arguments += " " + directory; - - startInfo.Arguments = arguments + " " + headerFile; - Console.WriteLine(startInfo.Arguments); - currentProcess.StartInfo = startInfo; - currentProcess.ErrorDataReceived += ProcessErrorFromHeaderFile; - currentProcess.OutputDataReceived += handler; - currentProcess.Start(); - currentProcess.BeginOutputReadLine(); - currentProcess.BeginErrorReadLine(); - - currentProcess.WaitForExit(); - currentProcess.Close(); - - }); - } - - private List GetIncludePaths() - { - var paths = new List(); - - foreach (var directory in IncludeDirectoryList) - { - var path = directory.Path; - - // Is Using registry? - if (path.StartsWith("=")) - { - var registryPath = directory.Path.Substring(1); - var indexOfSubPath = registryPath.IndexOf(";"); - string subPath = ""; - if (indexOfSubPath >= 0) - { - subPath = registryPath.Substring(indexOfSubPath + 1); - registryPath = registryPath.Substring(0, indexOfSubPath); - } - var indexOfKey = registryPath.LastIndexOf("\\"); - var subKeyStr = registryPath.Substring(indexOfKey + 1); - registryPath = registryPath.Substring(0, indexOfKey); - - var indexOfHive = registryPath.IndexOf("\\"); - var hiveStr = registryPath.Substring(0, indexOfHive).ToUpper(); - registryPath = registryPath.Substring(indexOfHive+1); - - try - { - var hive = RegistryHive.LocalMachine; - switch (hiveStr) - { - case "HKEY_LOCAL_MACHINE": - hive = RegistryHive.LocalMachine; - break; - case "HKEY_CURRENT_USER": - hive = RegistryHive.CurrentUser; - break; - case "HKEY_CURRENT_CONFIG": - hive = RegistryHive.CurrentConfig; - break; - } - var rootKey = RegistryKey.OpenBaseKey(hive, RegistryView.Registry32); - var subKey = rootKey.OpenSubKey(registryPath); - if (subKey == null) - { - Logger.Error("Unable to locate key [{0}] in registry", registryPath); - continue; - - } - path = Path.Combine(subKey.GetValue(subKeyStr).ToString(), subPath); - } catch (Exception ex) - { - Logger.Error("Unable to locate key [{0}] in registry", registryPath); - continue; - } - } - - if (directory.IsOverride) - { - paths.Add("-I\"" + path.TrimEnd('\\') + "\""); - } - else - { - paths.Add("-isystem\"" + path.TrimEnd('\\') + "\""); - } - } - - foreach (var path in paths) - { - Logger.Message("Path used for castxml [{0}]", path); - } - - return paths; - } - - /// - /// Processes the specified header headerFile. - /// - /// The header headerFile. - /// - public StreamReader Process(string headerFile) - { - StreamReader result = null; - - Logger.RunInContext("castxml", () => - { - ExecutablePath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, ExecutablePath)); - - if (!File.Exists(ExecutablePath)) Logger.Fatal("castxml.exe not found from path: [{0}]", ExecutablePath); - - if (!File.Exists(headerFile)) Logger.Fatal("C++ Header file [{0}] not found", headerFile); - - var currentProcess = new Process(); - var startInfo = new ProcessStartInfo(ExecutablePath) - { - RedirectStandardOutput = true, - RedirectStandardError = true, - UseShellExecute = false, - CreateNoWindow = true, - WorkingDirectory = Environment.CurrentDirectory - }; - var xmlFile = Path.ChangeExtension(headerFile, "xml"); - - // Delete any previously generated xml file - File.Delete(xmlFile); - - string arguments = GetCastXmlArgs(); - arguments += " -o " + xmlFile; - - foreach (var directory in GetIncludePaths()) - arguments += " " + directory; - - startInfo.Arguments = arguments + " " + headerFile; - - Console.WriteLine(startInfo.Arguments); - currentProcess.StartInfo = startInfo; - currentProcess.ErrorDataReceived += ProcessErrorFromHeaderFile; - currentProcess.OutputDataReceived += ProcessOutputFromHeaderFile; - currentProcess.Start(); - currentProcess.BeginOutputReadLine(); - currentProcess.BeginErrorReadLine(); - - currentProcess.WaitForExit(); - - currentProcess.Close(); - - if (!File.Exists(xmlFile) || Logger.HasErrors) - { - Logger.Error("Unable to generate XML file with castxml [{0}]. Check previous errors.", xmlFile); - } - else - { - result = new StreamReader(xmlFile); - } - }); - - return result; - } - - private static string GetCastXmlArgs() - { - var arguments = ""; - arguments += " --castxml-gccxml"; - arguments += " -x c++ -std=c++11 -fmsc-version=1900 -fms-extensions -fms-compatibility"; - arguments += " -Wno-microsoft-enum-value -Wmacro-redefined -Wno-invalid-token-paste -Wno-ignored-attributes"; - return arguments; - } - - // E:/Code/Microsoft DirectX SDK (June 2010)//include/xaudio2fx.h:68:1: error: - private static Regex matchFileErrorRegex = new Regex(@"^(.*):(\d+):(\d+):\s+error:(.*)"); - - /// - /// Processes the error from header file. - /// - /// The sender. - /// The instance containing the event data. - void ProcessErrorFromHeaderFile(object sender, DataReceivedEventArgs e) - { - bool popContext = false; - try - { - if (e.Data != null) - { - - var matchError = matchFileErrorRegex.Match(e.Data); - - bool lineFiltered = false; - foreach (var filterError in _filterErrors) - { - if (filterError.Match(e.Data).Success) - { - lineFiltered = true; - break; - } - - } - string errorText = e.Data; - - if (matchError.Success) - { - Logger.PushLocation(matchError.Groups[1].Value, int.Parse(matchError.Groups[2].Value), int.Parse(matchError.Groups[3].Value)); - popContext = true; - errorText = matchError.Groups[4].Value; - } - - if (!lineFiltered) - { - if (MatchError.Match(e.Data).Success) - Logger.Error(errorText); - else - Logger.Warning(errorText); - } - else - { - Logger.Warning(errorText); - } - } - } - finally - { - if (popContext) - Logger.PopLocation(); - } - } - - /// - /// Processes the output from header file. - /// - /// The sender. - /// The instance containing the event data. - static void ProcessOutputFromHeaderFile(object sender, DataReceivedEventArgs e) - { - if (e.Data != null) - Logger.Message(e.Data); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Parser/CppParser.cs b/Source/Tools/SharpGen/Parser/CppParser.cs deleted file mode 100644 index 663f89a2a..000000000 --- a/Source/Tools/SharpGen/Parser/CppParser.cs +++ /dev/null @@ -1,1722 +0,0 @@ -// Copyright (c) 2010 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Xml.Linq; -using SharpGen; -using SharpGen.Logging; -using SharpGen.Config; -using SharpGen.CppModel; -using SharpGen.Doc; - -namespace SharpGen.Parser -{ - static class Extension - { - /// - /// Get the value from an attribute. - /// - /// The object to get the attribute from. - /// The name of the attribute. - /// - public static string AttributeValue(this XElement xElement, string name) - { - var attr = xElement.Attribute(name); - return (attr != null) ? attr.Value : null; - } - } - - /// - /// Full C++ Parser built on top of . - /// - public class CppParser - { - private const string EndTagCustomEnumItem = "__sharpdx_enumitem__"; - private const string EndTagCustomVariable = "__sharpdx_var__"; - private const string Version = "1.0"; - private CppModule _group; - private readonly Dictionary _includeToProcess = new Dictionary(); - private Dictionary _includeIsAttached = new Dictionary(); - private Dictionary> _includeAttachedTypes = new Dictionary>(); - private readonly Dictionary _bindings = new Dictionary(); - private CastXml _gccxml; - private string _configRootHeader; - private ConfigFile _configRoot; - private CppInclude _currentCppInclude; - private readonly Dictionary _variableMacrosDefined = new Dictionary(); - readonly Dictionary _mapIdToXElement = new Dictionary(); - readonly Dictionary> _mapFileToXElement = new Dictionary>(); - private readonly Dictionary _mapIncludeToAnonymousEnumCount = new Dictionary(); - readonly List _filesWithCreateFromMacros = new List(); - private bool _isConfigUpdated; - - /// - /// Initializes a new instance of the class. - /// - public CppParser() - { - ForceParsing = false; - } - - /// - /// Gets or sets a value indicating whether this instance is generating doc. - /// - /// - /// true if this instance is generating doc; otherwise, false. - /// - public bool IsGeneratingDoc { get; set; } - - /// - /// Gets or sets the doc provider assembly. - /// - /// The doc provider assembly. - public string DocProviderAssembly { get; set; } - - /// - /// Gets or sets a value indicating whether this should force to parse headers. - /// - /// true to force to run parsing regarding of config file updates check; otherwise, false. - public bool ForceParsing { get; set; } - - /// - /// Gets or sets the CastXML executable path. - /// - /// The CastXML executable path. - public string CastXmlExecutablePath { get; set; } - - /// - /// Initialize this Parser from a root ConfigFile. - /// - /// The root config file - public void Init(ConfigFile configRoot) - { - if (configRoot == null) throw new ArgumentNullException("configRoot"); - _configRoot = configRoot; - - // var configRoot = ConfigFile.Load(@"E:\code\sharpdx-v2\Source\Mapping.xml"); - _configRootHeader = _configRoot.Id + ".h"; - _gccxml = new CastXml {ExecutablePath = CastXmlExecutablePath}; - - // Config is updated if ForceParsing is true - _isConfigUpdated = ForceParsing; - - _group = new CppModule(); - - // Get All include-directories to add to GccXmlApp - var prolog = new StringBuilder(); - - // Add current directory for gccxml - _gccxml.IncludeDirectoryList.Add(new IncludeDirRule(Environment.CurrentDirectory)); - - // Configure gccxml with include directory - foreach (var configFile in _configRoot.ConfigFilesLoaded) - { - // Add all include directories - foreach (var includeDir in configFile.IncludeDirs) - _gccxml.IncludeDirectoryList.Add(includeDir); - - // Append prolog - foreach (var includeProlog in configFile.IncludeProlog) - { - if (!string.IsNullOrEmpty(includeProlog)) - prolog.Append(includeProlog); - } - - // Prepare bindings - // TODO test duplicate bindings - foreach (var bindRule in configFile.Bindings) - _bindings.Add(bindRule.From, bindRule.To); - } - - var filesWithIncludes = new List(); - - - // Check if the file has any includes related config - foreach (var configFile in _configRoot.ConfigFilesLoaded) - { - bool isWithInclude = false; - - // Add this config file as an include to process - _includeToProcess.Add(configFile.Id, true); - _includeIsAttached.Add(configFile.Id, true); - - if (configFile.IncludeDirs.Count > 0) - isWithInclude = true; - - // Build prolog - if (configFile.IncludeProlog.Count > 0) - isWithInclude = true; - - if (configFile.Includes.Count > 0) - isWithInclude = true; - - if (configFile.References.Count > 0) - isWithInclude = true; - - // Check if any create from macro - foreach (var typeBaseRule in configFile.Extension) - { - if (CheckIfRuleIsCreatingHeadersExtension(typeBaseRule)) - { - _filesWithCreateFromMacros.Add(configFile.Id); - isWithInclude = true; - break; - } - } - - // If this config file has any include rules - if (isWithInclude) - filesWithIncludes.Add(configFile.Id); - } - - // Dump includes - foreach (var configFile in _configRoot.ConfigFilesLoaded) - { - if (!filesWithIncludes.Contains(configFile.Id)) - continue; - - var outputConfig = new StringWriter(); - outputConfig.WriteLine("// SharpDX include config [{0}] - Version {1}", configFile.Id, Version); - - if (_configRoot.Id == configFile.Id) - outputConfig.WriteLine(prolog); - - // Write includes - foreach (var includeRule in configFile.Includes) - { - var cppInclude = _group.FindInclude(includeRule.Id); - if (cppInclude == null) - { - _includeToProcess.Add(includeRule.Id, true); - - cppInclude = new CppInclude() { Name = includeRule.Id }; - _group.Add(cppInclude); - } - - // Handle attach types - // Set that the include is attached (so that all types inside are attached - bool isIncludeFullyAttached = includeRule.Attach.HasValue && includeRule.Attach.Value; - if (isIncludeFullyAttached || includeRule.AttachTypes.Count > 0) - { - // An include can be fully attached ( include rule is set to true) - // or partially attached (the include rule contains Attach for specific types) - // We need to know which includes are attached, if they are fully or partially - if (!_includeIsAttached.ContainsKey(includeRule.Id)) - _includeIsAttached.Add(includeRule.Id, isIncludeFullyAttached); - else if (isIncludeFullyAttached) - { - _includeIsAttached[includeRule.Id] = true; - } - - // Attach types if any - if (includeRule.AttachTypes.Count > 0) - { - List typesToAttach; - if (!_includeAttachedTypes.TryGetValue(includeRule.Id, out typesToAttach)) - { - typesToAttach = new List(); - _includeAttachedTypes.Add(includeRule.Id, typesToAttach); - } - - // For specific attach types, register them - foreach (var attachTypeName in includeRule.AttachTypes) - { - if (!typesToAttach.Contains(attachTypeName)) - typesToAttach.Add(attachTypeName); - } - } - } - - // Add filtering errors - if (includeRule.FilterErrors.Count > 0 ) - { - foreach (var filterError in includeRule.FilterErrors) - _gccxml.AddFilterError(includeRule.File.ToLower(), filterError); - } - - if (!string.IsNullOrEmpty(includeRule.Pre)) - outputConfig.WriteLine(includeRule.Pre); - outputConfig.WriteLine("#include \"{0}\"", includeRule.File); - if (!string.IsNullOrEmpty(includeRule.Post)) - outputConfig.WriteLine(includeRule.Post); - } - - // Write includes to references - foreach (var reference in configFile.References) - { - if (filesWithIncludes.Contains(reference.Id)) - outputConfig.WriteLine("#include \"{0}\"", reference.Id + ".h"); - } - - // Dump Create from macros - if (_filesWithCreateFromMacros.Contains(configFile.Id)) - { - foreach (var typeBaseRule in configFile.Extension) - { - if (CheckIfRuleIsCreatingHeadersExtension(typeBaseRule)) - outputConfig.WriteLine("// {0}", typeBaseRule); - } - outputConfig.WriteLine("#include \"{0}\"", configFile.ExtensionFileName); - - - _includeToProcess.Add(configFile.ExtensionId, true); - if (!_includeIsAttached.ContainsKey(configFile.ExtensionId)) - _includeIsAttached.Add(configFile.ExtensionId, true); - - // Create Extension file name if it doesn't exist); - if (!File.Exists(configFile.ExtensionFileName)) - File.WriteAllText(configFile.ExtensionFileName, ""); - } - outputConfig.Close(); - - var outputConfigStr = outputConfig.ToString(); - - var fileName = configFile.Id + ".h"; - - // Test if Last config file was generated. If not, then we need to generate it - // If it exists, then we need to test if it is the same than previous run - configFile.IsConfigUpdated = ForceParsing; - - if (File.Exists(fileName) && !ForceParsing) - configFile.IsConfigUpdated = outputConfigStr != File.ReadAllText(fileName); - else - configFile.IsConfigUpdated = true; - - // Small optim: just write the header file when the file is updated or new - if (configFile.IsConfigUpdated) - { - if (!ForceParsing) - Logger.Message("Config file changed for C++ headers [{0}]/[{1}]", configFile.Id, configFile.FilePath); - - _isConfigUpdated = true; - var fileWriter = new StreamWriter(configFile.Id + ".h"); - fileWriter.Write(outputConfigStr); - fileWriter.Close(); - } - } - } - - /// - /// Checks if this rule is creating headers extension. - /// - /// The rule to check. - /// true if the rule is creating an header extension. - private static bool CheckIfRuleIsCreatingHeadersExtension(ConfigBaseRule rule) - { - return ((rule is CreateCppExtensionRule && !string.IsNullOrEmpty(((CreateCppExtensionRule) rule).Macro)) - || (rule is ConstantRule && !string.IsNullOrEmpty(((ConstantRule) rule).Macro))); - } - - /// - /// Gets the name of the generated GCCXML file. - /// - /// The name of the generated GCCXML file. - private string GccXmlFileName - { - get { return _configRoot.Id + "-gcc.xml"; } - } - - /// - /// Gets the name of the C++ parsed XML file. - /// - /// The name of the C++ parsed XML file. - private string GroupFileName - { - get { return _configRoot.Id + "-out.xml"; } - } - - /// - /// Gets or sets the GccXml doc. - /// - /// The GccXml doc. - private XDocument GccXmlDoc { get; set; } - - /// - /// Runs this instance. - /// - /// - public CppModule Run() - { - // If config is updated, we need to run the - if (_isConfigUpdated) - { - Logger.Message("Config files changed."); - - string progressMessage = "Parsing C++ headers starts, please wait..."; - - Logger.Progress(10, progressMessage); - - StreamReader xmlReader = null; - try - { - // TODO Rebuild group - - var macroManager = new MacroManager(_gccxml); - macroManager.Parse(_configRootHeader, _group); - - // Dump includes - foreach (var configFile in _configRoot.ConfigFilesLoaded) - { - // Dump Create from macros - if (_filesWithCreateFromMacros.Contains(configFile.Id) && configFile.IsConfigUpdated) - { - var extensionWriter = new StreamWriter(configFile.ExtensionFileName); - - foreach (var typeBaseRule in configFile.Extension) - { - if (CheckIfRuleIsCreatingHeadersExtension(typeBaseRule)) - extensionWriter.Write(CreateCppFromMacro(typeBaseRule)); - else if (typeBaseRule is ContextRule) - HandleContextRule(configFile, (ContextRule) typeBaseRule); - } - extensionWriter.Close(); - } - } - - Logger.Progress(15, progressMessage); - - xmlReader = _gccxml.Process(_configRootHeader); - if (xmlReader != null) - { - Parse(xmlReader); - - // If doc must be generated - if (IsGeneratingDoc) - ApplyDocumentation(); - } - - Logger.Progress(30, progressMessage); - - // Save back the C++ parsed includes - _group.Write(GroupFileName); - } - catch (Exception ex) - { - Logger.Error("Unexpected error", ex); - } - finally - { - if (xmlReader != null) - xmlReader.Close(); - - // Write back GCCXML document on the disk - if (GccXmlDoc != null) - GccXmlDoc.Save(GccXmlFileName); - Logger.Message("Parsing headers is finished."); - } - } - else - { - Logger.Progress(10, "Config files unchanged. Read previous C++ parsing..."); - _group = CppModule.Read(GroupFileName); - } - - IncludeMacroCounts = new Dictionary(); - - // Load all defines and store them in the config file to allow dynamic variable substitution - foreach (var cppInclude in _group.Includes) - { - int count = 0; - IncludeMacroCounts.TryGetValue(cppInclude.Name, out count); - - foreach (var cppDefine in cppInclude.Macros) - { - _configRoot.DynamicVariables.Remove(cppDefine.Name); - _configRoot.DynamicVariables.Add(cppDefine.Name, cppDefine.Value); - count ++; - } - - IncludeMacroCounts[cppInclude.Name] = count; - } - - // Expand all variables with all dynamic variables - _configRoot.ExpandVariables(true); - - return _group; - } - - private Dictionary IncludeMacroCounts { get; set; } - - /// - /// Prints the statistics. - /// - public void PrintStatistics() - { - - var keys = IncludeMacroCounts.Keys.ToList(); - keys.Sort(StringComparer.InvariantCultureIgnoreCase); - - Logger.Message("Macro Statistics"); - foreach (var key in keys) - { - Logger.Message("\t{0}\t{1}", key, IncludeMacroCounts[key]); - } - Logger.Message("\n"); - } - - /// - /// Handles the context rule. - /// - /// The file. - /// The context rule. - private void HandleContextRule(ConfigFile file, ContextRule contextRule) - { - if (contextRule is ClearContextRule) - _group.ClearContextFind(); - else - { - var contextIds = new List(); - - if (!string.IsNullOrEmpty(contextRule.ContextSetId)) - { - var contextSet = file.FindContextSetById(contextRule.ContextSetId); - if (contextSet != null) - contextIds.AddRange(contextSet.Contexts); - } - contextIds.AddRange(contextRule.Ids); - - _group.AddContextRangeFind(contextIds); - } - } - - /// - /// Creates a C++ declaration from a macro rule. - /// - /// The macro rule. - /// A C++ declaration string - private string CreateCppFromMacro(ConfigBaseRule rule) - { - if (rule is CreateCppExtensionRule) - { - return CreateEnumFromMacro((CreateCppExtensionRule) rule); - } - - if (rule is ConstantRule) - { - return CreateVariableFromMacro((ConstantRule) rule); - } - return ""; - } - - /// - /// Creates a C++ enum declaration from a macro rule. - /// - /// The macro rule. - /// A C++ enum declaration string - private string CreateEnumFromMacro(CreateCppExtensionRule createCpp) - { - var cppEnumText = new StringBuilder(); - - cppEnumText.AppendLine("// Enum created from: " + createCpp); - cppEnumText.AppendLine("enum " + createCpp.Enum + " {"); - - foreach (CppDefine macroDef in _group.Find(createCpp.Macro)) - { - string macroName = macroDef.Name + EndTagCustomEnumItem; - - // Only add the macro once (could have multiple identical macro in different includes) - if (!_variableMacrosDefined.ContainsKey(macroName)) - { - cppEnumText.AppendFormat("\t {0} = {1},\n", macroName, macroDef.Value); - _variableMacrosDefined.Add(macroName, macroDef.Value); - } - } - cppEnumText.AppendLine("};"); - - return cppEnumText.ToString(); - } - - /// - /// Creates a C++ variable declaration from a macro rule. - /// - /// The macro rule. - /// A C++ variable declaration string - private string CreateVariableFromMacro(ConstantRule cstRule) - { - var builder = new StringBuilder(); - - builder.AppendLine("// Variable created from: " + cstRule); - - // Regex regexValue = new Regex("^(.*)$"); - - foreach (CppDefine macroDef in _group.Find(cstRule.Macro)) - { - string macroName = macroDef.Name + EndTagCustomVariable; - - // Only add the macro once (could have multiple identical macro in different includes) - if (!_variableMacrosDefined.ContainsKey(macroName)) - { - // string finalValue = string.IsNullOrEmpty(cstRule.Value) ? macroDef.Value : regexValue.Replace(macroDef.Value, cstRule.Value); - builder.AppendFormat("extern \"C\" {0} {1} = {3}{2};\n", cstRule.CppType ?? cstRule.Type, macroName, macroDef.Name, cstRule.CppCast ?? ""); - _variableMacrosDefined.Add(macroName, macroDef.Name); - } - } - return builder.ToString(); - } - - /// - /// Parses the specified reader. - /// - /// The reader. - private void Parse(StreamReader reader) - { - var doc = XDocument.Load(reader); - - GccXmlDoc = doc; - - // Collects all GccXml elements and build map from their id - foreach (var xElement in doc.Elements("GCC_XML").Elements()) - { - string id = xElement.Attribute("id").Value; - _mapIdToXElement.Add(id, xElement); - - string file = xElement.AttributeValue("file"); - if (file != null) - { - List elementsInFile; - if (!_mapFileToXElement.TryGetValue(file, out elementsInFile)) - { - elementsInFile = new List(); - _mapFileToXElement.Add(file, elementsInFile); - } - elementsInFile.Add(xElement); - } - } - - // Fix all structure names - foreach (var xTypedef in doc.Elements("GCC_XML").Elements()) - { - if (xTypedef.Name.LocalName == CastXml.TagTypedef) - { - var xStruct = _mapIdToXElement[xTypedef.AttributeValue("type")]; - switch (xStruct.Name.LocalName) - { - case CastXml.TagStruct: - case CastXml.TagUnion: - case CastXml.TagEnumeration: - string structName = xStruct.AttributeValue("name"); - // Rename all structure starting with tagXXXX to XXXX - //if (structName.Length > 4 && structName.StartsWith("tag") && Char.IsUpper(structName[3])) - // structName = structName.Substring(3); - - if (structName.StartsWith("tag") || structName.StartsWith("_") || string.IsNullOrEmpty(structName)) - { - var typeName = xTypedef.AttributeValue("name"); - xStruct.SetAttributeValue("name", typeName); - //Logger.Message("Use typedef to rename [{0}] to [{1}]", structName, typeName); - } - break; - } - } - } - - // Find all elements that are referring to a context and attach them to - // the context as child elements - foreach (var xElement in _mapIdToXElement.Values) - { - string id = xElement.AttributeValue("context"); - if (id != null) - { - xElement.Remove(); - _mapIdToXElement[id].Add(xElement); - } - } - - // AttachToFile(doc); - ParseAllElements(); - } - - /// - /// Parses a C++ function. - /// - /// The gccxml that describes a C++ function. - /// A C++ function parsed - private CppFunction ParseFunction(XElement xElement) - { - return ParseMethodOrFunction(xElement); - } - - /// - /// Parses a C++ parameters. - /// - /// The gccxml that describes a C++ parameter. - /// The method or function to populate. - private void ParseParameters(XElement xElement, CppElement methodOrFunction) - { - int paramCount = 0; - foreach (var parameter in xElement.Elements()) - { - if (parameter.Name.LocalName != "Argument") - continue; - - var cppParameter = new CppParameter() { Name = parameter.AttributeValue("name") }; - if (string.IsNullOrEmpty(cppParameter.Name)) - cppParameter.Name = "arg" + paramCount; - - ParseAnnotations(parameter, cppParameter); - - // All parameters without any annotations are considerate as In - if (cppParameter.Attribute == ParamAttribute.None) - cppParameter.Attribute = ParamAttribute.In; - - Logger.PushContext("Parameter:[{0}]", cppParameter.Name); - - ResolveAndFillType(parameter.AttributeValue("type"), cppParameter); - methodOrFunction.Add(cppParameter); - - Logger.PopContext(); - paramCount++; - } - } - - /// - /// Parses C++ annotations/attributes. - /// - /// The gccxml that contains C++ annotations/attributes. - /// The C++ element to populate. - private static void ParseAnnotations(XElement xElement, CppElement cppElement) - { - // Check that the xml contains the "attributes" attribute - string attributes = xElement.AttributeValue("attributes"); - if (string.IsNullOrWhiteSpace(attributes)) - return; - - // Strip whitespaces inside annotate("...") - var stripSpaces = new StringBuilder(); - int doubleQuoteCount = 0; - for(int i = 0; i < attributes.Length; i++) - { - bool addThisChar = true; - char attributeChar = attributes[i]; - if (attributeChar == '(') - { - doubleQuoteCount++; - } - else if (attributeChar == ')') - { - doubleQuoteCount--; - } - else if (doubleQuoteCount > 0 && (char.IsWhiteSpace(attributeChar) | attributeChar == '"')) - { - addThisChar = false; - } - if (addThisChar) - stripSpaces.Append(attributeChar); - } - attributes = stripSpaces.ToString(); - - // Default calling convention - var cppCallingConvention = CppCallingConvention.Unknown; - - // Default parameter attribute - var paramAttribute = ParamAttribute.None; - - // Default Guid - string guid = null; - - // Parse attributes - const string gccXmlAttribute = "annotate("; - // none == 0 - // pre == 1 - // post == 2 - bool isPre = false; - bool isPost = false; - bool hasWritable = false; - - // Clang outputs attributes in reverse order - // TODO: Check if applies to all declarations - foreach (var item in attributes.Split(' ').Reverse()) - { - string newItem = item; - if (newItem.StartsWith(gccXmlAttribute)) - newItem = newItem.Substring(gccXmlAttribute.Length); - - if (newItem.StartsWith("SAL_pre")) - { - // paramAttribute |= ParamAttribute.In; - isPre = true; - isPost = false; - } - else if (newItem.StartsWith("SAL_post")) - { - // paramAttribute |= ParamAttribute.Out; - isPre = false; - isPost = true; - } - else if (isPost && newItem.StartsWith("SAL_valid")) - { - paramAttribute |= ParamAttribute.Out; - } - else if (newItem.StartsWith("SAL_maybenull") || (newItem.StartsWith("SAL_null") && newItem.Contains("__maybe"))) - { - paramAttribute |= ParamAttribute.Optional; - } - else if (newItem.StartsWith("SAL_readableTo") || newItem.StartsWith("SAL_writableTo")) - { - if (newItem.StartsWith("SAL_writableTo")) - { - if (isPre) paramAttribute |= ParamAttribute.Out; - hasWritable = true; - } - - if (!newItem.Contains("SPECSTRINGIZE(1)") && !newItem.Contains("elementCount(1)")) - paramAttribute |= ParamAttribute.Buffer; - } - else if (newItem.StartsWith("__stdcall__")) - { - cppCallingConvention = CppCallingConvention.StdCall; - } - else if (newItem.StartsWith("__cdecl__")) - { - cppCallingConvention = CppCallingConvention.CDecl; - } - else if (newItem.StartsWith("uuid(")) - { - guid = newItem.Trim(')').Substring("uuid(".Length).Trim('"', '{', '}'); - } - } - - // If no writable, than this is an In parameter - if (!hasWritable) - { - paramAttribute |= ParamAttribute.In; - } - - - // Update CppElement based on its type - if (cppElement is CppParameter) - { - // Replace in & out with inout. - // Todo check to use in & out instead of inout - if ((paramAttribute & ParamAttribute.In) != 0 && (paramAttribute & ParamAttribute.Out) != 0) - { - paramAttribute ^= ParamAttribute.In; - paramAttribute ^= ParamAttribute.Out; - paramAttribute |= ParamAttribute.InOut; - } - - ((CppParameter) cppElement).Attribute = paramAttribute; - } - else if (cppElement is CppMethod && cppCallingConvention != CppCallingConvention.Unknown) - { - ((CppMethod)cppElement).CallingConvention = cppCallingConvention; - } - else if (cppElement is CppInterface && guid != null) - { - ((CppInterface)cppElement).Guid = guid; - } - } - - /// - /// Parses a C++ method or function. - /// - /// The resulting C++ parsed element. Must be a subclass of . - /// The gccxml that describes a C++ method/function declaration. - /// The C++ parsed T. - private T ParseMethodOrFunction(XElement xElement) where T : CppMethod, new() - { - var cppMethod = new T() { Name = xElement.AttributeValue("name") }; - - Logger.PushContext("Method:[{0}]", cppMethod.Name); - - // Parse annotations - ParseAnnotations(xElement, cppMethod); - - // Parse parameters - ParseParameters(xElement, cppMethod); - - cppMethod.ReturnType = new CppType(); - ResolveAndFillType(xElement.AttributeValue("returns"), cppMethod.ReturnType); - - Logger.PopContext(); - - return cppMethod; - } - - /// - /// Parses a C++ COM interface. - /// - /// The gccxml that describes a C++ COM interface declaration. - /// A C++ interface parsed - private CppInterface ParseInterface(XElement xElement) - { - // If element is already transformed, return it - var cppInterface = xElement.Annotation(); - if (cppInterface != null) - return cppInterface; - - // Else, create a new CppInterface - cppInterface = new CppInterface() { Name = xElement.AttributeValue("name") }; - xElement.AddAnnotation(cppInterface); - - // Enter Interface description - Logger.PushContext("Interface:[{0}]", cppInterface.Name); - - if (!IsTypeBinded(xElement)) - Logger.Error("Binding is missing for interface type [{0}] defined in file [{1}]", cppInterface.Name, _mapIdToXElement[xElement.AttributeValue("file")].AttributeValue("name")); - - // Calculate offset method using inheritance - int offsetMethod = 0; - - var basesValue = xElement.AttributeValue("bases"); - var bases = basesValue != null ? basesValue.Split(' ') : Enumerable.Empty(); - foreach (var xElementBaseId in bases) - { - if (string.IsNullOrEmpty(xElementBaseId)) - continue; - - var xElementBase = _mapIdToXElement[xElementBaseId]; - string baseTypeName = xElementBase.AttributeValue("name"); - string baseTypeFile = _mapIdToXElement[xElementBase.AttributeValue("file")].AttributeValue("name"); - - CppInterface cppInterfaceBase = null; - Logger.RunInContext("Base", () => { cppInterfaceBase = ParseInterface(xElementBase); }); - - if (string.IsNullOrEmpty(cppInterface.ParentName)) - cppInterface.ParentName = cppInterfaceBase.Name; - - // If interface is binded, then check that the bind is a valid interface and not a SharpDX.ComObject/System.IntPtr - string bindedValueTo; - if (_bindings.TryGetValue(baseTypeName, out bindedValueTo)) - { - if (baseTypeName != "IUnknown" && baseTypeName != "IDispatch" && ( - bindedValueTo == "SharpDX.ComObject" - || bindedValueTo == "System.IntPtr")) - { - Logger.Error("Error binding interface type [{0}] defined in file [{1}]. Interface is inherited and binded to [{2}] and not valid for inheritance", baseTypeName, baseTypeFile, bindedValueTo); - } - } - - offsetMethod += cppInterfaceBase.TotalMethodCount; - } - - // Parse annotations - ParseAnnotations(xElement, cppInterface); - - List methods = new List(); - - // Parse methods - foreach (var method in xElement.Elements()) - { - // Parse method with pure virtual (=0) and that do not override any other methods - if (method.Name.LocalName == "Method" && !string.IsNullOrWhiteSpace(method.AttributeValue("pure_virtual")) - && string.IsNullOrWhiteSpace(method.AttributeValue("overrides"))) - { - var cppMethod = ParseMethodOrFunction(method); - methods.Add(cppMethod); - } - } - - // The Visual C++ compiler breaks the rules of the COM ABI when overloaded methods are used. - // It will group the overloads together in memory and lay them out in the reverse of their declaration order. - // Since GCC always lays them out in the order declared, we have to modify the order of the methods to match Visual C++. - // See http://support.microsoft.com/kb/131104 for more information. - for (int i = 0; i < methods.Count; i++) - { - string name = methods[i].Name; - - // Look for overloads of this function - for (int j = i + 1; j < methods.Count; j++) - { - var nextMethod = methods[j]; - if (nextMethod.Name == name) - { - // Remove this one from its current position further into the vtable - methods.RemoveAt(j); - - // Put this one before all other overloads (aka reverse declaration order) - int k = i - 1; - while (k >= 0 && methods[k].Name == name) - k--; - methods.Insert(k + 1, nextMethod); - i++; - } - } - } - - // Add the methods to the interface with the correct offsets - foreach (var cppMethod in methods) - { - cppMethod.Offset = offsetMethod++; - cppInterface.Add(cppMethod); - } - - cppInterface.TotalMethodCount = offsetMethod; - - // Leave Interface - Logger.PopContext(); - - return cppInterface; - } - - /// - /// Parses a C++ field declaration. - /// - /// The gccxml that describes a C++ structure field declaration. - /// A C++ field parsed - private CppField ParseField(XElement xElement) - { - var cppField = new CppField() { Name = xElement.AttributeValue("name") }; - - Logger.PushContext("Field:[{0}]", cppField.Name); - - // Handle bitfield info - var bitField = xElement.AttributeValue("bits"); - if (!string.IsNullOrEmpty(bitField)) - { - cppField.IsBitField = true; - - // Todo, int.Parse could failed? - cppField.BitOffset = int.Parse(bitField); - } - - ResolveAndFillType(xElement.AttributeValue("type"), cppField); - - Logger.PopContext(); - return cppField; - } - - /// - /// Parses a C++ struct or union declaration. - /// - /// The gccxml that describes a C++ struct or union declaration. - /// The C++ parent object (valid for anonymous inner declaration) . - /// An index that counts the number of anonymous declaration in order to set a unique name - /// A C++ struct parsed - private CppStruct ParseStructOrUnion(XElement xElement, CppElement cppParent = null, int innerAnonymousIndex = 0) - { - var cppStruct = xElement.Annotation(); - if (cppStruct != null) - return cppStruct; - - // Build struct name directly from the struct name or based on the parent - var structName = xElement.AttributeValue("name") ?? ""; - if (cppParent != null) - { - if (string.IsNullOrEmpty(structName)) - structName = cppParent.Name + "_INNER_" + innerAnonymousIndex; - else - structName = cppParent.Name + "_" + structName + "_INNER"; - } - - // Create struct - cppStruct = new CppStruct { Name = structName }; - xElement.AddAnnotation(cppStruct); - bool isUnion = (xElement.Name.LocalName == CastXml.TagUnion); - - // Get align from structure - cppStruct.Align = int.Parse(xElement.AttributeValue("align"))/8; - - // By default, packing is platform x86/x64 dependent (4 or 8) - // but because gccxml is running in x86, it outputs 4 - // So by default, we are reversing all align by 4 to 0 - // IF the packing is a true 4, than it will be reverse back by a later mapping rules - if (cppStruct.Align == 4) - cppStruct.Align = 0; - - // Enter struct/union description - Logger.PushContext("{0}:[{1}]", xElement.Name.LocalName, cppStruct.Name); - - var basesValue = xElement.AttributeValue("bases"); - var bases = basesValue != null ? basesValue.Split(' ') : Enumerable.Empty(); - foreach (var xElementBaseId in bases) - { - if (string.IsNullOrEmpty(xElementBaseId)) - continue; - - var xElementBase = _mapIdToXElement[xElementBaseId]; - - CppStruct cppStructBase = null; - Logger.RunInContext("Base", () => { cppStructBase = ParseStructOrUnion(xElementBase); }); - - if (string.IsNullOrEmpty(cppStructBase.ParentName)) - cppStruct.ParentName = cppStructBase.Name; - } - - // Parse all fields - int fieldOffset = 0; - int innerStructCount = 0; - foreach (var field in xElement.Elements()) - { - if (field.Name.LocalName != CastXml.TagField) - continue; - - // Parse the field - var cppField = ParseField(field); - cppField.Offset = fieldOffset; - - // Test if the field type is declared inside this struct or union - var fieldName = field.AttributeValue("name"); - var fieldType = _mapIdToXElement[field.AttributeValue("type")]; - if (fieldType.AttributeValue("context") == xElement.AttributeValue("id")) - { - var fieldSubStruct = ParseStructOrUnion(fieldType, cppStruct, innerStructCount++); - - // If fieldName is empty, then we need to inline fields from the struct/union. - if (string.IsNullOrEmpty(fieldName)) - { - // Make a copy in order to remove fields - var listOfSubFields = new List(fieldSubStruct.Fields); - // Copy the current field offset - int lastFieldOffset = fieldOffset; - foreach (var subField in listOfSubFields) - { - subField.Offset = subField.Offset + fieldOffset; - cppStruct.Add(subField); - lastFieldOffset = subField.Offset; - } - // Set the current field offset according to the inlined fields - if (!isUnion) - fieldOffset = lastFieldOffset; - // Don't add the current field, as it is actually an inline struct/union - cppField = null; - } - else - { - // Get the type name from the inner-struct and set it to the field - cppField.TypeName = fieldSubStruct.Name; - _currentCppInclude.Add(fieldSubStruct); - } - } - - // Go to next field offset if not in union - bool goToNextFieldOffset = !isUnion; - - // Add the field if any - if (cppField != null) - { - cppStruct.Add(cppField); - // TODO managed multiple bitfield group - // Current implem is only working with a single set of consecutive bitfield in the same struct - goToNextFieldOffset = goToNextFieldOffset && !cppField.IsBitField; - } - - if (goToNextFieldOffset) - fieldOffset++; - } - - // Leave struct - Logger.PopContext(); - - return cppStruct; - } - - /// - /// Parses a C++ enum declaration. - /// - /// The gccxml that describes a C++ enum declaration. - /// A C++ parsed enum - private CppEnum ParseEnum(XElement xElement) - { - var cppEnum = new CppEnum() { Name = xElement.AttributeValue("name") }; - - // Doh! Anonymous Enum, need to handle them! - if (cppEnum.Name.StartsWith("$") || string.IsNullOrEmpty(cppEnum.Name)) - { - var includeFrom = GetIncludeIdFromFileId(xElement.AttributeValue("file")); - - int enumOffset; - if (!_mapIncludeToAnonymousEnumCount.TryGetValue(includeFrom, out enumOffset)) - _mapIncludeToAnonymousEnumCount.Add(includeFrom, enumOffset); - - cppEnum.Name = includeFrom.ToUpper() + "_ENUM_" + enumOffset; - - _mapIncludeToAnonymousEnumCount[includeFrom]++; - } - - foreach (var xEnumItems in xElement.Elements()) - { - string enumItemName = xEnumItems.AttributeValue("name"); - if (enumItemName.EndsWith(EndTagCustomEnumItem)) - enumItemName = enumItemName.Substring(0, enumItemName.Length - EndTagCustomEnumItem.Length); - - cppEnum.Add(new CppEnumItem(enumItemName, xEnumItems.AttributeValue("init"))); - - } - return cppEnum; - } - - /// - /// Parses a C++ variable declaration/definition. - /// - /// The gccxml that describes a C++ variable declaration/definition. - /// A C++ parsed variable - private CppElement ParseVariable(XElement xElement) - { - var name = xElement.AttributeValue("name"); - if (name.EndsWith(EndTagCustomVariable)) - name = name.Substring(0, name.Length - EndTagCustomVariable.Length); - - var cppType = new CppType(); - ResolveAndFillType(xElement.AttributeValue("type"), cppType); - - - var value = xElement.AttributeValue("init"); - if (cppType.TypeName == "GUID") - { - var guid = ParseGuid(value); - if (!guid.HasValue) - return null; - return new CppGuid { Name = name, Guid = guid.Value }; - } - - // CastXML outputs initialization expressions. Cast to proper type. - var match = Regex.Match(value, @"\((?:\(.+\))?(.+)\)"); - if (match.Success) - { - value = $"unchecked(({cppType.TypeName}){match.Groups[1].Value})"; - } - - // Handle C++ floating point literals - value = value.Replace(".F", ".0F"); - - return new CppConstant() { Name = name, Value = value }; - } - - /// - /// Parses a C++ GUID definition string. - /// - /// The text of a GUID gccxml initialization. - /// The parsed Guid - private static Guid? ParseGuid(string guidInitText) - { - // init="{-1135593225ul, 9184u, 18784u, {150u, 218u, 51u, 171u, 175u, 89u, 53u, 236u}}" - if (!guidInitText.StartsWith("{") && !guidInitText.EndsWith("}}")) - return null; - - guidInitText = guidInitText.Replace("{", ""); - guidInitText = guidInitText.TrimEnd('}'); - guidInitText = guidInitText.Replace("u", ""); - guidInitText = guidInitText.Replace("U", ""); - guidInitText = guidInitText.Replace("l", ""); - guidInitText = guidInitText.Replace("L", ""); - guidInitText = guidInitText.Replace(" ", ""); - - string[] guidElements = guidInitText.Split(','); - - if (guidElements.Length != 11) - return null; - - var values = new int[guidElements.Length]; - for (int i = 0; i < guidElements.Length; i++) - { - var guidElement = guidElements[i]; - long value; - if (!long.TryParse(guidElement, out value)) - return null; - - values[i] = unchecked((int)value); - } - - return new Guid(values[0], (short)values[1], (short)values[2], (byte)values[3], (byte)values[4], (byte)values[5], (byte)values[6], (byte)values[7], - (byte)values[8], (byte)values[9], (byte)values[10]); - } - - /// - /// Parses all C++ elements. This is the main method that iterates on all types. - /// - private void ParseAllElements() - { - foreach (var includeGccXmlId in _mapFileToXElement.Keys) - { - string includeId = GetIncludeIdFromFileId(includeGccXmlId); - - // Process only files listed inside the config files - if (!_includeToProcess.ContainsKey(includeId)) - continue; - - // Process only files attached (fully or partially) to an assembly/namespace - bool isIncludeFullyAttached; - if (!_includeIsAttached.TryGetValue(includeId, out isIncludeFullyAttached)) - continue; - - // Log current include being processed - Logger.PushContext("Include:[{0}.h]", includeId); - - _currentCppInclude = _group.FindInclude(includeId); - if (_currentCppInclude == null) - { - _currentCppInclude = new CppInclude() { Name = includeId }; - _group.Add(_currentCppInclude); - } - - foreach (var xElement in _mapFileToXElement[includeGccXmlId]) - { - // If the element is not defined from a root namespace - // than skip it, as it might be an inner type - if (_mapIdToXElement[xElement.AttributeValue("context")].Name.LocalName != CastXml.TagNamespace) - continue; - - // If incomplete flag, than element cannot be parsed - if (xElement.AttributeValue("incomplete") != null) - continue; - - string name = xElement.Name.LocalName; - - string elementName = xElement.AttributeValue("name"); - - // If this include is partially attached and the current type is not attached - // Than skip it, as we are not mapping it - if (!isIncludeFullyAttached && !_includeAttachedTypes[includeId].Contains(elementName)) - continue; - - CppElement cppElement = null; - switch (name) - { - case CastXml.TagEnumeration: - cppElement = ParseEnum(xElement); - break; - case CastXml.TagFunction: - // TODO: Find btter criteria for exclusion. In CastXML extern="1" only indicates an explicit external storage modifier. - // For now, exlude inline functions instead; may not be sensible since by default all functions have external linkage. - if (xElement.AttributeValue("inline") == null) - cppElement = ParseFunction(xElement); - break; - case CastXml.TagStruct: - if (xElement.AttributeValue("abstract") != null) - cppElement = ParseInterface(xElement); - else - cppElement = ParseStructOrUnion(xElement); - break; - case CastXml.TagUnion: - cppElement = ParseStructOrUnion(xElement); - break; - case CastXml.TagVariable: - if (xElement.AttributeValue("init") != null) - cppElement = ParseVariable(xElement); - break; - } - - if (cppElement != null) - _currentCppInclude.Add(cppElement); - } - - Logger.PopContext(); - } - } - - /// - /// Determines whether the specified type is a type included in the mapping process. - /// - /// The type to check. - /// - /// true if the specified type is included in the mapping process; otherwise, false. - /// - private bool IsTypeFromIncludeToProcess(XElement type) - { - string fileId = type.AttributeValue("file"); - if (fileId != null) - return _includeToProcess.ContainsKey(GetIncludeIdFromFileId(fileId)); - return false; - } - - /// - /// Determines whether the specified type has a binded in the mapping process. - /// - /// The type to check. - /// - /// true if the specified type has a binded in the mapping process; otherwise, false. - /// - private bool IsTypeBinded(XElement type) - { - string typeName = type.AttributeValue("name"); - return IsTypeFromIncludeToProcess(type) || _bindings.ContainsKey(typeName); - } - - /// - /// Resolves a type to its fundamental type or a binded type. - /// This methods is going through the type declaration in order to return the most fundamental type - /// or to return a bind. - /// - /// The id of the type to resolve. - /// The C++ type to fill. - private void ResolveAndFillType(string typeId, CppType type) - { - var fullTypeName = new List(); - - var xType = _mapIdToXElement[typeId]; - - bool isTypeResolved = false; - - while (!isTypeResolved) - { - string name = xType.AttributeValue("name"); - if (name != null) - fullTypeName.Add(name); - string nextType = xType.AttributeValue("type"); - switch (xType.Name.LocalName) - { - case CastXml.TagFundamentalType: - type.TypeName = ConvertFundamentalType(name); - isTypeResolved = true; - break; - case CastXml.TagEnumeration: - type.TypeName = name; - isTypeResolved = true; - break; - case CastXml.TagStruct: - case CastXml.TagUnion: - type.TypeName = name; - - // If the structure being processed is an external include - // and the type is not binded, then there is probably a missing binding - //if (!IsTypeBinded(xType)) - //Logger.Error("Binding is missing for type [{0}] defined in file [{1}]", string.Join("/", fullTypeName), _mapIdToXElement[xType.AttributeValue("file")].AttributeValue("name")); - - isTypeResolved = true; - break; - case CastXml.TagTypedef: - if (_bindings.ContainsKey(name)) - { - type.TypeName = name; - isTypeResolved = true; - } - xType = _mapIdToXElement[nextType]; - break; - case CastXml.TagPointerType: - xType = _mapIdToXElement[nextType]; - type.Pointer = (type.Pointer ?? "") + "*"; - break; - case CastXml.TagArrayType: - type.IsArray = true; - var maxArrayIndex = xType.AttributeValue("max"); - var arrayDim = int.Parse(maxArrayIndex.TrimEnd('u')) + 1; - if (type.ArrayDimension == null) - type.ArrayDimension = "" + arrayDim; - else - type.ArrayDimension += "," + arrayDim; - xType = _mapIdToXElement[nextType]; - break; - case CastXml.TagReferenceType: - xType = _mapIdToXElement[nextType]; - type.Pointer = (type.Pointer ?? "") + "&"; - break; - case CastXml.TagCvQualifiedType: - xType = _mapIdToXElement[nextType]; - type.Const = true; - break; - case CastXml.TagFunctionType: - // TODO, handle different calling convention - type.TypeName = "__function__stdcall"; - isTypeResolved = true; - break; - default: - throw new InvalidOperationException(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Unexpected tag type [{0}]", xType.Name.LocalName)); - } - } - } - - /// - /// Converts a gccxml FundamentalType to a shorter form: - /// signed char => char - /// long long int => longlong - /// short unsigned int => unsigned short - /// char => char - /// long unsigned int => unsigned int - /// short int => short - /// int => int - /// long int => int - /// float => float - /// unsigned char => unsigned char - /// unsigned int => unsigned int - /// wchar_t => wchar_t - /// long long unsigned int => unsigned longlong - /// double => double - /// void => void - /// long double => long double - /// - /// Name of the gccxml fundamental type. - /// a shorten form - private static string ConvertFundamentalType(string typeName) - { - var types = typeName.Split(' '); - - bool isUnsigned = false; - string outputType = ""; - int shortCount = 0; - int longCount = 0; - - foreach (var type in types) - { - switch (type) - { - case "unsigned": - isUnsigned = true; - break; - case "signed": - outputType = "int"; - break; - case "long": - longCount++; - break; - case "short": - shortCount++; - break; - case "bool": - case "void": - case "char": - case "double": - case "int": - case "float": - case "wchar_t": - outputType = type; - break; - default: - Logger.Error("Unhandled partial type [{0}] from Fundamental type [{1}]", type, typeName); - break; - } - } - - if (longCount == 1 && outputType == "double") - outputType = "long double"; // 96 bytes, unhandled - if (longCount == 2) - outputType = "longlong"; - if (shortCount == 1) - outputType = "short"; - if (isUnsigned) - outputType = "unsigned " + outputType; - return outputType; - } - - - /// - /// Gets the include id from the file id. - /// - /// The file id. - /// A include id - private string GetIncludeIdFromFileId(string fileId) - { - string filePath = _mapIdToXElement[fileId].AttributeValue("name"); - if (!File.Exists(filePath)) - return ""; - return Path.GetFileNameWithoutExtension(filePath).ToLower(); - } - - /// - /// Apply documentation from an external provider. This is optional. - /// - private void ApplyDocumentation() - { - // Use default MSDN doc provider - DocProvider docProvider = new DocProviderMsdn(); - - // Try to load doc provider from an external assembly - if (DocProviderAssembly != null) - { - try - { - var assembly = Assembly.LoadFrom(DocProviderAssembly); - - foreach (var type in assembly.GetTypes()) - { - if (typeof(DocProvider).IsAssignableFrom(type)) - { - docProvider = (DocProvider)Activator.CreateInstance(type); - break; - } - } - } - catch (Exception ex) - { - Logger.Warning("Warning, Unable to locate/load DocProvider Assembly."); - Logger.Warning("Warning, DocProvider was not found from assembly [{0}]", DocProviderAssembly); - } - } - - Logger.Progress(20, "Applying C++ documentation"); - - docProvider.Begin(); - - foreach (CppInclude cppInclude in _group.Includes) - { - foreach (CppEnum cppEnum in cppInclude.Enums) - { - DocItem docItem = docProvider.FindDocumentation(cppEnum.Name); - cppEnum.Id = docItem.Id; - cppEnum.Description = docItem.Description; - cppEnum.Remarks = docItem.Remarks; - - if (cppEnum.IsEmpty) - continue; - - if(cppEnum.Items.Count != docItem.Items.Count) - { - //Logger.Warning("Warning Invalid number enum items in documentation for Enum {0}", - // cppEnum.Name); - } - int count = Math.Min(cppEnum.Items.Count, docItem.Items.Count); - int i = 0; - foreach (CppEnumItem cppEnumItem in cppEnum.EnumItems) - { - cppEnumItem.Id = docItem.Id; - - // Try to find the matching item - bool foundMatch = false; - foreach (var subItem in docItem.Items) - { - if (Utilities.ContainsCppIdentifier(subItem.Term, cppEnumItem.Name)) - { - cppEnumItem.Description = subItem.Description; - foundMatch = true; - break; - } - } - if (!foundMatch && i < count) - cppEnumItem.Description = docItem.Items[i].Description; - i++; - } - } - - foreach (CppStruct cppStruct in cppInclude.Structs) - { - DocItem docItem = docProvider.FindDocumentation(cppStruct.Name); - cppStruct.Id = docItem.Id; - cppStruct.Description = docItem.Description; - cppStruct.Remarks = docItem.Remarks; - - if (cppStruct.IsEmpty) - continue; - - if(cppStruct.Items.Count != docItem.Items.Count) - { - //Logger.Warning("Invalid number of fields in documentation for Struct {0}", cppStruct.Name); - } - int count = Math.Min(cppStruct.Items.Count, docItem.Items.Count); - int i = 0; - foreach (CppField cppField in cppStruct.Fields) - { - cppField.Id = docItem.Id; - - // Try to find the matching item - bool foundMatch = false; - foreach (var subItem in docItem.Items) - { - if (Utilities.ContainsCppIdentifier(subItem.Term, cppField.Name)) - { - cppField.Description = subItem.Description; - foundMatch = true; - break; - } - } - if (!foundMatch && i < count) - cppField.Description = docItem.Items[i].Description; - i++; - } - } - - foreach (CppInterface cppInterface in cppInclude.Interfaces) - { - DocItem docItem = docProvider.FindDocumentation(cppInterface.Name); - cppInterface.Id = docItem.Id; - cppInterface.Description = docItem.Description; - cppInterface.Remarks = docItem.Remarks; - - if (cppInterface.IsEmpty) - continue; - - foreach (CppMethod cppMethod in cppInterface.Methods) - { - string methodName = cppInterface.Name + "::" + cppMethod.Name; - DocItem methodDocItem = docProvider.FindDocumentation(methodName); - cppMethod.Id = methodDocItem.Id; - cppMethod.Description = methodDocItem.Description; - cppMethod.Remarks = methodDocItem.Remarks; - cppMethod.ReturnType.Description = methodDocItem.Return; - - if (cppMethod.IsEmpty) - continue; - - if(cppMethod.Items.Count != methodDocItem.Items.Count) - { - //Logger.Warning("Invalid number of documentation for Parameters for method {0}", - // methodName); - } - int count = Math.Min(cppMethod.Items.Count, methodDocItem.Items.Count); - int i = 0; - foreach (CppParameter cppParameter in cppMethod.Parameters) - { - cppParameter.Id = methodDocItem.Id; - - // Try to find the matching item - bool foundMatch = false; - foreach (var subItem in methodDocItem.Items) - { - if (Utilities.ContainsCppIdentifier(subItem.Term, cppParameter.Name)) - { - cppParameter.Description = subItem.Description; - foundMatch = true; - break; - } - } - if (!foundMatch && i < count) - cppParameter.Description = methodDocItem.Items[i].Description; - i++; - } - } - } - - foreach (CppFunction cppFunction in cppInclude.Functions) - { - DocItem docItem = docProvider.FindDocumentation(cppFunction.Name); - cppFunction.Id = docItem.Id; - cppFunction.Description = docItem.Description; - cppFunction.Remarks = docItem.Remarks; - cppFunction.ReturnType.Description = docItem.Return; - - if (cppFunction.IsEmpty) - continue; - - if(cppFunction.Items.Count != docItem.Items.Count) - { - //Logger.Warning("Invalid number of documentation for Parameters for Function {0}", - // cppFunction.Name); - } - int count = Math.Min(cppFunction.Items.Count, docItem.Items.Count); - int i = 0; - foreach (CppParameter cppParameter in cppFunction.Parameters) - { - cppParameter.Id = docItem.Id; - - // Try to find the matching item - bool foundMatch = false; - foreach (var subItem in docItem.Items) - { - if (Utilities.ContainsCppIdentifier(subItem.Term, cppParameter.Name)) - { - cppParameter.Description = subItem.Description; - foundMatch = true; - break; - } - } - if (!foundMatch && i < count) - cppParameter.Description = docItem.Items[i].Description; - i++; - } - } - } - docProvider.End(); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Parser/MacroManager.cs b/Source/Tools/SharpGen/Parser/MacroManager.cs deleted file mode 100644 index 084df428c..000000000 --- a/Source/Tools/SharpGen/Parser/MacroManager.cs +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text.RegularExpressions; -using SharpGen.CppModel; - -namespace SharpGen.Parser -{ - /// - /// This class is responsible to get all macros defined from a C++ header file. - /// - public class MacroManager - { - private static readonly Regex MatchIncludeLine = new Regex(@"^\s*#\s+\d+\s+""([^""]+)""", RegexOptions.Compiled); - private static readonly Regex MatchDefine = new Regex(@"^\s*#define\s+([a-zA-Z_][\w_]*)\s+(.*)", RegexOptions.Compiled); - private readonly CastXml _gccxml; - private Dictionary _currentMacros = null; - private readonly Dictionary> _mapIncludeToMacros = new Dictionary>(); - - /// - /// Initializes a new instance of the class. - /// - /// The GccXml parser. - public MacroManager(CastXml gccxml) - { - _gccxml = gccxml; - } - - /// - /// Parses the specified C++ header file and fills the with defined macros. - /// - /// The C++ header file to parse. - /// The CppIncludse object to fill with macro definitions. - public void Parse(string file, CppModule group) - { - _gccxml.Preprocess(file, ParseLine); - - foreach (var includeName in _mapIncludeToMacros.Keys) - { - var includeId = Path.GetFileNameWithoutExtension(includeName).ToLower(); - var include = group.FindInclude(includeId); - if (include == null) - { - include = new CppInclude() { Name = includeId }; - group.Add(include); - } - foreach (var macroDefinition in _mapIncludeToMacros[includeName]) - include.Add(new CppDefine(macroDefinition.Key, macroDefinition.Value)); - } - } - - /// - /// Parses a macro definition line. - /// - /// The sending process. - /// The instance containing the event data. - private void ParseLine(object sendingProcess, DataReceivedEventArgs outLine) - { - string line = outLine.Data; - - // Collect the sort command output. - if (!String.IsNullOrEmpty(line)) - { - Match result = MatchIncludeLine.Match(line); - if (result.Success) - { - if (result.Groups[1].Value.StartsWith("<")) - _currentMacros = null; - else - { - var currentFile = Path.GetFileName(result.Groups[1].Value).ToLower(); - if (!_mapIncludeToMacros.TryGetValue(currentFile, out _currentMacros)) - { - _currentMacros = new Dictionary(); - _mapIncludeToMacros.Add(currentFile, _currentMacros); - } - } - } - else if (_currentMacros != null) - { - result = MatchDefine.Match(line); - if (result.Success) - { - string value = result.Groups[2].Value.TrimEnd(); - if (!string.IsNullOrEmpty(value)) - { - _currentMacros.Remove(result.Groups[1].Value); - _currentMacros.Add(result.Groups[1].Value, value); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Program.cs b/Source/Tools/SharpGen/Program.cs deleted file mode 100644 index 29af53319..000000000 --- a/Source/Tools/SharpGen/Program.cs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Threading; -using System.Windows.Forms; -using SharpGen.Logging; - -namespace SharpGen -{ - /// - /// Main program for CodeGen - /// - internal static class Program - { - private static CodeGenApp _codeGenApp; - private static ProgressForm _progressForm; - - /// - /// Runs code generation asynchronously. - /// - public static void RunAsync() - { - try - { - Logger.Progress(0, "Starting code generation..."); - - _codeGenApp.Run(); - } - catch(Exception ex) - { - Logger.Fatal("Unexpected exception", ex); - } - finally - { - if(_progressForm != null) - { - MethodInvoker methodInvoker = delegate() { _progressForm.Shutdown(); }; - _progressForm.Invoke(methodInvoker); - } - } - } - - /// - /// Main SharpGen - /// - /// Command line args. - [STAThread] - public static void Main(string[] args) - { - _progressForm = null; - try - { - // Optimize XmlSerialization by generating XmlSerializers assembly - Utilities.SGenThisAssembly(); - - _codeGenApp = new CodeGenApp(); - _codeGenApp.ParseArguments(args); - - if(_codeGenApp.Init()) - { - if(Environment.GetEnvironmentVariable("SharpDXBuildNoWindow") == null) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - _progressForm = new ProgressForm(); - Logger.ProgressReport = _progressForm; - _progressForm.Show(); - - var runningThread = new Thread(RunAsync) {IsBackground = true}; - runningThread.Start(); - - Application.Run(_progressForm); - } - else - { - RunAsync(); - } - - } - else - { - Logger.Message("Latest code generation is up to date. No need to run code generation"); - } - - } - catch(Exception ex) - { - Logger.Fatal("Unexpected exception", ex); - } - Environment.Exit(0); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/ProgressForm.Designer.cs b/Source/Tools/SharpGen/ProgressForm.Designer.cs deleted file mode 100644 index 1a5956996..000000000 --- a/Source/Tools/SharpGen/ProgressForm.Designer.cs +++ /dev/null @@ -1,104 +0,0 @@ -namespace SharpGen -{ - partial class ProgressForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressForm)); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.buttonAbort = new System.Windows.Forms.Button(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.statusStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // progressBar1 - // - this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.progressBar1.Location = new System.Drawing.Point(12, 12); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(327, 23); - this.progressBar1.TabIndex = 0; - // - // buttonAbort - // - this.buttonAbort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonAbort.Location = new System.Drawing.Point(349, 12); - this.buttonAbort.Name = "buttonAbort"; - this.buttonAbort.Size = new System.Drawing.Size(75, 23); - this.buttonAbort.TabIndex = 1; - this.buttonAbort.Text = "Abort"; - this.buttonAbort.UseVisualStyleBackColor = true; - this.buttonAbort.Click += new System.EventHandler(this.buttonAbort_Click); - // - // statusStrip1 - // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.statusLabel}); - this.statusStrip1.Location = new System.Drawing.Point(0, 44); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(436, 22); - this.statusStrip1.SizingGrip = false; - this.statusStrip1.TabIndex = 2; - this.statusStrip1.Text = "statusStrip1"; - // - // statusLabel - // - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(16, 17); - this.statusLabel.Text = "..."; - // - // ProgressForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(436, 66); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.buttonAbort); - this.Controls.Add(this.progressBar1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.Name = "ProgressForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "SharpDX Code Generator from C++"; - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Button buttonAbort; - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel statusLabel; - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/ProgressForm.cs b/Source/Tools/SharpGen/ProgressForm.cs deleted file mode 100644 index 050bc2ed9..000000000 --- a/Source/Tools/SharpGen/ProgressForm.cs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.Windows.Forms; -using SharpGen.Logging; - -namespace SharpGen -{ - /// - /// Progress form used to show the progress of the code generation. - /// - public partial class ProgressForm : Form, IProgressReport - { - private bool _isAborted = false; - private bool _isClosedOk = false; - - public ProgressForm() - { - InitializeComponent(); - } - - /// - /// Notify progress. - /// - /// The level 0-100. - /// The message to notify. - /// - /// true if the process is aborted; false otherwise - /// - public bool ProgressStatus(int level, string message) - { - if (level < progressBar1.Minimum) - level = progressBar1.Minimum; - if (level > progressBar1.Maximum) - level = progressBar1.Maximum; - - MethodInvoker invoker = delegate - { - progressBar1.Value = level; - if (!_isAborted) - statusLabel.Text = message; - statusStrip1.Refresh(); - }; - - Invoke(invoker); - return _isAborted; - } - - public void FatalExit(string message) - { - if(InvokeRequired) - Invoke(new Action(FatalExit), message); - else - { - MessageBox.Show(this, message, "SharpGen Fatal error", MessageBoxButtons.OK, MessageBoxIcon.Error); - Abort(); - } - } - - /// - /// Handles the Click event of the buttonAbort control. - /// - /// The source of the event. - /// The instance containing the event data. - private void buttonAbort_Click(object sender, EventArgs e) - { - Abort(); - statusLabel.Text = "Aborting, please wait for shutdown..."; - } - - /// - /// Raises the event. - /// - /// A that contains the event data. - protected override void OnClosing(System.ComponentModel.CancelEventArgs e) - { - Abort(); - e.Cancel = !_isClosedOk; - } - - /// - /// Aborts this instance. - /// - private void Abort() - { - _isAborted = true; - statusLabel.Text = "Aborting, please wait for shutdown..."; - } - - /// - /// Shutdowns this instance. - /// - public void Shutdown() - { - _isClosedOk = true; - Close(); - } - } -} diff --git a/Source/Tools/SharpGen/ProgressForm.resx b/Source/Tools/SharpGen/ProgressForm.resx deleted file mode 100644 index 0e4e026d6..000000000 --- a/Source/Tools/SharpGen/ProgressForm.resx +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - - AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHkGc7OzyrOztEnzs7RKMDA - wiW7u70dv7/AH9XV0UXZ2dRJ3d3XSODf20ji4d1I4uLeSOHh30jg4N9I39/eSN7e3kje3t5I3t7eSN7e - 3kji4uFK39/kLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf3+M84eHhSd7e - 3kje3t5I3t7eSN7e3kje3t5I3t7eSN7e3kje3t5I3t7eSN7e3kje3t5I4eHhSenp6D4AAAAAAAAAAAAA - AAAAAAAAvLy9Aby8vQu8vL0UvLy9HLy8vSC8vL0ouru8J8bHyCjOzs4o8PDxCQAAAAAAAAAAAAAAAC8x - uJMAAIHyAAB/5QAAgOUAAHjiAABz2gAAbNsgInT/ISJq/ycpZ/80NWD/QUJc/01NXf9ZWV3/YmJg/2lp - ZP9sbGf/bGxq/2trav9oaGj/f356/52dtb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAApKS3xYB/e/9oaGj/ampq/2pqav9qamr/ampq/2pqav9qamr/ampq/2trav9sbGn/ampl/2xs - av+JiY3wExI8YgAAInEAACePAAAtqAAAMbwAADXHAAA70QAAP9kAAEPdAABG5QAAReUAAEfmAAAt6LCw - ujcAAAAAAAAAAAAAAABPUNmUAAHK9QAAyOgAAsnoAAHK6AACz+oAAcbqCAq9/AIFtf8AArP/AAGk/wAB - mP8AAoj/AAR5/wUIZP8ND0z/GBk5/yUmLf8wMC3/NDMv/0dHQP+AgJbXCQ69AgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeXq6FSUk3/MTEx/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NjYz/zQ0 - MP8rKy3/Hh0x/xEROv8JCkf/Cgta/wECZfMAAG3yAABy8gAAdvAAAHjuAAF37QABdusAAXXqAAF16QAB - c+gAAXHoAAFy6QAATuuxsb02AAAAAAAAAAAAAAAATU/ZkwECx/MAAcbmAALG5gACyOYBA8vmAAHE5QwO - wfkIC73/BQe8/wUHtv8FB7X/BQe4/wQIvP8EB7X/Awav/wIHnP8CB3//CQtZ/xUWN/8uLjD/k5KJ6js/ - vw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeYKiEY2NY/zExMf8zMzP/MzMz/zQ0 - M/82NjL/MTEv/yEhM/8QEEP/BQVb/wIBb/8DAnn/BAR8/woLgv8FB4TuAAB/5QAAfeYAAXrmAAF55gAB - duYAAnXmAAJz5gACcuYAAnHmAAJv5gADcecAAE3psbG9NgAAAAAAAAAAAAAAAE1O25MBAsnzAADJ5gAA - yeYAAc7mAAHM5gABx+ULDMb2CQvC/wUHu/8FBrb/BQe1/wUIuv8FCLb/BQi1/wUIs/8FCbP/BQq2/wQJ - tP8CCJ3/AwZt/zg6XvooKlhOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJXCZGlp - Yv8zMzP/MzMz/zY2M/80NDD/IiM4/wwNU/8EA3D/BAOC/wYGhv8FBYL/BgV+/wcFfP8LDH//BwiC8AAA - fuUAAXzmAAB75gABeeYAAXfmAAJ15gACdOYAAnLmAAJy5gACcOYAAnLnAABO6bGxvTYAAAAAAAAAAAAA - AABOTd6TAgLO8wAAzOYBAM3mAAHU5gABzeYAAcvlCQrN8goLxv8GB7v/BgW5/wUGuv8FB7z/BQe5/wUH - uP8FBrP/BQez/wUIs/8FCbL/Bgq1/wYLtP8GCqP/AgRm7EZGXoTV1c0NAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAOzs50Jra2z/NDQ0/zY1Mf8sLTX/ERVT/wMLff8EC47/BgeJ/wgHhf8GBoL/BQaB/wUG - f/8GBX3/Cgp//wgJg/MAAIDlAAF+5gAAfOYAAXrmAAF45gABd+YAAnXmAAJ05gACc+YAAnLmAAJz5wAA - Tumxsb42AAAAAAAAAAAAAAAAT03gkwQB0fMDANDmAQDS5gEB1+YCAc/mAADP5QgH1O8LDcj/BQa8/wcH - vP8FB8D/BQe9/wUGvP8GBrj/BQa3/wUHt/8GB7b/Bgi0/wcJsf8GCrD/DBC3/wgOwvIAAI/0CAhDun5/ - jiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD39/cpfHx8+zk5M/8iJD7/CA5w/wUOkv8HD5b/Bw6R/wYL - i/8ICIf/BwWC/wYGgv8FBoD/BQV+/woJgP8KC4T2AACB5QABf+YAAX3mAAB85gABeeYAAXjmAAF45gAC - d+YAAnPmAAJy5gACdOcAAFDpsbG+NgAAAAAAAAAAAAAAAE5N45MDAdXzAQDV5gQC1uYFA9jmBADT5gIA - 1OUIB9rtDQzJ/wcFv/8GBsL/BwfD/wYGwf8FBr7/BQW6/wYGu/8GB7r/Bwi5/wcItv8HCLP/Bwmz/wwO - tf8LD77zAwjF5QAGqvMAAELMfn6NKAAAAAAAAAAAAAAAAAAAAAAAAAAA///9FpCQiechI0//BQyA/wcP - mv8IEJb/BxCT/wcPk/8IEJH/BwqK/wcGhf8IBoL/BgaC/wUFgP8JCID/DQuF+AABguYAAYDmAAJ/5gAB - fuYAAX3mAAF75gABeeYAAnbmAAJ05gACcuYAAnTnAABQ6bGxvjYAAAAAAAAAAAAAAABRTeaTAwHa8wEA - 2uYJBtjmBgTY5gEA2OYHBNjlCwrZ6g0LzP8IBcT/CAbG/wcFxf8HBsT/BQa+/wYGv/8HB77/Bwe8/wcI - uv8ICLf/CAq4/wgKtf8MDbf/DQ+/9gQHwOUGC8TmAgew8QAAQMuFjZYfAAAAAAAAAAAAAAAAAAAAAODq - 5gJTVozZBQyN/wgQn/8JEZn/CRCX/wgQlf8IEZT/CRGT/wcOj/8ICIn/CAaE/wcGgv8GBoH/BweA/w4M - hvsCAYTnAAGD5gABg+YAAYDmAAB85gAAeuYAAXjmAAJ35gACdeYAAnPmAAJ15wAAUemxsb42AAAAAAAA - AAAAAAAAVFPkkwkH2PMGBNnmEg/V5goF2eYEAdrmEA3W5gwI2egOC9H9CwnI/wkIyP8GBcj/CAbE/wgH - w/8HBsL/BwfA/wcIvv8HB7z/CAm7/wkJuv8JCbj/DA65/w8QwPkFB8PmBw3A5gYOxOYCCq3zCA5NuoKp - oA4AAAAAns6+AQAAAAAwRJJcCBCa+Q4Ypv8KE5//ChOc/woSmf8JEJf/ChKV/wkRlP8ID5L/CAyM/wgH - h/8IBoT/BwaC/wcIgv8NDYn9AwKJ6QAAhOYAAYHmAAF/5gECfeYAAHvmAAF65gABeOYAAXfmAAJ15gAC - d+cAAFHpsbG+NgAAAAAAAAAAAAAAAFla4ZMPD9XzEA/U5hsa0eYNDNbmEA7V5hoX0uYMCNnnFA/U+xMQ - yf8JB8r/CAbJ/wgGx/8JB8f/CQfF/wkHw/8JB8H/CQjA/wkJvf8KCr3/Cgu7/wsPu/8RFsP7CAzF5wgO - xOYID8XmCA/K5gACmvUlMFePAAAAAAAAAABcdag1AAGZ4xUftPoQGqf/CxWi/wwXoP8LFZ3/CxWb/wwU - mP8JEpX/CRGT/wgPkf8ICYr/CAeH/wgHhv8IB4T/DQ6H/wUFh+sAAIPlAAGB5gMFguYBA3/mAAB95gAB - e+YAAXnmAAF45gEDduYAA3bnAABS6bGxvjYAAAAAAAAAAAAAAABfXd+TGBXS8xoY0OYgH8/mERHU5hwc - z+YcHNDmDQ7W5R8ez/gYFcf/EA3H/wsHyv8LCMr/CgfJ/wsIyP8KCMX/CgjE/wsJwv8KCsH/CwzA/w0Q - wP8MEb7/ExfD/goOyegJDsrmCw7H5gkPxOYKEsjoAAF78VBnb06RuMAECxKgvwcRtvAVH7XyEhqp/w0X - pP8MFqL/Cxag/w0Zn/8MGJz/CxSY/woTlf8JEZX/CQyQ/wkIiv8JB4X/CAeD/w0Oh/8GBojtAQCF5QQE - heYCA4PmAAGA5gABfuYAAHzmAAF55gECeOYBA3bmAAJ35wAAUumxsb42AAAAAAAAAAAAAAAAZWPdkx8d - 0PMnJMzmJCLN5hsa0OYpJ8vmGxrQ5hcW0uUlJc31HR3G/xUVxf8TEMf/Ew7I/w4Kyf8LCMr/DAnJ/woJ - x/8MCsb/CwzF/wwOxf8NEML/DhHA/xQXxv8NEc7rCg7L5Q0SyOYLEMXmCxLG5gwWwe0MEmLIGCN6jggP - t/ANF7vlFSC38BQerP8QGaf/Dhil/w0YpP8PG6H/Cxef/wsWnf8LFpr/CxSW/woQkv8JCYv/CgiG/wkH - hP8NDIj/CgmM8QQEieUDAoXmAAGC5gABgOYAAX7mAAF95gECe+YAAXjmAAF25gACeOcAAFPpsbG+NgAA - AAAAAAAAAAAAAGhk25ElIcvzLCjH5iciy+YnI8vmLyzI5iAdz+YlIs3lKCbN8iMixf8aGcP/HRzC/xgX - xf8UD8j/EAvL/w4KzP8NDMv/DQ3K/w0Oyf8ND8X/DxDE/xATxP8VGcj/ERXO7QsPzeUOFMrmDRLJ5g0S - xuYQGMjmDhe56gkRsO0OF8DmERq95RcfvOwWILL/Ehyq/w8Yp/8QG6b/EBul/w4Yof8MGJ3/Cxaa/wsX - mP8LFZb/Cg2Q/woJiv8JCIf/DQyH/w8PjvQDAojlAgCF5gEBg+YAAYDmAAF/5gAAfeYAAHrmAAB35gAA - deYAAHXoAABQ6rGxvTYAAAAAAAAAAPn5+gOGg96bXFfX9FZR0+hCPdXoQj7O6DQwzOgpJczoLCjJ5yom - yvAmJML/JCK//yEgwf8cG8T/GBjF/xYTyP8XFMr/FhXM/xERzP8ODsn/EBDI/xASyP8TFcb/FhrG/xMZ - z/EPE9DnExjO6RMZyukSFsfpFBvF6RYexukSHMPpEh3A6RYhwugWIL/sGCGz/hMdrP8RGqn/FB6n/xIc - pf8PGqL/Dhmf/w0Xnf8LF5r/CxiY/wsUlP8KCov/CgiH/w4MiP8NDIv3AwOK5wMCh+gCAYToAACB6AAA - gegDBIPoCwyG6BESh+gXGIbpJyiN8QoLZ/GrrME4AAAAAAAAAADx8fEur6+6846Nof6LiqT8h4Wv/IiH - t/x8esb8c3HP/GBc0/xEP839MCvB/yYivf8iIMD/IR/C/x8exP8cHsX/HBzH/xsayv8XFM3/FBPL/xMT - zP8SE8v/GBnI/xgaxv8XHMf+GR3F/Bofvv0aH7T9GB2v/Rofrf0cIq79GSGw/Rojs/0gKbf9GyO1/Rgi - sf8UHqz/FSCq/xchqf8SHKX/EBuk/xAaof8OGp//DRic/wwZmP8LFpb/DBCR/w0Ni/8LCYf/DAqH/woK - h/wNDYn8GhmQ/C8vl/xGR5n8WFmY/Gdolfx2d5v8mZm61Hl5t1p9frpP2trrEAAAAAAAAAAA8vLzIYiJ - hvVCQj7/PDw4/z8/O/9CQj7/SEhH/1NTV/9jY3b/cnGc/3Rxvv9cV83/NjPI/yMfwP8jI8H/JSjE/x8h - xf8aG8j/IR7K/x0czP8UFc7/FBXM/xcZyf8ZHMD/FBev/xEVn/8VGZX/GiGS/xwhk/8hJ5f/IimZ/x0l - m/8dJ5//ICuk/xgkpv8XIan/FR+r/xsmrf8YIqr/FB2n/xIcpv8RHKT/EByi/w8an/8MGJn/DhqY/w8W - lf8LDIz/CAeH/wsJiP8dHZL/NzeQ/0dHev9KSlz/R0dL/0REQ/9AQDz/UFBK/5ycnc4AAAAAAAAAAAAA - AAAAAAAAAAAAAPr6+giSkpLhOjo6/zAwMP8yMjL/MjIy/zExMP8wMC7/Li4r/zIyLf9CQkL/X19v/3Z0 - rP9mYs7/OjjJ/yIkwf8lJ8T/JynF/yAgyP8fIMz/HBrO/xYXyv8TFbj/Exae/xsejf8lKYv/LjGQ/zI2 - lP8wNZj/MDia/y82mv8pL5j/KTOa/yk0nP8jK53/ICeh/xwqqP8dK63/FyGq/xUfqv8VHqj/Ex6l/xEe - ov8QG5//ERyd/xIfm/8LFJT/Cg2Q/xsdmP84N47/QkJo/zs7Qf80NC//MjIu/zIyMP8yMjL/MDAw/zs7 - Of+BgYbsAwR4EwAAAAAAAAAAAAAAAAAAAAAAAAAApqamx0FBQf8yMjL/NDQ0/zQ0NP80NDT/NDQ0/zQ0 - NP80NDT/MjIw/y4vK/83NzL/W1tl/3l4s/9ZWdL/LS3E/ycoxP8kJcj/HyDL/yEix/8XFq7/FRWS/yot - jP89Q5T/QEWb/z9Jof89S6P/OkWi/zhDn/83Qp7/MTyc/zBAnv8vQp//KD2e/yQ0nf8pNKH/JC2l/xkl - qf8WIaj/FiCn/xUgpf8SHqP/FCGh/xUgoP8OGZr/EBue/ygrmf88PWv/ODg7/zMzLv8zMzH/NDQ0/zQ0 - NP80NDT/NDQ0/zMzM/83Nzb/hoaA/Dw8jikAAAAAAAAAAAAAAAAAAAAAAAAAALGxsapJSUn/MjIy/zQ0 - NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/MzMz/y8wLP86PDf/bWyF/3Bv0P8yNcr/JinF/yUl - w/8aG6n/JSWP/z9Ak/9JTZ7/Tlmo/01aq/9IT6L/REOT/zw7if80NoL/Lzd+/y42ff8wNYD/MTSH/y83 - kv8sO5v/LUOe/yMxm/8iKJ//Gyem/xYip/8VIKb/FySm/xcko/8QHJ7/FB+l/ys0kP84OUz/NDQu/zMz - Mv80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP8zMzP/NDQ0/35+dv9FRpBGAAAAAAAAAAAAAAAAAAAAAAAA - AADFxcWMUVFR/zIyMv80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NTX/MjQz/zAx - LP9ZWmT/dnfI/zc5yf8hI6j/LS2P/1BRmv9bYKf/WWGv/1VZqf9PUJP/NU2J/x5elv8QcKb/CH64/wOJ - w/8EhLz/CXKo/w9fkv8aQ3v/KjV8/ywykP8oNJn/Izab/yMrnv8bJ6X/Gyiq/xolqf8UH6T/FyOq/ycv - iv81Njz/NDUv/zQ1Nf80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zIyMv9wcGj/OjuHYgAA - AAAAAAAAAAAAAAAAAAAAAAAA2NjYbFxcXP8yMjL/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NTU1/zU1 - Nf81NTX/NTU2/zU1Nf81Njb/LzEt/1NVXP9qarX/MjOX/1paoP9ma67/aXG1/2Jfpf9CVJH/F3at/wGb - 2v8AsPb/ALb//wC4//8Auf//ALn//wC3//8As/r/AKDe/wd0p/8jPIT/LDGT/ygxm/8kOZ3/KDWi/x8t - p/8WIab/FySs/x8oi/80Njn/NjYy/zU1Nf80NTX/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0 - NP8xMTH/X19b/3FymYIAAAAAAAAAAAAAAAAAAAAAAAAAAN/f30xoaGj/MzMz/zMzM/80NDT/NDQ0/zQ0 - NP80NDT/NDQ0/zQ0NP81NTX/NTY2/zY4N/82Nzf/NTg2/zY4OP8vMi3/SUtW/3h5rf9vc7T/dX26/29p - pf9BaJz/BpjX/wC0/v8AuP//ALb//wC1//8AtP//ALT//wC0//8AtP//ALX//wC6//8Aq+7/H06L/zI4 - kP8sNZj/LTmc/yg9nP8iLZ7/Gieo/xwlmf8xNEP/Njgy/zU2Nv81NTX/NDU1/zQ1Nf80NDT/NDQ0/zQ0 - NP80NDT/NDQ0/zQ0NP80NDT/MTEx/1VVUP93d5ahAAAAAAAAAAAAAAAAAAAAAAAAAAD09PQwd3d3/jU1 - Nf8zMzP/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NTT/NDQ0/zQ1Nf82Njb/Nzk5/zc6Of83Ojn/LjAw/0dK - R/+Ulqf/jpbE/315r/9LcKH/BKLl/wC3//8Atf//ALT//wC0//8AtP//ALT//wC1//8Atf//ALX//wC0 - //8Atf//AKjs/yNXjP86R5T/OEid/y44mP8oNZn/KDic/x0pn/8qMFb/ODoy/zY4N/81Nzb/NTY2/zU1 - Nf80NTX/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zExMf9NTUj/ZmaGwQAAAAAAAAAAAAAAAAAA - AAAAAAAA8vLyHIWFhe42Njb/MDAw/zExMf8xMTH/MjIy/zIyMv8yMjL/NDQ0/zU3Nv82ODj/Njc3/zU3 - N/82ODf/Nzo5/zQ5Of90eHf/j5eX/5+iwP9td6T/DJ/h/wC3//8AtP//ALT//wC0//8AtP//ALb//wq5 - //8ktvL/MLfu/y637/8hvP3/B7z//wCm6/8pYZD/RmCc/z1Rof8yQZr/KzWY/yg5nv8nM3T/NDcy/zY4 - N/82ODf/NTc3/zU2Nv81NTX/NDU1/zQ0NP8zNDP/MjIy/zExMf8xMTH/MTEx/zExMf8wMDD/Pj48/35+ - idmWlsUIAAAAAAAAAAAAAAAAAAAAAPLy8ginp6fmYmJi/1dXV/9ZWVn/WVlZ/1lZWf9ZWVn/XVxc/1ZT - VP9CQkL/Nzg4/zY5OP84PDv/O0A//zc7Ov9NUFD/kpSU/5Ogm/+cmaX/PpXG/wC2//8AtP//ALT//wC0 - //8AtP//ALf//yGv6f9foLb/e56l/4GgpP96naH/apuo/0qz2/8OsfX/L26X/05qoP9CXqb/OUqf/y8+ - m/8oNZP/MUFP/zQ3Mv81Nzb/Njg4/zY4OP82ODf/NTc2/zU2Nv87PDz/TUxM/1pYWf9aWlr/WVlZ/1lZ - Wf9jY17/aWlh/3Fxaf+mpqX9oaHJHgAAAAAAAAAAAAAAAAAAAAAAAAAA7u7uVd/f32vb29tr29vba9vb - 22vb29tr29vba7rJxG2dt7Bsc3d23z4+Pv80NTX/NDc2/z1AP/84PDz/cXZ1/6Gpp/+ep6T/hI6X/xGt - 7/8Atv//ALT//wC0//8AtP//ALb//x+p4f+DoKX/pbi3/6vDxf+nxMb/nr/B/4yusP54lpn/RKzS/zqI - s/9XeKf/Smur/z5Uo/80Q5//LDV5/zpIRP81Pjv/NTk4/zY6Of83ODj/NTc2/zU1Nf81NTX/UlJS/4ya - lo7E0Mxr3Nzca9vb22vb29trhISva0dHimtKS5BrUFCSaYODuhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ2opqxLSkr/MzU1/zU4N/9CRUT/QEND/4uN - jf+qsK7/qKek/2eVqP8Atf7/ALX//wC0//8AtP//ALb//wer7/98oq7/u8jH/7rMzv+YsLX/hZqf/32X - m/9zlJn/ZYiO/1aEj/5Vkq3+YIix/1N4sf9GYan/O0yh/zZAZf9ASkT/N0M+/zM2Nv81Nzb/Njg3/zU3 - Nv80NTX/NDQ0/2ZkZP+nwrpGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvuLaMVlVV/zM0 - NP8zNTX/RklI/09SUf+goaH/s7m2/6umov9Rn7//ALj//wC0//8AtP//ALT//wCz//83nMT/ur+8/9Lb - 3P+7wcL/LqPT/wKSz/8Ckc3/ApLN/wKTz/8DicH/Toyg/m+Ytv9dhbb/Tmyu/z1Om/87Q1X/QUdF/zlF - QP8zNjb/NDc2/zY4N/81Nzb/NTY1/zMzM/9iX2D/o762cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALja - 0QEAAAAAq8G7a2JgYf8zNDT/MjU0/0tNTf9eYF//sbKy/7q/vf+uqKX/RqbO/wC3//8AtP//ALT//wC2 - //8AqvX/aJ2y/9LV0v/e4eH/vby7/zWy5/8Auv//ALj//wC4//8Auv//AKjw/02Oof90mrX/X4S3/05q - r/8/UJX/QEdR/0NISv88SEP/NDY2/zM2Nf82ODj/NTc3/zU2Nv8yMzP/VVRU/6O0r4wAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADB4NcBAAAAAKzKwU5vbW7/NDU1/zI0M/9QUlH/a21s/8DBwf/Eycf/ta+s/0ar - 1f8At///ALT//wC0//8Atv//AKTr/3qisf/c3tz/5ebm/8C+vv81seT/ALb//wC0//8AtP//ALb//wCl - 6v9OjaH+eZ64/2SLu/9Vc7P/RVeW/0RNVf9GTE//P0xH/zY5OP80Nzb/Njk5/zY4OP81Nzf/MzQ0/0xM - TP+lrKqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu9zTAQAAAACz0Mcwfnx9/Dc4OP8xMzP/VVdX/3R3 - dv/Hx8f/0NXT/764tf9PrtX/ALf//wC0//8AtP//ALb//wCj6v91oLD/3uDe/+fq6v/Fw8P/M7Ln/wC2 - //8Atf//ALX//wC3//8Apu7/UJCl/nqdu/9mirz/VnK0/0VVlv9FTFT/SE1P/z9MR/81Nzf/MzY1/zY4 - OP81Nzf/NTY2/zMzM/9ERET/lJ6cyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtLJFomK - iu88PDz/MDIy/1lcW/99f37/yMnI/9zg3v/KxMH/ZbDO/wC4//8AtP//ALT//wC2//8AqPL/UpKr/9jX - 1f/n7e7/z9LT/2e94f9Au+v/QLnq/z+46v8+uOn/MLLm/2Cju/6Cp8L/bZPA/1x4t/9JWJv/RkxX/0pQ - T/8/S0f/NTc3/zM1Nf82ODf/NTc2/zU3Nv8zMzP/Pj4+/4uQj9/P5N0GAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAK7SyQSChYTTPT09/y8yMf9YWln/goSE/8HCwv/n6un/2NXR/4q0xf8Nuv//ALP//wC0 - //8Atf//ALP+/xSJuv+rsrP/4efn/9zn6P/M1NP/vcTD/7S/vv+nurv/nLa4/5a4vP6Ir8f8faLJ/W6S - wf9hfrn/UWGl/0ZOYf9NWFP/QUxH/zQ3Nv80Nzb/Njg3/zU3Nv81Njb/MzQ0/zk5Of93d3fv0NrYGQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA09PTg7Cw - sL+kpKS+paWlvqenp76mpqa+o6SjvqGjo72OkJC+W1xc8Dk7O/8yNTP/TU9O/4iJif+ys7P/7u/v/+Xl - 5P+5v8T/NLrz/wC1//8AtP//ALT//wC3//8Ape3/L4Gi/6WusP/Q1tX/1ODh/8/h4v/I3uD/v9rc/7LS - 1/+jx9T/kbPR/nqayP5phL7/XHC2/1Bgrf9GTXL/T15X/0FHRf80Nzf/Njk5/zc4OP82ODf/NTY2/zQ0 - Nf82Njb/UFBQ/YaGhsikpKS8paWlvqWlpb6fn6K+m5ufvpubn76bm5++tbW3vvPz8y8AAAAAAAAAAAAA - AAAAAAAAAAAAAMzMzKBeXl7/QUFB/0RERP9ERET/RERE/0RERP9FRET/QUFB/zo7O/82Nzf/MzU1/zw+ - Pv+Cg4P/pKam/+jp6f/x8/L/3dba/3261/8Kuv//ALP//wC0//8AtP//ALf//wCl7f8QhLX/Soih/3KZ - pf+Doar/f6Gq/3mep/9vlKT/ZYql/3qdvP9+ncf/a4C+/1pntP9SWK//RU2G/0ZUUP8/Q0H/NDg3/zc6 - Ov82OTn/NTc3/zU1Nf80NTX/NDU1/zg3N/8+Pj7/Q0ND/0RERP9ERET/RkZF/0dHRv9HR0X/RkZE/3Jy - cf/f399bAAAAAAAAAAAAAAAAAAAAAAAAAADMzMx5VVVV/zAwMP8yMjL/MjIy/zIyMv8yMjL/MjIy/zIy - Mv8zNDT/NTU1/zQ2Nv8zNTX/amxr/6Kko//Q0dD/+fr6/+/v9f/Iyc//Tb7s/wG4//8As///ALT//wC0 - //8Atv//ALT//wCm7/8Amt3/AJbW/wCW1v8Altb/AJfX/wCMyP9KeqX/eYu+/3CEwP9faLT/Vlqx/0RW - oP85QVL/ODk2/zQ2Nv83Ojj/Nzo5/zY4OP82Nzf/NDU1/zQ0NP8zMzP/MjIy/zIyMv8yMjL/MjIy/zIy - Mv8yMjL/MjIy/zAwMP9VVVX/zMzMewAAAAAAAAAAAAAAAAAAAAAAAAAA2dnZWmFhYf8yMjL/MzMz/zQ0 - NP80NDT/NDQ0/zQ0NP80NDT/NDU1/zU1Nf81Njb/MzU0/0dJSP+Ympn/uLm4//Dw9P/6/P//7ens/7XE - zP8/v/P/Abf//wCz//8AtP//ALT//wC1//8Atv//ALf//wC4//8AuP//ALj//wC6//8Aqe//RnWi/3F4 - t/9rdLz/Z2+4/1hotP9EU6z/Jixt/yksL/84Ojj/Njc3/zU3Nv81Njb/NTY2/zU2Nv81NjX/NDU1/zQ0 - NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP8yMjL/TExM/8PDw5sAAAAAAAAAAAAAAAAAAAAAAAAAAO3t - 7T9vb2//NTU1/zMzM/80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ1Nf80NTX/NTY2/zQ2Nv80Njb/bG9p/7Gy - wv/Tzu//+/z///n7/f/q5ef/tMLM/0++7P8Lu///ALT//wCz//8As///ALT//wC0//8AtP//ALT//wC0 - //8Atv//AKbr/0VwoP90dbb/am+8/15ruf9WbLb/QUut/xojm/8TGUv/MzUx/zY4N/81Nzb/NTU1/zQ1 - Nf80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/MjIy/0RERP+urq63AAAAAAAA - AAAAAAAAAAAAAAAAAADy8vIqe3t7+Dc3N/8zMzP/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDU1/zU2 - Nv81Nzb/NTgw/zs9Wv+IiND/wL3w/+Hc9v/8/f//+fr+/+rl6v/BxM7/fLvZ/zy98v8XvP//B7r//wG4 - //8At///ALf//wC4//8AuP//ALr//wCq8P9Gc6T/c3O5/2dzwv9Za7z/R1G1/yk1q/8fLK7/FSCS/xcb - Pf8zNTH/Nzg2/zU1Nf80NTX/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zIy - Mv8/Pz//m5ub0f///wYAAAAAAAAAAAAAAAAAAAAA9/f3E4qKius6Ojr/MjIy/zQ0NP80NDT/NDQ0/zQ0 - NP80NDT/NDU1/zQ1Nf81NjT/Nzky/y0uTv8oJqL/RUTO/5iY5v/LxfH/4+H3//r7///5+v7/7Ov0/9bQ - 3P+0ucz/kLLN/3Cw1P9ast//SrTm/0ix5P9Gr+P/RK7i/0Ks4f80pOD/VHy5/3N9w/9ldcj/UVvA/yoz - sf8dKKv/Hiyq/xsoqv8SGYf/Fhc6/zAwLv83ODX/NDU1/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0 - NP80NDT/NDQ0/zQ0NP8yMjL/OTk5/42Njer9/f0SAAAAAAAAAAAAAAAAAAAAAP///wKenp7WPj4+/zIy - Mv80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP82NzL/MjQy/yYmW/8nI6r/KifL/yUjx/9ERtH/npvo/8zH - 8v/Z3vb/8vP9//n6///x8/z/4eHz/9HM5f++utn/r6rO/6Ofx/+ZlcP/j42+/4iIuv+Agbf/fIC7/32M - zP95h9L/X2fG/zc/tf8oMa7/HCeq/xUgpP8WIKP/GByh/xIUh/8PEEf/Jicr/zY2Mv82NjX/NDQ0/zQ0 - NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/MzMz/zY2Nv97e3v77e3tJwAAAAAAAAAAAAAAAAAA - AAAAAAAAq6uru0RERP8yMjL/NDQ0/zQ0NP80NDT/NTU0/zY2Mf8zMy//KSlA/yUjev8nI7r/KCPK/yMh - yP8eH8r/HR3L/zU10v+ThuT/w8Xx/8/U9f/i4vj/8PD7//L0/f/q7fv/3+P4/9LW9P/Gy/D/usDt/7G5 - 6v+rt+j/pbHl/5ii3/+FjNb/Y2rI/0dRvP8wObL/Himq/xYhpf8SHqL/ERed/xUWl/8UF5r/EBKR/wsN - X/8WFzP/Kyss/zY2Mv82NjX/NTU0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zMzM/80NDT/bm5u/+fn - 50MAAAAAAAAAAAAAAAAAAAAAAAAAALi4t6BKSkr/MTEw/zU1M/82NTL/MzMv/y4uL/8nJj//IR1u/yQg - pv8oJMb/KifG/yEfx/8bHMn/HBvM/xcVzf8PEs3/MCHO/21k2/+hruv/wsTw/8zN8v/V1vT/29z1/97f - 9v/c3vX/19nz/8zP8P+/wuz/r7Pn/5md3/97gdT/XmXJ/0lSv/8xO7P/ICur/xQepv8TH6T/Ehqg/xET - mP8REZT/EBKT/xITkf8PEZL/Cwx+/wkJUv8VFTP/Jycs/zIyL/82NjP/Nzc1/zU1NP8zMzL/MjIy/zEx - Mf8xMTH/MDAw/15eXv/f399eAAAAAAAAAAAAAAAAAAAAAAAAAADMy8p+bm1o/0ZFQf87Oz7/LjFE/ycy - Wv8mO4D/Jiet/ywjx/8pIcn/IyDF/xwcx/8gH8f/HBrK/xQSzP8SEcz/EhPL/xsRyP8tGMv/LEbR/19p - 2f+QkeL/q67p/7W36/+4uuv/trjq/7Cz6P+mqOT/mJze/4WK2P9xd9L/WGDJ/z1Gvf8pM7X/GiSt/xci - qf8VIKb/EBuh/xEVm/8SEpX/DhCT/w0OkP8OD47/DhGN/w0Mi/8MC4n/BgZ4/wUFWf8NDT//Ghoy/y0u - Nf9BQUD/Tk5K/1RUUP9XV1T/WFhV/1ZWVf9wcG//zs7OiAAAAAAAAAAAanCnNEdLZWdITmt1QExuukVP - evYsM4L2JzWZ9ixCs/YrTsj2LVbP9ist0fYlHNH1JB3O+R8ayP8YF8j/FhPM/xYUy/8REMv/EBDJ/xAS - yP8VE8b/LhbI/xEoy/8QIsT/HiLD/zU5yP9OU87/XmPU+mBk1/ZgZtb2WWDS9lBYzvZCSsj2MzvC9iQu - vPYaJLj2GCO29hklsvgWIan/FiGm/xEXoP8QEZj/EBGT/w4Pkf8NDo7/Cw2N/wsMiv8MCoX/CwqD/wkJ - hP8JCIT/BwZ9/wYHc/sHCGb1Dg9Y9hwcUPYsLVL2QkJa9lFSYfZYWGDur6+ysObm5l4AAAAAAAAAAFRm - ypkdN6H/IUCq8yI+vOwpNsXkKjjP5CM61eQiP9LkIEbQ5B5M0OQYHdLkEgzX4xcR1+scFs7/Eg3K/w8N - y/8LDcv/DxDJ/w8QyP8PD8T/EhPD/y4Txf8XKMn/ECXD/xIVvf8NErr/EBa8/xIYw/MJEcTkCxbC5gUP - vuYKFL3lCxW75gwXuuUPGrfmDhm15QwXs+QSHrToGCSt/hIbov8TFJr/DxCW/w0Plv8OD5P/DA2O/woL - iv8KCIb/CgmD/wkKgv8JCYH/CQh+/wsKfv8JC4T3AACD4wAAgOQAAHvkAABy5AAAaOUAAGLlAAA85LKy - vigAAAAAAAAAAAAAAABshNyUKkrQ8yQ30OYeJdHmJTDO5ik6zOYaM9DmGDnR5hpF0OYZSNHmExfW5g0F - 2eUOB9rqFBDS/w0Jy/8MCcn/CwzJ/wwNxf8MDsb/DQ/G/w0Rwv8rEML/GCjG/w8kwf8RFbv/DxW5/xMY - uv8YH8P3DhjE5hggxeosMsjqERq95wwWuuYMF7fmDhm15g0YtOYLFrHmDRmw5xchqfwQE5v/EhOX/xAR - lP8MDpH/DA2Q/wsMjv8KCYr/CgiG/wgHgv8HCIH/CAd+/wcGfP8ICXz/DQ+D+gECf+YAAH3mAAF75gAB - euYAAXnmAAJ75wAAVeqxsb42AAAAAAAAAAAAAAAAYGfekxkd0fMYHNDmFiHS5hkp0uYgNs7mFjTS5hE4 - 1OYSQ9TmF0DS5goH2eYFANvmBwPa6A8O0f0LCMj/CgjH/wsIxf8LC8P/Cg7B/w0Qwv8KEML/KRDA/xQk - w/8PJL7/DhK4/w4Stv8RF7f/Fh+/+gkTwe8gK725jp3XdDxCyO8FD7XnChW05gwWs+YLF7DmChWv5gkT - rOYWGaX6ERKX/w8Pk/8PEpP/DQ2P/wsKi/8JCYj/CgmG/wgHhf8HB4X/BwaC/wcGfv8GBnr/Bgd6/wwN - gPwEBYDoAQF85gABeeYAAXfmAAJ15gACd+cAAFLpsbG+NgAAAAAAAAAAAAAAAFhb4ZMSGdTzEh3T5hAf - 1OYPJdTmGDTR5hQ20+YLOdfmDEfX5gwp1uYDANnmAwDY5gQB1uYPDM/6CwnE/woHw/8KCML/CgnA/woM - v/8LDrz/Cg+9/ykPwf8TIcP/DSG8/wsPtf8MErT/Dhaz/xUevP4EC7jqXHq1PAAAAACCi9isGyO78wQN - sOYJFLHmChSv5ggUreYHC6blFBWg9xMUl/8MDZL/DQ2P/w4MjP8JCIn/CQiG/wkIg/8ICIH/BgeA/wcG - f/8GBn//BQV+/wYHe/8MDX/+AwN96QECe+UCA3nmAAF25gACdeYAAnbnAABS6bGxvjYAAAAAAAAAAAAA - AABUW+OTCxnX8wsd1uYJIdfmByfY5gov1+YRPNTmB0HZ5gU+2eYCCdnmAgDY5gIA1OYDANPlDgzN9wwJ - wf8IB77/CAi//wgIvv8JCrz/CQq7/wsMuP8lC7v/ECLE/wsfuv8LELP/CxOy/wwVsf8RGLr/M0W1egAA - AAAAAAAAosbMIWht0tYJErDuBA+t5ggTrOYHDafmBwmg5RERnfQTEpX/DAuO/wwJjP8MCor/CgmH/wkH - hP8IB4L/BgeB/wcHf/8HBXz/BQZ6/wUGev8FB3r/DA1+/wQFf+wAAHrlAQJ45gECduYAAnTmAAJ15wAA - Uemxsb42AAAAAAAAAAAAAAAAT13lkwQc2vMDINnmAyXa5gEr2uYBM9vmCkDY5gVG2eYBGNnmAgDT5gIA - 1OYCANLmAQDP5QsLy/UKC8D/Bwa7/wcHuv8HCbv/CAi5/wcJuP8NC7b/IQm4/wsjvf8JGrn/ChCy/wkS - r/8JErT/PUGo/6rKwTUAAAAApdHEAQAAAACku9NGVlzJ6QINq+sFCaTmCAif5ggFnOUOC5rxEQ+S/w0K - i/8KCIn/CAiI/wsKh/8JB4T/BweB/wYGf/8IBn7/BgZ7/wUGef8FBnn/BQZ2/wsLev8HCH3vAAB85QAB - e+YAAnjmAAJz5gACdOcAAFHpsbG+NgAAAAAAAAAAAAAAAE1j5JMBI9nzACXZ5gAt2eYAMtnmADrY5gNH - 2uYGJ9jmAQDR5gIBz+YBAM7mAQHQ5gAAzOUICcnxCgu+/wYHuf8GB7j/Bwi2/wcItv8GCrX/Ewiz/yAM - uP8IJLn/CBKw/wgMsf8NE7j/Gh+M/2Zmav/b3tlRAAAAAAAAAAAAAAAAAAAAAMnK7VpHSbzsAwGd6wQB - muYFApjlCwiY7hAOkP8LCYr/CQiI/wkHhv8KCIP/CAmD/wYGgP8GBn//BgV8/wYHev8FBnn/BQZ3/wUF - df8KC3j/CAl78gAAd+UAAnbmAAJ25gACdeYAAnfnAABR6bGxvjYAAAAAAAAAAAAAAABNauKTAS3V8wAv - 1uYAN9bmAEDV5gBE1eYAItbmAQDW5gEAzuYAAcvmAAHL5gAByuYAAMrlBgjH7gwNvf8FB7b/Bgi1/wYH - tP8GCLL/Bgqy/xkGsv8XE7j/BSC0/wYMrv8SFbX/JCeQ/zEwN/9cXFb/yMjJcQAAAAAAAAAAAAAAAAAA - AAAAAAAAt7bjXlRSuusIBZnuAACU5QcFleoQDpD/CQiI/wkIhv8IB4P/BweC/wcIgf8HBn//BwZ9/wUG - e/8GBnn/Bgd5/wUGdv8FBXX/CQp2/wkKevQAAXblAAJ15gACcuYAAnLmAAJ05wAAUemxsb42AAAAAAAA - AAAAAAAATXDfkwE30fMAPtHmAETT5gA51OYAFtDmAQDL5gAA0OYAAc3mAAHI5gAAx+YAAcbmAADH5QUH - xewMDbv/Bge0/wUHsv8FCLH/Bgqw/wcLr/8gBbL/Chq3/wcctP8bH7T/LS98/zU1NP8zMi7/UFBQ/7+/ - v5EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADX1+9Ia2nC1xYVnfMAAJDqDAqO/QgHhv8IB4P/BwaC/wYG - gf8FBX//BgV9/wYGe/8GB3n/BQZ5/wUGeP8GBnb/BQVz/wgJdP8LDHn4AAJ15gACc+YAAnLmAAJx5gAC - c+cAAE7psbG9NgAAAAAAAAAAAAAAAE173pMBQtDzADbQ5gAfz+YABcvmAADI5gABx+YAAsrmAALM5gAC - xeYAAsTmAALD5gABw+UCBMPpDA25/gYIsf8FCbD/BQuv/wQLrv8MBaz/GAq2/xUxwP8uOKb/Nzdg/zU1 - L/80NDH/MjIy/0dHR/+vr6+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOno9SKgntajSEev8BQT - kv8CAIL/AwKA/wUFgf8FBX//BwV9/wYFe/8FBnn/BQZ5/wUGd/8FBnX/BgZ0/wYHc/8HCHP/DA14+wEC - dOYAAnLmAAJy5gACcOYAAnHnAABO6bGxvTYAAAAAAAAAAAAAAABNZNuTAhPK8wADx+YAAMXmAADF5gEC - xeYAAsTmAALF5gACyOYAAsTmAAHB5gABwOYAAr/mAQXA5wsQufwFCq//AQet/wEIrf8LD7L/MRu6/zk/ - tP88SXz/ODg+/zQ0Lf80NDP/NDQ0/zIyMv9DQ0L/lpacy0NHxgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJaV0UuHh7/lRUWh/xoakP8EBID/AAB7/wQCev8EBXn/BAV5/wUGd/8FBnb/BQV0/wUG - cv8GBnH/Bghx/wwOd/0CA3ToAAJy5gACceYAAm/mAANw5wAATemxsb02AAAAAAAAAAAAAAAATUzVkwEA - wvMAAMLmAALC5gADw+YAAcHmAAHA5gAAwOYAAcTmAADD5gAAveYAALzmAAC75wACuuoJDbj8DhO0/xwh - t/8wNLP/Q0Gb/0pCcf83OkD/MjEr/zIyL/8yMjL/MjIy/zIyMv8wMDD/PDw6/4WGjeMQFrwPAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkpGooW1tcv9fX4X/Vlaa/zo5l/8dHor/Cwx//wID - eP8AAHP/AABy/wABcP8BAm//AgNv/wQFbv8LDHP+AwVz6gAAceUAAnHmAAJu5gACb+cAAEzpsbG9NgAA - AAAAAAAAAAAAAElM0pMAAL70AAC95wAAveYAAL3nAAK96QEFvusECr7tCA7A8A0RxPIWHMLyIynE8S81 - xuxCR8zZYGPI8l9hov9VVnn/TU1W/0NEPP8+QDT/QD85/0FAPP9BQTz/QUE8/0FBPP9BQTz/QEA7/0VF - QP+Skon+QUXAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI+OroVpaVz/Pj43/09P - TP9iYmr/a2uG/2ZmlP9WVpf/REST/zEyiv8kJYP/GRl8/w8Rdv8LDXL/DhB0/wQGc/AAAG7oAABr5wAA - aucAAGvoAABI6rGxvDYAAAAAAAAAAAAAAABhY9aZKCzH/CYsxu8mLMbwKCzG6Dk+y9tBR8zNT1PPu1pe - 0qVjZ9eQY2fVeWRn1FxbX9FEREnNHX2Bw4aGhpjjaGmA42prhONua4jjcGyL42xxi+NscIrjbG2K42xt - ieNsbYnjbG2J42tsieNub4zjoKGy40dLvjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABJSKFakJCf42pqgONqan7jaGh642lqe+Nvb4HjdnaM43x9luOAgKDjgYGm439/quV4eanocHGm72lq - pfZPUZzlPT+S3Swuh+8mKILvKiyF8AsMXvKrrL84AAAAAAAAAAAAAAAA5OX4KOHh90Hg4fc+4OH3P93d - 9jnd3vYv2tv1JdfX9BfT0/MGAAAAAAAAAAAAAAAAAAAAAAAAAAC3ueoBvr/tB72+7Qe9vu0Hwr3tB8S9 - 7we9xfAHvcTvB72/7ge9vu0Hvb/tB72/7Qe9v+4Hvb/uB7y+7Qe2uOoDAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAtLTdAr294ge9veEHvb3gB7294Ae9vd8HvL3eB7y83Ae/v9wHxcXeB83N - 4gfV1eYK29vpD+Dg7Bvi4+4m4uLuLuLi7zLi4u4+4OHtPuLj7j7P0OQ/6OjyDwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/////////////////////8AAAP/AAHgBwAAA/8AAAAHAAAB/wAAAAcAAAH/AAAABwAAAf8AA - AAHAAAAfwAAAAcAAAA/AAAABwAAAB8AAAAHAAAADwAAAAcAAAAFAAAABwAAAAYAAAAHAAAAAAAAAAcAA - AAAAAAABwAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAA+AAAAAAAAAB8AAAAAAAAAHwAAAAAAA - AAfAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAB8AAAAAAAAADwAAAAAAAAAPgAAAAAAAAA//w - AAAAAAf///AAAAAAB///0AAAAAAH///QAAAAAAf//9AAAAAAB///8AAAAAAD///wAAAAAAP/8AAAAAAA - AAHwAAAAAAAAAfAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPgA - AAAAAAAA+AAAAAAAAAD4AAAAAAAAAMAAAAAAAAAAwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAIAA - AAHAAAABgAAAAcAAAAFAAAABwAAAAeAAAAHAAAAB8AAAAcAAAAH4AAABwAAAAfwAAAHAAAAA/wAAAcAA - AAD/gAABwAAAAP+AAAHAAAAA/4AAAcAfAAD/gAAB//////////8= - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Properties/AssemblyInfo.cs b/Source/Tools/SharpGen/Properties/AssemblyInfo.cs deleted file mode 100644 index add00d04d..000000000 --- a/Source/Tools/SharpGen/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System.Reflection; - -[assembly: AssemblyProduct("SharpGen")] -[assembly: AssemblyTitle("SharpGen")] -[assembly: AssemblyDescription("Assembly providing C# code generation from C++ includes")] \ No newline at end of file diff --git a/Source/Tools/SharpGen/RunGenerator.bat b/Source/Tools/SharpGen/RunGenerator.bat deleted file mode 100644 index b66a5edd0..000000000 --- a/Source/Tools/SharpGen/RunGenerator.bat +++ /dev/null @@ -1,24 +0,0 @@ -REM @ECHO OFF -REM Run the generator from the current configuration -setlocal -pushd "%~dp0\Bin\%1" -ECHO "%~dp0msdndoc.zip" -xcopy /D /Y "%~dp0MSDNDoc.zip" . - -REM Find a VS 2017 installation with the C++ toolset installed. -set InstallDir= -for /f "usebackq tokens=*" %%i in (`..\..\..\..\..\External\vswhere\vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do ( - set InstallDir=%%i -) -set ToolsVersion= -for /F %%A in ('type "%InstallDir%\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do ( - set "ToolsVersion=%%A" -) -set VCToolsInstallDir= -if exist "%InstallDir%\VC\Tools\MSVC\%ToolsVersion%\" ( - set "VCToolsInstallDir=%InstallDir%\VC\Tools\MSVC\%ToolsVersion%\" -) -SharpGen.exe --doc --castxml ..\..\..\..\..\External\castxml\bin\castxml.exe ..\..\..\..\Mapping.xml --apptype %2 --vctools "%VCToolsInstallDir% -set LOCALERROR = %ERRORLEVEL% -xcopy /D /Y MSDNDoc.zip %~dp0 -exit /B %LOCALERROR% \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/Reference.cs b/Source/Tools/SharpGen/Service References/Bing/Reference.cs deleted file mode 100644 index f9ae5c7ce..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/Reference.cs +++ /dev/null @@ -1,3527 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18213 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace SharpGen.Bing { - - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search", ConfigurationName="Bing.BingPortType")] - public interface BingPortType { - - // CODEGEN: Generating message contract since the wrapper name (SearchRequest) of message SearchRequest does not match the default value (Search) - [System.ServiceModel.OperationContractAttribute(Action="http://schemas.microsoft.com/LiveSearch/2008/03/Search/Search", ReplyAction="*")] - [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)] - SharpGen.Bing.SearchResponse1 Search(SharpGen.Bing.SearchRequest1 request); - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class SearchRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private string versionField; - - private string marketField; - - private string uILanguageField; - - private string queryField; - - private string appIdField; - - private AdultOption adultField; - - private bool adultFieldSpecified; - - private double latitudeField; - - private bool latitudeFieldSpecified; - - private double longitudeField; - - private bool longitudeFieldSpecified; - - private double radiusField; - - private bool radiusFieldSpecified; - - private SearchOption[] optionsField; - - private SourceType[] sourcesField; - - private WebRequest webField; - - private ImageRequest imageField; - - private PhonebookRequest phonebookField; - - private VideoRequest videoField; - - private NewsRequest newsField; - - private MobileWebRequest mobileWebField; - - private TranslationRequest translationField; - - public SearchRequest() { - this.versionField = "2.2"; - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - [System.ComponentModel.DefaultValueAttribute("2.2")] - public string Version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("Version"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Market { - get { - return this.marketField; - } - set { - this.marketField = value; - this.RaisePropertyChanged("Market"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string UILanguage { - get { - return this.uILanguageField; - } - set { - this.uILanguageField = value; - this.RaisePropertyChanged("UILanguage"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Query { - get { - return this.queryField; - } - set { - this.queryField = value; - this.RaisePropertyChanged("Query"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string AppId { - get { - return this.appIdField; - } - set { - this.appIdField = value; - this.RaisePropertyChanged("AppId"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public AdultOption Adult { - get { - return this.adultField; - } - set { - this.adultField = value; - this.RaisePropertyChanged("Adult"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool AdultSpecified { - get { - return this.adultFieldSpecified; - } - set { - this.adultFieldSpecified = value; - this.RaisePropertyChanged("AdultSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=6)] - public double Latitude { - get { - return this.latitudeField; - } - set { - this.latitudeField = value; - this.RaisePropertyChanged("Latitude"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool LatitudeSpecified { - get { - return this.latitudeFieldSpecified; - } - set { - this.latitudeFieldSpecified = value; - this.RaisePropertyChanged("LatitudeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=7)] - public double Longitude { - get { - return this.longitudeField; - } - set { - this.longitudeField = value; - this.RaisePropertyChanged("Longitude"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool LongitudeSpecified { - get { - return this.longitudeFieldSpecified; - } - set { - this.longitudeFieldSpecified = value; - this.RaisePropertyChanged("LongitudeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=8)] - public double Radius { - get { - return this.radiusField; - } - set { - this.radiusField = value; - this.RaisePropertyChanged("Radius"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool RadiusSpecified { - get { - return this.radiusFieldSpecified; - } - set { - this.radiusFieldSpecified = value; - this.RaisePropertyChanged("RadiusSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=9)] - public SearchOption[] Options { - get { - return this.optionsField; - } - set { - this.optionsField = value; - this.RaisePropertyChanged("Options"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=10)] - public SourceType[] Sources { - get { - return this.sourcesField; - } - set { - this.sourcesField = value; - this.RaisePropertyChanged("Sources"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=11)] - public WebRequest Web { - get { - return this.webField; - } - set { - this.webField = value; - this.RaisePropertyChanged("Web"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=12)] - public ImageRequest Image { - get { - return this.imageField; - } - set { - this.imageField = value; - this.RaisePropertyChanged("Image"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=13)] - public PhonebookRequest Phonebook { - get { - return this.phonebookField; - } - set { - this.phonebookField = value; - this.RaisePropertyChanged("Phonebook"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=14)] - public VideoRequest Video { - get { - return this.videoField; - } - set { - this.videoField = value; - this.RaisePropertyChanged("Video"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=15)] - public NewsRequest News { - get { - return this.newsField; - } - set { - this.newsField = value; - this.RaisePropertyChanged("News"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=16)] - public MobileWebRequest MobileWeb { - get { - return this.mobileWebField; - } - set { - this.mobileWebField = value; - this.RaisePropertyChanged("MobileWeb"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=17)] - public TranslationRequest Translation { - get { - return this.translationField; - } - set { - this.translationField = value; - this.RaisePropertyChanged("Translation"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum AdultOption { - - /// - Off, - - /// - Moderate, - - /// - Strict, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum SearchOption { - - /// - DisableLocationDetection, - - /// - EnableHighlighting, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum SourceType { - - /// - Spell, - - /// - Web, - - /// - Image, - - /// - RelatedSearch, - - /// - Phonebook, - - /// - Showtimes, - - /// - Weather, - - /// - Video, - - /// - Ad, - - /// - XRank, - - /// - InstantAnswer, - - /// - News, - - /// - QueryLocation, - - /// - MobileWeb, - - /// - Translation, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class WebRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private bool countFieldSpecified; - - private string fileTypeField; - - private WebSearchOption[] optionsField; - - private string[] searchTagsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CountSpecified { - get { - return this.countFieldSpecified; - } - set { - this.countFieldSpecified = value; - this.RaisePropertyChanged("CountSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string FileType { - get { - return this.fileTypeField; - } - set { - this.fileTypeField = value; - this.RaisePropertyChanged("FileType"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=3)] - public WebSearchOption[] Options { - get { - return this.optionsField; - } - set { - this.optionsField = value; - this.RaisePropertyChanged("Options"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=4)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public string[] SearchTags { - get { - return this.searchTagsField; - } - set { - this.searchTagsField = value; - this.RaisePropertyChanged("SearchTags"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum WebSearchOption { - - /// - DisableHostCollapsing, - - /// - DisableQueryAlterations, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class Error : object, System.ComponentModel.INotifyPropertyChanged { - - private uint codeField; - - private bool codeFieldSpecified; - - private string messageField; - - private string parameterField; - - private string valueField; - - private string helpUrlField; - - private string sourceTypeField; - - private uint sourceTypeErrorCodeField; - - private bool sourceTypeErrorCodeFieldSpecified; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Code { - get { - return this.codeField; - } - set { - this.codeField = value; - this.RaisePropertyChanged("Code"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CodeSpecified { - get { - return this.codeFieldSpecified; - } - set { - this.codeFieldSpecified = value; - this.RaisePropertyChanged("CodeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Message { - get { - return this.messageField; - } - set { - this.messageField = value; - this.RaisePropertyChanged("Message"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Parameter { - get { - return this.parameterField; - } - set { - this.parameterField = value; - this.RaisePropertyChanged("Parameter"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - this.RaisePropertyChanged("Value"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string HelpUrl { - get { - return this.helpUrlField; - } - set { - this.helpUrlField = value; - this.RaisePropertyChanged("HelpUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public string SourceType { - get { - return this.sourceTypeField; - } - set { - this.sourceTypeField = value; - this.RaisePropertyChanged("SourceType"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=6)] - public uint SourceTypeErrorCode { - get { - return this.sourceTypeErrorCodeField; - } - set { - this.sourceTypeErrorCodeField = value; - this.RaisePropertyChanged("SourceTypeErrorCode"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SourceTypeErrorCodeSpecified { - get { - return this.sourceTypeErrorCodeFieldSpecified; - } - set { - this.sourceTypeErrorCodeFieldSpecified = value; - this.RaisePropertyChanged("SourceTypeErrorCodeSpecified"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class MobileWebResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string descriptionField; - - private string urlField; - - private string displayUrlField; - - private string dateTimeField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Description { - get { - return this.descriptionField; - } - set { - this.descriptionField = value; - this.RaisePropertyChanged("Description"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string DisplayUrl { - get { - return this.displayUrlField; - } - set { - this.displayUrlField = value; - this.RaisePropertyChanged("DisplayUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string DateTime { - get { - return this.dateTimeField; - } - set { - this.dateTimeField = value; - this.RaisePropertyChanged("DateTime"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class MobileWebResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private uint offsetField; - - private bool offsetFieldSpecified; - - private MobileWebResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public MobileWebResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsArticle : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string urlField; - - private string sourceField; - - private string snippetField; - - private string dateField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Source { - get { - return this.sourceField; - } - set { - this.sourceField = value; - this.RaisePropertyChanged("Source"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Snippet { - get { - return this.snippetField; - } - set { - this.snippetField = value; - this.RaisePropertyChanged("Snippet"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string Date { - get { - return this.dateField; - } - set { - this.dateField = value; - this.RaisePropertyChanged("Date"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsCollection : object, System.ComponentModel.INotifyPropertyChanged { - - private string nameField; - - private NewsArticle[] newsArticlesField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - this.RaisePropertyChanged("Name"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=1)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public NewsArticle[] NewsArticles { - get { - return this.newsArticlesField; - } - set { - this.newsArticlesField = value; - this.RaisePropertyChanged("NewsArticles"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string urlField; - - private string sourceField; - - private string snippetField; - - private string dateField; - - private uint breakingNewsField; - - private bool breakingNewsFieldSpecified; - - private NewsCollection[] newsCollectionsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Source { - get { - return this.sourceField; - } - set { - this.sourceField = value; - this.RaisePropertyChanged("Source"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Snippet { - get { - return this.snippetField; - } - set { - this.snippetField = value; - this.RaisePropertyChanged("Snippet"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string Date { - get { - return this.dateField; - } - set { - this.dateField = value; - this.RaisePropertyChanged("Date"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public uint BreakingNews { - get { - return this.breakingNewsField; - } - set { - this.breakingNewsField = value; - this.RaisePropertyChanged("BreakingNews"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool BreakingNewsSpecified { - get { - return this.breakingNewsFieldSpecified; - } - set { - this.breakingNewsFieldSpecified = value; - this.RaisePropertyChanged("BreakingNewsSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=6)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public NewsCollection[] NewsCollections { - get { - return this.newsCollectionsField; - } - set { - this.newsCollectionsField = value; - this.RaisePropertyChanged("NewsCollections"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsRelatedSearch : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string urlField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private uint offsetField; - - private bool offsetFieldSpecified; - - private NewsRelatedSearch[] relatedSearchesField; - - private NewsResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public NewsRelatedSearch[] RelatedSearches { - get { - return this.relatedSearchesField; - } - set { - this.relatedSearchesField = value; - this.RaisePropertyChanged("RelatedSearches"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=3)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public NewsResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class InstantAnswerResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string contentTypeField; - - private string titleField; - - private string clickThroughUrlField; - - private string urlField; - - private string attributionField; - - private string instantAnswerSpecificDataField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string ContentType { - get { - return this.contentTypeField; - } - set { - this.contentTypeField = value; - this.RaisePropertyChanged("ContentType"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string ClickThroughUrl { - get { - return this.clickThroughUrlField; - } - set { - this.clickThroughUrlField = value; - this.RaisePropertyChanged("ClickThroughUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string Attribution { - get { - return this.attributionField; - } - set { - this.attributionField = value; - this.RaisePropertyChanged("Attribution"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public string InstantAnswerSpecificData { - get { - return this.instantAnswerSpecificDataField; - } - set { - this.instantAnswerSpecificDataField = value; - this.RaisePropertyChanged("InstantAnswerSpecificData"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class InstantAnswerResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private InstantAnswerResult[] resultsField; - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=0)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public InstantAnswerResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class VideoResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string playUrlField; - - private string sourceTitleField; - - private uint runTimeField; - - private bool runTimeFieldSpecified; - - private string clickThroughPageUrlField; - - private Thumbnail staticThumbnailField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string PlayUrl { - get { - return this.playUrlField; - } - set { - this.playUrlField = value; - this.RaisePropertyChanged("PlayUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string SourceTitle { - get { - return this.sourceTitleField; - } - set { - this.sourceTitleField = value; - this.RaisePropertyChanged("SourceTitle"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public uint RunTime { - get { - return this.runTimeField; - } - set { - this.runTimeField = value; - this.RaisePropertyChanged("RunTime"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool RunTimeSpecified { - get { - return this.runTimeFieldSpecified; - } - set { - this.runTimeFieldSpecified = value; - this.RaisePropertyChanged("RunTimeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string ClickThroughPageUrl { - get { - return this.clickThroughPageUrlField; - } - set { - this.clickThroughPageUrlField = value; - this.RaisePropertyChanged("ClickThroughPageUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public Thumbnail StaticThumbnail { - get { - return this.staticThumbnailField; - } - set { - this.staticThumbnailField = value; - this.RaisePropertyChanged("StaticThumbnail"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class Thumbnail : object, System.ComponentModel.INotifyPropertyChanged { - - private string urlField; - - private string contentTypeField; - - private uint widthField; - - private bool widthFieldSpecified; - - private uint heightField; - - private bool heightFieldSpecified; - - private uint fileSizeField; - - private bool fileSizeFieldSpecified; - - private uint runTimeField; - - private bool runTimeFieldSpecified; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string ContentType { - get { - return this.contentTypeField; - } - set { - this.contentTypeField = value; - this.RaisePropertyChanged("ContentType"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public uint Width { - get { - return this.widthField; - } - set { - this.widthField = value; - this.RaisePropertyChanged("Width"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool WidthSpecified { - get { - return this.widthFieldSpecified; - } - set { - this.widthFieldSpecified = value; - this.RaisePropertyChanged("WidthSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public uint Height { - get { - return this.heightField; - } - set { - this.heightField = value; - this.RaisePropertyChanged("Height"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool HeightSpecified { - get { - return this.heightFieldSpecified; - } - set { - this.heightFieldSpecified = value; - this.RaisePropertyChanged("HeightSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public uint FileSize { - get { - return this.fileSizeField; - } - set { - this.fileSizeField = value; - this.RaisePropertyChanged("FileSize"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool FileSizeSpecified { - get { - return this.fileSizeFieldSpecified; - } - set { - this.fileSizeFieldSpecified = value; - this.RaisePropertyChanged("FileSizeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public uint RunTime { - get { - return this.runTimeField; - } - set { - this.runTimeField = value; - this.RaisePropertyChanged("RunTime"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool RunTimeSpecified { - get { - return this.runTimeFieldSpecified; - } - set { - this.runTimeFieldSpecified = value; - this.RaisePropertyChanged("RunTimeSpecified"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class VideoResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private uint offsetField; - - private bool offsetFieldSpecified; - - private VideoResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public VideoResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class RelatedSearchResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string urlField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class RelatedSearchResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private RelatedSearchResult[] resultsField; - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=0)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public RelatedSearchResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class ImageResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string mediaUrlField; - - private string urlField; - - private string displayUrlField; - - private uint widthField; - - private bool widthFieldSpecified; - - private uint heightField; - - private bool heightFieldSpecified; - - private uint fileSizeField; - - private bool fileSizeFieldSpecified; - - private string contentTypeField; - - private Thumbnail thumbnailField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string MediaUrl { - get { - return this.mediaUrlField; - } - set { - this.mediaUrlField = value; - this.RaisePropertyChanged("MediaUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string DisplayUrl { - get { - return this.displayUrlField; - } - set { - this.displayUrlField = value; - this.RaisePropertyChanged("DisplayUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public uint Width { - get { - return this.widthField; - } - set { - this.widthField = value; - this.RaisePropertyChanged("Width"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool WidthSpecified { - get { - return this.widthFieldSpecified; - } - set { - this.widthFieldSpecified = value; - this.RaisePropertyChanged("WidthSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public uint Height { - get { - return this.heightField; - } - set { - this.heightField = value; - this.RaisePropertyChanged("Height"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool HeightSpecified { - get { - return this.heightFieldSpecified; - } - set { - this.heightFieldSpecified = value; - this.RaisePropertyChanged("HeightSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=6)] - public uint FileSize { - get { - return this.fileSizeField; - } - set { - this.fileSizeField = value; - this.RaisePropertyChanged("FileSize"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool FileSizeSpecified { - get { - return this.fileSizeFieldSpecified; - } - set { - this.fileSizeFieldSpecified = value; - this.RaisePropertyChanged("FileSizeSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=7)] - public string ContentType { - get { - return this.contentTypeField; - } - set { - this.contentTypeField = value; - this.RaisePropertyChanged("ContentType"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=8)] - public Thumbnail Thumbnail { - get { - return this.thumbnailField; - } - set { - this.thumbnailField = value; - this.RaisePropertyChanged("Thumbnail"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class ImageResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private uint offsetField; - - private bool offsetFieldSpecified; - - private ImageResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public ImageResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class DeepLink : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string urlField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class WebSearchTag : object, System.ComponentModel.INotifyPropertyChanged { - - private string nameField; - - private string valueField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - this.RaisePropertyChanged("Name"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - this.RaisePropertyChanged("Value"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class WebResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private string descriptionField; - - private string urlField; - - private string cacheUrlField; - - private string displayUrlField; - - private string dateTimeField; - - private WebSearchTag[] searchTagsField; - - private DeepLink[] deepLinksField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("Title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string Description { - get { - return this.descriptionField; - } - set { - this.descriptionField = value; - this.RaisePropertyChanged("Description"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string Url { - get { - return this.urlField; - } - set { - this.urlField = value; - this.RaisePropertyChanged("Url"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string CacheUrl { - get { - return this.cacheUrlField; - } - set { - this.cacheUrlField = value; - this.RaisePropertyChanged("CacheUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string DisplayUrl { - get { - return this.displayUrlField; - } - set { - this.displayUrlField = value; - this.RaisePropertyChanged("DisplayUrl"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public string DateTime { - get { - return this.dateTimeField; - } - set { - this.dateTimeField = value; - this.RaisePropertyChanged("DateTime"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=6)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public WebSearchTag[] SearchTags { - get { - return this.searchTagsField; - } - set { - this.searchTagsField = value; - this.RaisePropertyChanged("SearchTags"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=7)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public DeepLink[] DeepLinks { - get { - return this.deepLinksField; - } - set { - this.deepLinksField = value; - this.RaisePropertyChanged("DeepLinks"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class WebResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private uint offsetField; - - private bool offsetFieldSpecified; - - private WebResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public WebResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class SpellResult : object, System.ComponentModel.INotifyPropertyChanged { - - private string valueField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - this.RaisePropertyChanged("Value"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class SpellResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private uint totalField; - - private bool totalFieldSpecified; - - private SpellResult[] resultsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Total { - get { - return this.totalField; - } - set { - this.totalField = value; - this.RaisePropertyChanged("Total"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool TotalSpecified { - get { - return this.totalFieldSpecified; - } - set { - this.totalFieldSpecified = value; - this.RaisePropertyChanged("TotalSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=1)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public SpellResult[] Results { - get { - return this.resultsField; - } - set { - this.resultsField = value; - this.RaisePropertyChanged("Results"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class Query : object, System.ComponentModel.INotifyPropertyChanged { - - private string searchTermsField; - - private string alteredQueryField; - - private string alterationOverrideQueryField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string SearchTerms { - get { - return this.searchTermsField; - } - set { - this.searchTermsField = value; - this.RaisePropertyChanged("SearchTerms"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string AlteredQuery { - get { - return this.alteredQueryField; - } - set { - this.alteredQueryField = value; - this.RaisePropertyChanged("AlteredQuery"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string AlterationOverrideQuery { - get { - return this.alterationOverrideQueryField; - } - set { - this.alterationOverrideQueryField = value; - this.RaisePropertyChanged("AlterationOverrideQuery"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class SearchResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private string versionField; - - private Query queryField; - - private SpellResponse spellField; - - private WebResponse webField; - - private ImageResponse imageField; - - private RelatedSearchResponse relatedSearchField; - - private VideoResponse videoField; - - private InstantAnswerResponse instantAnswerField; - - private NewsResponse newsField; - - private MobileWebResponse mobileWebField; - - private Error[] errorsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string Version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("Version"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public Query Query { - get { - return this.queryField; - } - set { - this.queryField = value; - this.RaisePropertyChanged("Query"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public SpellResponse Spell { - get { - return this.spellField; - } - set { - this.spellField = value; - this.RaisePropertyChanged("Spell"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public WebResponse Web { - get { - return this.webField; - } - set { - this.webField = value; - this.RaisePropertyChanged("Web"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public ImageResponse Image { - get { - return this.imageField; - } - set { - this.imageField = value; - this.RaisePropertyChanged("Image"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public RelatedSearchResponse RelatedSearch { - get { - return this.relatedSearchField; - } - set { - this.relatedSearchField = value; - this.RaisePropertyChanged("RelatedSearch"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=6)] - public VideoResponse Video { - get { - return this.videoField; - } - set { - this.videoField = value; - this.RaisePropertyChanged("Video"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=7)] - public InstantAnswerResponse InstantAnswer { - get { - return this.instantAnswerField; - } - set { - this.instantAnswerField = value; - this.RaisePropertyChanged("InstantAnswer"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=8)] - public NewsResponse News { - get { - return this.newsField; - } - set { - this.newsField = value; - this.RaisePropertyChanged("News"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=9)] - public MobileWebResponse MobileWeb { - get { - return this.mobileWebField; - } - set { - this.mobileWebField = value; - this.RaisePropertyChanged("MobileWeb"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=10)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public Error[] Errors { - get { - return this.errorsField; - } - set { - this.errorsField = value; - this.RaisePropertyChanged("Errors"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class TranslationRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private string sourceLanguageField; - - private string targetLanguageField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string SourceLanguage { - get { - return this.sourceLanguageField; - } - set { - this.sourceLanguageField = value; - this.RaisePropertyChanged("SourceLanguage"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string TargetLanguage { - get { - return this.targetLanguageField; - } - set { - this.targetLanguageField = value; - this.RaisePropertyChanged("TargetLanguage"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class MobileWebRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private bool countFieldSpecified; - - private MobileWebSearchOption[] optionsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CountSpecified { - get { - return this.countFieldSpecified; - } - set { - this.countFieldSpecified = value; - this.RaisePropertyChanged("CountSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - public MobileWebSearchOption[] Options { - get { - return this.optionsField; - } - set { - this.optionsField = value; - this.RaisePropertyChanged("Options"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum MobileWebSearchOption { - - /// - DisableHostCollapsing, - - /// - DisableQueryAlterations, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class NewsRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private string locationOverrideField; - - private string categoryField; - - private NewsSortOption sortByField; - - private bool sortByFieldSpecified; - - public NewsRequest() { - this.countField = ((uint)(10)); - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - [System.ComponentModel.DefaultValueAttribute(typeof(uint), "10")] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string LocationOverride { - get { - return this.locationOverrideField; - } - set { - this.locationOverrideField = value; - this.RaisePropertyChanged("LocationOverride"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public string Category { - get { - return this.categoryField; - } - set { - this.categoryField = value; - this.RaisePropertyChanged("Category"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public NewsSortOption SortBy { - get { - return this.sortByField; - } - set { - this.sortByField = value; - this.RaisePropertyChanged("SortBy"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SortBySpecified { - get { - return this.sortByFieldSpecified; - } - set { - this.sortByFieldSpecified = value; - this.RaisePropertyChanged("SortBySpecified"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum NewsSortOption { - - /// - Relevance, - - /// - Date, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class VideoRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private bool countFieldSpecified; - - private string[] filtersField; - - private VideoSortOption sortByField; - - private bool sortByFieldSpecified; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CountSpecified { - get { - return this.countFieldSpecified; - } - set { - this.countFieldSpecified = value; - this.RaisePropertyChanged("CountSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public string[] Filters { - get { - return this.filtersField; - } - set { - this.filtersField = value; - this.RaisePropertyChanged("Filters"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public VideoSortOption SortBy { - get { - return this.sortByField; - } - set { - this.sortByField = value; - this.RaisePropertyChanged("SortBy"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SortBySpecified { - get { - return this.sortByFieldSpecified; - } - set { - this.sortByFieldSpecified = value; - this.RaisePropertyChanged("SortBySpecified"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum VideoSortOption { - - /// - Relevance, - - /// - Date, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class PhonebookRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private bool countFieldSpecified; - - private string fileTypeField; - - private PhonebookSortOption sortByField; - - private bool sortByFieldSpecified; - - private string locIdField; - - private string categoryField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CountSpecified { - get { - return this.countFieldSpecified; - } - set { - this.countFieldSpecified = value; - this.RaisePropertyChanged("CountSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string FileType { - get { - return this.fileTypeField; - } - set { - this.fileTypeField = value; - this.RaisePropertyChanged("FileType"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public PhonebookSortOption SortBy { - get { - return this.sortByField; - } - set { - this.sortByField = value; - this.RaisePropertyChanged("SortBy"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SortBySpecified { - get { - return this.sortByFieldSpecified; - } - set { - this.sortByFieldSpecified = value; - this.RaisePropertyChanged("SortBySpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=4)] - public string LocId { - get { - return this.locIdField; - } - set { - this.locIdField = value; - this.RaisePropertyChanged("LocId"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=5)] - public string Category { - get { - return this.categoryField; - } - set { - this.categoryField = value; - this.RaisePropertyChanged("Category"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public enum PhonebookSortOption { - - /// - Default, - - /// - Relevance, - - /// - Distance, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search")] - public partial class ImageRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private uint offsetField; - - private bool offsetFieldSpecified; - - private uint countField; - - private bool countFieldSpecified; - - private string[] filtersField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public uint Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - this.RaisePropertyChanged("Offset"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - this.RaisePropertyChanged("OffsetSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public uint Count { - get { - return this.countField; - } - set { - this.countField = value; - this.RaisePropertyChanged("Count"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CountSpecified { - get { - return this.countFieldSpecified; - } - set { - this.countFieldSpecified = value; - this.RaisePropertyChanged("CountSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=2)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public string[] Filters { - get { - return this.filtersField; - } - set { - this.filtersField = value; - this.RaisePropertyChanged("Filters"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName="SearchRequest", WrapperNamespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search", IsWrapped=true)] - public partial class SearchRequest1 { - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search", Order=0)] - public SharpGen.Bing.SearchRequest parameters; - - public SearchRequest1() { - } - - public SearchRequest1(SharpGen.Bing.SearchRequest parameters) { - this.parameters = parameters; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName="SearchResponse", WrapperNamespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search", IsWrapped=true)] - public partial class SearchResponse1 { - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemas.microsoft.com/LiveSearch/2008/03/Search", Order=0)] - public SharpGen.Bing.SearchResponse parameters; - - public SearchResponse1() { - } - - public SearchResponse1(SharpGen.Bing.SearchResponse parameters) { - this.parameters = parameters; - } - } - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public interface BingPortTypeChannel : SharpGen.Bing.BingPortType, System.ServiceModel.IClientChannel { - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public partial class BingPortTypeClient : System.ServiceModel.ClientBase, SharpGen.Bing.BingPortType { - - public BingPortTypeClient() { - } - - public BingPortTypeClient(string endpointConfigurationName) : - base(endpointConfigurationName) { - } - - public BingPortTypeClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public BingPortTypeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public BingPortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : - base(binding, remoteAddress) { - } - - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - SharpGen.Bing.SearchResponse1 SharpGen.Bing.BingPortType.Search(SharpGen.Bing.SearchRequest1 request) { - return base.Channel.Search(request); - } - - public SharpGen.Bing.SearchResponse Search(SharpGen.Bing.SearchRequest parameters) { - SharpGen.Bing.SearchRequest1 inValue = new SharpGen.Bing.SearchRequest1(); - inValue.parameters = parameters; - SharpGen.Bing.SearchResponse1 retVal = ((SharpGen.Bing.BingPortType)(this)).Search(inValue); - return retVal.parameters; - } - } -} diff --git a/Source/Tools/SharpGen/Service References/Bing/Reference.svcmap b/Source/Tools/SharpGen/Service References/Bing/Reference.svcmap deleted file mode 100644 index 621095471..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/Reference.svcmap +++ /dev/null @@ -1,30 +0,0 @@ - - - - false - true - - false - false - false - - - true - Auto - true - true - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse.datasource b/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse.datasource deleted file mode 100644 index 71557c20e..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpCore.Bing.SearchResponse, Service References.Bing.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse1.datasource b/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse1.datasource deleted file mode 100644 index aa8021ef3..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/SharpGen.Bing.SearchResponse1.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpGen.Bing.SearchResponse, Service References.Bing.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/configuration.svcinfo b/Source/Tools/SharpGen/Service References/Bing/configuration.svcinfo deleted file mode 100644 index e793a15b4..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/configuration.svcinfo +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/configuration91.svcinfo b/Source/Tools/SharpGen/Service References/Bing/configuration91.svcinfo deleted file mode 100644 index df0add3a8..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/configuration91.svcinfo +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - BingPortBinding - - - - - - - - - - - - - - - - - - - - - StrongWildcard - - - - - - 65536 - - - - - - - - - System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - System.Text.UTF8Encoding - - - Buffered - - - - - - Text - - - System.ServiceModel.Configuration.BasicHttpSecurityElement - - - None - - - System.ServiceModel.Configuration.HttpTransportSecurityElement - - - None - - - None - - - System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement - - - Never - - - TransportSelected - - - (Collection) - - - - - - System.ServiceModel.Configuration.BasicHttpMessageSecurityElement - - - UserName - - - Default - - - - - - - - - http://api.bing.net:80/soap.asmx - - - - - - basicHttpBinding - - - BingPortBinding - - - Bing.BingPortType - - - System.ServiceModel.Configuration.AddressHeaderCollectionElement - - - <Header /> - - - System.ServiceModel.Configuration.IdentityElement - - - System.ServiceModel.Configuration.UserPrincipalNameElement - - - - - - System.ServiceModel.Configuration.ServicePrincipalNameElement - - - - - - System.ServiceModel.Configuration.DnsElement - - - - - - System.ServiceModel.Configuration.RsaElement - - - - - - System.ServiceModel.Configuration.CertificateElement - - - - - - System.ServiceModel.Configuration.CertificateReferenceElement - - - My - - - LocalMachine - - - FindBySubjectDistinguishedName - - - - - - False - - - BingPort - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/Bing/search.wsdl b/Source/Tools/SharpGen/Service References/Bing/search.wsdl deleted file mode 100644 index 67f14b037..000000000 --- a/Source/Tools/SharpGen/Service References/Bing/search.wsdl +++ /dev/null @@ -1,490 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/ContentService.wsdl b/Source/Tools/SharpGen/Service References/MTPS/ContentService.wsdl deleted file mode 100644 index c37f64173..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/ContentService.wsdl +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/Reference.cs b/Source/Tools/SharpGen/Service References/MTPS/Reference.cs deleted file mode 100644 index 262db0abc..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/Reference.cs +++ /dev/null @@ -1,1125 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18213 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace SharpGen.MTPS { - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication/2006/09/common")] - public partial class mtpsFaultDetailType : object, System.ComponentModel.INotifyPropertyChanged { - - private string eventIdField; - - private string sourceField; - - private string helpLinkField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string eventId { - get { - return this.eventIdField; - } - set { - this.eventIdField = value; - this.RaisePropertyChanged("eventId"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public string source { - get { - return this.sourceField; - } - set { - this.sourceField = value; - this.RaisePropertyChanged("source"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public string helpLink { - get { - return this.helpLinkField; - } - set { - this.helpLinkField = value; - this.RaisePropertyChanged("helpLink"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public partial class availableVersionAndLocale : object, System.ComponentModel.INotifyPropertyChanged { - - private string localeField; - - private string versionField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=0)] - public string locale { - get { - return this.localeField; - } - set { - this.localeField = value; - this.RaisePropertyChanged("locale"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=1)] - public string version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("version"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public partial class requestedDocument : object, System.ComponentModel.INotifyPropertyChanged { - - private string selectorField; - - private documentTypes typeField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string selector { - get { - return this.selectorField; - } - set { - this.selectorField = value; - this.RaisePropertyChanged("selector"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public documentTypes type { - get { - return this.typeField; - } - set { - this.typeField = value; - this.RaisePropertyChanged("type"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public enum documentTypes { - - /// - primary, - - /// - common, - - /// - image, - - /// - feature, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:mtpg-com:mtps/2004/1/primary")] - public partial class primary : object, System.ComponentModel.INotifyPropertyChanged { - - private System.Xml.XmlElement anyField; - - private string primaryFormatField; - - private string locationField; - - /// - [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] - public System.Xml.XmlElement Any { - get { - return this.anyField; - } - set { - this.anyField = value; - this.RaisePropertyChanged("Any"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="urn:mtpg-com:mtps/2004/1/primary/category")] - public string primaryFormat { - get { - return this.primaryFormatField; - } - set { - this.primaryFormatField = value; - this.RaisePropertyChanged("primaryFormat"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string location { - get { - return this.locationField; - } - set { - this.locationField = value; - this.RaisePropertyChanged("location"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:mtpg-com:mtps/2004/1/image")] - public partial class image : object, System.ComponentModel.INotifyPropertyChanged { - - private string nameField; - - private string imageFormatField; - - private string locationField; - - private byte[] valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string name { - get { - return this.nameField; - } - set { - this.nameField = value; - this.RaisePropertyChanged("name"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="urn:mtpg-com:mtps/2004/1/image/category")] - public string imageFormat { - get { - return this.imageFormatField; - } - set { - this.imageFormatField = value; - this.RaisePropertyChanged("imageFormat"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string location { - get { - return this.locationField; - } - set { - this.locationField = value; - this.RaisePropertyChanged("location"); - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute(DataType="base64Binary")] - public byte[] Value { - get { - return this.valueField; - } - set { - this.valueField = value; - this.RaisePropertyChanged("Value"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:mtpg-com:mtps/2004/1/common")] - public partial class common : object, System.ComponentModel.INotifyPropertyChanged { - - private System.Xml.XmlElement[] anyField; - - private string commonFormatField; - - private string locationField; - - /// - [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] - public System.Xml.XmlElement[] Any { - get { - return this.anyField; - } - set { - this.anyField = value; - this.RaisePropertyChanged("Any"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="urn:mtpg-com:mtps/2004/1/common/category")] - public string commonFormat { - get { - return this.commonFormatField; - } - set { - this.commonFormatField = value; - this.RaisePropertyChanged("commonFormat"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string location { - get { - return this.locationField; - } - set { - this.locationField = value; - this.RaisePropertyChanged("location"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:mtpg-com:mtps/2004/1/feature")] - public partial class feature : object, System.ComponentModel.INotifyPropertyChanged { - - private System.Xml.XmlElement[] anyField; - - private string featureFormatField; - - private string locationField; - - /// - [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] - public System.Xml.XmlElement[] Any { - get { - return this.anyField; - } - set { - this.anyField = value; - this.RaisePropertyChanged("Any"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="urn:mtpg-com:mtps/2004/1/feature/category")] - public string featureFormat { - get { - return this.featureFormatField; - } - set { - this.featureFormatField = value; - this.RaisePropertyChanged("featureFormat"); - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string location { - get { - return this.locationField; - } - set { - this.locationField = value; - this.RaisePropertyChanged("location"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace="urn:msdn-com:public-content-syndication", ConfigurationName="MTPS.ContentServicePortType")] - public interface ContentServicePortType { - - // CODEGEN: Generating message contract since the operation GetContent is neither RPC nor document wrapped. - [System.ServiceModel.OperationContractAttribute(Action="urn:msdn-com:public-content-syndication/GetContent", ReplyAction="*")] - [System.ServiceModel.FaultContractAttribute(typeof(SharpGen.MTPS.mtpsFaultDetailType), Action="urn:msdn-com:public-content-syndication/GetContent", Name="mtpsFaultDetail")] - [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(requestedDocument[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(primary[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(image[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(common[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(feature[]))] - SharpGen.MTPS.GetContentResponse1 GetContent(SharpGen.MTPS.GetContentRequest1 request); - - // CODEGEN: Generating message contract since the operation GetNavigationPaths is neither RPC nor document wrapped. - [System.ServiceModel.OperationContractAttribute(Action="urn:msdn-com:public-content-syndication/GetNavigationPaths", ReplyAction="*")] - [System.ServiceModel.FaultContractAttribute(typeof(SharpGen.MTPS.mtpsFaultDetailType), Action="urn:msdn-com:public-content-syndication/GetNavigationPaths", Name="mtpsFaultDetail")] - [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(requestedDocument[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(primary[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(image[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(common[]))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(feature[]))] - SharpGen.MTPS.GetNavigationPathsResponse1 GetNavigationPaths(SharpGen.MTPS.GetNavigationPathsRequest1 request); - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication/2006/09/common")] - public partial class appId : object, System.ComponentModel.INotifyPropertyChanged { - - private string valueField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string value { - get { - return this.valueField; - } - set { - this.valueField = value; - this.RaisePropertyChanged("value"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:msdn-com:public-content-syndication")] - public partial class getContentRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private string contentIdentifierField; - - private string localeField; - - private string versionField; - - private requestedDocument[] requestedDocumentsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string contentIdentifier { - get { - return this.contentIdentifierField; - } - set { - this.contentIdentifierField = value; - this.RaisePropertyChanged("contentIdentifier"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=1)] - public string locale { - get { - return this.localeField; - } - set { - this.localeField = value; - this.RaisePropertyChanged("locale"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=2)] - public string version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("version"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=3)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public requestedDocument[] requestedDocuments { - get { - return this.requestedDocumentsField; - } - set { - this.requestedDocumentsField = value; - this.RaisePropertyChanged("requestedDocuments"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:msdn-com:public-content-syndication")] - public partial class getContentResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private string contentIdField; - - private string contentGuidField; - - private string contentAliasField; - - private string localeField; - - private string versionField; - - private availableVersionAndLocale[] availableVersionsAndLocalesField; - - private primary[] primaryDocumentsField; - - private image[] imageDocumentsField; - - private common[] commonDocumentsField; - - private feature[] featureDocumentsField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=0)] - public string contentId { - get { - return this.contentIdField; - } - set { - this.contentIdField = value; - this.RaisePropertyChanged("contentId"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=1)] - public string contentGuid { - get { - return this.contentGuidField; - } - set { - this.contentGuidField = value; - this.RaisePropertyChanged("contentGuid"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=2)] - public string contentAlias { - get { - return this.contentAliasField; - } - set { - this.contentAliasField = value; - this.RaisePropertyChanged("contentAlias"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=3)] - public string locale { - get { - return this.localeField; - } - set { - this.localeField = value; - this.RaisePropertyChanged("locale"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=4)] - public string version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("version"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=5)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public availableVersionAndLocale[] availableVersionsAndLocales { - get { - return this.availableVersionsAndLocalesField; - } - set { - this.availableVersionsAndLocalesField = value; - this.RaisePropertyChanged("availableVersionsAndLocales"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=6)] - [System.Xml.Serialization.XmlArrayItemAttribute("primary", Namespace="urn:mtpg-com:mtps/2004/1/primary", IsNullable=false)] - public primary[] primaryDocuments { - get { - return this.primaryDocumentsField; - } - set { - this.primaryDocumentsField = value; - this.RaisePropertyChanged("primaryDocuments"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=7)] - [System.Xml.Serialization.XmlArrayItemAttribute("image", Namespace="urn:mtpg-com:mtps/2004/1/image", IsNullable=false)] - public image[] imageDocuments { - get { - return this.imageDocumentsField; - } - set { - this.imageDocumentsField = value; - this.RaisePropertyChanged("imageDocuments"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=8)] - [System.Xml.Serialization.XmlArrayItemAttribute("common", Namespace="urn:mtpg-com:mtps/2004/1/common", IsNullable=false)] - public common[] commonDocuments { - get { - return this.commonDocumentsField; - } - set { - this.commonDocumentsField = value; - this.RaisePropertyChanged("commonDocuments"); - } - } - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=9)] - [System.Xml.Serialization.XmlArrayItemAttribute("feature", Namespace="urn:mtpg-com:mtps/2004/1/feature", IsNullable=false)] - public feature[] featureDocuments { - get { - return this.featureDocumentsField; - } - set { - this.featureDocumentsField = value; - this.RaisePropertyChanged("featureDocuments"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] - public partial class GetContentRequest1 { - - [System.ServiceModel.MessageHeaderAttribute(Namespace="urn:msdn-com:public-content-syndication/2006/09/common")] - public SharpGen.MTPS.appId appId; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="urn:msdn-com:public-content-syndication", Order=0)] - public SharpGen.MTPS.getContentRequest getContentRequest; - - public GetContentRequest1() { - } - - public GetContentRequest1(SharpGen.MTPS.appId appId, SharpGen.MTPS.getContentRequest getContentRequest) { - this.appId = appId; - this.getContentRequest = getContentRequest; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] - public partial class GetContentResponse1 { - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="urn:msdn-com:public-content-syndication", Order=0)] - public SharpGen.MTPS.getContentResponse getContentResponse; - - public GetContentResponse1() { - } - - public GetContentResponse1(SharpGen.MTPS.getContentResponse getContentResponse) { - this.getContentResponse = getContentResponse; - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:msdn-com:public-content-syndication")] - public partial class getNavigationPathsRequest : object, System.ComponentModel.INotifyPropertyChanged { - - private navigationKey rootField; - - private navigationKey targetField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public navigationKey root { - get { - return this.rootField; - } - set { - this.rootField = value; - this.RaisePropertyChanged("root"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public navigationKey target { - get { - return this.targetField; - } - set { - this.targetField = value; - this.RaisePropertyChanged("target"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public partial class navigationKey : object, System.ComponentModel.INotifyPropertyChanged { - - private string contentIdField; - - private string localeField; - - private string versionField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=0)] - public string contentId { - get { - return this.contentIdField; - } - set { - this.contentIdField = value; - this.RaisePropertyChanged("contentId"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=1)] - public string locale { - get { - return this.localeField; - } - set { - this.localeField = value; - this.RaisePropertyChanged("locale"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Namespace="urn:mtpg-com:mtps/2004/1/key", Order=2)] - public string version { - get { - return this.versionField; - } - set { - this.versionField = value; - this.RaisePropertyChanged("version"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:msdn-com:public-content-syndication")] - public partial class getNavigationPathsResponse : object, System.ComponentModel.INotifyPropertyChanged { - - private navigationPath[] navigationPathsField; - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=0)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public navigationPath[] navigationPaths { - get { - return this.navigationPathsField; - } - set { - this.navigationPathsField = value; - this.RaisePropertyChanged("navigationPaths"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public partial class navigationPath : object, System.ComponentModel.INotifyPropertyChanged { - - private navigationPathNode[] navigationPathNodesField; - - /// - [System.Xml.Serialization.XmlArrayAttribute(Order=0)] - [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] - public navigationPathNode[] navigationPathNodes { - get { - return this.navigationPathNodesField; - } - set { - this.navigationPathNodesField = value; - this.RaisePropertyChanged("navigationPathNodes"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18213")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:msdn-com:public-content-syndication")] - public partial class navigationPathNode : object, System.ComponentModel.INotifyPropertyChanged { - - private string titleField; - - private bool isPhantomField; - - private bool isPhantomFieldSpecified; - - private navigationKey navigationNodeKeyField; - - private navigationKey contentNodeKeyField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=0)] - public string title { - get { - return this.titleField; - } - set { - this.titleField = value; - this.RaisePropertyChanged("title"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=1)] - public bool isPhantom { - get { - return this.isPhantomField; - } - set { - this.isPhantomField = value; - this.RaisePropertyChanged("isPhantom"); - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool isPhantomSpecified { - get { - return this.isPhantomFieldSpecified; - } - set { - this.isPhantomFieldSpecified = value; - this.RaisePropertyChanged("isPhantomSpecified"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=2)] - public navigationKey navigationNodeKey { - get { - return this.navigationNodeKeyField; - } - set { - this.navigationNodeKeyField = value; - this.RaisePropertyChanged("navigationNodeKey"); - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(Order=3)] - public navigationKey contentNodeKey { - get { - return this.contentNodeKeyField; - } - set { - this.contentNodeKeyField = value; - this.RaisePropertyChanged("contentNodeKey"); - } - } - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] - public partial class GetNavigationPathsRequest1 { - - [System.ServiceModel.MessageHeaderAttribute(Namespace="urn:msdn-com:public-content-syndication/2006/09/common")] - public SharpGen.MTPS.appId appId; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="urn:msdn-com:public-content-syndication", Order=0)] - public SharpGen.MTPS.getNavigationPathsRequest getNavigationPathsRequest; - - public GetNavigationPathsRequest1() { - } - - public GetNavigationPathsRequest1(SharpGen.MTPS.appId appId, SharpGen.MTPS.getNavigationPathsRequest getNavigationPathsRequest) { - this.appId = appId; - this.getNavigationPathsRequest = getNavigationPathsRequest; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] - public partial class GetNavigationPathsResponse1 { - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace="urn:msdn-com:public-content-syndication", Order=0)] - public SharpGen.MTPS.getNavigationPathsResponse getNavigationPathsResponse; - - public GetNavigationPathsResponse1() { - } - - public GetNavigationPathsResponse1(SharpGen.MTPS.getNavigationPathsResponse getNavigationPathsResponse) { - this.getNavigationPathsResponse = getNavigationPathsResponse; - } - } - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public interface ContentServicePortTypeChannel : SharpGen.MTPS.ContentServicePortType, System.ServiceModel.IClientChannel { - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public partial class ContentServicePortTypeClient : System.ServiceModel.ClientBase, SharpGen.MTPS.ContentServicePortType { - - public ContentServicePortTypeClient() { - } - - public ContentServicePortTypeClient(string endpointConfigurationName) : - base(endpointConfigurationName) { - } - - public ContentServicePortTypeClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public ContentServicePortTypeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public ContentServicePortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : - base(binding, remoteAddress) { - } - - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - SharpGen.MTPS.GetContentResponse1 SharpGen.MTPS.ContentServicePortType.GetContent(SharpGen.MTPS.GetContentRequest1 request) { - return base.Channel.GetContent(request); - } - - public SharpGen.MTPS.getContentResponse GetContent(SharpGen.MTPS.appId appId, SharpGen.MTPS.getContentRequest getContentRequest) { - SharpGen.MTPS.GetContentRequest1 inValue = new SharpGen.MTPS.GetContentRequest1(); - inValue.appId = appId; - inValue.getContentRequest = getContentRequest; - SharpGen.MTPS.GetContentResponse1 retVal = ((SharpGen.MTPS.ContentServicePortType)(this)).GetContent(inValue); - return retVal.getContentResponse; - } - - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - SharpGen.MTPS.GetNavigationPathsResponse1 SharpGen.MTPS.ContentServicePortType.GetNavigationPaths(SharpGen.MTPS.GetNavigationPathsRequest1 request) { - return base.Channel.GetNavigationPaths(request); - } - - public SharpGen.MTPS.getNavigationPathsResponse GetNavigationPaths(SharpGen.MTPS.appId appId, SharpGen.MTPS.getNavigationPathsRequest getNavigationPathsRequest) { - SharpGen.MTPS.GetNavigationPathsRequest1 inValue = new SharpGen.MTPS.GetNavigationPathsRequest1(); - inValue.appId = appId; - inValue.getNavigationPathsRequest = getNavigationPathsRequest; - SharpGen.MTPS.GetNavigationPathsResponse1 retVal = ((SharpGen.MTPS.ContentServicePortType)(this)).GetNavigationPaths(inValue); - return retVal.getNavigationPathsResponse; - } - } -} diff --git a/Source/Tools/SharpGen/Service References/MTPS/Reference.svcmap b/Source/Tools/SharpGen/Service References/MTPS/Reference.svcmap deleted file mode 100644 index 22fa6aaab..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/Reference.svcmap +++ /dev/null @@ -1,44 +0,0 @@ - - - - false - true - - false - false - false - - - true - Auto - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse.datasource b/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse.datasource deleted file mode 100644 index c5e82c3c4..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpCore.MTPS.getContentResponse, Service References.MTPS.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse1.datasource b/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse1.datasource deleted file mode 100644 index 54f906539..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getContentResponse1.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpGen.MTPS.getContentResponse, Service References.MTPS.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse.datasource b/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse.datasource deleted file mode 100644 index 54cf35599..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpCore.MTPS.getNavigationPathsResponse, Service References.MTPS.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse1.datasource b/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse1.datasource deleted file mode 100644 index 1447264cc..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/SharpGen.MTPS.getNavigationPathsResponse1.datasource +++ /dev/null @@ -1,10 +0,0 @@ - - - - SharpGen.MTPS.getNavigationPathsResponse, Service References.MTPS.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms.xsd deleted file mode 100644 index 75374db7a..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms.xsd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms1.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms1.xsd deleted file mode 100644 index 3add45f48..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms1.xsd +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms2.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms2.xsd deleted file mode 100644 index 231f63258..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms2.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms3.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms3.xsd deleted file mode 100644 index e93114c99..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms3.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms4.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms4.xsd deleted file mode 100644 index f2c9e46c8..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms4.xsd +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms5.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms5.xsd deleted file mode 100644 index aae5852fa..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms5.xsd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms6.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms6.xsd deleted file mode 100644 index e6dde4987..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms6.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms7.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms7.xsd deleted file mode 100644 index f928db10d..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms7.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/atoms8.xsd b/Source/Tools/SharpGen/Service References/MTPS/atoms8.xsd deleted file mode 100644 index 5746dedca..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/atoms8.xsd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/configuration.svcinfo b/Source/Tools/SharpGen/Service References/MTPS/configuration.svcinfo deleted file mode 100644 index 042a13dc9..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/configuration.svcinfo +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/configuration91.svcinfo b/Source/Tools/SharpGen/Service References/MTPS/configuration91.svcinfo deleted file mode 100644 index afb439ebd..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/configuration91.svcinfo +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - ContentServiceBinding - - - - - - - - - - - - - - - - - - - - - StrongWildcard - - - - - - 65536 - - - - - - - - - System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - System.Text.UTF8Encoding - - - Buffered - - - - - - Text - - - System.ServiceModel.Configuration.BasicHttpSecurityElement - - - None - - - System.ServiceModel.Configuration.HttpTransportSecurityElement - - - None - - - None - - - System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement - - - Never - - - TransportSelected - - - (Collection) - - - - - - System.ServiceModel.Configuration.BasicHttpMessageSecurityElement - - - UserName - - - Default - - - - - - - - - http://services.msdn.microsoft.com/ContentServices/ContentService.asmx - - - - - - basicHttpBinding - - - ContentServiceBinding - - - MTPS.ContentServicePortType - - - System.ServiceModel.Configuration.AddressHeaderCollectionElement - - - <Header /> - - - System.ServiceModel.Configuration.IdentityElement - - - System.ServiceModel.Configuration.UserPrincipalNameElement - - - - - - System.ServiceModel.Configuration.ServicePrincipalNameElement - - - - - - System.ServiceModel.Configuration.DnsElement - - - - - - System.ServiceModel.Configuration.RsaElement - - - - - - System.ServiceModel.Configuration.CertificateElement - - - - - - System.ServiceModel.Configuration.CertificateReferenceElement - - - My - - - LocalMachine - - - FindBySubjectDistinguishedName - - - - - - False - - - ContentService - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/default.xsd b/Source/Tools/SharpGen/Service References/MTPS/default.xsd deleted file mode 100644 index d5888693a..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/default.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/default1.xsd b/Source/Tools/SharpGen/Service References/MTPS/default1.xsd deleted file mode 100644 index 00291d126..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/default1.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/default2.xsd b/Source/Tools/SharpGen/Service References/MTPS/default2.xsd deleted file mode 100644 index 2d8e742cd..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/default2.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/default3.xsd b/Source/Tools/SharpGen/Service References/MTPS/default3.xsd deleted file mode 100644 index cc0e10b51..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/default3.xsd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/Service References/MTPS/urn_msdn_com_public_content_syndication_2006_09_common.xsd b/Source/Tools/SharpGen/Service References/MTPS/urn_msdn_com_public_content_syndication_2006_09_common.xsd deleted file mode 100644 index 10a8618ee..000000000 --- a/Source/Tools/SharpGen/Service References/MTPS/urn_msdn_com_public_content_syndication_2006_09_common.xsd +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/SharpGen.csproj b/Source/Tools/SharpGen/SharpGen.csproj deleted file mode 100644 index 8627a3889..000000000 --- a/Source/Tools/SharpGen/SharpGen.csproj +++ /dev/null @@ -1,340 +0,0 @@ - - - - - Debug - Net40 - 8.0.30703 - 2.0 - {31F85A16-CB01-4456-BE3C-76E9FF3A1343} - Exe - Properties - SharpGen - SharpGen - v4.0 - - - 512 - - - true - Bin\Debug\ - TRACE;DEBUG - full - x86 - prompt - false - false - true - false - On - - - Bin\Release\ - TRACE - true - pdbonly - x86 - prompt - false - false - true - false - On - - - - - SharpGen.Program - - - SharpGen.ico - - - $(DefineConstants);STORE_APP - - - - False - ..\..\..\External\HtmlAgilityPack\HtmlAgilityPack.dll - - - False - ..\..\..\External\ICSharpCode.SharpZipLib\ICSharpCode.SharpZipLib.dll - - - - - ..\..\..\External\Mono.Options\Mono.Options.dll - - - - - - - - - - - - - - - - Properties\SharedAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - ProgressForm.cs - - - - - - - - - - - - ProgressForm.cs - - - MyTemplate.cs - - - - - - - - Structs.cs - - - - - Interfaces.cs - - - - - MyTemplate.cs - - - - - Interfaces.cs - - - - - Interfaces.cs - - - - - MyTemplate.cs - - - - - - - - True - True - Reference.svcmap - - - True - True - Reference.svcmap - - - - - - - - - Reference.svcmap - - - Reference.svcmap - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - - Designer - - - Designer - - - Designer - - - Designer - - - Reference.svcmap - - - Reference.svcmap - - - Reference.svcmap - - - Reference.svcmap - - - Designer - - - - - - - - - - - - - - - WCF Proxy Generator - Reference.cs - - - - - - - - - - - WCF Proxy Generator - Reference.cs - - - - - - \ No newline at end of file diff --git a/Source/Tools/SharpGen/SharpGen.ico b/Source/Tools/SharpGen/SharpGen.ico deleted file mode 100644 index 327c12123..000000000 Binary files a/Source/Tools/SharpGen/SharpGen.ico and /dev/null differ diff --git a/Source/Tools/SharpGen/Templates/Enumerations.tt b/Source/Tools/SharpGen/Templates/Enumerations.tt deleted file mode 100644 index 59734ca4a..000000000 --- a/Source/Tools/SharpGen/Templates/Enumerations.tt +++ /dev/null @@ -1,54 +0,0 @@ -<#@ include file="Header.tt" #> - -#if <#= Generator.AppType #> -namespace <#= Namespace.Name #> { - -#pragma warning disable 419 -#pragma warning disable 1587 -#pragma warning disable 1574 - -<# -foreach (var sharpEnum in Namespace.Enums) -{ -#> - -<# - foreach (var docItem in sharpEnum.DocItems) { -#> - /// <#= docItem #> -<# - } - if (sharpEnum.IsFlag) { -#> - [Flags] -<# } -#> - <#= sharpEnum.VisibilityName #>enum <#= sharpEnum.Name #> : <#= sharpEnum.TypeName #> { -<# - foreach (var sharpEnumItem in sharpEnum.EnumItems) { -#> - -<# - foreach (var docItem in sharpEnumItem.DocItems) { -#> - /// <#= docItem #> -<# - } - if (string.IsNullOrEmpty(sharpEnumItem.Value)) { -#> - <#= sharpEnumItem.Name #>, -<# } - else { -#> - <#= sharpEnumItem.Name #> = unchecked((<#= sharpEnum.TypeName #>)<#= sharpEnumItem.Value#>), -<# - } - } -#> - } -<# -}#> -} -#endif -<#+ -#> \ No newline at end of file diff --git a/Source/Tools/SharpGen/Templates/Functions.tt b/Source/Tools/SharpGen/Templates/Functions.tt deleted file mode 100644 index 88747dfe4..000000000 --- a/Source/Tools/SharpGen/Templates/Functions.tt +++ /dev/null @@ -1,99 +0,0 @@ -<#@ include file="Header.tt" #> - -#if <#= Generator.AppType #> -namespace <#= Namespace.Name #> { - -#pragma warning disable 419 -#pragma warning disable 1587 -#pragma warning disable 1574 - - -<# -foreach (var sharpFunctionGroup in Namespace.Classes) -{ - foreach (var docItem in sharpFunctionGroup.DocItems) { -#> - /// <#= docItem #> -<# }#> - <#= sharpFunctionGroup.VisibilityName #> partial class <#= sharpFunctionGroup.Name #> { -<# - - // -------------------------------------------------------------------------------------------------- - // Handle Inner Constants - // -------------------------------------------------------------------------------------------------- - foreach (var sharpConstant in sharpFunctionGroup.Variables) { -#> - /// Constant <#= sharpConstant.Name #>. - /// <#= sharpConstant.CppElementName #> - <#= sharpConstant.VisibilityName #><#= sharpConstant.TypeName #> <#= sharpConstant.Name #> = <#= sharpConstant.Value #>; -<# - } - - // Prepare for Custom DLL import - var dllNames = sharpFunctionGroup.GetFunctionDllNames(); - - if (dllNames.Count > 0) { -#> - /// - /// DLLs loaders - /// -<# - - for(int i = 0; i < dllNames.Count; i++) { -#> - private static IntPtr DllHandle<#= i #>_; - private static IntPtr DllHandle<#= i #> { - get { - if (DllHandle<#= i #>_ == IntPtr.Zero) { - DllHandle<#= i #>_ = SharpDX.Utilities.LoadLibrary(<#= dllNames[i] #>); - } - return DllHandle<#= i #>_; - } - } -<# - } - } - - foreach (var sharpFunction in sharpFunctionGroup.Functions) { - int indexDll = dllNames.IndexOf(sharpFunction.DllName); - ProcessMethod(sharpFunction); - if (sharpFunction.UseDllImport) { - var interopFunction = sharpFunction.Interop; -#> - [DllImport(<#= sharpFunction.DllName #>, EntryPoint = "<#= sharpFunction.CppElementName #>", CallingConvention = CallingConvention.<#= sharpFunction.CallingConvention #>)] - private unsafe static extern <#= interopFunction.ReturnType.TypeName #> <#= sharpFunction.CppElementName #>_(<# - for(int i = 0; i < interopFunction.ParameterTypes.Count; i++) { - if (i > 0) {#>,<#} -#><#= interopFunction.ParameterTypes[i].TypeName #> arg<#= i #><# - } -#>); -<# - } - else if (indexDll >= 0) - { -#> - private static IntPtr <#= sharpFunction.CppElementName #>Field_; - private static IntPtr <#= sharpFunction.CppElementName #>_ - { - get - { - if (<#= sharpFunction.CppElementName #>Field_ == IntPtr.Zero) - { - <#= sharpFunction.CppElementName #>Field_ = SharpDX.Utilities.GetProcAddress(DllHandle<#= indexDll #>, "<#= sharpFunction.CppElementName #>"); - } - return <#= sharpFunction.CppElementName #>Field_; - } - } -<# - } - } -#> - } -<# -} // Foreach Namespace.FunctionGroups -#> -} - -#endif - -<#@ include file="Method.tt" #> diff --git a/Source/Tools/SharpGen/Templates/Header.tt b/Source/Tools/SharpGen/Templates/Header.tt deleted file mode 100644 index 0dcf2c480..000000000 --- a/Source/Tools/SharpGen/Templates/Header.tt +++ /dev/null @@ -1,42 +0,0 @@ -<#@ template debug="true" language="C#" hostspecific="True" #> -<#@ output encoding="ASCII" extension=".cs" #> -<#@ assembly name="SharpGen.exe" #> -<#@ import namespace="SharpGen" #> -<#@ import namespace="SharpGen.Model" #> -<#@ import namespace="SharpGen.CppModel" #> -<#@ parameter name="Generator" type="SharpGen.Generator.TransformManager" #> -<#@ parameter name="Namespace" type="SharpGen.Model.CsNamespace" #> -<#@ parameter name="Assembly" type="SharpGen.Model.CsAssembly" #> -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -//------------------------------------------------------------------------------ -// -// Types declaration for <#= Namespace.Name #> namespace. -// This code was generated by a tool. -// Date : <#= DateTime.Now #> -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -using System; -using System.Runtime.InteropServices; -using System.Security; \ No newline at end of file diff --git a/Source/Tools/SharpGen/Templates/Interfaces.tt b/Source/Tools/SharpGen/Templates/Interfaces.tt deleted file mode 100644 index 5a8d80f9c..000000000 --- a/Source/Tools/SharpGen/Templates/Interfaces.tt +++ /dev/null @@ -1,208 +0,0 @@ -<#@ include file="Header.tt" #> - -#if <#= Generator.AppType #> -namespace <#= Namespace.Name #> { - -// Disable warning : XML comment is not placed on a valid language element -#pragma warning disable 419 -#pragma warning disable 1587 -#pragma warning disable 1574 - -<# -foreach (var sharpInterface in Namespace.Interfaces) -{ - ProcessInterface(sharpInterface); -} -#> -} - -#endif -<#+ - public void ProcessInterface(CsInterface sharpInterface) { -#> - -<#+ - - if (sharpInterface.Parent is CsInterface) { -#> /// Interface <#= sharpInterface.Name #>. - /// <#= sharpInterface.DocUnmanagedName #> -<#+ - } else { - foreach (var docItem in sharpInterface.DocItems) { -#> - /// <#= docItem #> -<#+ - } - } - - if (sharpInterface.Guid != null) { -#> - [Guid("<#= sharpInterface.Guid #>")] -<#+ - } - - // If Callback, then declare as interface - if (sharpInterface.IsCallback) { -#> <#= sharpInterface.VisibilityName #>partial interface <#= sharpInterface.Name #><#+ - } else { -#> <#= sharpInterface.VisibilityName #>partial class <#= sharpInterface.Name #><#+ - } - - // Is there any Base class? - if (sharpInterface.Base != null || sharpInterface.IBase != null) { -#> : <#+ - string separator = ""; - if (sharpInterface.Base != null) { -#><#= sharpInterface.Base.QualifiedName #><#+ - separator = ", "; - } - if (sharpInterface.IBase != null) { -#><#= separator #><#= sharpInterface.IBase.QualifiedName #><#+ - } - } -#> { -<#+ - if (!sharpInterface.IsCallback) {#> - /// - /// Initializes a new instance of the class. - /// - /// The native pointer. - public <#= sharpInterface.Name #>(IntPtr nativePtr) : base(nativePtr) { - } - - /// - /// Performs an explicit conversion from to . (This method is a shortcut to ) - /// - /// The native pointer. - /// - /// The result of the conversion. - /// - public static explicit operator <#= sharpInterface.QualifiedName #>(IntPtr nativePointer) - { - return nativePointer == IntPtr.Zero ? null : new <#= sharpInterface.QualifiedName #>(nativePointer); - } -<#+ - } -#> - -<#+ - - // -------------------------------------------------------------------------------------------------- - // Handle Inner Constants - // -------------------------------------------------------------------------------------------------- - foreach (var sharpConstant in sharpInterface.Variables) { -#> - /// Constant <#= sharpConstant.Name #>. - /// <#= sharpConstant.CppElementName #> - <#= sharpConstant.VisibilityName #><#= sharpConstant.TypeName #> <#= sharpConstant.Name #> = <#= sharpConstant.Value #>; -<#+ - } - - // -------------------------------------------------------------------------------------------------- - // Handle Inner Interfaces - // -------------------------------------------------------------------------------------------------- - if (sharpInterface.HasInnerInterfaces) { - -#> - /// Update nested inner interfaces pointer - protected override void NativePointerUpdated(IntPtr oldPointer) - { - base.NativePointerUpdated(oldPointer); -<#+ - // Include Inner structure - foreach (var innerInterface in sharpInterface.InnerInterfaces) { -#> if (<#= innerInterface.PropertyAccesName #> == null) - <#= innerInterface.PropertyAccesName #> = new <#= innerInterface.QualifiedName #>(IntPtr.Zero); - <#= innerInterface.PropertyAccesName #>.NativePointer = NativePointer; -<#+ - } -#> } -<#+ - - // Include Inner structure - foreach (var innerInterface in sharpInterface.InnerInterfaces) { -#> - /// Inner interface giving access to <#= innerInterface.Name #> methods. - public <#= innerInterface.Name #> <#= innerInterface.PropertyAccesName #> { get; private set; } -<#+ - //PushIndent(" "); - //ProcessInterface(innerInterface); - //PopIndent(); - } - } - - // ------------------------------------------------------------------------------------------------------------ - // Output Properties - // ------------------------------------------------------------------------------------------------------------ - if (!sharpInterface.IsCallback) - foreach (var sharpProperty in sharpInterface.Properties) { -#> - -<#+ - foreach (var docItem in sharpProperty.DocItems) { -#> - /// <#= docItem #> -<#+ - } -#> - /// <#= sharpProperty.CppSignature #> - <#= sharpProperty.VisibilityName #><#= sharpProperty.PublicType.QualifiedName #> <#= sharpProperty.Name #> { -<#+ if (sharpProperty.IsPropertyParam) { - if (sharpProperty.Getter != null) { - if (sharpProperty.IsPersistent) { -#> - get { if (<#= sharpProperty.Name #>__ == null) <#= sharpProperty.Getter.Name #>(out <#= sharpProperty.Name #>__); return <#= sharpProperty.Name #>__; } -<#+ - } else { -#> - get { <#= sharpProperty.PublicType.QualifiedName #> __output__; <#= sharpProperty.Getter.Name #>(out __output__); return __output__; } -<#+ - } - } - if (sharpProperty.Setter != null) { -#> - set { <#= sharpProperty.Setter.Name #>(<#= sharpProperty.PrefixSetterParam #>value); } -<#+ - } - } else { - if (sharpProperty.Getter != null) { - if (sharpProperty.IsPersistent) { -#> - get { return <#= sharpProperty.Name #>__ ?? <#= sharpProperty.Name #>__ = <#= sharpProperty.Getter.Name #>(); } -<#+ - } else { -#> - get { return <#= sharpProperty.Getter.Name #>(); } -<#+ - } - } - if (sharpProperty.Setter != null) { -#> - set { <#= sharpProperty.Setter.Name #>(<#= sharpProperty.PrefixSetterParam #>value); } -<#+ - } - } -#> } -<#+ - if (sharpProperty.IsPropertyParam && sharpProperty.IsPersistent) { -#> - protected internal <#= sharpProperty.PublicType.QualifiedName #> <#= sharpProperty.Name #>__; -<#+ - } - } - - // ------------------------------------------------------------------------------------------------------------ - // Output methods - // ------------------------------------------------------------------------------------------------------------ - foreach (var sharpInterfaceMethod in sharpInterface.Methods) { - if (sharpInterface.IsCallback) - sharpInterfaceMethod.Hidden = true; - ProcessMethod(sharpInterfaceMethod); - } -#> - } - -<#+ - } // End of ProcessInterface -#> -<#@ include file="Method.tt" #> \ No newline at end of file diff --git a/Source/Tools/SharpGen/Templates/LocalInterop.tt b/Source/Tools/SharpGen/Templates/LocalInterop.tt deleted file mode 100644 index 5bae91821..000000000 --- a/Source/Tools/SharpGen/Templates/LocalInterop.tt +++ /dev/null @@ -1,40 +0,0 @@ -<#@ include file="Header.tt" #> - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Collections.Generic; -#if <#= Generator.AppType #> -namespace <#= Assembly.QualifiedName #> -{ -#pragma warning disable 649 -#pragma warning disable 419 -#pragma warning disable 1587 -#pragma warning disable 1574 - - internal partial class LocalInterop - { -<# -foreach (var method in Assembly.Interop.Methods) { -#> - public static unsafe <#= method.ReturnType.TypeName #> <#= method.Name #>(<# - if (!method.IsFunction) { - #>void* thisObject<# - if (method.ParameterTypes.Count>0) {#>,<#} - } - for(int i = 0; i < method.ParameterTypes.Count; i++) { - if (i > 0) {#>,<#} -#><#= method.ParameterTypes[i].TypeName #> arg<#= i #><# - } - if (method.IsFunction) { - if (method.ParameterTypes.Count>0) {#>,<#} - #>void* funcPtr<# - } else { - #>,void* methodPtr<# - } -#>) { throw new NotImplementedException(); } -<# -} -#> - } -} -#endif diff --git a/Source/Tools/SharpGen/Templates/Method.tt b/Source/Tools/SharpGen/Templates/Method.tt deleted file mode 100644 index c317aa57f..000000000 --- a/Source/Tools/SharpGen/Templates/Method.tt +++ /dev/null @@ -1,383 +0,0 @@ -<#+ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - private void ProcessMethodCalli(CsMethod method) { - // Number of parameters - var maxParam = method.ParameterCount; - // IF Function, else method - if (method is CsFunction) { - if (method.UseDllImport) { -#><#= method.CastStart #><#= method.CppElementName #>_(<#+ - } else { -#><#= method.CastStart #><#= method.Assembly.QualifiedName #>.LocalInterop.<#= method.Interop.Name #>(<#+ - } - if (method.IsReturnStructLarge) {#>(void*)&__result__<#+ if (maxParam > 0) {#>, <#+} } - - } else { -#><#= method.CastStart #><#= method.Assembly.QualifiedName #>.LocalInterop.<#= method.Interop.Name #>(_nativePointer<#+ - if (method.IsReturnStructLarge) {#>,(void*)&__result__<#+} - if (maxParam > 0) {#>, <#+} - } - for(int i = 0; i < maxParam; i++) { - var param = method.Parameters[i]; - if (i>0) {#>, <#+} - #><#= param.CallName #><#+ - } - if (method is CsFunction) { - if (!method.UseDllImport) { - if (maxParam > 0 || method.IsReturnStructLarge) {#>, <#+} - #>(void*)<#= method.CppElementName #>_<#+ - } - } else { - if (method.CustomVtbl) - { - #>,((void**)(*(void**)_nativePointer))[<#= method.Name #>__vtbl_index]<#+ - } - else - { - #>,((void**)(*(void**)_nativePointer))[<#= method.Offset #>]<#+ - } - } - #>)<#= method.CastEnd #>; -<#+ - } - - private void ProcessMethodCalliX86Jit(CsMethod method) { - // Number of parameters - var maxParam = method.ParameterCount; - // IF Function, else method - if (method is CsFunction) { -#><#= method.CastStart #><#= method.Assembly.QualifiedName #>.LocalInterop.<#= method.Interop.Name #>((void*)<#= method.CppElementName #>_, 0<#+ - } else { -#><#= method.CastStart #><#= method.Assembly.QualifiedName #>.LocalInterop.<#= method.Interop.Name #>(&__ptr__, ((void**)(*(void**)_nativePointer))[<#= method.Offset #>], &__ptr__ <#+ - } - if (maxParam > 0) {#>, <#+} - - // For ClrCall to StdCall, reverse order of pushed parameters in order to have right to left parameters - for(int i = maxParam-1; i >=0; i--) { - var param = method.Parameters[i]; - if (i < (maxParam-1)) {#>,<#+} - #><#= param.CallName #><#+ - } - if (method is CsFunction) { - if (maxParam > 0 && method.IsReturnStructLarge) {#>, <#+} - if (method.IsReturnStructLarge) {#>(void*)&__result__<#+} - } else { - if (method.IsReturnStructLarge) {#>,(void*)&__result__<#+} - #>,_nativePointer<#+ - } - #>)<#= method.CastEnd #>; -<#+ - } - - public void ProcessMethod(CsMethod method) { - - // ------------------------------------------------------------------------------------------------------------ - // Output methods - // ------------------------------------------------------------------------------------------------------------ -#> - -<#+ - // Output custom vtbil if specified - if (method.CustomVtbl) - { -#> private int <#= method.Name #>__vtbl_index = <#= method.Offset #>; -<#+ - } - foreach (var docItem in method.DocItems) { -#> - /// <#= docItem #> -<#+ - } - if (method.Hidden) { - #> /* <#+ - } else { - #> <#+ - } - #><#= method.VisibilityName #><#= method.PublicReturnTypeQualifiedName #> <#= method.Name #>(<#+ - int i = 0; - int maxParam = method.PublicParameterCount; - foreach (var param in method.PublicParameters) { - #><#= param.ParamName #><#+ - if (param.DefaultValue != null) {#> = <#= param.DefaultValue #><#+} - if ((i+1), <#+} - i++; - } -#>)<#+ - if (method.Hidden) { - #> */ - -<#+ - return; - } - // Else Open Body -#> { - unsafe { -<#+ - // --------------------------------------------------------------------------------------------------- - // Start Initializing Parameters out - // --------------------------------------------------------------------------------------------------- - foreach (var param in method.Parameters) { - // Handle parameters used as return type - if (param.IsUsedAsReturnType) { - if (param.IsArray) {#> - <#= param.PublicType.QualifiedName #>[] <#= param.Name #>; -<#+ - } else {#> - <#= param.PublicType.QualifiedName #> <#= param.Name #>; -<#+ } - } - - // Handle In-Optional - if (param.IsArray && param.IsValueType && !param.HasNativeValueType) { - if (param.IsOptionnal) {#> - <#= param.PublicType.QualifiedName #>[] <#= param.TempName #>_ = <#= param.Name #>; -<#+ } - continue; - } - // Does the structure has a Native marshalling? - if (param.HasNativeValueType) { - // If Native Marshalling and array, then marshal from managed array to a native managed array - if (param.IsArray) { - if (param.IsOptionnal) {#> - <#= param.PublicType.QualifiedName #>.__Native[] <#= param.TempName #>_ = (<#= param.Name #> == null)? null : new <#= param.PublicType.QualifiedName #>.__Native[<#= param.Name #>.Length]; -<#+ if (param.IsRefIn) {#> - if (<#= param.Name #> != null) - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.Name #>[i].__MarshalTo(ref <#= param.TempName #>_[i]); -<#+ } - } else {#> - <#= param.PublicType.QualifiedName #>.__Native[] <#= param.TempName #>_ = new <#= param.PublicType.QualifiedName #>.__Native[<#= param.Name #>.Length]; -<#+ if (param.IsRefIn) {#> - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.Name #>[i].__MarshalTo(ref <#= param.TempName #>_[i]); -<#+ } - } - } else {#> - var <#= param.TempName #> = <#= ((CsStruct)param.PublicType).GetConstructor() #>; -<#+ if ((param.IsRefIn || param.IsRef || param.IsIn) && param.HasNativeValueType) { - if (param.IsStaticMarshal) {#> - <#= param.PublicType.QualifiedName #>.__MarshalTo(ref <#= param.Name #>, ref <#= param.TempName #>); -<#+ - } else { - if (param.IsOptionnal && param.IsStructClass) {#> - if (<#= param.Name #> != null) -<#+ }#> - <#= param.Name #>.__MarshalTo(ref <#= param.TempName #>); -<#+ - } - } - } - } else if (param.IsOut) { - if (param.IsValueType && !param.IsPrimitive) {#> - <#= param.Name #> = new <#= param.PublicType.QualifiedName #>(); -<#+ } else if ( param.IsBoolToInt && !param.IsArray ) {#> - int <#= param.TempName #>; -<#+ } else if (param.IsComObject) { - if (param.IsArray) { - if (param.IsOptionnal) {#> - IntPtr* <#= param.TempName #> = stackalloc IntPtr[<#= param.Name #> == null ? 0 : <#= param.Name #>.Length]; -<#+ - } else {#> - IntPtr* <#= param.TempName #> = stackalloc IntPtr[<#= param.Name #>.Length]; -<#+ } - } else {#> - IntPtr <#= param.TempName #> = IntPtr.Zero; -<#+ - } - } - } else if (param.IsArray) { - // Handle Array Of Interface [In] - if (param.IsComObject) { - if (param.IsIn && param.IsOptionnal) {#> - IntPtr* <#= param.TempName #> = (IntPtr*)0; - if ( <#= param.Name #> != null ) { - IntPtr* <#= param.TempName #>_ = stackalloc IntPtr[<#= param.Name #>.Length]; - <#= param.TempName #> = <#= param.TempName #>_; - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.TempName #>[i] = (<#= param.Name #>[i] == null)? IntPtr.Zero : <#= param.Name #>[i].NativePointer; - } -<#+ - } else {#> - IntPtr* <#= param.TempName #> = stackalloc IntPtr[<#= param.Name #>.Length]; -<#+ if (param.IsIn) {#> - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.TempName #>[i] = (<#= param.Name #>[i] == null)? IntPtr.Zero : <#= param.Name #>[i].NativePointer; -<#+ } - } - } - // Handle Input String - } else if (param.IsString && !param.IsWideChar) {#> - IntPtr <#= param.TempName #> = Utilities.StringToHGlobalAnsi(<#= param.Name #>); -<#+ } else if ( param.IsRefIn && param.IsValueType && param.IsOptionnal) {#> - <#= param.PublicType.QualifiedName #> <#= param.TempName #>; - if (<#= param.Name #>.HasValue) - <#= param.TempName #> = <#= param.Name #>.Value; -<#+ - } - - } - // End Of initializing parameter out - // --------------------------------------------------------------------------------------------------- - - /* - if (!(method is CsFunction)) { -#if JIT_x86 - void* __ptr__; -#endif - } - */ - - // --------------------------------------------------------------------------------------------------- - // Pre-Declare Return Type - // --------------------------------------------------------------------------------------------------- - if (method.HasReturnType) {#> - <#= method.ReturnType.PublicType.QualifiedName #> __result__; -<#+ } - - // --------------------------------------------------------------------------------------------------- - // Handle fixed parameters - // --------------------------------------------------------------------------------------------------- - foreach (var param in method.Parameters) { - if (param.IsArray && param.IsValueType) { - if (param.HasNativeValueType || param.IsOptionnal) {#> - fixed (void* <#= param.TempName #> = <#= param.TempName #>_) -<#+ - } else {#> - fixed (void* <#= param.TempName #> = <#= param.Name #>) -<#+ } - PushIndent(" "); - } else if (param.IsFixed && param.IsValueType && !param.HasNativeValueType && !param.IsUsedAsReturnType) {#> - fixed (void* <#= param.TempName #> = &<#= param.Name #>) -<#+ PushIndent(" "); - // Handle Input String - } else if (param.IsString && param.IsWideChar) {#> - fixed (char* <#= param.TempName #> = <#= param.Name #>) -<#+ PushIndent(" "); - } - } - - - // --------------------------------------------------------------------------------------------------- - // Perform method call to Interop.Calli* - // --------------------------------------------------------------------------------------------------- - if (method.HasReturnType && !method.IsReturnStructLarge) {#> - __result__= - <#+ - } else { -#> <#+ - } -//#if JIT_x86 -// ProcessMethodCalliX86Jit(method); -//#else - ProcessMethodCalli(method); -//#endif - // --------------------------------------------------------------------------------------------------- - // Unindent fixed parameters - // --------------------------------------------------------------------------------------------------- - foreach (var param in method.Parameters) { - if ((param.IsArray && param.IsValueType) || (param.IsFixed && param.IsValueType && !param.HasNativeValueType)) - PopIndent(); - } - - // --------------------------------------------------------------------------------------------------- - // Post process on output parameters and free on Native input parameters - // --------------------------------------------------------------------------------------------------- - foreach (var param in method.Parameters) { - if (param.IsOut) { - if (param.HasNativeValueType) { - if (param.IsArray) {#> - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.Name #>[i].__MarshalFrom(ref <#= param.TempName #>_[i]); -<#+ } else {#> - <#= param.Name #> = new <#= param.PublicType.QualifiedName #>(); -<#+ if (param.IsStaticMarshal) {#> - <#= param.PublicType.QualifiedName #>.__MarshalFrom(ref <#= param.Name #>, ref <#= param.TempName #>); -<#+ } else {#> - <#= param.Name #>.__MarshalFrom(ref <#= param.TempName #>); -<#+ } - } - } else if (param.IsComObject ) { - var paramInterface = param.PublicType as CsInterface; - if (param.IsArray) { - if (param.IsOptionnal) {#> - if (<#= param.Name #> != null) -<#+ } -#> for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.Name #>[i] = (<#= param.TempName #>[i] == IntPtr.Zero)?null:new <#= paramInterface.NativeImplem.QualifiedName #>(<#= param.TempName #>[i]); -<#+ - } else { - if (param.IsFastOut) {#> - ((<#= paramInterface.NativeImplem.QualifiedName #>)<#= param.Name #>).NativePointer = <#= param.TempName #>; -<#+ } else {#> - <#= param.Name #>= (<#= param.TempName #> == IntPtr.Zero)?null:new <#= paramInterface.NativeImplem.QualifiedName #>(<#= param.TempName #>); -<#+ } - } - } else if (param.IsBoolToInt && !param.IsArray) {#> - <#= param.Name #> = <#= param.TempName #> != 0; -<#+ } - // Handle Input String - } else if (param.IsString && !param.IsWideChar) {#> - Marshal.FreeHGlobal(<#= param.TempName #> ); -<#+ - } else if (param.HasNativeValueType) { - if (param.IsArray) { - if (param.IsOptionnal) {#> - if (<#= param.Name #> != null ) -<#+ }#> - for (int i = 0; i < <#= param.Name #>.Length; i++) - <#= param.Name #>[i].__MarshalFree(ref <#= param.TempName #>_[i]); -<#+ } else { - if (param.IsStaticMarshal) { - if (param.IsRef) { -#> <#= param.PublicType.QualifiedName #>.__MarshalFrom(ref <#= param.Name #>, ref <#= param.TempName #>); -<#+ } -#> <#= param.PublicType.QualifiedName #>.__MarshalFree(ref <#= param.Name #>, ref <#= param.TempName #>); -<#+ } else { - if (param.IsRef) { -#> <#= param.Name #>.__MarshalFrom(ref <#= param.TempName #>); -<#+ } - if (param.IsOptionnal) {#> - if (<#= param.Name #> != null) -<#+ } - -#> <#= param.Name #>.__MarshalFree(ref <#= param.TempName #>); -<#+ } - } - } - } - - // --------------------------------------------------------------------------------------------------- - // Return value if any - // --------------------------------------------------------------------------------------------------- - if (method.HasPublicReturnType) { - if ((method.ReturnType.PublicType.Name == Global.Name +".Result") && method.CheckReturnType) {#> - __result__.CheckError(); -<#+ } - if (method.HasReturnTypeParameter || method.ForceReturnType || !method.HideReturnType) {#> - return <#= method.ReturnName #>; -<#+ } - } -#> } - } -<#+ - } -#> \ No newline at end of file diff --git a/Source/Tools/SharpGen/Templates/Structures.tt b/Source/Tools/SharpGen/Templates/Structures.tt deleted file mode 100644 index 3d412eec8..000000000 --- a/Source/Tools/SharpGen/Templates/Structures.tt +++ /dev/null @@ -1,376 +0,0 @@ -<#@ include file="Header.tt" #> - -#if <#= Generator.AppType #> -namespace <#= Namespace.Name #> { - -#pragma warning disable 282 -#pragma warning disable 649 -#pragma warning disable 419 -#pragma warning disable 1587 -#pragma warning disable 1574 - -<# -foreach (var sharpStruct in Namespace.Structs) -{ - ProcessStruct(sharpStruct); -} -#> -} -#endif -<#+ - public void ProcessStruct(CsStruct sharpStruct) { -#> - -<#+ - foreach (var docItem in sharpStruct.DocItems) { -#> - /// <#= docItem #> -<#+ - } - - var packLayout = sharpStruct.Align != 0 ? ", Pack = " + sharpStruct.Align : string.Empty; - if (!sharpStruct.HasMarshalType) { - if (sharpStruct.ExplicitLayout) {#> - [StructLayout(LayoutKind.Explicit<#= packLayout #>)] -<#+ - } else { -#> - [StructLayout(LayoutKind.Sequential<#= packLayout #>)] -<#+ - } - } -#> - <#= sharpStruct.VisibilityName #> partial <#= sharpStruct.StructTypeName #> <#= sharpStruct.Name #> { -<#+ - // Include Inner structure - foreach (var innerStruct in sharpStruct.InnerStructs) { - PushIndent(" "); - ProcessStruct(innerStruct); - PopIndent(); - } - - // -------------------------------------------------------------------------------------------------- - // Handle Inner Constants - // -------------------------------------------------------------------------------------------------- - foreach (var sharpConstant in sharpStruct.Variables) { -#> - /// Constant <#= sharpConstant.Name #>. - /// <#= sharpConstant.CppElementName #> - <#= sharpConstant.VisibilityName #><#= sharpConstant.TypeName #> <#= sharpConstant.Name #> = <#= sharpConstant.Value #>; -<#+ - } - - - // -------------------------------------------------------------------------------------------------- - // Process fields - // -------------------------------------------------------------------------------------------------- - foreach (var sharpStructItem in sharpStruct.Fields) { -#> - -<#+ - foreach (var docItem in sharpStructItem.DocItems) { -#> - /// <#= docItem #> -<#+ - } - if (sharpStructItem.IsBoolToInt && !sharpStructItem.IsArray) { -#> - <#= sharpStructItem.VisibilityName #>bool <#= sharpStructItem.Name #> { - get { - return (_<#= sharpStructItem.Name #>!=0)?true:false; - } - set { - _<#= sharpStructItem.Name #> = value?1:0; - } - } -<#+ - if (!sharpStruct.HasMarshalType && sharpStruct.ExplicitLayout) { -#> - [FieldOffset(<#= sharpStructItem.Offset #>)] -<#+ - } -#> internal int _<#= sharpStructItem.Name #>; -<#+ - - - } else if (sharpStructItem.IsArray && sharpStructItem.PublicType.QualifiedName != "string") { -#> - <#= sharpStructItem.VisibilityName #><#= sharpStructItem.PublicType.QualifiedName #>[] <#= sharpStructItem.Name #> { - get { return _<#= sharpStructItem.Name #> ?? (_<#= sharpStructItem.Name #> = new <#= sharpStructItem.PublicType.QualifiedName #>[<#= sharpStructItem.ArrayDimension #>]);} - } -<#+ if (!sharpStruct.HasMarshalType && sharpStruct.ExplicitLayout) { -#> - [FieldOffset(<#= sharpStructItem.Offset #>)] -<#+ - } -#> internal <#= sharpStructItem.PublicType.QualifiedName #>[] _<#= sharpStructItem.Name #>; -<#+ - } else { - if (sharpStructItem.IsBitField) { - // If bitMask == 1, then use bool - if ( sharpStructItem.BitMask == 1 ) { -#> - <#= sharpStructItem.VisibilityName #>bool <#= sharpStructItem.Name #> { - get { - return 0 != ((_<#= sharpStructItem.Name #> >> <#= sharpStructItem.BitOffset #>) & <#= sharpStructItem.BitMask #>); - } - set { - _<#= sharpStructItem.Name #> = (<#= sharpStructItem.PublicType.QualifiedName #>)((_<#= sharpStructItem.Name #> & ~( <#= sharpStructItem.BitMask #> << <#= sharpStructItem.BitOffset #>)) | ( ( (value?1:0) & <#= sharpStructItem.BitMask #>) << <#= sharpStructItem.BitOffset #>)); - } - } - [FieldOffset(<#= sharpStructItem.Offset #>)] - internal <#= sharpStructItem.PublicType.QualifiedName #> _<#= sharpStructItem.Name #>; - -<#+ } else { -#> - <#= sharpStructItem.VisibilityName #><#= sharpStructItem.PublicType.QualifiedName #> <#= sharpStructItem.Name #> { - get { - return (<#= sharpStructItem.PublicType.QualifiedName #>)((_<#= sharpStructItem.Name #> >> <#= sharpStructItem.BitOffset #>) & <#= sharpStructItem.BitMask #>); - } - set { - _<#= sharpStructItem.Name #> = (<#= sharpStructItem.PublicType.QualifiedName #>)((_<#= sharpStructItem.Name #> & ~( <#= sharpStructItem.BitMask #> << <#= sharpStructItem.BitOffset #>)) | ( (value & <#= sharpStructItem.BitMask #>) << <#= sharpStructItem.BitOffset #>)); - } - } - [FieldOffset(<#= sharpStructItem.Offset #>)] - internal <#= sharpStructItem.PublicType.QualifiedName #> _<#= sharpStructItem.Name #>; - -<#+ } - } else { - if (!sharpStruct.HasMarshalType && sharpStruct.ExplicitLayout) { -#> - [FieldOffset(<#= sharpStructItem.Offset #>)] -<#+ - } -#> - <#= sharpStructItem.VisibilityName #><#= sharpStructItem.PublicType.QualifiedName #> <#= sharpStructItem.Name #>; -<#+ - } - } - } - - // Put Native internal struct - if (sharpStruct.HasMarshalType && !sharpStruct.HasCustomMarshal) { -#> - - // Internal native struct used for marshalling -<#+ - if (sharpStruct.ExplicitLayout) { -#> - [StructLayout(LayoutKind.Explicit<#= packLayout #>)] -<#+ - } else { -#> - [StructLayout(LayoutKind.Sequential<#= packLayout #>)] -<#+ - } -#> - internal partial struct __Native { -<#+ - foreach (var sharpStructItem in sharpStruct.Fields) { - var sharpStructItemAsStruct = sharpStructItem.PublicType as CsStruct; - - - if (sharpStruct.ExplicitLayout) { -#> - [FieldOffset(<#= sharpStructItem.Offset #>)] -<#+ - } - if (sharpStructItem.IsBoolToInt && !sharpStructItem.IsArray) { -#> - public <#= sharpStructItem.MarshalType.QualifiedName #> _<#= sharpStructItem.Name #>; -<#+ - } else if (sharpStructItem.IsArray) { -#> - public <#= sharpStructItem.MarshalType.QualifiedName #> <#= sharpStructItem.Name #>; -<#+ - for(int i = 1; i < sharpStructItem.ArrayDimensionValue; i++) { - if (sharpStruct.ExplicitLayout) { - int arrayItemOffset = sharpStructItem.Offset + (sharpStructItem.SizeOf / sharpStructItem.ArrayDimensionValue ) * i; -#> - [FieldOffset(<#= arrayItemOffset #>)] -<#+ - } -#> - <#= sharpStructItem.MarshalType.QualifiedName #> __<#= sharpStructItem.Name #><#= i #>; -<#+ - } - } else if ( sharpStructItemAsStruct != null && sharpStructItemAsStruct.HasMarshalType) { -#> - public <#= sharpStructItem.MarshalType.QualifiedName #>.__Native <#= sharpStructItem.Name #>; -<#+ - } else { -#> - public <#= sharpStructItem.MarshalType.QualifiedName #> <#= sharpStructItem.Name #>; -<#+ - } - } - -#> - // Method to free unmanaged allocation - internal unsafe void __MarshalFree() - { -<#+ foreach (var sharpStructItem in sharpStruct.Fields) { - var sharpStructItemAsStruct = sharpStructItem.PublicType as CsStruct; - if (!sharpStructItem.IsArray) { - if (sharpStructItem.PublicType.QualifiedName == "string") { -#> - if (this.<#= sharpStructItem.Name #> != IntPtr.Zero) - Marshal.FreeHGlobal(this.<#= sharpStructItem.Name #>); -<#+ - } else if ( sharpStructItemAsStruct != null && sharpStructItemAsStruct.HasMarshalType) { -#> - this.<#= sharpStructItem.Name #>.__MarshalFree(); -<#+ - } - } - }#> - } - } - - // Method to free unmanaged allocation - internal unsafe void __MarshalFree(ref __Native @ref) - { - @ref.__MarshalFree(); - } - - // Method to marshal from native to managed struct - internal unsafe void __MarshalFrom(ref __Native @ref) - { -<#+ - // Write code for Marshal from native struct - foreach (var sharpStructItem in sharpStruct.Fields) { - var sharpStructItemAsStruct = sharpStructItem.PublicType as CsStruct; - - if (sharpStructItem.IsBoolToInt) { - if (sharpStructItem.IsArray) { -#> fixed (int* __from = &@ref.<#= sharpStructItem.Name #>) this._<#= sharpStructItem.Name #> = <#= Global.Name #>.Utilities.ConvertToBoolArray(__from, <#= sharpStructItem.ArrayDimension #>); -<#+ } else { -#> this._<#= sharpStructItem.Name #> = @ref._<#= sharpStructItem.Name #>; -<#+ } - } else if (sharpStructItem.IsArray) { - if (sharpStructItem.IsFixedArrayOfStruct) { -#> - fixed (void* __to = &this.<#= sharpStructItem.Name #>[0]) fixed (void* __from = &@ref.<#= sharpStructItem.Name #>) SharpDX.Utilities.CopyMemory((IntPtr) __to, (IntPtr) __from, <#= sharpStructItem.ArrayDimension #>*sizeof ( <#= sharpStructItem.MarshalType.QualifiedName #>)); -<#+ - } else { - if (sharpStructItem.MarshalType.QualifiedName == "char") { -#> - fixed (char* __ptr = &@ref.<#= sharpStructItem.Name #>) this.<#= sharpStructItem.Name #> = SharpDX.Utilities.PtrToStringUni((IntPtr)__ptr, <#= sharpStructItem.ArrayDimension #>); -<#+ - } else if (sharpStructItem.PublicType.QualifiedName == "string" && sharpStructItem.MarshalType.QualifiedName == "byte") { -#> - fixed (void* __ptr = &@ref.<#= sharpStructItem.Name #>) this.<#= sharpStructItem.Name #> = SharpDX.Utilities.PtrToStringAnsi((IntPtr)__ptr, <#= sharpStructItem.ArrayDimension #>); -<#+ - } else { -#> - fixed (void* __to = &this.<#= sharpStructItem.Name #>[0]) fixed (void* __from = &@ref.<#= sharpStructItem.Name #>) SharpDX.Utilities.CopyMemory((IntPtr) __to, (IntPtr) __from, <#= sharpStructItem.ArrayDimension #>*sizeof ( <#= sharpStructItem.MarshalType.QualifiedName #>)); -<#+ - } - } - } else { - if (sharpStructItem.PublicType.QualifiedName == "string") { - if (!sharpStructItem.IsWideChar) { - // Copy string -#> - this.<#= sharpStructItem.Name #> = ( @ref.<#= sharpStructItem.Name #> == IntPtr.Zero )?null:Marshal.PtrToStringAnsi(@ref.<#= sharpStructItem.Name #>); -<#+ - } else { -#> - this.<#= sharpStructItem.Name #> = ( @ref.<#= sharpStructItem.Name #> == IntPtr.Zero )?null:Marshal.PtrToStringUni(@ref.<#= sharpStructItem.Name #>); -<#+ - } - } else if ( sharpStructItemAsStruct != null && sharpStructItemAsStruct.HasMarshalType) { -#> - this.<#= sharpStructItem.Name #> = new <#= sharpStructItem.PublicType.QualifiedName #>(); - this.<#= sharpStructItem.Name #>.__MarshalFrom(ref @ref.<#= sharpStructItem.Name #>); -<#+ - } else { - // Copy Default fields -#> - this.<#= sharpStructItem.Name #> = @ref.<#= sharpStructItem.Name #>; -<#+ - } - } - } -#> - } -<#+ - if (sharpStruct.IsOut) { -#> - // Method to marshal from managed struct tot native - internal unsafe void __MarshalTo(ref __Native @ref) - { -<#+ - // Write code for Marshal to native struct - foreach (var sharpStructItem in sharpStruct.Fields) { - var sharpStructItemAsStruct = sharpStructItem.PublicType as CsStruct; - - if (sharpStructItem.IsBoolToInt) { - if (sharpStructItem.IsArray) { -#> fixed (int* __from = &@ref.<#= sharpStructItem.Name #>) <#= Global.Name #>.Utilities.ConvertToIntArray(this.<#= sharpStructItem.Name #>, __from); -<#+ } else { -#> @ref._<#= sharpStructItem.Name #> = this._<#= sharpStructItem.Name #>; -<#+ } - } else if (sharpStructItem.IsArray) { - if (sharpStructItem.IsFixedArrayOfStruct) { -#> - fixed (void* __to = &@ref.<#= sharpStructItem.Name #>) fixed (void* __from = &this.<#= sharpStructItem.Name #>[0]) SharpDX.Utilities.CopyMemory((IntPtr) __to, (IntPtr) __from, <#= sharpStructItem.ArrayDimension #>*sizeof ( <#= sharpStructItem.MarshalType.QualifiedName #>)); -<#+ - } else { - if (sharpStructItem.MarshalType.QualifiedName == "char") { -#> - fixed (char* __psrc = this.<#= sharpStructItem.Name #>) fixed (char* __ptr = &@ref.<#= sharpStructItem.Name #>) Utilities.CopyMemory((IntPtr)__ptr, (IntPtr)__psrc, <#= sharpStructItem.Name #>.Length * 2); -<#+ - } else if (sharpStructItem.PublicType.QualifiedName == "string") { -#> - IntPtr <#= sharpStructItem.Name #>_ = Utilities.StringToHGlobalAnsi(this.<#= sharpStructItem.Name #>); - fixed (void* __ptr = &@ref.<#= sharpStructItem.Name #>) Utilities.CopyMemory((IntPtr)__ptr, <#= sharpStructItem.Name #>_, this.<#= sharpStructItem.Name #>.Length); - Marshal.FreeHGlobal( <#= sharpStructItem.Name #>_); -<#+ - } else { -#> - fixed (void* __to = &@ref.<#= sharpStructItem.Name #>) fixed (void* __from = &this.<#= sharpStructItem.Name #>[0]) SharpDX.Utilities.CopyMemory((IntPtr) __to, (IntPtr) __from, <#= sharpStructItem.ArrayDimension #>*sizeof ( <#= sharpStructItem.MarshalType.QualifiedName #>)); -<#+ - } - } - } else { - if (sharpStructItem.PublicType.QualifiedName == "string") { - if (!sharpStructItem.IsWideChar) { - // Copy string -#> - @ref.<#= sharpStructItem.Name #> = ( this.<#= sharpStructItem.Name #> == null )?IntPtr.Zero : Utilities.StringToHGlobalAnsi(this.<#= sharpStructItem.Name #>); -<#+ - } else { -#> - @ref.<#= sharpStructItem.Name #> = ( this.<#= sharpStructItem.Name #> == null )?IntPtr.Zero : Utilities.StringToHGlobalUni(this.<#= sharpStructItem.Name #>); -<#+ - } - } else if ( sharpStructItemAsStruct != null && sharpStructItemAsStruct.HasMarshalType) { -#> - @ref.<#= sharpStructItem.Name #> = <#= sharpStructItemAsStruct.GetConstructor() #>; -<#+ - if (sharpStructItemAsStruct.GenerateAsClass) { -#> - if (this.<#= sharpStructItem.Name #> != null) <#+ - } -#> - this.<#= sharpStructItem.Name #>.__MarshalTo(ref @ref.<#= sharpStructItem.Name #>); -<#+ - } else { - // Copy Default fields -#> - @ref.<#= sharpStructItem.Name #> = this.<#= sharpStructItem.Name #>; -<#+ - } - } - } // Foreach sharpStructItem in sharpStruct.Fields -#> - } -<#+ - } // Endif sharpStruct.IsOut - } -#> - } -<#+ -} -#> diff --git a/Source/Tools/SharpGen/TextTemplating/TemplateEngine.cs b/Source/Tools/SharpGen/TextTemplating/TemplateEngine.cs deleted file mode 100644 index 6cd1eec69..000000000 --- a/Source/Tools/SharpGen/TextTemplating/TemplateEngine.cs +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; -using SharpGen.Logging; - -namespace SharpGen.TextTemplating -{ - /// - /// Lightweight implementation of T4 engine, using Tokenizer from MonoDevelop.TextTemplating. - /// - public class TemplateEngine - { - private StringBuilder _doTemplateCode; - private StringBuilder _doTemplateClassCode; - private bool _isTemplateClassCode; - private List _directives; - private Dictionary _parameters; - - /// - /// Occurs when an include needs to be found. - /// - public event EventHandler OnInclude; - - - /// - /// Template code. - /// Parameter {0} = List of import namespaces. - /// Parameter {1} = List of parameters declaration. - /// Parameter {2} = Body of template code - /// Parameter {3} = Body of template class level code - /// - private const string GenericTemplateCodeText = @" -using System; -using System.Runtime.InteropServices; -using System.Text; -using System.Text.RegularExpressions; -{0} - public class TemplateImpl : SharpGen.TextTemplating.Templatizer - {{ -{1} - public override void Process() - {{ - // DoTemplate code -{2} - }} - - // DoTemplateClass code -{3} - }} -"; - public TemplateEngine() - { - _parameters = new Dictionary(); - // templateCodePath = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "..\\..\\"); - } - - - /// - /// Adds a text to Templatizer.Process section . - /// - /// The location. - /// The content. - private void AddDoTemplateCode(Location location, string content) - { - if (_isTemplateClassCode) - throw new InvalidOperationException(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Cannot add Process code [{0}] after Process Class level code", content)); - - _doTemplateCode.AppendLine().AppendFormat("#line {0} \"{1}\"", location.Line, location.FileName).AppendLine(); - _doTemplateCode.Append(content); - } - - /// - /// Adds a text to at Templatizer class level. - /// - /// The location. - /// The content. - private void AddDoTemplateClassCode(Location location, string content) - { - _doTemplateClassCode.AppendLine().AppendFormat("#line {0} \"{1}\"", location.Line, location.FileName).AppendLine(); - _doTemplateClassCode.Append(content); - } - - /// - /// Adds some code to the current - /// - /// The location. - /// The code. - private void AddCode(Location location, string code) - { - if (_isTemplateClassCode) - AddDoTemplateClassCode(location, code); - else - AddDoTemplateCode(location, code); - } - - /// - /// Add a multiline string to the template code. - /// This methods decompose a string in lines and generate template code for each line - /// using Templatizer.Write/WriteLine methods. - /// - /// The location in the text template file. - /// The content to add to the code. - private void AddContent(Location location, string content) - { - content = content.Replace("\"", "\\\""); - - var reader = new StringReader(content); - var lines = new List(); - string line; - while ((line = reader.ReadLine()) != null) - lines.Add(line); - - Location fromLocation = location; - - for (int i = 0; i < lines.Count;i++) - { - line = lines[i]; - - location = new Location(fromLocation.FileName, fromLocation.Line + i, fromLocation.Column); - - if ((i + 1) == lines.Count) - { - if (content.EndsWith(line)) - { - if (!string.IsNullOrEmpty(line)) - AddCode(location, "Write(\"" + line + "\");\n"); - } - else - AddCode(location, "WriteLine(\"" + line + "\");\n"); - } - else - { - AddCode(location, "WriteLine(\"" + line + "\");\n"); - } - } - } - - private void AddExpression(Location location, string content) - { - AddCode(location, "Write(" + content + ");\n"); - } - - /// - /// Gets or sets the name of the template file being processed (for debug purpose). - /// - /// The name of the template file. - public string TemplateFileName { get; set; } - - /// - /// Process a template and returns the processed file. - /// - /// The template text. - /// - public string ProcessTemplate(string templateText) - { - // Initialize TemplateEngine state - _doTemplateCode = new StringBuilder(); - _doTemplateClassCode = new StringBuilder(); - _isTemplateClassCode = false; - Assembly templateAssembly = null; - _directives = new List(); - - // Parse the T4 template text - Parse(templateText); - - // Build parameters for template - var parametersCode = new StringBuilder(); - foreach (var parameterValueType in _parameters.Values) - parametersCode.Append(string.Format(System.Globalization.CultureInfo.InvariantCulture, "public {0} {1} {{ get; set; }}\n", parameterValueType.Type.FullName, parameterValueType.Name)); - - // Build import namespaces for template - var importNamespaceCode = new StringBuilder(); - foreach (var directive in _directives) - { - if (directive.Name == "import") - importNamespaceCode.Append("using " + directive.Attributes["namespace"] + ";\n"); - } - - // Expand final template class code - // Parameter {0} = List of import namespaces. - // Parameter {1} = List of parameters declaration. - // Parameter {2} = Body of template code - // Parameter {3} = Body of template class level code - string templateSourceCode = string.Format(GenericTemplateCodeText, importNamespaceCode, parametersCode, _doTemplateCode, _doTemplateClassCode); - - // Creates the C# compiler, compiling for 3.5 - var codeProvider = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary() { { "CompilerVersion", "v4.0" } }); - var compilerParameters = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false }; - - // Adds assembly from CurrentDomain - // TODO, implement T4 directive "assembly"? - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - try - { - string location = assembly.Location; - if (!String.IsNullOrEmpty(location)) - compilerParameters.ReferencedAssemblies.Add(location); - } - catch (NotSupportedException) - { - // avoid problem with previous dynamic assemblies - } - } - - // Compiles the code - var compilerResults = codeProvider.CompileAssemblyFromSource(compilerParameters, templateSourceCode); - - // Output any errors - foreach (var compilerError in compilerResults.Errors) - Logger.Error(compilerError.ToString()); - - // If successful, gets the compiled assembly - if (compilerResults.Errors.Count == 0 && compilerResults.CompiledAssembly != null) - { - templateAssembly = compilerResults.CompiledAssembly; - } - else - { - Logger.Fatal("Template [{0}] contains error", TemplateFileName); - } - - // Get a new templatizer instance - var templatizer = (Templatizer)Activator.CreateInstance(templateAssembly.GetType("TemplateImpl")); - - // Set all parameters for the template - foreach (var parameterValueType in _parameters.Values) - { - var propertyInfo = templatizer.GetType().GetProperty(parameterValueType.Name); - propertyInfo.SetValue(templatizer, parameterValueType.Value, null); - } - - // Run the templatizer - templatizer.Process(); - - // Returns the text - return templatizer.ToString(); - } - - /// - /// Adds a parameter with the object to this template. - /// - /// The name. - /// an object. - /// If value is null - public void SetParameter(string name, object value) - { - if (value == null) throw new ArgumentNullException("value"); - - SetParameter(name, value, value.GetType()); - } - - /// - /// Adds a parameter with the object to this template. - /// - /// The name. - /// an object. - /// Type of the object. - /// If typeOf is null - public void SetParameter(string name, object value, Type typeOf) - { - if (typeOf == null) throw new ArgumentNullException("typeOf"); - - if (_parameters.ContainsKey(name)) - _parameters.Remove(name); - - _parameters.Add(name, new ParameterValueType { Name = name, Type = typeOf, Value = value }); - } - - /// - /// An association between a Value and a Type. - /// - private class ParameterValueType - { - public string Name; - public Type Type; - public object Value; - } - - /// - /// Parses the specified template text. - /// - /// The template text. - private void Parse(string templateText) - { - //var filePath = Path.GetFullPath(Path.Combine(templateCodePath, TemplateFileName)); - var tokeniser = new Tokeniser(TemplateFileName, templateText); - - AddCode(tokeniser.Location, ""); - - bool skip = false; - while ((skip || tokeniser.Advance()) && tokeniser.State != State.EOF) - { - skip = false; - switch (tokeniser.State) - { - case State.Block: - if (!String.IsNullOrEmpty(tokeniser.Value)) - AddDoTemplateCode(tokeniser.Location, tokeniser.Value); - break; - case State.Content: - if (!String.IsNullOrEmpty(tokeniser.Value)) - AddContent(tokeniser.Location, tokeniser.Value); - break; - case State.Expression: - if (!String.IsNullOrEmpty(tokeniser.Value)) - AddExpression(tokeniser.Location, tokeniser.Value); - break; - case State.Helper: - _isTemplateClassCode = true; - if (!String.IsNullOrEmpty(tokeniser.Value)) - AddDoTemplateClassCode(tokeniser.Location, tokeniser.Value); - break; - case State.Directive: - Directive directive = null; - string attName = null; - while (!skip && tokeniser.Advance()) - { - switch (tokeniser.State) - { - case State.DirectiveName: - if (directive == null) - directive = new Directive {Name = tokeniser.Value.ToLower()}; - else - attName = tokeniser.Value; - break; - case State.DirectiveValue: - if (attName != null && directive != null) - directive.Attributes.Add(attName.ToLower(), tokeniser.Value); - attName = null; - break; - case State.Directive: - //if (directive != null) - // directive.EndLocation = tokeniser.TagEndLocation; - break; - default: - skip = true; - break; - } - } - if (directive != null) - { - if (directive.Name == "include") - { - string includeFile = directive.Attributes["file"]; - if (OnInclude == null) - throw new InvalidOperationException("Include file found. OnInclude event must be implemented"); - var includeArgs = new TemplateIncludeArgs() {IncludeName = includeFile}; - OnInclude(this, includeArgs); - Parse(includeArgs.Text ?? ""); - } - _directives.Add(directive); - } - break; - default: - throw new InvalidOperationException(); - } - } - } - - /// - /// T4 Directive - /// - private class Directive - { - public Directive() - { - Attributes = new Dictionary(); - } - - public string Name { get; set; } - public Dictionary Attributes { get; set; } - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/TextTemplating/TemplateIncludeArgs.cs b/Source/Tools/SharpGen/TextTemplating/TemplateIncludeArgs.cs deleted file mode 100644 index b526ed7f4..000000000 --- a/Source/Tools/SharpGen/TextTemplating/TemplateIncludeArgs.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; - -namespace SharpGen.TextTemplating -{ - /// - /// Include EventArgs used to delay-loading of includes in the templates. - /// - public class TemplateIncludeArgs : EventArgs - { - /// - /// Gets or sets the name of the include. - /// - /// The name of the include. - public string IncludeName { get; set; } - - /// - /// Gets or sets the text. - /// - /// The text. - public string Text { get; set; } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/TextTemplating/Templatizer.cs b/Source/Tools/SharpGen/TextTemplating/Templatizer.cs deleted file mode 100644 index 200df718f..000000000 --- a/Source/Tools/SharpGen/TextTemplating/Templatizer.cs +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace SharpGen.TextTemplating -{ - /// - /// Base class for a template. A template needs to implement the method. - /// - public abstract class Templatizer - { - private readonly Stack _indents; - - /// - /// Initializes a new instance of the class. - /// - protected Templatizer() - { - IsNewLine = true; - _indents = new Stack(); - Writer = new StringWriter(); - } - - /// - /// Gets or sets the writer to write the processed template to. - /// - /// The writer. - private TextWriter Writer { get; set; } - - /// - /// Gets or sets a value indicating whether there is a new line - /// that requires a following indent. - /// - /// - /// true if there is a new line; otherwise, false. - /// - private bool IsNewLine { get; set; } - - /// - /// Gets or sets the current indent. - /// - /// The current indent. - private string CurrentIndent { get; set;} - - /// - /// Pushes an indentation. - /// - /// The indent. - public void PushIndent(string indent) - { - _indents.Push(indent); - UpdateIndent(); - } - - /// - /// Pops last indentation. - /// - public void PopIndent() - { - if (_indents.Count > 0) - _indents.Pop(); - UpdateIndent(); - } - - /// - /// Updates the current indentation based on the stack of indents. - /// - private void UpdateIndent() - { - var indentBuilder = new StringBuilder(); - foreach (var item in _indents) - indentBuilder.Append(item); - CurrentIndent = indentBuilder.ToString(); - } - - /// - /// Writes a formatted text to the Writer. - /// - /// The text. - /// The args. - /// this instance - public Templatizer Write(object value, params object[] args) - { - Write(value==null?null:value.ToString(), args); - return this; - } - - /// - /// Writes an object value to the Writer. - /// - /// The value. - /// this instance - public Templatizer Write(object value) - { - Write(value == null ? null : value.ToString()); - return this; - } - - /// - /// Writes a simple text to the Writer - /// - /// The text. - /// this instance - public Templatizer Write(string text) - { - if (IsNewLine) - { - Writer.Write(CurrentIndent); - IsNewLine = false; - } - if (text != null) - Writer.Write(text); - return this; - } - - /// - /// Writes a formatted text to the Writer. - /// - /// The text. - /// The args. - /// this instance - public Templatizer Write(string text, params object[] args) - { - if (text != null) - { - text = text.Replace("{", "{{").Replace("}", "}}"); - text = string.Format(text, args); - } - Write(text); - return this; - } - - /// - /// Writes a simple text with a new line to the Writer. - /// - /// The text. - /// this instance - public Templatizer WriteLine(string text) - { - return Write(text).WriteLine(); - } - - /// - /// Writes a formatted text with a new line to the Writer. - /// - /// The text. - /// The args. - /// this instance - public Templatizer WriteLine(string text, params object[] args) - { - return Write(text, args).WriteLine(); - } - - /// - /// Writes a new line. - /// - /// - public Templatizer WriteLine() - { - Writer.WriteLine(); - IsNewLine = true; - return this; - } - - /// - /// Main method to be implemented to output a processed template. - /// - public abstract void Process(); - - /// - /// Returns the text processed by this templatizer. - /// - /// - /// A that represents this instance. - /// - public override string ToString() - { - return Writer.ToString(); - } - } -} diff --git a/Source/Tools/SharpGen/TextTemplating/Tokenizer.cs b/Source/Tools/SharpGen/TextTemplating/Tokenizer.cs deleted file mode 100644 index 1d4071a22..000000000 --- a/Source/Tools/SharpGen/TextTemplating/Tokenizer.cs +++ /dev/null @@ -1,419 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -// Extract from MonoDevelop.TextTemplating engine. -// We are only using the tokenizer here and a simplified T4 implementation. - -// Tokeniser.cs -// -// Author: -// Michael Hutchinson -// -// Copyright (c) 2009 Novell, Inc. (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; - -namespace SharpGen.TextTemplating -{ - public struct Location : IEquatable - { - public Location(string fileName, int line, int column) - : this() - { - FileName = fileName; - Column = column; - Line = line; - } - - public int Line { get; private set; } - public int Column { get; private set; } - public string FileName { get; private set; } - - public static Location Empty - { - get { return new Location(null, -1, -1); } - } - - public Location AddLine() - { - return new Location(this.FileName, this.Line + 1, 1); - } - - public Location AddCol() - { - return AddCols(1); - } - - public Location AddCols(int number) - { - return new Location(this.FileName, this.Line, this.Column + number); - } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "[{0} ({1},{2})]", FileName, Line, Column); - } - - public bool Equals(Location other) - { - return other.Line == Line && other.Column == Column && other.FileName == FileName; - } - } - - - - public class Tokeniser - { - string content; - int position = 0; - string value; - State nextState = State.Content; - Location nextStateLocation; - Location nextStateTagStartLocation; - - public Tokeniser(string fileName, string content) - { - State = State.Content; - this.content = content; - this.Location = this.nextStateLocation = this.nextStateTagStartLocation = new Location(fileName, 1, 1); - } - - public bool Advance() - { - value = null; - State = nextState; - Location = nextStateLocation; - TagStartLocation = nextStateTagStartLocation; - if (nextState == State.EOF) - return false; - nextState = GetNextStateAndCurrentValue(); - return true; - } - - State GetNextStateAndCurrentValue() - { - switch (State) - { - case State.Block: - case State.Expression: - case State.Helper: - return GetBlockEnd(); - - case State.Directive: - return NextStateInDirective(); - - case State.Content: - return NextStateInContent(); - - case State.DirectiveName: - return GetDirectiveName(); - - case State.DirectiveValue: - return GetDirectiveValue(); - - default: - throw new InvalidOperationException("Unexpected state '" + State.ToString() + "'"); - } - } - - State GetBlockEnd() - { - int start = position; - for (; position < content.Length; position++) - { - char c = content[position]; - nextStateTagStartLocation = nextStateLocation; - nextStateLocation = nextStateLocation.AddCol(); - if (c == '\r') - { - if (position + 1 < content.Length && content[position + 1] == '\n') - position++; - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '\n') - { - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '>' && content[position - 1] == '#' && content[position - 2] != '\\') - { - value = content.Substring(start, position - start - 1); - position++; - TagEndLocation = nextStateLocation; - - //skip newlines directly after blocks, unless they're expressions - if (State != State.Expression && (position += IsNewLine()) > 0) - { - nextStateLocation = nextStateLocation.AddLine(); - } - return State.Content; - } - } - throw new ParserException("Unexpected end of file.", nextStateLocation); - } - - State GetDirectiveName() - { - int start = position; - for (; position < content.Length; position++) - { - char c = content[position]; - if (!Char.IsLetterOrDigit(c)) - { - value = content.Substring(start, position - start); - return State.Directive; - } - else - { - nextStateLocation = nextStateLocation.AddCol(); - } - } - throw new ParserException("Unexpected end of file.", nextStateLocation); - } - - State GetDirectiveValue() - { - int start = position; - int delimiter = '\0'; - for (; position < content.Length; position++) - { - char c = content[position]; - nextStateLocation = nextStateLocation.AddCol(); - if (c == '\r') - { - if (position + 1 < content.Length && content[position + 1] == '\n') - position++; - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '\n') - nextStateLocation = nextStateLocation.AddLine(); - if (delimiter == '\0') - { - if (c == '\'' || c == '"') - { - start = position; - delimiter = c; - } - else if (!Char.IsWhiteSpace(c)) - { - throw new ParserException("Unexpected character '" + c + "'. Expecting attribute value.", nextStateLocation); - } - continue; - } - if (c == delimiter) - { - value = content.Substring(start + 1, position - start - 1); - position++; - return State.Directive; - } - } - throw new ParserException("Unexpected end of file.", nextStateLocation); ; - } - - State NextStateInContent() - { - int start = position; - for (; position < content.Length; position++) - { - char c = content[position]; - nextStateTagStartLocation = nextStateLocation; - nextStateLocation = nextStateLocation.AddCol(); - if (c == '\r') - { - if (position + 1 < content.Length && content[position + 1] == '\n') - position++; - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '\n') - { - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '<' && position + 2 < content.Length && content[position + 1] == '#') - { - TagEndLocation = nextStateLocation; - char type = content[position + 2]; - if (type == '@') - { - nextStateLocation = nextStateLocation.AddCols(2); - value = content.Substring(start, position - start); - position += 3; - return State.Directive; - } - else if (type == '=') - { - nextStateLocation = nextStateLocation.AddCols(2); - value = content.Substring(start, position - start); - position += 3; - return State.Expression; - } - else if (type == '+') - { - nextStateLocation = nextStateLocation.AddCols(2); - value = content.Substring(start, position - start); - position += 3; - return State.Helper; - } - else - { - value = content.Substring(start, position - start); - nextStateLocation = nextStateLocation.AddCol(); - position += 2; - return State.Block; - } - } - } - //EOF is only valid when we're in content - value = content.Substring(start); - return State.EOF; - } - - int IsNewLine() - { - int found = 0; - - if (position < content.Length && content[position] == '\r') - { - found++; - } - if (position + found < content.Length && content[position + found] == '\n') - { - found++; - } - return found; - } - - State NextStateInDirective() - { - for (; position < content.Length; position++) - { - char c = content[position]; - if (c == '\r') - { - if (position + 1 < content.Length && content[position + 1] == '\n') - position++; - nextStateLocation = nextStateLocation.AddLine(); - } - else if (c == '\n') - { - nextStateLocation = nextStateLocation.AddLine(); - } - else if (Char.IsLetter(c)) - { - return State.DirectiveName; - } - else if (c == '=') - { - nextStateLocation = nextStateLocation.AddCol(); - position++; - return State.DirectiveValue; - } - else if (c == '#' && position + 1 < content.Length && content[position + 1] == '>') - { - position += 2; - TagEndLocation = nextStateLocation.AddCols(2); - nextStateLocation = nextStateLocation.AddCols(3); - - //skip newlines directly after directives - if ((position += IsNewLine()) > 0) - { - nextStateLocation = nextStateLocation.AddLine(); - } - - return State.Content; - } - else if (!Char.IsWhiteSpace(c)) - { - throw new ParserException("Directive ended unexpectedly with character '" + c + "'", nextStateLocation); - } - else - { - nextStateLocation = nextStateLocation.AddCol(); - } - } - throw new ParserException("Unexpected end of file.", nextStateLocation); - } - - public State State - { - get; - private set; - } - - public int Position - { - get { return position; } - } - - public string Content - { - get { return content; } - } - - public string Value - { - get { return value; } - } - - public Location Location { get; private set; } - public Location TagStartLocation { get; private set; } - public Location TagEndLocation { get; private set; } - } - - public enum State - { - Content = 0, - Directive, - Expression, - Block, - Helper, - DirectiveName, - DirectiveValue, - Name, - EOF - } - - public class ParserException : Exception - { - public ParserException(string message, Location location) - : base(message) - { - Location = location; - } - - public Location Location { get; private set; } - } -} diff --git a/Source/Tools/SharpGen/Utilities.cs b/Source/Tools/SharpGen/Utilities.cs deleted file mode 100644 index 0f90fd1d6..000000000 --- a/Source/Tools/SharpGen/Utilities.cs +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; -using System.Threading; -using System.Xml.Serialization; - -namespace SharpGen -{ - /// - /// Utility class. - /// - public static class Utilities - { - /// - /// Escapes the xml/html text in order to use it inside xml. - /// - /// The string to escape. - /// - public static string EscapeXml(string stringToEscape) - { - return stringToEscape.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'"); - } - - /// - /// Gets a resource from this assembly. - /// - /// The resource name. - /// The text of resource - public static string GetResourceAsString(string resourceName) - { - Assembly asm = Assembly.GetExecutingAssembly(); - - string val = ""; - //' resources are named using a fully qualified name - Stream strm = asm.GetManifestResourceStream(typeof (Utilities).Namespace + "." + resourceName); - - //' read the contents of the embedded file - var reader = new StreamReader(strm); - val = reader.ReadToEnd(); - reader.Close(); - - return val; - } - - /// - /// Imports the XML types. - /// - /// The type. - /// The mappings. - /// The imported types. - /// The importer. - private static void ImportXmlTypes(Type type, List mappings, List importedTypes, XmlReflectionImporter importer) - { - XmlTypeMapping mapping = null; - var importer2 = new XmlReflectionImporter(); - try - { - mapping = importer2.ImportTypeMapping(type); - } - catch (Exception exception) - { - if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException)) - { - throw; - } - return; - } - if (mapping != null) - { - mapping = importer.ImportTypeMapping(type); - mappings.Add(mapping); - importedTypes.Add(type); - } - } - - /// - /// Generates XmlSerializers assembly for this assembly, allowing faster startup with xml serialization. - /// - public static void SGenThisAssembly() - { - var xmlRootTypes = new List(); - var assembly = typeof(Utilities).Assembly; - var mappings = new List(); - var allXmlTypeToSerialize = new List(); - var importer = new XmlReflectionImporter(); - - foreach (var type in assembly.GetTypes()) - { - if (type.GetCustomAttributes(typeof(XmlRootAttribute), true).Length > 0) - { - xmlRootTypes.Add(type); - ImportXmlTypes(type, mappings, allXmlTypeToSerialize, importer); - } - } - - if (allXmlTypeToSerialize.Count == 0) - return; - - string assemblySerializer = XmlSerializer.GetXmlSerializerAssemblyName(allXmlTypeToSerialize[0], null) + ".dll"; - var assemblySerializerTime = File.GetLastWriteTime(assemblySerializer); - - if (!File.Exists(assemblySerializer) || File.GetLastWriteTime(typeof(Utilities).Assembly.Location) > assemblySerializerTime) - { - // Delete previous assembly - File.Delete(assemblySerializer); - - // Regenerate assembly - var parameters = new CompilerParameters(); - string codePath = Path.GetDirectoryName(assembly.Location); - var files = new TempFileCollection(codePath, false); - parameters.TempFiles = files; - parameters.GenerateInMemory = false; - parameters.IncludeDebugInformation = true; - parameters.GenerateInMemory = false; - XmlSerializer.GenerateSerializer(allXmlTypeToSerialize.ToArray(), mappings.ToArray(), parameters); - files.Delete(); - } - else - { - Assembly.LoadFrom(assemblySerializer); - } - } - - /// - /// Determines whether a string contains a given C++ identifier. - /// - /// The string to search. - /// The C++ identifier to search for. - /// - public static bool ContainsCppIdentifier(string str, string identifier) - { - if (string.IsNullOrEmpty(str)) - return string.IsNullOrEmpty(identifier); - - return Regex.IsMatch(str, string.Format(@"\b{0}\b", Regex.Escape(identifier)), RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/Utility.cs b/Source/Tools/SharpGen/Utility.cs deleted file mode 100644 index 999aea028..000000000 --- a/Source/Tools/SharpGen/Utility.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -using System; -using System.IO; -using System.Text.RegularExpressions; - -using Microsoft.Win32; - -namespace SharpGen -{ - public static class Utility - { - /// - /// Escapes the xml/html text in order to use it inside xml. - /// - /// The string to escape. - /// - public static string EscapeHtml(string stringToEscape) - { - return stringToEscape.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'"); - } - - /// - /// Regular expression to match invalid chars in filename - /// - private static readonly Regex RegexInvalidPathChars = new Regex("[" + Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars())) + "]"); - - /// - /// Determines whether the specified file name is a valid filename. - /// - /// Name of the file. - /// - /// true if the specified file name is a valid filename; otherwise, false. - /// - public static bool IsValidFilename(string fileName) - { - return !RegexInvalidPathChars.IsMatch(fileName); - } - - public static string GetProperDirectoryCapitalization(DirectoryInfo dirInfo) - { - // Code from http://stackoverflow.com/questions/478826/c-sharp-filepath-recasing - var parentDirInfo = dirInfo.Parent; - if (null == parentDirInfo) - return dirInfo.Name; - return Path.Combine(GetProperDirectoryCapitalization(parentDirInfo), - parentDirInfo.GetDirectories(dirInfo.Name)[0].Name); - } - - public static string GetProperFilePathCapitalization(string filename) - { - // Code from http://stackoverflow.com/questions/478826/c-sharp-filepath-recasing - var fileInfo = new FileInfo(filename); - DirectoryInfo dirInfo = fileInfo.Directory; - return Path.Combine(GetProperDirectoryCapitalization(dirInfo), - dirInfo.GetFiles(fileInfo.Name)[0].Name); - } - - private static string frameworkRootDirectory = null; - - public static string GetFrameworkRootDirectory() - { - if (frameworkRootDirectory == null) - { - - // Retrieve the install root path for the framework - frameworkRootDirectory = Path.GetFullPath(Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\.NetFramework", false).GetValue("InstallRoot").ToString()); - } - return frameworkRootDirectory; - } - } -} \ No newline at end of file diff --git a/Source/Tools/SharpGen/app.config b/Source/Tools/SharpGen/app.config deleted file mode 100644 index 572a7d6e6..000000000 --- a/Source/Tools/SharpGen/app.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Source/Tools/SharpGen/logo_sharp_gen.ico b/Source/Tools/SharpGen/logo_sharp_gen.ico deleted file mode 100644 index 216e0eba4..000000000 Binary files a/Source/Tools/SharpGen/logo_sharp_gen.ico and /dev/null differ diff --git a/Source/Tools/SharpPak/SharpPak.csproj b/Source/Tools/SharpPak/SharpPak.csproj index ff5703d56..250c9678e 100644 --- a/Source/Tools/SharpPak/SharpPak.csproj +++ b/Source/Tools/SharpPak/SharpPak.csproj @@ -12,6 +12,7 @@ SharpPak v4.5 512 + true @@ -82,4 +83,4 @@ -
\ No newline at end of file +
diff --git a/Source/dummy.txt b/Source/dummy.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Source/uninstall.ps1 b/Source/uninstall.ps1 deleted file mode 100644 index 8cef55d0c..000000000 --- a/Source/uninstall.ps1 +++ /dev/null @@ -1,13 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -"Uninstalling [{0}] from project [{1}]" -f $package.Id, $project.FullName | Write-Host - -# Retrieve the reference to the package -$sharpdx_reference = $project.Object.References.Item($package.Id) -if ($sharpdx_reference) -{ - # Remove the reference - $sharpdx_reference.Remove() - # Save the project - $project.Save() -} diff --git a/appveyor.yml b/appveyor.yml index 01c4ade18..2ffc84b51 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,30 +8,26 @@ environment: secure: w2g0R7PPaadVw7Vk0jrM/ctEqDqDCz6x1FsKTOlu8nQqPsS+bRCE7DTmxTqSmuECM8H0HSwqWlZUbeuxVQEGver2vaxhZQJ47oUn7kXsfJ/jOqUGiEkwEh7K7OsOmML8jer1KpuVeGQEHDPubm24L/x1LDzohhHsYGeWh0BkRNbS6L7W+hdNAN12q5zATrNkzLUr/LwwD9eM6iAfdF8m+sv45Lt9AhTC+zndFKYRRJ6by8iSz3otPV0baAamKw9vl3sL41Sm6GvMEDKQpD0vW0QzhaidBKWaTkKix7/g3SbWg3Yd5ml6UsnrqNSlCFU+xuAzUhyUM4wtIbeW9vX7JG6jmRdHw1YDNGjzV8CaeiMJDR6dCm1HXq0YuFOTZ4yoL3B4r7vdWIEBTH7il3FhmlcmU2cB16AT1JlPJH6itlrHyk1gIic6j71ChSASyazZqukhv7c8DnR+in0oyty4tuNl2KUcXIopyl78akgG0CNFR/CVwtEr5Q7SCZ4OtSb1IA/vS9pu/8x1Hy8Lg5uWaJr8fUMbItW5l6vLtay5YcU2ZIrJAJ+CgZgdGX/myFFJtQ195Fu4Cf4BLjHilwoITwZQpQTH3MGZSvdudoDpZ2xhkAyDZvHEku1HPFdCd+YXUi1ybGifaR0f5U4ZDRsgv2wwDS6O5fGS7dbwnVV2Pqftz7AJ0p/mLijNhkPwuSor9FqfD0moolwhvNC/4ympErV84iySENxp9DJX/i8WHBmu2BMG8afl12nN6f2C7RkNkV9fjr/fmOXmE2/B1+CVVwQdVVi/lRKG4fyiSPopl4wlTyqd959rUUGmXDF32ci+cy+csMF6mXBgIBSvDJm2IMnMLAm5ENssdmpbYnNSX+1TfWszT1PMD3jYETJOHqeq3gSE5d6RHF64+MnpmAIU7B34BuETARZMMAOSZ0STf9cp+DWWWB7pzNFpV3XkCTe5pcFLUwiag8N700IEK7s/EQm//45Nx9WQFhzVWcKiJ4V9DRf/8WlvJoISavFnFEdhxZVT0f5xEPocDD1U9WmoDb5PruElX01LgIq1gx0+m8Q= install: - ps: >- - $env:SharpDXBuildNumber = "$env:APPVEYOR_BUILD_NUMBER" - if(-Not $env:APPVEYOR_PULL_REQUEST_NUMBER) { [IO.File]::WriteAllBytes($env:APPVEYOR_BUILD_FOLDER + "\sharpdx.snk",[Convert]::FromBase64String($env:SharpDXSnkBase64)) $env:SharpDXSign = 'true' if($env:appveyor_repo_tag_name -match '^v[0-9]') { $env:SharpDXNugetBuild = 'true' - $env:SharpDXPackagingDev = 'false' } if($env:appveyor_repo_tag_name -eq 'latest') { $env:SharpDXNugetBuild = 'true' - $env:SharpDXPackagingDev = 'true' } } -build_script: build\build.cmd +build_script: build.cmd test: off artifacts: -- path: build\SharpDX-SDK-*.exe - name: SharpDX SDK - path: bin\*.nupkg name: SharpDX Nugets +nuget: + project_feed: true deploy: - provider: NuGet api_key: secure: 7cthHh+wYWZjhqxaxR6QObRaRnstvFkQOY7MkxIsC5kpQEBlKZXuinf0IybbYxJt on: - SharpDXNugetBuild: true \ No newline at end of file + SharpDXNugetBuild: true diff --git a/build.cmd b/build.cmd new file mode 100644 index 000000000..effe070b0 --- /dev/null +++ b/build.cmd @@ -0,0 +1,3 @@ +msbuild SharpDX.sln /t:Clean /m /p:Configuration=Release;Platform="Any CPU" + +msbuild SharpDX.sln /restore /t:Build;Pack /p:Configuration=Release;Platform="Any CPU" /m \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 000000000..9e0b62536 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "msbuild-sdks": { + "MSBuild.Sdk.Extras": "1.6.65" + } +} \ No newline at end of file diff --git a/version.json b/version.json new file mode 100644 index 000000000..7e8c00a43 --- /dev/null +++ b/version.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", + "version": "4.2.1-beta0", + "publicReleaseRefSpec": [ + "^refs/tags/v\\d+\\.\\d+" // we also release tags starting with vN.N + ], + "cloudBuild": { + "buildNumber": { + "enabled": false + } + } +} \ No newline at end of file